rete-angular-plugin 2.1.2 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/18/core.d.ts +68 -0
  2. package/18/esm2022/core.mjs +127 -0
  3. package/18/esm2022/index.mjs +12 -0
  4. package/18/esm2022/module.mjs +50 -0
  5. package/18/esm2022/presets/classic/components/connection/connection-wrapper.component.mjs +91 -0
  6. package/18/esm2022/presets/classic/components/connection/connection.component.mjs +33 -0
  7. package/18/esm2022/presets/classic/components/control/control.component.mjs +55 -0
  8. package/18/esm2022/presets/classic/components/index.mjs +6 -0
  9. package/18/esm2022/presets/classic/components/node/node.component.mjs +134 -0
  10. package/18/esm2022/presets/classic/components/socket/socket.component.mjs +35 -0
  11. package/18/esm2022/presets/classic/index.mjs +114 -0
  12. package/18/esm2022/presets/classic/types.mjs +2 -0
  13. package/18/esm2022/presets/context-menu/components/index.mjs +4 -0
  14. package/18/esm2022/presets/context-menu/components/item/item.component.mjs +115 -0
  15. package/18/esm2022/presets/context-menu/components/menu/menu.component.mjs +111 -0
  16. package/18/esm2022/presets/context-menu/components/search/search.component.mjs +24 -0
  17. package/18/esm2022/presets/context-menu/debounce.mjs +17 -0
  18. package/18/esm2022/presets/context-menu/index.mjs +41 -0
  19. package/18/esm2022/presets/context-menu/module.mjs +35 -0
  20. package/18/esm2022/presets/context-menu/types.mjs +2 -0
  21. package/18/esm2022/presets/index.mjs +9 -0
  22. package/18/esm2022/presets/minimap/components/index.mjs +4 -0
  23. package/18/esm2022/presets/minimap/components/mini-node/mini-node.component.mjs +55 -0
  24. package/18/esm2022/presets/minimap/components/mini-viewport/mini-viewport.component.mjs +81 -0
  25. package/18/esm2022/presets/minimap/components/minimap/minimap.component.mjs +110 -0
  26. package/18/esm2022/presets/minimap/index.mjs +45 -0
  27. package/18/esm2022/presets/minimap/module.mjs +35 -0
  28. package/18/esm2022/presets/minimap/types.mjs +2 -0
  29. package/18/esm2022/presets/reroute/components/index.mjs +3 -0
  30. package/18/esm2022/presets/reroute/components/pin/pin.component.mjs +86 -0
  31. package/18/esm2022/presets/reroute/components/pins/pins.component.mjs +58 -0
  32. package/18/esm2022/presets/reroute/index.mjs +43 -0
  33. package/18/esm2022/presets/reroute/module.mjs +30 -0
  34. package/18/esm2022/presets/reroute/types.mjs +2 -0
  35. package/18/esm2022/presets/types.mjs +2 -0
  36. package/18/esm2022/ref.mjs +30 -0
  37. package/18/esm2022/rete-angular-plugin-ng18.mjs +5 -0
  38. package/18/esm2022/shared/drag.mjs +23 -0
  39. package/18/esm2022/types.mjs +2 -0
  40. package/18/fesm2022/rete-angular-plugin-ng18.mjs +1540 -0
  41. package/18/fesm2022/rete-angular-plugin-ng18.mjs.map +1 -0
  42. package/18/index.d.ts +13 -0
  43. package/18/module.d.ts +13 -0
  44. package/18/package.json +24 -0
  45. package/18/presets/classic/components/connection/connection-wrapper.component.d.ts +30 -0
  46. package/18/presets/classic/components/connection/connection.component.d.ts +11 -0
  47. package/18/presets/classic/components/control/control.component.d.ts +14 -0
  48. package/18/presets/classic/components/index.d.ts +5 -0
  49. package/18/presets/classic/components/node/node.component.d.ts +25 -0
  50. package/18/presets/classic/components/socket/socket.component.d.ts +12 -0
  51. package/18/presets/classic/index.d.ts +21 -0
  52. package/18/presets/classic/types.d.ts +49 -0
  53. package/18/presets/context-menu/components/index.d.ts +3 -0
  54. package/18/presets/context-menu/components/item/item.component.d.ts +26 -0
  55. package/18/presets/context-menu/components/menu/menu.component.d.ts +27 -0
  56. package/18/presets/context-menu/components/search/search.component.d.ts +8 -0
  57. package/18/presets/context-menu/debounce.d.ts +5 -0
  58. package/18/presets/context-menu/index.d.ts +9 -0
  59. package/18/presets/context-menu/module.d.ts +10 -0
  60. package/18/presets/context-menu/types.d.ts +12 -0
  61. package/18/presets/index.d.ts +8 -0
  62. package/18/presets/minimap/components/index.d.ts +3 -0
  63. package/18/presets/minimap/components/mini-node/mini-node.component.d.ts +14 -0
  64. package/18/presets/minimap/components/mini-viewport/mini-viewport.component.d.ts +27 -0
  65. package/18/presets/minimap/components/minimap/minimap.component.d.ts +25 -0
  66. package/18/presets/minimap/index.d.ts +9 -0
  67. package/18/presets/minimap/module.d.ts +10 -0
  68. package/18/presets/minimap/types.d.ts +22 -0
  69. package/18/presets/reroute/components/index.d.ts +2 -0
  70. package/18/presets/reroute/components/pin/pin.component.d.ts +30 -0
  71. package/18/presets/reroute/components/pins/pins.component.d.ts +17 -0
  72. package/18/presets/reroute/index.d.ts +13 -0
  73. package/18/presets/reroute/module.d.ts +9 -0
  74. package/18/presets/reroute/types.d.ts +18 -0
  75. package/18/presets/types.d.ts +15 -0
  76. package/18/ref.d.ts +12 -0
  77. package/18/shared/drag.d.ts +10 -0
  78. package/18/types.d.ts +29 -0
  79. package/CHANGELOG.md +7 -0
  80. package/package.json +1 -1
@@ -0,0 +1,134 @@
1
+ import { Component, Input, HostBinding, ChangeDetectorRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "../../../../ref";
5
+ const _c0 = (a0, a1, a2, a3) => ({ type: "socket", side: "output", key: a0, nodeId: a1, payload: a2, seed: a3 });
6
+ const _c1 = a0 => ({ type: "control", payload: a0 });
7
+ const _c2 = (a0, a1, a2, a3) => ({ type: "socket", side: "input", key: a0, nodeId: a1, payload: a2, seed: a3 });
8
+ function NodeComponent_div_2_Template(rf, ctx) { if (rf & 1) {
9
+ i0.ɵɵelementStart(0, "div", 4)(1, "div", 5);
10
+ i0.ɵɵtext(2);
11
+ i0.ɵɵelementEnd();
12
+ i0.ɵɵelement(3, "div", 6);
13
+ i0.ɵɵelementEnd();
14
+ } if (rf & 2) {
15
+ const output_r1 = ctx.$implicit;
16
+ const ctx_r1 = i0.ɵɵnextContext();
17
+ i0.ɵɵattribute("data-testid", "output-" + output_r1.key);
18
+ i0.ɵɵadvance(2);
19
+ i0.ɵɵtextInterpolate(output_r1.value == null ? null : output_r1.value.label);
20
+ i0.ɵɵadvance();
21
+ i0.ɵɵproperty("data", i0.ɵɵpureFunction4(4, _c0, output_r1.key, ctx_r1.data.id, output_r1.value == null ? null : output_r1.value.socket, ctx_r1.seed))("emit", ctx_r1.emit);
22
+ } }
23
+ function NodeComponent_div_4_Template(rf, ctx) { if (rf & 1) {
24
+ i0.ɵɵelement(0, "div", 7);
25
+ } if (rf & 2) {
26
+ const control_r3 = ctx.$implicit;
27
+ const ctx_r1 = i0.ɵɵnextContext();
28
+ i0.ɵɵproperty("data", i0.ɵɵpureFunction1(3, _c1, control_r3.value))("emit", ctx_r1.emit);
29
+ i0.ɵɵattribute("data-testid", "control-" + control_r3.key);
30
+ } }
31
+ function NodeComponent_div_6_div_2_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelementStart(0, "div", 12);
33
+ i0.ɵɵtext(1);
34
+ i0.ɵɵelementEnd();
35
+ } if (rf & 2) {
36
+ const input_r4 = i0.ɵɵnextContext().$implicit;
37
+ i0.ɵɵadvance();
38
+ i0.ɵɵtextInterpolate(input_r4.value == null ? null : input_r4.value.label);
39
+ } }
40
+ function NodeComponent_div_6_Template(rf, ctx) { if (rf & 1) {
41
+ i0.ɵɵelementStart(0, "div", 8);
42
+ i0.ɵɵelement(1, "div", 9);
43
+ i0.ɵɵtemplate(2, NodeComponent_div_6_div_2_Template, 2, 1, "div", 10);
44
+ i0.ɵɵelement(3, "div", 11);
45
+ i0.ɵɵelementEnd();
46
+ } if (rf & 2) {
47
+ const input_r4 = ctx.$implicit;
48
+ const ctx_r1 = i0.ɵɵnextContext();
49
+ i0.ɵɵattribute("data-testid", "input-" + input_r4.key);
50
+ i0.ɵɵadvance();
51
+ i0.ɵɵproperty("data", i0.ɵɵpureFunction4(8, _c2, input_r4.key, ctx_r1.data.id, input_r4.value == null ? null : input_r4.value.socket, ctx_r1.seed))("emit", ctx_r1.emit);
52
+ i0.ɵɵadvance();
53
+ i0.ɵɵproperty("ngIf", !(input_r4.value == null ? null : input_r4.value.control) || !(input_r4.value == null ? null : input_r4.value.showControl));
54
+ i0.ɵɵadvance();
55
+ i0.ɵɵstyleProp("display", (input_r4.value == null ? null : input_r4.value.control) && (input_r4.value == null ? null : input_r4.value.showControl) ? "" : "none");
56
+ i0.ɵɵproperty("data", i0.ɵɵpureFunction1(13, _c1, input_r4.value == null ? null : input_r4.value.control))("emit", ctx_r1.emit);
57
+ } }
58
+ export class NodeComponent {
59
+ cdr;
60
+ data;
61
+ emit;
62
+ rendered;
63
+ seed = 0;
64
+ get width() {
65
+ return this.data.width;
66
+ }
67
+ get height() {
68
+ return this.data.height;
69
+ }
70
+ get selected() {
71
+ return this.data.selected;
72
+ }
73
+ constructor(cdr) {
74
+ this.cdr = cdr;
75
+ this.cdr.detach();
76
+ }
77
+ ngOnChanges() {
78
+ this.cdr.detectChanges();
79
+ requestAnimationFrame(() => this.rendered());
80
+ this.seed++; // force render sockets
81
+ }
82
+ sortByIndex(a, b) {
83
+ const ai = a.value?.index || 0;
84
+ const bi = b.value?.index || 0;
85
+ return ai - bi;
86
+ }
87
+ static ɵfac = function NodeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NodeComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
88
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: NodeComponent, selectors: [["ng-component"]], hostAttrs: ["data-testid", "node"], hostVars: 6, hostBindings: function NodeComponent_HostBindings(rf, ctx) { if (rf & 2) {
89
+ i0.ɵɵstyleProp("width", ctx.width, "px")("height", ctx.height, "px");
90
+ i0.ɵɵclassProp("selected", ctx.selected);
91
+ } }, inputs: { data: "data", emit: "emit", rendered: "rendered" }, features: [i0.ɵɵNgOnChangesFeature], decls: 8, vars: 13, consts: [["data-testid", "title", 1, "title"], ["class", "output", 4, "ngFor", "ngForOf"], ["class", "control", "refComponent", "", 3, "data", "emit", 4, "ngFor", "ngForOf"], ["class", "input", 4, "ngFor", "ngForOf"], [1, "output"], ["data-testid", "output-title", 1, "output-title"], ["refComponent", "", "data-testid", "output-socket", 1, "output-socket", 3, "data", "emit"], ["refComponent", "", 1, "control", 3, "data", "emit"], [1, "input"], ["refComponent", "", "data-testid", "input-socket", 1, "input-socket", 3, "data", "emit"], ["class", "input-title", "data-testid", "input-title", 4, "ngIf"], ["refComponent", "", "data-testid", "input-control", 1, "input-control", 3, "data", "emit"], ["data-testid", "input-title", 1, "input-title"]], template: function NodeComponent_Template(rf, ctx) { if (rf & 1) {
92
+ i0.ɵɵelementStart(0, "div", 0);
93
+ i0.ɵɵtext(1);
94
+ i0.ɵɵelementEnd();
95
+ i0.ɵɵtemplate(2, NodeComponent_div_2_Template, 4, 9, "div", 1);
96
+ i0.ɵɵpipe(3, "keyvalue");
97
+ i0.ɵɵtemplate(4, NodeComponent_div_4_Template, 1, 5, "div", 2);
98
+ i0.ɵɵpipe(5, "keyvalue");
99
+ i0.ɵɵtemplate(6, NodeComponent_div_6_Template, 4, 15, "div", 3);
100
+ i0.ɵɵpipe(7, "keyvalue");
101
+ } if (rf & 2) {
102
+ i0.ɵɵadvance();
103
+ i0.ɵɵtextInterpolate(ctx.data.label);
104
+ i0.ɵɵadvance();
105
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(3, 4, ctx.data.outputs, ctx.sortByIndex));
106
+ i0.ɵɵadvance(2);
107
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(5, 7, ctx.data.controls, ctx.sortByIndex));
108
+ i0.ɵɵadvance(2);
109
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(7, 10, ctx.data.inputs, ctx.sortByIndex));
110
+ } }, dependencies: [i1.NgForOf, i1.NgIf, i2.RefDirective, i1.KeyValuePipe], styles: ["[_nghost-%COMP%]{display:block;background:#6e88ffcc;border:2px solid #4e58bf;border-radius:10px;cursor:pointer;box-sizing:border-box;width:180px;height:auto;padding-bottom:6px;position:relative;-webkit-user-select:none;user-select:none;line-height:initial;font-family:Arial}[_nghost-%COMP%]:hover{background:#8299ffcc}.selected[_nghost-%COMP%]{background:#ffd92c;border-color:#e3c000}[_nghost-%COMP%] .title[_ngcontent-%COMP%]{color:#fff;font-family:sans-serif;font-size:18px;padding:8px}[_nghost-%COMP%] .output[_ngcontent-%COMP%]{text-align:right}[_nghost-%COMP%] .input[_ngcontent-%COMP%]{text-align:left}[_nghost-%COMP%] .input-title[_ngcontent-%COMP%], [_nghost-%COMP%] .output-title[_ngcontent-%COMP%]{vertical-align:middle;color:#fff;display:inline-block;font-family:sans-serif;font-size:14px;margin:6px;line-height:24px}[_nghost-%COMP%] .input-title[hidden][_ngcontent-%COMP%], [_nghost-%COMP%] .output-title[hidden][_ngcontent-%COMP%]{display:none}[_nghost-%COMP%] .output-socket[_ngcontent-%COMP%]{text-align:right;margin-right:-18px;display:inline-block}[_nghost-%COMP%] .input-socket[_ngcontent-%COMP%]{text-align:left;margin-left:-18px;display:inline-block}[_nghost-%COMP%] .input-control[_ngcontent-%COMP%]{z-index:1;width:calc(100% - 36px);vertical-align:middle;display:inline-block}[_nghost-%COMP%] .control[_ngcontent-%COMP%]{padding:6px 18px}"] });
111
+ }
112
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NodeComponent, [{
113
+ type: Component,
114
+ args: [{ host: {
115
+ 'data-testid': 'node'
116
+ }, template: "<div class=\"title\" data-testid=\"title\">{{data.label}}</div>\n<div class=\"output\" *ngFor=\"let output of data.outputs | keyvalue: sortByIndex\" [attr.data-testid]=\"'output-'+output.key\">\n <div class=\"output-title\" data-testid=\"output-title\">{{output.value?.label}}</div>\n <div\n class=\"output-socket\"\n refComponent\n [data]=\"{type: 'socket', side: 'output', key: output.key, nodeId: data.id, payload: output.value?.socket, seed: seed }\"\n [emit]=\"emit\"\n data-testid=\"output-socket\"\n ></div>\n</div>\n<div\n class=\"control\"\n *ngFor=\"let control of data.controls | keyvalue: sortByIndex\"\n refComponent\n [data]=\"{type: 'control', payload: control.value }\"\n [emit]=\"emit\"\n [attr.data-testid]=\"'control-'+control.key\"\n></div>\n<div class=\"input\" *ngFor=\"let input of data.inputs | keyvalue: sortByIndex\" [attr.data-testid]=\"'input-'+input.key\">\n <div\n class=\"input-socket\"\n refComponent\n [data]=\"{type: 'socket', side: 'input', key: input.key, nodeId: data.id, payload: input.value?.socket, seed: seed }\"\n [emit]=\"emit\"\n data-testid=\"input-socket\"\n ></div>\n <div class=\"input-title\" data-testid=\"input-title\" *ngIf=\"!input.value?.control || !input.value?.showControl\">{{input.value?.label}}</div>\n <div\n class=\"input-control\"\n [style.display]=\"input.value?.control && input.value?.showControl ? '' : 'none'\"\n refComponent\n [data]=\"{type: 'control', payload: input.value?.control }\"\n [emit]=\"emit\"\n data-testid=\"input-control\"\n ></div>\n</div>\n", styles: [":host{display:block;background:#6e88ffcc;border:2px solid #4e58bf;border-radius:10px;cursor:pointer;box-sizing:border-box;width:180px;height:auto;padding-bottom:6px;position:relative;-webkit-user-select:none;user-select:none;line-height:initial;font-family:Arial}:host:hover{background:#8299ffcc}:host.selected{background:#ffd92c;border-color:#e3c000}:host .title{color:#fff;font-family:sans-serif;font-size:18px;padding:8px}:host .output{text-align:right}:host .input{text-align:left}:host .input-title,:host .output-title{vertical-align:middle;color:#fff;display:inline-block;font-family:sans-serif;font-size:14px;margin:6px;line-height:24px}:host .input-title[hidden],:host .output-title[hidden]{display:none}:host .output-socket{text-align:right;margin-right:-18px;display:inline-block}:host .input-socket{text-align:left;margin-left:-18px;display:inline-block}:host .input-control{z-index:1;width:calc(100% - 36px);vertical-align:middle;display:inline-block}:host .control{padding:6px 18px}\n"] }]
117
+ }], () => [{ type: i0.ChangeDetectorRef }], { data: [{
118
+ type: Input
119
+ }], emit: [{
120
+ type: Input
121
+ }], rendered: [{
122
+ type: Input
123
+ }], width: [{
124
+ type: HostBinding,
125
+ args: ['style.width.px']
126
+ }], height: [{
127
+ type: HostBinding,
128
+ args: ['style.height.px']
129
+ }], selected: [{
130
+ type: HostBinding,
131
+ args: ['class.selected']
132
+ }] }); })();
133
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NodeComponent, { className: "NodeComponent", filePath: "presets/classic/components/node/node.component.ts", lineNumber: 15 }); })();
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9uZzE4Ly5zcmMvcHJlc2V0cy9jbGFzc2ljL2NvbXBvbmVudHMvbm9kZS9ub2RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL25nMTgvLnNyYy9wcmVzZXRzL2NsYXNzaWMvY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztJQ0V4RixBQURKLDhCQUEwSCxhQUNqRTtJQUFBLFlBQXVCO0lBQUEsaUJBQU07SUFDbEYseUJBTU87SUFDWCxpQkFBTTs7Ozs7SUFSbUQsZUFBdUI7SUFBdkIsNEVBQXVCO0lBSXhFLGNBQXVIO0lBQ3ZILEFBREEsc0pBQXVILHFCQUMxRzs7O0lBSXJCLHlCQU9POzs7O0lBRkgsQUFEQSxtRUFBbUQscUJBQ3RDOzs7O0lBV2IsK0JBQThHO0lBQUEsWUFBc0I7SUFBQSxpQkFBTTs7O0lBQTVCLGNBQXNCO0lBQXRCLDBFQUFzQjs7O0lBUnhJLDhCQUFxSDtJQUNqSCx5QkFNTztJQUNQLHFFQUE4RztJQUM5RywwQkFPTztJQUNYLGlCQUFNOzs7OztJQWJFLGNBQW9IO0lBQ3BILEFBREEsbUpBQW9ILHFCQUN2RztJQUdtQyxjQUF3RDtJQUF4RCxpSkFBd0Q7SUFHeEcsY0FBZ0Y7SUFBaEYsaUtBQWdGO0lBR2hGLEFBREEsMEdBQTBELHFCQUM3Qzs7QURuQnJCLE1BQU0sT0FBTyxhQUFhO0lBbUJKO0lBbEJYLElBQUksQ0FBZ0M7SUFDcEMsSUFBSSxDQUFzQjtJQUMxQixRQUFRLENBQWE7SUFFOUIsSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUVSLElBQW1DLEtBQUs7UUFDdEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQTtJQUN4QixDQUFDO0lBRUQsSUFBb0MsTUFBTTtRQUN4QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQ3pCLENBQUM7SUFFRCxJQUFtQyxRQUFRO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDM0IsQ0FBQztJQUVELFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3hCLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQzVDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQSxDQUFDLHVCQUF1QjtJQUNyQyxDQUFDO0lBRUQsV0FBVyxDQUFtRSxDQUFJLEVBQUUsQ0FBSTtRQUN0RixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUE7UUFDOUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFBO1FBRTlCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQTtJQUNoQixDQUFDO3VHQWxDVSxhQUFhOzZEQUFiLGFBQWE7WUFBYix3Q0FBYSw0QkFBQTtZQUFiLHdDQUFhOztZQ2QxQiw4QkFBdUM7WUFBQSxZQUFjO1lBQUEsaUJBQU07WUFDM0QsOERBQTBIOztZQVUxSCw4REFPQzs7WUFDRCwrREFBcUg7OztZQW5COUUsY0FBYztZQUFkLG9DQUFjO1lBQ2QsY0FBdUM7WUFBdkMsaUZBQXVDO1lBWXRELGVBQXdDO1lBQXhDLGtGQUF3QztZQU0zQixlQUFzQztZQUF0QyxpRkFBc0M7OztpRkRMOUQsYUFBYTtjQVB6QixTQUFTO3VCQUdGO29CQUNKLGFBQWEsRUFBRSxNQUFNO2lCQUN0QjtrREFHUSxJQUFJO2tCQUFaLEtBQUs7WUFDRyxJQUFJO2tCQUFaLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBSTZCLEtBQUs7a0JBQXZDLFdBQVc7bUJBQUMsZ0JBQWdCO1lBSU8sTUFBTTtrQkFBekMsV0FBVzttQkFBQyxpQkFBaUI7WUFJSyxRQUFRO2tCQUExQyxXQUFXO21CQUFDLGdCQUFnQjs7a0ZBZmxCLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBIb3N0QmluZGluZywgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2xhc3NpY1ByZXNldCBhcyBDbGFzc2ljIH0gZnJvbSAncmV0ZSc7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbnR5cGUgTm9kZUV4dHJhRGF0YSA9IHsgd2lkdGg/OiBudW1iZXIsIGhlaWdodD86IG51bWJlciB9XG50eXBlIFNvcnRWYWx1ZTxOIGV4dGVuZHMgQ2xhc3NpYy5Ob2RlPiA9IChOWydjb250cm9scyddIHwgTlsnaW5wdXRzJ10gfCBOWydvdXRwdXRzJ10pW3N0cmluZ11cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS5jb21wb25lbnQuc2FzcyddLFxuICBob3N0OiB7XG4gICAgJ2RhdGEtdGVzdGlkJzogJ25vZGUnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgTm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGRhdGEhOiBDbGFzc2ljLk5vZGUgJiBOb2RlRXh0cmFEYXRhO1xuICBASW5wdXQoKSBlbWl0ITogKGRhdGE6IGFueSkgPT4gdm9pZFxuICBASW5wdXQoKSByZW5kZXJlZCE6ICgpID0+IHZvaWRcblxuICBzZWVkID0gMFxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgucHgnKSBnZXQgd2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS53aWR0aFxuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQucHgnKSBnZXQgaGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuaGVpZ2h0XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNlbGVjdGVkJykgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuc2VsZWN0ZWRcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMuY2RyLmRldGFjaCgpXG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5yZW5kZXJlZCgpKVxuICAgIHRoaXMuc2VlZCsrIC8vIGZvcmNlIHJlbmRlciBzb2NrZXRzXG4gIH1cblxuICBzb3J0QnlJbmRleDxOIGV4dGVuZHMgQ2xhc3NpYy5Ob2RlLCBJIGV4dGVuZHMgS2V5VmFsdWU8c3RyaW5nLCBTb3J0VmFsdWU8Tj4+PihhOiBJLCBiOiBJKSB7XG4gICAgY29uc3QgYWkgPSBhLnZhbHVlPy5pbmRleCB8fCAwXG4gICAgY29uc3QgYmkgPSBiLnZhbHVlPy5pbmRleCB8fCAwXG5cbiAgICByZXR1cm4gYWkgLSBiaVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGl0bGVcIiBkYXRhLXRlc3RpZD1cInRpdGxlXCI+e3tkYXRhLmxhYmVsfX08L2Rpdj5cbjxkaXYgY2xhc3M9XCJvdXRwdXRcIiAqbmdGb3I9XCJsZXQgb3V0cHV0IG9mIGRhdGEub3V0cHV0cyB8IGtleXZhbHVlOiBzb3J0QnlJbmRleFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidvdXRwdXQtJytvdXRwdXQua2V5XCI+XG4gICAgPGRpdiBjbGFzcz1cIm91dHB1dC10aXRsZVwiIGRhdGEtdGVzdGlkPVwib3V0cHV0LXRpdGxlXCI+e3tvdXRwdXQudmFsdWU/LmxhYmVsfX08L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwib3V0cHV0LXNvY2tldFwiXG4gICAgICAgIHJlZkNvbXBvbmVudFxuICAgICAgICBbZGF0YV09XCJ7dHlwZTogJ3NvY2tldCcsIHNpZGU6ICdvdXRwdXQnLCBrZXk6IG91dHB1dC5rZXksIG5vZGVJZDogZGF0YS5pZCwgcGF5bG9hZDogb3V0cHV0LnZhbHVlPy5zb2NrZXQsIHNlZWQ6IHNlZWQgfVwiXG4gICAgICAgIFtlbWl0XT1cImVtaXRcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cIm91dHB1dC1zb2NrZXRcIlxuICAgID48L2Rpdj5cbjwvZGl2PlxuPGRpdlxuICAgIGNsYXNzPVwiY29udHJvbFwiXG4gICAgKm5nRm9yPVwibGV0IGNvbnRyb2wgb2YgZGF0YS5jb250cm9scyB8IGtleXZhbHVlOiBzb3J0QnlJbmRleFwiXG4gICAgcmVmQ29tcG9uZW50XG4gICAgW2RhdGFdPVwie3R5cGU6ICdjb250cm9sJywgcGF5bG9hZDogY29udHJvbC52YWx1ZSB9XCJcbiAgICBbZW1pdF09XCJlbWl0XCJcbiAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInY29udHJvbC0nK2NvbnRyb2wua2V5XCJcbj48L2Rpdj5cbjxkaXYgY2xhc3M9XCJpbnB1dFwiICpuZ0Zvcj1cImxldCBpbnB1dCBvZiBkYXRhLmlucHV0cyB8IGtleXZhbHVlOiBzb3J0QnlJbmRleFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidpbnB1dC0nK2lucHV0LmtleVwiPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJpbnB1dC1zb2NrZXRcIlxuICAgICAgICByZWZDb21wb25lbnRcbiAgICAgICAgW2RhdGFdPVwie3R5cGU6ICdzb2NrZXQnLCBzaWRlOiAnaW5wdXQnLCBrZXk6IGlucHV0LmtleSwgbm9kZUlkOiBkYXRhLmlkLCBwYXlsb2FkOiBpbnB1dC52YWx1ZT8uc29ja2V0LCBzZWVkOiBzZWVkIH1cIlxuICAgICAgICBbZW1pdF09XCJlbWl0XCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dC1zb2NrZXRcIlxuICAgID48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGl0bGVcIiBkYXRhLXRlc3RpZD1cImlucHV0LXRpdGxlXCIgKm5nSWY9XCIhaW5wdXQudmFsdWU/LmNvbnRyb2wgfHwgIWlucHV0LnZhbHVlPy5zaG93Q29udHJvbFwiPnt7aW5wdXQudmFsdWU/LmxhYmVsfX08L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaW5wdXQtY29udHJvbFwiXG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImlucHV0LnZhbHVlPy5jb250cm9sICYmIGlucHV0LnZhbHVlPy5zaG93Q29udHJvbCA/ICcnIDogJ25vbmUnXCJcbiAgICAgICAgcmVmQ29tcG9uZW50XG4gICAgICAgIFtkYXRhXT1cInt0eXBlOiAnY29udHJvbCcsIHBheWxvYWQ6IGlucHV0LnZhbHVlPy5jb250cm9sIH1cIlxuICAgICAgICBbZW1pdF09XCJlbWl0XCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dC1jb250cm9sXCJcbiAgICA+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,35 @@
1
+ import { Component, Input, HostBinding, ChangeDetectorRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class SocketComponent {
4
+ cdr;
5
+ data;
6
+ rendered;
7
+ get title() {
8
+ return this.data.name;
9
+ }
10
+ constructor(cdr) {
11
+ this.cdr = cdr;
12
+ this.cdr.detach();
13
+ }
14
+ ngOnChanges() {
15
+ this.cdr.detectChanges();
16
+ requestAnimationFrame(() => this.rendered());
17
+ }
18
+ static ɵfac = function SocketComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SocketComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
19
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SocketComponent, selectors: [["ng-component"]], hostVars: 1, hostBindings: function SocketComponent_HostBindings(rf, ctx) { if (rf & 2) {
20
+ i0.ɵɵhostProperty("title", ctx.title);
21
+ } }, inputs: { data: "data", rendered: "rendered" }, features: [i0.ɵɵNgOnChangesFeature], decls: 0, vars: 0, template: function SocketComponent_Template(rf, ctx) { }, styles: ["[_nghost-%COMP%]{display:inline-block;cursor:pointer;border:1px solid white;border-radius:12px;width:24px;height:24px;margin:6px;vertical-align:middle;background:#96b38a;z-index:2;box-sizing:border-box}[_nghost-%COMP%]:hover{border-width:4px}.multiple[_nghost-%COMP%]{border-color:#ff0}.output[_nghost-%COMP%]{margin-right:-12px}.input[_nghost-%COMP%]{margin-left:-12px}"] });
22
+ }
23
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SocketComponent, [{
24
+ type: Component,
25
+ args: [{ template: ``, styles: [":host{display:inline-block;cursor:pointer;border:1px solid white;border-radius:12px;width:24px;height:24px;margin:6px;vertical-align:middle;background:#96b38a;z-index:2;box-sizing:border-box}:host:hover{border-width:4px}:host.multiple{border-color:#ff0}:host.output{margin-right:-12px}:host.input{margin-left:-12px}\n"] }]
26
+ }], () => [{ type: i0.ChangeDetectorRef }], { data: [{
27
+ type: Input
28
+ }], rendered: [{
29
+ type: Input
30
+ }], title: [{
31
+ type: HostBinding,
32
+ args: ['title']
33
+ }] }); })();
34
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SocketComponent, { className: "SocketComponent", filePath: "presets/classic/components/socket/socket.component.ts", lineNumber: 7 }); })();
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL25nMTgvLnNyYy9wcmVzZXRzL2NsYXNzaWMvY29tcG9uZW50cy9zb2NrZXQvc29ja2V0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQW9CLGlCQUFpQixFQUFhLE1BQU0sZUFBZSxDQUFDOztBQU05RyxNQUFNLE9BQU8sZUFBZTtJQVNOO0lBUlgsSUFBSSxDQUFPO0lBQ1gsUUFBUSxDQUFPO0lBR3hCLElBQTBCLEtBQUs7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtJQUN2QixDQUFDO0lBRUQsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUNuQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDeEIscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDOUMsQ0FBQzt5R0FoQlUsZUFBZTs2REFBZixlQUFlO1lBQWYscUNBQWU7OztpRkFBZixlQUFlO2NBSjNCLFNBQVM7MkJBQ0UsRUFBRTtrREFJSCxJQUFJO2tCQUFaLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBR29CLEtBQUs7a0JBQTlCLFdBQVc7bUJBQUMsT0FBTzs7a0ZBTFQsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEhvc3RCaW5kaW5nLCBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3RvclJlZiwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYGAsXG4gIHN0eWxlVXJsczogWycuL3NvY2tldC5jb21wb25lbnQuc2FzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNvY2tldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGRhdGEhOiBhbnk7XG4gIEBJbnB1dCgpIHJlbmRlcmVkITogYW55O1xuXG5cbiAgQEhvc3RCaW5kaW5nKCd0aXRsZScpIGdldCB0aXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLm5hbWVcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikgIHtcbiAgICB0aGlzLmNkci5kZXRhY2goKVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMucmVuZGVyZWQoKSlcbiAgfVxufVxuIl19
@@ -0,0 +1,114 @@
1
+ import { ClassicPreset, getUID } from 'rete';
2
+ import { classicConnectionPath, loopConnectionPath, getDOMSocketPosition } from 'rete-render-utils';
3
+ import { NodeComponent } from './components/node/node.component';
4
+ import { SocketComponent } from './components/socket/socket.component';
5
+ import { ControlComponent } from './components/control/control.component';
6
+ import { ConnectionComponent } from './components/connection/connection.component';
7
+ import { ConnectionWrapperComponent } from './components/connection/connection-wrapper.component';
8
+ /**
9
+ * Classic preset for rendering nodes, connections, controls and sockets.
10
+ */
11
+ export function setup(props) {
12
+ const positionWatcher = typeof props?.socketPositionWatcher === 'undefined'
13
+ ? getDOMSocketPosition() // fix Type instantiation is excessively deep and possibly infinite.
14
+ : props?.socketPositionWatcher;
15
+ const { node, connection, socket, control } = props?.customize || {};
16
+ return {
17
+ attach(plugin) {
18
+ positionWatcher.attach(plugin);
19
+ },
20
+ update(context) {
21
+ const data = context.data.payload;
22
+ if (context.data.type === 'connection') {
23
+ const { start, end } = context.data;
24
+ return {
25
+ data,
26
+ ...(start ? { start } : {}),
27
+ ...(end ? { end } : {}),
28
+ };
29
+ }
30
+ return { data };
31
+ },
32
+ mount(context, plugin) {
33
+ const parent = plugin.parentScope();
34
+ const emit = parent.emit.bind(parent);
35
+ const rendered = () => {
36
+ emit({ type: 'rendered', data: context.data });
37
+ };
38
+ if (context.data.type === 'node') {
39
+ const component = node ? node(context.data) : NodeComponent;
40
+ return {
41
+ key: `node-${context.data.payload.id}`,
42
+ component,
43
+ props: {
44
+ data: context.data.payload,
45
+ emit,
46
+ rendered
47
+ }
48
+ };
49
+ }
50
+ if (context.data.type === 'connection') {
51
+ const component = connection ? connection(context.data) : ConnectionComponent;
52
+ const id = context.data.payload.id;
53
+ const { sourceOutput, targetInput, source, target } = context.data.payload;
54
+ const { start, end, payload } = context.data;
55
+ return {
56
+ key: `connection-${id}`,
57
+ component: ConnectionWrapperComponent,
58
+ props: {
59
+ connectionComponent: component,
60
+ data: payload,
61
+ start: start || ((change) => positionWatcher.listen(source, 'output', sourceOutput, change)),
62
+ end: end || ((change) => positionWatcher.listen(target, 'input', targetInput, change)),
63
+ path: async (start, end) => {
64
+ const response = await plugin.emit({ type: 'connectionpath', data: { payload, points: [start, end] } });
65
+ if (!response)
66
+ return '';
67
+ const { path, points } = response.data;
68
+ const curvature = 0.3;
69
+ if (!path && points.length !== 2)
70
+ throw new Error('cannot render connection with a custom number of points');
71
+ if (!path)
72
+ return payload.isLoop
73
+ ? loopConnectionPath(points, curvature, 120)
74
+ : classicConnectionPath(points, curvature);
75
+ return path;
76
+ },
77
+ rendered
78
+ }
79
+ };
80
+ }
81
+ if (context.data.type === 'socket') {
82
+ const component = socket ? socket(context.data) : SocketComponent;
83
+ return {
84
+ key: `socket-${getUID()}`,
85
+ component,
86
+ props: {
87
+ data: context.data.payload,
88
+ rendered
89
+ }
90
+ };
91
+ }
92
+ if (context.data.type === 'control') {
93
+ const component = control
94
+ ? control(context.data)
95
+ : (context.data.payload instanceof ClassicPreset.InputControl
96
+ ? ControlComponent
97
+ : null);
98
+ if (component) {
99
+ return {
100
+ key: `control-${context.data.payload.id}`,
101
+ component,
102
+ props: {
103
+ data: context.data.payload,
104
+ rendered
105
+ }
106
+ };
107
+ }
108
+ return;
109
+ }
110
+ return;
111
+ }
112
+ };
113
+ }
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9uZzE4Ly5zcmMvcHJlc2V0cy9jbGFzc2ljL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFTLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBeUIsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUzSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBaUJsRzs7R0FFRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQ25CLEtBQWdDO0lBRWhDLE1BQU0sZUFBZSxHQUFHLE9BQU8sS0FBSyxFQUFFLHFCQUFxQixLQUFLLFdBQVc7UUFDekUsQ0FBQyxDQUFDLG9CQUFvQixFQUFnQixDQUFDLG9FQUFvRTtRQUMzRyxDQUFDLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFBO0lBQ2hDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQTtJQUdwRSxPQUFPO1FBQ0wsTUFBTSxDQUFDLE1BQU07WUFDWCxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQXNDLENBQUMsQ0FBQTtRQUNoRSxDQUFDO1FBQ0QsTUFBTSxDQUFDLE9BQU87WUFDWixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtZQUVq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WUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLFNBQVMsR0FBRyxPQUFPO29CQUN2QixDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ3ZCLENBQUMsQ0FBQyxDQUNBLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxZQUFZLGFBQWEsQ0FBQyxZQUFZO3dCQUN4RCxDQUFDLENBQUMsZ0JBQWdCO3dCQUNsQixDQUFDLENBQUMsSUFBSSxDQUNULENBQUE7Z0JBRUgsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDZCxPQUFPO3dCQUNMLEdBQUcsRUFBRSxXQUFXLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRTt3QkFDekMsU0FBUzt3QkFDVCxLQUFLLEVBQUU7NEJBQ0wsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTzs0QkFDMUIsUUFBUTt5QkFDVDtxQkFDRixDQUFBO2dCQUNILENBQUM7Z0JBQ0QsT0FBTTtZQUNSLENBQUM7WUFDRCxPQUFNO1FBQ1IsQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2xhc3NpY1ByZXNldCwgZ2V0VUlELCBTY29wZSB9IGZyb20gJ3JldGUnO1xuaW1wb3J0IHsgY2xhc3NpY0Nvbm5lY3Rpb25QYXRoLCBsb29wQ29ubmVjdGlvblBhdGgsIFNvY2tldFBvc2l0aW9uV2F0Y2hlciwgZ2V0RE9NU29ja2V0UG9zaXRpb24gfSBmcm9tICdyZXRlLXJlbmRlci11dGlscyc7XG5pbXBvcnQgeyBBbmd1bGFyQXJlYTJELCBDbGFzc2ljU2NoZW1lLCBFeHRyYWN0UGF5bG9hZCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgTm9kZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IFNvY2tldENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zb2NrZXQvc29ja2V0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbnRyb2wvY29udHJvbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb25uZWN0aW9uL2Nvbm5lY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IENvbm5lY3Rpb25XcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Nvbm5lY3Rpb24vY29ubmVjdGlvbi13cmFwcGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IFJlbmRlclByZXNldCB9IGZyb20gJy4uL3R5cGVzJ1xuXG50eXBlIEFuZ3VsYXJDb21wb25lbnQgPSBUeXBlPGFueT5cbnR5cGUgQ3VzdG9taXphdGlvblByb3BzPFNjaGVtZXMgZXh0ZW5kcyBDbGFzc2ljU2NoZW1lPiA9IHtcbiAgbm9kZT86IChkYXRhOiBFeHRyYWN0UGF5bG9hZDxTY2hlbWVzLCAnbm9kZSc+KSA9PiBBbmd1bGFyQ29tcG9uZW50IHwgbnVsbFxuICBjb25uZWN0aW9uPzogKGRhdGE6IEV4dHJhY3RQYXlsb2FkPFNjaGVtZXMsICdjb25uZWN0aW9uJz4pID0+IEFuZ3VsYXJDb21wb25lbnQgfCBudWxsXG4gIHNvY2tldD86IChkYXRhOiBFeHRyYWN0UGF5bG9hZDxTY2hlbWVzLCAnc29ja2V0Jz4pID0+IEFuZ3VsYXJDb21wb25lbnQgfCBudWxsXG4gIGNvbnRyb2w/OiAoZGF0YTogRXh0cmFjdFBheWxvYWQ8U2NoZW1lcywgJ2NvbnRyb2wnPikgPT4gQW5ndWxhckNvbXBvbmVudCB8IG51bGxcbn1cblxudHlwZSBDbGFzc2ljUHJvcHM8U2NoZW1lcyBleHRlbmRzIENsYXNzaWNTY2hlbWUsIEs+ID0ge1xuICBzb2NrZXRQb3NpdGlvbldhdGNoZXI/OiBTb2NrZXRQb3NpdGlvbldhdGNoZXI8U2NvcGU8bmV2ZXIsIFtLXT4+XG4gIGN1c3RvbWl6ZT86IEN1c3RvbWl6YXRpb25Qcm9wczxTY2hlbWVzPlxufVxuXG4vKipcbiAqIENsYXNzaWMgcHJlc2V0IGZvciByZW5kZXJpbmcgbm9kZXMsIGNvbm5lY3Rpb25zLCBjb250cm9scyBhbmQgc29ja2V0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHVwPFNjaGVtZXMgZXh0ZW5kcyBDbGFzc2ljU2NoZW1lLCBLIGV4dGVuZHMgQW5ndWxhckFyZWEyRDxTY2hlbWVzPj4oXG4gIHByb3BzPzogQ2xhc3NpY1Byb3BzPFNjaGVtZXMsIEs+XG4pOiBSZW5kZXJQcmVzZXQ8U2NoZW1lcywgSz4ge1xuICBjb25zdCBwb3NpdGlvbldhdGNoZXIgPSB0eXBlb2YgcHJvcHM/LnNvY2tldFBvc2l0aW9uV2F0Y2hlciA9PT0gJ3VuZGVmaW5lZCdcbiAgICA/IGdldERPTVNvY2tldFBvc2l0aW9uPFNjaGVtZXMsIGFueT4oKSAvLyBmaXggVHlwZSBpbnN0YW50aWF0aW9uIGlzIGV4Y2Vzc2l2ZWx5IGRlZXAgYW5kIHBvc3NpYmx5IGluZmluaXRlLlxuICAgIDogcHJvcHM/LnNvY2tldFBvc2l0aW9uV2F0Y2hlclxuICBjb25zdCB7IG5vZGUsIGNvbm5lY3Rpb24sIHNvY2tldCwgY29udHJvbCB9ID0gcHJvcHM/LmN1c3RvbWl6ZSB8fCB7fVxuXG5cbiAgcmV0dXJuIHtcbiAgICBhdHRhY2gocGx1Z2luKSB7XG4gICAgICBwb3NpdGlvbldhdGNoZXIuYXR0YWNoKHBsdWdpbiBhcyB1bmtub3duIGFzIFNjb3BlPG5ldmVyLCBbS10+KVxuICAgIH0sXG4gICAgdXBkYXRlKGNvbnRleHQpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBjb250ZXh0LmRhdGEucGF5bG9hZFxuXG4gICAgICBpZiAoY29udGV4dC5kYXRhLnR5cGUgPT09ICdjb25uZWN0aW9uJykge1xuICAgICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGNvbnRleHQuZGF0YVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICAuLi4oc3RhcnQgPyB7IHN0YXJ0IH0gOiB7fSksXG4gICAgICAgICAgLi4uKGVuZCA/IHsgZW5kIH0gOiB7fSksXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRhdGEgfVxuICAgIH0sXG4gICAgbW91bnQoY29udGV4dCwgcGx1Z2luKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBwbHVnaW4ucGFyZW50U2NvcGUoKVxuICAgICAgY29uc3QgZW1pdCA9IHBhcmVudC5lbWl0LmJpbmQocGFyZW50KVxuICAgICAgY29uc3QgcmVuZGVyZWQgPSAoKSA9PiB7XG4gICAgICAgIGVtaXQoeyB0eXBlOiAncmVuZGVyZWQnLCBkYXRhOiBjb250ZXh0LmRhdGEgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRleHQuZGF0YS50eXBlID09PSAnbm9kZScpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gbm9kZSA/IG5vZGUoY29udGV4dC5kYXRhKSA6IE5vZGVDb21wb25lbnRcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtleTogYG5vZGUtJHtjb250ZXh0LmRhdGEucGF5bG9hZC5pZH1gLFxuICAgICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgZGF0YTogY29udGV4dC5kYXRhLnBheWxvYWQsXG4gICAgICAgICAgICBlbWl0LFxuICAgICAgICAgICAgcmVuZGVyZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb250ZXh0LmRhdGEudHlwZSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbm5lY3Rpb24gPyBjb25uZWN0aW9uKGNvbnRleHQuZGF0YSkgOiBDb25uZWN0aW9uQ29tcG9uZW50XG4gICAgICAgIGNvbnN0IGlkID0gY29udGV4dC5kYXRhLnBheWxvYWQuaWRcbiAgICAgICAgY29uc3QgeyBzb3VyY2VPdXRwdXQsIHRhcmdldElucHV0LCBzb3VyY2UsIHRhcmdldCB9ID0gY29udGV4dC5kYXRhLnBheWxvYWRcbiAgICAgICAgY29uc3QgeyBzdGFydCwgZW5kLCBwYXlsb2FkIH0gPSBjb250ZXh0LmRhdGFcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtleTogYGNvbm5lY3Rpb24tJHtpZH1gLFxuICAgICAgICAgIGNvbXBvbmVudDogQ29ubmVjdGlvbldyYXBwZXJDb21wb25lbnQsXG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb25Db21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICAgICAgICAgIGRhdGE6IHBheWxvYWQsXG4gICAgICAgICAgICBzdGFydDogc3RhcnQgfHwgKChjaGFuZ2U6IGFueSkgPT4gcG9zaXRpb25XYXRjaGVyLmxpc3Rlbihzb3VyY2UsICdvdXRwdXQnLCBzb3VyY2VPdXRwdXQsIGNoYW5nZSkpLFxuICAgICAgICAgICAgZW5kOiBlbmQgfHwgKChjaGFuZ2U6IGFueSkgPT4gcG9zaXRpb25XYXRjaGVyLmxpc3Rlbih0YXJnZXQsICdpbnB1dCcsIHRhcmdldElucHV0LCBjaGFuZ2UpKSxcbiAgICAgICAgICAgIHBhdGg6IGFzeW5jIChzdGFydCwgZW5kKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcGx1Z2luLmVtaXQoeyB0eXBlOiAnY29ubmVjdGlvbnBhdGgnLCBkYXRhOiB7IHBheWxvYWQsIHBvaW50czogW3N0YXJ0LCBlbmRdIH0gfSlcblxuICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlKSByZXR1cm4gJydcblxuICAgICAgICAgICAgICBjb25zdCB7IHBhdGgsIHBvaW50cyB9ID0gcmVzcG9uc2UuZGF0YVxuICAgICAgICAgICAgICBjb25zdCBjdXJ2YXR1cmUgPSAwLjNcblxuICAgICAgICAgICAgICBpZiAoIXBhdGggJiYgcG9pbnRzLmxlbmd0aCAhPT0gMikgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgcmVuZGVyIGNvbm5lY3Rpb24gd2l0aCBhIGN1c3RvbSBudW1iZXIgb2YgcG9pbnRzJylcbiAgICAgICAgICAgICAgaWYgKCFwYXRoKSByZXR1cm4gcGF5bG9hZC5pc0xvb3BcbiAgICAgICAgICAgICAgICA/IGxvb3BDb25uZWN0aW9uUGF0aChwb2ludHMgYXMgW1Bvc2l0aW9uLCBQb3NpdGlvbl0sIGN1cnZhdHVyZSwgMTIwKVxuICAgICAgICAgICAgICAgIDogY2xhc3NpY0Nvbm5lY3Rpb25QYXRoKHBvaW50cyBhcyBbUG9zaXRpb24sIFBvc2l0aW9uXSwgY3VydmF0dXJlKVxuXG4gICAgICAgICAgICAgIHJldHVybiBwYXRoXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVuZGVyZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb250ZXh0LmRhdGEudHlwZSA9PT0gJ3NvY2tldCcpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gc29ja2V0ID8gc29ja2V0KGNvbnRleHQuZGF0YSkgOiBTb2NrZXRDb21wb25lbnRcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtleTogYHNvY2tldC0ke2dldFVJRCgpfWAsXG4gICAgICAgICAgY29tcG9uZW50LFxuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBkYXRhOiBjb250ZXh0LmRhdGEucGF5bG9hZCxcbiAgICAgICAgICAgIHJlbmRlcmVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY29udGV4dC5kYXRhLnR5cGUgPT09ICdjb250cm9sJykge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250cm9sXG4gICAgICAgICAgPyBjb250cm9sKGNvbnRleHQuZGF0YSlcbiAgICAgICAgICA6IChcbiAgICAgICAgICAgIGNvbnRleHQuZGF0YS5wYXlsb2FkIGluc3RhbmNlb2YgQ2xhc3NpY1ByZXNldC5JbnB1dENvbnRyb2xcbiAgICAgICAgICAgICAgPyBDb250cm9sQ29tcG9uZW50XG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIClcblxuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleTogYGNvbnRyb2wtJHtjb250ZXh0LmRhdGEucGF5bG9hZC5pZH1gLFxuICAgICAgICAgICAgY29tcG9uZW50LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgZGF0YTogY29udGV4dC5kYXRhLnBheWxvYWQsXG4gICAgICAgICAgICAgIHJlbmRlcmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9uZzE4Ly5zcmMvcHJlc2V0cy9jbGFzc2ljL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb2RlSWQsIENsYXNzaWNQcmVzZXQgYXMgQ2xhc3NpYywgR2V0U2NoZW1lcyB9IGZyb20gJ3JldGUnXG5pbXBvcnQgeyBQb3NpdGlvbiwgUmVuZGVyU2lnbmFsIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbnR5cGUgVW5pb25Ub0ludGVyc2VjdGlvbjxVPiA9IChVIGV4dGVuZHMgYW55ID8gKGs6IFUpID0+IHZvaWQgOiBuZXZlcikgZXh0ZW5kcyAoKGs6IGluZmVyIEkpID0+IHZvaWQpXG4gID8gSVxuICA6IG5ldmVyXG50eXBlIEdldENvbnRyb2xzPFxuICBUIGV4dGVuZHMgQ2xhc3NpY1NjaGVtZVsnTm9kZSddLFxuICBJbnRlcnNlY3Rpb24gPSBVbmlvblRvSW50ZXJzZWN0aW9uPFRbJ2NvbnRyb2xzJ10+XG4+ID0gSW50ZXJzZWN0aW9uW2tleW9mIEludGVyc2VjdGlvbl0gZXh0ZW5kcyBDbGFzc2ljLkNvbnRyb2wgPyBJbnRlcnNlY3Rpb25ba2V5b2YgSW50ZXJzZWN0aW9uXSA6IENsYXNzaWMuQ29udHJvbFxudHlwZSBHZXRTb2NrZXRzPFxuICBUIGV4dGVuZHMgQ2xhc3NpY1NjaGVtZVsnTm9kZSddLFxuICBJbnRlcnNlY3Rpb24gPSBVbmlvblRvSW50ZXJzZWN0aW9uPFRbJ2lucHV0cyddIHwgVFsnb3V0cHV0cyddPixcbiAgVW5pb24gPSBFeGNsdWRlPEludGVyc2VjdGlvbltrZXlvZiBJbnRlcnNlY3Rpb25dLCB1bmRlZmluZWQ+XG4+ID0gVW5pb24gZXh0ZW5kcyB7IHNvY2tldDogYW55IH0gPyBVbmlvblsnc29ja2V0J10gOiBDbGFzc2ljLlNvY2tldFxuXG5cbmV4cG9ydCB0eXBlIFNpZGUgPSAnaW5wdXQnIHwgJ291dHB1dCdcbmV4cG9ydCB0eXBlIEFuZ3VsYXJSZW5kZXJEYXRhPFQgZXh0ZW5kcyBDbGFzc2ljU2NoZW1lPiA9XG4gIHwge1xuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgIHR5cGU6ICdzb2NrZXQnLFxuICAgIHBheWxvYWQ6IEdldFNvY2tldHM8VFsnTm9kZSddPlxuICAgIG5vZGVJZDogTm9kZUlkXG4gICAgc2lkZTogU2lkZVxuICAgIGtleTogc3RyaW5nXG4gIH1cbiAgfCB7XG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgdHlwZTogJ2NvbnRyb2wnLFxuICAgIHBheWxvYWQ6IEdldENvbnRyb2xzPFRbJ05vZGUnXT5cbiAgfVxuXG5leHBvcnQgdHlwZSBFeHRyYWN0UGF5bG9hZDxUIGV4dGVuZHMgQ2xhc3NpY1NjaGVtZSwgSyBleHRlbmRzIHN0cmluZz4gPSBFeHRyYWN0PEFuZ3VsYXJBcmVhMkQ8VD4sIHsgdHlwZTogJ3JlbmRlcicsIGRhdGE6IHsgdHlwZTogSyB9IH0+WydkYXRhJ11cbmV4cG9ydCB0eXBlIEFuZ3VsYXJBcmVhMkQ8VCBleHRlbmRzIENsYXNzaWNTY2hlbWU+ID1cbiAgfCBSZW5kZXJTaWduYWw8J25vZGUnLCB7IHBheWxvYWQ6IFRbJ05vZGUnXSB9PlxuICB8IFJlbmRlclNpZ25hbDwnY29ubmVjdGlvbicsIHsgcGF5bG9hZDogVFsnQ29ubmVjdGlvbiddLCBzdGFydD86IFBvc2l0aW9uLCBlbmQ/OiBQb3NpdGlvbiB9PlxuICB8IFJlbmRlclNpZ25hbDwnc29ja2V0Jywge1xuICAgIHBheWxvYWQ6IEdldFNvY2tldHM8VFsnTm9kZSddPlxuICAgIG5vZGVJZDogTm9kZUlkXG4gICAgc2lkZTogU2lkZVxuICAgIGtleTogc3RyaW5nXG4gIH0+XG4gIHwgUmVuZGVyU2lnbmFsPCdjb250cm9sJywge1xuICAgIHBheWxvYWQ6IEdldENvbnRyb2xzPFRbJ05vZGUnXT5cbiAgfT5cbiAgfCB7IHR5cGU6ICd1bm1vdW50JywgZGF0YTogeyBlbGVtZW50OiBIVE1MRWxlbWVudCB9IH1cblxuZXhwb3J0IHR5cGUgQ2xhc3NpY1NjaGVtZSA9IEdldFNjaGVtZXM8Q2xhc3NpYy5Ob2RlLCBDbGFzc2ljLkNvbm5lY3Rpb248Q2xhc3NpYy5Ob2RlLCBDbGFzc2ljLk5vZGU+ICYgeyBpc0xvb3A/OiBib29sZWFuIH0+XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export * from './item/item.component';
2
+ export * from './menu/menu.component';
3
+ export * from './search/search.component';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9uZzE4Ly5zcmMvcHJlc2V0cy9jb250ZXh0LW1lbnUvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QixDQUFBO0FBQ3JDLGNBQWMsdUJBQXVCLENBQUE7QUFDckMsY0FBYywyQkFBMkIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaXRlbS9pdGVtLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbWVudS9tZW51LmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vc2VhcmNoL3NlYXJjaC5jb21wb25lbnQnXG4iXX0=
@@ -0,0 +1,115 @@
1
+ import { ChangeDetectorRef, Component, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';
2
+ import { debounce } from '../../debounce';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ const _c0 = ["*"];
6
+ function ContextMenuItemComponent_div_1_context_menu_item_1_Template(rf, ctx) { if (rf & 1) {
7
+ const _r1 = i0.ɵɵgetCurrentView();
8
+ i0.ɵɵelementStart(0, "context-menu-item", 3);
9
+ i0.ɵɵlistener("select", function ContextMenuItemComponent_div_1_context_menu_item_1_Template_context_menu_item_select_0_listener() { const item_r2 = i0.ɵɵrestoreView(_r1).$implicit; return i0.ɵɵresetView(item_r2.handler()); })("hide", function ContextMenuItemComponent_div_1_context_menu_item_1_Template_context_menu_item_hide_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.hide.emit()); });
10
+ i0.ɵɵtext(1);
11
+ i0.ɵɵelementEnd();
12
+ } if (rf & 2) {
13
+ const item_r2 = ctx.$implicit;
14
+ const ctx_r2 = i0.ɵɵnextContext(2);
15
+ i0.ɵɵproperty("delay", ctx_r2.delay);
16
+ i0.ɵɵadvance();
17
+ i0.ɵɵtextInterpolate1(" ", item_r2.label, " ");
18
+ } }
19
+ function ContextMenuItemComponent_div_1_Template(rf, ctx) { if (rf & 1) {
20
+ i0.ɵɵelementStart(0, "div", 1);
21
+ i0.ɵɵtemplate(1, ContextMenuItemComponent_div_1_context_menu_item_1_Template, 2, 2, "context-menu-item", 2);
22
+ i0.ɵɵelementEnd();
23
+ } if (rf & 2) {
24
+ const ctx_r2 = i0.ɵɵnextContext();
25
+ i0.ɵɵadvance();
26
+ i0.ɵɵproperty("ngForOf", ctx_r2.subitems);
27
+ } }
28
+ export class ContextMenuItemComponent {
29
+ cdr;
30
+ subitems;
31
+ delay;
32
+ select = new EventEmitter();
33
+ hide = new EventEmitter();
34
+ get block() { return true; }
35
+ get hasSubitems() { return this.subitems; }
36
+ click(event) {
37
+ event.stopPropagation();
38
+ this.select.emit();
39
+ this.hide.emit();
40
+ }
41
+ pointerdown(event) {
42
+ event.stopPropagation();
43
+ }
44
+ wheel(event) {
45
+ event.stopPropagation();
46
+ }
47
+ hideSubitems = debounce(() => {
48
+ this.visibleSubitems = false;
49
+ this.cdr.detectChanges();
50
+ });
51
+ visibleSubitems = false;
52
+ pointerover() {
53
+ this.hideSubitems.cancel();
54
+ this.visibleSubitems = true;
55
+ this.cdr.detectChanges();
56
+ }
57
+ pointerleave() {
58
+ this.hideSubitems.call(this.delay);
59
+ this.cdr.detectChanges();
60
+ }
61
+ constructor(cdr) {
62
+ this.cdr = cdr;
63
+ this.cdr.detach();
64
+ }
65
+ static ɵfac = function ContextMenuItemComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ContextMenuItemComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
66
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ContextMenuItemComponent, selectors: [["context-menu-item"]], hostAttrs: ["data-testid", "context-menu-item"], hostVars: 4, hostBindings: function ContextMenuItemComponent_HostBindings(rf, ctx) { if (rf & 1) {
67
+ i0.ɵɵlistener("click", function ContextMenuItemComponent_click_HostBindingHandler($event) { return ctx.click($event); })("pointerdown", function ContextMenuItemComponent_pointerdown_HostBindingHandler($event) { return ctx.pointerdown($event); })("wheel", function ContextMenuItemComponent_wheel_HostBindingHandler($event) { return ctx.wheel($event); })("pointerover", function ContextMenuItemComponent_pointerover_HostBindingHandler() { return ctx.pointerover(); })("pointerleave", function ContextMenuItemComponent_pointerleave_HostBindingHandler() { return ctx.pointerleave(); });
68
+ } if (rf & 2) {
69
+ i0.ɵɵclassProp("block", ctx.block)("hasSubitems", ctx.hasSubitems);
70
+ } }, inputs: { subitems: "subitems", delay: "delay" }, outputs: { select: "select", hide: "hide" }, ngContentSelectors: _c0, decls: 2, vars: 1, consts: [["class", "subitems", 4, "ngIf"], [1, "subitems"], [3, "delay", "select", "hide", 4, "ngFor", "ngForOf"], [3, "select", "hide", "delay"]], template: function ContextMenuItemComponent_Template(rf, ctx) { if (rf & 1) {
71
+ i0.ɵɵprojectionDef();
72
+ i0.ɵɵprojection(0);
73
+ i0.ɵɵtemplate(1, ContextMenuItemComponent_div_1_Template, 2, 1, "div", 0);
74
+ } if (rf & 2) {
75
+ i0.ɵɵadvance();
76
+ i0.ɵɵproperty("ngIf", ctx.subitems && ctx.visibleSubitems);
77
+ } }, dependencies: [i1.NgForOf, i1.NgIf, ContextMenuItemComponent], styles: ["@charset \"UTF-8\";.hasSubitems[_nghost-%COMP%]:after{content:\"\\25ba\";position:absolute;opacity:.6;right:5px;top:5px;font-family:initial}.subitems[_ngcontent-%COMP%]{position:absolute;top:0;left:100%;width:120px}", ".block[_ngcontent-%COMP%]{display:block;color:#fff;padding:4px;border-bottom:1px solid rgba(69,103,255,.8);background-color:#6e88ffcc;cursor:pointer;width:100%;position:relative}.block[_ngcontent-%COMP%]:first-child{border-top-left-radius:5px;border-top-right-radius:5px}.block[_ngcontent-%COMP%]:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}.block[_ngcontent-%COMP%]:hover{background-color:#8299ffcc}"] });
78
+ }
79
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextMenuItemComponent, [{
80
+ type: Component,
81
+ args: [{ selector: 'context-menu-item', host: {
82
+ 'data-testid': 'context-menu-item'
83
+ }, template: "<ng-content></ng-content>\n<div class=\"subitems\" *ngIf=\"subitems && visibleSubitems\">\n <context-menu-item *ngFor=\"let item of subitems\" [delay]=\"delay\" (select)=\"item.handler()\" (hide)=\"hide.emit()\">\n {{ item.label }}\n </context-menu-item>\n</div>\n", styles: ["@charset \"UTF-8\";:host(.hasSubitems):after{content:\"\\25ba\";position:absolute;opacity:.6;right:5px;top:5px;font-family:initial}.subitems{position:absolute;top:0;left:100%;width:120px}\n", ".block{display:block;color:#fff;padding:4px;border-bottom:1px solid rgba(69,103,255,.8);background-color:#6e88ffcc;cursor:pointer;width:100%;position:relative}.block:first-child{border-top-left-radius:5px;border-top-right-radius:5px}.block:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}.block:hover{background-color:#8299ffcc}\n"] }]
84
+ }], () => [{ type: i0.ChangeDetectorRef }], { subitems: [{
85
+ type: Input
86
+ }], delay: [{
87
+ type: Input
88
+ }], select: [{
89
+ type: Output
90
+ }], hide: [{
91
+ type: Output
92
+ }], block: [{
93
+ type: HostBinding,
94
+ args: ['class.block']
95
+ }], hasSubitems: [{
96
+ type: HostBinding,
97
+ args: ['class.hasSubitems']
98
+ }], click: [{
99
+ type: HostListener,
100
+ args: ['click', ['$event']]
101
+ }], pointerdown: [{
102
+ type: HostListener,
103
+ args: ['pointerdown', ['$event']]
104
+ }], wheel: [{
105
+ type: HostListener,
106
+ args: ['wheel', ['$event']]
107
+ }], pointerover: [{
108
+ type: HostListener,
109
+ args: ['pointerover']
110
+ }], pointerleave: [{
111
+ type: HostListener,
112
+ args: ['pointerleave']
113
+ }] }); })();
114
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ContextMenuItemComponent, { className: "ContextMenuItemComponent", filePath: "presets/context-menu/components/item/item.component.ts", lineNumber: 13 }); })();
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9uZzE4Ly5zcmMvcHJlc2V0cy9jb250ZXh0LW1lbnUvY29tcG9uZW50cy9pdGVtL2l0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbmcxOC8uc3JjL3ByZXNldHMvY29udGV4dC1tZW51L2NvbXBvbmVudHMvaXRlbS9pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVySCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztJQ0F4Qyw0Q0FBZ0g7SUFBckIsQUFBMUIsNE1BQVUsaUJBQWMsS0FBQyxxTUFBUyxrQkFBVyxLQUFDO0lBQzdHLFlBQ0Y7SUFBQSxpQkFBb0I7Ozs7SUFGNkIsb0NBQWU7SUFDOUQsY0FDRjtJQURFLDhDQUNGOzs7SUFIRiw4QkFBMEQ7SUFDeEQsMkdBQWdIO0lBR2xILGlCQUFNOzs7SUFIZ0MsY0FBVztJQUFYLHlDQUFXOztBRFVqRCxNQUFNLE9BQU8sd0JBQXdCO0lBcUNmO0lBcENYLFFBQVEsQ0FBUztJQUNqQixLQUFLLENBQVM7SUFDYixNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUNsQyxJQUFJLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUUxQyxJQUFnQyxLQUFLLEtBQUssT0FBTyxJQUFJLENBQUEsQ0FBQyxDQUFDO0lBQ3ZELElBQXNDLFdBQVcsS0FBSyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUEsQ0FBQyxDQUFDO0lBRXpDLEtBQUssQ0FBQyxLQUFpQjtRQUN4RCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUE7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ2xCLENBQUM7SUFDd0MsV0FBVyxDQUFDLEtBQW1CO1FBQ3RFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQTtJQUN6QixDQUFDO0lBQ2tDLEtBQUssQ0FBQyxLQUFpQjtRQUN4RCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUE7SUFDekIsQ0FBQztJQUVELFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFBO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDMUIsQ0FBQyxDQUFDLENBQUE7SUFDRixlQUFlLEdBQUcsS0FBSyxDQUFBO0lBRU0sV0FBVztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFBO1FBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFBO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUM2QixZQUFZO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFFRCxZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ25CLENBQUM7a0hBdkNVLHdCQUF3Qjs2REFBeEIsd0JBQXdCO1lBQXhCLG1HQUFBLGlCQUFhLElBQVcsa0dBQXhCLHVCQUFtQixJQUFLLHNGQUF4QixpQkFBYSxJQUFXLDRGQUF4QixpQkFBYSxJQUFXLDhGQUF4QixrQkFBYyxJQUFVOztZQUF4QixrQ0FBd0IsZ0NBQUE7OztZQ1pyQyxrQkFBeUI7WUFDekIseUVBQTBEOztZQUFuQyxjQUFpQztZQUFqQywwREFBaUM7aUREVzNDLHdCQUF3Qjs7aUZBQXhCLHdCQUF3QjtjQVJwQyxTQUFTOzJCQUNFLG1CQUFtQixRQUd2QjtvQkFDSixhQUFhLEVBQUUsbUJBQW1CO2lCQUNuQztrREFHUSxRQUFRO2tCQUFoQixLQUFLO1lBQ0csS0FBSztrQkFBYixLQUFLO1lBQ0ksTUFBTTtrQkFBZixNQUFNO1lBQ0csSUFBSTtrQkFBYixNQUFNO1lBRXlCLEtBQUs7a0JBQXBDLFdBQVc7bUJBQUMsYUFBYTtZQUNZLFdBQVc7a0JBQWhELFdBQVc7bUJBQUMsbUJBQW1CO1lBRUcsS0FBSztrQkFBdkMsWUFBWTttQkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFLUSxXQUFXO2tCQUFuRCxZQUFZO21CQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQztZQUdKLEtBQUs7a0JBQXZDLFlBQVk7bUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO1lBVUosV0FBVztrQkFBdkMsWUFBWTttQkFBQyxhQUFhO1lBS0csWUFBWTtrQkFBekMsWUFBWTttQkFBQyxjQUFjOztrRkFoQ2pCLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSAnLi4vLi4vZGVib3VuY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjb250ZXh0LW1lbnUtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaXRlbS5jb21wb25lbnQuc2FzcycsICcuLi8uLi9ibG9jay5zYXNzJ10sXG4gIGhvc3Q6IHtcbiAgICAnZGF0YS10ZXN0aWQnOiAnY29udGV4dC1tZW51LWl0ZW0nXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQ29udGV4dE1lbnVJdGVtQ29tcG9uZW50IHtcbiAgQElucHV0KCkgc3ViaXRlbXM/OiBJdGVtW11cbiAgQElucHV0KCkgZGVsYXkhOiBudW1iZXJcbiAgQE91dHB1dCgpIHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGhpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5ibG9jaycpIGdldCBibG9jaygpIHsgcmV0dXJuIHRydWUgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhhc1N1Yml0ZW1zJykgZ2V0IGhhc1N1Yml0ZW1zKCkgeyByZXR1cm4gdGhpcy5zdWJpdGVtcyB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKSBjbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgdGhpcy5zZWxlY3QuZW1pdCgpXG4gICAgdGhpcy5oaWRlLmVtaXQoKVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgWyckZXZlbnQnXSkgcG9pbnRlcmRvd24oZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignd2hlZWwnLCBbJyRldmVudCddKSB3aGVlbChldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH1cblxuICBoaWRlU3ViaXRlbXMgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgdGhpcy52aXNpYmxlU3ViaXRlbXMgPSBmYWxzZVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICB9KVxuICB2aXNpYmxlU3ViaXRlbXMgPSBmYWxzZVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3BvaW50ZXJvdmVyJykgcG9pbnRlcm92ZXIoKSB7XG4gICAgdGhpcy5oaWRlU3ViaXRlbXMuY2FuY2VsKClcbiAgICB0aGlzLnZpc2libGVTdWJpdGVtcyA9IHRydWVcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuICBASG9zdExpc3RlbmVyKCdwb2ludGVybGVhdmUnKSBwb2ludGVybGVhdmUoKSB7XG4gICAgdGhpcy5oaWRlU3ViaXRlbXMuY2FsbCh0aGlzLmRlbGF5KVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5jZHIuZGV0YWNoKClcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPGRpdiBjbGFzcz1cInN1Yml0ZW1zXCIgKm5nSWY9XCJzdWJpdGVtcyAmJiB2aXNpYmxlU3ViaXRlbXNcIj5cbiAgPGNvbnRleHQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN1Yml0ZW1zXCIgW2RlbGF5XT1cImRlbGF5XCIgKHNlbGVjdCk9XCJpdGVtLmhhbmRsZXIoKVwiIChoaWRlKT1cImhpZGUuZW1pdCgpXCI+XG4gICAge3sgaXRlbS5sYWJlbCB9fVxuICA8L2NvbnRleHQtbWVudS1pdGVtPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,111 @@
1
+ import { Component, Input, ChangeDetectorRef, HostListener, HostBinding } from '@angular/core';
2
+ import { debounce } from '../../debounce';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "../search/search.component";
6
+ import * as i3 from "../item/item.component";
7
+ function ContextMenuComponent_div_0_Template(rf, ctx) { if (rf & 1) {
8
+ const _r1 = i0.ɵɵgetCurrentView();
9
+ i0.ɵɵelementStart(0, "div", 2)(1, "context-menu-search", 3);
10
+ i0.ɵɵlistener("update", function ContextMenuComponent_div_0_Template_context_menu_search_update_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setFilter($event)); });
11
+ i0.ɵɵelementEnd()();
12
+ } if (rf & 2) {
13
+ const ctx_r1 = i0.ɵɵnextContext();
14
+ i0.ɵɵadvance();
15
+ i0.ɵɵproperty("value", ctx_r1.filter);
16
+ } }
17
+ function ContextMenuComponent_context_menu_item_1_Template(rf, ctx) { if (rf & 1) {
18
+ const _r3 = i0.ɵɵgetCurrentView();
19
+ i0.ɵɵelementStart(0, "context-menu-item", 4);
20
+ i0.ɵɵlistener("select", function ContextMenuComponent_context_menu_item_1_Template_context_menu_item_select_0_listener() { const item_r4 = i0.ɵɵrestoreView(_r3).$implicit; return i0.ɵɵresetView(item_r4.handler()); })("hide", function ContextMenuComponent_context_menu_item_1_Template_context_menu_item_hide_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onHide()); });
21
+ i0.ɵɵtext(1);
22
+ i0.ɵɵelementEnd();
23
+ } if (rf & 2) {
24
+ const item_r4 = ctx.$implicit;
25
+ const ctx_r1 = i0.ɵɵnextContext();
26
+ i0.ɵɵproperty("delay", ctx_r1.delay)("subitems", item_r4.subitems);
27
+ i0.ɵɵadvance();
28
+ i0.ɵɵtextInterpolate1(" ", item_r4.label, "\n");
29
+ } }
30
+ export class ContextMenuComponent {
31
+ cdr;
32
+ items;
33
+ delay;
34
+ searchBar;
35
+ onHide;
36
+ rendered;
37
+ filter = '';
38
+ hide = debounce(() => {
39
+ this.onHide();
40
+ this.cdr.detectChanges();
41
+ });
42
+ customAttribute = '';
43
+ pointerover() {
44
+ this.hide.cancel();
45
+ this.cdr.detectChanges();
46
+ }
47
+ pointerleave() {
48
+ this.hide.call(this.delay);
49
+ this.cdr.detectChanges();
50
+ }
51
+ constructor(cdr) {
52
+ this.cdr = cdr;
53
+ this.cdr.detach();
54
+ }
55
+ ngOnChanges() {
56
+ this.cdr.detectChanges();
57
+ requestAnimationFrame(() => this.rendered());
58
+ }
59
+ setFilter(value) {
60
+ this.filter = value;
61
+ this.cdr.detectChanges();
62
+ }
63
+ getItems() {
64
+ const filterRegexp = new RegExp(this.filter, 'i');
65
+ const filteredList = this.items.filter(item => (item.label.match(filterRegexp)));
66
+ return filteredList;
67
+ }
68
+ ngOnDestroy() {
69
+ if (this.hide)
70
+ this.hide.cancel();
71
+ }
72
+ static ɵfac = function ContextMenuComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ContextMenuComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
73
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ContextMenuComponent, selectors: [["ng-component"]], hostAttrs: ["data-testid", "context-menu"], hostVars: 1, hostBindings: function ContextMenuComponent_HostBindings(rf, ctx) { if (rf & 1) {
74
+ i0.ɵɵlistener("mouseover", function ContextMenuComponent_mouseover_HostBindingHandler() { return ctx.pointerover(); })("mouseleave", function ContextMenuComponent_mouseleave_HostBindingHandler() { return ctx.pointerleave(); });
75
+ } if (rf & 2) {
76
+ i0.ɵɵattribute("rete-context-menu", ctx.customAttribute);
77
+ } }, inputs: { items: "items", delay: "delay", searchBar: "searchBar", onHide: "onHide", rendered: "rendered" }, features: [i0.ɵɵNgOnChangesFeature], decls: 2, vars: 2, consts: [["class", "block", 4, "ngIf"], [3, "delay", "subitems", "select", "hide", 4, "ngFor", "ngForOf"], [1, "block"], [3, "update", "value"], [3, "select", "hide", "delay", "subitems"]], template: function ContextMenuComponent_Template(rf, ctx) { if (rf & 1) {
78
+ i0.ɵɵtemplate(0, ContextMenuComponent_div_0_Template, 2, 1, "div", 0)(1, ContextMenuComponent_context_menu_item_1_Template, 2, 3, "context-menu-item", 1);
79
+ } if (rf & 2) {
80
+ i0.ɵɵproperty("ngIf", ctx.searchBar);
81
+ i0.ɵɵadvance();
82
+ i0.ɵɵproperty("ngForOf", ctx.getItems());
83
+ } }, dependencies: [i1.NgForOf, i1.NgIf, i2.ContextMenuSearchComponent, i3.ContextMenuItemComponent], styles: ["[_nghost-%COMP%]{display:block;padding:10px;width:120px;margin-top:-20px;margin-left:-60px}", ".block[_ngcontent-%COMP%]{display:block;color:#fff;padding:4px;border-bottom:1px solid rgba(69,103,255,.8);background-color:#6e88ffcc;cursor:pointer;width:100%;position:relative}.block[_ngcontent-%COMP%]:first-child{border-top-left-radius:5px;border-top-right-radius:5px}.block[_ngcontent-%COMP%]:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}.block[_ngcontent-%COMP%]:hover{background-color:#8299ffcc}"] });
84
+ }
85
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextMenuComponent, [{
86
+ type: Component,
87
+ args: [{ host: {
88
+ 'data-testid': 'context-menu'
89
+ }, template: "<div class=\"block\" *ngIf=\"searchBar\">\n <context-menu-search [value]=\"filter\" (update)=\"setFilter($event)\"></context-menu-search>\n</div>\n\n<context-menu-item *ngFor=\"let item of getItems()\" [delay]=\"delay\" (select)=\"item.handler()\" [subitems]=\"item.subitems\"\n (hide)=\"onHide()\">\n {{ item.label }}\n</context-menu-item>\n", styles: [":host{display:block;padding:10px;width:120px;margin-top:-20px;margin-left:-60px}\n", ".block{display:block;color:#fff;padding:4px;border-bottom:1px solid rgba(69,103,255,.8);background-color:#6e88ffcc;cursor:pointer;width:100%;position:relative}.block:first-child{border-top-left-radius:5px;border-top-right-radius:5px}.block:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}.block:hover{background-color:#8299ffcc}\n"] }]
90
+ }], () => [{ type: i0.ChangeDetectorRef }], { items: [{
91
+ type: Input
92
+ }], delay: [{
93
+ type: Input
94
+ }], searchBar: [{
95
+ type: Input
96
+ }], onHide: [{
97
+ type: Input
98
+ }], rendered: [{
99
+ type: Input
100
+ }], customAttribute: [{
101
+ type: HostBinding,
102
+ args: ['attr.rete-context-menu']
103
+ }], pointerover: [{
104
+ type: HostListener,
105
+ args: ['mouseover']
106
+ }], pointerleave: [{
107
+ type: HostListener,
108
+ args: ['mouseleave']
109
+ }] }); })();
110
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ContextMenuComponent, { className: "ContextMenuComponent", filePath: "presets/context-menu/components/menu/menu.component.ts", lineNumber: 12 }); })();
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9uZzE4Ly5zcmMvcHJlc2V0cy9jb250ZXh0LW1lbnUvY29tcG9uZW50cy9tZW51L21lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbmcxOC8uc3JjL3ByZXNldHMvY29udGV4dC1tZW51L2NvbXBvbmVudHMvbWVudS9tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUF3QixZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztJQ0R4QyxBQURGLDhCQUFxQyw2QkFDZ0M7SUFBN0IscU1BQVUsd0JBQWlCLEtBQUM7SUFDcEUsQUFEcUUsaUJBQXNCLEVBQ3JGOzs7SUFEaUIsY0FBZ0I7SUFBaEIscUNBQWdCOzs7O0lBR3ZDLDRDQUNvQjtJQUFsQixBQURpRSxrTUFBVSxpQkFBYyxLQUFDLDBMQUNsRixlQUFRLEtBQUM7SUFDakIsWUFDRjtJQUFBLGlCQUFvQjs7OztJQUh5RSxBQUExQyxvQ0FBZSw4QkFBcUQ7SUFFckgsY0FDRjtJQURFLCtDQUNGOztBRElBLE1BQU0sT0FBTyxvQkFBb0I7SUF5Qlg7SUF4QlgsS0FBSyxDQUFTO0lBQ2QsS0FBSyxDQUFTO0lBQ2QsU0FBUyxDQUFVO0lBQ25CLE1BQU0sQ0FBYTtJQUNuQixRQUFRLENBQWE7SUFFdkIsTUFBTSxHQUFXLEVBQUUsQ0FBQTtJQUUxQixJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQzFCLENBQUMsQ0FBQyxDQUFBO0lBRXFDLGVBQWUsR0FBRyxFQUFFLENBQUE7SUFFaEMsV0FBVztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFBO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUMyQixZQUFZO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFFRCxZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ25CLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUN4QixxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDakQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUM3QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FDL0IsQ0FBQyxDQUFBO1FBRUYsT0FBTyxZQUFZLENBQUE7SUFDckIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUNuQyxDQUFDOzhHQWxEVSxvQkFBb0I7NkRBQXBCLG9CQUFvQjtZQUFwQixpR0FBQSxpQkFBYSxJQUFPLHNGQUFwQixrQkFBYyxJQUFNOzs7O1lDUGpDLEFBSkEscUVBQXFDLG9GQUtqQjs7WUFMQSxvQ0FBZTtZQUlDLGNBQWE7WUFBYix3Q0FBYTs7O2lGRE9wQyxvQkFBb0I7Y0FQaEMsU0FBUzt1QkFHRjtvQkFDSixhQUFhLEVBQUUsY0FBYztpQkFDOUI7a0RBR1EsS0FBSztrQkFBYixLQUFLO1lBQ0csS0FBSztrQkFBYixLQUFLO1lBQ0csU0FBUztrQkFBakIsS0FBSztZQUNHLE1BQU07a0JBQWQsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFTaUMsZUFBZTtrQkFBckQsV0FBVzttQkFBQyx3QkFBd0I7WUFFVixXQUFXO2tCQUFyQyxZQUFZO21CQUFDLFdBQVc7WUFJRyxZQUFZO2tCQUF2QyxZQUFZO21CQUFDLFlBQVk7O2tGQXBCZixvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEhvc3RMaXN0ZW5lciwgSG9zdEJpbmRpbmcgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEl0ZW0gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJy4uLy4uL2RlYm91bmNlJztcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWVudS5jb21wb25lbnQuc2FzcycsICcuLi8uLi9ibG9jay5zYXNzJ10sXG4gIGhvc3Q6IHtcbiAgICAnZGF0YS10ZXN0aWQnOiAnY29udGV4dC1tZW51J1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHRNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBpdGVtcyE6IEl0ZW1bXVxuICBASW5wdXQoKSBkZWxheSE6IG51bWJlclxuICBASW5wdXQoKSBzZWFyY2hCYXI/OiBib29sZWFuXG4gIEBJbnB1dCgpIG9uSGlkZSE6ICgpID0+IHZvaWRcbiAgQElucHV0KCkgcmVuZGVyZWQhOiAoKSA9PiB2b2lkXG5cbiAgcHVibGljIGZpbHRlcjogc3RyaW5nID0gJydcblxuICBoaWRlID0gZGVib3VuY2UoKCkgPT4ge1xuICAgIHRoaXMub25IaWRlKClcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgfSlcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIucmV0ZS1jb250ZXh0LW1lbnUnKSBjdXN0b21BdHRyaWJ1dGUgPSAnJ1xuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlb3ZlcicpIHBvaW50ZXJvdmVyKCkge1xuICAgIHRoaXMuaGlkZS5jYW5jZWwoKVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKSBwb2ludGVybGVhdmUoKSB7XG4gICAgdGhpcy5oaWRlLmNhbGwodGhpcy5kZWxheSlcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMuY2RyLmRldGFjaCgpXG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5yZW5kZXJlZCgpKVxuICB9XG5cbiAgc2V0RmlsdGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZpbHRlciA9IHZhbHVlXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXG4gIH1cblxuICBnZXRJdGVtcygpIHtcbiAgICBjb25zdCBmaWx0ZXJSZWdleHAgPSBuZXcgUmVnRXhwKHRoaXMuZmlsdGVyLCAnaScpXG4gICAgY29uc3QgZmlsdGVyZWRMaXN0ID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiAoXG4gICAgICBpdGVtLmxhYmVsLm1hdGNoKGZpbHRlclJlZ2V4cClcbiAgICApKVxuXG4gICAgcmV0dXJuIGZpbHRlcmVkTGlzdFxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGlkZSkgdGhpcy5oaWRlLmNhbmNlbCgpXG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJibG9ja1wiICpuZ0lmPVwic2VhcmNoQmFyXCI+XG4gIDxjb250ZXh0LW1lbnUtc2VhcmNoIFt2YWx1ZV09XCJmaWx0ZXJcIiAodXBkYXRlKT1cInNldEZpbHRlcigkZXZlbnQpXCI+PC9jb250ZXh0LW1lbnUtc2VhcmNoPlxuPC9kaXY+XG5cbjxjb250ZXh0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRJdGVtcygpXCIgW2RlbGF5XT1cImRlbGF5XCIgKHNlbGVjdCk9XCJpdGVtLmhhbmRsZXIoKVwiIFtzdWJpdGVtc109XCJpdGVtLnN1Yml0ZW1zXCJcbiAgKGhpZGUpPVwib25IaWRlKClcIj5cbiAge3sgaXRlbS5sYWJlbCB9fVxuPC9jb250ZXh0LW1lbnUtaXRlbT5cbiJdfQ==