@mintplayer/ng-bootstrap 21.0.0 → 21.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 (155) hide show
  1. package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs +33 -46
  2. package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs.map +1 -1
  3. package/fesm2022/mintplayer-ng-bootstrap-alert.mjs +12 -30
  4. package/fesm2022/mintplayer-ng-bootstrap-alert.mjs.map +1 -1
  5. package/fesm2022/mintplayer-ng-bootstrap-badge.mjs +6 -18
  6. package/fesm2022/mintplayer-ng-bootstrap-badge.mjs.map +1 -1
  7. package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs +31 -65
  8. package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs.map +1 -1
  9. package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs +200 -132
  10. package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs.map +1 -1
  11. package/fesm2022/mintplayer-ng-bootstrap-close.mjs +5 -7
  12. package/fesm2022/mintplayer-ng-bootstrap-close.mjs.map +1 -1
  13. package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs +14 -17
  14. package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs.map +1 -1
  15. package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs +231 -347
  16. package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs.map +1 -1
  17. package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs +43 -39
  18. package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs.map +1 -1
  19. package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs +7 -35
  20. package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs.map +1 -1
  21. package/fesm2022/mintplayer-ng-bootstrap-dock.mjs +1 -0
  22. package/fesm2022/mintplayer-ng-bootstrap-dock.mjs.map +1 -1
  23. package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs +1 -1
  24. package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs.map +1 -1
  25. package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs +46 -86
  26. package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs.map +1 -1
  27. package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs +7 -7
  28. package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs.map +1 -1
  29. package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs +7 -6
  30. package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs.map +1 -1
  31. package/fesm2022/mintplayer-ng-bootstrap-grid.mjs +32 -74
  32. package/fesm2022/mintplayer-ng-bootstrap-grid.mjs.map +1 -1
  33. package/fesm2022/mintplayer-ng-bootstrap-let.mjs +6 -7
  34. package/fesm2022/mintplayer-ng-bootstrap-let.mjs.map +1 -1
  35. package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs +18 -18
  36. package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs.map +1 -1
  37. package/fesm2022/mintplayer-ng-bootstrap-modal.mjs +20 -22
  38. package/fesm2022/mintplayer-ng-bootstrap-modal.mjs.map +1 -1
  39. package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs +16 -10
  40. package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs.map +1 -1
  41. package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs +8 -28
  42. package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs.map +1 -1
  43. package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs +204 -265
  44. package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs.map +1 -1
  45. package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs +8 -21
  46. package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs.map +1 -1
  47. package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs +43 -38
  48. package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs.map +1 -1
  49. package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs +6 -6
  50. package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs.map +1 -1
  51. package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs +59 -120
  52. package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs.map +1 -1
  53. package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs +11 -25
  54. package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs.map +1 -1
  55. package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs +8 -28
  56. package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs.map +1 -1
  57. package/fesm2022/mintplayer-ng-bootstrap-popover.mjs +67 -103
  58. package/fesm2022/mintplayer-ng-bootstrap-popover.mjs.map +1 -1
  59. package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs +34 -63
  60. package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs.map +1 -1
  61. package/fesm2022/mintplayer-ng-bootstrap-range.mjs +6 -6
  62. package/fesm2022/mintplayer-ng-bootstrap-range.mjs.map +1 -1
  63. package/fesm2022/mintplayer-ng-bootstrap-rating.mjs +19 -47
  64. package/fesm2022/mintplayer-ng-bootstrap-rating.mjs.map +1 -1
  65. package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs +35 -41
  66. package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs.map +1 -1
  67. package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs +205 -779
  68. package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs.map +1 -1
  69. package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs +34 -39
  70. package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs.map +1 -1
  71. package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs +74 -100
  72. package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs.map +1 -1
  73. package/fesm2022/mintplayer-ng-bootstrap-select.mjs +37 -79
  74. package/fesm2022/mintplayer-ng-bootstrap-select.mjs.map +1 -1
  75. package/fesm2022/mintplayer-ng-bootstrap-select2.mjs +78 -45
  76. package/fesm2022/mintplayer-ng-bootstrap-select2.mjs.map +1 -1
  77. package/fesm2022/mintplayer-ng-bootstrap-shell.mjs +16 -26
  78. package/fesm2022/mintplayer-ng-bootstrap-shell.mjs.map +1 -1
  79. package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs +14 -40
  80. package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs.map +1 -1
  81. package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs +8 -32
  82. package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs.map +1 -1
  83. package/fesm2022/mintplayer-ng-bootstrap-splitter.mjs +70 -76
  84. package/fesm2022/mintplayer-ng-bootstrap-splitter.mjs.map +1 -1
  85. package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs +11 -11
  86. package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs.map +1 -1
  87. package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs +53 -99
  88. package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs.map +1 -1
  89. package/fesm2022/mintplayer-ng-bootstrap-table.mjs +7 -38
  90. package/fesm2022/mintplayer-ng-bootstrap-table.mjs.map +1 -1
  91. package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs +23 -49
  92. package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs.map +1 -1
  93. package/fesm2022/mintplayer-ng-bootstrap-toast.mjs +33 -38
  94. package/fesm2022/mintplayer-ng-bootstrap-toast.mjs.map +1 -1
  95. package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs +45 -98
  96. package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs.map +1 -1
  97. package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs +12 -24
  98. package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs.map +1 -1
  99. package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs +21 -43
  100. package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs.map +1 -1
  101. package/fesm2022/mintplayer-ng-bootstrap-trust-html.mjs +6 -6
  102. package/fesm2022/mintplayer-ng-bootstrap-trust-html.mjs.map +1 -1
  103. package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs +29 -49
  104. package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs.map +1 -1
  105. package/package.json +5 -5
  106. package/types/mintplayer-ng-bootstrap-accordion.d.ts +11 -15
  107. package/types/mintplayer-ng-bootstrap-alert.d.ts +4 -9
  108. package/types/mintplayer-ng-bootstrap-badge.d.ts +5 -9
  109. package/types/mintplayer-ng-bootstrap-calendar.d.ts +14 -22
  110. package/types/mintplayer-ng-bootstrap-carousel.d.ts +41 -35
  111. package/types/mintplayer-ng-bootstrap-close.d.ts +1 -2
  112. package/types/mintplayer-ng-bootstrap-code-snippet.d.ts +4 -5
  113. package/types/mintplayer-ng-bootstrap-color-picker.d.ts +70 -97
  114. package/types/mintplayer-ng-bootstrap-datatable.d.ts +11 -11
  115. package/types/mintplayer-ng-bootstrap-datepicker.d.ts +6 -13
  116. package/types/mintplayer-ng-bootstrap-dropdown.d.ts +14 -20
  117. package/types/mintplayer-ng-bootstrap-enhanced-paste.d.ts +1 -3
  118. package/types/mintplayer-ng-bootstrap-file-upload.d.ts +1 -1
  119. package/types/mintplayer-ng-bootstrap-grid.d.ts +14 -26
  120. package/types/mintplayer-ng-bootstrap-let.d.ts +0 -2
  121. package/types/mintplayer-ng-bootstrap-markdown.d.ts +1 -5
  122. package/types/mintplayer-ng-bootstrap-modal.d.ts +3 -6
  123. package/types/mintplayer-ng-bootstrap-multiselect.d.ts +6 -6
  124. package/types/mintplayer-ng-bootstrap-navbar-toggler.d.ts +5 -11
  125. package/types/mintplayer-ng-bootstrap-navbar.d.ts +74 -80
  126. package/types/mintplayer-ng-bootstrap-navigation-lock.d.ts +2 -4
  127. package/types/mintplayer-ng-bootstrap-offcanvas.d.ts +12 -14
  128. package/types/mintplayer-ng-bootstrap-ordinal-number.d.ts +1 -2
  129. package/types/mintplayer-ng-bootstrap-pagination.d.ts +17 -31
  130. package/types/mintplayer-ng-bootstrap-placeholder.d.ts +3 -8
  131. package/types/mintplayer-ng-bootstrap-playlist-toggler.d.ts +5 -11
  132. package/types/mintplayer-ng-bootstrap-popover.d.ts +15 -23
  133. package/types/mintplayer-ng-bootstrap-progress-bar.d.ts +19 -22
  134. package/types/mintplayer-ng-bootstrap-range.d.ts +1 -2
  135. package/types/mintplayer-ng-bootstrap-rating.d.ts +8 -14
  136. package/types/mintplayer-ng-bootstrap-resizable.d.ts +7 -11
  137. package/types/mintplayer-ng-bootstrap-scheduler.d.ts +132 -220
  138. package/types/mintplayer-ng-bootstrap-scrollspy.d.ts +14 -15
  139. package/types/mintplayer-ng-bootstrap-searchbox.d.ts +20 -27
  140. package/types/mintplayer-ng-bootstrap-select.d.ts +13 -23
  141. package/types/mintplayer-ng-bootstrap-select2.d.ts +16 -14
  142. package/types/mintplayer-ng-bootstrap-shell.d.ts +6 -12
  143. package/types/mintplayer-ng-bootstrap-signature-pad.d.ts +7 -12
  144. package/types/mintplayer-ng-bootstrap-spinner.d.ts +8 -16
  145. package/types/mintplayer-ng-bootstrap-splitter.d.ts +21 -27
  146. package/types/mintplayer-ng-bootstrap-sticky-footer.d.ts +3 -3
  147. package/types/mintplayer-ng-bootstrap-tab-control.d.ts +29 -37
  148. package/types/mintplayer-ng-bootstrap-table.d.ts +6 -13
  149. package/types/mintplayer-ng-bootstrap-timepicker.d.ts +7 -14
  150. package/types/mintplayer-ng-bootstrap-toast.d.ts +5 -10
  151. package/types/mintplayer-ng-bootstrap-toggle-button.d.ts +22 -36
  152. package/types/mintplayer-ng-bootstrap-tooltip.d.ts +4 -7
  153. package/types/mintplayer-ng-bootstrap-treeview.d.ts +10 -15
  154. package/types/mintplayer-ng-bootstrap-trust-html.d.ts +0 -2
  155. package/types/mintplayer-ng-bootstrap-typeahead.d.ts +14 -17
@@ -1,29 +1,15 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, HostListener, HostBinding, ViewChild, Input, Output, Component } from '@angular/core';
3
- import { BehaviorSubject } from 'rxjs';
4
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
2
+ import { model, input, HostListener, HostBinding, ViewChild, ChangeDetectionStrategy, Component } from '@angular/core';
5
3
 
6
4
  class BsSignaturePadComponent {
7
5
  constructor() {
8
- //#region Signature
9
- this.signature$ = new BehaviorSubject({ strokes: [] });
10
- this.signatureChange = new EventEmitter();
11
- //#endregion
12
- this.width = 500;
13
- this.height = 300;
6
+ this.signature = model({ strokes: [] }, ...(ngDevMode ? [{ debugName: "signature" }] : []));
7
+ this.width = input(500, ...(ngDevMode ? [{ debugName: "width" }] : []));
8
+ this.height = input(300, ...(ngDevMode ? [{ debugName: "height" }] : []));
14
9
  this.classes = true;
15
10
  this.isDrawing = false;
16
11
  this.context = null;
17
12
  this.minHeight = 5;
18
- this.signature$.pipe(takeUntilDestroyed()).subscribe((signature) => {
19
- this.signatureChange.emit(signature);
20
- });
21
- }
22
- get signature() {
23
- return this.signature$.value;
24
- }
25
- set signature(value) {
26
- this.signature$.next(value);
27
13
  }
28
14
  ngAfterViewInit() {
29
15
  if (typeof window !== 'undefined') {
@@ -33,16 +19,18 @@ class BsSignaturePadComponent {
33
19
  onTouchMove(ev) {
34
20
  if (this.isDrawing) {
35
21
  ev.preventDefault();
22
+ ev.stopPropagation();
36
23
  }
37
24
  }
38
25
  onPointerStart(ev) {
39
26
  ev.preventDefault();
40
27
  this.isDrawing = true;
41
28
  if (this.context) {
42
- this.signature.strokes.push({
29
+ const sig = this.signature();
30
+ sig.strokes.push({
43
31
  points: [{ x: ev.offsetX, y: ev.offsetY }]
44
32
  });
45
- this.signatureChange.emit(this.signature);
33
+ this.signature.set({ ...sig });
46
34
  this.context.fillStyle = 'black';
47
35
  this.context.beginPath();
48
36
  this.context.moveTo(ev.offsetX, ev.offsetY);
@@ -51,14 +39,9 @@ class BsSignaturePadComponent {
51
39
  onPointerMove(ev) {
52
40
  if (this.isDrawing && this.context) {
53
41
  ev.preventDefault();
54
- // this.context.moveTo(this.points.at(-1)!.x, this.points.at(-1)!.y);
55
- // // ctx.arc(x, y, width, 0, 2 * Math.PI, false);
56
- // // this.context.arc(ev.offsetX, ev.offsetY, 2, 0, 2 * Math.PI, false);
57
- // // this.context.arcTo(ev.offsetX, ev.offsetY,)
58
- // this.context.closePath();
59
- // this.context.fill();
60
- this.signature.strokes.at(-1)?.points.push({ x: ev.offsetX, y: ev.offsetY });
61
- this.signatureChange.emit(this.signature);
42
+ const sig = this.signature();
43
+ sig.strokes.at(-1)?.points.push({ x: ev.offsetX, y: ev.offsetY });
44
+ this.signature.set({ ...sig });
62
45
  this.context.lineTo(ev.offsetX, ev.offsetY);
63
46
  this.context.stroke();
64
47
  }
@@ -67,24 +50,15 @@ class BsSignaturePadComponent {
67
50
  if (this.isDrawing && this.context) {
68
51
  ev.preventDefault();
69
52
  this.isDrawing = false;
70
- this.signatureChange.emit(this.signature);
71
53
  }
72
54
  }
73
55
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSignaturePadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
74
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: BsSignaturePadComponent, isStandalone: true, selector: "bs-signature-pad", inputs: { signature: "signature", width: "width", height: "height" }, outputs: { signatureChange: "signatureChange" }, host: { listeners: { "touchmove": "onTouchMove($event)", "pointerdown": "onPointerStart($event)", "pointermove": "onPointerMove($event)", "window:pointerup": "onPointerEnd($event)" }, properties: { "class.border": "this.classes", "class.d-inline-block": "this.classes", "style.min-height.rem": "this.minHeight" } }, viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }], ngImport: i0, template: "<canvas [width]=\"width\" [height]=\"height\" class=\"d-block\" #canvas></canvas>", styles: [""] }); }
56
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.6", type: BsSignaturePadComponent, isStandalone: true, selector: "bs-signature-pad", inputs: { signature: { classPropertyName: "signature", publicName: "signature", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { signature: "signatureChange" }, host: { listeners: { "touchmove": "onTouchMove($event)", "pointerdown": "onPointerStart($event)", "pointermove": "onPointerMove($event)", "window:pointerup": "onPointerEnd($event)" }, properties: { "class.border": "this.classes", "class.d-inline-block": "this.classes", "style.min-height.rem": "this.minHeight" } }, viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }], ngImport: i0, template: "<canvas [width]=\"width()\" [height]=\"height()\" class=\"d-block\" #canvas></canvas>", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
75
57
  }
76
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSignaturePadComponent, decorators: [{
77
59
  type: Component,
78
- args: [{ selector: 'bs-signature-pad', standalone: true, template: "<canvas [width]=\"width\" [height]=\"height\" class=\"d-block\" #canvas></canvas>" }]
79
- }], ctorParameters: () => [], propDecorators: { signatureChange: [{
80
- type: Output
81
- }], signature: [{
82
- type: Input
83
- }], width: [{
84
- type: Input
85
- }], height: [{
86
- type: Input
87
- }], classes: [{
60
+ args: [{ selector: 'bs-signature-pad', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<canvas [width]=\"width()\" [height]=\"height()\" class=\"d-block\" #canvas></canvas>" }]
61
+ }], propDecorators: { signature: [{ type: i0.Input, args: [{ isSignal: true, alias: "signature", required: false }] }, { type: i0.Output, args: ["signatureChange"] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], classes: [{
88
62
  type: HostBinding,
89
63
  args: ['class.border']
90
64
  }, {
@@ -1 +1 @@
1
- {"version":3,"file":"mintplayer-ng-bootstrap-signature-pad.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/signature-pad/src/component/signature-pad.component.ts","../../../../libs/mintplayer-ng-bootstrap/signature-pad/src/component/signature-pad.component.html","../../../../libs/mintplayer-ng-bootstrap/signature-pad/mintplayer-ng-bootstrap-signature-pad.ts"],"sourcesContent":["import { AfterViewInit, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild } from '@angular/core';\nimport { Signature } from '../interfaces/signature';\nimport { BehaviorSubject } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'bs-signature-pad',\n templateUrl: './signature-pad.component.html',\n styleUrls: ['./signature-pad.component.scss'],\n standalone: true,\n})\nexport class BsSignaturePadComponent implements AfterViewInit {\n constructor() {\n this.signature$.pipe(takeUntilDestroyed()).subscribe((signature) => {\n this.signatureChange.emit(signature);\n });\n }\n\n //#region Signature\n signature$ = new BehaviorSubject<Signature>({ strokes: [] });\n @Output() signatureChange = new EventEmitter<Signature>();\n public get signature() {\n return this.signature$.value;\n }\n @Input() public set signature(value: Signature) {\n this.signature$.next(value);\n }\n //#endregion\n\n @Input() width = 500;\n @Input() height = 300;\n\n @HostBinding('class.border')\n @HostBinding('class.d-inline-block')\n classes = true;\n\n isDrawing = false;\n @ViewChild('canvas') canvas!: ElementRef<HTMLCanvasElement>;\n context: CanvasRenderingContext2D | null = null;\n\n ngAfterViewInit() {\n if (typeof window !== 'undefined') {\n this.context = this.canvas.nativeElement.getContext('2d', { willReadFrequently: true });\n }\n }\n\n @HostBinding('style.min-height.rem') minHeight = 5;\n @HostListener('touchmove', ['$event']) onTouchMove(ev: TouchEvent) {\n if (this.isDrawing) {\n ev.preventDefault();\n }\n }\n @HostListener('pointerdown', ['$event']) onPointerStart(ev: PointerEvent) {\n ev.preventDefault();\n this.isDrawing = true;\n if (this.context) {\n this.signature.strokes.push({\n points: [{ x: ev.offsetX, y: ev.offsetY }]\n });\n this.signatureChange.emit(this.signature);\n\n this.context.fillStyle = 'black';\n this.context.beginPath();\n this.context.moveTo(ev.offsetX, ev.offsetY);\n }\n }\n @HostListener('pointermove', ['$event']) onPointerMove(ev: PointerEvent) {\n if (this.isDrawing && this.context) {\n ev.preventDefault();\n \n // this.context.moveTo(this.points.at(-1)!.x, this.points.at(-1)!.y);\n // // ctx.arc(x, y, width, 0, 2 * Math.PI, false);\n // // this.context.arc(ev.offsetX, ev.offsetY, 2, 0, 2 * Math.PI, false);\n // // this.context.arcTo(ev.offsetX, ev.offsetY,)\n // this.context.closePath();\n // this.context.fill();\n\n this.signature.strokes.at(-1)?.points.push({ x: ev.offsetX, y: ev.offsetY });\n this.signatureChange.emit(this.signature);\n\n this.context.lineTo(ev.offsetX, ev.offsetY);\n this.context.stroke();\n }\n }\n @HostListener('window:pointerup', ['$event']) onPointerEnd(ev: PointerEvent) {\n if (this.isDrawing && this.context) {\n ev.preventDefault();\n this.isDrawing = false;\n this.signatureChange.emit(this.signature);\n }\n }\n}\n","<canvas [width]=\"width\" [height]=\"height\" class=\"d-block\" #canvas></canvas>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mintplayer-ng-bootstrap-signature-pad.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/signature-pad/src/component/signature-pad.component.ts","../../../../libs/mintplayer-ng-bootstrap/signature-pad/src/component/signature-pad.component.html","../../../../libs/mintplayer-ng-bootstrap/signature-pad/mintplayer-ng-bootstrap-signature-pad.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, HostBinding, HostListener, input, model, ViewChild } from '@angular/core';\nimport { Signature } from '../interfaces/signature';\n\n@Component({\n selector: 'bs-signature-pad',\n templateUrl: './signature-pad.component.html',\n styleUrls: ['./signature-pad.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsSignaturePadComponent implements AfterViewInit {\n\n signature = model<Signature>({ strokes: [] });\n width = input(500);\n height = input(300);\n\n @HostBinding('class.border')\n @HostBinding('class.d-inline-block')\n classes = true;\n\n isDrawing = false;\n @ViewChild('canvas') canvas!: ElementRef<HTMLCanvasElement>;\n context: CanvasRenderingContext2D | null = null;\n\n ngAfterViewInit() {\n if (typeof window !== 'undefined') {\n this.context = this.canvas.nativeElement.getContext('2d', { willReadFrequently: true });\n }\n }\n\n @HostBinding('style.min-height.rem') minHeight = 5;\n @HostListener('touchmove', ['$event']) onTouchMove(ev: TouchEvent) {\n if (this.isDrawing) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n }\n @HostListener('pointerdown', ['$event']) onPointerStart(ev: PointerEvent) {\n ev.preventDefault();\n this.isDrawing = true;\n if (this.context) {\n const sig = this.signature();\n sig.strokes.push({\n points: [{ x: ev.offsetX, y: ev.offsetY }]\n });\n this.signature.set({ ...sig });\n\n this.context.fillStyle = 'black';\n this.context.beginPath();\n this.context.moveTo(ev.offsetX, ev.offsetY);\n }\n }\n @HostListener('pointermove', ['$event']) onPointerMove(ev: PointerEvent) {\n if (this.isDrawing && this.context) {\n ev.preventDefault();\n\n const sig = this.signature();\n sig.strokes.at(-1)?.points.push({ x: ev.offsetX, y: ev.offsetY });\n this.signature.set({ ...sig });\n\n this.context.lineTo(ev.offsetX, ev.offsetY);\n this.context.stroke();\n }\n }\n @HostListener('window:pointerup', ['$event']) onPointerEnd(ev: PointerEvent) {\n if (this.isDrawing && this.context) {\n ev.preventDefault();\n this.isDrawing = false;\n }\n }\n}\n","<canvas [width]=\"width()\" [height]=\"height()\" class=\"d-block\" #canvas></canvas>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,46 +1,22 @@
1
- import { AsyncPipe } from '@angular/common';
2
1
  import * as i0 from '@angular/core';
3
- import { Input, Component } from '@angular/core';
2
+ import { input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
4
3
  import { Color } from '@mintplayer/ng-bootstrap';
5
- import { BehaviorSubject, map } from 'rxjs';
6
4
 
7
5
  class BsSpinnerComponent {
8
6
  constructor() {
9
7
  this.colors = Color;
10
- //#region Type
11
- this.type$ = new BehaviorSubject('border');
12
- //#endregion
13
- //#region Color
14
- this.color$ = new BehaviorSubject(Color.dark);
15
- this.spinnerClass$ = this.type$
16
- .pipe(map((type) => `spinner-${type}`));
17
- this.colorClass$ = this.color$
18
- .pipe(map((type) => `text-${this.colors[type]}`));
19
- }
20
- ngOnInit() { }
21
- get type() {
22
- return this.type$.value;
23
- }
24
- set type(value) {
25
- this.type$.next(value);
26
- }
27
- get color() {
28
- return this.color$.value;
29
- }
30
- set color(value) {
31
- this.color$.next(value);
8
+ this.type = input('border', ...(ngDevMode ? [{ debugName: "type" }] : []));
9
+ this.color = input(Color.dark, ...(ngDevMode ? [{ debugName: "color" }] : []));
10
+ this.spinnerClass = computed(() => `spinner-${this.type()}`, ...(ngDevMode ? [{ debugName: "spinnerClass" }] : []));
11
+ this.colorClass = computed(() => `text-${this.colors[this.color()]}`, ...(ngDevMode ? [{ debugName: "colorClass" }] : []));
32
12
  }
33
13
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: BsSpinnerComponent, isStandalone: true, selector: "bs-spinner", inputs: { type: "type", color: "color" }, ngImport: i0, template: "<div [class]=\"[spinnerClass$ | async, colorClass$ | async]\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n</div>", styles: [":host ::ng-deep .spinner-grow,:host ::ng-deep .spinner-border{display:inline-block;flex-shrink:0;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}:host ::ng-deep .spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}:host ::ng-deep .spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}:host ::ng-deep .spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}:host ::ng-deep .spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion:reduce){:host ::ng-deep .spinner-border,:host ::ng-deep .spinner-grow{--bs-spinner-animation-speed: 1.5s}}:host ::ng-deep .spinner-border{animation:.75s linear infinite spinner-border}:host ::ng-deep .spinner-grow{animation:.75s linear infinite spinner-grow}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }] }); }
14
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.6", type: BsSpinnerComponent, isStandalone: true, selector: "bs-spinner", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div [class]=\"[spinnerClass(), colorClass()]\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n</div>\n", styles: [":host ::ng-deep .spinner-grow,:host ::ng-deep .spinner-border{display:inline-block;flex-shrink:0;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}:host ::ng-deep .spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}:host ::ng-deep .spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}:host ::ng-deep .spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}:host ::ng-deep .spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion:reduce){:host ::ng-deep .spinner-border,:host ::ng-deep .spinner-grow{--bs-spinner-animation-speed: 1.5s}}:host ::ng-deep .spinner-border{animation:.75s linear infinite spinner-border}:host ::ng-deep .spinner-grow{animation:.75s linear infinite spinner-grow}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35
15
  }
36
16
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSpinnerComponent, decorators: [{
37
17
  type: Component,
38
- args: [{ selector: 'bs-spinner', standalone: true, imports: [AsyncPipe], template: "<div [class]=\"[spinnerClass$ | async, colorClass$ | async]\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n</div>", styles: [":host ::ng-deep .spinner-grow,:host ::ng-deep .spinner-border{display:inline-block;flex-shrink:0;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}:host ::ng-deep .spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}:host ::ng-deep .spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}:host ::ng-deep .spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}:host ::ng-deep .spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion:reduce){:host ::ng-deep .spinner-border,:host ::ng-deep .spinner-grow{--bs-spinner-animation-speed: 1.5s}}:host ::ng-deep .spinner-border{animation:.75s linear infinite spinner-border}:host ::ng-deep .spinner-grow{animation:.75s linear infinite spinner-grow}\n"] }]
39
- }], ctorParameters: () => [], propDecorators: { type: [{
40
- type: Input
41
- }], color: [{
42
- type: Input
43
- }] } });
18
+ args: [{ selector: 'bs-spinner', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"[spinnerClass(), colorClass()]\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n</div>\n", styles: [":host ::ng-deep .spinner-grow,:host ::ng-deep .spinner-border{display:inline-block;flex-shrink:0;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}:host ::ng-deep .spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}:host ::ng-deep .spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}:host ::ng-deep .spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}:host ::ng-deep .spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion:reduce){:host ::ng-deep .spinner-border,:host ::ng-deep .spinner-grow{--bs-spinner-animation-speed: 1.5s}}:host ::ng-deep .spinner-border{animation:.75s linear infinite spinner-border}:host ::ng-deep .spinner-grow{animation:.75s linear infinite spinner-grow}\n"] }]
19
+ }], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }] } });
44
20
 
45
21
  /**
46
22
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"mintplayer-ng-bootstrap-spinner.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/spinner/src/spinner.component.ts","../../../../libs/mintplayer-ng-bootstrap/spinner/src/spinner.component.html","../../../../libs/mintplayer-ng-bootstrap/spinner/mintplayer-ng-bootstrap-spinner.ts"],"sourcesContent":["import { AsyncPipe } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { Color } from '@mintplayer/ng-bootstrap';\nimport { BehaviorSubject, map, Observable } from 'rxjs';\n\n@Component({\n selector: 'bs-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n standalone: true,\n imports: [AsyncPipe],\n})\nexport class BsSpinnerComponent implements OnInit {\n constructor() {\n this.spinnerClass$ = this.type$\n .pipe(map((type) => `spinner-${type}`));\n this.colorClass$ = this.color$\n .pipe(map((type) => `text-${this.colors[type]}`));\n }\n\n spinnerClass$: Observable<string>;\n colorClass$: Observable<string>;\n colors = Color;\n\n ngOnInit(): void {}\n\n //#region Type\n type$ = new BehaviorSubject<'border' | 'grow'>('border');\n public get type() {\n return this.type$.value;\n }\n @Input() public set type(value: 'border' | 'grow') {\n this.type$.next(value);\n }\n //#endregion\n //#region Color\n color$ = new BehaviorSubject<Color>(Color.dark);\n public get color() {\n return this.color$.value;\n }\n @Input() public set color(value: Color) {\n this.color$.next(value);\n }\n //#endregion\n}\n","<div [class]=\"[spinnerClass$ | async, colorClass$ | async]\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAYa,kBAAkB,CAAA;AAC7B,IAAA,WAAA,GAAA;QASA,IAAA,CAAA,MAAM,GAAG,KAAK;;AAKd,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,eAAe,CAAoB,QAAQ,CAAC;;;QASxD,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAQ,KAAK,CAAC,IAAI,CAAC;AAtB7C,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AACvB,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAA,QAAA,EAAW,IAAI,CAAA,CAAE,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACrB,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAA,KAAA,EAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC,CAAC;IACrD;AAMA,IAAA,QAAQ,KAAU;AAIlB,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;IACA,IAAoB,IAAI,CAAC,KAAwB,EAAA;AAC/C,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACxB;AAIA,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK;IAC1B;IACA,IAAoB,KAAK,CAAC,KAAY,EAAA;AACpC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB;8GA9BW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ/B,+IAEM,EAAA,MAAA,EAAA,CAAA,09CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDQM,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAER,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,UAAA,EAGV,IAAI,EAAA,OAAA,EACP,CAAC,SAAS,CAAC,EAAA,QAAA,EAAA,+IAAA,EAAA,MAAA,EAAA,CAAA,09CAAA,CAAA,EAAA;;sBAqBnB;;sBASA;;;AExCH;;AAEG;;;;"}
1
+ {"version":3,"file":"mintplayer-ng-bootstrap-spinner.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/spinner/src/spinner.component.ts","../../../../libs/mintplayer-ng-bootstrap/spinner/src/spinner.component.html","../../../../libs/mintplayer-ng-bootstrap/spinner/mintplayer-ng-bootstrap-spinner.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { Color } from '@mintplayer/ng-bootstrap';\n\n@Component({\n selector: 'bs-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsSpinnerComponent {\n colors = Color;\n\n type = input<'border' | 'grow'>('border');\n color = input<Color>(Color.dark);\n\n spinnerClass = computed(() => `spinner-${this.type()}`);\n colorClass = computed(() => `text-${this.colors[this.color()]}`);\n}\n","<div [class]=\"[spinnerClass(), colorClass()]\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAUa,kBAAkB,CAAA;AAP/B,IAAA,WAAA,GAAA;QAQE,IAAA,CAAA,MAAM,GAAG,KAAK;AAEd,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAoB,QAAQ,gDAAC;AACzC,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAQ,KAAK,CAAC,IAAI,iDAAC;AAEhC,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAA,QAAA,EAAW,IAAI,CAAC,IAAI,EAAE,CAAA,CAAE,wDAAC;AACvD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA,CAAE,sDAAC;AACjE,IAAA;8GARY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,+TCV/B,mIAGA,EAAA,MAAA,EAAA,CAAA,09CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDOa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,UAAA,EAGV,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mIAAA,EAAA,MAAA,EAAA,CAAA,09CAAA,CAAA,EAAA;;;AERjD;;AAEG;;;;"}
@@ -1,13 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, Pipe, HostListener, HostBinding, ViewChildren, ContentChildren, Input, NgModule } from '@angular/core';
3
- import * as i3 from '@angular/common';
2
+ import { inject, ElementRef, ChangeDetectionStrategy, Component, Pipe, input, signal, computed, HostListener, HostBinding, ViewChildren, ContentChildren, NgModule } from '@angular/core';
4
3
  import { AsyncPipe } from '@angular/common';
5
4
  import * as i1 from '@angular/cdk/portal';
6
5
  import { DomPortal, PortalModule } from '@angular/cdk/portal';
7
6
  import * as i2 from '@mintplayer/ng-bootstrap/user-agent';
8
7
  import { BsUserAgentDirective } from '@mintplayer/ng-bootstrap/user-agent';
9
- import { BehaviorSubject, map, combineLatest, take } from 'rxjs';
10
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
8
 
12
9
  var EDragOperation;
13
10
  (function (EDragOperation) {
@@ -16,19 +13,19 @@ var EDragOperation;
16
13
  })(EDragOperation || (EDragOperation = {}));
17
14
 
18
15
  class BsSplitPanelComponent {
19
- constructor(element) {
20
- this.element = element;
16
+ constructor() {
17
+ this.element = inject(ElementRef);
21
18
  }
22
19
  ngAfterViewInit() {
23
20
  setTimeout(() => this.portal = new DomPortal(this.element.nativeElement), 10);
24
21
  }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSplitPanelComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
26
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: BsSplitPanelComponent, isStandalone: false, selector: "bs-split-panel", ngImport: i0, template: "<div class=\"w-100 h-100\">\n <ng-content></ng-content>\n</div>", styles: [":host{display:block;height:100%}\n"] }); }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSplitPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: BsSplitPanelComponent, isStandalone: false, selector: "bs-split-panel", ngImport: i0, template: "<div class=\"w-100 h-100\">\n <ng-content></ng-content>\n</div>", styles: [":host{display:block;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27
24
  }
28
25
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSplitPanelComponent, decorators: [{
29
26
  type: Component,
30
- args: [{ selector: 'bs-split-panel', standalone: false, template: "<div class=\"w-100 h-100\">\n <ng-content></ng-content>\n</div>", styles: [":host{display:block;height:100%}\n"] }]
31
- }], ctorParameters: () => [{ type: i0.ElementRef }] });
27
+ args: [{ selector: 'bs-split-panel', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"w-100 h-100\">\n <ng-content></ng-content>\n</div>", styles: [":host{display:block;height:100%}\n"] }]
28
+ }] });
32
29
 
33
30
  class BsElementAtPipe {
34
31
  transform(value, index) {
@@ -51,31 +48,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
51
48
  }] });
52
49
 
53
50
  class BsSplitterComponent {
54
- constructor(destroy) {
55
- this.destroy = destroy;
56
- //#region Orientation
57
- this.orientation$ = new BehaviorSubject('horizontal');
58
- //#endregion
59
- this.previewSizes$ = new BehaviorSubject(null);
60
- this.panels$ = new BehaviorSubject([]);
51
+ constructor() {
52
+ this.orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
53
+ this.previewSizes = signal(null, ...(ngDevMode ? [{ debugName: "previewSizes" }] : []));
54
+ this.panels = signal([], ...(ngDevMode ? [{ debugName: "panels" }] : []));
55
+ this.isResizing = signal(false, ...(ngDevMode ? [{ debugName: "isResizing" }] : []));
56
+ this.touchedDivider = signal(null, ...(ngDevMode ? [{ debugName: "touchedDivider" }] : []));
61
57
  this.classes = true;
62
- this.isResizing$ = new BehaviorSubject(false);
63
- this.touchedDivider$ = new BehaviorSubject(null);
64
- this.operation = null;
65
- this.directionClass$ = this.orientation$.pipe(map((orientation) => {
66
- switch (orientation) {
58
+ this.directionClass = computed(() => {
59
+ switch (this.orientation()) {
67
60
  case 'horizontal': return 'flex-row';
68
61
  case 'vertical': return 'flex-column';
69
62
  }
70
- }));
71
- this.splitterClass$ = this.orientation$.pipe(map((orientation) => {
72
- switch (orientation) {
63
+ }, ...(ngDevMode ? [{ debugName: "directionClass" }] : []));
64
+ this.splitterClass = computed(() => {
65
+ switch (this.orientation()) {
73
66
  case 'horizontal': return 'split-hor';
74
67
  case 'vertical': return 'split-ver';
75
68
  }
76
- }));
77
- this.widthStyles$ = combineLatest([this.orientation$, this.previewSizes$, this.panels$])
78
- .pipe(map(([orientation, previewSizes, panels]) => {
69
+ }, ...(ngDevMode ? [{ debugName: "splitterClass" }] : []));
70
+ this.widthStyles = computed(() => {
71
+ const orientation = this.orientation();
72
+ const previewSizes = this.previewSizes();
73
+ const panels = this.panels();
79
74
  switch (orientation) {
80
75
  case 'horizontal':
81
76
  if (previewSizes) {
@@ -89,14 +84,16 @@ class BsSplitterComponent {
89
84
  });
90
85
  }
91
86
  else {
92
- return Array(panels.length).map((v, i) => '100%');
87
+ return Array(panels.length).fill('100%');
93
88
  }
94
89
  case 'vertical':
95
90
  return null;
96
91
  }
97
- }));
98
- this.heightStyles$ = combineLatest([this.orientation$, this.previewSizes$, this.panels$])
99
- .pipe(map(([orientation, previewSizes, panels]) => {
92
+ }, ...(ngDevMode ? [{ debugName: "widthStyles" }] : []));
93
+ this.heightStyles = computed(() => {
94
+ const orientation = this.orientation();
95
+ const previewSizes = this.previewSizes();
96
+ const panels = this.panels();
100
97
  switch (orientation) {
101
98
  case 'horizontal':
102
99
  return null;
@@ -112,26 +109,21 @@ class BsSplitterComponent {
112
109
  });
113
110
  }
114
111
  else {
115
- return Array(panels.length).map((v, i) => '100%');
112
+ return Array(panels.length).fill('100%');
116
113
  }
117
114
  }
118
- }));
119
- }
120
- get orientation() {
121
- return this.orientation$.value;
122
- }
123
- set orientation(value) {
124
- this.orientation$.next(value);
115
+ }, ...(ngDevMode ? [{ debugName: "heightStyles" }] : []));
116
+ this.operation = null;
125
117
  }
126
- set panels(value) {
127
- this.panels$.next(value.toArray());
118
+ set panelsList(value) {
119
+ this.panels.set(value.toArray());
128
120
  }
129
121
  computeSizes() {
130
122
  if (typeof window !== 'undefined') {
131
123
  const sizes = this.splitPanels
132
124
  .map((sp) => {
133
125
  const styles = window.getComputedStyle(sp.nativeElement);
134
- switch (this.orientation) {
126
+ switch (this.orientation()) {
135
127
  case 'horizontal': return styles.width;
136
128
  case 'vertical': return styles.height;
137
129
  }
@@ -151,13 +143,14 @@ class BsSplitterComponent {
151
143
  startResizeTouch(ev, indexBefore, indexAfter, divider) {
152
144
  if (ev.cancelable) {
153
145
  ev.preventDefault();
154
- this.touchedDivider$.next(divider);
146
+ ev.stopPropagation();
147
+ this.touchedDivider.set(divider);
155
148
  this.startResize(indexBefore, indexAfter, { x: ev.touches[0].clientX, y: ev.touches[0].clientY });
156
149
  }
157
150
  }
158
151
  startResize(indexBefore, indexAfter, pt) {
159
152
  const sizes = this.computeSizes();
160
- this.previewSizes$.next(sizes);
153
+ this.previewSizes.set(sizes);
161
154
  this.operation = {
162
155
  operation: EDragOperation.resizeSplitter,
163
156
  startPosition: pt,
@@ -165,12 +158,16 @@ class BsSplitterComponent {
165
158
  indexBefore,
166
159
  indexAfter,
167
160
  };
168
- this.isResizing$.next(true);
161
+ this.isResizing.set(true);
169
162
  }
170
163
  onMouseMove(ev) {
171
164
  this.onResizeMove({ x: ev.clientX, y: ev.clientY });
172
165
  }
173
166
  onTouchMove(ev) {
167
+ if (this.operation) {
168
+ ev.preventDefault();
169
+ ev.stopPropagation();
170
+ }
174
171
  this.onResizeMove({ x: ev.touches[0].clientX, y: ev.touches[0].clientY });
175
172
  }
176
173
  onResizeMove(pt) {
@@ -178,28 +175,23 @@ class BsSplitterComponent {
178
175
  switch (this.operation.operation) {
179
176
  case EDragOperation.resizeSplitter:
180
177
  {
181
- combineLatest([this.orientation$])
182
- .pipe(take(1), takeUntilDestroyed(this.destroy))
183
- .subscribe(([orientation]) => {
184
- if (this.operation) {
185
- switch (orientation) {
186
- case 'horizontal':
187
- const deltaX = pt.x - this.operation.startPosition.x;
188
- const sx = Array.from(this.operation.sizes);
189
- sx[this.operation.indexBefore] = this.operation.sizes[this.operation.indexBefore] + deltaX;
190
- sx[this.operation.indexAfter] = this.operation.sizes[this.operation.indexAfter] - deltaX;
191
- this.previewSizes$.next(sx);
192
- break;
193
- case 'vertical':
194
- const deltaY = pt.y - this.operation.startPosition.y;
195
- const sy = Array.from(this.operation.sizes);
196
- sy[this.operation.indexBefore] = this.operation.sizes[this.operation.indexBefore] + deltaY;
197
- sy[this.operation.indexAfter] = this.operation.sizes[this.operation.indexAfter] - deltaY;
198
- this.previewSizes$.next(sy);
199
- break;
200
- }
201
- }
202
- });
178
+ const orientation = this.orientation();
179
+ switch (orientation) {
180
+ case 'horizontal':
181
+ const deltaX = pt.x - this.operation.startPosition.x;
182
+ const sx = Array.from(this.operation.sizes);
183
+ sx[this.operation.indexBefore] = this.operation.sizes[this.operation.indexBefore] + deltaX;
184
+ sx[this.operation.indexAfter] = this.operation.sizes[this.operation.indexAfter] - deltaX;
185
+ this.previewSizes.set(sx);
186
+ break;
187
+ case 'vertical':
188
+ const deltaY = pt.y - this.operation.startPosition.y;
189
+ const sy = Array.from(this.operation.sizes);
190
+ sy[this.operation.indexBefore] = this.operation.sizes[this.operation.indexBefore] + deltaY;
191
+ sy[this.operation.indexAfter] = this.operation.sizes[this.operation.indexAfter] - deltaY;
192
+ this.previewSizes.set(sy);
193
+ break;
194
+ }
203
195
  }
204
196
  break;
205
197
  }
@@ -209,22 +201,24 @@ class BsSplitterComponent {
209
201
  this.onResizeUp();
210
202
  }
211
203
  onTouchEnd(ev) {
212
- this.touchedDivider$.next(null);
204
+ if (this.operation) {
205
+ ev.preventDefault();
206
+ ev.stopPropagation();
207
+ }
208
+ this.touchedDivider.set(null);
213
209
  this.onResizeUp();
214
210
  }
215
211
  onResizeUp() {
216
- this.isResizing$.next(false);
212
+ this.isResizing.set(false);
217
213
  this.operation = null;
218
214
  }
219
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSplitterComponent, deps: [{ token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
220
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: BsSplitterComponent, isStandalone: false, selector: "bs-splitter", inputs: { orientation: "orientation" }, host: { listeners: { "document:mousemove": "onMouseMove($event)", "document:mouseup": "onMouseUp($event)" }, properties: { "class.w-100": "this.classes", "class.h-100": "this.classes", "class.d-flex": "this.classes" } }, queries: [{ propertyName: "panels", predicate: BsSplitPanelComponent }], viewQueries: [{ propertyName: "splitPanels", predicate: ["splitPanel"], descendants: true }], ngImport: i0, template: "<div class=\"d-flex w-100 root\" [class]=\"[directionClass$ | async, splitterClass$ | async]\" bsUserAgent>\n <ng-content></ng-content>\n @for (panel of (panels$ | async); let index = $index; let last = $last; track panel) {\n @let widthStyles = widthStyles$ | async;\n @let heightStyles = heightStyles$ | async;\n \n <!-- [style.width.%]=\"100\" [style.height.%]=\"100\" -->\n <div class=\"split-panel overflow-hidden\" [class.flex-none]=\"isResizing$ | async\" #splitPanel [style.width]=\"widthStyles | bsElementAt:index\" [style.height]=\"heightStyles | bsElementAt:index\">\n <ng-template [cdkPortalOutlet]=\"panel.portal\"></ng-template>\n </div>\n @if (!last) {\n <div class=\"divider\" bsUserAgent [class.hover]=\"(touchedDivider$ | async) === divider\" #divider (mousedown)=\"startResizeMouse($event, index, index + 1)\" (touchstart)=\"startResizeTouch($event, index, index + 1, divider)\" (touchmove)=\"onTouchMove($event)\" (touchend)=\"onTouchEnd($event)\"></div>\n }\n }\n</div>", styles: [".root{--thumb-margin: 3px}.root.os-android{--thumb-margin: 20px}.split-panel{flex-grow:1}.divider{flex-shrink:0;transition:background-color .15s ease-in-out;z-index:3}.divider:before{background-position:center center;background-repeat:no-repeat}.divider:not(.os-android):hover:before{background-color:#1389fd;border-radius:4px}.divider.os-android.hover:before{background-color:#1389fd;border-radius:4px}.divider:before{content:\"\";display:block;background-color:#eee}.split-hor>.divider{width:calc(8px + 2 * var(--thumb-margin));height:100%;cursor:col-resize;border-left:var(--thumb-margin) solid transparent;border-right:var(--thumb-margin) solid transparent}.split-hor>.divider:before{height:100%;width:8px;margin:0 auto;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==)}.split-hor>.split-panel:not(:first-child){margin-left:calc(-1 * var(--thumb-margin))}.split-hor>.split-panel:not(:last-child){margin-right:calc(-1 * var(--thumb-margin))}.split-ver>.divider{width:100%;height:calc(8px + 2 * var(--thumb-margin));cursor:row-resize;border-top:var(--thumb-margin) solid transparent;border-bottom:var(--thumb-margin) solid transparent}.split-ver>.divider:before{height:8px;margin:auto 0;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFCAMAAABl/6zIAAAABlBMVEUAAADMzMzIT8AyAAAAAXRSTlMAQObYZgAAABRJREFUeAFjYGRkwIMJSeMHlBkOABP7AEGzSuPKAAAAAElFTkSuQmCC)}.split-ver>.split-panel:not(:first-child){margin-top:calc(-1 * var(--thumb-margin))}.split-ver>.split-panel:not(:last-child){margin-bottom:calc(-1 * var(--thumb-margin))}.flex-none{flex:none}\n"], dependencies: [{ kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: i2.BsUserAgentDirective, selector: "[bsUserAgent]", outputs: ["detected"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: BsElementAtPipe, name: "bsElementAt" }] }); }
215
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSplitterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
216
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: BsSplitterComponent, isStandalone: false, selector: "bs-splitter", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "document:mousemove": "onMouseMove($event)", "document:mouseup": "onMouseUp($event)" }, properties: { "class.w-100": "this.classes", "class.h-100": "this.classes", "class.d-flex": "this.classes" } }, queries: [{ propertyName: "panelsList", predicate: BsSplitPanelComponent }], viewQueries: [{ propertyName: "splitPanels", predicate: ["splitPanel"], descendants: true }], ngImport: i0, template: "<div class=\"d-flex w-100 root\" [class]=\"[directionClass(), splitterClass()]\" bsUserAgent>\n <ng-content></ng-content>\n @for (panel of panels(); let index = $index; let last = $last; track panel) {\n @let widthStylesValue = widthStyles();\n @let heightStylesValue = heightStyles();\n\n <div class=\"split-panel overflow-hidden\" [class.flex-none]=\"isResizing()\" #splitPanel [style.width]=\"widthStylesValue | bsElementAt:index\" [style.height]=\"heightStylesValue | bsElementAt:index\">\n <ng-template [cdkPortalOutlet]=\"panel.portal\"></ng-template>\n </div>\n @if (!last) {\n <div class=\"divider\" bsUserAgent [class.hover]=\"touchedDivider() === divider\" #divider (mousedown)=\"startResizeMouse($event, index, index + 1)\" (touchstart)=\"startResizeTouch($event, index, index + 1, divider)\" (touchmove)=\"onTouchMove($event)\" (touchend)=\"onTouchEnd($event)\"></div>\n }\n }\n</div>\n", styles: [".root{--thumb-margin: 3px}.root.os-android{--thumb-margin: 20px}.split-panel{flex-grow:1}.divider{flex-shrink:0;transition:background-color .15s ease-in-out;z-index:3}.divider:before{background-position:center center;background-repeat:no-repeat}.divider:not(.os-android):hover:before{background-color:#1389fd;border-radius:4px}.divider.os-android.hover:before{background-color:#1389fd;border-radius:4px}.divider:before{content:\"\";display:block;background-color:#eee}.split-hor>.divider{width:calc(8px + 2 * var(--thumb-margin));height:100%;cursor:col-resize;border-left:var(--thumb-margin) solid transparent;border-right:var(--thumb-margin) solid transparent}.split-hor>.divider:before{height:100%;width:8px;margin:0 auto;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==)}.split-hor>.split-panel:not(:first-child){margin-left:calc(-1 * var(--thumb-margin))}.split-hor>.split-panel:not(:last-child){margin-right:calc(-1 * var(--thumb-margin))}.split-ver>.divider{width:100%;height:calc(8px + 2 * var(--thumb-margin));cursor:row-resize;border-top:var(--thumb-margin) solid transparent;border-bottom:var(--thumb-margin) solid transparent}.split-ver>.divider:before{height:8px;margin:auto 0;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFCAMAAABl/6zIAAAABlBMVEUAAADMzMzIT8AyAAAAAXRSTlMAQObYZgAAABRJREFUeAFjYGRkwIMJSeMHlBkOABP7AEGzSuPKAAAAAElFTkSuQmCC)}.split-ver>.split-panel:not(:first-child){margin-top:calc(-1 * var(--thumb-margin))}.split-ver>.split-panel:not(:last-child){margin-bottom:calc(-1 * var(--thumb-margin))}.flex-none{flex:none}\n"], dependencies: [{ kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: i2.BsUserAgentDirective, selector: "[bsUserAgent]", outputs: ["detected"] }, { kind: "pipe", type: BsElementAtPipe, name: "bsElementAt" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
221
217
  }
222
218
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSplitterComponent, decorators: [{
223
219
  type: Component,
224
- args: [{ selector: 'bs-splitter', standalone: false, template: "<div class=\"d-flex w-100 root\" [class]=\"[directionClass$ | async, splitterClass$ | async]\" bsUserAgent>\n <ng-content></ng-content>\n @for (panel of (panels$ | async); let index = $index; let last = $last; track panel) {\n @let widthStyles = widthStyles$ | async;\n @let heightStyles = heightStyles$ | async;\n \n <!-- [style.width.%]=\"100\" [style.height.%]=\"100\" -->\n <div class=\"split-panel overflow-hidden\" [class.flex-none]=\"isResizing$ | async\" #splitPanel [style.width]=\"widthStyles | bsElementAt:index\" [style.height]=\"heightStyles | bsElementAt:index\">\n <ng-template [cdkPortalOutlet]=\"panel.portal\"></ng-template>\n </div>\n @if (!last) {\n <div class=\"divider\" bsUserAgent [class.hover]=\"(touchedDivider$ | async) === divider\" #divider (mousedown)=\"startResizeMouse($event, index, index + 1)\" (touchstart)=\"startResizeTouch($event, index, index + 1, divider)\" (touchmove)=\"onTouchMove($event)\" (touchend)=\"onTouchEnd($event)\"></div>\n }\n }\n</div>", styles: [".root{--thumb-margin: 3px}.root.os-android{--thumb-margin: 20px}.split-panel{flex-grow:1}.divider{flex-shrink:0;transition:background-color .15s ease-in-out;z-index:3}.divider:before{background-position:center center;background-repeat:no-repeat}.divider:not(.os-android):hover:before{background-color:#1389fd;border-radius:4px}.divider.os-android.hover:before{background-color:#1389fd;border-radius:4px}.divider:before{content:\"\";display:block;background-color:#eee}.split-hor>.divider{width:calc(8px + 2 * var(--thumb-margin));height:100%;cursor:col-resize;border-left:var(--thumb-margin) solid transparent;border-right:var(--thumb-margin) solid transparent}.split-hor>.divider:before{height:100%;width:8px;margin:0 auto;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==)}.split-hor>.split-panel:not(:first-child){margin-left:calc(-1 * var(--thumb-margin))}.split-hor>.split-panel:not(:last-child){margin-right:calc(-1 * var(--thumb-margin))}.split-ver>.divider{width:100%;height:calc(8px + 2 * var(--thumb-margin));cursor:row-resize;border-top:var(--thumb-margin) solid transparent;border-bottom:var(--thumb-margin) solid transparent}.split-ver>.divider:before{height:8px;margin:auto 0;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFCAMAAABl/6zIAAAABlBMVEUAAADMzMzIT8AyAAAAAXRSTlMAQObYZgAAABRJREFUeAFjYGRkwIMJSeMHlBkOABP7AEGzSuPKAAAAAElFTkSuQmCC)}.split-ver>.split-panel:not(:first-child){margin-top:calc(-1 * var(--thumb-margin))}.split-ver>.split-panel:not(:last-child){margin-bottom:calc(-1 * var(--thumb-margin))}.flex-none{flex:none}\n"] }]
225
- }], ctorParameters: () => [{ type: i0.DestroyRef }], propDecorators: { orientation: [{
226
- type: Input
227
- }], panels: [{
220
+ args: [{ selector: 'bs-splitter', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"d-flex w-100 root\" [class]=\"[directionClass(), splitterClass()]\" bsUserAgent>\n <ng-content></ng-content>\n @for (panel of panels(); let index = $index; let last = $last; track panel) {\n @let widthStylesValue = widthStyles();\n @let heightStylesValue = heightStyles();\n\n <div class=\"split-panel overflow-hidden\" [class.flex-none]=\"isResizing()\" #splitPanel [style.width]=\"widthStylesValue | bsElementAt:index\" [style.height]=\"heightStylesValue | bsElementAt:index\">\n <ng-template [cdkPortalOutlet]=\"panel.portal\"></ng-template>\n </div>\n @if (!last) {\n <div class=\"divider\" bsUserAgent [class.hover]=\"touchedDivider() === divider\" #divider (mousedown)=\"startResizeMouse($event, index, index + 1)\" (touchstart)=\"startResizeTouch($event, index, index + 1, divider)\" (touchmove)=\"onTouchMove($event)\" (touchend)=\"onTouchEnd($event)\"></div>\n }\n }\n</div>\n", styles: [".root{--thumb-margin: 3px}.root.os-android{--thumb-margin: 20px}.split-panel{flex-grow:1}.divider{flex-shrink:0;transition:background-color .15s ease-in-out;z-index:3}.divider:before{background-position:center center;background-repeat:no-repeat}.divider:not(.os-android):hover:before{background-color:#1389fd;border-radius:4px}.divider.os-android.hover:before{background-color:#1389fd;border-radius:4px}.divider:before{content:\"\";display:block;background-color:#eee}.split-hor>.divider{width:calc(8px + 2 * var(--thumb-margin));height:100%;cursor:col-resize;border-left:var(--thumb-margin) solid transparent;border-right:var(--thumb-margin) solid transparent}.split-hor>.divider:before{height:100%;width:8px;margin:0 auto;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==)}.split-hor>.split-panel:not(:first-child){margin-left:calc(-1 * var(--thumb-margin))}.split-hor>.split-panel:not(:last-child){margin-right:calc(-1 * var(--thumb-margin))}.split-ver>.divider{width:100%;height:calc(8px + 2 * var(--thumb-margin));cursor:row-resize;border-top:var(--thumb-margin) solid transparent;border-bottom:var(--thumb-margin) solid transparent}.split-ver>.divider:before{height:8px;margin:auto 0;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFCAMAAABl/6zIAAAABlBMVEUAAADMzMzIT8AyAAAAAXRSTlMAQObYZgAAABRJREFUeAFjYGRkwIMJSeMHlBkOABP7AEGzSuPKAAAAAElFTkSuQmCC)}.split-ver>.split-panel:not(:first-child){margin-top:calc(-1 * var(--thumb-margin))}.split-ver>.split-panel:not(:last-child){margin-bottom:calc(-1 * var(--thumb-margin))}.flex-none{flex:none}\n"] }]
221
+ }], propDecorators: { orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], panelsList: [{
228
222
  type: ContentChildren,
229
223
  args: [BsSplitPanelComponent]
230
224
  }], splitPanels: [{