@bravura/ui 3.8.1 → 5.0.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 (276) hide show
  1. package/CHANGELOG.md +585 -565
  2. package/LICENSE +6 -6
  3. package/README.md +3 -1
  4. package/alert/alert-container.component.d.ts +1 -1
  5. package/alert/alert-message.component.d.ts +1 -1
  6. package/behavior/await.directive.d.ts +1 -1
  7. package/behavior/observe-content-class.directive.d.ts +1 -1
  8. package/behavior/sizing.directive.d.ts +1 -1
  9. package/clip-note/clip-note.directive.d.ts +1 -1
  10. package/currency-input/currency-input.directive.d.ts +1 -1
  11. package/decimal-input/decimal-input.directive.d.ts +1 -1
  12. package/discrete-input/discrete-input.component.d.ts +1 -1
  13. package/esm2022/alert/alert-container.component.mjs +207 -0
  14. package/esm2022/alert/alert-message.component.mjs +101 -0
  15. package/esm2022/alert/alert.module.mjs +22 -0
  16. package/{esm2020 → esm2022}/alert/public-api.mjs +1 -1
  17. package/esm2022/alert/testing/test-api.mjs +44 -0
  18. package/esm2022/behavior/await.directive.mjs +133 -0
  19. package/esm2022/behavior/behavior.module.mjs +37 -0
  20. package/esm2022/behavior/observe-content-class.directive.mjs +63 -0
  21. package/{esm2020 → esm2022}/behavior/public-api.mjs +1 -1
  22. package/esm2022/behavior/sizing-monitor.directive.mjs +31 -0
  23. package/esm2022/behavior/sizing.directive.mjs +256 -0
  24. package/esm2022/clip-note/clip-note.component.mjs +216 -0
  25. package/esm2022/clip-note/clip-note.directive.mjs +141 -0
  26. package/esm2022/clip-note/clip-note.module.mjs +32 -0
  27. package/{esm2020 → esm2022}/clip-note/public-api.mjs +1 -1
  28. package/{esm2020 → esm2022}/common/common-utils.mjs +1 -1
  29. package/esm2022/common/common.module.mjs +53 -0
  30. package/{esm2020 → esm2022}/common/public-api.mjs +1 -1
  31. package/esm2022/currency-input/currency-input.directive.mjs +276 -0
  32. package/esm2022/currency-input/currency-input.module.mjs +19 -0
  33. package/{esm2020 → esm2022}/currency-input/public-api.mjs +1 -1
  34. package/esm2022/decimal-input/decimal-input.directive.mjs +122 -0
  35. package/{esm2020 → esm2022}/decimal-input/decimal-input.module.mjs +5 -5
  36. package/esm2022/discrete-input/discrete-input.component.mjs +337 -0
  37. package/esm2022/discrete-input/discrete-input.module.mjs +21 -0
  38. package/{esm2020 → esm2022}/discrete-input/public-api.mjs +1 -1
  39. package/esm2022/file-upload/file-upload.component.mjs +400 -0
  40. package/esm2022/file-upload/file-upload.module.mjs +44 -0
  41. package/esm2022/file-upload/file-upload.service.mjs +29 -0
  42. package/{esm2020 → esm2022}/file-upload/public-api.mjs +1 -1
  43. package/esm2022/form-field/form-field.component.mjs +82 -0
  44. package/esm2022/form-field/form-field.module.mjs +33 -0
  45. package/{esm2020 → esm2022}/form-field/public-api.mjs +1 -1
  46. package/esm2022/icon-font/icon-font.module.mjs +22 -0
  47. package/esm2022/icon-font/icon.directive.mjs +102 -0
  48. package/{esm2020 → esm2022}/icon-font/public-api.mjs +1 -1
  49. package/esm2022/icon-font/utilities.mjs +51 -0
  50. package/esm2022/panel/panel-section.component.mjs +41 -0
  51. package/esm2022/panel/panel.component.mjs +87 -0
  52. package/esm2022/panel/panel.module.mjs +23 -0
  53. package/{esm2020 → esm2022}/panel/public-api.mjs +1 -1
  54. package/esm2022/panel/tinted.directive.mjs +60 -0
  55. package/esm2022/phone-number/phone-number.directive.mjs +188 -0
  56. package/{esm2020 → esm2022}/phone-number/phone-number.module.mjs +5 -5
  57. package/esm2022/phone-number/phone-number.pipe.mjs +47 -0
  58. package/esm2022/phone-number/phone-number.validator.mjs +64 -0
  59. package/{esm2020 → esm2022}/phone-number/public-api.mjs +1 -1
  60. package/{esm2020 → esm2022}/public-api.mjs +1 -1
  61. package/esm2022/radio-panel/radio-panel-item.component.mjs +93 -0
  62. package/esm2022/radio-panel/radio-panel.component.mjs +81 -0
  63. package/{esm2020 → esm2022}/radio-panel/radio-panel.module.mjs +5 -5
  64. package/esm2022/radio-panel/testing/test-api.mjs +46 -0
  65. package/{esm2020 → esm2022}/selection-panel/public-api.mjs +1 -1
  66. package/esm2022/selection-panel/selection-panel-item.component.mjs +166 -0
  67. package/esm2022/selection-panel/selection-panel.directive.mjs +119 -0
  68. package/esm2022/selection-panel/selection-panel.module.mjs +23 -0
  69. package/{esm2020 → esm2022}/skeletons/public-api.mjs +1 -1
  70. package/esm2022/skeletons/skeleton-loader-presets.directive.mjs +83 -0
  71. package/esm2022/skeletons/skeleton-loader.component.mjs +76 -0
  72. package/esm2022/skeletons/skeletons.module.mjs +35 -0
  73. package/{esm2020 → esm2022}/stepper/public-api.mjs +1 -1
  74. package/{esm2020 → esm2022}/stepper/stepper-animation.mjs +1 -1
  75. package/esm2022/stepper/stepper.component.mjs +176 -0
  76. package/esm2022/stepper/stepper.module.mjs +52 -0
  77. package/{esm2020 → esm2022}/tooltip/public-api.mjs +1 -1
  78. package/esm2022/tooltip/tooltip.component.mjs +63 -0
  79. package/esm2022/tooltip/tooltip.directive.mjs +148 -0
  80. package/esm2022/tooltip/tooltip.module.mjs +25 -0
  81. package/{fesm2020 → fesm2022}/bravura-ui-alert-testing.mjs +2 -2
  82. package/fesm2022/bravura-ui-alert-testing.mjs.map +1 -0
  83. package/fesm2022/bravura-ui-alert.mjs +327 -0
  84. package/fesm2022/bravura-ui-alert.mjs.map +1 -0
  85. package/{fesm2020 → fesm2022}/bravura-ui-behavior.mjs +45 -45
  86. package/fesm2022/bravura-ui-behavior.mjs.map +1 -0
  87. package/{fesm2020 → fesm2022}/bravura-ui-clip-note.mjs +70 -70
  88. package/fesm2022/bravura-ui-clip-note.mjs.map +1 -0
  89. package/{fesm2020 → fesm2022}/bravura-ui-common.mjs +6 -6
  90. package/fesm2022/bravura-ui-common.mjs.map +1 -0
  91. package/{fesm2020 → fesm2022}/bravura-ui-currency-input.mjs +11 -11
  92. package/fesm2022/bravura-ui-currency-input.mjs.map +1 -0
  93. package/{fesm2020 → fesm2022}/bravura-ui-decimal-input.mjs +12 -12
  94. package/fesm2022/bravura-ui-decimal-input.mjs.map +1 -0
  95. package/{fesm2020 → fesm2022}/bravura-ui-discrete-input.mjs +48 -48
  96. package/fesm2022/bravura-ui-discrete-input.mjs.map +1 -0
  97. package/fesm2022/bravura-ui-file-upload.mjs +474 -0
  98. package/fesm2022/bravura-ui-file-upload.mjs.map +1 -0
  99. package/{fesm2020 → fesm2022}/bravura-ui-form-field.mjs +19 -19
  100. package/fesm2022/bravura-ui-form-field.mjs.map +1 -0
  101. package/{fesm2020 → fesm2022}/bravura-ui-icon-font.mjs +8 -8
  102. package/fesm2022/bravura-ui-icon-font.mjs.map +1 -0
  103. package/fesm2022/bravura-ui-panel.mjs +206 -0
  104. package/fesm2022/bravura-ui-panel.mjs.map +1 -0
  105. package/{fesm2020 → fesm2022}/bravura-ui-phone-number.mjs +30 -30
  106. package/fesm2022/bravura-ui-phone-number.mjs.map +1 -0
  107. package/{fesm2020 → fesm2022}/bravura-ui-radio-panel-testing.mjs +5 -6
  108. package/fesm2022/bravura-ui-radio-panel-testing.mjs.map +1 -0
  109. package/{fesm2020 → fesm2022}/bravura-ui-radio-panel.mjs +32 -32
  110. package/fesm2022/bravura-ui-radio-panel.mjs.map +1 -0
  111. package/fesm2022/bravura-ui-selection-panel.mjs +306 -0
  112. package/fesm2022/bravura-ui-selection-panel.mjs.map +1 -0
  113. package/{fesm2020 → fesm2022}/bravura-ui-skeletons.mjs +43 -43
  114. package/fesm2022/bravura-ui-skeletons.mjs.map +1 -0
  115. package/fesm2022/bravura-ui-stepper.mjs +251 -0
  116. package/fesm2022/bravura-ui-stepper.mjs.map +1 -0
  117. package/{fesm2020 → fesm2022}/bravura-ui-tooltip.mjs +32 -24
  118. package/fesm2022/bravura-ui-tooltip.mjs.map +1 -0
  119. package/fesm2022/bravura-ui.mjs.map +1 -0
  120. package/file-upload/file-upload.component.d.ts +1 -1
  121. package/form-field/form-field.component.d.ts +1 -1
  122. package/icon-font/icon.directive.d.ts +1 -1
  123. package/package.json +88 -132
  124. package/panel/panel.component.d.ts +1 -1
  125. package/panel/tinted.directive.d.ts +1 -1
  126. package/phone-number/phone-number.directive.d.ts +1 -1
  127. package/phone-number/phone-number.validator.d.ts +2 -2
  128. package/radio-panel/radio-panel-item.component.d.ts +1 -1
  129. package/radio-panel/radio-panel.component.d.ts +1 -1
  130. package/radio-panel/testing/test-api.d.ts +2 -3
  131. package/selection-panel/selection-panel-item.component.d.ts +1 -1
  132. package/selection-panel/selection-panel.directive.d.ts +1 -1
  133. package/skeletons/skeleton-loader-presets.directive.d.ts +3 -3
  134. package/stepper/stepper.component.d.ts +1 -1
  135. package/theme/_bui-card.scss +56 -56
  136. package/theme/_ui-theme.scss +3 -3
  137. package/theme/global-style-by-bootstrap.scss +3 -3
  138. package/theme/global-style-by-tailwind.scss +3 -3
  139. package/theme/scrollbar.scss +40 -40
  140. package/tooltip/tooltip.component.d.ts +2 -0
  141. package/tooltip/tooltip.directive.d.ts +3 -5
  142. package/esm2020/alert/alert-container.component.mjs +0 -207
  143. package/esm2020/alert/alert-message.component.mjs +0 -102
  144. package/esm2020/alert/alert.module.mjs +0 -22
  145. package/esm2020/alert/testing/test-api.mjs +0 -44
  146. package/esm2020/behavior/await.directive.mjs +0 -133
  147. package/esm2020/behavior/behavior.module.mjs +0 -37
  148. package/esm2020/behavior/observe-content-class.directive.mjs +0 -63
  149. package/esm2020/behavior/sizing-monitor.directive.mjs +0 -31
  150. package/esm2020/behavior/sizing.directive.mjs +0 -256
  151. package/esm2020/clip-note/clip-note.component.mjs +0 -216
  152. package/esm2020/clip-note/clip-note.directive.mjs +0 -141
  153. package/esm2020/clip-note/clip-note.module.mjs +0 -32
  154. package/esm2020/common/common.module.mjs +0 -53
  155. package/esm2020/currency-input/currency-input.directive.mjs +0 -276
  156. package/esm2020/currency-input/currency-input.module.mjs +0 -19
  157. package/esm2020/decimal-input/decimal-input.directive.mjs +0 -122
  158. package/esm2020/discrete-input/discrete-input.component.mjs +0 -337
  159. package/esm2020/discrete-input/discrete-input.module.mjs +0 -21
  160. package/esm2020/file-upload/file-upload.component.mjs +0 -400
  161. package/esm2020/file-upload/file-upload.module.mjs +0 -44
  162. package/esm2020/file-upload/file-upload.service.mjs +0 -29
  163. package/esm2020/form-field/form-field.component.mjs +0 -82
  164. package/esm2020/form-field/form-field.module.mjs +0 -33
  165. package/esm2020/icon-font/icon-font.module.mjs +0 -22
  166. package/esm2020/icon-font/icon.directive.mjs +0 -102
  167. package/esm2020/icon-font/utilities.mjs +0 -51
  168. package/esm2020/panel/panel-section.component.mjs +0 -41
  169. package/esm2020/panel/panel.component.mjs +0 -87
  170. package/esm2020/panel/panel.module.mjs +0 -23
  171. package/esm2020/panel/tinted.directive.mjs +0 -60
  172. package/esm2020/phone-number/phone-number.directive.mjs +0 -188
  173. package/esm2020/phone-number/phone-number.pipe.mjs +0 -47
  174. package/esm2020/phone-number/phone-number.validator.mjs +0 -64
  175. package/esm2020/radio-panel/radio-panel-item.component.mjs +0 -93
  176. package/esm2020/radio-panel/radio-panel.component.mjs +0 -81
  177. package/esm2020/radio-panel/testing/test-api.mjs +0 -47
  178. package/esm2020/selection-panel/selection-panel-item.component.mjs +0 -166
  179. package/esm2020/selection-panel/selection-panel.directive.mjs +0 -119
  180. package/esm2020/selection-panel/selection-panel.module.mjs +0 -23
  181. package/esm2020/skeletons/skeleton-loader-presets.directive.mjs +0 -83
  182. package/esm2020/skeletons/skeleton-loader.component.mjs +0 -76
  183. package/esm2020/skeletons/skeletons.module.mjs +0 -35
  184. package/esm2020/stepper/stepper.component.mjs +0 -176
  185. package/esm2020/stepper/stepper.module.mjs +0 -52
  186. package/esm2020/tooltip/tooltip.component.mjs +0 -54
  187. package/esm2020/tooltip/tooltip.directive.mjs +0 -149
  188. package/esm2020/tooltip/tooltip.module.mjs +0 -25
  189. package/fesm2015/bravura-ui-alert-testing.mjs +0 -64
  190. package/fesm2015/bravura-ui-alert-testing.mjs.map +0 -1
  191. package/fesm2015/bravura-ui-alert.mjs +0 -340
  192. package/fesm2015/bravura-ui-alert.mjs.map +0 -1
  193. package/fesm2015/bravura-ui-behavior.mjs +0 -515
  194. package/fesm2015/bravura-ui-behavior.mjs.map +0 -1
  195. package/fesm2015/bravura-ui-clip-note.mjs +0 -393
  196. package/fesm2015/bravura-ui-clip-note.mjs.map +0 -1
  197. package/fesm2015/bravura-ui-common.mjs +0 -96
  198. package/fesm2015/bravura-ui-common.mjs.map +0 -1
  199. package/fesm2015/bravura-ui-currency-input.mjs +0 -300
  200. package/fesm2015/bravura-ui-currency-input.mjs.map +0 -1
  201. package/fesm2015/bravura-ui-decimal-input.mjs +0 -145
  202. package/fesm2015/bravura-ui-decimal-input.mjs.map +0 -1
  203. package/fesm2015/bravura-ui-discrete-input.mjs +0 -365
  204. package/fesm2015/bravura-ui-discrete-input.mjs.map +0 -1
  205. package/fesm2015/bravura-ui-file-upload.mjs +0 -478
  206. package/fesm2015/bravura-ui-file-upload.mjs.map +0 -1
  207. package/fesm2015/bravura-ui-form-field.mjs +0 -120
  208. package/fesm2015/bravura-ui-form-field.mjs.map +0 -1
  209. package/fesm2015/bravura-ui-icon-font.mjs +0 -178
  210. package/fesm2015/bravura-ui-icon-font.mjs.map +0 -1
  211. package/fesm2015/bravura-ui-panel.mjs +0 -210
  212. package/fesm2015/bravura-ui-panel.mjs.map +0 -1
  213. package/fesm2015/bravura-ui-phone-number.mjs +0 -327
  214. package/fesm2015/bravura-ui-phone-number.mjs.map +0 -1
  215. package/fesm2015/bravura-ui-radio-panel-testing.mjs +0 -63
  216. package/fesm2015/bravura-ui-radio-panel-testing.mjs.map +0 -1
  217. package/fesm2015/bravura-ui-radio-panel.mjs +0 -200
  218. package/fesm2015/bravura-ui-radio-panel.mjs.map +0 -1
  219. package/fesm2015/bravura-ui-selection-panel.mjs +0 -311
  220. package/fesm2015/bravura-ui-selection-panel.mjs.map +0 -1
  221. package/fesm2015/bravura-ui-skeletons.mjs +0 -195
  222. package/fesm2015/bravura-ui-skeletons.mjs.map +0 -1
  223. package/fesm2015/bravura-ui-stepper.mjs +0 -253
  224. package/fesm2015/bravura-ui-stepper.mjs.map +0 -1
  225. package/fesm2015/bravura-ui-tooltip.mjs +0 -229
  226. package/fesm2015/bravura-ui-tooltip.mjs.map +0 -1
  227. package/fesm2015/bravura-ui.mjs.map +0 -1
  228. package/fesm2020/bravura-ui-alert-testing.mjs.map +0 -1
  229. package/fesm2020/bravura-ui-alert.mjs +0 -328
  230. package/fesm2020/bravura-ui-alert.mjs.map +0 -1
  231. package/fesm2020/bravura-ui-behavior.mjs.map +0 -1
  232. package/fesm2020/bravura-ui-clip-note.mjs.map +0 -1
  233. package/fesm2020/bravura-ui-common.mjs.map +0 -1
  234. package/fesm2020/bravura-ui-currency-input.mjs.map +0 -1
  235. package/fesm2020/bravura-ui-decimal-input.mjs.map +0 -1
  236. package/fesm2020/bravura-ui-discrete-input.mjs.map +0 -1
  237. package/fesm2020/bravura-ui-file-upload.mjs +0 -474
  238. package/fesm2020/bravura-ui-file-upload.mjs.map +0 -1
  239. package/fesm2020/bravura-ui-form-field.mjs.map +0 -1
  240. package/fesm2020/bravura-ui-icon-font.mjs.map +0 -1
  241. package/fesm2020/bravura-ui-panel.mjs +0 -206
  242. package/fesm2020/bravura-ui-panel.mjs.map +0 -1
  243. package/fesm2020/bravura-ui-phone-number.mjs.map +0 -1
  244. package/fesm2020/bravura-ui-radio-panel-testing.mjs.map +0 -1
  245. package/fesm2020/bravura-ui-radio-panel.mjs.map +0 -1
  246. package/fesm2020/bravura-ui-selection-panel.mjs +0 -306
  247. package/fesm2020/bravura-ui-selection-panel.mjs.map +0 -1
  248. package/fesm2020/bravura-ui-skeletons.mjs.map +0 -1
  249. package/fesm2020/bravura-ui-stepper.mjs +0 -251
  250. package/fesm2020/bravura-ui-stepper.mjs.map +0 -1
  251. package/fesm2020/bravura-ui-tooltip.mjs.map +0 -1
  252. package/fesm2020/bravura-ui.mjs +0 -8
  253. package/fesm2020/bravura-ui.mjs.map +0 -1
  254. /package/{esm2020 → esm2022}/alert/bravura-ui-alert.mjs +0 -0
  255. /package/{esm2020 → esm2022}/alert/testing/bravura-ui-alert-testing.mjs +0 -0
  256. /package/{esm2020 → esm2022}/behavior/bravura-ui-behavior.mjs +0 -0
  257. /package/{esm2020 → esm2022}/bravura-ui.mjs +0 -0
  258. /package/{esm2020 → esm2022}/clip-note/bravura-ui-clip-note.mjs +0 -0
  259. /package/{esm2020 → esm2022}/common/bravura-ui-common.mjs +0 -0
  260. /package/{esm2020 → esm2022}/currency-input/bravura-ui-currency-input.mjs +0 -0
  261. /package/{esm2020 → esm2022}/decimal-input/bravura-ui-decimal-input.mjs +0 -0
  262. /package/{esm2020 → esm2022}/decimal-input/public-api.mjs +0 -0
  263. /package/{esm2020 → esm2022}/discrete-input/bravura-ui-discrete-input.mjs +0 -0
  264. /package/{esm2020 → esm2022}/file-upload/bravura-ui-file-upload.mjs +0 -0
  265. /package/{esm2020 → esm2022}/form-field/bravura-ui-form-field.mjs +0 -0
  266. /package/{esm2020 → esm2022}/icon-font/bravura-ui-icon-font.mjs +0 -0
  267. /package/{esm2020 → esm2022}/panel/bravura-ui-panel.mjs +0 -0
  268. /package/{esm2020 → esm2022}/phone-number/bravura-ui-phone-number.mjs +0 -0
  269. /package/{esm2020 → esm2022}/radio-panel/bravura-ui-radio-panel.mjs +0 -0
  270. /package/{esm2020 → esm2022}/radio-panel/public-api.mjs +0 -0
  271. /package/{esm2020 → esm2022}/radio-panel/testing/bravura-ui-radio-panel-testing.mjs +0 -0
  272. /package/{esm2020 → esm2022}/selection-panel/bravura-ui-selection-panel.mjs +0 -0
  273. /package/{esm2020 → esm2022}/skeletons/bravura-ui-skeletons.mjs +0 -0
  274. /package/{esm2020 → esm2022}/stepper/bravura-ui-stepper.mjs +0 -0
  275. /package/{esm2020 → esm2022}/tooltip/bravura-ui-tooltip.mjs +0 -0
  276. /package/{fesm2015 → fesm2022}/bravura-ui.mjs +0 -0
@@ -0,0 +1,133 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Directive, Inject, Input, Optional } from '@angular/core';
3
+ import { MatProgressSpinner } from '@angular/material/progress-spinner';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/material/button";
6
+ /**
7
+ * Use this directive on a `MatButton` element to provide an alternative view when an async operation is in progress.
8
+ *
9
+ * For example:
10
+ *
11
+ * ```
12
+ * <button (click)="submit();" [buiAwait]="submitSubscription" buiAwaitAriaLabel="submitting">Submit</button>
13
+ * ```
14
+ *
15
+ * Please refer to [Material Design](https://material.io/components/progress-indicators#circular-progress-indicators)
16
+ * for more details of integrating circular spinner component with action buttons.
17
+ *
18
+ * The operation is considered 'in progress' when the bound property `buiAwait` evaluates to
19
+ *
20
+ * - `true`; or
21
+ * - a `number` within 0 - 100; or
22
+ * - an instance of `rxjs/Subscription` and `buiAwait.closed` is falsy
23
+ *
24
+ * When in progress
25
+ *
26
+ * - the button's caption will be hidden;
27
+ * - a `<mat-progress-spinner>` will be displayed in place of the caption;
28
+ * - the button will be disabled by setting the property `disabled` of the `MatButton` instance.
29
+ */
30
+ export class AwaitDirective {
31
+ constructor(_eRef, _button, _iconButton, _iconAnchor, _fab, _fabAnchor, _miniFab, _miniFabAnchor, doc, _viewCont) {
32
+ this._eRef = _eRef;
33
+ this._button = _button;
34
+ this._iconButton = _iconButton;
35
+ this._iconAnchor = _iconAnchor;
36
+ this._fab = _fab;
37
+ this._fabAnchor = _fabAnchor;
38
+ this._miniFab = _miniFab;
39
+ this._miniFabAnchor = _miniFabAnchor;
40
+ this.doc = doc;
41
+ this._viewCont = _viewCont;
42
+ /** The ARIA label to be put on the spinner. The default value is `"In progress"`. */
43
+ this.buiAwaitAriaLabel = 'In progress';
44
+ /** The diameter of the in-progress spinner. The default value is `20`. */
45
+ this.buiAwaitDiameter = 20;
46
+ this._processing = false;
47
+ this.button = _button || _iconButton || _iconAnchor || _fab || _fabAnchor || _miniFab || _miniFabAnchor;
48
+ if (!this.button) {
49
+ console.error('[buiAwait] can only be used on a Material button.');
50
+ return;
51
+ }
52
+ }
53
+ /** @ignore */
54
+ ngAfterViewInit() {
55
+ if (this.button) {
56
+ this._overlayEl = this.doc.createElement('div');
57
+ this._eRef.nativeElement.appendChild(this._overlayEl);
58
+ this._overlayEl.classList.add('bui-await-overlay');
59
+ this._overlayEl.style.cssText =
60
+ 'display:flex; position:absolute; top:0; right:0; bottom:0; left:0; align-items: center; justify-content: center';
61
+ this._captionWrapper = this._eRef.nativeElement.querySelector('.mdc-button__label,.mat-icon');
62
+ }
63
+ }
64
+ /** @ignore */
65
+ ngDoCheck() {
66
+ const inProgress = this.buiAwait === true || (typeof this.buiAwait === 'object' && !this.buiAwait.closed) || this._isDeterminate;
67
+ if (inProgress !== this._processing) {
68
+ this._processing = inProgress;
69
+ this._statusChanged(this._isDeterminate ? 'determinate' : 'indeterminate');
70
+ }
71
+ if (this._isDeterminate && this._spinnerRef) {
72
+ this._spinnerRef.setInput('value', this.buiAwait);
73
+ }
74
+ }
75
+ /** @ignore */
76
+ get _isDeterminate() {
77
+ return typeof this.buiAwait === 'number' && this.buiAwait >= 0 && this.buiAwait < 100;
78
+ }
79
+ _statusChanged(mode) {
80
+ if (this.button) {
81
+ this.button.disabled = this._processing;
82
+ if (this._processing) {
83
+ this._spinnerRef = this._viewCont.createComponent(MatProgressSpinner);
84
+ const c = this._spinnerRef.instance;
85
+ c.diameter = this.buiAwaitDiameter;
86
+ c.mode = mode;
87
+ c.color = this.button.color;
88
+ const e = this._spinnerRef.location.nativeElement;
89
+ e.setAttribute('aria-label', this.buiAwaitAriaLabel);
90
+ this._overlayEl.appendChild(e);
91
+ this._captionWrapper.style.visibility = 'hidden';
92
+ }
93
+ else {
94
+ this._captionWrapper.style.visibility = '';
95
+ this._spinnerRef.destroy();
96
+ this._spinnerRef = undefined;
97
+ this._overlayEl.innerHTML = '';
98
+ }
99
+ }
100
+ }
101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: AwaitDirective, deps: [{ token: i0.ElementRef }, { token: i1.MatButton, optional: true }, { token: i1.MatIconButton, optional: true }, { token: i1.MatIconAnchor, optional: true }, { token: i1.MatFabButton, optional: true }, { token: i1.MatFabAnchor, optional: true }, { token: i1.MatMiniFabButton, optional: true }, { token: i1.MatMiniFabAnchor, optional: true }, { token: DOCUMENT }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
102
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: AwaitDirective, selector: "[buiAwait]", inputs: { buiAwait: "buiAwait", buiAwaitAriaLabel: "buiAwaitAriaLabel", buiAwaitDiameter: "buiAwaitDiameter" }, ngImport: i0 }); }
103
+ }
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: AwaitDirective, decorators: [{
105
+ type: Directive,
106
+ args: [{
107
+ selector: '[buiAwait]'
108
+ }]
109
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.MatButton, decorators: [{
110
+ type: Optional
111
+ }] }, { type: i1.MatIconButton, decorators: [{
112
+ type: Optional
113
+ }] }, { type: i1.MatIconAnchor, decorators: [{
114
+ type: Optional
115
+ }] }, { type: i1.MatFabButton, decorators: [{
116
+ type: Optional
117
+ }] }, { type: i1.MatFabAnchor, decorators: [{
118
+ type: Optional
119
+ }] }, { type: i1.MatMiniFabButton, decorators: [{
120
+ type: Optional
121
+ }] }, { type: i1.MatMiniFabAnchor, decorators: [{
122
+ type: Optional
123
+ }] }, { type: Document, decorators: [{
124
+ type: Inject,
125
+ args: [DOCUMENT]
126
+ }] }, { type: i0.ViewContainerRef }], propDecorators: { buiAwait: [{
127
+ type: Input
128
+ }], buiAwaitAriaLabel: [{
129
+ type: Input
130
+ }], buiAwaitDiameter: [{
131
+ type: Input
132
+ }] } });
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdhaXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvYmVoYXZpb3IvYXdhaXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBR04sU0FBUyxFQUdULE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUVSLE1BQU0sZUFBZSxDQUFDO0FBVXZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBdUIsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBRzdGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUlILE1BQU0sT0FBTyxjQUFjO0lBcUMxQixZQUNrQixLQUE4QixFQUMxQixPQUFrQixFQUNsQixXQUEwQixFQUMxQixXQUEwQixFQUMxQixJQUFrQixFQUNsQixVQUF3QixFQUN4QixRQUEwQixFQUMxQixjQUFnQyxFQUNsQixHQUFhLEVBQ3hDLFNBQTJCO1FBVGxCLFVBQUssR0FBTCxLQUFLLENBQXlCO1FBQzFCLFlBQU8sR0FBUCxPQUFPLENBQVc7UUFDbEIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFDMUIsU0FBSSxHQUFKLElBQUksQ0FBYztRQUNsQixlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQWtCO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUNsQixRQUFHLEdBQUgsR0FBRyxDQUFVO1FBQ3hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBaENwQyxxRkFBcUY7UUFFckYsc0JBQWlCLEdBQUcsYUFBYSxDQUFDO1FBRWxDLDBFQUEwRTtRQUUxRSxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFHZCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQXlCM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLElBQUks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QUFDLFVBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxlQUFnQixDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1lBQ25ELENBQUM7aUJBQU0sQ0FBQztnQkFDUCxJQUFJLENBQUMsZUFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFdBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxVQUFXLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNqQyxDQUFDO1FBQ0YsQ0FBQztJQUNGLENBQUM7OEdBM0dXLGNBQWMsdVdBOENqQixRQUFRO2tHQTlDTCxjQUFjOzsyRkFBZCxjQUFjO2tCQUgxQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxZQUFZO2lCQUN0Qjs7MEJBd0NFLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsUUFBUTt3RUFqQ2pCLFFBQVE7c0JBRFAsS0FBSztnQkFLTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04sZ0JBQWdCO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcblx0QWZ0ZXJWaWV3SW5pdCxcclxuXHRDb21wb25lbnRSZWYsXHJcblx0RGlyZWN0aXZlLFxyXG5cdERvQ2hlY2ssXHJcblx0RWxlbWVudFJlZixcclxuXHRJbmplY3QsXHJcblx0SW5wdXQsXHJcblx0T3B0aW9uYWwsXHJcblx0Vmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG5cdE1hdEJ1dHRvbixcclxuXHRNYXRGYWJBbmNob3IsXHJcblx0TWF0RmFiQnV0dG9uLFxyXG5cdE1hdEljb25BbmNob3IsXHJcblx0TWF0SWNvbkJ1dHRvbixcclxuXHRNYXRNaW5pRmFiQW5jaG9yLFxyXG5cdE1hdE1pbmlGYWJCdXR0b25cclxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXIsIFByb2dyZXNzU3Bpbm5lck1vZGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vKipcclxuICogVXNlIHRoaXMgZGlyZWN0aXZlIG9uIGEgYE1hdEJ1dHRvbmAgZWxlbWVudCB0byBwcm92aWRlIGFuIGFsdGVybmF0aXZlIHZpZXcgd2hlbiBhbiBhc3luYyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MuXHJcbiAqXHJcbiAqIEZvciBleGFtcGxlOlxyXG4gKlxyXG4gKiBgYGBcclxuICogPGJ1dHRvbiAoY2xpY2spPVwic3VibWl0KCk7XCIgW2J1aUF3YWl0XT1cInN1Ym1pdFN1YnNjcmlwdGlvblwiIGJ1aUF3YWl0QXJpYUxhYmVsPVwic3VibWl0dGluZ1wiPlN1Ym1pdDwvYnV0dG9uPlxyXG4gKiBgYGBcclxuICpcclxuICogUGxlYXNlIHJlZmVyIHRvIFtNYXRlcmlhbCBEZXNpZ25dKGh0dHBzOi8vbWF0ZXJpYWwuaW8vY29tcG9uZW50cy9wcm9ncmVzcy1pbmRpY2F0b3JzI2NpcmN1bGFyLXByb2dyZXNzLWluZGljYXRvcnMpXHJcbiAqIGZvciBtb3JlIGRldGFpbHMgb2YgaW50ZWdyYXRpbmcgY2lyY3VsYXIgc3Bpbm5lciBjb21wb25lbnQgd2l0aCBhY3Rpb24gYnV0dG9ucy5cclxuICpcclxuICogVGhlIG9wZXJhdGlvbiBpcyBjb25zaWRlcmVkICdpbiBwcm9ncmVzcycgd2hlbiB0aGUgYm91bmQgcHJvcGVydHkgYGJ1aUF3YWl0YCBldmFsdWF0ZXMgdG9cclxuICpcclxuICogLSBgdHJ1ZWA7IG9yXHJcbiAqIC0gYSBgbnVtYmVyYCB3aXRoaW4gMCAtIDEwMDsgb3JcclxuICogLSBhbiBpbnN0YW5jZSBvZiBgcnhqcy9TdWJzY3JpcHRpb25gIGFuZCBgYnVpQXdhaXQuY2xvc2VkYCBpcyBmYWxzeVxyXG4gKlxyXG4gKiBXaGVuIGluIHByb2dyZXNzXHJcbiAqXHJcbiAqIC0gdGhlIGJ1dHRvbidzIGNhcHRpb24gd2lsbCBiZSBoaWRkZW47XHJcbiAqIC0gYSBgPG1hdC1wcm9ncmVzcy1zcGlubmVyPmAgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gcGxhY2Ugb2YgdGhlIGNhcHRpb247XHJcbiAqIC0gdGhlIGJ1dHRvbiB3aWxsIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgdGhlIHByb3BlcnR5IGBkaXNhYmxlZGAgb2YgdGhlIGBNYXRCdXR0b25gIGluc3RhbmNlLlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcblx0c2VsZWN0b3I6ICdbYnVpQXdhaXRdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXdhaXREaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBEb0NoZWNrIHtcclxuXHQvKipcclxuXHQgKiBJbmRpY2F0ZXMgdGhlIGBpbiBwcm9ncmVzc2Agc3RhdHVzIG9mIGFuIGFzeW5jIG9wZXJhdGlvbi5cclxuXHQgKlxyXG5cdCAqIFRoZSBvcGVyYXRpb24gaXMgY29uc2lkZXJlZCAnaW4gcHJvZ3Jlc3MnIHdoZW4gdGhlIHByb3BlcnR5IGV2YWx1YXRlcyB0b1xyXG5cdCAqXHJcblx0ICogLSBgdHJ1ZWA7IG9yXHJcblx0ICogLSBhIGBudW1iZXJgIHdpdGhpbiAwIC0gMTAwOyBvclxyXG5cdCAqIC0gYW4gaW5zdGFuY2Ugb2YgYHJ4anMvU3Vic2NyaXB0aW9uYCBhbmQgYGJ1aUF3YWl0LmNsb3NlZGAgaXMgZmFsc3lcclxuXHQgKlxyXG5cdCAqIFdoZW4gaXQgaXMgYSBudW1iZXIsIGl0IHJlcHJlc2V0cyB0aGUgcHJvZ3Jlc3MgaW4gcGVyY2VudGFnZSB0ZXJtLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0YnVpQXdhaXQ6IG51bGwgfCB1bmRlZmluZWQgfCBib29sZWFuIHwgU3Vic2NyaXB0aW9uIHwgbnVtYmVyO1xyXG5cclxuXHQvKiogVGhlIEFSSUEgbGFiZWwgdG8gYmUgcHV0IG9uIHRoZSBzcGlubmVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgXCJJbiBwcm9ncmVzc1wiYC4gKi9cclxuXHRASW5wdXQoKVxyXG5cdGJ1aUF3YWl0QXJpYUxhYmVsID0gJ0luIHByb2dyZXNzJztcclxuXHJcblx0LyoqIFRoZSBkaWFtZXRlciBvZiB0aGUgaW4tcHJvZ3Jlc3Mgc3Bpbm5lci4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDIwYC4gKi9cclxuXHRASW5wdXQoKVxyXG5cdGJ1aUF3YWl0RGlhbWV0ZXIgPSAyMDtcclxuXHJcblx0cHJpdmF0ZSBfb3ZlcmxheUVsOiBIVE1MRGl2RWxlbWVudCB8IHVuZGVmaW5lZDtcclxuXHRwcml2YXRlIF9wcm9jZXNzaW5nID0gZmFsc2U7XHJcblx0cHJpdmF0ZSBfc3Bpbm5lclJlZjogQ29tcG9uZW50UmVmPE1hdFByb2dyZXNzU3Bpbm5lcj4gfCB1bmRlZmluZWQ7XHJcblx0cHJpdmF0ZSBfY2FwdGlvbldyYXBwZXI6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xyXG5cdHByaXZhdGUgYnV0dG9uOlxyXG5cdFx0fCBNYXRCdXR0b25cclxuXHRcdHwgTWF0SWNvbkJ1dHRvblxyXG5cdFx0fCBNYXRJY29uQW5jaG9yXHJcblx0XHR8IE1hdEZhYkJ1dHRvblxyXG5cdFx0fCBNYXRGYWJBbmNob3JcclxuXHRcdHwgTWF0TWluaUZhYkJ1dHRvblxyXG5cdFx0fCBNYXRNaW5pRmFiQW5jaG9yXHJcblx0XHR8IHVuZGVmaW5lZDtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHJlYWRvbmx5IF9lUmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuXHRcdEBPcHRpb25hbCgpIHJlYWRvbmx5IF9idXR0b246IE1hdEJ1dHRvbixcclxuXHRcdEBPcHRpb25hbCgpIHJlYWRvbmx5IF9pY29uQnV0dG9uOiBNYXRJY29uQnV0dG9uLFxyXG5cdFx0QE9wdGlvbmFsKCkgcmVhZG9ubHkgX2ljb25BbmNob3I6IE1hdEljb25BbmNob3IsXHJcblx0XHRAT3B0aW9uYWwoKSByZWFkb25seSBfZmFiOiBNYXRGYWJCdXR0b24sXHJcblx0XHRAT3B0aW9uYWwoKSByZWFkb25seSBfZmFiQW5jaG9yOiBNYXRGYWJBbmNob3IsXHJcblx0XHRAT3B0aW9uYWwoKSByZWFkb25seSBfbWluaUZhYjogTWF0TWluaUZhYkJ1dHRvbixcclxuXHRcdEBPcHRpb25hbCgpIHJlYWRvbmx5IF9taW5pRmFiQW5jaG9yOiBNYXRNaW5pRmFiQW5jaG9yLFxyXG5cdFx0QEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2M6IERvY3VtZW50LFxyXG5cdFx0cHJpdmF0ZSBfdmlld0NvbnQ6IFZpZXdDb250YWluZXJSZWZcclxuXHQpIHtcclxuXHRcdHRoaXMuYnV0dG9uID0gX2J1dHRvbiB8fCBfaWNvbkJ1dHRvbiB8fCBfaWNvbkFuY2hvciB8fCBfZmFiIHx8IF9mYWJBbmNob3IgfHwgX21pbmlGYWIgfHwgX21pbmlGYWJBbmNob3I7XHJcblx0XHRpZiAoIXRoaXMuYnV0dG9uKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1tidWlBd2FpdF0gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIE1hdGVyaWFsIGJ1dHRvbi4nKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqIEBpZ25vcmUgKi9cclxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5idXR0b24pIHtcclxuXHRcdFx0dGhpcy5fb3ZlcmxheUVsID0gdGhpcy5kb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcblx0XHRcdHRoaXMuX2VSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9vdmVybGF5RWwpO1xyXG5cdFx0XHR0aGlzLl9vdmVybGF5RWwuY2xhc3NMaXN0LmFkZCgnYnVpLWF3YWl0LW92ZXJsYXknKTtcclxuXHRcdFx0dGhpcy5fb3ZlcmxheUVsLnN0eWxlLmNzc1RleHQgPVxyXG5cdFx0XHRcdCdkaXNwbGF5OmZsZXg7IHBvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgcmlnaHQ6MDsgYm90dG9tOjA7IGxlZnQ6MDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXInO1xyXG5cdFx0XHR0aGlzLl9jYXB0aW9uV3JhcHBlciA9IHRoaXMuX2VSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubWRjLWJ1dHRvbl9fbGFiZWwsLm1hdC1pY29uJykgYXMgSFRNTEVsZW1lbnQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKiogQGlnbm9yZSAqL1xyXG5cdG5nRG9DaGVjaygpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGluUHJvZ3Jlc3MgPVxyXG5cdFx0XHR0aGlzLmJ1aUF3YWl0ID09PSB0cnVlIHx8ICh0eXBlb2YgdGhpcy5idWlBd2FpdCA9PT0gJ29iamVjdCcgJiYgIXRoaXMuYnVpQXdhaXQhLmNsb3NlZCkgfHwgdGhpcy5faXNEZXRlcm1pbmF0ZTtcclxuXHRcdGlmIChpblByb2dyZXNzICE9PSB0aGlzLl9wcm9jZXNzaW5nKSB7XHJcblx0XHRcdHRoaXMuX3Byb2Nlc3NpbmcgPSBpblByb2dyZXNzO1xyXG5cdFx0XHR0aGlzLl9zdGF0dXNDaGFuZ2VkKHRoaXMuX2lzRGV0ZXJtaW5hdGUgPyAnZGV0ZXJtaW5hdGUnIDogJ2luZGV0ZXJtaW5hdGUnKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLl9pc0RldGVybWluYXRlICYmIHRoaXMuX3NwaW5uZXJSZWYpIHtcclxuXHRcdFx0dGhpcy5fc3Bpbm5lclJlZi5zZXRJbnB1dCgndmFsdWUnLCB0aGlzLmJ1aUF3YWl0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKiBAaWdub3JlICovXHJcblx0cHJpdmF0ZSBnZXQgX2lzRGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdHlwZW9mIHRoaXMuYnVpQXdhaXQgPT09ICdudW1iZXInICYmIHRoaXMuYnVpQXdhaXQgPj0gMCAmJiB0aGlzLmJ1aUF3YWl0IDwgMTAwO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfc3RhdHVzQ2hhbmdlZChtb2RlOiBQcm9ncmVzc1NwaW5uZXJNb2RlKSB7XHJcblx0XHRpZiAodGhpcy5idXR0b24pIHtcclxuXHRcdFx0dGhpcy5idXR0b24uZGlzYWJsZWQgPSB0aGlzLl9wcm9jZXNzaW5nO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMuX3Byb2Nlc3NpbmcpIHtcclxuXHRcdFx0XHR0aGlzLl9zcGlubmVyUmVmID0gdGhpcy5fdmlld0NvbnQuY3JlYXRlQ29tcG9uZW50KE1hdFByb2dyZXNzU3Bpbm5lcik7XHJcblx0XHRcdFx0Y29uc3QgYyA9IHRoaXMuX3NwaW5uZXJSZWYuaW5zdGFuY2U7XHJcblx0XHRcdFx0Yy5kaWFtZXRlciA9IHRoaXMuYnVpQXdhaXREaWFtZXRlcjtcclxuXHRcdFx0XHRjLm1vZGUgPSBtb2RlO1xyXG5cdFx0XHRcdGMuY29sb3IgPSB0aGlzLmJ1dHRvbi5jb2xvcjtcclxuXHRcdFx0XHRjb25zdCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuX3NwaW5uZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcclxuXHRcdFx0XHRlLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRoaXMuYnVpQXdhaXRBcmlhTGFiZWwpO1xyXG5cdFx0XHRcdHRoaXMuX292ZXJsYXlFbCEuYXBwZW5kQ2hpbGQoZSk7XHJcblx0XHRcdFx0dGhpcy5fY2FwdGlvbldyYXBwZXIhLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLl9jYXB0aW9uV3JhcHBlciEuc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xyXG5cdFx0XHRcdHRoaXMuX3NwaW5uZXJSZWYhLmRlc3Ryb3koKTtcclxuXHRcdFx0XHR0aGlzLl9zcGlubmVyUmVmID0gdW5kZWZpbmVkO1xyXG5cdFx0XHRcdHRoaXMuX292ZXJsYXlFbCEuaW5uZXJIVE1MID0gJyc7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIl19
@@ -0,0 +1,37 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { SizingDirective } from './sizing.directive';
4
+ import { SizingMonitorDirective } from './sizing-monitor.directive';
5
+ import { AwaitDirective } from './await.directive';
6
+ import { MatButtonModule } from '@angular/material/button';
7
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
8
+ import { ObserveContentClassDirective } from './observe-content-class.directive';
9
+ import { ObserversModule } from '@angular/cdk/observers';
10
+ import * as i0 from "@angular/core";
11
+ /**
12
+ * For functionality that cannot be easily achieved via CSS.
13
+ */
14
+ export class BehaviorModule {
15
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: BehaviorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
16
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.2", ngImport: i0, type: BehaviorModule, declarations: [SizingDirective, SizingMonitorDirective, AwaitDirective, ObserveContentClassDirective], imports: [CommonModule, MatButtonModule, MatProgressSpinnerModule, ObserversModule], exports: [SizingDirective,
17
+ SizingMonitorDirective,
18
+ AwaitDirective,
19
+ MatProgressSpinnerModule,
20
+ ObserveContentClassDirective] }); }
21
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: BehaviorModule, imports: [CommonModule, MatButtonModule, MatProgressSpinnerModule, ObserversModule, MatProgressSpinnerModule] }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: BehaviorModule, decorators: [{
24
+ type: NgModule,
25
+ args: [{
26
+ declarations: [SizingDirective, SizingMonitorDirective, AwaitDirective, ObserveContentClassDirective],
27
+ imports: [CommonModule, MatButtonModule, MatProgressSpinnerModule, ObserversModule],
28
+ exports: [
29
+ SizingDirective,
30
+ SizingMonitorDirective,
31
+ AwaitDirective,
32
+ MatProgressSpinnerModule,
33
+ ObserveContentClassDirective
34
+ ]
35
+ }]
36
+ }] });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVoYXZpb3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvYmVoYXZpb3IvYmVoYXZpb3IubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFFekQ7O0dBRUc7QUFZSCxNQUFNLE9BQU8sY0FBYzs4R0FBZCxjQUFjOytHQUFkLGNBQWMsaUJBVlgsZUFBZSxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSw0QkFBNEIsYUFDMUYsWUFBWSxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxlQUFlLGFBRWpGLGVBQWU7WUFDZixzQkFBc0I7WUFDdEIsY0FBYztZQUNkLHdCQUF3QjtZQUN4Qiw0QkFBNEI7K0dBR2pCLGNBQWMsWUFUaEIsWUFBWSxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBS2pGLHdCQUF3Qjs7MkZBSWIsY0FBYztrQkFYMUIsUUFBUTttQkFBQztvQkFDVCxZQUFZLEVBQUUsQ0FBQyxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLDRCQUE0QixDQUFDO29CQUNyRyxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLGVBQWUsQ0FBQztvQkFDbkYsT0FBTyxFQUFFO3dCQUNSLGVBQWU7d0JBQ2Ysc0JBQXNCO3dCQUN0QixjQUFjO3dCQUNkLHdCQUF3Qjt3QkFDeEIsNEJBQTRCO3FCQUM1QjtpQkFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNpemluZ0RpcmVjdGl2ZSB9IGZyb20gJy4vc2l6aW5nLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNpemluZ01vbml0b3JEaXJlY3RpdmUgfSBmcm9tICcuL3NpemluZy1tb25pdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEF3YWl0RGlyZWN0aXZlIH0gZnJvbSAnLi9hd2FpdC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcclxuaW1wb3J0IHsgT2JzZXJ2ZUNvbnRlbnRDbGFzc0RpcmVjdGl2ZSB9IGZyb20gJy4vb2JzZXJ2ZS1jb250ZW50LWNsYXNzLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE9ic2VydmVyc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vYnNlcnZlcnMnO1xyXG5cclxuLyoqXHJcbiAqICBGb3IgZnVuY3Rpb25hbGl0eSB0aGF0IGNhbm5vdCBiZSBlYXNpbHkgYWNoaWV2ZWQgdmlhIENTUy5cclxuICovXHJcbkBOZ01vZHVsZSh7XHJcblx0ZGVjbGFyYXRpb25zOiBbU2l6aW5nRGlyZWN0aXZlLCBTaXppbmdNb25pdG9yRGlyZWN0aXZlLCBBd2FpdERpcmVjdGl2ZSwgT2JzZXJ2ZUNvbnRlbnRDbGFzc0RpcmVjdGl2ZV0sXHJcblx0aW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsIE9ic2VydmVyc01vZHVsZV0sXHJcblx0ZXhwb3J0czogW1xyXG5cdFx0U2l6aW5nRGlyZWN0aXZlLFxyXG5cdFx0U2l6aW5nTW9uaXRvckRpcmVjdGl2ZSxcclxuXHRcdEF3YWl0RGlyZWN0aXZlLFxyXG5cdFx0TWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxyXG5cdFx0T2JzZXJ2ZUNvbnRlbnRDbGFzc0RpcmVjdGl2ZVxyXG5cdF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEJlaGF2aW9yTW9kdWxlIHt9XHJcbiJdfQ==
@@ -0,0 +1,63 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/cdk/observers";
4
+ /**
5
+ * Use `[bui-class.not-empty]` to specify a style class activated only when the host element has DOM children;
6
+ *
7
+ * use `[bui-class.empty]` for a style class activated when it has no DOM children.
8
+ *
9
+ * Use `[bui-class.no-text]` to specify a style class activated only when the host element has text content;
10
+ *
11
+ * use `[bui-class.has-text]` for a style class activated when it has no text content.
12
+ */
13
+ export class ObserveContentClassDirective {
14
+ constructor(observer, elementRef) {
15
+ this.classToRemove = [];
16
+ this.element = elementRef.nativeElement;
17
+ this.subscription = observer.observe(elementRef).subscribe(() => this.checkClass());
18
+ }
19
+ ngOnInit() {
20
+ this.checkClass.bind(this);
21
+ }
22
+ ngOnDestroy() {
23
+ this.subscription.unsubscribe();
24
+ }
25
+ checkClass() {
26
+ this.element.classList.remove(...this.classToRemove);
27
+ this.classToRemove = [];
28
+ this.checkClassWith(this.classEmpty, this.classNotEmpty, () => this.element.childElementCount === 0 && !this.element.textContent?.trim());
29
+ this.checkClassWith(this.classNoText, this.classHasText, () => !this.element.textContent?.trim());
30
+ }
31
+ checkClassWith(withoutClass, withClass, isWithout) {
32
+ const without = isWithout();
33
+ this.addClass(without ? withoutClass : withClass);
34
+ }
35
+ addClass(cls) {
36
+ if (cls?.trim()) {
37
+ const classes = cls.trim().split(/\s+/);
38
+ this.element.classList.add(...classes);
39
+ this.classToRemove.push(...classes);
40
+ }
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ObserveContentClassDirective, deps: [{ token: i1.ContentObserver }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
43
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: ObserveContentClassDirective, selector: "[bui-class.empty],[bui-class.not-empty],[bui-class.no-text],[bui-class.has-text]", inputs: { classEmpty: ["bui-class.empty", "classEmpty"], classNotEmpty: ["bui-class.not-empty", "classNotEmpty"], classNoText: ["bui-class.no-text", "classNoText"], classHasText: ["bui-class.has-text", "classHasText"] }, ngImport: i0 }); }
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ObserveContentClassDirective, decorators: [{
46
+ type: Directive,
47
+ args: [{
48
+ selector: '[bui-class.empty],[bui-class.not-empty],[bui-class.no-text],[bui-class.has-text]'
49
+ }]
50
+ }], ctorParameters: () => [{ type: i1.ContentObserver }, { type: i0.ElementRef }], propDecorators: { classEmpty: [{
51
+ type: Input,
52
+ args: ['bui-class.empty']
53
+ }], classNotEmpty: [{
54
+ type: Input,
55
+ args: ['bui-class.not-empty']
56
+ }], classNoText: [{
57
+ type: Input,
58
+ args: ['bui-class.no-text']
59
+ }], classHasText: [{
60
+ type: Input,
61
+ args: ['bui-class.has-text']
62
+ }] } });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1jb250ZW50LWNsYXNzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL2JlaGF2aW9yL29ic2VydmUtY29udGVudC1jbGFzcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDOzs7QUFHaEY7Ozs7Ozs7O0dBUUc7QUFJSCxNQUFNLE9BQU8sNEJBQTRCO0lBaUJ4QyxZQUFZLFFBQXlCLEVBQUUsVUFBbUM7UUFkbEUsa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFlcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELFFBQVE7UUFDUCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVPLFVBQVU7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLENBQ2xCLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLGFBQWEsRUFDbEIsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FDL0UsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRU8sY0FBYyxDQUNyQixZQUF1QyxFQUN2QyxTQUFvQyxFQUNwQyxTQUF3QjtRQUV4QixNQUFNLE9BQU8sR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBRSxTQUFpQixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLFFBQVEsQ0FBQyxHQUFrQjtRQUNsQyxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0YsQ0FBQzs4R0F4RFcsNEJBQTRCO2tHQUE1Qiw0QkFBNEI7OzJGQUE1Qiw0QkFBNEI7a0JBSHhDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGtGQUFrRjtpQkFDNUY7NkdBT1EsVUFBVTtzQkFEakIsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBSWhCLGFBQWE7c0JBRHBCLEtBQUs7dUJBQUMscUJBQXFCO2dCQUlwQixXQUFXO3NCQURsQixLQUFLO3VCQUFDLG1CQUFtQjtnQkFJbEIsWUFBWTtzQkFEbkIsS0FBSzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250ZW50T2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb2JzZXJ2ZXJzJztcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vKipcclxuICogVXNlIGBbYnVpLWNsYXNzLm5vdC1lbXB0eV1gIHRvIHNwZWNpZnkgYSBzdHlsZSBjbGFzcyBhY3RpdmF0ZWQgb25seSB3aGVuIHRoZSBob3N0IGVsZW1lbnQgaGFzIERPTSBjaGlsZHJlbjtcclxuICpcclxuICogdXNlIGBbYnVpLWNsYXNzLmVtcHR5XWAgZm9yIGEgc3R5bGUgY2xhc3MgYWN0aXZhdGVkIHdoZW4gaXQgaGFzIG5vIERPTSBjaGlsZHJlbi5cclxuICpcclxuICogVXNlIGBbYnVpLWNsYXNzLm5vLXRleHRdYCB0byBzcGVjaWZ5IGEgc3R5bGUgY2xhc3MgYWN0aXZhdGVkIG9ubHkgd2hlbiB0aGUgaG9zdCBlbGVtZW50IGhhcyB0ZXh0IGNvbnRlbnQ7XHJcbiAqXHJcbiAqIHVzZSBgW2J1aS1jbGFzcy5oYXMtdGV4dF1gIGZvciBhIHN0eWxlIGNsYXNzIGFjdGl2YXRlZCB3aGVuIGl0IGhhcyBubyB0ZXh0IGNvbnRlbnQuXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuXHRzZWxlY3RvcjogJ1tidWktY2xhc3MuZW1wdHldLFtidWktY2xhc3Mubm90LWVtcHR5XSxbYnVpLWNsYXNzLm5vLXRleHRdLFtidWktY2xhc3MuaGFzLXRleHRdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZUNvbnRlbnRDbGFzc0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcclxuXHRwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcblx0cHJpdmF0ZSBjbGFzc1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHRASW5wdXQoJ2J1aS1jbGFzcy5lbXB0eScpXHJcblx0cHJpdmF0ZSBjbGFzc0VtcHR5Pzogc3RyaW5nO1xyXG5cclxuXHRASW5wdXQoJ2J1aS1jbGFzcy5ub3QtZW1wdHknKVxyXG5cdHByaXZhdGUgY2xhc3NOb3RFbXB0eT86IHN0cmluZztcclxuXHJcblx0QElucHV0KCdidWktY2xhc3Mubm8tdGV4dCcpXHJcblx0cHJpdmF0ZSBjbGFzc05vVGV4dD86IHN0cmluZztcclxuXHJcblx0QElucHV0KCdidWktY2xhc3MuaGFzLXRleHQnKVxyXG5cdHByaXZhdGUgY2xhc3NIYXNUZXh0Pzogc3RyaW5nO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihvYnNlcnZlcjogQ29udGVudE9ic2VydmVyLCBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xyXG5cdFx0dGhpcy5lbGVtZW50ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24gPSBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnRSZWYpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNoZWNrQ2xhc3MoKSk7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuY2hlY2tDbGFzcy5iaW5kKHRoaXMpO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjaGVja0NsYXNzKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4udGhpcy5jbGFzc1RvUmVtb3ZlKTtcclxuXHRcdHRoaXMuY2xhc3NUb1JlbW92ZSA9IFtdO1xyXG5cdFx0dGhpcy5jaGVja0NsYXNzV2l0aChcclxuXHRcdFx0dGhpcy5jbGFzc0VtcHR5LFxyXG5cdFx0XHR0aGlzLmNsYXNzTm90RW1wdHksXHJcblx0XHRcdCgpID0+IHRoaXMuZWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCA9PT0gMCAmJiAhdGhpcy5lbGVtZW50LnRleHRDb250ZW50Py50cmltKClcclxuXHRcdCk7XHJcblx0XHR0aGlzLmNoZWNrQ2xhc3NXaXRoKHRoaXMuY2xhc3NOb1RleHQsIHRoaXMuY2xhc3NIYXNUZXh0LCAoKSA9PiAhdGhpcy5lbGVtZW50LnRleHRDb250ZW50Py50cmltKCkpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjaGVja0NsYXNzV2l0aChcclxuXHRcdHdpdGhvdXRDbGFzczogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuXHRcdHdpdGhDbGFzczogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuXHRcdGlzV2l0aG91dDogKCkgPT4gYm9vbGVhblxyXG5cdCk6IHZvaWQge1xyXG5cdFx0Y29uc3Qgd2l0aG91dCA9IGlzV2l0aG91dCgpO1xyXG5cdFx0dGhpcy5hZGRDbGFzcyh3aXRob3V0ID8gd2l0aG91dENsYXNzIDogKHdpdGhDbGFzcyBhcyBhbnkpKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYWRkQ2xhc3MoY2xzOiBzdHJpbmcgfCBudWxsKSB7XHJcblx0XHRpZiAoY2xzPy50cmltKCkpIHtcclxuXHRcdFx0Y29uc3QgY2xhc3NlcyA9IGNscy50cmltKCkuc3BsaXQoL1xccysvKTtcclxuXHRcdFx0dGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoLi4uY2xhc3Nlcyk7XHJcblx0XHRcdHRoaXMuY2xhc3NUb1JlbW92ZS5wdXNoKC4uLmNsYXNzZXMpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iXX0=
@@ -3,4 +3,4 @@ export * from './sizing-monitor.directive';
3
3
  export * from './behavior.module';
4
4
  export * from './await.directive';
5
5
  export * from './observe-content-class.directive';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL2JlaGF2aW9yL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zaXppbmcuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc2l6aW5nLW1vbml0b3IuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vYmVoYXZpb3IubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vYXdhaXQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vb2JzZXJ2ZS1jb250ZW50LWNsYXNzLmRpcmVjdGl2ZSc7XG4iXX0=
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL2JlaGF2aW9yL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zaXppbmcuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9zaXppbmctbW9uaXRvci5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2JlaGF2aW9yLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYXdhaXQuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9vYnNlcnZlLWNvbnRlbnQtY2xhc3MuZGlyZWN0aXZlJztcclxuIl19
@@ -0,0 +1,31 @@
1
+ import { Directive } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Use this directive to designate a target HTML element, based on which the child elements'
5
+ * `[buiSizing]` directives will calculate the sizes.
6
+ *
7
+ * ```html
8
+ * <div [buiSizingMonitor]>
9
+ * <div [buiSizing]="...">
10
+ * </div>
11
+ * <div>
12
+ * <div [buiSizing]="...">
13
+ * </div>
14
+ * </div>
15
+ * <div>
16
+ * ```
17
+ */
18
+ export class SizingMonitorDirective {
19
+ constructor(element) {
20
+ this.element = element;
21
+ }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: SizingMonitorDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
23
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: SizingMonitorDirective, selector: "[buiSizingMonitor]", ngImport: i0 }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: SizingMonitorDirective, decorators: [{
26
+ type: Directive,
27
+ args: [{
28
+ selector: '[buiSizingMonitor]'
29
+ }]
30
+ }], ctorParameters: () => [{ type: i0.ElementRef }] });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l6aW5nLW1vbml0b3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvYmVoYXZpb3Ivc2l6aW5nLW1vbml0b3IuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxlQUFlLENBQUM7O0FBRXREOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBSUgsTUFBTSxPQUFPLHNCQUFzQjtJQUNsQyxZQUE0QixPQUFnQztRQUFoQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtJQUFHLENBQUM7OEdBRHBELHNCQUFzQjtrR0FBdEIsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQUhsQyxTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxvQkFBb0I7aUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKipcclxuICogVXNlIHRoaXMgZGlyZWN0aXZlIHRvIGRlc2lnbmF0ZSBhIHRhcmdldCBIVE1MIGVsZW1lbnQsIGJhc2VkIG9uIHdoaWNoIHRoZSBjaGlsZCBlbGVtZW50cydcclxuICogYFtidWlTaXppbmddYCBkaXJlY3RpdmVzIHdpbGwgY2FsY3VsYXRlIHRoZSBzaXplcy5cclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8ZGl2IFtidWlTaXppbmdNb25pdG9yXT5cclxuICogICAgPGRpdiBbYnVpU2l6aW5nXT1cIi4uLlwiPlxyXG4gKiAgICA8L2Rpdj5cclxuICogICAgPGRpdj5cclxuICogICAgICAgPGRpdiBbYnVpU2l6aW5nXT1cIi4uLlwiPlxyXG4gKiAgICAgICA8L2Rpdj5cclxuICogICAgPC9kaXY+XHJcbiAqIDxkaXY+XHJcbiAqIGBgYFxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcblx0c2VsZWN0b3I6ICdbYnVpU2l6aW5nTW9uaXRvcl0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaXppbmdNb25pdG9yRGlyZWN0aXZlIHtcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XHJcbn1cclxuIl19
@@ -0,0 +1,256 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { DOCUMENT } from '@angular/common';
3
+ import { Directive, EventEmitter, Inject, Input, Optional, Output } from '@angular/core';
4
+ import { debounceTime, take } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./sizing-monitor.directive";
7
+ /**
8
+ * This directive monitors the changes in the width of the `sizingBy` target, and apply specified style
9
+ * classes and/or inline styles to the current element dynamically.
10
+ *
11
+ * In order for the layout engine to efficiently calculate and stabilize the dimensions, the effective style property
12
+ * `box-sizing` of the `sizingBy` target element must be set to `border-box`.
13
+ *
14
+ * The directive uses [ResizeObserver API](https://developer.mozilla.org/en-US/docs/Web/API/Resize_Observer_API)
15
+ * to capture the events of element resizing. Please use a polyfill if you want to support older browsers
16
+ * that do not implement ResizeObserver API.
17
+ *
18
+ * Examples:
19
+ *
20
+ * ```html
21
+ * <div #parentElement>
22
+ * <div [buiSizing]="{'400': 'small', '800': 'medium', '~': 'large'}" [buiSizingBy]="parentElement"></div>
23
+ * <div [buiSizing]="['small', 'medium', 'large']" [buiSizingBy]="'root'"></div>
24
+ * <div [buiSizing]="{'650': 'border-color: #28569', '~': 'bg-muted; border-style: dotted'}" [buiSizingBy]="parentElement"></div>
25
+ * </div>
26
+ * ```
27
+ */
28
+ export class SizingDirective {
29
+ /**
30
+ * @ignore
31
+ */
32
+ static { this.defaultSizingBreakpoints = ['400', '800', '~']; }
33
+ /**
34
+ * Designate an element to be monitored for recalculating the style classes of the current element.
35
+ *
36
+ * - `root` specifies the document root or the enclosing shadow host. This is the default value.
37
+ * - `parent` specifies the parent element.
38
+ *
39
+ * @default 'root'
40
+ * @alias sizingBy
41
+ */
42
+ get buiSizingBy() {
43
+ return this.sizingBy;
44
+ }
45
+ set buiSizingBy(target) {
46
+ this.sizingBy = target;
47
+ }
48
+ constructor(_doc, _defaultTarget, elemRef, _zone) {
49
+ this._doc = _doc;
50
+ this._defaultTarget = _defaultTarget;
51
+ this._zone = _zone;
52
+ /**
53
+ * Specifies the breakpoint widths and the style classes.
54
+ *
55
+ * The sizing spec `{"400": "small", "800": "medium", "~": "large"}` tells the directive to apply
56
+ * a style class `small` when the width of the monitored target is smaller than 400 pixels,
57
+ * `medium` when the width is between 400 and 800 pixels, and `large` when above.
58
+ *
59
+ * @example {'400': 'small', '800': 'medium', '~': 'large'}
60
+ */
61
+ this.buiSizing = {};
62
+ /**
63
+ * The alias of `buiSizingBy`.
64
+ * @default 'root'
65
+ * @deprecated
66
+ * @ignore
67
+ */
68
+ this.sizingBy = 'root';
69
+ /**
70
+ * Emits `{width, height}` when the monitor target element resizes.
71
+ *
72
+ * Note that the dimensions emitted are of the [sizingBy] target, but not the current element.
73
+ */
74
+ this.buiResized = new EventEmitter();
75
+ /**
76
+ * Recalculate the height of this element according to the height of the monitored target.
77
+ */
78
+ this.buiFixedHeight = false;
79
+ this._sizingSpec = {};
80
+ this._width = 0;
81
+ this._height = 0;
82
+ this._reflowFrameCount = 0;
83
+ this._frameHandlerId = 0;
84
+ this._element = elemRef.nativeElement;
85
+ this._monitorTarget = this._element;
86
+ }
87
+ ngOnChanges(_) {
88
+ const disconnected = this._element.getRootNode() instanceof HTMLElement;
89
+ if (disconnected) {
90
+ // defer shadow detection till dom connection event
91
+ this._zone.onStable.pipe(debounceTime(10), take(1)).subscribe(() => this._initOrReset());
92
+ }
93
+ else {
94
+ this._initOrReset();
95
+ }
96
+ }
97
+ ngOnDestroy() {
98
+ this._tearDownNodeMonitor();
99
+ }
100
+ _initOrReset() {
101
+ const originalTarget = this._monitorTarget;
102
+ if (this.buiSizingBy instanceof HTMLElement) {
103
+ this._monitorTarget = this.buiSizingBy;
104
+ }
105
+ else if (this._defaultTarget) {
106
+ this._monitorTarget = this._defaultTarget.element.nativeElement;
107
+ }
108
+ else if (this.buiSizingBy === 'root') {
109
+ const root = this._element.getRootNode();
110
+ if (root instanceof ShadowRoot) {
111
+ this._monitorTarget = root.host;
112
+ }
113
+ else {
114
+ this._monitorTarget = this._doc.documentElement;
115
+ }
116
+ }
117
+ else {
118
+ this._monitorTarget = this._element.parentElement;
119
+ }
120
+ if (this._monitorTarget != originalTarget) {
121
+ this._setUpNodeMonitor();
122
+ }
123
+ this._sizingSpec = {};
124
+ let spec = this.buiSizing;
125
+ if (typeof spec === 'string') {
126
+ spec = spec.split(',').map(k => k.trim());
127
+ }
128
+ if (Array.isArray(spec)) {
129
+ spec.forEach((c, i) => {
130
+ this._sizingSpec[SizingDirective.defaultSizingBreakpoints[i] || '~'] = c;
131
+ });
132
+ }
133
+ else if (spec) {
134
+ this._sizingSpec = spec;
135
+ }
136
+ this.buiFixedHeight = coerceBooleanProperty(this.buiFixedHeight);
137
+ this._calculateSize();
138
+ }
139
+ _setUpNodeMonitor() {
140
+ this._tearDownNodeMonitor();
141
+ if (this._monitorTarget) {
142
+ this._observer = new ResizeObserver(() => this._runWithObserver(this._calculateSize.bind(this)));
143
+ this._observer.observe(this._monitorTarget, { box: 'border-box' });
144
+ }
145
+ }
146
+ _tearDownNodeMonitor() {
147
+ cancelAnimationFrame(this._frameHandlerId);
148
+ this._runWithObserver(() => {
149
+ this._observer.disconnect();
150
+ this._observer = undefined;
151
+ });
152
+ }
153
+ _runWithObserver(func) {
154
+ if (this._observer) {
155
+ return func();
156
+ }
157
+ return undefined;
158
+ }
159
+ _calculateSize() {
160
+ const widthChanged = this._width !== this._monitorTarget.clientWidth;
161
+ const heightChanged = this._height !== this._monitorTarget.clientHeight;
162
+ if (widthChanged) {
163
+ this._width = this._monitorTarget.clientWidth;
164
+ const bks = Object.keys(this._sizingSpec).sort((a, b) => this._toNumber(a) - this._toNumber(b));
165
+ let found = false;
166
+ for (const key of bks) {
167
+ const classesOrStyles = this._sizingSpec[key].split(/;+/).filter(c => c);
168
+ this._removeClassesOrStyles(classesOrStyles);
169
+ const expectedWidth = this._toNumber(key);
170
+ if (this._width <= expectedWidth && !found) {
171
+ this._applyClassesOrStyles(classesOrStyles);
172
+ found = true;
173
+ }
174
+ }
175
+ }
176
+ if (widthChanged || heightChanged) {
177
+ this._height = this._monitorTarget.clientHeight;
178
+ if (this.buiFixedHeight) {
179
+ this._reflowFrameCount = 0;
180
+ this._reflowHeight();
181
+ }
182
+ setTimeout(() => this._zone.run(() => this.buiResized.emit({ width: this._width, height: this._height })));
183
+ }
184
+ }
185
+ _applyClassesOrStyles(clsOrStyles) {
186
+ clsOrStyles.forEach(s => {
187
+ if (s.includes(':')) {
188
+ const [prop, val] = s.split(':');
189
+ this._element.style.setProperty(prop.trim(), val.trim());
190
+ }
191
+ else {
192
+ const classes = s.split(/\s+/).filter(c => c);
193
+ if (classes.length) {
194
+ this._element.classList.add(...classes);
195
+ }
196
+ }
197
+ });
198
+ }
199
+ _removeClassesOrStyles(clsOrStyles) {
200
+ clsOrStyles.forEach(s => {
201
+ if (s.includes(':')) {
202
+ const [prop] = s.split(':');
203
+ this._element.style.removeProperty(prop);
204
+ }
205
+ else {
206
+ const classes = s.split(/\s+/).filter(c => c);
207
+ if (classes.length) {
208
+ this._element.classList.remove(...classes);
209
+ }
210
+ }
211
+ });
212
+ }
213
+ _reflowHeight() {
214
+ const cnt = this._reflowFrameCount;
215
+ if (cnt < 15) {
216
+ cancelAnimationFrame(this._frameHandlerId);
217
+ this._frameHandlerId = requestAnimationFrame(this._reflowHeight.bind(this));
218
+ if (cnt === 0) {
219
+ this._element.style.height = '0';
220
+ }
221
+ else if (cnt === 14) {
222
+ const gt = parseInt(getComputedStyle(this._monitorTarget).getPropertyValue('padding-top').replace(/px$/, '') || '0', 10);
223
+ const gb = parseInt(getComputedStyle(this._monitorTarget).getPropertyValue('padding-bottom').replace(/px$/, '') || '0', 10);
224
+ this._element.style.height = `${this._height - gt - gb - 5}px`;
225
+ }
226
+ }
227
+ this._reflowFrameCount++;
228
+ }
229
+ _toNumber(s) {
230
+ return (s === '~' ? Infinity : Number(s)) || -Infinity;
231
+ }
232
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: SizingDirective, deps: [{ token: DOCUMENT }, { token: i1.SizingMonitorDirective, optional: true }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
233
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: SizingDirective, selector: "[buiSizing],[buiResized],[buiSizingBy],[buiFixedHeight]", inputs: { buiSizing: "buiSizing", sizingBy: "sizingBy", buiSizingBy: "buiSizingBy", buiFixedHeight: "buiFixedHeight" }, outputs: { buiResized: "buiResized" }, usesOnChanges: true, ngImport: i0 }); }
234
+ }
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: SizingDirective, decorators: [{
236
+ type: Directive,
237
+ args: [{
238
+ selector: '[buiSizing],[buiResized],[buiSizingBy],[buiFixedHeight]'
239
+ }]
240
+ }], ctorParameters: () => [{ type: Document, decorators: [{
241
+ type: Inject,
242
+ args: [DOCUMENT]
243
+ }] }, { type: i1.SizingMonitorDirective, decorators: [{
244
+ type: Optional
245
+ }] }, { type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { buiSizing: [{
246
+ type: Input
247
+ }], sizingBy: [{
248
+ type: Input
249
+ }], buiSizingBy: [{
250
+ type: Input
251
+ }], buiResized: [{
252
+ type: Output
253
+ }], buiFixedHeight: [{
254
+ type: Input
255
+ }] } });
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l6aW5nLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL2JlaGF2aW9yL3NpemluZy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTixTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFFTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFHcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBSUgsTUFBTSxPQUFPLGVBQWU7SUFDM0I7O09BRUc7YUFDSSw2QkFBd0IsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEFBQXRCLENBQXVCO0lBdUJ0RDs7Ozs7Ozs7T0FRRztJQUNILElBQ0ksV0FBVztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxXQUFXLENBQUMsTUFBdUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQXlCRCxZQUMyQixJQUFjLEVBQ3BCLGNBQXNDLEVBQzFELE9BQWdDLEVBQ3hCLEtBQWE7UUFISyxTQUFJLEdBQUosSUFBSSxDQUFVO1FBQ3BCLG1CQUFjLEdBQWQsY0FBYyxDQUF3QjtRQUVsRCxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBakV0Qjs7Ozs7Ozs7V0FRRztRQUVILGNBQVMsR0FBdUQsRUFBRSxDQUFDO1FBRW5FOzs7OztXQUtHO1FBRUgsYUFBUSxHQUFvQyxNQUFNLENBQUM7UUFtQm5EOzs7O1dBSUc7UUFFSCxlQUFVLEdB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Z0JBY04sVUFBVTtzQkFEVCxNQUFNO2dCQU9QLGNBQWM7c0JBRGIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuXHREaXJlY3RpdmUsXHJcblx0RWxlbWVudFJlZixcclxuXHRFdmVudEVtaXR0ZXIsXHJcblx0SW5qZWN0LFxyXG5cdElucHV0LFxyXG5cdE5nWm9uZSxcclxuXHRPbkNoYW5nZXMsXHJcblx0T25EZXN0cm95LFxyXG5cdE9wdGlvbmFsLFxyXG5cdE91dHB1dCxcclxuXHRTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU2l6aW5nTW9uaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4vc2l6aW5nLW1vbml0b3IuZGlyZWN0aXZlJztcclxuXHJcbi8qKlxyXG4gKiBUaGlzIGRpcmVjdGl2ZSBtb25pdG9ycyB0aGUgY2hhbmdlcyBpbiB0aGUgd2lkdGggb2YgdGhlIGBzaXppbmdCeWAgdGFyZ2V0LCBhbmQgYXBwbHkgc3BlY2lmaWVkIHN0eWxlXHJcbiAqICBjbGFzc2VzIGFuZC9vciBpbmxpbmUgc3R5bGVzIHRvIHRoZSBjdXJyZW50IGVsZW1lbnQgZHluYW1pY2FsbHkuXHJcbiAqXHJcbiAqIEluIG9yZGVyIGZvciB0aGUgbGF5b3V0IGVuZ2luZSB0byBlZmZpY2llbnRseSBjYWxjdWxhdGUgYW5kIHN0YWJpbGl6ZSB0aGUgZGltZW5zaW9ucywgdGhlIGVmZmVjdGl2ZSBzdHlsZSBwcm9wZXJ0eVxyXG4gKiBgYm94LXNpemluZ2Agb2YgdGhlIGBzaXppbmdCeWAgdGFyZ2V0IGVsZW1lbnQgbXVzdCBiZSBzZXQgdG8gYGJvcmRlci1ib3hgLlxyXG4gKlxyXG4gKiBUaGUgZGlyZWN0aXZlIHVzZXMgW1Jlc2l6ZU9ic2VydmVyIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Jlc2l6ZV9PYnNlcnZlcl9BUEkpXHJcbiAqIHRvIGNhcHR1cmUgdGhlIGV2ZW50cyBvZiBlbGVtZW50IHJlc2l6aW5nLiBQbGVhc2UgdXNlIGEgcG9seWZpbGwgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBvbGRlciBicm93c2Vyc1xyXG4gKiB0aGF0IGRvIG5vdCBpbXBsZW1lbnQgUmVzaXplT2JzZXJ2ZXIgQVBJLlxyXG4gKlxyXG4gKiBFeGFtcGxlczpcclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8ZGl2ICNwYXJlbnRFbGVtZW50PlxyXG4gKiAgIDxkaXYgW2J1aVNpemluZ109XCJ7JzQwMCc6ICdzbWFsbCcsICc4MDAnOiAnbWVkaXVtJywgJ34nOiAnbGFyZ2UnfVwiIFtidWlTaXppbmdCeV09XCJwYXJlbnRFbGVtZW50XCI+PC9kaXY+XHJcbiAqICAgPGRpdiBbYnVpU2l6aW5nXT1cIlsnc21hbGwnLCAnbWVkaXVtJywgJ2xhcmdlJ11cIiBbYnVpU2l6aW5nQnldPVwiJ3Jvb3QnXCI+PC9kaXY+XHJcbiAqICAgPGRpdiBbYnVpU2l6aW5nXT1cInsnNjUwJzogJ2JvcmRlci1jb2xvcjogIzI4NTY5JywgJ34nOiAnYmctbXV0ZWQ7IGJvcmRlci1zdHlsZTogZG90dGVkJ31cIiBbYnVpU2l6aW5nQnldPVwicGFyZW50RWxlbWVudFwiPjwvZGl2PlxyXG4gKiA8L2Rpdj5cclxuICogYGBgXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuXHRzZWxlY3RvcjogJ1tidWlTaXppbmddLFtidWlSZXNpemVkXSxbYnVpU2l6aW5nQnldLFtidWlGaXhlZEhlaWdodF0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaXppbmdEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblx0LyoqXHJcblx0ICogQGlnbm9yZVxyXG5cdCAqL1xyXG5cdHN0YXRpYyBkZWZhdWx0U2l6aW5nQnJlYWtwb2ludHMgPSBbJzQwMCcsICc4MDAnLCAnfiddO1xyXG5cclxuXHQvKipcclxuXHQgKiBTcGVjaWZpZXMgdGhlIGJyZWFrcG9pbnQgd2lkdGhzIGFuZCB0aGUgc3R5bGUgY2xhc3Nlcy5cclxuXHQgKlxyXG5cdCAqIFRoZSBzaXppbmcgc3BlYyBge1wiNDAwXCI6IFwic21hbGxcIiwgXCI4MDBcIjogXCJtZWRpdW1cIiwgXCJ+XCI6IFwibGFyZ2VcIn1gIHRlbGxzIHRoZSBkaXJlY3RpdmUgdG8gYXBwbHlcclxuXHQgKiBhIHN0eWxlIGNsYXNzIGBzbWFsbGAgd2hlbiB0aGUgd2lkdGggb2YgdGhlIG1vbml0b3JlZCB0YXJnZXQgaXMgc21hbGxlciB0aGFuIDQwMCBwaXhlbHMsXHJcblx0ICogYG1lZGl1bWAgd2hlbiB0aGUgd2lkdGggaXMgYmV0d2VlbiA0MDAgYW5kIDgwMCBwaXhlbHMsIGFuZCBgbGFyZ2VgIHdoZW4gYWJvdmUuXHJcblx0ICpcclxuXHQgKiBAZXhhbXBsZSB7JzQwMCc6ICdzbWFsbCcsICc4MDAnOiAnbWVkaXVtJywgJ34nOiAnbGFyZ2UnfVxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0YnVpU2l6aW5nOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IHwgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgYWxpYXMgb2YgYGJ1aVNpemluZ0J5YC5cclxuXHQgKiBAZGVmYXVsdCAncm9vdCdcclxuXHQgKiBAZGVwcmVjYXRlZFxyXG5cdCAqIEBpZ25vcmVcclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHNpemluZ0J5OiAncm9vdCcgfCAncGFyZW50JyB8IEhUTUxFbGVtZW50ID0gJ3Jvb3QnO1xyXG5cclxuXHQvKipcclxuXHQgKiBEZXNpZ25hdGUgYW4gZWxlbWVudCB0byBiZSBtb25pdG9yZWQgZm9yIHJlY2FsY3VsYXRpbmcgdGhlIHN0eWxlIGNsYXNzZXMgb2YgdGhlIGN1cnJlbnQgZWxlbWVudC5cclxuXHQgKlxyXG5cdCAqIC0gYHJvb3RgIHNwZWNpZmllcyB0aGUgZG9jdW1lbnQgcm9vdCBvciB0aGUgZW5jbG9zaW5nIHNoYWRvdyBob3N0LiBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlLlxyXG5cdCAqIC0gYHBhcmVudGAgc3BlY2lmaWVzIHRoZSBwYXJlbnQgZWxlbWVudC5cclxuXHQgKlxyXG5cdCAqIEBkZWZhdWx0ICdyb290J1xyXG5cdCAqIEBhbGlhcyBzaXppbmdCeVxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0Z2V0IGJ1aVNpemluZ0J5KCk6ICdyb290JyB8ICdwYXJlbnQnIHwgSFRNTEVsZW1lbnQge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2l6aW5nQnk7XHJcblx0fVxyXG5cdHNldCBidWlTaXppbmdCeSh0YXJnZXQ6ICdyb290JyB8ICdwYXJlbnQnIHwgSFRNTEVsZW1lbnQpIHtcclxuXHRcdHRoaXMuc2l6aW5nQnkgPSB0YXJnZXQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBFbWl0cyBge3dpZHRoLCBoZWlnaHR9YCB3aGVuIHRoZSBtb25pdG9yIHRhcmdldCBlbGVtZW50IHJlc2l6ZXMuXHJcblx0ICpcclxuXHQgKiBOb3RlIHRoYXQgdGhlIGRpbWVuc2lvbnMgZW1pdHRlZCBhcmUgb2YgdGhlIFtzaXppbmdCeV0gdGFyZ2V0LCBidXQgbm90IHRoZSBjdXJyZW50IGVsZW1lbnQuXHJcblx0ICovXHJcblx0QE91dHB1dCgpXHJcblx0YnVpUmVzaXplZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9PigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBSZWNhbGN1bGF0ZSB0aGUgaGVpZ2h0IG9mIHRoaXMgZWxlbWVudCBhY2NvcmRpbmcgdG8gdGhlIGhlaWdodCBvZiB0aGUgbW9uaXRvcmVkIHRhcmdldC5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdGJ1aUZpeGVkSGVpZ2h0ID0gZmFsc2U7XHJcblxyXG5cdHByaXZhdGUgX21vbml0b3JUYXJnZXQ6IEhUTUxFbGVtZW50O1xyXG5cdHByaXZhdGUgX29ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IHVuZGVmaW5lZDtcclxuXHRwcml2YXRlIF9zaXppbmdTcGVjOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcblx0cHJpdmF0ZSBfd2lkdGggPSAwO1xyXG5cdHByaXZhdGUgX2hlaWdodCA9IDA7XHJcblx0cHJpdmF0ZSBfcmVmbG93RnJhbWVDb3VudCA9IDA7XHJcblx0cHJpdmF0ZSBfZWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcblx0cHJpdmF0ZSBfZnJhbWVIYW5kbGVySWQgPSAwO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvYzogRG9jdW1lbnQsXHJcblx0XHRAT3B0aW9uYWwoKSBwcml2YXRlIF9kZWZhdWx0VGFyZ2V0OiBTaXppbmdNb25pdG9yRGlyZWN0aXZlLFxyXG5cdFx0ZWxlbVJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcblx0XHRwcml2YXRlIF96b25lOiBOZ1pvbmVcclxuXHQpIHtcclxuXHRcdHRoaXMuX2VsZW1lbnQgPSBlbGVtUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcblx0XHR0aGlzLl9tb25pdG9yVGFyZ2V0ID0gdGhpcy5fZWxlbWVudDtcclxuXHR9XHJcblxyXG5cdG5nT25DaGFuZ2VzKF86IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGRpc2Nvbm5lY3RlZCA9IHRoaXMuX2VsZW1lbnQuZ2V0Um9vdE5vZGUoKSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xyXG5cdFx0aWYgKGRpc2Nvbm5lY3RlZCkge1xyXG5cdFx0XHQvLyBkZWZlciBzaGFkb3cgZGV0ZWN0aW9uIHRpbGwgZG9tIGNvbm5lY3Rpb24gZXZlbnRcclxuXHRcdFx0dGhpcy5fem9uZS5vblN0YWJsZS5waXBlKGRlYm91bmNlVGltZSgxMCksIHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9pbml0T3JSZXNldCgpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuX2luaXRPclJlc2V0KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuX3RlYXJEb3duTm9kZU1vbml0b3IoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgX2luaXRPclJlc2V0KCkge1xyXG5cdFx0Y29uc3Qgb3JpZ2luYWxUYXJnZXQgPSB0aGlzLl9tb25pdG9yVGFyZ2V0O1xyXG5cdFx0aWYgKHRoaXMuYnVpU2l6aW5nQnkgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xyXG5cdFx0XHR0aGlzLl9tb25pdG9yVGFyZ2V0ID0gdGhpcy5idWlTaXppbmdCeTtcclxuXHRcdH0gZWxzZSBpZiAodGhpcy5fZGVmYXVsdFRhcmdldCkge1xyXG5cdFx0XHR0aGlzLl9tb25pdG9yVGFyZ2V0ID0gdGhpcy5fZGVmYXVsdFRhcmdldC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcblx0XHR9IGVsc2UgaWYgKHRoaXMuYnVpU2l6aW5nQnkgPT09ICdyb290Jykge1xyXG5cdFx0XHRjb25zdCByb290ID0gdGhpcy5fZWxlbWVudC5nZXRSb290Tm9kZSgpO1xyXG5cdFx0XHRpZiAocm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcclxuXHRcdFx0XHR0aGlzLl9tb25pdG9yVGFyZ2V0ID0gcm9vdC5ob3N0IGFzIEhUTUxFbGVtZW50O1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuX21vbml0b3JUYXJnZXQgPSB0aGlzLl9kb2MuZG9jdW1lbnRFbGVtZW50O1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLl9tb25pdG9yVGFyZ2V0ID0gdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50IGFzIGFueTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5fbW9uaXRvclRhcmdldCAhPSBvcmlnaW5hbFRhcmdldCkge1xyXG5cdFx0XHR0aGlzLl9zZXRVcE5vZGVNb25pdG9yKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5fc2l6aW5nU3BlYyA9IHt9O1xyXG5cdFx0bGV0IHNwZWMgPSB0aGlzLmJ1aVNpemluZztcclxuXHRcdGlmICh0eXBlb2Ygc3BlYyA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0c3BlYyA9IHNwZWMuc3BsaXQoJywnKS5tYXAoayA9PiBrLnRyaW0oKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoc3BlYykpIHtcclxuXHRcdFx0c3BlYy5mb3JFYWNoKChjLCBpKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5fc2l6aW5nU3BlY1tTaXppbmdEaXJlY3RpdmUuZGVmYXVsdFNpemluZ0JyZWFrcG9pbnRzW2ldIHx8ICd+J10gPSBjO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0gZWxzZSBpZiAoc3BlYykge1xyXG5cdFx0XHR0aGlzLl9zaXppbmdTcGVjID0gc3BlYztcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmJ1aUZpeGVkSGVpZ2h0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHRoaXMuYnVpRml4ZWRIZWlnaHQpO1xyXG5cclxuXHRcdHRoaXMuX2NhbGN1bGF0ZVNpemUoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgX3NldFVwTm9kZU1vbml0b3IoKSB7XHJcblx0XHR0aGlzLl90ZWFyRG93bk5vZGVNb25pdG9yKCk7XHJcblx0XHRpZiAodGhpcy5fbW9uaXRvclRhcmdldCkge1xyXG5cdFx0XHR0aGlzLl9vYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB0aGlzLl9ydW5XaXRoT2JzZXJ2ZXIodGhpcy5fY2FsY3VsYXRlU2l6ZS5iaW5kKHRoaXMpKSk7XHJcblxyXG5cdFx0XHR0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHRoaXMuX21vbml0b3JUYXJnZXQsIHsgYm94OiAnYm9yZGVyLWJveCcgfSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIF90ZWFyRG93bk5vZGVNb25pdG9yKCkge1xyXG5cdFx0Y2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fZnJhbWVIYW5kbGVySWQpO1xyXG5cdFx0dGhpcy5fcnVuV2l0aE9ic2VydmVyKCgpID0+IHtcclxuXHRcdFx0dGhpcy5fb2JzZXJ2ZXIhLmRpc2Nvbm5lY3QoKTtcclxuXHRcdFx0dGhpcy5fb2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgX3J1bldpdGhPYnNlcnZlcjxUPihmdW5jOiAoKSA9PiBUKTogVCB8IHVuZGVmaW5lZCB7XHJcblx0XHRpZiAodGhpcy5fb2JzZXJ2ZXIpIHtcclxuXHRcdFx0cmV0dXJuIGZ1bmMoKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIF9jYWxjdWxhdGVTaXplKCkge1xyXG5cdFx0Y29uc3Qgd2lkdGhDaGFuZ2VkID0gdGhpcy5fd2lkdGggIT09IHRoaXMuX21vbml0b3JUYXJnZXQuY2xpZW50V2lkdGg7XHJcblx0XHRjb25zdCBoZWlnaHRDaGFuZ2VkID0gdGhpcy5faGVpZ2h0ICE9PSB0aGlzLl9tb25pdG9yVGFyZ2V0LmNsaWVudEhlaWdodDtcclxuXHRcdGlmICh3aWR0aENoYW5nZWQpIHtcclxuXHRcdFx0dGhpcy5fd2lkdGggPSB0aGlzLl9tb25pdG9yVGFyZ2V0LmNsaWVudFdpZHRoO1xyXG5cclxuXHRcdFx0Y29uc3QgYmtzID0gT2JqZWN0LmtleXModGhpcy5fc2l6aW5nU3BlYykuc29ydCgoYSwgYikgPT4gdGhpcy5fdG9OdW1iZXIoYSkgLSB0aGlzLl90b051bWJlcihiKSk7XHJcblx0XHRcdGxldCBmb3VuZCA9IGZhbHNlO1xyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBia3MpIHtcclxuXHRcdFx0XHRjb25zdCBjbGFzc2VzT3JTdHlsZXMgPSB0aGlzLl9zaXppbmdTcGVjW2tleV0uc3BsaXQoLzsrLykuZmlsdGVyKGMgPT4gYyk7XHJcblx0XHRcdFx0dGhpcy5fcmVtb3ZlQ2xhc3Nlc09yU3R5bGVzKGNsYXNzZXNPclN0eWxlcyk7XHJcblx0XHRcdFx0Y29uc3QgZXhwZWN0ZWRXaWR0aCA9IHRoaXMuX3RvTnVtYmVyKGtleSk7XHJcblx0XHRcdFx0aWYgKHRoaXMuX3dpZHRoIDw9IGV4cGVjdGVkV2lkdGggJiYgIWZvdW5kKSB7XHJcblx0XHRcdFx0XHR0aGlzLl9hcHBseUNsYXNzZXNPclN0eWxlcyhjbGFzc2VzT3JTdHlsZXMpO1xyXG5cdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh3aWR0aENoYW5nZWQgfHwgaGVpZ2h0Q2hhbmdlZCkge1xyXG5cdFx0XHR0aGlzLl9oZWlnaHQgPSB0aGlzLl9tb25pdG9yVGFyZ2V0LmNsaWVudEhlaWdodDtcclxuXHRcdFx0aWYgKHRoaXMuYnVpRml4ZWRIZWlnaHQpIHtcclxuXHRcdFx0XHR0aGlzLl9yZWZsb3dGcmFtZUNvdW50ID0gMDtcclxuXHRcdFx0XHR0aGlzLl9yZWZsb3dIZWlnaHQoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3pvbmUucnVuKCgpID0+IHRoaXMuYnVpUmVzaXplZC5lbWl0KHsgd2lkdGg6IHRoaXMuX3dpZHRoLCBoZWlnaHQ6IHRoaXMuX2hlaWdodCB9KSkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfYXBwbHlDbGFzc2VzT3JTdHlsZXMoY2xzT3JTdHlsZXM6IHN0cmluZ1tdKSB7XHJcblx0XHRjbHNPclN0eWxlcy5mb3JFYWNoKHMgPT4ge1xyXG5cdFx0XHRpZiAocy5pbmNsdWRlcygnOicpKSB7XHJcblx0XHRcdFx0Y29uc3QgW3Byb3AsIHZhbF0gPSBzLnNwbGl0KCc6Jyk7XHJcblx0XHRcdFx0dGhpcy5fZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wLnRyaW0oKSwgdmFsLnRyaW0oKSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29uc3QgY2xhc3NlcyA9IHMuc3BsaXQoL1xccysvKS5maWx0ZXIoYyA9PiBjKTtcclxuXHRcdFx0XHRpZiAoY2xhc3Nlcy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5jbGFzc2VzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfcmVtb3ZlQ2xhc3Nlc09yU3R5bGVzKGNsc09yU3R5bGVzOiBzdHJpbmdbXSkge1xyXG5cdFx0Y2xzT3JTdHlsZXMuZm9yRWFjaChzID0+IHtcclxuXHRcdFx0aWYgKHMuaW5jbHVkZXMoJzonKSkge1xyXG5cdFx0XHRcdGNvbnN0IFtwcm9wXSA9IHMuc3BsaXQoJzonKTtcclxuXHRcdFx0XHR0aGlzLl9lbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHByb3ApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnN0IGNsYXNzZXMgPSBzLnNwbGl0KC9cXHMrLykuZmlsdGVyKGMgPT4gYyk7XHJcblx0XHRcdFx0aWYgKGNsYXNzZXMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHR0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4uY2xhc3Nlcyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgX3JlZmxvd0hlaWdodCgpIHtcclxuXHRcdGNvbnN0IGNudCA9IHRoaXMuX3JlZmxvd0ZyYW1lQ291bnQ7XHJcblx0XHRpZiAoY250IDwgMTUpIHtcclxuXHRcdFx0Y2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fZnJhbWVIYW5kbGVySWQpO1xyXG5cdFx0XHR0aGlzLl9mcmFtZUhhbmRsZXJJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9yZWZsb3dIZWlnaHQuYmluZCh0aGlzKSk7XHJcblxyXG5cdFx0XHRpZiAoY250ID09PSAwKSB7XHJcblx0XHRcdFx0dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMCc7XHJcblx0XHRcdH0gZWxzZSBpZiAoY250ID09PSAxNCkge1xyXG5cdFx0XHRcdGNvbnN0IGd0ID0gcGFyc2VJbnQoXHJcblx0XHRcdFx0XHRnZXRDb21wdXRlZFN0eWxlKHRoaXMuX21vbml0b3JUYXJnZXQpLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctdG9wJykucmVwbGFjZSgvcHgkLywgJycpIHx8ICcwJyxcclxuXHRcdFx0XHRcdDEwXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRjb25zdCBnYiA9IHBhcnNlSW50KFxyXG5cdFx0XHRcdFx0Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9tb25pdG9yVGFyZ2V0KS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWJvdHRvbScpLnJlcGxhY2UoL3B4JC8sICcnKSB8fCAnMCcsXHJcblx0XHRcdFx0XHQxMFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLl9oZWlnaHQgLSBndCAtIGdiIC0gNX1weGA7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHRoaXMuX3JlZmxvd0ZyYW1lQ291bnQrKztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgX3RvTnVtYmVyKHM6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIChzID09PSAnficgPyBJbmZpbml0eSA6IE51bWJlcihzKSkgfHwgLUluZmluaXR5O1xyXG5cdH1cclxufVxyXG4iXX0=