@worktile/theia 3.0.7 → 3.1.0-next.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 (400) hide show
  1. package/components/toolbar/toolbar.component.d.ts +2 -3
  2. package/components/toolbar-dropdown/toolbar-dropdown.component.scss +0 -1
  3. package/components/toolbar-item/toolbar-item.component.d.ts +2 -3
  4. package/editor.component.d.ts +2 -1
  5. package/esm2020/components/color-select/color-select.component.mjs +109 -0
  6. package/{esm2015/components/column-resize/column-resize-notifier.js → esm2020/components/column-resize/column-resize-notifier.mjs} +4 -4
  7. package/{esm2015/components/column-resize/column-resize.directive.js → esm2020/components/column-resize/column-resize.directive.mjs} +4 -4
  8. package/esm2020/components/column-resize/column-resize.module.mjs +33 -0
  9. package/{esm2015/components/column-resize/event-dispatcher.js → esm2020/components/column-resize/event-dispatcher.mjs} +4 -4
  10. package/{esm2015/components/column-resize/overlay-handle.component.js → esm2020/components/column-resize/overlay-handle.component.mjs} +4 -4
  11. package/{esm2015/components/column-resize/resize-ref.js → esm2020/components/column-resize/resize-ref.mjs} +0 -0
  12. package/{esm2015/components/column-resize/resizing.store.js → esm2020/components/column-resize/resizing.store.mjs} +4 -4
  13. package/{esm2015/components/column-resize/selectors.js → esm2020/components/column-resize/selectors.mjs} +0 -0
  14. package/esm2020/components/contextmenu/contextmenu.component.mjs +61 -0
  15. package/esm2020/components/conversion-hint/conversion-hint.component.mjs +54 -0
  16. package/esm2020/components/element/element.component.mjs +23 -0
  17. package/esm2020/components/inline-toolbar/inline-toolbar.component.mjs +138 -0
  18. package/{esm2015/components/nav-split-line/nav-split-line.component.js → esm2020/components/nav-split-line/nav-split-line.component.mjs} +4 -4
  19. package/esm2020/components/table-select/table-select.component.mjs +50 -0
  20. package/esm2020/components/template/template.component.mjs +62 -0
  21. package/{esm2015/components/text/text.component.js → esm2020/components/text/text.component.mjs} +4 -4
  22. package/esm2020/components/toolbar/toolbar.component.mjs +241 -0
  23. package/esm2020/components/toolbar-dropdown/toolbar-dropdown.component.mjs +129 -0
  24. package/esm2020/components/toolbar-group/toolbar-group.component.mjs +110 -0
  25. package/esm2020/components/toolbar-item/toolbar-item.component.mjs +101 -0
  26. package/{esm2015/constants/auto-format-rules.js → esm2020/constants/auto-format-rules.mjs} +0 -0
  27. package/{esm2015/constants/code.js → esm2020/constants/code.mjs} +0 -0
  28. package/{esm2015/constants/color-select.js → esm2020/constants/color-select.mjs} +0 -0
  29. package/{esm2015/constants/default.js → esm2020/constants/default.mjs} +0 -0
  30. package/{esm2015/constants/error.js → esm2020/constants/error.mjs} +0 -0
  31. package/{esm2015/constants/index.js → esm2020/constants/index.mjs} +0 -0
  32. package/{esm2015/constants/node-types.js → esm2020/constants/node-types.mjs} +0 -0
  33. package/{esm2015/constants/selector.js → esm2020/constants/selector.mjs} +0 -0
  34. package/{esm2015/constants/toolbar.js → esm2020/constants/toolbar.mjs} +0 -0
  35. package/{esm2015/core/create-plugin.js → esm2020/core/create-plugin.mjs} +0 -0
  36. package/esm2020/core/create-toolbar.mjs +56 -0
  37. package/{esm2015/core/index.js → esm2020/core/index.mjs} +0 -0
  38. package/esm2020/core/toolbar-item/base-toolbar-item.mjs +90 -0
  39. package/{esm2015/core/utils/combine-plugins.js → esm2020/core/utils/combine-plugins.mjs} +0 -0
  40. package/{esm2015/core/utils/flatten-deep-plugins.js → esm2020/core/utils/flatten-deep-plugins.mjs} +0 -0
  41. package/esm2020/core/utils/get-plugin-options.mjs +3 -0
  42. package/{esm2015/core/utils/get-plugin.js → esm2020/core/utils/get-plugin.mjs} +0 -0
  43. package/esm2020/core/utils/get-plugins.mjs +4 -0
  44. package/{esm2015/core/utils/index.js → esm2020/core/utils/index.mjs} +0 -0
  45. package/esm2020/core/utils/merge-array.mjs +18 -0
  46. package/{esm2015/core/utils/merge-deep-plugins.js → esm2020/core/utils/merge-deep-plugins.mjs} +0 -0
  47. package/{esm2015/core/utils/merge-options.js → esm2020/core/utils/merge-options.mjs} +0 -0
  48. package/{esm2015/core/utils/nested-structure-by-key.js → esm2020/core/utils/nested-structure-by-key.mjs} +0 -0
  49. package/{esm2015/core/utils/plugins-by-key.js → esm2020/core/utils/plugins-by-key.mjs} +0 -0
  50. package/{esm2015/core/with-theia.js → esm2020/core/with-theia.mjs} +0 -0
  51. package/{esm2015/custom-types.js → esm2020/custom-types.mjs} +0 -0
  52. package/esm2020/editor.component.mjs +431 -0
  53. package/{esm2015/editor.module.js → esm2020/editor.module.mjs} +5 -6
  54. package/{esm2015/interfaces/auto-format.js → esm2020/interfaces/auto-format.mjs} +0 -0
  55. package/esm2020/interfaces/editor.mjs +25 -0
  56. package/{esm2015/interfaces/element.js → esm2020/interfaces/element.mjs} +0 -0
  57. package/{esm2015/interfaces/image.js → esm2020/interfaces/image.mjs} +0 -0
  58. package/{esm2015/interfaces/index.js → esm2020/interfaces/index.mjs} +0 -0
  59. package/{esm2015/interfaces/plugins/index.js → esm2020/interfaces/plugins/index.mjs} +0 -0
  60. package/{esm2015/interfaces/plugins/no-infer.js → esm2020/interfaces/plugins/no-infer.mjs} +0 -0
  61. package/{esm2015/interfaces/plugins/plugin-key.js → esm2020/interfaces/plugins/plugin-key.mjs} +0 -0
  62. package/{esm2015/interfaces/plugins/plugins.js → esm2020/interfaces/plugins/plugins.mjs} +0 -0
  63. package/{esm2015/interfaces/plugins/with-override.js → esm2020/interfaces/plugins/with-override.mjs} +0 -0
  64. package/{esm2015/interfaces/reset-block-type-plugin-options.js → esm2020/interfaces/reset-block-type-plugin-options.mjs} +0 -0
  65. package/{esm2015/interfaces/toolbar.js → esm2020/interfaces/toolbar.mjs} +0 -0
  66. package/{esm2015/interfaces/upload.js → esm2020/interfaces/upload.mjs} +1 -1
  67. package/{esm2015/interfaces/utility/index.js → esm2020/interfaces/utility/index.mjs} +0 -0
  68. package/{esm2015/interfaces/utility/nested-structure-by-key.js → esm2020/interfaces/utility/nested-structure-by-key.mjs} +0 -0
  69. package/{esm2015/interfaces/utility/override-by-key.js → esm2020/interfaces/utility/override-by-key.mjs} +0 -0
  70. package/{esm2015/interfaces/utility/types.js → esm2020/interfaces/utility/types.mjs} +0 -0
  71. package/{esm2015/interfaces/valid-children-types.js → esm2020/interfaces/valid-children-types.mjs} +0 -0
  72. package/{esm2015/interfaces/view-base.js → esm2020/interfaces/view-base.mjs} +4 -4
  73. package/{esm2015/pipes.js → esm2020/pipes.mjs} +7 -7
  74. package/esm2020/plugins/align/align.editor.mjs +47 -0
  75. package/{esm2015/plugins/align/align.plugin.js → esm2020/plugins/align/align.plugin.mjs} +0 -0
  76. package/esm2020/plugins/autoformat/autoformat.plugin.mjs +109 -0
  77. package/{esm2015/plugins/autoformat/transforms/auto-format-block.js → esm2020/plugins/autoformat/transforms/auto-format-block.mjs} +0 -0
  78. package/{esm2015/plugins/autoformat/transforms/auto-format-inline.js → esm2020/plugins/autoformat/transforms/auto-format-inline.mjs} +0 -0
  79. package/{esm2015/plugins/blockquote/blockquote.component.js → esm2020/plugins/blockquote/blockquote.component.mjs} +4 -4
  80. package/esm2020/plugins/blockquote/blockquote.editor.mjs +20 -0
  81. package/{esm2015/plugins/blockquote/blockquote.plugin.js → esm2020/plugins/blockquote/blockquote.plugin.mjs} +0 -0
  82. package/esm2020/plugins/code/code.component.mjs +241 -0
  83. package/{esm2015/plugins/code/code.editor.js → esm2020/plugins/code/code.editor.mjs} +0 -0
  84. package/{esm2015/plugins/code/code.plugin.js → esm2020/plugins/code/code.plugin.mjs} +0 -0
  85. package/esm2020/plugins/color/color.editor.mjs +44 -0
  86. package/{esm2015/plugins/color/color.plugin.js → esm2020/plugins/color/color.plugin.mjs} +0 -0
  87. package/esm2020/plugins/color/toolbar-item.component.mjs +123 -0
  88. package/esm2020/plugins/common/auto-insert-data..mjs +77 -0
  89. package/{esm2015/plugins/common/block-card.plugin.js → esm2020/plugins/common/block-card.plugin.mjs} +2 -2
  90. package/esm2020/plugins/common/get-fragment.plugin.mjs +24 -0
  91. package/{esm2015/plugins/common/history.plugin.js → esm2020/plugins/common/history.plugin.mjs} +0 -0
  92. package/{esm2015/plugins/common/move-selection.plugin.js → esm2020/plugins/common/move-selection.plugin.mjs} +0 -0
  93. package/{esm2015/plugins/common/remove-empty.plugin.js → esm2020/plugins/common/remove-empty.plugin.mjs} +0 -0
  94. package/{esm2015/plugins/common/remove-void.plugin.js → esm2020/plugins/common/remove-void.plugin.mjs} +0 -0
  95. package/{esm2015/plugins/common/reset-type.plugin.js → esm2020/plugins/common/reset-type.plugin.mjs} +0 -0
  96. package/{esm2015/plugins/common/transforms.plugin.js → esm2020/plugins/common/transforms.plugin.mjs} +0 -0
  97. package/{esm2015/plugins/deserializers/deserialize-html.plugin.js → esm2020/plugins/deserializers/deserialize-html.plugin.mjs} +0 -0
  98. package/{esm2015/plugins/deserializers/deserialize-md.plugin.js → esm2020/plugins/deserializers/deserialize-md.plugin.mjs} +0 -0
  99. package/esm2020/plugins/font-size/font-size.editor.mjs +98 -0
  100. package/{esm2015/plugins/heading/heading.editor.js → esm2020/plugins/heading/heading.editor.mjs} +0 -0
  101. package/{esm2015/plugins/heading/heading.plugin.js → esm2020/plugins/heading/heading.plugin.mjs} +0 -0
  102. package/{esm2015/plugins/hr/hr.component.js → esm2020/plugins/hr/hr.component.mjs} +4 -4
  103. package/{esm2015/plugins/hr/hr.editor.js → esm2020/plugins/hr/hr.editor.mjs} +0 -0
  104. package/{esm2015/plugins/hr/hr.plugin.js → esm2020/plugins/hr/hr.plugin.mjs} +0 -0
  105. package/esm2020/plugins/image/image.component.mjs +365 -0
  106. package/{esm2015/plugins/image/image.editor.js → esm2020/plugins/image/image.editor.mjs} +3 -5
  107. package/esm2020/plugins/image/image.plugin.mjs +57 -0
  108. package/esm2020/plugins/indent/indent.editor.mjs +71 -0
  109. package/esm2020/plugins/indent/indent.plugin.mjs +58 -0
  110. package/{esm2015/plugins/indent/on-keydown-indent.js → esm2020/plugins/indent/on-keydown-indent.mjs} +0 -0
  111. package/{esm2015/plugins/index.js → esm2020/plugins/index.mjs} +0 -0
  112. package/{esm2015/plugins/inline-code/inline-code.component.js → esm2020/plugins/inline-code/inline-code.component.mjs} +4 -4
  113. package/{esm2015/plugins/inline-code/inline-code.editor.js → esm2020/plugins/inline-code/inline-code.editor.mjs} +2 -3
  114. package/{esm2015/plugins/inline-code/inline-code.plugin.js → esm2020/plugins/inline-code/inline-code.plugin.mjs} +0 -0
  115. package/esm2020/plugins/link/edit/link-edit.component.mjs +105 -0
  116. package/esm2020/plugins/link/hover/link-hover.component.mjs +36 -0
  117. package/{esm2015/plugins/link/link.component.js → esm2020/plugins/link/link.component.mjs} +7 -7
  118. package/{esm2015/plugins/link/link.editor.js → esm2020/plugins/link/link.editor.mjs} +0 -0
  119. package/{esm2015/plugins/link/link.plugin.js → esm2020/plugins/link/link.plugin.mjs} +0 -0
  120. package/{esm2015/plugins/link/link.types.js → esm2020/plugins/link/link.types.mjs} +0 -0
  121. package/esm2020/plugins/list/components/bulleted-list.component.mjs +33 -0
  122. package/esm2020/plugins/list/components/list-item.component.mjs +93 -0
  123. package/esm2020/plugins/list/components/numbered-list.component.mjs +39 -0
  124. package/{esm2015/plugins/list/list.editor.js → esm2020/plugins/list/list.editor.mjs} +0 -0
  125. package/esm2020/plugins/list/list.plugin.mjs +286 -0
  126. package/{esm2015/plugins/list/normalizers/get-list-normalizer.js → esm2020/plugins/list/normalizers/get-list-normalizer.mjs} +0 -0
  127. package/esm2020/plugins/list/normalizers/normalize-list-item.mjs +18 -0
  128. package/{esm2015/plugins/list/normalizers/normalize-no.js → esm2020/plugins/list/normalizers/normalize-no.mjs} +0 -0
  129. package/{esm2015/plugins/list/on-key-down-list.js → esm2020/plugins/list/on-key-down-list.mjs} +0 -0
  130. package/{esm2015/plugins/list/queries/get-list-item-entry.js → esm2020/plugins/list/queries/get-list-item-entry.mjs} +0 -0
  131. package/{esm2015/plugins/list/queries/get-list-item-sublist.js → esm2020/plugins/list/queries/get-list-item-sublist.mjs} +0 -0
  132. package/{esm2015/plugins/list/queries/get-list-types.js → esm2020/plugins/list/queries/get-list-types.mjs} +0 -0
  133. package/{esm2015/plugins/list/queries/get-start-list-item.js → esm2020/plugins/list/queries/get-start-list-item.mjs} +0 -0
  134. package/{esm2015/plugins/list/queries/has-list-in-list-item.js → esm2020/plugins/list/queries/has-list-in-list-item.mjs} +0 -0
  135. package/{esm2015/plugins/list/queries/is-in-list.js → esm2020/plugins/list/queries/is-in-list.mjs} +0 -0
  136. package/{esm2015/plugins/list/queries/is-list-nested.js → esm2020/plugins/list/queries/is-list-nested.mjs} +0 -0
  137. package/{esm2015/plugins/list/queries/is-list.js → esm2020/plugins/list/queries/is-list.mjs} +0 -0
  138. package/{esm2015/plugins/list/queries/is-node-type-list.js → esm2020/plugins/list/queries/is-node-type-list.mjs} +0 -0
  139. package/{esm2015/plugins/list/queries/is-selection-at-list-item-start.js → esm2020/plugins/list/queries/is-selection-at-list-item-start.mjs} +0 -0
  140. package/{esm2015/plugins/list/queries/is-selection-in-same-list-item.js → esm2020/plugins/list/queries/is-selection-in-same-list-item.mjs} +0 -0
  141. package/{esm2015/plugins/list/queries/is-single-list-item.js → esm2020/plugins/list/queries/is-single-list-item.mjs} +0 -0
  142. package/{esm2015/plugins/list/transforms/insert-list-data.js → esm2020/plugins/list/transforms/insert-list-data.mjs} +0 -0
  143. package/{esm2015/plugins/list/transforms/insert-list-item.js → esm2020/plugins/list/transforms/insert-list-item.mjs} +0 -0
  144. package/{esm2015/plugins/list/transforms/move-list-item-down.js → esm2020/plugins/list/transforms/move-list-item-down.mjs} +0 -0
  145. package/{esm2015/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.js → esm2020/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs} +0 -0
  146. package/{esm2015/plugins/list/transforms/move-list-item-sublist-items-to-list.js → esm2020/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs} +0 -0
  147. package/{esm2015/plugins/list/transforms/move-list-item-up.js → esm2020/plugins/list/transforms/move-list-item-up.mjs} +0 -0
  148. package/{esm2015/plugins/list/transforms/unwrap-list.js → esm2020/plugins/list/transforms/unwrap-list.mjs} +0 -0
  149. package/{esm2015/plugins/list/types.js → esm2020/plugins/list/types.mjs} +0 -0
  150. package/esm2020/plugins/mark/mark.editor.mjs +28 -0
  151. package/esm2020/plugins/mark/mark.plugin.mjs +105 -0
  152. package/esm2020/plugins/node-id/node-id.plugin.mjs +78 -0
  153. package/esm2020/plugins/normalizers/insert-paragraph-nodes.mjs +28 -0
  154. package/{esm2015/plugins/normalizers/remove-empty-nodes.js → esm2020/plugins/normalizers/remove-empty-nodes.mjs} +0 -0
  155. package/esm2020/plugins/normalizers/trailing-node.plugin.mjs +33 -0
  156. package/{esm2015/plugins/paint-format/paint-format.editor.js → esm2020/plugins/paint-format/paint-format.editor.mjs} +0 -0
  157. package/{esm2015/plugins/public-api.js → esm2020/plugins/public-api.mjs} +0 -0
  158. package/esm2020/plugins/quick-insert/components/quick-insert.component.mjs +96 -0
  159. package/esm2020/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.mjs +80 -0
  160. package/{esm2015/plugins/quick-insert/quick-insert.editor.js → esm2020/plugins/quick-insert/quick-insert.editor.mjs} +0 -0
  161. package/esm2020/plugins/quick-insert/quick-insert.plugin.mjs +74 -0
  162. package/esm2020/plugins/soft-break/soft-break.plugin.mjs +36 -0
  163. package/{esm2015/plugins/soft-break/soft-break.types.js → esm2020/plugins/soft-break/soft-break.types.mjs} +0 -0
  164. package/esm2020/plugins/table/components/insert-mark/insert-mark.component.mjs +100 -0
  165. package/{esm2015/plugins/table/components/row/row.component.js → esm2020/plugins/table/components/row/row.component.mjs} +4 -4
  166. package/esm2020/plugins/table/components/table.component.mjs +461 -0
  167. package/esm2020/plugins/table/components/td/td.component.mjs +696 -0
  168. package/{esm2015/plugins/table/components/toolbar/table-options.component.js → esm2020/plugins/table/components/toolbar/table-options.component.mjs} +8 -5
  169. package/esm2020/plugins/table/components/toolbar/table-toolbar.component.mjs +159 -0
  170. package/{esm2015/plugins/table/table.editor.js → esm2020/plugins/table/table.editor.mjs} +0 -0
  171. package/esm2020/plugins/table/table.plugin.mjs +427 -0
  172. package/{esm2015/plugins/table/table.service.js → esm2020/plugins/table/table.service.mjs} +4 -4
  173. package/esm2020/plugins/table/table.store.mjs +484 -0
  174. package/{esm2015/plugins/table/table.types.js → esm2020/plugins/table/table.types.mjs} +0 -0
  175. package/esm2020/plugins/table/toolbar-item.component.mjs +85 -0
  176. package/esm2020/plugins/table/transforms/clear-cell.mjs +14 -0
  177. package/{esm2015/plugins/table/transforms/clear-table-node.js → esm2020/plugins/table/transforms/clear-table-node.mjs} +0 -0
  178. package/{esm2015/plugins/table/transforms/insert-column.js → esm2020/plugins/table/transforms/insert-column.mjs} +0 -0
  179. package/{esm2015/plugins/table/transforms/insert-row.js → esm2020/plugins/table/transforms/insert-row.mjs} +0 -0
  180. package/esm2020/plugins/table/transforms/insert-table.mjs +15 -0
  181. package/{esm2015/plugins/table/transforms/remove-column.js → esm2020/plugins/table/transforms/remove-column.mjs} +0 -0
  182. package/{esm2015/plugins/table/transforms/remove-row.js → esm2020/plugins/table/transforms/remove-row.mjs} +0 -0
  183. package/{esm2015/plugins/table/transforms/remove-table.js → esm2020/plugins/table/transforms/remove-table.mjs} +0 -0
  184. package/{esm2015/plugins/table/utils/add-columns.js → esm2020/plugins/table/utils/add-columns.mjs} +0 -0
  185. package/{esm2015/plugins/table/utils/calc-anchor-position.js → esm2020/plugins/table/utils/calc-anchor-position.mjs} +0 -0
  186. package/{esm2015/plugins/table/utils/calc-span.js → esm2020/plugins/table/utils/calc-span.mjs} +0 -0
  187. package/{esm2015/plugins/table/utils/create-cell.js → esm2020/plugins/table/utils/create-cell.mjs} +0 -0
  188. package/{esm2015/plugins/table/utils/create-row.js → esm2020/plugins/table/utils/create-row.mjs} +0 -0
  189. package/{esm2015/plugins/table/utils/create-table.js → esm2020/plugins/table/utils/create-table.mjs} +0 -0
  190. package/{esm2015/plugins/table/utils/get-base-height.js → esm2020/plugins/table/utils/get-base-height.mjs} +0 -0
  191. package/{esm2015/plugins/table/utils/get-select-cell-node.js → esm2020/plugins/table/utils/get-select-cell-node.mjs} +5 -2
  192. package/{esm2015/plugins/table/utils/index.js → esm2020/plugins/table/utils/index.mjs} +0 -0
  193. package/{esm2015/plugins/table/utils/is-range-in-table.js → esm2020/plugins/table/utils/is-range-in-table.mjs} +0 -0
  194. package/{esm2015/plugins/table/utils/is-selection-in-table.js → esm2020/plugins/table/utils/is-selection-in-table.mjs} +0 -0
  195. package/{esm2015/plugins/table/utils/is-virtual-key.js → esm2020/plugins/table/utils/is-virtual-key.mjs} +0 -0
  196. package/{esm2015/plugins/table/utils/merge-cell.js → esm2020/plugins/table/utils/merge-cell.mjs} +0 -0
  197. package/{esm2015/plugins/table/utils/next-path.js → esm2020/plugins/table/utils/next-path.mjs} +0 -0
  198. package/{esm2015/plugins/table/utils/normalize-table.js → esm2020/plugins/table/utils/normalize-table.mjs} +0 -0
  199. package/{esm2015/plugins/table/utils/remove-columns.js → esm2020/plugins/table/utils/remove-columns.mjs} +0 -0
  200. package/{esm2015/plugins/table/utils/set-menu-cell-invisibility.js → esm2020/plugins/table/utils/set-menu-cell-invisibility.mjs} +0 -0
  201. package/{esm2015/plugins/table/utils/split-cell.js → esm2020/plugins/table/utils/split-cell.mjs} +0 -0
  202. package/{esm2015/plugins/table/utils/table-position.js → esm2020/plugins/table/utils/table-position.mjs} +0 -0
  203. package/esm2020/plugins/todo-item/todo-item.component.mjs +64 -0
  204. package/{esm2015/plugins/todo-item/todo-item.editor.js → esm2020/plugins/todo-item/todo-item.editor.mjs} +0 -0
  205. package/{esm2015/plugins/todo-item/todo-item.plugin.js → esm2020/plugins/todo-item/todo-item.plugin.mjs} +0 -0
  206. package/esm2020/plugins/vertical-align/toolbar-item.component.mjs +83 -0
  207. package/{esm2015/plugins/vertical-align/vertical-align.editor.js → esm2020/plugins/vertical-align/vertical-align.editor.mjs} +0 -0
  208. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  209. package/{esm2015/queries/anchor-block-entry.js → esm2020/queries/anchor-block-entry.mjs} +0 -0
  210. package/{esm2015/queries/anchor-block.js → esm2020/queries/anchor-block.mjs} +0 -0
  211. package/{esm2015/queries/anchor-inline-entry.js → esm2020/queries/anchor-inline-entry.mjs} +0 -0
  212. package/{esm2015/queries/find-descendant.js → esm2020/queries/find-descendant.mjs} +0 -0
  213. package/{esm2015/queries/find-node.js → esm2020/queries/find-node.mjs} +0 -0
  214. package/{esm2015/queries/find-path.js → esm2020/queries/find-path.mjs} +0 -0
  215. package/esm2020/queries/get-above-by-type.mjs +14 -0
  216. package/{esm2015/queries/get-above.js → esm2020/queries/get-above.mjs} +0 -0
  217. package/{esm2015/queries/get-anchor-block-entry.js → esm2020/queries/get-anchor-block-entry.mjs} +0 -0
  218. package/esm2020/queries/get-block-above.mjs +10 -0
  219. package/esm2020/queries/get-block-card-above.mjs +10 -0
  220. package/{esm2015/queries/get-block-card-cursor.js → esm2020/queries/get-block-card-cursor.mjs} +0 -0
  221. package/{esm2015/queries/get-container-blocks.js → esm2020/queries/get-container-blocks.mjs} +0 -0
  222. package/{esm2015/queries/get-directly-parent.js → esm2020/queries/get-directly-parent.mjs} +0 -0
  223. package/{esm2015/queries/get-insert-elements-path.js → esm2020/queries/get-insert-elements-path.mjs} +0 -0
  224. package/{esm2015/queries/get-last-child-path.js → esm2020/queries/get-last-child-path.mjs} +0 -0
  225. package/{esm2015/queries/get-last-node.js → esm2020/queries/get-last-node.mjs} +0 -0
  226. package/{esm2015/queries/get-next-sibling-nodes.js → esm2020/queries/get-next-sibling-nodes.mjs} +0 -0
  227. package/{esm2015/queries/get-node.js → esm2020/queries/get-node.mjs} +0 -0
  228. package/esm2020/queries/get-nodes-by-type.mjs +15 -0
  229. package/{esm2015/queries/get-nodes.js → esm2020/queries/get-nodes.mjs} +0 -0
  230. package/{esm2015/queries/get-parent.js → esm2020/queries/get-parent.mjs} +0 -0
  231. package/esm2020/queries/get-plain-text.mjs +16 -0
  232. package/{esm2015/queries/get-plugin-by-toolbar.js → esm2020/queries/get-plugin-by-toolbar.mjs} +0 -0
  233. package/{esm2015/queries/get-point-before.js → esm2020/queries/get-point-before.mjs} +0 -0
  234. package/{esm2015/queries/get-point-from-location.js → esm2020/queries/get-point-from-location.mjs} +0 -0
  235. package/{esm2015/queries/get-previous-path.js → esm2020/queries/get-previous-path.mjs} +0 -0
  236. package/{esm2015/queries/get-rang-from-block-start.js → esm2020/queries/get-rang-from-block-start.mjs} +0 -0
  237. package/{esm2015/queries/get-range-before.js → esm2020/queries/get-range-before.mjs} +0 -0
  238. package/esm2020/queries/get-selection-marks.mjs +18 -0
  239. package/{esm2015/queries/get-selection-nodes-by-type.js → esm2020/queries/get-selection-nodes-by-type.mjs} +0 -0
  240. package/{esm2015/queries/get-text.js → esm2020/queries/get-text.mjs} +0 -0
  241. package/esm2020/queries/get-toolbar-disabled.mjs +13 -0
  242. package/esm2020/queries/index.mjs +59 -0
  243. package/{esm2015/queries/is-across-blocks.js → esm2020/queries/is-across-blocks.mjs} +0 -0
  244. package/{esm2015/queries/is-ancestor-empty.js → esm2020/queries/is-ancestor-empty.mjs} +0 -0
  245. package/{esm2015/queries/is-ancestor.js → esm2020/queries/is-ancestor.mjs} +0 -0
  246. package/{esm2015/queries/is-block-above-empty.js → esm2020/queries/is-block-above-empty.mjs} +0 -0
  247. package/{esm2015/queries/is-block-active.js → esm2020/queries/is-block-active.mjs} +0 -0
  248. package/{esm2015/queries/is-block-card-cursor.js → esm2020/queries/is-block-card-cursor.mjs} +0 -0
  249. package/{esm2015/queries/is-block-text-empty-after-selection.js → esm2020/queries/is-block-text-empty-after-selection.mjs} +0 -0
  250. package/{esm2015/queries/is-collapsed.js → esm2020/queries/is-collapsed.mjs} +0 -0
  251. package/{esm2015/queries/is-contain-nested-type.js → esm2020/queries/is-contain-nested-type.mjs} +0 -0
  252. package/{esm2015/queries/is-container-type.js → esm2020/queries/is-container-type.mjs} +0 -0
  253. package/{esm2015/queries/is-descendant.js → esm2020/queries/is-descendant.mjs} +0 -0
  254. package/esm2020/queries/is-empty-content.mjs +15 -0
  255. package/{esm2015/queries/is-empty-paragraph-by-path.js → esm2020/queries/is-empty-paragraph-by-path.mjs} +0 -0
  256. package/{esm2015/queries/is-empty-paragraph.js → esm2020/queries/is-empty-paragraph.mjs} +0 -0
  257. package/{esm2015/queries/is-first-child.js → esm2020/queries/is-first-child.mjs} +0 -0
  258. package/{esm2015/queries/is-include-types.js → esm2020/queries/is-include-types.mjs} +0 -0
  259. package/{esm2015/queries/is-node-type-in.js → esm2020/queries/is-node-type-in.mjs} +0 -0
  260. package/{esm2015/queries/is-node-type.js → esm2020/queries/is-node-type.mjs} +0 -0
  261. package/{esm2015/queries/is-paragraph.js → esm2020/queries/is-paragraph.mjs} +0 -0
  262. package/{esm2015/queries/is-point-at-root.js → esm2020/queries/is-point-at-root.mjs} +0 -0
  263. package/esm2020/queries/is-range-across-blocks.mjs +22 -0
  264. package/{esm2015/queries/is-range-at-root.js → esm2020/queries/is-range-at-root.mjs} +0 -0
  265. package/{esm2015/queries/is-start.js → esm2020/queries/is-start.mjs} +0 -0
  266. package/{esm2015/queries/some-node.js → esm2020/queries/some-node.mjs} +0 -0
  267. package/{esm2015/services/color-select.service.js → esm2020/services/color-select.service.mjs} +4 -4
  268. package/esm2020/services/context.service.mjs +59 -0
  269. package/{esm2015/services/table-contextmenu.service.js → esm2020/services/table-contextmenu.service.mjs} +4 -4
  270. package/esm2020/services/toolbar.service.mjs +48 -0
  271. package/{esm2015/shortcuts/index.js → esm2020/shortcuts/index.mjs} +0 -0
  272. package/{esm2015/shortcuts/mark.js → esm2020/shortcuts/mark.mjs} +0 -0
  273. package/{esm2015/transforms/apply-deep-to-nodes.js → esm2020/transforms/apply-deep-to-nodes.mjs} +0 -0
  274. package/{esm2015/transforms/clear-marks.js → esm2020/transforms/clear-marks.mjs} +0 -0
  275. package/{esm2015/transforms/close-conversion-hint.js → esm2020/transforms/close-conversion-hint.mjs} +0 -0
  276. package/{esm2015/transforms/delete-element.js → esm2020/transforms/delete-element.mjs} +0 -0
  277. package/{esm2015/transforms/handle-continual-delete-backward.js → esm2020/transforms/handle-continual-delete-backward.mjs} +0 -0
  278. package/{esm2015/transforms/handle-continual-insert-break.js → esm2020/transforms/handle-continual-insert-break.mjs} +0 -0
  279. package/{esm2015/transforms/index.js → esm2020/transforms/index.mjs} +0 -0
  280. package/esm2020/transforms/insert-elements.mjs +34 -0
  281. package/{esm2015/transforms/insert-paragraph.js → esm2020/transforms/insert-paragraph.mjs} +0 -0
  282. package/esm2020/transforms/merge-deep-to-nodes.mjs +9 -0
  283. package/{esm2015/transforms/move-children.js → esm2020/transforms/move-children.mjs} +0 -0
  284. package/{esm2015/transforms/on-keydown-reset-block-type.js → esm2020/transforms/on-keydown-reset-block-type.mjs} +0 -0
  285. package/{esm2015/transforms/set-end-selection.js → esm2020/transforms/set-end-selection.mjs} +0 -0
  286. package/{esm2015/transforms/set-marks.js → esm2020/transforms/set-marks.mjs} +0 -0
  287. package/{esm2015/transforms/set-node.js → esm2020/transforms/set-node.mjs} +0 -0
  288. package/{esm2015/transforms/split-node.js → esm2020/transforms/split-node.mjs} +0 -0
  289. package/{esm2015/transforms/un-hang-range.js → esm2020/transforms/un-hang-range.mjs} +0 -0
  290. package/{esm2015/transforms/un-wrap.js → esm2020/transforms/un-wrap.mjs} +0 -0
  291. package/esm2020/transforms/unwrap-nodes-by-type.mjs +14 -0
  292. package/{esm2015/utils/auto-focus.js → esm2020/utils/auto-focus.mjs} +0 -0
  293. package/{esm2015/utils/auto-scroll-view.js → esm2020/utils/auto-scroll-view.mjs} +0 -0
  294. package/{esm2015/utils/cast-array.js → esm2020/utils/cast-array.mjs} +0 -0
  295. package/{esm2015/utils/common.js → esm2020/utils/common.mjs} +0 -0
  296. package/{esm2015/utils/create-empty-paragraph.js → esm2020/utils/create-empty-paragraph.mjs} +0 -0
  297. package/{esm2015/utils/data-transform.js → esm2020/utils/data-transform.mjs} +0 -0
  298. package/{esm2015/utils/dom.js → esm2020/utils/dom.mjs} +0 -0
  299. package/{esm2015/utils/editor-uuid.js → esm2020/utils/editor-uuid.mjs} +0 -0
  300. package/{esm2015/utils/fragment.js → esm2020/utils/fragment.mjs} +0 -0
  301. package/{esm2015/utils/get-editable-element-height.js → esm2020/utils/get-editable-element-height.mjs} +0 -0
  302. package/{esm2015/utils/get-toolbar-class.js → esm2020/utils/get-toolbar-class.mjs} +0 -0
  303. package/{esm2015/utils/id-creator.js → esm2020/utils/id-creator.mjs} +0 -0
  304. package/{esm2015/utils/index.js → esm2020/utils/index.mjs} +0 -0
  305. package/{esm2015/utils/is-clean-empty-paragraph.js → esm2020/utils/is-clean-empty-paragraph.mjs} +0 -0
  306. package/esm2020/utils/is-inline.mjs +9 -0
  307. package/{esm2015/utils/lodash.js → esm2020/utils/lodash.mjs} +0 -0
  308. package/esm2020/utils/match.mjs +32 -0
  309. package/{esm2015/utils/merge-element-options.js → esm2020/utils/merge-element-options.mjs} +0 -0
  310. package/{esm2015/utils/weak-maps.js → esm2020/utils/weak-maps.mjs} +0 -0
  311. package/{esm2015/worktile-theia.js → esm2020/worktile-theia.mjs} +0 -0
  312. package/fesm2015/{worktile-theia.js → worktile-theia.mjs} +289 -332
  313. package/fesm2015/worktile-theia.mjs.map +1 -0
  314. package/fesm2020/worktile-theia.mjs +13739 -0
  315. package/fesm2020/worktile-theia.mjs.map +1 -0
  316. package/interfaces/editor.d.ts +3 -3
  317. package/interfaces/upload.d.ts +1 -1
  318. package/package.json +19 -6
  319. package/plugins/image/image.component.d.ts +4 -1
  320. package/queries/index.d.ts +2 -1
  321. package/queries/is-empty-content.d.ts +2 -0
  322. package/services/context.service.d.ts +8 -4
  323. package/bundles/worktile-theia.umd.js +0 -14888
  324. package/bundles/worktile-theia.umd.js.map +0 -1
  325. package/esm2015/components/color-select/color-select.component.js +0 -113
  326. package/esm2015/components/column-resize/column-resize.module.js +0 -34
  327. package/esm2015/components/contextmenu/contextmenu.component.js +0 -64
  328. package/esm2015/components/conversion-hint/conversion-hint.component.js +0 -59
  329. package/esm2015/components/element/element.component.js +0 -24
  330. package/esm2015/components/inline-toolbar/inline-toolbar.component.js +0 -139
  331. package/esm2015/components/table-select/table-select.component.js +0 -53
  332. package/esm2015/components/template/template.component.js +0 -66
  333. package/esm2015/components/toolbar/toolbar.component.js +0 -250
  334. package/esm2015/components/toolbar-dropdown/toolbar-dropdown.component.js +0 -133
  335. package/esm2015/components/toolbar-group/toolbar-group.component.js +0 -116
  336. package/esm2015/components/toolbar-item/toolbar-item.component.js +0 -105
  337. package/esm2015/core/create-toolbar.js +0 -57
  338. package/esm2015/core/toolbar-item/base-toolbar-item.js +0 -92
  339. package/esm2015/core/utils/get-plugin-options.js +0 -3
  340. package/esm2015/core/utils/get-plugins.js +0 -5
  341. package/esm2015/core/utils/merge-array.js +0 -18
  342. package/esm2015/editor.component.js +0 -427
  343. package/esm2015/interfaces/editor.js +0 -23
  344. package/esm2015/plugins/align/align.editor.js +0 -48
  345. package/esm2015/plugins/autoformat/autoformat.plugin.js +0 -110
  346. package/esm2015/plugins/blockquote/blockquote.editor.js +0 -21
  347. package/esm2015/plugins/code/code.component.js +0 -245
  348. package/esm2015/plugins/color/color.editor.js +0 -45
  349. package/esm2015/plugins/color/toolbar-item.component.js +0 -124
  350. package/esm2015/plugins/common/auto-insert-data..js +0 -78
  351. package/esm2015/plugins/common/get-fragment.plugin.js +0 -25
  352. package/esm2015/plugins/font-size/font-size.editor.js +0 -98
  353. package/esm2015/plugins/image/image.component.js +0 -366
  354. package/esm2015/plugins/image/image.plugin.js +0 -58
  355. package/esm2015/plugins/indent/indent.editor.js +0 -73
  356. package/esm2015/plugins/indent/indent.plugin.js +0 -60
  357. package/esm2015/plugins/link/edit/link-edit.component.js +0 -108
  358. package/esm2015/plugins/link/hover/link-hover.component.js +0 -39
  359. package/esm2015/plugins/list/components/bulleted-list.component.js +0 -34
  360. package/esm2015/plugins/list/components/list-item.component.js +0 -95
  361. package/esm2015/plugins/list/components/numbered-list.component.js +0 -40
  362. package/esm2015/plugins/list/list.plugin.js +0 -281
  363. package/esm2015/plugins/list/normalizers/normalize-list-item.js +0 -19
  364. package/esm2015/plugins/mark/mark.editor.js +0 -29
  365. package/esm2015/plugins/mark/mark.plugin.js +0 -102
  366. package/esm2015/plugins/node-id/node-id.plugin.js +0 -69
  367. package/esm2015/plugins/normalizers/insert-paragraph-nodes.js +0 -29
  368. package/esm2015/plugins/normalizers/trailing-node.plugin.js +0 -34
  369. package/esm2015/plugins/quick-insert/components/quick-insert.component.js +0 -102
  370. package/esm2015/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.js +0 -84
  371. package/esm2015/plugins/quick-insert/quick-insert.plugin.js +0 -75
  372. package/esm2015/plugins/soft-break/soft-break.plugin.js +0 -37
  373. package/esm2015/plugins/table/components/insert-mark/insert-mark.component.js +0 -103
  374. package/esm2015/plugins/table/components/table.component.js +0 -470
  375. package/esm2015/plugins/table/components/td/td.component.js +0 -698
  376. package/esm2015/plugins/table/components/toolbar/table-toolbar.component.js +0 -162
  377. package/esm2015/plugins/table/table.plugin.js +0 -424
  378. package/esm2015/plugins/table/table.store.js +0 -480
  379. package/esm2015/plugins/table/toolbar-item.component.js +0 -86
  380. package/esm2015/plugins/table/transforms/clear-cell.js +0 -11
  381. package/esm2015/plugins/table/transforms/insert-table.js +0 -15
  382. package/esm2015/plugins/todo-item/todo-item.component.js +0 -66
  383. package/esm2015/plugins/vertical-align/toolbar-item.component.js +0 -90
  384. package/esm2015/queries/get-above-by-type.js +0 -11
  385. package/esm2015/queries/get-block-above.js +0 -7
  386. package/esm2015/queries/get-block-card-above.js +0 -7
  387. package/esm2015/queries/get-nodes-by-type.js +0 -12
  388. package/esm2015/queries/get-plain-text.js +0 -16
  389. package/esm2015/queries/get-selection-marks.js +0 -19
  390. package/esm2015/queries/get-toolbar-disabled.js +0 -14
  391. package/esm2015/queries/index.js +0 -58
  392. package/esm2015/queries/is-range-across-blocks.js +0 -18
  393. package/esm2015/services/context.service.js +0 -59
  394. package/esm2015/services/toolbar.service.js +0 -48
  395. package/esm2015/transforms/insert-elements.js +0 -35
  396. package/esm2015/transforms/merge-deep-to-nodes.js +0 -9
  397. package/esm2015/transforms/unwrap-nodes-by-type.js +0 -11
  398. package/esm2015/utils/is-inline.js +0 -10
  399. package/esm2015/utils/match.js +0 -29
  400. package/fesm2015/worktile-theia.js.map +0 -1
@@ -0,0 +1,241 @@
1
+ import { Component, Input, ViewChild, ViewContainerRef, Inject } from '@angular/core';
2
+ import { ToolbarItemType } from '../../interfaces/toolbar';
3
+ import { TheToolbarGroupToken, ToolbarMoreGroup } from '../../constants/toolbar';
4
+ import { ElementKinds, ToolbarActionTypes } from '../../constants/node-types';
5
+ import { TheToolbarItemComponent } from '../toolbar-item/toolbar-item.component';
6
+ import { NavSplitLineComponent } from '../nav-split-line/nav-split-line.component';
7
+ import { TheToolbarDropdownComponent } from '../toolbar-dropdown/toolbar-dropdown.component';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "ngx-tethys/nav";
10
+ import * as i2 from "@angular/common";
11
+ export class TheToolbarComponent {
12
+ constructor(cdr, elementRef, ngZone, toolbarGroupComponent) {
13
+ this.cdr = cdr;
14
+ this.elementRef = elementRef;
15
+ this.ngZone = ngZone;
16
+ this.toolbarGroupComponent = toolbarGroupComponent;
17
+ this.toolbarItems = [];
18
+ this.containerClass = [];
19
+ this.isMore = true;
20
+ this.components = new Map();
21
+ this.moreGroupMenu = ToolbarMoreGroup;
22
+ this.elementWidth = 0;
23
+ }
24
+ ngOnInit() {
25
+ this.setToolbarClass();
26
+ this.renderToolbarView();
27
+ this.selectionChange(this.editor);
28
+ if (this.isMore) {
29
+ this.resizeElement();
30
+ }
31
+ }
32
+ ngOnChanges(changes) {
33
+ const toolbarItems = changes.toolbarItems;
34
+ if (toolbarItems && !toolbarItems.firstChange) {
35
+ this.renderToolbarView();
36
+ }
37
+ }
38
+ ngOnDestroy() {
39
+ if (this.resizeObserver) {
40
+ this.resizeObserver.disconnect();
41
+ }
42
+ }
43
+ setToolbarClass() {
44
+ if (this.editor && !!this.containerClass.length) {
45
+ this.elementRef.nativeElement.classList.add(...this.containerClass);
46
+ }
47
+ }
48
+ resizeElement() {
49
+ const editableElement = this.elementRef.nativeElement;
50
+ // @ts-ignore
51
+ this.resizeObserver = new ResizeObserver(entries => {
52
+ for (let entry of entries) {
53
+ const { width } = entry.contentRect;
54
+ if (this.isMore && this.elementWidth !== width) {
55
+ this.elementWidth = width;
56
+ this.renderToolbarView();
57
+ }
58
+ }
59
+ });
60
+ this.resizeObserver.observe(editableElement);
61
+ }
62
+ selectionChange(editor) {
63
+ const toolbarItems = [...this.toolbarItems, this.moreGroupMenu];
64
+ for (const item of toolbarItems) {
65
+ if (item.key !== ToolbarActionTypes.split) {
66
+ const itemComponent = this.components.get(item.key);
67
+ if (itemComponent && itemComponent.instance.selectionChange) {
68
+ itemComponent.instance.selectionChange(editor);
69
+ }
70
+ }
71
+ }
72
+ }
73
+ renderToolbarView() {
74
+ this.components.clear();
75
+ this.toolbarContainer.clear();
76
+ const toolbarItems = this.toolbarItemsCompose();
77
+ const { items, group } = toolbarItems;
78
+ this.ngZone.run(() => {
79
+ for (const item of items) {
80
+ if (item.key === ToolbarActionTypes.split) {
81
+ this.createToolbarSplit();
82
+ continue;
83
+ }
84
+ this.createToolbarItem(item);
85
+ }
86
+ this.createMoreGroup(group);
87
+ });
88
+ this.cdr.markForCheck();
89
+ }
90
+ /**
91
+ * calculation display toolbar and more grouped toolbars
92
+ *
93
+ * ┌──────────────────────────────────────── GoolbarToolbarView ───────────────────────────────────┐
94
+ * | ┌─────────────────────────────────────── #children ─────────────────────────────────────────┐ |
95
+ * | | ┌─────── #itemsView ────────┐ ┌──────────────────────┐ ┌── #groupedItemsDropdown ───┐ | |
96
+ * | | | #ungroupedItems | | ToolbarSeparatorView | | #groupedItems | | |
97
+ * | | └──────────────────────────-┘ └──────────────────────┘ └────────────────────────────┘ | |
98
+ * | | \---------- only when toolbar items overflow --------/ | |
99
+ * | └───────────────────────────────────────────────────────────────────────────────────────────┘ |
100
+ * └───────────────────────────────────────────────────────────────────────────────────────────────┘
101
+ * split width: 6px
102
+ * item width: default item: 35px; dropdown item: 50px
103
+ * set aside 50px
104
+ */
105
+ toolbarItemsCompose() {
106
+ let elementWidth = this.isMore ? this.elementWidth : null;
107
+ const maxItemWidth = 50;
108
+ const defaultItemWidth = 35;
109
+ const splitWidth = 6;
110
+ // special type
111
+ const headingWidth = 70;
112
+ const items = [];
113
+ const group = [];
114
+ for (const item of this.toolbarItems) {
115
+ if (!this.isMore) {
116
+ items.push(item);
117
+ continue;
118
+ }
119
+ // not enough free space
120
+ const allowRender = elementWidth && elementWidth > maxItemWidth;
121
+ if (allowRender && item.key === ToolbarActionTypes.split) {
122
+ items.push(item);
123
+ elementWidth -= splitWidth;
124
+ continue;
125
+ }
126
+ if (allowRender) {
127
+ items.push(item);
128
+ }
129
+ else {
130
+ group.push(item);
131
+ }
132
+ if (item.key === ElementKinds.headingList) {
133
+ elementWidth -= headingWidth;
134
+ continue;
135
+ }
136
+ const isCustomComponent = item?.type === ToolbarItemType.dropdown || !!item?.iconComponent;
137
+ elementWidth -= isCustomComponent ? maxItemWidth : defaultItemWidth;
138
+ }
139
+ return {
140
+ items: this.pureToolbarItems(items),
141
+ group
142
+ };
143
+ }
144
+ /**
145
+ * externally designated more group
146
+ */
147
+ toolbarItemsAndMoreCompose() {
148
+ const items = [];
149
+ const group = [];
150
+ for (const item of this.toolbarItems) {
151
+ if (item.key === ToolbarActionTypes.split) {
152
+ items.push(item);
153
+ continue;
154
+ }
155
+ items.push(item);
156
+ }
157
+ return {
158
+ items: this.pureToolbarItems(items),
159
+ group
160
+ };
161
+ }
162
+ /**
163
+ * filter adjacent repeated dividers
164
+ * @param {ToolbarItem[]} items
165
+ * @returns
166
+ * @memberof TheToolbarComponent
167
+ */
168
+ pureToolbarItems(items) {
169
+ if (!Array.isArray(items)) {
170
+ return [];
171
+ }
172
+ return items.filter((a, i) => {
173
+ if (i > 0 && items[i - 1].key !== ToolbarActionTypes.split) {
174
+ return true;
175
+ }
176
+ return a.key !== ToolbarActionTypes.split;
177
+ });
178
+ }
179
+ createToolbarItem(item) {
180
+ const { iconComponent, type, dropdownMode, dropdownItemKey, includes, ...args } = item;
181
+ const viewComponent = this.viewComponentType(type);
182
+ const compRef = this.toolbarContainer.createComponent(iconComponent ? iconComponent : viewComponent);
183
+ compRef.instance.editor = this.editor;
184
+ compRef.instance.toolbarItem = item;
185
+ this.components.set(item.key, compRef);
186
+ if (item.type === ToolbarItemType.dropdown) {
187
+ const dropdownRef = compRef;
188
+ dropdownRef.instance.dropdownItemKey = item.dropdownItemKey;
189
+ dropdownRef.instance.menus = includes;
190
+ dropdownRef.instance.mode = dropdownMode;
191
+ }
192
+ }
193
+ createToolbarSplit() {
194
+ this.toolbarContainer.createComponent(NavSplitLineComponent);
195
+ }
196
+ createMoreGroup(group) {
197
+ if (group.length > 0) {
198
+ const compRef = this.toolbarContainer.createComponent(this.toolbarGroupComponent);
199
+ compRef.instance.editor = this.editor;
200
+ compRef.instance.menus = group;
201
+ compRef.instance.item = this.moreGroupMenu;
202
+ this.components.set(this.moreGroupMenu.key, compRef);
203
+ }
204
+ }
205
+ viewComponentType(type) {
206
+ if (type === ToolbarItemType.default) {
207
+ return TheToolbarItemComponent;
208
+ }
209
+ if (type === ToolbarItemType.dropdown) {
210
+ return TheToolbarDropdownComponent;
211
+ }
212
+ return TheToolbarItemComponent;
213
+ }
214
+ }
215
+ TheToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: TheToolbarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: TheToolbarGroupToken }], target: i0.ɵɵFactoryTarget.Component });
216
+ TheToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: TheToolbarComponent, selector: "the-toolbar", inputs: { editor: "editor", toolbarItems: "toolbarItems", align: "align", containerClass: "containerClass", isMore: "isMore", afterTemplate: "afterTemplate" }, host: { classAttribute: "the-toolbar-container" }, viewQueries: [{ propertyName: "toolbarContainer", first: true, predicate: ["toolbarContainer"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<thy-icon-nav [style.justifyContent]=\"align\">\n <ng-container #toolbarContainer></ng-container>\n <ng-content></ng-content>\n <ng-template *ngIf=\"afterTemplate\" [ngTemplateOutlet]=\"afterTemplate\"></ng-template>\n</thy-icon-nav>\n", components: [{ type: i1.ThyIconNavComponent, selector: "thy-icon-nav", inputs: ["thyType"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: TheToolbarComponent, decorators: [{
218
+ type: Component,
219
+ args: [{ selector: 'the-toolbar', host: {
220
+ class: 'the-toolbar-container'
221
+ }, template: "<thy-icon-nav [style.justifyContent]=\"align\">\n <ng-container #toolbarContainer></ng-container>\n <ng-content></ng-content>\n <ng-template *ngIf=\"afterTemplate\" [ngTemplateOutlet]=\"afterTemplate\"></ng-template>\n</thy-icon-nav>\n" }]
222
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
223
+ type: Inject,
224
+ args: [TheToolbarGroupToken]
225
+ }] }]; }, propDecorators: { editor: [{
226
+ type: Input
227
+ }], toolbarItems: [{
228
+ type: Input
229
+ }], align: [{
230
+ type: Input
231
+ }], containerClass: [{
232
+ type: Input
233
+ }], isMore: [{
234
+ type: Input
235
+ }], afterTemplate: [{
236
+ type: Input
237
+ }], toolbarContainer: [{
238
+ type: ViewChild,
239
+ args: ['toolbarContainer', { read: ViewContainerRef, static: true }]
240
+ }] } });
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy90b29sYmFyL3Rvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsS0FBSyxFQUVMLFNBQVMsRUFDVCxnQkFBZ0IsRUFPaEIsTUFBTSxFQUdULE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBNEQsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOzs7O0FBVzdGLE1BQU0sT0FBTyxtQkFBbUI7SUFvQjVCLFlBQ1ksR0FBc0IsRUFDdEIsVUFBc0IsRUFDdEIsTUFBYyxFQUNnQixxQkFBOEQ7UUFINUYsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2dCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBeUM7UUFyQi9GLGlCQUFZLEdBQWtCLEVBQUUsQ0FBQztRQUlqQyxtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUU5QixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBTXZCLGVBQVUsR0FBbUMs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QixtR0F3QmhCLG9CQUFvQjtvR0F4QnZCLG1CQUFtQix1V0FhVyxnQkFBZ0IsZ0VDL0MzRCxzUEFLQTsyRkQ2QmEsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNJLGFBQWEsUUFFakI7d0JBQ0YsS0FBSyxFQUFFLHVCQUF1QjtxQkFDakM7OzBCQTBCSSxNQUFNOzJCQUFDLG9CQUFvQjs0Q0F2QnZCLE1BQU07c0JBQWQsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVtRSxnQkFBZ0I7c0JBQXhGLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkRlc3Ryb3ksXG4gICAgTmdab25lLFxuICAgIEluamVjdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IFRvb2xiYXJBbGlnbm1lbnQsIFRvb2xiYXJJdGVtLCBUb29sYmFySXRlbXNDb21wb3NlUmV0dXJuLCBUb29sYmFySXRlbVR5cGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3Rvb2xiYXInO1xuaW1wb3J0IHsgVGhlVG9vbGJhckdyb3VwVG9rZW4sIFRvb2xiYXJNb3JlR3JvdXAgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdG9vbGJhcic7XG5pbXBvcnQgeyBFbGVtZW50S2luZHMsIFRvb2xiYXJBY3Rpb25UeXBlcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ub2RlLXR5cGVzJztcbmltcG9ydCB7IFRoZVRvb2xiYXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vdG9vbGJhci1pdGVtL3Rvb2xiYXItaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmF2U3BsaXRMaW5lQ29tcG9uZW50IH0gZnJvbSAnLi4vbmF2LXNwbGl0LWxpbmUvbmF2LXNwbGl0LWxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7IFRoZVRvb2xiYXJEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uL3Rvb2xiYXItZHJvcGRvd24vdG9vbGJhci1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHR5cGUgeyBUaGVUb29sYmFyR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi90b29sYmFyLWdyb3VwL3Rvb2xiYXItZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IFRoZUJhc2VUb29sYmFySXRlbSwgVGhlQmFzZVRvb2xiYXJEcm9wZG93biB9IGZyb20gJy4uLy4uL2NvcmUvdG9vbGJhci1pdGVtL2Jhc2UtdG9vbGJhci1pdGVtJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aGUtdG9vbGJhcicsXG4gICAgdGVtcGxhdGVVcmw6ICd0b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGhlLXRvb2xiYXItY29udGFpbmVyJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgVGhlVG9vbGJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIGVkaXRvcjogRWRpdG9yO1xuXG4gICAgQElucHV0KCkgdG9vbGJhckl0ZW1zOiBUb29sYmFySXRlbVtdID0gW107XG5cbiAgICBASW5wdXQoKSBhbGlnbjogVG9vbGJhckFsaWdubWVudDtcblxuICAgIEBJbnB1dCgpIGNvbnRhaW5lckNsYXNzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgQElucHV0KCkgaXNNb3JlID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIGFmdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCd0b29sYmFyQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgdG9vbGJhckNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIGNvbXBvbmVudHM6IE1hcDxzdHJpbmcsIENvbXBvbmVudFJlZjxhbnk+PiA9IG5ldyBNYXA8c3RyaW5nLCBDb21wb25lbnRSZWY8YW55Pj4oKTtcbiAgICBtb3JlR3JvdXBNZW51ID0gVG9vbGJhck1vcmVHcm91cDtcbiAgICByZXNpemVPYnNlcnZlcjtcbiAgICBlbGVtZW50V2lkdGggPSAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KFRoZVRvb2xiYXJHcm91cFRva2VuKSBwcml2YXRlIHRvb2xiYXJHcm91cENvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUaGVUb29sYmFyR3JvdXBDb21wb25lbnQ+XG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0VG9vbGJhckNsYXNzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyVG9vbGJhclZpZXcoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UodGhpcy5lZGl0b3IpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTW9yZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvb2xiYXJJdGVtcyA9IGNoYW5nZXMudG9vbGJhckl0ZW1zO1xuICAgICAgICBpZiAodG9vbGJhckl0ZW1zICYmICF0b29sYmFySXRlbXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVG9vbGJhclZpZXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VG9vbGJhckNsYXNzKCkge1xuICAgICAgICBpZiAodGhpcy5lZGl0b3IgJiYgISF0aGlzLmNvbnRhaW5lckNsYXNzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi50aGlzLmNvbnRhaW5lckNsYXNzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzaXplRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoIH0gPSBlbnRyeS5jb250ZW50UmVjdDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc01vcmUgJiYgdGhpcy5lbGVtZW50V2lkdGggIT09IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFdpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVG9vbGJhclZpZXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZWRpdGFibGVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IHRvb2xiYXJJdGVtcyA9IFsuLi50aGlzLnRvb2xiYXJJdGVtcywgdGhpcy5tb3JlR3JvdXBNZW51XTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRvb2xiYXJJdGVtcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0ua2V5ICE9PSBUb29sYmFyQWN0aW9uVHlwZXMuc3BsaXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtQ29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzLmdldChpdGVtLmtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1Db21wb25lbnQgJiYgaXRlbUNvbXBvbmVudC5pbnN0YW5jZS5zZWxlY3Rpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNvbXBvbmVudC5pbnN0YW5jZS5zZWxlY3Rpb25DaGFuZ2UoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyVG9vbGJhclZpZXcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50cy5jbGVhcigpO1xuICAgICAgICB0aGlzLnRvb2xiYXJDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgY29uc3QgdG9vbGJhckl0ZW1zID0gdGhpcy50b29sYmFySXRlbXNDb21wb3NlKCk7XG4gICAgICAgIGNvbnN0IHsgaXRlbXMsIGdyb3VwIH0gPSB0b29sYmFySXRlbXM7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmtleSA9PT0gVG9vbGJhckFjdGlvblR5cGVzLnNwbGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVG9vbGJhclNwbGl0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRvb2xiYXJJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jcmVhdGVNb3JlR3JvdXAoZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2FsY3VsYXRpb24gZGlzcGxheSB0b29sYmFyIGFuZCBtb3JlIGdyb3VwZWQgdG9vbGJhcnNcbiAgICAgKlxuICAgICAqXHTilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgR29vbGJhclRvb2xiYXJWaWV3IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgICAqXHR8IOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAjY2hpbGRyZW4g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIHxcbiAgICAgKlx0fCB8ICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSAICNpdGVtc1ZpZXcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCDilIzilIDilIAgI2dyb3VwZWRJdGVtc0Ryb3Bkb3duIOKUgOKUgOKUgOKUkCAgIHwgfFxuICAgICAqXHR8IHwgICB8ICAgICAgICN1bmdyb3VwZWRJdGVtcyAgICAgfCB8IFRvb2xiYXJTZXBhcmF0b3JWaWV3IHwgfCAgICAgICAgI2dyb3VwZWRJdGVtcyAgICAgICB8ICAgfCB8XG4gICAgICpcdHwgfCAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgC3ilJgg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgIHwgfFxuICAgICAqXHR8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFwtLS0tLS0tLS0tIG9ubHkgd2hlbiB0b29sYmFyIGl0ZW1zIG92ZXJmbG93IC0tLS0tLS0tLyAgIHwgfFxuICAgICAqXHR8IOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCB8XG4gICAgICpcdOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgICAqIHNwbGl0IHdpZHRoOiA2cHhcbiAgICAgKiBpdGVtIHdpZHRoOiBkZWZhdWx0IGl0ZW06IDM1cHg7IGRyb3Bkb3duIGl0ZW06IDUwcHhcbiAgICAgKiBzZXQgYXNpZGUgNTBweFxuICAgICAqL1xuICAgIHByaXZhdGUgdG9vbGJhckl0ZW1zQ29tcG9zZSgpOiBUb29sYmFySXRlbXNDb21wb3NlUmV0dXJuIHtcbiAgICAgICAgbGV0IGVsZW1lbnRXaWR0aCA9IHRoaXMuaXNNb3JlID8gdGhpcy5lbGVtZW50V2lkdGggOiBudWxsO1xuICAgICAgICBjb25zdCBtYXhJdGVtV2lkdGggPSA1MDtcbiAgICAgICAgY29uc3QgZGVmYXVsdEl0ZW1XaWR0aCA9IDM1O1xuICAgICAgICBjb25zdCBzcGxpdFdpZHRoID0gNjtcbiAgICAgICAgLy8gc3BlY2lhbCB0eXBlXG4gICAgICAgIGNvbnN0IGhlYWRpbmdXaWR0aCA9IDcwO1xuICAgICAgICBjb25zdCBpdGVtczogVG9vbGJhckl0ZW1bXSA9IFtdO1xuICAgICAgICBjb25zdCBncm91cDogVG9vbGJhckl0ZW1bXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnRvb2xiYXJJdGVtcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTW9yZSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG5vdCBlbm91Z2ggZnJlZSBzcGFjZVxuICAgICAgICAgICAgY29uc3QgYWxsb3dSZW5kZXIgPSBlbGVtZW50V2lkdGggJiYgZWxlbWVudFdpZHRoID4gbWF4SXRlbVdpZHRoO1xuICAgICAgICAgICAgaWYgKGFsbG93UmVuZGVyICYmIGl0ZW0ua2V5ID09PSBUb29sYmFyQWN0aW9uVHlwZXMuc3BsaXQpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRXaWR0aCAtPSBzcGxpdFdpZHRoO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYWxsb3dSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncm91cC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbS5rZXkgPT09IEVsZW1lbnRLaW5kcy5oZWFkaW5nTGlzdCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRXaWR0aCAtPSBoZWFkaW5nV2lkdGg7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpc0N1c3RvbUNvbXBvbmVudCA9IGl0ZW0/LnR5cGUgPT09IFRvb2xiYXJJdGVtVHlwZS5kcm9wZG93biB8fCAhIWl0ZW0/Lmljb25Db21wb25lbnQ7XG4gICAgICAgICAgICBlbGVtZW50V2lkdGggLT0gaXNDdXN0b21Db21wb25lbnQgPyBtYXhJdGVtV2lkdGggOiBkZWZhdWx0SXRlbVdpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGl0ZW1zOiB0aGlzLnB1cmVUb29sYmFySXRlbXMoaXRlbXMpLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBleHRlcm5hbGx5IGRlc2lnbmF0ZWQgbW9yZSBncm91cFxuICAgICAqL1xuICAgIHByaXZhdGUgdG9vbGJhckl0ZW1zQW5kTW9yZUNvbXBvc2UoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGNvbnN0IGdyb3VwID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMudG9vbGJhckl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5rZXkgPT09IFRvb2xiYXJBY3Rpb25UeXBlcy5zcGxpdCkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGl0ZW1zOiB0aGlzLnB1cmVUb29sYmFySXRlbXMoaXRlbXMpLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBmaWx0ZXIgYWRqYWNlbnQgcmVwZWF0ZWQgZGl2aWRlcnNcbiAgICAgKiBAcGFyYW0ge1Rvb2xiYXJJdGVtW119IGl0ZW1zXG4gICAgICogQHJldHVybnNcbiAgICAgKiBAbWVtYmVyb2YgVGhlVG9vbGJhckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1cmVUb29sYmFySXRlbXMoaXRlbXM6IFRvb2xiYXJJdGVtW10pIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcy5maWx0ZXIoKGEsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChpID4gMCAmJiBpdGVtc1tpIC0gMV0ua2V5ICE9PSBUb29sYmFyQWN0aW9uVHlwZXMuc3BsaXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhLmtleSAhPT0gVG9vbGJhckFjdGlvblR5cGVzLnNwbGl0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRvb2xiYXJJdGVtKGl0ZW06IFRvb2xiYXJJdGVtKSB7XG4gICAgICAgIGNvbnN0IHsgaWNvbkNvbXBvbmVudCwgdHlwZSwgZHJvcGRvd25Nb2RlLCBkcm9wZG93bkl0ZW1LZXksIGluY2x1ZGVzLCAuLi5hcmdzIH0gPSBpdGVtO1xuICAgICAgICBjb25zdCB2aWV3Q29tcG9uZW50ID0gdGhpcy52aWV3Q29tcG9uZW50VHlwZSh0eXBlKTtcbiAgICAgICAgY29uc3QgY29tcFJlZiA9IHRoaXMudG9vbGJhckNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQ8VGhlQmFzZVRvb2xiYXJJdGVtPihpY29uQ29tcG9uZW50ID8gaWNvbkNvbXBvbmVudCA6IHZpZXdDb21wb25lbnQpO1xuXG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UudG9vbGJhckl0ZW0gPSBpdGVtO1xuICAgICAgICB0aGlzLmNvbXBvbmVudHMuc2V0KGl0ZW0ua2V5LCBjb21wUmVmKTtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gVG9vbGJhckl0ZW1UeXBlLmRyb3Bkb3duKSB7XG4gICAgICAgICAgICBjb25zdCBkcm9wZG93blJlZiA9IGNvbXBSZWYgYXMgdW5rbm93biBhcyBDb21wb25lbnRSZWY8VGhlQmFzZVRvb2xiYXJEcm9wZG93bj47XG4gICAgICAgICAgICBkcm9wZG93blJlZi5pbnN0YW5jZS5kcm9wZG93bkl0ZW1LZXkgPSBpdGVtLmRyb3Bkb3duSXRlbUtleTtcbiAgICAgICAgICAgIGRyb3Bkb3duUmVmLmluc3RhbmNlLm1lbnVzID0gaW5jbHVkZXMgYXMgVG9vbGJhckl0ZW1bXTtcbiAgICAgICAgICAgIGRyb3Bkb3duUmVmLmluc3RhbmNlLm1vZGUgPSBkcm9wZG93bk1vZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRvb2xiYXJTcGxpdCgpIHtcbiAgICAgICAgdGhpcy50b29sYmFyQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChOYXZTcGxpdExpbmVDb21wb25lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTW9yZUdyb3VwKGdyb3VwOiBUb29sYmFySXRlbVtdKSB7XG4gICAgICAgIGlmIChncm91cC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wUmVmID0gdGhpcy50b29sYmFyQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudCh0aGlzLnRvb2xiYXJHcm91cENvbXBvbmVudCk7XG4gICAgICAgICAgICBjb21wUmVmLmluc3RhbmNlLmVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5tZW51cyA9IGdyb3VwO1xuICAgICAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5pdGVtID0gdGhpcy5tb3JlR3JvdXBNZW51O1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzLnNldCh0aGlzLm1vcmVHcm91cE1lbnUua2V5LCBjb21wUmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmlld0NvbXBvbmVudFR5cGUodHlwZTogVG9vbGJhckl0ZW1UeXBlKSB7XG4gICAgICAgIGlmICh0eXBlID09PSBUb29sYmFySXRlbVR5cGUuZGVmYXVsdCkge1xuICAgICAgICAgICAgcmV0dXJuIFRoZVRvb2xiYXJJdGVtQ29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlID09PSBUb29sYmFySXRlbVR5cGUuZHJvcGRvd24pIHtcbiAgICAgICAgICAgIHJldHVybiBUaGVUb29sYmFyRHJvcGRvd25Db21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFRoZVRvb2xiYXJJdGVtQ29tcG9uZW50O1xuICAgIH1cbn1cbiIsIjx0aHktaWNvbi1uYXYgW3N0eWxlLmp1c3RpZnlDb250ZW50XT1cImFsaWduXCI+XG4gICAgPG5nLWNvbnRhaW5lciAjdG9vbGJhckNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiYWZ0ZXJUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFmdGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPC90aHktaWNvbi1uYXY+XG4iXX0=
@@ -0,0 +1,129 @@
1
+ import { Component, Input, HostListener, ViewChild } from '@angular/core';
2
+ import { DropdownMode } from '../../constants/toolbar';
3
+ import { TheBaseToolbarDropdown } from '../../core/toolbar-item/base-toolbar-item';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "ngx-tethys/popover";
6
+ import * as i2 from "@angular/cdk/overlay";
7
+ import * as i3 from "ngx-tethys/nav";
8
+ import * as i4 from "ngx-tethys/icon";
9
+ import * as i5 from "ngx-tethys/action-menu";
10
+ import * as i6 from "@angular/common";
11
+ import * as i7 from "ngx-tethys/tooltip";
12
+ export class TheToolbarDropdownComponent extends TheBaseToolbarDropdown {
13
+ constructor(elementRef, thyPopover, viewContainerRef, overlay) {
14
+ super();
15
+ this.elementRef = elementRef;
16
+ this.thyPopover = thyPopover;
17
+ this.viewContainerRef = viewContainerRef;
18
+ this.overlay = overlay;
19
+ this.dropdownMode = DropdownMode;
20
+ }
21
+ get isOpen() {
22
+ return this.dropdownPopoverRef && this.dropdownPopoverRef.getOverlayRef() && this.dropdownPopoverRef.getOverlayRef().hasAttached();
23
+ }
24
+ toggleDropdown(event) {
25
+ super.execute(event);
26
+ if (this.editor?.disabled || this.disabled) {
27
+ return;
28
+ }
29
+ this.openDropdownPopover();
30
+ }
31
+ handleDocumentMouseDown(event) {
32
+ if (!this.elementRef.nativeElement.contains(event.target)) {
33
+ this.closeDropdownPopover();
34
+ }
35
+ }
36
+ ngOnInit() {
37
+ if (!this.template) {
38
+ this.template = this.mode === this.dropdownMode.icon ? this.iconModeTemplate : this.textModeTemplate;
39
+ }
40
+ if (!this.activeMenuItem) {
41
+ this.activeMenuItem = this.defaultDropdownItem;
42
+ }
43
+ if (this.toolbarItem) {
44
+ this.elementRef.nativeElement.classList.add(`${this.toolbarItem?.key}`);
45
+ }
46
+ }
47
+ itemMousedown(event, item) {
48
+ super.execute(event);
49
+ this.closeDropdownPopover();
50
+ if (!this.toolbarItem.dropdownFixedIcon) {
51
+ this.activeMenuItem = item;
52
+ }
53
+ if (this.itemMousedownHandle) {
54
+ this.itemMousedownHandle(item);
55
+ return;
56
+ }
57
+ if (item?.execute) {
58
+ item?.execute(this.editor);
59
+ }
60
+ }
61
+ openDropdownPopover() {
62
+ this.dropdownPopoverRef = this.thyPopover.open(this.dropdownTemplate, {
63
+ origin: this.elementRef,
64
+ panelClass: ['the-toolbar-dropdown-popover', this.toolbarItem?.key],
65
+ placement: 'bottomLeft',
66
+ insideClosable: false,
67
+ backdropClosable: true,
68
+ hasBackdrop: false,
69
+ offset: 10,
70
+ minWidth: 0,
71
+ viewContainerRef: this.viewContainerRef,
72
+ scrollStrategy: this.overlay.scrollStrategies.reposition()
73
+ });
74
+ this.dropdownPopoverRef?.getOverlayRef().updatePositionStrategy(this.createPositionStrategy());
75
+ }
76
+ closeDropdownPopover() {
77
+ if (this.dropdownPopoverRef) {
78
+ this.dropdownPopoverRef?.close();
79
+ }
80
+ }
81
+ createPositionStrategy() {
82
+ const topPosition = {
83
+ originX: 'start',
84
+ originY: 'top',
85
+ overlayX: 'start',
86
+ overlayY: 'bottom',
87
+ offsetX: 0,
88
+ offsetY: -15
89
+ };
90
+ const bottomPosition = {
91
+ ...topPosition,
92
+ overlayY: 'top',
93
+ offsetY: 42
94
+ };
95
+ return this.overlay
96
+ .position()
97
+ .flexibleConnectedTo(this.elementRef)
98
+ .withFlexibleDimensions(false)
99
+ .withGrowAfterOpen(false)
100
+ .withPush(false)
101
+ .withPositions([bottomPosition, topPosition]);
102
+ }
103
+ }
104
+ TheToolbarDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: TheToolbarDropdownComponent, deps: [{ token: i0.ElementRef }, { token: i1.ThyPopover }, { token: i0.ViewContainerRef }, { token: i2.Overlay }], target: i0.ɵɵFactoryTarget.Component });
105
+ TheToolbarDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: TheToolbarDropdownComponent, selector: "the-toolbar-dropdown", inputs: { itemMousedownHandle: "itemMousedownHandle" }, host: { listeners: { "mousedown": "toggleDropdown($event)", "document: mousedown": "handleDocumentMouseDown($event)" }, classAttribute: "the-toolbar-dropdown-container" }, viewQueries: [{ propertyName: "iconModeTemplate", first: true, predicate: ["iconModeTemplate"], descendants: true, static: true }, { propertyName: "textModeTemplate", first: true, predicate: ["textModeTemplate"], descendants: true, static: true }, { propertyName: "dropdownTemplate", first: true, predicate: ["dropdownTemplate"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template [ngTemplateOutlet]=\"template\"></ng-template>\n\n<ng-template #iconModeTemplate>\n <a thyIconNavLink class=\"icon-mode link-with-down\" [thyTooltip]=\"activeMenuItem?.name\" thyTooltipPlacement=\"top\">\n <thy-icon [thyIconName]=\"activeMenuItem?.icon\"></thy-icon>\n <thy-icon class=\"caret-down-icon font-size-sm text-desc\" thyIconName=\"caret-down\"></thy-icon>\n </a>\n</ng-template>\n\n<ng-template #textModeTemplate>\n <a thyIconNavLink class=\"text-mode\" [thyTooltip]=\"activeMenuItem?.name\" thyTooltipPlacement=\"top\">\n <span class=\"show-text\">{{ activeMenuItem?.name }}</span>\n <thy-icon class=\"text-caret-down-icon font-size-sm text-desc\" thyIconName=\"caret-down\"></thy-icon>\n </a>\n</ng-template>\n\n<ng-template #dropdownTemplate>\n <thy-action-menu class=\"dropdown\">\n <ng-container *ngFor=\"let menu of menus\">\n <a\n *ngIf=\"menu.key !== 'split'\"\n thyActionMenuItem\n href=\"javascript:;\"\n [thyActionMenuItemActive]=\"menu.key === activeMenuItem?.key && !toolbarItem?.dropdownFixedIcon\"\n (mousedown)=\"itemMousedown($event, menu)\"\n [ngStyle]=\"menu?.styles\"\n >\n <span *ngIf=\"menu.icon && mode === dropdownMode.icon\" thyActionMenuItemIcon>\n <thy-icon [thyIconName]=\"menu.icon\"></thy-icon>\n </span>\n <span *ngIf=\"menu.name\" thyActionMenuItemName>{{ menu.name }}</span>\n </a>\n <thy-action-menu-divider *ngIf=\"menu.key === 'split'\"></thy-action-menu-divider>\n </ng-container>\n </thy-action-menu>\n</ng-template>\n", components: [{ type: i3.ThyIconNavLinkComponent, selector: "[thyIconNavLink]", inputs: ["thyIconNavLinkIcon", "thyIconNavLinkActive"] }, { type: i4.ThyIconComponent, selector: "thy-icon", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { type: i5.ThyActionMenuComponent, selector: "thy-action-menu", inputs: ["thyTheme", "thyWidth"] }, { type: i5.ThyActionMenuDividerComponent, selector: "thy-action-menu-divider", inputs: ["thyTitle", "thyType"] }], directives: [{ type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.ThyActionMenuItemDirective, selector: "[thyActionMenuItem]", inputs: ["thyDisabled", "thyType"] }, { type: i5.ThyActionMenuItemActiveDirective, selector: "[thyActionMenuItemActive]", inputs: ["thyActionMenuItemActive"] }, { type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.ThyActionMenuItemIconDirective, selector: "[thyActionMenuItemIcon]" }, { type: i5.ThyActionMenuItemNameDirective, selector: "[thyActionMenuItemName]" }] });
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: TheToolbarDropdownComponent, decorators: [{
107
+ type: Component,
108
+ args: [{ selector: 'the-toolbar-dropdown', host: {
109
+ class: 'the-toolbar-dropdown-container'
110
+ }, template: "<ng-template [ngTemplateOutlet]=\"template\"></ng-template>\n\n<ng-template #iconModeTemplate>\n <a thyIconNavLink class=\"icon-mode link-with-down\" [thyTooltip]=\"activeMenuItem?.name\" thyTooltipPlacement=\"top\">\n <thy-icon [thyIconName]=\"activeMenuItem?.icon\"></thy-icon>\n <thy-icon class=\"caret-down-icon font-size-sm text-desc\" thyIconName=\"caret-down\"></thy-icon>\n </a>\n</ng-template>\n\n<ng-template #textModeTemplate>\n <a thyIconNavLink class=\"text-mode\" [thyTooltip]=\"activeMenuItem?.name\" thyTooltipPlacement=\"top\">\n <span class=\"show-text\">{{ activeMenuItem?.name }}</span>\n <thy-icon class=\"text-caret-down-icon font-size-sm text-desc\" thyIconName=\"caret-down\"></thy-icon>\n </a>\n</ng-template>\n\n<ng-template #dropdownTemplate>\n <thy-action-menu class=\"dropdown\">\n <ng-container *ngFor=\"let menu of menus\">\n <a\n *ngIf=\"menu.key !== 'split'\"\n thyActionMenuItem\n href=\"javascript:;\"\n [thyActionMenuItemActive]=\"menu.key === activeMenuItem?.key && !toolbarItem?.dropdownFixedIcon\"\n (mousedown)=\"itemMousedown($event, menu)\"\n [ngStyle]=\"menu?.styles\"\n >\n <span *ngIf=\"menu.icon && mode === dropdownMode.icon\" thyActionMenuItemIcon>\n <thy-icon [thyIconName]=\"menu.icon\"></thy-icon>\n </span>\n <span *ngIf=\"menu.name\" thyActionMenuItemName>{{ menu.name }}</span>\n </a>\n <thy-action-menu-divider *ngIf=\"menu.key === 'split'\"></thy-action-menu-divider>\n </ng-container>\n </thy-action-menu>\n</ng-template>\n" }]
111
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ThyPopover }, { type: i0.ViewContainerRef }, { type: i2.Overlay }]; }, propDecorators: { itemMousedownHandle: [{
112
+ type: Input
113
+ }], iconModeTemplate: [{
114
+ type: ViewChild,
115
+ args: ['iconModeTemplate', { static: true }]
116
+ }], textModeTemplate: [{
117
+ type: ViewChild,
118
+ args: ['textModeTemplate', { static: true }]
119
+ }], dropdownTemplate: [{
120
+ type: ViewChild,
121
+ args: ['dropdownTemplate', { static: true }]
122
+ }], toggleDropdown: [{
123
+ type: HostListener,
124
+ args: ['mousedown', ['$event']]
125
+ }], handleDocumentMouseDown: [{
126
+ type: HostListener,
127
+ args: ['document: mousedown', ['$event']]
128
+ }] } });
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy90b29sYmFyLWRyb3Bkb3duL3Rvb2xiYXItZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvdG9vbGJhci1kcm9wZG93bi90b29sYmFyLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLEtBQUssRUFBRSxZQUFZLEVBQWUsU0FBUyxFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUkxSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7Ozs7OztBQVNuRixNQUFNLE9BQU8sMkJBQTRCLFNBQVEsc0JBQXNCO0lBc0NuRSxZQUNXLFVBQXNCLEVBQ3JCLFVBQXNCLEVBQ3RCLGdCQUFrQyxFQUNsQyxPQUFnQjtRQUV4QixLQUFLLEVBQUUsQ0FBQztRQUxELGVBQVUsR0FBVixVQUFVLENBQVk7UUFDckIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFyQzVCLGlCQUFZLEdBQUcsWUFBWSxDQUFDO0lBd0M1QixDQUFDO0lBckNELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkksQ0FBQztJQVlELGNBQWMsQ0FBQyxLQUFpQjtRQUM1QixLQUFLLENBQUMsT0FBTyxD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ZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBIb3N0TGlzdGVuZXIsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbiwgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFRoeVBvcG92ZXIsIFRoeVBvcG92ZXJSZWYgfSBmcm9tICduZ3gtdGV0aHlzL3BvcG92ZXInO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgRHJvcGRvd25Nb2RlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rvb2xiYXInO1xuaW1wb3J0IHsgVG9vbGJhckl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3Rvb2xiYXInO1xuaW1wb3J0IHsgVGhlQmFzZVRvb2xiYXJEcm9wZG93biB9IGZyb20gJy4uLy4uL2NvcmUvdG9vbGJhci1pdGVtL2Jhc2UtdG9vbGJhci1pdGVtJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aGUtdG9vbGJhci1kcm9wZG93bicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Rvb2xiYXItZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aGUtdG9vbGJhci1kcm9wZG93bi1jb250YWluZXInXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBUaGVUb29sYmFyRHJvcGRvd25Db21wb25lbnQgZXh0ZW5kcyBUaGVCYXNlVG9vbGJhckRyb3Bkb3duIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBpdGVtTW91c2Vkb3duSGFuZGxlOiAoaXRlbTogVG9vbGJhckl0ZW0pID0+IHZvaWQ7XG5cbiAgICBlZGl0b3I6IEVkaXRvcjtcbiAgICB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBkcm9wZG93bk1vZGUgPSBEcm9wZG93bk1vZGU7XG4gICAgZHJvcGRvd25Qb3BvdmVyUmVmOiBUaHlQb3BvdmVyUmVmPGFueT47XG5cbiAgICBnZXQgaXNPcGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kcm9wZG93blBvcG92ZXJSZWYgJiYgdGhpcy5kcm9wZG93blBvcG92ZXJSZWYuZ2V0T3ZlcmxheVJlZigpICYmIHRoaXMuZHJvcGRvd25Qb3BvdmVyUmVmLmdldE92ZXJsYXlSZWYoKS5oYXNBdHRhY2hlZCgpO1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoJ2ljb25Nb2RlVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGljb25Nb2RlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCd0ZXh0TW9kZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICB0ZXh0TW9kZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnZHJvcGRvd25UZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgZHJvcGRvd25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gICAgdG9nZ2xlRHJvcGRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgc3VwZXIuZXhlY3V0ZShldmVudCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yPy5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcGVuRHJvcGRvd25Qb3BvdmVyKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6IG1vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlRG9jdW1lbnRNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd25Qb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgdGh5UG9wb3ZlcjogVGh5UG9wb3ZlcixcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGhpcy5tb2RlID09PSB0aGlzLmRyb3Bkb3duTW9kZS5pY29uID8gdGhpcy5pY29uTW9kZVRlbXBsYXRlIDogdGhpcy50ZXh0TW9kZVRlbXBsYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU1lbnVJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnVJdGVtID0gdGhpcy5kZWZhdWx0RHJvcGRvd25JdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudG9vbGJhckl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYCR7dGhpcy50b29sYmFySXRlbT8ua2V5fWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXRlbU1vdXNlZG93bihldmVudDogTW91c2VFdmVudCwgaXRlbTogVG9vbGJhckl0ZW0pIHtcbiAgICAgICAgc3VwZXIuZXhlY3V0ZShldmVudCk7XG5cbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duUG9wb3ZlcigpO1xuXG4gICAgICAgIGlmICghdGhpcy50b29sYmFySXRlbS5kcm9wZG93bkZpeGVkSWNvbikge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVNZW51SXRlbSA9IGl0ZW07ICAgICAgICAgICAgXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pdGVtTW91c2Vkb3duSGFuZGxlKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1Nb3VzZWRvd25IYW5kbGUoaXRlbSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbT8uZXhlY3V0ZSkge1xuICAgICAgICAgICAgaXRlbT8uZXhlY3V0ZSh0aGlzLmVkaXRvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvcGVuRHJvcGRvd25Qb3BvdmVyKCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duUG9wb3ZlclJlZiA9IHRoaXMudGh5UG9wb3Zlci5vcGVuKHRoaXMuZHJvcGRvd25UZW1wbGF0ZSwge1xuICAgICAgICAgICAgb3JpZ2luOiB0aGlzLmVsZW1lbnRSZWYsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3RoZS10b29sYmFyLWRyb3Bkb3duLXBvcG92ZXInLCB0aGlzLnRvb2xiYXJJdGVtPy5rZXldLFxuICAgICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tTGVmdCcsXG4gICAgICAgICAgICBpbnNpZGVDbG9zYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBiYWNrZHJvcENsb3NhYmxlOiB0cnVlLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgb2Zmc2V0OiAxMCxcbiAgICAgICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy52aWV3Q29udGFpbmVyUmVmLFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kcm9wZG93blBvcG92ZXJSZWY/LmdldE92ZXJsYXlSZWYoKS51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMuY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpKTtcbiAgICB9XG5cbiAgICBjbG9zZURyb3Bkb3duUG9wb3ZlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25Qb3BvdmVyUmVmKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duUG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKSB7XG4gICAgICAgIGNvbnN0IHRvcFBvc2l0aW9uOiBDb25uZWN0ZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgICAgICAgICAgb2Zmc2V0WDogMCxcbiAgICAgICAgICAgIG9mZnNldFk6IC0xNVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBib3R0b21Qb3NpdGlvbjogQ29ubmVjdGVkUG9zaXRpb24gPSB7XG4gICAgICAgICAgICAuLi50b3BQb3NpdGlvbixcbiAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgICAgIG9mZnNldFk6IDQyXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlcbiAgICAgICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmVsZW1lbnRSZWYpXG4gICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgIC53aXRoR3Jvd0FmdGVyT3BlbihmYWxzZSlcbiAgICAgICAgICAgIC53aXRoUHVzaChmYWxzZSlcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKFtib3R0b21Qb3NpdGlvbiwgdG9wUG9zaXRpb25dKTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ljb25Nb2RlVGVtcGxhdGU+XG4gICAgPGEgdGh5SWNvbk5hdkxpbmsgY2xhc3M9XCJpY29uLW1vZGUgbGluay13aXRoLWRvd25cIiBbdGh5VG9vbHRpcF09XCJhY3RpdmVNZW51SXRlbT8ubmFtZVwiIHRoeVRvb2x0aXBQbGFjZW1lbnQ9XCJ0b3BcIj5cbiAgICAgICAgPHRoeS1pY29uIFt0aHlJY29uTmFtZV09XCJhY3RpdmVNZW51SXRlbT8uaWNvblwiPjwvdGh5LWljb24+XG4gICAgICAgIDx0aHktaWNvbiBjbGFzcz1cImNhcmV0LWRvd24taWNvbiBmb250LXNpemUtc20gdGV4dC1kZXNjXCIgdGh5SWNvbk5hbWU9XCJjYXJldC1kb3duXCI+PC90aHktaWNvbj5cbiAgICA8L2E+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RleHRNb2RlVGVtcGxhdGU+XG4gICAgPGEgdGh5SWNvbk5hdkxpbmsgY2xhc3M9XCJ0ZXh0LW1vZGVcIiBbdGh5VG9vbHRpcF09XCJhY3RpdmVNZW51SXRlbT8ubmFtZVwiIHRoeVRvb2x0aXBQbGFjZW1lbnQ9XCJ0b3BcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzaG93LXRleHRcIj57eyBhY3RpdmVNZW51SXRlbT8ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPHRoeS1pY29uIGNsYXNzPVwidGV4dC1jYXJldC1kb3duLWljb24gZm9udC1zaXplLXNtIHRleHQtZGVzY1wiIHRoeUljb25OYW1lPVwiY2FyZXQtZG93blwiPjwvdGh5LWljb24+XG4gICAgPC9hPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkcm9wZG93blRlbXBsYXRlPlxuICAgIDx0aHktYWN0aW9uLW1lbnUgY2xhc3M9XCJkcm9wZG93blwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtZW51IG9mIG1lbnVzXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5rZXkgIT09ICdzcGxpdCdcIlxuICAgICAgICAgICAgICAgIHRoeUFjdGlvbk1lbnVJdGVtXG4gICAgICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgICAgICAgICAgICAgW3RoeUFjdGlvbk1lbnVJdGVtQWN0aXZlXT1cIm1lbnUua2V5ID09PSBhY3RpdmVNZW51SXRlbT8ua2V5ICYmICF0b29sYmFySXRlbT8uZHJvcGRvd25GaXhlZEljb25cIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiaXRlbU1vdXNlZG93bigkZXZlbnQsIG1lbnUpXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJtZW51Py5zdHlsZXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWVudS5pY29uICYmIG1vZGUgPT09IGRyb3Bkb3duTW9kZS5pY29uXCIgdGh5QWN0aW9uTWVudUl0ZW1JY29uPlxuICAgICAgICAgICAgICAgICAgICA8dGh5LWljb24gW3RoeUljb25OYW1lXT1cIm1lbnUuaWNvblwiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWVudS5uYW1lXCIgdGh5QWN0aW9uTWVudUl0ZW1OYW1lPnt7IG1lbnUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDx0aHktYWN0aW9uLW1lbnUtZGl2aWRlciAqbmdJZj1cIm1lbnUua2V5ID09PSAnc3BsaXQnXCI+PC90aHktYWN0aW9uLW1lbnUtZGl2aWRlcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90aHktYWN0aW9uLW1lbnU+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,110 @@
1
+ import { Component, Input, ViewChild, TemplateRef, HostListener } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "ngx-tethys/popover";
4
+ import * as i2 from "ngx-tethys/nav";
5
+ import * as i3 from "../toolbar/toolbar.component";
6
+ import * as i4 from "ngx-tethys/tooltip";
7
+ export class TheToolbarGroupComponent {
8
+ constructor(elementRef, thyPopover, viewContainerRef) {
9
+ this.elementRef = elementRef;
10
+ this.thyPopover = thyPopover;
11
+ this.viewContainerRef = viewContainerRef;
12
+ this.active = false;
13
+ }
14
+ set item(i) {
15
+ this._item = i;
16
+ this.activeMenuItem = i;
17
+ }
18
+ get item() {
19
+ return this._item;
20
+ }
21
+ get isOpened() {
22
+ return this.groupPopoverRef && this.groupPopoverRef.getOverlayRef() && this.groupPopoverRef.getOverlayRef().hasAttached();
23
+ }
24
+ mousedownHandler(event) {
25
+ event.preventDefault();
26
+ this.toggleGroupMenus(event);
27
+ }
28
+ clickHandle(event) {
29
+ event.stopPropagation();
30
+ }
31
+ ngOnInit() { }
32
+ ngOnDestroy() {
33
+ this.colseGroup();
34
+ }
35
+ toggleGroupMenus(event) {
36
+ if (this.editor?.disabled) {
37
+ return;
38
+ }
39
+ if (this.isOpened) {
40
+ this.colseGroup();
41
+ }
42
+ else {
43
+ this.openGroup(event);
44
+ }
45
+ }
46
+ selectionChange(editor) {
47
+ const activeItem = this.menusActive(editor);
48
+ this.activeMenuItem = activeItem ? activeItem : null;
49
+ this.activeChange();
50
+ this.colseGroup();
51
+ }
52
+ menusActive(editor) {
53
+ return this.menus.find(i => {
54
+ if (this.editor?.selection && i?.active) {
55
+ return i?.active(editor);
56
+ }
57
+ });
58
+ }
59
+ activeChange() {
60
+ const activeItem = this.menusActive(this.editor);
61
+ if (this.isOpened && !activeItem) {
62
+ this.active = false;
63
+ return;
64
+ }
65
+ this.active = activeItem ? true : false;
66
+ }
67
+ openGroup(event) {
68
+ this.active = true;
69
+ this.groupPopoverRef = this.thyPopover.open(this.groupTemplate, {
70
+ panelClass: 'the-toolbar-group-container',
71
+ offset: 10,
72
+ minWidth: 0,
73
+ placement: 'bottomRight',
74
+ origin: event.currentTarget,
75
+ viewContainerRef: this.viewContainerRef,
76
+ hasBackdrop: false,
77
+ outsideClosable: true
78
+ });
79
+ this.groupPopoverRef.afterClosed().subscribe(() => {
80
+ this.activeChange();
81
+ });
82
+ }
83
+ colseGroup() {
84
+ if (this.isOpened) {
85
+ this.groupPopoverRef.close();
86
+ }
87
+ }
88
+ }
89
+ TheToolbarGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: TheToolbarGroupComponent, deps: [{ token: i0.ElementRef }, { token: i1.ThyPopover }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
90
+ TheToolbarGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: TheToolbarGroupComponent, selector: "the-toolbar-group", inputs: { menus: "menus", item: "item" }, host: { listeners: { "mousedown": "mousedownHandler($event)", "click": "clickHandle($event)" }, classAttribute: "the-toolbar-group" }, viewQueries: [{ propertyName: "groupTemplate", first: true, predicate: ["groupTemplate"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<a thyIconNavLink [thyIconNavLinkIcon]=\"item.icon\" [thyTooltip]=\"item?.name\" thyTooltipPlacement=\"top\" [thyIconNavLinkActive]=\"active\"></a>\n\n<ng-template #groupTemplate>\n <the-toolbar class=\"group\" [editor]=\"editor\" [toolbarItems]=\"menus\" [isMore]=\"false\"></the-toolbar>\n</ng-template>\n", components: [{ type: i2.ThyIconNavLinkComponent, selector: "[thyIconNavLink]", inputs: ["thyIconNavLinkIcon", "thyIconNavLinkActive"] }, { type: i3.TheToolbarComponent, selector: "the-toolbar", inputs: ["editor", "toolbarItems", "align", "containerClass", "isMore", "afterTemplate"] }], directives: [{ type: i4.ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }] });
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: TheToolbarGroupComponent, decorators: [{
92
+ type: Component,
93
+ args: [{ selector: 'the-toolbar-group', host: {
94
+ class: 'the-toolbar-group'
95
+ }, template: "<a thyIconNavLink [thyIconNavLinkIcon]=\"item.icon\" [thyTooltip]=\"item?.name\" thyTooltipPlacement=\"top\" [thyIconNavLinkActive]=\"active\"></a>\n\n<ng-template #groupTemplate>\n <the-toolbar class=\"group\" [editor]=\"editor\" [toolbarItems]=\"menus\" [isMore]=\"false\"></the-toolbar>\n</ng-template>\n" }]
96
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ThyPopover }, { type: i0.ViewContainerRef }]; }, propDecorators: { menus: [{
97
+ type: Input
98
+ }], item: [{
99
+ type: Input
100
+ }], groupTemplate: [{
101
+ type: ViewChild,
102
+ args: ['groupTemplate', { read: TemplateRef, static: true }]
103
+ }], mousedownHandler: [{
104
+ type: HostListener,
105
+ args: ['mousedown', ['$event']]
106
+ }], clickHandle: [{
107
+ type: HostListener,
108
+ args: ['click', ['$event']]
109
+ }] } });
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy90b29sYmFyLWdyb3VwL3Rvb2xiYXItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvdG9vbGJhci1ncm91cC90b29sYmFyLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUErQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQVl4SSxNQUFNLE9BQU8sd0JBQXdCO0lBc0NqQyxZQUFtQixVQUFzQixFQUFVLFVBQXNCLEVBQVUsZ0JBQWtDO1FBQWxHLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQWxCckgsV0FBTSxHQUFHLEtBQUssQ0FBQztJQWtCeUcsQ0FBQztJQWpDekgsSUFDSSxJQUFJLENBQUMsQ0FBcUI7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlILENBQUM7SUFXRCxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ2xCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztR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YixLQUFLO2dCQUdGLElBQUk7c0JBRFAsS0FBSztnQkFvQk4sYUFBYTtzQkFEWixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJL0QsZ0JBQWdCO3NCQURmLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU9yQyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBWaWV3Q2hpbGQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmLCBPbkRlc3Ryb3ksIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGh5UG9wb3ZlciwgVGh5UG9wb3ZlclJlZiB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBEZWZhdWx0VG9vbGJhckl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aGUtdG9vbGJhci1ncm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Rvb2xiYXItZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aGUtdG9vbGJhci1ncm91cCdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFRoZVRvb2xiYXJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIF9pdGVtOiBEZWZhdWx0VG9vbGJhckl0ZW07XG5cbiAgICBASW5wdXQoKSBtZW51czogRGVmYXVsdFRvb2xiYXJJdGVtW107XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBpdGVtKGk6IERlZmF1bHRUb29sYmFySXRlbSkge1xuICAgICAgICB0aGlzLl9pdGVtID0gaTtcbiAgICAgICAgdGhpcy5hY3RpdmVNZW51SXRlbSA9IGk7XG4gICAgfVxuXG4gICAgZ2V0IGl0ZW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtO1xuICAgIH1cblxuICAgIGdldCBpc09wZW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBQb3BvdmVyUmVmICYmIHRoaXMuZ3JvdXBQb3BvdmVyUmVmLmdldE92ZXJsYXlSZWYoKSAmJiB0aGlzLmdyb3VwUG9wb3ZlclJlZi5nZXRPdmVybGF5UmVmKCkuaGFzQXR0YWNoZWQoKTtcbiAgICB9XG5cbiAgICBlZGl0b3I6IEVkaXRvcjtcbiAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICBhY3RpdmVNZW51SXRlbTogRGVmYXVsdFRvb2xiYXJJdGVtO1xuICAgIGdyb3VwUG9wb3ZlclJlZjogVGh5UG9wb3ZlclJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnZ3JvdXBUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIG1vdXNlZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy50b2dnbGVHcm91cE1lbnVzKGV2ZW50KTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgY2xpY2tIYW5kbGUoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgdGh5UG9wb3ZlcjogVGh5UG9wb3ZlciwgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7fVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sc2VHcm91cCgpO1xuICAgIH1cblxuICAgIHRvZ2dsZUdyb3VwTWVudXMoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yPy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzT3BlbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHNlR3JvdXAoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3Blbkdyb3VwKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2UoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMubWVudXNBY3RpdmUoZWRpdG9yKTtcbiAgICAgICAgdGhpcy5hY3RpdmVNZW51SXRlbSA9IGFjdGl2ZUl0ZW0gPyBhY3RpdmVJdGVtIDogbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5jb2xzZUdyb3VwKCk7XG4gICAgfVxuXG4gICAgbWVudXNBY3RpdmUoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudXMuZmluZChpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvcj8uc2VsZWN0aW9uICYmIGk/LmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpPy5hY3RpdmUoZWRpdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWN0aXZlQ2hhbmdlKCkge1xuICAgICAgICBjb25zdCBhY3RpdmVJdGVtID0gdGhpcy5tZW51c0FjdGl2ZSh0aGlzLmVkaXRvcik7XG4gICAgICAgIGlmICh0aGlzLmlzT3BlbmVkICYmICFhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlID0gYWN0aXZlSXRlbSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBvcGVuR3JvdXAoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmdyb3VwUG9wb3ZlclJlZiA9IHRoaXMudGh5UG9wb3Zlci5vcGVuKHRoaXMuZ3JvdXBUZW1wbGF0ZSwge1xuICAgICAgICAgICAgcGFuZWxDbGFzczogJ3RoZS10b29sYmFyLWdyb3VwLWNvbnRhaW5lcicsXG4gICAgICAgICAgICBvZmZzZXQ6IDEwLFxuICAgICAgICAgICAgbWluV2lkdGg6IDAsXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b21SaWdodCcsXG4gICAgICAgICAgICBvcmlnaW46IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICBvdXRzaWRlQ2xvc2FibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JvdXBQb3BvdmVyUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2hhbmdlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbHNlR3JvdXAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3BlbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwUG9wb3ZlclJlZi5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGEgdGh5SWNvbk5hdkxpbmsgW3RoeUljb25OYXZMaW5rSWNvbl09XCJpdGVtLmljb25cIiBbdGh5VG9vbHRpcF09XCJpdGVtPy5uYW1lXCIgdGh5VG9vbHRpcFBsYWNlbWVudD1cInRvcFwiIFt0aHlJY29uTmF2TGlua0FjdGl2ZV09XCJhY3RpdmVcIj48L2E+XG5cbjxuZy10ZW1wbGF0ZSAjZ3JvdXBUZW1wbGF0ZT5cbiAgICA8dGhlLXRvb2xiYXIgY2xhc3M9XCJncm91cFwiIFtlZGl0b3JdPVwiZWRpdG9yXCIgW3Rvb2xiYXJJdGVtc109XCJtZW51c1wiIFtpc01vcmVdPVwiZmFsc2VcIj48L3RoZS10b29sYmFyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==