@gravitee/ui-particles-angular 9.6.0 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/esm2022/lib/gio-asciidoctor/gio-asciidoctor.component.mjs +104 -0
  2. package/{esm2020 → esm2022}/lib/gio-asciidoctor/gio-asciidoctor.module.mjs +5 -5
  3. package/{esm2020 → esm2022}/lib/gio-asciidoctor/gio-asciidoctor.service.mjs +4 -4
  4. package/{esm2020 → esm2022}/lib/gio-avatar/gio-avatar.component.mjs +4 -4
  5. package/{esm2020 → esm2022}/lib/gio-avatar/gio-avatar.module.mjs +5 -5
  6. package/esm2022/lib/gio-banner/gio-banner.component.mjs +118 -0
  7. package/{esm2020 → esm2022}/lib/gio-banner/gio-banner.module.mjs +17 -17
  8. package/{esm2020 → esm2022}/lib/gio-breadcrumb/gio-breadcrumb-item.directive.mjs +4 -4
  9. package/{esm2020 → esm2022}/lib/gio-breadcrumb/gio-breadcrumb.component.mjs +5 -5
  10. package/{esm2020 → esm2022}/lib/gio-breadcrumb/gio-breadcrumb.module.mjs +5 -5
  11. package/{esm2020 → esm2022}/lib/gio-card-empty-state/gio-card-empty-state.component.mjs +5 -5
  12. package/{esm2020 → esm2022}/lib/gio-card-empty-state/gio-card-empty-state.module.mjs +5 -5
  13. package/{esm2020 → esm2022}/lib/gio-clipboard/gio-clipboard-copy-icon.component.mjs +7 -7
  14. package/{esm2020 → esm2022}/lib/gio-clipboard/gio-clipboard-copy-wrapper.component.mjs +7 -7
  15. package/{esm2020 → esm2022}/lib/gio-clipboard/gio-clipboard.base.component.mjs +4 -4
  16. package/{esm2020 → esm2022}/lib/gio-clipboard/gio-clipboard.module.mjs +5 -5
  17. package/{esm2020 → esm2022}/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.component.mjs +5 -5
  18. package/{esm2020 → esm2022}/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.harness.mjs +2 -2
  19. package/{esm2020 → esm2022}/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.module.mjs +5 -5
  20. package/{esm2020 → esm2022}/lib/gio-confirm-dialog/gio-confirm-dialog.component.mjs +5 -5
  21. package/{esm2020 → esm2022}/lib/gio-confirm-dialog/gio-confirm-dialog.harness.mjs +2 -2
  22. package/{esm2020 → esm2022}/lib/gio-confirm-dialog/gio-confirm-dialog.module.mjs +5 -5
  23. package/{esm2020 → esm2022}/lib/gio-form-cron/gio-form-cron-hint.component.mjs +4 -4
  24. package/{esm2020 → esm2022}/lib/gio-form-cron/gio-form-cron-label.component.mjs +4 -4
  25. package/esm2022/lib/gio-form-cron/gio-form-cron.component.mjs +208 -0
  26. package/esm2022/lib/gio-form-cron/gio-form-cron.harness.mjs +77 -0
  27. package/{esm2020 → esm2022}/lib/gio-form-cron/gio-form-cron.module.mjs +21 -21
  28. package/esm2022/lib/gio-form-file-picker/gio-form-file-picker-add-button/gio-form-file-picker-add-button.component.mjs +29 -0
  29. package/{esm2020 → esm2022}/lib/gio-form-file-picker/gio-form-file-picker-empty/gio-form-file-picker-empty.component.mjs +4 -4
  30. package/{esm2020 → esm2022}/lib/gio-form-file-picker/gio-form-file-picker-label/gio-form-file-picker-label.component.mjs +4 -4
  31. package/esm2022/lib/gio-form-file-picker/gio-form-file-picker.component.harness.mjs +95 -0
  32. package/{esm2020 → esm2022}/lib/gio-form-file-picker/gio-form-file-picker.component.mjs +5 -5
  33. package/{esm2020 → esm2022}/lib/gio-form-file-picker/gio-form-file-picker.module.mjs +11 -11
  34. package/{esm2020 → esm2022}/lib/gio-form-focus-first-invalid/gio-form-focus-first-invalid-ignore.directive.mjs +4 -4
  35. package/{esm2020 → esm2022}/lib/gio-form-focus-first-invalid/gio-form-focus-first-invalid.directive.mjs +10 -10
  36. package/{esm2020 → esm2022}/lib/gio-form-focus-first-invalid/gio-form-focus-first-invalid.module.mjs +5 -5
  37. package/{esm2020 → esm2022}/lib/gio-form-headers/gio-form-headers-label.component.mjs +4 -4
  38. package/esm2022/lib/gio-form-headers/gio-form-headers.component.mjs +273 -0
  39. package/esm2022/lib/gio-form-headers/gio-form-headers.harness.mjs +73 -0
  40. package/{esm2020 → esm2022}/lib/gio-form-headers/gio-form-headers.module.mjs +19 -19
  41. package/{esm2020 → esm2022}/lib/gio-form-json-schema/gio-form-json-schema.component.mjs +4 -4
  42. package/esm2022/lib/gio-form-json-schema/gio-form-json-schema.module.mjs +203 -0
  43. package/{esm2020 → esm2022}/lib/gio-form-json-schema/gio-formly-json-schema.service.mjs +4 -4
  44. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/array-type.component.mjs +7 -7
  45. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/code-editor-type.component.mjs +6 -6
  46. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/headers-type.component.mjs +7 -7
  47. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/multischema-type.component.mjs +7 -7
  48. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/null-type.component.mjs +4 -4
  49. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/object-type.component.mjs +7 -7
  50. package/{esm2020 → esm2022}/lib/gio-form-json-schema/type-component/toggle-type.component.mjs +6 -6
  51. package/{esm2020 → esm2022}/lib/gio-form-json-schema/wrappers/gio-banner-wrapper.component.mjs +5 -5
  52. package/{esm2020 → esm2022}/lib/gio-form-json-schema/wrappers/gio-password-eye.component.mjs +6 -6
  53. package/{esm2020 → esm2022}/lib/gio-form-slide-toggle/gio-form-label.directive.mjs +10 -10
  54. package/{esm2020 → esm2022}/lib/gio-form-slide-toggle/gio-form-slide-toggle.component.mjs +5 -5
  55. package/{esm2020 → esm2022}/lib/gio-form-slide-toggle/gio-form-slide-toggle.module.mjs +5 -5
  56. package/esm2022/lib/gio-form-tags-input/gio-form-tags-input.component.mjs +314 -0
  57. package/esm2022/lib/gio-form-tags-input/gio-form-tags-input.harness.mjs +74 -0
  58. package/{esm2020 → esm2022}/lib/gio-form-tags-input/gio-form-tags-input.module.mjs +21 -21
  59. package/{esm2020 → esm2022}/lib/gio-icons/gio-icons.module.mjs +5 -5
  60. package/{esm2020 → esm2022}/lib/gio-license/gio-license-dialog/gio-license-dialog.component.mjs +5 -5
  61. package/{esm2020 → esm2022}/lib/gio-license/gio-license-dialog/gio-license-dialog.module.mjs +5 -5
  62. package/{esm2020 → esm2022}/lib/gio-license/gio-license.directive.mjs +4 -4
  63. package/{esm2020 → esm2022}/lib/gio-license/gio-license.module.mjs +5 -5
  64. package/{esm2020 → esm2022}/lib/gio-license/gio-license.service.mjs +4 -4
  65. package/esm2022/lib/gio-license/gio-license.testing.module.mjs +107 -0
  66. package/{esm2020 → esm2022}/lib/gio-license-expiration-notification/gio-license-expiration-notification.component.mjs +5 -5
  67. package/esm2022/lib/gio-license-expiration-notification/gio-license-expiration-notification.harness.mjs +44 -0
  68. package/{esm2020 → esm2022}/lib/gio-license-expiration-notification/gio-license-expiration-notification.module.mjs +5 -5
  69. package/{esm2020 → esm2022}/lib/gio-loader/gio-loader.component.mjs +4 -4
  70. package/{esm2020 → esm2022}/lib/gio-loader/gio-loader.module.mjs +5 -5
  71. package/{esm2020 → esm2022}/lib/gio-mat-config/gio-mat-config.module.mjs +8 -8
  72. package/esm2022/lib/gio-monaco-editor/gio-monaco-editor-form-field.directive.mjs +149 -0
  73. package/{esm2020 → esm2022}/lib/gio-monaco-editor/gio-monaco-editor.component.mjs +4 -4
  74. package/esm2022/lib/gio-monaco-editor/gio-monaco-editor.harness.mjs +70 -0
  75. package/esm2022/lib/gio-monaco-editor/gio-monaco-editor.module.mjs +58 -0
  76. package/{esm2020 → esm2022}/lib/gio-monaco-editor/gio-monaco-editor.testing.component.mjs +4 -4
  77. package/{esm2020 → esm2022}/lib/gio-monaco-editor/services/gio-language-json.service.mjs +4 -4
  78. package/{esm2020 → esm2022}/lib/gio-monaco-editor/services/gio-monaco-editor.service.mjs +4 -4
  79. package/{esm2020 → esm2022}/lib/gio-pipe/gio.pipe.module.mjs +5 -5
  80. package/{esm2020 → esm2022}/lib/gio-pipe/safe.pipe.mjs +4 -4
  81. package/{esm2020 → esm2022}/lib/gio-prismjs/gio-prismjs.service.mjs +4 -4
  82. package/{esm2020 → esm2022}/lib/gio-radio-button/gio-radio-button-content.component.mjs +11 -11
  83. package/{esm2020 → esm2022}/lib/gio-radio-button/gio-radio-button.module.mjs +5 -5
  84. package/esm2022/lib/gio-save-bar/gio-save-bar.component.mjs +135 -0
  85. package/esm2022/lib/gio-save-bar/gio-save-bar.harness.mjs +54 -0
  86. package/{esm2020 → esm2022}/lib/gio-save-bar/gio-save-bar.module.mjs +5 -5
  87. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-footer/gio-menu-footer.component.mjs +5 -5
  88. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-header/gio-menu-header.component.mjs +4 -4
  89. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-item/gio-menu-item.component.mjs +5 -5
  90. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-license-expiration-notification/gio-menu-license-expiration-notification.component.mjs +4 -4
  91. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-list/gio-menu-list.component.mjs +4 -4
  92. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.component.mjs +5 -5
  93. package/esm2022/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.harness.mjs +41 -0
  94. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.service.mjs +4 -4
  95. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.component.mjs +5 -5
  96. package/esm2022/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.harness.mjs +41 -0
  97. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu.component.mjs +5 -5
  98. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu.module.mjs +19 -19
  99. package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/gio-menu.service.mjs +4 -4
  100. package/{esm2020 → esm2022}/lib/oem-theme/gio-submenu/gio-submenu-group/gio-submenu-group.component.mjs +5 -5
  101. package/{esm2020 → esm2022}/lib/oem-theme/gio-submenu/gio-submenu-item/gio-submenu-item.component.mjs +5 -5
  102. package/{esm2020 → esm2022}/lib/oem-theme/gio-submenu/gio-submenu.component.mjs +8 -8
  103. package/{esm2020 → esm2022}/lib/oem-theme/gio-submenu/gio-submenu.module.mjs +5 -5
  104. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar-content/gio-top-bar-content.component.mjs +5 -5
  105. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar-link/gio-top-bar-link.component.mjs +5 -5
  106. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar-link/gio-top-bar-link.module.mjs +5 -5
  107. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar-menu/gio-top-bar-menu.component.mjs +5 -5
  108. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar-menu/gio-top-bar-menu.module.mjs +5 -5
  109. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar.component.mjs +5 -5
  110. package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/gio-top-bar.module.mjs +5 -5
  111. package/esm2022/testing/harnesses/div.harness.mjs +45 -0
  112. package/esm2022/testing/harnesses/span.harness.mjs +42 -0
  113. package/{fesm2020 → fesm2022}/gravitee-ui-particles-angular-testing.mjs +2 -2
  114. package/{fesm2020 → fesm2022}/gravitee-ui-particles-angular-testing.mjs.map +1 -1
  115. package/{fesm2020 → fesm2022}/gravitee-ui-particles-angular.mjs +662 -662
  116. package/{fesm2020 → fesm2022}/gravitee-ui-particles-angular.mjs.map +1 -1
  117. package/lib/gio-asciidoctor/gio-asciidoctor.component.d.ts +1 -1
  118. package/lib/gio-avatar/gio-avatar.component.d.ts +1 -1
  119. package/lib/gio-banner/gio-banner.component.d.ts +1 -1
  120. package/lib/gio-card-empty-state/gio-card-empty-state.component.d.ts +1 -1
  121. package/lib/gio-clipboard/gio-clipboard.base.component.d.ts +1 -1
  122. package/lib/gio-form-file-picker/gio-form-file-picker.component.d.ts +1 -1
  123. package/lib/gio-form-headers/gio-form-headers.component.d.ts +1 -1
  124. package/lib/gio-form-json-schema/gio-form-json-schema.component.d.ts +1 -1
  125. package/lib/gio-form-slide-toggle/gio-form-slide-toggle.component.d.ts +1 -1
  126. package/lib/gio-form-tags-input/gio-form-tags-input.component.d.ts +1 -1
  127. package/lib/gio-license/gio-license.directive.d.ts +1 -1
  128. package/lib/gio-license-expiration-notification/gio-license-expiration-notification.component.d.ts +1 -1
  129. package/lib/gio-monaco-editor/gio-monaco-editor-form-field.directive.d.ts +1 -1
  130. package/lib/gio-monaco-editor/gio-monaco-editor.component.d.ts +1 -1
  131. package/lib/gio-radio-button/gio-radio-button-content.component.d.ts +1 -1
  132. package/lib/gio-save-bar/gio-save-bar.component.d.ts +1 -1
  133. package/lib/oem-theme/gio-menu/gio-menu-item/gio-menu-item.component.d.ts +1 -1
  134. package/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.component.d.ts +1 -1
  135. package/lib/oem-theme/gio-menu/gio-menu.component.d.ts +1 -1
  136. package/lib/oem-theme/gio-submenu/gio-submenu-group/gio-submenu-group.component.d.ts +1 -1
  137. package/lib/oem-theme/gio-submenu/gio-submenu-item/gio-submenu-item.component.d.ts +1 -1
  138. package/lib/oem-theme/gio-submenu/gio-submenu.component.d.ts +1 -1
  139. package/lib/oem-theme/gio-top-bar/gio-top-bar-content/gio-top-bar-content.component.d.ts +1 -1
  140. package/lib/oem-theme/gio-top-bar/gio-top-bar-link/gio-top-bar-link.component.d.ts +1 -1
  141. package/lib/oem-theme/gio-top-bar/gio-top-bar.component.d.ts +1 -1
  142. package/package.json +15 -23
  143. package/src/scss/gio-mat-palettes.scss +68 -1
  144. package/esm2020/lib/gio-asciidoctor/gio-asciidoctor.component.mjs +0 -104
  145. package/esm2020/lib/gio-banner/gio-banner.component.mjs +0 -118
  146. package/esm2020/lib/gio-form-cron/gio-form-cron.component.mjs +0 -208
  147. package/esm2020/lib/gio-form-cron/gio-form-cron.harness.mjs +0 -77
  148. package/esm2020/lib/gio-form-file-picker/gio-form-file-picker-add-button/gio-form-file-picker-add-button.component.mjs +0 -29
  149. package/esm2020/lib/gio-form-file-picker/gio-form-file-picker.component.harness.mjs +0 -95
  150. package/esm2020/lib/gio-form-headers/gio-form-headers.component.mjs +0 -273
  151. package/esm2020/lib/gio-form-headers/gio-form-headers.harness.mjs +0 -73
  152. package/esm2020/lib/gio-form-json-schema/gio-form-json-schema.module.mjs +0 -203
  153. package/esm2020/lib/gio-form-tags-input/gio-form-tags-input.component.mjs +0 -314
  154. package/esm2020/lib/gio-form-tags-input/gio-form-tags-input.harness.mjs +0 -74
  155. package/esm2020/lib/gio-license/gio-license.testing.module.mjs +0 -107
  156. package/esm2020/lib/gio-license-expiration-notification/gio-license-expiration-notification.harness.mjs +0 -44
  157. package/esm2020/lib/gio-monaco-editor/gio-monaco-editor-form-field.directive.mjs +0 -149
  158. package/esm2020/lib/gio-monaco-editor/gio-monaco-editor.harness.mjs +0 -70
  159. package/esm2020/lib/gio-monaco-editor/gio-monaco-editor.module.mjs +0 -58
  160. package/esm2020/lib/gio-save-bar/gio-save-bar.component.mjs +0 -135
  161. package/esm2020/lib/gio-save-bar/gio-save-bar.harness.mjs +0 -54
  162. package/esm2020/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.harness.mjs +0 -41
  163. package/esm2020/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.harness.mjs +0 -41
  164. package/esm2020/testing/harnesses/div.harness.mjs +0 -45
  165. package/esm2020/testing/harnesses/span.harness.mjs +0 -42
  166. package/fesm2015/gravitee-ui-particles-angular-testing.mjs +0 -100
  167. package/fesm2015/gravitee-ui-particles-angular-testing.mjs.map +0 -1
  168. package/fesm2015/gravitee-ui-particles-angular.mjs +0 -7107
  169. package/fesm2015/gravitee-ui-particles-angular.mjs.map +0 -1
  170. /package/{esm2020 → esm2022}/gravitee-ui-particles-angular.mjs +0 -0
  171. /package/{esm2020 → esm2022}/lib/gio-avatar/index.mjs +0 -0
  172. /package/{esm2020 → esm2022}/lib/gio-breadcrumb/index.mjs +0 -0
  173. /package/{esm2020 → esm2022}/lib/gio-card-empty-state/index.mjs +0 -0
  174. /package/{esm2020 → esm2022}/lib/gio-dialog/gio-dialog.constant.mjs +0 -0
  175. /package/{esm2020 → esm2022}/lib/gio-form-cron/gio-form-cron.adapter.mjs +0 -0
  176. /package/{esm2020 → esm2022}/lib/gio-form-file-picker/gio-form-file-picker.model.mjs +0 -0
  177. /package/{esm2020 → esm2022}/lib/gio-form-file-picker/index.mjs +0 -0
  178. /package/{esm2020 → esm2022}/lib/gio-form-json-schema/model/GioJsonSchema.mjs +0 -0
  179. /package/{esm2020 → esm2022}/lib/gio-form-json-schema/util/validation-message.util.mjs +0 -0
  180. /package/{esm2020 → esm2022}/lib/gio-form-json-schema/wrappers/gio-banner-extension.mjs +0 -0
  181. /package/{esm2020 → esm2022}/lib/gio-mat-config/index.mjs +0 -0
  182. /package/{esm2020 → esm2022}/lib/gio-monaco-editor/models/GioMonacoEditorConfig.mjs +0 -0
  183. /package/{esm2020 → esm2022}/lib/gio-monaco-editor/models/MonacoEditorTheme.mjs +0 -0
  184. /package/{esm2020 → esm2022}/lib/oem-theme/gio-menu/index.mjs +0 -0
  185. /package/{esm2020 → esm2022}/lib/oem-theme/gio-submenu/index.mjs +0 -0
  186. /package/{esm2020 → esm2022}/lib/oem-theme/gio-top-bar/index.mjs +0 -0
  187. /package/{esm2020 → esm2022}/lib/oem-theme/oem-theme.service.mjs +0 -0
  188. /package/{esm2020 → esm2022}/lib/oem-theme/public-api.mjs +0 -0
  189. /package/{esm2020 → esm2022}/lib/public-api.mjs +0 -0
  190. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  191. /package/{esm2020 → esm2022}/testing/gravitee-ui-particles-angular-testing.mjs +0 -0
  192. /package/{esm2020 → esm2022}/testing/harnesses/index.mjs +0 -0
  193. /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
@@ -1,208 +0,0 @@
1
- import { Component, HostBinding, forwardRef } from '@angular/core';
2
- import { UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';
3
- import { isEmpty, range } from 'lodash';
4
- import { Subject } from 'rxjs';
5
- import { filter, takeUntil, tap } from 'rxjs/operators';
6
- import { getDefaultCronDisplay, parseCronExpression, toCronDescription, toCronExpression } from './gio-form-cron.adapter';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/cdk/a11y";
9
- import * as i2 from "@angular/common";
10
- import * as i3 from "@angular/forms";
11
- import * as i4 from "@angular/material/button-toggle";
12
- import * as i5 from "@angular/material/form-field";
13
- import * as i6 from "@angular/material/select";
14
- import * as i7 from "@angular/material/core";
15
- import * as i8 from "@angular/material/input";
16
- import * as i9 from "@angular/material/button";
17
- import * as i10 from "@angular/material/tooltip";
18
- import * as i11 from "@angular/material/icon";
19
- export class GioFormCronComponent {
20
- constructor(elRef, fm, ngZone) {
21
- this.elRef = elRef;
22
- this.fm = fm;
23
- this.ngZone = ngZone;
24
- this._onChange = () => ({});
25
- this._onTouched = () => ({});
26
- this.seconds = [...range(0, 60)];
27
- this.minutes = [...range(0, 60)];
28
- this.hours = [...range(0, 24)];
29
- this.daysOfMonth = [...range(1, 32)];
30
- this.daysOfWeek = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
31
- this.isDisabled = false;
32
- this.smallDisplay = false;
33
- this.touched = false;
34
- this.focused = false;
35
- this.hasError = false;
36
- this.unsubscribe$ = new Subject();
37
- fm.monitor(elRef.nativeElement, true).subscribe(origin => {
38
- this.focused = !!origin;
39
- this._onTouched();
40
- this.touched = true;
41
- });
42
- }
43
- ngOnInit() {
44
- if (window.ResizeObserver) {
45
- this.resizeObserver = new ResizeObserver(entries => {
46
- this.ngZone.run(() => {
47
- const width = entries[0].contentRect.width;
48
- this.smallDisplay = width < 580;
49
- });
50
- });
51
- this.resizeObserver.observe(this.elRef.nativeElement);
52
- }
53
- this.internalFormGroup = new UntypedFormGroup({
54
- mode: new UntypedFormControl(),
55
- secondInterval: new UntypedFormControl(),
56
- minuteInterval: new UntypedFormControl(),
57
- hourInterval: new UntypedFormControl(),
58
- dayInterval: new UntypedFormControl(),
59
- dayOfWeek: new UntypedFormControl(),
60
- dayOfMonth: new UntypedFormControl(),
61
- hours: new UntypedFormControl(),
62
- minutes: new UntypedFormControl(),
63
- customExpression: new UntypedFormControl(),
64
- });
65
- this.isDisabled ? this.internalFormGroup.disable({ emitEvent: false }) : this.internalFormGroup.enable({ emitEvent: false });
66
- this.internalFormGroup
67
- .get('mode')
68
- ?.valueChanges.pipe(filter(mode => !!mode), tap(mode => {
69
- this.cronDisplay = getDefaultCronDisplay(mode);
70
- this.refreshInternalForm();
71
- }), takeUntil(this.unsubscribe$))
72
- .subscribe();
73
- this.internalFormGroup.valueChanges
74
- ?.pipe(tap(value => {
75
- this.hasError = false;
76
- if (!value?.mode) {
77
- this._onChange(null);
78
- return;
79
- }
80
- try {
81
- this.value = toCronExpression({
82
- mode: value.mode,
83
- secondInterval: value.secondInterval,
84
- minuteInterval: value.minuteInterval,
85
- hourInterval: value.hourInterval,
86
- dayInterval: value.dayInterval,
87
- dayOfWeek: value.dayOfWeek,
88
- dayOfMonth: value.dayOfMonth,
89
- customExpression: value.customExpression,
90
- hours: value.hours,
91
- minutes: value.minutes,
92
- });
93
- this.expressionDescription = toCronDescription(this.value);
94
- this._onChange(this.value);
95
- }
96
- catch (error) {
97
- this.hasError = true;
98
- this.expressionDescription = `${error}` ?? 'Invalid cron expression.';
99
- this._onChange(null);
100
- }
101
- }), takeUntil(this.unsubscribe$))
102
- .subscribe();
103
- this.refreshInternalForm();
104
- }
105
- ngOnDestroy() {
106
- this.fm.stopMonitoring(this.elRef.nativeElement);
107
- this.resizeObserver?.unobserve(this.elRef.nativeElement);
108
- this.unsubscribe$.next();
109
- this.unsubscribe$.complete();
110
- }
111
- // From ControlValueAccessor interface
112
- writeValue(value) {
113
- if (isEmpty(value)) {
114
- this.onClear();
115
- return;
116
- }
117
- try {
118
- this.value = value;
119
- this.cronDisplay = parseCronExpression(value);
120
- this.expressionDescription = toCronDescription(this.value);
121
- this.refreshInternalForm();
122
- }
123
- catch (error) {
124
- this.hasError = true;
125
- this.expressionDescription = `${error}` ?? 'Invalid cron expression.';
126
- }
127
- }
128
- // From ControlValueAccessor interface
129
- registerOnChange(fn) {
130
- this._onChange = fn;
131
- }
132
- // From ControlValueAccessor interface
133
- registerOnTouched(fn) {
134
- this._onTouched = fn;
135
- }
136
- // From ControlValueAccessor interface
137
- setDisabledState(isDisabled) {
138
- this.isDisabled = isDisabled;
139
- this.refreshInternalForm();
140
- }
141
- validate(_) {
142
- return this.hasError ? { invalid: true } : null;
143
- }
144
- onClear({ touched } = {}) {
145
- this.value = undefined;
146
- this.cronDisplay = undefined;
147
- this.internalFormGroup?.reset({}, { emitEvent: true });
148
- if (touched) {
149
- this.touched = true;
150
- this._onTouched();
151
- }
152
- }
153
- refreshInternalForm() {
154
- if (!this.internalFormGroup)
155
- return;
156
- this.isDisabled ? this.internalFormGroup.disable({ emitEvent: false }) : this.internalFormGroup.enable({ emitEvent: false });
157
- const d = this.cronDisplay;
158
- if (d) {
159
- this.internalFormGroup.patchValue({
160
- mode: d.mode,
161
- customExpression: d.customExpression,
162
- secondInterval: d.secondInterval,
163
- minuteInterval: d.minuteInterval,
164
- hourInterval: d.hourInterval,
165
- dayInterval: d.dayInterval,
166
- dayOfWeek: d.dayOfWeek,
167
- dayOfMonth: d.dayOfMonth,
168
- hours: d.hours,
169
- minutes: d.minutes,
170
- }, { emitEvent: false });
171
- }
172
- }
173
- }
174
- GioFormCronComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GioFormCronComponent, deps: [{ token: i0.ElementRef }, { token: i1.FocusMonitor }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
175
- GioFormCronComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GioFormCronComponent, selector: "gio-form-cron", host: { properties: { "class.disabled": "this.isDisabled", "class.smallDisplay": "this.smallDisplay" } }, providers: [
176
- {
177
- provide: NG_VALUE_ACCESSOR,
178
- useExisting: forwardRef(() => GioFormCronComponent),
179
- multi: true,
180
- },
181
- {
182
- provide: NG_VALIDATORS,
183
- useExisting: forwardRef(() => GioFormCronComponent),
184
- multi: true,
185
- },
186
- ], ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<div class=\"label\"><ng-content select=\"gio-form-cron-label\"></ng-content></div>\n<div class=\"wrapper\" [class.smallDisplay]=\"smallDisplay\" [class.disabled]=\"isDisabled\">\n <ng-container *ngIf=\"internalFormGroup\" [formGroup]=\"internalFormGroup\">\n <div class=\"menu\">\n <mat-button-toggle-group class=\"gio-button-toggle-group menu__mode\" name=\"mode\" aria-label=\"Cron mode\" formControlName=\"mode\">\n <mat-button-toggle value=\"secondly\" matTooltip=\"Secondly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 's' : 'Secondly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"minutely\" matTooltip=\"Minutely\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'm' : 'Minutely'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"hourly\" matTooltip=\"Hourly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'h' : 'Hourly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"daily\" matTooltip=\"Daily\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'D' : 'Daily'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"weekly\" matTooltip=\"Weekly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'W' : 'Weekly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"monthly\" matTooltip=\"Monthly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'M' : 'Monthly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"custom\" matTooltip=\"Custom\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'C' : 'Custom'\n }}</mat-button-toggle>\n </mat-button-toggle-group>\n <button\n *ngIf=\"value && !isDisabled\"\n mat-icon-button\n aria-label=\"Clear\"\n matTooltip=\"Clear\"\n type=\"button\"\n (click)=\"onClear({ touched: true })\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <ng-container [ngSwitch]=\"internalFormGroup.get('mode')?.value\">\n <ng-container *ngSwitchCase=\"'secondly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Second</mat-label>\n <mat-select formControlName=\"secondInterval\">\n <mat-option *ngFor=\"let second of seconds\" [value]=\"second\">{{ second }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'minutely'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minute(s)</mat-label>\n <mat-select formControlName=\"minuteInterval\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'hourly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hour(s)</mat-label>\n <mat-select formControlName=\"hourInterval\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minute(s)</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'daily'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Day(s)</mat-label>\n <mat-select formControlName=\"dayInterval\">\n <mat-option *ngFor=\"let day of daysOfMonth\" [value]=\"day\">{{ day }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\"> at </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hour(s)</mat-label>\n <mat-select formControlName=\"hours\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minute(s)</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'weekly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-medium\">\n <mat-label>Day of the week</mat-label>\n <mat-select formControlName=\"dayOfWeek\">\n <mat-option *ngFor=\"let day of daysOfWeek; let index = index\" [value]=\"index\">{{ day }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\"> at </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hours</mat-label>\n <mat-select formControlName=\"hours\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minutes</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'monthly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">On the </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Day(s)</mat-label>\n <mat-select formControlName=\"dayOfMonth\">\n <mat-option *ngFor=\"let day of daysOfMonth\" [value]=\"day\">{{ day }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\"> of every month at </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hours</mat-label>\n <mat-select formControlName=\"hours\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minutes</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'custom'\">\n <div class=\"modeForm\">\n <mat-form-field class=\"modeForm__field-custom\">\n <mat-label>Cron expression</mat-label>\n <input matInput formControlName=\"customExpression\" placeholder=\"* * * * * *\" />\n </mat-form-field>\n </div>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"value; else placeholder\" class=\"preview\">\n <span *ngIf=\"internalFormGroup.get('mode')?.value !== 'custom'\" class=\"preview__value\">\n {{ value }}\n </span>\n <span class=\"preview__hint\">{{ expressionDescription }}</span>\n </div>\n </ng-container>\n\n <ng-template #placeholder>\n <div class=\"placeholder\">No cron expression defined.</div>\n </ng-template>\n</div>\n<div class=\"hint\"><ng-content select=\"gio-form-cron-hint\"></ng-content></div>\n", styles: [".gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}:host{display:flex;min-width:356px;flex-direction:column}::ng-deep gio-form-cron .mat-mdc-form-field-infix{min-height:48px}::ng-deep gio-form-cron .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:24px}::ng-deep gio-form-cron .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY( -30.75px) scale(var(--mat-mdc-form-field-floating-label-scale, .75));transform:var(--mat-mdc-form-field-label-transform)}::ng-deep gio-form-cron .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:12px;padding-bottom:12px}::ng-deep gio-form-cron .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding-top:12px;padding-bottom:12px}::ng-deep gio-form-cron .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix{padding-top:12px;padding-bottom:12px}::ng-deep gio-form-cron .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-floating-label{display:none}.label{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;padding-left:10px;color:#7a7b80}.label:empty{display:none}.wrapper{display:inline-flex;flex-direction:column;padding:8px;border:1px solid #d3d5dc;border-radius:8px}.wrapper:hover:not(.disabled){padding:7px;border:2px solid #313133}.wrapper .menu{display:inline-flex;margin-bottom:4px}.wrapper .menu__mode{border:none;margin-bottom:0}.wrapper .modeForm{display:flex;flex-wrap:wrap;align-items:center;margin-bottom:8px;column-gap:4px}.wrapper .modeForm__field-small,.wrapper .modeForm__field-medium,.wrapper .modeForm__field-custom{display:inline-block;height:52px}.wrapper .modeForm__field-small{width:124px}.wrapper .modeForm__field-medium{width:158px}.wrapper .modeForm__field-custom{width:100%}.wrapper .preview,.wrapper .placeholder{display:flex;flex-direction:column;align-items:center;padding:8px;border-radius:8px;background-color:#e7e8ef;color:#000}.wrapper .preview__hint,.wrapper .placeholder{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.wrapper.disabled .preview,.wrapper.disabled .placeholder{opacity:.4}.hint{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;padding-top:2px;padding-left:10px;color:#7a7b80}.hint:empty{display:none}:host(.ng-invalid.ng-touched) .wrapper{padding:7px;border-width:2px;border-color:#ec4899}:host(.ng-invalid.ng-touched) .wrapper .preview,:host(.ng-invalid.ng-touched) .wrapper .placeholder{color:#ec4899}:host(.disabled) .wrapper{border-color:#e7e8ef}:host(.disabled) .wrapper,:host(.disabled) .hint,:host(.disabled) .label{color:#d3d5dc}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i4.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
187
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GioFormCronComponent, decorators: [{
188
- type: Component,
189
- args: [{ selector: 'gio-form-cron', providers: [
190
- {
191
- provide: NG_VALUE_ACCESSOR,
192
- useExisting: forwardRef(() => GioFormCronComponent),
193
- multi: true,
194
- },
195
- {
196
- provide: NG_VALIDATORS,
197
- useExisting: forwardRef(() => GioFormCronComponent),
198
- multi: true,
199
- },
200
- ], template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<div class=\"label\"><ng-content select=\"gio-form-cron-label\"></ng-content></div>\n<div class=\"wrapper\" [class.smallDisplay]=\"smallDisplay\" [class.disabled]=\"isDisabled\">\n <ng-container *ngIf=\"internalFormGroup\" [formGroup]=\"internalFormGroup\">\n <div class=\"menu\">\n <mat-button-toggle-group class=\"gio-button-toggle-group menu__mode\" name=\"mode\" aria-label=\"Cron mode\" formControlName=\"mode\">\n <mat-button-toggle value=\"secondly\" matTooltip=\"Secondly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 's' : 'Secondly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"minutely\" matTooltip=\"Minutely\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'm' : 'Minutely'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"hourly\" matTooltip=\"Hourly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'h' : 'Hourly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"daily\" matTooltip=\"Daily\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'D' : 'Daily'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"weekly\" matTooltip=\"Weekly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'W' : 'Weekly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"monthly\" matTooltip=\"Monthly\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'M' : 'Monthly'\n }}</mat-button-toggle>\n <mat-button-toggle value=\"custom\" matTooltip=\"Custom\" [matTooltipDisabled]=\"!smallDisplay\">{{\n smallDisplay ? 'C' : 'Custom'\n }}</mat-button-toggle>\n </mat-button-toggle-group>\n <button\n *ngIf=\"value && !isDisabled\"\n mat-icon-button\n aria-label=\"Clear\"\n matTooltip=\"Clear\"\n type=\"button\"\n (click)=\"onClear({ touched: true })\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <ng-container [ngSwitch]=\"internalFormGroup.get('mode')?.value\">\n <ng-container *ngSwitchCase=\"'secondly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Second</mat-label>\n <mat-select formControlName=\"secondInterval\">\n <mat-option *ngFor=\"let second of seconds\" [value]=\"second\">{{ second }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'minutely'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minute(s)</mat-label>\n <mat-select formControlName=\"minuteInterval\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'hourly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hour(s)</mat-label>\n <mat-select formControlName=\"hourInterval\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minute(s)</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'daily'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Day(s)</mat-label>\n <mat-select formControlName=\"dayInterval\">\n <mat-option *ngFor=\"let day of daysOfMonth\" [value]=\"day\">{{ day }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\"> at </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hour(s)</mat-label>\n <mat-select formControlName=\"hours\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minute(s)</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'weekly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">Every </span>\n <mat-form-field class=\"modeForm__field-medium\">\n <mat-label>Day of the week</mat-label>\n <mat-select formControlName=\"dayOfWeek\">\n <mat-option *ngFor=\"let day of daysOfWeek; let index = index\" [value]=\"index\">{{ day }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\"> at </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hours</mat-label>\n <mat-select formControlName=\"hours\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minutes</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'monthly'\">\n <div class=\"modeForm\">\n <span class=\"cron-form-label\">On the </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Day(s)</mat-label>\n <mat-select formControlName=\"dayOfMonth\">\n <mat-option *ngFor=\"let day of daysOfMonth\" [value]=\"day\">{{ day }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\"> of every month at </span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Hours</mat-label>\n <mat-select formControlName=\"hours\">\n <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{ hour }}</mat-option>\n </mat-select>\n </mat-form-field>\n <span class=\"cron-form-label\">:</span>\n <mat-form-field class=\"modeForm__field-small\">\n <mat-label>Minutes</mat-label>\n <mat-select formControlName=\"minutes\">\n <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{ minute }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'custom'\">\n <div class=\"modeForm\">\n <mat-form-field class=\"modeForm__field-custom\">\n <mat-label>Cron expression</mat-label>\n <input matInput formControlName=\"customExpression\" placeholder=\"* * * * * *\" />\n </mat-form-field>\n </div>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"value; else placeholder\" class=\"preview\">\n <span *ngIf=\"internalFormGroup.get('mode')?.value !== 'custom'\" class=\"preview__value\">\n {{ value }}\n </span>\n <span class=\"preview__hint\">{{ expressionDescription }}</span>\n </div>\n </ng-container>\n\n <ng-template #placeholder>\n <div class=\"placeholder\">No cron expression defined.</div>\n </ng-template>\n</div>\n<div class=\"hint\"><ng-content select=\"gio-form-cron-hint\"></ng-content></div>\n", styles: [".gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}:host{display:flex;min-width:356px;flex-direction:column}::ng-deep gio-form-cron .mat-mdc-form-field-infix{min-height:48px}::ng-deep gio-form-cron .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:24px}::ng-deep gio-form-cron .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY( -30.75px) scale(var(--mat-mdc-form-field-floating-label-scale, .75));transform:var(--mat-mdc-form-field-label-transform)}::ng-deep gio-form-cron .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:12px;padding-bottom:12px}::ng-deep gio-form-cron .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding-top:12px;padding-bottom:12px}::ng-deep gio-form-cron .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix{padding-top:12px;padding-bottom:12px}::ng-deep gio-form-cron .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-floating-label{display:none}.label{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;padding-left:10px;color:#7a7b80}.label:empty{display:none}.wrapper{display:inline-flex;flex-direction:column;padding:8px;border:1px solid #d3d5dc;border-radius:8px}.wrapper:hover:not(.disabled){padding:7px;border:2px solid #313133}.wrapper .menu{display:inline-flex;margin-bottom:4px}.wrapper .menu__mode{border:none;margin-bottom:0}.wrapper .modeForm{display:flex;flex-wrap:wrap;align-items:center;margin-bottom:8px;column-gap:4px}.wrapper .modeForm__field-small,.wrapper .modeForm__field-medium,.wrapper .modeForm__field-custom{display:inline-block;height:52px}.wrapper .modeForm__field-small{width:124px}.wrapper .modeForm__field-medium{width:158px}.wrapper .modeForm__field-custom{width:100%}.wrapper .preview,.wrapper .placeholder{display:flex;flex-direction:column;align-items:center;padding:8px;border-radius:8px;background-color:#e7e8ef;color:#000}.wrapper .preview__hint,.wrapper .placeholder{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.wrapper.disabled .preview,.wrapper.disabled .placeholder{opacity:.4}.hint{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;padding-top:2px;padding-left:10px;color:#7a7b80}.hint:empty{display:none}:host(.ng-invalid.ng-touched) .wrapper{padding:7px;border-width:2px;border-color:#ec4899}:host(.ng-invalid.ng-touched) .wrapper .preview,:host(.ng-invalid.ng-touched) .wrapper .placeholder{color:#ec4899}:host(.disabled) .wrapper{border-color:#e7e8ef}:host(.disabled) .wrapper,:host(.disabled) .hint,:host(.disabled) .label{color:#d3d5dc}\n"] }]
201
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FocusMonitor }, { type: i0.NgZone }]; }, propDecorators: { isDisabled: [{
202
- type: HostBinding,
203
- args: ['class.disabled']
204
- }], smallDisplay: [{
205
- type: HostBinding,
206
- args: ['class.smallDisplay']
207
- }] } });
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tY3Jvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWNyb24vZ2lvLWZvcm0tY3Jvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWNyb24vZ2lvLWZvcm0tY3Jvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFFLFNBQVMsRUFBYyxXQUFXLEVBQTZCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBR0wsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsaUJBQWlCLEdBR2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQWUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQW1CdkksTUFBTSxPQUFPLG9CQUFvQjtJQTJCL0IsWUFBNkIsS0FBaUIsRUFBbUIsRUFBZ0IsRUFBbUIsTUFBYztRQUFyRixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQW1CLE9BQUUsR0FBRixFQUFFLENBQWM7UUFBbUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQTFCM0csY0FBUyxHQUFtQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZELGVBQVUsR0FBZSxH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LEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRiwwQkNqREgsMmtTQXlNQTs0RkR0SmEsb0JBQW9CO2tCQWpCaEMsU0FBUzsrQkFDRSxlQUFlLGFBR2Q7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUM7NEJBQ25ELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUpBZ0JNLFVBQVU7c0JBRGhCLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQUd0QixZQUFZO3NCQURsQixXQUFXO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcbiAgVW50eXBlZEZvcm1Hcm91cCxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNFbXB0eSwgcmFuZ2UgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ3JvbkRpc3BsYXksIGdldERlZmF1bHRDcm9uRGlzcGxheSwgcGFyc2VDcm9uRXhwcmVzc2lvbiwgdG9Dcm9uRGVzY3JpcHRpb24sIHRvQ3JvbkV4cHJlc3Npb24gfSBmcm9tICcuL2dpby1mb3JtLWNyb24uYWRhcHRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dpby1mb3JtLWNyb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2lvLWZvcm0tY3Jvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dpby1mb3JtLWNyb24uY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBHaW9Gb3JtQ3JvbkNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBHaW9Gb3JtQ3JvbkNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHaW9Gb3JtQ3JvbkNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSwgVmFsaWRhdG9yIHtcbiAgcHVibGljIF9vbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkID0gKCkgPT4gKHt9KTtcblxuICBwdWJsaWMgX29uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+ICh7fSk7XG5cbiAgcHVibGljIHNlY29uZHMgPSBbLi4ucmFuZ2UoMCwgNjApXTtcbiAgcHVibGljIG1pbnV0ZXMgPSBbLi4ucmFuZ2UoMCwgNjApXTtcbiAgcHVibGljIGhvdXJzID0gWy4uLnJhbmdlKDAsIDI0KV07XG4gIHB1YmxpYyBkYXlzT2ZNb250aCA9IFsuLi5yYW5nZSgxLCAzMildO1xuICBwdWJsaWMgZGF5c09mV2VlayA9IFsnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheScsICdTdW5kYXknXTtcbiAgcHVibGljIGludGVybmFsRm9ybUdyb3VwPzogVW50eXBlZEZvcm1Hcm91cDtcbiAgcHVibGljIHZhbHVlPzogc3RyaW5nO1xuICBwdWJsaWMgZXhwcmVzc2lvbkRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkJylcbiAgcHVibGljIGlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWFsbERpc3BsYXknKVxuICBwdWJsaWMgc21hbGxEaXNwbGF5ID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB0b3VjaGVkID0gZmFsc2U7XG4gIHByaXZhdGUgZm9jdXNlZCA9IGZhbHNlO1xuICBwcml2YXRlIGhhc0Vycm9yID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjcm9uRGlzcGxheT86IENyb25EaXNwbGF5O1xuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcj86IFJlc2l6ZU9ic2VydmVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZWxSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVhZG9ubHkgZm06IEZvY3VzTW9uaXRvciwgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSkge1xuICAgIGZtLm1vbml0b3IoZWxSZWYubmF0aXZlRWxlbWVudCwgdHJ1ZSkuc3Vic2NyaWJlKG9yaWdpbiA9PiB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSAhIW9yaWdpbjtcbiAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAod2luZG93LlJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gZW50cmllc1swXS5jb250ZW50UmVjdC53aWR0aDtcbiAgICAgICAgICB0aGlzLnNtYWxsRGlzcGxheSA9IHdpZHRoIDwgNTgwO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5pbnRlcm5hbEZvcm1Hcm91cCA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcbiAgICAgIG1vZGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKSxcbiAgICAgIHNlY29uZEludGVydmFsOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCksXG4gICAgICBtaW51dGVJbnRlcnZhbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpLFxuICAgICAgaG91ckludGVydmFsOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCksXG4gICAgICBkYXlJbnRlcnZhbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpLFxuICAgICAgZGF5T2ZXZWVrOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCksXG4gICAgICBkYXlPZk1vbnRoOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCksXG5cbiAgICAgIGhvdXJzOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCksXG4gICAgICBtaW51dGVzOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCksXG4gICAgICBjdXN0b21FeHByZXNzaW9uOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLmlzRGlzYWJsZWQgPyB0aGlzLmludGVybmFsRm9ybUdyb3VwLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pIDogdGhpcy5pbnRlcm5hbEZvcm1Hcm91cC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXG4gICAgdGhpcy5pbnRlcm5hbEZvcm1Hcm91cFxuICAgICAgLmdldCgnbW9kZScpXG4gICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICBmaWx0ZXIobW9kZSA9PiAhIW1vZGUpLFxuICAgICAgICB0YXAobW9kZSA9PiB7XG4gICAgICAgICAgdGhpcy5jcm9uRGlzcGxheSA9IGdldERlZmF1bHRDcm9uRGlzcGxheShtb2RlKTtcblxuICAgICAgICAgIHRoaXMucmVmcmVzaEludGVybmFsRm9ybSgpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuaW50ZXJuYWxGb3JtR3JvdXAudmFsdWVDaGFuZ2VzXG4gICAgICA/LnBpcGUoXG4gICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICAgIGlmICghdmFsdWU/Lm1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRvQ3JvbkV4cHJlc3Npb24oe1xuICAgICAgICAgICAgICBtb2RlOiB2YWx1ZS5tb2RlLFxuICAgICAgICAgICAgICBzZWNvbmRJbnRlcnZhbDogdmFsdWUuc2Vjb25kSW50ZXJ2YWwsXG4gICAgICAgICAgICAgIG1pbnV0ZUludGVydmFsOiB2YWx1ZS5taW51dGVJbnRlcnZhbCxcbiAgICAgICAgICAgICAgaG91ckludGVydmFsOiB2YWx1ZS5ob3VySW50ZXJ2YWwsXG4gICAgICAgICAgICAgIGRheUludGVydmFsOiB2YWx1ZS5kYXlJbnRlcnZhbCxcbiAgICAgICAgICAgICAgZGF5T2ZXZWVrOiB2YWx1ZS5kYXlPZldlZWssXG4gICAgICAgICAgICAgIGRheU9mTW9udGg6IHZhbHVlLmRheU9mTW9udGgsXG4gICAgICAgICAgICAgIGN1c3RvbUV4cHJlc3Npb246IHZhbHVlLmN1c3RvbUV4cHJlc3Npb24sXG4gICAgICAgICAgICAgIGhvdXJzOiB2YWx1ZS5ob3VycyxcbiAgICAgICAgICAgICAgbWludXRlczogdmFsdWUubWludXRlcyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25EZXNjcmlwdGlvbiA9IHRvQ3JvbkRlc2NyaXB0aW9uKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uRGVzY3JpcHRpb24gPSBgJHtlcnJvcn1gID8/ICdJbnZhbGlkIGNyb24gZXhwcmVzc2lvbi4nO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMucmVmcmVzaEludGVybmFsRm9ybSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZm0uc3RvcE1vbml0b3JpbmcodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy51bm9ic2VydmUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMub25DbGVhcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5jcm9uRGlzcGxheSA9IHBhcnNlQ3JvbkV4cHJlc3Npb24odmFsdWUpO1xuXG4gICAgICB0aGlzLmV4cHJlc3Npb25EZXNjcmlwdGlvbiA9IHRvQ3JvbkRlc2NyaXB0aW9uKHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5yZWZyZXNoSW50ZXJuYWxGb3JtKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5leHByZXNzaW9uRGVzY3JpcHRpb24gPSBgJHtlcnJvcn1gID8/ICdJbnZhbGlkIGNyb24gZXhwcmVzc2lvbi4nO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcblxuICAgIHRoaXMucmVmcmVzaEludGVybmFsRm9ybSgpO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKF86IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5oYXNFcnJvciA/IHsgaW52YWxpZDogdHJ1ZSB9IDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsZWFyKHsgdG91Y2hlZCB9OiB7IHRvdWNoZWQ/OiBib29sZWFuIH0gPSB7fSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jcm9uRGlzcGxheSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmludGVybmFsRm9ybUdyb3VwPy5yZXNldCh7fSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG5cbiAgICBpZiAodG91Y2hlZCkge1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaEludGVybmFsRm9ybSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW50ZXJuYWxGb3JtR3JvdXApIHJldHVybjtcblxuICAgIHRoaXMuaXNEaXNhYmxlZCA/IHRoaXMuaW50ZXJuYWxGb3JtR3JvdXAuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSkgOiB0aGlzLmludGVybmFsRm9ybUdyb3VwLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cbiAgICBjb25zdCBkID0gdGhpcy5jcm9uRGlzcGxheTtcbiAgICBpZiAoZCkge1xuICAgICAgdGhpcy5pbnRlcm5hbEZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgbW9kZTogZC5tb2RlLFxuICAgICAgICAgIGN1c3RvbUV4cHJlc3Npb246IGQuY3VzdG9tRXhwcmVzc2lvbixcbiAgICAgICAgICBzZWNvbmRJbnRlcnZhbDogZC5zZWNvbmRJbnRlcnZhbCxcbiAgICAgICAgICBtaW51dGVJbnRlcnZhbDogZC5taW51dGVJbnRlcnZhbCxcbiAgICAgICAgICBob3VySW50ZXJ2YWw6IGQuaG91ckludGVydmFsLFxuICAgICAgICAgIGRheUludGVydmFsOiBkLmRheUludGVydmFsLFxuICAgICAgICAgIGRheU9mV2VlazogZC5kYXlPZldlZWssXG4gICAgICAgICAgZGF5T2ZNb250aDogZC5kYXlPZk1vbnRoLFxuXG4gICAgICAgICAgaG91cnM6IGQuaG91cnMsXG4gICAgICAgICAgbWludXRlczogZC5taW51dGVzLFxuICAgICAgICB9LFxuICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tXG5cbiAgICBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4tLT5cbjxkaXYgY2xhc3M9XCJsYWJlbFwiPjxuZy1jb250ZW50IHNlbGVjdD1cImdpby1mb3JtLWNyb24tbGFiZWxcIj48L25nLWNvbnRlbnQ+PC9kaXY+XG48ZGl2IGNsYXNzPVwid3JhcHBlclwiIFtjbGFzcy5zbWFsbERpc3BsYXldPVwic21hbGxEaXNwbGF5XCIgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWRcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImludGVybmFsRm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJpbnRlcm5hbEZvcm1Hcm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtZW51XCI+XG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgY2xhc3M9XCJnaW8tYnV0dG9uLXRvZ2dsZS1ncm91cCBtZW51X19tb2RlXCIgbmFtZT1cIm1vZGVcIiBhcmlhLWxhYmVsPVwiQ3JvbiBtb2RlXCIgZm9ybUNvbnRyb2xOYW1lPVwibW9kZVwiPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJzZWNvbmRseVwiIG1hdFRvb2x0aXA9XCJTZWNvbmRseVwiIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIXNtYWxsRGlzcGxheVwiPnt7XG4gICAgICAgICAgc21hbGxEaXNwbGF5ID8gJ3MnIDogJ1NlY29uZGx5J1xuICAgICAgICB9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cIm1pbnV0ZWx5XCIgbWF0VG9vbHRpcD1cIk1pbnV0ZWx5XCIgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhc21hbGxEaXNwbGF5XCI+e3tcbiAgICAgICAgICBzbWFsbERpc3BsYXkgPyAnbScgOiAnTWludXRlbHknXG4gICAgICAgIH19PC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiaG91cmx5XCIgbWF0VG9vbHRpcD1cIkhvdXJseVwiIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIXNtYWxsRGlzcGxheVwiPnt7XG4gICAgICAgICAgc21hbGxEaXNwbGF5ID8gJ2gnIDogJ0hvdXJseSdcbiAgICAgICAgfX08L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJkYWlseVwiIG1hdFRvb2x0aXA9XCJEYWlseVwiIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIXNtYWxsRGlzcGxheVwiPnt7XG4gICAgICAgICAgc21hbGxEaXNwbGF5ID8gJ0QnIDogJ0RhaWx5J1xuICAgICAgICB9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cIndlZWtseVwiIG1hdFRvb2x0aXA9XCJXZWVrbHlcIiBbbWF0VG9vbHRpcERpc2FibGVkXT1cIiFzbWFsbERpc3BsYXlcIj57e1xuICAgICAgICAgIHNtYWxsRGlzcGxheSA/ICdXJyA6ICdXZWVrbHknXG4gICAgICAgIH19PC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwibW9udGhseVwiIG1hdFRvb2x0aXA9XCJNb250aGx5XCIgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhc21hbGxEaXNwbGF5XCI+e3tcbiAgICAgICAgICBzbWFsbERpc3BsYXkgPyAnTScgOiAnTW9udGhseSdcbiAgICAgICAgfX08L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJjdXN0b21cIiBtYXRUb29sdGlwPVwiQ3VzdG9tXCIgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhc21hbGxEaXNwbGF5XCI+e3tcbiAgICAgICAgICBzbWFsbERpc3BsYXkgPyAnQycgOiAnQ3VzdG9tJ1xuICAgICAgICB9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInZhbHVlICYmICFpc0Rpc2FibGVkXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXG4gICAgICAgIG1hdFRvb2x0aXA9XCJDbGVhclwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwib25DbGVhcih7IHRvdWNoZWQ6IHRydWUgfSlcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJpbnRlcm5hbEZvcm1Hcm91cC5nZXQoJ21vZGUnKT8udmFsdWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZWNvbmRseSdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVGb3JtXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj5FdmVyeSA8L3NwYW4+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibW9kZUZvcm1fX2ZpZWxkLXNtYWxsXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPlNlY29uZDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwic2Vjb25kSW50ZXJ2YWxcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHNlY29uZCBvZiBzZWNvbmRzXCIgW3ZhbHVlXT1cInNlY29uZFwiPnt7IHNlY29uZCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbWludXRlbHknXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlRm9ybVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Jvbi1mb3JtLWxhYmVsXCI+RXZlcnkgPC9zcGFuPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1vZGVGb3JtX19maWVsZC1zbWFsbFwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5NaW51dGUocyk8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIm1pbnV0ZUludGVydmFsXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtaW51dGUgb2YgbWludXRlc1wiIFt2YWx1ZV09XCJtaW51dGVcIj57eyBtaW51dGUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2hvdXJseSdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGVGb3JtXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj5FdmVyeSA8L3NwYW4+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibW9kZUZvcm1fX2ZpZWxkLXNtYWxsXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPkhvdXIocyk8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImhvdXJJbnRlcnZhbFwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiIFt2YWx1ZV09XCJob3VyXCI+e3sgaG91ciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Jvbi1mb3JtLWxhYmVsXCI+Ojwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtb2RlRm9ybV9fZmllbGQtc21hbGxcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+TWludXRlKHMpPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJtaW51dGVzXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtaW51dGUgb2YgbWludXRlc1wiIFt2YWx1ZV09XCJtaW51dGVcIj57eyBtaW51dGUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhaWx5J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kZUZvcm1cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPkV2ZXJ5IDwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtb2RlRm9ybV9fZmllbGQtc21hbGxcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+RGF5KHMpPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJkYXlJbnRlcnZhbFwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXNPZk1vbnRoXCIgW3ZhbHVlXT1cImRheVwiPnt7IGRheSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Jvbi1mb3JtLWxhYmVsXCI+IGF0IDwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtb2RlRm9ybV9fZmllbGQtc21hbGxcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+SG91cihzKTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiaG91cnNcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIiBbdmFsdWVdPVwiaG91clwiPnt7IGhvdXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPjo8L3NwYW4+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibW9kZUZvcm1fX2ZpZWxkLXNtYWxsXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPk1pbnV0ZShzKTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwibWludXRlc1wiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIiBbdmFsdWVdPVwibWludXRlXCI+e3sgbWludXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid3ZWVrbHknXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlRm9ybVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Jvbi1mb3JtLWxhYmVsXCI+RXZlcnkgPC9zcGFuPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1vZGVGb3JtX19maWVsZC1tZWRpdW1cIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+RGF5IG9mIHRoZSB3ZWVrPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJkYXlPZldlZWtcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGRheSBvZiBkYXlzT2ZXZWVrOyBsZXQgaW5kZXggPSBpbmRleFwiIFt2YWx1ZV09XCJpbmRleFwiPnt7IGRheSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Jvbi1mb3JtLWxhYmVsXCI+IGF0IDwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtb2RlRm9ybV9fZmllbGQtc21hbGxcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+SG91cnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImhvdXJzXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBob3VyIG9mIGhvdXJzXCIgW3ZhbHVlXT1cImhvdXJcIj57eyBob3VyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj46PC9zcGFuPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1vZGVGb3JtX19maWVsZC1zbWFsbFwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5NaW51dGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJtaW51dGVzXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtaW51dGUgb2YgbWludXRlc1wiIFt2YWx1ZV09XCJtaW51dGVcIj57eyBtaW51dGUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21vbnRobHknXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RlRm9ybVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Jvbi1mb3JtLWxhYmVsXCI+T24gdGhlIDwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtb2RlRm9ybV9fZmllbGQtc21hbGxcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+RGF5KHMpPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJkYXlPZk1vbnRoXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c09mTW9udGhcIiBbdmFsdWVdPVwiZGF5XCI+e3sgZGF5IH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj4gb2YgZXZlcnkgbW9udGggYXQgPC9zcGFuPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1vZGVGb3JtX19maWVsZC1zbWFsbFwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5Ib3VyczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiaG91cnNcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIiBbdmFsdWVdPVwiaG91clwiPnt7IGhvdXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPjo8L3NwYW4+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibW9kZUZvcm1fX2ZpZWxkLXNtYWxsXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPk1pbnV0ZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIm1pbnV0ZXNcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCIgW3ZhbHVlXT1cIm1pbnV0ZVwiPnt7IG1pbnV0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY3VzdG9tJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kZUZvcm1cIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtb2RlRm9ybV9fZmllbGQtY3VzdG9tXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPkNyb24gZXhwcmVzc2lvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImN1c3RvbUV4cHJlc3Npb25cIiBwbGFjZWhvbGRlcj1cIiogKiAqICogKiAqXCIgLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiAqbmdJZj1cInZhbHVlOyBlbHNlIHBsYWNlaG9sZGVyXCIgY2xhc3M9XCJwcmV2aWV3XCI+XG4gICAgICA8c3BhbiAqbmdJZj1cImludGVybmFsRm9ybUdyb3VwLmdldCgnbW9kZScpPy52YWx1ZSAhPT0gJ2N1c3RvbSdcIiBjbGFzcz1cInByZXZpZXdfX3ZhbHVlXCI+XG4gICAgICAgIHt7IHZhbHVlIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cInByZXZpZXdfX2hpbnRcIj57eyBleHByZXNzaW9uRGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXI+XG4gICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyXCI+Tm8gY3JvbiBleHByZXNzaW9uIGRlZmluZWQuPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJoaW50XCI+PG5nLWNvbnRlbnQgc2VsZWN0PVwiZ2lvLWZvcm0tY3Jvbi1oaW50XCI+PC9uZy1jb250ZW50PjwvZGl2PlxuIl19
@@ -1,77 +0,0 @@
1
- /*
2
- * Copyright (C) 2015 The Gravitee team (http://gravitee.io)
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';
17
- import { MatButtonToggleGroupHarness } from '@angular/material/button-toggle/testing';
18
- import { MatInputHarness } from '@angular/material/input/testing';
19
- export class GioFormCronHarness extends ComponentHarness {
20
- constructor() {
21
- super(...arguments);
22
- this.getModeToggleGroup = this.locatorFor(MatButtonToggleGroupHarness.with({ selector: '[formControlName="mode"]' }));
23
- this.getCustomExpressionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName="customExpression"]' }));
24
- }
25
- /**
26
- * Gets a `HarnessPredicate` that can be used to search for this harness.
27
- *
28
- * @param options Options for filtering which input instances are considered a match.
29
- * @return a `HarnessPredicate` configured with the given options.
30
- */
31
- static with(options = {}) {
32
- return new HarnessPredicate(GioFormCronHarness, options);
33
- }
34
- async getMode() {
35
- const mode = await this.getModeToggleGroup();
36
- const selected = await (await mode.getToggles({ checked: true }))[0]?.getText();
37
- if (!selected) {
38
- return null;
39
- }
40
- return selected;
41
- }
42
- async setMode(mode) {
43
- const modeToggle = await this.getModeToggleGroup();
44
- await (await modeToggle.getToggles({ text: mode }))[0]?.check();
45
- }
46
- async clear() {
47
- const clearButton = await this.locatorForOptional('[aria-label="Clear"]')();
48
- await clearButton?.click();
49
- }
50
- async getValue() {
51
- if ((await this.getMode()) === 'Custom') {
52
- const input = await this.getCustomExpressionInput();
53
- return input.getValue();
54
- }
55
- const value = await this.locatorForOptional('.preview__value')();
56
- return value?.text() ?? null;
57
- }
58
- async setCustomValue(value) {
59
- if ((await this.getMode()) !== 'Custom') {
60
- await this.setMode('Custom');
61
- }
62
- const input = await this.getCustomExpressionInput();
63
- await input.setValue(value);
64
- }
65
- async isDisabled() {
66
- const mode = await this.getModeToggleGroup();
67
- return mode.isDisabled();
68
- }
69
- async hasError() {
70
- const host = await this.host();
71
- const attribute = await host.getAttribute('class');
72
- const error = attribute?.includes('ng-invalid');
73
- return error ?? false;
74
- }
75
- }
76
- GioFormCronHarness.hostSelector = 'gio-form-cron';
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tY3Jvbi5oYXJuZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvc3JjL2xpYi9naW8tZm9ybS1jcm9uL2dpby1mb3JtLWNyb24uaGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJbEUsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGdCQUFnQjtJQUF4RDs7UUFHWSx1QkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVqSCw2QkFBd0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUErRG5JLENBQUM7SUE5REM7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQXFDLEVBQUU7UUFDeEQsT0FBTyxJQUFJLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTdDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBRWhGLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBWTtRQUMvQixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxNQUFNLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2xFLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNoQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7UUFDNUUsTUFBTSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRO1FBQ25CLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ3BELE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBRWpFLE9BQU8sS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFhO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUI7UUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3BELE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVU7UUFDckIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVE7UUFDbkIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELE1BQU0sS0FBSyxHQUFHLFNBQVMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEQsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDO0lBQ3hCLENBQUM7O0FBbEVhLCtCQUFZLEdBQUcsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQmFzZUhhcm5lc3NGaWx0ZXJzLCBDb21wb25lbnRIYXJuZXNzLCBIYXJuZXNzUHJlZGljYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlR3JvdXBIYXJuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZS90ZXN0aW5nJztcbmltcG9ydCB7IE1hdElucHV0SGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0L3Rlc3RpbmcnO1xuXG5leHBvcnQgdHlwZSBHaW9Gb3JtQ3Jvbkhhcm5lc3NGaWx0ZXJzID0gQmFzZUhhcm5lc3NGaWx0ZXJzO1xuXG5leHBvcnQgY2xhc3MgR2lvRm9ybUNyb25IYXJuZXNzIGV4dGVuZHMgQ29tcG9uZW50SGFybmVzcyB7XG4gIHB1YmxpYyBzdGF0aWMgaG9zdFNlbGVjdG9yID0gJ2dpby1mb3JtLWNyb24nO1xuXG4gIHByb3RlY3RlZCBnZXRNb2RlVG9nZ2xlR3JvdXAgPSB0aGlzLmxvY2F0b3JGb3IoTWF0QnV0dG9uVG9nZ2xlR3JvdXBIYXJuZXNzLndpdGgoeyBzZWxlY3RvcjogJ1tmb3JtQ29udHJvbE5hbWU9XCJtb2RlXCJdJyB9KSk7XG5cbiAgcHJvdGVjdGVkIGdldEN1c3RvbUV4cHJlc3Npb25JbnB1dCA9IHRoaXMubG9jYXRvckZvcihNYXRJbnB1dEhhcm5lc3Mud2l0aCh7IHNlbGVjdG9yOiAnW2Zvcm1Db250cm9sTmFtZT1cImN1c3RvbUV4cHJlc3Npb25cIl0nIH0pKTtcbiAgLyoqXG4gICAqIEdldHMgYSBgSGFybmVzc1ByZWRpY2F0ZWAgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIHRoaXMgaGFybmVzcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgZmlsdGVyaW5nIHdoaWNoIGlucHV0IGluc3RhbmNlcyBhcmUgY29uc2lkZXJlZCBhIG1hdGNoLlxuICAgKiBAcmV0dXJuIGEgYEhhcm5lc3NQcmVkaWNhdGVgIGNvbmZpZ3VyZWQgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgd2l0aChvcHRpb25zOiBHaW9Gb3JtQ3Jvbkhhcm5lc3NGaWx0ZXJzID0ge30pOiBIYXJuZXNzUHJlZGljYXRlPEdpb0Zvcm1Dcm9uSGFybmVzcz4ge1xuICAgIHJldHVybiBuZXcgSGFybmVzc1ByZWRpY2F0ZShHaW9Gb3JtQ3Jvbkhhcm5lc3MsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE1vZGUoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgbW9kZSA9IGF3YWl0IHRoaXMuZ2V0TW9kZVRvZ2dsZUdyb3VwKCk7XG5cbiAgICBjb25zdCBzZWxlY3RlZCA9IGF3YWl0IChhd2FpdCBtb2RlLmdldFRvZ2dsZXMoeyBjaGVja2VkOiB0cnVlIH0pKVswXT8uZ2V0VGV4dCgpO1xuXG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRNb2RlKG1vZGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1vZGVUb2dnbGUgPSBhd2FpdCB0aGlzLmdldE1vZGVUb2dnbGVHcm91cCgpO1xuICAgIGF3YWl0IChhd2FpdCBtb2RlVG9nZ2xlLmdldFRvZ2dsZXMoeyB0ZXh0OiBtb2RlIH0pKVswXT8uY2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjbGVhcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjbGVhckJ1dHRvbiA9IGF3YWl0IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCdbYXJpYS1sYWJlbD1cIkNsZWFyXCJdJykoKTtcbiAgICBhd2FpdCBjbGVhckJ1dHRvbj8uY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZSgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBpZiAoKGF3YWl0IHRoaXMuZ2V0TW9kZSgpKSA9PT0gJ0N1c3RvbScpIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5nZXRDdXN0b21FeHByZXNzaW9uSW5wdXQoKTtcbiAgICAgIHJldHVybiBpbnB1dC5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCcucHJldmlld19fdmFsdWUnKSgpO1xuXG4gICAgcmV0dXJuIHZhbHVlPy50ZXh0KCkgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRDdXN0b21WYWx1ZSh2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKChhd2FpdCB0aGlzLmdldE1vZGUoKSkgIT09ICdDdXN0b20nKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldE1vZGUoJ0N1c3RvbScpO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5nZXRDdXN0b21FeHByZXNzaW9uSW5wdXQoKTtcbiAgICBhd2FpdCBpbnB1dC5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNEaXNhYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBtb2RlID0gYXdhaXQgdGhpcy5nZXRNb2RlVG9nZ2xlR3JvdXAoKTtcbiAgICByZXR1cm4gbW9kZS5pc0Rpc2FibGVkKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFzRXJyb3IoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgaG9zdCA9IGF3YWl0IHRoaXMuaG9zdCgpO1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGF3YWl0IGhvc3QuZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xuICAgIGNvbnN0IGVycm9yID0gYXR0cmlidXRlPy5pbmNsdWRlcygnbmctaW52YWxpZCcpO1xuXG4gICAgcmV0dXJuIGVycm9yID8/IGZhbHNlO1xuICB9XG59XG4iXX0=
@@ -1,29 +0,0 @@
1
- /*
2
- * Copyright (C) 2015 The Gravitee team (http://gravitee.io)
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { ChangeDetectionStrategy, Component } from '@angular/core';
17
- import * as i0 from "@angular/core";
18
- import * as i1 from "@angular/common";
19
- import * as i2 from "@angular/material/core";
20
- import * as i3 from "@angular/material/icon";
21
- export class GioFormFilePickerAddButtonComponent {
22
- }
23
- GioFormFilePickerAddButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GioFormFilePickerAddButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
24
- GioFormFilePickerAddButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GioFormFilePickerAddButtonComponent, selector: "gio-form-file-picker-add-button", ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<div class=\"add-button\" matRipple>\n <div #content><ng-content></ng-content></div>\n <span *ngIf=\"!content.children.length\">\n <mat-icon class=\"add-button__image\" svgIcon=\"gio:upload\"></mat-icon>\n <span class=\"add-button__content\">Drag your file</span>\n </span>\n</div>\n", styles: [".gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}:host{display:flex;flex-direction:column}.file-picker{display:flex;flex:1 1 auto;flex-flow:row wrap;padding:4px}.file-picker__add-button{border:2px dashed #606274;border-radius:6px;margin:4px;cursor:pointer}.file-picker__add-button:hover,.file-picker__add-button.drag-hover{border:2px dashed #876fec;background-color:#0000000a}.file-picker__add-button.drag-hover{pointer-events:none}.file-picker__add-button.complete{padding:6px;border:none}.file-picker__add-button.error{border:2px dashed #ec4899}.file-picker__preview,.file-picker__preview-empty{position:relative;display:flex;min-width:130px;min-height:130px;flex:0 0 130px;flex-flow:column nowrap;justify-content:space-between;padding:6px;border:2px solid #606274;border-radius:6px;margin:4px;inline-size:-moz-fit-content;inline-size:fit-content}.file-picker__preview.drag-hover,.file-picker__preview-empty.drag-hover{pointer-events:none}.file-picker__preview__image,.file-picker__preview-empty__image{width:100%;height:100%;background-position-x:center;background-position-y:center;background-repeat:no-repeat;background-size:contain}.file-picker__preview__file,.file-picker__preview-empty__file{display:flex;flex:1 1 auto;flex-direction:column;align-content:center;align-items:center;justify-content:center;text-align:center;font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.file-picker__preview__file code,.file-picker__preview-empty__file code{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.file-picker__preview.disabled,.file-picker__preview-empty.disabled{border:2px solid rgba(0,0,0,.12)}.file-picker__preview.error{border:2px solid #ec4899}.file-picker__preview__delete{position:absolute;z-index:200;top:0;right:0;width:24px;height:24px;border-radius:3px;background-color:#f7f8fdb3;color:#100c27;cursor:pointer}.file-picker__preview__delete:hover{color:#fe733f}.file-picker__preview-empty__default{text-align:center}:host{display:block;width:130px;height:130px}.add-button{height:100%;padding:6px;text-align:center}.add-button__image{width:100%;height:54px}.add-button__content{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GioFormFilePickerAddButtonComponent, decorators: [{
26
- type: Component,
27
- args: [{ selector: 'gio-form-file-picker-add-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<div class=\"add-button\" matRipple>\n <div #content><ng-content></ng-content></div>\n <span *ngIf=\"!content.children.length\">\n <mat-icon class=\"add-button__image\" svgIcon=\"gio:upload\"></mat-icon>\n <span class=\"add-button__content\">Drag your file</span>\n </span>\n</div>\n", styles: [".gio-top-bar-menu .gio-badge-accent{background-color:var(--gio-oem-palette--active, #e7e2fb);color:var(--gio-oem-palette--active-contrast, #100c27)}:host{display:flex;flex-direction:column}.file-picker{display:flex;flex:1 1 auto;flex-flow:row wrap;padding:4px}.file-picker__add-button{border:2px dashed #606274;border-radius:6px;margin:4px;cursor:pointer}.file-picker__add-button:hover,.file-picker__add-button.drag-hover{border:2px dashed #876fec;background-color:#0000000a}.file-picker__add-button.drag-hover{pointer-events:none}.file-picker__add-button.complete{padding:6px;border:none}.file-picker__add-button.error{border:2px dashed #ec4899}.file-picker__preview,.file-picker__preview-empty{position:relative;display:flex;min-width:130px;min-height:130px;flex:0 0 130px;flex-flow:column nowrap;justify-content:space-between;padding:6px;border:2px solid #606274;border-radius:6px;margin:4px;inline-size:-moz-fit-content;inline-size:fit-content}.file-picker__preview.drag-hover,.file-picker__preview-empty.drag-hover{pointer-events:none}.file-picker__preview__image,.file-picker__preview-empty__image{width:100%;height:100%;background-position-x:center;background-position-y:center;background-repeat:no-repeat;background-size:contain}.file-picker__preview__file,.file-picker__preview-empty__file{display:flex;flex:1 1 auto;flex-direction:column;align-content:center;align-items:center;justify-content:center;text-align:center;font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.file-picker__preview__file code,.file-picker__preview-empty__file code{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.file-picker__preview.disabled,.file-picker__preview-empty.disabled{border:2px solid rgba(0,0,0,.12)}.file-picker__preview.error{border:2px solid #ec4899}.file-picker__preview__delete{position:absolute;z-index:200;top:0;right:0;width:24px;height:24px;border-radius:3px;background-color:#f7f8fdb3;color:#100c27;cursor:pointer}.file-picker__preview__delete:hover{color:#fe733f}.file-picker__preview-empty__default{text-align:center}:host{display:block;width:130px;height:130px}.add-button{height:100%;padding:6px;text-align:center}.add-button__image{width:100%;height:54px}.add-button__content{font-size:12px;font-weight:400;line-height:16px;font-family:Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}\n"] }]
28
- }] });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tZmlsZS1waWNrZXItYWRkLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWZpbGUtcGlja2VyL2dpby1mb3JtLWZpbGUtcGlja2VyLWFkZC1idXR0b24vZ2lvLWZvcm0tZmlsZS1waWNrZXItYWRkLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWZpbGUtcGlja2VyL2dpby1mb3JtLWZpbGUtcGlja2VyLWFkZC1idXR0b24vZ2lvLWZvcm0tZmlsZS1waWNrZXItYWRkLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBUW5FLE1BQU0sT0FBTyxtQ0FBbUM7O2lJQUFuQyxtQ0FBbUM7cUhBQW5DLG1DQUFtQyx1RUN2QmhELHE4QkF3QkE7NEZERGEsbUNBQW1DO2tCQU4vQyxTQUFTOytCQUNFLGlDQUFpQyxtQkFHMUIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dpby1mb3JtLWZpbGUtcGlja2VyLWFkZC1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2lvLWZvcm0tZmlsZS1waWNrZXItYWRkLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dpby1mb3JtLWZpbGUtcGlja2VyLWFkZC1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEdpb0Zvcm1GaWxlUGlja2VyQWRkQnV0dG9uQ29tcG9uZW50IHt9XG4iLCI8IS0tXG5cbiAgICBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAgICBcbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgICBcbiAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAgIFxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4tLT5cbjxkaXYgY2xhc3M9XCJhZGQtYnV0dG9uXCIgbWF0UmlwcGxlPlxuICA8ZGl2ICNjb250ZW50PjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj5cbiAgPHNwYW4gKm5nSWY9XCIhY29udGVudC5jaGlsZHJlbi5sZW5ndGhcIj5cbiAgICA8bWF0LWljb24gY2xhc3M9XCJhZGQtYnV0dG9uX19pbWFnZVwiIHN2Z0ljb249XCJnaW86dXBsb2FkXCI+PC9tYXQtaWNvbj5cbiAgICA8c3BhbiBjbGFzcz1cImFkZC1idXR0b25fX2NvbnRlbnRcIj5EcmFnIHlvdXIgZmlsZTwvc3Bhbj5cbiAgPC9zcGFuPlxuPC9kaXY+XG4iXX0=
@@ -1,95 +0,0 @@
1
- /*
2
- * Copyright (C) 2015 The Gravitee team (http://gravitee.io)
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';
17
- export class GioFormFilePickerInputHarness extends ComponentHarness {
18
- constructor() {
19
- super(...arguments);
20
- this._mainDiv = this.locatorFor('.file-picker__add-button');
21
- this._hasErrorClass = this.locatorForOptional('[class="file-picker__add-button error"]');
22
- this._inputFile = this.locatorFor('input[type="file"]');
23
- this._getDisabledElement = this.locatorForOptional('.disabled');
24
- }
25
- static with(options) {
26
- return new HarnessPredicate(GioFormFilePickerInputHarness, options).addOption('formControlName', options.formControlName, (harness, text) => HarnessPredicate.stringMatches(harness.getFormControlName(), text));
27
- }
28
- /**
29
- * Hack force onload on Image Object
30
- * GioFormFilePickerComponent use a Image Object to check if the file is an image.
31
- * This method allow to force onload event on the Image Object.
32
- * @param excludeSrc call onerror instead of onload for this src
33
- */
34
- static forceImageOnload(excludeSrc = []) {
35
- Object.defineProperties(Image.prototype, {
36
- src: {
37
- get: function () {
38
- return this._src;
39
- },
40
- set: function (src) {
41
- this._src = src;
42
- },
43
- },
44
- onload: {
45
- get: function () {
46
- return this._onload;
47
- },
48
- set: function (fn) {
49
- this._onload = fn;
50
- excludeSrc.includes(this._src) ? this.onerror() : this.onload();
51
- },
52
- },
53
- });
54
- }
55
- async getFormControlName() {
56
- const filePickerInputHarness = await this.host();
57
- return filePickerInputHarness.getAttribute('formControlName');
58
- }
59
- async hasErrorClass() {
60
- return !!(await this._hasErrorClass());
61
- }
62
- async clickInside() {
63
- await (await this._mainDiv()).click();
64
- }
65
- async getInputFileAccept() {
66
- return await (await this._inputFile()).getAttribute('accept');
67
- }
68
- async getPreviews() {
69
- const previewImages = await this.locatorForAll('.file-picker__preview__image')();
70
- const previewFiles = await this.locatorForAll('.file-picker__preview__file')();
71
- return Promise.all([
72
- ...previewImages.map(previewImage => previewImage.getAttribute('style')),
73
- ...previewFiles.map(previewFile => previewFile.text()),
74
- ]);
75
- }
76
- async isAddButtonPresent() {
77
- return (await this.locatorForOptional('gio-form-file-picker-add-button')()) !== null;
78
- }
79
- async isDisabled() {
80
- return !!(await this._getDisabledElement());
81
- }
82
- async deleteFile(fileIndex = 0) {
83
- const deleteButtons = await this.locatorForAll('.file-picker__preview__delete')();
84
- return deleteButtons[fileIndex].click();
85
- }
86
- async dropFiles(files) {
87
- const filePickerDropZone = await this.locatorFor('.file-picker')();
88
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
89
- await filePickerDropZone.dispatchEvent('drop', { dataTransfer: { files } });
90
- // Wait event is dispatched
91
- await new Promise(resolve => setTimeout(resolve, 50));
92
- }
93
- }
94
- GioFormFilePickerInputHarness.hostSelector = 'gio-form-file-picker';
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tZmlsZS1waWNrZXIuY29tcG9uZW50Lmhhcm5lc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWZpbGUtcGlja2VyL2dpby1mb3JtLWZpbGUtcGlja2VyLmNvbXBvbmVudC5oYXJuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFzQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBTzlGLE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxnQkFBZ0I7SUFBbkU7O1FBd0NZLGFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDdkQsbUJBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUNwRixlQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ25ELHdCQUFtQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQW9EdkUsQ0FBQztJQTVGUSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQXdDO1FBQ3pELE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyw2QkFBNkIsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQzNFLGlCQUFpQixFQUNqQixPQUFPLENBQUMsZUFBZSxFQUN2QixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FDdEYsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUF1QixFQUFFO1FBQ3RELE1BQU0sQ0FBQyxn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QkFBa0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQVMsQ0FBQyxDQUFDO1FBRW5GLDJCQUEyQjtRQUMzQixNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7O0FBN0ZhLDBDQUFZLEdBQUcsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgQmFzZUhhcm5lc3NGaWx0ZXJzLCBDb21wb25lbnRIYXJuZXNzLCBIYXJuZXNzUHJlZGljYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuXG5pbnRlcmZhY2UgR2lvRm9ybUZpbGVQaWNrZXJIYXJuZXNzRmlsdGVycyBleHRlbmRzIEJhc2VIYXJuZXNzRmlsdGVycyB7XG4gIC8qKiBGaWx0ZXJzIGJhc2VkIG9uIHRoZSBmb3JtQ29udHJvbE5hbWUgICovXG4gIGZvcm1Db250cm9sTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEdpb0Zvcm1GaWxlUGlja2VySW5wdXRIYXJuZXNzIGV4dGVuZHMgQ29tcG9uZW50SGFybmVzcyB7XG4gIHB1YmxpYyBzdGF0aWMgaG9zdFNlbGVjdG9yID0gJ2dpby1mb3JtLWZpbGUtcGlja2VyJztcblxuICBwdWJsaWMgc3RhdGljIHdpdGgob3B0aW9uczogR2lvRm9ybUZpbGVQaWNrZXJIYXJuZXNzRmlsdGVycyk6IEhhcm5lc3NQcmVkaWNhdGU8R2lvRm9ybUZpbGVQaWNrZXJJbnB1dEhhcm5lc3M+IHtcbiAgICByZXR1cm4gbmV3IEhhcm5lc3NQcmVkaWNhdGUoR2lvRm9ybUZpbGVQaWNrZXJJbnB1dEhhcm5lc3MsIG9wdGlvbnMpLmFkZE9wdGlvbihcbiAgICAgICdmb3JtQ29udHJvbE5hbWUnLFxuICAgICAgb3B0aW9ucy5mb3JtQ29udHJvbE5hbWUsXG4gICAgICAoaGFybmVzcywgdGV4dCkgPT4gSGFybmVzc1ByZWRpY2F0ZS5zdHJpbmdNYXRjaGVzKGhhcm5lc3MuZ2V0Rm9ybUNvbnRyb2xOYW1lKCksIHRleHQpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSGFjayBmb3JjZSBvbmxvYWQgb24gSW1hZ2UgT2JqZWN0XG4gICAqIEdpb0Zvcm1GaWxlUGlja2VyQ29tcG9uZW50IHVzZSBhIEltYWdlIE9iamVjdCB0byBjaGVjayBpZiB0aGUgZmlsZSBpcyBhbiBpbWFnZS5cbiAgICogVGhpcyBtZXRob2QgYWxsb3cgdG8gZm9yY2Ugb25sb2FkIGV2ZW50IG9uIHRoZSBJbWFnZSBPYmplY3QuXG4gICAqIEBwYXJhbSBleGNsdWRlU3JjIGNhbGwgb25lcnJvciBpbnN0ZWFkIG9mIG9ubG9hZCBmb3IgdGhpcyBzcmNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZm9yY2VJbWFnZU9ubG9hZChleGNsdWRlU3JjOiBzdHJpbmdbXSA9IFtdKTogdm9pZCB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSW1hZ2UucHJvdG90eXBlLCB7XG4gICAgICBzcmM6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3NyYztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3JjKSB7XG4gICAgICAgICAgdGhpcy5fc3JjID0gc3JjO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG9ubG9hZDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fb25sb2FkO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgIHRoaXMuX29ubG9hZCA9IGZuO1xuXG4gICAgICAgICAgZXhjbHVkZVNyYy5pbmNsdWRlcyh0aGlzLl9zcmMpID8gdGhpcy5vbmVycm9yKCkgOiB0aGlzLm9ubG9hZCgpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbWFpbkRpdiA9IHRoaXMubG9jYXRvckZvcignLmZpbGUtcGlja2VyX19hZGQtYnV0dG9uJyk7XG4gIHByb3RlY3RlZCBfaGFzRXJyb3JDbGFzcyA9IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCdbY2xhc3M9XCJmaWxlLXBpY2tlcl9fYWRkLWJ1dHRvbiBlcnJvclwiXScpO1xuICBwcm90ZWN0ZWQgX2lucHV0RmlsZSA9IHRoaXMubG9jYXRvckZvcignaW5wdXRbdHlwZT1cImZpbGVcIl0nKTtcbiAgcHJvdGVjdGVkIF9nZXREaXNhYmxlZEVsZW1lbnQgPSB0aGlzLmxvY2F0b3JGb3JPcHRpb25hbCgnLmRpc2FibGVkJyk7XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRGb3JtQ29udHJvbE5hbWUoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgZmlsZVBpY2tlcklucHV0SGFybmVzcyA9IGF3YWl0IHRoaXMuaG9zdCgpO1xuICAgIHJldHVybiBmaWxlUGlja2VySW5wdXRIYXJuZXNzLmdldEF0dHJpYnV0ZSgnZm9ybUNvbnRyb2xOYW1lJyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFzRXJyb3JDbGFzcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5faGFzRXJyb3JDbGFzcygpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjbGlja0luc2lkZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy5fbWFpbkRpdigpKS5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldElucHV0RmlsZUFjY2VwdCgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gYXdhaXQgKGF3YWl0IHRoaXMuX2lucHV0RmlsZSgpKS5nZXRBdHRyaWJ1dGUoJ2FjY2VwdCcpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFByZXZpZXdzKCk6IFByb21pc2U8KHN0cmluZyB8IG51bGwpW10+IHtcbiAgICBjb25zdCBwcmV2aWV3SW1hZ2VzID0gYXdhaXQgdGhpcy5sb2NhdG9yRm9yQWxsKCcuZmlsZS1waWNrZXJfX3ByZXZpZXdfX2ltYWdlJykoKTtcbiAgICBjb25zdCBwcmV2aWV3RmlsZXMgPSBhd2FpdCB0aGlzLmxvY2F0b3JGb3JBbGwoJy5maWxlLXBpY2tlcl9fcHJldmlld19fZmlsZScpKCk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgLi4ucHJldmlld0ltYWdlcy5tYXAocHJldmlld0ltYWdlID0+IHByZXZpZXdJbWFnZS5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykpLFxuICAgICAgLi4ucHJldmlld0ZpbGVzLm1hcChwcmV2aWV3RmlsZSA9PiBwcmV2aWV3RmlsZS50ZXh0KCkpLFxuICAgIF0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzQWRkQnV0dG9uUHJlc2VudCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCdnaW8tZm9ybS1maWxlLXBpY2tlci1hZGQtYnV0dG9uJykoKSkgIT09IG51bGw7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNEaXNhYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5fZ2V0RGlzYWJsZWRFbGVtZW50KCkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUZpbGUoZmlsZUluZGV4ID0gMCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRlbGV0ZUJ1dHRvbnMgPSBhd2FpdCB0aGlzLmxvY2F0b3JGb3JBbGwoJy5maWxlLXBpY2tlcl9fcHJldmlld19fZGVsZXRlJykoKTtcblxuICAgIHJldHVybiBkZWxldGVCdXR0b25zW2ZpbGVJbmRleF0uY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkcm9wRmlsZXMoZmlsZXM6IEZpbGVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVQaWNrZXJEcm9wWm9uZSA9IGF3YWl0IHRoaXMubG9jYXRvckZvcignLmZpbGUtcGlja2VyJykoKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgYXdhaXQgZmlsZVBpY2tlckRyb3Bab25lLmRpc3BhdGNoRXZlbnQoJ2Ryb3AnLCB7IGRhdGFUcmFuc2ZlcjogeyBmaWxlcyB9IH0gYXMgYW55KTtcblxuICAgIC8vIFdhaXQgZXZlbnQgaXMgZGlzcGF0Y2hlZFxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCA1MCkpO1xuICB9XG59XG4iXX0=