quang 20.4.5 → 20.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/auth/index.d.ts +4 -5
  2. package/components/date/index.d.ts +1 -0
  3. package/fesm2022/quang-auth.mjs +20 -20
  4. package/fesm2022/quang-auth.mjs.map +1 -1
  5. package/fesm2022/quang-components-autocomplete.mjs +4 -4
  6. package/fesm2022/quang-components-autocomplete.mjs.map +1 -1
  7. package/fesm2022/quang-components-checkbox.mjs +4 -4
  8. package/fesm2022/quang-components-checkbox.mjs.map +1 -1
  9. package/fesm2022/quang-components-date.mjs +23 -8
  10. package/fesm2022/quang-components-date.mjs.map +1 -1
  11. package/fesm2022/quang-components-input.mjs +4 -4
  12. package/fesm2022/quang-components-input.mjs.map +1 -1
  13. package/fesm2022/quang-components-paginator.mjs +14 -14
  14. package/fesm2022/quang-components-paginator.mjs.map +1 -1
  15. package/fesm2022/quang-components-select.mjs +4 -4
  16. package/fesm2022/quang-components-select.mjs.map +1 -1
  17. package/fesm2022/quang-components-shared.mjs +8 -8
  18. package/fesm2022/quang-components-shared.mjs.map +1 -1
  19. package/fesm2022/quang-components-table.mjs +4 -4
  20. package/fesm2022/quang-components-table.mjs.map +1 -1
  21. package/fesm2022/quang-components-wysiwyg.mjs +4 -4
  22. package/fesm2022/quang-components-wysiwyg.mjs.map +1 -1
  23. package/fesm2022/quang-device.mjs +3 -3
  24. package/fesm2022/quang-device.mjs.map +1 -1
  25. package/fesm2022/quang-loader.mjs +7 -7
  26. package/fesm2022/quang-loader.mjs.map +1 -1
  27. package/fesm2022/quang-overlay-modal.mjs +90 -12
  28. package/fesm2022/quang-overlay-modal.mjs.map +1 -1
  29. package/fesm2022/quang-overlay-popover.mjs +8 -8
  30. package/fesm2022/quang-overlay-popover.mjs.map +1 -1
  31. package/fesm2022/quang-overlay-shared.mjs +11 -11
  32. package/fesm2022/quang-overlay-shared.mjs.map +1 -1
  33. package/fesm2022/quang-overlay-toast.mjs +7 -7
  34. package/fesm2022/quang-overlay-toast.mjs.map +1 -1
  35. package/fesm2022/quang-overlay-tooltip.mjs +8 -8
  36. package/fesm2022/quang-overlay-tooltip.mjs.map +1 -1
  37. package/fesm2022/quang-translation.mjs +6 -6
  38. package/fesm2022/quang-translation.mjs.map +1 -1
  39. package/overlay/modal/index.d.ts +39 -5
  40. package/overlay/toast/index.d.ts +2 -3
  41. package/package.json +18 -18
@@ -40,10 +40,10 @@ class QuangToastService {
40
40
  this.currentToast.set(null);
41
41
  patchState(this.toastState, { count: this.count() - 1 });
42
42
  }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
44
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangToastService, providedIn: 'root' }); }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
44
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangToastService, providedIn: 'root' }); }
45
45
  }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangToastService, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangToastService, decorators: [{
47
47
  type: Injectable,
48
48
  args: [{
49
49
  providedIn: 'root',
@@ -89,13 +89,13 @@ class QuangToastComponent {
89
89
  close() {
90
90
  this.toastService().closeToast();
91
91
  }
92
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
93
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: QuangToastComponent, isStandalone: true, selector: "quang-toast", inputs: { showAtLeastFor: { classPropertyName: "showAtLeastFor", publicName: "showAtLeastFor", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\n [class.hide]=\"!isShowing()\"\n [class.show]=\"isShowing()\"\n [ngClass]=\"[_currentToast()?.position ?? '', _currentToast()?.type ?? '']\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n class=\"toast fade\"\n role=\"alert\"\n>\n @if (!_currentToast()?.hideHeader) {\n <div class=\"toast-header\">\n @if (!_currentToast()?.customIcon) {\n <span\n [ngClass]=\"_currentToast()?.type\"\n class=\"rounded me-2\"\n ></span>\n }\n @if (_currentToast()?.customIcon) {\n <img\n [src]=\"_currentToast()?.customIcon\"\n alt=\"\"\n />\n }\n @if (_currentToast()?.title) {\n <strong class=\"me-auto\">{{ _currentToast()?.title | transloco }}</strong>\n }\n @if (_currentToast()?.date) {\n <small>{{ _currentToast()?.date ?? '' | date: _currentToast()?.dateFormat }}</small>\n }\n @if (_currentToast()?.showCloseButton) {\n <button\n (click)=\"close()\"\n aria-label=\"Close\"\n class=\"ms-2 mb-1 btn-close\"\n data-dismiss=\"toast\"\n type=\"button\"\n >\n <span aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n }\n @if (_currentToast()?.text) {\n <div class=\"toast-body\">\n {{ _currentToast()?.text?.trim() | transloco: { textValue: _currentToast()?.textValue?.trim() } }}\n </div>\n }\n <ng-container *ngTemplateOutlet=\"_currentToast()?.customTemplate ?? null\"></ng-container>\n</div>\n", styles: [".toast{position:fixed;min-width:200px;z-index:999999}.toast.top-left{top:2rem;left:1rem}.toast.top-right{top:2rem;right:1rem}.toast.bottom-left{bottom:1rem;left:1rem}.toast.bottom-right{bottom:1rem;right:1rem}.toast.center{top:50%;left:50%;transform:translate(-50%,-50%)}.toast.top-center{top:2rem;left:50%;transform:translate(-50%)}.toast.bottom-center{bottom:1rem;left:50%;transform:translate(-50%)}.toast .toast-header{background-color:unset}.toast .toast-header .rounded{height:1.125rem;width:1.125rem;display:inline-block}.toast .toast-header .rounded.success{background:#28a745}.toast .toast-header .rounded.warning{background:#ffc107}.toast .toast-header .rounded.error{background:#dc3545}.toast .toast-header button:focus{box-shadow:unset}.toast small{margin-left:1rem}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
92
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
93
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.10", type: QuangToastComponent, isStandalone: true, selector: "quang-toast", inputs: { showAtLeastFor: { classPropertyName: "showAtLeastFor", publicName: "showAtLeastFor", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\n [class.hide]=\"!isShowing()\"\n [class.show]=\"isShowing()\"\n [ngClass]=\"[_currentToast()?.position ?? '', _currentToast()?.type ?? '']\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n class=\"toast fade\"\n role=\"alert\"\n>\n @if (!_currentToast()?.hideHeader) {\n <div class=\"toast-header\">\n @if (!_currentToast()?.customIcon) {\n <span\n [ngClass]=\"_currentToast()?.type\"\n class=\"rounded me-2\"\n ></span>\n }\n @if (_currentToast()?.customIcon) {\n <img\n [src]=\"_currentToast()?.customIcon\"\n alt=\"\"\n />\n }\n @if (_currentToast()?.title) {\n <strong class=\"me-auto\">{{ _currentToast()?.title | transloco }}</strong>\n }\n @if (_currentToast()?.date) {\n <small>{{ _currentToast()?.date ?? '' | date: _currentToast()?.dateFormat }}</small>\n }\n @if (_currentToast()?.showCloseButton) {\n <button\n (click)=\"close()\"\n aria-label=\"Close\"\n class=\"ms-2 mb-1 btn-close\"\n data-dismiss=\"toast\"\n type=\"button\"\n >\n <span aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n }\n @if (_currentToast()?.text) {\n <div class=\"toast-body\">\n {{ _currentToast()?.text?.trim() | transloco: { textValue: _currentToast()?.textValue?.trim() } }}\n </div>\n }\n <ng-container *ngTemplateOutlet=\"_currentToast()?.customTemplate ?? null\"></ng-container>\n</div>\n", styles: [".toast{position:fixed;min-width:200px;z-index:999999}.toast.top-left{top:2rem;left:1rem}.toast.top-right{top:2rem;right:1rem}.toast.bottom-left{bottom:1rem;left:1rem}.toast.bottom-right{bottom:1rem;right:1rem}.toast.center{top:50%;left:50%;transform:translate(-50%,-50%)}.toast.top-center{top:2rem;left:50%;transform:translate(-50%)}.toast.bottom-center{bottom:1rem;left:50%;transform:translate(-50%)}.toast .toast-header{background-color:unset}.toast .toast-header .rounded{height:1.125rem;width:1.125rem;display:inline-block}.toast .toast-header .rounded.success{background:#28a745}.toast .toast-header .rounded.warning{background:#ffc107}.toast .toast-header .rounded.error{background:#dc3545}.toast .toast-header button:focus{box-shadow:unset}.toast small{margin-left:1rem}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
94
94
  }
95
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangToastComponent, decorators: [{
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangToastComponent, decorators: [{
96
96
  type: Component,
97
97
  args: [{ selector: 'quang-toast', imports: [OverlayModule, NgClass, TranslocoPipe, DatePipe, NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [class.hide]=\"!isShowing()\"\n [class.show]=\"isShowing()\"\n [ngClass]=\"[_currentToast()?.position ?? '', _currentToast()?.type ?? '']\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n class=\"toast fade\"\n role=\"alert\"\n>\n @if (!_currentToast()?.hideHeader) {\n <div class=\"toast-header\">\n @if (!_currentToast()?.customIcon) {\n <span\n [ngClass]=\"_currentToast()?.type\"\n class=\"rounded me-2\"\n ></span>\n }\n @if (_currentToast()?.customIcon) {\n <img\n [src]=\"_currentToast()?.customIcon\"\n alt=\"\"\n />\n }\n @if (_currentToast()?.title) {\n <strong class=\"me-auto\">{{ _currentToast()?.title | transloco }}</strong>\n }\n @if (_currentToast()?.date) {\n <small>{{ _currentToast()?.date ?? '' | date: _currentToast()?.dateFormat }}</small>\n }\n @if (_currentToast()?.showCloseButton) {\n <button\n (click)=\"close()\"\n aria-label=\"Close\"\n class=\"ms-2 mb-1 btn-close\"\n data-dismiss=\"toast\"\n type=\"button\"\n >\n <span aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n }\n @if (_currentToast()?.text) {\n <div class=\"toast-body\">\n {{ _currentToast()?.text?.trim() | transloco: { textValue: _currentToast()?.textValue?.trim() } }}\n </div>\n }\n <ng-container *ngTemplateOutlet=\"_currentToast()?.customTemplate ?? null\"></ng-container>\n</div>\n", styles: [".toast{position:fixed;min-width:200px;z-index:999999}.toast.top-left{top:2rem;left:1rem}.toast.top-right{top:2rem;right:1rem}.toast.bottom-left{bottom:1rem;left:1rem}.toast.bottom-right{bottom:1rem;right:1rem}.toast.center{top:50%;left:50%;transform:translate(-50%,-50%)}.toast.top-center{top:2rem;left:50%;transform:translate(-50%)}.toast.bottom-center{bottom:1rem;left:50%;transform:translate(-50%)}.toast .toast-header{background-color:unset}.toast .toast-header .rounded{height:1.125rem;width:1.125rem;display:inline-block}.toast .toast-header .rounded.success{background:#28a745}.toast .toast-header .rounded.warning{background:#ffc107}.toast .toast-header .rounded.error{background:#dc3545}.toast .toast-header button:focus{box-shadow:unset}.toast small{margin-left:1rem}\n"] }]
98
- }] });
98
+ }], propDecorators: { showAtLeastFor: [{ type: i0.Input, args: [{ isSignal: true, alias: "showAtLeastFor", required: false }] }] } });
99
99
 
100
100
  /**
101
101
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"quang-overlay-toast.mjs","sources":["../../../projects/quang/overlay/toast/toast.service.ts","../../../projects/quang/overlay/toast/toast.component.ts","../../../projects/quang/overlay/toast/toast.component.html","../../../projects/quang/overlay/toast/quang-overlay-toast.ts"],"sourcesContent":["import { Injectable, TemplateRef, computed, signal } from '@angular/core'\n\nimport { patchState, signalState } from '@ngrx/signals'\n\nexport interface ToastData {\n type: 'success' | 'warning' | 'error'\n title?: string\n position: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center' | 'top-center' | 'bottom-center'\n timing: number\n text?: string\n textValue?: string\n showCloseButton?: boolean\n date?: Date\n dateFormat?: string\n customTemplate?: TemplateRef<any>\n customIcon?: string\n hideHeader?: boolean\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class QuangToastService {\n private toastState = signalState({\n count: 0,\n currentTimeout: null as ReturnType<typeof setTimeout> | number | null,\n })\n\n public isShowing = computed(() => this.toastState.count() > 0)\n\n count = this.toastState.count\n currentTimeout = this.toastState.currentTimeout\n\n public openToast(toastData: ToastData): void {\n patchState(this.toastState, {\n count: this.count() + 1,\n })\n\n this.currentToast.set(toastData)\n\n if (this.count() > 1) {\n clearTimeout(this.currentTimeout() as number)\n patchState(this.toastState, {\n count: this.count() - 1,\n currentTimeout: null,\n })\n }\n patchState(this.toastState, {\n currentTimeout: setTimeout(() => {\n this.closeToast()\n }, toastData.timing),\n })\n }\n\n public closeToast(): void {\n this.currentToast.set(null)\n patchState(this.toastState, { count: this.count() - 1 })\n }\n\n public currentToast = signal<ToastData | null>(null)\n}\n","import { OverlayModule } from '@angular/cdk/overlay'\nimport { DatePipe, NgClass, NgTemplateOutlet } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, inject, input, signal } from '@angular/core'\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop'\n\nimport { TranslocoPipe } from '@jsverse/transloco'\nimport { map, of, switchAll, timer } from 'rxjs'\n\nimport { QuangToastService } from './toast.service'\n\n@Component({\n selector: 'quang-toast',\n imports: [OverlayModule, NgClass, TranslocoPipe, DatePipe, NgTemplateOutlet],\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * Toast component that can be displayed by calling the `QuangToastService.openToast()` method,\n * passing an object of config {@link ToastData}.\n *\n * @usageNotes\n * The {@link ToastData.customTemplate} property is used to display the custom template inside the toast.\n *\n * The toast header can be hidden by setting the {@link ToastData.hideHeader} boolean to `true`.\n *\n * If the toast header is visible, setting the {@link ToastData.type} property will change the background color\n * of a squared indicator positioned next to the header's title.\n *\n * The component can also display a {@link ToastData.customIcon} in the toast header instead of the squared indicator.\n *\n * @example\n * <quang-toast></quang-toast>\n * this.quangToast.openToast({\n type,\n title: type,\n position: 'bottom-center',\n text: 'custom text here',\n showCloseButton: true,\n timing: 50000000,\n })\n */\nexport class QuangToastComponent {\n toastService = signal(inject(QuangToastService))\n\n readonly isShowing = this.toastService().isShowing\n showAtLeastFor = input<number>(500)\n\n private showToastBuffer$ = toObservable(this.isShowing).pipe(\n map((isShowing) =>\n isShowing\n ? of(isShowing)\n : timer(this.toastService().currentToast()?.timing ?? this.showAtLeastFor()).pipe(map(() => isShowing))\n ),\n switchAll()\n )\n\n showToast = toSignal(this.showToastBuffer$)\n\n readonly _currentToast = this.toastService().currentToast\n\n close(): void {\n this.toastService().closeToast()\n }\n}\n","<div\n [class.hide]=\"!isShowing()\"\n [class.show]=\"isShowing()\"\n [ngClass]=\"[_currentToast()?.position ?? '', _currentToast()?.type ?? '']\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n class=\"toast fade\"\n role=\"alert\"\n>\n @if (!_currentToast()?.hideHeader) {\n <div class=\"toast-header\">\n @if (!_currentToast()?.customIcon) {\n <span\n [ngClass]=\"_currentToast()?.type\"\n class=\"rounded me-2\"\n ></span>\n }\n @if (_currentToast()?.customIcon) {\n <img\n [src]=\"_currentToast()?.customIcon\"\n alt=\"\"\n />\n }\n @if (_currentToast()?.title) {\n <strong class=\"me-auto\">{{ _currentToast()?.title | transloco }}</strong>\n }\n @if (_currentToast()?.date) {\n <small>{{ _currentToast()?.date ?? '' | date: _currentToast()?.dateFormat }}</small>\n }\n @if (_currentToast()?.showCloseButton) {\n <button\n (click)=\"close()\"\n aria-label=\"Close\"\n class=\"ms-2 mb-1 btn-close\"\n data-dismiss=\"toast\"\n type=\"button\"\n >\n <span aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n }\n @if (_currentToast()?.text) {\n <div class=\"toast-body\">\n {{ _currentToast()?.text?.trim() | transloco: { textValue: _currentToast()?.textValue?.trim() } }}\n </div>\n }\n <ng-container *ngTemplateOutlet=\"_currentToast()?.customTemplate ?? null\"></ng-container>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quang-overlay-toast.mjs","sources":["../../../projects/quang/overlay/toast/toast.service.ts","../../../projects/quang/overlay/toast/toast.component.ts","../../../projects/quang/overlay/toast/toast.component.html","../../../projects/quang/overlay/toast/quang-overlay-toast.ts"],"sourcesContent":["import { Injectable, TemplateRef, computed, signal } from '@angular/core'\n\nimport { patchState, signalState } from '@ngrx/signals'\n\nexport interface ToastData {\n type: 'success' | 'warning' | 'error'\n title?: string\n position: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center' | 'top-center' | 'bottom-center'\n timing: number\n text?: string\n textValue?: string\n showCloseButton?: boolean\n date?: Date\n dateFormat?: string\n customTemplate?: TemplateRef<any>\n customIcon?: string\n hideHeader?: boolean\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class QuangToastService {\n private toastState = signalState({\n count: 0,\n currentTimeout: null as ReturnType<typeof setTimeout> | number | null,\n })\n\n public isShowing = computed(() => this.toastState.count() > 0)\n\n count = this.toastState.count\n currentTimeout = this.toastState.currentTimeout\n\n public openToast(toastData: ToastData): void {\n patchState(this.toastState, {\n count: this.count() + 1,\n })\n\n this.currentToast.set(toastData)\n\n if (this.count() > 1) {\n clearTimeout(this.currentTimeout() as number)\n patchState(this.toastState, {\n count: this.count() - 1,\n currentTimeout: null,\n })\n }\n patchState(this.toastState, {\n currentTimeout: setTimeout(() => {\n this.closeToast()\n }, toastData.timing),\n })\n }\n\n public closeToast(): void {\n this.currentToast.set(null)\n patchState(this.toastState, { count: this.count() - 1 })\n }\n\n public currentToast = signal<ToastData | null>(null)\n}\n","import { OverlayModule } from '@angular/cdk/overlay'\nimport { DatePipe, NgClass, NgTemplateOutlet } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, inject, input, signal } from '@angular/core'\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop'\n\nimport { TranslocoPipe } from '@jsverse/transloco'\nimport { map, of, switchAll, timer } from 'rxjs'\n\nimport { QuangToastService } from './toast.service'\n\n@Component({\n selector: 'quang-toast',\n imports: [OverlayModule, NgClass, TranslocoPipe, DatePipe, NgTemplateOutlet],\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * Toast component that can be displayed by calling the `QuangToastService.openToast()` method,\n * passing an object of config {@link ToastData}.\n *\n * @usageNotes\n * The {@link ToastData.customTemplate} property is used to display the custom template inside the toast.\n *\n * The toast header can be hidden by setting the {@link ToastData.hideHeader} boolean to `true`.\n *\n * If the toast header is visible, setting the {@link ToastData.type} property will change the background color\n * of a squared indicator positioned next to the header's title.\n *\n * The component can also display a {@link ToastData.customIcon} in the toast header instead of the squared indicator.\n *\n * @example\n * <quang-toast></quang-toast>\n * this.quangToast.openToast({\n type,\n title: type,\n position: 'bottom-center',\n text: 'custom text here',\n showCloseButton: true,\n timing: 50000000,\n })\n */\nexport class QuangToastComponent {\n toastService = signal(inject(QuangToastService))\n\n readonly isShowing = this.toastService().isShowing\n showAtLeastFor = input<number>(500)\n\n private showToastBuffer$ = toObservable(this.isShowing).pipe(\n map((isShowing) =>\n isShowing\n ? of(isShowing)\n : timer(this.toastService().currentToast()?.timing ?? this.showAtLeastFor()).pipe(map(() => isShowing))\n ),\n switchAll()\n )\n\n showToast = toSignal(this.showToastBuffer$)\n\n readonly _currentToast = this.toastService().currentToast\n\n close(): void {\n this.toastService().closeToast()\n }\n}\n","<div\n [class.hide]=\"!isShowing()\"\n [class.show]=\"isShowing()\"\n [ngClass]=\"[_currentToast()?.position ?? '', _currentToast()?.type ?? '']\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n class=\"toast fade\"\n role=\"alert\"\n>\n @if (!_currentToast()?.hideHeader) {\n <div class=\"toast-header\">\n @if (!_currentToast()?.customIcon) {\n <span\n [ngClass]=\"_currentToast()?.type\"\n class=\"rounded me-2\"\n ></span>\n }\n @if (_currentToast()?.customIcon) {\n <img\n [src]=\"_currentToast()?.customIcon\"\n alt=\"\"\n />\n }\n @if (_currentToast()?.title) {\n <strong class=\"me-auto\">{{ _currentToast()?.title | transloco }}</strong>\n }\n @if (_currentToast()?.date) {\n <small>{{ _currentToast()?.date ?? '' | date: _currentToast()?.dateFormat }}</small>\n }\n @if (_currentToast()?.showCloseButton) {\n <button\n (click)=\"close()\"\n aria-label=\"Close\"\n class=\"ms-2 mb-1 btn-close\"\n data-dismiss=\"toast\"\n type=\"button\"\n >\n <span aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n }\n @if (_currentToast()?.text) {\n <div class=\"toast-body\">\n {{ _currentToast()?.text?.trim() | transloco: { textValue: _currentToast()?.textValue?.trim() } }}\n </div>\n }\n <ng-container *ngTemplateOutlet=\"_currentToast()?.customTemplate ?? null\"></ng-container>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -11,8 +11,8 @@ class QuangTooltipComponent {
11
11
  this.positionPair = signal(null, ...(ngDevMode ? [{ debugName: "positionPair" }] : []));
12
12
  this.payload = input(...(ngDevMode ? [undefined, { debugName: "payload" }] : []));
13
13
  }
14
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: QuangTooltipComponent, isStandalone: true, selector: "quang-tooltip", inputs: { overlayContent: { classPropertyName: "overlayContent", publicName: "overlayContent", isSignal: true, isRequired: true, transformFunction: null }, quangTooltipPosition: { classPropertyName: "quangTooltipPosition", publicName: "quangTooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, payload: { classPropertyName: "payload", publicName: "payload", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (overlayContent()) {\n <div\n @tooltip\n class=\"quang-tooltip\"\n >\n {{ overlayContent() }}\n </div>\n}\n", styles: [".quang-tooltip{background-color:var(--bs-body-color);color:var(--bs-body-bg);padding:.5rem;border-radius:5px;font-size:.75rem;opacity:0}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }], animations: [
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.10", type: QuangTooltipComponent, isStandalone: true, selector: "quang-tooltip", inputs: { overlayContent: { classPropertyName: "overlayContent", publicName: "overlayContent", isSignal: true, isRequired: true, transformFunction: null }, quangTooltipPosition: { classPropertyName: "quangTooltipPosition", publicName: "quangTooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, payload: { classPropertyName: "payload", publicName: "payload", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (overlayContent()) {\n <div\n @tooltip\n class=\"quang-tooltip\"\n >\n {{ overlayContent() }}\n </div>\n}\n", styles: [".quang-tooltip{background-color:var(--bs-body-color);color:var(--bs-body-bg);padding:.5rem;border-radius:5px;font-size:.75rem;opacity:0}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }], animations: [
16
16
  trigger('tooltip', [
17
17
  state('*', style({ opacity: 1 })),
18
18
  transition(':enter', [style({ opacity: 0 }), animate(200, style({ opacity: 1 }))]),
@@ -20,7 +20,7 @@ class QuangTooltipComponent {
20
20
  ]),
21
21
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
22
22
  }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangTooltipComponent, decorators: [{
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangTooltipComponent, decorators: [{
24
24
  type: Component,
25
25
  args: [{ selector: 'quang-tooltip', imports: [OverlayModule], changeDetection: ChangeDetectionStrategy.OnPush, animations: [
26
26
  trigger('tooltip', [
@@ -29,7 +29,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
29
29
  transition(':leave', [style({ opacity: 1 }), animate(300, style({ opacity: 0 }))]),
30
30
  ]),
31
31
  ], template: "@if (overlayContent()) {\n <div\n @tooltip\n class=\"quang-tooltip\"\n >\n {{ overlayContent() }}\n </div>\n}\n", styles: [".quang-tooltip{background-color:var(--bs-body-color);color:var(--bs-body-bg);padding:.5rem;border-radius:5px;font-size:.75rem;opacity:0}\n"] }]
32
- }] });
32
+ }], propDecorators: { overlayContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayContent", required: true }] }], quangTooltipPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "quangTooltipPosition", required: false }] }], payload: [{ type: i0.Input, args: [{ isSignal: true, alias: "payload", required: false }] }] } });
33
33
 
34
34
  class QuangTooltipDirective extends QuangBaseOverlayDirective {
35
35
  constructor() {
@@ -38,15 +38,15 @@ class QuangTooltipDirective extends QuangBaseOverlayDirective {
38
38
  this.content = input.required(...(ngDevMode ? [{ debugName: "content", alias: 'quangTooltip' }] : [{ alias: 'quangTooltip' }]));
39
39
  this.showMethod = input('hover', ...(ngDevMode ? [{ debugName: "showMethod" }] : []));
40
40
  }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangTooltipDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
42
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.3", type: QuangTooltipDirective, isStandalone: true, selector: "[quangTooltip]", inputs: { content: { classPropertyName: "content", publicName: "quangTooltip", isSignal: true, isRequired: true, transformFunction: null }, showMethod: { classPropertyName: "showMethod", publicName: "showMethod", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangTooltipDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
42
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.10", type: QuangTooltipDirective, isStandalone: true, selector: "[quangTooltip]", inputs: { content: { classPropertyName: "content", publicName: "quangTooltip", isSignal: true, isRequired: true, transformFunction: null }, showMethod: { classPropertyName: "showMethod", publicName: "showMethod", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
43
43
  }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangTooltipDirective, decorators: [{
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangTooltipDirective, decorators: [{
45
45
  type: Directive,
46
46
  args: [{
47
47
  selector: '[quangTooltip]',
48
48
  }]
49
- }] });
49
+ }], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "quangTooltip", required: true }] }], showMethod: [{ type: i0.Input, args: [{ isSignal: true, alias: "showMethod", required: false }] }] } });
50
50
 
51
51
  /**
52
52
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"quang-overlay-tooltip.mjs","sources":["../../../projects/quang/overlay/tooltip/tooltip.component.ts","../../../projects/quang/overlay/tooltip/tooltip.component.html","../../../projects/quang/overlay/tooltip/tooltip.directive.ts","../../../projects/quang/overlay/tooltip/quang-overlay-tooltip.ts"],"sourcesContent":["import { animate, state, style, transition, trigger } from '@angular/animations'\nimport { ConnectionPositionPair, OverlayModule } from '@angular/cdk/overlay'\nimport { ChangeDetectionStrategy, Component, input, signal } from '@angular/core'\n\nimport { QuangBaseOverlayComponent } from 'quang/overlay/shared'\n\n@Component({\n selector: 'quang-tooltip',\n imports: [OverlayModule],\n templateUrl: './tooltip.component.html',\n styleUrl: './tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n animations: [\n trigger('tooltip', [\n state('*', style({ opacity: 1 })),\n transition(':enter', [style({ opacity: 0 }), animate(200, style({ opacity: 1 }))]),\n transition(':leave', [style({ opacity: 1 }), animate(300, style({ opacity: 0 }))]),\n ]),\n ],\n})\nexport class QuangTooltipComponent implements QuangBaseOverlayComponent {\n overlayContent = input.required<string>()\n\n quangTooltipPosition = input<'top' | 'bottom' | 'left' | 'right'>('top')\n\n positionPair = signal<ConnectionPositionPair | null>(null)\n\n payload = input<unknown>()\n}\n","@if (overlayContent()) {\n <div\n @tooltip\n class=\"quang-tooltip\"\n >\n {{ overlayContent() }}\n </div>\n}\n","import { ComponentType } from '@angular/cdk/portal'\nimport { Directive, input, signal } from '@angular/core'\n\nimport { QuangBaseOverlayDirective } from 'quang/overlay/shared'\n\nimport { QuangTooltipComponent } from './tooltip.component'\n\n@Directive({\n selector: '[quangTooltip]',\n})\nexport class QuangTooltipDirective extends QuangBaseOverlayDirective<QuangTooltipComponent> {\n override targetComponentType = signal<ComponentType<QuangTooltipComponent> | undefined>(QuangTooltipComponent)\n\n override content = input.required<string>({ alias: 'quangTooltip' })\n\n override showMethod = input<'click' | 'hover'>('hover')\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quang-overlay-tooltip.mjs","sources":["../../../projects/quang/overlay/tooltip/tooltip.component.ts","../../../projects/quang/overlay/tooltip/tooltip.component.html","../../../projects/quang/overlay/tooltip/tooltip.directive.ts","../../../projects/quang/overlay/tooltip/quang-overlay-tooltip.ts"],"sourcesContent":["import { animate, state, style, transition, trigger } from '@angular/animations'\nimport { ConnectionPositionPair, OverlayModule } from '@angular/cdk/overlay'\nimport { ChangeDetectionStrategy, Component, input, signal } from '@angular/core'\n\nimport { QuangBaseOverlayComponent } from 'quang/overlay/shared'\n\n@Component({\n selector: 'quang-tooltip',\n imports: [OverlayModule],\n templateUrl: './tooltip.component.html',\n styleUrl: './tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n animations: [\n trigger('tooltip', [\n state('*', style({ opacity: 1 })),\n transition(':enter', [style({ opacity: 0 }), animate(200, style({ opacity: 1 }))]),\n transition(':leave', [style({ opacity: 1 }), animate(300, style({ opacity: 0 }))]),\n ]),\n ],\n})\nexport class QuangTooltipComponent implements QuangBaseOverlayComponent {\n overlayContent = input.required<string>()\n\n quangTooltipPosition = input<'top' | 'bottom' | 'left' | 'right'>('top')\n\n positionPair = signal<ConnectionPositionPair | null>(null)\n\n payload = input<unknown>()\n}\n","@if (overlayContent()) {\n <div\n @tooltip\n class=\"quang-tooltip\"\n >\n {{ overlayContent() }}\n </div>\n}\n","import { ComponentType } from '@angular/cdk/portal'\nimport { Directive, input, signal } from '@angular/core'\n\nimport { QuangBaseOverlayDirective } from 'quang/overlay/shared'\n\nimport { QuangTooltipComponent } from './tooltip.component'\n\n@Directive({\n selector: '[quangTooltip]',\n})\nexport class QuangTooltipDirective extends QuangBaseOverlayDirective<QuangTooltipComponent> {\n override targetComponentType = signal<ComponentType<QuangTooltipComponent> | undefined>(QuangTooltipComponent)\n\n override content = input.required<string>({ alias: 'quangTooltip' })\n\n override showMethod = input<'click' | 'hover'>('hover')\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -18,10 +18,10 @@ class QuangTranslationLoaderService {
18
18
  getTranslation(lang) {
19
19
  return this.httpClient.get(`${this.translationBasePath ?? './'}assets/i18n/${lang}.json`);
20
20
  }
21
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangTranslationLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangTranslationLoaderService }); }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangTranslationLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangTranslationLoaderService }); }
23
23
  }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangTranslationLoaderService, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangTranslationLoaderService, decorators: [{
25
25
  type: Injectable
26
26
  }], propDecorators: { translationBasePath: [{
27
27
  type: Optional
@@ -50,10 +50,10 @@ class QuangTranslationService {
50
50
  setTranslationKey(key, value, options) {
51
51
  return this._translocoService.setTranslationKey(key, value, options);
52
52
  }
53
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangTranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
54
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangTranslationService }); }
53
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangTranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
54
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangTranslationService }); }
55
55
  }
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: QuangTranslationService, decorators: [{
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: QuangTranslationService, decorators: [{
57
57
  type: Injectable
58
58
  }] });
59
59
 
@@ -1 +1 @@
1
- {"version":3,"file":"quang-translation.mjs","sources":["../../../projects/quang/translation/translations.tokens.ts","../../../projects/quang/translation/translation-loader.service.ts","../../../projects/quang/translation/translation.service.ts","../../../projects/quang/translation/translation-providers.ts","../../../projects/quang/translation/quang-translation.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\n\nexport const AVAILABLE_LANGS = new InjectionToken<string[]>('AVAILABLE_LANGS')\nexport const DEFAULT_LANG = new InjectionToken<string>('DEFAULT_LANG')\nexport const FALLBACK_LANG = new InjectionToken<string>('FALLBACK_LANG')\nexport const TRANSLATIONS_BASE_PATH = new InjectionToken<string>('TRANSLATIONS_BASE_PATH')\n","import { HttpClient } from '@angular/common/http'\nimport { Injectable, Optional, inject } from '@angular/core'\n\nimport { Translation, TranslocoLoader } from '@jsverse/transloco'\nimport { Observable } from 'rxjs'\n\nimport { TRANSLATIONS_BASE_PATH } from './translations.tokens'\n\n@Injectable()\nexport class QuangTranslationLoaderService implements TranslocoLoader {\n private readonly httpClient: HttpClient = inject(HttpClient)\n\n @Optional() private readonly translationBasePath: string = inject(TRANSLATIONS_BASE_PATH)\n\n getTranslation(lang: string): Observable<Translation> | Promise<Translation> {\n return this.httpClient.get<Translation>(`${this.translationBasePath ?? './'}assets/i18n/${lang}.json`)\n }\n}\n","import { Injectable, inject } from '@angular/core'\nimport { toSignal } from '@angular/core/rxjs-interop'\n\nimport { HashMap, SetTranslationOptions, Translation, TranslocoService } from '@jsverse/transloco'\n\nimport { AVAILABLE_LANGS, DEFAULT_LANG } from './translations.tokens'\n\n@Injectable()\nexport class QuangTranslationService {\n private readonly _translocoService: TranslocoService = inject(TranslocoService)\n\n activeLang = toSignal(this._translocoService.langChanges$, { initialValue: null })\n\n private readonly _availableLangs = inject(AVAILABLE_LANGS)\n\n private readonly _defaultLang = inject(DEFAULT_LANG)\n\n setActiveLang(lang: string): void {\n const targetLang = this._availableLangs.includes(lang) ? lang : this._defaultLang\n this._translocoService.setActiveLang(targetLang)\n }\n\n getActiveLang(): string | null {\n return this.activeLang()\n }\n\n translate(key: string, params?: HashMap): string {\n return this._translocoService.translate(key, params)\n }\n\n setTranslation(translation: Translation, lang?: string, options?: SetTranslationOptions) {\n return this._translocoService.setTranslation(translation, lang, options)\n }\n\n setTranslationKey(key: string, value: string, options?: Omit<SetTranslationOptions, 'merge'>) {\n return this._translocoService.setTranslationKey(key, value, options)\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core'\n\nimport { provideTransloco } from '@jsverse/transloco'\nimport { QuangFeature, QuangFeatureKind, quangFeature } from 'quang'\n\nimport { QuangTranslationLoaderService } from './translation-loader.service'\nimport { QuangTranslationService } from './translation.service'\n\nimport { AVAILABLE_LANGS, DEFAULT_LANG, FALLBACK_LANG, TRANSLATIONS_BASE_PATH } from './translations.tokens'\n\nexport interface TranslationConfig {\n availableLangs: string[]\n defaultLang: string\n fallbackLang: string\n translationsBasePath?: string\n reRenderOnLangChange?: boolean\n prodMode?: boolean\n failedRetries?: number\n logMissingKey?: boolean\n useFallbackTranslation?: boolean\n allowEmpty?: boolean\n}\n\n/**\n * @example\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideTranslation({\n * availableLangs: ['it', 'en'],\n * defaultLang: 'it',\n * fallbackLang: 'it',\n * })\n * ]\n * }\n */\nexport function provideTranslation(config: TranslationConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n QuangTranslationLoaderService,\n QuangTranslationService,\n provideTransloco({\n config: {\n availableLangs: config.availableLangs,\n defaultLang: config.defaultLang,\n fallbackLang: config.fallbackLang,\n reRenderOnLangChange: config.reRenderOnLangChange ?? true,\n prodMode: config.prodMode ?? true,\n failedRetries: config.failedRetries ?? 1,\n missingHandler: {\n logMissingKey: config.logMissingKey ?? true,\n useFallbackTranslation: config.useFallbackTranslation ?? true,\n allowEmpty: config.allowEmpty ?? false,\n },\n },\n loader: QuangTranslationLoaderService,\n }),\n {\n provide: AVAILABLE_LANGS,\n useValue: config.availableLangs,\n },\n {\n provide: DEFAULT_LANG,\n useValue: config.defaultLang,\n },\n {\n provide: FALLBACK_LANG,\n useValue: config.fallbackLang,\n },\n {\n provide: TRANSLATIONS_BASE_PATH,\n useValue: config.translationsBasePath,\n },\n ])\n}\n\nexport function withTranslation(config: TranslationConfig): QuangFeature<QuangFeatureKind.TranslationFeature> {\n return quangFeature(QuangFeatureKind.TranslationFeature, [provideTranslation(config)])\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quang-translation.mjs","sources":["../../../projects/quang/translation/translations.tokens.ts","../../../projects/quang/translation/translation-loader.service.ts","../../../projects/quang/translation/translation.service.ts","../../../projects/quang/translation/translation-providers.ts","../../../projects/quang/translation/quang-translation.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\n\nexport const AVAILABLE_LANGS = new InjectionToken<string[]>('AVAILABLE_LANGS')\nexport const DEFAULT_LANG = new InjectionToken<string>('DEFAULT_LANG')\nexport const FALLBACK_LANG = new InjectionToken<string>('FALLBACK_LANG')\nexport const TRANSLATIONS_BASE_PATH = new InjectionToken<string>('TRANSLATIONS_BASE_PATH')\n","import { HttpClient } from '@angular/common/http'\nimport { Injectable, Optional, inject } from '@angular/core'\n\nimport { Translation, TranslocoLoader } from '@jsverse/transloco'\nimport { Observable } from 'rxjs'\n\nimport { TRANSLATIONS_BASE_PATH } from './translations.tokens'\n\n@Injectable()\nexport class QuangTranslationLoaderService implements TranslocoLoader {\n private readonly httpClient: HttpClient = inject(HttpClient)\n\n @Optional() private readonly translationBasePath: string = inject(TRANSLATIONS_BASE_PATH)\n\n getTranslation(lang: string): Observable<Translation> | Promise<Translation> {\n return this.httpClient.get<Translation>(`${this.translationBasePath ?? './'}assets/i18n/${lang}.json`)\n }\n}\n","import { Injectable, inject } from '@angular/core'\nimport { toSignal } from '@angular/core/rxjs-interop'\n\nimport { HashMap, SetTranslationOptions, Translation, TranslocoService } from '@jsverse/transloco'\n\nimport { AVAILABLE_LANGS, DEFAULT_LANG } from './translations.tokens'\n\n@Injectable()\nexport class QuangTranslationService {\n private readonly _translocoService: TranslocoService = inject(TranslocoService)\n\n activeLang = toSignal(this._translocoService.langChanges$, { initialValue: null })\n\n private readonly _availableLangs = inject(AVAILABLE_LANGS)\n\n private readonly _defaultLang = inject(DEFAULT_LANG)\n\n setActiveLang(lang: string): void {\n const targetLang = this._availableLangs.includes(lang) ? lang : this._defaultLang\n this._translocoService.setActiveLang(targetLang)\n }\n\n getActiveLang(): string | null {\n return this.activeLang()\n }\n\n translate(key: string, params?: HashMap): string {\n return this._translocoService.translate(key, params)\n }\n\n setTranslation(translation: Translation, lang?: string, options?: SetTranslationOptions) {\n return this._translocoService.setTranslation(translation, lang, options)\n }\n\n setTranslationKey(key: string, value: string, options?: Omit<SetTranslationOptions, 'merge'>) {\n return this._translocoService.setTranslationKey(key, value, options)\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core'\n\nimport { provideTransloco } from '@jsverse/transloco'\nimport { QuangFeature, QuangFeatureKind, quangFeature } from 'quang'\n\nimport { QuangTranslationLoaderService } from './translation-loader.service'\nimport { QuangTranslationService } from './translation.service'\n\nimport { AVAILABLE_LANGS, DEFAULT_LANG, FALLBACK_LANG, TRANSLATIONS_BASE_PATH } from './translations.tokens'\n\nexport interface TranslationConfig {\n availableLangs: string[]\n defaultLang: string\n fallbackLang: string\n translationsBasePath?: string\n reRenderOnLangChange?: boolean\n prodMode?: boolean\n failedRetries?: number\n logMissingKey?: boolean\n useFallbackTranslation?: boolean\n allowEmpty?: boolean\n}\n\n/**\n * @example\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideTranslation({\n * availableLangs: ['it', 'en'],\n * defaultLang: 'it',\n * fallbackLang: 'it',\n * })\n * ]\n * }\n */\nexport function provideTranslation(config: TranslationConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n QuangTranslationLoaderService,\n QuangTranslationService,\n provideTransloco({\n config: {\n availableLangs: config.availableLangs,\n defaultLang: config.defaultLang,\n fallbackLang: config.fallbackLang,\n reRenderOnLangChange: config.reRenderOnLangChange ?? true,\n prodMode: config.prodMode ?? true,\n failedRetries: config.failedRetries ?? 1,\n missingHandler: {\n logMissingKey: config.logMissingKey ?? true,\n useFallbackTranslation: config.useFallbackTranslation ?? true,\n allowEmpty: config.allowEmpty ?? false,\n },\n },\n loader: QuangTranslationLoaderService,\n }),\n {\n provide: AVAILABLE_LANGS,\n useValue: config.availableLangs,\n },\n {\n provide: DEFAULT_LANG,\n useValue: config.defaultLang,\n },\n {\n provide: FALLBACK_LANG,\n useValue: config.fallbackLang,\n },\n {\n provide: TRANSLATIONS_BASE_PATH,\n useValue: config.translationsBasePath,\n },\n ])\n}\n\nexport function withTranslation(config: TranslationConfig): QuangFeature<QuangFeatureKind.TranslationFeature> {\n return quangFeature(QuangFeatureKind.TranslationFeature, [provideTranslation(config)])\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import * as _angular_cdk_overlay from '@angular/cdk/overlay';
2
2
  import { Overlay } from '@angular/cdk/overlay';
3
3
  import * as _angular_core from '@angular/core';
4
- import { AfterViewInit, OnDestroy, Type } from '@angular/core';
4
+ import { AfterViewInit, OnDestroy, Type, InjectionToken } from '@angular/core';
5
5
  import { CdkPortal } from '@angular/cdk/portal';
6
- import * as rxjs from 'rxjs';
6
+ import { Observable } from 'rxjs';
7
7
 
8
8
  type ModalAnimationMode = 'SLIDE_FROM_LEFT_TO_RIGHT' | 'SLIDE_FROM_RIGHT_TO_LEFT' | 'SLIDE_TOP_TO_BOTTOM' | 'SLIDE_BOTTOM_TO_TOP' | 'FADE';
9
9
 
@@ -52,8 +52,21 @@ declare class QuangModalService {
52
52
  hasOpenModals: _angular_core.Signal<boolean>;
53
53
  modalIds: _angular_core.Signal<string[]>;
54
54
  private modalClosedSubject;
55
- modalClosed$: rxjs.Observable<string>;
56
- showModal<T = unknown>(component: Type<T>, options: ModalOptions, componentInputs?: Record<string, unknown>): string;
55
+ modalClosed$: Observable<string>;
56
+ showModal<T = unknown>(component: Type<T>, options: ModalOptions, componentInputs?: Record<string, unknown>): {
57
+ id: string;
58
+ closeCallback: Observable<object | undefined>;
59
+ };
60
+ /**
61
+ * Closes a modal by its ID and emits optional data.
62
+ * @param id The ID of the modal to close.
63
+ * @param data Optional data to emit on close.
64
+ */
65
+ close(id: string, data?: object): void;
66
+ /**
67
+ * Hides a modal by its ID.
68
+ * @param id The ID of the modal to hide. If not provided, hides the last opened modal.
69
+ */
57
70
  hideModal(id?: string): void;
58
71
  private destroyModalInstance;
59
72
  private generateId;
@@ -61,5 +74,26 @@ declare class QuangModalService {
61
74
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<QuangModalService>;
62
75
  }
63
76
 
64
- export { QuangModalComponent, QuangModalService };
77
+ /**
78
+ * Injection token for the modal ID
79
+ */
80
+ declare const MODAL_ID: InjectionToken<string>;
81
+ /**
82
+ * Helper class to manage modal closure from within the modal component
83
+ */
84
+ declare class ModalRef {
85
+ private readonly modalService;
86
+ private readonly modalId;
87
+ /**
88
+ * Close the modal with optional data
89
+ * @param data Optional data to pass when closing the modal (e.g., which button was clicked)
90
+ */
91
+ close(data?: object): void;
92
+ /**
93
+ * Get the current modal ID
94
+ */
95
+ getId(): string;
96
+ }
97
+
98
+ export { MODAL_ID, ModalRef, QuangModalComponent, QuangModalService };
65
99
  export type { ModalAnimationMode, ModalOptions };
@@ -1,7 +1,6 @@
1
1
  import * as quang_overlay_toast from 'quang/overlay/toast';
2
2
  import * as _angular_core from '@angular/core';
3
3
  import { TemplateRef } from '@angular/core';
4
- import * as node_modules__ngrx_signals_src_deep_signal from 'node_modules/@ngrx/signals/src/deep-signal';
5
4
 
6
5
  interface ToastData {
7
6
  type: 'success' | 'warning' | 'error';
@@ -20,8 +19,8 @@ interface ToastData {
20
19
  declare class QuangToastService {
21
20
  private toastState;
22
21
  isShowing: _angular_core.Signal<boolean>;
23
- count: node_modules__ngrx_signals_src_deep_signal.Signal<number>;
24
- currentTimeout: node_modules__ngrx_signals_src_deep_signal.Signal<number | null>;
22
+ count: _angular_core.Signal<number>;
23
+ currentTimeout: _angular_core.Signal<number | null>;
25
24
  openToast(toastData: ToastData): void;
26
25
  closeToast(): void;
27
26
  currentToast: _angular_core.WritableSignal<ToastData | null>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "quang",
3
3
  "sideEffects": false,
4
- "version": "20.4.5",
4
+ "version": "20.5.0",
5
5
  "dependencies": {
6
6
  "tslib": "^2.3.0"
7
7
  },
@@ -71,6 +71,10 @@
71
71
  "types": "./data-handling/index.d.ts",
72
72
  "default": "./fesm2022/quang-data-handling.mjs"
73
73
  },
74
+ "./device": {
75
+ "types": "./device/index.d.ts",
76
+ "default": "./fesm2022/quang-device.mjs"
77
+ },
74
78
  "./forms": {
75
79
  "types": "./forms/index.d.ts",
76
80
  "default": "./fesm2022/quang-forms.mjs"
@@ -79,10 +83,6 @@
79
83
  "types": "./loader/index.d.ts",
80
84
  "default": "./fesm2022/quang-loader.mjs"
81
85
  },
82
- "./device": {
83
- "types": "./device/index.d.ts",
84
- "default": "./fesm2022/quang-device.mjs"
85
- },
86
86
  "./shared": {
87
87
  "types": "./shared/index.d.ts",
88
88
  "default": "./fesm2022/quang-shared.mjs"
@@ -111,37 +111,37 @@
111
111
  "types": "./components/input/index.d.ts",
112
112
  "default": "./fesm2022/quang-components-input.mjs"
113
113
  },
114
+ "./components/shared": {
115
+ "types": "./components/shared/index.d.ts",
116
+ "default": "./fesm2022/quang-components-shared.mjs"
117
+ },
114
118
  "./components/paginator": {
115
119
  "types": "./components/paginator/index.d.ts",
116
120
  "default": "./fesm2022/quang-components-paginator.mjs"
117
121
  },
118
- "./components/table": {
119
- "types": "./components/table/index.d.ts",
120
- "default": "./fesm2022/quang-components-table.mjs"
121
- },
122
122
  "./components/select": {
123
123
  "types": "./components/select/index.d.ts",
124
124
  "default": "./fesm2022/quang-components-select.mjs"
125
125
  },
126
- "./components/shared": {
127
- "types": "./components/shared/index.d.ts",
128
- "default": "./fesm2022/quang-components-shared.mjs"
126
+ "./components/table": {
127
+ "types": "./components/table/index.d.ts",
128
+ "default": "./fesm2022/quang-components-table.mjs"
129
129
  },
130
130
  "./components/wysiwyg": {
131
131
  "types": "./components/wysiwyg/index.d.ts",
132
132
  "default": "./fesm2022/quang-components-wysiwyg.mjs"
133
133
  },
134
- "./overlay/shared": {
135
- "types": "./overlay/shared/index.d.ts",
136
- "default": "./fesm2022/quang-overlay-shared.mjs"
134
+ "./overlay/popover": {
135
+ "types": "./overlay/popover/index.d.ts",
136
+ "default": "./fesm2022/quang-overlay-popover.mjs"
137
137
  },
138
138
  "./overlay/modal": {
139
139
  "types": "./overlay/modal/index.d.ts",
140
140
  "default": "./fesm2022/quang-overlay-modal.mjs"
141
141
  },
142
- "./overlay/popover": {
143
- "types": "./overlay/popover/index.d.ts",
144
- "default": "./fesm2022/quang-overlay-popover.mjs"
142
+ "./overlay/shared": {
143
+ "types": "./overlay/shared/index.d.ts",
144
+ "default": "./fesm2022/quang-overlay-shared.mjs"
145
145
  },
146
146
  "./overlay/toast": {
147
147
  "types": "./overlay/toast/index.d.ts",