@gravitee/ui-components 3.25.3 → 3.25.4-yarn-d0ed047

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 (547) hide show
  1. package/package.json +21 -18
  2. package/src/atoms/gv-autocomplete.d.ts +104 -0
  3. package/src/atoms/gv-autocomplete.js +339 -353
  4. package/src/atoms/gv-autocomplete.js.map +1 -0
  5. package/src/atoms/gv-button.d.ts +109 -0
  6. package/src/atoms/gv-button.js +315 -152
  7. package/src/atoms/gv-button.js.map +1 -0
  8. package/src/atoms/gv-checkbox.d.ts +114 -0
  9. package/src/atoms/gv-checkbox.js +128 -78
  10. package/src/atoms/gv-checkbox.js.map +1 -0
  11. package/src/atoms/gv-date-picker-calendar.d.ts +190 -0
  12. package/src/atoms/gv-date-picker-calendar.js +699 -699
  13. package/src/atoms/gv-date-picker-calendar.js.map +1 -0
  14. package/src/atoms/gv-date-picker-cell.d.ts +80 -0
  15. package/src/atoms/gv-date-picker-cell.js +117 -108
  16. package/src/atoms/gv-date-picker-cell.js.map +1 -0
  17. package/src/atoms/gv-date-picker.d.ts +194 -0
  18. package/src/atoms/gv-date-picker.js +549 -442
  19. package/src/atoms/gv-date-picker.js.map +1 -0
  20. package/src/atoms/gv-file-upload.d.ts +64 -0
  21. package/src/atoms/gv-file-upload.js +288 -196
  22. package/src/atoms/gv-file-upload.js.map +1 -0
  23. package/src/atoms/gv-icon.d.ts +26 -0
  24. package/src/atoms/gv-icon.js +59 -47
  25. package/src/atoms/gv-icon.js.map +1 -0
  26. package/src/atoms/gv-image.d.ts +45 -0
  27. package/src/atoms/gv-image.js +93 -66
  28. package/src/atoms/gv-image.js.map +1 -0
  29. package/src/atoms/gv-input-message.d.ts +20 -0
  30. package/src/atoms/gv-input-message.js +49 -29
  31. package/src/atoms/gv-input-message.js.map +1 -0
  32. package/src/atoms/gv-input.d.ts +246 -0
  33. package/src/atoms/gv-input.js +400 -421
  34. package/src/atoms/gv-input.js.map +1 -0
  35. package/src/atoms/gv-link.d.ts +67 -0
  36. package/src/atoms/gv-link.js +143 -70
  37. package/src/atoms/gv-link.js.map +1 -0
  38. package/src/atoms/gv-message.d.ts +23 -0
  39. package/src/atoms/gv-message.js +98 -41
  40. package/src/atoms/gv-message.js.map +1 -0
  41. package/src/atoms/gv-metric.d.ts +32 -0
  42. package/src/atoms/gv-metric.js +74 -29
  43. package/src/atoms/gv-metric.js.map +1 -0
  44. package/src/atoms/gv-relative-time.d.ts +45 -0
  45. package/src/atoms/gv-relative-time.js +107 -148
  46. package/src/atoms/gv-relative-time.js.map +1 -0
  47. package/src/atoms/gv-select-native.d.ts +174 -0
  48. package/src/atoms/gv-select-native.js +289 -194
  49. package/src/atoms/gv-select-native.js.map +1 -0
  50. package/src/atoms/gv-select.d.ts +71 -0
  51. package/src/atoms/gv-select.js +323 -226
  52. package/src/atoms/gv-select.js.map +1 -0
  53. package/src/atoms/gv-spinner.d.ts +10 -0
  54. package/src/atoms/gv-spinner.js +29 -10
  55. package/src/atoms/gv-spinner.js.map +1 -0
  56. package/src/atoms/gv-state.d.ts +50 -0
  57. package/src/atoms/gv-state.js +76 -39
  58. package/src/atoms/gv-state.js.map +1 -0
  59. package/src/atoms/gv-switch.d.ts +60 -0
  60. package/src/atoms/gv-switch.js +187 -74
  61. package/src/atoms/gv-switch.js.map +1 -0
  62. package/src/atoms/gv-tag.d.ts +69 -0
  63. package/src/atoms/gv-tag.js +92 -45
  64. package/src/atoms/gv-tag.js.map +1 -0
  65. package/src/atoms/gv-text.d.ts +110 -0
  66. package/src/atoms/gv-text.js +105 -51
  67. package/src/atoms/gv-text.js.map +1 -0
  68. package/src/charts/gv-chart-bar.d.ts +50 -0
  69. package/src/charts/gv-chart-bar.js +64 -69
  70. package/src/charts/gv-chart-bar.js.map +1 -0
  71. package/src/charts/gv-chart-gauge.d.ts +58 -0
  72. package/src/charts/gv-chart-gauge.js +58 -62
  73. package/src/charts/gv-chart-gauge.js.map +1 -0
  74. package/src/charts/gv-chart-histogram.d.ts +48 -0
  75. package/src/charts/gv-chart-histogram.js +46 -58
  76. package/src/charts/gv-chart-histogram.js.map +1 -0
  77. package/src/charts/gv-chart-line.d.ts +52 -0
  78. package/src/charts/gv-chart-line.js +173 -189
  79. package/src/charts/gv-chart-line.js.map +1 -0
  80. package/src/charts/gv-chart-map.d.ts +50 -0
  81. package/src/charts/gv-chart-map.js +73 -75
  82. package/src/charts/gv-chart-map.js.map +1 -0
  83. package/src/charts/gv-chart-pie.d.ts +50 -0
  84. package/src/charts/gv-chart-pie.js +52 -57
  85. package/src/charts/gv-chart-pie.js.map +1 -0
  86. package/src/index.d.ts +77 -0
  87. package/src/index.js +1 -1
  88. package/src/index.js.map +1 -0
  89. package/src/lib/cron-expression.d.ts +1 -0
  90. package/src/lib/cron-expression.js +143 -176
  91. package/src/lib/cron-expression.js.map +1 -0
  92. package/src/lib/date.d.ts +1 -0
  93. package/src/lib/date.js +26 -35
  94. package/src/lib/date.js.map +1 -0
  95. package/src/lib/events.d.ts +1 -0
  96. package/src/lib/events.js +10 -11
  97. package/src/lib/events.js.map +1 -0
  98. package/src/lib/http-client-schema-form.d.ts +68 -0
  99. package/src/lib/http-client-schema-form.js +50 -50
  100. package/src/lib/http-client-schema-form.js.map +1 -0
  101. package/src/lib/http.d.ts +222 -0
  102. package/src/lib/http.js +221 -221
  103. package/src/lib/http.js.map +1 -0
  104. package/src/lib/i18n.d.ts +30 -0
  105. package/src/lib/i18n.js +40 -57
  106. package/src/lib/i18n.js.map +1 -0
  107. package/src/lib/item.d.ts +12 -0
  108. package/src/lib/item.js +66 -74
  109. package/src/lib/item.js.map +1 -0
  110. package/src/lib/properties.d.ts +42 -0
  111. package/src/lib/properties.js +110 -162
  112. package/src/lib/properties.js.map +1 -0
  113. package/src/lib/schema-form.d.ts +5 -0
  114. package/src/lib/schema-form.js +13 -16
  115. package/src/lib/schema-form.js.map +1 -0
  116. package/src/lib/studio.d.ts +2 -0
  117. package/src/lib/studio.js +116 -65
  118. package/src/lib/studio.js.map +1 -0
  119. package/src/lib/style.d.ts +6 -0
  120. package/src/lib/style.js +18 -19
  121. package/src/lib/style.js.map +1 -0
  122. package/src/lib/text-format.d.ts +6 -0
  123. package/src/lib/text-format.js +45 -55
  124. package/src/lib/text-format.js.map +1 -0
  125. package/src/lib/theme.d.ts +4 -0
  126. package/src/lib/theme.js +38 -43
  127. package/src/lib/theme.js.map +1 -0
  128. package/src/lib/utils.d.ts +9 -0
  129. package/src/lib/utils.js +72 -75
  130. package/src/lib/utils.js.map +1 -0
  131. package/src/mixins/chart-element.d.ts +39 -0
  132. package/src/mixins/chart-element.js +118 -106
  133. package/src/mixins/chart-element.js.map +1 -0
  134. package/src/mixins/input-element.d.ts +64 -0
  135. package/src/mixins/input-element.js +111 -131
  136. package/src/mixins/input-element.js.map +1 -0
  137. package/src/mixins/item-resource.d.ts +56 -0
  138. package/src/mixins/item-resource.js +76 -95
  139. package/src/mixins/item-resource.js.map +1 -0
  140. package/src/mixins/keyboard-element.d.ts +25 -0
  141. package/src/mixins/keyboard-element.js +44 -51
  142. package/src/mixins/keyboard-element.js.map +1 -0
  143. package/src/mixins/update-after-browser.d.ts +11 -0
  144. package/src/mixins/update-after-browser.js +10 -12
  145. package/src/mixins/update-after-browser.js.map +1 -0
  146. package/src/mixins/with-resize-observer.d.ts +12 -0
  147. package/src/mixins/with-resize-observer.js +46 -61
  148. package/src/mixins/with-resize-observer.js.map +1 -0
  149. package/src/mixins/with-skeleton-attribute.d.ts +35 -0
  150. package/src/mixins/with-skeleton-attribute.js +80 -88
  151. package/src/mixins/with-skeleton-attribute.js.map +1 -0
  152. package/src/molecules/gv-card-full.d.ts +78 -0
  153. package/src/molecules/gv-card-full.js +160 -47
  154. package/src/molecules/gv-card-full.js.map +1 -0
  155. package/src/molecules/gv-card-list.d.ts +33 -0
  156. package/src/molecules/gv-card-list.js +65 -47
  157. package/src/molecules/gv-card-list.js.map +1 -0
  158. package/src/molecules/gv-card.d.ts +65 -0
  159. package/src/molecules/gv-card.js +94 -22
  160. package/src/molecules/gv-card.js.map +1 -0
  161. package/src/molecules/gv-category-list.d.ts +17 -0
  162. package/src/molecules/gv-category-list.js +23 -15
  163. package/src/molecules/gv-category-list.js.map +1 -0
  164. package/src/molecules/gv-category.d.ts +64 -0
  165. package/src/molecules/gv-category.js +117 -43
  166. package/src/molecules/gv-category.js.map +1 -0
  167. package/src/molecules/gv-code.d.ts +192 -0
  168. package/src/molecules/gv-code.js +258 -220
  169. package/src/molecules/gv-code.js.map +1 -0
  170. package/src/molecules/gv-confirm.d.ts +60 -0
  171. package/src/molecules/gv-confirm.js +131 -113
  172. package/src/molecules/gv-confirm.js.map +1 -0
  173. package/src/molecules/gv-cron-editor.d.ts +115 -0
  174. package/src/molecules/gv-cron-editor.js +597 -375
  175. package/src/molecules/gv-cron-editor.js.map +1 -0
  176. package/src/molecules/gv-dropdown-menu.d.ts +28 -0
  177. package/src/molecules/gv-dropdown-menu.js +77 -52
  178. package/src/molecules/gv-dropdown-menu.js.map +1 -0
  179. package/src/molecules/gv-expandable.d.ts +37 -0
  180. package/src/molecules/gv-expandable.js +77 -54
  181. package/src/molecules/gv-expandable.js.map +1 -0
  182. package/src/molecules/gv-expression-language.d.ts +150 -0
  183. package/src/molecules/gv-expression-language.js +212 -256
  184. package/src/molecules/gv-expression-language.js.map +1 -0
  185. package/src/molecules/gv-identity-picture.d.ts +44 -0
  186. package/src/molecules/gv-identity-picture.js +102 -87
  187. package/src/molecules/gv-identity-picture.js.map +1 -0
  188. package/src/molecules/gv-list.d.ts +124 -0
  189. package/src/molecules/gv-list.js +167 -87
  190. package/src/molecules/gv-list.js.map +1 -0
  191. package/src/molecules/gv-metrics.d.ts +65 -0
  192. package/src/molecules/gv-metrics.js +103 -105
  193. package/src/molecules/gv-metrics.js.map +1 -0
  194. package/src/molecules/gv-modal.d.ts +64 -0
  195. package/src/molecules/gv-modal.js +157 -99
  196. package/src/molecules/gv-modal.js.map +1 -0
  197. package/src/molecules/gv-nav.d.ts +41 -0
  198. package/src/molecules/gv-nav.js +134 -123
  199. package/src/molecules/gv-nav.js.map +1 -0
  200. package/src/molecules/gv-option.d.ts +65 -0
  201. package/src/molecules/gv-option.js +177 -115
  202. package/src/molecules/gv-option.js.map +1 -0
  203. package/src/molecules/gv-plans.d.ts +73 -0
  204. package/src/molecules/gv-plans.js +327 -232
  205. package/src/molecules/gv-plans.js.map +1 -0
  206. package/src/molecules/gv-popover.d.ts +91 -0
  207. package/src/molecules/gv-popover.js +265 -172
  208. package/src/molecules/gv-popover.js.map +1 -0
  209. package/src/molecules/gv-promote.d.ts +108 -0
  210. package/src/molecules/gv-promote.js +152 -39
  211. package/src/molecules/gv-promote.js.map +1 -0
  212. package/src/molecules/gv-rating-list.d.ts +77 -0
  213. package/src/molecules/gv-rating-list.js +287 -184
  214. package/src/molecules/gv-rating-list.js.map +1 -0
  215. package/src/molecules/gv-rating.d.ts +55 -0
  216. package/src/molecules/gv-rating.js +187 -152
  217. package/src/molecules/gv-rating.js.map +1 -0
  218. package/src/molecules/gv-row-expandable.d.ts +8 -0
  219. package/src/molecules/gv-row-expandable.js +18 -14
  220. package/src/molecules/gv-row-expandable.js.map +1 -0
  221. package/src/molecules/gv-row.d.ts +37 -0
  222. package/src/molecules/gv-row.js +164 -42
  223. package/src/molecules/gv-row.js.map +1 -0
  224. package/src/molecules/gv-stats.d.ts +53 -0
  225. package/src/molecules/gv-stats.js +70 -55
  226. package/src/molecules/gv-stats.js.map +1 -0
  227. package/src/molecules/gv-stepper.d.ts +46 -0
  228. package/src/molecules/gv-stepper.js +225 -94
  229. package/src/molecules/gv-stepper.js.map +1 -0
  230. package/src/molecules/gv-table.d.ts +159 -0
  231. package/src/molecules/gv-table.js +530 -460
  232. package/src/molecules/gv-table.js.map +1 -0
  233. package/src/molecules/gv-tree.d.ts +44 -0
  234. package/src/molecules/gv-tree.js +189 -77
  235. package/src/molecules/gv-tree.js.map +1 -0
  236. package/src/organisms/gv-documentation.d.ts +52 -0
  237. package/src/organisms/gv-documentation.js +155 -81
  238. package/src/organisms/gv-documentation.js.map +1 -0
  239. package/src/organisms/gv-header.d.ts +60 -0
  240. package/src/organisms/gv-header.js +227 -80
  241. package/src/organisms/gv-header.js.map +1 -0
  242. package/src/organisms/gv-http-client.d.ts +57 -0
  243. package/src/organisms/gv-http-client.js +203 -83
  244. package/src/organisms/gv-http-client.js.map +1 -0
  245. package/src/organisms/gv-menu.d.ts +74 -0
  246. package/src/organisms/gv-menu.js +206 -89
  247. package/src/organisms/gv-menu.js.map +1 -0
  248. package/src/organisms/gv-newsletter-subscription.d.ts +82 -0
  249. package/src/organisms/gv-newsletter-subscription.js +212 -83
  250. package/src/organisms/gv-newsletter-subscription.js.map +1 -0
  251. package/src/organisms/gv-pagination.d.ts +63 -0
  252. package/src/organisms/gv-pagination.js +134 -124
  253. package/src/organisms/gv-pagination.js.map +1 -0
  254. package/src/organisms/gv-properties.d.ts +229 -0
  255. package/src/organisms/gv-properties.js +778 -616
  256. package/src/organisms/gv-properties.js.map +1 -0
  257. package/src/organisms/gv-resizable-views.d.ts +33 -0
  258. package/src/organisms/gv-resizable-views.js +334 -140
  259. package/src/organisms/gv-resizable-views.js.map +1 -0
  260. package/src/organisms/gv-resources.d.ts +125 -0
  261. package/src/organisms/gv-resources.js +434 -365
  262. package/src/organisms/gv-resources.js.map +1 -0
  263. package/src/organisms/gv-schema-form-array.d.ts +55 -0
  264. package/src/organisms/gv-schema-form-array.js +196 -98
  265. package/src/organisms/gv-schema-form-array.js.map +1 -0
  266. package/src/organisms/gv-schema-form-control-object.d.ts +64 -0
  267. package/src/organisms/gv-schema-form-control-object.js +110 -108
  268. package/src/organisms/gv-schema-form-control-object.js.map +1 -0
  269. package/src/organisms/gv-schema-form-control.d.ts +90 -0
  270. package/src/organisms/gv-schema-form-control.js +353 -349
  271. package/src/organisms/gv-schema-form-control.js.map +1 -0
  272. package/src/organisms/gv-schema-form.d.ts +156 -0
  273. package/src/organisms/gv-schema-form.js +611 -556
  274. package/src/organisms/gv-schema-form.js.map +1 -0
  275. package/src/organisms/gv-tabs.d.ts +56 -0
  276. package/src/organisms/gv-tabs.js +149 -125
  277. package/src/organisms/gv-tabs.js.map +1 -0
  278. package/src/organisms/gv-user-menu.d.ts +56 -0
  279. package/src/organisms/gv-user-menu.js +244 -94
  280. package/src/organisms/gv-user-menu.js.map +1 -0
  281. package/src/organisms/gv-vertical-menu.d.ts +28 -0
  282. package/src/organisms/gv-vertical-menu.js +84 -46
  283. package/src/organisms/gv-vertical-menu.js.map +1 -0
  284. package/src/policy-studio/gv-flow-step.d.ts +142 -0
  285. package/src/policy-studio/gv-flow-step.js +390 -250
  286. package/src/policy-studio/gv-flow-step.js.map +1 -0
  287. package/src/policy-studio/gv-flow.d.ts +89 -0
  288. package/src/policy-studio/gv-flow.js +512 -358
  289. package/src/policy-studio/gv-flow.js.map +1 -0
  290. package/src/policy-studio/gv-policy-studio-menu.d.ts +94 -0
  291. package/src/policy-studio/gv-policy-studio-menu.js +657 -403
  292. package/src/policy-studio/gv-policy-studio-menu.js.map +1 -0
  293. package/src/policy-studio/gv-policy-studio.d.ts +464 -0
  294. package/src/policy-studio/gv-policy-studio.js +1531 -1599
  295. package/src/policy-studio/gv-policy-studio.js.map +1 -0
  296. package/src/styles/empty.d.ts +1 -0
  297. package/src/styles/empty.js +21 -4
  298. package/src/styles/empty.js.map +1 -0
  299. package/src/styles/input.d.ts +1 -0
  300. package/src/styles/input.js +247 -3
  301. package/src/styles/input.js.map +1 -0
  302. package/src/styles/link.d.ts +1 -0
  303. package/src/styles/link.js +16 -3
  304. package/src/styles/link.js.map +1 -0
  305. package/src/styles/shapes.d.ts +2 -0
  306. package/src/styles/shapes.js +1 -1
  307. package/src/styles/shapes.js.map +1 -0
  308. package/src/styles/skeleton.d.ts +1 -0
  309. package/src/styles/skeleton.js +37 -3
  310. package/src/styles/skeleton.js.map +1 -0
  311. package/src/styles/zoom.d.ts +1 -0
  312. package/src/styles/zoom.js +24 -3
  313. package/src/styles/zoom.js.map +1 -0
  314. package/src/theme/gv-theme.d.ts +81 -0
  315. package/src/theme/gv-theme.js +115 -81
  316. package/src/theme/gv-theme.js.map +1 -0
  317. package/wc/gv-autocomplete.d.ts +1 -0
  318. package/wc/gv-autocomplete.js +2 -1
  319. package/wc/gv-autocomplete.js.map +1 -0
  320. package/wc/gv-button.d.ts +1 -0
  321. package/wc/gv-button.js +2 -1
  322. package/wc/gv-button.js.map +1 -0
  323. package/wc/gv-card-full.d.ts +1 -0
  324. package/wc/gv-card-full.js +2 -1
  325. package/wc/gv-card-full.js.map +1 -0
  326. package/wc/gv-card-list.d.ts +1 -0
  327. package/wc/gv-card-list.js +2 -1
  328. package/wc/gv-card-list.js.map +1 -0
  329. package/wc/gv-card.d.ts +1 -0
  330. package/wc/gv-card.js +2 -1
  331. package/wc/gv-card.js.map +1 -0
  332. package/wc/gv-category-list.d.ts +1 -0
  333. package/wc/gv-category-list.js +2 -1
  334. package/wc/gv-category-list.js.map +1 -0
  335. package/wc/gv-category.d.ts +1 -0
  336. package/wc/gv-category.js +2 -1
  337. package/wc/gv-category.js.map +1 -0
  338. package/wc/gv-chart-bar.d.ts +1 -0
  339. package/wc/gv-chart-bar.js +2 -1
  340. package/wc/gv-chart-bar.js.map +1 -0
  341. package/wc/gv-chart-gauge.d.ts +1 -0
  342. package/wc/gv-chart-gauge.js +2 -1
  343. package/wc/gv-chart-gauge.js.map +1 -0
  344. package/wc/gv-chart-histogram.d.ts +1 -0
  345. package/wc/gv-chart-histogram.js +2 -1
  346. package/wc/gv-chart-histogram.js.map +1 -0
  347. package/wc/gv-chart-line.d.ts +1 -0
  348. package/wc/gv-chart-line.js +2 -1
  349. package/wc/gv-chart-line.js.map +1 -0
  350. package/wc/gv-chart-map.d.ts +1 -0
  351. package/wc/gv-chart-map.js +2 -1
  352. package/wc/gv-chart-map.js.map +1 -0
  353. package/wc/gv-chart-pie.d.ts +1 -0
  354. package/wc/gv-chart-pie.js +2 -1
  355. package/wc/gv-chart-pie.js.map +1 -0
  356. package/wc/gv-checkbox.d.ts +1 -0
  357. package/wc/gv-checkbox.js +2 -1
  358. package/wc/gv-checkbox.js.map +1 -0
  359. package/wc/gv-code.d.ts +1 -0
  360. package/wc/gv-code.js +2 -1
  361. package/wc/gv-code.js.map +1 -0
  362. package/wc/gv-confirm.d.ts +1 -0
  363. package/wc/gv-confirm.js +2 -1
  364. package/wc/gv-confirm.js.map +1 -0
  365. package/wc/gv-cron-editor.d.ts +1 -0
  366. package/wc/gv-cron-editor.js +2 -1
  367. package/wc/gv-cron-editor.js.map +1 -0
  368. package/wc/gv-date-picker-calendar.d.ts +1 -0
  369. package/wc/gv-date-picker-calendar.js +2 -1
  370. package/wc/gv-date-picker-calendar.js.map +1 -0
  371. package/wc/gv-date-picker-cell.d.ts +1 -0
  372. package/wc/gv-date-picker-cell.js +2 -1
  373. package/wc/gv-date-picker-cell.js.map +1 -0
  374. package/wc/gv-date-picker.d.ts +1 -0
  375. package/wc/gv-date-picker.js +2 -1
  376. package/wc/gv-date-picker.js.map +1 -0
  377. package/wc/gv-documentation.d.ts +1 -0
  378. package/wc/gv-documentation.js +2 -1
  379. package/wc/gv-documentation.js.map +1 -0
  380. package/wc/gv-dropdown-menu.d.ts +1 -0
  381. package/wc/gv-dropdown-menu.js +2 -1
  382. package/wc/gv-dropdown-menu.js.map +1 -0
  383. package/wc/gv-expandable.d.ts +1 -0
  384. package/wc/gv-expandable.js +2 -1
  385. package/wc/gv-expandable.js.map +1 -0
  386. package/wc/gv-expression-language.d.ts +1 -0
  387. package/wc/gv-expression-language.js +2 -1
  388. package/wc/gv-expression-language.js.map +1 -0
  389. package/wc/gv-file-upload.d.ts +1 -0
  390. package/wc/gv-file-upload.js +2 -1
  391. package/wc/gv-file-upload.js.map +1 -0
  392. package/wc/gv-flow-step.d.ts +1 -0
  393. package/wc/gv-flow-step.js +2 -1
  394. package/wc/gv-flow-step.js.map +1 -0
  395. package/wc/gv-flow.d.ts +1 -0
  396. package/wc/gv-flow.js +2 -1
  397. package/wc/gv-flow.js.map +1 -0
  398. package/wc/gv-header.d.ts +1 -0
  399. package/wc/gv-header.js +2 -1
  400. package/wc/gv-header.js.map +1 -0
  401. package/wc/gv-http-client.d.ts +1 -0
  402. package/wc/gv-http-client.js +2 -1
  403. package/wc/gv-http-client.js.map +1 -0
  404. package/wc/gv-icon.d.ts +1 -0
  405. package/wc/gv-icon.js +2 -1
  406. package/wc/gv-icon.js.map +1 -0
  407. package/wc/gv-identity-picture.d.ts +1 -0
  408. package/wc/gv-identity-picture.js +2 -1
  409. package/wc/gv-identity-picture.js.map +1 -0
  410. package/wc/gv-image.d.ts +1 -0
  411. package/wc/gv-image.js +2 -1
  412. package/wc/gv-image.js.map +1 -0
  413. package/wc/gv-input-message.d.ts +1 -0
  414. package/wc/gv-input-message.js +2 -1
  415. package/wc/gv-input-message.js.map +1 -0
  416. package/wc/gv-input.d.ts +1 -0
  417. package/wc/gv-input.js +2 -1
  418. package/wc/gv-input.js.map +1 -0
  419. package/wc/gv-link.d.ts +1 -0
  420. package/wc/gv-link.js +2 -1
  421. package/wc/gv-link.js.map +1 -0
  422. package/wc/gv-list.d.ts +1 -0
  423. package/wc/gv-list.js +2 -1
  424. package/wc/gv-list.js.map +1 -0
  425. package/wc/gv-menu.d.ts +1 -0
  426. package/wc/gv-menu.js +2 -1
  427. package/wc/gv-menu.js.map +1 -0
  428. package/wc/gv-message.d.ts +1 -0
  429. package/wc/gv-message.js +2 -1
  430. package/wc/gv-message.js.map +1 -0
  431. package/wc/gv-metric.d.ts +1 -0
  432. package/wc/gv-metric.js +2 -1
  433. package/wc/gv-metric.js.map +1 -0
  434. package/wc/gv-metrics.d.ts +1 -0
  435. package/wc/gv-metrics.js +2 -1
  436. package/wc/gv-metrics.js.map +1 -0
  437. package/wc/gv-modal.d.ts +1 -0
  438. package/wc/gv-modal.js +2 -1
  439. package/wc/gv-modal.js.map +1 -0
  440. package/wc/gv-nav.d.ts +1 -0
  441. package/wc/gv-nav.js +2 -1
  442. package/wc/gv-nav.js.map +1 -0
  443. package/wc/gv-newsletter-subscription.d.ts +1 -0
  444. package/wc/gv-newsletter-subscription.js +2 -1
  445. package/wc/gv-newsletter-subscription.js.map +1 -0
  446. package/wc/gv-option.d.ts +1 -0
  447. package/wc/gv-option.js +2 -1
  448. package/wc/gv-option.js.map +1 -0
  449. package/wc/gv-pagination.d.ts +1 -0
  450. package/wc/gv-pagination.js +2 -1
  451. package/wc/gv-pagination.js.map +1 -0
  452. package/wc/gv-plans.d.ts +1 -0
  453. package/wc/gv-plans.js +2 -1
  454. package/wc/gv-plans.js.map +1 -0
  455. package/wc/gv-policy-studio-menu.d.ts +1 -0
  456. package/wc/gv-policy-studio-menu.js +2 -1
  457. package/wc/gv-policy-studio-menu.js.map +1 -0
  458. package/wc/gv-policy-studio.d.ts +1 -0
  459. package/wc/gv-policy-studio.js +2 -1
  460. package/wc/gv-policy-studio.js.map +1 -0
  461. package/wc/gv-popover.d.ts +1 -0
  462. package/wc/gv-popover.js +2 -1
  463. package/wc/gv-popover.js.map +1 -0
  464. package/wc/gv-promote.d.ts +1 -0
  465. package/wc/gv-promote.js +2 -1
  466. package/wc/gv-promote.js.map +1 -0
  467. package/wc/gv-properties.d.ts +1 -0
  468. package/wc/gv-properties.js +2 -1
  469. package/wc/gv-properties.js.map +1 -0
  470. package/wc/gv-rating-list.d.ts +1 -0
  471. package/wc/gv-rating-list.js +2 -1
  472. package/wc/gv-rating-list.js.map +1 -0
  473. package/wc/gv-rating.d.ts +1 -0
  474. package/wc/gv-rating.js +2 -1
  475. package/wc/gv-rating.js.map +1 -0
  476. package/wc/gv-relative-time.d.ts +1 -0
  477. package/wc/gv-relative-time.js +2 -1
  478. package/wc/gv-relative-time.js.map +1 -0
  479. package/wc/gv-resizable-views.d.ts +1 -0
  480. package/wc/gv-resizable-views.js +2 -1
  481. package/wc/gv-resizable-views.js.map +1 -0
  482. package/wc/gv-resources.d.ts +1 -0
  483. package/wc/gv-resources.js +2 -1
  484. package/wc/gv-resources.js.map +1 -0
  485. package/wc/gv-row-expandable.d.ts +1 -0
  486. package/wc/gv-row-expandable.js +2 -1
  487. package/wc/gv-row-expandable.js.map +1 -0
  488. package/wc/gv-row.d.ts +1 -0
  489. package/wc/gv-row.js +2 -1
  490. package/wc/gv-row.js.map +1 -0
  491. package/wc/gv-schema-form-array.d.ts +1 -0
  492. package/wc/gv-schema-form-array.js +2 -1
  493. package/wc/gv-schema-form-array.js.map +1 -0
  494. package/wc/gv-schema-form-control-object.d.ts +1 -0
  495. package/wc/gv-schema-form-control-object.js +2 -1
  496. package/wc/gv-schema-form-control-object.js.map +1 -0
  497. package/wc/gv-schema-form-control.d.ts +1 -0
  498. package/wc/gv-schema-form-control.js +2 -1
  499. package/wc/gv-schema-form-control.js.map +1 -0
  500. package/wc/gv-schema-form.d.ts +1 -0
  501. package/wc/gv-schema-form.js +2 -1
  502. package/wc/gv-schema-form.js.map +1 -0
  503. package/wc/gv-select-native.d.ts +1 -0
  504. package/wc/gv-select-native.js +2 -1
  505. package/wc/gv-select-native.js.map +1 -0
  506. package/wc/gv-select.d.ts +1 -0
  507. package/wc/gv-select.js +2 -1
  508. package/wc/gv-select.js.map +1 -0
  509. package/wc/gv-spinner.d.ts +1 -0
  510. package/wc/gv-spinner.js +2 -1
  511. package/wc/gv-spinner.js.map +1 -0
  512. package/wc/gv-state.d.ts +1 -0
  513. package/wc/gv-state.js +2 -1
  514. package/wc/gv-state.js.map +1 -0
  515. package/wc/gv-stats.d.ts +1 -0
  516. package/wc/gv-stats.js +2 -1
  517. package/wc/gv-stats.js.map +1 -0
  518. package/wc/gv-stepper.d.ts +1 -0
  519. package/wc/gv-stepper.js +2 -1
  520. package/wc/gv-stepper.js.map +1 -0
  521. package/wc/gv-switch.d.ts +1 -0
  522. package/wc/gv-switch.js +2 -1
  523. package/wc/gv-switch.js.map +1 -0
  524. package/wc/gv-table.d.ts +1 -0
  525. package/wc/gv-table.js +2 -1
  526. package/wc/gv-table.js.map +1 -0
  527. package/wc/gv-tabs.d.ts +1 -0
  528. package/wc/gv-tabs.js +2 -1
  529. package/wc/gv-tabs.js.map +1 -0
  530. package/wc/gv-tag.d.ts +1 -0
  531. package/wc/gv-tag.js +2 -1
  532. package/wc/gv-tag.js.map +1 -0
  533. package/wc/gv-text.d.ts +1 -0
  534. package/wc/gv-text.js +2 -1
  535. package/wc/gv-text.js.map +1 -0
  536. package/wc/gv-theme.d.ts +1 -0
  537. package/wc/gv-theme.js +2 -1
  538. package/wc/gv-theme.js.map +1 -0
  539. package/wc/gv-tree.d.ts +1 -0
  540. package/wc/gv-tree.js +2 -1
  541. package/wc/gv-tree.js.map +1 -0
  542. package/wc/gv-user-menu.d.ts +1 -0
  543. package/wc/gv-user-menu.js +2 -1
  544. package/wc/gv-user-menu.js.map +1 -0
  545. package/wc/gv-vertical-menu.d.ts +1 -0
  546. package/wc/gv-vertical-menu.js +2 -1
  547. package/wc/gv-vertical-menu.js.map +1 -0
@@ -35,408 +35,562 @@ import { getFlowName, methods } from '../lib/studio';
35
35
  * @attr {Boolean} disabled - true for disabled
36
36
  * @attr {Boolean} readonly - true if readonly
37
37
  */
38
-
39
38
  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);
39
+ static get properties() {
40
+ return {
41
+ flow: { type: Object },
42
+ plan: { type: Object },
43
+ policies: { type: Object },
44
+ selectedStepId: { type: String },
45
+ dragPolicy: { type: Object },
46
+ dropPolicy: { type: Object },
47
+ disabled: { type: Boolean, reflect: true },
48
+ hasPolicyFilter: { type: Boolean, attribute: 'has-policy-filter' },
49
+ flowsTitle: { type: String, attribute: 'flows-title' },
50
+ readonly: { type: Boolean, reflect: true },
51
+ };
104
52
  }
105
-
106
- return candidate;
107
- }
108
-
109
- removeCandidate() {
110
- const candidate = this.getCandidate();
111
-
112
- if (candidate) {
113
- candidate.remove();
53
+ constructor() {
54
+ super();
55
+ this.flowsTitle = 'Flows';
56
+ this.addEventListener('mouseleave', this._onMouseLeave);
114
57
  }
115
- }
116
-
117
- _canDropPolicy(flowKey, policy) {
118
- if (this.disabled || this.readonly) {
119
- return false;
58
+ _onMouseLeave() {
59
+ this.dragPolicy = null;
60
+ this.dropPolicy = null;
120
61
  }
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
- }
62
+ getCandidate() {
63
+ return this.shadowRoot.querySelector('gv-flow-step[empty]');
130
64
  }
131
-
132
- return false;
133
- }
134
-
135
- _onDragOver(flowKey, e) {
136
- if (!this.disabled && !this.readonly) {
137
- if (e.dataTransfer.items.length > 0) {
65
+ getFlowSteps() {
66
+ return Array.from(this.shadowRoot.querySelectorAll('gv-flow-step'));
67
+ }
68
+ getOrCreateCandidate() {
69
+ let candidate = this.getCandidate();
70
+ if (!candidate) {
71
+ candidate = document.createElement('gv-flow-step');
72
+ candidate.setAttribute('empty', true);
73
+ }
74
+ return candidate;
75
+ }
76
+ removeCandidate() {
77
+ const candidate = this.getCandidate();
78
+ if (candidate) {
79
+ candidate.remove();
80
+ }
81
+ }
82
+ _canDropPolicy(flowKey, policy) {
83
+ if (this.disabled || this.readonly) {
84
+ return false;
85
+ }
86
+ if (policy != null) {
87
+ if (flowKey === 'pre') {
88
+ return this.hasPolicyFilter !== true || policy.onRequest === true;
89
+ }
90
+ else if (flowKey === 'post') {
91
+ return this.hasPolicyFilter !== true || policy.onResponse === true;
92
+ }
93
+ else {
94
+ throw new Error(`The flowkey [${flowKey}] parameter must be "pre" or "post"`);
95
+ }
96
+ }
97
+ return false;
98
+ }
99
+ _onDragOver(flowKey, e) {
100
+ if (!this.disabled && !this.readonly) {
101
+ if (e.dataTransfer.items.length > 0) {
102
+ e.preventDefault();
103
+ e.stopPropagation();
104
+ if (this.dropPolicy == null) {
105
+ this.dropPolicy = this.dragPolicy;
106
+ }
107
+ else {
108
+ this.dragPolicy = this.dropPolicy;
109
+ }
110
+ if (this.dropPolicy != null &&
111
+ this._canDropPolicy(flowKey, this.dropPolicy.policy) &&
112
+ !e.target.classList.contains('candidate') &&
113
+ !e.target.hasAttribute('dragging')) {
114
+ if (e.target.tagName.toLowerCase() === 'gv-flow-step') {
115
+ const { x, width } = e.target.getBoundingClientRect();
116
+ const condition = flowKey === 'post' ? e.clientX - x <= width / 2 : e.clientX - x >= width / 2;
117
+ if (condition && !(e.target.nextElementSibling && e.target.nextElementSibling.hasAttribute('dragging'))) {
118
+ e.target.insertAdjacentElement('afterend', this.getOrCreateCandidate());
119
+ }
120
+ else if (!(e.target.previousElementSibling && e.target.previousElementSibling.hasAttribute('dragging'))) {
121
+ e.target.insertAdjacentElement('beforebegin', this.getOrCreateCandidate());
122
+ }
123
+ }
124
+ else if (e.target.classList && e.target.classList.contains('drop-area-grid')) {
125
+ const dropAreas = e.target.querySelectorAll('gv-flow-step');
126
+ if (dropAreas.length === 0) {
127
+ e.target.prepend(this.getOrCreateCandidate());
128
+ }
129
+ }
130
+ else {
131
+ this.removeCandidate();
132
+ }
133
+ }
134
+ }
135
+ }
136
+ }
137
+ _onDragEnd() {
138
+ if (!this.disabled && !this.readonly) {
139
+ if (this._draggablePolicyImage) {
140
+ this._draggablePolicyImage.remove();
141
+ this._draggablePolicyImage = null;
142
+ }
143
+ this.dragPolicy = null;
144
+ this.dropPolicy = null;
145
+ }
146
+ }
147
+ _onDragStart(sourceFlowKey, flowStep, sourcePosition, e) {
148
+ if (!this.disabled && !this.readonly) {
149
+ const policy = this.findPolicy(flowStep.policy);
150
+ if (policy != null) {
151
+ // Simulate click on window for close all dropdown menu
152
+ const windowClick = document.createEvent('Events');
153
+ windowClick.initEvent('click', true, false);
154
+ window.dispatchEvent(windowClick);
155
+ e.target.setAttribute('dragging', true);
156
+ this.shadowRoot.querySelector('.drop-area-grid').classList.add('dragging');
157
+ this.dropPolicy = new PolicyDraggable(policy, sourcePosition, sourceFlowKey, this.flow._id, flowStep);
158
+ e.dataTransfer.setData('text/plain', this.dropPolicy.toString());
159
+ if (policy) {
160
+ const size = 100;
161
+ this._draggablePolicyImage = appendDraggableImage(policy.icon, size);
162
+ e.dataTransfer.setDragImage(this._draggablePolicyImage, size / 2, size / 2);
163
+ }
164
+ dispatchCustomEvent(this, 'drag-start', this.dropPolicy);
165
+ }
166
+ }
167
+ }
168
+ async performUpdate() {
169
+ this.getFlowSteps().forEach((s) => {
170
+ s.requestUpdate();
171
+ });
172
+ super.performUpdate();
173
+ }
174
+ get draggingArea() {
175
+ return this.shadowRoot.querySelector('gv-flow-step[dragging]');
176
+ }
177
+ _onDrop(flowKey, e) {
178
+ this.shadowRoot.querySelectorAll('gv-flow-step').forEach((step) => step.resetConfirm());
138
179
  e.preventDefault();
139
180
  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());
181
+ const box = e.target.closest('.drop-area-grid');
182
+ const candidate = this.getCandidate();
183
+ const draggingArea = this.draggingArea;
184
+ if (candidate) {
185
+ let position = 0;
186
+ [...box.querySelectorAll('gv-flow-step')].some((area) => {
187
+ if (!area.hasAttribute('empty')) {
188
+ position++;
189
+ }
190
+ return area.hasAttribute('empty');
191
+ });
192
+ const { policy, sourceFlowKey, sourceFlowId, sourcePosition, flowStep } = this.dropPolicy;
193
+ const move = () => {
194
+ if (draggingArea) {
195
+ draggingArea.removeAttribute('dragging');
196
+ }
197
+ candidate.remove();
198
+ dispatchCustomEvent(this, 'drop', {
199
+ flowId: this.flow._id,
200
+ flowKey,
201
+ position,
202
+ flowStep,
203
+ policy,
204
+ sourcePosition,
205
+ sourceFlowKey,
206
+ sourceFlowId,
207
+ });
208
+ this.dragPolicy = null;
209
+ this.dropPolicy = null;
210
+ };
211
+ if (sourceFlowId != null && this.flow._id !== sourceFlowId) {
212
+ candidate.setAttribute('confirm', true);
213
+ candidate.addEventListener('gv-flow-step:copy', () => {
214
+ candidate.remove();
215
+ this.dragPolicy = null;
216
+ this.dropPolicy = null;
217
+ dispatchCustomEvent(this, 'drop', {
218
+ flowId: this.flow._id,
219
+ flowKey,
220
+ position,
221
+ policy,
222
+ flowStep,
223
+ cancelEdit: true,
224
+ });
225
+ });
226
+ candidate.addEventListener('gv-flow-step:move', () => {
227
+ candidate.remove();
228
+ move();
229
+ });
159
230
  }
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());
231
+ else {
232
+ move();
165
233
  }
166
- } else {
234
+ }
235
+ else if (draggingArea) {
236
+ draggingArea.removeAttribute('dragging');
237
+ this.dragPolicy = null;
238
+ this.dropPolicy = null;
239
+ }
240
+ }
241
+ getFlowStep(flowKey, position) {
242
+ return this.flow[flowKey][position];
243
+ }
244
+ _onEditStep({ detail: { step, policy, group } }) {
245
+ dispatchCustomEvent(this, 'edit', { flow: this.flow, step, policy, group });
246
+ }
247
+ _onDuplicateStep(flowKey, position) {
248
+ const step = this.getFlowStep(flowKey, position);
249
+ const duplicatePosition = position + 1;
250
+ const policy = this.findPolicy(step.policy);
251
+ const duplicateStep = { ...step, _id: uuid() };
252
+ dispatchCustomEvent(this, 'drop', {
253
+ flowId: this.flow._id,
254
+ flowKey,
255
+ position: duplicatePosition,
256
+ flowStep: duplicateStep,
257
+ policy,
258
+ });
259
+ }
260
+ _isEditable(step) {
261
+ return this.selectedStepId && this.selectedStepId === step._id;
262
+ }
263
+ _onDeleteStep(flowKey, position, e) {
264
+ dispatchCustomEvent(this, 'delete', { flowKey, position, flowId: this.flow._id, target: e.target });
265
+ }
266
+ _onChangeStepState(flowKey, position, { detail }) {
267
+ dispatchCustomEvent(this, 'change-state', { flowKey, position, flowId: this.flow._id, ...detail });
268
+ }
269
+ _renderDropStep(group, step, position) {
270
+ if (step) {
271
+ return html `<gv-flow-step
272
+ .step="${step}"
273
+ .policy="${this.findPolicy(step.policy)}"
274
+ .id="${step._id}"
275
+ .group="${group}"
276
+ .parent="${this.flow._id}"
277
+ ?disabled="${this.disabled}"
278
+ ?readonly="${this.readonly}"
279
+ .draggable="${!this.disabled && !this.readonly}"
280
+ ?editing="${this._isEditable(step)}"
281
+ @dragstart="${this._onDragStart.bind(this, group, step, position)}"
282
+ @dragend="${this._onDragEnd}"
283
+ @gv-flow-step:edit="${this._onEditStep}"
284
+ @gv-flow-step:change-state="${this._onChangeStepState.bind(this, group, position)}"
285
+ @gv-flow-step:delete="${this._onDeleteStep.bind(this, group, position)}"
286
+ @gv-flow-step:duplicate="${this._onDuplicateStep.bind(this, group, position)}"
287
+ ></gv-flow-step>`;
288
+ }
289
+ else {
290
+ return html ``;
291
+ }
292
+ }
293
+ async getUpdateComplete() {
294
+ await super.getUpdateComplete();
295
+ await Promise.all(this.getFlowSteps().map((e) => e.updateComplete));
296
+ }
297
+ updated(properties) {
298
+ if (properties.has('data')) {
299
+ this.onDragEnd();
300
+ }
301
+ if (properties.has('dropPolicy') || properties.has('dragPolicy')) {
302
+ if (this.dropPolicy == null && this.dragPolicy == null) {
303
+ this.removeCandidate();
304
+ }
305
+ }
306
+ }
307
+ onDragEnd() {
308
+ setTimeout(() => {
309
+ this.shadowRoot.querySelector('.drop-area-grid').classList.remove('dragging');
167
310
  this.removeCandidate();
168
- }
311
+ const draggingArea = this.draggingArea;
312
+ if (draggingArea) {
313
+ draggingArea.removeAttribute('dragging');
314
+ }
315
+ }, 0);
316
+ }
317
+ _getLabel(flowKey) {
318
+ if (this.flow.type) {
319
+ return html `
320
+ <div class="drop-box-type">${flowKey}</div>
321
+ <div>${this.flow.type.toUpperCase() === 'ROOT' ? 'flow' : this.flow.type}</div>
322
+ `;
169
323
  }
170
- }
324
+ else if (flowKey === 'pre') {
325
+ return 'request';
326
+ }
327
+ else if (flowKey === 'post') {
328
+ return 'response';
329
+ }
330
+ return '';
171
331
  }
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;
332
+ get collectionName() {
333
+ return this.plan != null ? this.plan.name : this.flowsTitle;
184
334
  }
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);
335
+ render() {
336
+ const preTarget = this.dragPolicy && (this.hasPolicyFilter !== true || this.dragPolicy.policy.onRequest);
337
+ const postTarget = this.dragPolicy && (this.hasPolicyFilter !== true || this.dragPolicy.policy.onResponse);
338
+ const preForbidden = this.dragPolicy && this.hasPolicyFilter === true && !this.dragPolicy.policy.onRequest;
339
+ const postForbidden = this.dragPolicy && this.hasPolicyFilter === true && !this.dragPolicy.policy.onResponse;
340
+ const hasPost = this.flow.type == null || (this.flow.type && this.flow.type.toLowerCase() !== 'root');
341
+ return html `<div class="box">
342
+ <div class="container">
343
+ <div class="header">
344
+ <div class="title">${getFlowName(this.flow, this.collectionName)}</div>
345
+ </div>
346
+ <div class="content">
347
+ <div class="flow">
348
+ <div class="${classMap({ pre: true, targeted: preTarget, forbidden: preForbidden })}">
349
+ <div class="arrow arrow-right"></div>
350
+ <div
351
+ class="drop-box"
352
+ @drop="${this._onDrop.bind(this, 'pre')}"
353
+ @dragend="${this.onDragEnd}"
354
+ @dragover="${this._onDragOver.bind(this, 'pre')}"
355
+ >
356
+ <div class="drop-box-title">${preTarget ? 'drop here' : this._getLabel('pre')}</div>
357
+ <div class="drop-area-grid">${this.flow.pre.map((flowStep, i) => this._renderDropStep('pre', flowStep, i))}</div>
358
+ </div>
359
+ </div>
360
+
361
+ ${hasPost
362
+ ? html `
363
+ <div class="${classMap({ post: true, targeted: postTarget, forbidden: postForbidden })}">
364
+ <div class='arrow arrow-left'> </div>
365
+ <div class="drop-box"
366
+ @drop="${this._onDrop.bind(this, 'post')}"
367
+ @dragend="${this.onDragEnd}"
368
+ @dragover="${this._onDragOver.bind(this, 'post')}">
369
+ <div class="drop-area-grid drop-area-grid-reverse">
370
+ ${this.flow.post.map((flowStep, i) => this._renderDropStep('post', flowStep, i))}
371
+ </div>
372
+ <div class="drop-box-title">${postTarget ? 'drop here' : this._getLabel('post')}</div>
373
+ </div>
374
+ </div>
375
+ </div>`
376
+ : ''}
377
+ </div>
378
+ </div>
379
+ </div>
380
+ </div>`;
381
+ }
382
+ findPolicy(policyId) {
383
+ const policy = this.policies.find((p) => p.id === policyId);
384
+ if (policy == null) {
385
+ // throw new Error(`Policy ${policyId} not found`);
205
386
  }
206
-
207
- dispatchCustomEvent(this, 'drag-start', this.dropPolicy);
208
- }
387
+ return policy;
209
388
  }
210
- }
211
-
212
- async performUpdate() {
213
- this.getFlowSteps().forEach(s => {
214
- s.requestUpdate();
215
- });
216
- super.performUpdate();
217
- }
389
+ static get styles() {
390
+ return [
391
+ methods,
392
+ // language=CSS
393
+ css `
394
+ :host {
395
+ box-sizing: border-box;
396
+ position: relative;
397
+ display: block;
398
+ height: 100%;
399
+ }
218
400
 
219
- get draggingArea() {
220
- return this.shadowRoot.querySelector('gv-flow-step[dragging]');
221
- }
401
+ .flow {
402
+ padding-left: 20px;
403
+ display: flex;
404
+ height: 100%;
405
+ flex-direction: column;
406
+ }
222
407
 
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;
408
+ .drop-area-grid {
409
+ flex: 1;
410
+ border: 1px dashed transparent;
411
+ transition: all 350ms ease-in-out;
412
+ position: relative;
413
+ display: flex;
414
+ flex-wrap: wrap;
415
+ max-width: calc(100% - 40px);
416
+ align-items: center;
417
+ min-height: 150px;
418
+ box-sizing: border-box;
419
+ padding: 0 30px;
420
+ }
230
421
 
231
- if (candidate) {
232
- let position = 0;
233
- [...box.querySelectorAll('gv-flow-step')].some(area => {
234
- if (!area.hasAttribute('empty')) {
235
- position++;
422
+ .targeted .drop-area-grid {
423
+ border: 1px dashed #d9d9d9;
236
424
  }
237
425
 
238
- return area.hasAttribute('empty');
239
- });
240
- const {
241
- policy,
242
- sourceFlowKey,
243
- sourceFlowId,
244
- sourcePosition,
245
- flowStep
246
- } = this.dropPolicy;
426
+ .forbidden .drop-area-grid {
427
+ background-color: #efefef;
428
+ opacity: 0.2;
429
+ }
247
430
 
248
- const move = () => {
249
- if (draggingArea) {
250
- draggingArea.removeAttribute('dragging');
431
+ gv-flow-step {
432
+ flex: 1;
251
433
  }
252
434
 
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
- };
435
+ .message {
436
+ text-transform: uppercase;
437
+ color: #d9d9d9;
438
+ opacity: 0;
439
+ transition: opacity 350ms ease-in-out;
440
+ font-size: 18px;
441
+ text-align: center;
442
+ align-self: center;
443
+ }
267
444
 
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
- }
445
+ .message {
446
+ width: 100%;
447
+ }
296
448
 
297
- getFlowStep(flowKey, position) {
298
- return this.flow[flowKey][position];
299
- }
449
+ .targeted .message {
450
+ opacity: 1;
451
+ }
300
452
 
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
- }
453
+ .targeted .drop-area-empty {
454
+ opacity: 0;
455
+ transition: all 350ms ease-in-out;
456
+ }
315
457
 
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
- }
458
+ .pre,
459
+ .post {
460
+ position: relative;
461
+ flex: 1;
462
+ display: flex;
463
+ }
331
464
 
332
- _isEditable(step) {
333
- return this.selectedStepId && this.selectedStepId === step._id;
334
- }
465
+ .arrow {
466
+ background-color: #d9d9d9;
467
+ width: calc(100% - 50px * 2 - 1px);
468
+ text-align: center;
469
+ position: absolute;
470
+ margin: 0 30px;
471
+ color: #262626;
472
+ top: calc(50% - 20px);
473
+ height: 40px;
474
+ }
335
475
 
336
- _onDeleteStep(flowKey, position, e) {
337
- dispatchCustomEvent(this, 'delete', {
338
- flowKey,
339
- position,
340
- flowId: this.flow._id,
341
- target: e.target
342
- });
343
- }
476
+ .arrow-right::after {
477
+ width: 0;
478
+ height: 0;
479
+ border-top: 40px solid transparent;
480
+ border-bottom: 40px solid transparent;
481
+ border-left: 40px solid #d9d9d9;
482
+ content: ' ';
483
+ position: absolute;
484
+ right: -20px;
485
+ top: -20px;
486
+ }
344
487
 
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
- }
488
+ .drop-box-type {
489
+ position: relative;
490
+ writing-mode: horizontal-tb;
491
+ margin-bottom: 10px;
492
+ }
355
493
 
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
- }
494
+ .drop-box-title {
495
+ position: relative;
496
+ writing-mode: vertical-lr;
497
+ text-orientation: upright;
498
+ text-transform: uppercase;
499
+ color: #bfbfbf;
500
+ font-size: 13px;
501
+ font-weight: 500;
502
+ text-align: center;
503
+ max-height: 145px;
504
+ line-height: 13px;
505
+ display: flex;
506
+ align-items: center;
507
+ min-width: 30px;
508
+ }
363
509
 
364
- async getUpdateComplete() {
365
- await super.getUpdateComplete();
366
- await Promise.all(this.getFlowSteps().map(e => e.updateComplete));
367
- }
510
+ .pre .drop-box-title {
511
+ position: absolute;
512
+ left: -30px;
513
+ }
368
514
 
369
- updated(properties) {
370
- if (properties.has('data')) {
371
- this.onDragEnd();
372
- }
515
+ .arrow-left::after {
516
+ width: 0;
517
+ height: 0;
518
+ border-top: 40px solid transparent;
519
+ border-bottom: 40px solid transparent;
520
+ border-right: 40px solid #d9d9d9;
521
+ content: ' ';
522
+ position: absolute;
523
+ left: -20px;
524
+ top: -20px;
525
+ }
373
526
 
374
- if (properties.has('dropPolicy') || properties.has('dragPolicy')) {
375
- if (this.dropPolicy == null && this.dragPolicy == null) {
376
- this.removeCandidate();
377
- }
378
- }
379
- }
527
+ .drop-box {
528
+ display: flex;
529
+ border: 1px solid transparent;
530
+ margin: 0 30px;
531
+ align-items: center;
532
+ position: relative;
533
+ width: 100%;
534
+ }
380
535
 
381
- onDragEnd() {
382
- setTimeout(() => {
383
- this.shadowRoot.querySelector('.drop-area-grid').classList.remove('dragging');
384
- this.removeCandidate();
385
- const draggingArea = this.draggingArea;
536
+ .drop-area-grid-reverse {
537
+ flex-direction: row-reverse;
538
+ }
386
539
 
387
- if (draggingArea) {
388
- draggingArea.removeAttribute('dragging');
389
- }
390
- }, 0);
391
- }
540
+ .header {
541
+ border-bottom: 1px solid #d9d9d9;
542
+ display: flex;
543
+ min-height: 45px;
544
+ margin-bottom: 0.5rem;
545
+ }
392
546
 
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
- }
547
+ .header .title {
548
+ color: #28444f;
549
+ font-size: 18px;
550
+ display: flex;
551
+ align-items: center;
552
+ margin: 0 0.5rem;
553
+ width: 100%;
554
+ }
401
555
 
402
- return '';
403
- }
556
+ .header .title .flow-path {
557
+ flex: 1;
558
+ }
404
559
 
405
- get collectionName() {
406
- return this.plan != null ? this.plan.name : this.flowsTitle;
407
- }
560
+ .box {
561
+ position: absolute;
562
+ display: flex;
563
+ flex-direction: column;
564
+ width: 100%;
565
+ top: 0;
566
+ bottom: 0;
567
+ left: 0;
568
+ }
408
569
 
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
- }
570
+ .container {
571
+ flex-grow: 1;
425
572
 
426
- findPolicy(policyId) {
427
- const policy = this.policies.find(p => p.id === policyId);
573
+ display: flex;
574
+ flex-direction: column;
428
575
 
429
- if (policy == null) {// throw new Error(`Policy ${policyId} not found`);
430
- }
576
+ /* for Firefox */
577
+ min-height: 0;
578
+ height: 100%;
579
+ }
431
580
 
432
- return policy;
433
- }
581
+ .content {
582
+ background: white;
583
+ flex-grow: 1;
434
584
 
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
- }
585
+ overflow: auto;
439
586
 
587
+ /* for Firefox */
588
+ min-height: 0;
589
+ padding: 0.5rem;
590
+ }
591
+ `,
592
+ ];
593
+ }
440
594
  }
441
595
  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
596
+ //# sourceMappingURL=gv-flow.js.map