@govbr-ds/webcomponents 2.0.0-next.61 → 2.0.0-next.62

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 (38) hide show
  1. package/dist/cjs/br-modal.cjs.entry.js +119 -15
  2. package/dist/cjs/br-modal.entry.cjs.js.map +1 -1
  3. package/dist/cjs/br-scrim.cjs.entry.js +132 -38
  4. package/dist/cjs/br-scrim.entry.cjs.js.map +1 -1
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/webcomponents.cjs.js +1 -1
  7. package/dist/collection/components/modal/modal.js +152 -37
  8. package/dist/collection/components/modal/modal.js.map +1 -1
  9. package/dist/collection/components/scrim/scrim.js +132 -38
  10. package/dist/collection/components/scrim/scrim.js.map +1 -1
  11. package/dist/collection/pages/components/modal/index.js +1 -53
  12. package/dist/components/br-modal.js +123 -26
  13. package/dist/components/br-modal.js.map +1 -1
  14. package/dist/components/br-scrim.js +125 -44
  15. package/dist/components/br-scrim.js.map +1 -1
  16. package/dist/esm/br-modal.entry.js +119 -15
  17. package/dist/esm/br-modal.entry.js.map +1 -1
  18. package/dist/esm/br-scrim.entry.js +132 -38
  19. package/dist/esm/br-scrim.entry.js.map +1 -1
  20. package/dist/esm/loader.js +1 -1
  21. package/dist/esm/webcomponents.js +1 -1
  22. package/dist/hydrate/index.js +252 -55
  23. package/dist/hydrate/index.mjs +252 -55
  24. package/dist/types/components/modal/modal.d.ts +46 -4
  25. package/dist/types/components/scrim/scrim.d.ts +39 -1
  26. package/dist/types/components.d.ts +11 -11
  27. package/dist/webcomponents/br-modal.entry.esm.js.map +1 -1
  28. package/dist/webcomponents/br-scrim.entry.esm.js.map +1 -1
  29. package/dist/webcomponents/{p-e7b38c63.entry.js → p-216dc111.entry.js} +126 -45
  30. package/dist/webcomponents/p-216dc111.entry.js.map +1 -0
  31. package/dist/webcomponents/{p-28dba962.entry.js → p-463b06a4.entry.js} +129 -33
  32. package/dist/webcomponents/p-463b06a4.entry.js.map +1 -0
  33. package/dist/webcomponents/webcomponents.esm.js +1 -1
  34. package/package.json +1 -1
  35. package/dist/custom-elements.json +0 -18276
  36. package/dist/webcomponents/p-28dba962.entry.js.map +0 -1
  37. package/dist/webcomponents/p-e7b38c63.entry.js.map +0 -1
  38. package/dist/webcomponents.html-custom-data.json +0 -1214
@@ -77,6 +77,25 @@ const l = t(class t extends i {
77
77
  this.previouslyFocusedElement = null;
78
78
  this.focusTimeoutId = null;
79
79
  this.restoreFocusTimeoutId = null;
80
+ // ======================================================================
81
+ // GERENCIAMENTO DE COMPONENTES FILHOS
82
+ // ======================================================================
83
+ /**
84
+ * Handler para evento brModalOpen emitido por modal filha
85
+ */ this.handleModalOpen = t => {
86
+ const i = t.target;
87
+ if (!this.isDirectChild(i)) return;
88
+ if (!this.isOpen) {
89
+ this.open();
90
+ }
91
+ };
92
+ /**
93
+ * Handler para evento brModalClose emitido por modal filha
94
+ */ this.handleModalClose = t => {
95
+ const i = t.target;
96
+ if (!this.isDirectChild(i)) return;
97
+ this.close();
98
+ };
80
99
  this.handleActivatorClick = () => {
81
100
  this.toggle();
82
101
  };
@@ -94,6 +113,10 @@ const l = t(class t extends i {
94
113
  const e = (t = this.scrollOrigin) !== null && t !== void 0 ? t : this.lastScrollTop;
95
114
  if (Math.abs(i - e) > this.scrollThreshold) {
96
115
  this.scrollOrigin = null;
116
+ // Não fecha se tiver modal filha com autoClose=false ou não definido
117
+ if (this.hasModalWithAutoClose()) {
118
+ return;
119
+ }
97
120
  this.isOpen = false;
98
121
  this.handleOpenChange(false);
99
122
  return;
@@ -127,7 +150,9 @@ const l = t(class t extends i {
127
150
  }
128
151
  if (t.key === "Escape" && !this.disableCloseOnClick) {
129
152
  t.preventDefault();
130
- this.isOpen = false;
153
+ if (!this.hasModalWithAutoClose()) {
154
+ this.isOpen = false;
155
+ }
131
156
  }
132
157
  };
133
158
  // Intercepta TODOS os eventos de clique globalmente quando scrim está ativo
@@ -158,11 +183,14 @@ const l = t(class t extends i {
158
183
  }), 0);
159
184
  }
160
185
  };
161
- // ======================================================================
162
- // MANIPULAÇÃO DE EVENTOS E UTILITÁRIOS
163
- // ======================================================================
164
- this.handleMaskClick = t => {
186
+ /**
187
+ * Handler para clique na máscara do scrim
188
+ * Fecha o scrim se disableCloseOnClick for false e não houver modal filha com autoClose=false
189
+ */ this.handleMaskClick = t => {
165
190
  if (!this.disableCloseOnClick) {
191
+ if (this.hasModalWithAutoClose()) {
192
+ return;
193
+ }
166
194
  this.close();
167
195
  }
168
196
  };
@@ -171,36 +199,38 @@ const l = t(class t extends i {
171
199
  // LIFECYCLE HOOKS E WATCHERS
172
200
  // ======================================================================
173
201
  handleOpenChange(t) {
174
- // Cancelar qualquer timeout anterior
175
- if (this.focusTimeoutId !== null) {
176
- clearTimeout(this.focusTimeoutId);
177
- this.focusTimeoutId = null;
178
- }
179
- if (this.restoreFocusTimeoutId !== null) {
180
- clearTimeout(this.restoreFocusTimeoutId);
181
- this.restoreFocusTimeoutId = null;
182
- }
183
- this.isActive = t;
184
- if (t && this.scrollStrategy === "close") {
185
- const t = window.scrollY;
186
- this.lastScrollTop = t;
187
- this.scrollOrigin = t;
188
- }
189
- this.updateStyles();
190
- if (this.isActive) {
191
- this.previouslyFocusedElement = document.activeElement;
192
- this.applyScrollStrategy();
193
- this.addGlobalEventInterception();
194
- this.focusTimeoutId = setTimeout((() => {
195
- this.focusFirstElement();
196
- }), 100);
197
- this.brScrimOpen.emit();
198
- } else {
199
- this.resetScrolling();
200
- this.removeGlobalEventInterception();
201
- this.restoreFocus();
202
- this.brScrimClose.emit();
203
- }
202
+ return a(this, void 0, void 0, (function*() {
203
+ // Cancelar qualquer timeout anterior
204
+ if (this.focusTimeoutId !== null) {
205
+ clearTimeout(this.focusTimeoutId);
206
+ this.focusTimeoutId = null;
207
+ }
208
+ if (this.restoreFocusTimeoutId !== null) {
209
+ clearTimeout(this.restoreFocusTimeoutId);
210
+ this.restoreFocusTimeoutId = null;
211
+ }
212
+ this.isActive = t;
213
+ if (t && this.scrollStrategy === "close") {
214
+ const t = window.scrollY;
215
+ this.lastScrollTop = t;
216
+ this.scrollOrigin = t;
217
+ }
218
+ this.updateStyles();
219
+ if (this.isActive) {
220
+ this.previouslyFocusedElement = document.activeElement;
221
+ this.applyScrollStrategy();
222
+ this.addGlobalEventInterception();
223
+ this.focusTimeoutId = setTimeout((() => {
224
+ this.focusFirstElement();
225
+ }), 100);
226
+ this.brScrimOpen.emit();
227
+ } else {
228
+ this.resetScrolling();
229
+ this.removeGlobalEventInterception();
230
+ this.restoreFocus();
231
+ this.brScrimClose.emit();
232
+ }
233
+ }));
204
234
  }
205
235
  updateStyles() {
206
236
  if (this.zIndex !== null && this.zIndex !== undefined) {
@@ -227,6 +257,7 @@ const l = t(class t extends i {
227
257
  this.setupActivator();
228
258
  this.setupActivatorSlotClick();
229
259
  this.addContentEventListener();
260
+ this.listenToModalEvents();
230
261
  if (this.isActive) {
231
262
  this.applyScrollStrategy();
232
263
  this.addGlobalEventInterception();
@@ -259,8 +290,7 @@ const l = t(class t extends i {
259
290
  clearTimeout(this.restoreFocusTimeoutId);
260
291
  this.restoreFocusTimeoutId = null;
261
292
  }
262
- // Remover event listeners
263
- window.removeEventListener("scroll", this.handleScrollClose);
293
+ window.removeEventListener("scroll", this.handleScrollClose);
264
294
  window.removeEventListener("scroll", this.handleBlockScroll);
265
295
  if (this.contentRef !== null) {
266
296
  this.contentRef.removeEventListener("keydown", this.handleKeyDown);
@@ -268,6 +298,50 @@ const l = t(class t extends i {
268
298
  this.removeActivatorClickListener();
269
299
  this.cleanupActivatorSlotClick();
270
300
  this.removeGlobalEventInterception();
301
+ this.removeModalEventListener();
302
+ }
303
+ /**
304
+ * Verifica se um elemento é filho direto deste scrim (não nested)
305
+ */ isDirectChild(t) {
306
+ const i = this.getDirectChildren();
307
+ return i.some((i => i === t || i.contains(t)));
308
+ }
309
+ /**
310
+ * Adiciona listeners para eventos brModalOpen e brModalClose das modais filhas
311
+ */ listenToModalEvents() {
312
+ this.el.addEventListener("brModalOpen", this.handleModalOpen);
313
+ this.el.addEventListener("brModalClose", this.handleModalClose);
314
+ }
315
+ /**
316
+ * Remove listeners dos eventos da modal
317
+ */ removeModalEventListener() {
318
+ this.el.removeEventListener("brModalOpen", this.handleModalOpen);
319
+ this.el.removeEventListener("brModalClose", this.handleModalClose);
320
+ }
321
+ /**
322
+ * Retorna os elementos filhos diretos do scrim via slot padrão
323
+ */ getDirectChildren() {
324
+ const t = this.el.shadowRoot;
325
+ if (t === null) return [];
326
+ const i = t.querySelector("slot:not([name])");
327
+ if (i === null) return [];
328
+ return i.assignedElements();
329
+ }
330
+ /**
331
+ * Busca uma modal filha direta do scrim
332
+ */ findModalChild() {
333
+ var t;
334
+ const i = this.getDirectChildren();
335
+ const e = i.find((t => t.tagName === "BR-MODAL"));
336
+ return (t = e) !== null && t !== void 0 ? t : null;
337
+ }
338
+ /**
339
+ * Verifica se há uma modal filha com autoClose=false (padrão ou explícito)
340
+ * Retorna true se:
341
+ * - Existe modal filha E autoClose não é explicitamente true
342
+ */ hasModalWithAutoClose() {
343
+ const t = this.findModalChild();
344
+ return t !== null && t.autoClose !== true;
271
345
  }
272
346
  // ======================================================================
273
347
  // GERENCIAMENTO DO ACTIVATOR (ELEMENTO ACIONADOR)
@@ -447,7 +521,11 @@ const l = t(class t extends i {
447
521
  return t.filter((t => t.offsetWidth > 0 && t.offsetHeight > 0 && getComputedStyle(t).visibility !== "hidden"));
448
522
  }
449
523
  shouldHandleEscape(t) {
450
- return (t.key === "Escape" || t.key === "Esc") && this.isActive && !this.disableCloseOnClick;
524
+ if ((t.key === "Escape" || t.key === "Esc") && this.isActive && !this.disableCloseOnClick) {
525
+ // Não fecha se tiver modal filha com autoClose=false ou não definido
526
+ return !this.hasModalWithAutoClose();
527
+ }
528
+ return false;
451
529
  }
452
530
  handleTabNavigation(t) {
453
531
  const i = this.getFocusableElements();
@@ -504,6 +582,9 @@ const l = t(class t extends i {
504
582
  document.removeEventListener("focus", this.handleGlobalFocus, true);
505
583
  document.removeEventListener("focusin", this.handleGlobalFocus, true);
506
584
  }
585
+ // ======================================================================
586
+ // UTILITÁRIOS
587
+ // ======================================================================
507
588
  getCssClassMap() {
508
589
  return {
509
590
  "br-scrim": true,
@@ -552,12 +633,12 @@ const l = t(class t extends i {
552
633
  }
553
634
  render() {
554
635
  return o(r, {
555
- key: "1aea7418642867cfb24c099729f34412f9aec7bf"
636
+ key: "249de7af4056263464615cbe086b419f74b8981b"
556
637
  }, o("slot", {
557
- key: "4468892291450f13cded3627ee91f31716108443",
638
+ key: "1698faa6b492e1ec594eba8425f20582a2af0e4a",
558
639
  name: "activator"
559
640
  }), o("div", {
560
- key: "6019de52484c176a5f5d706ca1dc759039dae940",
641
+ key: "adedf3eb84f3d8f79ac9bb19209022301453c019",
561
642
  class: this.getCssClassMap(),
562
643
  id: this.customId,
563
644
  role: "dialog",
@@ -565,18 +646,18 @@ const l = t(class t extends i {
565
646
  "aria-label": this.ariaLabel || "Conteúdo do diálogo",
566
647
  "data-visible": this.isActive ? "true" : "false"
567
648
  }, o("div", {
568
- key: "6c6df83177f1a14097ec5c08e409caaca3953d3b",
649
+ key: "ef7408a6672fabf4d2f79bc7922f301fd102652e",
569
650
  class: "mask",
570
651
  onClick: this.handleMaskClick
571
652
  }), o("div", {
572
- key: "1af0ecd53a0aaf630069139a7e6935533a563e10",
653
+ key: "91ffb1a84478f09fc90cefbb97180c5db13dba5c",
573
654
  ref: t => this.contentRef = t,
574
655
  id: `${this.customId}-content`,
575
656
  class: "content",
576
657
  tabIndex: -1,
577
658
  onKeyDown: this.handleKeyDown
578
659
  }, o("slot", {
579
- key: "2cb75f5b254ed22bbe821998700d9c1f4152dd5b"
660
+ key: "0600ac804980446103154cebf83389ac92e44d9d"
580
661
  }))));
581
662
  }
582
663
  static get formAssociated() {
@@ -1 +1 @@
1
- {"version":3,"names":["scrimCss","Scrim","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","customId","Helpers","generateUniqueId","isOpen","disableCloseOnClick","zIndex","bgColor","customOpacity","displayMode","scrollThreshold","activator","ariaLabel","isActive","hasActivatorSlot","contentRef","activatorElement","scrollOffset","lastScrollTop","scrollOrigin","previouslyFocusedElement","focusTimeoutId","restoreFocusTimeoutId","handleActivatorClick","toggle","handleBlockScroll","e","scrollStrategy","window","scrollTo","preventDefault","stopPropagation","handleScrollClose","currentScroll","getScrollPosition","reference","_a","Math","abs","handleOpenChange","handleKeyDown","event","shouldHandleEscape","key","handleTabNavigation","handleGlobalKeyDown","target","isElementInsideScrim","stopImmediatePropagation","focusFirstElement","handleGlobalClick","close","handleGlobalFocus","setTimeout","handleMaskClick","_event","newValue","clearTimeout","scrollY","updateStyles","document","activeElement","applyScrollStrategy","addGlobalEventInterception","brScrimOpen","emit","resetScrolling","removeGlobalEventInterception","restoreFocus","brScrimClose","undefined","el","style","setProperty","handleActivatorChange","removeActivatorClickListener","setupActivator","componentWillLoad","checkActivatorSlot","componentDidLoad","setupActivatorSlotClick","addContentEventListener","addEventListener","connectedCallback","disconnectedCallback","removeEventListener","cleanupActivatorSlotClick","slotName","querySelector","shadowRoot","slotEl","assignedElements","_b","call","length","console","warn","parentElement","element","addActivatorClickListener","enableScrollBlock","enableScrollWatcher","targetWindow","ownerDocument","defaultView","_d","_c","pageYOffset","body","documentElement","removeProperty","setAttribute","focus","focusableElements","getFocusableElements","firstElement","scrollIntoView","block","inline","preventScroll","targetElement","isConnected","error","defaultSlot","flatten","forEach","matches","FOCUSABLE_SELECTORS","push","nestedFocusables","Array","from","querySelectorAll","filterVisibleElements","elements","filter","offsetWidth","offsetHeight","getComputedStyle","visibility","lastElement","isTabForward","shiftKey","shouldTrapFocus","wrapFocus","contains","getCssClassMap","opened","positionContent","setScrollThreshold","threshold","open","render","h","Host","name","class","id","role","onClick","ref","tabIndex","onKeyDown","join"],"sources":["../../packages/webcomponents/src/components/scrim/scrim.scss?tag=br-scrim&encapsulation=shadow","../../packages/webcomponents/src/components/scrim/scrim.tsx"],"sourcesContent":[":host {\n --br-scrim-opacity: 1;\n\n .br-scrim {\n visibility: hidden;\n transition: visibility 0.3s ease;\n z-index: var(--z-index-layer-4);\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: auto;\n }\n\n .br-scrim.mode-fullscreen {\n position: fixed;\n inset: 0;\n }\n\n .br-scrim.mode-parent {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n }\n\n .br-scrim.opened {\n visibility: visible;\n pointer-events: auto;\n }\n\n .mask {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: var(--surface-overlay-scrim);\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: auto;\n }\n\n .br-scrim.opened .mask {\n opacity: var(--br-scrim-opacity);\n }\n\n .content {\n position: relative;\n outline: none;\n pointer-events: auto;\n opacity: 0;\n transform: scale(0.9);\n transition:\n opacity 0.3s ease,\n transform 0.3s ease;\n background: transparent;\n padding: 0;\n margin: 0;\n border: none;\n box-shadow: none;\n overflow: visible;\n contain: none;\n display: inline-block;\n width: fit-content;\n height: fit-content;\n z-index: calc(var(--z-index-layer-4) + 1);\n\n &:focus {\n outline: var(--focus-outline);\n outline-offset: var(--focus-offset);\n box-shadow: var(--focus-shadow);\n }\n }\n\n .br-scrim.opened .content {\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n }\n\n .br-scrim.position-top .content {\n position: absolute;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n }\n\n .br-scrim.position-bottom .content {\n position: absolute;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n }\n\n .br-scrim.position-left .content {\n position: absolute;\n top: 50%;\n left: 0;\n transform: translateY(-50%);\n }\n\n .br-scrim.position-right .content {\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n }\n\n .br-scrim.position-center .content {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n .content ::slotted(*) {\n opacity: 1 !important;\n filter: none;\n }\n\n /* Estilos responsivos */\n @media (width <= 768px) {\n .content {\n max-width: 95%;\n max-height: 95%;\n width: auto;\n }\n\n .br-scrim.position-top .content,\n .br-scrim.position-bottom .content {\n width: 100%;\n max-width: 100%;\n border-radius: 0;\n }\n }\n}\n","import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core'\n\nimport Helpers from '../../utils/helpers'\nimport { CssClassMap } from '../../utils/interfaces'\n\n/**\n * ## Design System\n *\n * Para a documentação completa de design, incluindo diretrizes de uso, acessibilidade e exemplos visuais, consulte o [Design System do GovBR](https://www.gov.br/ds/components/scrim?tab=designer).\n *\n * @slot default - Slot para o conteúdo principal a ser exibido sobre o fundo escurecido do scrim.\n * @slot activator - Slot para o elemento ativador do scrim, com prioridade sobre a propriedade activator.\n */\n@Component({\n tag: 'br-scrim',\n styleUrl: 'scrim.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class Scrim {\n /**\n * Referência ao elemento host do componente.\n */\n @Element() el: HTMLBrScrimElement\n\n @AttachInternals() elementInternals: ElementInternals\n\n /**\n * Identificador único.\n * Caso não seja fornecido, um ID gerado automaticamente será usado.\n */\n @Prop({ reflect: true }) readonly customId: string = Helpers.generateUniqueId()\n\n /**\n * Ativa/desativa o scrim\n */\n @Prop({ reflect: true, mutable: true }) isOpen: boolean = false\n\n /**\n * Posiciona o conteúdo no topo, centro, direita, esquerda, abaixo dentro do scrim\n */\n @Prop() positionContent: 'top' | 'center' | 'right' | 'left' | 'bottom'\n\n /**\n * Desativa o fechamento do scrim ao ser clicado\n */\n @Prop() disableCloseOnClick: boolean = false\n\n /**\n * Define o valor de z-index do scrim\n */\n @Prop() zIndex: number | null = null\n\n /**\n * Cor de fundo personalizada para o scrim.\n * Aceita os seguintes formatos de cor:\n * - Cores nomeadas do CSS: 'red', 'blue', 'green', 'yellow', etc.\n * - Códigos hexadecimais: '#ff0000', '#00ff00', '#0000ff', etc.\n * - Valores RGB: 'rgb(255, 0, 0)', 'rgb(0, 255, 0)', etc.\n * - Valores RGBA: 'rgba(255, 0, 0, 0.5)', 'rgba(0, 255, 0, 0.8)', etc.\n * - Valores HSL: 'hsl(0, 100%, 50%)', 'hsl(120, 100%, 50%)', etc.\n * - Valores HSLA: 'hsla(0, 100%, 50%, 0.5)', 'hsla(240, 100%, 50%, 0.7)', etc.\n * Se não especificada, usa a cor padrão do tema.\n */\n @Prop() bgColor: string | null = null\n\n /**\n * Define a opacidade personalizada do scrim\n */\n @Prop() customOpacity: number | null = null\n\n /**\n * Define o modo de exibição do scrim:\n * - 'fullscreen': Ocupa toda a tela (position: fixed).\n * - 'parent': Ocupa apenas o elemento pai (position: absolute).\n * O elemento pai deve ter `position: relative` ou outro valor de posicionamento diferente de `static`.\n */\n @Prop() displayMode: 'fullscreen' | 'parent' = 'fullscreen'\n\n /**\n * Define a estratégia de manipulação de rolagem quando scrim está aberto\n * - 'block': Impede a rolagem completamente\n * - 'close': Fecha o scrim quando ocorre rolagem\n */\n @Prop() scrollStrategy: 'block' | 'close'\n\n /**\n * Determina quanto de rolagem (em pixels) é necessário para acionar a ação de fechamento automático do scrim.\n */\n @Prop({ mutable: true }) scrollThreshold: number = 50\n\n /**\n * Define o seletor para o elemento activator.\n * Nota: O slot 'activator' tem prioridade sobre esta propriedade.\n */\n @Prop() activator: string | null = null\n\n /**\n * Define um rótulo acessível personalizado para o diálogo.\n * Se não fornecido, será usado \"Conteúdo do diálogo\" como padrão.\n */\n @Prop() ariaLabel: string | null = null\n\n /** Indica que o scrim foi aberto. */\n @Event() brScrimOpen: EventEmitter\n\n /** Indica que o scrim foi fechado */\n @Event() brScrimClose: EventEmitter\n\n @State() isActive: boolean = false\n @State() hasActivatorSlot: boolean = false\n\n // ======================================================================\n // PROPRIEDADES PRIVADAS E VARIÁVEIS INTERNAS\n // ======================================================================\n private contentRef: HTMLDivElement | null = null\n private activatorElement: HTMLElement | null = null\n private scrollOffset: number = 0\n private lastScrollTop: number = 0\n private scrollOrigin: number | null = null\n private previouslyFocusedElement: HTMLElement | null | undefined = null\n private focusTimeoutId: NodeJS.Timeout | null = null\n private restoreFocusTimeoutId: NodeJS.Timeout | null = null\n\n private static readonly FOCUSABLE_SELECTORS = [\n 'a[href]:not([disabled])',\n 'button:not([disabled])',\n 'br-button:not([disabled])',\n 'input:not([disabled])',\n 'br-input:not([disabled])',\n 'select:not([disabled])',\n 'br-select:not([disabled])',\n 'textarea:not([disabled])',\n 'br-textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(',')\n\n // ======================================================================\n // LIFECYCLE HOOKS E WATCHERS\n // ======================================================================\n @Watch('isOpen')\n handleOpenChange(newValue: boolean) {\n // Cancelar qualquer timeout anterior\n if (this.focusTimeoutId !== null) {\n clearTimeout(this.focusTimeoutId)\n this.focusTimeoutId = null\n }\n if (this.restoreFocusTimeoutId !== null) {\n clearTimeout(this.restoreFocusTimeoutId)\n this.restoreFocusTimeoutId = null\n }\n\n this.isActive = newValue\n if (newValue && this.scrollStrategy === 'close') {\n const currentScroll = window.scrollY\n this.lastScrollTop = currentScroll\n this.scrollOrigin = currentScroll\n }\n this.updateStyles()\n\n if (this.isActive) {\n this.previouslyFocusedElement = document.activeElement as HTMLElement\n this.applyScrollStrategy()\n this.addGlobalEventInterception()\n this.focusTimeoutId = setTimeout(() => {\n this.focusFirstElement()\n }, 100)\n this.brScrimOpen.emit()\n } else {\n this.resetScrolling()\n this.removeGlobalEventInterception()\n this.restoreFocus()\n this.brScrimClose.emit()\n }\n }\n\n @Watch('zIndex')\n @Watch('bgColor')\n @Watch('customOpacity')\n updateStyles() {\n if (this.zIndex !== null && this.zIndex !== undefined) {\n this.el.style.zIndex = `${this.zIndex}`\n this.el.style.setProperty('--z-index-layer-4', `${this.zIndex}`)\n }\n if (this.bgColor !== null) {\n this.el.style.setProperty('--surface-overlay-scrim', this.bgColor)\n }\n if (this.customOpacity !== null) {\n this.el.style.setProperty('--br-scrim-opacity', `${this.customOpacity}`)\n }\n }\n\n @Watch('activator')\n handleActivatorChange() {\n this.removeActivatorClickListener()\n this.setupActivator()\n }\n\n componentWillLoad() {\n this.hasActivatorSlot = this.checkActivatorSlot('activator')\n this.isActive = this.isOpen\n }\n\n componentDidLoad() {\n this.updateStyles()\n this.setupActivator()\n this.setupActivatorSlotClick()\n this.addContentEventListener()\n\n if (this.isActive) {\n this.applyScrollStrategy()\n this.addGlobalEventInterception()\n this.focusFirstElement()\n }\n }\n\n /**\n * Adiciona event listener ao contentRef para capturar eventos de teclado\n * e gerenciar a navegação por teclado dentro do scrim.\n */\n private addContentEventListener() {\n if (this.contentRef !== null) {\n this.contentRef.addEventListener('keydown', this.handleKeyDown)\n }\n }\n\n connectedCallback() {\n if (this.scrollStrategy === 'close') {\n const currentScroll = window.scrollY\n this.lastScrollTop = currentScroll\n this.scrollOrigin = currentScroll\n window.addEventListener('scroll', this.handleScrollClose)\n }\n }\n\n disconnectedCallback() {\n // Limpar timeouts pendentes\n if (this.focusTimeoutId !== null) {\n clearTimeout(this.focusTimeoutId)\n this.focusTimeoutId = null\n }\n if (this.restoreFocusTimeoutId !== null) {\n clearTimeout(this.restoreFocusTimeoutId)\n this.restoreFocusTimeoutId = null\n }\n\n // Remover event listeners\n window.removeEventListener('scroll', this.handleScrollClose)\n window.removeEventListener('scroll', this.handleBlockScroll)\n if (this.contentRef !== null) {\n this.contentRef.removeEventListener('keydown', this.handleKeyDown)\n }\n this.removeActivatorClickListener()\n this.cleanupActivatorSlotClick()\n this.removeGlobalEventInterception()\n }\n\n // ======================================================================\n // GERENCIAMENTO DO ACTIVATOR (ELEMENTO ACIONADOR)\n // ======================================================================\n private checkActivatorSlot(slotName: string): boolean {\n return this.el.querySelector(`[slot=\"${slotName}\"]`) !== null\n }\n\n private setupActivatorSlotClick() {\n if (this.el.shadowRoot === null) return\n\n const slotEl = this.el.shadowRoot.querySelector('slot[name=\"activator\"]') as HTMLSlotElement\n if (slotEl === null || slotEl === undefined) return\n\n const assignedElements = slotEl.assignedElements?.() ?? []\n\n if (assignedElements.length === 1) {\n const el = assignedElements[0] as HTMLElement\n if (el && typeof el.addEventListener === 'function') {\n el.addEventListener('click', this.handleActivatorClick)\n }\n } else if (assignedElements.length > 1) {\n console.warn('br-scrim: Slot \"activator\" deve conter apenas um elemento para aplicar o onClick automaticamente.')\n }\n }\n\n private setupActivator() {\n this.removeActivatorClickListener()\n this.activatorElement = null\n\n if (this.hasActivatorSlot || this.activator == null || this.activator === '') {\n return\n }\n\n if (this.activator === 'parent') {\n const parentElement = this.el.parentElement\n if (parentElement !== null) {\n this.activatorElement = parentElement\n }\n } else {\n try {\n const element = document.querySelector(this.activator)\n if (element instanceof HTMLElement) {\n this.activatorElement = element\n }\n } catch {\n console.warn(`br-scrim: Seletor activator inválido: ${this.activator}`)\n }\n }\n\n this.addActivatorClickListener()\n }\n\n private handleActivatorClick = () => {\n this.toggle()\n }\n\n private addActivatorClickListener() {\n if (this.activatorElement === null || this.activatorElement === undefined) return\n this.activatorElement.addEventListener('click', this.handleActivatorClick)\n }\n\n private removeActivatorClickListener() {\n if (this.activatorElement === null || this.activatorElement === undefined) return\n this.activatorElement.removeEventListener('click', this.handleActivatorClick)\n }\n\n private cleanupActivatorSlotClick() {\n if (this.el.shadowRoot === null) return\n\n const slotEl = this.el.shadowRoot.querySelector('slot[name=\"activator\"]') as HTMLSlotElement\n const assignedElements = slotEl?.assignedElements?.() ?? []\n\n if (assignedElements.length === 1) {\n const element = assignedElements[0]\n if (element && typeof element.removeEventListener === 'function') {\n element.removeEventListener('click', this.handleActivatorClick)\n }\n }\n }\n\n // ======================================================================\n // ESTRATÉGIAS DE ROLAGEM (SCROLL)\n // ======================================================================\n private applyScrollStrategy() {\n if (this.scrollStrategy === 'block') {\n this.enableScrollBlock()\n } else if (this.scrollStrategy === 'close') {\n this.enableScrollWatcher()\n }\n }\n\n private getScrollPosition(): number {\n const targetWindow = this.el?.ownerDocument?.defaultView || window\n return targetWindow?.scrollY ?? targetWindow?.pageYOffset ?? 0\n }\n\n private enableScrollBlock() {\n this.scrollOffset = window.scrollY\n document.body.style.setProperty('position', 'fixed')\n document.body.style.setProperty('top', `-${this.scrollOffset}px`)\n document.body.style.setProperty('left', '0')\n document.body.style.setProperty('right', '0')\n document.body.style.setProperty('width', '100%')\n document.documentElement.style.setProperty('overflow', 'hidden')\n\n window.addEventListener('scroll', this.handleBlockScroll)\n }\n\n private enableScrollWatcher() {\n const currentScroll = window.scrollY\n this.lastScrollTop = currentScroll\n this.scrollOrigin = currentScroll\n window.addEventListener('scroll', this.handleScrollClose)\n }\n\n private handleBlockScroll = (e: Event) => {\n if (this.scrollStrategy === 'block' && this.isActive) {\n window.scrollTo(0, this.scrollOffset)\n e.preventDefault()\n e.stopPropagation()\n }\n }\n\n private resetScrolling() {\n if (this.scrollStrategy === 'block') {\n document.body.style.removeProperty('position')\n document.body.style.removeProperty('top')\n document.body.style.removeProperty('left')\n document.body.style.removeProperty('right')\n document.body.style.removeProperty('width')\n document.documentElement.style.removeProperty('overflow')\n window.removeEventListener('scroll', this.handleBlockScroll)\n window.scrollTo(0, this.scrollOffset)\n }\n window.removeEventListener('scroll', this.handleScrollClose)\n this.scrollOrigin = null\n }\n\n private handleScrollClose = () => {\n if (this.scrollStrategy === 'close' && this.isActive) {\n const currentScroll = this.getScrollPosition()\n const reference = this.scrollOrigin ?? this.lastScrollTop\n if (Math.abs(currentScroll - reference) > this.scrollThreshold) {\n this.scrollOrigin = null\n this.isOpen = false\n this.handleOpenChange(false)\n return\n }\n this.lastScrollTop = currentScroll\n }\n }\n\n // ======================================================================\n // ACESSIBILIDADE E GERENCIAMENTO DE FOCO\n // ======================================================================\n private focusFirstElement() {\n if (this.contentRef == null) return\n\n this.contentRef.setAttribute('tabindex', '-1')\n this.contentRef.focus()\n\n const focusableElements = this.getFocusableElements()\n\n if (focusableElements.length > 0) {\n const firstElement = focusableElements[0]\n if (firstElement !== null && firstElement !== undefined) {\n firstElement.scrollIntoView({ block: 'nearest', inline: 'nearest' })\n firstElement.focus({ preventScroll: true })\n }\n }\n }\n\n private restoreFocus() {\n let targetElement: HTMLElement | null = null\n\n if (this.previouslyFocusedElement instanceof HTMLElement && this.previouslyFocusedElement.isConnected) {\n targetElement = this.previouslyFocusedElement\n } else if (this.activatorElement instanceof HTMLElement) {\n targetElement = this.activatorElement\n } else {\n const slotEl = this.el.shadowRoot?.querySelector('slot[name=\"activator\"]') as HTMLSlotElement\n if (this.hasActivatorSlot) {\n const assignedElements = slotEl.assignedElements?.() ?? []\n if (assignedElements.length > 0 && assignedElements[0] instanceof HTMLElement) {\n targetElement = assignedElements[0] as HTMLElement\n }\n }\n }\n\n if (targetElement !== null && targetElement !== undefined) {\n this.restoreFocusTimeoutId = setTimeout(() => {\n try {\n targetElement?.focus()\n } catch (error) {\n console.warn('br-scrim: Erro ao restaurar foco:', error)\n }\n }, 100)\n }\n }\n\n private getFocusableElements(): HTMLElement[] {\n if (this.contentRef == null) return []\n\n const defaultSlot = this.contentRef.querySelector('slot:not([name])') as HTMLSlotElement\n if (defaultSlot === null || defaultSlot === undefined) return []\n\n const assignedElements = defaultSlot.assignedElements({ flatten: true })\n const focusableElements: HTMLElement[] = []\n\n assignedElements.forEach((el) => {\n if (!(el instanceof HTMLElement)) return\n\n if (el.matches(Scrim.FOCUSABLE_SELECTORS)) {\n focusableElements.push(el)\n }\n\n const nestedFocusables = Array.from(el.querySelectorAll<HTMLElement>(Scrim.FOCUSABLE_SELECTORS))\n focusableElements.push(...nestedFocusables)\n })\n\n return this.filterVisibleElements(focusableElements)\n }\n\n private filterVisibleElements(elements: HTMLElement[]): HTMLElement[] {\n return elements.filter(\n (el) => el.offsetWidth > 0 && el.offsetHeight > 0 && getComputedStyle(el).visibility !== 'hidden'\n )\n }\n\n // ======================================================================\n // NAVEGAÇÃO POR TECLADO E INTERCEPTAÇÃO DE EVENTOS\n // ======================================================================\n private handleKeyDown = (event: KeyboardEvent) => {\n if (!this.isActive) return\n\n if (this.shouldHandleEscape(event)) {\n this.isOpen = false\n return\n }\n\n if (event.key === 'Tab') {\n this.handleTabNavigation(event)\n }\n }\n\n // Intercepta TODOS os eventos de teclado globalmente quando scrim está ativo\n private handleGlobalKeyDown = (event: KeyboardEvent) => {\n if (!this.isActive) return\n\n const target = event.target as HTMLElement\n\n if (!this.isElementInsideScrim(target)) {\n event.preventDefault()\n event.stopPropagation()\n event.stopImmediatePropagation()\n\n this.focusFirstElement()\n return\n }\n\n if (event.key === 'Escape' && !this.disableCloseOnClick) {\n event.preventDefault()\n this.isOpen = false\n }\n }\n\n // Intercepta TODOS os eventos de clique globalmente quando scrim está ativo\n private handleGlobalClick = (event: MouseEvent) => {\n if (!this.isActive) return\n\n const target = event.target as HTMLElement\n\n if (!this.isElementInsideScrim(target)) {\n event.preventDefault()\n event.stopPropagation()\n event.stopImmediatePropagation()\n\n if (!this.disableCloseOnClick) {\n this.close()\n }\n return\n }\n }\n\n /**\n * Intercepta eventos de foco globalmente\n */\n private handleGlobalFocus = (event: FocusEvent) => {\n if (!this.isActive) return\n\n const target = event.target as HTMLElement\n\n if (!this.isElementInsideScrim(target)) {\n event.preventDefault()\n event.stopPropagation()\n event.stopImmediatePropagation()\n\n setTimeout(() => {\n this.focusFirstElement()\n }, 0)\n }\n }\n\n private shouldHandleEscape(event: KeyboardEvent): boolean {\n return (event.key === 'Escape' || event.key === 'Esc') && this.isActive && !this.disableCloseOnClick\n }\n\n private handleTabNavigation(event: KeyboardEvent): void {\n const focusableElements = this.getFocusableElements()\n if (focusableElements.length === 0) {\n event.preventDefault()\n return\n }\n\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n const isTabForward = !event.shiftKey\n\n if (this.shouldTrapFocus(isTabForward, firstElement, lastElement)) {\n event.preventDefault()\n this.wrapFocus(isTabForward, firstElement, lastElement)\n }\n }\n\n private shouldTrapFocus(isTabForward: boolean, firstElement: HTMLElement, lastElement: HTMLElement): boolean {\n return (\n (isTabForward && document.activeElement === lastElement) ||\n (!isTabForward && document.activeElement === firstElement)\n )\n }\n\n private wrapFocus(isTabForward: boolean, firstElement: HTMLElement, lastElement: HTMLElement): void {\n ;(isTabForward ? firstElement : lastElement).focus()\n }\n\n /**\n * Verifica se um elemento está dentro do scrim\n */\n private isElementInsideScrim(element: HTMLElement): boolean {\n if (this.el.contains(element)) {\n return true\n }\n\n return false\n }\n\n /**\n * Adiciona interceptação global de eventos\n */\n private addGlobalEventInterception() {\n // Intercepta eventos de teclado globalmente\n document.addEventListener('keydown', this.handleGlobalKeyDown, true)\n document.addEventListener('keyup', this.handleGlobalKeyDown, true)\n document.addEventListener('keypress', this.handleGlobalKeyDown, true)\n\n // Intercepta eventos de clique globalmente\n document.addEventListener('click', this.handleGlobalClick, true)\n document.addEventListener('mousedown', this.handleGlobalClick, true)\n document.addEventListener('mouseup', this.handleGlobalClick, true)\n\n // Intercepta eventos de foco\n document.addEventListener('focus', this.handleGlobalFocus, true)\n document.addEventListener('focusin', this.handleGlobalFocus, true)\n }\n\n /**\n * Remove interceptação global de eventos\n */\n private removeGlobalEventInterception() {\n document.removeEventListener('keydown', this.handleGlobalKeyDown, true)\n document.removeEventListener('keyup', this.handleGlobalKeyDown, true)\n document.removeEventListener('keypress', this.handleGlobalKeyDown, true)\n\n document.removeEventListener('click', this.handleGlobalClick, true)\n document.removeEventListener('mousedown', this.handleGlobalClick, true)\n document.removeEventListener('mouseup', this.handleGlobalClick, true)\n\n document.removeEventListener('focus', this.handleGlobalFocus, true)\n document.removeEventListener('focusin', this.handleGlobalFocus, true)\n }\n\n // ======================================================================\n // MANIPULAÇÃO DE EVENTOS E UTILITÁRIOS\n // ======================================================================\n private handleMaskClick = (_event: MouseEvent) => {\n if (!this.disableCloseOnClick) {\n this.close()\n }\n }\n\n private getCssClassMap(): CssClassMap {\n return {\n 'br-scrim': true,\n opened: this.isActive,\n 'scroll-block': this.scrollStrategy === 'block',\n 'position-top': this.positionContent === 'top',\n 'position-bottom': this.positionContent === 'bottom',\n 'position-left': this.positionContent === 'left',\n 'position-right': this.positionContent === 'right',\n 'position-center': this.positionContent === 'center',\n 'mode-fullscreen': this.displayMode === 'fullscreen',\n 'mode-parent': this.displayMode === 'parent',\n }\n }\n\n // ======================================================================\n // MÉTODOS PÚBLICOS (API)\n // ======================================================================\n /**\n * Define o limite de rolagem para o fechamento automático do scrim.\n */\n @Method()\n async setScrollThreshold(threshold: number) {\n this.scrollThreshold = threshold\n }\n\n /**\n * Método público para exibir o scrim\n */\n @Method()\n async open() {\n this.isOpen = true\n }\n\n /**\n * Método público para esconder o scrim\n */\n @Method()\n async close() {\n this.isOpen = false\n }\n\n /**\n * Método público para alternar o estado de exibição do scrim\n */\n @Method()\n async toggle() {\n this.isOpen = !this.isActive\n }\n\n render() {\n return (\n <Host>\n <slot name=\"activator\"></slot>\n <div\n class={this.getCssClassMap()}\n id={this.customId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={this.ariaLabel || 'Conteúdo do diálogo'}\n data-visible={this.isActive ? 'true' : 'false'}\n >\n <div class=\"mask\" onClick={this.handleMaskClick}></div>\n <div\n ref={(el) => (this.contentRef = el)}\n id={`${this.customId}-content`}\n class=\"content\"\n tabIndex={-1}\n onKeyDown={this.handleKeyDown}\n >\n <slot></slot>\n </div>\n </div>\n </Host>\n )\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["scrimCss","Scrim","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","customId","Helpers","generateUniqueId","isOpen","disableCloseOnClick","zIndex","bgColor","customOpacity","displayMode","scrollThreshold","activator","ariaLabel","isActive","hasActivatorSlot","contentRef","activatorElement","scrollOffset","lastScrollTop","scrollOrigin","previouslyFocusedElement","focusTimeoutId","restoreFocusTimeoutId","handleModalOpen","event","modalElement","target","isDirectChild","open","handleModalClose","close","handleActivatorClick","toggle","handleBlockScroll","e","scrollStrategy","window","scrollTo","preventDefault","stopPropagation","handleScrollClose","currentScroll","getScrollPosition","reference","_a","Math","abs","hasModalWithAutoClose","handleOpenChange","handleKeyDown","shouldHandleEscape","key","handleTabNavigation","handleGlobalKeyDown","isElementInsideScrim","stopImmediatePropagation","focusFirstElement","handleGlobalClick","handleGlobalFocus","setTimeout","handleMaskClick","_event","newValue","clearTimeout","scrollY","updateStyles","document","activeElement","applyScrollStrategy","addGlobalEventInterception","brScrimOpen","emit","resetScrolling","removeGlobalEventInterception","restoreFocus","brScrimClose","undefined","el","style","setProperty","handleActivatorChange","removeActivatorClickListener","setupActivator","componentWillLoad","checkActivatorSlot","componentDidLoad","setupActivatorSlotClick","addContentEventListener","listenToModalEvents","addEventListener","connectedCallback","disconnectedCallback","removeEventListener","cleanupActivatorSlotClick","removeModalEventListener","element","children","getDirectChildren","some","child","contains","shadowRoot","slot","querySelector","assignedElements","findModalChild","find","tagName","modal","autoClose","slotName","slotEl","_b","call","length","console","warn","parentElement","addActivatorClickListener","enableScrollBlock","enableScrollWatcher","targetWindow","ownerDocument","defaultView","_d","_c","pageYOffset","body","documentElement","removeProperty","setAttribute","focus","focusableElements","getFocusableElements","firstElement","scrollIntoView","block","inline","preventScroll","targetElement","isConnected","error","defaultSlot","flatten","forEach","matches","FOCUSABLE_SELECTORS","push","nestedFocusables","Array","from","querySelectorAll","filterVisibleElements","elements","filter","offsetWidth","offsetHeight","getComputedStyle","visibility","lastElement","isTabForward","shiftKey","shouldTrapFocus","wrapFocus","getCssClassMap","opened","positionContent","setScrollThreshold","threshold","render","h","Host","name","class","id","role","onClick","ref","tabIndex","onKeyDown","join"],"sources":["../../packages/webcomponents/src/components/scrim/scrim.scss?tag=br-scrim&encapsulation=shadow","../../packages/webcomponents/src/components/scrim/scrim.tsx"],"sourcesContent":[":host {\n --br-scrim-opacity: 1;\n\n .br-scrim {\n visibility: hidden;\n transition: visibility 0.3s ease;\n z-index: var(--z-index-layer-4);\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: auto;\n }\n\n .br-scrim.mode-fullscreen {\n position: fixed;\n inset: 0;\n }\n\n .br-scrim.mode-parent {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n }\n\n .br-scrim.opened {\n visibility: visible;\n pointer-events: auto;\n }\n\n .mask {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: var(--surface-overlay-scrim);\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: auto;\n }\n\n .br-scrim.opened .mask {\n opacity: var(--br-scrim-opacity);\n }\n\n .content {\n position: relative;\n outline: none;\n pointer-events: auto;\n opacity: 0;\n transform: scale(0.9);\n transition:\n opacity 0.3s ease,\n transform 0.3s ease;\n background: transparent;\n padding: 0;\n margin: 0;\n border: none;\n box-shadow: none;\n overflow: visible;\n contain: none;\n display: inline-block;\n width: fit-content;\n height: fit-content;\n z-index: calc(var(--z-index-layer-4) + 1);\n\n &:focus {\n outline: var(--focus-outline);\n outline-offset: var(--focus-offset);\n box-shadow: var(--focus-shadow);\n }\n }\n\n .br-scrim.opened .content {\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n }\n\n .br-scrim.position-top .content {\n position: absolute;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n }\n\n .br-scrim.position-bottom .content {\n position: absolute;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n }\n\n .br-scrim.position-left .content {\n position: absolute;\n top: 50%;\n left: 0;\n transform: translateY(-50%);\n }\n\n .br-scrim.position-right .content {\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n }\n\n .br-scrim.position-center .content {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n .content ::slotted(*) {\n opacity: 1 !important;\n filter: none;\n }\n\n /* Estilos responsivos */\n @media (width <= 768px) {\n .content {\n max-width: 95%;\n max-height: 95%;\n width: auto;\n }\n\n .br-scrim.position-top .content,\n .br-scrim.position-bottom .content {\n width: 100%;\n max-width: 100%;\n border-radius: 0;\n }\n }\n}\n","import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core'\n\nimport Helpers from '../../utils/helpers'\nimport { CssClassMap } from '../../utils/interfaces'\n\n/**\n * ## Design System\n *\n * Para a documentação completa de design, incluindo diretrizes de uso, acessibilidade e exemplos visuais, consulte o [Design System do GovBR](https://www.gov.br/ds/components/scrim?tab=designer).\n *\n * @slot default - Slot para o conteúdo principal a ser exibido sobre o fundo escurecido do scrim.\n * @slot activator - Slot para o elemento ativador do scrim, com prioridade sobre a propriedade activator.\n */\n@Component({\n tag: 'br-scrim',\n styleUrl: 'scrim.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class Scrim {\n /**\n * Referência ao elemento host do componente.\n */\n @Element() el: HTMLBrScrimElement\n\n @AttachInternals() elementInternals: ElementInternals\n\n /**\n * Identificador único.\n * Caso não seja fornecido, um ID gerado automaticamente será usado.\n */\n @Prop({ reflect: true }) readonly customId: string = Helpers.generateUniqueId()\n\n /**\n * Ativa/desativa o scrim\n */\n @Prop({ reflect: true, mutable: true }) isOpen: boolean = false\n\n /**\n * Posiciona o conteúdo no topo, centro, direita, esquerda, abaixo dentro do scrim\n */\n @Prop() positionContent: 'top' | 'center' | 'right' | 'left' | 'bottom'\n\n /**\n * Desativa o fechamento do scrim ao ser clicado\n */\n @Prop() disableCloseOnClick: boolean = false\n\n /**\n * Define o valor de z-index do scrim\n */\n @Prop() zIndex: number | null = null\n\n /**\n * Cor de fundo personalizada para o scrim.\n * Aceita os seguintes formatos de cor:\n * - Cores nomeadas do CSS: 'red', 'blue', 'green', 'yellow', etc.\n * - Códigos hexadecimais: '#ff0000', '#00ff00', '#0000ff', etc.\n * - Valores RGB: 'rgb(255, 0, 0)', 'rgb(0, 255, 0)', etc.\n * - Valores RGBA: 'rgba(255, 0, 0, 0.5)', 'rgba(0, 255, 0, 0.8)', etc.\n * - Valores HSL: 'hsl(0, 100%, 50%)', 'hsl(120, 100%, 50%)', etc.\n * - Valores HSLA: 'hsla(0, 100%, 50%, 0.5)', 'hsla(240, 100%, 50%, 0.7)', etc.\n * Se não especificada, usa a cor padrão do tema.\n */\n @Prop() bgColor: string | null = null\n\n /**\n * Define a opacidade personalizada do scrim\n */\n @Prop() customOpacity: number | null = null\n\n /**\n * Define o modo de exibição do scrim:\n * - 'fullscreen': Ocupa toda a tela (position: fixed).\n * - 'parent': Ocupa apenas o elemento pai (position: absolute).\n * O elemento pai deve ter `position: relative` ou outro valor de posicionamento diferente de `static`.\n */\n @Prop() displayMode: 'fullscreen' | 'parent' = 'fullscreen'\n\n /**\n * Define a estratégia de manipulação de rolagem quando scrim está aberto\n * - 'block': Impede a rolagem completamente\n * - 'close': Fecha o scrim quando ocorre rolagem\n */\n @Prop() scrollStrategy: 'block' | 'close'\n\n /**\n * Determina quanto de rolagem (em pixels) é necessário para acionar a ação de fechamento automático do scrim.\n */\n @Prop({ mutable: true }) scrollThreshold: number = 50\n\n /**\n * Define o seletor para o elemento activator.\n * Nota: O slot 'activator' tem prioridade sobre esta propriedade.\n */\n @Prop() activator: string | null = null\n\n /**\n * Define um rótulo acessível personalizado para o diálogo.\n * Se não fornecido, será usado \"Conteúdo do diálogo\" como padrão.\n */\n @Prop() ariaLabel: string | null = null\n\n /** Indica que o scrim foi aberto. */\n @Event() brScrimOpen: EventEmitter\n\n /** Indica que o scrim foi fechado */\n @Event() brScrimClose: EventEmitter\n\n @State() isActive: boolean = false\n @State() hasActivatorSlot: boolean = false\n\n // ======================================================================\n // PROPRIEDADES PRIVADAS E VARIÁVEIS INTERNAS\n // ======================================================================\n private contentRef: HTMLDivElement | null = null\n private activatorElement: HTMLElement | null = null\n private scrollOffset: number = 0\n private lastScrollTop: number = 0\n private scrollOrigin: number | null = null\n private previouslyFocusedElement: HTMLElement | null | undefined = null\n private focusTimeoutId: NodeJS.Timeout | null = null\n private restoreFocusTimeoutId: NodeJS.Timeout | null = null\n\n private static readonly FOCUSABLE_SELECTORS = [\n 'a[href]:not([disabled])',\n 'button:not([disabled])',\n 'br-button:not([disabled])',\n 'input:not([disabled])',\n 'br-input:not([disabled])',\n 'select:not([disabled])',\n 'br-select:not([disabled])',\n 'textarea:not([disabled])',\n 'br-textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(',')\n\n // ======================================================================\n // LIFECYCLE HOOKS E WATCHERS\n // ======================================================================\n @Watch('isOpen')\n async handleOpenChange(newValue: boolean) {\n // Cancelar qualquer timeout anterior\n if (this.focusTimeoutId !== null) {\n clearTimeout(this.focusTimeoutId)\n this.focusTimeoutId = null\n }\n if (this.restoreFocusTimeoutId !== null) {\n clearTimeout(this.restoreFocusTimeoutId)\n this.restoreFocusTimeoutId = null\n }\n\n this.isActive = newValue\n if (newValue && this.scrollStrategy === 'close') {\n const currentScroll = window.scrollY\n this.lastScrollTop = currentScroll\n this.scrollOrigin = currentScroll\n }\n this.updateStyles()\n\n if (this.isActive) {\n this.previouslyFocusedElement = document.activeElement as HTMLElement\n this.applyScrollStrategy()\n this.addGlobalEventInterception()\n\n this.focusTimeoutId = setTimeout(() => {\n this.focusFirstElement()\n }, 100)\n this.brScrimOpen.emit()\n } else {\n this.resetScrolling()\n this.removeGlobalEventInterception()\n this.restoreFocus()\n\n this.brScrimClose.emit()\n }\n }\n\n @Watch('zIndex')\n @Watch('bgColor')\n @Watch('customOpacity')\n updateStyles() {\n if (this.zIndex !== null && this.zIndex !== undefined) {\n this.el.style.zIndex = `${this.zIndex}`\n this.el.style.setProperty('--z-index-layer-4', `${this.zIndex}`)\n }\n if (this.bgColor !== null) {\n this.el.style.setProperty('--surface-overlay-scrim', this.bgColor)\n }\n if (this.customOpacity !== null) {\n this.el.style.setProperty('--br-scrim-opacity', `${this.customOpacity}`)\n }\n }\n\n @Watch('activator')\n handleActivatorChange() {\n this.removeActivatorClickListener()\n this.setupActivator()\n }\n\n componentWillLoad() {\n this.hasActivatorSlot = this.checkActivatorSlot('activator')\n this.isActive = this.isOpen\n }\n\n componentDidLoad() {\n this.updateStyles()\n this.setupActivator()\n this.setupActivatorSlotClick()\n this.addContentEventListener()\n this.listenToModalEvents()\n\n if (this.isActive) {\n this.applyScrollStrategy()\n this.addGlobalEventInterception()\n this.focusFirstElement()\n }\n }\n\n /**\n * Adiciona event listener ao contentRef para capturar eventos de teclado\n * e gerenciar a navegação por teclado dentro do scrim.\n */\n private addContentEventListener() {\n if (this.contentRef !== null) {\n this.contentRef.addEventListener('keydown', this.handleKeyDown)\n }\n }\n\n connectedCallback() {\n if (this.scrollStrategy === 'close') {\n const currentScroll = window.scrollY\n this.lastScrollTop = currentScroll\n this.scrollOrigin = currentScroll\n window.addEventListener('scroll', this.handleScrollClose)\n }\n }\n\n disconnectedCallback() {\n // Limpar timeouts pendentes\n if (this.focusTimeoutId !== null) {\n clearTimeout(this.focusTimeoutId)\n this.focusTimeoutId = null\n }\n if (this.restoreFocusTimeoutId !== null) {\n clearTimeout(this.restoreFocusTimeoutId)\n this.restoreFocusTimeoutId = null\n }\n\n window.removeEventListener('scroll', this.handleScrollClose)\n window.removeEventListener('scroll', this.handleBlockScroll)\n if (this.contentRef !== null) {\n this.contentRef.removeEventListener('keydown', this.handleKeyDown)\n }\n this.removeActivatorClickListener()\n this.cleanupActivatorSlotClick()\n this.removeGlobalEventInterception()\n this.removeModalEventListener()\n }\n\n // ======================================================================\n // GERENCIAMENTO DE COMPONENTES FILHOS\n // ======================================================================\n\n /**\n * Handler para evento brModalOpen emitido por modal filha\n */\n private handleModalOpen = (event: Event) => {\n const modalElement = event.target as HTMLElement\n if (!this.isDirectChild(modalElement)) return\n\n if (!this.isOpen) {\n this.open()\n }\n }\n\n /**\n * Handler para evento brModalClose emitido por modal filha\n */\n private handleModalClose = (event: Event) => {\n const modalElement = event.target as HTMLElement\n if (!this.isDirectChild(modalElement)) return\n\n this.close()\n }\n\n /**\n * Verifica se um elemento é filho direto deste scrim (não nested)\n */\n private isDirectChild(element: HTMLElement): boolean {\n const children = this.getDirectChildren()\n return children.some((child) => child === element || child.contains(element))\n }\n\n /**\n * Adiciona listeners para eventos brModalOpen e brModalClose das modais filhas\n */\n private listenToModalEvents() {\n this.el.addEventListener('brModalOpen', this.handleModalOpen)\n this.el.addEventListener('brModalClose', this.handleModalClose)\n }\n\n /**\n * Remove listeners dos eventos da modal\n */\n private removeModalEventListener() {\n this.el.removeEventListener('brModalOpen', this.handleModalOpen)\n this.el.removeEventListener('brModalClose', this.handleModalClose)\n }\n\n /**\n * Retorna os elementos filhos diretos do scrim via slot padrão\n */\n private getDirectChildren(): Element[] {\n const shadowRoot = this.el.shadowRoot\n if (shadowRoot === null) return []\n\n const slot = shadowRoot.querySelector('slot:not([name])') as HTMLSlotElement | null\n if (slot === null) return []\n\n return slot.assignedElements()\n }\n\n /**\n * Busca uma modal filha direta do scrim\n */\n private findModalChild(): HTMLBrModalElement | null {\n const children = this.getDirectChildren()\n const modalElement = children.find((child) => child.tagName === 'BR-MODAL')\n return (modalElement as HTMLBrModalElement | undefined) ?? null\n }\n\n /**\n * Verifica se há uma modal filha com autoClose=false (padrão ou explícito)\n * Retorna true se:\n * - Existe modal filha E autoClose não é explicitamente true\n */\n private hasModalWithAutoClose(): boolean {\n const modal = this.findModalChild()\n return modal !== null && modal.autoClose !== true\n }\n\n // ======================================================================\n // GERENCIAMENTO DO ACTIVATOR (ELEMENTO ACIONADOR)\n // ======================================================================\n private checkActivatorSlot(slotName: string): boolean {\n return this.el.querySelector(`[slot=\"${slotName}\"]`) !== null\n }\n\n private setupActivatorSlotClick() {\n if (this.el.shadowRoot === null) return\n\n const slotEl = this.el.shadowRoot.querySelector('slot[name=\"activator\"]') as HTMLSlotElement\n if (slotEl === null || slotEl === undefined) return\n\n const assignedElements = slotEl.assignedElements?.() ?? []\n\n if (assignedElements.length === 1) {\n const el = assignedElements[0] as HTMLElement\n if (el && typeof el.addEventListener === 'function') {\n el.addEventListener('click', this.handleActivatorClick)\n }\n } else if (assignedElements.length > 1) {\n console.warn('br-scrim: Slot \"activator\" deve conter apenas um elemento para aplicar o onClick automaticamente.')\n }\n }\n\n private setupActivator() {\n this.removeActivatorClickListener()\n this.activatorElement = null\n\n if (this.hasActivatorSlot || this.activator == null || this.activator === '') {\n return\n }\n\n if (this.activator === 'parent') {\n const parentElement = this.el.parentElement\n if (parentElement !== null) {\n this.activatorElement = parentElement\n }\n } else {\n try {\n const element = document.querySelector(this.activator)\n if (element instanceof HTMLElement) {\n this.activatorElement = element\n }\n } catch {\n console.warn(`br-scrim: Seletor activator inválido: ${this.activator}`)\n }\n }\n\n this.addActivatorClickListener()\n }\n\n private handleActivatorClick = () => {\n this.toggle()\n }\n\n private addActivatorClickListener() {\n if (this.activatorElement === null || this.activatorElement === undefined) return\n this.activatorElement.addEventListener('click', this.handleActivatorClick)\n }\n\n private removeActivatorClickListener() {\n if (this.activatorElement === null || this.activatorElement === undefined) return\n this.activatorElement.removeEventListener('click', this.handleActivatorClick)\n }\n\n private cleanupActivatorSlotClick() {\n if (this.el.shadowRoot === null) return\n\n const slotEl = this.el.shadowRoot.querySelector('slot[name=\"activator\"]') as HTMLSlotElement\n const assignedElements = slotEl?.assignedElements?.() ?? []\n\n if (assignedElements.length === 1) {\n const element = assignedElements[0]\n if (element && typeof element.removeEventListener === 'function') {\n element.removeEventListener('click', this.handleActivatorClick)\n }\n }\n }\n\n // ======================================================================\n // ESTRATÉGIAS DE ROLAGEM (SCROLL)\n // ======================================================================\n private applyScrollStrategy() {\n if (this.scrollStrategy === 'block') {\n this.enableScrollBlock()\n } else if (this.scrollStrategy === 'close') {\n this.enableScrollWatcher()\n }\n }\n\n private getScrollPosition(): number {\n const targetWindow = this.el?.ownerDocument?.defaultView || window\n return targetWindow?.scrollY ?? targetWindow?.pageYOffset ?? 0\n }\n\n private enableScrollBlock() {\n this.scrollOffset = window.scrollY\n document.body.style.setProperty('position', 'fixed')\n document.body.style.setProperty('top', `-${this.scrollOffset}px`)\n document.body.style.setProperty('left', '0')\n document.body.style.setProperty('right', '0')\n document.body.style.setProperty('width', '100%')\n document.documentElement.style.setProperty('overflow', 'hidden')\n\n window.addEventListener('scroll', this.handleBlockScroll)\n }\n\n private enableScrollWatcher() {\n const currentScroll = window.scrollY\n this.lastScrollTop = currentScroll\n this.scrollOrigin = currentScroll\n window.addEventListener('scroll', this.handleScrollClose)\n }\n\n private handleBlockScroll = (e: Event) => {\n if (this.scrollStrategy === 'block' && this.isActive) {\n window.scrollTo(0, this.scrollOffset)\n e.preventDefault()\n e.stopPropagation()\n }\n }\n\n private resetScrolling() {\n if (this.scrollStrategy === 'block') {\n document.body.style.removeProperty('position')\n document.body.style.removeProperty('top')\n document.body.style.removeProperty('left')\n document.body.style.removeProperty('right')\n document.body.style.removeProperty('width')\n document.documentElement.style.removeProperty('overflow')\n window.removeEventListener('scroll', this.handleBlockScroll)\n window.scrollTo(0, this.scrollOffset)\n }\n window.removeEventListener('scroll', this.handleScrollClose)\n this.scrollOrigin = null\n }\n\n private handleScrollClose = () => {\n if (this.scrollStrategy === 'close' && this.isActive) {\n const currentScroll = this.getScrollPosition()\n const reference = this.scrollOrigin ?? this.lastScrollTop\n if (Math.abs(currentScroll - reference) > this.scrollThreshold) {\n this.scrollOrigin = null\n // Não fecha se tiver modal filha com autoClose=false ou não definido\n if (this.hasModalWithAutoClose()) {\n return\n }\n this.isOpen = false\n this.handleOpenChange(false)\n return\n }\n this.lastScrollTop = currentScroll\n }\n }\n\n // ======================================================================\n // ACESSIBILIDADE E GERENCIAMENTO DE FOCO\n // ======================================================================\n private focusFirstElement() {\n if (this.contentRef == null) return\n\n this.contentRef.setAttribute('tabindex', '-1')\n this.contentRef.focus()\n\n const focusableElements = this.getFocusableElements()\n\n if (focusableElements.length > 0) {\n const firstElement = focusableElements[0]\n if (firstElement !== null && firstElement !== undefined) {\n firstElement.scrollIntoView({ block: 'nearest', inline: 'nearest' })\n firstElement.focus({ preventScroll: true })\n }\n }\n }\n\n private restoreFocus() {\n let targetElement: HTMLElement | null = null\n\n if (this.previouslyFocusedElement instanceof HTMLElement && this.previouslyFocusedElement.isConnected) {\n targetElement = this.previouslyFocusedElement\n } else if (this.activatorElement instanceof HTMLElement) {\n targetElement = this.activatorElement\n } else {\n const slotEl = this.el.shadowRoot?.querySelector('slot[name=\"activator\"]') as HTMLSlotElement\n if (this.hasActivatorSlot) {\n const assignedElements = slotEl.assignedElements?.() ?? []\n if (assignedElements.length > 0 && assignedElements[0] instanceof HTMLElement) {\n targetElement = assignedElements[0] as HTMLElement\n }\n }\n }\n\n if (targetElement !== null && targetElement !== undefined) {\n this.restoreFocusTimeoutId = setTimeout(() => {\n try {\n targetElement?.focus()\n } catch (error) {\n console.warn('br-scrim: Erro ao restaurar foco:', error)\n }\n }, 100)\n }\n }\n\n private getFocusableElements(): HTMLElement[] {\n if (this.contentRef == null) return []\n\n const defaultSlot = this.contentRef.querySelector('slot:not([name])') as HTMLSlotElement\n if (defaultSlot === null || defaultSlot === undefined) return []\n\n const assignedElements = defaultSlot.assignedElements({ flatten: true })\n const focusableElements: HTMLElement[] = []\n\n assignedElements.forEach((el) => {\n if (!(el instanceof HTMLElement)) return\n\n if (el.matches(Scrim.FOCUSABLE_SELECTORS)) {\n focusableElements.push(el)\n }\n\n const nestedFocusables = Array.from(el.querySelectorAll<HTMLElement>(Scrim.FOCUSABLE_SELECTORS))\n focusableElements.push(...nestedFocusables)\n })\n\n return this.filterVisibleElements(focusableElements)\n }\n\n private filterVisibleElements(elements: HTMLElement[]): HTMLElement[] {\n return elements.filter(\n (el) => el.offsetWidth > 0 && el.offsetHeight > 0 && getComputedStyle(el).visibility !== 'hidden'\n )\n }\n\n // ======================================================================\n // NAVEGAÇÃO POR TECLADO E INTERCEPTAÇÃO DE EVENTOS\n // ======================================================================\n private handleKeyDown = (event: KeyboardEvent) => {\n if (!this.isActive) return\n\n if (this.shouldHandleEscape(event)) {\n this.isOpen = false\n return\n }\n\n if (event.key === 'Tab') {\n this.handleTabNavigation(event)\n }\n }\n\n // Intercepta TODOS os eventos de teclado globalmente quando scrim está ativo\n private handleGlobalKeyDown = (event: KeyboardEvent) => {\n if (!this.isActive) return\n\n const target = event.target as HTMLElement\n\n if (!this.isElementInsideScrim(target)) {\n event.preventDefault()\n event.stopPropagation()\n event.stopImmediatePropagation()\n\n this.focusFirstElement()\n return\n }\n\n if (event.key === 'Escape' && !this.disableCloseOnClick) {\n event.preventDefault()\n if (!this.hasModalWithAutoClose()) {\n this.isOpen = false\n }\n }\n }\n\n // Intercepta TODOS os eventos de clique globalmente quando scrim está ativo\n private handleGlobalClick = (event: MouseEvent) => {\n if (!this.isActive) return\n\n const target = event.target as HTMLElement\n\n if (!this.isElementInsideScrim(target)) {\n event.preventDefault()\n event.stopPropagation()\n event.stopImmediatePropagation()\n\n if (!this.disableCloseOnClick) {\n this.close()\n }\n return\n }\n }\n\n /**\n * Intercepta eventos de foco globalmente\n */\n private handleGlobalFocus = (event: FocusEvent) => {\n if (!this.isActive) return\n\n const target = event.target as HTMLElement\n\n if (!this.isElementInsideScrim(target)) {\n event.preventDefault()\n event.stopPropagation()\n event.stopImmediatePropagation()\n\n setTimeout(() => {\n this.focusFirstElement()\n }, 0)\n }\n }\n\n private shouldHandleEscape(event: KeyboardEvent): boolean {\n if ((event.key === 'Escape' || event.key === 'Esc') && this.isActive && !this.disableCloseOnClick) {\n // Não fecha se tiver modal filha com autoClose=false ou não definido\n return !this.hasModalWithAutoClose()\n }\n return false\n }\n\n private handleTabNavigation(event: KeyboardEvent): void {\n const focusableElements = this.getFocusableElements()\n if (focusableElements.length === 0) {\n event.preventDefault()\n return\n }\n\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n const isTabForward = !event.shiftKey\n\n if (this.shouldTrapFocus(isTabForward, firstElement, lastElement)) {\n event.preventDefault()\n this.wrapFocus(isTabForward, firstElement, lastElement)\n }\n }\n\n private shouldTrapFocus(isTabForward: boolean, firstElement: HTMLElement, lastElement: HTMLElement): boolean {\n return (\n (isTabForward && document.activeElement === lastElement) ||\n (!isTabForward && document.activeElement === firstElement)\n )\n }\n\n private wrapFocus(isTabForward: boolean, firstElement: HTMLElement, lastElement: HTMLElement): void {\n ;(isTabForward ? firstElement : lastElement).focus()\n }\n\n /**\n * Verifica se um elemento está dentro do scrim\n */\n private isElementInsideScrim(element: HTMLElement): boolean {\n if (this.el.contains(element)) {\n return true\n }\n\n return false\n }\n\n /**\n * Adiciona interceptação global de eventos\n */\n private addGlobalEventInterception() {\n // Intercepta eventos de teclado globalmente\n document.addEventListener('keydown', this.handleGlobalKeyDown, true)\n document.addEventListener('keyup', this.handleGlobalKeyDown, true)\n document.addEventListener('keypress', this.handleGlobalKeyDown, true)\n\n // Intercepta eventos de clique globalmente\n document.addEventListener('click', this.handleGlobalClick, true)\n document.addEventListener('mousedown', this.handleGlobalClick, true)\n document.addEventListener('mouseup', this.handleGlobalClick, true)\n\n // Intercepta eventos de foco\n document.addEventListener('focus', this.handleGlobalFocus, true)\n document.addEventListener('focusin', this.handleGlobalFocus, true)\n }\n\n /**\n * Remove interceptação global de eventos\n */\n private removeGlobalEventInterception() {\n document.removeEventListener('keydown', this.handleGlobalKeyDown, true)\n document.removeEventListener('keyup', this.handleGlobalKeyDown, true)\n document.removeEventListener('keypress', this.handleGlobalKeyDown, true)\n\n document.removeEventListener('click', this.handleGlobalClick, true)\n document.removeEventListener('mousedown', this.handleGlobalClick, true)\n document.removeEventListener('mouseup', this.handleGlobalClick, true)\n\n document.removeEventListener('focus', this.handleGlobalFocus, true)\n document.removeEventListener('focusin', this.handleGlobalFocus, true)\n }\n\n /**\n * Handler para clique na máscara do scrim\n * Fecha o scrim se disableCloseOnClick for false e não houver modal filha com autoClose=false\n */\n private handleMaskClick = (_event: MouseEvent) => {\n if (!this.disableCloseOnClick) {\n if (this.hasModalWithAutoClose()) {\n return\n }\n this.close()\n }\n }\n\n // ======================================================================\n // UTILITÁRIOS\n // ======================================================================\n\n private getCssClassMap(): CssClassMap {\n return {\n 'br-scrim': true,\n opened: this.isActive,\n 'scroll-block': this.scrollStrategy === 'block',\n 'position-top': this.positionContent === 'top',\n 'position-bottom': this.positionContent === 'bottom',\n 'position-left': this.positionContent === 'left',\n 'position-right': this.positionContent === 'right',\n 'position-center': this.positionContent === 'center',\n 'mode-fullscreen': this.displayMode === 'fullscreen',\n 'mode-parent': this.displayMode === 'parent',\n }\n }\n\n // ======================================================================\n // MÉTODOS PÚBLICOS (API)\n // ======================================================================\n /**\n * Define o limite de rolagem para o fechamento automático do scrim.\n */\n @Method()\n async setScrollThreshold(threshold: number) {\n this.scrollThreshold = threshold\n }\n\n /**\n * Método público para exibir o scrim\n */\n @Method()\n async open() {\n this.isOpen = true\n }\n\n /**\n * Método público para esconder o scrim\n */\n @Method()\n async close() {\n this.isOpen = false\n }\n\n /**\n * Método público para alternar o estado de exibição do scrim\n */\n @Method()\n async toggle() {\n this.isOpen = !this.isActive\n }\n\n render() {\n return (\n <Host>\n <slot name=\"activator\"></slot>\n <div\n class={this.getCssClassMap()}\n id={this.customId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={this.ariaLabel || 'Conteúdo do diálogo'}\n data-visible={this.isActive ? 'true' : 'false'}\n >\n <div class=\"mask\" onClick={this.handleMaskClick}></div>\n <div\n ref={(el) => (this.contentRef = el)}\n id={`${this.customId}-content`}\n class=\"content\"\n tabIndex={-1}\n onKeyDown={this.handleKeyDown}\n >\n <slot></slot>\n </div>\n </div>\n </Host>\n )\n }\n}\n"],"mappings":"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","ignoreList":[]}