@ptsecurity/mosaic 12.1.0 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (731) hide show
  1. package/_theming.scss +113 -66
  2. package/_visual.scss +11 -9
  3. package/autocomplete/README.md +0 -0
  4. package/autocomplete/package.json +5 -5
  5. package/button/README.md +0 -0
  6. package/button/button.component.d.ts +17 -14
  7. package/button/button.module.d.ts +1 -1
  8. package/button/package.json +5 -5
  9. package/button-toggle/README.md +0 -0
  10. package/button-toggle/package.json +5 -5
  11. package/card/README.md +0 -0
  12. package/card/package.json +5 -5
  13. package/checkbox/README.md +1 -0
  14. package/checkbox/package.json +5 -5
  15. package/core/formatters/date/formatter.d.ts +4 -4
  16. package/core/formatters/date/templates/en-US.d.ts +8 -8
  17. package/core/formatters/date/templates/ru-RU.d.ts +8 -8
  18. package/core/package.json +5 -5
  19. package/core/pop-up/pop-up-trigger.d.ts +9 -12
  20. package/datepicker/README.md +0 -0
  21. package/datepicker/package.json +5 -5
  22. package/design-tokens/package.json +5 -5
  23. package/design-tokens/style-dictionary/build.js +6 -0
  24. package/design-tokens/style-dictionary/configs/index.js +2 -1
  25. package/design-tokens/tokens/components/navbar.json5 +12 -9
  26. package/design-tokens/tokens.d.ts +11 -9
  27. package/divider/README.md +0 -0
  28. package/divider/package.json +5 -5
  29. package/dropdown/dropdown-item.component.d.ts +1 -0
  30. package/dropdown/package.json +5 -5
  31. package/{esm2015/autocomplete/autocomplete-origin.directive.js → esm2020/autocomplete/autocomplete-origin.directive.mjs} +4 -4
  32. package/{esm2015/autocomplete/autocomplete-trigger.directive.js → esm2020/autocomplete/autocomplete-trigger.directive.mjs} +4 -4
  33. package/esm2020/autocomplete/autocomplete.component.mjs +154 -0
  34. package/{esm2015/autocomplete/autocomplete.module.js → esm2020/autocomplete/autocomplete.module.mjs} +5 -5
  35. package/{esm2015/autocomplete/index.js → esm2020/autocomplete/index.mjs} +0 -0
  36. package/{esm2015/autocomplete/ptsecurity-mosaic-autocomplete.js → esm2020/autocomplete/ptsecurity-mosaic-autocomplete.mjs} +0 -0
  37. package/{esm2015/autocomplete/public-api.js → esm2020/autocomplete/public-api.mjs} +0 -0
  38. package/esm2020/button/button.component.mjs +129 -0
  39. package/esm2020/button/button.module.mjs +38 -0
  40. package/{esm2015/button/index.js → esm2020/button/index.mjs} +0 -0
  41. package/{esm2015/button/ptsecurity-mosaic-button.js → esm2020/button/ptsecurity-mosaic-button.mjs} +0 -0
  42. package/{esm2015/button/public-api.js → esm2020/button/public-api.mjs} +0 -0
  43. package/esm2020/button-toggle/button-toggle.component.mjs +362 -0
  44. package/{esm2015/button-toggle/button-toggle.module.js → esm2020/button-toggle/button-toggle.module.mjs} +5 -5
  45. package/{esm2015/button-toggle/index.js → esm2020/button-toggle/index.mjs} +0 -0
  46. package/{esm2015/button-toggle/ptsecurity-mosaic-button-toggle.js → esm2020/button-toggle/ptsecurity-mosaic-button-toggle.mjs} +0 -0
  47. package/{esm2015/button-toggle/public-api.js → esm2020/button-toggle/public-api.mjs} +0 -0
  48. package/esm2020/card/card.component.mjs +80 -0
  49. package/{esm2015/card/card.module.js → esm2020/card/card.module.mjs} +5 -5
  50. package/{esm2015/card/index.js → esm2020/card/index.mjs} +0 -0
  51. package/{esm2015/card/ptsecurity-mosaic-card.js → esm2020/card/ptsecurity-mosaic-card.mjs} +0 -0
  52. package/{esm2015/card/public-api.js → esm2020/card/public-api.mjs} +0 -0
  53. package/{esm2015/checkbox/checkbox-config.js → esm2020/checkbox/checkbox-config.mjs} +0 -0
  54. package/{esm2015/checkbox/checkbox-module.js → esm2020/checkbox/checkbox-module.mjs} +5 -5
  55. package/{esm2015/checkbox/checkbox-required-validator.js → esm2020/checkbox/checkbox-required-validator.mjs} +4 -4
  56. package/esm2020/checkbox/checkbox.mjs +315 -0
  57. package/{esm2015/checkbox/index.js → esm2020/checkbox/index.mjs} +0 -0
  58. package/{esm2015/checkbox/ptsecurity-mosaic-checkbox.js → esm2020/checkbox/ptsecurity-mosaic-checkbox.mjs} +0 -0
  59. package/{esm2015/checkbox/public-api.js → esm2020/checkbox/public-api.mjs} +0 -0
  60. package/{esm2015/core/animation/animation.js → esm2020/core/animation/animation.mjs} +0 -0
  61. package/{esm2015/core/animation/fade-animations.js → esm2020/core/animation/fade-animations.mjs} +0 -0
  62. package/{esm2015/core/animation/index.js → esm2020/core/animation/index.mjs} +0 -0
  63. package/{esm2015/core/animation/select-animations.js → esm2020/core/animation/select-animations.mjs} +0 -0
  64. package/{esm2015/core/common-behaviors/color.js → esm2020/core/common-behaviors/color.mjs} +0 -0
  65. package/{esm2015/core/common-behaviors/common-module.js → esm2020/core/common-behaviors/common-module.mjs} +5 -5
  66. package/{esm2015/core/common-behaviors/constructor.js → esm2020/core/common-behaviors/constructor.mjs} +0 -0
  67. package/{esm2015/core/common-behaviors/disabled.js → esm2020/core/common-behaviors/disabled.mjs} +0 -0
  68. package/{esm2015/core/common-behaviors/error-state.js → esm2020/core/common-behaviors/error-state.mjs} +0 -0
  69. package/{esm2015/core/common-behaviors/index.js → esm2020/core/common-behaviors/index.mjs} +0 -0
  70. package/{esm2015/core/common-behaviors/tabindex.js → esm2020/core/common-behaviors/tabindex.mjs} +0 -0
  71. package/{esm2015/core/error/error-options.js → esm2020/core/error/error-options.mjs} +7 -7
  72. package/esm2020/core/formatters/date/formatter.mjs +314 -0
  73. package/esm2020/core/formatters/date/templates/en-US.mjs +280 -0
  74. package/esm2020/core/formatters/date/templates/ru-RU.mjs +280 -0
  75. package/{esm2015/core/formatters/index.js → esm2020/core/formatters/index.mjs} +5 -5
  76. package/esm2020/core/formatters/number/formatter.mjs +105 -0
  77. package/{esm2015/core/forms/forms-module.js → esm2020/core/forms/forms-module.mjs} +5 -5
  78. package/{esm2015/core/forms/forms.directive.js → esm2020/core/forms/forms.directive.mjs} +7 -7
  79. package/{esm2015/core/forms/index.js → esm2020/core/forms/index.mjs} +0 -0
  80. package/{esm2015/core/highlight/highlight.pipe.js → esm2020/core/highlight/highlight.pipe.mjs} +4 -4
  81. package/{esm2015/core/highlight/index.js → esm2020/core/highlight/index.mjs} +5 -5
  82. package/{esm2015/core/index.js → esm2020/core/index.mjs} +0 -0
  83. package/{esm2015/core/label/label-options.js → esm2020/core/label/label-options.mjs} +0 -0
  84. package/{esm2015/core/line/line.js → esm2020/core/line/line.mjs} +8 -8
  85. package/esm2020/core/option/action.mjs +121 -0
  86. package/{esm2015/core/option/index.js → esm2020/core/option/index.mjs} +0 -0
  87. package/esm2020/core/option/optgroup.mjs +31 -0
  88. package/{esm2015/core/option/option-module.js → esm2020/core/option/option-module.mjs} +5 -5
  89. package/esm2020/core/option/option.mjs +254 -0
  90. package/{esm2015/core/overlay/overlay-position-map.js → esm2020/core/overlay/overlay-position-map.mjs} +0 -0
  91. package/{esm2015/core/pop-up/constants.js → esm2020/core/pop-up/constants.mjs} +0 -0
  92. package/{esm2015/core/pop-up/index.js → esm2020/core/pop-up/index.mjs} +0 -0
  93. package/esm2020/core/pop-up/pop-up-trigger.mjs +246 -0
  94. package/esm2020/core/pop-up/pop-up.mjs +91 -0
  95. package/{esm2015/core/ptsecurity-mosaic-core.js → esm2020/core/ptsecurity-mosaic-core.mjs} +0 -0
  96. package/{esm2015/core/public-api.js → esm2020/core/public-api.mjs} +0 -0
  97. package/{esm2015/core/select/constants.js → esm2020/core/select/constants.mjs} +0 -0
  98. package/{esm2015/core/select/errors.js → esm2020/core/select/errors.mjs} +0 -0
  99. package/{esm2015/core/select/events.js → esm2020/core/select/events.mjs} +0 -0
  100. package/{esm2015/core/select/index.js → esm2020/core/select/index.mjs} +0 -0
  101. package/{esm2015/core/selection/constants.js → esm2020/core/selection/constants.mjs} +0 -0
  102. package/{esm2015/core/selection/index.js → esm2020/core/selection/index.mjs} +0 -0
  103. package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +37 -0
  104. package/{esm2015/core/selection/pseudo-checkbox/pseudo-checkbox.module.js → esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs} +5 -5
  105. package/{esm2015/core/services/measure-scrollbar.service.js → esm2020/core/services/measure-scrollbar.service.mjs} +4 -4
  106. package/{esm2015/core/utils/index.js → esm2020/core/utils/index.mjs} +0 -0
  107. package/{esm2015/core/utils/public-api.js → esm2020/core/utils/public-api.mjs} +0 -0
  108. package/{esm2015/core/utils/utils.js → esm2020/core/utils/utils.mjs} +0 -0
  109. package/{esm2015/core/validation/index.js → esm2020/core/validation/index.mjs} +0 -0
  110. package/{esm2015/core/validation/validation.js → esm2020/core/validation/validation.mjs} +0 -0
  111. package/esm2020/datepicker/calendar-body.component.mjs +106 -0
  112. package/esm2020/datepicker/calendar.component.mjs +362 -0
  113. package/{esm2015/datepicker/datepicker-animations.js → esm2020/datepicker/datepicker-animations.mjs} +0 -0
  114. package/{esm2015/datepicker/datepicker-errors.js → esm2020/datepicker/datepicker-errors.mjs} +0 -0
  115. package/esm2020/datepicker/datepicker-input.directive.mjs +900 -0
  116. package/{esm2015/datepicker/datepicker-intl.js → esm2020/datepicker/datepicker-intl.mjs} +4 -4
  117. package/{esm2015/datepicker/datepicker-module.js → esm2020/datepicker/datepicker-module.mjs} +5 -5
  118. package/esm2020/datepicker/datepicker-toggle.component.mjs +86 -0
  119. package/esm2020/datepicker/datepicker.component.mjs +408 -0
  120. package/{esm2015/datepicker/index.js → esm2020/datepicker/index.mjs} +0 -0
  121. package/{esm2015/datepicker/month-view.component.js → esm2020/datepicker/month-view.component.mjs} +5 -11
  122. package/{esm2015/datepicker/multi-year-view.component.js → esm2020/datepicker/multi-year-view.component.mjs} +5 -11
  123. package/{esm2015/datepicker/ptsecurity-mosaic-datepicker.js → esm2020/datepicker/ptsecurity-mosaic-datepicker.mjs} +0 -0
  124. package/{esm2015/datepicker/public-api.js → esm2020/datepicker/public-api.mjs} +0 -0
  125. package/{esm2015/datepicker/year-view.component.js → esm2020/datepicker/year-view.component.mjs} +5 -11
  126. package/{esm2015/design-tokens/index.js → esm2020/design-tokens/index.mjs} +0 -0
  127. package/{esm2015/design-tokens/ptsecurity-mosaic-design-tokens.js → esm2020/design-tokens/ptsecurity-mosaic-design-tokens.mjs} +0 -0
  128. package/{esm2015/design-tokens/public-api.js → esm2020/design-tokens/public-api.mjs} +0 -0
  129. package/{esm2015/design-tokens/tokens.js → esm2020/design-tokens/tokens.mjs} +12 -10
  130. package/{esm2015/divider/divider.component.js → esm2020/divider/divider.component.mjs} +6 -13
  131. package/{esm2015/divider/divider.module.js → esm2020/divider/divider.module.mjs} +5 -5
  132. package/{esm2015/divider/index.js → esm2020/divider/index.mjs} +0 -0
  133. package/{esm2015/divider/ptsecurity-mosaic-divider.js → esm2020/divider/ptsecurity-mosaic-divider.mjs} +0 -0
  134. package/{esm2015/divider/public-api.js → esm2020/divider/public-api.mjs} +0 -0
  135. package/{esm2015/dropdown/dropdown-animations.js → esm2020/dropdown/dropdown-animations.mjs} +0 -0
  136. package/{esm2015/dropdown/dropdown-content.directive.js → esm2020/dropdown/dropdown-content.directive.mjs} +6 -8
  137. package/{esm2015/dropdown/dropdown-errors.js → esm2020/dropdown/dropdown-errors.mjs} +0 -0
  138. package/esm2020/dropdown/dropdown-item.component.mjs +139 -0
  139. package/esm2020/dropdown/dropdown-trigger.directive.mjs +485 -0
  140. package/esm2020/dropdown/dropdown.component.mjs +292 -0
  141. package/{esm2015/dropdown/dropdown.module.js → esm2020/dropdown/dropdown.module.mjs} +5 -5
  142. package/{esm2015/dropdown/dropdown.types.js → esm2020/dropdown/dropdown.types.mjs} +0 -0
  143. package/{esm2015/dropdown/index.js → esm2020/dropdown/index.mjs} +0 -0
  144. package/{esm2015/dropdown/ptsecurity-mosaic-dropdown.js → esm2020/dropdown/ptsecurity-mosaic-dropdown.mjs} +0 -0
  145. package/{esm2015/dropdown/public-api.js → esm2020/dropdown/public-api.mjs} +0 -0
  146. package/esm2020/form-field/cleaner.mjs +23 -0
  147. package/{esm2015/form-field/form-field-control.js → esm2020/form-field/form-field-control.mjs} +0 -0
  148. package/{esm2015/form-field/form-field-errors.js → esm2020/form-field/form-field-errors.mjs} +0 -0
  149. package/esm2020/form-field/form-field.mjs +205 -0
  150. package/{esm2015/form-field/form-field.module.js → esm2020/form-field/form-field.module.mjs} +5 -5
  151. package/{esm2015/form-field/hint.js → esm2020/form-field/hint.mjs} +4 -4
  152. package/{esm2015/form-field/index.js → esm2020/form-field/index.mjs} +0 -0
  153. package/{esm2015/form-field/prefix.js → esm2020/form-field/prefix.mjs} +4 -4
  154. package/{esm2015/form-field/ptsecurity-mosaic-form-field.js → esm2020/form-field/ptsecurity-mosaic-form-field.mjs} +0 -0
  155. package/{esm2015/form-field/public-api.js → esm2020/form-field/public-api.mjs} +0 -0
  156. package/{esm2015/form-field/stepper.js → esm2020/form-field/stepper.mjs} +4 -4
  157. package/{esm2015/form-field/suffix.js → esm2020/form-field/suffix.mjs} +4 -4
  158. package/esm2020/icon/icon.component.mjs +44 -0
  159. package/{esm2015/icon/icon.module.js → esm2020/icon/icon.module.mjs} +5 -5
  160. package/{esm2015/icon/index.js → esm2020/icon/index.mjs} +0 -0
  161. package/{esm2015/icon/ptsecurity-mosaic-icon.js → esm2020/icon/ptsecurity-mosaic-icon.mjs} +0 -0
  162. package/{esm2015/icon/public-api.js → esm2020/icon/public-api.mjs} +0 -0
  163. package/{esm2015/index.js → esm2020/index.mjs} +0 -0
  164. package/{esm2015/input/index.js → esm2020/input/index.mjs} +0 -0
  165. package/{esm2015/input/input-errors.js → esm2020/input/input-errors.mjs} +0 -0
  166. package/esm2020/input/input-number-validators.mjs +92 -0
  167. package/{esm2015/input/input-number.js → esm2020/input/input-number.mjs} +4 -4
  168. package/{esm2015/input/input-value-accessor.js → esm2020/input/input-value-accessor.mjs} +0 -0
  169. package/{esm2015/input/input.js → esm2020/input/input.mjs} +7 -7
  170. package/{esm2015/input/input.module.js → esm2020/input/input.module.mjs} +5 -5
  171. package/{esm2015/input/ptsecurity-mosaic-input.js → esm2020/input/ptsecurity-mosaic-input.mjs} +0 -0
  172. package/{esm2015/input/public-api.js → esm2020/input/public-api.mjs} +0 -0
  173. package/{esm2015/link/index.js → esm2020/link/index.mjs} +0 -0
  174. package/esm2020/link/link.component.mjs +107 -0
  175. package/{esm2015/link/link.module.js → esm2020/link/link.module.mjs} +5 -5
  176. package/{esm2015/link/ptsecurity-mosaic-link.js → esm2020/link/ptsecurity-mosaic-link.mjs} +0 -0
  177. package/{esm2015/link/public-api.js → esm2020/link/public-api.mjs} +0 -0
  178. package/{esm2015/list/index.js → esm2020/list/index.mjs} +0 -0
  179. package/esm2020/list/list-selection.component.mjs +693 -0
  180. package/esm2020/list/list.component.mjs +44 -0
  181. package/{esm2015/list/list.module.js → esm2020/list/list.module.mjs} +5 -5
  182. package/{esm2015/list/ptsecurity-mosaic-list.js → esm2020/list/ptsecurity-mosaic-list.mjs} +0 -0
  183. package/{esm2015/list/public-api.js → esm2020/list/public-api.mjs} +0 -0
  184. package/{esm2015/modal/css-unit.pipe.js → esm2020/modal/css-unit.pipe.mjs} +4 -4
  185. package/{esm2015/modal/index.js → esm2020/modal/index.mjs} +0 -0
  186. package/{esm2015/modal/modal-control.service.js → esm2020/modal/modal-control.service.mjs} +4 -4
  187. package/{esm2015/modal/modal-ref.class.js → esm2020/modal/modal-ref.class.mjs} +0 -0
  188. package/{esm2015/modal/modal-util.js → esm2020/modal/modal-util.mjs} +0 -0
  189. package/esm2020/modal/modal.component.mjs +501 -0
  190. package/{esm2015/modal/modal.directive.js → esm2020/modal/modal.directive.mjs} +13 -13
  191. package/esm2020/modal/modal.module.mjs +72 -0
  192. package/esm2020/modal/modal.service.mjs +124 -0
  193. package/{esm2015/modal/modal.type.js → esm2020/modal/modal.type.mjs} +0 -0
  194. package/{esm2015/modal/ptsecurity-mosaic-modal.js → esm2020/modal/ptsecurity-mosaic-modal.mjs} +0 -0
  195. package/{esm2015/modal/public-api.js → esm2020/modal/public-api.mjs} +0 -0
  196. package/{esm2015/navbar/index.js → esm2020/navbar/index.mjs} +0 -0
  197. package/esm2020/navbar/navbar-item.component.mjs +577 -0
  198. package/esm2020/navbar/navbar.component.mjs +237 -0
  199. package/esm2020/navbar/navbar.module.mjs +92 -0
  200. package/{esm2015/navbar/ptsecurity-mosaic-navbar.js → esm2020/navbar/ptsecurity-mosaic-navbar.mjs} +0 -0
  201. package/{esm2015/navbar/public-api.js → esm2020/navbar/public-api.mjs} +0 -0
  202. package/{esm2015/navbar/vertical-navbar.animation.js → esm2020/navbar/vertical-navbar.animation.mjs} +2 -2
  203. package/esm2020/navbar/vertical-navbar.component.mjs +114 -0
  204. package/{esm2015/popover/index.js → esm2020/popover/index.mjs} +0 -0
  205. package/{esm2015/popover/popover-animations.js → esm2020/popover/popover-animations.mjs} +0 -0
  206. package/esm2020/popover/popover-confirm.component.mjs +108 -0
  207. package/esm2020/popover/popover.component.mjs +253 -0
  208. package/esm2020/popover/popover.module.mjs +24 -0
  209. package/{esm2015/popover/ptsecurity-mosaic-popover.js → esm2020/popover/ptsecurity-mosaic-popover.mjs} +0 -0
  210. package/{esm2015/popover/public-api.js → esm2020/popover/public-api.mjs} +2 -1
  211. package/{esm2015/progress-bar/index.js → esm2020/progress-bar/index.mjs} +0 -0
  212. package/esm2020/progress-bar/progress-bar.component.mjs +42 -0
  213. package/{esm2015/progress-bar/progress-bar.module.js → esm2020/progress-bar/progress-bar.module.mjs} +5 -5
  214. package/{esm2015/progress-bar/ptsecurity-mosaic-progress-bar.js → esm2020/progress-bar/ptsecurity-mosaic-progress-bar.mjs} +0 -0
  215. package/{esm2015/progress-bar/public-api.js → esm2020/progress-bar/public-api.mjs} +0 -0
  216. package/{esm2015/progress-spinner/index.js → esm2020/progress-spinner/index.mjs} +0 -0
  217. package/esm2020/progress-spinner/progress-spinner.component.mjs +46 -0
  218. package/{esm2015/progress-spinner/progress-spinner.module.js → esm2020/progress-spinner/progress-spinner.module.mjs} +5 -5
  219. package/{esm2015/progress-spinner/ptsecurity-mosaic-progress-spinner.js → esm2020/progress-spinner/ptsecurity-mosaic-progress-spinner.mjs} +0 -0
  220. package/{esm2015/progress-spinner/public-api.js → esm2020/progress-spinner/public-api.mjs} +0 -0
  221. package/{esm2015/ptsecurity-mosaic.js → esm2020/ptsecurity-mosaic.mjs} +0 -0
  222. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  223. package/{esm2015/radio/index.js → esm2020/radio/index.mjs} +0 -0
  224. package/{esm2015/radio/ptsecurity-mosaic-radio.js → esm2020/radio/ptsecurity-mosaic-radio.mjs} +0 -0
  225. package/{esm2015/radio/public-api.js → esm2020/radio/public-api.mjs} +0 -0
  226. package/esm2020/radio/radio.component.mjs +458 -0
  227. package/{esm2015/radio/radio.module.js → esm2020/radio/radio.module.mjs} +5 -5
  228. package/{esm2015/select/index.js → esm2020/select/index.mjs} +0 -0
  229. package/{esm2015/select/ptsecurity-mosaic-select.js → esm2020/select/ptsecurity-mosaic-select.mjs} +0 -0
  230. package/{esm2015/select/public-api.js → esm2020/select/public-api.mjs} +0 -0
  231. package/esm2020/select/select.component.mjs +1110 -0
  232. package/{esm2015/select/select.module.js → esm2020/select/select.module.mjs} +5 -5
  233. package/{esm2015/sidebar/index.js → esm2020/sidebar/index.mjs} +0 -0
  234. package/{esm2015/sidebar/ptsecurity-mosaic-sidebar.js → esm2020/sidebar/ptsecurity-mosaic-sidebar.mjs} +0 -0
  235. package/{esm2015/sidebar/public-api.js → esm2020/sidebar/public-api.mjs} +0 -0
  236. package/{esm2015/sidebar/sidebar-animations.js → esm2020/sidebar/sidebar-animations.mjs} +0 -0
  237. package/esm2020/sidebar/sidebar.component.mjs +146 -0
  238. package/{esm2015/sidebar/sidebar.module.js → esm2020/sidebar/sidebar.module.mjs} +5 -5
  239. package/{esm2015/sidepanel/index.js → esm2020/sidepanel/index.mjs} +0 -0
  240. package/{esm2015/sidepanel/ptsecurity-mosaic-sidepanel.js → esm2020/sidepanel/ptsecurity-mosaic-sidepanel.mjs} +0 -0
  241. package/{esm2015/sidepanel/public-api.js → esm2020/sidepanel/public-api.mjs} +0 -0
  242. package/{esm2015/sidepanel/sidepanel-animations.js → esm2020/sidepanel/sidepanel-animations.mjs} +0 -0
  243. package/{esm2015/sidepanel/sidepanel-config.js → esm2020/sidepanel/sidepanel-config.mjs} +0 -0
  244. package/esm2020/sidepanel/sidepanel-container.component.mjs +106 -0
  245. package/esm2020/sidepanel/sidepanel-directives.mjs +159 -0
  246. package/{esm2015/sidepanel/sidepanel-ref.js → esm2020/sidepanel/sidepanel-ref.mjs} +0 -0
  247. package/esm2020/sidepanel/sidepanel.module.mjs +74 -0
  248. package/esm2020/sidepanel/sidepanel.service.mjs +167 -0
  249. package/{esm2015/splitter/index.js → esm2020/splitter/index.mjs} +0 -0
  250. package/{esm2015/splitter/ptsecurity-mosaic-splitter.js → esm2020/splitter/ptsecurity-mosaic-splitter.mjs} +0 -0
  251. package/{esm2015/splitter/public-api.js → esm2020/splitter/public-api.mjs} +0 -0
  252. package/esm2020/splitter/splitter.component.mjs +480 -0
  253. package/esm2020/splitter/splitter.module.mjs +40 -0
  254. package/{esm2015/table/index.js → esm2020/table/index.mjs} +0 -0
  255. package/{esm2015/table/ptsecurity-mosaic-table.js → esm2020/table/ptsecurity-mosaic-table.mjs} +0 -0
  256. package/{esm2015/table/public-api.js → esm2020/table/public-api.mjs} +0 -0
  257. package/{esm2015/table/table.component.js → esm2020/table/table.component.mjs} +4 -4
  258. package/{esm2015/table/table.module.js → esm2020/table/table.module.mjs} +5 -5
  259. package/{esm2015/tabs/index.js → esm2020/tabs/index.mjs} +0 -0
  260. package/esm2020/tabs/paginated-tab-header.mjs +479 -0
  261. package/{esm2015/tabs/ptsecurity-mosaic-tabs.js → esm2020/tabs/ptsecurity-mosaic-tabs.mjs} +0 -0
  262. package/{esm2015/tabs/public-api.js → esm2020/tabs/public-api.mjs} +0 -0
  263. package/esm2020/tabs/tab-body.component.mjs +178 -0
  264. package/{esm2015/tabs/tab-content.directive.js → esm2020/tabs/tab-content.directive.mjs} +4 -4
  265. package/esm2020/tabs/tab-group.component.mjs +350 -0
  266. package/esm2020/tabs/tab-header.component.mjs +67 -0
  267. package/{esm2015/tabs/tab-label-wrapper.directive.js → esm2020/tabs/tab-label-wrapper.directive.mjs} +4 -4
  268. package/{esm2015/tabs/tab-label.directive.js → esm2020/tabs/tab-label.directive.mjs} +4 -4
  269. package/{esm2015/tabs/tab-nav-bar/index.js → esm2020/tabs/tab-nav-bar/index.mjs} +0 -0
  270. package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +110 -0
  271. package/{esm2015/tabs/tab.component.js → esm2020/tabs/tab.component.mjs} +4 -4
  272. package/{esm2015/tabs/tabs-animations.js → esm2020/tabs/tabs-animations.mjs} +0 -0
  273. package/{esm2015/tabs/tabs.module.js → esm2020/tabs/tabs.module.mjs} +5 -5
  274. package/{esm2015/tags/index.js → esm2020/tags/index.mjs} +0 -0
  275. package/{esm2015/tags/ptsecurity-mosaic-tags.js → esm2020/tags/ptsecurity-mosaic-tags.mjs} +0 -0
  276. package/{esm2015/tags/public-api.js → esm2020/tags/public-api.mjs} +0 -0
  277. package/{esm2015/tags/tag-default-options.js → esm2020/tags/tag-default-options.mjs} +0 -0
  278. package/{esm2015/tags/tag-input.js → esm2020/tags/tag-input.mjs} +4 -4
  279. package/esm2020/tags/tag-list.component.mjs +722 -0
  280. package/{esm2015/tags/tag-text-control.js → esm2020/tags/tag-text-control.mjs} +0 -0
  281. package/esm2020/tags/tag.component.mjs +374 -0
  282. package/{esm2015/tags/tag.module.js → esm2020/tags/tag.module.mjs} +5 -5
  283. package/{esm2015/textarea/index.js → esm2020/textarea/index.mjs} +0 -0
  284. package/{esm2015/textarea/ptsecurity-mosaic-textarea.js → esm2020/textarea/ptsecurity-mosaic-textarea.mjs} +0 -0
  285. package/{esm2015/textarea/public-api.js → esm2020/textarea/public-api.mjs} +0 -0
  286. package/{esm2015/textarea/textarea.component.js → esm2020/textarea/textarea.component.mjs} +4 -4
  287. package/{esm2015/textarea/textarea.module.js → esm2020/textarea/textarea.module.mjs} +5 -5
  288. package/{esm2015/timepicker/index.js → esm2020/timepicker/index.mjs} +0 -0
  289. package/{esm2015/timepicker/ptsecurity-mosaic-timepicker.js → esm2020/timepicker/ptsecurity-mosaic-timepicker.mjs} +0 -0
  290. package/{esm2015/timepicker/public-api.js → esm2020/timepicker/public-api.mjs} +0 -0
  291. package/{esm2015/timepicker/timepicker.constants.js → esm2020/timepicker/timepicker.constants.mjs} +0 -0
  292. package/esm2020/timepicker/timepicker.directive.mjs +653 -0
  293. package/{esm2015/timepicker/timepicker.module.js → esm2020/timepicker/timepicker.module.mjs} +5 -5
  294. package/{esm2015/toggle/index.js → esm2020/toggle/index.mjs} +0 -0
  295. package/{esm2015/toggle/ptsecurity-mosaic-toggle.js → esm2020/toggle/ptsecurity-mosaic-toggle.mjs} +0 -0
  296. package/{esm2015/toggle/public-api.js → esm2020/toggle/public-api.mjs} +0 -0
  297. package/esm2020/toggle/toggle.component.mjs +158 -0
  298. package/{esm2015/toggle/toggle.module.js → esm2020/toggle/toggle.module.mjs} +5 -5
  299. package/{esm2015/tooltip/index.js → esm2020/tooltip/index.mjs} +0 -0
  300. package/{esm2015/tooltip/ptsecurity-mosaic-tooltip.js → esm2020/tooltip/ptsecurity-mosaic-tooltip.mjs} +0 -0
  301. package/{esm2015/tooltip/public-api.js → esm2020/tooltip/public-api.mjs} +0 -0
  302. package/{esm2015/tooltip/tooltip.animations.js → esm2020/tooltip/tooltip.animations.mjs} +0 -0
  303. package/esm2020/tooltip/tooltip.component.mjs +291 -0
  304. package/{esm2015/tooltip/tooltip.module.js → esm2020/tooltip/tooltip.module.mjs} +5 -5
  305. package/{esm2015/tree/control/base-tree-control.js → esm2020/tree/control/base-tree-control.mjs} +0 -0
  306. package/{esm2015/tree/control/flat-tree-control.js → esm2020/tree/control/flat-tree-control.mjs} +0 -0
  307. package/{esm2015/tree/control/nested-tree-control.js → esm2020/tree/control/nested-tree-control.mjs} +0 -0
  308. package/{esm2015/tree/control/tree-control.js → esm2020/tree/control/tree-control.mjs} +0 -0
  309. package/{esm2015/tree/data-source/flat-data-source.js → esm2020/tree/data-source/flat-data-source.mjs} +0 -0
  310. package/{esm2015/tree/data-source/nested-data-source.js → esm2020/tree/data-source/nested-data-source.mjs} +0 -0
  311. package/{esm2015/tree/index.js → esm2020/tree/index.mjs} +0 -0
  312. package/{esm2015/tree/node.js → esm2020/tree/node.mjs} +4 -4
  313. package/{esm2015/tree/outlet.js → esm2020/tree/outlet.mjs} +4 -4
  314. package/esm2020/tree/padding.directive.mjs +110 -0
  315. package/{esm2015/tree/ptsecurity-mosaic-tree.js → esm2020/tree/ptsecurity-mosaic-tree.mjs} +0 -0
  316. package/{esm2015/tree/public-api.js → esm2020/tree/public-api.mjs} +0 -0
  317. package/esm2020/tree/toggle.mjs +80 -0
  318. package/{esm2015/tree/tree-base.js → esm2020/tree/tree-base.mjs} +7 -7
  319. package/{esm2015/tree/tree-errors.js → esm2020/tree/tree-errors.mjs} +0 -0
  320. package/esm2020/tree/tree-option.component.mjs +226 -0
  321. package/esm2020/tree/tree-selection.component.mjs +530 -0
  322. package/esm2020/tree/tree.mjs +15 -0
  323. package/esm2020/tree/tree.module.mjs +53 -0
  324. package/{esm2015/tree-select/index.js → esm2020/tree-select/index.mjs} +0 -0
  325. package/{esm2015/tree-select/ptsecurity-mosaic-tree-select.js → esm2020/tree-select/ptsecurity-mosaic-tree-select.mjs} +0 -0
  326. package/{esm2015/tree-select/public-api.js → esm2020/tree-select/public-api.mjs} +0 -0
  327. package/esm2020/tree-select/tree-select.component.mjs +889 -0
  328. package/{esm2015/tree-select/tree-select.module.js → esm2020/tree-select/tree-select.module.mjs} +5 -5
  329. package/fesm2015/ptsecurity-mosaic-autocomplete.mjs +756 -0
  330. package/fesm2015/ptsecurity-mosaic-autocomplete.mjs.map +1 -0
  331. package/fesm2015/ptsecurity-mosaic-button-toggle.mjs +385 -0
  332. package/fesm2015/ptsecurity-mosaic-button-toggle.mjs.map +1 -0
  333. package/fesm2015/ptsecurity-mosaic-button.mjs +170 -0
  334. package/fesm2015/ptsecurity-mosaic-button.mjs.map +1 -0
  335. package/fesm2015/{ptsecurity-mosaic-card.js → ptsecurity-mosaic-card.mjs} +10 -18
  336. package/fesm2015/ptsecurity-mosaic-card.mjs.map +1 -0
  337. package/fesm2015/ptsecurity-mosaic-checkbox.mjs +366 -0
  338. package/fesm2015/ptsecurity-mosaic-checkbox.mjs.map +1 -0
  339. package/fesm2015/{ptsecurity-mosaic-core.js → ptsecurity-mosaic-core.mjs} +186 -241
  340. package/fesm2015/ptsecurity-mosaic-core.mjs.map +1 -0
  341. package/fesm2015/ptsecurity-mosaic-datepicker.mjs +2700 -0
  342. package/fesm2015/ptsecurity-mosaic-datepicker.mjs.map +1 -0
  343. package/fesm2015/{ptsecurity-mosaic-design-tokens.js → ptsecurity-mosaic-design-tokens.mjs} +13 -11
  344. package/fesm2015/ptsecurity-mosaic-design-tokens.mjs.map +1 -0
  345. package/fesm2015/ptsecurity-mosaic-divider.mjs +61 -0
  346. package/fesm2015/ptsecurity-mosaic-divider.mjs.map +1 -0
  347. package/fesm2015/ptsecurity-mosaic-dropdown.mjs +1106 -0
  348. package/fesm2015/ptsecurity-mosaic-dropdown.mjs.map +1 -0
  349. package/fesm2015/ptsecurity-mosaic-form-field.mjs +378 -0
  350. package/fesm2015/ptsecurity-mosaic-form-field.mjs.map +1 -0
  351. package/fesm2015/ptsecurity-mosaic-icon.mjs +88 -0
  352. package/fesm2015/ptsecurity-mosaic-icon.mjs.map +1 -0
  353. package/fesm2015/ptsecurity-mosaic-input.mjs +609 -0
  354. package/fesm2015/ptsecurity-mosaic-input.mjs.map +1 -0
  355. package/fesm2015/{ptsecurity-mosaic-link.js → ptsecurity-mosaic-link.mjs} +8 -8
  356. package/fesm2015/ptsecurity-mosaic-link.mjs.map +1 -0
  357. package/fesm2015/ptsecurity-mosaic-list.mjs +796 -0
  358. package/fesm2015/ptsecurity-mosaic-list.mjs.map +1 -0
  359. package/fesm2015/ptsecurity-mosaic-modal.mjs +842 -0
  360. package/fesm2015/ptsecurity-mosaic-modal.mjs.map +1 -0
  361. package/fesm2015/ptsecurity-mosaic-navbar.mjs +1025 -0
  362. package/fesm2015/ptsecurity-mosaic-navbar.mjs.map +1 -0
  363. package/fesm2015/ptsecurity-mosaic-popover.mjs +393 -0
  364. package/fesm2015/ptsecurity-mosaic-popover.mjs.map +1 -0
  365. package/fesm2015/{ptsecurity-mosaic-progress-bar.js → ptsecurity-mosaic-progress-bar.mjs} +10 -18
  366. package/fesm2015/ptsecurity-mosaic-progress-bar.mjs.map +1 -0
  367. package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs +80 -0
  368. package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs.map +1 -0
  369. package/fesm2015/ptsecurity-mosaic-radio.mjs +481 -0
  370. package/fesm2015/ptsecurity-mosaic-radio.mjs.map +1 -0
  371. package/fesm2015/ptsecurity-mosaic-select.mjs +1175 -0
  372. package/fesm2015/ptsecurity-mosaic-select.mjs.map +1 -0
  373. package/fesm2015/{ptsecurity-mosaic-sidebar.js → ptsecurity-mosaic-sidebar.mjs} +16 -25
  374. package/fesm2015/ptsecurity-mosaic-sidebar.mjs.map +1 -0
  375. package/fesm2015/ptsecurity-mosaic-sidepanel.mjs +592 -0
  376. package/fesm2015/ptsecurity-mosaic-sidepanel.mjs.map +1 -0
  377. package/fesm2015/ptsecurity-mosaic-splitter.mjs +524 -0
  378. package/fesm2015/ptsecurity-mosaic-splitter.mjs.map +1 -0
  379. package/fesm2015/{ptsecurity-mosaic-table.js → ptsecurity-mosaic-table.mjs} +8 -8
  380. package/fesm2015/ptsecurity-mosaic-table.mjs.map +1 -0
  381. package/fesm2015/ptsecurity-mosaic-tabs.mjs +1511 -0
  382. package/fesm2015/ptsecurity-mosaic-tabs.mjs.map +1 -0
  383. package/fesm2015/ptsecurity-mosaic-tags.mjs +1372 -0
  384. package/fesm2015/ptsecurity-mosaic-tags.mjs.map +1 -0
  385. package/fesm2015/ptsecurity-mosaic-textarea.mjs +293 -0
  386. package/fesm2015/ptsecurity-mosaic-textarea.mjs.map +1 -0
  387. package/fesm2015/ptsecurity-mosaic-timepicker.mjs +715 -0
  388. package/fesm2015/ptsecurity-mosaic-timepicker.mjs.map +1 -0
  389. package/fesm2015/{ptsecurity-mosaic-toggle.js → ptsecurity-mosaic-toggle.mjs} +12 -23
  390. package/fesm2015/ptsecurity-mosaic-toggle.mjs.map +1 -0
  391. package/fesm2015/ptsecurity-mosaic-tooltip.mjs +362 -0
  392. package/fesm2015/ptsecurity-mosaic-tooltip.mjs.map +1 -0
  393. package/fesm2015/ptsecurity-mosaic-tree-select.mjs +932 -0
  394. package/fesm2015/ptsecurity-mosaic-tree-select.mjs.map +1 -0
  395. package/fesm2015/ptsecurity-mosaic-tree.mjs +1707 -0
  396. package/fesm2015/ptsecurity-mosaic-tree.mjs.map +1 -0
  397. package/fesm2015/{ptsecurity-mosaic.js → ptsecurity-mosaic.mjs} +1 -1
  398. package/fesm2015/ptsecurity-mosaic.mjs.map +1 -0
  399. package/{fesm2015/ptsecurity-mosaic-autocomplete.js → fesm2020/ptsecurity-mosaic-autocomplete.mjs} +17 -26
  400. package/fesm2020/ptsecurity-mosaic-autocomplete.mjs.map +1 -0
  401. package/{fesm2015/ptsecurity-mosaic-button-toggle.js → fesm2020/ptsecurity-mosaic-button-toggle.mjs} +15 -23
  402. package/fesm2020/ptsecurity-mosaic-button-toggle.mjs.map +1 -0
  403. package/fesm2020/ptsecurity-mosaic-button.mjs +170 -0
  404. package/fesm2020/ptsecurity-mosaic-button.mjs.map +1 -0
  405. package/fesm2020/ptsecurity-mosaic-card.mjs +113 -0
  406. package/fesm2020/ptsecurity-mosaic-card.mjs.map +1 -0
  407. package/{fesm2015/ptsecurity-mosaic-checkbox.js → fesm2020/ptsecurity-mosaic-checkbox.mjs} +13 -23
  408. package/fesm2020/ptsecurity-mosaic-checkbox.mjs.map +1 -0
  409. package/fesm2020/ptsecurity-mosaic-core.mjs +2688 -0
  410. package/fesm2020/ptsecurity-mosaic-core.mjs.map +1 -0
  411. package/{fesm2015/ptsecurity-mosaic-datepicker.js → fesm2020/ptsecurity-mosaic-datepicker.mjs} +77 -121
  412. package/fesm2020/ptsecurity-mosaic-datepicker.mjs.map +1 -0
  413. package/fesm2020/ptsecurity-mosaic-design-tokens.mjs +939 -0
  414. package/fesm2020/ptsecurity-mosaic-design-tokens.mjs.map +1 -0
  415. package/fesm2020/ptsecurity-mosaic-divider.mjs +61 -0
  416. package/fesm2020/ptsecurity-mosaic-divider.mjs.map +1 -0
  417. package/{fesm2015/ptsecurity-mosaic-dropdown.js → fesm2020/ptsecurity-mosaic-dropdown.mjs} +45 -53
  418. package/fesm2020/ptsecurity-mosaic-dropdown.mjs.map +1 -0
  419. package/fesm2020/ptsecurity-mosaic-form-field.mjs +377 -0
  420. package/fesm2020/ptsecurity-mosaic-form-field.mjs.map +1 -0
  421. package/fesm2020/ptsecurity-mosaic-icon.mjs +86 -0
  422. package/fesm2020/ptsecurity-mosaic-icon.mjs.map +1 -0
  423. package/{fesm2015/ptsecurity-mosaic-input.js → fesm2020/ptsecurity-mosaic-input.mjs} +41 -27
  424. package/fesm2020/ptsecurity-mosaic-input.mjs.map +1 -0
  425. package/fesm2020/ptsecurity-mosaic-link.mjs +136 -0
  426. package/fesm2020/ptsecurity-mosaic-link.mjs.map +1 -0
  427. package/{fesm2015/ptsecurity-mosaic-list.js → fesm2020/ptsecurity-mosaic-list.mjs} +41 -70
  428. package/fesm2020/ptsecurity-mosaic-list.mjs.map +1 -0
  429. package/{fesm2015/ptsecurity-mosaic-modal.js → fesm2020/ptsecurity-mosaic-modal.mjs} +63 -59
  430. package/fesm2020/ptsecurity-mosaic-modal.mjs.map +1 -0
  431. package/fesm2020/ptsecurity-mosaic-navbar.mjs +1009 -0
  432. package/fesm2020/ptsecurity-mosaic-navbar.mjs.map +1 -0
  433. package/fesm2020/ptsecurity-mosaic-popover.mjs +389 -0
  434. package/fesm2020/ptsecurity-mosaic-popover.mjs.map +1 -0
  435. package/fesm2020/ptsecurity-mosaic-progress-bar.mjs +76 -0
  436. package/fesm2020/ptsecurity-mosaic-progress-bar.mjs.map +1 -0
  437. package/fesm2020/ptsecurity-mosaic-progress-spinner.mjs +80 -0
  438. package/fesm2020/ptsecurity-mosaic-progress-spinner.mjs.map +1 -0
  439. package/{fesm2015/ptsecurity-mosaic-radio.js → fesm2020/ptsecurity-mosaic-radio.mjs} +13 -22
  440. package/fesm2020/ptsecurity-mosaic-radio.mjs.map +1 -0
  441. package/{fesm2015/ptsecurity-mosaic-select.js → fesm2020/ptsecurity-mosaic-select.mjs} +23 -35
  442. package/fesm2020/ptsecurity-mosaic-select.mjs.map +1 -0
  443. package/fesm2020/ptsecurity-mosaic-sidebar.mjs +202 -0
  444. package/fesm2020/ptsecurity-mosaic-sidebar.mjs.map +1 -0
  445. package/{fesm2015/ptsecurity-mosaic-sidepanel.js → fesm2020/ptsecurity-mosaic-sidepanel.mjs} +57 -53
  446. package/fesm2020/ptsecurity-mosaic-sidepanel.mjs.map +1 -0
  447. package/fesm2020/ptsecurity-mosaic-splitter.mjs +524 -0
  448. package/fesm2020/ptsecurity-mosaic-splitter.mjs.map +1 -0
  449. package/fesm2020/ptsecurity-mosaic-table.mjs +50 -0
  450. package/fesm2020/ptsecurity-mosaic-table.mjs.map +1 -0
  451. package/{fesm2015/ptsecurity-mosaic-tabs.js → fesm2020/ptsecurity-mosaic-tabs.mjs} +65 -102
  452. package/fesm2020/ptsecurity-mosaic-tabs.mjs.map +1 -0
  453. package/{fesm2015/ptsecurity-mosaic-tags.js → fesm2020/ptsecurity-mosaic-tags.mjs} +29 -47
  454. package/fesm2020/ptsecurity-mosaic-tags.mjs.map +1 -0
  455. package/{fesm2015/ptsecurity-mosaic-textarea.js → fesm2020/ptsecurity-mosaic-textarea.mjs} +8 -8
  456. package/fesm2020/ptsecurity-mosaic-textarea.mjs.map +1 -0
  457. package/{fesm2015/ptsecurity-mosaic-timepicker.js → fesm2020/ptsecurity-mosaic-timepicker.mjs} +16 -15
  458. package/fesm2020/ptsecurity-mosaic-timepicker.mjs.map +1 -0
  459. package/fesm2020/ptsecurity-mosaic-toggle.mjs +180 -0
  460. package/fesm2020/ptsecurity-mosaic-toggle.mjs.map +1 -0
  461. package/fesm2020/ptsecurity-mosaic-tooltip.mjs +354 -0
  462. package/fesm2020/ptsecurity-mosaic-tooltip.mjs.map +1 -0
  463. package/{fesm2015/ptsecurity-mosaic-tree-select.js → fesm2020/ptsecurity-mosaic-tree-select.mjs} +16 -27
  464. package/fesm2020/ptsecurity-mosaic-tree-select.mjs.map +1 -0
  465. package/{fesm2015/ptsecurity-mosaic-tree.js → fesm2020/ptsecurity-mosaic-tree.mjs} +61 -108
  466. package/fesm2020/ptsecurity-mosaic-tree.mjs.map +1 -0
  467. package/fesm2020/ptsecurity-mosaic.mjs +4 -0
  468. package/fesm2020/ptsecurity-mosaic.mjs.map +1 -0
  469. package/form-field/README.md +0 -0
  470. package/form-field/cleaner.d.ts +2 -0
  471. package/form-field/package.json +5 -5
  472. package/icon/README.md +0 -0
  473. package/icon/package.json +5 -5
  474. package/input/input-number-validators.d.ts +2 -2
  475. package/input/package.json +5 -5
  476. package/link/README.md +0 -0
  477. package/link/package.json +5 -5
  478. package/list/README.md +0 -0
  479. package/list/package.json +5 -5
  480. package/modal/README.md +34 -0
  481. package/modal/modal.component.d.ts +2 -0
  482. package/modal/modal.module.d.ts +1 -1
  483. package/modal/package.json +5 -5
  484. package/navbar/README.md +41 -0
  485. package/navbar/navbar-item.component.d.ts +122 -34
  486. package/navbar/navbar.component.d.ts +37 -9
  487. package/navbar/navbar.module.d.ts +2 -1
  488. package/navbar/package.json +5 -5
  489. package/navbar/vertical-navbar.component.d.ts +15 -26
  490. package/package.json +299 -14
  491. package/popover/README.md +32 -0
  492. package/popover/package.json +5 -5
  493. package/popover/popover-confirm.component.d.ts +33 -0
  494. package/popover/popover.component.d.ts +14 -4
  495. package/popover/popover.module.d.ts +6 -3
  496. package/popover/public-api.d.ts +1 -0
  497. package/prebuilt-themes/dark-theme.css +1 -1
  498. package/prebuilt-themes/default-theme.css +1 -1
  499. package/prebuilt-visual/default-visual.css +1 -1
  500. package/progress-bar/README.md +0 -0
  501. package/progress-bar/package.json +5 -5
  502. package/progress-spinner/README.md +0 -0
  503. package/progress-spinner/package.json +5 -5
  504. package/radio/package.json +5 -5
  505. package/schematics/README.md +35 -0
  506. package/schematics/ng-update/data/index.d.ts +1 -0
  507. package/schematics/ng-update/data/index.js +10 -9
  508. package/schematics/ng-update/data/index.js.map +1 -1
  509. package/schematics/ng-update/data/symbol-removal.d.ts +2 -0
  510. package/schematics/ng-update/data/symbol-removal.js +5 -0
  511. package/schematics/ng-update/data/symbol-removal.js.map +1 -0
  512. package/schematics/ng-update/index.js +3 -3
  513. package/schematics/ng-update/index.js.map +1 -1
  514. package/schematics/ng-update/update-9.0.0/secondary-entry-points-migration.js +1 -2
  515. package/schematics/ng-update/update-9.0.0/secondary-entry-points-migration.js.map +1 -1
  516. package/schematics/ng-update/upgrade-data.js +2 -1
  517. package/schematics/ng-update/upgrade-data.js.map +1 -1
  518. package/schematics/tsconfig.lib.json +2 -2
  519. package/select/README.md +0 -0
  520. package/select/package.json +5 -5
  521. package/select/select.component.d.ts +2 -7
  522. package/sidebar/package.json +5 -5
  523. package/sidepanel/package.json +5 -5
  524. package/sidepanel/sidepanel-directives.d.ts +2 -0
  525. package/sidepanel/sidepanel.module.d.ts +2 -1
  526. package/splitter/package.json +5 -5
  527. package/splitter/splitter.component.d.ts +46 -5
  528. package/splitter/splitter.module.d.ts +1 -1
  529. package/table/README.md +0 -0
  530. package/table/package.json +5 -5
  531. package/tabs/README.md +0 -0
  532. package/tabs/package.json +5 -5
  533. package/tags/README.md +0 -0
  534. package/tags/package.json +5 -5
  535. package/textarea/README.md +0 -0
  536. package/textarea/package.json +5 -5
  537. package/timepicker/README.md +0 -0
  538. package/timepicker/package.json +5 -5
  539. package/toggle/package.json +5 -5
  540. package/tooltip/package.json +5 -5
  541. package/tooltip/tooltip.component.d.ts +12 -3
  542. package/tree/package.json +5 -5
  543. package/tree/padding.directive.d.ts +1 -1
  544. package/tree/tree-option.component.d.ts +1 -1
  545. package/tree/tree-selection.component.d.ts +2 -2
  546. package/tree/tree.module.d.ts +1 -1
  547. package/tree-select/README.md +0 -0
  548. package/tree-select/package.json +5 -5
  549. package/tree-select/tree-select.component.d.ts +2 -7
  550. package/bundles/ptsecurity-mosaic-autocomplete.umd.js +0 -1162
  551. package/bundles/ptsecurity-mosaic-autocomplete.umd.js.map +0 -1
  552. package/bundles/ptsecurity-mosaic-button-toggle.umd.js +0 -757
  553. package/bundles/ptsecurity-mosaic-button-toggle.umd.js.map +0 -1
  554. package/bundles/ptsecurity-mosaic-button.umd.js +0 -535
  555. package/bundles/ptsecurity-mosaic-button.umd.js.map +0 -1
  556. package/bundles/ptsecurity-mosaic-card.umd.js +0 -481
  557. package/bundles/ptsecurity-mosaic-card.umd.js.map +0 -1
  558. package/bundles/ptsecurity-mosaic-checkbox.umd.js +0 -764
  559. package/bundles/ptsecurity-mosaic-checkbox.umd.js.map +0 -1
  560. package/bundles/ptsecurity-mosaic-core.umd.js +0 -2887
  561. package/bundles/ptsecurity-mosaic-core.umd.js.map +0 -1
  562. package/bundles/ptsecurity-mosaic-datepicker.umd.js +0 -3357
  563. package/bundles/ptsecurity-mosaic-datepicker.umd.js.map +0 -1
  564. package/bundles/ptsecurity-mosaic-design-tokens.umd.js +0 -1872
  565. package/bundles/ptsecurity-mosaic-design-tokens.umd.js.map +0 -1
  566. package/bundles/ptsecurity-mosaic-divider.umd.js +0 -108
  567. package/bundles/ptsecurity-mosaic-divider.umd.js.map +0 -1
  568. package/bundles/ptsecurity-mosaic-dropdown.umd.js +0 -1519
  569. package/bundles/ptsecurity-mosaic-dropdown.umd.js.map +0 -1
  570. package/bundles/ptsecurity-mosaic-form-field.umd.js +0 -789
  571. package/bundles/ptsecurity-mosaic-form-field.umd.js.map +0 -1
  572. package/bundles/ptsecurity-mosaic-icon.umd.js +0 -452
  573. package/bundles/ptsecurity-mosaic-icon.umd.js.map +0 -1
  574. package/bundles/ptsecurity-mosaic-input.umd.js +0 -996
  575. package/bundles/ptsecurity-mosaic-input.umd.js.map +0 -1
  576. package/bundles/ptsecurity-mosaic-link.umd.js +0 -517
  577. package/bundles/ptsecurity-mosaic-link.umd.js.map +0 -1
  578. package/bundles/ptsecurity-mosaic-list.umd.js +0 -1250
  579. package/bundles/ptsecurity-mosaic-list.umd.js.map +0 -1
  580. package/bundles/ptsecurity-mosaic-modal.umd.js +0 -1304
  581. package/bundles/ptsecurity-mosaic-modal.umd.js.map +0 -1
  582. package/bundles/ptsecurity-mosaic-navbar.umd.js +0 -932
  583. package/bundles/ptsecurity-mosaic-navbar.umd.js.map +0 -1
  584. package/bundles/ptsecurity-mosaic-popover.umd.js +0 -655
  585. package/bundles/ptsecurity-mosaic-popover.umd.js.map +0 -1
  586. package/bundles/ptsecurity-mosaic-progress-bar.umd.js +0 -442
  587. package/bundles/ptsecurity-mosaic-progress-bar.umd.js.map +0 -1
  588. package/bundles/ptsecurity-mosaic-progress-spinner.umd.js +0 -450
  589. package/bundles/ptsecurity-mosaic-progress-spinner.umd.js.map +0 -1
  590. package/bundles/ptsecurity-mosaic-radio.umd.js +0 -903
  591. package/bundles/ptsecurity-mosaic-radio.umd.js.map +0 -1
  592. package/bundles/ptsecurity-mosaic-select.umd.js +0 -1608
  593. package/bundles/ptsecurity-mosaic-select.umd.js.map +0 -1
  594. package/bundles/ptsecurity-mosaic-sidebar.umd.js +0 -256
  595. package/bundles/ptsecurity-mosaic-sidebar.umd.js.map +0 -1
  596. package/bundles/ptsecurity-mosaic-sidepanel.umd.js +0 -950
  597. package/bundles/ptsecurity-mosaic-sidepanel.umd.js.map +0 -1
  598. package/bundles/ptsecurity-mosaic-splitter.umd.js +0 -438
  599. package/bundles/ptsecurity-mosaic-splitter.umd.js.map +0 -1
  600. package/bundles/ptsecurity-mosaic-table.umd.js +0 -83
  601. package/bundles/ptsecurity-mosaic-table.umd.js.map +0 -1
  602. package/bundles/ptsecurity-mosaic-tabs.umd.js +0 -2015
  603. package/bundles/ptsecurity-mosaic-tabs.umd.js.map +0 -1
  604. package/bundles/ptsecurity-mosaic-tags.umd.js +0 -1913
  605. package/bundles/ptsecurity-mosaic-tags.umd.js.map +0 -1
  606. package/bundles/ptsecurity-mosaic-textarea.umd.js +0 -666
  607. package/bundles/ptsecurity-mosaic-textarea.umd.js.map +0 -1
  608. package/bundles/ptsecurity-mosaic-timepicker.umd.js +0 -822
  609. package/bundles/ptsecurity-mosaic-timepicker.umd.js.map +0 -1
  610. package/bundles/ptsecurity-mosaic-toggle.umd.js +0 -559
  611. package/bundles/ptsecurity-mosaic-toggle.umd.js.map +0 -1
  612. package/bundles/ptsecurity-mosaic-tooltip.umd.js +0 -728
  613. package/bundles/ptsecurity-mosaic-tooltip.umd.js.map +0 -1
  614. package/bundles/ptsecurity-mosaic-tree-select.umd.js +0 -1370
  615. package/bundles/ptsecurity-mosaic-tree-select.umd.js.map +0 -1
  616. package/bundles/ptsecurity-mosaic-tree.umd.js +0 -2309
  617. package/bundles/ptsecurity-mosaic-tree.umd.js.map +0 -1
  618. package/bundles/ptsecurity-mosaic.umd.js +0 -11
  619. package/bundles/ptsecurity-mosaic.umd.js.map +0 -1
  620. package/esm2015/autocomplete/autocomplete.component.js +0 -163
  621. package/esm2015/button/button.component.js +0 -129
  622. package/esm2015/button/button.module.js +0 -42
  623. package/esm2015/button-toggle/button-toggle.component.js +0 -370
  624. package/esm2015/card/card.component.js +0 -88
  625. package/esm2015/checkbox/checkbox.js +0 -325
  626. package/esm2015/core/formatters/date/formatter.js +0 -287
  627. package/esm2015/core/formatters/date/templates/en-US.js +0 -280
  628. package/esm2015/core/formatters/date/templates/ru-RU.js +0 -280
  629. package/esm2015/core/formatters/number/formatter.js +0 -99
  630. package/esm2015/core/option/action.js +0 -131
  631. package/esm2015/core/option/optgroup.js +0 -40
  632. package/esm2015/core/option/option.js +0 -262
  633. package/esm2015/core/pop-up/pop-up-trigger.js +0 -273
  634. package/esm2015/core/pop-up/pop-up.js +0 -87
  635. package/esm2015/core/selection/pseudo-checkbox/pseudo-checkbox.js +0 -45
  636. package/esm2015/datepicker/calendar-body.component.js +0 -114
  637. package/esm2015/datepicker/calendar.component.js +0 -377
  638. package/esm2015/datepicker/datepicker-input.directive.js +0 -885
  639. package/esm2015/datepicker/datepicker-toggle.component.js +0 -94
  640. package/esm2015/datepicker/datepicker.component.js +0 -418
  641. package/esm2015/dropdown/dropdown-item.component.js +0 -142
  642. package/esm2015/dropdown/dropdown-trigger.directive.js +0 -478
  643. package/esm2015/dropdown/dropdown.component.js +0 -302
  644. package/esm2015/form-field/cleaner.js +0 -19
  645. package/esm2015/form-field/form-field.js +0 -224
  646. package/esm2015/icon/icon.component.js +0 -51
  647. package/esm2015/input/input-number-validators.js +0 -78
  648. package/esm2015/link/link.component.js +0 -108
  649. package/esm2015/list/list-selection.component.js +0 -708
  650. package/esm2015/list/list.component.js +0 -58
  651. package/esm2015/modal/modal.component.js +0 -506
  652. package/esm2015/modal/modal.module.js +0 -70
  653. package/esm2015/modal/modal.service.js +0 -117
  654. package/esm2015/navbar/navbar-item.component.js +0 -209
  655. package/esm2015/navbar/navbar.component.js +0 -118
  656. package/esm2015/navbar/navbar.module.js +0 -76
  657. package/esm2015/navbar/vertical-navbar.component.js +0 -140
  658. package/esm2015/popover/popover.component.js +0 -219
  659. package/esm2015/popover/popover.module.js +0 -21
  660. package/esm2015/progress-bar/progress-bar.component.js +0 -50
  661. package/esm2015/progress-spinner/progress-spinner.component.js +0 -54
  662. package/esm2015/radio/radio.component.js +0 -467
  663. package/esm2015/select/select.component.js +0 -1122
  664. package/esm2015/sidebar/sidebar.component.js +0 -155
  665. package/esm2015/sidepanel/sidepanel-container.component.js +0 -113
  666. package/esm2015/sidepanel/sidepanel-directives.js +0 -155
  667. package/esm2015/sidepanel/sidepanel.module.js +0 -70
  668. package/esm2015/sidepanel/sidepanel.service.js +0 -163
  669. package/esm2015/splitter/splitter.component.js +0 -331
  670. package/esm2015/splitter/splitter.module.js +0 -38
  671. package/esm2015/tabs/paginated-tab-header.js +0 -482
  672. package/esm2015/tabs/tab-body.component.js +0 -186
  673. package/esm2015/tabs/tab-group.component.js +0 -359
  674. package/esm2015/tabs/tab-header.component.js +0 -76
  675. package/esm2015/tabs/tab-nav-bar/tab-nav-bar.js +0 -118
  676. package/esm2015/tags/tag-list.component.js +0 -732
  677. package/esm2015/tags/tag.component.js +0 -382
  678. package/esm2015/timepicker/timepicker.directive.js +0 -652
  679. package/esm2015/toggle/toggle.component.js +0 -169
  680. package/esm2015/tooltip/tooltip.component.js +0 -260
  681. package/esm2015/tree/padding.directive.js +0 -114
  682. package/esm2015/tree/toggle.js +0 -89
  683. package/esm2015/tree/tree-option.component.js +0 -238
  684. package/esm2015/tree/tree-selection.component.js +0 -541
  685. package/esm2015/tree/tree.js +0 -23
  686. package/esm2015/tree/tree.module.js +0 -56
  687. package/esm2015/tree-select/tree-select.component.js +0 -900
  688. package/fesm2015/ptsecurity-mosaic-autocomplete.js.map +0 -1
  689. package/fesm2015/ptsecurity-mosaic-button-toggle.js.map +0 -1
  690. package/fesm2015/ptsecurity-mosaic-button.js +0 -174
  691. package/fesm2015/ptsecurity-mosaic-button.js.map +0 -1
  692. package/fesm2015/ptsecurity-mosaic-card.js.map +0 -1
  693. package/fesm2015/ptsecurity-mosaic-checkbox.js.map +0 -1
  694. package/fesm2015/ptsecurity-mosaic-core.js.map +0 -1
  695. package/fesm2015/ptsecurity-mosaic-datepicker.js.map +0 -1
  696. package/fesm2015/ptsecurity-mosaic-design-tokens.js.map +0 -1
  697. package/fesm2015/ptsecurity-mosaic-divider.js +0 -68
  698. package/fesm2015/ptsecurity-mosaic-divider.js.map +0 -1
  699. package/fesm2015/ptsecurity-mosaic-dropdown.js.map +0 -1
  700. package/fesm2015/ptsecurity-mosaic-form-field.js +0 -393
  701. package/fesm2015/ptsecurity-mosaic-form-field.js.map +0 -1
  702. package/fesm2015/ptsecurity-mosaic-icon.js +0 -93
  703. package/fesm2015/ptsecurity-mosaic-icon.js.map +0 -1
  704. package/fesm2015/ptsecurity-mosaic-input.js.map +0 -1
  705. package/fesm2015/ptsecurity-mosaic-link.js.map +0 -1
  706. package/fesm2015/ptsecurity-mosaic-list.js.map +0 -1
  707. package/fesm2015/ptsecurity-mosaic-modal.js.map +0 -1
  708. package/fesm2015/ptsecurity-mosaic-navbar.js +0 -539
  709. package/fesm2015/ptsecurity-mosaic-navbar.js.map +0 -1
  710. package/fesm2015/ptsecurity-mosaic-popover.js +0 -257
  711. package/fesm2015/ptsecurity-mosaic-popover.js.map +0 -1
  712. package/fesm2015/ptsecurity-mosaic-progress-bar.js.map +0 -1
  713. package/fesm2015/ptsecurity-mosaic-progress-spinner.js +0 -88
  714. package/fesm2015/ptsecurity-mosaic-progress-spinner.js.map +0 -1
  715. package/fesm2015/ptsecurity-mosaic-radio.js.map +0 -1
  716. package/fesm2015/ptsecurity-mosaic-select.js.map +0 -1
  717. package/fesm2015/ptsecurity-mosaic-sidebar.js.map +0 -1
  718. package/fesm2015/ptsecurity-mosaic-sidepanel.js.map +0 -1
  719. package/fesm2015/ptsecurity-mosaic-splitter.js +0 -373
  720. package/fesm2015/ptsecurity-mosaic-splitter.js.map +0 -1
  721. package/fesm2015/ptsecurity-mosaic-table.js.map +0 -1
  722. package/fesm2015/ptsecurity-mosaic-tabs.js.map +0 -1
  723. package/fesm2015/ptsecurity-mosaic-tags.js.map +0 -1
  724. package/fesm2015/ptsecurity-mosaic-textarea.js.map +0 -1
  725. package/fesm2015/ptsecurity-mosaic-timepicker.js.map +0 -1
  726. package/fesm2015/ptsecurity-mosaic-toggle.js.map +0 -1
  727. package/fesm2015/ptsecurity-mosaic-tooltip.js +0 -323
  728. package/fesm2015/ptsecurity-mosaic-tooltip.js.map +0 -1
  729. package/fesm2015/ptsecurity-mosaic-tree-select.js.map +0 -1
  730. package/fesm2015/ptsecurity-mosaic-tree.js.map +0 -1
  731. package/fesm2015/ptsecurity-mosaic.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ptsecurity-mosaic-tabs.js","sources":["../../../packages/mosaic/tabs/tabs-animations.ts","../../../packages/mosaic/tabs/tab-body.component.ts","../../../packages/mosaic/tabs/tab-body.html","../../../packages/mosaic/tabs/tab-content.directive.ts","../../../packages/mosaic/tabs/paginated-tab-header.ts","../../../packages/mosaic/tabs/tab-label.directive.ts","../../../packages/mosaic/tabs/tab.component.ts","../../../packages/mosaic/tabs/tab-label-wrapper.directive.ts","../../../packages/mosaic/tabs/tab-header.component.ts","../../../packages/mosaic/tabs/tab-header.html","../../../packages/mosaic/tabs/tab-group.component.ts","../../../packages/mosaic/tabs/tab-group.html","../../../packages/mosaic/tabs/tab-nav-bar/tab-nav-bar.ts","../../../packages/mosaic/tabs/tabs.module.ts","../../../packages/mosaic/tabs/ptsecurity-mosaic-tabs.ts"],"sourcesContent":["import {\n animate,\n state,\n style,\n transition,\n trigger,\n AnimationTriggerMetadata\n} from '@angular/animations';\n\n\nexport const mcTabsAnimations: { readonly translateTab: AnimationTriggerMetadata } = {\n /** Animation translates a tab along the X axis. */\n translateTab: trigger('translateTab', [\n // Note: transitions to `none` instead of 0, because some browsers might blur the content.\n state(\n 'center, void, left-origin-center, right-origin-center',\n style({ transform: 'none' })\n ),\n\n // If the tab is either on the left or right, we additionally add a `min-height` of 1px\n // in order to ensure that the element has a height before its state changes. This is\n // necessary because Chrome does seem to skip the transition in RTL mode if the element does\n // not have a static height and is not rendered. See related issue: #9465\n state(\n 'left',\n style({ transform: 'translate3d(-100%, 0, 0)', minHeight: '1px' })\n ),\n state(\n 'right',\n style({ transform: 'translate3d(100%, 0, 0)', minHeight: '1px' })\n ),\n\n transition(\n '* => left, * => right, left => center, right => center',\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')\n ),\n transition('void => left-origin-center', [\n style({ transform: 'translate3d(-100%, 0, 0)' }),\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')\n ]),\n transition('void => right-origin-center', [\n style({ transform: 'translate3d(100%, 0, 0)' }),\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')\n ])\n ])\n};\n","import { AnimationEvent } from '@angular/animations';\nimport { Directionality, Direction } from '@angular/cdk/bidi';\nimport { TemplatePortal, CdkPortalOutlet } from '@angular/cdk/portal';\nimport {\n Component,\n ChangeDetectorRef,\n Input,\n Inject,\n Output,\n EventEmitter,\n OnDestroy,\n OnInit,\n ElementRef,\n Directive,\n Optional,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ComponentFactoryResolver,\n ViewContainerRef,\n forwardRef,\n ViewChild\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\n\nimport { mcTabsAnimations } from './tabs-animations';\n\n\n/**\n * These position states are used internally as animation states for the tab body. Setting the\n * position state to left, right, or center will transition the tab body from its current\n * position to its respective state. If there is not current position (void, in the case of a new\n * tab body), then there will be no transition animation to its state.\n *\n * In the case of a new tab body that should immediately be centered with an animating transition,\n * then left-origin-center or right-origin-center can be used, which will use left or right as its\n * psuedo-prior state.\n */\nexport type McTabBodyPositionState = 'left' | 'center' | 'right' | 'left-origin-center' | 'right-origin-center';\n\n/**\n * The origin state is an internally used state that is set on a new tab body indicating if it\n * began to the left or right of the prior selected index. For example, if the selected index was\n * set to 1, and a new tab is created and selected at index 2, then the tab body would have an\n * origin of right because its index was greater than the prior selected index.\n */\nexport type McTabBodyOriginState = 'left' | 'right';\n\n/**\n * Wrapper for the contents of a tab.\n * @docs-private\n */\n@Component({\n selector: 'mc-tab-body',\n templateUrl: 'tab-body.html',\n styleUrls: ['tab-body.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [mcTabsAnimations.translateTab],\n host: {\n class: 'mc-tab-body'\n }\n})\nexport class McTabBody implements OnInit, OnDestroy {\n\n /** The shifted index position of the tab body, where zero represents the active center tab. */\n @Input()\n set position(position: number) {\n this.positionIndex = position;\n this.computePositionAnimationState();\n }\n\n /** Tab body position state. Used by the animation trigger for the current state. */\n bodyPosition: McTabBodyPositionState;\n\n /** Event emitted when the tab begins to animate towards the center as the active tab. */\n @Output() readonly onCentering: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event emitted before the centering of the tab begins. */\n @Output() readonly beforeCentering: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted before the centering of the tab begins. */\n @Output() readonly afterLeavingCenter: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the tab completes its animation towards the center. */\n @Output() readonly onCentered: EventEmitter<void> = new EventEmitter<void>(true);\n\n /** The portal host inside of this container into which the tab body content will be loaded. */\n @ViewChild(CdkPortalOutlet, {static: false}) portalHost: CdkPortalOutlet;\n\n /** The tab body content to display. */\n @Input('content') content: TemplatePortal;\n\n /** Position that will be used when the tab is immediately becoming visible after creation. */\n @Input() origin: number;\n\n // Note that the default value will always be overwritten by `McTabBody`, but we need one\n // anyway to prevent the animations module from throwing an error if the body is used on its own.\n /** Duration for the tab's animation. */\n @Input() animationDuration: string = '0ms';\n\n /** Current position of the tab-body in the tab-group. Zero means that the tab is visible. */\n private positionIndex: number;\n\n /** Subscription to the directionality change observable. */\n private readonly dirChangeSubscription = Subscription.EMPTY;\n\n constructor(\n private readonly elementRef: ElementRef<HTMLElement>,\n @Optional() private readonly dir: Directionality,\n changeDetectorRef: ChangeDetectorRef\n ) {\n if (this.dir && changeDetectorRef) {\n this.dirChangeSubscription = this.dir.change\n .subscribe((direction: Direction) => {\n this.computePositionAnimationState(direction);\n changeDetectorRef.markForCheck();\n });\n }\n }\n\n /**\n * After initialized, check if the content is centered and has an origin. If so, set the\n * special position states that transition the tab from the left or right before centering.\n */\n ngOnInit() {\n if (this.bodyPosition === 'center' && this.origin != null) {\n this.bodyPosition = this.computePositionFromOrigin();\n }\n }\n\n ngOnDestroy() {\n this.dirChangeSubscription.unsubscribe();\n }\n\n onTranslateTabStarted(e: AnimationEvent): void {\n const isCentering = this.isCenterPosition(e.toState);\n this.beforeCentering.emit(isCentering);\n\n if (isCentering) {\n this.onCentering.emit(this.elementRef.nativeElement.clientHeight);\n }\n }\n\n onTranslateTabComplete(e: AnimationEvent): void {\n // If the transition to the center is complete, emit an event.\n if (this.isCenterPosition(e.toState) && this.isCenterPosition(this.bodyPosition)) {\n this.onCentered.emit();\n }\n\n if (this.isCenterPosition(e.fromState) && !this.isCenterPosition(this.bodyPosition)) {\n this.afterLeavingCenter.emit();\n }\n }\n\n /** The text direction of the containing app. */\n getLayoutDirection(): Direction {\n return this.dir && this.dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /** Whether the provided position state is considered center, regardless of origin. */\n isCenterPosition(position: McTabBodyPositionState | string): boolean {\n return position === 'center' || position === 'left-origin-center' || position === 'right-origin-center';\n }\n\n /** Computes the position state that will be used for the tab-body animation trigger. */\n private computePositionAnimationState(dir: Direction = this.getLayoutDirection()) {\n if (this.positionIndex < 0) {\n this.bodyPosition = dir === 'ltr' ? 'left' : 'right';\n } else if (this.positionIndex > 0) {\n this.bodyPosition = dir === 'ltr' ? 'right' : 'left';\n } else {\n this.bodyPosition = 'center';\n }\n }\n\n /**\n * Computes the position state based on the specified origin position. This is used if the\n * tab is becoming visible immediately after creation.\n */\n private computePositionFromOrigin(): McTabBodyPositionState {\n const dir = this.getLayoutDirection();\n\n if ((dir === 'ltr' && this.origin <= 0) || (dir === 'rtl' && this.origin > 0)) {\n return 'left-origin-center';\n }\n\n return 'right-origin-center';\n }\n}\n\n/**\n * The portal host directive for the contents of the tab.\n * @docs-private\n */\n@Directive({\n selector: '[mcTabBodyHost]'\n})\nexport class McTabBodyPortal extends CdkPortalOutlet implements OnInit, OnDestroy {\n /** Subscription to events for when the tab body begins centering. */\n private centeringSub = Subscription.EMPTY;\n /** Subscription to events for when the tab body finishes leaving from center position. */\n private leavingSub = Subscription.EMPTY;\n\n constructor(\n componentFactoryResolver: ComponentFactoryResolver,\n viewContainerRef: ViewContainerRef,\n @Inject(forwardRef(() => McTabBody)) private readonly host: McTabBody) {\n super(componentFactoryResolver, viewContainerRef);\n }\n\n /** Set initial visibility or set up subscription for changing visibility. */\n ngOnInit(): void {\n super.ngOnInit();\n\n this.centeringSub = this.host.beforeCentering\n .pipe(startWith(this.host.isCenterPosition(this.host.bodyPosition)))\n .subscribe((isCentering: boolean) => {\n if (isCentering && !this.hasAttached()) {\n this.attach(this.host.content);\n }\n });\n\n this.leavingSub = this.host.afterLeavingCenter\n .subscribe(() => { this.detach(); });\n }\n\n /** Clean up centering subscription. */\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.centeringSub.unsubscribe();\n this.leavingSub.unsubscribe();\n }\n}\n","<div class=\"mc-tab-body__content\"\n #content\n [@translateTab]=\"{\n value: bodyPosition,\n params: {animationDuration: animationDuration}\n }\"\n (@translateTab.start)=\"onTranslateTabStarted($event)\"\n (@translateTab.done)=\"onTranslateTabComplete($event)\">\n <ng-template mcTabBodyHost></ng-template>\n</div>\n","import { Directive, TemplateRef } from '@angular/core';\n\n\n/** Decorates the `ng-template` tags and reads out the template from it. */\n@Directive({ selector: '[mcTabContent]' })\nexport class McTabContent {\n constructor(public template: TemplateRef<any>) {}\n}\n","/* tslint:disable:naming-convention */\nimport { FocusKeyManager, FocusableOption } from '@angular/cdk/a11y';\nimport { Direction, Directionality } from '@angular/cdk/bidi';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ENTER, SPACE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Platform, normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport {\n ChangeDetectorRef,\n ElementRef,\n NgZone,\n Optional,\n QueryList,\n EventEmitter,\n AfterContentChecked,\n AfterContentInit,\n AfterViewInit,\n OnDestroy,\n Directive,\n Inject,\n Input\n} from '@angular/core';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { DOWN_ARROW, END, HOME, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@ptsecurity/cdk/keycodes';\nimport { merge, of as observableOf, Subject, timer, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n\n/** Config used to bind passive event listeners */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true }) as EventListenerOptions;\n\n/**\n * The directions that scrolling can go in when the header's tabs exceed the header width. 'After'\n * will scroll the header towards the end of the tabs list and 'before' will scroll towards the\n * beginning of the list.\n */\nexport type ScrollDirection = 'after' | 'before';\n\n/**\n * The distance in pixels that will be overshot when scrolling a tab label into view. This helps\n * provide a small affordance to the label next to it.\n */\nconst EXAGGERATED_OVERSCROLL = 60;\n\n/**\n * Amount of milliseconds to wait before starting to scroll the header automatically.\n * Set a little conservatively in order to handle fake events dispatched on touch devices.\n */\nconst HEADER_SCROLL_DELAY = 650;\n\n/**\n * Interval in milliseconds at which to scroll the header\n * while the user is holding their pointer.\n */\nconst HEADER_SCROLL_INTERVAL = 100;\n\nconst VIEWPORT_THROTTLE_TIME = 150;\nconst SCROLL_DISTANCE = 0.8;\n\n/** Item inside a paginated tab header. */\nexport type McPaginatedTabHeaderItem = FocusableOption & { elementRef: ElementRef };\n\n/**\n * Base class for a tab header that supported pagination.\n * @docs-private\n */\n@Directive()\nexport abstract class McPaginatedTabHeader implements AfterContentChecked, AfterContentInit, AfterViewInit, OnDestroy {\n /** The index of the active tab. */\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n set selectedIndex(value: number) {\n const coercedValue = coerceNumberProperty(value);\n this.selectedIndexChanged = this._selectedIndex !== coercedValue;\n this._selectedIndex = coercedValue;\n\n this.keyManager?.updateActiveItem(coercedValue);\n }\n\n private _selectedIndex = 0;\n\n\n /** Tracks which element has focus; used for keyboard navigation */\n get focusIndex(): number {\n return this.keyManager ? this.keyManager.activeItemIndex! : 0;\n }\n\n /** When the focus index is set, we must manually send focus to the correct label */\n set focusIndex(value: number) {\n if (!this.isValidIndex(value) || this.focusIndex === value || !this.keyManager) { return; }\n\n this.keyManager.setActiveItem(value);\n }\n\n /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\n get scrollDistance(): number {\n return this._scrollDistance;\n }\n\n set scrollDistance(v: number) {\n this._scrollDistance = Math.max(0, Math.min(this.getMaxScrollDistance(), v));\n\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this.scrollDistanceChanged = true;\n this.checkScrollingControls();\n }\n\n /** The distance in pixels that the tab labels should be translated to the left. */\n private _scrollDistance = 0;\n\n abstract items: QueryList<McPaginatedTabHeaderItem>;\n abstract tabListContainer: ElementRef<HTMLElement>;\n abstract tabList: ElementRef<HTMLElement>;\n abstract nextPaginator: ElementRef<HTMLElement>;\n abstract previousPaginator: ElementRef<HTMLElement>;\n\n /** Event emitted when the option is selected. */\n readonly selectFocusedIndex: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event emitted when a label is focused. */\n readonly indexFocused: EventEmitter<number> = new EventEmitter<number>();\n\n /** Whether the controls for pagination should be displayed */\n showPaginationControls = false;\n\n /** Whether the tab list can be scrolled more towards the end of the tab label list. */\n disableScrollAfter = true;\n\n /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\n disableScrollBefore = true;\n\n /**\n * Whether pagination should be disabled. This can be used to avoid unnecessary\n * layout recalculations if it's known that pagination won't be required.\n */\n @Input() disablePagination: boolean = false;\n\n /** Emits when the component is destroyed. */\n protected readonly destroyed = new Subject<void>();\n\n protected vertical: boolean = false;\n\n /**\n * The number of tab labels that are displayed on the header. When this changes, the header\n * should re-evaluate the scroll position.\n */\n private tabLabelCount: number;\n\n /** Whether the scroll distance has changed and should be applied after the view is checked. */\n private scrollDistanceChanged: boolean;\n\n /** Used to manage focus between the tabs. */\n private keyManager: FocusKeyManager<McPaginatedTabHeaderItem>;\n\n /** Cached text content of the header. */\n private currentTextContent: string;\n\n /** Stream that will stop the automated scrolling. */\n private stopScrolling = new Subject<void>();\n\n /** Whether the header should scroll to the selected index after the view has been checked. */\n private selectedIndexChanged = false;\n\n constructor(\n protected elementRef: ElementRef<HTMLElement>,\n protected changeDetectorRef: ChangeDetectorRef,\n private viewportRuler: ViewportRuler,\n private ngZone: NgZone,\n private platform: Platform,\n @Optional() private dir: Directionality,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) public animationMode?: string\n ) {\n // Bind the `mouseleave` event on the outside since it doesn't change anything in the view.\n ngZone.runOutsideAngular(() => {\n fromEvent(elementRef.nativeElement, 'mouseleave')\n .pipe(takeUntil(this.destroyed))\n .subscribe(() => this.stopInterval());\n });\n }\n\n /** Called when the user has selected an item via the keyboard. */\n ngAfterViewInit() {\n // We need to handle these events manually, because we want to bind passive event listeners.\n fromEvent(this.previousPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this.destroyed))\n .subscribe(() => this.handlePaginatorPress('before'));\n\n fromEvent(this.nextPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this.destroyed))\n .subscribe(() => this.handlePaginatorPress('after'));\n }\n\n ngAfterContentInit() {\n const dirChange = this.dir ? this.dir.change : observableOf('ltr');\n const resize = this.viewportRuler.change(VIEWPORT_THROTTLE_TIME);\n\n const realign = () => {\n this.updatePagination();\n };\n\n this.keyManager = new FocusKeyManager<McPaginatedTabHeaderItem>(this.items)\n .withHorizontalOrientation(this.getLayoutDirection());\n\n this.keyManager.updateActiveItem(this._selectedIndex);\n\n // Defer the first call in order to allow for slower browsers to lay out the elements.\n // This helps in cases where the user lands directly on a page with paginated tabs.\n typeof requestAnimationFrame !== undefined ? requestAnimationFrame(realign) : realign();\n\n // On dir change or window resize, realign the ink bar and update the orientation of\n // the key manager if the direction has changed.\n merge(dirChange, resize, this.items.changes)\n .pipe(takeUntil(this.destroyed))\n .subscribe(() => {\n // We need to defer this to give the browser some time to recalculate\n // the element dimensions. The call has to be wrapped in `NgZone.run`,\n // because the viewport change handler runs outside of Angular.\n this.ngZone.run(() => Promise.resolve().then(realign));\n this.keyManager.withHorizontalOrientation(this.getLayoutDirection());\n });\n\n // If there is a change in the focus key manager we need to emit the `indexFocused`\n // event in order to provide a public event that notifies about focus changes. Also we realign\n // the tabs container by scrolling the new focused tab into the visible section.\n this.keyManager.change\n .pipe(takeUntil(this.destroyed))\n .subscribe((newFocusIndex) => {\n this.indexFocused.emit(newFocusIndex);\n this.setTabFocus(newFocusIndex);\n });\n }\n\n ngAfterContentChecked(): void {\n // If the number of tab labels have changed, check if scrolling should be enabled\n if (this.tabLabelCount !== this.items.length) {\n this.updatePagination();\n this.tabLabelCount = this.items.length;\n this.changeDetectorRef.markForCheck();\n }\n\n // If the selected index has changed, scroll to the label and check if the scrolling controls\n // should be disabled.\n if (this.selectedIndexChanged) {\n this.scrollToLabel(this._selectedIndex);\n this.checkScrollingControls();\n this.selectedIndexChanged = false;\n this.changeDetectorRef.markForCheck();\n }\n\n // If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n // then translate the header to reflect this.\n if (this.scrollDistanceChanged) {\n this.updateTabScrollPosition();\n this.scrollDistanceChanged = false;\n this.changeDetectorRef.markForCheck();\n }\n }\n\n ngOnDestroy() {\n this.destroyed.next();\n this.destroyed.complete();\n this.stopScrolling.complete();\n }\n\n handleKeydown(event: KeyboardEvent) {\n // We don't handle any key bindings with a modifier key.\n if (hasModifierKey(event)) { return; }\n\n // tslint:disable-next-line: deprecation\n const key = event.keyCode;\n\n if (key === HOME) {\n this.keyManager.setFirstItemActive();\n } else if (key === END) {\n this.keyManager.setLastItemActive();\n } else if (key === UP_ARROW && this.vertical) {\n this.keyManager.setPreviousItemActive();\n } else if (key === DOWN_ARROW && this.vertical) {\n this.keyManager.setNextItemActive();\n } else if (key === RIGHT_ARROW && !this.vertical) {\n this.keyManager.setNextItemActive();\n } else if (key === LEFT_ARROW && !this.vertical) {\n this.keyManager.setPreviousItemActive();\n } else if ([ENTER, SPACE].includes(key)) {\n this.selectFocusedIndex.emit(this.focusIndex);\n }\n\n if ([HOME, END, UP_ARROW, DOWN_ARROW, RIGHT_ARROW, LEFT_ARROW, SPACE, ENTER].includes(key)) {\n event.preventDefault();\n }\n }\n\n /**\n * Callback for when the MutationObserver detects that the content has changed.\n */\n onContentChanges() {\n const textContent = this.elementRef.nativeElement.textContent;\n\n // We need to diff the text content of the header, because the MutationObserver callback\n // will fire even if the text content didn't change which is inefficient and is prone\n // to infinite loops if a poorly constructed expression is passed in (see #14249).\n if (textContent !== this.currentTextContent) {\n this.currentTextContent = textContent || '';\n\n // The content observer runs outside the `NgZone` by default, which\n // means that we need to bring the callback back in ourselves.\n this.ngZone.run(() => {\n this.updatePagination();\n this.changeDetectorRef.markForCheck();\n });\n }\n }\n\n /**\n * Updates the view whether pagination should be enabled or not.\n *\n * WARNING: Calling this method can be very costly in terms of performance. It should be called\n * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\n * page.\n */\n updatePagination() {\n this.checkPaginationEnabled();\n this.checkScrollingControls();\n this.updateTabScrollPosition();\n }\n\n /**\n * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is\n * providing a valid index and return true.\n */\n isValidIndex(index: number): boolean {\n if (!this.items) { return true; }\n\n const tab = this.items ? this.items.toArray()[index] : null;\n\n return !!tab && !tab.disabled;\n }\n\n /**\n * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n * scrolling is enabled.\n */\n setTabFocus(tabIndex: number) {\n if (this.showPaginationControls) {\n this.scrollToLabel(tabIndex);\n }\n\n if (this.items?.length) {\n this.items.toArray()[tabIndex].focus();\n\n // Do not let the browser manage scrolling to focus the element, this will be handled\n // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n // should be the full width minus the offset width.\n const containerEl = this.tabListContainer.nativeElement;\n const dir = this.getLayoutDirection();\n\n if (dir === 'ltr') {\n containerEl.scrollLeft = 0;\n } else {\n containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n }\n }\n }\n\n /** The layout direction of the containing app. */\n getLayoutDirection(): Direction {\n return this.dir?.value === 'rtl' ? 'rtl' : 'ltr';\n }\n\n /** Performs the CSS transformation on the tab list that will cause the list to scroll. */\n updateTabScrollPosition() {\n if (this.disablePagination) { return; }\n\n const scrollDistance = this.scrollDistance;\n const translateX = this.getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n\n // Don't use `translate3d` here because we don't want to create a new layer. A new layer\n // seems to cause flickering and overflow in Internet Explorer. For example, the ink bar\n // and ripples will exceed the boundaries of the visible tab bar.\n // See: https://github.com/angular/components/issues/10276\n // We round the `transform` here, because transforms with sub-pixel precision cause some\n // browsers to blur the content of the element.\n this.tabList.nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`;\n\n // Setting the `transform` on IE will change the scroll offset of the parent, causing the\n // position to be thrown off in some cases. We have to reset it ourselves to ensure that\n // it doesn't get thrown off. Note that we scope it only to IE and Edge, because messing\n // with the scroll position throws off Chrome 71+ in RTL mode (see #14689).\n if (this.platform.TRIDENT || this.platform.EDGE) {\n this.tabListContainer.nativeElement.scrollLeft = 0;\n }\n }\n\n /**\n * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n * the end of the list, respectively). The distance to scroll is computed to be a third of the\n * length of the tab list view window.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n scrollHeader(direction: ScrollDirection) {\n const viewLength = this.tabListContainer.nativeElement.offsetWidth;\n\n // Move the scroll distance one-third the length of the tab list's viewport.\n const scrollAmount = (direction === 'before' ? -1 : 1) * viewLength * SCROLL_DISTANCE;\n\n return this.scrollTo(this.scrollDistance + scrollAmount);\n }\n\n /** Handles click events on the pagination arrows. */\n handlePaginatorClick(direction: ScrollDirection) {\n this.stopInterval();\n this.scrollHeader(direction);\n }\n\n /**\n * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n scrollToLabel(labelIndex: number) {\n if (this.disablePagination) { return; }\n\n const selectedLabel = this.items ? this.items.toArray()[labelIndex] : null;\n\n if (!selectedLabel) { return; }\n\n // The view length is the visible width of the tab labels.\n const viewLength = this.tabListContainer.nativeElement.offsetWidth;\n const { offsetLeft, offsetWidth } = selectedLabel.elementRef.nativeElement;\n\n let labelBeforePos: number;\n let labelAfterPos: number;\n\n if (this.getLayoutDirection() === 'ltr') {\n labelBeforePos = offsetLeft;\n labelAfterPos = labelBeforePos + (offsetWidth as number);\n } else {\n labelAfterPos = this.tabList.nativeElement.offsetWidth - offsetLeft;\n labelBeforePos = labelAfterPos - offsetWidth;\n }\n\n const beforeVisiblePos = this.scrollDistance;\n const afterVisiblePos = this.scrollDistance + viewLength;\n\n if (labelBeforePos < beforeVisiblePos) {\n // Scroll header to move label to the before direction\n this.scrollDistance -= beforeVisiblePos - labelBeforePos + EXAGGERATED_OVERSCROLL;\n } else if (labelAfterPos > afterVisiblePos) {\n // Scroll header to move label to the after direction\n this.scrollDistance += labelAfterPos - afterVisiblePos + EXAGGERATED_OVERSCROLL;\n }\n }\n\n /**\n * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n * tab list is wider than the size of the header container, then the pagination controls should\n * be shown.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n checkPaginationEnabled() {\n if (this.disablePagination || this.vertical) {\n this.showPaginationControls = false;\n } else {\n const isEnabled = this.tabList.nativeElement.scrollWidth > this.elementRef.nativeElement.offsetWidth;\n\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n\n if (isEnabled !== this.showPaginationControls) {\n this.changeDetectorRef.markForCheck();\n }\n\n this.showPaginationControls = isEnabled;\n }\n }\n\n /**\n * Evaluate whether the before and after controls should be enabled or disabled.\n * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n * before button. If the header is at the end of the list (scroll distance is equal to the\n * maximum distance we can scroll), then disable the after button.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n checkScrollingControls() {\n if (this.disablePagination) {\n this.disableScrollAfter = this.disableScrollBefore = true;\n } else {\n // Check if the pagination arrows should be activated.\n this.disableScrollBefore = this.scrollDistance === 0;\n this.disableScrollAfter = this.scrollDistance === this.getMaxScrollDistance();\n this.changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n * is equal to the difference in width between the tab list container and tab header container.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n getMaxScrollDistance(): number {\n const lengthOfTabList = this.tabList.nativeElement.scrollWidth;\n const viewLength = this.tabListContainer.nativeElement.offsetWidth;\n\n return (lengthOfTabList - viewLength) || 0;\n }\n\n /** Stops the currently-running paginator interval. */\n stopInterval() {\n this.stopScrolling.next();\n }\n\n /**\n * Handles the user pressing down on one of the paginators.\n * Starts scrolling the header after a certain amount of time.\n * @param direction In which direction the paginator should be scrolled.\n */\n handlePaginatorPress(direction: ScrollDirection, mouseEvent?: MouseEvent) {\n // Don't start auto scrolling for right mouse button clicks. Note that we shouldn't have to\n // null check the `button`, but we do it so we don't break tests that use fake events.\n if (mouseEvent && mouseEvent.button != null && mouseEvent.button !== 0) { return; }\n\n // Avoid overlapping timers.\n this.stopInterval();\n\n // Start a timer after the delay and keep firing based on the interval.\n timer(HEADER_SCROLL_DELAY, HEADER_SCROLL_INTERVAL)\n // Keep the timer going until something tells it to stop or the component is destroyed.\n .pipe(takeUntil(merge(this.stopScrolling, this.destroyed)))\n .subscribe(() => {\n const { maxScrollDistance, distance } = this.scrollHeader(direction);\n\n // Stop the timer if we've reached the start or the end.\n if (distance === 0 || distance >= maxScrollDistance) {\n this.stopInterval();\n }\n });\n }\n\n protected abstract itemSelected(event: KeyboardEvent): void;\n\n /**\n * Scrolls the header to a given position.\n * @param position Position to which to scroll.\n * @returns Information on the current scroll distance and the maximum.\n */\n private scrollTo(position: number) {\n if (this.disablePagination) {\n return { maxScrollDistance: 0, distance: 0 };\n }\n\n const maxScrollDistance = this.getMaxScrollDistance();\n this.scrollDistance = Math.max(0, Math.min(maxScrollDistance, position));\n\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this.scrollDistanceChanged = true;\n this.checkScrollingControls();\n\n return { maxScrollDistance, distance: this.scrollDistance };\n }\n}\n","import { CdkPortal } from '@angular/cdk/portal';\nimport { Directive, InjectionToken } from '@angular/core';\n\n\nexport const MC_TAB_LABEL = new InjectionToken<McTabLabel>('McTabLabel');\n\n/** Used to flag tab labels for use with the portal directive */\n@Directive({\n selector: '[mc-tab-label], [mcTabLabel]',\n providers: [{ provide: MC_TAB_LABEL, useExisting: McTabLabel }]\n})\nexport class McTabLabel extends CdkPortal {}\n","import { TemplatePortal } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n CanDisable,\n CanDisableCtor,\n mixinDisabled,\n PopUpPlacements\n} from '@ptsecurity/mosaic/core';\nimport { Subject } from 'rxjs';\n\nimport { McTabContent } from './tab-content.directive';\nimport { MC_TAB_LABEL, McTabLabel } from './tab-label.directive';\n\n\nexport class McTabBase {}\n\n// tslint:disable-next-line:naming-convention\nexport const McTabMixinBase: CanDisableCtor & typeof McTabBase = mixinDisabled(McTabBase);\n\n@Component({\n selector: 'mc-tab',\n exportAs: 'mcTab',\n // Create a template for the content of the <mc-tab> so that we can grab a reference to this\n // TemplateRef and use it in a Portal to render the tab content in the appropriate place in the\n // tab-group.\n template: '<ng-template><ng-content></ng-content></ng-template>',\n inputs: ['disabled'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class McTab extends McTabMixinBase implements OnInit, CanDisable, OnChanges, OnDestroy {\n /** @docs-private */\n get content(): TemplatePortal | null {\n return this.contentPortal;\n }\n\n @ContentChild(MC_TAB_LABEL)\n get templateLabel(): McTabLabel {\n return this._templateLabel;\n }\n\n set templateLabel(value: McTabLabel) {\n this.setTemplateLabelInput(value);\n }\n\n private _templateLabel: McTabLabel;\n\n /**\n * Template provided in the tab content that will be used if present, used to enable lazy-loading\n */\n @ContentChild(McTabContent, { read: TemplateRef, static: true }) explicitContent: TemplateRef<any>;\n\n /** Template inside the McTab view that contains an `<ng-content>`. */\n @ViewChild(TemplateRef, { static: true }) implicitContent: TemplateRef<any>;\n\n @Input()\n get tooltipTitle(): string {\n return this.overflowTooltipTitle + this._tooltipTitle;\n }\n\n set tooltipTitle(value: string) {\n this._tooltipTitle = value;\n }\n\n private _tooltipTitle = '';\n\n @Input() tooltipPlacement: PopUpPlacements = PopUpPlacements.Right;\n\n /** Plain text label for the tab, used when there is no template label. */\n @Input('label') textLabel = '';\n\n @Input() empty = false;\n\n @Input('tabId') tabId: string;\n\n /** Emits whenever the internal state of the tab changes. */\n readonly stateChanges = new Subject<void>();\n\n /**\n * The relatively indexed position where 0 represents the center, negative is left, and positive\n * represents the right.\n */\n position: number | null = null;\n\n /**\n * The initial relatively index origin of the tab if it was created and selected after there\n * was already a selected tab. Provides context of what position the tab should originate from.\n */\n origin: number | null = null;\n\n /**\n * Whether the tab is currently active.\n */\n isActive = false;\n\n get isOverflown(): boolean {\n return !!this._overflowTooltipTitle;\n }\n\n get overflowTooltipTitle(): string {\n if (this.isOverflown) {\n return `${this._overflowTooltipTitle}\\n`;\n }\n\n return '';\n }\n\n set overflowTooltipTitle(value: string) {\n this._overflowTooltipTitle = value;\n }\n\n private _overflowTooltipTitle = '';\n\n /** Portal that will be the hosted content of the tab */\n private contentPortal: TemplatePortal | null = null;\n\n constructor(private readonly viewContainerRef: ViewContainerRef) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.hasOwnProperty('textLabel') || changes.hasOwnProperty('disabled')) {\n this.stateChanges.next();\n }\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n ngOnInit(): void {\n this.contentPortal = new TemplatePortal(this.explicitContent || this.implicitContent, this.viewContainerRef);\n }\n\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n protected setTemplateLabelInput(value: McTabLabel) {\n // Only update the templateLabel via query if there is actually\n // a McTabLabel found. This works around an issue where a user may have\n // manually set `templateLabel` during creation mode, which would then get clobbered\n // by `undefined` when this query resolves.\n if (value) {\n this._templateLabel = value;\n }\n }\n}\n","import {\n AfterViewInit,\n ContentChild,\n Directive,\n ElementRef,\n Input,\n Renderer2\n} from '@angular/core';\nimport {\n CanDisable,\n CanDisableCtor,\n mixinDisabled\n} from '@ptsecurity/mosaic/core';\n\nimport { McTab } from './tab.component';\n\n\n// Boilerplate for applying mixins to McTabLabelWrapper.\n/** @docs-private */\nexport class McTabLabelWrapperBase {}\n// tslint:disable-next-line:naming-convention\nexport const McTabLabelWrapperMixinBase: CanDisableCtor &\n typeof McTabLabelWrapperBase = mixinDisabled(McTabLabelWrapperBase);\n\n/**\n * Used in the `mc-tab-group` view to display tab labels.\n * @docs-private\n */\n@Directive({\n selector: '[mcTabLabelWrapper]',\n inputs: ['disabled'],\n host: {\n '[attr.disabled]': 'disabled || null'\n }\n})\nexport class McTabLabelWrapper extends McTabLabelWrapperMixinBase implements CanDisable, AfterViewInit {\n @ContentChild('labelContent') labelContent: ElementRef;\n\n @Input() tab: McTab;\n\n constructor(\n public elementRef: ElementRef,\n private renderer: Renderer2\n ) {\n super();\n }\n\n ngAfterViewInit(): void {\n this.addClassModifierForIcons(Array.from(this.elementRef.nativeElement.querySelectorAll('.mc-icon')));\n }\n\n /** Sets focus on the wrapper element */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n getOffsetLeft(): number {\n return this.elementRef.nativeElement.offsetLeft;\n }\n\n getOffsetWidth(): number {\n return this.elementRef.nativeElement.offsetWidth;\n }\n\n checkOverflow() {\n this.tab.overflowTooltipTitle = this.isOverflown() ? this.getInnerText() : '';\n }\n\n isOverflown() {\n return this.labelContent.nativeElement.scrollWidth > this.labelContent.nativeElement.clientWidth;\n }\n\n getInnerText() {\n return this.labelContent.nativeElement.innerText;\n }\n\n private addClassModifierForIcons(icons: HTMLElement[]) {\n const twoIcons = 2;\n const [firstIconElement, secondIconElement] = icons;\n\n if (icons.length === 1) {\n const COMMENT_NODE = 8;\n\n if (firstIconElement.nextSibling && firstIconElement.nextSibling.nodeType !== COMMENT_NODE) {\n this.renderer.addClass(firstIconElement, 'mc-icon_left');\n }\n\n if (firstIconElement.previousSibling && firstIconElement.previousSibling.nodeType !== COMMENT_NODE) {\n this.renderer.addClass(firstIconElement, 'mc-icon_right');\n }\n } else if (icons.length === twoIcons) {\n this.renderer.addClass(firstIconElement, 'mc-icon_left');\n this.renderer.addClass(secondIconElement, 'mc-icon_right');\n }\n }\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { Platform } from '@angular/cdk/platform';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n Inject,\n Input,\n NgZone,\n Optional,\n QueryList,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\nimport { McPaginatedTabHeader } from './paginated-tab-header';\nimport { McTabLabelWrapper } from './tab-label-wrapper.directive';\n\n\n/**\n * The directions that scrolling can go in when the header's tabs exceed the header width. 'After'\n * will scroll the header towards the end of the tabs list and 'before' will scroll towards the\n * beginning of the list.\n */\nexport type ScrollDirection = 'after' | 'before';\n\n\n/**\n * The header of the tab group which displays a list of all the tabs in the tab group.\n * When the tabs list's width exceeds the width of the header container,\n * then arrows will be displayed to allow the user to scroll\n * left and right across the header.\n * @docs-private\n */\n@Component({\n selector: 'mc-tab-header',\n templateUrl: 'tab-header.html',\n styleUrls: ['tab-header.scss'],\n inputs: ['selectedIndex'],\n outputs: ['selectFocusedIndex', 'indexFocused'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n host: {\n class: 'mc-tab-header',\n '[class.mc-tab-header_vertical]': 'vertical',\n '[class.mc-tab-header__pagination-controls_enabled]': 'showPaginationControls',\n '[class.mc-tab-header_rtl]': 'getLayoutDirection() == \\'rtl\\''\n }\n})\nexport class McTabHeader extends McPaginatedTabHeader {\n /** The index of the active tab. */\n @Input() vertical: boolean = false;\n\n @ContentChildren(McTabLabelWrapper, { descendants: false }) items: QueryList<McTabLabelWrapper>;\n @ViewChild('tabListContainer', { static: true }) tabListContainer: ElementRef;\n @ViewChild('tabList', { static: true }) tabList: ElementRef;\n @ViewChild('nextPaginator') nextPaginator: ElementRef<HTMLElement>;\n @ViewChild('previousPaginator') previousPaginator: ElementRef<HTMLElement>;\n\n constructor(\n readonly elementRef: ElementRef,\n readonly changeDetectorRef: ChangeDetectorRef,\n viewportRuler: ViewportRuler,\n ngZone: NgZone,\n platform: Platform,\n @Optional() dir: Directionality,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode?: string\n ) {\n super(elementRef, changeDetectorRef, viewportRuler, ngZone, platform, dir, animationMode);\n }\n\n itemSelected(event: KeyboardEvent) {\n event.preventDefault();\n }\n}\n","<div class=\"mc-tab-header__pagination mc-tab-header__pagination_before\"\n #previousPaginator\n [class.mc-disabled]=\"disableScrollBefore\"\n (click)=\"handlePaginatorClick('before')\"\n (mousedown)=\"handlePaginatorPress('before', $event)\"\n (touchend)=\"stopInterval()\">\n\n <i mc-icon=\"mc-angle-left-M_16\"></i>\n</div>\n\n<div class=\"mc-tab-header__content\"\n #tabListContainer\n (keydown)=\"handleKeydown($event)\">\n\n <div class=\"mc-tab-list\"\n #tabList\n (cdkObserveContent)=\"onContentChanges()\">\n <div class=\"mc-tab-list__content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<div class=\"mc-tab-header__pagination mc-tab-header__pagination_after\"\n #nextPaginator\n [class.mc-disabled]=\"disableScrollAfter\"\n (mousedown)=\"handlePaginatorPress('after', $event)\"\n (click)=\"handlePaginatorClick('after')\"\n (touchend)=\"stopInterval()\">\n\n <i mc-icon=\"mc-angle-right-M_16\"></i>\n</div>\n","import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n InjectionToken,\n Inject,\n Optional,\n Directive,\n Attribute,\n AfterViewInit\n} from '@angular/core';\nimport { CanDisableCtor, mixinDisabled } from '@ptsecurity/mosaic/core';\nimport { merge, Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { McTabHeader } from './tab-header.component';\nimport { McTab } from './tab.component';\n\n\n@Directive({\n selector: 'mc-tab-group[mc-old-tabs]',\n host: { class: 'mc-tab-group_old' }\n})\nexport class McOldTabsCssStyler { }\n\n@Directive({\n selector: 'mc-tab-group[mc-align-tabs-center], [mc-tab-nav-bar][mc-align-tabs-center]',\n host: { class: 'mc-tab-group_align-labels-center' }\n})\nexport class McAlignTabsCenterCssStyler { }\n\n@Directive({\n selector: 'mc-tab-group[mc-align-tabs-end], [mc-tab-nav-bar][mc-align-tabs-end]',\n host: { class: 'mc-tab-group_align-labels-end' }\n})\nexport class McAlignTabsEndCssStyler { }\n\n@Directive({\n selector: 'mc-tab-group[mc-stretch-tabs], [mc-tab-nav-bar][mc-stretch-tabs]',\n host: { class: 'mc-tab-group_stretch-labels' }\n})\nexport class McStretchTabsCssStyler { }\n\n@Directive({\n selector: 'mc-tab-group[vertical], [mc-tab-nav-bar][vertical]',\n host: { class: 'mc-tab-group_vertical' }\n})\nexport class McVerticalTabsCssStyler { }\n\n/** Used to generate unique ID's for each tab component */\nlet nextId = 0;\n\n/** A simple change event emitted on focus or selection changes. */\nexport class McTabChangeEvent {\n /** Index of the currently-selected tab. */\n index: number;\n /** Reference to the currently-selected tab. */\n tab: McTab;\n}\n\n/** Possible positions for the tab header. */\nexport type McTabHeaderPosition = 'above' | 'below';\n\n/** Object that can be used to configure the default options for the tabs module. */\nexport interface IMcTabsConfig {\n /** Duration for the tab animation. Must be a valid CSS value (e.g. 600ms). */\n animationDuration?: string;\n}\n\n/** Injection token that can be used to provide the default options the tabs module. */\nexport const MC_TABS_CONFIG = new InjectionToken<string>('MC_TABS_CONFIG');\n\n// Boilerplate for applying mixins to McTabGroup.\n/** @docs-private */\nexport class McTabGroupBase {\n // tslint:disable-next-line:naming-convention\n constructor(public _elementRef: ElementRef) {}\n}\n// tslint:disable-next-line:naming-convention\nexport const McTabGroupMixinBase: CanDisableCtor & typeof McTabGroupBase = mixinDisabled(McTabGroupBase);\n\n/**\n * Tab-group component. Supports basic tab pairs (label + content) and includes\n * keyboard navigation.\n */\n@Component({\n selector: 'mc-tab-group',\n exportAs: 'mcTabGroup',\n templateUrl: 'tab-group.html',\n styleUrls: ['tab-group.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['disabled'],\n host: {\n class: 'mc-tab-group',\n '[class.mc-tab-group_dynamic-height]': 'dynamicHeight',\n '[class.mc-tab-group_inverted-header]': 'headerPosition === \"below\"',\n '(window:resize)': 'resizeStream.next()'\n }\n})\nexport class McTabGroup extends McTabGroupMixinBase implements AfterContentInit, AfterViewInit, AfterContentChecked, OnDestroy {\n readonly resizeStream = new Subject<Event>();\n\n oldTab: boolean;\n vertical: boolean;\n\n @ContentChildren(McTab) tabs: QueryList<McTab>;\n\n @ViewChild('tabBodyWrapper', { static: false }) tabBodyWrapper: ElementRef;\n\n @ViewChild('tabHeader', { static: false }) tabHeader: McTabHeader;\n\n /** Whether the tab group should grow to the size of the active tab. */\n @Input()\n get dynamicHeight(): boolean {\n return this._dynamicHeight;\n }\n\n set dynamicHeight(value: boolean) {\n this._dynamicHeight = coerceBooleanProperty(value);\n }\n\n private _dynamicHeight = false;\n\n /** The index of the active tab. */\n @Input()\n get selectedIndex(): number | null {\n return this._selectedIndex;\n }\n\n set selectedIndex(value: number | null) {\n this.indexToSelect = coerceNumberProperty(value, null);\n }\n\n private _selectedIndex: number | null = null;\n\n /** Position of the tab header. */\n @Input() headerPosition: McTabHeaderPosition = 'above';\n\n /** Duration for the tab animation. Must be a valid CSS value (e.g. 600ms). */\n @Input() animationDuration: string;\n\n /** Output to enable support for two-way binding on `[(selectedIndex)]` */\n @Output() readonly selectedIndexChange: EventEmitter<number> = new EventEmitter<number>();\n\n /** Event emitted when focus has changed within a tab group. */\n @Output() readonly focusChange: EventEmitter<McTabChangeEvent> = new EventEmitter<McTabChangeEvent>();\n\n /** Event emitted when the body animation has completed */\n @Output() readonly animationDone: EventEmitter<void> = new EventEmitter<void>();\n\n /** Event emitted when the tab selection has changed. */\n @Output() readonly selectedTabChange: EventEmitter<McTabChangeEvent> = new EventEmitter<McTabChangeEvent>(true);\n\n /** The tab index that should be selected after the content has been checked. */\n private indexToSelect: number | null = 0;\n\n /** Snapshot of the height of the tab body wrapper before another tab is activated. */\n private tabBodyWrapperHeight = 0;\n\n /** Subscription to tabs being added/removed. */\n private tabsSubscription = Subscription.EMPTY;\n\n /** Subscription to changes in the tab labels. */\n private tabLabelSubscription = Subscription.EMPTY;\n private resizeSubscription = Subscription.EMPTY;\n\n private readonly groupId: number;\n private readonly resizeDebounceInterval: number = 100;\n\n constructor(\n elementRef: ElementRef,\n private readonly changeDetectorRef: ChangeDetectorRef,\n @Attribute('mc-old-tabs') lightTabs: string,\n @Attribute('vertical') vertical: string,\n @Inject(MC_TABS_CONFIG) @Optional() defaultConfig?: IMcTabsConfig\n ) {\n super(elementRef);\n\n this.oldTab = coerceBooleanProperty(lightTabs);\n this.vertical = coerceBooleanProperty(vertical);\n\n this.groupId = nextId++;\n this.animationDuration = defaultConfig?.animationDuration || '0ms';\n\n this.subscribeToResize();\n }\n\n /**\n * After the content is checked, this component knows what tabs have been defined\n * and what the selected index should be. This is where we can know exactly what position\n * each tab should be in according to the new selected index, and additionally we know how\n * a new selected tab should transition in (from the left or right).\n */\n ngAfterContentChecked() {\n // Don't clamp the `indexToSelect` immediately in the setter because it can happen that\n // the amount of tabs changes before the actual change detection runs.\n const indexToSelect = this.indexToSelect = this.clampTabIndex(this.indexToSelect);\n\n // If there is a change in selected index, emit a change event. Should not trigger if\n // the selected index has not yet been initialized.\n if (this._selectedIndex !== indexToSelect) {\n const isFirstRun = this._selectedIndex == null;\n\n if (!isFirstRun) {\n this.selectedTabChange.emit(this.createChangeEvent(indexToSelect));\n }\n\n // Changing these values after change detection has run\n // since the checked content may contain references to them.\n Promise.resolve().then(() => {\n this.tabs.forEach((tab, index) => tab.isActive = index === indexToSelect);\n\n if (!isFirstRun) {\n this.selectedIndexChange.emit(indexToSelect);\n }\n });\n }\n\n // Setup the position for each tab and optionally setup an origin on the next selected tab.\n this.tabs.forEach((tab: McTab, index: number) => {\n tab.position = index - indexToSelect;\n\n // If there is already a selected tab, then set up an origin for the next selected tab\n // if it doesn't have one already.\n if (this._selectedIndex != null && tab.position === 0 && !tab.origin) {\n tab.origin = indexToSelect - this._selectedIndex;\n }\n });\n\n if (this._selectedIndex !== indexToSelect) {\n this._selectedIndex = indexToSelect;\n this.changeDetectorRef.markForCheck();\n }\n }\n\n ngAfterContentInit() {\n this.subscribeToTabLabels();\n\n // Subscribe to changes in the amount of tabs, in order to be\n // able to re-render the content as new tabs are added or removed.\n this.tabsSubscription = this.tabs.changes\n .subscribe(() => {\n const indexToSelect = this.clampTabIndex(this.indexToSelect);\n\n // Maintain the previously-selected tab if a new tab is added or removed and there is no\n // explicit change that selects a different tab.\n if (indexToSelect === this._selectedIndex) {\n const tabs = this.tabs.toArray();\n\n for (let i = 0; i < tabs.length; i++) {\n if (tabs[i].isActive) {\n // Assign both to the `_indexToSelect` and `_selectedIndex` so we don't fire a changed\n // event, otherwise the consumer may end up in an infinite loop in some edge cases like\n // adding a tab within the `selectedIndexChange` event.\n this.indexToSelect = this._selectedIndex = i;\n break;\n }\n }\n }\n\n this.subscribeToTabLabels();\n this.changeDetectorRef.markForCheck();\n });\n }\n\n ngAfterViewInit(): void {\n this.checkOverflow();\n }\n\n ngOnDestroy() {\n this.tabsSubscription.unsubscribe();\n this.tabLabelSubscription.unsubscribe();\n this.resizeSubscription.unsubscribe();\n }\n\n focusChanged(index: number) {\n this.focusChange.emit(this.createChangeEvent(index));\n }\n\n /** Returns a unique id for each tab label element */\n getTabLabelId(i: number): string {\n return `mc-tab-label-${this.groupId}-${i}`;\n }\n\n /** Returns a unique id for each tab content element */\n getTabContentId(i: number): string {\n return `mc-tab-content-${this.groupId}-${i}`;\n }\n\n /**\n * Sets the height of the body wrapper to the height of the activating tab if dynamic\n * height property is true.\n */\n setTabBodyWrapperHeight(tabHeight: number): void {\n if (!this._dynamicHeight || !this.tabBodyWrapperHeight) { return; }\n\n const wrapper: HTMLElement = this.tabBodyWrapper.nativeElement;\n\n wrapper.style.height = `${this.tabBodyWrapperHeight}px`;\n\n // This conditional forces the browser to paint the height so that\n // the animation to the new height can have an origin.\n if (this.tabBodyWrapper.nativeElement.offsetHeight) {\n wrapper.style.height = `${tabHeight}px`;\n }\n }\n\n /** Removes the height of the tab body wrapper. */\n removeTabBodyWrapperHeight(): void {\n this.tabBodyWrapperHeight = this.tabBodyWrapper.nativeElement.clientHeight;\n this.tabBodyWrapper.nativeElement.style.height = '';\n this.animationDone.emit();\n }\n\n /** Handle click events, setting new selected index if appropriate. */\n handleClick(tab: McTab, tabHeader: McTabHeader, index: number) {\n if (tab.disabled) { return; }\n\n this.selectedIndex = tabHeader.focusIndex = index;\n }\n\n /** Retrieves the tabindex for the tab. */\n getTabIndex(tab: McTab, index: number): number | null {\n if (tab.disabled) { return null; }\n\n return this.selectedIndex === index ? 0 : -1;\n }\n\n private checkOverflow = () => {\n this.tabHeader.items\n .forEach((headerTab) => headerTab.checkOverflow());\n }\n\n private createChangeEvent(index: number): McTabChangeEvent {\n const event = new McTabChangeEvent();\n event.index = index;\n\n if (this.tabs && this.tabs.length) {\n event.tab = this.tabs.toArray()[index];\n }\n\n return event;\n }\n\n /**\n * Subscribes to changes in the tab labels. This is needed, because the @Input for the label is\n * on the McTab component, whereas the data binding is inside the McTabGroup. In order for the\n * binding to be updated, we need to subscribe to changes in it and trigger change detection\n * manually.\n */\n private subscribeToTabLabels() {\n if (this.tabLabelSubscription) {\n this.tabLabelSubscription.unsubscribe();\n }\n\n this.tabLabelSubscription = merge(...this.tabs.map((tab) => tab.stateChanges))\n .subscribe(() => this.changeDetectorRef.markForCheck());\n }\n\n private subscribeToResize() {\n if (!this.vertical) { return; }\n\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n\n this.resizeSubscription = this.resizeStream\n .pipe(debounceTime(this.resizeDebounceInterval))\n .subscribe(this.checkOverflow);\n }\n\n /** Clamps the given index to the bounds of 0 and the tabs length. */\n private clampTabIndex(index: number | null): number {\n // Note the `|| 0`, which ensures that values like NaN can't get through\n // and which would otherwise throw the component into an infinite loop\n // (since Mch.max(NaN, 0) === NaN).\n return Math.min(this.tabs.length - 1, Math.max(index || 0, 0));\n }\n}\n","<mc-tab-header\n #tabHeader\n [vertical]=\"vertical\"\n [selectedIndex]=\"selectedIndex\"\n (indexFocused)=\"focusChanged($event)\"\n (selectFocusedIndex)=\"selectedIndex = $event\">\n\n <div class=\"mc-tab-label\"\n mcTabLabelWrapper\n cdkMonitorElementFocus\n [attr.tabindex]=\"getTabIndex(tab, i)\"\n [class.mc-tab-label_old]=\"oldTab\"\n [class.mc-tab-label_horizontal]=\"!vertical && !oldTab\"\n [class.mc-tab-label_vertical]=\"vertical && !oldTab\"\n [class.mc-tab-label_empty]=\"tab.empty\"\n [class.mc-active]=\"selectedIndex == i\"\n *ngFor=\"let tab of tabs; let i = index\"\n [tab]=\"tab\"\n [id]=\"getTabLabelId(i)\"\n [disabled]=\"tab.disabled\"\n (click)=\"handleClick(tab, tabHeader, i)\"\n\n [mcTooltip]=\"tab.tooltipTitle\"\n [mcTooltipDisabled]=\"!tab.empty && !tab.isOverflown\"\n [mcTrigger]=\"'hover, focus'\"\n [mcPlacement]=\"tab.tooltipPlacement\">\n\n <div #labelContent class=\"mc-tab-label__content\"\n [class.mc-tab-label__template]=\"tab.templateLabel\">\n <!-- If there is a label template, use it. -->\n <ng-template [ngIf]=\"tab.templateLabel\">\n <ng-template [cdkPortalOutlet]=\"tab.templateLabel\"></ng-template>\n </ng-template>\n\n <!-- If there is not a label template, fall back to the text label. -->\n <ng-template [ngIf]=\"!tab.templateLabel\">{{ tab.textLabel }}</ng-template>\n </div>\n\n <div class=\"mc-tab-overlay\"></div>\n </div>\n</mc-tab-header>\n\n<div class=\"mc-tab-body__wrapper\" #tabBodyWrapper>\n <mc-tab-body\n *ngFor=\"let tab of tabs; let i = index\"\n [id]=\"getTabContentId(i)\"\n [class.mc-tab-body__active]=\"selectedIndex == i\"\n [content]=\"tab.content\"\n [position]=\"tab.position\"\n [origin]=\"tab.origin\"\n [animationDuration]=\"animationDuration\"\n (onCentered)=\"removeTabBodyWrapperHeight()\"\n (onCentering)=\"setTabBodyWrapperHeight($event)\">\n </mc-tab-body>\n</div>\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n AfterContentInit,\n Attribute,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n ElementRef,\n Input,\n OnDestroy,\n QueryList,\n Renderer2,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n CanDisable,\n CanDisableCtor,\n HasTabIndex,\n HasTabIndexCtor,\n mixinDisabled,\n mixinTabIndex\n} from '@ptsecurity/mosaic/core';\nimport { delay } from 'rxjs/operators';\n\n\n// Boilerplate for applying mixins to McTabLink.\nexport class McTabLinkBase {}\n// tslint:disable-next-line:naming-convention\nexport const McTabLinkMixinBase: HasTabIndexCtor & CanDisableCtor &\n typeof McTabLinkBase = mixinTabIndex(mixinDisabled(McTabLinkBase));\n\n/**\n * Link inside of a `mc-tab-nav-bar`.\n */\n@Component({\n selector: 'a[mc-tab-link], a[mcTabLink]',\n exportAs: 'mcTabLink',\n template: '<ng-content></ng-content><div class=\"mc-tab-overlay\"></div>',\n inputs: ['disabled', 'tabIndex'],\n host: {\n class: 'mc-tab-link',\n '[class.mc-active]': 'active',\n '[class.mc-tab-label_vertical]': 'vertical',\n '[class.mc-tab-label_horizontal]': '!vertical',\n\n '[attr.tabindex]': 'tabIndex',\n '[attr.disabled]': 'disabled || null'\n }\n})\nexport class McTabLink extends McTabLinkMixinBase implements OnDestroy, CanDisable, HasTabIndex {\n vertical = false;\n\n /** Whether the link is active. */\n @Input()\n get active(): boolean {\n return this.isActive;\n }\n\n set active(value: boolean) {\n if (value !== this.isActive) {\n this.isActive = value;\n }\n }\n\n /** Whether the tab link is active or not. */\n protected isActive: boolean = false;\n\n constructor(\n public elementRef: ElementRef,\n private readonly focusMonitor: FocusMonitor,\n private readonly renderer: Renderer2\n ) {\n super();\n\n this.focusMonitor.monitor(this.elementRef.nativeElement);\n }\n\n ngAfterViewInit(): void {\n this.addClassModifierForIcons(Array.from(this.elementRef.nativeElement.querySelectorAll('.mc-icon')));\n }\n\n ngOnDestroy() {\n this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\n }\n\n private addClassModifierForIcons(icons: HTMLElement[]) {\n const twoIcons = 2;\n const [firstIconElement, secondIconElement] = icons;\n\n if (icons.length === 1) {\n const COMMENT_NODE = 8;\n\n if (firstIconElement.nextSibling && firstIconElement.nextSibling.nodeType !== COMMENT_NODE) {\n this.renderer.addClass(firstIconElement, 'mc-icon_left');\n }\n\n if (firstIconElement.previousSibling && firstIconElement.previousSibling.nodeType !== COMMENT_NODE) {\n this.renderer.addClass(firstIconElement, 'mc-icon_right');\n }\n } else if (icons.length === twoIcons) {\n this.renderer.addClass(firstIconElement, 'mc-icon_left');\n this.renderer.addClass(secondIconElement, 'mc-icon_right');\n }\n }\n}\n\n\n/**\n * Navigation component matching the styles of the tab group header.\n */\n@Component({\n selector: '[mc-tab-nav-bar]',\n exportAs: 'mcTabNavBar, mcTabNav',\n template: '<ng-content></ng-content>',\n styleUrls: ['tab-nav-bar.scss'],\n host: {\n class: 'mc-tab-nav-bar'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class McTabNav implements AfterContentInit {\n vertical = false;\n\n @ContentChildren(McTabLink) links: QueryList<McTabLink>;\n\n constructor(@Attribute('vertical') vertical: string) {\n this.vertical = coerceBooleanProperty(vertical);\n }\n\n ngAfterContentInit(): void {\n this.links.changes\n .pipe(delay(0))\n .subscribe((links) => links.forEach((link) => link.vertical = this.vertical));\n\n this.links.notifyOnChanges();\n }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { McCommonModule } from '@ptsecurity/mosaic/core';\nimport { McIconModule } from '@ptsecurity/mosaic/icon';\nimport { McToolTipModule } from '@ptsecurity/mosaic/tooltip';\n\nimport { McTabBody, McTabBodyPortal } from './tab-body.component';\nimport { McTabContent } from './tab-content.directive';\nimport {\n McTabGroup,\n McOldTabsCssStyler,\n McAlignTabsCenterCssStyler,\n McAlignTabsEndCssStyler,\n McStretchTabsCssStyler,\n McVerticalTabsCssStyler\n} from './tab-group.component';\nimport { McTabHeader } from './tab-header.component';\nimport { McTabLabelWrapper } from './tab-label-wrapper.directive';\nimport { McTabLabel } from './tab-label.directive';\nimport { McTabLink, McTabNav } from './tab-nav-bar/index';\nimport { McTab } from './tab.component';\n\n\n@NgModule({\n imports: [\n CommonModule,\n PortalModule,\n A11yModule,\n McCommonModule,\n McIconModule,\n McToolTipModule\n ],\n // Don't export all components because some are only to be used internally.\n exports: [\n McCommonModule,\n McTabGroup,\n McTabLabel,\n McTab,\n McTabNav,\n McTabLink,\n McTabContent,\n McOldTabsCssStyler,\n McAlignTabsCenterCssStyler,\n McAlignTabsEndCssStyler,\n McStretchTabsCssStyler,\n McVerticalTabsCssStyler\n ],\n declarations: [\n McTabGroup,\n McTabLabel,\n McTab,\n McTabLabelWrapper,\n McTabNav,\n McTabLink,\n McTabBody,\n McTabBodyPortal,\n McTabHeader,\n McTabContent,\n McOldTabsCssStyler,\n McAlignTabsCenterCssStyler,\n McAlignTabsEndCssStyler,\n McStretchTabsCssStyler,\n McVerticalTabsCssStyler\n ]\n})\nexport class McTabsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["observableOf"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;MAUa,gBAAgB,GAAwD;;IAEjF,YAAY,EAAE,OAAO,CAAC,cAAc,EAAE;;QAElC,KAAK,CACD,uDAAuD,EACvD,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAC/B;;;;;QAMD,KAAK,CACD,MAAM,EACN,KAAK,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CACrE;QACD,KAAK,CACD,OAAO,EACP,KAAK,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CACpE;QAED,UAAU,CACN,wDAAwD,EACxD,OAAO,CAAC,sDAAsD,CAAC,CAClE;QACD,UAAU,CAAC,4BAA4B,EAAE;YACrC,KAAK,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC;YAChD,OAAO,CAAC,sDAAsD,CAAC;SAClE,CAAC;QACF,UAAU,CAAC,6BAA6B,EAAE;YACtC,KAAK,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC;YAC/C,OAAO,CAAC,sDAAsD,CAAC;SAClE,CAAC;KACL,CAAC;;;ACIN;;;;MAea,SAAS;IA4ClB,YACqB,UAAmC,EACvB,GAAmB,EAChD,iBAAoC;QAFnB,eAAU,GAAV,UAAU,CAAyB;QACvB,QAAG,GAAH,GAAG,CAAgB;;QAjCjC,gBAAW,GAAyB,IAAI,YAAY,EAAU,CAAC;;QAG/D,oBAAe,GAA0B,IAAI,YAAY,EAAW,CAAC;;QAGrE,uBAAkB,GAA0B,IAAI,YAAY,EAAW,CAAC;;QAGxE,eAAU,GAAuB,IAAI,YAAY,CAAO,IAAI,CAAC,CAAC;;;;QAcxE,sBAAiB,GAAW,KAAK,CAAC;;QAM1B,0BAAqB,GAAG,YAAY,CAAC,KAAK,CAAC;QAOxD,IAAI,IAAI,CAAC,GAAG,IAAI,iBAAiB,EAAE;YAC/B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM;iBACvC,SAAS,CAAC,CAAC,SAAoB;gBAC5B,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC;gBAC9C,iBAAiB,CAAC,YAAY,EAAE,CAAC;aACpC,CAAC,CAAC;SACV;KACJ;;IArDD,IACI,QAAQ,CAAC,QAAgB;QACzB,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,IAAI,CAAC,6BAA6B,EAAE,CAAC;KACxC;;;;;IAuDD,QAAQ;QACJ,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;YACvD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;SACxD;KACJ;IAED,WAAW;QACP,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;KAC5C;IAED,qBAAqB,CAAC,CAAiB;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvC,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;SACrE;KACJ;IAED,sBAAsB,CAAC,CAAiB;;QAEpC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YAC9E,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;SAC1B;QAED,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACjF,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;SAClC;KACJ;;IAGD,kBAAkB;QACd,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;KAC/D;;IAGD,gBAAgB,CAAC,QAAyC;QACtD,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,oBAAoB,IAAI,QAAQ,KAAK,qBAAqB,CAAC;KAC3G;;IAGO,6BAA6B,CAAC,MAAiB,IAAI,CAAC,kBAAkB,EAAE;QAC5E,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;YACxB,IAAI,CAAC,YAAY,GAAG,GAAG,KAAK,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;SACxD;aAAM,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;YAC/B,IAAI,CAAC,YAAY,GAAG,GAAG,KAAK,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;SACxD;aAAM;YACH,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;SAChC;KACJ;;;;;IAMO,yBAAyB;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEtC,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,GAAG,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YAC3E,OAAO,oBAAoB,CAAC;SAC/B;QAED,OAAO,qBAAqB,CAAC;KAChC;;yHA7HQ,SAAS;6GAAT,SAAS,yYAyBP,eAAe,gDCxF9B,oWAUA,6LD4La,eAAe,kDA5IZ,CAAC,gBAAgB,CAAC,YAAY,CAAC;2FAKlC,SAAS;kBAXrB,SAAS;mBAAC;oBACP,QAAQ,EAAE,aAAa;oBACvB,WAAW,EAAE,eAAe;oBAC5B,SAAS,EAAE,CAAC,eAAe,CAAC;oBAC5B,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,UAAU,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC;oBAC3C,IAAI,EAAE;wBACF,KAAK,EAAE,aAAa;qBACvB;iBACJ;;0BA+CQ,QAAQ;4EA1CT,QAAQ;sBADX,KAAK;gBAUa,WAAW;sBAA7B,MAAM;gBAGY,eAAe;sBAAjC,MAAM;gBAGY,kBAAkB;sBAApC,MAAM;gBAGY,UAAU;sBAA5B,MAAM;gBAGsC,UAAU;sBAAtD,SAAS;uBAAC,eAAe,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC;gBAGzB,OAAO;sBAAxB,KAAK;uBAAC,SAAS;gBAGP,MAAM;sBAAd,KAAK;gBAKG,iBAAiB;sBAAzB,KAAK;;AA4FV;;;;MAOa,eAAgB,SAAQ,eAAe;IAMhD,YACI,wBAAkD,EAClD,gBAAkC,EACoB,IAAe;QACrE,KAAK,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,CAAC;QADI,SAAI,GAAJ,IAAI,CAAW;;QAPjE,iBAAY,GAAG,YAAY,CAAC,KAAK,CAAC;;QAElC,eAAU,GAAG,YAAY,CAAC,KAAK,CAAC;KAOvC;;IAGD,QAAQ;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe;aACxC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;aACnE,SAAS,CAAC,CAAC,WAAoB;YAC5B,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;gBACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAClC;SACJ,CAAC,CAAC;QAEP,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB;aACzC,SAAS,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;KAC5C;;IAGD,WAAW;QACP,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;KACjC;;+HAlCQ,eAAe,0FASZ,UAAU,CAAC,MAAM,SAAS,CAAC;mHAT9B,eAAe;2FAAf,eAAe;kBAH3B,SAAS;mBAAC;oBACP,QAAQ,EAAE,iBAAiB;iBAC9B;gIAUmE,SAAS;0BAApE,MAAM;2BAAC,UAAU,CAAC,MAAM,SAAS,CAAC;;;AE5M3C;MAEa,YAAY;IACrB,YAAmB,QAA0B;QAA1B,aAAQ,GAAR,QAAQ,CAAkB;KAAI;;4HADxC,YAAY;gHAAZ,YAAY;2FAAZ,YAAY;kBADxB,SAAS;mBAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE;;;ACJzC;AA4BA;AACA,MAAM,2BAA2B,GAAG,+BAA+B,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAyB,CAAC;AAS/G;;;;AAIA,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC;;;;AAIA,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC;;;;AAIA,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,eAAe,GAAG,GAAG,CAAC;AAK5B;;;;MAKsB,oBAAoB;IAmGtC,YACc,UAAmC,EACnC,iBAAoC,EACtC,aAA4B,EAC5B,MAAc,EACd,QAAkB,EACN,GAAmB,EACW,aAAsB;QAN9D,eAAU,GAAV,UAAU,CAAyB;QACnC,sBAAiB,GAAjB,iBAAiB,CAAmB;QACtC,kBAAa,GAAb,aAAa,CAAe;QAC5B,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAU;QACN,QAAG,GAAH,GAAG,CAAgB;QACW,kBAAa,GAAb,aAAa,CAAS;QA5FpE,mBAAc,GAAG,CAAC,CAAC;;QA8BnB,oBAAe,GAAG,CAAC,CAAC;;QASnB,uBAAkB,GAAyB,IAAI,YAAY,EAAU,CAAC;;QAGtE,iBAAY,GAAyB,IAAI,YAAY,EAAU,CAAC;;QAGzE,2BAAsB,GAAG,KAAK,CAAC;;QAG/B,uBAAkB,GAAG,IAAI,CAAC;;QAG1B,wBAAmB,GAAG,IAAI,CAAC;;;;;QAMlB,sBAAiB,GAAY,KAAK,CAAC;;QAGzB,cAAS,GAAG,IAAI,OAAO,EAAQ,CAAC;QAEzC,aAAQ,GAAY,KAAK,CAAC;;QAkB5B,kBAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;;QAGpC,yBAAoB,GAAG,KAAK,CAAC;;QAYjC,MAAM,CAAC,iBAAiB,CAAC;YACrB,SAAS,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC;iBAC5C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBAC/B,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;SAC7C,CAAC,CAAC;KACN;;IAhHD,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;IAED,IAAI,aAAa,CAAC,KAAa;;QAC3B,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,KAAK,YAAY,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC;QAEnC,MAAA,IAAI,CAAC,UAAU,0CAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;KACnD;;IAMD,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,eAAgB,GAAG,CAAC,CAAC;KACjE;;IAGD,IAAI,UAAU,CAAC,KAAa;QACxB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE,OAAO;SAAE;QAE3F,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KACxC;;IAGD,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;KAC/B;IAED,IAAI,cAAc,CAAC,CAAS;QACxB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;;;QAI7E,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACjC;;IA4ED,eAAe;;QAEX,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,YAAY,EAAE,2BAA2B,CAAC;aACrF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC/B,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE1D,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,EAAE,2BAA2B,CAAC;aACjF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC/B,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;KAC5D;IAED,kBAAkB;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAGA,EAAY,CAAC,KAAK,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAEjE,MAAM,OAAO,GAAG;YACZ,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAA2B,IAAI,CAAC,KAAK,CAAC;aACtE,yBAAyB,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;;QAItD,OAAO,qBAAqB,KAAK,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;;;QAIxF,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;aACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC/B,SAAS,CAAC;;;;YAIP,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;SACxE,CAAC,CAAC;;;;QAKP,IAAI,CAAC,UAAU,CAAC,MAAM;aACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC/B,SAAS,CAAC,CAAC,aAAa;YACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;SACnC,CAAC,CAAC;KACV;IAED,qBAAqB;;QAEjB,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC1C,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACvC,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;SACzC;;;QAID,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACxC,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAClC,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;SACzC;;;QAID,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACnC,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;SACzC;KACJ;IAED,WAAW;QACP,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;KACjC;IAED,aAAa,CAAC,KAAoB;;QAE9B,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE;YAAE,OAAO;SAAE;;QAGtC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;QAE1B,IAAI,GAAG,KAAK,IAAI,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC;SACxC;aAAM,IAAI,GAAG,KAAK,GAAG,EAAE;YACpB,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;SACvC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC;SAC3C;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC5C,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;SACvC;aAAM,IAAI,GAAG,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC9C,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;SACvC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC7C,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC;SAC3C;aAAM,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACrC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACjD;QAED,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACxF,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;KACJ;;;;IAKD,gBAAgB;QACZ,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC;;;;QAK9D,IAAI,WAAW,KAAK,IAAI,CAAC,kBAAkB,EAAE;YACzC,IAAI,CAAC,kBAAkB,GAAG,WAAW,IAAI,EAAE,CAAC;;;YAI5C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;gBACZ,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;aACzC,CAAC,CAAC;SACN;KACJ;;;;;;;;IASD,gBAAgB;QACZ,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAClC;;;;;IAMD,YAAY,CAAC,KAAa;QACtB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;SAAE;QAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAE5D,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;KACjC;;;;;IAMD,WAAW,CAAC,QAAgB;;QACxB,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;SAChC;QAED,IAAI,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,EAAE;YACpB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;;;;YAKvC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;YACxD,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAEtC,IAAI,GAAG,KAAK,KAAK,EAAE;gBACf,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC;aAC9B;iBAAM;gBACH,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;aAC9E;SACJ;KACJ;;IAGD,kBAAkB;;QACd,OAAO,CAAA,MAAA,IAAI,CAAC,GAAG,0CAAE,KAAK,MAAK,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;KACpD;;IAGD,uBAAuB;QACnB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAAE,OAAO;SAAE;QAEvC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,KAAK,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;;;;;;;QAQ1F,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,cAAc,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;;;;;QAMvF,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC7C,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC;SACtD;KACJ;;;;;;;;;IAUD,YAAY,CAAC,SAA0B;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW,CAAC;;QAGnE,MAAM,YAAY,GAAG,CAAC,SAAS,KAAK,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,GAAG,eAAe,CAAC;QAEtF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,CAAC;KAC5D;;IAGD,oBAAoB,CAAC,SAA0B;QAC3C,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;KAChC;;;;;;;IAQD,aAAa,CAAC,UAAkB;QAC5B,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAAE,OAAO;SAAE;QAEvC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QAE3E,IAAI,CAAC,aAAa,EAAE;YAAE,OAAO;SAAE;;QAG/B,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW,CAAC;QACnE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC;QAE3E,IAAI,cAAsB,CAAC;QAC3B,IAAI,aAAqB,CAAC;QAE1B,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,KAAK,EAAE;YACrC,cAAc,GAAG,UAAU,CAAC;YAC5B,aAAa,GAAG,cAAc,GAAI,WAAsB,CAAC;SAC5D;aAAM;YACH,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,GAAG,UAAU,CAAC;YACpE,cAAc,GAAG,aAAa,GAAG,WAAW,CAAC;SAChD;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC;QAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QAEzD,IAAI,cAAc,GAAG,gBAAgB,EAAE;;YAEnC,IAAI,CAAC,cAAc,IAAI,gBAAgB,GAAG,cAAc,GAAG,sBAAsB,CAAC;SACrF;aAAM,IAAI,aAAa,GAAG,eAAe,EAAE;;YAExC,IAAI,CAAC,cAAc,IAAI,aAAa,GAAG,eAAe,GAAG,sBAAsB,CAAC;SACnF;KACJ;;;;;;;;;IAUD,sBAAsB;QAClB,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACzC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;SACvC;aAAM;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC;YAErG,IAAI,CAAC,SAAS,EAAE;gBACZ,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;aAC3B;YAED,IAAI,SAAS,KAAK,IAAI,CAAC,sBAAsB,EAAE;gBAC3C,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;aACzC;YAED,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;SAC3C;KACJ;;;;;;;;;;IAWD,sBAAsB;QAClB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;SAC7D;aAAM;;YAEH,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9E,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;SACzC;KACJ;;;;;;;;IASD,oBAAoB;QAChB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW,CAAC;QAEnE,OAAO,CAAC,eAAe,GAAG,UAAU,KAAK,CAAC,CAAC;KAC9C;;IAGD,YAAY;QACR,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC7B;;;;;;IAOD,oBAAoB,CAAC,SAA0B,EAAE,UAAuB;;;QAGpE,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAAE,OAAO;SAAE;;QAGnF,IAAI,CAAC,YAAY,EAAE,CAAC;;QAGpB,KAAK,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;;aAE7C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;aAC1D,SAAS,CAAC;YACP,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;;YAGrE,IAAI,QAAQ,KAAK,CAAC,IAAI,QAAQ,IAAI,iBAAiB,EAAE;gBACjD,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB;SACJ,CAAC,CAAC;KACV;;;;;;IASO,QAAQ,CAAC,QAAgB;QAC7B,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;SAChD;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC;;;QAIzE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;KAC/D;;oIAzfiB,oBAAoB,sMA0Gd,qBAAqB;wHA1G3B,oBAAoB;2FAApB,oBAAoB;kBADzC,SAAS;;0BA0GD,QAAQ;;0BACR,QAAQ;;0BAAI,MAAM;2BAAC,qBAAqB;4CAnCpC,iBAAiB;sBAAzB,KAAK;;;ACtIH,MAAM,YAAY,GAAG,IAAI,cAAc,CAAa,YAAY,CAAC,CAAC;AAEzE;MAKa,UAAW,SAAQ,SAAS;;0HAA5B,UAAU;8GAAV,UAAU,uDAFR,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;2FAEtD,UAAU;kBAJtB,SAAS;mBAAC;oBACP,QAAQ,EAAE,8BAA8B;oBACxC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,YAAY,EAAE,CAAC;iBAClE;;;MCiBY,SAAS;CAAG;AAEzB;AACO,MAAM,cAAc,GAAsC,aAAa,CAAC,SAAS,CAAC,CAAC;MAa7E,KAAM,SAAQ,cAAc;IAsFrC,YAA6B,gBAAkC;QAC3D,KAAK,EAAE,CAAC;QADiB,qBAAgB,GAAhB,gBAAgB,CAAkB;QApDvD,kBAAa,GAAG,EAAE,CAAC;QAElB,qBAAgB,GAAoB,eAAe,CAAC,KAAK,CAAC;;QAGnD,cAAS,GAAG,EAAE,CAAC;QAEtB,UAAK,GAAG,KAAK,CAAC;;QAKd,iBAAY,GAAG,IAAI,OAAO,EAAQ,CAAC;;;;;QAM5C,aAAQ,GAAkB,IAAI,CAAC;;;;;QAM/B,WAAM,GAAkB,IAAI,CAAC;;;;QAK7B,aAAQ,GAAG,KAAK,CAAC;QAkBT,0BAAqB,GAAG,EAAE,CAAC;;QAG3B,kBAAa,GAA0B,IAAI,CAAC;KAInD;;IAtFD,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IAED,IACI,aAAa;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;IAED,IAAI,aAAa,CAAC,KAAiB;QAC/B,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;KACrC;IAYD,IACI,YAAY;QACZ,OAAO,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC;KACzD;IAED,IAAI,YAAY,CAAC,KAAa;QAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;IAiCD,IAAI,WAAW;QACX,OAAO,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;KACvC;IAED,IAAI,oBAAoB;QACpB,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,OAAO,GAAG,IAAI,CAAC,qBAAqB,IAAI,CAAC;SAC5C;QAED,OAAO,EAAE,CAAC;KACb;IAED,IAAI,oBAAoB,CAAC,KAAa;QAClC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;KACtC;IAWD,WAAW,CAAC,OAAsB;QAC9B,IAAI,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YAC3E,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;SAC5B;KACJ;IAED,WAAW;QACP,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KAChC;IAED,QAAQ;QACJ,IAAI,CAAC,aAAa,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAChH;;;;;;;IAQS,qBAAqB,CAAC,KAAiB;;;;;QAK7C,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;SAC/B;KACJ;;qHAtHQ,KAAK;yGAAL,KAAK,kQAMA,YAAY,kFAcZ,YAAY,2BAAU,WAAW,4FAGpC,WAAW,+HA5BZ,sDAAsD;2FAKvD,KAAK;kBAXjB,SAAS;mBAAC;oBACP,QAAQ,EAAE,QAAQ;oBAClB,QAAQ,EAAE,OAAO;;;;oBAIjB,QAAQ,EAAE,sDAAsD;oBAChE,MAAM,EAAE,CAAC,UAAU,CAAC;oBACpB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;iBACxC;uGAQO,aAAa;sBADhB,YAAY;uBAAC,YAAY;gBAcuC,eAAe;sBAA/E,YAAY;uBAAC,YAAY,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGrB,eAAe;sBAAxD,SAAS;uBAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAGpC,YAAY;sBADf,KAAK;gBAWG,gBAAgB;sBAAxB,KAAK;gBAGU,SAAS;sBAAxB,KAAK;uBAAC,OAAO;gBAEL,KAAK;sBAAb,KAAK;gBAEU,KAAK;sBAApB,KAAK;uBAAC,OAAO;;;ACrElB;AACA;MACa,qBAAqB;CAAG;AACrC;AACO,MAAM,0BAA0B,GACJ,aAAa,CAAC,qBAAqB,CAAC,CAAC;AAExE;;;;MAWa,iBAAkB,SAAQ,0BAA0B;IAK7D,YACW,UAAsB,EACrB,QAAmB;QAE3B,KAAK,EAAE,CAAC;QAHD,eAAU,GAAV,UAAU,CAAY;QACrB,aAAQ,GAAR,QAAQ,CAAW;KAG9B;IAED,eAAe;QACX,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KACzG;;IAGD,KAAK;QACD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KACzC;IAED,aAAa;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC;KACnD;IAED,cAAc;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC;KACpD;IAED,aAAa;QACT,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC;KACjF;IAED,WAAW;QACP,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC;KACpG;IAED,YAAY;QACR,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC;KACpD;IAEO,wBAAwB,CAAC,KAAoB;QACjD,MAAM,QAAQ,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC;QAEpD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACpB,MAAM,YAAY,GAAG,CAAC,CAAC;YAEvB,IAAI,gBAAgB,CAAC,WAAW,IAAI,gBAAgB,CAAC,WAAW,CAAC,QAAQ,KAAK,YAAY,EAAE;gBACxF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;aAC5D;YAED,IAAI,gBAAgB,CAAC,eAAe,IAAI,gBAAgB,CAAC,eAAe,CAAC,QAAQ,KAAK,YAAY,EAAE;gBAChG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;aAC7D;SACJ;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;SAC9D;KACJ;;iIA3DQ,iBAAiB;qHAAjB,iBAAiB;2FAAjB,iBAAiB;kBAP7B,SAAS;mBAAC;oBACP,QAAQ,EAAE,qBAAqB;oBAC/B,MAAM,EAAE,CAAC,UAAU,CAAC;oBACpB,IAAI,EAAE;wBACF,iBAAiB,EAAE,kBAAkB;qBACxC;iBACJ;yHAEiC,YAAY;sBAAzC,YAAY;uBAAC,cAAc;gBAEnB,GAAG;sBAAX,KAAK;;;ACPV;;;;;;;MAsBa,WAAY,SAAQ,oBAAoB;IAUjD,YACa,UAAsB,EACtB,iBAAoC,EAC7C,aAA4B,EAC5B,MAAc,EACd,QAAkB,EACN,GAAmB,EACY,aAAsB;QAEjE,KAAK,CAAC,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;QARjF,eAAU,GAAV,UAAU,CAAY;QACtB,sBAAiB,GAAjB,iBAAiB,CAAmB;;QAVxC,aAAQ,GAAY,KAAK,CAAC;KAkBlC;IAED,YAAY,CAAC,KAAoB;QAC7B,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;;2HAxBQ,WAAW,sMAiBI,qBAAqB;+GAjBpC,WAAW,mdAIH,iBAAiB,qeCzDtC,2gCAgCA;2FDqBa,WAAW;kBAfvB,SAAS;mBAAC;oBACP,QAAQ,EAAE,eAAe;oBACzB,WAAW,EAAE,iBAAiB;oBAC9B,SAAS,EAAE,CAAC,iBAAiB,CAAC;oBAC9B,MAAM,EAAE,CAAC,eAAe,CAAC;oBACzB,OAAO,EAAE,CAAC,oBAAoB,EAAE,cAAc,CAAC;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,OAAO;oBAChD,IAAI,EAAE;wBACF,KAAK,EAAE,eAAe;wBACtB,gCAAgC,EAAE,UAAU;wBAC5C,oDAAoD,EAAE,wBAAwB;wBAC9E,2BAA2B,EAAE,iCAAiC;qBACjE;iBACJ;;0BAiBQ,QAAQ;;0BACR,QAAQ;;0BAAI,MAAM;2BAAC,qBAAqB;4CAfpC,QAAQ;sBAAhB,KAAK;gBAEsD,KAAK;sBAAhE,eAAe;uBAAC,iBAAiB,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;gBACT,gBAAgB;sBAAhE,SAAS;uBAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACP,OAAO;sBAA9C,SAAS;uBAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACV,aAAa;sBAAxC,SAAS;uBAAC,eAAe;gBACM,iBAAiB;sBAAhD,SAAS;uBAAC,mBAAmB;;;ME1BrB,kBAAkB;;kIAAlB,kBAAkB;sHAAlB,kBAAkB;2FAAlB,kBAAkB;kBAJ9B,SAAS;mBAAC;oBACP,QAAQ,EAAE,2BAA2B;oBACrC,IAAI,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE;iBACtC;;MAOY,0BAA0B;;0IAA1B,0BAA0B;8HAA1B,0BAA0B;2FAA1B,0BAA0B;kBAJtC,SAAS;mBAAC;oBACP,QAAQ,EAAE,4EAA4E;oBACtF,IAAI,EAAE,EAAE,KAAK,EAAE,kCAAkC,EAAE;iBACtD;;MAOY,uBAAuB;;uIAAvB,uBAAuB;2HAAvB,uBAAuB;2FAAvB,uBAAuB;kBAJnC,SAAS;mBAAC;oBACP,QAAQ,EAAE,sEAAsE;oBAChF,IAAI,EAAE,EAAE,KAAK,EAAE,+BAA+B,EAAE;iBACnD;;MAOY,sBAAsB;;sIAAtB,sBAAsB;0HAAtB,sBAAsB;2FAAtB,sBAAsB;kBAJlC,SAAS;mBAAC;oBACP,QAAQ,EAAE,kEAAkE;oBAC5E,IAAI,EAAE,EAAE,KAAK,EAAE,6BAA6B,EAAE;iBACjD;;MAOY,uBAAuB;;uIAAvB,uBAAuB;2HAAvB,uBAAuB;2FAAvB,uBAAuB;kBAJnC,SAAS;mBAAC;oBACP,QAAQ,EAAE,oDAAoD;oBAC9D,IAAI,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE;iBAC3C;;AAGD;AACA,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf;MACa,gBAAgB;CAK5B;AAWD;MACa,cAAc,GAAG,IAAI,cAAc,CAAS,gBAAgB,EAAE;AAE3E;AACA;MACa,cAAc;;IAEvB,YAAmB,WAAuB;QAAvB,gBAAW,GAAX,WAAW,CAAY;KAAI;CACjD;AACD;MACa,mBAAmB,GAA2C,aAAa,CAAC,cAAc,EAAE;AAEzG;;;;MAmBa,UAAW,SAAQ,mBAAmB;IAsE/C,YACI,UAAsB,EACL,iBAAoC,EAC3B,SAAiB,EACpB,QAAgB,EACH,aAA6B;QAEjE,KAAK,CAAC,UAAU,CAAC,CAAC;QALD,sBAAiB,GAAjB,iBAAiB,CAAmB;QAvEhD,iBAAY,GAAG,IAAI,OAAO,EAAS,CAAC;QAqBrC,mBAAc,GAAG,KAAK,CAAC;QAYvB,mBAAc,GAAkB,IAAI,CAAC;;QAGpC,mBAAc,GAAwB,OAAO,CAAC;;QAMpC,wBAAmB,GAAyB,IAAI,YAAY,EAAU,CAAC;;QAGvE,gBAAW,GAAmC,IAAI,YAAY,EAAoB,CAAC;;QAGnF,kBAAa,GAAuB,IAAI,YAAY,EAAQ,CAAC;;QAG7D,sBAAiB,GAAmC,IAAI,YAAY,CAAmB,IAAI,CAAC,CAAC;;QAGxG,kBAAa,GAAkB,CAAC,CAAC;;QAGjC,yBAAoB,GAAG,CAAC,CAAC;;QAGzB,qBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC;;QAGtC,yBAAoB,GAAG,YAAY,CAAC,KAAK,CAAC;QAC1C,uBAAkB,GAAG,YAAY,CAAC,KAAK,CAAC;QAG/B,2BAAsB,GAAW,GAAG,CAAC;QAiK9C,kBAAa,GAAG;YACpB,IAAI,CAAC,SAAS,CAAC,KAAK;iBACf,OAAO,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;SAC1D,CAAA;QAzJG,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,iBAAiB,GAAG,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,iBAAiB,KAAI,KAAK,CAAC;QAEnE,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC5B;;IAzED,IACI,aAAa;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;IAED,IAAI,aAAa,CAAC,KAAc;QAC5B,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;KACtD;;IAKD,IACI,aAAa;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;IAED,IAAI,aAAa,CAAC,KAAoB;QAClC,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAC1D;;;;;;;IA8DD,qBAAqB;;;QAGjB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;;QAIlF,IAAI,IAAI,CAAC,cAAc,KAAK,aAAa,EAAE;YACvC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;YAE/C,IAAI,CAAC,UAAU,EAAE;gBACb,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;aACtE;;;YAID,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,CAAC,QAAQ,GAAG,KAAK,KAAK,aAAa,CAAC,CAAC;gBAE1E,IAAI,CAAC,UAAU,EAAE;oBACb,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBAChD;aACJ,CAAC,CAAC;SACN;;QAGD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAU,EAAE,KAAa;YACxC,GAAG,CAAC,QAAQ,GAAG,KAAK,GAAG,aAAa,CAAC;;;YAIrC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBAClE,GAAG,CAAC,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;aACpD;SACJ,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,cAAc,KAAK,aAAa,EAAE;YACvC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;YACpC,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;SACzC;KACJ;IAED,kBAAkB;QACd,IAAI,CAAC,oBAAoB,EAAE,CAAC;;;QAI5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;aACpC,SAAS,CAAC;YACP,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;;YAI7D,IAAI,aAAa,KAAK,IAAI,CAAC,cAAc,EAAE;gBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAClC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;;;;wBAIlB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;wBAC7C,MAAM;qBACT;iBACJ;aACJ;YAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;SACzC,CAAC,CAAC;KACV;IAED,eAAe;QACX,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;IAED,WAAW;QACP,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;KACzC;IAED,YAAY,CAAC,KAAa;QACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;KACxD;;IAGD,aAAa,CAAC,CAAS;QACnB,OAAO,gBAAgB,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;KAC9C;;IAGD,eAAe,CAAC,CAAS;QACrB,OAAO,kBAAkB,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;KAChD;;;;;IAMD,uBAAuB,CAAC,SAAiB;QACrC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAAE,OAAO;SAAE;QAEnE,MAAM,OAAO,GAAgB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;QAE/D,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB,IAAI,CAAC;;;QAIxD,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,YAAY,EAAE;YAChD,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,SAAS,IAAI,CAAC;SAC3C;KACJ;;IAGD,0BAA0B;QACtB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,YAAY,CAAC;QAC3E,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QACpD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC7B;;IAGD,WAAW,CAAC,GAAU,EAAE,SAAsB,EAAE,KAAa;QACzD,IAAI,GAAG,CAAC,QAAQ,EAAE;YAAE,OAAO;SAAE;QAE7B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;KACrD;;IAGD,WAAW,CAAC,GAAU,EAAE,KAAa;QACjC,IAAI,GAAG,CAAC,QAAQ,EAAE;YAAE,OAAO,IAAI,CAAC;SAAE;QAElC,OAAO,IAAI,CAAC,aAAa,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAChD;IAOO,iBAAiB,CAAC,KAAa;QACnC,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACrC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QAEpB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC/B,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;SAC1C;QAED,OAAO,KAAK,CAAC;KAChB;;;;;;;IAQO,oBAAoB;QACxB,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC;SAC3C;QAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,YAAY,CAAC,CAAC;aACzE,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,CAAC;KAC/D;IAEO,iBAAiB;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;SAAE;QAE/B,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;SACzC;QAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY;aACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;aAC/C,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACtC;;IAGO,aAAa,CAAC,KAAoB;;;;QAItC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAClE;;0HAtRQ,UAAU,6EAyEJ,aAAa,8BACb,UAAU,8BACb,cAAc;8GA3EjB,UAAU,+nBAMF,KAAK,yRCtH1B,ooEAuDA;2FDyDa,UAAU;kBAftB,SAAS;mBAAC;oBACP,QAAQ,EAAE,cAAc;oBACxB,QAAQ,EAAE,YAAY;oBACtB,WAAW,EAAE,gBAAgB;oBAC7B,SAAS,EAAE,CAAC,gBAAgB,CAAC;oBAC7B,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,MAAM,EAAE,CAAC,UAAU,CAAC;oBACpB,IAAI,EAAE;wBACF,KAAK,EAAE,cAAc;wBACrB,qCAAqC,EAAE,eAAe;wBACtD,sCAAsC,EAAE,4BAA4B;wBACpE,iBAAiB,EAAE,qBAAqB;qBAC3C;iBACJ;;0BA0EQ,SAAS;2BAAC,aAAa;;0BACvB,SAAS;2BAAC,UAAU;;0BACpB,MAAM;2BAAC,cAAc;;0BAAG,QAAQ;4CArEb,IAAI;sBAA3B,eAAe;uBAAC,KAAK;gBAE0B,cAAc;sBAA7D,SAAS;uBAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAEH,SAAS;sBAAnD,SAAS;uBAAC,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAIrC,aAAa;sBADhB,KAAK;gBAaF,aAAa;sBADhB,KAAK;gBAYG,cAAc;sBAAtB,KAAK;gBAGG,iBAAiB;sBAAzB,KAAK;gBAGa,mBAAmB;sBAArC,MAAM;gBAGY,WAAW;sBAA7B,MAAM;gBAGY,aAAa;sBAA/B,MAAM;gBAGY,iBAAiB;sBAAnC,MAAM;;;AE1IX;MACa,aAAa;CAAG;AAC7B;AACO,MAAM,kBAAkB,GACJ,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;AAEvE;;;MAkBa,SAAU,SAAQ,kBAAkB;IAkB7C,YACW,UAAsB,EACZ,YAA0B,EAC1B,QAAmB;QAEpC,KAAK,EAAE,CAAC;QAJD,eAAU,GAAV,UAAU,CAAY;QACZ,iBAAY,GAAZ,YAAY,CAAc;QAC1B,aAAQ,GAAR,QAAQ,CAAW;QApBxC,aAAQ,GAAG,KAAK,CAAC;;QAeP,aAAQ,GAAY,KAAK,CAAC;QAShC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;KAC5D;;IAtBD,IACI,MAAM;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IAED,IAAI,MAAM,CAAC,KAAc;QACrB,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE;YACzB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;SACzB;KACJ;IAeD,eAAe;QACX,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KACzG;IAED,WAAW;QACP,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;KACnE;IAEO,wBAAwB,CAAC,KAAoB;QACjD,MAAM,QAAQ,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC;QAEpD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACpB,MAAM,YAAY,GAAG,CAAC,CAAC;YAEvB,IAAI,gBAAgB,CAAC,WAAW,IAAI,gBAAgB,CAAC,WAAW,CAAC,QAAQ,KAAK,YAAY,EAAE;gBACxF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;aAC5D;YAED,IAAI,gBAAgB,CAAC,eAAe,IAAI,gBAAgB,CAAC,eAAe,CAAC,QAAQ,KAAK,YAAY,EAAE;gBAChG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;aAC7D;SACJ;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;SAC9D;KACJ;;yHAtDQ,SAAS;6GAAT,SAAS,+aAZR,6DAA6D;2FAY9D,SAAS;kBAfrB,SAAS;mBAAC;oBACP,QAAQ,EAAE,8BAA8B;oBACxC,QAAQ,EAAE,WAAW;oBACrB,QAAQ,EAAE,6DAA6D;oBACvE,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;oBAChC,IAAI,EAAE;wBACF,KAAK,EAAE,aAAa;wBACpB,mBAAmB,EAAE,QAAQ;wBAC7B,+BAA+B,EAAE,UAAU;wBAC3C,iCAAiC,EAAE,WAAW;wBAE9C,iBAAiB,EAAE,UAAU;wBAC7B,iBAAiB,EAAE,kBAAkB;qBACxC;iBACJ;sJAMO,MAAM;sBADT,KAAK;;AAsDV;;;MAca,QAAQ;IAKjB,YAAmC,QAAgB;QAJnD,aAAQ,GAAG,KAAK,CAAC;QAKb,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;KACnD;IAED,kBAAkB;QACd,IAAI,CAAC,KAAK,CAAC,OAAO;aACb,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACd,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAElF,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;KAChC;;wHAfQ,QAAQ,kBAKM,UAAU;4GALxB,QAAQ,0HAGA,SAAS,oEAXhB,2BAA2B;2FAQ5B,QAAQ;kBAXpB,SAAS;mBAAC;oBACP,QAAQ,EAAE,kBAAkB;oBAC5B,QAAQ,EAAE,uBAAuB;oBACjC,QAAQ,EAAE,2BAA2B;oBACrC,SAAS,EAAE,CAAC,kBAAkB,CAAC;oBAC/B,IAAI,EAAE;wBACF,KAAK,EAAE,gBAAgB;qBAC1B;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAClD;;0BAMgB,SAAS;2BAAC,UAAU;4CAFL,KAAK;sBAAhC,eAAe;uBAAC,SAAS;;;MC1DjB,YAAY;;4HAAZ,YAAY;6HAAZ,YAAY,iBAjBjB,UAAU;QACV,UAAU;QACV,KAAK;QACL,iBAAiB;QACjB,QAAQ;QACR,SAAS;QACT,SAAS;QACT,eAAe;QACf,WAAW;QACX,YAAY;QACZ,kBAAkB;QAClB,0BAA0B;QAC1B,uBAAuB;QACvB,sBAAsB;QACtB,uBAAuB,aArCvB,YAAY;QACZ,YAAY;QACZ,UAAU;QACV,cAAc;QACd,YAAY;QACZ,eAAe,aAIf,cAAc;QACd,UAAU;QACV,UAAU;QACV,KAAK;QACL,QAAQ;QACR,SAAS;QACT,YAAY;QACZ,kBAAkB;QAClB,0BAA0B;QAC1B,uBAAuB;QACvB,sBAAsB;QACtB,uBAAuB;6HAoBlB,YAAY,YAzCZ;YACL,YAAY;YACZ,YAAY;YACZ,UAAU;YACV,cAAc;YACd,YAAY;YACZ,eAAe;SAClB,EAGG,cAAc;2FA+BT,YAAY;kBA1CxB,QAAQ;mBAAC;oBACN,OAAO,EAAE;wBACL,YAAY;wBACZ,YAAY;wBACZ,UAAU;wBACV,cAAc;wBACd,YAAY;wBACZ,eAAe;qBAClB;;oBAED,OAAO,EAAE;wBACL,cAAc;wBACd,UAAU;wBACV,UAAU;wBACV,KAAK;wBACL,QAAQ;wBACR,SAAS;wBACT,YAAY;wBACZ,kBAAkB;wBAClB,0BAA0B;wBAC1B,uBAAuB;wBACvB,sBAAsB;wBACtB,uBAAuB;qBAC1B;oBACD,YAAY,EAAE;wBACV,UAAU;wBACV,UAAU;wBACV,KAAK;wBACL,iBAAiB;wBACjB,QAAQ;wBACR,SAAS;wBACT,SAAS;wBACT,eAAe;wBACf,WAAW;wBACX,YAAY;wBACZ,kBAAkB;wBAClB,0BAA0B;wBAC1B,uBAAuB;wBACvB,sBAAsB;wBACtB,uBAAuB;qBAC1B;iBACJ;;;AClED;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ptsecurity-mosaic-tags.js","sources":["../../../packages/mosaic/tags/tag-default-options.ts","../../../packages/mosaic/tags/tag.component.ts","../../../packages/mosaic/tags/tag.partial.html","../../../packages/mosaic/tags/tag-list.component.ts","../../../packages/mosaic/tags/tag-list.partial.html","../../../packages/mosaic/tags/tag-input.ts","../../../packages/mosaic/tags/tag.module.ts","../../../packages/mosaic/tags/ptsecurity-mosaic-tags.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n\n/** Default options, for the chips module, that can be overridden. */\n// tslint:disable-next-line: naming-convention\nexport interface McTagsDefaultOptions {\n /** The list of key codes that will trigger a chipEnd event. */\n separatorKeyCodes: number[];\n}\n\n/** Injection token to be used to override the default options for the chips module. */\nexport const MC_TAGS_DEFAULT_OPTIONS = new InjectionToken<McTagsDefaultOptions>('mc-tags-default-options');\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n NgZone,\n OnDestroy,\n Output,\n QueryList,\n ViewEncapsulation\n} from '@angular/core';\nimport { IFocusableOption } from '@ptsecurity/cdk/a11y';\nimport { BACKSPACE, DELETE, SPACE } from '@ptsecurity/cdk/keycodes';\nimport {\n CanColor,\n CanColorCtor,\n CanDisable,\n CanDisableCtor,\n mixinColor,\n mixinDisabled\n} from '@ptsecurity/mosaic/core';\nimport { McIcon } from '@ptsecurity/mosaic/icon';\nimport { Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\n\n// tslint:disable-next-line:naming-convention\nexport interface McTagEvent {\n tag: McTag;\n}\n\n/** Event object emitted by McTag when selected or deselected. */\nexport class McTagSelectionChange {\n constructor(public source: McTag, public selected: boolean, public isUserInput = false) {}\n}\n\n\nconst TAG_ATTRIBUTE_NAMES = ['mc-basic-tag'];\n\n/**\n * Dummy directive to add CSS class to tag avatar.\n * @docs-private\n */\n@Directive({\n selector: 'mc-tag-avatar, [mcTagAvatar]',\n host: { class: 'mc-tag-avatar' }\n})\nexport class McTagAvatar {}\n\n/**\n * Dummy directive to add CSS class to tag trailing icon.\n * @docs-private\n */\n@Directive({\n selector: 'mc-tag-trailing-icon, [mcTagTrailingIcon]',\n host: { class: 'mc-tag-trailing-icon' }\n})\nexport class McTagTrailingIcon {}\n\nexport class McTagBase {\n // tslint:disable-next-line:naming-convention\n constructor(public _elementRef: ElementRef) {}\n}\n\n// tslint:disable-next-line:naming-convention\nexport const McTagMixinBase: CanColorCtor & CanDisableCtor & typeof McTagBase = mixinColor(mixinDisabled(McTagBase));\n\n\n@Component({\n selector: 'mc-tag, [mc-tag], mc-basic-tag, [mc-basic-tag]',\n exportAs: 'mcTag',\n templateUrl: 'tag.partial.html',\n styleUrls: ['./tag.scss'],\n inputs: ['color'],\n host: {\n class: 'mc-tag',\n\n '[attr.tabindex]': 'tabindex',\n '[attr.disabled]': 'disabled || null',\n\n '[class.mc-selected]': 'selected',\n '[class.mc-focused]': 'hasFocus',\n '[class.mc-tag-with-avatar]': 'avatar',\n '[class.mc-tag-with-trailing-icon]': 'trailingIcon || removeIcon',\n '[class.mc-disabled]': 'disabled',\n\n '(click)': 'handleClick($event)',\n '(keydown)': 'handleKeydown($event)',\n '(focus)': 'focus()',\n '(blur)': 'blur()'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class McTag extends McTagMixinBase implements IFocusableOption, OnDestroy, CanColor, CanDisable {\n /** Emits when the tag is focused. */\n readonly onFocus = new Subject<McTagEvent>();\n\n /** Emits when the tag is blured. */\n readonly onBlur = new Subject<McTagEvent>();\n\n nativeElement: HTMLElement;\n\n /** Whether the tag has focus. */\n hasFocus: boolean = false;\n\n /** Whether the tag list is selectable */\n tagListSelectable: boolean = true;\n\n @ContentChildren(McIcon) contentChildren: QueryList<McIcon>;\n\n /** The tag avatar */\n @ContentChild(McTagAvatar, {static: false}) avatar: McTagAvatar;\n\n /** The tag's trailing icon. */\n @ContentChild(McTagTrailingIcon, {static: false}) trailingIcon: McTagTrailingIcon;\n\n /** The tag's remove toggler. */\n @ContentChild(forwardRef(() => McTagRemove), {static: false}) removeIcon: McTagRemove;\n\n /** Emitted when the tag is selected or deselected. */\n @Output() readonly selectionChange: EventEmitter<McTagSelectionChange> =\n new EventEmitter<McTagSelectionChange>();\n\n /** Emitted when the tag is destroyed. */\n @Output() readonly destroyed: EventEmitter<McTagEvent> = new EventEmitter<McTagEvent>();\n\n /** Emitted when a tag is to be removed. */\n @Output() readonly removed: EventEmitter<McTagEvent> = new EventEmitter<McTagEvent>();\n\n /** Whether the tag is selected. */\n @Input()\n get selected(): boolean {\n return this._selected;\n }\n\n set selected(value: boolean) {\n const coercedValue = coerceBooleanProperty(value);\n\n if (coercedValue !== this._selected) {\n this._selected = coercedValue;\n this.dispatchSelectionChange();\n }\n }\n\n private _selected: boolean = false;\n\n /** The value of the tag. Defaults to the content inside `<mc-tag>` tags. */\n @Input()\n get value(): any {\n return this._value !== undefined\n ? this._value\n : this.elementRef.nativeElement.textContent;\n }\n\n set value(value: any) {\n this._value = value;\n }\n\n private _value: any;\n\n /**\n * Whether or not the tag is selectable. When a tag is not selectable,\n * changes to its selected state are always ignored. By default a tag is\n * selectable, and it becomes non-selectable if its parent tag list is\n * not selectable.\n */\n @Input()\n get selectable(): boolean {\n return this._selectable && this.tagListSelectable;\n }\n\n set selectable(value: boolean) {\n this._selectable = coerceBooleanProperty(value);\n }\n\n private _selectable: boolean = true;\n\n /**\n * Determines whether or not the tag displays the remove styling and emits (removed) events.\n */\n @Input()\n get removable(): boolean {\n return this._removable;\n }\n\n set removable(value: boolean) {\n this._removable = coerceBooleanProperty(value);\n }\n\n private _removable: boolean = true;\n\n get tabindex(): any {\n if (!this.selectable) { return null; }\n\n return this.disabled ? null : -1;\n }\n\n @Input()\n get disabled() {\n return this._disabled;\n }\n\n set disabled(value: any) {\n if (value !== this.disabled) {\n this._disabled = value;\n }\n }\n\n private _disabled: boolean = false;\n\n constructor(\n public elementRef: ElementRef,\n public changeDetectorRef: ChangeDetectorRef,\n private _ngZone: NgZone\n ) {\n super(elementRef);\n\n this.addHostClassName();\n\n this.nativeElement = elementRef.nativeElement;\n }\n\n ngAfterContentInit() {\n this.addClassModificatorForIcons();\n }\n\n addClassModificatorForIcons() {\n const icons = this.contentChildren.map((item) => item._elementRef.nativeElement);\n\n if (icons.length === 1) {\n const iconElement = icons[0];\n\n if (!iconElement.previousElementSibling && !iconElement.nextElementSibling) {\n if (iconElement.nextSibling) {\n iconElement.classList.add('mc-icon_left');\n this.nativeElement.classList.add('mc-left-icon');\n }\n\n if (iconElement.previousSibling) {\n iconElement.classList.add('mc-icon_right');\n this.nativeElement.classList.add('mc-right-icon');\n }\n }\n } else if (icons.length > 1) {\n const firstIconElement = icons[0];\n const secondIconElement = icons[1];\n\n firstIconElement.classList.add('mc-icon_left');\n secondIconElement.classList.add('mc-icon_right');\n }\n }\n\n addHostClassName() {\n // Add class for the different tags\n for (const attr of TAG_ATTRIBUTE_NAMES) {\n if (\n this.elementRef.nativeElement.hasAttribute(attr) ||\n this.elementRef.nativeElement.tagName.toLowerCase() === attr\n ) {\n (this.elementRef.nativeElement as HTMLElement).classList.add(attr);\n\n return;\n }\n }\n (this.elementRef.nativeElement as HTMLElement).classList.add('mc-standard-tag');\n }\n\n ngOnDestroy() {\n this.destroyed.emit({ tag: this });\n }\n\n select(): void {\n if (!this._selected) {\n this._selected = true;\n this.dispatchSelectionChange();\n }\n }\n\n deselect(): void {\n if (this._selected) {\n this._selected = false;\n this.dispatchSelectionChange();\n }\n }\n\n selectViaInteraction(): void {\n if (!this._selected) {\n this._selected = true;\n this.dispatchSelectionChange(true);\n }\n }\n\n toggleSelected(isUserInput: boolean = false): boolean {\n this._selected = !this.selected;\n this.dispatchSelectionChange(isUserInput);\n\n return this.selected;\n }\n\n /** Allows for programmatic focusing of the tag. */\n focus(): void {\n if (!this.selectable) { return; }\n\n if (!this.hasFocus) {\n this.elementRef.nativeElement.focus();\n\n this.onFocus.next({ tag: this });\n\n Promise.resolve().then(() => {\n this.hasFocus = true;\n this.changeDetectorRef.markForCheck();\n });\n }\n }\n\n /**\n * Allows for programmatic removal of the tag. Called by the McTagList when the DELETE or\n * BACKSPACE keys are pressed.\n *\n * Informs any listeners of the removal request. Does not remove the tag from the DOM.\n */\n remove(): void {\n if (this.removable) {\n this.removed.emit({ tag: this });\n }\n }\n\n handleClick(event: Event) {\n if (this.disabled) {\n event.preventDefault();\n } else {\n event.stopPropagation();\n }\n }\n\n handleKeydown(event: KeyboardEvent): void {\n if (this.disabled) { return; }\n\n // tslint:disable-next-line: deprecation\n switch (event.keyCode) {\n case DELETE:\n case BACKSPACE:\n // If we are removable, remove the focused tag\n this.remove();\n // Always prevent so page navigation does not occur\n event.preventDefault();\n break;\n case SPACE:\n // If we are selectable, toggle the focused tag\n if (this.selectable) {\n this.toggleSelected(true);\n }\n\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n break;\n default:\n }\n }\n\n blur(): void {\n // When animations are enabled, Angular may end up removing the tag from the DOM a little\n // earlier than usual, causing it to be blurred and throwing off the logic in the tag list\n // that moves focus not the next item. To work around the issue, we defer marking the tag\n // as not focused until the next time the zone stabilizes.\n this._ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this._ngZone.run(() => {\n this.hasFocus = false;\n this.onBlur.next({ tag: this });\n });\n });\n }\n\n private dispatchSelectionChange(isUserInput = false) {\n this.selectionChange.emit({\n source: this,\n isUserInput,\n selected: this._selected\n });\n }\n}\n\n\n/**\n *\n * Example:\n *\n * `<mc-tag>\n * <mc-icon mcTagRemove>cancel</mc-icon>\n * </mc-tag>`\n *\n * You *may* use a custom icon, but you may need to override the `mc-tag-remove` positioning\n * styles to properly center the icon within the tag.\n */\n@Directive({\n selector: '[mcTagRemove]',\n host: {\n class: 'mc-tag-remove mc-tag-trailing-icon',\n '[attr.tabindex]': '-1',\n '(click)': 'handleClick($event)',\n '(focus)': 'focus($event)'\n }\n})\nexport class McTagRemove {\n constructor(protected parentTag: McTag) {}\n\n focus($event): void {\n $event.stopPropagation();\n }\n\n /** Calls the parent tag's public `remove()` method if applicable. */\n handleClick(event: Event): void {\n if (this.parentTag.removable) {\n this.parentTag.hasFocus = true;\n\n this.parentTag.remove();\n }\n\n // We need to stop event propagation because otherwise the event will bubble up to the\n // form field and cause the `onContainerClick` method to be invoked. This method would then\n // reset the focused tag that has been focused after tag removal. Usually the parent\n // the parent click listener of the `McTag` would prevent propagation, but it can happen\n // that the tag is being removed before the event bubbles up.\n event.stopPropagation();\n }\n}\n","<div class=\"mc-tag__wrapper\">\n <span class=\"mc-tag__text\"><ng-content></ng-content></span>\n <ng-content select=\"[mc-icon]\"></ng-content>\n <div class=\"mc-tag-overlay\"></div>\n</div>\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DoCheck,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Self,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControlName,\n FormGroupDirective,\n NG_VALIDATORS,\n NgControl,\n NgForm,\n NgModel,\n Validator\n} from '@angular/forms';\nimport { FocusKeyManager } from '@ptsecurity/cdk/a11y';\nimport { BACKSPACE, END, HOME } from '@ptsecurity/cdk/keycodes';\nimport {\n CanUpdateErrorState,\n CanUpdateErrorStateCtor,\n ErrorStateMatcher,\n MC_VALIDATION,\n McValidationOptions,\n mixinErrorState,\n setMosaicValidation\n} from '@ptsecurity/mosaic/core';\nimport { McCleaner, McFormFieldControl } from '@ptsecurity/mosaic/form-field';\nimport { merge, Observable, Subject, Subscription } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\n\nimport { McTagTextControl } from './tag-text-control';\nimport { McTag, McTagEvent, McTagSelectionChange } from './tag.component';\n\n\nexport class McTagListBase {\n constructor(\n public defaultErrorStateMatcher: ErrorStateMatcher,\n public parentForm: NgForm,\n public parentFormGroup: FormGroupDirective,\n public ngControl: NgControl\n ) {}\n}\n\n// tslint:disable-next-line:naming-convention\nexport const McTagListMixinBase: CanUpdateErrorStateCtor & typeof McTagListBase = mixinErrorState(McTagListBase);\n\n\n// Increasing integer for generating unique ids for tag-list components.\nlet nextUniqueId = 0;\n\n/** Change event object that is emitted when the tag list value has changed. */\nexport class McTagListChange {\n constructor(public source: McTagList, public value: any) {}\n}\n\n\n@Component({\n selector: 'mc-tag-list',\n exportAs: 'mcTagList',\n templateUrl: 'tag-list.partial.html',\n styleUrls: ['tag-list.scss'],\n host: {\n class: 'mc-tag-list',\n '[class.mc-disabled]': 'disabled',\n '[class.mc-invalid]': 'errorState',\n\n '[attr.tabindex]': 'disabled ? null : tabIndex',\n '[id]': 'uid',\n\n '(focus)': 'focus()',\n '(blur)': 'blur()',\n '(keydown)': 'keydown($event)'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: McFormFieldControl, useExisting: McTagList }]\n})\nexport class McTagList extends McTagListMixinBase implements McFormFieldControl<any>,\n ControlValueAccessor, AfterContentInit, DoCheck, OnInit, OnDestroy, CanUpdateErrorState {\n\n readonly controlType: string = 'tag-list';\n\n /** Combined stream of all of the child tags' selection change events. */\n get tagSelectionChanges(): Observable<McTagSelectionChange> {\n return merge(...this.tags.map((tag) => tag.selectionChange));\n }\n\n /** Combined stream of all of the child tags' focus change events. */\n get tagFocusChanges(): Observable<McTagEvent> {\n return merge(...this.tags.map((tag) => tag.onFocus));\n }\n\n /** Combined stream of all of the child tags' blur change events. */\n get tagBlurChanges(): Observable<McTagEvent> {\n return merge(...this.tags.map((tag) => tag.onBlur));\n }\n\n /** Combined stream of all of the child tags' remove change events. */\n get tagRemoveChanges(): Observable<McTagEvent> {\n return merge(...this.tags.map((tag) => tag.destroyed));\n }\n\n /** The array of selected tags inside tag list. */\n get selected(): McTag[] | McTag {\n return this.multiple ? this.selectionModel.selected : this.selectionModel.selected[0];\n }\n\n get canShowCleaner(): boolean {\n return this.cleaner && this.tags.length > 0;\n }\n\n /** Whether the user should be allowed to select multiple tags. */\n @Input()\n get multiple(): boolean {\n return this._multiple;\n }\n\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n\n /**\n * A function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n */\n @Input()\n get compareWith(): (o1: any, o2: any) => boolean {\n return this._compareWith;\n }\n\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n this._compareWith = fn;\n\n if (this.selectionModel) {\n // A different comparator means the selection could change.\n this.initializeSelection();\n }\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get value(): any {\n return this._value;\n }\n\n set value(value: any) {\n this.writeValue(value);\n this._value = value;\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n get id(): string {\n return this.tagInput ? this.tagInput.id : this.uid;\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n\n this.stateChanges.next();\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get placeholder(): string {\n return this.tagInput ? this.tagInput.placeholder : this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n\n /** Whether any tags or the mcTagInput inside of this tag-list has focus. */\n get focused(): boolean {\n return (this.tagInput && this.tagInput.focused) || this.hasFocusedTag();\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n get empty(): boolean {\n return (!this.tagInput || this.tagInput.empty) && this.tags.length === 0;\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat(): boolean {\n return !this.empty || this.focused;\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get disabled(): boolean {\n return this.ngControl ? !!this.ngControl.disabled : this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this.syncTagsDisabledState();\n }\n\n /**\n * Whether or not this tag list is selectable. When a tag list is not selectable,\n * the selected states for all the tags inside the tag list are always ignored.\n */\n @Input()\n get selectable(): boolean {\n return this._selectable;\n }\n\n set selectable(value: boolean) {\n this._selectable = coerceBooleanProperty(value);\n\n if (this.tags) {\n this.tags.forEach((tag) => tag.tagListSelectable = this._selectable);\n }\n }\n\n @Input()\n get tabIndex(): number {\n return this._tabIndex;\n }\n\n set tabIndex(value: number) {\n this.userTabIndex = value;\n this._tabIndex = value;\n }\n\n private _tabIndex = 0;\n\n /**\n * Event that emits whenever the raw value of the tag-list changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n uid: string = `mc-tag-list-${nextUniqueId++}`;\n\n /**\n * User defined tab index.\n * When it is not null, use user defined tab index. Otherwise use tabIndex\n */\n userTabIndex: number | null = null;\n\n keyManager: FocusKeyManager<McTag>;\n\n selectionModel: SelectionModel<McTag>;\n\n tagChanges = new EventEmitter<any>();\n\n /** An object used to control when error messages are shown. */\n @Input() errorStateMatcher: ErrorStateMatcher;\n\n /** Orientation of the tag list. */\n @Input('orientation') orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /** Event emitted when the selected tag list value has been changed by the user. */\n @Output() readonly change: EventEmitter<McTagListChange> = new EventEmitter<McTagListChange>();\n\n @ContentChild('mcTagListCleaner', { static: true }) cleaner: McCleaner;\n\n /** The tag components contained within this tag list. */\n @ContentChildren(McTag, {\n // Need to use `descendants: true`,\n // Ivy will no longer match indirect descendants if it's left as false.\n descendants: true\n }) tags: QueryList<McTag>;\n\n private _value: any;\n\n private _required: boolean = false;\n\n private _placeholder: string;\n\n private _disabled: boolean = false;\n\n private _selectable: boolean = true;\n\n /** The tag input to add more tags */\n private tagInput: McTagTextControl;\n\n private _multiple: boolean = false;\n\n /**\n * When a tag is destroyed, we store the index of the destroyed tag until the tags\n * query list notifies about the update. This is necessary because we cannot determine an\n * appropriate tag that should receive focus until the array of tags updated completely.\n */\n private lastDestroyedTagIndex: number | null = null;\n\n /** Subject that emits when the component has been destroyed. */\n private destroyed = new Subject<void>();\n\n /** Subscription to focus changes in the tags. */\n private tagFocusSubscription: Subscription | null;\n\n /** Subscription to blur changes in the tags. */\n private tagBlurSubscription: Subscription | null;\n\n /** Subscription to selection changes in tags. */\n private tagSelectionSubscription: Subscription | null;\n\n /** Subscription to remove changes in tags. */\n private tagRemoveSubscription: Subscription | null;\n\n constructor(\n protected elementRef: ElementRef<HTMLElement>,\n private changeDetectorRef: ChangeDetectorRef,\n defaultErrorStateMatcher: ErrorStateMatcher,\n @Optional() @Inject(NG_VALIDATORS) public rawValidators: Validator[],\n @Optional() @Inject(MC_VALIDATION) private mcValidation: McValidationOptions,\n @Optional() private dir: Directionality,\n @Optional() parentForm: NgForm,\n @Optional() parentFormGroup: FormGroupDirective,\n @Optional() @Self() ngControl: NgControl,\n @Optional() @Self() public ngModel: NgModel,\n @Optional() @Self() public formControlName: FormControlName\n ) {\n super(defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);\n\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n ngAfterContentInit() {\n if (this.mcValidation.useValidation) {\n setMosaicValidation(this);\n }\n\n this.keyManager = new FocusKeyManager<McTag>(this.tags)\n .withVerticalOrientation()\n .withHorizontalOrientation(this.dir ? this.dir.value : 'ltr');\n\n if (this.dir) {\n this.dir.change\n .pipe(takeUntil(this.destroyed))\n .subscribe((dir) => this.keyManager.withHorizontalOrientation(dir));\n }\n\n // Prevents the tag list from capturing focus and redirecting\n // it back to the first tag when the user tabs out.\n this.keyManager.tabOut\n .pipe(takeUntil(this.destroyed))\n .subscribe(() => {\n this._tabIndex = -1;\n\n setTimeout(() => {\n this._tabIndex = this.userTabIndex || 0;\n this.changeDetectorRef.markForCheck();\n });\n });\n\n // When the list changes, re-subscribe\n this.tags.changes\n .pipe(startWith(null), takeUntil(this.destroyed))\n .subscribe(() => {\n if (this.disabled) {\n // Since this happens after the content has been\n // checked, we need to defer it to the next tick.\n Promise.resolve().then(() => { this.syncTagsDisabledState(); });\n }\n\n this.resetTags();\n\n // Reset tags selected/deselected status\n this.initializeSelection();\n\n // Check to see if we need to update our tab index\n this.updateTabIndex();\n\n // Check to see if we have a destroyed tag and need to refocus\n this.updateFocusForDestroyedTags();\n\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n this.tagChanges.emit(this.tags.toArray());\n this.stateChanges.next();\n this.propagateTagsChanges();\n });\n });\n }\n\n ngOnInit() {\n this.selectionModel = new SelectionModel<McTag>(this.multiple, undefined, false);\n this.stateChanges.next();\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n }\n\n ngOnDestroy() {\n this.destroyed.next();\n this.destroyed.complete();\n this.stateChanges.complete();\n\n this.dropSubscriptions();\n }\n\n // tslint:disable-next-line:no-empty\n onTouched = () => {};\n\n // tslint:disable-next-line:no-empty\n onChange: (value: any) => void = () => {};\n\n /** Associates an HTML input element with this tag list. */\n registerInput(inputElement: McTagTextControl): void {\n this.tagInput = inputElement;\n\n // todo need rethink about it\n if (this.ngControl && inputElement.ngControl?.statusChanges) {\n inputElement.ngControl.statusChanges\n .subscribe(() => this.ngControl.control!.setErrors(inputElement.ngControl!.errors));\n }\n }\n\n // Implemented as part of ControlValueAccessor.\n writeValue(value: any): void {\n if (this.tags) {\n this.setSelectionByValue(value, false);\n }\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.stateChanges.next();\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n onContainerClick(event: MouseEvent) {\n if (!this.originatesFromTag(event)) {\n this.focus();\n }\n }\n\n /**\n * Focuses the first non-disabled tag in this tag list, or the associated input when there\n * are no eligible tags.\n */\n focus(): void {\n if (this.disabled) { return; }\n\n // TODO: ARIA says this should focus the first `selected` tag if any are selected.\n // Focus on first element if there's no tagInput inside tag-list\n if (this.tagInput && this.tagInput.focused) {\n // do nothing\n } else if (this.tags.length > 0) {\n this.keyManager.setFirstItemActive();\n this.stateChanges.next();\n } else {\n this.focusInput();\n this.stateChanges.next();\n }\n }\n\n /** Attempt to focus an input if we have one. */\n focusInput() {\n if (this.tagInput) {\n this.tagInput.focus();\n }\n }\n\n /**\n * Pass events to the keyboard manager. Available here for tests.\n */\n keydown(event: KeyboardEvent) {\n const target = event.target as HTMLElement;\n\n // If they are on an empty input and hit backspace, focus the last tag\n // tslint:disable-next-line: deprecation\n if (event.keyCode === BACKSPACE && this.isInputEmpty(target)) {\n this.keyManager.setLastItemActive();\n event.preventDefault();\n } else if (target && target.classList.contains('mc-tag')) {\n // tslint:disable-next-line: deprecation\n if (event.keyCode === HOME) {\n this.keyManager.setFirstItemActive();\n event.preventDefault();\n // tslint:disable-next-line: deprecation\n } else if (event.keyCode === END) {\n this.keyManager.setLastItemActive();\n event.preventDefault();\n } else {\n this.keyManager.onKeydown(event);\n }\n\n this.stateChanges.next();\n }\n }\n\n setSelectionByValue(value: any, isUserInput: boolean = true) {\n this.clearSelection();\n this.tags.forEach((tag) => tag.deselect());\n\n if (Array.isArray(value)) {\n value.forEach((currentValue) => this.selectValue(currentValue, isUserInput));\n this.sortValues();\n } else {\n const correspondingTag = this.selectValue(value, isUserInput);\n\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what tag the user interacted with last.\n if (correspondingTag && isUserInput) {\n this.keyManager.setActiveItem(correspondingTag);\n }\n }\n }\n\n /** When blurred, mark the field as touched when focus moved outside the tag list. */\n blur() {\n if (!this.hasFocusedTag()) {\n this.keyManager.setActiveItem(-1);\n }\n\n if (!this.disabled) {\n if (this.tagInput) {\n // If there's a tag input, we should check whether the focus moved to tag input.\n // If the focus is not moved to tag input, mark the field as touched. If the focus moved\n // to tag input, do nothing.\n // Timeout is needed to wait for the focus() event trigger on tag input.\n setTimeout(() => {\n if (!this.focused) {\n this.markAsTouched();\n }\n });\n } else {\n // If there's no tag input, then mark the field as touched.\n this.markAsTouched();\n }\n }\n }\n\n /** Mark the field as touched */\n markAsTouched() {\n this.onTouched();\n this.changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n /**\n * Check the tab index as you should not be allowed to focus an empty list.\n */\n protected updateTabIndex(): void {\n // If we have 0 tags, we should not allow keyboard focus\n this._tabIndex = this.userTabIndex || (this.tags.length === 0 ? -1 : 0);\n }\n\n /**\n * If the amount of tags changed, we need to update the\n * key manager state and focus the next closest tag.\n */\n protected updateFocusForDestroyedTags() {\n if (this.lastDestroyedTagIndex != null) {\n if (this.tags.length) {\n const newTagIndex = Math.min(this.lastDestroyedTagIndex, this.tags.length - 1);\n this.keyManager.setActiveItem(newTagIndex);\n } else {\n this.focusInput();\n }\n }\n\n this.lastDestroyedTagIndex = null;\n }\n\n private _compareWith = (o1: any, o2: any) => o1 === o2;\n\n /**\n * Utility to ensure all indexes are valid.\n *\n * @param index The index to be checked.\n * @returns True if the index is valid for our list of tags.\n */\n private isValidIndex(index: number): boolean {\n return index >= 0 && index < this.tags.length;\n }\n\n private isInputEmpty(element: HTMLElement): boolean {\n if (element && element.nodeName.toLowerCase() === 'input') {\n const input = element as HTMLInputElement;\n\n return !input.value;\n }\n\n return false;\n }\n\n /**\n * Finds and selects the tag based on its value.\n * @returns Tag that has the corresponding value.\n */\n private selectValue(value: any, isUserInput: boolean = true): McTag | undefined {\n\n const correspondingTag = this.tags.find((tag) => {\n return tag.value != null && this._compareWith(tag.value, value);\n });\n\n if (correspondingTag) {\n if (isUserInput) {\n correspondingTag.selectViaInteraction();\n } else {\n correspondingTag.select();\n }\n\n this.selectionModel.select(correspondingTag);\n }\n\n return correspondingTag;\n }\n\n private initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n if (this.ngControl || this._value) {\n this.setSelectionByValue(this.ngControl ? this.ngControl.value : this._value, false);\n this.stateChanges.next();\n }\n });\n }\n\n /**\n * Deselects every tag in the list.\n * @param skip Tag that should not be deselected.\n */\n private clearSelection(skip?: McTag): void {\n this.selectionModel.clear();\n this.tags.forEach((tag) => {\n if (tag !== skip) {\n tag.deselect();\n }\n });\n this.stateChanges.next();\n }\n\n /**\n * Sorts the model values, ensuring that they keep the same\n * order that they have in the panel.\n */\n private sortValues(): void {\n if (this._multiple) {\n this.selectionModel.clear();\n\n this.tags.forEach((tag) => {\n if (tag.selected) {\n this.selectionModel.select(tag);\n }\n });\n this.stateChanges.next();\n }\n }\n\n /** Emits change event to set the model value. */\n // todo need rethink this method and selection logic\n private propagateChanges(fallbackValue?: any): void {\n let valueToEmit: any = null;\n\n if (Array.isArray(this.selected)) {\n valueToEmit = this.selected.map((tag) => tag.value);\n } else {\n valueToEmit = this.selected ? this.selected.value : fallbackValue;\n }\n this._value = valueToEmit;\n this.change.emit(new McTagListChange(this, valueToEmit));\n this.valueChange.emit(valueToEmit);\n this.onChange(valueToEmit);\n this.changeDetectorRef.markForCheck();\n }\n\n private propagateTagsChanges(): void {\n const valueToEmit: any = this.tags.map((tag) => tag.value);\n\n this._value = valueToEmit;\n this.change.emit(new McTagListChange(this, valueToEmit));\n this.valueChange.emit(valueToEmit);\n this.onChange(valueToEmit);\n this.changeDetectorRef.markForCheck();\n }\n\n private resetTags() {\n this.dropSubscriptions();\n this.listenToTagsFocus();\n this.listenToTagsSelection();\n this.listenToTagsRemoved();\n }\n\n private dropSubscriptions() {\n if (this.tagFocusSubscription) {\n this.tagFocusSubscription.unsubscribe();\n this.tagFocusSubscription = null;\n }\n\n if (this.tagBlurSubscription) {\n this.tagBlurSubscription.unsubscribe();\n this.tagBlurSubscription = null;\n }\n\n if (this.tagSelectionSubscription) {\n this.tagSelectionSubscription.unsubscribe();\n this.tagSelectionSubscription = null;\n }\n\n if (this.tagRemoveSubscription) {\n this.tagRemoveSubscription.unsubscribe();\n this.tagRemoveSubscription = null;\n }\n }\n\n /** Listens to user-generated selection events on each tag. */\n private listenToTagsSelection(): void {\n this.tagSelectionSubscription = this.tagSelectionChanges.subscribe((event) => {\n if (event.source.selected) {\n this.selectionModel.select(event.source);\n } else {\n this.selectionModel.deselect(event.source);\n }\n\n // For single selection tag list, make sure the deselected value is unselected.\n if (!this.multiple) {\n this.tags.forEach((tag) => {\n if (!this.selectionModel.isSelected(tag) && tag.selected) {\n tag.deselect();\n }\n });\n }\n\n if (event.isUserInput) {\n this.propagateChanges();\n }\n });\n }\n\n /** Listens to user-generated selection events on each tag. */\n private listenToTagsFocus(): void {\n this.tagFocusSubscription = this.tagFocusChanges\n .subscribe((event) => {\n const tagIndex: number = this.tags.toArray().indexOf(event.tag);\n\n if (this.isValidIndex(tagIndex)) {\n this.keyManager.updateActiveItem(tagIndex);\n }\n\n this.stateChanges.next();\n });\n\n this.tagBlurSubscription = this.tagBlurChanges\n .subscribe(() => {\n this.blur();\n this.stateChanges.next();\n });\n }\n\n private listenToTagsRemoved(): void {\n this.tagRemoveSubscription = this.tagRemoveChanges\n .subscribe((event) => {\n const tag = event.tag;\n const tagIndex = this.tags.toArray().indexOf(event.tag);\n\n // In case the tag that will be removed is currently focused, we temporarily store\n // the index in order to be able to determine an appropriate sibling tag that will\n // receive focus.\n if (this.isValidIndex(tagIndex) && tag.hasFocus) {\n this.lastDestroyedTagIndex = tagIndex;\n }\n });\n }\n\n /** Checks whether an event comes from inside a tag element. */\n private originatesFromTag(event: Event): boolean {\n let currentElement = event.target as HTMLElement | null;\n\n while (currentElement && currentElement !== this.elementRef.nativeElement) {\n if (currentElement.classList.contains('mc-tag')) { return true; }\n\n currentElement = currentElement.parentElement;\n }\n\n return false;\n }\n\n /** Checks whether any of the tags is focused. */\n private hasFocusedTag() {\n return this.tags.some((tag) => tag.hasFocus);\n }\n\n /** Syncs the list's disabled state with the individual tags. */\n private syncTagsDisabledState() {\n if (this.tags) {\n this.tags.forEach((tag) => {\n tag.disabled = this._disabled;\n });\n }\n }\n}\n\n","<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","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n Directive,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n Optional,\n Output,\n Renderer2,\n Self\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { hasModifierKey, ENTER, TAB, SPACE, COMMA } from '@ptsecurity/cdk/keycodes';\n\nimport { MC_TAGS_DEFAULT_OPTIONS, McTagsDefaultOptions } from './tag-default-options';\nimport { McTagList } from './tag-list.component';\nimport { McTagTextControl } from './tag-text-control';\n\n\n/** Represents an input event on a `mcTagInput`. */\n// tslint:disable-next-line: naming-convention\nexport interface McTagInputEvent {\n /** The native `<input>` element that the event is being fired for. */\n input: HTMLInputElement;\n\n /** The value of the input. */\n value: string;\n}\n\n// Increasing integer for generating unique ids.\nlet nextUniqueId = 0;\n\n/**\n * Directive that adds tag-specific behaviors to an input element inside `<mc-form-field>`.\n * May be placed inside or outside of an `<mc-tag-list>`.\n */\n@Directive({\n selector: 'input[mcTagInputFor]',\n exportAs: 'mcTagInput, mcTagInputFor',\n host: {\n class: 'mc-tag-input',\n\n '[id]': 'id',\n '[attr.disabled]': 'disabled || null',\n '[attr.placeholder]': 'placeholder || null',\n\n '(keydown)': 'onKeydown($event)',\n '(blur)': 'blur()',\n '(focus)': 'onFocus()',\n '(input)': 'onInput()',\n '(paste)': 'onPaste($event)'\n }\n})\nexport class McTagInput implements McTagTextControl, OnChanges {\n /** Whether the control is focused. */\n focused: boolean = false;\n\n /**\n * The list of key codes that will trigger a tagEnd event.\n *\n * Defaults to `[ENTER]`.\n */\n @Input('mcTagInputSeparatorKeyCodes')\n separatorKeyCodes: number[] = this.defaultOptions.separatorKeyCodes;\n\n /** Emitted when a tag is to be added. */\n @Output('mcTagInputTokenEnd')\n tagEnd: EventEmitter<McTagInputEvent> = new EventEmitter<McTagInputEvent>();\n\n /** The input's placeholder text. */\n @Input() placeholder: string = '';\n\n /** Unique id for the input. */\n @Input() id: string = `mc-tag-list-input-${nextUniqueId++}`;\n\n /** Register input for tag list */\n @Input('mcTagInputFor')\n set tagList(value: McTagList) {\n if (value) {\n this._tagList = value;\n this._tagList.registerInput(this);\n }\n }\n\n // tslint:disable-next-line: naming-convention\n private _tagList: McTagList;\n\n /**\n * Whether or not the tagEnd event will be emitted when the input is blurred.\n */\n @Input('mcTagInputAddOnBlur')\n get addOnBlur(): boolean {\n return this._addOnBlur;\n }\n\n set addOnBlur(value: boolean) {\n this._addOnBlur = coerceBooleanProperty(value);\n }\n\n private _addOnBlur: boolean = true;\n\n /** Whether the input is disabled. */\n @Input()\n get disabled(): boolean {\n return this._disabled || (this._tagList && this._tagList.disabled);\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n private _disabled: boolean = false;\n\n /** Whether the input is empty. */\n get empty(): boolean {\n return !this.inputElement.value;\n }\n\n countOfSymbolsForUpdateWidth: number = 3;\n\n private oneSymbolWidth: number;\n\n /** The native input element to which this directive is attached. */\n private inputElement: HTMLInputElement;\n\n constructor(\n private elementRef: ElementRef<HTMLInputElement>,\n private renderer: Renderer2,\n @Inject(MC_TAGS_DEFAULT_OPTIONS) private defaultOptions: McTagsDefaultOptions,\n @Optional() @Self() public ngControl: NgControl\n ) {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n this.inputElement = this.elementRef.nativeElement as HTMLInputElement;\n\n this.setDefaultInputWidth();\n }\n\n ngOnChanges() {\n this._tagList.stateChanges.next();\n }\n\n onKeydown(event: KeyboardEvent) {\n if (!this.inputElement.value) {\n this._tagList.keydown(event);\n }\n\n if (this.isSeparatorKey(event)) {\n this.emitTagEnd();\n\n event.preventDefault();\n }\n }\n\n /** Checks to see if the blur should emit the (tagEnd) event. */\n blur() {\n this.focused = false;\n // Blur the tag list if it is not focused\n if (!this._tagList.focused) {\n this.triggerValidation();\n\n this._tagList.blur();\n }\n\n // tslint:disable-next-line: no-unnecessary-type-assertion\n if (this.addOnBlur) {\n this.emitTagEnd();\n }\n\n this._tagList.stateChanges.next();\n }\n\n triggerValidation() {\n if (!this.hasControl()) { return; }\n\n (this.ngControl.statusChanges as EventEmitter<string | null>).emit(this.ngControl.status);\n }\n\n /** Checks to see if the (tagEnd) event needs to be emitted. */\n emitTagEnd() {\n if (!this.hasControl() || (this.hasControl() && !this.ngControl.invalid)) {\n this.tagEnd.emit({ input: this.inputElement, value: this.inputElement.value });\n this.updateInputWidth();\n }\n }\n\n onInput() {\n this.updateInputWidth();\n // Let tag list know whenever the value changes.\n this._tagList.stateChanges.next();\n }\n\n onPaste($event: ClipboardEvent) {\n if (!$event.clipboardData) { return; }\n\n const data = $event.clipboardData.getData('text');\n\n if (data && data.length === 0) { return; }\n\n const items: string[] = [];\n\n for (const key of this.separatorKeyCodes) {\n const separator = this.separatorKeyToSymbol(key);\n\n if (data.search(separator) > -1) {\n items.push(...data.split(separator));\n\n break;\n }\n }\n\n if (items.length === 0) {\n items.push(data);\n }\n\n items.forEach((item) => this.tagEnd.emit({ input: this.inputElement, value: item }));\n\n this.updateInputWidth();\n\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n updateInputWidth(): void {\n const length = this.inputElement.value.length;\n\n this.renderer.setStyle(this.inputElement, 'max-width', 0);\n this.oneSymbolWidth = this.inputElement.scrollWidth / length;\n this.renderer.setStyle(this.inputElement, 'max-width', '');\n\n if (length > this.countOfSymbolsForUpdateWidth) {\n this.renderer.setStyle(this.inputElement, 'width', `${length * this.oneSymbolWidth}px`);\n } else {\n this.setDefaultInputWidth();\n }\n }\n\n onFocus() {\n this.focused = true;\n this._tagList.stateChanges.next();\n }\n\n /** Focuses the input. */\n focus(): void {\n this.inputElement.focus();\n }\n\n private separatorKeyToSymbol(k): RegExp | string {\n const sep = {\n [ENTER]: /\\r?\\n/,\n [TAB]: /\\t/,\n [SPACE]: / /,\n [COMMA]: /,/\n }[k];\n\n if (sep) { return sep; }\n\n return k;\n }\n\n private hasControl(): boolean {\n return !!this.ngControl;\n }\n\n private setDefaultInputWidth() {\n this.renderer.setStyle(this.inputElement, 'width', '30px');\n }\n\n /** Checks whether a keycode is one of the configured separators. */\n private isSeparatorKey(event: KeyboardEvent) {\n if (hasModifierKey(event)) { return false; }\n\n // tslint:disable-next-line: deprecation\n return this.separatorKeyCodes.indexOf(event.keyCode) > -1;\n }\n}\n","import { PlatformModule } from '@angular/cdk/platform';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ENTER } from '@ptsecurity/cdk/keycodes';\n\nimport { MC_TAGS_DEFAULT_OPTIONS, McTagsDefaultOptions } from './tag-default-options';\nimport { McTagInput } from './tag-input';\nimport { McTagList } from './tag-list.component';\nimport { McTag, McTagAvatar, McTagRemove, McTagTrailingIcon } from './tag.component';\n\n\n@NgModule({\n imports: [CommonModule, PlatformModule],\n exports: [\n McTagList,\n McTag,\n McTagInput,\n McTagTrailingIcon,\n McTagAvatar,\n McTagRemove\n ],\n declarations: [\n McTagList,\n McTag,\n McTagInput,\n McTagTrailingIcon,\n McTagAvatar,\n McTagRemove\n ],\n providers: [{\n provide: MC_TAGS_DEFAULT_OPTIONS,\n // tslint:disable-next-line: no-object-literal-type-assertion\n useValue: { separatorKeyCodes: [ENTER] } as McTagsDefaultOptions\n }]\n})\nexport class McTagsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["nextUniqueId"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ptsecurity-mosaic-textarea.js","sources":["../../../packages/mosaic/textarea/textarea.component.ts","../../../packages/mosaic/textarea/textarea.module.ts","../../../packages/mosaic/textarea/ptsecurity-mosaic-textarea.ts"],"sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n Directive, DoCheck, ElementRef, Inject,\n Input, OnChanges, OnDestroy, Optional,\n Self, InjectionToken, NgZone, OnInit,\n AfterContentInit\n} from '@angular/core';\nimport { FormGroupDirective, NG_VALIDATORS, NgControl, NgForm, NgModel, Validator } from '@angular/forms';\nimport {\n CanUpdateErrorState,\n CanUpdateErrorStateCtor,\n ErrorStateMatcher,\n MC_VALIDATION,\n McValidationOptions,\n setMosaicValidation,\n mixinErrorState\n} from '@ptsecurity/mosaic/core';\nimport { McFormFieldControl } from '@ptsecurity/mosaic/form-field';\nimport { fromEvent, Subscription, Subject } from 'rxjs';\n\n\nexport const MC_TEXTAREA_VALUE_ACCESSOR = new InjectionToken<{ value: any }>('MC_TEXTAREA_VALUE_ACCESSOR');\n\nlet nextUniqueId = 0;\n\n\nexport class McTextareaBase {\n constructor(\n public defaultErrorStateMatcher: ErrorStateMatcher,\n public parentForm: NgForm,\n public parentFormGroup: FormGroupDirective,\n public ngControl: NgControl\n ) {}\n}\n\n// tslint:disable-next-line:naming-convention\nexport const McTextareaMixinBase: CanUpdateErrorStateCtor & typeof McTextareaBase = mixinErrorState(McTextareaBase);\n\n@Directive({\n selector: 'textarea[mcTextarea]',\n exportAs: 'mcTextarea',\n host: {\n class: 'mc-textarea',\n '[class.mc-textarea-resizable]': '!canGrow',\n\n '[attr.id]': 'id',\n '[attr.placeholder]': 'placeholder',\n '[attr.aria-invalid]': 'errorState',\n '[attr.disabled]': 'disabled || null',\n '[attr.required]': 'required',\n\n '(blur)': 'focusChanged(false)',\n '(focus)': 'focusChanged(true)'\n },\n providers: [{ provide: McFormFieldControl, useExisting: McTextarea }]\n})\nexport class McTextarea extends McTextareaMixinBase implements McFormFieldControl<any>, OnInit, OnChanges,\n OnDestroy, DoCheck, CanUpdateErrorState, AfterContentInit {\n\n @Input() canGrow: boolean = true;\n\n /** An object used to control when error messages are shown. */\n @Input() errorStateMatcher: ErrorStateMatcher;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n focused: boolean = false;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n readonly stateChanges: Subject<void> = new Subject<void>();\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n controlType: string = 'textarea';\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled !== null) {\n return this.ngControl.disabled;\n }\n\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value || this.uid;\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input() placeholder: string;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get value(): string {\n return this.valueAccessor.value;\n }\n\n set value(value: string) {\n if (value !== this.value) {\n this.valueAccessor.value = value;\n this.stateChanges.next();\n }\n }\n\n protected uid = `mc-textsrea-${nextUniqueId++}`;\n protected previousNativeValue: any;\n private _disabled = false;\n private _id: string;\n private _required = false;\n\n private valueAccessor: { value: any };\n private growSubscription: Subscription;\n\n private lineHeight: number = 0;\n private freeRowsHeight: number = 0;\n private minHeight: number = 0;\n\n constructor(\n protected elementRef: ElementRef,\n @Optional() @Self() public ngControl: NgControl,\n @Optional() parentForm: NgForm,\n @Optional() @Self() @Inject(NG_VALIDATORS) public rawValidators: Validator[],\n @Optional() @Inject(MC_VALIDATION) private mcValidation: McValidationOptions,\n @Optional() @Self() public ngModel: NgModel,\n @Optional() parentFormGroup: FormGroupDirective,\n defaultErrorStateMatcher: ErrorStateMatcher,\n @Optional() @Self() @Inject(MC_TEXTAREA_VALUE_ACCESSOR) inputValueAccessor: any,\n private ngZone: NgZone\n ) {\n super(defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);\n // If no input value accessor was explicitly specified, use the element as the textarea value\n // accessor.\n this.valueAccessor = inputValueAccessor || this.elementRef.nativeElement;\n\n this.previousNativeValue = this.value;\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n\n const growObserver = fromEvent(elementRef.nativeElement, 'input');\n\n this.growSubscription = growObserver.subscribe(this.grow.bind(this));\n }\n\n ngOnInit() {\n setTimeout(() => this.grow(), 0);\n this.lineHeight = parseInt(getComputedStyle(this.elementRef.nativeElement).lineHeight!, 10);\n\n const paddingTop = parseInt(getComputedStyle(this.elementRef.nativeElement).paddingTop!, 10);\n const paddingBottom = parseInt(getComputedStyle(this.elementRef.nativeElement).paddingBottom!, 10);\n\n // tslint:disable-next-line:no-magic-numbers\n this.minHeight = this.lineHeight * 2 + paddingTop + paddingBottom;\n this.freeRowsHeight = this.lineHeight;\n }\n\n ngOnChanges() {\n this.stateChanges.next();\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this.growSubscription.unsubscribe();\n }\n\n ngAfterContentInit(): void {\n if (!this.ngControl) { return; }\n\n if (this.mcValidation.useValidation) {\n setMosaicValidation(this);\n }\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n\n // We need to dirty-check the native element's value, because there are some cases where\n // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n // updating the value using `emitEvent: false`).\n this.dirtyCheckNativeValue();\n }\n\n /** Grow textarea height to avoid vertical scroll */\n grow() {\n if (!this.canGrow) {\n return;\n }\n\n this.ngZone.runOutsideAngular(() => {\n const textarea = this.elementRef.nativeElement;\n\n const outerHeight = parseInt(window.getComputedStyle(textarea).height!, 10);\n const diff = outerHeight - textarea.clientHeight;\n\n textarea.style.minHeight = 0; // this line is important to height recalculation\n\n const height = Math.max(this.minHeight, +textarea.scrollHeight + diff + this.freeRowsHeight);\n textarea.style.minHeight = `${height}px`;\n });\n }\n\n /** Focuses the textarea. */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n /** Callback for the cases where the focused state of the textarea changes. */\n focusChanged(isFocused: boolean) {\n if (isFocused !== this.focused) {\n this.focused = isFocused;\n this.stateChanges.next();\n }\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n get empty(): boolean {\n return !this.elementRef.nativeElement.value && !this.isBadInput();\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n }\n\n /** Does some manual dirty checking on the native textarea `value` property. */\n protected dirtyCheckNativeValue() {\n const newValue = this.value;\n\n if (this.previousNativeValue !== newValue) {\n this.previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n\n /** Checks whether the textarea is invalid based on the native validation. */\n protected isBadInput(): boolean {\n // The `validity` property won't be present on platform-server.\n const validity = (this.elementRef.nativeElement as HTMLTextAreaElement).validity;\n\n return validity && validity.badInput;\n }\n\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { McCommonModule } from '@ptsecurity/mosaic/core';\n\nimport { McTextarea } from './textarea.component';\n\n\n@NgModule({\n imports: [CommonModule, A11yModule, McCommonModule, FormsModule],\n exports: [McTextarea],\n declarations: [McTextarea]\n})\nexport class McTextareaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}