structra-ui 0.1.7 → 0.1.9
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/app/_utils/scroll/body-scroll-lock.util.d.ts +6 -1
- package/app/dialogs/_utils/app-lib-light-block-scroll-strategy.d.ts +12 -0
- package/app/dialogs/app-dialog/app-dialog.component.d.ts +9 -2
- package/app/dialogs/index.d.ts +1 -0
- package/esm2022/app/_utils/scroll/body-scroll-lock.util.mjs +32 -5
- package/esm2022/app/dialogs/_utils/app-lib-light-block-scroll-strategy.mjs +22 -0
- package/esm2022/app/dialogs/app-dialog/app-dialog.component.mjs +22 -4
- package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.service.mjs +3 -1
- package/esm2022/app/dialogs/index.mjs +2 -1
- package/esm2022/app/dialogs/loading-dialog/loading-dialog.service.mjs +3 -1
- package/fesm2022/structra-ui.mjs +75 -7
- package/fesm2022/structra-ui.mjs.map +1 -1
- package/package.json +1 -1
package/fesm2022/structra-ui.mjs
CHANGED
|
@@ -7283,25 +7283,30 @@ function unlockPageScrollCdkStyle(s) {
|
|
|
7283
7283
|
body.style.touchAction = s.bodyTouchAction;
|
|
7284
7284
|
window.scroll(s.scrollX, s.scrollY);
|
|
7285
7285
|
}
|
|
7286
|
-
|
|
7286
|
+
let appDialogLightLockDepth = 0;
|
|
7287
|
+
let appDialogLightLockSnapshot = null;
|
|
7288
|
+
function applyAppDialogScrollLock() {
|
|
7287
7289
|
const html = document.documentElement;
|
|
7288
7290
|
const body = document.body;
|
|
7289
7291
|
const scrollX = window.scrollX ?? html.scrollLeft;
|
|
7290
7292
|
const scrollY = window.scrollY ?? html.scrollTop;
|
|
7291
|
-
|
|
7293
|
+
return {
|
|
7292
7294
|
scrollX,
|
|
7293
7295
|
scrollY,
|
|
7294
7296
|
htmlOverflow: html.style.overflow,
|
|
7295
7297
|
bodyOverflow: body.style.overflow,
|
|
7296
7298
|
bodyTouchAction: body.style.touchAction,
|
|
7297
7299
|
};
|
|
7300
|
+
}
|
|
7301
|
+
function installAppDialogScrollLockStyles(s) {
|
|
7302
|
+
const html = document.documentElement;
|
|
7303
|
+
const body = document.body;
|
|
7298
7304
|
html.classList.add('app-dialog-scroll-lock');
|
|
7299
7305
|
html.style.overflow = 'hidden';
|
|
7300
7306
|
body.style.overflow = 'hidden';
|
|
7301
7307
|
body.style.touchAction = 'none';
|
|
7302
|
-
return snapshot;
|
|
7303
7308
|
}
|
|
7304
|
-
function
|
|
7309
|
+
function restoreAppDialogScrollLock(s) {
|
|
7305
7310
|
const html = document.documentElement;
|
|
7306
7311
|
const body = document.body;
|
|
7307
7312
|
html.classList.remove('app-dialog-scroll-lock');
|
|
@@ -7310,6 +7315,28 @@ function unlockPageScrollAppDialog(s) {
|
|
|
7310
7315
|
body.style.touchAction = s.bodyTouchAction;
|
|
7311
7316
|
window.scroll(s.scrollX, s.scrollY);
|
|
7312
7317
|
}
|
|
7318
|
+
/**
|
|
7319
|
+
* Incrementa um contador de aninhamento: o primeiro lock aplica o DOM; locks interiores
|
|
7320
|
+
* (ex.: `app-dialog` + CDK Dialog) só incrementam a profundidade.
|
|
7321
|
+
*/
|
|
7322
|
+
function lockPageScrollAppDialog() {
|
|
7323
|
+
if (appDialogLightLockDepth === 0) {
|
|
7324
|
+
appDialogLightLockSnapshot = applyAppDialogScrollLock();
|
|
7325
|
+
installAppDialogScrollLockStyles(appDialogLightLockSnapshot);
|
|
7326
|
+
}
|
|
7327
|
+
appDialogLightLockDepth++;
|
|
7328
|
+
return appDialogLightLockSnapshot;
|
|
7329
|
+
}
|
|
7330
|
+
/** Par com {@link lockPageScrollAppDialog}; o snapshot pode ser ignorado — usa-se a pilha interna. */
|
|
7331
|
+
function unlockPageScrollAppDialog(_s) {
|
|
7332
|
+
if (appDialogLightLockDepth > 0) {
|
|
7333
|
+
appDialogLightLockDepth--;
|
|
7334
|
+
}
|
|
7335
|
+
if (appDialogLightLockDepth === 0 && appDialogLightLockSnapshot !== null) {
|
|
7336
|
+
restoreAppDialogScrollLock(appDialogLightLockSnapshot);
|
|
7337
|
+
appDialogLightLockSnapshot = null;
|
|
7338
|
+
}
|
|
7339
|
+
}
|
|
7313
7340
|
|
|
7314
7341
|
/** Largura máxima do painel `app-dialog` (conteúdo responsivo). */
|
|
7315
7342
|
var LibDialogSize;
|
|
@@ -7328,6 +7355,11 @@ let appDialogSeq = 0;
|
|
|
7328
7355
|
class AppDialogComponent {
|
|
7329
7356
|
constructor() {
|
|
7330
7357
|
this.hostEl = inject((ElementRef));
|
|
7358
|
+
/**
|
|
7359
|
+
* Impede o tooltip nativo do browser: o `@Input('title')` alimenta só `dialogHeading`, mas o
|
|
7360
|
+
* binding `title="…"` no host ainda podia definir `HTMLElement.title` no `<app-dialog>`.
|
|
7361
|
+
*/
|
|
7362
|
+
this.hostTitleAttr = null;
|
|
7331
7363
|
this.open = false;
|
|
7332
7364
|
this.openChange = new EventEmitter();
|
|
7333
7365
|
/**
|
|
@@ -7369,7 +7401,11 @@ class AppDialogComponent {
|
|
|
7369
7401
|
bodyTouchAction: '',
|
|
7370
7402
|
};
|
|
7371
7403
|
}
|
|
7404
|
+
ngOnInit() {
|
|
7405
|
+
this.stripHostNativeTitle();
|
|
7406
|
+
}
|
|
7372
7407
|
ngOnChanges(changes) {
|
|
7408
|
+
this.stripHostNativeTitle();
|
|
7373
7409
|
if (changes['open']) {
|
|
7374
7410
|
if (this.open) {
|
|
7375
7411
|
this.attachHostToBody();
|
|
@@ -7400,6 +7436,7 @@ class AppDialogComponent {
|
|
|
7400
7436
|
this.bodyRestoreParent = el.parentElement;
|
|
7401
7437
|
this.bodyRestoreNext = el.nextSibling;
|
|
7402
7438
|
document.body.appendChild(el);
|
|
7439
|
+
this.stripHostNativeTitle();
|
|
7403
7440
|
}
|
|
7404
7441
|
detachHostFromBody() {
|
|
7405
7442
|
const el = this.hostEl.nativeElement;
|
|
@@ -7453,13 +7490,21 @@ class AppDialogComponent {
|
|
|
7453
7490
|
}
|
|
7454
7491
|
this.previousActive = null;
|
|
7455
7492
|
}
|
|
7493
|
+
stripHostNativeTitle() {
|
|
7494
|
+
const el = this.hostEl.nativeElement;
|
|
7495
|
+
el.removeAttribute('title');
|
|
7496
|
+
el.title = '';
|
|
7497
|
+
}
|
|
7456
7498
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AppDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7457
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: AppDialogComponent, isStandalone: true, selector: "app-dialog", inputs: { open: ["open", "open", booleanAttribute], dialogHeading: ["title", "dialogHeading"], description: "description", ariaLabel: "ariaLabel", size: "size", allowOverlayDismiss: ["allowOverlayDismiss", "allowOverlayDismiss", booleanAttribute], showCloseButton: ["showCloseButton", "showCloseButton", booleanAttribute] }, outputs: { openChange: "openChange" }, host: { listeners: { "document:keydown": "onDocumentKeydown($event)" } }, usesOnChanges: true, ngImport: i0, template: "@if (open) {\r\n <div\r\n class=\"app-dialog-backdrop\"\r\n role=\"presentation\"\r\n tabindex=\"-1\"\r\n (click)=\"onBackdropClick()\"\r\n ></div>\r\n <div class=\"app-dialog-stage\" aria-hidden=\"false\">\r\n <div\r\n class=\"app-dialog-panel\"\r\n [class.app-dialog-panel--sm]=\"size === LibDialogSize.Sm\"\r\n [class.app-dialog-panel--md]=\"size === LibDialogSize.Md\"\r\n [class.app-dialog-panel--lg]=\"size === LibDialogSize.Lg\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-labelledby]=\"\r\n dialogHeading.trim() ? titleId : description.trim() ? descriptionId : null\r\n \"\r\n [attr.aria-label]=\"!dialogHeading.trim() && !description.trim() ? ariaLabel : null\"\r\n [attr.aria-describedby]=\"\r\n dialogHeading.trim() && description.trim() ? descriptionId : null\r\n \"\r\n cdkTrapFocus\r\n [cdkTrapFocusAutoCapture]=\"true\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n @if (dialogHeading.trim()) {\r\n <header class=\"app-dialog-header\">\r\n <h2 class=\"app-dialog-title\" [id]=\"titleId\">{{ dialogHeading }}</h2>\r\n @if (showCloseButton) {\r\n <button\r\n type=\"button\"\r\n class=\"app-dialog-close\"\r\n aria-label=\"Fechar di\u00E1logo\"\r\n (click)=\"requestClose()\"\r\n >\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n }\r\n </header>\r\n }\r\n @if (description.trim()) {\r\n <p class=\"app-dialog-description\" [id]=\"descriptionId\">{{ description }}</p>\r\n }\r\n <div class=\"app-dialog-body\">\r\n <ng-content />\r\n </div>\r\n <footer class=\"app-dialog-footer\">\r\n <ng-content select=\"[appDialogFooter]\" />\r\n </footer>\r\n </div>\r\n </div>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.app-dialog-backdrop{position:fixed;inset:0;z-index:var(--app-z-dialog, 1200);background:#1a2f456b;backdrop-filter:blur(10px) saturate(1.05);-webkit-backdrop-filter:blur(10px) saturate(1.05);pointer-events:auto}.app-dialog-stage{position:fixed;inset:0;z-index:calc(var(--app-z-dialog, 1200) + 1);display:flex;align-items:center;justify-content:center;padding:min(1.5rem,4vw);box-sizing:border-box;pointer-events:none;background:transparent}.app-dialog-panel{position:relative;z-index:0;display:flex;flex-direction:column;max-height:min(88vh,40rem);width:100%;pointer-events:auto;overflow:hidden;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;box-sizing:border-box;border-radius:10px;border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .12));background:var(--app-color-surface, #fff);box-shadow:0 4px 6px -1px #00000014,0 12px 28px -8px #1a2f452e;outline:none;animation:app-lib-dialog-panel-in .28s cubic-bezier(.22,1,.36,1) both}.app-dialog-panel--sm{max-width:min(28rem,94vw)}.app-dialog-panel--md{max-width:min(40rem,94vw)}.app-dialog-panel--lg{max-width:min(56rem,96vw)}@media (prefers-reduced-motion: reduce){.app-dialog-panel{animation:none}}.app-dialog-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:1rem 1rem .65rem;border-bottom:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09));flex:0 0 auto}.app-dialog-title{margin:0;font-size:1.05rem;font-weight:600;line-height:1.3;color:var(--app-color-text-primary, #1a2f45)}.app-dialog-description{margin:0;padding:.65rem 1rem;font-size:.88rem;line-height:1.45;color:var(--app-color-text-secondary, #5a7fa3);flex:0 0 auto}.app-dialog-close{flex:0 0 auto;width:2rem;height:2rem;margin:0;padding:0;border:1px solid var(--app-color-border, #d4d4d4);border-radius:6px;background:var(--app-color-surface-alt, #fff);color:var(--app-color-text-secondary, #5a7fa3);font-size:1.35rem;line-height:1;cursor:pointer}.app-dialog-close:hover{background:var(--app-color-hover-bg, rgba(43, 127, 217, .08))}.app-dialog-close:focus-visible{outline:2px solid var(--app-color-focus-ring-strong, rgba(43, 127, 217, .45));outline-offset:2px}.app-dialog-body{padding:1rem;flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto;font-size:.9rem;line-height:1.5;color:var(--app-color-text-primary, #1a2f45)}.app-dialog-footer{flex:0 0 auto;padding:.65rem 1rem 1rem;border-top:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09));display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.app-dialog-footer:empty{display:none;padding:0;border:none}\n"], dependencies: [{ kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7499
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: AppDialogComponent, isStandalone: true, selector: "app-dialog", inputs: { open: ["open", "open", booleanAttribute], dialogHeading: ["title", "dialogHeading"], description: "description", ariaLabel: "ariaLabel", size: "size", allowOverlayDismiss: ["allowOverlayDismiss", "allowOverlayDismiss", booleanAttribute], showCloseButton: ["showCloseButton", "showCloseButton", booleanAttribute] }, outputs: { openChange: "openChange" }, host: { listeners: { "document:keydown": "onDocumentKeydown($event)" }, properties: { "attr.title": "this.hostTitleAttr" } }, usesOnChanges: true, ngImport: i0, template: "@if (open) {\r\n <div\r\n class=\"app-dialog-backdrop\"\r\n role=\"presentation\"\r\n tabindex=\"-1\"\r\n (click)=\"onBackdropClick()\"\r\n ></div>\r\n <div class=\"app-dialog-stage\" aria-hidden=\"false\">\r\n <div\r\n class=\"app-dialog-panel\"\r\n [class.app-dialog-panel--sm]=\"size === LibDialogSize.Sm\"\r\n [class.app-dialog-panel--md]=\"size === LibDialogSize.Md\"\r\n [class.app-dialog-panel--lg]=\"size === LibDialogSize.Lg\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-labelledby]=\"\r\n dialogHeading.trim() ? titleId : description.trim() ? descriptionId : null\r\n \"\r\n [attr.aria-label]=\"!dialogHeading.trim() && !description.trim() ? ariaLabel : null\"\r\n [attr.aria-describedby]=\"\r\n dialogHeading.trim() && description.trim() ? descriptionId : null\r\n \"\r\n cdkTrapFocus\r\n [cdkTrapFocusAutoCapture]=\"true\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n @if (dialogHeading.trim()) {\r\n <header class=\"app-dialog-header\">\r\n <h2 class=\"app-dialog-title\" [id]=\"titleId\">{{ dialogHeading }}</h2>\r\n @if (showCloseButton) {\r\n <button\r\n type=\"button\"\r\n class=\"app-dialog-close\"\r\n aria-label=\"Fechar di\u00E1logo\"\r\n (click)=\"requestClose()\"\r\n >\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n }\r\n </header>\r\n }\r\n @if (description.trim()) {\r\n <p class=\"app-dialog-description\" [id]=\"descriptionId\">{{ description }}</p>\r\n }\r\n <div class=\"app-dialog-body\">\r\n <ng-content />\r\n </div>\r\n <footer class=\"app-dialog-footer\">\r\n <ng-content select=\"[appDialogFooter]\" />\r\n </footer>\r\n </div>\r\n </div>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.app-dialog-backdrop{position:fixed;inset:0;z-index:var(--app-z-dialog, 1200);background:#1a2f456b;backdrop-filter:blur(10px) saturate(1.05);-webkit-backdrop-filter:blur(10px) saturate(1.05);pointer-events:auto}.app-dialog-stage{position:fixed;inset:0;z-index:calc(var(--app-z-dialog, 1200) + 1);display:flex;align-items:center;justify-content:center;padding:min(1.5rem,4vw);box-sizing:border-box;pointer-events:none;background:transparent}.app-dialog-panel{position:relative;z-index:0;display:flex;flex-direction:column;max-height:min(88vh,40rem);width:100%;pointer-events:auto;overflow:hidden;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;box-sizing:border-box;border-radius:10px;border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .12));background:var(--app-color-surface, #fff);box-shadow:0 4px 6px -1px #00000014,0 12px 28px -8px #1a2f452e;outline:none;animation:app-lib-dialog-panel-in .28s cubic-bezier(.22,1,.36,1) both}.app-dialog-panel--sm{max-width:min(28rem,94vw)}.app-dialog-panel--md{max-width:min(40rem,94vw)}.app-dialog-panel--lg{max-width:min(56rem,96vw)}@media (prefers-reduced-motion: reduce){.app-dialog-panel{animation:none}}.app-dialog-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:1rem 1rem .65rem;border-bottom:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09));flex:0 0 auto}.app-dialog-title{margin:0;font-size:1.05rem;font-weight:600;line-height:1.3;color:var(--app-color-text-primary, #1a2f45)}.app-dialog-description{margin:0;padding:.65rem 1rem;font-size:.88rem;line-height:1.45;color:var(--app-color-text-secondary, #5a7fa3);flex:0 0 auto}.app-dialog-close{flex:0 0 auto;width:2rem;height:2rem;margin:0;padding:0;border:1px solid var(--app-color-border, #d4d4d4);border-radius:6px;background:var(--app-color-surface-alt, #fff);color:var(--app-color-text-secondary, #5a7fa3);font-size:1.35rem;line-height:1;cursor:pointer}.app-dialog-close:hover{background:var(--app-color-hover-bg, rgba(43, 127, 217, .08))}.app-dialog-close:focus-visible{outline:2px solid var(--app-color-focus-ring-strong, rgba(43, 127, 217, .45));outline-offset:2px}.app-dialog-body{padding:1rem;flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto;font-size:.9rem;line-height:1.5;color:var(--app-color-text-primary, #1a2f45)}.app-dialog-footer{flex:0 0 auto;padding:.65rem 1rem 1rem;border-top:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09));display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.app-dialog-footer:empty{display:none;padding:0;border:none}\n"], dependencies: [{ kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7458
7500
|
}
|
|
7459
7501
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AppDialogComponent, decorators: [{
|
|
7460
7502
|
type: Component,
|
|
7461
7503
|
args: [{ selector: 'app-dialog', standalone: true, imports: [CdkTrapFocus], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (open) {\r\n <div\r\n class=\"app-dialog-backdrop\"\r\n role=\"presentation\"\r\n tabindex=\"-1\"\r\n (click)=\"onBackdropClick()\"\r\n ></div>\r\n <div class=\"app-dialog-stage\" aria-hidden=\"false\">\r\n <div\r\n class=\"app-dialog-panel\"\r\n [class.app-dialog-panel--sm]=\"size === LibDialogSize.Sm\"\r\n [class.app-dialog-panel--md]=\"size === LibDialogSize.Md\"\r\n [class.app-dialog-panel--lg]=\"size === LibDialogSize.Lg\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-labelledby]=\"\r\n dialogHeading.trim() ? titleId : description.trim() ? descriptionId : null\r\n \"\r\n [attr.aria-label]=\"!dialogHeading.trim() && !description.trim() ? ariaLabel : null\"\r\n [attr.aria-describedby]=\"\r\n dialogHeading.trim() && description.trim() ? descriptionId : null\r\n \"\r\n cdkTrapFocus\r\n [cdkTrapFocusAutoCapture]=\"true\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n @if (dialogHeading.trim()) {\r\n <header class=\"app-dialog-header\">\r\n <h2 class=\"app-dialog-title\" [id]=\"titleId\">{{ dialogHeading }}</h2>\r\n @if (showCloseButton) {\r\n <button\r\n type=\"button\"\r\n class=\"app-dialog-close\"\r\n aria-label=\"Fechar di\u00E1logo\"\r\n (click)=\"requestClose()\"\r\n >\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n }\r\n </header>\r\n }\r\n @if (description.trim()) {\r\n <p class=\"app-dialog-description\" [id]=\"descriptionId\">{{ description }}</p>\r\n }\r\n <div class=\"app-dialog-body\">\r\n <ng-content />\r\n </div>\r\n <footer class=\"app-dialog-footer\">\r\n <ng-content select=\"[appDialogFooter]\" />\r\n </footer>\r\n </div>\r\n </div>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.app-dialog-backdrop{position:fixed;inset:0;z-index:var(--app-z-dialog, 1200);background:#1a2f456b;backdrop-filter:blur(10px) saturate(1.05);-webkit-backdrop-filter:blur(10px) saturate(1.05);pointer-events:auto}.app-dialog-stage{position:fixed;inset:0;z-index:calc(var(--app-z-dialog, 1200) + 1);display:flex;align-items:center;justify-content:center;padding:min(1.5rem,4vw);box-sizing:border-box;pointer-events:none;background:transparent}.app-dialog-panel{position:relative;z-index:0;display:flex;flex-direction:column;max-height:min(88vh,40rem);width:100%;pointer-events:auto;overflow:hidden;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;box-sizing:border-box;border-radius:10px;border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .12));background:var(--app-color-surface, #fff);box-shadow:0 4px 6px -1px #00000014,0 12px 28px -8px #1a2f452e;outline:none;animation:app-lib-dialog-panel-in .28s cubic-bezier(.22,1,.36,1) both}.app-dialog-panel--sm{max-width:min(28rem,94vw)}.app-dialog-panel--md{max-width:min(40rem,94vw)}.app-dialog-panel--lg{max-width:min(56rem,96vw)}@media (prefers-reduced-motion: reduce){.app-dialog-panel{animation:none}}.app-dialog-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:1rem 1rem .65rem;border-bottom:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09));flex:0 0 auto}.app-dialog-title{margin:0;font-size:1.05rem;font-weight:600;line-height:1.3;color:var(--app-color-text-primary, #1a2f45)}.app-dialog-description{margin:0;padding:.65rem 1rem;font-size:.88rem;line-height:1.45;color:var(--app-color-text-secondary, #5a7fa3);flex:0 0 auto}.app-dialog-close{flex:0 0 auto;width:2rem;height:2rem;margin:0;padding:0;border:1px solid var(--app-color-border, #d4d4d4);border-radius:6px;background:var(--app-color-surface-alt, #fff);color:var(--app-color-text-secondary, #5a7fa3);font-size:1.35rem;line-height:1;cursor:pointer}.app-dialog-close:hover{background:var(--app-color-hover-bg, rgba(43, 127, 217, .08))}.app-dialog-close:focus-visible{outline:2px solid var(--app-color-focus-ring-strong, rgba(43, 127, 217, .45));outline-offset:2px}.app-dialog-body{padding:1rem;flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto;font-size:.9rem;line-height:1.5;color:var(--app-color-text-primary, #1a2f45)}.app-dialog-footer{flex:0 0 auto;padding:.65rem 1rem 1rem;border-top:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .09));display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.app-dialog-footer:empty{display:none;padding:0;border:none}\n"] }]
|
|
7462
|
-
}], propDecorators: {
|
|
7504
|
+
}], propDecorators: { hostTitleAttr: [{
|
|
7505
|
+
type: HostBinding,
|
|
7506
|
+
args: ['attr.title']
|
|
7507
|
+
}], open: [{
|
|
7463
7508
|
type: Input,
|
|
7464
7509
|
args: [{ transform: booleanAttribute }]
|
|
7465
7510
|
}], openChange: [{
|
|
@@ -7529,6 +7574,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
7529
7574
|
args: ['cancelBtn']
|
|
7530
7575
|
}] } });
|
|
7531
7576
|
|
|
7577
|
+
/**
|
|
7578
|
+
* Substituto do `BlockScrollStrategy` do CDK para modais Structra (Dialog de confirmação,
|
|
7579
|
+
* loading, etc.): activa {@link lockPageScrollAppDialog} em vez de `cdk-global-scrollblock`
|
|
7580
|
+
* com `html` deslocado — alinha o backdrop do overlay ao viewport real.
|
|
7581
|
+
*/
|
|
7582
|
+
class AppLibLightBlockScrollStrategy {
|
|
7583
|
+
constructor() {
|
|
7584
|
+
this.snapshot = null;
|
|
7585
|
+
}
|
|
7586
|
+
attach(_overlayRef) { }
|
|
7587
|
+
enable() {
|
|
7588
|
+
this.snapshot = lockPageScrollAppDialog();
|
|
7589
|
+
}
|
|
7590
|
+
disable() {
|
|
7591
|
+
if (this.snapshot !== null) {
|
|
7592
|
+
unlockPageScrollAppDialog(this.snapshot);
|
|
7593
|
+
this.snapshot = null;
|
|
7594
|
+
}
|
|
7595
|
+
}
|
|
7596
|
+
}
|
|
7597
|
+
|
|
7532
7598
|
/** Classes aplicadas ao painel CDK Dialog + tema da app. */
|
|
7533
7599
|
function libDialogPanelClasses(theme, extra = []) {
|
|
7534
7600
|
const rest = Array.isArray(extra) ? extra : [extra];
|
|
@@ -7557,6 +7623,7 @@ class ConfirmDialogService {
|
|
|
7557
7623
|
panelClass: libDialogPanelClasses(this.theme),
|
|
7558
7624
|
autoFocus: false,
|
|
7559
7625
|
ariaModal: true,
|
|
7626
|
+
scrollStrategy: new AppLibLightBlockScrollStrategy(),
|
|
7560
7627
|
})
|
|
7561
7628
|
.closed.pipe(map((r) => r));
|
|
7562
7629
|
}
|
|
@@ -7741,6 +7808,7 @@ class LoadingDialogService {
|
|
|
7741
7808
|
panelClass: libDialogPanelClasses(this.theme),
|
|
7742
7809
|
autoFocus: false,
|
|
7743
7810
|
ariaModal: true,
|
|
7811
|
+
scrollStrategy: new AppLibLightBlockScrollStrategy(),
|
|
7744
7812
|
});
|
|
7745
7813
|
}
|
|
7746
7814
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoadingDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
@@ -8888,5 +8956,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
8888
8956
|
* Generated bundle index. Do not edit.
|
|
8889
8957
|
*/
|
|
8890
8958
|
|
|
8891
|
-
export { ADAPTIVE_DATA_VIEW_MOBILE_QUERY, APP_SIDEBAR_LABEL_REVEAL_LAG_MS, APP_SIDEBAR_LAYOUT_DURATION_MS, APP_SIDEBAR_NAV_REVEAL_TOTAL_MS, APP_THEME_IDS, ActionMenuComponent, AdaptiveDataViewComponent, AnchoredOverlayComponent, AppBreadcrumbComponent, AppDialogComponent, AppShellComponent, AppShellSidebarTemplateDirective, AppShellSidebarToggleComponent, AppSidebarComponent, AppSidebarToolbarDirective, AppThemeService, AppTopbarComponent, AppUserMenuComponent, BR_ESTADOS_NOME_SIGLA, BaseButtonComponent, BaseButtonType, BaseButtonVariant, BaseFieldComponent, BaseFieldDirective, BooleanFieldDirective, CardListComponent, CepFieldComponent, CheckboxFieldComponent, ConfirmDialogComponent, ConfirmDialogService, ContextMenuComponent, CpfCnpjFieldComponent, DashboardSectionComponent, DataCardComponent, DataGridComponent, DataListComponent, DataToolbarComponent, DateFieldComponent, DecimalFieldComponent, DetailsFieldComponent, DetailsViewComponent, DialogFooterDirective, DrawerComponent, DrawerSide, DrawerSize, DropdownBaseComponent, DropdownMenuComponent, DropdownMultiOptionFieldBase, DropdownOptionFieldBase, DropdownSearchFieldComponent, EmptyStateComponent, FormActionsAlign, FormActionsComponent, FormColComponent, FormGroupComponent, FormGroupVariant, FormRowAlign, FormRowComponent, FormRowGap, FormRowJustify, FormSectionComponent, FormTabComponent, FormTabsComponent, InputMaskFieldComponent, IntegerFieldComponent, LayoutStackAlign, LayoutStackComponent, LibDialogSize, ListItemComponent, LoadingDialogComponent, LoadingDialogService, MaskedTextFieldBase, MenuDividerComponent, MenuDropdownPlacement, MenuGroupComponent, MenuListComponent, MultiselectFieldComponent, NgControlFieldDirective, OverlayPlacement, PasswordFieldComponent, PhoneFieldComponent, PopoverBodyTemplateDirective, PopoverComponent, PopoverFooterTemplateDirective, PopoverTriggerDirective, STRUCTRA_UI, SelectFieldComponent, SkeletonBlockComponent, SkeletonCardComponent, SkeletonFieldShellComponent, SkeletonListComponent, SkeletonTableComponent, SkeletonTextComponent, StatCardComponent, StatusBadgeComponent, SwitchFieldComponent, TableEmptyStateComponent, TableToolbarComponent, TextFieldComponent, TextareaFieldComponent, ToastHostComponent, ToastService, TooltipComponent, TooltipPanelTemplateDirective, ValidationSummaryComponent, anchoredOverlayPositions, applyPickedCalendarDate, buildDecimalBrDisplay, buildDecimalBrParseString, buildEmptyStateOverlayHtml, caretIndexFromIntegerDigitCount, caretIndexFromSemantic, cepMaskCompleteValidator, cpfCnpjMaskCompleteValidator, escapeHtml, extractDecimalBrParts, fixedDigitsMaskCompleteValidator, formatDateTimePtBr, formatDecimalBr, formatIntegerThousandsBr, formatMaskDigits, formatUiFieldDateValue, libDialogPanelClasses, mapEstadosToOptions, maskDigitCount, normalizeFormDateValue, parseDecimalBr, parseIntegerString, parseUiFieldDateValue, phoneBrMaskCompleteValidator, resolveControlAtPath, sanitizeDecimalBrInput, sanitizeIntegerDigits, sectionHasVisibleInvalid, semanticCaretAt, semanticIntegerDigitCountLeft, stripToDigits, subscribeMarkForCheckOnInvalidUiRefresh, subtreeHasVisibleInvalid };
|
|
8959
|
+
export { ADAPTIVE_DATA_VIEW_MOBILE_QUERY, APP_SIDEBAR_LABEL_REVEAL_LAG_MS, APP_SIDEBAR_LAYOUT_DURATION_MS, APP_SIDEBAR_NAV_REVEAL_TOTAL_MS, APP_THEME_IDS, ActionMenuComponent, AdaptiveDataViewComponent, AnchoredOverlayComponent, AppBreadcrumbComponent, AppDialogComponent, AppLibLightBlockScrollStrategy, AppShellComponent, AppShellSidebarTemplateDirective, AppShellSidebarToggleComponent, AppSidebarComponent, AppSidebarToolbarDirective, AppThemeService, AppTopbarComponent, AppUserMenuComponent, BR_ESTADOS_NOME_SIGLA, BaseButtonComponent, BaseButtonType, BaseButtonVariant, BaseFieldComponent, BaseFieldDirective, BooleanFieldDirective, CardListComponent, CepFieldComponent, CheckboxFieldComponent, ConfirmDialogComponent, ConfirmDialogService, ContextMenuComponent, CpfCnpjFieldComponent, DashboardSectionComponent, DataCardComponent, DataGridComponent, DataListComponent, DataToolbarComponent, DateFieldComponent, DecimalFieldComponent, DetailsFieldComponent, DetailsViewComponent, DialogFooterDirective, DrawerComponent, DrawerSide, DrawerSize, DropdownBaseComponent, DropdownMenuComponent, DropdownMultiOptionFieldBase, DropdownOptionFieldBase, DropdownSearchFieldComponent, EmptyStateComponent, FormActionsAlign, FormActionsComponent, FormColComponent, FormGroupComponent, FormGroupVariant, FormRowAlign, FormRowComponent, FormRowGap, FormRowJustify, FormSectionComponent, FormTabComponent, FormTabsComponent, InputMaskFieldComponent, IntegerFieldComponent, LayoutStackAlign, LayoutStackComponent, LibDialogSize, ListItemComponent, LoadingDialogComponent, LoadingDialogService, MaskedTextFieldBase, MenuDividerComponent, MenuDropdownPlacement, MenuGroupComponent, MenuListComponent, MultiselectFieldComponent, NgControlFieldDirective, OverlayPlacement, PasswordFieldComponent, PhoneFieldComponent, PopoverBodyTemplateDirective, PopoverComponent, PopoverFooterTemplateDirective, PopoverTriggerDirective, STRUCTRA_UI, SelectFieldComponent, SkeletonBlockComponent, SkeletonCardComponent, SkeletonFieldShellComponent, SkeletonListComponent, SkeletonTableComponent, SkeletonTextComponent, StatCardComponent, StatusBadgeComponent, SwitchFieldComponent, TableEmptyStateComponent, TableToolbarComponent, TextFieldComponent, TextareaFieldComponent, ToastHostComponent, ToastService, TooltipComponent, TooltipPanelTemplateDirective, ValidationSummaryComponent, anchoredOverlayPositions, applyPickedCalendarDate, buildDecimalBrDisplay, buildDecimalBrParseString, buildEmptyStateOverlayHtml, caretIndexFromIntegerDigitCount, caretIndexFromSemantic, cepMaskCompleteValidator, cpfCnpjMaskCompleteValidator, escapeHtml, extractDecimalBrParts, fixedDigitsMaskCompleteValidator, formatDateTimePtBr, formatDecimalBr, formatIntegerThousandsBr, formatMaskDigits, formatUiFieldDateValue, libDialogPanelClasses, mapEstadosToOptions, maskDigitCount, normalizeFormDateValue, parseDecimalBr, parseIntegerString, parseUiFieldDateValue, phoneBrMaskCompleteValidator, resolveControlAtPath, sanitizeDecimalBrInput, sanitizeIntegerDigits, sectionHasVisibleInvalid, semanticCaretAt, semanticIntegerDigitCountLeft, stripToDigits, subscribeMarkForCheckOnInvalidUiRefresh, subtreeHasVisibleInvalid };
|
|
8892
8960
|
//# sourceMappingURL=structra-ui.mjs.map
|