cmat 0.0.3

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 (680) hide show
  1. package/README.md +3 -0
  2. package/animations/defaults.d.ts +11 -0
  3. package/animations/drop.d.ts +2 -0
  4. package/animations/expand-collapse.d.ts +2 -0
  5. package/animations/fade.d.ts +11 -0
  6. package/animations/index.d.ts +5 -0
  7. package/animations/public-api.d.ts +1 -0
  8. package/animations/shake.d.ts +2 -0
  9. package/animations/slide.d.ts +9 -0
  10. package/animations/transform.d.ts +2 -0
  11. package/animations/zoom.d.ts +3 -0
  12. package/components/adapter/datetime-adapter.d.ts +45 -0
  13. package/components/adapter/datetime-formats.d.ts +22 -0
  14. package/components/adapter/dayjs-date-adapter.d.ts +63 -0
  15. package/components/adapter/dayjs-date-formats.d.ts +2 -0
  16. package/components/adapter/dayjs-datetime-adapter.d.ts +22 -0
  17. package/components/adapter/dayjs-datetime-formats.d.ts +2 -0
  18. package/components/adapter/index.d.ts +5 -0
  19. package/components/adapter/native-datetime-adapter.d.ts +31 -0
  20. package/components/adapter/native-datetime-formats.d.ts +2 -0
  21. package/components/adapter/public-api.d.ts +8 -0
  22. package/components/breadcrumb/breadcrumb-item.directive.d.ts +10 -0
  23. package/components/breadcrumb/breadcrumb.component.d.ts +57 -0
  24. package/components/breadcrumb/breadcrumb.component.scss +18 -0
  25. package/components/breadcrumb/breadcrumb.service.d.ts +126 -0
  26. package/components/breadcrumb/index.d.ts +5 -0
  27. package/components/breadcrumb/public-api.d.ts +3 -0
  28. package/components/breadcrumb/types/breadcrumb.config.d.ts +33 -0
  29. package/components/breadcrumb/types/breadcrumb.d.ts +23 -0
  30. package/components/card/card.component.d.ts +20 -0
  31. package/components/card/card.component.scss +63 -0
  32. package/components/card/card.types.d.ts +1 -0
  33. package/components/card/index.d.ts +5 -0
  34. package/components/card/public-api.d.ts +1 -0
  35. package/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.d.ts +14 -0
  36. package/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.scss +43 -0
  37. package/components/cascade/cascade-list/cascade-list.component.d.ts +52 -0
  38. package/components/cascade/cascade-list/cascade-list.component.scss +22 -0
  39. package/components/cascade/cascade-menu/cascade-menu.component.d.ts +10 -0
  40. package/components/cascade/cascade-menu/cascade-menu.component.scss +48 -0
  41. package/components/cascade/index.d.ts +5 -0
  42. package/components/cascade/options.interface.d.ts +8 -0
  43. package/components/cascade/public-api.d.ts +2 -0
  44. package/components/date-range/date-range.component.d.ts +134 -0
  45. package/components/date-range/date-range.component.scss +232 -0
  46. package/components/date-range/index.d.ts +5 -0
  47. package/components/date-range/public-api.d.ts +1 -0
  48. package/components/drawer/drawer.component.d.ts +75 -0
  49. package/components/drawer/drawer.component.scss +133 -0
  50. package/components/drawer/drawer.service.d.ts +26 -0
  51. package/components/drawer/drawer.types.d.ts +2 -0
  52. package/components/drawer/index.d.ts +5 -0
  53. package/components/drawer/public-api.d.ts +3 -0
  54. package/components/fullscreen/fullscreen.component.d.ts +18 -0
  55. package/components/fullscreen/fullscreen.types.d.ts +13 -0
  56. package/components/fullscreen/index.d.ts +5 -0
  57. package/components/fullscreen/public-api.d.ts +2 -0
  58. package/components/highlight/highlight.component.d.ts +21 -0
  59. package/components/highlight/highlight.component.scss +3 -0
  60. package/components/highlight/highlight.service.d.ts +7 -0
  61. package/components/highlight/index.d.ts +5 -0
  62. package/components/highlight/public-api.d.ts +2 -0
  63. package/components/masonry/index.d.ts +5 -0
  64. package/components/masonry/masonry.component.d.ts +13 -0
  65. package/components/masonry/public-api.d.ts +1 -0
  66. package/components/material-color-picker/base-color.d.ts +1 -0
  67. package/components/material-color-picker/index.d.ts +5 -0
  68. package/components/material-color-picker/material-color-picker.component.d.ts +35 -0
  69. package/components/material-color-picker/material-color-picker.component.scss +5 -0
  70. package/components/material-color-picker/public-api.d.ts +2 -0
  71. package/components/material-color-picker/selected-color.d.ts +5 -0
  72. package/components/material-datetimepicker/calendar-body.d.ts +43 -0
  73. package/components/material-datetimepicker/calendar-body.scss +58 -0
  74. package/components/material-datetimepicker/calendar.d.ts +146 -0
  75. package/components/material-datetimepicker/calendar.scss +194 -0
  76. package/components/material-datetimepicker/clock.d.ts +74 -0
  77. package/components/material-datetimepicker/clock.scss +90 -0
  78. package/components/material-datetimepicker/datetimepicker-animations.d.ts +4 -0
  79. package/components/material-datetimepicker/datetimepicker-content.scss +151 -0
  80. package/components/material-datetimepicker/datetimepicker-errors.d.ts +1 -0
  81. package/components/material-datetimepicker/datetimepicker-filtertype.d.ts +5 -0
  82. package/components/material-datetimepicker/datetimepicker-input.d.ts +106 -0
  83. package/components/material-datetimepicker/datetimepicker-intl.d.ts +51 -0
  84. package/components/material-datetimepicker/datetimepicker-toggle.d.ts +40 -0
  85. package/components/material-datetimepicker/datetimepicker-types.d.ts +13 -0
  86. package/components/material-datetimepicker/datetimepicker.d.ts +195 -0
  87. package/components/material-datetimepicker/datetimepicker.scss +145 -0
  88. package/components/material-datetimepicker/index.d.ts +5 -0
  89. package/components/material-datetimepicker/month-view.d.ts +64 -0
  90. package/components/material-datetimepicker/multi-year-view.d.ts +74 -0
  91. package/components/material-datetimepicker/public-api.d.ts +9 -0
  92. package/components/material-datetimepicker/time.d.ts +129 -0
  93. package/components/material-datetimepicker/time.scss +82 -0
  94. package/components/material-datetimepicker/year-view.d.ts +56 -0
  95. package/components/navigation/horizontal/components/basic/basic.component.d.ts +27 -0
  96. package/components/navigation/horizontal/components/branch/branch.component.d.ts +39 -0
  97. package/components/navigation/horizontal/components/divider/divider.component.d.ts +23 -0
  98. package/components/navigation/horizontal/components/spacer/spacer.component.d.ts +23 -0
  99. package/components/navigation/horizontal/horizontal.component.d.ts +43 -0
  100. package/components/navigation/horizontal/horizontal.component.scss +167 -0
  101. package/components/navigation/index.d.ts +5 -0
  102. package/components/navigation/navigation.service.d.ts +71 -0
  103. package/components/navigation/navigation.types.d.ts +34 -0
  104. package/components/navigation/public-api.d.ts +4 -0
  105. package/components/navigation/vertical/components/aside/aside.component.d.ts +63 -0
  106. package/components/navigation/vertical/components/basic/basic.component.d.ts +30 -0
  107. package/components/navigation/vertical/components/collapsable/collapsable.component.d.ts +74 -0
  108. package/components/navigation/vertical/components/divider/divider.component.d.ts +26 -0
  109. package/components/navigation/vertical/components/group/group.component.d.ts +36 -0
  110. package/components/navigation/vertical/components/spacer/spacer.component.d.ts +26 -0
  111. package/components/navigation/vertical/styles/appearances/compact.scss +103 -0
  112. package/components/navigation/vertical/styles/appearances/default.scss +550 -0
  113. package/components/navigation/vertical/styles/appearances/dense.scss +171 -0
  114. package/components/navigation/vertical/styles/appearances/thin.scss +91 -0
  115. package/components/navigation/vertical/vertical.component.d.ts +176 -0
  116. package/components/navigation/vertical/vertical.component.scss +4 -0
  117. package/components/pagination/index.d.ts +5 -0
  118. package/components/pagination/pagination.component.d.ts +24 -0
  119. package/components/pagination/pagination.directive.d.ts +40 -0
  120. package/components/pagination/pagination.instance.d.ts +11 -0
  121. package/components/pagination/pagination.pipe.d.ts +29 -0
  122. package/components/pagination/pagination.service.d.ts +20 -0
  123. package/components/pagination/public-api.d.ts +4 -0
  124. package/components/password-strength/animations/index.d.ts +4 -0
  125. package/components/password-strength/enum.d.ts +13 -0
  126. package/components/password-strength/index.d.ts +5 -0
  127. package/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.d.ts +11 -0
  128. package/components/password-strength/mat-password-strength/mat-password-strength.component.d.ts +52 -0
  129. package/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.d.ts +16 -0
  130. package/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.scss +19 -0
  131. package/components/password-strength/mat-password-strength-validator.d.ts +6 -0
  132. package/components/password-strength/public-api.d.ts +3 -0
  133. package/components/password-strength/regexp.class.d.ts +6 -0
  134. package/components/popover/index.d.ts +5 -0
  135. package/components/popover/popover.component.d.ts +139 -0
  136. package/components/popover/popover.component.scss +174 -0
  137. package/components/popover/popover.errors.d.ts +14 -0
  138. package/components/popover/popover.interfaces.d.ts +44 -0
  139. package/components/popover/popover.type.d.ts +5 -0
  140. package/components/popover/public-api.d.ts +1 -0
  141. package/components/progress-bar/index.d.ts +5 -0
  142. package/components/progress-bar/progress-bar.component.d.ts +17 -0
  143. package/components/progress-bar/progress-bar.component.scss +7 -0
  144. package/components/progress-bar/public-api.d.ts +1 -0
  145. package/components/rating/index.d.ts +5 -0
  146. package/components/rating/public-api.d.ts +1 -0
  147. package/components/rating/rating.component.d.ts +28 -0
  148. package/components/rating/rating.component.scss +33 -0
  149. package/components/select-search/default-options.d.ts +8 -0
  150. package/components/select-search/index.d.ts +5 -0
  151. package/components/select-search/public-api.d.ts +2 -0
  152. package/components/select-search/select-no-entries-found.directive.d.ts +5 -0
  153. package/components/select-search/select-search-clear.directive.d.ts +5 -0
  154. package/components/select-search/select-search.component.d.ts +91 -0
  155. package/components/select-search/select-search.component.scss +126 -0
  156. package/components/select-tree/index.d.ts +5 -0
  157. package/components/select-tree/public-api.d.ts +1 -0
  158. package/components/select-tree/select-tree.component.d.ts +85 -0
  159. package/components/select-tree/select-tree.component.scss +54 -0
  160. package/components/select-tree/select-tree.flatnode.d.ts +6 -0
  161. package/components/select-tree/select-tree.node.d.ts +5 -0
  162. package/components/timeline/index.d.ts +5 -0
  163. package/components/timeline/public-api.d.ts +2 -0
  164. package/components/timeline/timeline-item/timeline-item.component.d.ts +25 -0
  165. package/components/timeline/timeline-item/timeline-item.component.scss +329 -0
  166. package/components/timeline/timeline.component.d.ts +32 -0
  167. package/components/timeline/timeline.component.scss +42 -0
  168. package/components/toast/index.d.ts +5 -0
  169. package/components/toast/models/global-config.model.d.ts +12 -0
  170. package/components/toast/models/toast.model.d.ts +6 -0
  171. package/components/toast/models/type.model.d.ts +12 -0
  172. package/components/toast/public-api.d.ts +2 -0
  173. package/components/toast/toast-modal.component.d.ts +18 -0
  174. package/components/toast/toast-modal.component.scss +119 -0
  175. package/components/toast/toast.component.d.ts +17 -0
  176. package/components/toast/toast.component.scss +62 -0
  177. package/components/toast/toast.service.d.ts +26 -0
  178. package/components/transfer-picker/filter/filter.component.d.ts +24 -0
  179. package/components/transfer-picker/filter/filter.component.scss +40 -0
  180. package/components/transfer-picker/index.d.ts +5 -0
  181. package/components/transfer-picker/interface.d.ts +42 -0
  182. package/components/transfer-picker/public-api.d.ts +7 -0
  183. package/components/transfer-picker/search/search.component.d.ts +14 -0
  184. package/components/transfer-picker/search/search.component.scss +7 -0
  185. package/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.d.ts +49 -0
  186. package/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.scss +25 -0
  187. package/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.d.ts +12 -0
  188. package/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.scss +27 -0
  189. package/components/transfer-picker/transfer-picker.component.d.ts +28 -0
  190. package/components/transfer-picker/transfer-picker.component.scss +8 -0
  191. package/components/transfer-picker/transfer-picker.service.d.ts +31 -0
  192. package/directives/animate-on-scroll/animate-on-scroll.directive.d.ts +29 -0
  193. package/directives/animate-on-scroll/index.d.ts +5 -0
  194. package/directives/animate-on-scroll/public-api.d.ts +1 -0
  195. package/directives/animate-on-scroll/scroll.service.d.ts +15 -0
  196. package/directives/autofocus/autofocus.directive.d.ts +10 -0
  197. package/directives/autofocus/index.d.ts +5 -0
  198. package/directives/autofocus/public-api.d.ts +1 -0
  199. package/directives/debounce/abstract-debounce.directive.d.ts +15 -0
  200. package/directives/debounce/debounce-click.directive.d.ts +8 -0
  201. package/directives/debounce/debounce-keyup.directive.d.ts +8 -0
  202. package/directives/debounce/index.d.ts +5 -0
  203. package/directives/debounce/public-api.d.ts +2 -0
  204. package/directives/digit-only/digit-only.directive.d.ts +34 -0
  205. package/directives/digit-only/index.d.ts +5 -0
  206. package/directives/digit-only/mask.directive.d.ts +14 -0
  207. package/directives/digit-only/public-api.d.ts +2 -0
  208. package/directives/equal-validator/equal-validator.directive.d.ts +14 -0
  209. package/directives/equal-validator/index.d.ts +5 -0
  210. package/directives/equal-validator/public-api.d.ts +1 -0
  211. package/esm2022/animations/cmat-animations.mjs +5 -0
  212. package/esm2022/animations/defaults.mjs +12 -0
  213. package/esm2022/animations/drop.mjs +26 -0
  214. package/esm2022/animations/expand-collapse.mjs +17 -0
  215. package/esm2022/animations/fade.mjs +170 -0
  216. package/esm2022/animations/public-api.mjs +19 -0
  217. package/esm2022/animations/shake.mjs +59 -0
  218. package/esm2022/animations/slide.mjs +124 -0
  219. package/esm2022/animations/transform.mjs +16 -0
  220. package/esm2022/animations/zoom.mjs +38 -0
  221. package/esm2022/cmat.mjs +5 -0
  222. package/esm2022/components/adapter/cmat-components-adapter.mjs +5 -0
  223. package/esm2022/components/adapter/datetime-adapter.mjs +127 -0
  224. package/esm2022/components/adapter/datetime-formats.mjs +3 -0
  225. package/esm2022/components/adapter/dayjs-date-adapter.mjs +198 -0
  226. package/esm2022/components/adapter/dayjs-date-formats.mjs +12 -0
  227. package/esm2022/components/adapter/dayjs-datetime-adapter.mjs +100 -0
  228. package/esm2022/components/adapter/dayjs-datetime-formats.mjs +21 -0
  229. package/esm2022/components/adapter/native-datetime-adapter.mjs +130 -0
  230. package/esm2022/components/adapter/native-datetime-formats.mjs +15 -0
  231. package/esm2022/components/adapter/public-api.mjs +9 -0
  232. package/esm2022/components/breadcrumb/breadcrumb-item.directive.mjs +19 -0
  233. package/esm2022/components/breadcrumb/breadcrumb.component.mjs +95 -0
  234. package/esm2022/components/breadcrumb/breadcrumb.service.mjs +336 -0
  235. package/esm2022/components/breadcrumb/cmat-components-breadcrumb.mjs +5 -0
  236. package/esm2022/components/breadcrumb/public-api.mjs +4 -0
  237. package/esm2022/components/breadcrumb/types/breadcrumb.config.mjs +2 -0
  238. package/esm2022/components/breadcrumb/types/breadcrumb.mjs +2 -0
  239. package/esm2022/components/card/card.component.mjs +58 -0
  240. package/esm2022/components/card/card.types.mjs +2 -0
  241. package/esm2022/components/card/cmat-components-card.mjs +5 -0
  242. package/esm2022/components/card/public-api.mjs +2 -0
  243. package/esm2022/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.mjs +53 -0
  244. package/esm2022/components/cascade/cascade-list/cascade-list.component.mjs +263 -0
  245. package/esm2022/components/cascade/cascade-menu/cascade-menu.component.mjs +29 -0
  246. package/esm2022/components/cascade/cmat-components-cascade.mjs +5 -0
  247. package/esm2022/components/cascade/options.interface.mjs +2 -0
  248. package/esm2022/components/cascade/public-api.mjs +3 -0
  249. package/esm2022/components/date-range/cmat-components-date-range.mjs +5 -0
  250. package/esm2022/components/date-range/date-range.component.mjs +540 -0
  251. package/esm2022/components/date-range/public-api.mjs +2 -0
  252. package/esm2022/components/drawer/cmat-components-drawer.mjs +5 -0
  253. package/esm2022/components/drawer/drawer.component.mjs +301 -0
  254. package/esm2022/components/drawer/drawer.service.mjs +41 -0
  255. package/esm2022/components/drawer/drawer.types.mjs +2 -0
  256. package/esm2022/components/drawer/public-api.mjs +4 -0
  257. package/esm2022/components/fullscreen/cmat-components-fullscreen.mjs +5 -0
  258. package/esm2022/components/fullscreen/fullscreen.component.mjs +101 -0
  259. package/esm2022/components/fullscreen/fullscreen.types.mjs +2 -0
  260. package/esm2022/components/fullscreen/public-api.mjs +3 -0
  261. package/esm2022/components/highlight/cmat-components-highlight.mjs +5 -0
  262. package/esm2022/components/highlight/highlight.component.mjs +80 -0
  263. package/esm2022/components/highlight/highlight.service.mjs +47 -0
  264. package/esm2022/components/highlight/public-api.mjs +3 -0
  265. package/esm2022/components/masonry/cmat-components-masonry.mjs +5 -0
  266. package/esm2022/components/masonry/masonry.component.mjs +54 -0
  267. package/esm2022/components/masonry/public-api.mjs +2 -0
  268. package/esm2022/components/material-color-picker/base-color.mjs +13 -0
  269. package/esm2022/components/material-color-picker/cmat-components-material-color-picker.mjs +5 -0
  270. package/esm2022/components/material-color-picker/material-color-picker.component.mjs +138 -0
  271. package/esm2022/components/material-color-picker/public-api.mjs +3 -0
  272. package/esm2022/components/material-color-picker/selected-color.mjs +3 -0
  273. package/esm2022/components/material-datetimepicker/calendar-body.mjs +80 -0
  274. package/esm2022/components/material-datetimepicker/calendar.mjs +678 -0
  275. package/esm2022/components/material-datetimepicker/clock.mjs +293 -0
  276. package/esm2022/components/material-datetimepicker/cmat-components-material-datetimepicker.mjs +5 -0
  277. package/esm2022/components/material-datetimepicker/datetimepicker-animations.mjs +34 -0
  278. package/esm2022/components/material-datetimepicker/datetimepicker-errors.mjs +6 -0
  279. package/esm2022/components/material-datetimepicker/datetimepicker-filtertype.mjs +8 -0
  280. package/esm2022/components/material-datetimepicker/datetimepicker-input.mjs +340 -0
  281. package/esm2022/components/material-datetimepicker/datetimepicker-intl.mjs +63 -0
  282. package/esm2022/components/material-datetimepicker/datetimepicker-toggle.mjs +88 -0
  283. package/esm2022/components/material-datetimepicker/datetimepicker-types.mjs +2 -0
  284. package/esm2022/components/material-datetimepicker/datetimepicker.mjs +534 -0
  285. package/esm2022/components/material-datetimepicker/month-view.mjs +146 -0
  286. package/esm2022/components/material-datetimepicker/multi-year-view.mjs +198 -0
  287. package/esm2022/components/material-datetimepicker/public-api.mjs +10 -0
  288. package/esm2022/components/material-datetimepicker/time.mjs +456 -0
  289. package/esm2022/components/material-datetimepicker/year-view.mjs +125 -0
  290. package/esm2022/components/navigation/cmat-components-navigation.mjs +5 -0
  291. package/esm2022/components/navigation/horizontal/components/basic/basic.component.mjs +70 -0
  292. package/esm2022/components/navigation/horizontal/components/branch/branch.component.mjs +83 -0
  293. package/esm2022/components/navigation/horizontal/components/divider/divider.component.mjs +47 -0
  294. package/esm2022/components/navigation/horizontal/components/spacer/spacer.component.mjs +47 -0
  295. package/esm2022/components/navigation/horizontal/horizontal.component.mjs +88 -0
  296. package/esm2022/components/navigation/navigation.service.mjs +140 -0
  297. package/esm2022/components/navigation/navigation.types.mjs +3 -0
  298. package/esm2022/components/navigation/public-api.mjs +5 -0
  299. package/esm2022/components/navigation/vertical/components/aside/aside.component.mjs +162 -0
  300. package/esm2022/components/navigation/vertical/components/basic/basic.component.mjs +76 -0
  301. package/esm2022/components/navigation/vertical/components/collapsable/collapsable.component.mjs +279 -0
  302. package/esm2022/components/navigation/vertical/components/divider/divider.component.mjs +56 -0
  303. package/esm2022/components/navigation/vertical/components/group/group.component.mjs +79 -0
  304. package/esm2022/components/navigation/vertical/components/spacer/spacer.component.mjs +56 -0
  305. package/esm2022/components/navigation/vertical/vertical.component.mjs +586 -0
  306. package/esm2022/components/pagination/cmat-components-pagination.mjs +5 -0
  307. package/esm2022/components/pagination/pagination.component.mjs +71 -0
  308. package/esm2022/components/pagination/pagination.directive.mjs +197 -0
  309. package/esm2022/components/pagination/pagination.instance.mjs +2 -0
  310. package/esm2022/components/pagination/pagination.pipe.mjs +100 -0
  311. package/esm2022/components/pagination/pagination.service.mjs +90 -0
  312. package/esm2022/components/pagination/public-api.mjs +5 -0
  313. package/esm2022/components/password-strength/animations/index.mjs +48 -0
  314. package/esm2022/components/password-strength/cmat-components-password-strength.mjs +5 -0
  315. package/esm2022/components/password-strength/enum.mjs +17 -0
  316. package/esm2022/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.mjs +27 -0
  317. package/esm2022/components/password-strength/mat-password-strength/mat-password-strength.component.mjs +206 -0
  318. package/esm2022/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.mjs +151 -0
  319. package/esm2022/components/password-strength/mat-password-strength-validator.mjs +36 -0
  320. package/esm2022/components/password-strength/public-api.mjs +4 -0
  321. package/esm2022/components/password-strength/regexp.class.mjs +8 -0
  322. package/esm2022/components/popover/cmat-components-popover.mjs +5 -0
  323. package/esm2022/components/popover/popover.component.mjs +350 -0
  324. package/esm2022/components/popover/popover.errors.mjs +27 -0
  325. package/esm2022/components/popover/popover.interfaces.mjs +2 -0
  326. package/esm2022/components/popover/popover.type.mjs +2 -0
  327. package/esm2022/components/popover/public-api.mjs +2 -0
  328. package/esm2022/components/progress-bar/cmat-components-progress-bar.mjs +5 -0
  329. package/esm2022/components/progress-bar/progress-bar.component.mjs +55 -0
  330. package/esm2022/components/progress-bar/public-api.mjs +2 -0
  331. package/esm2022/components/rating/cmat-components-rating.mjs +5 -0
  332. package/esm2022/components/rating/public-api.mjs +2 -0
  333. package/esm2022/components/rating/rating.component.mjs +91 -0
  334. package/esm2022/components/select-search/cmat-components-select-search.mjs +5 -0
  335. package/esm2022/components/select-search/default-options.mjs +16 -0
  336. package/esm2022/components/select-search/public-api.mjs +3 -0
  337. package/esm2022/components/select-search/select-no-entries-found.directive.mjs +14 -0
  338. package/esm2022/components/select-search/select-search-clear.directive.mjs +14 -0
  339. package/esm2022/components/select-search/select-search.component.mjs +488 -0
  340. package/esm2022/components/select-tree/cmat-components-select-tree.mjs +5 -0
  341. package/esm2022/components/select-tree/public-api.mjs +2 -0
  342. package/esm2022/components/select-tree/select-tree.component.mjs +458 -0
  343. package/esm2022/components/select-tree/select-tree.flatnode.mjs +3 -0
  344. package/esm2022/components/select-tree/select-tree.node.mjs +3 -0
  345. package/esm2022/components/timeline/cmat-components-timeline.mjs +5 -0
  346. package/esm2022/components/timeline/public-api.mjs +3 -0
  347. package/esm2022/components/timeline/timeline-item/timeline-item.component.mjs +68 -0
  348. package/esm2022/components/timeline/timeline.component.mjs +114 -0
  349. package/esm2022/components/toast/cmat-components-toast.mjs +5 -0
  350. package/esm2022/components/toast/models/global-config.model.mjs +2 -0
  351. package/esm2022/components/toast/models/toast.model.mjs +2 -0
  352. package/esm2022/components/toast/models/type.model.mjs +2 -0
  353. package/esm2022/components/toast/public-api.mjs +3 -0
  354. package/esm2022/components/toast/toast-modal.component.mjs +53 -0
  355. package/esm2022/components/toast/toast.component.mjs +30 -0
  356. package/esm2022/components/toast/toast.service.mjs +122 -0
  357. package/esm2022/components/transfer-picker/cmat-components-transfer-picker.mjs +5 -0
  358. package/esm2022/components/transfer-picker/filter/filter.component.mjs +85 -0
  359. package/esm2022/components/transfer-picker/interface.mjs +17 -0
  360. package/esm2022/components/transfer-picker/public-api.mjs +8 -0
  361. package/esm2022/components/transfer-picker/search/search.component.mjs +34 -0
  362. package/esm2022/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.mjs +178 -0
  363. package/esm2022/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.mjs +34 -0
  364. package/esm2022/components/transfer-picker/transfer-picker.component.mjs +82 -0
  365. package/esm2022/components/transfer-picker/transfer-picker.service.mjs +134 -0
  366. package/esm2022/directives/animate-on-scroll/animate-on-scroll.directive.mjs +126 -0
  367. package/esm2022/directives/animate-on-scroll/cmat-directives-animate-on-scroll.mjs +5 -0
  368. package/esm2022/directives/animate-on-scroll/public-api.mjs +2 -0
  369. package/esm2022/directives/animate-on-scroll/scroll.service.mjs +38 -0
  370. package/esm2022/directives/autofocus/autofocus.directive.mjs +20 -0
  371. package/esm2022/directives/autofocus/cmat-directives-autofocus.mjs +5 -0
  372. package/esm2022/directives/autofocus/public-api.mjs +2 -0
  373. package/esm2022/directives/debounce/abstract-debounce.directive.mjs +34 -0
  374. package/esm2022/directives/debounce/cmat-directives-debounce.mjs +5 -0
  375. package/esm2022/directives/debounce/debounce-click.directive.mjs +25 -0
  376. package/esm2022/directives/debounce/debounce-keyup.directive.mjs +25 -0
  377. package/esm2022/directives/debounce/public-api.mjs +3 -0
  378. package/esm2022/directives/digit-only/cmat-directives-digit-only.mjs +5 -0
  379. package/esm2022/directives/digit-only/digit-only.directive.mjs +282 -0
  380. package/esm2022/directives/digit-only/mask.directive.mjs +69 -0
  381. package/esm2022/directives/digit-only/public-api.mjs +3 -0
  382. package/esm2022/directives/equal-validator/cmat-directives-equal-validator.mjs +5 -0
  383. package/esm2022/directives/equal-validator/equal-validator.directive.mjs +54 -0
  384. package/esm2022/directives/equal-validator/public-api.mjs +2 -0
  385. package/esm2022/lib/mock-api/cmat-lib-mock-api.mjs +5 -0
  386. package/esm2022/lib/mock-api/mock-api.constants.mjs +3 -0
  387. package/esm2022/lib/mock-api/mock-api.interceptor.mjs +73 -0
  388. package/esm2022/lib/mock-api/mock-api.request-handler.mjs +48 -0
  389. package/esm2022/lib/mock-api/mock-api.service.mjs +93 -0
  390. package/esm2022/lib/mock-api/mock-api.types.mjs +2 -0
  391. package/esm2022/lib/mock-api/mock-api.utils.mjs +17 -0
  392. package/esm2022/lib/mock-api/public-api.mjs +6 -0
  393. package/esm2022/pipes/bytes/bytes.pipe.mjs +25 -0
  394. package/esm2022/pipes/bytes/cmat-pipes-bytes.mjs +5 -0
  395. package/esm2022/pipes/bytes/public-api.mjs +2 -0
  396. package/esm2022/pipes/date-format/cmat-pipes-date-format.mjs +5 -0
  397. package/esm2022/pipes/date-format/date-format.pipe.mjs +18 -0
  398. package/esm2022/pipes/date-format/public-api.mjs +2 -0
  399. package/esm2022/pipes/find-by-key/cmat-pipes-find-by-key.mjs +5 -0
  400. package/esm2022/pipes/find-by-key/find-by-key.pipe.mjs +23 -0
  401. package/esm2022/pipes/find-by-key/public-api.mjs +2 -0
  402. package/esm2022/pipes/group-by/cmat-pipes-group-by.mjs +5 -0
  403. package/esm2022/pipes/group-by/group-by.pipe.mjs +29 -0
  404. package/esm2022/pipes/group-by/public-api.mjs +2 -0
  405. package/esm2022/pipes/keys/cmat-pipes-keys.mjs +5 -0
  406. package/esm2022/pipes/keys/keys.pipe.mjs +26 -0
  407. package/esm2022/pipes/keys/public-api.mjs +2 -0
  408. package/esm2022/pipes/secure/cmat-pipes-secure.mjs +5 -0
  409. package/esm2022/pipes/secure/public-api.mjs +2 -0
  410. package/esm2022/pipes/secure/secure-pipe.mjs +43 -0
  411. package/esm2022/pipes/uppercase/cmat-pipes-uppercase.mjs +5 -0
  412. package/esm2022/pipes/uppercase/public-api.mjs +2 -0
  413. package/esm2022/pipes/uppercase/uppercase.pipe.mjs +17 -0
  414. package/esm2022/public-api.mjs +2 -0
  415. package/esm2022/services/alert/alert.dialog.mjs +12 -0
  416. package/esm2022/services/alert/alert.message.mjs +9 -0
  417. package/esm2022/services/alert/alert.service.mjs +165 -0
  418. package/esm2022/services/alert/cmat-services-alert.mjs +5 -0
  419. package/esm2022/services/alert/enum.mjs +15 -0
  420. package/esm2022/services/alert/public-api.mjs +5 -0
  421. package/esm2022/services/config/cmat-services-config.mjs +5 -0
  422. package/esm2022/services/config/config.constants.mjs +3 -0
  423. package/esm2022/services/config/config.service.mjs +35 -0
  424. package/esm2022/services/config/public-api.mjs +4 -0
  425. package/esm2022/services/config/urlStateConfig.service.mjs +30 -0
  426. package/esm2022/services/confirmation/cmat-services-confirmation.mjs +5 -0
  427. package/esm2022/services/confirmation/confirmation.service.mjs +51 -0
  428. package/esm2022/services/confirmation/confirmation.types.mjs +2 -0
  429. package/esm2022/services/confirmation/dialog/dialog.component.mjs +25 -0
  430. package/esm2022/services/confirmation/public-api.mjs +3 -0
  431. package/esm2022/services/data/cmat-services-data.mjs +5 -0
  432. package/esm2022/services/data/data.service.mjs +169 -0
  433. package/esm2022/services/data/public-api.mjs +2 -0
  434. package/esm2022/services/loading/cmat-services-loading.mjs +5 -0
  435. package/esm2022/services/loading/loading.interceptor.mjs +29 -0
  436. package/esm2022/services/loading/loading.service.mjs +72 -0
  437. package/esm2022/services/loading/public-api.mjs +3 -0
  438. package/esm2022/services/local-storage/cmat-services-local-storage.mjs +5 -0
  439. package/esm2022/services/local-storage/local-storage.service.mjs +22 -0
  440. package/esm2022/services/local-storage/public-api.mjs +2 -0
  441. package/esm2022/services/media-watcher/cmat-services-media-watcher.mjs +5 -0
  442. package/esm2022/services/media-watcher/media-watcher.service.mjs +55 -0
  443. package/esm2022/services/media-watcher/public-api.mjs +2 -0
  444. package/esm2022/services/platform/cmat-services-platform.mjs +5 -0
  445. package/esm2022/services/platform/platform.service.mjs +46 -0
  446. package/esm2022/services/platform/public-api.mjs +2 -0
  447. package/esm2022/services/splash-screen/cmat-services-splash-screen.mjs +5 -0
  448. package/esm2022/services/splash-screen/public-api.mjs +2 -0
  449. package/esm2022/services/splash-screen/splash-screen.service.mjs +42 -0
  450. package/esm2022/services/title/cmat-services-title.mjs +5 -0
  451. package/esm2022/services/title/public-api.mjs +2 -0
  452. package/esm2022/services/title/title.service.mjs +46 -0
  453. package/esm2022/services/translation/cmat-services-translation.mjs +5 -0
  454. package/esm2022/services/translation/public-api.mjs +2 -0
  455. package/esm2022/services/translation/translation.service.mjs +62 -0
  456. package/esm2022/services/utils/cmat-services-utils.mjs +5 -0
  457. package/esm2022/services/utils/public-api.mjs +2 -0
  458. package/esm2022/services/utils/utils.service.mjs +391 -0
  459. package/esm2022/validators/cmat-validators.mjs +5 -0
  460. package/esm2022/validators/public-api.mjs +2 -0
  461. package/esm2022/validators/validators.mjs +33 -0
  462. package/esm2022/version/cmat-version.mjs +5 -0
  463. package/esm2022/version/public-api.mjs +2 -0
  464. package/esm2022/version/version.mjs +11 -0
  465. package/fesm2022/cmat-animations.mjs +466 -0
  466. package/fesm2022/cmat-animations.mjs.map +1 -0
  467. package/fesm2022/cmat-components-adapter.mjs +600 -0
  468. package/fesm2022/cmat-components-adapter.mjs.map +1 -0
  469. package/fesm2022/cmat-components-breadcrumb.mjs +449 -0
  470. package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -0
  471. package/fesm2022/cmat-components-card.mjs +65 -0
  472. package/fesm2022/cmat-components-card.mjs.map +1 -0
  473. package/fesm2022/cmat-components-cascade.mjs +334 -0
  474. package/fesm2022/cmat-components-cascade.mjs.map +1 -0
  475. package/fesm2022/cmat-components-date-range.mjs +547 -0
  476. package/fesm2022/cmat-components-date-range.mjs.map +1 -0
  477. package/fesm2022/cmat-components-drawer.mjs +346 -0
  478. package/fesm2022/cmat-components-drawer.mjs.map +1 -0
  479. package/fesm2022/cmat-components-fullscreen.mjs +108 -0
  480. package/fesm2022/cmat-components-fullscreen.mjs.map +1 -0
  481. package/fesm2022/cmat-components-highlight.mjs +131 -0
  482. package/fesm2022/cmat-components-highlight.mjs.map +1 -0
  483. package/fesm2022/cmat-components-masonry.mjs +61 -0
  484. package/fesm2022/cmat-components-masonry.mjs.map +1 -0
  485. package/fesm2022/cmat-components-material-color-picker.mjs +160 -0
  486. package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -0
  487. package/fesm2022/cmat-components-material-datetimepicker.mjs +2976 -0
  488. package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -0
  489. package/fesm2022/cmat-components-navigation.mjs +1656 -0
  490. package/fesm2022/cmat-components-navigation.mjs.map +1 -0
  491. package/fesm2022/cmat-components-pagination.mjs +455 -0
  492. package/fesm2022/cmat-components-pagination.mjs.map +1 -0
  493. package/fesm2022/cmat-components-password-strength.mjs +489 -0
  494. package/fesm2022/cmat-components-password-strength.mjs.map +1 -0
  495. package/fesm2022/cmat-components-popover.mjs +383 -0
  496. package/fesm2022/cmat-components-popover.mjs.map +1 -0
  497. package/fesm2022/cmat-components-progress-bar.mjs +62 -0
  498. package/fesm2022/cmat-components-progress-bar.mjs.map +1 -0
  499. package/fesm2022/cmat-components-rating.mjs +98 -0
  500. package/fesm2022/cmat-components-rating.mjs.map +1 -0
  501. package/fesm2022/cmat-components-select-search.mjs +531 -0
  502. package/fesm2022/cmat-components-select-search.mjs.map +1 -0
  503. package/fesm2022/cmat-components-select-tree.mjs +467 -0
  504. package/fesm2022/cmat-components-select-tree.mjs.map +1 -0
  505. package/fesm2022/cmat-components-timeline.mjs +186 -0
  506. package/fesm2022/cmat-components-timeline.mjs.map +1 -0
  507. package/fesm2022/cmat-components-toast.mjs +205 -0
  508. package/fesm2022/cmat-components-toast.mjs.map +1 -0
  509. package/fesm2022/cmat-components-transfer-picker.mjs +536 -0
  510. package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -0
  511. package/fesm2022/cmat-directives-animate-on-scroll.mjs +166 -0
  512. package/fesm2022/cmat-directives-animate-on-scroll.mjs.map +1 -0
  513. package/fesm2022/cmat-directives-autofocus.mjs +27 -0
  514. package/fesm2022/cmat-directives-autofocus.mjs.map +1 -0
  515. package/fesm2022/cmat-directives-debounce.mjs +85 -0
  516. package/fesm2022/cmat-directives-debounce.mjs.map +1 -0
  517. package/fesm2022/cmat-directives-digit-only.mjs +356 -0
  518. package/fesm2022/cmat-directives-digit-only.mjs.map +1 -0
  519. package/fesm2022/cmat-directives-equal-validator.mjs +61 -0
  520. package/fesm2022/cmat-directives-equal-validator.mjs.map +1 -0
  521. package/fesm2022/cmat-lib-mock-api.mjs +232 -0
  522. package/fesm2022/cmat-lib-mock-api.mjs.map +1 -0
  523. package/fesm2022/cmat-pipes-bytes.mjs +32 -0
  524. package/fesm2022/cmat-pipes-bytes.mjs.map +1 -0
  525. package/fesm2022/cmat-pipes-date-format.mjs +25 -0
  526. package/fesm2022/cmat-pipes-date-format.mjs.map +1 -0
  527. package/fesm2022/cmat-pipes-find-by-key.mjs +30 -0
  528. package/fesm2022/cmat-pipes-find-by-key.mjs.map +1 -0
  529. package/fesm2022/cmat-pipes-group-by.mjs +36 -0
  530. package/fesm2022/cmat-pipes-group-by.mjs.map +1 -0
  531. package/fesm2022/cmat-pipes-keys.mjs +33 -0
  532. package/fesm2022/cmat-pipes-keys.mjs.map +1 -0
  533. package/fesm2022/cmat-pipes-secure.mjs +50 -0
  534. package/fesm2022/cmat-pipes-secure.mjs.map +1 -0
  535. package/fesm2022/cmat-pipes-uppercase.mjs +24 -0
  536. package/fesm2022/cmat-pipes-uppercase.mjs.map +1 -0
  537. package/fesm2022/cmat-services-alert.mjs +207 -0
  538. package/fesm2022/cmat-services-alert.mjs.map +1 -0
  539. package/fesm2022/cmat-services-config.mjs +69 -0
  540. package/fesm2022/cmat-services-config.mjs.map +1 -0
  541. package/fesm2022/cmat-services-confirmation.mjs +79 -0
  542. package/fesm2022/cmat-services-confirmation.mjs.map +1 -0
  543. package/fesm2022/cmat-services-data.mjs +176 -0
  544. package/fesm2022/cmat-services-data.mjs.map +1 -0
  545. package/fesm2022/cmat-services-loading.mjs +104 -0
  546. package/fesm2022/cmat-services-loading.mjs.map +1 -0
  547. package/fesm2022/cmat-services-local-storage.mjs +29 -0
  548. package/fesm2022/cmat-services-local-storage.mjs.map +1 -0
  549. package/fesm2022/cmat-services-media-watcher.mjs +62 -0
  550. package/fesm2022/cmat-services-media-watcher.mjs.map +1 -0
  551. package/fesm2022/cmat-services-platform.mjs +53 -0
  552. package/fesm2022/cmat-services-platform.mjs.map +1 -0
  553. package/fesm2022/cmat-services-splash-screen.mjs +49 -0
  554. package/fesm2022/cmat-services-splash-screen.mjs.map +1 -0
  555. package/fesm2022/cmat-services-title.mjs +53 -0
  556. package/fesm2022/cmat-services-title.mjs.map +1 -0
  557. package/fesm2022/cmat-services-translation.mjs +69 -0
  558. package/fesm2022/cmat-services-translation.mjs.map +1 -0
  559. package/fesm2022/cmat-services-utils.mjs +398 -0
  560. package/fesm2022/cmat-services-utils.mjs.map +1 -0
  561. package/fesm2022/cmat-validators.mjs +39 -0
  562. package/fesm2022/cmat-validators.mjs.map +1 -0
  563. package/fesm2022/cmat-version.mjs +17 -0
  564. package/fesm2022/cmat-version.mjs.map +1 -0
  565. package/fesm2022/cmat.mjs +4 -0
  566. package/fesm2022/cmat.mjs.map +1 -0
  567. package/icons/CSV.svg +3 -0
  568. package/icons/EXCEL.svg +3 -0
  569. package/icons/FILE.svg +3 -0
  570. package/icons/GIF.svg +3 -0
  571. package/icons/JPG.svg +3 -0
  572. package/icons/PDF.svg +3 -0
  573. package/icons/PNG.svg +3 -0
  574. package/icons/PPT.svg +3 -0
  575. package/icons/TEXT.svg +3 -0
  576. package/icons/VIDEO.svg +3 -0
  577. package/icons/WORD.svg +3 -0
  578. package/icons/ZIP.svg +3 -0
  579. package/icons/arrow-cursor.svg +3 -0
  580. package/icons/material-icons/heroicons-outline.svg +893 -0
  581. package/icons/material-icons/heroicons-solid.svg +958 -0
  582. package/icons/material-icons/material-outline.svg +3586 -0
  583. package/icons/material-icons/material-solid.svg +3586 -0
  584. package/index.d.ts +5 -0
  585. package/lib/mock-api/index.d.ts +5 -0
  586. package/lib/mock-api/mock-api.constants.d.ts +2 -0
  587. package/lib/mock-api/mock-api.interceptor.d.ts +12 -0
  588. package/lib/mock-api/mock-api.request-handler.d.ts +18 -0
  589. package/lib/mock-api/mock-api.service.d.ts +22 -0
  590. package/lib/mock-api/mock-api.types.d.ts +9 -0
  591. package/lib/mock-api/mock-api.utils.d.ts +3 -0
  592. package/lib/mock-api/public-api.d.ts +5 -0
  593. package/package.json +344 -0
  594. package/pipes/bytes/bytes.pipe.d.ts +7 -0
  595. package/pipes/bytes/index.d.ts +5 -0
  596. package/pipes/bytes/public-api.d.ts +1 -0
  597. package/pipes/date-format/date-format.pipe.d.ts +7 -0
  598. package/pipes/date-format/index.d.ts +5 -0
  599. package/pipes/date-format/public-api.d.ts +1 -0
  600. package/pipes/find-by-key/find-by-key.pipe.d.ts +7 -0
  601. package/pipes/find-by-key/index.d.ts +5 -0
  602. package/pipes/find-by-key/public-api.d.ts +1 -0
  603. package/pipes/group-by/group-by.pipe.d.ts +7 -0
  604. package/pipes/group-by/index.d.ts +5 -0
  605. package/pipes/group-by/public-api.d.ts +1 -0
  606. package/pipes/keys/index.d.ts +5 -0
  607. package/pipes/keys/keys.pipe.d.ts +7 -0
  608. package/pipes/keys/public-api.d.ts +1 -0
  609. package/pipes/secure/index.d.ts +5 -0
  610. package/pipes/secure/public-api.d.ts +1 -0
  611. package/pipes/secure/secure-pipe.d.ts +18 -0
  612. package/pipes/uppercase/index.d.ts +5 -0
  613. package/pipes/uppercase/public-api.d.ts +1 -0
  614. package/pipes/uppercase/uppercase.pipe.d.ts +7 -0
  615. package/public-api.d.ts +1 -0
  616. package/services/alert/alert.dialog.d.ts +11 -0
  617. package/services/alert/alert.message.d.ts +8 -0
  618. package/services/alert/alert.service.d.ts +37 -0
  619. package/services/alert/enum.d.ts +12 -0
  620. package/services/alert/index.d.ts +5 -0
  621. package/services/alert/public-api.d.ts +4 -0
  622. package/services/config/config.constants.d.ts +6 -0
  623. package/services/config/config.service.d.ts +11 -0
  624. package/services/config/index.d.ts +5 -0
  625. package/services/config/public-api.d.ts +3 -0
  626. package/services/config/urlStateConfig.service.d.ts +10 -0
  627. package/services/confirmation/confirmation.service.d.ts +12 -0
  628. package/services/confirmation/confirmation.types.d.ts +21 -0
  629. package/services/confirmation/dialog/dialog.component.d.ts +10 -0
  630. package/services/confirmation/index.d.ts +5 -0
  631. package/services/confirmation/public-api.d.ts +2 -0
  632. package/services/data/data.service.d.ts +20 -0
  633. package/services/data/index.d.ts +5 -0
  634. package/services/data/public-api.d.ts +1 -0
  635. package/services/loading/index.d.ts +5 -0
  636. package/services/loading/loading.interceptor.d.ts +12 -0
  637. package/services/loading/loading.service.d.ts +24 -0
  638. package/services/loading/public-api.d.ts +2 -0
  639. package/services/local-storage/index.d.ts +5 -0
  640. package/services/local-storage/local-storage.service.d.ts +8 -0
  641. package/services/local-storage/public-api.d.ts +1 -0
  642. package/services/media-watcher/index.d.ts +5 -0
  643. package/services/media-watcher/media-watcher.service.d.ts +20 -0
  644. package/services/media-watcher/public-api.d.ts +1 -0
  645. package/services/platform/index.d.ts +5 -0
  646. package/services/platform/platform.service.d.ts +9 -0
  647. package/services/platform/public-api.d.ts +1 -0
  648. package/services/splash-screen/index.d.ts +5 -0
  649. package/services/splash-screen/public-api.d.ts +1 -0
  650. package/services/splash-screen/splash-screen.service.d.ts +14 -0
  651. package/services/title/index.d.ts +5 -0
  652. package/services/title/public-api.d.ts +1 -0
  653. package/services/title/title.service.d.ts +13 -0
  654. package/services/translation/index.d.ts +5 -0
  655. package/services/translation/public-api.d.ts +1 -0
  656. package/services/translation/translation.service.d.ts +20 -0
  657. package/services/utils/index.d.ts +5 -0
  658. package/services/utils/public-api.d.ts +1 -0
  659. package/services/utils/utils.service.d.ts +57 -0
  660. package/styles/components/input.scss +42 -0
  661. package/styles/main.scss +9 -0
  662. package/styles/overrides/angular-material.scss +1403 -0
  663. package/styles/overrides/fullcalendar.scss +550 -0
  664. package/styles/overrides/highlightjs.scss +81 -0
  665. package/styles/styles.scss +3 -0
  666. package/styles/tailwind.scss +86 -0
  667. package/styles/themes.scss +164 -0
  668. package/styles/user-themes.scss +1 -0
  669. package/tailwind/plugins/icon-size.js +49 -0
  670. package/tailwind/plugins/theming.js +256 -0
  671. package/tailwind/plugins/utilities.js +66 -0
  672. package/tailwind/utils/generate-contrasts.js +29 -0
  673. package/tailwind/utils/generate-palette.js +100 -0
  674. package/tailwind/utils/json-to-sass-map.js +67 -0
  675. package/validators/index.d.ts +5 -0
  676. package/validators/public-api.d.ts +1 -0
  677. package/validators/validators.d.ts +5 -0
  678. package/version/index.d.ts +5 -0
  679. package/version/public-api.d.ts +1 -0
  680. package/version/version.d.ts +9 -0
@@ -0,0 +1,488 @@
1
+ import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, Inject, Input, ViewChild, ContentChild, Optional, HostBinding, Output, ViewEncapsulation } from '@angular/core';
2
+ import { FormControl, NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
3
+ import { MatSelect } from '@angular/material/select';
4
+ import { BehaviorSubject, combineLatest, of, Subject } from 'rxjs';
5
+ import { delay, filter, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';
6
+ import { CmatSelectSearchClearDirective } from './select-search-clear.directive';
7
+ import { MatOption, _countGroupLabelsBeforeOption } from '@angular/material/core';
8
+ import { MatFormField, MatFormFieldModule } from '@angular/material/form-field';
9
+ import { CmatSelectNoEntriesFoundDirective } from './select-no-entries-found.directive';
10
+ import { configurableDefaultOptions, MAT_SELECTSEARCH_DEFAULT_OPTIONS } from './default-options';
11
+ import { MatButtonModule } from '@angular/material/button';
12
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
13
+ import { MatIconModule } from '@angular/material/icon';
14
+ import { MatTooltipModule } from '@angular/material/tooltip';
15
+ import { MatCheckboxModule } from '@angular/material/checkbox';
16
+ import { NgClass, NgIf, AsyncPipe } from '@angular/common';
17
+ import { MatInputModule } from '@angular/material/input';
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "@angular/cdk/scrolling";
20
+ import * as i2 from "@angular/material/input";
21
+ import * as i3 from "@angular/material/form-field";
22
+ import * as i4 from "@angular/material/checkbox";
23
+ import * as i5 from "@angular/material/tooltip";
24
+ import * as i6 from "@angular/material/icon";
25
+ import * as i7 from "@angular/forms";
26
+ import * as i8 from "@angular/material/progress-spinner";
27
+ import * as i9 from "@angular/material/button";
28
+ import * as i10 from "@angular/material/select";
29
+ import * as i11 from "@angular/material/core";
30
+ const SELECT_PANEL_MAX_HEIGHT = 256;
31
+ export class CmatSelectSearchComponent {
32
+ constructor(matSelect, _changeDetectorRef, _viewportRuler, _matOption = null, matFormField = null, _defaultOptions) {
33
+ this.matSelect = matSelect;
34
+ this._changeDetectorRef = _changeDetectorRef;
35
+ this._viewportRuler = _viewportRuler;
36
+ this._matOption = _matOption;
37
+ this.matFormField = matFormField;
38
+ this._defaultOptions = _defaultOptions;
39
+ this.placeholderLabel = '查询';
40
+ this.type = 'text';
41
+ this.noEntriesFoundLabel = '无结果';
42
+ this.showNoFoundLabel = true;
43
+ this.indexAndLengthScreenReaderText = ' of ';
44
+ this.clearSearchInput = true;
45
+ this.searching = false;
46
+ this.disableInitialFocus = false;
47
+ this.enableClearOnEscapePressed = false;
48
+ this.preventHomeEndKeyPropagation = false;
49
+ this.disableScrollToActiveOnOptionsChanged = false;
50
+ this.ariaLabel = '下拉查询';
51
+ /** Whether to show Select All Checkbox (for mat-select[multi=true]) */
52
+ this.showToggleAllCheckbox = false;
53
+ /** select all checkbox checked state */
54
+ this.toggleAllCheckboxChecked = false;
55
+ /** select all checkbox indeterminate state */
56
+ this.toggleAllCheckboxIndeterminate = false;
57
+ this.toggleAllCheckboxTooltipMessage = '';
58
+ this.toggleAllCheckboxTooltipPosition = 'below';
59
+ this.hideClearSearchButton = false;
60
+ this.alwaysRestoreSelectedOptionsMulti = false;
61
+ /** Output emitter to send to parent component with the toggle all boolean */
62
+ this.toggleAll = new EventEmitter();
63
+ this.formControl = new FormControl('');
64
+ this._options$ = new BehaviorSubject(null);
65
+ this._optionsList$ = this._options$.pipe(switchMap(_options => _options ?
66
+ _options.changes.pipe(map(options => options.toArray()), startWith(_options.toArray())) : of(null)));
67
+ this._optionsLength$ = this._optionsList$.pipe(map(options => options ? options.length : 0));
68
+ this._onDestroy = new Subject();
69
+ /** whether to show the no entries found message */
70
+ // eslint-disable-next-line @typescript-eslint/member-ordering
71
+ this.showNoEntriesFound$ = combineLatest([
72
+ this.formControl.valueChanges,
73
+ this._optionsLength$
74
+ ]).pipe(map(([value, optionsLength]) => this.noEntriesFoundLabel && value
75
+ && optionsLength === this._getOptionsLengthOffset()));
76
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
77
+ this.onTouched = () => { };
78
+ this._applyDefaultOptions(this._defaultOptions);
79
+ }
80
+ get isInsideMatOption() {
81
+ return !!this._matOption;
82
+ }
83
+ get value() {
84
+ return this.formControl.value;
85
+ }
86
+ get _options() {
87
+ return this._options$.getValue();
88
+ }
89
+ set _options(_options) {
90
+ this._options$.next(_options);
91
+ }
92
+ ngOnInit() {
93
+ const panelClass = 'cmat-select-search-panel';
94
+ if (this.matSelect.panelClass) {
95
+ if (Array.isArray(this.matSelect.panelClass)) {
96
+ this.matSelect.panelClass.push(panelClass);
97
+ }
98
+ else if (typeof this.matSelect.panelClass === 'string') {
99
+ this.matSelect.panelClass = [this.matSelect.panelClass, panelClass];
100
+ }
101
+ else if (typeof this.matSelect.panelClass === 'object') {
102
+ this.matSelect.panelClass.entries[panelClass] = true;
103
+ }
104
+ }
105
+ else {
106
+ this.matSelect.panelClass = panelClass;
107
+ }
108
+ if (this._matOption) {
109
+ this._matOption.disabled = true;
110
+ this._matOption._getHostElement().classList.add('contains-cmat-select-search');
111
+ this._matOption._getHostElement().setAttribute('aria-hidden', 'true');
112
+ }
113
+ else {
114
+ console.error('<cmat-select-search> must be placed inside a <mat-option> element');
115
+ }
116
+ this.matSelect.openedChange
117
+ .pipe(delay(1), takeUntil(this._onDestroy))
118
+ .subscribe((opened) => {
119
+ if (opened) {
120
+ this.updateInputWidth();
121
+ if (!this.disableInitialFocus) {
122
+ this.focus();
123
+ }
124
+ }
125
+ else {
126
+ if (this.clearSearchInput) {
127
+ this.reset();
128
+ }
129
+ }
130
+ });
131
+ this.matSelect.openedChange
132
+ .pipe(take(1))
133
+ .pipe(takeUntil(this._onDestroy))
134
+ .subscribe(() => {
135
+ if (this.matSelect._keyManager) {
136
+ this.matSelect._keyManager.change.pipe(takeUntil(this._onDestroy))
137
+ .subscribe(() => this._adjustScrollTopToFitActiveOptionIntoView());
138
+ }
139
+ else {
140
+ console.log('_keyManager was not initialized.');
141
+ }
142
+ this._options = this.matSelect.options;
143
+ let previousFirstOption = this._options.toArray()[this._getOptionsLengthOffset()];
144
+ this._options.changes
145
+ .pipe(takeUntil(this._onDestroy))
146
+ .subscribe(() => {
147
+ // avoid "expression has been changed" error
148
+ setTimeout(() => {
149
+ if (this._options) {
150
+ // Convert the QueryList to an array
151
+ const options = this._options.toArray();
152
+ // The true first item is offset by 1
153
+ const currentFirstOption = options[this._getOptionsLengthOffset()];
154
+ const keyManager = this.matSelect._keyManager;
155
+ if (keyManager && this.matSelect.panelOpen) {
156
+ // set first item active and input width
157
+ // Check to see if the first option in these changes is different from the previous.
158
+ const firstOptionIsChanged = !this.matSelect.compareWith(previousFirstOption, currentFirstOption);
159
+ if (firstOptionIsChanged
160
+ || !keyManager.activeItem
161
+ || !options.find(option => this.matSelect.compareWith(option, keyManager.activeItem))) {
162
+ keyManager.setFirstItemActive();
163
+ }
164
+ // wait for panel width changes
165
+ setTimeout(() => {
166
+ this.updateInputWidth();
167
+ });
168
+ if (!this.disableScrollToActiveOnOptionsChanged) {
169
+ this._adjustScrollTopToFitActiveOptionIntoView();
170
+ }
171
+ }
172
+ // Update our reference
173
+ previousFirstOption = currentFirstOption;
174
+ }
175
+ });
176
+ });
177
+ });
178
+ // add or remove css class depending on whether to show the no entries found message
179
+ // note: this is hacky
180
+ this.showNoEntriesFound$.pipe(takeUntil(this._onDestroy)).subscribe((showNoEntriesFound) => {
181
+ // set no entries found class on mat option
182
+ if (this._matOption) {
183
+ if (showNoEntriesFound) {
184
+ this._matOption._getHostElement().classList.add('cmat-select-search-no-entries-found');
185
+ }
186
+ else {
187
+ this._matOption._getHostElement().classList.remove('cmat-select-search-no-entries-found');
188
+ }
189
+ }
190
+ });
191
+ // resize the input width when the viewport is resized, i.e. the trigger width could potentially be resized
192
+ this._viewportRuler.change()
193
+ .pipe(takeUntil(this._onDestroy))
194
+ .subscribe(() => {
195
+ if (this.matSelect.panelOpen) {
196
+ this.updateInputWidth();
197
+ }
198
+ });
199
+ this._initMultipleHandling();
200
+ this._optionsList$.pipe(takeUntil(this._onDestroy)).subscribe(() => {
201
+ // update view when available options change
202
+ this._changeDetectorRef.markForCheck();
203
+ });
204
+ }
205
+ emitSelectAllBooleanToParent(state) {
206
+ this.toggleAll.emit(state);
207
+ }
208
+ ngOnDestroy() {
209
+ this._onDestroy.next(void 0);
210
+ this._onDestroy.complete();
211
+ }
212
+ isToggleAllCheckboxVisible() {
213
+ return this.matSelect.multiple && this.showToggleAllCheckbox;
214
+ }
215
+ handleKeydown(event) {
216
+ if ((event.key && event.key.length === 1) ||
217
+ (event.code === 'KeyA') || (event.code === 'KeyB') || (event.code === 'KeyC') || (event.code === 'KeyD') || (event.code === 'KeyE') || (event.code === 'KeyF')
218
+ || (event.code === 'KeyG') || (event.code === 'KeyH') || (event.code === 'KeyI') || (event.code === 'KeyJ') || (event.code === 'KeyK') || (event.code === 'KeyL')
219
+ || (event.code === 'KeyM') || (event.code === 'KeyN') || (event.code === 'KeyO') || (event.code === 'KeyP') || (event.code === 'KeyQ') || (event.code === 'KeyR')
220
+ || (event.code === 'KeyS') || (event.code === 'KeyT') || (event.code === 'KeyU') || (event.code === 'KeyV') || (event.code === 'KeyW')
221
+ || (event.code === 'KeyX') || (event.code === 'KeyY') || (event.code === 'KeyZ') || (event.code === 'Digit0') || (event.code === 'Digit1')
222
+ || (event.code === 'Digit2') || (event.code === 'Digit3') || (event.code === 'Digit4') || (event.code === 'Digit5') || (event.code === 'Digit6')
223
+ || (event.code === 'Digit7') || (event.code === 'Digit8') || (event.code === 'Digit9')
224
+ || (event.code === 'Space')
225
+ || (this.preventHomeEndKeyPropagation && (event.code === 'Home' || event.code === 'End'))) {
226
+ event.stopPropagation();
227
+ }
228
+ if (this.matSelect.multiple && event.key && event.code === 'Enter') {
229
+ // Regain focus after multiselect, so we can further type
230
+ setTimeout(() => this.focus());
231
+ }
232
+ // Special case if click Escape, if input is empty, close the dropdown, if not, empty out the search field
233
+ if (this.enableClearOnEscapePressed === true && event.code === 'Escape' && this.value) {
234
+ this.reset(true);
235
+ event.stopPropagation();
236
+ }
237
+ }
238
+ /**
239
+ * Handles the key up event with MatSelect.
240
+ * Allows e.g. the announcing of the currently activeDescendant by screen readers.
241
+ */
242
+ handleKeyup(event) {
243
+ if (event.code === 'ArrowUp' || event.code === 'ArrowDown') {
244
+ const ariaActiveDescendantId = this.matSelect._getAriaActiveDescendant();
245
+ const index = this._options?.toArray().findIndex(item => item.id === ariaActiveDescendantId);
246
+ if (index && index !== -1) {
247
+ this._unselectActiveDescendant();
248
+ this._activeDescendant = this._options?.toArray()[index]._getHostElement();
249
+ this._activeDescendant?.setAttribute('aria-selected', 'true');
250
+ this.searchSelectInput.nativeElement.setAttribute('aria-activedescendant', ariaActiveDescendantId);
251
+ }
252
+ }
253
+ }
254
+ writeValue(value) {
255
+ this._lastExternalInputValue = value;
256
+ this.formControl.setValue(value);
257
+ this._changeDetectorRef.markForCheck();
258
+ }
259
+ onBlur() {
260
+ this._unselectActiveDescendant();
261
+ this.onTouched();
262
+ }
263
+ registerOnChange(fn) {
264
+ this.formControl.valueChanges.pipe(filter(value => value !== this._lastExternalInputValue), tap(() => this._lastExternalInputValue = undefined), takeUntil(this._onDestroy)).subscribe(fn);
265
+ }
266
+ registerOnTouched(fn) {
267
+ this.onTouched = fn;
268
+ }
269
+ focus() {
270
+ if (!this.searchSelectInput || !this.matSelect.panel) {
271
+ return;
272
+ }
273
+ const panel = this.matSelect.panel.nativeElement;
274
+ const scrollTop = panel.scrollTop;
275
+ this.searchSelectInput.nativeElement.focus();
276
+ panel.scrollTop = scrollTop;
277
+ }
278
+ reset(focus) {
279
+ this.formControl.setValue('');
280
+ if (focus) {
281
+ this.focus();
282
+ }
283
+ }
284
+ updateInputWidth() {
285
+ if (!this.innerSelectSearch || !this.innerSelectSearch.nativeElement) {
286
+ return;
287
+ }
288
+ const element = this.innerSelectSearch.nativeElement;
289
+ let panelElement = void 0;
290
+ while (element === element.parentElement) {
291
+ if (element.classList.contains('mat-select-panel')) {
292
+ panelElement = element;
293
+ break;
294
+ }
295
+ }
296
+ if (panelElement) {
297
+ this.innerSelectSearch.nativeElement.style.width = panelElement.clientWidth + 'px';
298
+ }
299
+ }
300
+ _getMatOptionHeight() {
301
+ if (this.matSelect.options.length > 0) {
302
+ return this.matSelect.options.first._getHostElement().getBoundingClientRect().height;
303
+ }
304
+ return 0;
305
+ }
306
+ _getOptionsLengthOffset() {
307
+ if (this._matOption) {
308
+ return 1;
309
+ }
310
+ else {
311
+ return 0;
312
+ }
313
+ }
314
+ _unselectActiveDescendant() {
315
+ this._activeDescendant?.removeAttribute('aria-selected');
316
+ this.searchSelectInput.nativeElement.removeAttribute('aria-activedescendant');
317
+ }
318
+ _applyDefaultOptions(defaultOptions) {
319
+ if (!defaultOptions) {
320
+ return;
321
+ }
322
+ for (const key of configurableDefaultOptions) {
323
+ if (Object.prototype.hasOwnProperty.call(defaultOptions, key)) {
324
+ this[key] = defaultOptions[key];
325
+ }
326
+ }
327
+ }
328
+ /*
329
+ * Initializes handling <mat-select [multiple]="true">
330
+ * Note: to improve this code, mat-select should be extended to allow disabling resetting the selection while filtering.
331
+ */
332
+ _initMultipleHandling() {
333
+ if (!this.matSelect.ngControl) {
334
+ if (this.matSelect.multiple) {
335
+ // note: the access to matSelect.ngControl (instead of matSelect.value / matSelect.valueChanges)
336
+ // is necessary to properly work in multi-selection mode.
337
+ console.error('the mat-select containing cmat-select-search must have a ngModel or formControl directive when multiple=true');
338
+ }
339
+ return;
340
+ }
341
+ // if <mat-select [multiple]="true">
342
+ // store previously selected values and restore them when they are deselected
343
+ // because the option is not available while we are currently filtering
344
+ this._previousSelectedValues = this.matSelect.ngControl.value;
345
+ this.matSelect.ngControl.valueChanges?.pipe(takeUntil(this._onDestroy))
346
+ .subscribe((values) => {
347
+ let restoreSelectedValues = false;
348
+ if (this.matSelect.multiple) {
349
+ if ((this.alwaysRestoreSelectedOptionsMulti || (this.formControl.value && this.formControl.value.length))
350
+ && this._previousSelectedValues && Array.isArray(this._previousSelectedValues)) {
351
+ if (!values || !Array.isArray(values)) {
352
+ values = [];
353
+ }
354
+ const optionValues = this.matSelect.options.map(option => option.value);
355
+ this._previousSelectedValues.forEach((previousValue) => {
356
+ if (!values.some((v) => this.matSelect.compareWith(v, previousValue))
357
+ && !optionValues.some(v => this.matSelect.compareWith(v, previousValue))) {
358
+ // if a value that was selected before is deselected and not found in the options, it was deselected
359
+ // due to the filtering, so we restore it.
360
+ values.push(previousValue);
361
+ restoreSelectedValues = true;
362
+ }
363
+ });
364
+ }
365
+ }
366
+ this._previousSelectedValues = values;
367
+ if (restoreSelectedValues) {
368
+ this.matSelect._onChange(values);
369
+ }
370
+ });
371
+ }
372
+ /**
373
+ * Scrolls the currently active option into the view if it is not yet visible.
374
+ */
375
+ _adjustScrollTopToFitActiveOptionIntoView() {
376
+ if (this.matSelect.panel && this.matSelect.options.length > 0) {
377
+ const matOptionHeight = this._getMatOptionHeight();
378
+ const activeOptionIndex = this.matSelect._keyManager.activeItemIndex || 0;
379
+ const labelCount = _countGroupLabelsBeforeOption(activeOptionIndex, this.matSelect.options, this.matSelect.optionGroups);
380
+ // If the component is in a MatOption, the activeItemIndex will be offset by one.
381
+ const indexOfOptionToFitIntoView = (this._matOption ? -1 : 0) + labelCount + activeOptionIndex;
382
+ const currentScrollTop = this.matSelect.panel.nativeElement.scrollTop;
383
+ const searchInputHeight = this.innerSelectSearch.nativeElement.offsetHeight;
384
+ const amountOfVisibleOptions = Math.floor((SELECT_PANEL_MAX_HEIGHT - searchInputHeight) / matOptionHeight);
385
+ const indexOfFirstVisibleOption = Math.round((currentScrollTop + searchInputHeight) / matOptionHeight) - 1;
386
+ if (indexOfFirstVisibleOption >= indexOfOptionToFitIntoView) {
387
+ this.matSelect.panel.nativeElement.scrollTop = indexOfOptionToFitIntoView * matOptionHeight;
388
+ }
389
+ else if (indexOfFirstVisibleOption + amountOfVisibleOptions <= indexOfOptionToFitIntoView) {
390
+ this.matSelect.panel.nativeElement.scrollTop = (indexOfOptionToFitIntoView + 1) * matOptionHeight
391
+ - (SELECT_PANEL_MAX_HEIGHT - searchInputHeight);
392
+ }
393
+ }
394
+ }
395
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: CmatSelectSearchComponent, deps: [{ token: MatSelect }, { token: i0.ChangeDetectorRef }, { token: i1.ViewportRuler }, { token: MatOption, optional: true }, { token: MatFormField, optional: true }, { token: MAT_SELECTSEARCH_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
396
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.0", type: CmatSelectSearchComponent, isStandalone: true, selector: "cmat-select-search", inputs: { placeholderLabel: "placeholderLabel", type: "type", noEntriesFoundLabel: "noEntriesFoundLabel", showNoFoundLabel: "showNoFoundLabel", indexAndLengthScreenReaderText: "indexAndLengthScreenReaderText", clearSearchInput: "clearSearchInput", searching: "searching", disableInitialFocus: "disableInitialFocus", enableClearOnEscapePressed: "enableClearOnEscapePressed", preventHomeEndKeyPropagation: "preventHomeEndKeyPropagation", disableScrollToActiveOnOptionsChanged: "disableScrollToActiveOnOptionsChanged", ariaLabel: "ariaLabel", showToggleAllCheckbox: "showToggleAllCheckbox", toggleAllCheckboxChecked: "toggleAllCheckboxChecked", toggleAllCheckboxIndeterminate: "toggleAllCheckboxIndeterminate", toggleAllCheckboxTooltipMessage: "toggleAllCheckboxTooltipMessage", toggleAllCheckboxTooltipPosition: "toggleAllCheckboxTooltipPosition", hideClearSearchButton: "hideClearSearchButton", alwaysRestoreSelectedOptionsMulti: "alwaysRestoreSelectedOptionsMulti" }, outputs: { toggleAll: "toggleAll" }, host: { properties: { "class.cmat-select-search-inside-mat-option": "this.isInsideMatOption" } }, providers: [
397
+ {
398
+ provide: NG_VALUE_ACCESSOR,
399
+ useExisting: forwardRef(() => CmatSelectSearchComponent),
400
+ multi: true
401
+ }
402
+ ], queries: [{ propertyName: "clearIcon", first: true, predicate: CmatSelectSearchClearDirective, descendants: true }, { propertyName: "noEntriesFound", first: true, predicate: CmatSelectNoEntriesFoundDirective, descendants: true }], viewQueries: [{ propertyName: "searchSelectInput", first: true, predicate: ["searchSelectInput"], descendants: true, read: ElementRef, static: true }, { propertyName: "innerSelectSearch", first: true, predicate: ["innerSelectSearch"], descendants: true, read: ElementRef, static: true }], exportAs: ["cmatSelectSearch"], ngImport: i0, template: "<input matInput class=\"cmat-select-search-input cmat-select-search-hidden\" />\r\n\r\n<div #innerSelectSearch class=\"cmat-select-search-inner mat-typography mat-tab-header\"\r\n [ngClass]=\"{'cmat-select-search-inner-multiple': matSelect.multiple, 'cmat-select-search-inner-toggle-all': isToggleAllCheckboxVisible() }\">\r\n\r\n <mat-checkbox *ngIf=\"isToggleAllCheckboxVisible()\" [color]=\"matFormField?.color\"\r\n class=\"cmat-select-search-toggle-all-checkbox\" [checked]=\"toggleAllCheckboxChecked\"\r\n [indeterminate]=\"toggleAllCheckboxIndeterminate\" [matTooltip]=\"toggleAllCheckboxTooltipMessage\"\r\n matTooltipClass=\"cmat-select-search-toggle-all-tooltip\" [matTooltipPosition]=\"toggleAllCheckboxTooltipPosition\"\r\n (change)=\"emitSelectAllBooleanToParent($event.checked)\">\r\n </mat-checkbox>\r\n <span matPrefix class=\"flex flex-col justify-center pl-2\">\r\n <mat-icon class=\"cmat-select-search-icon\" color=\"primary\" svgIcon=\"heroicons_solid:magnifying-glass\"></mat-icon>\r\n </span>\r\n <input matInput class=\"cmat-select-search-input cmat-input-element\" autocomplete=\"off\" [type]=\"type\"\r\n [formControl]=\"formControl\" #searchSelectInput (keydown)=\"handleKeydown($event)\" (keyup)=\"handleKeyup($event)\"\r\n (blur)=\"onBlur()\" [placeholder]=\"placeholderLabel\" [attr.aria-label]=\"ariaLabel\" />\r\n <mat-spinner *ngIf=\"searching\" class=\"cmat-select-search-spinner\" diameter=\"16\"></mat-spinner>\r\n\r\n <button type=\"button\" *ngIf=\"!hideClearSearchButton && value && !searching\" mat-icon-button aria-label=\"Clear\"\r\n (click)=\"reset(true)\" class=\"cmat-select-search-clear\">\r\n <ng-content *ngIf=\"clearIcon; else defaultIcon\" select=\"[cmatSelectSearchClear]\"></ng-content>\r\n <ng-template #defaultIcon>\r\n <mat-icon svgIcon=\"mat_outline:close\"></mat-icon>\r\n </ng-template>\r\n </button>\r\n\r\n <ng-content select=\".cmat-select-search-custom-header-content\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"showNoEntriesFound$ | async\" class=\"cmat-select-search-no-entries-found\">\r\n <ng-content *ngIf=\"noEntriesFound; else defaultNoEntriesFound\" select=\"[cmatSelectNoEntriesFound]\"></ng-content>\r\n <ng-template #defaultNoEntriesFound>{{noEntriesFoundLabel}}</ng-template>\r\n</div>", styles: ["cmat-select-search .cmat-select-search-hidden{visibility:hidden}cmat-select-search .cmat-select-search-inner{position:absolute;top:0;left:0;width:100%;z-index:100;font-size:inherit;box-shadow:none;display:flex;border-bottom-width:1px;border-bottom-style:solid}cmat-select-search .cmat-select-search-inner.cmat-select-search-inner-multiple.cmat-select-search-inner-toggle-all{display:flex;align-items:center}cmat-select-search .cmat-select-search-inner .cmat-input-element{flex-basis:auto;vertical-align:middle!important}cmat-select-search .cmat-select-search-input{box-sizing:border-box;width:100%;border:none;font-family:inherit;font-size:inherit;color:currentColor;outline:none;background:none;padding:0 44px 0 16px;height:47px;line-height:47px}:host-context([dir=rtl]) cmat-select-search .cmat-select-search-input{padding-right:16px;padding-left:44px}cmat-select-search .cmat-select-search-no-entries-found{padding-top:8px}cmat-select-search .cmat-select-search-clear{position:absolute;right:4px;top:5px}:host-context([dir=rtl]) cmat-select-search .cmat-select-search-clear{right:auto;left:4px}cmat-select-search .cmat-select-search-spinner{position:absolute;right:16px;top:calc(50% - 8px)}:host-context([dir=rtl]) cmat-select-search .cmat-select-search-spinner{right:auto;left:16px}cmat-select-search .cmat-select-search-toggle-all-checkbox{padding-left:5px;padding-bottom:2px}:host-context([dir=rtl]) cmat-select-search .cmat-select-search-toggle-all-checkbox{padding-left:0;padding-right:5px}.mat-mdc-option[aria-disabled=true].contains-cmat-select-search{position:sticky;top:0;z-index:1;opacity:1;pointer-events:all;background:var(--mat-select-panel-background-color)}.mat-mdc-option[aria-disabled=true].contains-cmat-select-search .mat-icon{margin-right:0;margin-left:0}.mat-mdc-option[aria-disabled=true].contains-cmat-select-search mat-pseudo-checkbox{display:none}.mat-mdc-option[aria-disabled=true].contains-cmat-select-search .mdc-list-item__primary-text{opacity:1}.mat-mdc-option[aria-disabled=true].contains-cmat-select-search.cmat-select-search-no-entries-found{height:96px}.cmat-select-search-panel{transform:none!important;overflow-x:hidden;position:relative;padding:0!important}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
403
+ }
404
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: CmatSelectSearchComponent, decorators: [{
405
+ type: Component,
406
+ args: [{ selector: 'cmat-select-search', providers: [
407
+ {
408
+ provide: NG_VALUE_ACCESSOR,
409
+ useExisting: forwardRef(() => CmatSelectSearchComponent),
410
+ multi: true
411
+ }
412
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, exportAs: 'cmatSelectSearch', imports: [MatInputModule, NgClass, NgIf, MatCheckboxModule, MatTooltipModule, MatFormFieldModule,
413
+ MatIconModule, FormsModule, ReactiveFormsModule, MatProgressSpinnerModule, MatButtonModule, AsyncPipe], template: "<input matInput class=\"cmat-select-search-input cmat-select-search-hidden\" />\r\n\r\n<div #innerSelectSearch class=\"cmat-select-search-inner mat-typography mat-tab-header\"\r\n [ngClass]=\"{'cmat-select-search-inner-multiple': matSelect.multiple, 'cmat-select-search-inner-toggle-all': isToggleAllCheckboxVisible() }\">\r\n\r\n <mat-checkbox *ngIf=\"isToggleAllCheckboxVisible()\" [color]=\"matFormField?.color\"\r\n class=\"cmat-select-search-toggle-all-checkbox\" [checked]=\"toggleAllCheckboxChecked\"\r\n [indeterminate]=\"toggleAllCheckboxIndeterminate\" [matTooltip]=\"toggleAllCheckboxTooltipMessage\"\r\n matTooltipClass=\"cmat-select-search-toggle-all-tooltip\" [matTooltipPosition]=\"toggleAllCheckboxTooltipPosition\"\r\n (change)=\"emitSelectAllBooleanToParent($event.checked)\">\r\n </mat-checkbox>\r\n <span matPrefix class=\"flex flex-col justify-center pl-2\">\r\n <mat-icon class=\"cmat-select-search-icon\" color=\"primary\" svgIcon=\"heroicons_solid:magnifying-glass\"></mat-icon>\r\n </span>\r\n <input matInput class=\"cmat-select-search-input cmat-input-element\" autocomplete=\"off\" [type]=\"type\"\r\n [formControl]=\"formControl\" #searchSelectInput (keydown)=\"handleKeydown($event)\" (keyup)=\"handleKeyup($event)\"\r\n (blur)=\"onBlur()\" [placeholder]=\"placeholderLabel\" [attr.aria-label]=\"ariaLabel\" />\r\n <mat-spinner *ngIf=\"searching\" class=\"cmat-select-search-spinner\" diameter=\"16\"></mat-spinner>\r\n\r\n <button type=\"button\" *ngIf=\"!hideClearSearchButton && value && !searching\" mat-icon-button aria-label=\"Clear\"\r\n (click)=\"reset(true)\" class=\"cmat-select-search-clear\">\r\n <ng-content *ngIf=\"clearIcon; else defaultIcon\" select=\"[cmatSelectSearchClear]\"></ng-content>\r\n <ng-template #defaultIcon>\r\n <mat-icon svgIcon=\"mat_outline:close\"></mat-icon>\r\n </ng-template>\r\n </button>\r\n\r\n <ng-content select=\".cmat-select-search-custom-header-content\"></ng-content>\r\n</div>\r\n\r\n<div *ngIf=\"showNoEntriesFound$ | async\" class=\"cmat-select-search-no-entries-found\">\r\n <ng-content *ngIf=\"noEntriesFound; else defaultNoEntriesFound\" select=\"[cmatSelectNoEntriesFound]\"></ng-content>\r\n <ng-template #defaultNoEntriesFound>{{noEntriesFoundLabel}}</ng-template>\r\n</div>", styles: ["cmat-select-search .cmat-select-search-hidden{visibility:hidden}cmat-select-search .cmat-select-search-inner{position:absolute;top:0;left:0;width:100%;z-index:100;font-size:inherit;box-shadow:none;display:flex;border-bottom-width:1px;border-bottom-style:solid}cmat-select-search .cmat-select-search-inner.cmat-select-search-inner-multiple.cmat-select-search-inner-toggle-all{display:flex;align-items:center}cmat-select-search .cmat-select-search-inner .cmat-input-element{flex-basis:auto;vertical-align:middle!important}cmat-select-search .cmat-select-search-input{box-sizing:border-box;width:100%;border:none;font-family:inherit;font-size:inherit;color:currentColor;outline:none;background:none;padding:0 44px 0 16px;height:47px;line-height:47px}:host-context([dir=rtl]) cmat-select-search .cmat-select-search-input{padding-right:16px;padding-left:44px}cmat-select-search .cmat-select-search-no-entries-found{padding-top:8px}cmat-select-search .cmat-select-search-clear{position:absolute;right:4px;top:5px}:host-context([dir=rtl]) cmat-select-search .cmat-select-search-clear{right:auto;left:4px}cmat-select-search .cmat-select-search-spinner{position:absolute;right:16px;top:calc(50% - 8px)}:host-context([dir=rtl]) cmat-select-search .cmat-select-search-spinner{right:auto;left:16px}cmat-select-search .cmat-select-search-toggle-all-checkbox{padding-left:5px;padding-bottom:2px}:host-context([dir=rtl]) cmat-select-search .cmat-select-search-toggle-all-checkbox{padding-left:0;padding-right:5px}.mat-mdc-option[aria-disabled=true].contains-cmat-select-search{position:sticky;top:0;z-index:1;opacity:1;pointer-events:all;background:var(--mat-select-panel-background-color)}.mat-mdc-option[aria-disabled=true].contains-cmat-select-search .mat-icon{margin-right:0;margin-left:0}.mat-mdc-option[aria-disabled=true].contains-cmat-select-search mat-pseudo-checkbox{display:none}.mat-mdc-option[aria-disabled=true].contains-cmat-select-search .mdc-list-item__primary-text{opacity:1}.mat-mdc-option[aria-disabled=true].contains-cmat-select-search.cmat-select-search-no-entries-found{height:96px}.cmat-select-search-panel{transform:none!important;overflow-x:hidden;position:relative;padding:0!important}\n"] }]
414
+ }], ctorParameters: () => [{ type: i10.MatSelect, decorators: [{
415
+ type: Inject,
416
+ args: [MatSelect]
417
+ }] }, { type: i0.ChangeDetectorRef }, { type: i1.ViewportRuler }, { type: i11.MatOption, decorators: [{
418
+ type: Optional
419
+ }, {
420
+ type: Inject,
421
+ args: [MatOption]
422
+ }] }, { type: i3.MatFormField, decorators: [{
423
+ type: Optional
424
+ }, {
425
+ type: Inject,
426
+ args: [MatFormField]
427
+ }] }, { type: undefined, decorators: [{
428
+ type: Optional
429
+ }, {
430
+ type: Inject,
431
+ args: [MAT_SELECTSEARCH_DEFAULT_OPTIONS]
432
+ }] }], propDecorators: { placeholderLabel: [{
433
+ type: Input
434
+ }], type: [{
435
+ type: Input
436
+ }], noEntriesFoundLabel: [{
437
+ type: Input
438
+ }], showNoFoundLabel: [{
439
+ type: Input
440
+ }], indexAndLengthScreenReaderText: [{
441
+ type: Input
442
+ }], clearSearchInput: [{
443
+ type: Input
444
+ }], searching: [{
445
+ type: Input
446
+ }], disableInitialFocus: [{
447
+ type: Input
448
+ }], enableClearOnEscapePressed: [{
449
+ type: Input
450
+ }], preventHomeEndKeyPropagation: [{
451
+ type: Input
452
+ }], disableScrollToActiveOnOptionsChanged: [{
453
+ type: Input
454
+ }], ariaLabel: [{
455
+ type: Input
456
+ }], showToggleAllCheckbox: [{
457
+ type: Input
458
+ }], toggleAllCheckboxChecked: [{
459
+ type: Input
460
+ }], toggleAllCheckboxIndeterminate: [{
461
+ type: Input
462
+ }], toggleAllCheckboxTooltipMessage: [{
463
+ type: Input
464
+ }], toggleAllCheckboxTooltipPosition: [{
465
+ type: Input
466
+ }], hideClearSearchButton: [{
467
+ type: Input
468
+ }], alwaysRestoreSelectedOptionsMulti: [{
469
+ type: Input
470
+ }], toggleAll: [{
471
+ type: Output
472
+ }], searchSelectInput: [{
473
+ type: ViewChild,
474
+ args: ['searchSelectInput', { read: ElementRef, static: true }]
475
+ }], innerSelectSearch: [{
476
+ type: ViewChild,
477
+ args: ['innerSelectSearch', { read: ElementRef, static: true }]
478
+ }], clearIcon: [{
479
+ type: ContentChild,
480
+ args: [CmatSelectSearchClearDirective, { static: false }]
481
+ }], noEntriesFound: [{
482
+ type: ContentChild,
483
+ args: [CmatSelectNoEntriesFoundDirective]
484
+ }], isInsideMatOption: [{
485
+ type: HostBinding,
486
+ args: ['class.cmat-select-search-inside-mat-option']
487
+ }] } });
488
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvc2VsZWN0LXNlYXJjaC9zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy9zZWxlY3Qtc2VhcmNoL3NlbGVjdC1zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFDOUQsU0FBUyxFQUNULFlBQVksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFDL0QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsU0FBUyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hG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QUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO2VBQzlKLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO2VBQ25JLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDO2VBQ3ZJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDO2VBQzdJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENB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LEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUdHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFFRywrQkFBK0I7c0JBQXZDLEtBQUs7Z0JBRUcsZ0NBQWdDO3NCQUF4QyxLQUFLO2dCQUVHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFFRyxpQ0FBaUM7c0JBQXpDLEtBQUs7Z0JBR0ksU0FBUztzQkFBbEIsTUFBTTtnQkFFNkQsaUJBQWlCO3NCQUFwRixTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVFLGlCQUFpQjtzQkFBcEYsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRCxTQUFTO3NCQUF6RSxZQUFZO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDZCxjQUFjO3NCQUE5RCxZQUFZO3VCQUFDLGlDQUFpQztnQkE2QzNDLGlCQUFpQjtzQkFEcEIsV0FBVzt1QkFBQyw0Q0FBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgQ29udGVudENoaWxkLCBPcHRpb25hbCwgSG9zdEJpbmRpbmcsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IFZpZXdwb3J0UnVsZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IENtYXRTZWxlY3RTZWFyY2hDbGVhckRpcmVjdGl2ZSB9IGZyb20gJy4vc2VsZWN0LXNlYXJjaC1jbGVhci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBNYXRPcHRpb24sIF9jb3VudEdyb3VwTGFiZWxzQmVmb3JlT3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCwgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IENtYXRTZWxlY3ROb0VudHJpZXNGb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4vc2VsZWN0LW5vLWVudHJpZXMtZm91bmQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgY29uZmlndXJhYmxlRGVmYXVsdE9wdGlvbnMsIE1hdFNlbGVjdFNlYXJjaE9wdGlvbnMsIE1BVF9TRUxFQ1RTRUFSQ0hfREVGQVVMVF9PUFRJT05TIH0gZnJvbSAnLi9kZWZhdWx0LW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ0lmLCBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuXHJcbmNvbnN0IFNFTEVDVF9QQU5FTF9NQVhfSEVJR0hUID0gMjU2O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjbWF0LXNlbGVjdC1zZWFyY2gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDbWF0U2VsZWN0U2VhcmNoQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBleHBvcnRBczogJ2NtYXRTZWxlY3RTZWFyY2gnLFxyXG4gIGltcG9ydHM6IFtNYXRJbnB1dE1vZHVsZSwgTmdDbGFzcywgTmdJZiwgTWF0Q2hlY2tib3hNb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgQXN5bmNQaXBlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ21hdFNlbGVjdFNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyTGFiZWwgPSAn5p+l6K+iJztcclxuXHJcbiAgQElucHV0KCkgdHlwZSA9ICd0ZXh0JztcclxuXHJcbiAgQElucHV0KCkgbm9FbnRyaWVzRm91bmRMYWJlbCA9ICfml6Dnu5PmnpwnO1xyXG5cclxuICBASW5wdXQoKSBzaG93Tm9Gb3VuZExhYmVsID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgaW5kZXhBbmRMZW5ndGhTY3JlZW5SZWFkZXJUZXh0ID0gJyBvZiAnO1xyXG5cclxuICBASW5wdXQoKSBjbGVhclNlYXJjaElucHV0ID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgc2VhcmNoaW5nID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVJbml0aWFsRm9jdXMgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgZW5hYmxlQ2xlYXJPbkVzY2FwZVByZXNzZWQgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcHJldmVudEhvbWVFbmRLZXlQcm9wYWdhdGlvbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBkaXNhYmxlU2Nyb2xsVG9BY3RpdmVPbk9wdGlvbnNDaGFuZ2VkID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGFyaWFMYWJlbCA9ICfkuIvmi4nmn6Xor6InO1xyXG5cclxuICAvKiogV2hldGhlciB0byBzaG93IFNlbGVjdCBBbGwgQ2hlY2tib3ggKGZvciBtYXQtc2VsZWN0W211bHRpPXRydWVdKSAqL1xyXG4gIEBJbnB1dCgpIHNob3dUb2dnbGVBbGxDaGVja2JveCA9IGZhbHNlO1xyXG5cclxuICAvKiogc2VsZWN0IGFsbCBjaGVja2JveCBjaGVja2VkIHN0YXRlICovXHJcbiAgQElucHV0KCkgdG9nZ2xlQWxsQ2hlY2tib3hDaGVja2VkID0gZmFsc2U7XHJcblxyXG4gIC8qKiBzZWxlY3QgYWxsIGNoZWNrYm94IGluZGV0ZXJtaW5hdGUgc3RhdGUgKi9cclxuICBASW5wdXQoKSB0b2dnbGVBbGxDaGVja2JveEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgdG9nZ2xlQWxsQ2hlY2tib3hUb29sdGlwTWVzc2FnZSA9ICcnO1xyXG5cclxuICBASW5wdXQoKSB0b2dnbGVBbGxDaGVja2JveFRvb2x0aXBQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdhYm92ZScgfCAnYmVsb3cnIHwgJ2JlZm9yZScgfCAnYWZ0ZXInID0gJ2JlbG93JztcclxuXHJcbiAgQElucHV0KCkgaGlkZUNsZWFyU2VhcmNoQnV0dG9uID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGFsd2F5c1Jlc3RvcmVTZWxlY3RlZE9wdGlvbnNNdWx0aSA9IGZhbHNlO1xyXG5cclxuICAvKiogT3V0cHV0IGVtaXR0ZXIgdG8gc2VuZCB0byBwYXJlbnQgY29tcG9uZW50IHdpdGggdGhlIHRvZ2dsZSBhbGwgYm9vbGVhbiAqL1xyXG4gIEBPdXRwdXQoKSB0b2dnbGVBbGwgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFNlbGVjdElucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2VhcmNoU2VsZWN0SW5wdXQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lubmVyU2VsZWN0U2VhcmNoJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgaW5uZXJTZWxlY3RTZWFyY2g6IEVsZW1lbnRSZWY7XHJcbiAgQENvbnRlbnRDaGlsZChDbWF0U2VsZWN0U2VhcmNoQ2xlYXJEaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSB9KSBjbGVhckljb246IENtYXRTZWxlY3RTZWFyY2hDbGVhckRpcmVjdGl2ZTtcclxuICBAQ29udGVudENoaWxkKENtYXRTZWxlY3ROb0VudHJpZXNGb3VuZERpcmVjdGl2ZSkgbm9FbnRyaWVzRm91bmQ6IENtYXRTZWxlY3ROb0VudHJpZXNGb3VuZERpcmVjdGl2ZTtcclxuICBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG5cclxuICBwcml2YXRlIF9vcHRpb25zJDogQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5TGlzdDxNYXRPcHRpb24+IHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5TGlzdDxNYXRPcHRpb24+IHwgbnVsbD4obnVsbCk7XHJcbiAgcHJpdmF0ZSBfbGFzdEV4dGVybmFsSW5wdXRWYWx1ZT86IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBfb3B0aW9uc0xpc3QkOiBPYnNlcnZhYmxlPE1hdE9wdGlvbltdIHwgbnVsbD4gPSB0aGlzLl9vcHRpb25zJC5waXBlKFxyXG4gICAgc3dpdGNoTWFwKF9vcHRpb25zID0+IF9vcHRpb25zID9cclxuICAgICAgX29wdGlvbnMuY2hhbmdlcy5waXBlKFxyXG4gICAgICAgIG1hcChvcHRpb25zID0+IG9wdGlvbnMudG9BcnJheSgpKSxcclxuICAgICAgICBzdGFydFdpdGg8TWF0T3B0aW9uW10+KF9vcHRpb25zLnRvQXJyYXkoKSksXHJcbiAgICAgICkgOiBvZihudWxsKVxyXG4gICAgKVxyXG4gICk7XHJcblxyXG4gIHByaXZhdGUgX29wdGlvbnNMZW5ndGgkOiBPYnNlcnZhYmxlPG51bWJlcj4gPSB0aGlzLl9vcHRpb25zTGlzdCQucGlwZShcclxuICAgIG1hcChvcHRpb25zID0+IG9wdGlvbnMgPyBvcHRpb25zLmxlbmd0aCA6IDApXHJcbiAgKTtcclxuXHJcbiAgcHJpdmF0ZSBfcHJldmlvdXNTZWxlY3RlZFZhbHVlczogYW55W107XHJcbiAgcHJpdmF0ZSBfb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAvKiogUmVmZXJlbmNlIHRvIGFjdGl2ZSBkZXNjZW5kYW50IGZvciBBUklBIFN1cHBvcnQuICovXHJcbiAgcHJpdmF0ZSBfYWN0aXZlRGVzY2VuZGFudD86IEhUTUxFbGVtZW50O1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE1hdFNlbGVjdCkgcHJvdGVjdGVkIG1hdFNlbGVjdDogTWF0U2VsZWN0LFxyXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfdmlld3BvcnRSdWxlcjogVmlld3BvcnRSdWxlcixcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTWF0T3B0aW9uKSBwcml2YXRlIF9tYXRPcHRpb246IE1hdE9wdGlvbiB8IG51bGwgPSBudWxsLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNYXRGb3JtRmllbGQpIHByb3RlY3RlZCBtYXRGb3JtRmllbGQ6IE1hdEZvcm1GaWVsZCB8IG51bGwgPSBudWxsLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfU0VMRUNUU0VBUkNIX0RFRkFVTFRfT1BUSU9OUykgcHJpdmF0ZSBfZGVmYXVsdE9wdGlvbnM/OiBNYXRTZWxlY3RTZWFyY2hPcHRpb25zXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9hcHBseURlZmF1bHRPcHRpb25zKHRoaXMuX2RlZmF1bHRPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKiB3aGV0aGVyIHRvIHNob3cgdGhlIG5vIGVudHJpZXMgZm91bmQgbWVzc2FnZSAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXHJcbiAgc2hvd05vRW50cmllc0ZvdW5kJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMsXHJcbiAgICB0aGlzLl9vcHRpb25zTGVuZ3RoJFxyXG4gIF0pLnBpcGUoXHJcbiAgICBtYXAoKFt2YWx1ZSwgb3B0aW9uc0xlbmd0aF0pID0+IHRoaXMubm9FbnRyaWVzRm91bmRMYWJlbCAmJiB2YWx1ZVxyXG4gICAgICAmJiBvcHRpb25zTGVuZ3RoID09PSB0aGlzLl9nZXRPcHRpb25zTGVuZ3RoT2Zmc2V0KCkpXHJcbiAgKTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jbWF0LXNlbGVjdC1zZWFyY2gtaW5zaWRlLW1hdC1vcHRpb24nKVxyXG4gIGdldCBpc0luc2lkZU1hdE9wdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMuX21hdE9wdGlvbjtcclxuICB9XHJcblxyXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IF9vcHRpb25zKCk6IFF1ZXJ5TGlzdDxNYXRPcHRpb24+IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucyQuZ2V0VmFsdWUoKTtcclxuICB9XHJcbiAgcHVibGljIHNldCBfb3B0aW9ucyhfb3B0aW9uczogUXVlcnlMaXN0PE1hdE9wdGlvbj4pIHtcclxuICAgIHRoaXMuX29wdGlvbnMkLm5leHQoX29wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxyXG4gIG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhbmVsQ2xhc3MgPSAnY21hdC1zZWxlY3Qtc2VhcmNoLXBhbmVsJztcclxuICAgIGlmICh0aGlzLm1hdFNlbGVjdC5wYW5lbENsYXNzKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMubWF0U2VsZWN0LnBhbmVsQ2xhc3MpKSB7XHJcbiAgICAgICAgKHRoaXMubWF0U2VsZWN0LnBhbmVsQ2xhc3MgYXMgc3RyaW5nW10pLnB1c2gocGFuZWxDbGFzcyk7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMubWF0U2VsZWN0LnBhbmVsQ2xhc3MgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5tYXRTZWxlY3QucGFuZWxDbGFzcyA9IFt0aGlzLm1hdFNlbGVjdC5wYW5lbENsYXNzLCBwYW5lbENsYXNzXTtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5tYXRTZWxlY3QucGFuZWxDbGFzcyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICB0aGlzLm1hdFNlbGVjdC5wYW5lbENsYXNzLmVudHJpZXNbcGFuZWxDbGFzc10gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1hdFNlbGVjdC5wYW5lbENsYXNzID0gcGFuZWxDbGFzcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fbWF0T3B0aW9uKSB7XHJcbiAgICAgIHRoaXMuX21hdE9wdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuX21hdE9wdGlvbi5fZ2V0SG9zdEVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKCdjb250YWlucy1jbWF0LXNlbGVjdC1zZWFyY2gnKTtcclxuICAgICAgdGhpcy5fbWF0T3B0aW9uLl9nZXRIb3N0RWxlbWVudCgpLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignPGNtYXQtc2VsZWN0LXNlYXJjaD4gbXVzdCBiZSBwbGFjZWQgaW5zaWRlIGEgPG1hdC1vcHRpb24+IGVsZW1lbnQnKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5tYXRTZWxlY3Qub3BlbmVkQ2hhbmdlXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGRlbGF5KDEpLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgob3BlbmVkKSA9PiB7XHJcbiAgICAgICAgaWYgKG9wZW5lZCkge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZUluaXRpYWxGb2N1cykge1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLmNsZWFyU2VhcmNoSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5tYXRTZWxlY3Qub3BlbmVkQ2hhbmdlXHJcbiAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5tYXRTZWxlY3QuX2tleU1hbmFnZXIpIHtcclxuICAgICAgICAgIHRoaXMubWF0U2VsZWN0Ll9rZXlNYW5hZ2VyLmNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2FkanVzdFNjcm9sbFRvcFRvRml0QWN0aXZlT3B0aW9uSW50b1ZpZXcoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdfa2V5TWFuYWdlciB3YXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMubWF0U2VsZWN0Lm9wdGlvbnM7XHJcbiAgICAgICAgbGV0IHByZXZpb3VzRmlyc3RPcHRpb24gPSB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKVt0aGlzLl9nZXRPcHRpb25zTGVuZ3RoT2Zmc2V0KCldO1xyXG5cclxuICAgICAgICB0aGlzLl9vcHRpb25zLmNoYW5nZXNcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGF2b2lkIFwiZXhwcmVzc2lvbiBoYXMgYmVlbiBjaGFuZ2VkXCIgZXJyb3JcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIFF1ZXJ5TGlzdCB0byBhbiBhcnJheVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX29wdGlvbnMudG9BcnJheSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFRoZSB0cnVlIGZpcnN0IGl0ZW0gaXMgb2Zmc2V0IGJ5IDFcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaXJzdE9wdGlvbiA9IG9wdGlvbnNbdGhpcy5fZ2V0T3B0aW9uc0xlbmd0aE9mZnNldCgpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlNYW5hZ2VyID0gdGhpcy5tYXRTZWxlY3QuX2tleU1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5TWFuYWdlciAmJiB0aGlzLm1hdFNlbGVjdC5wYW5lbE9wZW4pIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIHNldCBmaXJzdCBpdGVtIGFjdGl2ZSBhbmQgaW5wdXQgd2lkdGhcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZmlyc3Qgb3B0aW9uIGluIHRoZXNlIGNoYW5nZXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzLlxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdE9wdGlvbklzQ2hhbmdlZCA9ICF0aGlzLm1hdFNlbGVjdC5jb21wYXJlV2l0aChwcmV2aW91c0ZpcnN0T3B0aW9uLCBjdXJyZW50Rmlyc3RPcHRpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0T3B0aW9uSXNDaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgIWtleU1hbmFnZXIuYWN0aXZlSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHx8ICFvcHRpb25zLmZpbmQob3B0aW9uID0+IHRoaXMubWF0U2VsZWN0LmNvbXBhcmVXaXRoKG9wdGlvbiwga2V5TWFuYWdlci5hY3RpdmVJdGVtKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyB3YWl0IGZvciBwYW5lbCB3aWR0aCBjaGFuZ2VzXHJcbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSW5wdXRXaWR0aCgpO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlU2Nyb2xsVG9BY3RpdmVPbk9wdGlvbnNDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRqdXN0U2Nyb2xsVG9wVG9GaXRBY3RpdmVPcHRpb25JbnRvVmlldygpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91ciByZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgIHByZXZpb3VzRmlyc3RPcHRpb24gPSBjdXJyZW50Rmlyc3RPcHRpb247XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBhZGQgb3IgcmVtb3ZlIGNzcyBjbGFzcyBkZXBlbmRpbmcgb24gd2hldGhlciB0byBzaG93IHRoZSBubyBlbnRyaWVzIGZvdW5kIG1lc3NhZ2VcclxuICAgIC8vIG5vdGU6IHRoaXMgaXMgaGFja3lcclxuICAgIHRoaXMuc2hvd05vRW50cmllc0ZvdW5kJC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KVxyXG4gICAgKS5zdWJzY3JpYmUoKHNob3dOb0VudHJpZXNGb3VuZCkgPT4ge1xyXG4gICAgICAvLyBzZXQgbm8gZW50cmllcyBmb3VuZCBjbGFzcyBvbiBtYXQgb3B0aW9uXHJcbiAgICAgIGlmICh0aGlzLl9tYXRPcHRpb24pIHtcclxuICAgICAgICBpZiAoc2hvd05vRW50cmllc0ZvdW5kKSB7XHJcbiAgICAgICAgICB0aGlzLl9tYXRPcHRpb24uX2dldEhvc3RFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgnY21hdC1zZWxlY3Qtc2VhcmNoLW5vLWVudHJpZXMtZm91bmQnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fbWF0T3B0aW9uLl9nZXRIb3N0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoJ2NtYXQtc2VsZWN0LXNlYXJjaC1uby1lbnRyaWVzLWZvdW5kJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyByZXNpemUgdGhlIGlucHV0IHdpZHRoIHdoZW4gdGhlIHZpZXdwb3J0IGlzIHJlc2l6ZWQsIGkuZS4gdGhlIHRyaWdnZXIgd2lkdGggY291bGQgcG90ZW50aWFsbHkgYmUgcmVzaXplZFxyXG4gICAgdGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMubWF0U2VsZWN0LnBhbmVsT3Blbikge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9pbml0TXVsdGlwbGVIYW5kbGluZygpO1xyXG5cclxuICAgIHRoaXMuX29wdGlvbnNMaXN0JC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KVxyXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAvLyB1cGRhdGUgdmlldyB3aGVuIGF2YWlsYWJsZSBvcHRpb25zIGNoYW5nZVxyXG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZW1pdFNlbGVjdEFsbEJvb2xlYW5Ub1BhcmVudChzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy50b2dnbGVBbGwuZW1pdChzdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KHZvaWQgMCk7XHJcbiAgICB0aGlzLl9vbkRlc3Ryb3kuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGlzVG9nZ2xlQWxsQ2hlY2tib3hWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWF0U2VsZWN0Lm11bHRpcGxlICYmIHRoaXMuc2hvd1RvZ2dsZUFsbENoZWNrYm94O1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKChldmVudC5rZXkgJiYgZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSkgfHxcclxuICAgICAgKGV2ZW50LmNvZGUgPT09ICdLZXlBJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlCJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlDJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlEJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlFJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlGJylcclxuICAgICAgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlHJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlIJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlJJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlKJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlLJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlMJylcclxuICAgICAgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlNJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlOJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlPJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlQJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlRJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlSJylcclxuICAgICAgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlTJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlUJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlVJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlWJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlXJylcclxuICAgICAgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlYJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlZJykgfHwgKGV2ZW50LmNvZGUgPT09ICdLZXlaJykgfHwgKGV2ZW50LmNvZGUgPT09ICdEaWdpdDAnKSB8fCAoZXZlbnQuY29kZSA9PT0gJ0RpZ2l0MScpXHJcbiAgICAgIHx8IChldmVudC5jb2RlID09PSAnRGlnaXQyJykgfHwgKGV2ZW50LmNvZGUgPT09ICdEaWdpdDMnKSB8fCAoZXZlbnQuY29kZSA9PT0gJ0RpZ2l0NCcpIHx8IChldmVudC5jb2RlID09PSAnRGlnaXQ1JykgfHwgKGV2ZW50LmNvZGUgPT09ICdEaWdpdDYnKVxyXG4gICAgICB8fCAoZXZlbnQuY29kZSA9PT0gJ0RpZ2l0NycpIHx8IChldmVudC5jb2RlID09PSAnRGlnaXQ4JykgfHwgKGV2ZW50LmNvZGUgPT09ICdEaWdpdDknKVxyXG4gICAgICB8fCAoZXZlbnQuY29kZSA9PT0gJ1NwYWNlJylcclxuICAgICAgfHwgKHRoaXMucHJldmVudEhvbWVFbmRLZXlQcm9wYWdhdGlvbiAmJiAoZXZlbnQuY29kZSA9PT0gJ0hvbWUnIHx8IGV2ZW50LmNvZGUgPT09ICdFbmQnKSlcclxuICAgICkge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5tYXRTZWxlY3QubXVsdGlwbGUgJiYgZXZlbnQua2V5ICYmIGV2ZW50LmNvZGUgPT09ICdFbnRlcicpIHtcclxuICAgICAgLy8gUmVnYWluIGZvY3VzIGFmdGVyIG11bHRpc2VsZWN0LCBzbyB3ZSBjYW4gZnVydGhlciB0eXBlXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1cygpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTcGVjaWFsIGNhc2UgaWYgY2xpY2sgRXNjYXBlLCBpZiBpbnB1dCBpcyBlbXB0eSwgY2xvc2UgdGhlIGRyb3Bkb3duLCBpZiBub3QsIGVtcHR5IG91dCB0aGUgc2VhcmNoIGZpZWxkXHJcbiAgICBpZiAodGhpcy5lbmFibGVDbGVhck9uRXNjYXBlUHJlc3NlZCA9PT0gdHJ1ZSAmJiBldmVudC5jb2RlID09PSAnRXNjYXBlJyAmJiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMucmVzZXQodHJ1ZSk7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUga2V5IHVwIGV2ZW50IHdpdGggTWF0U2VsZWN0LlxyXG4gICAqIEFsbG93cyBlLmcuIHRoZSBhbm5vdW5jaW5nIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlRGVzY2VuZGFudCBieSBzY3JlZW4gcmVhZGVycy5cclxuICAgKi9cclxuICBoYW5kbGVLZXl1cChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdBcnJvd1VwJyB8fCBldmVudC5jb2RlID09PSAnQXJyb3dEb3duJykge1xyXG4gICAgICBjb25zdCBhcmlhQWN0aXZlRGVzY2VuZGFudElkID0gdGhpcy5tYXRTZWxlY3QuX2dldEFyaWFBY3RpdmVEZXNjZW5kYW50KCk7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3B0aW9ucz8udG9BcnJheSgpLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGFyaWFBY3RpdmVEZXNjZW5kYW50SWQpO1xyXG4gICAgICBpZiAoaW5kZXggJiYgaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fdW5zZWxlY3RBY3RpdmVEZXNjZW5kYW50KCk7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlRGVzY2VuZGFudCA9IHRoaXMuX29wdGlvbnM/LnRvQXJyYXkoKVtpbmRleF0uX2dldEhvc3RFbGVtZW50KCk7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlRGVzY2VuZGFudD8uc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgJ3RydWUnKTtcclxuICAgICAgICB0aGlzLnNlYXJjaFNlbGVjdElucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBhcmlhQWN0aXZlRGVzY2VuZGFudElkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sYXN0RXh0ZXJuYWxJbnB1dFZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdW5zZWxlY3RBY3RpdmVEZXNjZW5kYW50KCk7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gdGhpcy5fbGFzdEV4dGVybmFsSW5wdXRWYWx1ZSksXHJcbiAgICAgIHRhcCgoKSA9PiB0aGlzLl9sYXN0RXh0ZXJuYWxJbnB1dFZhbHVlID0gdW5kZWZpbmVkKSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSlcclxuICAgICkuc3Vic2NyaWJlKGZuKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9jdXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VhcmNoU2VsZWN0SW5wdXQgfHwgIXRoaXMubWF0U2VsZWN0LnBhbmVsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5tYXRTZWxlY3QucGFuZWwubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IHNjcm9sbFRvcCA9IHBhbmVsLnNjcm9sbFRvcDtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFNlbGVjdElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuXHJcbiAgICBwYW5lbC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXQoZm9jdXM/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKCcnKTtcclxuICAgIGlmIChmb2N1cykge1xyXG4gICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlSW5wdXRXaWR0aCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pbm5lclNlbGVjdFNlYXJjaCB8fCAhdGhpcy5pbm5lclNlbGVjdFNlYXJjaC5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5pbm5lclNlbGVjdFNlYXJjaC5uYXRpdmVFbGVtZW50O1xyXG4gICAgbGV0IHBhbmVsRWxlbWVudDogSFRNTEVsZW1lbnQgfCB2b2lkID0gdm9pZCAwO1xyXG4gICAgd2hpbGUgKGVsZW1lbnQgPT09IGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xyXG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ21hdC1zZWxlY3QtcGFuZWwnKSkge1xyXG4gICAgICAgIHBhbmVsRWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChwYW5lbEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5pbm5lclNlbGVjdFNlYXJjaC5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gcGFuZWxFbGVtZW50LmNsaWVudFdpZHRoICsgJ3B4JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldE1hdE9wdGlvbkhlaWdodCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMubWF0U2VsZWN0Lm9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tYXRTZWxlY3Qub3B0aW9ucy5maXJzdC5fZ2V0SG9zdEVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRPcHRpb25zTGVuZ3RoT2Zmc2V0KCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5fbWF0T3B0aW9uKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91bnNlbGVjdEFjdGl2ZURlc2NlbmRhbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hY3RpdmVEZXNjZW5kYW50Py5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnKTtcclxuICAgIHRoaXMuc2VhcmNoU2VsZWN0SW5wdXQubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpO1xyXG4gIH1cclxuICBwcml2YXRlIF9hcHBseURlZmF1bHRPcHRpb25zKGRlZmF1bHRPcHRpb25zPzogTWF0U2VsZWN0U2VhcmNoT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgaWYgKCFkZWZhdWx0T3B0aW9ucykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb25maWd1cmFibGVEZWZhdWx0T3B0aW9ucykge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlZmF1bHRPcHRpb25zLCBrZXkpKSB7XHJcbiAgICAgICAgKHRoaXNba2V5XSBhcyBhbnkpID0gZGVmYXVsdE9wdGlvbnNba2V5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvKlxyXG4gKiBJbml0aWFsaXplcyBoYW5kbGluZyA8bWF0LXNlbGVjdCBbbXVsdGlwbGVdPVwidHJ1ZVwiPlxyXG4gKiBOb3RlOiB0byBpbXByb3ZlIHRoaXMgY29kZSwgbWF0LXNlbGVjdCBzaG91bGQgYmUgZXh0ZW5kZWQgdG8gYWxsb3cgZGlzYWJsaW5nIHJlc2V0dGluZyB0aGUgc2VsZWN0aW9uIHdoaWxlIGZpbHRlcmluZy5cclxuICovXHJcbiAgcHJpdmF0ZSBfaW5pdE11bHRpcGxlSGFuZGxpbmcoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubWF0U2VsZWN0Lm5nQ29udHJvbCkge1xyXG4gICAgICBpZiAodGhpcy5tYXRTZWxlY3QubXVsdGlwbGUpIHtcclxuICAgICAgICAvLyBub3RlOiB0aGUgYWNjZXNzIHRvIG1hdFNlbGVjdC5uZ0NvbnRyb2wgKGluc3RlYWQgb2YgbWF0U2VsZWN0LnZhbHVlIC8gbWF0U2VsZWN0LnZhbHVlQ2hhbmdlcylcclxuICAgICAgICAvLyBpcyBuZWNlc3NhcnkgdG8gcHJvcGVybHkgd29yayBpbiBtdWx0aS1zZWxlY3Rpb24gbW9kZS5cclxuICAgICAgICBjb25zb2xlLmVycm9yKCd0aGUgbWF0LXNlbGVjdCBjb250YWluaW5nIGNtYXQtc2VsZWN0LXNlYXJjaCBtdXN0IGhhdmUgYSBuZ01vZGVsIG9yIGZvcm1Db250cm9sIGRpcmVjdGl2ZSB3aGVuIG11bHRpcGxlPXRydWUnKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBpZiA8bWF0LXNlbGVjdCBbbXVsdGlwbGVdPVwidHJ1ZVwiPlxyXG4gICAgLy8gc3RvcmUgcHJldmlvdXNseSBzZWxlY3RlZCB2YWx1ZXMgYW5kIHJlc3RvcmUgdGhlbSB3aGVuIHRoZXkgYXJlIGRlc2VsZWN0ZWRcclxuICAgIC8vIGJlY2F1c2UgdGhlIG9wdGlvbiBpcyBub3QgYXZhaWxhYmxlIHdoaWxlIHdlIGFyZSBjdXJyZW50bHkgZmlsdGVyaW5nXHJcbiAgICB0aGlzLl9wcmV2aW91c1NlbGVjdGVkVmFsdWVzID0gdGhpcy5tYXRTZWxlY3QubmdDb250cm9sLnZhbHVlO1xyXG5cclxuICAgIHRoaXMubWF0U2VsZWN0Lm5nQ29udHJvbC52YWx1ZUNoYW5nZXM/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlcykgPT4ge1xyXG4gICAgICAgIGxldCByZXN0b3JlU2VsZWN0ZWRWYWx1ZXMgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5tYXRTZWxlY3QubXVsdGlwbGUpIHtcclxuICAgICAgICAgIGlmICgodGhpcy5hbHdheXNSZXN0b3JlU2VsZWN0ZWRPcHRpb25zTXVsdGkgfHwgKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgJiYgdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5sZW5ndGgpKVxyXG4gICAgICAgICAgICAmJiB0aGlzLl9wcmV2aW91c1NlbGVjdGVkVmFsdWVzICYmIEFycmF5LmlzQXJyYXkodGhpcy5fcHJldmlvdXNTZWxlY3RlZFZhbHVlcykpIHtcclxuICAgICAgICAgICAgaWYgKCF2YWx1ZXMgfHwgIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xyXG4gICAgICAgICAgICAgIHZhbHVlcyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvblZhbHVlcyA9IHRoaXMubWF0U2VsZWN0Lm9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb24udmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c1NlbGVjdGVkVmFsdWVzLmZvckVhY2goKHByZXZpb3VzVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5zb21lKCh2OiBhbnkpID0+IHRoaXMubWF0U2VsZWN0LmNvbXBhcmVXaXRoKHYsIHByZXZpb3VzVmFsdWUpKVxyXG4gICAgICAgICAgICAgICAgJiYgIW9wdGlvblZhbHVlcy5zb21lKHYgPT4gdGhpcy5tYXRTZWxlY3QuY29tcGFyZVdpdGgodiwgcHJldmlvdXNWYWx1ZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiBhIHZhbHVlIHRoYXQgd2FzIHNlbGVjdGVkIGJlZm9yZSBpcyBkZXNlbGVjdGVkIGFuZCBub3QgZm91bmQgaW4gdGhlIG9wdGlvbnMsIGl0IHdhcyBkZXNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICAvLyBkdWUgdG8gdGhlIGZpbHRlcmluZywgc28gd2UgcmVzdG9yZSBpdC5cclxuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHByZXZpb3VzVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGVkVmFsdWVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wcmV2aW91c1NlbGVjdGVkVmFsdWVzID0gdmFsdWVzO1xyXG5cclxuICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGVkVmFsdWVzKSB7XHJcbiAgICAgICAgICB0aGlzLm1hdFNlbGVjdC5fb25DaGFuZ2UodmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgY3VycmVudGx5IGFjdGl2ZSBvcHRpb24gaW50byB0aGUgdmlldyBpZiBpdCBpcyBub3QgeWV0IHZpc2libGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfYWRqdXN0U2Nyb2xsVG9wVG9GaXRBY3RpdmVPcHRpb25JbnRvVmlldygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1hdFNlbGVjdC5wYW5lbCAmJiB0aGlzLm1hdFNlbGVjdC5vcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgbWF0T3B0aW9uSGVpZ2h0ID0gdGhpcy5fZ2V0TWF0T3B0aW9uSGVpZ2h0KCk7XHJcbiAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvbkluZGV4ID0gdGhpcy5tYXRTZWxlY3QuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4IHx8IDA7XHJcbiAgICAgIGNvbnN0IGxhYmVsQ291bnQgPSBfY291bnRHcm91cExhYmVsc0JlZm9yZU9wdGlvbihhY3RpdmVPcHRpb25JbmRleCwgdGhpcy5tYXRTZWxlY3Qub3B0aW9ucywgdGhpcy5tYXRTZWxlY3Qub3B0aW9uR3JvdXBzKTtcclxuICAgICAgLy8gSWYgdGhlIGNvbXBvbmVudCBpcyBpbiBhIE1hdE9wdGlvbiwgdGhlIGFjdGl2ZUl0ZW1JbmRleCB3aWxsIGJlIG9mZnNldCBieSBvbmUuXHJcbiAgICAgIGNvbnN0IGluZGV4T2ZPcHRpb25Ub0ZpdEludG9WaWV3ID0gKHRoaXMuX21hdE9wdGlvbiA/IC0xIDogMCkgKyBsYWJlbENvdW50ICsgYWN0aXZlT3B0aW9uSW5kZXg7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxUb3AgPSB0aGlzLm1hdFNlbGVjdC5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcclxuXHJcbiAgICAgIGNvbnN0IHNlYXJjaElucHV0SGVpZ2h0ID0gdGhpcy5pbm5lclNlbGVjdFNlYXJjaC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgY29uc3QgYW1vdW50T2ZWaXNpYmxlT3B0aW9ucyA9IE1hdGguZmxvb3IoKFNFTEVDVF9QQU5FTF9NQVhfSEVJR0hUIC0gc2VhcmNoSW5wdXRIZWlnaHQpIC8gbWF0T3B0aW9uSGVpZ2h0KTtcclxuXHJcbiAgICAgIGNvbnN0IGluZGV4T2ZGaXJzdFZpc2libGVPcHRpb24gPSBNYXRoLnJvdW5kKChjdXJyZW50U2Nyb2xsVG9wICsgc2VhcmNoSW5wdXRIZWlnaHQpIC8gbWF0T3B0aW9uSGVpZ2h0KSAtIDE7XHJcblxyXG4gICAgICBpZiAoaW5kZXhPZkZpcnN0VmlzaWJsZU9wdGlvbiA+PSBpbmRleE9mT3B0aW9uVG9GaXRJbnRvVmlldykge1xyXG4gICAgICAgIHRoaXMubWF0U2VsZWN0LnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gaW5kZXhPZk9wdGlvblRvRml0SW50b1ZpZXcgKiBtYXRPcHRpb25IZWlnaHQ7XHJcbiAgICAgIH0gZWxzZSBpZiAoaW5kZXhPZkZpcnN0VmlzaWJsZU9wdGlvbiArIGFtb3VudE9mVmlzaWJsZU9wdGlvbnMgPD0gaW5kZXhPZk9wdGlvblRvRml0SW50b1ZpZXcpIHtcclxuICAgICAgICB0aGlzLm1hdFNlbGVjdC5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IChpbmRleE9mT3B0aW9uVG9GaXRJbnRvVmlldyArIDEpICogbWF0T3B0aW9uSGVpZ2h0XHJcbiAgICAgICAgICAtIChTRUxFQ1RfUEFORUxfTUFYX0hFSUdIVCAtIHNlYXJjaElucHV0SGVpZ2h0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8aW5wdXQgbWF0SW5wdXQgY2xhc3M9XCJjbWF0LXNlbGVjdC1zZWFyY2gtaW5wdXQgY21hdC1zZWxlY3Qtc2VhcmNoLWhpZGRlblwiIC8+XHJcblxyXG48ZGl2ICNpbm5lclNlbGVjdFNlYXJjaCBjbGFzcz1cImNtYXQtc2VsZWN0LXNlYXJjaC1pbm5lciBtYXQtdHlwb2dyYXBoeSBtYXQtdGFiLWhlYWRlclwiXHJcbiAgW25nQ2xhc3NdPVwieydjbWF0LXNlbGVjdC1zZWFyY2gtaW5uZXItbXVsdGlwbGUnOiBtYXRTZWxlY3QubXVsdGlwbGUsICdjbWF0LXNlbGVjdC1zZWFyY2gtaW5uZXItdG9nZ2xlLWFsbCc6IGlzVG9nZ2xlQWxsQ2hlY2tib3hWaXNpYmxlKCkgfVwiPlxyXG5cclxuICA8bWF0LWNoZWNrYm94ICpuZ0lmPVwiaXNUb2dnbGVBbGxDaGVja2JveFZpc2libGUoKVwiIFtjb2xvcl09XCJtYXRGb3JtRmllbGQ/LmNvbG9yXCJcclxuICAgIGNsYXNzPVwiY21hdC1zZWxlY3Qtc2VhcmNoLXRvZ2dsZS1hbGwtY2hlY2tib3hcIiBbY2hlY2tlZF09XCJ0b2dnbGVBbGxDaGVja2JveENoZWNrZWRcIlxyXG4gICAgW2luZGV0ZXJtaW5hdGVdPVwidG9nZ2xlQWxsQ2hlY2tib3hJbmRldGVybWluYXRlXCIgW21hdFRvb2x0aXBdPVwidG9nZ2xlQWxsQ2hlY2tib3hUb29sdGlwTWVzc2FnZVwiXHJcbiAgICBtYXRUb29sdGlwQ2xhc3M9XCJjbWF0LXNlbGVjdC1zZWFyY2gtdG9nZ2xlLWFsbC10b29sdGlwXCIgW21hdFRvb2x0aXBQb3NpdGlvbl09XCJ0b2dnbGVBbGxDaGVja2JveFRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAoY2hhbmdlKT1cImVtaXRTZWxlY3RBbGxCb29sZWFuVG9QYXJlbnQoJGV2ZW50LmNoZWNrZWQpXCI+XHJcbiAgPC9tYXQtY2hlY2tib3g+XHJcbiAgPHNwYW4gbWF0UHJlZml4IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBwbC0yXCI+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJjbWF0LXNlbGVjdC1zZWFyY2gtaWNvblwiIGNvbG9yPVwicHJpbWFyeVwiIHN2Z0ljb249XCJoZXJvaWNvbnNfc29saWQ6bWFnbmlmeWluZy1nbGFzc1wiPjwvbWF0LWljb24+XHJcbiAgPC9zcGFuPlxyXG4gIDxpbnB1dCBtYXRJbnB1dCBjbGFzcz1cImNtYXQtc2VsZWN0LXNlYXJjaC1pbnB1dCBjbWF0LWlucHV0LWVsZW1lbnRcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbdHlwZV09XCJ0eXBlXCJcclxuICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiICNzZWFyY2hTZWxlY3RJbnB1dCAoa2V5ZG93bik9XCJoYW5kbGVLZXlkb3duKCRldmVudClcIiAoa2V5dXApPVwiaGFuZGxlS2V5dXAoJGV2ZW50KVwiXHJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlckxhYmVsXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIiAvPlxyXG4gIDxtYXQtc3Bpbm5lciAqbmdJZj1cInNlYXJjaGluZ1wiIGNsYXNzPVwiY21hdC1zZWxlY3Qtc2VhcmNoLXNwaW5uZXJcIiBkaWFtZXRlcj1cIjE2XCI+PC9tYXQtc3Bpbm5lcj5cclxuXHJcbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCIhaGlkZUNsZWFyU2VhcmNoQnV0dG9uICYmIHZhbHVlICYmICFzZWFyY2hpbmdcIiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkNsZWFyXCJcclxuICAgIChjbGljayk9XCJyZXNldCh0cnVlKVwiIGNsYXNzPVwiY21hdC1zZWxlY3Qtc2VhcmNoLWNsZWFyXCI+XHJcbiAgICA8bmctY29udGVudCAqbmdJZj1cImNsZWFySWNvbjsgZWxzZSBkZWZhdWx0SWNvblwiIHNlbGVjdD1cIltjbWF0U2VsZWN0U2VhcmNoQ2xlYXJdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SWNvbj5cclxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJtYXRfb3V0bGluZTpjbG9zZVwiPjwvbWF0LWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8bmctY29udGVudCBzZWxlY3Q9XCIuY21hdC1zZWxlY3Qtc2VhcmNoLWN1c3RvbS1oZWFkZXItY29udGVudFwiPjwvbmctY29udGVudD5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwic2hvd05vRW50cmllc0ZvdW5kJCB8IGFzeW5jXCIgY2xhc3M9XCJjbWF0LXNlbGVjdC1zZWFyY2gtbm8tZW50cmllcy1mb3VuZFwiPlxyXG4gIDxuZy1jb250ZW50ICpuZ0lmPVwibm9FbnRyaWVzRm91bmQ7IGVsc2UgZGVmYXVsdE5vRW50cmllc0ZvdW5kXCIgc2VsZWN0PVwiW2NtYXRTZWxlY3ROb0VudHJpZXNGb3VuZF1cIj48L25nLWNvbnRlbnQ+XHJcbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Tm9FbnRyaWVzRm91bmQ+e3tub0VudHJpZXNGb3VuZExhYmVsfX08L25nLXRlbXBsYXRlPlxyXG48L2Rpdj4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21hdC1jb21wb25lbnRzLXNlbGVjdC10cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL3NlbGVjdC10cmVlL2NtYXQtY29tcG9uZW50cy1zZWxlY3QtdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19