@ngneers/controls 0.0.1-pre5 → 0.0.1-pre6

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 (120) hide show
  1. package/fesm2022/ngneers-controls-accordion.mjs +32 -32
  2. package/fesm2022/ngneers-controls-accordion.mjs.map +1 -1
  3. package/fesm2022/ngneers-controls-api-ng.mjs +19 -19
  4. package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -1
  5. package/fesm2022/ngneers-controls-api-resize.mjs +706 -0
  6. package/fesm2022/ngneers-controls-api-resize.mjs.map +1 -0
  7. package/fesm2022/ngneers-controls-avatar.mjs +13 -13
  8. package/fesm2022/ngneers-controls-avatar.mjs.map +1 -1
  9. package/fesm2022/ngneers-controls-base.mjs +89 -64
  10. package/fesm2022/ngneers-controls-base.mjs.map +1 -1
  11. package/fesm2022/ngneers-controls-breadcrumb.mjs +18 -18
  12. package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -1
  13. package/fesm2022/ngneers-controls-button-group.mjs +8 -8
  14. package/fesm2022/ngneers-controls-button-group.mjs.map +1 -1
  15. package/fesm2022/ngneers-controls-button.mjs +15 -10
  16. package/fesm2022/ngneers-controls-button.mjs.map +1 -1
  17. package/fesm2022/{ngneers-controls-calendar-time-BEeJIqIX.mjs → ngneers-controls-calendar-time-Bzlv9Vkn.mjs} +9 -9
  18. package/fesm2022/{ngneers-controls-calendar-time-BEeJIqIX.mjs.map → ngneers-controls-calendar-time-Bzlv9Vkn.mjs.map} +1 -1
  19. package/fesm2022/ngneers-controls-calendar.mjs +54 -54
  20. package/fesm2022/ngneers-controls-calendar.mjs.map +1 -1
  21. package/fesm2022/ngneers-controls-checkbox.mjs +9 -9
  22. package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -1
  23. package/fesm2022/ngneers-controls-chip.mjs +6 -6
  24. package/fesm2022/ngneers-controls-chip.mjs.map +1 -1
  25. package/fesm2022/ngneers-controls-defer.mjs +10 -10
  26. package/fesm2022/ngneers-controls-defer.mjs.map +1 -1
  27. package/fesm2022/ngneers-controls-dialog.mjs +37 -39
  28. package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
  29. package/fesm2022/ngneers-controls-directives.mjs +45 -39
  30. package/fesm2022/ngneers-controls-directives.mjs.map +1 -1
  31. package/fesm2022/ngneers-controls-drawer.mjs +28 -28
  32. package/fesm2022/ngneers-controls-drawer.mjs.map +1 -1
  33. package/fesm2022/ngneers-controls-edit-inplace.mjs +15 -15
  34. package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -1
  35. package/fesm2022/ngneers-controls-filter.mjs +192 -44
  36. package/fesm2022/ngneers-controls-filter.mjs.map +1 -1
  37. package/fesm2022/{ngneers-controls-i18n-de-CdTPeBiR.mjs → ngneers-controls-i18n-de-CF0xTWEX.mjs} +9 -5
  38. package/fesm2022/ngneers-controls-i18n-de-CF0xTWEX.mjs.map +1 -0
  39. package/fesm2022/{ngneers-controls-i18n-en-Cfp2pOLY.mjs → ngneers-controls-i18n-en-8B7xAjH2.mjs} +9 -5
  40. package/fesm2022/ngneers-controls-i18n-en-8B7xAjH2.mjs.map +1 -0
  41. package/fesm2022/ngneers-controls-i18n.mjs +5 -5
  42. package/fesm2022/ngneers-controls-i18n.mjs.map +1 -1
  43. package/fesm2022/ngneers-controls-icon.mjs +10 -10
  44. package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
  45. package/fesm2022/ngneers-controls-inplace.mjs +18 -18
  46. package/fesm2022/ngneers-controls-inplace.mjs.map +1 -1
  47. package/fesm2022/ngneers-controls-input-field.mjs +14 -14
  48. package/fesm2022/ngneers-controls-input-field.mjs.map +1 -1
  49. package/fesm2022/ngneers-controls-input-mask.mjs +8 -8
  50. package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -1
  51. package/fesm2022/ngneers-controls-input.mjs +6 -6
  52. package/fesm2022/ngneers-controls-input.mjs.map +1 -1
  53. package/fesm2022/ngneers-controls-item-view.mjs +33 -33
  54. package/fesm2022/ngneers-controls-item-view.mjs.map +1 -1
  55. package/fesm2022/ngneers-controls-list-box.mjs +31 -31
  56. package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
  57. package/fesm2022/ngneers-controls-menu.mjs +32 -32
  58. package/fesm2022/ngneers-controls-menu.mjs.map +1 -1
  59. package/fesm2022/ngneers-controls-message.mjs +4 -4
  60. package/fesm2022/ngneers-controls-message.mjs.map +1 -1
  61. package/fesm2022/ngneers-controls-paginator.mjs +12 -12
  62. package/fesm2022/ngneers-controls-paginator.mjs.map +1 -1
  63. package/fesm2022/ngneers-controls-popover.mjs +13 -13
  64. package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
  65. package/fesm2022/ngneers-controls-progress.mjs +16 -16
  66. package/fesm2022/ngneers-controls-progress.mjs.map +1 -1
  67. package/fesm2022/ngneers-controls-scroller.mjs +74 -39
  68. package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
  69. package/fesm2022/ngneers-controls-select-button.mjs +6 -6
  70. package/fesm2022/ngneers-controls-select-button.mjs.map +1 -1
  71. package/fesm2022/ngneers-controls-select.mjs +46 -46
  72. package/fesm2022/ngneers-controls-select.mjs.map +1 -1
  73. package/fesm2022/ngneers-controls-slider.mjs +11 -11
  74. package/fesm2022/ngneers-controls-slider.mjs.map +1 -1
  75. package/fesm2022/ngneers-controls-spinner.mjs +7 -7
  76. package/fesm2022/ngneers-controls-spinner.mjs.map +1 -1
  77. package/fesm2022/ngneers-controls-splitter.mjs +141 -328
  78. package/fesm2022/ngneers-controls-splitter.mjs.map +1 -1
  79. package/fesm2022/ngneers-controls-switch.mjs +3 -3
  80. package/fesm2022/ngneers-controls-table.mjs +1520 -80
  81. package/fesm2022/ngneers-controls-table.mjs.map +1 -1
  82. package/fesm2022/ngneers-controls-tabs.mjs +40 -39
  83. package/fesm2022/ngneers-controls-tabs.mjs.map +1 -1
  84. package/fesm2022/ngneers-controls-tag.mjs +4 -4
  85. package/fesm2022/ngneers-controls-tag.mjs.map +1 -1
  86. package/fesm2022/ngneers-controls-toast.mjs +18 -18
  87. package/fesm2022/ngneers-controls-toast.mjs.map +1 -1
  88. package/fesm2022/ngneers-controls-toggle-button.mjs +9 -9
  89. package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -1
  90. package/fesm2022/ngneers-controls-tooltip.mjs +36 -36
  91. package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -1
  92. package/fesm2022/ngneers-controls-utils-ng.mjs +9 -9
  93. package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -1
  94. package/package.json +14 -10
  95. package/types/ngneers-controls-api-ng.d.ts +2 -2
  96. package/types/ngneers-controls-api-resize.d.ts +318 -0
  97. package/types/ngneers-controls-base.d.ts +8 -0
  98. package/types/ngneers-controls-breadcrumb.d.ts +1 -1
  99. package/types/ngneers-controls-button.d.ts +13 -8
  100. package/types/ngneers-controls-calendar.d.ts +5 -1
  101. package/types/ngneers-controls-checkbox.d.ts +1 -1
  102. package/types/ngneers-controls-directives.d.ts +7 -1
  103. package/types/ngneers-controls-drawer.d.ts +4 -0
  104. package/types/ngneers-controls-edit-inplace.d.ts +4 -0
  105. package/types/ngneers-controls-filter.d.ts +53 -4
  106. package/types/ngneers-controls-i18n.d.ts +4 -0
  107. package/types/ngneers-controls-icon.d.ts +1 -1
  108. package/types/ngneers-controls-input-field.d.ts +4 -0
  109. package/types/ngneers-controls-list-box.d.ts +5 -1
  110. package/types/ngneers-controls-menu.d.ts +1 -1
  111. package/types/ngneers-controls-paginator.d.ts +4 -0
  112. package/types/ngneers-controls-popover.d.ts +1 -1
  113. package/types/ngneers-controls-scroller.d.ts +12 -2
  114. package/types/ngneers-controls-select.d.ts +6 -2
  115. package/types/ngneers-controls-spinner.d.ts +1 -1
  116. package/types/ngneers-controls-splitter.d.ts +29 -59
  117. package/types/ngneers-controls-table.d.ts +392 -24
  118. package/types/ngneers-controls-toast.d.ts +1 -1
  119. package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs.map +0 -1
  120. package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs.map +0 -1
@@ -8,9 +8,9 @@ import { map } from 'rxjs';
8
8
 
9
9
  class NgnAutofocus {
10
10
  _el = inject((ElementRef));
11
- _focused = signal(false, ...(ngDevMode ? [{ debugName: "_focused" }] : []));
12
- _isInitialized = signal(false, ...(ngDevMode ? [{ debugName: "_isInitialized" }] : []));
13
- ngnAutofocus = input(true, { ...(ngDevMode ? { debugName: "ngnAutofocus" } : {}), transform: booleanAttribute });
11
+ _focused = signal(false, ...(ngDevMode ? [{ debugName: "_focused" }] : /* istanbul ignore next */ []));
12
+ _isInitialized = signal(false, ...(ngDevMode ? [{ debugName: "_isInitialized" }] : /* istanbul ignore next */ []));
13
+ ngnAutofocus = input(true, { ...(ngDevMode ? { debugName: "ngnAutofocus" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
14
14
  constructor() {
15
15
  effect(() => {
16
16
  if (!this.ngnAutofocus()) {
@@ -48,10 +48,10 @@ class NgnAutofocus {
48
48
  this._el.nativeElement.focus();
49
49
  this._focused.set(true);
50
50
  }
51
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnAutofocus, deps: [], target: i0.ɵɵFactoryTarget.Directive });
52
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: NgnAutofocus, isStandalone: true, selector: "[ngnAutofocus]", inputs: { ngnAutofocus: { classPropertyName: "ngnAutofocus", publicName: "ngnAutofocus", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
51
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnAutofocus, deps: [], target: i0.ɵɵFactoryTarget.Directive });
52
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.2", type: NgnAutofocus, isStandalone: true, selector: "[ngnAutofocus]", inputs: { ngnAutofocus: { classPropertyName: "ngnAutofocus", publicName: "ngnAutofocus", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
53
53
  }
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnAutofocus, decorators: [{
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnAutofocus, decorators: [{
55
55
  type: Directive,
56
56
  args: [{ selector: '[ngnAutofocus]' }]
57
57
  }], ctorParameters: () => [], propDecorators: { ngnAutofocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnAutofocus", required: false }] }] } });
@@ -63,7 +63,7 @@ class NgnDragBase {
63
63
  _pointerDown = false;
64
64
  _startX = undefined;
65
65
  _startY = undefined;
66
- isDragging = signal(false, ...(ngDevMode ? [{ debugName: "isDragging" }] : []));
66
+ isDragging = signal(false, ...(ngDevMode ? [{ debugName: "isDragging" }] : /* istanbul ignore next */ []));
67
67
  dragStart = output();
68
68
  dragEnd = output();
69
69
  dragged = output();
@@ -129,10 +129,10 @@ class NgnDragBase {
129
129
  this._startY = clientY;
130
130
  this.onDraggedInt({ deltaX: deltaX, deltaY: deltaY, absoluteX: clientX, absoluteY: clientY });
131
131
  }
132
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDragBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
133
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.0", type: NgnDragBase, isStandalone: true, outputs: { dragStart: "dragStart", dragEnd: "dragEnd", dragged: "dragged" }, ngImport: i0 });
132
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnDragBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
133
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: NgnDragBase, isStandalone: true, outputs: { dragStart: "dragStart", dragEnd: "dragEnd", dragged: "dragged" }, ngImport: i0 });
134
134
  }
135
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDragBase, decorators: [{
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnDragBase, decorators: [{
136
136
  type: Directive
137
137
  }], ctorParameters: () => [], propDecorators: { dragStart: [{ type: i0.Output, args: ["dragStart"] }], dragEnd: [{ type: i0.Output, args: ["dragEnd"] }], dragged: [{ type: i0.Output, args: ["dragged"] }] } });
138
138
 
@@ -144,10 +144,10 @@ class NgnDragScroll extends NgnDragBase {
144
144
  behavior: 'auto',
145
145
  });
146
146
  }
147
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDragScroll, deps: null, target: i0.ɵɵFactoryTarget.Directive });
148
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.0", type: NgnDragScroll, isStandalone: true, selector: "[ngnDragScroll]", usesInheritance: true, ngImport: i0 });
147
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnDragScroll, deps: null, target: i0.ɵɵFactoryTarget.Directive });
148
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: NgnDragScroll, isStandalone: true, selector: "[ngnDragScroll]", usesInheritance: true, ngImport: i0 });
149
149
  }
150
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDragScroll, decorators: [{
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnDragScroll, decorators: [{
151
151
  type: Directive,
152
152
  args: [{
153
153
  selector: '[ngnDragScroll]',
@@ -158,10 +158,10 @@ class NgnDrag extends NgnDragBase {
158
158
  onDragged(delta) {
159
159
  // do nothing
160
160
  }
161
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDrag, deps: null, target: i0.ɵɵFactoryTarget.Directive });
162
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.0", type: NgnDrag, isStandalone: true, selector: "[ngnDrag]", usesInheritance: true, ngImport: i0 });
161
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnDrag, deps: null, target: i0.ɵɵFactoryTarget.Directive });
162
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.2", type: NgnDrag, isStandalone: true, selector: "[ngnDrag]", usesInheritance: true, ngImport: i0 });
163
163
  }
164
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDrag, decorators: [{
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnDrag, decorators: [{
165
165
  type: Directive,
166
166
  args: [{
167
167
  selector: '[ngnDrag]',
@@ -179,32 +179,32 @@ class NgnMovable extends NgnBase {
179
179
  * Whether the element is movable.
180
180
  * @default true
181
181
  */
182
- ngnMovable = input(true, { ...(ngDevMode ? { debugName: "ngnMovable" } : {}), transform: booleanAttribute });
182
+ ngnMovable = input(true, { ...(ngDevMode ? { debugName: "ngnMovable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
183
183
  /**
184
184
  * The handle element used to drag the element. If omitted, the entire element will be used as the drag handle.
185
185
  * @default null
186
186
  */
187
- ngnMovableDragHandle = input(null, ...(ngDevMode ? [{ debugName: "ngnMovableDragHandle" }] : []));
187
+ ngnMovableDragHandle = input(null, ...(ngDevMode ? [{ debugName: "ngnMovableDragHandle" }] : /* istanbul ignore next */ []));
188
188
  /**
189
189
  * When `true`, the cursor will change to indicate that the element / drag handle is movable.
190
190
  * @default true
191
191
  */
192
- ngnMovableChangeCursor = input(true, { ...(ngDevMode ? { debugName: "ngnMovableChangeCursor" } : {}), transform: booleanAttribute });
192
+ ngnMovableChangeCursor = input(true, { ...(ngDevMode ? { debugName: "ngnMovableChangeCursor" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
193
193
  /**
194
194
  * When `true`, the movement will be limited to the viewport.
195
195
  * @default true
196
196
  */
197
- ngnMovableLimitToViewport = input(true, { ...(ngDevMode ? { debugName: "ngnMovableLimitToViewport" } : {}), transform: booleanAttribute });
197
+ ngnMovableLimitToViewport = input(true, { ...(ngDevMode ? { debugName: "ngnMovableLimitToViewport" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
198
198
  _ngnMovableDragHandleWithPrevious = signalWithPrevious(this.ngnMovableDragHandle, null);
199
199
  _eventElement = computed(() => {
200
200
  const handle = this.ngnMovableDragHandle();
201
201
  return handle ?? this._el.nativeElement;
202
- }, ...(ngDevMode ? [{ debugName: "_eventElement" }] : []));
203
- dragged = signal(false, ...(ngDevMode ? [{ debugName: "dragged" }] : []));
202
+ }, ...(ngDevMode ? [{ debugName: "_eventElement" }] : /* istanbul ignore next */ []));
203
+ dragged = signal(false, ...(ngDevMode ? [{ debugName: "dragged" }] : /* istanbul ignore next */ []));
204
204
  _pointerDownSignal = domEventSignal(this._eventElement, 'pointerdown');
205
205
  _pointerMoveSignal = domEventSignal(this._document, 'pointermove');
206
206
  _pointerUpSignal = domEventSignal(this._document, 'pointerup');
207
- _isDragging = signal(false, ...(ngDevMode ? [{ debugName: "_isDragging" }] : []));
207
+ _isDragging = signal(false, ...(ngDevMode ? [{ debugName: "_isDragging" }] : /* istanbul ignore next */ []));
208
208
  _startX = 0;
209
209
  _startY = 0;
210
210
  constructor() {
@@ -301,10 +301,10 @@ class NgnMovable extends NgnBase {
301
301
  handle.current?.classList.remove(this.theme.class('drag-handle-grabbing'));
302
302
  }
303
303
  }
304
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnMovable, deps: [], target: i0.ɵɵFactoryTarget.Directive });
305
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: NgnMovable, isStandalone: true, selector: "[ngnMovable]", inputs: { ngnMovable: { classPropertyName: "ngnMovable", publicName: "ngnMovable", isSignal: true, isRequired: false, transformFunction: null }, ngnMovableDragHandle: { classPropertyName: "ngnMovableDragHandle", publicName: "ngnMovableDragHandle", isSignal: true, isRequired: false, transformFunction: null }, ngnMovableChangeCursor: { classPropertyName: "ngnMovableChangeCursor", publicName: "ngnMovableChangeCursor", isSignal: true, isRequired: false, transformFunction: null }, ngnMovableLimitToViewport: { classPropertyName: "ngnMovableLimitToViewport", publicName: "ngnMovableLimitToViewport", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 });
304
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnMovable, deps: [], target: i0.ɵɵFactoryTarget.Directive });
305
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.2", type: NgnMovable, isStandalone: true, selector: "[ngnMovable]", inputs: { ngnMovable: { classPropertyName: "ngnMovable", publicName: "ngnMovable", isSignal: true, isRequired: false, transformFunction: null }, ngnMovableDragHandle: { classPropertyName: "ngnMovableDragHandle", publicName: "ngnMovableDragHandle", isSignal: true, isRequired: false, transformFunction: null }, ngnMovableChangeCursor: { classPropertyName: "ngnMovableChangeCursor", publicName: "ngnMovableChangeCursor", isSignal: true, isRequired: false, transformFunction: null }, ngnMovableLimitToViewport: { classPropertyName: "ngnMovableLimitToViewport", publicName: "ngnMovableLimitToViewport", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 });
306
306
  }
307
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnMovable, decorators: [{
307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnMovable, decorators: [{
308
308
  type: Directive,
309
309
  args: [{
310
310
  selector: '[ngnMovable]',
@@ -321,12 +321,12 @@ class NgnResizable {
321
321
  /**
322
322
  * Whether the element is resizable.
323
323
  */
324
- ngnResizable = input(true, ...(ngDevMode ? [{ debugName: "ngnResizable" }] : []));
324
+ ngnResizable = input(true, ...(ngDevMode ? [{ debugName: "ngnResizable" }] : /* istanbul ignore next */ []));
325
325
  /**
326
326
  * The maximum size of the resizable element.
327
327
  */
328
- ngnResizableSizeLimits = input(...(ngDevMode ? [undefined, { debugName: "ngnResizableSizeLimits" }] : []));
329
- resized = signal(false, ...(ngDevMode ? [{ debugName: "resized" }] : []));
328
+ ngnResizableSizeLimits = input(...(ngDevMode ? [undefined, { debugName: "ngnResizableSizeLimits" }] : /* istanbul ignore next */ []));
329
+ resized = signal(false, ...(ngDevMode ? [{ debugName: "resized" }] : /* istanbul ignore next */ []));
330
330
  _pointerDownSignal = domEventSignal(this._el, 'pointerdown');
331
331
  _pointerUpSignal = domEventSignal(this._document, 'pointerup');
332
332
  _resizeEvent = elementSizeSignal(this._el);
@@ -392,10 +392,10 @@ class NgnResizable {
392
392
  this.resized.set(true);
393
393
  });
394
394
  }
395
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnResizable, deps: [], target: i0.ɵɵFactoryTarget.Directive });
396
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: NgnResizable, isStandalone: true, selector: "[ngnResizable]", inputs: { ngnResizable: { classPropertyName: "ngnResizable", publicName: "ngnResizable", isSignal: true, isRequired: false, transformFunction: null }, ngnResizableSizeLimits: { classPropertyName: "ngnResizableSizeLimits", publicName: "ngnResizableSizeLimits", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "theme.classes({ resizable: !!ngnResizable(), resized: resized()})" } }, ngImport: i0 });
395
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnResizable, deps: [], target: i0.ɵɵFactoryTarget.Directive });
396
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.2", type: NgnResizable, isStandalone: true, selector: "[ngnResizable]", inputs: { ngnResizable: { classPropertyName: "ngnResizable", publicName: "ngnResizable", isSignal: true, isRequired: false, transformFunction: null }, ngnResizableSizeLimits: { classPropertyName: "ngnResizableSizeLimits", publicName: "ngnResizableSizeLimits", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "theme.classes({ resizable: !!ngnResizable(), resized: resized()})" } }, ngImport: i0 });
397
397
  }
398
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnResizable, decorators: [{
398
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnResizable, decorators: [{
399
399
  type: Directive,
400
400
  args: [{
401
401
  selector: '[ngnResizable]',
@@ -407,9 +407,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImpor
407
407
 
408
408
  class NgnScrollAmount {
409
409
  _el = inject(ElementRef);
410
- scrollTop = signal(this._el.nativeElement.scrollTop, ...(ngDevMode ? [{ debugName: "scrollTop" }] : []));
411
- scrollLeft = signal(this._el.nativeElement.scrollLeft, ...(ngDevMode ? [{ debugName: "scrollLeft" }] : []));
412
- _scrollEvent = domEventObservable(this._el.nativeElement, 'scroll');
410
+ /**
411
+ * Optional external scroll container. When set, scroll events and
412
+ * dimensions are tracked on this element instead of the host element.
413
+ */
414
+ scrollContainer = input(...(ngDevMode ? [undefined, { debugName: "scrollContainer" }] : /* istanbul ignore next */ []));
415
+ scrollTarget = computed(() => this.scrollContainer() ?? this._el.nativeElement, ...(ngDevMode ? [{ debugName: "scrollTarget" }] : /* istanbul ignore next */ []));
416
+ scrollTop = signal(this._el.nativeElement.scrollTop, ...(ngDevMode ? [{ debugName: "scrollTop" }] : /* istanbul ignore next */ []));
417
+ scrollLeft = signal(this._el.nativeElement.scrollLeft, ...(ngDevMode ? [{ debugName: "scrollLeft" }] : /* istanbul ignore next */ []));
418
+ _scrollEvent = domEventObservable(this.scrollTarget, 'scroll');
413
419
  constructor() {
414
420
  afterRenderEffect(() => {
415
421
  const obs = this._scrollEvent.pipe(map(e => {
@@ -425,15 +431,15 @@ class NgnScrollAmount {
425
431
  });
426
432
  });
427
433
  }
428
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnScrollAmount, deps: [], target: i0.ɵɵFactoryTarget.Directive });
429
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.0", type: NgnScrollAmount, isStandalone: true, selector: "[ngnScrollAmount]", ngImport: i0 });
434
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnScrollAmount, deps: [], target: i0.ɵɵFactoryTarget.Directive });
435
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.2", type: NgnScrollAmount, isStandalone: true, selector: "[ngnScrollAmount]", inputs: { scrollContainer: { classPropertyName: "scrollContainer", publicName: "scrollContainer", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
430
436
  }
431
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnScrollAmount, decorators: [{
437
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnScrollAmount, decorators: [{
432
438
  type: Directive,
433
439
  args: [{
434
440
  selector: '[ngnScrollAmount]',
435
441
  }]
436
- }], ctorParameters: () => [] });
442
+ }], ctorParameters: () => [], propDecorators: { scrollContainer: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollContainer", required: false }] }] } });
437
443
 
438
444
  /**
439
445
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-directives.mjs","sources":["../../src/directives/autofocus.ts","../../src/directives/drag/drag-base.ts","../../src/directives/drag/drag-scroll.ts","../../src/directives/drag/drag.ts","../../src/directives/movable.ts","../../src/directives/resizable.ts","../../src/directives/scroll-amount.ts","../../src/directives/ngneers-controls-directives.ts"],"sourcesContent":["import {\r\n type AfterViewInit,\r\n booleanAttribute,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\n\r\n@Directive({ selector: '[ngnAutofocus]' })\r\nexport class NgnAutofocus implements AfterViewInit {\r\n private readonly _el = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\r\n private readonly _focused = signal(false);\r\n private readonly _isInitialized = signal(false);\r\n\r\n public readonly ngnAutofocus = input(true, { transform: booleanAttribute });\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.ngnAutofocus()) {\r\n this._focused.set(false);\r\n }\r\n });\r\n effect(() => {\r\n this.autoFocus();\r\n });\r\n }\r\n\r\n public ngAfterViewInit() {\r\n /**\r\n * The additional microtask ensures that the control is rendered and the\r\n * ngn-control-initializing class is removed before trying to focus the element.\r\n */\r\n if (this._el.nativeElement.getClientRects().length === 0) {\r\n queueMicrotask(() => {\r\n this._isInitialized.set(true);\r\n });\r\n } else {\r\n this._isInitialized.set(true);\r\n }\r\n }\r\n\r\n private autoFocus() {\r\n if (!this._isInitialized()) {\r\n return;\r\n }\r\n if (!this.ngnAutofocus()) {\r\n return;\r\n }\r\n if (this._focused()) {\r\n return;\r\n }\r\n this._el.nativeElement.focus();\r\n this._focused.set(true);\r\n }\r\n}\r\n","import {\r\n afterRenderEffect,\r\n Directive,\r\n DOCUMENT,\r\n ElementRef,\r\n inject,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { domEventHandler, domEventObservable, Platform } from '@ngneers/controls/api/ng';\r\n\r\nimport type { NgnDragInfo } from './types';\r\n\r\n@Directive()\r\nexport abstract class NgnDragBase {\r\n protected readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _isBrowser = inject(Platform).isBrowser;\r\n\r\n private _pointerDown = false;\r\n private _startX?: number = undefined;\r\n private _startY?: number = undefined;\r\n\r\n protected readonly isDragging = signal(false);\r\n public readonly dragStart = output<void>();\r\n public readonly dragEnd = output<void>();\r\n public readonly dragged = output<NgnDragInfo>();\r\n\r\n private readonly _pointerDownEvent = domEventObservable(this.el.nativeElement, 'pointerdown');\r\n private readonly _pointerMoveEvent = domEventObservable(this._document, 'pointermove');\r\n private readonly _pointerUpEvent = domEventObservable(this._document, 'pointerup');\r\n\r\n constructor() {\r\n if (!this._isBrowser) {\r\n return;\r\n }\r\n domEventHandler(this.el.nativeElement, 'touchmove', e => {\r\n if (e.cancelable) {\r\n e.preventDefault();\r\n }\r\n });\r\n afterRenderEffect(() => {\r\n this._pointerDownEvent.subscribe(event => {\r\n this._pointerDown = true;\r\n this._startX = (event as PointerEvent).clientX;\r\n this._startY = (event as PointerEvent).clientY;\r\n });\r\n this._pointerUpEvent.subscribe(() => {\r\n if (!this._pointerDown) {\r\n return;\r\n }\r\n this._pointerDown = false;\r\n this._startX = undefined;\r\n this._startY = undefined;\r\n this.isDragging.set(false);\r\n this.dragEnd.emit();\r\n });\r\n\r\n this._pointerMoveEvent.subscribe(event => {\r\n if (!this._pointerDown) {\r\n return;\r\n }\r\n this.handleDrag(event);\r\n });\r\n });\r\n }\r\n\r\n protected abstract onDragged(delta: NgnDragInfo): void;\r\n\r\n private onDraggedInt(delta: NgnDragInfo) {\r\n this.dragged.emit(delta);\r\n this.onDragged(delta);\r\n }\r\n\r\n private handleDrag(event: Event) {\r\n const { clientX, clientY } = event as PointerEvent;\r\n if (this._startX === undefined || this._startY === undefined) {\r\n throw new Error('Start positions are undefined');\r\n }\r\n const deltaX = clientX - this._startX;\r\n const deltaY = clientY - this._startY;\r\n if (!this.isDragging()) {\r\n const distance = Math.sqrt(deltaX ** 2 + deltaY ** 2);\r\n if (distance < 5) {\r\n return;\r\n }\r\n this.isDragging.set(true);\r\n this.dragStart.emit();\r\n }\r\n if (!this.isDragging()) {\r\n return;\r\n }\r\n this._startX = clientX;\r\n this._startY = clientY;\r\n this.onDraggedInt({ deltaX: deltaX, deltaY: deltaY, absoluteX: clientX, absoluteY: clientY });\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\nimport { NgnDragBase } from './drag-base';\r\n\r\nimport type { NgnDragInfo } from './types';\r\n\r\n@Directive({\r\n selector: '[ngnDragScroll]',\r\n})\r\nexport class NgnDragScroll extends NgnDragBase {\r\n protected onDragged(delta: NgnDragInfo): void {\r\n this.el.nativeElement.scrollBy({\r\n left: -delta.deltaX,\r\n top: -delta.deltaY,\r\n behavior: 'auto',\r\n });\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\nimport { NgnDragBase } from './drag-base';\r\n\r\nimport type { NgnDragInfo } from './types';\r\n\r\n@Directive({\r\n selector: '[ngnDrag]',\r\n})\r\nexport class NgnDrag extends NgnDragBase {\r\n protected onDragged(delta: NgnDragInfo): void {\r\n // do nothing\r\n }\r\n}\r\n","import {\r\n booleanAttribute,\r\n computed,\r\n Directive,\r\n DOCUMENT,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { domEventHandler, domEventSignal } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\nimport { signalWithPrevious } from '@ngneers/controls/utils-ng';\r\nimport { movableDirectiveTemplate } from '@ngneers/controls-themes/templates/api';\r\n\r\n@Directive({\r\n selector: '[ngnMovable]',\r\n})\r\nexport class NgnMovable extends NgnBase<'movable'> {\r\n protected readonly theme = this.injectThemeTemplate(movableDirectiveTemplate, {\r\n movable: () => this.ngnMovable(),\r\n moved: () => this.dragged(),\r\n });\r\n private readonly _el = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\r\n private readonly _document = inject(DOCUMENT);\r\n\r\n /**\r\n * Whether the element is movable.\r\n * @default true\r\n */\r\n public readonly ngnMovable = input(true, { transform: booleanAttribute });\r\n\r\n /**\r\n * The handle element used to drag the element. If omitted, the entire element will be used as the drag handle.\r\n * @default null\r\n */\r\n public readonly ngnMovableDragHandle = input<HTMLElement | null>(null);\r\n\r\n /**\r\n * When `true`, the cursor will change to indicate that the element / drag handle is movable.\r\n * @default true\r\n */\r\n public readonly ngnMovableChangeCursor = input(true, { transform: booleanAttribute });\r\n\r\n /**\r\n * When `true`, the movement will be limited to the viewport.\r\n * @default true\r\n */\r\n public readonly ngnMovableLimitToViewport = input(true, { transform: booleanAttribute });\r\n\r\n private readonly _ngnMovableDragHandleWithPrevious = signalWithPrevious(\r\n this.ngnMovableDragHandle,\r\n null\r\n );\r\n\r\n private readonly _eventElement = computed(() => {\r\n const handle = this.ngnMovableDragHandle();\r\n return handle ?? this._el.nativeElement;\r\n });\r\n\r\n protected readonly dragged = signal(false);\r\n\r\n private readonly _pointerDownSignal = domEventSignal(this._eventElement, 'pointerdown');\r\n private readonly _pointerMoveSignal = domEventSignal(this._document, 'pointermove');\r\n private readonly _pointerUpSignal = domEventSignal(this._document, 'pointerup');\r\n\r\n private readonly _isDragging = signal(false);\r\n private _startX = 0;\r\n private _startY = 0;\r\n\r\n constructor() {\r\n super();\r\n\r\n domEventHandler(this._el.nativeElement, 'touchmove', e => {\r\n if (!this.ngnMovable()) {\r\n return;\r\n }\r\n if (e.cancelable) {\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (!this.ngnMovable()) {\r\n return;\r\n }\r\n const pointerDown = this._pointerDownSignal();\r\n // check if primary button or touch\r\n if (pointerDown && (pointerDown.button === 0 || pointerDown.pointerType === 'touch')) {\r\n this._isDragging.set(true);\r\n this._startX = pointerDown.clientX - this._el.nativeElement.offsetLeft;\r\n this._startY = pointerDown.clientY - this._el.nativeElement.offsetTop;\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (!this.ngnMovable()) {\r\n return;\r\n }\r\n const pointerMove = this._pointerMoveSignal();\r\n if (pointerMove && untracked(this._isDragging)) {\r\n this.dragged.set(true);\r\n const newLeft = pointerMove.clientX - this._startX;\r\n const newTop = pointerMove.clientY - this._startY;\r\n\r\n if (this.ngnMovableLimitToViewport()) {\r\n const documentRect = this._document.documentElement.getBoundingClientRect();\r\n const elRect = this._el.nativeElement.getBoundingClientRect();\r\n\r\n const clampedLeft = Math.min(Math.max(newLeft, 0), documentRect.width - elRect.width);\r\n const clampedTop = Math.min(Math.max(newTop, 0), documentRect.height - elRect.height);\r\n\r\n this._el.nativeElement.style.left = `${clampedLeft}px`;\r\n this._el.nativeElement.style.top = `${clampedTop}px`;\r\n } else {\r\n this._el.nativeElement.style.left = `${pointerMove.clientX - this._startX}px`;\r\n this._el.nativeElement.style.top = `${pointerMove.clientY - this._startY}px`;\r\n }\r\n\r\n this._el.nativeElement.style.width = `${this._el.nativeElement.offsetWidth}px`;\r\n this._el.nativeElement.style.height = `${this._el.nativeElement.offsetHeight}px`;\r\n if (\r\n !['fixed', 'absolute', 'static'].includes(\r\n getComputedStyle(this._el.nativeElement).position\r\n )\r\n ) {\r\n this._el.nativeElement.style.position = 'fixed';\r\n }\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (!this.ngnMovable()) {\r\n return;\r\n }\r\n const pointerUp = this._pointerUpSignal();\r\n if (pointerUp && untracked(this._isDragging)) {\r\n this._isDragging.set(false);\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (!this.ngnMovable()) {\r\n this._isDragging.set(false);\r\n }\r\n });\r\n\r\n effect(() => {\r\n this.refreshCursor();\r\n });\r\n }\r\n\r\n public bakePosition() {\r\n this._el.nativeElement.style.left = `${this._el.nativeElement.offsetLeft}px`;\r\n this._el.nativeElement.style.top = `${this._el.nativeElement.offsetTop}px`;\r\n if (\r\n !['fixed', 'absolute', 'static'].includes(getComputedStyle(this._el.nativeElement).position)\r\n ) {\r\n this._el.nativeElement.style.position = 'fixed';\r\n }\r\n this.dragged.set(true);\r\n }\r\n\r\n private refreshCursor() {\r\n const handle = this._ngnMovableDragHandleWithPrevious();\r\n if (handle.previous && handle.previous !== handle.current) {\r\n handle.previous.classList.remove(\r\n this.theme.class('drag-handle-grab'),\r\n this.theme.class('drag-handle-grabbing')\r\n );\r\n }\r\n if (!this.ngnMovable() || !this.ngnMovableChangeCursor()) {\r\n handle.current?.classList.remove(\r\n this.theme.class('drag-handle-grab'),\r\n this.theme.class('drag-handle-grabbing')\r\n );\r\n return;\r\n }\r\n if (this._isDragging()) {\r\n handle.current?.classList.add(this.theme.class('drag-handle-grabbing'));\r\n handle.current?.classList.remove(this.theme.class('drag-handle-grab'));\r\n } else {\r\n handle.current?.classList.add(this.theme.class('drag-handle-grab'));\r\n handle.current?.classList.remove(this.theme.class('drag-handle-grabbing'));\r\n }\r\n }\r\n}\r\n","import { Directive, DOCUMENT, effect, ElementRef, inject, input, signal } from '@angular/core';\r\nimport {\r\n domEventSignal,\r\n elementSizeSignal,\r\n injectThemeTemplate,\r\n Platform,\r\n} from '@ngneers/controls/api/ng';\r\nimport { resizableDirectiveTemplate } from '@ngneers/controls-themes/templates/api';\r\n\r\nimport { NgnMovable } from './movable';\r\n\r\n@Directive({\r\n selector: '[ngnResizable]',\r\n host: {\r\n '[class]': 'theme.classes({ resizable: !!ngnResizable(), resized: resized()})',\r\n },\r\n})\r\nexport class NgnResizable {\r\n protected readonly theme = injectThemeTemplate(resizableDirectiveTemplate);\r\n private readonly _el = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\r\n private readonly _isBrowser = inject(Platform).isBrowser;\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _ngnMovable = inject(NgnMovable, { optional: true });\r\n private _isPointerDown = false;\r\n\r\n /**\r\n * Whether the element is resizable.\r\n */\r\n public readonly ngnResizable = input<boolean | null | undefined | ''>(true);\r\n /**\r\n * The maximum size of the resizable element.\r\n */\r\n public readonly ngnResizableSizeLimits = input<{\r\n minWidth: string | number | null | undefined;\r\n minHeight: string | number | null | undefined;\r\n maxWidth: string | number | null | undefined;\r\n maxHeight: string | number | null | undefined;\r\n }>();\r\n\r\n protected readonly resized = signal(false);\r\n\r\n private readonly _pointerDownSignal = domEventSignal(this._el, 'pointerdown');\r\n private readonly _pointerUpSignal = domEventSignal(this._document, 'pointerup');\r\n\r\n private readonly _resizeEvent = elementSizeSignal(this._el);\r\n\r\n /**\r\n * Formats a size value from string | number | null | undefined to a CSS string.\r\n * @param value The size value to format\r\n * @returns The formatted CSS string or null if the value is null/undefined\r\n */\r\n private formatSizeValue(value: string | number | null | undefined): string | null {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n return typeof value === 'number' ? `${value}px` : value;\r\n }\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this._pointerDownSignal()) {\r\n this._isPointerDown = true;\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (this._pointerUpSignal()) {\r\n this._isPointerDown = false;\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (!this._isBrowser) {\r\n return;\r\n }\r\n const _size = this._resizeEvent(); // just as the trigger\r\n if (!this._isPointerDown) {\r\n // only react to resize events when the pointer is down (user is resizing)\r\n return;\r\n }\r\n\r\n // If the element is also movable, bake its position to avoid misplacement after resizing\r\n this._ngnMovable?.bakePosition();\r\n\r\n // calculate the max width & height of the element based on the size, position & body\r\n\r\n const bodyWidth = this._document.body.clientWidth;\r\n const bodyHeight = this._document.body.clientHeight;\r\n\r\n const elRect = this._el.nativeElement.getBoundingClientRect();\r\n\r\n const maxWidth = bodyWidth - elRect.left;\r\n const maxHeight = bodyHeight - elRect.top;\r\n\r\n const inputMaxWidth = this.ngnResizableSizeLimits()?.maxWidth;\r\n const inputMaxHeight = this.ngnResizableSizeLimits()?.maxHeight;\r\n const formattedMaxWidth = this.formatSizeValue(inputMaxWidth);\r\n const formattedMaxHeight = this.formatSizeValue(inputMaxHeight);\r\n\r\n this._el.nativeElement.style.maxWidth = formattedMaxWidth\r\n ? `min(${formattedMaxWidth}, ${maxWidth}px)`\r\n : `${maxWidth}px`;\r\n this._el.nativeElement.style.maxHeight = formattedMaxHeight\r\n ? `min(${formattedMaxHeight}, ${maxHeight}px)`\r\n : `${maxHeight}px`;\r\n\r\n const inputMinWidth = this.ngnResizableSizeLimits()?.minWidth;\r\n const inputMinHeight = this.ngnResizableSizeLimits()?.minHeight;\r\n const formattedMinWidth = this.formatSizeValue(inputMinWidth);\r\n const formattedMinHeight = this.formatSizeValue(inputMinHeight);\r\n\r\n if (formattedMinWidth) {\r\n this._el.nativeElement.style.minWidth = formattedMinWidth;\r\n }\r\n if (formattedMinHeight) {\r\n this._el.nativeElement.style.minHeight = formattedMinHeight;\r\n }\r\n\r\n this.resized.set(true);\r\n });\r\n }\r\n}\r\n","import { afterRenderEffect, Directive, ElementRef, inject, signal } from '@angular/core';\r\nimport { domEventObservable } from '@ngneers/controls/api/ng';\r\nimport { map } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[ngnScrollAmount]',\r\n})\r\nexport class NgnScrollAmount {\r\n private readonly _el = inject<ElementRef<HTMLElement>>(ElementRef);\r\n public readonly scrollTop = signal(this._el.nativeElement.scrollTop);\r\n public readonly scrollLeft = signal(this._el.nativeElement.scrollLeft);\r\n private readonly _scrollEvent = domEventObservable(this._el.nativeElement, 'scroll');\r\n\r\n constructor() {\r\n afterRenderEffect(() => {\r\n const obs = this._scrollEvent.pipe(\r\n map(e => {\r\n const target = e.target as HTMLElement;\r\n return {\r\n top: target.scrollTop,\r\n left: target.scrollLeft,\r\n };\r\n })\r\n );\r\n obs.subscribe(scroll => {\r\n this.scrollTop.set(scroll.top);\r\n this.scrollLeft.set(scroll.left);\r\n });\r\n });\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngneers-controls-directives.mjs","sources":["../../src/directives/autofocus.ts","../../src/directives/drag/drag-base.ts","../../src/directives/drag/drag-scroll.ts","../../src/directives/drag/drag.ts","../../src/directives/movable.ts","../../src/directives/resizable.ts","../../src/directives/scroll-amount.ts","../../src/directives/ngneers-controls-directives.ts"],"sourcesContent":["import {\r\n type AfterViewInit,\r\n booleanAttribute,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\n\r\n@Directive({ selector: '[ngnAutofocus]' })\r\nexport class NgnAutofocus implements AfterViewInit {\r\n private readonly _el = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\r\n private readonly _focused = signal(false);\r\n private readonly _isInitialized = signal(false);\r\n\r\n public readonly ngnAutofocus = input(true, { transform: booleanAttribute });\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.ngnAutofocus()) {\r\n this._focused.set(false);\r\n }\r\n });\r\n effect(() => {\r\n this.autoFocus();\r\n });\r\n }\r\n\r\n public ngAfterViewInit() {\r\n /**\r\n * The additional microtask ensures that the control is rendered and the\r\n * ngn-control-initializing class is removed before trying to focus the element.\r\n */\r\n if (this._el.nativeElement.getClientRects().length === 0) {\r\n queueMicrotask(() => {\r\n this._isInitialized.set(true);\r\n });\r\n } else {\r\n this._isInitialized.set(true);\r\n }\r\n }\r\n\r\n private autoFocus() {\r\n if (!this._isInitialized()) {\r\n return;\r\n }\r\n if (!this.ngnAutofocus()) {\r\n return;\r\n }\r\n if (this._focused()) {\r\n return;\r\n }\r\n this._el.nativeElement.focus();\r\n this._focused.set(true);\r\n }\r\n}\r\n","import {\r\n afterRenderEffect,\r\n Directive,\r\n DOCUMENT,\r\n ElementRef,\r\n inject,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { domEventHandler, domEventObservable, Platform } from '@ngneers/controls/api/ng';\r\n\r\nimport type { NgnDragInfo } from './types';\r\n\r\n@Directive()\r\nexport abstract class NgnDragBase {\r\n protected readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _isBrowser = inject(Platform).isBrowser;\r\n\r\n private _pointerDown = false;\r\n private _startX?: number = undefined;\r\n private _startY?: number = undefined;\r\n\r\n protected readonly isDragging = signal(false);\r\n public readonly dragStart = output<void>();\r\n public readonly dragEnd = output<void>();\r\n public readonly dragged = output<NgnDragInfo>();\r\n\r\n private readonly _pointerDownEvent = domEventObservable(this.el.nativeElement, 'pointerdown');\r\n private readonly _pointerMoveEvent = domEventObservable(this._document, 'pointermove');\r\n private readonly _pointerUpEvent = domEventObservable(this._document, 'pointerup');\r\n\r\n constructor() {\r\n if (!this._isBrowser) {\r\n return;\r\n }\r\n domEventHandler(this.el.nativeElement, 'touchmove', e => {\r\n if (e.cancelable) {\r\n e.preventDefault();\r\n }\r\n });\r\n afterRenderEffect(() => {\r\n this._pointerDownEvent.subscribe(event => {\r\n this._pointerDown = true;\r\n this._startX = (event as PointerEvent).clientX;\r\n this._startY = (event as PointerEvent).clientY;\r\n });\r\n this._pointerUpEvent.subscribe(() => {\r\n if (!this._pointerDown) {\r\n return;\r\n }\r\n this._pointerDown = false;\r\n this._startX = undefined;\r\n this._startY = undefined;\r\n this.isDragging.set(false);\r\n this.dragEnd.emit();\r\n });\r\n\r\n this._pointerMoveEvent.subscribe(event => {\r\n if (!this._pointerDown) {\r\n return;\r\n }\r\n this.handleDrag(event);\r\n });\r\n });\r\n }\r\n\r\n protected abstract onDragged(delta: NgnDragInfo): void;\r\n\r\n private onDraggedInt(delta: NgnDragInfo) {\r\n this.dragged.emit(delta);\r\n this.onDragged(delta);\r\n }\r\n\r\n private handleDrag(event: Event) {\r\n const { clientX, clientY } = event as PointerEvent;\r\n if (this._startX === undefined || this._startY === undefined) {\r\n throw new Error('Start positions are undefined');\r\n }\r\n const deltaX = clientX - this._startX;\r\n const deltaY = clientY - this._startY;\r\n if (!this.isDragging()) {\r\n const distance = Math.sqrt(deltaX ** 2 + deltaY ** 2);\r\n if (distance < 5) {\r\n return;\r\n }\r\n this.isDragging.set(true);\r\n this.dragStart.emit();\r\n }\r\n if (!this.isDragging()) {\r\n return;\r\n }\r\n this._startX = clientX;\r\n this._startY = clientY;\r\n this.onDraggedInt({ deltaX: deltaX, deltaY: deltaY, absoluteX: clientX, absoluteY: clientY });\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\nimport { NgnDragBase } from './drag-base';\r\n\r\nimport type { NgnDragInfo } from './types';\r\n\r\n@Directive({\r\n selector: '[ngnDragScroll]',\r\n})\r\nexport class NgnDragScroll extends NgnDragBase {\r\n protected onDragged(delta: NgnDragInfo): void {\r\n this.el.nativeElement.scrollBy({\r\n left: -delta.deltaX,\r\n top: -delta.deltaY,\r\n behavior: 'auto',\r\n });\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\nimport { NgnDragBase } from './drag-base';\r\n\r\nimport type { NgnDragInfo } from './types';\r\n\r\n@Directive({\r\n selector: '[ngnDrag]',\r\n})\r\nexport class NgnDrag extends NgnDragBase {\r\n protected onDragged(delta: NgnDragInfo): void {\r\n // do nothing\r\n }\r\n}\r\n","import {\r\n booleanAttribute,\r\n computed,\r\n Directive,\r\n DOCUMENT,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { domEventHandler, domEventSignal } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\nimport { signalWithPrevious } from '@ngneers/controls/utils-ng';\r\nimport { movableDirectiveTemplate } from '@ngneers/controls-themes/templates/api';\r\n\r\n@Directive({\r\n selector: '[ngnMovable]',\r\n})\r\nexport class NgnMovable extends NgnBase<'movable'> {\r\n protected readonly theme = this.injectThemeTemplate(movableDirectiveTemplate, {\r\n movable: () => this.ngnMovable(),\r\n moved: () => this.dragged(),\r\n });\r\n private readonly _el = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\r\n private readonly _document = inject(DOCUMENT);\r\n\r\n /**\r\n * Whether the element is movable.\r\n * @default true\r\n */\r\n public readonly ngnMovable = input(true, { transform: booleanAttribute });\r\n\r\n /**\r\n * The handle element used to drag the element. If omitted, the entire element will be used as the drag handle.\r\n * @default null\r\n */\r\n public readonly ngnMovableDragHandle = input<HTMLElement | null>(null);\r\n\r\n /**\r\n * When `true`, the cursor will change to indicate that the element / drag handle is movable.\r\n * @default true\r\n */\r\n public readonly ngnMovableChangeCursor = input(true, { transform: booleanAttribute });\r\n\r\n /**\r\n * When `true`, the movement will be limited to the viewport.\r\n * @default true\r\n */\r\n public readonly ngnMovableLimitToViewport = input(true, { transform: booleanAttribute });\r\n\r\n private readonly _ngnMovableDragHandleWithPrevious = signalWithPrevious(\r\n this.ngnMovableDragHandle,\r\n null\r\n );\r\n\r\n private readonly _eventElement = computed(() => {\r\n const handle = this.ngnMovableDragHandle();\r\n return handle ?? this._el.nativeElement;\r\n });\r\n\r\n protected readonly dragged = signal(false);\r\n\r\n private readonly _pointerDownSignal = domEventSignal(this._eventElement, 'pointerdown');\r\n private readonly _pointerMoveSignal = domEventSignal(this._document, 'pointermove');\r\n private readonly _pointerUpSignal = domEventSignal(this._document, 'pointerup');\r\n\r\n private readonly _isDragging = signal(false);\r\n private _startX = 0;\r\n private _startY = 0;\r\n\r\n constructor() {\r\n super();\r\n\r\n domEventHandler(this._el.nativeElement, 'touchmove', e => {\r\n if (!this.ngnMovable()) {\r\n return;\r\n }\r\n if (e.cancelable) {\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (!this.ngnMovable()) {\r\n return;\r\n }\r\n const pointerDown = this._pointerDownSignal();\r\n // check if primary button or touch\r\n if (pointerDown && (pointerDown.button === 0 || pointerDown.pointerType === 'touch')) {\r\n this._isDragging.set(true);\r\n this._startX = pointerDown.clientX - this._el.nativeElement.offsetLeft;\r\n this._startY = pointerDown.clientY - this._el.nativeElement.offsetTop;\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (!this.ngnMovable()) {\r\n return;\r\n }\r\n const pointerMove = this._pointerMoveSignal();\r\n if (pointerMove && untracked(this._isDragging)) {\r\n this.dragged.set(true);\r\n const newLeft = pointerMove.clientX - this._startX;\r\n const newTop = pointerMove.clientY - this._startY;\r\n\r\n if (this.ngnMovableLimitToViewport()) {\r\n const documentRect = this._document.documentElement.getBoundingClientRect();\r\n const elRect = this._el.nativeElement.getBoundingClientRect();\r\n\r\n const clampedLeft = Math.min(Math.max(newLeft, 0), documentRect.width - elRect.width);\r\n const clampedTop = Math.min(Math.max(newTop, 0), documentRect.height - elRect.height);\r\n\r\n this._el.nativeElement.style.left = `${clampedLeft}px`;\r\n this._el.nativeElement.style.top = `${clampedTop}px`;\r\n } else {\r\n this._el.nativeElement.style.left = `${pointerMove.clientX - this._startX}px`;\r\n this._el.nativeElement.style.top = `${pointerMove.clientY - this._startY}px`;\r\n }\r\n\r\n this._el.nativeElement.style.width = `${this._el.nativeElement.offsetWidth}px`;\r\n this._el.nativeElement.style.height = `${this._el.nativeElement.offsetHeight}px`;\r\n if (\r\n !['fixed', 'absolute', 'static'].includes(\r\n getComputedStyle(this._el.nativeElement).position\r\n )\r\n ) {\r\n this._el.nativeElement.style.position = 'fixed';\r\n }\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (!this.ngnMovable()) {\r\n return;\r\n }\r\n const pointerUp = this._pointerUpSignal();\r\n if (pointerUp && untracked(this._isDragging)) {\r\n this._isDragging.set(false);\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (!this.ngnMovable()) {\r\n this._isDragging.set(false);\r\n }\r\n });\r\n\r\n effect(() => {\r\n this.refreshCursor();\r\n });\r\n }\r\n\r\n public bakePosition() {\r\n this._el.nativeElement.style.left = `${this._el.nativeElement.offsetLeft}px`;\r\n this._el.nativeElement.style.top = `${this._el.nativeElement.offsetTop}px`;\r\n if (\r\n !['fixed', 'absolute', 'static'].includes(getComputedStyle(this._el.nativeElement).position)\r\n ) {\r\n this._el.nativeElement.style.position = 'fixed';\r\n }\r\n this.dragged.set(true);\r\n }\r\n\r\n private refreshCursor() {\r\n const handle = this._ngnMovableDragHandleWithPrevious();\r\n if (handle.previous && handle.previous !== handle.current) {\r\n handle.previous.classList.remove(\r\n this.theme.class('drag-handle-grab'),\r\n this.theme.class('drag-handle-grabbing')\r\n );\r\n }\r\n if (!this.ngnMovable() || !this.ngnMovableChangeCursor()) {\r\n handle.current?.classList.remove(\r\n this.theme.class('drag-handle-grab'),\r\n this.theme.class('drag-handle-grabbing')\r\n );\r\n return;\r\n }\r\n if (this._isDragging()) {\r\n handle.current?.classList.add(this.theme.class('drag-handle-grabbing'));\r\n handle.current?.classList.remove(this.theme.class('drag-handle-grab'));\r\n } else {\r\n handle.current?.classList.add(this.theme.class('drag-handle-grab'));\r\n handle.current?.classList.remove(this.theme.class('drag-handle-grabbing'));\r\n }\r\n }\r\n}\r\n","import { Directive, DOCUMENT, effect, ElementRef, inject, input, signal } from '@angular/core';\r\nimport {\r\n domEventSignal,\r\n elementSizeSignal,\r\n injectThemeTemplate,\r\n Platform,\r\n} from '@ngneers/controls/api/ng';\r\nimport { resizableDirectiveTemplate } from '@ngneers/controls-themes/templates/api';\r\n\r\nimport { NgnMovable } from './movable';\r\n\r\n@Directive({\r\n selector: '[ngnResizable]',\r\n host: {\r\n '[class]': 'theme.classes({ resizable: !!ngnResizable(), resized: resized()})',\r\n },\r\n})\r\nexport class NgnResizable {\r\n protected readonly theme = injectThemeTemplate(resizableDirectiveTemplate);\r\n private readonly _el = inject<ElementRef<HTMLElement>>(ElementRef<HTMLElement>);\r\n private readonly _isBrowser = inject(Platform).isBrowser;\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _ngnMovable = inject(NgnMovable, { optional: true });\r\n private _isPointerDown = false;\r\n\r\n /**\r\n * Whether the element is resizable.\r\n */\r\n public readonly ngnResizable = input<boolean | null | undefined | ''>(true);\r\n /**\r\n * The maximum size of the resizable element.\r\n */\r\n public readonly ngnResizableSizeLimits = input<{\r\n minWidth: string | number | null | undefined;\r\n minHeight: string | number | null | undefined;\r\n maxWidth: string | number | null | undefined;\r\n maxHeight: string | number | null | undefined;\r\n }>();\r\n\r\n protected readonly resized = signal(false);\r\n\r\n private readonly _pointerDownSignal = domEventSignal(this._el, 'pointerdown');\r\n private readonly _pointerUpSignal = domEventSignal(this._document, 'pointerup');\r\n\r\n private readonly _resizeEvent = elementSizeSignal(this._el);\r\n\r\n /**\r\n * Formats a size value from string | number | null | undefined to a CSS string.\r\n * @param value The size value to format\r\n * @returns The formatted CSS string or null if the value is null/undefined\r\n */\r\n private formatSizeValue(value: string | number | null | undefined): string | null {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n return typeof value === 'number' ? `${value}px` : value;\r\n }\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this._pointerDownSignal()) {\r\n this._isPointerDown = true;\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (this._pointerUpSignal()) {\r\n this._isPointerDown = false;\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (!this._isBrowser) {\r\n return;\r\n }\r\n const _size = this._resizeEvent(); // just as the trigger\r\n if (!this._isPointerDown) {\r\n // only react to resize events when the pointer is down (user is resizing)\r\n return;\r\n }\r\n\r\n // If the element is also movable, bake its position to avoid misplacement after resizing\r\n this._ngnMovable?.bakePosition();\r\n\r\n // calculate the max width & height of the element based on the size, position & body\r\n\r\n const bodyWidth = this._document.body.clientWidth;\r\n const bodyHeight = this._document.body.clientHeight;\r\n\r\n const elRect = this._el.nativeElement.getBoundingClientRect();\r\n\r\n const maxWidth = bodyWidth - elRect.left;\r\n const maxHeight = bodyHeight - elRect.top;\r\n\r\n const inputMaxWidth = this.ngnResizableSizeLimits()?.maxWidth;\r\n const inputMaxHeight = this.ngnResizableSizeLimits()?.maxHeight;\r\n const formattedMaxWidth = this.formatSizeValue(inputMaxWidth);\r\n const formattedMaxHeight = this.formatSizeValue(inputMaxHeight);\r\n\r\n this._el.nativeElement.style.maxWidth = formattedMaxWidth\r\n ? `min(${formattedMaxWidth}, ${maxWidth}px)`\r\n : `${maxWidth}px`;\r\n this._el.nativeElement.style.maxHeight = formattedMaxHeight\r\n ? `min(${formattedMaxHeight}, ${maxHeight}px)`\r\n : `${maxHeight}px`;\r\n\r\n const inputMinWidth = this.ngnResizableSizeLimits()?.minWidth;\r\n const inputMinHeight = this.ngnResizableSizeLimits()?.minHeight;\r\n const formattedMinWidth = this.formatSizeValue(inputMinWidth);\r\n const formattedMinHeight = this.formatSizeValue(inputMinHeight);\r\n\r\n if (formattedMinWidth) {\r\n this._el.nativeElement.style.minWidth = formattedMinWidth;\r\n }\r\n if (formattedMinHeight) {\r\n this._el.nativeElement.style.minHeight = formattedMinHeight;\r\n }\r\n\r\n this.resized.set(true);\r\n });\r\n }\r\n}\r\n","import {\r\n afterRenderEffect,\r\n computed,\r\n Directive,\r\n ElementRef,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { domEventObservable } from '@ngneers/controls/api/ng';\r\nimport { map } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[ngnScrollAmount]',\r\n})\r\nexport class NgnScrollAmount {\r\n private readonly _el = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n /**\r\n * Optional external scroll container. When set, scroll events and\r\n * dimensions are tracked on this element instead of the host element.\r\n */\r\n public readonly scrollContainer = input<HTMLElement | undefined>();\r\n\r\n public readonly scrollTarget = computed(() => this.scrollContainer() ?? this._el.nativeElement);\r\n public readonly scrollTop = signal(this._el.nativeElement.scrollTop);\r\n public readonly scrollLeft = signal(this._el.nativeElement.scrollLeft);\r\n\r\n private readonly _scrollEvent = domEventObservable(this.scrollTarget, 'scroll');\r\n\r\n constructor() {\r\n afterRenderEffect(() => {\r\n const obs = this._scrollEvent.pipe(\r\n map(e => {\r\n const target = e.target as HTMLElement;\r\n return {\r\n top: target.scrollTop,\r\n left: target.scrollLeft,\r\n };\r\n })\r\n );\r\n obs.subscribe(scroll => {\r\n this.scrollTop.set(scroll.top);\r\n this.scrollLeft.set(scroll.left);\r\n });\r\n });\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -12,37 +12,37 @@ import { drawerControlTemplate } from '@ngneers/controls-themes/templates/drawer
12
12
  class DrawerTemplates extends NgnBase {
13
13
  // Header template
14
14
  _defaultHeaderTemplate = viewChild.required('defaultHeaderTemplate');
15
- _userHeaderTemplate = contentChild('header', ...(ngDevMode ? [{ debugName: "_userHeaderTemplate" }] : []));
15
+ _userHeaderTemplate = contentChild('header', ...(ngDevMode ? [{ debugName: "_userHeaderTemplate" }] : /* istanbul ignore next */ []));
16
16
  /**
17
17
  * Set a custom template for the header.
18
18
  * Can also be set using an `<ng-template>` element with `#header` template reference variable.
19
19
  */
20
- templateHeader = input(null, ...(ngDevMode ? [{ debugName: "templateHeader" }] : []));
21
- headerTemplate = computed(() => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate(), ...(ngDevMode ? [{ debugName: "headerTemplate" }] : []));
20
+ templateHeader = input(null, ...(ngDevMode ? [{ debugName: "templateHeader" }] : /* istanbul ignore next */ []));
21
+ headerTemplate = computed(() => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate(), ...(ngDevMode ? [{ debugName: "headerTemplate" }] : /* istanbul ignore next */ []));
22
22
  // Footer template
23
- _userFooterTemplate = contentChild('footer', ...(ngDevMode ? [{ debugName: "_userFooterTemplate" }] : []));
23
+ _userFooterTemplate = contentChild('footer', ...(ngDevMode ? [{ debugName: "_userFooterTemplate" }] : /* istanbul ignore next */ []));
24
24
  /**
25
25
  * Set a custom template for the footer.
26
26
  * Can also be set using an `<ng-template>` element with `#footer` template reference variable.
27
27
  */
28
- templateFooter = input(null, ...(ngDevMode ? [{ debugName: "templateFooter" }] : []));
29
- footerTemplate = computed(() => this._userFooterTemplate() ?? this.templateFooter(), ...(ngDevMode ? [{ debugName: "footerTemplate" }] : []));
28
+ templateFooter = input(null, ...(ngDevMode ? [{ debugName: "templateFooter" }] : /* istanbul ignore next */ []));
29
+ footerTemplate = computed(() => this._userFooterTemplate() ?? this.templateFooter(), ...(ngDevMode ? [{ debugName: "footerTemplate" }] : /* istanbul ignore next */ []));
30
30
  // Content template
31
- _userContentTemplate = contentChild('content', ...(ngDevMode ? [{ debugName: "_userContentTemplate" }] : []));
31
+ _userContentTemplate = contentChild('content', ...(ngDevMode ? [{ debugName: "_userContentTemplate" }] : /* istanbul ignore next */ []));
32
32
  /**
33
33
  * Set a custom template for the content.
34
34
  * Can also be set using an `<ng-template>` element with `#content` template reference variable.
35
35
  */
36
- content = input(null, ...(ngDevMode ? [{ debugName: "content" }] : []));
37
- contentTemplate = computed(() => this._userContentTemplate() ?? this.content(), ...(ngDevMode ? [{ debugName: "contentTemplate" }] : []));
36
+ content = input(null, ...(ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []));
37
+ contentTemplate = computed(() => this._userContentTemplate() ?? this.content(), ...(ngDevMode ? [{ debugName: "contentTemplate" }] : /* istanbul ignore next */ []));
38
38
  /**
39
39
  * Types for the drawer templates.
40
40
  */
41
41
  templateTypes = templateTypesFn();
42
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DrawerTemplates, deps: null, target: i0.ɵɵFactoryTarget.Directive });
43
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.0", type: DrawerTemplates, isStandalone: true, inputs: { templateHeader: { classPropertyName: "templateHeader", publicName: "templateHeader", isSignal: true, isRequired: false, transformFunction: null }, templateFooter: { classPropertyName: "templateFooter", publicName: "templateFooter", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "_userHeaderTemplate", first: true, predicate: ["header"], descendants: true, isSignal: true }, { propertyName: "_userFooterTemplate", first: true, predicate: ["footer"], descendants: true, isSignal: true }, { propertyName: "_userContentTemplate", first: true, predicate: ["content"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_defaultHeaderTemplate", first: true, predicate: ["defaultHeaderTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 });
42
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DrawerTemplates, deps: null, target: i0.ɵɵFactoryTarget.Directive });
43
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.2", type: DrawerTemplates, isStandalone: true, inputs: { templateHeader: { classPropertyName: "templateHeader", publicName: "templateHeader", isSignal: true, isRequired: false, transformFunction: null }, templateFooter: { classPropertyName: "templateFooter", publicName: "templateFooter", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "_userHeaderTemplate", first: true, predicate: ["header"], descendants: true, isSignal: true }, { propertyName: "_userFooterTemplate", first: true, predicate: ["footer"], descendants: true, isSignal: true }, { propertyName: "_userContentTemplate", first: true, predicate: ["content"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_defaultHeaderTemplate", first: true, predicate: ["defaultHeaderTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 });
44
44
  }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DrawerTemplates, decorators: [{
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: DrawerTemplates, decorators: [{
46
46
  type: Directive
47
47
  }], propDecorators: { _defaultHeaderTemplate: [{ type: i0.ViewChild, args: ['defaultHeaderTemplate', { isSignal: true }] }], _userHeaderTemplate: [{ type: i0.ContentChild, args: ['header', { isSignal: true }] }], templateHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateHeader", required: false }] }], _userFooterTemplate: [{ type: i0.ContentChild, args: ['footer', { isSignal: true }] }], templateFooter: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateFooter", required: false }] }], _userContentTemplate: [{ type: i0.ContentChild, args: ['content', { isSignal: true }] }], content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }] } });
48
48
 
@@ -64,58 +64,58 @@ class NgnDrawer extends DrawerTemplates {
64
64
  *
65
65
  * You probably want to react to openChange events from outside to update your variable accordingly.
66
66
  */
67
- open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
67
+ open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
68
68
  /**
69
69
  * How the drawer closes depending on user interaction.
70
70
  * @default 'any'
71
71
  */
72
- closeBy = input('any', ...(ngDevMode ? [{ debugName: "closeBy" }] : []));
72
+ closeBy = input('any', ...(ngDevMode ? [{ debugName: "closeBy" }] : /* istanbul ignore next */ []));
73
73
  /**
74
74
  * Whether the drawer is a modal or not.
75
75
  * A modal drawer prevents interaction with the rest of the page while open.
76
76
  * @default false
77
77
  */
78
- modal = input(false, { ...(ngDevMode ? { debugName: "modal" } : {}), transform: booleanAttribute });
78
+ modal = input(false, { ...(ngDevMode ? { debugName: "modal" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
79
79
  /**
80
80
  * Position of the drawer
81
81
  * @default 'left'
82
82
  */
83
- position = input('left', ...(ngDevMode ? [{ debugName: "position" }] : []));
83
+ position = input('left', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
84
84
  /**
85
85
  * The width or height of the drawer depending on its position
86
86
  * @default '300px'
87
87
  */
88
- size = input('300px', ...(ngDevMode ? [{ debugName: "size" }] : []));
88
+ size = input('300px', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
89
89
  /**
90
90
  * Header text of the drawer
91
91
  */
92
- header = input(...(ngDevMode ? [undefined, { debugName: "header" }] : []));
92
+ header = input(...(ngDevMode ? [undefined, { debugName: "header" }] : /* istanbul ignore next */ []));
93
93
  /**
94
94
  * The icon to use for the close button in the default header template
95
95
  */
96
- iconClose = input(...(ngDevMode ? [undefined, { debugName: "iconClose" }] : []));
96
+ iconClose = input(...(ngDevMode ? [undefined, { debugName: "iconClose" }] : /* istanbul ignore next */ []));
97
97
  /**
98
98
  * Lazy load the drawer content
99
99
  * @default false
100
100
  */
101
- lazy = input(false, { ...(ngDevMode ? { debugName: "lazy" } : {}), transform: booleanAttribute });
101
+ lazy = input(false, { ...(ngDevMode ? { debugName: "lazy" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
102
102
  /**
103
103
  * Whether to cache the lazy loaded content
104
104
  * @default false
105
105
  */
106
- cache = input(false, { ...(ngDevMode ? { debugName: "cache" } : {}), transform: booleanAttribute });
106
+ cache = input(false, { ...(ngDevMode ? { debugName: "cache" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
107
107
  appliedPosition = computed(() => {
108
108
  const position = this.position();
109
109
  if (this.platform.windowSize().height < 600 || this.platform.windowSize().width < 600) {
110
110
  return 'fullscreen';
111
111
  }
112
112
  return position;
113
- }, ...(ngDevMode ? [{ debugName: "appliedPosition" }] : []));
113
+ }, ...(ngDevMode ? [{ debugName: "appliedPosition" }] : /* istanbul ignore next */ []));
114
114
  platform = inject(Platform);
115
115
  _togglingTriggeredByInput = false;
116
- isFullyClosed = signal(true, ...(ngDevMode ? [{ debugName: "isFullyClosed" }] : []));
117
- closeByPopover = computed(() => toPopoverCloseBy(this.closeBy()), ...(ngDevMode ? [{ debugName: "closeByPopover" }] : []));
118
- horizontal = computed(() => this.position() === 'top' || this.position() === 'bottom', ...(ngDevMode ? [{ debugName: "horizontal" }] : []));
116
+ isFullyClosed = signal(true, ...(ngDevMode ? [{ debugName: "isFullyClosed" }] : /* istanbul ignore next */ []));
117
+ closeByPopover = computed(() => toPopoverCloseBy(this.closeBy()), ...(ngDevMode ? [{ debugName: "closeByPopover" }] : /* istanbul ignore next */ []));
118
+ horizontal = computed(() => this.position() === 'top' || this.position() === 'bottom', ...(ngDevMode ? [{ debugName: "horizontal" }] : /* istanbul ignore next */ []));
119
119
  doClose = this.hide.bind(this);
120
120
  constructor() {
121
121
  super();
@@ -210,10 +210,10 @@ class NgnDrawer extends DrawerTemplates {
210
210
  this.isFullyClosed.set(false);
211
211
  }
212
212
  }
213
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDrawer, deps: [], target: i0.ɵɵFactoryTarget.Component });
214
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NgnDrawer, isStandalone: true, selector: "ngn-drawer", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, closeBy: { classPropertyName: "closeBy", publicName: "closeBy", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, iconClose: { classPropertyName: "iconClose", publicName: "iconClose", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", open: "openChange" }, host: { attributes: { "role": "complementary" }, listeners: { "toggle": "onToggle($event)" }, properties: { "attr.popover": "closeByPopover()", "ariaModal": "modal() ? \"true\" : undefined", "attr.data-position": "position()" } }, providers: [provideSelf(NgnDrawer)], usesInheritance: true, ngImport: i0, template: "<header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { close: doClose, text: this.header() } }\r\n \"\r\n />\r\n</header>\r\n<ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [lazy]=\"lazy()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n>\r\n <ng-content />\r\n</ngn-defer>\r\n@if (footerTemplate(); as footerTemplate) {\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\" />\r\n </footer>\r\n}\r\n\r\n<ng-template #defaultHeaderTemplate [ngnTemplate]=\"templateTypes.header\" let-header>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-header'\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'default-header-text'\">{{ header.text }}</span>\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [attr.aria-label]=\"i18n['drawer_close']()\"\r\n (click)=\"header.close()\"\r\n >\r\n <ngn-icon defaultIcon=\"xmark\" [icon]=\"iconClose()\" />\r\n </button>\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgnDefer, selector: "ngn-defer", inputs: ["lazyContent", "lazyContentContext", "open", "lazy", "cache", "hiddenOnClosed"] }, { kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"], exportAs: ["ngnButton"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
213
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnDrawer, deps: [], target: i0.ɵɵFactoryTarget.Component });
214
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: NgnDrawer, isStandalone: true, selector: "ngn-drawer", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, closeBy: { classPropertyName: "closeBy", publicName: "closeBy", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, iconClose: { classPropertyName: "iconClose", publicName: "iconClose", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", open: "openChange" }, host: { attributes: { "role": "complementary" }, listeners: { "toggle": "onToggle($event)" }, properties: { "attr.popover": "closeByPopover()", "ariaModal": "modal() ? \"true\" : undefined", "attr.data-position": "position()" } }, providers: [provideSelf(NgnDrawer)], usesInheritance: true, ngImport: i0, template: "<header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { close: doClose, text: this.header() } }\r\n \"\r\n />\r\n</header>\r\n<ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [lazy]=\"lazy()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n>\r\n <ng-content />\r\n</ngn-defer>\r\n@if (footerTemplate(); as footerTemplate) {\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\" />\r\n </footer>\r\n}\r\n\r\n<ng-template #defaultHeaderTemplate [ngnTemplate]=\"templateTypes.header\" let-header>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-header'\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'default-header-text'\">{{ header.text }}</span>\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [attr.aria-label]=\"i18n['drawer_close']()\"\r\n (click)=\"header.close()\"\r\n >\r\n <ngn-icon defaultIcon=\"xmark\" [icon]=\"iconClose()\" />\r\n </button>\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgnDefer, selector: "ngn-defer", inputs: ["lazyContent", "lazyContentContext", "open", "lazy", "cache", "hiddenOnClosed"] }, { kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"], exportAs: ["ngnButton"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
215
215
  }
216
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDrawer, decorators: [{
216
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnDrawer, decorators: [{
217
217
  type: Component,
218
218
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-drawer', imports: [NgnPt, NgTemplateOutlet, NgnDefer, NgnButton, NgnIcon, NgnTemplate], providers: [provideSelf(NgnDrawer)], host: {
219
219
  '[attr.popover]': 'closeByPopover()',