slick-components 4.4.13 → 4.4.16

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 (346) hide show
  1. package/css/slick-components.css +598 -365
  2. package/css/slick-components.min.css +1 -1
  3. package/esm2020/public-api.mjs +43 -0
  4. package/esm2020/slick-accordion/slick-accordion-item-header.component.mjs +14 -0
  5. package/esm2020/slick-accordion/slick-accordion-item.component.mjs +86 -0
  6. package/esm2020/slick-accordion/slick-accordion.component.mjs +75 -0
  7. package/esm2020/slick-accordion/slick-accordion.module.mjs +23 -0
  8. package/esm2020/slick-auto-complete/slick-auto-complete-list-item-template.directive.mjs +22 -0
  9. package/esm2020/slick-auto-complete/slick-auto-complete.component.mjs +375 -0
  10. package/esm2020/slick-auto-complete/slick-auto-complete.module.mjs +24 -0
  11. package/esm2020/slick-button-spinner/slick-button-spinner.component.mjs +175 -0
  12. package/esm2020/slick-button-spinner/slick-button-spinner.module.mjs +19 -0
  13. package/esm2020/slick-calendar/slick-calendar.component.mjs +246 -0
  14. package/esm2020/slick-calendar/slick-calendar.module.mjs +19 -0
  15. package/esm2020/slick-card/slick-card-header.component.mjs +14 -0
  16. package/esm2020/slick-card/slick-card.component.mjs +42 -0
  17. package/esm2020/slick-card/slick-card.module.mjs +20 -0
  18. package/esm2020/slick-components.mjs +5 -0
  19. package/esm2020/slick-confirm-dialog/slick-confirm-dialog.component.mjs +65 -0
  20. package/esm2020/slick-confirm-dialog/slick-confirm-dialog.module.mjs +20 -0
  21. package/esm2020/slick-container/slick-container-body.component.mjs +24 -0
  22. package/esm2020/slick-container/slick-container-footer.component.mjs +20 -0
  23. package/esm2020/slick-container/slick-container-header.component.mjs +20 -0
  24. package/esm2020/slick-container/slick-container.component.mjs +21 -0
  25. package/esm2020/slick-container/slick-container.module.mjs +25 -0
  26. package/esm2020/slick-context-menu/slick-context-menu-item.component.mjs +14 -0
  27. package/esm2020/slick-context-menu/slick-context-menu.component.mjs +48 -0
  28. package/esm2020/slick-context-menu/slick-context-menu.module.mjs +20 -0
  29. package/{esm2015/slick-currency-mask/slick-currency-mask-options.model.js → esm2020/slick-currency-mask/slick-currency-mask-options.model.mjs} +0 -0
  30. package/esm2020/slick-currency-mask/slick-currency-mask.directive.mjs +233 -0
  31. package/esm2020/slick-currency-mask/slick-currency-mask.module.mjs +19 -0
  32. package/esm2020/slick-date-picker/slick-date-picker.component.mjs +278 -0
  33. package/esm2020/slick-date-picker/slick-date-picker.module.mjs +21 -0
  34. package/esm2020/slick-dialog/slick-dialog-footer.component.mjs +24 -0
  35. package/esm2020/slick-dialog/slick-dialog.component.mjs +294 -0
  36. package/esm2020/slick-dialog/slick-dialog.module.mjs +23 -0
  37. package/esm2020/slick-dialog/slick-dialog.service.mjs +68 -0
  38. package/esm2020/slick-drag-drop/slick-drag-drop.directive.mjs +13 -0
  39. package/esm2020/slick-drag-drop/slick-drag-drop.module.mjs +21 -0
  40. package/esm2020/slick-drag-drop/slick-draggable.directive.mjs +13 -0
  41. package/{esm2015/slick-drop-down/slick-drop-down-button.model.js → esm2020/slick-drop-down/slick-drop-down-button.model.mjs} +0 -0
  42. package/esm2020/slick-drop-down/slick-drop-down.component.mjs +479 -0
  43. package/esm2020/slick-drop-down/slick-drop-down.module.mjs +24 -0
  44. package/esm2020/slick-drop-down/slick-drop-down.service.mjs +55 -0
  45. package/esm2020/slick-drop-list/slick-drop-list-grab.directive.mjs +18 -0
  46. package/esm2020/slick-drop-list/slick-drop-list-item.directive.mjs +18 -0
  47. package/esm2020/slick-drop-list/slick-drop-list.directive.mjs +215 -0
  48. package/esm2020/slick-drop-list/slick-drop-list.module.mjs +23 -0
  49. package/esm2020/slick-email-viewer/slick-email-viewer-dialog.component.mjs +81 -0
  50. package/esm2020/slick-email-viewer/slick-email-viewer.component.mjs +42 -0
  51. package/esm2020/slick-email-viewer/slick-email-viewer.module.mjs +26 -0
  52. package/{esm2015/slick-emailer/slick-emailer-address.model.js → esm2020/slick-emailer/slick-emailer-address.model.mjs} +0 -0
  53. package/esm2020/slick-emailer/slick-emailer-dialog.component.mjs +153 -0
  54. package/esm2020/slick-emailer/slick-emailer.component.mjs +235 -0
  55. package/{esm2015/slick-emailer/slick-emailer.model.js → esm2020/slick-emailer/slick-emailer.model.mjs} +0 -0
  56. package/esm2020/slick-emailer/slick-emailer.module.mjs +29 -0
  57. package/esm2020/slick-file-drop/slick-file-drop.component.mjs +156 -0
  58. package/esm2020/slick-file-drop/slick-file-drop.module.mjs +20 -0
  59. package/esm2020/slick-file-list/slick-file-list-item.component.mjs +173 -0
  60. package/esm2020/slick-file-list/slick-file-list.component.mjs +130 -0
  61. package/esm2020/slick-file-list/slick-file-list.module.mjs +23 -0
  62. package/{esm2015/slick-file-model/slick-file.model.js → esm2020/slick-file-model/slick-file.model.mjs} +0 -0
  63. package/esm2020/slick-google-address-search/slick-google-address-search.directive.mjs +75 -0
  64. package/esm2020/slick-google-address-search/slick-google-address-search.module.mjs +19 -0
  65. package/esm2020/slick-google-map/slick-google-map-dialog.component.mjs +50 -0
  66. package/esm2020/slick-google-map/slick-google-map.component.mjs +48 -0
  67. package/esm2020/slick-google-map/slick-google-map.module.mjs +22 -0
  68. package/esm2020/slick-grid/slick-grid-column-template.directive.mjs +19 -0
  69. package/{esm2015/slick-grid/slick-grid-column.model.js → esm2020/slick-grid/slick-grid-column.model.mjs} +0 -0
  70. package/{esm2015/slick-grid/slick-grid-favorite.model.js → esm2020/slick-grid/slick-grid-favorite.model.mjs} +0 -0
  71. package/{esm2015/slick-grid/slick-grid-request.model.js → esm2020/slick-grid/slick-grid-request.model.mjs} +0 -0
  72. package/{esm2015/slick-grid/slick-grid-response.model.js → esm2020/slick-grid/slick-grid-response.model.mjs} +0 -0
  73. package/esm2020/slick-grid/slick-grid-sanitize.pipe.mjs +20 -0
  74. package/esm2020/slick-grid/slick-grid.component.mjs +793 -0
  75. package/esm2020/slick-grid/slick-grid.module.mjs +43 -0
  76. package/{esm2015/slick-grid/slick-grid.options.js → esm2020/slick-grid/slick-grid.options.mjs} +0 -0
  77. package/esm2020/slick-grid/slick-grid.service.mjs +66 -0
  78. package/esm2020/slick-multi-select/slick-multi-select.component.mjs +362 -0
  79. package/esm2020/slick-multi-select/slick-multi-select.module.mjs +20 -0
  80. package/esm2020/slick-multi-select/slick-multi-select.service.mjs +77 -0
  81. package/esm2020/slick-ordered-list/slick-ordered-list.component.mjs +200 -0
  82. package/esm2020/slick-ordered-list/slick-ordered-list.module.mjs +20 -0
  83. package/esm2020/slick-paging/slick-paging.component.mjs +185 -0
  84. package/esm2020/slick-paging/slick-paging.module.mjs +19 -0
  85. package/esm2020/slick-photo-gallery/slick-photo-gallery.component.mjs +98 -0
  86. package/{esm2015/slick-photo-gallery/slick-photo-gallery.model.js → esm2020/slick-photo-gallery/slick-photo-gallery.model.mjs} +0 -0
  87. package/esm2020/slick-photo-gallery/slick-photo-gallery.module.mjs +21 -0
  88. package/esm2020/slick-pick-list/slick-pick-list.component.mjs +84 -0
  89. package/esm2020/slick-pick-list/slick-pick-list.module.mjs +20 -0
  90. package/esm2020/slick-popover/slick-popover.component.mjs +204 -0
  91. package/esm2020/slick-popover/slick-popover.module.mjs +19 -0
  92. package/esm2020/slick-profile-picture/slick-profile-picture.component.mjs +267 -0
  93. package/esm2020/slick-profile-picture/slick-profile-picture.module.mjs +20 -0
  94. package/esm2020/slick-progress-bar/slick-progress-bar.module.mjs +18 -0
  95. package/esm2020/slick-progress-bar/slick-progress-bar.service.mjs +53 -0
  96. package/esm2020/slick-screen-blocker/slick-screen-blocker.module.mjs +18 -0
  97. package/esm2020/slick-screen-blocker/slick-screen-blocker.service.mjs +83 -0
  98. package/{esm2015/slick-slider/slick-slider-tick.model.js → esm2020/slick-slider/slick-slider-tick.model.mjs} +0 -0
  99. package/esm2020/slick-slider/slick-slider.component.mjs +90 -0
  100. package/esm2020/slick-slider/slick-slider.module.mjs +20 -0
  101. package/esm2020/slick-split-screen/slick-screen-split-left-content.component.mjs +15 -0
  102. package/esm2020/slick-split-screen/slick-screen-split-right-content.component.mjs +15 -0
  103. package/esm2020/slick-split-screen/slick-split-screen.component.mjs +159 -0
  104. package/esm2020/slick-split-screen/slick-split-screen.module.mjs +21 -0
  105. package/esm2020/slick-tabs/slick-tab-header.component.mjs +28 -0
  106. package/esm2020/slick-tabs/slick-tab.component.mjs +63 -0
  107. package/{esm2015/slick-tabs/slick-tab.model.js → esm2020/slick-tabs/slick-tab.model.mjs} +0 -0
  108. package/esm2020/slick-tabs/slick-tabs.component.mjs +107 -0
  109. package/esm2020/slick-tabs/slick-tabs.module.mjs +23 -0
  110. package/esm2020/slick-toast/slick-toast.module.mjs +18 -0
  111. package/esm2020/slick-toast/slick-toast.service.mjs +88 -0
  112. package/{esm2015/slick-tree-view/slick-tree-node.model.js → esm2020/slick-tree-view/slick-tree-node.model.mjs} +0 -0
  113. package/esm2020/slick-tree-view/slick-tree-view.component.mjs +293 -0
  114. package/esm2020/slick-tree-view/slick-tree-view.module.mjs +22 -0
  115. package/esm2020/slick-type-ahead/slick-type-ahead.directive.mjs +164 -0
  116. package/esm2020/slick-type-ahead/slick-type-ahead.module.mjs +18 -0
  117. package/esm2020/slick-validation-indicator/slick-validation-indicator.directive.mjs +63 -0
  118. package/esm2020/slick-validation-indicator/slick-validation-indicator.module.mjs +19 -0
  119. package/esm2020/utils/slick-function-lock.service.mjs +55 -0
  120. package/esm2020/utils/slick-init.service.mjs +49 -0
  121. package/esm2020/utils/slick-log.service.mjs +23 -0
  122. package/esm2020/utils/slick-sleep.service.mjs +14 -0
  123. package/esm2020/utils/slick-utils.service.mjs +247 -0
  124. package/fesm2015/{slick-components.js → slick-components.mjs} +2779 -2070
  125. package/fesm2015/slick-components.mjs.map +1 -0
  126. package/fesm2020/slick-components.mjs +8467 -0
  127. package/fesm2020/slick-components.mjs.map +1 -0
  128. package/package.json +20 -8
  129. package/public-api.d.ts +8 -8
  130. package/slick-accordion/slick-accordion-item-header.component.d.ts +3 -0
  131. package/slick-accordion/slick-accordion-item.component.d.ts +3 -0
  132. package/slick-accordion/slick-accordion.component.d.ts +3 -0
  133. package/slick-accordion/slick-accordion.module.d.ts +8 -0
  134. package/slick-auto-complete/slick-auto-complete-list-item-template.directive.d.ts +3 -0
  135. package/slick-auto-complete/slick-auto-complete.component.d.ts +3 -0
  136. package/slick-auto-complete/slick-auto-complete.module.d.ts +8 -0
  137. package/slick-button-spinner/slick-button-spinner.component.d.ts +3 -0
  138. package/slick-button-spinner/slick-button-spinner.module.d.ts +6 -0
  139. package/slick-calendar/slick-calendar.component.d.ts +3 -0
  140. package/slick-calendar/slick-calendar.module.d.ts +6 -0
  141. package/slick-card/slick-card-header.component.d.ts +3 -0
  142. package/slick-card/slick-card.component.d.ts +3 -0
  143. package/slick-card/slick-card.module.d.ts +10 -0
  144. package/slick-components.d.ts +1 -22
  145. package/slick-confirm-dialog/slick-confirm-dialog.component.d.ts +3 -0
  146. package/slick-confirm-dialog/slick-confirm-dialog.module.d.ts +7 -0
  147. package/slick-container/slick-container-body.component.d.ts +3 -0
  148. package/slick-container/slick-container-footer.component.d.ts +3 -0
  149. package/slick-container/slick-container-header.component.d.ts +3 -0
  150. package/slick-container/slick-container.component.d.ts +3 -0
  151. package/slick-container/slick-container.module.d.ts +9 -0
  152. package/slick-context-menu/slick-context-menu-item.component.d.ts +3 -0
  153. package/slick-context-menu/slick-context-menu.component.d.ts +3 -0
  154. package/slick-context-menu/slick-context-menu.module.d.ts +7 -0
  155. package/slick-currency-mask/slick-currency-mask.directive.d.ts +3 -0
  156. package/slick-currency-mask/slick-currency-mask.module.d.ts +5 -0
  157. package/slick-date-picker/slick-date-picker.component.d.ts +3 -0
  158. package/slick-date-picker/slick-date-picker.module.d.ts +8 -0
  159. package/slick-dialog/slick-dialog-footer.component.d.ts +3 -0
  160. package/slick-dialog/slick-dialog.component.d.ts +3 -0
  161. package/slick-dialog/slick-dialog.module.d.ts +10 -1
  162. package/slick-dialog/slick-dialog.service.d.ts +3 -0
  163. package/slick-drag-drop/slick-drag-drop.directive.d.ts +3 -0
  164. package/slick-drag-drop/slick-drag-drop.module.d.ts +11 -0
  165. package/slick-drag-drop/slick-draggable.directive.d.ts +3 -0
  166. package/slick-drop-down/slick-drop-down.component.d.ts +3 -0
  167. package/slick-drop-down/slick-drop-down.module.d.ts +9 -0
  168. package/slick-drop-down/slick-drop-down.service.d.ts +3 -0
  169. package/slick-drop-list/slick-drop-list-grab.directive.d.ts +3 -0
  170. package/slick-drop-list/slick-drop-list-item.directive.d.ts +3 -0
  171. package/slick-drop-list/slick-drop-list.directive.d.ts +13 -7
  172. package/slick-drop-list/slick-drop-list.module.d.ts +14 -0
  173. package/slick-email-viewer/slick-email-viewer-dialog.component.d.ts +3 -0
  174. package/slick-email-viewer/slick-email-viewer.component.d.ts +3 -0
  175. package/slick-email-viewer/slick-email-viewer.module.d.ts +10 -0
  176. package/slick-emailer/slick-emailer-dialog.component.d.ts +3 -0
  177. package/slick-emailer/slick-emailer.component.d.ts +3 -0
  178. package/slick-emailer/slick-emailer.module.d.ts +13 -0
  179. package/slick-file-drop/slick-file-drop.component.d.ts +3 -0
  180. package/slick-file-drop/slick-file-drop.module.d.ts +7 -0
  181. package/slick-file-list/slick-file-list-item.component.d.ts +3 -0
  182. package/slick-file-list/slick-file-list.component.d.ts +3 -0
  183. package/slick-file-list/slick-file-list.module.d.ts +10 -0
  184. package/slick-google-address-search/slick-google-address-search.directive.d.ts +3 -0
  185. package/slick-google-address-search/slick-google-address-search.module.d.ts +6 -0
  186. package/slick-google-map/slick-google-map-dialog.component.d.ts +3 -0
  187. package/slick-google-map/slick-google-map.component.d.ts +3 -0
  188. package/slick-google-map/slick-google-map.module.d.ts +8 -0
  189. package/slick-grid/slick-grid-column-template.directive.d.ts +3 -0
  190. package/slick-grid/slick-grid-sanitize.pipe.d.ts +3 -0
  191. package/slick-grid/slick-grid.component.d.ts +3 -0
  192. package/slick-grid/slick-grid.module.d.ts +16 -0
  193. package/slick-grid/slick-grid.service.d.ts +3 -0
  194. package/slick-multi-select/slick-multi-select.component.d.ts +3 -0
  195. package/slick-multi-select/slick-multi-select.module.d.ts +7 -0
  196. package/slick-multi-select/slick-multi-select.service.d.ts +3 -0
  197. package/slick-ordered-list/slick-ordered-list.component.d.ts +3 -0
  198. package/slick-ordered-list/slick-ordered-list.module.d.ts +7 -0
  199. package/slick-paging/slick-paging.component.d.ts +3 -0
  200. package/slick-paging/slick-paging.module.d.ts +6 -0
  201. package/slick-photo-gallery/slick-photo-gallery.component.d.ts +3 -0
  202. package/slick-photo-gallery/slick-photo-gallery.module.d.ts +6 -0
  203. package/slick-pick-list/slick-pick-list.component.d.ts +3 -0
  204. package/slick-pick-list/slick-pick-list.module.d.ts +7 -0
  205. package/slick-popover/slick-popover.component.d.ts +3 -0
  206. package/slick-popover/slick-popover.module.d.ts +6 -0
  207. package/slick-profile-picture/slick-profile-picture.component.d.ts +3 -0
  208. package/slick-profile-picture/slick-profile-picture.module.d.ts +7 -0
  209. package/slick-progress-bar/slick-progress-bar.module.d.ts +5 -0
  210. package/slick-progress-bar/slick-progress-bar.service.d.ts +3 -0
  211. package/slick-screen-blocker/slick-screen-blocker.module.d.ts +5 -0
  212. package/slick-screen-blocker/slick-screen-blocker.service.d.ts +3 -0
  213. package/slick-slider/slick-slider.component.d.ts +3 -0
  214. package/slick-slider/slick-slider.module.d.ts +6 -0
  215. package/slick-split-screen/slick-screen-split-left-content.component.d.ts +3 -0
  216. package/slick-split-screen/slick-screen-split-right-content.component.d.ts +3 -0
  217. package/slick-split-screen/slick-split-screen.component.d.ts +3 -0
  218. package/slick-split-screen/slick-split-screen.module.d.ts +8 -0
  219. package/slick-tabs/slick-tab-header.component.d.ts +3 -0
  220. package/slick-tabs/slick-tab.component.d.ts +3 -0
  221. package/slick-tabs/slick-tabs.component.d.ts +3 -0
  222. package/slick-tabs/slick-tabs.module.d.ts +10 -0
  223. package/slick-toast/slick-toast.module.d.ts +5 -0
  224. package/slick-toast/slick-toast.service.d.ts +3 -0
  225. package/slick-tree-view/slick-tree-view.component.d.ts +3 -0
  226. package/slick-tree-view/slick-tree-view.module.d.ts +8 -0
  227. package/slick-type-ahead/slick-type-ahead.directive.d.ts +3 -0
  228. package/slick-type-ahead/slick-type-ahead.module.d.ts +5 -0
  229. package/slick-validation-indicator/slick-validation-indicator.directive.d.ts +3 -0
  230. package/slick-validation-indicator/slick-validation-indicator.module.d.ts +6 -0
  231. package/utils/slick-function-lock.service.d.ts +3 -0
  232. package/utils/slick-init.service.d.ts +3 -0
  233. package/utils/slick-log.service.d.ts +3 -0
  234. package/utils/slick-sleep.service.d.ts +3 -0
  235. package/utils/slick-utils.service.d.ts +5 -0
  236. package/bundles/slick-components.umd.js +0 -9777
  237. package/bundles/slick-components.umd.js.map +0 -1
  238. package/esm2015/public-api.js +0 -43
  239. package/esm2015/slick-accordion/slick-accordion-item-header.component.js +0 -10
  240. package/esm2015/slick-accordion/slick-accordion-item.component.js +0 -80
  241. package/esm2015/slick-accordion/slick-accordion.component.js +0 -77
  242. package/esm2015/slick-accordion/slick-accordion.module.js +0 -18
  243. package/esm2015/slick-auto-complete/slick-auto-complete-list-item-template.directive.js +0 -21
  244. package/esm2015/slick-auto-complete/slick-auto-complete.component.js +0 -352
  245. package/esm2015/slick-auto-complete/slick-auto-complete.module.js +0 -19
  246. package/esm2015/slick-button-spinner/slick-button-spinner.component.js +0 -186
  247. package/esm2015/slick-button-spinner/slick-button-spinner.module.js +0 -14
  248. package/esm2015/slick-calendar/slick-calendar.component.js +0 -233
  249. package/esm2015/slick-calendar/slick-calendar.module.js +0 -14
  250. package/esm2015/slick-card/slick-card-header.component.js +0 -10
  251. package/esm2015/slick-card/slick-card.component.js +0 -37
  252. package/esm2015/slick-card/slick-card.module.js +0 -14
  253. package/esm2015/slick-components.js +0 -27
  254. package/esm2015/slick-confirm-dialog/slick-confirm-dialog.component.js +0 -62
  255. package/esm2015/slick-confirm-dialog/slick-confirm-dialog.module.js +0 -15
  256. package/esm2015/slick-container/slick-container-body.component.js +0 -18
  257. package/esm2015/slick-container/slick-container-footer.component.js +0 -16
  258. package/esm2015/slick-container/slick-container-header.component.js +0 -16
  259. package/esm2015/slick-container/slick-container.component.js +0 -19
  260. package/esm2015/slick-container/slick-container.module.js +0 -20
  261. package/esm2015/slick-context-menu/slick-context-menu-item.component.js +0 -10
  262. package/esm2015/slick-context-menu/slick-context-menu.component.js +0 -43
  263. package/esm2015/slick-context-menu/slick-context-menu.module.js +0 -15
  264. package/esm2015/slick-currency-mask/slick-currency-mask.directive.js +0 -234
  265. package/esm2015/slick-currency-mask/slick-currency-mask.module.js +0 -14
  266. package/esm2015/slick-date-picker/slick-date-picker.component.js +0 -267
  267. package/esm2015/slick-date-picker/slick-date-picker.module.js +0 -16
  268. package/esm2015/slick-dialog/slick-dialog-footer.component.js +0 -18
  269. package/esm2015/slick-dialog/slick-dialog.component.js +0 -282
  270. package/esm2015/slick-dialog/slick-dialog.module.js +0 -18
  271. package/esm2015/slick-dialog/slick-dialog.service.js +0 -67
  272. package/esm2015/slick-drag-drop/slick-drag-drop.directive.js +0 -9
  273. package/esm2015/slick-drag-drop/slick-drag-drop.module.js +0 -14
  274. package/esm2015/slick-drag-drop/slick-draggable.directive.js +0 -9
  275. package/esm2015/slick-drop-down/slick-drop-down.component.js +0 -465
  276. package/esm2015/slick-drop-down/slick-drop-down.module.js +0 -19
  277. package/esm2015/slick-drop-down/slick-drop-down.service.js +0 -59
  278. package/esm2015/slick-drop-list/slick-drop-list-grab.directive.js +0 -18
  279. package/esm2015/slick-drop-list/slick-drop-list-item.directive.js +0 -18
  280. package/esm2015/slick-drop-list/slick-drop-list.directive.js +0 -162
  281. package/esm2015/slick-drop-list/slick-drop-list.module.js +0 -15
  282. package/esm2015/slick-email-viewer/slick-email-viewer-dialog.component.js +0 -61
  283. package/esm2015/slick-email-viewer/slick-email-viewer.component.js +0 -39
  284. package/esm2015/slick-email-viewer/slick-email-viewer.module.js +0 -21
  285. package/esm2015/slick-emailer/slick-emailer-dialog.component.js +0 -122
  286. package/esm2015/slick-emailer/slick-emailer.component.js +0 -226
  287. package/esm2015/slick-emailer/slick-emailer.module.js +0 -24
  288. package/esm2015/slick-file-drop/slick-file-drop.component.js +0 -144
  289. package/esm2015/slick-file-drop/slick-file-drop.module.js +0 -15
  290. package/esm2015/slick-file-list/slick-file-list-item.component.js +0 -156
  291. package/esm2015/slick-file-list/slick-file-list.component.js +0 -114
  292. package/esm2015/slick-file-list/slick-file-list.module.js +0 -18
  293. package/esm2015/slick-google-address-search/slick-google-address-search.directive.js +0 -75
  294. package/esm2015/slick-google-address-search/slick-google-address-search.module.js +0 -14
  295. package/esm2015/slick-google-map/slick-google-map-dialog.component.js +0 -45
  296. package/esm2015/slick-google-map/slick-google-map.component.js +0 -45
  297. package/esm2015/slick-google-map/slick-google-map.module.js +0 -17
  298. package/esm2015/slick-grid/slick-grid-column-template.directive.js +0 -19
  299. package/esm2015/slick-grid/slick-grid-sanitize.pipe.js +0 -20
  300. package/esm2015/slick-grid/slick-grid.component.js +0 -792
  301. package/esm2015/slick-grid/slick-grid.module.js +0 -38
  302. package/esm2015/slick-grid/slick-grid.service.js +0 -72
  303. package/esm2015/slick-multi-select/slick-multi-select.component.js +0 -356
  304. package/esm2015/slick-multi-select/slick-multi-select.module.js +0 -15
  305. package/esm2015/slick-multi-select/slick-multi-select.service.js +0 -74
  306. package/esm2015/slick-ordered-list/slick-ordered-list.component.js +0 -198
  307. package/esm2015/slick-ordered-list/slick-ordered-list.module.js +0 -15
  308. package/esm2015/slick-paging/slick-paging.component.js +0 -180
  309. package/esm2015/slick-paging/slick-paging.module.js +0 -14
  310. package/esm2015/slick-photo-gallery/slick-photo-gallery.component.js +0 -101
  311. package/esm2015/slick-photo-gallery/slick-photo-gallery.module.js +0 -16
  312. package/esm2015/slick-pick-list/slick-pick-list.component.js +0 -78
  313. package/esm2015/slick-pick-list/slick-pick-list.module.js +0 -15
  314. package/esm2015/slick-popover/slick-popover.component.js +0 -199
  315. package/esm2015/slick-popover/slick-popover.module.js +0 -14
  316. package/esm2015/slick-profile-picture/slick-profile-picture.component.js +0 -242
  317. package/esm2015/slick-profile-picture/slick-profile-picture.module.js +0 -15
  318. package/esm2015/slick-progress-bar/slick-progress-bar.module.js +0 -13
  319. package/esm2015/slick-progress-bar/slick-progress-bar.service.js +0 -50
  320. package/esm2015/slick-screen-blocker/slick-screen-blocker.module.js +0 -13
  321. package/esm2015/slick-screen-blocker/slick-screen-blocker.service.js +0 -80
  322. package/esm2015/slick-slider/slick-slider.component.js +0 -88
  323. package/esm2015/slick-slider/slick-slider.module.js +0 -15
  324. package/esm2015/slick-split-screen/slick-screen-split-left-content.component.js +0 -13
  325. package/esm2015/slick-split-screen/slick-screen-split-right-content.component.js +0 -13
  326. package/esm2015/slick-split-screen/slick-split-screen.component.js +0 -148
  327. package/esm2015/slick-split-screen/slick-split-screen.module.js +0 -16
  328. package/esm2015/slick-tabs/slick-tab-header.component.js +0 -25
  329. package/esm2015/slick-tabs/slick-tab.component.js +0 -67
  330. package/esm2015/slick-tabs/slick-tabs.component.js +0 -104
  331. package/esm2015/slick-tabs/slick-tabs.module.js +0 -17
  332. package/esm2015/slick-toast/slick-toast.module.js +0 -13
  333. package/esm2015/slick-toast/slick-toast.service.js +0 -91
  334. package/esm2015/slick-tree-view/slick-tree-view.component.js +0 -287
  335. package/esm2015/slick-tree-view/slick-tree-view.module.js +0 -17
  336. package/esm2015/slick-type-ahead/slick-type-ahead.directive.js +0 -155
  337. package/esm2015/slick-type-ahead/slick-type-ahead.module.js +0 -13
  338. package/esm2015/slick-validation-indicator/slick-validation-indicator.directive.js +0 -61
  339. package/esm2015/slick-validation-indicator/slick-validation-indicator.module.js +0 -14
  340. package/esm2015/utils/slick-function-lock.service.js +0 -54
  341. package/esm2015/utils/slick-init.service.js +0 -48
  342. package/esm2015/utils/slick-log.service.js +0 -27
  343. package/esm2015/utils/slick-sleep.service.js +0 -14
  344. package/esm2015/utils/slick-utils.service.js +0 -229
  345. package/fesm2015/slick-components.js.map +0 -1
  346. package/slick-components.metadata.json +0 -1
@@ -0,0 +1,175 @@
1
+ import { Component, Input } from "@angular/core";
2
+ import { SlickSleepService } from "../utils/slick-sleep.service";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class SlickButtonSpinnerComponent {
6
+ constructor(el) {
7
+ this.el = el;
8
+ this.spinnerVisible = false;
9
+ this.checkVisible = false;
10
+ this.errorVisible = false;
11
+ this.currentStatus = "hidden";
12
+ this.inProcess = false;
13
+ this.expanded = false;
14
+ el.nativeElement.classList.add("slick-button-spinner");
15
+ }
16
+ ngOnInit() {
17
+ }
18
+ async ngAfterViewInit() {
19
+ this.originalPadding = this.el.nativeElement.style.paddingRight;
20
+ }
21
+ async ngOnChanges(changes) {
22
+ if (!changes.spinnerStatus || !changes.spinnerStatus.currentValue)
23
+ return;
24
+ switch (changes.spinnerStatus.currentValue.toLowerCase()) {
25
+ case 'spin':
26
+ if (this.inProcess === true) {
27
+ // If it's expanding, wait for it to finish, then collapse it
28
+ let waitInterval = setInterval(async () => {
29
+ if (this.inProcess === false) {
30
+ clearTimeout(waitInterval);
31
+ await this.expand();
32
+ this.hideError();
33
+ this.hideCheck();
34
+ this.showSpinner();
35
+ }
36
+ }, 50);
37
+ }
38
+ else {
39
+ await this.expand();
40
+ this.hideError();
41
+ this.hideCheck();
42
+ this.showSpinner();
43
+ }
44
+ break;
45
+ case 'ok':
46
+ if (this.inProcess === true) {
47
+ // If it's expanding, wait for it to finish, then collapse it
48
+ let waitInterval = setInterval(() => {
49
+ if (this.inProcess === false) {
50
+ clearTimeout(waitInterval);
51
+ this.hideSpinner();
52
+ this.hideError();
53
+ this.showCheck();
54
+ }
55
+ }, 50);
56
+ }
57
+ else {
58
+ this.hideSpinner();
59
+ this.hideError();
60
+ this.showCheck();
61
+ }
62
+ break;
63
+ case 'error':
64
+ if (this.inProcess === true) {
65
+ // If it's expanding, wait for it to finish, then collapse it
66
+ let waitInterval = setInterval(() => {
67
+ if (this.inProcess === false) {
68
+ clearTimeout(waitInterval);
69
+ this.hideSpinner();
70
+ this.hideCheck();
71
+ this.showError();
72
+ }
73
+ }, 50);
74
+ }
75
+ else {
76
+ this.hideSpinner();
77
+ this.hideCheck();
78
+ this.showError();
79
+ }
80
+ break;
81
+ case 'hide':
82
+ if (this.inProcess === true) {
83
+ // If it's expanding, wait for it to finish, then collapse it
84
+ let waitInterval = setInterval(() => {
85
+ if (this.inProcess === false) {
86
+ clearTimeout(waitInterval);
87
+ this.hideCheck();
88
+ this.hideError();
89
+ this.hideSpinner();
90
+ this.collapse();
91
+ }
92
+ }, 50);
93
+ }
94
+ else {
95
+ this.hideCheck();
96
+ this.hideError();
97
+ this.hideSpinner();
98
+ this.collapse();
99
+ }
100
+ case 'reset':
101
+ this.expanded = false;
102
+ this.hideCheck();
103
+ this.hideError();
104
+ this.hideSpinner();
105
+ this.el.nativeElement.disabled = false;
106
+ this.el.nativeElement.style.paddingRight = this.originalPadding;
107
+ this.el.nativeElement.classList.remove("expand-button-spinner");
108
+ break;
109
+ }
110
+ }
111
+ showSpinner() {
112
+ this.spinnerVisible = true;
113
+ this.el.nativeElement.disabled = true;
114
+ }
115
+ hideSpinner() {
116
+ this.spinnerVisible = false;
117
+ this.el.nativeElement.disabled = false;
118
+ }
119
+ showCheck() {
120
+ this.checkVisible = true;
121
+ this.showCheckInterval = setTimeout(() => {
122
+ this.hideCheck();
123
+ this.hideError();
124
+ this.collapse();
125
+ }, 2500);
126
+ }
127
+ hideCheck() {
128
+ clearTimeout(this.showCheckInterval);
129
+ this.checkVisible = false;
130
+ }
131
+ showError() {
132
+ this.el.nativeElement.disabled = false;
133
+ this.errorVisible = true;
134
+ }
135
+ hideError() {
136
+ this.errorVisible = false;
137
+ }
138
+ async expand() {
139
+ if (this.inProcess === true || this.expanded === true) {
140
+ return Promise.resolve();
141
+ }
142
+ this.expanded = true;
143
+ this.inProcess = true;
144
+ this.el.nativeElement.classList.remove("collapse-button-spinner");
145
+ this.el.nativeElement.classList.add("expand-button-spinner");
146
+ await SlickSleepService.sleep(350);
147
+ this.originalPadding = this.el.nativeElement.style.paddingRight;
148
+ this.el.nativeElement.style.paddingRight = "35px";
149
+ this.inProcess = false;
150
+ return Promise.resolve();
151
+ }
152
+ async collapse() {
153
+ if (this.inProcess === true || this.expanded === false) {
154
+ return Promise.resolve();
155
+ }
156
+ this.expanded = false;
157
+ this.inProcess = true;
158
+ this.el.nativeElement.classList.remove("expand-button-spinner");
159
+ this.el.nativeElement.classList.add("collapse-button-spinner");
160
+ await SlickSleepService.sleep(500);
161
+ this.el.nativeElement.style.paddingRight = this.originalPadding;
162
+ this.inProcess = false;
163
+ Promise.resolve();
164
+ }
165
+ }
166
+ /** @nocollapse */ SlickButtonSpinnerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickButtonSpinnerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
167
+ /** @nocollapse */ SlickButtonSpinnerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: SlickButtonSpinnerComponent, selector: "[slick-button-spinner]", inputs: { spinnerStatus: ["slick-button-spinner", "spinnerStatus"] }, usesOnChanges: true, ngImport: i0, template: "<ng-content></ng-content><div *ngIf=\"spinnerVisible\" class=\"slick-button-spinner_spin-icon\"></div><div *ngIf=\"checkVisible\" class=\"slick-button-spinner_check\"><i class=\"far fa-check-circle\"></i></div><div *ngIf=\"errorVisible\" class=\"slick-button-spinner_error\"><i class=\"far fa-times-circle\"></i></div>\r\n", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
168
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickButtonSpinnerComponent, decorators: [{
169
+ type: Component,
170
+ args: [{ selector: '[slick-button-spinner]', template: "<ng-content></ng-content><div *ngIf=\"spinnerVisible\" class=\"slick-button-spinner_spin-icon\"></div><div *ngIf=\"checkVisible\" class=\"slick-button-spinner_check\"><i class=\"far fa-check-circle\"></i></div><div *ngIf=\"errorVisible\" class=\"slick-button-spinner_error\"><i class=\"far fa-times-circle\"></i></div>\r\n" }]
171
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { spinnerStatus: [{
172
+ type: Input,
173
+ args: ['slick-button-spinner']
174
+ }] } });
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2stYnV0dG9uLXNwaW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvc2xpY2stYnV0dG9uLXNwaW5uZXIvc2xpY2stYnV0dG9uLXNwaW5uZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvc2xpY2stYnV0dG9uLXNwaW5uZXIvc2xpY2stYnV0dG9uLXNwaW5uZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQStELE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7QUFNakUsTUFBTSxPQUFPLDJCQUEyQjtJQWF2QyxZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQVZsQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUV0QixrQkFBYSxHQUFXLFFBQVEsQ0FBQztRQUNqQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFLakMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFFBQVE7SUFDUixDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWU7UUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ2pFLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXNCO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLENBQUMsT0FBTyxDQUFD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YUFBYSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxLQUFLLENBQUMsUUFBUTtRQUNyQixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO1lBQ3ZELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMvRCxNQUFNLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDaEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7OzJJQXhMVywyQkFBMkI7K0hBQTNCLDJCQUEyQix5SkNQeEMsb1VBQ0E7MkZETWEsMkJBQTJCO2tCQUp2QyxTQUFTOytCQUNDLHdCQUF3QjtpR0FJSCxhQUFhO3NCQUEzQyxLQUFLO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEVsZW1lbnRSZWYsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdJbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU2xpY2tTbGVlcFNlcnZpY2UgfSBmcm9tIFwiLi4vdXRpbHMvc2xpY2stc2xlZXAuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdbc2xpY2stYnV0dG9uLXNwaW5uZXJdJyxcclxuXHR0ZW1wbGF0ZVVybDogXCJzbGljay1idXR0b24tc3Bpbm5lci5jb21wb25lbnQuaHRtbFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbGlja0J1dHRvblNwaW5uZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcblx0QElucHV0KCdzbGljay1idXR0b24tc3Bpbm5lcicpIHNwaW5uZXJTdGF0dXM6IHN0cmluZztcclxuXHJcblx0c3Bpbm5lclZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRjaGVja1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRlcnJvclZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0cHJpdmF0ZSBjdXJyZW50U3RhdHVzOiBzdHJpbmcgPSBcImhpZGRlblwiO1xyXG5cdHByaXZhdGUgaW5Qcm9jZXNzOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHJpdmF0ZSBleHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHByaXZhdGUgc2hvd0NoZWNrSW50ZXJ2YWw6IE5vZGVKUy5UaW1lcjtcclxuXHRwcml2YXRlIG9yaWdpbmFsUGFkZGluZzogc3RyaW5nO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7XHRcdFxyXG5cdFx0ZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic2xpY2stYnV0dG9uLXNwaW5uZXJcIik7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHR9XHJcblxyXG5cdGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuXHRcdHRoaXMub3JpZ2luYWxQYWRkaW5nID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodDtcclxuXHR9XHJcblxyXG5cdGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuXHRcdGlmICghY2hhbmdlcy5zcGlubmVyU3RhdHVzIHx8ICFjaGFuZ2VzLnNwaW5uZXJTdGF0dXMuY3VycmVudFZhbHVlKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0c3dpdGNoIChjaGFuZ2VzLnNwaW5uZXJTdGF0dXMuY3VycmVudFZhbHVlLnRvTG93ZXJDYXNlKCkpIHtcclxuXHRcdFx0Y2FzZSAnc3Bpbic6XHJcblx0XHRcdFx0aWYgKHRoaXMuaW5Qcm9jZXNzID09PSB0cnVlKSB7XHJcblx0XHRcdFx0XHQvLyBJZiBpdCdzIGV4cGFuZGluZywgd2FpdCBmb3IgaXQgdG8gZmluaXNoLCB0aGVuIGNvbGxhcHNlIGl0XHJcblx0XHRcdFx0XHRsZXQgd2FpdEludGVydmFsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5pblByb2Nlc3MgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHdhaXRJbnRlcnZhbCk7XHJcblx0XHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5leHBhbmQoKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGVFcnJvcigpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuaGlkZUNoZWNrKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zaG93U3Bpbm5lcigpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LCA1MCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5leHBhbmQoKTtcclxuXHRcdFx0XHRcdHRoaXMuaGlkZUVycm9yKCk7XHJcblx0XHRcdFx0XHR0aGlzLmhpZGVDaGVjaygpO1xyXG5cdFx0XHRcdFx0dGhpcy5zaG93U3Bpbm5lcigpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgJ29rJzpcclxuXHRcdFx0XHRpZiAodGhpcy5pblByb2Nlc3MgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdC8vIElmIGl0J3MgZXhwYW5kaW5nLCB3YWl0IGZvciBpdCB0byBmaW5pc2gsIHRoZW4gY29sbGFwc2UgaXRcclxuXHRcdFx0XHRcdGxldCB3YWl0SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmluUHJvY2VzcyA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0XHRjbGVhclRpbWVvdXQod2FpdEludGVydmFsKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGVTcGlubmVyKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5oaWRlRXJyb3IoKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnNob3dDaGVjaygpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LCA1MCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5oaWRlU3Bpbm5lcigpO1xyXG5cdFx0XHRcdFx0dGhpcy5oaWRlRXJyb3IoKTtcclxuXHRcdFx0XHRcdHRoaXMuc2hvd0NoZWNrKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSAnZXJyb3InOlxyXG5cdFx0XHRcdGlmICh0aGlzLmluUHJvY2VzcyA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRcdFx0Ly8gSWYgaXQncyBleHBhbmRpbmcsIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCwgdGhlbiBjb2xsYXBzZSBpdFxyXG5cdFx0XHRcdFx0bGV0IHdhaXRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuaW5Qcm9jZXNzID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0XHRcdGNsZWFyVGltZW91dCh3YWl0SW50ZXJ2YWwpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuaGlkZVNwaW5uZXIoKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGVDaGVjaygpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2hvd0Vycm9yKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sIDUwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmhpZGVTcGlubmVyKCk7XHJcblx0XHRcdFx0XHR0aGlzLmhpZGVDaGVjaygpO1xyXG5cdFx0XHRcdFx0dGhpcy5zaG93RXJyb3IoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRjYXNlICdoaWRlJzpcclxuXHRcdFx0XHRpZiAodGhpcy5pblByb2Nlc3MgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdC8vIElmIGl0J3MgZXhwYW5kaW5nLCB3YWl0IGZvciBpdCB0byBmaW5pc2gsIHRoZW4gY29sbGFwc2UgaXRcclxuXHRcdFx0XHRcdGxldCB3YWl0SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmluUHJvY2VzcyA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0XHRjbGVhclRpbWVvdXQod2FpdEludGVydmFsKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGVDaGVjaygpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuaGlkZUVycm9yKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5oaWRlU3Bpbm5lcigpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuY29sbGFwc2UoKVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LCA1MCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5oaWRlQ2hlY2soKTtcclxuXHRcdFx0XHRcdHRoaXMuaGlkZUVycm9yKCk7XHJcblx0XHRcdFx0XHR0aGlzLmhpZGVTcGlubmVyKCk7XHJcblx0XHRcdFx0XHR0aGlzLmNvbGxhcHNlKCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0Y2FzZSAncmVzZXQnOlxyXG5cdFx0XHRcdHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLmhpZGVDaGVjaygpO1xyXG5cdFx0XHRcdHRoaXMuaGlkZUVycm9yKCk7XHJcblx0XHRcdFx0dGhpcy5oaWRlU3Bpbm5lcigpO1xyXG5cdFx0XHRcdHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSB0aGlzLm9yaWdpbmFsUGFkZGluZztcclxuXHRcdFx0XHR0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImV4cGFuZC1idXR0b24tc3Bpbm5lclwiKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2hvd1NwaW5uZXIoKSB7XHJcblx0XHR0aGlzLnNwaW5uZXJWaXNpYmxlID0gdHJ1ZTtcclxuXHRcdHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhpZGVTcGlubmVyKCkge1xyXG5cdFx0dGhpcy5zcGlubmVyVmlzaWJsZSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNob3dDaGVjaygpIHtcclxuXHRcdHRoaXMuY2hlY2tWaXNpYmxlID0gdHJ1ZTtcclxuXHRcdHRoaXMuc2hvd0NoZWNrSW50ZXJ2YWwgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0dGhpcy5oaWRlQ2hlY2soKTtcclxuXHRcdFx0dGhpcy5oaWRlRXJyb3IoKTtcclxuXHRcdFx0dGhpcy5jb2xsYXBzZSgpO1xyXG5cdFx0fSwgMjUwMCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhpZGVDaGVjaygpIHtcclxuXHRcdGNsZWFyVGltZW91dCh0aGlzLnNob3dDaGVja0ludGVydmFsKTtcclxuXHRcdHRoaXMuY2hlY2tWaXNpYmxlID0gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNob3dFcnJvcigpIHtcclxuXHRcdHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlO1xyXG5cdFx0dGhpcy5lcnJvclZpc2libGUgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBoaWRlRXJyb3IoKSB7XHJcblx0XHR0aGlzLmVycm9yVmlzaWJsZSA9IGZhbHNlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBleHBhbmQoKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG5cdFx0aWYgKHRoaXMuaW5Qcm9jZXNzID09PSB0cnVlIHx8IHRoaXMuZXhwYW5kZWQgPT09IHRydWUpIHtcclxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZXhwYW5kZWQgPSB0cnVlO1xyXG5cdFx0dGhpcy5pblByb2Nlc3MgPSB0cnVlO1xyXG5cdFx0dGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJjb2xsYXBzZS1idXR0b24tc3Bpbm5lclwiKTtcclxuXHRcdHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZXhwYW5kLWJ1dHRvbi1zcGlubmVyXCIpO1xyXG5cclxuXHRcdGF3YWl0IFNsaWNrU2xlZXBTZXJ2aWNlLnNsZWVwKDM1MCk7XHJcblx0XHR0aGlzLm9yaWdpbmFsUGFkZGluZyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQ7XHJcblx0XHR0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gXCIzNXB4XCI7XHJcblx0XHR0aGlzLmluUHJvY2VzcyA9IGZhbHNlO1xyXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjb2xsYXBzZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGlmICh0aGlzLmluUHJvY2VzcyA9PT0gdHJ1ZSB8fCB0aGlzLmV4cGFuZGVkID09PSBmYWxzZSkge1xyXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5leHBhbmRlZCA9IGZhbHNlO1xyXG5cdFx0dGhpcy5pblByb2Nlc3MgPSB0cnVlO1xyXG5cdFx0dGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJleHBhbmQtYnV0dG9uLXNwaW5uZXJcIik7XHJcblx0XHR0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImNvbGxhcHNlLWJ1dHRvbi1zcGlubmVyXCIpO1xyXG5cdFx0YXdhaXQgU2xpY2tTbGVlcFNlcnZpY2Uuc2xlZXAoNTAwKTtcclxuXHRcdHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSB0aGlzLm9yaWdpbmFsUGFkZGluZztcclxuXHRcdHRoaXMuaW5Qcm9jZXNzID0gZmFsc2U7XHJcblx0XHRQcm9taXNlLnJlc29sdmUoKTtcclxuXHR9XHJcbn0iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+PGRpdiAqbmdJZj1cInNwaW5uZXJWaXNpYmxlXCIgY2xhc3M9XCJzbGljay1idXR0b24tc3Bpbm5lcl9zcGluLWljb25cIj48L2Rpdj48ZGl2ICpuZ0lmPVwiY2hlY2tWaXNpYmxlXCIgY2xhc3M9XCJzbGljay1idXR0b24tc3Bpbm5lcl9jaGVja1wiPjxpIGNsYXNzPVwiZmFyIGZhLWNoZWNrLWNpcmNsZVwiPjwvaT48L2Rpdj48ZGl2ICpuZ0lmPVwiZXJyb3JWaXNpYmxlXCIgY2xhc3M9XCJzbGljay1idXR0b24tc3Bpbm5lcl9lcnJvclwiPjxpIGNsYXNzPVwiZmFyIGZhLXRpbWVzLWNpcmNsZVwiPjwvaT48L2Rpdj5cclxuIl19
@@ -0,0 +1,19 @@
1
+ import { NgModule } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { SlickButtonSpinnerComponent } from "./slick-button-spinner.component";
4
+ import * as i0 from "@angular/core";
5
+ export class SlickButtonSpinnerModule {
6
+ }
7
+ /** @nocollapse */ SlickButtonSpinnerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickButtonSpinnerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ /** @nocollapse */ SlickButtonSpinnerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickButtonSpinnerModule, declarations: [SlickButtonSpinnerComponent], imports: [CommonModule], exports: [SlickButtonSpinnerComponent] });
9
+ /** @nocollapse */ SlickButtonSpinnerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickButtonSpinnerModule, imports: [[CommonModule]] });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickButtonSpinnerModule, decorators: [{
11
+ type: NgModule,
12
+ args: [{
13
+ imports: [CommonModule],
14
+ declarations: [SlickButtonSpinnerComponent],
15
+ exports: [SlickButtonSpinnerComponent]
16
+ }]
17
+ }] });
18
+ export { SlickButtonSpinnerComponent };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2stYnV0dG9uLXNwaW5uZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvc2xpY2stYnV0dG9uLXNwaW5uZXIvc2xpY2stYnV0dG9uLXNwaW5uZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQU8vRSxNQUFNLE9BQU8sd0JBQXdCOzt3SUFBeEIsd0JBQXdCO3lJQUF4Qix3QkFBd0IsaUJBSHJCLDJCQUEyQixhQURoQyxZQUFZLGFBRVosMkJBQTJCO3lJQUV6Qix3QkFBd0IsWUFKM0IsQ0FBQyxZQUFZLENBQUM7MkZBSVgsd0JBQXdCO2tCQUxwQyxRQUFRO21CQUFDO29CQUNULE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsWUFBWSxFQUFFLENBQUMsMkJBQTJCLENBQUM7b0JBQzNDLE9BQU8sRUFBRSxDQUFDLDJCQUEyQixDQUFDO2lCQUN0Qzs7QUFHRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBTbGlja0J1dHRvblNwaW5uZXJDb21wb25lbnQgfSBmcm9tIFwiLi9zbGljay1idXR0b24tc3Bpbm5lci5jb21wb25lbnRcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcblx0aW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcblx0ZGVjbGFyYXRpb25zOiBbU2xpY2tCdXR0b25TcGlubmVyQ29tcG9uZW50XSxcclxuXHRleHBvcnRzOiBbU2xpY2tCdXR0b25TcGlubmVyQ29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xpY2tCdXR0b25TcGlubmVyTW9kdWxlIHsgfVxyXG5cclxuZXhwb3J0IHsgU2xpY2tCdXR0b25TcGlubmVyQ29tcG9uZW50IH0iXX0=
@@ -0,0 +1,246 @@
1
+ import { Component, forwardRef, Input, Output, EventEmitter, HostListener } from "@angular/core";
2
+ import { SlickUtilsService } from "../utils/slick-utils.service";
3
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
4
+ import * as moment from "moment";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ class DayModel {
8
+ }
9
+ class WeekModel {
10
+ }
11
+ class MonthModel {
12
+ }
13
+ export class SlickCalendarComponent {
14
+ constructor() {
15
+ this.condensed = false;
16
+ this.monthsToShow = 1;
17
+ this.inactiveDates = [];
18
+ this.inactiveWeekends = false;
19
+ this.showDaysNotInMonth = false;
20
+ this.multiSelect = false;
21
+ this.multiSelectDatesChange = new EventEmitter();
22
+ this.onDateSelect = new EventEmitter();
23
+ this.onDateChange = new EventEmitter();
24
+ this.onMonthChange = new EventEmitter();
25
+ this.onMultiDateChange = new EventEmitter();
26
+ this.selectedDate = new Date();
27
+ this.visibleDate = new Date();
28
+ this.propagateChange = (_) => { };
29
+ this.uuid = SlickUtilsService.newGuid();
30
+ }
31
+ onClick(event, targetElement) {
32
+ if (!targetElement || SlickUtilsService.checkParentClassExists(targetElement, "slickCalendar_month"))
33
+ return;
34
+ }
35
+ ngOnInit() {
36
+ this.recalc();
37
+ }
38
+ async ngOnChanges(changes) {
39
+ if (changes.condensed)
40
+ this.condensed = (this.condensed || 'false').toString().toLowerCase() === 'true' ? true : false;
41
+ if (changes.inactiveWeekends)
42
+ this.inactiveWeekends = (this.inactiveWeekends || 'true').toString().toLowerCase() === 'false' ? false : true;
43
+ if (changes.showDaysNotInMonth)
44
+ this.showDaysNotInMonth = (this.showDaysNotInMonth || 'false').toString().toLowerCase() === 'true' ? true : false;
45
+ if (changes.multiSelect)
46
+ this.multiSelect = (this.multiSelect || 'false').toString().toLowerCase() === 'true' ? true : false;
47
+ const widthPerCalendar = (this.condensed) ? 180 : 250;
48
+ this.minWidth = this.monthsToShow * widthPerCalendar;
49
+ this.recalc();
50
+ }
51
+ // this is the initial value set to the component
52
+ writeValue(obj) {
53
+ if (obj) {
54
+ if (moment(obj).isValid()) {
55
+ this.selectedDate = obj;
56
+ this.visibleDate = obj;
57
+ this.recalc();
58
+ }
59
+ else {
60
+ this.selectedDate = null;
61
+ }
62
+ }
63
+ else {
64
+ if (!this.selectedDate && this.onDateChange)
65
+ this.onDateChange.emit(null);
66
+ this.selectedDate = null;
67
+ }
68
+ }
69
+ // registers 'fn' that will be fired when changes are made
70
+ // this is how we emit the changes back to the form
71
+ registerOnChange(fn) {
72
+ this.propagateChange = fn;
73
+ }
74
+ // not used, used for touch input
75
+ registerOnTouched() { }
76
+ prevMonth() {
77
+ this.visibleDate = moment(this.visibleDate).subtract(this.monthsToShow, "months").toDate();
78
+ this.recalc();
79
+ if (this.onMonthChange) {
80
+ let monthStart = moment(this.visibleDate).startOf("month");
81
+ if (this.showDaysNotInMonth === true)
82
+ monthStart = monthStart.startOf("week");
83
+ this.onMonthChange.emit(monthStart.toDate());
84
+ }
85
+ }
86
+ nextMonth() {
87
+ this.visibleDate = moment(this.visibleDate).add(this.monthsToShow, "months").toDate();
88
+ this.recalc();
89
+ if (this.onMonthChange) {
90
+ let monthStart = moment(this.visibleDate).startOf("month");
91
+ if (this.showDaysNotInMonth === true)
92
+ monthStart = monthStart.startOf("week");
93
+ this.onMonthChange.emit(monthStart.toDate());
94
+ }
95
+ }
96
+ selectMonth(monthIdx) {
97
+ const month = this.months[monthIdx];
98
+ let visibleDate = moment(this.visibleDate);
99
+ let dateString = month + visibleDate.format(" 1, YYYY");
100
+ this.visibleDate = moment(dateString, "MMMM DD, YYYY").toDate();
101
+ this.recalc();
102
+ }
103
+ setDate(dayModel) {
104
+ if (this.showDaysNotInMonth === false && dayModel.isInCurrentMonth === false)
105
+ return;
106
+ if (dayModel.isActive === false)
107
+ return;
108
+ if (this.multiSelect === false) {
109
+ this.selectedDate = dayModel.date;
110
+ this.visibleDate = dayModel.date;
111
+ this.propagateChange(this.selectedDate);
112
+ if (this.onDateChange)
113
+ this.onDateChange.emit(this.selectedDate);
114
+ if (this.onDateSelect)
115
+ this.onDateSelect.emit(this.selectedDate);
116
+ // Say we have 3 months showing and they select a date on the 3rd month
117
+ // Recalc will re-draw the 3rd month as the first month instead of just
118
+ // higlighting the date on the 3rd month. Highlight instead.
119
+ let dateFound = false;
120
+ for (let month of this.months) {
121
+ for (let week of month.weeks) {
122
+ for (let day of week.days) {
123
+ day.isSelected = false;
124
+ if (day.isInCurrentMonth === true && moment(day.date).isSame(this.selectedDate, "date")) {
125
+ day.isSelected = true;
126
+ dateFound = true;
127
+ }
128
+ }
129
+ }
130
+ }
131
+ // But if they've
132
+ if (dateFound === false)
133
+ this.recalc();
134
+ }
135
+ else {
136
+ // This will be reversed since we haven't re-calced the dates yet.
137
+ if (!dayModel.isSelected)
138
+ this.multiSelectDates.push(dayModel.date);
139
+ else {
140
+ let dateIdx = this.multiSelectDates.findIndex(d => moment(d).startOf("date").isSame(moment(dayModel.date).startOf("date")));
141
+ this.multiSelectDates.splice(dateIdx, 1);
142
+ }
143
+ if (this.onMultiDateChange)
144
+ this.onMultiDateChange.emit(this.multiSelectDates);
145
+ for (let month of this.months) {
146
+ for (let week of month.weeks) {
147
+ for (let day of week.days) {
148
+ day.isSelected = false;
149
+ if (day.isInCurrentMonth === true && (this.multiSelectDates.findIndex(x => moment(x).isSame(moment(day.date), "date")) >= 0)) {
150
+ day.isSelected = true;
151
+ }
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
157
+ recalc() {
158
+ this.months = [];
159
+ for (let monthCount = 0; monthCount < this.monthsToShow; monthCount++) {
160
+ let currentDate = moment(this.visibleDate).startOf("month");
161
+ currentDate = moment(currentDate).add(monthCount, "months");
162
+ currentDate = moment(currentDate).startOf("week").startOf("date");
163
+ const month = new MonthModel();
164
+ month.weeks = [];
165
+ // CurrentDate is most likely going to be the month before, so add 15 days to get to the middle of the current month
166
+ const monthToDisplay = moment(currentDate).add(15, "days");
167
+ month.monthDisplay = (this.condensed === true) ? monthToDisplay.format("MMM YYYY") : monthToDisplay.format("MMM YYYY");
168
+ for (let weekCount = 0; weekCount < 6; weekCount++) {
169
+ const week = new WeekModel();
170
+ week.days = [];
171
+ for (let dayCount = 0; dayCount < 7; dayCount++) {
172
+ const day = new DayModel();
173
+ day.date = currentDate.toDate();
174
+ day.isToday = moment().isSame(currentDate, "date");
175
+ if (this.multiSelect && this.multiSelectDates)
176
+ day.isSelected = (this.multiSelectDates.findIndex(x => moment(x).isSame(moment(day.date), "date")) >= 0);
177
+ else
178
+ day.isSelected = moment(this.selectedDate).isSame(currentDate, "date");
179
+ day.isInCurrentMonth = (currentDate.month() === monthToDisplay.month());
180
+ day.isActive = true;
181
+ if (this.inactiveWeekends && currentDate.day() === 6 || currentDate.day() === 7)
182
+ day.isActive = false;
183
+ if (this.inactiveDates && this.inactiveDates.findIndex(x => moment(x).isSame(currentDate, "date")) >= 0)
184
+ day.isActive = false;
185
+ if (this.showDaysNotInMonth === false && day.isInCurrentMonth === false)
186
+ day.isActive = false;
187
+ // It's possible for the day to be in the month display, but hidden, but active
188
+ if (day.isActive === false)
189
+ day.isSelected = false;
190
+ if (day.isInCurrentMonth === false)
191
+ day.isSelected = false;
192
+ week.days.push(day);
193
+ currentDate = moment(currentDate).add(1, "days");
194
+ }
195
+ month.weeks.push(week);
196
+ }
197
+ this.months.push(month);
198
+ }
199
+ }
200
+ }
201
+ /** @nocollapse */ SlickCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickCalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
202
+ /** @nocollapse */ SlickCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: SlickCalendarComponent, selector: "slick-calendar", inputs: { condensed: "condensed", monthsToShow: "monthsToShow", inactiveDates: "inactiveDates", inactiveWeekends: "inactiveWeekends", showDaysNotInMonth: "showDaysNotInMonth", multiSelect: "multiSelect", multiSelectDates: "multiSelectDates" }, outputs: { multiSelectDatesChange: "multiSelectDatesChange", onDateSelect: "onDateSelect", onDateChange: "onDateChange", onMonthChange: "onMonthChange", onMultiDateChange: "onMultiDateChange" }, host: { listeners: { "click": "onClick($event,$event.target)" } }, providers: [
203
+ {
204
+ provide: NG_VALUE_ACCESSOR,
205
+ useExisting: forwardRef((() => SlickCalendarComponent)),
206
+ multi: true,
207
+ }
208
+ ], usesOnChanges: true, ngImport: i0, template: "<div class=\"slick-calendar default-width card\" id=\"slick-calendar_{{uuid}}\" [style.minWidth.px]=\"minWidth\" [ngClass]=\"{'slick-calendar_condensed': condensed === true, 'slick-calendar_single': monthsToShow === 1 }\">\r\n\t<div class=\"slick-calendar_prev-month\" (click)=\"prevMonth()\"><i class=\"far fa-chevron-left\"></i></div>\r\n\t<div class=\"slick-calendar_next-month\" (click)=\"nextMonth()\"><i class=\"far fa-chevron-right\"></i></div>\r\n\r\n\t<div class=\"d-flex justify-content-around pt-2\" [ngClass]=\"{ 'mx-3': monthsToShow > 1, 'mx-1': monthsToShow === 1 }\">\r\n\t\t<div *ngFor=\"let month of months\" class=\"flex-fill mx-2\" style=\"text-align: center;max-width: 220px;\">\r\n\r\n\t\t\t<table class=\"table table-sm table-borderless\" style=\"table-layout: fixed; \">\r\n\t\t\t\t<thead>\r\n\t\t\t\t\t<tr class=\"slick-calendar_month-display\">\r\n\t\t\t\t\t\t<td colspan=\"7\"><b>{{month.monthDisplay}}</b></td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t<tr class=\"slick-calendar_days-of-week\">\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Sun</span><span *ngIf='condensed === true'>S</span></td>\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Mon</span><span *ngIf='condensed === true'>M</span></td>\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Tue</span><span *ngIf='condensed === true'>T</span></td>\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Wed</span><span *ngIf='condensed === true'>W</span></td>\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Thu</span><span *ngIf='condensed === true'>Th</span></td>\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Fri</span><span *ngIf='condensed === true'>F</span></td>\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Sat</span><span *ngIf='condensed === true'>S</span></td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</thead>\r\n\r\n\t\t\t\t<tbody>\r\n\t\t\t\t\t<tr *ngFor=\"let week of month.weeks\">\r\n\t\t\t\t\t\t<td *ngFor=\"let day of week.days\" (click)=\"setDate(day)\" class=\"slick-calendar_date\" [ngClass]=\"{ 'slick-calendar_is-today': day.isToday, 'bg-success text-white': day.isSelected, 'slick-calendar_not_in_month': day.isInCurrentMonth === false, 'slick-calendar_inactive': day.isActive === false }\">\r\n\t\t\t\t\t\t\t<span *ngIf=\"showDaysNotInMonth === true || (showDaysNotInMonth === false && day.isInCurrentMonth === true)\">{{day.date | date:'d'}}</span>\r\n\t\t\t\t\t\t\t<span *ngIf=\"monthsToShow > 1 && (showDaysNotInMonth === false && day.isInCurrentMonth === false)\">&nbsp;</span>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</tbody>\r\n\t\t\t</table>\r\n\r\n\r\n\t\t</div>\r\n\r\n\t</div>\r\n</div>", directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "date": i1.DatePipe } });
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickCalendarComponent, decorators: [{
210
+ type: Component,
211
+ args: [{ selector: 'slick-calendar', providers: [
212
+ {
213
+ provide: NG_VALUE_ACCESSOR,
214
+ useExisting: forwardRef((() => SlickCalendarComponent)),
215
+ multi: true,
216
+ }
217
+ ], template: "<div class=\"slick-calendar default-width card\" id=\"slick-calendar_{{uuid}}\" [style.minWidth.px]=\"minWidth\" [ngClass]=\"{'slick-calendar_condensed': condensed === true, 'slick-calendar_single': monthsToShow === 1 }\">\r\n\t<div class=\"slick-calendar_prev-month\" (click)=\"prevMonth()\"><i class=\"far fa-chevron-left\"></i></div>\r\n\t<div class=\"slick-calendar_next-month\" (click)=\"nextMonth()\"><i class=\"far fa-chevron-right\"></i></div>\r\n\r\n\t<div class=\"d-flex justify-content-around pt-2\" [ngClass]=\"{ 'mx-3': monthsToShow > 1, 'mx-1': monthsToShow === 1 }\">\r\n\t\t<div *ngFor=\"let month of months\" class=\"flex-fill mx-2\" style=\"text-align: center;max-width: 220px;\">\r\n\r\n\t\t\t<table class=\"table table-sm table-borderless\" style=\"table-layout: fixed; \">\r\n\t\t\t\t<thead>\r\n\t\t\t\t\t<tr class=\"slick-calendar_month-display\">\r\n\t\t\t\t\t\t<td colspan=\"7\"><b>{{month.monthDisplay}}</b></td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t<tr class=\"slick-calendar_days-of-week\">\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Sun</span><span *ngIf='condensed === true'>S</span></td>\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Mon</span><span *ngIf='condensed === true'>M</span></td>\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Tue</span><span *ngIf='condensed === true'>T</span></td>\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Wed</span><span *ngIf='condensed === true'>W</span></td>\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Thu</span><span *ngIf='condensed === true'>Th</span></td>\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Fri</span><span *ngIf='condensed === true'>F</span></td>\r\n\t\t\t\t\t\t<td><span *ngIf='condensed === false'>Sat</span><span *ngIf='condensed === true'>S</span></td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</thead>\r\n\r\n\t\t\t\t<tbody>\r\n\t\t\t\t\t<tr *ngFor=\"let week of month.weeks\">\r\n\t\t\t\t\t\t<td *ngFor=\"let day of week.days\" (click)=\"setDate(day)\" class=\"slick-calendar_date\" [ngClass]=\"{ 'slick-calendar_is-today': day.isToday, 'bg-success text-white': day.isSelected, 'slick-calendar_not_in_month': day.isInCurrentMonth === false, 'slick-calendar_inactive': day.isActive === false }\">\r\n\t\t\t\t\t\t\t<span *ngIf=\"showDaysNotInMonth === true || (showDaysNotInMonth === false && day.isInCurrentMonth === true)\">{{day.date | date:'d'}}</span>\r\n\t\t\t\t\t\t\t<span *ngIf=\"monthsToShow > 1 && (showDaysNotInMonth === false && day.isInCurrentMonth === false)\">&nbsp;</span>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</tbody>\r\n\t\t\t</table>\r\n\r\n\r\n\t\t</div>\r\n\r\n\t</div>\r\n</div>" }]
218
+ }], ctorParameters: function () { return []; }, propDecorators: { condensed: [{
219
+ type: Input
220
+ }], monthsToShow: [{
221
+ type: Input
222
+ }], inactiveDates: [{
223
+ type: Input
224
+ }], inactiveWeekends: [{
225
+ type: Input
226
+ }], showDaysNotInMonth: [{
227
+ type: Input
228
+ }], multiSelect: [{
229
+ type: Input
230
+ }], multiSelectDates: [{
231
+ type: Input
232
+ }], multiSelectDatesChange: [{
233
+ type: Output
234
+ }], onDateSelect: [{
235
+ type: Output
236
+ }], onDateChange: [{
237
+ type: Output
238
+ }], onMonthChange: [{
239
+ type: Output
240
+ }], onMultiDateChange: [{
241
+ type: Output
242
+ }], onClick: [{
243
+ type: HostListener,
244
+ args: ['click', ['$event', '$event.target']]
245
+ }] } });
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2stY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvc2xpY2stY2FsZW5kYXIvc2xpY2stY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvc2xpY2stY2FsZW5kYXIvc2xpY2stY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQW9DLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7OztBQUdqQyxNQUFNLFFBQVE7Q0FNYjtBQUVELE1BQU0sU0FBUztDQUVkO0FBRUQsTUFBTSxVQUFVO0NBR2Y7QUFZRCxNQUFNLE9BQU8sc0JBQXNCO0lBMEJsQztRQXpCUyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFDcEMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFNUIsMkJBQXNCLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUUsaUJBQVksR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUM1RCxpQkFBWSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVELGtCQUFhLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDN0Qsc0JB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QVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU2xpY2tVdGlsc1NlcnZpY2UgfSBmcm9tIFwiLi4vdXRpbHMvc2xpY2stdXRpbHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuXHJcblxyXG5jbGFzcyBEYXlNb2RlbCB7XHJcblx0ZGF0ZTogRGF0ZTtcclxuXHRpc1NlbGVjdGVkOiBib29sZWFuO1xyXG5cdGlzVG9kYXk6IGJvb2xlYW47XHJcblx0aXNJbkN1cnJlbnRNb250aDogYm9vbGVhbjtcclxuXHRpc0FjdGl2ZTogYm9vbGVhbjtcclxufVxyXG5cclxuY2xhc3MgV2Vla01vZGVsIHtcclxuXHRkYXlzOiBEYXlNb2RlbFtdO1xyXG59XHJcblxyXG5jbGFzcyBNb250aE1vZGVsIHtcclxuXHRtb250aERpc3BsYXk6IHN0cmluZztcclxuXHR3ZWVrczogV2Vla01vZGVsW11cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdzbGljay1jYWxlbmRhcicsXHJcblx0dGVtcGxhdGVVcmw6ICdzbGljay1jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXHJcblx0cHJvdmlkZXJzOiBbXHJcblx0XHR7XHJcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTbGlja0NhbGVuZGFyQ29tcG9uZW50KSxcclxuXHRcdFx0bXVsdGk6IHRydWUsXHJcblx0XHR9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xpY2tDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblx0QElucHV0KCkgY29uZGVuc2VkOiBib29sZWFuID0gZmFsc2U7XHJcblx0QElucHV0KCkgbW9udGhzVG9TaG93OiBudW1iZXIgPSAxO1xyXG5cdEBJbnB1dCgpIGluYWN0aXZlRGF0ZXM6IERhdGVbXSA9IFtdO1xyXG5cdEBJbnB1dCgpIGluYWN0aXZlV2Vla2VuZHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRASW5wdXQoKSBzaG93RGF5c05vdEluTW9udGg6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRASW5wdXQoKSBtdWx0aVNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdEBJbnB1dCgpIG11bHRpU2VsZWN0RGF0ZXM6IERhdGVbXTtcclxuXHRAT3V0cHV0KCkgbXVsdGlTZWxlY3REYXRlc0NoYW5nZTogRXZlbnRFbWl0dGVyPERhdGVbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVbXT4oKTtcclxuXHRAT3V0cHV0KCkgb25EYXRlU2VsZWN0OiBFdmVudEVtaXR0ZXI8RGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XHJcblx0QE91dHB1dCgpIG9uRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xyXG5cdEBPdXRwdXQoKSBvbk1vbnRoQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XHJcblx0QE91dHB1dCgpIG9uTXVsdGlEYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZVtdPigpO1xyXG5cclxuXHRASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50JywgJyRldmVudC50YXJnZXQnXSlcclxuXHRvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCB0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0YXJnZXRFbGVtZW50IHx8IFNsaWNrVXRpbHNTZXJ2aWNlLmNoZWNrUGFyZW50Q2xhc3NFeGlzdHModGFyZ2V0RWxlbWVudCwgXCJzbGlja0NhbGVuZGFyX21vbnRoXCIpKVxyXG5cdFx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHR1dWlkOiBzdHJpbmc7XHJcblx0c2VsZWN0ZWREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuXHR2aXNpYmxlRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblx0bW9udGhzOiBNb250aE1vZGVsW107XHJcblx0bWluV2lkdGg6IG51bWJlcjtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHR0aGlzLnV1aWQgPSBTbGlja1V0aWxzU2VydmljZS5uZXdHdWlkKCk7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHRoaXMucmVjYWxjKCk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcblx0XHRpZiAoY2hhbmdlcy5jb25kZW5zZWQpXHJcblx0XHRcdHRoaXMuY29uZGVuc2VkID0gKHRoaXMuY29uZGVuc2VkIHx8ICdmYWxzZScpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuXHRcdGlmIChjaGFuZ2VzLmluYWN0aXZlV2Vla2VuZHMpXHJcblx0XHRcdHRoaXMuaW5hY3RpdmVXZWVrZW5kcyA9ICh0aGlzLmluYWN0aXZlV2Vla2VuZHMgfHwgJ3RydWUnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XHJcblxyXG5cdFx0aWYgKGNoYW5nZXMuc2hvd0RheXNOb3RJbk1vbnRoKVxyXG5cdFx0XHR0aGlzLnNob3dEYXlzTm90SW5Nb250aCA9ICh0aGlzLnNob3dEYXlzTm90SW5Nb250aCB8fCAnZmFsc2UnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcclxuXHJcblx0XHRpZiAoY2hhbmdlcy5tdWx0aVNlbGVjdClcclxuXHRcdFx0dGhpcy5tdWx0aVNlbGVjdCA9ICh0aGlzLm11bHRpU2VsZWN0IHx8ICdmYWxzZScpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuXHRcdGNvbnN0IHdpZHRoUGVyQ2FsZW5kYXIgPSAodGhpcy5jb25kZW5zZWQpID8gMTgwIDogMjUwO1xyXG5cdFx0dGhpcy5taW5XaWR0aCA9IHRoaXMubW9udGhzVG9TaG93ICogd2lkdGhQZXJDYWxlbmRhcjtcclxuXHJcblx0XHR0aGlzLnJlY2FsYygpO1xyXG5cclxuXHR9XHJcblxyXG5cdHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuXHJcblx0Ly8gdGhpcyBpcyB0aGUgaW5pdGlhbCB2YWx1ZSBzZXQgdG8gdGhlIGNvbXBvbmVudFxyXG5cdHdyaXRlVmFsdWUob2JqOiBhbnkpIHtcclxuXHRcdGlmIChvYmopIHtcclxuXHRcdFx0aWYgKG1vbWVudChvYmopLmlzVmFsaWQoKSkge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlID0gb2JqO1xyXG5cdFx0XHRcdHRoaXMudmlzaWJsZURhdGUgPSBvYmo7XHJcblx0XHRcdFx0dGhpcy5yZWNhbGMoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRpZiAoIXRoaXMuc2VsZWN0ZWREYXRlICYmIHRoaXMub25EYXRlQ2hhbmdlKVxyXG5cdFx0XHRcdHRoaXMub25EYXRlQ2hhbmdlLmVtaXQobnVsbCk7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIHJlZ2lzdGVycyAnZm4nIHRoYXQgd2lsbCBiZSBmaXJlZCB3aGVuIGNoYW5nZXMgYXJlIG1hZGVcclxuXHQvLyB0aGlzIGlzIGhvdyB3ZSBlbWl0IHRoZSBjaGFuZ2VzIGJhY2sgdG8gdGhlIGZvcm1cclxuXHRyZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcclxuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XHJcblx0fVxyXG5cclxuXHQvLyBub3QgdXNlZCwgdXNlZCBmb3IgdG91Y2ggaW5wdXRcclxuXHRyZWdpc3Rlck9uVG91Y2hlZCgpIHsgfVxyXG5cclxuXHRwcmV2TW9udGgoKSB7XHJcblx0XHR0aGlzLnZpc2libGVEYXRlID0gbW9tZW50KHRoaXMudmlzaWJsZURhdGUpLnN1YnRyYWN0KHRoaXMubW9udGhzVG9TaG93LCBcIm1vbnRoc1wiKS50b0RhdGUoKTtcclxuXHRcdHRoaXMucmVjYWxjKCk7XHJcblxyXG5cdFx0aWYgKHRoaXMub25Nb250aENoYW5nZSkge1xyXG5cdFx0XHRsZXQgbW9udGhTdGFydCA9IG1vbWVudCh0aGlzLnZpc2libGVEYXRlKS5zdGFydE9mKFwibW9udGhcIik7XHJcblx0XHRcdGlmICh0aGlzLnNob3dEYXlzTm90SW5Nb250aCA9PT0gdHJ1ZSlcclxuXHRcdFx0XHRtb250aFN0YXJ0ID0gbW9udGhTdGFydC5zdGFydE9mKFwid2Vla1wiKTtcclxuXHJcblx0XHRcdHRoaXMub25Nb250aENoYW5nZS5lbWl0KG1vbnRoU3RhcnQudG9EYXRlKCkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bmV4dE1vbnRoKCkge1xyXG5cdFx0dGhpcy52aXNpYmxlRGF0ZSA9IG1vbWVudCh0aGlzLnZpc2libGVEYXRlKS5hZGQodGhpcy5tb250aHNUb1Nob3csIFwibW9udGhzXCIpLnRvRGF0ZSgpO1xyXG5cdFx0dGhpcy5yZWNhbGMoKTtcclxuXHJcblx0XHRpZiAodGhpcy5vbk1vbnRoQ2hhbmdlKSB7XHJcblx0XHRcdGxldCBtb250aFN0YXJ0ID0gbW9tZW50KHRoaXMudmlzaWJsZURhdGUpLnN0YXJ0T2YoXCJtb250aFwiKTtcclxuXHRcdFx0aWYgKHRoaXMuc2hvd0RheXNOb3RJbk1vbnRoID09PSB0cnVlKVxyXG5cdFx0XHRcdG1vbnRoU3RhcnQgPSBtb250aFN0YXJ0LnN0YXJ0T2YoXCJ3ZWVrXCIpO1xyXG5cclxuXHRcdFx0dGhpcy5vbk1vbnRoQ2hhbmdlLmVtaXQobW9udGhTdGFydC50b0RhdGUoKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzZWxlY3RNb250aChtb250aElkeCkge1xyXG5cdFx0Y29uc3QgbW9udGggPSB0aGlzLm1vbnRoc1ttb250aElkeF07XHJcblx0XHRsZXQgdmlzaWJsZURhdGUgPSBtb21lbnQodGhpcy52aXNpYmxlRGF0ZSk7XHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IG1vbnRoICsgdmlzaWJsZURhdGUuZm9ybWF0KFwiIDEsIFlZWVlcIik7XHJcblxyXG5cdFx0dGhpcy52aXNpYmxlRGF0ZSA9IG1vbWVudChkYXRlU3RyaW5nLCBcIk1NTU0gREQsIFlZWVlcIikudG9EYXRlKCk7XHJcblx0XHR0aGlzLnJlY2FsYygpO1xyXG5cdH1cclxuXHJcblx0c2V0RGF0ZShkYXlNb2RlbDogRGF5TW9kZWwpIHtcclxuXHRcdGlmICh0aGlzLnNob3dEYXlzTm90SW5Nb250aCA9PT0gZmFsc2UgJiYgZGF5TW9kZWwuaXNJbkN1cnJlbnRNb250aCA9PT0gZmFsc2UpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRpZiAoZGF5TW9kZWwuaXNBY3RpdmUgPT09IGZhbHNlKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0aWYgKHRoaXMubXVsdGlTZWxlY3QgPT09IGZhbHNlKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlID0gZGF5TW9kZWwuZGF0ZTtcclxuXHRcdFx0dGhpcy52aXNpYmxlRGF0ZSA9IGRheU1vZGVsLmRhdGU7XHJcblxyXG5cdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAodGhpcy5vbkRhdGVDaGFuZ2UpXHJcblx0XHRcdFx0dGhpcy5vbkRhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XHJcblxyXG5cdFx0XHRpZiAodGhpcy5vbkRhdGVTZWxlY3QpXHJcblx0XHRcdFx0dGhpcy5vbkRhdGVTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XHJcblxyXG5cdFx0XHQvLyBTYXkgd2UgaGF2ZSAzIG1vbnRocyBzaG93aW5nIGFuZCB0aGV5IHNlbGVjdCBhIGRhdGUgb24gdGhlIDNyZCBtb250aFxyXG5cdFx0XHQvLyBSZWNhbGMgd2lsbCByZS1kcmF3IHRoZSAzcmQgbW9udGggYXMgdGhlIGZpcnN0IG1vbnRoIGluc3RlYWQgb2YganVzdCBcclxuXHRcdFx0Ly8gaGlnbGlnaHRpbmcgdGhlIGRhdGUgb24gdGhlIDNyZCBtb250aC4gIEhpZ2hsaWdodCBpbnN0ZWFkLlxyXG5cdFx0XHRsZXQgZGF0ZUZvdW5kID0gZmFsc2U7XHJcblx0XHRcdGZvciAobGV0IG1vbnRoIG9mIHRoaXMubW9udGhzKSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgd2VlayBvZiBtb250aC53ZWVrcykge1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgZGF5IG9mIHdlZWsuZGF5cykge1xyXG5cdFx0XHRcdFx0XHRkYXkuaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRpZiAoZGF5LmlzSW5DdXJyZW50TW9udGggPT09IHRydWUgJiYgbW9tZW50KGRheS5kYXRlKS5pc1NhbWUodGhpcy5zZWxlY3RlZERhdGUsIFwiZGF0ZVwiKSkge1xyXG5cdFx0XHRcdFx0XHRcdGRheS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRkYXRlRm91bmQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBCdXQgaWYgdGhleSd2ZSBcclxuXHRcdFx0aWYgKGRhdGVGb3VuZCA9PT0gZmFsc2UpXHJcblx0XHRcdFx0dGhpcy5yZWNhbGMoKTtcclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHQvLyBUaGlzIHdpbGwgYmUgcmV2ZXJzZWQgc2luY2Ugd2UgaGF2ZW4ndCByZS1jYWxjZWQgdGhlIGRhdGVzIHlldC5cclxuXHRcdFx0aWYgKCFkYXlNb2RlbC5pc1NlbGVjdGVkKVxyXG5cdFx0XHRcdHRoaXMubXVsdGlTZWxlY3REYXRlcy5wdXNoKGRheU1vZGVsLmRhdGUpO1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRsZXQgZGF0ZUlkeCA9IHRoaXMubXVsdGlTZWxlY3REYXRlcy5maW5kSW5kZXgoZCA9PiBtb21lbnQoZCkuc3RhcnRPZihcImRhdGVcIikuaXNTYW1lKG1vbWVudChkYXlNb2RlbC5kYXRlKS5zdGFydE9mKFwiZGF0ZVwiKSkpO1xyXG5cdFx0XHRcdHRoaXMubXVsdGlTZWxlY3REYXRlcy5zcGxpY2UoZGF0ZUlkeCwgMSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aGlzLm9uTXVsdGlEYXRlQ2hhbmdlKVxyXG5cdFx0XHRcdHRoaXMub25NdWx0aURhdGVDaGFuZ2UuZW1pdCh0aGlzLm11bHRpU2VsZWN0RGF0ZXMpXHJcblxyXG5cdFx0XHRmb3IgKGxldCBtb250aCBvZiB0aGlzLm1vbnRocykge1xyXG5cdFx0XHRcdGZvciAobGV0IHdlZWsgb2YgbW9udGgud2Vla3MpIHtcclxuXHRcdFx0XHRcdGZvciAobGV0IGRheSBvZiB3ZWVrLmRheXMpIHtcclxuXHRcdFx0XHRcdFx0ZGF5LmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0aWYgKGRheS5pc0luQ3VycmVudE1vbnRoID09PSB0cnVlICYmICh0aGlzLm11bHRpU2VsZWN0RGF0ZXMuZmluZEluZGV4KHggPT4gbW9tZW50KHgpLmlzU2FtZShtb21lbnQoZGF5LmRhdGUpLCBcImRhdGVcIikpID49IDApKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGF5LmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZWNhbGMoKSB7XHJcblx0XHR0aGlzLm1vbnRocyA9IFtdO1xyXG5cclxuXHRcdGZvciAobGV0IG1vbnRoQ291bnQgPSAwOyBtb250aENvdW50IDwgdGhpcy5tb250aHNUb1Nob3c7IG1vbnRoQ291bnQrKykge1xyXG5cdFx0XHRsZXQgY3VycmVudERhdGUgPSBtb21lbnQodGhpcy52aXNpYmxlRGF0ZSkuc3RhcnRPZihcIm1vbnRoXCIpO1xyXG5cdFx0XHRjdXJyZW50RGF0ZSA9IG1vbWVudChjdXJyZW50RGF0ZSkuYWRkKG1vbnRoQ291bnQsIFwibW9udGhzXCIpXHJcblx0XHRcdGN1cnJlbnREYXRlID0gbW9tZW50KGN1cnJlbnREYXRlKS5zdGFydE9mKFwid2Vla1wiKS5zdGFydE9mKFwiZGF0ZVwiKTtcclxuXHJcblx0XHRcdGNvbnN0IG1vbnRoID0gbmV3IE1vbnRoTW9kZWwoKTtcclxuXHRcdFx0bW9udGgud2Vla3MgPSBbXTtcclxuXHJcblx0XHRcdC8vIEN1cnJlbnREYXRlIGlzIG1vc3QgbGlrZWx5IGdvaW5nIHRvIGJlIHRoZSBtb250aCBiZWZvcmUsIHNvIGFkZCAxNSBkYXlzIHRvIGdldCB0byB0aGUgbWlkZGxlIG9mIHRoZSBjdXJyZW50IG1vbnRoXHJcblx0XHRcdGNvbnN0IG1vbnRoVG9EaXNwbGF5ID0gbW9tZW50KGN1cnJlbnREYXRlKS5hZGQoMTUsIFwiZGF5c1wiKTtcclxuXHRcdFx0bW9udGgubW9udGhEaXNwbGF5ID0gKHRoaXMuY29uZGVuc2VkID09PSB0cnVlKSA/IG1vbnRoVG9EaXNwbGF5LmZvcm1hdChcIk1NTSBZWVlZXCIpIDogbW9udGhUb0Rpc3BsYXkuZm9ybWF0KFwiTU1NIFlZWVlcIik7XHJcblxyXG5cdFx0XHRmb3IgKGxldCB3ZWVrQ291bnQgPSAwOyB3ZWVrQ291bnQgPCA2OyB3ZWVrQ291bnQrKykge1xyXG5cdFx0XHRcdGNvbnN0IHdlZWsgPSBuZXcgV2Vla01vZGVsKCk7XHJcblx0XHRcdFx0d2Vlay5kYXlzID0gW107XHJcblxyXG5cdFx0XHRcdGZvciAobGV0IGRheUNvdW50ID0gMDsgZGF5Q291bnQgPCA3OyBkYXlDb3VudCsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXkgPSBuZXcgRGF5TW9kZWwoKTtcclxuXHRcdFx0XHRcdGRheS5kYXRlID0gY3VycmVudERhdGUudG9EYXRlKCk7XHJcblx0XHRcdFx0XHRkYXkuaXNUb2RheSA9IG1vbWVudCgpLmlzU2FtZShjdXJyZW50RGF0ZSwgXCJkYXRlXCIpO1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMubXVsdGlTZWxlY3QgJiYgdGhpcy5tdWx0aVNlbGVjdERhdGVzKVxyXG5cdFx0XHRcdFx0XHRkYXkuaXNTZWxlY3RlZCA9ICh0aGlzLm11bHRpU2VsZWN0RGF0ZXMuZmluZEluZGV4KHggPT4gbW9tZW50KHgpLmlzU2FtZShtb21lbnQoZGF5LmRhdGUpLCBcImRhdGVcIikpID49IDApO1xyXG5cdFx0XHRcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0XHRkYXkuaXNTZWxlY3RlZCA9IG1vbWVudCh0aGlzLnNlbGVjdGVkRGF0ZSkuaXNTYW1lKGN1cnJlbnREYXRlLCBcImRhdGVcIik7XHJcblxyXG5cdFx0XHRcdFx0ZGF5LmlzSW5DdXJyZW50TW9udGggPSAoY3VycmVudERhdGUubW9udGgoKSA9PT0gbW9udGhUb0Rpc3BsYXkubW9udGgoKSk7XHJcblxyXG5cdFx0XHRcdFx0ZGF5LmlzQWN0aXZlID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRpZiAodGhpcy5pbmFjdGl2ZVdlZWtlbmRzICYmIGN1cnJlbnREYXRlLmRheSgpID09PSA2IHx8IGN1cnJlbnREYXRlLmRheSgpID09PSA3KVxyXG5cdFx0XHRcdFx0XHRkYXkuaXNBY3RpdmUgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRpZiAodGhpcy5pbmFjdGl2ZURhdGVzICYmIHRoaXMuaW5hY3RpdmVEYXRlcy5maW5kSW5kZXgoeCA9PiBtb21lbnQoeCkuaXNTYW1lKGN1cnJlbnREYXRlLCBcImRhdGVcIikpID49IDApXHJcblx0XHRcdFx0XHRcdGRheS5pc0FjdGl2ZSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdGlmICh0aGlzLnNob3dEYXlzTm90SW5Nb250aCA9PT0gZmFsc2UgJiYgZGF5LmlzSW5DdXJyZW50TW9udGggPT09IGZhbHNlKVxyXG5cdFx0XHRcdFx0XHRkYXkuaXNBY3RpdmUgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHQvLyBJdCdzIHBvc3NpYmxlIGZvciB0aGUgZGF5IHRvIGJlIGluIHRoZSBtb250aCBkaXNwbGF5LCBidXQgaGlkZGVuLCBidXQgYWN0aXZlXHJcblx0XHRcdFx0XHRpZiAoZGF5LmlzQWN0aXZlID09PSBmYWxzZSlcclxuXHRcdFx0XHRcdFx0ZGF5LmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRpZiAoZGF5LmlzSW5DdXJyZW50TW9udGggPT09IGZhbHNlKVxyXG5cdFx0XHRcdFx0XHRkYXkuaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdHdlZWsuZGF5cy5wdXNoKGRheSk7XHJcblxyXG5cdFx0XHRcdFx0Y3VycmVudERhdGUgPSBtb21lbnQoY3VycmVudERhdGUpLmFkZCgxLCBcImRheXNcIik7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRtb250aC53ZWVrcy5wdXNoKHdlZWspO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLm1vbnRocy5wdXNoKG1vbnRoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG59IiwiPGRpdiBjbGFzcz1cInNsaWNrLWNhbGVuZGFyIGRlZmF1bHQtd2lkdGggY2FyZFwiIGlkPVwic2xpY2stY2FsZW5kYXJfe3t1dWlkfX1cIiBbc3R5bGUubWluV2lkdGgucHhdPVwibWluV2lkdGhcIiBbbmdDbGFzc109XCJ7J3NsaWNrLWNhbGVuZGFyX2NvbmRlbnNlZCc6IGNvbmRlbnNlZCA9PT0gdHJ1ZSwgJ3NsaWNrLWNhbGVuZGFyX3NpbmdsZSc6IG1vbnRoc1RvU2hvdyA9PT0gMSB9XCI+XHJcblx0PGRpdiBjbGFzcz1cInNsaWNrLWNhbGVuZGFyX3ByZXYtbW9udGhcIiAoY2xpY2spPVwicHJldk1vbnRoKClcIj48aSBjbGFzcz1cImZhciBmYS1jaGV2cm9uLWxlZnRcIj48L2k+PC9kaXY+XHJcblx0PGRpdiBjbGFzcz1cInNsaWNrLWNhbGVuZGFyX25leHQtbW9udGhcIiAoY2xpY2spPVwibmV4dE1vbnRoKClcIj48aSBjbGFzcz1cImZhciBmYS1jaGV2cm9uLXJpZ2h0XCI+PC9pPjwvZGl2PlxyXG5cclxuXHQ8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1hcm91bmQgcHQtMlwiIFtuZ0NsYXNzXT1cInsgJ214LTMnOiBtb250aHNUb1Nob3cgPiAxLCAnbXgtMSc6IG1vbnRoc1RvU2hvdyA9PT0gMSB9XCI+XHJcblx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBtb250aCBvZiBtb250aHNcIiBjbGFzcz1cImZsZXgtZmlsbCBteC0yXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7bWF4LXdpZHRoOiAyMjBweDtcIj5cclxuXHJcblx0XHRcdDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXNtIHRhYmxlLWJvcmRlcmxlc3NcIiBzdHlsZT1cInRhYmxlLWxheW91dDogZml4ZWQ7IFwiPlxyXG5cdFx0XHRcdDx0aGVhZD5cclxuXHRcdFx0XHRcdDx0ciBjbGFzcz1cInNsaWNrLWNhbGVuZGFyX21vbnRoLWRpc3BsYXlcIj5cclxuXHRcdFx0XHRcdFx0PHRkIGNvbHNwYW49XCI3XCI+PGI+e3ttb250aC5tb250aERpc3BsYXl9fTwvYj48L3RkPlxyXG5cdFx0XHRcdFx0PC90cj5cclxuXHRcdFx0XHRcdDx0ciBjbGFzcz1cInNsaWNrLWNhbGVuZGFyX2RheXMtb2Ytd2Vla1wiPlxyXG5cdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gKm5nSWY9J2NvbmRlbnNlZCA9PT0gZmFsc2UnPlN1bjwvc3Bhbj48c3BhbiAqbmdJZj0nY29uZGVuc2VkID09PSB0cnVlJz5TPC9zcGFuPjwvdGQ+XHJcblx0XHRcdFx0XHRcdDx0ZD48c3BhbiAqbmdJZj0nY29uZGVuc2VkID09PSBmYWxzZSc+TW9uPC9zcGFuPjxzcGFuICpuZ0lmPSdjb25kZW5zZWQgPT09IHRydWUnPk08L3NwYW4+PC90ZD5cclxuXHRcdFx0XHRcdFx0PHRkPjxzcGFuICpuZ0lmPSdjb25kZW5zZWQgPT09IGZhbHNlJz5UdWU8L3NwYW4+PHNwYW4gKm5nSWY9J2NvbmRlbnNlZCA9PT0gdHJ1ZSc+VDwvc3Bhbj48L3RkPlxyXG5cdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gKm5nSWY9J2NvbmRlbnNlZCA9PT0gZmFsc2UnPldlZDwvc3Bhbj48c3BhbiAqbmdJZj0nY29uZGVuc2VkID09PSB0cnVlJz5XPC9zcGFuPjwvdGQ+XHJcblx0XHRcdFx0XHRcdDx0ZD48c3BhbiAqbmdJZj0nY29uZGVuc2VkID09PSBmYWxzZSc+VGh1PC9zcGFuPjxzcGFuICpuZ0lmPSdjb25kZW5zZWQgPT09IHRydWUnPlRoPC9zcGFuPjwvdGQ+XHJcblx0XHRcdFx0XHRcdDx0ZD48c3BhbiAqbmdJZj0nY29uZGVuc2VkID09PSBmYWxzZSc+RnJpPC9zcGFuPjxzcGFuICpuZ0lmPSdjb25kZW5zZWQgPT09IHRydWUnPkY8L3NwYW4+PC90ZD5cclxuXHRcdFx0XHRcdFx0PHRkPjxzcGFuICpuZ0lmPSdjb25kZW5zZWQgPT09IGZhbHNlJz5TYXQ8L3NwYW4+PHNwYW4gKm5nSWY9J2NvbmRlbnNlZCA9PT0gdHJ1ZSc+Uzwvc3Bhbj48L3RkPlxyXG5cdFx0XHRcdFx0PC90cj5cclxuXHRcdFx0XHQ8L3RoZWFkPlxyXG5cclxuXHRcdFx0XHQ8dGJvZHk+XHJcblx0XHRcdFx0XHQ8dHIgKm5nRm9yPVwibGV0IHdlZWsgb2YgbW9udGgud2Vla3NcIj5cclxuXHRcdFx0XHRcdFx0PHRkICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vlay5kYXlzXCIgKGNsaWNrKT1cInNldERhdGUoZGF5KVwiIGNsYXNzPVwic2xpY2stY2FsZW5kYXJfZGF0ZVwiIFtuZ0NsYXNzXT1cInsgJ3NsaWNrLWNhbGVuZGFyX2lzLXRvZGF5JzogZGF5LmlzVG9kYXksICdiZy1zdWNjZXNzIHRleHQtd2hpdGUnOiBkYXkuaXNTZWxlY3RlZCwgJ3NsaWNrLWNhbGVuZGFyX25vdF9pbl9tb250aCc6IGRheS5pc0luQ3VycmVudE1vbnRoID09PSBmYWxzZSwgJ3NsaWNrLWNhbGVuZGFyX2luYWN0aXZlJzogZGF5LmlzQWN0aXZlID09PSBmYWxzZSB9XCI+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJzaG93RGF5c05vdEluTW9udGggPT09IHRydWUgfHwgKHNob3dEYXlzTm90SW5Nb250aCA9PT0gZmFsc2UgJiYgZGF5LmlzSW5DdXJyZW50TW9udGggPT09IHRydWUpXCI+e3tkYXkuZGF0ZSB8IGRhdGU6J2QnfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJtb250aHNUb1Nob3cgPiAxICYmIChzaG93RGF5c05vdEluTW9udGggPT09IGZhbHNlICYmIGRheS5pc0luQ3VycmVudE1vbnRoID09PSBmYWxzZSlcIj4mbmJzcDs8L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0XHQ8L3RyPlxyXG5cdFx0XHRcdDwvdGJvZHk+XHJcblx0XHRcdDwvdGFibGU+XHJcblxyXG5cclxuXHRcdDwvZGl2PlxyXG5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+Il19
@@ -0,0 +1,19 @@
1
+ import { NgModule } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { SlickCalendarComponent } from "./slick-calendar.component";
4
+ import * as i0 from "@angular/core";
5
+ export class SlickCalendarModule {
6
+ }
7
+ /** @nocollapse */ SlickCalendarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickCalendarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ /** @nocollapse */ SlickCalendarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickCalendarModule, declarations: [SlickCalendarComponent], imports: [CommonModule], exports: [SlickCalendarComponent] });
9
+ /** @nocollapse */ SlickCalendarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickCalendarModule, imports: [[CommonModule]] });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickCalendarModule, decorators: [{
11
+ type: NgModule,
12
+ args: [{
13
+ imports: [CommonModule],
14
+ declarations: [SlickCalendarComponent],
15
+ exports: [SlickCalendarComponent]
16
+ }]
17
+ }] });
18
+ export { SlickCalendarComponent };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2stY2FsZW5kYXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvc2xpY2stY2FsZW5kYXIvc2xpY2stY2FsZW5kYXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQU9wRSxNQUFNLE9BQU8sbUJBQW1COzttSUFBbkIsbUJBQW1CO29JQUFuQixtQkFBbUIsaUJBSGhCLHNCQUFzQixhQUQzQixZQUFZLGFBRVosc0JBQXNCO29JQUVwQixtQkFBbUIsWUFKdEIsQ0FBQyxZQUFZLENBQUM7MkZBSVgsbUJBQW1CO2tCQUwvQixRQUFRO21CQUFDO29CQUNULE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsWUFBWSxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ3RDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNqQzs7QUFHRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBTbGlja0NhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSBcIi4vc2xpY2stY2FsZW5kYXIuY29tcG9uZW50XCI7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG5cdGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG5cdGRlY2xhcmF0aW9uczogW1NsaWNrQ2FsZW5kYXJDb21wb25lbnRdLFxyXG5cdGV4cG9ydHM6IFtTbGlja0NhbGVuZGFyQ29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xpY2tDYWxlbmRhck1vZHVsZSB7IH1cclxuXHJcbmV4cG9ydCB7IFNsaWNrQ2FsZW5kYXJDb21wb25lbnQgfVxyXG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { Component } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export class SlickCardHeaderComponent {
4
+ }
5
+ /** @nocollapse */ SlickCardHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickCardHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
+ /** @nocollapse */ SlickCardHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: SlickCardHeaderComponent, selector: "slick-card-header", ngImport: i0, template: "<div class='card-header'><ng-content></ng-content></div>", isInline: true });
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: SlickCardHeaderComponent, decorators: [{
8
+ type: Component,
9
+ args: [{
10
+ selector: "slick-card-header",
11
+ template: "<div class='card-header'><ng-content></ng-content></div>"
12
+ }]
13
+ }] });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2stY2FyZC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvc2xpY2stY2FyZC9zbGljay1jYXJkLWhlYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNMUMsTUFBTSxPQUFPLHdCQUF3Qjs7d0lBQXhCLHdCQUF3Qjs0SEFBeEIsd0JBQXdCLHlEQUYxQiwwREFBMEQ7MkZBRXhELHdCQUF3QjtrQkFKcEMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixRQUFRLEVBQUUsMERBQTBEO2lCQUNwRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogXCJzbGljay1jYXJkLWhlYWRlclwiLFxyXG5cdHRlbXBsYXRlOiBcIjxkaXYgY2xhc3M9J2NhcmQtaGVhZGVyJz48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9kaXY+XCJcclxufSlcclxuZXhwb3J0IGNsYXNzIFNsaWNrQ2FyZEhlYWRlckNvbXBvbmVudCB7fSJdfQ==