@gravitee/ui-components 3.25.2 → 3.25.3-typescript-5a46c7d

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 (183) hide show
  1. package/package.json +13 -4
  2. package/src/atoms/gv-autocomplete.js +1 -437
  3. package/src/atoms/gv-button.js +1 -235
  4. package/src/atoms/gv-checkbox.js +1 -129
  5. package/src/atoms/gv-date-picker-calendar.js +1 -813
  6. package/src/atoms/gv-date-picker-cell.js +1 -166
  7. package/src/atoms/gv-date-picker.js +1 -532
  8. package/src/atoms/gv-file-upload.js +1 -257
  9. package/src/atoms/gv-icon.js +1 -82
  10. package/src/atoms/gv-image.js +1 -109
  11. package/src/atoms/gv-input-message.js +1 -59
  12. package/src/atoms/gv-input.js +1 -530
  13. package/src/atoms/gv-link.js +1 -132
  14. package/src/atoms/gv-message.js +1 -77
  15. package/src/atoms/gv-metric.js +1 -68
  16. package/src/atoms/gv-relative-time.js +1 -185
  17. package/src/atoms/gv-select-native.js +1 -269
  18. package/src/atoms/gv-select.js +1 -317
  19. package/src/atoms/gv-spinner.js +1 -36
  20. package/src/atoms/gv-state.js +1 -89
  21. package/src/atoms/gv-switch.js +1 -123
  22. package/src/atoms/gv-tag.js +1 -116
  23. package/src/atoms/gv-text.js +1 -107
  24. package/src/charts/gv-chart-bar.js +1 -107
  25. package/src/charts/gv-chart-gauge.js +1 -97
  26. package/src/charts/gv-chart-histogram.js +1 -91
  27. package/src/charts/gv-chart-line.js +1 -235
  28. package/src/charts/gv-chart-map.js +1 -114
  29. package/src/charts/gv-chart-pie.js +1 -95
  30. package/src/index.js +1 -78
  31. package/src/lib/cron-expression.js +1 -210
  32. package/src/lib/date.js +1 -53
  33. package/src/lib/events.js +1 -28
  34. package/src/lib/http-client-schema-form.js +1 -68
  35. package/src/lib/http.js +1 -238
  36. package/src/lib/i18n.js +1 -111
  37. package/src/lib/item.js +1 -119
  38. package/src/lib/properties.js +1 -224
  39. package/src/lib/schema-form.js +1 -43
  40. package/src/lib/studio.js +1 -94
  41. package/src/lib/style.js +1 -41
  42. package/src/lib/text-format.js +1 -76
  43. package/src/lib/theme.js +1 -66
  44. package/src/lib/utils.js +1 -110
  45. package/src/mixins/chart-element.js +1 -142
  46. package/src/mixins/input-element.js +1 -157
  47. package/src/mixins/item-resource.js +1 -122
  48. package/src/mixins/keyboard-element.js +1 -70
  49. package/src/mixins/update-after-browser.js +1 -33
  50. package/src/mixins/with-resize-observer.js +1 -78
  51. package/src/mixins/with-skeleton-attribute.js +1 -118
  52. package/src/molecules/gv-card-full.js +1 -97
  53. package/src/molecules/gv-card-list.js +1 -84
  54. package/src/molecules/gv-card.js +1 -59
  55. package/src/molecules/gv-category-list.js +1 -49
  56. package/src/molecules/gv-category.js +1 -90
  57. package/src/molecules/gv-code.js +1 -297
  58. package/src/molecules/gv-confirm.js +1 -158
  59. package/src/molecules/gv-cron-editor.js +1 -464
  60. package/src/molecules/gv-dropdown-menu.js +1 -84
  61. package/src/molecules/gv-expandable.js +1 -94
  62. package/src/molecules/gv-expression-language.js +1 -308
  63. package/src/molecules/gv-identity-picture.js +1 -125
  64. package/src/molecules/gv-list.js +1 -135
  65. package/src/molecules/gv-metrics.js +1 -150
  66. package/src/molecules/gv-modal.js +1 -146
  67. package/src/molecules/gv-nav.js +1 -170
  68. package/src/molecules/gv-option.js +1 -169
  69. package/src/molecules/gv-plans.js +1 -306
  70. package/src/molecules/gv-popover.js +1 -231
  71. package/src/molecules/gv-promote.js +1 -91
  72. package/src/molecules/gv-rating-list.js +1 -239
  73. package/src/molecules/gv-rating.js +1 -200
  74. package/src/molecules/gv-row-expandable.js +1 -39
  75. package/src/molecules/gv-row.js +1 -84
  76. package/src/molecules/gv-stats.js +1 -96
  77. package/src/molecules/gv-stepper.js +1 -144
  78. package/src/molecules/gv-table.js +1 -575
  79. package/src/molecules/gv-tree.js +1 -127
  80. package/src/organisms/gv-documentation.js +1 -132
  81. package/src/organisms/gv-header.js +1 -130
  82. package/src/organisms/gv-http-client.js +1 -139
  83. package/src/organisms/gv-menu.js +1 -142
  84. package/src/organisms/gv-newsletter-subscription.js +1 -130
  85. package/src/organisms/gv-pagination.js +1 -170
  86. package/src/organisms/gv-properties.js +1 -699
  87. package/src/organisms/gv-resizable-views.js +1 -178
  88. package/src/organisms/gv-resources.js +1 -428
  89. package/src/organisms/gv-schema-form-array.js +1 -140
  90. package/src/organisms/gv-schema-form-control-object.js +1 -140
  91. package/src/organisms/gv-schema-form-control.js +1 -416
  92. package/src/organisms/gv-schema-form.js +1 -646
  93. package/src/organisms/gv-tabs.js +1 -178
  94. package/src/organisms/gv-user-menu.js +1 -149
  95. package/src/organisms/gv-vertical-menu.js +1 -82
  96. package/src/policy-studio/gv-flow-step.js +1 -304
  97. package/src/policy-studio/gv-flow.js +1 -442
  98. package/src/policy-studio/gv-policy-studio-menu.js +1 -436
  99. package/src/policy-studio/gv-policy-studio.js +1 -1778
  100. package/src/styles/empty.js +1 -19
  101. package/src/styles/input.js +1 -19
  102. package/src/styles/link.js +1 -19
  103. package/src/styles/shapes.js +1 -18
  104. package/src/styles/skeleton.js +1 -19
  105. package/src/styles/zoom.js +1 -19
  106. package/src/theme/gv-theme.js +1 -164
  107. package/wc/gv-autocomplete.js +1 -1
  108. package/wc/gv-button.js +1 -1
  109. package/wc/gv-card-full.js +1 -1
  110. package/wc/gv-card-list.js +1 -1
  111. package/wc/gv-card.js +1 -1
  112. package/wc/gv-category-list.js +1 -1
  113. package/wc/gv-category.js +1 -1
  114. package/wc/gv-chart-bar.js +1 -1
  115. package/wc/gv-chart-gauge.js +1 -1
  116. package/wc/gv-chart-histogram.js +1 -1
  117. package/wc/gv-chart-line.js +1 -1
  118. package/wc/gv-chart-map.js +1 -1
  119. package/wc/gv-chart-pie.js +1 -1
  120. package/wc/gv-checkbox.js +1 -1
  121. package/wc/gv-code.js +1 -1
  122. package/wc/gv-confirm.js +1 -1
  123. package/wc/gv-cron-editor.js +1 -1
  124. package/wc/gv-date-picker-calendar.js +1 -1
  125. package/wc/gv-date-picker-cell.js +1 -1
  126. package/wc/gv-date-picker.js +1 -1
  127. package/wc/gv-documentation.js +1 -1
  128. package/wc/gv-dropdown-menu.js +1 -1
  129. package/wc/gv-expandable.js +1 -1
  130. package/wc/gv-expression-language.js +1 -1
  131. package/wc/gv-file-upload.js +1 -1
  132. package/wc/gv-flow-step.js +1 -1
  133. package/wc/gv-flow.js +1 -1
  134. package/wc/gv-header.js +1 -1
  135. package/wc/gv-http-client.js +1 -1
  136. package/wc/gv-icon.js +1 -1
  137. package/wc/gv-identity-picture.js +1 -1
  138. package/wc/gv-image.js +1 -1
  139. package/wc/gv-input-message.js +1 -1
  140. package/wc/gv-input.js +1 -1
  141. package/wc/gv-link.js +1 -1
  142. package/wc/gv-list.js +1 -1
  143. package/wc/gv-menu.js +1 -1
  144. package/wc/gv-message.js +1 -1
  145. package/wc/gv-metric.js +1 -1
  146. package/wc/gv-metrics.js +1 -1
  147. package/wc/gv-modal.js +1 -1
  148. package/wc/gv-nav.js +1 -1
  149. package/wc/gv-newsletter-subscription.js +1 -1
  150. package/wc/gv-option.js +1 -1
  151. package/wc/gv-pagination.js +1 -1
  152. package/wc/gv-plans.js +1 -1
  153. package/wc/gv-policy-studio-menu.js +1 -1
  154. package/wc/gv-policy-studio.js +1 -1
  155. package/wc/gv-popover.js +1 -1
  156. package/wc/gv-promote.js +1 -1
  157. package/wc/gv-properties.js +1 -1
  158. package/wc/gv-rating-list.js +1 -1
  159. package/wc/gv-rating.js +1 -1
  160. package/wc/gv-relative-time.js +1 -1
  161. package/wc/gv-resizable-views.js +1 -1
  162. package/wc/gv-resources.js +1 -1
  163. package/wc/gv-row-expandable.js +1 -1
  164. package/wc/gv-row.js +1 -1
  165. package/wc/gv-schema-form-array.js +1 -1
  166. package/wc/gv-schema-form-control-object.js +1 -1
  167. package/wc/gv-schema-form-control.js +1 -1
  168. package/wc/gv-schema-form.js +1 -1
  169. package/wc/gv-select-native.js +1 -1
  170. package/wc/gv-select.js +1 -1
  171. package/wc/gv-spinner.js +1 -1
  172. package/wc/gv-state.js +1 -1
  173. package/wc/gv-stats.js +1 -1
  174. package/wc/gv-stepper.js +1 -1
  175. package/wc/gv-switch.js +1 -1
  176. package/wc/gv-table.js +1 -1
  177. package/wc/gv-tabs.js +1 -1
  178. package/wc/gv-tag.js +1 -1
  179. package/wc/gv-text.js +1 -1
  180. package/wc/gv-theme.js +1 -1
  181. package/wc/gv-tree.js +1 -1
  182. package/wc/gv-user-menu.js +1 -1
  183. package/wc/gv-vertical-menu.js +1 -1
@@ -1,442 +1 @@
1
- /*
2
- * Copyright (C) 2015 The Gravitee team (http://gravitee.io)
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { LitElement, html, css } from 'lit';
17
- import { classMap } from 'lit/directives/class-map';
18
- import { dispatchCustomEvent } from '../lib/events';
19
- import '../atoms/gv-image';
20
- import { appendDraggableImage, uuid } from '../lib/utils';
21
- import { PolicyDraggable } from './gv-flow-step';
22
- import { getFlowName, methods } from '../lib/studio';
23
- /**
24
- * Flow component
25
- *
26
- * @fires gv-flow:drop - Drop event
27
- * @fires gv-flow:edit - Edit event
28
- * @fires gv-flow:delete - Delete event
29
- *
30
- * @attr {Object} flow - the flow to display
31
- * @attr {String} selectedStepId - the selected step id
32
- * @attr {Object} targetedPolicy - true, if flow is targeted for drop action
33
- * @attr {Boolean} has-policy-filter - true if policies have onRequest/onResponse properties
34
- * @attr {String} flowsTitle - flows menu title
35
- * @attr {Boolean} disabled - true for disabled
36
- * @attr {Boolean} readonly - true if readonly
37
- */
38
-
39
- export class GvFlow extends LitElement {
40
- static get properties() {
41
- return {
42
- flow: {
43
- type: Object
44
- },
45
- plan: {
46
- type: Object
47
- },
48
- policies: {
49
- type: Object
50
- },
51
- selectedStepId: {
52
- type: String
53
- },
54
- dragPolicy: {
55
- type: Object
56
- },
57
- dropPolicy: {
58
- type: Object
59
- },
60
- disabled: {
61
- type: Boolean,
62
- reflect: true
63
- },
64
- hasPolicyFilter: {
65
- type: Boolean,
66
- attribute: 'has-policy-filter'
67
- },
68
- flowsTitle: {
69
- type: String,
70
- attribute: 'flows-title'
71
- },
72
- readonly: {
73
- type: Boolean,
74
- reflect: true
75
- }
76
- };
77
- }
78
-
79
- constructor() {
80
- super();
81
- this.flowsTitle = 'Flows';
82
- this.addEventListener('mouseleave', this._onMouseLeave);
83
- }
84
-
85
- _onMouseLeave() {
86
- this.dragPolicy = null;
87
- this.dropPolicy = null;
88
- }
89
-
90
- getCandidate() {
91
- return this.shadowRoot.querySelector('gv-flow-step[empty]');
92
- }
93
-
94
- getFlowSteps() {
95
- return Array.from(this.shadowRoot.querySelectorAll('gv-flow-step'));
96
- }
97
-
98
- getOrCreateCandidate() {
99
- let candidate = this.getCandidate();
100
-
101
- if (!candidate) {
102
- candidate = document.createElement('gv-flow-step');
103
- candidate.setAttribute('empty', true);
104
- }
105
-
106
- return candidate;
107
- }
108
-
109
- removeCandidate() {
110
- const candidate = this.getCandidate();
111
-
112
- if (candidate) {
113
- candidate.remove();
114
- }
115
- }
116
-
117
- _canDropPolicy(flowKey, policy) {
118
- if (this.disabled || this.readonly) {
119
- return false;
120
- }
121
-
122
- if (policy != null) {
123
- if (flowKey === 'pre') {
124
- return this.hasPolicyFilter !== true || policy.onRequest === true;
125
- } else if (flowKey === 'post') {
126
- return this.hasPolicyFilter !== true || policy.onResponse === true;
127
- } else {
128
- throw new Error(`The flowkey [${flowKey}] parameter must be "pre" or "post"`);
129
- }
130
- }
131
-
132
- return false;
133
- }
134
-
135
- _onDragOver(flowKey, e) {
136
- if (!this.disabled && !this.readonly) {
137
- if (e.dataTransfer.items.length > 0) {
138
- e.preventDefault();
139
- e.stopPropagation();
140
-
141
- if (this.dropPolicy == null) {
142
- this.dropPolicy = this.dragPolicy;
143
- } else {
144
- this.dragPolicy = this.dropPolicy;
145
- }
146
-
147
- if (this.dropPolicy != null && this._canDropPolicy(flowKey, this.dropPolicy.policy) && !e.target.classList.contains('candidate') && !e.target.hasAttribute('dragging')) {
148
- if (e.target.tagName.toLowerCase() === 'gv-flow-step') {
149
- const {
150
- x,
151
- width
152
- } = e.target.getBoundingClientRect();
153
- const condition = flowKey === 'post' ? e.clientX - x <= width / 2 : e.clientX - x >= width / 2;
154
-
155
- if (condition && !(e.target.nextElementSibling && e.target.nextElementSibling.hasAttribute('dragging'))) {
156
- e.target.insertAdjacentElement('afterend', this.getOrCreateCandidate());
157
- } else if (!(e.target.previousElementSibling && e.target.previousElementSibling.hasAttribute('dragging'))) {
158
- e.target.insertAdjacentElement('beforebegin', this.getOrCreateCandidate());
159
- }
160
- } else if (e.target.classList && e.target.classList.contains('drop-area-grid')) {
161
- const dropAreas = e.target.querySelectorAll('gv-flow-step');
162
-
163
- if (dropAreas.length === 0) {
164
- e.target.prepend(this.getOrCreateCandidate());
165
- }
166
- } else {
167
- this.removeCandidate();
168
- }
169
- }
170
- }
171
- }
172
- }
173
-
174
- _onDragEnd() {
175
- if (!this.disabled && !this.readonly) {
176
- if (this._draggablePolicyImage) {
177
- this._draggablePolicyImage.remove();
178
-
179
- this._draggablePolicyImage = null;
180
- }
181
-
182
- this.dragPolicy = null;
183
- this.dropPolicy = null;
184
- }
185
- }
186
-
187
- _onDragStart(sourceFlowKey, flowStep, sourcePosition, e) {
188
- if (!this.disabled && !this.readonly) {
189
- const policy = this.findPolicy(flowStep.policy);
190
-
191
- if (policy != null) {
192
- // Simulate click on window for close all dropdown menu
193
- const windowClick = document.createEvent('Events');
194
- windowClick.initEvent('click', true, false);
195
- window.dispatchEvent(windowClick);
196
- e.target.setAttribute('dragging', true);
197
- this.shadowRoot.querySelector('.drop-area-grid').classList.add('dragging');
198
- this.dropPolicy = new PolicyDraggable(policy, sourcePosition, sourceFlowKey, this.flow._id, flowStep);
199
- e.dataTransfer.setData('text/plain', this.dropPolicy.toString());
200
-
201
- if (policy) {
202
- const size = 100;
203
- this._draggablePolicyImage = appendDraggableImage(policy.icon, size);
204
- e.dataTransfer.setDragImage(this._draggablePolicyImage, size / 2, size / 2);
205
- }
206
-
207
- dispatchCustomEvent(this, 'drag-start', this.dropPolicy);
208
- }
209
- }
210
- }
211
-
212
- async performUpdate() {
213
- this.getFlowSteps().forEach(s => {
214
- s.requestUpdate();
215
- });
216
- super.performUpdate();
217
- }
218
-
219
- get draggingArea() {
220
- return this.shadowRoot.querySelector('gv-flow-step[dragging]');
221
- }
222
-
223
- _onDrop(flowKey, e) {
224
- this.shadowRoot.querySelectorAll('gv-flow-step').forEach(step => step.resetConfirm());
225
- e.preventDefault();
226
- e.stopPropagation();
227
- const box = e.target.closest('.drop-area-grid');
228
- const candidate = this.getCandidate();
229
- const draggingArea = this.draggingArea;
230
-
231
- if (candidate) {
232
- let position = 0;
233
- [...box.querySelectorAll('gv-flow-step')].some(area => {
234
- if (!area.hasAttribute('empty')) {
235
- position++;
236
- }
237
-
238
- return area.hasAttribute('empty');
239
- });
240
- const {
241
- policy,
242
- sourceFlowKey,
243
- sourceFlowId,
244
- sourcePosition,
245
- flowStep
246
- } = this.dropPolicy;
247
-
248
- const move = () => {
249
- if (draggingArea) {
250
- draggingArea.removeAttribute('dragging');
251
- }
252
-
253
- candidate.remove();
254
- dispatchCustomEvent(this, 'drop', {
255
- flowId: this.flow._id,
256
- flowKey,
257
- position,
258
- flowStep,
259
- policy,
260
- sourcePosition,
261
- sourceFlowKey,
262
- sourceFlowId
263
- });
264
- this.dragPolicy = null;
265
- this.dropPolicy = null;
266
- };
267
-
268
- if (sourceFlowId != null && this.flow._id !== sourceFlowId) {
269
- candidate.setAttribute('confirm', true);
270
- candidate.addEventListener('gv-flow-step:copy', () => {
271
- candidate.remove();
272
- this.dragPolicy = null;
273
- this.dropPolicy = null;
274
- dispatchCustomEvent(this, 'drop', {
275
- flowId: this.flow._id,
276
- flowKey,
277
- position,
278
- policy,
279
- flowStep,
280
- cancelEdit: true
281
- });
282
- });
283
- candidate.addEventListener('gv-flow-step:move', () => {
284
- candidate.remove();
285
- move();
286
- });
287
- } else {
288
- move();
289
- }
290
- } else if (draggingArea) {
291
- draggingArea.removeAttribute('dragging');
292
- this.dragPolicy = null;
293
- this.dropPolicy = null;
294
- }
295
- }
296
-
297
- getFlowStep(flowKey, position) {
298
- return this.flow[flowKey][position];
299
- }
300
-
301
- _onEditStep({
302
- detail: {
303
- step,
304
- policy,
305
- group
306
- }
307
- }) {
308
- dispatchCustomEvent(this, 'edit', {
309
- flow: this.flow,
310
- step,
311
- policy,
312
- group
313
- });
314
- }
315
-
316
- _onDuplicateStep(flowKey, position) {
317
- const step = this.getFlowStep(flowKey, position);
318
- const duplicatePosition = position + 1;
319
- const policy = this.findPolicy(step.policy);
320
- const duplicateStep = { ...step,
321
- _id: uuid()
322
- };
323
- dispatchCustomEvent(this, 'drop', {
324
- flowId: this.flow._id,
325
- flowKey,
326
- position: duplicatePosition,
327
- flowStep: duplicateStep,
328
- policy
329
- });
330
- }
331
-
332
- _isEditable(step) {
333
- return this.selectedStepId && this.selectedStepId === step._id;
334
- }
335
-
336
- _onDeleteStep(flowKey, position, e) {
337
- dispatchCustomEvent(this, 'delete', {
338
- flowKey,
339
- position,
340
- flowId: this.flow._id,
341
- target: e.target
342
- });
343
- }
344
-
345
- _onChangeStepState(flowKey, position, {
346
- detail
347
- }) {
348
- dispatchCustomEvent(this, 'change-state', {
349
- flowKey,
350
- position,
351
- flowId: this.flow._id,
352
- ...detail
353
- });
354
- }
355
-
356
- _renderDropStep(group, step, position) {
357
- if (step) {
358
- return html`<gv-flow-step .step="${step}" .policy="${this.findPolicy(step.policy)}" .id="${step._id}" .group="${group}" .parent="${this.flow._id}" ?disabled="${this.disabled}" ?readonly="${this.readonly}" .draggable="${!this.disabled && !this.readonly}" ?editing="${this._isEditable(step)}" @dragstart="${this._onDragStart.bind(this, group, step, position)}" @dragend="${this._onDragEnd}" @gv-flow-step:edit="${this._onEditStep}" @gv-flow-step:change-state="${this._onChangeStepState.bind(this, group, position)}" @gv-flow-step:delete="${this._onDeleteStep.bind(this, group, position)}" @gv-flow-step:duplicate="${this._onDuplicateStep.bind(this, group, position)}"></gv-flow-step>`;
359
- } else {
360
- return html``;
361
- }
362
- }
363
-
364
- async getUpdateComplete() {
365
- await super.getUpdateComplete();
366
- await Promise.all(this.getFlowSteps().map(e => e.updateComplete));
367
- }
368
-
369
- updated(properties) {
370
- if (properties.has('data')) {
371
- this.onDragEnd();
372
- }
373
-
374
- if (properties.has('dropPolicy') || properties.has('dragPolicy')) {
375
- if (this.dropPolicy == null && this.dragPolicy == null) {
376
- this.removeCandidate();
377
- }
378
- }
379
- }
380
-
381
- onDragEnd() {
382
- setTimeout(() => {
383
- this.shadowRoot.querySelector('.drop-area-grid').classList.remove('dragging');
384
- this.removeCandidate();
385
- const draggingArea = this.draggingArea;
386
-
387
- if (draggingArea) {
388
- draggingArea.removeAttribute('dragging');
389
- }
390
- }, 0);
391
- }
392
-
393
- _getLabel(flowKey) {
394
- if (this.flow.type) {
395
- return html` <div class="drop-box-type">${flowKey}</div> <div>${this.flow.type.toUpperCase() === 'ROOT' ? 'flow' : this.flow.type}</div> `;
396
- } else if (flowKey === 'pre') {
397
- return 'request';
398
- } else if (flowKey === 'post') {
399
- return 'response';
400
- }
401
-
402
- return '';
403
- }
404
-
405
- get collectionName() {
406
- return this.plan != null ? this.plan.name : this.flowsTitle;
407
- }
408
-
409
- render() {
410
- const preTarget = this.dragPolicy && (this.hasPolicyFilter !== true || this.dragPolicy.policy.onRequest);
411
- const postTarget = this.dragPolicy && (this.hasPolicyFilter !== true || this.dragPolicy.policy.onResponse);
412
- const preForbidden = this.dragPolicy && this.hasPolicyFilter === true && !this.dragPolicy.policy.onRequest;
413
- const postForbidden = this.dragPolicy && this.hasPolicyFilter === true && !this.dragPolicy.policy.onResponse;
414
- const hasPost = this.flow.type == null || this.flow.type && this.flow.type.toLowerCase() !== 'root';
415
- return html`<div class="box"> <div class="container"> <div class="header"> <div class="title">${getFlowName(this.flow, this.collectionName)}</div> </div> <div class="content"> <div class="flow"> <div class="${classMap({
416
- pre: true,
417
- targeted: preTarget,
418
- forbidden: preForbidden
419
- })}"> <div class="arrow arrow-right"></div> <div class="drop-box" @drop="${this._onDrop.bind(this, 'pre')}" @dragend="${this.onDragEnd}" @dragover="${this._onDragOver.bind(this, 'pre')}"> <div class="drop-box-title">${preTarget ? 'drop here' : this._getLabel('pre')}</div> <div class="drop-area-grid">${this.flow.pre.map((flowStep, i) => this._renderDropStep('pre', flowStep, i))}</div> </div> </div> ${hasPost ? html` <div class="${classMap({
420
- post: true,
421
- targeted: postTarget,
422
- forbidden: postForbidden
423
- })}"> <div class="arrow arrow-left"> </div> <div class="drop-box" @drop="${this._onDrop.bind(this, 'post')}" @dragend="${this.onDragEnd}" @dragover="${this._onDragOver.bind(this, 'post')}"> <div class="drop-area-grid drop-area-grid-reverse"> ${this.flow.post.map((flowStep, i) => this._renderDropStep('post', flowStep, i))} </div> <div class="drop-box-title">${postTarget ? 'drop here' : this._getLabel('post')}</div> </div> </div> ` : ''} </div> </div> </div> </div>`;
424
- }
425
-
426
- findPolicy(policyId) {
427
- const policy = this.policies.find(p => p.id === policyId);
428
-
429
- if (policy == null) {// throw new Error(`Policy ${policyId} not found`);
430
- }
431
-
432
- return policy;
433
- }
434
-
435
- static get styles() {
436
- return [methods, // language=CSS
437
- css`:host{box-sizing:border-box;position:relative;display:block;height:100%}.flow{padding-left:20px;display:flex;height:100%;flex-direction:column}.drop-area-grid{flex:1;border:1px dashed transparent;transition:all 350ms ease-in-out;position:relative;display:flex;flex-wrap:wrap;max-width:calc(100% - 40px);align-items:center;min-height:150px;box-sizing:border-box;padding:0 30px}.targeted .drop-area-grid{border:1px dashed #d9d9d9}.forbidden .drop-area-grid{background-color:#efefef;opacity:.2}gv-flow-step{flex:1}.message{text-transform:uppercase;color:#d9d9d9;opacity:0;transition:opacity 350ms ease-in-out;font-size:18px;text-align:center;align-self:center}.message{width:100%}.targeted .message{opacity:1}.targeted .drop-area-empty{opacity:0;transition:all 350ms ease-in-out}.post,.pre{position:relative;flex:1;display:flex}.arrow{background-color:#d9d9d9;width:calc(100% - 50px * 2 - 1px);text-align:center;position:absolute;margin:0 30px;color:#262626;top:calc(50% - 20px);height:40px}.arrow-right::after{width:0;height:0;border-top:40px solid transparent;border-bottom:40px solid transparent;border-left:40px solid #d9d9d9;content:' ';position:absolute;right:-20px;top:-20px}.drop-box-type{position:relative;writing-mode:horizontal-tb;margin-bottom:10px}.drop-box-title{position:relative;writing-mode:vertical-lr;text-orientation:upright;text-transform:uppercase;color:#bfbfbf;font-size:13px;font-weight:500;text-align:center;max-height:145px;line-height:13px;display:flex;align-items:center;min-width:30px}.pre .drop-box-title{position:absolute;left:-30px}.arrow-left::after{width:0;height:0;border-top:40px solid transparent;border-bottom:40px solid transparent;border-right:40px solid #d9d9d9;content:' ';position:absolute;left:-20px;top:-20px}.drop-box{display:flex;border:1px solid transparent;margin:0 30px;align-items:center;position:relative;width:100%}.drop-area-grid-reverse{flex-direction:row-reverse}.header{border-bottom:1px solid #d9d9d9;display:flex;min-height:45px;margin-bottom:.5rem}.header .title{color:#28444f;font-size:18px;display:flex;align-items:center;margin:0 .5rem;width:100%}.header .title .flow-path{flex:1}.box{position:absolute;display:flex;flex-direction:column;width:100%;top:0;bottom:0;left:0}.container{flex-grow:1;display:flex;flex-direction:column;min-height:0;height:100%}.content{background:#fff;flex-grow:1;overflow:auto;min-height:0;padding:.5rem}`];
438
- }
439
-
440
- }
441
- window.customElements.define('gv-flow', GvFlow);
442
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL3BvbGljeS1zdHVkaW8vZ3YtZmxvdy5qcyJdLCJuYW1lcyI6WyJMaXRFbGVtZW50IiwiaHRtbCIsImNzcyIsImNsYXNzTWFwIiwiZGlzcGF0Y2hDdXN0b21FdmVudCIsImFwcGVuZERyYWdnYWJsZUltYWdlIiwidXVpZCIsIlBvbGljeURyYWdnYWJsZSIsImdldEZsb3dOYW1lIiwibWV0aG9kcyIsIkd2RmxvdyIsInByb3BlcnRpZXMiLCJmbG93IiwidHlwZSIsIk9iamVjdCIsInBsYW4iLCJwb2xpY2llcyIsInNlbGVjdGVkU3RlcElkIiwiU3RyaW5nIiwiZHJhZ1BvbGljeSIsImRyb3BQb2xpY3kiLCJkaXNhYmxlZCIsIkJvb2xlYW4iLCJyZWZsZWN0IiwiaGFzUG9saWN5RmlsdGVyIiwiYXR0cmlidXRlIiwiZmxvd3NUaXRsZSIsInJlYWRvbmx5IiwiY29uc3RydWN0b3IiLCJhZGRFdmVudExpc3RlbmVyIiwiX29uTW91c2VMZWF2ZSIsImdldENhbmRpZGF0ZSIsInNoYWRvd1Jvb3QiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0Rmxvd1N0ZXBzIiwiQXJyYXkiLCJmcm9tIiwicXVlcnlTZWxlY3RvckFsbCIsImdldE9yQ3JlYXRlQ2FuZGlkYXRlIiwiY2FuZGlkYXRlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwicmVtb3ZlQ2FuZGlkYXRlIiwicmVtb3ZlIiwiX2NhbkRyb3BQb2xpY3kiLCJmbG93S2V5IiwicG9saWN5Iiwib25SZXF1ZXN0Iiwib25SZXNwb25zZSIsIkVycm9yIiwiX29uRHJhZ092ZXIiLCJlIiwiZGF0YVRyYW5zZmVyIiwiaXRlbXMiLCJsZW5ndGgiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsInRhcmdldCIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiaGFzQXR0cmlidXRlIiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwieCIsIndpZHRoIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiY29uZGl0aW9uIiwiY2xpZW50WCIsIm5leHRFbGVtZW50U2libGluZyIsImluc2VydEFkamFjZW50RWxlbWVudCIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJkcm9wQXJlYXMiLCJwcmVwZW5kIiwiX29uRHJhZ0VuZCIsIl9kcmFnZ2FibGVQb2xpY3lJbWFnZSIsIl9vbkRyYWdTdGFydCIsInNvdXJjZUZsb3dLZXkiLCJmbG93U3RlcCIsInNvdXJjZVBvc2l0aW9uIiwiZmluZFBvbGljeSIsIndpbmRvd0NsaWNrIiwiY3JlYXRlRXZlbnQiLCJpbml0RXZlbnQiLCJ3aW5kb3ciLCJkaXNwYXRjaEV2ZW50IiwiYWRkIiwiX2lkIiwic2V0RGF0YSIsInRvU3RyaW5nIiwic2l6ZSIsImljb24iLCJzZXREcmFnSW1hZ2UiLCJwZXJmb3JtVXBkYXRlIiwiZm9yRWFjaCIsInMiLCJyZXF1ZXN0VXBkYXRlIiwiZHJhZ2dpbmdBcmVhIiwiX29uRHJvcCIsInN0ZXAiLCJyZXNldENvbmZpcm0iLCJib3giLCJjbG9zZXN0IiwicG9zaXRpb24iLCJzb21lIiwiYXJlYSIsInNvdXJjZUZsb3dJZCIsIm1vdmUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJmbG93SWQiLCJjYW5jZWxFZGl0IiwiZ2V0Rmxvd1N0ZXAiLCJfb25FZGl0U3RlcCIsImRldGFpbCIsImdyb3VwIiwiX29uRHVwbGljYXRlU3RlcCIsImR1cGxpY2F0ZVBvc2l0aW9uIiwiZHVwbGljYXRlU3RlcCIsIl9pc0VkaXRhYmxlIiwiX29uRGVsZXRlU3RlcCIsIl9vbkNoYW5nZVN0ZXBTdGF0ZSIsIl9yZW5kZXJEcm9wU3RlcCIsImJpbmQiLCJnZXRVcGRhdGVDb21wbGV0ZSIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJ1cGRhdGVDb21wbGV0ZSIsInVwZGF0ZWQiLCJoYXMiLCJvbkRyYWdFbmQiLCJzZXRUaW1lb3V0IiwiX2dldExhYmVsIiwidG9VcHBlckNhc2UiLCJjb2xsZWN0aW9uTmFtZSIsIm5hbWUiLCJyZW5kZXIiLCJwcmVUYXJnZXQiLCJwb3N0VGFyZ2V0IiwicHJlRm9yYmlkZGVuIiwicG9zdEZvcmJpZGRlbiIsImhhc1Bvc3QiLCJwcmUiLCJ0YXJnZXRlZCIsImZvcmJpZGRlbiIsImkiLCJwb3N0IiwicG9saWN5SWQiLCJmaW5kIiwicCIsImlkIiwic3R5bGVzIiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFVBQVQsRUFBcUJDLElBQXJCLEVBQTJCQyxHQUEzQixRQUFzQyxLQUF0QztBQUNBLFNBQVNDLFFBQVQsUUFBeUIsMEJBQXpCO0FBQ0EsU0FBU0MsbUJBQVQsUUFBb0MsZUFBcEM7QUFDQSxPQUFPLG1CQUFQO0FBQ0EsU0FBU0Msb0JBQVQsRUFBK0JDLElBQS9CLFFBQTJDLGNBQTNDO0FBQ0EsU0FBU0MsZUFBVCxRQUFnQyxnQkFBaEM7QUFDQSxTQUFTQyxXQUFULEVBQXNCQyxPQUF0QixRQUFxQyxlQUFyQztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLE1BQU1DLE1BQU4sU0FBcUJWLFVBQXJCLENBQWdDO0FBQ2hCLGFBQVZXLFVBQVUsR0FBRztBQUN0QixXQUFPO0FBQ0xDLE1BQUFBLElBQUksRUFBRTtBQUFFQyxRQUFBQSxJQUFJLEVBQUVDO0FBQVIsT0FERDtBQUVMQyxNQUFBQSxJQUFJLEVBQUU7QUFBRUYsUUFBQUEsSUFBSSxFQUFFQztBQUFSLE9BRkQ7QUFHTEUsTUFBQUEsUUFBUSxFQUFFO0FBQUVILFFBQUFBLElBQUksRUFBRUM7QUFBUixPQUhMO0FBSUxHLE1BQUFBLGNBQWMsRUFBRTtBQUFFSixRQUFBQSxJQUFJLEVBQUVLO0FBQVIsT0FKWDtBQUtMQyxNQUFBQSxVQUFV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QVFrQixLQUFLOUcsSUFBTCxDQUFVc0ksSUFBVixDQUFlcEIsR0FBZixDQUFtQixDQUFDaEQsUUFBRCxFQUFXbUUsQ0FBWCxLQUFpQixLQUFLeEIsZUFBTCxDQUFxQixNQUFyQixFQUE2QjNDLFFBQTdCLEVBQXVDbUUsQ0FBdkMsQ0FBcEMsQ0FSbEIsdUNBVTJDUCxVQUFVLEdBQUcsV0FBSCxHQUFpQixLQUFLTixTQUFMLENBQWUsTUFBZixDQVZ0RSx1QkFEQyxHQWVMLEVBbkNELDhCQUFYO0FBd0NEOztBQUVEcEQsRUFBQUEsVUFBVSxDQUFDbUUsUUFBRCxFQUFXO0FBQ25CLFVBQU1wRyxNQUFNLEdBQUcsS0FBSy9CLFFBQUwsQ0FBY29JLElBQWQsQ0FBb0JDLENBQUQsSUFBT0EsQ0FBQyxDQUFDQyxFQUFGLEtBQVNILFFBQW5DLENBQWY7O0FBQ0EsUUFBSXBHLE1BQU0sSUFBSSxJQUFkLEVBQW9CLENBQ2xCO0FBQ0Q7O0FBQ0QsV0FBT0EsTUFBUDtBQUNEOztBQUVnQixhQUFOd0csTUFBTSxHQUFHO0FBQ2xCLFdBQU8sQ0FDTDlJLE9BREssRUFFTDtBQUNBUCxJQUFBQSxHQUFHLDAxRUFIRSxDQUFQO0FBMk1EOztBQW5rQm9DO0FBc2tCdkNrRixNQUFNLENBQUNvRSxjQUFQLENBQXNCQyxNQUF0QixDQUE2QixTQUE3QixFQUF3Qy9JLE1BQXhDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwsIGNzcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBjbGFzc01hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2NsYXNzLW1hcCc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgJy4uL2F0b21zL2d2LWltYWdlJztcbmltcG9ydCB7IGFwcGVuZERyYWdnYWJsZUltYWdlLCB1dWlkIH0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IFBvbGljeURyYWdnYWJsZSB9IGZyb20gJy4vZ3YtZmxvdy1zdGVwJztcbmltcG9ydCB7IGdldEZsb3dOYW1lLCBtZXRob2RzIH0gZnJvbSAnLi4vbGliL3N0dWRpbyc7XG5cbi8qKlxuICogRmxvdyBjb21wb25lbnRcbiAqXG4gKiBAZmlyZXMgZ3YtZmxvdzpkcm9wIC0gRHJvcCBldmVudFxuICogQGZpcmVzIGd2LWZsb3c6ZWRpdCAtIEVkaXQgZXZlbnRcbiAqIEBmaXJlcyBndi1mbG93OmRlbGV0ZSAtIERlbGV0ZSBldmVudFxuICpcbiAqIEBhdHRyIHtPYmplY3R9IGZsb3cgLSB0aGUgZmxvdyB0byBkaXNwbGF5XG4gKiBAYXR0ciB7U3RyaW5nfSBzZWxlY3RlZFN0ZXBJZCAtIHRoZSBzZWxlY3RlZCBzdGVwIGlkXG4gKiBAYXR0ciB7T2JqZWN0fSB0YXJnZXRlZFBvbGljeSAtIHRydWUsIGlmIGZsb3cgaXMgdGFyZ2V0ZWQgZm9yIGRyb3AgYWN0aW9uXG4gKiBAYXR0ciB7Qm9vbGVhbn0gaGFzLXBvbGljeS1maWx0ZXIgLSB0cnVlIGlmIHBvbGljaWVzIGhhdmUgb25SZXF1ZXN0L29uUmVzcG9uc2UgcHJvcGVydGllc1xuICogQGF0dHIge1N0cmluZ30gZmxvd3NUaXRsZSAtIGZsb3dzIG1lbnUgdGl0bGVcbiAqIEBhdHRyIHtCb29sZWFufSBkaXNhYmxlZCAtIHRydWUgZm9yIGRpc2FibGVkXG4gKiBAYXR0ciB7Qm9vbGVhbn0gcmVhZG9ubHkgLSB0cnVlIGlmIHJlYWRvbmx5XG4gKi9cbmV4cG9ydCBjbGFzcyBHdkZsb3cgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmbG93OiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgcGxhbjogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIHBvbGljaWVzOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgc2VsZWN0ZWRTdGVwSWQ6IHsgdHlwZTogU3RyaW5nIH0sXG4gICAgICBkcmFnUG9saWN5OiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgZHJvcFBvbGljeTogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIGhhc1BvbGljeUZpbHRlcjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtcG9saWN5LWZpbHRlcicgfSxcbiAgICAgIGZsb3dzVGl0bGU6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdmbG93cy10aXRsZScgfSxcbiAgICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmZsb3dzVGl0bGUgPSAnRmxvd3MnO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMuX29uTW91c2VMZWF2ZSk7XG4gIH1cblxuICBfb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuZHJhZ1BvbGljeSA9IG51bGw7XG4gICAgdGhpcy5kcm9wUG9saWN5ID0gbnVsbDtcbiAgfVxuXG4gIGdldENhbmRpZGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2d2LWZsb3ctc3RlcFtlbXB0eV0nKTtcbiAgfVxuXG4gIGdldEZsb3dTdGVwcygpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtZmxvdy1zdGVwJykpO1xuICB9XG5cbiAgZ2V0T3JDcmVhdGVDYW5kaWRhdGUoKSB7XG4gICAgbGV0IGNhbmRpZGF0ZSA9IHRoaXMuZ2V0Q2FuZGlkYXRlKCk7XG4gICAgaWYgKCFjYW5kaWRhdGUpIHtcbiAgICAgIGNhbmRpZGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2d2LWZsb3ctc3RlcCcpO1xuICAgICAgY2FuZGlkYXRlLnNldEF0dHJpYnV0ZSgnZW1wdHknLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuXG4gIHJlbW92ZUNhbmRpZGF0ZSgpIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSB0aGlzLmdldENhbmRpZGF0ZSgpO1xuICAgIGlmIChjYW5kaWRhdGUpIHtcbiAgICAgIGNhbmRpZGF0ZS5yZW1vdmUoKTtcbiAgICB9XG4gIH1cblxuICBfY2FuRHJvcFBvbGljeShmbG93S2V5LCBwb2xpY3kpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwb2xpY3kgIT0gbnVsbCkge1xuICAgICAgaWYgKGZsb3dLZXkgPT09ICdwcmUnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1BvbGljeUZpbHRlciAhPT0gdHJ1ZSB8fCBwb2xpY3kub25SZXF1ZXN0ID09PSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChmbG93S2V5ID09PSAncG9zdCcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUG9saWN5RmlsdGVyICE9PSB0cnVlIHx8IHBvbGljeS5vblJlc3BvbnNlID09PSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmxvd2tleSBbJHtmbG93S2V5fV0gcGFyYW1ldGVyIG11c3QgYmUgXCJwcmVcIiBvciBcInBvc3RcImApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBfb25EcmFnT3ZlcihmbG93S2V5LCBlKSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLnJlYWRvbmx5KSB7XG4gICAgICBpZiAoZS5kYXRhVHJhbnNmZXIuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLmRyb3BQb2xpY3kgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuZHJvcFBvbGljeSA9IHRoaXMuZHJhZ1BvbGljeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRyYWdQb2xpY3kgPSB0aGlzLmRyb3BQb2xpY3k7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5kcm9wUG9saWN5ICE9IG51bGwgJiZcbiAgICAgICAgICB0aGlzLl9jYW5Ecm9wUG9saWN5KGZsb3dLZXksIHRoaXMuZHJvcFBvbGljeS5wb2xpY3kpICYmXG4gICAgICAgICAgIWUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnY2FuZGlkYXRlJykgJiZcbiAgICAgICAgICAhZS50YXJnZXQuaGFzQXR0cmlidXRlKCdkcmFnZ2luZycpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChlLnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdndi1mbG93LXN0ZXAnKSB7XG4gICAgICAgICAgICBjb25zdCB7IHgsIHdpZHRoIH0gPSBlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IGZsb3dLZXkgPT09ICdwb3N0JyA/IGUuY2xpZW50WCAtIHggPD0gd2lkdGggLyAyIDogZS5jbGllbnRYIC0geCA+PSB3aWR0aCAvIDI7XG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uICYmICEoZS50YXJnZXQubmV4dEVsZW1lbnRTaWJsaW5nICYmIGUudGFyZ2V0Lm5leHRFbGVtZW50U2libGluZy5oYXNBdHRyaWJ1dGUoJ2RyYWdnaW5nJykpKSB7XG4gICAgICAgICAgICAgIGUudGFyZ2V0Lmluc2VydEFkamFjZW50RWxlbWVudCgnYWZ0ZXJlbmQnLCB0aGlzLmdldE9yQ3JlYXRlQ2FuZGlkYXRlKCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghKGUudGFyZ2V0LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgZS50YXJnZXQucHJldmlvdXNFbGVtZW50U2libGluZy5oYXNBdHRyaWJ1dGUoJ2RyYWdnaW5nJykpKSB7XG4gICAgICAgICAgICAgIGUudGFyZ2V0Lmluc2VydEFkamFjZW50RWxlbWVudCgnYmVmb3JlYmVnaW4nLCB0aGlzLmdldE9yQ3JlYXRlQ2FuZGlkYXRlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZS50YXJnZXQuY2xhc3NMaXN0ICYmIGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZHJvcC1hcmVhLWdyaWQnKSkge1xuICAgICAgICAgICAgY29uc3QgZHJvcEFyZWFzID0gZS50YXJnZXQucXVlcnlTZWxlY3RvckFsbCgnZ3YtZmxvdy1zdGVwJyk7XG4gICAgICAgICAgICBpZiAoZHJvcEFyZWFzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBlLnRhcmdldC5wcmVwZW5kKHRoaXMuZ2V0T3JDcmVhdGVDYW5kaWRhdGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2FuZGlkYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX29uRHJhZ0VuZCgpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHkpIHtcbiAgICAgIGlmICh0aGlzLl9kcmFnZ2FibGVQb2xpY3lJbWFnZSkge1xuICAgICAgICB0aGlzLl9kcmFnZ2FibGVQb2xpY3lJbWFnZS5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlUG9saWN5SW1hZ2UgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5kcmFnUG9saWN5ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJvcFBvbGljeSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgX29uRHJhZ1N0YXJ0KHNvdXJjZUZsb3dLZXksIGZsb3dTdGVwLCBzb3VyY2VQb3NpdGlvbiwgZSkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSkge1xuICAgICAgY29uc3QgcG9saWN5ID0gdGhpcy5maW5kUG9saWN5KGZsb3dTdGVwLnBvbGljeSk7XG4gICAgICBpZiAocG9saWN5ICE9IG51bGwpIHtcbiAgICAgICAgLy8gU2ltdWxhdGUgY2xpY2sgb24gd2luZG93IGZvciBjbG9zZSBhbGwgZHJvcGRvd24gbWVudVxuICAgICAgICBjb25zdCB3aW5kb3dDbGljayA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudHMnKTtcbiAgICAgICAgd2luZG93Q2xpY2suaW5pdEV2ZW50KCdjbGljaycsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQod2luZG93Q2xpY2spO1xuICAgICAgICBlLnRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RyYWdnaW5nJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcuZHJvcC1hcmVhLWdyaWQnKS5jbGFzc0xpc3QuYWRkKCdkcmFnZ2luZycpO1xuXG4gICAgICAgIHRoaXMuZHJvcFBvbGljeSA9IG5ldyBQb2xpY3lEcmFnZ2FibGUocG9saWN5LCBzb3VyY2VQb3NpdGlvbiwgc291cmNlRmxvd0tleSwgdGhpcy5mbG93Ll9pZCwgZmxvd1N0ZXApO1xuICAgICAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L3BsYWluJywgdGhpcy5kcm9wUG9saWN5LnRvU3RyaW5nKCkpO1xuICAgICAgICBpZiAocG9saWN5KSB7XG4gICAgICAgICAgY29uc3Qgc2l6ZSA9IDEwMDtcbiAgICAgICAgICB0aGlzLl9kcmFnZ2FibGVQb2xpY3lJbWFnZSA9IGFwcGVuZERyYWdnYWJsZUltYWdlKHBvbGljeS5pY29uLCBzaXplKTtcbiAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UodGhpcy5fZHJhZ2dhYmxlUG9saWN5SW1hZ2UsIHNpemUgLyAyLCBzaXplIC8gMik7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZHJhZy1zdGFydCcsIHRoaXMuZHJvcFBvbGljeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcGVyZm9ybVVwZGF0ZSgpIHtcbiAgICB0aGlzLmdldEZsb3dTdGVwcygpLmZvckVhY2goKHMpID0+IHtcbiAgICAgIHMucmVxdWVzdFVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIHN1cGVyLnBlcmZvcm1VcGRhdGUoKTtcbiAgfVxuXG4gIGdldCBkcmFnZ2luZ0FyZWEoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1mbG93LXN0ZXBbZHJhZ2dpbmddJyk7XG4gIH1cblxuICBfb25Ecm9wKGZsb3dLZXksIGUpIHtcbiAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtZmxvdy1zdGVwJykuZm9yRWFjaCgoc3RlcCkgPT4gc3RlcC5yZXNldENvbmZpcm0oKSk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgYm94ID0gZS50YXJnZXQuY2xvc2VzdCgnLmRyb3AtYXJlYS1ncmlkJyk7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gdGhpcy5nZXRDYW5kaWRhdGUoKTtcbiAgICBjb25zdCBkcmFnZ2luZ0FyZWEgPSB0aGlzLmRyYWdnaW5nQXJlYTtcbiAgICBpZiAoY2FuZGlkYXRlKSB7XG4gICAgICBsZXQgcG9zaXRpb24gPSAwO1xuICAgICAgWy4uLmJveC5xdWVyeVNlbGVjdG9yQWxsKCdndi1mbG93LXN0ZXAnKV0uc29tZSgoYXJlYSkgPT4ge1xuICAgICAgICBpZiAoIWFyZWEuaGFzQXR0cmlidXRlKCdlbXB0eScpKSB7XG4gICAgICAgICAgcG9zaXRpb24rKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJlYS5oYXNBdHRyaWJ1dGUoJ2VtcHR5Jyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHsgcG9saWN5LCBzb3VyY2VGbG93S2V5LCBzb3VyY2VGbG93SWQsIHNvdXJjZVBvc2l0aW9uLCBmbG93U3RlcCB9ID0gdGhpcy5kcm9wUG9saWN5O1xuICAgICAgY29uc3QgbW92ZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKGRyYWdnaW5nQXJlYSkge1xuICAgICAgICAgIGRyYWdnaW5nQXJlYS5yZW1vdmVBdHRyaWJ1dGUoJ2RyYWdnaW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FuZGlkYXRlLnJlbW92ZSgpO1xuICAgICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdkcm9wJywge1xuICAgICAgICAgIGZsb3dJZDogdGhpcy5mbG93Ll9pZCxcbiAgICAgICAgICBmbG93S2V5LFxuICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgIGZsb3dTdGVwLFxuICAgICAgICAgIHBvbGljeSxcbiAgICAgICAgICBzb3VyY2VQb3NpdGlvbixcbiAgICAgICAgICBzb3VyY2VGbG93S2V5LFxuICAgICAgICAgIHNvdXJjZUZsb3dJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZHJhZ1BvbGljeSA9IG51bGw7XG4gICAgICAgIHRoaXMuZHJvcFBvbGljeSA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBpZiAoc291cmNlRmxvd0lkICE9IG51bGwgJiYgdGhpcy5mbG93Ll9pZCAhPT0gc291cmNlRmxvd0lkKSB7XG4gICAgICAgIGNhbmRpZGF0ZS5zZXRBdHRyaWJ1dGUoJ2NvbmZpcm0nLCB0cnVlKTtcbiAgICAgICAgY2FuZGlkYXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2d2LWZsb3ctc3RlcDpjb3B5JywgKCkgPT4ge1xuICAgICAgICAgIGNhbmRpZGF0ZS5yZW1vdmUoKTtcbiAgICAgICAgICB0aGlzLmRyYWdQb2xpY3kgPSBudWxsO1xuICAgICAgICAgIHRoaXMuZHJvcFBvbGljeSA9IG51bGw7XG4gICAgICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZHJvcCcsIHtcbiAgICAgICAgICAgIGZsb3dJZDogdGhpcy5mbG93Ll9pZCxcbiAgICAgICAgICAgIGZsb3dLZXksXG4gICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgIHBvbGljeSxcbiAgICAgICAgICAgIGZsb3dTdGVwLFxuICAgICAgICAgICAgY2FuY2VsRWRpdDogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2FuZGlkYXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2d2LWZsb3ctc3RlcDptb3ZlJywgKCkgPT4ge1xuICAgICAgICAgIGNhbmRpZGF0ZS5yZW1vdmUoKTtcbiAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbW92ZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZHJhZ2dpbmdBcmVhKSB7XG4gICAgICBkcmFnZ2luZ0FyZWEucmVtb3ZlQXR0cmlidXRlKCdkcmFnZ2luZycpO1xuICAgICAgdGhpcy5kcmFnUG9saWN5ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJvcFBvbGljeSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0Rmxvd1N0ZXAoZmxvd0tleSwgcG9zaXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5mbG93W2Zsb3dLZXldW3Bvc2l0aW9uXTtcbiAgfVxuXG4gIF9vbkVkaXRTdGVwKHsgZGV0YWlsOiB7IHN0ZXAsIHBvbGljeSwgZ3JvdXAgfSB9KSB7XG4gICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZWRpdCcsIHsgZmxvdzogdGhpcy5mbG93LCBzdGVwLCBwb2xpY3ksIGdyb3VwIH0pO1xuICB9XG5cbiAgX29uRHVwbGljYXRlU3RlcChmbG93S2V5LCBwb3NpdGlvbikge1xuICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmdldEZsb3dTdGVwKGZsb3dLZXksIHBvc2l0aW9uKTtcbiAgICBjb25zdCBkdXBsaWNhdGVQb3NpdGlvbiA9IHBvc2l0aW9uICsgMTtcbiAgICBjb25zdCBwb2xpY3kgPSB0aGlzLmZpbmRQb2xpY3koc3RlcC5wb2xpY3kpO1xuICAgIGNvbnN0IGR1cGxpY2F0ZVN0ZXAgPSB7IC4uLnN0ZXAsIF9pZDogdXVpZCgpIH07XG4gICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZHJvcCcsIHtcbiAgICAgIGZsb3dJZDogdGhpcy5mbG93Ll9pZCxcbiAgICAgIGZsb3dLZXksXG4gICAgICBwb3NpdGlvbjogZHVwbGljYXRlUG9zaXRpb24sXG4gICAgICBmbG93U3RlcDogZHVwbGljYXRlU3RlcCxcbiAgICAgIHBvbGljeSxcbiAgICB9KTtcbiAgfVxuXG4gIF9pc0VkaXRhYmxlKHN0ZXApIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFN0ZXBJZCAmJiB0aGlzLnNlbGVjdGVkU3RlcElkID09PSBzdGVwLl9pZDtcbiAgfVxuXG4gIF9vbkRlbGV0ZVN0ZXAoZmxvd0tleSwgcG9zaXRpb24sIGUpIHtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdkZWxldGUnLCB7IGZsb3dLZXksIHBvc2l0aW9uLCBmbG93SWQ6IHRoaXMuZmxvdy5faWQsIHRhcmdldDogZS50YXJnZXQgfSk7XG4gIH1cblxuICBfb25DaGFuZ2VTdGVwU3RhdGUoZmxvd0tleSwgcG9zaXRpb24sIHsgZGV0YWlsIH0pIHtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdjaGFuZ2Utc3RhdGUnLCB7IGZsb3dLZXksIHBvc2l0aW9uLCBmbG93SWQ6IHRoaXMuZmxvdy5faWQsIC4uLmRldGFpbCB9KTtcbiAgfVxuXG4gIF9yZW5kZXJEcm9wU3RlcChncm91cCwgc3RlcCwgcG9zaXRpb24pIHtcbiAgICBpZiAoc3RlcCkge1xuICAgICAgcmV0dXJuIGh0bWxgPGd2LWZsb3ctc3RlcFxuICAgICAgICAuc3RlcD1cIiR7c3RlcH1cIlxuICAgICAgICAucG9saWN5PVwiJHt0aGlzLmZpbmRQb2xpY3koc3RlcC5wb2xpY3kpfVwiXG4gICAgICAgIC5pZD1cIiR7c3RlcC5faWR9XCJcbiAgICAgICAgLmdyb3VwPVwiJHtncm91cH1cIlxuICAgICAgICAucGFyZW50PVwiJHt0aGlzLmZsb3cuX2lkfVwiXG4gICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5kaXNhYmxlZH1cIlxuICAgICAgICA/cmVhZG9ubHk9XCIke3RoaXMucmVhZG9ubHl9XCJcbiAgICAgICAgLmRyYWdnYWJsZT1cIiR7IXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHl9XCJcbiAgICAgICAgP2VkaXRpbmc9XCIke3RoaXMuX2lzRWRpdGFibGUoc3RlcCl9XCJcbiAgICAgICAgQGRyYWdzdGFydD1cIiR7dGhpcy5fb25EcmFnU3RhcnQuYmluZCh0aGlzLCBncm91cCwgc3RlcCwgcG9zaXRpb24pfVwiXG4gICAgICAgIEBkcmFnZW5kPVwiJHt0aGlzLl9vbkRyYWdFbmR9XCJcbiAgICAgICAgQGd2LWZsb3ctc3RlcDplZGl0PVwiJHt0aGlzLl9vbkVkaXRTdGVwfVwiXG4gICAgICAgIEBndi1mbG93LXN0ZXA6Y2hhbmdlLXN0YXRlPVwiJHt0aGlzLl9vbkNoYW5nZVN0ZXBTdGF0ZS5iaW5kKHRoaXMsIGdyb3VwLCBwb3NpdGlvbil9XCJcbiAgICAgICAgQGd2LWZsb3ctc3RlcDpkZWxldGU9XCIke3RoaXMuX29uRGVsZXRlU3RlcC5iaW5kKHRoaXMsIGdyb3VwLCBwb3NpdGlvbil9XCJcbiAgICAgICAgQGd2LWZsb3ctc3RlcDpkdXBsaWNhdGU9XCIke3RoaXMuX29uRHVwbGljYXRlU3RlcC5iaW5kKHRoaXMsIGdyb3VwLCBwb3NpdGlvbil9XCJcbiAgICAgID48L2d2LWZsb3ctc3RlcD5gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaHRtbGBgO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFVwZGF0ZUNvbXBsZXRlKCkge1xuICAgIGF3YWl0IHN1cGVyLmdldFVwZGF0ZUNvbXBsZXRlKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5nZXRGbG93U3RlcHMoKS5tYXAoKGUpID0+IGUudXBkYXRlQ29tcGxldGUpKTtcbiAgfVxuXG4gIHVwZGF0ZWQocHJvcGVydGllcykge1xuICAgIGlmIChwcm9wZXJ0aWVzLmhhcygnZGF0YScpKSB7XG4gICAgICB0aGlzLm9uRHJhZ0VuZCgpO1xuICAgIH1cbiAgICBpZiAocHJvcGVydGllcy5oYXMoJ2Ryb3BQb2xpY3knKSB8fCBwcm9wZXJ0aWVzLmhhcygnZHJhZ1BvbGljeScpKSB7XG4gICAgICBpZiAodGhpcy5kcm9wUG9saWN5ID09IG51bGwgJiYgdGhpcy5kcmFnUG9saWN5ID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDYW5kaWRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRyYWdFbmQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLmRyb3AtYXJlYS1ncmlkJykuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZ2dpbmcnKTtcbiAgICAgIHRoaXMucmVtb3ZlQ2FuZGlkYXRlKCk7XG4gICAgICBjb25zdCBkcmFnZ2luZ0FyZWEgPSB0aGlzLmRyYWdnaW5nQXJlYTtcbiAgICAgIGlmIChkcmFnZ2luZ0FyZWEpIHtcbiAgICAgICAgZHJhZ2dpbmdBcmVhLnJlbW92ZUF0dHJpYnV0ZSgnZHJhZ2dpbmcnKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIF9nZXRMYWJlbChmbG93S2V5KSB7XG4gICAgaWYgKHRoaXMuZmxvdy50eXBlKSB7XG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3AtYm94LXR5cGVcIj4ke2Zsb3dLZXl9PC9kaXY+XG4gICAgICAgIDxkaXY+JHt0aGlzLmZsb3cudHlwZS50b1VwcGVyQ2FzZSgpID09PSAnUk9PVCcgPyAnZmxvdycgOiB0aGlzLmZsb3cudHlwZX08L2Rpdj5cbiAgICAgIGA7XG4gICAgfSBlbHNlIGlmIChmbG93S2V5ID09PSAncHJlJykge1xuICAgICAgcmV0dXJuICdyZXF1ZXN0JztcbiAgICB9IGVsc2UgaWYgKGZsb3dLZXkgPT09ICdwb3N0Jykge1xuICAgICAgcmV0dXJuICdyZXNwb25zZSc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGdldCBjb2xsZWN0aW9uTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wbGFuICE9IG51bGwgPyB0aGlzLnBsYW4ubmFtZSA6IHRoaXMuZmxvd3NUaXRsZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBwcmVUYXJnZXQgPSB0aGlzLmRyYWdQb2xpY3kgJiYgKHRoaXMuaGFzUG9saWN5RmlsdGVyICE9PSB0cnVlIHx8IHRoaXMuZHJhZ1BvbGljeS5wb2xpY3kub25SZXF1ZXN0KTtcbiAgICBjb25zdCBwb3N0VGFyZ2V0ID0gdGhpcy5kcmFnUG9saWN5ICYmICh0aGlzLmhhc1BvbGljeUZpbHRlciAhPT0gdHJ1ZSB8fCB0aGlzLmRyYWdQb2xpY3kucG9saWN5Lm9uUmVzcG9uc2UpO1xuXG4gICAgY29uc3QgcHJlRm9yYmlkZGVuID0gdGhpcy5kcmFnUG9saWN5ICYmIHRoaXMuaGFzUG9saWN5RmlsdGVyID09PSB0cnVlICYmICF0aGlzLmRyYWdQb2xpY3kucG9saWN5Lm9uUmVxdWVzdDtcbiAgICBjb25zdCBwb3N0Rm9yYmlkZGVuID0gdGhpcy5kcmFnUG9saWN5ICYmIHRoaXMuaGFzUG9saWN5RmlsdGVyID09PSB0cnVlICYmICF0aGlzLmRyYWdQb2xpY3kucG9saWN5Lm9uUmVzcG9uc2U7XG4gICAgY29uc3QgaGFzUG9zdCA9IHRoaXMuZmxvdy50eXBlID09IG51bGwgfHwgKHRoaXMuZmxvdy50eXBlICYmIHRoaXMuZmxvdy50eXBlLnRvTG93ZXJDYXNlKCkgIT09ICdyb290Jyk7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cImJveFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+JHtnZXRGbG93TmFtZSh0aGlzLmZsb3csIHRoaXMuY29sbGVjdGlvbk5hbWUpfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBwcmU6IHRydWUsIHRhcmdldGVkOiBwcmVUYXJnZXQsIGZvcmJpZGRlbjogcHJlRm9yYmlkZGVuIH0pfVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3cgYXJyb3ctcmlnaHRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcC1ib3hcIlxuICAgICAgICAgICAgICAgIEBkcm9wPVwiJHt0aGlzLl9vbkRyb3AuYmluZCh0aGlzLCAncHJlJyl9XCJcbiAgICAgICAgICAgICAgICBAZHJhZ2VuZD1cIiR7dGhpcy5vbkRyYWdFbmR9XCJcbiAgICAgICAgICAgICAgICBAZHJhZ292ZXI9XCIke3RoaXMuX29uRHJhZ092ZXIuYmluZCh0aGlzLCAncHJlJyl9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wLWJveC10aXRsZVwiPiR7cHJlVGFyZ2V0ID8gJ2Ryb3AgaGVyZScgOiB0aGlzLl9nZXRMYWJlbCgncHJlJyl9PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3AtYXJlYS1ncmlkXCI+JHt0aGlzLmZsb3cucHJlLm1hcCgoZmxvd1N0ZXAsIGkpID0+IHRoaXMuX3JlbmRlckRyb3BTdGVwKCdwcmUnLCBmbG93U3RlcCwgaSkpfTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAke2hhc1Bvc3RcbiAgICAgICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBwb3N0OiB0cnVlLCB0YXJnZXRlZDogcG9zdFRhcmdldCwgZm9yYmlkZGVuOiBwb3N0Rm9yYmlkZGVuIH0pfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdhcnJvdyBhcnJvdy1sZWZ0Jz4gPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3AtYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkcm9wPVwiJHt0aGlzLl9vbkRyb3AuYmluZCh0aGlzLCAncG9zdCcpfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ2VuZD1cIiR7dGhpcy5vbkRyYWdFbmR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkcmFnb3Zlcj1cIiR7dGhpcy5fb25EcmFnT3Zlci5iaW5kKHRoaXMsICdwb3N0Jyl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcC1hcmVhLWdyaWQgZHJvcC1hcmVhLWdyaWQtcmV2ZXJzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmZsb3cucG9zdC5tYXAoKGZsb3dTdGVwLCBpKSA9PiB0aGlzLl9yZW5kZXJEcm9wU3RlcCgncG9zdCcsIGZsb3dTdGVwLCBpKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wLWJveC10aXRsZVwiPiR7cG9zdFRhcmdldCA/ICdkcm9wIGhlcmUnIDogdGhpcy5fZ2V0TGFiZWwoJ3Bvc3QnKX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YFxuICAgICAgICAgICAgICA6ICcnfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBmaW5kUG9saWN5KHBvbGljeUlkKSB7XG4gICAgY29uc3QgcG9saWN5ID0gdGhpcy5wb2xpY2llcy5maW5kKChwKSA9PiBwLmlkID09PSBwb2xpY3lJZCk7XG4gICAgaWYgKHBvbGljeSA9PSBudWxsKSB7XG4gICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYFBvbGljeSAke3BvbGljeUlkfSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHBvbGljeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBtZXRob2RzLFxuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdyB7XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICAuZHJvcC1hcmVhLWdyaWQge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIHRyYW5zcGFyZW50O1xuICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAzNTBtcyBlYXNlLWluLW91dDtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDE1MHB4O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgcGFkZGluZzogMCAzMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnRhcmdldGVkIC5kcm9wLWFyZWEtZ3JpZCB7XG4gICAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkICNkOWQ5ZDk7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9yYmlkZGVuIC5kcm9wLWFyZWEtZ3JpZCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VmZWZlZjtcbiAgICAgICAgICBvcGFjaXR5OiAwLjI7XG4gICAgICAgIH1cblxuICAgICAgICBndi1mbG93LXN0ZXAge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgIH1cblxuICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICBjb2xvcjogI2Q5ZDlkOTtcbiAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMzUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAudGFyZ2V0ZWQgLm1lc3NhZ2Uge1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cblxuICAgICAgICAudGFyZ2V0ZWQgLmRyb3AtYXJlYS1lbXB0eSB7XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMzUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgICAgIH1cblxuICAgICAgICAucHJlLFxuICAgICAgICAucG9zdCB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hcnJvdyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZDlkOTtcbiAgICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gNTBweCAqIDIgLSAxcHgpO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgbWFyZ2luOiAwIDMwcHg7XG4gICAgICAgICAgY29sb3I6ICMyNjI2MjY7XG4gICAgICAgICAgdG9wOiBjYWxjKDUwJSAtIDIwcHgpO1xuICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hcnJvdy1yaWdodDo6YWZ0ZXIge1xuICAgICAgICAgIHdpZHRoOiAwO1xuICAgICAgICAgIGhlaWdodDogMDtcbiAgICAgICAgICBib3JkZXItdG9wOiA0MHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IDQwcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDQwcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgICBjb250ZW50OiAnICc7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHJpZ2h0OiAtMjBweDtcbiAgICAgICAgICB0b3A6IC0yMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmRyb3AtYm94LXR5cGUge1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICB3cml0aW5nLW1vZGU6IGhvcml6b250YWwtdGI7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kcm9wLWJveC10aXRsZSB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIHdyaXRpbmctbW9kZTogdmVydGljYWwtbHI7XG4gICAgICAgICAgdGV4dC1vcmllbnRhdGlvbjogdXByaWdodDtcbiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgIGNvbG9yOiAjYmZiZmJmO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBtYXgtaGVpZ2h0OiAxNDVweDtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMTNweDtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgbWluLXdpZHRoOiAzMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnByZSAuZHJvcC1ib3gtdGl0bGUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBsZWZ0OiAtMzBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hcnJvdy1sZWZ0OjphZnRlciB7XG4gICAgICAgICAgd2lkdGg6IDA7XG4gICAgICAgICAgaGVpZ2h0OiAwO1xuICAgICAgICAgIGJvcmRlci10b3A6IDQwcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogNDBweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDQwcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgICBjb250ZW50OiAnICc7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGxlZnQ6IC0yMHB4O1xuICAgICAgICAgIHRvcDogLTIwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZHJvcC1ib3gge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgbWFyZ2luOiAwIDMwcHg7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuZHJvcC1hcmVhLWdyaWQtcmV2ZXJzZSB7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlciB7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkOWQ5ZDk7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA0NXB4O1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIgLnRpdGxlIHtcbiAgICAgICAgICBjb2xvcjogIzI4NDQ0ZjtcbiAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIG1hcmdpbjogMCAwLjVyZW07XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIC50aXRsZSAuZmxvdy1wYXRoIHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLmJveCB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAuY29udGFpbmVyIHtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG5cbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAgICAgICAvKiBmb3IgRmlyZWZveCAqL1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbnRlbnQge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcblxuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuXG4gICAgICAgICAgLyogZm9yIEZpcmVmb3ggKi9cbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbTtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LWZsb3cnLCBHdkZsb3cpO1xuIl19
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.GvFlow=void 0;const t=require("lit"),e=require("lit/directives/class-map"),i=require("../lib/events");require("../atoms/gv-image");const o=require("../lib/utils"),r=require("./gv-flow-step"),s=require("../lib/studio");class l extends t.LitElement{static get properties(){return{flow:{type:Object},plan:{type:Object},policies:{type:Object},selectedStepId:{type:String},dragPolicy:{type:Object},dropPolicy:{type:Object},disabled:{type:Boolean,reflect:!0},hasPolicyFilter:{type:Boolean,attribute:"has-policy-filter"},flowsTitle:{type:String,attribute:"flows-title"},readonly:{type:Boolean,reflect:!0}}}constructor(){super(),this.flowsTitle="Flows",this.addEventListener("mouseleave",this._onMouseLeave)}_onMouseLeave(){this.dragPolicy=null,this.dropPolicy=null}getCandidate(){return this.shadowRoot.querySelector("gv-flow-step[empty]")}getFlowSteps(){return Array.from(this.shadowRoot.querySelectorAll("gv-flow-step"))}getOrCreateCandidate(){let t=this.getCandidate();return t||(t=document.createElement("gv-flow-step"),t.setAttribute("empty",!0)),t}removeCandidate(){const t=this.getCandidate();t&&t.remove()}_canDropPolicy(t,e){if(this.disabled||this.readonly)return!1;if(null!=e){if("pre"===t)return!0!==this.hasPolicyFilter||!0===e.onRequest;if("post"===t)return!0!==this.hasPolicyFilter||!0===e.onResponse;throw new Error(`The flowkey [${t}] parameter must be "pre" or "post"`)}return!1}_onDragOver(t,e){if(!this.disabled&&!this.readonly&&e.dataTransfer.items.length>0&&(e.preventDefault(),e.stopPropagation(),null==this.dropPolicy?this.dropPolicy=this.dragPolicy:this.dragPolicy=this.dropPolicy,null!=this.dropPolicy&&this._canDropPolicy(t,this.dropPolicy.policy)&&!e.target.classList.contains("candidate")&&!e.target.hasAttribute("dragging")))if("gv-flow-step"===e.target.tagName.toLowerCase()){const{x:i,width:o}=e.target.getBoundingClientRect();!("post"===t?e.clientX-i<=o/2:e.clientX-i>=o/2)||e.target.nextElementSibling&&e.target.nextElementSibling.hasAttribute("dragging")?e.target.previousElementSibling&&e.target.previousElementSibling.hasAttribute("dragging")||e.target.insertAdjacentElement("beforebegin",this.getOrCreateCandidate()):e.target.insertAdjacentElement("afterend",this.getOrCreateCandidate())}else if(e.target.classList&&e.target.classList.contains("drop-area-grid")){0===e.target.querySelectorAll("gv-flow-step").length&&e.target.prepend(this.getOrCreateCandidate())}else this.removeCandidate()}_onDragEnd(){this.disabled||this.readonly||(this._draggablePolicyImage&&(this._draggablePolicyImage.remove(),this._draggablePolicyImage=null),this.dragPolicy=null,this.dropPolicy=null)}_onDragStart(t,e,s,l){if(!this.disabled&&!this.readonly){const a=this.findPolicy(e.policy);if(null!=a){const d=document.createEvent("Events");if(d.initEvent("click",!0,!1),window.dispatchEvent(d),l.target.setAttribute("dragging",!0),this.shadowRoot.querySelector(".drop-area-grid").classList.add("dragging"),this.dropPolicy=new r.PolicyDraggable(a,s,t,this.flow._id,e),l.dataTransfer.setData("text/plain",this.dropPolicy.toString()),a){const t=100;this._draggablePolicyImage=(0,o.appendDraggableImage)(a.icon,t),l.dataTransfer.setDragImage(this._draggablePolicyImage,t/2,t/2)}(0,i.dispatchCustomEvent)(this,"drag-start",this.dropPolicy)}}}async performUpdate(){this.getFlowSteps().forEach((t=>{t.requestUpdate()})),super.performUpdate()}get draggingArea(){return this.shadowRoot.querySelector("gv-flow-step[dragging]")}_onDrop(t,e){this.shadowRoot.querySelectorAll("gv-flow-step").forEach((t=>t.resetConfirm())),e.preventDefault(),e.stopPropagation();const o=e.target.closest(".drop-area-grid"),r=this.getCandidate(),s=this.draggingArea;if(r){let e=0;[...o.querySelectorAll("gv-flow-step")].some((t=>(t.hasAttribute("empty")||e++,t.hasAttribute("empty"))));const{policy:l,sourceFlowKey:a,sourceFlowId:d,sourcePosition:n,flowStep:p}=this.dropPolicy,g=()=>{s&&s.removeAttribute("dragging"),r.remove(),(0,i.dispatchCustomEvent)(this,"drop",{flowId:this.flow._id,flowKey:t,position:e,flowStep:p,policy:l,sourcePosition:n,sourceFlowKey:a,sourceFlowId:d}),this.dragPolicy=null,this.dropPolicy=null};null!=d&&this.flow._id!==d?(r.setAttribute("confirm",!0),r.addEventListener("gv-flow-step:copy",(()=>{r.remove(),this.dragPolicy=null,this.dropPolicy=null,(0,i.dispatchCustomEvent)(this,"drop",{flowId:this.flow._id,flowKey:t,position:e,policy:l,flowStep:p,cancelEdit:!0})})),r.addEventListener("gv-flow-step:move",(()=>{r.remove(),g()}))):g()}else s&&(s.removeAttribute("dragging"),this.dragPolicy=null,this.dropPolicy=null)}getFlowStep(t,e){return this.flow[t][e]}_onEditStep({detail:{step:t,policy:e,group:o}}){(0,i.dispatchCustomEvent)(this,"edit",{flow:this.flow,step:t,policy:e,group:o})}_onDuplicateStep(t,e){const r=this.getFlowStep(t,e),s=e+1,l=this.findPolicy(r.policy),a={...r,_id:(0,o.uuid)()};(0,i.dispatchCustomEvent)(this,"drop",{flowId:this.flow._id,flowKey:t,position:s,flowStep:a,policy:l})}_isEditable(t){return this.selectedStepId&&this.selectedStepId===t._id}_onDeleteStep(t,e,o){(0,i.dispatchCustomEvent)(this,"delete",{flowKey:t,position:e,flowId:this.flow._id,target:o.target})}_onChangeStepState(t,e,{detail:o}){(0,i.dispatchCustomEvent)(this,"change-state",{flowKey:t,position:e,flowId:this.flow._id,...o})}_renderDropStep(e,i,o){return i?t.html`<gv-flow-step .step="${i}" .policy="${this.findPolicy(i.policy)}" .id="${i._id}" .group="${e}" .parent="${this.flow._id}" ?disabled="${this.disabled}" ?readonly="${this.readonly}" .draggable="${!this.disabled&&!this.readonly}" ?editing="${this._isEditable(i)}" @dragstart="${this._onDragStart.bind(this,e,i,o)}" @dragend="${this._onDragEnd}" @gv-flow-step:edit="${this._onEditStep}" @gv-flow-step:change-state="${this._onChangeStepState.bind(this,e,o)}" @gv-flow-step:delete="${this._onDeleteStep.bind(this,e,o)}" @gv-flow-step:duplicate="${this._onDuplicateStep.bind(this,e,o)}"></gv-flow-step>`:t.html``}async getUpdateComplete(){await super.getUpdateComplete(),await Promise.all(this.getFlowSteps().map((t=>t.updateComplete)))}updated(t){t.has("data")&&this.onDragEnd(),(t.has("dropPolicy")||t.has("dragPolicy"))&&null==this.dropPolicy&&null==this.dragPolicy&&this.removeCandidate()}onDragEnd(){setTimeout((()=>{this.shadowRoot.querySelector(".drop-area-grid").classList.remove("dragging"),this.removeCandidate();const t=this.draggingArea;t&&t.removeAttribute("dragging")}),0)}_getLabel(e){return this.flow.type?t.html`<div class="drop-box-type">${e}</div><div>${"ROOT"===this.flow.type.toUpperCase()?"flow":this.flow.type}</div>`:"pre"===e?"request":"post"===e?"response":""}get collectionName(){return null!=this.plan?this.plan.name:this.flowsTitle}render(){const i=this.dragPolicy&&(!0!==this.hasPolicyFilter||this.dragPolicy.policy.onRequest),o=this.dragPolicy&&(!0!==this.hasPolicyFilter||this.dragPolicy.policy.onResponse),r=this.dragPolicy&&!0===this.hasPolicyFilter&&!this.dragPolicy.policy.onRequest,l=this.dragPolicy&&!0===this.hasPolicyFilter&&!this.dragPolicy.policy.onResponse,a=null==this.flow.type||this.flow.type&&"root"!==this.flow.type.toLowerCase();return t.html`<div class="box"><div class="container"><div class="header"><div class="title">${(0,s.getFlowName)(this.flow,this.collectionName)}</div></div><div class="content"><div class="flow"><div class="${(0,e.classMap)({pre:!0,targeted:i,forbidden:r})}"><div class="arrow arrow-right"></div><div class="drop-box" @drop="${this._onDrop.bind(this,"pre")}" @dragend="${this.onDragEnd}" @dragover="${this._onDragOver.bind(this,"pre")}"><div class="drop-box-title">${i?"drop here":this._getLabel("pre")}</div><div class="drop-area-grid">${this.flow.pre.map(((t,e)=>this._renderDropStep("pre",t,e)))}</div></div></div>${a?t.html`<div class="${(0,e.classMap)({post:!0,targeted:o,forbidden:l})}"><div class="arrow arrow-left"></div><div class="drop-box" @drop="${this._onDrop.bind(this,"post")}" @dragend="${this.onDragEnd}" @dragover="${this._onDragOver.bind(this,"post")}"><div class="drop-area-grid drop-area-grid-reverse">${this.flow.post.map(((t,e)=>this._renderDropStep("post",t,e)))}</div><div class="drop-box-title">${o?"drop here":this._getLabel("post")}</div></div></div>`:""}</div></div></div></div>`}findPolicy(t){return this.policies.find((e=>e.id===t))}static get styles(){return[s.methods,t.css`:host{box-sizing:border-box;position:relative;display:block;height:100%}.flow{padding-left:20px;display:flex;height:100%;flex-direction:column}.drop-area-grid{flex:1;border:1px dashed transparent;transition:all 350ms ease-in-out;position:relative;display:flex;flex-wrap:wrap;max-width:calc(100% - 40px);align-items:center;min-height:150px;box-sizing:border-box;padding:0 30px}.targeted .drop-area-grid{border:1px dashed #d9d9d9}.forbidden .drop-area-grid{background-color:#efefef;opacity:.2}gv-flow-step{flex:1}.message{text-transform:uppercase;color:#d9d9d9;opacity:0;transition:opacity 350ms ease-in-out;font-size:18px;text-align:center;align-self:center}.message{width:100%}.targeted .message{opacity:1}.targeted .drop-area-empty{opacity:0;transition:all 350ms ease-in-out}.post,.pre{position:relative;flex:1;display:flex}.arrow{background-color:#d9d9d9;width:calc(100% - 50px * 2 - 1px);text-align:center;position:absolute;margin:0 30px;color:#262626;top:calc(50% - 20px);height:40px}.arrow-right::after{width:0;height:0;border-top:40px solid transparent;border-bottom:40px solid transparent;border-left:40px solid #d9d9d9;content:' ';position:absolute;right:-20px;top:-20px}.drop-box-type{position:relative;writing-mode:horizontal-tb;margin-bottom:10px}.drop-box-title{position:relative;writing-mode:vertical-lr;text-orientation:upright;text-transform:uppercase;color:#bfbfbf;font-size:13px;font-weight:500;text-align:center;max-height:145px;line-height:13px;display:flex;align-items:center;min-width:30px}.pre .drop-box-title{position:absolute;left:-30px}.arrow-left::after{width:0;height:0;border-top:40px solid transparent;border-bottom:40px solid transparent;border-right:40px solid #d9d9d9;content:' ';position:absolute;left:-20px;top:-20px}.drop-box{display:flex;border:1px solid transparent;margin:0 30px;align-items:center;position:relative;width:100%}.drop-area-grid-reverse{flex-direction:row-reverse}.header{border-bottom:1px solid #d9d9d9;display:flex;min-height:45px;margin-bottom:.5rem}.header .title{color:#28444f;font-size:18px;display:flex;align-items:center;margin:0 .5rem;width:100%}.header .title .flow-path{flex:1}.box{position:absolute;display:flex;flex-direction:column;width:100%;top:0;bottom:0;left:0}.container{flex-grow:1;display:flex;flex-direction:column;min-height:0;height:100%}.content{background:#fff;flex-grow:1;overflow:auto;min-height:0;padding:.5rem}`]}}exports.GvFlow=l,window.customElements.define("gv-flow",l);