@vendure/admin-ui 1.7.4 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/bundles/vendure-admin-ui-catalog.umd.js +902 -74
  2. package/bundles/vendure-admin-ui-catalog.umd.js.map +1 -1
  3. package/bundles/vendure-admin-ui-core.umd.js +2392 -820
  4. package/bundles/vendure-admin-ui-core.umd.js.map +1 -1
  5. package/bundles/vendure-admin-ui-customer.umd.js +4 -3
  6. package/bundles/vendure-admin-ui-customer.umd.js.map +1 -1
  7. package/bundles/vendure-admin-ui-dashboard.umd.js +3 -1
  8. package/bundles/vendure-admin-ui-dashboard.umd.js.map +1 -1
  9. package/bundles/vendure-admin-ui-order.umd.js +781 -175
  10. package/bundles/vendure-admin-ui-order.umd.js.map +1 -1
  11. package/bundles/vendure-admin-ui-settings.umd.js +5 -4
  12. package/bundles/vendure-admin-ui-settings.umd.js.map +1 -1
  13. package/bundles/vendure-admin-ui-system.umd.js +1 -1
  14. package/catalog/catalog.module.d.ts +3 -0
  15. package/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.d.ts +17 -0
  16. package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.d.ts +38 -0
  17. package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.d.ts +4 -0
  18. package/catalog/components/collection-list/collection-list-bulk-actions.d.ts +6 -0
  19. package/catalog/components/collection-list/collection-list.component.d.ts +7 -5
  20. package/catalog/components/collection-tree/collection-tree-node.component.d.ts +8 -4
  21. package/catalog/components/collection-tree/collection-tree.component.d.ts +2 -1
  22. package/catalog/components/facet-list/facet-list-bulk-actions.d.ts +5 -0
  23. package/catalog/components/facet-list/facet-list.component.d.ts +2 -1
  24. package/catalog/components/product-list/product-list-bulk-actions.d.ts +6 -0
  25. package/catalog/components/product-list/product-list.component.d.ts +2 -1
  26. package/catalog/public_api.d.ts +6 -0
  27. package/catalog/vendure-admin-ui-catalog.metadata.json +1 -1
  28. package/core/common/component-registry-types.d.ts +1 -1
  29. package/core/common/generated-types.d.ts +609 -3
  30. package/core/common/utilities/bulk-action-utils.d.ts +19 -0
  31. package/core/common/utilities/selection-manager.d.ts +7 -0
  32. package/core/common/version.d.ts +1 -1
  33. package/core/data/definitions/collection-definitions.d.ts +3 -0
  34. package/core/data/definitions/facet-definitions.d.ts +3 -0
  35. package/core/data/definitions/order-definitions.d.ts +12 -0
  36. package/core/data/definitions/product-definitions.d.ts +1 -0
  37. package/core/data/providers/collection-data.service.d.ts +4 -1
  38. package/core/data/providers/facet-data.service.d.ts +4 -1
  39. package/core/data/providers/order-data.service.d.ts +18 -1
  40. package/core/data/providers/product-data.service.d.ts +1 -0
  41. package/core/providers/bulk-action-registry/bulk-action-registry.service.d.ts +6 -0
  42. package/core/providers/bulk-action-registry/bulk-action-types.d.ts +149 -0
  43. package/core/providers/bulk-action-registry/register-bulk-action.d.ts +53 -0
  44. package/core/providers/modal/modal.service.d.ts +2 -0
  45. package/core/providers/nav-builder/nav-builder-types.d.ts +1 -0
  46. package/core/public_api.d.ts +18 -1
  47. package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +3 -3
  48. package/core/shared/components/bulk-action-menu/bulk-action-menu.component.d.ts +29 -0
  49. package/core/shared/components/data-table/data-table.component.d.ts +26 -7
  50. package/core/shared/components/dropdown/dropdown-menu.component.d.ts +1 -0
  51. package/core/shared/components/radio-card/radio-card-fieldset.component.d.ts +21 -0
  52. package/core/shared/components/radio-card/radio-card.component.d.ts +19 -0
  53. package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.d.ts +28 -0
  54. package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.d.ts +31 -0
  55. package/core/shared/components/rich-text-editor/prosemirror/custom-nodes.d.ts +4 -0
  56. package/core/shared/components/rich-text-editor/prosemirror/inputrules.d.ts +5 -5
  57. package/core/shared/components/rich-text-editor/prosemirror/menu/links.d.ts +1 -1
  58. package/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.d.ts +12 -0
  59. package/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.d.ts +9 -0
  60. package/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.d.ts +14 -0
  61. package/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.d.ts +7 -0
  62. package/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.d.ts +1 -1
  63. package/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.d.ts +7 -0
  64. package/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.d.ts +13 -0
  65. package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +7 -3
  66. package/core/shared/components/rich-text-editor/prosemirror/types.d.ts +0 -2
  67. package/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.d.ts +18 -0
  68. package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +6 -2
  69. package/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.d.ts +27 -0
  70. package/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.d.ts +19 -0
  71. package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +5 -17
  72. package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +2 -1
  73. package/core/vendure-admin-ui-core.metadata.json +1 -1
  74. package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts +11 -4
  75. package/customer/vendure-admin-ui-customer.metadata.json +1 -1
  76. package/esm2015/catalog/catalog.module.js +25 -2
  77. package/esm2015/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.js +4 -1
  78. package/esm2015/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.js +51 -0
  79. package/esm2015/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.js +89 -0
  80. package/esm2015/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.js +69 -0
  81. package/esm2015/catalog/components/collection-detail/collection-detail.component.js +3 -3
  82. package/esm2015/catalog/components/collection-list/collection-list-bulk-actions.js +147 -0
  83. package/esm2015/catalog/components/collection-list/collection-list.component.js +17 -8
  84. package/esm2015/catalog/components/collection-tree/collection-tree-node.component.js +16 -7
  85. package/esm2015/catalog/components/collection-tree/collection-tree.component.js +3 -2
  86. package/esm2015/catalog/components/facet-list/facet-list-bulk-actions.js +208 -0
  87. package/esm2015/catalog/components/facet-list/facet-list.component.js +13 -4
  88. package/esm2015/catalog/components/product-detail/product-detail.component.js +35 -23
  89. package/esm2015/catalog/components/product-list/product-list-bulk-actions.js +173 -0
  90. package/esm2015/catalog/components/product-list/product-list.component.js +10 -5
  91. package/esm2015/catalog/components/product-variants-list/product-variants-list.component.js +2 -2
  92. package/esm2015/catalog/providers/routing/collection-resolver.js +2 -1
  93. package/esm2015/catalog/public_api.js +7 -1
  94. package/esm2015/core/common/component-registry-types.js +1 -1
  95. package/esm2015/core/common/generated-types.js +5 -1
  96. package/esm2015/core/common/introspection-result.js +296 -191
  97. package/esm2015/core/common/utilities/bulk-action-utils.js +44 -0
  98. package/esm2015/core/common/utilities/selection-manager.js +33 -1
  99. package/esm2015/core/common/version.js +2 -2
  100. package/esm2015/core/components/breadcrumb/breadcrumb.component.js +1 -1
  101. package/esm2015/core/data/definitions/collection-definitions.js +30 -1
  102. package/esm2015/core/data/definitions/facet-definitions.js +31 -1
  103. package/esm2015/core/data/definitions/order-definitions.js +114 -1
  104. package/esm2015/core/data/definitions/product-definitions.js +15 -1
  105. package/esm2015/core/data/providers/collection-data.service.js +17 -2
  106. package/esm2015/core/data/providers/customer-data.service.js +8 -4
  107. package/esm2015/core/data/providers/facet-data.service.js +18 -2
  108. package/esm2015/core/data/providers/order-data.service.js +38 -2
  109. package/esm2015/core/data/providers/product-data.service.js +7 -2
  110. package/esm2015/core/data/utils/remove-readonly-custom-fields.js +5 -1
  111. package/esm2015/core/providers/bulk-action-registry/bulk-action-registry.service.js +27 -0
  112. package/esm2015/core/providers/bulk-action-registry/bulk-action-types.js +2 -0
  113. package/esm2015/core/providers/bulk-action-registry/register-bulk-action.js +63 -0
  114. package/esm2015/core/providers/dashboard-widget/dashboard-widget.service.js +1 -4
  115. package/esm2015/core/providers/modal/modal.service.js +2 -1
  116. package/esm2015/core/providers/nav-builder/nav-builder-types.js +1 -1
  117. package/esm2015/core/public_api.js +19 -2
  118. package/esm2015/core/shared/components/action-bar/action-bar.component.js +4 -8
  119. package/esm2015/core/shared/components/asset-gallery/asset-gallery.component.js +2 -2
  120. package/esm2015/core/shared/components/bulk-action-menu/bulk-action-menu.component.js +99 -0
  121. package/esm2015/core/shared/components/data-table/data-table.component.js +64 -15
  122. package/esm2015/core/shared/components/dropdown/dropdown-menu.component.js +4 -3
  123. package/esm2015/core/shared/components/facet-value-selector/facet-value-selector.component.js +2 -2
  124. package/esm2015/core/shared/components/language-selector/language-selector.component.js +2 -2
  125. package/esm2015/core/shared/components/order-state-label/order-state-label.component.js +2 -1
  126. package/esm2015/core/shared/components/product-search-input/product-search-input.component.js +1 -1
  127. package/esm2015/core/shared/components/product-selector/product-selector.component.js +1 -1
  128. package/esm2015/core/shared/components/radio-card/radio-card-fieldset.component.js +57 -0
  129. package/esm2015/core/shared/components/radio-card/radio-card.component.js +54 -0
  130. package/esm2015/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.js +2 -2
  131. package/esm2015/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.js +140 -0
  132. package/esm2015/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.js +45 -0
  133. package/esm2015/core/shared/components/rich-text-editor/prosemirror/custom-nodes.js +60 -0
  134. package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/links.js +4 -4
  135. package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.js +23 -1
  136. package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.js +12 -0
  137. package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu.js +73 -18
  138. package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.js +16 -0
  139. package/esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.js +100 -0
  140. package/esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.js +97 -0
  141. package/esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.js +166 -0
  142. package/esm2015/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.js +47 -17
  143. package/esm2015/core/shared/components/rich-text-editor/prosemirror/types.js +1 -1
  144. package/esm2015/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.js +57 -0
  145. package/esm2015/core/shared/components/rich-text-editor/rich-text-editor.component.js +20 -9
  146. package/esm2015/core/shared/components/simple-dialog/simple-dialog.component.js +2 -2
  147. package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.js +59 -0
  148. package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.js +66 -0
  149. package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.js +47 -84
  150. package/esm2015/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.js +3 -3
  151. package/esm2015/core/shared/dynamic-form-inputs/register-dynamic-input-components.js +3 -1
  152. package/esm2015/core/shared/pipes/state-i18n-token.pipe.js +2 -1
  153. package/esm2015/core/shared/shared.module.js +13 -1
  154. package/esm2015/customer/components/customer-group-list/customer-group-list.component.js +2 -2
  155. package/esm2015/customer/components/customer-group-member-list/customer-group-member-list.component.js +6 -6
  156. package/esm2015/customer/components/customer-list/customer-list.component.js +2 -2
  157. package/esm2015/dashboard/dashboard.module.js +6 -2
  158. package/esm2015/order/components/coupon-code-selector/coupon-code-selector.component.js +42 -0
  159. package/esm2015/order/components/draft-order-detail/draft-order-detail.component.js +195 -0
  160. package/esm2015/order/components/draft-order-variant-selector/draft-order-variant-selector.component.js +59 -0
  161. package/esm2015/order/components/order-detail/order-detail.component.js +2 -2
  162. package/esm2015/order/components/order-editor/order-editor.component.js +5 -11
  163. package/esm2015/order/components/order-list/order-list.component.js +20 -4
  164. package/esm2015/order/components/order-table/order-table.component.js +16 -5
  165. package/esm2015/order/components/select-address-dialog/select-address-dialog.component.js +91 -0
  166. package/esm2015/order/components/select-address-dialog/select-address-dialog.graphql.js +14 -0
  167. package/esm2015/order/components/select-customer-dialog/select-customer-dialog.component.js +59 -0
  168. package/esm2015/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.js +30 -0
  169. package/esm2015/order/order.module.js +13 -1
  170. package/esm2015/order/order.routes.js +26 -7
  171. package/esm2015/order/providers/routing/order-resolver.js +29 -12
  172. package/esm2015/order/providers/routing/order.guard.js +41 -0
  173. package/esm2015/order/public_api.js +9 -1
  174. package/esm2015/settings/components/country-list/country-list.component.js +2 -2
  175. package/esm2015/settings/components/profile/profile.component.js +2 -2
  176. package/esm2015/settings/components/zone-list/zone-list.component.js +2 -2
  177. package/esm2015/settings/components/zone-member-list/zone-member-list.component.js +2 -2
  178. package/esm2015/system/components/health-check/health-check.component.js +1 -1
  179. package/fesm2015/vendure-admin-ui-catalog.js +835 -61
  180. package/fesm2015/vendure-admin-ui-catalog.js.map +1 -1
  181. package/fesm2015/vendure-admin-ui-core.js +3122 -1514
  182. package/fesm2015/vendure-admin-ui-core.js.map +1 -1
  183. package/fesm2015/vendure-admin-ui-customer.js +7 -7
  184. package/fesm2015/vendure-admin-ui-customer.js.map +1 -1
  185. package/fesm2015/vendure-admin-ui-dashboard.js +5 -1
  186. package/fesm2015/vendure-admin-ui-dashboard.js.map +1 -1
  187. package/fesm2015/vendure-admin-ui-order.js +780 -232
  188. package/fesm2015/vendure-admin-ui-order.js.map +1 -1
  189. package/fesm2015/vendure-admin-ui-settings.js +4 -4
  190. package/fesm2015/vendure-admin-ui-settings.js.map +1 -1
  191. package/fesm2015/vendure-admin-ui-system.js +1 -1
  192. package/order/components/coupon-code-selector/coupon-code-selector.component.d.ts +18 -0
  193. package/order/components/draft-order-detail/draft-order-detail.component.d.ts +49 -0
  194. package/order/components/draft-order-variant-selector/draft-order-variant-selector.component.d.ts +21 -0
  195. package/order/components/order-editor/order-editor.component.d.ts +1 -6
  196. package/order/components/order-list/order-list.component.d.ts +1 -0
  197. package/order/components/order-table/order-table.component.d.ts +11 -2
  198. package/order/components/select-address-dialog/select-address-dialog.component.d.ts +24 -0
  199. package/order/components/select-address-dialog/select-address-dialog.graphql.d.ts +1 -0
  200. package/order/components/select-customer-dialog/select-customer-dialog.component.d.ts +22 -0
  201. package/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.d.ts +16 -0
  202. package/order/providers/routing/order-resolver.d.ts +8 -5
  203. package/order/providers/routing/order.guard.d.ts +9 -0
  204. package/order/public_api.d.ts +8 -0
  205. package/order/vendure-admin-ui-order.metadata.json +1 -1
  206. package/package.json +13 -12
  207. package/settings/components/zone-member-list/zone-member-list.component.d.ts +3 -1
  208. package/settings/vendure-admin-ui-settings.metadata.json +1 -1
  209. package/static/i18n-messages/cs.json +33 -0
  210. package/static/i18n-messages/de.json +33 -0
  211. package/static/i18n-messages/en.json +36 -4
  212. package/static/i18n-messages/es.json +33 -0
  213. package/static/i18n-messages/fr.json +33 -0
  214. package/static/i18n-messages/it.json +33 -0
  215. package/static/i18n-messages/pl.json +33 -0
  216. package/static/i18n-messages/pt_BR.json +33 -0
  217. package/static/i18n-messages/pt_PT.json +33 -0
  218. package/static/i18n-messages/ru.json +33 -0
  219. package/static/i18n-messages/uk.json +33 -0
  220. package/static/i18n-messages/zh_Hans.json +33 -0
  221. package/static/i18n-messages/zh_Hant.json +33 -0
  222. package/static/styles/global/_forms.scss +4 -2
  223. package/static/styles/global/_overrides.scss +1 -1
  224. package/static/styles/global/_utilities.scss +4 -0
  225. package/static/theme.min.css +1 -1
  226. package/system/vendure-admin-ui-system.metadata.json +1 -1
  227. package/core/shared/components/rich-text-editor/prosemirror/menu/images.d.ts +0 -4
  228. package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/images.js +0 -36
@@ -0,0 +1,100 @@
1
+ import { MenuItem } from 'prosemirror-menu';
2
+ import { NodeSelection, Plugin } from 'prosemirror-state';
3
+ import { ExternalImageDialogComponent, } from '../../external-image-dialog/external-image-dialog.component';
4
+ import { canInsert, renderClarityIcon } from '../menu/menu-common';
5
+ export function insertImageItem(nodeType, modalService) {
6
+ return new MenuItem({
7
+ title: 'Insert image',
8
+ label: 'Image',
9
+ render: renderClarityIcon({ shape: 'image', label: 'Image' }),
10
+ class: '',
11
+ css: '',
12
+ enable(state) {
13
+ return canInsert(state, nodeType);
14
+ },
15
+ run(state, _, view) {
16
+ let attrs;
17
+ if (state.selection instanceof NodeSelection && state.selection.node.type === nodeType) {
18
+ attrs = state.selection.node.attrs;
19
+ }
20
+ modalService
21
+ .fromComponent(ExternalImageDialogComponent, {
22
+ closable: true,
23
+ locals: {
24
+ existing: attrs,
25
+ },
26
+ })
27
+ .subscribe(result => {
28
+ if (result) {
29
+ // tslint:disable-next-line:no-non-null-assertion
30
+ view.dispatch(view.state.tr.replaceSelectionWith(nodeType.createAndFill(result)));
31
+ }
32
+ view.focus();
33
+ });
34
+ },
35
+ });
36
+ }
37
+ export const imageContextMenuPlugin = (contextMenuService, modalService) => new Plugin({
38
+ view: () => {
39
+ return {
40
+ update: view => {
41
+ if (!view.hasFocus()) {
42
+ return;
43
+ }
44
+ const { doc, selection } = view.state;
45
+ let imageNode;
46
+ let imageNodePos = 0;
47
+ doc.nodesBetween(selection.from, selection.to, (n, pos, parent) => {
48
+ if (n.type.name === 'image') {
49
+ imageNode = n;
50
+ imageNodePos = pos;
51
+ return false;
52
+ }
53
+ });
54
+ if (imageNode) {
55
+ const node = view.nodeDOM(imageNodePos);
56
+ if (node instanceof HTMLImageElement) {
57
+ contextMenuService.setContextMenu({
58
+ ref: selection,
59
+ title: 'Image',
60
+ iconShape: 'image',
61
+ element: node,
62
+ coords: view.coordsAtPos(imageNodePos),
63
+ items: [
64
+ {
65
+ enabled: true,
66
+ iconShape: 'image',
67
+ label: 'Image properties',
68
+ onClick: () => {
69
+ contextMenuService.clearContextMenu();
70
+ modalService
71
+ .fromComponent(ExternalImageDialogComponent, {
72
+ closable: true,
73
+ locals: {
74
+ // tslint:disable-next-line:no-non-null-assertion
75
+ existing: imageNode.attrs,
76
+ },
77
+ })
78
+ .subscribe(result => {
79
+ if (result) {
80
+ // tslint:disable-next-line:no-non-null-assertion
81
+ view.dispatch(view.state.tr.replaceSelectionWith(
82
+ // tslint:disable-next-line:no-non-null-assertion
83
+ imageNode.type.createAndFill(result)));
84
+ }
85
+ view.focus();
86
+ });
87
+ },
88
+ },
89
+ ],
90
+ });
91
+ }
92
+ }
93
+ else {
94
+ contextMenuService.clearContextMenu();
95
+ }
96
+ },
97
+ };
98
+ },
99
+ });
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9zaGFyZWQvY29tcG9uZW50cy9yaWNoLXRleHQtZWRpdG9yL3Byb3NlbWlycm9yL3BsdWdpbnMvaW1hZ2UtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sRUFBZSxNQUFNLG1CQUFtQixDQUFDO0FBaUJwRixPQUFPLEVBRUgsNEJBQTRCLEdBQy9CLE1BQU0sNkRBQTZELENBQUM7QUFHckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRW5FLE1BQU0sVUFBVSxlQUFlLENBQUMsUUFBa0IsRUFBRSxZQUEwQjtJQUMxRSxPQUFPLElBQUksUUFBUSxDQUFDO1FBQ2hCLEtBQUssRUFBRSxjQUFjO1FBQ3JCLEtBQUssRUFBRSxPQUFPO1FBQ2QsTUFBTSxFQUFFLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDN0QsS0FBSyxFQUFFLEVBQUU7UUFDVCxHQUFHLEVBQUUsRUFBRTtRQUNQLE1BQU0sQ0FBQyxLQUFrQjtZQUNyQixPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELEdBQUcsQ0FBQyxLQUFrQixFQUFFLENBQUMsRUFBRSxJQUFnQjtZQUN2QyxJQUFJLEtBQXFDLENBQUM7WUFDMUMsSUFBSSxLQUFLLENBQUMsU0FBUyxZQUFZLGFBQWEsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUNwRixLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJ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LEVBQUUsQ0FBQzt3Q0FDakIsQ0FBQyxDQUFDLENBQUM7b0NBQ1gsQ0FBQztpQ0FDSjs2QkFDSjt5QkFDSixDQUFDLENBQUM7cUJBQ047aUJBQ0o7cUJBQU07b0JBQ0gsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztpQkFDekM7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3Byb3NlbWlycm9yLW1lbnUnO1xyXG5pbXBvcnQgeyBOb2RlLCBOb2RlVHlwZSB9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcclxuaW1wb3J0IHsgRWRpdG9yU3RhdGUsIE5vZGVTZWxlY3Rpb24sIFBsdWdpbiwgVHJhbnNhY3Rpb24gfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XHJcbmltcG9ydCB7XHJcbiAgICBhZGRDb2x1bW5BZnRlcixcclxuICAgIGFkZENvbHVtbkJlZm9yZSxcclxuICAgIGFkZFJvd0FmdGVyLFxyXG4gICAgYWRkUm93QmVmb3JlLFxyXG4gICAgZGVsZXRlQ29sdW1uLFxyXG4gICAgZGVsZXRlUm93LFxyXG4gICAgZGVsZXRlVGFibGUsXHJcbiAgICBtZXJnZUNlbGxzLFxyXG4gICAgc3BsaXRDZWxsLFxyXG4gICAgdG9nZ2xlSGVhZGVyQ29sdW1uLFxyXG4gICAgdG9nZ2xlSGVhZGVyUm93LFxyXG59IGZyb20gJ3Byb3NlbWlycm9yLXRhYmxlcyc7XHJcbmltcG9ydCB7IEVkaXRvclZpZXcgfSBmcm9tICdwcm9zZW1pcnJvci12aWV3JztcclxuXHJcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICAgIEV4dGVybmFsSW1hZ2VBdHRycyxcclxuICAgIEV4dGVybmFsSW1hZ2VEaWFsb2dDb21wb25lbnQsXHJcbn0gZnJvbSAnLi4vLi4vZXh0ZXJuYWwtaW1hZ2UtZGlhbG9nL2V4dGVybmFsLWltYWdlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSYXdIdG1sRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcmF3LWh0bWwtZGlhbG9nL3Jhdy1odG1sLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb250ZXh0TWVudUl0ZW0sIENvbnRleHRNZW51U2VydmljZSB9IGZyb20gJy4uL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuc2VydmljZSc7XHJcbmltcG9ydCB7IGNhbkluc2VydCwgcmVuZGVyQ2xhcml0eUljb24gfSBmcm9tICcuLi9tZW51L21lbnUtY29tbW9uJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRJbWFnZUl0ZW0obm9kZVR5cGU6IE5vZGVUeXBlLCBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSkge1xyXG4gICAgcmV0dXJuIG5ldyBNZW51SXRlbSh7XHJcbiAgICAgICAgdGl0bGU6ICdJbnNlcnQgaW1hZ2UnLFxyXG4gICAgICAgIGxhYmVsOiAnSW1hZ2UnLFxyXG4gICAgICAgIHJlbmRlcjogcmVuZGVyQ2xhcml0eUljb24oeyBzaGFwZTogJ2ltYWdlJywgbGFiZWw6ICdJbWFnZScgfSksXHJcbiAgICAgICAgY2xhc3M6ICcnLFxyXG4gICAgICAgIGNzczogJycsXHJcbiAgICAgICAgZW5hYmxlKHN0YXRlOiBFZGl0b3JTdGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2FuSW5zZXJ0KHN0YXRlLCBub2RlVHlwZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBydW4oc3RhdGU6IEVkaXRvclN0YXRlLCBfLCB2aWV3OiBFZGl0b3JWaWV3KSB7XHJcbiAgICAgICAgICAgIGxldCBhdHRyczogRXh0ZXJuYWxJbWFnZUF0dHJzIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uIGluc3RhbmNlb2YgTm9kZVNlbGVjdGlvbiAmJiBzdGF0ZS5zZWxlY3Rpb24ubm9kZS50eXBlID09PSBub2RlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgYXR0cnMgPSBzdGF0ZS5zZWxlY3Rpb24ubm9kZS5hdHRycyBhcyBFeHRlcm5hbEltYWdlQXR0cnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbW9kYWxTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuZnJvbUNvbXBvbmVudChFeHRlcm5hbEltYWdlRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nOiBhdHRycyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5kaXNwYXRjaCh2aWV3LnN0YXRlLnRyLnJlcGxhY2VTZWxlY3Rpb25XaXRoKG5vZGVUeXBlLmNyZWF0ZUFuZEZpbGwocmVzdWx0KSEpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmlldy5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaW1hZ2VDb250ZXh0TWVudVBsdWdpbiA9IChjb250ZXh0TWVudVNlcnZpY2U6IENvbnRleHRNZW51U2VydmljZSwgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UpID0+XHJcbiAgICBuZXcgUGx1Z2luKHtcclxuICAgICAgICB2aWV3OiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGU6IHZpZXcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmlldy5oYXNGb2N1cygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkb2MsIHNlbGVjdGlvbiB9ID0gdmlldy5zdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VOb2RlOiBOb2RlIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZU5vZGVQb3MgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvYy5ub2Rlc0JldHdlZW4oc2VsZWN0aW9uLmZyb20sIHNlbGVjdGlvbi50bywgKG4sIHBvcywgcGFyZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLnR5cGUubmFtZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VOb2RlID0gbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlTm9kZVBvcyA9IHBvcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHZpZXcubm9kZURPTShpbWFnZU5vZGVQb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRNZW51U2VydmljZS5zZXRDb250ZXh0TWVudSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiBzZWxlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdJbWFnZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblNoYXBlOiAnaW1hZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IG5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzOiB2aWV3LmNvb3Jkc0F0UG9zKGltYWdlTm9kZVBvcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25TaGFwZTogJ2ltYWdlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnSW1hZ2UgcHJvcGVydGllcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVTZXJ2aWNlLmNsZWFyQ29udGV4dE1lbnUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZyb21Db21wb25lbnQoRXh0ZXJuYWxJbWFnZURpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3Rpbmc6IGltYWdlTm9kZSEuYXR0cnMgYXMgRXh0ZXJuYWxJbWFnZUF0dHJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmRpc3BhdGNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LnN0YXRlLnRyLnJlcGxhY2VTZWxlY3Rpb25XaXRoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VOb2RlIS50eXBlLmNyZWF0ZUFuZEZpbGwocmVzdWx0KSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRNZW51U2VydmljZS5jbGVhckNvbnRleHRNZW51KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG4gICAgfSk7XHJcbiJdfQ==
@@ -0,0 +1,97 @@
1
+ import { DOMParser, DOMSerializer } from 'prosemirror-model';
2
+ import { Plugin } from 'prosemirror-state';
3
+ import { RawHtmlDialogComponent } from '../../raw-html-dialog/raw-html-dialog.component';
4
+ /**
5
+ * Implements editing of raw HTML for the selected node in the editor.
6
+ */
7
+ export const rawEditorPlugin = (contextMenuService, modalService) => new Plugin({
8
+ view: _view => {
9
+ const domParser = DOMParser.fromSchema(_view.state.schema);
10
+ const domSerializer = DOMSerializer.fromSchema(_view.state.schema);
11
+ return {
12
+ update: view => {
13
+ if (!view.hasFocus()) {
14
+ return;
15
+ }
16
+ let topLevelNode;
17
+ const { doc, selection } = view.state;
18
+ let topLevelNodePos = 0;
19
+ doc.nodesBetween(selection.from, selection.to, (n, pos, parent) => {
20
+ if (parent === doc) {
21
+ topLevelNode = n;
22
+ topLevelNodePos = pos;
23
+ return false;
24
+ }
25
+ });
26
+ if (topLevelNode) {
27
+ const node = view.nodeDOM(topLevelNodePos);
28
+ if (node instanceof HTMLElement) {
29
+ contextMenuService.setContextMenu({
30
+ ref: selection,
31
+ title: '',
32
+ // iconShape: 'ellipsis-vertical',
33
+ element: node,
34
+ coords: view.coordsAtPos(topLevelNodePos),
35
+ items: [
36
+ {
37
+ enabled: true,
38
+ iconShape: 'code',
39
+ label: 'Edit HTML',
40
+ onClick: () => {
41
+ contextMenuService.clearContextMenu();
42
+ const element = domSerializer.serializeNode(
43
+ // tslint:disable-next-line:no-non-null-assertion
44
+ topLevelNode);
45
+ modalService
46
+ .fromComponent(RawHtmlDialogComponent, {
47
+ size: 'xl',
48
+ locals: {
49
+ html: element.outerHTML,
50
+ },
51
+ })
52
+ .subscribe(result => {
53
+ var _a;
54
+ if (result) {
55
+ const domNode = htmlToDomNode(result, (topLevelNode === null || topLevelNode === void 0 ? void 0 : topLevelNode.isLeaf) ? undefined : node);
56
+ if (domNode) {
57
+ let tr = view.state.tr;
58
+ const parsedNodeSlice = domParser.parse(domNode);
59
+ try {
60
+ tr = tr.replaceRangeWith(topLevelNodePos, topLevelNodePos +
61
+ ((_a = topLevelNode === null || topLevelNode === void 0 ? void 0 : topLevelNode.nodeSize) !== null && _a !== void 0 ? _a : 0), parsedNodeSlice);
62
+ }
63
+ catch (err) {
64
+ // tslint:disable-next-line:no-console
65
+ console.error(err);
66
+ }
67
+ view.dispatch(tr);
68
+ view.focus();
69
+ }
70
+ }
71
+ });
72
+ },
73
+ },
74
+ ],
75
+ });
76
+ }
77
+ }
78
+ },
79
+ };
80
+ },
81
+ });
82
+ function htmlToDomNode(html, wrapInParent) {
83
+ html = `${html.trim()}`;
84
+ const template = document.createElement('template');
85
+ if (wrapInParent) {
86
+ const parentClone = wrapInParent.cloneNode(false);
87
+ parentClone.innerHTML = html;
88
+ template.content.appendChild(parentClone);
89
+ }
90
+ else {
91
+ const parent = document.createElement('p');
92
+ parent.innerHTML = html;
93
+ template.content.appendChild(parent);
94
+ }
95
+ return template.content.firstChild;
96
+ }
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3LWVkaXRvci1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL3JpY2gtdGV4dC1lZGl0b3IvcHJvc2VtaXJyb3IvcGx1Z2lucy9yYXctZWRpdG9yLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUkzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUd6Rjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLGtCQUFzQyxFQUFFLFlBQTBCLEVBQUUsRUFBRSxDQUNsRyxJQUFJLE1BQU0sQ0FBQztJQUNQLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtRQUNWLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkUsT0FBTztZQUNILE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUNsQixPQUFPO2lCQUNWO2dCQUNELElBQUksWUFBOEIsQ0FBQztnQkFDbkMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENB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LFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDN0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDN0M7U0FBTTtRQUNILE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEM7SUFDRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET01QYXJzZXIsIERPTVNlcmlhbGl6ZXIsIE5vZGUgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XHJcbmltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcclxuaW1wb3J0IHsgUHJvdG9jb2wgfSBmcm9tICdwdXBwZXRlZXInO1xyXG5cclxuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vcHJvdmlkZXJzL21vZGFsL21vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSYXdIdG1sRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcmF3LWh0bWwtZGlhbG9nL3Jhdy1odG1sLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb250ZXh0TWVudVNlcnZpY2UgfSBmcm9tICcuLi9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIEltcGxlbWVudHMgZWRpdGluZyBvZiByYXcgSFRNTCBmb3IgdGhlIHNlbGVjdGVkIG5vZGUgaW4gdGhlIGVkaXRvci5cclxuICovXHJcbmV4cG9ydCBjb25zdCByYXdFZGl0b3JQbHVnaW4gPSAoY29udGV4dE1lbnVTZXJ2aWNlOiBDb250ZXh0TWVudVNlcnZpY2UsIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlKSA9PlxyXG4gICAgbmV3IFBsdWdpbih7XHJcbiAgICAgICAgdmlldzogX3ZpZXcgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBkb21QYXJzZXIgPSBET01QYXJzZXIuZnJvbVNjaGVtYShfdmlldy5zdGF0ZS5zY2hlbWEpO1xyXG4gICAgICAgICAgICBjb25zdCBkb21TZXJpYWxpemVyID0gRE9NU2VyaWFsaXplci5mcm9tU2NoZW1hKF92aWV3LnN0YXRlLnNjaGVtYSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGU6IHZpZXcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmlldy5oYXNGb2N1cygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRvcExldmVsTm9kZTogTm9kZSB8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRvYywgc2VsZWN0aW9uIH0gPSB2aWV3LnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0b3BMZXZlbE5vZGVQb3MgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvYy5ub2Rlc0JldHdlZW4oc2VsZWN0aW9uLmZyb20sIHNlbGVjdGlvbi50bywgKG4sIHBvcywgcGFyZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgPT09IGRvYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGV2ZWxOb2RlID0gbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExldmVsTm9kZVBvcyA9IHBvcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0b3BMZXZlbE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHZpZXcubm9kZURPTSh0b3BMZXZlbE5vZGVQb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TWVudVNlcnZpY2Uuc2V0Q29udGV4dE1lbnUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogc2VsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpY29uU2hhcGU6ICdlbGxpcHNpcy12ZXJ0aWNhbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHM6IHZpZXcuY29vcmRzQXRQb3ModG9wTGV2ZWxOb2RlUG9zKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblNoYXBlOiAnY29kZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0VkaXQgSFRNTCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVTZXJ2aWNlLmNsZWFyQ29udGV4dE1lbnUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9tU2VyaWFsaXplci5zZXJpYWxpemVOb2RlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExldmVsTm9kZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZyb21Db21wb25lbnQoUmF3SHRtbERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ3hsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fsczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IGVsZW1lbnQub3V0ZXJIVE1MLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbU5vZGUgPSBodG1sVG9Eb21Ob2RlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExldmVsTm9kZT8uaXNMZWFmID8gdW5kZWZpbmVkIDogbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb21Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ciA9IHZpZXcuc3RhdGUudHI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZE5vZGVTbGljZSA9IGRvbVBhcnNlci5wYXJzZShkb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyID0gdHIucmVwbGFjZVJhbmdlV2l0aChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BMZXZlbE5vZGVQb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGV2ZWxOb2RlUG9zICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvcExldmVsTm9kZT8ubm9kZVNpemUgPz8gMCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkTm9kZVNsaWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5kaXNwYXRjaCh0cik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbmZ1bmN0aW9uIGh0bWxUb0RvbU5vZGUoaHRtbDogc3RyaW5nLCB3cmFwSW5QYXJlbnQ/OiBIVE1MRWxlbWVudCkge1xyXG4gICAgaHRtbCA9IGAke2h0bWwudHJpbSgpfWA7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XHJcbiAgICBpZiAod3JhcEluUGFyZW50KSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50Q2xvbmUgPSB3cmFwSW5QYXJlbnQuY2xvbmVOb2RlKGZhbHNlKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBwYXJlbnRDbG9uZS5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgICAgIHRlbXBsYXRlLmNvbnRlbnQuYXBwZW5kQ2hpbGQocGFyZW50Q2xvbmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBwYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XHJcbiAgICAgICAgcGFyZW50LmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgICAgdGVtcGxhdGUuY29udGVudC5hcHBlbmRDaGlsZChwYXJlbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RDaGlsZDtcclxufVxyXG4iXX0=
@@ -0,0 +1,166 @@
1
+ import { MenuItem } from 'prosemirror-menu';
2
+ import { Plugin, TextSelection } from 'prosemirror-state';
3
+ import { addColumnAfter, addColumnBefore, addRowAfter, addRowBefore, deleteColumn, deleteRow, deleteTable, isInTable, mergeCells, splitCell, tableNodes, tableNodeTypes, toggleHeaderCell, toggleHeaderColumn, toggleHeaderRow, } from 'prosemirror-tables';
4
+ import { renderClarityIcon } from '../menu/menu-common';
5
+ export const tableContextMenuPlugin = (contextMenuService) => new Plugin({
6
+ view: () => {
7
+ return {
8
+ update: view => {
9
+ if (!view.hasFocus()) {
10
+ return;
11
+ }
12
+ const { doc, selection } = view.state;
13
+ let tableNode;
14
+ let tableNodePos = 0;
15
+ doc.nodesBetween(selection.from, selection.to, (n, pos, parent) => {
16
+ if (n.type.name === 'table') {
17
+ tableNode = n;
18
+ tableNodePos = pos;
19
+ return false;
20
+ }
21
+ });
22
+ if (tableNode) {
23
+ const node = view.nodeDOM(tableNodePos);
24
+ if (node instanceof Element) {
25
+ function createMenuItem(label, commandFn, iconClass) {
26
+ const enabled = commandFn(view.state);
27
+ return {
28
+ label,
29
+ enabled,
30
+ iconClass,
31
+ onClick: () => {
32
+ contextMenuService.clearContextMenu();
33
+ view.focus();
34
+ commandFn(view.state, view.dispatch);
35
+ },
36
+ };
37
+ }
38
+ const separator = {
39
+ label: '',
40
+ separator: true,
41
+ enabled: true,
42
+ onClick: () => {
43
+ /**/
44
+ },
45
+ };
46
+ contextMenuService.setContextMenu({
47
+ ref: selection,
48
+ title: 'Table',
49
+ iconShape: 'table',
50
+ element: node,
51
+ coords: view.coordsAtPos(tableNodePos),
52
+ items: [
53
+ createMenuItem('Insert column before', addColumnBefore, 'add-column'),
54
+ createMenuItem('Insert column after', addColumnAfter, 'add-column'),
55
+ createMenuItem('Insert row before', addRowBefore, 'add-row'),
56
+ createMenuItem('Insert row after', addRowAfter, 'add-row'),
57
+ createMenuItem('Merge cells', mergeCells),
58
+ createMenuItem('Split cell', splitCell),
59
+ separator,
60
+ createMenuItem('Toggle header column', toggleHeaderColumn),
61
+ createMenuItem('Toggle header row', toggleHeaderRow),
62
+ separator,
63
+ createMenuItem('Delete column', deleteColumn),
64
+ createMenuItem('Delete row', deleteRow),
65
+ createMenuItem('Delete table', deleteTable),
66
+ ],
67
+ });
68
+ }
69
+ }
70
+ else {
71
+ contextMenuService.clearContextMenu();
72
+ }
73
+ },
74
+ };
75
+ },
76
+ });
77
+ export function getTableNodes() {
78
+ return tableNodes({
79
+ tableGroup: 'block',
80
+ cellContent: 'block+',
81
+ cellAttributes: {
82
+ background: {
83
+ default: null,
84
+ getFromDOM(dom) {
85
+ return dom.style.backgroundColor || null;
86
+ },
87
+ setDOMAttr(value, attrs) {
88
+ if (value) {
89
+ attrs.style = (attrs.style || '') + `background-color: ${value};`;
90
+ }
91
+ },
92
+ },
93
+ },
94
+ });
95
+ }
96
+ export function getTableMenu(schema) {
97
+ function item(label, cmd, iconShape) {
98
+ return new MenuItem({
99
+ label,
100
+ select: cmd,
101
+ run: cmd,
102
+ render: iconShape ? renderClarityIcon({ shape: iconShape, label }) : undefined,
103
+ });
104
+ }
105
+ function separator() {
106
+ return new MenuItem({
107
+ select: state => isInTable(state),
108
+ run: state => {
109
+ /**/
110
+ },
111
+ render: view => {
112
+ const el = document.createElement('div');
113
+ el.classList.add('menu-separator');
114
+ return el;
115
+ },
116
+ });
117
+ }
118
+ return [
119
+ item('Insert column before', addColumnBefore),
120
+ item('Insert column after', addColumnAfter),
121
+ item('Insert row before', addRowBefore),
122
+ item('Insert row after', addRowAfter),
123
+ item('Merge cells', mergeCells),
124
+ item('Split cell', splitCell),
125
+ separator(),
126
+ item('Toggle header column', toggleHeaderColumn),
127
+ item('Toggle header row', toggleHeaderRow),
128
+ item('Toggle header cells', toggleHeaderCell),
129
+ separator(),
130
+ item('Delete column', deleteColumn),
131
+ item('Delete row', deleteRow),
132
+ item('Delete table', deleteTable),
133
+ ];
134
+ }
135
+ export function addTable(state, dispatch, { rowsCount, colsCount, withHeaderRow, cellContent }) {
136
+ const offset = state.tr.selection.anchor + 1;
137
+ const nodes = createTable(state, rowsCount, colsCount, withHeaderRow, cellContent);
138
+ const tr = state.tr.replaceSelectionWith(nodes).scrollIntoView();
139
+ const resolvedPos = tr.doc.resolve(offset);
140
+ tr.setSelection(TextSelection.near(resolvedPos));
141
+ dispatch(tr);
142
+ }
143
+ function createTable(state, rowsCount, colsCount, withHeaderRow, cellContent) {
144
+ const types = tableNodeTypes(state.schema);
145
+ const headerCells = [];
146
+ const cells = [];
147
+ const createCell = (cellType, _cellContent) => _cellContent ? cellType.createChecked(null, _cellContent) : cellType.createAndFill();
148
+ for (let index = 0; index < colsCount; index += 1) {
149
+ const cell = createCell(types.cell, cellContent);
150
+ if (cell) {
151
+ cells.push(cell);
152
+ }
153
+ if (withHeaderRow) {
154
+ const headerCell = createCell(types.header_cell, cellContent);
155
+ if (headerCell) {
156
+ headerCells.push(headerCell);
157
+ }
158
+ }
159
+ }
160
+ const rows = [];
161
+ for (let index = 0; index < rowsCount; index += 1) {
162
+ rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));
163
+ }
164
+ return types.table.createChecked(null, rows);
165
+ }
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGVzLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvc2hhcmVkL2NvbXBvbmVudHMvcmljaC10ZXh0LWVkaXRvci9wcm9zZW1pcnJvci9wbHVnaW5zL3RhYmxlcy1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXpELE9BQU8sRUFBZSxNQUFNLEVBQUUsYUFBYSxFQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFDcEYsT0FBTyxFQUNILGNBQWMsRUFDZCxlQUFlLEVBQ2YsV0FBVyxFQUNYLFlBQVksRUFDWixZQUFZLEVBQ1osU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZUFBZSxHQUNsQixNQUFNLG9CQUFvQixDQUFDO0FBSzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsa0JBQXNDLEVBQUUsRUFBRSxDQUM3RSxJQUFJLE1BQU0sQ0FBQztJQUNQLElBQUksRUFBRSxHQUFHLEVBQUU7UUFDUCxPQUFPO1lBQ0gsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ2xCLE9BQU87aUJBQ1Y7Z0JBQ0QsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLFNBQTJCLENBQUM7Z0JBQ2hDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFDckIsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNB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QUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxhQUFhLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ2hHO0lBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lbnVFbGVtZW50LCBNZW51SXRlbSB9IGZyb20gJ3Byb3NlbWlycm9yLW1lbnUnO1xyXG5pbXBvcnQgeyBOb2RlLCBTY2hlbWEgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XHJcbmltcG9ydCB7IEVkaXRvclN0YXRlLCBQbHVnaW4sIFRleHRTZWxlY3Rpb24sIFRyYW5zYWN0aW9uIH0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xyXG5pbXBvcnQge1xyXG4gICAgYWRkQ29sdW1uQWZ0ZXIsXHJcbiAgICBhZGRDb2x1bW5CZWZvcmUsXHJcbiAgICBhZGRSb3dBZnRlcixcclxuICAgIGFkZFJvd0JlZm9yZSxcclxuICAgIGRlbGV0ZUNvbHVtbixcclxuICAgIGRlbGV0ZVJvdyxcclxuICAgIGRlbGV0ZVRhYmxlLFxyXG4gICAgaXNJblRhYmxlLFxyXG4gICAgbWVyZ2VDZWxscyxcclxuICAgIHNwbGl0Q2VsbCxcclxuICAgIHRhYmxlTm9kZXMsXHJcbiAgICB0YWJsZU5vZGVUeXBlcyxcclxuICAgIHRvZ2dsZUhlYWRlckNlbGwsXHJcbiAgICB0b2dnbGVIZWFkZXJDb2x1bW4sXHJcbiAgICB0b2dnbGVIZWFkZXJSb3csXHJcbn0gZnJvbSAncHJvc2VtaXJyb3ItdGFibGVzJztcclxuaW1wb3J0IHsgRGVjb3JhdGlvbiwgRGVjb3JhdGlvblNldCB9IGZyb20gJ3Byb3NlbWlycm9yLXZpZXcnO1xyXG5cclxuaW1wb3J0IHsgQ29udGV4dE1lbnVJdGVtLCBDb250ZXh0TWVudVNlcnZpY2UgfSBmcm9tICcuLi9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBidWlsZE1lbnVJdGVtcyB9IGZyb20gJy4uL21lbnUvbWVudSc7XHJcbmltcG9ydCB7IHJlbmRlckNsYXJpdHlJY29uIH0gZnJvbSAnLi4vbWVudS9tZW51LWNvbW1vbic7XHJcblxyXG5leHBvcnQgY29uc3QgdGFibGVDb250ZXh0TWVudVBsdWdpbiA9IChjb250ZXh0TWVudVNlcnZpY2U6IENvbnRleHRNZW51U2VydmljZSkgPT5cclxuICAgIG5ldyBQbHVnaW4oe1xyXG4gICAgICAgIHZpZXc6ICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZTogdmlldyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2aWV3Lmhhc0ZvY3VzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRvYywgc2VsZWN0aW9uIH0gPSB2aWV3LnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0YWJsZU5vZGU6IE5vZGUgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRhYmxlTm9kZVBvcyA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jLm5vZGVzQmV0d2VlbihzZWxlY3Rpb24uZnJvbSwgc2VsZWN0aW9uLnRvLCAobiwgcG9zLCBwYXJlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4udHlwZS5uYW1lID09PSAndGFibGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZU5vZGUgPSBuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVOb2RlUG9zID0gcG9zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdmlldy5ub2RlRE9NKHRhYmxlTm9kZVBvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlTWVudUl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kRm46IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IEVkaXRvclN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaD86ICh0cjogVHJhbnNhY3Rpb24pID0+IHZvaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9PiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25DbGFzcz86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk6IENvbnRleHRNZW51SXRlbSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZCA9IGNvbW1hbmRGbih2aWV3LnN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TWVudVNlcnZpY2UuY2xlYXJDb250ZXh0TWVudSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZEZuKHZpZXcuc3RhdGUsIHZpZXcuZGlzcGF0Y2gpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXBhcmF0b3I6IENvbnRleHRNZW51SXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TWVudVNlcnZpY2Uuc2V0Q29udGV4dE1lbnUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogc2VsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnVGFibGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25TaGFwZTogJ3RhYmxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBub2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkczogdmlldy5jb29yZHNBdFBvcyh0YWJsZU5vZGVQb3MpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU1lbnVJdGVtKCdJbnNlcnQgY29sdW1uIGJlZm9yZScsIGFkZENvbHVtbkJlZm9yZSwgJ2FkZC1jb2x1bW4nKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWVudUl0ZW0oJ0luc2VydCBjb2x1bW4gYWZ0ZXInLCBhZGRDb2x1bW5BZnRlciwgJ2FkZC1jb2x1bW4nKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWVudUl0ZW0oJ0luc2VydCByb3cgYmVmb3JlJywgYWRkUm93QmVmb3JlLCAnYWRkLXJvdycpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVNZW51SXRlbSgnSW5zZXJ0IHJvdyBhZnRlcicsIGFkZFJvd0FmdGVyLCAnYWRkLXJvdycpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVNZW51SXRlbSgnTWVyZ2UgY2VsbHMnLCBtZXJnZUNlbGxzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWVudUl0ZW0oJ1NwbGl0IGNlbGwnLCBzcGxpdENlbGwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU1lbnVJdGVtKCdUb2dnbGUgaGVhZGVyIGNvbHVtbicsIHRvZ2dsZUhlYWRlckNvbHVtbiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU1lbnVJdGVtKCdUb2dnbGUgaGVhZGVyIHJvdycsIHRvZ2dsZUhlYWRlclJvdyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWVudUl0ZW0oJ0RlbGV0ZSBjb2x1bW4nLCBkZWxldGVDb2x1bW4pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVNZW51SXRlbSgnRGVsZXRlIHJvdycsIGRlbGV0ZVJvdyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU1lbnVJdGVtKCdEZWxldGUgdGFibGUnLCBkZWxldGVUYWJsZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVTZXJ2aWNlLmNsZWFyQ29udGV4dE1lbnUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZU5vZGVzKCkge1xyXG4gICAgcmV0dXJuIHRhYmxlTm9kZXMoe1xyXG4gICAgICAgIHRhYmxlR3JvdXA6ICdibG9jaycsXHJcbiAgICAgICAgY2VsbENvbnRlbnQ6ICdibG9jaysnLFxyXG4gICAgICAgIGNlbGxBdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBnZXRGcm9tRE9NKGRvbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoZG9tIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXRET01BdHRyKHZhbHVlLCBhdHRycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRycy5zdHlsZSA9IChhdHRycy5zdHlsZSB8fCAnJykgKyBgYmFja2dyb3VuZC1jb2xvcjogJHt2YWx1ZX07YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTWVudShzY2hlbWE6IFNjaGVtYSkge1xyXG4gICAgZnVuY3Rpb24gaXRlbShcclxuICAgICAgICBsYWJlbDogc3RyaW5nLFxyXG4gICAgICAgIGNtZDogKHN0YXRlOiBFZGl0b3JTdGF0ZSwgZGlzcGF0Y2g/OiAodHI6IFRyYW5zYWN0aW9uKSA9PiB2b2lkKSA9PiBib29sZWFuLFxyXG4gICAgICAgIGljb25TaGFwZT86IHN0cmluZyxcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWVudUl0ZW0oe1xyXG4gICAgICAgICAgICBsYWJlbCxcclxuICAgICAgICAgICAgc2VsZWN0OiBjbWQsXHJcbiAgICAgICAgICAgIHJ1bjogY21kLFxyXG4gICAgICAgICAgICByZW5kZXI6IGljb25TaGFwZSA/IHJlbmRlckNsYXJpdHlJY29uKHsgc2hhcGU6IGljb25TaGFwZSwgbGFiZWwgfSkgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2VwYXJhdG9yKCk6IE1lbnVFbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1lbnVJdGVtKHtcclxuICAgICAgICAgICAgc2VsZWN0OiBzdGF0ZSA9PiBpc0luVGFibGUoc3RhdGUpLFxyXG4gICAgICAgICAgICBydW46IHN0YXRlID0+IHtcclxuICAgICAgICAgICAgICAgIC8qKi9cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVuZGVyOiB2aWV3ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdtZW51LXNlcGFyYXRvcicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgaXRlbSgnSW5zZXJ0IGNvbHVtbiBiZWZvcmUnLCBhZGRDb2x1bW5CZWZvcmUpLFxyXG4gICAgICAgIGl0ZW0oJ0luc2VydCBjb2x1bW4gYWZ0ZXInLCBhZGRDb2x1bW5BZnRlciksXHJcbiAgICAgICAgaXRlbSgnSW5zZXJ0IHJvdyBiZWZvcmUnLCBhZGRSb3dCZWZvcmUpLFxyXG4gICAgICAgIGl0ZW0oJ0luc2VydCByb3cgYWZ0ZXInLCBhZGRSb3dBZnRlciksXHJcbiAgICAgICAgaXRlbSgnTWVyZ2UgY2VsbHMnLCBtZXJnZUNlbGxzKSxcclxuICAgICAgICBpdGVtKCdTcGxpdCBjZWxsJywgc3BsaXRDZWxsKSxcclxuICAgICAgICBzZXBhcmF0b3IoKSxcclxuICAgICAgICBpdGVtKCdUb2dnbGUgaGVhZGVyIGNvbHVtbicsIHRvZ2dsZUhlYWRlckNvbHVtbiksXHJcbiAgICAgICAgaXRlbSgnVG9nZ2xlIGhlYWRlciByb3cnLCB0b2dnbGVIZWFkZXJSb3cpLFxyXG4gICAgICAgIGl0ZW0oJ1RvZ2dsZSBoZWFkZXIgY2VsbHMnLCB0b2dnbGVIZWFkZXJDZWxsKSxcclxuICAgICAgICBzZXBhcmF0b3IoKSxcclxuICAgICAgICBpdGVtKCdEZWxldGUgY29sdW1uJywgZGVsZXRlQ29sdW1uKSxcclxuICAgICAgICBpdGVtKCdEZWxldGUgcm93JywgZGVsZXRlUm93KSxcclxuICAgICAgICBpdGVtKCdEZWxldGUgdGFibGUnLCBkZWxldGVUYWJsZSksXHJcbiAgICBdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWRkVGFibGUoc3RhdGUsIGRpc3BhdGNoLCB7IHJvd3NDb3VudCwgY29sc0NvdW50LCB3aXRoSGVhZGVyUm93LCBjZWxsQ29udGVudCB9KSB7XHJcbiAgICBjb25zdCBvZmZzZXQgPSBzdGF0ZS50ci5zZWxlY3Rpb24uYW5jaG9yICsgMTtcclxuXHJcbiAgICBjb25zdCBub2RlcyA9IGNyZWF0ZVRhYmxlKHN0YXRlLCByb3dzQ291bnQsIGNvbHNDb3VudCwgd2l0aEhlYWRlclJvdywgY2VsbENvbnRlbnQpO1xyXG4gICAgY29uc3QgdHIgPSBzdGF0ZS50ci5yZXBsYWNlU2VsZWN0aW9uV2l0aChub2Rlcykuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgIGNvbnN0IHJlc29sdmVkUG9zID0gdHIuZG9jLnJlc29sdmUob2Zmc2V0KTtcclxuXHJcbiAgICB0ci5zZXRTZWxlY3Rpb24oVGV4dFNlbGVjdGlvbi5uZWFyKHJlc29sdmVkUG9zKSk7XHJcblxyXG4gICAgZGlzcGF0Y2godHIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVUYWJsZShzdGF0ZSwgcm93c0NvdW50LCBjb2xzQ291bnQsIHdpdGhIZWFkZXJSb3csIGNlbGxDb250ZW50KSB7XHJcbiAgICBjb25zdCB0eXBlcyA9IHRhYmxlTm9kZVR5cGVzKHN0YXRlLnNjaGVtYSk7XHJcbiAgICBjb25zdCBoZWFkZXJDZWxsczogTm9kZVtdID0gW107XHJcbiAgICBjb25zdCBjZWxsczogTm9kZVtdID0gW107XHJcbiAgICBjb25zdCBjcmVhdGVDZWxsID0gKGNlbGxUeXBlLCBfY2VsbENvbnRlbnQpID0+XHJcbiAgICAgICAgX2NlbGxDb250ZW50ID8gY2VsbFR5cGUuY3JlYXRlQ2hlY2tlZChudWxsLCBfY2VsbENvbnRlbnQpIDogY2VsbFR5cGUuY3JlYXRlQW5kRmlsbCgpO1xyXG5cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb2xzQ291bnQ7IGluZGV4ICs9IDEpIHtcclxuICAgICAgICBjb25zdCBjZWxsID0gY3JlYXRlQ2VsbCh0eXBlcy5jZWxsLCBjZWxsQ29udGVudCk7XHJcblxyXG4gICAgICAgIGlmIChjZWxsKSB7XHJcbiAgICAgICAgICAgIGNlbGxzLnB1c2goY2VsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod2l0aEhlYWRlclJvdykge1xyXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJDZWxsID0gY3JlYXRlQ2VsbCh0eXBlcy5oZWFkZXJfY2VsbCwgY2VsbENvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGhlYWRlckNlbGwpIHtcclxuICAgICAgICAgICAgICAgIGhlYWRlckNlbGxzLnB1c2goaGVhZGVyQ2VsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgcm93czogTm9kZVtdID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJvd3NDb3VudDsgaW5kZXggKz0gMSkge1xyXG4gICAgICAgIHJvd3MucHVzaCh0eXBlcy5yb3cuY3JlYXRlQ2hlY2tlZChudWxsLCB3aXRoSGVhZGVyUm93ICYmIGluZGV4ID09PSAwID8gaGVhZGVyQ2VsbHMgOiBjZWxscykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlcy50YWJsZS5jcmVhdGVDaGVja2VkKG51bGwsIHJvd3MpO1xyXG59XHJcbiJdfQ==
@@ -1,27 +1,35 @@
1
- import { Injectable } from '@angular/core';
1
+ import { Injectable, Injector } from '@angular/core';
2
2
  import { baseKeymap } from 'prosemirror-commands';
3
3
  import { dropCursor } from 'prosemirror-dropcursor';
4
4
  import { gapCursor } from 'prosemirror-gapcursor';
5
5
  import { history } from 'prosemirror-history';
6
6
  import { keymap } from 'prosemirror-keymap';
7
- import { menuBar } from 'prosemirror-menu';
8
7
  import { DOMParser, DOMSerializer, Schema } from 'prosemirror-model';
9
8
  import { schema } from 'prosemirror-schema-basic';
10
9
  import { addListNodes } from 'prosemirror-schema-list';
11
10
  import { EditorState, Plugin } from 'prosemirror-state';
11
+ import { columnResizing, fixTables, tableEditing } from 'prosemirror-tables';
12
12
  import { EditorView } from 'prosemirror-view';
13
13
  import { ModalService } from '../../../../providers/modal/modal.service';
14
+ import { ContextMenuService } from './context-menu/context-menu.service';
15
+ import { iframeNode, iframeNodeView } from './custom-nodes';
14
16
  import { buildInputRules } from './inputrules';
15
17
  import { buildKeymap } from './keymap';
16
- import { buildMenuItems } from './menu/menu';
18
+ import { customMenuPlugin } from './menu/menu-plugin';
19
+ import { imageContextMenuPlugin } from './plugins/image-plugin';
17
20
  import { linkSelectPlugin } from './plugins/link-select-plugin';
21
+ import { rawEditorPlugin } from './plugins/raw-editor-plugin';
22
+ import { getTableNodes, tableContextMenuPlugin } from './plugins/tables-plugin';
18
23
  export class ProsemirrorService {
19
- constructor(modalService) {
20
- this.modalService = modalService;
24
+ constructor(injector, contextMenuService) {
25
+ this.injector = injector;
26
+ this.contextMenuService = contextMenuService;
21
27
  // Mix the nodes from prosemirror-schema-list into the basic schema to
22
28
  // create a schema with list support.
23
29
  this.mySchema = new Schema({
24
- nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block'),
30
+ nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block')
31
+ .append(getTableNodes())
32
+ .addToEnd('iframe', iframeNode),
25
33
  marks: schema.spec.marks,
26
34
  });
27
35
  this.enabled = true;
@@ -40,13 +48,30 @@ export class ProsemirrorService {
40
48
  }
41
49
  },
42
50
  editable: () => options.isReadOnly(),
51
+ handleDOMEvents: {
52
+ focus: view => {
53
+ this.contextMenuService.setVisibility(true);
54
+ },
55
+ blur: view => {
56
+ this.contextMenuService.setVisibility(false);
57
+ },
58
+ },
59
+ nodeViews: {
60
+ iframe: iframeNodeView,
61
+ },
43
62
  });
44
63
  }
45
64
  update(text) {
46
65
  if (this.editorView) {
47
- const state = this.getStateFromText(text);
48
- if (document.body.contains(this.editorView.dom)) {
49
- this.editorView.updateState(state);
66
+ const currentText = this.getTextFromState(this.editorView.state);
67
+ if (text !== currentText) {
68
+ let state = this.getStateFromText(text);
69
+ if (document.body.contains(this.editorView.dom)) {
70
+ const fix = fixTables(state);
71
+ if (fix)
72
+ state = state.apply(fix.setMeta('addToHistory', false));
73
+ this.editorView.updateState(state);
74
+ }
50
75
  }
51
76
  }
52
77
  }
@@ -86,13 +111,17 @@ export class ProsemirrorService {
86
111
  dropCursor(),
87
112
  gapCursor(),
88
113
  linkSelectPlugin,
114
+ columnResizing({}),
115
+ tableEditing({ allowTableNodeSelection: true }),
116
+ tableContextMenuPlugin(this.contextMenuService),
117
+ imageContextMenuPlugin(this.contextMenuService, this.injector.get(ModalService)),
118
+ rawEditorPlugin(this.contextMenuService, this.injector.get(ModalService)),
119
+ customMenuPlugin({
120
+ floatingMenu: options.floatingMenu,
121
+ injector: this.injector,
122
+ schema: options.schema,
123
+ }),
89
124
  ];
90
- if (options.menuBar !== false) {
91
- plugins.push(menuBar({
92
- floating: options.floatingMenu !== false,
93
- content: options.menuContent || buildMenuItems(options.schema, this.modalService).fullMenu,
94
- }));
95
- }
96
125
  if (options.history !== false) {
97
126
  plugins.push(history());
98
127
  }
@@ -107,6 +136,7 @@ ProsemirrorService.decorators = [
107
136
  { type: Injectable }
108
137
  ];
109
138
  ProsemirrorService.ctorParameters = () => [
110
- { type: ModalService }
139
+ { type: Injector },
140
+ { type: ContextMenuService }
111
141
  ];
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvc2VtaXJyb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvc2hhcmVkL2NvbXBvbmVudHMvcmljaC10ZXh0LWVkaXRvci9wcm9zZW1pcnJvci9wcm9zZW1pcnJvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUs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UUFFRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQ2pCLElBQUksTUFBTSxDQUFDO1lBQ1AsS0FBSyxFQUFFO2dCQUNILFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRTthQUMzQztTQUNKLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7O1lBdkdKLFVBQVU7OztZQWRGLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGJhc2VLZXltYXAgfSBmcm9tICdwcm9zZW1pcnJvci1jb21tYW5kcyc7XHJcbmltcG9ydCB7IGRyb3BDdXJzb3IgfSBmcm9tICdwcm9zZW1pcnJvci1kcm9wY3Vyc29yJztcclxuaW1wb3J0IHsgZ2FwQ3Vyc29yIH0gZnJvbSAncHJvc2VtaXJyb3ItZ2FwY3Vyc29yJztcclxuaW1wb3J0IHsgaGlzdG9yeSB9IGZyb20gJ3Byb3NlbWlycm9yLWhpc3RvcnknO1xyXG5pbXBvcnQgeyBrZXltYXAgfSBmcm9tICdwcm9zZW1pcnJvci1rZXltYXAnO1xyXG5pbXBvcnQgeyBtZW51QmFyIH0gZnJvbSAncHJvc2VtaXJyb3ItbWVudSc7XHJcbmltcG9ydCB7IERPTVBhcnNlciwgRE9NU2VyaWFsaXplciwgU2NoZW1hIH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xyXG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICdwcm9zZW1pcnJvci1zY2hlbWEtYmFzaWMnO1xyXG5pbXBvcnQgeyBhZGRMaXN0Tm9kZXMgfSBmcm9tICdwcm9zZW1pcnJvci1zY2hlbWEtbGlzdCc7XHJcbmltcG9ydCB7IEVkaXRvclN0YXRlLCBQbHVnaW4gfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XHJcbmltcG9ydCB7IEVkaXRvclZpZXcgfSBmcm9tICdwcm9zZW1pcnJvci12aWV3JztcclxuXHJcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IGJ1aWxkSW5wdXRSdWxlcyB9IGZyb20gJy4vaW5wdXRydWxlcyc7XHJcbmltcG9ydCB7IGJ1aWxkS2V5bWFwIH0gZnJvbSAnLi9rZXltYXAnO1xyXG5pbXBvcnQgeyBidWlsZE1lbnVJdGVtcyB9IGZyb20gJy4vbWVudS9tZW51JztcclxuaW1wb3J0IHsgbGlua1NlbGVjdFBsdWdpbiB9IGZyb20gJy4vcGx1Z2lucy9saW5rLXNlbGVjdC1wbHVnaW4nO1xyXG5pbXBvcnQgeyBTZXR1cE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlRWRpdG9yVmlld09wdGlvbnMge1xyXG4gICAgb25UZXh0SW5wdXQ6IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWQ7XHJcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICAgIGlzUmVhZE9ubHk6ICgpID0+IGJvb2xlYW47XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFByb3NlbWlycm9yU2VydmljZSB7XHJcbiAgICBlZGl0b3JWaWV3OiBFZGl0b3JWaWV3O1xyXG5cclxuICAgIC8vIE1peCB0aGUgbm9kZXMgZnJvbSBwcm9zZW1pcnJvci1zY2hlbWEtbGlzdCBpbnRvIHRoZSBiYXNpYyBzY2hlbWEgdG9cclxuICAgIC8vIGNyZWF0ZSBhIHNjaGVtYSB3aXRoIGxpc3Qgc3VwcG9ydC5cclxuICAgIHByaXZhdGUgbXlTY2hlbWEgPSBuZXcgU2NoZW1hKHtcclxuICAgICAgICBub2RlczogYWRkTGlzdE5vZGVzKHNjaGVtYS5zcGVjLm5vZGVzLCAncGFyYWdyYXBoIGJsb2NrKicsICdibG9jaycpLFxyXG4gICAgICAgIG1hcmtzOiBzY2hlbWEuc3BlYy5tYXJrcyxcclxuICAgIH0pO1xyXG4gICAgcHJpdmF0ZSBlbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlKSB7fVxyXG5cclxuICAgIGNyZWF0ZUVkaXRvclZpZXcob3B0aW9uczogQ3JlYXRlRWRpdG9yVmlld09wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLmVkaXRvclZpZXcgPSBuZXcgRWRpdG9yVmlldzxTY2hlbWE+KG9wdGlvbnMuZWxlbWVudCwge1xyXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5nZXRTdGF0ZUZyb21UZXh0KCcnKSxcclxuICAgICAgICAgICAgZGlzcGF0Y2hUcmFuc2FjdGlvbjogdHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvclZpZXcudXBkYXRlU3RhdGUodGhpcy5lZGl0b3JWaWV3LnN0YXRlLmFwcGx5KHRyKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHIuZG9jQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldFRleHRGcm9tU3RhdGUodGhpcy5lZGl0b3JWaWV3LnN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uVGV4dElucHV0KGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlZGl0YWJsZTogKCkgPT4gb3B0aW9ucy5pc1JlYWRPbmx5KCksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKHRleHQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmVkaXRvclZpZXcpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlRnJvbVRleHQodGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHRoaXMuZWRpdG9yVmlldy5kb20pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvclZpZXcudXBkYXRlU3RhdGUoc3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRlc3Ryb3koKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yVmlldykge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvclZpZXcuZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5lZGl0b3JWaWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IGVuYWJsZWQ7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0aW5nIHRoZSBzdGF0ZSBjYXVzZXMgUHJvc2VNaXJyb3IgdG8gY2hlY2sgdGhlXHJcbiAgICAgICAgICAgIC8vIGBlZGl0YWJsZSgpYCBmdW5jdGlvbiBmcm9tIHRoZSBjb250cnVjdG9yIGNvbmZpZyBvYmplY3RcclxuICAgICAgICAgICAgLy8gbmV3bHkuXHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yVmlldy51cGRhdGVTdGF0ZSh0aGlzLmVkaXRvclZpZXcuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFN0YXRlRnJvbVRleHQodGV4dDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IEVkaXRvclN0YXRlIHtcclxuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBkaXYuaW5uZXJIVE1MID0gdGV4dCA/PyAnJztcclxuICAgICAgICByZXR1cm4gRWRpdG9yU3RhdGUuY3JlYXRlKHtcclxuICAgICAgICAgICAgZG9jOiBET01QYXJzZXIuZnJvbVNjaGVtYSh0aGlzLm15U2NoZW1hKS5wYXJzZShkaXYpLFxyXG4gICAgICAgICAgICBwbHVnaW5zOiB0aGlzLmNvbmZpZ3VyZVBsdWdpbnMoeyBzY2hlbWE6IHRoaXMubXlTY2hlbWEsIGZsb2F0aW5nTWVudTogZmFsc2UgfSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRUZXh0RnJvbVN0YXRlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBET01TZXJpYWxpemVyLmZyb21TY2hlbWEodGhpcy5teVNjaGVtYSkuc2VyaWFsaXplRnJhZ21lbnQoc3RhdGUuZG9jLmNvbnRlbnQpO1xyXG5cclxuICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gZGl2LmlubmVySFRNTDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbmZpZ3VyZVBsdWdpbnMob3B0aW9uczogU2V0dXBPcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgcGx1Z2lucyA9IFtcclxuICAgICAgICAgICAgYnVpbGRJbnB1dFJ1bGVzKG9wdGlvbnMuc2NoZW1hKSxcclxuICAgICAgICAgICAga2V5bWFwKGJ1aWxkS2V5bWFwKG9wdGlvbnMuc2NoZW1hLCBvcHRpb25zLm1hcEtleXMpKSxcclxuICAgICAgICAgICAga2V5bWFwKGJhc2VLZXltYXApLFxyXG4gICAgICAgICAgICBkcm9wQ3Vyc29yKCksXHJcbiAgICAgICAgICAgIGdhcEN1cnNvcigpLFxyXG4gICAgICAgICAgICBsaW5rU2VsZWN0UGx1Z2luLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgaWYgKG9wdGlvbnMubWVudUJhciAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcGx1Z2lucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgbWVudUJhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgZmxvYXRpbmc6IG9wdGlvbnMuZmxvYXRpbmdNZW51ICE9PSBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1lbnVDb250ZW50IHx8IGJ1aWxkTWVudUl0ZW1zKG9wdGlvbnMuc2NoZW1hLCB0aGlzLm1vZGFsU2VydmljZSkuZnVsbE1lbnUsXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuaGlzdG9yeSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcGx1Z2lucy5wdXNoKGhpc3RvcnkoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcGx1Z2lucy5jb25jYXQoXHJcbiAgICAgICAgICAgIG5ldyBQbHVnaW4oe1xyXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IGNsYXNzOiAndmRyLXByb3NlbWlycm9yJyB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iXX0=
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvc2VtaXJyb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvc2hhcmVkL2NvbXBvbmVudHMvcmljaC10ZXh0LWVkaXRvci9wcm9zZW1pcnJvci9wcm9zZW1pcnJvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUc5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVB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QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTthQUN6QixDQUFDO1NBQ0wsQ0FBQztRQUNGLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUU7WUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQzNCO1FBRUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUNqQixJQUFJLE1BQU0sQ0FBQztZQUNQLEtBQUssRUFBRTtnQkFDSCxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7YUFDM0M7U0FDSixDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7OztZQTVISixVQUFVOzs7WUFqQ1UsUUFBUTtZQWdCcEIsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgYmFzZUtleW1hcCB9IGZyb20gJ3Byb3NlbWlycm9yLWNvbW1hbmRzJztcclxuaW1wb3J0IHsgZHJvcEN1cnNvciB9IGZyb20gJ3Byb3NlbWlycm9yLWRyb3BjdXJzb3InO1xyXG5pbXBvcnQgeyBnYXBDdXJzb3IgfSBmcm9tICdwcm9zZW1pcnJvci1nYXBjdXJzb3InO1xyXG5pbXBvcnQgeyBoaXN0b3J5IH0gZnJvbSAncHJvc2VtaXJyb3ItaGlzdG9yeSc7XHJcbmltcG9ydCB7IGtleW1hcCB9IGZyb20gJ3Byb3NlbWlycm9yLWtleW1hcCc7XHJcbmltcG9ydCB7IERPTVBhcnNlciwgRE9NU2VyaWFsaXplciwgU2NoZW1hIH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xyXG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICdwcm9zZW1pcnJvci1zY2hlbWEtYmFzaWMnO1xyXG5pbXBvcnQgeyBhZGRMaXN0Tm9kZXMgfSBmcm9tICdwcm9zZW1pcnJvci1zY2hlbWEtbGlzdCc7XHJcbmltcG9ydCB7IEVkaXRvclN0YXRlLCBQbHVnaW4gfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XHJcbmltcG9ydCB7IGNvbHVtblJlc2l6aW5nLCBmaXhUYWJsZXMsIHRhYmxlRWRpdGluZyB9IGZyb20gJ3Byb3NlbWlycm9yLXRhYmxlcyc7XHJcbmltcG9ydCB7IEVkaXRvclZpZXcgfSBmcm9tICdwcm9zZW1pcnJvci12aWV3JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL21vZGFsL21vZGFsLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgQ29udGV4dE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpZnJhbWVOb2RlLCBpZnJhbWVOb2RlVmlldyB9IGZyb20gJy4vY3VzdG9tLW5vZGVzJztcclxuaW1wb3J0IHsgYnVpbGRJbnB1dFJ1bGVzIH0gZnJvbSAnLi9pbnB1dHJ1bGVzJztcclxuaW1wb3J0IHsgYnVpbGRLZXltYXAgfSBmcm9tICcuL2tleW1hcCc7XHJcbmltcG9ydCB7IGN1c3RvbU1lbnVQbHVnaW4gfSBmcm9tICcuL21lbnUvbWVudS1wbHVnaW4nO1xyXG5pbXBvcnQgeyBpbWFnZUNvbnRleHRNZW51UGx1Z2luIH0gZnJvbSAnLi9wbHVnaW5zL2ltYWdlLXBsdWdpbic7XHJcbmltcG9ydCB7IGxpbmtTZWxlY3RQbHVnaW4gfSBmcm9tICcuL3BsdWdpbnMvbGluay1zZWxlY3QtcGx1Z2luJztcclxuaW1wb3J0IHsgcmF3RWRpdG9yUGx1Z2luIH0gZnJvbSAnLi9wbHVnaW5zL3Jhdy1lZGl0b3ItcGx1Z2luJztcclxuaW1wb3J0IHsgZ2V0VGFibGVOb2RlcywgdGFibGVDb250ZXh0TWVudVBsdWdpbiB9IGZyb20gJy4vcGx1Z2lucy90YWJsZXMtcGx1Z2luJztcclxuaW1wb3J0IHsgU2V0dXBPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUVkaXRvclZpZXdPcHRpb25zIHtcclxuICAgIG9uVGV4dElucHV0OiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkO1xyXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbiAgICBpc1JlYWRPbmx5OiAoKSA9PiBib29sZWFuO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBQcm9zZW1pcnJvclNlcnZpY2Uge1xyXG4gICAgZWRpdG9yVmlldzogRWRpdG9yVmlldztcclxuXHJcbiAgICAvLyBNaXggdGhlIG5vZGVzIGZyb20gcHJvc2VtaXJyb3Itc2NoZW1hLWxpc3QgaW50byB0aGUgYmFzaWMgc2NoZW1hIHRvXHJcbiAgICAvLyBjcmVhdGUgYSBzY2hlbWEgd2l0aCBsaXN0IHN1cHBvcnQuXHJcbiAgICBwcml2YXRlIG15U2NoZW1hID0gbmV3IFNjaGVtYSh7XHJcbiAgICAgICAgbm9kZXM6IGFkZExpc3ROb2RlcyhzY2hlbWEuc3BlYy5ub2RlcywgJ3BhcmFncmFwaCBibG9jayonLCAnYmxvY2snKVxyXG4gICAgICAgICAgICAuYXBwZW5kKGdldFRhYmxlTm9kZXMoKSBhcyBhbnkpXHJcbiAgICAgICAgICAgIC5hZGRUb0VuZCgnaWZyYW1lJywgaWZyYW1lTm9kZSksXHJcbiAgICAgICAgbWFya3M6IHNjaGVtYS5zcGVjLm1hcmtzLFxyXG4gICAgfSk7XHJcbiAgICBwcml2YXRlIGVuYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLCBwcml2YXRlIGNvbnRleHRNZW51U2VydmljZTogQ29udGV4dE1lbnVTZXJ2aWNlKSB7fVxyXG5cclxuICAgIGNvbnRleHRNZW51SXRlbXMkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcblxyXG4gICAgY3JlYXRlRWRpdG9yVmlldyhvcHRpb25zOiBDcmVhdGVFZGl0b3JWaWV3T3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yVmlldyA9IG5ldyBFZGl0b3JWaWV3KG9wdGlvbnMuZWxlbWVudCwge1xyXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5nZXRTdGF0ZUZyb21UZXh0KCcnKSxcclxuICAgICAgICAgICAgZGlzcGF0Y2hUcmFuc2FjdGlvbjogdHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvclZpZXcudXBkYXRlU3RhdGUodGhpcy5lZGl0b3JWaWV3LnN0YXRlLmFwcGx5KHRyKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHIuZG9jQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldFRleHRGcm9tU3RhdGUodGhpcy5lZGl0b3JWaWV3LnN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uVGV4dElucHV0KGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlZGl0YWJsZTogKCkgPT4gb3B0aW9ucy5pc1JlYWRPbmx5KCksXHJcbiAgICAgICAgICAgIGhhbmRsZURPTUV2ZW50czoge1xyXG4gICAgICAgICAgICAgICAgZm9jdXM6IHZpZXcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVTZXJ2aWNlLnNldFZpc2liaWxpdHkodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYmx1cjogdmlldyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudVNlcnZpY2Uuc2V0VmlzaWJpbGl0eShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBub2RlVmlld3M6IHtcclxuICAgICAgICAgICAgICAgIGlmcmFtZTogaWZyYW1lTm9kZVZpZXcsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKHRleHQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmVkaXRvclZpZXcpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFRleHQgPSB0aGlzLmdldFRleHRGcm9tU3RhdGUodGhpcy5lZGl0b3JWaWV3LnN0YXRlKTtcclxuICAgICAgICAgICAgaWYgKHRleHQgIT09IGN1cnJlbnRUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLmdldFN0YXRlRnJvbVRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jb250YWlucyh0aGlzLmVkaXRvclZpZXcuZG9tKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpeCA9IGZpeFRhYmxlcyhzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpeCkgc3RhdGUgPSBzdGF0ZS5hcHBseShmaXguc2V0TWV0YSgnYWRkVG9IaXN0b3J5JywgZmFsc2UpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvclZpZXcudXBkYXRlU3RhdGUoc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRlc3Ryb3koKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yVmlldykge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvclZpZXcuZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5lZGl0b3JWaWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IGVuYWJsZWQ7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0aW5nIHRoZSBzdGF0ZSBjYXVzZXMgUHJvc2VNaXJyb3IgdG8gY2hlY2sgdGhlXHJcbiAgICAgICAgICAgIC8vIGBlZGl0YWJsZSgpYCBmdW5jdGlvbiBmcm9tIHRoZSBjb250cnVjdG9yIGNvbmZpZyBvYmplY3RcclxuICAgICAgICAgICAgLy8gbmV3bHkuXHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yVmlldy51cGRhdGVTdGF0ZSh0aGlzLmVkaXRvclZpZXcuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFN0YXRlRnJvbVRleHQodGV4dDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IEVkaXRvclN0YXRlIHtcclxuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBkaXYuaW5uZXJIVE1MID0gdGV4dCA/PyAnJztcclxuICAgICAgICByZXR1cm4gRWRpdG9yU3RhdGUuY3JlYXRlKHtcclxuICAgICAgICAgICAgZG9jOiBET01QYXJzZXIuZnJvbVNjaGVtYSh0aGlzLm15U2NoZW1hKS5wYXJzZShkaXYpLFxyXG4gICAgICAgICAgICBwbHVnaW5zOiB0aGlzLmNvbmZpZ3VyZVBsdWdpbnMoeyBzY2hlbWE6IHRoaXMubXlTY2hlbWEsIGZsb2F0aW5nTWVudTogZmFsc2UgfSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRUZXh0RnJvbVN0YXRlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBET01TZXJpYWxpemVyLmZyb21TY2hlbWEodGhpcy5teVNjaGVtYSkuc2VyaWFsaXplRnJhZ21lbnQoc3RhdGUuZG9jLmNvbnRlbnQpO1xyXG5cclxuICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gZGl2LmlubmVySFRNTDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbmZpZ3VyZVBsdWdpbnMob3B0aW9uczogU2V0dXBPcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgcGx1Z2lucyA9IFtcclxuICAgICAgICAgICAgYnVpbGRJbnB1dFJ1bGVzKG9wdGlvbnMuc2NoZW1hKSxcclxuICAgICAgICAgICAga2V5bWFwKGJ1aWxkS2V5bWFwKG9wdGlvbnMuc2NoZW1hLCBvcHRpb25zLm1hcEtleXMpKSxcclxuICAgICAgICAgICAga2V5bWFwKGJhc2VLZXltYXApLFxyXG4gICAgICAgICAgICBkcm9wQ3Vyc29yKCksXHJcbiAgICAgICAgICAgIGdhcEN1cnNvcigpLFxyXG4gICAgICAgICAgICBsaW5rU2VsZWN0UGx1Z2luLFxyXG4gICAgICAgICAgICBjb2x1bW5SZXNpemluZyh7fSksXHJcbiAgICAgICAgICAgIHRhYmxlRWRpdGluZyh7IGFsbG93VGFibGVOb2RlU2VsZWN0aW9uOiB0cnVlIH0pLFxyXG4gICAgICAgICAgICB0YWJsZUNvbnRleHRNZW51UGx1Z2luKHRoaXMuY29udGV4dE1lbnVTZXJ2aWNlKSxcclxuICAgICAgICAgICAgaW1hZ2VDb250ZXh0TWVudVBsdWdpbih0aGlzLmNvbnRleHRNZW51U2VydmljZSwgdGhpcy5pbmplY3Rvci5nZXQoTW9kYWxTZXJ2aWNlKSksXHJcbiAgICAgICAgICAgIHJhd0VkaXRvclBsdWdpbih0aGlzLmNvbnRleHRNZW51U2VydmljZSwgdGhpcy5pbmplY3Rvci5nZXQoTW9kYWxTZXJ2aWNlKSksXHJcbiAgICAgICAgICAgIGN1c3RvbU1lbnVQbHVnaW4oe1xyXG4gICAgICAgICAgICAgICAgZmxvYXRpbmdNZW51OiBvcHRpb25zLmZsb2F0aW5nTWVudSxcclxuICAgICAgICAgICAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yLFxyXG4gICAgICAgICAgICAgICAgc2NoZW1hOiBvcHRpb25zLnNjaGVtYSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgXTtcclxuICAgICAgICBpZiAob3B0aW9ucy5oaXN0b3J5ICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBwbHVnaW5zLnB1c2goaGlzdG9yeSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwbHVnaW5zLmNvbmNhdChcclxuICAgICAgICAgICAgbmV3IFBsdWdpbih7XHJcbiAgICAgICAgICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgY2xhc3M6ICd2ZHItcHJvc2VtaXJyb3InIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL3JpY2gtdGV4dC1lZGl0b3IvcHJvc2VtaXJyb3IvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJvc2VtaXJyb3ItbWVudSc7XHJcbmltcG9ydCB7IFNjaGVtYSB9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2V0dXBPcHRpb25zIHtcclxuICAgIHNjaGVtYTogU2NoZW1hO1xyXG4gICAgbWFwS2V5cz86IEtleW1hcDtcclxuICAgIG1lbnVCYXI/OiBib29sZWFuO1xyXG4gICAgaGlzdG9yeT86IGJvb2xlYW47XHJcbiAgICBmbG9hdGluZ01lbnU/OiBib29sZWFuO1xyXG4gICAgbWVudUNvbnRlbnQ/OiBNZW51SXRlbVtdW107XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEtleW1hcCA9IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGZhbHNlPjtcclxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL3JpY2gtdGV4dC1lZGl0b3IvcHJvc2VtaXJyb3IvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJvc2VtaXJyb3ItbWVudSc7XHJcbmltcG9ydCB7IFNjaGVtYSB9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2V0dXBPcHRpb25zIHtcclxuICAgIHNjaGVtYTogU2NoZW1hO1xyXG4gICAgbWFwS2V5cz86IEtleW1hcDtcclxuICAgIG1lbnVCYXI/OiBib29sZWFuO1xyXG4gICAgaGlzdG9yeT86IGJvb2xlYW47XHJcbiAgICBmbG9hdGluZ01lbnU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBLZXltYXAgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBmYWxzZT47XHJcbiJdfQ==