@skyux/core 5.7.2 → 6.0.0-beta.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 (249) hide show
  1. package/documentation.json +4 -4
  2. package/esm2020/index.mjs +60 -0
  3. package/esm2020/lib/modules/adapter-service/adapter.module.mjs +16 -0
  4. package/esm2020/lib/modules/adapter-service/adapter.service.mjs +218 -0
  5. package/esm2020/lib/modules/adapter-service/focusable-children-options.mjs +2 -0
  6. package/esm2020/lib/modules/affix/affix-auto-fit-context.mjs +12 -0
  7. package/esm2020/lib/modules/affix/affix-config.mjs +2 -0
  8. package/esm2020/lib/modules/affix/affix-horizontal-alignment.mjs +2 -0
  9. package/esm2020/lib/modules/affix/affix-offset-change.mjs +2 -0
  10. package/esm2020/lib/modules/affix/affix-offset.mjs +2 -0
  11. package/esm2020/lib/modules/affix/affix-placement-change.mjs +2 -0
  12. package/esm2020/lib/modules/affix/affix-placement.mjs +2 -0
  13. package/esm2020/lib/modules/affix/affix-utils.mjs +18 -0
  14. package/esm2020/lib/modules/affix/affix-vertical-alignment.mjs +2 -0
  15. package/esm2020/lib/modules/affix/affix.directive.mjs +100 -0
  16. package/esm2020/lib/modules/affix/affix.module.mjs +18 -0
  17. package/esm2020/lib/modules/affix/affix.service.mjs +24 -0
  18. package/esm2020/lib/modules/affix/affixer.mjs +349 -0
  19. package/esm2020/lib/modules/affix/dom-utils.mjs +77 -0
  20. package/esm2020/lib/modules/dock/dock-dom-adapter.service.mjs +80 -0
  21. package/esm2020/lib/modules/dock/dock-insert-component-config.mjs +2 -0
  22. package/esm2020/lib/modules/dock/dock-item-config.mjs +2 -0
  23. package/esm2020/lib/modules/dock/dock-item-reference.mjs +2 -0
  24. package/esm2020/lib/modules/dock/dock-item.mjs +29 -0
  25. package/esm2020/lib/modules/dock/dock-location.mjs +19 -0
  26. package/esm2020/lib/modules/dock/dock-options.mjs +2 -0
  27. package/esm2020/lib/modules/dock/dock.component.mjs +88 -0
  28. package/esm2020/lib/modules/dock/dock.module.mjs +19 -0
  29. package/esm2020/lib/modules/dock/dock.service.mjs +95 -0
  30. package/esm2020/lib/modules/dock/sort-by-stack-order.mjs +13 -0
  31. package/esm2020/lib/modules/dynamic-component/dynamic-component-location.mjs +27 -0
  32. package/esm2020/lib/modules/dynamic-component/dynamic-component-options.mjs +2 -0
  33. package/esm2020/lib/modules/dynamic-component/dynamic-component.module.mjs +17 -0
  34. package/esm2020/lib/modules/dynamic-component/dynamic-component.service.mjs +83 -0
  35. package/esm2020/lib/modules/format/app-format.mjs +18 -0
  36. package/esm2020/lib/modules/id/id.directive.mjs +34 -0
  37. package/esm2020/lib/modules/id/id.module.mjs +16 -0
  38. package/esm2020/lib/modules/log/log.module.mjs +16 -0
  39. package/esm2020/lib/modules/log/log.service.mjs +23 -0
  40. package/esm2020/lib/modules/media-query/media-breakpoints.mjs +20 -0
  41. package/esm2020/lib/modules/media-query/media-query-listener.mjs +2 -0
  42. package/esm2020/lib/modules/media-query/media-query.module.mjs +16 -0
  43. package/esm2020/lib/modules/media-query/media-query.service.mjs +121 -0
  44. package/esm2020/lib/modules/mutation/mutation-observer-service.mjs +16 -0
  45. package/esm2020/lib/modules/numeric/numeric-symbol.mjs +2 -0
  46. package/esm2020/lib/modules/numeric/numeric.module.mjs +20 -0
  47. package/esm2020/lib/modules/numeric/numeric.options.mjs +41 -0
  48. package/esm2020/lib/modules/numeric/numeric.pipe.mjs +82 -0
  49. package/esm2020/lib/modules/numeric/numeric.service.mjs +188 -0
  50. package/esm2020/lib/modules/overlay/overlay-adapter.service.mjs +41 -0
  51. package/esm2020/lib/modules/overlay/overlay-config.mjs +2 -0
  52. package/esm2020/lib/modules/overlay/overlay-context.mjs +10 -0
  53. package/esm2020/lib/modules/overlay/overlay-instance.mjs +55 -0
  54. package/esm2020/lib/modules/overlay/overlay.component.mjs +149 -0
  55. package/esm2020/lib/modules/overlay/overlay.module.mjs +17 -0
  56. package/esm2020/lib/modules/overlay/overlay.service.mjs +120 -0
  57. package/esm2020/lib/modules/percent-pipe/percent-pipe.module.mjs +20 -0
  58. package/esm2020/lib/modules/percent-pipe/percent.pipe.mjs +48 -0
  59. package/esm2020/lib/modules/scrollable-host/scrollable-host.service.mjs +184 -0
  60. package/esm2020/lib/modules/shared/number-format/number-format-utility.mjs +72 -0
  61. package/esm2020/lib/modules/shared/sky-core-resources.module.mjs +50 -0
  62. package/esm2020/lib/modules/title/set-title-args.mjs +2 -0
  63. package/esm2020/lib/modules/title/title.service.mjs +31 -0
  64. package/esm2020/lib/modules/ui-config/ui-config.service.mjs +21 -0
  65. package/esm2020/lib/modules/viewkeeper/viewkeeper-boundary-info.mjs +2 -0
  66. package/esm2020/lib/modules/viewkeeper/viewkeeper-fixed-styles.mjs +2 -0
  67. package/esm2020/lib/modules/viewkeeper/viewkeeper-host-options.mjs +10 -0
  68. package/esm2020/lib/modules/viewkeeper/viewkeeper-offset.mjs +2 -0
  69. package/esm2020/lib/modules/viewkeeper/viewkeeper-options.mjs +2 -0
  70. package/esm2020/lib/modules/viewkeeper/viewkeeper.directive.mjs +116 -0
  71. package/esm2020/lib/modules/viewkeeper/viewkeeper.mjs +251 -0
  72. package/esm2020/lib/modules/viewkeeper/viewkeeper.module.mjs +16 -0
  73. package/esm2020/lib/modules/viewkeeper/viewkeeper.service.mjs +39 -0
  74. package/esm2020/lib/modules/window/window-ref.mjs +30 -0
  75. package/esm2020/skyux-core.mjs +5 -0
  76. package/esm2020/testing/mock-media-query.service.mjs +41 -0
  77. package/esm2020/testing/mock-ui-config.service.mjs +59 -0
  78. package/esm2020/testing/public-api.mjs +3 -0
  79. package/esm2020/testing/skyux-core-testing.mjs +5 -0
  80. package/fesm2015/{skyux-core-testing.js → skyux-core-testing.mjs} +7 -7
  81. package/fesm2015/skyux-core-testing.mjs.map +1 -0
  82. package/fesm2015/skyux-core.mjs +3043 -0
  83. package/fesm2015/skyux-core.mjs.map +1 -0
  84. package/fesm2020/skyux-core-testing.mjs +103 -0
  85. package/fesm2020/skyux-core-testing.mjs.map +1 -0
  86. package/{fesm2015/skyux-core.js → fesm2020/skyux-core.mjs} +134 -150
  87. package/fesm2020/skyux-core.mjs.map +1 -0
  88. package/package.json +36 -12
  89. package/testing/package.json +5 -5
  90. package/bundles/skyux-core-testing.umd.js +0 -459
  91. package/bundles/skyux-core.umd.js +0 -3648
  92. package/esm2015/index.js +0 -60
  93. package/esm2015/index.js.map +0 -1
  94. package/esm2015/lib/modules/adapter-service/adapter.module.js +0 -16
  95. package/esm2015/lib/modules/adapter-service/adapter.module.js.map +0 -1
  96. package/esm2015/lib/modules/adapter-service/adapter.service.js +0 -218
  97. package/esm2015/lib/modules/adapter-service/adapter.service.js.map +0 -1
  98. package/esm2015/lib/modules/adapter-service/focusable-children-options.js +0 -2
  99. package/esm2015/lib/modules/adapter-service/focusable-children-options.js.map +0 -1
  100. package/esm2015/lib/modules/affix/affix-auto-fit-context.js +0 -12
  101. package/esm2015/lib/modules/affix/affix-auto-fit-context.js.map +0 -1
  102. package/esm2015/lib/modules/affix/affix-config.js +0 -2
  103. package/esm2015/lib/modules/affix/affix-config.js.map +0 -1
  104. package/esm2015/lib/modules/affix/affix-horizontal-alignment.js +0 -2
  105. package/esm2015/lib/modules/affix/affix-horizontal-alignment.js.map +0 -1
  106. package/esm2015/lib/modules/affix/affix-offset-change.js +0 -2
  107. package/esm2015/lib/modules/affix/affix-offset-change.js.map +0 -1
  108. package/esm2015/lib/modules/affix/affix-offset.js +0 -2
  109. package/esm2015/lib/modules/affix/affix-offset.js.map +0 -1
  110. package/esm2015/lib/modules/affix/affix-placement-change.js +0 -2
  111. package/esm2015/lib/modules/affix/affix-placement-change.js.map +0 -1
  112. package/esm2015/lib/modules/affix/affix-placement.js +0 -2
  113. package/esm2015/lib/modules/affix/affix-placement.js.map +0 -1
  114. package/esm2015/lib/modules/affix/affix-utils.js +0 -18
  115. package/esm2015/lib/modules/affix/affix-utils.js.map +0 -1
  116. package/esm2015/lib/modules/affix/affix-vertical-alignment.js +0 -2
  117. package/esm2015/lib/modules/affix/affix-vertical-alignment.js.map +0 -1
  118. package/esm2015/lib/modules/affix/affix.directive.js +0 -100
  119. package/esm2015/lib/modules/affix/affix.directive.js.map +0 -1
  120. package/esm2015/lib/modules/affix/affix.module.js +0 -18
  121. package/esm2015/lib/modules/affix/affix.module.js.map +0 -1
  122. package/esm2015/lib/modules/affix/affix.service.js +0 -24
  123. package/esm2015/lib/modules/affix/affix.service.js.map +0 -1
  124. package/esm2015/lib/modules/affix/affixer.js +0 -349
  125. package/esm2015/lib/modules/affix/affixer.js.map +0 -1
  126. package/esm2015/lib/modules/affix/dom-utils.js +0 -77
  127. package/esm2015/lib/modules/affix/dom-utils.js.map +0 -1
  128. package/esm2015/lib/modules/dock/dock-dom-adapter.service.js +0 -80
  129. package/esm2015/lib/modules/dock/dock-dom-adapter.service.js.map +0 -1
  130. package/esm2015/lib/modules/dock/dock-insert-component-config.js +0 -2
  131. package/esm2015/lib/modules/dock/dock-insert-component-config.js.map +0 -1
  132. package/esm2015/lib/modules/dock/dock-item-config.js +0 -2
  133. package/esm2015/lib/modules/dock/dock-item-config.js.map +0 -1
  134. package/esm2015/lib/modules/dock/dock-item-reference.js +0 -2
  135. package/esm2015/lib/modules/dock/dock-item-reference.js.map +0 -1
  136. package/esm2015/lib/modules/dock/dock-item.js +0 -29
  137. package/esm2015/lib/modules/dock/dock-item.js.map +0 -1
  138. package/esm2015/lib/modules/dock/dock-location.js +0 -19
  139. package/esm2015/lib/modules/dock/dock-location.js.map +0 -1
  140. package/esm2015/lib/modules/dock/dock-options.js +0 -2
  141. package/esm2015/lib/modules/dock/dock-options.js.map +0 -1
  142. package/esm2015/lib/modules/dock/dock.component.js +0 -95
  143. package/esm2015/lib/modules/dock/dock.component.js.map +0 -1
  144. package/esm2015/lib/modules/dock/dock.module.js +0 -20
  145. package/esm2015/lib/modules/dock/dock.module.js.map +0 -1
  146. package/esm2015/lib/modules/dock/dock.service.js +0 -95
  147. package/esm2015/lib/modules/dock/dock.service.js.map +0 -1
  148. package/esm2015/lib/modules/dock/sort-by-stack-order.js +0 -13
  149. package/esm2015/lib/modules/dock/sort-by-stack-order.js.map +0 -1
  150. package/esm2015/lib/modules/dynamic-component/dynamic-component-location.js +0 -27
  151. package/esm2015/lib/modules/dynamic-component/dynamic-component-location.js.map +0 -1
  152. package/esm2015/lib/modules/dynamic-component/dynamic-component-options.js +0 -2
  153. package/esm2015/lib/modules/dynamic-component/dynamic-component-options.js.map +0 -1
  154. package/esm2015/lib/modules/dynamic-component/dynamic-component.module.js +0 -17
  155. package/esm2015/lib/modules/dynamic-component/dynamic-component.module.js.map +0 -1
  156. package/esm2015/lib/modules/dynamic-component/dynamic-component.service.js +0 -83
  157. package/esm2015/lib/modules/dynamic-component/dynamic-component.service.js.map +0 -1
  158. package/esm2015/lib/modules/format/app-format.js +0 -18
  159. package/esm2015/lib/modules/format/app-format.js.map +0 -1
  160. package/esm2015/lib/modules/id/id.directive.js +0 -34
  161. package/esm2015/lib/modules/id/id.directive.js.map +0 -1
  162. package/esm2015/lib/modules/id/id.module.js +0 -16
  163. package/esm2015/lib/modules/id/id.module.js.map +0 -1
  164. package/esm2015/lib/modules/log/log.module.js +0 -16
  165. package/esm2015/lib/modules/log/log.module.js.map +0 -1
  166. package/esm2015/lib/modules/log/log.service.js +0 -23
  167. package/esm2015/lib/modules/log/log.service.js.map +0 -1
  168. package/esm2015/lib/modules/media-query/media-breakpoints.js +0 -20
  169. package/esm2015/lib/modules/media-query/media-breakpoints.js.map +0 -1
  170. package/esm2015/lib/modules/media-query/media-query-listener.js +0 -2
  171. package/esm2015/lib/modules/media-query/media-query-listener.js.map +0 -1
  172. package/esm2015/lib/modules/media-query/media-query.module.js +0 -16
  173. package/esm2015/lib/modules/media-query/media-query.module.js.map +0 -1
  174. package/esm2015/lib/modules/media-query/media-query.service.js +0 -121
  175. package/esm2015/lib/modules/media-query/media-query.service.js.map +0 -1
  176. package/esm2015/lib/modules/mutation/mutation-observer-service.js +0 -16
  177. package/esm2015/lib/modules/mutation/mutation-observer-service.js.map +0 -1
  178. package/esm2015/lib/modules/numeric/numeric-symbol.js +0 -2
  179. package/esm2015/lib/modules/numeric/numeric-symbol.js.map +0 -1
  180. package/esm2015/lib/modules/numeric/numeric.module.js +0 -20
  181. package/esm2015/lib/modules/numeric/numeric.module.js.map +0 -1
  182. package/esm2015/lib/modules/numeric/numeric.options.js +0 -41
  183. package/esm2015/lib/modules/numeric/numeric.options.js.map +0 -1
  184. package/esm2015/lib/modules/numeric/numeric.pipe.js +0 -83
  185. package/esm2015/lib/modules/numeric/numeric.pipe.js.map +0 -1
  186. package/esm2015/lib/modules/numeric/numeric.service.js +0 -189
  187. package/esm2015/lib/modules/numeric/numeric.service.js.map +0 -1
  188. package/esm2015/lib/modules/overlay/overlay-adapter.service.js +0 -41
  189. package/esm2015/lib/modules/overlay/overlay-adapter.service.js.map +0 -1
  190. package/esm2015/lib/modules/overlay/overlay-config.js +0 -2
  191. package/esm2015/lib/modules/overlay/overlay-config.js.map +0 -1
  192. package/esm2015/lib/modules/overlay/overlay-context.js +0 -10
  193. package/esm2015/lib/modules/overlay/overlay-context.js.map +0 -1
  194. package/esm2015/lib/modules/overlay/overlay-instance.js +0 -55
  195. package/esm2015/lib/modules/overlay/overlay-instance.js.map +0 -1
  196. package/esm2015/lib/modules/overlay/overlay.component.js +0 -154
  197. package/esm2015/lib/modules/overlay/overlay.component.js.map +0 -1
  198. package/esm2015/lib/modules/overlay/overlay.module.js +0 -18
  199. package/esm2015/lib/modules/overlay/overlay.module.js.map +0 -1
  200. package/esm2015/lib/modules/overlay/overlay.service.js +0 -120
  201. package/esm2015/lib/modules/overlay/overlay.service.js.map +0 -1
  202. package/esm2015/lib/modules/percent-pipe/percent-pipe.module.js +0 -20
  203. package/esm2015/lib/modules/percent-pipe/percent-pipe.module.js.map +0 -1
  204. package/esm2015/lib/modules/percent-pipe/percent.pipe.js +0 -48
  205. package/esm2015/lib/modules/percent-pipe/percent.pipe.js.map +0 -1
  206. package/esm2015/lib/modules/scrollable-host/scrollable-host.service.js +0 -184
  207. package/esm2015/lib/modules/scrollable-host/scrollable-host.service.js.map +0 -1
  208. package/esm2015/lib/modules/shared/number-format/number-format-utility.js +0 -72
  209. package/esm2015/lib/modules/shared/number-format/number-format-utility.js.map +0 -1
  210. package/esm2015/lib/modules/shared/sky-core-resources.module.js +0 -50
  211. package/esm2015/lib/modules/shared/sky-core-resources.module.js.map +0 -1
  212. package/esm2015/lib/modules/title/set-title-args.js +0 -2
  213. package/esm2015/lib/modules/title/set-title-args.js.map +0 -1
  214. package/esm2015/lib/modules/title/title.service.js +0 -31
  215. package/esm2015/lib/modules/title/title.service.js.map +0 -1
  216. package/esm2015/lib/modules/ui-config/ui-config.service.js +0 -21
  217. package/esm2015/lib/modules/ui-config/ui-config.service.js.map +0 -1
  218. package/esm2015/lib/modules/viewkeeper/viewkeeper-boundary-info.js +0 -2
  219. package/esm2015/lib/modules/viewkeeper/viewkeeper-boundary-info.js.map +0 -1
  220. package/esm2015/lib/modules/viewkeeper/viewkeeper-fixed-styles.js +0 -2
  221. package/esm2015/lib/modules/viewkeeper/viewkeeper-fixed-styles.js.map +0 -1
  222. package/esm2015/lib/modules/viewkeeper/viewkeeper-host-options.js +0 -10
  223. package/esm2015/lib/modules/viewkeeper/viewkeeper-host-options.js.map +0 -1
  224. package/esm2015/lib/modules/viewkeeper/viewkeeper-offset.js +0 -2
  225. package/esm2015/lib/modules/viewkeeper/viewkeeper-offset.js.map +0 -1
  226. package/esm2015/lib/modules/viewkeeper/viewkeeper-options.js +0 -2
  227. package/esm2015/lib/modules/viewkeeper/viewkeeper-options.js.map +0 -1
  228. package/esm2015/lib/modules/viewkeeper/viewkeeper.directive.js +0 -116
  229. package/esm2015/lib/modules/viewkeeper/viewkeeper.directive.js.map +0 -1
  230. package/esm2015/lib/modules/viewkeeper/viewkeeper.js +0 -251
  231. package/esm2015/lib/modules/viewkeeper/viewkeeper.js.map +0 -1
  232. package/esm2015/lib/modules/viewkeeper/viewkeeper.module.js +0 -16
  233. package/esm2015/lib/modules/viewkeeper/viewkeeper.module.js.map +0 -1
  234. package/esm2015/lib/modules/viewkeeper/viewkeeper.service.js +0 -39
  235. package/esm2015/lib/modules/viewkeeper/viewkeeper.service.js.map +0 -1
  236. package/esm2015/lib/modules/window/window-ref.js +0 -30
  237. package/esm2015/lib/modules/window/window-ref.js.map +0 -1
  238. package/esm2015/skyux-core.js +0 -5
  239. package/esm2015/skyux-core.js.map +0 -1
  240. package/esm2015/testing/mock-media-query.service.js +0 -41
  241. package/esm2015/testing/mock-media-query.service.js.map +0 -1
  242. package/esm2015/testing/mock-ui-config.service.js +0 -59
  243. package/esm2015/testing/mock-ui-config.service.js.map +0 -1
  244. package/esm2015/testing/public-api.js +0 -3
  245. package/esm2015/testing/public-api.js.map +0 -1
  246. package/esm2015/testing/skyux-core-testing.js +0 -5
  247. package/esm2015/testing/skyux-core-testing.js.map +0 -1
  248. package/fesm2015/skyux-core-testing.js.map +0 -1
  249. package/fesm2015/skyux-core.js.map +0 -1
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Provides contextual information to each overlay created.
3
+ * @internal
4
+ */
5
+ export class SkyOverlayContext {
6
+ constructor(config) {
7
+ this.config = config;
8
+ }
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvcmUvc3JjL2xpYi9tb2R1bGVzL292ZXJsYXkvb3ZlcmxheS1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7R0FHRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFBNEIsTUFBd0I7UUFBeEIsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7SUFBRyxDQUFDO0NBQ3pEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2t5T3ZlcmxheUNvbmZpZyB9IGZyb20gJy4vb3ZlcmxheS1jb25maWcnO1xuXG4vKipcbiAqIFByb3ZpZGVzIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdG8gZWFjaCBvdmVybGF5IGNyZWF0ZWQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFNreU92ZXJsYXlDb250ZXh0IHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNvbmZpZzogU2t5T3ZlcmxheUNvbmZpZykge31cbn1cbiJdfQ==
@@ -0,0 +1,55 @@
1
+ import { Subject } from 'rxjs';
2
+ /**
3
+ * Represents a new overlay instance. It is used to manage the "closed" state of the overlay,
4
+ * and access any public members on the appended content component instance.
5
+ */
6
+ export class SkyOverlayInstance {
7
+ constructor(
8
+ /**
9
+ * The configuration for the overlay.
10
+ */
11
+ config, componentRef) {
12
+ this.config = config;
13
+ this.componentRef = componentRef;
14
+ this._backdropClick = new Subject();
15
+ this._closed = new Subject();
16
+ this.componentRef.instance.closed.subscribe(() => {
17
+ this._closed.next();
18
+ this._closed.complete();
19
+ this._backdropClick.complete();
20
+ });
21
+ this.componentRef.instance.backdropClick.subscribe(() => {
22
+ this._backdropClick.next();
23
+ });
24
+ }
25
+ /**
26
+ * Emits when the overlay is clicked (but not its content).
27
+ */
28
+ get backdropClick() {
29
+ return this._backdropClick.asObservable();
30
+ }
31
+ /**
32
+ * Emits after the overlay is closed.
33
+ */
34
+ get closed() {
35
+ return this._closed.asObservable();
36
+ }
37
+ /**
38
+ * Creates and attaches a component to the overlay.
39
+ * @param component The component to attach.
40
+ * @param providers Custom providers to apply to the component.
41
+ */
42
+ attachComponent(component, providers) {
43
+ const componentRef = this.componentRef.instance.attachComponent(component, providers);
44
+ return componentRef.instance;
45
+ }
46
+ /**
47
+ * Attaches a `TemplateRef` to the overlay.
48
+ * @param templateRef The `TemplateRef` to attach.
49
+ * @param context The context to provide to the template.
50
+ */
51
+ attachTemplate(templateRef, context) {
52
+ this.componentRef.instance.attachTemplate(templateRef, context);
53
+ }
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1pbnN0YW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9vdmVybGF5L292ZXJsYXktaW5zdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUszQzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBbUI3QjtJQUNFOztPQUVHO0lBQ2EsTUFBd0IsRUFDeEIsWUFBK0M7UUFEL0MsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQW1DO1FBVHpELG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVyQyxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBbENEOztPQUVHO0lBQ0gsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQXdCRDs7OztPQUlHO0lBQ0ksZUFBZSxDQUNwQixTQUFrQixFQUNsQixTQUE0QjtRQUU1QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzdELFNBQVMsRUFDVCxTQUFTLENBQ1YsQ0FBQztRQUNGLE9BQU8sWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGNBQWMsQ0FBSSxXQUEyQixFQUFFLE9BQVc7UUFDL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIFN0YXRpY1Byb3ZpZGVyLCBUZW1wbGF0ZVJlZiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNreU92ZXJsYXlDb25maWcgfSBmcm9tICcuL292ZXJsYXktY29uZmlnJztcbmltcG9ydCB7IFNreU92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuL292ZXJsYXkuY29tcG9uZW50JztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbmV3IG92ZXJsYXkgaW5zdGFuY2UuIEl0IGlzIHVzZWQgdG8gbWFuYWdlIHRoZSBcImNsb3NlZFwiIHN0YXRlIG9mIHRoZSBvdmVybGF5LFxuICogYW5kIGFjY2VzcyBhbnkgcHVibGljIG1lbWJlcnMgb24gdGhlIGFwcGVuZGVkIGNvbnRlbnQgY29tcG9uZW50IGluc3RhbmNlLlxuICovXG5leHBvcnQgY2xhc3MgU2t5T3ZlcmxheUluc3RhbmNlIHtcbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gdGhlIG92ZXJsYXkgaXMgY2xpY2tlZCAoYnV0IG5vdCBpdHMgY29udGVudCkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJhY2tkcm9wQ2xpY2soKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2JhY2tkcm9wQ2xpY2suYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYWZ0ZXIgdGhlIG92ZXJsYXkgaXMgY2xvc2VkLlxuICAgKi9cbiAgcHVibGljIGdldCBjbG9zZWQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb3NlZC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2JhY2tkcm9wQ2xpY2sgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgX2Nsb3NlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBvdmVybGF5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBjb25maWc6IFNreU92ZXJsYXlDb25maWcsXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFNreU92ZXJsYXlDb21wb25lbnQ+XG4gICkge1xuICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmNsb3NlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fY2xvc2VkLm5leHQoKTtcbiAgICAgIHRoaXMuX2Nsb3NlZC5jb21wbGV0ZSgpO1xuICAgICAgdGhpcy5fYmFja2Ryb3BDbGljay5jb21wbGV0ZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuYmFja2Ryb3BDbGljay5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fYmFja2Ryb3BDbGljay5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbmQgYXR0YWNoZXMgYSBjb21wb25lbnQgdG8gdGhlIG92ZXJsYXkuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgVGhlIGNvbXBvbmVudCB0byBhdHRhY2guXG4gICAqIEBwYXJhbSBwcm92aWRlcnMgQ3VzdG9tIHByb3ZpZGVycyB0byBhcHBseSB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIGF0dGFjaENvbXBvbmVudDxDPihcbiAgICBjb21wb25lbnQ6IFR5cGU8Qz4sXG4gICAgcHJvdmlkZXJzPzogU3RhdGljUHJvdmlkZXJbXVxuICApOiBDIHtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5hdHRhY2hDb21wb25lbnQoXG4gICAgICBjb21wb25lbnQsXG4gICAgICBwcm92aWRlcnNcbiAgICApO1xuICAgIHJldHVybiBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoZXMgYSBgVGVtcGxhdGVSZWZgIHRvIHRoZSBvdmVybGF5LlxuICAgKiBAcGFyYW0gdGVtcGxhdGVSZWYgVGhlIGBUZW1wbGF0ZVJlZmAgdG8gYXR0YWNoLlxuICAgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBwcm92aWRlIHRvIHRoZSB0ZW1wbGF0ZS5cbiAgICovXG4gIHB1YmxpYyBhdHRhY2hUZW1wbGF0ZTxUPih0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8VD4sIGNvbnRleHQ/OiBUKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuYXR0YWNoVGVtcGxhdGUodGVtcGxhdGVSZWYsIGNvbnRleHQpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,149 @@
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, Injector, Optional, ViewChild, ViewContainerRef, } from '@angular/core';
2
+ import { NavigationStart, Router } from '@angular/router';
3
+ import { Subject, fromEvent } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import { SkyCoreAdapterService } from '../adapter-service/adapter.service';
6
+ import { SkyOverlayContext } from './overlay-context';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../adapter-service/adapter.service";
9
+ import * as i2 from "./overlay-context";
10
+ import * as i3 from "@angular/router";
11
+ import * as i4 from "@angular/common";
12
+ /**
13
+ * Omnibar is 1000.
14
+ * See: https://github.com/blackbaud/auth-client/blob/master/src/omnibar/omnibar.ts#L139
15
+ * ---
16
+ * Modals start their z-indexes at 1040. However, each modal's z-index is a multiple of 10, so it
17
+ * will be difficult to reliably predict a z-index that will always appear above all other
18
+ * layers. Starting the z-index for overlays at a number much greater than modals will accommodate
19
+ * the most reasonable of scenarios.
20
+ * See: https://github.com/blackbaud/skyux-modals/blob/master/src/app/public/modules/modal/modal-host.service.ts#L22
21
+ * (NOTE: It should be noted that modals do not use the overlay service, which is something we
22
+ * should do in the near future to make sure z-indexes are predictable across all component
23
+ * libraries.)
24
+ */
25
+ let uniqueZIndex = 5000;
26
+ /**
27
+ * @internal
28
+ */
29
+ export class SkyOverlayComponent {
30
+ constructor(changeDetector, resolver, injector, coreAdapter, context, router) {
31
+ this.changeDetector = changeDetector;
32
+ this.resolver = resolver;
33
+ this.injector = injector;
34
+ this.coreAdapter = coreAdapter;
35
+ this.context = context;
36
+ this.router = router;
37
+ this.wrapperClass = '';
38
+ this.enablePointerEvents = false;
39
+ this.showBackdrop = false;
40
+ this.zIndex = `${++uniqueZIndex}`;
41
+ this.ngUnsubscribe = new Subject();
42
+ this._backdropClick = new Subject();
43
+ this._closed = new Subject();
44
+ }
45
+ get backdropClick() {
46
+ return this._backdropClick.asObservable();
47
+ }
48
+ get closed() {
49
+ return this._closed.asObservable();
50
+ }
51
+ ngOnInit() {
52
+ this.applyConfig(this.context.config);
53
+ setTimeout(() => {
54
+ this.addBackdropClickListener();
55
+ });
56
+ if (this.context.config.closeOnNavigation) {
57
+ this.addRouteListener();
58
+ }
59
+ }
60
+ ngOnDestroy() {
61
+ this.removeRouteListener();
62
+ this.ngUnsubscribe.next();
63
+ this.ngUnsubscribe.complete();
64
+ this._backdropClick.complete();
65
+ this._closed.next();
66
+ this._closed.complete();
67
+ }
68
+ attachComponent(component, providers = []) {
69
+ this.targetRef.clear();
70
+ const factory = this.resolver.resolveComponentFactory(component);
71
+ const injector = Injector.create({
72
+ providers,
73
+ parent: this.injector,
74
+ });
75
+ const componentRef = this.targetRef.createComponent(factory, undefined, injector);
76
+ // Run an initial change detection cycle after the component has been created.
77
+ componentRef.changeDetectorRef.detectChanges();
78
+ return componentRef;
79
+ }
80
+ attachTemplate(templateRef, context) {
81
+ this.targetRef.clear();
82
+ return this.targetRef.createEmbeddedView(templateRef, context);
83
+ }
84
+ applyConfig(config) {
85
+ this.wrapperClass = config.wrapperClass || '';
86
+ this.showBackdrop = config.showBackdrop;
87
+ this.enablePointerEvents = config.enablePointerEvents;
88
+ this.changeDetector.markForCheck();
89
+ }
90
+ addBackdropClickListener() {
91
+ fromEvent(window.document, 'click')
92
+ .pipe(takeUntil(this.ngUnsubscribe))
93
+ .subscribe((event) => {
94
+ const isChild = this.overlayContentRef.nativeElement.contains(event.target);
95
+ const isAbove = this.coreAdapter.isTargetAboveElement(event.target, this.overlayRef.nativeElement);
96
+ /* istanbul ignore else */
97
+ if (!isChild && !isAbove) {
98
+ this._backdropClick.next();
99
+ if (this.context.config.enableClose) {
100
+ this._closed.next();
101
+ }
102
+ }
103
+ });
104
+ }
105
+ addRouteListener() {
106
+ /*istanbul ignore else*/
107
+ if (this.router) {
108
+ this.routerSubscription = this.router.events.subscribe((event) => {
109
+ /* istanbul ignore else */
110
+ if (event instanceof NavigationStart) {
111
+ this._closed.next();
112
+ }
113
+ });
114
+ }
115
+ }
116
+ removeRouteListener() {
117
+ if (this.routerSubscription) {
118
+ this.routerSubscription.unsubscribe();
119
+ this.routerSubscription = undefined;
120
+ }
121
+ }
122
+ }
123
+ SkyOverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyOverlayComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: i1.SkyCoreAdapterService }, { token: i2.SkyOverlayContext }, { token: i3.Router, optional: true }], target: i0.ɵɵFactoryTarget.Component });
124
+ SkyOverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SkyOverlayComponent, selector: "sky-overlay", viewQueries: [{ propertyName: "overlayContentRef", first: true, predicate: ["overlayContentRef"], descendants: true, read: ElementRef, static: true }, { propertyName: "overlayRef", first: true, predicate: ["overlayRef"], descendants: true, read: ElementRef, static: true }, { propertyName: "targetRef", first: true, predicate: ["target"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<div\n [class]=\"wrapperClass\"\n [style.zIndex]=\"zIndex\"\n [ngClass]=\"{\n 'enable-pointer-events-pass-through': enablePointerEvents,\n 'sky-overlay': true\n }\"\n #overlayRef\n>\n <div class=\"sky-overlay-content\" #overlayContentRef>\n <ng-template #target> </ng-template>\n </div>\n <div *ngIf=\"showBackdrop\" class=\"sky-overlay-backdrop\"></div>\n</div>\n", styles: [".sky-overlay{position:fixed;top:0;right:0;left:0;bottom:0;width:100%;height:100%;display:flex;pointer-events:auto}.sky-overlay-content{position:relative;z-index:1;display:inline-flex;align-self:start;pointer-events:auto}.sky-overlay-backdrop{background:rgba(0,0,0,.5);top:0;right:0;left:0;bottom:0;width:100%;height:100%;position:absolute}.enable-pointer-events-pass-through,.enable-pointer-events-pass-through .sky-overlay-backdrop{pointer-events:none}.enable-pointer-events-pass-through .sky-overlay-content{pointer-events:auto}\n"], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyOverlayComponent, decorators: [{
126
+ type: Component,
127
+ args: [{ selector: 'sky-overlay', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [class]=\"wrapperClass\"\n [style.zIndex]=\"zIndex\"\n [ngClass]=\"{\n 'enable-pointer-events-pass-through': enablePointerEvents,\n 'sky-overlay': true\n }\"\n #overlayRef\n>\n <div class=\"sky-overlay-content\" #overlayContentRef>\n <ng-template #target> </ng-template>\n </div>\n <div *ngIf=\"showBackdrop\" class=\"sky-overlay-backdrop\"></div>\n</div>\n", styles: [".sky-overlay{position:fixed;top:0;right:0;left:0;bottom:0;width:100%;height:100%;display:flex;pointer-events:auto}.sky-overlay-content{position:relative;z-index:1;display:inline-flex;align-self:start;pointer-events:auto}.sky-overlay-backdrop{background:rgba(0,0,0,.5);top:0;right:0;left:0;bottom:0;width:100%;height:100%;position:absolute}.enable-pointer-events-pass-through,.enable-pointer-events-pass-through .sky-overlay-backdrop{pointer-events:none}.enable-pointer-events-pass-through .sky-overlay-content{pointer-events:auto}\n"] }]
128
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i1.SkyCoreAdapterService }, { type: i2.SkyOverlayContext }, { type: i3.Router, decorators: [{
129
+ type: Optional
130
+ }] }]; }, propDecorators: { overlayContentRef: [{
131
+ type: ViewChild,
132
+ args: ['overlayContentRef', {
133
+ read: ElementRef,
134
+ static: true,
135
+ }]
136
+ }], overlayRef: [{
137
+ type: ViewChild,
138
+ args: ['overlayRef', {
139
+ read: ElementRef,
140
+ static: true,
141
+ }]
142
+ }], targetRef: [{
143
+ type: ViewChild,
144
+ args: ['target', {
145
+ read: ViewContainerRef,
146
+ static: true,
147
+ }]
148
+ }] } });
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY29yZS9zcmMvbGliL21vZHVsZXMvb3ZlcmxheS9vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9vdmVybGF5L292ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUV4QixVQUFVLEVBRVYsUUFBUSxFQUdSLFFBQVEsRUFJUixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUQsT0FBTyxFQUFjLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUczRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7O0FBRXREOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztBQUV4Qjs7R0FFRztBQU9ILE1BQU0sT0FBTyxtQkFBbUI7SUEyQzlCLFlBQ1UsY0FBaUMsRUFDakMsUUFBa0MsRUFDbEMsUUFBa0IsRUFDbEIsV0FBa0MsRUFDbEMsT0FBMEIsRUFDZCxNQUFlO1FBTDNCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxhQUFRLEdBQVIsUUFBUSxDQUEwQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FB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RUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7U0FDckM7SUFDSCxDQUFDOztnSEExSlUsbUJBQW1CO29HQUFuQixtQkFBbUIsc0pBa0J0QixVQUFVLGlIQU1WLFVBQVUsNEdBTVYsZ0JBQWdCLDJDQ2xGMUIsK1hBY0E7MkZEc0NhLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxhQUFhLG1CQUdOLHVCQUF1QixDQUFDLE1BQU07OzBCQW1ENUMsUUFBUTs0Q0E1QkgsaUJBQWlCO3NCQUp4QixTQUFTO3VCQUFDLG1CQUFtQixFQUFFO3dCQUM5QixJQUFJLEVBQUUsVUFBVTt3QkFDaEIsTUFBTSxFQUFFLElBQUk7cUJBQ2I7Z0JBT08sVUFBVTtzQkFKakIsU0FBUzt1QkFBQyxZQUFZLEVBQUU7d0JBQ3ZCLElBQUksRUFBRSxVQUFVO3dCQUNoQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFPTyxTQUFTO3NCQUpoQixTQUFTO3VCQUFDLFFBQVEsRUFBRTt3QkFDbkIsSUFBSSxFQUFFLGdCQUFnQjt3QkFDdEIsTUFBTSxFQUFFLElBQUk7cUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBDb21wb25lbnRSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU3RhdGljUHJvdmlkZXIsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lDb3JlQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuLi9hZGFwdGVyLXNlcnZpY2UvYWRhcHRlci5zZXJ2aWNlJztcblxuaW1wb3J0IHsgU2t5T3ZlcmxheUNvbmZpZyB9IGZyb20gJy4vb3ZlcmxheS1jb25maWcnO1xuaW1wb3J0IHsgU2t5T3ZlcmxheUNvbnRleHQgfSBmcm9tICcuL292ZXJsYXktY29udGV4dCc7XG5cbi8qKlxuICogT21uaWJhciBpcyAxMDAwLlxuICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmxhY2tiYXVkL2F1dGgtY2xpZW50L2Jsb2IvbWFzdGVyL3NyYy9vbW5pYmFyL29tbmliYXIudHMjTDEzOVxuICogLS0tXG4gKiBNb2RhbHMgc3RhcnQgdGhlaXIgei1pbmRleGVzIGF0IDEwNDAuIEhvd2V2ZXIsIGVhY2ggbW9kYWwncyB6LWluZGV4IGlzIGEgbXVsdGlwbGUgb2YgMTAsIHNvIGl0XG4gKiB3aWxsIGJlIGRpZmZpY3VsdCB0byByZWxpYWJseSBwcmVkaWN0IGEgei1pbmRleCB0aGF0IHdpbGwgYWx3YXlzIGFwcGVhciBhYm92ZSBhbGwgb3RoZXJcbiAqIGxheWVycy4gU3RhcnRpbmcgdGhlIHotaW5kZXggZm9yIG92ZXJsYXlzIGF0IGEgbnVtYmVyIG11Y2ggZ3JlYXRlciB0aGFuIG1vZGFscyB3aWxsIGFjY29tbW9kYXRlXG4gKiB0aGUgbW9zdCByZWFzb25hYmxlIG9mIHNjZW5hcmlvcy5cbiAqIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JsYWNrYmF1ZC9za3l1eC1tb2RhbHMvYmxvYi9tYXN0ZXIvc3JjL2FwcC9wdWJsaWMvbW9kdWxlcy9tb2RhbC9tb2RhbC1ob3N0LnNlcnZpY2UudHMjTDIyXG4gKiAoTk9URTogSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgbW9kYWxzIGRvIG5vdCB1c2UgdGhlIG92ZXJsYXkgc2VydmljZSwgd2hpY2ggaXMgc29tZXRoaW5nIHdlXG4gKiBzaG91bGQgZG8gaW4gdGhlIG5lYXIgZnV0dXJlIHRvIG1ha2Ugc3VyZSB6LWluZGV4ZXMgYXJlIHByZWRpY3RhYmxlIGFjcm9zcyBhbGwgY29tcG9uZW50XG4gKiBsaWJyYXJpZXMuKVxuICovXG5sZXQgdW5pcXVlWkluZGV4ID0gNTAwMDtcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LW92ZXJsYXknLFxuICB0ZW1wbGF0ZVVybDogJy4vb3ZlcmxheS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL292ZXJsYXkuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreU92ZXJsYXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyB3cmFwcGVyQ2xhc3MgPSAnJztcblxuICBwdWJsaWMgZ2V0IGJhY2tkcm9wQ2xpY2soKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2JhY2tkcm9wQ2xpY2suYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNsb3NlZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xvc2VkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGVuYWJsZVBvaW50ZXJFdmVudHMgPSBmYWxzZTtcblxuICBwdWJsaWMgc2hvd0JhY2tkcm9wID0gZmFsc2U7XG5cbiAgcHVibGljIHpJbmRleCA9IGAkeysrdW5pcXVlWkluZGV4fWA7XG5cbiAgQFZpZXdDaGlsZCgnb3ZlcmxheUNvbnRlbnRSZWYnLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIHByaXZhdGUgb3ZlcmxheUNvbnRlbnRSZWY6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgnb3ZlcmxheVJlZicsIHtcbiAgICByZWFkOiBFbGVtZW50UmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJpdmF0ZSBvdmVybGF5UmVmOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhcmdldCcsIHtcbiAgICByZWFkOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJpdmF0ZSB0YXJnZXRSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIHJvdXRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgX2JhY2tkcm9wQ2xpY2sgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgX2Nsb3NlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgY29yZUFkYXB0ZXI6IFNreUNvcmVBZGFwdGVyU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHQ6IFNreU92ZXJsYXlDb250ZXh0LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcm91dGVyPzogUm91dGVyXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBseUNvbmZpZyh0aGlzLmNvbnRleHQuY29uZmlnKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hZGRCYWNrZHJvcENsaWNrTGlzdGVuZXIoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmNvbnRleHQuY29uZmlnLmNsb3NlT25OYXZpZ2F0aW9uKSB7XG4gICAgICB0aGlzLmFkZFJvdXRlTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVSb3V0ZUxpc3RlbmVyKCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcblxuICAgIHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKTtcblxuICAgIHRoaXMuX2Nsb3NlZC5uZXh0KCk7XG4gICAgdGhpcy5fY2xvc2VkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgYXR0YWNoQ29tcG9uZW50PEM+KFxuICAgIGNvbXBvbmVudDogVHlwZTxDPixcbiAgICBwcm92aWRlcnM6IFN0YXRpY1Byb3ZpZGVyW10gPSBbXVxuICApOiBDb21wb25lbnRSZWY8Qz4ge1xuICAgIHRoaXMudGFyZ2V0UmVmLmNsZWFyKCk7XG5cbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpO1xuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHByb3ZpZGVycyxcbiAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMudGFyZ2V0UmVmLmNyZWF0ZUNvbXBvbmVudDxDPihcbiAgICAgIGZhY3RvcnksXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBpbmplY3RvclxuICAgICk7XG5cbiAgICAvLyBSdW4gYW4gaW5pdGlhbCBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlIGFmdGVyIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gY3JlYXRlZC5cbiAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgfVxuXG4gIHB1YmxpYyBhdHRhY2hUZW1wbGF0ZTxUPihcbiAgICB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8VD4sXG4gICAgY29udGV4dDogVFxuICApOiBFbWJlZGRlZFZpZXdSZWY8VD4ge1xuICAgIHRoaXMudGFyZ2V0UmVmLmNsZWFyKCk7XG5cbiAgICByZXR1cm4gdGhpcy50YXJnZXRSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRlbXBsYXRlUmVmLCBjb250ZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb25maWcoY29uZmlnOiBTa3lPdmVybGF5Q29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy53cmFwcGVyQ2xhc3MgPSBjb25maWcud3JhcHBlckNsYXNzIHx8ICcnO1xuICAgIHRoaXMuc2hvd0JhY2tkcm9wID0gY29uZmlnLnNob3dCYWNrZHJvcDtcbiAgICB0aGlzLmVuYWJsZVBvaW50ZXJFdmVudHMgPSBjb25maWcuZW5hYmxlUG9pbnRlckV2ZW50cztcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRCYWNrZHJvcENsaWNrTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgZnJvbUV2ZW50KHdpbmRvdy5kb2N1bWVudCwgJ2NsaWNrJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgaXNDaGlsZCA9IHRoaXMub3ZlcmxheUNvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhcbiAgICAgICAgICBldmVudC50YXJnZXRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaXNBYm92ZSA9IHRoaXMuY29yZUFkYXB0ZXIuaXNUYXJnZXRBYm92ZUVsZW1lbnQoXG4gICAgICAgICAgZXZlbnQudGFyZ2V0LFxuICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKCFpc0NoaWxkICYmICFpc0Fib3ZlKSB7XG4gICAgICAgICAgdGhpcy5fYmFja2Ryb3BDbGljay5uZXh0KCk7XG4gICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5jb25maWcuZW5hYmxlQ2xvc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlZC5uZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUm91dGVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbHNlKi9cbiAgICBpZiAodGhpcy5yb3V0ZXIpIHtcbiAgICAgIHRoaXMucm91dGVyU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5fY2xvc2VkLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVSb3V0ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJvdXRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yb3V0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMucm91dGVyU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBbY2xhc3NdPVwid3JhcHBlckNsYXNzXCJcbiAgW3N0eWxlLnpJbmRleF09XCJ6SW5kZXhcIlxuICBbbmdDbGFzc109XCJ7XG4gICAgJ2VuYWJsZS1wb2ludGVyLWV2ZW50cy1wYXNzLXRocm91Z2gnOiBlbmFibGVQb2ludGVyRXZlbnRzLFxuICAgICdza3ktb3ZlcmxheSc6IHRydWVcbiAgfVwiXG4gICNvdmVybGF5UmVmXG4+XG4gIDxkaXYgY2xhc3M9XCJza3ktb3ZlcmxheS1jb250ZW50XCIgI292ZXJsYXlDb250ZW50UmVmPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGFyZ2V0PiA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cInNob3dCYWNrZHJvcFwiIGNsYXNzPVwic2t5LW92ZXJsYXktYmFja2Ryb3BcIj48L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,17 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { SkyOverlayComponent } from './overlay.component';
4
+ import * as i0 from "@angular/core";
5
+ export class SkyOverlayModule {
6
+ }
7
+ SkyOverlayModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyOverlayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ SkyOverlayModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyOverlayModule, declarations: [SkyOverlayComponent], imports: [CommonModule] });
9
+ SkyOverlayModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyOverlayModule, imports: [[CommonModule]] });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyOverlayModule, decorators: [{
11
+ type: NgModule,
12
+ args: [{
13
+ imports: [CommonModule],
14
+ declarations: [SkyOverlayComponent],
15
+ }]
16
+ }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY29yZS9zcmMvbGliL21vZHVsZXMvb3ZlcmxheS9vdmVybGF5Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFNMUQsTUFBTSxPQUFPLGdCQUFnQjs7NkdBQWhCLGdCQUFnQjs4R0FBaEIsZ0JBQWdCLGlCQUZaLG1CQUFtQixhQUR4QixZQUFZOzhHQUdYLGdCQUFnQixZQUhsQixDQUFDLFlBQVksQ0FBQzsyRkFHWixnQkFBZ0I7a0JBSjVCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDcEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5T3ZlcmxheUNvbXBvbmVudCB9IGZyb20gJy4vb3ZlcmxheS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbU2t5T3ZlcmxheUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreU92ZXJsYXlNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,120 @@
1
+ import { ApplicationRef, ComponentFactoryResolver, Injectable, Injector, } from '@angular/core';
2
+ import { SkyOverlayAdapterService } from './overlay-adapter.service';
3
+ import { SkyOverlayContext } from './overlay-context';
4
+ import { SkyOverlayInstance } from './overlay-instance';
5
+ import { SkyOverlayComponent } from './overlay.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "./overlay-adapter.service";
8
+ /**
9
+ * This service is used to create new overlays.
10
+ * @dynamic
11
+ */
12
+ export class SkyOverlayService {
13
+ constructor(applicationRef, componentFactoryResolver, injector, adapter) {
14
+ this.applicationRef = applicationRef;
15
+ this.componentFactoryResolver = componentFactoryResolver;
16
+ this.injector = injector;
17
+ this.adapter = adapter;
18
+ }
19
+ /**
20
+ * Creates an empty overlay. Use the returned `SkyOverlayInstance` to append content.
21
+ * @param config Configuration for the overlay.
22
+ */
23
+ create(config) {
24
+ const settings = this.prepareConfig(config);
25
+ if (settings.enableScroll === false) {
26
+ this.adapter.restrictBodyScroll();
27
+ }
28
+ const componentRef = this.createOverlay(settings);
29
+ const instance = new SkyOverlayInstance(settings, componentRef);
30
+ instance.closed.subscribe(() => {
31
+ // Only execute the service's close method if the instance still exists.
32
+ // This is needed to address a race condition if the deprecated instance.close method is used instead.
33
+ if (SkyOverlayService.overlays.indexOf(instance) > -1) {
34
+ this.close(instance);
35
+ }
36
+ });
37
+ SkyOverlayService.overlays.push(instance);
38
+ return instance;
39
+ }
40
+ /**
41
+ * Closes (and destroys) an overlay instance.
42
+ * @param instance The instance to close.
43
+ */
44
+ close(instance) {
45
+ this.destroyOverlay(instance);
46
+ this.applicationRef.detachView(instance.componentRef.hostView);
47
+ instance.componentRef.destroy();
48
+ // In some cases, Angular keeps dynamically-generated component's nodes in the DOM during
49
+ // unit tests. This can make querying difficult because the older DOM nodes still exist and
50
+ // produce inconsistent results.
51
+ // Angular Material's overlay appears to do the same thing:
52
+ // https://github.com/angular/components/blob/master/src/cdk/portal/dom-portal-outlet.ts#L143-L145
53
+ // (Ignoring coverage since this branch will only be hit by consumer unit tests.)
54
+ const componentElement = instance.componentRef.location.nativeElement;
55
+ /* istanbul ignore if */
56
+ if (componentElement.parentNode !== null) {
57
+ componentElement.parentNode.removeChild(componentElement);
58
+ }
59
+ }
60
+ /**
61
+ * Closes all overlay instances.
62
+ */
63
+ closeAll() {
64
+ // The `close` event handler for each instance alters the array's length asynchronously,
65
+ // so the only "safe" index to call is zero.
66
+ while (SkyOverlayService.overlays.length > 0) {
67
+ this.close(SkyOverlayService.overlays[0]);
68
+ }
69
+ }
70
+ createOverlay(config) {
71
+ const injector = Injector.create({
72
+ parent: this.injector,
73
+ providers: [
74
+ {
75
+ provide: SkyOverlayContext,
76
+ useValue: new SkyOverlayContext(config),
77
+ },
78
+ ],
79
+ });
80
+ const componentRef = this.componentFactoryResolver
81
+ .resolveComponentFactory(SkyOverlayComponent)
82
+ .create(injector);
83
+ this.applicationRef.attachView(componentRef.hostView);
84
+ const domElem = componentRef.hostView
85
+ .rootNodes[0];
86
+ document.body.appendChild(domElem);
87
+ return componentRef;
88
+ }
89
+ prepareConfig(config) {
90
+ const defaults = {
91
+ closeOnNavigation: true,
92
+ enableClose: false,
93
+ enablePointerEvents: false,
94
+ enableScroll: true,
95
+ showBackdrop: false,
96
+ wrapperClass: '',
97
+ };
98
+ return { ...defaults, ...config };
99
+ }
100
+ destroyOverlay(instance) {
101
+ SkyOverlayService.overlays.splice(SkyOverlayService.overlays.indexOf(instance), 1);
102
+ if (instance.config.enableScroll === false) {
103
+ // Only release the body scroll if no other overlay wishes it to be disabled.
104
+ const anotherOverlayDisablesScroll = SkyOverlayService.overlays.some((o) => !o.config.enableScroll);
105
+ if (!anotherOverlayDisablesScroll) {
106
+ this.adapter.releaseBodyScroll();
107
+ }
108
+ }
109
+ }
110
+ }
111
+ SkyOverlayService.overlays = [];
112
+ SkyOverlayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyOverlayService, deps: [{ token: i0.ApplicationRef }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: i1.SkyOverlayAdapterService }], target: i0.ɵɵFactoryTarget.Injectable });
113
+ SkyOverlayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyOverlayService, providedIn: 'root' });
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyOverlayService, decorators: [{
115
+ type: Injectable,
116
+ args: [{
117
+ providedIn: 'root',
118
+ }]
119
+ }], ctorParameters: function () { return [{ type: i0.ApplicationRef }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i1.SkyOverlayAdapterService }]; } });
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvcmUvc3JjL2xpYi9tb2R1bGVzL292ZXJsYXkvb3ZlcmxheS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsd0JBQXdCLEVBR3hCLFVBQVUsRUFDVixRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUUxRDs7O0dBR0c7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBRzVCLFlBQ1UsY0FBOEIsRUFDOUIsd0JBQWtELEVBQ2xELFFBQWtCLEVBQ2xCLE9BQWlDO1FBSGpDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7SUFDeEMsQ0FBQztJQUVKOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxNQUF5QjtRQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTVDLElBQUksUUFBUSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7WUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQ25DO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRCxNQUFNLFFBQVEs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LENBQy9CLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQzVDLENBQUMsQ0FDRixDQUFDO1FBRUYsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUU7WUFDMUMsNkVBQTZFO1lBQzdFLE1BQU0sNEJBQTRCLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDbEUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQzlCLENBQUM7WUFDRixJQUFJLENBQUMsNEJBQTRCLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUNsQztTQUNGO0lBQ0gsQ0FBQzs7QUE1SGMsMEJBQVEsR0FBeUIsRUFBRyxDQUFBOzhHQUR4QyxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBDb21wb25lbnRSZWYsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTa3lPdmVybGF5QWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL292ZXJsYXktYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreU92ZXJsYXlDb25maWcgfSBmcm9tICcuL292ZXJsYXktY29uZmlnJztcbmltcG9ydCB7IFNreU92ZXJsYXlDb250ZXh0IH0gZnJvbSAnLi9vdmVybGF5LWNvbnRleHQnO1xuaW1wb3J0IHsgU2t5T3ZlcmxheUluc3RhbmNlIH0gZnJvbSAnLi9vdmVybGF5LWluc3RhbmNlJztcbmltcG9ydCB7IFNreU92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuL292ZXJsYXkuY29tcG9uZW50JztcblxuLyoqXG4gKiBUaGlzIHNlcnZpY2UgaXMgdXNlZCB0byBjcmVhdGUgbmV3IG92ZXJsYXlzLlxuICogQGR5bmFtaWNcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreU92ZXJsYXlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgb3ZlcmxheXM6IFNreU92ZXJsYXlJbnN0YW5jZVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGFkYXB0ZXI6IFNreU92ZXJsYXlBZGFwdGVyU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZW1wdHkgb3ZlcmxheS4gVXNlIHRoZSByZXR1cm5lZCBgU2t5T3ZlcmxheUluc3RhbmNlYCB0byBhcHBlbmQgY29udGVudC5cbiAgICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIGZvciB0aGUgb3ZlcmxheS5cbiAgICovXG4gIHB1YmxpYyBjcmVhdGUoY29uZmlnPzogU2t5T3ZlcmxheUNvbmZpZyk6IFNreU92ZXJsYXlJbnN0YW5jZSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnByZXBhcmVDb25maWcoY29uZmlnKTtcblxuICAgIGlmIChzZXR0aW5ncy5lbmFibGVTY3JvbGwgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFkYXB0ZXIucmVzdHJpY3RCb2R5U2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jcmVhdGVPdmVybGF5KHNldHRpbmdzKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBTa3lPdmVybGF5SW5zdGFuY2Uoc2V0dGluZ3MsIGNvbXBvbmVudFJlZik7XG5cbiAgICBpbnN0YW5jZS5jbG9zZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIC8vIE9ubHkgZXhlY3V0ZSB0aGUgc2VydmljZSdzIGNsb3NlIG1ldGhvZCBpZiB0aGUgaW5zdGFuY2Ugc3RpbGwgZXhpc3RzLlxuICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYWRkcmVzcyBhIHJhY2UgY29uZGl0aW9uIGlmIHRoZSBkZXByZWNhdGVkIGluc3RhbmNlLmNsb3NlIG1ldGhvZCBpcyB1c2VkIGluc3RlYWQuXG4gICAgICBpZiAoU2t5T3ZlcmxheVNlcnZpY2Uub3ZlcmxheXMuaW5kZXhPZihpbnN0YW5jZSkgPiAtMSkge1xuICAgICAgICB0aGlzLmNsb3NlKGluc3RhbmNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFNreU92ZXJsYXlTZXJ2aWNlLm92ZXJsYXlzLnB1c2goaW5zdGFuY2UpO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyAoYW5kIGRlc3Ryb3lzKSBhbiBvdmVybGF5IGluc3RhbmNlLlxuICAgKiBAcGFyYW0gaW5zdGFuY2UgVGhlIGluc3RhbmNlIHRvIGNsb3NlLlxuICAgKi9cbiAgcHVibGljIGNsb3NlKGluc3RhbmNlOiBTa3lPdmVybGF5SW5zdGFuY2UpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lPdmVybGF5KGluc3RhbmNlKTtcbiAgICB0aGlzLmFwcGxpY2F0aW9uUmVmLmRldGFjaFZpZXcoaW5zdGFuY2UuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuXG4gICAgLy8gSW4gc29tZSBjYXNlcywgQW5ndWxhciBrZWVwcyBkeW5hbWljYWxseS1nZW5lcmF0ZWQgY29tcG9uZW50J3Mgbm9kZXMgaW4gdGhlIERPTSBkdXJpbmdcbiAgICAvLyB1bml0IHRlc3RzLiBUaGlzIGNhbiBtYWtlIHF1ZXJ5aW5nIGRpZmZpY3VsdCBiZWNhdXNlIHRoZSBvbGRlciBET00gbm9kZXMgc3RpbGwgZXhpc3QgYW5kXG4gICAgLy8gcHJvZHVjZSBpbmNvbnNpc3RlbnQgcmVzdWx0cy5cbiAgICAvLyBBbmd1bGFyIE1hdGVyaWFsJ3Mgb3ZlcmxheSBhcHBlYXJzIHRvIGRvIHRoZSBzYW1lIHRoaW5nOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvYmxvYi9tYXN0ZXIvc3JjL2Nkay9wb3J0YWwvZG9tLXBvcnRhbC1vdXRsZXQudHMjTDE0My1MMTQ1XG4gICAgLy8gKElnbm9yaW5nIGNvdmVyYWdlIHNpbmNlIHRoaXMgYnJhbmNoIHdpbGwgb25seSBiZSBoaXQgYnkgY29uc3VtZXIgdW5pdCB0ZXN0cy4pXG4gICAgY29uc3QgY29tcG9uZW50RWxlbWVudCA9IGluc3RhbmNlLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50O1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChjb21wb25lbnRFbGVtZW50LnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbXBvbmVudEVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb21wb25lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIGFsbCBvdmVybGF5IGluc3RhbmNlcy5cbiAgICovXG4gIHB1YmxpYyBjbG9zZUFsbCgpOiB2b2lkIHtcbiAgICAvLyBUaGUgYGNsb3NlYCBldmVudCBoYW5kbGVyIGZvciBlYWNoIGluc3RhbmNlIGFsdGVycyB0aGUgYXJyYXkncyBsZW5ndGggYXN5bmNocm9ub3VzbHksXG4gICAgLy8gc28gdGhlIG9ubHkgXCJzYWZlXCIgaW5kZXggdG8gY2FsbCBpcyB6ZXJvLlxuICAgIHdoaWxlIChTa3lPdmVybGF5U2VydmljZS5vdmVybGF5cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNsb3NlKFNreU92ZXJsYXlTZXJ2aWNlLm92ZXJsYXlzWzBdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU92ZXJsYXkoXG4gICAgY29uZmlnPzogU2t5T3ZlcmxheUNvbmZpZ1xuICApOiBDb21wb25lbnRSZWY8U2t5T3ZlcmxheUNvbXBvbmVudD4ge1xuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogU2t5T3ZlcmxheUNvbnRleHQsXG4gICAgICAgICAgdXNlVmFsdWU6IG5ldyBTa3lPdmVybGF5Q29udGV4dChjb25maWcpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICAgICAucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoU2t5T3ZlcmxheUNvbXBvbmVudClcbiAgICAgIC5jcmVhdGUoaW5qZWN0b3IpO1xuXG4gICAgdGhpcy5hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG5cbiAgICBjb25zdCBkb21FbGVtID0gKGNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55PilcbiAgICAgIC5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvbUVsZW0pO1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUNvbmZpZyhjb25maWc6IFNreU92ZXJsYXlDb25maWcpOiBTa3lPdmVybGF5Q29uZmlnIHtcbiAgICBjb25zdCBkZWZhdWx0czogU2t5T3ZlcmxheUNvbmZpZyA9IHtcbiAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgZW5hYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgZW5hYmxlUG9pbnRlckV2ZW50czogZmFsc2UsXG4gICAgICBlbmFibGVTY3JvbGw6IHRydWUsXG4gICAgICBzaG93QmFja2Ryb3A6IGZhbHNlLFxuICAgICAgd3JhcHBlckNsYXNzOiAnJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgLi4uZGVmYXVsdHMsIC4uLmNvbmZpZyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95T3ZlcmxheShpbnN0YW5jZTogU2t5T3ZlcmxheUluc3RhbmNlKTogdm9pZCB7XG4gICAgU2t5T3ZlcmxheVNlcnZpY2Uub3ZlcmxheXMuc3BsaWNlKFxuICAgICAgU2t5T3ZlcmxheVNlcnZpY2Uub3ZlcmxheXMuaW5kZXhPZihpbnN0YW5jZSksXG4gICAgICAxXG4gICAgKTtcblxuICAgIGlmIChpbnN0YW5jZS5jb25maWcuZW5hYmxlU2Nyb2xsID09PSBmYWxzZSkge1xuICAgICAgLy8gT25seSByZWxlYXNlIHRoZSBib2R5IHNjcm9sbCBpZiBubyBvdGhlciBvdmVybGF5IHdpc2hlcyBpdCB0byBiZSBkaXNhYmxlZC5cbiAgICAgIGNvbnN0IGFub3RoZXJPdmVybGF5RGlzYWJsZXNTY3JvbGwgPSBTa3lPdmVybGF5U2VydmljZS5vdmVybGF5cy5zb21lKFxuICAgICAgICAobykgPT4gIW8uY29uZmlnLmVuYWJsZVNjcm9sbFxuICAgICAgKTtcbiAgICAgIGlmICghYW5vdGhlck92ZXJsYXlEaXNhYmxlc1Njcm9sbCkge1xuICAgICAgICB0aGlzLmFkYXB0ZXIucmVsZWFzZUJvZHlTY3JvbGwoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { SkyCoreResourcesModule } from '../shared/sky-core-resources.module';
4
+ import { SkyPercentPipe } from './percent.pipe';
5
+ import * as i0 from "@angular/core";
6
+ export class SkyPercentPipeModule {
7
+ }
8
+ SkyPercentPipeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyPercentPipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ SkyPercentPipeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyPercentPipeModule, declarations: [SkyPercentPipe], imports: [CommonModule, SkyCoreResourcesModule], exports: [SkyPercentPipe] });
10
+ SkyPercentPipeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyPercentPipeModule, providers: [SkyPercentPipe], imports: [[CommonModule, SkyCoreResourcesModule]] });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyPercentPipeModule, decorators: [{
12
+ type: NgModule,
13
+ args: [{
14
+ declarations: [SkyPercentPipe],
15
+ providers: [SkyPercentPipe],
16
+ imports: [CommonModule, SkyCoreResourcesModule],
17
+ exports: [SkyPercentPipe],
18
+ }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyY2VudC1waXBlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9wZXJjZW50LXBpcGUvcGVyY2VudC1waXBlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBUWhELE1BQU0sT0FBTyxvQkFBb0I7O2lIQUFwQixvQkFBb0I7a0hBQXBCLG9CQUFvQixpQkFMaEIsY0FBYyxhQUVuQixZQUFZLEVBQUUsc0JBQXNCLGFBQ3BDLGNBQWM7a0hBRWIsb0JBQW9CLGFBSnBCLENBQUMsY0FBYyxDQUFDLFlBQ2xCLENBQUMsWUFBWSxFQUFFLHNCQUFzQixDQUFDOzJGQUdwQyxvQkFBb0I7a0JBTmhDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsY0FBYyxDQUFDO29CQUM5QixTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7b0JBQzNCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxzQkFBc0IsQ0FBQztvQkFDL0MsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO2lCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTa3lDb3JlUmVzb3VyY2VzTW9kdWxlIH0gZnJvbSAnLi4vc2hhcmVkL3NreS1jb3JlLXJlc291cmNlcy5tb2R1bGUnO1xuXG5pbXBvcnQgeyBTa3lQZXJjZW50UGlwZSB9IGZyb20gJy4vcGVyY2VudC5waXBlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbU2t5UGVyY2VudFBpcGVdLFxuICBwcm92aWRlcnM6IFtTa3lQZXJjZW50UGlwZV0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFNreUNvcmVSZXNvdXJjZXNNb2R1bGVdLFxuICBleHBvcnRzOiBbU2t5UGVyY2VudFBpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lQZXJjZW50UGlwZU1vZHVsZSB7fVxuIl19
@@ -0,0 +1,48 @@
1
+ import { Pipe } from '@angular/core';
2
+ import { SkyAppLocaleProvider, SkyIntlNumberFormatStyle } from '@skyux/i18n';
3
+ import { Subject } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import { SkyNumberFormatUtility } from '../shared/number-format/number-format-utility';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@skyux/i18n";
8
+ export class SkyPercentPipe {
9
+ constructor(localeProvider) {
10
+ this.localeProvider = localeProvider;
11
+ this.defaultFormat = '1.0-2';
12
+ this.defaultLocale = 'en-US';
13
+ this.ngUnsubscribe = new Subject();
14
+ this.localeProvider
15
+ .getLocaleInfo()
16
+ .pipe(takeUntil(this.ngUnsubscribe))
17
+ .subscribe((localeInfo) => {
18
+ this.defaultLocale = localeInfo.locale;
19
+ this.updateFormattedValue();
20
+ });
21
+ }
22
+ ngOnDestroy() {
23
+ this.ngUnsubscribe.next();
24
+ this.ngUnsubscribe.complete();
25
+ }
26
+ transform(value, format, locale) {
27
+ this.value = value;
28
+ this.format = format;
29
+ this.locale = locale;
30
+ this.updateFormattedValue();
31
+ return this.formattedValue;
32
+ }
33
+ updateFormattedValue() {
34
+ const locale = this.locale || this.defaultLocale;
35
+ const format = this.format || this.defaultFormat;
36
+ this.formattedValue = SkyNumberFormatUtility.formatNumber(locale, this.value, SkyIntlNumberFormatStyle.Percent, format);
37
+ }
38
+ }
39
+ SkyPercentPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyPercentPipe, deps: [{ token: i1.SkyAppLocaleProvider }], target: i0.ɵɵFactoryTarget.Pipe });
40
+ SkyPercentPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyPercentPipe, name: "skyPercent", pure: false });
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyPercentPipe, decorators: [{
42
+ type: Pipe,
43
+ args: [{
44
+ name: 'skyPercent',
45
+ pure: false,
46
+ }]
47
+ }], ctorParameters: function () { return [{ type: i1.SkyAppLocaleProvider }]; } });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyY2VudC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvcmUvc3JjL2xpYi9tb2R1bGVzL3BlcmNlbnQtcGlwZS9wZXJjZW50LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFhLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTdFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7QUFNdkYsTUFBTSxPQUFPLGNBQWM7SUFlekIsWUFBb0IsY0FBb0M7UUFBcEMsbUJBQWMsR0FBZCxjQUFjLENBQXNCO1FBZGhELGtCQUFhLEdBQUcsT0FBTyxDQUFDO1FBSXhCLGtCQUFhLEdBQUcsT0FBTyxDQUFDO1FBUXhCLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUcxQyxJQUFJLENBQUMsY0FBYzthQUNoQixhQUFhLEVBQUU7YUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDdkMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFhLEVBQUUsTUFBZSxFQUFFLE1BQWU7UUFDOUQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFNUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ2pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUVqRCxJQUFJLENBQUMsY0FBYyxHQUFHLHNCQUFzQixDQUFDLFlBQVksQ0FDdkQsTUFBTSxFQUNOLElBQUksQ0FBQyxLQUFLLEVBQ1Ysd0JBQXdCLENBQUMsT0FBTyxFQUNoQyxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7OzJHQWxEVSxjQUFjO3lHQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFKMUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsSUFBSSxFQUFFLEtBQUs7aUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkRlc3Ryb3ksIFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUFwcExvY2FsZVByb3ZpZGVyLCBTa3lJbnRsTnVtYmVyRm9ybWF0U3R5bGUgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5TnVtYmVyRm9ybWF0VXRpbGl0eSB9IGZyb20gJy4uL3NoYXJlZC9udW1iZXItZm9ybWF0L251bWJlci1mb3JtYXQtdXRpbGl0eSc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3NreVBlcmNlbnQnLFxuICBwdXJlOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5UGVyY2VudFBpcGUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIFBpcGVUcmFuc2Zvcm0ge1xuICBwcml2YXRlIGRlZmF1bHRGb3JtYXQgPSAnMS4wLTInO1xuXG4gIHByaXZhdGUgZm9ybWF0OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBkZWZhdWx0TG9jYWxlID0gJ2VuLVVTJztcblxuICBwcml2YXRlIGxvY2FsZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGZvcm1hdHRlZFZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvY2FsZVByb3ZpZGVyOiBTa3lBcHBMb2NhbGVQcm92aWRlcikge1xuICAgIHRoaXMubG9jYWxlUHJvdmlkZXJcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobG9jYWxlSW5mbykgPT4ge1xuICAgICAgICB0aGlzLmRlZmF1bHRMb2NhbGUgPSBsb2NhbGVJbmZvLmxvY2FsZTtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0ZWRWYWx1ZSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgZm9ybWF0Pzogc3RyaW5nLCBsb2NhbGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcblxuICAgIHRoaXMudXBkYXRlRm9ybWF0dGVkVmFsdWUoKTtcblxuICAgIHJldHVybiB0aGlzLmZvcm1hdHRlZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGb3JtYXR0ZWRWYWx1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsb2NhbGUgPSB0aGlzLmxvY2FsZSB8fCB0aGlzLmRlZmF1bHRMb2NhbGU7XG4gICAgY29uc3QgZm9ybWF0ID0gdGhpcy5mb3JtYXQgfHwgdGhpcy5kZWZhdWx0Rm9ybWF0O1xuXG4gICAgdGhpcy5mb3JtYXR0ZWRWYWx1ZSA9IFNreU51bWJlckZvcm1hdFV0aWxpdHkuZm9ybWF0TnVtYmVyKFxuICAgICAgbG9jYWxlLFxuICAgICAgdGhpcy52YWx1ZSxcbiAgICAgIFNreUludGxOdW1iZXJGb3JtYXRTdHlsZS5QZXJjZW50LFxuICAgICAgZm9ybWF0XG4gICAgKTtcbiAgfVxufVxuIl19