@operato/flow 9.0.0 → 9.0.2

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/CHANGELOG.md +17 -0
  2. package/dist/src/api/tasks.d.ts +7 -0
  3. package/dist/src/api/tasks.js +2517 -0
  4. package/dist/src/api/tasks.js.map +1 -0
  5. package/dist/src/base/anchor-instance.d.ts +30 -0
  6. package/dist/src/base/anchor-instance.js +82 -0
  7. package/dist/src/base/anchor-instance.js.map +1 -0
  8. package/dist/src/base/flow-edge-instance.d.ts +31 -0
  9. package/dist/src/base/flow-edge-instance.js +170 -0
  10. package/dist/src/base/flow-edge-instance.js.map +1 -0
  11. package/dist/src/base/flow-node-abstract.d.ts +49 -0
  12. package/dist/src/base/flow-node-abstract.js +199 -0
  13. package/dist/src/base/flow-node-abstract.js.map +1 -0
  14. package/dist/src/components/flow-debug-panel.d.ts +22 -0
  15. package/dist/src/components/flow-debug-panel.js +156 -0
  16. package/dist/src/components/flow-debug-panel.js.map +1 -0
  17. package/dist/src/components/flow-executor.d.ts +29 -0
  18. package/dist/src/components/flow-executor.js +88 -0
  19. package/dist/src/components/flow-executor.js.map +1 -0
  20. package/dist/src/components/flow-options-builder.d.ts +18 -0
  21. package/dist/src/components/flow-options-builder.js +145 -0
  22. package/dist/src/components/flow-options-builder.js.map +1 -0
  23. package/dist/src/components/flow-properties-panel.d.ts +22 -0
  24. package/dist/src/components/flow-properties-panel.js +232 -0
  25. package/dist/src/components/flow-properties-panel.js.map +1 -0
  26. package/dist/src/components/flow-side-panel.d.ts +9 -0
  27. package/dist/src/components/flow-side-panel.js +83 -0
  28. package/dist/src/components/flow-side-panel.js.map +1 -0
  29. package/dist/src/components/flow-sidebar.d.ts +7 -0
  30. package/dist/src/components/flow-sidebar.js +84 -0
  31. package/dist/src/components/flow-sidebar.js.map +1 -0
  32. package/dist/src/components/flow-toolbar.d.ts +15 -0
  33. package/dist/src/components/flow-toolbar.js +161 -0
  34. package/dist/src/components/flow-toolbar.js.map +1 -0
  35. package/dist/src/components/property-editor.d.ts +35 -0
  36. package/dist/src/components/property-editor.js +78 -0
  37. package/dist/src/components/property-editor.js.map +1 -0
  38. package/dist/src/components/property-panel/data-mapper-popup.d.ts +11 -0
  39. package/dist/src/components/property-panel/data-mapper-popup.js +86 -0
  40. package/dist/src/components/property-panel/data-mapper-popup.js.map +1 -0
  41. package/dist/src/components/property-panel/task-selection-popup.d.ts +10 -0
  42. package/dist/src/components/property-panel/task-selection-popup.js +106 -0
  43. package/dist/src/components/property-panel/task-selection-popup.js.map +1 -0
  44. package/dist/src/context/flow-context.d.ts +21 -0
  45. package/dist/src/context/flow-context.js +3 -0
  46. package/dist/src/context/flow-context.js.map +1 -0
  47. package/dist/src/context/flow-debug-context.d.ts +16 -0
  48. package/dist/src/context/flow-debug-context.js +3 -0
  49. package/dist/src/context/flow-debug-context.js.map +1 -0
  50. package/dist/src/context/flow-edit-context.d.ts +11 -0
  51. package/dist/src/context/flow-edit-context.js +3 -0
  52. package/dist/src/context/flow-edit-context.js.map +1 -0
  53. package/dist/src/handlers/dnd-event-handler.d.ts +9 -0
  54. package/dist/src/handlers/dnd-event-handler.js +41 -0
  55. package/dist/src/handlers/dnd-event-handler.js.map +1 -0
  56. package/dist/src/handlers/flow-event-handler.d.ts +20 -0
  57. package/dist/src/handlers/flow-event-handler.js +75 -0
  58. package/dist/src/handlers/flow-event-handler.js.map +1 -0
  59. package/dist/src/handlers/keydown-event-handler.d.ts +6 -0
  60. package/dist/src/handlers/keydown-event-handler.js +24 -0
  61. package/dist/src/handlers/keydown-event-handler.js.map +1 -0
  62. package/dist/src/handlers/pointer-event-handler.d.ts +9 -0
  63. package/dist/src/handlers/pointer-event-handler.js +118 -0
  64. package/dist/src/handlers/pointer-event-handler.js.map +1 -0
  65. package/dist/src/index.d.ts +2 -0
  66. package/dist/src/index.js +3 -0
  67. package/dist/src/index.js.map +1 -0
  68. package/dist/src/nodes/decision.d.ts +16 -0
  69. package/dist/src/nodes/decision.js +43 -0
  70. package/dist/src/nodes/decision.js.map +1 -0
  71. package/dist/src/nodes/end-event.d.ts +14 -0
  72. package/dist/src/nodes/end-event.js +47 -0
  73. package/dist/src/nodes/end-event.js.map +1 -0
  74. package/dist/src/nodes/index.d.ts +5 -0
  75. package/dist/src/nodes/index.js +19 -0
  76. package/dist/src/nodes/index.js.map +1 -0
  77. package/dist/src/nodes/intermediate-event.d.ts +14 -0
  78. package/dist/src/nodes/intermediate-event.js +52 -0
  79. package/dist/src/nodes/intermediate-event.js.map +1 -0
  80. package/dist/src/nodes/iterator.d.ts +12 -0
  81. package/dist/src/nodes/iterator.js +29 -0
  82. package/dist/src/nodes/iterator.js.map +1 -0
  83. package/dist/src/nodes/select.d.ts +17 -0
  84. package/dist/src/nodes/select.js +71 -0
  85. package/dist/src/nodes/select.js.map +1 -0
  86. package/dist/src/nodes/start-event.d.ts +15 -0
  87. package/dist/src/nodes/start-event.js +46 -0
  88. package/dist/src/nodes/start-event.js.map +1 -0
  89. package/dist/src/nodes/subflow.d.ts +12 -0
  90. package/dist/src/nodes/subflow.js +30 -0
  91. package/dist/src/nodes/subflow.js.map +1 -0
  92. package/dist/src/nodes/task.d.ts +17 -0
  93. package/dist/src/nodes/task.js +60 -0
  94. package/dist/src/nodes/task.js.map +1 -0
  95. package/dist/src/ox-flow-editor.d.ts +94 -0
  96. package/dist/src/ox-flow-editor.js +426 -0
  97. package/dist/src/ox-flow-editor.js.map +1 -0
  98. package/dist/src/ox-flow-monitor.d.ts +24 -0
  99. package/dist/src/ox-flow-monitor.js +117 -0
  100. package/dist/src/ox-flow-monitor.js.map +1 -0
  101. package/dist/src/property-editors/ox-input-anchors.d.ts +12 -0
  102. package/dist/src/property-editors/ox-input-anchors.js +163 -0
  103. package/dist/src/property-editors/ox-input-anchors.js.map +1 -0
  104. package/dist/src/property-editors/ox-property-editor-anchors.d.ts +6 -0
  105. package/dist/src/property-editors/ox-property-editor-anchors.js +25 -0
  106. package/dist/src/property-editors/ox-property-editor-anchors.js.map +1 -0
  107. package/dist/src/types.d.ts +97 -0
  108. package/dist/src/types.js +2 -0
  109. package/dist/src/types.js.map +1 -0
  110. package/dist/src/utils/generate-mapping-scheme.d.ts +6 -0
  111. package/dist/src/utils/generate-mapping-scheme.js +50 -0
  112. package/dist/src/utils/generate-mapping-scheme.js.map +1 -0
  113. package/package.json +8 -8
@@ -0,0 +1,161 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement, html, css } from 'lit';
3
+ import { customElement, state } from 'lit/decorators.js';
4
+ import { consume } from '@lit/context';
5
+ import { flowContext } from '../context/flow-context.js';
6
+ import { flowEditContext } from '../context/flow-edit-context.js';
7
+ import { flowDebugContext } from '../context/flow-debug-context.js';
8
+ let FlowToolbar = class FlowToolbar extends LitElement {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.currentMode = 'edit';
12
+ }
13
+ render() {
14
+ var _a, _b, _c, _d, _e, _f, _g, _h;
15
+ const mode = this.currentMode;
16
+ const debugMode = mode === 'debug';
17
+ return html `
18
+ <div class="mode">
19
+ <md-icon @click=${this.toggleMode}>${mode == 'edit' ? 'edit' : 'bug_report'}</md-icon>
20
+ </div>
21
+
22
+ <div class="subtools">
23
+ ${debugMode
24
+ ? html `
25
+ <!-- 기본 실행 컨트롤 -->
26
+ <md-icon @click=${(_a = this.flowDebugContext) === null || _a === void 0 ? void 0 : _a.executeFlow}>play_arrow</md-icon>
27
+ <md-icon @click=${(_b = this.flowDebugContext) === null || _b === void 0 ? void 0 : _b.pauseFlow}>pause</md-icon>
28
+ <md-icon @click=${(_c = this.flowDebugContext) === null || _c === void 0 ? void 0 : _c.stopFlow}>stop</md-icon>
29
+
30
+ <!-- 디버깅 스텝 실행 기능 -->
31
+ <div class="debug-tools">
32
+ <md-icon @click=${(_d = this.flowDebugContext) === null || _d === void 0 ? void 0 : _d.stepOver} title="Step Over">arrow_forward</md-icon>
33
+ <md-icon @click=${(_e = this.flowDebugContext) === null || _e === void 0 ? void 0 : _e.stepInto} title="Step Into">call_split</md-icon>
34
+ <md-icon @click=${(_f = this.flowDebugContext) === null || _f === void 0 ? void 0 : _f.stepOut} title="Step Out">exit_to_app</md-icon>
35
+ <md-icon @click=${(_g = this.flowDebugContext) === null || _g === void 0 ? void 0 : _g.continueExecution} title="Continue">fast_forward</md-icon>
36
+ </div>
37
+
38
+ <!-- 브레이크포인트 관리 -->
39
+ <div class="breakpoint-toggle" @click=${this.toggleBreakpoint}>
40
+ <span>Toggle Breakpoint</span>
41
+ <md-icon>${this.hasBreakpoint ? 'radio_button_checked' : 'radio_button_unchecked'}</md-icon>
42
+ </div>
43
+ `
44
+ : html ` <md-icon @click=${(_h = this.flowEditContext) === null || _h === void 0 ? void 0 : _h.runLayout}>graph_4</md-icon> `}
45
+ </div>
46
+ `;
47
+ }
48
+ /** 모드 전환 */
49
+ toggleMode() {
50
+ var _a;
51
+ this.currentMode = this.currentMode === 'edit' ? 'debug' : 'edit';
52
+ (_a = this.flowContext) === null || _a === void 0 ? void 0 : _a.setMode(this.currentMode);
53
+ }
54
+ /** 브레이크포인트 설정 / 해제 */
55
+ toggleBreakpoint() {
56
+ var _a;
57
+ if (!this.flowDebugContext || !((_a = this.flowContext) === null || _a === void 0 ? void 0 : _a.selected))
58
+ return;
59
+ const nodeId = this.flowContext.selected.id;
60
+ if (this.flowDebugContext.breakpoints.has(nodeId)) {
61
+ this.flowDebugContext.breakpoints.delete(nodeId);
62
+ }
63
+ else {
64
+ this.flowDebugContext.breakpoints.add(nodeId);
65
+ }
66
+ this.requestUpdate();
67
+ }
68
+ /** 현재 선택된 노드가 브레이크포인트인지 여부 */
69
+ get hasBreakpoint() {
70
+ var _a, _b;
71
+ return ((_a = this.flowContext) === null || _a === void 0 ? void 0 : _a.selected) ? (_b = this.flowDebugContext) === null || _b === void 0 ? void 0 : _b.breakpoints.has(this.flowContext.selected.id) : false;
72
+ }
73
+ };
74
+ FlowToolbar.styles = css `
75
+ :host {
76
+ display: flex;
77
+ flex-direction: column;
78
+ gap: 10px;
79
+ }
80
+
81
+ div.mode {
82
+ background: #f9f9f9;
83
+ border-radius: 8px;
84
+ padding: 8px;
85
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
86
+ }
87
+
88
+ div.subtools {
89
+ display: flex;
90
+ flex-direction: column;
91
+ gap: 8px;
92
+ background: #ffffff;
93
+ border-radius: 8px;
94
+ padding: 8px;
95
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
96
+ }
97
+
98
+ md-icon {
99
+ cursor: pointer;
100
+ transition: transform 0.2s;
101
+ color: #001d84;
102
+ font-variation-settings:
103
+ 'FILL' 1,
104
+ 'wght' 400,
105
+ 'GRAD' 0,
106
+ 'opsz' 48;
107
+ }
108
+
109
+ md-icon:hover {
110
+ transform: scale(1.1);
111
+ }
112
+
113
+ .subtools md-icon {
114
+ color: #007bff;
115
+ }
116
+
117
+ .debug-tools {
118
+ display: flex;
119
+ flex-direction: column;
120
+ gap: 6px;
121
+ background: #eef5ff;
122
+ padding: 8px;
123
+ border-radius: 8px;
124
+ }
125
+
126
+ .debug-tools md-icon {
127
+ color: #ff9800;
128
+ }
129
+
130
+ .breakpoint-toggle {
131
+ display: flex;
132
+ justify-content: space-between;
133
+ align-items: center;
134
+ padding: 6px;
135
+ background: #f5f5f5;
136
+ border-radius: 6px;
137
+ cursor: pointer;
138
+ font-size: 14px;
139
+ }
140
+
141
+ .breakpoint-toggle:hover {
142
+ background: #ddd;
143
+ }
144
+ `;
145
+ __decorate([
146
+ consume({ context: flowContext, subscribe: true })
147
+ ], FlowToolbar.prototype, "flowContext", void 0);
148
+ __decorate([
149
+ consume({ context: flowDebugContext, subscribe: true })
150
+ ], FlowToolbar.prototype, "flowDebugContext", void 0);
151
+ __decorate([
152
+ consume({ context: flowEditContext, subscribe: true })
153
+ ], FlowToolbar.prototype, "flowEditContext", void 0);
154
+ __decorate([
155
+ state()
156
+ ], FlowToolbar.prototype, "currentMode", void 0);
157
+ FlowToolbar = __decorate([
158
+ customElement('flow-toolbar')
159
+ ], FlowToolbar);
160
+ export { FlowToolbar };
161
+ //# sourceMappingURL=flow-toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-toolbar.js","sourceRoot":"","sources":["../../../src/components/flow-toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, css } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\nimport { consume } from '@lit/context'\n\nimport { flowContext, FlowContextType } from '../context/flow-context.js'\nimport { flowEditContext, FlowEditContextType } from '../context/flow-edit-context.js'\nimport { flowDebugContext, FlowDebugContextType } from '../context/flow-debug-context.js'\n\n@customElement('flow-toolbar')\nexport class FlowToolbar extends LitElement {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n div.mode {\n background: #f9f9f9;\n border-radius: 8px;\n padding: 8px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n }\n\n div.subtools {\n display: flex;\n flex-direction: column;\n gap: 8px;\n background: #ffffff;\n border-radius: 8px;\n padding: 8px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n }\n\n md-icon {\n cursor: pointer;\n transition: transform 0.2s;\n color: #001d84;\n font-variation-settings:\n 'FILL' 1,\n 'wght' 400,\n 'GRAD' 0,\n 'opsz' 48;\n }\n\n md-icon:hover {\n transform: scale(1.1);\n }\n\n .subtools md-icon {\n color: #007bff;\n }\n\n .debug-tools {\n display: flex;\n flex-direction: column;\n gap: 6px;\n background: #eef5ff;\n padding: 8px;\n border-radius: 8px;\n }\n\n .debug-tools md-icon {\n color: #ff9800;\n }\n\n .breakpoint-toggle {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 6px;\n background: #f5f5f5;\n border-radius: 6px;\n cursor: pointer;\n font-size: 14px;\n }\n\n .breakpoint-toggle:hover {\n background: #ddd;\n }\n `\n\n @consume({ context: flowContext, subscribe: true }) private flowContext?: FlowContextType\n @consume({ context: flowDebugContext, subscribe: true }) private flowDebugContext?: FlowDebugContextType\n @consume({ context: flowEditContext, subscribe: true }) private flowEditContext?: FlowEditContextType\n\n @state() private currentMode: 'edit' | 'debug' = 'edit'\n\n render() {\n const mode = this.currentMode\n const debugMode = mode === 'debug'\n\n return html`\n <div class=\"mode\">\n <md-icon @click=${this.toggleMode}>${mode == 'edit' ? 'edit' : 'bug_report'}</md-icon>\n </div>\n\n <div class=\"subtools\">\n ${debugMode\n ? html`\n <!-- 기본 실행 컨트롤 -->\n <md-icon @click=${this.flowDebugContext?.executeFlow}>play_arrow</md-icon>\n <md-icon @click=${this.flowDebugContext?.pauseFlow}>pause</md-icon>\n <md-icon @click=${this.flowDebugContext?.stopFlow}>stop</md-icon>\n\n <!-- 디버깅 스텝 실행 기능 -->\n <div class=\"debug-tools\">\n <md-icon @click=${this.flowDebugContext?.stepOver} title=\"Step Over\">arrow_forward</md-icon>\n <md-icon @click=${this.flowDebugContext?.stepInto} title=\"Step Into\">call_split</md-icon>\n <md-icon @click=${this.flowDebugContext?.stepOut} title=\"Step Out\">exit_to_app</md-icon>\n <md-icon @click=${this.flowDebugContext?.continueExecution} title=\"Continue\">fast_forward</md-icon>\n </div>\n\n <!-- 브레이크포인트 관리 -->\n <div class=\"breakpoint-toggle\" @click=${this.toggleBreakpoint}>\n <span>Toggle Breakpoint</span>\n <md-icon>${this.hasBreakpoint ? 'radio_button_checked' : 'radio_button_unchecked'}</md-icon>\n </div>\n `\n : html` <md-icon @click=${this.flowEditContext?.runLayout}>graph_4</md-icon> `}\n </div>\n `\n }\n\n /** 모드 전환 */\n private toggleMode() {\n this.currentMode = this.currentMode === 'edit' ? 'debug' : 'edit'\n this.flowContext?.setMode(this.currentMode)\n }\n\n /** 브레이크포인트 설정 / 해제 */\n private toggleBreakpoint() {\n if (!this.flowDebugContext || !this.flowContext?.selected) return\n\n const nodeId = this.flowContext.selected.id\n\n if (this.flowDebugContext.breakpoints.has(nodeId)) {\n this.flowDebugContext.breakpoints.delete(nodeId)\n } else {\n this.flowDebugContext.breakpoints.add(nodeId)\n }\n\n this.requestUpdate()\n }\n\n /** 현재 선택된 노드가 브레이크포인트인지 여부 */\n private get hasBreakpoint() {\n return this.flowContext?.selected ? this.flowDebugContext?.breakpoints.has(this.flowContext.selected.id) : false\n }\n}\n"]}
@@ -0,0 +1,35 @@
1
+ import '@operato/property-editor/ox-property-editor-3axis.js';
2
+ import '@operato/property-editor/ox-property-editor-3dish.js';
3
+ import '@operato/property-editor/ox-property-editor-legend.js';
4
+ import '@operato/property-editor/ox-property-editor-description.js';
5
+ import '@operato/property-editor/ox-property-editor-number.js';
6
+ import '@operato/property-editor/ox-property-editor-unit-number.js';
7
+ import '@operato/property-editor/ox-property-editor-password.js';
8
+ import '@operato/property-editor/ox-property-editor-action.js';
9
+ import '@operato/property-editor/ox-property-editor-angle.js';
10
+ import '@operato/property-editor/ox-property-editor-string.js';
11
+ import '@operato/property-editor/ox-property-editor-data.js';
12
+ import '@operato/property-editor/ox-property-editor-date.js';
13
+ import '@operato/property-editor/ox-property-editor-month.js';
14
+ import '@operato/property-editor/ox-property-editor-time.js';
15
+ import '@operato/property-editor/ox-property-editor-datetime.js';
16
+ import '@operato/property-editor/ox-property-editor-checkbox.js';
17
+ import '@operato/property-editor/ox-property-editor-options.js';
18
+ import '@operato/property-editor/ox-property-editor-select.js';
19
+ import '@operato/property-editor/ox-property-editor-scene-component-id.js';
20
+ import '@operato/property-editor/ox-property-editor-color.js';
21
+ import '@operato/property-editor/ox-property-editor-multiple-colors.js';
22
+ import '@operato/property-editor/ox-property-editor-solid-colorstops.js';
23
+ import '@operato/property-editor/ox-property-editor-gradient-colorstops.js';
24
+ import '@operato/property-editor/ox-property-editor-textarea.js';
25
+ import '@operato/property-editor/ox-property-editor-table.js';
26
+ import '@operato/property-editor/ox-property-editor-key-values.js';
27
+ import '@operato/property-editor/ox-property-editor-partition-keys.js';
28
+ import '@operato/property-editor/ox-property-editor-value-map.js';
29
+ import '@operato/property-editor/ox-property-editor-value-ranges.js';
30
+ import '@operato/property-editor/ox-property-editor-hashtags.js';
31
+ import '@operato/property-editor/ox-property-editor-image.js';
32
+ import '@operato/property-editor/ox-property-editor-file.js';
33
+ import '@operato/attachment/ox-property-editor-attachment-selector.js';
34
+ import '@operato/attachment/ox-property-editor-image-selector.js';
35
+ import '@operato/font/ox-property-editor-font-selector.js';
@@ -0,0 +1,78 @@
1
+ import '@operato/property-editor/ox-property-editor-3axis.js';
2
+ import '@operato/property-editor/ox-property-editor-3dish.js';
3
+ import '@operato/property-editor/ox-property-editor-legend.js';
4
+ import '@operato/property-editor/ox-property-editor-description.js';
5
+ import '@operato/property-editor/ox-property-editor-number.js';
6
+ import '@operato/property-editor/ox-property-editor-unit-number.js';
7
+ import '@operato/property-editor/ox-property-editor-password.js';
8
+ import '@operato/property-editor/ox-property-editor-action.js';
9
+ import '@operato/property-editor/ox-property-editor-angle.js';
10
+ import '@operato/property-editor/ox-property-editor-string.js';
11
+ import '@operato/property-editor/ox-property-editor-data.js';
12
+ import '@operato/property-editor/ox-property-editor-date.js';
13
+ import '@operato/property-editor/ox-property-editor-month.js';
14
+ import '@operato/property-editor/ox-property-editor-time.js';
15
+ import '@operato/property-editor/ox-property-editor-datetime.js';
16
+ import '@operato/property-editor/ox-property-editor-checkbox.js';
17
+ import '@operato/property-editor/ox-property-editor-options.js';
18
+ import '@operato/property-editor/ox-property-editor-select.js';
19
+ import '@operato/property-editor/ox-property-editor-scene-component-id.js';
20
+ import '@operato/property-editor/ox-property-editor-color.js';
21
+ import '@operato/property-editor/ox-property-editor-multiple-colors.js';
22
+ import '@operato/property-editor/ox-property-editor-solid-colorstops.js';
23
+ import '@operato/property-editor/ox-property-editor-gradient-colorstops.js';
24
+ import '@operato/property-editor/ox-property-editor-textarea.js';
25
+ import '@operato/property-editor/ox-property-editor-table.js';
26
+ import '@operato/property-editor/ox-property-editor-key-values.js';
27
+ import '@operato/property-editor/ox-property-editor-partition-keys.js';
28
+ import '@operato/property-editor/ox-property-editor-value-map.js';
29
+ import '@operato/property-editor/ox-property-editor-value-ranges.js';
30
+ import '@operato/property-editor/ox-property-editor-hashtags.js';
31
+ import '@operato/property-editor/ox-property-editor-image.js';
32
+ import '@operato/property-editor/ox-property-editor-file.js';
33
+ import '@operato/attachment/ox-property-editor-attachment-selector.js';
34
+ import '@operato/attachment/ox-property-editor-image-selector.js';
35
+ import '@operato/font/ox-property-editor-font-selector.js';
36
+ import { OxPropertyEditor } from '@operato/property-editor';
37
+ OxPropertyEditor.register({
38
+ legend: 'ox-property-editor-legend',
39
+ description: 'ox-property-editor-description',
40
+ number: 'ox-property-editor-number',
41
+ 'unit-number': 'ox-property-editor-unit-number',
42
+ slider: 'ox-property-editor-range',
43
+ password: 'ox-property-editor-password',
44
+ action: 'ox-property-editor-action',
45
+ angle: 'ox-property-editor-angle',
46
+ string: 'ox-property-editor-string',
47
+ textarea: 'ox-property-editor-textarea',
48
+ javascript: 'ox-property-editor-textarea',
49
+ script: 'ox-property-editor-textarea',
50
+ checkbox: 'ox-property-editor-checkbox',
51
+ boolean: 'ox-property-editor-checkbox',
52
+ select: 'ox-property-editor-select',
53
+ date: 'ox-property-editor-date',
54
+ month: 'ox-property-editor-month',
55
+ datetime: 'ox-property-editor-datetime',
56
+ time: 'ox-property-editor-time',
57
+ options: 'ox-property-editor-options',
58
+ data: 'ox-property-editor-data',
59
+ file: 'ox-property-editor-file',
60
+ image: 'ox-property-editor-image',
61
+ 'range-input': 'ox-property-editor-range',
62
+ 'attachment-selector': 'ox-property-editor-attachment-selector',
63
+ 'gltf-selector': 'ox-property-editor-attachment-selector',
64
+ 'image-selector': 'ox-property-editor-image-selector',
65
+ color: 'ox-property-editor-color',
66
+ 'solid-color-stops': 'ox-property-editor-solid-colorstops',
67
+ 'gradient-color-stops': 'ox-property-editor-gradient-colorstops',
68
+ 'multiple-color': 'ox-property-editor-multiple-colors',
69
+ map: 'ox-property-editor-value-map',
70
+ range: 'ox-property-editor-value-ranges',
71
+ 'editor-table': 'ox-property-editor-table',
72
+ 'id-input': 'ox-property-editor-scene-component-id',
73
+ 'font-selector': 'ox-property-editor-font-selector',
74
+ 'partition-keys': 'ox-property-editor-partion-keys',
75
+ 'key-values': 'ox-property-editor-key-values',
76
+ hashtags: 'ox-property-editor-hashtags'
77
+ });
78
+ //# sourceMappingURL=property-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-editor.js","sourceRoot":"","sources":["../../../src/components/property-editor.ts"],"names":[],"mappings":"AAAA,OAAO,sDAAsD,CAAA;AAC7D,OAAO,sDAAsD,CAAA;AAC7D,OAAO,uDAAuD,CAAA;AAC9D,OAAO,4DAA4D,CAAA;AACnE,OAAO,uDAAuD,CAAA;AAC9D,OAAO,4DAA4D,CAAA;AACnE,OAAO,yDAAyD,CAAA;AAChE,OAAO,uDAAuD,CAAA;AAC9D,OAAO,sDAAsD,CAAA;AAC7D,OAAO,uDAAuD,CAAA;AAC9D,OAAO,qDAAqD,CAAA;AAC5D,OAAO,qDAAqD,CAAA;AAC5D,OAAO,sDAAsD,CAAA;AAC7D,OAAO,qDAAqD,CAAA;AAC5D,OAAO,yDAAyD,CAAA;AAChE,OAAO,yDAAyD,CAAA;AAChE,OAAO,wDAAwD,CAAA;AAC/D,OAAO,uDAAuD,CAAA;AAC9D,OAAO,mEAAmE,CAAA;AAC1E,OAAO,sDAAsD,CAAA;AAC7D,OAAO,gEAAgE,CAAA;AACvE,OAAO,iEAAiE,CAAA;AACxE,OAAO,oEAAoE,CAAA;AAC3E,OAAO,yDAAyD,CAAA;AAChE,OAAO,sDAAsD,CAAA;AAC7D,OAAO,2DAA2D,CAAA;AAClE,OAAO,+DAA+D,CAAA;AACtE,OAAO,0DAA0D,CAAA;AACjE,OAAO,6DAA6D,CAAA;AACpE,OAAO,yDAAyD,CAAA;AAChE,OAAO,sDAAsD,CAAA;AAC7D,OAAO,qDAAqD,CAAA;AAC5D,OAAO,+DAA+D,CAAA;AACtE,OAAO,0DAA0D,CAAA;AACjE,OAAO,mDAAmD,CAAA;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE3D,gBAAgB,CAAC,QAAQ,CAAC;IACxB,MAAM,EAAE,2BAA2B;IACnC,WAAW,EAAE,gCAAgC;IAC7C,MAAM,EAAE,2BAA2B;IACnC,aAAa,EAAE,gCAAgC;IAC/C,MAAM,EAAE,0BAA0B;IAClC,QAAQ,EAAE,6BAA6B;IACvC,MAAM,EAAE,2BAA2B;IACnC,KAAK,EAAE,0BAA0B;IACjC,MAAM,EAAE,2BAA2B;IACnC,QAAQ,EAAE,6BAA6B;IACvC,UAAU,EAAE,6BAA6B;IACzC,MAAM,EAAE,6BAA6B;IACrC,QAAQ,EAAE,6BAA6B;IACvC,OAAO,EAAE,6BAA6B;IACtC,MAAM,EAAE,2BAA2B;IACnC,IAAI,EAAE,yBAAyB;IAC/B,KAAK,EAAE,0BAA0B;IACjC,QAAQ,EAAE,6BAA6B;IACvC,IAAI,EAAE,yBAAyB;IAC/B,OAAO,EAAE,4BAA4B;IACrC,IAAI,EAAE,yBAAyB;IAC/B,IAAI,EAAE,yBAAyB;IAC/B,KAAK,EAAE,0BAA0B;IACjC,aAAa,EAAE,0BAA0B;IACzC,qBAAqB,EAAE,wCAAwC;IAC/D,eAAe,EAAE,wCAAwC;IACzD,gBAAgB,EAAE,mCAAmC;IACrD,KAAK,EAAE,0BAA0B;IACjC,mBAAmB,EAAE,qCAAqC;IAC1D,sBAAsB,EAAE,wCAAwC;IAChE,gBAAgB,EAAE,oCAAoC;IACtD,GAAG,EAAE,8BAA8B;IACnC,KAAK,EAAE,iCAAiC;IACxC,cAAc,EAAE,0BAA0B;IAC1C,UAAU,EAAE,uCAAuC;IACnD,eAAe,EAAE,kCAAkC;IACnD,gBAAgB,EAAE,iCAAiC;IACnD,YAAY,EAAE,+BAA+B;IAC7C,QAAQ,EAAE,6BAA6B;CACxC,CAAC,CAAA","sourcesContent":["import '@operato/property-editor/ox-property-editor-3axis.js'\nimport '@operato/property-editor/ox-property-editor-3dish.js'\nimport '@operato/property-editor/ox-property-editor-legend.js'\nimport '@operato/property-editor/ox-property-editor-description.js'\nimport '@operato/property-editor/ox-property-editor-number.js'\nimport '@operato/property-editor/ox-property-editor-unit-number.js'\nimport '@operato/property-editor/ox-property-editor-password.js'\nimport '@operato/property-editor/ox-property-editor-action.js'\nimport '@operato/property-editor/ox-property-editor-angle.js'\nimport '@operato/property-editor/ox-property-editor-string.js'\nimport '@operato/property-editor/ox-property-editor-data.js'\nimport '@operato/property-editor/ox-property-editor-date.js'\nimport '@operato/property-editor/ox-property-editor-month.js'\nimport '@operato/property-editor/ox-property-editor-time.js'\nimport '@operato/property-editor/ox-property-editor-datetime.js'\nimport '@operato/property-editor/ox-property-editor-checkbox.js'\nimport '@operato/property-editor/ox-property-editor-options.js'\nimport '@operato/property-editor/ox-property-editor-select.js'\nimport '@operato/property-editor/ox-property-editor-scene-component-id.js'\nimport '@operato/property-editor/ox-property-editor-color.js'\nimport '@operato/property-editor/ox-property-editor-multiple-colors.js'\nimport '@operato/property-editor/ox-property-editor-solid-colorstops.js'\nimport '@operato/property-editor/ox-property-editor-gradient-colorstops.js'\nimport '@operato/property-editor/ox-property-editor-textarea.js'\nimport '@operato/property-editor/ox-property-editor-table.js'\nimport '@operato/property-editor/ox-property-editor-key-values.js'\nimport '@operato/property-editor/ox-property-editor-partition-keys.js'\nimport '@operato/property-editor/ox-property-editor-value-map.js'\nimport '@operato/property-editor/ox-property-editor-value-ranges.js'\nimport '@operato/property-editor/ox-property-editor-hashtags.js'\nimport '@operato/property-editor/ox-property-editor-image.js'\nimport '@operato/property-editor/ox-property-editor-file.js'\nimport '@operato/attachment/ox-property-editor-attachment-selector.js'\nimport '@operato/attachment/ox-property-editor-image-selector.js'\nimport '@operato/font/ox-property-editor-font-selector.js'\n\nimport { OxPropertyEditor } from '@operato/property-editor'\n\nOxPropertyEditor.register({\n legend: 'ox-property-editor-legend',\n description: 'ox-property-editor-description',\n number: 'ox-property-editor-number',\n 'unit-number': 'ox-property-editor-unit-number',\n slider: 'ox-property-editor-range',\n password: 'ox-property-editor-password',\n action: 'ox-property-editor-action',\n angle: 'ox-property-editor-angle',\n string: 'ox-property-editor-string',\n textarea: 'ox-property-editor-textarea',\n javascript: 'ox-property-editor-textarea',\n script: 'ox-property-editor-textarea',\n checkbox: 'ox-property-editor-checkbox',\n boolean: 'ox-property-editor-checkbox',\n select: 'ox-property-editor-select',\n date: 'ox-property-editor-date',\n month: 'ox-property-editor-month',\n datetime: 'ox-property-editor-datetime',\n time: 'ox-property-editor-time',\n options: 'ox-property-editor-options',\n data: 'ox-property-editor-data',\n file: 'ox-property-editor-file',\n image: 'ox-property-editor-image',\n 'range-input': 'ox-property-editor-range',\n 'attachment-selector': 'ox-property-editor-attachment-selector',\n 'gltf-selector': 'ox-property-editor-attachment-selector',\n 'image-selector': 'ox-property-editor-image-selector',\n color: 'ox-property-editor-color',\n 'solid-color-stops': 'ox-property-editor-solid-colorstops',\n 'gradient-color-stops': 'ox-property-editor-gradient-colorstops',\n 'multiple-color': 'ox-property-editor-multiple-colors',\n map: 'ox-property-editor-value-map',\n range: 'ox-property-editor-value-ranges',\n 'editor-table': 'ox-property-editor-table',\n 'id-input': 'ox-property-editor-scene-component-id',\n 'font-selector': 'ox-property-editor-font-selector',\n 'partition-keys': 'ox-property-editor-partion-keys',\n 'key-values': 'ox-property-editor-key-values',\n hashtags: 'ox-property-editor-hashtags'\n})\n"]}
@@ -0,0 +1,11 @@
1
+ import '@operato/data-mapper';
2
+ import { LitElement } from 'lit';
3
+ import { FlowEdge, FlowNode } from '../../types.js';
4
+ export declare class DataMapperPopup extends LitElement {
5
+ static styles: import("lit").CSSResult[];
6
+ edge: FlowEdge;
7
+ nodes: FlowNode[];
8
+ render(): import("lit-html").TemplateResult<1>;
9
+ onChangeMappings: (e: CustomEvent) => void;
10
+ private updateMapping;
11
+ }
@@ -0,0 +1,86 @@
1
+ import { __decorate } from "tslib";
2
+ import '@operato/data-mapper';
3
+ import { LitElement, html, css } from 'lit';
4
+ import { customElement, property } from 'lit/decorators.js';
5
+ import { CommonHeaderStyles } from '@operato/styles';
6
+ import { i18next } from '@operato/i18n';
7
+ import { convertNodesToTree, convertSchemaToTree /*convertMappings*/ } from '../../utils/generate-mapping-scheme.js';
8
+ let DataMapperPopup = class DataMapperPopup extends LitElement {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.onChangeMappings = (e) => {
12
+ e.stopPropagation();
13
+ this.edge.dataMappings = e.detail;
14
+ };
15
+ this.updateMapping = (e) => {
16
+ e.stopPropagation();
17
+ this.dispatchEvent(new CustomEvent('change', {
18
+ detail: this.edge.dataMappings
19
+ }));
20
+ };
21
+ }
22
+ render() {
23
+ const { toAnchor, dataMappings } = this.edge;
24
+ const inputSchema = toAnchor === null || toAnchor === void 0 ? void 0 : toAnchor.node.inputSchema;
25
+ const toNode = toAnchor === null || toAnchor === void 0 ? void 0 : toAnchor.node;
26
+ const sourceSchema = convertNodesToTree(this.nodes, toNode ? [toNode] : []);
27
+ const targetSchema = convertSchemaToTree(inputSchema, toAnchor === null || toAnchor === void 0 ? void 0 : toAnchor.node.label);
28
+ return html `
29
+ <div class="header">
30
+ <div class="title">Function Box</div>
31
+ </div>
32
+
33
+ <ox-data-mapper
34
+ .sourceSchema=${sourceSchema}
35
+ .targetSchema=${targetSchema}
36
+ .mappings=${dataMappings}
37
+ @change=${this.onChangeMappings}
38
+ >
39
+ </ox-data-mapper>
40
+
41
+ <div class="footer">
42
+ <div filler></div>
43
+ <button @click=${this.updateMapping} done><md-icon>save</md-icon>${i18next.t('button.save')}</button>
44
+ </div>
45
+ `;
46
+ }
47
+ };
48
+ DataMapperPopup.styles = [
49
+ CommonHeaderStyles,
50
+ css `
51
+ :host {
52
+ display: flex;
53
+ flex-direction: column;
54
+ height: 100%;
55
+ background: white;
56
+ background-color: var(--md-sys-color-surface);
57
+ color: var(--md-sys-color-primary);
58
+
59
+ z-index: 1;
60
+ }
61
+
62
+ .header {
63
+ display: flex;
64
+ justify-content: space-between;
65
+ align-items: center;
66
+ margin-bottom: 10px;
67
+ }
68
+
69
+ ox-data-mapper {
70
+ flex: 1;
71
+ padding: 0 20px;
72
+ overflow-y: auto;
73
+ }
74
+ `
75
+ ];
76
+ __decorate([
77
+ property({ type: Object })
78
+ ], DataMapperPopup.prototype, "edge", void 0);
79
+ __decorate([
80
+ property({ type: Array })
81
+ ], DataMapperPopup.prototype, "nodes", void 0);
82
+ DataMapperPopup = __decorate([
83
+ customElement('data-mapper-popup')
84
+ ], DataMapperPopup);
85
+ export { DataMapperPopup };
86
+ //# sourceMappingURL=data-mapper-popup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-mapper-popup.js","sourceRoot":"","sources":["../../../../src/components/property-panel/data-mapper-popup.ts"],"names":[],"mappings":";AAAA,OAAO,sBAAsB,CAAA;AAE7B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAS,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAIvC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAG7G,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;IAAxC;;QA8DL,qBAAgB,GAAG,CAAC,CAAc,EAAE,EAAE;YACpC,CAAC,CAAC,eAAe,EAAE,CAAA;YAEnB,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,MAAM,CAAA;QACnC,CAAC,CAAA;QAEO,kBAAa,GAAG,CAAC,CAAQ,EAAE,EAAE;YACnC,CAAC,CAAC,eAAe,EAAE,CAAA;YAEnB,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,QAAQ,EAAE;gBACxB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;aAC/B,CAAC,CACH,CAAA;QACH,CAAC,CAAA;IACH,CAAC;IA5CC,MAAM;QACJ,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA;QAE5C,MAAM,WAAW,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,WAAW,CAAA;QAC9C,MAAM,MAAM,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAA;QAE7B,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAC3E,MAAM,YAAY,GAAa,mBAAmB,CAAC,WAAY,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAE,KAAM,CAAC,CAAA;QAExF,OAAO,IAAI,CAAA;;;;;;wBAMS,YAAY;wBACZ,YAAY;oBAChB,YAAY;kBACd,IAAI,CAAC,gBAAgB;;;;;;yBAMd,IAAI,CAAC,aAAa,gCAAgC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;KAE9F,CAAA;IACH,CAAC;;AA3DM,sBAAM,GAAG;IACd,kBAAkB;IAClB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;KAwBF;CACF,AA3BY,CA2BZ;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CAAgB;AAChB;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;8CAAmB;AA/BlC,eAAe;IAD3B,aAAa,CAAC,mBAAmB,CAAC;GACtB,eAAe,CA6E3B","sourcesContent":["import '@operato/data-mapper'\n\nimport { LitElement, html, css } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { CommonHeaderStyles } from '@operato/styles'\nimport { i18next } from '@operato/i18n'\nimport { TreeNode } from '@operato/data-mapper'\n\nimport { FlowEdge, FlowNode } from '../../types.js'\nimport { convertNodesToTree, convertSchemaToTree /*convertMappings*/ } from '../../utils/generate-mapping-scheme.js'\n\n@customElement('data-mapper-popup')\nexport class DataMapperPopup extends LitElement {\n static styles = [\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n background-color: var(--md-sys-color-surface);\n color: var(--md-sys-color-primary);\n\n z-index: 1;\n }\n\n .header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 10px;\n }\n\n ox-data-mapper {\n flex: 1;\n padding: 0 20px;\n overflow-y: auto;\n }\n `\n ]\n\n @property({ type: Object }) edge!: FlowEdge\n @property({ type: Array }) nodes!: FlowNode[]\n\n render() {\n const { toAnchor, dataMappings } = this.edge\n\n const inputSchema = toAnchor?.node.inputSchema\n const toNode = toAnchor?.node\n\n const sourceSchema = convertNodesToTree(this.nodes, toNode ? [toNode] : [])\n const targetSchema: TreeNode = convertSchemaToTree(inputSchema!, toAnchor?.node!.label!)\n\n return html`\n <div class=\"header\">\n <div class=\"title\">Function Box</div>\n </div>\n\n <ox-data-mapper\n .sourceSchema=${sourceSchema}\n .targetSchema=${targetSchema}\n .mappings=${dataMappings}\n @change=${this.onChangeMappings}\n >\n </ox-data-mapper>\n\n <div class=\"footer\">\n <div filler></div>\n <button @click=${this.updateMapping} done><md-icon>save</md-icon>${i18next.t('button.save')}</button>\n </div>\n `\n }\n\n onChangeMappings = (e: CustomEvent) => {\n e.stopPropagation()\n\n this.edge.dataMappings = e.detail\n }\n\n private updateMapping = (e: Event) => {\n e.stopPropagation()\n\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: this.edge.dataMappings\n })\n )\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class TaskSelectionPopup extends LitElement {
3
+ static styles: import("lit").CSSResult;
4
+ private searchQuery;
5
+ private selectedGroup;
6
+ render(): import("lit-html").TemplateResult<1>;
7
+ private onSearchInput;
8
+ private toggleGroup;
9
+ private selectTask;
10
+ }
@@ -0,0 +1,106 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement, html, css } from 'lit';
3
+ import { customElement, state } from 'lit/decorators.js';
4
+ import { TaskGroups } from '../../api/tasks.js';
5
+ let TaskSelectionPopup = class TaskSelectionPopup extends LitElement {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.searchQuery = '';
9
+ this.selectedGroup = null;
10
+ }
11
+ render() {
12
+ return html `
13
+ <div class="header">
14
+ <h3>Select a Task</h3>
15
+ </div>
16
+
17
+ <input class="search-box" type="text" placeholder="Search..." @input=${this.onSearchInput} />
18
+
19
+ <div>
20
+ ${Object.entries(TaskGroups).map(([group, tasks]) => this.searchQuery && !tasks.some(task => task.name.includes(this.searchQuery))
21
+ ? ''
22
+ : html `
23
+ <div class="task-group" @click=${() => this.toggleGroup(group)}>${group}</div>
24
+ ${this.selectedGroup === group
25
+ ? html `
26
+ <div class="task-list">
27
+ ${tasks
28
+ .filter(task => task.name.includes(this.searchQuery))
29
+ .map(task => html `
30
+ <div class="task-item" @click=${() => this.selectTask(task)}>${task.name}</div>
31
+ `)}
32
+ </div>
33
+ `
34
+ : ''}
35
+ `)}
36
+ </div>
37
+ `;
38
+ }
39
+ onSearchInput(e) {
40
+ this.searchQuery = e.target.value;
41
+ }
42
+ toggleGroup(group) {
43
+ this.selectedGroup = this.selectedGroup === group ? null : group;
44
+ }
45
+ selectTask(task) {
46
+ this.dispatchEvent(new CustomEvent('task-selected', { detail: task, bubbles: true }));
47
+ }
48
+ };
49
+ TaskSelectionPopup.styles = css `
50
+ :host {
51
+ display: block;
52
+ height: 100%;
53
+ background: white;
54
+ padding: 20px;
55
+ overflow-y: auto;
56
+ z-index: 1;
57
+ }
58
+
59
+ .header {
60
+ display: flex;
61
+ justify-content: space-between;
62
+ align-items: center;
63
+ margin-bottom: 10px;
64
+ }
65
+
66
+ .search-box {
67
+ width: 100%;
68
+ padding: 8px;
69
+ margin-bottom: 10px;
70
+ border: 1px solid #ccc;
71
+ border-radius: 4px;
72
+ }
73
+
74
+ .task-group {
75
+ font-weight: bold;
76
+ padding: 6px;
77
+ background-color: #f4f4f4;
78
+ border-radius: 4px;
79
+ cursor: pointer;
80
+ }
81
+
82
+ .task-list {
83
+ padding-left: 12px;
84
+ }
85
+
86
+ .task-item {
87
+ padding: 4px;
88
+ cursor: pointer;
89
+ border-radius: 4px;
90
+ }
91
+
92
+ .task-item:hover {
93
+ background-color: #e0e0e0;
94
+ }
95
+ `;
96
+ __decorate([
97
+ state()
98
+ ], TaskSelectionPopup.prototype, "searchQuery", void 0);
99
+ __decorate([
100
+ state()
101
+ ], TaskSelectionPopup.prototype, "selectedGroup", void 0);
102
+ TaskSelectionPopup = __decorate([
103
+ customElement('task-selection-popup')
104
+ ], TaskSelectionPopup);
105
+ export { TaskSelectionPopup };
106
+ //# sourceMappingURL=task-selection-popup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-selection-popup.js","sourceRoot":"","sources":["../../../../src/components/property-panel/task-selection-popup.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAIxC,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,UAAU;IAA3C;;QAiDY,gBAAW,GAAW,EAAE,CAAA;QACxB,kBAAa,GAAkB,IAAI,CAAA;IA8CtD,CAAC;IA5CC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;6EAK8D,IAAI,CAAC,aAAa;;;UAGrF,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAClD,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3E,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,IAAI,CAAA;iDAC+B,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK;kBACrE,IAAI,CAAC,aAAa,KAAK,KAAK;gBAC5B,CAAC,CAAC,IAAI,CAAA;;0BAEE,KAAK;qBACJ,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;qBACpD,GAAG,CACF,IAAI,CAAC,EAAE,CAAC,IAAI,CAAA;8DACsB,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;6BACzE,CACF;;qBAEN;gBACH,CAAC,CAAC,EAAE;eACP,CACN;;KAEJ,CAAA;IACH,CAAC;IAEO,aAAa,CAAC,CAAQ;QAC5B,IAAI,CAAC,WAAW,GAAI,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAA;IACzD,CAAC;IAEO,WAAW,CAAC,KAAa;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAClE,CAAC;IAEO,UAAU,CAAC,IAAc;QAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACvF,CAAC;;AA9FM,yBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8ClB,AA9CY,CA8CZ;AAEgB;IAAhB,KAAK,EAAE;uDAAiC;AACxB;IAAhB,KAAK,EAAE;yDAA4C;AAlDzC,kBAAkB;IAD9B,aAAa,CAAC,sBAAsB,CAAC;GACzB,kBAAkB,CAgG9B","sourcesContent":["import { LitElement, html, css } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\nimport { TaskGroups } from '../../api/tasks.js'\nimport { TaskType } from '../../types.js'\n\n@customElement('task-selection-popup')\nexport class TaskSelectionPopup extends LitElement {\n static styles = css`\n :host {\n display: block;\n height: 100%;\n background: white;\n padding: 20px;\n overflow-y: auto;\n z-index: 1;\n }\n\n .header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 10px;\n }\n\n .search-box {\n width: 100%;\n padding: 8px;\n margin-bottom: 10px;\n border: 1px solid #ccc;\n border-radius: 4px;\n }\n\n .task-group {\n font-weight: bold;\n padding: 6px;\n background-color: #f4f4f4;\n border-radius: 4px;\n cursor: pointer;\n }\n\n .task-list {\n padding-left: 12px;\n }\n\n .task-item {\n padding: 4px;\n cursor: pointer;\n border-radius: 4px;\n }\n\n .task-item:hover {\n background-color: #e0e0e0;\n }\n `\n\n @state() private searchQuery: string = ''\n @state() private selectedGroup: string | null = null\n\n render() {\n return html`\n <div class=\"header\">\n <h3>Select a Task</h3>\n </div>\n\n <input class=\"search-box\" type=\"text\" placeholder=\"Search...\" @input=${this.onSearchInput} />\n\n <div>\n ${Object.entries(TaskGroups).map(([group, tasks]) =>\n this.searchQuery && !tasks.some(task => task.name.includes(this.searchQuery))\n ? ''\n : html`\n <div class=\"task-group\" @click=${() => this.toggleGroup(group)}>${group}</div>\n ${this.selectedGroup === group\n ? html`\n <div class=\"task-list\">\n ${tasks\n .filter(task => task.name.includes(this.searchQuery))\n .map(\n task => html`\n <div class=\"task-item\" @click=${() => this.selectTask(task)}>${task.name}</div>\n `\n )}\n </div>\n `\n : ''}\n `\n )}\n </div>\n `\n }\n\n private onSearchInput(e: Event) {\n this.searchQuery = (e.target as HTMLInputElement).value\n }\n\n private toggleGroup(group: string) {\n this.selectedGroup = this.selectedGroup === group ? null : group\n }\n\n private selectTask(task: TaskType) {\n this.dispatchEvent(new CustomEvent('task-selected', { detail: task, bubbles: true }))\n }\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import { FlowNodeImplementation, EditorMode, FlowNode, FlowEdge, FlowEntity, TaskType } from '../types.js';
2
+ export interface FlowContextType {
3
+ nodes: FlowNode[];
4
+ edges: FlowEdge[];
5
+ mode: EditorMode;
6
+ setMode: (mode: EditorMode) => void;
7
+ addLog: (log: string) => void;
8
+ logs: string[];
9
+ availableNodeTypes: {
10
+ [type: string]: FlowNodeImplementation;
11
+ };
12
+ setAvailableNodeTypes: (nodeTypes: {
13
+ [type: string]: FlowNodeImplementation;
14
+ }) => void;
15
+ selected: FlowEntity | null;
16
+ getTaskTypes(): TaskType[];
17
+ getTaskType: (taskType: string) => TaskType;
18
+ }
19
+ export declare const flowContext: {
20
+ __context__: FlowContextType;
21
+ };
@@ -0,0 +1,3 @@
1
+ import { createContext } from '@lit/context';
2
+ export const flowContext = createContext('flow-context');
3
+ //# sourceMappingURL=flow-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-context.js","sourceRoot":"","sources":["../../../src/context/flow-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAsB5C,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAkB,cAAc,CAAC,CAAA","sourcesContent":["import { createContext } from '@lit/context'\nimport { FlowNodeImplementation, EditorMode, FlowNode, FlowEdge, FlowEntity, TaskType } from '../types.js'\n\nexport interface FlowContextType {\n nodes: FlowNode[]\n edges: FlowEdge[]\n\n mode: EditorMode\n setMode: (mode: EditorMode) => void\n\n addLog: (log: string) => void\n logs: string[]\n\n availableNodeTypes: { [type: string]: FlowNodeImplementation }\n setAvailableNodeTypes: (nodeTypes: { [type: string]: FlowNodeImplementation }) => void\n\n selected: FlowEntity | null\n\n getTaskTypes(): TaskType[]\n getTaskType: (taskType: string) => TaskType\n}\n\nexport const flowContext = createContext<FlowContextType>('flow-context')\n"]}
@@ -0,0 +1,16 @@
1
+ export interface FlowDebugContextType {
2
+ executeFlow: () => void;
3
+ pauseFlow: () => void;
4
+ stopFlow: () => void;
5
+ stepOver: () => void;
6
+ stepInto: () => void;
7
+ stepOut: () => void;
8
+ continueExecution: () => void;
9
+ breakpoints: Set<string>;
10
+ setBreakpoint: (nodeId: string) => void;
11
+ currentExecutionNode: string | null;
12
+ setCurrentExecutionNode: (nodeId: string | null) => void;
13
+ }
14
+ export declare const flowDebugContext: {
15
+ __context__: FlowDebugContextType;
16
+ };
@@ -0,0 +1,3 @@
1
+ import { createContext } from '@lit/context';
2
+ export const flowDebugContext = createContext('flow-debug-context');
3
+ //# sourceMappingURL=flow-debug-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-debug-context.js","sourceRoot":"","sources":["../../../src/context/flow-debug-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAkB5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAuB,oBAAoB,CAAC,CAAA","sourcesContent":["import { createContext } from '@lit/context'\n\nexport interface FlowDebugContextType {\n executeFlow: () => void\n pauseFlow: () => void\n stopFlow: () => void\n stepOver: () => void\n stepInto: () => void\n stepOut: () => void\n continueExecution: () => void\n\n breakpoints: Set<string>\n setBreakpoint: (nodeId: string) => void\n\n currentExecutionNode: string | null\n setCurrentExecutionNode: (nodeId: string | null) => void\n}\n\nexport const flowDebugContext = createContext<FlowDebugContextType>('flow-debug-context')\n"]}
@@ -0,0 +1,11 @@
1
+ import { FlowEntityModel, FlowEntity } from '../types.js';
2
+ export interface FlowEditContextType {
3
+ runLayout: () => void;
4
+ updateEntity: (entity: FlowEntity, model: Partial<FlowEntityModel>) => void;
5
+ updateOptions: (entity: FlowEntity, options: {
6
+ [key: string]: any;
7
+ }) => void;
8
+ }
9
+ export declare const flowEditContext: {
10
+ __context__: FlowEditContextType;
11
+ };
@@ -0,0 +1,3 @@
1
+ import { createContext } from '@lit/context';
2
+ export const flowEditContext = createContext('flow-edit-context');
3
+ //# sourceMappingURL=flow-edit-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-edit-context.js","sourceRoot":"","sources":["../../../src/context/flow-edit-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAU5C,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAsB,mBAAmB,CAAC,CAAA","sourcesContent":["import { createContext } from '@lit/context'\nimport { FlowNode, FlowEdge, FlowNodeModel, FlowEdgeModel, FlowEntityModel, FlowEntity } from '../types.js'\n\nexport interface FlowEditContextType {\n runLayout: () => void\n\n updateEntity: (entity: FlowEntity, model: Partial<FlowEntityModel>) => void\n updateOptions: (entity: FlowEntity, options: { [key: string]: any }) => void\n}\n\nexport const flowEditContext = createContext<FlowEditContextType>('flow-edit-context')\n"]}
@@ -0,0 +1,9 @@
1
+ import { FlowEventHandler } from './flow-event-handler';
2
+ export declare class DndEventHandler extends FlowEventHandler {
3
+ addEventListeners(): void;
4
+ removeEventListeners(): void;
5
+ /** 드래그 오버 허용 */
6
+ private allowDrop;
7
+ /** 노드 드롭 처리 */
8
+ private onDrop;
9
+ }