@gravitee/ui-components 3.25.3 → 3.25.4

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 +10 -7
  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 +123 -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
@@ -40,607 +40,662 @@ import './gv-schema-form-control';
40
40
  * @cssprop {Color} [--gv-schema-form--bgc=#ffffff] - Background color
41
41
  * @cssprop {Length} [--gv-schema-form-control--m=0.4rem] - Control margin
42
42
  */
43
-
44
43
  export class GvSchemaForm extends LitElement {
45
- static get properties() {
46
- return {
47
- schema: {
48
- type: Object
49
- },
50
- errors: {
51
- type: Object
52
- },
53
- values: {
54
- type: Object
55
- },
56
- submitLabel: {
57
- type: String
58
- },
59
- hasFooter: {
60
- type: Boolean,
61
- attribute: 'has-footer'
62
- },
63
- hasHeader: {
64
- type: Boolean,
65
- attribute: 'has-header'
66
- },
67
- _confirm: {
68
- type: Object
69
- },
70
- _values: {
71
- type: Object,
72
- attribute: false
73
- },
74
- dirty: {
75
- type: Boolean,
76
- reflect: true
77
- },
78
- hideDeprecated: {
79
- type: Boolean,
80
- attribute: 'hide-deprecated'
81
- },
82
- validateOnRender: {
83
- type: Boolean,
84
- attribute: 'validate-on-render'
85
- },
86
- _validatorResults: {
87
- type: Object
88
- },
89
- skeleton: {
90
- type: Boolean,
91
- reflect: true
92
- },
93
- _touch: {
94
- type: Boolean
95
- },
96
- readonly: {
97
- type: Boolean,
98
- reflect: true
99
- },
100
- scrollable: {
101
- type: Boolean,
102
- reflect: true
103
- },
104
- groups: {
105
- type: Array
106
- }
107
- };
108
- }
109
-
110
- constructor() {
111
- super();
112
- this.hideDeprecated = false;
113
- this._values = {};
114
- this.submitLabel = 'Ok';
115
- this.hasHeader = false;
116
- this.hasFooter = false;
117
- this._touch = false;
118
- this._validator = new Validator();
119
- this._validatorResults = {};
120
- this._ignoreProperties = [];
121
- this._dynamicControls = [];
122
- this._dynamicAttributes = ['disabled', 'required', 'hidden'];
123
- this.groups = null;
124
- this.addEventListener('gv-schema-form-control:default-value', this._onDefaultValue.bind(this));
125
- this.addEventListener('gv-schema-form-control:change', this._onChange.bind(this));
126
- this.addEventListener('gv-schema-form-control:control-ready', this._onControlReady.bind(this));
127
- }
128
-
129
- set values(values) {
130
- if (!deepEqual(this._values, values)) {
131
- if (values) {
132
- this._initialValues = { ...values
44
+ static get properties() {
45
+ return {
46
+ schema: { type: Object },
47
+ errors: { type: Object },
48
+ values: { type: Object },
49
+ submitLabel: { type: String },
50
+ hasFooter: { type: Boolean, attribute: 'has-footer' },
51
+ hasHeader: { type: Boolean, attribute: 'has-header' },
52
+ _confirm: { type: Object },
53
+ _values: { type: Object, attribute: false },
54
+ dirty: { type: Boolean, reflect: true },
55
+ hideDeprecated: { type: Boolean, attribute: 'hide-deprecated' },
56
+ validateOnRender: { type: Boolean, attribute: 'validate-on-render' },
57
+ _validatorResults: { type: Object },
58
+ skeleton: { type: Boolean, reflect: true },
59
+ _touch: { type: Boolean },
60
+ readonly: { type: Boolean, reflect: true },
61
+ scrollable: { type: Boolean, reflect: true },
62
+ groups: { type: Array },
133
63
  };
134
- } else {
135
- this._initialValues = {};
136
- }
137
-
138
- this._values = deepClone(this._initialValues);
139
64
  }
140
- }
141
-
142
- get values() {
143
- return this._values;
144
- }
145
-
146
- reset(values = null) {
147
- this._values = deepClone(values || this._initialValues);
148
- this._touch = false;
149
-
150
- this._setDirty(false);
151
-
152
- this.getControls().forEach(s => {
153
- s.requestUpdate();
154
- });
155
- }
156
-
157
- _onReset() {
158
- this.reset();
159
- dispatchCustomEvent(this, 'reset');
160
- }
161
-
162
- requestValidation() {
163
- clearTimeout(this._validateTimeout);
164
- this._validateTimeout = setTimeout(() => {
165
- this.validate();
166
-
167
- this._updateActions();
168
- }, 350);
169
- }
170
-
171
- submit() {
172
- this._onSubmit();
173
- }
174
-
175
- _onSubmit() {
176
- const validatorResults = this.validate();
177
-
178
- if (this.isValid()) {
179
- this._initialValues = deepClone(this._values);
180
- this.dirty = false;
181
- this._touch = false;
182
- dispatchCustomEvent(this, 'submit', {
183
- values: this._values,
184
- validatorResults
185
- });
186
- } else {
187
- dispatchCustomEvent(this, 'error', {
188
- values: this._values,
189
- validatorResults
190
- });
191
- }
192
- }
193
-
194
- _setDirty(dirty = true) {
195
- this.dirty = !!dirty;
196
- }
197
-
198
- _setTouch(touch = true) {
199
- this._touch = !!touch;
200
- }
201
-
202
- confirm() {
203
- if (this.isTouch()) {
204
- if (this._confirm && this._confirm.promise) {
205
- return this._confirm.promise;
206
- }
207
-
208
- const promise = new Promise((resolve, reject) => this._confirm = {
209
- resolve,
210
- reject
211
- });
212
- this._confirm.promise = promise;
213
- return promise;
65
+ constructor() {
66
+ super();
67
+ this.hideDeprecated = false;
68
+ this._values = {};
69
+ this.submitLabel = 'Ok';
70
+ this.hasHeader = false;
71
+ this.hasFooter = false;
72
+ this._touch = false;
73
+ this._validator = new Validator();
74
+ this._validatorResults = {};
75
+ this._ignoreProperties = [];
76
+ this._dynamicControls = [];
77
+ this._dynamicAttributes = ['disabled', 'required', 'hidden'];
78
+ this.groups = null;
79
+ this.addEventListener('gv-schema-form-control:default-value', this._onDefaultValue.bind(this));
80
+ this.addEventListener('gv-schema-form-control:change', this._onChange.bind(this));
81
+ this.addEventListener('gv-schema-form-control:control-ready', this._onControlReady.bind(this));
214
82
  }
215
-
216
- return Promise.resolve();
217
- }
218
-
219
- _onConfirmReset() {
220
- const {
221
- resolve
222
- } = this._confirm;
223
- this._confirm = null;
224
-
225
- this._onReset();
226
-
227
- this.requestUpdate();
228
- this.updateComplete.then(() => {
229
- resolve(this);
230
- });
231
- }
232
-
233
- _onConfirmEdit() {
234
- this._confirm.reject(this);
235
-
236
- this._confirm = null;
237
-
238
- this._updateChildren(this.validateOnRender);
239
- }
240
-
241
- _getSubmitBtn() {
242
- return this.shadowRoot.querySelector('#submit');
243
- }
244
-
245
- _getResetBtn() {
246
- return this.shadowRoot.querySelector('#reset');
247
- }
248
-
249
- _dispatchChange() {
250
- clearTimeout(this._changeTimeout);
251
- this._changeTimeout = setTimeout(() => {
252
- dispatchCustomEvent(this, 'change', {
253
- target: this,
254
- values: this._values,
255
- validation: this._validatorResults
256
- });
257
- }, 50);
258
- }
259
-
260
- _onDefaultValue({
261
- detail: {
262
- currentTarget,
263
- value,
264
- control
83
+ set values(values) {
84
+ if (!deepEqual(this._values, values)) {
85
+ if (values) {
86
+ this._initialValues = { ...values };
87
+ }
88
+ else {
89
+ this._initialValues = {};
90
+ }
91
+ this._values = deepClone(this._initialValues);
92
+ }
265
93
  }
266
- }) {
267
- if (control.type === 'integer' && value != null && (value.trim && value.length > 0 || value.length > 0)) {
268
- value = parseInt(value, 10);
94
+ get values() {
95
+ return this._values;
269
96
  }
270
-
271
- set(this._values, currentTarget.id, value);
272
- }
273
-
274
- _onChange({
275
- detail: {
276
- currentTarget,
277
- value,
278
- control
279
- }
280
- }) {
281
- this._setTouch(true);
282
-
283
- if (control.type === 'integer') {
284
- if (typeof value === 'string' && value.trim().length === 0) {
285
- value = null;
286
- } else {
287
- const intValue = Number(value).valueOf();
288
-
289
- if (!isNaN(intValue)) {
290
- value = intValue;
291
- } else {
292
- value = null;
293
- }
294
- }
295
- } else if (control.type === 'array' && value.length === 0) {
296
- value = null;
297
- } else if (control.type === 'string' && value.trim().length === 0 && !control.enum) {
298
- value = null;
299
- } else if (control.type === 'object') {
300
- if (Object.keys(value).length === 0) {
301
- value = null;
302
- }
97
+ reset(values = null) {
98
+ this._values = deepClone(values || this._initialValues);
99
+ this._touch = false;
100
+ this._setDirty(false);
101
+ this.getControls().forEach((s) => {
102
+ s.requestUpdate();
103
+ });
303
104
  }
304
-
305
- if (value == null) {
306
- del(this._values, currentTarget.id);
307
- } else {
308
- set(this._values, currentTarget.id, value);
105
+ _onReset() {
106
+ this.reset();
107
+ dispatchCustomEvent(this, 'reset');
309
108
  }
310
-
311
- this._updateDynamicControls();
312
-
313
- this._validatorResults = this.validate();
314
- this.dirty = true;
315
-
316
- this._updateActions();
317
-
318
- this._dispatchChange();
319
- }
320
-
321
- _onControlReady(e) {
322
- e.stopPropagation();
323
- e.preventDefault();
324
- const controlElement = e.detail.control;
325
- const control = controlElement.control;
326
-
327
- if (control['x-schema-form']) {
328
- if (control['x-schema-form'].event) {
329
- const event = control['x-schema-form'].event;
330
- dispatchCustomEvent(this, event.name, { ...event,
331
- ...e.detail
109
+ requestValidation() {
110
+ clearTimeout(this._validateTimeout);
111
+ this._validateTimeout = setTimeout(() => {
112
+ this.validate();
113
+ this._updateActions();
114
+ }, 350);
115
+ }
116
+ submit() {
117
+ this._onSubmit();
118
+ }
119
+ _onSubmit() {
120
+ const validatorResults = this.validate();
121
+ if (this.isValid()) {
122
+ this._initialValues = deepClone(this._values);
123
+ this.dirty = false;
124
+ this._touch = false;
125
+ dispatchCustomEvent(this, 'submit', { values: this._values, validatorResults });
126
+ }
127
+ else {
128
+ dispatchCustomEvent(this, 'error', { values: this._values, validatorResults });
129
+ }
130
+ }
131
+ _setDirty(dirty = true) {
132
+ this.dirty = !!dirty;
133
+ }
134
+ _setTouch(touch = true) {
135
+ this._touch = !!touch;
136
+ }
137
+ confirm() {
138
+ if (this.isTouch()) {
139
+ if (this._confirm && this._confirm.promise) {
140
+ return this._confirm.promise;
141
+ }
142
+ const promise = new Promise((resolve, reject) => (this._confirm = { resolve, reject }));
143
+ this._confirm.promise = promise;
144
+ return promise;
145
+ }
146
+ return Promise.resolve();
147
+ }
148
+ _onConfirmReset() {
149
+ const { resolve } = this._confirm;
150
+ this._confirm = null;
151
+ this._onReset();
152
+ this.requestUpdate();
153
+ this.updateComplete.then(() => {
154
+ resolve(this);
332
155
  });
333
- } else if (this._hasCondition(control)) {
334
- this._dynamicControls.push(controlElement);
335
-
336
- this._updateDynamicControl(controlElement);
337
- }
338
156
  }
339
- }
340
-
341
- _updateDynamicControls() {
342
- this._ignoreProperties = [];
343
-
344
- this._dynamicControls.forEach(controlElement => {
345
- this._updateDynamicControl(controlElement);
346
- });
347
- }
348
-
349
- _updateDynamicControl(controlElement) {
350
- const control = controlElement.control;
351
-
352
- if (control['x-schema-form']) {
353
- this._dynamicAttributes.forEach(attribute => {
354
- const is = this._evaluateCondition(control, attribute);
355
-
356
- if (is) {
357
- controlElement.setAttribute(attribute, '');
358
-
359
- if (attribute === 'hidden') {
360
- this._ignoreProperties.push(controlElement.id);
361
- }
362
- } else {
363
- controlElement.removeAttribute(attribute);
157
+ _onConfirmEdit() {
158
+ this._confirm.reject(this);
159
+ this._confirm = null;
160
+ this._updateChildren(this.validateOnRender);
161
+ }
162
+ _getSubmitBtn() {
163
+ return this.shadowRoot.querySelector('#submit');
164
+ }
165
+ _getResetBtn() {
166
+ return this.shadowRoot.querySelector('#reset');
167
+ }
168
+ _dispatchChange() {
169
+ clearTimeout(this._changeTimeout);
170
+ this._changeTimeout = setTimeout(() => {
171
+ dispatchCustomEvent(this, 'change', { target: this, values: this._values, validation: this._validatorResults });
172
+ }, 50);
173
+ }
174
+ _onDefaultValue({ detail: { currentTarget, value, control } }) {
175
+ if (control.type === 'integer' && value != null && ((value.trim && value.length > 0) || value.length > 0)) {
176
+ value = parseInt(value, 10);
364
177
  }
365
- });
178
+ set(this._values, currentTarget.id, value);
366
179
  }
367
-
368
- return null;
369
- }
370
-
371
- async performUpdate() {
372
- await Promise.all(this.getControls().map(e => e.updateComplete));
373
- this.getControls().forEach(s => {
374
- s.requestUpdate();
375
- });
376
- super.performUpdate();
377
- }
378
-
379
- _renderControl(key) {
380
- // This is require to clean cache of <gv-schema-form-control>
381
- const control = { ...this.schema.properties[key]
382
- };
383
-
384
- const isRequired = this.schema.required && this.schema.required.includes(key) || this._evaluateCondition(control, 'required');
385
-
386
- const isDisabled = this.schema.disabled && this.schema.disabled.includes(key) || this._evaluateCondition(control, 'disabled');
387
-
388
- const isHidden = this._evaluateCondition(control, 'hidden');
389
-
390
- if (isHidden) {
391
- this._ignoreProperties.push(key);
180
+ _onChange({ detail: { currentTarget, value, control } }) {
181
+ this._setTouch(true);
182
+ if (control.type === 'integer') {
183
+ if (typeof value === 'string' && value.trim().length === 0) {
184
+ value = null;
185
+ }
186
+ else {
187
+ const intValue = Number(value).valueOf();
188
+ if (!isNaN(intValue)) {
189
+ value = intValue;
190
+ }
191
+ else {
192
+ value = null;
193
+ }
194
+ }
195
+ }
196
+ else if (control.type === 'array' && value.length === 0) {
197
+ value = null;
198
+ }
199
+ else if (control.type === 'string' && value.trim().length === 0 && !control.enum) {
200
+ value = null;
201
+ }
202
+ else if (control.type === 'object') {
203
+ if (Object.keys(value).length === 0) {
204
+ value = null;
205
+ }
206
+ }
207
+ if (value == null) {
208
+ del(this._values, currentTarget.id);
209
+ }
210
+ else {
211
+ set(this._values, currentTarget.id, value);
212
+ }
213
+ this._updateDynamicControls();
214
+ this._validatorResults = this.validate();
215
+ this.dirty = true;
216
+ this._updateActions();
217
+ this._dispatchChange();
392
218
  }
393
-
394
- const isReadonly = this.readonly || control.readOnly === true;
395
- const isWriteOnly = control.writeOnly === true;
396
- const value = get(this._values, key);
397
- return html`<gv-schema-form-control .id="${key}" .errors="${this.errors}" .control="${control}" .skeleton="${this.skeleton}" .value="${value}" ?readonly="${isReadonly}" ?writeonly="${isWriteOnly}" ?required="${isRequired}" ?disabled="${isDisabled}" ?hidden="${isHidden}"></gv-schema-form-control>`;
398
- }
399
-
400
- _hasCondition(control) {
401
- if (control['x-schema-form']) {
402
- return this._dynamicAttributes.find(condition => control['x-schema-form'][condition] != null) != null;
219
+ _onControlReady(e) {
220
+ e.stopPropagation();
221
+ e.preventDefault();
222
+ const controlElement = e.detail.control;
223
+ const control = controlElement.control;
224
+ if (control['x-schema-form']) {
225
+ if (control['x-schema-form'].event) {
226
+ const event = control['x-schema-form'].event;
227
+ dispatchCustomEvent(this, event.name, { ...event, ...e.detail });
228
+ }
229
+ else if (this._hasCondition(control)) {
230
+ this._dynamicControls.push(controlElement);
231
+ this._updateDynamicControl(controlElement);
232
+ }
233
+ }
403
234
  }
404
-
405
- return false;
406
- }
407
-
408
- _evaluateCondition(control, conditionKey) {
409
- if (control['x-schema-form'] == null || control['x-schema-form'][conditionKey] == null) {
410
- return false;
235
+ _updateDynamicControls() {
236
+ this._ignoreProperties = [];
237
+ this._dynamicControls.forEach((controlElement) => {
238
+ this._updateDynamicControl(controlElement);
239
+ });
411
240
  }
412
-
413
- const condition = control['x-schema-form'][conditionKey];
414
-
415
- if (typeof condition === 'boolean') {
416
- return condition;
241
+ _updateDynamicControl(controlElement) {
242
+ const control = controlElement.control;
243
+ if (control['x-schema-form']) {
244
+ this._dynamicAttributes.forEach((attribute) => {
245
+ const is = this._evaluateCondition(control, attribute);
246
+ if (is) {
247
+ controlElement.setAttribute(attribute, '');
248
+ if (attribute === 'hidden') {
249
+ this._ignoreProperties.push(controlElement.id);
250
+ }
251
+ }
252
+ else {
253
+ controlElement.removeAttribute(attribute);
254
+ }
255
+ });
256
+ }
257
+ return null;
417
258
  }
418
-
419
- if (!Array.isArray(condition)) {
420
- // condition isn't an array, ignore the condition
421
- console.warn(`'${conditionKey}' attribute of 'x-schema-form' should be an array`);
422
- return false;
259
+ async performUpdate() {
260
+ await Promise.all(this.getControls().map((e) => e.updateComplete));
261
+ this.getControls().forEach((s) => {
262
+ s.requestUpdate();
263
+ });
264
+ super.performUpdate();
423
265
  }
424
-
425
- let result = true;
426
-
427
- for (const operation of condition) {
428
- // operation only have one operator with a single object containing operand values
429
- const operator = Object.keys(operation)[0];
430
-
431
- switch (operator) {
432
- case '$neq':
433
- result = result && this._evaluateNotEqualsCondition(control, operation);
434
- break;
435
-
436
- case '$eq':
437
- result = result && this._evaluateEqualsCondition(control, operation);
438
- break;
439
-
440
- case '$nodef':
441
- result = result && this._evaluateNotDefCondition(control, operation);
442
- break;
443
-
444
- case '$def':
445
- result = result && this._evaluateDefCondition(control, operation);
446
- break;
447
-
448
- default:
449
- console.warn(`Unsupported operator '${operator}' on disable condition`);
450
- result = false;
451
- break;
452
- }
266
+ _renderControl(key) {
267
+ // This is require to clean cache of <gv-schema-form-control>
268
+ const control = { ...this.schema.properties[key] };
269
+ const isRequired = (this.schema.required && this.schema.required.includes(key)) || this._evaluateCondition(control, 'required');
270
+ const isDisabled = (this.schema.disabled && this.schema.disabled.includes(key)) || this._evaluateCondition(control, 'disabled');
271
+ const isHidden = this._evaluateCondition(control, 'hidden');
272
+ if (isHidden) {
273
+ this._ignoreProperties.push(key);
274
+ }
275
+ const isReadonly = this.readonly || control.readOnly === true;
276
+ const isWriteOnly = control.writeOnly === true;
277
+ const value = get(this._values, key);
278
+ return html `<gv-schema-form-control
279
+ .id="${key}"
280
+ .errors="${this.errors}"
281
+ .control="${control}"
282
+ .skeleton="${this.skeleton}"
283
+ .value="${value}"
284
+ ?readonly="${isReadonly}"
285
+ ?writeonly="${isWriteOnly}"
286
+ ?required="${isRequired}"
287
+ ?disabled="${isDisabled}"
288
+ ?hidden="${isHidden}"
289
+ ></gv-schema-form-control>`;
453
290
  }
454
-
455
- return result;
456
- }
457
-
458
- _evaluateNotEqualsCondition(control, condition) {
459
- return !this._evaluateEqualsCondition(control, condition);
460
- }
461
-
462
- _evaluateEqualsCondition(control, condition) {
463
- const operator = Object.keys(condition)[0];
464
- const operands = condition[operator];
465
- const modelAttributes = Object.keys(operands);
466
- return modelAttributes.map(modelAttribute => {
467
- const testValue = operands[modelAttribute];
468
- let value = get(this._values, modelAttribute);
469
-
470
- if (value == null && control.type === 'string') {
471
- value = '';
472
- }
473
-
474
- if (Array.isArray(testValue)) {
475
- return testValue.includes(value);
476
- }
477
-
478
- return value === testValue;
479
- }).reduce((acc, current) => acc || current);
480
- }
481
-
482
- _evaluateNotDefCondition(control, condition) {
483
- const operator = Object.keys(condition)[0];
484
- const modelAttribute = condition[operator];
485
- return get(this._values, modelAttribute) === undefined || get(this._values, modelAttribute) === null;
486
- }
487
-
488
- _evaluateDefCondition(control, condition) {
489
- return !this._evaluateNotDefCondition(control, condition);
490
- }
491
-
492
- _renderPart() {
493
- if (this._confirm) {
494
- return html`<div class="confirm-box"> <div class="error">The configuration is not valid and cannot be saved.</div> <div class="confirm-box_actions"> <gv-button @gv-button:click="${this._onConfirmReset}" outlined icon="general:update" danger>Lose changes</gv-button> <gv-button @gv-button:click="${this._onConfirmEdit}" icon="design:edit">Edit</gv-button> </div> </div>`;
291
+ _hasCondition(control) {
292
+ if (control['x-schema-form']) {
293
+ return this._dynamicAttributes.find((condition) => control['x-schema-form'][condition] != null) != null;
294
+ }
295
+ return false;
495
296
  }
496
-
497
- const keys = this.schema.properties ? Object.keys(this.schema.properties) : [];
498
- this._ignoreProperties = [];
499
-
500
- if (this.groups) {
501
- // Remove undefined group items
502
- const groupsCleaned = this.groups.reduce((prev, group) => {
503
- const itemsExistingInSchemaKeys = keys.filter(key => [...(group.items || [])].includes(key));
504
- prev.push({ ...group,
505
- items: itemsExistingInSchemaKeys || []
297
+ _evaluateCondition(control, conditionKey) {
298
+ if (control['x-schema-form'] == null || control['x-schema-form'][conditionKey] == null) {
299
+ return false;
300
+ }
301
+ const condition = control['x-schema-form'][conditionKey];
302
+ if (typeof condition === 'boolean') {
303
+ return condition;
304
+ }
305
+ if (!Array.isArray(condition)) {
306
+ // condition isn't an array, ignore the condition
307
+ console.warn(`'${conditionKey}' attribute of 'x-schema-form' should be an array`);
308
+ return false;
309
+ }
310
+ let result = true;
311
+ for (const operation of condition) {
312
+ // operation only have one operator with a single object containing operand values
313
+ const operator = Object.keys(operation)[0];
314
+ switch (operator) {
315
+ case '$neq':
316
+ result = result && this._evaluateNotEqualsCondition(control, operation);
317
+ break;
318
+ case '$eq':
319
+ result = result && this._evaluateEqualsCondition(control, operation);
320
+ break;
321
+ case '$nodef':
322
+ result = result && this._evaluateNotDefCondition(control, operation);
323
+ break;
324
+ case '$def':
325
+ result = result && this._evaluateDefCondition(control, operation);
326
+ break;
327
+ default:
328
+ console.warn(`Unsupported operator '${operator}' on disable condition`);
329
+ result = false;
330
+ break;
331
+ }
332
+ }
333
+ return result;
334
+ }
335
+ _evaluateNotEqualsCondition(control, condition) {
336
+ return !this._evaluateEqualsCondition(control, condition);
337
+ }
338
+ _evaluateEqualsCondition(control, condition) {
339
+ const operator = Object.keys(condition)[0];
340
+ const operands = condition[operator];
341
+ const modelAttributes = Object.keys(operands);
342
+ return modelAttributes
343
+ .map((modelAttribute) => {
344
+ const testValue = operands[modelAttribute];
345
+ let value = get(this._values, modelAttribute);
346
+ if (value == null && control.type === 'string') {
347
+ value = '';
348
+ }
349
+ if (Array.isArray(testValue)) {
350
+ return testValue.includes(value);
351
+ }
352
+ return value === testValue;
353
+ })
354
+ .reduce((acc, current) => acc || current);
355
+ }
356
+ _evaluateNotDefCondition(control, condition) {
357
+ const operator = Object.keys(condition)[0];
358
+ const modelAttribute = condition[operator];
359
+ return get(this._values, modelAttribute) === undefined || get(this._values, modelAttribute) === null;
360
+ }
361
+ _evaluateDefCondition(control, condition) {
362
+ return !this._evaluateNotDefCondition(control, condition);
363
+ }
364
+ _renderPart() {
365
+ if (this._confirm) {
366
+ return html `<div class="confirm-box">
367
+ <div class="error">The configuration is not valid and cannot be saved.</div>
368
+ <div class="confirm-box_actions">
369
+ <gv-button @gv-button:click="${this._onConfirmReset}" outlined icon="general:update" danger>Lose changes</gv-button>
370
+ <gv-button @gv-button:click="${this._onConfirmEdit}" icon="design:edit">Edit</gv-button>
371
+ </div>
372
+ </div>`;
373
+ }
374
+ const keys = this.schema.properties ? Object.keys(this.schema.properties) : [];
375
+ this._ignoreProperties = [];
376
+ if (this.groups) {
377
+ // Remove undefined group items
378
+ const groupsCleaned = this.groups.reduce((prev, group) => {
379
+ const itemsExistingInSchemaKeys = keys.filter((key) => [...(group.items || [])].includes(key));
380
+ prev.push({
381
+ ...group,
382
+ items: itemsExistingInSchemaKeys || [],
383
+ });
384
+ return prev;
385
+ }, []);
386
+ // Add non grouped items inside default group
387
+ const defaultGroup = groupsCleaned.find((g) => g.default) || { default: true, items: [] };
388
+ const zipGroupedItems = groupsCleaned.reduce((prev, group) => [...prev, ...group.items], []);
389
+ defaultGroup.items = keys.filter((key) => !zipGroupedItems.includes(key));
390
+ return repeat(groupsCleaned, (group) => html `${group.name
391
+ ? html `<h2 class="group-title">${group.name}</h2>
392
+ ${repeat(group.items, (key) => this._renderControl(key))}`
393
+ : repeat(group.items, (key) => this._renderControl(key))} `);
394
+ }
395
+ return html `${repeat([1], () => repeat(keys, (key) => key, (key) => this._renderControl(key)))}`;
396
+ }
397
+ getControls() {
398
+ return Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control'));
399
+ }
400
+ getControl(id) {
401
+ return this.shadowRoot.querySelector(`[id="${id}"]`);
402
+ }
403
+ _getErrors() {
404
+ return (this._validatorResults.errors || []).filter((error) => {
405
+ let id = `${error.property.replace('instance.', '')}`;
406
+ if (!Array.isArray(error.argument)) {
407
+ id = `${id}.${error.argument}`;
408
+ }
409
+ const errorKey = `x-schema-form.errors.${id}.${error.name}`;
410
+ const errorMessage = get(this.schema, errorKey);
411
+ if (errorMessage) {
412
+ error.message = errorMessage;
413
+ }
414
+ return !this._ignoreProperties.includes(id);
506
415
  });
507
- return prev;
508
- }, []); // Add non grouped items inside default group
509
-
510
- const defaultGroup = groupsCleaned.find(g => g.default) || {
511
- default: true,
512
- items: []
513
- };
514
- const zipGroupedItems = groupsCleaned.reduce((prev, group) => [...prev, ...group.items], []);
515
- defaultGroup.items = keys.filter(key => !zipGroupedItems.includes(key));
516
- return repeat(groupsCleaned, group => html`${group.name ? html`<h2 class="group-title">${group.name}</h2> ${repeat(group.items, key => this._renderControl(key))}` : repeat(group.items, key => this._renderControl(key))} `);
517
416
  }
417
+ validate() {
418
+ if (this.schema) {
419
+ // Additional properties should not block the validation of the form
420
+ this._validatorResults = this._validator.validate(this._values, { ...this.schema, additionalProperties: {} });
421
+ this.errors = this._getErrors();
422
+ }
423
+ return this._validatorResults;
424
+ }
425
+ isValid() {
426
+ if (this._validatorResults.valid) {
427
+ return true;
428
+ }
429
+ return this._getErrors() === 0;
430
+ }
431
+ isTouch() {
432
+ return this._touch || (this.dirty && this.validateOnRender);
433
+ }
434
+ canSubmit() {
435
+ return this.isTouch() && this.isValid();
436
+ }
437
+ _updateActions() {
438
+ const submitBtn = this._getSubmitBtn();
439
+ if (submitBtn != null) {
440
+ if (this.canSubmit()) {
441
+ this._getSubmitBtn().removeAttribute('disabled');
442
+ }
443
+ else {
444
+ this._getSubmitBtn().setAttribute('disabled', true);
445
+ }
446
+ }
447
+ const resetBtn = this._getResetBtn();
448
+ if (resetBtn != null) {
449
+ if (this.dirty) {
450
+ resetBtn.removeAttribute('disabled');
451
+ }
452
+ else {
453
+ resetBtn.setAttribute('disabled', true);
454
+ }
455
+ }
456
+ }
457
+ _updateChildren(withValidation) {
458
+ if (withValidation) {
459
+ this._validatorResults = {};
460
+ this.errors = null;
461
+ this.requestValidation();
462
+ }
463
+ else {
464
+ this._updateActionsTimeout = setTimeout(() => this._updateActions(), 0);
465
+ }
466
+ }
467
+ async updated(changedProperties) {
468
+ clearTimeout(this._updateActionsTimeout);
469
+ if (changedProperties.has('_values')) {
470
+ this.getControls().forEach((control) => {
471
+ control.value = get(this._values, control.id);
472
+ });
473
+ }
474
+ this._updateChildren(this.validateOnRender && (changedProperties.has('_values') || changedProperties.has('schema')));
475
+ }
476
+ async getUpdateComplete() {
477
+ const result = await super.getUpdateComplete();
478
+ await Promise.all(this.getControls().map((e) => e.updateComplete));
479
+ return result;
480
+ }
481
+ render() {
482
+ return html `<form class="${classMap({ scrollable: this.scrollable })}">
483
+ <div class="${classMap({ container: true, confirm: this._confirm })}">
484
+ ${this.hasHeader === true
485
+ ? html `
486
+ <div class="header">
487
+ <div class="${classMap({ title: true, center: this.hasHeader && !this.hasFooter })}">
488
+ <slot name="title"></slot>
489
+ </div>
490
+ <div class="left">
491
+ <slot name="header-left"></slot>
492
+ </div>
493
+ ${this.readonly === true || this.hasFooter === true
494
+ ? ''
495
+ : html `<div class="right">
496
+ <gv-button
497
+ id="reset"
498
+ outlined
499
+ small
500
+ @gv-button:click="${this._onReset}"
501
+ icon="general:update"
502
+ title="Reset"
503
+ ></gv-button>
504
+ <gv-button
505
+ id="submit"
506
+ small
507
+ @gv-button:click="${this._onSubmit}"
508
+ icon="code:check"
509
+ .title="${this.submitLabel}"
510
+ ></gv-button>
511
+ </div> `}
512
+ </div>
513
+ `
514
+ : ''}
515
+ <div class="content">${this.schema != null ? this._renderPart() : html ``}</div>
516
+ ${this.hasFooter === true && this.readonly !== true
517
+ ? html `
518
+ <div class="footer">
519
+ <div class="left"></div>
520
+ <div class="right">
521
+ <gv-button id="reset" outlined @gv-button:click="${this._onReset}" icon="general:update" title="Reset">Reset</gv-button>
522
+ <gv-button id="submit" @gv-button:click="${this._onSubmit}" icon="code:check" .title="${this.submitLabel}"
523
+ >${this.submitLabel}</gv-button
524
+ >
525
+ </div>
526
+ </div>
527
+ `
528
+ : ''}
529
+ </div>
530
+ </form>`;
531
+ }
532
+ static get styles() {
533
+ return [
534
+ empty,
535
+ // language=CSS
536
+ css `
537
+ :host {
538
+ box-sizing: border-box;
539
+ margin: 0.2rem;
540
+ --bgc: var(--gv-schema-form--bgc, #ffffff);
541
+ }
518
542
 
519
- return html`${repeat([1], () => repeat(keys, key => key, key => this._renderControl(key)))}`;
520
- }
521
-
522
- getControls() {
523
- return Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control'));
524
- }
543
+ form {
544
+ display: flex;
545
+ flex-direction: column;
546
+ }
525
547
 
526
- getControl(id) {
527
- return this.shadowRoot.querySelector(`[id="${id}"]`);
528
- }
548
+ form.scrollable {
549
+ position: absolute;
550
+ width: 100%;
551
+ top: 0;
552
+ bottom: 0;
553
+ left: 0;
554
+ }
529
555
 
530
- _getErrors() {
531
- return (this._validatorResults.errors || []).filter(error => {
532
- let id = `${error.property.replace('instance.', '')}`;
556
+ .container {
557
+ flex-grow: 1;
533
558
 
534
- if (!Array.isArray(error.argument)) {
535
- id = `${id}.${error.argument}`;
536
- }
559
+ background-color: var(--bgc);
560
+ display: flex;
561
+ flex-direction: column;
537
562
 
538
- const errorKey = `x-schema-form.errors.${id}.${error.name}`;
539
- const errorMessage = get(this.schema, errorKey);
563
+ /* for Firefox */
564
+ min-height: 0;
565
+ }
540
566
 
541
- if (errorMessage) {
542
- error.message = errorMessage;
543
- }
567
+ .header,
568
+ .footer,
569
+ .content {
570
+ background-color: var(--bgc);
571
+ }
544
572
 
545
- return !this._ignoreProperties.includes(id);
546
- });
547
- }
573
+ .content {
574
+ flex-grow: 1;
575
+ display: flex;
576
+ flex-direction: column;
577
+ align-self: center;
578
+ width: 100%;
548
579
 
549
- validate() {
550
- if (this.schema) {
551
- // Additional properties should not block the validation of the form
552
- this._validatorResults = this._validator.validate(this._values, { ...this.schema,
553
- additionalProperties: {}
554
- });
555
- this.errors = this._getErrors();
556
- }
580
+ /* for Firefox */
581
+ min-height: 0;
582
+ }
557
583
 
558
- return this._validatorResults;
559
- }
584
+ .content > gv-schema-form-control {
585
+ align-self: center;
586
+ width: 100%;
587
+ }
560
588
 
561
- isValid() {
562
- if (this._validatorResults.valid) {
563
- return true;
564
- }
589
+ form.scrollable .content {
590
+ overflow: auto;
591
+ }
565
592
 
566
- return this._getErrors() === 0;
567
- }
593
+ form.scrollable .content > gv-schema-form-control,
594
+ form.scrollable .content > .group-title {
595
+ max-width: 775px;
596
+ width: 95%;
597
+ }
568
598
 
569
- isTouch() {
570
- return this._touch || this.dirty && this.validateOnRender;
571
- }
599
+ .header,
600
+ .footer {
601
+ display: flex;
602
+ box-sizing: border-box;
603
+ min-height: 45px;
604
+ --gv-icon--s: 26px;
605
+ --gv-icon--c: #bfbfbf;
606
+ align-items: center;
607
+ padding: 0 0.5rem;
608
+ position: relative;
609
+ }
572
610
 
573
- canSubmit() {
574
- return this.isTouch() && this.isValid();
575
- }
611
+ .header {
612
+ border-bottom: 1px solid #d9d9d9;
613
+ }
576
614
 
577
- _updateActions() {
578
- const submitBtn = this._getSubmitBtn();
615
+ .footer {
616
+ display: flex;
617
+ justify-content: space-between;
618
+ padding: 1rem;
619
+ border-top: 1px solid #d9d9d9;
620
+ }
579
621
 
580
- if (submitBtn != null) {
581
- if (this.canSubmit()) {
582
- this._getSubmitBtn().removeAttribute('disabled');
583
- } else {
584
- this._getSubmitBtn().setAttribute('disabled', true);
585
- }
586
- }
622
+ form.scrollable .footer {
623
+ justify-content: center;
624
+ }
587
625
 
588
- const resetBtn = this._getResetBtn();
626
+ .footer .left,
627
+ .footer .right {
628
+ max-width: 400px;
629
+ }
589
630
 
590
- if (resetBtn != null) {
591
- if (this.dirty) {
592
- resetBtn.removeAttribute('disabled');
593
- } else {
594
- resetBtn.setAttribute('disabled', true);
595
- }
596
- }
597
- }
631
+ .header .left,
632
+ .footer .left,
633
+ .header .right,
634
+ .footer .right {
635
+ display: flex;
636
+ flex: 1;
637
+ z-index: 10;
638
+ align-items: center;
639
+ }
598
640
 
599
- _updateChildren(withValidation) {
600
- if (withValidation) {
601
- this._validatorResults = {};
602
- this.errors = null;
603
- this.requestValidation();
604
- } else {
605
- this._updateActionsTimeout = setTimeout(() => this._updateActions(), 0);
606
- }
607
- }
641
+ .header .right,
642
+ .footer .right {
643
+ justify-content: flex-end;
644
+ }
608
645
 
609
- async updated(changedProperties) {
610
- clearTimeout(this._updateActionsTimeout);
646
+ .header .title {
647
+ color: #28444f;
648
+ font-size: 18px;
649
+ display: flex;
650
+ width: 100%;
651
+ align-items: center;
652
+ }
611
653
 
612
- if (changedProperties.has('_values')) {
613
- this.getControls().forEach(control => {
614
- control.value = get(this._values, control.id);
615
- });
616
- }
654
+ .header .title.center {
655
+ position: absolute;
656
+ top: 0;
657
+ left: 0;
658
+ bottom: 0;
659
+ justify-content: center;
660
+ }
617
661
 
618
- this._updateChildren(this.validateOnRender && (changedProperties.has('_values') || changedProperties.has('schema')));
619
- }
662
+ .confirm-box {
663
+ height: 100%;
664
+ padding: 1rem;
665
+ font-style: italic;
666
+ display: flex;
667
+ flex-direction: column;
620
668
 
621
- async getUpdateComplete() {
622
- const result = await super.getUpdateComplete();
623
- await Promise.all(this.getControls().map(e => e.updateComplete));
624
- return result;
625
- }
669
+ justify-content: center;
670
+ align-items: center;
671
+ text-align: center;
672
+ }
626
673
 
627
- render() {
628
- return html`<form class="${classMap({
629
- scrollable: this.scrollable
630
- })}"> <div class="${classMap({
631
- container: true,
632
- confirm: this._confirm
633
- })}"> ${this.hasHeader === true ? html` <div class="header"> <div class="${classMap({
634
- title: true,
635
- center: this.hasHeader && !this.hasFooter
636
- })}"> <slot name="title"></slot> </div> <div class="left"> <slot name="header-left"></slot> </div> ${this.readonly === true || this.hasFooter === true ? '' : html`<div class="right"> <gv-button id="reset" outlined small @gv-button:click="${this._onReset}" icon="general:update" title="Reset"></gv-button> <gv-button id="submit" small @gv-button:click="${this._onSubmit}" icon="code:check" .title="${this.submitLabel}"></gv-button> </div> `} </div> ` : ''} <div class="content">${this.schema != null ? this._renderPart() : html``}</div> ${this.hasFooter === true && this.readonly !== true ? html` <div class="footer"> <div class="left"></div> <div class="right"> <gv-button id="reset" outlined @gv-button:click="${this._onReset}" icon="general:update" title="Reset">Reset</gv-button> <gv-button id="submit" @gv-button:click="${this._onSubmit}" icon="code:check" .title="${this.submitLabel}">${this.submitLabel}</gv-button> </div> </div> ` : ''} </div> </form>`;
637
- }
674
+ .confirm-box_actions {
675
+ padding: 1rem 0;
676
+ }
638
677
 
639
- static get styles() {
640
- return [empty, // language=CSS
641
- css`:host{box-sizing:border-box;margin:.2rem;--bgc:var(--gv-schema-form--bgc, #ffffff)}form{display:flex;flex-direction:column}form.scrollable{position:absolute;width:100%;top:0;bottom:0;left:0}.container{flex-grow:1;background-color:var(--bgc);display:flex;flex-direction:column;min-height:0}.content,.footer,.header{background-color:var(--bgc)}.content{flex-grow:1;display:flex;flex-direction:column;align-self:center;width:100%;min-height:0}.content>gv-schema-form-control{align-self:center;width:100%}form.scrollable .content{overflow:auto}form.scrollable .content>.group-title,form.scrollable .content>gv-schema-form-control{max-width:775px;width:95%}.footer,.header{display:flex;box-sizing:border-box;min-height:45px;--gv-icon--s:26px;--gv-icon--c:#bfbfbf;align-items:center;padding:0 .5rem;position:relative}.header{border-bottom:1px solid #d9d9d9}.footer{display:flex;justify-content:space-between;padding:1rem;border-top:1px solid #d9d9d9}form.scrollable .footer{justify-content:center}.footer .left,.footer .right{max-width:400px}.footer .left,.footer .right,.header .left,.header .right{display:flex;flex:1;z-index:10;align-items:center}.footer .right,.header .right{justify-content:flex-end}.header .title{color:#28444f;font-size:18px;display:flex;width:100%;align-items:center}.header .title.center{position:absolute;top:0;left:0;bottom:0;justify-content:center}.confirm-box{height:100%;padding:1rem;font-style:italic;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center}.confirm-box_actions{padding:1rem 0}.confirm .footer .left,.confirm .footer .right,.confirm .header .left,.confirm .header .right{display:none}.group-title{align-self:center;width:100%;color:var(--gv-theme-font-color-dark);font-size:21px;font-weight:600;padding-bottom:.3em;border-bottom:1px solid var(--gv-theme-font-color-dark);margin-top:24px;margin-bottom:16px}`];
642
- }
678
+ .confirm .header .left,
679
+ .confirm .header .right,
680
+ .confirm .footer .left,
681
+ .confirm .footer .right {
682
+ display: none;
683
+ }
643
684
 
685
+ .group-title {
686
+ align-self: center;
687
+ width: 100%;
688
+ color: var(--gv-theme-font-color-dark);
689
+ font-size: 21px;
690
+ font-weight: 600;
691
+ padding-bottom: 0.3em;
692
+ border-bottom: 1px solid var(--gv-theme-font-color-dark);
693
+ margin-top: 24px;
694
+ margin-bottom: 16px;
695
+ }
696
+ `,
697
+ ];
698
+ }
644
699
  }
645
700
  window.customElements.define('gv-schema-form', GvSchemaForm);
646
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL29yZ2FuaXNtcy9ndi1zY2hlbWEtZm9ybS5qcyJdLCJuYW1lcyI6WyJMaXRFbGVtZW50IiwiaHRtbCIsImNzcyIsImdldCIsInNldCIsImRlbCIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJkZWVwQ2xvbmUiLCJkZWVwRXF1YWwiLCJjbGFzc01hcCIsInJlcGVhdCIsIlZhbGlkYXRvciIsImVtcHR5IiwiR3ZTY2hlbWFGb3JtIiwicHJvcGVydGllcyIsInNjaGVtYSIsInR5cGUiLCJPYmplY3QiLCJlcnJvcnMiLCJ2YWx1ZXMiLCJzdWJtaXRMYWJlbCIsIlN0cmluZyIsImhhc0Zvb3RlciIsIkJvb2xlYW4iLCJhdHRyaWJ1dGUiLCJoYXNIZWFkZXIiLCJfY29uZmlybSIsIl92YWx1ZXMiLCJkaXJ0eSIsInJlZmxlY3QiLCJoaWRlRGVwcmVjYXRlZCIsInZhbGlkYXRlT25SZW5kZXIiLCJfdmFsaWRhdG9yUmVzdWx0cyIsInNrZWxldG9uIiwiX3RvdWNoIiwicmVhZG9ubHkiLCJzY3JvbGxhYmxlIiwiZ3JvdXBzIiwiQXJyYXkiLCJjb25zdHJ1Y3RvciIsIl92YWxpZGF0b3IiLCJfaWdub3JlUHJvcGVydGllcyIsIl9keW5hbWljQ29udHJvbHMiLCJfZHluYW1pY0F0dHJpYnV0ZXMiLCJhZGRFdmVudExpc3RlbmVyIiwiX29uRGVmYXVsdFZhbHVlIiwiYmluZCIsIl9vbkNoYW5nZSIsIl9vbkNvbnRyb2xSZWFkeSIsIl9pbml0aWFsVmFsdWVzIiwicmVzZXQiLCJfc2V0RGlydHkiLCJnZXRDb250cm9scyIsImZvckVhY2giLCJzIiwicmVxdWVzdFVwZGF0ZSIsIl9vblJlc2V0IiwicmVxdWVzdFZhbGlkYXRpb24iLCJjbGVhclRpbWVvdXQiLCJfdmFsaWRhdGVUaW1lb3V0Iiwic2V0VGltZW91dCIsInZhbGlkYXRlIiwiX3VwZGF0ZUFjdGlvbnMiLCJzdWJtaXQiLCJfb25TdWJtaXQiLCJ2YWxpZGF0b3JSZXN1bHRzIiwiaXNWYWxpZCIsIl9zZXRUb3VjaCIsInRvdWNoIiwiY29uZmlybSIsImlzVG91Y2giLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJfb25Db25maXJtUmVzZXQiLCJ1cGRhdGVDb21wbGV0ZSIsInRoZW4iLCJfb25Db25maXJtRWRpdCIsIl91cGRhdGVDaGlsZHJlbiIsIl9nZXRTdWJtaXRCdG4iLCJzaGFkb3dSb290IiwicXVlcnlTZWxlY3RvciIsIl9nZXRSZXNldEJ0biIsIl9kaXNwYXRjaENoYW5nZSIsIl9jaGFuZ2VUaW1lb3V0IiwidGFyZ2V0IiwidmFsaWRhdGlvbiIsImRldGFpbCIsImN1cnJlbnRUYXJnZXQiLCJ2YWx1ZSIsImNvbnRyb2wiLCJ0cmltIiwibGVuZ3RoIiwicGFyc2VJbnQiLCJpZCIsImludFZhbHVlIiwiTnVtYmVyIiwidmFsdWVPZiIsImlzTmFOIiwiZW51bSIsImtleXMiLCJfdXBkYXRlRHluYW1pY0NvbnRyb2xzIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiY29udHJvbEVsZW1lbnQiLCJldmVudCIsIm5hbWUiLCJfaGFzQ29uZGl0aW9uIiwicHVzaCIsIl91cGRhdGVEeW5hbWljQ29udHJvbCIsImlzIiwiX2V2YWx1YXRlQ29uZGl0aW9uIiwic2V0QXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwicGVyZm9ybVVwZGF0ZSIsImFsbCIsIm1hcCIsIl9yZW5kZXJDb250cm9sIiwia2V5IiwiaXNSZXF1aXJlZCIsInJlcXVpcmVkIiwiaW5jbHVkZXMiLCJpc0Rpc2FibGVkIiwiZGlzYWJsZWQiLCJpc0hpZGRlbiIsImlzUmVhZG9ubHkiLCJyZWFkT25seSIsImlzV3JpdGVPbmx5Iiwid3JpdGVPbmx5IiwiZmluZCIsImNvbmRpdGlvbiIsImNvbmRpdGlvbktleSIsImlzQXJyYXkiLCJjb25zb2xlIiwid2FybiIsInJlc3VsdCIsIm9wZXJhdGlvbiIsIm9wZXJhdG9yIiwiX2V2YWx1YXRlTm90RXF1YWxzQ29uZGl0aW9uIiwiX2V2YWx1YXRlRXF1YWxzQ29uZGl0aW9uIiwiX2V2YWx1YXRlTm90RGVmQ29uZGl0aW9uIiwiX2V2YWx1YXRlRGVmQ29uZGl0aW9uIiwib3BlcmFuZHMiLCJtb2RlbEF0dHJpYnV0ZXMiLCJtb2RlbEF0dHJpYnV0ZSIsInRlc3RWYWx1ZSIsInJlZHVjZSIsImFjYyIsImN1cnJlbnQiLCJ1bmRlZmluZWQiLCJfcmVuZGVyUGFydCIsImdyb3Vwc0NsZWFuZWQiLCJwcmV2IiwiZ3JvdXAiLCJpdGVtc0V4aXN0aW5nSW5TY2hlbWFLZXlzIiwiZmlsdGVyIiwiaXRlbXMiLCJkZWZhdWx0R3JvdXAiLCJnIiwiZGVmYXVsdCIsInppcEdyb3VwZWRJdGVtcyIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwiZ2V0Q29udHJvbCIsIl9nZXRFcnJvcnMiLCJlcnJvciIsInByb3BlcnR5IiwicmVwbGFjZSIsImFyZ3VtZW50IiwiZXJyb3JLZXkiLCJlcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJ2YWxpZCIsImNhblN1Ym1pdCIsInN1Ym1pdEJ0biIsInJlc2V0QnRuIiwid2l0aFZhbGlkYXRpb24iLCJfdXBkYXRlQWN0aW9uc1RpbWVvdXQiLCJ1cGRhdGVkIiwiY2hhbmdlZFByb3BlcnRpZXMiLCJoYXMiLCJnZXRVcGRhdGVDb21wbGV0ZSIsInJlbmRlciIsImNvbnRhaW5lciIsInRpdGxlIiwiY2VudGVyIiwic3R5bGVzIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFVBQVQsRUFBcUJDLElBQXJCLEVBQTJCQyxHQUEzQixRQUFzQyxLQUF0QztBQUNBLFNBQVNDLEdBQVQsRUFBY0MsR0FBZCxFQUFtQkMsR0FBbkIsUUFBOEIsYUFBOUI7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TUFBQUEsTUFBTSxFQUFFLEtBQUtuSyxTQUFMLElBQWtCLENBQUMsS0FBS0g7QUFBL0MsS0FBRCxDQUZ0QixtR0FRRSxLQUFLYSxRQUFMLEtBQWtCLElBQWxCLElBQTBCLEtBQUtiLFNBQUwsS0FBbUIsSUFBN0MsR0FDRSxFQURGLEdBRUVyQixJQUFJLDhFQUtvQixLQUFLdUQsUUFMekIscUdBWW9CLEtBQUtRLFNBWnpCLCtCQWNVLEtBQUs1QyxXQWRmLHdCQVZSLFVBRE4sR0E4QkUsRUFoQ0cseUJBaUNnQixLQUFLTCxNQUFMLElBQWUsSUFBZixHQUFzQixLQUFLeUksV0FBTCxFQUF0QixHQUEyQ3ZKLElBQUksRUFqQy9ELFVBa0NMLEtBQUtxQixTQUFMLEtBQW1CLElBQW5CLElBQTJCLEtBQUthLFFBQUwsS0FBa0IsSUFBN0MsR0FDRWxDLElBQUksdUhBSXFELEtBQUt1RCxRQUoxRCxvR0FLNkMsS0FBS1EsU0FMbEQsK0JBSzBGLEtBQUs1QyxXQUwvRixLQU1PLEtBQUtBLFdBTlosNkJBRE4sR0FZRSxFQTlDRyxpQkFBWDtBQWlERDs7QUFFZ0IsYUFBTnlLLE1BQU0sR0FBRztBQUNsQixXQUFPLENBQ0xqTCxLQURLLEVBRUw7QUFDQVYsSUFBQUEsR0FBRyxpMkRBSEUsQ0FBUDtBQXFLRDs7QUFoc0IwQztBQW1zQjdDNEwsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixDQUE2QixnQkFBN0IsRUFBK0NuTCxZQUEvQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sLCBjc3MgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgZ2V0LCBzZXQsIGRlbCB9IGZyb20gJ29iamVjdC1wYXRoJztcbmltcG9ydCB7IGRpc3BhdGNoQ3VzdG9tRXZlbnQgfSBmcm9tICcuLi9saWIvZXZlbnRzJztcbmltcG9ydCB7IGRlZXBDbG9uZSwgZGVlcEVxdWFsIH0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdCc7XG5pbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tICdqc29uc2NoZW1hJztcbmltcG9ydCB7IGVtcHR5IH0gZnJvbSAnLi4vc3R5bGVzL2VtcHR5JztcbmltcG9ydCAnLi9ndi1zY2hlbWEtZm9ybS1jb250cm9sJztcblxuLyoqXG4gKiBTY2hlbWEgZm9ybSBjb21wb25lbnRcbiAqXG4gKiBAZmlyZXMgZ3Ytc2NoZW1hLWZvcm06c3VibWl0IC0gZXZlbnQgd2hlbiB1c2VyIHN1Ym1pdCB2YWxpZCBmb3JtXG4gKiBAZmlyZXMgZ3Ytc2NoZW1hLWZvcm06ZXJyb3IgLSBldmVudCB3aGVuIHVzZXIgc3VibWl0IGludmFsaWQgZm9ybVxuICogQGZpcmVzIGd2LXNjaGVtYS1mb3JtOmNoYW5nZSAtIGV2ZW50IHdoZW4gd2hlbiBmb3JtIGNoYW5nZVxuICogQGZpcmVzIGd2LXNjaGVtYS1mb3JtOmNhbmNlbCAtIGV2ZW50IHdoZW4gdXNlciBjYW5jZWwgZm9ybVxuICpcbiAqIEBhdHRyIHtPYmplY3R9IHNjaGVtYSAtIHRoZSBzY2hlbWEgZm9ybSBjb25maWd1cmF0aW9uXG4gKiBAYXR0ciB7T2JqZWN0fSB2YWx1ZXMgLSB0aGUgdmFsdWVzIG9mIGZpZWxkc1xuICogQGF0dHIge09iamVjdH0gZXJyb3JzIC0gdGhlIG1hcCBvZiBlcnJvcnMgYnkgaW5wdXQga2V5XG4gKiBAYXR0ciB7Qm9vbGVhbn0gdmFsaWRhdGUgLSB0byBmb3JjZSB2YWxpZGF0aW9uIG9uIGZpcnN0IHJlbmRlclxuICogQGF0dHIge0Jvb2xlYW59IHJlYWRvbmx5IC0gdHJ1ZSBpZiByZWFkb25seVxuICogQGF0dHIge0Jvb2xlYW59IHNjcm9sbGFibGUgLSB1c2VmdWwgZm9yIG1ha2luZyBjb250ZW50IHNjcm9sbGFibGUgd2l0aCBmaXhlZCBoZWFkZXJzIC8gZm9vdGVyc1xuICpcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3Ytc2NoZW1hLWZvcm0tLWJnYz0jZmZmZmZmXSAtIEJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LXNjaGVtYS1mb3JtLWNvbnRyb2wtLW09MC40cmVtXSAtIENvbnRyb2wgbWFyZ2luXG4gKi9cbmV4cG9ydCBjbGFzcyBHdlNjaGVtYUZvcm0gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBlcnJvcnM6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICB2YWx1ZXM6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBzdWJtaXRMYWJlbDogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIGhhc0Zvb3RlcjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtZm9vdGVyJyB9LFxuICAgICAgaGFzSGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2hhcy1oZWFkZXInIH0sXG4gICAgICBfY29uZmlybTogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIF92YWx1ZXM6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkaXJ0eTogeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBoaWRlRGVwcmVjYXRlZDogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoaWRlLWRlcHJlY2F0ZWQnIH0sXG4gICAgICB2YWxpZGF0ZU9uUmVuZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ3ZhbGlkYXRlLW9uLXJlbmRlcicgfSxcbiAgICAgIF92YWxpZGF0b3JSZXN1bHRzOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgc2tlbGV0b246IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgX3RvdWNoOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIHNjcm9sbGFibGU6IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgZ3JvdXBzOiB7IHR5cGU6IEFycmF5IH0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5oaWRlRGVwcmVjYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgIHRoaXMuc3VibWl0TGFiZWwgPSAnT2snO1xuICAgIHRoaXMuaGFzSGVhZGVyID0gZmFsc2U7XG4gICAgdGhpcy5oYXNGb290ZXIgPSBmYWxzZTtcbiAgICB0aGlzLl90b3VjaCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3IoKTtcbiAgICB0aGlzLl92YWxpZGF0b3JSZXN1bHRzID0ge307XG4gICAgdGhpcy5faWdub3JlUHJvcGVydGllcyA9IFtdO1xuICAgIHRoaXMuX2R5bmFtaWNDb250cm9scyA9IFtdO1xuICAgIHRoaXMuX2R5bmFtaWNBdHRyaWJ1dGVzID0gWydkaXNhYmxlZCcsICdyZXF1aXJlZCcsICdoaWRkZW4nXTtcbiAgICB0aGlzLmdyb3VwcyA9IG51bGw7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdndi1zY2hlbWEtZm9ybS1jb250cm9sOmRlZmF1bHQtdmFsdWUnLCB0aGlzLl9vbkRlZmF1bHRWYWx1ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2d2LXNjaGVtYS1mb3JtLWNvbnRyb2w6Y2hhbmdlJywgdGhpcy5fb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdndi1zY2hlbWEtZm9ybS1jb250cm9sOmNvbnRyb2wtcmVhZHknLCB0aGlzLl9vbkNvbnRyb2xSZWFkeS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHNldCB2YWx1ZXModmFsdWVzKSB7XG4gICAgaWYgKCFkZWVwRXF1YWwodGhpcy5fdmFsdWVzLCB2YWx1ZXMpKSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxWYWx1ZXMgPSB7IC4uLnZhbHVlcyB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbFZhbHVlcyA9IHt9O1xuICAgICAgfVxuICAgICAgdGhpcy5fdmFsdWVzID0gZGVlcENsb25lKHRoaXMuX2luaXRpYWxWYWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlcztcbiAgfVxuXG4gIHJlc2V0KHZhbHVlcyA9IG51bGwpIHtcbiAgICB0aGlzLl92YWx1ZXMgPSBkZWVwQ2xvbmUodmFsdWVzIHx8IHRoaXMuX2luaXRpYWxWYWx1ZXMpO1xuICAgIHRoaXMuX3RvdWNoID0gZmFsc2U7XG4gICAgdGhpcy5fc2V0RGlydHkoZmFsc2UpO1xuICAgIHRoaXMuZ2V0Q29udHJvbHMoKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICBzLnJlcXVlc3RVcGRhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9vblJlc2V0KCkge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdyZXNldCcpO1xuICB9XG5cbiAgcmVxdWVzdFZhbGlkYXRpb24oKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3ZhbGlkYXRlVGltZW91dCk7XG4gICAgdGhpcy5fdmFsaWRhdGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgICB0aGlzLl91cGRhdGVBY3Rpb25zKCk7XG4gICAgfSwgMzUwKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLl9vblN1Ym1pdCgpO1xuICB9XG5cbiAgX29uU3VibWl0KCkge1xuICAgIGNvbnN0IHZhbGlkYXRvclJlc3VsdHMgPSB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLl9pbml0aWFsVmFsdWVzID0gZGVlcENsb25lKHRoaXMuX3ZhbHVlcyk7XG4gICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICB0aGlzLl90b3VjaCA9IGZhbHNlO1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnc3VibWl0JywgeyB2YWx1ZXM6IHRoaXMuX3ZhbHVlcywgdmFsaWRhdG9yUmVzdWx0cyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZXJyb3InLCB7IHZhbHVlczogdGhpcy5fdmFsdWVzLCB2YWxpZGF0b3JSZXN1bHRzIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9zZXREaXJ0eShkaXJ0eSA9IHRydWUpIHtcbiAgICB0aGlzLmRpcnR5ID0gISFkaXJ0eTtcbiAgfVxuXG4gIF9zZXRUb3VjaCh0b3VjaCA9IHRydWUpIHtcbiAgICB0aGlzLl90b3VjaCA9ICEhdG91Y2g7XG4gIH1cblxuICBjb25maXJtKCkge1xuICAgIGlmICh0aGlzLmlzVG91Y2goKSkge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpcm0gJiYgdGhpcy5fY29uZmlybS5wcm9taXNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maXJtLnByb21pc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gKHRoaXMuX2NvbmZpcm0gPSB7IHJlc29sdmUsIHJlamVjdCB9KSk7XG4gICAgICB0aGlzLl9jb25maXJtLnByb21pc2UgPSBwcm9taXNlO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIF9vbkNvbmZpcm1SZXNldCgpIHtcbiAgICBjb25zdCB7IHJlc29sdmUgfSA9IHRoaXMuX2NvbmZpcm07XG4gICAgdGhpcy5fY29uZmlybSA9IG51bGw7XG4gICAgdGhpcy5fb25SZXNldCgpO1xuICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMpO1xuICAgIH0pO1xuICB9XG5cbiAgX29uQ29uZmlybUVkaXQoKSB7XG4gICAgdGhpcy5fY29uZmlybS5yZWplY3QodGhpcyk7XG4gICAgdGhpcy5fY29uZmlybSA9IG51bGw7XG4gICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4odGhpcy52YWxpZGF0ZU9uUmVuZGVyKTtcbiAgfVxuXG4gIF9nZXRTdWJtaXRCdG4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcjc3VibWl0Jyk7XG4gIH1cblxuICBfZ2V0UmVzZXRCdG4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcjcmVzZXQnKTtcbiAgfVxuXG4gIF9kaXNwYXRjaENoYW5nZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fY2hhbmdlVGltZW91dCk7XG4gICAgdGhpcy5fY2hhbmdlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnY2hhbmdlJywgeyB0YXJnZXQ6IHRoaXMsIHZhbHVlczogdGhpcy5fdmFsdWVzLCB2YWxpZGF0aW9uOiB0aGlzLl92YWxpZGF0b3JSZXN1bHRzIH0pO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIF9vbkRlZmF1bHRWYWx1ZSh7IGRldGFpbDogeyBjdXJyZW50VGFyZ2V0LCB2YWx1ZSwgY29udHJvbCB9IH0pIHtcbiAgICBpZiAoY29udHJvbC50eXBlID09PSAnaW50ZWdlcicgJiYgdmFsdWUgIT0gbnVsbCAmJiAoKHZhbHVlLnRyaW0gJiYgdmFsdWUubGVuZ3RoID4gMCkgfHwgdmFsdWUubGVuZ3RoID4gMCkpIHtcbiAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gICAgc2V0KHRoaXMuX3ZhbHVlcywgY3VycmVudFRhcmdldC5pZCwgdmFsdWUpO1xuICB9XG5cbiAgX29uQ2hhbmdlKHsgZGV0YWlsOiB7IGN1cnJlbnRUYXJnZXQsIHZhbHVlLCBjb250cm9sIH0gfSkge1xuICAgIHRoaXMuX3NldFRvdWNoKHRydWUpO1xuICAgIGlmIChjb250cm9sLnR5cGUgPT09ICdpbnRlZ2VyJykge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbnRWYWx1ZSA9IE51bWJlcih2YWx1ZSkudmFsdWVPZigpO1xuICAgICAgICBpZiAoIWlzTmFOKGludFZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gaW50VmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb250cm9sLnR5cGUgPT09ICdhcnJheScgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChjb250cm9sLnR5cGUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDAgJiYgIWNvbnRyb2wuZW51bSkge1xuICAgICAgdmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgZGVsKHRoaXMuX3ZhbHVlcywgY3VycmVudFRhcmdldC5pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldCh0aGlzLl92YWx1ZXMsIGN1cnJlbnRUYXJnZXQuaWQsIHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVEeW5hbWljQ29udHJvbHMoKTtcbiAgICB0aGlzLl92YWxpZGF0b3JSZXN1bHRzID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuX3VwZGF0ZUFjdGlvbnMoKTtcbiAgICB0aGlzLl9kaXNwYXRjaENoYW5nZSgpO1xuICB9XG5cbiAgX29uQ29udHJvbFJlYWR5KGUpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBjb250cm9sRWxlbWVudCA9IGUuZGV0YWlsLmNvbnRyb2w7XG4gICAgY29uc3QgY29udHJvbCA9IGNvbnRyb2xFbGVtZW50LmNvbnRyb2w7XG4gICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSkge1xuICAgICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXS5ldmVudCkge1xuICAgICAgICBjb25zdCBldmVudCA9IGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXS5ldmVudDtcbiAgICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCBldmVudC5uYW1lLCB7IC4uLmV2ZW50LCAuLi5lLmRldGFpbCB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGFzQ29uZGl0aW9uKGNvbnRyb2wpKSB7XG4gICAgICAgIHRoaXMuX2R5bmFtaWNDb250cm9scy5wdXNoKGNvbnRyb2xFbGVtZW50KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlRHluYW1pY0NvbnRyb2woY29udHJvbEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVEeW5hbWljQ29udHJvbHMoKSB7XG4gICAgdGhpcy5faWdub3JlUHJvcGVydGllcyA9IFtdO1xuICAgIHRoaXMuX2R5bmFtaWNDb250cm9scy5mb3JFYWNoKChjb250cm9sRWxlbWVudCkgPT4ge1xuICAgICAgdGhpcy5fdXBkYXRlRHluYW1pY0NvbnRyb2woY29udHJvbEVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgX3VwZGF0ZUR5bmFtaWNDb250cm9sKGNvbnRyb2xFbGVtZW50KSB7XG4gICAgY29uc3QgY29udHJvbCA9IGNvbnRyb2xFbGVtZW50LmNvbnRyb2w7XG4gICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSkge1xuICAgICAgdGhpcy5fZHluYW1pY0F0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzID0gdGhpcy5fZXZhbHVhdGVDb25kaXRpb24oY29udHJvbCwgYXR0cmlidXRlKTtcbiAgICAgICAgaWYgKGlzKSB7XG4gICAgICAgICAgY29udHJvbEVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgJycpO1xuICAgICAgICAgIGlmIChhdHRyaWJ1dGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICB0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzLnB1c2goY29udHJvbEVsZW1lbnQuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250cm9sRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgcGVyZm9ybVVwZGF0ZSgpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmdldENvbnRyb2xzKCkubWFwKChlKSA9PiBlLnVwZGF0ZUNvbXBsZXRlKSk7XG4gICAgdGhpcy5nZXRDb250cm9scygpLmZvckVhY2goKHMpID0+IHtcbiAgICAgIHMucmVxdWVzdFVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIHN1cGVyLnBlcmZvcm1VcGRhdGUoKTtcbiAgfVxuXG4gIF9yZW5kZXJDb250cm9sKGtleSkge1xuICAgIC8vIFRoaXMgaXMgcmVxdWlyZSB0byBjbGVhbiBjYWNoZSBvZiA8Z3Ytc2NoZW1hLWZvcm0tY29udHJvbD5cbiAgICBjb25zdCBjb250cm9sID0geyAuLi50aGlzLnNjaGVtYS5wcm9wZXJ0aWVzW2tleV0gfTtcbiAgICBjb25zdCBpc1JlcXVpcmVkID0gKHRoaXMuc2NoZW1hLnJlcXVpcmVkICYmIHRoaXMuc2NoZW1hLnJlcXVpcmVkLmluY2x1ZGVzKGtleSkpIHx8IHRoaXMuX2V2YWx1YXRlQ29uZGl0aW9uKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuICAgIGNvbnN0IGlzRGlzYWJsZWQgPSAodGhpcy5zY2hlbWEuZGlzYWJsZWQgJiYgdGhpcy5zY2hlbWEuZGlzYWJsZWQuaW5jbHVkZXMoa2V5KSkgfHwgdGhpcy5fZXZhbHVhdGVDb25kaXRpb24oY29udHJvbCwgJ2Rpc2FibGVkJyk7XG4gICAgY29uc3QgaXNIaWRkZW4gPSB0aGlzLl9ldmFsdWF0ZUNvbmRpdGlvbihjb250cm9sLCAnaGlkZGVuJyk7XG4gICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICB0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgY29uc3QgaXNSZWFkb25seSA9IHRoaXMucmVhZG9ubHkgfHwgY29udHJvbC5yZWFkT25seSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBpc1dyaXRlT25seSA9IGNvbnRyb2wud3JpdGVPbmx5ID09PSB0cnVlO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0KHRoaXMuX3ZhbHVlcywga2V5KTtcbiAgICByZXR1cm4gaHRtbGA8Z3Ytc2NoZW1hLWZvcm0tY29udHJvbFxuICAgICAgLmlkPVwiJHtrZXl9XCJcbiAgICAgIC5lcnJvcnM9XCIke3RoaXMuZXJyb3JzfVwiXG4gICAgICAuY29udHJvbD1cIiR7Y29udHJvbH1cIlxuICAgICAgLnNrZWxldG9uPVwiJHt0aGlzLnNrZWxldG9ufVwiXG4gICAgICAudmFsdWU9XCIke3ZhbHVlfVwiXG4gICAgICA/cmVhZG9ubHk9XCIke2lzUmVhZG9ubHl9XCJcbiAgICAgID93cml0ZW9ubHk9XCIke2lzV3JpdGVPbmx5fVwiXG4gICAgICA/cmVxdWlyZWQ9XCIke2lzUmVxdWlyZWR9XCJcbiAgICAgID9kaXNhYmxlZD1cIiR7aXNEaXNhYmxlZH1cIlxuICAgICAgP2hpZGRlbj1cIiR7aXNIaWRkZW59XCJcbiAgICA+PC9ndi1zY2hlbWEtZm9ybS1jb250cm9sPmA7XG4gIH1cblxuICBfaGFzQ29uZGl0aW9uKGNvbnRyb2wpIHtcbiAgICBpZiAoY29udHJvbFsneC1zY2hlbWEtZm9ybSddKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZHluYW1pY0F0dHJpYnV0ZXMuZmluZCgoY29uZGl0aW9uKSA9PiBjb250cm9sWyd4LXNjaGVtYS1mb3JtJ11bY29uZGl0aW9uXSAhPSBudWxsKSAhPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBfZXZhbHVhdGVDb25kaXRpb24oY29udHJvbCwgY29uZGl0aW9uS2V5KSB7XG4gICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSA9PSBudWxsIHx8IGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXVtjb25kaXRpb25LZXldID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY29uZGl0aW9uID0gY29udHJvbFsneC1zY2hlbWEtZm9ybSddW2NvbmRpdGlvbktleV07XG4gICAgaWYgKHR5cGVvZiBjb25kaXRpb24gPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGNvbmRpdGlvbjtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmRpdGlvbikpIHtcbiAgICAgIC8vIGNvbmRpdGlvbiBpc24ndCBhbiBhcnJheSwgaWdub3JlIHRoZSBjb25kaXRpb25cbiAgICAgIGNvbnNvbGUud2FybihgJyR7Y29uZGl0aW9uS2V5fScgYXR0cmlidXRlIG9mICd4LXNjaGVtYS1mb3JtJyBzaG91bGQgYmUgYW4gYXJyYXlgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBjb25kaXRpb24pIHtcbiAgICAgIC8vIG9wZXJhdGlvbiBvbmx5IGhhdmUgb25lIG9wZXJhdG9yIHdpdGggYSBzaW5nbGUgb2JqZWN0IGNvbnRhaW5pbmcgb3BlcmFuZCB2YWx1ZXNcbiAgICAgIGNvbnN0IG9wZXJhdG9yID0gT2JqZWN0LmtleXMob3BlcmF0aW9uKVswXTtcblxuICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICBjYXNlICckbmVxJzpcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5fZXZhbHVhdGVOb3RFcXVhbHNDb25kaXRpb24oY29udHJvbCwgb3BlcmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnJGVxJzpcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5fZXZhbHVhdGVFcXVhbHNDb25kaXRpb24oY29udHJvbCwgb3BlcmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnJG5vZGVmJzpcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5fZXZhbHVhdGVOb3REZWZDb25kaXRpb24oY29udHJvbCwgb3BlcmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnJGRlZic6XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHRoaXMuX2V2YWx1YXRlRGVmQ29uZGl0aW9uKGNvbnRyb2wsIG9wZXJhdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBvcGVyYXRvciAnJHtvcGVyYXRvcn0nIG9uIGRpc2FibGUgY29uZGl0aW9uYCk7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIF9ldmFsdWF0ZU5vdEVxdWFsc0NvbmRpdGlvbihjb250cm9sLCBjb25kaXRpb24pIHtcbiAgICByZXR1cm4gIXRoaXMuX2V2YWx1YXRlRXF1YWxzQ29uZGl0aW9uKGNvbnRyb2wsIGNvbmRpdGlvbik7XG4gIH1cblxuICBfZXZhbHVhdGVFcXVhbHNDb25kaXRpb24oY29udHJvbCwgY29uZGl0aW9uKSB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBPYmplY3Qua2V5cyhjb25kaXRpb24pWzBdO1xuICAgIGNvbnN0IG9wZXJhbmRzID0gY29uZGl0aW9uW29wZXJhdG9yXTtcbiAgICBjb25zdCBtb2RlbEF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhvcGVyYW5kcyk7XG4gICAgcmV0dXJuIG1vZGVsQXR0cmlidXRlc1xuICAgICAgLm1hcCgobW9kZWxBdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdFZhbHVlID0gb3BlcmFuZHNbbW9kZWxBdHRyaWJ1dGVdO1xuICAgICAgICBsZXQgdmFsdWUgPSBnZXQodGhpcy5fdmFsdWVzLCBtb2RlbEF0dHJpYnV0ZSk7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsICYmIGNvbnRyb2wudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRlc3RWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdFZhbHVlLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHRlc3RWYWx1ZTtcbiAgICAgIH0pXG4gICAgICAucmVkdWNlKChhY2MsIGN1cnJlbnQpID0+IGFjYyB8fCBjdXJyZW50KTtcbiAgfVxuXG4gIF9ldmFsdWF0ZU5vdERlZkNvbmRpdGlvbihjb250cm9sLCBjb25kaXRpb24pIHtcbiAgICBjb25zdCBvcGVyYXRvciA9IE9iamVjdC5rZXlzKGNvbmRpdGlvbilbMF07XG4gICAgY29uc3QgbW9kZWxBdHRyaWJ1dGUgPSBjb25kaXRpb25bb3BlcmF0b3JdO1xuICAgIHJldHVybiBnZXQodGhpcy5fdmFsdWVzLCBtb2RlbEF0dHJpYnV0ZSkgPT09IHVuZGVmaW5lZCB8fCBnZXQodGhpcy5fdmFsdWVzLCBtb2RlbEF0dHJpYnV0ZSkgPT09IG51bGw7XG4gIH1cblxuICBfZXZhbHVhdGVEZWZDb25kaXRpb24oY29udHJvbCwgY29uZGl0aW9uKSB7XG4gICAgcmV0dXJuICF0aGlzLl9ldmFsdWF0ZU5vdERlZkNvbmRpdGlvbihjb250cm9sLCBjb25kaXRpb24pO1xuICB9XG5cbiAgX3JlbmRlclBhcnQoKSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpcm0pIHtcbiAgICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJjb25maXJtLWJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3JcIj5UaGUgY29uZmlndXJhdGlvbiBpcyBub3QgdmFsaWQgYW5kIGNhbm5vdCBiZSBzYXZlZC48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpcm0tYm94X2FjdGlvbnNcIj5cbiAgICAgICAgICA8Z3YtYnV0dG9uIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uQ29uZmlybVJlc2V0fVwiIG91dGxpbmVkIGljb249XCJnZW5lcmFsOnVwZGF0ZVwiIGRhbmdlcj5Mb3NlIGNoYW5nZXM8L2d2LWJ1dHRvbj5cbiAgICAgICAgICA8Z3YtYnV0dG9uIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uQ29uZmlybUVkaXR9XCIgaWNvbj1cImRlc2lnbjplZGl0XCI+RWRpdDwvZ3YtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzID8gT2JqZWN0LmtleXModGhpcy5zY2hlbWEucHJvcGVydGllcykgOiBbXTtcbiAgICB0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzID0gW107XG5cbiAgICBpZiAodGhpcy5ncm91cHMpIHtcbiAgICAgIC8vIFJlbW92ZSB1bmRlZmluZWQgZ3JvdXAgaXRlbXNcbiAgICAgIGNvbnN0IGdyb3Vwc0NsZWFuZWQgPSB0aGlzLmdyb3Vwcy5yZWR1Y2UoKHByZXYsIGdyb3VwKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zRXhpc3RpbmdJblNjaGVtYUtleXMgPSBrZXlzLmZpbHRlcigoa2V5KSA9PiBbLi4uKGdyb3VwLml0ZW1zIHx8IFtdKV0uaW5jbHVkZXMoa2V5KSk7XG4gICAgICAgIHByZXYucHVzaCh7XG4gICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgaXRlbXM6IGl0ZW1zRXhpc3RpbmdJblNjaGVtYUtleXMgfHwgW10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIFtdKTtcblxuICAgICAgLy8gQWRkIG5vbiBncm91cGVkIGl0ZW1zIGluc2lkZSBkZWZhdWx0IGdyb3VwXG4gICAgICBjb25zdCBkZWZhdWx0R3JvdXAgPSBncm91cHNDbGVhbmVkLmZpbmQoKGcpID0+IGcuZGVmYXVsdCkgfHwgeyBkZWZhdWx0OiB0cnVlLCBpdGVtczogW10gfTtcbiAgICAgIGNvbnN0IHppcEdyb3VwZWRJdGVtcyA9IGdyb3Vwc0NsZWFuZWQucmVkdWNlKChwcmV2LCBncm91cCkgPT4gWy4uLnByZXYsIC4uLmdyb3VwLml0ZW1zXSwgW10pO1xuICAgICAgZGVmYXVsdEdyb3VwLml0ZW1zID0ga2V5cy5maWx0ZXIoKGtleSkgPT4gIXppcEdyb3VwZWRJdGVtcy5pbmNsdWRlcyhrZXkpKTtcblxuICAgICAgcmV0dXJuIHJlcGVhdChcbiAgICAgICAgZ3JvdXBzQ2xlYW5lZCxcbiAgICAgICAgKGdyb3VwKSA9PlxuICAgICAgICAgIGh0bWxgJHtncm91cC5uYW1lXG4gICAgICAgICAgICA/IGh0bWxgPGgyIGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj4ke2dyb3VwLm5hbWV9PC9oMj5cbiAgICAgICAgICAgICAgICAke3JlcGVhdChncm91cC5pdGVtcywgKGtleSkgPT4gdGhpcy5fcmVuZGVyQ29udHJvbChrZXkpKX1gXG4gICAgICAgICAgICA6IHJlcGVhdChncm91cC5pdGVtcywgKGtleSkgPT4gdGhpcy5fcmVuZGVyQ29udHJvbChrZXkpKX0gYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgJHtyZXBlYXQoWzFdLCAoKSA9PlxuICAgICAgcmVwZWF0KFxuICAgICAgICBrZXlzLFxuICAgICAgICAoa2V5KSA9PiBrZXksXG4gICAgICAgIChrZXkpID0+IHRoaXMuX3JlbmRlckNvbnRyb2woa2V5KSxcbiAgICAgICksXG4gICAgKX1gO1xuICB9XG5cbiAgZ2V0Q29udHJvbHMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LXNjaGVtYS1mb3JtLWNvbnRyb2wnKSk7XG4gIH1cblxuICBnZXRDb250cm9sKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2lkfVwiXWApO1xuICB9XG5cbiAgX2dldEVycm9ycygpIHtcbiAgICByZXR1cm4gKHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMuZXJyb3JzIHx8IFtdKS5maWx0ZXIoKGVycm9yKSA9PiB7XG4gICAgICBsZXQgaWQgPSBgJHtlcnJvci5wcm9wZXJ0eS5yZXBsYWNlKCdpbnN0YW5jZS4nLCAnJyl9YDtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShlcnJvci5hcmd1bWVudCkpIHtcbiAgICAgICAgaWQgPSBgJHtpZH0uJHtlcnJvci5hcmd1bWVudH1gO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlcnJvcktleSA9IGB4LXNjaGVtYS1mb3JtLmVycm9ycy4ke2lkfS4ke2Vycm9yLm5hbWV9YDtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldCh0aGlzLnNjaGVtYSwgZXJyb3JLZXkpO1xuICAgICAgaWYgKGVycm9yTWVzc2FnZSkge1xuICAgICAgICBlcnJvci5tZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmV0dXJuICF0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzLmluY2x1ZGVzKGlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIGlmICh0aGlzLnNjaGVtYSkge1xuICAgICAgLy8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmxvY2sgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGZvcm1cbiAgICAgIHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMgPSB0aGlzLl92YWxpZGF0b3IudmFsaWRhdGUodGhpcy5fdmFsdWVzLCB7IC4uLnRoaXMuc2NoZW1hLCBhZGRpdGlvbmFsUHJvcGVydGllczoge30gfSk7XG4gICAgICB0aGlzLmVycm9ycyA9IHRoaXMuX2dldEVycm9ycygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yUmVzdWx0cztcbiAgfVxuXG4gIGlzVmFsaWQoKSB7XG4gICAgaWYgKHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMudmFsaWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZ2V0RXJyb3JzKCkgPT09IDA7XG4gIH1cblxuICBpc1RvdWNoKCkge1xuICAgIHJldHVybiB0aGlzLl90b3VjaCB8fCAodGhpcy5kaXJ0eSAmJiB0aGlzLnZhbGlkYXRlT25SZW5kZXIpO1xuICB9XG5cbiAgY2FuU3VibWl0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVG91Y2goKSAmJiB0aGlzLmlzVmFsaWQoKTtcbiAgfVxuXG4gIF91cGRhdGVBY3Rpb25zKCkge1xuICAgIGNvbnN0IHN1Ym1pdEJ0biA9IHRoaXMuX2dldFN1Ym1pdEJ0bigpO1xuICAgIGlmIChzdWJtaXRCdG4gIT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuY2FuU3VibWl0KCkpIHtcbiAgICAgICAgdGhpcy5fZ2V0U3VibWl0QnRuKCkucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZ2V0U3VibWl0QnRuKCkuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXNldEJ0biA9IHRoaXMuX2dldFJlc2V0QnRuKCk7XG4gICAgaWYgKHJlc2V0QnRuICE9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmRpcnR5KSB7XG4gICAgICAgIHJlc2V0QnRuLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0QnRuLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfdXBkYXRlQ2hpbGRyZW4od2l0aFZhbGlkYXRpb24pIHtcbiAgICBpZiAod2l0aFZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMgPSB7fTtcbiAgICAgIHRoaXMuZXJyb3JzID0gbnVsbDtcbiAgICAgIHRoaXMucmVxdWVzdFZhbGlkYXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdXBkYXRlQWN0aW9uc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3VwZGF0ZUFjdGlvbnMoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVBY3Rpb25zVGltZW91dCk7XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnX3ZhbHVlcycpKSB7XG4gICAgICB0aGlzLmdldENvbnRyb2xzKCkuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICBjb250cm9sLnZhbHVlID0gZ2V0KHRoaXMuX3ZhbHVlcywgY29udHJvbC5pZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4odGhpcy52YWxpZGF0ZU9uUmVuZGVyICYmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ192YWx1ZXMnKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3NjaGVtYScpKSk7XG4gIH1cblxuICBhc3luYyBnZXRVcGRhdGVDb21wbGV0ZSgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdXBlci5nZXRVcGRhdGVDb21wbGV0ZSgpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuZ2V0Q29udHJvbHMoKS5tYXAoKGUpID0+IGUudXBkYXRlQ29tcGxldGUpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxmb3JtIGNsYXNzPVwiJHtjbGFzc01hcCh7IHNjcm9sbGFibGU6IHRoaXMuc2Nyb2xsYWJsZSB9KX1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTWFwKHsgY29udGFpbmVyOiB0cnVlLCBjb25maXJtOiB0aGlzLl9jb25maXJtIH0pfVwiPlxuICAgICAgICAke3RoaXMuaGFzSGVhZGVyID09PSB0cnVlXG4gICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyB0aXRsZTogdHJ1ZSwgY2VudGVyOiB0aGlzLmhhc0hlYWRlciAmJiAhdGhpcy5oYXNGb290ZXIgfSl9XCI+XG4gICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwidGl0bGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJoZWFkZXItbGVmdFwiPjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAke3RoaXMucmVhZG9ubHkgPT09IHRydWUgfHwgdGhpcy5oYXNGb290ZXIgPT09IHRydWVcbiAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgIDogaHRtbGA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInJlc2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25SZXNldH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImdlbmVyYWw6dXBkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiUmVzZXRcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25TdWJtaXR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJjb2RlOmNoZWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aXRsZT1cIiR7dGhpcy5zdWJtaXRMYWJlbH1cIlxuICAgICAgICAgICAgICAgICAgICAgID48L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IGB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYFxuICAgICAgICAgIDogJyd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+JHt0aGlzLnNjaGVtYSAhPSBudWxsID8gdGhpcy5fcmVuZGVyUGFydCgpIDogaHRtbGBgfTwvZGl2PlxuICAgICAgICAke3RoaXMuaGFzRm9vdGVyID09PSB0cnVlICYmIHRoaXMucmVhZG9ubHkgIT09IHRydWVcbiAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgICAgPGd2LWJ1dHRvbiBpZD1cInJlc2V0XCIgb3V0bGluZWQgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25SZXNldH1cIiBpY29uPVwiZ2VuZXJhbDp1cGRhdGVcIiB0aXRsZT1cIlJlc2V0XCI+UmVzZXQ8L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxndi1idXR0b24gaWQ9XCJzdWJtaXRcIiBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vblN1Ym1pdH1cIiBpY29uPVwiY29kZTpjaGVja1wiIC50aXRsZT1cIiR7dGhpcy5zdWJtaXRMYWJlbH1cIlxuICAgICAgICAgICAgICAgICAgICA+JHt0aGlzLnN1Ym1pdExhYmVsfTwvZ3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYFxuICAgICAgICAgIDogJyd9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+YDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBlbXB0eSxcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBtYXJnaW46IDAuMnJlbTtcbiAgICAgICAgICAtLWJnYzogdmFyKC0tZ3Ytc2NoZW1hLWZvcm0tLWJnYywgI2ZmZmZmZik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtLnNjcm9sbGFibGUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAuY29udGFpbmVyIHtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG5cbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MpO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgICAgICAgIC8qIGZvciBGaXJlZm94ICovXG4gICAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIsXG4gICAgICAgIC5mb290ZXIsXG4gICAgICAgIC5jb250ZW50IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbnRlbnQge1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgICAgLyogZm9yIEZpcmVmb3ggKi9cbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbnRlbnQgPiBndi1zY2hlbWEtZm9ybS1jb250cm9sIHtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtLnNjcm9sbGFibGUgLmNvbnRlbnQge1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybS5zY3JvbGxhYmxlIC5jb250ZW50ID4gZ3Ytc2NoZW1hLWZvcm0tY29udHJvbCxcbiAgICAgICAgZm9ybS5zY3JvbGxhYmxlIC5jb250ZW50ID4gLmdyb3VwLXRpdGxlIHtcbiAgICAgICAgICBtYXgtd2lkdGg6IDc3NXB4O1xuICAgICAgICAgIHdpZHRoOiA5NSU7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLFxuICAgICAgICAuZm9vdGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgbWluLWhlaWdodDogNDVweDtcbiAgICAgICAgICAtLWd2LWljb24tLXM6IDI2cHg7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiAjYmZiZmJmO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgcGFkZGluZzogMCAwLjVyZW07XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlciB7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkOWQ5ZDk7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9vdGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZDlkOWQ5O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybS5zY3JvbGxhYmxlIC5mb290ZXIge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvb3RlciAubGVmdCxcbiAgICAgICAgLmZvb3RlciAucmlnaHQge1xuICAgICAgICAgIG1heC13aWR0aDogNDAwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIC5sZWZ0LFxuICAgICAgICAuZm9vdGVyIC5sZWZ0LFxuICAgICAgICAuaGVhZGVyIC5yaWdodCxcbiAgICAgICAgLmZvb3RlciAucmlnaHQge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlciAucmlnaHQsXG4gICAgICAgIC5mb290ZXIgLnJpZ2h0IHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlciAudGl0bGUge1xuICAgICAgICAgIGNvbG9yOiAjMjg0NDRmO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIC50aXRsZS5jZW50ZXIge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuY29uZmlybS1ib3gge1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb25maXJtLWJveF9hY3Rpb25zIHtcbiAgICAgICAgICBwYWRkaW5nOiAxcmVtIDA7XG4gICAgICAgIH1cblxuICAgICAgICAuY29uZmlybSAuaGVhZGVyIC5sZWZ0LFxuICAgICAgICAuY29uZmlybSAuaGVhZGVyIC5yaWdodCxcbiAgICAgICAgLmNvbmZpcm0gLmZvb3RlciAubGVmdCxcbiAgICAgICAgLmNvbmZpcm0gLmZvb3RlciAucmlnaHQge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAuZ3JvdXAtdGl0bGUge1xuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tZ3YtdGhlbWUtZm9udC1jb2xvci1kYXJrKTtcbiAgICAgICAgICBmb250LXNpemU6IDIxcHg7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMC4zZW07XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWd2LXRoZW1lLWZvbnQtY29sb3ItZGFyayk7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMjRweDtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIF07XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3Ytc2NoZW1hLWZvcm0nLCBHdlNjaGVtYUZvcm0pO1xuIl19
701
+ //# sourceMappingURL=gv-schema-form.js.map