@cqa-lib/cqa-ui 1.0.12 → 1.0.13
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/esm2020/lib/utils/tw-overlay-container.mjs +46 -2
- package/fesm2015/cqa-lib-cqa-ui.mjs +45 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +45 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/utils/tw-overlay-container.d.ts +7 -1
- package/package.json +1 -1
- package/styles.css +1 -1
|
@@ -2,16 +2,60 @@ import { Injectable } from '@angular/core';
|
|
|
2
2
|
import { OverlayContainer } from '@angular/cdk/overlay';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
/**
|
|
5
|
-
* Ensures Angular CDK overlay content (e.g., MatSelect, Datepicker panels)
|
|
5
|
+
* Ensures Angular CDK overlay content (e.g., MatSelect, Datepicker panels, library dialogs)
|
|
6
6
|
* is nested under an element with id="cqa-ui-root" so Tailwind utilities
|
|
7
7
|
* configured with important: '#cqa-ui-root' are applied inside overlays.
|
|
8
|
+
*
|
|
9
|
+
* IMPORTANT: Only sets id="cqa-ui-root" when library overlays are present.
|
|
10
|
+
* Portal Material dialogs should NOT have this ID to prevent library CSS from affecting them.
|
|
8
11
|
*/
|
|
9
12
|
export class TailwindOverlayContainer extends OverlayContainer {
|
|
13
|
+
constructor() {
|
|
14
|
+
super(...arguments);
|
|
15
|
+
this.libraryOverlayCount = 0;
|
|
16
|
+
}
|
|
10
17
|
_createContainer() {
|
|
11
18
|
super._createContainer();
|
|
12
19
|
if (this._containerElement) {
|
|
20
|
+
// Don't set ID initially - we'll set it dynamically when library overlays are created
|
|
21
|
+
this._containerElement.id = '';
|
|
22
|
+
// Use MutationObserver to detect when library overlays are created/destroyed
|
|
23
|
+
this.observeLibraryOverlays();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
observeLibraryOverlays() {
|
|
27
|
+
if (!this._containerElement)
|
|
28
|
+
return;
|
|
29
|
+
const observer = new MutationObserver(() => {
|
|
30
|
+
this.updateContainerId();
|
|
31
|
+
});
|
|
32
|
+
observer.observe(this._containerElement, {
|
|
33
|
+
childList: true,
|
|
34
|
+
subtree: true,
|
|
35
|
+
});
|
|
36
|
+
// Also check immediately in case overlays already exist
|
|
37
|
+
setTimeout(() => this.updateContainerId(), 0);
|
|
38
|
+
}
|
|
39
|
+
updateContainerId() {
|
|
40
|
+
if (!this._containerElement)
|
|
41
|
+
return;
|
|
42
|
+
// Count library overlays (dialogs, select panels, datepicker panels)
|
|
43
|
+
const libraryDialogs = this._containerElement.querySelectorAll('.cqa-dialog-panel').length;
|
|
44
|
+
const libraryBackdrops = this._containerElement.querySelectorAll('.cqa-dialog-backdrop').length;
|
|
45
|
+
const librarySelectPanels = this._containerElement.querySelectorAll('.ctc-select-panel').length;
|
|
46
|
+
const libraryDatePanels = this._containerElement.querySelectorAll('.ctc-date-range-panel').length;
|
|
47
|
+
const totalLibraryOverlays = libraryDialogs + libraryBackdrops + librarySelectPanels + libraryDatePanels;
|
|
48
|
+
// Check for portal Material dialogs (those without .cqa-dialog-panel)
|
|
49
|
+
const portalDialogs = this._containerElement.querySelectorAll('.mat-dialog-container:not(.cqa-dialog-panel)').length;
|
|
50
|
+
if (totalLibraryOverlays > 0) {
|
|
51
|
+
// Library overlays exist - set the ID
|
|
13
52
|
this._containerElement.id = 'cqa-ui-root';
|
|
14
53
|
}
|
|
54
|
+
else if (portalDialogs > 0 && totalLibraryOverlays === 0) {
|
|
55
|
+
// Only portal dialogs exist - remove the ID to prevent library CSS from affecting them
|
|
56
|
+
this._containerElement.id = '';
|
|
57
|
+
}
|
|
58
|
+
// If both exist, keep the ID (library overlays need it, CSS resets will handle portal dialogs)
|
|
15
59
|
}
|
|
16
60
|
}
|
|
17
61
|
TailwindOverlayContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TailwindOverlayContainer, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -19,4 +63,4 @@ TailwindOverlayContainer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0
|
|
|
19
63
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TailwindOverlayContainer, decorators: [{
|
|
20
64
|
type: Injectable
|
|
21
65
|
}] });
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHctb3ZlcmxheS1jb250YWluZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL3R3LW92ZXJsYXktY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBRXhEOzs7Ozs7O0dBT0c7QUFFSCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsZ0JBQWdCO0lBRDlEOztRQUVVLHdCQUFtQixHQUFHLENBQUMsQ0FBQztLQW9EakM7SUFsRG9CLGdCQUFnQjtRQUNqQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixzRkFBc0Y7WUFDdEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFFL0IsNkVBQTZFO1lBQzdFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU87UUFFcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7WUFDekMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN2QyxTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsd0RBQXdEO1FBQ3hELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQUUsT0FBTztRQUVwQyxxRUFBcUU7UUFDckUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzNGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ2hHLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ2hHLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUMsTUFBTSxDQUFDO1FBRWxHLE1BQU0sb0JBQW9CLEdBQUcsY0FBYyxHQUFHLGdCQUFnQixHQUFHLG1CQUFtQixHQUFHLGlCQUFpQixDQUFDO1FBRXpHLHNFQUFzRTtRQUN0RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsOENBQThDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFckgsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLEVBQUU7WUFDNUIsc0NBQXNDO1lBQ3RDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDO1NBQzNDO2FBQU0sSUFBSSxhQUFhLEdBQUcsQ0FBQyxJQUFJLG9CQUFvQixLQUFLLENBQUMsRUFBRTtZQUMxRCx1RkFBdUY7WUFDdkYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDaEM7UUFDRCwrRkFBK0Y7SUFDakcsQ0FBQzs7cUhBcERVLHdCQUF3Qjt5SEFBeEIsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPdmVybGF5Q29udGFpbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuXG4vKipcbiAqIEVuc3VyZXMgQW5ndWxhciBDREsgb3ZlcmxheSBjb250ZW50IChlLmcuLCBNYXRTZWxlY3QsIERhdGVwaWNrZXIgcGFuZWxzLCBsaWJyYXJ5IGRpYWxvZ3MpXG4gKiBpcyBuZXN0ZWQgdW5kZXIgYW4gZWxlbWVudCB3aXRoIGlkPVwiY3FhLXVpLXJvb3RcIiBzbyBUYWlsd2luZCB1dGlsaXRpZXNcbiAqIGNvbmZpZ3VyZWQgd2l0aCBpbXBvcnRhbnQ6ICcjY3FhLXVpLXJvb3QnIGFyZSBhcHBsaWVkIGluc2lkZSBvdmVybGF5cy5cbiAqIFxuICogSU1QT1JUQU5UOiBPbmx5IHNldHMgaWQ9XCJjcWEtdWktcm9vdFwiIHdoZW4gbGlicmFyeSBvdmVybGF5cyBhcmUgcHJlc2VudC5cbiAqIFBvcnRhbCBNYXRlcmlhbCBkaWFsb2dzIHNob3VsZCBOT1QgaGF2ZSB0aGlzIElEIHRvIHByZXZlbnQgbGlicmFyeSBDU1MgZnJvbSBhZmZlY3RpbmcgdGhlbS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhaWx3aW5kT3ZlcmxheUNvbnRhaW5lciBleHRlbmRzIE92ZXJsYXlDb250YWluZXIge1xuICBwcml2YXRlIGxpYnJhcnlPdmVybGF5Q291bnQgPSAwO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBfY3JlYXRlQ29udGFpbmVyKCk6IHZvaWQge1xuICAgIHN1cGVyLl9jcmVhdGVDb250YWluZXIoKTtcbiAgICBpZiAodGhpcy5fY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgLy8gRG9uJ3Qgc2V0IElEIGluaXRpYWxseSAtIHdlJ2xsIHNldCBpdCBkeW5hbWljYWxseSB3aGVuIGxpYnJhcnkgb3ZlcmxheXMgYXJlIGNyZWF0ZWRcbiAgICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuaWQgPSAnJztcbiAgICAgIFxuICAgICAgLy8gVXNlIE11dGF0aW9uT2JzZXJ2ZXIgdG8gZGV0ZWN0IHdoZW4gbGlicmFyeSBvdmVybGF5cyBhcmUgY3JlYXRlZC9kZXN0cm95ZWRcbiAgICAgIHRoaXMub2JzZXJ2ZUxpYnJhcnlPdmVybGF5cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZUxpYnJhcnlPdmVybGF5cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2NvbnRhaW5lckVsZW1lbnQpIHJldHVybjtcblxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb250YWluZXJJZCgpO1xuICAgIH0pO1xuXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9jb250YWluZXJFbGVtZW50LCB7XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gQWxzbyBjaGVjayBpbW1lZGlhdGVseSBpbiBjYXNlIG92ZXJsYXlzIGFscmVhZHkgZXhpc3RcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlQ29udGFpbmVySWQoKSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbnRhaW5lcklkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY29udGFpbmVyRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgLy8gQ291bnQgbGlicmFyeSBvdmVybGF5cyAoZGlhbG9ncywgc2VsZWN0IHBhbmVscywgZGF0ZXBpY2tlciBwYW5lbHMpXG4gICAgY29uc3QgbGlicmFyeURpYWxvZ3MgPSB0aGlzLl9jb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jcWEtZGlhbG9nLXBhbmVsJykubGVuZ3RoO1xuICAgIGNvbnN0IGxpYnJhcnlCYWNrZHJvcHMgPSB0aGlzLl9jb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jcWEtZGlhbG9nLWJhY2tkcm9wJykubGVuZ3RoO1xuICAgIGNvbnN0IGxpYnJhcnlTZWxlY3RQYW5lbHMgPSB0aGlzLl9jb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jdGMtc2VsZWN0LXBhbmVsJykubGVuZ3RoO1xuICAgIGNvbnN0IGxpYnJhcnlEYXRlUGFuZWxzID0gdGhpcy5fY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY3RjLWRhdGUtcmFuZ2UtcGFuZWwnKS5sZW5ndGg7XG4gICAgXG4gICAgY29uc3QgdG90YWxMaWJyYXJ5T3ZlcmxheXMgPSBsaWJyYXJ5RGlhbG9ncyArIGxpYnJhcnlCYWNrZHJvcHMgKyBsaWJyYXJ5U2VsZWN0UGFuZWxzICsgbGlicmFyeURhdGVQYW5lbHM7XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIHBvcnRhbCBNYXRlcmlhbCBkaWFsb2dzICh0aG9zZSB3aXRob3V0IC5jcWEtZGlhbG9nLXBhbmVsKVxuICAgIGNvbnN0IHBvcnRhbERpYWxvZ3MgPSB0aGlzLl9jb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYXQtZGlhbG9nLWNvbnRhaW5lcjpub3QoLmNxYS1kaWFsb2ctcGFuZWwpJykubGVuZ3RoO1xuXG4gICAgaWYgKHRvdGFsTGlicmFyeU92ZXJsYXlzID4gMCkge1xuICAgICAgLy8gTGlicmFyeSBvdmVybGF5cyBleGlzdCAtIHNldCB0aGUgSURcbiAgICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuaWQgPSAnY3FhLXVpLXJvb3QnO1xuICAgIH0gZWxzZSBpZiAocG9ydGFsRGlhbG9ncyA+IDAgJiYgdG90YWxMaWJyYXJ5T3ZlcmxheXMgPT09IDApIHtcbiAgICAgIC8vIE9ubHkgcG9ydGFsIGRpYWxvZ3MgZXhpc3QgLSByZW1vdmUgdGhlIElEIHRvIHByZXZlbnQgbGlicmFyeSBDU1MgZnJvbSBhZmZlY3RpbmcgdGhlbVxuICAgICAgdGhpcy5fY29udGFpbmVyRWxlbWVudC5pZCA9ICcnO1xuICAgIH1cbiAgICAvLyBJZiBib3RoIGV4aXN0LCBrZWVwIHRoZSBJRCAobGlicmFyeSBvdmVybGF5cyBuZWVkIGl0LCBDU1MgcmVzZXRzIHdpbGwgaGFuZGxlIHBvcnRhbCBkaWFsb2dzKVxuICB9XG59XG5cblxuIl19
|
|
@@ -3403,16 +3403,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
3403
3403
|
}] } });
|
|
3404
3404
|
|
|
3405
3405
|
/**
|
|
3406
|
-
* Ensures Angular CDK overlay content (e.g., MatSelect, Datepicker panels)
|
|
3406
|
+
* Ensures Angular CDK overlay content (e.g., MatSelect, Datepicker panels, library dialogs)
|
|
3407
3407
|
* is nested under an element with id="cqa-ui-root" so Tailwind utilities
|
|
3408
3408
|
* configured with important: '#cqa-ui-root' are applied inside overlays.
|
|
3409
|
+
*
|
|
3410
|
+
* IMPORTANT: Only sets id="cqa-ui-root" when library overlays are present.
|
|
3411
|
+
* Portal Material dialogs should NOT have this ID to prevent library CSS from affecting them.
|
|
3409
3412
|
*/
|
|
3410
3413
|
class TailwindOverlayContainer extends OverlayContainer {
|
|
3414
|
+
constructor() {
|
|
3415
|
+
super(...arguments);
|
|
3416
|
+
this.libraryOverlayCount = 0;
|
|
3417
|
+
}
|
|
3411
3418
|
_createContainer() {
|
|
3412
3419
|
super._createContainer();
|
|
3413
3420
|
if (this._containerElement) {
|
|
3421
|
+
// Don't set ID initially - we'll set it dynamically when library overlays are created
|
|
3422
|
+
this._containerElement.id = '';
|
|
3423
|
+
// Use MutationObserver to detect when library overlays are created/destroyed
|
|
3424
|
+
this.observeLibraryOverlays();
|
|
3425
|
+
}
|
|
3426
|
+
}
|
|
3427
|
+
observeLibraryOverlays() {
|
|
3428
|
+
if (!this._containerElement)
|
|
3429
|
+
return;
|
|
3430
|
+
const observer = new MutationObserver(() => {
|
|
3431
|
+
this.updateContainerId();
|
|
3432
|
+
});
|
|
3433
|
+
observer.observe(this._containerElement, {
|
|
3434
|
+
childList: true,
|
|
3435
|
+
subtree: true,
|
|
3436
|
+
});
|
|
3437
|
+
// Also check immediately in case overlays already exist
|
|
3438
|
+
setTimeout(() => this.updateContainerId(), 0);
|
|
3439
|
+
}
|
|
3440
|
+
updateContainerId() {
|
|
3441
|
+
if (!this._containerElement)
|
|
3442
|
+
return;
|
|
3443
|
+
// Count library overlays (dialogs, select panels, datepicker panels)
|
|
3444
|
+
const libraryDialogs = this._containerElement.querySelectorAll('.cqa-dialog-panel').length;
|
|
3445
|
+
const libraryBackdrops = this._containerElement.querySelectorAll('.cqa-dialog-backdrop').length;
|
|
3446
|
+
const librarySelectPanels = this._containerElement.querySelectorAll('.ctc-select-panel').length;
|
|
3447
|
+
const libraryDatePanels = this._containerElement.querySelectorAll('.ctc-date-range-panel').length;
|
|
3448
|
+
const totalLibraryOverlays = libraryDialogs + libraryBackdrops + librarySelectPanels + libraryDatePanels;
|
|
3449
|
+
// Check for portal Material dialogs (those without .cqa-dialog-panel)
|
|
3450
|
+
const portalDialogs = this._containerElement.querySelectorAll('.mat-dialog-container:not(.cqa-dialog-panel)').length;
|
|
3451
|
+
if (totalLibraryOverlays > 0) {
|
|
3452
|
+
// Library overlays exist - set the ID
|
|
3414
3453
|
this._containerElement.id = 'cqa-ui-root';
|
|
3415
3454
|
}
|
|
3455
|
+
else if (portalDialogs > 0 && totalLibraryOverlays === 0) {
|
|
3456
|
+
// Only portal dialogs exist - remove the ID to prevent library CSS from affecting them
|
|
3457
|
+
this._containerElement.id = '';
|
|
3458
|
+
}
|
|
3459
|
+
// If both exist, keep the ID (library overlays need it, CSS resets will handle portal dialogs)
|
|
3416
3460
|
}
|
|
3417
3461
|
}
|
|
3418
3462
|
TailwindOverlayContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TailwindOverlayContainer, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|