@sapphire-ion/framework 1.2.32 → 1.2.36
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.
- package/esm2022/lib/core.module.mjs +10 -6
- package/esm2022/lib/services/popover-focus-trap.service.mjs +62 -0
- package/fesm2022/sapphire-ion-framework.mjs +67 -5
- package/fesm2022/sapphire-ion-framework.mjs.map +1 -1
- package/lib/components/stepper/step/step.component.d.ts +1 -1
- package/lib/core.module.d.ts +3 -1
- package/lib/services/popover-focus-trap.service.d.ts +13 -0
- package/package.json +1 -1
|
@@ -2,25 +2,29 @@ import { InjectionToken, NgModule } from '@angular/core';
|
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { EnvironmentService } from './services/environment.service';
|
|
4
4
|
import { ModalFocusTrapService } from './services/modal-focus-trap.service';
|
|
5
|
+
import { PopoverFocusTrapService } from './services/popover-focus-trap.service';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "./services/modal-focus-trap.service";
|
|
8
|
+
import * as i2 from "./services/popover-focus-trap.service";
|
|
7
9
|
export const EnvironmentInjectionToken = new InjectionToken('Environment');
|
|
8
10
|
export class SapphireIonFrameworkModule {
|
|
9
|
-
constructor(mis) {
|
|
11
|
+
constructor(mis, pos) {
|
|
10
12
|
this.mis = mis;
|
|
13
|
+
this.pos = pos;
|
|
11
14
|
}
|
|
12
15
|
static forRoot(config) {
|
|
13
16
|
return {
|
|
14
17
|
ngModule: SapphireIonFrameworkModule,
|
|
15
18
|
providers: [
|
|
16
19
|
ModalFocusTrapService,
|
|
20
|
+
PopoverFocusTrapService,
|
|
17
21
|
EnvironmentService, { provide: EnvironmentInjectionToken, useValue: config },
|
|
18
22
|
]
|
|
19
23
|
};
|
|
20
24
|
}
|
|
21
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SapphireIonFrameworkModule, deps: [{ token: i1.ModalFocusTrapService }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SapphireIonFrameworkModule, deps: [{ token: i1.ModalFocusTrapService }, { token: i2.PopoverFocusTrapService }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
22
26
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: SapphireIonFrameworkModule, imports: [CommonModule] }); }
|
|
23
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SapphireIonFrameworkModule, providers: [ModalFocusTrapService], imports: [CommonModule] }); }
|
|
27
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SapphireIonFrameworkModule, providers: [ModalFocusTrapService, PopoverFocusTrapService], imports: [CommonModule] }); }
|
|
24
28
|
}
|
|
25
29
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SapphireIonFrameworkModule, decorators: [{
|
|
26
30
|
type: NgModule,
|
|
@@ -28,7 +32,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
28
32
|
declarations: [],
|
|
29
33
|
exports: [],
|
|
30
34
|
imports: [CommonModule,],
|
|
31
|
-
providers: [ModalFocusTrapService],
|
|
35
|
+
providers: [ModalFocusTrapService, PopoverFocusTrapService],
|
|
32
36
|
}]
|
|
33
|
-
}], ctorParameters: () => [{ type: i1.ModalFocusTrapService }] });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
}], ctorParameters: () => [{ type: i1.ModalFocusTrapService }, { type: i2.PopoverFocusTrapService }] });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvcmUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7QUFFaEYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxjQUFjLENBQWMsYUFBYSxDQUFDLENBQUM7QUFPeEYsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUFxQixHQUEwQixFQUFVLEdBQTZCO1FBQWpFLFFBQUcsR0FBSCxHQUFHLENBQXVCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBMEI7SUFBSSxDQUFDO0lBRTNGLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBbUI7UUFDaEMsT0FBTztZQUNMLFFBQVEsRUFBRSwwQkFBMEI7WUFDcEMsU0FBUyxFQUFFO2dCQUNULHFCQUFxQjtnQkFDckIsdUJBQXVCO2dCQUN2QixrQkFBa0IsRUFBRSxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO2FBQzdFO1NBQ0YsQ0FBQTtJQUNILENBQUM7K0dBWlUsMEJBQTBCO2dIQUExQiwwQkFBMEIsWUFIMUIsWUFBWTtnSEFHWiwwQkFBMEIsYUFGMUIsQ0FBRSxxQkFBcUIsRUFBRyx1QkFBdUIsQ0FBQyxZQURsRCxZQUFZOzs0RkFHWiwwQkFBMEI7a0JBTnRDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBTyxFQUFFO29CQUNoQixPQUFPLEVBQUUsQ0FBRSxZQUFZLEVBQUc7b0JBQzFCLFNBQVMsRUFBRSxDQUFFLHFCQUFxQixFQUFHLHVCQUF1QixDQUFDO2lCQUM5RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuL2NsYXNzZXMvZW52aXJvbm1lbnQnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Vudmlyb25tZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2RhbEZvY3VzVHJhcFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL21vZGFsLWZvY3VzLXRyYXAuc2VydmljZSc7XHJcbmltcG9ydCB7IFBvcG92ZXJGb2N1c1RyYXBTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wb3BvdmVyLWZvY3VzLXRyYXAuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3QgRW52aXJvbm1lbnRJbmplY3Rpb25Ub2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxFbnZpcm9ubWVudD4oJ0Vudmlyb25tZW50Jyk7XHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXSxcclxuICBleHBvcnRzICAgICA6IFtdLFxyXG4gIGltcG9ydHM6IFsgQ29tbW9uTW9kdWxlLCBdLFxyXG4gIHByb3ZpZGVyczogWyBNb2RhbEZvY3VzVHJhcFNlcnZpY2UgLCBQb3BvdmVyRm9jdXNUcmFwU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTYXBwaGlyZUlvbkZyYW1ld29ya01vZHVsZSB7IFxyXG4gIGNvbnN0cnVjdG9yKCBwcml2YXRlIG1pczogTW9kYWxGb2N1c1RyYXBTZXJ2aWNlLCBwcml2YXRlIHBvcyA6IFBvcG92ZXJGb2N1c1RyYXBTZXJ2aWNlICkge31cclxuXHJcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnOiBFbnZpcm9ubWVudCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8U2FwcGhpcmVJb25GcmFtZXdvcmtNb2R1bGU+IHtcclxuICAgIHJldHVybiB7IFxyXG4gICAgICBuZ01vZHVsZTogU2FwcGhpcmVJb25GcmFtZXdvcmtNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogWyBcclxuICAgICAgICBNb2RhbEZvY3VzVHJhcFNlcnZpY2UsXHJcbiAgICAgICAgUG9wb3ZlckZvY3VzVHJhcFNlcnZpY2UsXHJcbiAgICAgICAgRW52aXJvbm1lbnRTZXJ2aWNlLCB7IHByb3ZpZGU6IEVudmlyb25tZW50SW5qZWN0aW9uVG9rZW4sIHVzZVZhbHVlOiBjb25maWcgfSwgXHJcbiAgICAgIF1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Corrige o focus trap em modais do Ionic, permite que o foco não fique preso dentro do popover.
|
|
5
|
+
* Utilizado para concertar interatividade com popovers e outros elementos que podem ser interativos fora do popover.
|
|
6
|
+
*/
|
|
7
|
+
export class PopoverFocusTrapService {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.initGlobalFocusTrapDisable();
|
|
10
|
+
}
|
|
11
|
+
initGlobalFocusTrapDisable() {
|
|
12
|
+
// Wait for the platform to be ready
|
|
13
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
14
|
+
this.setuppopoverObserver();
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
setuppopoverObserver() {
|
|
18
|
+
// Create a mutation observer to watch for new popovers
|
|
19
|
+
const observer = new MutationObserver((mutations) => {
|
|
20
|
+
mutations.forEach((mutation) => {
|
|
21
|
+
mutation.addedNodes.forEach((node) => {
|
|
22
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
23
|
+
const element = node;
|
|
24
|
+
// Check if the added node is an ion-popover
|
|
25
|
+
if (element.tagName?.toLowerCase() === 'ion-popover') {
|
|
26
|
+
this.disableFocusTrap(element);
|
|
27
|
+
}
|
|
28
|
+
// Check for ion-popover children
|
|
29
|
+
const popovers = element.querySelectorAll?.('ion-popover');
|
|
30
|
+
popovers?.forEach(popover => this.disableFocusTrap(popover));
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
// Start observing
|
|
36
|
+
observer.observe(document.body, {
|
|
37
|
+
childList: true,
|
|
38
|
+
subtree: true
|
|
39
|
+
});
|
|
40
|
+
// Also handle existing popovers
|
|
41
|
+
const existingpopovers = document.querySelectorAll('ion-popover');
|
|
42
|
+
existingpopovers.forEach(popover => this.disableFocusTrap(popover));
|
|
43
|
+
}
|
|
44
|
+
disableFocusTrap(popover) {
|
|
45
|
+
// Add the CSS class
|
|
46
|
+
popover.classList.add('ion-disable-focus-trap');
|
|
47
|
+
// Set the property if it exists
|
|
48
|
+
const popoverElement = popover;
|
|
49
|
+
if (popoverElement.disableFocusTrap !== undefined) {
|
|
50
|
+
popoverElement.disableFocusTrap = true;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverFocusTrapService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
54
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverFocusTrapService, providedIn: 'root' }); }
|
|
55
|
+
}
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverFocusTrapService, decorators: [{
|
|
57
|
+
type: Injectable,
|
|
58
|
+
args: [{
|
|
59
|
+
providedIn: 'root'
|
|
60
|
+
}]
|
|
61
|
+
}], ctorParameters: () => [] });
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1mb2N1cy10cmFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3BvcG92ZXItZm9jdXMtdHJhcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDOzs7R0FHRztBQUlILE1BQU0sT0FBTyx1QkFBdUI7SUFFbEM7UUFDRSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLG9DQUFvQztRQUNwQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO1lBQ2pELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQix1REFBdUQ7UUFDdkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2xELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDN0IsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDbkMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBZSxDQUFDO3dCQUVoQyw0Q0FBNEM7d0JBQzVDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxhQUFhLEVBQUUsQ0FBQzs0QkFDckQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNqQyxDQUFDO3dCQUVELGlDQUFpQzt3QkFDakMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7d0JBQzNELFFBQVEsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDL0QsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxrQkFBa0I7UUFDbEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO1lBQzlCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUM7UUFFSCxnQ0FBZ0M7UUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE9BQWdCO1FBQ3ZDLG9CQUFvQjtRQUNwQixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRWhELGdDQUFnQztRQUNoQyxNQUFNLGNBQWMsR0FBRyxPQUFjLENBQUM7UUFDdEMsSUFBSSxjQUFjLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbEQsY0FBYyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQzsrR0F0RFUsdUJBQXVCO21IQUF2Qix1QkFBdUIsY0FGdEIsTUFBTTs7NEZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBDb3JyaWdlIG8gZm9jdXMgdHJhcCBlbSBtb2RhaXMgZG8gSW9uaWMsIHBlcm1pdGUgcXVlIG8gZm9jbyBuw6NvIGZpcXVlIHByZXNvIGRlbnRybyBkbyBwb3BvdmVyLlxyXG4gKiBVdGlsaXphZG8gcGFyYSBjb25jZXJ0YXIgaW50ZXJhdGl2aWRhZGUgY29tIHBvcG92ZXJzIGUgb3V0cm9zIGVsZW1lbnRvcyBxdWUgcG9kZW0gc2VyIGludGVyYXRpdm9zIGZvcmEgZG8gcG9wb3Zlci5cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBvcG92ZXJGb2N1c1RyYXBTZXJ2aWNlIHtcclxuICBcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuaW5pdEdsb2JhbEZvY3VzVHJhcERpc2FibGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdEdsb2JhbEZvY3VzVHJhcERpc2FibGUoKSB7XHJcbiAgICAvLyBXYWl0IGZvciB0aGUgcGxhdGZvcm0gdG8gYmUgcmVhZHlcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0dXBwb3BvdmVyT2JzZXJ2ZXIoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cHBvcG92ZXJPYnNlcnZlcigpIHtcclxuICAgIC8vIENyZWF0ZSBhIG11dGF0aW9uIG9ic2VydmVyIHRvIHdhdGNoIGZvciBuZXcgcG9wb3ZlcnNcclxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xyXG4gICAgICBtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcclxuICAgICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gbm9kZSBhcyBFbGVtZW50O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFkZGVkIG5vZGUgaXMgYW4gaW9uLXBvcG92ZXJcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2lvbi1wb3BvdmVyJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUZvY3VzVHJhcChlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGlvbi1wb3BvdmVyIGNoaWxkcmVuXHJcbiAgICAgICAgICAgIGNvbnN0IHBvcG92ZXJzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsPy4oJ2lvbi1wb3BvdmVyJyk7XHJcbiAgICAgICAgICAgIHBvcG92ZXJzPy5mb3JFYWNoKHBvcG92ZXIgPT4gdGhpcy5kaXNhYmxlRm9jdXNUcmFwKHBvcG92ZXIpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBTdGFydCBvYnNlcnZpbmdcclxuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge1xyXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFsc28gaGFuZGxlIGV4aXN0aW5nIHBvcG92ZXJzXHJcbiAgICBjb25zdCBleGlzdGluZ3BvcG92ZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW9uLXBvcG92ZXInKTtcclxuICAgIGV4aXN0aW5ncG9wb3ZlcnMuZm9yRWFjaChwb3BvdmVyID0+IHRoaXMuZGlzYWJsZUZvY3VzVHJhcChwb3BvdmVyKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc2FibGVGb2N1c1RyYXAocG9wb3ZlcjogRWxlbWVudCkge1xyXG4gICAgLy8gQWRkIHRoZSBDU1MgY2xhc3NcclxuICAgIHBvcG92ZXIuY2xhc3NMaXN0LmFkZCgnaW9uLWRpc2FibGUtZm9jdXMtdHJhcCcpO1xyXG4gICAgXHJcbiAgICAvLyBTZXQgdGhlIHByb3BlcnR5IGlmIGl0IGV4aXN0c1xyXG4gICAgY29uc3QgcG9wb3ZlckVsZW1lbnQgPSBwb3BvdmVyIGFzIGFueTtcclxuICAgIGlmIChwb3BvdmVyRWxlbWVudC5kaXNhYmxlRm9jdXNUcmFwICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcG9wb3ZlckVsZW1lbnQuZGlzYWJsZUZvY3VzVHJhcCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG59Il19
|
|
@@ -688,23 +688,85 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
688
688
|
}]
|
|
689
689
|
}], ctorParameters: () => [] });
|
|
690
690
|
|
|
691
|
+
/**
|
|
692
|
+
* Corrige o focus trap em modais do Ionic, permite que o foco não fique preso dentro do popover.
|
|
693
|
+
* Utilizado para concertar interatividade com popovers e outros elementos que podem ser interativos fora do popover.
|
|
694
|
+
*/
|
|
695
|
+
class PopoverFocusTrapService {
|
|
696
|
+
constructor() {
|
|
697
|
+
this.initGlobalFocusTrapDisable();
|
|
698
|
+
}
|
|
699
|
+
initGlobalFocusTrapDisable() {
|
|
700
|
+
// Wait for the platform to be ready
|
|
701
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
702
|
+
this.setuppopoverObserver();
|
|
703
|
+
});
|
|
704
|
+
}
|
|
705
|
+
setuppopoverObserver() {
|
|
706
|
+
// Create a mutation observer to watch for new popovers
|
|
707
|
+
const observer = new MutationObserver((mutations) => {
|
|
708
|
+
mutations.forEach((mutation) => {
|
|
709
|
+
mutation.addedNodes.forEach((node) => {
|
|
710
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
711
|
+
const element = node;
|
|
712
|
+
// Check if the added node is an ion-popover
|
|
713
|
+
if (element.tagName?.toLowerCase() === 'ion-popover') {
|
|
714
|
+
this.disableFocusTrap(element);
|
|
715
|
+
}
|
|
716
|
+
// Check for ion-popover children
|
|
717
|
+
const popovers = element.querySelectorAll?.('ion-popover');
|
|
718
|
+
popovers?.forEach(popover => this.disableFocusTrap(popover));
|
|
719
|
+
}
|
|
720
|
+
});
|
|
721
|
+
});
|
|
722
|
+
});
|
|
723
|
+
// Start observing
|
|
724
|
+
observer.observe(document.body, {
|
|
725
|
+
childList: true,
|
|
726
|
+
subtree: true
|
|
727
|
+
});
|
|
728
|
+
// Also handle existing popovers
|
|
729
|
+
const existingpopovers = document.querySelectorAll('ion-popover');
|
|
730
|
+
existingpopovers.forEach(popover => this.disableFocusTrap(popover));
|
|
731
|
+
}
|
|
732
|
+
disableFocusTrap(popover) {
|
|
733
|
+
// Add the CSS class
|
|
734
|
+
popover.classList.add('ion-disable-focus-trap');
|
|
735
|
+
// Set the property if it exists
|
|
736
|
+
const popoverElement = popover;
|
|
737
|
+
if (popoverElement.disableFocusTrap !== undefined) {
|
|
738
|
+
popoverElement.disableFocusTrap = true;
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverFocusTrapService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
742
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverFocusTrapService, providedIn: 'root' }); }
|
|
743
|
+
}
|
|
744
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverFocusTrapService, decorators: [{
|
|
745
|
+
type: Injectable,
|
|
746
|
+
args: [{
|
|
747
|
+
providedIn: 'root'
|
|
748
|
+
}]
|
|
749
|
+
}], ctorParameters: () => [] });
|
|
750
|
+
|
|
691
751
|
const EnvironmentInjectionToken = new InjectionToken('Environment');
|
|
692
752
|
class SapphireIonFrameworkModule {
|
|
693
|
-
constructor(mis) {
|
|
753
|
+
constructor(mis, pos) {
|
|
694
754
|
this.mis = mis;
|
|
755
|
+
this.pos = pos;
|
|
695
756
|
}
|
|
696
757
|
static forRoot(config) {
|
|
697
758
|
return {
|
|
698
759
|
ngModule: SapphireIonFrameworkModule,
|
|
699
760
|
providers: [
|
|
700
761
|
ModalFocusTrapService,
|
|
762
|
+
PopoverFocusTrapService,
|
|
701
763
|
EnvironmentService, { provide: EnvironmentInjectionToken, useValue: config },
|
|
702
764
|
]
|
|
703
765
|
};
|
|
704
766
|
}
|
|
705
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SapphireIonFrameworkModule, deps: [{ token: ModalFocusTrapService }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
767
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SapphireIonFrameworkModule, deps: [{ token: ModalFocusTrapService }, { token: PopoverFocusTrapService }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
706
768
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: SapphireIonFrameworkModule, imports: [CommonModule] }); }
|
|
707
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SapphireIonFrameworkModule, providers: [ModalFocusTrapService], imports: [CommonModule] }); }
|
|
769
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SapphireIonFrameworkModule, providers: [ModalFocusTrapService, PopoverFocusTrapService], imports: [CommonModule] }); }
|
|
708
770
|
}
|
|
709
771
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SapphireIonFrameworkModule, decorators: [{
|
|
710
772
|
type: NgModule,
|
|
@@ -712,9 +774,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
712
774
|
declarations: [],
|
|
713
775
|
exports: [],
|
|
714
776
|
imports: [CommonModule,],
|
|
715
|
-
providers: [ModalFocusTrapService],
|
|
777
|
+
providers: [ModalFocusTrapService, PopoverFocusTrapService],
|
|
716
778
|
}]
|
|
717
|
-
}], ctorParameters: () => [{ type: ModalFocusTrapService }] });
|
|
779
|
+
}], ctorParameters: () => [{ type: ModalFocusTrapService }, { type: PopoverFocusTrapService }] });
|
|
718
780
|
|
|
719
781
|
class Environment {
|
|
720
782
|
get defaultPageLimit() {
|