@seniorsistemas/angular-components 17.27.1-feature-sds-110-174b0744 → 17.27.1-feature-sds-110-660dd566

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 (89) hide show
  1. package/button/lib/button/button.component.d.ts +3 -3
  2. package/button/lib/button/button.module.d.ts +1 -6
  3. package/confirm-dialog/README.md +226 -0
  4. package/confirm-dialog/index.d.ts +5 -0
  5. package/confirm-dialog/lib/confirm-dialog.model.d.ts +8 -0
  6. package/confirm-dialog/lib/confirm-dialog.service.d.ts +8 -0
  7. package/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.d.ts +7 -0
  8. package/confirm-dialog/package.json +3 -0
  9. package/confirm-dialog/public-api.d.ts +2 -0
  10. package/dialog/index.d.ts +5 -0
  11. package/dialog/lib/src/dialog/dialog.component.d.ts +29 -0
  12. package/dialog/lib/src/dialog/models/active-dialog.d.ts +11 -0
  13. package/dialog/lib/src/dialog/models/dialog-models.d.ts +18 -0
  14. package/dialog/lib/src/dialog/services/dialog.service.d.ts +24 -0
  15. package/dialog/lib/src/dialog/services/internal-dialog.service.d.ts +10 -0
  16. package/dialog/package.json +3 -0
  17. package/dialog/public-api.d.ts +4 -0
  18. package/dynamic-form/lib/dynamic-form/components/lookup/lookup.component.d.ts +2 -2
  19. package/dynamic-form/lib/dynamic-form/dynamic-form.module.d.ts +2 -2
  20. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +1 -1
  21. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  22. package/fesm2022/seniorsistemas-angular-components-button.mjs +16 -25
  23. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  24. package/fesm2022/seniorsistemas-angular-components-chips.mjs +1 -1
  25. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  26. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +54 -0
  27. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -0
  28. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +221 -0
  29. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -0
  30. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +83 -78
  31. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  32. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +11 -7
  33. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  34. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +1 -1
  35. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  36. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +15 -10
  37. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  38. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +1 -1
  39. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
  40. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +1 -1
  41. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  42. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +1 -0
  43. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
  44. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +1 -1
  45. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  46. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +3 -3
  47. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  48. package/fesm2022/seniorsistemas-angular-components-select.mjs +2 -2
  49. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  50. package/fesm2022/seniorsistemas-angular-components-shared.mjs +1 -1
  51. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  52. package/fesm2022/seniorsistemas-angular-components-slider.mjs +1 -1
  53. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  54. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +1 -1
  55. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
  56. package/fesm2022/seniorsistemas-angular-components-steps.mjs +1 -1
  57. package/fesm2022/seniorsistemas-angular-components-steps.mjs.map +1 -1
  58. package/fesm2022/seniorsistemas-angular-components-structure.mjs +5 -15
  59. package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
  60. package/fesm2022/seniorsistemas-angular-components-table.mjs +1 -1
  61. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  62. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +91 -0
  63. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -0
  64. package/fesm2022/seniorsistemas-angular-components-template.mjs +8 -11
  65. package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
  66. package/fesm2022/seniorsistemas-angular-components-text-area-ia.mjs +22 -15
  67. package/fesm2022/seniorsistemas-angular-components-text-area-ia.mjs.map +1 -1
  68. package/fesm2022/seniorsistemas-angular-components-tile.mjs +1 -1
  69. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  70. package/fesm2022/seniorsistemas-angular-components-timeline.mjs +2 -2
  71. package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
  72. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +16 -6
  73. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  74. package/fieldset/lib/fieldset/fieldset.component.d.ts +7 -5
  75. package/image-cropper/lib/image-cropper/image-cropper.component.d.ts +2 -0
  76. package/image-cropper/lib/image-cropper/image-cropper.module.d.ts +6 -5
  77. package/package.json +23 -2
  78. package/structure/lib/structure/header.component.d.ts +0 -2
  79. package/tabs/index.d.ts +5 -0
  80. package/tabs/lib/tab-item/tab-item.component.d.ts +18 -0
  81. package/tabs/lib/tabs/tabs.component.d.ts +16 -0
  82. package/tabs/package.json +3 -0
  83. package/tabs/public-api.d.ts +2 -0
  84. package/tailwind.css +135 -2
  85. package/template/lib/template/template.directive.d.ts +2 -3
  86. package/template/lib/template/template.module.d.ts +3 -3
  87. package/text-area-ia/lib/text-area-ia/text-area-ia.module.d.ts +7 -6
  88. package/tooltip/lib/tooltip/tooltip.directive.d.ts +4 -2
  89. package/tooltip/lib/tooltip/tooltip.module.d.ts +3 -3
@@ -0,0 +1,221 @@
1
+ import { NgTemplateOutlet, NgClass } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, Injector, Injectable, input, model, ViewContainerRef, viewChild, contentChildren, computed, Component } from '@angular/core';
4
+ import { toObservable } from '@angular/core/rxjs-interop';
5
+ import { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';
6
+ import { TemplateDirective } from '@seniorsistemas/angular-components/template';
7
+ import { Subject, take, takeUntil } from 'rxjs';
8
+ import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';
9
+ import { Overlay } from '@angular/cdk/overlay';
10
+
11
+ class ActiveDialog {
12
+ dialogSize = 'md';
13
+ escapeOnEsc = true;
14
+ _close = new Subject();
15
+ _dismiss = new Subject();
16
+ close(result) {
17
+ this._close.next(result);
18
+ this._close.complete();
19
+ }
20
+ dismiss(reason) {
21
+ this._dismiss.next(reason);
22
+ this._dismiss.complete();
23
+ }
24
+ onClose$ = this._close.asObservable();
25
+ onDismiss$ = this._dismiss.asObservable();
26
+ }
27
+
28
+ class DialogService {
29
+ activeDialogInstances = [];
30
+ overlay = inject(Overlay);
31
+ injector = inject(Injector);
32
+ constructor() {
33
+ this.checkEscapeEvent();
34
+ }
35
+ open(componentRef, options) {
36
+ const createdComponent = this.createComponent(componentRef, options);
37
+ return {
38
+ componentInstance: createdComponent.componentInstance,
39
+ closed: createdComponent.activeDialog.onClose$,
40
+ dismissed: createdComponent.activeDialog.onDismiss$
41
+ };
42
+ }
43
+ createComponent(componentRef, dialogOptions) {
44
+ const injector = this.dialogInjector;
45
+ const overlayRef = this.getOverlayRef();
46
+ const portal = new ComponentPortal(componentRef, null, injector);
47
+ const _componentRef = overlayRef.attach(portal);
48
+ const activeDialog = this.getActiveDialog(injector);
49
+ this.activeDialogInstances.push(activeDialog);
50
+ this.applyDialogOptionsIntoActiveDialog(activeDialog, dialogOptions);
51
+ this.handleDialogDestroyEvents(injector, overlayRef, dialogOptions);
52
+ return {
53
+ activeDialog,
54
+ componentInstance: _componentRef.instance
55
+ };
56
+ }
57
+ handleDialogDestroyEvents(injector, overlayRef, dialogOptions) {
58
+ const destroyClickOutside = dialogOptions?.destroyClickOutside ?? true;
59
+ const activeDialog = this.getActiveDialog(injector);
60
+ const destroyDialog = () => {
61
+ overlayRef.dispose();
62
+ const index = this.activeDialogInstances.indexOf(activeDialog);
63
+ this.activeDialogInstances.splice(index, 1);
64
+ };
65
+ if (destroyClickOutside) {
66
+ overlayRef.backdropClick().pipe(take(1)).subscribe(() => {
67
+ activeDialog.dismiss();
68
+ });
69
+ }
70
+ activeDialog.onClose$.pipe(take(1)).subscribe(destroyDialog);
71
+ activeDialog.onDismiss$.pipe(take(1)).subscribe(destroyDialog);
72
+ }
73
+ applyDialogOptionsIntoActiveDialog(activeDialog, dialogOptions) {
74
+ activeDialog.dialogSize = dialogOptions?.size ?? 'md';
75
+ activeDialog.escapeOnEsc = dialogOptions?.escapeOnEsc ?? true;
76
+ }
77
+ getOverlayRef() {
78
+ const panelClass = ['h-min'];
79
+ const overlayRef = this.overlay.create({
80
+ hasBackdrop: true,
81
+ positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),
82
+ panelClass
83
+ });
84
+ return overlayRef;
85
+ }
86
+ getActiveDialog(injector) {
87
+ return injector.get(ActiveDialog);
88
+ }
89
+ get dialogInjector() {
90
+ const injector = Injector.create({
91
+ providers: [{ provide: ActiveDialog, useClass: ActiveDialog }],
92
+ parent: this.injector
93
+ });
94
+ return injector;
95
+ }
96
+ checkEscapeEvent() {
97
+ document.body.addEventListener('keydown', (keyboardEvent) => {
98
+ const isEscapePressed = keyboardEvent.key === 'Escape';
99
+ if (!isEscapePressed) {
100
+ return;
101
+ }
102
+ const lastActiveModal = this.activeDialogInstances.at(this.activeDialogInstances.length - 1);
103
+ if (lastActiveModal && lastActiveModal.escapeOnEsc) {
104
+ lastActiveModal.dismiss();
105
+ }
106
+ });
107
+ }
108
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
109
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogService, providedIn: 'root' });
110
+ }
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogService, decorators: [{
112
+ type: Injectable,
113
+ args: [{
114
+ providedIn: 'root'
115
+ }]
116
+ }], ctorParameters: () => [] });
117
+
118
+ class InternalDialogService extends DialogService {
119
+ constructor() {
120
+ super();
121
+ }
122
+ openByTemplate(templateRef, viewContainerRef, dialogOptions) {
123
+ const injector = this.dialogInjector;
124
+ const overlayRef = this.getOverlayRef();
125
+ const portal = new TemplatePortal(templateRef, viewContainerRef);
126
+ overlayRef.attach(portal);
127
+ const activeDialog = this.getActiveDialog(injector);
128
+ this.applyDialogOptionsIntoActiveDialog(activeDialog, dialogOptions);
129
+ this.activeDialogInstances.push(activeDialog);
130
+ this.handleDialogDestroyEvents(injector, overlayRef, dialogOptions);
131
+ return activeDialog;
132
+ }
133
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InternalDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
134
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InternalDialogService, providedIn: 'root' });
135
+ }
136
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InternalDialogService, decorators: [{
137
+ type: Injectable,
138
+ args: [{
139
+ providedIn: 'root'
140
+ }]
141
+ }], ctorParameters: () => [] });
142
+
143
+ class DialogComponent {
144
+ header = input();
145
+ visible = model(undefined);
146
+ activeDialog = inject(ActiveDialog, { optional: true });
147
+ size = input('md');
148
+ contentClassName = input('');
149
+ escapeOnEsc = input(true);
150
+ destroyClickOutside = input(true);
151
+ viewContainerRef = inject(ViewContainerRef);
152
+ dialogService = inject(InternalDialogService);
153
+ template = viewChild('dialogTemplate');
154
+ templateDiretives = contentChildren(TemplateDirective);
155
+ onDestroy$ = new Subject();
156
+ headerTemplate = computed(() => {
157
+ return this.getTemplate('header');
158
+ });
159
+ bodyTemplate = computed(() => {
160
+ return this.getTemplate('body');
161
+ });
162
+ footerTemplate = computed(() => {
163
+ return this.getTemplate('footer');
164
+ });
165
+ constructor() {
166
+ toObservable(this.visible).pipe(takeUntil(this.onDestroy$)).subscribe(() => {
167
+ const visible = this.visible();
168
+ if (visible === true) {
169
+ this.openDialog();
170
+ }
171
+ else if (visible === false) {
172
+ this.activeDialog?.dismiss();
173
+ }
174
+ });
175
+ }
176
+ ngAfterViewInit() {
177
+ if (!this.header() && !this.headerTemplate()) {
178
+ console.error('Header is required. provide header via input or sTemplate="header"');
179
+ }
180
+ if (this.activeDialog && this.visible() !== undefined) {
181
+ throw new Error('set visible with external component is invalid, the "visible" input is only use when s-dialog is in component html.');
182
+ }
183
+ }
184
+ ngOnDestroy() {
185
+ this.onDestroy$.next();
186
+ this.onDestroy$.complete();
187
+ }
188
+ onDismiss() {
189
+ this.activeDialog?.dismiss();
190
+ }
191
+ getTemplate(templateType) {
192
+ return this.templateDiretives().find((template) => template.type === templateType)?.template;
193
+ }
194
+ openDialog() {
195
+ if (this.activeDialog) {
196
+ throw new Error('set visible with external component is invalid, the "visible" input is only use when s-dialog is in component html.');
197
+ }
198
+ this.activeDialog = this.dialogService.openByTemplate(this.template(), this.viewContainerRef, { size: this.size(), destroyClickOutside: this.destroyClickOutside(), escapeOnEsc: this.escapeOnEsc() });
199
+ this.activeDialog.onClose$.pipe(take(1)).subscribe(() => {
200
+ this.activeDialog = null;
201
+ this.visible.set(false);
202
+ });
203
+ this.activeDialog.onDismiss$.pipe(take(1)).subscribe(() => {
204
+ this.activeDialog = null;
205
+ this.visible.set(false);
206
+ });
207
+ }
208
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
209
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DialogComponent, isStandalone: true, selector: "s-dialog", inputs: { header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, contentClassName: { classPropertyName: "contentClassName", publicName: "contentClassName", isSignal: true, isRequired: false, transformFunction: null }, escapeOnEsc: { classPropertyName: "escapeOnEsc", publicName: "escapeOnEsc", isSignal: true, isRequired: false, transformFunction: null }, destroyClickOutside: { classPropertyName: "destroyClickOutside", publicName: "destroyClickOutside", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visible: "visibleChange" }, queries: [{ propertyName: "templateDiretives", predicate: TemplateDirective, isSignal: true }], viewQueries: [{ propertyName: "template", first: true, predicate: ["dialogTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "@let activeDialogContext = { activeDialog: activeDialog };\n<ng-template #dialogTemplate>\n @if (activeDialog) {\n @let isSm = activeDialog.dialogSize === 'sm';\n @let isMd = activeDialog.dialogSize === 'md';\n @let isLg = activeDialog.dialogSize === 'lg';\n @let isXl = activeDialog.dialogSize === 'xl';\n @let isFullscreen = activeDialog.dialogSize === 'fullscreen';\n <div\n [class]=\"contentClassName()\"\n class=\"flex h-min max-h-screen w-screen flex-col bg-grayscale-0 shadow-md max-sm:h-screen max-sm:w-screen\"\n [ngClass]=\"{\n 'max-w-[300px]': isSm,\n 'max-w-[500px]': isMd,\n 'max-w-[800px]': isLg,\n 'max-w-[1140px]': isXl,\n 'h-screen': isFullscreen,\n }\"\n >\n <header class=\"flex flex-wrap justify-between gap-3 p-4 pb-0\">\n @let _header = headerTemplate();\n @if (_header) {\n <ng-container *ngTemplateOutlet=\"_header; context: activeDialogContext\"></ng-container>\n } @else {\n <h3>{{ header() }}</h3>\n }\n <div\n class=\"flex cursor-pointer items-center justify-center\"\n (sInteractiveContent)=\"onDismiss()\"\n >\n <i class=\"fas fa-times\"></i>\n </div>\n <hr class=\"h-[1px] w-full bg-grayscale-20\" />\n </header>\n\n <main class=\"flex-1 p-4\">\n @let _bodyTemplate = bodyTemplate();\n @if (_bodyTemplate) {\n <ng-container *ngTemplateOutlet=\"_bodyTemplate; context: activeDialogContext\"></ng-container>\n } @else {\n <ng-content></ng-content>\n }\n </main>\n\n @let footer = footerTemplate();\n @if (footer) {\n <footer class=\"flex flex-wrap gap-3 p-4 pt-0\">\n <hr class=\"h-[1px] w-full bg-grayscale-20\" />\n <div class=\"w-full\">\n <ng-container *ngTemplateOutlet=\"footer; context: activeDialogContext\"></ng-container>\n </div>\n </footer>\n }\n </div>\n }\n</ng-template>\n\n@if (visible() === undefined) {\n <ng-container *ngTemplateOutlet=\"dialogTemplate\"></ng-container>\n}\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: InteractiveContentDirective, selector: "[sInteractiveContent]", inputs: ["focusable", "disabled"], outputs: ["sInteractiveContent"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
210
+ }
211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogComponent, decorators: [{
212
+ type: Component,
213
+ args: [{ selector: 's-dialog', standalone: true, imports: [NgTemplateOutlet, InteractiveContentDirective, NgClass], template: "@let activeDialogContext = { activeDialog: activeDialog };\n<ng-template #dialogTemplate>\n @if (activeDialog) {\n @let isSm = activeDialog.dialogSize === 'sm';\n @let isMd = activeDialog.dialogSize === 'md';\n @let isLg = activeDialog.dialogSize === 'lg';\n @let isXl = activeDialog.dialogSize === 'xl';\n @let isFullscreen = activeDialog.dialogSize === 'fullscreen';\n <div\n [class]=\"contentClassName()\"\n class=\"flex h-min max-h-screen w-screen flex-col bg-grayscale-0 shadow-md max-sm:h-screen max-sm:w-screen\"\n [ngClass]=\"{\n 'max-w-[300px]': isSm,\n 'max-w-[500px]': isMd,\n 'max-w-[800px]': isLg,\n 'max-w-[1140px]': isXl,\n 'h-screen': isFullscreen,\n }\"\n >\n <header class=\"flex flex-wrap justify-between gap-3 p-4 pb-0\">\n @let _header = headerTemplate();\n @if (_header) {\n <ng-container *ngTemplateOutlet=\"_header; context: activeDialogContext\"></ng-container>\n } @else {\n <h3>{{ header() }}</h3>\n }\n <div\n class=\"flex cursor-pointer items-center justify-center\"\n (sInteractiveContent)=\"onDismiss()\"\n >\n <i class=\"fas fa-times\"></i>\n </div>\n <hr class=\"h-[1px] w-full bg-grayscale-20\" />\n </header>\n\n <main class=\"flex-1 p-4\">\n @let _bodyTemplate = bodyTemplate();\n @if (_bodyTemplate) {\n <ng-container *ngTemplateOutlet=\"_bodyTemplate; context: activeDialogContext\"></ng-container>\n } @else {\n <ng-content></ng-content>\n }\n </main>\n\n @let footer = footerTemplate();\n @if (footer) {\n <footer class=\"flex flex-wrap gap-3 p-4 pt-0\">\n <hr class=\"h-[1px] w-full bg-grayscale-20\" />\n <div class=\"w-full\">\n <ng-container *ngTemplateOutlet=\"footer; context: activeDialogContext\"></ng-container>\n </div>\n </footer>\n }\n </div>\n }\n</ng-template>\n\n@if (visible() === undefined) {\n <ng-container *ngTemplateOutlet=\"dialogTemplate\"></ng-container>\n}\n" }]
214
+ }], ctorParameters: () => [] });
215
+
216
+ /**
217
+ * Generated bundle index. Do not edit.
218
+ */
219
+
220
+ export { ActiveDialog, DialogComponent, DialogService };
221
+ //# sourceMappingURL=seniorsistemas-angular-components-dialog.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seniorsistemas-angular-components-dialog.mjs","sources":["../../projects/angular-components/dialog/src/lib/src/dialog/models/active-dialog.ts","../../projects/angular-components/dialog/src/lib/src/dialog/services/dialog.service.ts","../../projects/angular-components/dialog/src/lib/src/dialog/services/internal-dialog.service.ts","../../projects/angular-components/dialog/src/lib/src/dialog/dialog.component.ts","../../projects/angular-components/dialog/src/lib/src/dialog/dialog.component.html","../../projects/angular-components/dialog/src/seniorsistemas-angular-components-dialog.ts"],"sourcesContent":["import { Subject } from \"rxjs\";\nimport { DialogSize } from \"./dialog-models\";\n\nexport class ActiveDialog {\n dialogSize: DialogSize = 'md';\n escapeOnEsc = true;\n private _close = new Subject<any>();\n private _dismiss = new Subject<any>();\n\n close<T>(result?: T) {\n this._close.next(result);\n this._close.complete();\n }\n\n dismiss<T>(reason?: T) {\n this._dismiss.next(reason);\n this._dismiss.complete();\n }\n\n onClose$ = this._close.asObservable();\n onDismiss$ = this._dismiss.asObservable();\n}\n","import { Overlay, OverlayRef } from \"@angular/cdk/overlay\";\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { inject, Injectable, Injector, TemplateRef, Type, ViewContainerRef } from '@angular/core';\nimport { take } from \"rxjs\";\nimport { ActiveDialog } from \"../models/active-dialog\";\nimport { DialogOptions, DialogRef } from '../models/dialog-models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DialogService {\n protected readonly activeDialogInstances: ActiveDialog[] = [];\n protected readonly overlay = inject(Overlay);\n protected readonly injector = inject(Injector);\n\n constructor() {\n this.checkEscapeEvent();\n }\n\n open<T>(componentRef: Type<T>, options?: DialogOptions): DialogRef<T> {\n const createdComponent = this.createComponent(componentRef, options);\n return {\n componentInstance: createdComponent.componentInstance as T,\n closed: createdComponent.activeDialog.onClose$,\n dismissed: createdComponent.activeDialog.onDismiss$\n }\n }\n\n\n protected createComponent<T>(componentRef: Type<T>, dialogOptions?: DialogOptions): {\n componentInstance?: T,\n activeDialog: ActiveDialog,\n } {\n const injector = this.dialogInjector;\n const overlayRef = this.getOverlayRef();\n const portal = new ComponentPortal(componentRef, null, injector);\n const _componentRef = overlayRef.attach(portal);\n const activeDialog = this.getActiveDialog(injector);\n this.activeDialogInstances.push(activeDialog);\n this.applyDialogOptionsIntoActiveDialog(activeDialog, dialogOptions)\n this.handleDialogDestroyEvents(injector, overlayRef, dialogOptions)\n return {\n activeDialog,\n componentInstance: _componentRef.instance\n }\n }\n\n protected handleDialogDestroyEvents(injector: Injector, overlayRef: OverlayRef, dialogOptions?: DialogOptions) {\n const destroyClickOutside = dialogOptions?.destroyClickOutside ?? true;\n const activeDialog = this.getActiveDialog(injector)\n const destroyDialog = () => {\n overlayRef.dispose();\n const index = this.activeDialogInstances.indexOf(activeDialog)\n this.activeDialogInstances.splice(index, 1);\n };\n if (destroyClickOutside) {\n overlayRef.backdropClick().pipe(take(1)).subscribe(() => {\n activeDialog.dismiss();\n });\n }\n activeDialog.onClose$.pipe(take(1)).subscribe(destroyDialog)\n activeDialog.onDismiss$.pipe(take(1)).subscribe(destroyDialog)\n }\n\n protected applyDialogOptionsIntoActiveDialog(activeDialog: ActiveDialog, dialogOptions: DialogOptions | undefined) {\n activeDialog.dialogSize = dialogOptions?.size ?? 'md';\n activeDialog.escapeOnEsc = dialogOptions?.escapeOnEsc ?? true;\n }\n\n protected getOverlayRef() {\n const panelClass = ['h-min']\n const overlayRef = this.overlay.create({\n hasBackdrop: true,\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n panelClass\n });\n return overlayRef;\n }\n\n protected getActiveDialog(injector: Injector) {\n return injector.get(ActiveDialog);\n }\n\n protected get dialogInjector() {\n const injector = Injector.create({\n providers: [{ provide: ActiveDialog, useClass: ActiveDialog }],\n parent: this.injector\n });\n return injector;\n }\n\n protected checkEscapeEvent() {\n document.body.addEventListener('keydown', (keyboardEvent: KeyboardEvent) => {\n const isEscapePressed = keyboardEvent.key === 'Escape';\n if (!isEscapePressed) {\n return;\n }\n const lastActiveModal = this.activeDialogInstances.at(this.activeDialogInstances.length - 1);\n if (lastActiveModal && lastActiveModal.escapeOnEsc) {\n lastActiveModal.dismiss();\n }\n })\n }\n}\n","import { TemplatePortal } from '@angular/cdk/portal';\nimport { Injectable, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { DialogOptions } from '../models/dialog-models';\nimport { DialogService } from \"./dialog.service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InternalDialogService extends DialogService {\n constructor() {\n super();\n }\n\n openByTemplate(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef, dialogOptions?: DialogOptions) {\n const injector = this.dialogInjector;\n const overlayRef = this.getOverlayRef();\n const portal = new TemplatePortal(templateRef, viewContainerRef)\n overlayRef.attach(portal);\n const activeDialog = this.getActiveDialog(injector);\n this.applyDialogOptionsIntoActiveDialog(activeDialog, dialogOptions)\n this.activeDialogInstances.push(activeDialog);\n this.handleDialogDestroyEvents(injector, overlayRef, dialogOptions)\n return activeDialog;\n }\n\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, Component, computed, contentChildren, inject, input, model, OnDestroy, TemplateRef, viewChild, ViewContainerRef } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\nimport { Subject, take, takeUntil } from 'rxjs';\nimport { ActiveDialog } from './models/active-dialog';\nimport { InternalDialogService } from './services/internal-dialog.service';\nimport { DialogSize } from './models/dialog-models';\n\n@Component({\n selector: 's-dialog',\n standalone: true,\n templateUrl: './dialog.component.html',\n imports: [NgTemplateOutlet, InteractiveContentDirective, NgClass],\n})\nexport class DialogComponent implements AfterViewInit, OnDestroy {\n header = input();\n\n visible = model<boolean | undefined>(undefined);\n\n activeDialog = inject(ActiveDialog, { optional: true });\n size = input<DialogSize>('md');\n contentClassName = input('');\n escapeOnEsc = input(true);\n destroyClickOutside = input(true);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly dialogService = inject(InternalDialogService);\n private readonly template = viewChild<TemplateRef<any>>('dialogTemplate');\n private readonly templateDiretives = contentChildren(TemplateDirective);\n private readonly onDestroy$ = new Subject<void>();\n\n protected headerTemplate = computed(() => {\n return this.getTemplate('header');\n })\n\n protected bodyTemplate = computed(() => {\n return this.getTemplate('body');\n })\n\n protected footerTemplate = computed(() => {\n return this.getTemplate('footer');\n })\n\n constructor() {\n toObservable(this.visible).pipe(takeUntil(this.onDestroy$)).subscribe(() => {\n const visible = this.visible();\n if (visible === true) {\n this.openDialog();\n } else if (visible === false) {\n this.activeDialog?.dismiss();\n }\n })\n }\n\n ngAfterViewInit(): void {\n if (!this.header() && !this.headerTemplate()) {\n console.error('Header is required. provide header via input or sTemplate=\"header\"');\n }\n\n if (this.activeDialog && this.visible() !== undefined) {\n throw new Error('set visible with external component is invalid, the \"visible\" input is only use when s-dialog is in component html.')\n }\n }\n\n ngOnDestroy(): void {\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n\n protected onDismiss() {\n this.activeDialog?.dismiss()\n }\n\n private getTemplate(templateType: string) {\n return this.templateDiretives().find((template) => template.type === templateType)?.template;\n }\n\n private openDialog() {\n if (this.activeDialog) {\n throw new Error('set visible with external component is invalid, the \"visible\" input is only use when s-dialog is in component html.')\n }\n this.activeDialog = this.dialogService.openByTemplate(this.template()!, this.viewContainerRef, { size: this.size(), destroyClickOutside: this.destroyClickOutside(), escapeOnEsc: this.escapeOnEsc() });\n this.activeDialog.onClose$.pipe(take(1)).subscribe(() => {\n this.activeDialog = null;\n this.visible.set(false);\n })\n\n this.activeDialog.onDismiss$.pipe(take(1)).subscribe(() => {\n this.activeDialog = null;\n this.visible.set(false);\n })\n }\n}\n","@let activeDialogContext = { activeDialog: activeDialog };\n<ng-template #dialogTemplate>\n @if (activeDialog) {\n @let isSm = activeDialog.dialogSize === 'sm';\n @let isMd = activeDialog.dialogSize === 'md';\n @let isLg = activeDialog.dialogSize === 'lg';\n @let isXl = activeDialog.dialogSize === 'xl';\n @let isFullscreen = activeDialog.dialogSize === 'fullscreen';\n <div\n [class]=\"contentClassName()\"\n class=\"flex h-min max-h-screen w-screen flex-col bg-grayscale-0 shadow-md max-sm:h-screen max-sm:w-screen\"\n [ngClass]=\"{\n 'max-w-[300px]': isSm,\n 'max-w-[500px]': isMd,\n 'max-w-[800px]': isLg,\n 'max-w-[1140px]': isXl,\n 'h-screen': isFullscreen,\n }\"\n >\n <header class=\"flex flex-wrap justify-between gap-3 p-4 pb-0\">\n @let _header = headerTemplate();\n @if (_header) {\n <ng-container *ngTemplateOutlet=\"_header; context: activeDialogContext\"></ng-container>\n } @else {\n <h3>{{ header() }}</h3>\n }\n <div\n class=\"flex cursor-pointer items-center justify-center\"\n (sInteractiveContent)=\"onDismiss()\"\n >\n <i class=\"fas fa-times\"></i>\n </div>\n <hr class=\"h-[1px] w-full bg-grayscale-20\" />\n </header>\n\n <main class=\"flex-1 p-4\">\n @let _bodyTemplate = bodyTemplate();\n @if (_bodyTemplate) {\n <ng-container *ngTemplateOutlet=\"_bodyTemplate; context: activeDialogContext\"></ng-container>\n } @else {\n <ng-content></ng-content>\n }\n </main>\n\n @let footer = footerTemplate();\n @if (footer) {\n <footer class=\"flex flex-wrap gap-3 p-4 pt-0\">\n <hr class=\"h-[1px] w-full bg-grayscale-20\" />\n <div class=\"w-full\">\n <ng-container *ngTemplateOutlet=\"footer; context: activeDialogContext\"></ng-container>\n </div>\n </footer>\n }\n </div>\n }\n</ng-template>\n\n@if (visible() === undefined) {\n <ng-container *ngTemplateOutlet=\"dialogTemplate\"></ng-container>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}