@ng-matero/extensions 17.0.0 → 17.1.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 (195) hide show
  1. package/_index.scss +24 -12
  2. package/alert/alert-module.d.ts +3 -3
  3. package/alert/alert.d.ts +1 -1
  4. package/checkbox-group/checkbox-group-module.d.ts +6 -6
  5. package/checkbox-group/checkbox-group.d.ts +1 -1
  6. package/colorpicker/colorpicker-input.d.ts +1 -1
  7. package/colorpicker/colorpicker-module.d.ts +10 -10
  8. package/colorpicker/colorpicker-toggle.d.ts +2 -2
  9. package/colorpicker/colorpicker.d.ts +3 -3
  10. package/column-resize/column-resize-directives/column-resize-flex.d.ts +1 -1
  11. package/column-resize/column-resize-directives/column-resize.d.ts +1 -1
  12. package/column-resize/column-resize-module.d.ts +1 -1
  13. package/core/color/_all-color.scss +3 -3
  14. package/core/datetime/datetime.module.d.ts +4 -1
  15. package/core/density/_all-density.scss +2 -2
  16. package/core/pipes/is-template-ref.pipe.d.ts +1 -1
  17. package/core/pipes/pipes.module.d.ts +4 -4
  18. package/core/pipes/to-observable.pipe.d.ts +1 -1
  19. package/core/tokens/m2/mdc/_plain-tooltip.scss +6 -6
  20. package/core/tokens/m2/mtx/_select.scss +1 -42
  21. package/core/typography/_all-typography.scss +2 -2
  22. package/datetimepicker/calendar-body.d.ts +1 -1
  23. package/datetimepicker/calendar.d.ts +1 -1
  24. package/datetimepicker/clock.d.ts +1 -1
  25. package/datetimepicker/datetimepicker-input.d.ts +1 -1
  26. package/datetimepicker/datetimepicker-module.d.ts +16 -16
  27. package/datetimepicker/datetimepicker-toggle.d.ts +2 -2
  28. package/datetimepicker/datetimepicker.d.ts +3 -3
  29. package/datetimepicker/month-view.d.ts +1 -1
  30. package/datetimepicker/multi-year-view.d.ts +1 -1
  31. package/datetimepicker/time.d.ts +3 -3
  32. package/datetimepicker/year-view.d.ts +1 -1
  33. package/dialog/dialog-container.d.ts +1 -1
  34. package/dialog/dialog-module.d.ts +7 -7
  35. package/drawer/drawer-container.d.ts +1 -1
  36. package/drawer/drawer-module.d.ts +5 -5
  37. package/esm2022/alert/alert-module.mjs +6 -7
  38. package/esm2022/alert/alert.mjs +5 -5
  39. package/esm2022/button/button-loading.mjs +4 -4
  40. package/esm2022/button/button-module.mjs +4 -4
  41. package/esm2022/checkbox-group/checkbox-group-module.mjs +6 -7
  42. package/esm2022/checkbox-group/checkbox-group.mjs +9 -10
  43. package/esm2022/colorpicker/colorpicker-input.mjs +5 -4
  44. package/esm2022/colorpicker/colorpicker-module.mjs +20 -19
  45. package/esm2022/colorpicker/colorpicker-toggle.mjs +10 -9
  46. package/esm2022/colorpicker/colorpicker.mjs +25 -18
  47. package/esm2022/column-resize/column-resize-directives/column-resize-flex.mjs +5 -4
  48. package/esm2022/column-resize/column-resize-directives/column-resize.mjs +5 -4
  49. package/esm2022/column-resize/column-resize-module.mjs +6 -6
  50. package/esm2022/column-resize/column-resize-notifier.mjs +6 -6
  51. package/esm2022/column-resize/column-resize.mjs +4 -4
  52. package/esm2022/column-resize/column-size-store.mjs +3 -3
  53. package/esm2022/column-resize/event-dispatcher.mjs +4 -4
  54. package/esm2022/column-resize/overlay-handle.mjs +4 -4
  55. package/esm2022/column-resize/polyfill.mjs +1 -1
  56. package/esm2022/column-resize/resizable.mjs +4 -4
  57. package/esm2022/column-resize/resize-strategy.mjs +10 -10
  58. package/esm2022/core/datetime/datetime-adapter.mjs +1 -1
  59. package/esm2022/core/datetime/datetime.module.mjs +19 -23
  60. package/esm2022/core/datetime/native-datetime-adapter.mjs +4 -4
  61. package/esm2022/core/pipes/is-template-ref.pipe.mjs +5 -5
  62. package/esm2022/core/pipes/pipes.module.mjs +6 -7
  63. package/esm2022/core/pipes/to-observable.pipe.mjs +5 -5
  64. package/esm2022/datetimepicker/calendar-body.mjs +5 -5
  65. package/esm2022/datetimepicker/calendar.mjs +19 -12
  66. package/esm2022/datetimepicker/clock.mjs +6 -7
  67. package/esm2022/datetimepicker/datetimepicker-errors.mjs +4 -3
  68. package/esm2022/datetimepicker/datetimepicker-input.mjs +6 -5
  69. package/esm2022/datetimepicker/datetimepicker-intl.mjs +3 -3
  70. package/esm2022/datetimepicker/datetimepicker-module.mjs +28 -11
  71. package/esm2022/datetimepicker/datetimepicker-toggle.mjs +10 -9
  72. package/esm2022/datetimepicker/datetimepicker.mjs +23 -19
  73. package/esm2022/datetimepicker/month-view.mjs +6 -7
  74. package/esm2022/datetimepicker/multi-year-view.mjs +6 -7
  75. package/esm2022/datetimepicker/time.mjs +11 -10
  76. package/esm2022/datetimepicker/year-view.mjs +6 -7
  77. package/esm2022/dialog/dialog-container.mjs +19 -10
  78. package/esm2022/dialog/dialog-module.mjs +23 -7
  79. package/esm2022/dialog/dialog.mjs +6 -5
  80. package/esm2022/drawer/drawer-container.mjs +5 -6
  81. package/esm2022/drawer/drawer-module.mjs +6 -7
  82. package/esm2022/drawer/drawer-ref.mjs +1 -1
  83. package/esm2022/drawer/drawer.mjs +6 -5
  84. package/esm2022/grid/cell.mjs +35 -13
  85. package/esm2022/grid/column-menu.mjs +31 -15
  86. package/esm2022/grid/column-resize/column-resize-directives/column-resize-flex.mjs +5 -4
  87. package/esm2022/grid/column-resize/column-resize-directives/column-resize.mjs +5 -4
  88. package/esm2022/grid/column-resize/column-resize-module.mjs +14 -14
  89. package/esm2022/grid/column-resize/index.mjs +8 -0
  90. package/esm2022/grid/column-resize/overlay-handle.mjs +5 -4
  91. package/esm2022/grid/column-resize/resizable-directives/resizable.mjs +5 -4
  92. package/esm2022/grid/column-resize/resize-strategy.mjs +3 -3
  93. package/esm2022/grid/expansion-toggle.mjs +5 -4
  94. package/esm2022/grid/grid-module.mjs +39 -37
  95. package/esm2022/grid/grid-pipes.mjs +29 -29
  96. package/esm2022/grid/grid-utils.mjs +6 -5
  97. package/esm2022/grid/grid.mjs +108 -76
  98. package/esm2022/loader/loader-module.mjs +6 -7
  99. package/esm2022/loader/loader.mjs +7 -7
  100. package/esm2022/photoviewer/photoviewer-module.mjs +6 -7
  101. package/esm2022/photoviewer/photoviewer.mjs +5 -4
  102. package/esm2022/popover/popover-content.mjs +8 -7
  103. package/esm2022/popover/popover-module.mjs +22 -7
  104. package/esm2022/popover/popover-target.mjs +5 -4
  105. package/esm2022/popover/popover-trigger.mjs +13 -6
  106. package/esm2022/popover/popover.mjs +7 -7
  107. package/esm2022/progress/progress-module.mjs +6 -7
  108. package/esm2022/progress/progress.mjs +6 -6
  109. package/esm2022/select/option.mjs +5 -4
  110. package/esm2022/select/select-module.mjs +20 -9
  111. package/esm2022/select/select.mjs +11 -11
  112. package/esm2022/select/templates.mjs +45 -45
  113. package/esm2022/split/split-module.mjs +6 -7
  114. package/esm2022/split/split-pane.mjs +5 -4
  115. package/esm2022/split/split.mjs +6 -6
  116. package/esm2022/split/utils.mjs +1 -1
  117. package/esm2022/tooltip/tooltip-module.mjs +24 -7
  118. package/esm2022/tooltip/tooltip.mjs +101 -114
  119. package/fesm2022/mtxAlert.mjs +9 -10
  120. package/fesm2022/mtxAlert.mjs.map +1 -1
  121. package/fesm2022/mtxButton.mjs +7 -7
  122. package/fesm2022/mtxButton.mjs.map +1 -1
  123. package/fesm2022/mtxCheckboxGroup.mjs +12 -16
  124. package/fesm2022/mtxCheckboxGroup.mjs.map +1 -1
  125. package/fesm2022/mtxColorpicker.mjs +462 -454
  126. package/fesm2022/mtxColorpicker.mjs.map +1 -1
  127. package/fesm2022/mtxColumnResize.mjs +43 -41
  128. package/fesm2022/mtxColumnResize.mjs.map +1 -1
  129. package/fesm2022/mtxCore.mjs +34 -39
  130. package/fesm2022/mtxCore.mjs.map +1 -1
  131. package/fesm2022/mtxDatetimepicker.mjs +814 -781
  132. package/fesm2022/mtxDatetimepicker.mjs.map +1 -1
  133. package/fesm2022/mtxDialog.mjs +44 -22
  134. package/fesm2022/mtxDialog.mjs.map +1 -1
  135. package/fesm2022/mtxDrawer.mjs +14 -15
  136. package/fesm2022/mtxDrawer.mjs.map +1 -1
  137. package/fesm2022/mtxGrid.mjs +249 -180
  138. package/fesm2022/mtxGrid.mjs.map +1 -1
  139. package/fesm2022/mtxLoader.mjs +11 -14
  140. package/fesm2022/mtxLoader.mjs.map +1 -1
  141. package/fesm2022/mtxPhotoviewer.mjs +9 -9
  142. package/fesm2022/mtxPhotoviewer.mjs.map +1 -1
  143. package/fesm2022/mtxPopover.mjs +52 -29
  144. package/fesm2022/mtxPopover.mjs.map +1 -1
  145. package/fesm2022/mtxProgress.mjs +10 -12
  146. package/fesm2022/mtxProgress.mjs.map +1 -1
  147. package/fesm2022/mtxSelect.mjs +75 -64
  148. package/fesm2022/mtxSelect.mjs.map +1 -1
  149. package/fesm2022/mtxSplit.mjs +14 -15
  150. package/fesm2022/mtxSplit.mjs.map +1 -1
  151. package/fesm2022/mtxTooltip.mjs +124 -121
  152. package/fesm2022/mtxTooltip.mjs.map +1 -1
  153. package/grid/cell.d.ts +1 -1
  154. package/grid/column-menu.d.ts +1 -1
  155. package/grid/column-resize/column-resize-directives/column-resize-flex.d.ts +1 -1
  156. package/grid/column-resize/column-resize-directives/column-resize.d.ts +1 -1
  157. package/grid/column-resize/column-resize-module.d.ts +7 -6
  158. package/grid/column-resize/index.d.ts +7 -0
  159. package/grid/column-resize/overlay-handle.d.ts +1 -1
  160. package/grid/column-resize/resizable-directives/resizable.d.ts +1 -1
  161. package/grid/expansion-toggle.d.ts +1 -1
  162. package/grid/grid-module.d.ts +25 -25
  163. package/grid/grid-pipes.d.ts +7 -7
  164. package/grid/grid.d.ts +24 -24
  165. package/loader/loader-module.d.ts +5 -5
  166. package/loader/loader.d.ts +1 -1
  167. package/package.json +6 -6
  168. package/photoviewer/photoviewer-module.d.ts +1 -1
  169. package/photoviewer/photoviewer.d.ts +1 -1
  170. package/popover/popover-content.d.ts +1 -1
  171. package/popover/popover-module.d.ts +8 -8
  172. package/popover/popover-target.d.ts +1 -1
  173. package/popover/popover-trigger.d.ts +1 -1
  174. package/popover/popover.d.ts +1 -1
  175. package/prebuilt-themes/deeppurple-amber.css +1 -1
  176. package/prebuilt-themes/indigo-pink.css +1 -1
  177. package/prebuilt-themes/pink-bluegrey.css +1 -1
  178. package/prebuilt-themes/purple-green.css +1 -1
  179. package/progress/progress-module.d.ts +3 -3
  180. package/progress/progress.d.ts +1 -1
  181. package/select/option.d.ts +1 -1
  182. package/select/select-module.d.ts +7 -7
  183. package/select/select.d.ts +1 -1
  184. package/select/select.scss +9 -10
  185. package/select/templates.d.ts +11 -11
  186. package/split/split-module.d.ts +4 -4
  187. package/split/split-pane.d.ts +1 -1
  188. package/split/split.d.ts +1 -1
  189. package/tooltip/tooltip-module.d.ts +7 -7
  190. package/tooltip/tooltip.d.ts +30 -44
  191. package/tooltip/tooltip.scss +2 -4
  192. package/core/mdc-helpers/_mdc-helpers.scss +0 -31
  193. package/core/style/_validation.scss +0 -43
  194. package/core/theming/_inspection.scss +0 -303
  195. package/core/theming/_m2-inspection.scss +0 -266
@@ -1 +1 @@
1
- {"version":3,"file":"mtxSplit.mjs","sources":["../../../projects/extensions/split/utils.ts","../../../projects/extensions/split/split.ts","../../../projects/extensions/split/split.html","../../../projects/extensions/split/split-pane.ts","../../../projects/extensions/split/split-module.ts","../../../projects/extensions/split/mtxSplit.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\n\nimport {\n MtxSplitArea,\n MtxSplitPoint,\n MtxSplitAreaSnapshot,\n MtxSplitSideAbsorptionCapacity,\n MtxSplitAreaAbsorptionCapacity,\n} from './interfaces';\n\nexport function getPointFromEvent(event: MouseEvent | TouchEvent): MtxSplitPoint | null {\n // TouchEvent\n if (\n (event as TouchEvent).changedTouches !== undefined &&\n (event as TouchEvent).changedTouches.length > 0\n ) {\n return {\n x: (event as TouchEvent).changedTouches[0].clientX,\n y: (event as TouchEvent).changedTouches[0].clientY,\n };\n }\n // MouseEvent\n else if (\n (event as MouseEvent).clientX !== undefined &&\n (event as MouseEvent).clientY !== undefined\n ) {\n return {\n x: (event as MouseEvent).clientX,\n y: (event as MouseEvent).clientY,\n };\n }\n return null;\n}\n\nexport function getElementPixelSize(\n elRef: ElementRef,\n direction: 'horizontal' | 'vertical'\n): number {\n const rect = (elRef.nativeElement as HTMLElement).getBoundingClientRect();\n\n return direction === 'horizontal' ? rect.width : rect.height;\n}\n\nexport function getInputBoolean(v: any): boolean {\n return typeof v === 'boolean' ? v : v === 'false' ? false : true;\n}\n\nexport function getInputPositiveNumber<T>(v: any, defaultValue: T): number | T {\n if (v === null || v === undefined) {\n return defaultValue;\n }\n\n v = Number(v);\n return !isNaN(v) && v >= 0 ? v : defaultValue;\n}\n\nexport function isUserSizesValid(\n unit: 'percent' | 'pixel',\n sizes: Array<number>\n): boolean | number | void {\n // All sizes have to be not null and total should be 100\n if (unit === 'percent') {\n const total = sizes.reduce((_total, s) => (s !== null ? _total + s : _total), 0);\n return sizes.every(s => s !== null) && total && total > 99.9 && total < 100.1;\n }\n\n // A size at null is mandatory but only one.\n if (unit === 'pixel') {\n return sizes.filter(s => s === null).length === 1;\n }\n}\n\nexport function getAreaMinSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.minSize === null) {\n return null;\n }\n\n if (a.component.minSize > a.size) {\n return a.size;\n }\n\n return a.component.minSize;\n}\n\nexport function getAreaMaxSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.maxSize === null) {\n return null;\n }\n\n if (a.component.maxSize < a.size) {\n return a.size;\n }\n\n return a.component.maxSize;\n}\n\nexport function getGutterSideAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n sideAreas: Array<MtxSplitAreaSnapshot>,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitSideAbsorptionCapacity {\n return sideAreas.reduce(\n (acc: any, area) => {\n const res = getAreaAbsorptionCapacity(unit, area, acc.remain, allAreasSizePixel);\n acc.list.push(res);\n acc.remain = res && res.pixelRemain;\n return acc;\n },\n { remain: pixels, list: [] }\n );\n}\n\nexport function getAreaAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n // No pain no gain\n if (pixels === 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: areaSnapshot.sizePercentAtStart,\n pixelRemain: 0,\n };\n }\n\n // Area start at zero and need to be reduced, not possible\n if (areaSnapshot.sizePixelAtStart === 0 && pixels < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: 0,\n pixelRemain: pixels,\n };\n }\n\n if (unit === 'percent') {\n return getAreaAbsorptionCapacityPercent(areaSnapshot, pixels, allAreasSizePixel);\n }\n\n if (unit === 'pixel') {\n return getAreaAbsorptionCapacityPixel(areaSnapshot, pixels, allAreasSizePixel);\n }\n}\n\nexport function getAreaAbsorptionCapacityPercent(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n const tempPercentSize = (tempPixelSize / allAreasSizePixel) * 100;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPercentSize > areaSnapshot.area.maxSize) {\n // Use area.area.maxSize as newPercentSize and return calculate pixels remaining\n const maxSizePixel = (areaSnapshot.area.maxSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: maxSizePixel,\n percentAfterAbsorption: areaSnapshot.area.maxSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - maxSizePixel,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize > 100 ? 100 : tempPercentSize,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPercentSize < areaSnapshot.area.minSize) {\n // Use area.area.minSize as newPercentSize and return calculate pixels remaining\n const minSizePixel = (areaSnapshot.area.minSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: minSizePixel,\n percentAfterAbsorption: areaSnapshot.area.minSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - minSizePixel,\n };\n }\n // If reduced under zero > return remaining pixels\n else if (tempPercentSize < 0) {\n // Use 0 as newPercentSize and return calculate pixels remaining\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: 0,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize,\n pixelRemain: 0,\n };\n }\n}\n\nexport function getAreaAbsorptionCapacityPixel(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n containerSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPixelSize > areaSnapshot.area.maxSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.maxSize - areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.maxSize,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPixelSize < areaSnapshot.area.minSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.minSize + pixels - tempPixelSize,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.minSize,\n };\n }\n // If reduced under zero > return remaining pixels\n else if (tempPixelSize < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n}\n\nexport function updateAreaSize(unit: 'percent' | 'pixel', item: MtxSplitAreaAbsorptionCapacity) {\n if (unit === 'percent') {\n item.areaSnapshot.area.size = item.percentAfterAbsorption;\n } else if (unit === 'pixel') {\n // Update size except for the wildcard size area\n if (item.areaSnapshot.area.size !== null) {\n item.areaSnapshot.area.size = item.areaSnapshot.sizePixelAtStart + item.pixelAbsorb;\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n Renderer2,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CanColor, mixinColor } from '@angular/material/core';\nimport { Observable, Subscriber, Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport {\n MtxSplitArea,\n MtxSplitAreaSnapshot,\n MtxSplitDefaultOptions,\n MtxSplitOutputAreaSizes,\n MtxSplitOutputData,\n MtxSplitPoint,\n MtxSplitSnapshot,\n} from './interfaces';\nimport { MtxSplitPane } from './split-pane';\nimport {\n getAreaMaxSize,\n getAreaMinSize,\n getElementPixelSize,\n getGutterSideAbsorptionCapacity,\n getInputBoolean,\n getInputPositiveNumber,\n getPointFromEvent,\n isUserSizesValid,\n updateAreaSize,\n} from './utils';\n\n/** Injection token that can be used to specify default split options. */\nexport const MTX_SPLIT_DEFAULT_OPTIONS = new InjectionToken<MtxSplitDefaultOptions>(\n 'mtx-split-default-options'\n);\n\n// Boilerplate for applying mixins to _MtxSplitBase.\n/** @docs-private */\nconst _MtxSplitBase = mixinColor(\n class {\n constructor(public _elementRef: ElementRef) {}\n }\n);\n\n/**\n * mtx-split\n *\n *\n * PERCENT MODE ([unit]=\"'percent'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 20 30 20 15 15 | <-- [size]=\"x\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * |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)\n * | 152px 228px 152px 114px 114px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n * flex-basis = calc( { area.size }% - { area.size/100 * nbGutter*gutterSize }px );\n *\n *\n * PIXEL MODE ([unit]=\"'pixel'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 100 250 * 150 100 | <-- [size]=\"y\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * | 0 0 100px 0 0 250px 1 1 auto 0 0 150px 0 0 100px | <-- CSS flex property (flex-grow/flex-shrink/flex-basis)\n * | 100px 250px 200px 150px 100px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n *\n */\n\n@Component({\n selector: 'mtx-split',\n exportAs: 'mtxSplit',\n host: {\n class: 'mtx-split',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./split.scss'],\n templateUrl: './split.html',\n inputs: ['color'],\n})\nexport class MtxSplit extends _MtxSplitBase implements AfterViewInit, OnDestroy, CanColor {\n private _direction: 'horizontal' | 'vertical' = 'horizontal';\n\n @Input() set direction(v: 'horizontal' | 'vertical') {\n this._direction = v === 'vertical' ? 'vertical' : 'horizontal';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._direction}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._direction === 'vertical' ? 'horizontal' : 'vertical'}`\n );\n\n this.build(false, false);\n }\n\n get direction(): 'horizontal' | 'vertical' {\n return this._direction;\n }\n\n ////\n\n private _unit: 'percent' | 'pixel' = 'percent';\n\n @Input() set unit(v: 'percent' | 'pixel') {\n this._unit = v === 'pixel' ? 'pixel' : 'percent';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._unit}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._unit === 'pixel' ? 'percent' : 'pixel'}`\n );\n\n this.build(false, true);\n }\n\n get unit(): 'percent' | 'pixel' {\n return this._unit;\n }\n\n ////\n\n private _gutterSize = 4;\n\n @Input() set gutterSize(v: number) {\n this._gutterSize = getInputPositiveNumber(v, 11);\n\n this.build(false, false);\n }\n\n get gutterSize(): number {\n return this._gutterSize;\n }\n\n ////\n\n private _gutterStep = 1;\n\n @Input() set gutterStep(v: number) {\n this._gutterStep = getInputPositiveNumber(v, 1);\n }\n\n get gutterStep(): number {\n return this._gutterStep;\n }\n\n ////\n\n private _restrictMove = false;\n\n @Input() set restrictMove(v: boolean) {\n this._restrictMove = getInputBoolean(v);\n }\n\n get restrictMove(): boolean {\n return this._restrictMove;\n }\n\n ////\n\n private _useTransition = false;\n\n @Input() set useTransition(v: boolean) {\n this._useTransition = getInputBoolean(v);\n\n if (this._useTransition) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-transition');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-transition');\n }\n }\n\n get useTransition(): boolean {\n return this._useTransition;\n }\n\n ////\n\n private _disabled = false;\n\n @Input() set disabled(v: boolean) {\n this._disabled = getInputBoolean(v);\n\n if (this._disabled) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-disabled');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-disabled');\n }\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n ////\n\n private _dir: 'ltr' | 'rtl' = 'ltr';\n\n @Input() set dir(v: 'ltr' | 'rtl') {\n this._dir = v === 'rtl' ? 'rtl' : 'ltr';\n\n this.renderer.setAttribute(this.elRef.nativeElement, 'dir', this._dir);\n }\n\n get dir(): 'ltr' | 'rtl' {\n return this._dir;\n }\n\n ////\n\n private _gutterDblClickDuration = 0;\n\n @Input() set gutterDblClickDuration(v: number) {\n this._gutterDblClickDuration = getInputPositiveNumber(v, 0);\n }\n\n get gutterDblClickDuration(): number {\n return this._gutterDblClickDuration;\n }\n\n ////\n\n @Output() dragStart = new EventEmitter<MtxSplitOutputData>(false);\n @Output() dragEnd = new EventEmitter<MtxSplitOutputData>(false);\n @Output() gutterClick = new EventEmitter<MtxSplitOutputData>(false);\n @Output() gutterDblClick = new EventEmitter<MtxSplitOutputData>(false);\n\n private transitionEndSubscriber!: Subscriber<MtxSplitOutputAreaSizes>;\n @Output() get transitionEnd(): Observable<MtxSplitOutputAreaSizes> {\n return new Observable(subscriber => (this.transitionEndSubscriber = subscriber)).pipe(\n debounceTime<any>(20)\n );\n }\n\n private dragProgressSubject: Subject<MtxSplitOutputData> = new Subject();\n dragProgress$: Observable<MtxSplitOutputData> = this.dragProgressSubject.asObservable();\n\n ////\n\n private isDragging = false;\n private dragListeners: Array<() => void> = [];\n private snapshot: MtxSplitSnapshot | null = null;\n private startPoint: MtxSplitPoint | null = null;\n private endPoint: MtxSplitPoint | null = null;\n\n public readonly displayedAreas: Array<MtxSplitArea> = [];\n private readonly hidedAreas: Array<MtxSplitArea> = [];\n\n @ViewChildren('gutterEls') private gutterEls!: QueryList<ElementRef>;\n\n constructor(\n private ngZone: NgZone,\n private elRef: ElementRef,\n private cdRef: ChangeDetectorRef,\n private renderer: Renderer2,\n @Optional()\n @Inject(MTX_SPLIT_DEFAULT_OPTIONS)\n protected _defaultOptions?: MtxSplitDefaultOptions\n ) {\n super(elRef);\n\n this.color = _defaultOptions?.color ?? 'primary';\n this.direction = _defaultOptions?.direction ?? 'horizontal';\n this.dir = _defaultOptions?.dir ?? 'ltr';\n this.unit = _defaultOptions?.unit ?? 'percent';\n this.gutterDblClickDuration = _defaultOptions?.gutterDblClickDuration ?? 0;\n this.gutterSize = _defaultOptions?.gutterSize ?? 4;\n this.gutterStep = _defaultOptions?.gutterStep ?? 1;\n this.restrictMove = _defaultOptions?.restrictMove ?? false;\n this.useTransition = _defaultOptions?.useTransition ?? false;\n }\n\n public ngAfterViewInit() {\n this.ngZone.runOutsideAngular(() => {\n // To avoid transition at first rendering\n setTimeout(() => this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-init'));\n });\n }\n\n private getNbGutters(): number {\n return this.displayedAreas.length === 0 ? 0 : this.displayedAreas.length - 1;\n }\n\n public addArea(component: MtxSplitPane): void {\n const newArea: MtxSplitArea = {\n component,\n order: 0,\n size: 0,\n minSize: null,\n maxSize: null,\n };\n\n if (component.visible === true) {\n this.displayedAreas.push(newArea);\n\n this.build(true, true);\n } else {\n this.hidedAreas.push(newArea);\n }\n }\n\n public removeArea(component: MtxSplitPane): void {\n if (this.displayedAreas.some(a => a.component === component)) {\n const area = this.displayedAreas.find(a => a.component === component) as MtxSplitArea;\n this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n\n this.build(true, true);\n } else if (this.hidedAreas.some(a => a.component === component)) {\n const area = this.hidedAreas.find(a => a.component === component) as MtxSplitArea;\n this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n }\n }\n\n public updateArea(component: MtxSplitPane, resetOrders: boolean, resetSizes: boolean): void {\n if (component.visible === true) {\n this.build(resetOrders, resetSizes);\n }\n }\n\n public showArea(component: MtxSplitPane): void {\n const area = this.hidedAreas.find(a => a.component === component);\n if (area === undefined) {\n return;\n }\n\n const areas = this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n this.displayedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n public hideArea(comp: MtxSplitPane): void {\n const area = this.displayedAreas.find(a => a.component === comp);\n if (area === undefined) {\n return;\n }\n\n const areas = this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n areas.forEach(_area => {\n _area.order = 0;\n _area.size = 0;\n });\n this.hidedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n public getVisibleAreaSizes(): MtxSplitOutputAreaSizes {\n return this.displayedAreas.map(a => (a.size === null ? '*' : a.size));\n }\n\n public setVisibleAreaSizes(sizes: MtxSplitOutputAreaSizes): boolean {\n if (sizes.length !== this.displayedAreas.length) {\n return false;\n }\n\n const formatedSizes = sizes.map(s => getInputPositiveNumber(s, null)) as number[];\n const isValid = isUserSizesValid(this.unit, formatedSizes);\n\n if (isValid === false) {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.displayedAreas.forEach((area, i) => (area.component._size = formatedSizes[i]));\n\n this.build(false, true);\n return true;\n }\n\n private build(resetOrders: boolean, resetSizes: boolean): void {\n this.stopDragging();\n\n // ¤ AREAS ORDER\n\n if (resetOrders === true) {\n // If user provided 'order' for each area, use it to sort them.\n if (this.displayedAreas.every(a => a.component.order !== null)) {\n this.displayedAreas.sort(\n (a, b) => (a.component.order as number) - (b.component.order as number)\n );\n }\n\n // Then set real order with multiples of 2, numbers between will be used by gutters.\n this.displayedAreas.forEach((area, i) => {\n area.order = i * 2;\n area.component.setStyleOrder(area.order);\n });\n }\n\n // ¤ AREAS SIZE\n\n if (resetSizes === true) {\n const useUserSizes = isUserSizesValid(\n this.unit,\n this.displayedAreas.map(a => a.component.size) as number[]\n );\n\n switch (this.unit) {\n case 'percent': {\n const defaultSize = 100 / this.displayedAreas.length;\n\n this.displayedAreas.forEach(area => {\n area.size = useUserSizes ? (area.component.size as number) : defaultSize;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n break;\n }\n case 'pixel': {\n if (useUserSizes) {\n this.displayedAreas.forEach(area => {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n } else {\n const wildcardSizeAreas = this.displayedAreas.filter(a => a.component.size === null);\n\n // No wildcard area > Need to select one arbitrarily > first\n if (wildcardSizeAreas.length === 0 && this.displayedAreas.length > 0) {\n this.displayedAreas.forEach((area, i) => {\n area.size = i === 0 ? null : area.component.size;\n area.minSize = i === 0 ? null : getAreaMinSize(area);\n area.maxSize = i === 0 ? null : getAreaMaxSize(area);\n });\n }\n // More than one wildcard area > Need to keep only one arbitrarly > first\n else if (wildcardSizeAreas.length > 1) {\n let alreadyGotOne = false;\n this.displayedAreas.forEach(area => {\n if (area.component.size === null) {\n if (alreadyGotOne === false) {\n area.size = null;\n area.minSize = null;\n area.maxSize = null;\n alreadyGotOne = true;\n } else {\n area.size = 100;\n area.minSize = null;\n area.maxSize = null;\n }\n } else {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n }\n });\n }\n }\n break;\n }\n }\n }\n\n this.refreshStyleSizes();\n this.cdRef.markForCheck();\n }\n\n private refreshStyleSizes(): void {\n ///////////////////////////////////////////\n // PERCENT MODE\n if (this.unit === 'percent') {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n this.displayedAreas[0].component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each percent basis\n else {\n const sumGutterSize = this.getNbGutters() * this.gutterSize;\n\n this.displayedAreas.forEach(area => {\n area.component.setStyleFlex(\n 0,\n 0,\n `calc( ${area.size}% - ${((area.size as number) / 100) * sumGutterSize}px )`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n });\n }\n }\n ///////////////////////////////////////////\n // PIXEL MODE\n else if (this.unit === 'pixel') {\n this.displayedAreas.forEach(area => {\n // Area with wildcard size\n if (area.size === null) {\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(1, 1, `100%`, false, false);\n } else {\n area.component.setStyleFlex(1, 1, `auto`, false, false);\n }\n }\n // Area with pixel size\n else {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each pixel basis\n else {\n area.component.setStyleFlex(\n 0,\n 0,\n `${area.size}px`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n }\n }\n });\n }\n }\n\n _clickTimeout: number | null = null;\n\n public clickGutter(event: MouseEvent | TouchEvent, gutterNum: number): void {\n const tempPoint = getPointFromEvent(event) as MtxSplitPoint;\n\n // Be sure mouseup/touchend happened at same point as mousedown/touchstart to trigger click/dblclick\n if (this.startPoint && this.startPoint.x === tempPoint.x && this.startPoint.y === tempPoint.y) {\n // If timeout in progress and new click > clearTimeout & dblClickEvent\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n this.notify('dblclick', gutterNum);\n this.stopDragging();\n }\n // Else start timeout to call clickEvent at end\n else {\n this._clickTimeout = window.setTimeout(() => {\n this._clickTimeout = null;\n this.notify('click', gutterNum);\n this.stopDragging();\n }, this.gutterDblClickDuration);\n }\n }\n }\n\n public startDragging(\n event: MouseEvent | TouchEvent,\n gutterOrder: number,\n gutterNum: number\n ): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.startPoint = getPointFromEvent(event);\n if (this.startPoint === null || this.disabled === true) {\n return;\n }\n\n this.snapshot = {\n gutterNum,\n lastSteppedOffset: 0,\n allAreasSizePixel:\n getElementPixelSize(this.elRef, this.direction) - this.getNbGutters() * this.gutterSize,\n allInvolvedAreasSizePercent: 100,\n areasBeforeGutter: [],\n areasAfterGutter: [],\n };\n\n this.displayedAreas.forEach(area => {\n const areaSnapshot: MtxSplitAreaSnapshot = {\n area,\n sizePixelAtStart: getElementPixelSize(area.component.elRef, this.direction),\n sizePercentAtStart: (this.unit === 'percent' ? area.size : -1) as number, // If pixel mode, anyway, will not be used.\n };\n\n if (area.order < gutterOrder) {\n if (this.restrictMove === true) {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter = [areaSnapshot];\n } else {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter.unshift(areaSnapshot);\n }\n } else if (area.order > gutterOrder) {\n if (this.restrictMove === true) {\n if ((this.snapshot as MtxSplitSnapshot).areasAfterGutter.length === 0) {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter = [areaSnapshot];\n }\n } else {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter.push(areaSnapshot);\n }\n }\n });\n\n this.snapshot.allInvolvedAreasSizePercent = [\n ...this.snapshot.areasBeforeGutter,\n ...this.snapshot.areasAfterGutter,\n ].reduce((t, a) => t + a.sizePercentAtStart, 0);\n\n if (\n this.snapshot.areasBeforeGutter.length === 0 ||\n this.snapshot.areasAfterGutter.length === 0\n ) {\n return;\n }\n\n this.dragListeners.push(\n this.renderer.listen('document', 'mouseup', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchend', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchcancel', this.stopDragging.bind(this))\n );\n\n this.ngZone.runOutsideAngular(() => {\n this.dragListeners.push(\n this.renderer.listen('document', 'mousemove', this.dragEvent.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchmove', this.dragEvent.bind(this))\n );\n });\n\n this.displayedAreas.forEach(area => area.component.lockEvents());\n\n this.isDragging = true;\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.addClass(\n this.gutterEls.toArray()[this.snapshot.gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n\n this.notify('start', this.snapshot.gutterNum);\n }\n\n private dragEvent(event: MouseEvent | TouchEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.endPoint = getPointFromEvent(event);\n if (this.endPoint === null) {\n return;\n }\n\n // Calculate steppedOffset\n\n let offset =\n this.direction === 'horizontal'\n ? (this.startPoint as MtxSplitPoint).x - this.endPoint.x\n : (this.startPoint as MtxSplitPoint).y - this.endPoint.y;\n if (this.dir === 'rtl' && this.direction === 'horizontal') {\n offset = -offset;\n }\n const steppedOffset = Math.round(offset / this.gutterStep) * this.gutterStep;\n\n if (steppedOffset === (this.snapshot as MtxSplitSnapshot).lastSteppedOffset) {\n return;\n }\n\n (this.snapshot as MtxSplitSnapshot).lastSteppedOffset = steppedOffset;\n\n // Need to know if each gutter side areas could reacts to steppedOffset\n\n let areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n let areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n\n // Each gutter side areas can't absorb all offset\n if (areasBefore.remain !== 0 && areasAfter.remain !== 0) {\n if (Math.abs(areasBefore.remain) === Math.abs(areasAfter.remain)) {\n /** */\n } else if (Math.abs(areasBefore.remain) > Math.abs(areasAfter.remain)) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n } else {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n }\n // Areas before gutter can't absorbs all offset > need to recalculate sizes for areas after gutter.\n else if (areasBefore.remain !== 0) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n // Areas after gutter can't absorbs all offset > need to recalculate sizes for areas before gutter.\n else if (areasAfter.remain !== 0) {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n\n if (this.unit === 'percent') {\n // Hack because of browser messing up with sizes using calc(X% - Ypx) -> el.getBoundingClientRect()\n // If not there, playing with gutters makes total going down to 99.99875% then 99.99286%, 99.98986%,..\n const all = [...areasBefore.list, ...areasAfter.list];\n const areaToReset = all.find(\n a =>\n a.percentAfterAbsorption !== 0 &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.minSize &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.maxSize\n );\n\n if (areaToReset) {\n areaToReset.percentAfterAbsorption =\n (this.snapshot as MtxSplitSnapshot).allInvolvedAreasSizePercent -\n all\n .filter(a => a !== areaToReset)\n .reduce((total, a) => total + a.percentAfterAbsorption, 0);\n }\n }\n\n // Now we know areas could absorb steppedOffset, time to really update sizes\n\n areasBefore.list.forEach(item => updateAreaSize(this.unit, item));\n areasAfter.list.forEach(item => updateAreaSize(this.unit, item));\n\n this.refreshStyleSizes();\n this.notify('progress', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n private stopDragging(event?: Event): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.displayedAreas.forEach(area => area.component.unlockEvents());\n\n while (this.dragListeners.length > 0) {\n const fct = this.dragListeners.pop();\n if (fct) {\n fct();\n }\n }\n\n // Warning: Have to be before \"notify('end')\"\n // because \"notify('end')\"\" can be linked to \"[size]='x'\" > \"build()\" > \"stopDragging()\"\n this.isDragging = false;\n\n // If moved from starting point, notify end\n if (\n this.endPoint &&\n ((this.startPoint as MtxSplitPoint).x !== this.endPoint.x ||\n (this.startPoint as MtxSplitPoint).y !== this.endPoint.y)\n ) {\n this.notify('end', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.removeClass(\n this.gutterEls.toArray()[(this.snapshot as MtxSplitSnapshot).gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n this.snapshot = null;\n\n // Needed to let (click)=\"clickGutter(...)\" event run and verify if mouse moved or not\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this.startPoint = null;\n this.endPoint = null;\n });\n });\n }\n\n public notify(\n type: 'start' | 'progress' | 'end' | 'click' | 'dblclick' | 'transitionEnd',\n gutterNum: number\n ): void {\n const sizes = this.getVisibleAreaSizes();\n\n if (type === 'start') {\n this.dragStart.emit({ gutterNum, sizes });\n } else if (type === 'end') {\n this.dragEnd.emit({ gutterNum, sizes });\n } else if (type === 'click') {\n this.gutterClick.emit({ gutterNum, sizes });\n } else if (type === 'dblclick') {\n this.gutterDblClick.emit({ gutterNum, sizes });\n } else if (type === 'transitionEnd') {\n if (this.transitionEndSubscriber) {\n this.ngZone.run(() => this.transitionEndSubscriber.next(sizes));\n }\n } else if (type === 'progress') {\n // Stay outside zone to allow users do what they want about change detection mechanism.\n this.dragProgressSubject.next({ gutterNum, sizes });\n }\n }\n\n public ngOnDestroy(): void {\n this.stopDragging();\n }\n}\n","<ng-content></ng-content>\r\n@for (area of displayedAreas; track area; let index = $index; let last = $last) {\r\n @if (!last) {\r\n <div #gutterEls class=\"mtx-split-gutter\" [ngClass]=\"['mat-' + color]\"\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 }\r\n}\r\n","import { Directive, Input, ElementRef, Renderer2, OnInit, OnDestroy, NgZone } from '@angular/core';\n\nimport { MtxSplit } from './split';\nimport { getInputPositiveNumber, getInputBoolean } from './utils';\n\n@Directive({\n selector: 'mtx-split-pane, [mtx-split-pane]',\n exportAs: 'mtxSplitPane',\n})\nexport class MtxSplitPane implements OnInit, OnDestroy {\n private _order: number | null = null;\n\n @Input() set order(v: number | null) {\n this._order = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, true, false);\n }\n\n get order(): number | null {\n return this._order;\n }\n\n ////\n\n private _size: number | null = null;\n\n @Input() set size(v: number | null) {\n this._size = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get size(): number | null {\n return this._size;\n }\n\n ////\n\n private _minSize: number | null = null;\n\n @Input() set minSize(v: number | null) {\n this._minSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get minSize(): number | null {\n return this._minSize;\n }\n\n ////\n\n private _maxSize: number | null = null;\n\n @Input() set maxSize(v: number | null) {\n this._maxSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get maxSize(): number | null {\n return this._maxSize;\n }\n\n ////\n\n private _lockSize = false;\n\n @Input() set lockSize(v: boolean) {\n this._lockSize = getInputBoolean(v);\n\n this.split.updateArea(this, false, true);\n }\n\n get lockSize(): boolean {\n return this._lockSize;\n }\n\n ////\n\n private _visible = true;\n\n @Input() set visible(v: boolean) {\n this._visible = getInputBoolean(v);\n\n if (this._visible) {\n this.split.showArea(this);\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n } else {\n this.split.hideArea(this);\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n }\n }\n\n get visible(): boolean {\n return this._visible;\n }\n\n ////\n\n private transitionListener!: () => void;\n private readonly lockListeners: Array<() => void> = [];\n\n constructor(\n private ngZone: NgZone,\n public elRef: ElementRef,\n private renderer: Renderer2,\n private split: MtxSplit\n ) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane');\n }\n\n public ngOnInit(): void {\n this.split.addArea(this);\n\n this.ngZone.runOutsideAngular(() => {\n this.transitionListener = this.renderer.listen(\n this.elRef.nativeElement,\n 'transitionend',\n (event: TransitionEvent) => {\n // Limit only flex-basis transition to trigger the event\n if (event.propertyName === 'flex-basis') {\n this.split.notify('transitionEnd', -1);\n }\n }\n );\n });\n }\n\n public setStyleOrder(value: number): void {\n this.renderer.setStyle(this.elRef.nativeElement, 'order', value);\n }\n\n public setStyleFlex(\n grow: number,\n shrink: number,\n basis: string,\n isMin: boolean,\n isMax: boolean\n ): void {\n // Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);\n\n if (isMin === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-min');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-min');\n }\n\n if (isMax === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-max');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-max');\n }\n }\n\n public lockEvents(): void {\n this.ngZone.runOutsideAngular(() => {\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false)\n );\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false)\n );\n });\n }\n\n public unlockEvents(): void {\n while (this.lockListeners.length > 0) {\n const fct = this.lockListeners.pop();\n if (fct) {\n fct();\n }\n }\n }\n\n public ngOnDestroy(): void {\n this.unlockEvents();\n\n if (this.transitionListener) {\n this.transitionListener();\n }\n\n this.split.removeArea(this);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MtxSplit } from './split';\nimport { MtxSplitPane } from './split-pane';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [MtxSplit, MtxSplitPane],\n exports: [MtxSplit, MtxSplitPane],\n})\nexport class MtxSplitModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MtxSplit"],"mappings":"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"}
1
+ {"version":3,"file":"mtxSplit.mjs","sources":["../../../projects/extensions/split/utils.ts","../../../projects/extensions/split/split.ts","../../../projects/extensions/split/split.html","../../../projects/extensions/split/split-pane.ts","../../../projects/extensions/split/split-module.ts","../../../projects/extensions/split/mtxSplit.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\n\nimport {\n MtxSplitArea,\n MtxSplitPoint,\n MtxSplitAreaSnapshot,\n MtxSplitSideAbsorptionCapacity,\n MtxSplitAreaAbsorptionCapacity,\n} from './interfaces';\n\nexport function getPointFromEvent(event: MouseEvent | TouchEvent): MtxSplitPoint | null {\n // TouchEvent\n if (\n (event as TouchEvent).changedTouches !== undefined &&\n (event as TouchEvent).changedTouches.length > 0\n ) {\n return {\n x: (event as TouchEvent).changedTouches[0].clientX,\n y: (event as TouchEvent).changedTouches[0].clientY,\n };\n }\n // MouseEvent\n else if (\n (event as MouseEvent).clientX !== undefined &&\n (event as MouseEvent).clientY !== undefined\n ) {\n return {\n x: (event as MouseEvent).clientX,\n y: (event as MouseEvent).clientY,\n };\n }\n return null;\n}\n\nexport function getElementPixelSize(\n elRef: ElementRef,\n direction: 'horizontal' | 'vertical'\n): number {\n const rect = (elRef.nativeElement as HTMLElement).getBoundingClientRect();\n\n return direction === 'horizontal' ? rect.width : rect.height;\n}\n\nexport function getInputBoolean(v: any): boolean {\n return typeof v === 'boolean' ? v : v === 'false' ? false : true;\n}\n\nexport function getInputPositiveNumber<T>(v: any, defaultValue: T): number | T {\n if (v === null || v === undefined) {\n return defaultValue;\n }\n\n v = Number(v);\n return !isNaN(v) && v >= 0 ? v : defaultValue;\n}\n\nexport function isUserSizesValid(\n unit: 'percent' | 'pixel',\n sizes: Array<number>\n): boolean | number | void {\n // All sizes have to be not null and total should be 100\n if (unit === 'percent') {\n const total = sizes.reduce((_total, s) => (s !== null ? _total + s : _total), 0);\n return sizes.every(s => s !== null) && total && total > 99.9 && total < 100.1;\n }\n\n // A size at null is mandatory but only one.\n if (unit === 'pixel') {\n return sizes.filter(s => s === null).length === 1;\n }\n}\n\nexport function getAreaMinSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.minSize === null) {\n return null;\n }\n\n if (a.component.minSize > a.size) {\n return a.size;\n }\n\n return a.component.minSize;\n}\n\nexport function getAreaMaxSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.maxSize === null) {\n return null;\n }\n\n if (a.component.maxSize < a.size) {\n return a.size;\n }\n\n return a.component.maxSize;\n}\n\nexport function getGutterSideAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n sideAreas: Array<MtxSplitAreaSnapshot>,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitSideAbsorptionCapacity {\n return sideAreas.reduce(\n (acc: any, area) => {\n const res = getAreaAbsorptionCapacity(unit, area, acc.remain, allAreasSizePixel);\n acc.list.push(res);\n acc.remain = res && res.pixelRemain;\n return acc;\n },\n { remain: pixels, list: [] }\n );\n}\n\nexport function getAreaAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n // No pain no gain\n if (pixels === 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: areaSnapshot.sizePercentAtStart,\n pixelRemain: 0,\n };\n }\n\n // Area start at zero and need to be reduced, not possible\n if (areaSnapshot.sizePixelAtStart === 0 && pixels < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: 0,\n pixelRemain: pixels,\n };\n }\n\n if (unit === 'percent') {\n return getAreaAbsorptionCapacityPercent(areaSnapshot, pixels, allAreasSizePixel);\n }\n\n if (unit === 'pixel') {\n return getAreaAbsorptionCapacityPixel(areaSnapshot, pixels, allAreasSizePixel);\n }\n}\n\nexport function getAreaAbsorptionCapacityPercent(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n const tempPercentSize = (tempPixelSize / allAreasSizePixel) * 100;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPercentSize > areaSnapshot.area.maxSize) {\n // Use area.area.maxSize as newPercentSize and return calculate pixels remaining\n const maxSizePixel = (areaSnapshot.area.maxSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: maxSizePixel,\n percentAfterAbsorption: areaSnapshot.area.maxSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - maxSizePixel,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize > 100 ? 100 : tempPercentSize,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPercentSize < areaSnapshot.area.minSize) {\n // Use area.area.minSize as newPercentSize and return calculate pixels remaining\n const minSizePixel = (areaSnapshot.area.minSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: minSizePixel,\n percentAfterAbsorption: areaSnapshot.area.minSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - minSizePixel,\n };\n }\n // If reduced under zero > return remaining pixels\n else if (tempPercentSize < 0) {\n // Use 0 as newPercentSize and return calculate pixels remaining\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: 0,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize,\n pixelRemain: 0,\n };\n }\n}\n\nexport function getAreaAbsorptionCapacityPixel(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n containerSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPixelSize > areaSnapshot.area.maxSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.maxSize - areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.maxSize,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPixelSize < areaSnapshot.area.minSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.minSize + pixels - tempPixelSize,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.minSize,\n };\n }\n // If reduced under zero > return remaining pixels\n else if (tempPixelSize < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n}\n\nexport function updateAreaSize(unit: 'percent' | 'pixel', item: MtxSplitAreaAbsorptionCapacity) {\n if (unit === 'percent') {\n item.areaSnapshot.area.size = item.percentAfterAbsorption;\n } else if (unit === 'pixel') {\n // Update size except for the wildcard size area\n if (item.areaSnapshot.area.size !== null) {\n item.areaSnapshot.area.size = item.areaSnapshot.sizePixelAtStart + item.pixelAbsorb;\n }\n }\n}\n","import { NgClass } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n Renderer2,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CanColor, mixinColor } from '@angular/material/core';\nimport { Observable, Subject, Subscriber } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport {\n MtxSplitArea,\n MtxSplitAreaSnapshot,\n MtxSplitDefaultOptions,\n MtxSplitOutputAreaSizes,\n MtxSplitOutputData,\n MtxSplitPoint,\n MtxSplitSnapshot,\n} from './interfaces';\nimport { MtxSplitPane } from './split-pane';\nimport {\n getAreaMaxSize,\n getAreaMinSize,\n getElementPixelSize,\n getGutterSideAbsorptionCapacity,\n getInputBoolean,\n getInputPositiveNumber,\n getPointFromEvent,\n isUserSizesValid,\n updateAreaSize,\n} from './utils';\n\n/** Injection token that can be used to specify default split options. */\nexport const MTX_SPLIT_DEFAULT_OPTIONS = new InjectionToken<MtxSplitDefaultOptions>(\n 'mtx-split-default-options'\n);\n\n// Boilerplate for applying mixins to _MtxSplitBase.\n/** @docs-private */\nconst _MtxSplitBase = mixinColor(\n class {\n constructor(public _elementRef: ElementRef) {}\n }\n);\n\n/**\n * mtx-split\n *\n *\n * PERCENT MODE ([unit]=\"'percent'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 20 30 20 15 15 | <-- [size]=\"x\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * |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)\n * | 152px 228px 152px 114px 114px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n * flex-basis = calc( { area.size }% - { area.size/100 * nbGutter*gutterSize }px );\n *\n *\n * PIXEL MODE ([unit]=\"'pixel'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 100 250 * 150 100 | <-- [size]=\"y\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * | 0 0 100px 0 0 250px 1 1 auto 0 0 150px 0 0 100px | <-- CSS flex property (flex-grow/flex-shrink/flex-basis)\n * | 100px 250px 200px 150px 100px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n *\n */\n\n@Component({\n selector: 'mtx-split',\n exportAs: 'mtxSplit',\n host: {\n class: 'mtx-split',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./split.scss'],\n templateUrl: './split.html',\n inputs: ['color'],\n standalone: true,\n imports: [NgClass],\n})\nexport class MtxSplit extends _MtxSplitBase implements AfterViewInit, OnDestroy, CanColor {\n private _direction: 'horizontal' | 'vertical' = 'horizontal';\n\n @Input() set direction(v: 'horizontal' | 'vertical') {\n this._direction = v === 'vertical' ? 'vertical' : 'horizontal';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._direction}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._direction === 'vertical' ? 'horizontal' : 'vertical'}`\n );\n\n this.build(false, false);\n }\n\n get direction(): 'horizontal' | 'vertical' {\n return this._direction;\n }\n\n ////\n\n private _unit: 'percent' | 'pixel' = 'percent';\n\n @Input() set unit(v: 'percent' | 'pixel') {\n this._unit = v === 'pixel' ? 'pixel' : 'percent';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._unit}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._unit === 'pixel' ? 'percent' : 'pixel'}`\n );\n\n this.build(false, true);\n }\n\n get unit(): 'percent' | 'pixel' {\n return this._unit;\n }\n\n ////\n\n private _gutterSize = 4;\n\n @Input() set gutterSize(v: number) {\n this._gutterSize = getInputPositiveNumber(v, 11);\n\n this.build(false, false);\n }\n\n get gutterSize(): number {\n return this._gutterSize;\n }\n\n ////\n\n private _gutterStep = 1;\n\n @Input() set gutterStep(v: number) {\n this._gutterStep = getInputPositiveNumber(v, 1);\n }\n\n get gutterStep(): number {\n return this._gutterStep;\n }\n\n ////\n\n private _restrictMove = false;\n\n @Input() set restrictMove(v: boolean) {\n this._restrictMove = getInputBoolean(v);\n }\n\n get restrictMove(): boolean {\n return this._restrictMove;\n }\n\n ////\n\n private _useTransition = false;\n\n @Input() set useTransition(v: boolean) {\n this._useTransition = getInputBoolean(v);\n\n if (this._useTransition) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-transition');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-transition');\n }\n }\n\n get useTransition(): boolean {\n return this._useTransition;\n }\n\n ////\n\n private _disabled = false;\n\n @Input() set disabled(v: boolean) {\n this._disabled = getInputBoolean(v);\n\n if (this._disabled) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-disabled');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-disabled');\n }\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n ////\n\n private _dir: 'ltr' | 'rtl' = 'ltr';\n\n @Input() set dir(v: 'ltr' | 'rtl') {\n this._dir = v === 'rtl' ? 'rtl' : 'ltr';\n\n this.renderer.setAttribute(this.elRef.nativeElement, 'dir', this._dir);\n }\n\n get dir(): 'ltr' | 'rtl' {\n return this._dir;\n }\n\n ////\n\n private _gutterDblClickDuration = 0;\n\n @Input() set gutterDblClickDuration(v: number) {\n this._gutterDblClickDuration = getInputPositiveNumber(v, 0);\n }\n\n get gutterDblClickDuration(): number {\n return this._gutterDblClickDuration;\n }\n\n ////\n\n @Output() dragStart = new EventEmitter<MtxSplitOutputData>(false);\n @Output() dragEnd = new EventEmitter<MtxSplitOutputData>(false);\n @Output() gutterClick = new EventEmitter<MtxSplitOutputData>(false);\n @Output() gutterDblClick = new EventEmitter<MtxSplitOutputData>(false);\n\n private transitionEndSubscriber!: Subscriber<MtxSplitOutputAreaSizes>;\n @Output() get transitionEnd(): Observable<MtxSplitOutputAreaSizes> {\n return new Observable(subscriber => (this.transitionEndSubscriber = subscriber)).pipe(\n debounceTime<any>(20)\n );\n }\n\n private dragProgressSubject: Subject<MtxSplitOutputData> = new Subject();\n dragProgress$: Observable<MtxSplitOutputData> = this.dragProgressSubject.asObservable();\n\n ////\n\n private isDragging = false;\n private dragListeners: Array<() => void> = [];\n private snapshot: MtxSplitSnapshot | null = null;\n private startPoint: MtxSplitPoint | null = null;\n private endPoint: MtxSplitPoint | null = null;\n\n public readonly displayedAreas: Array<MtxSplitArea> = [];\n private readonly hidedAreas: Array<MtxSplitArea> = [];\n\n @ViewChildren('gutterEls') private gutterEls!: QueryList<ElementRef>;\n\n constructor(\n private ngZone: NgZone,\n private elRef: ElementRef,\n private cdRef: ChangeDetectorRef,\n private renderer: Renderer2,\n @Optional()\n @Inject(MTX_SPLIT_DEFAULT_OPTIONS)\n protected _defaultOptions?: MtxSplitDefaultOptions\n ) {\n super(elRef);\n\n this.color = _defaultOptions?.color ?? 'primary';\n this.direction = _defaultOptions?.direction ?? 'horizontal';\n this.dir = _defaultOptions?.dir ?? 'ltr';\n this.unit = _defaultOptions?.unit ?? 'percent';\n this.gutterDblClickDuration = _defaultOptions?.gutterDblClickDuration ?? 0;\n this.gutterSize = _defaultOptions?.gutterSize ?? 4;\n this.gutterStep = _defaultOptions?.gutterStep ?? 1;\n this.restrictMove = _defaultOptions?.restrictMove ?? false;\n this.useTransition = _defaultOptions?.useTransition ?? false;\n }\n\n public ngAfterViewInit() {\n this.ngZone.runOutsideAngular(() => {\n // To avoid transition at first rendering\n setTimeout(() => this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-init'));\n });\n }\n\n private getNbGutters(): number {\n return this.displayedAreas.length === 0 ? 0 : this.displayedAreas.length - 1;\n }\n\n public addArea(component: MtxSplitPane): void {\n const newArea: MtxSplitArea = {\n component,\n order: 0,\n size: 0,\n minSize: null,\n maxSize: null,\n };\n\n if (component.visible === true) {\n this.displayedAreas.push(newArea);\n\n this.build(true, true);\n } else {\n this.hidedAreas.push(newArea);\n }\n }\n\n public removeArea(component: MtxSplitPane): void {\n if (this.displayedAreas.some(a => a.component === component)) {\n const area = this.displayedAreas.find(a => a.component === component) as MtxSplitArea;\n this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n\n this.build(true, true);\n } else if (this.hidedAreas.some(a => a.component === component)) {\n const area = this.hidedAreas.find(a => a.component === component) as MtxSplitArea;\n this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n }\n }\n\n public updateArea(component: MtxSplitPane, resetOrders: boolean, resetSizes: boolean): void {\n if (component.visible === true) {\n this.build(resetOrders, resetSizes);\n }\n }\n\n public showArea(component: MtxSplitPane): void {\n const area = this.hidedAreas.find(a => a.component === component);\n if (area === undefined) {\n return;\n }\n\n const areas = this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n this.displayedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n public hideArea(comp: MtxSplitPane): void {\n const area = this.displayedAreas.find(a => a.component === comp);\n if (area === undefined) {\n return;\n }\n\n const areas = this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n areas.forEach(_area => {\n _area.order = 0;\n _area.size = 0;\n });\n this.hidedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n public getVisibleAreaSizes(): MtxSplitOutputAreaSizes {\n return this.displayedAreas.map(a => (a.size === null ? '*' : a.size));\n }\n\n public setVisibleAreaSizes(sizes: MtxSplitOutputAreaSizes): boolean {\n if (sizes.length !== this.displayedAreas.length) {\n return false;\n }\n\n const formatedSizes = sizes.map(s => getInputPositiveNumber(s, null)) as number[];\n const isValid = isUserSizesValid(this.unit, formatedSizes);\n\n if (isValid === false) {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.displayedAreas.forEach((area, i) => (area.component._size = formatedSizes[i]));\n\n this.build(false, true);\n return true;\n }\n\n private build(resetOrders: boolean, resetSizes: boolean): void {\n this.stopDragging();\n\n // ¤ AREAS ORDER\n\n if (resetOrders === true) {\n // If user provided 'order' for each area, use it to sort them.\n if (this.displayedAreas.every(a => a.component.order !== null)) {\n this.displayedAreas.sort(\n (a, b) => (a.component.order as number) - (b.component.order as number)\n );\n }\n\n // Then set real order with multiples of 2, numbers between will be used by gutters.\n this.displayedAreas.forEach((area, i) => {\n area.order = i * 2;\n area.component.setStyleOrder(area.order);\n });\n }\n\n // ¤ AREAS SIZE\n\n if (resetSizes === true) {\n const useUserSizes = isUserSizesValid(\n this.unit,\n this.displayedAreas.map(a => a.component.size) as number[]\n );\n\n switch (this.unit) {\n case 'percent': {\n const defaultSize = 100 / this.displayedAreas.length;\n\n this.displayedAreas.forEach(area => {\n area.size = useUserSizes ? (area.component.size as number) : defaultSize;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n break;\n }\n case 'pixel': {\n if (useUserSizes) {\n this.displayedAreas.forEach(area => {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n } else {\n const wildcardSizeAreas = this.displayedAreas.filter(a => a.component.size === null);\n\n // No wildcard area > Need to select one arbitrarily > first\n if (wildcardSizeAreas.length === 0 && this.displayedAreas.length > 0) {\n this.displayedAreas.forEach((area, i) => {\n area.size = i === 0 ? null : area.component.size;\n area.minSize = i === 0 ? null : getAreaMinSize(area);\n area.maxSize = i === 0 ? null : getAreaMaxSize(area);\n });\n }\n // More than one wildcard area > Need to keep only one arbitrarly > first\n else if (wildcardSizeAreas.length > 1) {\n let alreadyGotOne = false;\n this.displayedAreas.forEach(area => {\n if (area.component.size === null) {\n if (alreadyGotOne === false) {\n area.size = null;\n area.minSize = null;\n area.maxSize = null;\n alreadyGotOne = true;\n } else {\n area.size = 100;\n area.minSize = null;\n area.maxSize = null;\n }\n } else {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n }\n });\n }\n }\n break;\n }\n }\n }\n\n this.refreshStyleSizes();\n this.cdRef.markForCheck();\n }\n\n private refreshStyleSizes(): void {\n ///////////////////////////////////////////\n // PERCENT MODE\n if (this.unit === 'percent') {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n this.displayedAreas[0].component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each percent basis\n else {\n const sumGutterSize = this.getNbGutters() * this.gutterSize;\n\n this.displayedAreas.forEach(area => {\n area.component.setStyleFlex(\n 0,\n 0,\n `calc( ${area.size}% - ${((area.size as number) / 100) * sumGutterSize}px )`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n });\n }\n }\n ///////////////////////////////////////////\n // PIXEL MODE\n else if (this.unit === 'pixel') {\n this.displayedAreas.forEach(area => {\n // Area with wildcard size\n if (area.size === null) {\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(1, 1, `100%`, false, false);\n } else {\n area.component.setStyleFlex(1, 1, `auto`, false, false);\n }\n }\n // Area with pixel size\n else {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each pixel basis\n else {\n area.component.setStyleFlex(\n 0,\n 0,\n `${area.size}px`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n }\n }\n });\n }\n }\n\n _clickTimeout: number | null = null;\n\n public clickGutter(event: MouseEvent | TouchEvent, gutterNum: number): void {\n const tempPoint = getPointFromEvent(event) as MtxSplitPoint;\n\n // Be sure mouseup/touchend happened at same point as mousedown/touchstart to trigger click/dblclick\n if (this.startPoint && this.startPoint.x === tempPoint.x && this.startPoint.y === tempPoint.y) {\n // If timeout in progress and new click > clearTimeout & dblClickEvent\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n this.notify('dblclick', gutterNum);\n this.stopDragging();\n }\n // Else start timeout to call clickEvent at end\n else {\n this._clickTimeout = window.setTimeout(() => {\n this._clickTimeout = null;\n this.notify('click', gutterNum);\n this.stopDragging();\n }, this.gutterDblClickDuration);\n }\n }\n }\n\n public startDragging(\n event: MouseEvent | TouchEvent,\n gutterOrder: number,\n gutterNum: number\n ): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.startPoint = getPointFromEvent(event);\n if (this.startPoint === null || this.disabled === true) {\n return;\n }\n\n this.snapshot = {\n gutterNum,\n lastSteppedOffset: 0,\n allAreasSizePixel:\n getElementPixelSize(this.elRef, this.direction) - this.getNbGutters() * this.gutterSize,\n allInvolvedAreasSizePercent: 100,\n areasBeforeGutter: [],\n areasAfterGutter: [],\n };\n\n this.displayedAreas.forEach(area => {\n const areaSnapshot: MtxSplitAreaSnapshot = {\n area,\n sizePixelAtStart: getElementPixelSize(area.component.elRef, this.direction),\n sizePercentAtStart: (this.unit === 'percent' ? area.size : -1) as number, // If pixel mode, anyway, will not be used.\n };\n\n if (area.order < gutterOrder) {\n if (this.restrictMove === true) {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter = [areaSnapshot];\n } else {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter.unshift(areaSnapshot);\n }\n } else if (area.order > gutterOrder) {\n if (this.restrictMove === true) {\n if ((this.snapshot as MtxSplitSnapshot).areasAfterGutter.length === 0) {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter = [areaSnapshot];\n }\n } else {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter.push(areaSnapshot);\n }\n }\n });\n\n this.snapshot.allInvolvedAreasSizePercent = [\n ...this.snapshot.areasBeforeGutter,\n ...this.snapshot.areasAfterGutter,\n ].reduce((t, a) => t + a.sizePercentAtStart, 0);\n\n if (\n this.snapshot.areasBeforeGutter.length === 0 ||\n this.snapshot.areasAfterGutter.length === 0\n ) {\n return;\n }\n\n this.dragListeners.push(\n this.renderer.listen('document', 'mouseup', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchend', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchcancel', this.stopDragging.bind(this))\n );\n\n this.ngZone.runOutsideAngular(() => {\n this.dragListeners.push(\n this.renderer.listen('document', 'mousemove', this.dragEvent.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchmove', this.dragEvent.bind(this))\n );\n });\n\n this.displayedAreas.forEach(area => area.component.lockEvents());\n\n this.isDragging = true;\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.addClass(\n this.gutterEls.toArray()[this.snapshot.gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n\n this.notify('start', this.snapshot.gutterNum);\n }\n\n private dragEvent(event: MouseEvent | TouchEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.endPoint = getPointFromEvent(event);\n if (this.endPoint === null) {\n return;\n }\n\n // Calculate steppedOffset\n\n let offset =\n this.direction === 'horizontal'\n ? (this.startPoint as MtxSplitPoint).x - this.endPoint.x\n : (this.startPoint as MtxSplitPoint).y - this.endPoint.y;\n if (this.dir === 'rtl' && this.direction === 'horizontal') {\n offset = -offset;\n }\n const steppedOffset = Math.round(offset / this.gutterStep) * this.gutterStep;\n\n if (steppedOffset === (this.snapshot as MtxSplitSnapshot).lastSteppedOffset) {\n return;\n }\n\n (this.snapshot as MtxSplitSnapshot).lastSteppedOffset = steppedOffset;\n\n // Need to know if each gutter side areas could reacts to steppedOffset\n\n let areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n let areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n\n // Each gutter side areas can't absorb all offset\n if (areasBefore.remain !== 0 && areasAfter.remain !== 0) {\n if (Math.abs(areasBefore.remain) === Math.abs(areasAfter.remain)) {\n /** */\n } else if (Math.abs(areasBefore.remain) > Math.abs(areasAfter.remain)) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n } else {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n }\n // Areas before gutter can't absorbs all offset > need to recalculate sizes for areas after gutter.\n else if (areasBefore.remain !== 0) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n // Areas after gutter can't absorbs all offset > need to recalculate sizes for areas before gutter.\n else if (areasAfter.remain !== 0) {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n\n if (this.unit === 'percent') {\n // Hack because of browser messing up with sizes using calc(X% - Ypx) -> el.getBoundingClientRect()\n // If not there, playing with gutters makes total going down to 99.99875% then 99.99286%, 99.98986%,..\n const all = [...areasBefore.list, ...areasAfter.list];\n const areaToReset = all.find(\n a =>\n a.percentAfterAbsorption !== 0 &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.minSize &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.maxSize\n );\n\n if (areaToReset) {\n areaToReset.percentAfterAbsorption =\n (this.snapshot as MtxSplitSnapshot).allInvolvedAreasSizePercent -\n all\n .filter(a => a !== areaToReset)\n .reduce((total, a) => total + a.percentAfterAbsorption, 0);\n }\n }\n\n // Now we know areas could absorb steppedOffset, time to really update sizes\n\n areasBefore.list.forEach(item => updateAreaSize(this.unit, item));\n areasAfter.list.forEach(item => updateAreaSize(this.unit, item));\n\n this.refreshStyleSizes();\n this.notify('progress', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n private stopDragging(event?: Event): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.displayedAreas.forEach(area => area.component.unlockEvents());\n\n while (this.dragListeners.length > 0) {\n const fct = this.dragListeners.pop();\n if (fct) {\n fct();\n }\n }\n\n // Warning: Have to be before \"notify('end')\"\n // because \"notify('end')\"\" can be linked to \"[size]='x'\" > \"build()\" > \"stopDragging()\"\n this.isDragging = false;\n\n // If moved from starting point, notify end\n if (\n this.endPoint &&\n ((this.startPoint as MtxSplitPoint).x !== this.endPoint.x ||\n (this.startPoint as MtxSplitPoint).y !== this.endPoint.y)\n ) {\n this.notify('end', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.removeClass(\n this.gutterEls.toArray()[(this.snapshot as MtxSplitSnapshot).gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n this.snapshot = null;\n\n // Needed to let (click)=\"clickGutter(...)\" event run and verify if mouse moved or not\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this.startPoint = null;\n this.endPoint = null;\n });\n });\n }\n\n public notify(\n type: 'start' | 'progress' | 'end' | 'click' | 'dblclick' | 'transitionEnd',\n gutterNum: number\n ): void {\n const sizes = this.getVisibleAreaSizes();\n\n if (type === 'start') {\n this.dragStart.emit({ gutterNum, sizes });\n } else if (type === 'end') {\n this.dragEnd.emit({ gutterNum, sizes });\n } else if (type === 'click') {\n this.gutterClick.emit({ gutterNum, sizes });\n } else if (type === 'dblclick') {\n this.gutterDblClick.emit({ gutterNum, sizes });\n } else if (type === 'transitionEnd') {\n if (this.transitionEndSubscriber) {\n this.ngZone.run(() => this.transitionEndSubscriber.next(sizes));\n }\n } else if (type === 'progress') {\n // Stay outside zone to allow users do what they want about change detection mechanism.\n this.dragProgressSubject.next({ gutterNum, sizes });\n }\n }\n\n public ngOnDestroy(): void {\n this.stopDragging();\n }\n}\n","<ng-content></ng-content>\r\n@for (area of displayedAreas; track area; let index = $index; let last = $last) {\r\n @if (!last) {\r\n <div #gutterEls class=\"mtx-split-gutter\" [ngClass]=\"['mat-' + color]\"\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 }\r\n}\r\n","import { Directive, Input, ElementRef, Renderer2, OnInit, OnDestroy, NgZone } from '@angular/core';\n\nimport { MtxSplit } from './split';\nimport { getInputPositiveNumber, getInputBoolean } from './utils';\n\n@Directive({\n selector: 'mtx-split-pane, [mtx-split-pane]',\n exportAs: 'mtxSplitPane',\n standalone: true,\n})\nexport class MtxSplitPane implements OnInit, OnDestroy {\n private _order: number | null = null;\n\n @Input() set order(v: number | null) {\n this._order = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, true, false);\n }\n\n get order(): number | null {\n return this._order;\n }\n\n ////\n\n private _size: number | null = null;\n\n @Input() set size(v: number | null) {\n this._size = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get size(): number | null {\n return this._size;\n }\n\n ////\n\n private _minSize: number | null = null;\n\n @Input() set minSize(v: number | null) {\n this._minSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get minSize(): number | null {\n return this._minSize;\n }\n\n ////\n\n private _maxSize: number | null = null;\n\n @Input() set maxSize(v: number | null) {\n this._maxSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get maxSize(): number | null {\n return this._maxSize;\n }\n\n ////\n\n private _lockSize = false;\n\n @Input() set lockSize(v: boolean) {\n this._lockSize = getInputBoolean(v);\n\n this.split.updateArea(this, false, true);\n }\n\n get lockSize(): boolean {\n return this._lockSize;\n }\n\n ////\n\n private _visible = true;\n\n @Input() set visible(v: boolean) {\n this._visible = getInputBoolean(v);\n\n if (this._visible) {\n this.split.showArea(this);\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n } else {\n this.split.hideArea(this);\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n }\n }\n\n get visible(): boolean {\n return this._visible;\n }\n\n ////\n\n private transitionListener!: () => void;\n private readonly lockListeners: Array<() => void> = [];\n\n constructor(\n private ngZone: NgZone,\n public elRef: ElementRef,\n private renderer: Renderer2,\n private split: MtxSplit\n ) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane');\n }\n\n public ngOnInit(): void {\n this.split.addArea(this);\n\n this.ngZone.runOutsideAngular(() => {\n this.transitionListener = this.renderer.listen(\n this.elRef.nativeElement,\n 'transitionend',\n (event: TransitionEvent) => {\n // Limit only flex-basis transition to trigger the event\n if (event.propertyName === 'flex-basis') {\n this.split.notify('transitionEnd', -1);\n }\n }\n );\n });\n }\n\n public setStyleOrder(value: number): void {\n this.renderer.setStyle(this.elRef.nativeElement, 'order', value);\n }\n\n public setStyleFlex(\n grow: number,\n shrink: number,\n basis: string,\n isMin: boolean,\n isMax: boolean\n ): void {\n // Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);\n\n if (isMin === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-min');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-min');\n }\n\n if (isMax === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-max');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-max');\n }\n }\n\n public lockEvents(): void {\n this.ngZone.runOutsideAngular(() => {\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false)\n );\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false)\n );\n });\n }\n\n public unlockEvents(): void {\n while (this.lockListeners.length > 0) {\n const fct = this.lockListeners.pop();\n if (fct) {\n fct();\n }\n }\n }\n\n public ngOnDestroy(): void {\n this.unlockEvents();\n\n if (this.transitionListener) {\n this.transitionListener();\n }\n\n this.split.removeArea(this);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MtxSplit } from './split';\nimport { MtxSplitPane } from './split-pane';\n\n@NgModule({\n imports: [CommonModule, MtxSplit, MtxSplitPane],\n exports: [MtxSplit, MtxSplitPane],\n})\nexport class MtxSplitModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MtxSplit"],"mappings":"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"}