@ptsecurity/mosaic 13.3.1 → 13.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (922) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +6 -6
  3. package/_theming.scss +7128 -6885
  4. package/_visual.scss +2694 -2580
  5. package/autocomplete/autocomplete-origin.directive.d.ts +12 -12
  6. package/autocomplete/autocomplete-trigger.directive.d.ts +167 -167
  7. package/autocomplete/autocomplete.component.d.ts +73 -73
  8. package/autocomplete/autocomplete.module.d.ts +12 -12
  9. package/autocomplete/index.d.ts +1 -1
  10. package/autocomplete/ptsecurity-mosaic-autocomplete.d.ts +5 -5
  11. package/autocomplete/public-api.d.ts +4 -4
  12. package/button/button.component.d.ts +40 -40
  13. package/button/button.module.d.ts +10 -10
  14. package/button/index.d.ts +1 -1
  15. package/button/ptsecurity-mosaic-button.d.ts +5 -5
  16. package/button/public-api.d.ts +2 -2
  17. package/button-toggle/button-toggle.component.d.ts +141 -141
  18. package/button-toggle/button-toggle.module.d.ts +9 -9
  19. package/button-toggle/index.d.ts +1 -1
  20. package/button-toggle/ptsecurity-mosaic-button-toggle.d.ts +5 -5
  21. package/button-toggle/public-api.d.ts +2 -2
  22. package/card/card.component.d.ts +26 -26
  23. package/card/card.module.d.ts +10 -10
  24. package/card/index.d.ts +1 -1
  25. package/card/ptsecurity-mosaic-card.d.ts +5 -5
  26. package/card/public-api.d.ts +2 -2
  27. package/checkbox/README.md +1 -1
  28. package/checkbox/checkbox-config.d.ts +13 -13
  29. package/checkbox/checkbox-module.d.ts +9 -9
  30. package/checkbox/checkbox-required-validator.d.ts +13 -13
  31. package/checkbox/checkbox.d.ts +140 -140
  32. package/checkbox/index.d.ts +1 -1
  33. package/checkbox/ptsecurity-mosaic-checkbox.d.ts +5 -5
  34. package/checkbox/public-api.d.ts +4 -4
  35. package/core/animation/animation.d.ts +6 -6
  36. package/core/animation/fade-animations.d.ts +2 -2
  37. package/core/animation/index.d.ts +3 -3
  38. package/core/animation/select-animations.d.ts +12 -12
  39. package/core/common-behaviors/color.d.ts +19 -19
  40. package/core/common-behaviors/common-module.d.ts +25 -25
  41. package/core/common-behaviors/constructor.d.ts +9 -9
  42. package/core/common-behaviors/disabled.d.ts +8 -8
  43. package/core/common-behaviors/error-state.d.ts +25 -25
  44. package/core/common-behaviors/index.d.ts +5 -5
  45. package/core/common-behaviors/tabindex.d.ts +8 -8
  46. package/core/error/error-options.d.ts +14 -14
  47. package/core/formatters/date/formatter.d.ts +203 -203
  48. package/core/formatters/date/templates/en-US.d.ts +74 -74
  49. package/core/formatters/date/templates/ru-RU.d.ts +74 -74
  50. package/core/formatters/index.d.ts +9 -9
  51. package/core/formatters/number/formatter.d.ts +27 -27
  52. package/core/forms/forms-module.d.ts +7 -7
  53. package/core/forms/forms.directive.d.ts +22 -22
  54. package/core/forms/index.d.ts +2 -2
  55. package/core/highlight/highlight.pipe.d.ts +7 -7
  56. package/core/highlight/index.d.ts +9 -9
  57. package/core/index.d.ts +1 -1
  58. package/core/label/label-options.d.ts +13 -13
  59. package/core/line/line.d.ts +28 -28
  60. package/core/option/action.d.ts +42 -42
  61. package/core/option/index.d.ts +4 -4
  62. package/core/option/optgroup.d.ts +16 -16
  63. package/core/option/option-module.d.ts +11 -11
  64. package/core/option/option.d.ts +115 -115
  65. package/core/overlay/overlay-position-map.d.ts +34 -34
  66. package/core/pop-up/constants.d.ts +29 -29
  67. package/core/pop-up/index.d.ts +3 -3
  68. package/core/pop-up/pop-up-trigger.d.ts +70 -70
  69. package/core/pop-up/pop-up.d.ts +36 -36
  70. package/core/ptsecurity-mosaic-core.d.ts +5 -5
  71. package/core/public-api.d.ts +17 -17
  72. package/core/select/constants.d.ts +23 -23
  73. package/core/select/errors.d.ts +19 -19
  74. package/core/select/events.d.ts +1 -1
  75. package/core/select/index.d.ts +3 -3
  76. package/core/selection/constants.d.ts +4 -4
  77. package/core/selection/index.d.ts +3 -3
  78. package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +30 -21
  79. package/core/selection/pseudo-checkbox/pseudo-checkbox.module.d.ts +8 -8
  80. package/core/services/measure-scrollbar.service.d.ts +11 -11
  81. package/core/utils/index.d.ts +1 -1
  82. package/core/utils/public-api.d.ts +1 -1
  83. package/core/utils/utils.d.ts +2 -2
  84. package/core/validation/index.d.ts +1 -1
  85. package/core/validation/validation.d.ts +18 -16
  86. package/core/version.d.ts +2 -2
  87. package/datepicker/calendar-body.component.d.ts +63 -63
  88. package/datepicker/calendar.component.d.ts +151 -151
  89. package/datepicker/datepicker-animations.d.ts +9 -9
  90. package/datepicker/datepicker-errors.d.ts +2 -2
  91. package/datepicker/datepicker-input.directive.d.ts +178 -172
  92. package/datepicker/datepicker-intl.d.ts +32 -32
  93. package/datepicker/datepicker-module.d.ts +20 -20
  94. package/datepicker/datepicker-toggle.component.d.ts +35 -35
  95. package/datepicker/datepicker.component.d.ts +158 -158
  96. package/datepicker/index.d.ts +1 -1
  97. package/datepicker/month-view.component.d.ts +93 -93
  98. package/datepicker/multi-year-view.component.d.ts +72 -72
  99. package/datepicker/ptsecurity-mosaic-datepicker.d.ts +5 -5
  100. package/datepicker/public-api.d.ts +11 -11
  101. package/datepicker/year-view.component.d.ts +90 -90
  102. package/design-tokens/index.d.ts +1 -1
  103. package/design-tokens/legacy-2017/tokens/components/alert.json5 +83 -83
  104. package/design-tokens/legacy-2017/tokens/components/autocomplete.json5 +11 -11
  105. package/design-tokens/legacy-2017/tokens/components/badge.json5 +174 -174
  106. package/design-tokens/legacy-2017/tokens/components/button-toggle.json5 +10 -10
  107. package/design-tokens/legacy-2017/tokens/components/button.json5 +142 -142
  108. package/design-tokens/legacy-2017/tokens/components/card.json5 +51 -51
  109. package/design-tokens/legacy-2017/tokens/components/checkbox.json5 +97 -39
  110. package/design-tokens/legacy-2017/tokens/components/datepicker.json5 +64 -64
  111. package/design-tokens/legacy-2017/tokens/components/divider.json5 +14 -8
  112. package/design-tokens/legacy-2017/tokens/components/dl.json5 +38 -38
  113. package/design-tokens/legacy-2017/tokens/components/dropdown.json5 +48 -48
  114. package/design-tokens/legacy-2017/tokens/components/form-field.json5 +92 -92
  115. package/design-tokens/legacy-2017/tokens/components/forms.json5 +52 -52
  116. package/design-tokens/legacy-2017/tokens/components/icon.json5 +104 -0
  117. package/design-tokens/legacy-2017/tokens/components/input.json5 +12 -12
  118. package/design-tokens/legacy-2017/tokens/components/link.json5 +50 -50
  119. package/design-tokens/legacy-2017/tokens/components/list.json5 +13 -13
  120. package/design-tokens/legacy-2017/tokens/components/modal.json5 +81 -81
  121. package/design-tokens/legacy-2017/tokens/components/navbar.json5 +70 -70
  122. package/design-tokens/legacy-2017/tokens/components/optgroup.json5 +10 -10
  123. package/design-tokens/legacy-2017/tokens/components/option.json5 +12 -12
  124. package/design-tokens/legacy-2017/tokens/components/popover.json5 +68 -68
  125. package/design-tokens/legacy-2017/tokens/components/popup.json5 +16 -18
  126. package/design-tokens/legacy-2017/tokens/components/progress-bar.json5 +13 -13
  127. package/design-tokens/legacy-2017/tokens/components/progress-spinner.json5 +7 -7
  128. package/design-tokens/legacy-2017/tokens/components/radio.json5 +44 -44
  129. package/design-tokens/legacy-2017/tokens/components/select.json5 +24 -24
  130. package/design-tokens/legacy-2017/tokens/components/sidepanel.json5 +44 -32
  131. package/design-tokens/legacy-2017/tokens/components/table.json5 +15 -15
  132. package/design-tokens/legacy-2017/tokens/components/tabs.json5 +101 -101
  133. package/design-tokens/legacy-2017/tokens/components/tags.json5 +134 -131
  134. package/design-tokens/legacy-2017/tokens/components/textarea.json5 +12 -12
  135. package/design-tokens/legacy-2017/tokens/components/timepicker.json5 +7 -7
  136. package/design-tokens/legacy-2017/tokens/components/toggle.json5 +79 -79
  137. package/design-tokens/legacy-2017/tokens/components/tooltip.json5 +83 -83
  138. package/design-tokens/legacy-2017/tokens/components/tree.json5 +15 -15
  139. package/design-tokens/legacy-2017/tokens/properties/aliases.json5 +3 -3
  140. package/design-tokens/legacy-2017/tokens/properties/colors.json5 +118 -114
  141. package/design-tokens/legacy-2017/tokens/properties/font.json5 +12 -12
  142. package/design-tokens/legacy-2017/tokens/properties/globals.json5 +49 -49
  143. package/design-tokens/legacy-2017/tokens/properties/padding.json5 +3 -3
  144. package/design-tokens/legacy-2017/tokens/properties/palette.json5 +163 -163
  145. package/design-tokens/legacy-2017/tokens/properties/typography.json5 +175 -175
  146. package/design-tokens/legacy-2017/tokens.d.ts +7843 -7758
  147. package/design-tokens/pt-2022/tokens/components/alert.json5 +83 -83
  148. package/design-tokens/pt-2022/tokens/components/autocomplete.json5 +11 -11
  149. package/design-tokens/pt-2022/tokens/components/badge.json5 +174 -174
  150. package/design-tokens/pt-2022/tokens/components/button-toggle.json5 +10 -10
  151. package/design-tokens/pt-2022/tokens/components/button.json5 +142 -142
  152. package/design-tokens/pt-2022/tokens/components/card.json5 +51 -51
  153. package/design-tokens/pt-2022/tokens/components/checkbox.json5 +97 -39
  154. package/design-tokens/pt-2022/tokens/components/datepicker.json5 +64 -64
  155. package/design-tokens/pt-2022/tokens/components/divider.json5 +14 -8
  156. package/design-tokens/pt-2022/tokens/components/dl.json5 +38 -38
  157. package/design-tokens/pt-2022/tokens/components/dropdown.json5 +48 -48
  158. package/design-tokens/pt-2022/tokens/components/form-field.json5 +92 -92
  159. package/design-tokens/pt-2022/tokens/components/forms.json5 +52 -52
  160. package/design-tokens/pt-2022/tokens/components/icon.json5 +104 -0
  161. package/design-tokens/pt-2022/tokens/components/input.json5 +12 -12
  162. package/design-tokens/pt-2022/tokens/components/link.json5 +50 -50
  163. package/design-tokens/pt-2022/tokens/components/list.json5 +13 -13
  164. package/design-tokens/pt-2022/tokens/components/modal.json5 +81 -81
  165. package/design-tokens/pt-2022/tokens/components/navbar.json5 +70 -70
  166. package/design-tokens/pt-2022/tokens/components/optgroup.json5 +10 -10
  167. package/design-tokens/pt-2022/tokens/components/option.json5 +12 -12
  168. package/design-tokens/pt-2022/tokens/components/popover.json5 +68 -68
  169. package/design-tokens/pt-2022/tokens/components/popup.json5 +16 -18
  170. package/design-tokens/pt-2022/tokens/components/progress-bar.json5 +13 -13
  171. package/design-tokens/pt-2022/tokens/components/progress-spinner.json5 +7 -7
  172. package/design-tokens/pt-2022/tokens/components/radio.json5 +44 -44
  173. package/design-tokens/pt-2022/tokens/components/select.json5 +24 -24
  174. package/design-tokens/pt-2022/tokens/components/sidepanel.json5 +44 -32
  175. package/design-tokens/pt-2022/tokens/components/table.json5 +15 -15
  176. package/design-tokens/pt-2022/tokens/components/tabs.json5 +101 -101
  177. package/design-tokens/pt-2022/tokens/components/tags.json5 +137 -131
  178. package/design-tokens/pt-2022/tokens/components/textarea.json5 +12 -12
  179. package/design-tokens/pt-2022/tokens/components/timepicker.json5 +7 -7
  180. package/design-tokens/pt-2022/tokens/components/toggle.json5 +79 -79
  181. package/design-tokens/pt-2022/tokens/components/tooltip.json5 +83 -83
  182. package/design-tokens/pt-2022/tokens/components/tree.json5 +15 -15
  183. package/design-tokens/pt-2022/tokens/properties/aliases.json5 +3 -3
  184. package/design-tokens/pt-2022/tokens/properties/colors.json5 +120 -116
  185. package/design-tokens/pt-2022/tokens/properties/font.json5 +15 -15
  186. package/design-tokens/pt-2022/tokens/properties/globals.json5 +49 -49
  187. package/design-tokens/pt-2022/tokens/properties/padding.json5 +3 -3
  188. package/design-tokens/pt-2022/tokens/properties/palette.json5 +232 -225
  189. package/design-tokens/pt-2022/tokens/properties/typography.json5 +175 -175
  190. package/design-tokens/pt-2022/tokens.d.ts +9175 -8795
  191. package/design-tokens/ptsecurity-mosaic-design-tokens.d.ts +5 -5
  192. package/design-tokens/public-api.d.ts +3 -3
  193. package/design-tokens/style-dictionary/build.js +63 -62
  194. package/design-tokens/style-dictionary/configs/css.js +13 -13
  195. package/design-tokens/style-dictionary/configs/index.js +48 -48
  196. package/design-tokens/style-dictionary/configs/js.js +9 -9
  197. package/design-tokens/style-dictionary/configs/scss.js +23 -23
  198. package/design-tokens/style-dictionary/filters/color.js +7 -7
  199. package/design-tokens/style-dictionary/filters/palette.js +7 -7
  200. package/design-tokens/style-dictionary/filters/size.js +7 -7
  201. package/design-tokens/style-dictionary/filters/typography.js +7 -7
  202. package/design-tokens/style-dictionary/formats/palette.js +25 -25
  203. package/design-tokens/style-dictionary/formats/typography.js +52 -52
  204. package/design-tokens/style-dictionary/transformGroups/css.js +13 -13
  205. package/design-tokens/style-dictionary/transformGroups/scss.js +12 -12
  206. package/design-tokens/style-dictionary/transformGroups/ts.js +11 -0
  207. package/design-tokens/style-dictionary/transforms/attribute/palette.js +9 -9
  208. package/design-tokens/style-dictionary/transforms/attribute/prefix.js +11 -11
  209. package/design-tokens/style-dictionary/transforms/attribute/size.js +8 -8
  210. package/design-tokens/style-dictionary/transforms/attribute/typography.js +9 -9
  211. package/divider/divider.component.d.ts +11 -11
  212. package/divider/divider.module.d.ts +8 -8
  213. package/divider/index.d.ts +1 -1
  214. package/divider/ptsecurity-mosaic-divider.d.ts +5 -5
  215. package/divider/public-api.d.ts +2 -2
  216. package/dl/dl.component.d.ts +26 -26
  217. package/dl/dl.module.d.ts +10 -10
  218. package/dl/index.d.ts +1 -1
  219. package/dl/ptsecurity-mosaic-dl.d.ts +5 -5
  220. package/dl/public-api.d.ts +2 -2
  221. package/dropdown/dropdown-animations.d.ts +11 -11
  222. package/dropdown/dropdown-content.directive.d.ts +32 -32
  223. package/dropdown/dropdown-errors.d.ts +17 -17
  224. package/dropdown/dropdown-item.component.d.ts +50 -50
  225. package/dropdown/dropdown-trigger.directive.d.ts +136 -135
  226. package/dropdown/dropdown.component.d.ts +121 -121
  227. package/dropdown/dropdown.module.d.ts +13 -13
  228. package/dropdown/dropdown.types.d.ts +53 -53
  229. package/dropdown/index.d.ts +1 -1
  230. package/dropdown/ptsecurity-mosaic-dropdown.d.ts +5 -5
  231. package/dropdown/public-api.d.ts +8 -8
  232. package/esm2020/autocomplete/autocomplete-origin.directive.mjs +21 -21
  233. package/esm2020/autocomplete/autocomplete-trigger.directive.mjs +555 -555
  234. package/esm2020/autocomplete/autocomplete.component.mjs +154 -154
  235. package/esm2020/autocomplete/autocomplete.module.mjs +34 -34
  236. package/esm2020/autocomplete/index.mjs +2 -2
  237. package/esm2020/autocomplete/ptsecurity-mosaic-autocomplete.mjs +4 -4
  238. package/esm2020/autocomplete/public-api.mjs +5 -5
  239. package/esm2020/button/button.component.mjs +137 -137
  240. package/esm2020/button/button.module.mjs +38 -38
  241. package/esm2020/button/index.mjs +2 -2
  242. package/esm2020/button/ptsecurity-mosaic-button.mjs +4 -4
  243. package/esm2020/button/public-api.mjs +3 -3
  244. package/esm2020/button-toggle/button-toggle.component.mjs +362 -362
  245. package/esm2020/button-toggle/button-toggle.module.mjs +19 -19
  246. package/esm2020/button-toggle/index.mjs +2 -2
  247. package/esm2020/button-toggle/ptsecurity-mosaic-button-toggle.mjs +4 -4
  248. package/esm2020/button-toggle/public-api.mjs +3 -3
  249. package/esm2020/card/card.component.mjs +80 -80
  250. package/esm2020/card/card.module.mjs +30 -30
  251. package/esm2020/card/index.mjs +2 -2
  252. package/esm2020/card/ptsecurity-mosaic-card.mjs +4 -4
  253. package/esm2020/card/public-api.mjs +3 -3
  254. package/esm2020/checkbox/checkbox-config.mjs +6 -6
  255. package/esm2020/checkbox/checkbox-module.mjs +19 -19
  256. package/esm2020/checkbox/checkbox-required-validator.mjs +27 -27
  257. package/esm2020/checkbox/checkbox.mjs +316 -315
  258. package/esm2020/checkbox/index.mjs +2 -2
  259. package/esm2020/checkbox/ptsecurity-mosaic-checkbox.mjs +4 -4
  260. package/esm2020/checkbox/public-api.mjs +5 -5
  261. package/esm2020/core/animation/animation.mjs +8 -8
  262. package/esm2020/core/animation/fade-animations.mjs +9 -9
  263. package/esm2020/core/animation/index.mjs +4 -4
  264. package/esm2020/core/animation/select-animations.mjs +45 -45
  265. package/esm2020/core/common-behaviors/color.mjs +30 -30
  266. package/esm2020/core/common-behaviors/common-module.mjs +83 -83
  267. package/esm2020/core/common-behaviors/constructor.mjs +2 -2
  268. package/esm2020/core/common-behaviors/disabled.mjs +17 -17
  269. package/esm2020/core/common-behaviors/error-state.mjs +31 -31
  270. package/esm2020/core/common-behaviors/index.mjs +6 -6
  271. package/esm2020/core/common-behaviors/tabindex.mjs +18 -18
  272. package/esm2020/core/error/error-options.mjs +26 -26
  273. package/esm2020/core/formatters/date/formatter.mjs +359 -359
  274. package/esm2020/core/formatters/date/templates/en-US.mjs +281 -281
  275. package/esm2020/core/formatters/date/templates/ru-RU.mjs +281 -281
  276. package/esm2020/core/formatters/index.mjs +20 -20
  277. package/esm2020/core/formatters/number/formatter.mjs +105 -105
  278. package/esm2020/core/forms/forms-module.mjs +24 -24
  279. package/esm2020/core/forms/forms.directive.mjs +66 -66
  280. package/esm2020/core/forms/index.mjs +3 -3
  281. package/esm2020/core/highlight/highlight.pipe.mjs +17 -17
  282. package/esm2020/core/highlight/index.mjs +19 -19
  283. package/esm2020/core/index.mjs +2 -2
  284. package/esm2020/core/label/label-options.mjs +4 -4
  285. package/esm2020/core/line/line.mjs +70 -70
  286. package/esm2020/core/option/action.mjs +121 -121
  287. package/esm2020/core/option/index.mjs +5 -5
  288. package/esm2020/core/option/optgroup.mjs +31 -31
  289. package/esm2020/core/option/option-module.mjs +21 -21
  290. package/esm2020/core/option/option.mjs +257 -257
  291. package/esm2020/core/overlay/overlay-position-map.mjs +244 -244
  292. package/esm2020/core/pop-up/constants.mjs +34 -34
  293. package/esm2020/core/pop-up/index.mjs +4 -4
  294. package/esm2020/core/pop-up/pop-up-trigger.mjs +239 -239
  295. package/esm2020/core/pop-up/pop-up.mjs +94 -94
  296. package/esm2020/core/ptsecurity-mosaic-core.mjs +4 -4
  297. package/esm2020/core/public-api.mjs +18 -18
  298. package/esm2020/core/select/constants.mjs +27 -27
  299. package/esm2020/core/select/errors.mjs +26 -26
  300. package/esm2020/core/select/events.mjs +2 -2
  301. package/esm2020/core/select/index.mjs +4 -4
  302. package/esm2020/core/selection/constants.mjs +6 -6
  303. package/esm2020/core/selection/index.mjs +4 -4
  304. package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +49 -37
  305. package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs +18 -18
  306. package/esm2020/core/services/measure-scrollbar.service.mjs +48 -48
  307. package/esm2020/core/utils/index.mjs +2 -2
  308. package/esm2020/core/utils/public-api.mjs +2 -2
  309. package/esm2020/core/utils/utils.mjs +5 -5
  310. package/esm2020/core/validation/index.mjs +2 -2
  311. package/esm2020/core/validation/validation.mjs +118 -89
  312. package/esm2020/core/version.mjs +3 -3
  313. package/esm2020/datepicker/calendar-body.component.mjs +106 -106
  314. package/esm2020/datepicker/calendar.component.mjs +362 -362
  315. package/esm2020/datepicker/datepicker-animations.mjs +32 -32
  316. package/esm2020/datepicker/datepicker-errors.mjs +6 -6
  317. package/esm2020/datepicker/datepicker-input.directive.mjs +936 -900
  318. package/esm2020/datepicker/datepicker-intl.mjs +40 -40
  319. package/esm2020/datepicker/datepicker-module.mjs +107 -107
  320. package/esm2020/datepicker/datepicker-toggle.component.mjs +86 -86
  321. package/esm2020/datepicker/datepicker.component.mjs +408 -408
  322. package/esm2020/datepicker/index.mjs +2 -2
  323. package/esm2020/datepicker/month-view.component.mjs +257 -257
  324. package/esm2020/datepicker/multi-year-view.component.mjs +218 -218
  325. package/esm2020/datepicker/ptsecurity-mosaic-datepicker.mjs +4 -4
  326. package/esm2020/datepicker/public-api.mjs +12 -12
  327. package/esm2020/datepicker/year-view.component.mjs +253 -253
  328. package/esm2020/design-tokens/index.mjs +2 -2
  329. package/esm2020/design-tokens/legacy-2017/tokens.mjs +1137 -1052
  330. package/esm2020/design-tokens/pt-2022/tokens.mjs +1207 -1112
  331. package/esm2020/design-tokens/ptsecurity-mosaic-design-tokens.mjs +4 -4
  332. package/esm2020/design-tokens/public-api.mjs +4 -4
  333. package/esm2020/divider/divider.component.mjs +39 -39
  334. package/esm2020/divider/divider.module.mjs +18 -18
  335. package/esm2020/divider/index.mjs +2 -2
  336. package/esm2020/divider/ptsecurity-mosaic-divider.mjs +4 -4
  337. package/esm2020/divider/public-api.mjs +3 -3
  338. package/esm2020/dl/dl.component.mjs +78 -78
  339. package/esm2020/dl/dl.module.mjs +42 -42
  340. package/esm2020/dl/index.mjs +2 -2
  341. package/esm2020/dl/ptsecurity-mosaic-dl.mjs +4 -4
  342. package/esm2020/dl/public-api.mjs +3 -3
  343. package/esm2020/dropdown/dropdown-animations.mjs +41 -41
  344. package/esm2020/dropdown/dropdown-content.directive.mjs +64 -64
  345. package/esm2020/dropdown/dropdown-errors.mjs +29 -29
  346. package/esm2020/dropdown/dropdown-item.component.mjs +139 -139
  347. package/esm2020/dropdown/dropdown-trigger.directive.mjs +489 -485
  348. package/esm2020/dropdown/dropdown.component.mjs +292 -292
  349. package/esm2020/dropdown/dropdown.module.mjs +50 -50
  350. package/esm2020/dropdown/dropdown.types.mjs +24 -24
  351. package/esm2020/dropdown/index.mjs +2 -2
  352. package/esm2020/dropdown/ptsecurity-mosaic-dropdown.mjs +4 -4
  353. package/esm2020/dropdown/public-api.mjs +9 -9
  354. package/esm2020/form-field/cleaner.mjs +23 -23
  355. package/esm2020/form-field/form-field-control.mjs +5 -5
  356. package/esm2020/form-field/form-field-errors.mjs +7 -7
  357. package/esm2020/form-field/form-field.mjs +225 -225
  358. package/esm2020/form-field/form-field.module.mjs +57 -57
  359. package/esm2020/form-field/hint.mjs +23 -23
  360. package/esm2020/form-field/index.mjs +2 -2
  361. package/esm2020/form-field/password-hint.mjs +139 -134
  362. package/esm2020/form-field/prefix.mjs +13 -13
  363. package/esm2020/form-field/ptsecurity-mosaic-form-field.mjs +4 -4
  364. package/esm2020/form-field/public-api.mjs +11 -11
  365. package/esm2020/form-field/stepper.mjs +55 -55
  366. package/esm2020/form-field/suffix.mjs +13 -13
  367. package/esm2020/icon/icon.component.mjs +44 -44
  368. package/esm2020/icon/icon.module.mjs +38 -38
  369. package/esm2020/icon/index.mjs +2 -2
  370. package/esm2020/icon/ptsecurity-mosaic-icon.mjs +4 -4
  371. package/esm2020/icon/public-api.mjs +3 -3
  372. package/esm2020/index.mjs +2 -2
  373. package/esm2020/input/index.mjs +2 -2
  374. package/esm2020/input/input-errors.mjs +4 -4
  375. package/esm2020/input/input-number-validators.mjs +92 -92
  376. package/esm2020/input/input-number.mjs +163 -163
  377. package/esm2020/input/input-password.mjs +372 -368
  378. package/esm2020/input/input-value-accessor.mjs +3 -3
  379. package/esm2020/input/input.mjs +334 -334
  380. package/esm2020/input/input.module.mjs +65 -65
  381. package/esm2020/input/ptsecurity-mosaic-input.mjs +4 -4
  382. package/esm2020/input/public-api.mjs +7 -7
  383. package/esm2020/link/index.mjs +2 -2
  384. package/esm2020/link/link.component.mjs +107 -107
  385. package/esm2020/link/link.module.mjs +26 -26
  386. package/esm2020/link/ptsecurity-mosaic-link.mjs +4 -4
  387. package/esm2020/link/public-api.mjs +3 -3
  388. package/esm2020/list/index.mjs +2 -2
  389. package/esm2020/list/list-selection.component.mjs +686 -687
  390. package/esm2020/list/list.component.mjs +44 -44
  391. package/esm2020/list/list.module.mjs +55 -55
  392. package/esm2020/list/ptsecurity-mosaic-list.mjs +4 -4
  393. package/esm2020/list/public-api.mjs +4 -4
  394. package/esm2020/modal/css-unit.pipe.mjs +17 -17
  395. package/esm2020/modal/index.mjs +2 -2
  396. package/esm2020/modal/modal-control.service.mjs +85 -85
  397. package/esm2020/modal/modal-ref.class.mjs +8 -8
  398. package/esm2020/modal/modal-util.mjs +17 -17
  399. package/esm2020/modal/modal.component.mjs +501 -501
  400. package/esm2020/modal/modal.directive.mjs +52 -52
  401. package/esm2020/modal/modal.module.mjs +72 -72
  402. package/esm2020/modal/modal.service.mjs +124 -124
  403. package/esm2020/modal/modal.type.mjs +7 -7
  404. package/esm2020/modal/ptsecurity-mosaic-modal.mjs +4 -4
  405. package/esm2020/modal/public-api.mjs +7 -7
  406. package/esm2020/navbar/index.mjs +2 -2
  407. package/esm2020/navbar/navbar-item.component.mjs +582 -584
  408. package/esm2020/navbar/navbar.component.mjs +237 -237
  409. package/esm2020/navbar/navbar.module.mjs +92 -92
  410. package/esm2020/navbar/ptsecurity-mosaic-navbar.mjs +4 -4
  411. package/esm2020/navbar/public-api.mjs +5 -5
  412. package/esm2020/navbar/vertical-navbar.animation.mjs +10 -10
  413. package/esm2020/navbar/vertical-navbar.component.mjs +114 -114
  414. package/esm2020/popover/index.mjs +2 -2
  415. package/esm2020/popover/popover-animations.mjs +16 -16
  416. package/esm2020/popover/popover-confirm.component.mjs +108 -108
  417. package/esm2020/popover/popover.component.mjs +253 -253
  418. package/esm2020/popover/popover.module.mjs +24 -24
  419. package/esm2020/popover/ptsecurity-mosaic-popover.mjs +4 -4
  420. package/esm2020/popover/public-api.mjs +5 -5
  421. package/esm2020/progress-bar/index.mjs +2 -2
  422. package/esm2020/progress-bar/progress-bar.component.mjs +42 -42
  423. package/esm2020/progress-bar/progress-bar.module.mjs +30 -30
  424. package/esm2020/progress-bar/ptsecurity-mosaic-progress-bar.mjs +4 -4
  425. package/esm2020/progress-bar/public-api.mjs +3 -3
  426. package/esm2020/progress-spinner/index.mjs +2 -2
  427. package/esm2020/progress-spinner/progress-spinner.component.mjs +46 -46
  428. package/esm2020/progress-spinner/progress-spinner.module.mjs +30 -30
  429. package/esm2020/progress-spinner/ptsecurity-mosaic-progress-spinner.mjs +4 -4
  430. package/esm2020/progress-spinner/public-api.mjs +3 -3
  431. package/esm2020/ptsecurity-mosaic.mjs +4 -4
  432. package/esm2020/public-api.mjs +2 -2
  433. package/esm2020/radio/index.mjs +2 -2
  434. package/esm2020/radio/ptsecurity-mosaic-radio.mjs +4 -4
  435. package/esm2020/radio/public-api.mjs +3 -3
  436. package/esm2020/radio/radio.component.mjs +458 -458
  437. package/esm2020/radio/radio.module.mjs +20 -20
  438. package/esm2020/select/index.mjs +2 -2
  439. package/esm2020/select/ptsecurity-mosaic-select.mjs +4 -4
  440. package/esm2020/select/public-api.mjs +4 -4
  441. package/esm2020/select/select-option.directive.mjs +65 -65
  442. package/esm2020/select/select.component.mjs +1107 -1110
  443. package/esm2020/select/select.module.mjs +73 -73
  444. package/esm2020/sidebar/index.mjs +2 -2
  445. package/esm2020/sidebar/ptsecurity-mosaic-sidebar.mjs +4 -4
  446. package/esm2020/sidebar/public-api.mjs +3 -3
  447. package/esm2020/sidebar/sidebar-animations.mjs +23 -23
  448. package/esm2020/sidebar/sidebar.component.mjs +146 -146
  449. package/esm2020/sidebar/sidebar.module.mjs +30 -30
  450. package/esm2020/sidepanel/index.mjs +2 -2
  451. package/esm2020/sidepanel/ptsecurity-mosaic-sidepanel.mjs +4 -4
  452. package/esm2020/sidepanel/public-api.mjs +7 -7
  453. package/esm2020/sidepanel/sidepanel-animations.mjs +26 -26
  454. package/esm2020/sidepanel/sidepanel-config.mjs +26 -26
  455. package/esm2020/sidepanel/sidepanel-container.component.mjs +106 -106
  456. package/esm2020/sidepanel/sidepanel-directives.mjs +159 -159
  457. package/esm2020/sidepanel/sidepanel-ref.mjs +53 -53
  458. package/esm2020/sidepanel/sidepanel.module.mjs +74 -74
  459. package/esm2020/sidepanel/sidepanel.service.mjs +167 -167
  460. package/esm2020/splitter/index.mjs +2 -2
  461. package/esm2020/splitter/ptsecurity-mosaic-splitter.mjs +4 -4
  462. package/esm2020/splitter/public-api.mjs +3 -3
  463. package/esm2020/splitter/splitter.component.mjs +482 -482
  464. package/esm2020/splitter/splitter.module.mjs +40 -40
  465. package/esm2020/table/index.mjs +2 -2
  466. package/esm2020/table/ptsecurity-mosaic-table.mjs +4 -4
  467. package/esm2020/table/public-api.mjs +3 -3
  468. package/esm2020/table/table.component.mjs +16 -16
  469. package/esm2020/table/table.module.mjs +30 -30
  470. package/esm2020/tabs/index.mjs +2 -2
  471. package/esm2020/tabs/paginated-tab-header.mjs +479 -479
  472. package/esm2020/tabs/ptsecurity-mosaic-tabs.mjs +4 -4
  473. package/esm2020/tabs/public-api.mjs +11 -11
  474. package/esm2020/tabs/tab-body.component.mjs +178 -178
  475. package/esm2020/tabs/tab-content.directive.mjs +15 -15
  476. package/esm2020/tabs/tab-group.component.mjs +350 -350
  477. package/esm2020/tabs/tab-header.component.mjs +67 -67
  478. package/esm2020/tabs/tab-label-wrapper.directive.mjs +78 -78
  479. package/esm2020/tabs/tab-label.directive.mjs +17 -17
  480. package/esm2020/tabs/tab-nav-bar/index.mjs +2 -2
  481. package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +110 -110
  482. package/esm2020/tabs/tab.component.mjs +133 -133
  483. package/esm2020/tabs/tabs-animations.mjs +24 -24
  484. package/esm2020/tabs/tabs.module.mjs +104 -104
  485. package/esm2020/tags/index.mjs +2 -2
  486. package/esm2020/tags/ptsecurity-mosaic-tags.mjs +4 -4
  487. package/esm2020/tags/public-api.mjs +6 -6
  488. package/esm2020/tags/tag-default-options.mjs +4 -4
  489. package/esm2020/tags/tag-input.mjs +229 -229
  490. package/esm2020/tags/tag-list.component.mjs +722 -722
  491. package/esm2020/tags/tag-text-control.mjs +2 -2
  492. package/esm2020/tags/tag.component.mjs +375 -377
  493. package/esm2020/tags/tag.module.mjs +56 -56
  494. package/esm2020/textarea/index.mjs +2 -2
  495. package/esm2020/textarea/ptsecurity-mosaic-textarea.mjs +4 -4
  496. package/esm2020/textarea/public-api.mjs +3 -3
  497. package/esm2020/textarea/textarea.component.mjs +269 -269
  498. package/esm2020/textarea/textarea.module.mjs +21 -21
  499. package/esm2020/timepicker/index.mjs +2 -2
  500. package/esm2020/timepicker/ptsecurity-mosaic-timepicker.mjs +4 -4
  501. package/esm2020/timepicker/public-api.mjs +4 -4
  502. package/esm2020/timepicker/timepicker.constants.mjs +25 -25
  503. package/esm2020/timepicker/timepicker.directive.mjs +676 -653
  504. package/esm2020/timepicker/timepicker.module.mjs +34 -34
  505. package/esm2020/toggle/index.mjs +2 -2
  506. package/esm2020/toggle/ptsecurity-mosaic-toggle.mjs +4 -4
  507. package/esm2020/toggle/public-api.mjs +3 -3
  508. package/esm2020/toggle/toggle.component.mjs +158 -158
  509. package/esm2020/toggle/toggle.module.mjs +20 -20
  510. package/esm2020/tooltip/index.mjs +2 -2
  511. package/esm2020/tooltip/ptsecurity-mosaic-tooltip.mjs +4 -4
  512. package/esm2020/tooltip/public-api.mjs +3 -3
  513. package/esm2020/tooltip/tooltip.animations.mjs +19 -19
  514. package/esm2020/tooltip/tooltip.component.mjs +295 -295
  515. package/esm2020/tooltip/tooltip.module.mjs +43 -43
  516. package/esm2020/tree/control/base-tree-control.mjs +60 -60
  517. package/esm2020/tree/control/flat-tree-control.mjs +126 -123
  518. package/esm2020/tree/control/nested-tree-control.mjs +41 -41
  519. package/esm2020/tree/control/tree-control.mjs +2 -2
  520. package/esm2020/tree/data-source/flat-data-source.mjs +162 -162
  521. package/esm2020/tree/data-source/nested-data-source.mjs +30 -30
  522. package/esm2020/tree/index.mjs +2 -2
  523. package/esm2020/tree/node.mjs +31 -31
  524. package/esm2020/tree/outlet.mjs +15 -15
  525. package/esm2020/tree/padding.directive.mjs +110 -113
  526. package/esm2020/tree/ptsecurity-mosaic-tree.mjs +4 -4
  527. package/esm2020/tree/public-api.mjs +16 -16
  528. package/esm2020/tree/toggle.mjs +80 -80
  529. package/esm2020/tree/tree-base.mjs +243 -243
  530. package/esm2020/tree/tree-errors.mjs +36 -36
  531. package/esm2020/tree/tree-option.component.mjs +236 -234
  532. package/esm2020/tree/tree-selection.component.mjs +540 -535
  533. package/esm2020/tree/tree.mjs +15 -15
  534. package/esm2020/tree/tree.module.mjs +57 -53
  535. package/esm2020/tree-select/index.mjs +2 -2
  536. package/esm2020/tree-select/ptsecurity-mosaic-tree-select.mjs +4 -4
  537. package/esm2020/tree-select/public-api.mjs +3 -3
  538. package/esm2020/tree-select/tree-select.component.mjs +929 -925
  539. package/esm2020/tree-select/tree-select.module.mjs +47 -47
  540. package/fesm2015/ptsecurity-mosaic-autocomplete.mjs +726 -726
  541. package/fesm2015/ptsecurity-mosaic-autocomplete.mjs.map +1 -1
  542. package/fesm2015/ptsecurity-mosaic-button-toggle.mjs +367 -367
  543. package/fesm2015/ptsecurity-mosaic-button-toggle.mjs.map +1 -1
  544. package/fesm2015/ptsecurity-mosaic-button.mjs +160 -160
  545. package/fesm2015/ptsecurity-mosaic-button.mjs.map +1 -1
  546. package/fesm2015/ptsecurity-mosaic-card.mjs +96 -96
  547. package/fesm2015/ptsecurity-mosaic-card.mjs.map +1 -1
  548. package/fesm2015/ptsecurity-mosaic-checkbox.mjs +349 -348
  549. package/fesm2015/ptsecurity-mosaic-checkbox.mjs.map +1 -1
  550. package/fesm2015/ptsecurity-mosaic-core.mjs +2653 -2613
  551. package/fesm2015/ptsecurity-mosaic-core.mjs.map +1 -1
  552. package/fesm2015/ptsecurity-mosaic-datepicker.mjs +2687 -2649
  553. package/fesm2015/ptsecurity-mosaic-datepicker.mjs.map +1 -1
  554. package/fesm2015/ptsecurity-mosaic-design-tokens.mjs +2440 -2175
  555. package/fesm2015/ptsecurity-mosaic-design-tokens.mjs.map +1 -1
  556. package/fesm2015/ptsecurity-mosaic-divider.mjs +48 -48
  557. package/fesm2015/ptsecurity-mosaic-divider.mjs.map +1 -1
  558. package/fesm2015/ptsecurity-mosaic-dl.mjs +108 -108
  559. package/fesm2015/ptsecurity-mosaic-dl.mjs.map +1 -1
  560. package/fesm2015/ptsecurity-mosaic-dropdown.mjs +1069 -1065
  561. package/fesm2015/ptsecurity-mosaic-dropdown.mjs.map +1 -1
  562. package/fesm2015/ptsecurity-mosaic-form-field.mjs +511 -506
  563. package/fesm2015/ptsecurity-mosaic-form-field.mjs.map +1 -1
  564. package/fesm2015/ptsecurity-mosaic-icon.mjs +73 -73
  565. package/fesm2015/ptsecurity-mosaic-icon.mjs.map +1 -1
  566. package/fesm2015/ptsecurity-mosaic-input.mjs +979 -975
  567. package/fesm2015/ptsecurity-mosaic-input.mjs.map +1 -1
  568. package/fesm2015/ptsecurity-mosaic-link.mjs +121 -121
  569. package/fesm2015/ptsecurity-mosaic-link.mjs.map +1 -1
  570. package/fesm2015/ptsecurity-mosaic-list.mjs +762 -763
  571. package/fesm2015/ptsecurity-mosaic-list.mjs.map +1 -1
  572. package/fesm2015/ptsecurity-mosaic-modal.mjs +824 -824
  573. package/fesm2015/ptsecurity-mosaic-modal.mjs.map +1 -1
  574. package/fesm2015/ptsecurity-mosaic-navbar.mjs +993 -995
  575. package/fesm2015/ptsecurity-mosaic-navbar.mjs.map +1 -1
  576. package/fesm2015/ptsecurity-mosaic-popover.mjs +364 -364
  577. package/fesm2015/ptsecurity-mosaic-popover.mjs.map +1 -1
  578. package/fesm2015/ptsecurity-mosaic-progress-bar.mjs +61 -61
  579. package/fesm2015/ptsecurity-mosaic-progress-bar.mjs.map +1 -1
  580. package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs +65 -65
  581. package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs.map +1 -1
  582. package/fesm2015/ptsecurity-mosaic-radio.mjs +464 -464
  583. package/fesm2015/ptsecurity-mosaic-radio.mjs.map +1 -1
  584. package/fesm2015/ptsecurity-mosaic-select.mjs +1203 -1205
  585. package/fesm2015/ptsecurity-mosaic-select.mjs.map +1 -1
  586. package/fesm2015/ptsecurity-mosaic-sidebar.mjs +185 -185
  587. package/fesm2015/ptsecurity-mosaic-sidebar.mjs.map +1 -1
  588. package/fesm2015/ptsecurity-mosaic-sidepanel.mjs +555 -555
  589. package/fesm2015/ptsecurity-mosaic-sidepanel.mjs.map +1 -1
  590. package/fesm2015/ptsecurity-mosaic-splitter.mjs +511 -511
  591. package/fesm2015/ptsecurity-mosaic-splitter.mjs.map +1 -1
  592. package/fesm2015/ptsecurity-mosaic-table.mjs +36 -36
  593. package/fesm2015/ptsecurity-mosaic-table.mjs.map +1 -1
  594. package/fesm2015/ptsecurity-mosaic-tabs.mjs +1460 -1460
  595. package/fesm2015/ptsecurity-mosaic-tabs.mjs.map +1 -1
  596. package/fesm2015/ptsecurity-mosaic-tags.mjs +1342 -1344
  597. package/fesm2015/ptsecurity-mosaic-tags.mjs.map +1 -1
  598. package/fesm2015/ptsecurity-mosaic-textarea.mjs +274 -274
  599. package/fesm2015/ptsecurity-mosaic-textarea.mjs.map +1 -1
  600. package/fesm2015/ptsecurity-mosaic-timepicker.mjs +718 -695
  601. package/fesm2015/ptsecurity-mosaic-timepicker.mjs.map +1 -1
  602. package/fesm2015/ptsecurity-mosaic-toggle.mjs +163 -163
  603. package/fesm2015/ptsecurity-mosaic-toggle.mjs.map +1 -1
  604. package/fesm2015/ptsecurity-mosaic-tooltip.mjs +344 -344
  605. package/fesm2015/ptsecurity-mosaic-tooltip.mjs.map +1 -1
  606. package/fesm2015/ptsecurity-mosaic-tree-select.mjs +945 -940
  607. package/fesm2015/ptsecurity-mosaic-tree-select.mjs.map +1 -1
  608. package/fesm2015/ptsecurity-mosaic-tree.mjs +1685 -1676
  609. package/fesm2015/ptsecurity-mosaic-tree.mjs.map +1 -1
  610. package/fesm2015/ptsecurity-mosaic.mjs +2 -2
  611. package/fesm2020/ptsecurity-mosaic-autocomplete.mjs +722 -722
  612. package/fesm2020/ptsecurity-mosaic-autocomplete.mjs.map +1 -1
  613. package/fesm2020/ptsecurity-mosaic-button-toggle.mjs +365 -365
  614. package/fesm2020/ptsecurity-mosaic-button-toggle.mjs.map +1 -1
  615. package/fesm2020/ptsecurity-mosaic-button.mjs +160 -160
  616. package/fesm2020/ptsecurity-mosaic-button.mjs.map +1 -1
  617. package/fesm2020/ptsecurity-mosaic-card.mjs +96 -96
  618. package/fesm2020/ptsecurity-mosaic-card.mjs.map +1 -1
  619. package/fesm2020/ptsecurity-mosaic-checkbox.mjs +347 -346
  620. package/fesm2020/ptsecurity-mosaic-checkbox.mjs.map +1 -1
  621. package/fesm2020/ptsecurity-mosaic-core.mjs +2682 -2642
  622. package/fesm2020/ptsecurity-mosaic-core.mjs.map +1 -1
  623. package/fesm2020/ptsecurity-mosaic-datepicker.mjs +2672 -2635
  624. package/fesm2020/ptsecurity-mosaic-datepicker.mjs.map +1 -1
  625. package/fesm2020/ptsecurity-mosaic-design-tokens.mjs +2440 -2175
  626. package/fesm2020/ptsecurity-mosaic-design-tokens.mjs.map +1 -1
  627. package/fesm2020/ptsecurity-mosaic-divider.mjs +48 -48
  628. package/fesm2020/ptsecurity-mosaic-divider.mjs.map +1 -1
  629. package/fesm2020/ptsecurity-mosaic-dl.mjs +108 -108
  630. package/fesm2020/ptsecurity-mosaic-dl.mjs.map +1 -1
  631. package/fesm2020/ptsecurity-mosaic-dropdown.mjs +1056 -1052
  632. package/fesm2020/ptsecurity-mosaic-dropdown.mjs.map +1 -1
  633. package/fesm2020/ptsecurity-mosaic-form-field.mjs +496 -491
  634. package/fesm2020/ptsecurity-mosaic-form-field.mjs.map +1 -1
  635. package/fesm2020/ptsecurity-mosaic-icon.mjs +71 -71
  636. package/fesm2020/ptsecurity-mosaic-icon.mjs.map +1 -1
  637. package/fesm2020/ptsecurity-mosaic-input.mjs +968 -964
  638. package/fesm2020/ptsecurity-mosaic-input.mjs.map +1 -1
  639. package/fesm2020/ptsecurity-mosaic-link.mjs +120 -120
  640. package/fesm2020/ptsecurity-mosaic-link.mjs.map +1 -1
  641. package/fesm2020/ptsecurity-mosaic-list.mjs +755 -756
  642. package/fesm2020/ptsecurity-mosaic-list.mjs.map +1 -1
  643. package/fesm2020/ptsecurity-mosaic-modal.mjs +820 -820
  644. package/fesm2020/ptsecurity-mosaic-modal.mjs.map +1 -1
  645. package/fesm2020/ptsecurity-mosaic-navbar.mjs +977 -979
  646. package/fesm2020/ptsecurity-mosaic-navbar.mjs.map +1 -1
  647. package/fesm2020/ptsecurity-mosaic-popover.mjs +360 -360
  648. package/fesm2020/ptsecurity-mosaic-popover.mjs.map +1 -1
  649. package/fesm2020/ptsecurity-mosaic-progress-bar.mjs +61 -61
  650. package/fesm2020/ptsecurity-mosaic-progress-bar.mjs.map +1 -1
  651. package/fesm2020/ptsecurity-mosaic-progress-spinner.mjs +65 -65
  652. package/fesm2020/ptsecurity-mosaic-progress-spinner.mjs.map +1 -1
  653. package/fesm2020/ptsecurity-mosaic-radio.mjs +462 -462
  654. package/fesm2020/ptsecurity-mosaic-radio.mjs.map +1 -1
  655. package/fesm2020/ptsecurity-mosaic-select.mjs +1198 -1201
  656. package/fesm2020/ptsecurity-mosaic-select.mjs.map +1 -1
  657. package/fesm2020/ptsecurity-mosaic-sidebar.mjs +185 -185
  658. package/fesm2020/ptsecurity-mosaic-sidebar.mjs.map +1 -1
  659. package/fesm2020/ptsecurity-mosaic-sidepanel.mjs +552 -552
  660. package/fesm2020/ptsecurity-mosaic-sidepanel.mjs.map +1 -1
  661. package/fesm2020/ptsecurity-mosaic-splitter.mjs +511 -511
  662. package/fesm2020/ptsecurity-mosaic-splitter.mjs.map +1 -1
  663. package/fesm2020/ptsecurity-mosaic-table.mjs +36 -36
  664. package/fesm2020/ptsecurity-mosaic-table.mjs.map +1 -1
  665. package/fesm2020/ptsecurity-mosaic-tabs.mjs +1445 -1445
  666. package/fesm2020/ptsecurity-mosaic-tabs.mjs.map +1 -1
  667. package/fesm2020/ptsecurity-mosaic-tags.mjs +1335 -1337
  668. package/fesm2020/ptsecurity-mosaic-tags.mjs.map +1 -1
  669. package/fesm2020/ptsecurity-mosaic-textarea.mjs +272 -272
  670. package/fesm2020/ptsecurity-mosaic-textarea.mjs.map +1 -1
  671. package/fesm2020/ptsecurity-mosaic-timepicker.mjs +715 -692
  672. package/fesm2020/ptsecurity-mosaic-timepicker.mjs.map +1 -1
  673. package/fesm2020/ptsecurity-mosaic-toggle.mjs +163 -163
  674. package/fesm2020/ptsecurity-mosaic-toggle.mjs.map +1 -1
  675. package/fesm2020/ptsecurity-mosaic-tooltip.mjs +336 -336
  676. package/fesm2020/ptsecurity-mosaic-tooltip.mjs.map +1 -1
  677. package/fesm2020/ptsecurity-mosaic-tree-select.mjs +942 -938
  678. package/fesm2020/ptsecurity-mosaic-tree-select.mjs.map +1 -1
  679. package/fesm2020/ptsecurity-mosaic-tree.mjs +1672 -1663
  680. package/fesm2020/ptsecurity-mosaic-tree.mjs.map +1 -1
  681. package/fesm2020/ptsecurity-mosaic.mjs +2 -2
  682. package/form-field/cleaner.d.ts +7 -7
  683. package/form-field/form-field-control.d.ts +37 -37
  684. package/form-field/form-field-errors.d.ts +2 -2
  685. package/form-field/form-field.d.ts +69 -69
  686. package/form-field/form-field.module.d.ts +15 -15
  687. package/form-field/hint.d.ts +6 -6
  688. package/form-field/index.d.ts +1 -1
  689. package/form-field/password-hint.d.ts +40 -40
  690. package/form-field/prefix.d.ts +5 -5
  691. package/form-field/ptsecurity-mosaic-form-field.d.ts +5 -5
  692. package/form-field/public-api.d.ts +10 -10
  693. package/form-field/stepper.d.ts +11 -11
  694. package/form-field/suffix.d.ts +5 -5
  695. package/icon/icon.component.d.ts +18 -18
  696. package/icon/icon.module.d.ts +10 -10
  697. package/icon/index.d.ts +1 -1
  698. package/icon/ptsecurity-mosaic-icon.d.ts +5 -5
  699. package/icon/public-api.d.ts +2 -2
  700. package/index.d.ts +1 -1
  701. package/input/index.d.ts +1 -1
  702. package/input/input-errors.d.ts +1 -1
  703. package/input/input-number-validators.d.ts +39 -39
  704. package/input/input-number.d.ts +33 -33
  705. package/input/input-password.d.ts +123 -121
  706. package/input/input-value-accessor.d.ts +4 -4
  707. package/input/input.d.ts +116 -116
  708. package/input/input.module.d.ts +14 -14
  709. package/input/ptsecurity-mosaic-input.d.ts +5 -5
  710. package/input/public-api.d.ts +6 -6
  711. package/link/index.d.ts +1 -1
  712. package/link/link.component.d.ts +38 -38
  713. package/link/link.module.d.ts +9 -9
  714. package/link/ptsecurity-mosaic-link.d.ts +5 -5
  715. package/link/public-api.d.ts +2 -2
  716. package/list/index.d.ts +1 -1
  717. package/list/list-selection.component.d.ts +168 -168
  718. package/list/list.component.d.ts +18 -18
  719. package/list/list.module.d.ts +11 -11
  720. package/list/ptsecurity-mosaic-list.d.ts +5 -5
  721. package/list/public-api.d.ts +3 -3
  722. package/modal/README.md +33 -33
  723. package/modal/css-unit.pipe.d.ts +7 -7
  724. package/modal/index.d.ts +1 -1
  725. package/modal/modal-control.service.d.ts +20 -20
  726. package/modal/modal-ref.class.d.ts +36 -36
  727. package/modal/modal-util.d.ts +12 -12
  728. package/modal/modal.component.d.ts +126 -126
  729. package/modal/modal.directive.d.ts +17 -17
  730. package/modal/modal.module.d.ts +14 -14
  731. package/modal/modal.service.d.ts +33 -33
  732. package/modal/modal.type.d.ts +59 -59
  733. package/modal/ptsecurity-mosaic-modal.d.ts +5 -5
  734. package/modal/public-api.d.ts +6 -6
  735. package/navbar/README.md +41 -41
  736. package/navbar/index.d.ts +1 -1
  737. package/navbar/navbar-item.component.d.ts +161 -161
  738. package/navbar/navbar.component.d.ts +58 -58
  739. package/navbar/navbar.module.d.ts +14 -14
  740. package/navbar/ptsecurity-mosaic-navbar.d.ts +5 -5
  741. package/navbar/public-api.d.ts +4 -4
  742. package/navbar/vertical-navbar.animation.d.ts +2 -2
  743. package/navbar/vertical-navbar.component.d.ts +23 -23
  744. package/package.json +13 -10
  745. package/popover/README.md +32 -32
  746. package/popover/index.d.ts +1 -1
  747. package/popover/popover-animations.d.ts +4 -4
  748. package/popover/popover-confirm.component.d.ts +33 -33
  749. package/popover/popover.component.d.ts +74 -74
  750. package/popover/popover.module.d.ts +12 -12
  751. package/popover/ptsecurity-mosaic-popover.d.ts +5 -5
  752. package/popover/public-api.d.ts +4 -4
  753. package/prebuilt-themes/dark-theme.css +1 -1
  754. package/prebuilt-themes/default-theme.css +1 -1
  755. package/progress-bar/index.d.ts +1 -1
  756. package/progress-bar/progress-bar.component.d.ts +18 -18
  757. package/progress-bar/progress-bar.module.d.ts +9 -9
  758. package/progress-bar/ptsecurity-mosaic-progress-bar.d.ts +5 -5
  759. package/progress-bar/public-api.d.ts +2 -2
  760. package/progress-spinner/index.d.ts +1 -1
  761. package/progress-spinner/progress-spinner.component.d.ts +19 -19
  762. package/progress-spinner/progress-spinner.module.d.ts +9 -9
  763. package/progress-spinner/ptsecurity-mosaic-progress-spinner.d.ts +5 -5
  764. package/progress-spinner/public-api.d.ts +2 -2
  765. package/ptsecurity-mosaic.d.ts +5 -5
  766. package/public-api.d.ts +1 -1
  767. package/radio/index.d.ts +1 -1
  768. package/radio/ptsecurity-mosaic-radio.d.ts +5 -5
  769. package/radio/public-api.d.ts +2 -2
  770. package/radio/radio.component.d.ts +207 -207
  771. package/radio/radio.module.d.ts +10 -10
  772. package/schematics/README.md +35 -35
  773. package/select/index.d.ts +1 -1
  774. package/select/ptsecurity-mosaic-select.d.ts +5 -5
  775. package/select/public-api.d.ts +3 -3
  776. package/select/select-option.directive.d.ts +20 -20
  777. package/select/select.component.d.ts +307 -307
  778. package/select/select.module.d.ts +15 -15
  779. package/sidebar/index.d.ts +1 -1
  780. package/sidebar/ptsecurity-mosaic-sidebar.d.ts +5 -5
  781. package/sidebar/public-api.d.ts +2 -2
  782. package/sidebar/sidebar-animations.d.ts +8 -8
  783. package/sidebar/sidebar.component.d.ts +53 -53
  784. package/sidebar/sidebar.module.d.ts +8 -8
  785. package/sidepanel/index.d.ts +1 -1
  786. package/sidepanel/ptsecurity-mosaic-sidepanel.d.ts +5 -5
  787. package/sidepanel/public-api.d.ts +6 -6
  788. package/sidepanel/sidepanel-animations.d.ts +14 -14
  789. package/sidepanel/sidepanel-config.d.ts +25 -25
  790. package/sidepanel/sidepanel-container.component.d.ts +45 -45
  791. package/sidepanel/sidepanel-directives.d.ts +50 -50
  792. package/sidepanel/sidepanel-ref.d.ts +24 -24
  793. package/sidepanel/sidepanel.module.d.ts +15 -15
  794. package/sidepanel/sidepanel.service.d.ts +57 -57
  795. package/splitter/index.d.ts +1 -1
  796. package/splitter/ptsecurity-mosaic-splitter.d.ts +5 -5
  797. package/splitter/public-api.d.ts +2 -2
  798. package/splitter/splitter.component.d.ts +130 -130
  799. package/splitter/splitter.module.d.ts +9 -9
  800. package/table/index.d.ts +1 -1
  801. package/table/ptsecurity-mosaic-table.d.ts +5 -5
  802. package/table/public-api.d.ts +2 -2
  803. package/table/table.component.d.ts +5 -5
  804. package/table/table.module.d.ts +10 -10
  805. package/tabs/index.d.ts +1 -1
  806. package/tabs/paginated-tab-header.d.ts +179 -179
  807. package/tabs/ptsecurity-mosaic-tabs.d.ts +5 -5
  808. package/tabs/public-api.d.ts +10 -10
  809. package/tabs/tab-body.component.d.ts +95 -95
  810. package/tabs/tab-content.directive.d.ts +9 -9
  811. package/tabs/tab-group.component.d.ts +133 -133
  812. package/tabs/tab-header.component.d.ts +35 -35
  813. package/tabs/tab-label-wrapper.directive.d.ts +30 -30
  814. package/tabs/tab-label.directive.d.ts +9 -9
  815. package/tabs/tab-nav-bar/index.d.ts +1 -1
  816. package/tabs/tab-nav-bar/tab-nav-bar.d.ts +38 -38
  817. package/tabs/tab.component.d.ts +66 -66
  818. package/tabs/tabs-animations.d.ts +4 -4
  819. package/tabs/tabs.module.d.ts +20 -20
  820. package/tags/index.d.ts +1 -1
  821. package/tags/ptsecurity-mosaic-tags.d.ts +5 -5
  822. package/tags/public-api.d.ts +5 -5
  823. package/tags/tag-default-options.d.ts +8 -8
  824. package/tags/tag-input.d.ts +77 -77
  825. package/tags/tag-list.component.d.ts +240 -240
  826. package/tags/tag-text-control.d.ts +10 -10
  827. package/tags/tag.component.d.ts +135 -135
  828. package/tags/tag.module.d.ts +11 -11
  829. package/textarea/index.d.ts +1 -1
  830. package/textarea/ptsecurity-mosaic-textarea.d.ts +5 -5
  831. package/textarea/public-api.d.ts +2 -2
  832. package/textarea/textarea.component.d.ts +111 -111
  833. package/textarea/textarea.module.d.ts +11 -11
  834. package/timepicker/index.d.ts +1 -1
  835. package/timepicker/ptsecurity-mosaic-timepicker.d.ts +5 -5
  836. package/timepicker/public-api.d.ts +3 -3
  837. package/timepicker/timepicker.constants.d.ts +20 -20
  838. package/timepicker/timepicker.directive.d.ts +147 -142
  839. package/timepicker/timepicker.module.d.ts +11 -11
  840. package/toggle/index.d.ts +1 -1
  841. package/toggle/ptsecurity-mosaic-toggle.d.ts +5 -5
  842. package/toggle/public-api.d.ts +2 -2
  843. package/toggle/toggle.component.d.ts +54 -54
  844. package/toggle/toggle.module.d.ts +10 -10
  845. package/tooltip/index.d.ts +1 -1
  846. package/tooltip/ptsecurity-mosaic-tooltip.d.ts +5 -5
  847. package/tooltip/public-api.d.ts +2 -2
  848. package/tooltip/tooltip.animations.d.ts +8 -8
  849. package/tooltip/tooltip.component.d.ts +91 -91
  850. package/tooltip/tooltip.module.d.ts +9 -9
  851. package/tree/control/base-tree-control.d.ts +40 -40
  852. package/tree/control/flat-tree-control.d.ts +52 -48
  853. package/tree/control/nested-tree-control.d.ts +19 -19
  854. package/tree/control/tree-control.d.ts +44 -44
  855. package/tree/data-source/flat-data-source.d.ts +80 -80
  856. package/tree/data-source/nested-data-source.d.ts +15 -15
  857. package/tree/index.d.ts +1 -1
  858. package/tree/node.d.ts +34 -34
  859. package/tree/outlet.d.ts +9 -9
  860. package/tree/padding.directive.d.ts +45 -47
  861. package/tree/ptsecurity-mosaic-tree.d.ts +5 -5
  862. package/tree/public-api.d.ts +15 -15
  863. package/tree/toggle.d.ts +28 -28
  864. package/tree/tree-base.d.ts +97 -97
  865. package/tree/tree-errors.d.ts +25 -25
  866. package/tree/tree-option.component.d.ts +68 -68
  867. package/tree/tree-selection.component.d.ts +132 -130
  868. package/tree/tree.d.ts +6 -6
  869. package/tree/tree.module.d.ts +16 -16
  870. package/tree-select/index.d.ts +1 -1
  871. package/tree-select/ptsecurity-mosaic-tree-select.d.ts +5 -5
  872. package/tree-select/public-api.d.ts +2 -2
  873. package/tree-select/tree-select.component.d.ts +274 -269
  874. package/tree-select/tree-select.module.d.ts +14 -14
  875. package/schematics/collection.json +0 -4
  876. package/schematics/migration.json +0 -10
  877. package/schematics/ng-update/data/attribute-selectors.d.ts +0 -2
  878. package/schematics/ng-update/data/attribute-selectors.js +0 -5
  879. package/schematics/ng-update/data/attribute-selectors.js.map +0 -1
  880. package/schematics/ng-update/data/class-names.d.ts +0 -2
  881. package/schematics/ng-update/data/class-names.js +0 -5
  882. package/schematics/ng-update/data/class-names.js.map +0 -1
  883. package/schematics/ng-update/data/constructor-checks.d.ts +0 -2
  884. package/schematics/ng-update/data/constructor-checks.js +0 -5
  885. package/schematics/ng-update/data/constructor-checks.js.map +0 -1
  886. package/schematics/ng-update/data/css-selectors.d.ts +0 -2
  887. package/schematics/ng-update/data/css-selectors.js +0 -5
  888. package/schematics/ng-update/data/css-selectors.js.map +0 -1
  889. package/schematics/ng-update/data/element-selectors.d.ts +0 -2
  890. package/schematics/ng-update/data/element-selectors.js +0 -5
  891. package/schematics/ng-update/data/element-selectors.js.map +0 -1
  892. package/schematics/ng-update/data/index.d.ts +0 -10
  893. package/schematics/ng-update/data/index.js +0 -14
  894. package/schematics/ng-update/data/index.js.map +0 -1
  895. package/schematics/ng-update/data/input-names.d.ts +0 -2
  896. package/schematics/ng-update/data/input-names.js +0 -35
  897. package/schematics/ng-update/data/input-names.js.map +0 -1
  898. package/schematics/ng-update/data/method-call-checks.d.ts +0 -2
  899. package/schematics/ng-update/data/method-call-checks.js +0 -5
  900. package/schematics/ng-update/data/method-call-checks.js.map +0 -1
  901. package/schematics/ng-update/data/output-names.d.ts +0 -2
  902. package/schematics/ng-update/data/output-names.js +0 -5
  903. package/schematics/ng-update/data/output-names.js.map +0 -1
  904. package/schematics/ng-update/data/property-names.d.ts +0 -2
  905. package/schematics/ng-update/data/property-names.js +0 -5
  906. package/schematics/ng-update/data/property-names.js.map +0 -1
  907. package/schematics/ng-update/data/symbol-removal.d.ts +0 -2
  908. package/schematics/ng-update/data/symbol-removal.js +0 -5
  909. package/schematics/ng-update/data/symbol-removal.js.map +0 -1
  910. package/schematics/ng-update/index.d.ts +0 -2
  911. package/schematics/ng-update/index.js +0 -23
  912. package/schematics/ng-update/index.js.map +0 -1
  913. package/schematics/ng-update/update-9.0.0/mosaic-symbols.json +0 -255
  914. package/schematics/ng-update/update-9.0.0/secondary-entry-points-migration.d.ts +0 -7
  915. package/schematics/ng-update/update-9.0.0/secondary-entry-points-migration.js +0 -154
  916. package/schematics/ng-update/update-9.0.0/secondary-entry-points-migration.js.map +0 -1
  917. package/schematics/ng-update/upgrade-data.d.ts +0 -2
  918. package/schematics/ng-update/upgrade-data.js +0 -17
  919. package/schematics/ng-update/upgrade-data.js.map +0 -1
  920. package/schematics/tsconfig.json +0 -29
  921. package/schematics/tsconfig.lib-test.json +0 -8
  922. package/schematics/tsconfig.lib.json +0 -17
@@ -24,1217 +24,1215 @@ import { McInput } from '@ptsecurity/mosaic/input';
24
24
  import { Subscription, Subject, defer, merge } from 'rxjs';
25
25
  import { take, switchMap, filter, map, distinctUntilChanged, takeUntil, startWith } from 'rxjs/operators';
26
26
 
27
- class McOptionTooltip extends McTooltipTrigger {
28
- constructor(option, overlay, elementRef, ngZone, scrollDispatcher, hostView, scrollStrategy, direction) {
29
- super(overlay, elementRef, ngZone, scrollDispatcher, hostView, scrollStrategy, direction);
30
- this.option = option;
31
- }
32
- get textElement() {
33
- return this.option.textElement.nativeElement;
34
- }
35
- get isOverflown() {
36
- return this.textElement.clientWidth < this.textElement.scrollWidth;
37
- }
38
- ngAfterViewInit() {
39
- this.content = this.option.viewValue;
40
- this.resizeObserver = new ResizeObserver(() => this.disabled = !this.isOverflown);
41
- this.mutationObserver = new MutationObserver(() => this.content = this.option.viewValue);
42
- this.mutationObserver.observe(this.textElement, {
43
- characterData: true, attributes: false, childList: true, subtree: true
44
- });
45
- }
46
- ngOnDestroy() {
47
- super.ngOnDestroy();
48
- if (this.resizeObserver) {
49
- this.resizeObserver.unobserve(this.textElement);
50
- this.resizeObserver.disconnect();
51
- }
52
- if (this.mutationObserver) {
53
- this.mutationObserver.disconnect();
54
- }
55
- }
56
- onMouseEnter() {
57
- this.resizeObserver.observe(this.textElement);
58
- this.disabled = !this.isOverflown;
59
- }
60
- onMouseLeave() {
61
- this.resizeObserver.unobserve(this.textElement);
62
- this.disabled = true;
63
- }
64
- }
65
- /** @nocollapse */ /** @nocollapse */ McOptionTooltip.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McOptionTooltip, deps: [{ token: i1.McOption }, { token: i2.Overlay }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i2.ScrollDispatcher }, { token: i0.ViewContainerRef }, { token: MC_TOOLTIP_SCROLL_STRATEGY }, { token: i3.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
66
- /** @nocollapse */ /** @nocollapse */ McOptionTooltip.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.4", type: McOptionTooltip, selector: "mc-option", host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, usesInheritance: true, ngImport: i0 });
67
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McOptionTooltip, decorators: [{
68
- type: Directive,
69
- args: [{
70
- selector: 'mc-option',
71
- host: {
72
- '(mouseenter)': 'onMouseEnter()',
73
- '(mouseleave)': 'onMouseLeave()'
74
- }
75
- }]
76
- }], ctorParameters: function () {
77
- return [{ type: i1.McOption }, { type: i2.Overlay }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i2.ScrollDispatcher }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
78
- type: Inject,
79
- args: [MC_TOOLTIP_SCROLL_STRATEGY]
80
- }] }, { type: i3.Directionality, decorators: [{
81
- type: Optional
82
- }] }];
27
+ class McOptionTooltip extends McTooltipTrigger {
28
+ constructor(option, overlay, elementRef, ngZone, scrollDispatcher, hostView, scrollStrategy, direction) {
29
+ super(overlay, elementRef, ngZone, scrollDispatcher, hostView, scrollStrategy, direction);
30
+ this.option = option;
31
+ }
32
+ get textElement() {
33
+ return this.option.textElement.nativeElement;
34
+ }
35
+ get isOverflown() {
36
+ return this.textElement.clientWidth < this.textElement.scrollWidth;
37
+ }
38
+ ngAfterViewInit() {
39
+ this.content = this.option.viewValue;
40
+ this.resizeObserver = new ResizeObserver(() => this.disabled = !this.isOverflown);
41
+ this.mutationObserver = new MutationObserver(() => this.content = this.option.viewValue);
42
+ this.mutationObserver.observe(this.textElement, {
43
+ characterData: true, attributes: false, childList: true, subtree: true
44
+ });
45
+ }
46
+ ngOnDestroy() {
47
+ super.ngOnDestroy();
48
+ if (this.resizeObserver) {
49
+ this.resizeObserver.unobserve(this.textElement);
50
+ this.resizeObserver.disconnect();
51
+ }
52
+ if (this.mutationObserver) {
53
+ this.mutationObserver.disconnect();
54
+ }
55
+ }
56
+ onMouseEnter() {
57
+ this.resizeObserver.observe(this.textElement);
58
+ this.disabled = !this.isOverflown;
59
+ }
60
+ onMouseLeave() {
61
+ this.resizeObserver.unobserve(this.textElement);
62
+ this.disabled = true;
63
+ }
64
+ }
65
+ /** @nocollapse */ /** @nocollapse */ McOptionTooltip.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McOptionTooltip, deps: [{ token: i1.McOption }, { token: i2.Overlay }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i2.ScrollDispatcher }, { token: i0.ViewContainerRef }, { token: MC_TOOLTIP_SCROLL_STRATEGY }, { token: i3.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
66
+ /** @nocollapse */ /** @nocollapse */ McOptionTooltip.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.7", type: McOptionTooltip, selector: "mc-option", host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, usesInheritance: true, ngImport: i0 });
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McOptionTooltip, decorators: [{
68
+ type: Directive,
69
+ args: [{
70
+ selector: 'mc-option',
71
+ host: {
72
+ '(mouseenter)': 'onMouseEnter()',
73
+ '(mouseleave)': 'onMouseLeave()'
74
+ }
75
+ }]
76
+ }], ctorParameters: function () {
77
+ return [{ type: i1.McOption }, { type: i2.Overlay }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i2.ScrollDispatcher }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
78
+ type: Inject,
79
+ args: [MC_TOOLTIP_SCROLL_STRATEGY]
80
+ }] }, { type: i3.Directionality, decorators: [{
81
+ type: Optional
82
+ }] }];
83
83
  } });
84
84
 
85
- let nextUniqueId = 0;
86
- /** Change event object that is emitted when the select value has changed. */
87
- class McSelectChange {
88
- constructor(source, value) {
89
- this.source = source;
90
- this.value = value;
91
- }
92
- }
93
- class McSelectSearch {
94
- constructor(formField) {
95
- this.searchChangesSubscription = new Subscription();
96
- this.isSearchChanged = false;
97
- formField.canCleanerClearByEsc = false;
98
- }
99
- focus() {
100
- this.input.focus();
101
- }
102
- reset() {
103
- this.input.ngControl.reset();
104
- }
105
- ngAfterContentInit() {
106
- if (!this.input) {
107
- throw Error('McSelectSearch does not work without mcInput');
108
- }
109
- if (!this.input.ngControl) {
110
- throw Error('McSelectSearch does not work without ngControl');
111
- }
112
- Promise.resolve().then(() => {
113
- this.searchChangesSubscription = this.input.ngControl.valueChanges.subscribe(() => {
114
- this.isSearchChanged = true;
115
- });
116
- });
117
- }
118
- ngOnDestroy() {
119
- this.searchChangesSubscription.unsubscribe();
120
- }
121
- handleKeydown(event) {
122
- // tslint:disable-next-line:deprecation
123
- if (event.keyCode === ESCAPE) {
124
- if (this.input.value) {
125
- this.reset();
126
- event.stopPropagation();
127
- }
128
- }
129
- // tslint:disable-next-line:deprecation
130
- if ([SPACE, HOME, END].includes(event.keyCode)) {
131
- event.stopPropagation();
132
- }
133
- }
134
- }
135
- /** @nocollapse */ /** @nocollapse */ McSelectSearch.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSelectSearch, deps: [{ token: i1$1.McFormField }], target: i0.ɵɵFactoryTarget.Directive });
136
- /** @nocollapse */ /** @nocollapse */ McSelectSearch.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.4", type: McSelectSearch, selector: "[mcSelectSearch]", host: { listeners: { "keydown": "handleKeydown($event)" } }, queries: [{ propertyName: "input", first: true, predicate: McInput, descendants: true }], exportAs: ["mcSelectSearch"], ngImport: i0 });
137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSelectSearch, decorators: [{
138
- type: Directive,
139
- args: [{
140
- selector: '[mcSelectSearch]',
141
- exportAs: 'mcSelectSearch',
142
- host: {
143
- '(keydown)': 'handleKeydown($event)'
144
- }
145
- }]
146
- }], ctorParameters: function () { return [{ type: i1$1.McFormField }]; }, propDecorators: { input: [{
147
- type: ContentChild,
148
- args: [McInput, { static: false }]
149
- }] } });
150
- class McSelectSearchEmptyResult {
151
- }
152
- /** @nocollapse */ /** @nocollapse */ McSelectSearchEmptyResult.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSelectSearchEmptyResult, deps: [], target: i0.ɵɵFactoryTarget.Directive });
153
- /** @nocollapse */ /** @nocollapse */ McSelectSearchEmptyResult.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.4", type: McSelectSearchEmptyResult, selector: "[mc-select-search-empty-result]", exportAs: ["mcSelectSearchEmptyResult"], ngImport: i0 });
154
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSelectSearchEmptyResult, decorators: [{
155
- type: Directive,
156
- args: [{
157
- selector: '[mc-select-search-empty-result]',
158
- exportAs: 'mcSelectSearchEmptyResult'
159
- }]
160
- }] });
161
- class McSelectTrigger {
162
- }
163
- /** @nocollapse */ /** @nocollapse */ McSelectTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSelectTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
164
- /** @nocollapse */ /** @nocollapse */ McSelectTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.4", type: McSelectTrigger, selector: "mc-select-trigger", ngImport: i0 });
165
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSelectTrigger, decorators: [{
166
- type: Directive,
167
- args: [{ selector: 'mc-select-trigger' }]
168
- }] });
169
- class McSelectBase {
170
- constructor(elementRef, defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl) {
171
- this.elementRef = elementRef;
172
- this.defaultErrorStateMatcher = defaultErrorStateMatcher;
173
- this.parentForm = parentForm;
174
- this.parentFormGroup = parentFormGroup;
175
- this.ngControl = ngControl;
176
- }
177
- }
178
- // tslint:disable-next-line:naming-convention
179
- const McSelectMixinBase = mixinTabIndex(mixinDisabled(mixinErrorState(McSelectBase)));
180
- class McSelect extends McSelectMixinBase {
181
- constructor(_changeDetectorRef, _ngZone, _renderer, defaultErrorStateMatcher, elementRef, rawValidators, _dir, parentForm, parentFormGroup, _parentFormField, ngControl, ngModel, formControlName, _scrollStrategyFactory, mcValidation) {
182
- super(elementRef, defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);
183
- this._changeDetectorRef = _changeDetectorRef;
184
- this._ngZone = _ngZone;
185
- this._renderer = _renderer;
186
- this.rawValidators = rawValidators;
187
- this._dir = _dir;
188
- this._parentFormField = _parentFormField;
189
- this.ngModel = ngModel;
190
- this.formControlName = formControlName;
191
- this._scrollStrategyFactory = _scrollStrategyFactory;
192
- this.mcValidation = mcValidation;
193
- /** A name for this control that can be used by `mc-form-field`. */
194
- this.controlType = 'select';
195
- this.hiddenItems = 0;
196
- /** The cached font-size of the trigger element. */
197
- this.triggerFontSize = 0;
198
- this.previousSelectionModelSelected = [];
199
- /** The value of the select panel's transform-origin property. */
200
- this.transformOrigin = 'top';
201
- /** Emits when the panel element is finished transforming in. */
202
- this.panelDoneAnimatingStream = new Subject();
203
- /** Strategy that will be used to handle scrolling while the select panel is open. */
204
- this.scrollStrategy = this._scrollStrategyFactory();
205
- /**
206
- * The y-offset of the overlay panel in relation to the trigger's top start corner.
207
- * This must be adjusted to align the selected option text over the trigger text.
208
- * when the panel opens. Will change based on the y-position of the selected option.
209
- */
210
- this.offsetY = 0;
211
- /**
212
- * This position config ensures that the top "start" corner of the overlay
213
- * is aligned with with the top "start" of the origin by default (overlapping
214
- * the trigger completely). If the panel cannot fit below the trigger, it
215
- * will fall back to a position above the trigger.
216
- */
217
- this.positions = [
218
- {
219
- originX: 'start',
220
- originY: 'bottom',
221
- overlayX: 'start',
222
- overlayY: 'top'
223
- },
224
- {
225
- originX: 'start',
226
- originY: 'top',
227
- overlayX: 'start',
228
- overlayY: 'bottom'
229
- }
230
- ];
231
- this.hiddenItemsText = '...ещё';
232
- this.backdropClass = 'cdk-overlay-transparent-backdrop';
233
- /** Combined stream of all of the child options' change events. */
234
- this.optionSelectionChanges = defer(() => {
235
- if (this.options) {
236
- return merge(...this.options.map((option) => option.onSelectionChange), ...this.selectionModel.selected.map((option) => option.onSelectionChange));
237
- }
238
- return this._ngZone.onStable
239
- .asObservable()
240
- .pipe(take(1), switchMap(() => this.optionSelectionChanges));
241
- });
242
- /** Event emitted when the select panel has been toggled. */
243
- this.openedChange = new EventEmitter();
244
- /** Event emitted when the select has been opened. */
245
- this.openedStream = this.openedChange.pipe(filter((o) => o), map(() => { }));
246
- /** Event emitted when the select has been closed. */
247
- this.closedStream = this.openedChange.pipe(filter((o) => !o), map(() => { }));
248
- /** Event emitted when the selected value has been changed by the user. */
249
- this.selectionChange = new EventEmitter();
250
- /**
251
- * Event that emits whenever the raw value of the select changes. This is here primarily
252
- * to facilitate the two-way binding for the `value` input.
253
- * @docs-private
254
- */
255
- this.valueChange = new EventEmitter();
256
- this._hasBackdrop = false;
257
- this._required = false;
258
- this._multiple = false;
259
- this._focused = false;
260
- this.panelOpen = false;
261
- this.closeSubscription = Subscription.EMPTY;
262
- /** The scroll position of the overlay panel, calculated to center the selected option. */
263
- this.scrollTop = 0;
264
- /** Unique id for this input. */
265
- this.uid = `mc-select-${nextUniqueId++}`;
266
- /** Emits whenever the component is destroyed. */
267
- this.destroy = new Subject();
268
- /** `View -> model callback called when value changes` */
269
- this.onChange = () => { };
270
- /** `View -> model callback called when select has been touched` */
271
- this.onTouched = () => { };
272
- /** Comparison function to specify which option is displayed. Defaults to object equality. */
273
- this._compareWith = (o1, o2) => o1 === o2;
274
- if (this.ngControl) {
275
- // Note: we provide the value accessor through here, instead of
276
- // the `providers` to avoid running into a circular import.
277
- this.ngControl.valueAccessor = this;
278
- }
279
- // Force setter to be called in case id was not specified.
280
- this.id = this.id;
281
- }
282
- get hasBackdrop() {
283
- return this._hasBackdrop;
284
- }
285
- set hasBackdrop(value) {
286
- this._hasBackdrop = coerceBooleanProperty(value);
287
- }
288
- get placeholder() {
289
- return this._placeholder;
290
- }
291
- set placeholder(value) {
292
- this._placeholder = value;
293
- this.stateChanges.next();
294
- }
295
- get required() {
296
- return this._required;
297
- }
298
- set required(value) {
299
- this._required = coerceBooleanProperty(value);
300
- this.stateChanges.next();
301
- }
302
- get multiple() {
303
- return this._multiple;
304
- }
305
- set multiple(value) {
306
- if (this.selectionModel) {
307
- throw getMcSelectDynamicMultipleError();
308
- }
309
- this._multiple = coerceBooleanProperty(value);
310
- }
311
- /**
312
- * Function to compare the option values with the selected values. The first argument
313
- * is a value from an option. The second is a value from the selection. A boolean
314
- * should be returned.
315
- */
316
- get compareWith() {
317
- return this._compareWith;
318
- }
319
- set compareWith(fn) {
320
- /* tslint:disable-next-line:strict-type-predicates */
321
- if (typeof fn !== 'function') {
322
- throw getMcSelectNonFunctionValueError();
323
- }
324
- this._compareWith = fn;
325
- if (this.selectionModel) {
326
- // A different comparator means the selection could change.
327
- this.initializeSelection();
328
- }
329
- }
330
- /** Value of the select control. */
331
- get value() {
332
- return this._value;
333
- }
334
- set value(newValue) {
335
- if (newValue !== this._value) {
336
- this.writeValue(newValue);
337
- this._value = newValue;
338
- }
339
- }
340
- get id() {
341
- return this._id;
342
- }
343
- set id(value) {
344
- this._id = value || this.uid;
345
- this.stateChanges.next();
346
- }
347
- /** Whether the select is focused. */
348
- get focused() {
349
- return this._focused || this.panelOpen;
350
- }
351
- set focused(value) {
352
- this._focused = value;
353
- }
354
- get isEmptySearchResult() {
355
- return this.search && this.options.length === 0 && !!this.search.input.value;
356
- }
357
- get canShowCleaner() {
358
- return this.cleaner && this.selectionModel.hasValue();
359
- }
360
- get selected() {
361
- return this.multiple ? this.selectionModel.selected : this.selectionModel.selected[0];
362
- }
363
- get triggerValue() {
364
- if (this.empty) {
365
- return '';
366
- }
367
- return this.selectionModel.selected[0].viewValue;
368
- }
369
- get triggerValues() {
370
- if (this.empty) {
371
- return [];
372
- }
373
- const selectedOptions = this.selectionModel.selected;
374
- if (this.isRtl()) {
375
- selectedOptions.reverse();
376
- }
377
- return selectedOptions;
378
- }
379
- get empty() {
380
- return !this.selectionModel || this.selectionModel.isEmpty();
381
- }
382
- ngOnInit() {
383
- this.selectionModel = new SelectionModel(this.multiple);
384
- this.stateChanges.next();
385
- // We need `distinctUntilChanged` here, because some browsers will
386
- // fire the animation end event twice for the same animation. See:
387
- // https://github.com/angular/angular/issues/24084
388
- this.panelDoneAnimatingStream
389
- .pipe(distinctUntilChanged(), takeUntil(this.destroy))
390
- .subscribe(() => {
391
- if (this.panelOpen) {
392
- this.scrollTop = 0;
393
- if (this.search) {
394
- this.search.focus();
395
- }
396
- this.openedChange.emit(true);
397
- }
398
- else {
399
- this.openedChange.emit(false);
400
- this._changeDetectorRef.markForCheck();
401
- }
402
- });
403
- }
404
- ngAfterContentInit() {
405
- if (this.mcValidation.useValidation) {
406
- setMosaicValidation(this, this._changeDetectorRef);
407
- }
408
- this.initKeyManager();
409
- this.selectionModel.changed
410
- .pipe(takeUntil(this.destroy))
411
- .subscribe((event) => {
412
- event.added.forEach((option) => option.select());
413
- event.removed.forEach((option) => option.deselect());
414
- });
415
- this.options.changes
416
- .pipe(startWith(null), takeUntil(this.destroy))
417
- .subscribe(() => {
418
- this.resetOptions();
419
- this.initializeSelection();
420
- });
421
- }
422
- ngAfterViewInit() {
423
- this.tags.changes
424
- .subscribe(() => {
425
- setTimeout(() => this.calculateHiddenItems(), 0);
426
- });
427
- }
428
- ngDoCheck() {
429
- if (this.ngControl) {
430
- this.updateErrorState();
431
- }
432
- }
433
- ngOnChanges(changes) {
434
- // Updating the disabled state is handled by `mixinDisabled`, but we need to additionally let
435
- // the parent form field know to run change detection when the disabled state changes.
436
- if (changes.disabled) {
437
- this.stateChanges.next();
438
- }
439
- }
440
- ngOnDestroy() {
441
- this.destroy.next();
442
- this.destroy.complete();
443
- this.stateChanges.complete();
444
- this.closeSubscription.unsubscribe();
445
- }
446
- hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) {
447
- return `${hiddenItemsText} ${hiddenItems}`;
448
- }
449
- clearValue($event) {
450
- $event.stopPropagation();
451
- this.selectionModel.clear();
452
- this.keyManager.setActiveItem(-1);
453
- this.propagateChanges();
454
- }
455
- resetSearch() {
456
- if (!this.search) {
457
- return;
458
- }
459
- this.search.reset();
460
- /*
461
- todo the incorrect behaviour of keyManager is possible here
462
- to avoid first item selection (to provide correct options flipping on closed select)
463
- we should process options update like it is the first options appearance
464
- */
465
- this.search.isSearchChanged = false;
466
- }
467
- /** Toggles the overlay panel open or closed. */
468
- toggle() {
469
- if (this.panelOpen) {
470
- this.close();
471
- }
472
- else {
473
- this.open();
474
- }
475
- }
476
- /** Opens the overlay panel. */
477
- open() {
478
- var _a;
479
- if (this.disabled || !((_a = this.options) === null || _a === void 0 ? void 0 : _a.length) || this.panelOpen) {
480
- return;
481
- }
482
- this.triggerRect = this.trigger.nativeElement.getBoundingClientRect();
483
- // Note: The computed font-size will be a string pixel value (e.g. "16px").
484
- // `parseInt` ignores the trailing 'px' and converts this to a number.
485
- this.triggerFontSize = parseInt(getComputedStyle(this.trigger.nativeElement)['font-size']);
486
- this.panelOpen = true;
487
- this.keyManager.withHorizontalOrientation(null);
488
- this.highlightCorrectOption();
489
- this._changeDetectorRef.markForCheck();
490
- // Set the font size on the panel element once it exists.
491
- this._ngZone.onStable.asObservable()
492
- .pipe(take(1))
493
- .subscribe(() => {
494
- this.scrollActiveOptionIntoView();
495
- if (this.triggerFontSize && this.overlayDir.overlayRef && this.overlayDir.overlayRef.overlayElement) {
496
- this.overlayDir.overlayRef.overlayElement.style.fontSize = `${this.triggerFontSize}px`;
497
- }
498
- });
499
- }
500
- /** Closes the overlay panel and focuses the host element. */
501
- close() {
502
- if (!this.panelOpen) {
503
- return;
504
- }
505
- // the order of calls is important
506
- this.resetSearch();
507
- this.panelOpen = false;
508
- this.keyManager.withHorizontalOrientation(this.isRtl() ? 'rtl' : 'ltr');
509
- this._changeDetectorRef.markForCheck();
510
- this.onTouched();
511
- }
512
- /**
513
- * Sets the select's value. Part of the ControlValueAccessor interface
514
- * required to integrate with Angular's core forms API.
515
- *
516
- * @param value New value to be written to the model.
517
- */
518
- writeValue(value) {
519
- if (this.options) {
520
- this.setSelectionByValue(value);
521
- }
522
- }
523
- /**
524
- * Saves a callback function to be invoked when the select's value
525
- * changes from user input. Part of the ControlValueAccessor interface
526
- * required to integrate with Angular's core forms API.
527
- *
528
- * @param fn Callback to be triggered when the value changes.
529
- */
530
- registerOnChange(fn) {
531
- this.onChange = fn;
532
- }
533
- /**
534
- * Saves a callback function to be invoked when the select is blurred
535
- * by the user. Part of the ControlValueAccessor interface required
536
- * to integrate with Angular's core forms API.
537
- *
538
- * @param fn Callback to be triggered when the component has been touched.
539
- */
540
- registerOnTouched(fn) {
541
- this.onTouched = fn;
542
- }
543
- /**
544
- * Disables the select. Part of the ControlValueAccessor interface required
545
- * to integrate with Angular's core forms API.
546
- *
547
- * @param isDisabled Sets whether the component is disabled.
548
- */
549
- setDisabledState(isDisabled) {
550
- this.disabled = isDisabled;
551
- this._changeDetectorRef.markForCheck();
552
- this.stateChanges.next();
553
- }
554
- isRtl() {
555
- return this._dir ? this._dir.value === 'rtl' : false;
556
- }
557
- handleKeydown(event) {
558
- if (this.disabled) {
559
- return;
560
- }
561
- if (this.panelOpen) {
562
- this.handleOpenKeydown(event);
563
- }
564
- else {
565
- this.handleClosedKeydown(event);
566
- }
567
- }
568
- onFocus() {
569
- if (!this.disabled) {
570
- this._focused = true;
571
- this.stateChanges.next();
572
- }
573
- }
574
- /**
575
- * Calls the touched callback only if the panel is closed. Otherwise, the trigger will
576
- * "blur" to the panel when it opens, causing a false positive.
577
- */
578
- onBlur() {
579
- this._focused = false;
580
- if (!this.disabled && !this.panelOpen) {
581
- this.onTouched();
582
- this._changeDetectorRef.markForCheck();
583
- this.stateChanges.next();
584
- }
585
- }
586
- /**
587
- * Callback that is invoked when the overlay panel has been attached.
588
- */
589
- onAttached() {
590
- this.overlayDir.positionChange
591
- .pipe(take(1))
592
- .subscribe(() => {
593
- this._changeDetectorRef.detectChanges();
594
- this.setOverlayPosition();
595
- this.optionsContainer.nativeElement.scrollTop = this.scrollTop;
596
- this.updateScrollSize();
597
- });
598
- this.closeSubscription = this.closingActions()
599
- .subscribe(() => this.close());
600
- }
601
- /** Returns the theme to be used on the panel. */
602
- getPanelTheme() {
603
- return this._parentFormField ? `mc-${this._parentFormField.color}` : '';
604
- }
605
- /** Focuses the select element. */
606
- focus() {
607
- this.elementRef.nativeElement.focus();
608
- }
609
- /**
610
- * Implemented as part of McFormFieldControl.
611
- * @docs-private
612
- */
613
- onContainerClick() {
614
- this.focus();
615
- }
616
- /** Invoked when an option is clicked. */
617
- onRemoveMatcherItem(option, $event) {
618
- $event.stopPropagation();
619
- option.deselect();
620
- }
621
- calculateHiddenItems() {
622
- if (this.customTrigger || this.empty || !this.multiple) {
623
- return;
624
- }
625
- let visibleItems = 0;
626
- const totalItemsWidth = this.getTotalItemsWidthInMatcher();
627
- let totalVisibleItemsWidth = 0;
628
- this.tags.forEach((tag) => {
629
- if (tag.nativeElement.offsetTop < tag.nativeElement.offsetHeight) {
630
- totalVisibleItemsWidth += this.getItemWidth(tag.nativeElement);
631
- visibleItems++;
632
- }
633
- });
634
- this.hiddenItems = this.selected.length - visibleItems;
635
- if (this.hiddenItems) {
636
- const itemsCounter = this.trigger.nativeElement.querySelector('.mc-select__match-hidden-text');
637
- const matcherList = this.trigger.nativeElement.querySelector('.mc-select__match-list');
638
- const itemsCounterShowed = itemsCounter.offsetTop < itemsCounter.offsetHeight;
639
- // const itemsCounterWidth: number = itemsCounter.getBoundingClientRect().width;
640
- const itemsCounterWidth = 86;
641
- const matcherListWidth = matcherList.getBoundingClientRect().width;
642
- const matcherWidth = matcherListWidth + itemsCounterWidth;
643
- if (itemsCounterShowed && (totalItemsWidth < matcherWidth)) {
644
- this.hiddenItems = 0;
645
- }
646
- if (totalVisibleItemsWidth === matcherListWidth ||
647
- (totalVisibleItemsWidth + itemsCounterWidth) < matcherListWidth) {
648
- this._changeDetectorRef.markForCheck();
649
- return;
650
- }
651
- else if (!itemsCounterShowed && (totalItemsWidth + itemsCounterWidth) > matcherWidth) {
652
- this.hiddenItems++;
653
- }
654
- }
655
- this._changeDetectorRef.markForCheck();
656
- }
657
- getItemHeight() {
658
- return this.options.first ? this.options.first.getHeight() : 0;
659
- }
660
- closingActions() {
661
- return merge(this.overlayDir.overlayRef.outsidePointerEvents()
662
- .pipe(filter((event) => !this.elementRef.nativeElement.contains(event.target))), this.overlayDir.overlayRef.detachments());
663
- }
664
- getHeightOfOptionsContainer() {
665
- return this.optionsContainer.nativeElement.getClientRects()[0].height;
666
- }
667
- updateScrollSize() {
668
- if (!this.options.first) {
669
- return;
670
- }
671
- this.keyManager.withScrollSize(Math.floor(this.getHeightOfOptionsContainer() / this.options.first.getHeight()));
672
- }
673
- getTotalItemsWidthInMatcher() {
674
- const triggerClone = this.trigger.nativeElement.cloneNode(true);
675
- triggerClone.querySelector('.mc-select__match-hidden-text').remove();
676
- this._renderer.setStyle(triggerClone, 'position', 'absolute');
677
- this._renderer.setStyle(triggerClone, 'visibility', 'hidden');
678
- this._renderer.setStyle(triggerClone, 'top', '-100%');
679
- this._renderer.setStyle(triggerClone, 'left', '0');
680
- this._renderer.appendChild(this.trigger.nativeElement, triggerClone);
681
- let totalItemsWidth = 0;
682
- triggerClone.querySelectorAll('mc-tag').forEach((item) => {
683
- totalItemsWidth += this.getItemWidth(item);
684
- });
685
- triggerClone.remove();
686
- return totalItemsWidth;
687
- }
688
- getItemWidth(element) {
689
- const computedStyle = window.getComputedStyle(element);
690
- const width = parseInt(computedStyle.width);
691
- const marginLeft = parseInt(computedStyle.marginLeft);
692
- const marginRight = parseInt(computedStyle.marginRight);
693
- return width + marginLeft + marginRight;
694
- }
695
- /** Handles keyboard events while the select is closed. */
696
- handleClosedKeydown(event) {
697
- /* tslint:disable-next-line */
698
- const keyCode = event.keyCode;
699
- const isArrowKey = [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW].includes(keyCode);
700
- const isOpenKey = [ENTER, SPACE].includes(keyCode);
701
- // Open the select on ALT + arrow key to match the native <select>
702
- if (isOpenKey || ((this.multiple || event.altKey) && isArrowKey)) {
703
- event.preventDefault(); // prevents the page from scrolling down when pressing space
704
- this.open();
705
- }
706
- else if (!this.multiple) {
707
- this.keyManager.onKeydown(event);
708
- }
709
- }
710
- /** Handles keyboard events when the selected is open. */
711
- handleOpenKeydown(event) {
712
- /* tslint:disable-next-line */
713
- const keyCode = event.keyCode;
714
- const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;
715
- if (isArrowKey && event.altKey) {
716
- // Close the select on ALT + arrow key to match the native <select>
717
- event.preventDefault();
718
- this.close();
719
- }
720
- else if (keyCode === HOME) {
721
- event.preventDefault();
722
- this.keyManager.setFirstItemActive();
723
- }
724
- else if (keyCode === END) {
725
- event.preventDefault();
726
- this.keyManager.setLastItemActive();
727
- }
728
- else if (keyCode === PAGE_UP) {
729
- event.preventDefault();
730
- this.keyManager.setPreviousPageItemActive();
731
- }
732
- else if (keyCode === PAGE_DOWN) {
733
- event.preventDefault();
734
- this.keyManager.setNextPageItemActive();
735
- }
736
- else if ((keyCode === ENTER || keyCode === SPACE) && this.keyManager.activeItem) {
737
- event.preventDefault();
738
- this.keyManager.activeItem.selectViaInteraction();
739
- }
740
- else if (this._multiple && keyCode === A && event.ctrlKey) {
741
- event.preventDefault();
742
- const hasDeselectedOptions = this.options.some((option) => !option.selected);
743
- this.options.forEach((option) => {
744
- if (hasDeselectedOptions && !option.disabled) {
745
- option.select();
746
- }
747
- else {
748
- option.deselect();
749
- }
750
- });
751
- }
752
- else {
753
- const previouslyFocusedIndex = this.keyManager.activeItemIndex;
754
- this.keyManager.onKeydown(event);
755
- if (this._multiple && isArrowKey && event.shiftKey && this.keyManager.activeItem &&
756
- this.keyManager.activeItemIndex !== previouslyFocusedIndex) {
757
- this.keyManager.activeItem.selectViaInteraction();
758
- }
759
- if (this.search) {
760
- this.search.focus();
761
- }
762
- }
763
- }
764
- initializeSelection() {
765
- // Defer setting the value in order to avoid the "Expression
766
- // has changed after it was checked" errors from Angular.
767
- Promise.resolve().then(() => {
768
- this.setSelectionByValue(this.ngControl ? this.ngControl.value : this._value);
769
- });
770
- }
771
- /**
772
- * Sets the selected option based on a value. If no option can be
773
- * found with the designated value, the select trigger is cleared.
774
- */
775
- setSelectionByValue(value) {
776
- this.previousSelectionModelSelected = this.selectionModel.selected;
777
- if (this.multiple && value) {
778
- if (!Array.isArray(value)) {
779
- throw getMcSelectNonArrayValueError();
780
- }
781
- this.selectionModel.clear();
782
- value.forEach((currentValue) => this.selectValue(currentValue));
783
- this.sortValues();
784
- }
785
- else {
786
- this.selectionModel.clear();
787
- const correspondingOption = this.selectValue(value);
788
- // Shift focus to the active item. Note that we shouldn't do this in multiple
789
- // mode, because we don't know what option the user interacted with last.
790
- if (correspondingOption) {
791
- this.keyManager.setActiveItem(correspondingOption);
792
- }
793
- }
794
- this._changeDetectorRef.markForCheck();
795
- }
796
- getCorrespondOption(value) {
797
- return [
798
- ...this.options.toArray(),
799
- ...this.previousSelectionModelSelected
800
- ].find((option) => {
801
- try {
802
- // Treat null as a special reset value.
803
- return option.value != null && this.compareWith(option.value, value);
804
- }
805
- catch (error) {
806
- if (isDevMode()) {
807
- // Notify developers of errors in their comparator.
808
- console.warn(error);
809
- }
810
- return false;
811
- }
812
- });
813
- }
814
- /**
815
- * Finds and selects and option based on its value.
816
- * @returns Option that has the corresponding value.
817
- */
818
- selectValue(value) {
819
- const correspondingOption = this.getCorrespondOption(value);
820
- if (correspondingOption) {
821
- this.selectionModel.select(correspondingOption);
822
- }
823
- return correspondingOption;
824
- }
825
- /** Sets up a key manager to listen to keyboard events on the overlay panel. */
826
- initKeyManager() {
827
- const typeAheadDebounce = 200;
828
- this.keyManager = new ActiveDescendantKeyManager(this.options)
829
- .withTypeAhead(typeAheadDebounce, this.search ? -1 : 0)
830
- .withVerticalOrientation()
831
- .withHorizontalOrientation(this.isRtl() ? 'rtl' : 'ltr');
832
- this.keyManager.tabOut
833
- .pipe(takeUntil(this.destroy))
834
- .subscribe(() => {
835
- // Restore focus to the trigger before closing. Ensures that the focus
836
- // position won't be lost if the user got focus into the overlay.
837
- this.focus();
838
- this.close();
839
- });
840
- this.keyManager.change
841
- .pipe(takeUntil(this.destroy))
842
- .subscribe(() => {
843
- if (this.panelOpen && this.panel) {
844
- this.scrollActiveOptionIntoView();
845
- }
846
- else if (!this.panelOpen && !this.multiple && this.keyManager.activeItem) {
847
- this.keyManager.activeItem.selectViaInteraction();
848
- }
849
- });
850
- }
851
- /** Drops current option subscriptions and IDs and resets from scratch. */
852
- resetOptions() {
853
- const changedOrDestroyed = merge(this.options.changes, this.destroy);
854
- this.optionSelectionChanges
855
- .pipe(takeUntil(changedOrDestroyed))
856
- .subscribe((event) => {
857
- this.onSelect(event.source, event.isUserInput);
858
- if (this.search && this.search.isSearchChanged) {
859
- Promise.resolve().then(() => this.keyManager.updateActiveItem(0));
860
- this.search.isSearchChanged = false;
861
- }
862
- if (event.isUserInput && !this.multiple && this.panelOpen) {
863
- this.close();
864
- this.focus();
865
- }
866
- });
867
- // Listen to changes in the internal state of the options and react accordingly.
868
- // Handles cases like the labels of the selected options changing.
869
- merge(...this.options.map((option) => option.stateChanges))
870
- .pipe(takeUntil(changedOrDestroyed))
871
- .subscribe(() => {
872
- this._changeDetectorRef.markForCheck();
873
- this.stateChanges.next();
874
- });
875
- }
876
- /** Invoked when an option is clicked. */
877
- onSelect(option, isUserInput) {
878
- const wasSelected = this.selectionModel.isSelected(option);
879
- if (option.value == null && !this._multiple) {
880
- option.deselect();
881
- this.selectionModel.clear();
882
- this.propagateChanges(option.value);
883
- }
884
- else {
885
- if (option.selected) {
886
- this.selectionModel.select(option);
887
- }
888
- else {
889
- this.selectionModel.deselect(option);
890
- }
891
- if (isUserInput) {
892
- this.keyManager.setActiveItem(option);
893
- }
894
- if (this.multiple) {
895
- this.sortValues();
896
- if (isUserInput) {
897
- // In case the user selected the option with their mouse, we
898
- // want to restore focus back to the trigger, in order to
899
- // prevent the select keyboard controls from clashing with
900
- // the ones from `mc-option`.
901
- // If search is avaliable then we focus search again.
902
- if (this.search) {
903
- this.search.focus();
904
- }
905
- else {
906
- this.focus();
907
- }
908
- }
909
- }
910
- }
911
- if (wasSelected !== this.selectionModel.isSelected(option)) {
912
- this.propagateChanges();
913
- }
914
- this.stateChanges.next();
915
- }
916
- /** Sorts the selected values in the selected based on their order in the panel. */
917
- sortValues() {
918
- if (this.multiple) {
919
- const options = this.options.toArray();
920
- this.selectionModel.sort((a, b) => {
921
- return this.sortComparator ? this.sortComparator(a, b, options) :
922
- options.indexOf(a) - options.indexOf(b);
923
- });
924
- this.stateChanges.next();
925
- }
926
- }
927
- /** Emits change event to set the model value. */
928
- propagateChanges(fallbackValue) {
929
- let valueToEmit = null;
930
- if (this.multiple) {
931
- valueToEmit = this.selected.map((option) => option.value);
932
- }
933
- else {
934
- valueToEmit = this.selected ? this.selected.value : fallbackValue;
935
- }
936
- this._value = valueToEmit;
937
- this.valueChange.emit(valueToEmit);
938
- this.onChange(valueToEmit);
939
- this.selectionChange.emit(new McSelectChange(this, valueToEmit));
940
- this._changeDetectorRef.markForCheck();
941
- }
942
- /**
943
- * Highlights the selected item. If no option is selected, it will highlight
944
- * the first item instead.
945
- */
946
- highlightCorrectOption() {
947
- if (this.keyManager) {
948
- if (this.empty) {
949
- this.keyManager.setFirstItemActive();
950
- }
951
- else {
952
- this.keyManager.setActiveItem(this.selectionModel.selected[0]);
953
- }
954
- }
955
- }
956
- /** Scrolls the active option into view. */
957
- scrollActiveOptionIntoView() {
958
- if (!this.keyManager.activeItem) {
959
- return;
960
- }
961
- this.keyManager.activeItem.focus();
962
- }
963
- /**
964
- * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.
965
- * This must be adjusted to align the selected option text over the trigger text when
966
- * the panel opens. Will change based on LTR or RTL text direction. Note that the offset
967
- * can't be calculated until the panel has been attached, because we need to know the
968
- * content width in order to constrain the panel within the viewport.
969
- */
970
- setOverlayPosition() {
971
- this.resetOverlay();
972
- const overlayRect = this.getOverlayRect();
973
- // Window width without scrollbar
974
- const windowWidth = this.getOverlayWidth();
975
- const isRtl = this.isRtl();
976
- /* tslint:disable-next-line:no-magic-numbers */
977
- const paddingWidth = SELECT_PANEL_PADDING_X * 2;
978
- let offsetX;
979
- let overlayMaxWidth;
980
- const selected = this.selectionModel.selected[0] || this.options.first;
981
- offsetX = selected && selected.group ? SELECT_PANEL_INDENT_PADDING_X : SELECT_PANEL_PADDING_X;
982
- // Invert the offset in LTR.
983
- if (!isRtl) {
984
- offsetX *= -1;
985
- }
986
- // Determine if select overflows on either side.
987
- const leftOverflow = 0 - (overlayRect.left + offsetX - (isRtl ? paddingWidth : 0));
988
- const rightOverflow = overlayRect.right + offsetX - windowWidth
989
- + (isRtl ? 0 : paddingWidth);
990
- // If the element overflows on either side, reduce the offset to allow it to fit.
991
- if (leftOverflow > 0 || rightOverflow > 0) {
992
- [offsetX, overlayMaxWidth] = this.calculateOverlayXPosition(overlayRect, windowWidth, offsetX);
993
- this.overlayDir.overlayRef.overlayElement.style.maxWidth = `${overlayMaxWidth}px`;
994
- }
995
- // Set the offset directly in order to avoid having to go through change detection and
996
- // potentially triggering "changed after it was checked" errors. Round the value to avoid
997
- // blurry content in some browsers.
998
- this.overlayDir.offsetX = Math.round(offsetX);
999
- this.overlayDir.overlayRef.updatePosition();
1000
- }
1001
- calculateOverlayXPosition(overlayRect, windowWidth, basicOffsetX) {
1002
- let offsetX = basicOffsetX;
1003
- const leftIndent = this.triggerRect.left;
1004
- const rightIndent = windowWidth - this.triggerRect.right;
1005
- // Setting direction of dropdown expansion
1006
- const isRightDirection = leftIndent <= rightIndent;
1007
- let maxDropdownWidth;
1008
- let overlayMaxWidth;
1009
- const triggerWidth = this.triggerRect.width + SELECT_PANEL_INDENT_PADDING_X;
1010
- if (isRightDirection) {
1011
- maxDropdownWidth = rightIndent + triggerWidth - SELECT_PANEL_VIEWPORT_PADDING;
1012
- overlayMaxWidth = overlayRect.width < maxDropdownWidth ? overlayRect.width : maxDropdownWidth;
1013
- }
1014
- else {
1015
- let leftOffset;
1016
- maxDropdownWidth = leftIndent + triggerWidth - SELECT_PANEL_VIEWPORT_PADDING;
1017
- if (overlayRect.width < maxDropdownWidth) {
1018
- overlayMaxWidth = overlayRect.width;
1019
- leftOffset = this.triggerRect.right - overlayMaxWidth;
1020
- }
1021
- else {
1022
- overlayMaxWidth = maxDropdownWidth;
1023
- leftOffset = this.triggerRect.right - (overlayMaxWidth - SELECT_PANEL_INDENT_PADDING_X);
1024
- }
1025
- offsetX -= this.triggerRect.left - leftOffset;
1026
- }
1027
- return [offsetX, overlayMaxWidth];
1028
- }
1029
- resetOverlay() {
1030
- this.overlayDir.offsetX = 0;
1031
- this.overlayDir.overlayRef.overlayElement.style.maxWidth = 'unset';
1032
- this.overlayDir.overlayRef.updatePosition();
1033
- }
1034
- getOverlayRect() {
1035
- return this.overlayDir.overlayRef.overlayElement.getBoundingClientRect();
1036
- }
1037
- getOverlayWidth() {
1038
- return this.scrollStrategy._overlayRef.hostElement.clientWidth;
1039
- }
1040
- }
1041
- /** @nocollapse */ /** @nocollapse */ McSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSelect, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.ErrorStateMatcher }, { token: i0.ElementRef }, { token: NG_VALIDATORS, optional: true }, { token: i3.Directionality, optional: true }, { token: i4.NgForm, optional: true }, { token: i4.FormGroupDirective, optional: true }, { token: i1$1.McFormField, optional: true }, { token: i4.NgControl, optional: true, self: true }, { token: i4.NgModel, optional: true, self: true }, { token: i4.FormControlName, optional: true, self: true }, { token: MC_SELECT_SCROLL_STRATEGY }, { token: MC_VALIDATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1042
- /** @nocollapse */ /** @nocollapse */ McSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: McSelect, selector: "mc-select", inputs: { disabled: "disabled", tabIndex: "tabIndex", hiddenItemsText: "hiddenItemsText", panelClass: "panelClass", backdropClass: "backdropClass", errorStateMatcher: "errorStateMatcher", sortComparator: "sortComparator", hasBackdrop: "hasBackdrop", placeholder: "placeholder", required: "required", multiple: "multiple", compareWith: "compareWith", value: "value", id: "id", hiddenItemsTextFormatter: "hiddenItemsTextFormatter" }, outputs: { openedChange: "openedChange", openedStream: "opened", closedStream: "closed", selectionChange: "selectionChange", valueChange: "valueChange" }, host: { listeners: { "keydown": "handleKeydown($event)", "focus": "onFocus()", "blur": "onBlur()", "window:resize": "calculateHiddenItems()" }, properties: { "attr.id": "id", "attr.tabindex": "tabIndex", "attr.disabled": "disabled || null", "class.mc-disabled": "disabled", "class.mc-invalid": "errorState" }, classAttribute: "mc-select" }, providers: [
1043
- { provide: McFormFieldControl, useExisting: McSelect },
1044
- { provide: MC_OPTION_PARENT_COMPONENT, useExisting: McSelect }
1045
- ], queries: [{ propertyName: "customTrigger", first: true, predicate: McSelectTrigger, descendants: true }, { propertyName: "cleaner", first: true, predicate: ["mcSelectCleaner"], descendants: true, static: true }, { propertyName: "search", first: true, predicate: McSelectSearch, descendants: true }, { propertyName: "options", predicate: McOption, descendants: true }, { propertyName: "optionGroups", predicate: McOptgroup }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "panel", first: true, predicate: ["panel"], descendants: true }, { propertyName: "optionsContainer", first: true, predicate: ["optionsContainer"], descendants: true }, { propertyName: "overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "tags", predicate: McTag, descendants: true }], exportAs: ["mcSelect"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div cdk-overlay-origin\n class=\"mc-select__trigger\"\n (click)=\"toggle()\"\n [class.mc-select__trigger_multiple]=\"multiple\"\n #origin=\"cdkOverlayOrigin\"\n #trigger>\n <div class=\"mc-select__matcher\" [ngSwitch]=\"empty\">\n <span class=\"mc-select__placeholder\" *ngSwitchCase=\"true\">{{ placeholder || '\\u00A0' }}</span>\n <span *ngSwitchCase=\"false\" [ngSwitch]=\"!!customTrigger\">\n <div *ngSwitchDefault [ngSwitch]=\"multiple\" class=\"mc-select__match-container\">\n <span *ngSwitchCase=\"false\" class=\"mc-select__matcher-text\">{{ triggerValue }}</span>\n <div *ngSwitchCase=\"true\" class=\"mc-select__match-list\">\n <mc-tag *ngFor=\"let option of triggerValues\"\n [disabled]=\"option.disabled || disabled\"\n [selectable]=\"false\"\n [class.mc-error]=\"errorState\">\n {{ option.viewValue }}\n <i mc-icon=\"mc-close-S_16\"\n *ngIf=\"!option.disabled && !disabled\"\n (click)=\"onRemoveMatcherItem(option, $event)\">\n </i>\n </mc-tag>\n </div>\n <div class=\"mc-select__match-hidden-text\" [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\">\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n </div>\n <ng-content select=\"mc-select-trigger\" *ngSwitchCase=\"true\"></ng-content>\n </span>\n </div>\n\n <div class=\"mc-select__cleaner\" *ngIf=\"canShowCleaner\" (click)=\"clearValue($event)\">\n <ng-content select=\"mc-cleaner\"></ng-content>\n </div>\n\n <div class=\"mc-select__arrow-wrapper\">\n <i class=\"mc-select__arrow\" mc-icon=\"mc-angle-down-S_16\"></i>\n </div>\n</div>\n\n<ng-template\n cdk-connected-overlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\n [cdkConnectedOverlayBackdropClass]=\"backdropClass\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayMinWidth]=\"triggerRect?.width!\"\n [cdkConnectedOverlayOffsetY]=\"offsetY\"\n (backdropClick)=\"close()\"\n (attach)=\"onAttached()\"\n (detach)=\"close()\">\n <div\n #panel\n class=\"mc-select__panel {{ getPanelTheme() }}\"\n [ngClass]=\"panelClass\"\n [style.transformOrigin]=\"transformOrigin\"\n [style.font-size.px]=\"triggerFontSize\"\n (keydown)=\"handleKeydown($event)\">\n\n <div *ngIf=\"search\" class=\"mc-select__search-container\">\n <ng-content select=\"[mcSelectSearch]\"></ng-content>\n </div>\n\n <div #optionsContainer\n class=\"mc-select__content\"\n [@fadeInContent]=\"'showing'\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\">\n\n <div *ngIf=\"isEmptySearchResult\" class=\"mc-select__no-options-message\">\n <ng-content select=\"[mc-select-search-empty-result]\"></ng-content>\n </div>\n <ng-content></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: [".mc-option{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;position:relative;max-width:100%;height:var(--mc-option-size-height, 32px);border:var(--mc-option-size-border-width, 2px) solid transparent;cursor:pointer;outline:none;padding-left:var(--mc-option-size-horizontal-padding, 16px);padding-right:var(--mc-option-size-horizontal-padding, 16px);-webkit-tap-highlight-color:transparent}.mc-option.mc-disabled{cursor:default}.mc-option .mc-pseudo-checkbox{margin-right:8px}.mc-option .mc-option-overlay{position:absolute;top:calc(-1 * var(--mc-option-size-border-width, 2px));left:calc(-1 * var(--mc-option-size-border-width, 2px));right:calc(-1 * var(--mc-option-size-border-width, 2px));bottom:calc(-1 * var(--mc-option-size-border-width, 2px));pointer-events:none;border-radius:inherit}.mc-option-text{display:inline-block;flex-grow:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.mc-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.mc-select .mc-select__trigger{display:flex;box-sizing:border-box;position:relative;height:calc(var(--mc-form-field-size-height, 32px) - var(--mc-form-field-size-border-width, 1px) * 2);cursor:pointer;padding-left:calc(var(--mc-select-size-left-padding, 16px) - var(--mc-form-field-size-border-width, 1px));padding-right:calc(var(--mc-select-size-right-padding, 8px) - var(--mc-form-field-size-border-width, 1px))}.mc-select .mc-select__trigger.mc-select__trigger_multiple{padding-left:calc(var(--mc-select-size-left-padding-multiple, 8px) - var(--mc-form-field-size-border-width, 1px))}.mc-select .mc-select__trigger.mc-select__trigger_multiple .mc-tag.mc-disabled .mc-tag__text{margin-right:7px}.mc-select.mc-disabled .mc-select__trigger{-webkit-user-select:none;user-select:none;cursor:default}.mc-select__no-options-message{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;position:relative;max-width:100%;height:var(--mc-option-size-height, 32px);cursor:default;outline:none;padding-left:var(--mc-option-size-horizontal-padding, 16px);padding-right:var(--mc-option-size-horizontal-padding, 16px)}.mc-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mc-select__matcher>span{width:100%}.mc-select__match-list{display:flex;flex-wrap:wrap;overflow:hidden;max-height:calc(var(--mc-form-field-size-height, 32px) - var(--mc-form-field-size-border-width, 1px) * 2)}.mc-select__match-list .mc-tag{margin-right:4px}.mc-select__match-container{display:flex;flex-direction:row;justify-content:space-between;width:100%}.mc-select__match-container .mc-select__match-hidden-text{flex:0 0 70px;align-self:center;padding:0 8px;text-align:right}.mc-select__arrow-wrapper{align-self:center}.mc-form-field-appearance-fill .mc-select__arrow-wrapper,.mc-form-field-appearance-standard .mc-select__arrow-wrapper{transform:translateY(-50%)}.mc-form-field-appearance-outline .mc-select__arrow-wrapper{transform:translateY(-25%)}.mc-select__panel{min-width:100%;max-width:var(--mc-select-panel-size-max-width, 640px);overflow:hidden;border-width:var(--mc-select-panel-size-border-width, 1px);border-style:solid;border-bottom-left-radius:var(--mc-select-panel-size-border-radius, 3px);border-bottom-right-radius:var(--mc-select-panel-size-border-radius, 3px)}.mc-select__panel .mc-optgroup-label,.mc-select__panel .mc-option{font-size:inherit;line-height:var(--mc-option-size-height, 32px);height:var(--mc-option-size-height, 32px)}.mc-select__content{max-height:var(--mc-select-panel-size-max-height, 232px);padding:var(--mc-select-panel-size-vertical-padding, 4px) 0;overflow:auto}.mc-select__content .cdk-virtual-scroll-viewport{min-height:var(--mc-select-panel-size-max-height, 232px)-8px;max-height:var(--mc-select-panel-size-max-height, 232px)-8px}.mc-form-field-type-select:not(.mc-disabled) .mc-form-field-flex{cursor:pointer}.mc-select__search-container{border-bottom-width:1px;border-bottom-style:solid}\n"], components: [{ type: i5.McTag, selector: "mc-tag, [mc-tag], mc-basic-tag, [mc-basic-tag]", inputs: ["color", "selected", "value", "selectable", "removable", "disabled"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["mcTag"] }, { type: i6.McIcon, selector: "[mc-icon]", inputs: ["color"] }], directives: [{ type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i8.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.McIconCSSStyler, selector: "[mc-icon]" }, { type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [
1046
- mcSelectAnimations.transformPanel,
1047
- mcSelectAnimations.fadeInContent
1048
- ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1049
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSelect, decorators: [{
1050
- type: Component,
1051
- args: [{ selector: 'mc-select', exportAs: 'mcSelect', inputs: ['disabled', 'tabIndex'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
1052
- '[attr.id]': 'id',
1053
- '[attr.tabindex]': 'tabIndex',
1054
- '[attr.disabled]': 'disabled || null',
1055
- class: 'mc-select',
1056
- '[class.mc-disabled]': 'disabled',
1057
- '[class.mc-invalid]': 'errorState',
1058
- '(keydown)': 'handleKeydown($event)',
1059
- '(focus)': 'onFocus()',
1060
- '(blur)': 'onBlur()',
1061
- '(window:resize)': 'calculateHiddenItems()'
1062
- }, animations: [
1063
- mcSelectAnimations.transformPanel,
1064
- mcSelectAnimations.fadeInContent
1065
- ], providers: [
1066
- { provide: McFormFieldControl, useExisting: McSelect },
1067
- { provide: MC_OPTION_PARENT_COMPONENT, useExisting: McSelect }
1068
- ], template: "<div cdk-overlay-origin\n class=\"mc-select__trigger\"\n (click)=\"toggle()\"\n [class.mc-select__trigger_multiple]=\"multiple\"\n #origin=\"cdkOverlayOrigin\"\n #trigger>\n <div class=\"mc-select__matcher\" [ngSwitch]=\"empty\">\n <span class=\"mc-select__placeholder\" *ngSwitchCase=\"true\">{{ placeholder || '\\u00A0' }}</span>\n <span *ngSwitchCase=\"false\" [ngSwitch]=\"!!customTrigger\">\n <div *ngSwitchDefault [ngSwitch]=\"multiple\" class=\"mc-select__match-container\">\n <span *ngSwitchCase=\"false\" class=\"mc-select__matcher-text\">{{ triggerValue }}</span>\n <div *ngSwitchCase=\"true\" class=\"mc-select__match-list\">\n <mc-tag *ngFor=\"let option of triggerValues\"\n [disabled]=\"option.disabled || disabled\"\n [selectable]=\"false\"\n [class.mc-error]=\"errorState\">\n {{ option.viewValue }}\n <i mc-icon=\"mc-close-S_16\"\n *ngIf=\"!option.disabled && !disabled\"\n (click)=\"onRemoveMatcherItem(option, $event)\">\n </i>\n </mc-tag>\n </div>\n <div class=\"mc-select__match-hidden-text\" [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\">\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n </div>\n <ng-content select=\"mc-select-trigger\" *ngSwitchCase=\"true\"></ng-content>\n </span>\n </div>\n\n <div class=\"mc-select__cleaner\" *ngIf=\"canShowCleaner\" (click)=\"clearValue($event)\">\n <ng-content select=\"mc-cleaner\"></ng-content>\n </div>\n\n <div class=\"mc-select__arrow-wrapper\">\n <i class=\"mc-select__arrow\" mc-icon=\"mc-angle-down-S_16\"></i>\n </div>\n</div>\n\n<ng-template\n cdk-connected-overlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\n [cdkConnectedOverlayBackdropClass]=\"backdropClass\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayMinWidth]=\"triggerRect?.width!\"\n [cdkConnectedOverlayOffsetY]=\"offsetY\"\n (backdropClick)=\"close()\"\n (attach)=\"onAttached()\"\n (detach)=\"close()\">\n <div\n #panel\n class=\"mc-select__panel {{ getPanelTheme() }}\"\n [ngClass]=\"panelClass\"\n [style.transformOrigin]=\"transformOrigin\"\n [style.font-size.px]=\"triggerFontSize\"\n (keydown)=\"handleKeydown($event)\">\n\n <div *ngIf=\"search\" class=\"mc-select__search-container\">\n <ng-content select=\"[mcSelectSearch]\"></ng-content>\n </div>\n\n <div #optionsContainer\n class=\"mc-select__content\"\n [@fadeInContent]=\"'showing'\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\">\n\n <div *ngIf=\"isEmptySearchResult\" class=\"mc-select__no-options-message\">\n <ng-content select=\"[mc-select-search-empty-result]\"></ng-content>\n </div>\n <ng-content></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: [".mc-option{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;position:relative;max-width:100%;height:var(--mc-option-size-height, 32px);border:var(--mc-option-size-border-width, 2px) solid transparent;cursor:pointer;outline:none;padding-left:var(--mc-option-size-horizontal-padding, 16px);padding-right:var(--mc-option-size-horizontal-padding, 16px);-webkit-tap-highlight-color:transparent}.mc-option.mc-disabled{cursor:default}.mc-option .mc-pseudo-checkbox{margin-right:8px}.mc-option .mc-option-overlay{position:absolute;top:calc(-1 * var(--mc-option-size-border-width, 2px));left:calc(-1 * var(--mc-option-size-border-width, 2px));right:calc(-1 * var(--mc-option-size-border-width, 2px));bottom:calc(-1 * var(--mc-option-size-border-width, 2px));pointer-events:none;border-radius:inherit}.mc-option-text{display:inline-block;flex-grow:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.mc-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.mc-select .mc-select__trigger{display:flex;box-sizing:border-box;position:relative;height:calc(var(--mc-form-field-size-height, 32px) - var(--mc-form-field-size-border-width, 1px) * 2);cursor:pointer;padding-left:calc(var(--mc-select-size-left-padding, 16px) - var(--mc-form-field-size-border-width, 1px));padding-right:calc(var(--mc-select-size-right-padding, 8px) - var(--mc-form-field-size-border-width, 1px))}.mc-select .mc-select__trigger.mc-select__trigger_multiple{padding-left:calc(var(--mc-select-size-left-padding-multiple, 8px) - var(--mc-form-field-size-border-width, 1px))}.mc-select .mc-select__trigger.mc-select__trigger_multiple .mc-tag.mc-disabled .mc-tag__text{margin-right:7px}.mc-select.mc-disabled .mc-select__trigger{-webkit-user-select:none;user-select:none;cursor:default}.mc-select__no-options-message{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;position:relative;max-width:100%;height:var(--mc-option-size-height, 32px);cursor:default;outline:none;padding-left:var(--mc-option-size-horizontal-padding, 16px);padding-right:var(--mc-option-size-horizontal-padding, 16px)}.mc-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mc-select__matcher>span{width:100%}.mc-select__match-list{display:flex;flex-wrap:wrap;overflow:hidden;max-height:calc(var(--mc-form-field-size-height, 32px) - var(--mc-form-field-size-border-width, 1px) * 2)}.mc-select__match-list .mc-tag{margin-right:4px}.mc-select__match-container{display:flex;flex-direction:row;justify-content:space-between;width:100%}.mc-select__match-container .mc-select__match-hidden-text{flex:0 0 70px;align-self:center;padding:0 8px;text-align:right}.mc-select__arrow-wrapper{align-self:center}.mc-form-field-appearance-fill .mc-select__arrow-wrapper,.mc-form-field-appearance-standard .mc-select__arrow-wrapper{transform:translateY(-50%)}.mc-form-field-appearance-outline .mc-select__arrow-wrapper{transform:translateY(-25%)}.mc-select__panel{min-width:100%;max-width:var(--mc-select-panel-size-max-width, 640px);overflow:hidden;border-width:var(--mc-select-panel-size-border-width, 1px);border-style:solid;border-bottom-left-radius:var(--mc-select-panel-size-border-radius, 3px);border-bottom-right-radius:var(--mc-select-panel-size-border-radius, 3px)}.mc-select__panel .mc-optgroup-label,.mc-select__panel .mc-option{font-size:inherit;line-height:var(--mc-option-size-height, 32px);height:var(--mc-option-size-height, 32px)}.mc-select__content{max-height:var(--mc-select-panel-size-max-height, 232px);padding:var(--mc-select-panel-size-vertical-padding, 4px) 0;overflow:auto}.mc-select__content .cdk-virtual-scroll-viewport{min-height:var(--mc-select-panel-size-max-height, 232px)-8px;max-height:var(--mc-select-panel-size-max-height, 232px)-8px}.mc-form-field-type-select:not(.mc-disabled) .mc-form-field-flex{cursor:pointer}.mc-select__search-container{border-bottom-width:1px;border-bottom-style:solid}\n"] }]
1069
- }], ctorParameters: function () {
1070
- return [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.ErrorStateMatcher }, { type: i0.ElementRef }, { type: undefined, decorators: [{
1071
- type: Optional
1072
- }, {
1073
- type: Inject,
1074
- args: [NG_VALIDATORS]
1075
- }] }, { type: i3.Directionality, decorators: [{
1076
- type: Optional
1077
- }] }, { type: i4.NgForm, decorators: [{
1078
- type: Optional
1079
- }] }, { type: i4.FormGroupDirective, decorators: [{
1080
- type: Optional
1081
- }] }, { type: i1$1.McFormField, decorators: [{
1082
- type: Optional
1083
- }] }, { type: i4.NgControl, decorators: [{
1084
- type: Self
1085
- }, {
1086
- type: Optional
1087
- }] }, { type: i4.NgModel, decorators: [{
1088
- type: Optional
1089
- }, {
1090
- type: Self
1091
- }] }, { type: i4.FormControlName, decorators: [{
1092
- type: Optional
1093
- }, {
1094
- type: Self
1095
- }] }, { type: undefined, decorators: [{
1096
- type: Inject,
1097
- args: [MC_SELECT_SCROLL_STRATEGY]
1098
- }] }, { type: undefined, decorators: [{
1099
- type: Optional
1100
- }, {
1101
- type: Inject,
1102
- args: [MC_VALIDATION]
1103
- }] }];
1104
- }, propDecorators: { trigger: [{
1105
- type: ViewChild,
1106
- args: ['trigger', { static: false }]
1107
- }], panel: [{
1108
- type: ViewChild,
1109
- args: ['panel', { static: false }]
1110
- }], optionsContainer: [{
1111
- type: ViewChild,
1112
- args: ['optionsContainer', { static: false }]
1113
- }], overlayDir: [{
1114
- type: ViewChild,
1115
- args: [CdkConnectedOverlay, { static: false }]
1116
- }], tags: [{
1117
- type: ViewChildren,
1118
- args: [McTag]
1119
- }], customTrigger: [{
1120
- type: ContentChild,
1121
- args: [McSelectTrigger, { static: false }]
1122
- }], cleaner: [{
1123
- type: ContentChild,
1124
- args: ['mcSelectCleaner', { static: true }]
1125
- }], options: [{
1126
- type: ContentChildren,
1127
- args: [McOption, { descendants: true }]
1128
- }], optionGroups: [{
1129
- type: ContentChildren,
1130
- args: [McOptgroup]
1131
- }], search: [{
1132
- type: ContentChild,
1133
- args: [McSelectSearch, { static: false }]
1134
- }], hiddenItemsText: [{
1135
- type: Input
1136
- }], panelClass: [{
1137
- type: Input
1138
- }], backdropClass: [{
1139
- type: Input
1140
- }], errorStateMatcher: [{
1141
- type: Input
1142
- }], sortComparator: [{
1143
- type: Input
1144
- }], openedChange: [{
1145
- type: Output
1146
- }], openedStream: [{
1147
- type: Output,
1148
- args: ['opened']
1149
- }], closedStream: [{
1150
- type: Output,
1151
- args: ['closed']
1152
- }], selectionChange: [{
1153
- type: Output
1154
- }], valueChange: [{
1155
- type: Output
1156
- }], hasBackdrop: [{
1157
- type: Input
1158
- }], placeholder: [{
1159
- type: Input
1160
- }], required: [{
1161
- type: Input
1162
- }], multiple: [{
1163
- type: Input
1164
- }], compareWith: [{
1165
- type: Input
1166
- }], value: [{
1167
- type: Input
1168
- }], id: [{
1169
- type: Input
1170
- }], hiddenItemsTextFormatter: [{
1171
- type: Input
85
+ let nextUniqueId = 0;
86
+ /** Change event object that is emitted when the select value has changed. */
87
+ class McSelectChange {
88
+ constructor(source, value) {
89
+ this.source = source;
90
+ this.value = value;
91
+ }
92
+ }
93
+ class McSelectSearch {
94
+ constructor(formField) {
95
+ this.searchChangesSubscription = new Subscription();
96
+ this.isSearchChanged = false;
97
+ formField.canCleanerClearByEsc = false;
98
+ }
99
+ focus() {
100
+ this.input.focus();
101
+ }
102
+ reset() {
103
+ this.input.ngControl.reset();
104
+ }
105
+ ngAfterContentInit() {
106
+ if (!this.input) {
107
+ throw Error('McSelectSearch does not work without mcInput');
108
+ }
109
+ if (!this.input.ngControl) {
110
+ throw Error('McSelectSearch does not work without ngControl');
111
+ }
112
+ Promise.resolve().then(() => {
113
+ this.searchChangesSubscription = this.input.ngControl.valueChanges.subscribe(() => {
114
+ this.isSearchChanged = true;
115
+ });
116
+ });
117
+ }
118
+ ngOnDestroy() {
119
+ this.searchChangesSubscription.unsubscribe();
120
+ }
121
+ handleKeydown(event) {
122
+ // tslint:disable-next-line:deprecation
123
+ if (event.keyCode === ESCAPE) {
124
+ if (this.input.value) {
125
+ this.reset();
126
+ event.stopPropagation();
127
+ }
128
+ }
129
+ // tslint:disable-next-line:deprecation
130
+ if ([SPACE, HOME, END].includes(event.keyCode)) {
131
+ event.stopPropagation();
132
+ }
133
+ }
134
+ }
135
+ /** @nocollapse */ /** @nocollapse */ McSelectSearch.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McSelectSearch, deps: [{ token: i1$1.McFormField }], target: i0.ɵɵFactoryTarget.Directive });
136
+ /** @nocollapse */ /** @nocollapse */ McSelectSearch.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.7", type: McSelectSearch, selector: "[mcSelectSearch]", host: { listeners: { "keydown": "handleKeydown($event)" } }, queries: [{ propertyName: "input", first: true, predicate: McInput, descendants: true }], exportAs: ["mcSelectSearch"], ngImport: i0 });
137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McSelectSearch, decorators: [{
138
+ type: Directive,
139
+ args: [{
140
+ selector: '[mcSelectSearch]',
141
+ exportAs: 'mcSelectSearch',
142
+ host: {
143
+ '(keydown)': 'handleKeydown($event)'
144
+ }
145
+ }]
146
+ }], ctorParameters: function () { return [{ type: i1$1.McFormField }]; }, propDecorators: { input: [{
147
+ type: ContentChild,
148
+ args: [McInput, { static: false }]
149
+ }] } });
150
+ class McSelectSearchEmptyResult {
151
+ }
152
+ /** @nocollapse */ /** @nocollapse */ McSelectSearchEmptyResult.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McSelectSearchEmptyResult, deps: [], target: i0.ɵɵFactoryTarget.Directive });
153
+ /** @nocollapse */ /** @nocollapse */ McSelectSearchEmptyResult.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.7", type: McSelectSearchEmptyResult, selector: "[mc-select-search-empty-result]", exportAs: ["mcSelectSearchEmptyResult"], ngImport: i0 });
154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McSelectSearchEmptyResult, decorators: [{
155
+ type: Directive,
156
+ args: [{
157
+ selector: '[mc-select-search-empty-result]',
158
+ exportAs: 'mcSelectSearchEmptyResult'
159
+ }]
160
+ }] });
161
+ class McSelectTrigger {
162
+ }
163
+ /** @nocollapse */ /** @nocollapse */ McSelectTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McSelectTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
164
+ /** @nocollapse */ /** @nocollapse */ McSelectTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.7", type: McSelectTrigger, selector: "mc-select-trigger", ngImport: i0 });
165
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McSelectTrigger, decorators: [{
166
+ type: Directive,
167
+ args: [{ selector: 'mc-select-trigger' }]
168
+ }] });
169
+ class McSelectBase {
170
+ constructor(elementRef, defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl) {
171
+ this.elementRef = elementRef;
172
+ this.defaultErrorStateMatcher = defaultErrorStateMatcher;
173
+ this.parentForm = parentForm;
174
+ this.parentFormGroup = parentFormGroup;
175
+ this.ngControl = ngControl;
176
+ }
177
+ }
178
+ // tslint:disable-next-line:naming-convention
179
+ const McSelectMixinBase = mixinTabIndex(mixinDisabled(mixinErrorState(McSelectBase)));
180
+ class McSelect extends McSelectMixinBase {
181
+ constructor(_changeDetectorRef, _ngZone, _renderer, defaultErrorStateMatcher, elementRef, rawValidators, _dir, parentForm, parentFormGroup, _parentFormField, ngControl, ngModel, formControlName, _scrollStrategyFactory, mcValidation) {
182
+ super(elementRef, defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);
183
+ this._changeDetectorRef = _changeDetectorRef;
184
+ this._ngZone = _ngZone;
185
+ this._renderer = _renderer;
186
+ this.rawValidators = rawValidators;
187
+ this._dir = _dir;
188
+ this._parentFormField = _parentFormField;
189
+ this.ngModel = ngModel;
190
+ this.formControlName = formControlName;
191
+ this._scrollStrategyFactory = _scrollStrategyFactory;
192
+ this.mcValidation = mcValidation;
193
+ /** A name for this control that can be used by `mc-form-field`. */
194
+ this.controlType = 'select';
195
+ this.hiddenItems = 0;
196
+ /** The cached font-size of the trigger element. */
197
+ this.triggerFontSize = 0;
198
+ this.previousSelectionModelSelected = [];
199
+ /** The value of the select panel's transform-origin property. */
200
+ this.transformOrigin = 'top';
201
+ /** Emits when the panel element is finished transforming in. */
202
+ this.panelDoneAnimatingStream = new Subject();
203
+ /** Strategy that will be used to handle scrolling while the select panel is open. */
204
+ this.scrollStrategy = this._scrollStrategyFactory();
205
+ /**
206
+ * The y-offset of the overlay panel in relation to the trigger's top start corner.
207
+ * This must be adjusted to align the selected option text over the trigger text.
208
+ * when the panel opens. Will change based on the y-position of the selected option.
209
+ */
210
+ this.offsetY = 0;
211
+ /**
212
+ * This position config ensures that the top "start" corner of the overlay
213
+ * is aligned with with the top "start" of the origin by default (overlapping
214
+ * the trigger completely). If the panel cannot fit below the trigger, it
215
+ * will fall back to a position above the trigger.
216
+ */
217
+ this.positions = [
218
+ {
219
+ originX: 'start',
220
+ originY: 'bottom',
221
+ overlayX: 'start',
222
+ overlayY: 'top'
223
+ },
224
+ {
225
+ originX: 'start',
226
+ originY: 'top',
227
+ overlayX: 'start',
228
+ overlayY: 'bottom'
229
+ }
230
+ ];
231
+ this.hiddenItemsText = '...ещё';
232
+ this.backdropClass = 'cdk-overlay-transparent-backdrop';
233
+ /** Combined stream of all of the child options' change events. */
234
+ this.optionSelectionChanges = defer(() => {
235
+ if (this.options) {
236
+ return merge(...this.options.map((option) => option.onSelectionChange), ...this.selectionModel.selected.map((option) => option.onSelectionChange));
237
+ }
238
+ return this._ngZone.onStable
239
+ .asObservable()
240
+ .pipe(take(1), switchMap(() => this.optionSelectionChanges));
241
+ });
242
+ /** Event emitted when the select panel has been toggled. */
243
+ this.openedChange = new EventEmitter();
244
+ /** Event emitted when the select has been opened. */
245
+ this.openedStream = this.openedChange.pipe(filter((o) => o), map(() => { }));
246
+ /** Event emitted when the select has been closed. */
247
+ this.closedStream = this.openedChange.pipe(filter((o) => !o), map(() => { }));
248
+ /** Event emitted when the selected value has been changed by the user. */
249
+ this.selectionChange = new EventEmitter();
250
+ /**
251
+ * Event that emits whenever the raw value of the select changes. This is here primarily
252
+ * to facilitate the two-way binding for the `value` input.
253
+ * @docs-private
254
+ */
255
+ this.valueChange = new EventEmitter();
256
+ this._hasBackdrop = false;
257
+ this._required = false;
258
+ this._multiple = false;
259
+ this._focused = false;
260
+ this.panelOpen = false;
261
+ this.closeSubscription = Subscription.EMPTY;
262
+ /** The scroll position of the overlay panel, calculated to center the selected option. */
263
+ this.scrollTop = 0;
264
+ /** Unique id for this input. */
265
+ this.uid = `mc-select-${nextUniqueId++}`;
266
+ /** Emits whenever the component is destroyed. */
267
+ this.destroy = new Subject();
268
+ /** `View -> model callback called when value changes` */
269
+ this.onChange = () => { };
270
+ /** `View -> model callback called when select has been touched` */
271
+ this.onTouched = () => { };
272
+ /** Comparison function to specify which option is displayed. Defaults to object equality. */
273
+ this._compareWith = (o1, o2) => o1 === o2;
274
+ if (this.ngControl) {
275
+ // Note: we provide the value accessor through here, instead of
276
+ // the `providers` to avoid running into a circular import.
277
+ this.ngControl.valueAccessor = this;
278
+ }
279
+ // Force setter to be called in case id was not specified.
280
+ this.id = this.id;
281
+ }
282
+ get hasBackdrop() {
283
+ return this._hasBackdrop;
284
+ }
285
+ set hasBackdrop(value) {
286
+ this._hasBackdrop = coerceBooleanProperty(value);
287
+ }
288
+ get placeholder() {
289
+ return this._placeholder;
290
+ }
291
+ set placeholder(value) {
292
+ this._placeholder = value;
293
+ this.stateChanges.next();
294
+ }
295
+ get required() {
296
+ return this._required;
297
+ }
298
+ set required(value) {
299
+ this._required = coerceBooleanProperty(value);
300
+ this.stateChanges.next();
301
+ }
302
+ get multiple() {
303
+ return this._multiple;
304
+ }
305
+ set multiple(value) {
306
+ if (this.selectionModel) {
307
+ throw getMcSelectDynamicMultipleError();
308
+ }
309
+ this._multiple = coerceBooleanProperty(value);
310
+ }
311
+ /**
312
+ * Function to compare the option values with the selected values. The first argument
313
+ * is a value from an option. The second is a value from the selection. A boolean
314
+ * should be returned.
315
+ */
316
+ get compareWith() {
317
+ return this._compareWith;
318
+ }
319
+ set compareWith(fn) {
320
+ /* tslint:disable-next-line:strict-type-predicates */
321
+ if (typeof fn !== 'function') {
322
+ throw getMcSelectNonFunctionValueError();
323
+ }
324
+ this._compareWith = fn;
325
+ if (this.selectionModel) {
326
+ // A different comparator means the selection could change.
327
+ this.initializeSelection();
328
+ }
329
+ }
330
+ /** Value of the select control. */
331
+ get value() {
332
+ return this._value;
333
+ }
334
+ set value(newValue) {
335
+ if (newValue !== this._value) {
336
+ this.writeValue(newValue);
337
+ this._value = newValue;
338
+ }
339
+ }
340
+ get id() {
341
+ return this._id;
342
+ }
343
+ set id(value) {
344
+ this._id = value || this.uid;
345
+ this.stateChanges.next();
346
+ }
347
+ /** Whether the select is focused. */
348
+ get focused() {
349
+ return this._focused || this.panelOpen;
350
+ }
351
+ set focused(value) {
352
+ this._focused = value;
353
+ }
354
+ get isEmptySearchResult() {
355
+ return this.search && this.options.length === 0 && !!this.search.input.value;
356
+ }
357
+ get canShowCleaner() {
358
+ return this.cleaner && this.selectionModel.hasValue();
359
+ }
360
+ get selected() {
361
+ return this.multiple ? this.selectionModel.selected : this.selectionModel.selected[0];
362
+ }
363
+ get triggerValue() {
364
+ if (this.empty) {
365
+ return '';
366
+ }
367
+ return this.selectionModel.selected[0].viewValue;
368
+ }
369
+ get triggerValues() {
370
+ if (this.empty) {
371
+ return [];
372
+ }
373
+ const selectedOptions = this.selectionModel.selected;
374
+ if (this.isRtl()) {
375
+ selectedOptions.reverse();
376
+ }
377
+ return selectedOptions;
378
+ }
379
+ get empty() {
380
+ return !this.selectionModel || this.selectionModel.isEmpty();
381
+ }
382
+ ngOnInit() {
383
+ this.selectionModel = new SelectionModel(this.multiple);
384
+ this.stateChanges.next();
385
+ // We need `distinctUntilChanged` here, because some browsers will
386
+ // fire the animation end event twice for the same animation. See:
387
+ // https://github.com/angular/angular/issues/24084
388
+ this.panelDoneAnimatingStream
389
+ .pipe(distinctUntilChanged(), takeUntil(this.destroy))
390
+ .subscribe(() => {
391
+ if (this.panelOpen) {
392
+ this.scrollTop = 0;
393
+ if (this.search) {
394
+ this.search.focus();
395
+ }
396
+ this.openedChange.emit(true);
397
+ }
398
+ else {
399
+ this.openedChange.emit(false);
400
+ this._changeDetectorRef.markForCheck();
401
+ }
402
+ });
403
+ }
404
+ ngAfterContentInit() {
405
+ if (this.mcValidation.useValidation) {
406
+ setMosaicValidation(this, this._changeDetectorRef);
407
+ }
408
+ this.initKeyManager();
409
+ this.selectionModel.changed
410
+ .pipe(takeUntil(this.destroy))
411
+ .subscribe((event) => {
412
+ event.added.forEach((option) => option.select());
413
+ event.removed.forEach((option) => option.deselect());
414
+ });
415
+ this.options.changes
416
+ .pipe(startWith(null), takeUntil(this.destroy))
417
+ .subscribe(() => {
418
+ this.resetOptions();
419
+ this.initializeSelection();
420
+ });
421
+ }
422
+ ngAfterViewInit() {
423
+ this.tags.changes
424
+ .subscribe(() => {
425
+ setTimeout(() => this.calculateHiddenItems(), 0);
426
+ });
427
+ }
428
+ ngDoCheck() {
429
+ if (this.ngControl) {
430
+ this.updateErrorState();
431
+ }
432
+ }
433
+ ngOnChanges(changes) {
434
+ // Updating the disabled state is handled by `mixinDisabled`, but we need to additionally let
435
+ // the parent form field know to run change detection when the disabled state changes.
436
+ if (changes.disabled) {
437
+ this.stateChanges.next();
438
+ }
439
+ }
440
+ ngOnDestroy() {
441
+ this.destroy.next();
442
+ this.destroy.complete();
443
+ this.stateChanges.complete();
444
+ this.closeSubscription.unsubscribe();
445
+ }
446
+ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) {
447
+ return `${hiddenItemsText} ${hiddenItems}`;
448
+ }
449
+ clearValue($event) {
450
+ $event.stopPropagation();
451
+ this.selectionModel.clear();
452
+ this.keyManager.setActiveItem(-1);
453
+ this.propagateChanges();
454
+ }
455
+ resetSearch() {
456
+ if (!this.search) {
457
+ return;
458
+ }
459
+ this.search.reset();
460
+ /*
461
+ todo the incorrect behaviour of keyManager is possible here
462
+ to avoid first item selection (to provide correct options flipping on closed select)
463
+ we should process options update like it is the first options appearance
464
+ */
465
+ this.search.isSearchChanged = false;
466
+ }
467
+ /** Toggles the overlay panel open or closed. */
468
+ toggle() {
469
+ if (this.panelOpen) {
470
+ this.close();
471
+ }
472
+ else {
473
+ this.open();
474
+ }
475
+ }
476
+ /** Opens the overlay panel. */
477
+ open() {
478
+ var _a;
479
+ if (this.disabled || !((_a = this.options) === null || _a === void 0 ? void 0 : _a.length) || this.panelOpen) {
480
+ return;
481
+ }
482
+ this.triggerRect = this.trigger.nativeElement.getBoundingClientRect();
483
+ // Note: The computed font-size will be a string pixel value (e.g. "16px").
484
+ // `parseInt` ignores the trailing 'px' and converts this to a number.
485
+ this.triggerFontSize = parseInt(getComputedStyle(this.trigger.nativeElement)['font-size']);
486
+ this.panelOpen = true;
487
+ this.keyManager.withHorizontalOrientation(null);
488
+ this.highlightCorrectOption();
489
+ this._changeDetectorRef.markForCheck();
490
+ // Set the font size on the panel element once it exists.
491
+ this._ngZone.onStable.asObservable()
492
+ .pipe(take(1))
493
+ .subscribe(() => {
494
+ this.scrollActiveOptionIntoView();
495
+ if (this.triggerFontSize && this.overlayDir.overlayRef && this.overlayDir.overlayRef.overlayElement) {
496
+ this.overlayDir.overlayRef.overlayElement.style.fontSize = `${this.triggerFontSize}px`;
497
+ }
498
+ });
499
+ }
500
+ /** Closes the overlay panel and focuses the host element. */
501
+ close() {
502
+ if (!this.panelOpen) {
503
+ return;
504
+ }
505
+ // the order of calls is important
506
+ this.resetSearch();
507
+ this.panelOpen = false;
508
+ this.keyManager.withHorizontalOrientation(this.isRtl() ? 'rtl' : 'ltr');
509
+ this._changeDetectorRef.markForCheck();
510
+ this.onTouched();
511
+ }
512
+ /**
513
+ * Sets the select's value. Part of the ControlValueAccessor interface
514
+ * required to integrate with Angular's core forms API.
515
+ *
516
+ * @param value New value to be written to the model.
517
+ */
518
+ writeValue(value) {
519
+ if (this.options) {
520
+ this.setSelectionByValue(value);
521
+ }
522
+ }
523
+ /**
524
+ * Saves a callback function to be invoked when the select's value
525
+ * changes from user input. Part of the ControlValueAccessor interface
526
+ * required to integrate with Angular's core forms API.
527
+ *
528
+ * @param fn Callback to be triggered when the value changes.
529
+ */
530
+ registerOnChange(fn) {
531
+ this.onChange = fn;
532
+ }
533
+ /**
534
+ * Saves a callback function to be invoked when the select is blurred
535
+ * by the user. Part of the ControlValueAccessor interface required
536
+ * to integrate with Angular's core forms API.
537
+ *
538
+ * @param fn Callback to be triggered when the component has been touched.
539
+ */
540
+ registerOnTouched(fn) {
541
+ this.onTouched = fn;
542
+ }
543
+ /**
544
+ * Disables the select. Part of the ControlValueAccessor interface required
545
+ * to integrate with Angular's core forms API.
546
+ *
547
+ * @param isDisabled Sets whether the component is disabled.
548
+ */
549
+ setDisabledState(isDisabled) {
550
+ this.disabled = isDisabled;
551
+ this._changeDetectorRef.markForCheck();
552
+ this.stateChanges.next();
553
+ }
554
+ isRtl() {
555
+ return this._dir ? this._dir.value === 'rtl' : false;
556
+ }
557
+ handleKeydown(event) {
558
+ if (this.disabled) {
559
+ return;
560
+ }
561
+ if (this.panelOpen) {
562
+ this.handleOpenKeydown(event);
563
+ }
564
+ else {
565
+ this.handleClosedKeydown(event);
566
+ }
567
+ }
568
+ onFocus() {
569
+ if (!this.disabled) {
570
+ this._focused = true;
571
+ this.stateChanges.next();
572
+ }
573
+ }
574
+ /**
575
+ * Calls the touched callback only if the panel is closed. Otherwise, the trigger will
576
+ * "blur" to the panel when it opens, causing a false positive.
577
+ */
578
+ onBlur() {
579
+ this._focused = false;
580
+ if (!this.disabled && !this.panelOpen) {
581
+ this.onTouched();
582
+ this._changeDetectorRef.markForCheck();
583
+ this.stateChanges.next();
584
+ }
585
+ }
586
+ /**
587
+ * Callback that is invoked when the overlay panel has been attached.
588
+ */
589
+ onAttached() {
590
+ this.overlayDir.positionChange
591
+ .pipe(take(1))
592
+ .subscribe(() => {
593
+ this._changeDetectorRef.detectChanges();
594
+ this.setOverlayPosition();
595
+ this.optionsContainer.nativeElement.scrollTop = this.scrollTop;
596
+ this.updateScrollSize();
597
+ });
598
+ this.closeSubscription = this.closingActions()
599
+ .subscribe(() => this.close());
600
+ }
601
+ /** Returns the theme to be used on the panel. */
602
+ getPanelTheme() {
603
+ return this._parentFormField ? `mc-${this._parentFormField.color}` : '';
604
+ }
605
+ /** Focuses the select element. */
606
+ focus() {
607
+ this.elementRef.nativeElement.focus();
608
+ }
609
+ /**
610
+ * Implemented as part of McFormFieldControl.
611
+ * @docs-private
612
+ */
613
+ onContainerClick() {
614
+ this.focus();
615
+ }
616
+ /** Invoked when an option is clicked. */
617
+ onRemoveMatcherItem(option, $event) {
618
+ $event.stopPropagation();
619
+ option.deselect();
620
+ }
621
+ calculateHiddenItems() {
622
+ if (this.customTrigger || this.empty || !this.multiple) {
623
+ return;
624
+ }
625
+ let visibleItems = 0;
626
+ const totalItemsWidth = this.getTotalItemsWidthInMatcher();
627
+ let totalVisibleItemsWidth = 0;
628
+ this.tags.forEach((tag) => {
629
+ if (tag.nativeElement.offsetTop < tag.nativeElement.offsetHeight) {
630
+ totalVisibleItemsWidth += this.getItemWidth(tag.nativeElement);
631
+ visibleItems++;
632
+ }
633
+ });
634
+ this.hiddenItems = this.selected.length - visibleItems;
635
+ if (this.hiddenItems) {
636
+ const itemsCounter = this.trigger.nativeElement.querySelector('.mc-select__match-hidden-text');
637
+ const matcherList = this.trigger.nativeElement.querySelector('.mc-select__match-list');
638
+ const itemsCounterShowed = itemsCounter.offsetTop < itemsCounter.offsetHeight;
639
+ // const itemsCounterWidth: number = itemsCounter.getBoundingClientRect().width;
640
+ const itemsCounterWidth = 86;
641
+ const matcherListWidth = Math.floor(matcherList.getBoundingClientRect().width);
642
+ const matcherWidth = matcherListWidth + (itemsCounterShowed ? itemsCounterWidth : 0);
643
+ if (itemsCounterShowed && (totalItemsWidth < matcherWidth)) {
644
+ this.hiddenItems = 0;
645
+ }
646
+ if (totalVisibleItemsWidth === matcherListWidth ||
647
+ (totalVisibleItemsWidth + itemsCounterWidth) < matcherListWidth) {
648
+ this._changeDetectorRef.markForCheck();
649
+ return;
650
+ }
651
+ else if (!itemsCounterShowed && (totalItemsWidth + itemsCounterWidth) > matcherWidth) {
652
+ this.hiddenItems++;
653
+ }
654
+ }
655
+ this._changeDetectorRef.markForCheck();
656
+ }
657
+ getItemHeight() {
658
+ return this.options.first ? this.options.first.getHeight() : 0;
659
+ }
660
+ closingActions() {
661
+ return merge(this.overlayDir.overlayRef.outsidePointerEvents()
662
+ .pipe(filter((event) => !this.elementRef.nativeElement.contains(event.target))), this.overlayDir.overlayRef.detachments());
663
+ }
664
+ getHeightOfOptionsContainer() {
665
+ return this.optionsContainer.nativeElement.getClientRects()[0].height;
666
+ }
667
+ updateScrollSize() {
668
+ if (!this.options.first) {
669
+ return;
670
+ }
671
+ this.keyManager.withScrollSize(Math.floor(this.getHeightOfOptionsContainer() / this.options.first.getHeight()));
672
+ }
673
+ getTotalItemsWidthInMatcher() {
674
+ const triggerClone = this.trigger.nativeElement.cloneNode(true);
675
+ triggerClone.querySelector('.mc-select__match-hidden-text').remove();
676
+ this._renderer.setStyle(triggerClone, 'position', 'absolute');
677
+ this._renderer.setStyle(triggerClone, 'visibility', 'hidden');
678
+ this._renderer.setStyle(triggerClone, 'top', '-100%');
679
+ this._renderer.setStyle(triggerClone, 'left', '0');
680
+ this._renderer.appendChild(this.trigger.nativeElement, triggerClone);
681
+ let totalItemsWidth = 0;
682
+ triggerClone.querySelectorAll('mc-tag').forEach((item) => {
683
+ totalItemsWidth += this.getItemWidth(item);
684
+ });
685
+ triggerClone.remove();
686
+ return totalItemsWidth;
687
+ }
688
+ getItemWidth(element) {
689
+ const computedStyle = window.getComputedStyle(element);
690
+ const width = parseInt(computedStyle.width);
691
+ const marginLeft = parseInt(computedStyle.marginLeft);
692
+ const marginRight = parseInt(computedStyle.marginRight);
693
+ return width + marginLeft + marginRight;
694
+ }
695
+ /** Handles keyboard events while the select is closed. */
696
+ handleClosedKeydown(event) {
697
+ /* tslint:disable-next-line */
698
+ const keyCode = event.keyCode;
699
+ const isArrowKey = [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW].includes(keyCode);
700
+ const isOpenKey = [ENTER, SPACE].includes(keyCode);
701
+ // Open the select on ALT + arrow key to match the native <select>
702
+ if (isOpenKey || ((this.multiple || event.altKey) && isArrowKey)) {
703
+ event.preventDefault(); // prevents the page from scrolling down when pressing space
704
+ this.open();
705
+ }
706
+ else if (!this.multiple) {
707
+ this.keyManager.onKeydown(event);
708
+ }
709
+ }
710
+ /** Handles keyboard events when the selected is open. */
711
+ handleOpenKeydown(event) {
712
+ /* tslint:disable-next-line */
713
+ const keyCode = event.keyCode;
714
+ const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;
715
+ if (isArrowKey && event.altKey) {
716
+ // Close the select on ALT + arrow key to match the native <select>
717
+ event.preventDefault();
718
+ this.close();
719
+ }
720
+ else if (keyCode === HOME) {
721
+ event.preventDefault();
722
+ this.keyManager.setFirstItemActive();
723
+ }
724
+ else if (keyCode === END) {
725
+ event.preventDefault();
726
+ this.keyManager.setLastItemActive();
727
+ }
728
+ else if (keyCode === PAGE_UP) {
729
+ event.preventDefault();
730
+ this.keyManager.setPreviousPageItemActive();
731
+ }
732
+ else if (keyCode === PAGE_DOWN) {
733
+ event.preventDefault();
734
+ this.keyManager.setNextPageItemActive();
735
+ }
736
+ else if ((keyCode === ENTER || keyCode === SPACE) && this.keyManager.activeItem) {
737
+ event.preventDefault();
738
+ this.keyManager.activeItem.selectViaInteraction();
739
+ }
740
+ else if (this._multiple && keyCode === A && event.ctrlKey) {
741
+ event.preventDefault();
742
+ const hasDeselectedOptions = this.options.some((option) => !option.selected);
743
+ this.options.forEach((option) => {
744
+ if (hasDeselectedOptions && !option.disabled) {
745
+ option.select();
746
+ }
747
+ else {
748
+ option.deselect();
749
+ }
750
+ });
751
+ }
752
+ else {
753
+ const previouslyFocusedIndex = this.keyManager.activeItemIndex;
754
+ this.keyManager.onKeydown(event);
755
+ if (this._multiple && isArrowKey && event.shiftKey && this.keyManager.activeItem &&
756
+ this.keyManager.activeItemIndex !== previouslyFocusedIndex) {
757
+ this.keyManager.activeItem.selectViaInteraction();
758
+ }
759
+ if (this.search) {
760
+ this.search.focus();
761
+ }
762
+ }
763
+ }
764
+ initializeSelection() {
765
+ // Defer setting the value in order to avoid the "Expression
766
+ // has changed after it was checked" errors from Angular.
767
+ Promise.resolve().then(() => {
768
+ this.setSelectionByValue(this.ngControl ? this.ngControl.value : this._value);
769
+ });
770
+ }
771
+ /**
772
+ * Sets the selected option based on a value. If no option can be
773
+ * found with the designated value, the select trigger is cleared.
774
+ */
775
+ setSelectionByValue(value) {
776
+ this.previousSelectionModelSelected = this.selectionModel.selected;
777
+ if (this.multiple && value) {
778
+ if (!Array.isArray(value)) {
779
+ throw getMcSelectNonArrayValueError();
780
+ }
781
+ this.selectionModel.clear();
782
+ value.forEach((currentValue) => this.selectValue(currentValue));
783
+ this.sortValues();
784
+ }
785
+ else {
786
+ this.selectionModel.clear();
787
+ const correspondingOption = this.selectValue(value);
788
+ // Shift focus to the active item. Note that we shouldn't do this in multiple
789
+ // mode, because we don't know what option the user interacted with last.
790
+ if (correspondingOption) {
791
+ this.keyManager.setActiveItem(correspondingOption);
792
+ }
793
+ }
794
+ this._changeDetectorRef.markForCheck();
795
+ }
796
+ getCorrespondOption(value) {
797
+ return [
798
+ ...this.options.toArray(),
799
+ ...this.previousSelectionModelSelected
800
+ ].find((option) => {
801
+ try {
802
+ // Treat null as a special reset value.
803
+ return option.value != null && this.compareWith(option.value, value);
804
+ }
805
+ catch (error) {
806
+ if (isDevMode()) {
807
+ // Notify developers of errors in their comparator.
808
+ console.warn(error);
809
+ }
810
+ return false;
811
+ }
812
+ });
813
+ }
814
+ /**
815
+ * Finds and selects and option based on its value.
816
+ * @returns Option that has the corresponding value.
817
+ */
818
+ selectValue(value) {
819
+ const correspondingOption = this.getCorrespondOption(value);
820
+ if (correspondingOption) {
821
+ this.selectionModel.select(correspondingOption);
822
+ }
823
+ return correspondingOption;
824
+ }
825
+ /** Sets up a key manager to listen to keyboard events on the overlay panel. */
826
+ initKeyManager() {
827
+ const typeAheadDebounce = 200;
828
+ this.keyManager = new ActiveDescendantKeyManager(this.options)
829
+ .withTypeAhead(typeAheadDebounce, this.search ? -1 : 0)
830
+ .withVerticalOrientation()
831
+ .withHorizontalOrientation(this.isRtl() ? 'rtl' : 'ltr');
832
+ this.keyManager.tabOut
833
+ .pipe(takeUntil(this.destroy))
834
+ .subscribe(() => {
835
+ // Restore focus to the trigger before closing. Ensures that the focus
836
+ // position won't be lost if the user got focus into the overlay.
837
+ this.focus();
838
+ this.close();
839
+ });
840
+ this.keyManager.change
841
+ .pipe(takeUntil(this.destroy))
842
+ .subscribe(() => {
843
+ if (this.panelOpen && this.panel) {
844
+ this.scrollActiveOptionIntoView();
845
+ }
846
+ else if (!this.panelOpen && !this.multiple && this.keyManager.activeItem) {
847
+ this.keyManager.activeItem.selectViaInteraction();
848
+ }
849
+ });
850
+ }
851
+ /** Drops current option subscriptions and IDs and resets from scratch. */
852
+ resetOptions() {
853
+ const changedOrDestroyed = merge(this.options.changes, this.destroy);
854
+ this.optionSelectionChanges
855
+ .pipe(takeUntil(changedOrDestroyed))
856
+ .subscribe((event) => {
857
+ this.onSelect(event.source, event.isUserInput);
858
+ if (this.search && this.search.isSearchChanged) {
859
+ Promise.resolve().then(() => this.keyManager.updateActiveItem(0));
860
+ this.search.isSearchChanged = false;
861
+ }
862
+ if (event.isUserInput && !this.multiple && this.panelOpen) {
863
+ this.close();
864
+ this.focus();
865
+ }
866
+ });
867
+ // Listen to changes in the internal state of the options and react accordingly.
868
+ // Handles cases like the labels of the selected options changing.
869
+ merge(...this.options.map((option) => option.stateChanges))
870
+ .pipe(takeUntil(changedOrDestroyed))
871
+ .subscribe(() => {
872
+ this._changeDetectorRef.markForCheck();
873
+ this.stateChanges.next();
874
+ });
875
+ }
876
+ /** Invoked when an option is clicked. */
877
+ onSelect(option, isUserInput) {
878
+ const wasSelected = this.selectionModel.isSelected(option);
879
+ if (option.value == null && !this._multiple) {
880
+ option.deselect();
881
+ this.selectionModel.clear();
882
+ this.propagateChanges(option.value);
883
+ }
884
+ else {
885
+ if (option.selected) {
886
+ this.selectionModel.select(option);
887
+ }
888
+ else {
889
+ this.selectionModel.deselect(option);
890
+ }
891
+ if (isUserInput) {
892
+ this.keyManager.setActiveItem(option);
893
+ }
894
+ if (this.multiple) {
895
+ this.sortValues();
896
+ if (isUserInput) {
897
+ // In case the user selected the option with their mouse, we
898
+ // want to restore focus back to the trigger, in order to
899
+ // prevent the select keyboard controls from clashing with
900
+ // the ones from `mc-option`.
901
+ // If search is avaliable then we focus search again.
902
+ if (this.search) {
903
+ this.search.focus();
904
+ }
905
+ else {
906
+ this.focus();
907
+ }
908
+ }
909
+ }
910
+ }
911
+ if (wasSelected !== this.selectionModel.isSelected(option)) {
912
+ this.propagateChanges();
913
+ }
914
+ this.stateChanges.next();
915
+ }
916
+ /** Sorts the selected values in the selected based on their order in the panel. */
917
+ sortValues() {
918
+ if (this.multiple) {
919
+ const options = this.options.toArray();
920
+ this.selectionModel.sort((a, b) => {
921
+ return this.sortComparator ? this.sortComparator(a, b, options) :
922
+ options.indexOf(a) - options.indexOf(b);
923
+ });
924
+ this.stateChanges.next();
925
+ }
926
+ }
927
+ /** Emits change event to set the model value. */
928
+ propagateChanges(fallbackValue) {
929
+ let valueToEmit = null;
930
+ if (this.multiple) {
931
+ valueToEmit = this.selected.map((option) => option.value);
932
+ }
933
+ else {
934
+ valueToEmit = this.selected ? this.selected.value : fallbackValue;
935
+ }
936
+ this._value = valueToEmit;
937
+ this.valueChange.emit(valueToEmit);
938
+ this.onChange(valueToEmit);
939
+ this.selectionChange.emit(new McSelectChange(this, valueToEmit));
940
+ this._changeDetectorRef.markForCheck();
941
+ }
942
+ /**
943
+ * Highlights the selected item. If no option is selected, it will highlight
944
+ * the first item instead.
945
+ */
946
+ highlightCorrectOption() {
947
+ if (this.keyManager) {
948
+ if (this.empty) {
949
+ this.keyManager.setFirstItemActive();
950
+ }
951
+ else {
952
+ this.keyManager.setActiveItem(this.selectionModel.selected[0]);
953
+ }
954
+ }
955
+ }
956
+ /** Scrolls the active option into view. */
957
+ scrollActiveOptionIntoView() {
958
+ var _a;
959
+ (_a = this.keyManager.activeItem) === null || _a === void 0 ? void 0 : _a.focus();
960
+ }
961
+ /**
962
+ * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.
963
+ * This must be adjusted to align the selected option text over the trigger text when
964
+ * the panel opens. Will change based on LTR or RTL text direction. Note that the offset
965
+ * can't be calculated until the panel has been attached, because we need to know the
966
+ * content width in order to constrain the panel within the viewport.
967
+ */
968
+ setOverlayPosition() {
969
+ this.resetOverlay();
970
+ const overlayRect = this.getOverlayRect();
971
+ // Window width without scrollbar
972
+ const windowWidth = this.getOverlayWidth();
973
+ const isRtl = this.isRtl();
974
+ /* tslint:disable-next-line:no-magic-numbers */
975
+ const paddingWidth = SELECT_PANEL_PADDING_X * 2;
976
+ let offsetX;
977
+ let overlayMaxWidth;
978
+ const selected = this.selectionModel.selected[0] || this.options.first;
979
+ offsetX = selected && selected.group ? SELECT_PANEL_INDENT_PADDING_X : SELECT_PANEL_PADDING_X;
980
+ // Invert the offset in LTR.
981
+ if (!isRtl) {
982
+ offsetX *= -1;
983
+ }
984
+ // Determine if select overflows on either side.
985
+ const leftOverflow = 0 - (overlayRect.left + offsetX - (isRtl ? paddingWidth : 0));
986
+ const rightOverflow = overlayRect.right + offsetX - windowWidth
987
+ + (isRtl ? 0 : paddingWidth);
988
+ // If the element overflows on either side, reduce the offset to allow it to fit.
989
+ if (leftOverflow > 0 || rightOverflow > 0) {
990
+ [offsetX, overlayMaxWidth] = this.calculateOverlayXPosition(overlayRect, windowWidth, offsetX);
991
+ this.overlayDir.overlayRef.overlayElement.style.maxWidth = `${overlayMaxWidth}px`;
992
+ }
993
+ // Set the offset directly in order to avoid having to go through change detection and
994
+ // potentially triggering "changed after it was checked" errors. Round the value to avoid
995
+ // blurry content in some browsers.
996
+ this.overlayDir.offsetX = Math.round(offsetX);
997
+ this.overlayDir.overlayRef.updatePosition();
998
+ }
999
+ calculateOverlayXPosition(overlayRect, windowWidth, basicOffsetX) {
1000
+ let offsetX = basicOffsetX;
1001
+ const leftIndent = this.triggerRect.left;
1002
+ const rightIndent = windowWidth - this.triggerRect.right;
1003
+ // Setting direction of dropdown expansion
1004
+ const isRightDirection = leftIndent <= rightIndent;
1005
+ let maxDropdownWidth;
1006
+ let overlayMaxWidth;
1007
+ const triggerWidth = this.triggerRect.width + SELECT_PANEL_INDENT_PADDING_X;
1008
+ if (isRightDirection) {
1009
+ maxDropdownWidth = rightIndent + triggerWidth - SELECT_PANEL_VIEWPORT_PADDING;
1010
+ overlayMaxWidth = overlayRect.width < maxDropdownWidth ? overlayRect.width : maxDropdownWidth;
1011
+ }
1012
+ else {
1013
+ let leftOffset;
1014
+ maxDropdownWidth = leftIndent + triggerWidth - SELECT_PANEL_VIEWPORT_PADDING;
1015
+ if (overlayRect.width < maxDropdownWidth) {
1016
+ overlayMaxWidth = overlayRect.width;
1017
+ leftOffset = this.triggerRect.right - overlayMaxWidth;
1018
+ }
1019
+ else {
1020
+ overlayMaxWidth = maxDropdownWidth;
1021
+ leftOffset = this.triggerRect.right - (overlayMaxWidth - SELECT_PANEL_INDENT_PADDING_X);
1022
+ }
1023
+ offsetX -= this.triggerRect.left - leftOffset;
1024
+ }
1025
+ return [offsetX, overlayMaxWidth];
1026
+ }
1027
+ resetOverlay() {
1028
+ this.overlayDir.offsetX = 0;
1029
+ this.overlayDir.overlayRef.overlayElement.style.maxWidth = 'unset';
1030
+ this.overlayDir.overlayRef.updatePosition();
1031
+ }
1032
+ getOverlayRect() {
1033
+ return this.overlayDir.overlayRef.overlayElement.getBoundingClientRect();
1034
+ }
1035
+ getOverlayWidth() {
1036
+ return this.scrollStrategy._overlayRef.hostElement.clientWidth;
1037
+ }
1038
+ }
1039
+ /** @nocollapse */ /** @nocollapse */ McSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McSelect, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.ErrorStateMatcher }, { token: i0.ElementRef }, { token: NG_VALIDATORS, optional: true }, { token: i3.Directionality, optional: true }, { token: i4.NgForm, optional: true }, { token: i4.FormGroupDirective, optional: true }, { token: i1$1.McFormField, optional: true }, { token: i4.NgControl, optional: true, self: true }, { token: i4.NgModel, optional: true, self: true }, { token: i4.FormControlName, optional: true, self: true }, { token: MC_SELECT_SCROLL_STRATEGY }, { token: MC_VALIDATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1040
+ /** @nocollapse */ /** @nocollapse */ McSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.7", type: McSelect, selector: "mc-select", inputs: { disabled: "disabled", tabIndex: "tabIndex", hiddenItemsText: "hiddenItemsText", panelClass: "panelClass", backdropClass: "backdropClass", errorStateMatcher: "errorStateMatcher", sortComparator: "sortComparator", hasBackdrop: "hasBackdrop", placeholder: "placeholder", required: "required", multiple: "multiple", compareWith: "compareWith", value: "value", id: "id", hiddenItemsTextFormatter: "hiddenItemsTextFormatter" }, outputs: { openedChange: "openedChange", openedStream: "opened", closedStream: "closed", selectionChange: "selectionChange", valueChange: "valueChange" }, host: { listeners: { "keydown": "handleKeydown($event)", "focus": "onFocus()", "blur": "onBlur()", "window:resize": "calculateHiddenItems()" }, properties: { "attr.id": "id", "attr.tabindex": "tabIndex", "attr.disabled": "disabled || null", "class.mc-disabled": "disabled", "class.mc-invalid": "errorState" }, classAttribute: "mc-select" }, providers: [
1041
+ { provide: McFormFieldControl, useExisting: McSelect },
1042
+ { provide: MC_OPTION_PARENT_COMPONENT, useExisting: McSelect }
1043
+ ], queries: [{ propertyName: "customTrigger", first: true, predicate: McSelectTrigger, descendants: true }, { propertyName: "cleaner", first: true, predicate: ["mcSelectCleaner"], descendants: true, static: true }, { propertyName: "search", first: true, predicate: McSelectSearch, descendants: true }, { propertyName: "options", predicate: McOption, descendants: true }, { propertyName: "optionGroups", predicate: McOptgroup }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "panel", first: true, predicate: ["panel"], descendants: true }, { propertyName: "optionsContainer", first: true, predicate: ["optionsContainer"], descendants: true }, { propertyName: "overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "tags", predicate: McTag, descendants: true }], exportAs: ["mcSelect"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div cdk-overlay-origin\r\n class=\"mc-select__trigger\"\r\n (click)=\"toggle()\"\r\n [class.mc-select__trigger_multiple]=\"multiple\"\r\n #origin=\"cdkOverlayOrigin\"\r\n #trigger>\r\n <div class=\"mc-select__matcher\" [ngSwitch]=\"empty\">\r\n <span class=\"mc-select__placeholder\" *ngSwitchCase=\"true\">{{ placeholder || '\\u00A0' }}</span>\r\n <span *ngSwitchCase=\"false\" [ngSwitch]=\"!!customTrigger\">\r\n <div *ngSwitchDefault [ngSwitch]=\"multiple\" class=\"mc-select__match-container\">\r\n <span *ngSwitchCase=\"false\" class=\"mc-select__matcher-text\">{{ triggerValue }}</span>\r\n <div *ngSwitchCase=\"true\" class=\"mc-select__match-list\">\r\n <mc-tag *ngFor=\"let option of triggerValues\"\r\n [disabled]=\"option.disabled || disabled\"\r\n [selectable]=\"false\"\r\n [class.mc-error]=\"errorState\">\r\n {{ option.viewValue }}\r\n <i mc-icon=\"mc-close-S_16\"\r\n *ngIf=\"!option.disabled && !disabled\"\r\n (click)=\"onRemoveMatcherItem(option, $event)\">\r\n </i>\r\n </mc-tag>\r\n </div>\r\n <div class=\"mc-select__match-hidden-text\" [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\">\r\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\r\n </div>\r\n </div>\r\n <ng-content select=\"mc-select-trigger\" *ngSwitchCase=\"true\"></ng-content>\r\n </span>\r\n </div>\r\n\r\n <div class=\"mc-select__cleaner\" *ngIf=\"canShowCleaner\" (click)=\"clearValue($event)\">\r\n <ng-content select=\"mc-cleaner\"></ng-content>\r\n </div>\r\n\r\n <div class=\"mc-select__arrow-wrapper\">\r\n <i class=\"mc-select__arrow\" mc-icon=\"mc-angle-down-S_16\"></i>\r\n </div>\r\n</div>\r\n\r\n<ng-template\r\n cdk-connected-overlay\r\n cdkConnectedOverlayLockPosition\r\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\r\n [cdkConnectedOverlayBackdropClass]=\"backdropClass\"\r\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\r\n [cdkConnectedOverlayOrigin]=\"origin\"\r\n [cdkConnectedOverlayOpen]=\"panelOpen\"\r\n [cdkConnectedOverlayPositions]=\"positions\"\r\n [cdkConnectedOverlayMinWidth]=\"triggerRect?.width!\"\r\n [cdkConnectedOverlayOffsetY]=\"offsetY\"\r\n (backdropClick)=\"close()\"\r\n (attach)=\"onAttached()\"\r\n (detach)=\"close()\">\r\n <div\r\n #panel\r\n class=\"mc-select__panel {{ getPanelTheme() }}\"\r\n [ngClass]=\"panelClass\"\r\n [style.transformOrigin]=\"transformOrigin\"\r\n [style.font-size.px]=\"triggerFontSize\"\r\n (keydown)=\"handleKeydown($event)\">\r\n\r\n <div *ngIf=\"search\" class=\"mc-select__search-container\">\r\n <ng-content select=\"[mcSelectSearch]\"></ng-content>\r\n </div>\r\n\r\n <div #optionsContainer\r\n class=\"mc-select__content\"\r\n [@fadeInContent]=\"'showing'\"\r\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\">\r\n\r\n <div *ngIf=\"isEmptySearchResult\" class=\"mc-select__no-options-message\">\r\n <ng-content select=\"[mc-select-search-empty-result]\"></ng-content>\r\n </div>\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".mc-option{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;position:relative;max-width:100%;height:var(--mc-option-size-height, 32px);border:var(--mc-option-size-border-width, 2px) solid transparent;cursor:pointer;outline:none;padding-left:var(--mc-option-size-horizontal-padding, 12px);padding-right:var(--mc-option-size-horizontal-padding, 12px);-webkit-tap-highlight-color:transparent}.mc-option.mc-disabled{cursor:default}.mc-option .mc-pseudo-checkbox{margin-right:8px}.mc-option .mc-option-overlay{position:absolute;top:calc(-1 * var(--mc-option-size-border-width, 2px));left:calc(-1 * var(--mc-option-size-border-width, 2px));right:calc(-1 * var(--mc-option-size-border-width, 2px));bottom:calc(-1 * var(--mc-option-size-border-width, 2px));pointer-events:none;border-radius:inherit}.mc-option-text{display:inline-block;flex-grow:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.mc-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.mc-select .mc-select__trigger{display:flex;box-sizing:border-box;position:relative;height:calc(var(--mc-form-field-size-height, 32px) - var(--mc-form-field-size-border-width, 1px) * 2);cursor:pointer;padding-left:calc(var(--mc-select-size-left-padding, 12px) - var(--mc-form-field-size-border-width, 1px));padding-right:calc(var(--mc-select-size-right-padding, 6px) - var(--mc-form-field-size-border-width, 1px))}.mc-select .mc-select__trigger.mc-select__trigger_multiple{padding-left:calc(var(--mc-select-size-left-padding-multiple, 12px) - var(--mc-form-field-size-border-width, 1px))}.mc-select .mc-select__trigger.mc-select__trigger_multiple .mc-tag.mc-disabled .mc-tag__text{margin-right:7px}.mc-select.mc-disabled .mc-select__trigger{-webkit-user-select:none;user-select:none;cursor:default}.mc-select__no-options-message{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;position:relative;max-width:100%;height:var(--mc-option-size-height, 32px);cursor:default;outline:none;padding-left:var(--mc-option-size-horizontal-padding, 12px);padding-right:var(--mc-option-size-horizontal-padding, 12px)}.mc-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mc-select__matcher>span{width:100%}.mc-select__match-list{display:flex;flex-wrap:wrap;overflow:hidden;max-height:calc(var(--mc-form-field-size-height, 32px) - var(--mc-form-field-size-border-width, 1px) * 2)}.mc-select__match-list .mc-tag{margin-right:4px}.mc-select__match-container{display:flex;flex-direction:row;justify-content:space-between;width:100%}.mc-select__match-container .mc-select__match-hidden-text{flex:0 0 70px;align-self:center;padding:0 8px;text-align:right}.mc-select__arrow-wrapper{align-self:center}.mc-form-field-appearance-fill .mc-select__arrow-wrapper,.mc-form-field-appearance-standard .mc-select__arrow-wrapper{transform:translateY(-50%)}.mc-form-field-appearance-outline .mc-select__arrow-wrapper{transform:translateY(-25%)}.mc-select__panel{min-width:100%;max-width:var(--mc-select-panel-size-max-width, 640px);overflow:hidden;border-width:var(--mc-select-panel-size-border-width, 1px);border-style:solid;border-bottom-left-radius:var(--mc-select-panel-size-border-radius, 4px);border-bottom-right-radius:var(--mc-select-panel-size-border-radius, 4px)}.mc-select__panel .mc-optgroup-label,.mc-select__panel .mc-option{font-size:inherit;line-height:var(--mc-option-size-height, 32px);height:var(--mc-option-size-height, 32px)}.mc-select__content{max-height:var(--mc-select-panel-size-max-height, 232px);padding:var(--mc-select-panel-size-vertical-padding, 4px) 0;overflow:auto}.mc-select__content .cdk-virtual-scroll-viewport{min-height:var(--mc-select-panel-size-max-height, 232px)-8px;max-height:var(--mc-select-panel-size-max-height, 232px)-8px}.mc-form-field-type-select:not(.mc-disabled) .mc-form-field-flex{cursor:pointer}.mc-select__search-container{border-bottom-width:1px;border-bottom-style:solid}\n"], components: [{ type: i5.McTag, selector: "mc-tag, [mc-tag], mc-basic-tag, [mc-basic-tag]", inputs: ["color", "selected", "value", "selectable", "removable", "disabled"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["mcTag"] }, { type: i6.McIcon, selector: "[mc-icon]", inputs: ["color"] }], directives: [{ type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i8.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.McIconCSSStyler, selector: "[mc-icon]" }, { type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [
1044
+ mcSelectAnimations.transformPanel,
1045
+ mcSelectAnimations.fadeInContent
1046
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1047
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McSelect, decorators: [{
1048
+ type: Component,
1049
+ args: [{ selector: 'mc-select', exportAs: 'mcSelect', inputs: ['disabled', 'tabIndex'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
1050
+ '[attr.id]': 'id',
1051
+ '[attr.tabindex]': 'tabIndex',
1052
+ '[attr.disabled]': 'disabled || null',
1053
+ class: 'mc-select',
1054
+ '[class.mc-disabled]': 'disabled',
1055
+ '[class.mc-invalid]': 'errorState',
1056
+ '(keydown)': 'handleKeydown($event)',
1057
+ '(focus)': 'onFocus()',
1058
+ '(blur)': 'onBlur()',
1059
+ '(window:resize)': 'calculateHiddenItems()'
1060
+ }, animations: [
1061
+ mcSelectAnimations.transformPanel,
1062
+ mcSelectAnimations.fadeInContent
1063
+ ], providers: [
1064
+ { provide: McFormFieldControl, useExisting: McSelect },
1065
+ { provide: MC_OPTION_PARENT_COMPONENT, useExisting: McSelect }
1066
+ ], template: "<div cdk-overlay-origin\r\n class=\"mc-select__trigger\"\r\n (click)=\"toggle()\"\r\n [class.mc-select__trigger_multiple]=\"multiple\"\r\n #origin=\"cdkOverlayOrigin\"\r\n #trigger>\r\n <div class=\"mc-select__matcher\" [ngSwitch]=\"empty\">\r\n <span class=\"mc-select__placeholder\" *ngSwitchCase=\"true\">{{ placeholder || '\\u00A0' }}</span>\r\n <span *ngSwitchCase=\"false\" [ngSwitch]=\"!!customTrigger\">\r\n <div *ngSwitchDefault [ngSwitch]=\"multiple\" class=\"mc-select__match-container\">\r\n <span *ngSwitchCase=\"false\" class=\"mc-select__matcher-text\">{{ triggerValue }}</span>\r\n <div *ngSwitchCase=\"true\" class=\"mc-select__match-list\">\r\n <mc-tag *ngFor=\"let option of triggerValues\"\r\n [disabled]=\"option.disabled || disabled\"\r\n [selectable]=\"false\"\r\n [class.mc-error]=\"errorState\">\r\n {{ option.viewValue }}\r\n <i mc-icon=\"mc-close-S_16\"\r\n *ngIf=\"!option.disabled && !disabled\"\r\n (click)=\"onRemoveMatcherItem(option, $event)\">\r\n </i>\r\n </mc-tag>\r\n </div>\r\n <div class=\"mc-select__match-hidden-text\" [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\">\r\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\r\n </div>\r\n </div>\r\n <ng-content select=\"mc-select-trigger\" *ngSwitchCase=\"true\"></ng-content>\r\n </span>\r\n </div>\r\n\r\n <div class=\"mc-select__cleaner\" *ngIf=\"canShowCleaner\" (click)=\"clearValue($event)\">\r\n <ng-content select=\"mc-cleaner\"></ng-content>\r\n </div>\r\n\r\n <div class=\"mc-select__arrow-wrapper\">\r\n <i class=\"mc-select__arrow\" mc-icon=\"mc-angle-down-S_16\"></i>\r\n </div>\r\n</div>\r\n\r\n<ng-template\r\n cdk-connected-overlay\r\n cdkConnectedOverlayLockPosition\r\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\r\n [cdkConnectedOverlayBackdropClass]=\"backdropClass\"\r\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\r\n [cdkConnectedOverlayOrigin]=\"origin\"\r\n [cdkConnectedOverlayOpen]=\"panelOpen\"\r\n [cdkConnectedOverlayPositions]=\"positions\"\r\n [cdkConnectedOverlayMinWidth]=\"triggerRect?.width!\"\r\n [cdkConnectedOverlayOffsetY]=\"offsetY\"\r\n (backdropClick)=\"close()\"\r\n (attach)=\"onAttached()\"\r\n (detach)=\"close()\">\r\n <div\r\n #panel\r\n class=\"mc-select__panel {{ getPanelTheme() }}\"\r\n [ngClass]=\"panelClass\"\r\n [style.transformOrigin]=\"transformOrigin\"\r\n [style.font-size.px]=\"triggerFontSize\"\r\n (keydown)=\"handleKeydown($event)\">\r\n\r\n <div *ngIf=\"search\" class=\"mc-select__search-container\">\r\n <ng-content select=\"[mcSelectSearch]\"></ng-content>\r\n </div>\r\n\r\n <div #optionsContainer\r\n class=\"mc-select__content\"\r\n [@fadeInContent]=\"'showing'\"\r\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\">\r\n\r\n <div *ngIf=\"isEmptySearchResult\" class=\"mc-select__no-options-message\">\r\n <ng-content select=\"[mc-select-search-empty-result]\"></ng-content>\r\n </div>\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".mc-option{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;position:relative;max-width:100%;height:var(--mc-option-size-height, 32px);border:var(--mc-option-size-border-width, 2px) solid transparent;cursor:pointer;outline:none;padding-left:var(--mc-option-size-horizontal-padding, 12px);padding-right:var(--mc-option-size-horizontal-padding, 12px);-webkit-tap-highlight-color:transparent}.mc-option.mc-disabled{cursor:default}.mc-option .mc-pseudo-checkbox{margin-right:8px}.mc-option .mc-option-overlay{position:absolute;top:calc(-1 * var(--mc-option-size-border-width, 2px));left:calc(-1 * var(--mc-option-size-border-width, 2px));right:calc(-1 * var(--mc-option-size-border-width, 2px));bottom:calc(-1 * var(--mc-option-size-border-width, 2px));pointer-events:none;border-radius:inherit}.mc-option-text{display:inline-block;flex-grow:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.mc-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.mc-select .mc-select__trigger{display:flex;box-sizing:border-box;position:relative;height:calc(var(--mc-form-field-size-height, 32px) - var(--mc-form-field-size-border-width, 1px) * 2);cursor:pointer;padding-left:calc(var(--mc-select-size-left-padding, 12px) - var(--mc-form-field-size-border-width, 1px));padding-right:calc(var(--mc-select-size-right-padding, 6px) - var(--mc-form-field-size-border-width, 1px))}.mc-select .mc-select__trigger.mc-select__trigger_multiple{padding-left:calc(var(--mc-select-size-left-padding-multiple, 12px) - var(--mc-form-field-size-border-width, 1px))}.mc-select .mc-select__trigger.mc-select__trigger_multiple .mc-tag.mc-disabled .mc-tag__text{margin-right:7px}.mc-select.mc-disabled .mc-select__trigger{-webkit-user-select:none;user-select:none;cursor:default}.mc-select__no-options-message{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;position:relative;max-width:100%;height:var(--mc-option-size-height, 32px);cursor:default;outline:none;padding-left:var(--mc-option-size-horizontal-padding, 12px);padding-right:var(--mc-option-size-horizontal-padding, 12px)}.mc-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mc-select__matcher>span{width:100%}.mc-select__match-list{display:flex;flex-wrap:wrap;overflow:hidden;max-height:calc(var(--mc-form-field-size-height, 32px) - var(--mc-form-field-size-border-width, 1px) * 2)}.mc-select__match-list .mc-tag{margin-right:4px}.mc-select__match-container{display:flex;flex-direction:row;justify-content:space-between;width:100%}.mc-select__match-container .mc-select__match-hidden-text{flex:0 0 70px;align-self:center;padding:0 8px;text-align:right}.mc-select__arrow-wrapper{align-self:center}.mc-form-field-appearance-fill .mc-select__arrow-wrapper,.mc-form-field-appearance-standard .mc-select__arrow-wrapper{transform:translateY(-50%)}.mc-form-field-appearance-outline .mc-select__arrow-wrapper{transform:translateY(-25%)}.mc-select__panel{min-width:100%;max-width:var(--mc-select-panel-size-max-width, 640px);overflow:hidden;border-width:var(--mc-select-panel-size-border-width, 1px);border-style:solid;border-bottom-left-radius:var(--mc-select-panel-size-border-radius, 4px);border-bottom-right-radius:var(--mc-select-panel-size-border-radius, 4px)}.mc-select__panel .mc-optgroup-label,.mc-select__panel .mc-option{font-size:inherit;line-height:var(--mc-option-size-height, 32px);height:var(--mc-option-size-height, 32px)}.mc-select__content{max-height:var(--mc-select-panel-size-max-height, 232px);padding:var(--mc-select-panel-size-vertical-padding, 4px) 0;overflow:auto}.mc-select__content .cdk-virtual-scroll-viewport{min-height:var(--mc-select-panel-size-max-height, 232px)-8px;max-height:var(--mc-select-panel-size-max-height, 232px)-8px}.mc-form-field-type-select:not(.mc-disabled) .mc-form-field-flex{cursor:pointer}.mc-select__search-container{border-bottom-width:1px;border-bottom-style:solid}\n"] }]
1067
+ }], ctorParameters: function () {
1068
+ return [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.ErrorStateMatcher }, { type: i0.ElementRef }, { type: undefined, decorators: [{
1069
+ type: Optional
1070
+ }, {
1071
+ type: Inject,
1072
+ args: [NG_VALIDATORS]
1073
+ }] }, { type: i3.Directionality, decorators: [{
1074
+ type: Optional
1075
+ }] }, { type: i4.NgForm, decorators: [{
1076
+ type: Optional
1077
+ }] }, { type: i4.FormGroupDirective, decorators: [{
1078
+ type: Optional
1079
+ }] }, { type: i1$1.McFormField, decorators: [{
1080
+ type: Optional
1081
+ }] }, { type: i4.NgControl, decorators: [{
1082
+ type: Self
1083
+ }, {
1084
+ type: Optional
1085
+ }] }, { type: i4.NgModel, decorators: [{
1086
+ type: Optional
1087
+ }, {
1088
+ type: Self
1089
+ }] }, { type: i4.FormControlName, decorators: [{
1090
+ type: Optional
1091
+ }, {
1092
+ type: Self
1093
+ }] }, { type: undefined, decorators: [{
1094
+ type: Inject,
1095
+ args: [MC_SELECT_SCROLL_STRATEGY]
1096
+ }] }, { type: undefined, decorators: [{
1097
+ type: Optional
1098
+ }, {
1099
+ type: Inject,
1100
+ args: [MC_VALIDATION]
1101
+ }] }];
1102
+ }, propDecorators: { trigger: [{
1103
+ type: ViewChild,
1104
+ args: ['trigger', { static: false }]
1105
+ }], panel: [{
1106
+ type: ViewChild,
1107
+ args: ['panel', { static: false }]
1108
+ }], optionsContainer: [{
1109
+ type: ViewChild,
1110
+ args: ['optionsContainer', { static: false }]
1111
+ }], overlayDir: [{
1112
+ type: ViewChild,
1113
+ args: [CdkConnectedOverlay, { static: false }]
1114
+ }], tags: [{
1115
+ type: ViewChildren,
1116
+ args: [McTag]
1117
+ }], customTrigger: [{
1118
+ type: ContentChild,
1119
+ args: [McSelectTrigger, { static: false }]
1120
+ }], cleaner: [{
1121
+ type: ContentChild,
1122
+ args: ['mcSelectCleaner', { static: true }]
1123
+ }], options: [{
1124
+ type: ContentChildren,
1125
+ args: [McOption, { descendants: true }]
1126
+ }], optionGroups: [{
1127
+ type: ContentChildren,
1128
+ args: [McOptgroup]
1129
+ }], search: [{
1130
+ type: ContentChild,
1131
+ args: [McSelectSearch, { static: false }]
1132
+ }], hiddenItemsText: [{
1133
+ type: Input
1134
+ }], panelClass: [{
1135
+ type: Input
1136
+ }], backdropClass: [{
1137
+ type: Input
1138
+ }], errorStateMatcher: [{
1139
+ type: Input
1140
+ }], sortComparator: [{
1141
+ type: Input
1142
+ }], openedChange: [{
1143
+ type: Output
1144
+ }], openedStream: [{
1145
+ type: Output,
1146
+ args: ['opened']
1147
+ }], closedStream: [{
1148
+ type: Output,
1149
+ args: ['closed']
1150
+ }], selectionChange: [{
1151
+ type: Output
1152
+ }], valueChange: [{
1153
+ type: Output
1154
+ }], hasBackdrop: [{
1155
+ type: Input
1156
+ }], placeholder: [{
1157
+ type: Input
1158
+ }], required: [{
1159
+ type: Input
1160
+ }], multiple: [{
1161
+ type: Input
1162
+ }], compareWith: [{
1163
+ type: Input
1164
+ }], value: [{
1165
+ type: Input
1166
+ }], id: [{
1167
+ type: Input
1168
+ }], hiddenItemsTextFormatter: [{
1169
+ type: Input
1172
1170
  }] } });
1173
1171
 
1174
- class McSelectModule {
1175
- }
1176
- /** @nocollapse */ /** @nocollapse */ McSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1177
- /** @nocollapse */ /** @nocollapse */ McSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSelectModule, declarations: [McSelect,
1178
- McSelectSearch,
1179
- McSelectSearchEmptyResult,
1180
- McSelectTrigger,
1181
- McOptionTooltip], imports: [CommonModule,
1182
- OverlayModule,
1183
- McOptionModule,
1184
- McIconModule,
1185
- McTagsModule,
1186
- McToolTipModule], exports: [McFormFieldModule,
1187
- McSelect,
1188
- McSelectSearch,
1189
- McSelectSearchEmptyResult,
1190
- McSelectTrigger,
1191
- McOptionTooltip,
1192
- McOptionModule,
1193
- CommonModule] });
1194
- /** @nocollapse */ /** @nocollapse */ McSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSelectModule, providers: [MC_SELECT_SCROLL_STRATEGY_PROVIDER], imports: [[
1195
- CommonModule,
1196
- OverlayModule,
1197
- McOptionModule,
1198
- McIconModule,
1199
- McTagsModule,
1200
- McToolTipModule
1201
- ], McFormFieldModule,
1202
- McOptionModule,
1203
- CommonModule] });
1204
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: McSelectModule, decorators: [{
1205
- type: NgModule,
1206
- args: [{
1207
- imports: [
1208
- CommonModule,
1209
- OverlayModule,
1210
- McOptionModule,
1211
- McIconModule,
1212
- McTagsModule,
1213
- McToolTipModule
1214
- ],
1215
- exports: [
1216
- McFormFieldModule,
1217
- McSelect,
1218
- McSelectSearch,
1219
- McSelectSearchEmptyResult,
1220
- McSelectTrigger,
1221
- McOptionTooltip,
1222
- McOptionModule,
1223
- CommonModule
1224
- ],
1225
- declarations: [
1226
- McSelect,
1227
- McSelectSearch,
1228
- McSelectSearchEmptyResult,
1229
- McSelectTrigger,
1230
- McOptionTooltip
1231
- ],
1232
- providers: [MC_SELECT_SCROLL_STRATEGY_PROVIDER]
1233
- }]
1172
+ class McSelectModule {
1173
+ }
1174
+ /** @nocollapse */ /** @nocollapse */ McSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1175
+ /** @nocollapse */ /** @nocollapse */ McSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McSelectModule, declarations: [McSelect,
1176
+ McSelectSearch,
1177
+ McSelectSearchEmptyResult,
1178
+ McSelectTrigger,
1179
+ McOptionTooltip], imports: [CommonModule,
1180
+ OverlayModule,
1181
+ McOptionModule,
1182
+ McIconModule,
1183
+ McTagsModule,
1184
+ McToolTipModule], exports: [McFormFieldModule,
1185
+ McSelect,
1186
+ McSelectSearch,
1187
+ McSelectSearchEmptyResult,
1188
+ McSelectTrigger,
1189
+ McOptionTooltip,
1190
+ McOptionModule,
1191
+ CommonModule] });
1192
+ /** @nocollapse */ /** @nocollapse */ McSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McSelectModule, providers: [MC_SELECT_SCROLL_STRATEGY_PROVIDER], imports: [[
1193
+ CommonModule,
1194
+ OverlayModule,
1195
+ McOptionModule,
1196
+ McIconModule,
1197
+ McTagsModule,
1198
+ McToolTipModule
1199
+ ], McFormFieldModule,
1200
+ McOptionModule,
1201
+ CommonModule] });
1202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McSelectModule, decorators: [{
1203
+ type: NgModule,
1204
+ args: [{
1205
+ imports: [
1206
+ CommonModule,
1207
+ OverlayModule,
1208
+ McOptionModule,
1209
+ McIconModule,
1210
+ McTagsModule,
1211
+ McToolTipModule
1212
+ ],
1213
+ exports: [
1214
+ McFormFieldModule,
1215
+ McSelect,
1216
+ McSelectSearch,
1217
+ McSelectSearchEmptyResult,
1218
+ McSelectTrigger,
1219
+ McOptionTooltip,
1220
+ McOptionModule,
1221
+ CommonModule
1222
+ ],
1223
+ declarations: [
1224
+ McSelect,
1225
+ McSelectSearch,
1226
+ McSelectSearchEmptyResult,
1227
+ McSelectTrigger,
1228
+ McOptionTooltip
1229
+ ],
1230
+ providers: [MC_SELECT_SCROLL_STRATEGY_PROVIDER]
1231
+ }]
1234
1232
  }] });
1235
1233
 
1236
- /**
1237
- * Generated bundle index. Do not edit.
1234
+ /**
1235
+ * Generated bundle index. Do not edit.
1238
1236
  */
1239
1237
 
1240
1238
  export { McOptionTooltip, McSelect, McSelectBase, McSelectChange, McSelectModule, McSelectSearch, McSelectSearchEmptyResult, McSelectTrigger };