@gravitee/ui-particles-angular 9.6.0-angular-16-c8d84dc → 9.6.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 (190) hide show
  1. package/esm2020/lib/gio-asciidoctor/gio-asciidoctor.component.mjs +104 -0
  2. package/{esm2022 → esm2020}/lib/gio-asciidoctor/gio-asciidoctor.module.mjs +5 -5
  3. package/{esm2022 → esm2020}/lib/gio-asciidoctor/gio-asciidoctor.service.mjs +4 -4
  4. package/{esm2022 → esm2020}/lib/gio-avatar/gio-avatar.component.mjs +4 -4
  5. package/{esm2022 → esm2020}/lib/gio-avatar/gio-avatar.module.mjs +5 -5
  6. package/{esm2022 → esm2020}/lib/gio-banner/gio-banner.component.mjs +22 -22
  7. package/{esm2022 → esm2020}/lib/gio-banner/gio-banner.module.mjs +17 -17
  8. package/{esm2022 → esm2020}/lib/gio-breadcrumb/gio-breadcrumb-item.directive.mjs +4 -4
  9. package/{esm2022 → esm2020}/lib/gio-breadcrumb/gio-breadcrumb.component.mjs +4 -4
  10. package/{esm2022 → esm2020}/lib/gio-breadcrumb/gio-breadcrumb.module.mjs +5 -5
  11. package/{esm2022 → esm2020}/lib/gio-card-empty-state/gio-card-empty-state.component.mjs +4 -4
  12. package/{esm2022 → esm2020}/lib/gio-card-empty-state/gio-card-empty-state.module.mjs +5 -5
  13. package/{esm2022 → esm2020}/lib/gio-clipboard/gio-clipboard-copy-icon.component.mjs +6 -6
  14. package/{esm2022 → esm2020}/lib/gio-clipboard/gio-clipboard-copy-wrapper.component.mjs +6 -6
  15. package/{esm2022 → esm2020}/lib/gio-clipboard/gio-clipboard.base.component.mjs +4 -4
  16. package/{esm2022 → esm2020}/lib/gio-clipboard/gio-clipboard.module.mjs +5 -5
  17. package/{esm2022 → esm2020}/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.component.mjs +4 -4
  18. package/{esm2022 → esm2020}/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.harness.mjs +2 -2
  19. package/{esm2022 → esm2020}/lib/gio-confirm-and-validate-dialog/gio-confirm-and-validate-dialog.module.mjs +5 -5
  20. package/{esm2022 → esm2020}/lib/gio-confirm-dialog/gio-confirm-dialog.component.mjs +4 -4
  21. package/{esm2022 → esm2020}/lib/gio-confirm-dialog/gio-confirm-dialog.harness.mjs +2 -2
  22. package/{esm2022 → esm2020}/lib/gio-confirm-dialog/gio-confirm-dialog.module.mjs +5 -5
  23. package/{esm2022 → esm2020}/lib/gio-form-cron/gio-form-cron-hint.component.mjs +4 -4
  24. package/{esm2022 → esm2020}/lib/gio-form-cron/gio-form-cron-label.component.mjs +4 -4
  25. package/esm2020/lib/gio-form-cron/gio-form-cron.component.mjs +208 -0
  26. package/esm2020/lib/gio-form-cron/gio-form-cron.harness.mjs +77 -0
  27. package/{esm2022 → esm2020}/lib/gio-form-cron/gio-form-cron.module.mjs +21 -21
  28. package/{esm2022 → esm2020}/lib/gio-form-file-picker/gio-form-file-picker-add-button/gio-form-file-picker-add-button.component.mjs +4 -4
  29. package/{esm2022 → esm2020}/lib/gio-form-file-picker/gio-form-file-picker-empty/gio-form-file-picker-empty.component.mjs +4 -4
  30. package/{esm2022 → esm2020}/lib/gio-form-file-picker/gio-form-file-picker-label/gio-form-file-picker-label.component.mjs +4 -4
  31. package/esm2020/lib/gio-form-file-picker/gio-form-file-picker.component.harness.mjs +95 -0
  32. package/{esm2022 → esm2020}/lib/gio-form-file-picker/gio-form-file-picker.component.mjs +4 -4
  33. package/{esm2022 → esm2020}/lib/gio-form-file-picker/gio-form-file-picker.module.mjs +11 -11
  34. package/{esm2022 → esm2020}/lib/gio-form-focus-first-invalid/gio-form-focus-first-invalid-ignore.directive.mjs +4 -4
  35. package/{esm2022 → esm2020}/lib/gio-form-focus-first-invalid/gio-form-focus-first-invalid.directive.mjs +10 -10
  36. package/{esm2022 → esm2020}/lib/gio-form-focus-first-invalid/gio-form-focus-first-invalid.module.mjs +5 -5
  37. package/{esm2022 → esm2020}/lib/gio-form-headers/gio-form-headers-label.component.mjs +4 -4
  38. package/esm2020/lib/gio-form-headers/gio-form-headers.component.mjs +273 -0
  39. package/esm2020/lib/gio-form-headers/gio-form-headers.harness.mjs +73 -0
  40. package/{esm2022 → esm2020}/lib/gio-form-headers/gio-form-headers.module.mjs +19 -19
  41. package/{esm2022 → esm2020}/lib/gio-form-json-schema/gio-form-json-schema.component.mjs +4 -4
  42. package/esm2020/lib/gio-form-json-schema/gio-form-json-schema.module.mjs +203 -0
  43. package/{esm2022 → esm2020}/lib/gio-form-json-schema/gio-formly-json-schema.service.mjs +4 -4
  44. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/array-type.component.mjs +6 -6
  45. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/code-editor-type.component.mjs +6 -6
  46. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/headers-type.component.mjs +6 -6
  47. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/multischema-type.component.mjs +6 -6
  48. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/null-type.component.mjs +4 -4
  49. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/object-type.component.mjs +7 -7
  50. package/{esm2022 → esm2020}/lib/gio-form-json-schema/type-component/toggle-type.component.mjs +6 -6
  51. package/{esm2022 → esm2020}/lib/gio-form-json-schema/wrappers/gio-banner-wrapper.component.mjs +4 -4
  52. package/{esm2022 → esm2020}/lib/gio-form-json-schema/wrappers/gio-password-eye.component.mjs +6 -6
  53. package/{esm2022 → esm2020}/lib/gio-form-slide-toggle/gio-form-label.directive.mjs +10 -10
  54. package/{esm2022 → esm2020}/lib/gio-form-slide-toggle/gio-form-slide-toggle.component.mjs +4 -4
  55. package/{esm2022 → esm2020}/lib/gio-form-slide-toggle/gio-form-slide-toggle.module.mjs +5 -5
  56. package/esm2020/lib/gio-form-tags-input/gio-form-tags-input.component.mjs +314 -0
  57. package/esm2020/lib/gio-form-tags-input/gio-form-tags-input.harness.mjs +74 -0
  58. package/{esm2022 → esm2020}/lib/gio-form-tags-input/gio-form-tags-input.module.mjs +21 -21
  59. package/{esm2022 → esm2020}/lib/gio-icons/gio-icons.module.mjs +5 -5
  60. package/{esm2022 → esm2020}/lib/gio-license/gio-license-dialog/gio-license-dialog.component.mjs +4 -4
  61. package/{esm2022 → esm2020}/lib/gio-license/gio-license-dialog/gio-license-dialog.module.mjs +5 -5
  62. package/{esm2022 → esm2020}/lib/gio-license/gio-license.directive.mjs +4 -4
  63. package/{esm2022 → esm2020}/lib/gio-license/gio-license.module.mjs +5 -5
  64. package/{esm2022 → esm2020}/lib/gio-license/gio-license.service.mjs +4 -4
  65. package/esm2020/lib/gio-license/gio-license.testing.module.mjs +107 -0
  66. package/{esm2022 → esm2020}/lib/gio-license-expiration-notification/gio-license-expiration-notification.component.mjs +5 -5
  67. package/esm2020/lib/gio-license-expiration-notification/gio-license-expiration-notification.harness.mjs +44 -0
  68. package/{esm2022 → esm2020}/lib/gio-license-expiration-notification/gio-license-expiration-notification.module.mjs +5 -5
  69. package/{esm2022 → esm2020}/lib/gio-loader/gio-loader.component.mjs +4 -4
  70. package/{esm2022 → esm2020}/lib/gio-loader/gio-loader.module.mjs +5 -5
  71. package/{esm2022 → esm2020}/lib/gio-mat-config/gio-mat-config.module.mjs +8 -8
  72. package/esm2020/lib/gio-monaco-editor/gio-monaco-editor-form-field.directive.mjs +149 -0
  73. package/{esm2022 → esm2020}/lib/gio-monaco-editor/gio-monaco-editor.component.mjs +4 -4
  74. package/esm2020/lib/gio-monaco-editor/gio-monaco-editor.harness.mjs +70 -0
  75. package/esm2020/lib/gio-monaco-editor/gio-monaco-editor.module.mjs +58 -0
  76. package/{esm2022 → esm2020}/lib/gio-monaco-editor/gio-monaco-editor.testing.component.mjs +4 -4
  77. package/{esm2022 → esm2020}/lib/gio-monaco-editor/services/gio-language-json.service.mjs +4 -4
  78. package/{esm2022 → esm2020}/lib/gio-monaco-editor/services/gio-monaco-editor.service.mjs +4 -4
  79. package/{esm2022 → esm2020}/lib/gio-pipe/gio.pipe.module.mjs +5 -5
  80. package/{esm2022 → esm2020}/lib/gio-pipe/safe.pipe.mjs +4 -4
  81. package/{esm2022 → esm2020}/lib/gio-prismjs/gio-prismjs.service.mjs +4 -4
  82. package/{esm2022 → esm2020}/lib/gio-radio-button/gio-radio-button-content.component.mjs +10 -10
  83. package/{esm2022 → esm2020}/lib/gio-radio-button/gio-radio-button.module.mjs +5 -5
  84. package/esm2020/lib/gio-save-bar/gio-save-bar.component.mjs +135 -0
  85. package/esm2020/lib/gio-save-bar/gio-save-bar.harness.mjs +54 -0
  86. package/{esm2022 → esm2020}/lib/gio-save-bar/gio-save-bar.module.mjs +5 -5
  87. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-footer/gio-menu-footer.component.mjs +4 -4
  88. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-header/gio-menu-header.component.mjs +4 -4
  89. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-item/gio-menu-item.component.mjs +5 -5
  90. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-license-expiration-notification/gio-menu-license-expiration-notification.component.mjs +4 -4
  91. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-list/gio-menu-list.component.mjs +4 -4
  92. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.component.mjs +4 -4
  93. package/esm2020/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.harness.mjs +41 -0
  94. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.service.mjs +4 -4
  95. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.component.mjs +4 -4
  96. package/esm2020/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.harness.mjs +41 -0
  97. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu.component.mjs +4 -4
  98. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu.module.mjs +19 -19
  99. package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/gio-menu.service.mjs +4 -4
  100. package/{esm2022 → esm2020}/lib/oem-theme/gio-submenu/gio-submenu-group/gio-submenu-group.component.mjs +4 -4
  101. package/{esm2022 → esm2020}/lib/oem-theme/gio-submenu/gio-submenu-item/gio-submenu-item.component.mjs +4 -4
  102. package/{esm2022 → esm2020}/lib/oem-theme/gio-submenu/gio-submenu.component.mjs +7 -7
  103. package/{esm2022 → esm2020}/lib/oem-theme/gio-submenu/gio-submenu.module.mjs +5 -5
  104. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar-content/gio-top-bar-content.component.mjs +5 -5
  105. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar-link/gio-top-bar-link.component.mjs +4 -4
  106. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar-link/gio-top-bar-link.module.mjs +5 -5
  107. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar-menu/gio-top-bar-menu.component.mjs +4 -4
  108. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar-menu/gio-top-bar-menu.module.mjs +5 -5
  109. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar.component.mjs +4 -4
  110. package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/gio-top-bar.module.mjs +5 -5
  111. package/esm2020/testing/harnesses/div.harness.mjs +45 -0
  112. package/esm2020/testing/harnesses/span.harness.mjs +42 -0
  113. package/fesm2015/gravitee-ui-particles-angular-testing.mjs +100 -0
  114. package/fesm2015/gravitee-ui-particles-angular-testing.mjs.map +1 -0
  115. package/fesm2015/gravitee-ui-particles-angular.mjs +7107 -0
  116. package/fesm2015/gravitee-ui-particles-angular.mjs.map +1 -0
  117. package/{fesm2022 → fesm2020}/gravitee-ui-particles-angular-testing.mjs +2 -2
  118. package/{fesm2022 → fesm2020}/gravitee-ui-particles-angular-testing.mjs.map +1 -1
  119. package/{fesm2022 → fesm2020}/gravitee-ui-particles-angular.mjs +629 -629
  120. package/{fesm2022 → fesm2020}/gravitee-ui-particles-angular.mjs.map +1 -1
  121. package/lib/gio-asciidoctor/gio-asciidoctor.component.d.ts +1 -1
  122. package/lib/gio-avatar/gio-avatar.component.d.ts +1 -1
  123. package/lib/gio-banner/gio-banner.component.d.ts +1 -1
  124. package/lib/gio-card-empty-state/gio-card-empty-state.component.d.ts +1 -1
  125. package/lib/gio-clipboard/gio-clipboard.base.component.d.ts +1 -1
  126. package/lib/gio-form-file-picker/gio-form-file-picker.component.d.ts +1 -1
  127. package/lib/gio-form-headers/gio-form-headers.component.d.ts +1 -1
  128. package/lib/gio-form-json-schema/gio-form-json-schema.component.d.ts +1 -1
  129. package/lib/gio-form-slide-toggle/gio-form-slide-toggle.component.d.ts +1 -1
  130. package/lib/gio-form-tags-input/gio-form-tags-input.component.d.ts +1 -1
  131. package/lib/gio-license/gio-license.directive.d.ts +1 -1
  132. package/lib/gio-license-expiration-notification/gio-license-expiration-notification.component.d.ts +1 -1
  133. package/lib/gio-monaco-editor/gio-monaco-editor-form-field.directive.d.ts +1 -1
  134. package/lib/gio-monaco-editor/gio-monaco-editor.component.d.ts +1 -1
  135. package/lib/gio-radio-button/gio-radio-button-content.component.d.ts +1 -1
  136. package/lib/gio-save-bar/gio-save-bar.component.d.ts +1 -1
  137. package/lib/oem-theme/gio-menu/gio-menu-item/gio-menu-item.component.d.ts +1 -1
  138. package/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.component.d.ts +1 -1
  139. package/lib/oem-theme/gio-menu/gio-menu.component.d.ts +1 -1
  140. package/lib/oem-theme/gio-submenu/gio-submenu-group/gio-submenu-group.component.d.ts +1 -1
  141. package/lib/oem-theme/gio-submenu/gio-submenu-item/gio-submenu-item.component.d.ts +1 -1
  142. package/lib/oem-theme/gio-submenu/gio-submenu.component.d.ts +1 -1
  143. package/lib/oem-theme/gio-top-bar/gio-top-bar-content/gio-top-bar-content.component.d.ts +1 -1
  144. package/lib/oem-theme/gio-top-bar/gio-top-bar-link/gio-top-bar-link.component.d.ts +1 -1
  145. package/lib/oem-theme/gio-top-bar/gio-top-bar.component.d.ts +1 -1
  146. package/package.json +23 -15
  147. package/esm2022/lib/gio-asciidoctor/gio-asciidoctor.component.mjs +0 -104
  148. package/esm2022/lib/gio-form-cron/gio-form-cron.component.mjs +0 -208
  149. package/esm2022/lib/gio-form-cron/gio-form-cron.harness.mjs +0 -77
  150. package/esm2022/lib/gio-form-file-picker/gio-form-file-picker.component.harness.mjs +0 -95
  151. package/esm2022/lib/gio-form-headers/gio-form-headers.component.mjs +0 -273
  152. package/esm2022/lib/gio-form-headers/gio-form-headers.harness.mjs +0 -73
  153. package/esm2022/lib/gio-form-json-schema/gio-form-json-schema.module.mjs +0 -203
  154. package/esm2022/lib/gio-form-tags-input/gio-form-tags-input.component.mjs +0 -314
  155. package/esm2022/lib/gio-form-tags-input/gio-form-tags-input.harness.mjs +0 -74
  156. package/esm2022/lib/gio-license/gio-license.testing.module.mjs +0 -107
  157. package/esm2022/lib/gio-license-expiration-notification/gio-license-expiration-notification.harness.mjs +0 -44
  158. package/esm2022/lib/gio-monaco-editor/gio-monaco-editor-form-field.directive.mjs +0 -149
  159. package/esm2022/lib/gio-monaco-editor/gio-monaco-editor.harness.mjs +0 -70
  160. package/esm2022/lib/gio-monaco-editor/gio-monaco-editor.module.mjs +0 -58
  161. package/esm2022/lib/gio-save-bar/gio-save-bar.component.mjs +0 -135
  162. package/esm2022/lib/gio-save-bar/gio-save-bar.harness.mjs +0 -54
  163. package/esm2022/lib/oem-theme/gio-menu/gio-menu-search/gio-menu-search.harness.mjs +0 -41
  164. package/esm2022/lib/oem-theme/gio-menu/gio-menu-selector/gio-menu-selector.harness.mjs +0 -41
  165. package/esm2022/testing/harnesses/div.harness.mjs +0 -45
  166. package/esm2022/testing/harnesses/span.harness.mjs +0 -42
  167. /package/{esm2022 → esm2020}/gravitee-ui-particles-angular.mjs +0 -0
  168. /package/{esm2022 → esm2020}/lib/gio-avatar/index.mjs +0 -0
  169. /package/{esm2022 → esm2020}/lib/gio-breadcrumb/index.mjs +0 -0
  170. /package/{esm2022 → esm2020}/lib/gio-card-empty-state/index.mjs +0 -0
  171. /package/{esm2022 → esm2020}/lib/gio-dialog/gio-dialog.constant.mjs +0 -0
  172. /package/{esm2022 → esm2020}/lib/gio-form-cron/gio-form-cron.adapter.mjs +0 -0
  173. /package/{esm2022 → esm2020}/lib/gio-form-file-picker/gio-form-file-picker.model.mjs +0 -0
  174. /package/{esm2022 → esm2020}/lib/gio-form-file-picker/index.mjs +0 -0
  175. /package/{esm2022 → esm2020}/lib/gio-form-json-schema/model/GioJsonSchema.mjs +0 -0
  176. /package/{esm2022 → esm2020}/lib/gio-form-json-schema/util/validation-message.util.mjs +0 -0
  177. /package/{esm2022 → esm2020}/lib/gio-form-json-schema/wrappers/gio-banner-extension.mjs +0 -0
  178. /package/{esm2022 → esm2020}/lib/gio-mat-config/index.mjs +0 -0
  179. /package/{esm2022 → esm2020}/lib/gio-monaco-editor/models/GioMonacoEditorConfig.mjs +0 -0
  180. /package/{esm2022 → esm2020}/lib/gio-monaco-editor/models/MonacoEditorTheme.mjs +0 -0
  181. /package/{esm2022 → esm2020}/lib/oem-theme/gio-menu/index.mjs +0 -0
  182. /package/{esm2022 → esm2020}/lib/oem-theme/gio-submenu/index.mjs +0 -0
  183. /package/{esm2022 → esm2020}/lib/oem-theme/gio-top-bar/index.mjs +0 -0
  184. /package/{esm2022 → esm2020}/lib/oem-theme/oem-theme.service.mjs +0 -0
  185. /package/{esm2022 → esm2020}/lib/oem-theme/public-api.mjs +0 -0
  186. /package/{esm2022 → esm2020}/lib/public-api.mjs +0 -0
  187. /package/{esm2022 → esm2020}/public-api.mjs +0 -0
  188. /package/{esm2022 → esm2020}/testing/gravitee-ui-particles-angular-testing.mjs +0 -0
  189. /package/{esm2022 → esm2020}/testing/harnesses/index.mjs +0 -0
  190. /package/{esm2022 → esm2020}/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
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GioFormCronComponent, deps: [{ token: i0.ElementRef }, { token: i1.FocusMonitor }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
174
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GioFormCronComponent, selector: "gio-form-cron", host: { properties: { "class.disabled": "this.isDisabled", "class.smallDisplay": "this.smallDisplay" } }, providers: [
175
- {
176
- provide: NG_VALUE_ACCESSOR,
177
- useExisting: forwardRef(() => GioFormCronComponent),
178
- multi: true,
179
- },
180
- {
181
- provide: NG_VALIDATORS,
182
- useExisting: forwardRef(() => GioFormCronComponent),
183
- multi: true,
184
- },
185
- ], 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", "panelWidth", "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"] }] }); }
186
- }
187
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", 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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QkFDbkQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQ2pESCwya1NBeU1BOzs0RkR0SmEsb0JBQW9CO2tCQWpCaEMsU0FBUzsrQkFDRSxlQUFlLGFBR2Q7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUM7NEJBQ25ELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUpBZ0JNLFVBQVU7c0JBRGhCLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQUd0QixZQUFZO3NCQURsQixXQUFXO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcbiAgVW50eXBlZEZvcm1Hcm91cCxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNFbXB0eSwgcmFuZ2UgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ3JvbkRpc3BsYXksIGdldERlZmF1bHRDcm9uRGlzcGxheSwgcGFyc2VDcm9uRXhwcmVzc2lvbiwgdG9Dcm9uRGVzY3JpcHRpb24sIHRvQ3JvbkV4cHJlc3Npb24gfSBmcm9tICcuL2dpby1mb3JtLWNyb24uYWRhcHRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dpby1mb3JtLWNyb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2lvLWZvcm0tY3Jvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dpby1mb3JtLWNyb24uY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBHaW9Gb3JtQ3JvbkNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBHaW9Gb3JtQ3JvbkNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHaW9Gb3JtQ3JvbkNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSwgVmFsaWRhdG9yIHtcbiAgcHVibGljIF9vbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkID0gKCkgPT4gKHt9KTtcblxuICBwdWJsaWMgX29uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+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
- static { this.hostSelector = 'gio-form-cron'; }
26
- /**
27
- * Gets a `HarnessPredicate` that can be used to search for this harness.
28
- *
29
- * @param options Options for filtering which input instances are considered a match.
30
- * @return a `HarnessPredicate` configured with the given options.
31
- */
32
- static with(options = {}) {
33
- return new HarnessPredicate(GioFormCronHarness, options);
34
- }
35
- async getMode() {
36
- const mode = await this.getModeToggleGroup();
37
- const selected = await (await mode.getToggles({ checked: true }))[0]?.getText();
38
- if (!selected) {
39
- return null;
40
- }
41
- return selected;
42
- }
43
- async setMode(mode) {
44
- const modeToggle = await this.getModeToggleGroup();
45
- await (await modeToggle.getToggles({ text: mode }))[0]?.check();
46
- }
47
- async clear() {
48
- const clearButton = await this.locatorForOptional('[aria-label="Clear"]')();
49
- await clearButton?.click();
50
- }
51
- async getValue() {
52
- if ((await this.getMode()) === 'Custom') {
53
- const input = await this.getCustomExpressionInput();
54
- return input.getValue();
55
- }
56
- const value = await this.locatorForOptional('.preview__value')();
57
- return value?.text() ?? null;
58
- }
59
- async setCustomValue(value) {
60
- if ((await this.getMode()) !== 'Custom') {
61
- await this.setMode('Custom');
62
- }
63
- const input = await this.getCustomExpressionInput();
64
- await input.setValue(value);
65
- }
66
- async isDisabled() {
67
- const mode = await this.getModeToggleGroup();
68
- return mode.isDisabled();
69
- }
70
- async hasError() {
71
- const host = await this.host();
72
- const attribute = await host.getAttribute('class');
73
- const error = attribute?.includes('ng-invalid');
74
- return error ?? false;
75
- }
76
- }
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tY3Jvbi5oYXJuZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvc3JjL2xpYi9naW8tZm9ybS1jcm9uL2dpby1mb3JtLWNyb24uaGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJbEUsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGdCQUFnQjtJQUF4RDs7UUFHWSx1QkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVqSCw2QkFBd0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUErRG5JLENBQUM7YUFuRWUsaUJBQVksR0FBRyxlQUFlLENBQUM7SUFLN0M7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQXFDLEVBQUU7UUFDeEQsT0FBTyxJQUFJLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTdDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBRWhGLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBWTtRQUMvQixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxNQUFNLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2xFLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNoQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7UUFDNUUsTUFBTSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRO1FBQ25CLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ3BELE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBRWpFLE9BQU8sS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFhO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUI7UUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3BELE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVU7UUFDckIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVE7UUFDbkIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELE1BQU0sS0FBSyxHQUFHLFNBQVMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEQsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDO0lBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBCYXNlSGFybmVzc0ZpbHRlcnMsIENvbXBvbmVudEhhcm5lc3MsIEhhcm5lc3NQcmVkaWNhdGUgfSBmcm9tICdAYW5ndWxhci9jZGsvdGVzdGluZyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVHcm91cEhhcm5lc3MgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlL3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0SW5wdXRIYXJuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQvdGVzdGluZyc7XG5cbmV4cG9ydCB0eXBlIEdpb0Zvcm1Dcm9uSGFybmVzc0ZpbHRlcnMgPSBCYXNlSGFybmVzc0ZpbHRlcnM7XG5cbmV4cG9ydCBjbGFzcyBHaW9Gb3JtQ3Jvbkhhcm5lc3MgZXh0ZW5kcyBDb21wb25lbnRIYXJuZXNzIHtcbiAgcHVibGljIHN0YXRpYyBob3N0U2VsZWN0b3IgPSAnZ2lvLWZvcm0tY3Jvbic7XG5cbiAgcHJvdGVjdGVkIGdldE1vZGVUb2dnbGVHcm91cCA9IHRoaXMubG9jYXRvckZvcihNYXRCdXR0b25Ub2dnbGVHcm91cEhhcm5lc3Mud2l0aCh7IHNlbGVjdG9yOiAnW2Zvcm1Db250cm9sTmFtZT1cIm1vZGVcIl0nIH0pKTtcblxuICBwcm90ZWN0ZWQgZ2V0Q3VzdG9tRXhwcmVzc2lvbklucHV0ID0gdGhpcy5sb2NhdG9yRm9yKE1hdElucHV0SGFybmVzcy53aXRoKHsgc2VsZWN0b3I6ICdbZm9ybUNvbnRyb2xOYW1lPVwiY3VzdG9tRXhwcmVzc2lvblwiXScgfSkpO1xuICAvKipcbiAgICogR2V0cyBhIGBIYXJuZXNzUHJlZGljYXRlYCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlYXJjaCBmb3IgdGhpcyBoYXJuZXNzLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBmaWx0ZXJpbmcgd2hpY2ggaW5wdXQgaW5zdGFuY2VzIGFyZSBjb25zaWRlcmVkIGEgbWF0Y2guXG4gICAqIEByZXR1cm4gYSBgSGFybmVzc1ByZWRpY2F0ZWAgY29uZmlndXJlZCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB3aXRoKG9wdGlvbnM6IEdpb0Zvcm1Dcm9uSGFybmVzc0ZpbHRlcnMgPSB7fSk6IEhhcm5lc3NQcmVkaWNhdGU8R2lvRm9ybUNyb25IYXJuZXNzPiB7XG4gICAgcmV0dXJuIG5ldyBIYXJuZXNzUHJlZGljYXRlKEdpb0Zvcm1Dcm9uSGFybmVzcywgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TW9kZSgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCBtb2RlID0gYXdhaXQgdGhpcy5nZXRNb2RlVG9nZ2xlR3JvdXAoKTtcblxuICAgIGNvbnN0IHNlbGVjdGVkID0gYXdhaXQgKGF3YWl0IG1vZGUuZ2V0VG9nZ2xlcyh7IGNoZWNrZWQ6IHRydWUgfSkpWzBdPy5nZXRUZXh0KCk7XG5cbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldE1vZGUobW9kZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbW9kZVRvZ2dsZSA9IGF3YWl0IHRoaXMuZ2V0TW9kZVRvZ2dsZUdyb3VwKCk7XG4gICAgYXdhaXQgKGF3YWl0IG1vZGVUb2dnbGUuZ2V0VG9nZ2xlcyh7IHRleHQ6IG1vZGUgfSkpWzBdPy5jaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNsZWFyQnV0dG9uID0gYXdhaXQgdGhpcy5sb2NhdG9yRm9yT3B0aW9uYWwoJ1thcmlhLWxhYmVsPVwiQ2xlYXJcIl0nKSgpO1xuICAgIGF3YWl0IGNsZWFyQnV0dG9uPy5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFZhbHVlKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGlmICgoYXdhaXQgdGhpcy5nZXRNb2RlKCkpID09PSAnQ3VzdG9tJykge1xuICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLmdldEN1c3RvbUV4cHJlc3Npb25JbnB1dCgpO1xuICAgICAgcmV0dXJuIGlucHV0LmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5sb2NhdG9yRm9yT3B0aW9uYWwoJy5wcmV2aWV3X192YWx1ZScpKCk7XG5cbiAgICByZXR1cm4gdmFsdWU/LnRleHQoKSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldEN1c3RvbVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoKGF3YWl0IHRoaXMuZ2V0TW9kZSgpKSAhPT0gJ0N1c3RvbScpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0TW9kZSgnQ3VzdG9tJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLmdldEN1c3RvbUV4cHJlc3Npb25JbnB1dCgpO1xuICAgIGF3YWl0IGlucHV0LnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc0Rpc2FibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IG1vZGUgPSBhd2FpdCB0aGlzLmdldE1vZGVUb2dnbGVHcm91cCgpO1xuICAgIHJldHVybiBtb2RlLmlzRGlzYWJsZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYXNFcnJvcigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBob3N0ID0gYXdhaXQgdGhpcy5ob3N0KCk7XG4gICAgY29uc3QgYXR0cmlidXRlID0gYXdhaXQgaG9zdC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgY29uc3QgZXJyb3IgPSBhdHRyaWJ1dGU/LmluY2x1ZGVzKCduZy1pbnZhbGlkJyk7XG5cbiAgICByZXR1cm4gZXJyb3IgPz8gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
@@ -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 { this.hostSelector = 'gio-form-file-picker'; }
26
- static with(options) {
27
- return new HarnessPredicate(GioFormFilePickerInputHarness, options).addOption('formControlName', options.formControlName, (harness, text) => HarnessPredicate.stringMatches(harness.getFormControlName(), text));
28
- }
29
- /**
30
- * Hack force onload on Image Object
31
- * GioFormFilePickerComponent use a Image Object to check if the file is an image.
32
- * This method allow to force onload event on the Image Object.
33
- * @param excludeSrc call onerror instead of onload for this src
34
- */
35
- static forceImageOnload(excludeSrc = []) {
36
- Object.defineProperties(Image.prototype, {
37
- src: {
38
- get: function () {
39
- return this._src;
40
- },
41
- set: function (src) {
42
- this._src = src;
43
- },
44
- },
45
- onload: {
46
- get: function () {
47
- return this._onload;
48
- },
49
- set: function (fn) {
50
- this._onload = fn;
51
- excludeSrc.includes(this._src) ? this.onerror() : this.onload();
52
- },
53
- },
54
- });
55
- }
56
- async getFormControlName() {
57
- const filePickerInputHarness = await this.host();
58
- return filePickerInputHarness.getAttribute('formControlName');
59
- }
60
- async hasErrorClass() {
61
- return !!(await this._hasErrorClass());
62
- }
63
- async clickInside() {
64
- await (await this._mainDiv()).click();
65
- }
66
- async getInputFileAccept() {
67
- return await (await this._inputFile()).getAttribute('accept');
68
- }
69
- async getPreviews() {
70
- const previewImages = await this.locatorForAll('.file-picker__preview__image')();
71
- const previewFiles = await this.locatorForAll('.file-picker__preview__file')();
72
- return Promise.all([
73
- ...previewImages.map(previewImage => previewImage.getAttribute('style')),
74
- ...previewFiles.map(previewFile => previewFile.text()),
75
- ]);
76
- }
77
- async isAddButtonPresent() {
78
- return (await this.locatorForOptional('gio-form-file-picker-add-button')()) !== null;
79
- }
80
- async isDisabled() {
81
- return !!(await this._getDisabledElement());
82
- }
83
- async deleteFile(fileIndex = 0) {
84
- const deleteButtons = await this.locatorForAll('.file-picker__preview__delete')();
85
- return deleteButtons[fileIndex].click();
86
- }
87
- async dropFiles(files) {
88
- const filePickerDropZone = await this.locatorFor('.file-picker')();
89
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
90
- await filePickerDropZone.dispatchEvent('drop', { dataTransfer: { files } });
91
- // Wait event is dispatched
92
- await new Promise(resolve => setTimeout(resolve, 50));
93
- }
94
- }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tZmlsZS1waWNrZXIuY29tcG9uZW50Lmhhcm5lc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLWZpbGUtcGlja2VyL2dpby1mb3JtLWZpbGUtcGlja2VyLmNvbXBvbmVudC5oYXJuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFzQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBTzlGLE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxnQkFBZ0I7SUFBbkU7O1FBd0NZLGFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDdkQsbUJBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUNwRixlQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ25ELHdCQUFtQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQW9EdkUsQ0FBQzthQTlGZSxpQkFBWSxHQUFHLHNCQUFzQixDQUFDO0lBRTdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBd0M7UUFDekQsT0FBTyxJQUFJLGdCQUFnQixDQUFDLDZCQUE2QixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FDM0UsaUJBQWlCLEVBQ2pCLE9BQU8sQ0FBQyxlQUFlLEVBQ3ZCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUN0RixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUFD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QUFDO1FBRW5FLDhEQUE4RDtRQUM5RCxNQUFNLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBUyxDQUFDLENBQUM7UUFFbkYsMkJBQTJCO1FBQzNCLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBCYXNlSGFybmVzc0ZpbHRlcnMsIENvbXBvbmVudEhhcm5lc3MsIEhhcm5lc3NQcmVkaWNhdGUgfSBmcm9tICdAYW5ndWxhci9jZGsvdGVzdGluZyc7XG5cbmludGVyZmFjZSBHaW9Gb3JtRmlsZVBpY2tlckhhcm5lc3NGaWx0ZXJzIGV4dGVuZHMgQmFzZUhhcm5lc3NGaWx0ZXJzIHtcbiAgLyoqIEZpbHRlcnMgYmFzZWQgb24gdGhlIGZvcm1Db250cm9sTmFtZSAgKi9cbiAgZm9ybUNvbnRyb2xOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgR2lvRm9ybUZpbGVQaWNrZXJJbnB1dEhhcm5lc3MgZXh0ZW5kcyBDb21wb25lbnRIYXJuZXNzIHtcbiAgcHVibGljIHN0YXRpYyBob3N0U2VsZWN0b3IgPSAnZ2lvLWZvcm0tZmlsZS1waWNrZXInO1xuXG4gIHB1YmxpYyBzdGF0aWMgd2l0aChvcHRpb25zOiBHaW9Gb3JtRmlsZVBpY2tlckhhcm5lc3NGaWx0ZXJzKTogSGFybmVzc1ByZWRpY2F0ZTxHaW9Gb3JtRmlsZVBpY2tlcklucHV0SGFybmVzcz4ge1xuICAgIHJldHVybiBuZXcgSGFybmVzc1ByZWRpY2F0ZShHaW9Gb3JtRmlsZVBpY2tlcklucHV0SGFybmVzcywgb3B0aW9ucykuYWRkT3B0aW9uKFxuICAgICAgJ2Zvcm1Db250cm9sTmFtZScsXG4gICAgICBvcHRpb25zLmZvcm1Db250cm9sTmFtZSxcbiAgICAgIChoYXJuZXNzLCB0ZXh0KSA9PiBIYXJuZXNzUHJlZGljYXRlLnN0cmluZ01hdGNoZXMoaGFybmVzcy5nZXRGb3JtQ29udHJvbE5hbWUoKSwgdGV4dCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYWNrIGZvcmNlIG9ubG9hZCBvbiBJbWFnZSBPYmplY3RcbiAgICogR2lvRm9ybUZpbGVQaWNrZXJDb21wb25lbnQgdXNlIGEgSW1hZ2UgT2JqZWN0IHRvIGNoZWNrIGlmIHRoZSBmaWxlIGlzIGFuIGltYWdlLlxuICAgKiBUaGlzIG1ldGhvZCBhbGxvdyB0byBmb3JjZSBvbmxvYWQgZXZlbnQgb24gdGhlIEltYWdlIE9iamVjdC5cbiAgICogQHBhcmFtIGV4Y2x1ZGVTcmMgY2FsbCBvbmVycm9yIGluc3RlYWQgb2Ygb25sb2FkIGZvciB0aGlzIHNyY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmb3JjZUltYWdlT25sb2FkKGV4Y2x1ZGVTcmM6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhJbWFnZS5wcm90b3R5cGUsIHtcbiAgICAgIHNyYzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc3JjO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcmMpIHtcbiAgICAgICAgICB0aGlzLl9zcmMgPSBzcmM7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgb25sb2FkOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9vbmxvYWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgdGhpcy5fb25sb2FkID0gZm47XG5cbiAgICAgICAgICBleGNsdWRlU3JjLmluY2x1ZGVzKHRoaXMuX3NyYykgPyB0aGlzLm9uZXJyb3IoKSA6IHRoaXMub25sb2FkKCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9tYWluRGl2ID0gdGhpcy5sb2NhdG9yRm9yKCcuZmlsZS1waWNrZXJfX2FkZC1idXR0b24nKTtcbiAgcHJvdGVjdGVkIF9oYXNFcnJvckNsYXNzID0gdGhpcy5sb2NhdG9yRm9yT3B0aW9uYWwoJ1tjbGFzcz1cImZpbGUtcGlja2VyX19hZGQtYnV0dG9uIGVycm9yXCJdJyk7XG4gIHByb3RlY3RlZCBfaW5wdXRGaWxlID0gdGhpcy5sb2NhdG9yRm9yKCdpbnB1dFt0eXBlPVwiZmlsZVwiXScpO1xuICBwcm90ZWN0ZWQgX2dldERpc2FibGVkRWxlbWVudCA9IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKCcuZGlzYWJsZWQnKTtcblxuICBwcml2YXRlIGFzeW5jIGdldEZvcm1Db250cm9sTmFtZSgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCBmaWxlUGlja2VySW5wdXRIYXJuZXNzID0gYXdhaXQgdGhpcy5ob3N0KCk7XG4gICAgcmV0dXJuIGZpbGVQaWNrZXJJbnB1dEhhcm5lc3MuZ2V0QXR0cmlidXRlKCdmb3JtQ29udHJvbE5hbWUnKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYXNFcnJvckNsYXNzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAhIShhd2FpdCB0aGlzLl9oYXNFcnJvckNsYXNzKCkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNsaWNrSW5zaWRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IChhd2FpdCB0aGlzLl9tYWluRGl2KCkpLmNsaWNrKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SW5wdXRGaWxlQWNjZXB0KCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy5faW5wdXRGaWxlKCkpLmdldEF0dHJpYnV0ZSgnYWNjZXB0Jyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHJldmlld3MoKTogUHJvbWlzZTwoc3RyaW5nIHwgbnVsbClbXT4ge1xuICAgIGNvbnN0IHByZXZpZXdJbWFnZXMgPSBhd2FpdCB0aGlzLmxvY2F0b3JGb3JBbGwoJy5maWxlLXBpY2tlcl9fcHJldmlld19faW1hZ2UnKSgpO1xuICAgIGNvbnN0IHByZXZpZXdGaWxlcyA9IGF3YWl0IHRoaXMubG9jYXRvckZvckFsbCgnLmZpbGUtcGlja2VyX19wcmV2aWV3X19maWxlJykoKTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAuLi5wcmV2aWV3SW1hZ2VzLm1hcChwcmV2aWV3SW1hZ2UgPT4gcHJldmlld0ltYWdlLmdldEF0dHJpYnV0ZSgnc3R5bGUnKSksXG4gICAgICAuLi5wcmV2aWV3RmlsZXMubWFwKHByZXZpZXdGaWxlID0+IHByZXZpZXdGaWxlLnRleHQoKSksXG4gICAgXSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNBZGRCdXR0b25QcmVzZW50KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5sb2NhdG9yRm9yT3B0aW9uYWwoJ2dpby1mb3JtLWZpbGUtcGlja2VyLWFkZC1idXR0b24nKSgpKSAhPT0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc0Rpc2FibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAhIShhd2FpdCB0aGlzLl9nZXREaXNhYmxlZEVsZW1lbnQoKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlRmlsZShmaWxlSW5kZXggPSAwKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGVsZXRlQnV0dG9ucyA9IGF3YWl0IHRoaXMubG9jYXRvckZvckFsbCgnLmZpbGUtcGlja2VyX19wcmV2aWV3X19kZWxldGUnKSgpO1xuXG4gICAgcmV0dXJuIGRlbGV0ZUJ1dHRvbnNbZmlsZUluZGV4XS5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRyb3BGaWxlcyhmaWxlczogRmlsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlsZVBpY2tlckRyb3Bab25lID0gYXdhaXQgdGhpcy5sb2NhdG9yRm9yKCcuZmlsZS1waWNrZXInKSgpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBhd2FpdCBmaWxlUGlja2VyRHJvcFpvbmUuZGlzcGF0Y2hFdmVudCgnZHJvcCcsIHsgZGF0YVRyYW5zZmVyOiB7IGZpbGVzIH0gfSBhcyBhbnkpO1xuXG4gICAgLy8gV2FpdCBldmVudCBpcyBkaXNwYXRjaGVkXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwKSk7XG4gIH1cbn1cbiJdfQ==