ngx-bootstrap 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +3 -0
  3. package/accordion/package.json +1 -1
  4. package/alert/package.json +1 -1
  5. package/bundles/ngx-bootstrap.es2015.js +10658 -8629
  6. package/bundles/ngx-bootstrap.es2015.js.map +1 -1
  7. package/buttons/package.json +1 -1
  8. package/carousel/package.json +1 -1
  9. package/chronos/bundles/ngx-bootstrap-chronos.umd.js +22 -1
  10. package/chronos/bundles/ngx-bootstrap-chronos.umd.js.map +1 -1
  11. package/chronos/bundles/ngx-bootstrap-chronos.umd.min.js +1 -1
  12. package/chronos/bundles/ngx-bootstrap-chronos.umd.min.js.map +1 -1
  13. package/chronos/esm2015/index.js +2 -2
  14. package/chronos/esm2015/ngx-bootstrap-chronos.js +2 -2
  15. package/chronos/esm2015/public_api.js +2 -2
  16. package/chronos/esm5/index.js +2 -2
  17. package/chronos/esm5/ngx-bootstrap-chronos.js +2 -2
  18. package/chronos/esm5/public_api.js +2 -2
  19. package/chronos/fesm2015/ngx-bootstrap-chronos.js +19 -2
  20. package/chronos/fesm2015/ngx-bootstrap-chronos.js.map +1 -1
  21. package/chronos/fesm5/ngx-bootstrap-chronos.js +20 -2
  22. package/chronos/fesm5/ngx-bootstrap-chronos.js.map +1 -1
  23. package/chronos/ngx-bootstrap-chronos.metadata.json +1 -1
  24. package/chronos/package.json +1 -1
  25. package/chronos/public_api.d.ts +1 -1
  26. package/collapse/package.json +1 -1
  27. package/component-loader/bundles/ngx-bootstrap-component-loader.umd.js +2 -1
  28. package/component-loader/bundles/ngx-bootstrap-component-loader.umd.js.map +1 -1
  29. package/component-loader/bundles/ngx-bootstrap-component-loader.umd.min.js +1 -1
  30. package/component-loader/bundles/ngx-bootstrap-component-loader.umd.min.js.map +1 -1
  31. package/component-loader/esm2015/component-loader.class.js +2 -1
  32. package/component-loader/esm5/component-loader.class.js +2 -1
  33. package/component-loader/fesm2015/ngx-bootstrap-component-loader.js +2 -1
  34. package/component-loader/fesm2015/ngx-bootstrap-component-loader.js.map +1 -1
  35. package/component-loader/fesm5/ngx-bootstrap-component-loader.js +2 -1
  36. package/component-loader/fesm5/ngx-bootstrap-component-loader.js.map +1 -1
  37. package/component-loader/package.json +1 -1
  38. package/datepicker/base/bs-datepicker-container.d.ts +1 -0
  39. package/datepicker/bs-datepicker-inline.component.d.ts +4 -0
  40. package/datepicker/bs-datepicker.component.d.ts +4 -0
  41. package/datepicker/bs-datepicker.config.d.ts +4 -0
  42. package/datepicker/bs-daterangepicker.component.d.ts +4 -0
  43. package/datepicker/bundles/ngx-bootstrap-datepicker.umd.js +69 -4
  44. package/datepicker/bundles/ngx-bootstrap-datepicker.umd.js.map +1 -1
  45. package/datepicker/bundles/ngx-bootstrap-datepicker.umd.min.js +1 -1
  46. package/datepicker/bundles/ngx-bootstrap-datepicker.umd.min.js.map +1 -1
  47. package/datepicker/engine/flag-days-calendar.d.ts +1 -0
  48. package/datepicker/esm2015/base/bs-datepicker-container.js +8 -1
  49. package/datepicker/esm2015/bs-datepicker-inline.component.js +12 -2
  50. package/datepicker/esm2015/bs-datepicker.component.js +11 -1
  51. package/datepicker/esm2015/bs-datepicker.config.js +6 -1
  52. package/datepicker/esm2015/bs-daterangepicker.component.js +12 -2
  53. package/datepicker/esm2015/engine/flag-days-calendar.js +6 -3
  54. package/datepicker/esm2015/reducer/bs-datepicker.actions.js +14 -1
  55. package/datepicker/esm2015/reducer/bs-datepicker.effects.js +9 -1
  56. package/datepicker/esm2015/reducer/bs-datepicker.reducer.js +2 -1
  57. package/datepicker/esm2015/reducer/bs-datepicker.state.js +3 -1
  58. package/datepicker/esm2015/utils/bs-calendar-utils.js +13 -2
  59. package/datepicker/esm5/base/bs-datepicker-container.js +12 -1
  60. package/datepicker/esm5/bs-datepicker-inline.component.js +12 -2
  61. package/datepicker/esm5/bs-datepicker.component.js +11 -1
  62. package/datepicker/esm5/bs-datepicker.config.js +6 -1
  63. package/datepicker/esm5/bs-daterangepicker.component.js +12 -2
  64. package/datepicker/esm5/engine/flag-days-calendar.js +6 -3
  65. package/datepicker/esm5/reducer/bs-datepicker.actions.js +18 -1
  66. package/datepicker/esm5/reducer/bs-datepicker.effects.js +13 -1
  67. package/datepicker/esm5/reducer/bs-datepicker.reducer.js +2 -1
  68. package/datepicker/esm5/reducer/bs-datepicker.state.js +3 -1
  69. package/datepicker/esm5/utils/bs-calendar-utils.js +13 -2
  70. package/datepicker/fesm2015/ngx-bootstrap-datepicker.js +59 -5
  71. package/datepicker/fesm2015/ngx-bootstrap-datepicker.js.map +1 -1
  72. package/datepicker/fesm5/ngx-bootstrap-datepicker.js +71 -5
  73. package/datepicker/fesm5/ngx-bootstrap-datepicker.js.map +1 -1
  74. package/datepicker/ngx-bootstrap-datepicker.metadata.json +1 -1
  75. package/datepicker/package.json +1 -1
  76. package/datepicker/reducer/bs-datepicker.actions.d.ts +2 -0
  77. package/datepicker/reducer/bs-datepicker.effects.d.ts +1 -0
  78. package/datepicker/reducer/bs-datepicker.state.d.ts +1 -0
  79. package/datepicker/utils/bs-calendar-utils.d.ts +1 -0
  80. package/dropdown/package.json +1 -1
  81. package/locale/package.json +1 -1
  82. package/mini-ngrx/package.json +1 -1
  83. package/modal/package.json +1 -1
  84. package/package.json +2 -2
  85. package/pagination/package.json +1 -1
  86. package/popover/bundles/ngx-bootstrap-popover.umd.js +3 -2
  87. package/popover/bundles/ngx-bootstrap-popover.umd.js.map +1 -1
  88. package/popover/bundles/ngx-bootstrap-popover.umd.min.js +1 -1
  89. package/popover/bundles/ngx-bootstrap-popover.umd.min.js.map +1 -1
  90. package/popover/esm2015/popover-container.component.js +19 -8
  91. package/popover/esm5/popover-container.component.js +3 -2
  92. package/popover/fesm2015/ngx-bootstrap-popover.js +19 -8
  93. package/popover/fesm2015/ngx-bootstrap-popover.js.map +1 -1
  94. package/popover/fesm5/ngx-bootstrap-popover.js +3 -2
  95. package/popover/fesm5/ngx-bootstrap-popover.js.map +1 -1
  96. package/popover/ngx-bootstrap-popover.metadata.json +1 -1
  97. package/popover/package.json +1 -1
  98. package/positioning/bundles/ngx-bootstrap-positioning.umd.js +1192 -252
  99. package/positioning/bundles/ngx-bootstrap-positioning.umd.js.map +1 -1
  100. package/positioning/bundles/ngx-bootstrap-positioning.umd.min.js +1 -1
  101. package/positioning/bundles/ngx-bootstrap-positioning.umd.min.js.map +1 -1
  102. package/positioning/esm2015/models/index.js +44 -0
  103. package/positioning/esm2015/modifiers/arrow.js +54 -0
  104. package/positioning/esm2015/modifiers/flip.js +65 -0
  105. package/positioning/esm2015/modifiers/index.js +11 -0
  106. package/positioning/esm2015/modifiers/initData.js +34 -0
  107. package/positioning/esm2015/modifiers/preventOverflow.js +70 -0
  108. package/positioning/esm2015/modifiers/shift.js +29 -0
  109. package/positioning/esm2015/ng-positioning.js +19 -220
  110. package/positioning/esm2015/positioning.service.js +44 -4
  111. package/positioning/esm2015/utils/computeAutoPlacement.js +64 -0
  112. package/positioning/esm2015/utils/findCommonOffsetParent.js +47 -0
  113. package/positioning/esm2015/utils/getBordersSize.js +20 -0
  114. package/positioning/esm2015/utils/getBoundaries.js +66 -0
  115. package/positioning/esm2015/utils/getBoundingClientRect.js +61 -0
  116. package/positioning/esm2015/utils/getClientRect.js +13 -0
  117. package/positioning/esm2015/utils/getFixedPositionOffsetParent.js +26 -0
  118. package/positioning/esm2015/utils/getOffsetParent.js +37 -0
  119. package/positioning/esm2015/utils/getOffsetRectRelativeToArbitraryNode.js +62 -0
  120. package/positioning/esm2015/utils/getOffsets.js +20 -0
  121. package/positioning/esm2015/utils/getOppositePlacement.js +15 -0
  122. package/positioning/esm2015/utils/getOppositeVariation.js +20 -0
  123. package/positioning/esm2015/utils/getOuterSizes.js +21 -0
  124. package/positioning/esm2015/utils/getParentNode.js +17 -0
  125. package/positioning/esm2015/utils/getReferenceOffsets.js +21 -0
  126. package/positioning/esm2015/utils/getRoot.js +17 -0
  127. package/positioning/esm2015/utils/getScroll.js +22 -0
  128. package/positioning/esm2015/utils/getScrollParent.js +32 -0
  129. package/positioning/esm2015/utils/getStyleComputedProperty.js +21 -0
  130. package/positioning/esm2015/utils/getTargetOffsets.js +38 -0
  131. package/positioning/esm2015/utils/getViewportOffsetRectRelativeToArtbitraryNode.js +29 -0
  132. package/positioning/esm2015/utils/getWindowSizes.js +34 -0
  133. package/positioning/esm2015/utils/includeScroll.js +23 -0
  134. package/positioning/esm2015/utils/index.js +28 -0
  135. package/positioning/esm2015/utils/isBrowser.js +7 -0
  136. package/positioning/esm2015/utils/isFixed.js +22 -0
  137. package/positioning/esm2015/utils/isIE.js +22 -0
  138. package/positioning/esm2015/utils/isNumeric.js +14 -0
  139. package/positioning/esm2015/utils/isOffsetContainer.js +18 -0
  140. package/positioning/esm2015/utils/setAllStyles.js +55 -0
  141. package/positioning/esm2015/utils/setStyles.js +28 -0
  142. package/positioning/esm5/models/index.js +44 -0
  143. package/positioning/esm5/modifiers/arrow.js +56 -0
  144. package/positioning/esm5/modifiers/flip.js +66 -0
  145. package/positioning/esm5/modifiers/index.js +11 -0
  146. package/positioning/esm5/modifiers/initData.js +34 -0
  147. package/positioning/esm5/modifiers/preventOverflow.js +73 -0
  148. package/positioning/esm5/modifiers/shift.js +31 -0
  149. package/positioning/esm5/ng-positioning.js +24 -247
  150. package/positioning/esm5/positioning.service.js +49 -5
  151. package/positioning/esm5/utils/computeAutoPlacement.js +72 -0
  152. package/positioning/esm5/utils/findCommonOffsetParent.js +47 -0
  153. package/positioning/esm5/utils/getBordersSize.js +20 -0
  154. package/positioning/esm5/utils/getBoundaries.js +68 -0
  155. package/positioning/esm5/utils/getBoundingClientRect.js +61 -0
  156. package/positioning/esm5/utils/getClientRect.js +14 -0
  157. package/positioning/esm5/utils/getFixedPositionOffsetParent.js +26 -0
  158. package/positioning/esm5/utils/getOffsetParent.js +37 -0
  159. package/positioning/esm5/utils/getOffsetRectRelativeToArbitraryNode.js +63 -0
  160. package/positioning/esm5/utils/getOffsets.js +20 -0
  161. package/positioning/esm5/utils/getOppositePlacement.js +15 -0
  162. package/positioning/esm5/utils/getOppositeVariation.js +20 -0
  163. package/positioning/esm5/utils/getOuterSizes.js +21 -0
  164. package/positioning/esm5/utils/getParentNode.js +17 -0
  165. package/positioning/esm5/utils/getReferenceOffsets.js +22 -0
  166. package/positioning/esm5/utils/getRoot.js +17 -0
  167. package/positioning/esm5/utils/getScroll.js +23 -0
  168. package/positioning/esm5/utils/getScrollParent.js +32 -0
  169. package/positioning/esm5/utils/getStyleComputedProperty.js +21 -0
  170. package/positioning/esm5/utils/getTargetOffsets.js +38 -0
  171. package/positioning/esm5/utils/getViewportOffsetRectRelativeToArtbitraryNode.js +30 -0
  172. package/positioning/esm5/utils/getWindowSizes.js +34 -0
  173. package/positioning/esm5/utils/includeScroll.js +24 -0
  174. package/positioning/esm5/utils/index.js +28 -0
  175. package/positioning/esm5/utils/isBrowser.js +7 -0
  176. package/positioning/esm5/utils/isFixed.js +22 -0
  177. package/positioning/esm5/utils/isIE.js +22 -0
  178. package/positioning/esm5/utils/isNumeric.js +14 -0
  179. package/positioning/esm5/utils/isOffsetContainer.js +18 -0
  180. package/positioning/esm5/utils/setAllStyles.js +55 -0
  181. package/positioning/esm5/utils/setStyles.js +28 -0
  182. package/positioning/fesm2015/ngx-bootstrap-positioning.js +1108 -211
  183. package/positioning/fesm2015/ngx-bootstrap-positioning.js.map +1 -1
  184. package/positioning/fesm5/ngx-bootstrap-positioning.js +1148 -249
  185. package/positioning/fesm5/ngx-bootstrap-positioning.js.map +1 -1
  186. package/positioning/models/index.d.ts +27 -0
  187. package/positioning/modifiers/arrow.d.ts +2 -0
  188. package/positioning/modifiers/flip.d.ts +2 -0
  189. package/positioning/modifiers/index.d.ts +5 -0
  190. package/positioning/modifiers/initData.d.ts +2 -0
  191. package/positioning/modifiers/preventOverflow.d.ts +2 -0
  192. package/positioning/modifiers/shift.d.ts +2 -0
  193. package/positioning/ng-positioning.d.ts +7 -10
  194. package/positioning/ngx-bootstrap-positioning.metadata.json +1 -1
  195. package/positioning/package.json +1 -1
  196. package/positioning/positioning.service.d.ts +7 -1
  197. package/positioning/utils/computeAutoPlacement.d.ts +2 -0
  198. package/positioning/utils/findCommonOffsetParent.d.ts +1 -0
  199. package/positioning/utils/getBordersSize.d.ts +4 -0
  200. package/positioning/utils/getBoundaries.d.ts +1 -0
  201. package/positioning/utils/getBoundingClientRect.d.ts +2 -0
  202. package/positioning/utils/getClientRect.d.ts +5 -0
  203. package/positioning/utils/getFixedPositionOffsetParent.d.ts +1 -0
  204. package/positioning/utils/getOffsetParent.d.ts +1 -0
  205. package/positioning/utils/getOffsetRectRelativeToArbitraryNode.d.ts +2 -0
  206. package/positioning/utils/getOffsets.d.ts +2 -0
  207. package/positioning/utils/getOppositePlacement.d.ts +4 -0
  208. package/positioning/utils/getOppositeVariation.d.ts +4 -0
  209. package/positioning/utils/getOuterSizes.d.ts +7 -0
  210. package/positioning/utils/getParentNode.d.ts +4 -0
  211. package/positioning/utils/getReferenceOffsets.d.ts +2 -0
  212. package/positioning/utils/getRoot.d.ts +4 -0
  213. package/positioning/utils/getScroll.d.ts +4 -0
  214. package/positioning/utils/getScrollParent.d.ts +1 -0
  215. package/positioning/utils/getStyleComputedProperty.d.ts +4 -0
  216. package/positioning/utils/getTargetOffsets.d.ts +2 -0
  217. package/positioning/utils/getViewportOffsetRectRelativeToArtbitraryNode.d.ts +2 -0
  218. package/positioning/utils/getWindowSizes.d.ts +4 -0
  219. package/positioning/utils/includeScroll.d.ts +2 -0
  220. package/positioning/utils/index.d.ts +22 -0
  221. package/positioning/utils/isBrowser.d.ts +1 -0
  222. package/positioning/utils/isFixed.d.ts +1 -0
  223. package/positioning/utils/isIE.d.ts +1 -0
  224. package/positioning/utils/isNumeric.d.ts +4 -0
  225. package/positioning/utils/isOffsetContainer.d.ts +1 -0
  226. package/positioning/utils/setAllStyles.d.ts +6 -0
  227. package/positioning/utils/setStyles.d.ts +5 -0
  228. package/progressbar/package.json +1 -1
  229. package/rating/package.json +1 -1
  230. package/sortable/package.json +1 -1
  231. package/tabs/package.json +1 -1
  232. package/timepicker/package.json +1 -1
  233. package/tooltip/bundles/ngx-bootstrap-tooltip.umd.js +3 -2
  234. package/tooltip/bundles/ngx-bootstrap-tooltip.umd.js.map +1 -1
  235. package/tooltip/bundles/ngx-bootstrap-tooltip.umd.min.js +1 -1
  236. package/tooltip/bundles/ngx-bootstrap-tooltip.umd.min.js.map +1 -1
  237. package/tooltip/esm2015/tooltip-container.component.js +12 -7
  238. package/tooltip/esm5/tooltip-container.component.js +3 -2
  239. package/tooltip/fesm2015/ngx-bootstrap-tooltip.js +12 -7
  240. package/tooltip/fesm2015/ngx-bootstrap-tooltip.js.map +1 -1
  241. package/tooltip/fesm5/ngx-bootstrap-tooltip.js +3 -2
  242. package/tooltip/fesm5/ngx-bootstrap-tooltip.js.map +1 -1
  243. package/tooltip/ngx-bootstrap-tooltip.metadata.json +1 -1
  244. package/tooltip/package.json +1 -1
  245. package/typeahead/bundles/ngx-bootstrap-typeahead.umd.js +46 -22
  246. package/typeahead/bundles/ngx-bootstrap-typeahead.umd.js.map +1 -1
  247. package/typeahead/bundles/ngx-bootstrap-typeahead.umd.min.js +1 -1
  248. package/typeahead/bundles/ngx-bootstrap-typeahead.umd.min.js.map +1 -1
  249. package/typeahead/esm2015/typeahead-container.component.js +15 -4
  250. package/typeahead/esm2015/typeahead.config.js +21 -1
  251. package/typeahead/esm2015/typeahead.directive.js +37 -21
  252. package/typeahead/esm5/typeahead-container.component.js +12 -4
  253. package/typeahead/esm5/typeahead.config.js +21 -1
  254. package/typeahead/esm5/typeahead.directive.js +37 -21
  255. package/typeahead/fesm2015/ngx-bootstrap-typeahead.js +49 -22
  256. package/typeahead/fesm2015/ngx-bootstrap-typeahead.js.map +1 -1
  257. package/typeahead/fesm5/ngx-bootstrap-typeahead.js +46 -22
  258. package/typeahead/fesm5/ngx-bootstrap-typeahead.js.map +1 -1
  259. package/typeahead/ngx-bootstrap-typeahead.metadata.json +1 -1
  260. package/typeahead/package.json +1 -1
  261. package/typeahead/typeahead-container.component.d.ts +1 -1
  262. package/typeahead/typeahead.config.d.ts +6 -0
  263. package/typeahead/typeahead.directive.d.ts +7 -1
  264. package/utils/package.json +1 -1
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes} checked by tsc
4
+ */
5
+ import { getClientRect, getOuterSizes, getStyleComputedProperty } from '../utils';
6
+ /**
7
+ * @param {?} data
8
+ * @return {?}
9
+ */
10
+ export function arrow(data) {
11
+ let /** @type {?} */ targetOffsets = data.offsets.target;
12
+ // if arrowElement is a string, suppose it's a CSS selector
13
+ const /** @type {?} */ arrowElement = data.instance.target.querySelector('.arrow');
14
+ // if arrowElement is not found, don't run the modifier
15
+ if (!arrowElement) {
16
+ return data;
17
+ }
18
+ const /** @type {?} */ isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
19
+ const /** @type {?} */ len = isVertical ? 'height' : 'width';
20
+ const /** @type {?} */ sideCapitalized = isVertical ? 'Top' : 'Left';
21
+ const /** @type {?} */ side = sideCapitalized.toLowerCase();
22
+ const /** @type {?} */ altSide = isVertical ? 'left' : 'top';
23
+ const /** @type {?} */ opSide = isVertical ? 'bottom' : 'right';
24
+ const /** @type {?} */ arrowElementSize = getOuterSizes(arrowElement)[len];
25
+ // top/left side
26
+ if (data.offsets.host[opSide] - arrowElementSize < targetOffsets[side]) {
27
+ targetOffsets[side] -=
28
+ targetOffsets[side] - (data.offsets.host[opSide] - arrowElementSize);
29
+ }
30
+ // bottom/right side
31
+ if (Number(data.offsets.host[side]) + Number(arrowElementSize) > targetOffsets[opSide]) {
32
+ targetOffsets[side] +=
33
+ Number(data.offsets.host[side]) + Number(arrowElementSize) - Number(targetOffsets[opSide]);
34
+ }
35
+ targetOffsets = getClientRect(targetOffsets);
36
+ // compute center of the target
37
+ const /** @type {?} */ center = Number(data.offsets.host[side]) + Number(data.offsets.host[len] / 2 - arrowElementSize / 2);
38
+ // Compute the sideValue using the updated target offsets
39
+ // take target margin in account because we don't have this info available
40
+ const /** @type {?} */ css = getStyleComputedProperty(data.instance.target);
41
+ const /** @type {?} */ targetMarginSide = parseFloat(css[`margin${sideCapitalized}`]);
42
+ const /** @type {?} */ targetBorderSide = parseFloat(css[`border${sideCapitalized}Width`]);
43
+ let /** @type {?} */ sideValue = center - targetOffsets[side] - targetMarginSide - targetBorderSide;
44
+ // prevent arrowElement from being placed not contiguously to its target
45
+ sideValue = Math.max(Math.min(targetOffsets[len] - arrowElementSize, sideValue), 0);
46
+ data.offsets.arrow = {
47
+ [side]: Math.round(sideValue),
48
+ [altSide]: '' // make sure to unset any eventual altSide value from the DOM node
49
+ };
50
+ data.instance.arrow = arrowElement;
51
+ return data;
52
+ }
53
+
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyb3cuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYm9vdHN0cmFwL3Bvc2l0aW9uaW5nLyIsInNvdXJjZXMiOlsibW9kaWZpZXJzL2Fycm93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7QUFHbEYsTUFBTSxnQkFBZ0IsSUFBVTtJQUM5QixxQkFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7O0lBRXhDLHVCQUFNLFlBQVksR0FBdUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztJQUd0RixFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQztLQUNiO0lBRUQsdUJBQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFcEUsdUJBQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDNUMsdUJBQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDcEQsdUJBQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMzQyx1QkFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM1Qyx1QkFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUMvQyx1QkFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRzFELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsYUFBYSxDQUFDLElBQUksQ0FBQztZQUNqQixhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3hFOztJQUVELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkYsYUFBYSxDQUFDLElBQUksQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDOUY7SUFDRCxhQUFhLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDOztJQUc3Qyx1QkFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQzs7O0lBSTNHLHVCQUFNLEdBQUcsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTNELHVCQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckUsdUJBQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLGVBQWUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRSxxQkFBSSxTQUFTLEdBQ1gsTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQzs7SUFHckUsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFcEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUc7UUFDbkIsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUM3QixDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7S0FDZCxDQUFDO0lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDO0lBRW5DLE1BQU0sQ0FBQyxJQUFJLENBQUM7Q0FDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldENsaWVudFJlY3QsIGdldE91dGVyU2l6ZXMsIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IERhdGEgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gYXJyb3coZGF0YTogRGF0YSkge1xuICBsZXQgdGFyZ2V0T2Zmc2V0cyA9IGRhdGEub2Zmc2V0cy50YXJnZXQ7XG4gIC8vIGlmIGFycm93RWxlbWVudCBpcyBhIHN0cmluZywgc3VwcG9zZSBpdCdzIGEgQ1NTIHNlbGVjdG9yXG4gIGNvbnN0IGFycm93RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gZGF0YS5pbnN0YW5jZS50YXJnZXQucXVlcnlTZWxlY3RvcignLmFycm93Jyk7XG5cbiAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIG5vdCBmb3VuZCwgZG9uJ3QgcnVuIHRoZSBtb2RpZmllclxuICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgY29uc3QgaXNWZXJ0aWNhbCA9IFsnbGVmdCcsICdyaWdodCddLmluZGV4T2YoZGF0YS5wbGFjZW1lbnQpICE9PSAtMTtcblxuICBjb25zdCBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICBjb25zdCBzaWRlQ2FwaXRhbGl6ZWQgPSBpc1ZlcnRpY2FsID8gJ1RvcCcgOiAnTGVmdCc7XG4gIGNvbnN0IHNpZGUgPSBzaWRlQ2FwaXRhbGl6ZWQudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgYWx0U2lkZSA9IGlzVmVydGljYWwgPyAnbGVmdCcgOiAndG9wJztcbiAgY29uc3Qgb3BTaWRlID0gaXNWZXJ0aWNhbCA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgY29uc3QgYXJyb3dFbGVtZW50U2l6ZSA9IGdldE91dGVyU2l6ZXMoYXJyb3dFbGVtZW50KVtsZW5dO1xuXG4gIC8vIHRvcC9sZWZ0IHNpZGVcbiAgaWYgKGRhdGEub2Zmc2V0cy5ob3N0W29wU2lkZV0gLSBhcnJvd0VsZW1lbnRTaXplIDwgdGFyZ2V0T2Zmc2V0c1tzaWRlXSkge1xuICAgIHRhcmdldE9mZnNldHNbc2lkZV0gLT1cbiAgICAgIHRhcmdldE9mZnNldHNbc2lkZV0gLSAoZGF0YS5vZmZzZXRzLmhvc3Rbb3BTaWRlXSAtIGFycm93RWxlbWVudFNpemUpO1xuICB9XG4gIC8vIGJvdHRvbS9yaWdodCBzaWRlXG4gIGlmIChOdW1iZXIoZGF0YS5vZmZzZXRzLmhvc3Rbc2lkZV0pICsgTnVtYmVyKGFycm93RWxlbWVudFNpemUpID4gdGFyZ2V0T2Zmc2V0c1tvcFNpZGVdKSB7XG4gICAgdGFyZ2V0T2Zmc2V0c1tzaWRlXSArPVxuICAgICAgTnVtYmVyKGRhdGEub2Zmc2V0cy5ob3N0W3NpZGVdKSArIE51bWJlcihhcnJvd0VsZW1lbnRTaXplKSAtIE51bWJlcih0YXJnZXRPZmZzZXRzW29wU2lkZV0pO1xuICB9XG4gIHRhcmdldE9mZnNldHMgPSBnZXRDbGllbnRSZWN0KHRhcmdldE9mZnNldHMpO1xuXG4gIC8vIGNvbXB1dGUgY2VudGVyIG9mIHRoZSB0YXJnZXRcbiAgY29uc3QgY2VudGVyID0gTnVtYmVyKGRhdGEub2Zmc2V0cy5ob3N0W3NpZGVdKSArIE51bWJlcihkYXRhLm9mZnNldHMuaG9zdFtsZW5dIC8gMiAtIGFycm93RWxlbWVudFNpemUgLyAyKTtcblxuICAvLyBDb21wdXRlIHRoZSBzaWRlVmFsdWUgdXNpbmcgdGhlIHVwZGF0ZWQgdGFyZ2V0IG9mZnNldHNcbiAgLy8gdGFrZSB0YXJnZXQgbWFyZ2luIGluIGFjY291bnQgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRoaXMgaW5mbyBhdmFpbGFibGVcbiAgY29uc3QgY3NzID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGRhdGEuaW5zdGFuY2UudGFyZ2V0KTtcblxuICBjb25zdCB0YXJnZXRNYXJnaW5TaWRlID0gcGFyc2VGbG9hdChjc3NbYG1hcmdpbiR7c2lkZUNhcGl0YWxpemVkfWBdKTtcbiAgY29uc3QgdGFyZ2V0Qm9yZGVyU2lkZSA9IHBhcnNlRmxvYXQoY3NzW2Bib3JkZXIke3NpZGVDYXBpdGFsaXplZH1XaWR0aGBdKTtcbiAgbGV0IHNpZGVWYWx1ZSA9XG4gICAgY2VudGVyIC0gdGFyZ2V0T2Zmc2V0c1tzaWRlXSAtIHRhcmdldE1hcmdpblNpZGUgLSB0YXJnZXRCb3JkZXJTaWRlO1xuXG4gIC8vIHByZXZlbnQgYXJyb3dFbGVtZW50IGZyb20gYmVpbmcgcGxhY2VkIG5vdCBjb250aWd1b3VzbHkgdG8gaXRzIHRhcmdldFxuICBzaWRlVmFsdWUgPSBNYXRoLm1heChNYXRoLm1pbih0YXJnZXRPZmZzZXRzW2xlbl0gLSBhcnJvd0VsZW1lbnRTaXplLCBzaWRlVmFsdWUpLCAwKTtcblxuICBkYXRhLm9mZnNldHMuYXJyb3cgPSB7XG4gICAgW3NpZGVdOiBNYXRoLnJvdW5kKHNpZGVWYWx1ZSksXG4gICAgW2FsdFNpZGVdOiAnJyAvLyBtYWtlIHN1cmUgdG8gdW5zZXQgYW55IGV2ZW50dWFsIGFsdFNpZGUgdmFsdWUgZnJvbSB0aGUgRE9NIG5vZGVcbiAgfTtcblxuICBkYXRhLmluc3RhbmNlLmFycm93ID0gYXJyb3dFbGVtZW50O1xuXG4gIHJldHVybiBkYXRhO1xufVxuIl19
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes} checked by tsc
4
+ */
5
+ import { computeAutoPlacement, getBoundaries, getClientRect, getOppositePlacement, getOppositeVariation, getTargetOffsets } from '../utils';
6
+ /**
7
+ * @param {?} data
8
+ * @return {?}
9
+ */
10
+ export function flip(data) {
11
+ data.offsets.target = getClientRect(data.offsets.target);
12
+ const /** @type {?} */ boundaries = getBoundaries(data.instance.target, data.instance.host, 0, // padding
13
+ 'viewport', false // positionFixed
14
+ );
15
+ let /** @type {?} */ placement = data.placement.split(' ')[0];
16
+ let /** @type {?} */ variation = data.placement.split(' ')[1] || '';
17
+ const /** @type {?} */ adaptivePosition = variation
18
+ ? getOppositePlacement(placement)
19
+ : computeAutoPlacement('auto', data.offsets.host, data.instance.target, data.instance.host, 'viewport', 0);
20
+ const /** @type {?} */ flipOrder = [placement, adaptivePosition];
21
+ /* tslint:disable-next-line: cyclomatic-complexity */
22
+ flipOrder.forEach((step, index) => {
23
+ if (placement !== step || flipOrder.length === index + 1) {
24
+ return data;
25
+ }
26
+ placement = data.placement.split(' ')[0];
27
+ // using floor because the host offsets may contain decimals we are not going to consider here
28
+ const /** @type {?} */ overlapsRef = (placement === 'left' &&
29
+ Math.floor(data.offsets.target.right) > Math.floor(data.offsets.host.left)) ||
30
+ (placement === 'right' &&
31
+ Math.floor(data.offsets.target.left) < Math.floor(data.offsets.host.right)) ||
32
+ (placement === 'top' &&
33
+ Math.floor(data.offsets.target.bottom) > Math.floor(data.offsets.host.top)) ||
34
+ (placement === 'bottom' &&
35
+ Math.floor(data.offsets.target.top) < Math.floor(data.offsets.host.bottom));
36
+ const /** @type {?} */ overflowsLeft = Math.floor(data.offsets.target.left) < Math.floor(boundaries.left);
37
+ const /** @type {?} */ overflowsRight = Math.floor(data.offsets.target.right) > Math.floor(boundaries.right);
38
+ const /** @type {?} */ overflowsTop = Math.floor(data.offsets.target.top) < Math.floor(boundaries.top);
39
+ const /** @type {?} */ overflowsBottom = Math.floor(data.offsets.target.bottom) > Math.floor(boundaries.bottom);
40
+ const /** @type {?} */ overflowsBoundaries = (placement === 'left' && overflowsLeft) ||
41
+ (placement === 'right' && overflowsRight) ||
42
+ (placement === 'top' && overflowsTop) ||
43
+ (placement === 'bottom' && overflowsBottom);
44
+ // flip the variation if required
45
+ const /** @type {?} */ isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
46
+ const /** @type {?} */ flippedVariation = ((isVertical && variation === 'left' && overflowsLeft) ||
47
+ (isVertical && variation === 'right' && overflowsRight) ||
48
+ (!isVertical && variation === 'left' && overflowsTop) ||
49
+ (!isVertical && variation === 'right' && overflowsBottom));
50
+ if (overlapsRef || overflowsBoundaries || flippedVariation) {
51
+ // this boolean to detect any flip loop
52
+ if (overlapsRef || overflowsBoundaries) {
53
+ placement = flipOrder[index + 1];
54
+ }
55
+ if (flippedVariation) {
56
+ variation = getOppositeVariation(variation);
57
+ }
58
+ data.placement = placement + (variation ? ` ${variation}` : '');
59
+ data.offsets.target = Object.assign({}, data.offsets.target, getTargetOffsets(data.instance.target, data.offsets.host, data.placement));
60
+ }
61
+ });
62
+ return data;
63
+ }
64
+
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpcC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1ib290c3RyYXAvcG9zaXRpb25pbmcvIiwic291cmNlcyI6WyJtb2RpZmllcnMvZmxpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixhQUFhLEVBQUUsYUFBYSxFQUM1QixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNqQixNQUFNLFVBQVUsQ0FBQzs7Ozs7QUFJbEIsTUFBTSxlQUFlLElBQVU7SUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFekQsdUJBQU0sVUFBVSxHQUFHLGFBQWEsQ0FDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUNsQixDQUFDLEVBQUUsVUFBVTtJQUNiLFVBQVUsRUFDVixLQUFLO0tBQ04sQ0FBQztJQUVGLHFCQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxxQkFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRW5ELHVCQUFNLGdCQUFnQixHQUFHLFNBQVM7UUFDaEMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQztRQUNqQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3Ryx1QkFBTSxTQUFTLEdBQUcs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QUMsVUFBVSxJQUFJLFNBQVMsS0FBSyxNQUFNLElBQUksYUFBYSxDQUFDO1lBQ3BELENBQUMsVUFBVSxJQUFJLFNBQVMsS0FBSyxPQUFPLElBQUksY0FBYyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxVQUFVLElBQUksU0FBUyxLQUFLLE1BQU0sSUFBSSxZQUFZLENBQUM7WUFDckQsQ0FBQyxDQUFDLFVBQVUsSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFFL0QsRUFBRSxDQUFDLENBQUMsV0FBVyxJQUFJLG1CQUFtQixJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQzs7WUFFM0QsRUFBRSxDQUFDLENBQUMsV0FBVyxJQUFJLG1CQUFtQixDQUFDLENBQUMsQ0FBQztnQkFDdkMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDbEM7WUFFRCxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUM3QztZQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVoRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0scUJBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQ25CLGdCQUFnQixDQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQ2pCLElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FDRixDQUFDO1NBQ0g7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDO0NBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb21wdXRlQXV0b1BsYWNlbWVudCxcbiAgZ2V0Qm91bmRhcmllcywgZ2V0Q2xpZW50UmVjdCxcbiAgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsXG4gIGdldE9wcG9zaXRlVmFyaWF0aW9uLFxuICBnZXRUYXJnZXRPZmZzZXRzXG59IGZyb20gJy4uL3V0aWxzJztcblxuaW1wb3J0IHsgRGF0YSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGlwKGRhdGE6IERhdGEpOiBEYXRhIHtcbiAgZGF0YS5vZmZzZXRzLnRhcmdldCA9IGdldENsaWVudFJlY3QoZGF0YS5vZmZzZXRzLnRhcmdldCk7XG5cbiAgY29uc3QgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoXG4gICAgZGF0YS5pbnN0YW5jZS50YXJnZXQsXG4gICAgZGF0YS5pbnN0YW5jZS5ob3N0LFxuICAgIDAsIC8vIHBhZGRpbmdcbiAgICAndmlld3BvcnQnLFxuICAgIGZhbHNlIC8vIHBvc2l0aW9uRml4ZWRcbiAgKTtcblxuICBsZXQgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJyAnKVswXTtcbiAgbGV0IHZhcmlhdGlvbiA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCcgJylbMV0gfHwgJyc7XG5cbiAgY29uc3QgYWRhcHRpdmVQb3NpdGlvbiA9IHZhcmlhdGlvblxuICAgID8gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KVxuICAgIDogY29tcHV0ZUF1dG9QbGFjZW1lbnQoJ2F1dG8nLCBkYXRhLm9mZnNldHMuaG9zdCwgZGF0YS5pbnN0YW5jZS50YXJnZXQsIGRhdGEuaW5zdGFuY2UuaG9zdCwgJ3ZpZXdwb3J0JywgMCk7XG5cbiAgY29uc3QgZmxpcE9yZGVyID0gW3BsYWNlbWVudCwgYWRhcHRpdmVQb3NpdGlvbl07XG5cbiAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjeWNsb21hdGljLWNvbXBsZXhpdHkgKi9cbiAgZmxpcE9yZGVyLmZvckVhY2goKHN0ZXAsIGluZGV4KSA9PiB7XG4gICAgaWYgKHBsYWNlbWVudCAhPT0gc3RlcCB8fCBmbGlwT3JkZXIubGVuZ3RoID09PSBpbmRleCArIDEpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCcgJylbMF07XG5cbiAgICAvLyB1c2luZyBmbG9vciBiZWNhdXNlIHRoZSBob3N0IG9mZnNldHMgbWF5IGNvbnRhaW4gZGVjaW1hbHMgd2UgYXJlIG5vdCBnb2luZyB0byBjb25zaWRlciBoZXJlXG4gICAgY29uc3Qgb3ZlcmxhcHNSZWYgPVxuICAgICAgKHBsYWNlbWVudCA9PT0gJ2xlZnQnICYmXG4gICAgICAgIE1hdGguZmxvb3IoZGF0YS5vZmZzZXRzLnRhcmdldC5yaWdodCkgPiBNYXRoLmZsb29yKGRhdGEub2Zmc2V0cy5ob3N0LmxlZnQpKSB8fFxuICAgICAgKHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyAmJlxuICAgICAgICBNYXRoLmZsb29yKGRhdGEub2Zmc2V0cy50YXJnZXQubGVmdCkgPCBNYXRoLmZsb29yKGRhdGEub2Zmc2V0cy5ob3N0LnJpZ2h0KSkgfHxcbiAgICAgIChwbGFjZW1lbnQgPT09ICd0b3AnICYmXG4gICAgICAgIE1hdGguZmxvb3IoZGF0YS5vZmZzZXRzLnRhcmdldC5ib3R0b20pID4gTWF0aC5mbG9vcihkYXRhLm9mZnNldHMuaG9zdC50b3ApKSB8fFxuICAgICAgKHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiZcbiAgICAgICAgTWF0aC5mbG9vcihkYXRhLm9mZnNldHMudGFyZ2V0LnRvcCkgPCBNYXRoLmZsb29yKGRhdGEub2Zmc2V0cy5ob3N0LmJvdHRvbSkpO1xuXG4gICAgY29uc3Qgb3ZlcmZsb3dzTGVmdCA9IE1hdGguZmxvb3IoZGF0YS5vZmZzZXRzLnRhcmdldC5sZWZ0KSA8IE1hdGguZmxvb3IoYm91bmRhcmllcy5sZWZ0KTtcbiAgICBjb25zdCBvdmVyZmxvd3NSaWdodCA9IE1hdGguZmxvb3IoZGF0YS5vZmZzZXRzLnRhcmdldC5yaWdodCkgPiBNYXRoLmZsb29yKGJvdW5kYXJpZXMucmlnaHQpO1xuICAgIGNvbnN0IG92ZXJmbG93c1RvcCA9IE1hdGguZmxvb3IoZGF0YS5vZmZzZXRzLnRhcmdldC50b3ApIDwgTWF0aC5mbG9vcihib3VuZGFyaWVzLnRvcCk7XG4gICAgY29uc3Qgb3ZlcmZsb3dzQm90dG9tID0gTWF0aC5mbG9vcihkYXRhLm9mZnNldHMudGFyZ2V0LmJvdHRvbSkgPiBNYXRoLmZsb29yKGJvdW5kYXJpZXMuYm90dG9tKTtcblxuICAgIGNvbnN0IG92ZXJmbG93c0JvdW5kYXJpZXMgPVxuICAgICAgKHBsYWNlbWVudCA9PT0gJ2xlZnQnICYmIG92ZXJmbG93c0xlZnQpIHx8XG4gICAgICAocGxhY2VtZW50ID09PSAncmlnaHQnICYmIG92ZXJmbG93c1JpZ2h0KSB8fFxuICAgICAgKHBsYWNlbWVudCA9PT0gJ3RvcCcgJiYgb3ZlcmZsb3dzVG9wKSB8fFxuICAgICAgKHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYgb3ZlcmZsb3dzQm90dG9tKTtcblxuICAgIC8vIGZsaXAgdGhlIHZhcmlhdGlvbiBpZiByZXF1aXJlZFxuICAgIGNvbnN0IGlzVmVydGljYWwgPSBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuICAgIGNvbnN0IGZsaXBwZWRWYXJpYXRpb24gPVxuICAgICAgKChpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2xlZnQnICYmIG92ZXJmbG93c0xlZnQpIHx8XG4gICAgICAgIChpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3JpZ2h0JyAmJiBvdmVyZmxvd3NSaWdodCkgfHxcbiAgICAgICAgKCFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2xlZnQnICYmIG92ZXJmbG93c1RvcCkgfHxcbiAgICAgICAgKCFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3JpZ2h0JyAmJiBvdmVyZmxvd3NCb3R0b20pKTtcblxuICAgIGlmIChvdmVybGFwc1JlZiB8fCBvdmVyZmxvd3NCb3VuZGFyaWVzIHx8IGZsaXBwZWRWYXJpYXRpb24pIHtcbiAgICAgIC8vIHRoaXMgYm9vbGVhbiB0byBkZXRlY3QgYW55IGZsaXAgbG9vcFxuICAgICAgaWYgKG92ZXJsYXBzUmVmIHx8IG92ZXJmbG93c0JvdW5kYXJpZXMpIHtcbiAgICAgICAgcGxhY2VtZW50ID0gZmxpcE9yZGVyW2luZGV4ICsgMV07XG4gICAgICB9XG5cbiAgICAgIGlmIChmbGlwcGVkVmFyaWF0aW9uKSB7XG4gICAgICAgIHZhcmlhdGlvbiA9IGdldE9wcG9zaXRlVmFyaWF0aW9uKHZhcmlhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGRhdGEucGxhY2VtZW50ID0gcGxhY2VtZW50ICsgKHZhcmlhdGlvbiA/IGAgJHt2YXJpYXRpb259YCA6ICcnKTtcblxuICAgICAgZGF0YS5vZmZzZXRzLnRhcmdldCA9IHtcbiAgICAgICAgLi4uZGF0YS5vZmZzZXRzLnRhcmdldCxcbiAgICAgICAgLi4uZ2V0VGFyZ2V0T2Zmc2V0cyhcbiAgICAgICAgICBkYXRhLmluc3RhbmNlLnRhcmdldCxcbiAgICAgICAgICBkYXRhLm9mZnNldHMuaG9zdCxcbiAgICAgICAgICBkYXRhLnBsYWNlbWVudFxuICAgICAgICApXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes} checked by tsc
4
+ */
5
+ export { arrow } from './arrow';
6
+ export { flip } from './flip';
7
+ export { initData } from './initData';
8
+ export { preventOverflow } from './preventOverflow';
9
+ export { shift } from './shift';
10
+
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYm9vdHN0cmFwL3Bvc2l0aW9uaW5nLyIsInNvdXJjZXMiOlsibW9kaWZpZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGFycm93IH0gZnJvbSAnLi9hcnJvdyc7XG5leHBvcnQgeyBmbGlwIH0gZnJvbSAnLi9mbGlwJztcbmV4cG9ydCB7IGluaXREYXRhIH0gZnJvbSAnLi9pbml0RGF0YSc7XG5leHBvcnQgeyBwcmV2ZW50T3ZlcmZsb3cgfSBmcm9tICcuL3ByZXZlbnRPdmVyZmxvdyc7XG5leHBvcnQgeyBzaGlmdCB9IGZyb20gJy4vc2hpZnQnO1xuIl19
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes} checked by tsc
4
+ */
5
+ import { computeAutoPlacement, getReferenceOffsets, getTargetOffsets } from '../utils';
6
+ /**
7
+ * @param {?} targetElement
8
+ * @param {?} hostElement
9
+ * @param {?} position
10
+ * @return {?}
11
+ */
12
+ export function initData(targetElement, hostElement, position) {
13
+ const /** @type {?} */ hostElPosition = getReferenceOffsets(targetElement, hostElement);
14
+ const /** @type {?} */ targetOffset = getTargetOffsets(targetElement, hostElPosition, position);
15
+ const /** @type {?} */ placement = computeAutoPlacement(position, hostElPosition, targetElement, hostElement, 'viewport', 0);
16
+ const /** @type {?} */ placementAuto = position.indexOf('auto') !== -1;
17
+ return {
18
+ instance: {
19
+ target: targetElement,
20
+ host: hostElement,
21
+ arrow: null
22
+ },
23
+ offsets: {
24
+ target: targetOffset,
25
+ host: hostElPosition,
26
+ arrow: null
27
+ },
28
+ positionFixed: false,
29
+ placement,
30
+ placementAuto
31
+ };
32
+ }
33
+
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdERhdGEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYm9vdHN0cmFwL3Bvc2l0aW9uaW5nLyIsInNvdXJjZXMiOlsibW9kaWZpZXJzL2luaXREYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDakIsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7QUFJbEIsTUFBTSxtQkFBbUIsYUFBMEIsRUFBRSxXQUF3QixFQUFFLFFBQWdCO0lBRTdGLHVCQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdkUsdUJBQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFL0UsdUJBQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUcsdUJBQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFdEQsTUFBTSxDQUFDO1FBQ0wsUUFBUSxFQUFFO1lBQ1IsTUFBTSxFQUFFLGFBQWE7WUFDckIsSUFBSSxFQUFFLFdBQVc7WUFDakIsS0FBSyxFQUFFLElBQUk7U0FDWjtRQUNELE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLElBQUksRUFBRSxjQUFjO1lBQ3BCLEtBQUssRUFBRSxJQUFJO1NBQ1o7UUFDRCxhQUFhLEVBQUUsS0FBSztRQUNwQixTQUFTO1FBQ1QsYUFBYTtLQUNkLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNvbXB1dGVBdXRvUGxhY2VtZW50LFxuICBnZXRSZWZlcmVuY2VPZmZzZXRzLFxuICBnZXRUYXJnZXRPZmZzZXRzXG59IGZyb20gJy4uL3V0aWxzJztcblxuaW1wb3J0IHsgRGF0YSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0RGF0YSh0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCwgaG9zdEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwb3NpdGlvbjogc3RyaW5nKTogRGF0YSB7XG5cbiAgY29uc3QgaG9zdEVsUG9zaXRpb24gPSBnZXRSZWZlcmVuY2VPZmZzZXRzKHRhcmdldEVsZW1lbnQsIGhvc3RFbGVtZW50KTtcbiAgY29uc3QgdGFyZ2V0T2Zmc2V0ID0gZ2V0VGFyZ2V0T2Zmc2V0cyh0YXJnZXRFbGVtZW50LCBob3N0RWxQb3NpdGlvbiwgcG9zaXRpb24pO1xuXG4gIGNvbnN0IHBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KHBvc2l0aW9uLCBob3N0RWxQb3NpdGlvbiwgdGFyZ2V0RWxlbWVudCwgaG9zdEVsZW1lbnQsICd2aWV3cG9ydCcsIDApO1xuICBjb25zdCBwbGFjZW1lbnRBdXRvID0gcG9zaXRpb24uaW5kZXhPZignYXV0bycpICE9PSAtMTtcblxuICByZXR1cm4ge1xuICAgIGluc3RhbmNlOiB7XG4gICAgICB0YXJnZXQ6IHRhcmdldEVsZW1lbnQsXG4gICAgICBob3N0OiBob3N0RWxlbWVudCxcbiAgICAgIGFycm93OiBudWxsXG4gICAgfSxcbiAgICBvZmZzZXRzOiB7XG4gICAgICB0YXJnZXQ6IHRhcmdldE9mZnNldCxcbiAgICAgIGhvc3Q6IGhvc3RFbFBvc2l0aW9uLFxuICAgICAgYXJyb3c6IG51bGxcbiAgICB9LFxuICAgIHBvc2l0aW9uRml4ZWQ6IGZhbHNlLFxuICAgIHBsYWNlbWVudCxcbiAgICBwbGFjZW1lbnRBdXRvXG4gIH07XG59XG4iXX0=
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes} checked by tsc
4
+ */
5
+ import { getBoundaries } from '../utils';
6
+ /**
7
+ * @param {?} data
8
+ * @return {?}
9
+ */
10
+ export function preventOverflow(data) {
11
+ // NOTE: DOM access here
12
+ // resets the targetOffsets's position so that the document size can be calculated excluding
13
+ // the size of the targetOffsets element itself
14
+ const /** @type {?} */ transformProp = 'transform';
15
+ const /** @type {?} */ targetStyles = data.instance.target.style; // assignment to help minification
16
+ const { top, left, [transformProp]: transform } = targetStyles;
17
+ targetStyles.top = '';
18
+ targetStyles.left = '';
19
+ targetStyles[transformProp] = '';
20
+ const /** @type {?} */ boundaries = getBoundaries(data.instance.target, data.instance.host, 0, // padding
21
+ 'scrollParent', false // positionFixed
22
+ );
23
+ // NOTE: DOM access here
24
+ // restores the original style properties after the offsets have been computed
25
+ targetStyles.top = top;
26
+ targetStyles.left = left;
27
+ targetStyles[transformProp] = transform;
28
+ const /** @type {?} */ order = ['left', 'right', 'top', 'bottom'];
29
+ const /** @type {?} */ check = {
30
+ /**
31
+ * @param {?} placement
32
+ * @return {?}
33
+ */
34
+ primary(placement) {
35
+ let /** @type {?} */ value = data.offsets.target[placement];
36
+ if (data.offsets.target[placement] < boundaries[placement] &&
37
+ !false // options.escapeWithReference
38
+ ) {
39
+ value = Math.max(data.offsets.target[placement], boundaries[placement]);
40
+ }
41
+ return { [placement]: value };
42
+ },
43
+ /**
44
+ * @param {?} placement
45
+ * @return {?}
46
+ */
47
+ secondary(placement) {
48
+ const /** @type {?} */ mainSide = placement === 'right' ? 'left' : 'top';
49
+ let /** @type {?} */ value = data.offsets.target[mainSide];
50
+ if (data.offsets.target[placement] > boundaries[placement] &&
51
+ !false // escapeWithReference
52
+ ) {
53
+ value = Math.min(data.offsets.target[mainSide], boundaries[placement] -
54
+ (placement === 'right' ? data.offsets.target.width : data.offsets.target.height));
55
+ }
56
+ return { [mainSide]: value };
57
+ }
58
+ };
59
+ let /** @type {?} */ side;
60
+ order.forEach(placement => {
61
+ side = ['left', 'top']
62
+ .indexOf(placement) !== -1
63
+ ? 'primary'
64
+ : 'secondary';
65
+ data.offsets.target = Object.assign({}, data.offsets.target, check[side](placement));
66
+ });
67
+ return data;
68
+ }
69
+
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmVudE92ZXJmbG93LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWJvb3RzdHJhcC9wb3NpdGlvbmluZy8iLCJzb3VyY2VzIjpbIm1vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7O0FBR3pDLE1BQU0sMEJBQTBCLElBQVU7Ozs7SUFLeEMsdUJBQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQztJQUNsQyx1QkFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2hELE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsWUFBWSxDQUFDO0lBQy9ELFlBQVksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLFlBQVksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFakMsdUJBQU0sVUFBVSxHQUFHLGFBQWEsQ0FDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUNsQixDQUFDLEVBQUUsVUFBVTtJQUNiLGNBQWMsRUFDZCxLQUFLO0tBQ04sQ0FBQzs7O0lBSUYsWUFBWSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDdkIsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDekIsWUFBWSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUV4Qyx1QkFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUVqRCx1QkFBTSxLQUFLLEdBQUc7Ozs7O1FBQ1osT0FBTyxDQUFDLFNBQWlCO1lBQ3ZCLHFCQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzQyxFQUFFLENBQUMsQ0FDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUN0RCxDQUFDLEtBQUs7WUFDUixDQUFDLENBQUMsQ0FBQztnQkFDRCxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUN6RTtZQUVELE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDL0I7Ozs7O1FBQ0QsU0FBUyxDQUFDLFNBQWlCO1lBQ3pCLHVCQUFNLFFBQVEsR0FBRyxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUN4RCxxQkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUMsRUFBRSxDQUFDLENBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztnQkFDdEQsQ0FBQyxLQUFLO1lBQ1IsQ0FBQyxDQUFDLENBQUM7Z0JBQ0QsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQzdCLFVBQVUsQ0FBQyxTQUFTLENBQUM7b0JBQ3JCLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FDakYsQ0FBQzthQUNIO1lBRUQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUM5QjtLQUNGLENBQUM7SUFFRixxQkFBSSxJQUFZLENBQUM7SUFFakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN4QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO2FBQ25CLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsV0FBVyxDQUFDO1FBRWhCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxxQkFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBSyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUUsQ0FBQztLQUU3RSxDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDO0NBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRCb3VuZGFyaWVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgRGF0YSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coZGF0YTogRGF0YSkge1xuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXNldHMgdGhlIHRhcmdldE9mZnNldHMncyBwb3NpdGlvbiBzbyB0aGF0IHRoZSBkb2N1bWVudCBzaXplIGNhbiBiZSBjYWxjdWxhdGVkIGV4Y2x1ZGluZ1xuICAvLyB0aGUgc2l6ZSBvZiB0aGUgdGFyZ2V0T2Zmc2V0cyBlbGVtZW50IGl0c2VsZlxuICBjb25zdCB0cmFuc2Zvcm1Qcm9wID0gJ3RyYW5zZm9ybSc7XG4gIGNvbnN0IHRhcmdldFN0eWxlcyA9IGRhdGEuaW5zdGFuY2UudGFyZ2V0LnN0eWxlOyAvLyBhc3NpZ25tZW50IHRvIGhlbHAgbWluaWZpY2F0aW9uXG4gIGNvbnN0IHsgdG9wLCBsZWZ0LCBbdHJhbnNmb3JtUHJvcF06IHRyYW5zZm9ybSB9ID0gdGFyZ2V0U3R5bGVzO1xuICB0YXJnZXRTdHlsZXMudG9wID0gJyc7XG4gIHRhcmdldFN0eWxlcy5sZWZ0ID0gJyc7XG4gIHRhcmdldFN0eWxlc1t0cmFuc2Zvcm1Qcm9wXSA9ICcnO1xuXG4gIGNvbnN0IGJvdW5kYXJpZXMgPSBnZXRCb3VuZGFyaWVzKFxuICAgIGRhdGEuaW5zdGFuY2UudGFyZ2V0LFxuICAgIGRhdGEuaW5zdGFuY2UuaG9zdCxcbiAgICAwLCAvLyBwYWRkaW5nXG4gICAgJ3Njcm9sbFBhcmVudCcsXG4gICAgZmFsc2UgLy8gcG9zaXRpb25GaXhlZFxuICApO1xuXG4gIC8vIE5PVEU6IERPTSBhY2Nlc3MgaGVyZVxuICAvLyByZXN0b3JlcyB0aGUgb3JpZ2luYWwgc3R5bGUgcHJvcGVydGllcyBhZnRlciB0aGUgb2Zmc2V0cyBoYXZlIGJlZW4gY29tcHV0ZWRcbiAgdGFyZ2V0U3R5bGVzLnRvcCA9IHRvcDtcbiAgdGFyZ2V0U3R5bGVzLmxlZnQgPSBsZWZ0O1xuICB0YXJnZXRTdHlsZXNbdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm07XG5cbiAgY29uc3Qgb3JkZXIgPSBbJ2xlZnQnLCAncmlnaHQnLCAndG9wJywgJ2JvdHRvbSddO1xuXG4gIGNvbnN0IGNoZWNrID0ge1xuICAgIHByaW1hcnkocGxhY2VtZW50OiBzdHJpbmcpIHtcbiAgICAgIGxldCB2YWx1ZSA9IGRhdGEub2Zmc2V0cy50YXJnZXRbcGxhY2VtZW50XTtcbiAgICAgIGlmIChcbiAgICAgICAgZGF0YS5vZmZzZXRzLnRhcmdldFtwbGFjZW1lbnRdIDwgYm91bmRhcmllc1twbGFjZW1lbnRdICYmXG4gICAgICAgICFmYWxzZSAvLyBvcHRpb25zLmVzY2FwZVdpdGhSZWZlcmVuY2VcbiAgICAgICkge1xuICAgICAgICB2YWx1ZSA9IE1hdGgubWF4KGRhdGEub2Zmc2V0cy50YXJnZXRbcGxhY2VtZW50XSwgYm91bmRhcmllc1twbGFjZW1lbnRdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgW3BsYWNlbWVudF06IHZhbHVlIH07XG4gICAgfSxcbiAgICBzZWNvbmRhcnkocGxhY2VtZW50OiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IG1haW5TaWRlID0gcGxhY2VtZW50ID09PSAncmlnaHQnID8gJ2xlZnQnIDogJ3RvcCc7XG4gICAgICBsZXQgdmFsdWUgPSBkYXRhLm9mZnNldHMudGFyZ2V0W21haW5TaWRlXTtcbiAgICAgIGlmIChcbiAgICAgICAgZGF0YS5vZmZzZXRzLnRhcmdldFtwbGFjZW1lbnRdID4gYm91bmRhcmllc1twbGFjZW1lbnRdICYmXG4gICAgICAgICFmYWxzZSAvLyBlc2NhcGVXaXRoUmVmZXJlbmNlXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLm1pbihcbiAgICAgICAgICBkYXRhLm9mZnNldHMudGFyZ2V0W21haW5TaWRlXSxcbiAgICAgICAgICBib3VuZGFyaWVzW3BsYWNlbWVudF0gLVxuICAgICAgICAgIChwbGFjZW1lbnQgPT09ICdyaWdodCcgPyBkYXRhLm9mZnNldHMudGFyZ2V0LndpZHRoIDogZGF0YS5vZmZzZXRzLnRhcmdldC5oZWlnaHQpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IFttYWluU2lkZV06IHZhbHVlIH07XG4gICAgfVxuICB9O1xuXG4gIGxldCBzaWRlOiBzdHJpbmc7XG5cbiAgb3JkZXIuZm9yRWFjaChwbGFjZW1lbnQgPT4ge1xuICAgIHNpZGUgPSBbJ2xlZnQnLCAndG9wJ11cbiAgICAgIC5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xXG4gICAgICA/ICdwcmltYXJ5J1xuICAgICAgOiAnc2Vjb25kYXJ5JztcblxuICAgIGRhdGEub2Zmc2V0cy50YXJnZXQgPSB7IC4uLmRhdGEub2Zmc2V0cy50YXJnZXQsIC4uLmNoZWNrW3NpZGVdKHBsYWNlbWVudCkgfTtcblxuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn1cbiJdfQ==
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes} checked by tsc
4
+ */
5
+ /**
6
+ * @param {?} data
7
+ * @return {?}
8
+ */
9
+ export function shift(data) {
10
+ const /** @type {?} */ placement = data.placement;
11
+ const /** @type {?} */ basePlacement = placement.split(' ')[0];
12
+ const /** @type {?} */ shiftvariation = placement.split(' ')[1];
13
+ if (shiftvariation) {
14
+ const { host, target } = data.offsets;
15
+ const /** @type {?} */ isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;
16
+ const /** @type {?} */ side = isVertical ? 'left' : 'top';
17
+ const /** @type {?} */ measurement = isVertical ? 'width' : 'height';
18
+ const /** @type {?} */ shiftOffsets = {
19
+ left: { [side]: host[side] },
20
+ right: {
21
+ [side]: host[side] + host[measurement] - host[measurement]
22
+ }
23
+ };
24
+ data.offsets.target = Object.assign({}, target, shiftOffsets[shiftvariation]);
25
+ }
26
+ return data;
27
+ }
28
+
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpZnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYm9vdHN0cmFwL3Bvc2l0aW9uaW5nLyIsInNvdXJjZXMiOlsibW9kaWZpZXJzL3NoaWZ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUEsTUFBTSxnQkFBZ0IsSUFBVTtJQUM5Qix1QkFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNqQyx1QkFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5Qyx1QkFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUvQyxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN0Qyx1QkFBTSxVQUFVLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25FLHVCQUFNLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3pDLHVCQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBRXBELHVCQUFNLFlBQVksR0FBRztZQUNuQixJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM1QixLQUFLLEVBQUU7Z0JBQ0wsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDM0Q7U0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLHFCQUFRLE1BQU0sRUFBSyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUUsQ0FBQztLQUN0RTtJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUM7Q0FDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGEgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2hpZnQoZGF0YTogRGF0YSk6IERhdGEge1xuICBjb25zdCBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgY29uc3QgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnICcpWzBdO1xuICBjb25zdCBzaGlmdHZhcmlhdGlvbiA9IHBsYWNlbWVudC5zcGxpdCgnICcpWzFdO1xuXG4gIGlmIChzaGlmdHZhcmlhdGlvbikge1xuICAgIGNvbnN0IHsgaG9zdCwgdGFyZ2V0IH0gPSBkYXRhLm9mZnNldHM7XG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IFsnYm90dG9tJywgJ3RvcCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuICAgIGNvbnN0IHNpZGUgPSBpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCc7XG4gICAgY29uc3QgbWVhc3VyZW1lbnQgPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuXG4gICAgY29uc3Qgc2hpZnRPZmZzZXRzID0ge1xuICAgICAgbGVmdDogeyBbc2lkZV06IGhvc3Rbc2lkZV0gfSxcbiAgICAgIHJpZ2h0OiB7XG4gICAgICAgIFtzaWRlXTogaG9zdFtzaWRlXSArIGhvc3RbbWVhc3VyZW1lbnRdIC0gaG9zdFttZWFzdXJlbWVudF1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGF0YS5vZmZzZXRzLnRhcmdldCA9IHsgLi4udGFyZ2V0LCAuLi5zaGlmdE9mZnNldHNbc2hpZnR2YXJpYXRpb25dIH07XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cbiJdfQ==
@@ -2,238 +2,37 @@
2
2
  * @fileoverview added by tsickle
3
3
  * @suppress {checkTypes} checked by tsc
4
4
  */
5
- /**
6
- * @copyright Valor Software
7
- * @copyright Angular ng-bootstrap team
8
- */
5
+ import { getReferenceOffsets, setAllStyles } from './utils';
6
+ import { arrow, flip, preventOverflow, shift, initData } from './modifiers';
9
7
  export class Positioning {
10
8
  /**
11
- * @param {?} element
9
+ * @param {?} hostElement
10
+ * @param {?} targetElement
12
11
  * @param {?=} round
13
12
  * @return {?}
14
13
  */
15
- position(element, round = true) {
16
- let /** @type {?} */ elPosition;
17
- let /** @type {?} */ parentOffset = {
18
- width: 0,
19
- height: 0,
20
- top: 0,
21
- bottom: 0,
22
- left: 0,
23
- right: 0
24
- };
25
- if (this.getStyle(element, 'position') === 'fixed') {
26
- const /** @type {?} */ bcRect = element.getBoundingClientRect();
27
- elPosition = {
28
- width: bcRect.width,
29
- height: bcRect.height,
30
- top: bcRect.top,
31
- bottom: bcRect.bottom,
32
- left: bcRect.left,
33
- right: bcRect.right
34
- };
35
- }
36
- else {
37
- const /** @type {?} */ offsetParentEl = this.offsetParent(element);
38
- elPosition = this.offset(element, false);
39
- if (offsetParentEl !== document.documentElement) {
40
- parentOffset = this.offset(offsetParentEl, false);
41
- }
42
- parentOffset.top += offsetParentEl.clientTop;
43
- parentOffset.left += offsetParentEl.clientLeft;
44
- }
45
- elPosition.top -= parentOffset.top;
46
- elPosition.bottom -= parentOffset.top;
47
- elPosition.left -= parentOffset.left;
48
- elPosition.right -= parentOffset.left;
49
- if (round) {
50
- elPosition.top = Math.round(elPosition.top);
51
- elPosition.bottom = Math.round(elPosition.bottom);
52
- elPosition.left = Math.round(elPosition.left);
53
- elPosition.right = Math.round(elPosition.right);
54
- }
55
- return elPosition;
14
+ position(hostElement, targetElement, round = true) {
15
+ return this.offset(hostElement, targetElement, false);
56
16
  }
57
17
  /**
58
- * @param {?} element
18
+ * @param {?} hostElement
19
+ * @param {?} targetElement
59
20
  * @param {?=} round
60
21
  * @return {?}
61
22
  */
62
- offset(element, round = true) {
63
- const /** @type {?} */ elBcr = element.getBoundingClientRect();
64
- const /** @type {?} */ viewportOffset = {
65
- top: window.pageYOffset - document.documentElement.clientTop,
66
- left: window.pageXOffset - document.documentElement.clientLeft
67
- };
68
- let /** @type {?} */ elOffset = {
69
- height: elBcr.height || element.offsetHeight,
70
- width: elBcr.width || element.offsetWidth,
71
- top: elBcr.top + viewportOffset.top,
72
- bottom: elBcr.bottom + viewportOffset.top,
73
- left: elBcr.left + viewportOffset.left,
74
- right: elBcr.right + viewportOffset.left
75
- };
76
- if (round) {
77
- elOffset.height = Math.round(elOffset.height);
78
- elOffset.width = Math.round(elOffset.width);
79
- elOffset.top = Math.round(elOffset.top);
80
- elOffset.bottom = Math.round(elOffset.bottom);
81
- elOffset.left = Math.round(elOffset.left);
82
- elOffset.right = Math.round(elOffset.right);
83
- }
84
- return elOffset;
23
+ offset(hostElement, targetElement, round = true) {
24
+ return getReferenceOffsets(targetElement, hostElement);
85
25
  }
86
26
  /**
87
27
  * @param {?} hostElement
88
28
  * @param {?} targetElement
89
- * @param {?} placement
29
+ * @param {?} position
90
30
  * @param {?=} appendToBody
91
31
  * @return {?}
92
32
  */
93
- positionElements(hostElement, targetElement, placement, appendToBody) {
94
- const /** @type {?} */ hostElPosition = appendToBody
95
- ? this.offset(hostElement, false)
96
- : this.position(hostElement, false);
97
- const /** @type {?} */ targetElStyles = this.getAllStyles(targetElement);
98
- const /** @type {?} */ targetElBCR = targetElement.getBoundingClientRect();
99
- let /** @type {?} */ placementPrimary = placement.split(' ')[0] || 'top';
100
- const /** @type {?} */ placementSecondary = placement.split(' ')[1] || 'center';
101
- let /** @type {?} */ targetElPosition = {
102
- height: targetElBCR.height || targetElement.offsetHeight,
103
- width: targetElBCR.width || targetElement.offsetWidth,
104
- top: 0,
105
- bottom: targetElBCR.height || targetElement.offsetHeight,
106
- left: 0,
107
- right: targetElBCR.width || targetElement.offsetWidth
108
- };
109
- const /** @type {?} */ shiftHeight = {
110
- top: hostElPosition.top,
111
- center: hostElPosition.top +
112
- hostElPosition.height / 2 -
113
- targetElPosition.height / 2,
114
- bottom: hostElPosition.top + hostElPosition.height
115
- };
116
- const /** @type {?} */ shiftWidth = {
117
- left: hostElPosition.left,
118
- center: hostElPosition.left +
119
- hostElPosition.width / 2 -
120
- targetElPosition.width / 2,
121
- right: hostElPosition.left + hostElPosition.width
122
- };
123
- if (placementPrimary === 'auto') {
124
- let /** @type {?} */ newPlacementPrimary = this.autoPosition(targetElPosition, hostElPosition, targetElement, placementSecondary);
125
- if (!newPlacementPrimary)
126
- newPlacementPrimary = this.autoPosition(targetElPosition, hostElPosition, targetElement);
127
- if (newPlacementPrimary)
128
- placementPrimary = newPlacementPrimary;
129
- targetElement.classList.add(placementPrimary);
130
- }
131
- switch (placementPrimary) {
132
- case 'top':
133
- targetElPosition.top =
134
- hostElPosition.top -
135
- (targetElPosition.height +
136
- parseFloat(targetElStyles.marginBottom));
137
- targetElPosition.bottom +=
138
- hostElPosition.top - targetElPosition.height;
139
- targetElPosition.left = shiftWidth[placementSecondary];
140
- targetElPosition.right += shiftWidth[placementSecondary];
141
- break;
142
- case 'bottom':
143
- targetElPosition.top = shiftHeight[placementPrimary];
144
- targetElPosition.bottom += shiftHeight[placementPrimary];
145
- targetElPosition.left = shiftWidth[placementSecondary];
146
- targetElPosition.right += shiftWidth[placementSecondary];
147
- break;
148
- case 'left':
149
- targetElPosition.top = shiftHeight[placementSecondary];
150
- targetElPosition.bottom += shiftHeight[placementSecondary];
151
- targetElPosition.left =
152
- hostElPosition.left -
153
- (targetElPosition.width + parseFloat(targetElStyles.marginRight));
154
- targetElPosition.right +=
155
- hostElPosition.left - targetElPosition.width;
156
- break;
157
- case 'right':
158
- targetElPosition.top = shiftHeight[placementSecondary];
159
- targetElPosition.bottom += shiftHeight[placementSecondary];
160
- targetElPosition.left = shiftWidth[placementPrimary];
161
- targetElPosition.right += shiftWidth[placementPrimary];
162
- break;
163
- }
164
- targetElPosition.top = Math.round(targetElPosition.top);
165
- targetElPosition.bottom = Math.round(targetElPosition.bottom);
166
- targetElPosition.left = Math.round(targetElPosition.left);
167
- targetElPosition.right = Math.round(targetElPosition.right);
168
- return targetElPosition;
169
- }
170
- /**
171
- * @param {?} targetElPosition
172
- * @param {?} hostElPosition
173
- * @param {?} targetElement
174
- * @param {?=} preferredPosition
175
- * @return {?}
176
- */
177
- autoPosition(targetElPosition, hostElPosition, targetElement, preferredPosition) {
178
- if ((!preferredPosition || preferredPosition === 'right') &&
179
- targetElPosition.left + hostElPosition.left - targetElPosition.width <
180
- 0) {
181
- return 'right';
182
- }
183
- else if ((!preferredPosition || preferredPosition === 'top') &&
184
- targetElPosition.bottom +
185
- hostElPosition.bottom +
186
- targetElPosition.height >
187
- window.innerHeight) {
188
- return 'top';
189
- }
190
- else if ((!preferredPosition || preferredPosition === 'bottom') &&
191
- targetElPosition.top + hostElPosition.top - targetElPosition.height < 0) {
192
- return 'bottom';
193
- }
194
- else if ((!preferredPosition || preferredPosition === 'left') &&
195
- targetElPosition.right +
196
- hostElPosition.right +
197
- targetElPosition.width >
198
- window.innerWidth) {
199
- return 'left';
200
- }
201
- return null;
202
- }
203
- /**
204
- * @param {?} element
205
- * @return {?}
206
- */
207
- getAllStyles(element) {
208
- return window.getComputedStyle(element);
209
- }
210
- /**
211
- * @param {?} element
212
- * @param {?} prop
213
- * @return {?}
214
- */
215
- getStyle(element, prop) {
216
- return (/** @type {?} */ (this.getAllStyles(element)))[prop];
217
- }
218
- /**
219
- * @param {?} element
220
- * @return {?}
221
- */
222
- isStaticPositioned(element) {
223
- return (this.getStyle(element, 'position') || 'static') === 'static';
224
- }
225
- /**
226
- * @param {?} element
227
- * @return {?}
228
- */
229
- offsetParent(element) {
230
- let /** @type {?} */ offsetParentEl = /** @type {?} */ (element.offsetParent) || document.documentElement;
231
- while (offsetParentEl &&
232
- offsetParentEl !== document.documentElement &&
233
- this.isStaticPositioned(offsetParentEl)) {
234
- offsetParentEl = /** @type {?} */ (offsetParentEl.offsetParent);
235
- }
236
- return offsetParentEl || document.documentElement;
33
+ positionElements(hostElement, targetElement, position, appendToBody) {
34
+ const /** @type {?} */ chainOfModifiers = [flip, shift, preventOverflow, arrow];
35
+ return chainOfModifiers.reduce((modifiedData, modifier) => modifier(modifiedData), initData(targetElement, hostElement, position));
237
36
  }
238
37
  }
239
38
  const /** @type {?} */ positionService = new Positioning();
@@ -242,12 +41,12 @@ const /** @type {?} */ positionService = new Positioning();
242
41
  * @param {?} targetElement
243
42
  * @param {?} placement
244
43
  * @param {?=} appendToBody
44
+ * @param {?=} renderer
245
45
  * @return {?}
246
46
  */
247
- export function positionElements(hostElement, targetElement, placement, appendToBody) {
248
- const /** @type {?} */ pos = positionService.positionElements(hostElement, targetElement, placement, appendToBody);
249
- targetElement.style.top = `${pos.top}px`;
250
- targetElement.style.left = `${pos.left}px`;
47
+ export function positionElements(hostElement, targetElement, placement, appendToBody, renderer) {
48
+ const /** @type {?} */ data = positionService.positionElements(hostElement, targetElement, placement, appendToBody);
49
+ setAllStyles(data, renderer);
251
50
  }
252
51
 
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcG9zaXRpb25pbmcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYm9vdHN0cmFwL3Bvc2l0aW9uaW5nLyIsInNvdXJjZXMiOlsibmctcG9zaXRpb25pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFRQSxNQUFNOzs7Ozs7SUFDRyxRQUFRLENBQUMsT0FBb0IsRUFBRSxLQUFLLEdBQUcsSUFBSTtRQUNoRCxxQkFBSSxVQUFzQixDQUFDO1FBQzNCLHFCQUFJLFlBQVksR0FBZTtZQUM3QixLQUFLLEVBQUUsQ0FBQztZQUNSLE1BQU0sRUFBRSxDQUFDO1lBQ1QsR0FBRyxFQUFFLENBQUM7WUFDTixNQUFNLEVBQUUsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDO1lBQ1AsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDO1FBRUYsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNuRCx1QkFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0MsVUFBVSxHQUFHO2dCQUNYLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2dCQUNyQixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7Z0JBQ2YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2dCQUNyQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSzthQUNwQixDQUFDO1NBQ0g7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLHVCQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWxELFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV6QyxFQUFFLENBQUMsQ0FBQyxjQUFj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O1lBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsRUFDdkMsQ0FBQztZQUNELGNBQWMscUJBQWdCLGNBQWMsQ0FBQyxZQUFZLENBQUEsQ0FBQztTQUMzRDtRQUVELE1BQU0sQ0FBQyxjQUFjLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQzs7Q0FFckQ7QUFFRCx1QkFBTSxlQUFlLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQzs7Ozs7Ozs7QUFFMUMsTUFBTSwyQkFDSixXQUF3QixFQUN4QixhQUEwQixFQUMxQixTQUFpQixFQUNqQixZQUFzQjtJQUV0Qix1QkFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixDQUMxQyxXQUFXLEVBQ1gsYUFBYSxFQUNiLFNBQVMsRUFDVCxZQUFZLENBQ2IsQ0FBQztJQUVGLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3pDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO0NBQzVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAY29weXJpZ2h0IFZhbG9yIFNvZnR3YXJlXG4gKiBAY29weXJpZ2h0IEFuZ3VsYXIgbmctYm9vdHN0cmFwIHRlYW1cbiAqL1xuXG4vLyBwcmV2aW91cyB2ZXJzaW9uOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXItdWkvYm9vdHN0cmFwL2Jsb2IvMDdjMzFkMDczMWY3Y2IwNjhhMTkzMmI4ZTAxZDIzMTJiNzk2YjRlYy9zcmMvcG9zaXRpb24vcG9zaXRpb24uanNcbi8vIHRzbGludDpkaXNhYmxlXG5leHBvcnQgY2xhc3MgUG9zaXRpb25pbmcge1xuICBwdWJsaWMgcG9zaXRpb24oZWxlbWVudDogSFRNTEVsZW1lbnQsIHJvdW5kID0gdHJ1ZSk6IENsaWVudFJlY3Qge1xuICAgIGxldCBlbFBvc2l0aW9uOiBDbGllbnRSZWN0O1xuICAgIGxldCBwYXJlbnRPZmZzZXQ6IENsaWVudFJlY3QgPSB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIHRvcDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICByaWdodDogMFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJykge1xuICAgICAgY29uc3QgYmNSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGVsUG9zaXRpb24gPSB7XG4gICAgICAgIHdpZHRoOiBiY1JlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogYmNSZWN0LmhlaWdodCxcbiAgICAgICAgdG9wOiBiY1JlY3QudG9wLFxuICAgICAgICBib3R0b206IGJjUmVjdC5ib3R0b20sXG4gICAgICAgIGxlZnQ6IGJjUmVjdC5sZWZ0LFxuICAgICAgICByaWdodDogYmNSZWN0LnJpZ2h0XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvZmZzZXRQYXJlbnRFbCA9IHRoaXMub2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gICAgICBlbFBvc2l0aW9uID0gdGhpcy5vZmZzZXQoZWxlbWVudCwgZmFsc2UpO1xuXG4gICAgICBpZiAob2Zmc2V0UGFyZW50RWwgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICBwYXJlbnRPZmZzZXQgPSB0aGlzLm9mZnNldChvZmZzZXRQYXJlbnRFbCwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBwYXJlbnRPZmZzZXQudG9wICs9IG9mZnNldFBhcmVudEVsLmNsaWVudFRvcDtcbiAgICAgIHBhcmVudE9mZnNldC5sZWZ0ICs9IG9mZnNldFBhcmVudEVsLmNsaWVudExlZnQ7XG4gICAgfVxuXG4gICAgZWxQb3NpdGlvbi50b3AgLT0gcGFyZW50T2Zmc2V0LnRvcDtcbiAgICBlbFBvc2l0aW9uLmJvdHRvbSAtPSBwYXJlbnRPZmZzZXQudG9wO1xuICAgIGVsUG9zaXRpb24ubGVmdCAtPSBwYXJlbnRPZmZzZXQubGVmdDtcbiAgICBlbFBvc2l0aW9uLnJpZ2h0IC09IHBhcmVudE9mZnNldC5sZWZ0O1xuXG4gICAgaWYgKHJvdW5kKSB7XG4gICAgICBlbFBvc2l0aW9uLnRvcCA9IE1hdGgucm91bmQoZWxQb3NpdGlvbi50b3ApO1xuICAgICAgZWxQb3NpdGlvbi5ib3R0b20gPSBNYXRoLnJvdW5kKGVsUG9zaXRpb24uYm90dG9tKTtcbiAgICAgIGVsUG9zaXRpb24ubGVmdCA9IE1hdGgucm91bmQoZWxQb3NpdGlvbi5sZWZ0KTtcbiAgICAgIGVsUG9zaXRpb24ucmlnaHQgPSBNYXRoLnJvdW5kKGVsUG9zaXRpb24ucmlnaHQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbFBvc2l0aW9uO1xuICB9XG5cbiAgcHVibGljIG9mZnNldChlbGVtZW50OiBIVE1MRWxlbWVudCwgcm91bmQgPSB0cnVlKTogQ2xpZW50UmVjdCB7XG4gICAgY29uc3QgZWxCY3IgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHZpZXdwb3J0T2Zmc2V0ID0ge1xuICAgICAgdG9wOiB3aW5kb3cucGFnZVlPZmZzZXQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50VG9wLFxuICAgICAgbGVmdDogd2luZG93LnBhZ2VYT2Zmc2V0IC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudExlZnRcbiAgICB9O1xuXG4gICAgbGV0IGVsT2Zmc2V0ID0ge1xuICAgICAgaGVpZ2h0OiBlbEJjci5oZWlnaHQgfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQsXG4gICAgICB3aWR0aDogZWxCY3Iud2lkdGggfHwgZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgIHRvcDogZWxCY3IudG9wICsgdmlld3BvcnRPZmZzZXQudG9wLFxuICAgICAgYm90dG9tOiBlbEJjci5ib3R0b20gKyB2aWV3cG9ydE9mZnNldC50b3AsXG4gICAgICBsZWZ0OiBlbEJjci5sZWZ0ICsgdmlld3BvcnRPZmZzZXQubGVmdCxcbiAgICAgIHJpZ2h0OiBlbEJjci5yaWdodCArIHZpZXdwb3J0T2Zmc2V0LmxlZnRcbiAgICB9O1xuXG4gICAgaWYgKHJvdW5kKSB7XG4gICAgICBlbE9mZnNldC5oZWlnaHQgPSBNYXRoLnJvdW5kKGVsT2Zmc2V0LmhlaWdodCk7XG4gICAgICBlbE9mZnNldC53aWR0aCA9IE1hdGgucm91bmQoZWxPZmZzZXQud2lkdGgpO1xuICAgICAgZWxPZmZzZXQudG9wID0gTWF0aC5yb3VuZChlbE9mZnNldC50b3ApO1xuICAgICAgZWxPZmZzZXQuYm90dG9tID0gTWF0aC5yb3VuZChlbE9mZnNldC5ib3R0b20pO1xuICAgICAgZWxPZmZzZXQubGVmdCA9IE1hdGgucm91bmQoZWxPZmZzZXQubGVmdCk7XG4gICAgICBlbE9mZnNldC5yaWdodCA9IE1hdGgucm91bmQoZWxPZmZzZXQucmlnaHQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbE9mZnNldDtcbiAgfVxuXG4gIHB1YmxpYyBwb3NpdGlvbkVsZW1lbnRzKFxuICAgIGhvc3RFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICB0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBwbGFjZW1lbnQ6IHN0cmluZyxcbiAgICBhcHBlbmRUb0JvZHk/OiBib29sZWFuXG4gICk6IENsaWVudFJlY3Qge1xuICAgIGNvbnN0IGhvc3RFbFBvc2l0aW9uID0gYXBwZW5kVG9Cb2R5XG4gICAgICA/IHRoaXMub2Zmc2V0KGhvc3RFbGVtZW50LCBmYWxzZSlcbiAgICAgIDogdGhpcy5wb3NpdGlvbihob3N0RWxlbWVudCwgZmFsc2UpO1xuICAgIGNvbnN0IHRhcmdldEVsU3R5bGVzID0gdGhpcy5nZXRBbGxTdHlsZXModGFyZ2V0RWxlbWVudCk7XG4gICAgY29uc3QgdGFyZ2V0RWxCQ1IgPSB0YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCBwbGFjZW1lbnRQcmltYXJ5ID0gcGxhY2VtZW50LnNwbGl0KCcgJylbMF0gfHwgJ3RvcCc7XG4gICAgY29uc3QgcGxhY2VtZW50U2Vjb25kYXJ5ID0gcGxhY2VtZW50LnNwbGl0KCcgJylbMV0gfHwgJ2NlbnRlcic7XG5cbiAgICBsZXQgdGFyZ2V0RWxQb3NpdGlvbjogQ2xpZW50UmVjdCA9IHtcbiAgICAgIGhlaWdodDogdGFyZ2V0RWxCQ1IuaGVpZ2h0IHx8IHRhcmdldEVsZW1lbnQub2Zmc2V0SGVpZ2h0LFxuICAgICAgd2lkdGg6IHRhcmdldEVsQkNSLndpZHRoIHx8IHRhcmdldEVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICB0b3A6IDAsXG4gICAgICBib3R0b206IHRhcmdldEVsQkNSLmhlaWdodCB8fCB0YXJnZXRFbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICByaWdodDogdGFyZ2V0RWxCQ1Iud2lkdGggfHwgdGFyZ2V0RWxlbWVudC5vZmZzZXRXaWR0aFxuICAgIH07XG5cbiAgICBjb25zdCBzaGlmdEhlaWdodDogYW55ID0ge1xuICAgICAgdG9wOiBob3N0RWxQb3NpdGlvbi50b3AsXG4gICAgICBjZW50ZXI6XG4gICAgICAgIGhvc3RFbFBvc2l0aW9uLnRvcCArXG4gICAgICAgIGhvc3RFbFBvc2l0aW9uLmhlaWdodCAvIDIgLVxuICAgICAgICB0YXJnZXRFbFBvc2l0aW9uLmhlaWdodCAvIDIsXG4gICAgICBib3R0b206IGhvc3RFbFBvc2l0aW9uLnRvcCArIGhvc3RFbFBvc2l0aW9uLmhlaWdodFxuICAgIH07XG4gICAgY29uc3Qgc2hpZnRXaWR0aDogYW55ID0ge1xuICAgICAgbGVmdDogaG9zdEVsUG9zaXRpb24ubGVmdCxcbiAgICAgIGNlbnRlcjpcbiAgICAgICAgaG9zdEVsUG9zaXRpb24ubGVmdCArXG4gICAgICAgIGhvc3RFbFBvc2l0aW9uLndpZHRoIC8gMiAtXG4gICAgICAgIHRhcmdldEVsUG9zaXRpb24ud2lkdGggLyAyLFxuICAgICAgcmlnaHQ6IGhvc3RFbFBvc2l0aW9uLmxlZnQgKyBob3N0RWxQb3NpdGlvbi53aWR0aFxuICAgIH07ICAgIFxuXG4gICAgaWYgKHBsYWNlbWVudFByaW1hcnkgPT09ICdhdXRvJykge1xuICAgICAgbGV0IG5ld1BsYWNlbWVudFByaW1hcnkgPSB0aGlzLmF1dG9Qb3NpdGlvbihcbiAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbixcbiAgICAgICAgaG9zdEVsUG9zaXRpb24sXG4gICAgICAgIHRhcmdldEVsZW1lbnQsXG4gICAgICAgIHBsYWNlbWVudFNlY29uZGFyeVxuICAgICAgKTtcbiAgICAgIGlmICghbmV3UGxhY2VtZW50UHJpbWFyeSlcbiAgICAgICAgbmV3UGxhY2VtZW50UHJpbWFyeSA9IHRoaXMuYXV0b1Bvc2l0aW9uKFxuICAgICAgICAgIHRhcmdldEVsUG9zaXRpb24sXG4gICAgICAgICAgaG9zdEVsUG9zaXRpb24sXG4gICAgICAgICAgdGFyZ2V0RWxlbWVudFxuICAgICAgICApO1xuICAgICAgaWYgKG5ld1BsYWNlbWVudFByaW1hcnkpIHBsYWNlbWVudFByaW1hcnkgPSBuZXdQbGFjZW1lbnRQcmltYXJ5O1xuICAgICAgdGFyZ2V0RWxlbWVudC5jbGFzc0xpc3QuYWRkKHBsYWNlbWVudFByaW1hcnkpO1xuICAgIH1cblxuICAgIHN3aXRjaCAocGxhY2VtZW50UHJpbWFyeSkge1xuICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi50b3AgPVxuICAgICAgICAgIGhvc3RFbFBvc2l0aW9uLnRvcCAtXG4gICAgICAgICAgKHRhcmdldEVsUG9zaXRpb24uaGVpZ2h0ICtcbiAgICAgICAgICAgIHBhcnNlRmxvYXQodGFyZ2V0RWxTdHlsZXMubWFyZ2luQm90dG9tKSk7XG4gICAgICAgIHRhcmdldEVsUG9zaXRpb24uYm90dG9tICs9XG4gICAgICAgICAgaG9zdEVsUG9zaXRpb24udG9wIC0gdGFyZ2V0RWxQb3NpdGlvbi5oZWlnaHQ7XG4gICAgICAgIHRhcmdldEVsUG9zaXRpb24ubGVmdCA9IHNoaWZ0V2lkdGhbcGxhY2VtZW50U2Vjb25kYXJ5XTtcbiAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi5yaWdodCArPSBzaGlmdFdpZHRoW3BsYWNlbWVudFNlY29uZGFyeV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi50b3AgPSBzaGlmdEhlaWdodFtwbGFjZW1lbnRQcmltYXJ5XTtcbiAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi5ib3R0b20gKz0gc2hpZnRIZWlnaHRbcGxhY2VtZW50UHJpbWFyeV07XG4gICAgICAgIHRhcmdldEVsUG9zaXRpb24ubGVmdCA9IHNoaWZ0V2lkdGhbcGxhY2VtZW50U2Vjb25kYXJ5XTtcbiAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi5yaWdodCArPSBzaGlmdFdpZHRoW3BsYWNlbWVudFNlY29uZGFyeV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIHRhcmdldEVsUG9zaXRpb24udG9wID0gc2hpZnRIZWlnaHRbcGxhY2VtZW50U2Vjb25kYXJ5XTtcbiAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi5ib3R0b20gKz0gc2hpZnRIZWlnaHRbcGxhY2VtZW50U2Vjb25kYXJ5XTtcbiAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi5sZWZ0ID1cbiAgICAgICAgICBob3N0RWxQb3NpdGlvbi5sZWZ0IC1cbiAgICAgICAgICAodGFyZ2V0RWxQb3NpdGlvbi53aWR0aCArIHBhcnNlRmxvYXQodGFyZ2V0RWxTdHlsZXMubWFyZ2luUmlnaHQpKTtcbiAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi5yaWdodCArPVxuICAgICAgICAgIGhvc3RFbFBvc2l0aW9uLmxlZnQgLSB0YXJnZXRFbFBvc2l0aW9uLndpZHRoO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi50b3AgPSBzaGlmdEhlaWdodFtwbGFjZW1lbnRTZWNvbmRhcnldO1xuICAgICAgICB0YXJnZXRFbFBvc2l0aW9uLmJvdHRvbSArPSBzaGlmdEhlaWdodFtwbGFjZW1lbnRTZWNvbmRhcnldO1xuICAgICAgICB0YXJnZXRFbFBvc2l0aW9uLmxlZnQgPSBzaGlmdFdpZHRoW3BsYWNlbWVudFByaW1hcnldO1xuICAgICAgICB0YXJnZXRFbFBvc2l0aW9uLnJpZ2h0ICs9IHNoaWZ0V2lkdGhbcGxhY2VtZW50UHJpbWFyeV07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRhcmdldEVsUG9zaXRpb24udG9wID0gTWF0aC5yb3VuZCh0YXJnZXRFbFBvc2l0aW9uLnRvcCk7XG4gICAgdGFyZ2V0RWxQb3NpdGlvbi5ib3R0b20gPSBNYXRoLnJvdW5kKHRhcmdldEVsUG9zaXRpb24uYm90dG9tKTtcbiAgICB0YXJnZXRFbFBvc2l0aW9uLmxlZnQgPSBNYXRoLnJvdW5kKHRhcmdldEVsUG9zaXRpb24ubGVmdCk7XG4gICAgdGFyZ2V0RWxQb3NpdGlvbi5yaWdodCA9IE1hdGgucm91bmQodGFyZ2V0RWxQb3NpdGlvbi5yaWdodCk7XG5cbiAgICByZXR1cm4gdGFyZ2V0RWxQb3NpdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXV0b1Bvc2l0aW9uKFxuICAgIHRhcmdldEVsUG9zaXRpb246IENsaWVudFJlY3QsXG4gICAgaG9zdEVsUG9zaXRpb246IENsaWVudFJlY3QsXG4gICAgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgcHJlZmVycmVkUG9zaXRpb24/OiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgKCFwcmVmZXJyZWRQb3NpdGlvbiB8fCBwcmVmZXJyZWRQb3NpdGlvbiA9PT0gJ3JpZ2h0JykgJiZcbiAgICAgIHRhcmdldEVsUG9zaXRpb24ubGVmdCArIGhvc3RFbFBvc2l0aW9uLmxlZnQgLSB0YXJnZXRFbFBvc2l0aW9uLndpZHRoIDxcbiAgICAgICAgMFxuICAgICkge1xuICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICghcHJlZmVycmVkUG9zaXRpb24gfHwgcHJlZmVycmVkUG9zaXRpb24gPT09ICd0b3AnKSAmJlxuICAgICAgdGFyZ2V0RWxQb3NpdGlvbi5ib3R0b20gK1xuICAgICAgICBob3N0RWxQb3NpdGlvbi5ib3R0b20gK1xuICAgICAgICB0YXJnZXRFbFBvc2l0aW9uLmhlaWdodCA+XG4gICAgICAgIHdpbmRvdy5pbm5lckhlaWdodFxuICAgICkge1xuICAgICAgcmV0dXJuICd0b3AnO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAoIXByZWZlcnJlZFBvc2l0aW9uIHx8IHByZWZlcnJlZFBvc2l0aW9uID09PSAnYm90dG9tJykgJiZcbiAgICAgIHRhcmdldEVsUG9zaXRpb24udG9wICsgaG9zdEVsUG9zaXRpb24udG9wIC0gdGFyZ2V0RWxQb3NpdGlvbi5oZWlnaHQgPCAwXG4gICAgKSB7XG4gICAgICByZXR1cm4gJ2JvdHRvbSc7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICghcHJlZmVycmVkUG9zaXRpb24gfHwgcHJlZmVycmVkUG9zaXRpb24gPT09ICdsZWZ0JykgJiZcbiAgICAgIHRhcmdldEVsUG9zaXRpb24ucmlnaHQgK1xuICAgICAgICBob3N0RWxQb3NpdGlvbi5yaWdodCArXG4gICAgICAgIHRhcmdldEVsUG9zaXRpb24ud2lkdGggPlxuICAgICAgICB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICkge1xuICAgICAgcmV0dXJuICdsZWZ0JztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldEFsbFN0eWxlcyhlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3R5bGUoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3A6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmdldEFsbFN0eWxlcyhlbGVtZW50KSBhcyBhbnkpW3Byb3BdO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1N0YXRpY1Bvc2l0aW9uZWQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykgfHwgJ3N0YXRpYycpID09PSAnc3RhdGljJztcbiAgfVxuXG4gIHByaXZhdGUgb2Zmc2V0UGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgIGxldCBvZmZzZXRQYXJlbnRFbCA9XG4gICAgICA8SFRNTEVsZW1lbnQ+ZWxlbWVudC5vZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gICAgd2hpbGUgKFxuICAgICAgb2Zmc2V0UGFyZW50RWwgJiZcbiAgICAgIG9mZnNldFBhcmVudEVsICE9PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcbiAgICAgIHRoaXMuaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudEVsKVxuICAgICkge1xuICAgICAgb2Zmc2V0UGFyZW50RWwgPSA8SFRNTEVsZW1lbnQ+b2Zmc2V0UGFyZW50RWwub2Zmc2V0UGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiBvZmZzZXRQYXJlbnRFbCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cbn1cblxuY29uc3QgcG9zaXRpb25TZXJ2aWNlID0gbmV3IFBvc2l0aW9uaW5nKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvbkVsZW1lbnRzKFxuICBob3N0RWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICBwbGFjZW1lbnQ6IHN0cmluZyxcbiAgYXBwZW5kVG9Cb2R5PzogYm9vbGVhblxuKTogdm9pZCB7XG4gIGNvbnN0IHBvcyA9IHBvc2l0aW9uU2VydmljZS5wb3NpdGlvbkVsZW1lbnRzKFxuICAgIGhvc3RFbGVtZW50LFxuICAgIHRhcmdldEVsZW1lbnQsXG4gICAgcGxhY2VtZW50LFxuICAgIGFwcGVuZFRvQm9keVxuICApO1xuXG4gIHRhcmdldEVsZW1lbnQuc3R5bGUudG9wID0gYCR7cG9zLnRvcH1weGA7XG4gIHRhcmdldEVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3Bvcy5sZWZ0fXB4YDtcbn1cbiJdfQ==
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcG9zaXRpb25pbmcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYm9vdHN0cmFwL3Bvc2l0aW9uaW5nLyIsInNvdXJjZXMiOlsibmctcG9zaXRpb25pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQU1BLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJNUUsTUFBTTs7Ozs7OztJQUNKLFFBQVEsQ0FBQyxXQUF3QixFQUFFLGFBQTBCLEVBQUUsS0FBSyxHQUFHLElBQUk7UUFDekUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN2RDs7Ozs7OztJQUVELE1BQU0sQ0FBQyxXQUF3QixFQUFFLGFBQTBCLEVBQUUsS0FBSyxHQUFHLElBQUk7UUFDdkUsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztLQUN4RDs7Ozs7Ozs7SUFFRCxnQkFBZ0IsQ0FDZCxXQUF3QixFQUN4QixhQUEwQixFQUMxQixRQUFnQixFQUNoQixZQUFzQjtRQUV0Qix1QkFBTSxnQkFBZ0IsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRS9ELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQzVCLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUNsRCxRQUFRLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FDL0MsQ0FBQztLQUNIO0NBQ0Y7QUFFRCx1QkFBTSxlQUFlLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQzs7Ozs7Ozs7O0FBRTFDLE1BQU0sMkJBQ0osV0FBd0IsRUFDeEIsYUFBMEIsRUFDMUIsU0FBaUIsRUFDakIsWUFBc0IsRUFDdEIsUUFBb0I7SUFHcEIsdUJBQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FDM0MsV0FBVyxFQUNYLGFBQWEsRUFDYixTQUFTLEVBQ1QsWUFBWSxDQUNiLENBQUM7SUFFRixZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0NBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAY29weXJpZ2h0IFZhbG9yIFNvZnR3YXJlXG4gKiBAY29weXJpZ2h0IEZlZGVyaWNvIFppdm9sbyBhbmQgY29udHJpYnV0b3JzXG4gKi9cbmltcG9ydCB7IFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBnZXRSZWZlcmVuY2VPZmZzZXRzLCBzZXRBbGxTdHlsZXMgfSBmcm9tICcuL3V0aWxzJztcblxuaW1wb3J0IHsgYXJyb3csIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgc2hpZnQsIGluaXREYXRhIH0gZnJvbSAnLi9tb2RpZmllcnMnO1xuaW1wb3J0IHsgRGF0YSwgT2Zmc2V0cyB9IGZyb20gJy4vbW9kZWxzJztcblxuXG5leHBvcnQgY2xhc3MgUG9zaXRpb25pbmcge1xuICBwb3NpdGlvbihob3N0RWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50LCByb3VuZCA9IHRydWUpOiBPZmZzZXRzIHtcbiAgICByZXR1cm4gdGhpcy5vZmZzZXQoaG9zdEVsZW1lbnQsIHRhcmdldEVsZW1lbnQsIGZhbHNlKTtcbiAgfVxuXG4gIG9mZnNldChob3N0RWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50LCByb3VuZCA9IHRydWUpOiBPZmZzZXRzIHtcbiAgICByZXR1cm4gZ2V0UmVmZXJlbmNlT2Zmc2V0cyh0YXJnZXRFbGVtZW50LCBob3N0RWxlbWVudCk7XG4gIH1cblxuICBwb3NpdGlvbkVsZW1lbnRzKFxuICAgIGhvc3RFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICB0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBwb3NpdGlvbjogc3RyaW5nLFxuICAgIGFwcGVuZFRvQm9keT86IGJvb2xlYW5cbiAgKTogRGF0YSB7XG4gICAgY29uc3QgY2hhaW5PZk1vZGlmaWVycyA9IFtmbGlwLCBzaGlmdCwgcHJldmVudE92ZXJmbG93LCBhcnJvd107XG5cbiAgICByZXR1cm4gY2hhaW5PZk1vZGlmaWVycy5yZWR1Y2UoXG4gICAgICAobW9kaWZpZWREYXRhLCBtb2RpZmllcikgPT4gbW9kaWZpZXIobW9kaWZpZWREYXRhKSxcbiAgICAgIGluaXREYXRhKHRhcmdldEVsZW1lbnQsIGhvc3RFbGVtZW50LCBwb3NpdGlvbilcbiAgICApO1xuICB9XG59XG5cbmNvbnN0IHBvc2l0aW9uU2VydmljZSA9IG5ldyBQb3NpdGlvbmluZygpO1xuXG5leHBvcnQgZnVuY3Rpb24gcG9zaXRpb25FbGVtZW50cyhcbiAgaG9zdEVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICB0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgcGxhY2VtZW50OiBzdHJpbmcsXG4gIGFwcGVuZFRvQm9keT86IGJvb2xlYW4sXG4gIHJlbmRlcmVyPzogUmVuZGVyZXIyXG4pOiB2b2lkIHtcblxuICBjb25zdCBkYXRhID0gcG9zaXRpb25TZXJ2aWNlLnBvc2l0aW9uRWxlbWVudHMoXG4gICAgaG9zdEVsZW1lbnQsXG4gICAgdGFyZ2V0RWxlbWVudCxcbiAgICBwbGFjZW1lbnQsXG4gICAgYXBwZW5kVG9Cb2R5XG4gICk7XG5cbiAgc2V0QWxsU3R5bGVzKGRhdGEsIHJlbmRlcmVyKTtcbn1cbiJdfQ==