@govbr-ds/webcomponents 2.0.0-next.61 → 2.0.0-next.63
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/dist/cjs/br-checkbox.br-input.br-radio.entry.cjs.js.map +1 -1
- package/dist/cjs/br-checkbox_3.cjs.entry.js +17 -28
- package/dist/cjs/br-collapse.br-list.entry.cjs.js.map +1 -1
- package/dist/cjs/br-collapse_2.cjs.entry.js +10 -15
- package/dist/cjs/br-datetime-picker.cjs.entry.js +18 -31
- package/dist/cjs/br-datetime-picker.entry.cjs.js.map +1 -1
- package/dist/cjs/br-dropdown.br-select.entry.cjs.js.map +1 -1
- package/dist/cjs/br-dropdown_2.cjs.entry.js +73 -56
- package/dist/cjs/br-header-list.cjs.entry.js +6 -13
- package/dist/cjs/br-header-list.entry.cjs.js.map +1 -1
- package/dist/cjs/br-header.cjs.entry.js +2 -5
- package/dist/cjs/br-header.entry.cjs.js.map +1 -1
- package/dist/cjs/br-item.cjs.entry.js +3 -6
- package/dist/cjs/br-item.entry.cjs.js.map +1 -1
- package/dist/cjs/br-message.cjs.entry.js +13 -16
- package/dist/cjs/br-message.entry.cjs.js.map +1 -1
- package/dist/cjs/br-modal.cjs.entry.js +123 -24
- package/dist/cjs/br-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/br-scrim.cjs.entry.js +108 -25
- package/dist/cjs/br-scrim.entry.cjs.js.map +1 -1
- package/dist/cjs/br-skip-link.cjs.entry.js +24 -29
- package/dist/cjs/br-skip-link.entry.cjs.js.map +1 -1
- package/dist/cjs/br-skiplink-item.cjs.entry.js +32 -37
- package/dist/cjs/br-skiplink-item.entry.cjs.js.map +1 -1
- package/dist/cjs/br-step.br-step-item.entry.cjs.js.map +1 -1
- package/dist/cjs/br-step_2.cjs.entry.js +33 -56
- package/dist/cjs/br-switch.cjs.entry.js +3 -6
- package/dist/cjs/br-switch.entry.cjs.js.map +1 -1
- package/dist/cjs/br-textarea.cjs.entry.js +5 -8
- package/dist/cjs/br-textarea.entry.cjs.js.map +1 -1
- package/dist/cjs/br-tooltip.cjs.entry.js +1 -2
- package/dist/cjs/br-tooltip.entry.cjs.js.map +1 -1
- package/dist/cjs/br-wizard-panel.cjs.entry.js +6 -13
- package/dist/cjs/br-wizard-panel.entry.cjs.js.map +1 -1
- package/dist/cjs/br-wizard.cjs.entry.js +147 -182
- package/dist/cjs/br-wizard.entry.cjs.js.map +1 -1
- package/dist/cjs/{floating-ui-D_WzFT9x.js → floating-ui-CkTJEp-y.js} +11 -15
- package/dist/{esm/floating-ui-DBIzWbO2.js.map → cjs/floating-ui-CkTJEp-y.js.map} +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/webcomponents.cjs.js +1 -1
- package/dist/collection/components/checkbox/checkbox.js +9 -16
- package/dist/collection/components/checkbox/checkbox.js.map +1 -1
- package/dist/collection/components/collapse/collapse.js +10 -15
- package/dist/collection/components/collapse/collapse.js.map +1 -1
- package/dist/collection/components/datetime-picker/datetime-picker.js +18 -31
- package/dist/collection/components/datetime-picker/datetime-picker.js.map +1 -1
- package/dist/collection/components/dropdown/dropdown.js +13 -20
- package/dist/collection/components/dropdown/dropdown.js.map +1 -1
- package/dist/collection/components/header/header-list/header-list.js +6 -13
- package/dist/collection/components/header/header-list/header-list.js.map +1 -1
- package/dist/collection/components/header/header.js +2 -5
- package/dist/collection/components/header/header.js.map +1 -1
- package/dist/collection/components/item/item.js +3 -6
- package/dist/collection/components/item/item.js.map +1 -1
- package/dist/collection/components/message/message.js +13 -16
- package/dist/collection/components/message/message.js.map +1 -1
- package/dist/collection/components/modal/modal.js +156 -46
- package/dist/collection/components/modal/modal.js.map +1 -1
- package/dist/collection/components/radio/radio.js +8 -13
- package/dist/collection/components/radio/radio.js.map +1 -1
- package/dist/collection/components/scrim/scrim.js +108 -25
- package/dist/collection/components/scrim/scrim.js.map +1 -1
- package/dist/collection/components/select/select.js +79 -36
- package/dist/collection/components/select/select.js.map +1 -1
- package/dist/collection/components/skip-link/skip-link-item/skip-link-item.js +32 -37
- package/dist/collection/components/skip-link/skip-link-item/skip-link-item.js.map +1 -1
- package/dist/collection/components/skip-link/skip-link.js +24 -29
- package/dist/collection/components/skip-link/skip-link.js.map +1 -1
- package/dist/collection/components/step/step-item/step-item.js +13 -26
- package/dist/collection/components/step/step-item/step-item.js.map +1 -1
- package/dist/collection/components/step/step.js +20 -31
- package/dist/collection/components/step/step.js.map +1 -1
- package/dist/collection/components/switch/switch.js +3 -6
- package/dist/collection/components/switch/switch.js.map +1 -1
- package/dist/collection/components/textarea/textarea.js +5 -8
- package/dist/collection/components/textarea/textarea.js.map +1 -1
- package/dist/collection/components/wizard/wizard-panel/wizard-panel.js +6 -13
- package/dist/collection/components/wizard/wizard-panel/wizard-panel.js.map +1 -1
- package/dist/collection/components/wizard/wizard.js +147 -182
- package/dist/collection/components/wizard/wizard.js.map +1 -1
- package/dist/collection/pages/components/modal/index.js +1 -53
- package/dist/collection/utils/floating-ui.js +9 -12
- package/dist/collection/utils/floating-ui.js.map +1 -1
- package/dist/components/br-breadcrumb.js +3 -3
- package/dist/components/br-checkbox.js +4 -4
- package/dist/components/br-checkgroup.js +1 -1
- package/dist/components/br-collapse.js +4 -4
- package/dist/components/br-datetime-picker.js +1981 -1995
- package/dist/components/br-datetime-picker.js.map +1 -1
- package/dist/components/br-dropdown.js +1 -1
- package/dist/components/br-footer-category.js +3 -3
- package/dist/components/br-footer-item.js +1 -1
- package/dist/components/br-header-function.js +1 -1
- package/dist/components/br-header-link.js +1 -1
- package/dist/components/br-header-list.js +31 -39
- package/dist/components/br-header-list.js.map +1 -1
- package/dist/components/br-header.js +63 -67
- package/dist/components/br-header.js.map +1 -1
- package/dist/components/br-item.js +1 -1
- package/dist/components/br-list.js +3 -3
- package/dist/components/br-message.js +28 -32
- package/dist/components/br-message.js.map +1 -1
- package/dist/components/br-modal.js +140 -49
- package/dist/components/br-modal.js.map +1 -1
- package/dist/components/br-pagination.js +7 -7
- package/dist/components/br-radio.js +1 -1
- package/dist/components/br-scrim.js +112 -43
- package/dist/components/br-scrim.js.map +1 -1
- package/dist/components/br-select.js +3 -3
- package/dist/components/br-skip-link.js +38 -44
- package/dist/components/br-skip-link.js.map +1 -1
- package/dist/components/br-skiplink-item.js +55 -61
- package/dist/components/br-skiplink-item.js.map +1 -1
- package/dist/components/br-step-item.js +4 -4
- package/dist/components/br-step.js +4 -4
- package/dist/components/br-switch.js +12 -16
- package/dist/components/br-switch.js.map +1 -1
- package/dist/components/br-textarea.js +14 -18
- package/dist/components/br-textarea.js.map +1 -1
- package/dist/components/br-tooltip.js +1 -1
- package/dist/components/br-wizard-panel.js +13 -21
- package/dist/components/br-wizard-panel.js.map +1 -1
- package/dist/components/br-wizard.js +190 -228
- package/dist/components/br-wizard.js.map +1 -1
- package/dist/components/{p-Cc75U9ZX.js → p-B_YesJM8.js} +26 -34
- package/dist/components/{p-Cc75U9ZX.js.map → p-B_YesJM8.js.map} +1 -1
- package/dist/components/{p-xFn46pdm.js → p-Bc03PTAW.js} +27 -39
- package/dist/components/{p-xFn46pdm.js.map → p-Bc03PTAW.js.map} +1 -1
- package/dist/components/{p-DzKEfDGA.js → p-Bri6ECVa.js} +27 -33
- package/dist/components/{p-DzKEfDGA.js.map → p-Bri6ECVa.js.map} +1 -1
- package/dist/components/{p-BZ8BetvD.js → p-CJSXIVVe.js} +17 -23
- package/dist/components/{p-BZ8BetvD.js.map → p-CJSXIVVe.js.map} +1 -1
- package/dist/components/{p-D9c7NikS.js → p-CWRBs6PD.js} +24 -38
- package/dist/components/{p-D9c7NikS.js.map → p-CWRBs6PD.js.map} +1 -1
- package/dist/components/{p-D0dPo1K5.js → p-CwtLw60M.js} +12 -16
- package/dist/components/{p-D0dPo1K5.js.map → p-CwtLw60M.js.map} +1 -1
- package/dist/components/{p-z1PVVVFI.js → p-DW63EY0U.js} +27 -35
- package/dist/components/{p-z1PVVVFI.js.map → p-DW63EY0U.js.map} +1 -1
- package/dist/components/{p-7kxAU6Gr.js → p-DdjKNpU3.js} +92 -72
- package/dist/components/p-DdjKNpU3.js.map +1 -0
- package/dist/{webcomponents/p-B4au_byv.js → components/p-k0WZfTfL.js} +121 -124
- package/dist/components/{p-B4au_byv.js.map → p-k0WZfTfL.js.map} +1 -1
- package/dist/components/{p-OKkBxn1z.js → p-lIb35q2K.js} +3 -3
- package/dist/custom-elements.json +1613 -430
- package/dist/esm/br-checkbox.br-input.br-radio.entry.js.map +1 -1
- package/dist/esm/br-checkbox_3.entry.js +17 -28
- package/dist/esm/br-collapse.br-list.entry.js.map +1 -1
- package/dist/esm/br-collapse_2.entry.js +10 -15
- package/dist/esm/br-datetime-picker.entry.js +18 -31
- package/dist/esm/br-datetime-picker.entry.js.map +1 -1
- package/dist/esm/br-dropdown.br-select.entry.js.map +1 -1
- package/dist/esm/br-dropdown_2.entry.js +73 -56
- package/dist/esm/br-header-list.entry.js +6 -13
- package/dist/esm/br-header-list.entry.js.map +1 -1
- package/dist/esm/br-header.entry.js +2 -5
- package/dist/esm/br-header.entry.js.map +1 -1
- package/dist/esm/br-item.entry.js +3 -6
- package/dist/esm/br-item.entry.js.map +1 -1
- package/dist/esm/br-message.entry.js +13 -16
- package/dist/esm/br-message.entry.js.map +1 -1
- package/dist/esm/br-modal.entry.js +123 -24
- package/dist/esm/br-modal.entry.js.map +1 -1
- package/dist/esm/br-scrim.entry.js +108 -25
- package/dist/esm/br-scrim.entry.js.map +1 -1
- package/dist/esm/br-skip-link.entry.js +24 -29
- package/dist/esm/br-skip-link.entry.js.map +1 -1
- package/dist/esm/br-skiplink-item.entry.js +32 -37
- package/dist/esm/br-skiplink-item.entry.js.map +1 -1
- package/dist/esm/br-step.br-step-item.entry.js.map +1 -1
- package/dist/esm/br-step_2.entry.js +33 -56
- package/dist/esm/br-switch.entry.js +3 -6
- package/dist/esm/br-switch.entry.js.map +1 -1
- package/dist/esm/br-textarea.entry.js +5 -8
- package/dist/esm/br-textarea.entry.js.map +1 -1
- package/dist/esm/br-tooltip.entry.js +1 -2
- package/dist/esm/br-tooltip.entry.js.map +1 -1
- package/dist/esm/br-wizard-panel.entry.js +6 -13
- package/dist/esm/br-wizard-panel.entry.js.map +1 -1
- package/dist/esm/br-wizard.entry.js +147 -182
- package/dist/esm/br-wizard.entry.js.map +1 -1
- package/dist/esm/{floating-ui-DBIzWbO2.js → floating-ui-k0WZfTfL.js} +11 -15
- package/dist/{cjs/floating-ui-D_WzFT9x.js.map → esm/floating-ui-k0WZfTfL.js.map} +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/webcomponents.js +1 -1
- package/dist/hydrate/index.js +634 -578
- package/dist/hydrate/index.mjs +634 -578
- package/dist/types/components/modal/modal.d.ts +46 -4
- package/dist/types/components/scrim/scrim.d.ts +39 -1
- package/dist/types/components/select/select.d.ts +5 -0
- package/dist/types/components.d.ts +21 -11
- package/dist/webcomponents/br-checkbox.br-input.br-radio.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-collapse.br-list.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-datetime-picker.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-dropdown.br-select.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-header-list.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-header.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-item.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-message.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-modal.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-scrim.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-skip-link.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-skiplink-item.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-step.br-step-item.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-switch.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-textarea.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-tooltip.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-wizard-panel.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-wizard.entry.esm.js.map +1 -1
- package/dist/webcomponents/{p-2fe329d6.entry.js → p-10e25a32.entry.js} +28 -34
- package/dist/webcomponents/p-10e25a32.entry.js.map +1 -0
- package/dist/webcomponents/{p-097912c2.entry.js → p-1991135d.entry.js} +30 -36
- package/dist/webcomponents/p-1991135d.entry.js.map +1 -0
- package/dist/webcomponents/{p-61e5421b.entry.js → p-27eb10f9.entry.js} +57 -61
- package/dist/webcomponents/p-27eb10f9.entry.js.map +1 -0
- package/dist/webcomponents/{p-5070161f.entry.js → p-30af66b3.entry.js} +45 -51
- package/dist/webcomponents/p-30af66b3.entry.js.map +1 -0
- package/dist/webcomponents/{p-9464b692.entry.js → p-336071a5.entry.js} +2 -4
- package/dist/webcomponents/p-336071a5.entry.js.map +1 -0
- package/dist/webcomponents/{p-8a034433.entry.js → p-462c5647.entry.js} +20 -24
- package/dist/webcomponents/p-462c5647.entry.js.map +1 -0
- package/dist/webcomponents/{p-d674cee3.entry.js → p-46dfc3ee.entry.js} +12 -16
- package/dist/webcomponents/p-46dfc3ee.entry.js.map +1 -0
- package/dist/webcomponents/{p-821b896c.entry.js → p-56aabe89.entry.js} +36 -44
- package/dist/webcomponents/p-56aabe89.entry.js.map +1 -0
- package/dist/webcomponents/{p-a615baaa.entry.js → p-5710a3e9.entry.js} +41 -65
- package/dist/webcomponents/p-5710a3e9.entry.js.map +1 -0
- package/dist/webcomponents/{p-1799a082.entry.js → p-6a9d2a0b.entry.js} +1996 -2010
- package/dist/webcomponents/p-6a9d2a0b.entry.js.map +1 -0
- package/dist/webcomponents/{p-8ad1f003.entry.js → p-83001853.entry.js} +175 -213
- package/dist/webcomponents/p-83001853.entry.js.map +1 -0
- package/dist/webcomponents/{p-28dba962.entry.js → p-90401ecd.entry.js} +124 -34
- package/dist/webcomponents/p-90401ecd.entry.js.map +1 -0
- package/dist/webcomponents/{p-e7b38c63.entry.js → p-a2eec4fb.entry.js} +112 -43
- package/dist/webcomponents/p-a2eec4fb.entry.js.map +1 -0
- package/dist/webcomponents/{p-d6475852.entry.js → p-c1b0a116.entry.js} +11 -19
- package/dist/webcomponents/p-c1b0a116.entry.js.map +1 -0
- package/dist/webcomponents/{p-c90a089a.entry.js → p-ca2d95f7.entry.js} +96 -83
- package/dist/webcomponents/p-ca2d95f7.entry.js.map +1 -0
- package/dist/webcomponents/{p-7ff6698f.entry.js → p-cfa86a23.entry.js} +10 -14
- package/dist/webcomponents/p-cfa86a23.entry.js.map +1 -0
- package/dist/webcomponents/{p-abc0ecbe.entry.js → p-e5875d3d.entry.js} +10 -14
- package/dist/webcomponents/p-e5875d3d.entry.js.map +1 -0
- package/dist/webcomponents/{p-0bfb0edf.entry.js → p-f2ea0d7e.entry.js} +133 -145
- package/dist/webcomponents/p-f2ea0d7e.entry.js.map +1 -0
- package/dist/{components/p-B4au_byv.js → webcomponents/p-k0WZfTfL.js} +121 -124
- package/dist/webcomponents/{p-B4au_byv.js.map → p-k0WZfTfL.js.map} +1 -1
- package/dist/webcomponents/webcomponents.esm.js +1 -1
- package/dist/webcomponents.html-custom-data.json +1708 -349
- package/package.json +1 -1
- package/dist/cjs/tslib.es6-CF44W9Bn.js +0 -42
- package/dist/cjs/tslib.es6-CF44W9Bn.js.map +0 -1
- package/dist/components/p-7kxAU6Gr.js.map +0 -1
- package/dist/components/p-DIPMDb5E.js +0 -55
- package/dist/components/p-DIPMDb5E.js.map +0 -1
- package/dist/esm/tslib.es6-DIPMDb5E.js +0 -40
- package/dist/esm/tslib.es6-DIPMDb5E.js.map +0 -1
- package/dist/webcomponents/p-097912c2.entry.js.map +0 -1
- package/dist/webcomponents/p-0bfb0edf.entry.js.map +0 -1
- package/dist/webcomponents/p-1799a082.entry.js.map +0 -1
- package/dist/webcomponents/p-28dba962.entry.js.map +0 -1
- package/dist/webcomponents/p-2fe329d6.entry.js.map +0 -1
- package/dist/webcomponents/p-5070161f.entry.js.map +0 -1
- package/dist/webcomponents/p-61e5421b.entry.js.map +0 -1
- package/dist/webcomponents/p-7ff6698f.entry.js.map +0 -1
- package/dist/webcomponents/p-821b896c.entry.js.map +0 -1
- package/dist/webcomponents/p-8a034433.entry.js.map +0 -1
- package/dist/webcomponents/p-8ad1f003.entry.js.map +0 -1
- package/dist/webcomponents/p-9464b692.entry.js.map +0 -1
- package/dist/webcomponents/p-DIPMDb5E.js +0 -55
- package/dist/webcomponents/p-DIPMDb5E.js.map +0 -1
- package/dist/webcomponents/p-a615baaa.entry.js.map +0 -1
- package/dist/webcomponents/p-abc0ecbe.entry.js.map +0 -1
- package/dist/webcomponents/p-c90a089a.entry.js.map +0 -1
- package/dist/webcomponents/p-d6475852.entry.js.map +0 -1
- package/dist/webcomponents/p-d674cee3.entry.js.map +0 -1
- package/dist/webcomponents/p-e7b38c63.entry.js.map +0 -1
- /package/dist/components/{p-OKkBxn1z.js.map → p-lIb35q2K.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"br-scrim.entry.esm.js","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"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"br-scrim.entry.esm.js","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"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"br-skip-link.entry.esm.js","sources":["../../packages/webcomponents/src/components/skip-link/skip-link.scss?tag=br-skip-link&encapsulation=shadow","../../packages/webcomponents/src/components/skip-link/skip-link.tsx"],"sourcesContent":["@import \"~@govbr-ds/core/src/components/skiplink/skiplink\";\n\n:host {\n @include skiplink-configs;\n}\n\n.br-skiplink {\n &.top-left {\n left: var(--spacing-scale-3x) !important;\n right: auto !important;\n }\n\n &.top-center {\n left: 50% !important;\n right: auto !important;\n transform: translateX(-50%);\n\n &.full {\n transform: translateX(-50%) translateY(-100%);\n\n &.visible {\n transform: translateX(-50%) translateY(0);\n }\n }\n }\n\n &.top-right {\n left: auto !important;\n right: var(--spacing-scale-3x) !important;\n }\n\n &.visible {\n top: 0 !important;\n }\n\n &.full {\n br-list {\n display: flex;\n flex-direction: row;\n gap: 0;\n\n ::slotted(br-skiplink-item) {\n list-style: none;\n }\n }\n }\n\n &:not(.full) {\n min-width: var(--skiplink-min-width);\n }\n}\n","import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\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/skip-link?tab=designer).\n *\n * @slot default - Slot para inserir os itens de navegação rápida (br-skiplink-item).\n *\n * @part container - Parte para o contêiner principal do componente skip-link, usada para estilização via ::part().\n */\n@Component({\n tag: 'br-skip-link',\n styleUrl: 'skip-link.scss',\n shadow: true,\n})\nexport class SkipLink {\n /**\n * Referência ao elemento host do componente.\n * Utilize esta propriedade para acessar e manipular o elemento do DOM associado ao componente.\n */\n @Element() el: HTMLBrSkipLinkElement\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 * Define se o skip link apresenta um ou múltiplos itens visíveis.\n * - 'simple': Exibe apenas um item por vez.\n * - 'compound': Exibe uma lista com múltiplos itens.\n */\n @Prop({ reflect: true }) readonly variant: 'simple' | 'compound' = 'compound'\n\n /**\n * Define a posição do skip link na tela.\n * - 'top-left': Posicionado no canto superior esquerdo.\n * - 'top-center': Posicionado no centro superior.\n * - 'top-right': Posicionado no canto superior direito.\n */\n @Prop({ reflect: true }) readonly position: 'top-left' | 'top-center' | 'top-right' = 'top-left'\n\n /**\n * Define o z-index do componente.\n * Controla a ordem de empilhamento do componente na página.\n */\n @Prop({ reflect: true }) readonly zIndex: number | null = null\n\n /**\n * Exibe a contagem de itens no formato (1/4), (2/4), etc.\n * Quando `true`, cada item mostrará sua posição relativa ao total de itens.\n * Por padrão, é `true` para o modo simple e `false` para o modo compound.\n */\n @Prop({ reflect: true }) readonly showItemCount?: boolean\n\n /**\n * Estado interno que controla a visibilidade do componente.\n */\n @State() private isVisible: boolean = false\n\n /**\n * Define se o componente está em modo tela pequena\n */\n @State() private isSmallScreen: boolean = false\n\n /**\n * Define se o componente precisa mudar para modo simples por falta de espaço\n */\n @State() private needsSimpleMode: boolean = false\n\n /**\n * Largura do container pai\n */\n @State() private containerWidth: number = 0\n\n /**\n * ResizeObserver para monitorar mudanças no tamanho do container\n */\n private resizeObserver: ResizeObserver\n\n /**\n * Evento emitido quando um item do skiplink é ativado.\n * O evento contém informações sobre o item acionado e o elemento target.\n */\n @Event() brSkiplinkNavigation: EventEmitter<{ itemId: string; target: string }>\n\n /**\n * Evento emitido quando o skiplink se torna visível.\n */\n @Event() brDidShow: EventEmitter<void>\n\n /**\n * Evento emitido quando o skiplink se torna oculto.\n */\n @Event() brDidHide: EventEmitter<void>\n\n @Watch('zIndex')\n updateStyles() {\n if (this.zIndex !== null && this.zIndex !== undefined) {\n this.el.style.zIndex = `${this.zIndex}`\n this.el.style.setProperty('--skiplink-layer', `${this.zIndex}`)\n }\n }\n\n /**\n * Observa mudanças nos estados que afetam o modo efetivo (simple/compound)\n * e atualiza as contagens dos itens quando necessário.\n */\n @Watch('needsSimpleMode')\n @Watch('isSmallScreen')\n watchModeChanges() {\n this.updateItemCounts()\n }\n\n /**\n * Listener para eventos de navegação dos itens filhos.\n */\n @Listen('brSkiplinkItemClick')\n handleItemNavigation(event: CustomEvent<{ itemId: string; target: string }>) {\n this.brSkiplinkNavigation.emit(event.detail)\n this.hide()\n }\n\n /**\n * Listener para evento de foco no componente.\n */\n @Listen('focusin')\n handleFocusIn() {\n if (!this.isVisible) {\n this.show()\n }\n }\n\n /**\n * Listener para evento de perda de foco no componente.\n */\n @Listen('focusout')\n handleFocusOut(event: FocusEvent) {\n const relatedTarget = event.relatedTarget as HTMLElement | null\n if (relatedTarget === null || !this.el.contains(relatedTarget)) {\n this.hide()\n }\n }\n\n /**\n * Listener para a tecla Escape.\n */\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape' && this.isVisible) {\n event.preventDefault()\n this.hide()\n ;(document.activeElement as HTMLElement)?.blur()\n return\n }\n }\n\n connectedCallback() {\n document.addEventListener('keydown', this.globalKeyHandler)\n\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(this.updateContainerSize)\n const parentElement = this.el.parentElement\n if (parentElement !== null) {\n this.resizeObserver.observe(parentElement)\n }\n }\n }\n\n disconnectedCallback() {\n document.removeEventListener('keydown', this.globalKeyHandler)\n\n if (this.resizeObserver !== undefined && this.resizeObserver !== null) {\n this.resizeObserver.disconnect()\n }\n }\n\n componentWillLoad() {\n const parentElement = this.el.parentElement\n if (parentElement !== null) {\n this.containerWidth = parentElement.clientWidth\n }\n }\n\n componentDidLoad() {\n this.updateItemCounts()\n this.calculateItemsWidth()\n }\n\n /**\n * Manipulador global para atalhos de teclado Alt+[número].\n */\n private globalKeyHandler = (event: KeyboardEvent) => {\n if (event.altKey && /^[1-9]$/.test(event.key)) {\n const items = this.el.querySelectorAll('br-skiplink-item') as NodeListOf<HTMLBrSkiplinkItemElement>\n const targetItem = Array.from(items).find((item) => {\n const keyNumber = item.getAttribute('key-number')\n return keyNumber === event.key\n })\n\n if (targetItem && typeof targetItem.navigateToTarget === 'function') {\n event.preventDefault()\n targetItem.navigateToTarget()\n this.show()\n }\n }\n }\n\n /**\n * Calcula a largura total dos itens e atualiza os estados do componente\n */\n private updateContainerSize = (entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const width = entry.contentRect.width\n this.containerWidth = width\n this.isSmallScreen = width < 570\n\n if (!this.isSmallScreen) {\n this.calculateItemsWidth()\n } else {\n this.needsSimpleMode = false\n }\n }\n }\n\n /**\n * Calcula a largura total dos itens do skip-link e determina se deve usar modo simple ou compound.\n */\n private calculateItemsWidth() {\n requestAnimationFrame(() => {\n const items = this.el.querySelectorAll('br-skiplink-item') as NodeListOf<HTMLBrSkiplinkItemElement>\n\n if (items.length === 0 || this.isSmallScreen) return\n if (items.length > 4) {\n this.needsSimpleMode = true\n return\n }\n\n this.needsSimpleMode = false\n const totalWidth = this.sumItemsWidth(items)\n\n const availableWidth = this.calculateAvailableWidth()\n\n if (totalWidth > availableWidth) {\n this.needsSimpleMode = true\n }\n })\n }\n\n /**\n * Soma a largura de todos os itens do skip-link\n */\n private sumItemsWidth(items: NodeListOf<HTMLBrSkiplinkItemElement>): number {\n let total = 0\n\n items.forEach((item) => {\n const brItem = item.shadowRoot?.querySelector('br-item') as HTMLElement | null\n if (brItem === null) return\n\n const width = brItem.offsetWidth || brItem.scrollWidth || brItem.getBoundingClientRect().width\n total += width\n })\n\n return total\n }\n\n /**\n * Calcula a largura disponível descontando margens e margem de segurança\n */\n private calculateAvailableWidth(): number {\n if (this.containerWidth === 0) return 0\n\n // Obtém o valor da margem definida no CSS\n const computedStyle = getComputedStyle(this.el)\n const spacingValue = computedStyle.getPropertyValue('--spacing-scale-3x').trim()\n const margin = parseFloat(spacingValue) || 24\n\n // Margem de segurança para evitar quebras visuais\n const safetyMargin = 20\n\n // Desconta: margem esquerda + margem direita + margem de segurança\n return this.containerWidth - margin * 2 - safetyMargin\n }\n\n /**\n * Atualiza os atributos de contagem nos itens filhos.\n * Adiciona data-item-index e data-item-total em cada br-skiplink-item.\n * A contagem é exibida quando o componente está em modo simple (incluindo modo responsivo).\n */\n private updateItemCounts() {\n const effectiveVariant = this.isSmallScreen || this.needsSimpleMode ? 'simple' : this.variant\n const shouldShowCount = this.showItemCount !== undefined ? this.showItemCount : effectiveVariant === 'simple'\n const isCompoundMode = effectiveVariant === 'compound'\n\n const items = this.el.querySelectorAll('br-skiplink-item') as NodeListOf<HTMLBrSkiplinkItemElement>\n\n items.forEach((item) => {\n if (isCompoundMode) {\n item.classList.add('compound-mode')\n } else {\n item.classList.remove('compound-mode')\n }\n })\n\n if (!shouldShowCount) {\n items.forEach((item) => {\n item.removeAttribute('data-item-index')\n item.removeAttribute('data-item-total')\n })\n return\n }\n\n const total = items.length\n items.forEach((item, index) => {\n item.setAttribute('data-item-index', (index + 1).toString())\n item.setAttribute('data-item-total', total.toString())\n })\n }\n\n /**\n * Oculta o componente programaticamente.\n */\n @Method()\n async hide(): Promise<void> {\n const focusedElement = this.el.querySelector(':focus')\n if (focusedElement instanceof HTMLElement) {\n focusedElement.blur()\n }\n this.isVisible = false\n this.brDidHide.emit()\n return Promise.resolve()\n }\n\n /**\n * Exibe o componente programaticamente.\n */\n @Method()\n async show(): Promise<void> {\n this.isVisible = true\n\n await new Promise((resolve) => requestAnimationFrame(resolve))\n\n const firstItem = this.el.querySelector('br-skiplink-item') as HTMLBrSkiplinkItemElement | null\n if (firstItem !== null) {\n if (typeof firstItem.itemFocus === 'function') {\n await firstItem.itemFocus()\n } else {\n const focusableElement = firstItem.shadowRoot?.querySelector('a, button') as HTMLElement | null\n if (focusableElement !== null) {\n focusableElement.focus()\n }\n }\n }\n\n this.brDidShow.emit()\n return Promise.resolve()\n }\n\n private getEffectivePosition(): 'top-left' | 'top-center' | 'top-right' {\n if (this.isSmallScreen) {\n return 'top-left'\n }\n return this.position\n }\n\n private getCssClassMap(): CssClassMap {\n const effectiveVariant = this.isSmallScreen || this.needsSimpleMode ? 'simple' : this.variant\n const effectivePosition = this.getEffectivePosition()\n\n return {\n 'br-skiplink': true,\n full: effectiveVariant === 'compound',\n [effectivePosition]: true,\n visible: this.isVisible,\n }\n }\n\n render() {\n return (\n <Host>\n <nav part=\"container\" class={this.getCssClassMap()} id={this.customId} role=\"navigation\">\n <br-list>\n <slot></slot>\n </br-list>\n </nav>\n </Host>\n )\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"br-skip-link.entry.esm.js","sources":["../../packages/webcomponents/src/components/skip-link/skip-link.scss?tag=br-skip-link&encapsulation=shadow","../../packages/webcomponents/src/components/skip-link/skip-link.tsx"],"sourcesContent":["@import \"~@govbr-ds/core/src/components/skiplink/skiplink\";\n\n:host {\n @include skiplink-configs;\n}\n\n.br-skiplink {\n &.top-left {\n left: var(--spacing-scale-3x) !important;\n right: auto !important;\n }\n\n &.top-center {\n left: 50% !important;\n right: auto !important;\n transform: translateX(-50%);\n\n &.full {\n transform: translateX(-50%) translateY(-100%);\n\n &.visible {\n transform: translateX(-50%) translateY(0);\n }\n }\n }\n\n &.top-right {\n left: auto !important;\n right: var(--spacing-scale-3x) !important;\n }\n\n &.visible {\n top: 0 !important;\n }\n\n &.full {\n br-list {\n display: flex;\n flex-direction: row;\n gap: 0;\n\n ::slotted(br-skiplink-item) {\n list-style: none;\n }\n }\n }\n\n &:not(.full) {\n min-width: var(--skiplink-min-width);\n }\n}\n","import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\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/skip-link?tab=designer).\n *\n * @slot default - Slot para inserir os itens de navegação rápida (br-skiplink-item).\n *\n * @part container - Parte para o contêiner principal do componente skip-link, usada para estilização via ::part().\n */\n@Component({\n tag: 'br-skip-link',\n styleUrl: 'skip-link.scss',\n shadow: true,\n})\nexport class SkipLink {\n /**\n * Referência ao elemento host do componente.\n * Utilize esta propriedade para acessar e manipular o elemento do DOM associado ao componente.\n */\n @Element() el: HTMLBrSkipLinkElement\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 * Define se o skip link apresenta um ou múltiplos itens visíveis.\n * - 'simple': Exibe apenas um item por vez.\n * - 'compound': Exibe uma lista com múltiplos itens.\n */\n @Prop({ reflect: true }) readonly variant: 'simple' | 'compound' = 'compound'\n\n /**\n * Define a posição do skip link na tela.\n * - 'top-left': Posicionado no canto superior esquerdo.\n * - 'top-center': Posicionado no centro superior.\n * - 'top-right': Posicionado no canto superior direito.\n */\n @Prop({ reflect: true }) readonly position: 'top-left' | 'top-center' | 'top-right' = 'top-left'\n\n /**\n * Define o z-index do componente.\n * Controla a ordem de empilhamento do componente na página.\n */\n @Prop({ reflect: true }) readonly zIndex: number | null = null\n\n /**\n * Exibe a contagem de itens no formato (1/4), (2/4), etc.\n * Quando `true`, cada item mostrará sua posição relativa ao total de itens.\n * Por padrão, é `true` para o modo simple e `false` para o modo compound.\n */\n @Prop({ reflect: true }) readonly showItemCount?: boolean\n\n /**\n * Estado interno que controla a visibilidade do componente.\n */\n @State() private isVisible: boolean = false\n\n /**\n * Define se o componente está em modo tela pequena\n */\n @State() private isSmallScreen: boolean = false\n\n /**\n * Define se o componente precisa mudar para modo simples por falta de espaço\n */\n @State() private needsSimpleMode: boolean = false\n\n /**\n * Largura do container pai\n */\n @State() private containerWidth: number = 0\n\n /**\n * ResizeObserver para monitorar mudanças no tamanho do container\n */\n private resizeObserver: ResizeObserver\n\n /**\n * Evento emitido quando um item do skiplink é ativado.\n * O evento contém informações sobre o item acionado e o elemento target.\n */\n @Event() brSkiplinkNavigation: EventEmitter<{ itemId: string; target: string }>\n\n /**\n * Evento emitido quando o skiplink se torna visível.\n */\n @Event() brDidShow: EventEmitter<void>\n\n /**\n * Evento emitido quando o skiplink se torna oculto.\n */\n @Event() brDidHide: EventEmitter<void>\n\n @Watch('zIndex')\n updateStyles() {\n if (this.zIndex !== null && this.zIndex !== undefined) {\n this.el.style.zIndex = `${this.zIndex}`\n this.el.style.setProperty('--skiplink-layer', `${this.zIndex}`)\n }\n }\n\n /**\n * Observa mudanças nos estados que afetam o modo efetivo (simple/compound)\n * e atualiza as contagens dos itens quando necessário.\n */\n @Watch('needsSimpleMode')\n @Watch('isSmallScreen')\n watchModeChanges() {\n this.updateItemCounts()\n }\n\n /**\n * Listener para eventos de navegação dos itens filhos.\n */\n @Listen('brSkiplinkItemClick')\n handleItemNavigation(event: CustomEvent<{ itemId: string; target: string }>) {\n this.brSkiplinkNavigation.emit(event.detail)\n this.hide()\n }\n\n /**\n * Listener para evento de foco no componente.\n */\n @Listen('focusin')\n handleFocusIn() {\n if (!this.isVisible) {\n this.show()\n }\n }\n\n /**\n * Listener para evento de perda de foco no componente.\n */\n @Listen('focusout')\n handleFocusOut(event: FocusEvent) {\n const relatedTarget = event.relatedTarget as HTMLElement | null\n if (relatedTarget === null || !this.el.contains(relatedTarget)) {\n this.hide()\n }\n }\n\n /**\n * Listener para a tecla Escape.\n */\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape' && this.isVisible) {\n event.preventDefault()\n this.hide()\n ;(document.activeElement as HTMLElement)?.blur()\n return\n }\n }\n\n connectedCallback() {\n document.addEventListener('keydown', this.globalKeyHandler)\n\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(this.updateContainerSize)\n const parentElement = this.el.parentElement\n if (parentElement !== null) {\n this.resizeObserver.observe(parentElement)\n }\n }\n }\n\n disconnectedCallback() {\n document.removeEventListener('keydown', this.globalKeyHandler)\n\n if (this.resizeObserver !== undefined && this.resizeObserver !== null) {\n this.resizeObserver.disconnect()\n }\n }\n\n componentWillLoad() {\n const parentElement = this.el.parentElement\n if (parentElement !== null) {\n this.containerWidth = parentElement.clientWidth\n }\n }\n\n componentDidLoad() {\n this.updateItemCounts()\n this.calculateItemsWidth()\n }\n\n /**\n * Manipulador global para atalhos de teclado Alt+[número].\n */\n private globalKeyHandler = (event: KeyboardEvent) => {\n if (event.altKey && /^[1-9]$/.test(event.key)) {\n const items = this.el.querySelectorAll('br-skiplink-item') as NodeListOf<HTMLBrSkiplinkItemElement>\n const targetItem = Array.from(items).find((item) => {\n const keyNumber = item.getAttribute('key-number')\n return keyNumber === event.key\n })\n\n if (targetItem && typeof targetItem.navigateToTarget === 'function') {\n event.preventDefault()\n targetItem.navigateToTarget()\n this.show()\n }\n }\n }\n\n /**\n * Calcula a largura total dos itens e atualiza os estados do componente\n */\n private updateContainerSize = (entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const width = entry.contentRect.width\n this.containerWidth = width\n this.isSmallScreen = width < 570\n\n if (!this.isSmallScreen) {\n this.calculateItemsWidth()\n } else {\n this.needsSimpleMode = false\n }\n }\n }\n\n /**\n * Calcula a largura total dos itens do skip-link e determina se deve usar modo simple ou compound.\n */\n private calculateItemsWidth() {\n requestAnimationFrame(() => {\n const items = this.el.querySelectorAll('br-skiplink-item') as NodeListOf<HTMLBrSkiplinkItemElement>\n\n if (items.length === 0 || this.isSmallScreen) return\n if (items.length > 4) {\n this.needsSimpleMode = true\n return\n }\n\n this.needsSimpleMode = false\n const totalWidth = this.sumItemsWidth(items)\n\n const availableWidth = this.calculateAvailableWidth()\n\n if (totalWidth > availableWidth) {\n this.needsSimpleMode = true\n }\n })\n }\n\n /**\n * Soma a largura de todos os itens do skip-link\n */\n private sumItemsWidth(items: NodeListOf<HTMLBrSkiplinkItemElement>): number {\n let total = 0\n\n items.forEach((item) => {\n const brItem = item.shadowRoot?.querySelector('br-item') as HTMLElement | null\n if (brItem === null) return\n\n const width = brItem.offsetWidth || brItem.scrollWidth || brItem.getBoundingClientRect().width\n total += width\n })\n\n return total\n }\n\n /**\n * Calcula a largura disponível descontando margens e margem de segurança\n */\n private calculateAvailableWidth(): number {\n if (this.containerWidth === 0) return 0\n\n // Obtém o valor da margem definida no CSS\n const computedStyle = getComputedStyle(this.el)\n const spacingValue = computedStyle.getPropertyValue('--spacing-scale-3x').trim()\n const margin = parseFloat(spacingValue) || 24\n\n // Margem de segurança para evitar quebras visuais\n const safetyMargin = 20\n\n // Desconta: margem esquerda + margem direita + margem de segurança\n return this.containerWidth - margin * 2 - safetyMargin\n }\n\n /**\n * Atualiza os atributos de contagem nos itens filhos.\n * Adiciona data-item-index e data-item-total em cada br-skiplink-item.\n * A contagem é exibida quando o componente está em modo simple (incluindo modo responsivo).\n */\n private updateItemCounts() {\n const effectiveVariant = this.isSmallScreen || this.needsSimpleMode ? 'simple' : this.variant\n const shouldShowCount = this.showItemCount !== undefined ? this.showItemCount : effectiveVariant === 'simple'\n const isCompoundMode = effectiveVariant === 'compound'\n\n const items = this.el.querySelectorAll('br-skiplink-item') as NodeListOf<HTMLBrSkiplinkItemElement>\n\n items.forEach((item) => {\n if (isCompoundMode) {\n item.classList.add('compound-mode')\n } else {\n item.classList.remove('compound-mode')\n }\n })\n\n if (!shouldShowCount) {\n items.forEach((item) => {\n item.removeAttribute('data-item-index')\n item.removeAttribute('data-item-total')\n })\n return\n }\n\n const total = items.length\n items.forEach((item, index) => {\n item.setAttribute('data-item-index', (index + 1).toString())\n item.setAttribute('data-item-total', total.toString())\n })\n }\n\n /**\n * Oculta o componente programaticamente.\n */\n @Method()\n async hide(): Promise<void> {\n const focusedElement = this.el.querySelector(':focus')\n if (focusedElement instanceof HTMLElement) {\n focusedElement.blur()\n }\n this.isVisible = false\n this.brDidHide.emit()\n return Promise.resolve()\n }\n\n /**\n * Exibe o componente programaticamente.\n */\n @Method()\n async show(): Promise<void> {\n this.isVisible = true\n\n await new Promise((resolve) => requestAnimationFrame(resolve))\n\n const firstItem = this.el.querySelector('br-skiplink-item') as HTMLBrSkiplinkItemElement | null\n if (firstItem !== null) {\n if (typeof firstItem.itemFocus === 'function') {\n await firstItem.itemFocus()\n } else {\n const focusableElement = firstItem.shadowRoot?.querySelector('a, button') as HTMLElement | null\n if (focusableElement !== null) {\n focusableElement.focus()\n }\n }\n }\n\n this.brDidShow.emit()\n return Promise.resolve()\n }\n\n private getEffectivePosition(): 'top-left' | 'top-center' | 'top-right' {\n if (this.isSmallScreen) {\n return 'top-left'\n }\n return this.position\n }\n\n private getCssClassMap(): CssClassMap {\n const effectiveVariant = this.isSmallScreen || this.needsSimpleMode ? 'simple' : this.variant\n const effectivePosition = this.getEffectivePosition()\n\n return {\n 'br-skiplink': true,\n full: effectiveVariant === 'compound',\n [effectivePosition]: true,\n visible: this.isVisible,\n }\n }\n\n render() {\n return (\n <Host>\n <nav part=\"container\" class={this.getCssClassMap()} id={this.customId} role=\"navigation\">\n <br-list>\n <slot></slot>\n </br-list>\n </nav>\n </Host>\n )\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"br-skiplink-item.entry.esm.js","sources":["../../packages/webcomponents/src/components/skip-link/skip-link-item/skip-link-item.scss?tag=br-skiplink-item&encapsulation=shadow","../../packages/webcomponents/src/components/skip-link/skip-link-item/skip-link-item.tsx"],"sourcesContent":[":host {\n display: contents;\n\n br-item {\n box-shadow: var(--skiplink-shadow);\n display: inline-flex;\n min-width: var(--skiplink-min-width);\n position: absolute;\n top: -100vh;\n transition: top var(--skiplink-duration) var(--skiplink-timing-function);\n white-space: nowrap;\n width: auto;\n\n &:focus-within {\n top: 0;\n }\n }\n}\n\n:host(.compound-mode) {\n br-item {\n box-shadow: none;\n min-width: 0;\n position: relative;\n top: 0;\n }\n}\n","import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n} from '@stencil/core'\n\nimport Helpers from '../../../utils/helpers'\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/skip-link?tab=designer).\n *\n * @slot default - Slot para o texto do link de navegação rápida.\n * @slot tag - Slot para personalizar a tag numérica do atalho de teclado, exibindo o valor de key-number por padrão.\n */\n@Component({\n tag: 'br-skiplink-item',\n styleUrl: 'skip-link-item.scss',\n shadow: true,\n})\nexport class SkipLinkItem {\n /**\n * Referência ao elemento host do componente.\n * Utilize esta propriedade para acessar e manipular o elemento do DOM associado ao componente.\n */\n @Element() el: HTMLBrSkiplinkItemElement\n\n @AttachInternals() elementInternals: ElementInternals\n\n /**\n * ID do elemento de destino ou seletor CSS.\n * Este é o elemento para o qual o usuário será levado ao ativar este item.\n */\n @Prop({ reflect: true }) readonly target!: string\n\n /**\n * Número da tecla para acesso rápido.\n * Permite que o usuário ative este item pressionando Alt+[keyNumber].\n * Aceita valores de 1 a 9.\n * Esta propriedade implementa uma alternativa ao accessKey nativa,\n * fornecendo um atalho de teclado consistente e acessível.\n */\n @Prop({ reflect: true }) readonly keyNumber?: number\n\n /**\n * ID personalizado.\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 * Controla a visibilidade da tag numérica.\n * Quando `true`, a tag numérica não será exibida, mesmo que `keyNumber` esteja definido.\n * O atalho de teclado continua funcionando, apenas a indicação visual é ocultada.\n */\n @Prop({ reflect: true }) readonly hideTag: boolean = false\n\n /**\n * Estado interno que armazena o índice do item (1, 2, 3...).\n * Definido automaticamente pelo componente pai.\n */\n @State() private itemIndex: number | null = null\n\n /**\n * Estado interno que armazena o total de itens.\n * Definido automaticamente pelo componente pai.\n */\n @State() private itemTotal: number | null = null\n\n /**\n * MutationObserver para monitorar mudanças nos atributos de contagem.\n * Observa quando o componente pai define data-item-index e data-item-total.\n */\n private mutationObserver: MutationObserver | null = null\n\n /**\n * Evento emitido quando o item é clicado/ativado.\n * O evento contém informações sobre o item e o target.\n */\n @Event() brSkiplinkItemClick: EventEmitter<{ itemId: string; target: string }>\n\n /**\n * Evento emitido quando o item recebe foco.\n */\n @Event() brSkiplinkItemFocus: EventEmitter<{ itemId: string }>\n\n /**\n * Move o foco para este item.\n */\n @Method()\n async itemFocus(): Promise<void> {\n const brItemElement = this.el.shadowRoot?.querySelector('br-item') as HTMLElement | null\n\n if (brItemElement !== null) {\n await new Promise((resolve) => requestAnimationFrame(resolve))\n\n const brItemShadowRoot = brItemElement.shadowRoot\n if (brItemShadowRoot !== null) {\n const focusableElement = brItemShadowRoot.querySelector('a, button') as HTMLElement | null\n if (focusableElement !== null) {\n focusableElement.focus()\n this.brSkiplinkItemFocus.emit({ itemId: this.customId })\n return\n }\n }\n\n brItemElement.focus()\n this.brSkiplinkItemFocus.emit({ itemId: this.customId })\n }\n }\n\n /**\n * Navega para o target definido.\n * Move o foco para o elemento alvo e ajusta a rolagem da página se necessário.\n */\n @Method()\n async navigateToTarget(): Promise<void> {\n try {\n const targetElement = document.querySelector(this.target) as HTMLElement | null\n\n if (targetElement !== null) {\n targetElement.setAttribute('tabindex', '-1')\n targetElement.focus()\n\n targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' })\n\n this.brSkiplinkItemClick.emit({\n itemId: this.customId,\n target: this.target,\n })\n } else {\n console.warn(`Skip Link: Target element \"${this.target}\" not found`)\n }\n } catch (error) {\n console.error('Skip Link: Error navigating to target', error)\n }\n }\n\n /**\n * Listener para cliques no item.\n */\n @Listen('click')\n handleClick(_event: MouseEvent) {\n this.navigateToTarget()\n }\n\n /**\n * Listener para teclas Enter, Space e atalho Alt+[keyNumber].\n */\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n const skipLink = this.el.closest('br-skip-link') as HTMLBrSkipLinkElement\n if (skipLink !== null && typeof skipLink.hide === 'function') {\n event.preventDefault()\n skipLink.hide()\n }\n return\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.navigateToTarget()\n return\n }\n\n // atalho Alt+[keyNumber]\n if (event.altKey && this.keyNumber && event.key === this.keyNumber.toString()) {\n event.preventDefault()\n this.navigateToTarget()\n return\n }\n }\n\n /**\n * Listener para foco no item.\n */\n @Listen('focus')\n handleFocus() {\n this.brSkiplinkItemFocus.emit({ itemId: this.customId })\n }\n\n componentWillLoad() {\n this.updateItemCount()\n }\n\n componentDidLoad() {\n this.mutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.type === 'attributes' &&\n (mutation.attributeName === 'data-item-index' || mutation.attributeName === 'data-item-total')\n ) {\n this.updateItemCount()\n }\n })\n })\n\n this.mutationObserver.observe(this.el, {\n attributes: true,\n attributeFilter: ['data-item-index', 'data-item-total'],\n })\n }\n\n disconnectedCallback() {\n if (this.mutationObserver !== null && this.mutationObserver !== undefined) {\n this.mutationObserver.disconnect()\n this.mutationObserver = null\n }\n }\n\n /**\n * Atualiza a contagem de itens lendo os atributos definidos pelo componente pai.\n */\n private updateItemCount() {\n const indexAttr = this.el.getAttribute('data-item-index')\n const totalAttr = this.el.getAttribute('data-item-total')\n\n if (indexAttr !== null && totalAttr !== null) {\n this.itemIndex = parseInt(indexAttr, 10)\n this.itemTotal = parseInt(totalAttr, 10)\n } else {\n this.itemIndex = null\n this.itemTotal = null\n }\n }\n\n /**\n * Retorna a string de contagem no formato (X/Y) se disponível.\n */\n private getItemCountText(): string | null {\n if (this.itemIndex !== null && this.itemTotal !== null) {\n return ` (${this.itemIndex}/${this.itemTotal})`\n }\n return null\n }\n\n render() {\n const itemCountText = this.getItemCountText()\n\n return (\n <Host>\n <br-item\n href={this.target}\n id={this.customId}\n density=\"large\"\n aria-keyshortcuts={this.keyNumber !== undefined ? `Alt+${this.keyNumber}` : undefined}\n >\n <slot></slot>\n {itemCountText && <span aria-hidden=\"true\">{itemCountText}</span>}\n {this.keyNumber && !this.hideTag && (\n <slot name=\"tag\" slot=\"end\">\n <br-tag class=\"ml-1 text\" color=\"bg-interactive\">\n {this.keyNumber}\n </br-tag>\n </slot>\n )}\n </br-item>\n </Host>\n )\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"br-skiplink-item.entry.esm.js","sources":["../../packages/webcomponents/src/components/skip-link/skip-link-item/skip-link-item.scss?tag=br-skiplink-item&encapsulation=shadow","../../packages/webcomponents/src/components/skip-link/skip-link-item/skip-link-item.tsx"],"sourcesContent":[":host {\n display: contents;\n\n br-item {\n box-shadow: var(--skiplink-shadow);\n display: inline-flex;\n min-width: var(--skiplink-min-width);\n position: absolute;\n top: -100vh;\n transition: top var(--skiplink-duration) var(--skiplink-timing-function);\n white-space: nowrap;\n width: auto;\n\n &:focus-within {\n top: 0;\n }\n }\n}\n\n:host(.compound-mode) {\n br-item {\n box-shadow: none;\n min-width: 0;\n position: relative;\n top: 0;\n }\n}\n","import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n} from '@stencil/core'\n\nimport Helpers from '../../../utils/helpers'\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/skip-link?tab=designer).\n *\n * @slot default - Slot para o texto do link de navegação rápida.\n * @slot tag - Slot para personalizar a tag numérica do atalho de teclado, exibindo o valor de key-number por padrão.\n */\n@Component({\n tag: 'br-skiplink-item',\n styleUrl: 'skip-link-item.scss',\n shadow: true,\n})\nexport class SkipLinkItem {\n /**\n * Referência ao elemento host do componente.\n * Utilize esta propriedade para acessar e manipular o elemento do DOM associado ao componente.\n */\n @Element() el: HTMLBrSkiplinkItemElement\n\n @AttachInternals() elementInternals: ElementInternals\n\n /**\n * ID do elemento de destino ou seletor CSS.\n * Este é o elemento para o qual o usuário será levado ao ativar este item.\n */\n @Prop({ reflect: true }) readonly target!: string\n\n /**\n * Número da tecla para acesso rápido.\n * Permite que o usuário ative este item pressionando Alt+[keyNumber].\n * Aceita valores de 1 a 9.\n * Esta propriedade implementa uma alternativa ao accessKey nativa,\n * fornecendo um atalho de teclado consistente e acessível.\n */\n @Prop({ reflect: true }) readonly keyNumber?: number\n\n /**\n * ID personalizado.\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 * Controla a visibilidade da tag numérica.\n * Quando `true`, a tag numérica não será exibida, mesmo que `keyNumber` esteja definido.\n * O atalho de teclado continua funcionando, apenas a indicação visual é ocultada.\n */\n @Prop({ reflect: true }) readonly hideTag: boolean = false\n\n /**\n * Estado interno que armazena o índice do item (1, 2, 3...).\n * Definido automaticamente pelo componente pai.\n */\n @State() private itemIndex: number | null = null\n\n /**\n * Estado interno que armazena o total de itens.\n * Definido automaticamente pelo componente pai.\n */\n @State() private itemTotal: number | null = null\n\n /**\n * MutationObserver para monitorar mudanças nos atributos de contagem.\n * Observa quando o componente pai define data-item-index e data-item-total.\n */\n private mutationObserver: MutationObserver | null = null\n\n /**\n * Evento emitido quando o item é clicado/ativado.\n * O evento contém informações sobre o item e o target.\n */\n @Event() brSkiplinkItemClick: EventEmitter<{ itemId: string; target: string }>\n\n /**\n * Evento emitido quando o item recebe foco.\n */\n @Event() brSkiplinkItemFocus: EventEmitter<{ itemId: string }>\n\n /**\n * Move o foco para este item.\n */\n @Method()\n async itemFocus(): Promise<void> {\n const brItemElement = this.el.shadowRoot?.querySelector('br-item') as HTMLElement | null\n\n if (brItemElement !== null) {\n await new Promise((resolve) => requestAnimationFrame(resolve))\n\n const brItemShadowRoot = brItemElement.shadowRoot\n if (brItemShadowRoot !== null) {\n const focusableElement = brItemShadowRoot.querySelector('a, button') as HTMLElement | null\n if (focusableElement !== null) {\n focusableElement.focus()\n this.brSkiplinkItemFocus.emit({ itemId: this.customId })\n return\n }\n }\n\n brItemElement.focus()\n this.brSkiplinkItemFocus.emit({ itemId: this.customId })\n }\n }\n\n /**\n * Navega para o target definido.\n * Move o foco para o elemento alvo e ajusta a rolagem da página se necessário.\n */\n @Method()\n async navigateToTarget(): Promise<void> {\n try {\n const targetElement = document.querySelector(this.target) as HTMLElement | null\n\n if (targetElement !== null) {\n targetElement.setAttribute('tabindex', '-1')\n targetElement.focus()\n\n targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' })\n\n this.brSkiplinkItemClick.emit({\n itemId: this.customId,\n target: this.target,\n })\n } else {\n console.warn(`Skip Link: Target element \"${this.target}\" not found`)\n }\n } catch (error) {\n console.error('Skip Link: Error navigating to target', error)\n }\n }\n\n /**\n * Listener para cliques no item.\n */\n @Listen('click')\n handleClick(_event: MouseEvent) {\n this.navigateToTarget()\n }\n\n /**\n * Listener para teclas Enter, Space e atalho Alt+[keyNumber].\n */\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n const skipLink = this.el.closest('br-skip-link') as HTMLBrSkipLinkElement\n if (skipLink !== null && typeof skipLink.hide === 'function') {\n event.preventDefault()\n skipLink.hide()\n }\n return\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.navigateToTarget()\n return\n }\n\n // atalho Alt+[keyNumber]\n if (event.altKey && this.keyNumber && event.key === this.keyNumber.toString()) {\n event.preventDefault()\n this.navigateToTarget()\n return\n }\n }\n\n /**\n * Listener para foco no item.\n */\n @Listen('focus')\n handleFocus() {\n this.brSkiplinkItemFocus.emit({ itemId: this.customId })\n }\n\n componentWillLoad() {\n this.updateItemCount()\n }\n\n componentDidLoad() {\n this.mutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.type === 'attributes' &&\n (mutation.attributeName === 'data-item-index' || mutation.attributeName === 'data-item-total')\n ) {\n this.updateItemCount()\n }\n })\n })\n\n this.mutationObserver.observe(this.el, {\n attributes: true,\n attributeFilter: ['data-item-index', 'data-item-total'],\n })\n }\n\n disconnectedCallback() {\n if (this.mutationObserver !== null && this.mutationObserver !== undefined) {\n this.mutationObserver.disconnect()\n this.mutationObserver = null\n }\n }\n\n /**\n * Atualiza a contagem de itens lendo os atributos definidos pelo componente pai.\n */\n private updateItemCount() {\n const indexAttr = this.el.getAttribute('data-item-index')\n const totalAttr = this.el.getAttribute('data-item-total')\n\n if (indexAttr !== null && totalAttr !== null) {\n this.itemIndex = parseInt(indexAttr, 10)\n this.itemTotal = parseInt(totalAttr, 10)\n } else {\n this.itemIndex = null\n this.itemTotal = null\n }\n }\n\n /**\n * Retorna a string de contagem no formato (X/Y) se disponível.\n */\n private getItemCountText(): string | null {\n if (this.itemIndex !== null && this.itemTotal !== null) {\n return ` (${this.itemIndex}/${this.itemTotal})`\n }\n return null\n }\n\n render() {\n const itemCountText = this.getItemCountText()\n\n return (\n <Host>\n <br-item\n href={this.target}\n id={this.customId}\n density=\"large\"\n aria-keyshortcuts={this.keyNumber !== undefined ? `Alt+${this.keyNumber}` : undefined}\n >\n <slot></slot>\n {itemCountText && <span aria-hidden=\"true\">{itemCountText}</span>}\n {this.keyNumber && !this.hideTag && (\n <slot name=\"tag\" slot=\"end\">\n <br-tag class=\"ml-1 text\" color=\"bg-interactive\">\n {this.keyNumber}\n </br-tag>\n </slot>\n )}\n </br-item>\n </Host>\n )\n }\n}\n"],"names":[],"mappings":"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"}
|