@ngbase/adk 0.1.17 → 0.1.19

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 (205) hide show
  1. package/fesm2022/ngbase-adk-a11y.mjs +42 -42
  2. package/fesm2022/ngbase-adk-a11y.mjs.map +1 -1
  3. package/fesm2022/ngbase-adk-accordion.mjs +20 -26
  4. package/fesm2022/ngbase-adk-accordion.mjs.map +1 -1
  5. package/fesm2022/ngbase-adk-autocomplete.mjs +11 -11
  6. package/fesm2022/ngbase-adk-autocomplete.mjs.map +1 -1
  7. package/fesm2022/ngbase-adk-avatar.mjs +13 -13
  8. package/fesm2022/ngbase-adk-avatar.mjs.map +1 -1
  9. package/fesm2022/ngbase-adk-bidi.mjs +3 -3
  10. package/fesm2022/ngbase-adk-bidi.mjs.map +1 -1
  11. package/fesm2022/ngbase-adk-breadcrumb.mjs +14 -14
  12. package/fesm2022/ngbase-adk-breadcrumb.mjs.map +1 -1
  13. package/fesm2022/ngbase-adk-cache.mjs +3 -3
  14. package/fesm2022/ngbase-adk-cache.mjs.map +1 -1
  15. package/fesm2022/ngbase-adk-carousel.mjs +18 -18
  16. package/fesm2022/ngbase-adk-carousel.mjs.map +1 -1
  17. package/fesm2022/ngbase-adk-checkbox.mjs +15 -21
  18. package/fesm2022/ngbase-adk-checkbox.mjs.map +1 -1
  19. package/fesm2022/ngbase-adk-chip.mjs +12 -12
  20. package/fesm2022/ngbase-adk-chip.mjs.map +1 -1
  21. package/fesm2022/ngbase-adk-clipboard.mjs +7 -5
  22. package/fesm2022/ngbase-adk-clipboard.mjs.map +1 -1
  23. package/fesm2022/ngbase-adk-collections.mjs.map +1 -1
  24. package/fesm2022/ngbase-adk-color-picker.mjs +44 -53
  25. package/fesm2022/ngbase-adk-color-picker.mjs.map +1 -1
  26. package/fesm2022/ngbase-adk-cookies.mjs +3 -3
  27. package/fesm2022/ngbase-adk-cookies.mjs.map +1 -1
  28. package/fesm2022/ngbase-adk-datepicker.mjs +70 -89
  29. package/fesm2022/ngbase-adk-datepicker.mjs.map +1 -1
  30. package/fesm2022/ngbase-adk-dialog.mjs +17 -39
  31. package/fesm2022/ngbase-adk-dialog.mjs.map +1 -1
  32. package/fesm2022/ngbase-adk-drag.mjs +20 -20
  33. package/fesm2022/ngbase-adk-drag.mjs.map +1 -1
  34. package/fesm2022/ngbase-adk-form-field.mjs +65 -118
  35. package/fesm2022/ngbase-adk-form-field.mjs.map +1 -1
  36. package/fesm2022/ngbase-adk-hover-card.mjs +5 -5
  37. package/fesm2022/ngbase-adk-hover-card.mjs.map +1 -1
  38. package/fesm2022/ngbase-adk-icon.mjs +9 -11
  39. package/fesm2022/ngbase-adk-icon.mjs.map +1 -1
  40. package/fesm2022/ngbase-adk-inline-edit.mjs +27 -35
  41. package/fesm2022/ngbase-adk-inline-edit.mjs.map +1 -1
  42. package/fesm2022/ngbase-adk-jwt.mjs +6 -6
  43. package/fesm2022/ngbase-adk-jwt.mjs.map +1 -1
  44. package/fesm2022/ngbase-adk-keys.mjs +6 -6
  45. package/fesm2022/ngbase-adk-keys.mjs.map +1 -1
  46. package/fesm2022/ngbase-adk-layout.mjs.map +1 -1
  47. package/fesm2022/ngbase-adk-list.mjs +10 -10
  48. package/fesm2022/ngbase-adk-list.mjs.map +1 -1
  49. package/fesm2022/ngbase-adk-mask.mjs +8 -8
  50. package/fesm2022/ngbase-adk-mask.mjs.map +1 -1
  51. package/fesm2022/ngbase-adk-menu.mjs +69 -79
  52. package/fesm2022/ngbase-adk-menu.mjs.map +1 -1
  53. package/fesm2022/ngbase-adk-network.mjs +3 -3
  54. package/fesm2022/ngbase-adk-network.mjs.map +1 -1
  55. package/fesm2022/ngbase-adk-otp.mjs +24 -45
  56. package/fesm2022/ngbase-adk-otp.mjs.map +1 -1
  57. package/fesm2022/ngbase-adk-pagination.mjs +9 -9
  58. package/fesm2022/ngbase-adk-pagination.mjs.map +1 -1
  59. package/fesm2022/ngbase-adk-popover.mjs +120 -89
  60. package/fesm2022/ngbase-adk-popover.mjs.map +1 -1
  61. package/fesm2022/ngbase-adk-portal.mjs +139 -47
  62. package/fesm2022/ngbase-adk-portal.mjs.map +1 -1
  63. package/fesm2022/ngbase-adk-progress.mjs +7 -7
  64. package/fesm2022/ngbase-adk-progress.mjs.map +1 -1
  65. package/fesm2022/ngbase-adk-radio.mjs +20 -27
  66. package/fesm2022/ngbase-adk-radio.mjs.map +1 -1
  67. package/fesm2022/ngbase-adk-resizable.mjs +138 -48
  68. package/fesm2022/ngbase-adk-resizable.mjs.map +1 -1
  69. package/fesm2022/ngbase-adk-scroll-area.mjs +28 -20
  70. package/fesm2022/ngbase-adk-scroll-area.mjs.map +1 -1
  71. package/fesm2022/ngbase-adk-select.mjs +58 -80
  72. package/fesm2022/ngbase-adk-select.mjs.map +1 -1
  73. package/fesm2022/ngbase-adk-selectable.mjs +19 -30
  74. package/fesm2022/ngbase-adk-selectable.mjs.map +1 -1
  75. package/fesm2022/ngbase-adk-sheet.mjs +6 -20
  76. package/fesm2022/ngbase-adk-sheet.mjs.map +1 -1
  77. package/fesm2022/ngbase-adk-sidenav.mjs +65 -48
  78. package/fesm2022/ngbase-adk-sidenav.mjs.map +1 -1
  79. package/fesm2022/ngbase-adk-slider.mjs +40 -53
  80. package/fesm2022/ngbase-adk-slider.mjs.map +1 -1
  81. package/fesm2022/ngbase-adk-sonner.mjs +12 -19
  82. package/fesm2022/ngbase-adk-sonner.mjs.map +1 -1
  83. package/fesm2022/ngbase-adk-stepper.mjs +17 -25
  84. package/fesm2022/ngbase-adk-stepper.mjs.map +1 -1
  85. package/fesm2022/ngbase-adk-switch.mjs +25 -32
  86. package/fesm2022/ngbase-adk-switch.mjs.map +1 -1
  87. package/fesm2022/ngbase-adk-table.mjs +581 -83
  88. package/fesm2022/ngbase-adk-table.mjs.map +1 -1
  89. package/fesm2022/ngbase-adk-tabs.mjs +37 -35
  90. package/fesm2022/ngbase-adk-tabs.mjs.map +1 -1
  91. package/fesm2022/ngbase-adk-test.mjs.map +1 -1
  92. package/fesm2022/ngbase-adk-toggle-group.mjs +20 -34
  93. package/fesm2022/ngbase-adk-toggle-group.mjs.map +1 -1
  94. package/fesm2022/ngbase-adk-toggle.mjs +14 -19
  95. package/fesm2022/ngbase-adk-toggle.mjs.map +1 -1
  96. package/fesm2022/ngbase-adk-tooltip.mjs +12 -19
  97. package/fesm2022/ngbase-adk-tooltip.mjs.map +1 -1
  98. package/fesm2022/ngbase-adk-tour.mjs +47 -52
  99. package/fesm2022/ngbase-adk-tour.mjs.map +1 -1
  100. package/fesm2022/ngbase-adk-translate.mjs +8 -10
  101. package/fesm2022/ngbase-adk-translate.mjs.map +1 -1
  102. package/fesm2022/ngbase-adk-tree.mjs +20 -20
  103. package/fesm2022/ngbase-adk-tree.mjs.map +1 -1
  104. package/fesm2022/ngbase-adk-utils.mjs +30 -43
  105. package/fesm2022/ngbase-adk-utils.mjs.map +1 -1
  106. package/fesm2022/ngbase-adk-virtualizer.mjs +9 -9
  107. package/fesm2022/ngbase-adk-virtualizer.mjs.map +1 -1
  108. package/package.json +101 -101
  109. package/schematics/components/files/accordion/accordion.ts.template +10 -5
  110. package/schematics/components/files/audio/AudioPlayer.ts.template +245 -0
  111. package/schematics/components/files/audio/AudioRecorder.ts.template +377 -0
  112. package/schematics/components/files/audio/AudioVisualizer.ts.template +175 -0
  113. package/schematics/components/files/audio/index.ts.template +3 -0
  114. package/schematics/components/files/badge/badge-llm.md.template +2 -2
  115. package/schematics/components/files/badge/badge.ts.template +29 -9
  116. package/schematics/components/files/card/card.ts.template +1 -1
  117. package/schematics/components/files/charts/area-chart.component.ts.template +278 -0
  118. package/schematics/components/files/charts/bar-chart.component.ts.template +262 -0
  119. package/schematics/components/files/charts/chart-tooltip.component.ts.template +168 -0
  120. package/schematics/components/files/charts/index.ts.template +4 -0
  121. package/schematics/components/files/charts/line-chart.component.ts.template +238 -0
  122. package/schematics/components/files/charts/pie-chart.component.ts.template +283 -0
  123. package/schematics/components/files/checkbox/checkbox.ts.template +4 -7
  124. package/schematics/components/files/color-picker/color-picker.ts.template +2 -2
  125. package/schematics/components/files/dialog/dialog.ts.template +11 -14
  126. package/schematics/components/files/drawer/drawer.ts.template +25 -28
  127. package/schematics/components/files/form-field/form-field.ts.template +59 -23
  128. package/schematics/components/files/inline-edit/inline-edit.ts.template +3 -1
  129. package/schematics/components/files/pagination/pagination.ts.template +6 -6
  130. package/schematics/components/files/picasa/picasa-base.component.ts.template +9 -30
  131. package/schematics/components/files/popover/popover.ts.template +9 -4
  132. package/schematics/components/files/select/list-selection.ts.template +0 -2
  133. package/schematics/components/files/select/option.ts.template +1 -1
  134. package/schematics/components/files/selectable/selectable.ts.template +2 -2
  135. package/schematics/components/files/sheet/sheet.ts.template +20 -14
  136. package/schematics/components/files/sidenav/sidenav.ts.template +69 -6
  137. package/schematics/components/files/sonner/sonner.ts.template +1 -2
  138. package/schematics/components/files/stepper/stepper-llm.md.template +7 -0
  139. package/schematics/components/files/stepper/stepper.ts.template +2 -4
  140. package/schematics/components/files/switch/switch.ts.template +2 -2
  141. package/schematics/components/files/table/table-llm.md.template +14 -2
  142. package/schematics/components/files/table/table.ts.template +42 -3
  143. package/schematics/components/files/theme/theme.service.ts.template +3 -3
  144. package/schematics/components/files/toggle/toggle.ts.template +1 -1
  145. package/schematics/components/files/toggle-group/toggle-group.ts.template +1 -1
  146. package/schematics/components/files/tooltip/tooltip.ts.template +2 -3
  147. package/{accordion/index.d.ts → types/ngbase-adk-accordion.d.ts} +1 -3
  148. package/{autocomplete/index.d.ts → types/ngbase-adk-autocomplete.d.ts} +2 -7
  149. package/{checkbox/index.d.ts → types/ngbase-adk-checkbox.d.ts} +8 -14
  150. package/types/ngbase-adk-clipboard.d.ts +12 -0
  151. package/{color-picker/index.d.ts → types/ngbase-adk-color-picker.d.ts} +14 -26
  152. package/{datepicker/index.d.ts → types/ngbase-adk-datepicker.d.ts} +9 -18
  153. package/{dialog/index.d.ts → types/ngbase-adk-dialog.d.ts} +3 -8
  154. package/types/ngbase-adk-form-field.d.ts +88 -0
  155. package/{inline-edit/index.d.ts → types/ngbase-adk-inline-edit.d.ts} +8 -16
  156. package/{menu/index.d.ts → types/ngbase-adk-menu.d.ts} +6 -5
  157. package/{otp/index.d.ts → types/ngbase-adk-otp.d.ts} +8 -16
  158. package/{popover/index.d.ts → types/ngbase-adk-popover.d.ts} +14 -2
  159. package/{portal/index.d.ts → types/ngbase-adk-portal.d.ts} +30 -8
  160. package/{radio/index.d.ts → types/ngbase-adk-radio.d.ts} +9 -12
  161. package/{resizable/index.d.ts → types/ngbase-adk-resizable.d.ts} +4 -4
  162. package/{scroll-area/index.d.ts → types/ngbase-adk-scroll-area.d.ts} +2 -1
  163. package/{select/index.d.ts → types/ngbase-adk-select.d.ts} +8 -22
  164. package/{selectable/index.d.ts → types/ngbase-adk-selectable.d.ts} +6 -10
  165. package/{sheet/index.d.ts → types/ngbase-adk-sheet.d.ts} +4 -3
  166. package/{sidenav/index.d.ts → types/ngbase-adk-sidenav.d.ts} +7 -8
  167. package/{slider/index.d.ts → types/ngbase-adk-slider.d.ts} +8 -17
  168. package/{sonner/index.d.ts → types/ngbase-adk-sonner.d.ts} +1 -3
  169. package/{stepper/index.d.ts → types/ngbase-adk-stepper.d.ts} +1 -4
  170. package/{switch/index.d.ts → types/ngbase-adk-switch.d.ts} +7 -14
  171. package/{table/index.d.ts → types/ngbase-adk-table.d.ts} +126 -3
  172. package/{test/index.d.ts → types/ngbase-adk-test.d.ts} +1 -1
  173. package/{toggle-group/index.d.ts → types/ngbase-adk-toggle-group.d.ts} +5 -10
  174. package/types/ngbase-adk-toggle.d.ts +14 -0
  175. package/{tooltip/index.d.ts → types/ngbase-adk-tooltip.d.ts} +9 -11
  176. package/{tour/index.d.ts → types/ngbase-adk-tour.d.ts} +3 -6
  177. package/{utils/index.d.ts → types/ngbase-adk-utils.d.ts} +15 -11
  178. package/clipboard/index.d.ts +0 -11
  179. package/form-field/index.d.ts +0 -97
  180. package/toggle/index.d.ts +0 -16
  181. /package/{a11y/index.d.ts → types/ngbase-adk-a11y.d.ts} +0 -0
  182. /package/{avatar/index.d.ts → types/ngbase-adk-avatar.d.ts} +0 -0
  183. /package/{bidi/index.d.ts → types/ngbase-adk-bidi.d.ts} +0 -0
  184. /package/{breadcrumb/index.d.ts → types/ngbase-adk-breadcrumb.d.ts} +0 -0
  185. /package/{cache/index.d.ts → types/ngbase-adk-cache.d.ts} +0 -0
  186. /package/{carousel/index.d.ts → types/ngbase-adk-carousel.d.ts} +0 -0
  187. /package/{chip/index.d.ts → types/ngbase-adk-chip.d.ts} +0 -0
  188. /package/{collections/index.d.ts → types/ngbase-adk-collections.d.ts} +0 -0
  189. /package/{cookies/index.d.ts → types/ngbase-adk-cookies.d.ts} +0 -0
  190. /package/{drag/index.d.ts → types/ngbase-adk-drag.d.ts} +0 -0
  191. /package/{hover-card/index.d.ts → types/ngbase-adk-hover-card.d.ts} +0 -0
  192. /package/{icon/index.d.ts → types/ngbase-adk-icon.d.ts} +0 -0
  193. /package/{jwt/index.d.ts → types/ngbase-adk-jwt.d.ts} +0 -0
  194. /package/{keys/index.d.ts → types/ngbase-adk-keys.d.ts} +0 -0
  195. /package/{layout/index.d.ts → types/ngbase-adk-layout.d.ts} +0 -0
  196. /package/{list/index.d.ts → types/ngbase-adk-list.d.ts} +0 -0
  197. /package/{mask/index.d.ts → types/ngbase-adk-mask.d.ts} +0 -0
  198. /package/{network/index.d.ts → types/ngbase-adk-network.d.ts} +0 -0
  199. /package/{pagination/index.d.ts → types/ngbase-adk-pagination.d.ts} +0 -0
  200. /package/{progress/index.d.ts → types/ngbase-adk-progress.d.ts} +0 -0
  201. /package/{tabs/index.d.ts → types/ngbase-adk-tabs.d.ts} +0 -0
  202. /package/{translate/index.d.ts → types/ngbase-adk-translate.d.ts} +0 -0
  203. /package/{tree/index.d.ts → types/ngbase-adk-tree.d.ts} +0 -0
  204. /package/{virtualizer/index.d.ts → types/ngbase-adk-virtualizer.d.ts} +0 -0
  205. /package/{index.d.ts → types/ngbase-adk.d.ts} +0 -0
@@ -20,10 +20,10 @@ class DragData {
20
20
  }
21
21
  }
22
22
  class DragHandle {
23
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DragHandle, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
24
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.0", type: DragHandle, isStandalone: true, selector: "[ngbDragHandle]", host: { classAttribute: "cursor-move" }, exportAs: ["ngbDragHandle"], ngImport: i0 }); }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DragHandle, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
24
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.0", type: DragHandle, isStandalone: true, selector: "[ngbDragHandle]", host: { classAttribute: "cursor-move" }, exportAs: ["ngbDragHandle"], ngImport: i0 }); }
25
25
  }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DragHandle, decorators: [{
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DragHandle, decorators: [{
27
27
  type: Directive,
28
28
  args: [{
29
29
  selector: '[ngbDragHandle]',
@@ -37,16 +37,16 @@ class Drag {
37
37
  constructor() {
38
38
  this.el = inject(ElementRef);
39
39
  this.document = inject(DOCUMENT);
40
- this.handle = contentChild(DragHandle, ...(ngDevMode ? [{ debugName: "handle", read: ElementRef, descendants: true }] : [{ read: ElementRef, descendants: true }]));
40
+ this.handle = contentChild(DragHandle, { ...(ngDevMode ? { debugName: "handle" } : {}), read: ElementRef, descendants: true });
41
41
  this.events = new Subject();
42
42
  this.ngbDrag = outputFromObservable(this.events);
43
- this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
43
+ this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
44
44
  this.lockAxis = input(...(ngDevMode ? [undefined, { debugName: "lockAxis" }] : []));
45
45
  this.dragBoundary = input(...(ngDevMode ? [undefined, { debugName: "dragBoundary" }] : []));
46
46
  // hacky: we need this for host directives
47
- this._lockAxis = linkedSignal(this.lockAxis);
48
- this._dragBoundary = linkedSignal(this.dragBoundary);
49
- this._disabled = linkedSignal(this.disabled);
47
+ this._lockAxis = linkedSignal(this.lockAxis, ...(ngDevMode ? [{ debugName: "_lockAxis" }] : []));
48
+ this._dragBoundary = linkedSignal(this.dragBoundary, ...(ngDevMode ? [{ debugName: "_dragBoundary" }] : []));
49
+ this._disabled = linkedSignal(this.disabled, ...(ngDevMode ? [{ debugName: "_disabled" }] : []));
50
50
  this.dragBoundaryElement = computed(() => {
51
51
  const id = this._dragBoundary();
52
52
  return id ? this.document.querySelector(id) : null;
@@ -163,16 +163,16 @@ class Drag {
163
163
  this.lastValue.time = now;
164
164
  return new DragData(x, y, dx, dy, type, ev, ev.clientX, ev.clientY, this.getDirection(ev), velocity, now);
165
165
  }
166
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: Drag, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
167
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.2.0", type: Drag, isStandalone: true, selector: "[ngbDrag]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, lockAxis: { classPropertyName: "lockAxis", publicName: "lockAxis", isSignal: true, isRequired: false, transformFunction: null }, dragBoundary: { classPropertyName: "dragBoundary", publicName: "dragBoundary", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ngbDrag: "ngbDrag" }, queries: [{ propertyName: "handle", first: true, predicate: DragHandle, descendants: true, read: ElementRef, isSignal: true }], exportAs: ["ngbDrag"], ngImport: i0 }); }
166
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: Drag, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
167
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.0", type: Drag, isStandalone: true, selector: "[ngbDrag]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, lockAxis: { classPropertyName: "lockAxis", publicName: "lockAxis", isSignal: true, isRequired: false, transformFunction: null }, dragBoundary: { classPropertyName: "dragBoundary", publicName: "dragBoundary", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ngbDrag: "ngbDrag" }, queries: [{ propertyName: "handle", first: true, predicate: DragHandle, descendants: true, read: ElementRef, isSignal: true }], exportAs: ["ngbDrag"], ngImport: i0 }); }
168
168
  }
169
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: Drag, decorators: [{
169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: Drag, decorators: [{
170
170
  type: Directive,
171
171
  args: [{
172
172
  selector: '[ngbDrag]',
173
173
  exportAs: 'ngbDrag',
174
174
  }]
175
- }], ctorParameters: () => [] });
175
+ }], ctorParameters: () => [], propDecorators: { handle: [{ type: i0.ContentChild, args: [i0.forwardRef(() => DragHandle), { ...{ read: ElementRef, descendants: true }, isSignal: true }] }], ngbDrag: [{ type: i0.Output, args: ["ngbDrag"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], lockAxis: [{ type: i0.Input, args: [{ isSignal: true, alias: "lockAxis", required: false }] }], dragBoundary: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragBoundary", required: false }] }] } });
176
176
 
177
177
  class DragMove {
178
178
  constructor() {
@@ -217,16 +217,16 @@ class DragMove {
217
217
  updateTransform() {
218
218
  this.element.style.transform = `translate(${this.x}px, ${this.y}px) scale(${this.scale})`;
219
219
  }
220
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DragMove, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
221
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: DragMove, isStandalone: true, selector: "[ngbDragMove]", inputs: { target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: Drag, inputs: ["dragBoundary", "dragBoundary"] }], ngImport: i0 }); }
220
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DragMove, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
221
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: DragMove, isStandalone: true, selector: "[ngbDragMove]", inputs: { target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: Drag, inputs: ["dragBoundary", "dragBoundary"] }], ngImport: i0 }); }
222
222
  }
223
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DragMove, decorators: [{
223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DragMove, decorators: [{
224
224
  type: Directive,
225
225
  args: [{
226
226
  selector: '[ngbDragMove]',
227
227
  hostDirectives: [{ directive: Drag, inputs: ['dragBoundary'] }],
228
228
  }]
229
- }], ctorParameters: () => [] });
229
+ }], ctorParameters: () => [], propDecorators: { target: [{ type: i0.Input, args: [{ isSignal: true, alias: "target", required: false }] }] } });
230
230
 
231
231
  class DragDrop {
232
232
  constructor() {
@@ -345,15 +345,15 @@ class DragDrop {
345
345
  });
346
346
  }
347
347
  }
348
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DragDrop, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
349
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.2.0", type: DragDrop, isStandalone: true, selector: "[ngbDrop]", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { orderChanged: "orderChanged" }, queries: [{ propertyName: "dragItems", predicate: Drag, isSignal: true }], ngImport: i0 }); }
348
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DragDrop, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
349
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.0", type: DragDrop, isStandalone: true, selector: "[ngbDrop]", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { orderChanged: "orderChanged" }, queries: [{ propertyName: "dragItems", predicate: Drag, isSignal: true }], ngImport: i0 }); }
350
350
  }
351
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: DragDrop, decorators: [{
351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: DragDrop, decorators: [{
352
352
  type: Directive,
353
353
  args: [{
354
354
  selector: '[ngbDrop]',
355
355
  }]
356
- }], ctorParameters: () => [] });
356
+ }], ctorParameters: () => [], propDecorators: { dragItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => Drag), { isSignal: true }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], orderChanged: [{ type: i0.Output, args: ["orderChanged"] }] } });
357
357
  // We need to check if the mouse is intersecting with the element
358
358
  function isIntersecting(rect1, rect2) {
359
359
  if (rect1 instanceof DOMRect) {
@@ -1 +1 @@
1
- {"version":3,"file":"ngbase-adk-drag.mjs","sources":["../../../projects/adk/drag/drag.ts","../../../projects/adk/drag/drag-move.ts","../../../projects/adk/drag/drag-drop.ts","../../../projects/adk/drag/public-api.ts","../../../projects/adk/drag/ngbase-adk-drag.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n booleanAttribute,\n computed,\n contentChild,\n effect,\n inject,\n input,\n linkedSignal,\n DOCUMENT,\n} from '@angular/core';\nimport { outputFromObservable } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\n\nexport class DragData {\n constructor(\n public x = 0,\n public y = 0,\n public dx = 0,\n public dy = 0,\n public type: 'start' | 'move' | 'end' = 'start',\n public event?: PointerEvent,\n public clientX?: number,\n public clientY?: number,\n public direction?: 'left' | 'right',\n public velocity = 0, // pixels per millisecond\n public time = Date.now(),\n ) {}\n}\n\n@Directive({\n selector: '[ngbDragHandle]',\n exportAs: 'ngbDragHandle',\n host: {\n class: 'cursor-move',\n },\n})\nexport class DragHandle {}\n\n@Directive({\n selector: '[ngbDrag]',\n exportAs: 'ngbDrag',\n})\nexport class Drag {\n readonly el = inject(ElementRef);\n readonly document = inject(DOCUMENT);\n\n readonly handle = contentChild(DragHandle, { read: ElementRef, descendants: true });\n readonly events = new Subject<DragData>();\n readonly ngbDrag = outputFromObservable(this.events);\n\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly lockAxis = input<'x' | 'y'>();\n readonly dragBoundary = input<string>();\n\n // hacky: we need this for host directives\n _lockAxis = linkedSignal(this.lockAxis);\n _dragBoundary = linkedSignal(this.dragBoundary);\n _disabled = linkedSignal(this.disabled);\n\n private readonly dragBoundaryElement = computed(() => {\n const id = this._dragBoundary();\n return id ? this.document.querySelector(id) : null;\n });\n private boundaryRect: { left: number; top: number; right: number; bottom: number } | undefined;\n startEvent!: PointerEvent;\n lastValue = new DragData();\n isDragging = false;\n\n constructor() {\n effect(cleanup => {\n if (!this._disabled()) {\n const handle = this.handle() || this.el;\n handle.nativeElement.addEventListener('pointerdown', this.onPointerDown);\n cleanup(() => handle.nativeElement.removeEventListener('pointerdown', this.onPointerDown));\n }\n });\n this.el.nativeElement.style.touchAction = 'none';\n }\n\n private onPointerDown = (event: PointerEvent) => {\n if (event.button !== 0) return; // Only trigger on left click\n\n this.startDrag(event);\n this.document.addEventListener('pointermove', this.onPointerMove);\n this.document.addEventListener('pointerup', this.onPointerUp);\n };\n\n private onPointerMove = (event: PointerEvent) => {\n if (this.isDragging) {\n event.preventDefault();\n event.stopPropagation();\n this.moveDrag(event);\n }\n };\n\n private onPointerUp = (event: PointerEvent) => {\n this.endDrag(event);\n this.document.removeEventListener('pointermove', this.onPointerMove);\n this.document.removeEventListener('pointerup', this.onPointerUp);\n };\n\n private startDrag(event: PointerEvent) {\n this.startEvent = event;\n this.isDragging = true;\n const rect = this.el.nativeElement.getBoundingClientRect();\n const parentRect = this.dragBoundaryElement()?.getBoundingClientRect();\n if (parentRect) {\n const left = rect.left - parentRect.left;\n const top = rect.top - parentRect.top;\n this.boundaryRect = {\n left,\n top,\n right: parentRect.width - rect.width - left,\n bottom: parentRect.height - rect.height - top,\n };\n // console.log(this.boundaryRect);\n }\n this.lastValue = this.getDragEvent(event, 'start');\n this.events.next(this.lastValue);\n this.toggleUserSelect();\n }\n\n private moveDrag(event: PointerEvent) {\n this.lastValue = this.getDragEvent(event, 'move');\n // prevent unnecessary events when the drag is outside the boundary\n if (this.lastValue.dx !== 0 || this.lastValue.dy !== 0) {\n this.events.next(this.lastValue);\n }\n }\n\n private endDrag(event: PointerEvent) {\n this.isDragging = false;\n const value = this.getDragEvent(event, 'end');\n this.events.next(value);\n this.lastValue = new DragData();\n this.toggleUserSelect(false);\n }\n\n private toggleUserSelect(active = true) {\n const value = active ? 'none' : '';\n this.document.body.style.userSelect = value;\n this.document.body.style.webkitUserSelect = value;\n this.document.body.style.pointerEvents = value;\n }\n\n private getDirection(ev: PointerEvent) {\n let dir = this.lastValue.direction || 'left';\n if (ev.clientX > this.lastValue.clientX!) {\n dir = 'right';\n } else if (ev.clientX < this.lastValue.clientX!) {\n dir = 'left';\n }\n return dir;\n }\n\n private getDragEvent(ev: PointerEvent, type: 'start' | 'move' | 'end') {\n const now = Date.now();\n const dt = now - this.lastValue.time;\n const startClientX = this.startEvent.clientX;\n const startClientY = this.startEvent.clientY;\n\n let x = ev.clientX - startClientX;\n let y = ev.clientY - startClientY;\n\n // it is to make sure that the drag is always in the drag point\n if (this.boundaryRect) {\n const { left, top, right, bottom } = this.boundaryRect;\n x = Math.max(-left, Math.min(x, right));\n y = Math.max(-top, Math.min(y, bottom));\n }\n\n if (this._lockAxis() === 'x') {\n y = 0;\n } else if (this._lockAxis() === 'y') {\n x = 0;\n }\n\n const dx = x - (this.lastValue.x ?? 0);\n const dy = y - (this.lastValue.y ?? 0);\n\n let velocity = 0;\n if (type === 'move' && dt > 0) {\n const distance = Math.sqrt(dx * dx + dy * dy);\n velocity = (distance / dt) * 0.6;\n } else if (type === 'end') {\n velocity = this.lastValue.velocity;\n }\n this.lastValue.time = now;\n\n return new DragData(\n x,\n y,\n dx,\n dy,\n type,\n ev,\n ev.clientX,\n ev.clientY,\n this.getDirection(ev),\n velocity,\n now,\n );\n }\n}\n","import { Directive, ElementRef, inject, input } from '@angular/core';\nimport { Drag } from './drag';\n\n@Directive({\n selector: '[ngbDragMove]',\n hostDirectives: [{ directive: Drag, inputs: ['dragBoundary'] }],\n})\nexport class DragMove {\n private drag = inject(Drag);\n private el = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly target = input<HTMLElement>();\n private scale = 1;\n private x = 0;\n private y = 0;\n private lastX = 0;\n private lastY = 0;\n\n constructor() {\n this.drag.events.subscribe(data => {\n data.event?.preventDefault();\n requestAnimationFrame(() => {\n if (data.type === 'move') {\n this.x = data.x + this.lastX;\n this.y = data.y + this.lastY;\n this.updateTransform();\n } else if (data.type === 'end') {\n this.lastX = this.x;\n this.lastY = this.y;\n }\n });\n });\n\n // this.el.nativeElement.addEventListener('wheel', e => {\n // e.preventDefault();\n // const rect = this.element.getBoundingClientRect();\n // const mouseX = e.clientX - rect.left;\n // const mouseY = e.clientY - rect.top;\n\n // const prevScale = this.scale;\n // this.scale = Math.max(0.1, Math.min(10, this.scale + e.deltaY * -0.001));\n\n // const scaleRatio = this.scale / prevScale;\n\n // this.x += ((mouseX - this.x) * (1 - scaleRatio)) / this.scale;\n // this.y += ((mouseY - this.y) * (1 - scaleRatio)) / this.scale;\n\n // this.updateTransform();\n // });\n }\n\n private get element() {\n return this.target() ?? this.el.nativeElement;\n }\n\n private updateTransform() {\n this.element.style.transform = `translate(${this.x}px, ${this.y}px) scale(${this.scale})`;\n }\n}\n","import {\n Directive,\n ElementRef,\n contentChildren,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { Drag, DragData } from './drag';\n\nexport interface DropEvent<T> {\n previousIndex: number;\n currentIndex: number;\n container: { data: T };\n previousContainer: { data: T };\n}\n\n@Directive({\n selector: '[ngbDrop]',\n})\nexport class DragDrop<T> {\n readonly el = inject(ElementRef);\n readonly dragItems = contentChildren(Drag);\n\n readonly data = input<T>();\n readonly orderChanged = output<DropEvent<T>>();\n\n private sortableElements: HTMLElement[] = [];\n private previousIndex!: number;\n private currentIndex!: number;\n private height!: number; // height is required for testing\n\n constructor() {\n effect(cleanup => {\n const items = this.dragItems();\n this.sortableElements = [];\n const subs = items.map(item => {\n this.sortableElements.push(item.el.nativeElement);\n return item.ngbDrag.subscribe(data => this.onDrag(data, item));\n });\n cleanup(() => subs.forEach(sub => sub.unsubscribe()));\n });\n }\n\n private onDrag(dragData: DragData, item: Drag) {\n const element = item.el.nativeElement;\n if (dragData.type === 'start') {\n this.onDragStart(element);\n } else if (dragData.type === 'move') {\n this.onDragMove(element, dragData, item);\n } else if (dragData.type === 'end') {\n this.onDragEnd(element);\n }\n }\n\n fromThis(dragData: DragData) {\n return isIntersecting(\n { x: dragData.clientX!, y: dragData.clientY!, w: 0.1, h: 0.1 },\n this.el.nativeElement.getBoundingClientRect(),\n );\n }\n\n private onDragStart(element: HTMLElement) {\n element.style.zIndex = '1000';\n element.style.transition = 'none';\n element.style.position = 'relative';\n\n // original index\n this.previousIndex = this.dragItems().findIndex(item => item.el.nativeElement === element);\n this.currentIndex = this.previousIndex;\n this.height = element.offsetHeight;\n }\n\n private onDragMove(element: HTMLElement, dragData: DragData, drag: Drag) {\n const deltaX = dragData.x;\n const deltaY = dragData.y;\n element.style.transform = `translate(${deltaX}px, ${deltaY}px)`;\n\n // we have to find the new index by checking clientXY of the mouse\n const mouseY = dragData.clientY!;\n const mouseX = dragData.clientX!;\n const ci = this.currentIndex ?? this.previousIndex;\n let newIndex = this.sortableElements.findIndex((el, index) => {\n const rect = el.getBoundingClientRect();\n return index !== ci && isIntersecting({ x: mouseX, y: mouseY, w: 0.1, h: 0.1 }, rect);\n });\n newIndex = newIndex === -1 ? ci : newIndex;\n\n if (newIndex !== this.currentIndex) {\n this.rearrangeItems(drag, newIndex);\n this.currentIndex = newIndex;\n }\n }\n\n private onDragEnd(element: HTMLElement) {\n // Emit the new order\n this.resetPositions();\n this.emitNewOrder();\n\n // element.style.transition = 'transform 0.3s ease-out';\n // element.addEventListener(\n // 'transitionend',\n // () => {\n element.style.zIndex = '';\n element.style.position = '';\n // },\n // { once: true },\n // );\n }\n\n private rearrangeItems(dragger: Drag, newIndex: number) {\n const draggedItem = dragger.el.nativeElement;\n const oldIndex = this.sortableElements.indexOf(draggedItem);\n if (oldIndex === newIndex) return;\n\n // Move the dragged item in the array\n this.sortableElements.splice(oldIndex, 1);\n this.sortableElements.splice(newIndex, 0, draggedItem);\n\n // Update positions of all items\n this.updateItemPositions(draggedItem, newIndex);\n }\n\n private updateItemPositions(draggedItem: HTMLElement, newIndex: number) {\n const originalIndex = this.previousIndex;\n this.sortableElements.forEach((el, index) => {\n if (el !== draggedItem) {\n const v =\n (originalIndex >= newIndex && (index > originalIndex || index < newIndex)) ||\n (originalIndex <= newIndex && (index < originalIndex || index > newIndex))\n ? 0\n : index > newIndex\n ? 1\n : -1;\n const shift = v * this.height;\n el.style.transform = `translateY(${shift}px)`;\n // el.style.transition = 'transform 0.3s ease-out';\n }\n });\n }\n\n private resetPositions() {\n this.sortableElements.forEach(el => {\n el.style.transform = '';\n el.style.transition = '';\n });\n }\n\n private emitNewOrder() {\n if (this.currentIndex !== this.previousIndex) {\n const containerData = { data: this.data()! };\n this.orderChanged.emit({\n previousIndex: this.previousIndex,\n currentIndex: this.currentIndex,\n container: containerData,\n previousContainer: containerData,\n });\n }\n }\n}\n\ninterface Boundary {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\n// We need to check if the mouse is intersecting with the element\nfunction isIntersecting(rect1: Boundary | DOMRect, rect2: Boundary | DOMRect) {\n if (rect1 instanceof DOMRect) {\n rect1 = { x: rect1.x, y: rect1.y, w: rect1.width, h: rect1.height };\n }\n if (rect2 instanceof DOMRect) {\n rect2 = { x: rect2.x, y: rect2.y, w: rect2.width, h: rect2.height };\n }\n return (\n rect1.x <= rect2.x + rect2.w &&\n rect1.x + rect1.w >= rect2.x &&\n rect1.y <= rect2.y + rect2.h &&\n rect1.y + rect1.h >= rect2.y\n );\n}\n\nexport function moveItemInArray<T>(array: T[], fromIndex: number, toIndex: number): void {\n if (fromIndex === toIndex) return;\n\n const item = array[fromIndex];\n const diff = fromIndex - toIndex;\n\n if (diff > 0) {\n // Moving towards the start of the array\n for (let i = fromIndex; i > toIndex; i--) {\n array[i] = array[i - 1];\n }\n } else {\n // Moving towards the end of the array\n for (let i = fromIndex; i < toIndex; i++) {\n array[i] = array[i + 1];\n }\n }\n\n array[toIndex] = item;\n}\n\nexport function transferArrayItem<T>(\n fromArray: T[],\n toArray: T[],\n fromIndex: number,\n toIndex: number,\n): void {\n const item = fromArray[fromIndex];\n fromArray.splice(fromIndex, 1);\n toArray.splice(toIndex, 0, item);\n}\n","/*\n * Public API Surface of drag\n */\n\nexport * from './drag';\nexport * from './drag-move';\nexport * from './drag-drop';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.Drag"],"mappings":"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"}
1
+ {"version":3,"file":"ngbase-adk-drag.mjs","sources":["../../../projects/adk/drag/drag.ts","../../../projects/adk/drag/drag-move.ts","../../../projects/adk/drag/drag-drop.ts","../../../projects/adk/drag/public-api.ts","../../../projects/adk/drag/ngbase-adk-drag.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n booleanAttribute,\n computed,\n contentChild,\n effect,\n inject,\n input,\n linkedSignal,\n DOCUMENT,\n} from '@angular/core';\nimport { outputFromObservable } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\n\nexport class DragData {\n constructor(\n public x = 0,\n public y = 0,\n public dx = 0,\n public dy = 0,\n public type: 'start' | 'move' | 'end' = 'start',\n public event?: PointerEvent,\n public clientX?: number,\n public clientY?: number,\n public direction?: 'left' | 'right',\n public velocity = 0, // pixels per millisecond\n public time = Date.now(),\n ) {}\n}\n\n@Directive({\n selector: '[ngbDragHandle]',\n exportAs: 'ngbDragHandle',\n host: {\n class: 'cursor-move',\n },\n})\nexport class DragHandle {}\n\n@Directive({\n selector: '[ngbDrag]',\n exportAs: 'ngbDrag',\n})\nexport class Drag {\n readonly el = inject(ElementRef);\n readonly document = inject(DOCUMENT);\n\n readonly handle = contentChild(DragHandle, { read: ElementRef, descendants: true });\n readonly events = new Subject<DragData>();\n readonly ngbDrag = outputFromObservable(this.events);\n\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly lockAxis = input<'x' | 'y'>();\n readonly dragBoundary = input<string>();\n\n // hacky: we need this for host directives\n _lockAxis = linkedSignal(this.lockAxis);\n _dragBoundary = linkedSignal(this.dragBoundary);\n _disabled = linkedSignal(this.disabled);\n\n private readonly dragBoundaryElement = computed(() => {\n const id = this._dragBoundary();\n return id ? this.document.querySelector(id) : null;\n });\n private boundaryRect: { left: number; top: number; right: number; bottom: number } | undefined;\n startEvent!: PointerEvent;\n lastValue = new DragData();\n isDragging = false;\n\n constructor() {\n effect(cleanup => {\n if (!this._disabled()) {\n const handle = this.handle() || this.el;\n handle.nativeElement.addEventListener('pointerdown', this.onPointerDown);\n cleanup(() => handle.nativeElement.removeEventListener('pointerdown', this.onPointerDown));\n }\n });\n this.el.nativeElement.style.touchAction = 'none';\n }\n\n private onPointerDown = (event: PointerEvent) => {\n if (event.button !== 0) return; // Only trigger on left click\n\n this.startDrag(event);\n this.document.addEventListener('pointermove', this.onPointerMove);\n this.document.addEventListener('pointerup', this.onPointerUp);\n };\n\n private onPointerMove = (event: PointerEvent) => {\n if (this.isDragging) {\n event.preventDefault();\n event.stopPropagation();\n this.moveDrag(event);\n }\n };\n\n private onPointerUp = (event: PointerEvent) => {\n this.endDrag(event);\n this.document.removeEventListener('pointermove', this.onPointerMove);\n this.document.removeEventListener('pointerup', this.onPointerUp);\n };\n\n private startDrag(event: PointerEvent) {\n this.startEvent = event;\n this.isDragging = true;\n const rect = this.el.nativeElement.getBoundingClientRect();\n const parentRect = this.dragBoundaryElement()?.getBoundingClientRect();\n if (parentRect) {\n const left = rect.left - parentRect.left;\n const top = rect.top - parentRect.top;\n this.boundaryRect = {\n left,\n top,\n right: parentRect.width - rect.width - left,\n bottom: parentRect.height - rect.height - top,\n };\n // console.log(this.boundaryRect);\n }\n this.lastValue = this.getDragEvent(event, 'start');\n this.events.next(this.lastValue);\n this.toggleUserSelect();\n }\n\n private moveDrag(event: PointerEvent) {\n this.lastValue = this.getDragEvent(event, 'move');\n // prevent unnecessary events when the drag is outside the boundary\n if (this.lastValue.dx !== 0 || this.lastValue.dy !== 0) {\n this.events.next(this.lastValue);\n }\n }\n\n private endDrag(event: PointerEvent) {\n this.isDragging = false;\n const value = this.getDragEvent(event, 'end');\n this.events.next(value);\n this.lastValue = new DragData();\n this.toggleUserSelect(false);\n }\n\n private toggleUserSelect(active = true) {\n const value = active ? 'none' : '';\n this.document.body.style.userSelect = value;\n this.document.body.style.webkitUserSelect = value;\n this.document.body.style.pointerEvents = value;\n }\n\n private getDirection(ev: PointerEvent) {\n let dir = this.lastValue.direction || 'left';\n if (ev.clientX > this.lastValue.clientX!) {\n dir = 'right';\n } else if (ev.clientX < this.lastValue.clientX!) {\n dir = 'left';\n }\n return dir;\n }\n\n private getDragEvent(ev: PointerEvent, type: 'start' | 'move' | 'end') {\n const now = Date.now();\n const dt = now - this.lastValue.time;\n const startClientX = this.startEvent.clientX;\n const startClientY = this.startEvent.clientY;\n\n let x = ev.clientX - startClientX;\n let y = ev.clientY - startClientY;\n\n // it is to make sure that the drag is always in the drag point\n if (this.boundaryRect) {\n const { left, top, right, bottom } = this.boundaryRect;\n x = Math.max(-left, Math.min(x, right));\n y = Math.max(-top, Math.min(y, bottom));\n }\n\n if (this._lockAxis() === 'x') {\n y = 0;\n } else if (this._lockAxis() === 'y') {\n x = 0;\n }\n\n const dx = x - (this.lastValue.x ?? 0);\n const dy = y - (this.lastValue.y ?? 0);\n\n let velocity = 0;\n if (type === 'move' && dt > 0) {\n const distance = Math.sqrt(dx * dx + dy * dy);\n velocity = (distance / dt) * 0.6;\n } else if (type === 'end') {\n velocity = this.lastValue.velocity;\n }\n this.lastValue.time = now;\n\n return new DragData(\n x,\n y,\n dx,\n dy,\n type,\n ev,\n ev.clientX,\n ev.clientY,\n this.getDirection(ev),\n velocity,\n now,\n );\n }\n}\n","import { Directive, ElementRef, inject, input } from '@angular/core';\nimport { Drag } from './drag';\n\n@Directive({\n selector: '[ngbDragMove]',\n hostDirectives: [{ directive: Drag, inputs: ['dragBoundary'] }],\n})\nexport class DragMove {\n private drag = inject(Drag);\n private el = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly target = input<HTMLElement>();\n private scale = 1;\n private x = 0;\n private y = 0;\n private lastX = 0;\n private lastY = 0;\n\n constructor() {\n this.drag.events.subscribe(data => {\n data.event?.preventDefault();\n requestAnimationFrame(() => {\n if (data.type === 'move') {\n this.x = data.x + this.lastX;\n this.y = data.y + this.lastY;\n this.updateTransform();\n } else if (data.type === 'end') {\n this.lastX = this.x;\n this.lastY = this.y;\n }\n });\n });\n\n // this.el.nativeElement.addEventListener('wheel', e => {\n // e.preventDefault();\n // const rect = this.element.getBoundingClientRect();\n // const mouseX = e.clientX - rect.left;\n // const mouseY = e.clientY - rect.top;\n\n // const prevScale = this.scale;\n // this.scale = Math.max(0.1, Math.min(10, this.scale + e.deltaY * -0.001));\n\n // const scaleRatio = this.scale / prevScale;\n\n // this.x += ((mouseX - this.x) * (1 - scaleRatio)) / this.scale;\n // this.y += ((mouseY - this.y) * (1 - scaleRatio)) / this.scale;\n\n // this.updateTransform();\n // });\n }\n\n private get element() {\n return this.target() ?? this.el.nativeElement;\n }\n\n private updateTransform() {\n this.element.style.transform = `translate(${this.x}px, ${this.y}px) scale(${this.scale})`;\n }\n}\n","import {\n Directive,\n ElementRef,\n contentChildren,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { Drag, DragData } from './drag';\n\nexport interface DropEvent<T> {\n previousIndex: number;\n currentIndex: number;\n container: { data: T };\n previousContainer: { data: T };\n}\n\n@Directive({\n selector: '[ngbDrop]',\n})\nexport class DragDrop<T> {\n readonly el = inject(ElementRef);\n readonly dragItems = contentChildren(Drag);\n\n readonly data = input<T>();\n readonly orderChanged = output<DropEvent<T>>();\n\n private sortableElements: HTMLElement[] = [];\n private previousIndex!: number;\n private currentIndex!: number;\n private height!: number; // height is required for testing\n\n constructor() {\n effect(cleanup => {\n const items = this.dragItems();\n this.sortableElements = [];\n const subs = items.map(item => {\n this.sortableElements.push(item.el.nativeElement);\n return item.ngbDrag.subscribe(data => this.onDrag(data, item));\n });\n cleanup(() => subs.forEach(sub => sub.unsubscribe()));\n });\n }\n\n private onDrag(dragData: DragData, item: Drag) {\n const element = item.el.nativeElement;\n if (dragData.type === 'start') {\n this.onDragStart(element);\n } else if (dragData.type === 'move') {\n this.onDragMove(element, dragData, item);\n } else if (dragData.type === 'end') {\n this.onDragEnd(element);\n }\n }\n\n fromThis(dragData: DragData) {\n return isIntersecting(\n { x: dragData.clientX!, y: dragData.clientY!, w: 0.1, h: 0.1 },\n this.el.nativeElement.getBoundingClientRect(),\n );\n }\n\n private onDragStart(element: HTMLElement) {\n element.style.zIndex = '1000';\n element.style.transition = 'none';\n element.style.position = 'relative';\n\n // original index\n this.previousIndex = this.dragItems().findIndex(item => item.el.nativeElement === element);\n this.currentIndex = this.previousIndex;\n this.height = element.offsetHeight;\n }\n\n private onDragMove(element: HTMLElement, dragData: DragData, drag: Drag) {\n const deltaX = dragData.x;\n const deltaY = dragData.y;\n element.style.transform = `translate(${deltaX}px, ${deltaY}px)`;\n\n // we have to find the new index by checking clientXY of the mouse\n const mouseY = dragData.clientY!;\n const mouseX = dragData.clientX!;\n const ci = this.currentIndex ?? this.previousIndex;\n let newIndex = this.sortableElements.findIndex((el, index) => {\n const rect = el.getBoundingClientRect();\n return index !== ci && isIntersecting({ x: mouseX, y: mouseY, w: 0.1, h: 0.1 }, rect);\n });\n newIndex = newIndex === -1 ? ci : newIndex;\n\n if (newIndex !== this.currentIndex) {\n this.rearrangeItems(drag, newIndex);\n this.currentIndex = newIndex;\n }\n }\n\n private onDragEnd(element: HTMLElement) {\n // Emit the new order\n this.resetPositions();\n this.emitNewOrder();\n\n // element.style.transition = 'transform 0.3s ease-out';\n // element.addEventListener(\n // 'transitionend',\n // () => {\n element.style.zIndex = '';\n element.style.position = '';\n // },\n // { once: true },\n // );\n }\n\n private rearrangeItems(dragger: Drag, newIndex: number) {\n const draggedItem = dragger.el.nativeElement;\n const oldIndex = this.sortableElements.indexOf(draggedItem);\n if (oldIndex === newIndex) return;\n\n // Move the dragged item in the array\n this.sortableElements.splice(oldIndex, 1);\n this.sortableElements.splice(newIndex, 0, draggedItem);\n\n // Update positions of all items\n this.updateItemPositions(draggedItem, newIndex);\n }\n\n private updateItemPositions(draggedItem: HTMLElement, newIndex: number) {\n const originalIndex = this.previousIndex;\n this.sortableElements.forEach((el, index) => {\n if (el !== draggedItem) {\n const v =\n (originalIndex >= newIndex && (index > originalIndex || index < newIndex)) ||\n (originalIndex <= newIndex && (index < originalIndex || index > newIndex))\n ? 0\n : index > newIndex\n ? 1\n : -1;\n const shift = v * this.height;\n el.style.transform = `translateY(${shift}px)`;\n // el.style.transition = 'transform 0.3s ease-out';\n }\n });\n }\n\n private resetPositions() {\n this.sortableElements.forEach(el => {\n el.style.transform = '';\n el.style.transition = '';\n });\n }\n\n private emitNewOrder() {\n if (this.currentIndex !== this.previousIndex) {\n const containerData = { data: this.data()! };\n this.orderChanged.emit({\n previousIndex: this.previousIndex,\n currentIndex: this.currentIndex,\n container: containerData,\n previousContainer: containerData,\n });\n }\n }\n}\n\ninterface Boundary {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\n// We need to check if the mouse is intersecting with the element\nfunction isIntersecting(rect1: Boundary | DOMRect, rect2: Boundary | DOMRect) {\n if (rect1 instanceof DOMRect) {\n rect1 = { x: rect1.x, y: rect1.y, w: rect1.width, h: rect1.height };\n }\n if (rect2 instanceof DOMRect) {\n rect2 = { x: rect2.x, y: rect2.y, w: rect2.width, h: rect2.height };\n }\n return (\n rect1.x <= rect2.x + rect2.w &&\n rect1.x + rect1.w >= rect2.x &&\n rect1.y <= rect2.y + rect2.h &&\n rect1.y + rect1.h >= rect2.y\n );\n}\n\nexport function moveItemInArray<T>(array: T[], fromIndex: number, toIndex: number): void {\n if (fromIndex === toIndex) return;\n\n const item = array[fromIndex];\n const diff = fromIndex - toIndex;\n\n if (diff > 0) {\n // Moving towards the start of the array\n for (let i = fromIndex; i > toIndex; i--) {\n array[i] = array[i - 1];\n }\n } else {\n // Moving towards the end of the array\n for (let i = fromIndex; i < toIndex; i++) {\n array[i] = array[i + 1];\n }\n }\n\n array[toIndex] = item;\n}\n\nexport function transferArrayItem<T>(\n fromArray: T[],\n toArray: T[],\n fromIndex: number,\n toIndex: number,\n): void {\n const item = fromArray[fromIndex];\n fromArray.splice(fromIndex, 1);\n toArray.splice(toIndex, 0, item);\n}\n","/*\n * Public API Surface of drag\n */\n\nexport * from './drag';\nexport * from './drag-move';\nexport * from './drag-drop';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.Drag"],"mappings":"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"}
@@ -1,30 +1,30 @@
1
- import { trigger, state, style, transition, animate } from '@angular/animations';
2
1
  import * as i0 from '@angular/core';
3
2
  import { contentChild, computed, contentChildren, forwardRef, Directive, signal, effect, inject, input, model, ElementRef, Injector, afterNextRender } from '@angular/core';
4
- import { NgControl, FormGroup, FormArray } from '@angular/forms';
5
- import { uniqueId, provideValueAccessor } from '@ngbase/adk/utils';
3
+ import { FormGroup, FormArray, NgControl } from '@angular/forms';
4
+ import { uniqueId } from '@ngbase/adk/utils';
5
+ import { FormField } from '@angular/forms/signals';
6
6
 
7
7
  class NgbFormField {
8
8
  constructor() {
9
- this._control = contentChild(NgControl, ...(ngDevMode ? [{ debugName: "_control", descendants: true }] : [{ descendants: true }]));
9
+ this._control = contentChild(FormField, { ...(ngDevMode ? { debugName: "_control" } : {}), descendants: true });
10
10
  this._id = uniqueId();
11
11
  // we need to forwardRef the error component to avoid circular dependency
12
- this.status = statusChange(this._control);
13
- this._invalid = computed(() => this.status() === 'INVALID' && this._control()?.touched, ...(ngDevMode ? [{ debugName: "_invalid" }] : []));
12
+ this.status = computed(() => this._control()?.state(), ...(ngDevMode ? [{ debugName: "status" }] : []));
13
+ this._invalid = computed(() => this.status()?.invalid() && this.status()?.touched(), ...(ngDevMode ? [{ debugName: "_invalid" }] : []));
14
14
  this.errors = contentChildren(forwardRef(() => NgbInputError), ...(ngDevMode ? [{ debugName: "errors" }] : []));
15
15
  this.hasErrors = computed(() => this._invalid() || this.errors().some(e => e.isInvalid()), ...(ngDevMode ? [{ debugName: "hasErrors" }] : []));
16
16
  }
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbFormField, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
18
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.2.0", type: NgbFormField, isStandalone: true, selector: "ngb-form-field, [ngbFormField]", queries: [{ propertyName: "_control", first: true, predicate: NgControl, descendants: true, isSignal: true }, { propertyName: "errors", predicate: i0.forwardRef(() => NgbInputError), isSignal: true }], ngImport: i0 }); }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbFormField, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
18
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.0", type: NgbFormField, isStandalone: true, selector: "ngb-form-field, [ngbFormField]", queries: [{ propertyName: "_control", first: true, predicate: FormField, descendants: true, isSignal: true }, { propertyName: "errors", predicate: i0.forwardRef(() => NgbInputError), isSignal: true }], ngImport: i0 }); }
19
19
  }
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbFormField, decorators: [{
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbFormField, decorators: [{
21
21
  type: Directive,
22
22
  args: [{
23
23
  selector: 'ngb-form-field, [ngbFormField]',
24
24
  }]
25
- }] });
25
+ }], propDecorators: { _control: [{ type: i0.ContentChild, args: [i0.forwardRef(() => FormField), { ...{ descendants: true }, isSignal: true }] }], errors: [{ type: i0.ContentChildren, args: [forwardRef(() => NgbInputError), { isSignal: true }] }] } });
26
26
  function statusChange(sControl) {
27
- const statusChanges = signal(null, ...(ngDevMode ? [{ debugName: "statusChanges", equal: () => false }] : [{ equal: () => false }]));
27
+ const statusChanges = signal(null, { ...(ngDevMode ? { debugName: "statusChanges" } : {}), equal: () => false });
28
28
  effect(cleanup => {
29
29
  const control = sControl();
30
30
  if (control?.statusChanges) {
@@ -60,32 +60,23 @@ class NgbInputError {
60
60
  }, []);
61
61
  }, ...(ngDevMode ? [{ debugName: "errorNames" }] : []));
62
62
  this.isFieldInvalid = computed(() => {
63
- const control = this.formField.__control?.();
64
- return control ? this.fieldInvalidFn(control) : this.oldIsFieldInvalid();
63
+ const control = this.formField._control();
64
+ return control ? this.fieldInvalidFn(control) : false;
65
65
  }, ...(ngDevMode ? [{ debugName: "isFieldInvalid" }] : []));
66
66
  this.isInvalid = computed(() => {
67
67
  return this.invalid() ?? this.isFieldInvalid();
68
68
  }, ...(ngDevMode ? [{ debugName: "isInvalid" }] : []));
69
69
  }
70
- oldIsFieldInvalid() {
71
- const control = this.formField._control();
72
- const status = this.formField.status();
73
- const names = this.errorNames();
74
- return (status === 'INVALID' &&
75
- control?.touched &&
76
- names.every(n => !!control.errors?.[n.name] !== n.negated));
77
- }
78
70
  fieldInvalidFn(control) {
79
- // const control = this.formField.__control();
80
71
  const names = this.errorNames();
81
- const field = control?.field()();
72
+ const field = control?.formField()();
82
73
  return (field?.touched() &&
83
74
  names.every(n => !!field?.errors().some((x) => x.kind == n.name) !== n.negated));
84
75
  }
85
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbInputError, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
86
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: NgbInputError, isStandalone: true, selector: "[ngbError]", inputs: { ngbError: { classPropertyName: "ngbError", publicName: "ngbError", isSignal: true, isRequired: true, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "hidden": "!animate() && !isInvalid()" } }, ngImport: i0 }); }
76
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbInputError, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
77
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: NgbInputError, isStandalone: true, selector: "[ngbError]", inputs: { ngbError: { classPropertyName: "ngbError", publicName: "ngbError", isSignal: true, isRequired: true, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "hidden": "!animate() && !isInvalid()" } }, ngImport: i0 }); }
87
78
  }
88
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbInputError, decorators: [{
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbInputError, decorators: [{
89
80
  type: Directive,
90
81
  args: [{
91
82
  selector: '[ngbError]',
@@ -93,7 +84,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImpor
93
84
  '[hidden]': '!animate() && !isInvalid()',
94
85
  },
95
86
  }]
96
- }] });
87
+ }], propDecorators: { ngbError: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngbError", required: true }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }] } });
97
88
  function markControlsTouched(control, options = { touched: true, dirty: false }) {
98
89
  if (control instanceof FormGroup || control instanceof FormArray) {
99
90
  Object.values(control.controls).forEach(c => markControlsTouched(c, options));
@@ -104,54 +95,51 @@ function markControlsTouched(control, options = { touched: true, dirty: false })
104
95
  control.markAsTouched();
105
96
  control.updateValueAndValidity();
106
97
  }
107
- const toggleDiv = trigger('toggleDiv', [
108
- state('hidden', style({ opacity: 0, height: '0px', visibility: 'hidden' })),
109
- state('visible', style({ opacity: 1, height: '*', visibility: 'visible' })),
110
- transition('hidden <=> visible', [animate('150ms ease-in-out')]),
111
- ]);
112
98
 
113
99
  class InputBase {
114
100
  constructor() {
115
101
  this.formField = inject(NgbFormField, { optional: true });
116
102
  this.value = model('', ...(ngDevMode ? [{ debugName: "value" }] : []));
103
+ this.required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
104
+ this.touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : []));
105
+ this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
117
106
  this.id = this.formField?._id ?? uniqueId();
107
+ this.displayValue = computed(() => this.value(), ...(ngDevMode ? [{ debugName: "displayValue" }] : []));
118
108
  }
119
109
  setInputValue(ev) {
120
- const value = ev.target.value;
121
- this.setValue(value, true);
122
- }
123
- setValue(value, fromInput = false) {
124
- this.value.set(value);
125
- if (fromInput) {
126
- this.onChange?.(value);
127
- this.onTouched?.();
110
+ const el = ev.target;
111
+ let value = el.value;
112
+ if (el.type === 'checkbox') {
113
+ this.setValue(el.checked);
114
+ }
115
+ else if (el.type === 'number') {
116
+ this.setValue(el.valueAsNumber);
128
117
  }
129
- }
130
- writeValue(value) {
131
118
  this.setValue(value);
132
119
  }
133
- registerOnChange(fn) {
134
- this.onChange = fn;
120
+ onTouched() {
121
+ this.touched.set(true);
135
122
  }
136
- registerOnTouched(fn) {
137
- this.onTouched = fn;
123
+ setValue(value) {
124
+ this.value.set(value);
138
125
  }
139
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: InputBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
140
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: InputBase, isStandalone: true, selector: "input[ngbInputBase]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "role": "textbox" }, listeners: { "input": "setInputValue($event)" }, properties: { "attr.id": "id", "value": "value()" } }, providers: [provideValueAccessor(InputBase)], ngImport: i0 }); }
126
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: InputBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
127
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: InputBase, isStandalone: true, selector: "input[ngbInputBase]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange" }, host: { attributes: { "role": "textbox" }, listeners: { "input": "setInputValue($event)", "blur": "onTouched()" }, properties: { "attr.id": "id", "value": "displayValue()", "disabled": "disabled() || undefined" } }, ngImport: i0 }); }
141
128
  }
142
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: InputBase, decorators: [{
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: InputBase, decorators: [{
143
130
  type: Directive,
144
131
  args: [{
145
132
  selector: 'input[ngbInputBase]',
146
- providers: [provideValueAccessor(InputBase)],
147
133
  host: {
148
134
  role: 'textbox',
149
135
  '[attr.id]': 'id',
150
- '[value]': 'value()',
136
+ '[value]': 'displayValue()',
151
137
  '(input)': 'setInputValue($event)',
138
+ '(blur)': 'onTouched()',
139
+ '[disabled]': 'disabled() || undefined',
152
140
  },
153
141
  }]
154
- }] });
142
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
155
143
 
156
144
  class AutoHeight {
157
145
  constructor() {
@@ -204,25 +192,25 @@ class AutoHeight {
204
192
  el.style.height = height + 'px';
205
193
  }
206
194
  }
207
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AutoHeight, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
208
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: AutoHeight, isStandalone: true, selector: "textarea[ngbAutoHeight]", inputs: { maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
195
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutoHeight, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
196
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: AutoHeight, isStandalone: true, selector: "textarea[ngbAutoHeight]", inputs: { maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
209
197
  }
210
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AutoHeight, decorators: [{
198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: AutoHeight, decorators: [{
211
199
  type: Directive,
212
200
  args: [{
213
201
  selector: 'textarea[ngbAutoHeight]',
214
202
  }]
215
- }], ctorParameters: () => [] });
203
+ }], ctorParameters: () => [], propDecorators: { maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }] } });
216
204
 
217
205
  class NgbLabel {
218
206
  constructor() {
219
207
  this.formField = inject(NgbFormField);
220
208
  this.id = this.formField._id;
221
209
  }
222
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
223
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.0", type: NgbLabel, isStandalone: true, selector: "[ngbLabel]", host: { properties: { "attr.for": "id" } }, ngImport: i0 }); }
210
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
211
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.0", type: NgbLabel, isStandalone: true, selector: "[ngbLabel]", host: { properties: { "attr.for": "id" } }, ngImport: i0 }); }
224
212
  }
225
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NgbLabel, decorators: [{
213
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbLabel, decorators: [{
226
214
  type: Directive,
227
215
  args: [{
228
216
  selector: '[ngbLabel]',
@@ -232,17 +220,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImpor
232
220
  }]
233
221
  }] });
234
222
 
235
- class NumberFormat {
223
+ class NumberFormat extends InputBase {
236
224
  constructor() {
225
+ super(...arguments);
237
226
  // Input signals with default values
238
227
  this.el = inject(ElementRef);
228
+ // readonly value = model<any>();
239
229
  this.decimals = input(2, ...(ngDevMode ? [{ debugName: "decimals" }] : []));
240
230
  this.decimalSeparator = input('.', ...(ngDevMode ? [{ debugName: "decimalSeparator" }] : []));
241
231
  this.thousandSeparator = input(',', ...(ngDevMode ? [{ debugName: "thousandSeparator" }] : []));
242
232
  // Private members
243
- this.onChange = (_) => { };
244
- this.onTouched = () => { };
245
- this.rawValue = '';
233
+ this.displayValue = computed(() => this.formatDisplayValue(this.value()), ...(ngDevMode ? [{ debugName: "displayValue" }] : []));
246
234
  this.specialKeys = [
247
235
  'Backspace',
248
236
  'Tab',
@@ -254,16 +242,13 @@ class NumberFormat {
254
242
  ];
255
243
  }
256
244
  // Handles input changes
257
- onInput(ev) {
258
- const value = ev.target.value.toString();
245
+ setValue(value) {
246
+ const stringValue = value.toString();
259
247
  const position = this.el.nativeElement.selectionStart;
260
- const cleanedValue = this.cleanValue(value);
248
+ const cleanedValue = this.cleanValue(stringValue);
261
249
  if (this.isValidNumber(cleanedValue)) {
262
- this.rawValue = cleanedValue;
263
- this.formatDisplayValue(cleanedValue);
264
- this.onChange(this.rawValue);
265
- this.onTouched();
266
- this.updateCursorPosition(value, position ?? 0);
250
+ this.value.set(cleanedValue);
251
+ this.updateCursorPosition(stringValue, position ?? 0);
267
252
  }
268
253
  }
269
254
  // Handles keydown events to validate input
@@ -289,37 +274,6 @@ class NumberFormat {
289
274
  event.preventDefault();
290
275
  }
291
276
  }
292
- // Handle blur event
293
- onBlur() {
294
- if (this.rawValue) {
295
- this.formatDisplayValue(this.rawValue);
296
- }
297
- this.onTouched();
298
- }
299
- // ControlValueAccessor implementation
300
- writeValue(value) {
301
- if (value) {
302
- const cleanValue = this.cleanValue(value);
303
- this.rawValue = cleanValue;
304
- this.formatDisplayValue(cleanValue);
305
- }
306
- else {
307
- this.reset();
308
- }
309
- }
310
- reset() {
311
- this.el.nativeElement.value = '';
312
- this.rawValue = '';
313
- }
314
- registerOnChange(fn) {
315
- this.onChange = fn;
316
- }
317
- registerOnTouched(fn) {
318
- this.onTouched = fn;
319
- }
320
- setDisabledState(isDisabled) {
321
- this.el.nativeElement.disabled = isDisabled;
322
- }
323
277
  // Private helper methods
324
278
  cleanValue(value) {
325
279
  return value
@@ -331,19 +285,15 @@ class NumberFormat {
331
285
  return parts.length <= 2 && parts.every(part => /^\d*$/.test(part));
332
286
  }
333
287
  formatDisplayValue(value) {
334
- if (!value) {
335
- this.reset();
336
- return;
337
- }
338
288
  const parts = value.split(this.decimalSeparator());
339
289
  let integerPart = parts[0]
340
290
  .replace(/^0+(?=\d)/, '')
341
291
  .replace(/\B(?=(\d{3})+(?!\d))/g, this.thousandSeparator());
342
292
  const decimalPart = parts.length > 1 ? parts[1].substring(0, this.decimals()) : undefined;
343
- this.el.nativeElement.value =
344
- decimalPart !== undefined
345
- ? `${integerPart}${this.decimalSeparator()}${decimalPart}`
346
- : integerPart;
293
+ const displayValue = decimalPart !== undefined
294
+ ? `${integerPart}${this.decimalSeparator()}${decimalPart}`
295
+ : integerPart;
296
+ return displayValue || '';
347
297
  }
348
298
  updateCursorPosition(originalValue, originalPosition) {
349
299
  setTimeout(() => {
@@ -374,25 +324,22 @@ class NumberFormat {
374
324
  escapeRegExp(str) {
375
325
  return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
376
326
  }
377
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NumberFormat, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
378
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.2.0", type: NumberFormat, isStandalone: true, selector: "[numberFormat]", inputs: { decimals: { classPropertyName: "decimals", publicName: "decimals", isSignal: true, isRequired: false, transformFunction: null }, decimalSeparator: { classPropertyName: "decimalSeparator", publicName: "decimalSeparator", isSignal: true, isRequired: false, transformFunction: null }, thousandSeparator: { classPropertyName: "thousandSeparator", publicName: "thousandSeparator", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "input": "onInput($event)", "blur": "onBlur()", "keydown": "onKeyDown($event)" } }, providers: [provideValueAccessor(NumberFormat)], ngImport: i0 }); }
327
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NumberFormat, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
328
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: NumberFormat, isStandalone: true, selector: "[numberFormat]", inputs: { decimals: { classPropertyName: "decimals", publicName: "decimals", isSignal: true, isRequired: false, transformFunction: null }, decimalSeparator: { classPropertyName: "decimalSeparator", publicName: "decimalSeparator", isSignal: true, isRequired: false, transformFunction: null }, thousandSeparator: { classPropertyName: "thousandSeparator", publicName: "thousandSeparator", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeyDown($event)" } }, usesInheritance: true, ngImport: i0 }); }
379
329
  }
380
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: NumberFormat, decorators: [{
330
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NumberFormat, decorators: [{
381
331
  type: Directive,
382
332
  args: [{
383
333
  selector: '[numberFormat]',
384
- providers: [provideValueAccessor(NumberFormat)],
385
334
  host: {
386
- '(input)': 'onInput($event)',
387
- '(blur)': 'onBlur()',
388
335
  '(keydown)': 'onKeyDown($event)',
389
336
  },
390
337
  }]
391
- }] });
338
+ }], propDecorators: { decimals: [{ type: i0.Input, args: [{ isSignal: true, alias: "decimals", required: false }] }], decimalSeparator: [{ type: i0.Input, args: [{ isSignal: true, alias: "decimalSeparator", required: false }] }], thousandSeparator: [{ type: i0.Input, args: [{ isSignal: true, alias: "thousandSeparator", required: false }] }] } });
392
339
 
393
340
  /**
394
341
  * Generated bundle index. Do not edit.
395
342
  */
396
343
 
397
- export { AutoHeight, InputBase, NgbFormField, NgbInputError, NgbLabel, NumberFormat, markControlsTouched, toggleDiv };
344
+ export { AutoHeight, InputBase, NgbFormField, NgbInputError, NgbLabel, NumberFormat, markControlsTouched };
398
345
  //# sourceMappingURL=ngbase-adk-form-field.mjs.map