@ptsecurity/mosaic 13.6.0 → 13.7.1

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 (906) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +6 -6
  3. package/_theming.scss +7238 -7128
  4. package/_visual.scss +2724 -2694
  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 -30
  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 -14
  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/loader-overlay.json5 +23 -0
  121. package/design-tokens/legacy-2017/tokens/components/modal.json5 +81 -81
  122. package/design-tokens/legacy-2017/tokens/components/navbar.json5 +70 -70
  123. package/design-tokens/legacy-2017/tokens/components/optgroup.json5 +10 -10
  124. package/design-tokens/legacy-2017/tokens/components/option.json5 +12 -12
  125. package/design-tokens/legacy-2017/tokens/components/popover.json5 +68 -68
  126. package/design-tokens/legacy-2017/tokens/components/popup.json5 +16 -16
  127. package/design-tokens/legacy-2017/tokens/components/progress-bar.json5 +13 -13
  128. package/design-tokens/legacy-2017/tokens/components/progress-spinner.json5 +7 -7
  129. package/design-tokens/legacy-2017/tokens/components/radio.json5 +45 -44
  130. package/design-tokens/legacy-2017/tokens/components/select.json5 +24 -24
  131. package/design-tokens/legacy-2017/tokens/components/sidepanel.json5 +44 -44
  132. package/design-tokens/legacy-2017/tokens/components/table.json5 +15 -15
  133. package/design-tokens/legacy-2017/tokens/components/tabs.json5 +101 -101
  134. package/design-tokens/legacy-2017/tokens/components/tags.json5 +134 -134
  135. package/design-tokens/legacy-2017/tokens/components/textarea.json5 +12 -12
  136. package/design-tokens/legacy-2017/tokens/components/timepicker.json5 +7 -7
  137. package/design-tokens/legacy-2017/tokens/components/toggle.json5 +79 -79
  138. package/design-tokens/legacy-2017/tokens/components/tooltip.json5 +83 -83
  139. package/design-tokens/legacy-2017/tokens/components/tree.json5 +15 -15
  140. package/design-tokens/legacy-2017/tokens/properties/aliases.json5 +3 -3
  141. package/design-tokens/legacy-2017/tokens/properties/colors.json5 +119 -118
  142. package/design-tokens/legacy-2017/tokens/properties/font.json5 +12 -12
  143. package/design-tokens/legacy-2017/tokens/properties/globals.json5 +49 -49
  144. package/design-tokens/legacy-2017/tokens/properties/padding.json5 +3 -3
  145. package/design-tokens/legacy-2017/tokens/properties/palette.json5 +163 -163
  146. package/design-tokens/legacy-2017/tokens/properties/typography.json5 +175 -175
  147. package/design-tokens/legacy-2017/tokens.d.ts +7873 -7843
  148. package/design-tokens/pt-2022/tokens/components/alert.json5 +83 -83
  149. package/design-tokens/pt-2022/tokens/components/autocomplete.json5 +11 -11
  150. package/design-tokens/pt-2022/tokens/components/badge.json5 +174 -174
  151. package/design-tokens/pt-2022/tokens/components/button-toggle.json5 +10 -10
  152. package/design-tokens/pt-2022/tokens/components/button.json5 +142 -142
  153. package/design-tokens/pt-2022/tokens/components/card.json5 +51 -51
  154. package/design-tokens/pt-2022/tokens/components/checkbox.json5 +97 -97
  155. package/design-tokens/pt-2022/tokens/components/datepicker.json5 +64 -64
  156. package/design-tokens/pt-2022/tokens/components/divider.json5 +14 -14
  157. package/design-tokens/pt-2022/tokens/components/dl.json5 +38 -38
  158. package/design-tokens/pt-2022/tokens/components/dropdown.json5 +48 -48
  159. package/design-tokens/pt-2022/tokens/components/form-field.json5 +92 -92
  160. package/design-tokens/pt-2022/tokens/components/forms.json5 +52 -52
  161. package/design-tokens/pt-2022/tokens/components/icon.json5 +104 -104
  162. package/design-tokens/pt-2022/tokens/components/input.json5 +12 -12
  163. package/design-tokens/pt-2022/tokens/components/link.json5 +50 -50
  164. package/design-tokens/pt-2022/tokens/components/list.json5 +13 -13
  165. package/design-tokens/pt-2022/tokens/components/loader-overlay.json5 +23 -0
  166. package/design-tokens/pt-2022/tokens/components/modal.json5 +81 -81
  167. package/design-tokens/pt-2022/tokens/components/navbar.json5 +70 -70
  168. package/design-tokens/pt-2022/tokens/components/optgroup.json5 +10 -10
  169. package/design-tokens/pt-2022/tokens/components/option.json5 +12 -12
  170. package/design-tokens/pt-2022/tokens/components/popover.json5 +68 -68
  171. package/design-tokens/pt-2022/tokens/components/popup.json5 +16 -16
  172. package/design-tokens/pt-2022/tokens/components/progress-bar.json5 +13 -13
  173. package/design-tokens/pt-2022/tokens/components/progress-spinner.json5 +7 -7
  174. package/design-tokens/pt-2022/tokens/components/radio.json5 +45 -44
  175. package/design-tokens/pt-2022/tokens/components/select.json5 +24 -24
  176. package/design-tokens/pt-2022/tokens/components/sidepanel.json5 +44 -44
  177. package/design-tokens/pt-2022/tokens/components/table.json5 +15 -15
  178. package/design-tokens/pt-2022/tokens/components/tabs.json5 +101 -101
  179. package/design-tokens/pt-2022/tokens/components/tags.json5 +137 -137
  180. package/design-tokens/pt-2022/tokens/components/textarea.json5 +12 -12
  181. package/design-tokens/pt-2022/tokens/components/timepicker.json5 +7 -7
  182. package/design-tokens/pt-2022/tokens/components/toggle.json5 +79 -79
  183. package/design-tokens/pt-2022/tokens/components/tooltip.json5 +83 -83
  184. package/design-tokens/pt-2022/tokens/components/tree.json5 +15 -15
  185. package/design-tokens/pt-2022/tokens/properties/aliases.json5 +3 -3
  186. package/design-tokens/pt-2022/tokens/properties/colors.json5 +122 -120
  187. package/design-tokens/pt-2022/tokens/properties/font.json5 +15 -15
  188. package/design-tokens/pt-2022/tokens/properties/globals.json5 +49 -49
  189. package/design-tokens/pt-2022/tokens/properties/padding.json5 +3 -3
  190. package/design-tokens/pt-2022/tokens/properties/palette.json5 +232 -232
  191. package/design-tokens/pt-2022/tokens/properties/typography.json5 +175 -175
  192. package/design-tokens/pt-2022/tokens.d.ts +9205 -9175
  193. package/design-tokens/ptsecurity-mosaic-design-tokens.d.ts +5 -5
  194. package/design-tokens/public-api.d.ts +3 -3
  195. package/design-tokens/style-dictionary/build.js +76 -63
  196. package/design-tokens/style-dictionary/configs/css.js +13 -13
  197. package/design-tokens/style-dictionary/configs/figma.js +11 -0
  198. package/design-tokens/style-dictionary/configs/index.js +48 -48
  199. package/design-tokens/style-dictionary/configs/js.js +9 -9
  200. package/design-tokens/style-dictionary/configs/scss.js +23 -23
  201. package/design-tokens/style-dictionary/filters/color.js +7 -7
  202. package/design-tokens/style-dictionary/filters/palette.js +7 -7
  203. package/design-tokens/style-dictionary/filters/size.js +7 -7
  204. package/design-tokens/style-dictionary/filters/typography.js +7 -7
  205. package/design-tokens/style-dictionary/formats/figma.js +104 -0
  206. package/design-tokens/style-dictionary/formats/palette.js +25 -25
  207. package/design-tokens/style-dictionary/formats/typography.js +52 -52
  208. package/design-tokens/style-dictionary/transformGroups/css.js +13 -13
  209. package/design-tokens/style-dictionary/transformGroups/figma.js +21 -0
  210. package/design-tokens/style-dictionary/transformGroups/scss.js +12 -12
  211. package/design-tokens/style-dictionary/transformGroups/ts.js +11 -11
  212. package/design-tokens/style-dictionary/transforms/attribute/figma-border.js +18 -0
  213. package/design-tokens/style-dictionary/transforms/attribute/figma-color.js +25 -0
  214. package/design-tokens/style-dictionary/transforms/attribute/figma-default.js +10 -0
  215. package/design-tokens/style-dictionary/transforms/attribute/figma-font.js +31 -0
  216. package/design-tokens/style-dictionary/transforms/attribute/figma-group.js +17 -0
  217. package/design-tokens/style-dictionary/transforms/attribute/figma-opacity.js +10 -0
  218. package/design-tokens/style-dictionary/transforms/attribute/figma-shadow.js +66 -0
  219. package/design-tokens/style-dictionary/transforms/attribute/figma-sizing.js +16 -0
  220. package/design-tokens/style-dictionary/transforms/attribute/figma-spacing.js +15 -0
  221. package/design-tokens/style-dictionary/transforms/attribute/figma-typography.js +24 -0
  222. package/design-tokens/style-dictionary/transforms/attribute/palette.js +9 -9
  223. package/design-tokens/style-dictionary/transforms/attribute/prefix.js +11 -11
  224. package/design-tokens/style-dictionary/transforms/attribute/size.js +8 -8
  225. package/design-tokens/style-dictionary/transforms/attribute/typography.js +9 -9
  226. package/design-tokens/style-dictionary/transforms/value/figma-values.js +7 -0
  227. package/divider/divider.component.d.ts +11 -11
  228. package/divider/divider.module.d.ts +8 -8
  229. package/divider/index.d.ts +1 -1
  230. package/divider/ptsecurity-mosaic-divider.d.ts +5 -5
  231. package/divider/public-api.d.ts +2 -2
  232. package/dl/dl.component.d.ts +26 -26
  233. package/dl/dl.module.d.ts +10 -10
  234. package/dl/index.d.ts +1 -1
  235. package/dl/ptsecurity-mosaic-dl.d.ts +5 -5
  236. package/dl/public-api.d.ts +2 -2
  237. package/dropdown/dropdown-animations.d.ts +11 -11
  238. package/dropdown/dropdown-content.directive.d.ts +32 -32
  239. package/dropdown/dropdown-errors.d.ts +17 -17
  240. package/dropdown/dropdown-item.component.d.ts +50 -50
  241. package/dropdown/dropdown-trigger.directive.d.ts +136 -136
  242. package/dropdown/dropdown.component.d.ts +121 -121
  243. package/dropdown/dropdown.module.d.ts +13 -13
  244. package/dropdown/dropdown.types.d.ts +53 -53
  245. package/dropdown/index.d.ts +1 -1
  246. package/dropdown/ptsecurity-mosaic-dropdown.d.ts +5 -5
  247. package/dropdown/public-api.d.ts +8 -8
  248. package/esm2020/autocomplete/autocomplete-origin.directive.mjs +21 -21
  249. package/esm2020/autocomplete/autocomplete-trigger.directive.mjs +555 -555
  250. package/esm2020/autocomplete/autocomplete.component.mjs +154 -154
  251. package/esm2020/autocomplete/autocomplete.module.mjs +34 -34
  252. package/esm2020/autocomplete/index.mjs +2 -2
  253. package/esm2020/autocomplete/ptsecurity-mosaic-autocomplete.mjs +4 -4
  254. package/esm2020/autocomplete/public-api.mjs +5 -5
  255. package/esm2020/button/button.component.mjs +137 -137
  256. package/esm2020/button/button.module.mjs +38 -38
  257. package/esm2020/button/index.mjs +2 -2
  258. package/esm2020/button/ptsecurity-mosaic-button.mjs +4 -4
  259. package/esm2020/button/public-api.mjs +3 -3
  260. package/esm2020/button-toggle/button-toggle.component.mjs +362 -362
  261. package/esm2020/button-toggle/button-toggle.module.mjs +19 -19
  262. package/esm2020/button-toggle/index.mjs +2 -2
  263. package/esm2020/button-toggle/ptsecurity-mosaic-button-toggle.mjs +4 -4
  264. package/esm2020/button-toggle/public-api.mjs +3 -3
  265. package/esm2020/card/card.component.mjs +80 -80
  266. package/esm2020/card/card.module.mjs +30 -30
  267. package/esm2020/card/index.mjs +2 -2
  268. package/esm2020/card/ptsecurity-mosaic-card.mjs +4 -4
  269. package/esm2020/card/public-api.mjs +3 -3
  270. package/esm2020/checkbox/checkbox-config.mjs +6 -6
  271. package/esm2020/checkbox/checkbox-module.mjs +19 -19
  272. package/esm2020/checkbox/checkbox-required-validator.mjs +27 -27
  273. package/esm2020/checkbox/checkbox.mjs +316 -316
  274. package/esm2020/checkbox/index.mjs +2 -2
  275. package/esm2020/checkbox/ptsecurity-mosaic-checkbox.mjs +4 -4
  276. package/esm2020/checkbox/public-api.mjs +5 -5
  277. package/esm2020/core/animation/animation.mjs +8 -8
  278. package/esm2020/core/animation/fade-animations.mjs +9 -9
  279. package/esm2020/core/animation/index.mjs +4 -4
  280. package/esm2020/core/animation/select-animations.mjs +45 -45
  281. package/esm2020/core/common-behaviors/color.mjs +30 -30
  282. package/esm2020/core/common-behaviors/common-module.mjs +83 -83
  283. package/esm2020/core/common-behaviors/constructor.mjs +2 -2
  284. package/esm2020/core/common-behaviors/disabled.mjs +17 -17
  285. package/esm2020/core/common-behaviors/error-state.mjs +31 -31
  286. package/esm2020/core/common-behaviors/index.mjs +6 -6
  287. package/esm2020/core/common-behaviors/tabindex.mjs +18 -18
  288. package/esm2020/core/error/error-options.mjs +26 -26
  289. package/esm2020/core/formatters/date/formatter.mjs +359 -359
  290. package/esm2020/core/formatters/date/templates/en-US.mjs +281 -281
  291. package/esm2020/core/formatters/date/templates/ru-RU.mjs +281 -281
  292. package/esm2020/core/formatters/index.mjs +20 -20
  293. package/esm2020/core/formatters/number/formatter.mjs +105 -105
  294. package/esm2020/core/forms/forms-module.mjs +24 -24
  295. package/esm2020/core/forms/forms.directive.mjs +66 -66
  296. package/esm2020/core/forms/index.mjs +3 -3
  297. package/esm2020/core/highlight/highlight.pipe.mjs +17 -17
  298. package/esm2020/core/highlight/index.mjs +19 -19
  299. package/esm2020/core/index.mjs +2 -2
  300. package/esm2020/core/label/label-options.mjs +4 -4
  301. package/esm2020/core/line/line.mjs +70 -70
  302. package/esm2020/core/option/action.mjs +121 -121
  303. package/esm2020/core/option/index.mjs +5 -5
  304. package/esm2020/core/option/optgroup.mjs +31 -31
  305. package/esm2020/core/option/option-module.mjs +21 -21
  306. package/esm2020/core/option/option.mjs +257 -257
  307. package/esm2020/core/overlay/overlay-position-map.mjs +244 -244
  308. package/esm2020/core/pop-up/constants.mjs +34 -34
  309. package/esm2020/core/pop-up/index.mjs +4 -4
  310. package/esm2020/core/pop-up/pop-up-trigger.mjs +239 -239
  311. package/esm2020/core/pop-up/pop-up.mjs +94 -94
  312. package/esm2020/core/ptsecurity-mosaic-core.mjs +4 -4
  313. package/esm2020/core/public-api.mjs +18 -18
  314. package/esm2020/core/select/constants.mjs +27 -27
  315. package/esm2020/core/select/errors.mjs +26 -26
  316. package/esm2020/core/select/events.mjs +2 -2
  317. package/esm2020/core/select/index.mjs +4 -4
  318. package/esm2020/core/selection/constants.mjs +6 -6
  319. package/esm2020/core/selection/index.mjs +4 -4
  320. package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +49 -49
  321. package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs +18 -18
  322. package/esm2020/core/services/measure-scrollbar.service.mjs +48 -48
  323. package/esm2020/core/utils/index.mjs +2 -2
  324. package/esm2020/core/utils/public-api.mjs +2 -2
  325. package/esm2020/core/utils/utils.mjs +5 -5
  326. package/esm2020/core/validation/index.mjs +2 -2
  327. package/esm2020/core/validation/validation.mjs +118 -118
  328. package/esm2020/core/version.mjs +3 -3
  329. package/esm2020/datepicker/calendar-body.component.mjs +106 -106
  330. package/esm2020/datepicker/calendar.component.mjs +362 -362
  331. package/esm2020/datepicker/datepicker-animations.mjs +32 -32
  332. package/esm2020/datepicker/datepicker-errors.mjs +6 -6
  333. package/esm2020/datepicker/datepicker-input.directive.mjs +938 -936
  334. package/esm2020/datepicker/datepicker-intl.mjs +40 -40
  335. package/esm2020/datepicker/datepicker-module.mjs +107 -107
  336. package/esm2020/datepicker/datepicker-toggle.component.mjs +86 -86
  337. package/esm2020/datepicker/datepicker.component.mjs +404 -408
  338. package/esm2020/datepicker/index.mjs +2 -2
  339. package/esm2020/datepicker/month-view.component.mjs +257 -257
  340. package/esm2020/datepicker/multi-year-view.component.mjs +218 -218
  341. package/esm2020/datepicker/ptsecurity-mosaic-datepicker.mjs +4 -4
  342. package/esm2020/datepicker/public-api.mjs +12 -12
  343. package/esm2020/datepicker/year-view.component.mjs +253 -253
  344. package/esm2020/design-tokens/index.mjs +2 -2
  345. package/esm2020/design-tokens/legacy-2017/tokens.mjs +1167 -1137
  346. package/esm2020/design-tokens/pt-2022/tokens.mjs +1237 -1207
  347. package/esm2020/design-tokens/ptsecurity-mosaic-design-tokens.mjs +4 -4
  348. package/esm2020/design-tokens/public-api.mjs +4 -4
  349. package/esm2020/divider/divider.component.mjs +39 -39
  350. package/esm2020/divider/divider.module.mjs +18 -18
  351. package/esm2020/divider/index.mjs +2 -2
  352. package/esm2020/divider/ptsecurity-mosaic-divider.mjs +4 -4
  353. package/esm2020/divider/public-api.mjs +3 -3
  354. package/esm2020/dl/dl.component.mjs +78 -78
  355. package/esm2020/dl/dl.module.mjs +42 -42
  356. package/esm2020/dl/index.mjs +2 -2
  357. package/esm2020/dl/ptsecurity-mosaic-dl.mjs +4 -4
  358. package/esm2020/dl/public-api.mjs +3 -3
  359. package/esm2020/dropdown/dropdown-animations.mjs +41 -41
  360. package/esm2020/dropdown/dropdown-content.directive.mjs +64 -64
  361. package/esm2020/dropdown/dropdown-errors.mjs +29 -29
  362. package/esm2020/dropdown/dropdown-item.component.mjs +139 -139
  363. package/esm2020/dropdown/dropdown-trigger.directive.mjs +489 -489
  364. package/esm2020/dropdown/dropdown.component.mjs +292 -292
  365. package/esm2020/dropdown/dropdown.module.mjs +50 -50
  366. package/esm2020/dropdown/dropdown.types.mjs +24 -24
  367. package/esm2020/dropdown/index.mjs +2 -2
  368. package/esm2020/dropdown/ptsecurity-mosaic-dropdown.mjs +4 -4
  369. package/esm2020/dropdown/public-api.mjs +9 -9
  370. package/esm2020/form-field/cleaner.mjs +23 -23
  371. package/esm2020/form-field/form-field-control.mjs +5 -5
  372. package/esm2020/form-field/form-field-errors.mjs +7 -7
  373. package/esm2020/form-field/form-field.mjs +225 -225
  374. package/esm2020/form-field/form-field.module.mjs +57 -57
  375. package/esm2020/form-field/hint.mjs +34 -23
  376. package/esm2020/form-field/index.mjs +2 -2
  377. package/esm2020/form-field/password-hint.mjs +139 -139
  378. package/esm2020/form-field/prefix.mjs +13 -13
  379. package/esm2020/form-field/ptsecurity-mosaic-form-field.mjs +4 -4
  380. package/esm2020/form-field/public-api.mjs +11 -11
  381. package/esm2020/form-field/stepper.mjs +55 -55
  382. package/esm2020/form-field/suffix.mjs +13 -13
  383. package/esm2020/icon/icon.component.mjs +44 -44
  384. package/esm2020/icon/icon.module.mjs +38 -38
  385. package/esm2020/icon/index.mjs +2 -2
  386. package/esm2020/icon/ptsecurity-mosaic-icon.mjs +4 -4
  387. package/esm2020/icon/public-api.mjs +3 -3
  388. package/esm2020/index.mjs +2 -2
  389. package/esm2020/input/index.mjs +2 -2
  390. package/esm2020/input/input-errors.mjs +4 -4
  391. package/esm2020/input/input-number-validators.mjs +92 -92
  392. package/esm2020/input/input-number.mjs +163 -163
  393. package/esm2020/input/input-password.mjs +372 -372
  394. package/esm2020/input/input-value-accessor.mjs +3 -3
  395. package/esm2020/input/input.mjs +334 -334
  396. package/esm2020/input/input.module.mjs +65 -65
  397. package/esm2020/input/ptsecurity-mosaic-input.mjs +4 -4
  398. package/esm2020/input/public-api.mjs +7 -7
  399. package/esm2020/link/index.mjs +2 -2
  400. package/esm2020/link/link.component.mjs +107 -107
  401. package/esm2020/link/link.module.mjs +26 -26
  402. package/esm2020/link/ptsecurity-mosaic-link.mjs +4 -4
  403. package/esm2020/link/public-api.mjs +3 -3
  404. package/esm2020/list/index.mjs +2 -2
  405. package/esm2020/list/list-selection.component.mjs +689 -686
  406. package/esm2020/list/list.component.mjs +44 -44
  407. package/esm2020/list/list.module.mjs +55 -55
  408. package/esm2020/list/ptsecurity-mosaic-list.mjs +4 -4
  409. package/esm2020/list/public-api.mjs +4 -4
  410. package/esm2020/loader-overlay/index.mjs +2 -0
  411. package/esm2020/loader-overlay/loader-overlay.component.mjs +99 -0
  412. package/esm2020/loader-overlay/loader-overlay.module.mjs +50 -0
  413. package/esm2020/loader-overlay/ptsecurity-mosaic-loader-overlay.mjs +5 -0
  414. package/esm2020/loader-overlay/public-api.mjs +3 -0
  415. package/esm2020/modal/css-unit.pipe.mjs +17 -17
  416. package/esm2020/modal/index.mjs +2 -2
  417. package/esm2020/modal/modal-control.service.mjs +85 -85
  418. package/esm2020/modal/modal-ref.class.mjs +8 -8
  419. package/esm2020/modal/modal-util.mjs +17 -17
  420. package/esm2020/modal/modal.component.mjs +509 -501
  421. package/esm2020/modal/modal.directive.mjs +52 -52
  422. package/esm2020/modal/modal.module.mjs +72 -72
  423. package/esm2020/modal/modal.service.mjs +124 -124
  424. package/esm2020/modal/modal.type.mjs +7 -7
  425. package/esm2020/modal/ptsecurity-mosaic-modal.mjs +4 -4
  426. package/esm2020/modal/public-api.mjs +7 -7
  427. package/esm2020/navbar/index.mjs +2 -2
  428. package/esm2020/navbar/navbar-item.component.mjs +582 -582
  429. package/esm2020/navbar/navbar.component.mjs +239 -237
  430. package/esm2020/navbar/navbar.module.mjs +92 -92
  431. package/esm2020/navbar/ptsecurity-mosaic-navbar.mjs +4 -4
  432. package/esm2020/navbar/public-api.mjs +5 -5
  433. package/esm2020/navbar/vertical-navbar.animation.mjs +10 -10
  434. package/esm2020/navbar/vertical-navbar.component.mjs +114 -114
  435. package/esm2020/popover/index.mjs +2 -2
  436. package/esm2020/popover/popover-animations.mjs +16 -16
  437. package/esm2020/popover/popover-confirm.component.mjs +108 -108
  438. package/esm2020/popover/popover.component.mjs +253 -253
  439. package/esm2020/popover/popover.module.mjs +24 -24
  440. package/esm2020/popover/ptsecurity-mosaic-popover.mjs +4 -4
  441. package/esm2020/popover/public-api.mjs +5 -5
  442. package/esm2020/progress-bar/index.mjs +2 -2
  443. package/esm2020/progress-bar/progress-bar.component.mjs +42 -42
  444. package/esm2020/progress-bar/progress-bar.module.mjs +30 -30
  445. package/esm2020/progress-bar/ptsecurity-mosaic-progress-bar.mjs +4 -4
  446. package/esm2020/progress-bar/public-api.mjs +3 -3
  447. package/esm2020/progress-spinner/index.mjs +2 -2
  448. package/esm2020/progress-spinner/progress-spinner.component.mjs +46 -46
  449. package/esm2020/progress-spinner/progress-spinner.module.mjs +30 -30
  450. package/esm2020/progress-spinner/ptsecurity-mosaic-progress-spinner.mjs +4 -4
  451. package/esm2020/progress-spinner/public-api.mjs +3 -3
  452. package/esm2020/ptsecurity-mosaic.mjs +4 -4
  453. package/esm2020/public-api.mjs +2 -2
  454. package/esm2020/radio/index.mjs +2 -2
  455. package/esm2020/radio/ptsecurity-mosaic-radio.mjs +4 -4
  456. package/esm2020/radio/public-api.mjs +3 -3
  457. package/esm2020/radio/radio.component.mjs +458 -458
  458. package/esm2020/radio/radio.module.mjs +20 -20
  459. package/esm2020/select/index.mjs +2 -2
  460. package/esm2020/select/ptsecurity-mosaic-select.mjs +4 -4
  461. package/esm2020/select/public-api.mjs +4 -4
  462. package/esm2020/select/select-option.directive.mjs +65 -65
  463. package/esm2020/select/select.component.mjs +1117 -1107
  464. package/esm2020/select/select.module.mjs +73 -73
  465. package/esm2020/sidebar/index.mjs +2 -2
  466. package/esm2020/sidebar/ptsecurity-mosaic-sidebar.mjs +4 -4
  467. package/esm2020/sidebar/public-api.mjs +3 -3
  468. package/esm2020/sidebar/sidebar-animations.mjs +23 -23
  469. package/esm2020/sidebar/sidebar.component.mjs +146 -146
  470. package/esm2020/sidebar/sidebar.module.mjs +30 -30
  471. package/esm2020/sidepanel/index.mjs +2 -2
  472. package/esm2020/sidepanel/ptsecurity-mosaic-sidepanel.mjs +4 -4
  473. package/esm2020/sidepanel/public-api.mjs +7 -7
  474. package/esm2020/sidepanel/sidepanel-animations.mjs +26 -26
  475. package/esm2020/sidepanel/sidepanel-config.mjs +26 -26
  476. package/esm2020/sidepanel/sidepanel-container.component.mjs +106 -106
  477. package/esm2020/sidepanel/sidepanel-directives.mjs +159 -159
  478. package/esm2020/sidepanel/sidepanel-ref.mjs +53 -53
  479. package/esm2020/sidepanel/sidepanel.module.mjs +74 -74
  480. package/esm2020/sidepanel/sidepanel.service.mjs +167 -167
  481. package/esm2020/splitter/index.mjs +2 -2
  482. package/esm2020/splitter/ptsecurity-mosaic-splitter.mjs +4 -4
  483. package/esm2020/splitter/public-api.mjs +3 -3
  484. package/esm2020/splitter/splitter.component.mjs +482 -482
  485. package/esm2020/splitter/splitter.module.mjs +40 -40
  486. package/esm2020/table/index.mjs +2 -2
  487. package/esm2020/table/ptsecurity-mosaic-table.mjs +4 -4
  488. package/esm2020/table/public-api.mjs +3 -3
  489. package/esm2020/table/table.component.mjs +16 -16
  490. package/esm2020/table/table.module.mjs +30 -30
  491. package/esm2020/tabs/index.mjs +2 -2
  492. package/esm2020/tabs/paginated-tab-header.mjs +479 -479
  493. package/esm2020/tabs/ptsecurity-mosaic-tabs.mjs +4 -4
  494. package/esm2020/tabs/public-api.mjs +11 -11
  495. package/esm2020/tabs/tab-body.component.mjs +178 -178
  496. package/esm2020/tabs/tab-content.directive.mjs +15 -15
  497. package/esm2020/tabs/tab-group.component.mjs +350 -350
  498. package/esm2020/tabs/tab-header.component.mjs +67 -67
  499. package/esm2020/tabs/tab-label-wrapper.directive.mjs +78 -78
  500. package/esm2020/tabs/tab-label.directive.mjs +17 -17
  501. package/esm2020/tabs/tab-nav-bar/index.mjs +2 -2
  502. package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +110 -110
  503. package/esm2020/tabs/tab.component.mjs +133 -133
  504. package/esm2020/tabs/tabs-animations.mjs +24 -24
  505. package/esm2020/tabs/tabs.module.mjs +104 -104
  506. package/esm2020/tags/index.mjs +2 -2
  507. package/esm2020/tags/ptsecurity-mosaic-tags.mjs +4 -4
  508. package/esm2020/tags/public-api.mjs +6 -6
  509. package/esm2020/tags/tag-default-options.mjs +4 -4
  510. package/esm2020/tags/tag-input.mjs +229 -229
  511. package/esm2020/tags/tag-list.component.mjs +722 -722
  512. package/esm2020/tags/tag-text-control.mjs +2 -2
  513. package/esm2020/tags/tag.component.mjs +375 -375
  514. package/esm2020/tags/tag.module.mjs +56 -56
  515. package/esm2020/textarea/index.mjs +2 -2
  516. package/esm2020/textarea/ptsecurity-mosaic-textarea.mjs +4 -4
  517. package/esm2020/textarea/public-api.mjs +3 -3
  518. package/esm2020/textarea/textarea.component.mjs +269 -269
  519. package/esm2020/textarea/textarea.module.mjs +21 -21
  520. package/esm2020/timepicker/index.mjs +2 -2
  521. package/esm2020/timepicker/ptsecurity-mosaic-timepicker.mjs +4 -4
  522. package/esm2020/timepicker/public-api.mjs +4 -4
  523. package/esm2020/timepicker/timepicker.constants.mjs +25 -25
  524. package/esm2020/timepicker/timepicker.directive.mjs +665 -676
  525. package/esm2020/timepicker/timepicker.module.mjs +34 -34
  526. package/esm2020/toggle/index.mjs +2 -2
  527. package/esm2020/toggle/ptsecurity-mosaic-toggle.mjs +4 -4
  528. package/esm2020/toggle/public-api.mjs +3 -3
  529. package/esm2020/toggle/toggle.component.mjs +158 -158
  530. package/esm2020/toggle/toggle.module.mjs +20 -20
  531. package/esm2020/tooltip/index.mjs +2 -2
  532. package/esm2020/tooltip/ptsecurity-mosaic-tooltip.mjs +4 -4
  533. package/esm2020/tooltip/public-api.mjs +3 -3
  534. package/esm2020/tooltip/tooltip.animations.mjs +19 -19
  535. package/esm2020/tooltip/tooltip.component.mjs +295 -295
  536. package/esm2020/tooltip/tooltip.module.mjs +43 -43
  537. package/esm2020/tree/control/base-tree-control.mjs +60 -60
  538. package/esm2020/tree/control/flat-tree-control.mjs +126 -126
  539. package/esm2020/tree/control/nested-tree-control.mjs +41 -41
  540. package/esm2020/tree/control/tree-control.mjs +2 -2
  541. package/esm2020/tree/data-source/flat-data-source.mjs +162 -162
  542. package/esm2020/tree/data-source/nested-data-source.mjs +30 -30
  543. package/esm2020/tree/index.mjs +2 -2
  544. package/esm2020/tree/node.mjs +31 -31
  545. package/esm2020/tree/outlet.mjs +15 -15
  546. package/esm2020/tree/padding.directive.mjs +113 -110
  547. package/esm2020/tree/ptsecurity-mosaic-tree.mjs +4 -4
  548. package/esm2020/tree/public-api.mjs +16 -16
  549. package/esm2020/tree/toggle.mjs +80 -80
  550. package/esm2020/tree/tree-base.mjs +243 -243
  551. package/esm2020/tree/tree-errors.mjs +36 -36
  552. package/esm2020/tree/tree-option.component.mjs +248 -236
  553. package/esm2020/tree/tree-selection.component.mjs +541 -540
  554. package/esm2020/tree/tree.mjs +15 -15
  555. package/esm2020/tree/tree.module.mjs +57 -57
  556. package/esm2020/tree-select/index.mjs +2 -2
  557. package/esm2020/tree-select/ptsecurity-mosaic-tree-select.mjs +4 -4
  558. package/esm2020/tree-select/public-api.mjs +3 -3
  559. package/esm2020/tree-select/tree-select.component.mjs +939 -929
  560. package/esm2020/tree-select/tree-select.module.mjs +47 -47
  561. package/fesm2015/ptsecurity-mosaic-autocomplete.mjs +726 -726
  562. package/fesm2015/ptsecurity-mosaic-autocomplete.mjs.map +1 -1
  563. package/fesm2015/ptsecurity-mosaic-button-toggle.mjs +367 -367
  564. package/fesm2015/ptsecurity-mosaic-button-toggle.mjs.map +1 -1
  565. package/fesm2015/ptsecurity-mosaic-button.mjs +160 -160
  566. package/fesm2015/ptsecurity-mosaic-button.mjs.map +1 -1
  567. package/fesm2015/ptsecurity-mosaic-card.mjs +96 -96
  568. package/fesm2015/ptsecurity-mosaic-card.mjs.map +1 -1
  569. package/fesm2015/ptsecurity-mosaic-checkbox.mjs +348 -348
  570. package/fesm2015/ptsecurity-mosaic-checkbox.mjs.map +1 -1
  571. package/fesm2015/ptsecurity-mosaic-core.mjs +2652 -2652
  572. package/fesm2015/ptsecurity-mosaic-core.mjs.map +1 -1
  573. package/fesm2015/ptsecurity-mosaic-datepicker.mjs +2682 -2684
  574. package/fesm2015/ptsecurity-mosaic-datepicker.mjs.map +1 -1
  575. package/fesm2015/ptsecurity-mosaic-design-tokens.mjs +2433 -2343
  576. package/fesm2015/ptsecurity-mosaic-design-tokens.mjs.map +1 -1
  577. package/fesm2015/ptsecurity-mosaic-divider.mjs +48 -48
  578. package/fesm2015/ptsecurity-mosaic-divider.mjs.map +1 -1
  579. package/fesm2015/ptsecurity-mosaic-dl.mjs +108 -108
  580. package/fesm2015/ptsecurity-mosaic-dl.mjs.map +1 -1
  581. package/fesm2015/ptsecurity-mosaic-dropdown.mjs +1069 -1069
  582. package/fesm2015/ptsecurity-mosaic-dropdown.mjs.map +1 -1
  583. package/fesm2015/ptsecurity-mosaic-form-field.mjs +522 -512
  584. package/fesm2015/ptsecurity-mosaic-form-field.mjs.map +1 -1
  585. package/fesm2015/ptsecurity-mosaic-icon.mjs +73 -73
  586. package/fesm2015/ptsecurity-mosaic-icon.mjs.map +1 -1
  587. package/fesm2015/ptsecurity-mosaic-input.mjs +979 -979
  588. package/fesm2015/ptsecurity-mosaic-input.mjs.map +1 -1
  589. package/fesm2015/ptsecurity-mosaic-link.mjs +121 -121
  590. package/fesm2015/ptsecurity-mosaic-link.mjs.map +1 -1
  591. package/fesm2015/ptsecurity-mosaic-list.mjs +765 -762
  592. package/fesm2015/ptsecurity-mosaic-list.mjs.map +1 -1
  593. package/fesm2015/ptsecurity-mosaic-loader-overlay.mjs +155 -0
  594. package/fesm2015/ptsecurity-mosaic-loader-overlay.mjs.map +1 -0
  595. package/fesm2015/ptsecurity-mosaic-modal.mjs +833 -824
  596. package/fesm2015/ptsecurity-mosaic-modal.mjs.map +1 -1
  597. package/fesm2015/ptsecurity-mosaic-navbar.mjs +996 -994
  598. package/fesm2015/ptsecurity-mosaic-navbar.mjs.map +1 -1
  599. package/fesm2015/ptsecurity-mosaic-popover.mjs +364 -364
  600. package/fesm2015/ptsecurity-mosaic-popover.mjs.map +1 -1
  601. package/fesm2015/ptsecurity-mosaic-progress-bar.mjs +61 -61
  602. package/fesm2015/ptsecurity-mosaic-progress-bar.mjs.map +1 -1
  603. package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs +65 -65
  604. package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs.map +1 -1
  605. package/fesm2015/ptsecurity-mosaic-radio.mjs +464 -464
  606. package/fesm2015/ptsecurity-mosaic-radio.mjs.map +1 -1
  607. package/fesm2015/ptsecurity-mosaic-select.mjs +1213 -1203
  608. package/fesm2015/ptsecurity-mosaic-select.mjs.map +1 -1
  609. package/fesm2015/ptsecurity-mosaic-sidebar.mjs +185 -185
  610. package/fesm2015/ptsecurity-mosaic-sidebar.mjs.map +1 -1
  611. package/fesm2015/ptsecurity-mosaic-sidepanel.mjs +555 -555
  612. package/fesm2015/ptsecurity-mosaic-sidepanel.mjs.map +1 -1
  613. package/fesm2015/ptsecurity-mosaic-splitter.mjs +511 -511
  614. package/fesm2015/ptsecurity-mosaic-splitter.mjs.map +1 -1
  615. package/fesm2015/ptsecurity-mosaic-table.mjs +36 -36
  616. package/fesm2015/ptsecurity-mosaic-table.mjs.map +1 -1
  617. package/fesm2015/ptsecurity-mosaic-tabs.mjs +1460 -1460
  618. package/fesm2015/ptsecurity-mosaic-tabs.mjs.map +1 -1
  619. package/fesm2015/ptsecurity-mosaic-tags.mjs +1342 -1342
  620. package/fesm2015/ptsecurity-mosaic-tags.mjs.map +1 -1
  621. package/fesm2015/ptsecurity-mosaic-textarea.mjs +274 -274
  622. package/fesm2015/ptsecurity-mosaic-textarea.mjs.map +1 -1
  623. package/fesm2015/ptsecurity-mosaic-timepicker.mjs +703 -714
  624. package/fesm2015/ptsecurity-mosaic-timepicker.mjs.map +1 -1
  625. package/fesm2015/ptsecurity-mosaic-toggle.mjs +163 -163
  626. package/fesm2015/ptsecurity-mosaic-toggle.mjs.map +1 -1
  627. package/fesm2015/ptsecurity-mosaic-tooltip.mjs +344 -344
  628. package/fesm2015/ptsecurity-mosaic-tooltip.mjs.map +1 -1
  629. package/fesm2015/ptsecurity-mosaic-tree-select.mjs +954 -944
  630. package/fesm2015/ptsecurity-mosaic-tree-select.mjs.map +1 -1
  631. package/fesm2015/ptsecurity-mosaic-tree.mjs +1696 -1682
  632. package/fesm2015/ptsecurity-mosaic-tree.mjs.map +1 -1
  633. package/fesm2015/ptsecurity-mosaic.mjs +2 -2
  634. package/fesm2020/ptsecurity-mosaic-autocomplete.mjs +722 -722
  635. package/fesm2020/ptsecurity-mosaic-autocomplete.mjs.map +1 -1
  636. package/fesm2020/ptsecurity-mosaic-button-toggle.mjs +365 -365
  637. package/fesm2020/ptsecurity-mosaic-button-toggle.mjs.map +1 -1
  638. package/fesm2020/ptsecurity-mosaic-button.mjs +160 -160
  639. package/fesm2020/ptsecurity-mosaic-button.mjs.map +1 -1
  640. package/fesm2020/ptsecurity-mosaic-card.mjs +96 -96
  641. package/fesm2020/ptsecurity-mosaic-card.mjs.map +1 -1
  642. package/fesm2020/ptsecurity-mosaic-checkbox.mjs +346 -346
  643. package/fesm2020/ptsecurity-mosaic-checkbox.mjs.map +1 -1
  644. package/fesm2020/ptsecurity-mosaic-core.mjs +2681 -2681
  645. package/fesm2020/ptsecurity-mosaic-core.mjs.map +1 -1
  646. package/fesm2020/ptsecurity-mosaic-datepicker.mjs +2667 -2669
  647. package/fesm2020/ptsecurity-mosaic-datepicker.mjs.map +1 -1
  648. package/fesm2020/ptsecurity-mosaic-design-tokens.mjs +2433 -2343
  649. package/fesm2020/ptsecurity-mosaic-design-tokens.mjs.map +1 -1
  650. package/fesm2020/ptsecurity-mosaic-divider.mjs +48 -48
  651. package/fesm2020/ptsecurity-mosaic-divider.mjs.map +1 -1
  652. package/fesm2020/ptsecurity-mosaic-dl.mjs +108 -108
  653. package/fesm2020/ptsecurity-mosaic-dl.mjs.map +1 -1
  654. package/fesm2020/ptsecurity-mosaic-dropdown.mjs +1056 -1056
  655. package/fesm2020/ptsecurity-mosaic-dropdown.mjs.map +1 -1
  656. package/fesm2020/ptsecurity-mosaic-form-field.mjs +507 -497
  657. package/fesm2020/ptsecurity-mosaic-form-field.mjs.map +1 -1
  658. package/fesm2020/ptsecurity-mosaic-icon.mjs +71 -71
  659. package/fesm2020/ptsecurity-mosaic-icon.mjs.map +1 -1
  660. package/fesm2020/ptsecurity-mosaic-input.mjs +968 -968
  661. package/fesm2020/ptsecurity-mosaic-input.mjs.map +1 -1
  662. package/fesm2020/ptsecurity-mosaic-link.mjs +120 -120
  663. package/fesm2020/ptsecurity-mosaic-link.mjs.map +1 -1
  664. package/fesm2020/ptsecurity-mosaic-list.mjs +758 -755
  665. package/fesm2020/ptsecurity-mosaic-list.mjs.map +1 -1
  666. package/fesm2020/ptsecurity-mosaic-loader-overlay.mjs +153 -0
  667. package/fesm2020/ptsecurity-mosaic-loader-overlay.mjs.map +1 -0
  668. package/fesm2020/ptsecurity-mosaic-modal.mjs +828 -820
  669. package/fesm2020/ptsecurity-mosaic-modal.mjs.map +1 -1
  670. package/fesm2020/ptsecurity-mosaic-navbar.mjs +980 -978
  671. package/fesm2020/ptsecurity-mosaic-navbar.mjs.map +1 -1
  672. package/fesm2020/ptsecurity-mosaic-popover.mjs +360 -360
  673. package/fesm2020/ptsecurity-mosaic-popover.mjs.map +1 -1
  674. package/fesm2020/ptsecurity-mosaic-progress-bar.mjs +61 -61
  675. package/fesm2020/ptsecurity-mosaic-progress-bar.mjs.map +1 -1
  676. package/fesm2020/ptsecurity-mosaic-progress-spinner.mjs +65 -65
  677. package/fesm2020/ptsecurity-mosaic-progress-spinner.mjs.map +1 -1
  678. package/fesm2020/ptsecurity-mosaic-radio.mjs +462 -462
  679. package/fesm2020/ptsecurity-mosaic-radio.mjs.map +1 -1
  680. package/fesm2020/ptsecurity-mosaic-select.mjs +1208 -1198
  681. package/fesm2020/ptsecurity-mosaic-select.mjs.map +1 -1
  682. package/fesm2020/ptsecurity-mosaic-sidebar.mjs +185 -185
  683. package/fesm2020/ptsecurity-mosaic-sidebar.mjs.map +1 -1
  684. package/fesm2020/ptsecurity-mosaic-sidepanel.mjs +552 -552
  685. package/fesm2020/ptsecurity-mosaic-sidepanel.mjs.map +1 -1
  686. package/fesm2020/ptsecurity-mosaic-splitter.mjs +511 -511
  687. package/fesm2020/ptsecurity-mosaic-splitter.mjs.map +1 -1
  688. package/fesm2020/ptsecurity-mosaic-table.mjs +36 -36
  689. package/fesm2020/ptsecurity-mosaic-table.mjs.map +1 -1
  690. package/fesm2020/ptsecurity-mosaic-tabs.mjs +1445 -1445
  691. package/fesm2020/ptsecurity-mosaic-tabs.mjs.map +1 -1
  692. package/fesm2020/ptsecurity-mosaic-tags.mjs +1335 -1335
  693. package/fesm2020/ptsecurity-mosaic-tags.mjs.map +1 -1
  694. package/fesm2020/ptsecurity-mosaic-textarea.mjs +272 -272
  695. package/fesm2020/ptsecurity-mosaic-textarea.mjs.map +1 -1
  696. package/fesm2020/ptsecurity-mosaic-timepicker.mjs +700 -711
  697. package/fesm2020/ptsecurity-mosaic-timepicker.mjs.map +1 -1
  698. package/fesm2020/ptsecurity-mosaic-toggle.mjs +163 -163
  699. package/fesm2020/ptsecurity-mosaic-toggle.mjs.map +1 -1
  700. package/fesm2020/ptsecurity-mosaic-tooltip.mjs +336 -336
  701. package/fesm2020/ptsecurity-mosaic-tooltip.mjs.map +1 -1
  702. package/fesm2020/ptsecurity-mosaic-tree-select.mjs +951 -941
  703. package/fesm2020/ptsecurity-mosaic-tree-select.mjs.map +1 -1
  704. package/fesm2020/ptsecurity-mosaic-tree.mjs +1683 -1669
  705. package/fesm2020/ptsecurity-mosaic-tree.mjs.map +1 -1
  706. package/fesm2020/ptsecurity-mosaic.mjs +2 -2
  707. package/form-field/cleaner.d.ts +7 -7
  708. package/form-field/form-field-control.d.ts +37 -37
  709. package/form-field/form-field-errors.d.ts +2 -2
  710. package/form-field/form-field.d.ts +69 -69
  711. package/form-field/form-field.module.d.ts +15 -15
  712. package/form-field/hint.d.ts +14 -6
  713. package/form-field/index.d.ts +1 -1
  714. package/form-field/password-hint.d.ts +40 -40
  715. package/form-field/prefix.d.ts +5 -5
  716. package/form-field/ptsecurity-mosaic-form-field.d.ts +5 -5
  717. package/form-field/public-api.d.ts +10 -10
  718. package/form-field/stepper.d.ts +11 -11
  719. package/form-field/suffix.d.ts +5 -5
  720. package/icon/icon.component.d.ts +18 -18
  721. package/icon/icon.module.d.ts +10 -10
  722. package/icon/index.d.ts +1 -1
  723. package/icon/ptsecurity-mosaic-icon.d.ts +5 -5
  724. package/icon/public-api.d.ts +2 -2
  725. package/index.d.ts +1 -1
  726. package/input/index.d.ts +1 -1
  727. package/input/input-errors.d.ts +1 -1
  728. package/input/input-number-validators.d.ts +39 -39
  729. package/input/input-number.d.ts +33 -33
  730. package/input/input-password.d.ts +123 -123
  731. package/input/input-value-accessor.d.ts +4 -4
  732. package/input/input.d.ts +116 -116
  733. package/input/input.module.d.ts +14 -14
  734. package/input/ptsecurity-mosaic-input.d.ts +5 -5
  735. package/input/public-api.d.ts +6 -6
  736. package/link/index.d.ts +1 -1
  737. package/link/link.component.d.ts +38 -38
  738. package/link/link.module.d.ts +9 -9
  739. package/link/ptsecurity-mosaic-link.d.ts +5 -5
  740. package/link/public-api.d.ts +2 -2
  741. package/list/index.d.ts +1 -1
  742. package/list/list-selection.component.d.ts +168 -168
  743. package/list/list.component.d.ts +18 -18
  744. package/list/list.module.d.ts +11 -11
  745. package/list/ptsecurity-mosaic-list.d.ts +5 -5
  746. package/list/public-api.d.ts +3 -3
  747. package/{toggle → loader-overlay}/README.md +0 -0
  748. package/loader-overlay/index.d.ts +1 -0
  749. package/loader-overlay/loader-overlay.component.d.ts +33 -0
  750. package/loader-overlay/loader-overlay.module.d.ts +11 -0
  751. package/loader-overlay/package.json +10 -0
  752. package/loader-overlay/ptsecurity-mosaic-loader-overlay.d.ts +5 -0
  753. package/loader-overlay/public-api.d.ts +2 -0
  754. package/modal/README.md +33 -33
  755. package/modal/css-unit.pipe.d.ts +7 -7
  756. package/modal/index.d.ts +1 -1
  757. package/modal/modal-control.service.d.ts +20 -20
  758. package/modal/modal-ref.class.d.ts +36 -36
  759. package/modal/modal-util.d.ts +12 -12
  760. package/modal/modal.component.d.ts +128 -126
  761. package/modal/modal.directive.d.ts +17 -17
  762. package/modal/modal.module.d.ts +14 -14
  763. package/modal/modal.service.d.ts +33 -33
  764. package/modal/modal.type.d.ts +60 -59
  765. package/modal/ptsecurity-mosaic-modal.d.ts +5 -5
  766. package/modal/public-api.d.ts +6 -6
  767. package/navbar/README.md +41 -41
  768. package/navbar/index.d.ts +1 -1
  769. package/navbar/navbar-item.component.d.ts +161 -161
  770. package/navbar/navbar.component.d.ts +58 -58
  771. package/navbar/navbar.module.d.ts +14 -14
  772. package/navbar/ptsecurity-mosaic-navbar.d.ts +5 -5
  773. package/navbar/public-api.d.ts +4 -4
  774. package/navbar/vertical-navbar.animation.d.ts +2 -2
  775. package/navbar/vertical-navbar.component.d.ts +23 -23
  776. package/package.json +12 -4
  777. package/popover/README.md +32 -32
  778. package/popover/index.d.ts +1 -1
  779. package/popover/popover-animations.d.ts +4 -4
  780. package/popover/popover-confirm.component.d.ts +33 -33
  781. package/popover/popover.component.d.ts +74 -74
  782. package/popover/popover.module.d.ts +12 -12
  783. package/popover/ptsecurity-mosaic-popover.d.ts +5 -5
  784. package/popover/public-api.d.ts +4 -4
  785. package/prebuilt-themes/dark-theme.css +1 -1
  786. package/prebuilt-themes/default-theme.css +1 -1
  787. package/progress-bar/index.d.ts +1 -1
  788. package/progress-bar/progress-bar.component.d.ts +18 -18
  789. package/progress-bar/progress-bar.module.d.ts +9 -9
  790. package/progress-bar/ptsecurity-mosaic-progress-bar.d.ts +5 -5
  791. package/progress-bar/public-api.d.ts +2 -2
  792. package/progress-spinner/index.d.ts +1 -1
  793. package/progress-spinner/progress-spinner.component.d.ts +19 -19
  794. package/progress-spinner/progress-spinner.module.d.ts +9 -9
  795. package/progress-spinner/ptsecurity-mosaic-progress-spinner.d.ts +5 -5
  796. package/progress-spinner/public-api.d.ts +2 -2
  797. package/ptsecurity-mosaic.d.ts +5 -5
  798. package/public-api.d.ts +1 -1
  799. package/radio/index.d.ts +1 -1
  800. package/radio/ptsecurity-mosaic-radio.d.ts +5 -5
  801. package/radio/public-api.d.ts +2 -2
  802. package/radio/radio.component.d.ts +207 -207
  803. package/radio/radio.module.d.ts +10 -10
  804. package/schematics/README.md +35 -35
  805. package/select/index.d.ts +1 -1
  806. package/select/ptsecurity-mosaic-select.d.ts +5 -5
  807. package/select/public-api.d.ts +3 -3
  808. package/select/select-option.directive.d.ts +20 -20
  809. package/select/select.component.d.ts +310 -307
  810. package/select/select.module.d.ts +15 -15
  811. package/sidebar/index.d.ts +1 -1
  812. package/sidebar/ptsecurity-mosaic-sidebar.d.ts +5 -5
  813. package/sidebar/public-api.d.ts +2 -2
  814. package/sidebar/sidebar-animations.d.ts +8 -8
  815. package/sidebar/sidebar.component.d.ts +53 -53
  816. package/sidebar/sidebar.module.d.ts +8 -8
  817. package/sidepanel/index.d.ts +1 -1
  818. package/sidepanel/ptsecurity-mosaic-sidepanel.d.ts +5 -5
  819. package/sidepanel/public-api.d.ts +6 -6
  820. package/sidepanel/sidepanel-animations.d.ts +14 -14
  821. package/sidepanel/sidepanel-config.d.ts +25 -25
  822. package/sidepanel/sidepanel-container.component.d.ts +45 -45
  823. package/sidepanel/sidepanel-directives.d.ts +50 -50
  824. package/sidepanel/sidepanel-ref.d.ts +24 -24
  825. package/sidepanel/sidepanel.module.d.ts +15 -15
  826. package/sidepanel/sidepanel.service.d.ts +57 -57
  827. package/splitter/index.d.ts +1 -1
  828. package/splitter/ptsecurity-mosaic-splitter.d.ts +5 -5
  829. package/splitter/public-api.d.ts +2 -2
  830. package/splitter/splitter.component.d.ts +130 -130
  831. package/splitter/splitter.module.d.ts +9 -9
  832. package/table/index.d.ts +1 -1
  833. package/table/ptsecurity-mosaic-table.d.ts +5 -5
  834. package/table/public-api.d.ts +2 -2
  835. package/table/table.component.d.ts +5 -5
  836. package/table/table.module.d.ts +10 -10
  837. package/tabs/index.d.ts +1 -1
  838. package/tabs/paginated-tab-header.d.ts +179 -179
  839. package/tabs/ptsecurity-mosaic-tabs.d.ts +5 -5
  840. package/tabs/public-api.d.ts +10 -10
  841. package/tabs/tab-body.component.d.ts +95 -95
  842. package/tabs/tab-content.directive.d.ts +9 -9
  843. package/tabs/tab-group.component.d.ts +133 -133
  844. package/tabs/tab-header.component.d.ts +35 -35
  845. package/tabs/tab-label-wrapper.directive.d.ts +30 -30
  846. package/tabs/tab-label.directive.d.ts +9 -9
  847. package/tabs/tab-nav-bar/index.d.ts +1 -1
  848. package/tabs/tab-nav-bar/tab-nav-bar.d.ts +38 -38
  849. package/tabs/tab.component.d.ts +66 -66
  850. package/tabs/tabs-animations.d.ts +4 -4
  851. package/tabs/tabs.module.d.ts +20 -20
  852. package/tags/index.d.ts +1 -1
  853. package/tags/ptsecurity-mosaic-tags.d.ts +5 -5
  854. package/tags/public-api.d.ts +5 -5
  855. package/tags/tag-default-options.d.ts +8 -8
  856. package/tags/tag-input.d.ts +77 -77
  857. package/tags/tag-list.component.d.ts +240 -240
  858. package/tags/tag-text-control.d.ts +10 -10
  859. package/tags/tag.component.d.ts +135 -135
  860. package/tags/tag.module.d.ts +11 -11
  861. package/textarea/index.d.ts +1 -1
  862. package/textarea/ptsecurity-mosaic-textarea.d.ts +5 -5
  863. package/textarea/public-api.d.ts +2 -2
  864. package/textarea/textarea.component.d.ts +111 -111
  865. package/textarea/textarea.module.d.ts +11 -11
  866. package/timepicker/index.d.ts +1 -1
  867. package/timepicker/ptsecurity-mosaic-timepicker.d.ts +5 -5
  868. package/timepicker/public-api.d.ts +3 -3
  869. package/timepicker/timepicker.constants.d.ts +20 -20
  870. package/timepicker/timepicker.directive.d.ts +146 -147
  871. package/timepicker/timepicker.module.d.ts +11 -11
  872. package/toggle/index.d.ts +1 -1
  873. package/toggle/ptsecurity-mosaic-toggle.d.ts +5 -5
  874. package/toggle/public-api.d.ts +2 -2
  875. package/toggle/toggle.component.d.ts +54 -54
  876. package/toggle/toggle.module.d.ts +10 -10
  877. package/tooltip/index.d.ts +1 -1
  878. package/tooltip/ptsecurity-mosaic-tooltip.d.ts +5 -5
  879. package/tooltip/public-api.d.ts +2 -2
  880. package/tooltip/tooltip.animations.d.ts +8 -8
  881. package/tooltip/tooltip.component.d.ts +91 -91
  882. package/tooltip/tooltip.module.d.ts +9 -9
  883. package/tree/control/base-tree-control.d.ts +40 -40
  884. package/tree/control/flat-tree-control.d.ts +52 -52
  885. package/tree/control/nested-tree-control.d.ts +19 -19
  886. package/tree/control/tree-control.d.ts +44 -44
  887. package/tree/data-source/flat-data-source.d.ts +80 -80
  888. package/tree/data-source/nested-data-source.d.ts +15 -15
  889. package/tree/index.d.ts +1 -1
  890. package/tree/node.d.ts +34 -34
  891. package/tree/outlet.d.ts +9 -9
  892. package/tree/padding.directive.d.ts +47 -45
  893. package/tree/ptsecurity-mosaic-tree.d.ts +5 -5
  894. package/tree/public-api.d.ts +15 -15
  895. package/tree/toggle.d.ts +28 -28
  896. package/tree/tree-base.d.ts +97 -97
  897. package/tree/tree-errors.d.ts +25 -25
  898. package/tree/tree-option.component.d.ts +72 -68
  899. package/tree/tree-selection.component.d.ts +132 -132
  900. package/tree/tree.d.ts +6 -6
  901. package/tree/tree.module.d.ts +16 -16
  902. package/tree-select/index.d.ts +1 -1
  903. package/tree-select/ptsecurity-mosaic-tree-select.d.ts +5 -5
  904. package/tree-select/public-api.d.ts +2 -2
  905. package/tree-select/tree-select.component.d.ts +277 -274
  906. package/tree-select/tree-select.module.d.ts +14 -14
@@ -17,1358 +17,1358 @@ import { take, takeUntil, startWith } from 'rxjs/operators';
17
17
  import { McIcon } from '@ptsecurity/mosaic/icon';
18
18
  import * as i2 from '@angular/cdk/bidi';
19
19
 
20
- /** Injection token to be used to override the default options for the chips module. */
20
+ /** Injection token to be used to override the default options for the chips module. */
21
21
  const MC_TAGS_DEFAULT_OPTIONS = new InjectionToken('mc-tags-default-options');
22
22
 
23
- // Increasing integer for generating unique ids.
24
- let nextUniqueId$1 = 0;
25
- /**
26
- * Directive that adds tag-specific behaviors to an input element inside `<mc-form-field>`.
27
- * May be placed inside or outside of an `<mc-tag-list>`.
28
- */
29
- class McTagInput {
30
- constructor(elementRef, renderer, defaultOptions, ngControl) {
31
- this.elementRef = elementRef;
32
- this.renderer = renderer;
33
- this.defaultOptions = defaultOptions;
34
- this.ngControl = ngControl;
35
- /** Whether the control is focused. */
36
- this.focused = false;
37
- /**
38
- * The list of key codes that will trigger a tagEnd event.
39
- *
40
- * Defaults to `[ENTER]`.
41
- */
42
- this.separatorKeyCodes = this.defaultOptions.separatorKeyCodes;
43
- /** Emitted when a tag is to be added. */
44
- this.tagEnd = new EventEmitter();
45
- /** The input's placeholder text. */
46
- this.placeholder = '';
47
- /** Unique id for the input. */
48
- this.id = `mc-tag-list-input-${nextUniqueId$1++}`;
49
- this._addOnBlur = true;
50
- this._disabled = false;
51
- this.countOfSymbolsForUpdateWidth = 3;
52
- // tslint:disable-next-line: no-unnecessary-type-assertion
53
- this.inputElement = this.elementRef.nativeElement;
54
- this.setDefaultInputWidth();
55
- }
56
- /** Register input for tag list */
57
- set tagList(value) {
58
- if (value) {
59
- this._tagList = value;
60
- this._tagList.registerInput(this);
61
- }
62
- }
63
- /**
64
- * Whether or not the tagEnd event will be emitted when the input is blurred.
65
- */
66
- get addOnBlur() {
67
- return this._addOnBlur;
68
- }
69
- set addOnBlur(value) {
70
- this._addOnBlur = coerceBooleanProperty(value);
71
- }
72
- /** Whether the input is disabled. */
73
- get disabled() {
74
- return this._disabled || (this._tagList && this._tagList.disabled);
75
- }
76
- set disabled(value) {
77
- this._disabled = coerceBooleanProperty(value);
78
- }
79
- /** Whether the input is empty. */
80
- get empty() {
81
- return !this.inputElement.value;
82
- }
83
- ngOnChanges() {
84
- this._tagList.stateChanges.next();
85
- }
86
- onKeydown(event) {
87
- if (!this.inputElement.value) {
88
- this._tagList.keydown(event);
89
- }
90
- if (this.isSeparatorKey(event)) {
91
- this.emitTagEnd();
92
- event.preventDefault();
93
- }
94
- }
95
- /** Checks to see if the blur should emit the (tagEnd) event. */
96
- blur() {
97
- this.focused = false;
98
- // Blur the tag list if it is not focused
99
- if (!this._tagList.focused) {
100
- this.triggerValidation();
101
- this._tagList.blur();
102
- }
103
- // tslint:disable-next-line: no-unnecessary-type-assertion
104
- if (this.addOnBlur) {
105
- this.emitTagEnd();
106
- }
107
- this._tagList.stateChanges.next();
108
- }
109
- triggerValidation() {
110
- if (!this.hasControl()) {
111
- return;
112
- }
113
- this.ngControl.statusChanges.emit(this.ngControl.status);
114
- }
115
- /** Checks to see if the (tagEnd) event needs to be emitted. */
116
- emitTagEnd() {
117
- if (!this.hasControl() || (this.hasControl() && !this.ngControl.invalid)) {
118
- this.tagEnd.emit({ input: this.inputElement, value: this.inputElement.value });
119
- this.updateInputWidth();
120
- }
121
- }
122
- onInput() {
123
- this.updateInputWidth();
124
- // Let tag list know whenever the value changes.
125
- this._tagList.stateChanges.next();
126
- }
127
- onPaste($event) {
128
- if (!$event.clipboardData) {
129
- return;
130
- }
131
- const data = $event.clipboardData.getData('text');
132
- if (data && data.length === 0) {
133
- return;
134
- }
135
- const items = [];
136
- for (const key of this.separatorKeyCodes) {
137
- const separator = this.separatorKeyToSymbol(key);
138
- if (data.search(separator) > -1) {
139
- items.push(...data.split(separator));
140
- break;
141
- }
142
- }
143
- if (items.length === 0) {
144
- items.push(data);
145
- }
146
- items.forEach((item) => this.tagEnd.emit({ input: this.inputElement, value: item }));
147
- this.updateInputWidth();
148
- $event.preventDefault();
149
- $event.stopPropagation();
150
- }
151
- updateInputWidth() {
152
- const length = this.inputElement.value.length;
153
- this.renderer.setStyle(this.inputElement, 'max-width', 0);
154
- this.oneSymbolWidth = this.inputElement.scrollWidth / length;
155
- this.renderer.setStyle(this.inputElement, 'max-width', '');
156
- if (length > this.countOfSymbolsForUpdateWidth) {
157
- this.renderer.setStyle(this.inputElement, 'width', `${length * this.oneSymbolWidth}px`);
158
- }
159
- else {
160
- this.setDefaultInputWidth();
161
- }
162
- }
163
- onFocus() {
164
- this.focused = true;
165
- this._tagList.stateChanges.next();
166
- }
167
- /** Focuses the input. */
168
- focus() {
169
- this.inputElement.focus();
170
- }
171
- separatorKeyToSymbol(k) {
172
- const sep = {
173
- [ENTER]: /\r?\n/,
174
- [TAB]: /\t/,
175
- [SPACE]: / /,
176
- [COMMA]: /,/
177
- }[k];
178
- if (sep) {
179
- return sep;
180
- }
181
- return k;
182
- }
183
- hasControl() {
184
- return !!this.ngControl;
185
- }
186
- setDefaultInputWidth() {
187
- this.renderer.setStyle(this.inputElement, 'width', '30px');
188
- }
189
- /** Checks whether a keycode is one of the configured separators. */
190
- isSeparatorKey(event) {
191
- if (hasModifierKey(event)) {
192
- return false;
193
- }
194
- // tslint:disable-next-line: deprecation
195
- return this.separatorKeyCodes.indexOf(event.keyCode) > -1;
196
- }
197
- }
198
- /** @nocollapse */ /** @nocollapse */ McTagInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagInput, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: MC_TAGS_DEFAULT_OPTIONS }, { token: i3.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
199
- /** @nocollapse */ /** @nocollapse */ McTagInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.7", type: McTagInput, selector: "input[mcTagInputFor]", inputs: { separatorKeyCodes: ["mcTagInputSeparatorKeyCodes", "separatorKeyCodes"], placeholder: "placeholder", id: "id", tagList: ["mcTagInputFor", "tagList"], addOnBlur: ["mcTagInputAddOnBlur", "addOnBlur"], disabled: "disabled" }, outputs: { tagEnd: "mcTagInputTokenEnd" }, host: { listeners: { "keydown": "onKeydown($event)", "blur": "blur()", "focus": "onFocus()", "input": "onInput()", "paste": "onPaste($event)" }, properties: { "id": "id", "attr.disabled": "disabled || null", "attr.placeholder": "placeholder || null" }, classAttribute: "mc-tag-input" }, exportAs: ["mcTagInput", "mcTagInputFor"], usesOnChanges: true, ngImport: i0 });
200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagInput, decorators: [{
201
- type: Directive,
202
- args: [{
203
- selector: 'input[mcTagInputFor]',
204
- exportAs: 'mcTagInput, mcTagInputFor',
205
- host: {
206
- class: 'mc-tag-input',
207
- '[id]': 'id',
208
- '[attr.disabled]': 'disabled || null',
209
- '[attr.placeholder]': 'placeholder || null',
210
- '(keydown)': 'onKeydown($event)',
211
- '(blur)': 'blur()',
212
- '(focus)': 'onFocus()',
213
- '(input)': 'onInput()',
214
- '(paste)': 'onPaste($event)'
215
- }
216
- }]
217
- }], ctorParameters: function () {
218
- return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
219
- type: Inject,
220
- args: [MC_TAGS_DEFAULT_OPTIONS]
221
- }] }, { type: i3.NgControl, decorators: [{
222
- type: Optional
223
- }, {
224
- type: Self
225
- }] }];
226
- }, propDecorators: { separatorKeyCodes: [{
227
- type: Input,
228
- args: ['mcTagInputSeparatorKeyCodes']
229
- }], tagEnd: [{
230
- type: Output,
231
- args: ['mcTagInputTokenEnd']
232
- }], placeholder: [{
233
- type: Input
234
- }], id: [{
235
- type: Input
236
- }], tagList: [{
237
- type: Input,
238
- args: ['mcTagInputFor']
239
- }], addOnBlur: [{
240
- type: Input,
241
- args: ['mcTagInputAddOnBlur']
242
- }], disabled: [{
243
- type: Input
23
+ // Increasing integer for generating unique ids.
24
+ let nextUniqueId$1 = 0;
25
+ /**
26
+ * Directive that adds tag-specific behaviors to an input element inside `<mc-form-field>`.
27
+ * May be placed inside or outside of an `<mc-tag-list>`.
28
+ */
29
+ class McTagInput {
30
+ constructor(elementRef, renderer, defaultOptions, ngControl) {
31
+ this.elementRef = elementRef;
32
+ this.renderer = renderer;
33
+ this.defaultOptions = defaultOptions;
34
+ this.ngControl = ngControl;
35
+ /** Whether the control is focused. */
36
+ this.focused = false;
37
+ /**
38
+ * The list of key codes that will trigger a tagEnd event.
39
+ *
40
+ * Defaults to `[ENTER]`.
41
+ */
42
+ this.separatorKeyCodes = this.defaultOptions.separatorKeyCodes;
43
+ /** Emitted when a tag is to be added. */
44
+ this.tagEnd = new EventEmitter();
45
+ /** The input's placeholder text. */
46
+ this.placeholder = '';
47
+ /** Unique id for the input. */
48
+ this.id = `mc-tag-list-input-${nextUniqueId$1++}`;
49
+ this._addOnBlur = true;
50
+ this._disabled = false;
51
+ this.countOfSymbolsForUpdateWidth = 3;
52
+ // tslint:disable-next-line: no-unnecessary-type-assertion
53
+ this.inputElement = this.elementRef.nativeElement;
54
+ this.setDefaultInputWidth();
55
+ }
56
+ /** Register input for tag list */
57
+ set tagList(value) {
58
+ if (value) {
59
+ this._tagList = value;
60
+ this._tagList.registerInput(this);
61
+ }
62
+ }
63
+ /**
64
+ * Whether or not the tagEnd event will be emitted when the input is blurred.
65
+ */
66
+ get addOnBlur() {
67
+ return this._addOnBlur;
68
+ }
69
+ set addOnBlur(value) {
70
+ this._addOnBlur = coerceBooleanProperty(value);
71
+ }
72
+ /** Whether the input is disabled. */
73
+ get disabled() {
74
+ return this._disabled || (this._tagList && this._tagList.disabled);
75
+ }
76
+ set disabled(value) {
77
+ this._disabled = coerceBooleanProperty(value);
78
+ }
79
+ /** Whether the input is empty. */
80
+ get empty() {
81
+ return !this.inputElement.value;
82
+ }
83
+ ngOnChanges() {
84
+ this._tagList.stateChanges.next();
85
+ }
86
+ onKeydown(event) {
87
+ if (!this.inputElement.value) {
88
+ this._tagList.keydown(event);
89
+ }
90
+ if (this.isSeparatorKey(event)) {
91
+ this.emitTagEnd();
92
+ event.preventDefault();
93
+ }
94
+ }
95
+ /** Checks to see if the blur should emit the (tagEnd) event. */
96
+ blur() {
97
+ this.focused = false;
98
+ // Blur the tag list if it is not focused
99
+ if (!this._tagList.focused) {
100
+ this.triggerValidation();
101
+ this._tagList.blur();
102
+ }
103
+ // tslint:disable-next-line: no-unnecessary-type-assertion
104
+ if (this.addOnBlur) {
105
+ this.emitTagEnd();
106
+ }
107
+ this._tagList.stateChanges.next();
108
+ }
109
+ triggerValidation() {
110
+ if (!this.hasControl()) {
111
+ return;
112
+ }
113
+ this.ngControl.statusChanges.emit(this.ngControl.status);
114
+ }
115
+ /** Checks to see if the (tagEnd) event needs to be emitted. */
116
+ emitTagEnd() {
117
+ if (!this.hasControl() || (this.hasControl() && !this.ngControl.invalid)) {
118
+ this.tagEnd.emit({ input: this.inputElement, value: this.inputElement.value });
119
+ this.updateInputWidth();
120
+ }
121
+ }
122
+ onInput() {
123
+ this.updateInputWidth();
124
+ // Let tag list know whenever the value changes.
125
+ this._tagList.stateChanges.next();
126
+ }
127
+ onPaste($event) {
128
+ if (!$event.clipboardData) {
129
+ return;
130
+ }
131
+ const data = $event.clipboardData.getData('text');
132
+ if (data && data.length === 0) {
133
+ return;
134
+ }
135
+ const items = [];
136
+ for (const key of this.separatorKeyCodes) {
137
+ const separator = this.separatorKeyToSymbol(key);
138
+ if (data.search(separator) > -1) {
139
+ items.push(...data.split(separator));
140
+ break;
141
+ }
142
+ }
143
+ if (items.length === 0) {
144
+ items.push(data);
145
+ }
146
+ items.forEach((item) => this.tagEnd.emit({ input: this.inputElement, value: item }));
147
+ this.updateInputWidth();
148
+ $event.preventDefault();
149
+ $event.stopPropagation();
150
+ }
151
+ updateInputWidth() {
152
+ const length = this.inputElement.value.length;
153
+ this.renderer.setStyle(this.inputElement, 'max-width', 0);
154
+ this.oneSymbolWidth = this.inputElement.scrollWidth / length;
155
+ this.renderer.setStyle(this.inputElement, 'max-width', '');
156
+ if (length > this.countOfSymbolsForUpdateWidth) {
157
+ this.renderer.setStyle(this.inputElement, 'width', `${length * this.oneSymbolWidth}px`);
158
+ }
159
+ else {
160
+ this.setDefaultInputWidth();
161
+ }
162
+ }
163
+ onFocus() {
164
+ this.focused = true;
165
+ this._tagList.stateChanges.next();
166
+ }
167
+ /** Focuses the input. */
168
+ focus() {
169
+ this.inputElement.focus();
170
+ }
171
+ separatorKeyToSymbol(k) {
172
+ const sep = {
173
+ [ENTER]: /\r?\n/,
174
+ [TAB]: /\t/,
175
+ [SPACE]: / /,
176
+ [COMMA]: /,/
177
+ }[k];
178
+ if (sep) {
179
+ return sep;
180
+ }
181
+ return k;
182
+ }
183
+ hasControl() {
184
+ return !!this.ngControl;
185
+ }
186
+ setDefaultInputWidth() {
187
+ this.renderer.setStyle(this.inputElement, 'width', '30px');
188
+ }
189
+ /** Checks whether a keycode is one of the configured separators. */
190
+ isSeparatorKey(event) {
191
+ if (hasModifierKey(event)) {
192
+ return false;
193
+ }
194
+ // tslint:disable-next-line: deprecation
195
+ return this.separatorKeyCodes.indexOf(event.keyCode) > -1;
196
+ }
197
+ }
198
+ /** @nocollapse */ /** @nocollapse */ McTagInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagInput, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: MC_TAGS_DEFAULT_OPTIONS }, { token: i3.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
199
+ /** @nocollapse */ /** @nocollapse */ McTagInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: McTagInput, selector: "input[mcTagInputFor]", inputs: { separatorKeyCodes: ["mcTagInputSeparatorKeyCodes", "separatorKeyCodes"], placeholder: "placeholder", id: "id", tagList: ["mcTagInputFor", "tagList"], addOnBlur: ["mcTagInputAddOnBlur", "addOnBlur"], disabled: "disabled" }, outputs: { tagEnd: "mcTagInputTokenEnd" }, host: { listeners: { "keydown": "onKeydown($event)", "blur": "blur()", "focus": "onFocus()", "input": "onInput()", "paste": "onPaste($event)" }, properties: { "id": "id", "attr.disabled": "disabled || null", "attr.placeholder": "placeholder || null" }, classAttribute: "mc-tag-input" }, exportAs: ["mcTagInput", "mcTagInputFor"], usesOnChanges: true, ngImport: i0 });
200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagInput, decorators: [{
201
+ type: Directive,
202
+ args: [{
203
+ selector: 'input[mcTagInputFor]',
204
+ exportAs: 'mcTagInput, mcTagInputFor',
205
+ host: {
206
+ class: 'mc-tag-input',
207
+ '[id]': 'id',
208
+ '[attr.disabled]': 'disabled || null',
209
+ '[attr.placeholder]': 'placeholder || null',
210
+ '(keydown)': 'onKeydown($event)',
211
+ '(blur)': 'blur()',
212
+ '(focus)': 'onFocus()',
213
+ '(input)': 'onInput()',
214
+ '(paste)': 'onPaste($event)'
215
+ }
216
+ }]
217
+ }], ctorParameters: function () {
218
+ return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
219
+ type: Inject,
220
+ args: [MC_TAGS_DEFAULT_OPTIONS]
221
+ }] }, { type: i3.NgControl, decorators: [{
222
+ type: Optional
223
+ }, {
224
+ type: Self
225
+ }] }];
226
+ }, propDecorators: { separatorKeyCodes: [{
227
+ type: Input,
228
+ args: ['mcTagInputSeparatorKeyCodes']
229
+ }], tagEnd: [{
230
+ type: Output,
231
+ args: ['mcTagInputTokenEnd']
232
+ }], placeholder: [{
233
+ type: Input
234
+ }], id: [{
235
+ type: Input
236
+ }], tagList: [{
237
+ type: Input,
238
+ args: ['mcTagInputFor']
239
+ }], addOnBlur: [{
240
+ type: Input,
241
+ args: ['mcTagInputAddOnBlur']
242
+ }], disabled: [{
243
+ type: Input
244
244
  }] } });
245
245
 
246
- /** Event object emitted by McTag when selected or deselected. */
247
- class McTagSelectionChange {
248
- constructor(source, selected, isUserInput = false) {
249
- this.source = source;
250
- this.selected = selected;
251
- this.isUserInput = isUserInput;
252
- }
253
- }
254
- const TAG_ATTRIBUTE_NAMES = ['mc-basic-tag'];
255
- /**
256
- * Dummy directive to add CSS class to tag avatar.
257
- * @docs-private
258
- */
259
- class McTagAvatar {
260
- }
261
- /** @nocollapse */ /** @nocollapse */ McTagAvatar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagAvatar, deps: [], target: i0.ɵɵFactoryTarget.Directive });
262
- /** @nocollapse */ /** @nocollapse */ McTagAvatar.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.7", type: McTagAvatar, selector: "mc-tag-avatar, [mcTagAvatar]", host: { classAttribute: "mc-tag-avatar" }, ngImport: i0 });
263
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagAvatar, decorators: [{
264
- type: Directive,
265
- args: [{
266
- selector: 'mc-tag-avatar, [mcTagAvatar]',
267
- host: { class: 'mc-tag-avatar' }
268
- }]
269
- }] });
270
- /**
271
- * Dummy directive to add CSS class to tag trailing icon.
272
- * @docs-private
273
- */
274
- class McTagTrailingIcon {
275
- }
276
- /** @nocollapse */ /** @nocollapse */ McTagTrailingIcon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagTrailingIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
277
- /** @nocollapse */ /** @nocollapse */ McTagTrailingIcon.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.7", type: McTagTrailingIcon, selector: "mc-tag-trailing-icon, [mcTagTrailingIcon]", host: { classAttribute: "mc-tag-trailing-icon" }, ngImport: i0 });
278
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagTrailingIcon, decorators: [{
279
- type: Directive,
280
- args: [{
281
- selector: 'mc-tag-trailing-icon, [mcTagTrailingIcon]',
282
- host: { class: 'mc-tag-trailing-icon' }
283
- }]
284
- }] });
285
- class McTagBase {
286
- // tslint:disable-next-line:naming-convention
287
- constructor(_elementRef) {
288
- this._elementRef = _elementRef;
289
- }
290
- }
291
- // tslint:disable-next-line:naming-convention
292
- const McTagMixinBase = mixinColor(mixinDisabled(McTagBase));
293
- class McTag extends McTagMixinBase {
294
- constructor(elementRef, changeDetectorRef, _ngZone) {
295
- super(elementRef);
296
- this.elementRef = elementRef;
297
- this.changeDetectorRef = changeDetectorRef;
298
- this._ngZone = _ngZone;
299
- /** Emits when the tag is focused. */
300
- this.onFocus = new Subject();
301
- /** Emits when the tag is blured. */
302
- this.onBlur = new Subject();
303
- /** Whether the tag has focus. */
304
- this.hasFocus = false;
305
- /** Whether the tag list is selectable */
306
- this.tagListSelectable = true;
307
- /** Emitted when the tag is selected or deselected. */
308
- this.selectionChange = new EventEmitter();
309
- /** Emitted when the tag is destroyed. */
310
- this.destroyed = new EventEmitter();
311
- /** Emitted when a tag is to be removed. */
312
- this.removed = new EventEmitter();
313
- this._selected = false;
314
- this._selectable = true;
315
- this._removable = true;
316
- this._disabled = false;
317
- this.addHostClassName();
318
- this.nativeElement = elementRef.nativeElement;
319
- }
320
- /** Whether the tag is selected. */
321
- get selected() {
322
- return this._selected;
323
- }
324
- set selected(value) {
325
- const coercedValue = coerceBooleanProperty(value);
326
- if (coercedValue !== this._selected) {
327
- this._selected = coercedValue;
328
- this.dispatchSelectionChange();
329
- }
330
- }
331
- /** The value of the tag. Defaults to the content inside `<mc-tag>` tags. */
332
- get value() {
333
- return this._value !== undefined
334
- ? this._value
335
- : this.elementRef.nativeElement.textContent;
336
- }
337
- set value(value) {
338
- this._value = value;
339
- }
340
- /**
341
- * Whether or not the tag is selectable. When a tag is not selectable,
342
- * changes to its selected state are always ignored. By default a tag is
343
- * selectable, and it becomes non-selectable if its parent tag list is
344
- * not selectable.
345
- */
346
- get selectable() {
347
- return this._selectable && this.tagListSelectable;
348
- }
349
- set selectable(value) {
350
- this._selectable = coerceBooleanProperty(value);
351
- }
352
- /**
353
- * Determines whether or not the tag displays the remove styling and emits (removed) events.
354
- */
355
- get removable() {
356
- return this._removable;
357
- }
358
- set removable(value) {
359
- this._removable = coerceBooleanProperty(value);
360
- }
361
- get tabindex() {
362
- if (!this.selectable) {
363
- return null;
364
- }
365
- return this.disabled ? null : -1;
366
- }
367
- get disabled() {
368
- return this._disabled;
369
- }
370
- set disabled(value) {
371
- if (value !== this.disabled) {
372
- this._disabled = value;
373
- }
374
- }
375
- ngAfterContentInit() {
376
- this.addClassModificatorForIcons();
377
- }
378
- addClassModificatorForIcons() {
379
- const icons = this.contentChildren.map((item) => item._elementRef.nativeElement);
380
- if (icons.length === 1) {
381
- const iconElement = icons[0];
382
- if (iconElement.classList.contains('mc-tag-remove')) {
383
- iconElement.classList.add('mc-icon_right');
384
- this.nativeElement.classList.add('mc-right-icon');
385
- }
386
- else {
387
- iconElement.classList.add('mc-icon_left');
388
- this.nativeElement.classList.add('mc-left-icon');
389
- }
390
- }
391
- else if (icons.length > 1) {
392
- const firstIconElement = icons[0];
393
- const secondIconElement = icons[1];
394
- firstIconElement.classList.add('mc-icon_left');
395
- secondIconElement.classList.add('mc-icon_right');
396
- }
397
- }
398
- addHostClassName() {
399
- // Add class for the different tags
400
- for (const attr of TAG_ATTRIBUTE_NAMES) {
401
- if (this.elementRef.nativeElement.hasAttribute(attr) ||
402
- this.elementRef.nativeElement.tagName.toLowerCase() === attr) {
403
- this.elementRef.nativeElement.classList.add(attr);
404
- return;
405
- }
406
- }
407
- this.elementRef.nativeElement.classList.add('mc-standard-tag');
408
- }
409
- ngOnDestroy() {
410
- this.destroyed.emit({ tag: this });
411
- }
412
- select() {
413
- if (!this._selected) {
414
- this._selected = true;
415
- this.dispatchSelectionChange();
416
- }
417
- }
418
- deselect() {
419
- if (this._selected) {
420
- this._selected = false;
421
- this.dispatchSelectionChange();
422
- }
423
- }
424
- selectViaInteraction() {
425
- if (!this._selected) {
426
- this._selected = true;
427
- this.dispatchSelectionChange(true);
428
- }
429
- }
430
- toggleSelected(isUserInput = false) {
431
- this._selected = !this.selected;
432
- this.dispatchSelectionChange(isUserInput);
433
- return this.selected;
434
- }
435
- /** Allows for programmatic focusing of the tag. */
436
- focus() {
437
- if (!this.selectable) {
438
- return;
439
- }
440
- if (!this.hasFocus) {
441
- this.elementRef.nativeElement.focus();
442
- this.onFocus.next({ tag: this });
443
- Promise.resolve().then(() => {
444
- this.hasFocus = true;
445
- this.changeDetectorRef.markForCheck();
446
- });
447
- }
448
- }
449
- /**
450
- * Allows for programmatic removal of the tag. Called by the McTagList when the DELETE or
451
- * BACKSPACE keys are pressed.
452
- *
453
- * Informs any listeners of the removal request. Does not remove the tag from the DOM.
454
- */
455
- remove() {
456
- if (this.removable) {
457
- this.removed.emit({ tag: this });
458
- }
459
- }
460
- handleClick(event) {
461
- if (this.disabled) {
462
- event.preventDefault();
463
- }
464
- else {
465
- event.stopPropagation();
466
- }
467
- }
468
- handleKeydown(event) {
469
- if (this.disabled) {
470
- return;
471
- }
472
- // tslint:disable-next-line: deprecation
473
- switch (event.keyCode) {
474
- case DELETE:
475
- case BACKSPACE:
476
- // If we are removable, remove the focused tag
477
- this.remove();
478
- // Always prevent so page navigation does not occur
479
- event.preventDefault();
480
- break;
481
- case SPACE:
482
- // If we are selectable, toggle the focused tag
483
- if (this.selectable) {
484
- this.toggleSelected(true);
485
- }
486
- // Always prevent space from scrolling the page since the list has focus
487
- event.preventDefault();
488
- break;
489
- default:
490
- }
491
- }
492
- blur() {
493
- // When animations are enabled, Angular may end up removing the tag from the DOM a little
494
- // earlier than usual, causing it to be blurred and throwing off the logic in the tag list
495
- // that moves focus not the next item. To work around the issue, we defer marking the tag
496
- // as not focused until the next time the zone stabilizes.
497
- this._ngZone.onStable
498
- .asObservable()
499
- .pipe(take(1))
500
- .subscribe(() => {
501
- this._ngZone.run(() => {
502
- this.hasFocus = false;
503
- this.onBlur.next({ tag: this });
504
- });
505
- });
506
- }
507
- dispatchSelectionChange(isUserInput = false) {
508
- this.selectionChange.emit({
509
- source: this,
510
- isUserInput,
511
- selected: this._selected
512
- });
513
- }
514
- }
515
- /** @nocollapse */ /** @nocollapse */ McTag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTag, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
516
- /** @nocollapse */ /** @nocollapse */ McTag.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.7", type: McTag, selector: "mc-tag, [mc-tag], mc-basic-tag, [mc-basic-tag]", inputs: { color: "color", selected: "selected", value: "value", selectable: "selectable", removable: "removable", disabled: "disabled" }, outputs: { selectionChange: "selectionChange", destroyed: "destroyed", removed: "removed" }, host: { listeners: { "click": "handleClick($event)", "keydown": "handleKeydown($event)", "focus": "focus()", "blur": "blur()" }, properties: { "attr.tabindex": "tabindex", "attr.disabled": "disabled || null", "class.mc-selected": "selected", "class.mc-focused": "hasFocus", "class.mc-tag-with-avatar": "avatar", "class.mc-tag-with-icon": "contentChildren", "class.mc-tag-with-trailing-icon": "trailingIcon || removeIcon", "class.mc-disabled": "disabled" }, classAttribute: "mc-tag" }, queries: [{ propertyName: "avatar", first: true, predicate: McTagAvatar, descendants: true }, { propertyName: "trailingIcon", first: true, predicate: McTagTrailingIcon, descendants: true }, { propertyName: "removeIcon", first: true, predicate: i0.forwardRef(function () { return McTagRemove; }), descendants: true }, { propertyName: "contentChildren", predicate: McIcon }], exportAs: ["mcTag"], usesInheritance: true, ngImport: i0, template: "<div class=\"mc-tag__wrapper\">\r\n <ng-content select=\"[mc-icon]:not([mcTagRemove])\"></ng-content>\r\n <span class=\"mc-tag__text\"><ng-content></ng-content></span>\r\n <ng-content select=\"[mcTagRemove]\"></ng-content>\r\n</div>\r\n<div class=\"mc-tag-overlay\"></div> \r\n", styles: [".mc-tag{position:relative;display:inline-block;max-width:100%;margin:var(--mc-tags-size-margin, 2px);height:var(--mc-tags-size-height, 24px);border-width:var(--mc-tags-size-border-width, 1px);border-style:solid;border-radius:var(--mc-tags-size-border-radius, 4px);cursor:default;outline:none;box-sizing:border-box}.mc-tag .mc-icon.mc-tag-remove:hover{cursor:pointer}.mc-tag.mc-disabled .mc-icon.mc-tag-remove:hover{cursor:default}.mc-tag .mc-tag__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mc-tag:not(.mc-tag-with-icon) .mc-tag__text{margin-right:calc(var(--mc-tags-size-text-margin, 8px) - var(--mc-tags-size-border-width, 1px))}.mc-tag__wrapper{display:flex;align-items:center;height:100%;flex:1 1 100%}.mc-tag__wrapper .mc-icon.mc-tag-remove{display:flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--mc-tags-size-height, 24px);padding-left:var(--mc-tags-size-icon-padding, 4px);padding-right:var(--mc-tags-size-icon-padding, 4px)}.mc-tag__wrapper .mc-icon_left{margin-right:var(--mc-tags-size-icon-padding, 4px)}.mc-tag__wrapper>.mc-icon:first-child{margin-left:calc(var(--mc-tags-size-icon-padding, 4px) - var(--mc-tags-size-border-width, 1px))}.mc-tag__wrapper>.mc-tag__text:last-child{margin-right:calc(var(--mc-tags-size-text-margin, 8px) - var(--mc-tags-size-border-width, 1px))}.mc-tag__wrapper>.mc-tag__text:first-child{margin-left:calc(var(--mc-tags-size-text-margin, 8px) - var(--mc-tags-size-border-width, 1px))}.mc-tag-overlay{position:absolute;top:-1px;left:-1px;right:-1px;bottom:-1px;pointer-events:none;border-radius:inherit}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
517
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTag, decorators: [{
518
- type: Component,
519
- args: [{ selector: 'mc-tag, [mc-tag], mc-basic-tag, [mc-basic-tag]', exportAs: 'mcTag', inputs: ['color'], host: {
520
- class: 'mc-tag',
521
- '[attr.tabindex]': 'tabindex',
522
- '[attr.disabled]': 'disabled || null',
523
- '[class.mc-selected]': 'selected',
524
- '[class.mc-focused]': 'hasFocus',
525
- '[class.mc-tag-with-avatar]': 'avatar',
526
- '[class.mc-tag-with-icon]': 'contentChildren',
527
- '[class.mc-tag-with-trailing-icon]': 'trailingIcon || removeIcon',
528
- '[class.mc-disabled]': 'disabled',
529
- '(click)': 'handleClick($event)',
530
- '(keydown)': 'handleKeydown($event)',
531
- '(focus)': 'focus()',
532
- '(blur)': 'blur()'
533
- }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"mc-tag__wrapper\">\r\n <ng-content select=\"[mc-icon]:not([mcTagRemove])\"></ng-content>\r\n <span class=\"mc-tag__text\"><ng-content></ng-content></span>\r\n <ng-content select=\"[mcTagRemove]\"></ng-content>\r\n</div>\r\n<div class=\"mc-tag-overlay\"></div> \r\n", styles: [".mc-tag{position:relative;display:inline-block;max-width:100%;margin:var(--mc-tags-size-margin, 2px);height:var(--mc-tags-size-height, 24px);border-width:var(--mc-tags-size-border-width, 1px);border-style:solid;border-radius:var(--mc-tags-size-border-radius, 4px);cursor:default;outline:none;box-sizing:border-box}.mc-tag .mc-icon.mc-tag-remove:hover{cursor:pointer}.mc-tag.mc-disabled .mc-icon.mc-tag-remove:hover{cursor:default}.mc-tag .mc-tag__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mc-tag:not(.mc-tag-with-icon) .mc-tag__text{margin-right:calc(var(--mc-tags-size-text-margin, 8px) - var(--mc-tags-size-border-width, 1px))}.mc-tag__wrapper{display:flex;align-items:center;height:100%;flex:1 1 100%}.mc-tag__wrapper .mc-icon.mc-tag-remove{display:flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--mc-tags-size-height, 24px);padding-left:var(--mc-tags-size-icon-padding, 4px);padding-right:var(--mc-tags-size-icon-padding, 4px)}.mc-tag__wrapper .mc-icon_left{margin-right:var(--mc-tags-size-icon-padding, 4px)}.mc-tag__wrapper>.mc-icon:first-child{margin-left:calc(var(--mc-tags-size-icon-padding, 4px) - var(--mc-tags-size-border-width, 1px))}.mc-tag__wrapper>.mc-tag__text:last-child{margin-right:calc(var(--mc-tags-size-text-margin, 8px) - var(--mc-tags-size-border-width, 1px))}.mc-tag__wrapper>.mc-tag__text:first-child{margin-left:calc(var(--mc-tags-size-text-margin, 8px) - var(--mc-tags-size-border-width, 1px))}.mc-tag-overlay{position:absolute;top:-1px;left:-1px;right:-1px;bottom:-1px;pointer-events:none;border-radius:inherit}\n"] }]
534
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }]; }, propDecorators: { contentChildren: [{
535
- type: ContentChildren,
536
- args: [McIcon]
537
- }], avatar: [{
538
- type: ContentChild,
539
- args: [McTagAvatar, { static: false }]
540
- }], trailingIcon: [{
541
- type: ContentChild,
542
- args: [McTagTrailingIcon, { static: false }]
543
- }], removeIcon: [{
544
- type: ContentChild,
545
- args: [forwardRef(() => McTagRemove), { static: false }]
546
- }], selectionChange: [{
547
- type: Output
548
- }], destroyed: [{
549
- type: Output
550
- }], removed: [{
551
- type: Output
552
- }], selected: [{
553
- type: Input
554
- }], value: [{
555
- type: Input
556
- }], selectable: [{
557
- type: Input
558
- }], removable: [{
559
- type: Input
560
- }], disabled: [{
561
- type: Input
562
- }] } });
563
- /**
564
- *
565
- * Example:
566
- *
567
- * `<mc-tag>
568
- * <mc-icon mcTagRemove>cancel</mc-icon>
569
- * </mc-tag>`
570
- *
571
- * You *may* use a custom icon, but you may need to override the `mc-tag-remove` positioning
572
- * styles to properly center the icon within the tag.
573
- */
574
- class McTagRemove {
575
- constructor(parentTag) {
576
- this.parentTag = parentTag;
577
- }
578
- focus($event) {
579
- $event.stopPropagation();
580
- }
581
- /** Calls the parent tag's public `remove()` method if applicable. */
582
- handleClick(event) {
583
- if (this.parentTag.removable) {
584
- this.parentTag.hasFocus = true;
585
- this.parentTag.remove();
586
- }
587
- // We need to stop event propagation because otherwise the event will bubble up to the
588
- // form field and cause the `onContainerClick` method to be invoked. This method would then
589
- // reset the focused tag that has been focused after tag removal. Usually the parent
590
- // the parent click listener of the `McTag` would prevent propagation, but it can happen
591
- // that the tag is being removed before the event bubbles up.
592
- event.stopPropagation();
593
- }
594
- }
595
- /** @nocollapse */ /** @nocollapse */ McTagRemove.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagRemove, deps: [{ token: forwardRef(() => McTag) }], target: i0.ɵɵFactoryTarget.Directive });
596
- /** @nocollapse */ /** @nocollapse */ McTagRemove.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.7", type: McTagRemove, selector: "[mcTagRemove]", host: { listeners: { "click": "handleClick($event)", "focus": "focus($event)" }, properties: { "attr.tabindex": "-1" }, classAttribute: "mc-tag-remove mc-tag-trailing-icon" }, ngImport: i0 });
597
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagRemove, decorators: [{
598
- type: Directive,
599
- args: [{
600
- selector: '[mcTagRemove]',
601
- host: {
602
- class: 'mc-tag-remove mc-tag-trailing-icon',
603
- '[attr.tabindex]': '-1',
604
- '(click)': 'handleClick($event)',
605
- '(focus)': 'focus($event)'
606
- }
607
- }]
608
- }], ctorParameters: function () {
609
- return [{ type: McTag, decorators: [{
610
- type: Inject,
611
- args: [forwardRef(() => McTag)]
612
- }] }];
246
+ /** Event object emitted by McTag when selected or deselected. */
247
+ class McTagSelectionChange {
248
+ constructor(source, selected, isUserInput = false) {
249
+ this.source = source;
250
+ this.selected = selected;
251
+ this.isUserInput = isUserInput;
252
+ }
253
+ }
254
+ const TAG_ATTRIBUTE_NAMES = ['mc-basic-tag'];
255
+ /**
256
+ * Dummy directive to add CSS class to tag avatar.
257
+ * @docs-private
258
+ */
259
+ class McTagAvatar {
260
+ }
261
+ /** @nocollapse */ /** @nocollapse */ McTagAvatar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagAvatar, deps: [], target: i0.ɵɵFactoryTarget.Directive });
262
+ /** @nocollapse */ /** @nocollapse */ McTagAvatar.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: McTagAvatar, selector: "mc-tag-avatar, [mcTagAvatar]", host: { classAttribute: "mc-tag-avatar" }, ngImport: i0 });
263
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagAvatar, decorators: [{
264
+ type: Directive,
265
+ args: [{
266
+ selector: 'mc-tag-avatar, [mcTagAvatar]',
267
+ host: { class: 'mc-tag-avatar' }
268
+ }]
269
+ }] });
270
+ /**
271
+ * Dummy directive to add CSS class to tag trailing icon.
272
+ * @docs-private
273
+ */
274
+ class McTagTrailingIcon {
275
+ }
276
+ /** @nocollapse */ /** @nocollapse */ McTagTrailingIcon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagTrailingIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
277
+ /** @nocollapse */ /** @nocollapse */ McTagTrailingIcon.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: McTagTrailingIcon, selector: "mc-tag-trailing-icon, [mcTagTrailingIcon]", host: { classAttribute: "mc-tag-trailing-icon" }, ngImport: i0 });
278
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagTrailingIcon, decorators: [{
279
+ type: Directive,
280
+ args: [{
281
+ selector: 'mc-tag-trailing-icon, [mcTagTrailingIcon]',
282
+ host: { class: 'mc-tag-trailing-icon' }
283
+ }]
284
+ }] });
285
+ class McTagBase {
286
+ // tslint:disable-next-line:naming-convention
287
+ constructor(_elementRef) {
288
+ this._elementRef = _elementRef;
289
+ }
290
+ }
291
+ // tslint:disable-next-line:naming-convention
292
+ const McTagMixinBase = mixinColor(mixinDisabled(McTagBase));
293
+ class McTag extends McTagMixinBase {
294
+ constructor(elementRef, changeDetectorRef, _ngZone) {
295
+ super(elementRef);
296
+ this.elementRef = elementRef;
297
+ this.changeDetectorRef = changeDetectorRef;
298
+ this._ngZone = _ngZone;
299
+ /** Emits when the tag is focused. */
300
+ this.onFocus = new Subject();
301
+ /** Emits when the tag is blured. */
302
+ this.onBlur = new Subject();
303
+ /** Whether the tag has focus. */
304
+ this.hasFocus = false;
305
+ /** Whether the tag list is selectable */
306
+ this.tagListSelectable = true;
307
+ /** Emitted when the tag is selected or deselected. */
308
+ this.selectionChange = new EventEmitter();
309
+ /** Emitted when the tag is destroyed. */
310
+ this.destroyed = new EventEmitter();
311
+ /** Emitted when a tag is to be removed. */
312
+ this.removed = new EventEmitter();
313
+ this._selected = false;
314
+ this._selectable = true;
315
+ this._removable = true;
316
+ this._disabled = false;
317
+ this.addHostClassName();
318
+ this.nativeElement = elementRef.nativeElement;
319
+ }
320
+ /** Whether the tag is selected. */
321
+ get selected() {
322
+ return this._selected;
323
+ }
324
+ set selected(value) {
325
+ const coercedValue = coerceBooleanProperty(value);
326
+ if (coercedValue !== this._selected) {
327
+ this._selected = coercedValue;
328
+ this.dispatchSelectionChange();
329
+ }
330
+ }
331
+ /** The value of the tag. Defaults to the content inside `<mc-tag>` tags. */
332
+ get value() {
333
+ return this._value !== undefined
334
+ ? this._value
335
+ : this.elementRef.nativeElement.textContent;
336
+ }
337
+ set value(value) {
338
+ this._value = value;
339
+ }
340
+ /**
341
+ * Whether or not the tag is selectable. When a tag is not selectable,
342
+ * changes to its selected state are always ignored. By default a tag is
343
+ * selectable, and it becomes non-selectable if its parent tag list is
344
+ * not selectable.
345
+ */
346
+ get selectable() {
347
+ return this._selectable && this.tagListSelectable;
348
+ }
349
+ set selectable(value) {
350
+ this._selectable = coerceBooleanProperty(value);
351
+ }
352
+ /**
353
+ * Determines whether or not the tag displays the remove styling and emits (removed) events.
354
+ */
355
+ get removable() {
356
+ return this._removable;
357
+ }
358
+ set removable(value) {
359
+ this._removable = coerceBooleanProperty(value);
360
+ }
361
+ get tabindex() {
362
+ if (!this.selectable) {
363
+ return null;
364
+ }
365
+ return this.disabled ? null : -1;
366
+ }
367
+ get disabled() {
368
+ return this._disabled;
369
+ }
370
+ set disabled(value) {
371
+ if (value !== this.disabled) {
372
+ this._disabled = value;
373
+ }
374
+ }
375
+ ngAfterContentInit() {
376
+ this.addClassModificatorForIcons();
377
+ }
378
+ addClassModificatorForIcons() {
379
+ const icons = this.contentChildren.map((item) => item._elementRef.nativeElement);
380
+ if (icons.length === 1) {
381
+ const iconElement = icons[0];
382
+ if (iconElement.classList.contains('mc-tag-remove')) {
383
+ iconElement.classList.add('mc-icon_right');
384
+ this.nativeElement.classList.add('mc-right-icon');
385
+ }
386
+ else {
387
+ iconElement.classList.add('mc-icon_left');
388
+ this.nativeElement.classList.add('mc-left-icon');
389
+ }
390
+ }
391
+ else if (icons.length > 1) {
392
+ const firstIconElement = icons[0];
393
+ const secondIconElement = icons[1];
394
+ firstIconElement.classList.add('mc-icon_left');
395
+ secondIconElement.classList.add('mc-icon_right');
396
+ }
397
+ }
398
+ addHostClassName() {
399
+ // Add class for the different tags
400
+ for (const attr of TAG_ATTRIBUTE_NAMES) {
401
+ if (this.elementRef.nativeElement.hasAttribute(attr) ||
402
+ this.elementRef.nativeElement.tagName.toLowerCase() === attr) {
403
+ this.elementRef.nativeElement.classList.add(attr);
404
+ return;
405
+ }
406
+ }
407
+ this.elementRef.nativeElement.classList.add('mc-standard-tag');
408
+ }
409
+ ngOnDestroy() {
410
+ this.destroyed.emit({ tag: this });
411
+ }
412
+ select() {
413
+ if (!this._selected) {
414
+ this._selected = true;
415
+ this.dispatchSelectionChange();
416
+ }
417
+ }
418
+ deselect() {
419
+ if (this._selected) {
420
+ this._selected = false;
421
+ this.dispatchSelectionChange();
422
+ }
423
+ }
424
+ selectViaInteraction() {
425
+ if (!this._selected) {
426
+ this._selected = true;
427
+ this.dispatchSelectionChange(true);
428
+ }
429
+ }
430
+ toggleSelected(isUserInput = false) {
431
+ this._selected = !this.selected;
432
+ this.dispatchSelectionChange(isUserInput);
433
+ return this.selected;
434
+ }
435
+ /** Allows for programmatic focusing of the tag. */
436
+ focus() {
437
+ if (!this.selectable) {
438
+ return;
439
+ }
440
+ if (!this.hasFocus) {
441
+ this.elementRef.nativeElement.focus();
442
+ this.onFocus.next({ tag: this });
443
+ Promise.resolve().then(() => {
444
+ this.hasFocus = true;
445
+ this.changeDetectorRef.markForCheck();
446
+ });
447
+ }
448
+ }
449
+ /**
450
+ * Allows for programmatic removal of the tag. Called by the McTagList when the DELETE or
451
+ * BACKSPACE keys are pressed.
452
+ *
453
+ * Informs any listeners of the removal request. Does not remove the tag from the DOM.
454
+ */
455
+ remove() {
456
+ if (this.removable) {
457
+ this.removed.emit({ tag: this });
458
+ }
459
+ }
460
+ handleClick(event) {
461
+ if (this.disabled) {
462
+ event.preventDefault();
463
+ }
464
+ else {
465
+ event.stopPropagation();
466
+ }
467
+ }
468
+ handleKeydown(event) {
469
+ if (this.disabled) {
470
+ return;
471
+ }
472
+ // tslint:disable-next-line: deprecation
473
+ switch (event.keyCode) {
474
+ case DELETE:
475
+ case BACKSPACE:
476
+ // If we are removable, remove the focused tag
477
+ this.remove();
478
+ // Always prevent so page navigation does not occur
479
+ event.preventDefault();
480
+ break;
481
+ case SPACE:
482
+ // If we are selectable, toggle the focused tag
483
+ if (this.selectable) {
484
+ this.toggleSelected(true);
485
+ }
486
+ // Always prevent space from scrolling the page since the list has focus
487
+ event.preventDefault();
488
+ break;
489
+ default:
490
+ }
491
+ }
492
+ blur() {
493
+ // When animations are enabled, Angular may end up removing the tag from the DOM a little
494
+ // earlier than usual, causing it to be blurred and throwing off the logic in the tag list
495
+ // that moves focus not the next item. To work around the issue, we defer marking the tag
496
+ // as not focused until the next time the zone stabilizes.
497
+ this._ngZone.onStable
498
+ .asObservable()
499
+ .pipe(take(1))
500
+ .subscribe(() => {
501
+ this._ngZone.run(() => {
502
+ this.hasFocus = false;
503
+ this.onBlur.next({ tag: this });
504
+ });
505
+ });
506
+ }
507
+ dispatchSelectionChange(isUserInput = false) {
508
+ this.selectionChange.emit({
509
+ source: this,
510
+ isUserInput,
511
+ selected: this._selected
512
+ });
513
+ }
514
+ }
515
+ /** @nocollapse */ /** @nocollapse */ McTag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTag, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
516
+ /** @nocollapse */ /** @nocollapse */ McTag.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: McTag, selector: "mc-tag, [mc-tag], mc-basic-tag, [mc-basic-tag]", inputs: { color: "color", selected: "selected", value: "value", selectable: "selectable", removable: "removable", disabled: "disabled" }, outputs: { selectionChange: "selectionChange", destroyed: "destroyed", removed: "removed" }, host: { listeners: { "click": "handleClick($event)", "keydown": "handleKeydown($event)", "focus": "focus()", "blur": "blur()" }, properties: { "attr.tabindex": "tabindex", "attr.disabled": "disabled || null", "class.mc-selected": "selected", "class.mc-focused": "hasFocus", "class.mc-tag-with-avatar": "avatar", "class.mc-tag-with-icon": "contentChildren", "class.mc-tag-with-trailing-icon": "trailingIcon || removeIcon", "class.mc-disabled": "disabled" }, classAttribute: "mc-tag" }, queries: [{ propertyName: "avatar", first: true, predicate: McTagAvatar, descendants: true }, { propertyName: "trailingIcon", first: true, predicate: McTagTrailingIcon, descendants: true }, { propertyName: "removeIcon", first: true, predicate: i0.forwardRef(function () { return McTagRemove; }), descendants: true }, { propertyName: "contentChildren", predicate: McIcon }], exportAs: ["mcTag"], usesInheritance: true, ngImport: i0, template: "<div class=\"mc-tag__wrapper\">\n <ng-content select=\"[mc-icon]:not([mcTagRemove])\"></ng-content>\n <span class=\"mc-tag__text\"><ng-content></ng-content></span>\n <ng-content select=\"[mcTagRemove]\"></ng-content>\n</div>\n<div class=\"mc-tag-overlay\"></div> \n", styles: [".mc-tag{position:relative;display:inline-block;max-width:100%;margin:var(--mc-tags-size-margin, 2px);height:var(--mc-tags-size-height, 24px);border-width:var(--mc-tags-size-border-width, 1px);border-style:solid;border-radius:var(--mc-tags-size-border-radius, 4px);cursor:default;outline:none;box-sizing:border-box}.mc-tag .mc-icon.mc-tag-remove:hover{cursor:pointer}.mc-tag.mc-disabled .mc-icon.mc-tag-remove:hover{cursor:default}.mc-tag .mc-tag__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mc-tag:not(.mc-tag-with-icon) .mc-tag__text{margin-right:calc(var(--mc-tags-size-text-margin, 8px) - var(--mc-tags-size-border-width, 1px))}.mc-tag__wrapper{display:flex;align-items:center;height:100%;flex:1 1 100%}.mc-tag__wrapper .mc-icon.mc-tag-remove{display:flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--mc-tags-size-height, 24px);padding-left:var(--mc-tags-size-icon-padding, 4px);padding-right:var(--mc-tags-size-icon-padding, 4px)}.mc-tag__wrapper .mc-icon_left{margin-right:var(--mc-tags-size-icon-padding, 4px)}.mc-tag__wrapper>.mc-icon:first-child{margin-left:calc(var(--mc-tags-size-icon-padding, 4px) - var(--mc-tags-size-border-width, 1px))}.mc-tag__wrapper>.mc-tag__text:last-child{margin-right:calc(var(--mc-tags-size-text-margin, 8px) - var(--mc-tags-size-border-width, 1px))}.mc-tag__wrapper>.mc-tag__text:first-child{margin-left:calc(var(--mc-tags-size-text-margin, 8px) - var(--mc-tags-size-border-width, 1px))}.mc-tag-overlay{position:absolute;top:-1px;left:-1px;right:-1px;bottom:-1px;pointer-events:none;border-radius:inherit}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
517
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTag, decorators: [{
518
+ type: Component,
519
+ args: [{ selector: 'mc-tag, [mc-tag], mc-basic-tag, [mc-basic-tag]', exportAs: 'mcTag', inputs: ['color'], host: {
520
+ class: 'mc-tag',
521
+ '[attr.tabindex]': 'tabindex',
522
+ '[attr.disabled]': 'disabled || null',
523
+ '[class.mc-selected]': 'selected',
524
+ '[class.mc-focused]': 'hasFocus',
525
+ '[class.mc-tag-with-avatar]': 'avatar',
526
+ '[class.mc-tag-with-icon]': 'contentChildren',
527
+ '[class.mc-tag-with-trailing-icon]': 'trailingIcon || removeIcon',
528
+ '[class.mc-disabled]': 'disabled',
529
+ '(click)': 'handleClick($event)',
530
+ '(keydown)': 'handleKeydown($event)',
531
+ '(focus)': 'focus()',
532
+ '(blur)': 'blur()'
533
+ }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"mc-tag__wrapper\">\n <ng-content select=\"[mc-icon]:not([mcTagRemove])\"></ng-content>\n <span class=\"mc-tag__text\"><ng-content></ng-content></span>\n <ng-content select=\"[mcTagRemove]\"></ng-content>\n</div>\n<div class=\"mc-tag-overlay\"></div> \n", styles: [".mc-tag{position:relative;display:inline-block;max-width:100%;margin:var(--mc-tags-size-margin, 2px);height:var(--mc-tags-size-height, 24px);border-width:var(--mc-tags-size-border-width, 1px);border-style:solid;border-radius:var(--mc-tags-size-border-radius, 4px);cursor:default;outline:none;box-sizing:border-box}.mc-tag .mc-icon.mc-tag-remove:hover{cursor:pointer}.mc-tag.mc-disabled .mc-icon.mc-tag-remove:hover{cursor:default}.mc-tag .mc-tag__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mc-tag:not(.mc-tag-with-icon) .mc-tag__text{margin-right:calc(var(--mc-tags-size-text-margin, 8px) - var(--mc-tags-size-border-width, 1px))}.mc-tag__wrapper{display:flex;align-items:center;height:100%;flex:1 1 100%}.mc-tag__wrapper .mc-icon.mc-tag-remove{display:flex;align-items:center;justify-content:center;flex-shrink:0;height:var(--mc-tags-size-height, 24px);padding-left:var(--mc-tags-size-icon-padding, 4px);padding-right:var(--mc-tags-size-icon-padding, 4px)}.mc-tag__wrapper .mc-icon_left{margin-right:var(--mc-tags-size-icon-padding, 4px)}.mc-tag__wrapper>.mc-icon:first-child{margin-left:calc(var(--mc-tags-size-icon-padding, 4px) - var(--mc-tags-size-border-width, 1px))}.mc-tag__wrapper>.mc-tag__text:last-child{margin-right:calc(var(--mc-tags-size-text-margin, 8px) - var(--mc-tags-size-border-width, 1px))}.mc-tag__wrapper>.mc-tag__text:first-child{margin-left:calc(var(--mc-tags-size-text-margin, 8px) - var(--mc-tags-size-border-width, 1px))}.mc-tag-overlay{position:absolute;top:-1px;left:-1px;right:-1px;bottom:-1px;pointer-events:none;border-radius:inherit}\n"] }]
534
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }]; }, propDecorators: { contentChildren: [{
535
+ type: ContentChildren,
536
+ args: [McIcon]
537
+ }], avatar: [{
538
+ type: ContentChild,
539
+ args: [McTagAvatar, { static: false }]
540
+ }], trailingIcon: [{
541
+ type: ContentChild,
542
+ args: [McTagTrailingIcon, { static: false }]
543
+ }], removeIcon: [{
544
+ type: ContentChild,
545
+ args: [forwardRef(() => McTagRemove), { static: false }]
546
+ }], selectionChange: [{
547
+ type: Output
548
+ }], destroyed: [{
549
+ type: Output
550
+ }], removed: [{
551
+ type: Output
552
+ }], selected: [{
553
+ type: Input
554
+ }], value: [{
555
+ type: Input
556
+ }], selectable: [{
557
+ type: Input
558
+ }], removable: [{
559
+ type: Input
560
+ }], disabled: [{
561
+ type: Input
562
+ }] } });
563
+ /**
564
+ *
565
+ * Example:
566
+ *
567
+ * `<mc-tag>
568
+ * <mc-icon mcTagRemove>cancel</mc-icon>
569
+ * </mc-tag>`
570
+ *
571
+ * You *may* use a custom icon, but you may need to override the `mc-tag-remove` positioning
572
+ * styles to properly center the icon within the tag.
573
+ */
574
+ class McTagRemove {
575
+ constructor(parentTag) {
576
+ this.parentTag = parentTag;
577
+ }
578
+ focus($event) {
579
+ $event.stopPropagation();
580
+ }
581
+ /** Calls the parent tag's public `remove()` method if applicable. */
582
+ handleClick(event) {
583
+ if (this.parentTag.removable) {
584
+ this.parentTag.hasFocus = true;
585
+ this.parentTag.remove();
586
+ }
587
+ // We need to stop event propagation because otherwise the event will bubble up to the
588
+ // form field and cause the `onContainerClick` method to be invoked. This method would then
589
+ // reset the focused tag that has been focused after tag removal. Usually the parent
590
+ // the parent click listener of the `McTag` would prevent propagation, but it can happen
591
+ // that the tag is being removed before the event bubbles up.
592
+ event.stopPropagation();
593
+ }
594
+ }
595
+ /** @nocollapse */ /** @nocollapse */ McTagRemove.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagRemove, deps: [{ token: forwardRef(() => McTag) }], target: i0.ɵɵFactoryTarget.Directive });
596
+ /** @nocollapse */ /** @nocollapse */ McTagRemove.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: McTagRemove, selector: "[mcTagRemove]", host: { listeners: { "click": "handleClick($event)", "focus": "focus($event)" }, properties: { "attr.tabindex": "-1" }, classAttribute: "mc-tag-remove mc-tag-trailing-icon" }, ngImport: i0 });
597
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagRemove, decorators: [{
598
+ type: Directive,
599
+ args: [{
600
+ selector: '[mcTagRemove]',
601
+ host: {
602
+ class: 'mc-tag-remove mc-tag-trailing-icon',
603
+ '[attr.tabindex]': '-1',
604
+ '(click)': 'handleClick($event)',
605
+ '(focus)': 'focus($event)'
606
+ }
607
+ }]
608
+ }], ctorParameters: function () {
609
+ return [{ type: McTag, decorators: [{
610
+ type: Inject,
611
+ args: [forwardRef(() => McTag)]
612
+ }] }];
613
613
  } });
614
614
 
615
- class McTagListBase {
616
- constructor(defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl) {
617
- this.defaultErrorStateMatcher = defaultErrorStateMatcher;
618
- this.parentForm = parentForm;
619
- this.parentFormGroup = parentFormGroup;
620
- this.ngControl = ngControl;
621
- }
622
- }
623
- // tslint:disable-next-line:naming-convention
624
- const McTagListMixinBase = mixinErrorState(McTagListBase);
625
- // Increasing integer for generating unique ids for tag-list components.
626
- let nextUniqueId = 0;
627
- /** Change event object that is emitted when the tag list value has changed. */
628
- class McTagListChange {
629
- constructor(source, value) {
630
- this.source = source;
631
- this.value = value;
632
- }
633
- }
634
- class McTagList extends McTagListMixinBase {
635
- constructor(elementRef, changeDetectorRef, defaultErrorStateMatcher, rawValidators, mcValidation, dir, parentForm, parentFormGroup, ngControl, ngModel, formControlName) {
636
- super(defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);
637
- this.elementRef = elementRef;
638
- this.changeDetectorRef = changeDetectorRef;
639
- this.rawValidators = rawValidators;
640
- this.mcValidation = mcValidation;
641
- this.dir = dir;
642
- this.ngModel = ngModel;
643
- this.formControlName = formControlName;
644
- this.controlType = 'tag-list';
645
- this._tabIndex = 0;
646
- /**
647
- * Event that emits whenever the raw value of the tag-list changes. This is here primarily
648
- * to facilitate the two-way binding for the `value` input.
649
- * @docs-private
650
- */
651
- this.valueChange = new EventEmitter();
652
- this.uid = `mc-tag-list-${nextUniqueId++}`;
653
- /**
654
- * User defined tab index.
655
- * When it is not null, use user defined tab index. Otherwise use tabIndex
656
- */
657
- this.userTabIndex = null;
658
- this.tagChanges = new EventEmitter();
659
- /** Orientation of the tag list. */
660
- this.orientation = 'horizontal';
661
- /** Event emitted when the selected tag list value has been changed by the user. */
662
- this.change = new EventEmitter();
663
- this._required = false;
664
- this._disabled = false;
665
- this._selectable = true;
666
- this._multiple = false;
667
- /**
668
- * When a tag is destroyed, we store the index of the destroyed tag until the tags
669
- * query list notifies about the update. This is necessary because we cannot determine an
670
- * appropriate tag that should receive focus until the array of tags updated completely.
671
- */
672
- this.lastDestroyedTagIndex = null;
673
- /** Subject that emits when the component has been destroyed. */
674
- this.destroyed = new Subject();
675
- // tslint:disable-next-line:no-empty
676
- this.onTouched = () => { };
677
- // tslint:disable-next-line:no-empty
678
- this.onChange = () => { };
679
- this._compareWith = (o1, o2) => o1 === o2;
680
- if (this.ngControl) {
681
- this.ngControl.valueAccessor = this;
682
- }
683
- }
684
- /** Combined stream of all of the child tags' selection change events. */
685
- get tagSelectionChanges() {
686
- return merge(...this.tags.map((tag) => tag.selectionChange));
687
- }
688
- /** Combined stream of all of the child tags' focus change events. */
689
- get tagFocusChanges() {
690
- return merge(...this.tags.map((tag) => tag.onFocus));
691
- }
692
- /** Combined stream of all of the child tags' blur change events. */
693
- get tagBlurChanges() {
694
- return merge(...this.tags.map((tag) => tag.onBlur));
695
- }
696
- /** Combined stream of all of the child tags' remove change events. */
697
- get tagRemoveChanges() {
698
- return merge(...this.tags.map((tag) => tag.destroyed));
699
- }
700
- /** The array of selected tags inside tag list. */
701
- get selected() {
702
- return this.multiple ? this.selectionModel.selected : this.selectionModel.selected[0];
703
- }
704
- get canShowCleaner() {
705
- return this.cleaner && this.tags.length > 0;
706
- }
707
- /** Whether the user should be allowed to select multiple tags. */
708
- get multiple() {
709
- return this._multiple;
710
- }
711
- set multiple(value) {
712
- this._multiple = coerceBooleanProperty(value);
713
- }
714
- /**
715
- * A function to compare the option values with the selected values. The first argument
716
- * is a value from an option. The second is a value from the selection. A boolean
717
- * should be returned.
718
- */
719
- get compareWith() {
720
- return this._compareWith;
721
- }
722
- set compareWith(fn) {
723
- this._compareWith = fn;
724
- if (this.selectionModel) {
725
- // A different comparator means the selection could change.
726
- this.initializeSelection();
727
- }
728
- }
729
- /**
730
- * Implemented as part of McFormFieldControl.
731
- * @docs-private
732
- */
733
- get value() {
734
- return this._value;
735
- }
736
- set value(value) {
737
- this.writeValue(value);
738
- this._value = value;
739
- }
740
- /**
741
- * Implemented as part of McFormFieldControl.
742
- * @docs-private
743
- */
744
- get id() {
745
- return this.tagInput ? this.tagInput.id : this.uid;
746
- }
747
- /**
748
- * Implemented as part of McFormFieldControl.
749
- * @docs-private
750
- */
751
- get required() {
752
- return this._required;
753
- }
754
- set required(value) {
755
- this._required = coerceBooleanProperty(value);
756
- this.stateChanges.next();
757
- }
758
- /**
759
- * Implemented as part of McFormFieldControl.
760
- * @docs-private
761
- */
762
- get placeholder() {
763
- return this.tagInput ? this.tagInput.placeholder : this._placeholder;
764
- }
765
- set placeholder(value) {
766
- this._placeholder = value;
767
- this.stateChanges.next();
768
- }
769
- /** Whether any tags or the mcTagInput inside of this tag-list has focus. */
770
- get focused() {
771
- return (this.tagInput && this.tagInput.focused) || this.hasFocusedTag();
772
- }
773
- /**
774
- * Implemented as part of McFormFieldControl.
775
- * @docs-private
776
- */
777
- get empty() {
778
- return (!this.tagInput || this.tagInput.empty) && this.tags.length === 0;
779
- }
780
- /**
781
- * Implemented as part of McFormFieldControl.
782
- * @docs-private
783
- */
784
- get shouldLabelFloat() {
785
- return !this.empty || this.focused;
786
- }
787
- /**
788
- * Implemented as part of McFormFieldControl.
789
- * @docs-private
790
- */
791
- get disabled() {
792
- return this.ngControl ? !!this.ngControl.disabled : this._disabled;
793
- }
794
- set disabled(value) {
795
- this._disabled = coerceBooleanProperty(value);
796
- this.syncTagsDisabledState();
797
- }
798
- /**
799
- * Whether or not this tag list is selectable. When a tag list is not selectable,
800
- * the selected states for all the tags inside the tag list are always ignored.
801
- */
802
- get selectable() {
803
- return this._selectable;
804
- }
805
- set selectable(value) {
806
- this._selectable = coerceBooleanProperty(value);
807
- if (this.tags) {
808
- this.tags.forEach((tag) => tag.tagListSelectable = this._selectable);
809
- }
810
- }
811
- get tabIndex() {
812
- return this._tabIndex;
813
- }
814
- set tabIndex(value) {
815
- this.userTabIndex = value;
816
- this._tabIndex = value;
817
- }
818
- ngAfterContentInit() {
819
- if (this.mcValidation.useValidation) {
820
- setMosaicValidation(this, this.changeDetectorRef);
821
- }
822
- this.keyManager = new FocusKeyManager(this.tags)
823
- .withVerticalOrientation()
824
- .withHorizontalOrientation(this.dir ? this.dir.value : 'ltr');
825
- if (this.dir) {
826
- this.dir.change
827
- .pipe(takeUntil(this.destroyed))
828
- .subscribe((dir) => this.keyManager.withHorizontalOrientation(dir));
829
- }
830
- // Prevents the tag list from capturing focus and redirecting
831
- // it back to the first tag when the user tabs out.
832
- this.keyManager.tabOut
833
- .pipe(takeUntil(this.destroyed))
834
- .subscribe(() => {
835
- this._tabIndex = -1;
836
- setTimeout(() => {
837
- this._tabIndex = this.userTabIndex || 0;
838
- this.changeDetectorRef.markForCheck();
839
- });
840
- });
841
- // When the list changes, re-subscribe
842
- this.tags.changes
843
- .pipe(startWith(null), takeUntil(this.destroyed))
844
- .subscribe(() => {
845
- if (this.disabled) {
846
- // Since this happens after the content has been
847
- // checked, we need to defer it to the next tick.
848
- Promise.resolve().then(() => { this.syncTagsDisabledState(); });
849
- }
850
- this.resetTags();
851
- // Reset tags selected/deselected status
852
- this.initializeSelection();
853
- // Check to see if we need to update our tab index
854
- this.updateTabIndex();
855
- // Check to see if we have a destroyed tag and need to refocus
856
- this.updateFocusForDestroyedTags();
857
- // Defer setting the value in order to avoid the "Expression
858
- // has changed after it was checked" errors from Angular.
859
- Promise.resolve().then(() => {
860
- this.tagChanges.emit(this.tags.toArray());
861
- this.stateChanges.next();
862
- this.propagateTagsChanges();
863
- });
864
- });
865
- }
866
- ngOnInit() {
867
- this.selectionModel = new SelectionModel(this.multiple, undefined, false);
868
- this.stateChanges.next();
869
- }
870
- ngDoCheck() {
871
- if (this.ngControl) {
872
- // We need to re-evaluate this on every change detection cycle, because there are some
873
- // error triggers that we can't subscribe to (e.g. parent form submissions). This means
874
- // that whatever logic is in here has to be super lean or we risk destroying the performance.
875
- this.updateErrorState();
876
- }
877
- }
878
- ngOnDestroy() {
879
- this.destroyed.next();
880
- this.destroyed.complete();
881
- this.stateChanges.complete();
882
- this.dropSubscriptions();
883
- }
884
- /** Associates an HTML input element with this tag list. */
885
- registerInput(inputElement) {
886
- var _a;
887
- this.tagInput = inputElement;
888
- // todo need rethink about it
889
- if (this.ngControl && ((_a = inputElement.ngControl) === null || _a === void 0 ? void 0 : _a.statusChanges)) {
890
- inputElement.ngControl.statusChanges
891
- .subscribe(() => this.ngControl.control.setErrors(inputElement.ngControl.errors));
892
- }
893
- }
894
- // Implemented as part of ControlValueAccessor.
895
- writeValue(value) {
896
- if (this.tags) {
897
- this.setSelectionByValue(value, false);
898
- }
899
- }
900
- // Implemented as part of ControlValueAccessor.
901
- registerOnChange(fn) {
902
- this.onChange = fn;
903
- }
904
- // Implemented as part of ControlValueAccessor.
905
- registerOnTouched(fn) {
906
- this.onTouched = fn;
907
- }
908
- // Implemented as part of ControlValueAccessor.
909
- setDisabledState(isDisabled) {
910
- this.disabled = isDisabled;
911
- this.stateChanges.next();
912
- }
913
- /**
914
- * Implemented as part of McFormFieldControl.
915
- * @docs-private
916
- */
917
- onContainerClick(event) {
918
- if (!this.originatesFromTag(event)) {
919
- this.focus();
920
- }
921
- }
922
- /**
923
- * Focuses the first non-disabled tag in this tag list, or the associated input when there
924
- * are no eligible tags.
925
- */
926
- focus() {
927
- if (this.disabled) {
928
- return;
929
- }
930
- // TODO: ARIA says this should focus the first `selected` tag if any are selected.
931
- // Focus on first element if there's no tagInput inside tag-list
932
- if (this.tagInput && this.tagInput.focused) {
933
- // do nothing
934
- }
935
- else if (this.tags.length > 0) {
936
- this.keyManager.setFirstItemActive();
937
- this.stateChanges.next();
938
- }
939
- else {
940
- this.focusInput();
941
- this.stateChanges.next();
942
- }
943
- }
944
- /** Attempt to focus an input if we have one. */
945
- focusInput() {
946
- if (this.tagInput) {
947
- this.tagInput.focus();
948
- }
949
- }
950
- /**
951
- * Pass events to the keyboard manager. Available here for tests.
952
- */
953
- keydown(event) {
954
- const target = event.target;
955
- // If they are on an empty input and hit backspace, focus the last tag
956
- // tslint:disable-next-line: deprecation
957
- if (event.keyCode === BACKSPACE && this.isInputEmpty(target)) {
958
- this.keyManager.setLastItemActive();
959
- event.preventDefault();
960
- }
961
- else if (target && target.classList.contains('mc-tag')) {
962
- // tslint:disable-next-line: deprecation
963
- if (event.keyCode === HOME) {
964
- this.keyManager.setFirstItemActive();
965
- event.preventDefault();
966
- // tslint:disable-next-line: deprecation
967
- }
968
- else if (event.keyCode === END) {
969
- this.keyManager.setLastItemActive();
970
- event.preventDefault();
971
- }
972
- else {
973
- this.keyManager.onKeydown(event);
974
- }
975
- this.stateChanges.next();
976
- }
977
- }
978
- setSelectionByValue(value, isUserInput = true) {
979
- this.clearSelection();
980
- this.tags.forEach((tag) => tag.deselect());
981
- if (Array.isArray(value)) {
982
- value.forEach((currentValue) => this.selectValue(currentValue, isUserInput));
983
- this.sortValues();
984
- }
985
- else {
986
- const correspondingTag = this.selectValue(value, isUserInput);
987
- // Shift focus to the active item. Note that we shouldn't do this in multiple
988
- // mode, because we don't know what tag the user interacted with last.
989
- if (correspondingTag && isUserInput) {
990
- this.keyManager.setActiveItem(correspondingTag);
991
- }
992
- }
993
- }
994
- /** When blurred, mark the field as touched when focus moved outside the tag list. */
995
- blur() {
996
- if (!this.hasFocusedTag()) {
997
- this.keyManager.setActiveItem(-1);
998
- }
999
- if (!this.disabled) {
1000
- if (this.tagInput) {
1001
- // If there's a tag input, we should check whether the focus moved to tag input.
1002
- // If the focus is not moved to tag input, mark the field as touched. If the focus moved
1003
- // to tag input, do nothing.
1004
- // Timeout is needed to wait for the focus() event trigger on tag input.
1005
- setTimeout(() => {
1006
- if (!this.focused) {
1007
- this.markAsTouched();
1008
- }
1009
- });
1010
- }
1011
- else {
1012
- // If there's no tag input, then mark the field as touched.
1013
- this.markAsTouched();
1014
- }
1015
- }
1016
- }
1017
- /** Mark the field as touched */
1018
- markAsTouched() {
1019
- this.onTouched();
1020
- this.changeDetectorRef.markForCheck();
1021
- this.stateChanges.next();
1022
- }
1023
- /**
1024
- * Check the tab index as you should not be allowed to focus an empty list.
1025
- */
1026
- updateTabIndex() {
1027
- // If we have 0 tags, we should not allow keyboard focus
1028
- this._tabIndex = this.userTabIndex || (this.tags.length === 0 ? -1 : 0);
1029
- }
1030
- /**
1031
- * If the amount of tags changed, we need to update the
1032
- * key manager state and focus the next closest tag.
1033
- */
1034
- updateFocusForDestroyedTags() {
1035
- if (this.lastDestroyedTagIndex != null) {
1036
- if (this.tags.length) {
1037
- const newTagIndex = Math.min(this.lastDestroyedTagIndex, this.tags.length - 1);
1038
- this.keyManager.setActiveItem(newTagIndex);
1039
- }
1040
- else {
1041
- this.focusInput();
1042
- }
1043
- }
1044
- this.lastDestroyedTagIndex = null;
1045
- }
1046
- /**
1047
- * Utility to ensure all indexes are valid.
1048
- *
1049
- * @param index The index to be checked.
1050
- * @returns True if the index is valid for our list of tags.
1051
- */
1052
- isValidIndex(index) {
1053
- return index >= 0 && index < this.tags.length;
1054
- }
1055
- isInputEmpty(element) {
1056
- if (element && element.nodeName.toLowerCase() === 'input') {
1057
- const input = element;
1058
- return !input.value;
1059
- }
1060
- return false;
1061
- }
1062
- /**
1063
- * Finds and selects the tag based on its value.
1064
- * @returns Tag that has the corresponding value.
1065
- */
1066
- selectValue(value, isUserInput = true) {
1067
- const correspondingTag = this.tags.find((tag) => {
1068
- return tag.value != null && this._compareWith(tag.value, value);
1069
- });
1070
- if (correspondingTag) {
1071
- if (isUserInput) {
1072
- correspondingTag.selectViaInteraction();
1073
- }
1074
- else {
1075
- correspondingTag.select();
1076
- }
1077
- this.selectionModel.select(correspondingTag);
1078
- }
1079
- return correspondingTag;
1080
- }
1081
- initializeSelection() {
1082
- // Defer setting the value in order to avoid the "Expression
1083
- // has changed after it was checked" errors from Angular.
1084
- Promise.resolve().then(() => {
1085
- if (this.ngControl || this._value) {
1086
- this.setSelectionByValue(this.ngControl ? this.ngControl.value : this._value, false);
1087
- this.stateChanges.next();
1088
- }
1089
- });
1090
- }
1091
- /**
1092
- * Deselects every tag in the list.
1093
- * @param skip Tag that should not be deselected.
1094
- */
1095
- clearSelection(skip) {
1096
- this.selectionModel.clear();
1097
- this.tags.forEach((tag) => {
1098
- if (tag !== skip) {
1099
- tag.deselect();
1100
- }
1101
- });
1102
- this.stateChanges.next();
1103
- }
1104
- /**
1105
- * Sorts the model values, ensuring that they keep the same
1106
- * order that they have in the panel.
1107
- */
1108
- sortValues() {
1109
- if (this._multiple) {
1110
- this.selectionModel.clear();
1111
- this.tags.forEach((tag) => {
1112
- if (tag.selected) {
1113
- this.selectionModel.select(tag);
1114
- }
1115
- });
1116
- this.stateChanges.next();
1117
- }
1118
- }
1119
- /** Emits change event to set the model value. */
1120
- // todo need rethink this method and selection logic
1121
- propagateChanges(fallbackValue) {
1122
- let valueToEmit = null;
1123
- if (Array.isArray(this.selected)) {
1124
- valueToEmit = this.selected.map((tag) => tag.value);
1125
- }
1126
- else {
1127
- valueToEmit = this.selected ? this.selected.value : fallbackValue;
1128
- }
1129
- this._value = valueToEmit;
1130
- this.change.emit(new McTagListChange(this, valueToEmit));
1131
- this.valueChange.emit(valueToEmit);
1132
- this.onChange(valueToEmit);
1133
- this.changeDetectorRef.markForCheck();
1134
- }
1135
- propagateTagsChanges() {
1136
- const valueToEmit = this.tags.map((tag) => tag.value);
1137
- this._value = valueToEmit;
1138
- this.change.emit(new McTagListChange(this, valueToEmit));
1139
- this.valueChange.emit(valueToEmit);
1140
- this.onChange(valueToEmit);
1141
- this.changeDetectorRef.markForCheck();
1142
- }
1143
- resetTags() {
1144
- this.dropSubscriptions();
1145
- this.listenToTagsFocus();
1146
- this.listenToTagsSelection();
1147
- this.listenToTagsRemoved();
1148
- }
1149
- dropSubscriptions() {
1150
- if (this.tagFocusSubscription) {
1151
- this.tagFocusSubscription.unsubscribe();
1152
- this.tagFocusSubscription = null;
1153
- }
1154
- if (this.tagBlurSubscription) {
1155
- this.tagBlurSubscription.unsubscribe();
1156
- this.tagBlurSubscription = null;
1157
- }
1158
- if (this.tagSelectionSubscription) {
1159
- this.tagSelectionSubscription.unsubscribe();
1160
- this.tagSelectionSubscription = null;
1161
- }
1162
- if (this.tagRemoveSubscription) {
1163
- this.tagRemoveSubscription.unsubscribe();
1164
- this.tagRemoveSubscription = null;
1165
- }
1166
- }
1167
- /** Listens to user-generated selection events on each tag. */
1168
- listenToTagsSelection() {
1169
- this.tagSelectionSubscription = this.tagSelectionChanges.subscribe((event) => {
1170
- if (event.source.selected) {
1171
- this.selectionModel.select(event.source);
1172
- }
1173
- else {
1174
- this.selectionModel.deselect(event.source);
1175
- }
1176
- // For single selection tag list, make sure the deselected value is unselected.
1177
- if (!this.multiple) {
1178
- this.tags.forEach((tag) => {
1179
- if (!this.selectionModel.isSelected(tag) && tag.selected) {
1180
- tag.deselect();
1181
- }
1182
- });
1183
- }
1184
- if (event.isUserInput) {
1185
- this.propagateChanges();
1186
- }
1187
- });
1188
- }
1189
- /** Listens to user-generated selection events on each tag. */
1190
- listenToTagsFocus() {
1191
- this.tagFocusSubscription = this.tagFocusChanges
1192
- .subscribe((event) => {
1193
- const tagIndex = this.tags.toArray().indexOf(event.tag);
1194
- if (this.isValidIndex(tagIndex)) {
1195
- this.keyManager.updateActiveItem(tagIndex);
1196
- }
1197
- this.stateChanges.next();
1198
- });
1199
- this.tagBlurSubscription = this.tagBlurChanges
1200
- .subscribe(() => {
1201
- this.blur();
1202
- this.stateChanges.next();
1203
- });
1204
- }
1205
- listenToTagsRemoved() {
1206
- this.tagRemoveSubscription = this.tagRemoveChanges
1207
- .subscribe((event) => {
1208
- const tag = event.tag;
1209
- const tagIndex = this.tags.toArray().indexOf(event.tag);
1210
- // In case the tag that will be removed is currently focused, we temporarily store
1211
- // the index in order to be able to determine an appropriate sibling tag that will
1212
- // receive focus.
1213
- if (this.isValidIndex(tagIndex) && tag.hasFocus) {
1214
- this.lastDestroyedTagIndex = tagIndex;
1215
- }
1216
- });
1217
- }
1218
- /** Checks whether an event comes from inside a tag element. */
1219
- originatesFromTag(event) {
1220
- let currentElement = event.target;
1221
- while (currentElement && currentElement !== this.elementRef.nativeElement) {
1222
- if (currentElement.classList.contains('mc-tag')) {
1223
- return true;
1224
- }
1225
- currentElement = currentElement.parentElement;
1226
- }
1227
- return false;
1228
- }
1229
- /** Checks whether any of the tags is focused. */
1230
- hasFocusedTag() {
1231
- return this.tags.some((tag) => tag.hasFocus);
1232
- }
1233
- /** Syncs the list's disabled state with the individual tags. */
1234
- syncTagsDisabledState() {
1235
- if (this.tags) {
1236
- this.tags.forEach((tag) => {
1237
- tag.disabled = this._disabled;
1238
- });
1239
- }
1240
- }
1241
- }
1242
- /** @nocollapse */ /** @nocollapse */ McTagList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagList, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ErrorStateMatcher }, { token: NG_VALIDATORS, optional: true }, { token: MC_VALIDATION, optional: true }, { token: i2.Directionality, optional: true }, { token: i3.NgForm, optional: true }, { token: i3.FormGroupDirective, optional: true }, { token: i3.NgControl, optional: true, self: true }, { token: i3.NgModel, optional: true, self: true }, { token: i3.FormControlName, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
1243
- /** @nocollapse */ /** @nocollapse */ McTagList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.7", type: McTagList, selector: "mc-tag-list", inputs: { multiple: "multiple", compareWith: "compareWith", value: "value", required: "required", placeholder: "placeholder", disabled: "disabled", selectable: "selectable", tabIndex: "tabIndex", errorStateMatcher: "errorStateMatcher", orientation: "orientation" }, outputs: { valueChange: "valueChange", change: "change" }, host: { listeners: { "focus": "focus()", "blur": "blur()", "keydown": "keydown($event)" }, properties: { "class.mc-disabled": "disabled", "class.mc-invalid": "errorState", "attr.tabindex": "disabled ? null : tabIndex", "id": "uid" }, classAttribute: "mc-tag-list" }, providers: [{ provide: McFormFieldControl, useExisting: McTagList }], queries: [{ propertyName: "cleaner", first: true, predicate: ["mcTagListCleaner"], descendants: true, static: true }, { propertyName: "tags", predicate: McTag, descendants: true }], exportAs: ["mcTagList"], usesInheritance: true, ngImport: i0, template: "<div class=\"mc-tags-list__list-container\">\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n<div class=\"mc-tags-list__cleaner\"\r\n *ngIf=\"canShowCleaner\">\r\n <ng-content select=\"mc-cleaner\"></ng-content>\r\n</div>\r\n", styles: [".mc-tag-list{display:flex;flex-direction:row;box-sizing:border-box}.mc-tag-input{border:none;outline:none;background:transparent}.mc-tags-list__list-container{display:flex;flex-wrap:wrap;flex:1 1 100%;box-sizing:border-box;min-width:0;min-height:calc(var(--mc-form-field-size-height, 32px) - var(--mc-form-field-size-border-width, 1px) * 2);padding:var(--mc-tag-list-size-padding, 1px 12px)}.mc-tags-list__list-container .mc-tag-input{max-width:100%;flex:1 1 auto;height:var(--mc-tag-input-size-height, 22px);margin:var(--mc-tag-input-size-margin, 2px 4px)}.mc-tags-list__cleaner .mc-cleaner{height:30px}\n"], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1244
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagList, decorators: [{
1245
- type: Component,
1246
- args: [{ selector: 'mc-tag-list', exportAs: 'mcTagList', host: {
1247
- class: 'mc-tag-list',
1248
- '[class.mc-disabled]': 'disabled',
1249
- '[class.mc-invalid]': 'errorState',
1250
- '[attr.tabindex]': 'disabled ? null : tabIndex',
1251
- '[id]': 'uid',
1252
- '(focus)': 'focus()',
1253
- '(blur)': 'blur()',
1254
- '(keydown)': 'keydown($event)'
1255
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: McFormFieldControl, useExisting: McTagList }], template: "<div class=\"mc-tags-list__list-container\">\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n<div class=\"mc-tags-list__cleaner\"\r\n *ngIf=\"canShowCleaner\">\r\n <ng-content select=\"mc-cleaner\"></ng-content>\r\n</div>\r\n", styles: [".mc-tag-list{display:flex;flex-direction:row;box-sizing:border-box}.mc-tag-input{border:none;outline:none;background:transparent}.mc-tags-list__list-container{display:flex;flex-wrap:wrap;flex:1 1 100%;box-sizing:border-box;min-width:0;min-height:calc(var(--mc-form-field-size-height, 32px) - var(--mc-form-field-size-border-width, 1px) * 2);padding:var(--mc-tag-list-size-padding, 1px 12px)}.mc-tags-list__list-container .mc-tag-input{max-width:100%;flex:1 1 auto;height:var(--mc-tag-input-size-height, 22px);margin:var(--mc-tag-input-size-margin, 2px 4px)}.mc-tags-list__cleaner .mc-cleaner{height:30px}\n"] }]
1256
- }], ctorParameters: function () {
1257
- return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ErrorStateMatcher }, { type: undefined, decorators: [{
1258
- type: Optional
1259
- }, {
1260
- type: Inject,
1261
- args: [NG_VALIDATORS]
1262
- }] }, { type: undefined, decorators: [{
1263
- type: Optional
1264
- }, {
1265
- type: Inject,
1266
- args: [MC_VALIDATION]
1267
- }] }, { type: i2.Directionality, decorators: [{
1268
- type: Optional
1269
- }] }, { type: i3.NgForm, decorators: [{
1270
- type: Optional
1271
- }] }, { type: i3.FormGroupDirective, decorators: [{
1272
- type: Optional
1273
- }] }, { type: i3.NgControl, decorators: [{
1274
- type: Optional
1275
- }, {
1276
- type: Self
1277
- }] }, { type: i3.NgModel, decorators: [{
1278
- type: Optional
1279
- }, {
1280
- type: Self
1281
- }] }, { type: i3.FormControlName, decorators: [{
1282
- type: Optional
1283
- }, {
1284
- type: Self
1285
- }] }];
1286
- }, propDecorators: { multiple: [{
1287
- type: Input
1288
- }], compareWith: [{
1289
- type: Input
1290
- }], value: [{
1291
- type: Input
1292
- }], required: [{
1293
- type: Input
1294
- }], placeholder: [{
1295
- type: Input
1296
- }], disabled: [{
1297
- type: Input
1298
- }], selectable: [{
1299
- type: Input
1300
- }], tabIndex: [{
1301
- type: Input
1302
- }], valueChange: [{
1303
- type: Output
1304
- }], errorStateMatcher: [{
1305
- type: Input
1306
- }], orientation: [{
1307
- type: Input,
1308
- args: ['orientation']
1309
- }], change: [{
1310
- type: Output
1311
- }], cleaner: [{
1312
- type: ContentChild,
1313
- args: ['mcTagListCleaner', { static: true }]
1314
- }], tags: [{
1315
- type: ContentChildren,
1316
- args: [McTag, {
1317
- // Need to use `descendants: true`,
1318
- // Ivy will no longer match indirect descendants if it's left as false.
1319
- descendants: true
1320
- }]
615
+ class McTagListBase {
616
+ constructor(defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl) {
617
+ this.defaultErrorStateMatcher = defaultErrorStateMatcher;
618
+ this.parentForm = parentForm;
619
+ this.parentFormGroup = parentFormGroup;
620
+ this.ngControl = ngControl;
621
+ }
622
+ }
623
+ // tslint:disable-next-line:naming-convention
624
+ const McTagListMixinBase = mixinErrorState(McTagListBase);
625
+ // Increasing integer for generating unique ids for tag-list components.
626
+ let nextUniqueId = 0;
627
+ /** Change event object that is emitted when the tag list value has changed. */
628
+ class McTagListChange {
629
+ constructor(source, value) {
630
+ this.source = source;
631
+ this.value = value;
632
+ }
633
+ }
634
+ class McTagList extends McTagListMixinBase {
635
+ constructor(elementRef, changeDetectorRef, defaultErrorStateMatcher, rawValidators, mcValidation, dir, parentForm, parentFormGroup, ngControl, ngModel, formControlName) {
636
+ super(defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);
637
+ this.elementRef = elementRef;
638
+ this.changeDetectorRef = changeDetectorRef;
639
+ this.rawValidators = rawValidators;
640
+ this.mcValidation = mcValidation;
641
+ this.dir = dir;
642
+ this.ngModel = ngModel;
643
+ this.formControlName = formControlName;
644
+ this.controlType = 'tag-list';
645
+ this._tabIndex = 0;
646
+ /**
647
+ * Event that emits whenever the raw value of the tag-list changes. This is here primarily
648
+ * to facilitate the two-way binding for the `value` input.
649
+ * @docs-private
650
+ */
651
+ this.valueChange = new EventEmitter();
652
+ this.uid = `mc-tag-list-${nextUniqueId++}`;
653
+ /**
654
+ * User defined tab index.
655
+ * When it is not null, use user defined tab index. Otherwise use tabIndex
656
+ */
657
+ this.userTabIndex = null;
658
+ this.tagChanges = new EventEmitter();
659
+ /** Orientation of the tag list. */
660
+ this.orientation = 'horizontal';
661
+ /** Event emitted when the selected tag list value has been changed by the user. */
662
+ this.change = new EventEmitter();
663
+ this._required = false;
664
+ this._disabled = false;
665
+ this._selectable = true;
666
+ this._multiple = false;
667
+ /**
668
+ * When a tag is destroyed, we store the index of the destroyed tag until the tags
669
+ * query list notifies about the update. This is necessary because we cannot determine an
670
+ * appropriate tag that should receive focus until the array of tags updated completely.
671
+ */
672
+ this.lastDestroyedTagIndex = null;
673
+ /** Subject that emits when the component has been destroyed. */
674
+ this.destroyed = new Subject();
675
+ // tslint:disable-next-line:no-empty
676
+ this.onTouched = () => { };
677
+ // tslint:disable-next-line:no-empty
678
+ this.onChange = () => { };
679
+ this._compareWith = (o1, o2) => o1 === o2;
680
+ if (this.ngControl) {
681
+ this.ngControl.valueAccessor = this;
682
+ }
683
+ }
684
+ /** Combined stream of all of the child tags' selection change events. */
685
+ get tagSelectionChanges() {
686
+ return merge(...this.tags.map((tag) => tag.selectionChange));
687
+ }
688
+ /** Combined stream of all of the child tags' focus change events. */
689
+ get tagFocusChanges() {
690
+ return merge(...this.tags.map((tag) => tag.onFocus));
691
+ }
692
+ /** Combined stream of all of the child tags' blur change events. */
693
+ get tagBlurChanges() {
694
+ return merge(...this.tags.map((tag) => tag.onBlur));
695
+ }
696
+ /** Combined stream of all of the child tags' remove change events. */
697
+ get tagRemoveChanges() {
698
+ return merge(...this.tags.map((tag) => tag.destroyed));
699
+ }
700
+ /** The array of selected tags inside tag list. */
701
+ get selected() {
702
+ return this.multiple ? this.selectionModel.selected : this.selectionModel.selected[0];
703
+ }
704
+ get canShowCleaner() {
705
+ return this.cleaner && this.tags.length > 0;
706
+ }
707
+ /** Whether the user should be allowed to select multiple tags. */
708
+ get multiple() {
709
+ return this._multiple;
710
+ }
711
+ set multiple(value) {
712
+ this._multiple = coerceBooleanProperty(value);
713
+ }
714
+ /**
715
+ * A function to compare the option values with the selected values. The first argument
716
+ * is a value from an option. The second is a value from the selection. A boolean
717
+ * should be returned.
718
+ */
719
+ get compareWith() {
720
+ return this._compareWith;
721
+ }
722
+ set compareWith(fn) {
723
+ this._compareWith = fn;
724
+ if (this.selectionModel) {
725
+ // A different comparator means the selection could change.
726
+ this.initializeSelection();
727
+ }
728
+ }
729
+ /**
730
+ * Implemented as part of McFormFieldControl.
731
+ * @docs-private
732
+ */
733
+ get value() {
734
+ return this._value;
735
+ }
736
+ set value(value) {
737
+ this.writeValue(value);
738
+ this._value = value;
739
+ }
740
+ /**
741
+ * Implemented as part of McFormFieldControl.
742
+ * @docs-private
743
+ */
744
+ get id() {
745
+ return this.tagInput ? this.tagInput.id : this.uid;
746
+ }
747
+ /**
748
+ * Implemented as part of McFormFieldControl.
749
+ * @docs-private
750
+ */
751
+ get required() {
752
+ return this._required;
753
+ }
754
+ set required(value) {
755
+ this._required = coerceBooleanProperty(value);
756
+ this.stateChanges.next();
757
+ }
758
+ /**
759
+ * Implemented as part of McFormFieldControl.
760
+ * @docs-private
761
+ */
762
+ get placeholder() {
763
+ return this.tagInput ? this.tagInput.placeholder : this._placeholder;
764
+ }
765
+ set placeholder(value) {
766
+ this._placeholder = value;
767
+ this.stateChanges.next();
768
+ }
769
+ /** Whether any tags or the mcTagInput inside of this tag-list has focus. */
770
+ get focused() {
771
+ return (this.tagInput && this.tagInput.focused) || this.hasFocusedTag();
772
+ }
773
+ /**
774
+ * Implemented as part of McFormFieldControl.
775
+ * @docs-private
776
+ */
777
+ get empty() {
778
+ return (!this.tagInput || this.tagInput.empty) && this.tags.length === 0;
779
+ }
780
+ /**
781
+ * Implemented as part of McFormFieldControl.
782
+ * @docs-private
783
+ */
784
+ get shouldLabelFloat() {
785
+ return !this.empty || this.focused;
786
+ }
787
+ /**
788
+ * Implemented as part of McFormFieldControl.
789
+ * @docs-private
790
+ */
791
+ get disabled() {
792
+ return this.ngControl ? !!this.ngControl.disabled : this._disabled;
793
+ }
794
+ set disabled(value) {
795
+ this._disabled = coerceBooleanProperty(value);
796
+ this.syncTagsDisabledState();
797
+ }
798
+ /**
799
+ * Whether or not this tag list is selectable. When a tag list is not selectable,
800
+ * the selected states for all the tags inside the tag list are always ignored.
801
+ */
802
+ get selectable() {
803
+ return this._selectable;
804
+ }
805
+ set selectable(value) {
806
+ this._selectable = coerceBooleanProperty(value);
807
+ if (this.tags) {
808
+ this.tags.forEach((tag) => tag.tagListSelectable = this._selectable);
809
+ }
810
+ }
811
+ get tabIndex() {
812
+ return this._tabIndex;
813
+ }
814
+ set tabIndex(value) {
815
+ this.userTabIndex = value;
816
+ this._tabIndex = value;
817
+ }
818
+ ngAfterContentInit() {
819
+ if (this.mcValidation.useValidation) {
820
+ setMosaicValidation(this, this.changeDetectorRef);
821
+ }
822
+ this.keyManager = new FocusKeyManager(this.tags)
823
+ .withVerticalOrientation()
824
+ .withHorizontalOrientation(this.dir ? this.dir.value : 'ltr');
825
+ if (this.dir) {
826
+ this.dir.change
827
+ .pipe(takeUntil(this.destroyed))
828
+ .subscribe((dir) => this.keyManager.withHorizontalOrientation(dir));
829
+ }
830
+ // Prevents the tag list from capturing focus and redirecting
831
+ // it back to the first tag when the user tabs out.
832
+ this.keyManager.tabOut
833
+ .pipe(takeUntil(this.destroyed))
834
+ .subscribe(() => {
835
+ this._tabIndex = -1;
836
+ setTimeout(() => {
837
+ this._tabIndex = this.userTabIndex || 0;
838
+ this.changeDetectorRef.markForCheck();
839
+ });
840
+ });
841
+ // When the list changes, re-subscribe
842
+ this.tags.changes
843
+ .pipe(startWith(null), takeUntil(this.destroyed))
844
+ .subscribe(() => {
845
+ if (this.disabled) {
846
+ // Since this happens after the content has been
847
+ // checked, we need to defer it to the next tick.
848
+ Promise.resolve().then(() => { this.syncTagsDisabledState(); });
849
+ }
850
+ this.resetTags();
851
+ // Reset tags selected/deselected status
852
+ this.initializeSelection();
853
+ // Check to see if we need to update our tab index
854
+ this.updateTabIndex();
855
+ // Check to see if we have a destroyed tag and need to refocus
856
+ this.updateFocusForDestroyedTags();
857
+ // Defer setting the value in order to avoid the "Expression
858
+ // has changed after it was checked" errors from Angular.
859
+ Promise.resolve().then(() => {
860
+ this.tagChanges.emit(this.tags.toArray());
861
+ this.stateChanges.next();
862
+ this.propagateTagsChanges();
863
+ });
864
+ });
865
+ }
866
+ ngOnInit() {
867
+ this.selectionModel = new SelectionModel(this.multiple, undefined, false);
868
+ this.stateChanges.next();
869
+ }
870
+ ngDoCheck() {
871
+ if (this.ngControl) {
872
+ // We need to re-evaluate this on every change detection cycle, because there are some
873
+ // error triggers that we can't subscribe to (e.g. parent form submissions). This means
874
+ // that whatever logic is in here has to be super lean or we risk destroying the performance.
875
+ this.updateErrorState();
876
+ }
877
+ }
878
+ ngOnDestroy() {
879
+ this.destroyed.next();
880
+ this.destroyed.complete();
881
+ this.stateChanges.complete();
882
+ this.dropSubscriptions();
883
+ }
884
+ /** Associates an HTML input element with this tag list. */
885
+ registerInput(inputElement) {
886
+ var _a;
887
+ this.tagInput = inputElement;
888
+ // todo need rethink about it
889
+ if (this.ngControl && ((_a = inputElement.ngControl) === null || _a === void 0 ? void 0 : _a.statusChanges)) {
890
+ inputElement.ngControl.statusChanges
891
+ .subscribe(() => this.ngControl.control.setErrors(inputElement.ngControl.errors));
892
+ }
893
+ }
894
+ // Implemented as part of ControlValueAccessor.
895
+ writeValue(value) {
896
+ if (this.tags) {
897
+ this.setSelectionByValue(value, false);
898
+ }
899
+ }
900
+ // Implemented as part of ControlValueAccessor.
901
+ registerOnChange(fn) {
902
+ this.onChange = fn;
903
+ }
904
+ // Implemented as part of ControlValueAccessor.
905
+ registerOnTouched(fn) {
906
+ this.onTouched = fn;
907
+ }
908
+ // Implemented as part of ControlValueAccessor.
909
+ setDisabledState(isDisabled) {
910
+ this.disabled = isDisabled;
911
+ this.stateChanges.next();
912
+ }
913
+ /**
914
+ * Implemented as part of McFormFieldControl.
915
+ * @docs-private
916
+ */
917
+ onContainerClick(event) {
918
+ if (!this.originatesFromTag(event)) {
919
+ this.focus();
920
+ }
921
+ }
922
+ /**
923
+ * Focuses the first non-disabled tag in this tag list, or the associated input when there
924
+ * are no eligible tags.
925
+ */
926
+ focus() {
927
+ if (this.disabled) {
928
+ return;
929
+ }
930
+ // TODO: ARIA says this should focus the first `selected` tag if any are selected.
931
+ // Focus on first element if there's no tagInput inside tag-list
932
+ if (this.tagInput && this.tagInput.focused) {
933
+ // do nothing
934
+ }
935
+ else if (this.tags.length > 0) {
936
+ this.keyManager.setFirstItemActive();
937
+ this.stateChanges.next();
938
+ }
939
+ else {
940
+ this.focusInput();
941
+ this.stateChanges.next();
942
+ }
943
+ }
944
+ /** Attempt to focus an input if we have one. */
945
+ focusInput() {
946
+ if (this.tagInput) {
947
+ this.tagInput.focus();
948
+ }
949
+ }
950
+ /**
951
+ * Pass events to the keyboard manager. Available here for tests.
952
+ */
953
+ keydown(event) {
954
+ const target = event.target;
955
+ // If they are on an empty input and hit backspace, focus the last tag
956
+ // tslint:disable-next-line: deprecation
957
+ if (event.keyCode === BACKSPACE && this.isInputEmpty(target)) {
958
+ this.keyManager.setLastItemActive();
959
+ event.preventDefault();
960
+ }
961
+ else if (target && target.classList.contains('mc-tag')) {
962
+ // tslint:disable-next-line: deprecation
963
+ if (event.keyCode === HOME) {
964
+ this.keyManager.setFirstItemActive();
965
+ event.preventDefault();
966
+ // tslint:disable-next-line: deprecation
967
+ }
968
+ else if (event.keyCode === END) {
969
+ this.keyManager.setLastItemActive();
970
+ event.preventDefault();
971
+ }
972
+ else {
973
+ this.keyManager.onKeydown(event);
974
+ }
975
+ this.stateChanges.next();
976
+ }
977
+ }
978
+ setSelectionByValue(value, isUserInput = true) {
979
+ this.clearSelection();
980
+ this.tags.forEach((tag) => tag.deselect());
981
+ if (Array.isArray(value)) {
982
+ value.forEach((currentValue) => this.selectValue(currentValue, isUserInput));
983
+ this.sortValues();
984
+ }
985
+ else {
986
+ const correspondingTag = this.selectValue(value, isUserInput);
987
+ // Shift focus to the active item. Note that we shouldn't do this in multiple
988
+ // mode, because we don't know what tag the user interacted with last.
989
+ if (correspondingTag && isUserInput) {
990
+ this.keyManager.setActiveItem(correspondingTag);
991
+ }
992
+ }
993
+ }
994
+ /** When blurred, mark the field as touched when focus moved outside the tag list. */
995
+ blur() {
996
+ if (!this.hasFocusedTag()) {
997
+ this.keyManager.setActiveItem(-1);
998
+ }
999
+ if (!this.disabled) {
1000
+ if (this.tagInput) {
1001
+ // If there's a tag input, we should check whether the focus moved to tag input.
1002
+ // If the focus is not moved to tag input, mark the field as touched. If the focus moved
1003
+ // to tag input, do nothing.
1004
+ // Timeout is needed to wait for the focus() event trigger on tag input.
1005
+ setTimeout(() => {
1006
+ if (!this.focused) {
1007
+ this.markAsTouched();
1008
+ }
1009
+ });
1010
+ }
1011
+ else {
1012
+ // If there's no tag input, then mark the field as touched.
1013
+ this.markAsTouched();
1014
+ }
1015
+ }
1016
+ }
1017
+ /** Mark the field as touched */
1018
+ markAsTouched() {
1019
+ this.onTouched();
1020
+ this.changeDetectorRef.markForCheck();
1021
+ this.stateChanges.next();
1022
+ }
1023
+ /**
1024
+ * Check the tab index as you should not be allowed to focus an empty list.
1025
+ */
1026
+ updateTabIndex() {
1027
+ // If we have 0 tags, we should not allow keyboard focus
1028
+ this._tabIndex = this.userTabIndex || (this.tags.length === 0 ? -1 : 0);
1029
+ }
1030
+ /**
1031
+ * If the amount of tags changed, we need to update the
1032
+ * key manager state and focus the next closest tag.
1033
+ */
1034
+ updateFocusForDestroyedTags() {
1035
+ if (this.lastDestroyedTagIndex != null) {
1036
+ if (this.tags.length) {
1037
+ const newTagIndex = Math.min(this.lastDestroyedTagIndex, this.tags.length - 1);
1038
+ this.keyManager.setActiveItem(newTagIndex);
1039
+ }
1040
+ else {
1041
+ this.focusInput();
1042
+ }
1043
+ }
1044
+ this.lastDestroyedTagIndex = null;
1045
+ }
1046
+ /**
1047
+ * Utility to ensure all indexes are valid.
1048
+ *
1049
+ * @param index The index to be checked.
1050
+ * @returns True if the index is valid for our list of tags.
1051
+ */
1052
+ isValidIndex(index) {
1053
+ return index >= 0 && index < this.tags.length;
1054
+ }
1055
+ isInputEmpty(element) {
1056
+ if (element && element.nodeName.toLowerCase() === 'input') {
1057
+ const input = element;
1058
+ return !input.value;
1059
+ }
1060
+ return false;
1061
+ }
1062
+ /**
1063
+ * Finds and selects the tag based on its value.
1064
+ * @returns Tag that has the corresponding value.
1065
+ */
1066
+ selectValue(value, isUserInput = true) {
1067
+ const correspondingTag = this.tags.find((tag) => {
1068
+ return tag.value != null && this._compareWith(tag.value, value);
1069
+ });
1070
+ if (correspondingTag) {
1071
+ if (isUserInput) {
1072
+ correspondingTag.selectViaInteraction();
1073
+ }
1074
+ else {
1075
+ correspondingTag.select();
1076
+ }
1077
+ this.selectionModel.select(correspondingTag);
1078
+ }
1079
+ return correspondingTag;
1080
+ }
1081
+ initializeSelection() {
1082
+ // Defer setting the value in order to avoid the "Expression
1083
+ // has changed after it was checked" errors from Angular.
1084
+ Promise.resolve().then(() => {
1085
+ if (this.ngControl || this._value) {
1086
+ this.setSelectionByValue(this.ngControl ? this.ngControl.value : this._value, false);
1087
+ this.stateChanges.next();
1088
+ }
1089
+ });
1090
+ }
1091
+ /**
1092
+ * Deselects every tag in the list.
1093
+ * @param skip Tag that should not be deselected.
1094
+ */
1095
+ clearSelection(skip) {
1096
+ this.selectionModel.clear();
1097
+ this.tags.forEach((tag) => {
1098
+ if (tag !== skip) {
1099
+ tag.deselect();
1100
+ }
1101
+ });
1102
+ this.stateChanges.next();
1103
+ }
1104
+ /**
1105
+ * Sorts the model values, ensuring that they keep the same
1106
+ * order that they have in the panel.
1107
+ */
1108
+ sortValues() {
1109
+ if (this._multiple) {
1110
+ this.selectionModel.clear();
1111
+ this.tags.forEach((tag) => {
1112
+ if (tag.selected) {
1113
+ this.selectionModel.select(tag);
1114
+ }
1115
+ });
1116
+ this.stateChanges.next();
1117
+ }
1118
+ }
1119
+ /** Emits change event to set the model value. */
1120
+ // todo need rethink this method and selection logic
1121
+ propagateChanges(fallbackValue) {
1122
+ let valueToEmit = null;
1123
+ if (Array.isArray(this.selected)) {
1124
+ valueToEmit = this.selected.map((tag) => tag.value);
1125
+ }
1126
+ else {
1127
+ valueToEmit = this.selected ? this.selected.value : fallbackValue;
1128
+ }
1129
+ this._value = valueToEmit;
1130
+ this.change.emit(new McTagListChange(this, valueToEmit));
1131
+ this.valueChange.emit(valueToEmit);
1132
+ this.onChange(valueToEmit);
1133
+ this.changeDetectorRef.markForCheck();
1134
+ }
1135
+ propagateTagsChanges() {
1136
+ const valueToEmit = this.tags.map((tag) => tag.value);
1137
+ this._value = valueToEmit;
1138
+ this.change.emit(new McTagListChange(this, valueToEmit));
1139
+ this.valueChange.emit(valueToEmit);
1140
+ this.onChange(valueToEmit);
1141
+ this.changeDetectorRef.markForCheck();
1142
+ }
1143
+ resetTags() {
1144
+ this.dropSubscriptions();
1145
+ this.listenToTagsFocus();
1146
+ this.listenToTagsSelection();
1147
+ this.listenToTagsRemoved();
1148
+ }
1149
+ dropSubscriptions() {
1150
+ if (this.tagFocusSubscription) {
1151
+ this.tagFocusSubscription.unsubscribe();
1152
+ this.tagFocusSubscription = null;
1153
+ }
1154
+ if (this.tagBlurSubscription) {
1155
+ this.tagBlurSubscription.unsubscribe();
1156
+ this.tagBlurSubscription = null;
1157
+ }
1158
+ if (this.tagSelectionSubscription) {
1159
+ this.tagSelectionSubscription.unsubscribe();
1160
+ this.tagSelectionSubscription = null;
1161
+ }
1162
+ if (this.tagRemoveSubscription) {
1163
+ this.tagRemoveSubscription.unsubscribe();
1164
+ this.tagRemoveSubscription = null;
1165
+ }
1166
+ }
1167
+ /** Listens to user-generated selection events on each tag. */
1168
+ listenToTagsSelection() {
1169
+ this.tagSelectionSubscription = this.tagSelectionChanges.subscribe((event) => {
1170
+ if (event.source.selected) {
1171
+ this.selectionModel.select(event.source);
1172
+ }
1173
+ else {
1174
+ this.selectionModel.deselect(event.source);
1175
+ }
1176
+ // For single selection tag list, make sure the deselected value is unselected.
1177
+ if (!this.multiple) {
1178
+ this.tags.forEach((tag) => {
1179
+ if (!this.selectionModel.isSelected(tag) && tag.selected) {
1180
+ tag.deselect();
1181
+ }
1182
+ });
1183
+ }
1184
+ if (event.isUserInput) {
1185
+ this.propagateChanges();
1186
+ }
1187
+ });
1188
+ }
1189
+ /** Listens to user-generated selection events on each tag. */
1190
+ listenToTagsFocus() {
1191
+ this.tagFocusSubscription = this.tagFocusChanges
1192
+ .subscribe((event) => {
1193
+ const tagIndex = this.tags.toArray().indexOf(event.tag);
1194
+ if (this.isValidIndex(tagIndex)) {
1195
+ this.keyManager.updateActiveItem(tagIndex);
1196
+ }
1197
+ this.stateChanges.next();
1198
+ });
1199
+ this.tagBlurSubscription = this.tagBlurChanges
1200
+ .subscribe(() => {
1201
+ this.blur();
1202
+ this.stateChanges.next();
1203
+ });
1204
+ }
1205
+ listenToTagsRemoved() {
1206
+ this.tagRemoveSubscription = this.tagRemoveChanges
1207
+ .subscribe((event) => {
1208
+ const tag = event.tag;
1209
+ const tagIndex = this.tags.toArray().indexOf(event.tag);
1210
+ // In case the tag that will be removed is currently focused, we temporarily store
1211
+ // the index in order to be able to determine an appropriate sibling tag that will
1212
+ // receive focus.
1213
+ if (this.isValidIndex(tagIndex) && tag.hasFocus) {
1214
+ this.lastDestroyedTagIndex = tagIndex;
1215
+ }
1216
+ });
1217
+ }
1218
+ /** Checks whether an event comes from inside a tag element. */
1219
+ originatesFromTag(event) {
1220
+ let currentElement = event.target;
1221
+ while (currentElement && currentElement !== this.elementRef.nativeElement) {
1222
+ if (currentElement.classList.contains('mc-tag')) {
1223
+ return true;
1224
+ }
1225
+ currentElement = currentElement.parentElement;
1226
+ }
1227
+ return false;
1228
+ }
1229
+ /** Checks whether any of the tags is focused. */
1230
+ hasFocusedTag() {
1231
+ return this.tags.some((tag) => tag.hasFocus);
1232
+ }
1233
+ /** Syncs the list's disabled state with the individual tags. */
1234
+ syncTagsDisabledState() {
1235
+ if (this.tags) {
1236
+ this.tags.forEach((tag) => {
1237
+ tag.disabled = this._disabled;
1238
+ });
1239
+ }
1240
+ }
1241
+ }
1242
+ /** @nocollapse */ /** @nocollapse */ McTagList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagList, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ErrorStateMatcher }, { token: NG_VALIDATORS, optional: true }, { token: MC_VALIDATION, optional: true }, { token: i2.Directionality, optional: true }, { token: i3.NgForm, optional: true }, { token: i3.FormGroupDirective, optional: true }, { token: i3.NgControl, optional: true, self: true }, { token: i3.NgModel, optional: true, self: true }, { token: i3.FormControlName, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
1243
+ /** @nocollapse */ /** @nocollapse */ McTagList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: McTagList, selector: "mc-tag-list", inputs: { multiple: "multiple", compareWith: "compareWith", value: "value", required: "required", placeholder: "placeholder", disabled: "disabled", selectable: "selectable", tabIndex: "tabIndex", errorStateMatcher: "errorStateMatcher", orientation: "orientation" }, outputs: { valueChange: "valueChange", change: "change" }, host: { listeners: { "focus": "focus()", "blur": "blur()", "keydown": "keydown($event)" }, properties: { "class.mc-disabled": "disabled", "class.mc-invalid": "errorState", "attr.tabindex": "disabled ? null : tabIndex", "id": "uid" }, classAttribute: "mc-tag-list" }, providers: [{ provide: McFormFieldControl, useExisting: McTagList }], queries: [{ propertyName: "cleaner", first: true, predicate: ["mcTagListCleaner"], descendants: true, static: true }, { propertyName: "tags", predicate: McTag, descendants: true }], exportAs: ["mcTagList"], usesInheritance: true, ngImport: i0, template: "<div class=\"mc-tags-list__list-container\">\n <ng-content></ng-content>\n</div>\n\n<div class=\"mc-tags-list__cleaner\"\n *ngIf=\"canShowCleaner\">\n <ng-content select=\"mc-cleaner\"></ng-content>\n</div>\n", styles: [".mc-tag-list{display:flex;flex-direction:row;box-sizing:border-box}.mc-tag-input{border:none;outline:none;background:transparent}.mc-tags-list__list-container{display:flex;flex-wrap:wrap;flex:1 1 100%;box-sizing:border-box;min-width:0;min-height:calc(var(--mc-form-field-size-height, 32px) - var(--mc-form-field-size-border-width, 1px) * 2);padding:var(--mc-tag-list-size-padding, 1px 12px)}.mc-tags-list__list-container .mc-tag-input{max-width:100%;flex:1 1 auto;height:var(--mc-tag-input-size-height, 22px);margin:var(--mc-tag-input-size-margin, 2px 4px)}.mc-tags-list__cleaner .mc-cleaner{height:30px}\n"], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1244
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagList, decorators: [{
1245
+ type: Component,
1246
+ args: [{ selector: 'mc-tag-list', exportAs: 'mcTagList', host: {
1247
+ class: 'mc-tag-list',
1248
+ '[class.mc-disabled]': 'disabled',
1249
+ '[class.mc-invalid]': 'errorState',
1250
+ '[attr.tabindex]': 'disabled ? null : tabIndex',
1251
+ '[id]': 'uid',
1252
+ '(focus)': 'focus()',
1253
+ '(blur)': 'blur()',
1254
+ '(keydown)': 'keydown($event)'
1255
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: McFormFieldControl, useExisting: McTagList }], template: "<div class=\"mc-tags-list__list-container\">\n <ng-content></ng-content>\n</div>\n\n<div class=\"mc-tags-list__cleaner\"\n *ngIf=\"canShowCleaner\">\n <ng-content select=\"mc-cleaner\"></ng-content>\n</div>\n", styles: [".mc-tag-list{display:flex;flex-direction:row;box-sizing:border-box}.mc-tag-input{border:none;outline:none;background:transparent}.mc-tags-list__list-container{display:flex;flex-wrap:wrap;flex:1 1 100%;box-sizing:border-box;min-width:0;min-height:calc(var(--mc-form-field-size-height, 32px) - var(--mc-form-field-size-border-width, 1px) * 2);padding:var(--mc-tag-list-size-padding, 1px 12px)}.mc-tags-list__list-container .mc-tag-input{max-width:100%;flex:1 1 auto;height:var(--mc-tag-input-size-height, 22px);margin:var(--mc-tag-input-size-margin, 2px 4px)}.mc-tags-list__cleaner .mc-cleaner{height:30px}\n"] }]
1256
+ }], ctorParameters: function () {
1257
+ return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ErrorStateMatcher }, { type: undefined, decorators: [{
1258
+ type: Optional
1259
+ }, {
1260
+ type: Inject,
1261
+ args: [NG_VALIDATORS]
1262
+ }] }, { type: undefined, decorators: [{
1263
+ type: Optional
1264
+ }, {
1265
+ type: Inject,
1266
+ args: [MC_VALIDATION]
1267
+ }] }, { type: i2.Directionality, decorators: [{
1268
+ type: Optional
1269
+ }] }, { type: i3.NgForm, decorators: [{
1270
+ type: Optional
1271
+ }] }, { type: i3.FormGroupDirective, decorators: [{
1272
+ type: Optional
1273
+ }] }, { type: i3.NgControl, decorators: [{
1274
+ type: Optional
1275
+ }, {
1276
+ type: Self
1277
+ }] }, { type: i3.NgModel, decorators: [{
1278
+ type: Optional
1279
+ }, {
1280
+ type: Self
1281
+ }] }, { type: i3.FormControlName, decorators: [{
1282
+ type: Optional
1283
+ }, {
1284
+ type: Self
1285
+ }] }];
1286
+ }, propDecorators: { multiple: [{
1287
+ type: Input
1288
+ }], compareWith: [{
1289
+ type: Input
1290
+ }], value: [{
1291
+ type: Input
1292
+ }], required: [{
1293
+ type: Input
1294
+ }], placeholder: [{
1295
+ type: Input
1296
+ }], disabled: [{
1297
+ type: Input
1298
+ }], selectable: [{
1299
+ type: Input
1300
+ }], tabIndex: [{
1301
+ type: Input
1302
+ }], valueChange: [{
1303
+ type: Output
1304
+ }], errorStateMatcher: [{
1305
+ type: Input
1306
+ }], orientation: [{
1307
+ type: Input,
1308
+ args: ['orientation']
1309
+ }], change: [{
1310
+ type: Output
1311
+ }], cleaner: [{
1312
+ type: ContentChild,
1313
+ args: ['mcTagListCleaner', { static: true }]
1314
+ }], tags: [{
1315
+ type: ContentChildren,
1316
+ args: [McTag, {
1317
+ // Need to use `descendants: true`,
1318
+ // Ivy will no longer match indirect descendants if it's left as false.
1319
+ descendants: true
1320
+ }]
1321
1321
  }] } });
1322
1322
 
1323
- class McTagsModule {
1324
- }
1325
- /** @nocollapse */ /** @nocollapse */ McTagsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1326
- /** @nocollapse */ /** @nocollapse */ McTagsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagsModule, declarations: [McTagList,
1327
- McTag,
1328
- McTagInput,
1329
- McTagTrailingIcon,
1330
- McTagAvatar,
1331
- McTagRemove], imports: [CommonModule, PlatformModule], exports: [McTagList,
1332
- McTag,
1333
- McTagInput,
1334
- McTagTrailingIcon,
1335
- McTagAvatar,
1336
- McTagRemove] });
1337
- /** @nocollapse */ /** @nocollapse */ McTagsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagsModule, providers: [{
1338
- provide: MC_TAGS_DEFAULT_OPTIONS,
1339
- // tslint:disable-next-line: no-object-literal-type-assertion
1340
- useValue: { separatorKeyCodes: [ENTER] }
1341
- }], imports: [[CommonModule, PlatformModule]] });
1342
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.7", ngImport: i0, type: McTagsModule, decorators: [{
1343
- type: NgModule,
1344
- args: [{
1345
- imports: [CommonModule, PlatformModule],
1346
- exports: [
1347
- McTagList,
1348
- McTag,
1349
- McTagInput,
1350
- McTagTrailingIcon,
1351
- McTagAvatar,
1352
- McTagRemove
1353
- ],
1354
- declarations: [
1355
- McTagList,
1356
- McTag,
1357
- McTagInput,
1358
- McTagTrailingIcon,
1359
- McTagAvatar,
1360
- McTagRemove
1361
- ],
1362
- providers: [{
1363
- provide: MC_TAGS_DEFAULT_OPTIONS,
1364
- // tslint:disable-next-line: no-object-literal-type-assertion
1365
- useValue: { separatorKeyCodes: [ENTER] }
1366
- }]
1367
- }]
1323
+ class McTagsModule {
1324
+ }
1325
+ /** @nocollapse */ /** @nocollapse */ McTagsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1326
+ /** @nocollapse */ /** @nocollapse */ McTagsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagsModule, declarations: [McTagList,
1327
+ McTag,
1328
+ McTagInput,
1329
+ McTagTrailingIcon,
1330
+ McTagAvatar,
1331
+ McTagRemove], imports: [CommonModule, PlatformModule], exports: [McTagList,
1332
+ McTag,
1333
+ McTagInput,
1334
+ McTagTrailingIcon,
1335
+ McTagAvatar,
1336
+ McTagRemove] });
1337
+ /** @nocollapse */ /** @nocollapse */ McTagsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagsModule, providers: [{
1338
+ provide: MC_TAGS_DEFAULT_OPTIONS,
1339
+ // tslint:disable-next-line: no-object-literal-type-assertion
1340
+ useValue: { separatorKeyCodes: [ENTER] }
1341
+ }], imports: [[CommonModule, PlatformModule]] });
1342
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: McTagsModule, decorators: [{
1343
+ type: NgModule,
1344
+ args: [{
1345
+ imports: [CommonModule, PlatformModule],
1346
+ exports: [
1347
+ McTagList,
1348
+ McTag,
1349
+ McTagInput,
1350
+ McTagTrailingIcon,
1351
+ McTagAvatar,
1352
+ McTagRemove
1353
+ ],
1354
+ declarations: [
1355
+ McTagList,
1356
+ McTag,
1357
+ McTagInput,
1358
+ McTagTrailingIcon,
1359
+ McTagAvatar,
1360
+ McTagRemove
1361
+ ],
1362
+ providers: [{
1363
+ provide: MC_TAGS_DEFAULT_OPTIONS,
1364
+ // tslint:disable-next-line: no-object-literal-type-assertion
1365
+ useValue: { separatorKeyCodes: [ENTER] }
1366
+ }]
1367
+ }]
1368
1368
  }] });
1369
1369
 
1370
- /**
1371
- * Generated bundle index. Do not edit.
1370
+ /**
1371
+ * Generated bundle index. Do not edit.
1372
1372
  */
1373
1373
 
1374
1374
  export { MC_TAGS_DEFAULT_OPTIONS, McTag, McTagAvatar, McTagBase, McTagInput, McTagList, McTagListBase, McTagListChange, McTagListMixinBase, McTagMixinBase, McTagRemove, McTagSelectionChange, McTagTrailingIcon, McTagsModule };