@esfaenza/core 20.3.81 → 20.3.84

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.
@@ -2,7 +2,6 @@ import * as i0 from '@angular/core';
2
2
  import { Input, Directive, HostListener, Attribute, inject, NgZone, NgModule } from '@angular/core';
3
3
  import * as i1 from '@esfaenza/extensions';
4
4
  import { AppEmbeddingExtensions } from '@esfaenza/extensions';
5
- import 'jquery-slimscroll';
6
5
  import * as i2 from '@angular/router';
7
6
  import { RouterLinkWithHref } from '@angular/router';
8
7
  import { EMBEDDED_ROUTE, ROUTE } from '@esfaenza/core/domain';
@@ -11,49 +10,99 @@ import * as i3 from '@angular/common';
11
10
  import { ModalDirective } from 'ngx-bootstrap/modal';
12
11
 
13
12
  // Angular
13
+ /**
14
+ * Rende trascinabile il primo figlio dell'elemento (tipicamente la `.modal-content` dentro una
15
+ * `.modal-dialog`), afferrandolo dall'handle indicato (default `.modal-header`).
16
+ *
17
+ * Riproduce il comportamento che aveva con jQuery UI `draggable`:
18
+ * - lo spostamento si applica con `left`/`top` su un elemento `position: relative`, quindi si somma
19
+ * fra un trascinamento e l'altro;
20
+ * - non parte se si preme su campi, pulsanti o select (il `cancel` di default di jQuery UI);
21
+ * - solo con il tasto principale del mouse (jQuery UI non gestiva il touch);
22
+ * - quando l'applicazione e' incorporata (`AppEmbeddingExtensions.Embedded`) il riquadro resta
23
+ * dentro la pagina, come faceva il vecchio `div_containment`.
24
+ *
25
+ * Tutto gira fuori dalla zona di Angular: i movimenti del mouse non devono scatenare change detection.
26
+ */
14
27
  class Draggable {
28
+ static { this.CANCEL = "input, textarea, button, select, option"; }
15
29
  constructor(_elementRef, zone, emb) {
16
30
  this._elementRef = _elementRef;
17
31
  this.zone = zone;
18
32
  this.emb = emb;
33
+ this.target = null;
34
+ this.startX = 0;
35
+ this.startY = 0;
36
+ this.startLeft = 0;
37
+ this.startTop = 0;
38
+ this.bounds = null;
39
+ this.bodyUserSelect = "";
40
+ this.onDown = (e) => {
41
+ if (e.button !== 0)
42
+ return;
43
+ let host = this._elementRef.nativeElement;
44
+ let target = host.firstElementChild;
45
+ let source = e.target;
46
+ let handle = source?.closest(this.handlerSelector || ".modal-header");
47
+ if (!target || !handle || !target.contains(handle) || source.closest(Draggable.CANCEL))
48
+ return;
49
+ // Come jQuery UI: niente selezione del testo mentre si trascina
50
+ e.preventDefault();
51
+ if (getComputedStyle(target).position === "static")
52
+ target.style.position = "relative";
53
+ this.target = target;
54
+ this.startX = e.clientX;
55
+ this.startY = e.clientY;
56
+ this.startLeft = parseFloat(target.style.left) || 0;
57
+ this.startTop = parseFloat(target.style.top) || 0;
58
+ this.bounds = this.emb.Embedded ? this.computeBounds(target) : null;
59
+ this.bodyUserSelect = document.body.style.userSelect;
60
+ document.body.style.userSelect = "none";
61
+ document.addEventListener("mousemove", this.onMove);
62
+ document.addEventListener("mouseup", this.onUp);
63
+ };
64
+ this.onMove = (e) => {
65
+ if (!this.target)
66
+ return;
67
+ let dx = e.clientX - this.startX;
68
+ let dy = e.clientY - this.startY;
69
+ if (this.bounds) {
70
+ dx = Math.min(Math.max(dx, this.bounds.minDx), this.bounds.maxDx);
71
+ dy = Math.min(Math.max(dy, this.bounds.minDy), this.bounds.maxDy);
72
+ }
73
+ this.target.style.left = (this.startLeft + dx) + "px";
74
+ this.target.style.top = (this.startTop + dy) + "px";
75
+ };
76
+ this.onUp = () => this.stopListening();
19
77
  }
20
78
  ngOnInit() {
21
79
  this.zone.runOutsideAngular(() => {
22
- var handle = this.handlerSelector || '.modal-header';
23
- this.$draggable = jQuery(this._elementRef.nativeElement).children(':first-child');
24
- this.$draggable.draggable({
25
- handle,
26
- helper: function (_, __) {
27
- var oBody = jQuery(document).find('body');
28
- var containmentDiv = jQuery('<div id="div_containment"></div>');
29
- containmentDiv
30
- .css('z-index', "-99999")
31
- .css('top', "0")
32
- .css('left', "0")
33
- .css('width', "100%")
34
- .css('height', "100%")
35
- .css('position', 'absolute');
36
- containmentDiv.appendTo(oBody);
37
- return this;
38
- },
39
- stop: function (_, __) {
40
- jQuery(document).filter('body').find('#div_containment').remove();
41
- },
42
- containment: this.emb.Embedded ? "#div_containment" : null
43
- });
80
+ this._elementRef.nativeElement.addEventListener("mousedown", this.onDown);
44
81
  });
45
82
  }
46
83
  ngOnDestroy() {
47
- this.zone.runOutsideAngular(() => {
48
- // Distruzione di jQuery-UI draggable e rimozione di un eventuale containment div
49
- // rimasto appeso al body se la direttiva viene distrutta durante il drag.
50
- try {
51
- if (this.$draggable && this.$draggable.draggable("instance"))
52
- this.$draggable.draggable("destroy");
53
- }
54
- catch { }
55
- jQuery(document).find("body").find("#div_containment").remove();
56
- });
84
+ this._elementRef.nativeElement.removeEventListener("mousedown", this.onDown);
85
+ this.stopListening();
86
+ }
87
+ stopListening() {
88
+ document.removeEventListener("mousemove", this.onMove);
89
+ document.removeEventListener("mouseup", this.onUp);
90
+ if (this.target) {
91
+ document.body.style.userSelect = this.bodyUserSelect;
92
+ this.target = null;
93
+ }
94
+ }
95
+ /** Di quanto si puo' spostare il riquadro restando dentro la pagina (in px, da dove si trova ora) */
96
+ computeBounds(el) {
97
+ let rect = el.getBoundingClientRect();
98
+ let page = document.documentElement;
99
+ let left = rect.left + window.scrollX, top = rect.top + window.scrollY;
100
+ return {
101
+ minDx: -left,
102
+ maxDx: Math.max(page.scrollWidth, page.clientWidth) - (left + rect.width),
103
+ minDy: -top,
104
+ maxDy: Math.max(page.scrollHeight, page.clientHeight) - (top + rect.height)
105
+ };
57
106
  }
58
107
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: Draggable, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.AppEmbeddingExtensions }], target: i0.ɵɵFactoryTarget.Directive }); }
59
108
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.34", type: Draggable, isStandalone: true, selector: "[emaDraggable]", inputs: { handlerSelector: ["emaDraggable", "handlerSelector"] }, ngImport: i0 }); }
@@ -70,44 +119,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
70
119
  }] } });
71
120
 
72
121
  // Angular
122
+ /**
123
+ * Area scorrevole ad altezza fissa con una barra sottile.
124
+ *
125
+ * Prima usava il plugin jQuery slimScroll, che avvolgeva l'elemento in un contenitore e disegnava
126
+ * una barra finta. Ora lo scorrimento e' quello nativo: la direttiva imposta altezza e overflow,
127
+ * e la classe `es-slim-scroll` da' alla barra l'aspetto di prima (4px, visibile al passaggio del
128
+ * mouse; vedi `_libs-override.scss`).
129
+ *
130
+ * Delle opzioni di slimScroll l'unica usata nella Suite e' `height` (numero in px o stringa CSS).
131
+ */
73
132
  class SlimScroll {
74
- constructor(_elementRef, zone) {
133
+ constructor(_elementRef) {
75
134
  this._elementRef = _elementRef;
76
- this.zone = zone;
77
- }
78
- ngOnChanges(changes) {
79
- this._scroll();
80
135
  }
81
- // slimScroll registra listener e crea un wrapper nel DOM: senza destroy alla distruzione
82
- // della direttiva restavano orfani (leak).
83
- ngOnDestroy() {
84
- this._destroy();
85
- }
86
- _scroll() {
87
- this._destroy();
88
- this._init();
89
- }
90
- //Stacco slimscroll da Angular dato che registra dei listener sull'oggetto in cui viene creato che spammerebbero la change detection
91
- _init() {
92
- this.zone.runOutsideAngular(() => {
93
- jQuery(this._elementRef.nativeElement).slimScroll(this.slimScrollOptions);
94
- });
136
+ ngOnChanges() {
137
+ let style = this._elementRef.nativeElement.style;
138
+ let height = this.slimScrollOptions?.height;
139
+ style.overflowX = "hidden";
140
+ style.overflowY = "auto";
141
+ style.height = height == null ? "" : typeof height === "number" ? height + "px" : height;
95
142
  }
96
- _destroy() {
97
- this.zone.runOutsideAngular(() => {
98
- jQuery(this._elementRef.nativeElement).slimScroll({ destroy: true });
99
- });
100
- }
101
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: SlimScroll, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
102
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.34", type: SlimScroll, isStandalone: true, selector: "[slim-scroll]", inputs: { slimScrollOptions: "slimScrollOptions" }, usesOnChanges: true, ngImport: i0 }); }
143
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: SlimScroll, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
144
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.34", type: SlimScroll, isStandalone: true, selector: "[slim-scroll]", inputs: { slimScrollOptions: "slimScrollOptions" }, host: { classAttribute: "es-slim-scroll" }, usesOnChanges: true, ngImport: i0 }); }
103
145
  }
104
146
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: SlimScroll, decorators: [{
105
147
  type: Directive,
106
148
  args: [{
107
149
  selector: "[slim-scroll]",
108
- standalone: true
150
+ standalone: true,
151
+ host: { class: "es-slim-scroll" }
109
152
  }]
110
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { slimScrollOptions: [{
153
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { slimScrollOptions: [{
111
154
  type: Input
112
155
  }] } });
113
156
 
@@ -169,55 +212,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
169
212
  args: ['click', ['$event.button', '$event.ctrlKey', '$event.shiftKey', '$event.altKey', '$event.metaKey']]
170
213
  }] } });
171
214
 
172
- // Angular
173
- class Widget {
174
- constructor(el) {
175
- // Handler mantenuti come riferimenti così da poterli rimuovere in ngOnDestroy: registrati
176
- // inline non erano rimovibili, e ogni istanza aggiungeva listener a document a vita
177
- // (leak + handler duplicati che scattavano N volte).
178
- this.onClose = (e) => {
179
- let $colWrap = jQuery(e.target).closest(' [class*="col-"]:not(.widget-container)');
180
- // remove colWrap only if there are no more widgets inside
181
- if (!$colWrap.find(".widget").not(e.target).length) {
182
- $colWrap.remove();
183
- }
184
- };
185
- this.onFullscreened = (e) => {
186
- jQuery(e.target).find("div.widget-body").addClass("scrolling");
187
- };
188
- this.onRestored = (e) => {
189
- jQuery(e.target).find("div.widget-body").removeClass("scrolling");
190
- };
191
- this.$el = jQuery(el.nativeElement);
192
- jQuery.fn.widgster.Constructor.DEFAULTS.bodySelector = ".widget-body";
193
- /*
194
- When widget is closed remove its parent if it is .col-*
195
- */
196
- jQuery(document)
197
- .on("close.widgster", this.onClose)
198
- .on("fullscreened.widgster", this.onFullscreened)
199
- .on("restored.widgster", this.onRestored);
200
- }
201
- ngOnInit() {
202
- this.$el.widgster();
203
- }
204
- ngOnDestroy() {
205
- jQuery(document)
206
- .off("close.widgster", this.onClose)
207
- .off("fullscreened.widgster", this.onFullscreened)
208
- .off("restored.widgster", this.onRestored);
209
- }
210
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: Widget, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
211
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.34", type: Widget, isStandalone: true, selector: "[widget]", ngImport: i0 }); }
212
- }
213
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: Widget, decorators: [{
214
- type: Directive,
215
- args: [{
216
- selector: "[widget]",
217
- standalone: true
218
- }]
219
- }], ctorParameters: () => [{ type: i0.ElementRef }] });
220
-
221
215
  class ComponentHostDirective {
222
216
  constructor(viewContainerRef) {
223
217
  this.viewContainerRef = viewContainerRef;
@@ -383,10 +377,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
383
377
  }] });
384
378
 
385
379
  // Angular
386
- const DIRECTIVES = [Draggable, SlimScroll, Widget, esRouterLinkWithHref, ComponentHostDirective, EsModalDirective];
380
+ const DIRECTIVES = [Draggable, SlimScroll, esRouterLinkWithHref, ComponentHostDirective, EsModalDirective];
387
381
  class DirectivesModule {
388
382
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: DirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
389
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.34", ngImport: i0, type: DirectivesModule, imports: [Draggable, SlimScroll, Widget, esRouterLinkWithHref, ComponentHostDirective, EsModalDirective], exports: [Draggable, SlimScroll, Widget, esRouterLinkWithHref, ComponentHostDirective, EsModalDirective] }); }
383
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.34", ngImport: i0, type: DirectivesModule, imports: [Draggable, SlimScroll, esRouterLinkWithHref, ComponentHostDirective, EsModalDirective], exports: [Draggable, SlimScroll, esRouterLinkWithHref, ComponentHostDirective, EsModalDirective] }); }
390
384
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: DirectivesModule }); }
391
385
  }
392
386
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImport: i0, type: DirectivesModule, decorators: [{
@@ -398,5 +392,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.34", ngImpo
398
392
  * Generated bundle index. Do not edit.
399
393
  */
400
394
 
401
- export { ComponentHostDirective, DirectivesModule, Draggable, EsModalDirective, SlimScroll, Widget, esRouterLinkWithHref };
395
+ export { ComponentHostDirective, DirectivesModule, Draggable, EsModalDirective, SlimScroll, esRouterLinkWithHref };
402
396
  //# sourceMappingURL=esfaenza-core-directives.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-core-directives.mjs","sources":["../../../projects/core/directives/src/draggable/draggable.directive.ts","../../../projects/core/directives/src/slim-scroll/slim-scroll.directive.ts","../../../projects/core/directives/src/es-routerLink/es-routerLink.directive.ts","../../../projects/core/directives/src/widget/widget.directive.ts","../../../projects/core/directives/src/componentHost/componentHost.directive.ts","../../../projects/core/directives/src/es-modal/es-modal.directive.ts","../../../projects/core/directives/src/directives.module.ts","../../../projects/core/directives/src/esfaenza-core-directives.ts"],"sourcesContent":["// Angular\r\nimport { Directive, ElementRef, Input, NgZone } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AppEmbeddingExtensions } from \"@esfaenza/extensions\";\r\n\r\ndeclare var jQuery: any;\r\n\r\n@Directive({\r\n selector: \"[emaDraggable]\",\r\n standalone: true\r\n})\r\nexport class Draggable {\r\n @Input('emaDraggable') handlerSelector: string;\r\n\r\n private $draggable: any;\r\n\r\n constructor(private _elementRef: ElementRef, private zone: NgZone, private emb: AppEmbeddingExtensions) { }\r\n\r\n ngOnInit() {\r\n this.zone.runOutsideAngular(() => {\r\n var handle = this.handlerSelector || '.modal-header';\r\n this.$draggable = jQuery(this._elementRef.nativeElement).children(':first-child');\r\n this.$draggable.draggable({\r\n handle,\r\n helper: function (_: any, __: any) {\r\n var oBody = jQuery(document).find('body');\r\n var containmentDiv = jQuery('<div id=\"div_containment\"></div>');\r\n containmentDiv\r\n .css('z-index', \"-99999\")\r\n .css('top', \"0\")\r\n .css('left', \"0\")\r\n .css('width', \"100%\")\r\n .css('height', \"100%\")\r\n .css('position', 'absolute');\r\n containmentDiv.appendTo(oBody);\r\n return this;\r\n },\r\n stop: function (_: any, __: any) {\r\n jQuery(document).filter('body').find('#div_containment').remove();\r\n },\r\n containment: this.emb.Embedded ? \"#div_containment\" : null\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.zone.runOutsideAngular(() => {\r\n // Distruzione di jQuery-UI draggable e rimozione di un eventuale containment div\r\n // rimasto appeso al body se la direttiva viene distrutta durante il drag.\r\n try {\r\n if (this.$draggable && this.$draggable.draggable(\"instance\"))\r\n this.$draggable.draggable(\"destroy\");\r\n } catch { }\r\n jQuery(document).find(\"body\").find(\"#div_containment\").remove();\r\n });\r\n }\r\n}","// Angular\r\nimport { Directive, ElementRef, Input, NgZone } from \"@angular/core\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport \"jquery-slimscroll\";\r\n\r\ndeclare var jQuery: any;\r\n\r\n@Directive({\r\n selector: \"[slim-scroll]\",\r\n standalone: true\r\n})\r\nexport class SlimScroll {\r\n @Input() public slimScrollOptions: Object;\r\n\r\n constructor(private _elementRef: ElementRef, private zone: NgZone) {\r\n }\r\n\r\n ngOnChanges(changes: any) {\r\n this._scroll();\r\n }\r\n\r\n // slimScroll registra listener e crea un wrapper nel DOM: senza destroy alla distruzione\r\n // della direttiva restavano orfani (leak).\r\n ngOnDestroy() {\r\n this._destroy();\r\n }\r\n\r\n private _scroll() {\r\n this._destroy();\r\n this._init();\r\n }\r\n\r\n //Stacco slimscroll da Angular dato che registra dei listener sull'oggetto in cui viene creato che spammerebbero la change detection\r\n private _init() {\r\n this.zone.runOutsideAngular(() => {\r\n jQuery(this._elementRef.nativeElement).slimScroll(this.slimScrollOptions);\r\n });\r\n }\r\n\r\n private _destroy() {\r\n this.zone.runOutsideAngular(() => {\r\n jQuery(this._elementRef.nativeElement).slimScroll({ destroy: true });\r\n });\r\n }\r\n}","// Angular\r\nimport { LocationStrategy } from \"@angular/common\";\r\nimport { Attribute, Directive, ElementRef, HostListener, Input, Renderer2 } from \"@angular/core\";\r\nimport { ActivatedRoute, Router, RouterLinkWithHref, UrlTree } from \"@angular/router\";\r\nimport { EMBEDDED_ROUTE, EnvOptions, ROUTE } from \"@esfaenza/core/domain\";\r\nimport { AppEmbeddingExtensions } from \"@esfaenza/extensions\";\r\nimport { take } from \"rxjs\";\r\n\r\ndeclare var myconfig: EnvOptions;\r\n\r\n@Directive({\r\n selector: 'a[esRouterLink],area[esRouterLink]',\r\n standalone: true\r\n})\r\nexport class esRouterLinkWithHref extends RouterLinkWithHref {\r\n\r\n private EmbeddingSource: string;\r\n\r\n constructor(\r\n private emb: AppEmbeddingExtensions,\r\n router: Router, route: ActivatedRoute,\r\n @Attribute('tabindex') tabIndexAttribute: string | null | undefined,\r\n renderer: Renderer2, el: ElementRef,\r\n locationStrategy?: LocationStrategy) {\r\n\r\n super(router, route, tabIndexAttribute, renderer, el, locationStrategy)\r\n }\r\n\r\n @Input()\r\n set esRouterLink(commandsOrUrlTree: readonly any[] | string | UrlTree | null | undefined) {\r\n // UrlTree non è supportato because fuck you\r\n this.emb.EmbeddingSource.pipe(take(1)).subscribe(s => {\r\n this.EmbeddingSource = s;\r\n\r\n if(this.emb.Embedded && !s)\r\n console.error(\"Link creato in contesto di embedding ma senza embedding source!!\");\r\n\r\n let BasePath = \"/\" + (this.emb.Embedded ? EMBEDDED_ROUTE + (!!s? \"/\" + s : \"\") : ROUTE);\r\n\r\n if (commandsOrUrlTree != null) {\r\n (this as any).routerLinkInput = Array.isArray(commandsOrUrlTree) ? commandsOrUrlTree : [commandsOrUrlTree];\r\n let route = ((this as any).routerLinkInput[0] as string);\r\n if (!route.startsWith(\"/\" + EMBEDDED_ROUTE) && !route.startsWith(\"/\" + ROUTE))\r\n (this as any).routerLinkInput[0] = BasePath + (this as any).routerLinkInput[0];\r\n\r\n (this as any).setTabIndexIfNotOnNativeEl('0');\r\n } else {\r\n (this as any).routerLinkInput = null;\r\n (this as any).setTabIndexIfNotOnNativeEl(null);\r\n }\r\n });\r\n }\r\n\r\n @HostListener('click', ['$event.button', '$event.ctrlKey', '$event.shiftKey', '$event.altKey', '$event.metaKey'])\r\n override onClick(button: number, ctrlKey: boolean, shiftKey: boolean, altKey: boolean, metaKey: boolean): boolean {\r\n \r\n if (this.emb.Embedded) {\r\n if(this.urlTree){\r\n let url = this.urlTree.toString().replace(EMBEDDED_ROUTE + (!!this.EmbeddingSource? \"/\" + this.EmbeddingSource : \"\"), ROUTE + \"/embed/\" + myconfig.AppData.ModuleId);\r\n this.emb.MainWindow.postMessage({ type: \"navigate\", url, newTab: ctrlKey, replaceState: !ctrlKey, current: (this as any as { router: Router }).router.url }, \"*\");\r\n }\r\n\r\n if (!ctrlKey)\r\n return super.onClick(button, ctrlKey, shiftKey, altKey, metaKey);\r\n else\r\n return false;\r\n }\r\n else\r\n return super.onClick(button, ctrlKey, shiftKey, altKey, metaKey);\r\n }\r\n}","// Angular\nimport { Directive, ElementRef, OnDestroy, OnInit } from \"@angular/core\";\n\ndeclare var jQuery: any;\n\n@Directive({\n selector: \"[widget]\",\n standalone: true\n})\nexport class Widget implements OnInit, OnDestroy {\n $el: any;\n\n // Handler mantenuti come riferimenti così da poterli rimuovere in ngOnDestroy: registrati\n // inline non erano rimovibili, e ogni istanza aggiungeva listener a document a vita\n // (leak + handler duplicati che scattavano N volte).\n private onClose = (e: any) => {\n let $colWrap = jQuery(e.target).closest(' [class*=\"col-\"]:not(.widget-container)');\n\n // remove colWrap only if there are no more widgets inside\n if (!$colWrap.find(\".widget\").not(e.target).length) {\n $colWrap.remove();\n }\n };\n\n private onFullscreened = (e: any) => {\n jQuery(e.target).find(\"div.widget-body\").addClass(\"scrolling\");\n };\n\n private onRestored = (e: any) => {\n jQuery(e.target).find(\"div.widget-body\").removeClass(\"scrolling\");\n };\n\n constructor(el: ElementRef) {\n this.$el = jQuery(el.nativeElement);\n jQuery.fn.widgster.Constructor.DEFAULTS.bodySelector = \".widget-body\";\n\n /*\n When widget is closed remove its parent if it is .col-*\n */\n jQuery(document)\n .on(\"close.widgster\", this.onClose)\n .on(\"fullscreened.widgster\", this.onFullscreened)\n .on(\"restored.widgster\", this.onRestored);\n }\n\n ngOnInit(): void {\n this.$el.widgster();\n }\n\n ngOnDestroy(): void {\n jQuery(document)\n .off(\"close.widgster\", this.onClose)\n .off(\"fullscreened.widgster\", this.onFullscreened)\n .off(\"restored.widgster\", this.onRestored);\n }\n}\n","import { Directive, Input, Type, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[componentHost]',\r\n standalone: true\r\n})\r\nexport class ComponentHostDirective {\r\n\r\n @Input() componentHost: Type<any>;\r\n @Input() Inputs: Record<string, any> = null;\r\n\r\n // Eventuali accessi esterni... non si sa mai\r\n public CreatedComponent: any;\r\n\r\n constructor(public viewContainerRef: ViewContainerRef) { }\r\n\r\n ngOnInit(){\r\n this.CreatedComponent = this.viewContainerRef.createComponent<any>(this.componentHost);\r\n\r\n if (!this.Inputs)\r\n return;\r\n\r\n for (const key in this.Inputs)\r\n this.CreatedComponent.instance[key] = this.Inputs[key];\r\n }\r\n}","// Angular\nimport { Directive, ElementRef, inject, NgZone, Renderer2 } from \"@angular/core\";\n\n// Core\nimport { AppEmbeddingExtensions } from \"@esfaenza/extensions\";\n\n// Bootrstrap\nimport { ModalDirective } from \"ngx-bootstrap/modal\";\n\n// Rxjs\nimport { Subscription, take } from \"rxjs\";\n\n/** Distanza minima (px) fra l'inizio dell'iframe e il top del dialog quando l'applicativo è embeddato */\nconst EMBEDDED_DIALOG_MIN_TOP = 0;\n\n@Directive({\n selector: '[esModal]',\n exportAs: 'es-modal',\n standalone: true\n})\nexport class EsModalDirective extends ModalDirective {\n\n elementRef: ElementRef;\n rendererRef: Renderer2;\n\n HideSubscription: Subscription;\n\n private emb: AppEmbeddingExtensions = inject(AppEmbeddingExtensions);\n private zone: NgZone = inject(NgZone);\n\n // Vincolo sul top del dialog in modalità embedded (vedi constrainEmbeddedTop)\n private embeddedShownSub: Subscription;\n private embeddedHideSub: Subscription;\n private embeddedResizeObserver: ResizeObserver;\n private embeddedNaturalMarginTop: number = null;\n private embeddedCorrection = 0;\n private embeddedOriginalMarginTop = \"\";\n private embeddedScrollEnabled = false;\n private onEmbeddedWindowResize = () => this.constrainEmbeddedTop();\n\n override ngOnInit(){\n this.elementRef = (this as any)._element;\n this.rendererRef = (this as any)._renderer;\n\n super.ngOnInit();\n }\n\n override ngOnDestroy() {\n this.stopEmbeddedTopConstraint();\n super.ngOnDestroy();\n }\n\n override show(): void {\n const wasShown = this.isShown;\n\n super.show();\n\n if (this.emb.Embedded) {\n this.emb.onEmbeddedDialogShow(this as any);\n if (!wasShown)\n this.startEmbeddedTopConstraint();\n }\n }\n\n override hide(): void {\n super.hide();\n\n if (this.emb.Embedded)\n this.emb.onEmbeddedDialogHide(this as any)\n }\n\n private startEmbeddedTopConstraint() {\n this.stopEmbeddedTopConstraint();\n this.embeddedNaturalMarginTop = null;\n this.embeddedScrollEnabled = false;\n\n // Il dialog è nella posizione definitiva solo a fine transizione di apertura (onShown).\n // Senza animazione ngx-bootstrap emette onShown in modo sincrono dentro super.show(),\n // quindi a questo punto è già passato e si può misurare subito\n if (!this.config.animated)\n this.onEmbeddedDialogShown();\n else\n this.embeddedShownSub = this.onShown.pipe(take(1)).subscribe(() => this.onEmbeddedDialogShown());\n\n this.embeddedHideSub = this.onHide.pipe(take(1)).subscribe(() => this.stopEmbeddedTopConstraint());\n }\n\n private onEmbeddedDialogShown() {\n this.constrainEmbeddedTop(true);\n\n let dialog: HTMLElement = this.elementRef?.nativeElement?.querySelector(\".modal-dialog\");\n if (!dialog)\n return;\n\n // Il contenuto può cambiare dimensione dopo l'apertura (dati caricati in asincrono, max-height del\n // body impostata in differita da AppEmbeddingExtensions.doFixBody, ...): il vincolo va mantenuto\n this.zone.runOutsideAngular(() => {\n if (typeof ResizeObserver !== \"undefined\") {\n this.embeddedResizeObserver = new ResizeObserver(() => this.constrainEmbeddedTop());\n this.embeddedResizeObserver.observe(dialog);\n }\n window.addEventListener(\"resize\", this.onEmbeddedWindowResize);\n });\n }\n\n private stopEmbeddedTopConstraint() {\n this.embeddedShownSub?.unsubscribe();\n this.embeddedHideSub?.unsubscribe();\n this.embeddedResizeObserver?.disconnect();\n this.embeddedResizeObserver = null;\n window.removeEventListener(\"resize\", this.onEmbeddedWindowResize);\n }\n\n /**\n * In modalità embedded vincola il top del dialog all'inizio dell'iframe.\n *\n * Su schermi piccoli l'iframe (alto quanto la finestra padre meno l'header) è più basso del dialog e\n * il posizionamento impostato da AppEmbeddingExtensions.onEmbeddedDialogShow (overflow:hidden sul .modal)\n * poteva lasciarlo tagliato in alto già all'apertura, senza modo di recuperarlo. Il controllo non dipende\n * dalla causa: si misura il top effettivo e, se è sopra l'iframe, si riporta giù il dialog della differenza.\n *\n * @param atOpen true alla prima misura dopo l'apertura: riporta il .modal nella posizione di riposo\n */\n private constrainEmbeddedTop(atOpen: boolean = false) {\n let modal: HTMLElement = this.elementRef?.nativeElement;\n let dialog: HTMLElement = modal?.querySelector(\".modal-dialog\");\n if (!modal || !dialog || !this.isShown)\n return;\n\n if (atOpen) {\n // Il focus fatto da ngx-bootstrap a fine transizione può aver scrollato il .modal per mostrare\n // la parte bassa del dialog: overflow:hidden impedisce lo scroll dell'utente, non quello programmatico\n modal.scrollTop = 0;\n // Eventuale correzione rimasta dall'apertura precedente: si riparte dal posizionamento naturale\n this.setEmbeddedCorrection(dialog, 0);\n this.embeddedNaturalMarginTop = parseFloat(getComputedStyle(dialog).marginTop) || 0;\n }\n\n if (this.embeddedNaturalMarginTop == null)\n return;\n\n // Top che il dialog avrebbe senza correzione e a scroll azzerato: così le misure successive non\n // dipendono da quanto l'utente ha eventualmente scrollato il .modal\n let uncorrectedTop = dialog.getBoundingClientRect().top + modal.scrollTop - this.embeddedCorrection;\n // Arrotondato al pixel intero: evita riscritture continue dello stile per differenze sub-pixel nelle misure\n this.setEmbeddedCorrection(dialog, Math.max(0, Math.ceil(EMBEDDED_DIALOG_MIN_TOP - uncorrectedTop)));\n\n // Con il top vincolato un dialog più alto dell'iframe esce dal fondo, e con l'overflow:hidden del .modal\n // il footer (pulsanti di conferma) sarebbe irraggiungibile: si abilita lo scroll verticale. Una volta\n // attivato resta fino alla prossima apertura, per non far oscillare il layout (la scrollbar riduce la\n // larghezza disponibile e può cambiare l'altezza del dialog)\n if (!this.embeddedScrollEnabled && dialog.getBoundingClientRect().bottom + modal.scrollTop > window.innerHeight) {\n this.rendererRef.setStyle(modal, \"overflow-y\", \"auto\");\n this.embeddedScrollEnabled = true;\n }\n }\n\n /** Sposta in basso il dialog di `correction` px agendo sul margin-top, preservando l'eventuale valore inline originale */\n private setEmbeddedCorrection(dialog: HTMLElement, correction: number) {\n if (correction == this.embeddedCorrection)\n return;\n\n if (this.embeddedCorrection == 0)\n this.embeddedOriginalMarginTop = dialog.style.marginTop;\n\n if (correction > 0)\n this.rendererRef.setStyle(dialog, \"margin-top\", `${this.embeddedNaturalMarginTop + correction}px`);\n else if (this.embeddedOriginalMarginTop)\n this.rendererRef.setStyle(dialog, \"margin-top\", this.embeddedOriginalMarginTop);\n else\n this.rendererRef.removeStyle(dialog, \"margin-top\");\n\n this.embeddedCorrection = correction;\n }\n}\n","// Angular\r\nimport { NgModule } from \"@angular/core\";\r\n\r\n// Direttive\r\nimport { Draggable } from \"./draggable/draggable.directive\";\r\nimport { SlimScroll } from \"./slim-scroll/slim-scroll.directive\";\r\nimport { Widget } from \"./widget/widget.directive\";\r\nimport { esRouterLinkWithHref } from \"./es-routerLink/es-routerLink.directive\";\r\nimport { ComponentHostDirective } from \"./componentHost/componentHost.directive\";\r\nimport { EsModalDirective } from \"./es-modal/es-modal.directive\";\r\n\r\nconst DIRECTIVES = [Draggable, SlimScroll, Widget, esRouterLinkWithHref, ComponentHostDirective, EsModalDirective];\r\n\r\n@NgModule({ imports: [...DIRECTIVES], exports: [...DIRECTIVES] })\r\nexport class DirectivesModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-core-directives.mjs","sources":["../../../projects/core/directives/src/draggable/draggable.directive.ts","../../../projects/core/directives/src/slim-scroll/slim-scroll.directive.ts","../../../projects/core/directives/src/es-routerLink/es-routerLink.directive.ts","../../../projects/core/directives/src/componentHost/componentHost.directive.ts","../../../projects/core/directives/src/es-modal/es-modal.directive.ts","../../../projects/core/directives/src/directives.module.ts","../../../projects/core/directives/src/esfaenza-core-directives.ts"],"sourcesContent":["// Angular\nimport { Directive, ElementRef, Input, NgZone } from \"@angular/core\";\n\n// Configurazioni\nimport { AppEmbeddingExtensions } from \"@esfaenza/extensions\";\n\n/**\n * Rende trascinabile il primo figlio dell'elemento (tipicamente la `.modal-content` dentro una\n * `.modal-dialog`), afferrandolo dall'handle indicato (default `.modal-header`).\n *\n * Riproduce il comportamento che aveva con jQuery UI `draggable`:\n * - lo spostamento si applica con `left`/`top` su un elemento `position: relative`, quindi si somma\n * fra un trascinamento e l'altro;\n * - non parte se si preme su campi, pulsanti o select (il `cancel` di default di jQuery UI);\n * - solo con il tasto principale del mouse (jQuery UI non gestiva il touch);\n * - quando l'applicazione e' incorporata (`AppEmbeddingExtensions.Embedded`) il riquadro resta\n * dentro la pagina, come faceva il vecchio `div_containment`.\n *\n * Tutto gira fuori dalla zona di Angular: i movimenti del mouse non devono scatenare change detection.\n */\n@Directive({\n selector: \"[emaDraggable]\",\n standalone: true\n})\nexport class Draggable {\n @Input('emaDraggable') handlerSelector: string;\n\n private static readonly CANCEL = \"input, textarea, button, select, option\";\n\n private target: HTMLElement | null = null;\n private startX = 0;\n private startY = 0;\n private startLeft = 0;\n private startTop = 0;\n private bounds: { minDx: number, maxDx: number, minDy: number, maxDy: number } | null = null;\n private bodyUserSelect = \"\";\n\n constructor(private _elementRef: ElementRef, private zone: NgZone, private emb: AppEmbeddingExtensions) { }\n\n ngOnInit() {\n this.zone.runOutsideAngular(() => {\n (this._elementRef.nativeElement as HTMLElement).addEventListener(\"mousedown\", this.onDown);\n });\n }\n\n ngOnDestroy() {\n (this._elementRef.nativeElement as HTMLElement).removeEventListener(\"mousedown\", this.onDown);\n this.stopListening();\n }\n\n private onDown = (e: MouseEvent) => {\n if (e.button !== 0)\n return;\n\n let host = this._elementRef.nativeElement as HTMLElement;\n let target = host.firstElementChild as HTMLElement;\n let source = e.target as HTMLElement;\n let handle = source?.closest(this.handlerSelector || \".modal-header\");\n\n if (!target || !handle || !target.contains(handle) || source.closest(Draggable.CANCEL))\n return;\n\n // Come jQuery UI: niente selezione del testo mentre si trascina\n e.preventDefault();\n\n if (getComputedStyle(target).position === \"static\")\n target.style.position = \"relative\";\n\n this.target = target;\n this.startX = e.clientX;\n this.startY = e.clientY;\n this.startLeft = parseFloat(target.style.left) || 0;\n this.startTop = parseFloat(target.style.top) || 0;\n this.bounds = this.emb.Embedded ? this.computeBounds(target) : null;\n\n this.bodyUserSelect = document.body.style.userSelect;\n document.body.style.userSelect = \"none\";\n\n document.addEventListener(\"mousemove\", this.onMove);\n document.addEventListener(\"mouseup\", this.onUp);\n };\n\n private onMove = (e: MouseEvent) => {\n if (!this.target)\n return;\n\n let dx = e.clientX - this.startX;\n let dy = e.clientY - this.startY;\n\n if (this.bounds) {\n dx = Math.min(Math.max(dx, this.bounds.minDx), this.bounds.maxDx);\n dy = Math.min(Math.max(dy, this.bounds.minDy), this.bounds.maxDy);\n }\n\n this.target.style.left = (this.startLeft + dx) + \"px\";\n this.target.style.top = (this.startTop + dy) + \"px\";\n };\n\n private onUp = () => this.stopListening();\n\n private stopListening() {\n document.removeEventListener(\"mousemove\", this.onMove);\n document.removeEventListener(\"mouseup\", this.onUp);\n\n if (this.target) {\n document.body.style.userSelect = this.bodyUserSelect;\n this.target = null;\n }\n }\n\n /** Di quanto si puo' spostare il riquadro restando dentro la pagina (in px, da dove si trova ora) */\n private computeBounds(el: HTMLElement) {\n let rect = el.getBoundingClientRect();\n let page = document.documentElement;\n let left = rect.left + window.scrollX, top = rect.top + window.scrollY;\n\n return {\n minDx: -left,\n maxDx: Math.max(page.scrollWidth, page.clientWidth) - (left + rect.width),\n minDy: -top,\n maxDy: Math.max(page.scrollHeight, page.clientHeight) - (top + rect.height)\n };\n }\n}\n","// Angular\nimport { Directive, ElementRef, Input } from \"@angular/core\";\n\n/**\n * Area scorrevole ad altezza fissa con una barra sottile.\n *\n * Prima usava il plugin jQuery slimScroll, che avvolgeva l'elemento in un contenitore e disegnava\n * una barra finta. Ora lo scorrimento e' quello nativo: la direttiva imposta altezza e overflow,\n * e la classe `es-slim-scroll` da' alla barra l'aspetto di prima (4px, visibile al passaggio del\n * mouse; vedi `_libs-override.scss`).\n *\n * Delle opzioni di slimScroll l'unica usata nella Suite e' `height` (numero in px o stringa CSS).\n */\n@Directive({\n selector: \"[slim-scroll]\",\n standalone: true,\n host: { class: \"es-slim-scroll\" }\n})\nexport class SlimScroll {\n @Input() public slimScrollOptions: { height?: number | string; [key: string]: any };\n\n constructor(private _elementRef: ElementRef) { }\n\n ngOnChanges() {\n let style = (this._elementRef.nativeElement as HTMLElement).style;\n let height = this.slimScrollOptions?.height;\n\n style.overflowX = \"hidden\";\n style.overflowY = \"auto\";\n style.height = height == null ? \"\" : typeof height === \"number\" ? height + \"px\" : height;\n }\n}\n","// Angular\r\nimport { LocationStrategy } from \"@angular/common\";\r\nimport { Attribute, Directive, ElementRef, HostListener, Input, Renderer2 } from \"@angular/core\";\r\nimport { ActivatedRoute, Router, RouterLinkWithHref, UrlTree } from \"@angular/router\";\r\nimport { EMBEDDED_ROUTE, EnvOptions, ROUTE } from \"@esfaenza/core/domain\";\r\nimport { AppEmbeddingExtensions } from \"@esfaenza/extensions\";\r\nimport { take } from \"rxjs\";\r\n\r\ndeclare var myconfig: EnvOptions;\r\n\r\n@Directive({\r\n selector: 'a[esRouterLink],area[esRouterLink]',\r\n standalone: true\r\n})\r\nexport class esRouterLinkWithHref extends RouterLinkWithHref {\r\n\r\n private EmbeddingSource: string;\r\n\r\n constructor(\r\n private emb: AppEmbeddingExtensions,\r\n router: Router, route: ActivatedRoute,\r\n @Attribute('tabindex') tabIndexAttribute: string | null | undefined,\r\n renderer: Renderer2, el: ElementRef,\r\n locationStrategy?: LocationStrategy) {\r\n\r\n super(router, route, tabIndexAttribute, renderer, el, locationStrategy)\r\n }\r\n\r\n @Input()\r\n set esRouterLink(commandsOrUrlTree: readonly any[] | string | UrlTree | null | undefined) {\r\n // UrlTree non è supportato because fuck you\r\n this.emb.EmbeddingSource.pipe(take(1)).subscribe(s => {\r\n this.EmbeddingSource = s;\r\n\r\n if(this.emb.Embedded && !s)\r\n console.error(\"Link creato in contesto di embedding ma senza embedding source!!\");\r\n\r\n let BasePath = \"/\" + (this.emb.Embedded ? EMBEDDED_ROUTE + (!!s? \"/\" + s : \"\") : ROUTE);\r\n\r\n if (commandsOrUrlTree != null) {\r\n (this as any).routerLinkInput = Array.isArray(commandsOrUrlTree) ? commandsOrUrlTree : [commandsOrUrlTree];\r\n let route = ((this as any).routerLinkInput[0] as string);\r\n if (!route.startsWith(\"/\" + EMBEDDED_ROUTE) && !route.startsWith(\"/\" + ROUTE))\r\n (this as any).routerLinkInput[0] = BasePath + (this as any).routerLinkInput[0];\r\n\r\n (this as any).setTabIndexIfNotOnNativeEl('0');\r\n } else {\r\n (this as any).routerLinkInput = null;\r\n (this as any).setTabIndexIfNotOnNativeEl(null);\r\n }\r\n });\r\n }\r\n\r\n @HostListener('click', ['$event.button', '$event.ctrlKey', '$event.shiftKey', '$event.altKey', '$event.metaKey'])\r\n override onClick(button: number, ctrlKey: boolean, shiftKey: boolean, altKey: boolean, metaKey: boolean): boolean {\r\n \r\n if (this.emb.Embedded) {\r\n if(this.urlTree){\r\n let url = this.urlTree.toString().replace(EMBEDDED_ROUTE + (!!this.EmbeddingSource? \"/\" + this.EmbeddingSource : \"\"), ROUTE + \"/embed/\" + myconfig.AppData.ModuleId);\r\n this.emb.MainWindow.postMessage({ type: \"navigate\", url, newTab: ctrlKey, replaceState: !ctrlKey, current: (this as any as { router: Router }).router.url }, \"*\");\r\n }\r\n\r\n if (!ctrlKey)\r\n return super.onClick(button, ctrlKey, shiftKey, altKey, metaKey);\r\n else\r\n return false;\r\n }\r\n else\r\n return super.onClick(button, ctrlKey, shiftKey, altKey, metaKey);\r\n }\r\n}","import { Directive, Input, Type, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[componentHost]',\r\n standalone: true\r\n})\r\nexport class ComponentHostDirective {\r\n\r\n @Input() componentHost: Type<any>;\r\n @Input() Inputs: Record<string, any> = null;\r\n\r\n // Eventuali accessi esterni... non si sa mai\r\n public CreatedComponent: any;\r\n\r\n constructor(public viewContainerRef: ViewContainerRef) { }\r\n\r\n ngOnInit(){\r\n this.CreatedComponent = this.viewContainerRef.createComponent<any>(this.componentHost);\r\n\r\n if (!this.Inputs)\r\n return;\r\n\r\n for (const key in this.Inputs)\r\n this.CreatedComponent.instance[key] = this.Inputs[key];\r\n }\r\n}","// Angular\nimport { Directive, ElementRef, inject, NgZone, Renderer2 } from \"@angular/core\";\n\n// Core\nimport { AppEmbeddingExtensions } from \"@esfaenza/extensions\";\n\n// Bootrstrap\nimport { ModalDirective } from \"ngx-bootstrap/modal\";\n\n// Rxjs\nimport { Subscription, take } from \"rxjs\";\n\n/** Distanza minima (px) fra l'inizio dell'iframe e il top del dialog quando l'applicativo è embeddato */\nconst EMBEDDED_DIALOG_MIN_TOP = 0;\n\n@Directive({\n selector: '[esModal]',\n exportAs: 'es-modal',\n standalone: true\n})\nexport class EsModalDirective extends ModalDirective {\n\n elementRef: ElementRef;\n rendererRef: Renderer2;\n\n HideSubscription: Subscription;\n\n private emb: AppEmbeddingExtensions = inject(AppEmbeddingExtensions);\n private zone: NgZone = inject(NgZone);\n\n // Vincolo sul top del dialog in modalità embedded (vedi constrainEmbeddedTop)\n private embeddedShownSub: Subscription;\n private embeddedHideSub: Subscription;\n private embeddedResizeObserver: ResizeObserver;\n private embeddedNaturalMarginTop: number = null;\n private embeddedCorrection = 0;\n private embeddedOriginalMarginTop = \"\";\n private embeddedScrollEnabled = false;\n private onEmbeddedWindowResize = () => this.constrainEmbeddedTop();\n\n override ngOnInit(){\n this.elementRef = (this as any)._element;\n this.rendererRef = (this as any)._renderer;\n\n super.ngOnInit();\n }\n\n override ngOnDestroy() {\n this.stopEmbeddedTopConstraint();\n super.ngOnDestroy();\n }\n\n override show(): void {\n const wasShown = this.isShown;\n\n super.show();\n\n if (this.emb.Embedded) {\n this.emb.onEmbeddedDialogShow(this as any);\n if (!wasShown)\n this.startEmbeddedTopConstraint();\n }\n }\n\n override hide(): void {\n super.hide();\n\n if (this.emb.Embedded)\n this.emb.onEmbeddedDialogHide(this as any)\n }\n\n private startEmbeddedTopConstraint() {\n this.stopEmbeddedTopConstraint();\n this.embeddedNaturalMarginTop = null;\n this.embeddedScrollEnabled = false;\n\n // Il dialog è nella posizione definitiva solo a fine transizione di apertura (onShown).\n // Senza animazione ngx-bootstrap emette onShown in modo sincrono dentro super.show(),\n // quindi a questo punto è già passato e si può misurare subito\n if (!this.config.animated)\n this.onEmbeddedDialogShown();\n else\n this.embeddedShownSub = this.onShown.pipe(take(1)).subscribe(() => this.onEmbeddedDialogShown());\n\n this.embeddedHideSub = this.onHide.pipe(take(1)).subscribe(() => this.stopEmbeddedTopConstraint());\n }\n\n private onEmbeddedDialogShown() {\n this.constrainEmbeddedTop(true);\n\n let dialog: HTMLElement = this.elementRef?.nativeElement?.querySelector(\".modal-dialog\");\n if (!dialog)\n return;\n\n // Il contenuto può cambiare dimensione dopo l'apertura (dati caricati in asincrono, max-height del\n // body impostata in differita da AppEmbeddingExtensions.doFixBody, ...): il vincolo va mantenuto\n this.zone.runOutsideAngular(() => {\n if (typeof ResizeObserver !== \"undefined\") {\n this.embeddedResizeObserver = new ResizeObserver(() => this.constrainEmbeddedTop());\n this.embeddedResizeObserver.observe(dialog);\n }\n window.addEventListener(\"resize\", this.onEmbeddedWindowResize);\n });\n }\n\n private stopEmbeddedTopConstraint() {\n this.embeddedShownSub?.unsubscribe();\n this.embeddedHideSub?.unsubscribe();\n this.embeddedResizeObserver?.disconnect();\n this.embeddedResizeObserver = null;\n window.removeEventListener(\"resize\", this.onEmbeddedWindowResize);\n }\n\n /**\n * In modalità embedded vincola il top del dialog all'inizio dell'iframe.\n *\n * Su schermi piccoli l'iframe (alto quanto la finestra padre meno l'header) è più basso del dialog e\n * il posizionamento impostato da AppEmbeddingExtensions.onEmbeddedDialogShow (overflow:hidden sul .modal)\n * poteva lasciarlo tagliato in alto già all'apertura, senza modo di recuperarlo. Il controllo non dipende\n * dalla causa: si misura il top effettivo e, se è sopra l'iframe, si riporta giù il dialog della differenza.\n *\n * @param atOpen true alla prima misura dopo l'apertura: riporta il .modal nella posizione di riposo\n */\n private constrainEmbeddedTop(atOpen: boolean = false) {\n let modal: HTMLElement = this.elementRef?.nativeElement;\n let dialog: HTMLElement = modal?.querySelector(\".modal-dialog\");\n if (!modal || !dialog || !this.isShown)\n return;\n\n if (atOpen) {\n // Il focus fatto da ngx-bootstrap a fine transizione può aver scrollato il .modal per mostrare\n // la parte bassa del dialog: overflow:hidden impedisce lo scroll dell'utente, non quello programmatico\n modal.scrollTop = 0;\n // Eventuale correzione rimasta dall'apertura precedente: si riparte dal posizionamento naturale\n this.setEmbeddedCorrection(dialog, 0);\n this.embeddedNaturalMarginTop = parseFloat(getComputedStyle(dialog).marginTop) || 0;\n }\n\n if (this.embeddedNaturalMarginTop == null)\n return;\n\n // Top che il dialog avrebbe senza correzione e a scroll azzerato: così le misure successive non\n // dipendono da quanto l'utente ha eventualmente scrollato il .modal\n let uncorrectedTop = dialog.getBoundingClientRect().top + modal.scrollTop - this.embeddedCorrection;\n // Arrotondato al pixel intero: evita riscritture continue dello stile per differenze sub-pixel nelle misure\n this.setEmbeddedCorrection(dialog, Math.max(0, Math.ceil(EMBEDDED_DIALOG_MIN_TOP - uncorrectedTop)));\n\n // Con il top vincolato un dialog più alto dell'iframe esce dal fondo, e con l'overflow:hidden del .modal\n // il footer (pulsanti di conferma) sarebbe irraggiungibile: si abilita lo scroll verticale. Una volta\n // attivato resta fino alla prossima apertura, per non far oscillare il layout (la scrollbar riduce la\n // larghezza disponibile e può cambiare l'altezza del dialog)\n if (!this.embeddedScrollEnabled && dialog.getBoundingClientRect().bottom + modal.scrollTop > window.innerHeight) {\n this.rendererRef.setStyle(modal, \"overflow-y\", \"auto\");\n this.embeddedScrollEnabled = true;\n }\n }\n\n /** Sposta in basso il dialog di `correction` px agendo sul margin-top, preservando l'eventuale valore inline originale */\n private setEmbeddedCorrection(dialog: HTMLElement, correction: number) {\n if (correction == this.embeddedCorrection)\n return;\n\n if (this.embeddedCorrection == 0)\n this.embeddedOriginalMarginTop = dialog.style.marginTop;\n\n if (correction > 0)\n this.rendererRef.setStyle(dialog, \"margin-top\", `${this.embeddedNaturalMarginTop + correction}px`);\n else if (this.embeddedOriginalMarginTop)\n this.rendererRef.setStyle(dialog, \"margin-top\", this.embeddedOriginalMarginTop);\n else\n this.rendererRef.removeStyle(dialog, \"margin-top\");\n\n this.embeddedCorrection = correction;\n }\n}\n","// Angular\nimport { NgModule } from \"@angular/core\";\n\n// Direttive\nimport { Draggable } from \"./draggable/draggable.directive\";\nimport { SlimScroll } from \"./slim-scroll/slim-scroll.directive\";\nimport { esRouterLinkWithHref } from \"./es-routerLink/es-routerLink.directive\";\nimport { ComponentHostDirective } from \"./componentHost/componentHost.directive\";\nimport { EsModalDirective } from \"./es-modal/es-modal.directive\";\n\nconst DIRECTIVES = [Draggable, SlimScroll, esRouterLinkWithHref, ComponentHostDirective, EsModalDirective];\n\n@NgModule({ imports: [...DIRECTIVES], exports: [...DIRECTIVES] })\nexport class DirectivesModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}