@skyux/core 5.0.0-beta.9 → 5.1.2

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/LICENSE +21 -0
  2. package/bundles/skyux-core-testing.umd.js +363 -234
  3. package/bundles/skyux-core-testing.umd.js.map +1 -1
  4. package/bundles/skyux-core.umd.js +3320 -2917
  5. package/bundles/skyux-core.umd.js.map +1 -1
  6. package/documentation.json +8855 -0
  7. package/esm2015/modules/adapter-service/adapter.module.js +11 -8
  8. package/esm2015/modules/adapter-service/adapter.service.js +14 -15
  9. package/esm2015/modules/adapter-service/focusable-children-options.js +2 -1
  10. package/esm2015/modules/affix/affix-auto-fit-context.js +1 -1
  11. package/esm2015/modules/affix/affix-config.js +2 -1
  12. package/esm2015/modules/affix/affix-horizontal-alignment.js +2 -1
  13. package/esm2015/modules/affix/affix-offset-change.js +2 -1
  14. package/esm2015/modules/affix/affix-offset.js +2 -1
  15. package/esm2015/modules/affix/affix-placement-change.js +2 -1
  16. package/esm2015/modules/affix/affix-placement.js +2 -1
  17. package/esm2015/modules/affix/affix-utils.js +1 -1
  18. package/esm2015/modules/affix/affix-vertical-alignment.js +2 -1
  19. package/esm2015/modules/affix/affix.directive.js +36 -49
  20. package/esm2015/modules/affix/affix.module.js +22 -17
  21. package/esm2015/modules/affix/affix.service.js +12 -15
  22. package/esm2015/modules/affix/affixer.js +1 -1
  23. package/esm2015/modules/affix/dom-utils.js +1 -1
  24. package/esm2015/modules/dock/dock-dom-adapter.service.js +23 -15
  25. package/esm2015/modules/dock/dock-insert-component-config.js +2 -1
  26. package/esm2015/modules/dock/dock-item-config.js +2 -1
  27. package/esm2015/modules/dock/dock-item-reference.js +2 -1
  28. package/esm2015/modules/dock/dock-item.js +1 -1
  29. package/esm2015/modules/dock/dock-location.js +19 -0
  30. package/esm2015/modules/dock/dock-options.js +2 -0
  31. package/esm2015/modules/dock/dock.component.js +48 -33
  32. package/esm2015/modules/dock/dock.module.js +28 -17
  33. package/esm2015/modules/dock/dock.service.js +44 -16
  34. package/esm2015/modules/dock/sort-by-stack-order.js +1 -1
  35. package/esm2015/modules/dynamic-component/dynamic-component-location.js +15 -3
  36. package/esm2015/modules/dynamic-component/dynamic-component-options.js +2 -1
  37. package/esm2015/modules/dynamic-component/dynamic-component.module.js +11 -8
  38. package/esm2015/modules/dynamic-component/dynamic-component.service.js +24 -23
  39. package/esm2015/modules/format/app-format.js +11 -11
  40. package/esm2015/modules/id/id.directive.js +14 -16
  41. package/esm2015/modules/id/id.module.js +18 -15
  42. package/esm2015/modules/log/log.module.js +11 -8
  43. package/esm2015/modules/log/log.service.js +11 -11
  44. package/esm2015/modules/media-query/media-breakpoints.js +1 -1
  45. package/esm2015/modules/media-query/media-query-listener.js +2 -1
  46. package/esm2015/modules/media-query/media-query.module.js +11 -8
  47. package/esm2015/modules/media-query/media-query.service.js +16 -20
  48. package/esm2015/modules/mutation/mutation-observer-service.js +11 -11
  49. package/esm2015/modules/numeric/numeric-symbol.js +2 -1
  50. package/esm2015/modules/numeric/numeric.module.js +30 -21
  51. package/esm2015/modules/numeric/numeric.options.js +6 -1
  52. package/esm2015/modules/numeric/numeric.pipe.js +35 -21
  53. package/esm2015/modules/numeric/numeric.service.js +13 -16
  54. package/esm2015/modules/overlay/overlay-adapter.service.js +13 -15
  55. package/esm2015/modules/overlay/overlay-config.js +2 -1
  56. package/esm2015/modules/overlay/overlay-context.js +1 -1
  57. package/esm2015/modules/overlay/overlay-instance.js +1 -1
  58. package/esm2015/modules/overlay/overlay.component.js +41 -44
  59. package/esm2015/modules/overlay/overlay.module.js +22 -17
  60. package/esm2015/modules/overlay/overlay.service.js +18 -26
  61. package/esm2015/modules/percent-pipe/percent-pipe.module.js +30 -21
  62. package/esm2015/modules/percent-pipe/percent.pipe.js +15 -15
  63. package/esm2015/modules/scrollable-host/scrollable-host.service.js +83 -0
  64. package/esm2015/modules/shared/number-format/number-format-utility.js +4 -3
  65. package/esm2015/modules/shared/sky-core-resources.module.js +41 -0
  66. package/esm2015/modules/title/set-title-args.js +2 -1
  67. package/esm2015/modules/title/title.service.js +11 -15
  68. package/esm2015/modules/ui-config/ui-config.service.js +11 -11
  69. package/esm2015/modules/viewkeeper/viewkeeper-boundary-info.js +2 -1
  70. package/esm2015/modules/viewkeeper/viewkeeper-fixed-styles.js +2 -1
  71. package/esm2015/modules/viewkeeper/viewkeeper-host-options.js +9 -8
  72. package/esm2015/modules/viewkeeper/viewkeeper-offset.js +2 -1
  73. package/esm2015/modules/viewkeeper/viewkeeper-options.js +2 -1
  74. package/esm2015/modules/viewkeeper/viewkeeper.directive.js +47 -32
  75. package/esm2015/modules/viewkeeper/viewkeeper.js +16 -11
  76. package/esm2015/modules/viewkeeper/viewkeeper.module.js +18 -15
  77. package/esm2015/modules/viewkeeper/viewkeeper.service.js +13 -16
  78. package/esm2015/modules/window/window-ref.js +11 -11
  79. package/esm2015/public-api.js +60 -0
  80. package/esm2015/skyux-core.js +2 -12
  81. package/esm2015/testing/mock-media-query.service.js +9 -8
  82. package/esm2015/testing/mock-ui-config.service.js +9 -8
  83. package/esm2015/testing/public-api.js +3 -0
  84. package/esm2015/testing/skyux-core-testing.js +2 -2
  85. package/fesm2015/skyux-core-testing.js +15 -11
  86. package/fesm2015/skyux-core-testing.js.map +1 -1
  87. package/fesm2015/skyux-core.js +847 -574
  88. package/fesm2015/skyux-core.js.map +1 -1
  89. package/modules/adapter-service/adapter.module.d.ts +4 -0
  90. package/modules/adapter-service/adapter.service.d.ts +3 -0
  91. package/modules/affix/affix.directive.d.ts +3 -0
  92. package/modules/affix/affix.module.d.ts +6 -0
  93. package/modules/affix/affix.service.d.ts +3 -0
  94. package/modules/dock/dock-dom-adapter.service.d.ts +6 -0
  95. package/modules/dock/dock-location.d.ts +17 -0
  96. package/modules/dock/dock-options.d.ts +18 -0
  97. package/modules/dock/dock.component.d.ts +8 -3
  98. package/modules/dock/dock.module.d.ts +6 -0
  99. package/modules/dock/dock.service.d.ts +14 -1
  100. package/modules/dynamic-component/dynamic-component-location.d.ts +14 -2
  101. package/modules/dynamic-component/dynamic-component-options.d.ts +4 -0
  102. package/modules/dynamic-component/dynamic-component.module.d.ts +4 -0
  103. package/modules/dynamic-component/dynamic-component.service.d.ts +3 -0
  104. package/modules/format/app-format.d.ts +3 -0
  105. package/modules/id/id.directive.d.ts +3 -0
  106. package/modules/id/id.module.d.ts +5 -0
  107. package/modules/log/log.module.d.ts +4 -0
  108. package/modules/log/log.service.d.ts +3 -0
  109. package/modules/media-query/media-query.module.d.ts +4 -0
  110. package/modules/media-query/media-query.service.d.ts +3 -0
  111. package/modules/mutation/mutation-observer-service.d.ts +3 -0
  112. package/modules/numeric/numeric.module.d.ts +7 -0
  113. package/modules/numeric/numeric.options.d.ts +5 -0
  114. package/modules/numeric/numeric.pipe.d.ts +11 -2
  115. package/modules/numeric/numeric.service.d.ts +3 -0
  116. package/modules/overlay/overlay-adapter.service.d.ts +3 -0
  117. package/modules/overlay/overlay.component.d.ts +3 -0
  118. package/modules/overlay/overlay.module.d.ts +6 -0
  119. package/modules/overlay/overlay.service.d.ts +3 -0
  120. package/modules/percent-pipe/percent-pipe.module.d.ts +7 -0
  121. package/modules/percent-pipe/percent.pipe.d.ts +3 -0
  122. package/modules/scrollable-host/scrollable-host.service.d.ts +16 -0
  123. package/modules/shared/number-format/number-format-utility.d.ts +1 -1
  124. package/modules/shared/sky-core-resources.module.d.ts +14 -0
  125. package/modules/title/title.service.d.ts +3 -0
  126. package/modules/ui-config/ui-config.service.d.ts +3 -0
  127. package/modules/viewkeeper/viewkeeper-host-options.d.ts +4 -0
  128. package/modules/viewkeeper/viewkeeper-options.d.ts +5 -0
  129. package/modules/viewkeeper/viewkeeper.d.ts +1 -0
  130. package/modules/viewkeeper/viewkeeper.directive.d.ts +7 -1
  131. package/modules/viewkeeper/viewkeeper.module.d.ts +5 -0
  132. package/modules/viewkeeper/viewkeeper.service.d.ts +3 -0
  133. package/modules/window/window-ref.d.ts +3 -0
  134. package/package.json +8 -23
  135. package/{public_api.d.ts → public-api.d.ts} +6 -0
  136. package/skyux-core.d.ts +2 -11
  137. package/testing/mock-media-query.service.d.ts +3 -0
  138. package/testing/mock-ui-config.service.d.ts +3 -0
  139. package/testing/package.json +2 -5
  140. package/testing/{public_api.d.ts → public-api.d.ts} +0 -0
  141. package/testing/skyux-core-testing.d.ts +2 -1
  142. package/CHANGELOG.md +0 -328
  143. package/bundles/skyux-core-testing.umd.min.js +0 -16
  144. package/bundles/skyux-core-testing.umd.min.js.map +0 -1
  145. package/bundles/skyux-core.umd.min.js +0 -16
  146. package/bundles/skyux-core.umd.min.js.map +0 -1
  147. package/esm2015/modules/shared/core-resources.module.js +0 -17
  148. package/esm2015/plugin-resources/core-resources-provider.js +0 -16
  149. package/esm2015/public_api.js +0 -36
  150. package/esm2015/testing/public_api.js +0 -3
  151. package/esm5/modules/adapter-service/adapter.module.js +0 -16
  152. package/esm5/modules/adapter-service/adapter.service.js +0 -221
  153. package/esm5/modules/adapter-service/focusable-children-options.js +0 -1
  154. package/esm5/modules/affix/affix-auto-fit-context.js +0 -12
  155. package/esm5/modules/affix/affix-config.js +0 -1
  156. package/esm5/modules/affix/affix-horizontal-alignment.js +0 -1
  157. package/esm5/modules/affix/affix-offset-change.js +0 -1
  158. package/esm5/modules/affix/affix-offset.js +0 -1
  159. package/esm5/modules/affix/affix-placement-change.js +0 -1
  160. package/esm5/modules/affix/affix-placement.js +0 -1
  161. package/esm5/modules/affix/affix-utils.js +0 -23
  162. package/esm5/modules/affix/affix-vertical-alignment.js +0 -1
  163. package/esm5/modules/affix/affix.directive.js +0 -113
  164. package/esm5/modules/affix/affix.module.js +0 -24
  165. package/esm5/modules/affix/affix.service.js +0 -28
  166. package/esm5/modules/affix/affixer.js +0 -368
  167. package/esm5/modules/affix/dom-utils.js +0 -79
  168. package/esm5/modules/dock/dock-dom-adapter.service.js +0 -72
  169. package/esm5/modules/dock/dock-insert-component-config.js +0 -1
  170. package/esm5/modules/dock/dock-item-config.js +0 -1
  171. package/esm5/modules/dock/dock-item-reference.js +0 -1
  172. package/esm5/modules/dock/dock-item.js +0 -35
  173. package/esm5/modules/dock/dock.component.js +0 -87
  174. package/esm5/modules/dock/dock.module.js +0 -24
  175. package/esm5/modules/dock/dock.service.js +0 -69
  176. package/esm5/modules/dock/sort-by-stack-order.js +0 -13
  177. package/esm5/modules/dynamic-component/dynamic-component-location.js +0 -15
  178. package/esm5/modules/dynamic-component/dynamic-component-options.js +0 -1
  179. package/esm5/modules/dynamic-component/dynamic-component.module.js +0 -17
  180. package/esm5/modules/dynamic-component/dynamic-component.service.js +0 -82
  181. package/esm5/modules/format/app-format.js +0 -25
  182. package/esm5/modules/id/id.directive.js +0 -41
  183. package/esm5/modules/id/id.module.js +0 -20
  184. package/esm5/modules/log/log.module.js +0 -16
  185. package/esm5/modules/log/log.service.js +0 -29
  186. package/esm5/modules/media-query/media-breakpoints.js +0 -20
  187. package/esm5/modules/media-query/media-query-listener.js +0 -1
  188. package/esm5/modules/media-query/media-query.module.js +0 -16
  189. package/esm5/modules/media-query/media-query.service.js +0 -128
  190. package/esm5/modules/mutation/mutation-observer-service.js +0 -19
  191. package/esm5/modules/numeric/numeric-symbol.js +0 -1
  192. package/esm5/modules/numeric/numeric.module.js +0 -29
  193. package/esm5/modules/numeric/numeric.options.js +0 -38
  194. package/esm5/modules/numeric/numeric.pipe.js +0 -70
  195. package/esm5/modules/numeric/numeric.service.js +0 -196
  196. package/esm5/modules/overlay/overlay-adapter.service.js +0 -44
  197. package/esm5/modules/overlay/overlay-config.js +0 -1
  198. package/esm5/modules/overlay/overlay-context.js +0 -12
  199. package/esm5/modules/overlay/overlay-instance.js +0 -66
  200. package/esm5/modules/overlay/overlay.component.js +0 -168
  201. package/esm5/modules/overlay/overlay.module.js +0 -24
  202. package/esm5/modules/overlay/overlay.service.js +0 -128
  203. package/esm5/modules/percent-pipe/percent-pipe.module.js +0 -29
  204. package/esm5/modules/percent-pipe/percent.pipe.js +0 -49
  205. package/esm5/modules/shared/core-resources.module.js +0 -20
  206. package/esm5/modules/shared/number-format/number-format-utility.js +0 -75
  207. package/esm5/modules/title/set-title-args.js +0 -1
  208. package/esm5/modules/title/title.service.js +0 -35
  209. package/esm5/modules/ui-config/ui-config.service.js +0 -24
  210. package/esm5/modules/viewkeeper/viewkeeper-boundary-info.js +0 -1
  211. package/esm5/modules/viewkeeper/viewkeeper-fixed-styles.js +0 -1
  212. package/esm5/modules/viewkeeper/viewkeeper-host-options.js +0 -12
  213. package/esm5/modules/viewkeeper/viewkeeper-offset.js +0 -1
  214. package/esm5/modules/viewkeeper/viewkeeper-options.js +0 -1
  215. package/esm5/modules/viewkeeper/viewkeeper.directive.js +0 -134
  216. package/esm5/modules/viewkeeper/viewkeeper.js +0 -219
  217. package/esm5/modules/viewkeeper/viewkeeper.module.js +0 -20
  218. package/esm5/modules/viewkeeper/viewkeeper.service.js +0 -42
  219. package/esm5/modules/window/window-ref.js +0 -37
  220. package/esm5/plugin-resources/core-resources-provider.js +0 -17
  221. package/esm5/public_api.js +0 -36
  222. package/esm5/skyux-core.js +0 -15
  223. package/esm5/testing/mock-media-query.service.js +0 -47
  224. package/esm5/testing/mock-ui-config.service.js +0 -66
  225. package/esm5/testing/public_api.js +0 -3
  226. package/esm5/testing/skyux-core-testing.js +0 -5
  227. package/fesm5/skyux-core-testing.js +0 -114
  228. package/fesm5/skyux-core-testing.js.map +0 -1
  229. package/fesm5/skyux-core.js +0 -2903
  230. package/fesm5/skyux-core.js.map +0 -1
  231. package/modules/shared/core-resources.module.d.ts +0 -2
  232. package/plugin-resources/core-resources-provider.d.ts +0 -5
  233. package/skyux-core.metadata.json +0 -1
  234. package/src/assets/locales/resources_en_US.json +0 -18
  235. package/testing/skyux-core-testing.metadata.json +0 -1
@@ -1,368 +0,0 @@
1
- import { __assign } from "tslib";
2
- import { fromEvent, Subject } from 'rxjs';
3
- import { SkyAffixAutoFitContext } from './affix-auto-fit-context';
4
- import { getInversePlacement, getNextPlacement } from './affix-utils';
5
- import { getElementOffset, getOverflowParents, isOffsetFullyVisibleWithinParent, isOffsetPartiallyVisibleWithinParent } from './dom-utils';
6
- var DEFAULT_AFFIX_CONFIG = {
7
- autoFitContext: SkyAffixAutoFitContext.OverflowParent,
8
- enableAutoFit: false,
9
- horizontalAlignment: 'center',
10
- isSticky: false,
11
- placement: 'above'
12
- };
13
- var SkyAffixer = /** @class */ (function () {
14
- function SkyAffixer(affixedElement, renderer) {
15
- this.affixedElement = affixedElement;
16
- this.renderer = renderer;
17
- this._offsetChange = new Subject();
18
- this._overflowScroll = new Subject();
19
- this._placementChange = new Subject();
20
- }
21
- Object.defineProperty(SkyAffixer.prototype, "offsetChange", {
22
- /**
23
- * Fires when the affixed element's offset changes.
24
- */
25
- get: function () {
26
- return this._offsetChange.asObservable();
27
- },
28
- enumerable: true,
29
- configurable: true
30
- });
31
- Object.defineProperty(SkyAffixer.prototype, "overflowScroll", {
32
- /**
33
- * Fires when the base element's nearest overflow parent is scrolling. This is useful if you need
34
- * to perform an additional action during the scroll event but don't want to generate another
35
- * event listener.
36
- */
37
- get: function () {
38
- return this._overflowScroll.asObservable();
39
- },
40
- enumerable: true,
41
- configurable: true
42
- });
43
- Object.defineProperty(SkyAffixer.prototype, "placementChange", {
44
- /**
45
- * Fires when the placement value changes. A `null` value indicates that a suitable
46
- * placement could not be found.
47
- */
48
- get: function () {
49
- return this._placementChange.asObservable();
50
- },
51
- enumerable: true,
52
- configurable: true
53
- });
54
- Object.defineProperty(SkyAffixer.prototype, "config", {
55
- get: function () {
56
- return this._config;
57
- },
58
- set: function (value) {
59
- var merged = __assign(__assign({}, DEFAULT_AFFIX_CONFIG), value);
60
- // Make sure none of the values are undefined.
61
- Object.keys(merged).forEach(function (k) {
62
- if (merged[k] === undefined) {
63
- merged[k] = DEFAULT_AFFIX_CONFIG[k];
64
- }
65
- });
66
- this._config = merged;
67
- },
68
- enumerable: true,
69
- configurable: true
70
- });
71
- /**
72
- * Affixes an element to a base element.
73
- * @param baseElement The base element.
74
- * @param config Configuration for the affix action.
75
- */
76
- SkyAffixer.prototype.affixTo = function (baseElement, config) {
77
- this.reset();
78
- this.config = config;
79
- this.baseElement = baseElement;
80
- this.overflowParents = getOverflowParents(baseElement);
81
- this.affix();
82
- if (this.config.isSticky) {
83
- this.addScrollListeners();
84
- this.addResizeListener();
85
- }
86
- };
87
- /**
88
- * Re-runs the affix calculation.
89
- */
90
- SkyAffixer.prototype.reaffix = function () {
91
- // Reset current placement to preferred placement.
92
- this.currentPlacement = this.config.placement;
93
- this.affix();
94
- };
95
- /**
96
- * Destroys the affixer.
97
- */
98
- SkyAffixer.prototype.destroy = function () {
99
- this.reset();
100
- this._placementChange.complete();
101
- this._offsetChange.complete();
102
- this._overflowScroll.complete();
103
- this._offsetChange =
104
- this._placementChange =
105
- this._overflowScroll = undefined;
106
- };
107
- SkyAffixer.prototype.affix = function () {
108
- this.baseRect = this.baseElement.getBoundingClientRect();
109
- this.affixedRect = this.affixedElement.getBoundingClientRect();
110
- var offset = this.getOffset();
111
- if (this.isNewOffset(offset)) {
112
- this.renderer.setStyle(this.affixedElement, 'top', offset.top + "px");
113
- this.renderer.setStyle(this.affixedElement, 'left', offset.left + "px");
114
- this._offsetChange.next({ offset: offset });
115
- }
116
- };
117
- SkyAffixer.prototype.getOffset = function () {
118
- var parent = this.getAutoFitContextParent();
119
- var maxAttempts = 4;
120
- var attempts = 0;
121
- var isAffixedElementFullyVisible = false;
122
- var offset;
123
- var placement = this.config.placement;
124
- do {
125
- offset = this.getPreferredOffset(placement);
126
- isAffixedElementFullyVisible = isOffsetFullyVisibleWithinParent(parent, offset, this.config.autoFitOverflowOffset);
127
- if (!this.config.enableAutoFit) {
128
- break;
129
- }
130
- if (!isAffixedElementFullyVisible) {
131
- placement = (attempts % 2 === 0)
132
- ? getInversePlacement(placement)
133
- : getNextPlacement(placement);
134
- }
135
- attempts++;
136
- } while (!isAffixedElementFullyVisible && attempts < maxAttempts);
137
- if (isAffixedElementFullyVisible) {
138
- if (this.isBaseElementVisible()) {
139
- this.notifyPlacementChange(placement);
140
- }
141
- else {
142
- /* tslint:disable-next-line:no-null-keyword */
143
- this.notifyPlacementChange(null);
144
- }
145
- return offset;
146
- }
147
- if (this.config.enableAutoFit) {
148
- /* tslint:disable-next-line:no-null-keyword */
149
- this.notifyPlacementChange(null);
150
- }
151
- // No suitable placement was found, so revert to preferred placement.
152
- return this.getPreferredOffset(this.config.placement);
153
- };
154
- SkyAffixer.prototype.getPreferredOffset = function (placement) {
155
- var affixedRect = this.affixedRect;
156
- var baseRect = this.baseRect;
157
- var horizontalAlignment = this.config.horizontalAlignment;
158
- var verticalAlignment = this.config.verticalAlignment;
159
- var enableAutoFit = this.config.enableAutoFit;
160
- var top;
161
- var left;
162
- if (placement === 'above' || placement === 'below') {
163
- if (placement === 'above') {
164
- top = baseRect.top - affixedRect.height;
165
- switch (verticalAlignment) {
166
- case 'top':
167
- top = top + affixedRect.height;
168
- break;
169
- case 'middle':
170
- top = top + (affixedRect.height / 2);
171
- break;
172
- case 'bottom':
173
- default:
174
- break;
175
- }
176
- }
177
- else {
178
- top = baseRect.bottom;
179
- switch (verticalAlignment) {
180
- case 'top':
181
- default:
182
- break;
183
- case 'middle':
184
- top = top - (affixedRect.height / 2);
185
- break;
186
- case 'bottom':
187
- top = top - affixedRect.height;
188
- break;
189
- }
190
- }
191
- switch (horizontalAlignment) {
192
- case 'left':
193
- left = baseRect.left;
194
- break;
195
- case 'center':
196
- default:
197
- left = baseRect.left + (baseRect.width / 2) - (affixedRect.width / 2);
198
- break;
199
- case 'right':
200
- left = baseRect.right - affixedRect.width;
201
- break;
202
- }
203
- }
204
- else {
205
- if (placement === 'left') {
206
- left = baseRect.left - affixedRect.width;
207
- }
208
- else {
209
- left = baseRect.right;
210
- }
211
- switch (verticalAlignment) {
212
- case 'top':
213
- top = baseRect.top;
214
- break;
215
- case 'middle':
216
- default:
217
- top = baseRect.top + (baseRect.height / 2) - (affixedRect.height / 2);
218
- break;
219
- case 'bottom':
220
- top = baseRect.bottom - affixedRect.height;
221
- break;
222
- }
223
- }
224
- var offset = { left: left, top: top };
225
- if (enableAutoFit) {
226
- offset = this.adjustOffsetToOverflowParent(__assign({}, offset), placement);
227
- }
228
- offset.bottom = offset.top + affixedRect.height;
229
- offset.right = offset.left + affixedRect.width;
230
- return offset;
231
- };
232
- /**
233
- * Slightly adjust the offset to fit within the scroll parent's boundaries if
234
- * the affixed element would otherwise be clipped.
235
- */
236
- SkyAffixer.prototype.adjustOffsetToOverflowParent = function (offset, placement) {
237
- var parent = this.getAutoFitContextParent();
238
- var parentOffset = getElementOffset(parent, this.config.autoFitOverflowOffset);
239
- var affixedRect = this.affixedRect;
240
- var baseRect = this.baseRect;
241
- // A pixel value representing the leeway between the edge of the overflow parent and the edge
242
- // of the base element before it dissapears from view.
243
- // If the visible portion of the base element is less than this pixel value, the auto-fit
244
- // functionality attempts to find another placement.
245
- var defaultPixelTolerance = 40;
246
- var pixelTolerance;
247
- var originalOffsetTop = offset.top;
248
- var originalOffsetLeft = offset.left;
249
- /* tslint:disable-next-line:switch-default */
250
- switch (placement) {
251
- case 'above':
252
- case 'below':
253
- // Keep the affixed element within the overflow parent.
254
- if (offset.left < parentOffset.left) {
255
- offset.left = parentOffset.left;
256
- }
257
- else if (offset.left + affixedRect.width > parentOffset.right) {
258
- offset.left = parentOffset.right - affixedRect.width;
259
- }
260
- // Use a smaller pixel tolerance if the base element width is less than the default.
261
- pixelTolerance = Math.min(defaultPixelTolerance, baseRect.width);
262
- // Make sure the affixed element never detaches from the base element.
263
- if (offset.left + pixelTolerance > baseRect.right ||
264
- offset.left + affixedRect.width - pixelTolerance < baseRect.left) {
265
- offset.left = originalOffsetLeft;
266
- }
267
- break;
268
- case 'left':
269
- case 'right':
270
- // Keep the affixed element within the overflow parent.
271
- if (offset.top < parentOffset.top) {
272
- offset.top = parentOffset.top;
273
- }
274
- else if (offset.top + affixedRect.height > parentOffset.bottom) {
275
- offset.top = parentOffset.bottom - affixedRect.height;
276
- }
277
- // Use a smaller pixel tolerance if the base element height is less than the default.
278
- pixelTolerance = Math.min(defaultPixelTolerance, baseRect.height);
279
- // Make sure the affixed element never detaches from the base element.
280
- if (offset.top + pixelTolerance > baseRect.bottom ||
281
- offset.top + affixedRect.height - pixelTolerance < baseRect.top) {
282
- offset.top = originalOffsetTop;
283
- }
284
- break;
285
- }
286
- return offset;
287
- };
288
- SkyAffixer.prototype.getImmediateOverflowParent = function () {
289
- return this.overflowParents[this.overflowParents.length - 1];
290
- };
291
- SkyAffixer.prototype.getAutoFitContextParent = function () {
292
- var bodyElement = this.overflowParents[0];
293
- return (this.config.autoFitContext === SkyAffixAutoFitContext.OverflowParent)
294
- ? this.getImmediateOverflowParent()
295
- : bodyElement;
296
- };
297
- SkyAffixer.prototype.notifyPlacementChange = function (placement) {
298
- if (this.currentPlacement !== placement) {
299
- this.currentPlacement = placement;
300
- this._placementChange.next({
301
- placement: placement
302
- });
303
- }
304
- };
305
- SkyAffixer.prototype.reset = function () {
306
- this.removeScrollListeners();
307
- this.removeResizeListener();
308
- this._config =
309
- this.affixedRect =
310
- this.baseElement =
311
- this.baseRect =
312
- this.currentPlacement =
313
- this.currentOffset =
314
- this.overflowParents = undefined;
315
- };
316
- SkyAffixer.prototype.isNewOffset = function (offset) {
317
- if (this.currentOffset === undefined) {
318
- this.currentOffset = offset;
319
- return true;
320
- }
321
- if (this.currentOffset.top === offset.top &&
322
- this.currentOffset.left === offset.left) {
323
- return false;
324
- }
325
- this.currentOffset = offset;
326
- return true;
327
- };
328
- SkyAffixer.prototype.isBaseElementVisible = function () {
329
- return isOffsetPartiallyVisibleWithinParent(this.getImmediateOverflowParent(), {
330
- top: this.baseRect.top,
331
- left: this.baseRect.left,
332
- right: this.baseRect.right,
333
- bottom: this.baseRect.bottom
334
- }, this.config.autoFitOverflowOffset);
335
- };
336
- SkyAffixer.prototype.addScrollListeners = function () {
337
- var _this = this;
338
- this.scrollListeners = this.overflowParents.map(function (parentElement) {
339
- var overflow = (parentElement === document.body) ? 'window' : parentElement;
340
- return _this.renderer.listen(overflow, 'scroll', function () {
341
- _this.affix();
342
- _this._overflowScroll.next();
343
- });
344
- });
345
- };
346
- SkyAffixer.prototype.addResizeListener = function () {
347
- var _this = this;
348
- this.resizeListener = fromEvent(window, 'resize')
349
- .subscribe(function () { return _this.affix(); });
350
- };
351
- SkyAffixer.prototype.removeResizeListener = function () {
352
- if (this.resizeListener) {
353
- this.resizeListener.unsubscribe();
354
- this.resizeListener = undefined;
355
- }
356
- };
357
- SkyAffixer.prototype.removeScrollListeners = function () {
358
- if (this.scrollListeners) {
359
- // Remove renderer-generated listeners by calling the listener itself.
360
- // https://github.com/angular/angular/issues/9368#issuecomment-227199778
361
- this.scrollListeners.forEach(function (listener) { return listener(); });
362
- this.scrollListeners = undefined;
363
- }
364
- };
365
- return SkyAffixer;
366
- }());
367
- export { SkyAffixer };
368
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaXhlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bza3l1eC9jb3JlLyIsInNvdXJjZXMiOlsibW9kdWxlcy9hZmZpeC9hZmZpeGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFJQSxPQUFPLEVBQ0wsU0FBUyxFQUVULE9BQU8sRUFFUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFDTCxzQkFBc0IsRUFDdkIsTUFBTSwwQkFBMEIsQ0FBQztBQXNCbEMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZ0NBQWdDLEVBQ2hDLG9DQUFvQyxFQUNyQyxNQUFNLGFBQWEsQ0FBQztBQUVyQixJQUFNLG9CQUFvQixHQUFtQjtJQUMzQyxjQUFjLEVBQUUsc0JBQXNCLENBQUMsY0FBYztJQUNyRCxhQUFhLEVBQUUsS0FBSztJQUNwQixtQkFBbUIsRUFBRSxRQUFRO0lBQzdCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsU0FBUyxFQUFFLE9BQU87Q0FDbkIsQ0FBQztBQUVGO0lBbUVFLG9CQUNVLGNBQTJCLEVBQzNCLFFBQW1CO1FBRG5CLG1CQUFjLEdBQWQsY0FBYyxDQUFhO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFSckIsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBd0IsQ0FBQztRQUVwRCxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFdEMscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7SUFLOUQsQ0FBQztJQWpFTCxzQkFBVyxvQ0FBWTtRQUh2Qjs7V0FFRzthQUNIO1lBQ0UsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNDLENBQUM7OztPQUFBO0lBT0Qsc0JBQVcsc0NBQWM7UUFMekI7Ozs7V0FJRzthQUNIO1lBQ0UsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVks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aUJBQUM7QUFBRCxDQUFDLEFBaGNELElBZ2NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBmcm9tRXZlbnQsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvblxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgU2t5QWZmaXhBdXRvRml0Q29udGV4dFxufSBmcm9tICcuL2FmZml4LWF1dG8tZml0LWNvbnRleHQnO1xuXG5pbXBvcnQge1xuICBTa3lBZmZpeE9mZnNldENoYW5nZVxufSBmcm9tICcuL2FmZml4LW9mZnNldC1jaGFuZ2UnO1xuXG5pbXBvcnQge1xuICBTa3lBZmZpeE9mZnNldFxufSBmcm9tICcuL2FmZml4LW9mZnNldCc7XG5cbmltcG9ydCB7XG4gIFNreUFmZml4Q29uZmlnXG59IGZyb20gJy4vYWZmaXgtY29uZmlnJztcblxuaW1wb3J0IHtcbiAgU2t5QWZmaXhQbGFjZW1lbnRcbn0gZnJvbSAnLi9hZmZpeC1wbGFjZW1lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lBZmZpeFBsYWNlbWVudENoYW5nZVxufSBmcm9tICcuL2FmZml4LXBsYWNlbWVudC1jaGFuZ2UnO1xuXG5pbXBvcnQge1xuICBnZXRJbnZlcnNlUGxhY2VtZW50LFxuICBnZXROZXh0UGxhY2VtZW50XG59IGZyb20gJy4vYWZmaXgtdXRpbHMnO1xuXG5pbXBvcnQge1xuICBnZXRFbGVtZW50T2Zmc2V0LFxuICBnZXRPdmVyZmxvd1BhcmVudHMsXG4gIGlzT2Zmc2V0RnVsbHlWaXNpYmxlV2l0aGluUGFyZW50LFxuICBpc09mZnNldFBhcnRpYWxseVZpc2libGVXaXRoaW5QYXJlbnRcbn0gZnJvbSAnLi9kb20tdXRpbHMnO1xuXG5jb25zdCBERUZBVUxUX0FGRklYX0NPTkZJRzogU2t5QWZmaXhDb25maWcgPSB7XG4gIGF1dG9GaXRDb250ZXh0OiBTa3lBZmZpeEF1dG9GaXRDb250ZXh0Lk92ZXJmbG93UGFyZW50LFxuICBlbmFibGVBdXRvRml0OiBmYWxzZSxcbiAgaG9yaXpvbnRhbEFsaWdubWVudDogJ2NlbnRlcicsXG4gIGlzU3RpY2t5OiBmYWxzZSxcbiAgcGxhY2VtZW50OiAnYWJvdmUnXG59O1xuXG5leHBvcnQgY2xhc3MgU2t5QWZmaXhlciB7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGFmZml4ZWQgZWxlbWVudCdzIG9mZnNldCBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIGdldCBvZmZzZXRDaGFuZ2UoKTogT2JzZXJ2YWJsZTxTa3lBZmZpeE9mZnNldENoYW5nZT4ge1xuICAgIHJldHVybiB0aGlzLl9vZmZzZXRDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgYmFzZSBlbGVtZW50J3MgbmVhcmVzdCBvdmVyZmxvdyBwYXJlbnQgaXMgc2Nyb2xsaW5nLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZFxuICAgKiB0byBwZXJmb3JtIGFuIGFkZGl0aW9uYWwgYWN0aW9uIGR1cmluZyB0aGUgc2Nyb2xsIGV2ZW50IGJ1dCBkb24ndCB3YW50IHRvIGdlbmVyYXRlIGFub3RoZXJcbiAgICogZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG92ZXJmbG93U2Nyb2xsKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9vdmVyZmxvd1Njcm9sbC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBwbGFjZW1lbnQgdmFsdWUgY2hhbmdlcy4gQSBgbnVsbGAgdmFsdWUgaW5kaWNhdGVzIHRoYXQgYSBzdWl0YWJsZVxuICAgKiBwbGFjZW1lbnQgY291bGQgbm90IGJlIGZvdW5kLlxuICAgKi9cbiAgcHVibGljIGdldCBwbGFjZW1lbnRDaGFuZ2UoKTogT2JzZXJ2YWJsZTxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT4ge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZW1lbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb25maWcoKTogU2t5QWZmaXhDb25maWcge1xuICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gIH1cblxuICBwcml2YXRlIHNldCBjb25maWcodmFsdWU6IFNreUFmZml4Q29uZmlnKSB7XG4gICAgY29uc3QgbWVyZ2VkID0gey4uLkRFRkFVTFRfQUZGSVhfQ09ORklHLCAuLi52YWx1ZX07XG5cbiAgICAvLyBNYWtlIHN1cmUgbm9uZSBvZiB0aGUgdmFsdWVzIGFyZSB1bmRlZmluZWQuXG4gICAgT2JqZWN0LmtleXMobWVyZ2VkKS5mb3JFYWNoKChrOiBrZXlvZiBTa3lBZmZpeENvbmZpZykgPT4ge1xuICAgICAgaWYgKG1lcmdlZFtrXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIChtZXJnZWQgYXMgYW55KVtrXSA9IERFRkFVTFRfQUZGSVhfQ09ORklHW2tdO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fY29uZmlnID0gbWVyZ2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBhZmZpeGVkUmVjdDogQ2xpZW50UmVjdDtcblxuICBwcml2YXRlIGJhc2VFbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICBwcml2YXRlIGJhc2VSZWN0OiBDbGllbnRSZWN0O1xuXG4gIHByaXZhdGUgY3VycmVudE9mZnNldDogU2t5QWZmaXhPZmZzZXQ7XG5cbiAgcHJpdmF0ZSBjdXJyZW50UGxhY2VtZW50OiBTa3lBZmZpeFBsYWNlbWVudDtcblxuICBwcml2YXRlIG92ZXJmbG93UGFyZW50czogSFRNTEVsZW1lbnRbXTtcblxuICBwcml2YXRlIHJlc2l6ZUxpc3RlbmVyOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBzY3JvbGxMaXN0ZW5lcnM6IEZ1bmN0aW9uW107XG5cbiAgcHJpdmF0ZSBfY29uZmlnOiBTa3lBZmZpeENvbmZpZztcblxuICBwcml2YXRlIF9vZmZzZXRDaGFuZ2UgPSBuZXcgU3ViamVjdDxTa3lBZmZpeE9mZnNldENoYW5nZT4oKTtcblxuICBwcml2YXRlIF9vdmVyZmxvd1Njcm9sbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBfcGxhY2VtZW50Q2hhbmdlID0gbmV3IFN1YmplY3Q8U2t5QWZmaXhQbGFjZW1lbnRDaGFuZ2U+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhZmZpeGVkRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIEFmZml4ZXMgYW4gZWxlbWVudCB0byBhIGJhc2UgZWxlbWVudC5cbiAgICogQHBhcmFtIGJhc2VFbGVtZW50IFRoZSBiYXNlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgdGhlIGFmZml4IGFjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhZmZpeFRvKGJhc2VFbGVtZW50OiBIVE1MRWxlbWVudCwgY29uZmlnPzogU2t5QWZmaXhDb25maWcpOiB2b2lkIHtcblxuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuYmFzZUVsZW1lbnQgPSBiYXNlRWxlbWVudDtcbiAgICB0aGlzLm92ZXJmbG93UGFyZW50cyA9IGdldE92ZXJmbG93UGFyZW50cyhiYXNlRWxlbWVudCk7XG5cbiAgICB0aGlzLmFmZml4KCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcuaXNTdGlja3kpIHtcbiAgICAgIHRoaXMuYWRkU2Nyb2xsTGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLmFkZFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlLXJ1bnMgdGhlIGFmZml4IGNhbGN1bGF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWZmaXgoKTogdm9pZCB7XG4gICAgLy8gUmVzZXQgY3VycmVudCBwbGFjZW1lbnQgdG8gcHJlZmVycmVkIHBsYWNlbWVudC5cbiAgICB0aGlzLmN1cnJlbnRQbGFjZW1lbnQgPSB0aGlzLmNvbmZpZy5wbGFjZW1lbnQ7XG4gICAgdGhpcy5hZmZpeCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBhZmZpeGVyLlxuICAgKi9cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMuX3BsYWNlbWVudENoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX29mZnNldENoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX292ZXJmbG93U2Nyb2xsLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLl9vZmZzZXRDaGFuZ2UgPVxuICAgICAgdGhpcy5fcGxhY2VtZW50Q2hhbmdlID1cbiAgICAgIHRoaXMuX292ZXJmbG93U2Nyb2xsID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhZmZpeCgpOiB2b2lkIHtcbiAgICB0aGlzLmJhc2VSZWN0ID0gdGhpcy5iYXNlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLmFmZml4ZWRSZWN0ID0gdGhpcy5hZmZpeGVkRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuZ2V0T2Zmc2V0KCk7XG5cbiAgICBpZiAodGhpcy5pc05ld09mZnNldChvZmZzZXQpKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuYWZmaXhlZEVsZW1lbnQsICd0b3AnLCBgJHtvZmZzZXQudG9wfXB4YCk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuYWZmaXhlZEVsZW1lbnQsICdsZWZ0JywgYCR7b2Zmc2V0LmxlZnR9cHhgKTtcbiAgICAgIHRoaXMuX29mZnNldENoYW5nZS5uZXh0KHsgb2Zmc2V0IH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0T2Zmc2V0KCk6IFNreUFmZml4T2Zmc2V0IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldEF1dG9GaXRDb250ZXh0UGFyZW50KCk7XG5cbiAgICBjb25zdCBtYXhBdHRlbXB0cyA9IDQ7XG4gICAgbGV0IGF0dGVtcHRzID0gMDtcblxuICAgIGxldCBpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlID0gZmFsc2U7XG4gICAgbGV0IG9mZnNldDogU2t5QWZmaXhPZmZzZXQ7XG4gICAgbGV0IHBsYWNlbWVudCA9IHRoaXMuY29uZmlnLnBsYWNlbWVudDtcblxuICAgIGRvIHtcbiAgICAgIG9mZnNldCA9IHRoaXMuZ2V0UHJlZmVycmVkT2Zmc2V0KHBsYWNlbWVudCk7XG4gICAgICBpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlID0gaXNPZmZzZXRGdWxseVZpc2libGVXaXRoaW5QYXJlbnQoXG4gICAgICAgIHBhcmVudCxcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICB0aGlzLmNvbmZpZy5hdXRvRml0T3ZlcmZsb3dPZmZzZXRcbiAgICAgICk7XG5cbiAgICAgIGlmICghdGhpcy5jb25maWcuZW5hYmxlQXV0b0ZpdCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IChhdHRlbXB0cyAlIDIgPT09IDApXG4gICAgICAgICAgPyBnZXRJbnZlcnNlUGxhY2VtZW50KHBsYWNlbWVudClcbiAgICAgICAgICA6IGdldE5leHRQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgICAgIH1cblxuICAgICAgYXR0ZW1wdHMrKztcbiAgICB9IHdoaWxlICghaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSAmJiBhdHRlbXB0cyA8IG1heEF0dGVtcHRzKTtcblxuICAgIGlmIChpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlKSB7XG4gICAgICBpZiAodGhpcy5pc0Jhc2VFbGVtZW50VmlzaWJsZSgpKSB7XG4gICAgICAgIHRoaXMubm90aWZ5UGxhY2VtZW50Q2hhbmdlKHBsYWNlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbnVsbC1rZXl3b3JkICovXG4gICAgICAgIHRoaXMubm90aWZ5UGxhY2VtZW50Q2hhbmdlKG51bGwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5lbmFibGVBdXRvRml0KSB7XG4gICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbnVsbC1rZXl3b3JkICovXG4gICAgICB0aGlzLm5vdGlmeVBsYWNlbWVudENoYW5nZShudWxsKTtcbiAgICB9XG5cbiAgICAvLyBObyBzdWl0YWJsZSBwbGFjZW1lbnQgd2FzIGZvdW5kLCBzbyByZXZlcnQgdG8gcHJlZmVycmVkIHBsYWNlbWVudC5cbiAgICByZXR1cm4gdGhpcy5nZXRQcmVmZXJyZWRPZmZzZXQodGhpcy5jb25maWcucGxhY2VtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJlZmVycmVkT2Zmc2V0KHBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQpOiBTa3lBZmZpeE9mZnNldCB7XG4gICAgY29uc3QgYWZmaXhlZFJlY3QgPSB0aGlzLmFmZml4ZWRSZWN0O1xuICAgIGNvbnN0IGJhc2VSZWN0ID0gdGhpcy5iYXNlUmVjdDtcblxuICAgIGNvbnN0IGhvcml6b250YWxBbGlnbm1lbnQgPSB0aGlzLmNvbmZpZy5ob3Jpem9udGFsQWxpZ25tZW50O1xuICAgIGNvbnN0IHZlcnRpY2FsQWxpZ25tZW50ID0gdGhpcy5jb25maWcudmVydGljYWxBbGlnbm1lbnQ7XG4gICAgY29uc3QgZW5hYmxlQXV0b0ZpdCA9IHRoaXMuY29uZmlnLmVuYWJsZUF1dG9GaXQ7XG5cbiAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgbGV0IGxlZnQ6IG51bWJlcjtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09ICdhYm92ZScgfHwgcGxhY2VtZW50ID09PSAnYmVsb3cnKSB7XG4gICAgICBpZiAocGxhY2VtZW50ID09PSAnYWJvdmUnKSB7XG4gICAgICAgIHRvcCA9IGJhc2VSZWN0LnRvcCAtIGFmZml4ZWRSZWN0LmhlaWdodDtcblxuICAgICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgIHRvcCA9IHRvcCArIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgICB0b3AgPSB0b3AgKyAoYWZmaXhlZFJlY3QuaGVpZ2h0IC8gMik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gYmFzZVJlY3QuYm90dG9tO1xuXG4gICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgICAgdG9wID0gdG9wIC0gKGFmZml4ZWRSZWN0LmhlaWdodCAvIDIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgIHRvcCA9IHRvcCAtIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoaG9yaXpvbnRhbEFsaWdubWVudCkge1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBsZWZ0ID0gYmFzZVJlY3QubGVmdDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGxlZnQgPSBiYXNlUmVjdC5sZWZ0ICsgKGJhc2VSZWN0LndpZHRoIC8gMikgLSAoYWZmaXhlZFJlY3Qud2lkdGggLyAyKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCA9IGJhc2VSZWN0LnJpZ2h0IC0gYWZmaXhlZFJlY3Qud2lkdGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICdsZWZ0Jykge1xuICAgICAgICBsZWZ0ID0gYmFzZVJlY3QubGVmdCAtIGFmZml4ZWRSZWN0LndpZHRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IGJhc2VSZWN0LnJpZ2h0O1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgdG9wID0gYmFzZVJlY3QudG9wO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdG9wID0gYmFzZVJlY3QudG9wICsgKGJhc2VSZWN0LmhlaWdodCAvIDIpIC0gKGFmZml4ZWRSZWN0LmhlaWdodCAvIDIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wID0gYmFzZVJlY3QuYm90dG9tIC0gYWZmaXhlZFJlY3QuaGVpZ2h0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBvZmZzZXQ6IFNreUFmZml4T2Zmc2V0ID0geyBsZWZ0LCB0b3AgfTtcbiAgICBpZiAoZW5hYmxlQXV0b0ZpdCkge1xuICAgICAgb2Zmc2V0ID0gdGhpcy5hZGp1c3RPZmZzZXRUb092ZXJmbG93UGFyZW50KHsuLi5vZmZzZXR9LCBwbGFjZW1lbnQpO1xuICAgIH1cblxuICAgIG9mZnNldC5ib3R0b20gPSBvZmZzZXQudG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0O1xuICAgIG9mZnNldC5yaWdodCA9IG9mZnNldC5sZWZ0ICsgYWZmaXhlZFJlY3Qud2lkdGg7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNsaWdodGx5IGFkanVzdCB0aGUgb2Zmc2V0IHRvIGZpdCB3aXRoaW4gdGhlIHNjcm9sbCBwYXJlbnQncyBib3VuZGFyaWVzIGlmXG4gICAqIHRoZSBhZmZpeGVkIGVsZW1lbnQgd291bGQgb3RoZXJ3aXNlIGJlIGNsaXBwZWQuXG4gICAqL1xuICBwcml2YXRlIGFkanVzdE9mZnNldFRvT3ZlcmZsb3dQYXJlbnQoXG4gICAgb2Zmc2V0OiBTa3lBZmZpeE9mZnNldCxcbiAgICBwbGFjZW1lbnQ6IFNreUFmZml4UGxhY2VtZW50XG4gICk6IFNreUFmZml4T2Zmc2V0IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldEF1dG9GaXRDb250ZXh0UGFyZW50KCk7XG4gICAgY29uc3QgcGFyZW50T2Zmc2V0ID0gZ2V0RWxlbWVudE9mZnNldChwYXJlbnQsIHRoaXMuY29uZmlnLmF1dG9GaXRPdmVyZmxvd09mZnNldCk7XG5cbiAgICBjb25zdCBhZmZpeGVkUmVjdCA9IHRoaXMuYWZmaXhlZFJlY3Q7XG4gICAgY29uc3QgYmFzZVJlY3QgPSB0aGlzLmJhc2VSZWN0O1xuXG4gICAgLy8gQSBwaXhlbCB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGxlZXdheSBiZXR3ZWVuIHRoZSBlZGdlIG9mIHRoZSBvdmVyZmxvdyBwYXJlbnQgYW5kIHRoZSBlZGdlXG4gICAgLy8gb2YgdGhlIGJhc2UgZWxlbWVudCBiZWZvcmUgaXQgZGlzc2FwZWFycyBmcm9tIHZpZXcuXG4gICAgLy8gSWYgdGhlIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgYmFzZSBlbGVtZW50IGlzIGxlc3MgdGhhbiB0aGlzIHBpeGVsIHZhbHVlLCB0aGUgYXV0by1maXRcbiAgICAvLyBmdW5jdGlvbmFsaXR5IGF0dGVtcHRzIHRvIGZpbmQgYW5vdGhlciBwbGFjZW1lbnQuXG4gICAgY29uc3QgZGVmYXVsdFBpeGVsVG9sZXJhbmNlID0gNDA7XG4gICAgbGV0IHBpeGVsVG9sZXJhbmNlOiBudW1iZXI7XG5cbiAgICBjb25zdCBvcmlnaW5hbE9mZnNldFRvcCA9IG9mZnNldC50b3A7XG4gICAgY29uc3Qgb3JpZ2luYWxPZmZzZXRMZWZ0ID0gb2Zmc2V0LmxlZnQ7XG5cbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6c3dpdGNoLWRlZmF1bHQgKi9cbiAgICBzd2l0Y2ggKHBsYWNlbWVudCkge1xuICAgICAgY2FzZSAnYWJvdmUnOlxuICAgICAgY2FzZSAnYmVsb3cnOlxuXG4gICAgICAgIC8vIEtlZXAgdGhlIGFmZml4ZWQgZWxlbWVudCB3aXRoaW4gdGhlIG92ZXJmbG93IHBhcmVudC5cbiAgICAgICAgaWYgKG9mZnNldC5sZWZ0IDwgcGFyZW50T2Zmc2V0LmxlZnQpIHtcbiAgICAgICAgICBvZmZzZXQubGVmdCA9IHBhcmVudE9mZnNldC5sZWZ0O1xuICAgICAgICB9IGVsc2UgaWYgKG9mZnNldC5sZWZ0ICsgYWZmaXhlZFJlY3Qud2lkdGggPiBwYXJlbnRPZmZzZXQucmlnaHQpIHtcbiAgICAgICAgICBvZmZzZXQubGVmdCA9IHBhcmVudE9mZnNldC5yaWdodCAtIGFmZml4ZWRSZWN0LndpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIGEgc21hbGxlciBwaXhlbCB0b2xlcmFuY2UgaWYgdGhlIGJhc2UgZWxlbWVudCB3aWR0aCBpcyBsZXNzIHRoYW4gdGhlIGRlZmF1bHQuXG4gICAgICAgIHBpeGVsVG9sZXJhbmNlID0gTWF0aC5taW4oXG4gICAgICAgICAgZGVmYXVsdFBpeGVsVG9sZXJhbmNlLFxuICAgICAgICAgIGJhc2VSZWN0LndpZHRoXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBhZmZpeGVkIGVsZW1lbnQgbmV2ZXIgZGV0YWNoZXMgZnJvbSB0aGUgYmFzZSBlbGVtZW50LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgb2Zmc2V0LmxlZnQgKyBwaXhlbFRvbGVyYW5jZSA+IGJhc2VSZWN0LnJpZ2h0IHx8XG4gICAgICAgICAgb2Zmc2V0LmxlZnQgKyBhZmZpeGVkUmVjdC53aWR0aCAtIHBpeGVsVG9sZXJhbmNlIDwgYmFzZVJlY3QubGVmdFxuICAgICAgICApIHtcbiAgICAgICAgICBvZmZzZXQubGVmdCA9IG9yaWdpbmFsT2Zmc2V0TGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcblxuICAgICAgICAvLyBLZWVwIHRoZSBhZmZpeGVkIGVsZW1lbnQgd2l0aGluIHRoZSBvdmVyZmxvdyBwYXJlbnQuXG4gICAgICAgIGlmIChvZmZzZXQudG9wIDwgcGFyZW50T2Zmc2V0LnRvcCkge1xuICAgICAgICAgIG9mZnNldC50b3AgPSBwYXJlbnRPZmZzZXQudG9wO1xuICAgICAgICB9IGVsc2UgaWYgKG9mZnNldC50b3AgKyBhZmZpeGVkUmVjdC5oZWlnaHQgPiBwYXJlbnRPZmZzZXQuYm90dG9tKSB7XG4gICAgICAgICAgb2Zmc2V0LnRvcCA9IHBhcmVudE9mZnNldC5ib3R0b20gLSBhZmZpeGVkUmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2UgYSBzbWFsbGVyIHBpeGVsIHRvbGVyYW5jZSBpZiB0aGUgYmFzZSBlbGVtZW50IGhlaWdodCBpcyBsZXNzIHRoYW4gdGhlIGRlZmF1bHQuXG4gICAgICAgIHBpeGVsVG9sZXJhbmNlID0gTWF0aC5taW4oXG4gICAgICAgICAgZGVmYXVsdFBpeGVsVG9sZXJhbmNlLFxuICAgICAgICAgIGJhc2VSZWN0LmhlaWdodFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgYWZmaXhlZCBlbGVtZW50IG5ldmVyIGRldGFjaGVzIGZyb20gdGhlIGJhc2UgZWxlbWVudC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9mZnNldC50b3AgKyBwaXhlbFRvbGVyYW5jZSA+IGJhc2VSZWN0LmJvdHRvbSB8fFxuICAgICAgICAgIG9mZnNldC50b3AgKyBhZmZpeGVkUmVjdC5oZWlnaHQgLSBwaXhlbFRvbGVyYW5jZSA8IGJhc2VSZWN0LnRvcFxuICAgICAgICApIHtcbiAgICAgICAgICBvZmZzZXQudG9wID0gb3JpZ2luYWxPZmZzZXRUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbW1lZGlhdGVPdmVyZmxvd1BhcmVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmZsb3dQYXJlbnRzW3RoaXMub3ZlcmZsb3dQYXJlbnRzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdXRvRml0Q29udGV4dFBhcmVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgYm9keUVsZW1lbnQgPSB0aGlzLm92ZXJmbG93UGFyZW50c1swXTtcblxuICAgIHJldHVybiAodGhpcy5jb25maWcuYXV0b0ZpdENvbnRleHQgPT09IFNreUFmZml4QXV0b0ZpdENvbnRleHQuT3ZlcmZsb3dQYXJlbnQpXG4gICAgICA/IHRoaXMuZ2V0SW1tZWRpYXRlT3ZlcmZsb3dQYXJlbnQoKVxuICAgICAgOiBib2R5RWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5UGxhY2VtZW50Q2hhbmdlKHBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICB0aGlzLmN1cnJlbnRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICB0aGlzLl9wbGFjZW1lbnRDaGFuZ2UubmV4dCh7XG4gICAgICAgIHBsYWNlbWVudFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVycygpO1xuICAgIHRoaXMucmVtb3ZlUmVzaXplTGlzdGVuZXIoKTtcblxuICAgIHRoaXMuX2NvbmZpZyA9XG4gICAgICB0aGlzLmFmZml4ZWRSZWN0ID1cbiAgICAgIHRoaXMuYmFzZUVsZW1lbnQgPVxuICAgICAgdGhpcy5iYXNlUmVjdCA9XG4gICAgICB0aGlzLmN1cnJlbnRQbGFjZW1lbnQgPVxuICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0ID1cbiAgICAgIHRoaXMub3ZlcmZsb3dQYXJlbnRzID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc05ld09mZnNldChvZmZzZXQ6IFNreUFmZml4T2Zmc2V0KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY3VycmVudE9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmN1cnJlbnRPZmZzZXQudG9wID09PSBvZmZzZXQudG9wICYmXG4gICAgICB0aGlzLmN1cnJlbnRPZmZzZXQubGVmdCA9PT0gb2Zmc2V0LmxlZnRcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNCYXNlRWxlbWVudFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzT2Zmc2V0UGFydGlhbGx5VmlzaWJsZVdpdGhpblBhcmVudChcbiAgICAgIHRoaXMuZ2V0SW1tZWRpYXRlT3ZlcmZsb3dQYXJlbnQoKSxcbiAgICAgIHtcbiAgICAgICAgdG9wOiB0aGlzLmJhc2VSZWN0LnRvcCxcbiAgICAgICAgbGVmdDogdGhpcy5iYXNlUmVjdC5sZWZ0LFxuICAgICAgICByaWdodDogdGhpcy5iYXNlUmVjdC5yaWdodCxcbiAgICAgICAgYm90dG9tOiB0aGlzLmJhc2VSZWN0LmJvdHRvbVxuICAgICAgfSxcbiAgICAgIHRoaXMuY29uZmlnLmF1dG9GaXRPdmVyZmxvd09mZnNldFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZFNjcm9sbExpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbExpc3RlbmVycyA9IHRoaXMub3ZlcmZsb3dQYXJlbnRzLm1hcCgocGFyZW50RWxlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSAocGFyZW50RWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSkgPyAnd2luZG93JyA6IHBhcmVudEVsZW1lbnQ7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0ZW4ob3ZlcmZsb3csICdzY3JvbGwnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuYWZmaXgoKTtcbiAgICAgICAgdGhpcy5fb3ZlcmZsb3dTY3JvbGwubmV4dCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZFJlc2l6ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplTGlzdGVuZXIgPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5hZmZpeCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUmVzaXplTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMucmVzaXplTGlzdGVuZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMucmVzaXplTGlzdGVuZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVTY3JvbGxMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2Nyb2xsTGlzdGVuZXJzKSB7XG4gICAgICAvLyBSZW1vdmUgcmVuZGVyZXItZ2VuZXJhdGVkIGxpc3RlbmVycyBieSBjYWxsaW5nIHRoZSBsaXN0ZW5lciBpdHNlbGYuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy85MzY4I2lzc3VlY29tbWVudC0yMjcxOTk3NzhcbiAgICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4gbGlzdGVuZXIoKSk7XG4gICAgICB0aGlzLnNjcm9sbExpc3RlbmVycyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxufVxuIl19
@@ -1,79 +0,0 @@
1
- /**
2
- * Returns the offset values of a given element.
3
- * @param element The HTML element.
4
- * @param bufferOffset An optional offset to add/subtract to the element's actual offset.
5
- */
6
- export function getElementOffset(element, bufferOffset) {
7
- if (bufferOffset === void 0) { bufferOffset = {}; }
8
- var bufferOffsetBottom = bufferOffset.bottom || 0;
9
- var bufferOffsetLeft = bufferOffset.left || 0;
10
- var bufferOffsetRight = bufferOffset.right || 0;
11
- var bufferOffsetTop = bufferOffset.top || 0;
12
- var top;
13
- var left;
14
- var right;
15
- var bottom;
16
- if (element === document.body) {
17
- left = 0;
18
- top = 0;
19
- right = document.documentElement.clientWidth;
20
- bottom = document.documentElement.clientHeight;
21
- }
22
- else {
23
- var clientRect = element.getBoundingClientRect();
24
- left = clientRect.left;
25
- top = clientRect.top;
26
- right = clientRect.right;
27
- bottom = clientRect.bottom;
28
- }
29
- bottom -= bufferOffsetBottom;
30
- left += bufferOffsetLeft;
31
- right -= bufferOffsetRight;
32
- top += bufferOffsetTop;
33
- return {
34
- bottom: bottom,
35
- left: left,
36
- right: right,
37
- top: top
38
- };
39
- }
40
- export function getOverflowParents(child) {
41
- var bodyElement = window.document.body;
42
- var results = [bodyElement];
43
- var parentElement = child.parentNode;
44
- while (parentElement !== undefined &&
45
- parentElement !== bodyElement &&
46
- parentElement instanceof HTMLElement) {
47
- var overflowY = window
48
- .getComputedStyle(parentElement, undefined)
49
- .overflowY
50
- .toLowerCase();
51
- if (overflowY === 'auto' ||
52
- overflowY === 'hidden' ||
53
- overflowY === 'scroll') {
54
- results.push(parentElement);
55
- }
56
- parentElement = parentElement.parentNode;
57
- }
58
- return results;
59
- }
60
- /**
61
- * Confirms offset is fully visible within a parent element.
62
- * @param parent
63
- * @param offset
64
- */
65
- export function isOffsetFullyVisibleWithinParent(parent, offset, bufferOffset) {
66
- var parentOffset = getElementOffset(parent, bufferOffset);
67
- return !(parentOffset.top > offset.top ||
68
- parentOffset.right < offset.right ||
69
- parentOffset.bottom < offset.bottom ||
70
- parentOffset.left > offset.left);
71
- }
72
- export function isOffsetPartiallyVisibleWithinParent(parent, offset, bufferOffset) {
73
- var parentOffset = getElementOffset(parent, bufferOffset);
74
- return !(parentOffset.top >= offset.bottom ||
75
- parentOffset.right <= offset.left ||
76
- parentOffset.bottom <= offset.top ||
77
- parentOffset.left >= offset.right);
78
- }
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLXV0aWxzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L2NvcmUvIiwic291cmNlcyI6WyJtb2R1bGVzL2FmZml4L2RvbS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixPQUFvQixFQUNwQixZQUFpQztJQUFqQyw2QkFBQSxFQUFBLGlCQUFpQztJQUdqQyxJQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3BELElBQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7SUFDaEQsSUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNsRCxJQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUU5QyxJQUFJLEdBQVcsQ0FBQztJQUNoQixJQUFJLElBQVksQ0FBQztJQUNqQixJQUFJLEtBQWEsQ0FBQztJQUNsQixJQUFJLE1BQWMsQ0FBQztJQUVuQixJQUFJLE9BQU8sS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFO1FBQzdCLElBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsS0FBSyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQzdDLE1BQU0sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztLQUNoRDtTQUFNO1FBQ0wsSUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbkQsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdkIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFDckIsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDekIsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7S0FDNUI7SUFFRCxNQUFNLElBQUksa0JBQWtCLENBQUM7SUFDN0IsSUFBSSxJQUFJLGdCQUFnQixDQUFDO0lBQ3pCLEtBQUssSUFBSSxpQkFBaUIsQ0FBQztJQUMzQixHQUFHLElBQUksZUFBZSxDQUFDO0lBRXZCLE9BQU87UUFDTCxNQUFNLFFBQUE7UUFDTixJQUFJLE1BQUE7UUFDSixLQUFLLE9BQUE7UUFDTCxHQUFHLEtBQUE7S0FDSixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFrQjtJQUNuRCxJQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUN6QyxJQUFNLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTlCLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFFckMsT0FDRSxhQUFhLEtBQUssU0FBUztRQUMzQixhQUFhLEtBQUssV0FBVztRQUM3QixhQUFhLFlBQVksV0FBVyxFQUNwQztRQUNBLElBQU0sU0FBUyxHQUFHLE1BQU07YUFDckIsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQzthQUMxQyxTQUFTO2FBQ1QsV0FBVyxFQUFFLENBQUM7UUFFakIsSUFDRSxTQUFTLEtBQUssTUFBTTtZQUNwQixTQUFTLEtBQUssUUFBUTtZQUN0QixTQUFTLEtBQUssUUFBUSxFQUN0QjtZQUNBLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDN0I7UUFFRCxhQUFhLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQztLQUMxQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdDQUFnQyxDQUM5QyxNQUFtQixFQUNuQixNQUFzQixFQUN0QixZQUE2QjtJQUU3QixJQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFNUQsT0FBTyxDQUFDLENBQ04sWUFBWSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRztRQUM3QixZQUFZLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLO1FBQ2pDLFlBQVksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU07UUFDbkMsWUFBWSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUNoQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxvQ0FBb0MsQ0FDbEQsTUFBbUIsRUFDbkIsTUFBc0IsRUFDdEIsWUFBNkI7SUFFN0IsSUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRTVELE9BQU8sQ0FBQyxDQUNOLFlBQVksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU07UUFDakMsWUFBWSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSTtRQUNqQyxZQUFZLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHO1FBQ2pDLFlBQVksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FDbEMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTa3lBZmZpeE9mZnNldFxufSBmcm9tICcuL2FmZml4LW9mZnNldCc7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb2Zmc2V0IHZhbHVlcyBvZiBhIGdpdmVuIGVsZW1lbnQuXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgSFRNTCBlbGVtZW50LlxuICogQHBhcmFtIGJ1ZmZlck9mZnNldCBBbiBvcHRpb25hbCBvZmZzZXQgdG8gYWRkL3N1YnRyYWN0IHRvIHRoZSBlbGVtZW50J3MgYWN0dWFsIG9mZnNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRPZmZzZXQoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICBidWZmZXJPZmZzZXQ6IFNreUFmZml4T2Zmc2V0ID0ge31cbik6IFNreUFmZml4T2Zmc2V0IHtcblxuICBjb25zdCBidWZmZXJPZmZzZXRCb3R0b20gPSBidWZmZXJPZmZzZXQuYm90dG9tIHx8IDA7XG4gIGNvbnN0IGJ1ZmZlck9mZnNldExlZnQgPSBidWZmZXJPZmZzZXQubGVmdCB8fCAwO1xuICBjb25zdCBidWZmZXJPZmZzZXRSaWdodCA9IGJ1ZmZlck9mZnNldC5yaWdodCB8fCAwO1xuICBjb25zdCBidWZmZXJPZmZzZXRUb3AgPSBidWZmZXJPZmZzZXQudG9wIHx8IDA7XG5cbiAgbGV0IHRvcDogbnVtYmVyO1xuICBsZXQgbGVmdDogbnVtYmVyO1xuICBsZXQgcmlnaHQ6IG51bWJlcjtcbiAgbGV0IGJvdHRvbTogbnVtYmVyO1xuXG4gIGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgbGVmdCA9IDA7XG4gICAgdG9wID0gMDtcbiAgICByaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICBib3R0b20gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxlZnQgPSBjbGllbnRSZWN0LmxlZnQ7XG4gICAgdG9wID0gY2xpZW50UmVjdC50b3A7XG4gICAgcmlnaHQgPSBjbGllbnRSZWN0LnJpZ2h0O1xuICAgIGJvdHRvbSA9IGNsaWVudFJlY3QuYm90dG9tO1xuICB9XG5cbiAgYm90dG9tIC09IGJ1ZmZlck9mZnNldEJvdHRvbTtcbiAgbGVmdCArPSBidWZmZXJPZmZzZXRMZWZ0O1xuICByaWdodCAtPSBidWZmZXJPZmZzZXRSaWdodDtcbiAgdG9wICs9IGJ1ZmZlck9mZnNldFRvcDtcblxuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3ZlcmZsb3dQYXJlbnRzKGNoaWxkOiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50W10ge1xuICBjb25zdCBib2R5RWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5ib2R5O1xuICBjb25zdCByZXN1bHRzID0gW2JvZHlFbGVtZW50XTtcblxuICBsZXQgcGFyZW50RWxlbWVudCA9IGNoaWxkLnBhcmVudE5vZGU7XG5cbiAgd2hpbGUgKFxuICAgIHBhcmVudEVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHBhcmVudEVsZW1lbnQgIT09IGJvZHlFbGVtZW50ICYmXG4gICAgcGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50XG4gICkge1xuICAgIGNvbnN0IG92ZXJmbG93WSA9IHdpbmRvd1xuICAgICAgLmdldENvbXB1dGVkU3R5bGUocGFyZW50RWxlbWVudCwgdW5kZWZpbmVkKVxuICAgICAgLm92ZXJmbG93WVxuICAgICAgLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoXG4gICAgICBvdmVyZmxvd1kgPT09ICdhdXRvJyB8fFxuICAgICAgb3ZlcmZsb3dZID09PSAnaGlkZGVuJyB8fFxuICAgICAgb3ZlcmZsb3dZID09PSAnc2Nyb2xsJ1xuICAgICkge1xuICAgICAgcmVzdWx0cy5wdXNoKHBhcmVudEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqXG4gKiBDb25maXJtcyBvZmZzZXQgaXMgZnVsbHkgdmlzaWJsZSB3aXRoaW4gYSBwYXJlbnQgZWxlbWVudC5cbiAqIEBwYXJhbSBwYXJlbnRcbiAqIEBwYXJhbSBvZmZzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2Zmc2V0RnVsbHlWaXNpYmxlV2l0aGluUGFyZW50KFxuICBwYXJlbnQ6IEhUTUxFbGVtZW50LFxuICBvZmZzZXQ6IFNreUFmZml4T2Zmc2V0LFxuICBidWZmZXJPZmZzZXQ/OiBTa3lBZmZpeE9mZnNldFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcmVudE9mZnNldCA9IGdldEVsZW1lbnRPZmZzZXQocGFyZW50LCBidWZmZXJPZmZzZXQpO1xuXG4gIHJldHVybiAhKFxuICAgIHBhcmVudE9mZnNldC50b3AgPiBvZmZzZXQudG9wIHx8XG4gICAgcGFyZW50T2Zmc2V0LnJpZ2h0IDwgb2Zmc2V0LnJpZ2h0IHx8XG4gICAgcGFyZW50T2Zmc2V0LmJvdHRvbSA8IG9mZnNldC5ib3R0b20gfHxcbiAgICBwYXJlbnRPZmZzZXQubGVmdCA+IG9mZnNldC5sZWZ0XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09mZnNldFBhcnRpYWxseVZpc2libGVXaXRoaW5QYXJlbnQoXG4gIHBhcmVudDogSFRNTEVsZW1lbnQsXG4gIG9mZnNldDogU2t5QWZmaXhPZmZzZXQsXG4gIGJ1ZmZlck9mZnNldD86IFNreUFmZml4T2Zmc2V0XG4pOiBib29sZWFuIHtcbiAgY29uc3QgcGFyZW50T2Zmc2V0ID0gZ2V0RWxlbWVudE9mZnNldChwYXJlbnQsIGJ1ZmZlck9mZnNldCk7XG5cbiAgcmV0dXJuICEoXG4gICAgcGFyZW50T2Zmc2V0LnRvcCA+PSBvZmZzZXQuYm90dG9tIHx8XG4gICAgcGFyZW50T2Zmc2V0LnJpZ2h0IDw9IG9mZnNldC5sZWZ0IHx8XG4gICAgcGFyZW50T2Zmc2V0LmJvdHRvbSA8PSBvZmZzZXQudG9wIHx8XG4gICAgcGFyZW50T2Zmc2V0LmxlZnQgPj0gb2Zmc2V0LnJpZ2h0XG4gICk7XG59XG4iXX0=
@@ -1,72 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { ElementRef, Injectable, OnDestroy, Renderer2, RendererFactory2 } from '@angular/core';
3
- import { MutationObserverService } from '../mutation/mutation-observer-service';
4
- import { fromEvent as observableFromEvent, Subject } from 'rxjs';
5
- import { debounceTime, takeUntil } from 'rxjs/operators';
6
- /**
7
- * @internal
8
- */
9
- var SkyDockDomAdapterService = /** @class */ (function () {
10
- function SkyDockDomAdapterService(mutationService, rendererFactory) {
11
- this.mutationService = mutationService;
12
- this.ngUnsubscribe = new Subject();
13
- this.renderer = rendererFactory.createRenderer(undefined, undefined);
14
- }
15
- SkyDockDomAdapterService.prototype.ngOnDestroy = function () {
16
- this.observer.disconnect();
17
- this.ngUnsubscribe.next();
18
- if (this.styleElement) {
19
- this.destroyStyleElement();
20
- }
21
- this.currentDockHeight =
22
- this.ngUnsubscribe =
23
- this.observer =
24
- this.styleElement = undefined;
25
- };
26
- SkyDockDomAdapterService.prototype.watchDomChanges = function (elementRef) {
27
- var _this = this;
28
- this.observer = this.mutationService.create(function () {
29
- _this.adjustBodyStyles(elementRef);
30
- });
31
- this.observer.observe(elementRef.nativeElement, {
32
- attributes: true,
33
- childList: true,
34
- characterData: true,
35
- subtree: true
36
- });
37
- observableFromEvent(window, 'resize')
38
- .pipe(debounceTime(250), takeUntil(this.ngUnsubscribe))
39
- .subscribe(function () { return _this.adjustBodyStyles(elementRef); });
40
- };
41
- SkyDockDomAdapterService.prototype.adjustBodyStyles = function (elementRef) {
42
- var dockHeight = elementRef.nativeElement.getBoundingClientRect().height;
43
- if (dockHeight === this.currentDockHeight) {
44
- return;
45
- }
46
- // Create a style element to avoid overwriting any existing inline body styles.
47
- var styleElement = this.renderer.createElement('style');
48
- var textNode = this.renderer.createText("body { margin-bottom: " + dockHeight + "px; }");
49
- // Apply a `data-` attribute to make unit testing easier.
50
- this.renderer.setAttribute(styleElement, 'data-test-selector', 'sky-layout-dock-bottom-styles');
51
- this.renderer.appendChild(styleElement, textNode);
52
- this.renderer.appendChild(document.head, styleElement);
53
- if (this.styleElement) {
54
- this.destroyStyleElement();
55
- }
56
- this.currentDockHeight = dockHeight;
57
- this.styleElement = styleElement;
58
- };
59
- SkyDockDomAdapterService.prototype.destroyStyleElement = function () {
60
- this.renderer.removeChild(document.head, this.styleElement);
61
- };
62
- SkyDockDomAdapterService.ctorParameters = function () { return [
63
- { type: MutationObserverService },
64
- { type: RendererFactory2 }
65
- ]; };
66
- SkyDockDomAdapterService = __decorate([
67
- Injectable()
68
- ], SkyDockDomAdapterService);
69
- return SkyDockDomAdapterService;
70
- }());
71
- export { SkyDockDomAdapterService };
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1kb20tYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L2NvcmUvIiwic291cmNlcyI6WyJtb2R1bGVzL2RvY2svZG9jay1kb20tYWRhcHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3hCLE1BQU0sdUNBQXVDLENBQUM7QUFFL0MsT0FBTyxFQUNMLFNBQVMsSUFBSSxtQkFBbUIsRUFDaEMsT0FBTyxFQUNSLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUNMLFlBQVksRUFDWixTQUFTLEVBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4Qjs7R0FFRztBQUVIO0lBWUUsa0NBQ1UsZUFBd0MsRUFDaEQsZUFBaUM7UUFEekIsb0JBQWUsR0FBZixlQUFlLENBQXlCO1FBVDFDLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVkxQyxJQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTSw4Q0FBVyxHQUFsQjtRQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUUxQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsaUJBQWlCO1lBQ3RCLElBQUksQ0FBQyxhQUFhO2dCQUNsQixJQUFJLENBQUMsUUFBUTtvQkFDYixJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sa0RBQWUsR0FBdEIsVUFBdUIsVUFBc0I7UUFBN0MsaUJBa0JDO1FBakJDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDMUMsS0FBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRTtZQUM5QyxVQUFVLEVBQUUsSUFBSTtZQUNoQixTQUFTLEVBQUUsSUFBSTtZQUNmLGFBQWEsRUFBRSxJQUFJO1lBQ25CLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQzthQUNsQyxJQUFJLENBQ0gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUM5QjthQUNBLFNBQVMsQ0FBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFqQyxDQUFpQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLG1EQUFnQixHQUF4QixVQUF5QixVQUFzQjtRQUM3QyxJQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTSxDQUFDO1FBQzNFLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN6QyxPQUFPO1NBQ1I7UUFFRCwrRUFBK0U7UUFDL0UsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsMkJBQXlCLFVBQVUsVUFBTyxDQUFDLENBQUM7UUFFdEYseURBQXlEO1FBQ3pELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUN4QixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLCtCQUErQixDQUNoQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFdkQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRU8sc0RBQW1CLEdBQTNCO1FBQ0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs7Z0JBdEUwQix1QkFBdUI7Z0JBQy9CLGdCQUFnQjs7SUFkeEIsd0JBQXdCO1FBRHBDLFVBQVUsRUFBRTtPQUNBLHdCQUF3QixDQXFGcEM7SUFBRCwrQkFBQztDQUFBLEFBckZELElBcUZDO1NBckZZLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdGFibGUsXG4gIE9uRGVzdHJveSxcbiAgUmVuZGVyZXIyLFxuICBSZW5kZXJlckZhY3RvcnkyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBNdXRhdGlvbk9ic2VydmVyU2VydmljZVxufSBmcm9tICcuLi9tdXRhdGlvbi9tdXRhdGlvbi1vYnNlcnZlci1zZXJ2aWNlJztcblxuaW1wb3J0IHtcbiAgZnJvbUV2ZW50IGFzIG9ic2VydmFibGVGcm9tRXZlbnQsXG4gIFN1YmplY3Rcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgdGFrZVVudGlsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreURvY2tEb21BZGFwdGVyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBjdXJyZW50RG9ja0hlaWdodDogbnVtYmVyO1xuXG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcblxuICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjI7XG5cbiAgcHJpdmF0ZSBzdHlsZUVsZW1lbnQ6IEhUTUxTdHlsZUVsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtdXRhdGlvblNlcnZpY2U6IE11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlLFxuICAgIHJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5MlxuICApIHtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuXG4gICAgaWYgKHRoaXMuc3R5bGVFbGVtZW50KSB7XG4gICAgICB0aGlzLmRlc3Ryb3lTdHlsZUVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnREb2NrSGVpZ2h0ID1cbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUgPVxuICAgIHRoaXMub2JzZXJ2ZXIgPVxuICAgIHRoaXMuc3R5bGVFbGVtZW50ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHdhdGNoRG9tQ2hhbmdlcyhlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgdGhpcy5vYnNlcnZlciA9IHRoaXMubXV0YXRpb25TZXJ2aWNlLmNyZWF0ZSgoKSA9PiB7XG4gICAgICB0aGlzLmFkanVzdEJvZHlTdHlsZXMoZWxlbWVudFJlZik7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB7XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcblxuICAgIG9ic2VydmFibGVGcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5hZGp1c3RCb2R5U3R5bGVzKGVsZW1lbnRSZWYpKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRqdXN0Qm9keVN0eWxlcyhlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgY29uc3QgZG9ja0hlaWdodCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgaWYgKGRvY2tIZWlnaHQgPT09IHRoaXMuY3VycmVudERvY2tIZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBzdHlsZSBlbGVtZW50IHRvIGF2b2lkIG92ZXJ3cml0aW5nIGFueSBleGlzdGluZyBpbmxpbmUgYm9keSBzdHlsZXMuXG4gICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIGNvbnN0IHRleHROb2RlID0gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KGBib2R5IHsgbWFyZ2luLWJvdHRvbTogJHtkb2NrSGVpZ2h0fXB4OyB9YCk7XG5cbiAgICAvLyBBcHBseSBhIGBkYXRhLWAgYXR0cmlidXRlIHRvIG1ha2UgdW5pdCB0ZXN0aW5nIGVhc2llci5cbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgIHN0eWxlRWxlbWVudCxcbiAgICAgICdkYXRhLXRlc3Qtc2VsZWN0b3InLFxuICAgICAgJ3NreS1sYXlvdXQtZG9jay1ib3R0b20tc3R5bGVzJ1xuICAgICk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCwgdGV4dE5vZGUpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuaGVhZCwgc3R5bGVFbGVtZW50KTtcblxuICAgIGlmICh0aGlzLnN0eWxlRWxlbWVudCkge1xuICAgICAgdGhpcy5kZXN0cm95U3R5bGVFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50RG9ja0hlaWdodCA9IGRvY2tIZWlnaHQ7XG4gICAgdGhpcy5zdHlsZUVsZW1lbnQgPSBzdHlsZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lTdHlsZUVsZW1lbnQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChkb2N1bWVudC5oZWFkLCB0aGlzLnN0eWxlRWxlbWVudCk7XG4gIH1cblxufVxuIl19
@@ -1 +0,0 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1pbnNlcnQtY29tcG9uZW50LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bza3l1eC9jb3JlLyIsInNvdXJjZXMiOlsibW9kdWxlcy9kb2NrL2RvY2staW5zZXJ0LWNvbXBvbmVudC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFN0YXRpY1Byb3ZpZGVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBTa3lEb2NrSXRlbUNvbmZpZ1xufSBmcm9tICcuL2RvY2staXRlbS1jb25maWcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNreURvY2tJbnNlcnRDb21wb25lbnRDb25maWcgZXh0ZW5kcyBTa3lEb2NrSXRlbUNvbmZpZyB7XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBwcm92aWRlcnMgdG8gaW5qZWN0IGludG8gdGhlIGl0ZW0ncyBjb21wb25lbnQuXG4gICAqL1xuICBwcm92aWRlcnM/OiBTdGF0aWNQcm92aWRlcltdO1xuXG59XG4iXX0=
@@ -1 +0,0 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1pdGVtLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bza3l1eC9jb3JlLyIsInNvdXJjZXMiOlsibW9kdWxlcy9kb2NrL2RvY2staXRlbS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlndXJhdGlvbiB0byBiZSB1c2VkIGJ5IHRoZSBkb2NraW5nIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTa3lEb2NrSXRlbUNvbmZpZyB7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjayBvcmRlciBvZiB0aGUgaXRlbS4gVGhlIGhpZ2hlciB0aGUgbnVtYmVyLCB0aGUgaGlnaGVyXG4gICAqIHRoZSBpdGVtIHdpbGwgYmUgcGxhY2VkIGluIHRoZSBkb2NrLiBCeSBkZWZhdWx0LCBuZXcgaXRlbXMgd2lsbCBiZSBwbGFjZWQgYXRcbiAgICogdGhlIHRvcCBvZiB0aGUgc3RhY2suXG4gICAqL1xuICBzdGFja09yZGVyPzogbnVtYmVyO1xuXG59XG4iXX0=
@@ -1 +0,0 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1pdGVtLXJlZmVyZW5jZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bza3l1eC9jb3JlLyIsInNvdXJjZXMiOlsibW9kdWxlcy9kb2NrL2RvY2staXRlbS1yZWZlcmVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZG9jayBpdGVtJ3MgY29tcG9uZW50IHJlZmVyZW5jZS5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNreURvY2tJdGVtUmVmZXJlbmNlPFQ+IHtcblxuICBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUPjtcblxuICBzdGFja09yZGVyOiBudW1iZXI7XG5cbn1cbiJdfQ==
@@ -1,35 +0,0 @@
1
- import { Subject } from 'rxjs';
2
- /**
3
- * Represents a single item added to the dock.
4
- */
5
- var SkyDockItem = /** @class */ (function () {
6
- /**
7
- * @param componentInstance The item's component instance.
8
- * @param stackOrder The assigned stack order of the docked item.
9
- */
10
- function SkyDockItem(componentInstance, stackOrder) {
11
- this.componentInstance = componentInstance;
12
- this.stackOrder = stackOrder;
13
- this._destroyed = new Subject();
14
- }
15
- Object.defineProperty(SkyDockItem.prototype, "destroyed", {
16
- /**
17
- * An event that emits when the item is removed from the dock.
18
- */
19
- get: function () {
20
- return this._destroyed.asObservable();
21
- },
22
- enumerable: true,
23
- configurable: true
24
- });
25
- /**
26
- * Removes the item from the dock.
27
- */
28
- SkyDockItem.prototype.destroy = function () {
29
- this._destroyed.next();
30
- this._destroyed.complete();
31
- };
32
- return SkyDockItem;
33
- }());
34
- export { SkyDockItem };
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jay1pdGVtLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L2NvcmUvIiwic291cmNlcyI6WyJtb2R1bGVzL2RvY2svZG9jay1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxPQUFPLEVBQ1IsTUFBTSxNQUFNLENBQUM7QUFFZDs7R0FFRztBQUNIO0lBV0U7OztPQUdHO0lBQ0gscUJBQ2tCLGlCQUFvQixFQUNwQixVQUFrQjtRQURsQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQUc7UUFDcEIsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQVI1QixlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQVNyQyxDQUFDO0lBYkwsc0JBQVcsa0NBQVM7UUFIcEI7O1dBRUc7YUFDSDtZQUNFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxDQUFDOzs7T0FBQTtJQWFEOztPQUVHO0lBQ0ksNkJBQU8sR0FBZDtRQUNFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUgsa0JBQUM7QUFBRCxDQUFDLEFBNUJELElBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdFxufSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGl0ZW0gYWRkZWQgdG8gdGhlIGRvY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBTa3lEb2NrSXRlbTxUPiB7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IHRoYXQgZW1pdHMgd2hlbiB0aGUgaXRlbSBpcyByZW1vdmVkIGZyb20gdGhlIGRvY2suXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlc3Ryb3llZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGVzdHJveWVkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKipcbiAgICogQHBhcmFtIGNvbXBvbmVudEluc3RhbmNlIFRoZSBpdGVtJ3MgY29tcG9uZW50IGluc3RhbmNlLlxuICAgKiBAcGFyYW0gc3RhY2tPcmRlciBUaGUgYXNzaWduZWQgc3RhY2sgb3JkZXIgb2YgdGhlIGRvY2tlZCBpdGVtLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbXBvbmVudEluc3RhbmNlOiBULFxuICAgIHB1YmxpYyByZWFkb25seSBzdGFja09yZGVyOiBudW1iZXJcbiAgKSB7IH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgaXRlbSBmcm9tIHRoZSBkb2NrLlxuICAgKi9cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgfVxuXG59XG4iXX0=