@ng-matero/extensions 12.7.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 (537) hide show
  1. package/README.md +2 -16
  2. package/_all-color.scss +1 -1
  3. package/_index.scss +1 -1
  4. package/_theming.scss +1 -1
  5. package/alert/_alert-theme.scss +2 -2
  6. package/alert/alert.component.d.ts +3 -0
  7. package/alert/alert.module.d.ts +6 -0
  8. package/alert/mtxAlert.d.ts +1 -0
  9. package/alert/package.json +5 -6
  10. package/button/button-loading.directive.d.ts +3 -0
  11. package/button/button.module.d.ts +8 -0
  12. package/button/mtxButton.d.ts +1 -0
  13. package/button/package.json +5 -6
  14. package/checkbox-group/checkbox-group.component.d.ts +3 -0
  15. package/checkbox-group/checkbox-group.module.d.ts +9 -0
  16. package/checkbox-group/mtxCheckboxGroup.d.ts +1 -0
  17. package/checkbox-group/package.json +5 -6
  18. package/colorpicker/_colorpicker-theme.scss +2 -2
  19. package/colorpicker/colorpicker-input.d.ts +3 -0
  20. package/colorpicker/colorpicker-module.d.ts +13 -0
  21. package/colorpicker/colorpicker-toggle.d.ts +5 -0
  22. package/colorpicker/colorpicker.d.ts +6 -1
  23. package/colorpicker/mtxColorpicker.d.ts +1 -0
  24. package/colorpicker/package.json +5 -6
  25. package/column-resize/column-resize-directives/column-resize-flex.d.ts +3 -0
  26. package/column-resize/column-resize-directives/column-resize.d.ts +3 -0
  27. package/column-resize/column-resize-module.d.ts +6 -7
  28. package/column-resize/column-resize-notifier.d.ts +5 -7
  29. package/column-resize/column-resize.d.ts +3 -0
  30. package/column-resize/column-size-store.d.ts +3 -7
  31. package/column-resize/event-dispatcher.d.ts +3 -0
  32. package/column-resize/mtxColumnResize.d.ts +1 -0
  33. package/column-resize/overlay-handle.d.ts +3 -0
  34. package/column-resize/package.json +5 -6
  35. package/column-resize/resizable.d.ts +3 -0
  36. package/column-resize/resize-strategy.d.ts +7 -0
  37. package/core/datetime/datetime.module.d.ts +8 -0
  38. package/core/datetime/native-datetime-adapter.d.ts +3 -0
  39. package/core/density/private/_compatibility.scss +74 -0
  40. package/core/mtxCore.d.ts +1 -0
  41. package/core/package.json +5 -6
  42. package/{pipes/public-api.d.ts → core/pipes/index.d.ts} +0 -0
  43. package/core/pipes/pipes.module.d.ts +8 -0
  44. package/{pipes → core/pipes}/to-observable.pipe.d.ts +3 -0
  45. package/core/public-api.d.ts +1 -0
  46. package/core/style/_elevation.scss +197 -0
  47. package/core/style/_private.scss +41 -0
  48. package/core/style/_variables.scss +44 -0
  49. package/core/style/_vendor-prefixes.scss +60 -0
  50. package/core/theming/_palette.scss +746 -0
  51. package/core/theming/_theming.scss +430 -0
  52. package/core/typography/_typography-utils.scss +101 -0
  53. package/core/typography/_typography.scss +273 -0
  54. package/datetimepicker/_datetimepicker-theme.scss +5 -5
  55. package/datetimepicker/calendar-body.d.ts +3 -0
  56. package/datetimepicker/calendar-body.scss +5 -4
  57. package/datetimepicker/calendar.d.ts +4 -1
  58. package/datetimepicker/clock.d.ts +3 -0
  59. package/datetimepicker/datetimepicker-input.d.ts +3 -0
  60. package/datetimepicker/datetimepicker-module.d.ts +18 -0
  61. package/datetimepicker/datetimepicker-toggle.d.ts +5 -0
  62. package/datetimepicker/datetimepicker-types.d.ts +1 -0
  63. package/datetimepicker/datetimepicker.d.ts +7 -2
  64. package/datetimepicker/month-view.d.ts +4 -1
  65. package/datetimepicker/mtxDatetimepicker.d.ts +1 -0
  66. package/datetimepicker/multi-year-view.d.ts +4 -1
  67. package/datetimepicker/package.json +5 -6
  68. package/datetimepicker/public-api.d.ts +1 -0
  69. package/datetimepicker/year-view.d.ts +4 -1
  70. package/dialog/dialog.component.d.ts +3 -0
  71. package/dialog/dialog.d.ts +3 -0
  72. package/dialog/dialog.module.d.ts +10 -0
  73. package/dialog/mtxDialog.d.ts +1 -0
  74. package/dialog/package.json +5 -6
  75. package/esm2020/alert/alert.component.mjs +52 -0
  76. package/esm2020/alert/alert.module.mjs +18 -0
  77. package/{esm2015/alert/mtxAlert.js → esm2020/alert/mtxAlert.mjs} +0 -0
  78. package/{esm2015/alert/public-api.js → esm2020/alert/public-api.mjs} +0 -0
  79. package/esm2020/button/button-loading.directive.mjs +79 -0
  80. package/esm2020/button/button.module.mjs +20 -0
  81. package/{esm2015/button/mtxButton.js → esm2020/button/mtxButton.mjs} +0 -0
  82. package/{esm2015/button/public-api.js → esm2020/button/public-api.mjs} +0 -0
  83. package/esm2020/checkbox-group/checkbox-group.component.mjs +234 -0
  84. package/{esm2015/checkbox-group/checkbox-group.interface.js → esm2020/checkbox-group/checkbox-group.interface.mjs} +0 -0
  85. package/esm2020/checkbox-group/checkbox-group.module.mjs +21 -0
  86. package/{esm2015/checkbox-group/mtxCheckboxGroup.js → esm2020/checkbox-group/mtxCheckboxGroup.mjs} +0 -0
  87. package/{esm2015/checkbox-group/public-api.js → esm2020/checkbox-group/public-api.mjs} +0 -0
  88. package/{esm2015/colorpicker/colorpicker-animations.js → esm2020/colorpicker/colorpicker-animations.mjs} +0 -0
  89. package/esm2020/colorpicker/colorpicker-input.mjs +228 -0
  90. package/esm2020/colorpicker/colorpicker-module.mjs +65 -0
  91. package/esm2020/colorpicker/colorpicker-toggle.mjs +90 -0
  92. package/esm2020/colorpicker/colorpicker.mjs +363 -0
  93. package/{esm2015/colorpicker/mtxColorpicker.js → esm2020/colorpicker/mtxColorpicker.mjs} +0 -0
  94. package/{esm2015/colorpicker/public-api.js → esm2020/colorpicker/public-api.mjs} +0 -0
  95. package/esm2020/column-resize/column-resize-directives/column-resize-flex.mjs +45 -0
  96. package/esm2020/column-resize/column-resize-directives/column-resize.mjs +45 -0
  97. package/{esm2015/column-resize/column-resize-directives/constants.js → esm2020/column-resize/column-resize-directives/constants.mjs} +0 -0
  98. package/esm2020/column-resize/column-resize-module.mjs +28 -0
  99. package/esm2020/column-resize/column-resize-notifier.mjs +47 -0
  100. package/esm2020/column-resize/column-resize.mjs +82 -0
  101. package/esm2020/column-resize/column-size-store.mjs +20 -0
  102. package/esm2020/column-resize/event-dispatcher.mjs +67 -0
  103. package/{esm2015/column-resize/mtxColumnResize.js → esm2020/column-resize/mtxColumnResize.mjs} +0 -0
  104. package/esm2020/column-resize/overlay-handle.mjs +146 -0
  105. package/{esm2015/column-resize/polyfill.js → esm2020/column-resize/polyfill.mjs} +0 -0
  106. package/{esm2015/column-resize/public-api.js → esm2020/column-resize/public-api.mjs} +0 -0
  107. package/esm2020/column-resize/resizable.mjs +199 -0
  108. package/{esm2015/column-resize/resize-ref.js → esm2020/column-resize/resize-ref.mjs} +0 -0
  109. package/esm2020/column-resize/resize-strategy.mjs +232 -0
  110. package/{esm2015/column-resize/selectors.js → esm2020/column-resize/selectors.mjs} +0 -0
  111. package/{esm2015/core/datetime/datetime-adapter.js → esm2020/core/datetime/datetime-adapter.mjs} +0 -0
  112. package/{esm2015/core/datetime/datetime-formats.js → esm2020/core/datetime/datetime-formats.mjs} +0 -0
  113. package/esm2020/core/datetime/datetime.module.mjs +42 -0
  114. package/{esm2015/core/datetime/index.js → esm2020/core/datetime/index.mjs} +0 -0
  115. package/esm2020/core/datetime/native-datetime-adapter.mjs +138 -0
  116. package/{esm2015/core/datetime/native-datetime-formats.js → esm2020/core/datetime/native-datetime-formats.mjs} +0 -0
  117. package/{esm2015/core/mtxCore.js → esm2020/core/mtxCore.mjs} +0 -0
  118. package/esm2020/core/pipes/index.mjs +3 -0
  119. package/esm2020/core/pipes/pipes.module.mjs +18 -0
  120. package/esm2020/core/pipes/to-observable.pipe.mjs +15 -0
  121. package/{esm2015/core/public-api.js → esm2020/core/public-api.mjs} +2 -1
  122. package/esm2020/datetimepicker/calendar-body.mjs +78 -0
  123. package/esm2020/datetimepicker/calendar.mjs +618 -0
  124. package/esm2020/datetimepicker/clock.mjs +277 -0
  125. package/{esm2015/datetimepicker/datetimepicker-animations.js → esm2020/datetimepicker/datetimepicker-animations.mjs} +0 -0
  126. package/{esm2015/datetimepicker/datetimepicker-errors.js → esm2020/datetimepicker/datetimepicker-errors.mjs} +0 -0
  127. package/{esm2015/datetimepicker/datetimepicker-filtertype.js → esm2020/datetimepicker/datetimepicker-filtertype.mjs} +0 -0
  128. package/esm2020/datetimepicker/datetimepicker-input.mjs +344 -0
  129. package/esm2020/datetimepicker/datetimepicker-module.mjs +75 -0
  130. package/esm2020/datetimepicker/datetimepicker-toggle.mjs +94 -0
  131. package/esm2020/datetimepicker/datetimepicker-types.mjs +2 -0
  132. package/esm2020/datetimepicker/datetimepicker.mjs +492 -0
  133. package/esm2020/datetimepicker/month-view.mjs +148 -0
  134. package/{esm2015/datetimepicker/mtxDatetimepicker.js → esm2020/datetimepicker/mtxDatetimepicker.mjs} +0 -0
  135. package/esm2020/datetimepicker/multi-year-view.mjs +214 -0
  136. package/{esm2015/datetimepicker/public-api.js → esm2020/datetimepicker/public-api.mjs} +2 -1
  137. package/esm2020/datetimepicker/year-view.mjs +138 -0
  138. package/{esm2015/dialog/dialog-config.js → esm2020/dialog/dialog-config.mjs} +0 -0
  139. package/esm2020/dialog/dialog.component.mjs +33 -0
  140. package/esm2020/dialog/dialog.mjs +74 -0
  141. package/esm2020/dialog/dialog.module.mjs +24 -0
  142. package/{esm2015/dialog/mtxDialog.js → esm2020/dialog/mtxDialog.mjs} +0 -0
  143. package/{esm2015/dialog/public-api.js → esm2020/dialog/public-api.mjs} +0 -0
  144. package/esm2020/form-group/form-group.component.mjs +37 -0
  145. package/esm2020/form-group/form-group.module.mjs +18 -0
  146. package/{esm2015/form-group/mtxFormGroup.js → esm2020/form-group/mtxFormGroup.mjs} +0 -0
  147. package/{esm2015/form-group/public-api.js → esm2020/form-group/public-api.mjs} +0 -0
  148. package/esm2020/grid/cell.component.mjs +108 -0
  149. package/esm2020/grid/column-menu.component.mjs +95 -0
  150. package/esm2020/grid/column-resize/column-resize-directives/column-resize-flex.mjs +37 -0
  151. package/esm2020/grid/column-resize/column-resize-directives/column-resize.mjs +37 -0
  152. package/{esm2015/grid/column-resize/column-resize-directives/common.js → esm2020/grid/column-resize/column-resize-directives/common.mjs} +0 -0
  153. package/esm2020/grid/column-resize/column-resize-module.mjs +42 -0
  154. package/esm2020/grid/column-resize/overlay-handle.mjs +60 -0
  155. package/{esm2015/grid/column-resize/resizable-directives/common.js → esm2020/grid/column-resize/resizable-directives/common.mjs} +0 -0
  156. package/esm2020/grid/column-resize/resizable-directives/resizable.mjs +62 -0
  157. package/esm2020/grid/column-resize/resize-strategy.mjs +42 -0
  158. package/esm2020/grid/expansion-toggle.directive.mjs +64 -0
  159. package/esm2020/grid/grid.component.mjs +556 -0
  160. package/{esm2015/grid/grid.interface.js → esm2020/grid/grid.interface.mjs} +0 -0
  161. package/esm2020/grid/grid.module.mjs +117 -0
  162. package/esm2020/grid/grid.service.mjs +44 -0
  163. package/{esm2015/grid/mtxGrid.js → esm2020/grid/mtxGrid.mjs} +0 -0
  164. package/esm2020/grid/public-api.mjs +16 -0
  165. package/esm2020/loader/loader.component.mjs +63 -0
  166. package/esm2020/loader/loader.module.mjs +20 -0
  167. package/{esm2015/loader/mtxLoader.js → esm2020/loader/mtxLoader.mjs} +0 -0
  168. package/{esm2015/loader/public-api.js → esm2020/loader/public-api.mjs} +0 -0
  169. package/esm2020/ng-matero-extensions.mjs +5 -0
  170. package/{esm2015/popover/mtxPopover.js → esm2020/popover/mtxPopover.mjs} +0 -0
  171. package/{esm2015/popover/popover-animations.js → esm2020/popover/popover-animations.mjs} +0 -0
  172. package/{esm2015/popover/popover-errors.js → esm2020/popover/popover-errors.mjs} +0 -0
  173. package/{esm2015/popover/popover-interfaces.js → esm2020/popover/popover-interfaces.mjs} +0 -0
  174. package/esm2020/popover/popover-module.mjs +22 -0
  175. package/esm2020/popover/popover-target.mjs +17 -0
  176. package/esm2020/popover/popover-trigger.mjs +441 -0
  177. package/{esm2015/popover/popover-types.js → esm2020/popover/popover-types.mjs} +0 -0
  178. package/esm2020/popover/popover.mjs +334 -0
  179. package/{esm2015/popover/public-api.js → esm2020/popover/public-api.mjs} +0 -0
  180. package/{esm2015/progress/mtxProgress.js → esm2020/progress/mtxProgress.mjs} +0 -0
  181. package/esm2020/progress/progress.component.mjs +55 -0
  182. package/esm2020/progress/progress.module.mjs +18 -0
  183. package/{esm2015/progress/public-api.js → esm2020/progress/public-api.mjs} +0 -0
  184. package/esm2020/public-api.mjs +5 -0
  185. package/{esm2015/select/mtxSelect.js → esm2020/select/mtxSelect.mjs} +0 -0
  186. package/{esm2015/select/option.component.js → esm2020/select/option.component.mjs} +18 -26
  187. package/{esm2015/select/public-api.js → esm2020/select/public-api.mjs} +0 -0
  188. package/esm2020/select/select.component.mjs +458 -0
  189. package/esm2020/select/select.module.mjs +74 -0
  190. package/esm2020/select/templates.directive.mjs +124 -0
  191. package/{esm2015/slider/mtxSlider.js → esm2020/slider/mtxSlider.mjs} +0 -0
  192. package/{esm2015/slider/public-api.js → esm2020/slider/public-api.mjs} +0 -0
  193. package/esm2020/slider/slider-module.mjs +19 -0
  194. package/esm2020/slider/slider.mjs +1115 -0
  195. package/{esm2015/split/interface.js → esm2020/split/interface.mjs} +0 -0
  196. package/{esm2015/split/mtxSplit.js → esm2020/split/mtxSplit.mjs} +0 -0
  197. package/{esm2015/split/public-api.js → esm2020/split/public-api.mjs} +0 -0
  198. package/esm2020/split/split-pane.directive.mjs +149 -0
  199. package/esm2020/split/split.component.mjs +619 -0
  200. package/esm2020/split/split.module.mjs +19 -0
  201. package/{esm2015/split/utils.js → esm2020/split/utils.mjs} +0 -0
  202. package/{esm2015/text3d/mtxText3d.js → esm2020/text3d/mtxText3d.mjs} +0 -0
  203. package/{esm2015/text3d/public-api.js → esm2020/text3d/public-api.mjs} +0 -0
  204. package/esm2020/text3d/text3d.component.mjs +45 -0
  205. package/esm2020/text3d/text3d.module.mjs +18 -0
  206. package/{esm2015/tooltip/mtxTooltip.js → esm2020/tooltip/mtxTooltip.mjs} +0 -0
  207. package/{esm2015/tooltip/public-api.js → esm2020/tooltip/public-api.mjs} +0 -0
  208. package/{esm2015/tooltip/tooltip-animations.js → esm2020/tooltip/tooltip-animations.mjs} +0 -0
  209. package/esm2020/tooltip/tooltip-module.mjs +23 -0
  210. package/esm2020/tooltip/tooltip.mjs +674 -0
  211. package/fesm2015/mtxAlert.mjs +74 -0
  212. package/fesm2015/mtxAlert.mjs.map +1 -0
  213. package/fesm2015/mtxButton.mjs +102 -0
  214. package/fesm2015/mtxButton.mjs.map +1 -0
  215. package/fesm2015/mtxCheckboxGroup.mjs +257 -0
  216. package/fesm2015/mtxCheckboxGroup.mjs.map +1 -0
  217. package/fesm2015/mtxColorpicker.mjs +754 -0
  218. package/fesm2015/mtxColorpicker.mjs.map +1 -0
  219. package/fesm2015/{mtxColumnResize.js → mtxColumnResize.mjs} +108 -145
  220. package/fesm2015/mtxColumnResize.mjs.map +1 -0
  221. package/fesm2015/mtxCore.mjs +362 -0
  222. package/fesm2015/mtxCore.mjs.map +1 -0
  223. package/fesm2015/mtxDatetimepicker.mjs +2474 -0
  224. package/fesm2015/mtxDatetimepicker.mjs.map +1 -0
  225. package/fesm2015/mtxDialog.mjs +128 -0
  226. package/fesm2015/mtxDialog.mjs.map +1 -0
  227. package/fesm2015/mtxFormGroup.mjs +59 -0
  228. package/fesm2015/mtxFormGroup.mjs.map +1 -0
  229. package/fesm2015/mtxGrid.mjs +1271 -0
  230. package/fesm2015/mtxGrid.mjs.map +1 -0
  231. package/fesm2015/mtxLoader.mjs +87 -0
  232. package/fesm2015/mtxLoader.mjs.map +1 -0
  233. package/fesm2015/mtxPopover.mjs +865 -0
  234. package/fesm2015/mtxPopover.mjs.map +1 -0
  235. package/fesm2015/mtxProgress.mjs +77 -0
  236. package/fesm2015/mtxProgress.mjs.map +1 -0
  237. package/fesm2015/mtxSelect.mjs +712 -0
  238. package/fesm2015/mtxSelect.mjs.map +1 -0
  239. package/fesm2015/mtxSlider.mjs +1139 -0
  240. package/fesm2015/mtxSlider.mjs.map +1 -0
  241. package/fesm2015/{mtxSplit.js → mtxSplit.mjs} +75 -85
  242. package/fesm2015/mtxSplit.mjs.map +1 -0
  243. package/fesm2015/mtxText3d.mjs +67 -0
  244. package/fesm2015/mtxText3d.mjs.map +1 -0
  245. package/fesm2015/{mtxTooltip.js → mtxTooltip.mjs} +83 -86
  246. package/fesm2015/mtxTooltip.mjs.map +1 -0
  247. package/fesm2015/ng-matero-extensions.mjs +9 -0
  248. package/fesm2015/ng-matero-extensions.mjs.map +1 -0
  249. package/fesm2020/mtxAlert.mjs +74 -0
  250. package/fesm2020/mtxAlert.mjs.map +1 -0
  251. package/fesm2020/mtxButton.mjs +102 -0
  252. package/fesm2020/mtxButton.mjs.map +1 -0
  253. package/fesm2020/mtxCheckboxGroup.mjs +257 -0
  254. package/fesm2020/mtxCheckboxGroup.mjs.map +1 -0
  255. package/{fesm2015/mtxColorpicker.js → fesm2020/mtxColorpicker.mjs} +420 -413
  256. package/fesm2020/mtxColorpicker.mjs.map +1 -0
  257. package/fesm2020/mtxColumnResize.mjs +953 -0
  258. package/fesm2020/mtxColumnResize.mjs.map +1 -0
  259. package/{fesm2015/mtxCore.js → fesm2020/mtxCore.mjs} +75 -42
  260. package/fesm2020/mtxCore.mjs.map +1 -0
  261. package/{fesm2015/mtxDatetimepicker.js → fesm2020/mtxDatetimepicker.mjs} +1300 -1306
  262. package/fesm2020/mtxDatetimepicker.mjs.map +1 -0
  263. package/fesm2020/mtxDialog.mjs +129 -0
  264. package/fesm2020/mtxDialog.mjs.map +1 -0
  265. package/fesm2020/mtxFormGroup.mjs +59 -0
  266. package/fesm2020/mtxFormGroup.mjs.map +1 -0
  267. package/fesm2020/mtxGrid.mjs +1259 -0
  268. package/fesm2020/mtxGrid.mjs.map +1 -0
  269. package/fesm2020/mtxLoader.mjs +87 -0
  270. package/fesm2020/mtxLoader.mjs.map +1 -0
  271. package/{fesm2015/mtxPopover.js → fesm2020/mtxPopover.mjs} +120 -111
  272. package/fesm2020/mtxPopover.mjs.map +1 -0
  273. package/fesm2020/mtxProgress.mjs +77 -0
  274. package/fesm2020/mtxProgress.mjs.map +1 -0
  275. package/fesm2020/mtxSelect.mjs +709 -0
  276. package/fesm2020/mtxSelect.mjs.map +1 -0
  277. package/{fesm2015/mtxSlider.js → fesm2020/mtxSlider.mjs} +97 -94
  278. package/fesm2020/mtxSlider.mjs.map +1 -0
  279. package/fesm2020/mtxSplit.mjs +1007 -0
  280. package/fesm2020/mtxSplit.mjs.map +1 -0
  281. package/fesm2020/mtxText3d.mjs +67 -0
  282. package/fesm2020/mtxText3d.mjs.map +1 -0
  283. package/fesm2020/mtxTooltip.mjs +718 -0
  284. package/fesm2020/mtxTooltip.mjs.map +1 -0
  285. package/fesm2020/ng-matero-extensions.mjs +9 -0
  286. package/fesm2020/ng-matero-extensions.mjs.map +1 -0
  287. package/form-group/_form-group-theme.scss +1 -1
  288. package/form-group/form-group.component.d.ts +3 -0
  289. package/form-group/form-group.module.d.ts +6 -0
  290. package/form-group/mtxFormGroup.d.ts +1 -0
  291. package/form-group/package.json +5 -6
  292. package/grid/_grid-theme.scss +1 -1
  293. package/grid/cell.component.d.ts +3 -0
  294. package/grid/column-menu.component.d.ts +3 -0
  295. package/grid/column-menu.component.scss +1 -1
  296. package/grid/column-resize/_column-resize.scss +3 -3
  297. package/grid/column-resize/column-resize-directives/column-resize-flex.d.ts +3 -0
  298. package/grid/column-resize/column-resize-directives/column-resize.d.ts +3 -0
  299. package/grid/column-resize/column-resize-module.d.ts +12 -7
  300. package/grid/column-resize/overlay-handle.d.ts +3 -0
  301. package/grid/column-resize/resizable-directives/resizable.d.ts +3 -0
  302. package/grid/column-resize/resize-strategy.d.ts +3 -0
  303. package/grid/expansion-toggle.directive.d.ts +3 -0
  304. package/grid/grid.component.d.ts +20 -1
  305. package/grid/grid.module.d.ts +26 -0
  306. package/grid/grid.service.d.ts +3 -0
  307. package/grid/mtxGrid.d.ts +1 -0
  308. package/grid/package.json +5 -6
  309. package/grid/public-api.d.ts +0 -1
  310. package/loader/_loader-theme.scss +1 -1
  311. package/loader/loader.component.d.ts +3 -0
  312. package/loader/loader.module.d.ts +8 -0
  313. package/loader/mtxLoader.d.ts +1 -0
  314. package/loader/package.json +5 -6
  315. package/{extensions.d.ts → ng-matero-extensions.d.ts} +1 -0
  316. package/package.json +171 -15
  317. package/popover/_popover-theme.scss +1 -1
  318. package/popover/mtxPopover.d.ts +1 -0
  319. package/popover/package.json +5 -6
  320. package/popover/popover-module.d.ts +10 -0
  321. package/popover/popover-target.d.ts +3 -0
  322. package/popover/popover-trigger.d.ts +3 -0
  323. package/popover/popover.d.ts +3 -0
  324. package/progress/_progress-theme.scss +2 -2
  325. package/progress/mtxProgress.d.ts +1 -0
  326. package/progress/package.json +5 -6
  327. package/progress/progress.component.d.ts +3 -0
  328. package/progress/progress.module.d.ts +6 -0
  329. package/public-api.d.ts +2 -19
  330. package/select/_select-theme.scss +1 -1
  331. package/select/mtxSelect.d.ts +1 -0
  332. package/select/option.component.d.ts +3 -0
  333. package/select/package.json +5 -6
  334. package/select/select.component.d.ts +3 -0
  335. package/select/select.component.scss +1 -1
  336. package/select/select.module.d.ts +10 -0
  337. package/select/templates.directive.d.ts +23 -0
  338. package/slider/_slider-theme.scss +4 -4
  339. package/slider/mtxSlider.d.ts +1 -0
  340. package/slider/package.json +5 -6
  341. package/slider/slider-module.d.ts +7 -0
  342. package/slider/slider.d.ts +4 -1
  343. package/slider/slider.scss +7 -7
  344. package/split/_split-theme.scss +1 -1
  345. package/split/mtxSplit.d.ts +1 -0
  346. package/split/package.json +5 -6
  347. package/split/split-pane.directive.d.ts +3 -0
  348. package/split/split.component.d.ts +4 -1
  349. package/split/split.module.d.ts +7 -0
  350. package/text3d/_text3d-theme.scss +2 -2
  351. package/text3d/mtxText3d.d.ts +1 -0
  352. package/text3d/package.json +5 -6
  353. package/text3d/text3d.component.d.ts +3 -0
  354. package/text3d/text3d.module.d.ts +6 -0
  355. package/tooltip/_tooltip-theme.scss +3 -3
  356. package/tooltip/mtxTooltip.d.ts +1 -0
  357. package/tooltip/package.json +5 -6
  358. package/tooltip/tooltip-module.d.ts +10 -0
  359. package/tooltip/tooltip.d.ts +5 -0
  360. package/tooltip/tooltip.scss +1 -1
  361. package/alert/mtxAlert.metadata.json +0 -1
  362. package/bundles/extensions.umd.js +0 -164
  363. package/bundles/extensions.umd.js.map +0 -1
  364. package/bundles/mtxAlert.umd.js +0 -101
  365. package/bundles/mtxAlert.umd.js.map +0 -1
  366. package/bundles/mtxButton.umd.js +0 -119
  367. package/bundles/mtxButton.umd.js.map +0 -1
  368. package/bundles/mtxCheckboxGroup.umd.js +0 -284
  369. package/bundles/mtxCheckboxGroup.umd.js.map +0 -1
  370. package/bundles/mtxColorpicker.umd.js +0 -1123
  371. package/bundles/mtxColorpicker.umd.js.map +0 -1
  372. package/bundles/mtxColumnResize.umd.js +0 -1339
  373. package/bundles/mtxColumnResize.umd.js.map +0 -1
  374. package/bundles/mtxCore.umd.js +0 -670
  375. package/bundles/mtxCore.umd.js.map +0 -1
  376. package/bundles/mtxDatetimepicker.umd.js +0 -3045
  377. package/bundles/mtxDatetimepicker.umd.js.map +0 -1
  378. package/bundles/mtxDialog.umd.js +0 -158
  379. package/bundles/mtxDialog.umd.js.map +0 -1
  380. package/bundles/mtxFormGroup.umd.js +0 -73
  381. package/bundles/mtxFormGroup.umd.js.map +0 -1
  382. package/bundles/mtxGrid.umd.js +0 -1581
  383. package/bundles/mtxGrid.umd.js.map +0 -1
  384. package/bundles/mtxLoader.umd.js +0 -107
  385. package/bundles/mtxLoader.umd.js.map +0 -1
  386. package/bundles/mtxPipes.umd.js +0 -44
  387. package/bundles/mtxPipes.umd.js.map +0 -1
  388. package/bundles/mtxPopover.umd.js +0 -1260
  389. package/bundles/mtxPopover.umd.js.map +0 -1
  390. package/bundles/mtxProgress.umd.js +0 -92
  391. package/bundles/mtxProgress.umd.js.map +0 -1
  392. package/bundles/mtxSelect.umd.js +0 -1097
  393. package/bundles/mtxSelect.umd.js.map +0 -1
  394. package/bundles/mtxSlider.umd.js +0 -1551
  395. package/bundles/mtxSlider.umd.js.map +0 -1
  396. package/bundles/mtxSplit.umd.js +0 -1431
  397. package/bundles/mtxSplit.umd.js.map +0 -1
  398. package/bundles/mtxText3d.umd.js +0 -84
  399. package/bundles/mtxText3d.umd.js.map +0 -1
  400. package/bundles/mtxTooltip.umd.js +0 -1083
  401. package/bundles/mtxTooltip.umd.js.map +0 -1
  402. package/button/mtxButton.metadata.json +0 -1
  403. package/checkbox-group/mtxCheckboxGroup.metadata.json +0 -1
  404. package/colorpicker/mtxColorpicker.metadata.json +0 -1
  405. package/column-resize/mtxColumnResize.metadata.json +0 -1
  406. package/core/mtxCore.metadata.json +0 -1
  407. package/datetimepicker/mtxDatetimepicker.metadata.json +0 -1
  408. package/dialog/mtxDialog.metadata.json +0 -1
  409. package/esm2015/alert/alert.component.js +0 -63
  410. package/esm2015/alert/alert.module.js +0 -14
  411. package/esm2015/button/button-loading.directive.js +0 -89
  412. package/esm2015/button/button.module.js +0 -16
  413. package/esm2015/checkbox-group/checkbox-group.component.js +0 -235
  414. package/esm2015/checkbox-group/checkbox-group.module.js +0 -17
  415. package/esm2015/colorpicker/colorpicker-input.js +0 -228
  416. package/esm2015/colorpicker/colorpicker-module.js +0 -41
  417. package/esm2015/colorpicker/colorpicker-toggle.js +0 -97
  418. package/esm2015/colorpicker/colorpicker.js +0 -372
  419. package/esm2015/column-resize/column-resize-directives/column-resize-flex.js +0 -54
  420. package/esm2015/column-resize/column-resize-directives/column-resize.js +0 -54
  421. package/esm2015/column-resize/column-resize-module.js +0 -24
  422. package/esm2015/column-resize/column-resize-notifier.js +0 -54
  423. package/esm2015/column-resize/column-resize.js +0 -80
  424. package/esm2015/column-resize/column-size-store.js +0 -18
  425. package/esm2015/column-resize/event-dispatcher.js +0 -75
  426. package/esm2015/column-resize/overlay-handle.js +0 -144
  427. package/esm2015/column-resize/resizable.js +0 -197
  428. package/esm2015/column-resize/resize-strategy.js +0 -245
  429. package/esm2015/core/datetime/datetime.module.js +0 -32
  430. package/esm2015/core/datetime/native-datetime-adapter.js +0 -144
  431. package/esm2015/datetimepicker/calendar-body.js +0 -76
  432. package/esm2015/datetimepicker/calendar.js +0 -614
  433. package/esm2015/datetimepicker/clock.js +0 -283
  434. package/esm2015/datetimepicker/datetimepicker-input.js +0 -336
  435. package/esm2015/datetimepicker/datetimepicker-module.js +0 -52
  436. package/esm2015/datetimepicker/datetimepicker-toggle.js +0 -103
  437. package/esm2015/datetimepicker/datetimepicker.js +0 -490
  438. package/esm2015/datetimepicker/month-view.js +0 -150
  439. package/esm2015/datetimepicker/multi-year-view.js +0 -215
  440. package/esm2015/datetimepicker/year-view.js +0 -141
  441. package/esm2015/dialog/dialog.component.js +0 -40
  442. package/esm2015/dialog/dialog.js +0 -81
  443. package/esm2015/dialog/dialog.module.js +0 -21
  444. package/esm2015/extensions-experimental.module.js +0 -13
  445. package/esm2015/extensions.js +0 -5
  446. package/esm2015/extensions.module.js +0 -40
  447. package/esm2015/form-group/form-group.component.js +0 -40
  448. package/esm2015/form-group/form-group.module.js +0 -14
  449. package/esm2015/grid/cell-selection.directive.js +0 -62
  450. package/esm2015/grid/cell.component.js +0 -115
  451. package/esm2015/grid/column-menu.component.js +0 -72
  452. package/esm2015/grid/column-resize/column-resize-directives/column-resize-flex.js +0 -47
  453. package/esm2015/grid/column-resize/column-resize-directives/column-resize.js +0 -47
  454. package/esm2015/grid/column-resize/column-resize-module.js +0 -36
  455. package/esm2015/grid/column-resize/overlay-handle.js +0 -68
  456. package/esm2015/grid/column-resize/resizable-directives/resizable.js +0 -75
  457. package/esm2015/grid/column-resize/resize-strategy.js +0 -45
  458. package/esm2015/grid/expansion-toggle.directive.js +0 -62
  459. package/esm2015/grid/grid.component.js +0 -418
  460. package/esm2015/grid/grid.module.js +0 -69
  461. package/esm2015/grid/grid.service.js +0 -50
  462. package/esm2015/grid/public-api.js +0 -17
  463. package/esm2015/loader/loader.component.js +0 -69
  464. package/esm2015/loader/loader.module.js +0 -16
  465. package/esm2015/pipes/mtxPipes.js +0 -5
  466. package/esm2015/pipes/pipes.module.js +0 -14
  467. package/esm2015/pipes/public-api.js +0 -3
  468. package/esm2015/pipes/to-observable.pipe.js +0 -12
  469. package/esm2015/popover/popover-module.js +0 -18
  470. package/esm2015/popover/popover-target.js +0 -24
  471. package/esm2015/popover/popover-trigger.js +0 -434
  472. package/esm2015/popover/popover.js +0 -326
  473. package/esm2015/progress/progress.component.js +0 -54
  474. package/esm2015/progress/progress.module.js +0 -14
  475. package/esm2015/public-api.js +0 -23
  476. package/esm2015/select/select.component.js +0 -380
  477. package/esm2015/select/select.module.js +0 -46
  478. package/esm2015/select/templates.directive.js +0 -211
  479. package/esm2015/slider/slider-module.js +0 -15
  480. package/esm2015/slider/slider.js +0 -1115
  481. package/esm2015/split/split-pane.directive.js +0 -156
  482. package/esm2015/split/split.component.js +0 -624
  483. package/esm2015/split/split.module.js +0 -15
  484. package/esm2015/text3d/text3d.component.js +0 -45
  485. package/esm2015/text3d/text3d.module.js +0 -14
  486. package/esm2015/tooltip/tooltip-module.js +0 -20
  487. package/esm2015/tooltip/tooltip.js +0 -683
  488. package/extensions-experimental.module.d.ts +0 -2
  489. package/extensions.metadata.json +0 -1
  490. package/extensions.module.d.ts +0 -2
  491. package/fesm2015/extensions.js +0 -80
  492. package/fesm2015/extensions.js.map +0 -1
  493. package/fesm2015/mtxAlert.js +0 -82
  494. package/fesm2015/mtxAlert.js.map +0 -1
  495. package/fesm2015/mtxButton.js +0 -108
  496. package/fesm2015/mtxButton.js.map +0 -1
  497. package/fesm2015/mtxCheckboxGroup.js +0 -255
  498. package/fesm2015/mtxCheckboxGroup.js.map +0 -1
  499. package/fesm2015/mtxColorpicker.js.map +0 -1
  500. package/fesm2015/mtxColumnResize.js.map +0 -1
  501. package/fesm2015/mtxCore.js.map +0 -1
  502. package/fesm2015/mtxDatetimepicker.js.map +0 -1
  503. package/fesm2015/mtxDialog.js +0 -141
  504. package/fesm2015/mtxDialog.js.map +0 -1
  505. package/fesm2015/mtxFormGroup.js +0 -59
  506. package/fesm2015/mtxFormGroup.js.map +0 -1
  507. package/fesm2015/mtxGrid.js +0 -1186
  508. package/fesm2015/mtxGrid.js.map +0 -1
  509. package/fesm2015/mtxLoader.js +0 -90
  510. package/fesm2015/mtxLoader.js.map +0 -1
  511. package/fesm2015/mtxPipes.js +0 -31
  512. package/fesm2015/mtxPipes.js.map +0 -1
  513. package/fesm2015/mtxPopover.js.map +0 -1
  514. package/fesm2015/mtxProgress.js +0 -73
  515. package/fesm2015/mtxProgress.js.map +0 -1
  516. package/fesm2015/mtxSelect.js +0 -700
  517. package/fesm2015/mtxSelect.js.map +0 -1
  518. package/fesm2015/mtxSlider.js.map +0 -1
  519. package/fesm2015/mtxSplit.js.map +0 -1
  520. package/fesm2015/mtxText3d.js +0 -64
  521. package/fesm2015/mtxText3d.js.map +0 -1
  522. package/fesm2015/mtxTooltip.js.map +0 -1
  523. package/form-group/mtxFormGroup.metadata.json +0 -1
  524. package/grid/cell-selection.directive.d.ts +0 -17
  525. package/grid/mtxGrid.metadata.json +0 -1
  526. package/loader/mtxLoader.metadata.json +0 -1
  527. package/pipes/mtxPipes.d.ts +0 -4
  528. package/pipes/mtxPipes.metadata.json +0 -1
  529. package/pipes/package.json +0 -11
  530. package/pipes/pipes.module.d.ts +0 -2
  531. package/popover/mtxPopover.metadata.json +0 -1
  532. package/progress/mtxProgress.metadata.json +0 -1
  533. package/select/mtxSelect.metadata.json +0 -1
  534. package/slider/mtxSlider.metadata.json +0 -1
  535. package/split/mtxSplit.metadata.json +0 -1
  536. package/text3d/mtxText3d.metadata.json +0 -1
  537. package/tooltip/mtxTooltip.metadata.json +0 -1
@@ -0,0 +1,1007 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, ViewChildren, Directive, NgModule } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import { mixinColor } from '@angular/material/core';
6
+ import { Subject, Observable } from 'rxjs';
7
+ import { debounceTime } from 'rxjs/operators';
8
+
9
+ function getPointFromEvent(event) {
10
+ // TouchEvent
11
+ if (event.changedTouches !== undefined &&
12
+ event.changedTouches.length > 0) {
13
+ return {
14
+ x: event.changedTouches[0].clientX,
15
+ y: event.changedTouches[0].clientY,
16
+ };
17
+ }
18
+ // MouseEvent
19
+ else if (event.clientX !== undefined &&
20
+ event.clientY !== undefined) {
21
+ return {
22
+ x: event.clientX,
23
+ y: event.clientY,
24
+ };
25
+ }
26
+ return null;
27
+ }
28
+ function getElementPixelSize(elRef, direction) {
29
+ const rect = elRef.nativeElement.getBoundingClientRect();
30
+ return direction === 'horizontal' ? rect.width : rect.height;
31
+ }
32
+ function getInputBoolean(v) {
33
+ return typeof v === 'boolean' ? v : v === 'false' ? false : true;
34
+ }
35
+ function getInputPositiveNumber(v, defaultValue) {
36
+ if (v === null || v === undefined) {
37
+ return defaultValue;
38
+ }
39
+ v = Number(v);
40
+ return !isNaN(v) && v >= 0 ? v : defaultValue;
41
+ }
42
+ function isUserSizesValid(unit, sizes) {
43
+ // All sizes have to be not null and total should be 100
44
+ if (unit === 'percent') {
45
+ const total = sizes.reduce((_total, s) => (s !== null ? _total + s : _total), 0);
46
+ return sizes.every(s => s !== null) && total && total > 99.9 && total < 100.1;
47
+ }
48
+ // A size at null is mandatory but only one.
49
+ if (unit === 'pixel') {
50
+ return sizes.filter(s => s === null).length === 1;
51
+ }
52
+ }
53
+ function getAreaMinSize(a) {
54
+ if (a.size === null) {
55
+ return null;
56
+ }
57
+ if (a.component.lockSize === true) {
58
+ return a.size;
59
+ }
60
+ if (a.component.minSize === null) {
61
+ return null;
62
+ }
63
+ if (a.component.minSize > a.size) {
64
+ return a.size;
65
+ }
66
+ return a.component.minSize;
67
+ }
68
+ function getAreaMaxSize(a) {
69
+ if (a.size === null) {
70
+ return null;
71
+ }
72
+ if (a.component.lockSize === true) {
73
+ return a.size;
74
+ }
75
+ if (a.component.maxSize === null) {
76
+ return null;
77
+ }
78
+ if (a.component.maxSize < a.size) {
79
+ return a.size;
80
+ }
81
+ return a.component.maxSize;
82
+ }
83
+ function getGutterSideAbsorptionCapacity(unit, sideAreas, pixels, allAreasSizePixel) {
84
+ return sideAreas.reduce((acc, area) => {
85
+ const res = getAreaAbsorptionCapacity(unit, area, acc.remain, allAreasSizePixel);
86
+ acc.list.push(res);
87
+ acc.remain = res && res.pixelRemain;
88
+ return acc;
89
+ }, { remain: pixels, list: [] });
90
+ }
91
+ function getAreaAbsorptionCapacity(unit, areaSnapshot, pixels, allAreasSizePixel) {
92
+ // No pain no gain
93
+ if (pixels === 0) {
94
+ return {
95
+ areaSnapshot,
96
+ pixelAbsorb: 0,
97
+ percentAfterAbsorption: areaSnapshot.sizePercentAtStart,
98
+ pixelRemain: 0,
99
+ };
100
+ }
101
+ // Area start at zero and need to be reduced, not possible
102
+ if (areaSnapshot.sizePixelAtStart === 0 && pixels < 0) {
103
+ return {
104
+ areaSnapshot,
105
+ pixelAbsorb: 0,
106
+ percentAfterAbsorption: 0,
107
+ pixelRemain: pixels,
108
+ };
109
+ }
110
+ if (unit === 'percent') {
111
+ return getAreaAbsorptionCapacityPercent(areaSnapshot, pixels, allAreasSizePixel);
112
+ }
113
+ if (unit === 'pixel') {
114
+ return getAreaAbsorptionCapacityPixel(areaSnapshot, pixels, allAreasSizePixel);
115
+ }
116
+ }
117
+ function getAreaAbsorptionCapacityPercent(areaSnapshot, pixels, allAreasSizePixel) {
118
+ const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;
119
+ const tempPercentSize = (tempPixelSize / allAreasSizePixel) * 100;
120
+ // ENLARGE AREA
121
+ if (pixels > 0) {
122
+ // If maxSize & newSize bigger than it > absorb to max and return remaining pixels
123
+ if (areaSnapshot.area.maxSize !== null && tempPercentSize > areaSnapshot.area.maxSize) {
124
+ // Use area.area.maxSize as newPercentSize and return calculate pixels remaining
125
+ const maxSizePixel = (areaSnapshot.area.maxSize / 100) * allAreasSizePixel;
126
+ return {
127
+ areaSnapshot,
128
+ pixelAbsorb: maxSizePixel,
129
+ percentAfterAbsorption: areaSnapshot.area.maxSize,
130
+ pixelRemain: areaSnapshot.sizePixelAtStart + pixels - maxSizePixel,
131
+ };
132
+ }
133
+ return {
134
+ areaSnapshot,
135
+ pixelAbsorb: pixels,
136
+ percentAfterAbsorption: tempPercentSize > 100 ? 100 : tempPercentSize,
137
+ pixelRemain: 0,
138
+ };
139
+ }
140
+ // REDUCE AREA
141
+ else if (pixels < 0) {
142
+ // If minSize & newSize smaller than it > absorb to min and return remaining pixels
143
+ if (areaSnapshot.area.minSize !== null && tempPercentSize < areaSnapshot.area.minSize) {
144
+ // Use area.area.minSize as newPercentSize and return calculate pixels remaining
145
+ const minSizePixel = (areaSnapshot.area.minSize / 100) * allAreasSizePixel;
146
+ return {
147
+ areaSnapshot,
148
+ pixelAbsorb: minSizePixel,
149
+ percentAfterAbsorption: areaSnapshot.area.minSize,
150
+ pixelRemain: areaSnapshot.sizePixelAtStart + pixels - minSizePixel,
151
+ };
152
+ }
153
+ // If reduced under zero > return remaining pixels
154
+ else if (tempPercentSize < 0) {
155
+ // Use 0 as newPercentSize and return calculate pixels remaining
156
+ return {
157
+ areaSnapshot,
158
+ pixelAbsorb: -areaSnapshot.sizePixelAtStart,
159
+ percentAfterAbsorption: 0,
160
+ pixelRemain: pixels + areaSnapshot.sizePixelAtStart,
161
+ };
162
+ }
163
+ return {
164
+ areaSnapshot,
165
+ pixelAbsorb: pixels,
166
+ percentAfterAbsorption: tempPercentSize,
167
+ pixelRemain: 0,
168
+ };
169
+ }
170
+ }
171
+ function getAreaAbsorptionCapacityPixel(areaSnapshot, pixels, containerSizePixel) {
172
+ const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;
173
+ // ENLARGE AREA
174
+ if (pixels > 0) {
175
+ // If maxSize & newSize bigger than it > absorb to max and return remaining pixels
176
+ if (areaSnapshot.area.maxSize !== null && tempPixelSize > areaSnapshot.area.maxSize) {
177
+ return {
178
+ areaSnapshot,
179
+ pixelAbsorb: areaSnapshot.area.maxSize - areaSnapshot.sizePixelAtStart,
180
+ percentAfterAbsorption: -1,
181
+ pixelRemain: tempPixelSize - areaSnapshot.area.maxSize,
182
+ };
183
+ }
184
+ return {
185
+ areaSnapshot,
186
+ pixelAbsorb: pixels,
187
+ percentAfterAbsorption: -1,
188
+ pixelRemain: 0,
189
+ };
190
+ }
191
+ // REDUCE AREA
192
+ else if (pixels < 0) {
193
+ // If minSize & newSize smaller than it > absorb to min and return remaining pixels
194
+ if (areaSnapshot.area.minSize !== null && tempPixelSize < areaSnapshot.area.minSize) {
195
+ return {
196
+ areaSnapshot,
197
+ pixelAbsorb: areaSnapshot.area.minSize + pixels - tempPixelSize,
198
+ percentAfterAbsorption: -1,
199
+ pixelRemain: tempPixelSize - areaSnapshot.area.minSize,
200
+ };
201
+ }
202
+ // If reduced under zero > return remaining pixels
203
+ else if (tempPixelSize < 0) {
204
+ return {
205
+ areaSnapshot,
206
+ pixelAbsorb: -areaSnapshot.sizePixelAtStart,
207
+ percentAfterAbsorption: -1,
208
+ pixelRemain: pixels + areaSnapshot.sizePixelAtStart,
209
+ };
210
+ }
211
+ return {
212
+ areaSnapshot,
213
+ pixelAbsorb: pixels,
214
+ percentAfterAbsorption: -1,
215
+ pixelRemain: 0,
216
+ };
217
+ }
218
+ }
219
+ function updateAreaSize(unit, item) {
220
+ if (unit === 'percent') {
221
+ item.areaSnapshot.area.size = item.percentAfterAbsorption;
222
+ }
223
+ else if (unit === 'pixel') {
224
+ // Update size except for the wildcard size area
225
+ if (item.areaSnapshot.area.size !== null) {
226
+ item.areaSnapshot.area.size = item.areaSnapshot.sizePixelAtStart + item.pixelAbsorb;
227
+ }
228
+ }
229
+ }
230
+
231
+ // Boilerplate for applying mixins to _MtxSplitComponentBase.
232
+ /** @docs-private */
233
+ const _MtxSplitComponentBase = mixinColor(class {
234
+ constructor(_elementRef) {
235
+ this._elementRef = _elementRef;
236
+ }
237
+ });
238
+ /**
239
+ * mtx-split
240
+ *
241
+ *
242
+ * PERCENT MODE ([unit]="'percent'")
243
+ * ___________________________________________________________________________________________
244
+ * | A [g1] B [g2] C [g3] D [g4] E |
245
+ * |-------------------------------------------------------------------------------------------|
246
+ * | 20 30 20 15 15 | <-- [size]="x"
247
+ * | 10px 10px 10px 10px | <-- [gutterSize]="10"
248
+ * |calc(20% - 8px) calc(30% - 12px) calc(20% - 8px) calc(15% - 6px) calc(15% - 6px)| <-- CSS flex-basis property (with flex-grow&shrink at 0)
249
+ * | 152px 228px 152px 114px 114px | <-- el.getBoundingClientRect().width
250
+ * |___________________________________________________________________________________________|
251
+ * 800px <-- el.getBoundingClientRect().width
252
+ * flex-basis = calc( { area.size }% - { area.size/100 * nbGutter*gutterSize }px );
253
+ *
254
+ *
255
+ * PIXEL MODE ([unit]="'pixel'")
256
+ * ___________________________________________________________________________________________
257
+ * | A [g1] B [g2] C [g3] D [g4] E |
258
+ * |-------------------------------------------------------------------------------------------|
259
+ * | 100 250 * 150 100 | <-- [size]="y"
260
+ * | 10px 10px 10px 10px | <-- [gutterSize]="10"
261
+ * | 0 0 100px 0 0 250px 1 1 auto 0 0 150px 0 0 100px | <-- CSS flex property (flex-grow/flex-shrink/flex-basis)
262
+ * | 100px 250px 200px 150px 100px | <-- el.getBoundingClientRect().width
263
+ * |___________________________________________________________________________________________|
264
+ * 800px <-- el.getBoundingClientRect().width
265
+ *
266
+ */
267
+ class MtxSplitComponent extends _MtxSplitComponentBase {
268
+ constructor(ngZone, elRef, cdRef, renderer) {
269
+ super(elRef);
270
+ this.ngZone = ngZone;
271
+ this.elRef = elRef;
272
+ this.cdRef = cdRef;
273
+ this.renderer = renderer;
274
+ this._direction = 'horizontal';
275
+ ////
276
+ this._unit = 'percent';
277
+ ////
278
+ this._gutterSize = 4;
279
+ ////
280
+ this._gutterStep = 1;
281
+ ////
282
+ this._restrictMove = false;
283
+ ////
284
+ this._useTransition = false;
285
+ ////
286
+ this._disabled = false;
287
+ ////
288
+ this._dir = 'ltr';
289
+ ////
290
+ this._gutterDblClickDuration = 0;
291
+ ////
292
+ this.dragStart = new EventEmitter(false);
293
+ this.dragEnd = new EventEmitter(false);
294
+ this.gutterClick = new EventEmitter(false);
295
+ this.gutterDblClick = new EventEmitter(false);
296
+ this.dragProgressSubject = new Subject();
297
+ this.dragProgress$ = this.dragProgressSubject.asObservable();
298
+ ////
299
+ this.isDragging = false;
300
+ this.dragListeners = [];
301
+ this.snapshot = null;
302
+ this.startPoint = null;
303
+ this.endPoint = null;
304
+ this.displayedAreas = [];
305
+ this.hidedAreas = [];
306
+ this._clickTimeout = null;
307
+ // To force adding default class, could be override by user @Input() or not
308
+ this.direction = this._direction;
309
+ }
310
+ set direction(v) {
311
+ this._direction = v === 'vertical' ? 'vertical' : 'horizontal';
312
+ this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._direction}`);
313
+ this.renderer.removeClass(this.elRef.nativeElement, `mtx-split-${this._direction === 'vertical' ? 'horizontal' : 'vertical'}`);
314
+ this.build(false, false);
315
+ }
316
+ get direction() {
317
+ return this._direction;
318
+ }
319
+ set unit(v) {
320
+ this._unit = v === 'pixel' ? 'pixel' : 'percent';
321
+ this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._unit}`);
322
+ this.renderer.removeClass(this.elRef.nativeElement, `mtx-split-${this._unit === 'pixel' ? 'percent' : 'pixel'}`);
323
+ this.build(false, true);
324
+ }
325
+ get unit() {
326
+ return this._unit;
327
+ }
328
+ set gutterSize(v) {
329
+ this._gutterSize = getInputPositiveNumber(v, 11);
330
+ this.build(false, false);
331
+ }
332
+ get gutterSize() {
333
+ return this._gutterSize;
334
+ }
335
+ set gutterStep(v) {
336
+ this._gutterStep = getInputPositiveNumber(v, 1);
337
+ }
338
+ get gutterStep() {
339
+ return this._gutterStep;
340
+ }
341
+ set restrictMove(v) {
342
+ this._restrictMove = getInputBoolean(v);
343
+ }
344
+ get restrictMove() {
345
+ return this._restrictMove;
346
+ }
347
+ set useTransition(v) {
348
+ this._useTransition = getInputBoolean(v);
349
+ if (this._useTransition) {
350
+ this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-transition');
351
+ }
352
+ else {
353
+ this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-transition');
354
+ }
355
+ }
356
+ get useTransition() {
357
+ return this._useTransition;
358
+ }
359
+ set disabled(v) {
360
+ this._disabled = getInputBoolean(v);
361
+ if (this._disabled) {
362
+ this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-disabled');
363
+ }
364
+ else {
365
+ this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-disabled');
366
+ }
367
+ }
368
+ get disabled() {
369
+ return this._disabled;
370
+ }
371
+ set dir(v) {
372
+ this._dir = v === 'rtl' ? 'rtl' : 'ltr';
373
+ this.renderer.setAttribute(this.elRef.nativeElement, 'dir', this._dir);
374
+ }
375
+ get dir() {
376
+ return this._dir;
377
+ }
378
+ set gutterDblClickDuration(v) {
379
+ this._gutterDblClickDuration = getInputPositiveNumber(v, 0);
380
+ }
381
+ get gutterDblClickDuration() {
382
+ return this._gutterDblClickDuration;
383
+ }
384
+ get transitionEnd() {
385
+ return new Observable(subscriber => (this.transitionEndSubscriber = subscriber)).pipe(debounceTime(20));
386
+ }
387
+ ngAfterViewInit() {
388
+ this.ngZone.runOutsideAngular(() => {
389
+ // To avoid transition at first rendering
390
+ setTimeout(() => this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-init'));
391
+ });
392
+ }
393
+ getNbGutters() {
394
+ return this.displayedAreas.length === 0 ? 0 : this.displayedAreas.length - 1;
395
+ }
396
+ addArea(component) {
397
+ const newArea = {
398
+ component,
399
+ order: 0,
400
+ size: 0,
401
+ minSize: null,
402
+ maxSize: null,
403
+ };
404
+ if (component.visible === true) {
405
+ this.displayedAreas.push(newArea);
406
+ this.build(true, true);
407
+ }
408
+ else {
409
+ this.hidedAreas.push(newArea);
410
+ }
411
+ }
412
+ removeArea(component) {
413
+ if (this.displayedAreas.some(a => a.component === component)) {
414
+ const area = this.displayedAreas.find(a => a.component === component);
415
+ this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);
416
+ this.build(true, true);
417
+ }
418
+ else if (this.hidedAreas.some(a => a.component === component)) {
419
+ const area = this.hidedAreas.find(a => a.component === component);
420
+ this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);
421
+ }
422
+ }
423
+ updateArea(component, resetOrders, resetSizes) {
424
+ if (component.visible === true) {
425
+ this.build(resetOrders, resetSizes);
426
+ }
427
+ }
428
+ showArea(component) {
429
+ const area = this.hidedAreas.find(a => a.component === component);
430
+ if (area === undefined) {
431
+ return;
432
+ }
433
+ const areas = this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);
434
+ this.displayedAreas.push(...areas);
435
+ this.build(true, true);
436
+ }
437
+ hideArea(comp) {
438
+ const area = this.displayedAreas.find(a => a.component === comp);
439
+ if (area === undefined) {
440
+ return;
441
+ }
442
+ const areas = this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);
443
+ areas.forEach(_area => {
444
+ _area.order = 0;
445
+ _area.size = 0;
446
+ });
447
+ this.hidedAreas.push(...areas);
448
+ this.build(true, true);
449
+ }
450
+ getVisibleAreaSizes() {
451
+ return this.displayedAreas.map(a => (a.size === null ? '*' : a.size));
452
+ }
453
+ setVisibleAreaSizes(sizes) {
454
+ if (sizes.length !== this.displayedAreas.length) {
455
+ return false;
456
+ }
457
+ const formatedSizes = sizes.map(s => getInputPositiveNumber(s, null));
458
+ const isValid = isUserSizesValid(this.unit, formatedSizes);
459
+ if (isValid === false) {
460
+ return false;
461
+ }
462
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
463
+ // @ts-ignore
464
+ this.displayedAreas.forEach((area, i) => (area.component._size = formatedSizes[i]));
465
+ this.build(false, true);
466
+ return true;
467
+ }
468
+ build(resetOrders, resetSizes) {
469
+ this.stopDragging();
470
+ // ¤ AREAS ORDER
471
+ if (resetOrders === true) {
472
+ // If user provided 'order' for each area, use it to sort them.
473
+ if (this.displayedAreas.every(a => a.component.order !== null)) {
474
+ this.displayedAreas.sort((a, b) => (a.component.order - b.component.order));
475
+ }
476
+ // Then set real order with multiples of 2, numbers between will be used by gutters.
477
+ this.displayedAreas.forEach((area, i) => {
478
+ area.order = i * 2;
479
+ area.component.setStyleOrder(area.order);
480
+ });
481
+ }
482
+ // ¤ AREAS SIZE
483
+ if (resetSizes === true) {
484
+ const useUserSizes = isUserSizesValid(this.unit, this.displayedAreas.map(a => a.component.size));
485
+ switch (this.unit) {
486
+ case 'percent': {
487
+ const defaultSize = 100 / this.displayedAreas.length;
488
+ this.displayedAreas.forEach(area => {
489
+ area.size = useUserSizes ? area.component.size : defaultSize;
490
+ area.minSize = getAreaMinSize(area);
491
+ area.maxSize = getAreaMaxSize(area);
492
+ });
493
+ break;
494
+ }
495
+ case 'pixel': {
496
+ if (useUserSizes) {
497
+ this.displayedAreas.forEach(area => {
498
+ area.size = area.component.size;
499
+ area.minSize = getAreaMinSize(area);
500
+ area.maxSize = getAreaMaxSize(area);
501
+ });
502
+ }
503
+ else {
504
+ const wildcardSizeAreas = this.displayedAreas.filter(a => a.component.size === null);
505
+ // No wildcard area > Need to select one arbitrarily > first
506
+ if (wildcardSizeAreas.length === 0 && this.displayedAreas.length > 0) {
507
+ this.displayedAreas.forEach((area, i) => {
508
+ area.size = i === 0 ? null : area.component.size;
509
+ area.minSize = i === 0 ? null : getAreaMinSize(area);
510
+ area.maxSize = i === 0 ? null : getAreaMaxSize(area);
511
+ });
512
+ }
513
+ // More than one wildcard area > Need to keep only one arbitrarly > first
514
+ else if (wildcardSizeAreas.length > 1) {
515
+ let alreadyGotOne = false;
516
+ this.displayedAreas.forEach(area => {
517
+ if (area.component.size === null) {
518
+ if (alreadyGotOne === false) {
519
+ area.size = null;
520
+ area.minSize = null;
521
+ area.maxSize = null;
522
+ alreadyGotOne = true;
523
+ }
524
+ else {
525
+ area.size = 100;
526
+ area.minSize = null;
527
+ area.maxSize = null;
528
+ }
529
+ }
530
+ else {
531
+ area.size = area.component.size;
532
+ area.minSize = getAreaMinSize(area);
533
+ area.maxSize = getAreaMaxSize(area);
534
+ }
535
+ });
536
+ }
537
+ }
538
+ break;
539
+ }
540
+ }
541
+ }
542
+ this.refreshStyleSizes();
543
+ this.cdRef.markForCheck();
544
+ }
545
+ refreshStyleSizes() {
546
+ ///////////////////////////////////////////
547
+ // PERCENT MODE
548
+ if (this.unit === 'percent') {
549
+ // Only one area > flex-basis 100%
550
+ if (this.displayedAreas.length === 1) {
551
+ this.displayedAreas[0].component.setStyleFlex(0, 0, `100%`, false, false);
552
+ }
553
+ // Multiple areas > use each percent basis
554
+ else {
555
+ const sumGutterSize = this.getNbGutters() * this.gutterSize;
556
+ this.displayedAreas.forEach(area => {
557
+ area.component.setStyleFlex(0, 0, `calc( ${area.size}% - ${(area.size / 100) * sumGutterSize}px )`, area.minSize !== null && area.minSize === area.size ? true : false, area.maxSize !== null && area.maxSize === area.size ? true : false);
558
+ });
559
+ }
560
+ }
561
+ ///////////////////////////////////////////
562
+ // PIXEL MODE
563
+ else if (this.unit === 'pixel') {
564
+ this.displayedAreas.forEach(area => {
565
+ // Area with wildcard size
566
+ if (area.size === null) {
567
+ if (this.displayedAreas.length === 1) {
568
+ area.component.setStyleFlex(1, 1, `100%`, false, false);
569
+ }
570
+ else {
571
+ area.component.setStyleFlex(1, 1, `auto`, false, false);
572
+ }
573
+ }
574
+ // Area with pixel size
575
+ else {
576
+ // Only one area > flex-basis 100%
577
+ if (this.displayedAreas.length === 1) {
578
+ area.component.setStyleFlex(0, 0, `100%`, false, false);
579
+ }
580
+ // Multiple areas > use each pixel basis
581
+ else {
582
+ area.component.setStyleFlex(0, 0, `${area.size}px`, area.minSize !== null && area.minSize === area.size ? true : false, area.maxSize !== null && area.maxSize === area.size ? true : false);
583
+ }
584
+ }
585
+ });
586
+ }
587
+ }
588
+ clickGutter(event, gutterNum) {
589
+ const tempPoint = getPointFromEvent(event);
590
+ // Be sure mouseup/touchend happened at same point as mousedown/touchstart to trigger click/dblclick
591
+ if (this.startPoint && this.startPoint.x === tempPoint.x && this.startPoint.y === tempPoint.y) {
592
+ // If timeout in progress and new click > clearTimeout & dblClickEvent
593
+ if (this._clickTimeout !== null) {
594
+ window.clearTimeout(this._clickTimeout);
595
+ this._clickTimeout = null;
596
+ this.notify('dblclick', gutterNum);
597
+ this.stopDragging();
598
+ }
599
+ // Else start timeout to call clickEvent at end
600
+ else {
601
+ this._clickTimeout = window.setTimeout(() => {
602
+ this._clickTimeout = null;
603
+ this.notify('click', gutterNum);
604
+ this.stopDragging();
605
+ }, this.gutterDblClickDuration);
606
+ }
607
+ }
608
+ }
609
+ startDragging(event, gutterOrder, gutterNum) {
610
+ event.preventDefault();
611
+ event.stopPropagation();
612
+ this.startPoint = getPointFromEvent(event);
613
+ if (this.startPoint === null || this.disabled === true) {
614
+ return;
615
+ }
616
+ this.snapshot = {
617
+ gutterNum,
618
+ lastSteppedOffset: 0,
619
+ allAreasSizePixel: getElementPixelSize(this.elRef, this.direction) - this.getNbGutters() * this.gutterSize,
620
+ allInvolvedAreasSizePercent: 100,
621
+ areasBeforeGutter: [],
622
+ areasAfterGutter: [],
623
+ };
624
+ this.displayedAreas.forEach(area => {
625
+ const areaSnapshot = {
626
+ area,
627
+ sizePixelAtStart: getElementPixelSize(area.component.elRef, this.direction),
628
+ sizePercentAtStart: (this.unit === 'percent' ? area.size : -1), // If pixel mode, anyway, will not be used.
629
+ };
630
+ if (area.order < gutterOrder) {
631
+ if (this.restrictMove === true) {
632
+ this.snapshot.areasBeforeGutter = [areaSnapshot];
633
+ }
634
+ else {
635
+ this.snapshot.areasBeforeGutter.unshift(areaSnapshot);
636
+ }
637
+ }
638
+ else if (area.order > gutterOrder) {
639
+ if (this.restrictMove === true) {
640
+ if (this.snapshot.areasAfterGutter.length === 0) {
641
+ this.snapshot.areasAfterGutter = [areaSnapshot];
642
+ }
643
+ }
644
+ else {
645
+ this.snapshot.areasAfterGutter.push(areaSnapshot);
646
+ }
647
+ }
648
+ });
649
+ this.snapshot.allInvolvedAreasSizePercent = [
650
+ ...this.snapshot.areasBeforeGutter,
651
+ ...this.snapshot.areasAfterGutter,
652
+ ].reduce((t, a) => t + a.sizePercentAtStart, 0);
653
+ if (this.snapshot.areasBeforeGutter.length === 0 ||
654
+ this.snapshot.areasAfterGutter.length === 0) {
655
+ return;
656
+ }
657
+ this.dragListeners.push(this.renderer.listen('document', 'mouseup', this.stopDragging.bind(this)));
658
+ this.dragListeners.push(this.renderer.listen('document', 'touchend', this.stopDragging.bind(this)));
659
+ this.dragListeners.push(this.renderer.listen('document', 'touchcancel', this.stopDragging.bind(this)));
660
+ this.ngZone.runOutsideAngular(() => {
661
+ this.dragListeners.push(this.renderer.listen('document', 'mousemove', this.dragEvent.bind(this)));
662
+ this.dragListeners.push(this.renderer.listen('document', 'touchmove', this.dragEvent.bind(this)));
663
+ });
664
+ this.displayedAreas.forEach(area => area.component.lockEvents());
665
+ this.isDragging = true;
666
+ this.renderer.addClass(this.elRef.nativeElement, 'mtx-dragging');
667
+ this.renderer.addClass(this.gutterEls.toArray()[this.snapshot.gutterNum - 1].nativeElement, 'mtx-dragged');
668
+ this.notify('start', this.snapshot.gutterNum);
669
+ }
670
+ dragEvent(event) {
671
+ event.preventDefault();
672
+ event.stopPropagation();
673
+ if (this._clickTimeout !== null) {
674
+ window.clearTimeout(this._clickTimeout);
675
+ this._clickTimeout = null;
676
+ }
677
+ if (this.isDragging === false) {
678
+ return;
679
+ }
680
+ this.endPoint = getPointFromEvent(event);
681
+ if (this.endPoint === null) {
682
+ return;
683
+ }
684
+ // Calculate steppedOffset
685
+ let offset = this.direction === 'horizontal'
686
+ ? this.startPoint.x - this.endPoint.x
687
+ : this.startPoint.y - this.endPoint.y;
688
+ if (this.dir === 'rtl') {
689
+ offset = -offset;
690
+ }
691
+ const steppedOffset = Math.round(offset / this.gutterStep) * this.gutterStep;
692
+ if (steppedOffset === this.snapshot.lastSteppedOffset) {
693
+ return;
694
+ }
695
+ this.snapshot.lastSteppedOffset = steppedOffset;
696
+ // Need to know if each gutter side areas could reacts to steppedOffset
697
+ let areasBefore = getGutterSideAbsorptionCapacity(this.unit, this.snapshot.areasBeforeGutter, -steppedOffset, this.snapshot.allAreasSizePixel);
698
+ let areasAfter = getGutterSideAbsorptionCapacity(this.unit, this.snapshot.areasAfterGutter, steppedOffset, this.snapshot.allAreasSizePixel);
699
+ // Each gutter side areas can't absorb all offset
700
+ if (areasBefore.remain !== 0 && areasAfter.remain !== 0) {
701
+ if (Math.abs(areasBefore.remain) === Math.abs(areasAfter.remain)) {
702
+ /** */
703
+ }
704
+ else if (Math.abs(areasBefore.remain) > Math.abs(areasAfter.remain)) {
705
+ areasAfter = getGutterSideAbsorptionCapacity(this.unit, this.snapshot.areasAfterGutter, steppedOffset + areasBefore.remain, this.snapshot.allAreasSizePixel);
706
+ }
707
+ else {
708
+ areasBefore = getGutterSideAbsorptionCapacity(this.unit, this.snapshot.areasBeforeGutter, -(steppedOffset - areasAfter.remain), this.snapshot.allAreasSizePixel);
709
+ }
710
+ }
711
+ // Areas before gutter can't absorbs all offset > need to recalculate sizes for areas after gutter.
712
+ else if (areasBefore.remain !== 0) {
713
+ areasAfter = getGutterSideAbsorptionCapacity(this.unit, this.snapshot.areasAfterGutter, steppedOffset + areasBefore.remain, this.snapshot.allAreasSizePixel);
714
+ }
715
+ // Areas after gutter can't absorbs all offset > need to recalculate sizes for areas before gutter.
716
+ else if (areasAfter.remain !== 0) {
717
+ areasBefore = getGutterSideAbsorptionCapacity(this.unit, this.snapshot.areasBeforeGutter, -(steppedOffset - areasAfter.remain), this.snapshot.allAreasSizePixel);
718
+ }
719
+ if (this.unit === 'percent') {
720
+ // Hack because of browser messing up with sizes using calc(X% - Ypx) -> el.getBoundingClientRect()
721
+ // If not there, playing with gutters makes total going down to 99.99875% then 99.99286%, 99.98986%,..
722
+ const all = [...areasBefore.list, ...areasAfter.list];
723
+ const areaToReset = all.find(a => a.percentAfterAbsorption !== 0 &&
724
+ a.percentAfterAbsorption !== a.areaSnapshot.area.minSize &&
725
+ a.percentAfterAbsorption !== a.areaSnapshot.area.maxSize);
726
+ if (areaToReset) {
727
+ areaToReset.percentAfterAbsorption =
728
+ this.snapshot.allInvolvedAreasSizePercent -
729
+ all
730
+ .filter(a => a !== areaToReset)
731
+ .reduce((total, a) => total + a.percentAfterAbsorption, 0);
732
+ }
733
+ }
734
+ // Now we know areas could absorb steppedOffset, time to really update sizes
735
+ areasBefore.list.forEach(item => updateAreaSize(this.unit, item));
736
+ areasAfter.list.forEach(item => updateAreaSize(this.unit, item));
737
+ this.refreshStyleSizes();
738
+ this.notify('progress', this.snapshot.gutterNum);
739
+ }
740
+ stopDragging(event) {
741
+ if (event) {
742
+ event.preventDefault();
743
+ event.stopPropagation();
744
+ }
745
+ if (this.isDragging === false) {
746
+ return;
747
+ }
748
+ this.displayedAreas.forEach(area => area.component.unlockEvents());
749
+ while (this.dragListeners.length > 0) {
750
+ const fct = this.dragListeners.pop();
751
+ if (fct) {
752
+ fct();
753
+ }
754
+ }
755
+ // Warning: Have to be before "notify('end')"
756
+ // because "notify('end')"" can be linked to "[size]='x'" > "build()" > "stopDragging()"
757
+ this.isDragging = false;
758
+ // If moved from starting point, notify end
759
+ if (this.endPoint &&
760
+ (this.startPoint.x !== this.endPoint.x ||
761
+ this.startPoint.y !== this.endPoint.y)) {
762
+ this.notify('end', this.snapshot.gutterNum);
763
+ }
764
+ this.renderer.removeClass(this.elRef.nativeElement, 'mtx-dragging');
765
+ this.renderer.removeClass(this.gutterEls.toArray()[this.snapshot.gutterNum - 1].nativeElement, 'mtx-dragged');
766
+ this.snapshot = null;
767
+ // Needed to let (click)="clickGutter(...)" event run and verify if mouse moved or not
768
+ this.ngZone.runOutsideAngular(() => {
769
+ setTimeout(() => {
770
+ this.startPoint = null;
771
+ this.endPoint = null;
772
+ });
773
+ });
774
+ }
775
+ notify(type, gutterNum) {
776
+ const sizes = this.getVisibleAreaSizes();
777
+ if (type === 'start') {
778
+ this.dragStart.emit({ gutterNum, sizes });
779
+ }
780
+ else if (type === 'end') {
781
+ this.dragEnd.emit({ gutterNum, sizes });
782
+ }
783
+ else if (type === 'click') {
784
+ this.gutterClick.emit({ gutterNum, sizes });
785
+ }
786
+ else if (type === 'dblclick') {
787
+ this.gutterDblClick.emit({ gutterNum, sizes });
788
+ }
789
+ else if (type === 'transitionEnd') {
790
+ if (this.transitionEndSubscriber) {
791
+ this.ngZone.run(() => this.transitionEndSubscriber.next(sizes));
792
+ }
793
+ }
794
+ else if (type === 'progress') {
795
+ // Stay outside zone to allow users do what they want about change detection mechanism.
796
+ this.dragProgressSubject.next({ gutterNum, sizes });
797
+ }
798
+ }
799
+ ngOnDestroy() {
800
+ this.stopDragging();
801
+ }
802
+ }
803
+ /** @nocollapse */ /** @nocollapse */ MtxSplitComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: MtxSplitComponent, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
804
+ /** @nocollapse */ /** @nocollapse */ MtxSplitComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.0", type: MtxSplitComponent, selector: "mtx-split", inputs: { color: "color", direction: "direction", unit: "unit", gutterSize: "gutterSize", gutterStep: "gutterStep", restrictMove: "restrictMove", useTransition: "useTransition", disabled: "disabled", dir: "dir", gutterDblClickDuration: "gutterDblClickDuration" }, outputs: { dragStart: "dragStart", dragEnd: "dragEnd", gutterClick: "gutterClick", gutterDblClick: "gutterDblClick", transitionEnd: "transitionEnd" }, host: { classAttribute: "mtx-split" }, viewQueries: [{ propertyName: "gutterEls", predicate: ["gutterEls"], descendants: true }], exportAs: ["mtxSplit"], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\r\n<ng-template ngFor [ngForOf]=\"displayedAreas\" let-index=\"index\" let-last=\"last\">\r\n <div #gutterEls class=\"mtx-split-gutter\" [ngClass]=\"['mat-' + color]\"\r\n *ngIf=\"last === false\"\r\n [style.flex-basis.px]=\"gutterSize\"\r\n [style.order]=\"index * 2 + 1\"\r\n (mousedown)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (touchstart)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (mouseup)=\"clickGutter($event, index + 1)\"\r\n (touchend)=\"clickGutter($event, index + 1)\">\r\n <div class=\"mtx-split-gutter-handle\"></div>\r\n </div>\r\n</ng-template>\r\n", styles: [".mtx-split{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-items:stretch;overflow:hidden;width:100%;height:100%}.mtx-split>.mtx-split-gutter{position:relative;display:flex;flex-grow:0;flex-shrink:0;align-items:center;justify-content:center}.mtx-split>.mtx-split-gutter>.mtx-split-gutter-handle{position:absolute;opacity:0}.mtx-split>.mtx-split-pane{flex-grow:0;flex-shrink:0;overflow-x:hidden;overflow-y:auto}.mtx-split>.mtx-split-pane.mtx-split-pane-hidden{flex:0 1 0!important;overflow-x:hidden;overflow-y:hidden}.mtx-split.mtx-split-horizontal{flex-direction:row}.mtx-split.mtx-split-horizontal>.mtx-split-gutter{flex-direction:row;height:100%;cursor:col-resize}.mtx-split.mtx-split-horizontal>.mtx-split-gutter>.mtx-split-gutter-handle{width:8px;height:100%;left:-2px;right:2px}.mtx-split.mtx-split-horizontal>.mtx-split-pane{height:100%}.mtx-split.mtx-split-vertical{flex-direction:column}.mtx-split.mtx-split-vertical>.mtx-split-gutter{flex-direction:column;width:100%;cursor:row-resize}.mtx-split.mtx-split-vertical>.mtx-split-gutter>.mtx-split-gutter-handle{width:100%;height:8px;top:-2px;bottom:2px}.mtx-split.mtx-split-vertical>.mtx-split-pane{width:100%}.mtx-split.mtx-split-vertical>.mtx-split-pane.mtx-split-pane-hidden{max-width:0}.mtx-split.mtx-split-disabled>.mtx-split-gutter{cursor:default}.mtx-split.mtx-split-disabled>.mtx-split-gutter .mtx-split-gutter-handle{background-image:none}.mtx-split.mtx-split-transition.mtx-split-init:not(.mtx-dragging)>.mtx-split-gutter,.mtx-split.mtx-split-transition.mtx-split-init:not(.mtx-dragging)>.mtx-split-pane{transition:flex-basis .3s}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
805
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: MtxSplitComponent, decorators: [{
806
+ type: Component,
807
+ args: [{ selector: 'mtx-split', exportAs: 'mtxSplit', host: {
808
+ class: 'mtx-split',
809
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, inputs: ['color'], template: "<ng-content></ng-content>\r\n<ng-template ngFor [ngForOf]=\"displayedAreas\" let-index=\"index\" let-last=\"last\">\r\n <div #gutterEls class=\"mtx-split-gutter\" [ngClass]=\"['mat-' + color]\"\r\n *ngIf=\"last === false\"\r\n [style.flex-basis.px]=\"gutterSize\"\r\n [style.order]=\"index * 2 + 1\"\r\n (mousedown)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (touchstart)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (mouseup)=\"clickGutter($event, index + 1)\"\r\n (touchend)=\"clickGutter($event, index + 1)\">\r\n <div class=\"mtx-split-gutter-handle\"></div>\r\n </div>\r\n</ng-template>\r\n", styles: [".mtx-split{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-items:stretch;overflow:hidden;width:100%;height:100%}.mtx-split>.mtx-split-gutter{position:relative;display:flex;flex-grow:0;flex-shrink:0;align-items:center;justify-content:center}.mtx-split>.mtx-split-gutter>.mtx-split-gutter-handle{position:absolute;opacity:0}.mtx-split>.mtx-split-pane{flex-grow:0;flex-shrink:0;overflow-x:hidden;overflow-y:auto}.mtx-split>.mtx-split-pane.mtx-split-pane-hidden{flex:0 1 0!important;overflow-x:hidden;overflow-y:hidden}.mtx-split.mtx-split-horizontal{flex-direction:row}.mtx-split.mtx-split-horizontal>.mtx-split-gutter{flex-direction:row;height:100%;cursor:col-resize}.mtx-split.mtx-split-horizontal>.mtx-split-gutter>.mtx-split-gutter-handle{width:8px;height:100%;left:-2px;right:2px}.mtx-split.mtx-split-horizontal>.mtx-split-pane{height:100%}.mtx-split.mtx-split-vertical{flex-direction:column}.mtx-split.mtx-split-vertical>.mtx-split-gutter{flex-direction:column;width:100%;cursor:row-resize}.mtx-split.mtx-split-vertical>.mtx-split-gutter>.mtx-split-gutter-handle{width:100%;height:8px;top:-2px;bottom:2px}.mtx-split.mtx-split-vertical>.mtx-split-pane{width:100%}.mtx-split.mtx-split-vertical>.mtx-split-pane.mtx-split-pane-hidden{max-width:0}.mtx-split.mtx-split-disabled>.mtx-split-gutter{cursor:default}.mtx-split.mtx-split-disabled>.mtx-split-gutter .mtx-split-gutter-handle{background-image:none}.mtx-split.mtx-split-transition.mtx-split-init:not(.mtx-dragging)>.mtx-split-gutter,.mtx-split.mtx-split-transition.mtx-split-init:not(.mtx-dragging)>.mtx-split-pane{transition:flex-basis .3s}\n"] }]
810
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { direction: [{
811
+ type: Input
812
+ }], unit: [{
813
+ type: Input
814
+ }], gutterSize: [{
815
+ type: Input
816
+ }], gutterStep: [{
817
+ type: Input
818
+ }], restrictMove: [{
819
+ type: Input
820
+ }], useTransition: [{
821
+ type: Input
822
+ }], disabled: [{
823
+ type: Input
824
+ }], dir: [{
825
+ type: Input
826
+ }], gutterDblClickDuration: [{
827
+ type: Input
828
+ }], dragStart: [{
829
+ type: Output
830
+ }], dragEnd: [{
831
+ type: Output
832
+ }], gutterClick: [{
833
+ type: Output
834
+ }], gutterDblClick: [{
835
+ type: Output
836
+ }], transitionEnd: [{
837
+ type: Output
838
+ }], gutterEls: [{
839
+ type: ViewChildren,
840
+ args: ['gutterEls']
841
+ }] } });
842
+
843
+ class MtxSplitPaneDirective {
844
+ constructor(ngZone, elRef, renderer, split) {
845
+ this.ngZone = ngZone;
846
+ this.elRef = elRef;
847
+ this.renderer = renderer;
848
+ this.split = split;
849
+ this._order = null;
850
+ ////
851
+ this._size = null;
852
+ ////
853
+ this._minSize = null;
854
+ ////
855
+ this._maxSize = null;
856
+ ////
857
+ this._lockSize = false;
858
+ ////
859
+ this._visible = true;
860
+ this.lockListeners = [];
861
+ this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane');
862
+ }
863
+ set order(v) {
864
+ this._order = getInputPositiveNumber(v, null);
865
+ this.split.updateArea(this, true, false);
866
+ }
867
+ get order() {
868
+ return this._order;
869
+ }
870
+ set size(v) {
871
+ this._size = getInputPositiveNumber(v, null);
872
+ this.split.updateArea(this, false, true);
873
+ }
874
+ get size() {
875
+ return this._size;
876
+ }
877
+ set minSize(v) {
878
+ this._minSize = getInputPositiveNumber(v, null);
879
+ this.split.updateArea(this, false, true);
880
+ }
881
+ get minSize() {
882
+ return this._minSize;
883
+ }
884
+ set maxSize(v) {
885
+ this._maxSize = getInputPositiveNumber(v, null);
886
+ this.split.updateArea(this, false, true);
887
+ }
888
+ get maxSize() {
889
+ return this._maxSize;
890
+ }
891
+ set lockSize(v) {
892
+ this._lockSize = getInputBoolean(v);
893
+ this.split.updateArea(this, false, true);
894
+ }
895
+ get lockSize() {
896
+ return this._lockSize;
897
+ }
898
+ set visible(v) {
899
+ this._visible = getInputBoolean(v);
900
+ if (this._visible) {
901
+ this.split.showArea(this);
902
+ this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');
903
+ }
904
+ else {
905
+ this.split.hideArea(this);
906
+ this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');
907
+ }
908
+ }
909
+ get visible() {
910
+ return this._visible;
911
+ }
912
+ ngOnInit() {
913
+ this.split.addArea(this);
914
+ this.ngZone.runOutsideAngular(() => {
915
+ this.transitionListener = this.renderer.listen(this.elRef.nativeElement, 'transitionend', (event) => {
916
+ // Limit only flex-basis transition to trigger the event
917
+ if (event.propertyName === 'flex-basis') {
918
+ this.split.notify('transitionEnd', -1);
919
+ }
920
+ });
921
+ });
922
+ }
923
+ setStyleOrder(value) {
924
+ this.renderer.setStyle(this.elRef.nativeElement, 'order', value);
925
+ }
926
+ setStyleFlex(grow, shrink, basis, isMin, isMax) {
927
+ // Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)
928
+ this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);
929
+ this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);
930
+ this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);
931
+ if (isMin === true) {
932
+ this.renderer.addClass(this.elRef.nativeElement, 'mtx-min');
933
+ }
934
+ else {
935
+ this.renderer.removeClass(this.elRef.nativeElement, 'mtx-min');
936
+ }
937
+ if (isMax === true) {
938
+ this.renderer.addClass(this.elRef.nativeElement, 'mtx-max');
939
+ }
940
+ else {
941
+ this.renderer.removeClass(this.elRef.nativeElement, 'mtx-max');
942
+ }
943
+ }
944
+ lockEvents() {
945
+ this.ngZone.runOutsideAngular(() => {
946
+ this.lockListeners.push(this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e) => false));
947
+ this.lockListeners.push(this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e) => false));
948
+ });
949
+ }
950
+ unlockEvents() {
951
+ while (this.lockListeners.length > 0) {
952
+ const fct = this.lockListeners.pop();
953
+ if (fct) {
954
+ fct();
955
+ }
956
+ }
957
+ }
958
+ ngOnDestroy() {
959
+ this.unlockEvents();
960
+ if (this.transitionListener) {
961
+ this.transitionListener();
962
+ }
963
+ this.split.removeArea(this);
964
+ }
965
+ }
966
+ /** @nocollapse */ /** @nocollapse */ MtxSplitPaneDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: MtxSplitPaneDirective, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: MtxSplitComponent }], target: i0.ɵɵFactoryTarget.Directive });
967
+ /** @nocollapse */ /** @nocollapse */ MtxSplitPaneDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.0", type: MtxSplitPaneDirective, selector: "mtx-split-pane, [mtx-split-pane]", inputs: { order: "order", size: "size", minSize: "minSize", maxSize: "maxSize", lockSize: "lockSize", visible: "visible" }, exportAs: ["mtxSplitPane"], ngImport: i0 });
968
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: MtxSplitPaneDirective, decorators: [{
969
+ type: Directive,
970
+ args: [{
971
+ selector: 'mtx-split-pane, [mtx-split-pane]',
972
+ exportAs: 'mtxSplitPane',
973
+ }]
974
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: MtxSplitComponent }]; }, propDecorators: { order: [{
975
+ type: Input
976
+ }], size: [{
977
+ type: Input
978
+ }], minSize: [{
979
+ type: Input
980
+ }], maxSize: [{
981
+ type: Input
982
+ }], lockSize: [{
983
+ type: Input
984
+ }], visible: [{
985
+ type: Input
986
+ }] } });
987
+
988
+ class MtxSplitModule {
989
+ }
990
+ /** @nocollapse */ /** @nocollapse */ MtxSplitModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: MtxSplitModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
991
+ /** @nocollapse */ /** @nocollapse */ MtxSplitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: MtxSplitModule, declarations: [MtxSplitComponent, MtxSplitPaneDirective], imports: [CommonModule], exports: [MtxSplitComponent, MtxSplitPaneDirective] });
992
+ /** @nocollapse */ /** @nocollapse */ MtxSplitModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: MtxSplitModule, imports: [[CommonModule]] });
993
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: MtxSplitModule, decorators: [{
994
+ type: NgModule,
995
+ args: [{
996
+ imports: [CommonModule],
997
+ declarations: [MtxSplitComponent, MtxSplitPaneDirective],
998
+ exports: [MtxSplitComponent, MtxSplitPaneDirective],
999
+ }]
1000
+ }] });
1001
+
1002
+ /**
1003
+ * Generated bundle index. Do not edit.
1004
+ */
1005
+
1006
+ export { MtxSplitComponent, MtxSplitModule, MtxSplitPaneDirective, getAreaMaxSize, getAreaMinSize, getElementPixelSize, getGutterSideAbsorptionCapacity, getInputBoolean, getInputPositiveNumber, getPointFromEvent, isUserSizesValid, updateAreaSize };
1007
+ //# sourceMappingURL=mtxSplit.mjs.map