@ionic/angular 8.0.0-dev.11709632212.139b6f63 → 8.0.0-dev.11711408410.14d71406

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 (235) hide show
  1. package/common/directives/control-value-accessors/value-accessor.d.ts +1 -1
  2. package/common/directives/navigation/back-button.d.ts +1 -4
  3. package/common/directives/navigation/nav.d.ts +10 -2
  4. package/common/directives/navigation/router-link-delegate.d.ts +2 -2
  5. package/common/directives/navigation/router-outlet.d.ts +6 -6
  6. package/common/directives/navigation/tabs.d.ts +5 -5
  7. package/common/overlays/modal.d.ts +1 -1
  8. package/common/overlays/popover.d.ts +1 -1
  9. package/common/providers/dom-controller.d.ts +1 -1
  10. package/css/core.ionic.css +13 -0
  11. package/css/core.ionic.css.map +1 -0
  12. package/css/palettes/dark.always.css.map +1 -0
  13. package/css/{themes → palettes}/dark.class.css +4 -4
  14. package/css/palettes/dark.class.css.map +1 -0
  15. package/css/palettes/dark.system.css.map +1 -0
  16. package/css/palettes/high-contrast-dark.always.css.map +1 -0
  17. package/css/{themes → palettes}/high-contrast-dark.class.css +10 -10
  18. package/css/palettes/high-contrast-dark.class.css.map +1 -0
  19. package/css/palettes/high-contrast-dark.system.css.map +1 -0
  20. package/css/palettes/high-contrast.always.css.map +1 -0
  21. package/css/{themes → palettes}/high-contrast.class.css +31 -31
  22. package/css/palettes/high-contrast.class.css.map +1 -0
  23. package/css/palettes/high-contrast.system.css.map +1 -0
  24. package/directives/control-value-accessors/boolean-value-accessor.d.ts +1 -1
  25. package/directives/control-value-accessors/numeric-value-accessor.d.ts +1 -1
  26. package/directives/control-value-accessors/select-value-accessor.d.ts +1 -1
  27. package/directives/control-value-accessors/text-value-accessor.d.ts +1 -1
  28. package/directives/navigation/ion-back-button.d.ts +1 -1
  29. package/directives/navigation/ion-nav.d.ts +1 -1
  30. package/directives/navigation/ion-router-outlet.d.ts +3 -3
  31. package/directives/navigation/ion-tabs.d.ts +1 -1
  32. package/directives/navigation/router-link-delegate.d.ts +2 -2
  33. package/directives/overlays/modal.d.ts +1 -1
  34. package/directives/overlays/popover.d.ts +1 -1
  35. package/directives/proxies.d.ts +80 -80
  36. package/directives/validators/max-validator.d.ts +1 -1
  37. package/directives/validators/min-validator.d.ts +1 -1
  38. package/esm2022/common/directives/control-value-accessors/value-accessor.mjs +145 -0
  39. package/esm2022/common/directives/navigation/back-button.mjs +61 -0
  40. package/esm2022/common/directives/navigation/nav-params.mjs +46 -0
  41. package/esm2022/common/directives/navigation/nav.mjs +49 -0
  42. package/esm2022/common/directives/navigation/router-link-delegate.mjs +123 -0
  43. package/esm2022/common/directives/navigation/router-outlet.mjs +480 -0
  44. package/esm2022/common/directives/navigation/stack-controller.mjs +280 -0
  45. package/esm2022/common/directives/navigation/tabs.mjs +174 -0
  46. package/esm2022/common/overlays/modal.mjs +91 -0
  47. package/esm2022/common/overlays/popover.mjs +83 -0
  48. package/esm2022/common/providers/angular-delegate.mjs +155 -0
  49. package/{esm2020 → esm2022}/common/providers/config.mjs +4 -4
  50. package/{esm2020 → esm2022}/common/providers/dom-controller.mjs +4 -4
  51. package/esm2022/common/providers/menu-controller.mjs +114 -0
  52. package/esm2022/common/providers/nav-controller.mjs +227 -0
  53. package/esm2022/common/providers/platform.mjs +257 -0
  54. package/esm2022/common/utils/overlay.mjs +26 -0
  55. package/esm2022/directives/control-value-accessors/boolean-value-accessor.mjs +41 -0
  56. package/esm2022/directives/control-value-accessors/numeric-value-accessor.mjs +49 -0
  57. package/esm2022/directives/control-value-accessors/select-value-accessor.mjs +38 -0
  58. package/esm2022/directives/control-value-accessors/text-value-accessor.mjs +37 -0
  59. package/{esm2020 → esm2022}/directives/navigation/ion-back-button.mjs +4 -4
  60. package/{esm2020 → esm2022}/directives/navigation/ion-nav.mjs +4 -4
  61. package/esm2022/directives/navigation/ion-router-outlet.mjs +52 -0
  62. package/esm2022/directives/navigation/ion-tabs.mjs +50 -0
  63. package/{esm2020 → esm2022}/directives/navigation/router-link-delegate.mjs +7 -7
  64. package/{esm2020 → esm2022}/directives/overlays/modal.mjs +5 -5
  65. package/{esm2020 → esm2022}/directives/overlays/popover.mjs +4 -4
  66. package/esm2022/directives/proxies.mjs +2219 -0
  67. package/{esm2020 → esm2022}/directives/validators/max-validator.mjs +4 -4
  68. package/{esm2020 → esm2022}/directives/validators/min-validator.mjs +4 -4
  69. package/{esm2020 → esm2022}/ionic-module.mjs +41 -41
  70. package/{esm2020 → esm2022}/providers/action-sheet-controller.mjs +4 -4
  71. package/{esm2020 → esm2022}/providers/alert-controller.mjs +4 -4
  72. package/{esm2020 → esm2022}/providers/animation-controller.mjs +4 -4
  73. package/esm2022/providers/gesture-controller.mjs +32 -0
  74. package/{esm2020 → esm2022}/providers/loading-controller.mjs +4 -4
  75. package/{esm2020 → esm2022}/providers/menu-controller.mjs +4 -4
  76. package/esm2022/providers/modal-controller.mjs +24 -0
  77. package/{esm2020 → esm2022}/providers/picker-controller.mjs +4 -4
  78. package/esm2022/providers/popover-controller.mjs +18 -0
  79. package/{esm2020 → esm2022}/providers/toast-controller.mjs +4 -4
  80. package/esm2022/standalone/directives/checkbox.mjs +74 -0
  81. package/esm2022/standalone/directives/datetime.mjs +93 -0
  82. package/esm2022/standalone/directives/icon.mjs +35 -0
  83. package/esm2022/standalone/directives/input.mjs +113 -0
  84. package/esm2022/standalone/directives/proxies.mjs +2114 -0
  85. package/esm2022/standalone/directives/radio-group.mjs +60 -0
  86. package/esm2022/standalone/directives/range.mjs +78 -0
  87. package/esm2022/standalone/directives/searchbar.mjs +82 -0
  88. package/esm2022/standalone/directives/segment.mjs +60 -0
  89. package/esm2022/standalone/directives/select.mjs +82 -0
  90. package/esm2022/standalone/directives/textarea.mjs +91 -0
  91. package/esm2022/standalone/directives/toggle.mjs +74 -0
  92. package/esm2022/standalone/navigation/back-button.mjs +32 -0
  93. package/esm2022/standalone/navigation/nav.mjs +28 -0
  94. package/{esm2020 → esm2022}/standalone/navigation/router-link-delegate.mjs +7 -7
  95. package/esm2022/standalone/navigation/router-outlet.mjs +60 -0
  96. package/esm2022/standalone/navigation/tabs.mjs +49 -0
  97. package/esm2022/standalone/overlays/modal.mjs +32 -0
  98. package/{esm2020 → esm2022}/standalone/overlays/popover.mjs +4 -4
  99. package/{esm2020 → esm2022}/standalone/providers/action-sheet-controller.mjs +4 -4
  100. package/{esm2020 → esm2022}/standalone/providers/alert-controller.mjs +4 -4
  101. package/{esm2020 → esm2022}/standalone/providers/animation-controller.mjs +4 -4
  102. package/esm2022/standalone/providers/gesture-controller.mjs +32 -0
  103. package/esm2022/standalone/providers/ionic-angular.mjs +38 -0
  104. package/{esm2020 → esm2022}/standalone/providers/loading-controller.mjs +4 -4
  105. package/{esm2020 → esm2022}/standalone/providers/menu-controller.mjs +4 -4
  106. package/esm2022/standalone/providers/modal-controller.mjs +26 -0
  107. package/{esm2020 → esm2022}/standalone/providers/picker-controller.mjs +4 -4
  108. package/esm2022/standalone/providers/popover-controller.mjs +20 -0
  109. package/{esm2020 → esm2022}/standalone/providers/toast-controller.mjs +4 -4
  110. package/{fesm2020 → fesm2022}/ionic-angular-common.mjs +221 -156
  111. package/fesm2022/ionic-angular-common.mjs.map +1 -0
  112. package/{fesm2020 → fesm2022}/ionic-angular-standalone.mjs +623 -448
  113. package/fesm2022/ionic-angular-standalone.mjs.map +1 -0
  114. package/{fesm2020 → fesm2022}/ionic-angular.mjs +729 -542
  115. package/fesm2022/ionic-angular.mjs.map +1 -0
  116. package/package.json +16 -26
  117. package/schematics/add/files/root/theme/variables.css +10 -247
  118. package/schematics/utils/config.js +0 -1
  119. package/standalone/directives/checkbox.d.ts +1 -1
  120. package/standalone/directives/datetime.d.ts +1 -1
  121. package/standalone/directives/icon.d.ts +1 -1
  122. package/standalone/directives/input.d.ts +1 -1
  123. package/standalone/directives/proxies.d.ts +69 -69
  124. package/standalone/directives/radio-group.d.ts +1 -1
  125. package/standalone/directives/range.d.ts +1 -1
  126. package/standalone/directives/searchbar.d.ts +1 -1
  127. package/standalone/directives/segment.d.ts +1 -1
  128. package/standalone/directives/select.d.ts +1 -1
  129. package/standalone/directives/textarea.d.ts +1 -1
  130. package/standalone/directives/toggle.d.ts +1 -1
  131. package/standalone/navigation/back-button.d.ts +1 -1
  132. package/standalone/navigation/nav.d.ts +1 -1
  133. package/standalone/navigation/router-link-delegate.d.ts +2 -2
  134. package/standalone/navigation/router-outlet.d.ts +3 -3
  135. package/standalone/navigation/tabs.d.ts +1 -1
  136. package/standalone/overlays/modal.d.ts +1 -1
  137. package/standalone/overlays/popover.d.ts +1 -1
  138. package/standalone/providers/ionic-angular.d.ts +2 -2
  139. package/css/themes/dark.always.css.map +0 -1
  140. package/css/themes/dark.class.css.map +0 -1
  141. package/css/themes/dark.system.css.map +0 -1
  142. package/css/themes/high-contrast-dark.always.css.map +0 -1
  143. package/css/themes/high-contrast-dark.class.css.map +0 -1
  144. package/css/themes/high-contrast-dark.system.css.map +0 -1
  145. package/css/themes/high-contrast.always.css.map +0 -1
  146. package/css/themes/high-contrast.class.css.map +0 -1
  147. package/css/themes/high-contrast.system.css.map +0 -1
  148. package/esm2020/common/directives/control-value-accessors/value-accessor.mjs +0 -141
  149. package/esm2020/common/directives/navigation/back-button.mjs +0 -59
  150. package/esm2020/common/directives/navigation/nav-params.mjs +0 -45
  151. package/esm2020/common/directives/navigation/nav.mjs +0 -47
  152. package/esm2020/common/directives/navigation/router-link-delegate.mjs +0 -111
  153. package/esm2020/common/directives/navigation/router-outlet.mjs +0 -470
  154. package/esm2020/common/directives/navigation/stack-controller.mjs +0 -272
  155. package/esm2020/common/directives/navigation/tabs.mjs +0 -172
  156. package/esm2020/common/overlays/modal.mjs +0 -87
  157. package/esm2020/common/overlays/popover.mjs +0 -79
  158. package/esm2020/common/providers/angular-delegate.mjs +0 -152
  159. package/esm2020/common/providers/menu-controller.mjs +0 -113
  160. package/esm2020/common/providers/nav-controller.mjs +0 -221
  161. package/esm2020/common/providers/platform.mjs +0 -254
  162. package/esm2020/common/utils/overlay.mjs +0 -25
  163. package/esm2020/directives/control-value-accessors/boolean-value-accessor.mjs +0 -41
  164. package/esm2020/directives/control-value-accessors/numeric-value-accessor.mjs +0 -48
  165. package/esm2020/directives/control-value-accessors/select-value-accessor.mjs +0 -38
  166. package/esm2020/directives/control-value-accessors/text-value-accessor.mjs +0 -37
  167. package/esm2020/directives/navigation/ion-router-outlet.mjs +0 -43
  168. package/esm2020/directives/navigation/ion-tabs.mjs +0 -47
  169. package/esm2020/directives/proxies.mjs +0 -2047
  170. package/esm2020/providers/gesture-controller.mjs +0 -31
  171. package/esm2020/providers/modal-controller.mjs +0 -24
  172. package/esm2020/providers/popover-controller.mjs +0 -18
  173. package/esm2020/standalone/directives/checkbox.mjs +0 -72
  174. package/esm2020/standalone/directives/datetime.mjs +0 -91
  175. package/esm2020/standalone/directives/icon.mjs +0 -33
  176. package/esm2020/standalone/directives/input.mjs +0 -111
  177. package/esm2020/standalone/directives/proxies.mjs +0 -1970
  178. package/esm2020/standalone/directives/radio-group.mjs +0 -58
  179. package/esm2020/standalone/directives/range.mjs +0 -76
  180. package/esm2020/standalone/directives/searchbar.mjs +0 -80
  181. package/esm2020/standalone/directives/segment.mjs +0 -58
  182. package/esm2020/standalone/directives/select.mjs +0 -80
  183. package/esm2020/standalone/directives/textarea.mjs +0 -89
  184. package/esm2020/standalone/directives/toggle.mjs +0 -72
  185. package/esm2020/standalone/navigation/back-button.mjs +0 -32
  186. package/esm2020/standalone/navigation/nav.mjs +0 -28
  187. package/esm2020/standalone/navigation/router-outlet.mjs +0 -51
  188. package/esm2020/standalone/navigation/tabs.mjs +0 -46
  189. package/esm2020/standalone/overlays/modal.mjs +0 -32
  190. package/esm2020/standalone/providers/gesture-controller.mjs +0 -31
  191. package/esm2020/standalone/providers/ionic-angular.mjs +0 -43
  192. package/esm2020/standalone/providers/modal-controller.mjs +0 -26
  193. package/esm2020/standalone/providers/popover-controller.mjs +0 -20
  194. package/fesm2015/ionic-angular-common.mjs +0 -2484
  195. package/fesm2015/ionic-angular-common.mjs.map +0 -1
  196. package/fesm2015/ionic-angular-standalone.mjs +0 -3146
  197. package/fesm2015/ionic-angular-standalone.mjs.map +0 -1
  198. package/fesm2015/ionic-angular.mjs +0 -2790
  199. package/fesm2015/ionic-angular.mjs.map +0 -1
  200. package/fesm2020/ionic-angular-common.mjs.map +0 -1
  201. package/fesm2020/ionic-angular-standalone.mjs.map +0 -1
  202. package/fesm2020/ionic-angular.mjs.map +0 -1
  203. package/test/README.md +0 -118
  204. package/css/{themes → palettes}/dark.always.css +0 -0
  205. package/css/{themes → palettes}/dark.css +0 -0
  206. package/css/{themes → palettes}/dark.css.map +0 -0
  207. package/css/{themes → palettes}/dark.system.css +0 -0
  208. package/css/{themes → palettes}/high-contrast-dark.always.css +1 -1
  209. package/css/{themes → palettes}/high-contrast-dark.css +0 -0
  210. package/css/{themes → palettes}/high-contrast-dark.css.map +0 -0
  211. package/css/{themes → palettes}/high-contrast-dark.system.css +1 -1
  212. package/css/{themes → palettes}/high-contrast.always.css +25 -25
  213. package/css/{themes → palettes}/high-contrast.css +0 -0
  214. package/css/{themes → palettes}/high-contrast.css.map +0 -0
  215. package/css/{themes → palettes}/high-contrast.system.css +25 -25
  216. /package/{esm2020 → esm2022}/app-initialize.mjs +0 -0
  217. /package/{esm2020 → esm2022}/common/directives/control-value-accessors/index.mjs +0 -0
  218. /package/{esm2020 → esm2022}/common/directives/navigation/stack-utils.mjs +0 -0
  219. /package/{esm2020 → esm2022}/common/index.mjs +0 -0
  220. /package/{esm2020 → esm2022}/common/ionic-angular-common.mjs +0 -0
  221. /package/{esm2020 → esm2022}/common/types/interfaces.mjs +0 -0
  222. /package/{esm2020 → esm2022}/common/types/ionic-lifecycle-hooks.mjs +0 -0
  223. /package/{esm2020 → esm2022}/common/utils/proxy.mjs +0 -0
  224. /package/{esm2020 → esm2022}/common/utils/routing.mjs +0 -0
  225. /package/{esm2020 → esm2022}/common/utils/util.mjs +0 -0
  226. /package/{esm2020 → esm2022}/directives/angular-component-lib/utils.mjs +0 -0
  227. /package/{esm2020 → esm2022}/directives/control-value-accessors/index.mjs +0 -0
  228. /package/{esm2020 → esm2022}/directives/proxies-list.mjs +0 -0
  229. /package/{esm2020 → esm2022}/directives/validators/index.mjs +0 -0
  230. /package/{esm2020 → esm2022}/index.mjs +0 -0
  231. /package/{esm2020 → esm2022}/ionic-angular.mjs +0 -0
  232. /package/{esm2020 → esm2022}/standalone/directives/angular-component-lib/utils.mjs +0 -0
  233. /package/{esm2020 → esm2022}/standalone/directives/index.mjs +0 -0
  234. /package/{esm2020 → esm2022}/standalone/index.mjs +0 -0
  235. /package/{esm2020 → esm2022}/standalone/ionic-angular-standalone.mjs +0 -0
@@ -1,79 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { ContentChild, Directive, TemplateRef, } from '@angular/core';
3
- import { ProxyCmp, proxyOutputs } from '../utils/proxy';
4
- import * as i0 from "@angular/core";
5
- const POPOVER_INPUTS = [
6
- 'alignment',
7
- 'animated',
8
- 'arrow',
9
- 'keepContentsMounted',
10
- 'backdropDismiss',
11
- 'cssClass',
12
- 'dismissOnSelect',
13
- 'enterAnimation',
14
- 'event',
15
- 'isOpen',
16
- 'keyboardClose',
17
- 'leaveAnimation',
18
- 'mode',
19
- 'showBackdrop',
20
- 'translucent',
21
- 'trigger',
22
- 'triggerAction',
23
- 'reference',
24
- 'size',
25
- 'side',
26
- ];
27
- const POPOVER_METHODS = ['present', 'dismiss', 'onDidDismiss', 'onWillDismiss'];
28
- let IonPopover = class IonPopover {
29
- constructor(c, r, z) {
30
- this.z = z;
31
- this.isCmpOpen = false;
32
- this.el = r.nativeElement;
33
- this.el.addEventListener('ionMount', () => {
34
- this.isCmpOpen = true;
35
- c.detectChanges();
36
- });
37
- this.el.addEventListener('didDismiss', () => {
38
- this.isCmpOpen = false;
39
- c.detectChanges();
40
- });
41
- proxyOutputs(this, this.el, [
42
- 'ionPopoverDidPresent',
43
- 'ionPopoverWillPresent',
44
- 'ionPopoverWillDismiss',
45
- 'ionPopoverDidDismiss',
46
- 'didPresent',
47
- 'willPresent',
48
- 'willDismiss',
49
- 'didDismiss',
50
- ]);
51
- }
52
- };
53
- /** @nocollapse */ IonPopover.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: IonPopover, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
54
- /** @nocollapse */ IonPopover.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: IonPopover, selector: "ion-popover", inputs: { alignment: "alignment", animated: "animated", arrow: "arrow", keepContentsMounted: "keepContentsMounted", backdropDismiss: "backdropDismiss", cssClass: "cssClass", dismissOnSelect: "dismissOnSelect", enterAnimation: "enterAnimation", event: "event", isOpen: "isOpen", keyboardClose: "keyboardClose", leaveAnimation: "leaveAnimation", mode: "mode", showBackdrop: "showBackdrop", translucent: "translucent", trigger: "trigger", triggerAction: "triggerAction", reference: "reference", size: "size", side: "side" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 });
55
- IonPopover = __decorate([
56
- ProxyCmp({
57
- inputs: POPOVER_INPUTS,
58
- methods: POPOVER_METHODS,
59
- })
60
- /**
61
- * @Component extends from @Directive
62
- * so by defining the inputs here we
63
- * do not need to re-define them for the
64
- * lazy loaded popover.
65
- */
66
- ], IonPopover);
67
- export { IonPopover };
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: IonPopover, decorators: [{
69
- type: Directive,
70
- args: [{
71
- selector: 'ion-popover',
72
- // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
73
- inputs: POPOVER_INPUTS,
74
- }]
75
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { template: [{
76
- type: ContentChild,
77
- args: [TemplateRef, { static: false }]
78
- }] } });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbW1vbi9zcmMvb3ZlcmxheXMvcG9wb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLFlBQVksRUFDWixTQUFTLEVBSVQsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBcUN4RCxNQUFNLGNBQWMsR0FBRztJQUNyQixXQUFXO0lBQ1gsVUFBVTtJQUNWLE9BQU87SUFDUCxxQkFBcUI7SUFDckIsaUJBQWlCO0lBQ2pCLFVBQVU7SUFDVixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLE9BQU87SUFDUCxRQUFRO0lBQ1IsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixNQUFNO0lBQ04sY0FBYztJQUNkLGFBQWE7SUFDYixTQUFTO0lBQ1QsZUFBZTtJQUNmLFdBQVc7SUFDWCxNQUFNO0lBQ04sTUFBTTtDQUNQLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBbUJuRSxVQUFVLFNBQVYsVUFBVTtJQVFyQixZQUFZLENBQW9CLEVBQUUsQ0FBYSxFQUFZLENBQVM7UUFBVCxNQUFDLEdBQUQsQ0FBQyxDQUFRO1FBSnBFLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFLaEIsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDO1FBRTFCLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQzFCLHNCQUFzQjtZQUN0Qix1QkFBdUI7WUFDdkIsdUJBQXVCO1lBQ3ZCLHNCQUFzQjtZQUN0QixZQUFZO1lBQ1osYUFBYTtZQUNiLGFBQWE7WUFDYixZQUFZO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGLENBQUE7MkhBOUJZLFVBQVU7K0dBQVYsVUFBVSxtbUJBRVAsV0FBVztBQUZkLFVBQVU7SUFqQnRCLFFBQVEsQ0FBQztRQUNSLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLE9BQU8sRUFBRSxlQUFlO0tBQ3pCLENBQUM7SUFDRjs7Ozs7T0FLRztHQVFVLFVBQVUsQ0E4QnRCO1NBOUJZLFVBQVU7NEZBQVYsVUFBVTtrQkFQdEIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsdUVBQXVFO29CQUN2RSxNQUFNLEVBQUUsY0FBYztpQkFDdkI7c0pBSytDLFFBQVE7c0JBQXJELFlBQVk7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb250ZW50Q2hpbGQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBOZ1pvbmUsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50cyB9IGZyb20gJ0Bpb25pYy9jb3JlL2NvbXBvbmVudHMnO1xuXG5pbXBvcnQgeyBQcm94eUNtcCwgcHJveHlPdXRwdXRzIH0gZnJvbSAnLi4vdXRpbHMvcHJveHknO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSW9uUG9wb3ZlciBleHRlbmRzIENvbXBvbmVudHMuSW9uUG9wb3ZlciB7XG4gIC8qKlxuICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBwb3BvdmVyIGhhcyBwcmVzZW50ZWQuXG4gICAqL1xuICBpb25Qb3BvdmVyRGlkUHJlc2VudDogRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50PjtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgYmVmb3JlIHRoZSBwb3BvdmVyIGhhcyBwcmVzZW50ZWQuXG4gICAqL1xuICBpb25Qb3BvdmVyV2lsbFByZXNlbnQ6IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD47XG4gIC8qKlxuICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBwb3BvdmVyIGhhcyBkaXNtaXNzZWQuXG4gICAqL1xuICBpb25Qb3BvdmVyV2lsbERpc21pc3M6IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD47XG4gIC8qKlxuICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBwb3BvdmVyIGhhcyBkaXNtaXNzZWQuXG4gICAqL1xuICBpb25Qb3BvdmVyRGlkRGlzbWlzczogRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50PjtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIHBvcG92ZXIgaGFzIHByZXNlbnRlZC4gU2hvcnRoYW5kIGZvciBpb25Qb3BvdmVyRGlkUHJlc2VudC5cbiAgICovXG4gIGRpZFByZXNlbnQ6IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD47XG4gIC8qKlxuICAgKiBFbWl0dGVkIGJlZm9yZSB0aGUgcG9wb3ZlciBoYXMgcHJlc2VudGVkLiBTaG9ydGhhbmQgZm9yIGlvblBvcG92ZXJXaWxsUHJlc2VudC5cbiAgICovXG4gIHdpbGxQcmVzZW50OiBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ+O1xuICAvKipcbiAgICogRW1pdHRlZCBhZnRlciB0aGUgcG9wb3ZlciBoYXMgcHJlc2VudGVkLiBTaG9ydGhhbmQgZm9yIGlvblBvcG92ZXJXaWxsRGlzbWlzcy5cbiAgICovXG4gIHdpbGxEaXNtaXNzOiBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ+O1xuICAvKipcbiAgICogRW1pdHRlZCBhZnRlciB0aGUgcG9wb3ZlciBoYXMgZGlzbWlzc2VkLiBTaG9ydGhhbmQgZm9yIGlvblBvcG92ZXJEaWREaXNtaXNzLlxuICAgKi9cbiAgZGlkRGlzbWlzczogRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50Pjtcbn1cblxuY29uc3QgUE9QT1ZFUl9JTlBVVFMgPSBbXG4gICdhbGlnbm1lbnQnLFxuICAnYW5pbWF0ZWQnLFxuICAnYXJyb3cnLFxuICAna2VlcENvbnRlbnRzTW91bnRlZCcsXG4gICdiYWNrZHJvcERpc21pc3MnLFxuICAnY3NzQ2xhc3MnLFxuICAnZGlzbWlzc09uU2VsZWN0JyxcbiAgJ2VudGVyQW5pbWF0aW9uJyxcbiAgJ2V2ZW50JyxcbiAgJ2lzT3BlbicsXG4gICdrZXlib2FyZENsb3NlJyxcbiAgJ2xlYXZlQW5pbWF0aW9uJyxcbiAgJ21vZGUnLFxuICAnc2hvd0JhY2tkcm9wJyxcbiAgJ3RyYW5zbHVjZW50JyxcbiAgJ3RyaWdnZXInLFxuICAndHJpZ2dlckFjdGlvbicsXG4gICdyZWZlcmVuY2UnLFxuICAnc2l6ZScsXG4gICdzaWRlJyxcbl07XG5cbmNvbnN0IFBPUE9WRVJfTUVUSE9EUyA9IFsncHJlc2VudCcsICdkaXNtaXNzJywgJ29uRGlkRGlzbWlzcycsICdvbldpbGxEaXNtaXNzJ107XG5cbkBQcm94eUNtcCh7XG4gIGlucHV0czogUE9QT1ZFUl9JTlBVVFMsXG4gIG1ldGhvZHM6IFBPUE9WRVJfTUVUSE9EUyxcbn0pXG4vKipcbiAqIEBDb21wb25lbnQgZXh0ZW5kcyBmcm9tIEBEaXJlY3RpdmVcbiAqIHNvIGJ5IGRlZmluaW5nIHRoZSBpbnB1dHMgaGVyZSB3ZVxuICogZG8gbm90IG5lZWQgdG8gcmUtZGVmaW5lIHRoZW0gZm9yIHRoZVxuICogbGF6eSBsb2FkZWQgcG9wb3Zlci5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnaW9uLXBvcG92ZXInLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICBpbnB1dHM6IFBPUE9WRVJfSU5QVVRTLFxufSlcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgSW9uUG9wb3ZlciB7XG4gIC8vIFRPRE8oRlctMjgyNyk6IHR5cGVcbiAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZiwgeyBzdGF0aWM6IGZhbHNlIH0pIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIGlzQ21wT3BlbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBlbDogSFRNTEVsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoYzogQ2hhbmdlRGV0ZWN0b3JSZWYsIHI6IEVsZW1lbnRSZWYsIHByb3RlY3RlZCB6OiBOZ1pvbmUpIHtcbiAgICB0aGlzLmVsID0gci5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCdpb25Nb3VudCcsICgpID0+IHtcbiAgICAgIHRoaXMuaXNDbXBPcGVuID0gdHJ1ZTtcbiAgICAgIGMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcignZGlkRGlzbWlzcycsICgpID0+IHtcbiAgICAgIHRoaXMuaXNDbXBPcGVuID0gZmFsc2U7XG4gICAgICBjLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgICBwcm94eU91dHB1dHModGhpcywgdGhpcy5lbCwgW1xuICAgICAgJ2lvblBvcG92ZXJEaWRQcmVzZW50JyxcbiAgICAgICdpb25Qb3BvdmVyV2lsbFByZXNlbnQnLFxuICAgICAgJ2lvblBvcG92ZXJXaWxsRGlzbWlzcycsXG4gICAgICAnaW9uUG9wb3ZlckRpZERpc21pc3MnLFxuICAgICAgJ2RpZFByZXNlbnQnLFxuICAgICAgJ3dpbGxQcmVzZW50JyxcbiAgICAgICd3aWxsRGlzbWlzcycsXG4gICAgICAnZGlkRGlzbWlzcycsXG4gICAgXSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,152 +0,0 @@
1
- import { ApplicationRef, NgZone, Injectable, Injector, inject, createComponent, InjectionToken, } from '@angular/core';
2
- import { LIFECYCLE_DID_ENTER, LIFECYCLE_DID_LEAVE, LIFECYCLE_WILL_ENTER, LIFECYCLE_WILL_LEAVE, LIFECYCLE_WILL_UNLOAD, } from '@ionic/core/components';
3
- import { NavParams } from '../directives/navigation/nav-params';
4
- import * as i0 from "@angular/core";
5
- // TODO(FW-2827): types
6
- export class AngularDelegate {
7
- constructor() {
8
- this.zone = inject(NgZone);
9
- this.applicationRef = inject(ApplicationRef);
10
- }
11
- create(environmentInjector, injector, elementReferenceKey) {
12
- return new AngularFrameworkDelegate(environmentInjector, injector, this.applicationRef, this.zone, elementReferenceKey);
13
- }
14
- }
15
- /** @nocollapse */ AngularDelegate.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AngularDelegate, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16
- /** @nocollapse */ AngularDelegate.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AngularDelegate });
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AngularDelegate, decorators: [{
18
- type: Injectable
19
- }] });
20
- export class AngularFrameworkDelegate {
21
- constructor(environmentInjector, injector, applicationRef, zone, elementReferenceKey) {
22
- this.environmentInjector = environmentInjector;
23
- this.injector = injector;
24
- this.applicationRef = applicationRef;
25
- this.zone = zone;
26
- this.elementReferenceKey = elementReferenceKey;
27
- this.elRefMap = new WeakMap();
28
- this.elEventsMap = new WeakMap();
29
- }
30
- attachViewToDom(container, component, params, cssClasses) {
31
- return this.zone.run(() => {
32
- return new Promise((resolve) => {
33
- const componentProps = {
34
- ...params,
35
- };
36
- /**
37
- * Ionic Angular passes a reference to a modal
38
- * or popover that can be accessed using a
39
- * variable in the overlay component. If
40
- * elementReferenceKey is defined, then we should
41
- * pass a reference to the component using
42
- * elementReferenceKey as the key.
43
- */
44
- if (this.elementReferenceKey !== undefined) {
45
- componentProps[this.elementReferenceKey] = container;
46
- }
47
- const el = attachView(this.zone, this.environmentInjector, this.injector, this.applicationRef, this.elRefMap, this.elEventsMap, container, component, componentProps, cssClasses, this.elementReferenceKey);
48
- resolve(el);
49
- });
50
- });
51
- }
52
- removeViewFromDom(_container, component) {
53
- return this.zone.run(() => {
54
- return new Promise((resolve) => {
55
- const componentRef = this.elRefMap.get(component);
56
- if (componentRef) {
57
- componentRef.destroy();
58
- this.elRefMap.delete(component);
59
- const unbindEvents = this.elEventsMap.get(component);
60
- if (unbindEvents) {
61
- unbindEvents();
62
- this.elEventsMap.delete(component);
63
- }
64
- }
65
- resolve();
66
- });
67
- });
68
- }
69
- }
70
- export const attachView = (zone, environmentInjector, injector, applicationRef, elRefMap, elEventsMap, container, component, params, cssClasses, elementReferenceKey) => {
71
- /**
72
- * Wraps the injector with a custom injector that
73
- * provides NavParams to the component.
74
- *
75
- * NavParams is a legacy feature from Ionic v3 that allows
76
- * Angular developers to provide data to a component
77
- * and access it by providing NavParams as a dependency
78
- * in the constructor.
79
- *
80
- * The modern approach is to access the data directly
81
- * from the component's class instance.
82
- */
83
- const childInjector = Injector.create({
84
- providers: getProviders(params),
85
- parent: injector,
86
- });
87
- const componentRef = createComponent(component, {
88
- environmentInjector,
89
- elementInjector: childInjector,
90
- });
91
- const instance = componentRef.instance;
92
- const hostElement = componentRef.location.nativeElement;
93
- if (params) {
94
- /**
95
- * For modals and popovers, a reference to the component is
96
- * added to `params` during the call to attachViewToDom. If
97
- * a reference using this name is already set, this means
98
- * the app is trying to use the name as a component prop,
99
- * which will cause collisions.
100
- */
101
- if (elementReferenceKey && instance[elementReferenceKey] !== undefined) {
102
- console.error(`[Ionic Error]: ${elementReferenceKey} is a reserved property when using ${container.tagName.toLowerCase()}. Rename or remove the "${elementReferenceKey}" property from ${component.name}.`);
103
- }
104
- Object.assign(instance, params);
105
- }
106
- if (cssClasses) {
107
- for (const cssClass of cssClasses) {
108
- hostElement.classList.add(cssClass);
109
- }
110
- }
111
- const unbindEvents = bindLifecycleEvents(zone, instance, hostElement);
112
- container.appendChild(hostElement);
113
- applicationRef.attachView(componentRef.hostView);
114
- elRefMap.set(hostElement, componentRef);
115
- elEventsMap.set(hostElement, unbindEvents);
116
- return hostElement;
117
- };
118
- const LIFECYCLES = [
119
- LIFECYCLE_WILL_ENTER,
120
- LIFECYCLE_DID_ENTER,
121
- LIFECYCLE_WILL_LEAVE,
122
- LIFECYCLE_DID_LEAVE,
123
- LIFECYCLE_WILL_UNLOAD,
124
- ];
125
- export const bindLifecycleEvents = (zone, instance, element) => {
126
- return zone.run(() => {
127
- const unregisters = LIFECYCLES.filter((eventName) => typeof instance[eventName] === 'function').map((eventName) => {
128
- const handler = (ev) => instance[eventName](ev.detail);
129
- element.addEventListener(eventName, handler);
130
- return () => element.removeEventListener(eventName, handler);
131
- });
132
- return () => unregisters.forEach((fn) => fn());
133
- });
134
- };
135
- const NavParamsToken = new InjectionToken('NavParamsToken');
136
- const getProviders = (params) => {
137
- return [
138
- {
139
- provide: NavParamsToken,
140
- useValue: params,
141
- },
142
- {
143
- provide: NavParams,
144
- useFactory: provideNavParamsInjectable,
145
- deps: [NavParamsToken],
146
- },
147
- ];
148
- };
149
- const provideNavParamsInjectable = (params) => {
150
- return new NavParams(params);
151
- };
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1kZWxlZ2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbW1vbi9zcmMvcHJvdmlkZXJzL2FuZ3VsYXItZGVsZWdhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGNBQWMsRUFDZCxNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsRUFFUixNQUFNLEVBQ04sZUFBZSxFQUNmLGNBQWMsR0FFZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFFaEUsdUJBQXVCO0FBR3ZCLE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBRVUsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztLQWVqRDtJQWJDLE1BQU0sQ0FDSixtQkFBd0MsRUFDeEMsUUFBa0IsRUFDbEIsbUJBQTRCO1FBRTVCLE9BQU8sSUFBSSx3QkFBd0IsQ0FDakMsbUJBQW1CLEVBQ25CLFFBQVEsRUFDUixJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLENBQUMsSUFBSSxFQUNULG1CQUFtQixDQUNwQixDQUFDO0lBQ0osQ0FBQzs7Z0lBaEJVLGVBQWU7b0lBQWYsZUFBZTs0RkFBZixlQUFlO2tCQUQzQixVQUFVOztBQW9CWCxNQUFNLE9BQU8sd0JBQXdCO0lBSW5DLFlBQ1UsbUJBQXdDLEVBQ3hDLFFBQWtCLEVBQ2xCLGNBQThCLEVBQzlCLElBQVksRUFDWixtQkFBNEI7UUFKNUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLG1CQUFjLEdBQWQsY0FB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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZixcbiAgTmdab25lLFxuICBJbmplY3RhYmxlLFxuICBJbmplY3RvcixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgaW5qZWN0LFxuICBjcmVhdGVDb21wb25lbnQsXG4gIEluamVjdGlvblRva2VuLFxuICBDb21wb25lbnRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRnJhbWV3b3JrRGVsZWdhdGUsXG4gIExJRkVDWUNMRV9ESURfRU5URVIsXG4gIExJRkVDWUNMRV9ESURfTEVBVkUsXG4gIExJRkVDWUNMRV9XSUxMX0VOVEVSLFxuICBMSUZFQ1lDTEVfV0lMTF9MRUFWRSxcbiAgTElGRUNZQ0xFX1dJTExfVU5MT0FELFxufSBmcm9tICdAaW9uaWMvY29yZS9jb21wb25lbnRzJztcblxuaW1wb3J0IHsgTmF2UGFyYW1zIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9uYXZpZ2F0aW9uL25hdi1wYXJhbXMnO1xuXG4vLyBUT0RPKEZXLTI4MjcpOiB0eXBlc1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQW5ndWxhckRlbGVnYXRlIHtcbiAgcHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgYXBwbGljYXRpb25SZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuXG4gIGNyZWF0ZShcbiAgICBlbnZpcm9ubWVudEluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBlbGVtZW50UmVmZXJlbmNlS2V5Pzogc3RyaW5nXG4gICk6IEFuZ3VsYXJGcmFtZXdvcmtEZWxlZ2F0ZSB7XG4gICAgcmV0dXJuIG5ldyBBbmd1bGFyRnJhbWV3b3JrRGVsZWdhdGUoXG4gICAgICBlbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgaW5qZWN0b3IsXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uUmVmLFxuICAgICAgdGhpcy56b25lLFxuICAgICAgZWxlbWVudFJlZmVyZW5jZUtleVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJGcmFtZXdvcmtEZWxlZ2F0ZSBpbXBsZW1lbnRzIEZyYW1ld29ya0RlbGVnYXRlIHtcbiAgcHJpdmF0ZSBlbFJlZk1hcCA9IG5ldyBXZWFrTWFwPEhUTUxFbGVtZW50LCBDb21wb25lbnRSZWY8YW55Pj4oKTtcbiAgcHJpdmF0ZSBlbEV2ZW50c01hcCA9IG5ldyBXZWFrTWFwPEhUTUxFbGVtZW50LCAoKSA9PiB2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZW52aXJvbm1lbnRJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWZlcmVuY2VLZXk/OiBzdHJpbmdcbiAgKSB7fVxuXG4gIGF0dGFjaFZpZXdUb0RvbShjb250YWluZXI6IGFueSwgY29tcG9uZW50OiBhbnksIHBhcmFtcz86IGFueSwgY3NzQ2xhc3Nlcz86IHN0cmluZ1tdKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UHJvcHMgPSB7XG4gICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJb25pYyBBbmd1bGFyIHBhc3NlcyBhIHJlZmVyZW5jZSB0byBhIG1vZGFsXG4gICAgICAgICAqIG9yIHBvcG92ZXIgdGhhdCBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgYVxuICAgICAgICAgKiB2YXJpYWJsZSBpbiB0aGUgb3ZlcmxheSBjb21wb25lbnQuIElmXG4gICAgICAgICAqIGVsZW1lbnRSZWZlcmVuY2VLZXkgaXMgZGVmaW5lZCwgdGhlbiB3ZSBzaG91bGRcbiAgICAgICAgICogcGFzcyBhIHJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50IHVzaW5nXG4gICAgICAgICAqIGVsZW1lbnRSZWZlcmVuY2VLZXkgYXMgdGhlIGtleS5cbiAgICAgICAgICovXG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnRSZWZlcmVuY2VLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbXBvbmVudFByb3BzW3RoaXMuZWxlbWVudFJlZmVyZW5jZUtleV0gPSBjb250YWluZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbCA9IGF0dGFjaFZpZXcoXG4gICAgICAgICAgdGhpcy56b25lLFxuICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25SZWYsXG4gICAgICAgICAgdGhpcy5lbFJlZk1hcCxcbiAgICAgICAgICB0aGlzLmVsRXZlbnRzTWFwLFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBjb21wb25lbnQsXG4gICAgICAgICAgY29tcG9uZW50UHJvcHMsXG4gICAgICAgICAgY3NzQ2xhc3NlcyxcbiAgICAgICAgICB0aGlzLmVsZW1lbnRSZWZlcmVuY2VLZXlcbiAgICAgICAgKTtcbiAgICAgICAgcmVzb2x2ZShlbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZVZpZXdGcm9tRG9tKF9jb250YWluZXI6IGFueSwgY29tcG9uZW50OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5lbFJlZk1hcC5nZXQoY29tcG9uZW50KTtcbiAgICAgICAgaWYgKGNvbXBvbmVudFJlZikge1xuICAgICAgICAgIGNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICAgICAgdGhpcy5lbFJlZk1hcC5kZWxldGUoY29tcG9uZW50KTtcbiAgICAgICAgICBjb25zdCB1bmJpbmRFdmVudHMgPSB0aGlzLmVsRXZlbnRzTWFwLmdldChjb21wb25lbnQpO1xuICAgICAgICAgIGlmICh1bmJpbmRFdmVudHMpIHtcbiAgICAgICAgICAgIHVuYmluZEV2ZW50cygpO1xuICAgICAgICAgICAgdGhpcy5lbEV2ZW50c01hcC5kZWxldGUoY29tcG9uZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGF0dGFjaFZpZXcgPSAoXG4gIHpvbmU6IE5nWm9uZSxcbiAgZW52aXJvbm1lbnRJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgaW5qZWN0b3I6IEluamVjdG9yLFxuICBhcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWYsXG4gIGVsUmVmTWFwOiBXZWFrTWFwPEhUTUxFbGVtZW50LCBDb21wb25lbnRSZWY8YW55Pj4sXG4gIGVsRXZlbnRzTWFwOiBXZWFrTWFwPEhUTUxFbGVtZW50LCAoKSA9PiB2b2lkPixcbiAgY29udGFpbmVyOiBhbnksXG4gIGNvbXBvbmVudDogYW55LFxuICBwYXJhbXM6IGFueSxcbiAgY3NzQ2xhc3Nlczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gIGVsZW1lbnRSZWZlcmVuY2VLZXk6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogYW55ID0+IHtcbiAgLyoqXG4gICAqIFdyYXBzIHRoZSBpbmplY3RvciB3aXRoIGEgY3VzdG9tIGluamVjdG9yIHRoYXRcbiAgICogcHJvdmlkZXMgTmF2UGFyYW1zIHRvIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIE5hdlBhcmFtcyBpcyBhIGxlZ2FjeSBmZWF0dXJlIGZyb20gSW9uaWMgdjMgdGhhdCBhbGxvd3NcbiAgICogQW5ndWxhciBkZXZlbG9wZXJzIHRvIHByb3ZpZGUgZGF0YSB0byBhIGNvbXBvbmVudFxuICAgKiBhbmQgYWNjZXNzIGl0IGJ5IHByb3ZpZGluZyBOYXZQYXJhbXMgYXMgYSBkZXBlbmRlbmN5XG4gICAqIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogVGhlIG1vZGVybiBhcHByb2FjaCBpcyB0byBhY2Nlc3MgdGhlIGRhdGEgZGlyZWN0bHlcbiAgICogZnJvbSB0aGUgY29tcG9uZW50J3MgY2xhc3MgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdCBjaGlsZEluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICBwcm92aWRlcnM6IGdldFByb3ZpZGVycyhwYXJhbXMpLFxuICAgIHBhcmVudDogaW5qZWN0b3IsXG4gIH0pO1xuXG4gIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNyZWF0ZUNvbXBvbmVudDxhbnk+KGNvbXBvbmVudCwge1xuICAgIGVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgZWxlbWVudEluamVjdG9yOiBjaGlsZEluamVjdG9yLFxuICB9KTtcblxuICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgY29uc3QgaG9zdEVsZW1lbnQgPSBjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcblxuICBpZiAocGFyYW1zKSB7XG4gICAgLyoqXG4gICAgICogRm9yIG1vZGFscyBhbmQgcG9wb3ZlcnMsIGEgcmVmZXJlbmNlIHRvIHRoZSBjb21wb25lbnQgaXNcbiAgICAgKiBhZGRlZCB0byBgcGFyYW1zYCBkdXJpbmcgdGhlIGNhbGwgdG8gYXR0YWNoVmlld1RvRG9tLiBJZlxuICAgICAqIGEgcmVmZXJlbmNlIHVzaW5nIHRoaXMgbmFtZSBpcyBhbHJlYWR5IHNldCwgdGhpcyBtZWFuc1xuICAgICAqIHRoZSBhcHAgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgbmFtZSBhcyBhIGNvbXBvbmVudCBwcm9wLFxuICAgICAqIHdoaWNoIHdpbGwgY2F1c2UgY29sbGlzaW9ucy5cbiAgICAgKi9cbiAgICBpZiAoZWxlbWVudFJlZmVyZW5jZUtleSAmJiBpbnN0YW5jZVtlbGVtZW50UmVmZXJlbmNlS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgW0lvbmljIEVycm9yXTogJHtlbGVtZW50UmVmZXJlbmNlS2V5fSBpcyBhIHJlc2VydmVkIHByb3BlcnR5IHdoZW4gdXNpbmcgJHtjb250YWluZXIudGFnTmFtZS50b0xvd2VyQ2FzZSgpfS4gUmVuYW1lIG9yIHJlbW92ZSB0aGUgXCIke2VsZW1lbnRSZWZlcmVuY2VLZXl9XCIgcHJvcGVydHkgZnJvbSAke1xuICAgICAgICAgIGNvbXBvbmVudC5uYW1lXG4gICAgICAgIH0uYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKGluc3RhbmNlLCBwYXJhbXMpO1xuICB9XG4gIGlmIChjc3NDbGFzc2VzKSB7XG4gICAgZm9yIChjb25zdCBjc3NDbGFzcyBvZiBjc3NDbGFzc2VzKSB7XG4gICAgICBob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGNzc0NsYXNzKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdW5iaW5kRXZlbnRzID0gYmluZExpZmVjeWNsZUV2ZW50cyh6b25lLCBpbnN0YW5jZSwgaG9zdEVsZW1lbnQpO1xuICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaG9zdEVsZW1lbnQpO1xuXG4gIGFwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcblxuICBlbFJlZk1hcC5zZXQoaG9zdEVsZW1lbnQsIGNvbXBvbmVudFJlZik7XG4gIGVsRXZlbnRzTWFwLnNldChob3N0RWxlbWVudCwgdW5iaW5kRXZlbnRzKTtcbiAgcmV0dXJuIGhvc3RFbGVtZW50O1xufTtcblxuY29uc3QgTElGRUNZQ0xFUyA9IFtcbiAgTElGRUNZQ0xFX1dJTExfRU5URVIsXG4gIExJRkVDWUNMRV9ESURfRU5URVIsXG4gIExJRkVDWUNMRV9XSUxMX0xFQVZFLFxuICBMSUZFQ1lDTEVfRElEX0xFQVZFLFxuICBMSUZFQ1lDTEVfV0lMTF9VTkxPQUQsXG5dO1xuXG5leHBvcnQgY29uc3QgYmluZExpZmVjeWNsZUV2ZW50cyA9ICh6b25lOiBOZ1pvbmUsIGluc3RhbmNlOiBhbnksIGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogKCgpID0+IHZvaWQpID0+IHtcbiAgcmV0dXJuIHpvbmUucnVuKCgpID0+IHtcbiAgICBjb25zdCB1bnJlZ2lzdGVycyA9IExJRkVDWUNMRVMuZmlsdGVyKChldmVudE5hbWUpID0+IHR5cGVvZiBpbnN0YW5jZVtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nKS5tYXAoKGV2ZW50TmFtZSkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IChldjogYW55KSA9PiBpbnN0YW5jZVtldmVudE5hbWVdKGV2LmRldGFpbCk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICAgIHJldHVybiAoKSA9PiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4gdW5yZWdpc3RlcnMuZm9yRWFjaCgoZm4pID0+IGZuKCkpO1xuICB9KTtcbn07XG5cbmNvbnN0IE5hdlBhcmFtc1Rva2VuID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ05hdlBhcmFtc1Rva2VuJyk7XG5cbmNvbnN0IGdldFByb3ZpZGVycyA9IChwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOYXZQYXJhbXNUb2tlbixcbiAgICAgIHVzZVZhbHVlOiBwYXJhbXMsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOYXZQYXJhbXMsXG4gICAgICB1c2VGYWN0b3J5OiBwcm92aWRlTmF2UGFyYW1zSW5qZWN0YWJsZSxcbiAgICAgIGRlcHM6IFtOYXZQYXJhbXNUb2tlbl0sXG4gICAgfSxcbiAgXTtcbn07XG5cbmNvbnN0IHByb3ZpZGVOYXZQYXJhbXNJbmplY3RhYmxlID0gKHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4ge1xuICByZXR1cm4gbmV3IE5hdlBhcmFtcyhwYXJhbXMpO1xufTtcbiJdfQ==
@@ -1,113 +0,0 @@
1
- export class MenuController {
2
- constructor(menuController) {
3
- this.menuController = menuController;
4
- }
5
- /**
6
- * Programmatically open the Menu.
7
- * @param [menuId] Optionally get the menu by its id, or side.
8
- * @return returns a promise when the menu is fully opened
9
- */
10
- open(menuId) {
11
- return this.menuController.open(menuId);
12
- }
13
- /**
14
- * Programmatically close the Menu. If no `menuId` is given as the first
15
- * argument then it'll close any menu which is open. If a `menuId`
16
- * is given then it'll close that exact menu.
17
- * @param [menuId] Optionally get the menu by its id, or side.
18
- * @return returns a promise when the menu is fully closed
19
- */
20
- close(menuId) {
21
- return this.menuController.close(menuId);
22
- }
23
- /**
24
- * Toggle the menu. If it's closed, it will open, and if opened, it
25
- * will close.
26
- * @param [menuId] Optionally get the menu by its id, or side.
27
- * @return returns a promise when the menu has been toggled
28
- */
29
- toggle(menuId) {
30
- return this.menuController.toggle(menuId);
31
- }
32
- /**
33
- * Used to enable or disable a menu. For example, there could be multiple
34
- * left menus, but only one of them should be able to be opened at the same
35
- * time. If there are multiple menus on the same side, then enabling one menu
36
- * will also automatically disable all the others that are on the same side.
37
- * @param [menuId] Optionally get the menu by its id, or side.
38
- * @return Returns the instance of the menu, which is useful for chaining.
39
- */
40
- enable(shouldEnable, menuId) {
41
- return this.menuController.enable(shouldEnable, menuId);
42
- }
43
- /**
44
- * Used to enable or disable the ability to swipe open the menu.
45
- * @param shouldEnable True if it should be swipe-able, false if not.
46
- * @param [menuId] Optionally get the menu by its id, or side.
47
- * @return Returns the instance of the menu, which is useful for chaining.
48
- */
49
- swipeGesture(shouldEnable, menuId) {
50
- return this.menuController.swipeGesture(shouldEnable, menuId);
51
- }
52
- /**
53
- * @param [menuId] Optionally get the menu by its id, or side.
54
- * @return Returns true if the specified menu is currently open, otherwise false.
55
- * If the menuId is not specified, it returns true if ANY menu is currenly open.
56
- */
57
- isOpen(menuId) {
58
- return this.menuController.isOpen(menuId);
59
- }
60
- /**
61
- * @param [menuId] Optionally get the menu by its id, or side.
62
- * @return Returns true if the menu is currently enabled, otherwise false.
63
- */
64
- isEnabled(menuId) {
65
- return this.menuController.isEnabled(menuId);
66
- }
67
- /**
68
- * Used to get a menu instance. If a `menuId` is not provided then it'll
69
- * return the first menu found. If a `menuId` is `left` or `right`, then
70
- * it'll return the enabled menu on that side. Otherwise, if a `menuId` is
71
- * provided, then it'll try to find the menu using the menu's `id`
72
- * property. If a menu is not found then it'll return `null`.
73
- * @param [menuId] Optionally get the menu by its id, or side.
74
- * @return Returns the instance of the menu if found, otherwise `null`.
75
- */
76
- get(menuId) {
77
- return this.menuController.get(menuId);
78
- }
79
- /**
80
- * @return Returns the instance of the menu already opened, otherwise `null`.
81
- */
82
- getOpen() {
83
- return this.menuController.getOpen();
84
- }
85
- /**
86
- * @return Returns an array of all menu instances.
87
- */
88
- getMenus() {
89
- return this.menuController.getMenus();
90
- }
91
- registerAnimation(name, animation) {
92
- return this.menuController.registerAnimation(name, animation);
93
- }
94
- isAnimating() {
95
- return this.menuController.isAnimating();
96
- }
97
- _getOpenSync() {
98
- return this.menuController._getOpenSync();
99
- }
100
- _createAnimation(type, menuCmp) {
101
- return this.menuController._createAnimation(type, menuCmp);
102
- }
103
- _register(menu) {
104
- return this.menuController._register(menu);
105
- }
106
- _unregister(menu) {
107
- return this.menuController._unregister(menu);
108
- }
109
- _setOpen(menu, shouldOpen, animated) {
110
- return this.menuController._setOpen(menu, shouldOpen, animated);
111
- }
112
- }
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29tbW9uL3NyYy9wcm92aWRlcnMvbWVudS1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9CLGNBQStCO1FBQS9CLG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtJQUFHLENBQUM7SUFFdkQ7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxNQUFlO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxNQUFlO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLE1BQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxZQUFxQixFQUFFLE1BQWU7UUFDM0MsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFDLFlBQXFCLEVBQUUsTUFBZTtRQUNqRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxNQUFlO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsR0FBRyxDQUFDLE1BQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQVksRUFBRSxTQUEyQjtRQUN6RCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsT0FBYztRQUMzQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxTQUFTLENBQUMsSUFBVztRQUNuQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBVztRQUNyQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBVyxFQUFFLFVBQW1CLEVBQUUsUUFBaUI7UUFDMUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWVudUNvbnRyb2xsZXJJLCBBbmltYXRpb25CdWlsZGVyLCBNZW51SSwgQW5pbWF0aW9uIH0gZnJvbSAnQGlvbmljL2NvcmUvY29tcG9uZW50cyc7XG5cbmV4cG9ydCBjbGFzcyBNZW51Q29udHJvbGxlciBpbXBsZW1lbnRzIE1lbnVDb250cm9sbGVySSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWVudUNvbnRyb2xsZXI6IE1lbnVDb250cm9sbGVySSkge31cblxuICAvKipcbiAgICogUHJvZ3JhbW1hdGljYWxseSBvcGVuIHRoZSBNZW51LlxuICAgKiBAcGFyYW0gW21lbnVJZF0gIE9wdGlvbmFsbHkgZ2V0IHRoZSBtZW51IGJ5IGl0cyBpZCwgb3Igc2lkZS5cbiAgICogQHJldHVybiByZXR1cm5zIGEgcHJvbWlzZSB3aGVuIHRoZSBtZW51IGlzIGZ1bGx5IG9wZW5lZFxuICAgKi9cbiAgb3BlbihtZW51SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5vcGVuKG1lbnVJZCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvZ3JhbW1hdGljYWxseSBjbG9zZSB0aGUgTWVudS4gSWYgbm8gYG1lbnVJZGAgaXMgZ2l2ZW4gYXMgdGhlIGZpcnN0XG4gICAqIGFyZ3VtZW50IHRoZW4gaXQnbGwgY2xvc2UgYW55IG1lbnUgd2hpY2ggaXMgb3Blbi4gSWYgYSBgbWVudUlkYFxuICAgKiBpcyBnaXZlbiB0aGVuIGl0J2xsIGNsb3NlIHRoYXQgZXhhY3QgbWVudS5cbiAgICogQHBhcmFtIFttZW51SWRdICBPcHRpb25hbGx5IGdldCB0aGUgbWVudSBieSBpdHMgaWQsIG9yIHNpZGUuXG4gICAqIEByZXR1cm4gcmV0dXJucyBhIHByb21pc2Ugd2hlbiB0aGUgbWVudSBpcyBmdWxseSBjbG9zZWRcbiAgICovXG4gIGNsb3NlKG1lbnVJZD86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm1lbnVDb250cm9sbGVyLmNsb3NlKG1lbnVJZCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBtZW51LiBJZiBpdCdzIGNsb3NlZCwgaXQgd2lsbCBvcGVuLCBhbmQgaWYgb3BlbmVkLCBpdFxuICAgKiB3aWxsIGNsb3NlLlxuICAgKiBAcGFyYW0gW21lbnVJZF0gIE9wdGlvbmFsbHkgZ2V0IHRoZSBtZW51IGJ5IGl0cyBpZCwgb3Igc2lkZS5cbiAgICogQHJldHVybiByZXR1cm5zIGEgcHJvbWlzZSB3aGVuIHRoZSBtZW51IGhhcyBiZWVuIHRvZ2dsZWRcbiAgICovXG4gIHRvZ2dsZShtZW51SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci50b2dnbGUobWVudUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGVuYWJsZSBvciBkaXNhYmxlIGEgbWVudS4gRm9yIGV4YW1wbGUsIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlXG4gICAqIGxlZnQgbWVudXMsIGJ1dCBvbmx5IG9uZSBvZiB0aGVtIHNob3VsZCBiZSBhYmxlIHRvIGJlIG9wZW5lZCBhdCB0aGUgc2FtZVxuICAgKiB0aW1lLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgbWVudXMgb24gdGhlIHNhbWUgc2lkZSwgdGhlbiBlbmFibGluZyBvbmUgbWVudVxuICAgKiB3aWxsIGFsc28gYXV0b21hdGljYWxseSBkaXNhYmxlIGFsbCB0aGUgb3RoZXJzIHRoYXQgYXJlIG9uIHRoZSBzYW1lIHNpZGUuXG4gICAqIEBwYXJhbSBbbWVudUlkXSAgT3B0aW9uYWxseSBnZXQgdGhlIG1lbnUgYnkgaXRzIGlkLCBvciBzaWRlLlxuICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGluc3RhbmNlIG9mIHRoZSBtZW51LCB3aGljaCBpcyB1c2VmdWwgZm9yIGNoYWluaW5nLlxuICAgKi9cbiAgZW5hYmxlKHNob3VsZEVuYWJsZTogYm9vbGVhbiwgbWVudUlkPzogc3RyaW5nKTogUHJvbWlzZTxIVE1MSW9uTWVudUVsZW1lbnQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5lbmFibGUoc2hvdWxkRW5hYmxlLCBtZW51SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGFiaWxpdHkgdG8gc3dpcGUgb3BlbiB0aGUgbWVudS5cbiAgICogQHBhcmFtIHNob3VsZEVuYWJsZSAgVHJ1ZSBpZiBpdCBzaG91bGQgYmUgc3dpcGUtYWJsZSwgZmFsc2UgaWYgbm90LlxuICAgKiBAcGFyYW0gW21lbnVJZF0gIE9wdGlvbmFsbHkgZ2V0IHRoZSBtZW51IGJ5IGl0cyBpZCwgb3Igc2lkZS5cbiAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiB0aGUgbWVudSwgd2hpY2ggaXMgdXNlZnVsIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHN3aXBlR2VzdHVyZShzaG91bGRFbmFibGU6IGJvb2xlYW4sIG1lbnVJZD86IHN0cmluZyk6IFByb21pc2U8SFRNTElvbk1lbnVFbGVtZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMubWVudUNvbnRyb2xsZXIuc3dpcGVHZXN0dXJlKHNob3VsZEVuYWJsZSwgbWVudUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gW21lbnVJZF0gT3B0aW9uYWxseSBnZXQgdGhlIG1lbnUgYnkgaXRzIGlkLCBvciBzaWRlLlxuICAgKiBAcmV0dXJuIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIG1lbnUgaXMgY3VycmVudGx5IG9wZW4sIG90aGVyd2lzZSBmYWxzZS5cbiAgICogSWYgdGhlIG1lbnVJZCBpcyBub3Qgc3BlY2lmaWVkLCBpdCByZXR1cm5zIHRydWUgaWYgQU5ZIG1lbnUgaXMgY3VycmVubHkgb3Blbi5cbiAgICovXG4gIGlzT3BlbihtZW51SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5pc09wZW4obWVudUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gW21lbnVJZF0gIE9wdGlvbmFsbHkgZ2V0IHRoZSBtZW51IGJ5IGl0cyBpZCwgb3Igc2lkZS5cbiAgICogQHJldHVybiBSZXR1cm5zIHRydWUgaWYgdGhlIG1lbnUgaXMgY3VycmVudGx5IGVuYWJsZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgICovXG4gIGlzRW5hYmxlZChtZW51SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5pc0VuYWJsZWQobWVudUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGdldCBhIG1lbnUgaW5zdGFuY2UuIElmIGEgYG1lbnVJZGAgaXMgbm90IHByb3ZpZGVkIHRoZW4gaXQnbGxcbiAgICogcmV0dXJuIHRoZSBmaXJzdCBtZW51IGZvdW5kLiBJZiBhIGBtZW51SWRgIGlzIGBsZWZ0YCBvciBgcmlnaHRgLCB0aGVuXG4gICAqIGl0J2xsIHJldHVybiB0aGUgZW5hYmxlZCBtZW51IG9uIHRoYXQgc2lkZS4gT3RoZXJ3aXNlLCBpZiBhIGBtZW51SWRgIGlzXG4gICAqIHByb3ZpZGVkLCB0aGVuIGl0J2xsIHRyeSB0byBmaW5kIHRoZSBtZW51IHVzaW5nIHRoZSBtZW51J3MgYGlkYFxuICAgKiBwcm9wZXJ0eS4gSWYgYSBtZW51IGlzIG5vdCBmb3VuZCB0aGVuIGl0J2xsIHJldHVybiBgbnVsbGAuXG4gICAqIEBwYXJhbSBbbWVudUlkXSAgT3B0aW9uYWxseSBnZXQgdGhlIG1lbnUgYnkgaXRzIGlkLCBvciBzaWRlLlxuICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGluc3RhbmNlIG9mIHRoZSBtZW51IGlmIGZvdW5kLCBvdGhlcndpc2UgYG51bGxgLlxuICAgKi9cbiAgZ2V0KG1lbnVJZD86IHN0cmluZyk6IFByb21pc2U8SFRNTElvbk1lbnVFbGVtZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMubWVudUNvbnRyb2xsZXIuZ2V0KG1lbnVJZCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiB0aGUgbWVudSBhbHJlYWR5IG9wZW5lZCwgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICovXG4gIGdldE9wZW4oKTogUHJvbWlzZTxIVE1MSW9uTWVudUVsZW1lbnQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5nZXRPcGVuKCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBtZW51IGluc3RhbmNlcy5cbiAgICovXG4gIGdldE1lbnVzKCk6IFByb21pc2U8SFRNTElvbk1lbnVFbGVtZW50W10+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5nZXRNZW51cygpO1xuICB9XG5cbiAgcmVnaXN0ZXJBbmltYXRpb24obmFtZTogc3RyaW5nLCBhbmltYXRpb246IEFuaW1hdGlvbkJ1aWxkZXIpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5yZWdpc3RlckFuaW1hdGlvbihuYW1lLCBhbmltYXRpb24pO1xuICB9XG5cbiAgaXNBbmltYXRpbmcoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubWVudUNvbnRyb2xsZXIuaXNBbmltYXRpbmcoKTtcbiAgfVxuXG4gIF9nZXRPcGVuU3luYygpOiBIVE1MSW9uTWVudUVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm1lbnVDb250cm9sbGVyLl9nZXRPcGVuU3luYygpO1xuICB9XG5cbiAgX2NyZWF0ZUFuaW1hdGlvbih0eXBlOiBzdHJpbmcsIG1lbnVDbXA6IE1lbnVJKTogUHJvbWlzZTxBbmltYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5fY3JlYXRlQW5pbWF0aW9uKHR5cGUsIG1lbnVDbXApO1xuICB9XG5cbiAgX3JlZ2lzdGVyKG1lbnU6IE1lbnVJKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMubWVudUNvbnRyb2xsZXIuX3JlZ2lzdGVyKG1lbnUpO1xuICB9XG5cbiAgX3VucmVnaXN0ZXIobWVudTogTWVudUkpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5tZW51Q29udHJvbGxlci5fdW5yZWdpc3RlcihtZW51KTtcbiAgfVxuXG4gIF9zZXRPcGVuKG1lbnU6IE1lbnVJLCBzaG91bGRPcGVuOiBib29sZWFuLCBhbmltYXRlZDogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm1lbnVDb250cm9sbGVyLl9zZXRPcGVuKG1lbnUsIHNob3VsZE9wZW4sIGFuaW1hdGVkKTtcbiAgfVxufVxuIl19
@@ -1,221 +0,0 @@
1
- import { Injectable, Optional } from '@angular/core';
2
- import { NavigationStart } from '@angular/router';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "./platform";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "@angular/router";
7
- export class NavController {
8
- constructor(platform, location, serializer, router) {
9
- this.location = location;
10
- this.serializer = serializer;
11
- this.router = router;
12
- this.direction = DEFAULT_DIRECTION;
13
- this.animated = DEFAULT_ANIMATED;
14
- this.guessDirection = 'forward';
15
- this.lastNavId = -1;
16
- // Subscribe to router events to detect direction
17
- if (router) {
18
- router.events.subscribe((ev) => {
19
- if (ev instanceof NavigationStart) {
20
- // restoredState is set if the browser back/forward button is used
21
- const id = ev.restoredState ? ev.restoredState.navigationId : ev.id;
22
- this.guessDirection = this.guessAnimation = id < this.lastNavId ? 'back' : 'forward';
23
- this.lastNavId = this.guessDirection === 'forward' ? ev.id : id;
24
- }
25
- });
26
- }
27
- // Subscribe to backButton events
28
- platform.backButton.subscribeWithPriority(0, (processNextHandler) => {
29
- this.pop();
30
- processNextHandler();
31
- });
32
- }
33
- /**
34
- * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
35
- * it's equivalent to calling `this.router.navigateByUrl()`, but it's explicit about the **direction** of the transition.
36
- *
37
- * Going **forward** means that a new page is going to be pushed to the stack of the outlet (ion-router-outlet),
38
- * and that it will show a "forward" animation by default.
39
- *
40
- * Navigating forward can also be triggered in a declarative manner by using the `[routerDirection]` directive:
41
- *
42
- * ```html
43
- * <a routerLink="/path/to/page" routerDirection="forward">Link</a>
44
- * ```
45
- */
46
- navigateForward(url, options = {}) {
47
- this.setDirection('forward', options.animated, options.animationDirection, options.animation);
48
- return this.navigate(url, options);
49
- }
50
- /**
51
- * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
52
- * it's equivalent to calling:
53
- *
54
- * ```ts
55
- * this.navController.setDirection('back');
56
- * this.router.navigateByUrl(path);
57
- * ```
58
- *
59
- * Going **back** means that all the pages in the stack until the navigated page is found will be popped,
60
- * and that it will show a "back" animation by default.
61
- *
62
- * Navigating back can also be triggered in a declarative manner by using the `[routerDirection]` directive:
63
- *
64
- * ```html
65
- * <a routerLink="/path/to/page" routerDirection="back">Link</a>
66
- * ```
67
- */
68
- navigateBack(url, options = {}) {
69
- this.setDirection('back', options.animated, options.animationDirection, options.animation);
70
- return this.navigate(url, options);
71
- }
72
- /**
73
- * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
74
- * it's equivalent to calling:
75
- *
76
- * ```ts
77
- * this.navController.setDirection('root');
78
- * this.router.navigateByUrl(path);
79
- * ```
80
- *
81
- * Going **root** means that all existing pages in the stack will be removed,
82
- * and the navigated page will become the single page in the stack.
83
- *
84
- * Navigating root can also be triggered in a declarative manner by using the `[routerDirection]` directive:
85
- *
86
- * ```html
87
- * <a routerLink="/path/to/page" routerDirection="root">Link</a>
88
- * ```
89
- */
90
- navigateRoot(url, options = {}) {
91
- this.setDirection('root', options.animated, options.animationDirection, options.animation);
92
- return this.navigate(url, options);
93
- }
94
- /**
95
- * Same as [Location](https://angular.io/api/common/Location)'s back() method.
96
- * It will use the standard `window.history.back()` under the hood, but featuring a `back` animation
97
- * by default.
98
- */
99
- back(options = { animated: true, animationDirection: 'back' }) {
100
- this.setDirection('back', options.animated, options.animationDirection, options.animation);
101
- return this.location.back();
102
- }
103
- /**
104
- * This methods goes back in the context of Ionic's stack navigation.
105
- *
106
- * It recursively finds the top active `ion-router-outlet` and calls `pop()`.
107
- * This is the recommended way to go back when you are using `ion-router-outlet`.
108
- *
109
- * Resolves to `true` if it was able to pop.
110
- */
111
- async pop() {
112
- let outlet = this.topOutlet;
113
- while (outlet) {
114
- if (await outlet.pop()) {
115
- return true;
116
- }
117
- else {
118
- outlet = outlet.parentOutlet;
119
- }
120
- }
121
- return false;
122
- }
123
- /**
124
- * This methods specifies the direction of the next navigation performed by the Angular router.
125
- *
126
- * `setDirection()` does not trigger any transition, it just sets some flags to be consumed by `ion-router-outlet`.
127
- *
128
- * It's recommended to use `navigateForward()`, `navigateBack()` and `navigateRoot()` instead of `setDirection()`.
129
- */
130
- setDirection(direction, animated, animationDirection, animationBuilder) {
131
- this.direction = direction;
132
- this.animated = getAnimation(direction, animated, animationDirection);
133
- this.animationBuilder = animationBuilder;
134
- }
135
- /**
136
- * @internal
137
- */
138
- setTopOutlet(outlet) {
139
- this.topOutlet = outlet;
140
- }
141
- /**
142
- * @internal
143
- */
144
- consumeTransition() {
145
- let direction = 'root';
146
- let animation;
147
- const animationBuilder = this.animationBuilder;
148
- if (this.direction === 'auto') {
149
- direction = this.guessDirection;
150
- animation = this.guessAnimation;
151
- }
152
- else {
153
- animation = this.animated;
154
- direction = this.direction;
155
- }
156
- this.direction = DEFAULT_DIRECTION;
157
- this.animated = DEFAULT_ANIMATED;
158
- this.animationBuilder = undefined;
159
- return {
160
- direction,
161
- animation,
162
- animationBuilder,
163
- };
164
- }
165
- navigate(url, options) {
166
- if (Array.isArray(url)) {
167
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
168
- return this.router.navigate(url, options);
169
- }
170
- else {
171
- /**
172
- * navigateByUrl ignores any properties that
173
- * would change the url, so things like queryParams
174
- * would be ignored unless we create a url tree
175
- * More Info: https://github.com/angular/angular/issues/18798
176
- */
177
- const urlTree = this.serializer.parse(url.toString());
178
- if (options.queryParams !== undefined) {
179
- urlTree.queryParams = { ...options.queryParams };
180
- }
181
- if (options.fragment !== undefined) {
182
- urlTree.fragment = options.fragment;
183
- }
184
- /**
185
- * `navigateByUrl` will still apply `NavigationExtras` properties
186
- * that do not modify the url, such as `replaceUrl` which is why
187
- * `options` is passed in here.
188
- */
189
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
190
- return this.router.navigateByUrl(urlTree, options);
191
- }
192
- }
193
- }
194
- /** @nocollapse */ NavController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NavController, deps: [{ token: i1.Platform }, { token: i2.Location }, { token: i3.UrlSerializer }, { token: i3.Router, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
195
- /** @nocollapse */ NavController.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NavController, providedIn: 'root' });
196
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NavController, decorators: [{
197
- type: Injectable,
198
- args: [{
199
- providedIn: 'root',
200
- }]
201
- }], ctorParameters: function () { return [{ type: i1.Platform }, { type: i2.Location }, { type: i3.UrlSerializer }, { type: i3.Router, decorators: [{
202
- type: Optional
203
- }] }]; } });
204
- const getAnimation = (direction, animated, animationDirection) => {
205
- if (animated === false) {
206
- return undefined;
207
- }
208
- if (animationDirection !== undefined) {
209
- return animationDirection;
210
- }
211
- if (direction === 'forward' || direction === 'back') {
212
- return direction;
213
- }
214
- else if (direction === 'root' && animated === true) {
215
- return 'forward';
216
- }
217
- return undefined;
218
- };
219
- const DEFAULT_DIRECTION = 'auto';
220
- const DEFAULT_ANIMATED = undefined;
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21tb24vc3JjL3Byb3ZpZGVycy9uYXYtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQW9ELGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQWtCcEcsTUFBTSxPQUFPLGFBQWE7SUFTeEIsWUFDRSxRQUFrQixFQUNWLFFBQWtCLEVBQ2xCLFVBQXlCLEVBQ2IsTUFBZTtRQUYzQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGVBQVUsR0FBVixVQUFVLENBQWU7UUFDYixXQUFNLEdBQU4sTUFBTSxDQUFTO1FBWDdCLGNBQVMsR0FBeUMsaUJBQWlCLENBQUM7UUFDcEUsYUFBUSxHQUFrQixnQkFBZ0IsQ0FBQztRQUUzQyxtQkFBYyxHQUFvQixTQUFTLENBQUM7UUFFNUMsY0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBUXJCLGlEQUFpRDtRQUNqRCxJQUFJLE1BQU0sRUFBRTtZQUNWLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0JBQzdCLElBQUksRUFBRSxZQUFZLGVBQWUsRUFBRTtvQkFDakMsa0VBQWtFO29CQUNsRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDcEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDckYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJ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LFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO2FBQ3JDO1lBRUQ7Ozs7ZUFJRztZQUNILG9FQUFvRTtZQUNwRSxPQUFPLElBQUksQ0FBQyxNQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNyRDtJQUNILENBQUM7OzhIQXROVSxhQUFhO2tJQUFiLGFBQWEsY0FGWixNQUFNOzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFjSSxRQUFROztBQTRNYixNQUFNLFlBQVksR0FBRyxDQUNuQixTQUEwQixFQUMxQixRQUE2QixFQUM3QixrQkFBa0QsRUFDeEIsRUFBRTtJQUM1QixJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUU7UUFDdEIsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFDRCxJQUFJLGtCQUFrQixLQUFLLFNBQVMsRUFBRTtRQUNwQyxPQUFPLGtCQUFrQixDQUFDO0tBQzNCO0lBQ0QsSUFBSSxTQUFTLEtBQUssU0FBUyxJQUFJLFNBQVMsS0FBSyxNQUFNLEVBQUU7UUFDbkQsT0FBTyxTQUFTLENBQUM7S0FDbEI7U0FBTSxJQUFJLFNBQVMsS0FBSyxNQUFNLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtRQUNwRCxPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDO0FBQ2pDLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciwgVXJsU2VyaWFsaXplciwgVXJsVHJlZSwgTmF2aWdhdGlvblN0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB0eXBlIHsgQW5pbWF0aW9uQnVpbGRlciwgTmF2RGlyZWN0aW9uLCBSb3V0ZXJEaXJlY3Rpb24gfSBmcm9tICdAaW9uaWMvY29yZS9jb21wb25lbnRzJztcblxuaW1wb3J0IHsgSW9uUm91dGVyT3V0bGV0IH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9uYXZpZ2F0aW9uL3JvdXRlci1vdXRsZXQnO1xuXG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJy4vcGxhdGZvcm0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFuaW1hdGlvbk9wdGlvbnMge1xuICBhbmltYXRlZD86IGJvb2xlYW47XG4gIGFuaW1hdGlvbj86IEFuaW1hdGlvbkJ1aWxkZXI7XG4gIGFuaW1hdGlvbkRpcmVjdGlvbj86ICdmb3J3YXJkJyB8ICdiYWNrJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOYXZpZ2F0aW9uT3B0aW9ucyBleHRlbmRzIE5hdmlnYXRpb25FeHRyYXMsIEFuaW1hdGlvbk9wdGlvbnMge31cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdkNvbnRyb2xsZXIge1xuICBwcml2YXRlIHRvcE91dGxldD86IElvblJvdXRlck91dGxldDtcbiAgcHJpdmF0ZSBkaXJlY3Rpb246ICdmb3J3YXJkJyB8ICdiYWNrJyB8ICdyb290JyB8ICdhdXRvJyA9IERFRkFVTFRfRElSRUNUSU9OO1xuICBwcml2YXRlIGFuaW1hdGVkPzogTmF2RGlyZWN0aW9uID0gREVGQVVMVF9BTklNQVRFRDtcbiAgcHJpdmF0ZSBhbmltYXRpb25CdWlsZGVyPzogQW5pbWF0aW9uQnVpbGRlcjtcbiAgcHJpdmF0ZSBndWVzc0RpcmVjdGlvbjogUm91dGVyRGlyZWN0aW9uID0gJ2ZvcndhcmQnO1xuICBwcml2YXRlIGd1ZXNzQW5pbWF0aW9uPzogTmF2RGlyZWN0aW9uO1xuICBwcml2YXRlIGxhc3ROYXZJZCA9IC0xO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIHNlcmlhbGl6ZXI6IFVybFNlcmlhbGl6ZXIsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByb3V0ZXI/OiBSb3V0ZXJcbiAgKSB7XG4gICAgLy8gU3Vic2NyaWJlIHRvIHJvdXRlciBldmVudHMgdG8gZGV0ZWN0IGRpcmVjdGlvblxuICAgIGlmIChyb3V0ZXIpIHtcbiAgICAgIHJvdXRlci5ldmVudHMuc3Vic2NyaWJlKChldikgPT4ge1xuICAgICAgICBpZiAoZXYgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgICAvLyByZXN0b3JlZFN0YXRlIGlzIHNldCBpZiB0aGUgYnJvd3NlciBiYWNrL2ZvcndhcmQgYnV0dG9uIGlzIHVzZWRcbiAgICAgICAgICBjb25zdCBpZCA9IGV2LnJlc3RvcmVkU3RhdGUgPyBldi5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZCA6IGV2LmlkO1xuICAgICAgICAgIHRoaXMuZ3Vlc3NEaXJlY3Rpb24gPSB0aGlzLmd1ZXNzQW5pbWF0aW9uID0gaWQgPCB0aGlzLmxhc3ROYXZJZCA/ICdiYWNrJyA6ICdmb3J3YXJkJztcbiAgICAgICAgICB0aGlzLmxhc3ROYXZJZCA9IHRoaXMuZ3Vlc3NEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IGV2LmlkIDogaWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFN1YnNjcmliZSB0byBiYWNrQnV0dG9uIGV2ZW50c1xuICAgIHBsYXRmb3JtLmJhY2tCdXR0b24uc3Vic2NyaWJlV2l0aFByaW9yaXR5KDAsIChwcm9jZXNzTmV4dEhhbmRsZXIpID0+IHtcbiAgICAgIHRoaXMucG9wKCk7XG4gICAgICBwcm9jZXNzTmV4dEhhbmRsZXIoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB1c2VzIEFuZ3VsYXIncyBbUm91dGVyXShodHRwczovL2FuZ3VsYXIuaW8vYXBpL3JvdXRlci9Sb3V0ZXIpIHVuZGVyIHRoZSBob29kLFxuICAgKiBpdCdzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgpYCwgYnV0IGl0J3MgZXhwbGljaXQgYWJvdXQgdGhlICoqZGlyZWN0aW9uKiogb2YgdGhlIHRyYW5zaXRpb24uXG4gICAqXG4gICAqIEdvaW5nICoqZm9yd2FyZCoqIG1lYW5zIHRoYXQgYSBuZXcgcGFnZSBpcyBnb2luZyB0byBiZSBwdXNoZWQgdG8gdGhlIHN0YWNrIG9mIHRoZSBvdXRsZXQgKGlvbi1yb3V0ZXItb3V0bGV0KSxcbiAgICogYW5kIHRoYXQgaXQgd2lsbCBzaG93IGEgXCJmb3J3YXJkXCIgYW5pbWF0aW9uIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIE5hdmlnYXRpbmcgZm9yd2FyZCBjYW4gYWxzbyBiZSB0cmlnZ2VyZWQgaW4gYSBkZWNsYXJhdGl2ZSBtYW5uZXIgYnkgdXNpbmcgdGhlIGBbcm91dGVyRGlyZWN0aW9uXWAgZGlyZWN0aXZlOlxuICAgKlxuICAgKiBgYGBodG1sXG4gICAqIDxhIHJvdXRlckxpbms9XCIvcGF0aC90by9wYWdlXCIgcm91dGVyRGlyZWN0aW9uPVwiZm9yd2FyZFwiPkxpbms8L2E+XG4gICAqIGBgYFxuICAgKi9cbiAgbmF2aWdhdGVGb3J3YXJkKHVybDogc3RyaW5nIHwgVXJsVHJlZSB8IGFueVtdLCBvcHRpb25zOiBOYXZpZ2F0aW9uT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5zZXREaXJlY3Rpb24oJ2ZvcndhcmQnLCBvcHRpb25zLmFuaW1hdGVkLCBvcHRpb25zLmFuaW1hdGlvbkRpcmVjdGlvbiwgb3B0aW9ucy5hbmltYXRpb24pO1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHVybCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgdXNlcyBBbmd1bGFyJ3MgW1JvdXRlcl0oaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9yb3V0ZXIvUm91dGVyKSB1bmRlciB0aGUgaG9vZCxcbiAgICogaXQncyBlcXVpdmFsZW50IHRvIGNhbGxpbmc6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIHRoaXMubmF2Q29udHJvbGxlci5zZXREaXJlY3Rpb24oJ2JhY2snKTtcbiAgICogdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChwYXRoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEdvaW5nICoqYmFjayoqIG1lYW5zIHRoYXQgYWxsIHRoZSBwYWdlcyBpbiB0aGUgc3RhY2sgdW50aWwgdGhlIG5hdmlnYXRlZCBwYWdlIGlzIGZvdW5kIHdpbGwgYmUgcG9wcGVkLFxuICAgKiBhbmQgdGhhdCBpdCB3aWxsIHNob3cgYSBcImJhY2tcIiBhbmltYXRpb24gYnkgZGVmYXVsdC5cbiAgICpcbiAgICogTmF2aWdhdGluZyBiYWNrIGNhbiBhbHNvIGJlIHRyaWdnZXJlZCBpbiBhIGRlY2xhcmF0aXZlIG1hbm5lciBieSB1c2luZyB0aGUgYFtyb3V0ZXJEaXJlY3Rpb25dYCBkaXJlY3RpdmU6XG4gICAqXG4gICAqIGBgYGh0bWxcbiAgICogPGEgcm91dGVyTGluaz1cIi9wYXRoL3RvL3BhZ2VcIiByb3V0ZXJEaXJlY3Rpb249XCJiYWNrXCI+TGluazwvYT5cbiAgICogYGBgXG4gICAqL1xuICBuYXZpZ2F0ZUJhY2sodXJsOiBzdHJpbmcgfCBVcmxUcmVlIHwgYW55W10sIG9wdGlvbnM6IE5hdmlnYXRpb25PcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnNldERpcmVjdGlvbignYmFjaycsIG9wdGlvbnMuYW5pbWF0ZWQsIG9wdGlvbnMuYW5pbWF0aW9uRGlyZWN0aW9uLCBvcHRpb25zLmFuaW1hdGlvbik7XG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGUodXJsLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB1c2VzIEFuZ3VsYXIncyBbUm91dGVyXShodHRwczovL2FuZ3VsYXIuaW8vYXBpL3JvdXRlci9Sb3V0ZXIpIHVuZGVyIHRoZSBob29kLFxuICAgKiBpdCdzIGVxdWl2YWxlbnQgdG8gY2FsbGluZzpcbiAgICpcbiAgICogYGBgdHNcbiAgICogdGhpcy5uYXZDb250cm9sbGVyLnNldERpcmVjdGlvbigncm9vdCcpO1xuICAgKiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHBhdGgpO1xuICAgKiBgYGBcbiAgICpcbiAgICogR29pbmcgKipyb290KiogbWVhbnMgdGhhdCBhbGwgZXhpc3RpbmcgcGFnZXMgaW4gdGhlIHN0YWNrIHdpbGwgYmUgcmVtb3ZlZCxcbiAgICogYW5kIHRoZSBuYXZpZ2F0ZWQgcGFnZSB3aWxsIGJlY29tZSB0aGUgc2luZ2xlIHBhZ2UgaW4gdGhlIHN0YWNrLlxuICAgKlxuICAgKiBOYXZpZ2F0aW5nIHJvb3QgY2FuIGFsc28gYmUgdHJpZ2dlcmVkIGluIGEgZGVjbGFyYXRpdmUgbWFubmVyIGJ5IHVzaW5nIHRoZSBgW3JvdXRlckRpcmVjdGlvbl1gIGRpcmVjdGl2ZTpcbiAgICpcbiAgICogYGBgaHRtbFxuICAgKiA8YSByb3V0ZXJMaW5rPVwiL3BhdGgvdG8vcGFnZVwiIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIj5MaW5rPC9hPlxuICAgKiBgYGBcbiAgICovXG4gIG5hdmlnYXRlUm9vdCh1cmw6IHN0cmluZyB8IFVybFRyZWUgfCBhbnlbXSwgb3B0aW9uczogTmF2aWdhdGlvbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMuc2V0RGlyZWN0aW9uKCdyb290Jywgb3B0aW9ucy5hbmltYXRlZCwgb3B0aW9ucy5hbmltYXRpb25EaXJlY3Rpb24sIG9wdGlvbnMuYW5pbWF0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh1cmwsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbWUgYXMgW0xvY2F0aW9uXShodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvbW1vbi9Mb2NhdGlvbikncyBiYWNrKCkgbWV0aG9kLlxuICAgKiBJdCB3aWxsIHVzZSB0aGUgc3RhbmRhcmQgYHdpbmRvdy5oaXN0b3J5LmJhY2soKWAgdW5kZXIgdGhlIGhvb2QsIGJ1dCBmZWF0dXJpbmcgYSBgYmFja2AgYW5pbWF0aW9uXG4gICAqIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBiYWNrKG9wdGlvbnM6IEFuaW1hdGlvbk9wdGlvbnMgPSB7IGFuaW1hdGVkOiB0cnVlLCBhbmltYXRpb25EaXJlY3Rpb246ICdiYWNrJyB9KTogdm9pZCB7XG4gICAgdGhpcy5zZXREaXJlY3Rpb24oJ2JhY2snLCBvcHRpb25zLmFuaW1hdGVkLCBvcHRpb25zLmFuaW1hdGlvbkRpcmVjdGlvbiwgb3B0aW9ucy5hbmltYXRpb24pO1xuICAgIHJldHVybiB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZHMgZ29lcyBiYWNrIGluIHRoZSBjb250ZXh0IG9mIElvbmljJ3Mgc3RhY2sgbmF2aWdhdGlvbi5cbiAgICpcbiAgICogSXQgcmVjdXJzaXZlbHkgZmluZHMgdGhlIHRvcCBhY3RpdmUgYGlvbi1yb3V0ZXItb3V0bGV0YCBhbmQgY2FsbHMgYHBvcCgpYC5cbiAgICogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGdvIGJhY2sgd2hlbiB5b3UgYXJlIHVzaW5nIGBpb24tcm91dGVyLW91dGxldGAuXG4gICAqXG4gICAqIFJlc29sdmVzIHRvIGB0cnVlYCBpZiBpdCB3YXMgYWJsZSB0byBwb3AuXG4gICAqL1xuICBhc3luYyBwb3AoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IG91dGxldCA9IHRoaXMudG9wT3V0bGV0O1xuXG4gICAgd2hpbGUgKG91dGxldCkge1xuICAgICAgaWYgKGF3YWl0IG91dGxldC5wb3AoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dGxldCA9IG91dGxldC5wYXJlbnRPdXRsZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kcyBzcGVjaWZpZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgbmV4dCBuYXZpZ2F0aW9uIHBlcmZvcm1lZCBieSB0aGUgQW5ndWxhciByb3V0ZXIuXG4gICAqXG4gICAqIGBzZXREaXJlY3Rpb24oKWAgZG9lcyBub3QgdHJpZ2dlciBhbnkgdHJhbnNpdGlvbiwgaXQganVzdCBzZXRzIHNvbWUgZmxhZ3MgdG8gYmUgY29uc3VtZWQgYnkgYGlvbi1yb3V0ZXItb3V0bGV0YC5cbiAgICpcbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgYG5hdmlnYXRlRm9yd2FyZCgpYCwgYG5hdmlnYXRlQmFjaygpYCBhbmQgYG5hdmlnYXRlUm9vdCgpYCBpbnN0ZWFkIG9mIGBzZXREaXJlY3Rpb24oKWAuXG4gICAqL1xuICBzZXREaXJlY3Rpb24oXG4gICAgZGlyZWN0aW9uOiBSb3V0ZXJEaXJlY3Rpb24sXG4gICAgYW5pbWF0ZWQ/OiBib29sZWFuLFxuICAgIGFuaW1hdGlvbkRpcmVjdGlvbj86ICdmb3J3YXJkJyB8ICdiYWNrJyxcbiAgICBhbmltYXRpb25CdWlsZGVyPzogQW5pbWF0aW9uQnVpbGRlclxuICApOiB2b2lkIHtcbiAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICB0aGlzLmFuaW1hdGVkID0gZ2V0QW5pbWF0aW9uKGRpcmVjdGlvbiwgYW5pbWF0ZWQsIGFuaW1hdGlvbkRpcmVjdGlvbik7XG4gICAgdGhpcy5hbmltYXRpb25CdWlsZGVyID0gYW5pbWF0aW9uQnVpbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHNldFRvcE91dGxldChvdXRsZXQ6IElvblJvdXRlck91dGxldCk6IHZvaWQge1xuICAgIHRoaXMudG9wT3V0bGV0ID0gb3V0bGV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3VtZVRyYW5zaXRpb24oKToge1xuICAgIGRpcmVjdGlvbjogUm91dGVyRGlyZWN0aW9uO1xuICAgIGFuaW1hdGlvbjogTmF2RGlyZWN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIGFuaW1hdGlvbkJ1aWxkZXI6IEFuaW1hdGlvbkJ1aWxkZXIgfCB1bmRlZmluZWQ7XG4gIH0ge1xuICAgIGxldCBkaXJlY3Rpb246IFJvdXRlckRpcmVjdGlvbiA9ICdyb290JztcbiAgICBsZXQgYW5pbWF0aW9uOiBOYXZEaXJlY3Rpb24gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYW5pbWF0aW9uQnVpbGRlciA9IHRoaXMuYW5pbWF0aW9uQnVpbGRlcjtcblxuICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ2F1dG8nKSB7XG4gICAgICBkaXJlY3Rpb24gPSB0aGlzLmd1ZXNzRGlyZWN0aW9uO1xuICAgICAgYW5pbWF0aW9uID0gdGhpcy5ndWVzc0FuaW1hdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5pbWF0aW9uID0gdGhpcy5hbmltYXRlZDtcbiAgICAgIGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uO1xuICAgIH1cbiAgICB0aGlzLmRpcmVjdGlvbiA9IERFRkFVTFRfRElSRUNUSU9OO1xuICAgIHRoaXMuYW5pbWF0ZWQgPSBERUZBVUxUX0FOSU1BVEVEO1xuICAgIHRoaXMuYW5pbWF0aW9uQnVpbGRlciA9IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBhbmltYXRpb24sXG4gICAgICBhbmltYXRpb25CdWlsZGVyLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlKHVybDogc3RyaW5nIHwgVXJsVHJlZSB8IGFueVtdLCBvcHRpb25zOiBOYXZpZ2F0aW9uT3B0aW9ucykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHVybCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIhLm5hdmlnYXRlKHVybCwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qKlxuICAgICAgICogbmF2aWdhdGVCeVVybCBpZ25vcmVzIGFueSBwcm9wZXJ0aWVzIHRoYXRcbiAgICAgICAqIHdvdWxkIGNoYW5nZSB0aGUgdXJsLCBzbyB0aGluZ3MgbGlrZSBxdWVyeVBhcmFtc1xuICAgICAgICogd291bGQgYmUgaWdub3JlZCB1bmxlc3Mgd2UgY3JlYXRlIGEgdXJsIHRyZWVcbiAgICAgICAqIE1vcmUgSW5mbzogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTg3OThcbiAgICAgICAqL1xuICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuc2VyaWFsaXplci5wYXJzZSh1cmwudG9TdHJpbmcoKSk7XG5cbiAgICAgIGlmIChvcHRpb25zLnF1ZXJ5UGFyYW1zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXJsVHJlZS5xdWVyeVBhcmFtcyA9IHsgLi4ub3B0aW9ucy5xdWVyeVBhcmFtcyB9O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVybFRyZWUuZnJhZ21lbnQgPSBvcHRpb25zLmZyYWdtZW50O1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIGBuYXZpZ2F0ZUJ5VXJsYCB3aWxsIHN0aWxsIGFwcGx5IGBOYXZpZ2F0aW9uRXh0cmFzYCBwcm9wZXJ0aWVzXG4gICAgICAgKiB0aGF0IGRvIG5vdCBtb2RpZnkgdGhlIHVybCwgc3VjaCBhcyBgcmVwbGFjZVVybGAgd2hpY2ggaXMgd2h5XG4gICAgICAgKiBgb3B0aW9uc2AgaXMgcGFzc2VkIGluIGhlcmUuXG4gICAgICAgKi9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIhLm5hdmlnYXRlQnlVcmwodXJsVHJlZSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGdldEFuaW1hdGlvbiA9IChcbiAgZGlyZWN0aW9uOiBSb3V0ZXJEaXJlY3Rpb24sXG4gIGFuaW1hdGVkOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBhbmltYXRpb25EaXJlY3Rpb246ICdmb3J3YXJkJyB8ICdiYWNrJyB8IHVuZGVmaW5lZFxuKTogTmF2RGlyZWN0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKGFuaW1hdGVkID09PSBmYWxzZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGFuaW1hdGlvbkRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFuaW1hdGlvbkRpcmVjdGlvbjtcbiAgfVxuICBpZiAoZGlyZWN0aW9uID09PSAnZm9yd2FyZCcgfHwgZGlyZWN0aW9uID09PSAnYmFjaycpIHtcbiAgICByZXR1cm4gZGlyZWN0aW9uO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3Jvb3QnICYmIGFuaW1hdGVkID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdmb3J3YXJkJztcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgREVGQVVMVF9ESVJFQ1RJT04gPSAnYXV0byc7XG5jb25zdCBERUZBVUxUX0FOSU1BVEVEID0gdW5kZWZpbmVkO1xuIl19