@vendure/admin-ui 2.0.0-next.12 → 2.0.0-next.13

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 (113) hide show
  1. package/core/common/version.d.ts +1 -1
  2. package/core/public_api.d.ts +11 -1
  3. package/core/shared/components/dropdown/dropdown-menu.component.d.ts +2 -1
  4. package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.d.ts +31 -0
  5. package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.d.ts +34 -0
  6. package/core/shared/components/rich-text-editor/prosemirror/custom-nodes.d.ts +4 -0
  7. package/core/shared/components/rich-text-editor/prosemirror/inputrules.d.ts +5 -5
  8. package/core/shared/components/rich-text-editor/prosemirror/menu/links.d.ts +1 -1
  9. package/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.d.ts +12 -0
  10. package/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.d.ts +9 -0
  11. package/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.d.ts +14 -0
  12. package/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.d.ts +7 -0
  13. package/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.d.ts +1 -1
  14. package/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.d.ts +7 -0
  15. package/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.d.ts +13 -0
  16. package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +7 -3
  17. package/core/shared/components/rich-text-editor/prosemirror/types.d.ts +0 -2
  18. package/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.d.ts +21 -0
  19. package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +6 -2
  20. package/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.d.ts +30 -0
  21. package/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.d.ts +22 -0
  22. package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +5 -17
  23. package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +2 -1
  24. package/core/shared/shared.module.d.ts +33 -30
  25. package/esm2020/catalog/components/assets/assets.component.mjs +1 -1
  26. package/esm2020/catalog/components/collection-detail/collection-detail.component.mjs +1 -1
  27. package/esm2020/catalog/components/collection-tree/collection-tree-node.component.mjs +2 -2
  28. package/esm2020/catalog/components/facet-detail/facet-detail.component.mjs +1 -1
  29. package/esm2020/catalog/components/facet-list/facet-list.component.mjs +1 -1
  30. package/esm2020/catalog/components/product-list/product-list.component.mjs +1 -1
  31. package/esm2020/catalog/components/product-variants-editor/product-variants-editor.component.mjs +1 -1
  32. package/esm2020/core/common/version.mjs +2 -2
  33. package/esm2020/core/components/channel-switcher/channel-switcher.component.mjs +1 -1
  34. package/esm2020/core/components/user-menu/user-menu.component.mjs +1 -1
  35. package/esm2020/core/public_api.mjs +12 -2
  36. package/esm2020/core/shared/components/asset-preview-links/asset-preview-links.component.mjs +1 -1
  37. package/esm2020/core/shared/components/datetime-picker/datetime-picker.component.mjs +1 -1
  38. package/esm2020/core/shared/components/dropdown/dropdown-menu.component.mjs +25 -22
  39. package/esm2020/core/shared/components/dropdown/dropdown-trigger.directive.mjs +1 -1
  40. package/esm2020/core/shared/components/entity-info/entity-info.component.mjs +1 -1
  41. package/esm2020/core/shared/components/history-entry-detail/history-entry-detail.component.mjs +1 -1
  42. package/esm2020/core/shared/components/language-selector/language-selector.component.mjs +1 -1
  43. package/esm2020/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.mjs +3 -3
  44. package/esm2020/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.mjs +132 -0
  45. package/esm2020/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.mjs +46 -0
  46. package/esm2020/core/shared/components/rich-text-editor/prosemirror/custom-nodes.mjs +57 -0
  47. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/links.mjs +4 -4
  48. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.mjs +22 -1
  49. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.mjs +12 -0
  50. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu.mjs +73 -18
  51. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.mjs +16 -0
  52. package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.mjs +100 -0
  53. package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.mjs +96 -0
  54. package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.mjs +166 -0
  55. package/esm2020/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.mjs +42 -16
  56. package/esm2020/core/shared/components/rich-text-editor/prosemirror/types.mjs +1 -1
  57. package/esm2020/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.mjs +59 -0
  58. package/esm2020/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +14 -7
  59. package/esm2020/core/shared/components/ui-extension-point/ui-extension-point.component.mjs +1 -1
  60. package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.mjs +57 -0
  61. package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.mjs +63 -0
  62. package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.mjs +48 -83
  63. package/esm2020/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs +3 -1
  64. package/esm2020/core/shared/shared.module.mjs +15 -3
  65. package/esm2020/customer/components/address-card/address-card.component.mjs +1 -1
  66. package/esm2020/customer/components/customer-group-list/customer-group-list.component.mjs +1 -1
  67. package/esm2020/customer/components/customer-history/customer-history.component.mjs +1 -1
  68. package/esm2020/customer/components/customer-list/customer-list.component.mjs +1 -1
  69. package/esm2020/dashboard/components/dashboard/dashboard.component.mjs +1 -1
  70. package/esm2020/marketing/components/promotion-detail/promotion-detail.component.mjs +1 -1
  71. package/esm2020/marketing/components/promotion-list/promotion-list.component.mjs +1 -1
  72. package/esm2020/order/components/fulfillment-card/fulfillment-card.component.mjs +1 -1
  73. package/esm2020/order/components/line-fulfillment/line-fulfillment.component.mjs +1 -1
  74. package/esm2020/order/components/order-detail/order-detail.component.mjs +1 -1
  75. package/esm2020/order/components/order-history/order-history.component.mjs +1 -1
  76. package/esm2020/order/components/order-payment-card/order-payment-card.component.mjs +1 -1
  77. package/esm2020/order/components/order-table/order-table.component.mjs +1 -1
  78. package/esm2020/order/components/refund-order-dialog/refund-order-dialog.component.mjs +1 -1
  79. package/esm2020/settings/components/administrator-list/administrator-list.component.mjs +1 -1
  80. package/esm2020/settings/components/channel-list/channel-list.component.mjs +1 -1
  81. package/esm2020/settings/components/country-list/country-list.component.mjs +1 -1
  82. package/esm2020/settings/components/payment-method-detail/payment-method-detail.component.mjs +1 -1
  83. package/esm2020/settings/components/payment-method-list/payment-method-list.component.mjs +1 -1
  84. package/esm2020/settings/components/role-list/role-list.component.mjs +1 -1
  85. package/esm2020/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +1 -1
  86. package/esm2020/settings/components/shipping-method-list/shipping-method-list.component.mjs +1 -1
  87. package/esm2020/settings/components/tax-category-list/tax-category-list.component.mjs +1 -1
  88. package/esm2020/settings/components/tax-rate-list/tax-rate-list.component.mjs +1 -1
  89. package/esm2020/settings/components/zone-list/zone-list.component.mjs +1 -1
  90. package/esm2020/system/components/job-list/job-list.component.mjs +1 -1
  91. package/fesm2015/vendure-admin-ui-catalog.mjs +7 -7
  92. package/fesm2015/vendure-admin-ui-catalog.mjs.map +1 -1
  93. package/fesm2015/vendure-admin-ui-core.mjs +995 -188
  94. package/fesm2015/vendure-admin-ui-core.mjs.map +1 -1
  95. package/fesm2015/vendure-admin-ui-customer.mjs +4 -4
  96. package/fesm2015/vendure-admin-ui-dashboard.mjs +1 -1
  97. package/fesm2015/vendure-admin-ui-marketing.mjs +2 -2
  98. package/fesm2015/vendure-admin-ui-order.mjs +7 -7
  99. package/fesm2015/vendure-admin-ui-settings.mjs +11 -11
  100. package/fesm2015/vendure-admin-ui-system.mjs +1 -1
  101. package/fesm2020/vendure-admin-ui-catalog.mjs +7 -7
  102. package/fesm2020/vendure-admin-ui-catalog.mjs.map +1 -1
  103. package/fesm2020/vendure-admin-ui-core.mjs +989 -188
  104. package/fesm2020/vendure-admin-ui-core.mjs.map +1 -1
  105. package/fesm2020/vendure-admin-ui-customer.mjs +4 -4
  106. package/fesm2020/vendure-admin-ui-dashboard.mjs +1 -1
  107. package/fesm2020/vendure-admin-ui-marketing.mjs +2 -2
  108. package/fesm2020/vendure-admin-ui-order.mjs +7 -7
  109. package/fesm2020/vendure-admin-ui-settings.mjs +11 -11
  110. package/fesm2020/vendure-admin-ui-system.mjs +1 -1
  111. package/package.json +13 -12
  112. package/core/shared/components/rich-text-editor/prosemirror/menu/images.d.ts +0 -4
  113. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/images.mjs +0 -36
@@ -0,0 +1,96 @@
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
+ if (result) {
54
+ const domNode = htmlToDomNode(result, topLevelNode?.isLeaf ? undefined : node);
55
+ if (domNode) {
56
+ let tr = view.state.tr;
57
+ const parsedNodeSlice = domParser.parse(domNode);
58
+ try {
59
+ tr = tr.replaceRangeWith(topLevelNodePos, topLevelNodePos +
60
+ (topLevelNode?.nodeSize ?? 0), parsedNodeSlice);
61
+ }
62
+ catch (err) {
63
+ // tslint:disable-next-line:no-console
64
+ console.error(err);
65
+ }
66
+ view.dispatch(tr);
67
+ view.focus();
68
+ }
69
+ }
70
+ });
71
+ },
72
+ },
73
+ ],
74
+ });
75
+ }
76
+ }
77
+ },
78
+ };
79
+ },
80
+ });
81
+ function htmlToDomNode(html, wrapInParent) {
82
+ html = `${html.trim()}`;
83
+ const template = document.createElement('template');
84
+ if (wrapInParent) {
85
+ const parentClone = wrapInParent.cloneNode(false);
86
+ parentClone.innerHTML = html;
87
+ template.content.appendChild(parentClone);
88
+ }
89
+ else {
90
+ const parent = document.createElement('p');
91
+ parent.innerHTML = html;
92
+ template.content.appendChild(parent);
93
+ }
94
+ return template.content.firstChild;
95
+ }
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3LWVkaXRvci1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL3JpY2gtdGV4dC1lZGl0b3IvcHJvc2VtaXJyb3IvcGx1Z2lucy9yYXctZWRpdG9yLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUkzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUd6Rjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLGtCQUFzQyxFQUFFLFlBQTBCLEVBQUUsRUFBRSxDQUNsRyxJQUFJLE1BQU0sQ0FBQztJQUNQLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtRQUNWLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkUsT0FBTztZQUNILE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUNsQixPQUFPO2lCQUNWO2dCQUNELElBQUksWUFBOEIsQ0FBQztnQkFDbkMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENB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QUMsV0FBVyxDQUFDLENBQUM7S0FDN0M7U0FBTTtRQUNILE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEM7SUFDRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET01QYXJzZXIsIERPTVNlcmlhbGl6ZXIsIE5vZGUgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XHJcbmltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcclxuaW1wb3J0IHsgUHJvdG9jb2wgfSBmcm9tICdwdXBwZXRlZXInO1xyXG5cclxuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vcHJvdmlkZXJzL21vZGFsL21vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSYXdIdG1sRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcmF3LWh0bWwtZGlhbG9nL3Jhdy1odG1sLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb250ZXh0TWVudVNlcnZpY2UgfSBmcm9tICcuLi9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIEltcGxlbWVudHMgZWRpdGluZyBvZiByYXcgSFRNTCBmb3IgdGhlIHNlbGVjdGVkIG5vZGUgaW4gdGhlIGVkaXRvci5cclxuICovXHJcbmV4cG9ydCBjb25zdCByYXdFZGl0b3JQbHVnaW4gPSAoY29udGV4dE1lbnVTZXJ2aWNlOiBDb250ZXh0TWVudVNlcnZpY2UsIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlKSA9PlxyXG4gICAgbmV3IFBsdWdpbih7XHJcbiAgICAgICAgdmlldzogX3ZpZXcgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBkb21QYXJzZXIgPSBET01QYXJzZXIuZnJvbVNjaGVtYShfdmlldy5zdGF0ZS5zY2hlbWEpO1xyXG4gICAgICAgICAgICBjb25zdCBkb21TZXJpYWxpemVyID0gRE9NU2VyaWFsaXplci5mcm9tU2NoZW1hKF92aWV3LnN0YXRlLnNjaGVtYSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGU6IHZpZXcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmlldy5oYXNGb2N1cygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRvcExldmVsTm9kZTogTm9kZSB8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRvYywgc2VsZWN0aW9uIH0gPSB2aWV3LnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0b3BMZXZlbE5vZGVQb3MgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvYy5ub2Rlc0JldHdlZW4oc2VsZWN0aW9uLmZyb20sIHNlbGVjdGlvbi50bywgKG4sIHBvcywgcGFyZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgPT09IGRvYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGV2ZWxOb2RlID0gbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExldmVsTm9kZVBvcyA9IHBvcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0b3BMZXZlbE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHZpZXcubm9kZURPTSh0b3BMZXZlbE5vZGVQb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TWVudVNlcnZpY2Uuc2V0Q29udGV4dE1lbnUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogc2VsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpY29uU2hhcGU6ICdlbGxpcHNpcy12ZXJ0aWNhbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHM6IHZpZXcuY29vcmRzQXRQb3ModG9wTGV2ZWxOb2RlUG9zKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblNoYXBlOiAnY29kZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0VkaXQgSFRNTCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVTZXJ2aWNlLmNsZWFyQ29udGV4dE1lbnUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9tU2VyaWFsaXplci5zZXJpYWxpemVOb2RlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExldmVsTm9kZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZyb21Db21wb25lbnQoUmF3SHRtbERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ3hsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fsczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IGVsZW1lbnQub3V0ZXJIVE1MLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbU5vZGUgPSBodG1sVG9Eb21Ob2RlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExldmVsTm9kZT8uaXNMZWFmID8gdW5kZWZpbmVkIDogbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb21Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ciA9IHZpZXcuc3RhdGUudHI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZE5vZGVTbGljZSA9IGRvbVBhcnNlci5wYXJzZShkb21Ob2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyID0gdHIucmVwbGFjZVJhbmdlV2l0aChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BMZXZlbE5vZGVQb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGV2ZWxOb2RlUG9zICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvcExldmVsTm9kZT8ubm9kZVNpemUgPz8gMCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkTm9kZVNsaWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5kaXNwYXRjaCh0cik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbmZ1bmN0aW9uIGh0bWxUb0RvbU5vZGUoaHRtbDogc3RyaW5nLCB3cmFwSW5QYXJlbnQ/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGVzLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvc2hhcmVkL2NvbXBvbmVudHMvcmljaC10ZXh0LWVkaXRvci9wcm9zZW1pcnJvci9wbHVnaW5zL3RhYmxlcy1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXpELE9BQU8sRUFBZSxNQUFNLEVBQUUsYUFBYSxFQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFDcEYsT0FBTyxFQUNILGNBQWMsRUFDZCxlQUFlLEVBQ2YsV0FBVyxFQUNYLFlBQVksRUFDWixZQUFZLEVBQ1osU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZUFBZSxHQUNsQixNQUFNLG9CQUFvQixDQUFDO0FBSzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsa0JBQXNDLEVBQUUsRUFBRSxDQUM3RSxJQUFJLE1BQU0sQ0FBQztJQUNQLElBQUksRUFBRSxHQUFHLEVBQUU7UUFDUCxPQUFPO1lBQ0gsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ2xCLE9BQU87aUJBQ1Y7Z0JBQ0QsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLFNBQTJCLENBQUM7Z0JBQ2hDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFDckIsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO29CQUM5RCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTt3QkFDekIsU0FBUyxHQUFHLENBQUMsQ0FBQzt3QkFDZCxZQUFZLEdBQUcsR0FBRyxDQUFDO3dCQUNuQixPQUFPLEtBQUssQ0FBQztxQkFDaEI7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxTQUFTLEVBQUU7b0JBQ1gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDeEMsSUFBSSxJQUFJLFlBQVksT0FBTyxFQUFFO3dCQUN6QixTQUFTLGNBQWMsQ0FDbkIsS0FBYSxFQUNiLFNBR1ksRUFDWixTQUFrQjs0QkFFbEIsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDdEMsT0FBTztnQ0FDSCxLQUFLO2dDQUNMLE9BQU87Z0NBQ1AsU0FBUztnQ0FDVCxPQUFPLEVBQUUsR0FBRyxFQUFFO29DQUNWLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLENBQUM7b0NBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQ0FDYixTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0NBQ3pDLENBQUM7NkJBQ0osQ0FBQzt3QkFDTixDQUFDO3dCQUNELE1BQU0sU0FBUyxHQUFvQjs0QkFDL0IsS0FBSyxFQUFFLEVBQUU7NEJBQ1QsU0FBUyxFQUFFLElBQUk7NEJBQ2YsT0FBTyxFQUFFLElBQUk7NEJBQ2IsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQ0FDVixJQUFJOzRCQUNSLENBQUM7eUJBQ0osQ0FBQzt3QkFDRixrQkFBa0IsQ0FBQyxjQUFjLENBQUM7NEJBQzlCLEdBQUcsRUFBRSxTQUFTOzRCQUNkLEtBQUssRUFBRSxPQUFPOzRCQUNkLFNBQVMsRUFBRSxPQUFPOzRCQUNsQixPQUFPLEVBQUUsSUFBSTs0QkFDYixNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7NEJBQ3RDLEtBQUssRUFBRTtnQ0FDSCxjQUFjLENBQUMsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQztnQ0FDckUsY0FBYyxDQUFDLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUM7Z0NBQ25FLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDO2dDQUM1RCxjQUFjLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQztnQ0FDMUQsY0FBYyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUM7Z0NBQ3pDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDO2dDQUN2QyxTQUFTO2dDQUNULGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxrQkFBa0IsQ0FBQztnQ0FDMUQsY0FBYyxDQUFDLG1CQUFtQixFQUFFLGVBQWUsQ0FBQztnQ0FDcEQsU0FBUztnQ0FDVCxjQUFjLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQztnQ0FDN0MsY0FBYyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUM7Z0NBQ3ZDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDOzZCQUM5Qzt5QkFDSixDQUFDLENBQUM7cUJBQ047aUJBQ0o7cUJBQU07b0JBQ0gsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztpQkFDekM7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFUCxNQUFNLFVBQVUsYUFBYTtJQUN6QixPQUFPLFVBQVUsQ0FBQztRQUNkLFVBQVUsRUFBRSxPQUFPO1FBQ25CLFdBQVcsRUFBRSxRQUFRO1FBQ3JCLGNBQWMsRUFBRTtZQUNaLFVBQVUsRUFBRTtnQkFDUixPQUFPLEVBQUUsSUFBSTtnQkFDYixVQUFVLENBQUMsR0FBRztvQkFDVixPQUFRLEdBQW1CLENBQUMsS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUM7Z0JBQzlELENBQUM7Z0JBQ0QsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLO29CQUNuQixJQUFJLEtBQUssRUFBRTt3QkFDUCxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyxxQkFBcUIsS0FBSyxHQUFHLENBQUM7cUJBQ3JFO2dCQUNMLENBQUM7YUFDSjtTQUNKO0tBQ0osQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBYztJQUN2QyxTQUFTLElBQUksQ0FDVCxLQUFhLEVBQ2IsR0FBMEUsRUFDMUUsU0FBa0I7UUFFbEIsT0FBTyxJQUFJLFFBQVEsQ0FBQztZQUNoQixLQUFLO1lBQ0wsTUFBTSxFQUFFLEdBQUc7WUFDWCxHQUFHLEVBQUUsR0FBRztZQUNSLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ2pGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFTLFNBQVM7UUFDZCxPQUFPLElBQUksUUFBUSxDQUFDO1lBQ2hCLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDakMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNULElBQUk7WUFDUixDQUFDO1lBQ0QsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ25DLE9BQU8sRUFBRSxDQUFDO1lBQ2QsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLHNCQUFzQixFQUFFLGVBQWUsQ0FBQztRQUM3QyxJQUFJLENBQUMscUJBQXFCLEVBQUUsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQztRQUM3QixTQUFTLEVBQUU7UUFDWCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsa0JBQWtCLENBQUM7UUFDaEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGVBQWUsQ0FBQztRQUMxQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLENBQUM7UUFDN0MsU0FBUyxFQUFFO1FBQ1gsSUFBSSxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUM7S0FDcEMsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUU7SUFDMUYsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUU3QyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDakUsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0MsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFFakQsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsV0FBVztJQUN4RSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUMvQixNQUFNLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDekIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FDMUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBRXpGLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxTQUFTLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRTtRQUMvQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVqRCxJQUFJLElBQUksRUFBRTtZQUNOLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEI7UUFFRCxJQUFJLGFBQWEsRUFBRTtZQUNmLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBRTlELElBQUksVUFBVSxFQUFFO2dCQUNaLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDaEM7U0FDSjtLQUNKO0lBRUQsTUFBTSxJQUFJLEdBQVcsRUFBRSxDQUFDO0lBRXhCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxTQUFTLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRTtRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxhQUFhLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ2hHO0lBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lbnVFbGVtZW50LCBNZW51SXRlbSB9IGZyb20gJ3Byb3NlbWlycm9yLW1lbnUnO1xyXG5pbXBvcnQgeyBOb2RlLCBTY2hlbWEgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XHJcbmltcG9ydCB7IEVkaXRvclN0YXRlLCBQbHVnaW4sIFRleHRTZWxlY3Rpb24sIFRyYW5zYWN0aW9uIH0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xyXG5pbXBvcnQge1xyXG4gICAgYWRkQ29sdW1uQWZ0ZXIsXHJcbiAgICBhZGRDb2x1bW5CZWZvcmUsXHJcbiAgICBhZGRSb3dBZnRlcixcclxuICAgIGFkZFJvd0JlZm9yZSxcclxuICAgIGRlbGV0ZUNvbHVtbixcclxuICAgIGRlbGV0ZVJvdyxcclxuICAgIGRlbGV0ZVRhYmxlLFxyXG4gICAgaXNJblRhYmxlLFxyXG4gICAgbWVyZ2VDZWxscyxcclxuICAgIHNwbGl0Q2VsbCxcclxuICAgIHRhYmxlTm9kZXMsXHJcbiAgICB0YWJsZU5vZGVUeXBlcyxcclxuICAgIHRvZ2dsZUhlYWRlckNlbGwsXHJcbiAgICB0b2dnbGVIZWFkZXJDb2x1bW4sXHJcbiAgICB0b2dnbGVIZWFkZXJSb3csXHJcbn0gZnJvbSAncHJvc2VtaXJyb3ItdGFibGVzJztcclxuaW1wb3J0IHsgRGVjb3JhdGlvbiwgRGVjb3JhdGlvblNldCB9IGZyb20gJ3Byb3NlbWlycm9yLXZpZXcnO1xyXG5cclxuaW1wb3J0IHsgQ29udGV4dE1lbnVJdGVtLCBDb250ZXh0TWVudVNlcnZpY2UgfSBmcm9tICcuLi9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBidWlsZE1lbnVJdGVtcyB9IGZyb20gJy4uL21lbnUvbWVudSc7XHJcbmltcG9ydCB7IHJlbmRlckNsYXJpdHlJY29uIH0gZnJvbSAnLi4vbWVudS9tZW51LWNvbW1vbic7XHJcblxyXG5leHBvcnQgY29uc3QgdGFibGVDb250ZXh0TWVudVBsdWdpbiA9IChjb250ZXh0TWVudVNlcnZpY2U6IENvbnRleHRNZW51U2VydmljZSkgPT5cclxuICAgIG5ldyBQbHVnaW4oe1xyXG4gICAgICAgIHZpZXc6ICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZTogdmlldyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2aWV3Lmhhc0ZvY3VzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRvYywgc2VsZWN0aW9uIH0gPSB2aWV3LnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0YWJsZU5vZGU6IE5vZGUgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRhYmxlTm9kZVBvcyA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jLm5vZGVzQmV0d2VlbihzZWxlY3Rpb24uZnJvbSwgc2VsZWN0aW9uLnRvLCAobiwgcG9zLCBwYXJlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4udHlwZS5uYW1lID09PSAndGFibGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZU5vZGUgPSBuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVOb2RlUG9zID0gcG9zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdmlldy5ub2RlRE9NKHRhYmxlTm9kZVBvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlTWVudUl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kRm46IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IEVkaXRvclN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaD86ICh0cjogVHJhbnNhY3Rpb24pID0+IHZvaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9PiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25DbGFzcz86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk6IENvbnRleHRNZW51SXRlbSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZCA9IGNvbW1hbmRGbih2aWV3LnN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TWVudVNlcnZpY2UuY2xlYXJDb250ZXh0TWVudSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZEZuKHZpZXcuc3RhdGUsIHZpZXcuZGlzcGF0Y2gpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXBhcmF0b3I6IENvbnRleHRNZW51SXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TWVudVNlcnZpY2Uuc2V0Q29udGV4dE1lbnUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogc2VsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnVGFibGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25TaGFwZTogJ3RhYmxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBub2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkczogdmlldy5jb29yZHNBdFBvcyh0YWJsZU5vZGVQb3MpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU1lbnVJdGVtKCdJbnNlcnQgY29sdW1uIGJlZm9yZScsIGFkZENvbHVtbkJlZm9yZSwgJ2FkZC1jb2x1bW4nKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWVudUl0ZW0oJ0luc2VydCBjb2x1bW4gYWZ0ZXInLCBhZGRDb2x1bW5BZnRlciwgJ2FkZC1jb2x1bW4nKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWVudUl0ZW0oJ0luc2VydCByb3cgYmVmb3JlJywgYWRkUm93QmVmb3JlLCAnYWRkLXJvdycpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVNZW51SXRlbSgnSW5zZXJ0IHJvdyBhZnRlcicsIGFkZFJvd0FmdGVyLCAnYWRkLXJvdycpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVNZW51SXRlbSgnTWVyZ2UgY2VsbHMnLCBtZXJnZUNlbGxzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWVudUl0ZW0oJ1NwbGl0IGNlbGwnLCBzcGxpdENlbGwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU1lbnVJdGVtKCdUb2dnbGUgaGVhZGVyIGNvbHVtbicsIHRvZ2dsZUhlYWRlckNvbHVtbiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU1lbnVJdGVtKCdUb2dnbGUgaGVhZGVyIHJvdycsIHRvZ2dsZUhlYWRlclJvdyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTWVudUl0ZW0oJ0RlbGV0ZSBjb2x1bW4nLCBkZWxldGVDb2x1bW4pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVNZW51SXRlbSgnRGVsZXRlIHJvdycsIGRlbGV0ZVJvdyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU1lbnVJdGVtKCdEZWxldGUgdGFibGUnLCBkZWxldGVUYWJsZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVTZXJ2aWNlLmNsZWFyQ29udGV4dE1lbnUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZU5vZGVzKCkge1xyXG4gICAgcmV0dXJuIHRhYmxlTm9kZXMoe1xyXG4gICAgICAgIHRhYmxlR3JvdXA6ICdibG9jaycsXHJcbiAgICAgICAgY2VsbENvbnRlbnQ6ICdibG9jaysnLFxyXG4gICAgICAgIGNlbGxBdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBnZXRGcm9tRE9NKGRvbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoZG9tIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXRET01BdHRyKHZhbHVlLCBhdHRycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRycy5zdHlsZSA9IChhdHRycy5zdHlsZSB8fCAnJykgKyBgYmFja2dyb3VuZC1jb2xvcjogJHt2YWx1ZX07YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTWVudShzY2hlbWE6IFNjaGVtYSkge1xyXG4gICAgZnVuY3Rpb24gaXRlbShcclxuICAgICAgICBsYWJlbDogc3RyaW5nLFxyXG4gICAgICAgIGNtZDogKHN0YXRlOiBFZGl0b3JTdGF0ZSwgZGlzcGF0Y2g/OiAodHI6IFRyYW5zYWN0aW9uKSA9PiB2b2lkKSA9PiBib29sZWFuLFxyXG4gICAgICAgIGljb25TaGFwZT86IHN0cmluZyxcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWVudUl0ZW0oe1xyXG4gICAgICAgICAgICBsYWJlbCxcclxuICAgICAgICAgICAgc2VsZWN0OiBjbWQsXHJcbiAgICAgICAgICAgIHJ1bjogY21kLFxyXG4gICAgICAgICAgICByZW5kZXI6IGljb25TaGFwZSA/IHJlbmRlckNsYXJpdHlJY29uKHsgc2hhcGU6IGljb25TaGFwZSwgbGFiZWwgfSkgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2VwYXJhdG9yKCk6IE1lbnVFbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gbmV3IE1lbnVJdGVtKHtcclxuICAgICAgICAgICAgc2VsZWN0OiBzdGF0ZSA9PiBpc0luVGFibGUoc3RhdGUpLFxyXG4gICAgICAgICAgICBydW46IHN0YXRlID0+IHtcclxuICAgICAgICAgICAgICAgIC8qKi9cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVuZGVyOiB2aWV3ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdtZW51LXNlcGFyYXRvcicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgaXRlbSgnSW5zZXJ0IGNvbHVtbiBiZWZvcmUnLCBhZGRDb2x1bW5CZWZvcmUpLFxyXG4gICAgICAgIGl0ZW0oJ0luc2VydCBjb2x1bW4gYWZ0ZXInLCBhZGRDb2x1bW5BZnRlciksXHJcbiAgICAgICAgaXRlbSgnSW5zZXJ0IHJvdyBiZWZvcmUnLCBhZGRSb3dCZWZvcmUpLFxyXG4gICAgICAgIGl0ZW0oJ0luc2VydCByb3cgYWZ0ZXInLCBhZGRSb3dBZnRlciksXHJcbiAgICAgICAgaXRlbSgnTWVyZ2UgY2VsbHMnLCBtZXJnZUNlbGxzKSxcclxuICAgICAgICBpdGVtKCdTcGxpdCBjZWxsJywgc3BsaXRDZWxsKSxcclxuICAgICAgICBzZXBhcmF0b3IoKSxcclxuICAgICAgICBpdGVtKCdUb2dnbGUgaGVhZGVyIGNvbHVtbicsIHRvZ2dsZUhlYWRlckNvbHVtbiksXHJcbiAgICAgICAgaXRlbSgnVG9nZ2xlIGhlYWRlciByb3cnLCB0b2dnbGVIZWFkZXJSb3cpLFxyXG4gICAgICAgIGl0ZW0oJ1RvZ2dsZSBoZWFkZXIgY2VsbHMnLCB0b2dnbGVIZWFkZXJDZWxsKSxcclxuICAgICAgICBzZXBhcmF0b3IoKSxcclxuICAgICAgICBpdGVtKCdEZWxldGUgY29sdW1uJywgZGVsZXRlQ29sdW1uKSxcclxuICAgICAgICBpdGVtKCdEZWxldGUgcm93JywgZGVsZXRlUm93KSxcclxuICAgICAgICBpdGVtKCdEZWxldGUgdGFibGUnLCBkZWxldGVUYWJsZSksXHJcbiAgICBdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWRkVGFibGUoc3RhdGUsIGRpc3BhdGNoLCB7IHJvd3NDb3VudCwgY29sc0NvdW50LCB3aXRoSGVhZGVyUm93LCBjZWxsQ29udGVudCB9KSB7XHJcbiAgICBjb25zdCBvZmZzZXQgPSBzdGF0ZS50ci5zZWxlY3Rpb24uYW5jaG9yICsgMTtcclxuXHJcbiAgICBjb25zdCBub2RlcyA9IGNyZWF0ZVRhYmxlKHN0YXRlLCByb3dzQ291bnQsIGNvbHNDb3VudCwgd2l0aEhlYWRlclJvdywgY2VsbENvbnRlbnQpO1xyXG4gICAgY29uc3QgdHIgPSBzdGF0ZS50ci5yZXBsYWNlU2VsZWN0aW9uV2l0aChub2Rlcykuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgIGNvbnN0IHJlc29sdmVkUG9zID0gdHIuZG9jLnJlc29sdmUob2Zmc2V0KTtcclxuXHJcbiAgICB0ci5zZXRTZWxlY3Rpb24oVGV4dFNlbGVjdGlvbi5uZWFyKHJlc29sdmVkUG9zKSk7XHJcblxyXG4gICAgZGlzcGF0Y2godHIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVUYWJsZShzdGF0ZSwgcm93c0NvdW50LCBjb2xzQ291bnQsIHdpdGhIZWFkZXJSb3csIGNlbGxDb250ZW50KSB7XHJcbiAgICBjb25zdCB0eXBlcyA9IHRhYmxlTm9kZVR5cGVzKHN0YXRlLnNjaGVtYSk7XHJcbiAgICBjb25zdCBoZWFkZXJDZWxsczogTm9kZVtdID0gW107XHJcbiAgICBjb25zdCBjZWxsczogTm9kZVtdID0gW107XHJcbiAgICBjb25zdCBjcmVhdGVDZWxsID0gKGNlbGxUeXBlLCBfY2VsbENvbnRlbnQpID0+XHJcbiAgICAgICAgX2NlbGxDb250ZW50ID8gY2VsbFR5cGUuY3JlYXRlQ2hlY2tlZChudWxsLCBfY2VsbENvbnRlbnQpIDogY2VsbFR5cGUuY3JlYXRlQW5kRmlsbCgpO1xyXG5cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb2xzQ291bnQ7IGluZGV4ICs9IDEpIHtcclxuICAgICAgICBjb25zdCBjZWxsID0gY3JlYXRlQ2VsbCh0eXBlcy5jZWxsLCBjZWxsQ29udGVudCk7XHJcblxyXG4gICAgICAgIGlmIChjZWxsKSB7XHJcbiAgICAgICAgICAgIGNlbGxzLnB1c2goY2VsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod2l0aEhlYWRlclJvdykge1xyXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJDZWxsID0gY3JlYXRlQ2VsbCh0eXBlcy5oZWFkZXJfY2VsbCwgY2VsbENvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGhlYWRlckNlbGwpIHtcclxuICAgICAgICAgICAgICAgIGhlYWRlckNlbGxzLnB1c2goaGVhZGVyQ2VsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgcm93czogTm9kZVtdID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJvd3NDb3VudDsgaW5kZXggKz0gMSkge1xyXG4gICAgICAgIHJvd3MucHVzaCh0eXBlcy5yb3cuY3JlYXRlQ2hlY2tlZChudWxsLCB3aXRoSGVhZGVyUm93ICYmIGluZGV4ID09PSAwID8gaGVhZGVyQ2VsbHMgOiBjZWxscykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlcy50YWJsZS5jcmVhdGVDaGVja2VkKG51bGwsIHJvd3MpO1xyXG59XHJcbiJdfQ==
@@ -4,25 +4,33 @@ 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
+ import { ModalService } from '../../../../providers/modal/modal.service';
14
+ import { iframeNode, iframeNodeView } from './custom-nodes';
13
15
  import { buildInputRules } from './inputrules';
14
16
  import { buildKeymap } from './keymap';
15
- import { buildMenuItems } from './menu/menu';
17
+ import { customMenuPlugin } from './menu/menu-plugin';
18
+ import { imageContextMenuPlugin } from './plugins/image-plugin';
16
19
  import { linkSelectPlugin } from './plugins/link-select-plugin';
20
+ import { rawEditorPlugin } from './plugins/raw-editor-plugin';
21
+ import { getTableNodes, tableContextMenuPlugin } from './plugins/tables-plugin';
17
22
  import * as i0 from "@angular/core";
18
- import * as i1 from "../../../../providers/modal/modal.service";
23
+ import * as i1 from "./context-menu/context-menu.service";
19
24
  export class ProsemirrorService {
20
- constructor(modalService) {
21
- this.modalService = modalService;
25
+ constructor(injector, contextMenuService) {
26
+ this.injector = injector;
27
+ this.contextMenuService = contextMenuService;
22
28
  // Mix the nodes from prosemirror-schema-list into the basic schema to
23
29
  // create a schema with list support.
24
30
  this.mySchema = new Schema({
25
- nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block'),
31
+ nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block')
32
+ .append(getTableNodes())
33
+ .addToEnd('iframe', iframeNode),
26
34
  marks: schema.spec.marks,
27
35
  });
28
36
  this.enabled = true;
@@ -41,12 +49,26 @@ export class ProsemirrorService {
41
49
  }
42
50
  },
43
51
  editable: () => options.isReadOnly(),
52
+ handleDOMEvents: {
53
+ focus: view => {
54
+ this.contextMenuService.setVisibility(true);
55
+ },
56
+ blur: view => {
57
+ this.contextMenuService.setVisibility(false);
58
+ },
59
+ },
60
+ nodeViews: {
61
+ iframe: iframeNodeView,
62
+ },
44
63
  });
45
64
  }
46
65
  update(text) {
47
66
  if (this.editorView) {
48
- const state = this.getStateFromText(text);
67
+ let state = this.getStateFromText(text);
49
68
  if (document.body.contains(this.editorView.dom)) {
69
+ const fix = fixTables(state);
70
+ if (fix)
71
+ state = state.apply(fix.setMeta('addToHistory', false));
50
72
  this.editorView.updateState(state);
51
73
  }
52
74
  }
@@ -87,13 +109,17 @@ export class ProsemirrorService {
87
109
  dropCursor(),
88
110
  gapCursor(),
89
111
  linkSelectPlugin,
112
+ columnResizing({}),
113
+ tableEditing({ allowTableNodeSelection: true }),
114
+ tableContextMenuPlugin(this.contextMenuService),
115
+ imageContextMenuPlugin(this.contextMenuService, this.injector.get(ModalService)),
116
+ rawEditorPlugin(this.contextMenuService, this.injector.get(ModalService)),
117
+ customMenuPlugin({
118
+ floatingMenu: options.floatingMenu,
119
+ injector: this.injector,
120
+ schema: options.schema,
121
+ }),
90
122
  ];
91
- if (options.menuBar !== false) {
92
- plugins.push(menuBar({
93
- floating: options.floatingMenu !== false,
94
- content: options.menuContent || buildMenuItems(options.schema, this.modalService).fullMenu,
95
- }));
96
- }
97
123
  if (options.history !== false) {
98
124
  plugins.push(history());
99
125
  }
@@ -104,9 +130,9 @@ export class ProsemirrorService {
104
130
  }));
105
131
  }
106
132
  }
107
- ProsemirrorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ProsemirrorService, deps: [{ token: i1.ModalService }], target: i0.ɵɵFactoryTarget.Injectable });
133
+ ProsemirrorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ProsemirrorService, deps: [{ token: i0.Injector }, { token: i1.ContextMenuService }], target: i0.ɵɵFactoryTarget.Injectable });
108
134
  ProsemirrorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ProsemirrorService });
109
135
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ProsemirrorService, decorators: [{
110
136
  type: Injectable
111
- }], ctorParameters: function () { return [{ type: i1.ModalService }]; } });
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvc2VtaXJyb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvc2hhcmVkL2NvbXBvbmVudHMvcmljaC10ZXh0LWVkaXRvci9wcm9zZW1pcnJvci9wcm9zZW1pcnJvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUk5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBVWhFLE1BQU0sT0FBTyxrQkFBa0I7SUFXM0IsWUFBb0IsWUFBMEI7UUFBMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFSOUMsc0VBQXNFO1FBQ3RFLHFDQUFxQztRQUM3QixhQUFRLEdBQUcsSUFBSSxNQUFNLENBQUM7WUFDMUIsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxPQUFPLENBQUM7WUFDbkUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSztTQUMzQixDQUFDLENBQUM7UUFDSyxZQUFPLEdBQUcsSUFBSSxDQUFDO0lBRTBCLENBQUM7SUFFbEQsZ0JBQWdCLENBQUMsT0FBZ0M7UUFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBUyxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ3RELEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ2hDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDZixPQUFPO2lCQUNWO2dCQUNELElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7b0JBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzdELE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ2hDO1lBQ0wsQ0FBQztZQUNELFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1NBQ3ZDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBWTtRQUNmLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0QztTQUNKO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM3QjtJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBZ0I7UUFDdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3ZCLHFEQUFxRDtZQUNyRCwwREFBMEQ7WUFDMUQsU0FBUztZQUNULElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEQ7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsSUFBK0I7UUFDcEQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDM0IsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQ3RCLEdBQUcsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ25ELE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDakYsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQWtCO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5RixHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTFCLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQztJQUN6QixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsT0FBcUI7UUFDMUMsTUFBTSxPQUFPLEdBQUc7WUFDWixlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUMvQixNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDbEIsVUFBVSxFQUFFO1lBQ1osU0FBUyxFQUFFO1lBQ1gsZ0JBQWdCO1NBQ25CLENBQUM7UUFDRixJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQ1IsT0FBTyxDQUFDO2dCQUNKLFFBQVEsRUFBRSxPQUFPLENBQUMsWUFBWSxLQUFLLEtBQUs7Z0JBQ3hDLE9BQU8sRUFDSCxPQUFPLENBQUMsV0FBVyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRO2FBQ3hGLENBQUMsQ0FDTCxDQUFDO1NBQ0w7UUFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUMzQjtRQUVELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FDakIsSUFBSSxNQUFNLENBQUM7WUFDUCxLQUFLLEVBQUU7Z0JBQ0gsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFO2FBQzNDO1NBQ0osQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOzsrR0F0R1Esa0JBQWtCO21IQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgYmFzZUtleW1hcCB9IGZyb20gJ3Byb3NlbWlycm9yLWNvbW1hbmRzJztcclxuaW1wb3J0IHsgZHJvcEN1cnNvciB9IGZyb20gJ3Byb3NlbWlycm9yLWRyb3BjdXJzb3InO1xyXG5pbXBvcnQgeyBnYXBDdXJzb3IgfSBmcm9tICdwcm9zZW1pcnJvci1nYXBjdXJzb3InO1xyXG5pbXBvcnQgeyBoaXN0b3J5IH0gZnJvbSAncHJvc2VtaXJyb3ItaGlzdG9yeSc7XHJcbmltcG9ydCB7IGtleW1hcCB9IGZyb20gJ3Byb3NlbWlycm9yLWtleW1hcCc7XHJcbmltcG9ydCB7IG1lbnVCYXIgfSBmcm9tICdwcm9zZW1pcnJvci1tZW51JztcclxuaW1wb3J0IHsgRE9NUGFyc2VyLCBET01TZXJpYWxpemVyLCBTY2hlbWEgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XHJcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJ3Byb3NlbWlycm9yLXNjaGVtYS1iYXNpYyc7XHJcbmltcG9ydCB7IGFkZExpc3ROb2RlcyB9IGZyb20gJ3Byb3NlbWlycm9yLXNjaGVtYS1saXN0JztcclxuaW1wb3J0IHsgRWRpdG9yU3RhdGUsIFBsdWdpbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcclxuaW1wb3J0IHsgRWRpdG9yVmlldyB9IGZyb20gJ3Byb3NlbWlycm9yLXZpZXcnO1xyXG5cclxuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL21vZGFsL21vZGFsLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgYnVpbGRJbnB1dFJ1bGVzIH0gZnJvbSAnLi9pbnB1dHJ1bGVzJztcclxuaW1wb3J0IHsgYnVpbGRLZXltYXAgfSBmcm9tICcuL2tleW1hcCc7XHJcbmltcG9ydCB7IGJ1aWxkTWVudUl0ZW1zIH0gZnJvbSAnLi9tZW51L21lbnUnO1xyXG5pbXBvcnQgeyBsaW5rU2VsZWN0UGx1Z2luIH0gZnJvbSAnLi9wbHVnaW5zL2xpbmstc2VsZWN0LXBsdWdpbic7XHJcbmltcG9ydCB7IFNldHVwT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVFZGl0b3JWaWV3T3B0aW9ucyB7XHJcbiAgICBvblRleHRJbnB1dDogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZDtcclxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgaXNSZWFkT25seTogKCkgPT4gYm9vbGVhbjtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUHJvc2VtaXJyb3JTZXJ2aWNlIHtcclxuICAgIGVkaXRvclZpZXc6IEVkaXRvclZpZXc7XHJcblxyXG4gICAgLy8gTWl4IHRoZSBub2RlcyBmcm9tIHByb3NlbWlycm9yLXNjaGVtYS1saXN0IGludG8gdGhlIGJhc2ljIHNjaGVtYSB0b1xyXG4gICAgLy8gY3JlYXRlIGEgc2NoZW1hIHdpdGggbGlzdCBzdXBwb3J0LlxyXG4gICAgcHJpdmF0ZSBteVNjaGVtYSA9IG5ldyBTY2hlbWEoe1xyXG4gICAgICAgIG5vZGVzOiBhZGRMaXN0Tm9kZXMoc2NoZW1hLnNwZWMubm9kZXMsICdwYXJhZ3JhcGggYmxvY2sqJywgJ2Jsb2NrJyksXHJcbiAgICAgICAgbWFya3M6IHNjaGVtYS5zcGVjLm1hcmtzLFxyXG4gICAgfSk7XHJcbiAgICBwcml2YXRlIGVuYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UpIHt9XHJcblxyXG4gICAgY3JlYXRlRWRpdG9yVmlldyhvcHRpb25zOiBDcmVhdGVFZGl0b3JWaWV3T3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yVmlldyA9IG5ldyBFZGl0b3JWaWV3PFNjaGVtYT4ob3B0aW9ucy5lbGVtZW50LCB7XHJcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdldFN0YXRlRnJvbVRleHQoJycpLFxyXG4gICAgICAgICAgICBkaXNwYXRjaFRyYW5zYWN0aW9uOiB0ciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yVmlldy51cGRhdGVTdGF0ZSh0aGlzLmVkaXRvclZpZXcuc3RhdGUuYXBwbHkodHIpKTtcclxuICAgICAgICAgICAgICAgIGlmICh0ci5kb2NDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0VGV4dEZyb21TdGF0ZSh0aGlzLmVkaXRvclZpZXcuc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25UZXh0SW5wdXQoY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVkaXRhYmxlOiAoKSA9PiBvcHRpb25zLmlzUmVhZE9ubHkoKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUodGV4dDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yVmlldykge1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGVGcm9tVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnModGhpcy5lZGl0b3JWaWV3LmRvbSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yVmlldy51cGRhdGVTdGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVzdHJveSgpIHtcclxuICAgICAgICBpZiAodGhpcy5lZGl0b3JWaWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yVmlldy5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldEVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLmVkaXRvclZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gZW5hYmxlZDtcclxuICAgICAgICAgICAgLy8gVXBkYXRpbmcgdGhlIHN0YXRlIGNhdXNlcyBQcm9zZU1pcnJvciB0byBjaGVjayB0aGVcclxuICAgICAgICAgICAgLy8gYGVkaXRhYmxlKClgIGZ1bmN0aW9uIGZyb20gdGhlIGNvbnRydWN0b3IgY29uZmlnIG9iamVjdFxyXG4gICAgICAgICAgICAvLyBuZXdseS5cclxuICAgICAgICAgICAgdGhpcy5lZGl0b3JWaWV3LnVwZGF0ZVN0YXRlKHRoaXMuZWRpdG9yVmlldy5zdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3RhdGVGcm9tVGV4dCh0ZXh0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogRWRpdG9yU3RhdGUge1xyXG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGRpdi5pbm5lckhUTUwgPSB0ZXh0ID8/ICcnO1xyXG4gICAgICAgIHJldHVybiBFZGl0b3JTdGF0ZS5jcmVhdGUoe1xyXG4gICAgICAgICAgICBkb2M6IERPTVBhcnNlci5mcm9tU2NoZW1hKHRoaXMubXlTY2hlbWEpLnBhcnNlKGRpdiksXHJcbiAgICAgICAgICAgIHBsdWdpbnM6IHRoaXMuY29uZmlndXJlUGx1Z2lucyh7IHNjaGVtYTogdGhpcy5teVNjaGVtYSwgZmxvYXRpbmdNZW51OiBmYWxzZSB9KSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFRleHRGcm9tU3RhdGUoc3RhdGU6IEVkaXRvclN0YXRlKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBjb25zdCBmcmFnbWVudCA9IERPTVNlcmlhbGl6ZXIuZnJvbVNjaGVtYSh0aGlzLm15U2NoZW1hKS5zZXJpYWxpemVGcmFnbWVudChzdGF0ZS5kb2MuY29udGVudCk7XHJcblxyXG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZChmcmFnbWVudCk7XHJcblxyXG4gICAgICAgIHJldHVybiBkaXYuaW5uZXJIVE1MO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29uZmlndXJlUGx1Z2lucyhvcHRpb25zOiBTZXR1cE9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBwbHVnaW5zID0gW1xyXG4gICAgICAgICAgICBidWlsZElucHV0UnVsZXMob3B0aW9ucy5zY2hlbWEpLFxyXG4gICAgICAgICAgICBrZXltYXAoYnVpbGRLZXltYXAob3B0aW9ucy5zY2hlbWEsIG9wdGlvbnMubWFwS2V5cykpLFxyXG4gICAgICAgICAgICBrZXltYXAoYmFzZUtleW1hcCksXHJcbiAgICAgICAgICAgIGRyb3BDdXJzb3IoKSxcclxuICAgICAgICAgICAgZ2FwQ3Vyc29yKCksXHJcbiAgICAgICAgICAgIGxpbmtTZWxlY3RQbHVnaW4sXHJcbiAgICAgICAgXTtcclxuICAgICAgICBpZiAob3B0aW9ucy5tZW51QmFyICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBwbHVnaW5zLnB1c2goXHJcbiAgICAgICAgICAgICAgICBtZW51QmFyKHtcclxuICAgICAgICAgICAgICAgICAgICBmbG9hdGluZzogb3B0aW9ucy5mbG9hdGluZ01lbnUgIT09IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubWVudUNvbnRlbnQgfHwgYnVpbGRNZW51SXRlbXMob3B0aW9ucy5zY2hlbWEsIHRoaXMubW9kYWxTZXJ2aWNlKS5mdWxsTWVudSxcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0aW9ucy5oaXN0b3J5ICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBwbHVnaW5zLnB1c2goaGlzdG9yeSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwbHVnaW5zLmNvbmNhdChcclxuICAgICAgICAgICAgbmV3IFBsdWdpbih7XHJcbiAgICAgICAgICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgY2xhc3M6ICd2ZHItcHJvc2VtaXJyb3InIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
137
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.ContextMenuService }]; } });
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvc2VtaXJyb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvc2hhcmVkL2NvbXBvbmVudHMvcmljaC10ZXh0LWVkaXRvci9wcm9zZW1pcnJvci9wcm9zZW1pcnJvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUd6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFj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QyxNQUFNLENBQ2pCLElBQUksTUFBTSxDQUFDO1lBQ1AsS0FBSyxFQUFFO2dCQUNILFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRTthQUMzQztTQUNKLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7K0dBeEhRLGtCQUFrQjttSEFBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBiYXNlS2V5bWFwIH0gZnJvbSAncHJvc2VtaXJyb3ItY29tbWFuZHMnO1xyXG5pbXBvcnQgeyBkcm9wQ3Vyc29yIH0gZnJvbSAncHJvc2VtaXJyb3ItZHJvcGN1cnNvcic7XHJcbmltcG9ydCB7IGdhcEN1cnNvciB9IGZyb20gJ3Byb3NlbWlycm9yLWdhcGN1cnNvcic7XHJcbmltcG9ydCB7IGhpc3RvcnkgfSBmcm9tICdwcm9zZW1pcnJvci1oaXN0b3J5JztcclxuaW1wb3J0IHsga2V5bWFwIH0gZnJvbSAncHJvc2VtaXJyb3Ita2V5bWFwJztcclxuaW1wb3J0IHsgRE9NUGFyc2VyLCBET01TZXJpYWxpemVyLCBTY2hlbWEgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XHJcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJ3Byb3NlbWlycm9yLXNjaGVtYS1iYXNpYyc7XHJcbmltcG9ydCB7IGFkZExpc3ROb2RlcyB9IGZyb20gJ3Byb3NlbWlycm9yLXNjaGVtYS1saXN0JztcclxuaW1wb3J0IHsgRWRpdG9yU3RhdGUsIFBsdWdpbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcclxuaW1wb3J0IHsgY29sdW1uUmVzaXppbmcsIGZpeFRhYmxlcywgdGFibGVFZGl0aW5nIH0gZnJvbSAncHJvc2VtaXJyb3ItdGFibGVzJztcclxuaW1wb3J0IHsgRWRpdG9yVmlldyB9IGZyb20gJ3Byb3NlbWlycm9yLXZpZXcnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3ZpZGVycy9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IENvbnRleHRNZW51U2VydmljZSB9IGZyb20gJy4vY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaWZyYW1lTm9kZSwgaWZyYW1lTm9kZVZpZXcgfSBmcm9tICcuL2N1c3RvbS1ub2Rlcyc7XHJcbmltcG9ydCB7IGJ1aWxkSW5wdXRSdWxlcyB9IGZyb20gJy4vaW5wdXRydWxlcyc7XHJcbmltcG9ydCB7IGJ1aWxkS2V5bWFwIH0gZnJvbSAnLi9rZXltYXAnO1xyXG5pbXBvcnQgeyBjdXN0b21NZW51UGx1Z2luIH0gZnJvbSAnLi9tZW51L21lbnUtcGx1Z2luJztcclxuaW1wb3J0IHsgaW1hZ2VDb250ZXh0TWVudVBsdWdpbiB9IGZyb20gJy4vcGx1Z2lucy9pbWFnZS1wbHVnaW4nO1xyXG5pbXBvcnQgeyBsaW5rU2VsZWN0UGx1Z2luIH0gZnJvbSAnLi9wbHVnaW5zL2xpbmstc2VsZWN0LXBsdWdpbic7XHJcbmltcG9ydCB7IHJhd0VkaXRvclBsdWdpbiB9IGZyb20gJy4vcGx1Z2lucy9yYXctZWRpdG9yLXBsdWdpbic7XHJcbmltcG9ydCB7IGdldFRhYmxlTm9kZXMsIHRhYmxlQ29udGV4dE1lbnVQbHVnaW4gfSBmcm9tICcuL3BsdWdpbnMvdGFibGVzLXBsdWdpbic7XHJcbmltcG9ydCB7IFNldHVwT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVFZGl0b3JWaWV3T3B0aW9ucyB7XHJcbiAgICBvblRleHRJbnB1dDogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZDtcclxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgaXNSZWFkT25seTogKCkgPT4gYm9vbGVhbjtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUHJvc2VtaXJyb3JTZXJ2aWNlIHtcclxuICAgIGVkaXRvclZpZXc6IEVkaXRvclZpZXc7XHJcblxyXG4gICAgLy8gTWl4IHRoZSBub2RlcyBmcm9tIHByb3NlbWlycm9yLXNjaGVtYS1saXN0IGludG8gdGhlIGJhc2ljIHNjaGVtYSB0b1xyXG4gICAgLy8gY3JlYXRlIGEgc2NoZW1hIHdpdGggbGlzdCBzdXBwb3J0LlxyXG4gICAgcHJpdmF0ZSBteVNjaGVtYSA9IG5ldyBTY2hlbWEoe1xyXG4gICAgICAgIG5vZGVzOiBhZGRMaXN0Tm9kZXMoc2NoZW1hLnNwZWMubm9kZXMsICdwYXJhZ3JhcGggYmxvY2sqJywgJ2Jsb2NrJylcclxuICAgICAgICAgICAgLmFwcGVuZChnZXRUYWJsZU5vZGVzKCkgYXMgYW55KVxyXG4gICAgICAgICAgICAuYWRkVG9FbmQoJ2lmcmFtZScsIGlmcmFtZU5vZGUpLFxyXG4gICAgICAgIG1hcmtzOiBzY2hlbWEuc3BlYy5tYXJrcyxcclxuICAgIH0pO1xyXG4gICAgcHJpdmF0ZSBlbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciwgcHJpdmF0ZSBjb250ZXh0TWVudVNlcnZpY2U6IENvbnRleHRNZW51U2VydmljZSkge31cclxuXHJcbiAgICBjb250ZXh0TWVudUl0ZW1zJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG5cclxuICAgIGNyZWF0ZUVkaXRvclZpZXcob3B0aW9uczogQ3JlYXRlRWRpdG9yVmlld09wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLmVkaXRvclZpZXcgPSBuZXcgRWRpdG9yVmlldyhvcHRpb25zLmVsZW1lbnQsIHtcclxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZ2V0U3RhdGVGcm9tVGV4dCgnJyksXHJcbiAgICAgICAgICAgIGRpc3BhdGNoVHJhbnNhY3Rpb246IHRyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JWaWV3LnVwZGF0ZVN0YXRlKHRoaXMuZWRpdG9yVmlldy5zdGF0ZS5hcHBseSh0cikpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRyLmRvY0NoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRUZXh0RnJvbVN0YXRlKHRoaXMuZWRpdG9yVmlldy5zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblRleHRJbnB1dChjb250ZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZWRpdGFibGU6ICgpID0+IG9wdGlvbnMuaXNSZWFkT25seSgpLFxyXG4gICAgICAgICAgICBoYW5kbGVET01FdmVudHM6IHtcclxuICAgICAgICAgICAgICAgIGZvY3VzOiB2aWV3ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51U2VydmljZS5zZXRWaXNpYmlsaXR5KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGJsdXI6IHZpZXcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVTZXJ2aWNlLnNldFZpc2liaWxpdHkoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbm9kZVZpZXdzOiB7XHJcbiAgICAgICAgICAgICAgICBpZnJhbWU6IGlmcmFtZU5vZGVWaWV3LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSh0ZXh0OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5lZGl0b3JWaWV3KSB7XHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGVGcm9tVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnModGhpcy5lZGl0b3JWaWV3LmRvbSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeCA9IGZpeFRhYmxlcyhzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZml4KSBzdGF0ZSA9IHN0YXRlLmFwcGx5KGZpeC5zZXRNZXRhKCdhZGRUb0hpc3RvcnknLCBmYWxzZSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JWaWV3LnVwZGF0ZVN0YXRlKHN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVkaXRvclZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0b3JWaWV3LmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RW5hYmxlZChlbmFibGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yVmlldykge1xyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSBlbmFibGVkO1xyXG4gICAgICAgICAgICAvLyBVcGRhdGluZyB0aGUgc3RhdGUgY2F1c2VzIFByb3NlTWlycm9yIHRvIGNoZWNrIHRoZVxyXG4gICAgICAgICAgICAvLyBgZWRpdGFibGUoKWAgZnVuY3Rpb24gZnJvbSB0aGUgY29udHJ1Y3RvciBjb25maWcgb2JqZWN0XHJcbiAgICAgICAgICAgIC8vIG5ld2x5LlxyXG4gICAgICAgICAgICB0aGlzLmVkaXRvclZpZXcudXBkYXRlU3RhdGUodGhpcy5lZGl0b3JWaWV3LnN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTdGF0ZUZyb21UZXh0KHRleHQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBFZGl0b3JTdGF0ZSB7XHJcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgZGl2LmlubmVySFRNTCA9IHRleHQgPz8gJyc7XHJcbiAgICAgICAgcmV0dXJuIEVkaXRvclN0YXRlLmNyZWF0ZSh7XHJcbiAgICAgICAgICAgIGRvYzogRE9NUGFyc2VyLmZyb21TY2hlbWEodGhpcy5teVNjaGVtYSkucGFyc2UoZGl2KSxcclxuICAgICAgICAgICAgcGx1Z2luczogdGhpcy5jb25maWd1cmVQbHVnaW5zKHsgc2NoZW1hOiB0aGlzLm15U2NoZW1hLCBmbG9hdGluZ01lbnU6IGZhbHNlIH0pLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VGV4dEZyb21TdGF0ZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gRE9NU2VyaWFsaXplci5mcm9tU2NoZW1hKHRoaXMubXlTY2hlbWEpLnNlcmlhbGl6ZUZyYWdtZW50KHN0YXRlLmRvYy5jb250ZW50KTtcclxuXHJcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb25maWd1cmVQbHVnaW5zKG9wdGlvbnM6IFNldHVwT3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbnMgPSBbXHJcbiAgICAgICAgICAgIGJ1aWxkSW5wdXRSdWxlcyhvcHRpb25zLnNjaGVtYSksXHJcbiAgICAgICAgICAgIGtleW1hcChidWlsZEtleW1hcChvcHRpb25zLnNjaGVtYSwgb3B0aW9ucy5tYXBLZXlzKSksXHJcbiAgICAgICAgICAgIGtleW1hcChiYXNlS2V5bWFwKSxcclxuICAgICAgICAgICAgZHJvcEN1cnNvcigpLFxyXG4gICAgICAgICAgICBnYXBDdXJzb3IoKSxcclxuICAgICAgICAgICAgbGlua1NlbGVjdFBsdWdpbixcclxuICAgICAgICAgICAgY29sdW1uUmVzaXppbmcoe30pLFxyXG4gICAgICAgICAgICB0YWJsZUVkaXRpbmcoeyBhbGxvd1RhYmxlTm9kZVNlbGVjdGlvbjogdHJ1ZSB9KSxcclxuICAgICAgICAgICAgdGFibGVDb250ZXh0TWVudVBsdWdpbih0aGlzLmNvbnRleHRNZW51U2VydmljZSksXHJcbiAgICAgICAgICAgIGltYWdlQ29udGV4dE1lbnVQbHVnaW4odGhpcy5jb250ZXh0TWVudVNlcnZpY2UsIHRoaXMuaW5qZWN0b3IuZ2V0KE1vZGFsU2VydmljZSkpLFxyXG4gICAgICAgICAgICByYXdFZGl0b3JQbHVnaW4odGhpcy5jb250ZXh0TWVudVNlcnZpY2UsIHRoaXMuaW5qZWN0b3IuZ2V0KE1vZGFsU2VydmljZSkpLFxyXG4gICAgICAgICAgICBjdXN0b21NZW51UGx1Z2luKHtcclxuICAgICAgICAgICAgICAgIGZsb2F0aW5nTWVudTogb3B0aW9ucy5mbG9hdGluZ01lbnUsXHJcbiAgICAgICAgICAgICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvcixcclxuICAgICAgICAgICAgICAgIHNjaGVtYTogb3B0aW9ucy5zY2hlbWEsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuaGlzdG9yeSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcGx1Z2lucy5wdXNoKGhpc3RvcnkoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcGx1Z2lucy5jb25jYXQoXHJcbiAgICAgICAgICAgIG5ldyBQbHVnaW4oe1xyXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IGNsYXNzOiAndmRyLXByb3NlbWlycm9yJyB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -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==
@@ -0,0 +1,59 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { FormControl } from '@angular/forms';
3
+ import { HtmlEditorFormInputComponent } from '../../../dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../../dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component";
6
+ import * as i2 from "../../modal-dialog/dialog-buttons.directive";
7
+ import * as i3 from "@ngx-translate/core";
8
+ export class RawHtmlDialogComponent {
9
+ constructor() {
10
+ this.formControl = new FormControl();
11
+ this.config = {
12
+ name: '',
13
+ type: '',
14
+ list: false,
15
+ required: true,
16
+ ui: { component: HtmlEditorFormInputComponent.id },
17
+ };
18
+ }
19
+ ngOnInit() {
20
+ this.formControl.setValue(this.process(this.html));
21
+ }
22
+ process(str) {
23
+ const div = document.createElement('div');
24
+ div.innerHTML = str.trim();
25
+ return this.format(div, 0).innerHTML.trim();
26
+ }
27
+ /**
28
+ * Taken from https://stackoverflow.com/a/26361620/772859
29
+ */
30
+ format(node, level = 0) {
31
+ const indentBefore = new Array(level++ + 1).join('\t');
32
+ const indentAfter = new Array(level - 1).join('\t');
33
+ let textNode;
34
+ // tslint:disable-next-line:prefer-for-of
35
+ for (let i = 0; i < node.children.length; i++) {
36
+ textNode = document.createTextNode('\n' + indentBefore);
37
+ node.insertBefore(textNode, node.children[i]);
38
+ this.format(node.children[i], level);
39
+ if (node.lastElementChild === node.children[i]) {
40
+ textNode = document.createTextNode('\n' + indentAfter);
41
+ node.appendChild(textNode);
42
+ }
43
+ }
44
+ return node;
45
+ }
46
+ cancel() {
47
+ this.resolveWith(undefined);
48
+ }
49
+ select() {
50
+ this.resolveWith(this.formControl.value);
51
+ }
52
+ }
53
+ RawHtmlDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: RawHtmlDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
54
+ RawHtmlDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: RawHtmlDialogComponent, selector: "vdr-raw-html-dialog", ngImport: i0, template: "<vdr-dynamic-form-input\r\n [def]=\"config\"\r\n [control]=\"formControl\"\r\n ></vdr-dynamic-form-input>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'common.cancel' | translate }}\r\n </button>\r\n <button type=\"submit\" (click)=\"select()\" class=\"btn btn-primary\" [disabled]=\"formControl.invalid\">\r\n {{ 'common.update' | translate }}\r\n </button>\r\n</ng-template>\r\n", styles: [""], components: [{ type: i1.DynamicFormInputComponent, selector: "vdr-dynamic-form-input", inputs: ["def", "readonly", "control"] }], directives: [{ type: i2.DialogButtonsDirective, selector: "[vdrDialogButtons]" }], pipes: { "translate": i3.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: RawHtmlDialogComponent, decorators: [{
56
+ type: Component,
57
+ args: [{ selector: 'vdr-raw-html-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-dynamic-form-input\r\n [def]=\"config\"\r\n [control]=\"formControl\"\r\n ></vdr-dynamic-form-input>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'common.cancel' | translate }}\r\n </button>\r\n <button type=\"submit\" (click)=\"select()\" class=\"btn btn-primary\" [disabled]=\"formControl.invalid\">\r\n {{ 'common.update' | translate }}\r\n </button>\r\n</ng-template>\r\n", styles: [""] }]
58
+ }] });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3LWh0bWwtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvc2hhcmVkL2NvbXBvbmVudHMvcmljaC10ZXh0LWVkaXRvci9yYXctaHRtbC1kaWFsb2cvcmF3LWh0bWwtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvc2hhcmVkL2NvbXBvbmVudHMvcmljaC10ZXh0LWVkaXRvci9yYXctaHRtbC1kaWFsb2cvcmF3LWh0bWwtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTdDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHNGQUFzRixDQUFDOzs7OztBQVFwSSxNQUFNLE9BQU8sc0JBQXNCO0lBTm5DO1FBUUksZ0JBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLFdBQU0sR0FBd0I7WUFDMUIsSUFBSSxFQUFFLEVBQUU7WUFDUixJQUFJLEVBQUUsRUFBRTtZQUNSLElBQUksRUFBRSxLQUFLO1lBQ1gsUUFBUSxFQUFFLElBQUk7WUFDZCxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsNEJBQTRCLENBQUMsRUFBRSxFQUFFO1NBQ3JELENBQUM7S0E2Q0w7SUF6Q0csUUFBUTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFXO1FBQ2YsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsSUFBYSxFQUFFLEtBQUssR0FBRyxDQUFDO1FBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxNQUFNLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksUUFBYyxDQUFDO1FBRW5CLHlDQUF5QztRQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU5QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFckMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDNUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCO1NBQ0o7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQzs7bUhBckRRLHNCQUFzQjt1R0FBdEIsc0JBQXNCLDJEQ2JuQyw0aEJBWUE7MkZEQ2Esc0JBQXNCO2tCQU5sQyxTQUFTOytCQUNJLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQ29uZmlnQXJnRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9nZW5lcmF0ZWQtdHlwZXMnO1xuaW1wb3J0IHsgRGlhbG9nIH0gZnJvbSAnLi4vLi4vLi4vLi4vcHJvdmlkZXJzL21vZGFsL21vZGFsLnR5cGVzJztcbmltcG9ydCB7IEh0bWxFZGl0b3JGb3JtSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9keW5hbWljLWZvcm0taW5wdXRzL2NvZGUtZWRpdG9yLWZvcm0taW5wdXQvaHRtbC1lZGl0b3ItZm9ybS1pbnB1dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Zkci1yYXctaHRtbC1kaWFsb2cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yYXctaHRtbC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Jhdy1odG1sLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBSYXdIdG1sRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBEaWFsb2c8c3RyaW5nPiB7XG4gICAgaHRtbDogc3RyaW5nO1xuICAgIGZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgY29uZmlnOiBDb25maWdBcmdEZWZpbml0aW9uID0ge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdHlwZTogJycsXG4gICAgICAgIGxpc3Q6IGZhbHNlLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdWk6IHsgY29tcG9uZW50OiBIdG1sRWRpdG9yRm9ybUlucHV0Q29tcG9uZW50LmlkIH0sXG4gICAgfTtcblxuICAgIHJlc29sdmVXaXRoOiAoaHRtbDogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5wcm9jZXNzKHRoaXMuaHRtbCkpO1xuICAgIH1cblxuICAgIHByb2Nlc3Moc3RyOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGRpdi5pbm5lckhUTUwgPSBzdHIudHJpbSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQoZGl2LCAwKS5pbm5lckhUTUwudHJpbSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRha2VuIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2MzYxNjIwLzc3Mjg1OVxuICAgICAqL1xuICAgIGZvcm1hdChub2RlOiBFbGVtZW50LCBsZXZlbCA9IDApIHtcbiAgICAgICAgY29uc3QgaW5kZW50QmVmb3JlID0gbmV3IEFycmF5KGxldmVsKysgKyAxKS5qb2luKCdcXHQnKTtcbiAgICAgICAgY29uc3QgaW5kZW50QWZ0ZXIgPSBuZXcgQXJyYXkobGV2ZWwgLSAxKS5qb2luKCdcXHQnKTtcbiAgICAgICAgbGV0IHRleHROb2RlOiBUZXh0O1xuXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFxuJyArIGluZGVudEJlZm9yZSk7XG4gICAgICAgICAgICBub2RlLmluc2VydEJlZm9yZSh0ZXh0Tm9kZSwgbm9kZS5jaGlsZHJlbltpXSk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybWF0KG5vZGUuY2hpbGRyZW5baV0sIGxldmVsKTtcblxuICAgICAgICAgICAgaWYgKG5vZGUubGFzdEVsZW1lbnRDaGlsZCA9PT0gbm9kZS5jaGlsZHJlbltpXSkge1xuICAgICAgICAgICAgICAgIHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcbicgKyBpbmRlbnRBZnRlcik7XG4gICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBjYW5jZWwoKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZVdpdGgodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBzZWxlY3QoKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZVdpdGgodGhpcy5mb3JtQ29udHJvbC52YWx1ZSk7XG4gICAgfVxufVxuIiwiPHZkci1keW5hbWljLWZvcm0taW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgIFtkZWZdPVwiY29uZmlnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cImZvcm1Db250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgPjwvdmRyLWR5bmFtaWMtZm9ybS1pbnB1dD5cclxuPG5nLXRlbXBsYXRlIHZkckRpYWxvZ0J1dHRvbnM+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XHJcbiAgICAgICB7eyAnY29tbW9uLmNhbmNlbCcgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cInNlbGVjdCgpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBbZGlzYWJsZWRdPVwiZm9ybUNvbnRyb2wuaW52YWxpZFwiPlxyXG4gICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9idXR0b24+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==