@ptsecurity/mosaic 13.5.0 → 13.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (923) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +6 -6
  3. package/_theming.scss +7141 -7091
  4. package/_visual.scss +2695 -2690
  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 -18
  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 -178
  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 -97
  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 -104
  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 +45 -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 -134
  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 +119 -118
  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 +7844 -7839
  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 -97
  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 -104
  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 +45 -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 -137
  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 +122 -120
  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 -232
  189. package/design-tokens/pt-2022/tokens/properties/typography.json5 +175 -175
  190. package/design-tokens/pt-2022/tokens.d.ts +9176 -9171
  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 -63
  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 -11
  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 -136
  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 -316
  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 -118
  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 +938 -936
  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 +404 -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 +1138 -1133
  330. package/esm2020/design-tokens/pt-2022/tokens.mjs +1208 -1203
  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 -489
  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 -686
  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 -582
  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 +1117 -1107
  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 -375
  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 +665 -676
  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 +113 -110
  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 +248 -236
  532. package/esm2020/tree/tree-selection.component.mjs +540 -540
  533. package/esm2020/tree/tree.mjs +15 -15
  534. package/esm2020/tree/tree.module.mjs +57 -57
  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 +939 -924
  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 +348 -348
  549. package/fesm2015/ptsecurity-mosaic-checkbox.mjs.map +1 -1
  550. package/fesm2015/ptsecurity-mosaic-core.mjs +2653 -2642
  551. package/fesm2015/ptsecurity-mosaic-core.mjs.map +1 -1
  552. package/fesm2015/ptsecurity-mosaic-datepicker.mjs +2682 -2684
  553. package/fesm2015/ptsecurity-mosaic-datepicker.mjs.map +1 -1
  554. package/fesm2015/ptsecurity-mosaic-design-tokens.mjs +2370 -2355
  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 -1069
  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 -762
  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 -993
  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 +1213 -1203
  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 -1342
  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 +703 -714
  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 +954 -939
  607. package/fesm2015/ptsecurity-mosaic-tree-select.mjs.map +1 -1
  608. package/fesm2015/ptsecurity-mosaic-tree.mjs +1695 -1679
  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 +346 -346
  620. package/fesm2020/ptsecurity-mosaic-checkbox.mjs.map +1 -1
  621. package/fesm2020/ptsecurity-mosaic-core.mjs +2682 -2671
  622. package/fesm2020/ptsecurity-mosaic-core.mjs.map +1 -1
  623. package/fesm2020/ptsecurity-mosaic-datepicker.mjs +2667 -2669
  624. package/fesm2020/ptsecurity-mosaic-datepicker.mjs.map +1 -1
  625. package/fesm2020/ptsecurity-mosaic-design-tokens.mjs +2370 -2355
  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 -1056
  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 -755
  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 -977
  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 +1208 -1198
  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 -1335
  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 +700 -711
  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 +951 -936
  678. package/fesm2020/ptsecurity-mosaic-tree-select.mjs.map +1 -1
  679. package/fesm2020/ptsecurity-mosaic-tree.mjs +1682 -1666
  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 +4 -4
  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/schematics/collection.json +4 -0
  774. package/schematics/migration.json +10 -0
  775. package/schematics/ng-update/data/attribute-selectors.d.ts +2 -0
  776. package/schematics/ng-update/data/attribute-selectors.js +5 -0
  777. package/schematics/ng-update/data/attribute-selectors.js.map +1 -0
  778. package/schematics/ng-update/data/class-names.d.ts +2 -0
  779. package/schematics/ng-update/data/class-names.js +5 -0
  780. package/schematics/ng-update/data/class-names.js.map +1 -0
  781. package/schematics/ng-update/data/constructor-checks.d.ts +2 -0
  782. package/schematics/ng-update/data/constructor-checks.js +5 -0
  783. package/schematics/ng-update/data/constructor-checks.js.map +1 -0
  784. package/schematics/ng-update/data/css-selectors.d.ts +2 -0
  785. package/schematics/ng-update/data/css-selectors.js +5 -0
  786. package/schematics/ng-update/data/css-selectors.js.map +1 -0
  787. package/schematics/ng-update/data/element-selectors.d.ts +2 -0
  788. package/schematics/ng-update/data/element-selectors.js +5 -0
  789. package/schematics/ng-update/data/element-selectors.js.map +1 -0
  790. package/schematics/ng-update/data/index.d.ts +10 -0
  791. package/schematics/ng-update/data/index.js +14 -0
  792. package/schematics/ng-update/data/index.js.map +1 -0
  793. package/schematics/ng-update/data/input-names.d.ts +2 -0
  794. package/schematics/ng-update/data/input-names.js +35 -0
  795. package/schematics/ng-update/data/input-names.js.map +1 -0
  796. package/schematics/ng-update/data/method-call-checks.d.ts +2 -0
  797. package/schematics/ng-update/data/method-call-checks.js +5 -0
  798. package/schematics/ng-update/data/method-call-checks.js.map +1 -0
  799. package/schematics/ng-update/data/output-names.d.ts +2 -0
  800. package/schematics/ng-update/data/output-names.js +5 -0
  801. package/schematics/ng-update/data/output-names.js.map +1 -0
  802. package/schematics/ng-update/data/property-names.d.ts +2 -0
  803. package/schematics/ng-update/data/property-names.js +5 -0
  804. package/schematics/ng-update/data/property-names.js.map +1 -0
  805. package/schematics/ng-update/data/symbol-removal.d.ts +2 -0
  806. package/schematics/ng-update/data/symbol-removal.js +5 -0
  807. package/schematics/ng-update/data/symbol-removal.js.map +1 -0
  808. package/schematics/ng-update/index.d.ts +2 -0
  809. package/schematics/ng-update/index.js +23 -0
  810. package/schematics/ng-update/index.js.map +1 -0
  811. package/schematics/ng-update/update-9.0.0/mosaic-symbols.json +255 -0
  812. package/schematics/ng-update/update-9.0.0/secondary-entry-points-migration.d.ts +7 -0
  813. package/schematics/ng-update/update-9.0.0/secondary-entry-points-migration.js +154 -0
  814. package/schematics/ng-update/update-9.0.0/secondary-entry-points-migration.js.map +1 -0
  815. package/schematics/ng-update/upgrade-data.d.ts +2 -0
  816. package/schematics/ng-update/upgrade-data.js +17 -0
  817. package/schematics/ng-update/upgrade-data.js.map +1 -0
  818. package/schematics/tsconfig.json +29 -0
  819. package/schematics/tsconfig.lib-test.json +8 -0
  820. package/schematics/tsconfig.lib.json +17 -0
  821. package/select/index.d.ts +1 -1
  822. package/select/ptsecurity-mosaic-select.d.ts +5 -5
  823. package/select/public-api.d.ts +3 -3
  824. package/select/select-option.directive.d.ts +20 -20
  825. package/select/select.component.d.ts +310 -307
  826. package/select/select.module.d.ts +15 -15
  827. package/sidebar/index.d.ts +1 -1
  828. package/sidebar/ptsecurity-mosaic-sidebar.d.ts +5 -5
  829. package/sidebar/public-api.d.ts +2 -2
  830. package/sidebar/sidebar-animations.d.ts +8 -8
  831. package/sidebar/sidebar.component.d.ts +53 -53
  832. package/sidebar/sidebar.module.d.ts +8 -8
  833. package/sidepanel/index.d.ts +1 -1
  834. package/sidepanel/ptsecurity-mosaic-sidepanel.d.ts +5 -5
  835. package/sidepanel/public-api.d.ts +6 -6
  836. package/sidepanel/sidepanel-animations.d.ts +14 -14
  837. package/sidepanel/sidepanel-config.d.ts +25 -25
  838. package/sidepanel/sidepanel-container.component.d.ts +45 -45
  839. package/sidepanel/sidepanel-directives.d.ts +50 -50
  840. package/sidepanel/sidepanel-ref.d.ts +24 -24
  841. package/sidepanel/sidepanel.module.d.ts +15 -15
  842. package/sidepanel/sidepanel.service.d.ts +57 -57
  843. package/splitter/index.d.ts +1 -1
  844. package/splitter/ptsecurity-mosaic-splitter.d.ts +5 -5
  845. package/splitter/public-api.d.ts +2 -2
  846. package/splitter/splitter.component.d.ts +130 -130
  847. package/splitter/splitter.module.d.ts +9 -9
  848. package/table/index.d.ts +1 -1
  849. package/table/ptsecurity-mosaic-table.d.ts +5 -5
  850. package/table/public-api.d.ts +2 -2
  851. package/table/table.component.d.ts +5 -5
  852. package/table/table.module.d.ts +10 -10
  853. package/tabs/index.d.ts +1 -1
  854. package/tabs/paginated-tab-header.d.ts +179 -179
  855. package/tabs/ptsecurity-mosaic-tabs.d.ts +5 -5
  856. package/tabs/public-api.d.ts +10 -10
  857. package/tabs/tab-body.component.d.ts +95 -95
  858. package/tabs/tab-content.directive.d.ts +9 -9
  859. package/tabs/tab-group.component.d.ts +133 -133
  860. package/tabs/tab-header.component.d.ts +35 -35
  861. package/tabs/tab-label-wrapper.directive.d.ts +30 -30
  862. package/tabs/tab-label.directive.d.ts +9 -9
  863. package/tabs/tab-nav-bar/index.d.ts +1 -1
  864. package/tabs/tab-nav-bar/tab-nav-bar.d.ts +38 -38
  865. package/tabs/tab.component.d.ts +66 -66
  866. package/tabs/tabs-animations.d.ts +4 -4
  867. package/tabs/tabs.module.d.ts +20 -20
  868. package/tags/index.d.ts +1 -1
  869. package/tags/ptsecurity-mosaic-tags.d.ts +5 -5
  870. package/tags/public-api.d.ts +5 -5
  871. package/tags/tag-default-options.d.ts +8 -8
  872. package/tags/tag-input.d.ts +77 -77
  873. package/tags/tag-list.component.d.ts +240 -240
  874. package/tags/tag-text-control.d.ts +10 -10
  875. package/tags/tag.component.d.ts +135 -135
  876. package/tags/tag.module.d.ts +11 -11
  877. package/textarea/index.d.ts +1 -1
  878. package/textarea/ptsecurity-mosaic-textarea.d.ts +5 -5
  879. package/textarea/public-api.d.ts +2 -2
  880. package/textarea/textarea.component.d.ts +111 -111
  881. package/textarea/textarea.module.d.ts +11 -11
  882. package/timepicker/index.d.ts +1 -1
  883. package/timepicker/ptsecurity-mosaic-timepicker.d.ts +5 -5
  884. package/timepicker/public-api.d.ts +3 -3
  885. package/timepicker/timepicker.constants.d.ts +20 -20
  886. package/timepicker/timepicker.directive.d.ts +146 -147
  887. package/timepicker/timepicker.module.d.ts +11 -11
  888. package/toggle/index.d.ts +1 -1
  889. package/toggle/ptsecurity-mosaic-toggle.d.ts +5 -5
  890. package/toggle/public-api.d.ts +2 -2
  891. package/toggle/toggle.component.d.ts +54 -54
  892. package/toggle/toggle.module.d.ts +10 -10
  893. package/tooltip/index.d.ts +1 -1
  894. package/tooltip/ptsecurity-mosaic-tooltip.d.ts +5 -5
  895. package/tooltip/public-api.d.ts +2 -2
  896. package/tooltip/tooltip.animations.d.ts +8 -8
  897. package/tooltip/tooltip.component.d.ts +91 -91
  898. package/tooltip/tooltip.module.d.ts +9 -9
  899. package/tree/control/base-tree-control.d.ts +40 -40
  900. package/tree/control/flat-tree-control.d.ts +52 -48
  901. package/tree/control/nested-tree-control.d.ts +19 -19
  902. package/tree/control/tree-control.d.ts +44 -44
  903. package/tree/data-source/flat-data-source.d.ts +80 -80
  904. package/tree/data-source/nested-data-source.d.ts +15 -15
  905. package/tree/index.d.ts +1 -1
  906. package/tree/node.d.ts +34 -34
  907. package/tree/outlet.d.ts +9 -9
  908. package/tree/padding.directive.d.ts +47 -45
  909. package/tree/ptsecurity-mosaic-tree.d.ts +5 -5
  910. package/tree/public-api.d.ts +15 -15
  911. package/tree/toggle.d.ts +28 -28
  912. package/tree/tree-base.d.ts +97 -97
  913. package/tree/tree-errors.d.ts +25 -25
  914. package/tree/tree-option.component.d.ts +72 -68
  915. package/tree/tree-selection.component.d.ts +132 -132
  916. package/tree/tree.d.ts +6 -6
  917. package/tree/tree.module.d.ts +16 -16
  918. package/tree-select/index.d.ts +1 -1
  919. package/tree-select/ptsecurity-mosaic-tree-select.d.ts +5 -5
  920. package/tree-select/public-api.d.ts +2 -2
  921. package/tree-select/tree-select.component.d.ts +277 -269
  922. package/tree-select/tree-select.module.d.ts +14 -14
  923. package/toggle/README.md +0 -0
@@ -23,949 +23,964 @@ import { Subject, defer, merge, Subscription } from 'rxjs';
23
23
  import { filter, map, startWith, switchMap, take, distinctUntilChanged, takeUntil } from 'rxjs/operators';
24
24
  import * as i3 from '@angular/cdk/bidi';
25
25
 
26
- let nextUniqueId = 0;
27
- /** Change event object that is emitted when the select value has changed. */
28
- class McTreeSelectChange {
29
- constructor(source, value, isUserInput = false) {
30
- this.source = source;
31
- this.value = value;
32
- this.isUserInput = isUserInput;
33
- }
34
- }
35
- class McTreeSelectTrigger {
36
- }
37
- /** @nocollapse */ /** @nocollapse */ McTreeSelectTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTreeSelectTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
38
- /** @nocollapse */ /** @nocollapse */ McTreeSelectTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.7", type: McTreeSelectTrigger, selector: "mc-tree-select-trigger", ngImport: i0 });
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTreeSelectTrigger, decorators: [{
40
- type: Directive,
41
- args: [{ selector: 'mc-tree-select-trigger' }]
42
- }] });
43
- class McTreeSelectFooter {
44
- }
45
- /** @nocollapse */ /** @nocollapse */ McTreeSelectFooter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTreeSelectFooter, deps: [], target: i0.ɵɵFactoryTarget.Directive });
46
- /** @nocollapse */ /** @nocollapse */ McTreeSelectFooter.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.7", type: McTreeSelectFooter, selector: "mc-tree-select-footer", ngImport: i0 });
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTreeSelectFooter, decorators: [{
48
- type: Directive,
49
- args: [{ selector: 'mc-tree-select-footer' }]
50
- }] });
51
- class McTreeSelectBase {
52
- constructor(elementRef, defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl) {
53
- this.elementRef = elementRef;
54
- this.defaultErrorStateMatcher = defaultErrorStateMatcher;
55
- this.parentForm = parentForm;
56
- this.parentFormGroup = parentFormGroup;
57
- this.ngControl = ngControl;
58
- }
59
- }
60
- // tslint:disable-next-line:naming-convention
61
- const McTreeSelectMixinBase = mixinTabIndex(mixinDisabled(mixinErrorState(McTreeSelectBase)));
62
- class McTreeSelect extends McTreeSelectMixinBase {
63
- constructor(elementRef, changeDetectorRef, viewportRuler, ngZone, renderer, defaultErrorStateMatcher, scrollStrategyFactory, rawValidators, mcValidation, dir, parentForm, parentFormGroup, parentFormField, ngControl, ngModel, formControlName) {
64
- super(elementRef, defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);
65
- this.changeDetectorRef = changeDetectorRef;
66
- this.viewportRuler = viewportRuler;
67
- this.ngZone = ngZone;
68
- this.renderer = renderer;
69
- this.scrollStrategyFactory = scrollStrategyFactory;
70
- this.rawValidators = rawValidators;
71
- this.mcValidation = mcValidation;
72
- this.dir = dir;
73
- this.parentFormField = parentFormField;
74
- this.ngModel = ngModel;
75
- this.formControlName = formControlName;
76
- /** A name for this control that can be used by `mc-form-field`. */
77
- this.controlType = 'select';
78
- this.hiddenItems = 0;
79
- /** The cached font-size of the trigger element. */
80
- this.triggerFontSize = 0;
81
- /** The value of the select panel's transform-origin property. */
82
- this.transformOrigin = 'top';
83
- /** Emits when the panel element is finished transforming in. */
84
- this.panelDoneAnimatingStream = new Subject();
85
- /** Strategy that will be used to handle scrolling while the select panel is open. */
86
- this.scrollStrategy = this.scrollStrategyFactory();
87
- /**
88
- * The y-offset of the overlay panel in relation to the trigger's top start corner.
89
- * This must be adjusted to align the selected option text over the trigger text.
90
- * when the panel opens. Will change based on the y-position of the selected option.
91
- */
92
- this.offsetY = 0;
93
- /**
94
- * This position config ensures that the top "start" corner of the overlay
95
- * is aligned with with the top "start" of the origin by default (overlapping
96
- * the trigger completely). If the panel cannot fit below the trigger, it
97
- * will fall back to a position above the trigger.
98
- */
99
- this.positions = [
100
- {
101
- originX: 'start',
102
- originY: 'bottom',
103
- overlayX: 'start',
104
- overlayY: 'top'
105
- },
106
- {
107
- originX: 'start',
108
- originY: 'top',
109
- overlayX: 'start',
110
- overlayY: 'bottom'
111
- }
112
- ];
113
- this.hiddenItemsText = '...ещё';
114
- /** Event emitted when the select panel has been toggled. */
115
- this.openedChange = new EventEmitter();
116
- /** Event emitted when the select has been opened. */
117
- this.openedStream = this.openedChange.pipe(filter((o) => o), map(() => { }));
118
- /** Event emitted when the select has been closed. */
119
- this.closedStream = this.openedChange.pipe(filter((o) => !o), map(() => { }));
120
- /** Event emitted when the selected value has been changed by the user. */
121
- this.selectionChange = new EventEmitter();
122
- /**
123
- * Event that emits whenever the raw value of the select changes. This is here primarily
124
- * to facilitate the two-way binding for the `value` input.
125
- * @docs-private
126
- */
127
- this.valueChange = new EventEmitter();
128
- this.backdropClass = 'cdk-overlay-transparent-backdrop';
129
- /** Combined stream of all of the child options' change events. */
130
- this.optionSelectionChanges = defer(() => {
131
- if (this.options) {
132
- return this.options.changes.pipe(startWith(this.options), switchMap(() => merge(...this.options.map((option) => option.onSelectionChange))));
133
- }
134
- return this.ngZone.onStable
135
- .asObservable()
136
- .pipe(take(1), switchMap(() => this.optionSelectionChanges));
137
- });
138
- this._required = false;
139
- this._multiple = false;
140
- this._autoSelect = true;
141
- this._value = null;
142
- this._hasBackdrop = false;
143
- this._focused = false;
144
- this.closeSubscription = Subscription.EMPTY;
145
- this._panelOpen = false;
146
- /** The scroll position of the overlay panel, calculated to center the selected option. */
147
- this.scrollTop = 0;
148
- /** Unique id for this input. */
149
- this.uid = `mc-select-${nextUniqueId++}`;
150
- /** Emits whenever the component is destroyed. */
151
- this.destroy = new Subject();
152
- /** `View -> model callback called when value changes` */
153
- this.onChange = () => { };
154
- /** `View -> model callback called when select has been touched` */
155
- this.onTouched = () => { };
156
- /** Comparison function to specify which option is displayed. Defaults to object equality. */
157
- this._compareWith = (o1, o2) => o1 === o2;
158
- if (this.ngControl) {
159
- // Note: we provide the value accessor through here, instead of
160
- // the `providers` to avoid running into a circular import.
161
- this.ngControl.valueAccessor = this;
162
- }
163
- // Force setter to be called in case id was not specified.
164
- this.id = this.id;
165
- }
166
- get placeholder() {
167
- return this._placeholder;
168
- }
169
- set placeholder(value) {
170
- this._placeholder = value;
171
- this.stateChanges.next();
172
- }
173
- get required() {
174
- return this._required;
175
- }
176
- set required(value) {
177
- this._required = coerceBooleanProperty(value);
178
- this.stateChanges.next();
179
- }
180
- get multiple() {
181
- return this._multiple;
182
- }
183
- set multiple(value) {
184
- if (this.selectionModel) {
185
- throw getMcSelectDynamicMultipleError();
186
- }
187
- this._multiple = coerceBooleanProperty(value);
188
- }
189
- get autoSelect() {
190
- if (this.multiple) {
191
- return false;
192
- }
193
- return this._autoSelect;
194
- }
195
- set autoSelect(value) {
196
- this._autoSelect = coerceBooleanProperty(value);
197
- }
198
- /**
199
- * Function to compare the option values with the selected values. The first argument
200
- * is a value from an option. The second is a value from the selection. A boolean
201
- * should be returned.
202
- */
203
- get compareWith() {
204
- return this._compareWith;
205
- }
206
- set compareWith(fn) {
207
- /* tslint:disable-next-line:strict-type-predicates */
208
- if (typeof fn !== 'function') {
209
- throw getMcSelectNonFunctionValueError();
210
- }
211
- this._compareWith = fn;
212
- if (this.selectionModel) {
213
- // A different comparator means the selection could change.
214
- this.initializeSelection();
215
- }
216
- }
217
- get value() {
218
- return this.tree.getSelectedValues();
219
- }
220
- get id() {
221
- return this._id;
222
- }
223
- set id(value) {
224
- this._id = value || this.uid;
225
- this.stateChanges.next();
226
- }
227
- get hasBackdrop() {
228
- return this._hasBackdrop;
229
- }
230
- set hasBackdrop(value) {
231
- this._hasBackdrop = coerceBooleanProperty(value);
232
- }
233
- /** Whether the select is focused. */
234
- get focused() {
235
- return this._focused || this._panelOpen;
236
- }
237
- set focused(value) {
238
- this._focused = value;
239
- }
240
- get panelOpen() {
241
- return this._panelOpen;
242
- }
243
- get canShowCleaner() {
244
- return this.cleaner && this.selectionModel.hasValue();
245
- }
246
- ngOnInit() {
247
- this.stateChanges.next();
248
- // We need `distinctUntilChanged` here, because some browsers will
249
- // fire the animation end event twice for the same animation. See:
250
- // https://github.com/angular/angular/issues/24084
251
- this.panelDoneAnimatingStream
252
- .pipe(distinctUntilChanged(), takeUntil(this.destroy))
253
- .subscribe(() => {
254
- if (this.panelOpen) {
255
- this.scrollTop = 0;
256
- if (this.search) {
257
- this.search.focus();
258
- }
259
- this.openedChange.emit(true);
260
- }
261
- else {
262
- this.openedChange.emit(false);
263
- this.overlayDir.offsetX = 0;
264
- this.changeDetectorRef.markForCheck();
265
- }
266
- });
267
- }
268
- ngAfterContentInit() {
269
- if (!this.tree) {
270
- return;
271
- }
272
- if (this.mcValidation.useValidation) {
273
- setMosaicValidation(this, this.changeDetectorRef);
274
- }
275
- this.tree.resetFocusedItemOnBlur = false;
276
- this.selectionModel = this.tree.selectionModel = new SelectionModel(this.multiple);
277
- this.selectionModel.changed
278
- .subscribe(() => this.onChange(this.selectedValues));
279
- this.tree.ngAfterContentInit();
280
- this.initKeyManager();
281
- this.options = this.tree.renderedOptions;
282
- this.tree.autoSelect = this.autoSelect;
283
- if (this.tree.multipleMode === null) {
284
- this.tree.multipleMode = this.multiple ? MultipleMode.CHECKBOX : null;
285
- }
286
- if (this.multiple) {
287
- this.tree.noUnselectLast = false;
288
- }
289
- if (this.tempValues) {
290
- this.setSelectionByValue(this.tempValues);
291
- this.tempValues = null;
292
- }
293
- this.optionSelectionChanges
294
- .pipe(takeUntil(this.destroy))
295
- .subscribe((event) => {
296
- if (!this.multiple && this.panelOpen && event.isUserInput) {
297
- this.close();
298
- }
299
- });
300
- this.tree.selectionChange
301
- .pipe(takeUntil(this.destroy))
302
- .subscribe((event) => {
303
- this.onChange(this.selectedValues);
304
- this.selectionChange.emit(new McTreeSelectChange(this, event.option));
305
- if (this.search) {
306
- this.search.focus();
307
- }
308
- });
309
- this.selectionModel.changed
310
- .pipe(takeUntil(this.destroy))
311
- .subscribe((event) => {
312
- if (event.added.length) {
313
- this.tree.keyManager.setFocusOrigin('program');
314
- this.tree.keyManager.setActiveItem(this.options.find((option) => option.data === event.added[0]));
315
- }
316
- });
317
- this.updateIsEmptySearchResult();
318
- }
319
- ngAfterViewInit() {
320
- if (!this.tree) {
321
- return;
322
- }
323
- this.tags.changes
324
- .subscribe(() => {
325
- setTimeout(() => this.calculateHiddenItems(), 0);
326
- });
327
- setTimeout(() => this.calculateHiddenItems(), 0);
328
- }
329
- ngDoCheck() {
330
- if (this.ngControl) {
331
- this.updateErrorState();
332
- }
333
- }
334
- ngOnChanges(changes) {
335
- // Updating the disabled state is handled by `mixinDisabled`, but we need to additionally let
336
- // the parent form field know to run change detection when the disabled state changes.
337
- if (changes.disabled) {
338
- this.stateChanges.next();
339
- }
340
- }
341
- ngOnDestroy() {
342
- this.destroy.next();
343
- this.destroy.complete();
344
- this.stateChanges.complete();
345
- this.closeSubscription.unsubscribe();
346
- }
347
- hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) {
348
- return `${hiddenItemsText} ${hiddenItems}`;
349
- }
350
- clearValue($event) {
351
- $event.stopPropagation();
352
- this.selectionModel.clear();
353
- this.tree.keyManager.setActiveItem(-1);
354
- this.setSelectionByValue([]);
355
- this.onChange(this.selectedValues);
356
- }
357
- toggle() {
358
- if (this.panelOpen) {
359
- this.close();
360
- }
361
- else {
362
- this.open();
363
- }
364
- }
365
- open() {
366
- if (this.disabled || !this.options || !this.options.length || this._panelOpen) {
367
- return;
368
- }
369
- this.triggerRect = this.trigger.nativeElement.getBoundingClientRect();
370
- // Note: The computed font-size will be a string pixel value (e.g. "16px").
371
- // `parseInt` ignores the trailing 'px' and converts this to a number.
372
- this.triggerFontSize = parseInt(getComputedStyle(this.trigger.nativeElement)['font-size']);
373
- this._panelOpen = true;
374
- setTimeout(() => this.highlightCorrectOption());
375
- this.changeDetectorRef.markForCheck();
376
- // Set the font size on the panel element once it exists.
377
- this.ngZone.onStable.asObservable()
378
- .pipe(take(1))
379
- .subscribe(() => {
380
- if (this.triggerFontSize && this.overlayDir.overlayRef && this.overlayDir.overlayRef.overlayElement) {
381
- this.overlayDir.overlayRef.overlayElement.style.fontSize = `${this.triggerFontSize}px`;
382
- }
383
- });
384
- }
385
- /** Closes the overlay panel and focuses the host element. */
386
- close() {
387
- if (!this._panelOpen) {
388
- return;
389
- }
390
- this._panelOpen = false;
391
- this.changeDetectorRef.markForCheck();
392
- this.onTouched();
393
- if (this.search) {
394
- this.search.reset();
395
- }
396
- setTimeout(() => this.focus(), 0);
397
- }
398
- /**
399
- * Sets the select's value. Part of the ControlValueAccessor interface
400
- * required to integrate with Angular's core forms API.
401
- *
402
- * @param value New value to be written to the model.
403
- */
404
- writeValue(value) {
405
- if (this.tree) {
406
- this.setSelectionByValue(value);
407
- }
408
- else {
409
- this.tempValues = value;
410
- }
411
- }
412
- /**
413
- * Saves a callback function to be invoked when the select's value
414
- * changes from user input. Part of the ControlValueAccessor interface
415
- * required to integrate with Angular's core forms API.
416
- *
417
- * @param fn Callback to be triggered when the value changes.
418
- */
419
- registerOnChange(fn) {
420
- this.onChange = fn;
421
- }
422
- /**
423
- * Saves a callback function to be invoked when the select is blurred
424
- * by the user. Part of the ControlValueAccessor interface required
425
- * to integrate with Angular's core forms API.
426
- *
427
- * @param fn Callback to be triggered when the component has been touched.
428
- */
429
- registerOnTouched(fn) {
430
- this.onTouched = fn;
431
- }
432
- /**
433
- * Disables the select. Part of the ControlValueAccessor interface required
434
- * to integrate with Angular's core forms API.
435
- *
436
- * @param isDisabled Sets whether the component is disabled.
437
- */
438
- setDisabledState(isDisabled) {
439
- this.disabled = isDisabled;
440
- this.changeDetectorRef.markForCheck();
441
- this.stateChanges.next();
442
- }
443
- get selected() {
444
- return this.multiple ? this.selectionModel.selected : this.selectionModel.selected[0];
445
- }
446
- get selectedValues() {
447
- const selectedValues = this.selectionModel.selected.map((value) => this.tree.treeControl.getValue(value));
448
- return this.multiple ? selectedValues : selectedValues[0];
449
- }
450
- get triggerValue() {
451
- if (this.empty) {
452
- return '';
453
- }
454
- return this.tree.treeControl.getViewValue(this.selected);
455
- }
456
- get triggerValues() {
457
- if (this.empty) {
458
- return [];
459
- }
460
- return this.selectedValues
461
- .map((value) => this.options.find((option) => option.value === value))
462
- .filter((option) => option);
463
- }
464
- get empty() {
465
- return !this.selectionModel || this.selectionModel.isEmpty();
466
- }
467
- isRtl() {
468
- return this.dir ? this.dir.value === 'rtl' : false;
469
- }
470
- handleKeydown(event) {
471
- if (!this.disabled) {
472
- if (this.panelOpen) {
473
- this.handleOpenKeydown(event);
474
- }
475
- else {
476
- this.handleClosedKeydown(event);
477
- }
478
- }
479
- }
480
- onFocus() {
481
- if (!this.disabled) {
482
- this._focused = true;
483
- this.stateChanges.next();
484
- }
485
- }
486
- /**
487
- * Calls the touched callback only if the panel is closed. Otherwise, the trigger will
488
- * "blur" to the panel when it opens, causing a false positive.
489
- */
490
- onBlur() {
491
- this._focused = false;
492
- if (!this.disabled && !this.panelOpen) {
493
- this.onTouched();
494
- this.changeDetectorRef.markForCheck();
495
- this.stateChanges.next();
496
- }
497
- }
498
- /** Callback that is invoked when the overlay panel has been attached. */
499
- onAttached() {
500
- this.overlayDir.positionChange
501
- .pipe(take(1))
502
- .subscribe(() => {
503
- this.changeDetectorRef.detectChanges();
504
- this.calculateOverlayOffsetX();
505
- this.panel.nativeElement.scrollTop = this.scrollTop;
506
- this.tree.updateScrollSize();
507
- });
508
- this.closeSubscription = this.closingActions()
509
- .subscribe(() => this.close());
510
- }
511
- /** Returns the theme to be used on the panel. */
512
- getPanelTheme() {
513
- return this.parentFormField ? `mc-${this.parentFormField.color}` : '';
514
- }
515
- focus() {
516
- this.elementRef.nativeElement.focus();
517
- }
518
- /**
519
- * Implemented as part of McFormFieldControl.
520
- * @docs-private
521
- */
522
- onContainerClick() {
523
- this.focus();
524
- }
525
- /** Invoked when an option is clicked. */
526
- onRemoveSelectedOption(selectedOption, $event) {
527
- $event.stopPropagation();
528
- this.selectionModel
529
- .deselect(this.selected.find((value) => this.tree.treeControl.getValue(value) === selectedOption.value));
530
- this.onChange(this.selectedValues);
531
- }
532
- calculateHiddenItems() {
533
- if (this.customTrigger || this.empty || !this.multiple) {
534
- return;
535
- }
536
- let visibleItems = 0;
537
- const totalItemsWidth = this.getTotalItemsWidthInMatcher();
538
- let totalVisibleItemsWidth = 0;
539
- this.tags.forEach((tag) => {
540
- if (tag.nativeElement.offsetTop < tag.nativeElement.offsetHeight) {
541
- totalVisibleItemsWidth += this.getItemWidth(tag.nativeElement);
542
- visibleItems++;
543
- }
544
- });
545
- this.hiddenItems = this.selectionModel.selected.length - visibleItems;
546
- if (this.hiddenItems) {
547
- const itemsCounter = this.trigger.nativeElement.querySelector('.mc-tree-select__match-hidden-text');
548
- const matcherList = this.trigger.nativeElement.querySelector('.mc-tree-select__match-list');
549
- const itemsCounterShowed = itemsCounter.offsetTop < itemsCounter.offsetHeight;
550
- // const itemsCounterWidth: number = itemsCounter.getBoundingClientRect().width;
551
- const itemsCounterWidth = 86;
552
- const matcherListWidth = matcherList.getBoundingClientRect().width;
553
- const matcherWidth = matcherListWidth + itemsCounterWidth;
554
- if (itemsCounterShowed && (totalItemsWidth < matcherWidth)) {
555
- this.hiddenItems = 0;
556
- }
557
- if (totalVisibleItemsWidth === matcherListWidth ||
558
- (totalVisibleItemsWidth + itemsCounterWidth) < matcherListWidth) {
559
- this.changeDetectorRef.markForCheck();
560
- return;
561
- }
562
- else if (!itemsCounterShowed && (totalItemsWidth + itemsCounterWidth) > matcherWidth) {
563
- this.hiddenItems++;
564
- }
565
- }
566
- this.changeDetectorRef.markForCheck();
567
- }
568
- closingActions() {
569
- const backdrop = this.overlayDir.overlayRef.backdropClick();
570
- const outsidePointerEvents = this.overlayDir.overlayRef.outsidePointerEvents();
571
- const detachments = this.overlayDir.overlayRef.detachments();
572
- return merge(backdrop, outsidePointerEvents, detachments);
573
- }
574
- getTotalItemsWidthInMatcher() {
575
- const triggerClone = this.trigger.nativeElement.cloneNode(true);
576
- triggerClone.querySelector('.mc-tree-select__match-hidden-text').remove();
577
- this.renderer.setStyle(triggerClone, 'position', 'absolute');
578
- this.renderer.setStyle(triggerClone, 'visibility', 'hidden');
579
- this.renderer.setStyle(triggerClone, 'top', '-100%');
580
- this.renderer.setStyle(triggerClone, 'left', '0');
581
- this.renderer.appendChild(this.trigger.nativeElement, triggerClone);
582
- let totalItemsWidth = 0;
583
- triggerClone.querySelectorAll('mc-tag').forEach((item) => {
584
- totalItemsWidth += this.getItemWidth(item);
585
- });
586
- triggerClone.remove();
587
- return totalItemsWidth;
588
- }
589
- getItemWidth(element) {
590
- const computedStyle = window.getComputedStyle(element);
591
- const width = parseInt(computedStyle.width);
592
- const marginLeft = parseInt(computedStyle.marginLeft);
593
- const marginRight = parseInt(computedStyle.marginRight);
594
- return width + marginLeft + marginRight;
595
- }
596
- handleClosedKeydown(event) {
597
- // tslint:disable-next-line: deprecation
598
- const keyCode = event.keyCode;
599
- const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW ||
600
- keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;
601
- const isOpenKey = keyCode === ENTER || keyCode === SPACE;
602
- // Open the select on ALT + arrow key to match the native <select>
603
- if (isOpenKey || ((this.multiple || event.altKey) && isArrowKey)) {
604
- // prevents the page from scrolling down when pressing space
605
- event.preventDefault();
606
- this.open();
607
- }
608
- else if (!this.multiple && this.tree.keyManager && this.tree.keyManager.onKeydown) {
609
- this.tree.keyManager.onKeydown(event);
610
- }
611
- }
612
- handleOpenKeydown(event) {
613
- /* tslint:disable-next-line */
614
- const keyCode = event.keyCode;
615
- const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;
616
- if (isArrowKey && event.altKey) {
617
- // Close the select on ALT + arrow key to match the native <select>
618
- event.preventDefault();
619
- this.close();
620
- }
621
- else if (keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW) {
622
- return this.originalOnKeyDown.call(this.tree, event);
623
- }
624
- else if (keyCode === HOME) {
625
- event.preventDefault();
626
- this.tree.keyManager.setFirstItemActive();
627
- }
628
- else if (keyCode === END) {
629
- event.preventDefault();
630
- this.tree.keyManager.setLastItemActive();
631
- }
632
- else if (keyCode === PAGE_UP) {
633
- event.preventDefault();
634
- this.tree.keyManager.setPreviousPageItemActive();
635
- }
636
- else if (keyCode === PAGE_DOWN) {
637
- event.preventDefault();
638
- this.tree.keyManager.setNextPageItemActive();
639
- }
640
- else if ((keyCode === ENTER || keyCode === SPACE) && this.tree.keyManager.activeItem) {
641
- event.preventDefault();
642
- if (!this.autoSelect) {
643
- this.selectionModel.toggle(this.tree.keyManager.activeItem.data);
644
- }
645
- else {
646
- this.close();
647
- }
648
- }
649
- else if (this.multiple && keyCode === A && event.ctrlKey) {
650
- event.preventDefault();
651
- const hasDeselectedOptions = this.options.some((option) => !option.selected);
652
- this.options.forEach((option) => {
653
- if (hasDeselectedOptions && !option.disabled) {
654
- option.select();
655
- }
656
- else {
657
- option.deselect();
658
- }
659
- });
660
- }
661
- else {
662
- const previouslyFocusedIndex = this.tree.keyManager.activeItemIndex;
663
- this.tree.keyManager.setFocusOrigin('keyboard');
664
- this.tree.keyManager.onKeydown(event);
665
- if (this.multiple && isArrowKey && event.shiftKey && this.tree.keyManager.activeItem &&
666
- this.tree.keyManager.activeItemIndex !== previouslyFocusedIndex) {
667
- this.tree.keyManager.activeItem.selectViaInteraction(event);
668
- }
669
- if (this.autoSelect && this.tree.keyManager.activeItem) {
670
- this.tree.setSelectedOptionsByKey(this.tree.keyManager.activeItem, hasModifierKey(event, 'shiftKey'), hasModifierKey(event, 'ctrlKey'));
671
- }
672
- if (this.search) {
673
- this.search.focus();
674
- }
675
- }
676
- }
677
- initializeSelection() {
678
- // Defer setting the value in order to avoid the "Expression
679
- // has changed after it was checked" errors from Angular.
680
- Promise.resolve().then(() => {
681
- this.setSelectionByValue(this.ngControl ? this.ngControl.value : this._value);
682
- });
683
- }
684
- /**
685
- * Sets the selected option based on a value. If no option can be
686
- * found with the designated value, the select trigger is cleared.
687
- */
688
- setSelectionByValue(value) {
689
- if (this.multiple && value) {
690
- if (!Array.isArray(value)) {
691
- throw getMcSelectNonArrayValueError();
692
- }
693
- this.tree.setOptionsFromValues(value);
694
- this.sortValues();
695
- }
696
- else {
697
- this.tree.setOptionsFromValues([value]);
698
- }
699
- this.changeDetectorRef.detectChanges();
700
- }
701
- initKeyManager() {
702
- this.originalOnKeyDown = this.tree.onKeyDown;
703
- this.tree.onKeyDown = () => { };
704
- this.tree.keyManager.tabOut
705
- .pipe(takeUntil(this.destroy))
706
- .subscribe(() => {
707
- // Restore focus to the trigger before closing. Ensures that the focus
708
- // position won't be lost if the user got focus into the overlay.
709
- this.focus();
710
- this.close();
711
- });
712
- this.tree.keyManager.change
713
- .pipe(takeUntil(this.destroy))
714
- .subscribe(() => {
715
- if (this._panelOpen && this.panel) {
716
- this.scrollActiveOptionIntoView();
717
- }
718
- else if (!this._panelOpen && !this.multiple && this.tree.keyManager.activeItem) {
719
- this.tree.keyManager.activeItem.selectViaInteraction();
720
- }
721
- });
722
- }
723
- /** Sorts the selected values in the selected based on their order in the panel. */
724
- sortValues() {
725
- if (this.multiple) {
726
- const options = this.options.toArray();
727
- this.selectionModel.sort((a, b) => {
728
- return this.sortComparator ? this.sortComparator(a, b, options) :
729
- options.indexOf(a) - options.indexOf(b);
730
- });
731
- this.stateChanges.next();
732
- }
733
- }
734
- /**
735
- * Highlights the selected item. If no option is selected, it will highlight
736
- * the first item instead.
737
- */
738
- highlightCorrectOption() {
739
- if (this.empty || !this.tree.keyManager) {
740
- return;
741
- }
742
- const firstSelectedValue = this.multiple ? this.selectedValues[0] : this.selectedValues;
743
- const selectedOption = this.options.find((option) => option.value === firstSelectedValue);
744
- if (selectedOption) {
745
- this.tree.keyManager.setFocusOrigin('keyboard');
746
- this.tree.keyManager.setActiveItem(selectedOption);
747
- }
748
- }
749
- /** Scrolls the active option into view. */
750
- scrollActiveOptionIntoView() {
751
- var _a;
752
- (_a = this.tree.keyManager.activeItem) === null || _a === void 0 ? void 0 : _a.focus();
753
- }
754
- /**
755
- * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.
756
- * This must be adjusted to align the selected option text over the trigger text when
757
- * the panel opens. Will change based on LTR or RTL text direction. Note that the offset
758
- * can't be calculated until the panel has been attached, because we need to know the
759
- * content width in order to constrain the panel within the viewport.
760
- */
761
- calculateOverlayOffsetX() {
762
- const overlayRect = this.overlayDir.overlayRef.overlayElement.getBoundingClientRect();
763
- const viewportSize = this.viewportRuler.getViewportSize();
764
- const isRtl = this.isRtl();
765
- /* tslint:disable-next-line:no-magic-numbers */
766
- const paddingWidth = SELECT_PANEL_PADDING_X * 2;
767
- let offsetX = SELECT_PANEL_PADDING_X;
768
- // Invert the offset in LTR.
769
- if (!isRtl) {
770
- offsetX *= -1;
771
- }
772
- // Determine how much the select overflows on each side.
773
- const leftOverflow = 0 - (overlayRect.left + offsetX - (isRtl ? paddingWidth : 0));
774
- const rightOverflow = overlayRect.right + offsetX - viewportSize.width
775
- + (isRtl ? 0 : paddingWidth);
776
- // If the element overflows on either side, reduce the offset to allow it to fit.
777
- if (leftOverflow > 0) {
778
- offsetX += leftOverflow + SELECT_PANEL_VIEWPORT_PADDING;
779
- }
780
- else if (rightOverflow > 0) {
781
- offsetX -= rightOverflow + SELECT_PANEL_VIEWPORT_PADDING;
782
- }
783
- // Set the offset directly in order to avoid having to go through change detection and
784
- // potentially triggering "changed after it was checked" errors. Round the value to avoid
785
- // blurry content in some browsers.
786
- this.overlayDir.offsetX = Math.round(offsetX);
787
- this.overlayDir.overlayRef.updatePosition();
788
- }
789
- updateIsEmptySearchResult() {
790
- var _a;
791
- if (this.search) {
792
- (_a = this.search.input.ngControl.valueChanges) === null || _a === void 0 ? void 0 : _a.subscribe((value) => {
793
- this.isEmptySearchResult = !!value && this.tree.isEmpty;
794
- this.changeDetectorRef.markForCheck();
795
- });
796
- }
797
- }
798
- }
799
- /** @nocollapse */ /** @nocollapse */ McTreeSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTreeSelect, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ViewportRuler }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i2.ErrorStateMatcher }, { token: MC_SELECT_SCROLL_STRATEGY }, { token: NG_VALIDATORS, optional: true }, { token: MC_VALIDATION, optional: true }, { token: i3.Directionality, optional: true }, { token: i4.NgForm, optional: true }, { token: i4.FormGroupDirective, optional: true }, { token: i5.McFormField, optional: true }, { token: i4.NgControl, optional: true, self: true }, { token: i4.NgModel, optional: true, self: true }, { token: i4.FormControlName, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
800
- /** @nocollapse */ /** @nocollapse */ McTreeSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.7", type: McTreeSelect, selector: "mc-tree-select", inputs: { disabled: "disabled", tabIndex: "tabIndex", hiddenItemsText: "hiddenItemsText", panelClass: "panelClass", backdropClass: "backdropClass", errorStateMatcher: "errorStateMatcher", sortComparator: "sortComparator", placeholder: "placeholder", required: "required", multiple: "multiple", autoSelect: "autoSelect", compareWith: "compareWith", id: "id", hasBackdrop: "hasBackdrop", hiddenItemsTextFormatter: "hiddenItemsTextFormatter" }, outputs: { openedChange: "openedChange", openedStream: "opened", closedStream: "closed", selectionChange: "selectionChange", valueChange: "valueChange" }, host: { listeners: { "click": "toggle()", "keydown": "handleKeydown($event)", "focus": "onFocus()", "blur": "onBlur()", "window:resize": "calculateHiddenItems()" }, properties: { "class.mc-disabled": "disabled", "class.mc-invalid": "errorState", "attr.id": "id", "attr.tabindex": "tabIndex", "attr.disabled": "disabled || null" }, classAttribute: "mc-tree-select" }, providers: [
801
- { provide: McFormFieldControl, useExisting: McTreeSelect },
802
- { provide: McTree, useExisting: McTreeSelect }
803
- ], queries: [{ propertyName: "cleaner", first: true, predicate: ["mcSelectCleaner"], descendants: true, static: true }, { propertyName: "customTrigger", first: true, predicate: McTreeSelectTrigger, descendants: true }, { propertyName: "tree", first: true, predicate: McTreeSelection, descendants: true }, { propertyName: "search", first: true, predicate: McSelectSearch, descendants: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "panel", first: true, predicate: ["panel"], descendants: true }, { propertyName: "overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "hiddenItemsCounter", first: true, predicate: ["hiddenItemsCounter"], descendants: true }, { propertyName: "tags", predicate: McTag, descendants: true }], exportAs: ["mcTreeSelect"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div cdk-overlay-origin\r\n class=\"mc-tree-select__trigger\"\r\n [class.mc-tree-select__trigger_multiple]=\"multiple\"\r\n #origin=\"cdkOverlayOrigin\"\r\n #trigger>\r\n <div class=\"mc-tree-select__matcher\" [ngSwitch]=\"empty\">\r\n <span class=\"mc-tree-select__placeholder\" *ngSwitchCase=\"true\">{{ placeholder || '\\u00A0' }}</span>\r\n <span *ngSwitchCase=\"false\" [ngSwitch]=\"!!customTrigger\">\r\n <div *ngSwitchDefault [ngSwitch]=\"multiple\" class=\"mc-tree-select__match-container\">\r\n <span *ngSwitchCase=\"false\" class=\"mc-tree-select__matcher-text\">{{ triggerValue }}</span>\r\n <div *ngSwitchCase=\"true\" class=\"mc-tree-select__multiple-matcher\">\r\n <div class=\"mc-tree-select__match-list\">\r\n <mc-tag *ngFor=\"let option of triggerValues\"\r\n [selectable]=\"false\"\r\n [disabled]=\"option.disabled || disabled\"\r\n [class.mc-error]=\"errorState\">\r\n\r\n {{ option.viewValue }}\r\n <i mc-icon=\"mc-close-S_16\"\r\n *ngIf=\"!option.disabled && !disabled\"\r\n (click)=\"onRemoveSelectedOption(option, $event)\">\r\n </i>\r\n </mc-tag>\r\n </div>\r\n <div class=\"mc-tree-select__match-hidden-text\"\r\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\r\n #hiddenItemsCounter>\r\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\r\n </div>\r\n </div>\r\n </div>\r\n <ng-content select=\"mc-tree-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-tree-select__arrow-wrapper\">\r\n <i class=\"mc-tree-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\r\n <div #panel\r\n class=\"mc-tree-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 *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\r\n <div #optionsContainer\r\n class=\"mc-tree-select__content\"\r\n [@fadeInContent]=\"'showing'\"\r\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\">\r\n <ng-content select=\"mc-tree-selection\"></ng-content>\r\n </div>\r\n\r\n <ng-content select=\"[mc-tree-selection-footer]\"></ng-content>\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-tree-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.mc-tree-select.mc-disabled .mc-tree-select__trigger{-webkit-user-select:none;user-select:none;cursor:default}.mc-tree-select__trigger{display:flex;box-sizing:border-box;position:relative;height:var(--mc-form-field-size-height, 32px);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-tree-select__trigger.mc-tree-select__trigger_multiple{padding-left:calc(var(--mc-select-size-left-padding-multiple, 12px) - var(--mc-form-field-size-border-width, 1px))}.mc-tree-select__trigger.mc-tree-select__trigger_multiple .mc-tree-select__placeholder{margin-left:8px}.mc-tree-select__trigger.mc-tree-select__trigger_multiple .mc-tag.mc-disabled .mc-tag__text{margin-right:7px}.mc-tree-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mc-tree-select__matcher>span{width:100%}.mc-tree-select__multiple-matcher{display:flex;width:100%}.mc-tree-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-tree-select__match-list .mc-tag{margin-right:4px}.mc-tree-select__match-container{display:flex;flex-direction:row;justify-content:space-between;width:100%}.mc-tree-select__match-container .mc-tree-select__match-hidden-text{flex:0 0 70px;align-self:center;padding:0 8px;text-align:right}.mc-tree-select__match-item{display:flex;border:1px solid transparent;border-radius:3px;padding-left:7px;margin-right:4px;max-width:100%}.mc-tree-select__arrow-wrapper{align-self:center}.mc-form-field-appearance-fill .mc-tree-select__arrow-wrapper,.mc-form-field-appearance-standard .mc-tree-select__arrow-wrapper{transform:translateY(-50%)}.mc-form-field-appearance-outline .mc-tree-select__arrow-wrapper{transform:translateY(-25%)}.mc-tree-select__panel{min-width:100%;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-tree-select__panel .mc-optgroup-label,.mc-tree-select__panel .mc-tree-select-option{font-size:inherit;line-height:var(--mc-option-size-height, 32px);height:var(--mc-option-size-height, 32px)}.mc-tree-select__content{max-height:var(--mc-select-panel-size-max-height, 232px);overflow:auto}.mc-tree-select__content .mc-tree-selection{height:100%}.mc-form-field-type-select:not(.mc-disabled) .mc-form-field-flex{cursor:pointer}.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__search-container{border-bottom-width:1px;border-bottom-style:solid}\n"], components: [{ type: i6.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: i7.McIcon, selector: "[mc-icon]", inputs: ["color"] }], directives: [{ type: i1.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: i7.McIconCSSStyler, selector: "[mc-icon]" }, { type: i1.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: [
804
- mcSelectAnimations.transformPanel,
805
- mcSelectAnimations.fadeInContent
806
- ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
807
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTreeSelect, decorators: [{
808
- type: Component,
809
- args: [{ selector: 'mc-tree-select', exportAs: 'mcTreeSelect', inputs: ['disabled', 'tabIndex'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
810
- class: 'mc-tree-select',
811
- '[class.mc-disabled]': 'disabled',
812
- '[class.mc-invalid]': 'errorState',
813
- '[attr.id]': 'id',
814
- '[attr.tabindex]': 'tabIndex',
815
- '[attr.disabled]': 'disabled || null',
816
- '(click)': 'toggle()',
817
- '(keydown)': 'handleKeydown($event)',
818
- '(focus)': 'onFocus()',
819
- '(blur)': 'onBlur()',
820
- '(window:resize)': 'calculateHiddenItems()'
821
- }, animations: [
822
- mcSelectAnimations.transformPanel,
823
- mcSelectAnimations.fadeInContent
824
- ], providers: [
825
- { provide: McFormFieldControl, useExisting: McTreeSelect },
826
- { provide: McTree, useExisting: McTreeSelect }
827
- ], template: "<div cdk-overlay-origin\r\n class=\"mc-tree-select__trigger\"\r\n [class.mc-tree-select__trigger_multiple]=\"multiple\"\r\n #origin=\"cdkOverlayOrigin\"\r\n #trigger>\r\n <div class=\"mc-tree-select__matcher\" [ngSwitch]=\"empty\">\r\n <span class=\"mc-tree-select__placeholder\" *ngSwitchCase=\"true\">{{ placeholder || '\\u00A0' }}</span>\r\n <span *ngSwitchCase=\"false\" [ngSwitch]=\"!!customTrigger\">\r\n <div *ngSwitchDefault [ngSwitch]=\"multiple\" class=\"mc-tree-select__match-container\">\r\n <span *ngSwitchCase=\"false\" class=\"mc-tree-select__matcher-text\">{{ triggerValue }}</span>\r\n <div *ngSwitchCase=\"true\" class=\"mc-tree-select__multiple-matcher\">\r\n <div class=\"mc-tree-select__match-list\">\r\n <mc-tag *ngFor=\"let option of triggerValues\"\r\n [selectable]=\"false\"\r\n [disabled]=\"option.disabled || disabled\"\r\n [class.mc-error]=\"errorState\">\r\n\r\n {{ option.viewValue }}\r\n <i mc-icon=\"mc-close-S_16\"\r\n *ngIf=\"!option.disabled && !disabled\"\r\n (click)=\"onRemoveSelectedOption(option, $event)\">\r\n </i>\r\n </mc-tag>\r\n </div>\r\n <div class=\"mc-tree-select__match-hidden-text\"\r\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\r\n #hiddenItemsCounter>\r\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\r\n </div>\r\n </div>\r\n </div>\r\n <ng-content select=\"mc-tree-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-tree-select__arrow-wrapper\">\r\n <i class=\"mc-tree-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\r\n <div #panel\r\n class=\"mc-tree-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 *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\r\n <div #optionsContainer\r\n class=\"mc-tree-select__content\"\r\n [@fadeInContent]=\"'showing'\"\r\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\">\r\n <ng-content select=\"mc-tree-selection\"></ng-content>\r\n </div>\r\n\r\n <ng-content select=\"[mc-tree-selection-footer]\"></ng-content>\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-tree-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.mc-tree-select.mc-disabled .mc-tree-select__trigger{-webkit-user-select:none;user-select:none;cursor:default}.mc-tree-select__trigger{display:flex;box-sizing:border-box;position:relative;height:var(--mc-form-field-size-height, 32px);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-tree-select__trigger.mc-tree-select__trigger_multiple{padding-left:calc(var(--mc-select-size-left-padding-multiple, 12px) - var(--mc-form-field-size-border-width, 1px))}.mc-tree-select__trigger.mc-tree-select__trigger_multiple .mc-tree-select__placeholder{margin-left:8px}.mc-tree-select__trigger.mc-tree-select__trigger_multiple .mc-tag.mc-disabled .mc-tag__text{margin-right:7px}.mc-tree-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mc-tree-select__matcher>span{width:100%}.mc-tree-select__multiple-matcher{display:flex;width:100%}.mc-tree-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-tree-select__match-list .mc-tag{margin-right:4px}.mc-tree-select__match-container{display:flex;flex-direction:row;justify-content:space-between;width:100%}.mc-tree-select__match-container .mc-tree-select__match-hidden-text{flex:0 0 70px;align-self:center;padding:0 8px;text-align:right}.mc-tree-select__match-item{display:flex;border:1px solid transparent;border-radius:3px;padding-left:7px;margin-right:4px;max-width:100%}.mc-tree-select__arrow-wrapper{align-self:center}.mc-form-field-appearance-fill .mc-tree-select__arrow-wrapper,.mc-form-field-appearance-standard .mc-tree-select__arrow-wrapper{transform:translateY(-50%)}.mc-form-field-appearance-outline .mc-tree-select__arrow-wrapper{transform:translateY(-25%)}.mc-tree-select__panel{min-width:100%;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-tree-select__panel .mc-optgroup-label,.mc-tree-select__panel .mc-tree-select-option{font-size:inherit;line-height:var(--mc-option-size-height, 32px);height:var(--mc-option-size-height, 32px)}.mc-tree-select__content{max-height:var(--mc-select-panel-size-max-height, 232px);overflow:auto}.mc-tree-select__content .mc-tree-selection{height:100%}.mc-form-field-type-select:not(.mc-disabled) .mc-form-field-flex{cursor:pointer}.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__search-container{border-bottom-width:1px;border-bottom-style:solid}\n"] }]
828
- }], ctorParameters: function () {
829
- return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ViewportRuler }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i2.ErrorStateMatcher }, { type: undefined, decorators: [{
830
- type: Inject,
831
- args: [MC_SELECT_SCROLL_STRATEGY]
832
- }] }, { type: undefined, decorators: [{
833
- type: Optional
834
- }, {
835
- type: Inject,
836
- args: [NG_VALIDATORS]
837
- }] }, { type: undefined, decorators: [{
838
- type: Optional
839
- }, {
840
- type: Inject,
841
- args: [MC_VALIDATION]
842
- }] }, { type: i3.Directionality, decorators: [{
843
- type: Optional
844
- }] }, { type: i4.NgForm, decorators: [{
845
- type: Optional
846
- }] }, { type: i4.FormGroupDirective, decorators: [{
847
- type: Optional
848
- }] }, { type: i5.McFormField, decorators: [{
849
- type: Optional
850
- }] }, { type: i4.NgControl, decorators: [{
851
- type: Optional
852
- }, {
853
- type: Self
854
- }] }, { type: i4.NgModel, decorators: [{
855
- type: Optional
856
- }, {
857
- type: Self
858
- }] }, { type: i4.FormControlName, decorators: [{
859
- type: Optional
860
- }, {
861
- type: Self
862
- }] }];
863
- }, propDecorators: { trigger: [{
864
- type: ViewChild,
865
- args: ['trigger', { static: false }]
866
- }], panel: [{
867
- type: ViewChild,
868
- args: ['panel', { static: false }]
869
- }], overlayDir: [{
870
- type: ViewChild,
871
- args: [CdkConnectedOverlay, { static: false }]
872
- }], hiddenItemsCounter: [{
873
- type: ViewChild,
874
- args: ['hiddenItemsCounter', { static: false }]
875
- }], tags: [{
876
- type: ViewChildren,
877
- args: [McTag]
878
- }], cleaner: [{
879
- type: ContentChild,
880
- args: ['mcSelectCleaner', { static: true }]
881
- }], customTrigger: [{
882
- type: ContentChild,
883
- args: [McTreeSelectTrigger, { static: false }]
884
- }], tree: [{
885
- type: ContentChild,
886
- args: [McTreeSelection, { static: false }]
887
- }], search: [{
888
- type: ContentChild,
889
- args: [McSelectSearch, { static: false }]
890
- }], hiddenItemsText: [{
891
- type: Input
892
- }], openedChange: [{
893
- type: Output
894
- }], openedStream: [{
895
- type: Output,
896
- args: ['opened']
897
- }], closedStream: [{
898
- type: Output,
899
- args: ['closed']
900
- }], selectionChange: [{
901
- type: Output
902
- }], valueChange: [{
903
- type: Output
904
- }], panelClass: [{
905
- type: Input
906
- }], backdropClass: [{
907
- type: Input
908
- }], errorStateMatcher: [{
909
- type: Input
910
- }], sortComparator: [{
911
- type: Input
912
- }], placeholder: [{
913
- type: Input
914
- }], required: [{
915
- type: Input
916
- }], multiple: [{
917
- type: Input
918
- }], autoSelect: [{
919
- type: Input
920
- }], compareWith: [{
921
- type: Input
922
- }], id: [{
923
- type: Input
924
- }], hasBackdrop: [{
925
- type: Input
926
- }], hiddenItemsTextFormatter: [{
927
- type: Input
26
+ let nextUniqueId = 0;
27
+ /** Change event object that is emitted when the select value has changed. */
28
+ class McTreeSelectChange {
29
+ constructor(source, value, isUserInput = false) {
30
+ this.source = source;
31
+ this.value = value;
32
+ this.isUserInput = isUserInput;
33
+ }
34
+ }
35
+ class McTreeSelectTrigger {
36
+ }
37
+ /** @nocollapse */ /** @nocollapse */ McTreeSelectTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTreeSelectTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
38
+ /** @nocollapse */ /** @nocollapse */ McTreeSelectTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: McTreeSelectTrigger, selector: "mc-tree-select-trigger", ngImport: i0 });
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTreeSelectTrigger, decorators: [{
40
+ type: Directive,
41
+ args: [{ selector: 'mc-tree-select-trigger' }]
42
+ }] });
43
+ class McTreeSelectFooter {
44
+ }
45
+ /** @nocollapse */ /** @nocollapse */ McTreeSelectFooter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTreeSelectFooter, deps: [], target: i0.ɵɵFactoryTarget.Directive });
46
+ /** @nocollapse */ /** @nocollapse */ McTreeSelectFooter.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: McTreeSelectFooter, selector: "mc-tree-select-footer", ngImport: i0 });
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTreeSelectFooter, decorators: [{
48
+ type: Directive,
49
+ args: [{ selector: 'mc-tree-select-footer' }]
50
+ }] });
51
+ class McTreeSelectBase {
52
+ constructor(elementRef, defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl) {
53
+ this.elementRef = elementRef;
54
+ this.defaultErrorStateMatcher = defaultErrorStateMatcher;
55
+ this.parentForm = parentForm;
56
+ this.parentFormGroup = parentFormGroup;
57
+ this.ngControl = ngControl;
58
+ }
59
+ }
60
+ // tslint:disable-next-line:naming-convention
61
+ const McTreeSelectMixinBase = mixinTabIndex(mixinDisabled(mixinErrorState(McTreeSelectBase)));
62
+ class McTreeSelect extends McTreeSelectMixinBase {
63
+ constructor(elementRef, changeDetectorRef, viewportRuler, ngZone, renderer, defaultErrorStateMatcher, scrollStrategyFactory, rawValidators, mcValidation, dir, parentForm, parentFormGroup, parentFormField, ngControl, ngModel, formControlName) {
64
+ super(elementRef, defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);
65
+ this.changeDetectorRef = changeDetectorRef;
66
+ this.viewportRuler = viewportRuler;
67
+ this.ngZone = ngZone;
68
+ this.renderer = renderer;
69
+ this.scrollStrategyFactory = scrollStrategyFactory;
70
+ this.rawValidators = rawValidators;
71
+ this.mcValidation = mcValidation;
72
+ this.dir = dir;
73
+ this.parentFormField = parentFormField;
74
+ this.ngModel = ngModel;
75
+ this.formControlName = formControlName;
76
+ /** A name for this control that can be used by `mc-form-field`. */
77
+ this.controlType = 'select';
78
+ this.hiddenItems = 0;
79
+ /** The cached font-size of the trigger element. */
80
+ this.triggerFontSize = 0;
81
+ /** The value of the select panel's transform-origin property. */
82
+ this.transformOrigin = 'top';
83
+ /** Emits when the panel element is finished transforming in. */
84
+ this.panelDoneAnimatingStream = new Subject();
85
+ /** Strategy that will be used to handle scrolling while the select panel is open. */
86
+ this.scrollStrategy = this.scrollStrategyFactory();
87
+ /**
88
+ * The y-offset of the overlay panel in relation to the trigger's top start corner.
89
+ * This must be adjusted to align the selected option text over the trigger text.
90
+ * when the panel opens. Will change based on the y-position of the selected option.
91
+ */
92
+ this.offsetY = 0;
93
+ /**
94
+ * This position config ensures that the top "start" corner of the overlay
95
+ * is aligned with with the top "start" of the origin by default (overlapping
96
+ * the trigger completely). If the panel cannot fit below the trigger, it
97
+ * will fall back to a position above the trigger.
98
+ */
99
+ this.positions = [
100
+ {
101
+ originX: 'start',
102
+ originY: 'bottom',
103
+ overlayX: 'start',
104
+ overlayY: 'top'
105
+ },
106
+ {
107
+ originX: 'start',
108
+ originY: 'top',
109
+ overlayX: 'start',
110
+ overlayY: 'bottom'
111
+ }
112
+ ];
113
+ this.hiddenItemsText = '...ещё';
114
+ /** Event emitted when the select panel has been toggled. */
115
+ this.openedChange = new EventEmitter();
116
+ /** Event emitted when the select has been opened. */
117
+ this.openedStream = this.openedChange.pipe(filter((o) => o), map(() => { }));
118
+ /** Event emitted when the select has been closed. */
119
+ this.closedStream = this.openedChange.pipe(filter((o) => !o), map(() => { }));
120
+ /** Event emitted when the selected value has been changed by the user. */
121
+ this.selectionChange = new EventEmitter();
122
+ /**
123
+ * Event that emits whenever the raw value of the select changes. This is here primarily
124
+ * to facilitate the two-way binding for the `value` input.
125
+ * @docs-private
126
+ */
127
+ this.valueChange = new EventEmitter();
128
+ this.backdropClass = 'cdk-overlay-transparent-backdrop';
129
+ /** Combined stream of all of the child options' change events. */
130
+ this.optionSelectionChanges = defer(() => {
131
+ if (this.options) {
132
+ return this.options.changes.pipe(startWith(this.options), switchMap(() => merge(...this.options.map((option) => option.onSelectionChange))));
133
+ }
134
+ return this.ngZone.onStable
135
+ .asObservable()
136
+ .pipe(take(1), switchMap(() => this.optionSelectionChanges));
137
+ });
138
+ this._required = false;
139
+ this._multiple = false;
140
+ this._autoSelect = true;
141
+ this._value = null;
142
+ this._hasBackdrop = false;
143
+ this._disabled = false;
144
+ this._focused = false;
145
+ this.triggerValues = [];
146
+ this.closeSubscription = Subscription.EMPTY;
147
+ this._panelOpen = false;
148
+ /** The scroll position of the overlay panel, calculated to center the selected option. */
149
+ this.scrollTop = 0;
150
+ /** Unique id for this input. */
151
+ this.uid = `mc-select-${nextUniqueId++}`;
152
+ /** Emits whenever the component is destroyed. */
153
+ this.destroy = new Subject();
154
+ /** `View -> model callback called when value changes` */
155
+ this.onChange = () => { };
156
+ /** `View -> model callback called when select has been touched` */
157
+ this.onTouched = () => { };
158
+ /** Comparison function to specify which option is displayed. Defaults to object equality. */
159
+ this._compareWith = (o1, o2) => o1 === o2;
160
+ if (this.ngControl) {
161
+ // Note: we provide the value accessor through here, instead of
162
+ // the `providers` to avoid running into a circular import.
163
+ this.ngControl.valueAccessor = this;
164
+ }
165
+ // Force setter to be called in case id was not specified.
166
+ this.id = this.id;
167
+ }
168
+ get placeholder() {
169
+ return this._placeholder;
170
+ }
171
+ set placeholder(value) {
172
+ this._placeholder = value;
173
+ this.stateChanges.next();
174
+ }
175
+ get required() {
176
+ return this._required;
177
+ }
178
+ set required(value) {
179
+ this._required = coerceBooleanProperty(value);
180
+ this.stateChanges.next();
181
+ }
182
+ get multiple() {
183
+ return this._multiple;
184
+ }
185
+ set multiple(value) {
186
+ if (this.selectionModel) {
187
+ throw getMcSelectDynamicMultipleError();
188
+ }
189
+ this._multiple = coerceBooleanProperty(value);
190
+ }
191
+ get autoSelect() {
192
+ if (this.multiple) {
193
+ return false;
194
+ }
195
+ return this._autoSelect;
196
+ }
197
+ set autoSelect(value) {
198
+ this._autoSelect = coerceBooleanProperty(value);
199
+ }
200
+ /**
201
+ * Function to compare the option values with the selected values. The first argument
202
+ * is a value from an option. The second is a value from the selection. A boolean
203
+ * should be returned.
204
+ */
205
+ get compareWith() {
206
+ return this._compareWith;
207
+ }
208
+ set compareWith(fn) {
209
+ /* tslint:disable-next-line:strict-type-predicates */
210
+ if (typeof fn !== 'function') {
211
+ throw getMcSelectNonFunctionValueError();
212
+ }
213
+ this._compareWith = fn;
214
+ if (this.selectionModel) {
215
+ // A different comparator means the selection could change.
216
+ this.initializeSelection();
217
+ }
218
+ }
219
+ get value() {
220
+ return this.tree.getSelectedValues();
221
+ }
222
+ get id() {
223
+ return this._id;
224
+ }
225
+ set id(value) {
226
+ this._id = value || this.uid;
227
+ this.stateChanges.next();
228
+ }
229
+ get hasBackdrop() {
230
+ return this._hasBackdrop;
231
+ }
232
+ set hasBackdrop(value) {
233
+ this._hasBackdrop = coerceBooleanProperty(value);
234
+ }
235
+ get disabled() {
236
+ return this._disabled;
237
+ }
238
+ set disabled(value) {
239
+ this._disabled = coerceBooleanProperty(value);
240
+ if (this.parentFormField) {
241
+ this._disabled ? this.parentFormField.stopFocusMonitor() : this.parentFormField.runFocusMonitor();
242
+ }
243
+ }
244
+ /** Whether the select is focused. */
245
+ get focused() {
246
+ return this._focused || this._panelOpen;
247
+ }
248
+ set focused(value) {
249
+ this._focused = value;
250
+ }
251
+ get panelOpen() {
252
+ return this._panelOpen;
253
+ }
254
+ get canShowCleaner() {
255
+ return !this.disabled && this.cleaner && this.selectionModel.hasValue();
256
+ }
257
+ ngOnInit() {
258
+ this.stateChanges.next();
259
+ // We need `distinctUntilChanged` here, because some browsers will
260
+ // fire the animation end event twice for the same animation. See:
261
+ // https://github.com/angular/angular/issues/24084
262
+ this.panelDoneAnimatingStream
263
+ .pipe(distinctUntilChanged(), takeUntil(this.destroy))
264
+ .subscribe(() => {
265
+ if (this.panelOpen) {
266
+ this.scrollTop = 0;
267
+ if (this.search) {
268
+ this.search.focus();
269
+ }
270
+ this.openedChange.emit(true);
271
+ }
272
+ else {
273
+ this.openedChange.emit(false);
274
+ this.overlayDir.offsetX = 0;
275
+ this.changeDetectorRef.markForCheck();
276
+ }
277
+ });
278
+ }
279
+ ngAfterContentInit() {
280
+ if (!this.tree) {
281
+ return;
282
+ }
283
+ if (this.mcValidation.useValidation) {
284
+ setMosaicValidation(this, this.changeDetectorRef);
285
+ }
286
+ this.tree.resetFocusedItemOnBlur = false;
287
+ this.selectionModel = this.tree.selectionModel = new SelectionModel(this.multiple);
288
+ this.selectionModel.changed
289
+ .subscribe(() => {
290
+ this.onChange(this.selectedValues);
291
+ if (this.multiple) {
292
+ this.refreshTriggerValues();
293
+ }
294
+ });
295
+ this.tree.ngAfterContentInit();
296
+ this.initKeyManager();
297
+ this.options = this.tree.renderedOptions;
298
+ this.tree.autoSelect = this.autoSelect;
299
+ if (this.tree.multipleMode === null) {
300
+ this.tree.multipleMode = this.multiple ? MultipleMode.CHECKBOX : null;
301
+ }
302
+ if (this.multiple) {
303
+ this.tree.noUnselectLast = false;
304
+ }
305
+ if (this.tempValues) {
306
+ this.setSelectionByValue(this.tempValues);
307
+ this.tempValues = null;
308
+ }
309
+ this.optionSelectionChanges
310
+ .pipe(takeUntil(this.destroy))
311
+ .subscribe((event) => {
312
+ if (!this.multiple && this.panelOpen && event.isUserInput) {
313
+ this.close();
314
+ }
315
+ });
316
+ this.tree.selectionChange
317
+ .pipe(takeUntil(this.destroy))
318
+ .subscribe((event) => {
319
+ this.onChange(this.selectedValues);
320
+ this.selectionChange.emit(new McTreeSelectChange(this, event.option));
321
+ if (this.search) {
322
+ this.search.focus();
323
+ }
324
+ });
325
+ this.selectionModel.changed
326
+ .pipe(takeUntil(this.destroy))
327
+ .subscribe((event) => {
328
+ if (event.added.length) {
329
+ this.tree.keyManager.setFocusOrigin('program');
330
+ this.tree.keyManager.setActiveItem(this.options.find((option) => option.data === event.added[0]));
331
+ }
332
+ });
333
+ this.updateIsEmptySearchResult();
334
+ }
335
+ ngAfterViewInit() {
336
+ if (!this.tree) {
337
+ return;
338
+ }
339
+ this.tags.changes
340
+ .subscribe(() => {
341
+ setTimeout(() => this.calculateHiddenItems(), 0);
342
+ });
343
+ setTimeout(() => this.calculateHiddenItems(), 0);
344
+ }
345
+ ngDoCheck() {
346
+ if (this.ngControl) {
347
+ this.updateErrorState();
348
+ }
349
+ }
350
+ ngOnChanges(changes) {
351
+ // Updating the disabled state is handled by `mixinDisabled`, but we need to additionally let
352
+ // the parent form field know to run change detection when the disabled state changes.
353
+ if (changes.disabled) {
354
+ this.stateChanges.next();
355
+ }
356
+ }
357
+ ngOnDestroy() {
358
+ this.destroy.next();
359
+ this.destroy.complete();
360
+ this.stateChanges.complete();
361
+ this.closeSubscription.unsubscribe();
362
+ }
363
+ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) {
364
+ return `${hiddenItemsText} ${hiddenItems}`;
365
+ }
366
+ clearValue($event) {
367
+ $event.stopPropagation();
368
+ this.selectionModel.clear();
369
+ this.tree.keyManager.setActiveItem(-1);
370
+ this.setSelectionByValue([]);
371
+ this.onChange(this.selectedValues);
372
+ }
373
+ toggle() {
374
+ if (this.panelOpen) {
375
+ this.close();
376
+ }
377
+ else {
378
+ this.open();
379
+ }
380
+ }
381
+ open() {
382
+ if (this.disabled || !this.options || !this.options.length || this._panelOpen) {
383
+ return;
384
+ }
385
+ this.triggerRect = this.trigger.nativeElement.getBoundingClientRect();
386
+ // Note: The computed font-size will be a string pixel value (e.g. "16px").
387
+ // `parseInt` ignores the trailing 'px' and converts this to a number.
388
+ this.triggerFontSize = parseInt(getComputedStyle(this.trigger.nativeElement)['font-size']);
389
+ this._panelOpen = true;
390
+ setTimeout(() => this.highlightCorrectOption());
391
+ this.changeDetectorRef.markForCheck();
392
+ // Set the font size on the panel element once it exists.
393
+ this.ngZone.onStable.asObservable()
394
+ .pipe(take(1))
395
+ .subscribe(() => {
396
+ if (this.triggerFontSize && this.overlayDir.overlayRef && this.overlayDir.overlayRef.overlayElement) {
397
+ this.overlayDir.overlayRef.overlayElement.style.fontSize = `${this.triggerFontSize}px`;
398
+ }
399
+ });
400
+ }
401
+ /** Closes the overlay panel and focuses the host element. */
402
+ close() {
403
+ if (!this._panelOpen) {
404
+ return;
405
+ }
406
+ this._panelOpen = false;
407
+ this.changeDetectorRef.markForCheck();
408
+ this.onTouched();
409
+ if (this.search) {
410
+ this.search.reset();
411
+ }
412
+ setTimeout(() => this.focus(), 0);
413
+ }
414
+ /**
415
+ * Sets the select's value. Part of the ControlValueAccessor interface
416
+ * required to integrate with Angular's core forms API.
417
+ *
418
+ * @param value New value to be written to the model.
419
+ */
420
+ writeValue(value) {
421
+ if (this.tree) {
422
+ this.setSelectionByValue(value);
423
+ }
424
+ else {
425
+ this.tempValues = value;
426
+ }
427
+ }
428
+ /**
429
+ * Saves a callback function to be invoked when the select's value
430
+ * changes from user input. Part of the ControlValueAccessor interface
431
+ * required to integrate with Angular's core forms API.
432
+ *
433
+ * @param fn Callback to be triggered when the value changes.
434
+ */
435
+ registerOnChange(fn) {
436
+ this.onChange = fn;
437
+ }
438
+ /**
439
+ * Saves a callback function to be invoked when the select is blurred
440
+ * by the user. Part of the ControlValueAccessor interface required
441
+ * to integrate with Angular's core forms API.
442
+ *
443
+ * @param fn Callback to be triggered when the component has been touched.
444
+ */
445
+ registerOnTouched(fn) {
446
+ this.onTouched = fn;
447
+ }
448
+ /**
449
+ * Disables the select. Part of the ControlValueAccessor interface required
450
+ * to integrate with Angular's core forms API.
451
+ *
452
+ * @param isDisabled Sets whether the component is disabled.
453
+ */
454
+ setDisabledState(isDisabled) {
455
+ this.disabled = isDisabled;
456
+ this.changeDetectorRef.markForCheck();
457
+ this.stateChanges.next();
458
+ }
459
+ get selected() {
460
+ return this.multiple ? this.selectionModel.selected : this.selectionModel.selected[0];
461
+ }
462
+ get selectedValues() {
463
+ const selectedValues = this.selectionModel.selected.map((value) => this.tree.treeControl.getValue(value));
464
+ return this.multiple ? selectedValues : selectedValues[0];
465
+ }
466
+ get triggerValue() {
467
+ if (this.empty) {
468
+ return '';
469
+ }
470
+ return this.tree.treeControl.getViewValue(this.selected);
471
+ }
472
+ get empty() {
473
+ return !this.selectionModel || this.selectionModel.isEmpty();
474
+ }
475
+ isRtl() {
476
+ return this.dir ? this.dir.value === 'rtl' : false;
477
+ }
478
+ handleKeydown(event) {
479
+ if (!this.disabled) {
480
+ if (this.panelOpen) {
481
+ this.handleOpenKeydown(event);
482
+ }
483
+ else {
484
+ this.handleClosedKeydown(event);
485
+ }
486
+ }
487
+ }
488
+ onFocus() {
489
+ if (!this.disabled) {
490
+ this._focused = true;
491
+ this.stateChanges.next();
492
+ }
493
+ }
494
+ /**
495
+ * Calls the touched callback only if the panel is closed. Otherwise, the trigger will
496
+ * "blur" to the panel when it opens, causing a false positive.
497
+ */
498
+ onBlur() {
499
+ this._focused = false;
500
+ if (!this.disabled && !this.panelOpen) {
501
+ this.onTouched();
502
+ this.changeDetectorRef.markForCheck();
503
+ this.stateChanges.next();
504
+ }
505
+ }
506
+ /** Callback that is invoked when the overlay panel has been attached. */
507
+ onAttached() {
508
+ this.overlayDir.positionChange
509
+ .pipe(take(1))
510
+ .subscribe(() => {
511
+ this.changeDetectorRef.detectChanges();
512
+ this.calculateOverlayOffsetX();
513
+ this.panel.nativeElement.scrollTop = this.scrollTop;
514
+ this.tree.updateScrollSize();
515
+ });
516
+ this.closeSubscription = this.closingActions()
517
+ .subscribe(() => this.close());
518
+ }
519
+ /** Returns the theme to be used on the panel. */
520
+ getPanelTheme() {
521
+ return this.parentFormField ? `mc-${this.parentFormField.color}` : '';
522
+ }
523
+ focus() {
524
+ this.elementRef.nativeElement.focus();
525
+ }
526
+ /**
527
+ * Implemented as part of McFormFieldControl.
528
+ * @docs-private
529
+ */
530
+ onContainerClick() {
531
+ this.focus();
532
+ }
533
+ /** Invoked when an option is clicked. */
534
+ onRemoveSelectedOption(selectedOption, $event) {
535
+ $event.stopPropagation();
536
+ this.selectionModel
537
+ .deselect(this.selected.find((value) => this.tree.treeControl.getValue(value) === selectedOption.value));
538
+ this.onChange(this.selectedValues);
539
+ }
540
+ calculateHiddenItems() {
541
+ if (this.customTrigger || this.empty || !this.multiple) {
542
+ return;
543
+ }
544
+ let visibleItems = 0;
545
+ const totalItemsWidth = this.getTotalItemsWidthInMatcher();
546
+ let totalVisibleItemsWidth = 0;
547
+ this.tags.forEach((tag) => {
548
+ if (tag.nativeElement.offsetTop < tag.nativeElement.offsetHeight) {
549
+ totalVisibleItemsWidth += this.getItemWidth(tag.nativeElement);
550
+ visibleItems++;
551
+ }
552
+ });
553
+ this.hiddenItems = this.selectionModel.selected.length - visibleItems;
554
+ if (this.hiddenItems) {
555
+ const itemsCounter = this.trigger.nativeElement.querySelector('.mc-tree-select__match-hidden-text');
556
+ const matcherList = this.trigger.nativeElement.querySelector('.mc-tree-select__match-list');
557
+ const itemsCounterShowed = itemsCounter.offsetTop < itemsCounter.offsetHeight;
558
+ // const itemsCounterWidth: number = itemsCounter.getBoundingClientRect().width;
559
+ const itemsCounterWidth = 86;
560
+ const matcherListWidth = Math.floor(matcherList.getBoundingClientRect().width);
561
+ const matcherWidth = matcherListWidth + (itemsCounterShowed ? itemsCounterWidth : 0);
562
+ if (itemsCounterShowed && (totalItemsWidth < matcherWidth)) {
563
+ this.hiddenItems = 0;
564
+ }
565
+ if (totalVisibleItemsWidth === matcherListWidth ||
566
+ (totalVisibleItemsWidth + itemsCounterWidth) < matcherListWidth) {
567
+ this.changeDetectorRef.markForCheck();
568
+ return;
569
+ }
570
+ else if (!itemsCounterShowed && (totalItemsWidth + itemsCounterWidth) > matcherWidth) {
571
+ this.hiddenItems++;
572
+ }
573
+ }
574
+ this.changeDetectorRef.markForCheck();
575
+ }
576
+ closingActions() {
577
+ const backdrop = this.overlayDir.overlayRef.backdropClick();
578
+ const outsidePointerEvents = this.overlayDir.overlayRef.outsidePointerEvents()
579
+ .pipe(filter((event) => !this.elementRef.nativeElement.contains(event.target)));
580
+ const detachments = this.overlayDir.overlayRef.detachments();
581
+ return merge(backdrop, outsidePointerEvents, detachments);
582
+ }
583
+ getTotalItemsWidthInMatcher() {
584
+ const triggerClone = this.trigger.nativeElement.cloneNode(true);
585
+ triggerClone.querySelector('.mc-tree-select__match-hidden-text').remove();
586
+ this.renderer.setStyle(triggerClone, 'position', 'absolute');
587
+ this.renderer.setStyle(triggerClone, 'visibility', 'hidden');
588
+ this.renderer.setStyle(triggerClone, 'top', '-100%');
589
+ this.renderer.setStyle(triggerClone, 'left', '0');
590
+ this.renderer.appendChild(this.trigger.nativeElement, triggerClone);
591
+ let totalItemsWidth = 0;
592
+ triggerClone.querySelectorAll('mc-tag').forEach((item) => {
593
+ totalItemsWidth += this.getItemWidth(item);
594
+ });
595
+ triggerClone.remove();
596
+ return totalItemsWidth;
597
+ }
598
+ getItemWidth(element) {
599
+ const computedStyle = window.getComputedStyle(element);
600
+ const width = parseInt(computedStyle.width);
601
+ const marginLeft = parseInt(computedStyle.marginLeft);
602
+ const marginRight = parseInt(computedStyle.marginRight);
603
+ return width + marginLeft + marginRight;
604
+ }
605
+ handleClosedKeydown(event) {
606
+ // tslint:disable-next-line: deprecation
607
+ const keyCode = event.keyCode;
608
+ const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW ||
609
+ keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;
610
+ const isOpenKey = keyCode === ENTER || keyCode === SPACE;
611
+ // Open the select on ALT + arrow key to match the native <select>
612
+ if (isOpenKey || ((this.multiple || event.altKey) && isArrowKey)) {
613
+ // prevents the page from scrolling down when pressing space
614
+ event.preventDefault();
615
+ this.open();
616
+ }
617
+ else if (!this.multiple && this.tree.keyManager && this.tree.keyManager.onKeydown) {
618
+ this.tree.keyManager.onKeydown(event);
619
+ }
620
+ }
621
+ handleOpenKeydown(event) {
622
+ /* tslint:disable-next-line */
623
+ const keyCode = event.keyCode;
624
+ const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;
625
+ if (isArrowKey && event.altKey) {
626
+ // Close the select on ALT + arrow key to match the native <select>
627
+ event.preventDefault();
628
+ this.close();
629
+ }
630
+ else if (keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW) {
631
+ return this.originalOnKeyDown.call(this.tree, event);
632
+ }
633
+ else if (keyCode === HOME) {
634
+ event.preventDefault();
635
+ this.tree.keyManager.setFirstItemActive();
636
+ }
637
+ else if (keyCode === END) {
638
+ event.preventDefault();
639
+ this.tree.keyManager.setLastItemActive();
640
+ }
641
+ else if (keyCode === PAGE_UP) {
642
+ event.preventDefault();
643
+ this.tree.keyManager.setPreviousPageItemActive();
644
+ }
645
+ else if (keyCode === PAGE_DOWN) {
646
+ event.preventDefault();
647
+ this.tree.keyManager.setNextPageItemActive();
648
+ }
649
+ else if ((keyCode === ENTER || keyCode === SPACE) && this.tree.keyManager.activeItem) {
650
+ event.preventDefault();
651
+ if (!this.autoSelect) {
652
+ this.selectionModel.toggle(this.tree.keyManager.activeItem.data);
653
+ }
654
+ else {
655
+ this.close();
656
+ }
657
+ }
658
+ else if (this.multiple && keyCode === A && event.ctrlKey) {
659
+ event.preventDefault();
660
+ const hasDeselectedOptions = this.options.some((option) => !option.selected);
661
+ this.options.forEach((option) => {
662
+ if (hasDeselectedOptions && !option.disabled) {
663
+ option.select();
664
+ }
665
+ else {
666
+ option.deselect();
667
+ }
668
+ });
669
+ }
670
+ else {
671
+ const previouslyFocusedIndex = this.tree.keyManager.activeItemIndex;
672
+ this.tree.keyManager.setFocusOrigin('keyboard');
673
+ this.tree.keyManager.onKeydown(event);
674
+ if (this.multiple && isArrowKey && event.shiftKey && this.tree.keyManager.activeItem &&
675
+ this.tree.keyManager.activeItemIndex !== previouslyFocusedIndex) {
676
+ this.tree.keyManager.activeItem.selectViaInteraction(event);
677
+ }
678
+ if (this.autoSelect && this.tree.keyManager.activeItem) {
679
+ this.tree.setSelectedOptionsByKey(this.tree.keyManager.activeItem, hasModifierKey(event, 'shiftKey'), hasModifierKey(event, 'ctrlKey'));
680
+ }
681
+ if (this.search) {
682
+ this.search.focus();
683
+ }
684
+ }
685
+ }
686
+ refreshTriggerValues() {
687
+ this.triggerValues = this.selectionModel.selected
688
+ .map((node) => ({
689
+ value: this.tree.treeControl.getValue(node),
690
+ viewValue: this.tree.treeControl.getViewValue(node),
691
+ disabled: this.tree.treeControl.isDisabled(node)
692
+ }));
693
+ this.changeDetectorRef.detectChanges();
694
+ }
695
+ initializeSelection() {
696
+ // Defer setting the value in order to avoid the "Expression
697
+ // has changed after it was checked" errors from Angular.
698
+ Promise.resolve().then(() => {
699
+ this.setSelectionByValue(this.ngControl ? this.ngControl.value : this._value);
700
+ });
701
+ }
702
+ /**
703
+ * Sets the selected option based on a value. If no option can be
704
+ * found with the designated value, the select trigger is cleared.
705
+ */
706
+ setSelectionByValue(value) {
707
+ if (this.multiple && value) {
708
+ if (!Array.isArray(value)) {
709
+ throw getMcSelectNonArrayValueError();
710
+ }
711
+ this.tree.setOptionsFromValues(value);
712
+ this.sortValues();
713
+ }
714
+ else {
715
+ this.tree.setOptionsFromValues([value]);
716
+ }
717
+ this.changeDetectorRef.detectChanges();
718
+ }
719
+ initKeyManager() {
720
+ this.originalOnKeyDown = this.tree.onKeyDown;
721
+ this.tree.onKeyDown = () => { };
722
+ this.tree.keyManager.tabOut
723
+ .pipe(takeUntil(this.destroy))
724
+ .subscribe(() => {
725
+ // Restore focus to the trigger before closing. Ensures that the focus
726
+ // position won't be lost if the user got focus into the overlay.
727
+ this.focus();
728
+ this.close();
729
+ });
730
+ this.tree.keyManager.change
731
+ .pipe(takeUntil(this.destroy))
732
+ .subscribe(() => {
733
+ if (this._panelOpen && this.panel) {
734
+ this.scrollActiveOptionIntoView();
735
+ }
736
+ else if (!this._panelOpen && !this.multiple && this.tree.keyManager.activeItem) {
737
+ this.tree.keyManager.activeItem.selectViaInteraction();
738
+ }
739
+ });
740
+ }
741
+ /** Sorts the selected values in the selected based on their order in the panel. */
742
+ sortValues() {
743
+ if (this.multiple) {
744
+ const options = this.options.toArray();
745
+ this.selectionModel.sort((a, b) => {
746
+ return this.sortComparator ? this.sortComparator(a, b, options) :
747
+ options.indexOf(a) - options.indexOf(b);
748
+ });
749
+ this.stateChanges.next();
750
+ }
751
+ }
752
+ /**
753
+ * Highlights the selected item. If no option is selected, it will highlight
754
+ * the first item instead.
755
+ */
756
+ highlightCorrectOption() {
757
+ if (this.empty || !this.tree.keyManager) {
758
+ return;
759
+ }
760
+ const firstSelectedValue = this.multiple ? this.selectedValues[0] : this.selectedValues;
761
+ const selectedOption = this.options.find((option) => option.value === firstSelectedValue);
762
+ if (selectedOption) {
763
+ this.tree.keyManager.setFocusOrigin('keyboard');
764
+ this.tree.keyManager.setActiveItem(selectedOption);
765
+ }
766
+ }
767
+ /** Scrolls the active option into view. */
768
+ scrollActiveOptionIntoView() {
769
+ var _a;
770
+ (_a = this.tree.keyManager.activeItem) === null || _a === void 0 ? void 0 : _a.focus();
771
+ }
772
+ /**
773
+ * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.
774
+ * This must be adjusted to align the selected option text over the trigger text when
775
+ * the panel opens. Will change based on LTR or RTL text direction. Note that the offset
776
+ * can't be calculated until the panel has been attached, because we need to know the
777
+ * content width in order to constrain the panel within the viewport.
778
+ */
779
+ calculateOverlayOffsetX() {
780
+ const overlayRect = this.overlayDir.overlayRef.overlayElement.getBoundingClientRect();
781
+ const viewportSize = this.viewportRuler.getViewportSize();
782
+ const isRtl = this.isRtl();
783
+ /* tslint:disable-next-line:no-magic-numbers */
784
+ const paddingWidth = SELECT_PANEL_PADDING_X * 2;
785
+ let offsetX = SELECT_PANEL_PADDING_X;
786
+ // Invert the offset in LTR.
787
+ if (!isRtl) {
788
+ offsetX *= -1;
789
+ }
790
+ // Determine how much the select overflows on each side.
791
+ const leftOverflow = 0 - (overlayRect.left + offsetX - (isRtl ? paddingWidth : 0));
792
+ const rightOverflow = overlayRect.right + offsetX - viewportSize.width
793
+ + (isRtl ? 0 : paddingWidth);
794
+ // If the element overflows on either side, reduce the offset to allow it to fit.
795
+ if (leftOverflow > 0) {
796
+ offsetX += leftOverflow + SELECT_PANEL_VIEWPORT_PADDING;
797
+ }
798
+ else if (rightOverflow > 0) {
799
+ offsetX -= rightOverflow + SELECT_PANEL_VIEWPORT_PADDING;
800
+ }
801
+ // Set the offset directly in order to avoid having to go through change detection and
802
+ // potentially triggering "changed after it was checked" errors. Round the value to avoid
803
+ // blurry content in some browsers.
804
+ this.overlayDir.offsetX = Math.round(offsetX);
805
+ this.overlayDir.overlayRef.updatePosition();
806
+ }
807
+ updateIsEmptySearchResult() {
808
+ var _a;
809
+ if (this.search) {
810
+ (_a = this.search.input.ngControl.valueChanges) === null || _a === void 0 ? void 0 : _a.subscribe((value) => {
811
+ this.isEmptySearchResult = !!value && this.tree.isEmpty;
812
+ this.changeDetectorRef.markForCheck();
813
+ });
814
+ }
815
+ }
816
+ }
817
+ /** @nocollapse */ /** @nocollapse */ McTreeSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTreeSelect, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ViewportRuler }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i2.ErrorStateMatcher }, { token: MC_SELECT_SCROLL_STRATEGY }, { token: NG_VALIDATORS, optional: true }, { token: MC_VALIDATION, optional: true }, { token: i3.Directionality, optional: true }, { token: i4.NgForm, optional: true }, { token: i4.FormGroupDirective, optional: true }, { token: i5.McFormField, optional: true }, { token: i4.NgControl, optional: true, self: true }, { token: i4.NgModel, optional: true, self: true }, { token: i4.FormControlName, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
818
+ /** @nocollapse */ /** @nocollapse */ McTreeSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: McTreeSelect, selector: "mc-tree-select", inputs: { disabled: "disabled", tabIndex: "tabIndex", hiddenItemsText: "hiddenItemsText", panelClass: "panelClass", backdropClass: "backdropClass", errorStateMatcher: "errorStateMatcher", sortComparator: "sortComparator", placeholder: "placeholder", required: "required", multiple: "multiple", autoSelect: "autoSelect", compareWith: "compareWith", id: "id", hasBackdrop: "hasBackdrop", hiddenItemsTextFormatter: "hiddenItemsTextFormatter" }, outputs: { openedChange: "openedChange", openedStream: "opened", closedStream: "closed", selectionChange: "selectionChange", valueChange: "valueChange" }, host: { listeners: { "click": "toggle()", "keydown": "handleKeydown($event)", "focus": "onFocus()", "blur": "onBlur()", "window:resize": "calculateHiddenItems()" }, properties: { "class.mc-disabled": "disabled", "class.mc-invalid": "errorState", "attr.id": "id", "attr.tabindex": "tabIndex", "attr.disabled": "disabled || null" }, classAttribute: "mc-tree-select" }, providers: [
819
+ { provide: McFormFieldControl, useExisting: McTreeSelect },
820
+ { provide: McTree, useExisting: McTreeSelect }
821
+ ], queries: [{ propertyName: "cleaner", first: true, predicate: ["mcSelectCleaner"], descendants: true, static: true }, { propertyName: "customTrigger", first: true, predicate: McTreeSelectTrigger, descendants: true }, { propertyName: "tree", first: true, predicate: McTreeSelection, descendants: true }, { propertyName: "search", first: true, predicate: McSelectSearch, descendants: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "panel", first: true, predicate: ["panel"], descendants: true }, { propertyName: "overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "tags", predicate: McTag, descendants: true }], exportAs: ["mcTreeSelect"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div cdk-overlay-origin\n class=\"mc-tree-select__trigger\"\n [class.mc-tree-select__trigger_multiple]=\"multiple\"\n #origin=\"cdkOverlayOrigin\"\n #trigger>\n <div class=\"mc-tree-select__matcher\" [ngSwitch]=\"empty\">\n <span class=\"mc-tree-select__placeholder\" *ngSwitchCase=\"true\">{{ placeholder || '\\u00A0' }}</span>\n <span *ngSwitchCase=\"false\" [ngSwitch]=\"!!customTrigger\">\n <div *ngSwitchDefault [ngSwitch]=\"multiple\" class=\"mc-tree-select__match-container\">\n <span *ngSwitchCase=\"false\" class=\"mc-tree-select__matcher-text\">{{ triggerValue }}</span>\n <div *ngSwitchCase=\"true\" class=\"mc-tree-select__multiple-matcher\">\n <div class=\"mc-tree-select__match-list\">\n <mc-tag *ngFor=\"let triggerValue of triggerValues\"\n [selectable]=\"false\"\n [disabled]=\"triggerValue.disabled || disabled\"\n [class.mc-error]=\"errorState\">\n\n {{ triggerValue.viewValue }}\n <i mc-icon=\"mc-close-S_16\"\n *ngIf=\"!triggerValue.disabled && !disabled\"\n (click)=\"onRemoveSelectedOption(triggerValue, $event)\">\n </i>\n </mc-tag>\n </div>\n <div class=\"mc-tree-select__match-hidden-text\" [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\">\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n </div>\n </div>\n <ng-content select=\"mc-tree-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-tree-select__arrow-wrapper\">\n <i class=\"mc-tree-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\n <div #panel\n class=\"mc-tree-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 *ngIf=\"isEmptySearchResult\" class=\"mc-select__no-options-message\">\n <ng-content select=\"[mc-select-search-empty-result]\"></ng-content>\n </div>\n\n <div #optionsContainer\n class=\"mc-tree-select__content\"\n [@fadeInContent]=\"'showing'\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\">\n <ng-content select=\"mc-tree-selection\"></ng-content>\n </div>\n\n <ng-content select=\"[mc-tree-selection-footer]\"></ng-content>\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, 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-tree-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.mc-tree-select.mc-disabled .mc-tree-select__trigger{-webkit-user-select:none;user-select:none;cursor:default}.mc-tree-select__trigger{display:flex;box-sizing:border-box;position:relative;height:var(--mc-form-field-size-height, 32px);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-tree-select__trigger.mc-tree-select__trigger_multiple{padding-left:calc(var(--mc-select-size-left-padding-multiple, 12px) - var(--mc-form-field-size-border-width, 1px))}.mc-tree-select__trigger.mc-tree-select__trigger_multiple .mc-tree-select__placeholder{margin-left:8px}.mc-tree-select__trigger.mc-tree-select__trigger_multiple .mc-tag.mc-disabled .mc-tag__text{margin-right:7px}.mc-tree-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mc-tree-select__matcher>span{width:100%}.mc-tree-select__multiple-matcher{display:flex;width:100%}.mc-tree-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-tree-select__match-list .mc-tag{margin-right:4px}.mc-tree-select__match-container{display:flex;flex-direction:row;justify-content:space-between;width:100%}.mc-tree-select__match-container .mc-tree-select__match-hidden-text{flex:0 0 70px;align-self:center;padding:0 8px;text-align:right}.mc-tree-select__match-item{display:flex;border:1px solid transparent;border-radius:3px;padding-left:7px;margin-right:4px;max-width:100%}.mc-tree-select__arrow-wrapper{align-self:center}.mc-form-field-appearance-fill .mc-tree-select__arrow-wrapper,.mc-form-field-appearance-standard .mc-tree-select__arrow-wrapper{transform:translateY(-50%)}.mc-form-field-appearance-outline .mc-tree-select__arrow-wrapper{transform:translateY(-25%)}.mc-tree-select__panel{min-width:100%;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-tree-select__panel .mc-optgroup-label,.mc-tree-select__panel .mc-tree-select-option{font-size:inherit;line-height:var(--mc-option-size-height, 32px);height:var(--mc-option-size-height, 32px)}.mc-tree-select__content{max-height:var(--mc-select-panel-size-max-height, 232px);overflow:auto}.mc-tree-select__content .mc-tree-selection{height:100%}.mc-form-field-type-select:not(.mc-disabled) .mc-form-field-flex{cursor:pointer}.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__search-container{border-bottom-width:1px;border-bottom-style:solid}\n"], components: [{ type: i6.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: i7.McIcon, selector: "[mc-icon]", inputs: ["color"] }], directives: [{ type: i1.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: i7.McIconCSSStyler, selector: "[mc-icon]" }, { type: i1.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: [
822
+ mcSelectAnimations.transformPanel,
823
+ mcSelectAnimations.fadeInContent
824
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
825
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTreeSelect, decorators: [{
826
+ type: Component,
827
+ args: [{ selector: 'mc-tree-select', exportAs: 'mcTreeSelect', inputs: ['disabled', 'tabIndex'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
828
+ class: 'mc-tree-select',
829
+ '[class.mc-disabled]': 'disabled',
830
+ '[class.mc-invalid]': 'errorState',
831
+ '[attr.id]': 'id',
832
+ '[attr.tabindex]': 'tabIndex',
833
+ '[attr.disabled]': 'disabled || null',
834
+ '(click)': 'toggle()',
835
+ '(keydown)': 'handleKeydown($event)',
836
+ '(focus)': 'onFocus()',
837
+ '(blur)': 'onBlur()',
838
+ '(window:resize)': 'calculateHiddenItems()'
839
+ }, animations: [
840
+ mcSelectAnimations.transformPanel,
841
+ mcSelectAnimations.fadeInContent
842
+ ], providers: [
843
+ { provide: McFormFieldControl, useExisting: McTreeSelect },
844
+ { provide: McTree, useExisting: McTreeSelect }
845
+ ], template: "<div cdk-overlay-origin\n class=\"mc-tree-select__trigger\"\n [class.mc-tree-select__trigger_multiple]=\"multiple\"\n #origin=\"cdkOverlayOrigin\"\n #trigger>\n <div class=\"mc-tree-select__matcher\" [ngSwitch]=\"empty\">\n <span class=\"mc-tree-select__placeholder\" *ngSwitchCase=\"true\">{{ placeholder || '\\u00A0' }}</span>\n <span *ngSwitchCase=\"false\" [ngSwitch]=\"!!customTrigger\">\n <div *ngSwitchDefault [ngSwitch]=\"multiple\" class=\"mc-tree-select__match-container\">\n <span *ngSwitchCase=\"false\" class=\"mc-tree-select__matcher-text\">{{ triggerValue }}</span>\n <div *ngSwitchCase=\"true\" class=\"mc-tree-select__multiple-matcher\">\n <div class=\"mc-tree-select__match-list\">\n <mc-tag *ngFor=\"let triggerValue of triggerValues\"\n [selectable]=\"false\"\n [disabled]=\"triggerValue.disabled || disabled\"\n [class.mc-error]=\"errorState\">\n\n {{ triggerValue.viewValue }}\n <i mc-icon=\"mc-close-S_16\"\n *ngIf=\"!triggerValue.disabled && !disabled\"\n (click)=\"onRemoveSelectedOption(triggerValue, $event)\">\n </i>\n </mc-tag>\n </div>\n <div class=\"mc-tree-select__match-hidden-text\" [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\">\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n </div>\n </div>\n <ng-content select=\"mc-tree-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-tree-select__arrow-wrapper\">\n <i class=\"mc-tree-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\n <div #panel\n class=\"mc-tree-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 *ngIf=\"isEmptySearchResult\" class=\"mc-select__no-options-message\">\n <ng-content select=\"[mc-select-search-empty-result]\"></ng-content>\n </div>\n\n <div #optionsContainer\n class=\"mc-tree-select__content\"\n [@fadeInContent]=\"'showing'\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\">\n <ng-content select=\"mc-tree-selection\"></ng-content>\n </div>\n\n <ng-content select=\"[mc-tree-selection-footer]\"></ng-content>\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, 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-tree-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.mc-tree-select.mc-disabled .mc-tree-select__trigger{-webkit-user-select:none;user-select:none;cursor:default}.mc-tree-select__trigger{display:flex;box-sizing:border-box;position:relative;height:var(--mc-form-field-size-height, 32px);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-tree-select__trigger.mc-tree-select__trigger_multiple{padding-left:calc(var(--mc-select-size-left-padding-multiple, 12px) - var(--mc-form-field-size-border-width, 1px))}.mc-tree-select__trigger.mc-tree-select__trigger_multiple .mc-tree-select__placeholder{margin-left:8px}.mc-tree-select__trigger.mc-tree-select__trigger_multiple .mc-tag.mc-disabled .mc-tag__text{margin-right:7px}.mc-tree-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mc-tree-select__matcher>span{width:100%}.mc-tree-select__multiple-matcher{display:flex;width:100%}.mc-tree-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-tree-select__match-list .mc-tag{margin-right:4px}.mc-tree-select__match-container{display:flex;flex-direction:row;justify-content:space-between;width:100%}.mc-tree-select__match-container .mc-tree-select__match-hidden-text{flex:0 0 70px;align-self:center;padding:0 8px;text-align:right}.mc-tree-select__match-item{display:flex;border:1px solid transparent;border-radius:3px;padding-left:7px;margin-right:4px;max-width:100%}.mc-tree-select__arrow-wrapper{align-self:center}.mc-form-field-appearance-fill .mc-tree-select__arrow-wrapper,.mc-form-field-appearance-standard .mc-tree-select__arrow-wrapper{transform:translateY(-50%)}.mc-form-field-appearance-outline .mc-tree-select__arrow-wrapper{transform:translateY(-25%)}.mc-tree-select__panel{min-width:100%;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-tree-select__panel .mc-optgroup-label,.mc-tree-select__panel .mc-tree-select-option{font-size:inherit;line-height:var(--mc-option-size-height, 32px);height:var(--mc-option-size-height, 32px)}.mc-tree-select__content{max-height:var(--mc-select-panel-size-max-height, 232px);overflow:auto}.mc-tree-select__content .mc-tree-selection{height:100%}.mc-form-field-type-select:not(.mc-disabled) .mc-form-field-flex{cursor:pointer}.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__search-container{border-bottom-width:1px;border-bottom-style:solid}\n"] }]
846
+ }], ctorParameters: function () {
847
+ return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ViewportRuler }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i2.ErrorStateMatcher }, { type: undefined, decorators: [{
848
+ type: Inject,
849
+ args: [MC_SELECT_SCROLL_STRATEGY]
850
+ }] }, { type: undefined, decorators: [{
851
+ type: Optional
852
+ }, {
853
+ type: Inject,
854
+ args: [NG_VALIDATORS]
855
+ }] }, { type: undefined, decorators: [{
856
+ type: Optional
857
+ }, {
858
+ type: Inject,
859
+ args: [MC_VALIDATION]
860
+ }] }, { type: i3.Directionality, decorators: [{
861
+ type: Optional
862
+ }] }, { type: i4.NgForm, decorators: [{
863
+ type: Optional
864
+ }] }, { type: i4.FormGroupDirective, decorators: [{
865
+ type: Optional
866
+ }] }, { type: i5.McFormField, decorators: [{
867
+ type: Optional
868
+ }] }, { type: i4.NgControl, decorators: [{
869
+ type: Optional
870
+ }, {
871
+ type: Self
872
+ }] }, { type: i4.NgModel, decorators: [{
873
+ type: Optional
874
+ }, {
875
+ type: Self
876
+ }] }, { type: i4.FormControlName, decorators: [{
877
+ type: Optional
878
+ }, {
879
+ type: Self
880
+ }] }];
881
+ }, propDecorators: { trigger: [{
882
+ type: ViewChild,
883
+ args: ['trigger', { static: false }]
884
+ }], panel: [{
885
+ type: ViewChild,
886
+ args: ['panel', { static: false }]
887
+ }], overlayDir: [{
888
+ type: ViewChild,
889
+ args: [CdkConnectedOverlay, { static: false }]
890
+ }], tags: [{
891
+ type: ViewChildren,
892
+ args: [McTag]
893
+ }], cleaner: [{
894
+ type: ContentChild,
895
+ args: ['mcSelectCleaner', { static: true }]
896
+ }], customTrigger: [{
897
+ type: ContentChild,
898
+ args: [McTreeSelectTrigger, { static: false }]
899
+ }], tree: [{
900
+ type: ContentChild,
901
+ args: [McTreeSelection, { static: false }]
902
+ }], search: [{
903
+ type: ContentChild,
904
+ args: [McSelectSearch, { static: false }]
905
+ }], hiddenItemsText: [{
906
+ type: Input
907
+ }], openedChange: [{
908
+ type: Output
909
+ }], openedStream: [{
910
+ type: Output,
911
+ args: ['opened']
912
+ }], closedStream: [{
913
+ type: Output,
914
+ args: ['closed']
915
+ }], selectionChange: [{
916
+ type: Output
917
+ }], valueChange: [{
918
+ type: Output
919
+ }], panelClass: [{
920
+ type: Input
921
+ }], backdropClass: [{
922
+ type: Input
923
+ }], errorStateMatcher: [{
924
+ type: Input
925
+ }], sortComparator: [{
926
+ type: Input
927
+ }], placeholder: [{
928
+ type: Input
929
+ }], required: [{
930
+ type: Input
931
+ }], multiple: [{
932
+ type: Input
933
+ }], autoSelect: [{
934
+ type: Input
935
+ }], compareWith: [{
936
+ type: Input
937
+ }], id: [{
938
+ type: Input
939
+ }], hasBackdrop: [{
940
+ type: Input
941
+ }], hiddenItemsTextFormatter: [{
942
+ type: Input
928
943
  }] } });
929
944
 
930
- class McTreeSelectModule {
931
- }
932
- /** @nocollapse */ /** @nocollapse */ McTreeSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTreeSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
933
- /** @nocollapse */ /** @nocollapse */ McTreeSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTreeSelectModule, declarations: [McTreeSelect, McTreeSelectTrigger, McTreeSelectFooter], imports: [CommonModule,
934
- OverlayModule,
935
- McTreeModule,
936
- McIconModule,
937
- McTagsModule,
938
- McPseudoCheckboxModule,
939
- McSelectModule], exports: [McTreeSelect, McTreeSelectTrigger, McTreeSelectFooter, CommonModule] });
940
- /** @nocollapse */ /** @nocollapse */ McTreeSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTreeSelectModule, providers: [MC_SELECT_SCROLL_STRATEGY_PROVIDER], imports: [[
941
- CommonModule,
942
- OverlayModule,
943
- McTreeModule,
944
- McIconModule,
945
- McTagsModule,
946
- McPseudoCheckboxModule,
947
- McSelectModule
948
- ], CommonModule] });
949
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTreeSelectModule, decorators: [{
950
- type: NgModule,
951
- args: [{
952
- imports: [
953
- CommonModule,
954
- OverlayModule,
955
- McTreeModule,
956
- McIconModule,
957
- McTagsModule,
958
- McPseudoCheckboxModule,
959
- McSelectModule
960
- ],
961
- exports: [McTreeSelect, McTreeSelectTrigger, McTreeSelectFooter, CommonModule],
962
- declarations: [McTreeSelect, McTreeSelectTrigger, McTreeSelectFooter],
963
- providers: [MC_SELECT_SCROLL_STRATEGY_PROVIDER]
964
- }]
945
+ class McTreeSelectModule {
946
+ }
947
+ /** @nocollapse */ /** @nocollapse */ McTreeSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTreeSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
948
+ /** @nocollapse */ /** @nocollapse */ McTreeSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTreeSelectModule, declarations: [McTreeSelect, McTreeSelectTrigger, McTreeSelectFooter], imports: [CommonModule,
949
+ OverlayModule,
950
+ McTreeModule,
951
+ McIconModule,
952
+ McTagsModule,
953
+ McPseudoCheckboxModule,
954
+ McSelectModule], exports: [McTreeSelect, McTreeSelectTrigger, McTreeSelectFooter, CommonModule] });
955
+ /** @nocollapse */ /** @nocollapse */ McTreeSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTreeSelectModule, providers: [MC_SELECT_SCROLL_STRATEGY_PROVIDER], imports: [[
956
+ CommonModule,
957
+ OverlayModule,
958
+ McTreeModule,
959
+ McIconModule,
960
+ McTagsModule,
961
+ McPseudoCheckboxModule,
962
+ McSelectModule
963
+ ], CommonModule] });
964
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTreeSelectModule, decorators: [{
965
+ type: NgModule,
966
+ args: [{
967
+ imports: [
968
+ CommonModule,
969
+ OverlayModule,
970
+ McTreeModule,
971
+ McIconModule,
972
+ McTagsModule,
973
+ McPseudoCheckboxModule,
974
+ McSelectModule
975
+ ],
976
+ exports: [McTreeSelect, McTreeSelectTrigger, McTreeSelectFooter, CommonModule],
977
+ declarations: [McTreeSelect, McTreeSelectTrigger, McTreeSelectFooter],
978
+ providers: [MC_SELECT_SCROLL_STRATEGY_PROVIDER]
979
+ }]
965
980
  }] });
966
981
 
967
- /**
968
- * Generated bundle index. Do not edit.
982
+ /**
983
+ * Generated bundle index. Do not edit.
969
984
  */
970
985
 
971
986
  export { McTreeSelect, McTreeSelectChange, McTreeSelectFooter, McTreeSelectModule, McTreeSelectTrigger };