@govbr-ds/webcomponents 2.0.0-next.44 → 2.0.0-next.45
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-avatar.cjs.entry.js +104 -31
- package/dist/cjs/br-avatar.cjs.entry.js.map +1 -1
- package/dist/cjs/br-avatar.entry.cjs.js.map +1 -1
- package/dist/cjs/br-breadcrumb.cjs.entry.js +6 -9
- package/dist/cjs/br-breadcrumb.cjs.entry.js.map +1 -1
- package/dist/cjs/br-breadcrumb.entry.cjs.js.map +1 -1
- package/dist/cjs/br-button.br-icon.entry.cjs.js.map +1 -1
- package/dist/cjs/br-button_2.cjs.entry.js +3 -3
- package/dist/cjs/br-button_2.cjs.entry.js.map +1 -1
- package/dist/cjs/br-card.cjs.entry.js +97 -0
- package/dist/cjs/br-card.cjs.entry.js.map +1 -0
- package/dist/cjs/br-card.entry.cjs.js.map +1 -0
- package/dist/cjs/br-checkbox.cjs.entry.js +8 -13
- package/dist/cjs/br-checkbox.cjs.entry.js.map +1 -1
- package/dist/cjs/br-checkbox.entry.cjs.js.map +1 -1
- package/dist/cjs/br-checkgroup.cjs.entry.js +3 -5
- package/dist/cjs/br-checkgroup.cjs.entry.js.map +1 -1
- package/dist/cjs/br-checkgroup.entry.cjs.js.map +1 -1
- package/dist/cjs/br-collapse.br-list.entry.cjs.js.map +1 -1
- package/dist/cjs/br-collapse_2.cjs.entry.js +14 -22
- package/dist/cjs/br-collapse_2.cjs.entry.js.map +1 -1
- package/dist/cjs/br-divider.cjs.entry.js +2 -3
- package/dist/cjs/br-divider.cjs.entry.js.map +1 -1
- package/dist/cjs/br-divider.entry.cjs.js.map +1 -1
- package/dist/cjs/br-dropdown.cjs.entry.js +14 -21
- package/dist/cjs/br-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/br-dropdown.entry.cjs.js.map +1 -1
- package/dist/cjs/br-footer-category.cjs.entry.js +2 -2
- package/dist/cjs/br-footer-item.cjs.entry.js +1 -1
- package/dist/cjs/br-footer-legal.cjs.entry.js +1 -1
- package/dist/cjs/br-footer-logo.cjs.entry.js +1 -1
- package/dist/cjs/br-footer-logo.cjs.entry.js.map +1 -1
- package/dist/cjs/br-footer-logo.entry.cjs.js.map +1 -1
- package/dist/cjs/br-footer-social.cjs.entry.js +1 -1
- package/dist/cjs/br-footer.cjs.entry.js +1 -1
- package/dist/cjs/br-input.br-radio.entry.cjs.js.map +1 -1
- package/dist/cjs/br-input_2.cjs.entry.js +10 -17
- package/dist/cjs/br-input_2.cjs.entry.js.map +1 -1
- package/dist/cjs/br-item.cjs.entry.js +11 -10
- package/dist/cjs/br-item.cjs.entry.js.map +1 -1
- package/dist/cjs/br-item.entry.cjs.js.map +1 -1
- package/dist/cjs/br-loading.cjs.entry.js +4 -5
- package/dist/cjs/br-loading.cjs.entry.js.map +1 -1
- package/dist/cjs/br-loading.entry.cjs.js.map +1 -1
- package/dist/cjs/br-magic-button.cjs.entry.js +2 -2
- package/dist/cjs/br-magic-button.cjs.entry.js.map +1 -1
- package/dist/cjs/br-magic-button.entry.cjs.js.map +1 -1
- package/dist/cjs/br-message.cjs.entry.js +1 -1
- package/dist/cjs/br-scrim.cjs.entry.js +17 -29
- package/dist/cjs/br-scrim.cjs.entry.js.map +1 -1
- package/dist/cjs/br-scrim.entry.cjs.js.map +1 -1
- package/dist/cjs/br-select.cjs.entry.js +16 -20
- package/dist/cjs/br-select.cjs.entry.js.map +1 -1
- package/dist/cjs/br-select.entry.cjs.js.map +1 -1
- package/dist/cjs/br-step-item.cjs.entry.js +14 -27
- package/dist/cjs/br-step-item.cjs.entry.js.map +1 -1
- package/dist/cjs/br-step-item.entry.cjs.js.map +1 -1
- package/dist/cjs/br-step.cjs.entry.js +21 -32
- package/dist/cjs/br-step.cjs.entry.js.map +1 -1
- package/dist/cjs/br-step.entry.cjs.js.map +1 -1
- package/dist/cjs/br-switch.cjs.entry.js +4 -7
- package/dist/cjs/br-switch.cjs.entry.js.map +1 -1
- package/dist/cjs/br-switch.entry.cjs.js.map +1 -1
- package/dist/cjs/br-tab-item.cjs.entry.js +2 -2
- package/dist/cjs/br-tab-item.cjs.entry.js.map +1 -1
- package/dist/cjs/br-tab-item.entry.cjs.js.map +1 -1
- package/dist/cjs/br-tab.cjs.entry.js +4 -5
- package/dist/cjs/br-tab.cjs.entry.js.map +1 -1
- package/dist/cjs/br-tab.entry.cjs.js.map +1 -1
- package/dist/cjs/br-table-cell.cjs.entry.js +1 -1
- package/dist/cjs/br-table-header-cell.cjs.entry.js +1 -1
- package/dist/cjs/br-table-header-row.cjs.entry.js +1 -1
- package/dist/cjs/br-table-row.cjs.entry.js +1 -1
- package/dist/cjs/br-table.cjs.entry.js +1 -1
- package/dist/cjs/br-tag.cjs.entry.js +2 -2
- package/dist/cjs/br-textarea.cjs.entry.js +8 -15
- package/dist/cjs/br-textarea.cjs.entry.js.map +1 -1
- package/dist/cjs/br-textarea.entry.cjs.js.map +1 -1
- package/dist/cjs/br-tooltip.cjs.entry.js +18 -28
- package/dist/cjs/br-tooltip.cjs.entry.js.map +1 -1
- package/dist/cjs/br-tooltip.entry.cjs.js.map +1 -1
- package/dist/cjs/br-upload.cjs.entry.js +2 -3
- package/dist/cjs/br-upload.cjs.entry.js.map +1 -1
- package/dist/cjs/br-upload.entry.cjs.js.map +1 -1
- package/dist/cjs/index-DNnn1o_9.js +4 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/webcomponents.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/avatar/avatar.css +1 -1
- package/dist/collection/components/avatar/avatar.js +120 -85
- package/dist/collection/components/avatar/avatar.js.map +1 -1
- package/dist/collection/components/breadcrumb/breadcrumb.css +1 -1
- package/dist/collection/components/breadcrumb/breadcrumb.js +5 -8
- package/dist/collection/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/collection/components/button/button.css +1 -1
- package/dist/collection/components/button/button.js +1 -1
- package/dist/collection/components/card/card.css +1 -0
- package/dist/collection/components/card/card.js +166 -0
- package/dist/collection/components/card/card.js.map +1 -0
- package/dist/collection/components/checkbox/checkbox.js +8 -13
- package/dist/collection/components/checkbox/checkbox.js.map +1 -1
- package/dist/collection/components/checkgroup/checkgroup.js +3 -5
- package/dist/collection/components/checkgroup/checkgroup.js.map +1 -1
- package/dist/collection/components/collapse/collapse.js +11 -18
- package/dist/collection/components/collapse/collapse.js.map +1 -1
- package/dist/collection/components/divider/divider.js +2 -3
- package/dist/collection/components/divider/divider.js.map +1 -1
- package/dist/collection/components/dropdown/dropdown.js +14 -21
- package/dist/collection/components/dropdown/dropdown.js.map +1 -1
- package/dist/collection/components/footer/footer.js +1 -1
- package/dist/collection/components/footer-category/footer-category.js +2 -2
- package/dist/collection/components/footer-item/footer-item.js +1 -1
- package/dist/collection/components/footer-legal/footer-legal.js +1 -1
- package/dist/collection/components/footer-logo/footer-logo.js +1 -1
- package/dist/collection/components/footer-logo/footer-logo.js.map +1 -1
- package/dist/collection/components/footer-social/footer-social.js +1 -1
- package/dist/collection/components/icon/icon.js +1 -1
- package/dist/collection/components/input/input.js +4 -7
- package/dist/collection/components/input/input.js.map +1 -1
- package/dist/collection/components/item/item.js +11 -10
- package/dist/collection/components/item/item.js.map +1 -1
- package/dist/collection/components/list/list.js +3 -4
- package/dist/collection/components/list/list.js.map +1 -1
- package/dist/collection/components/loading/loading.css +1 -1
- package/dist/collection/components/loading/loading.js +3 -4
- package/dist/collection/components/loading/loading.js.map +1 -1
- package/dist/collection/components/magic-button/magic-button.css +1 -1
- package/dist/collection/components/magic-button/magic-button.js +1 -1
- package/dist/collection/components/magic-button/magic-button.js.map +1 -1
- package/dist/collection/components/message/message.js +1 -1
- package/dist/collection/components/radio/radio.js +6 -10
- package/dist/collection/components/radio/radio.js.map +1 -1
- package/dist/collection/components/scrim/scrim.js +17 -29
- package/dist/collection/components/scrim/scrim.js.map +1 -1
- package/dist/collection/components/select/select.js +16 -20
- package/dist/collection/components/select/select.js.map +1 -1
- package/dist/collection/components/step/step.js +21 -32
- package/dist/collection/components/step/step.js.map +1 -1
- package/dist/collection/components/step-item/step-item.js +14 -27
- package/dist/collection/components/step-item/step-item.js.map +1 -1
- package/dist/collection/components/switch/switch.js +4 -7
- package/dist/collection/components/switch/switch.js.map +1 -1
- package/dist/collection/components/tab/tab.css +1 -1
- package/dist/collection/components/tab/tab.js +3 -4
- package/dist/collection/components/tab/tab.js.map +1 -1
- package/dist/collection/components/tab-item/tab-item.css +1 -1
- package/dist/collection/components/tab-item/tab-item.js +1 -1
- package/dist/collection/components/table/table.js +1 -1
- package/dist/collection/components/table-cell/table-cell.js +1 -1
- package/dist/collection/components/table-header-cell/table-header-cell.js +1 -1
- package/dist/collection/components/table-header-row/table-header-row.js +1 -1
- package/dist/collection/components/table-row/table-row.js +1 -1
- package/dist/collection/components/tag/tag.js +2 -2
- package/dist/collection/components/textarea/textarea.js +8 -15
- package/dist/collection/components/textarea/textarea.js.map +1 -1
- package/dist/collection/components/tooltip/tooltip.js +8 -12
- package/dist/collection/components/tooltip/tooltip.js.map +1 -1
- package/dist/collection/components/upload/upload.js +2 -3
- package/dist/collection/components/upload/upload.js.map +1 -1
- package/dist/collection/pages/components/card/index.js +18 -0
- package/dist/collection/pages/scripts/menu.js +13 -0
- package/dist/collection/utils/floating-ui.js +10 -16
- package/dist/collection/utils/floating-ui.js.map +1 -1
- package/dist/components/br-avatar.js +117 -69
- package/dist/components/br-avatar.js.map +1 -1
- package/dist/components/br-breadcrumb.js +22 -25
- package/dist/components/br-breadcrumb.js.map +1 -1
- package/dist/components/br-button.js +3 -3
- package/dist/components/br-card.d.ts +11 -0
- package/dist/components/br-card.js +141 -0
- package/dist/components/br-card.js.map +1 -0
- package/dist/components/br-checkbox.js +1 -1
- package/dist/components/br-checkgroup.js +15 -17
- package/dist/components/br-checkgroup.js.map +1 -1
- package/dist/components/br-collapse.js +4 -4
- package/dist/components/br-divider.js +1 -1
- package/dist/components/br-dropdown.js +31 -39
- package/dist/components/br-dropdown.js.map +1 -1
- package/dist/components/br-footer-category.js +9 -9
- package/dist/components/br-footer-item.js +4 -4
- package/dist/components/br-footer-legal.js +3 -3
- package/dist/components/br-footer-logo.js +8 -7
- package/dist/components/br-footer-logo.js.map +1 -1
- package/dist/components/br-footer-social.js +5 -5
- package/dist/components/br-footer.js +15 -15
- package/dist/components/br-icon.js +1 -1
- package/dist/components/br-input.js +3 -3
- package/dist/components/br-item.js +3 -3
- package/dist/components/br-list.js +4 -4
- package/dist/components/br-loading.js +7 -6
- package/dist/components/br-loading.js.map +1 -1
- package/dist/components/br-magic-button.js +10 -9
- package/dist/components/br-magic-button.js.map +1 -1
- package/dist/components/br-message.js +3 -3
- package/dist/components/br-radio.js +4 -4
- package/dist/components/br-scrim.js +44 -57
- package/dist/components/br-scrim.js.map +1 -1
- package/dist/components/br-select.js +41 -46
- package/dist/components/br-select.js.map +1 -1
- package/dist/components/br-step-item.js +36 -50
- package/dist/components/br-step-item.js.map +1 -1
- package/dist/components/br-step.js +30 -42
- package/dist/components/br-step.js.map +1 -1
- package/dist/components/br-switch.js +17 -21
- package/dist/components/br-switch.js.map +1 -1
- package/dist/components/br-tab-item.js +10 -10
- package/dist/components/br-tab.js +15 -16
- package/dist/components/br-tab.js.map +1 -1
- package/dist/components/br-table-cell.js +3 -3
- package/dist/components/br-table-header-cell.js +3 -3
- package/dist/components/br-table-header-row.js +3 -3
- package/dist/components/br-table-row.js +3 -3
- package/dist/components/br-table.js +6 -6
- package/dist/components/br-tag.js +8 -8
- package/dist/components/br-textarea.js +30 -37
- package/dist/components/br-textarea.js.map +1 -1
- package/dist/components/br-tooltip.js +118 -132
- package/dist/components/br-tooltip.js.map +1 -1
- package/dist/components/br-upload.js +14 -15
- package/dist/components/br-upload.js.map +1 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +2 -0
- package/dist/components/{p-1eKV5oxP.js → p-3-jhm6pC.js} +8 -9
- package/dist/components/p-3-jhm6pC.js.map +1 -0
- package/dist/components/{p-BU5QW70m.js → p-BlryBljm.js} +28 -33
- package/dist/components/p-BlryBljm.js.map +1 -0
- package/dist/components/{p-DqQ_qkzV.js → p-DhONBlJ-.js} +6 -7
- package/dist/components/p-DhONBlJ-.js.map +1 -0
- package/dist/components/{p-DtU3ZpAC.js → p-DvuyuK9Y.js} +20 -26
- package/dist/components/{p-DtU3ZpAC.js.map → p-DvuyuK9Y.js.map} +1 -1
- package/dist/components/{p-CwEkkt16.js → p-Hceu1c6D.js} +39 -47
- package/dist/components/p-Hceu1c6D.js.map +1 -0
- package/dist/components/{p-B3u7t9TB.js → p-mX_ZX0bR.js} +13 -18
- package/dist/components/p-mX_ZX0bR.js.map +1 -0
- package/dist/components/{p-DoUCJxLj.js → p-ssSt5UuQ.js} +6 -6
- package/dist/components/{p-0V7YvY_S.js → p-xvM_htUS.js} +4 -4
- package/dist/components/{p-B-uKqjsz.js → p-y6TZslWo.js} +21 -26
- package/dist/components/p-y6TZslWo.js.map +1 -0
- package/dist/custom-docs/output-docs.js +3 -5
- package/dist/custom-docs/output-docs.js.map +1 -1
- package/dist/custom-docs/path.js +1 -2
- package/dist/custom-docs/path.js.map +1 -1
- package/dist/custom-elements.json +317 -70
- package/dist/esm/br-avatar.entry.js +104 -31
- package/dist/esm/br-avatar.entry.js.map +1 -1
- package/dist/esm/br-breadcrumb.entry.js +6 -9
- package/dist/esm/br-breadcrumb.entry.js.map +1 -1
- package/dist/esm/br-button.br-icon.entry.js.map +1 -1
- package/dist/esm/br-button_2.entry.js +3 -3
- package/dist/esm/br-button_2.entry.js.map +1 -1
- package/dist/esm/br-card.entry.js +95 -0
- package/dist/esm/br-card.entry.js.map +1 -0
- package/dist/esm/br-checkbox.entry.js +8 -13
- package/dist/esm/br-checkbox.entry.js.map +1 -1
- package/dist/esm/br-checkgroup.entry.js +3 -5
- package/dist/esm/br-checkgroup.entry.js.map +1 -1
- package/dist/esm/br-collapse.br-list.entry.js.map +1 -1
- package/dist/esm/br-collapse_2.entry.js +14 -22
- package/dist/esm/br-collapse_2.entry.js.map +1 -1
- package/dist/esm/br-divider.entry.js +2 -3
- package/dist/esm/br-divider.entry.js.map +1 -1
- package/dist/esm/br-dropdown.entry.js +14 -21
- package/dist/esm/br-dropdown.entry.js.map +1 -1
- package/dist/esm/br-footer-category.entry.js +2 -2
- package/dist/esm/br-footer-item.entry.js +1 -1
- package/dist/esm/br-footer-legal.entry.js +1 -1
- package/dist/esm/br-footer-logo.entry.js +1 -1
- package/dist/esm/br-footer-logo.entry.js.map +1 -1
- package/dist/esm/br-footer-social.entry.js +1 -1
- package/dist/esm/br-footer.entry.js +1 -1
- package/dist/esm/br-input.br-radio.entry.js.map +1 -1
- package/dist/esm/br-input_2.entry.js +10 -17
- package/dist/esm/br-input_2.entry.js.map +1 -1
- package/dist/esm/br-item.entry.js +11 -10
- package/dist/esm/br-item.entry.js.map +1 -1
- package/dist/esm/br-loading.entry.js +4 -5
- package/dist/esm/br-loading.entry.js.map +1 -1
- package/dist/esm/br-magic-button.entry.js +2 -2
- package/dist/esm/br-magic-button.entry.js.map +1 -1
- package/dist/esm/br-message.entry.js +1 -1
- package/dist/esm/br-scrim.entry.js +17 -29
- package/dist/esm/br-scrim.entry.js.map +1 -1
- package/dist/esm/br-select.entry.js +16 -20
- package/dist/esm/br-select.entry.js.map +1 -1
- package/dist/esm/br-step-item.entry.js +14 -27
- package/dist/esm/br-step-item.entry.js.map +1 -1
- package/dist/esm/br-step.entry.js +21 -32
- package/dist/esm/br-step.entry.js.map +1 -1
- package/dist/esm/br-switch.entry.js +4 -7
- package/dist/esm/br-switch.entry.js.map +1 -1
- package/dist/esm/br-tab-item.entry.js +2 -2
- package/dist/esm/br-tab-item.entry.js.map +1 -1
- package/dist/esm/br-tab.entry.js +4 -5
- package/dist/esm/br-tab.entry.js.map +1 -1
- package/dist/esm/br-table-cell.entry.js +1 -1
- package/dist/esm/br-table-header-cell.entry.js +1 -1
- package/dist/esm/br-table-header-row.entry.js +1 -1
- package/dist/esm/br-table-row.entry.js +1 -1
- package/dist/esm/br-table.entry.js +1 -1
- package/dist/esm/br-tag.entry.js +2 -2
- package/dist/esm/br-textarea.entry.js +8 -15
- package/dist/esm/br-textarea.entry.js.map +1 -1
- package/dist/esm/br-tooltip.entry.js +18 -28
- package/dist/esm/br-tooltip.entry.js.map +1 -1
- package/dist/esm/br-upload.entry.js +2 -3
- package/dist/esm/br-upload.entry.js.map +1 -1
- package/dist/esm/index-DmA0bHaX.js +4 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/webcomponents.js +1 -1
- package/dist/hydrate/index.js +411 -347
- package/dist/hydrate/index.mjs +411 -347
- package/dist/types/components/avatar/avatar.d.ts +63 -27
- package/dist/types/components/card/card.d.ts +44 -0
- package/dist/types/components.d.ts +73 -32
- package/dist/webcomponents/br-avatar.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-breadcrumb.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-button.br-icon.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-card.entry.esm.js.map +1 -0
- package/dist/webcomponents/br-checkbox.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-checkgroup.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-collapse.br-list.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-divider.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-dropdown.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-footer-logo.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-input.br-radio.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-item.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-loading.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-magic-button.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-scrim.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-select.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-step-item.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-step.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-switch.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-tab-item.entry.esm.js.map +1 -1
- package/dist/webcomponents/br-tab.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-upload.entry.esm.js.map +1 -1
- package/dist/webcomponents/{p-b16a7896.entry.js → p-096b0875.entry.js} +28 -40
- package/dist/webcomponents/{p-b16a7896.entry.js.map → p-096b0875.entry.js.map} +1 -1
- package/dist/webcomponents/{p-64545afe.entry.js → p-0fe0dcc1.entry.js} +5 -5
- package/dist/webcomponents/{p-744eb116.entry.js → p-16f8e426.entry.js} +15 -15
- package/dist/webcomponents/{p-67e47dd0.entry.js → p-1d018f30.entry.js} +4 -4
- package/dist/webcomponents/{p-d7a4225f.entry.js → p-22682cde.entry.js} +19 -24
- package/dist/webcomponents/p-22682cde.entry.js.map +1 -0
- package/dist/webcomponents/{p-c966ab17.entry.js → p-24f6adad.entry.js} +28 -35
- package/dist/webcomponents/p-24f6adad.entry.js.map +1 -0
- package/dist/webcomponents/{p-4f41615a.entry.js → p-2a407917.entry.js} +7 -7
- package/dist/webcomponents/{p-d7265a28.entry.js → p-3615200c.entry.js} +11 -10
- package/dist/webcomponents/p-3615200c.entry.js.map +1 -0
- package/dist/webcomponents/{p-0d46ca85.entry.js → p-46f1f54c.entry.js} +25 -30
- package/dist/webcomponents/p-46f1f54c.entry.js.map +1 -0
- package/dist/webcomponents/{p-07f5518d.entry.js → p-4b3042fb.entry.js} +44 -53
- package/dist/webcomponents/p-4b3042fb.entry.js.map +1 -0
- package/dist/webcomponents/{p-db84202e.entry.js → p-502c9692.entry.js} +4 -4
- package/dist/webcomponents/{p-6fcaf560.entry.js → p-62ac038c.entry.js} +44 -57
- package/dist/webcomponents/p-62ac038c.entry.js.map +1 -0
- package/dist/webcomponents/{p-59f07375.entry.js → p-70d4da25.entry.js} +10 -10
- package/dist/webcomponents/{p-b7c58efc.entry.js → p-761f7798.entry.js} +7 -7
- package/dist/webcomponents/{p-df308ecd.entry.js → p-83df407a.entry.js} +15 -17
- package/dist/webcomponents/p-83df407a.entry.js.map +1 -0
- package/dist/webcomponents/{p-25addf8c.entry.js → p-88bfa633.entry.js} +4 -4
- package/dist/webcomponents/{p-08702123.entry.js → p-8ab5744a.entry.js} +18 -24
- package/dist/webcomponents/{p-08702123.entry.js.map → p-8ab5744a.entry.js.map} +1 -1
- package/dist/webcomponents/{p-8dba2e0e.entry.js → p-8b15dfc8.entry.js} +114 -128
- package/dist/webcomponents/p-8b15dfc8.entry.js.map +1 -0
- package/dist/webcomponents/{p-02d3c9c1.entry.js → p-8b24abe6.entry.js} +40 -50
- package/dist/webcomponents/p-8b24abe6.entry.js.map +1 -0
- package/dist/webcomponents/{p-2190e7a9.entry.js → p-90abf633.entry.js} +5 -6
- package/dist/webcomponents/p-90abf633.entry.js.map +1 -0
- package/dist/webcomponents/{p-1457ba7e.entry.js → p-94afd91b.entry.js} +10 -9
- package/dist/webcomponents/p-94afd91b.entry.js.map +1 -0
- package/dist/webcomponents/{p-fb3e3276.entry.js → p-9ed0a45f.entry.js} +9 -8
- package/dist/webcomponents/p-9ed0a45f.entry.js.map +1 -0
- package/dist/webcomponents/{p-8b4d5bf1.entry.js → p-9f9f80c1.entry.js} +2 -2
- package/dist/webcomponents/{p-a9af8d3e.entry.js → p-a802ca08.entry.js} +13 -14
- package/dist/webcomponents/p-a802ca08.entry.js.map +1 -0
- package/dist/webcomponents/{p-e5b33b7e.entry.js → p-abf81334.entry.js} +15 -19
- package/dist/webcomponents/{p-e5b33b7e.entry.js.map → p-abf81334.entry.js.map} +1 -1
- package/dist/webcomponents/{p-a06b7d9d.entry.js → p-ac4ce40c.entry.js} +30 -44
- package/dist/webcomponents/{p-a06b7d9d.entry.js.map → p-ac4ce40c.entry.js.map} +1 -1
- package/dist/webcomponents/{p-9e1743b6.entry.js → p-b019dfca.entry.js} +7 -7
- package/dist/webcomponents/{p-f7a210a8.entry.js → p-b565e6e5.entry.js} +4 -4
- package/dist/webcomponents/{p-33ab56d5.entry.js → p-b600b95e.entry.js} +18 -21
- package/dist/webcomponents/p-b600b95e.entry.js.map +1 -0
- package/dist/webcomponents/{p-41443414.entry.js → p-bbd38dd7.entry.js} +4 -4
- package/dist/webcomponents/{p-cbaac66c.entry.js → p-cac6afba.entry.js} +29 -37
- package/dist/webcomponents/{p-cbaac66c.entry.js.map → p-cac6afba.entry.js.map} +1 -1
- package/dist/webcomponents/{p-ac0f37e9.entry.js → p-d549a87b.entry.js} +4 -4
- package/dist/webcomponents/{p-51cc97aa.entry.js → p-deb094fb.entry.js} +4 -4
- package/dist/webcomponents/{p-3350d161.entry.js → p-df6e707a.entry.js} +116 -66
- package/dist/webcomponents/p-df6e707a.entry.js.map +1 -0
- package/dist/webcomponents/p-ee9fe4a2.entry.js +119 -0
- package/dist/webcomponents/p-ee9fe4a2.entry.js.map +1 -0
- package/dist/webcomponents/{p-238a6399.entry.js → p-f1738ae0.entry.js} +16 -17
- package/dist/webcomponents/p-f1738ae0.entry.js.map +1 -0
- package/dist/webcomponents/webcomponents.esm.js +15 -15
- package/dist/webcomponents.html-custom-data.json +13 -5
- 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-1eKV5oxP.js.map +0 -1
- package/dist/components/p-B-uKqjsz.js.map +0 -1
- package/dist/components/p-B3u7t9TB.js.map +0 -1
- package/dist/components/p-BU5QW70m.js.map +0 -1
- package/dist/components/p-CwEkkt16.js.map +0 -1
- package/dist/components/p-DIPMDb5E.js +0 -55
- package/dist/components/p-DIPMDb5E.js.map +0 -1
- package/dist/components/p-DqQ_qkzV.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-02d3c9c1.entry.js.map +0 -1
- package/dist/webcomponents/p-07f5518d.entry.js.map +0 -1
- package/dist/webcomponents/p-0d46ca85.entry.js.map +0 -1
- package/dist/webcomponents/p-1457ba7e.entry.js.map +0 -1
- package/dist/webcomponents/p-2190e7a9.entry.js.map +0 -1
- package/dist/webcomponents/p-238a6399.entry.js.map +0 -1
- package/dist/webcomponents/p-3350d161.entry.js.map +0 -1
- package/dist/webcomponents/p-33ab56d5.entry.js.map +0 -1
- package/dist/webcomponents/p-6fcaf560.entry.js.map +0 -1
- package/dist/webcomponents/p-8dba2e0e.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-a9af8d3e.entry.js.map +0 -1
- package/dist/webcomponents/p-c966ab17.entry.js.map +0 -1
- package/dist/webcomponents/p-d7265a28.entry.js.map +0 -1
- package/dist/webcomponents/p-d7a4225f.entry.js.map +0 -1
- package/dist/webcomponents/p-df308ecd.entry.js.map +0 -1
- package/dist/webcomponents/p-fb3e3276.entry.js.map +0 -1
- /package/dist/components/{p-DoUCJxLj.js.map → p-ssSt5UuQ.js.map} +0 -0
- /package/dist/components/{p-0V7YvY_S.js.map → p-xvM_htUS.js.map} +0 -0
- /package/dist/webcomponents/{p-64545afe.entry.js.map → p-0fe0dcc1.entry.js.map} +0 -0
- /package/dist/webcomponents/{p-744eb116.entry.js.map → p-16f8e426.entry.js.map} +0 -0
- /package/dist/webcomponents/{p-67e47dd0.entry.js.map → p-1d018f30.entry.js.map} +0 -0
- /package/dist/webcomponents/{p-4f41615a.entry.js.map → p-2a407917.entry.js.map} +0 -0
- /package/dist/webcomponents/{p-db84202e.entry.js.map → p-502c9692.entry.js.map} +0 -0
- /package/dist/webcomponents/{p-59f07375.entry.js.map → p-70d4da25.entry.js.map} +0 -0
- /package/dist/webcomponents/{p-b7c58efc.entry.js.map → p-761f7798.entry.js.map} +0 -0
- /package/dist/webcomponents/{p-25addf8c.entry.js.map → p-88bfa633.entry.js.map} +0 -0
- /package/dist/webcomponents/{p-8b4d5bf1.entry.js.map → p-9f9f80c1.entry.js.map} +0 -0
- /package/dist/webcomponents/{p-9e1743b6.entry.js.map → p-b019dfca.entry.js.map} +0 -0
- /package/dist/webcomponents/{p-f7a210a8.entry.js.map → p-b565e6e5.entry.js.map} +0 -0
- /package/dist/webcomponents/{p-41443414.entry.js.map → p-bbd38dd7.entry.js.map} +0 -0
- /package/dist/webcomponents/{p-ac0f37e9.entry.js.map → p-d549a87b.entry.js.map} +0 -0
- /package/dist/webcomponents/{p-51cc97aa.entry.js.map → p-deb094fb.entry.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["collapseCss","Collapse","constructor","hostRef","this","customId","Helpers","generateUniqueId","open","accordionGroup","iconToShow","iconToHide","iconPosition","handleCollapse","event","details","target","isOpen","brDidOpen","emit","id","brDidClose","handleOpen","detail","closeCollapse","componentWillLoad","syncDetailsWithOpen","disconnectedCallback","_a","el","shadowRoot","querySelector","removeEventListener","openCollapse","renderIcon","h","render","itemCount","querySelectorAll","length","Host","key","class","onToggle","role","String","tabindex","name","listCss","List","header","isHorizontal","listId","hideHeaderDivider","collapse","accordion","renderHeader","hasSlotContent","slot","Boolean","componentDidLoad","slotItems","Array","from","forEach","item","nextElement","nextElementSibling","classList","contains","divider","style","borderWidth","width","items","setAttribute","getCssClassMap","horizontal","slotName","directChildren","filter","child","parentElement","renderDivider","renderListBody"],"sources":["../../packages/webcomponents/src/components/collapse/collapse.scss?tag=br-collapse&encapsulation=shadow","../../packages/webcomponents/src/components/collapse/collapse.tsx","../../packages/webcomponents/src/components/list/list.scss?tag=br-list&encapsulation=shadow","../../packages/webcomponents/src/components/list/list.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n\n .br-collapse {\n .trigger {\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:not(:disabled):hover,\n &:not(:disabled):focus-visible {\n background-image: linear-gradient(rgba(var(--color-rgb), var(--hover)), rgba(var(--color-rgb), var(--hover)));\n }\n }\n\n .trigger-content {\n flex: 1 1 auto !important;\n }\n\n .content {\n transition: height 0.3s;\n overflow: hidden;\n }\n\n br-icon {\n color: var(--interactive);\n }\n }\n\n details {\n width: 100%;\n\n summary {\n list-style: none;\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n padding: 8px 12px;\n height: 48px;\n outline: none;\n\n &::-webkit-details-marker {\n display: none;\n }\n\n &:focus-visible {\n outline: var(--focus-width) var(--focus-style) var(--focus);\n }\n }\n }\n\n .visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n }\n}\n","import { AttachInternals, Component, Element, Event, EventEmitter, h, Host, Listen, Method, Prop } from '@stencil/core'\n\nimport Helpers from '../../utils/helpers'\n\n/**\n * O componente `br-collapse` pode ser utilizado em dois cenários principais: collapse simples ou accordion.\n *\n * - Collapse simples: Cada instância funciona de forma independente, permitindo abrir ou fechar o conteúdo conforme necessário, sem impactar outros componentes na página.\n * - Accordion: Quando configurado com a propriedade `accordionGroup`, múltiplos componentes `br-collapse` são agrupados. Nesse caso, apenas um item pode estar expandido por vez. Ao abrir um novo item, o anteriormente expandido será automaticamente fechado.\n *\n * @slot default - O conteúdo expansível mostrado/ocultado dinamicamente.\n * @slot trigger - Permite personalizar o conteúdo do acionador (texto, imagens, etc.).\n */\n@Component({\n tag: 'br-collapse',\n styleUrl: 'collapse.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class Collapse {\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: HTMLBrCollapseElement\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('clp')\n\n /**\n * Define se o collapse está aberto ou fechado.\n * @default false\n */\n @Prop({ reflect: true, mutable: true }) open: boolean = false\n\n /**\n * Define se o collapse faz parte de um accordion\n * @default null\n */\n @Prop() accordionGroup?: string = null\n\n /**\n * Classe CSS para o ícone de expansão\n * @default 'fa6-solid:chevron-down'\n */\n @Prop() iconToShow: string = 'fa6-solid:chevron-down'\n\n /**\n * Classe CSS para o ícone de recolhimento\n * @default 'fa6-solid:chevron-up'\n */\n @Prop() iconToHide: string = 'fa6-solid:chevron-up'\n\n /**\n * Define a posição do ícone: 'left' ou 'right'\n * @default 'right'\n */\n @Prop() iconPosition: 'left' | 'right' = 'right'\n\n /**\n * Evento emitido ao expandir.\n */\n @Event() brDidOpen: EventEmitter<{ id: string; accordionGroup: string }>\n\n /**\n * Evento emitido ao recolher.\n */\n @Event() brDidClose: EventEmitter<{ id: string; accordionGroup: string }>\n\n /**\n * Evento disparado quando o componente é aberto.\n * @param event Evento disparado quando o componente é aberto.\n */\n @Listen('brDidOpen', { target: 'document' })\n /**\n * Handler para o evento de abertura do componente.\n * Fecha o collapse atual se ele não for parte do mesmo grupo de accordion.\n * @param event Evento disparado quando o componente é aberto.\n */\n handleOpen(event: CustomEvent) {\n if (\n this.accordionGroup &&\n this.accordionGroup === event.detail.accordionGroup &&\n event.detail.id !== this.customId\n ) {\n this.closeCollapse()\n }\n }\n\n /**\n * Ciclo de vida do componente. Chamado uma vez logo após o componente ser adicionado ao DOM.\n */\n componentWillLoad() {\n this.syncDetailsWithOpen()\n }\n\n /**\n * Ciclo de vida do componente. Chamado quando o componente é removido do DOM.\n */\n disconnectedCallback() {\n const details = this.el.shadowRoot?.querySelector('details')\n if (details !== null) {\n details.removeEventListener('toggle', this.handleCollapse)\n }\n }\n\n /**\n * Sincroniza o estado do elemento <details> com a propriedade open.\n * Isso garante que o estado visual do componente corresponda ao estado interno.\n */\n private syncDetailsWithOpen() {\n const details = this.el.shadowRoot?.querySelector('details')\n if (details !== null) {\n details.open = this.open\n }\n }\n\n /**\n * Método chamado quando o elemento <details> é aberto ou fechado.\n * Atualiza o estado interno do componente e emite eventos apropriados.\n * @param event O evento de toggle do elemento <details>.\n */\n private handleCollapse = (event: Event) => {\n const details = event.target as HTMLDetailsElement\n const isOpen = details.open\n\n this.open = isOpen\n if (this.open) {\n this.brDidOpen.emit({ id: this.customId, accordionGroup: this.accordionGroup })\n } else {\n this.brDidClose.emit({ id: this.customId, accordionGroup: this.accordionGroup })\n }\n }\n\n /**\n * Método público para abrir.\n * Este método pode ser chamado externamente para abrir o componente.\n */\n @Method()\n async openCollapse() {\n this.open = true\n this.syncDetailsWithOpen()\n this.brDidOpen.emit({ id: this.customId, accordionGroup: this.accordionGroup })\n }\n\n /**\n * Método público para fechar.\n * Este método pode ser chamado externamente para fechar o componente.\n */\n @Method()\n async closeCollapse() {\n this.open = false\n this.syncDetailsWithOpen()\n this.brDidClose.emit({ id: this.customId, accordionGroup: this.accordionGroup })\n }\n\n /**\n * Renderiza o ícone de acordo com o estado do collapse.\n * Se o collapse estiver aberto, renderiza o ícone para ocultar.\n * Caso contrário, renderiza o ícone para mostrar.\n * @returns JSX do ícone\n */\n private renderIcon() {\n return <br-icon icon-name={this.open ? this.iconToHide : this.iconToShow}></br-icon>\n }\n\n /**\n * Renderiza o componente.\n * O componente é renderizado como um elemento <details> com um <summary> que contém o acionador.\n * @returns JSX do componente.\n */\n render() {\n const itemCount = this.el.querySelectorAll('br-item').length\n\n return (\n <Host>\n <details class=\"br-collapse\" open={this.open} onToggle={this.handleCollapse} id={this.customId}>\n <summary\n class=\"trigger\"\n role=\"button\"\n aria-expanded={String(this.open)}\n aria-controls={`content-${this.customId}`}\n aria-labelledby={`label-${this.customId}`}\n tabindex=\"0\"\n aria-live=\"polite\"\n >\n {this.iconPosition === 'left' && this.renderIcon()}\n <div class=\"trigger-content\" id={`label-${this.customId}`}>\n <slot name=\"trigger\"></slot>\n </div>\n {this.iconPosition === 'right' && this.renderIcon()}\n </summary>\n\n <div\n class=\"content\"\n id={`content-${this.customId}`}\n aria-live=\"polite\"\n aria-labelledby={`label-${this.customId}`}\n >\n {this.open && itemCount > 0 && (\n <div class=\"visually-hidden\">\n {itemCount} {itemCount === 1 ? 'item' : 'itens'} na lista\n </div>\n )}\n <slot></slot>\n </div>\n </details>\n </Host>\n )\n }\n}\n","@import \"~@govbr-ds/core/src/components/list/list\";\n@import \"~@govbr-ds/core/src/components/divider/divider\";\n\n:host {\n display: block;\n\n .br-list.horizontal ::slotted(br-item) {\n flex: 1;\n height: auto;\n min-height: 56px;\n width: auto;\n }\n}\n","import { AttachInternals, Component, Element, h, Host, Prop } from '@stencil/core'\n\nimport { CssClassMap } from '../../utils/interfaces'\n\n/**\n * Para uma descrição detalhada, consulte a [documentação do GovBR-DS](https://www.gov.br/ds/components/list?tab=designer).\n *\n * @slot default - Slot padrão para inclusão dos itens da lista.\n * @slot header - Slot nomeado para inclusão de ações relacionadas ao cabeçalho do list (uso de botões por exemplo).\n */\n@Component({\n tag: 'br-list',\n styleUrl: 'list.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class List {\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: HTMLBrListElement\n\n @AttachInternals() elementInternals: ElementInternals\n\n /**\n * Define o cabeçalho para a lista.\n */\n @Prop({ reflect: true }) readonly header: string = null\n\n /**\n * Indica se a lista será horizontal. Por padrão, a lista é vertical.\n */\n @Prop({ reflect: true }) readonly isHorizontal: boolean = false\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 = `br-list-${listId++}`\n\n /**\n * Indica que o divider para o título da lista estará oculto.\n */\n @Prop({ reflect: true }) readonly hideHeaderDivider: boolean = false\n\n /**\n * Indica se a lista possui o comportamento de collapse.\n */\n @Prop({ reflect: true }) readonly collapse: boolean = false\n\n /**\n * Indica se a lista possui o comportamento de accordion.\n * O valor da propriedade define o grupo, ou seja, o accordion é aplicado a todas as listas que possuem o mesmo valor para esta propriedade.\n */\n @Prop({ reflect: true }) readonly accordion: string = null\n\n /**\n * Método do ciclo de vida do componente, que é chamado uma vez após o componente começar a ser renderizado no DOM.\n */\n componentDidLoad() {\n if (this.isHorizontal) {\n const slotItems = Array.from(this.el.querySelectorAll('br-item'))\n\n slotItems.forEach((item) => {\n const nextElement = item.nextElementSibling\n if (nextElement?.classList.contains('br-divider')) {\n const divider = nextElement as HTMLElement\n divider.style.borderWidth = '0 1px 0 0'\n divider.style.width = '1px'\n }\n })\n }\n\n // adicionar role=\"listitem\" para os itens dentro do slot\n const items = Array.from(this.el.querySelectorAll('br-item'))\n items.forEach((item) => {\n item.setAttribute('role', 'listitem')\n })\n }\n\n /**\n * Método que retorna as classes CSS do componente\n * @returns Objeto com as classes CSS do componente\n */\n private getCssClassMap(): CssClassMap {\n return {\n 'br-list': true,\n horizontal: this.isHorizontal,\n }\n }\n\n /**\n * Verifica se o slot possui conteúdo.\n * @param slotName Nome do slot a ser verificado.\n * @returns true se o slot possui conteúdo, false caso contrário.\n */\n private hasSlotContent(slotName: string): boolean {\n const directChildren = Array.from(this.el.querySelectorAll(`[slot=\"${slotName}\"]`)).filter(\n (child) => child.parentElement === this.el\n )\n return Boolean(directChildren.length)\n }\n\n /**\n * Renderiza o cabeçalho da lista.\n * @returns JSX do cabeçalho da lista\n */\n\n private readonly renderHeader = () => {\n if (this.header?.length > 0 || this.hasSlotContent('header')) {\n return (\n <div\n class={!this.hasSlotContent('header') ? 'header' : null}\n slot={this.collapse || Boolean(this.accordion) ? 'trigger' : null}\n >\n <slot name=\"header\">{!this.hasSlotContent('header') ? <div class=\"title\">{this.header}</div> : null}</slot>\n </div>\n )\n }\n return null\n }\n\n /**\n * Renderiza o divider do cabeçalho.\n * @returns JSX do divider\n */\n private renderDivider() {\n if ((this.header || this.hasSlotContent('header')) && !this.hideHeaderDivider) {\n return <div class=\"br-divider\"></div>\n }\n return null\n }\n\n /**\n * Renderiza o corpo da lista.\n * @returns JSX do corpo da lista.\n */\n private renderListBody() {\n return [this.renderHeader(), this.renderDivider(), <slot></slot>]\n }\n\n /**\n * Renderiza o componente.\n * @returns JSX do componente\n */\n render() {\n return (\n <Host role=\"list\">\n <div class={this.getCssClassMap()} id={this.customId}>\n {Boolean(this.accordion) || this.collapse ? (\n <br-collapse accordion-group={this.accordion || null}>{this.renderListBody()}</br-collapse>\n ) : (\n this.renderListBody()\n )}\n </div>\n </Host>\n )\n }\n}\n\nlet listId = 0\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["selectCss","Select","constructor","hostRef","this","placeholder","isMultiple","options","selectAllLabel","unselectAllLabel","showSearchIcon","isOpen","customId","selectId","parsedOptions","inputValue","isAllSelected","isExpanded","focusedIndex","handleClickOutside","event","target","el","contains","synchronizeSelect","jsonData","JSON","parse","Array","isArray","Error","error","console","message","updateSelectedOptions","updateSelectedAllState","emitSelectedOptions","syncValueFromOutside","newVal","map","o","Object","assign","selected","includes","value","componentWillLoad","componentDidLoad","document","addEventListener","disconnectedCallback","removeEventListener","handleKeydownOnInput","key","closeSelect","preventDefault","openSelect","focusItemInDirection","resetFocus","toggleOpen","handleKeydownOnList","handleKeydownOnItem","index","handleSelection","handleSelectAllKeyDown","toggleSelectAll","input","shadowRoot","querySelector","focus","direction","itemCount","length","focusItem","items","querySelectorAll","item","updatedOptions","option","filter","_a","find","valueChange","emit","elementInternals","setFormValue","stringify","_b","getStringValue","firstSelected","label","howManySelected","selectedValues","allSelected","every","renderInput","h","readonly","onClick","onKeyDown","slot","height","renderSelectAllCheckbox","class","tabindex","role","name","checked","onCheckedChange","renderOptions","exportparts","getComputedId","getCssClassMap","render","id"],"sources":["../../packages/webcomponents/src/components/select/select.scss?tag=br-select&encapsulation=shadow","../../packages/webcomponents/src/components/select/select.tsx"],"sourcesContent":["@import \"~@govbr-ds/core/src/components/select/select\";\n@import \"~@govbr-ds/core/src/components/item/item\";\n\n:host {\n display: inline-block;\n\n .br-select br-list {\n background-color: var(--bg-color);\n box-shadow: var(--select-shadow);\n margin-top: -2px;\n max-height: 404px;\n overflow: auto;\n position: absolute;\n resize: none;\n width: 100%;\n z-index: 1;\n\n @include scrollbar;\n\n &:focus,\n &:active {\n color: var(--color-secondary-09);\n outline: none;\n }\n\n &:hover {\n &::-webkit-scrollbar-thumb {\n background: var(--color-secondary-07);\n }\n }\n\n .br-item br-radio::part(radio-input) {\n visibility: hidden;\n height: 0;\n width: 0;\n }\n\n .br-item br-radio::part(radio-label) {\n padding-left: var(--spacing-scale-base);\n position: relative;\n\n &::before,\n &::after {\n display: none;\n }\n }\n }\n}\n","import { AttachInternals, Component, Element, Event, EventEmitter, h, Method, Prop, State, Watch } from '@stencil/core'\n\nimport { CssClassMap } from '../../utils/interfaces'\n\n@Component({\n tag: 'br-select',\n styleUrl: 'select.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class Select {\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: HTMLBrSelectElement\n\n @AttachInternals() elementInternals: ElementInternals\n\n /**\n * Rótulo que indica o tipo de informação que deve ser selecionada.\n */\n @Prop({ reflect: true }) label: string\n\n /**\n * Texto auxiliar exibido antes de uma seleção.\n */\n @Prop({ reflect: true }) placeholder: string = ''\n\n /**\n * Habilita o modo múltiplo para selecionar várias opções.\n */\n @Prop({ reflect: true }) isMultiple: boolean = false\n\n /**\n * Define as opções disponíveis no componente de seleção.\n * Pode ser fornecida como:\n * - Uma **string** contendo um JSON válido que será analisado em um array de objetos. Exemplo: `'[{\"label\": \"Opção 1\", \"value\": \"1\"}]'.\n * - Um **array de objetos**, onde cada objeto representa uma opção com as propriedades:\n * - `label`: O texto exibido para o usuário (obrigatório).\n * - `value`: O valor associado à opção (obrigatório).\n * - `selected`: Um boolean opcional que indica se a opção está pré-selecionada (padrão: `false`).\n * Se uma string for fornecida, ela será convertida internamente para um array via `JSON.parse`. Caso o formato seja inválido, um erro será registrado e as opções serão definidas como um array vazio.\n * Exemplo de uso:\n * ```typescript\n * options='[{\"label\": \"Sim\", \"value\": \"1\"}, {\"label\": \"Não\", \"value\": \"0\"}]'\n * // ou\n * options=[{ label: \"Sim\", value: \"1\" }, { label: \"Não\", value: \"0\" }]\n * ```\n */\n @Prop({ reflect: true }) options:\n | string\n | {\n label: string\n value: string\n selected?: boolean\n }[] = []\n\n /**\n * Rótulo para selecionar todas as opções.\n */\n @Prop({ reflect: true }) selectAllLabel: string = 'Selecionar todos'\n\n /**\n * Rótulo para desmarcar todas as opções.\n */\n @Prop({ reflect: true }) unselectAllLabel: string = 'Desselecionar todos'\n\n /**\n * Exibe o ícone de busca no campo de entrada.\n */\n @Prop({ reflect: true }) showSearchIcon: boolean = false\n\n /**\n * Indica se a listagem de itens do select está expandida\n */\n @Prop({ reflect: true }) isOpen: boolean = false\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 = `br-select-${selectId++}`\n\n // Representa as opções do select disponíveis para renderização.\n // Cada opção contém `label`, `value` e o estado de seleção (`selected`).\n @State() parsedOptions: { label: string; value: string; selected?: boolean }[] = []\n\n // Valor exibido no input, refletindo as opções selecionadas.\n @State() inputValue: string = ''\n\n /** Valor selecionado (string para single, string[] para multiple) */\n @Prop({ reflect: false }) value?: string | string[];\n\n // Indica se todas as opções estão selecionadas. Comportamento do checkbox \"Selecionar Todos\".\n @State() isAllSelected: boolean = false\n\n // Controla se a lista de opções do select está expandida (aberta) ou colapsada (fechada).\n @State() isExpanded: boolean = false\n\n // Armazena o índice do item atualmente focado, usado para navegação por teclado.\n @State() focusedIndex: number = -1\n\n /**\n * Evento emitido sempre que houver atualização nos itens selecionados.\n * RENOMEADO PARA valueChange para compatibilidade com ngModel.\n */\n @Event({ bubbles: true, composed: true }) valueChange: EventEmitter;\n\n\n @Watch('options')\n synchronizeSelect() {\n try {\n let parsedOptions: { label: string; value: string; selected?: boolean }[] = []\n if (typeof this.options === 'string') {\n try {\n const jsonData = JSON.parse(this.options)\n if (Array.isArray(jsonData)) {\n parsedOptions = jsonData\n } else {\n throw new Error('JSON inválido: deve ser um array')\n }\n } catch (error) {\n console.error('Erro ao converter options para JSON:', error.message)\n parsedOptions = []\n }\n } else if (Array.isArray(this.options)) {\n parsedOptions = this.options\n }\n\n // Sanitiza as opções (remove opções inválidas, etc.)\n this.parsedOptions = parsedOptions\n\n // Atualiza o estado do componente\n this.updateSelectedOptions()\n this.updateSelectedAllState()\n this.emitSelectedOptions()\n } catch (error) {\n console.error('Erro ao processar as opções do select:', error)\n this.parsedOptions = []\n }\n }\n\n @Watch('value')\n syncValueFromOutside(newVal: string | string[]) {\n // Atualize parsedOptions a partir de newVal\n this.parsedOptions = this.parsedOptions.map(o => ({\n ...o,\n selected: this.isMultiple\n ? Array.isArray(newVal) && newVal.includes(o.value)\n : newVal === o.value\n }));\n this.updateSelectedOptions(); // mantém inputValue coeso\n this.updateSelectedAllState();\n }\n\n componentWillLoad() {\n this.isExpanded = this.isOpen\n this.synchronizeSelect()\n }\n\n componentDidLoad() {\n document.addEventListener('click', this.handleClickOutside)\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleClickOutside)\n }\n\n /**\n * Fecha a lista suspensa (`dropdown`) do `br-select` quando o usuário clica fora do componente.\n * O listener global é adicionado no `componentDidLoad` e removido no `disconnectedCallback` para evitar vazamentos de memória.\n * Se a lista estiver aberta (`this.isExpanded`) e o clique ocorrer fora (`!this.el.contains(target)`), ela é fechada.\n * A reatividade do StencilJS garante a atualização automática da interface.\n * A arrow function (`=>`) mantém o contexto correto de `this` ao ser usada como callback.\n *\n * @param {MouseEvent} event O evento de clique.\n * @returns {void}\n */\n private readonly handleClickOutside = (event: MouseEvent) => {\n const target = event.target as HTMLElement\n if (this.isExpanded && !this.el.contains(target)) {\n this.isExpanded = false\n }\n }\n\n private handleKeydownOnInput(event: KeyboardEvent) {\n switch (event.key) {\n case 'Tab':\n this.closeSelect()\n break\n case 'ArrowDown':\n event.preventDefault()\n if (!this.isExpanded) {\n this.openSelect()\n }\n this.focusItemInDirection('next')\n break\n case 'ArrowUp':\n event.preventDefault()\n if (!this.isExpanded) {\n this.openSelect()\n }\n this.focusItemInDirection('previous')\n break\n case 'Escape':\n this.closeSelect()\n this.resetFocus()\n break\n case 'Enter':\n this.toggleOpen()\n break\n default:\n }\n }\n\n private handleKeydownOnList(event: KeyboardEvent) {\n event.preventDefault()\n switch (event.key) {\n case 'Tab':\n case 'Escape':\n this.resetFocus()\n break\n case 'ArrowUp':\n this.focusItemInDirection('previous')\n break\n case 'ArrowDown':\n this.focusItemInDirection('next')\n break\n default:\n break\n }\n }\n\n private handleKeydownOnItem(event: KeyboardEvent, index: number) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.handleSelection(index)\n } else if (event.key === 'Escape') {\n this.closeSelect()\n }\n }\n\n private handleSelectAllKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.toggleSelectAll()\n } else if (event.key === 'Escape') {\n event.preventDefault()\n this.closeSelect()\n }\n }\n\n private resetFocus() {\n const input = this.el.shadowRoot.querySelector('br-input') as HTMLElement\n input.focus()\n }\n\n private focusItemInDirection(direction: 'next' | 'previous') {\n let itemCount = this.parsedOptions.length\n if (this.isMultiple) itemCount += 1\n\n this.focusedIndex =\n direction === 'next' ? (this.focusedIndex + 1) % itemCount : (this.focusedIndex - 1 + itemCount) % itemCount\n\n this.focusItem(this.focusedIndex)\n }\n\n private focusItem(index: number) {\n const items = this.el.shadowRoot.querySelectorAll('.br-item')\n if (items[index]) {\n const item = items[index] as HTMLElement\n item.focus()\n }\n }\n\n private openSelect() {\n this.isExpanded = true\n }\n\n private closeSelect() {\n this.isExpanded = false\n // Resetar o índice focado ao fechar o select\n this.focusedIndex = -1\n }\n\n private handleSelection(index: number) {\n if (index < 0 || index >= this.parsedOptions.length) {\n return\n }\n\n if (this.isMultiple) {\n const updatedOptions = [...this.parsedOptions]\n updatedOptions[index].selected = !updatedOptions[index].selected\n this.parsedOptions = updatedOptions\n } else {\n const updatedOptions = this.parsedOptions.map((option) => ({ ...option, selected: false }))\n updatedOptions[index].selected = true\n this.parsedOptions = updatedOptions\n this.isExpanded = false\n }\n\n // Atualiza a prop 'value' interna do componente\n this.value = this.isMultiple\n ? this.parsedOptions.filter(o => o.selected).map(o => o.value)\n : this.parsedOptions.find(o => o.selected)?.value;\n\n // Emite o evento 'valueChange' para que o ngModel possa capturar\n this.valueChange.emit(this.value);\n\n this.updateSelectedOptions()\n this.updateSelectedAllState()\n this.elementInternals.setFormValue(JSON.stringify(this.value ?? []));\n }\n\n private updateSelectedOptions() {\n this.inputValue = this.getStringValue(this.parsedOptions.filter((option) => option.selected))\n }\n\n private getStringValue(options: { label: string; value: string; selected?: boolean }[]) {\n if (options.length > 0) {\n const firstSelected = options[0].label || options[0].value\n if (this.isMultiple) {\n const howManySelected = options.length > 1 ? ` + (${options.length - 1})` : ''\n return `${firstSelected}${howManySelected}`\n } else {\n return firstSelected\n }\n }\n return ''\n }\n\n private emitSelectedOptions() {\n // A lógica de emissão do evento já está no handleSelection para o ngModel.\n // Esta função pode ser simplificada ou removida se a única finalidade era emitir para ngModel.\n // No entanto, se houver outros consumidores deste evento, você pode mantê-la.\n const selectedValues = this.parsedOptions\n .filter((option) => option.selected === true)\n .map((option) => option.value); // É importante emitir o 'value' para o ngModel.\n\n // Já emitimos em handleSelection, mas se quiser ter certeza, pode emitir aqui também.\n // this.valueChange.emit(this.isMultiple ? selectedValues : selectedValues[0] ?? undefined);\n\n // Atualiza o valor do form associado\n this.elementInternals.setFormValue(JSON.stringify(this.isMultiple ? selectedValues : selectedValues[0] ?? null));\n }\n\n private updateSelectedAllState() {\n const allSelected = this.parsedOptions.every((option) => option.selected)\n this.isAllSelected = allSelected\n }\n\n private toggleSelectAll() {\n const updatedOptions = this.parsedOptions.map((option) => ({ ...option, selected: !this.isAllSelected }))\n this.parsedOptions = updatedOptions\n this.isAllSelected = !this.isAllSelected\n\n this.updateSelectedOptions()\n\n // Atualiza a prop 'value' e emite o evento para ngModel\n this.value = this.isMultiple\n ? this.parsedOptions.filter(o => o.selected).map(o => o.value)\n : this.parsedOptions.find(o => o.selected)?.value;\n this.valueChange.emit(this.value);\n\n this.elementInternals.setFormValue(JSON.stringify(this.value ?? []));\n }\n\n private renderInput() {\n return (\n <br-input\n value={this.inputValue}\n label={this.label}\n placeholder={this.placeholder}\n readonly\n onClick={() => this.toggleOpen()}\n onKeyDown={(event) => this.handleKeydownOnInput(event)}\n >\n {this.showSearchIcon && <br-icon slot=\"icon\" icon-name=\"fa-solid:search\" aria-hidden=\"true\"></br-icon>}\n <br-icon\n slot=\"action\"\n icon-name={this.isExpanded ? 'fa-solid:angle-up' : 'fa-solid:angle-down'}\n height=\"16\"\n aria-hidden=\"true\"\n ></br-icon>\n </br-input>\n )\n }\n\n private renderSelectAllCheckbox() {\n return (\n <div\n class={`br-item highlighted ${this.isAllSelected ? 'selected' : ''}`}\n data-all=\"data-all\"\n tabindex=\"-1\"\n role=\"option\"\n aria-selected={this.isAllSelected}\n onKeyDown={(event) => this.handleSelectAllKeyDown(event)}\n onClick={() => this.toggleSelectAll()}\n >\n <br-checkbox\n name={`checkbox-${this.customId}`}\n label={this.isAllSelected ? this.unselectAllLabel : this.selectAllLabel}\n checked={this.isAllSelected}\n onCheckedChange={() => this.toggleSelectAll()}\n ></br-checkbox>\n </div>\n )\n }\n\n private renderOptions() {\n return this.parsedOptions.map((option, index) => (\n <div\n class={`br-item ${option.selected ? 'selected' : ''}`}\n key={`${option.label}-${this.customId}`}\n role=\"option\"\n tabindex={this.focusedIndex === index ? 0 : -1}\n aria-selected={option.selected}\n onClick={() => this.handleSelection(index)}\n onKeyDown={(event) => this.handleKeydownOnItem(event, index)}\n >\n {this.isMultiple ? (\n <br-checkbox\n name={`checkbox-${index}-${this.customId}`}\n label={option.label || option.value}\n checked={option.selected === true}\n onCheckedChange={() => this.handleSelection(index)}\n />\n ) : (\n <br-radio\n exportparts=\"radio-input, radio-label\"\n name={`radio-${index}-${this.customId}`}\n label={option.label || option.value}\n checked={option.selected === true}\n onCheckedChange={() => this.handleSelection(index)}\n />\n )}\n </div>\n ))\n }\n\n /**\n * Determina um id para o radio.\n */\n private getComputedId() {\n return this.customId?.length > 0 ? this.customId : `br-select-${this.customId}`\n }\n\n /**\n * Inverte o valor da prop `isOpen`\n */\n @Method()\n async toggleOpen() {\n this.isExpanded = !this.isExpanded\n }\n\n private getCssClassMap(): CssClassMap {\n return {\n 'br-select': true,\n }\n }\n\n render() {\n return (\n <div class={this.getCssClassMap()} id={this.getComputedId()}>\n {this.renderInput()}\n\n {this.isExpanded && (\n <br-list tabindex={-1} onKeyDown={(event) => this.handleKeydownOnList(event)}>\n {this.isMultiple && this.renderSelectAllCheckbox()}\n {this.renderOptions()}\n </br-list>\n )}\n </div>\n )\n }\n}\n\nlet selectId = 0\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["loadingCss","Loading","constructor","hostRef","this","isProgress","customId","loadingId","progressPercent","isMedium","getCssClassMap","medium","getAriaLabel","ariaLabel","trim","label","undefined","getProgressBarProps","progressValue","_a","class","String","id","role","renderProgressLoading","h","Object","assign","renderIndeterminateLoading","render","Host","key"],"sources":["../../packages/webcomponents/src/components/loading/loading.scss?tag=br-loading&encapsulation=shadow","../../packages/webcomponents/src/components/loading/loading.tsx"],"sourcesContent":["@import \"~@govbr-ds/core/src/components/loading/loading\";\n\n:host {\n display: block;\n\n .br-loading,\n .loading {\n z-index: auto;\n }\n\n .indeterminate-alignment {\n display: flex;\n align-items: center;\n justify-content: center;\n\n &.vertical {\n flex-direction: column;\n\n .rotulo {\n margin-top: 16px;\n margin-left: 0;\n }\n }\n\n &.horizontal {\n flex-direction: row;\n\n .rotulo {\n margin-top: 0;\n margin-left: 16px;\n }\n }\n }\n}\n","import { Component, Element, h, Host, Prop } from '@stencil/core'\n\nimport { CssClassMap } from '../../utils/interfaces'\n/**\n * Para uma descrição detalhada, consulte a [documentação do GovBR-DS](https://www.gov.br/ds/components/loading?tab=designer).\n */\n@Component({\n tag: 'br-loading',\n styleUrl: 'loading.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class Loading {\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: HTMLBrLoadingElement\n\n /**\n * Determina o tipo de indicador a ser exibido:\n * - Se verdadeiro, exibirá uma barra de progresso com a porcentagem de progresso.\n * - Se falso, exibirá um indicador de carregamento indeterminado.\n */\n @Prop({ reflect: true }) readonly isProgress: boolean = false\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 = `br-loading-${loadingId++}`\n\n /**\n * Define a porcentagem de progresso a ser exibida na barra de progresso.\n * Deve ser um valor numérico entre 0 e 100. Ignorado se `isProgress` estiver definido como falso.\n */\n @Prop({ reflect: true }) readonly progressPercent: number = 100\n\n /**\n * Se verdadeiro, ajusta o tamanho do indicador de carregamento indeterminado para o tamanho médio.\n * Esta propriedade afeta apenas o loading indeterminado.\n */\n @Prop({ reflect: true }) readonly isMedium: boolean = false\n\n /**\n * Texto a ser exibido abaixo do indicador de carregamento.\n * Pode ser usado para fornecer informações adicionais ou descritivas sobre o estado do carregamento.\n */\n @Prop({ reflect: true }) readonly label: string\n\n /**\n * Define o texto do aria-label para acessibilidade.\n * Se não fornecido, será usado o valor da prop 'label' ou 'Progresso de carregamento' como fallback para loading com progresso.\n */\n @Prop({ reflect: true }) readonly ariaLabel: string\n\n private getCssClassMap(): CssClassMap {\n return {\n 'br-loading': true,\n medium: this.isMedium,\n }\n }\n\n private getAriaLabel(): string {\n if (this.ariaLabel && this.ariaLabel.trim() !== '') {\n return this.ariaLabel\n } else if (this.label && this.label.trim() !== '') {\n return this.label\n }\n\n return undefined\n }\n\n private getProgressBarProps() {\n const progressValue = this.progressPercent ?? 0\n\n return {\n class: 'br-loading',\n 'data-progress': this.progressPercent,\n 'aria-valuemin': '0',\n 'aria-valuenow': String(progressValue),\n 'aria-valuemax': '100',\n id: this.customId,\n role: 'progressbar',\n 'aria-label': this.getAriaLabel() || 'Progresso de carregamento',\n }\n }\n\n private renderProgressLoading() {\n return (\n <div {...this.getProgressBarProps()}>\n <div class=\"br-loading-mask full\">\n <div class=\"br-loading-fill\"></div>\n </div>\n <div class=\"br-loading-mask\">\n <div class=\"br-loading-fill\"></div>\n </div>\n </div>\n )\n }\n\n private renderIndeterminateLoading() {\n return (\n <div class={`indeterminate-alignment ${this.isMedium ? 'vertical' : 'horizontal'}`}>\n <div id={this.customId} class={this.getCssClassMap()} role=\"status\" aria-label={this.getAriaLabel()} />\n <span class=\"rotulo\">{this.label}</span>\n </div>\n )\n }\n\n render() {\n return <Host>{this.isProgress ? this.renderProgressLoading() : this.renderIndeterminateLoading()}</Host>\n }\n}\n\nlet loadingId = 0\n"],"mappings":";;;;;;AAAA,MAAMA,IAAa;;MCYNC,IAAO;EANpB,WAAAC,CAAAC;;;;;;eAkBoCC,KAAUC,aAAY;;;;eAMtBD,KAAAE,WAAmB,cAAcC;;;;;IAMjCH,KAAeI,kBAAW;;;;eAM1BJ,KAAQK,WAAY;AAuEvD;EAzDS,cAAAC;IACN,OAAO;MACL,cAAc;MACdC,QAAQP,KAAKK;;;EAIT,YAAAG;IACN,IAAIR,KAAKS,aAAaT,KAAKS,UAAUC,WAAW,IAAI;MAClD,OAAOV,KAAKS;WACP,IAAIT,KAAKW,SAASX,KAAKW,MAAMD,WAAW,IAAI;MACjD,OAAOV,KAAKW;;IAGd,OAAOC;;EAGD,mBAAAC;;IACN,MAAMC,KAAgBC,IAAAf,KAAKI,qBAAe,QAAAW,WAAA,IAAAA,IAAI;IAE9C,OAAO;MACLC,OAAO;MACP,iBAAiBhB,KAAKI;MACtB,iBAAiB;MACjB,iBAAiBa,OAAOH;MACxB,iBAAiB;MACjBI,IAAIlB,KAAKE;MACTiB,MAAM;MACN,cAAcnB,KAAKQ,kBAAkB;;;EAIjC,qBAAAY;IACN,OACEC,EAAA,OAAAC,OAAAC,OAAA,IAASvB,KAAKa,wBACZQ,EAAK;MAAAL,OAAM;OACTK,EAAA;MAAKL,OAAM;SAEbK,EAAK;MAAAL,OAAM;OACTK,EAAA;MAAKL,OAAM;;;EAMX,0BAAAQ;IACN,OACEH,EAAK;MAAAL,OAAO,2BAA2BhB,KAAKK,WAAW,aAAa;OAClEgB,EAAK;MAAAH,IAAIlB,KAAKE;MAAUc,OAAOhB,KAAKM;MAAkBa,MAAK;MAAQ,cAAanB,KAAKQ;QACrFa,EAAM;MAAAL,OAAM;OAAUhB,KAAKW;;EAKjC,MAAAc;IACE,OAAOJ,EAACK,GAAM;MAAAC,KAAA;OAAA3B,KAAKC,aAAaD,KAAKoB,0BAA0BpB,KAAKwB;;;;;;;;;;AAIxE,IAAIrB,IAAY","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["dividerCss","Divider","constructor","hostRef","this","customId","Helpers","generateUniqueId","orientation","thickness","borderStyle","isDarkMode","color","bleed","updateColor","el","style","setProperty","connectedCallback","hasDefaultSlotContent","componentDidLoad","setVerticalOrientation","setBleed","disconnectedCallback","unsetBleed","div","document","createElement","className","display","height","insertAdjacentElement","appendChild","applyMarginOnRootElement","window","addEventListener","bind","removeEventListener","innerHTML","trim","getHostParentPadding","hostParent","parentElement","getComputedStyle","paddingLeft","parseFloat","paddingRight","rootElement","_a","shadowRoot","querySelector","setAttribute","getCssClassMap","align","renderDefaultSlotDivider","h","class","role","id","renderStandardDivider","render","Host","key"],"sources":["../../packages/webcomponents/src/components/divider/divider.scss?tag=br-divider&encapsulation=shadow","../../packages/webcomponents/src/components/divider/divider.tsx"],"sourcesContent":[":host {\n display: block;\n\n .br-divider {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin: 20px 0;\n border: none;\n background-color: transparent;\n\n &::before,\n &::after {\n content: \"\";\n flex: 1;\n border-top: var(--divider-size, 1px) solid var(--border-color, black);\n }\n\n &.dashed {\n border-top: none;\n background: none;\n\n &::before,\n &::after {\n border-top: var(--divider-size, 1px) dashed var(--border-color);\n }\n }\n\n &.dashed.vertical {\n border-right: var(--divider-size, 1px) dashed var(--border-color);\n border-top: none;\n\n &::before,\n &::after {\n border-right: var(--divider-size, 1px) dashed var(--border-color);\n border-top: none;\n }\n }\n\n &.vertical {\n flex-direction: column;\n height: 100%;\n width: auto;\n margin: 0 10px;\n align-self: stretch;\n border-right-width: var(--divider-size);\n border-top-width: 0;\n\n &::before,\n &::after {\n border-right: var(--divider-size, 1px) solid var(--border-color, black);\n border-top: none;\n margin: 0;\n }\n }\n\n &.small {\n --divider-size: var(--surface-width-sm);\n }\n\n &.medium {\n --divider-size: var(--surface-width-md);\n }\n\n &.large {\n --divider-size: var(--surface-width-lg);\n }\n\n &.divider-start {\n justify-content: flex-start;\n\n &::before {\n flex: 0 0 0px;\n margin-right: var(--spacing-scale-base);\n }\n }\n\n &.divider-center {\n justify-content: center;\n }\n\n &.divider-end {\n justify-content: flex-end;\n\n &::after {\n flex: 0 0 0px;\n margin-left: var(--spacing-scale-base);\n }\n }\n }\n\n .divider-start::after,\n .divider-center::before,\n .divider-center::after,\n .divider-end::before {\n margin: 0 var(--spacing-scale-base);\n }\n\n .divider-start::before {\n margin-right: var(--spacing-scale-base);\n }\n\n .divider-end::after {\n margin-left: var(--spacing-scale-base);\n }\n\n :host(:empty)::before,\n :host(:empty)::after {\n margin: 0;\n }\n}\n","import { Component, Element, h, Host, Prop, Watch } from '@stencil/core'\n\nimport Helpers from '../../utils/helpers'\n\ntype DividerOrientation = 'horizontal' | 'vertical'\ntype DividerThickness = 'small' | 'medium' | 'large'\ntype DividerBorderStyle = 'dashed' | 'solid'\ntype DividerAlign = 'start' | 'center' | 'end'\n\n/**\n * Para uma descrição detalhada, consulte a [documentação do GovBR-DS](https://www.gov.br/ds/components/divider?tab=designer).\n *\n * @slot default - Conteúdo opcional que pode ser exibido dentro do divisor, como texto, ícones ou outros elementos personalizados.\n */\n@Component({\n tag: 'br-divider',\n styleUrl: 'divider.scss',\n shadow: true,\n})\nexport class Divider {\n @Element() el: HTMLBrDividerElement\n\n /**\n * ID personalizado para o elemento, útil para acessibilidade e identificação única.\n * Se não for fornecido, um ID único será gerado automaticamente.\n */\n @Prop({ reflect: true }) readonly customId: string = Helpers.generateUniqueId()\n\n /**\n * Define a orientação do divisor.\n * Pode ser 'horizontal' ou 'vertical'.\n * Caso seja usado como vertical, o divider deve ser colocado dentro de um container com altura definida.\n * @default horizontal\n */\n @Prop({ reflect: true }) orientation: DividerOrientation = 'horizontal'\n\n /**\n * Define a espessura do divisor.\n * Pode ser 'small', 'medium' ou 'large'.\n * @default small\n */\n @Prop({ reflect: true }) thickness: DividerThickness = 'small'\n\n /**\n * Define o estilo da borda do divisor.\n * Pode ser 'dashed' ou 'solid'.\n * @default solid\n */\n @Prop({ reflect: true }) borderStyle: DividerBorderStyle = 'solid'\n\n /**\n * Define se o divisor deve ser exibido no modo escuro.\n * @default false\n */\n @Prop({ reflect: true }) isDarkMode: boolean = false\n\n /**\n * Cor do divisor.\n * Pode ser uma cor hexadecimal, RGB ou nome de cor CSS.\n * Se não for especificada, o divisor usará a cor padrão definida pelo tema.\n * @default null\n */\n @Prop({ reflect: true }) color: string = null\n\n /**\n * Alinhamento do conteúdo do divisor.\n * Pode ser 'start', 'center' ou 'end'.\n * @default undefined\n */\n @Prop() align: DividerAlign\n\n /**\n * Define se o divisor deve \"sangrar\" (bleed) nas laterais, ou seja, se deve ocupar toda a largura do container pai.\n * Isso é útil quando o divisor precisa se estender além do padding do container pai.\n * @default false\n */\n @Prop() bleed: boolean = false\n\n /**\n * Watcher para a cor do divisor.\n * Atualiza a propriedade CSS '--border-color' do elemento para refletir a cor definida.\n * Isso permite que o divisor use cores personalizadas sem precisar de estilos adicionais.\n */\n @Watch('color')\n updateColor() {\n this.el.style.setProperty('--border-color', this.color)\n }\n\n /**\n * Ciclo de vida do componente.\n * Chamado quando o componente é conectado ao DOM.\n */\n connectedCallback() {\n this.hasDefaultSlotContent()\n }\n\n /**\n * Ciclo de vida do componente.\n * Chamado após o componente ser renderizado no DOM.\n */\n componentDidLoad() {\n this.setVerticalOrientation()\n this.setBleed()\n this.updateColor()\n }\n\n /**\n * Ciclo de vida do componente.\n * Chamado quando o componente é desconectado do DOM.\n */\n disconnectedCallback() {\n this.unsetBleed()\n }\n /**\n * Configura o divisor para orientação vertical.\n * Se a orientação for 'vertical', cria um elemento <div> adicional para manter o layout correto.\n */\n private setVerticalOrientation() {\n if (this.orientation === 'vertical') {\n const div = document.createElement('div')\n div.className = 'vertical-divider'\n div.style.display = 'flex'\n div.style.height = '100%'\n this.el.insertAdjacentElement('beforebegin', div)\n div.appendChild(this.el)\n }\n }\n\n /**\n * Configura o divisor para sangrar (bleed) nas laterais.\n */\n private setBleed() {\n if (this.bleed) {\n this.applyMarginOnRootElement()\n window.addEventListener('resize', this.applyMarginOnRootElement.bind(this))\n }\n }\n\n /**\n * Remove o sangramento (bleed) do divisor.\n */\n private unsetBleed() {\n if (this.bleed) {\n window.removeEventListener('resize', this.applyMarginOnRootElement.bind(this))\n }\n }\n\n /**\n * Verifica se o divisor tem conteúdo no slot padrão.\n * @returns true se o divisor tiver conteúdo no slot padrão, false caso contrário.\n */\n private hasDefaultSlotContent(): boolean {\n return this.el.innerHTML.trim() !== ''\n }\n\n /**\n * Determina o paddingLeft e paddingRight do elemento pai do host.\n * @returns Um objeto contendo os valores de paddingLeft e paddingRight do elemento pai do host.\n */\n private getHostParentPadding() {\n const hostParent = this.el.parentElement\n if (hostParent !== null) {\n const style = getComputedStyle(hostParent)\n return { paddingLeft: parseFloat(style.paddingLeft), paddingRight: parseFloat(style.paddingRight) }\n }\n return { paddingLeft: 0, paddingRight: 0 }\n }\n\n /**\n * Aplica margens negativas no elemento raiz do divisor para compensar o padding do elemento pai.\n * Isso é necessário quando o divisor está configurado para sangrar (bleed).\n */\n private applyMarginOnRootElement() {\n const { paddingLeft, paddingRight } = this.getHostParentPadding()\n const rootElement = this.el.shadowRoot?.querySelector('.br-divider')\n rootElement.setAttribute('style', `margin-left: -${paddingLeft}px; margin-right: -${paddingRight * 2}px;`)\n }\n\n /**\n * Define as classes CSS que serão aplicadas ao divisor.\n * @returns Uma string contendo as classes CSS que serão aplicadas ao divisor.\n */\n private getCssClassMap() {\n return `br-divider divider-${this.align} ${this.orientation} ${this.borderStyle} ${this.thickness} ${this.isDarkMode ? 'dark-mode' : ''}`\n }\n\n /**\n * Renderiza o divisor quando há conteúdo no slot padrão.\n * @returns JSX.Element\n */\n private renderDefaultSlotDivider() {\n return (\n <div\n class={this.getCssClassMap()}\n role=\"separator\"\n aria-orientation={this.orientation}\n aria-labelledby={this.customId}\n >\n <span id={this.customId}>\n <slot></slot>\n </span>\n </div>\n )\n }\n\n /**\n * Renderiza o divisor quando não há conteúdo no slot padrão.\n * @returns JSX.Element\n */\n private renderStandardDivider() {\n return <hr class={this.getCssClassMap()} />\n }\n\n /**\n * Renderiza o divisor.\n * @returns JSX.Element\n */\n render() {\n return <Host>{this.hasDefaultSlotContent() ? this.renderDefaultSlotDivider() : this.renderStandardDivider()}</Host>\n }\n}\n"],"mappings":";;;;;;;;AAAA,MAAMA,IAAa;;MCmBNC,IAAO;EALpB,WAAAC,CAAAC;;;;;eAYoCC,KAAAC,WAAmBC,EAAQC;;;;;;eAQpCH,KAAWI,cAAuB;;;;;eAOlCJ,KAASK,YAAqB;;;;;eAO9BL,KAAWM,cAAuB;;;;eAMlCN,KAAUO,aAAY;;;;;;eAQtBP,KAAKQ,QAAW;;;;;eAcjCR,KAAKS,QAAY;AAgJ1B;;;;;SAxIC,WAAAC;IACEV,KAAKW,GAAGC,MAAMC,YAAY,kBAAkBb,KAAKQ;;;;;SAOnD,iBAAAM;IACEd,KAAKe;;;;;SAOP,gBAAAC;IACEhB,KAAKiB;IACLjB,KAAKkB;IACLlB,KAAKU;;;;;SAOP,oBAAAS;IACEnB,KAAKoB;;;;;SAMC,sBAAAH;IACN,IAAIjB,KAAKI,gBAAgB,YAAY;MACnC,MAAMiB,IAAMC,SAASC,cAAc;MACnCF,EAAIG,YAAY;MAChBH,EAAIT,MAAMa,UAAU;MACpBJ,EAAIT,MAAMc,SAAS;MACnB1B,KAAKW,GAAGgB,sBAAsB,eAAeN;MAC7CA,EAAIO,YAAY5B,KAAKW;;;;;SAOjB,QAAAO;IACN,IAAIlB,KAAKS,OAAO;MACdT,KAAK6B;MACLC,OAAOC,iBAAiB,UAAU/B,KAAK6B,yBAAyBG,KAAKhC;;;;;SAOjE,UAAAoB;IACN,IAAIpB,KAAKS,OAAO;MACdqB,OAAOG,oBAAoB,UAAUjC,KAAK6B,yBAAyBG,KAAKhC;;;;;;SAQpE,qBAAAe;IACN,OAAOf,KAAKW,GAAGuB,UAAUC,WAAW;;;;;SAO9B,oBAAAC;IACN,MAAMC,IAAarC,KAAKW,GAAG2B;IAC3B,IAAID,MAAe,MAAM;MACvB,MAAMzB,IAAQ2B,iBAAiBF;MAC/B,OAAO;QAAEG,aAAaC,WAAW7B,EAAM4B;QAAcE,cAAcD,WAAW7B,EAAM8B;;;IAEtF,OAAO;MAAEF,aAAa;MAAGE,cAAc;;;;;;SAOjC,wBAAAb;;IACN,OAAMW,aAAEA,GAAWE,cAAEA,KAAiB1C,KAAKoC;IAC3C,MAAMO,KAAcC,IAAA5C,KAAKW,GAAGkC,gBAAY,QAAAD,WAAA,aAAAA,EAAAE,cAAc;IACtDH,EAAYI,aAAa,SAAS,iBAAiBP,uBAAiCE,IAAe;;;;;SAO7F,cAAAM;IACN,OAAO,sBAAsBhD,KAAKiD,SAASjD,KAAKI,eAAeJ,KAAKM,eAAeN,KAAKK,aAAaL,KAAKO,aAAa,cAAc;;;;;SAO/H,wBAAA2C;IACN,OACEC,EACE;MAAAC,OAAOpD,KAAKgD;MACZK,MAAK;MAAW,oBACErD,KAAKI;MACN,mBAAAJ,KAAKC;OAEtBkD,EAAA;MAAMG,IAAItD,KAAKC;OACbkD,EAAa;;;;;SAUb,qBAAAI;IACN,OAAOJ,EAAA;MAAIC,OAAOpD,KAAKgD;;;;;;SAOzB,MAAAQ;IACE,OAAOL,EAACM,GAAM;MAAAC,KAAA;OAAA1D,KAAKe,0BAA0Bf,KAAKkD,6BAA6BlD,KAAKuD","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["tabCss","Tab","constructor","hostRef","this","TabId","Helpers","generateUniqueId","density","tabItems","tabContent","hostStyle","containerStyle","focusElementIndex","handleKeyNavigation","event","focusableTabs","Array","from","key","activeTabPanel","el","shadowRoot","querySelector","focusableElements","querySelectorAll","length","focus","activeIndex","nextIndex","nextButton","_b","_a","prevIndex","prevButton","_d","_c","handleTabClick","detail","id","setActiveTab","trim","getCssClassMap","colorMode","setupHostStyles","maxWidth","display","boxSizing","updateContainerStyles","overflow","width","getTabItemsElements","slotItems","children","forEach","tab","setAttribute","hasAttribute","updateTabContent","map","tabActive","isTabActive","getTabID","getAttribute","innerHTML","join","updateMaxWidth","window","componentRect","getBoundingClientRect","availableWidth","innerWidth","left","activeTab","verifActiveTab","selected","activeTabChanged","newValue","removeAttribute","error","console","brDidActive","emit","componentWillLoad","MutationObserver","mutationObserver","observe","childList","subtree","componentDidLoad","requestAnimationFrame","hndClick","addEventListener","disconnectedCallback","removeEventListener","disconnect","newActiveTab","render","h","Host","style","class","some","role"],"sources":["../../packages/webcomponents/src/components/tab/tab.scss?tag=br-tab&encapsulation=shadow","../../packages/webcomponents/src/components/tab/tab.tsx"],"sourcesContent":["@import \"~@govbr-ds/core/src/components/tab/tab\";\n@import \"~@govbr-ds/core/src/partial/scss/configs/icons\";\n\n:host {\n display: block;\n}\n\n.results {\n display: flex;\n font-weight: var(--font-weight);\n justify-content: center;\n margin-top: var(--spacing-scale-2x);\n position: absolute;\n top: 100%;\n}\n\n.br-tab {\n max-width: 100vw; /* Impede que o elemento ultrapasse a largura da janela */\n overflow-x: hidden; /* Evita rolagem horizontal indesejada */\n padding: 16px;\n box-sizing: border-box;\n}\n\n.tab-nav[data-counter=\"true\"] ul {\n max-height: 65px;\n}\n\n.tab-nav[data-counter=\"true\"] {\n overflow: hidden;\n min-height: 102px;\n}\n","import { AttachInternals, Component, Element, Event, EventEmitter, h, Host, Prop, State, Watch } from '@stencil/core'\n\nimport Helpers from '../../utils/helpers'\nimport { CssClassMap } from '../../utils/interfaces'\n\n/**\n * Para uma descrição detalhada, consulte a [documentação do GovBR-DS](https://www.gov.br/ds/components/tab-item?tab=designer).\n *\n * @slot default - Slot com os componentes item da tab\n */\n@Component({\n tag: 'br-tab',\n styleUrl: 'tab.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class Tab {\n @Element() el: HTMLBrTabElement\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 TabId: string = Helpers.generateUniqueId()\n\n /**\n * A propriedade 'density' define a densidade do componente.\n * Os valores possíveis são 'small', 'medium' e 'large'.\n */\n @Prop({ reflect: true }) readonly density: 'small' | 'medium' | 'large' = 'medium'\n\n /**\n * Define se o Tab usará um esquema de cores.\n * Apenas o esquema 'dark' está disponível para o modo escuro.\n */\n @Prop({ reflect: true }) colorMode: string\n\n /**\n * A propriedade 'activeTab' define o tab ativo.\n */\n @State() activeTab: string\n\n /**\n * A propriedade 'tabItems' lista dos tabs items .\n */\n @State() tabItems: Element[] = []\n\n /**\n * A propriedade 'tabContent' armazena o conteúdo dos tabs.\n * @type {string}\n * @memberof Tab\n */\n @State() tabContent: string = ''\n\n private maxWidth: string\n private hostStyle: { [key: string]: string } = {}\n private containerStyle: { [key: string]: string } = {}\n private mutationObserver: MutationObserver\n private focusElementIndex: number = 0\n\n /**\n * Evento disparado quando um tab é ativado.\n */\n @Event() brDidActive: EventEmitter\n\n private getCssClassMap(): CssClassMap {\n return {\n 'br-tab': true,\n [this.density]: true,\n 'dark-mode': this.colorMode === 'dark',\n }\n }\n\n private setupHostStyles() {\n this.hostStyle = {\n maxWidth: '100%',\n display: 'block',\n boxSizing: 'border-box',\n }\n }\n\n private updateContainerStyles() {\n this.containerStyle = {\n maxWidth: this.maxWidth,\n overflow: 'hidden',\n width: '100%',\n boxSizing: 'border-box',\n }\n }\n /**\n * Obtém os elementos de tab items dentro do componente.\n * Se não houver elementos, emite um aviso.\n * @private\n * @returns {void}\n * @memberof Tab\n */\n private getTabItemsElements() {\n const slotItems = Array.from(this.el.children)\n\n slotItems.forEach((tab) => {\n if (this.colorMode) tab.setAttribute('color-mode', this.colorMode)\n if (!tab.hasAttribute('tab-item-id')) {\n tab.setAttribute('tab-item-id', Helpers.generateUniqueId())\n }\n })\n\n this.tabItems = slotItems\n }\n\n /**\n * Atualiza o conteúdo dos tabs com base nos elementos de tab items.\n * Cada tab item é transformado em um painel de tab com o ID apropriado.\n * O painel ativo é marcado com a classe 'active'.\n * @private\n * @returns {void}\n * @memberof Tab\n * @description\n */\n private updateTabContent() {\n this.tabContent = this.tabItems\n .map((tab: Element) => {\n const tabActive = this.isTabActive(tab)\n\n return `\n <div\n id=\"tab-panel-${this.getTabID(tab)}\"\n role=\"tabpanel\"\n aria-labelledby=\"tab-button-${tab.getAttribute('tab-item-id')}\"\n class=\"tab-panel${tabActive ? ' active' : ''}\"\n >\n ${tab.innerHTML} \n </div>\n `\n })\n .join('')\n }\n /**\n * Atualiza a largura máxima do componente com base na largura da janela.\n * Se a largura da janela não estiver disponível, define a largura máxima como 100%.\n * @private\n * @returns {void}\n * @memberof Tab\n * @description\n * Esta função calcula a largura máxima do componente com base na posição do elemento na tela.\n */\n private updateMaxWidth() {\n if (typeof window !== 'undefined') {\n const componentRect = this.el.getBoundingClientRect()\n const availableWidth = window.innerWidth - componentRect.left\n this.maxWidth = `${availableWidth - 5}px`\n } else {\n this.maxWidth = '100%'\n }\n this.updateContainerStyles()\n }\n\n /**\n * Obtém o ID do tab item.\n * @private\n * @param {Element} tab - O elemento do tab item.\n * @returns {string} - O ID do tab item.\n * @memberof Tab\n * @description\n * Esta função retorna o ID do tab item, que é armazenado no atributo 'tab-item-id'.\n */\n private getTabID(tab: Element): string {\n return tab.getAttribute('tab-item-id')\n }\n /**\n *\n * @param tab\n * @returns\n */\n private isTabActive(tab: Element): boolean {\n return this.getTabID(tab) === this.activeTab\n }\n\n private verifActiveTab() {\n const selected = this.el.querySelector('br-tab-item[active]')\n if (!selected && this.tabItems.length > 0) {\n this.activeTab = this.getTabID(this.tabItems[0])\n } else if (selected) {\n this.activeTab = this.getTabID(selected)\n }\n }\n\n @Watch('activeTab')\n activeTabChanged(newValue: string) {\n this.tabItems.forEach((tab) => {\n try {\n if (this.getTabID(tab) === newValue) {\n tab.setAttribute('is-active', 'true')\n tab.setAttribute('aria-selected', 'true')\n } else {\n if (tab.hasAttribute('is-active')) {\n if (tab) {\n tab.removeAttribute('is-active')\n }\n tab.removeAttribute('aria-selected')\n }\n }\n } catch (error) {\n console.error('Failed to remove attribute \"is-active\":', error)\n }\n })\n this.updateTabContent()\n this.brDidActive.emit({ id: newValue })\n }\n\n /**\n * Evento de navegação por teclado\n * @param event\n */\n private handleKeyNavigation = (event: KeyboardEvent) => {\n const focusableTabs = Array.from(this.tabItems) as HTMLElement[]\n\n if (event.key === 'ArrowDown') {\n const activeTabPanel = this.el.shadowRoot.querySelector('.tab-panel.active') as HTMLElement\n if (activeTabPanel) {\n const focusableElements = Array.from(\n activeTabPanel.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])')\n ) as HTMLElement[]\n if (focusableElements.length > 0) {\n focusableElements[0].focus()\n }\n }\n }\n\n const activeIndex = this.focusElementIndex\n if (event.key === 'ArrowRight') {\n const nextIndex = (activeIndex + 1) % focusableTabs.length\n const nextButton = focusableTabs[nextIndex]?.shadowRoot?.querySelector('button')\n if (nextButton) {\n nextButton.focus()\n this.focusElementIndex = nextIndex\n }\n } else if (event.key === 'ArrowLeft') {\n const prevIndex = (activeIndex - 1 + focusableTabs.length) % focusableTabs.length\n const prevButton = focusableTabs[prevIndex]?.shadowRoot?.querySelector('button')\n if (prevButton) {\n prevButton.focus()\n this.focusElementIndex = prevIndex\n }\n }\n }\n\n componentWillLoad() {\n this.getTabItemsElements()\n this.setupHostStyles()\n this.updateTabContent()\n\n if (typeof window !== 'undefined' && typeof MutationObserver !== 'undefined') {\n // window.addEventListener('resize', () => this.updateMaxWidth());\n\n this.mutationObserver = new MutationObserver(() => this.updateMaxWidth())\n this.mutationObserver.observe(this.el, { childList: true, subtree: true })\n\n this.updateMaxWidth()\n } else {\n this.maxWidth = '100%'\n this.updateContainerStyles()\n }\n }\n\n componentDidLoad() {\n if (!this.el) {\n console.error('Host element is not defined.')\n return\n }\n requestAnimationFrame(() => this.verifActiveTab())\n\n // Use the class method directly\n if (this.el) {\n try {\n const hndClick = this.handleTabClick\n this.el.addEventListener('keydown', this.handleKeyNavigation)\n this.el.addEventListener('itemTabClick', hndClick)\n } catch (error) {\n console.error('Failed to add event listener for itemTabClick:', error)\n }\n }\n }\n\n disconnectedCallback() {\n if (typeof window !== 'undefined') {\n window.removeEventListener('resize', () => this.updateMaxWidth())\n }\n if (this.mutationObserver) this.mutationObserver.disconnect()\n this.el.removeEventListener('itemTabClick', this.handleTabClick)\n this.el.removeEventListener('keydown', this.handleKeyNavigation) // Remove the keydown listener\n }\n\n private handleTabClick: (event: CustomEvent<{ id: string }>) => void = (event) => {\n if (event.detail && event.detail.id) {\n this.setActiveTab(event.detail.id.trim())\n }\n }\n\n private setActiveTab(newActiveTab: string) {\n // if (this.activeTab !== newActiveTab) {\n this.activeTab = newActiveTab\n // }\n }\n\n render() {\n return (\n <Host style={this.hostStyle}>\n <div class={this.getCssClassMap()} style={this.containerStyle}>\n <nav\n class=\"tab-nav\"\n data-counter={this.tabItems.some((tab) => tab.hasAttribute('counter')) ? 'true' : 'false'}\n >\n <ul role=\"tablist\">\n <slot></slot>\n </ul>\n </nav>\n <div class=\"tab-content\" innerHTML={this.tabContent}></div>\n </div>\n </Host>\n )\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["avatarCss","Avatar","constructor","hostRef","this","density","customId","avatarId","alt","isIconic","disabled","hasError","iconSizes","small","height","width","medium","large","iconMarginTops","handleImageError","console","error","src","handleDensityChange","newValue","includes","warn","el","setAttribute","componentWillLoad","getCssClassMap","renderAvatar","_a","text","trim","length","h","class","title","toUpperCase","_b","loading","onError","_c","iconHeight","_d","_e","iconWidth","_f","style","_g","iconMarginTop","render","Host","key","id"],"sources":["../../packages/webcomponents/src/components/avatar/avatar.scss?tag=br-avatar&encapsulation=shadow","../../packages/webcomponents/src/components/avatar/avatar.tsx"],"sourcesContent":["@import \"~@govbr-ds/core/src/components/avatar/avatar\";\n\n:host {\n display: inline-block;\n}\n","import { Component, Element, h, Host, Prop, State, Watch } from '@stencil/core'\n\nimport { CssClassMap } from '../../utils/interfaces'\n\n/**\n * Para uma descrição detalhada, consulte a [documentação do GovBR-DS](https://www.gov.br/ds/components/avatar?tab=designer).\n */\n@Component({\n tag: 'br-avatar',\n styleUrl: 'avatar.scss',\n shadow: true,\n})\nexport class Avatar {\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: HTMLBrAvatarElement\n\n /**\n * Ajusta a densidade, alterando o espaçamento interno para um visual mais compacto ou mais expandido.\n */\n @Prop({ mutable: true }) density: 'small' | 'medium' | 'large' = 'medium'\n\n @Watch('density')\n handleDensityChange(newValue: 'small' | 'medium' | 'large') {\n if (!['small', 'medium', 'large'].includes(newValue)) {\n console.warn(`Valor inválido para density: ${newValue}. Usando 'medium'.`)\n this.density = 'medium'\n }\n this.el.setAttribute('density', this.density)\n }\n\n /**\n * Executa validações iniciais quando o componente é carregado\n */\n componentWillLoad() {\n this.handleDensityChange(this.density)\n }\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 = `br-avatar-${avatarId++}`\n\n /**\n * URL da imagem a ser exibida no avatar do tipo 'fotográfico'.\n * Deve ser uma URL válida que aponta para a imagem desejada.\n */\n @Prop() readonly src: string\n\n /**\n * Texto alternativo (alt) associado à imagem do avatar. Essencial para acessibilidade e SEO.\n * Deve descrever de forma clara e concisa o conteúdo da imagem, por exemplo: \"Foto de perfil de João Silva\".\n */\n @Prop() readonly alt = 'Imagem do avatar'\n\n /**\n * Indica se o avatar deve ser exibido como um ícone em vez de uma imagem fotográfica.\n * Se definido como verdadeiro, o avatar será exibido como um ícone.\n */\n @Prop() readonly isIconic: boolean = false\n\n /**\n * Texto exibido no avatar do tipo 'letra'.\n * Esse texto será mostrado em vez de uma imagem e pode ser usado para representar iniciais ou outras informações textuais.\n */\n @Prop() readonly text: string\n\n /**\n * Largura do ícone no avatar do tipo icônico\n * */\n @Prop() readonly iconWidth: string\n\n /**\n * Altura do ícone no avatar do tipo icônico\n */\n @Prop() readonly iconHeight: string\n\n /**\n * Ajuste para a margem de cima do ícone no avatar do tipo icônico\n */\n @Prop() readonly iconMarginTop: string\n\n /**\n * Define se o avatar está desabilitado\n */\n @Prop() readonly disabled = false\n\n @State() private hasError = false\n\n /**\n * Gera um mapa de classes CSS com base nas propriedades do componente.\n * O mapa de classes determina quais classes CSS devem ser aplicadas\n * ao elemento host do componente, ajustando sua aparência.\n *\n * @returns {CssClassMap} Objeto contendo as classes CSS aplicadas.\n */\n private getCssClassMap(): CssClassMap {\n return {\n 'br-avatar': true,\n [this.density]: true,\n error: this.hasError,\n disabled: this.disabled,\n }\n }\n\n private readonly iconSizes = {\n small: { height: '32px', width: '40px' },\n medium: { height: '80px', width: '88px' },\n large: { height: '128px', width: '136px' },\n }\n\n private readonly iconMarginTops = {\n small: '0.7em',\n medium: '1em',\n large: '0.62em',\n }\n\n private readonly handleImageError = () => {\n this.hasError = true\n console.error(`Erro ao carregar imagem do avatar: ${this.src}`)\n }\n\n private renderAvatar() {\n if (this.text?.trim().length > 0) {\n return (\n <span class=\"content bg-support-01 text-pure-0\" title={this.text}>\n {this.text[0].toUpperCase()}\n </span>\n )\n } else if (this.src?.trim().length > 0 && !this.hasError) {\n return (\n <span class=\"content\" title={this.alt || this.text}>\n <img src={this.src} alt={this.alt} loading=\"lazy\" onError={this.handleImageError} />\n </span>\n )\n } else {\n return (\n <span class=\"content\" title={this.text}>\n <br-icon\n icon-name=\"fa-solid:user\"\n height={this.iconHeight?.length > 0 ? this.iconHeight : this.iconSizes[this.density]?.height}\n width={this.iconWidth?.length > 0 ? this.iconWidth : this.iconSizes[this.density]?.width}\n aria-hidden=\"true\"\n style={{\n 'margin-top': this.iconMarginTop?.length > 0 ? this.iconMarginTop : this.iconMarginTops[this.density],\n }}\n ></br-icon>\n </span>\n )\n }\n }\n\n render() {\n return (\n <Host>\n <span id={this.customId} class={this.getCssClassMap()} aria-disabled={this.disabled}>\n {this.renderAvatar()}\n </span>\n </Host>\n )\n }\n}\n\nlet avatarId = 0\n"],"mappings":";;;;;;AAAA,MAAMA,IAAY;;MCYLC,IAAM;EALnB,WAAAC,CAAAC;;;;eAe2BC,KAAOC,UAAiC;;;;eAsB/BD,KAAAE,WAAmB,aAAaC;;;;;IAYjDH,KAAGI,MAAG;;;;eAMNJ,KAAQK,WAAY;;;eA0BpBL,KAAQM,WAAG;IAEXN,KAAQO,WAAG;IAkBXP,KAAAQ,YAAY;MAC3BC,OAAO;QAAEC,QAAQ;QAAQC,OAAO;;MAChCC,QAAQ;QAAEF,QAAQ;QAAQC,OAAO;;MACjCE,OAAO;QAAEH,QAAQ;QAASC,OAAO;;;IAGlBX,KAAAc,iBAAiB;MAChCL,OAAO;MACPG,QAAQ;MACRC,OAAO;;IAGQb,KAAgBe,mBAAG;MAClCf,KAAKO,WAAW;MAChBS,QAAQC,MAAM,sCAAsCjB,KAAKkB;AAAM;AA0ClE;EA3IC,mBAAAC,CAAoBC;IAClB,KAAK,EAAC,SAAS,UAAU,UAASC,SAASD,IAAW;MACpDJ,QAAQM,KAAK,gCAAgCF;MAC7CpB,KAAKC,UAAU;;IAEjBD,KAAKuB,GAAGC,aAAa,WAAWxB,KAAKC;;;;SAMvC,iBAAAwB;IACEzB,KAAKmB,oBAAoBnB,KAAKC;;;;;;;;SA8DxB,cAAAyB;IACN,OAAO;MACL,aAAa;MACb,CAAC1B,KAAKC,UAAU;MAChBgB,OAAOjB,KAAKO;MACZD,UAAUN,KAAKM;;;EAqBX,YAAAqB;;IACN,MAAIC,IAAA5B,KAAK6B,UAAI,QAAAD,WAAA,aAAAA,EAAEE,OAAOC,UAAS,GAAG;MAChC,OACEC,EAAA;QAAMC,OAAM;QAAoCC,OAAOlC,KAAK6B;SACzD7B,KAAK6B,KAAK,GAAGM;WAGb,MAAIC,IAAApC,KAAKkB,SAAG,QAAAkB,WAAA,aAAAA,EAAEN,OAAOC,UAAS,MAAM/B,KAAKO,UAAU;MACxD,OACEyB,EAAA;QAAMC,OAAM;QAAUC,OAAOlC,KAAKI,OAAOJ,KAAK6B;SAC5CG,EAAK;QAAAd,KAAKlB,KAAKkB;QAAKd,KAAKJ,KAAKI;QAAKiC,SAAQ;QAAOC,SAAStC,KAAKe;;WAG/D;MACL,OACEiB,EAAM;QAAAC,OAAM;QAAUC,OAAOlC,KAAK6B;SAChCG,EAAA;QAAA,aACY;QACVtB,UAAQ6B,IAAAvC,KAAKwC,gBAAY,QAAAD,WAAA,aAAAA,EAAAR,UAAS,IAAI/B,KAAKwC,cAAaC,IAAAzC,KAAKQ,UAAUR,KAAKC,cAAQ,QAAAwC,WAAA,aAAAA,EAAE/B;QACtFC,SAAO+B,IAAA1C,KAAK2C,eAAW,QAAAD,WAAA,aAAAA,EAAAX,UAAS,IAAI/B,KAAK2C,aAAYC,IAAA5C,KAAKQ,UAAUR,KAAKC,cAAQ,QAAA2C,WAAA,aAAAA,EAAEjC;QAAK,eAC5E;QACZkC,OAAO;UACL,gBAAcC,IAAA9C,KAAK+C,mBAAa,QAAAD,WAAA,aAAAA,EAAEf,UAAS,IAAI/B,KAAK+C,gBAAgB/C,KAAKc,eAAed,KAAKC;;;;;EAQzG,MAAA+C;IACE,OACEhB,EAACiB,GAAI;MAAAC,KAAA;OACHlB,EAAM;MAAAkB,KAAA;MAAAC,IAAInD,KAAKE;MAAU+B,OAAOjC,KAAK0B;MAAgB,iBAAiB1B,KAAKM;OACxEN,KAAK2B;;;;;;;;;;;;AAOhB,IAAIxB,IAAW","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["breadcrumbCss","Breadcrumb","constructor","hostRef","this","customId","breadcrumbId","homeUrl","defaultCrumbs","label","url","active","showTooltip","tooltipPosition","x","y","tooltipText","isSmallScreen","isTruncate","larguraInterna","larguraPai","isFolderOpen","updateContainerSize","entries","entry","containerWidth","contentRect","width","calcularLarguraItens","trunc","word","length","charactersNumberTruncate","slice","handleMouseOver","event","text","target","rect","getBoundingClientRect","left","top","handleMouseOut","getParsedItems","crumbs","parsed","JSON","parse","Array","isArray","_a","console","error","handleHomeClick","window","location","href","toggleFolder","getCssClassMap","small","connectedCallback","ResizeObserver","resizeObserver","el","parentElement","observe","disconnectedCallback","disconnect","requestAnimationFrame","itens","shadowRoot","querySelectorAll","totalWidth","forEach","item","componentDidLoad","renderHomeButton","buttonFolderClass","h","id","shape","onClick","renderTruncateButton","class","height","onKeyDown","handleKeyDown","renderBreadcrumbItems","parsedItems","lastItem","onMouseOver","onMouseOut","renderMobileActiveItem","renderBreadcrumbList","map","index","key","home","renderBreadcrumbLink","activeItem","find","tabindex","handleKeyDownOut","renderTooltip","style","setTimeout","element","getElementById","focus","render","Host"],"sources":["../../packages/webcomponents/src/components/breadcrumb/breadcrumb.scss?tag=br-breadcrumb&encapsulation=shadow","../../packages/webcomponents/src/components/breadcrumb/breadcrumb.tsx"],"sourcesContent":["@import \"~@govbr-ds/core/src/components/breadcrumb/breadcrumb\";\n@import \"~@govbr-ds/core/src/partial/scss/configs/icons\";\n@import \"~@govbr-ds/core/src/components/button/button\";\n@import \"~@govbr-ds/core/src/components/list/list\";\n@import \"~@govbr-ds/core/src/components/item/item\";\n@import \"~@govbr-ds/core/src/components/divider/divider\";\n\n:host {\n display: block;\n}\n\n.br-breadcrumb {\n .br-icon {\n color: #ccc;\n }\n\n .br-icon,\n .mobile-active-page {\n display: flex;\n align-items: center;\n }\n\n .mobile-crumb-list {\n display: none;\n position: absolute;\n width: 200px;\n box-shadow: var(--surface-shadow-sm);\n }\n\n .mobile-crumb-list.show {\n display: block;\n top: 100%;\n z-index: 999;\n }\n\n .buttonFolderGroup,\n .buttonFolderGroup span {\n display: flex;\n align-items: center;\n }\n\n .mobile-active-page {\n span:focus:focus-visible {\n outline: var(--focus-width) var(--focus-style) var(--focus);\n outline-offset: var(--focus-offset);\n }\n\n [data-active] {\n margin: 0 var(--spacing-scale-2x) 0 var(--spacing-scale-base);\n }\n }\n\n .crumb {\n display: flex;\n align-items: center;\n\n span {\n display: flex;\n align-items: center;\n }\n }\n}\n\n.tooltip-box {\n position: fixed;\n background: #1351b4;\n color: #fff;\n padding: 8px 12px;\n border-radius: 4px;\n font-size: 12px;\n white-space: nowrap;\n transform: translate(-50%, -100%);\n pointer-events: none;\n z-index: 9999;\n box-shadow: 0 2px 4px rgba(0 0 0 / 20%);\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n\n &::after {\n content: \"\";\n position: absolute;\n bottom: -5px;\n left: 50%;\n transform: translateX(-50%);\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #1351b4;\n }\n}\n\n:host(:hover) {\n .tooltip-box {\n opacity: 1;\n }\n}\n","/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\nimport { AttachInternals, Component, Element, h, Host, Prop, State } from '@stencil/core'\n\ninterface BreadcrumbItem {\n label: string\n url?: string\n target?: string\n home?: boolean\n active?: boolean\n}\n@Component({\n tag: 'br-breadcrumb',\n styleUrl: 'breadcrumb.scss',\n shadow: true,\n})\nexport class Breadcrumb {\n @Element() el: HTMLBrBreadcrumbElement\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 = `br-breadcrumb-${breadcrumbId++}`\n\n /**\n * URL para home.\n * Caso não seja fornecido, o valor padrão será /.\n */\n @Prop() homeUrl: string = '/'\n\n /**\n * Define o array de objetos que receberá os nomes e links do breadcrumb.\n * Define valor padrão do breadcrumb 'defaultCrumbs'.\n */\n @Prop() crumbs: string | BreadcrumbItem[]\n\n private defaultCrumbs: BreadcrumbItem[] = [\n { label: 'Página 01', url: '/pagina-01' },\n { label: 'Página 02', url: '/pagina-02' },\n { label: 'Página Atual', active: true },\n ]\n\n /**\n * Define o estado oculto ou visível do tooltip.\n */\n @State() showTooltip: boolean = false\n\n /**\n * Define o posicionamento do tooltip na tela.\n */\n @State() tooltipPosition: { x: number; y: number } = { x: 0, y: 0 }\n\n /**\n * Define o texto do tooltip.\n */\n @State() tooltipText: string = ''\n\n /**\n * Define o estado isSmallScreen, usado para verificar a largura do container pai e aplicar as mudanças do formato mobile.\n * No formato mobile o breadcrumb apresenta um comportamento específico.\n */\n @State() isSmallScreen: boolean = false\n\n /**\n * Define se o breadcrumb deve truncar os itens por falta de espaço.\n */\n @State() isTruncate: boolean = false\n\n /**\n * Largura interna dos itens do breadcrumb.\n */\n @State() larguraInterna: number = 0\n\n /**\n * Largura do container pai do breadcrumb.\n */\n @State() larguraPai: number = 0\n\n /**\n * Define o estado do botão 'Folder'.\n * Caso a lista dropdown esteja oculta o ícone no botão será 'folder-plus'.\n * Caso a lista dropdown esteja visível o ícone no botão será 'folder-minus'.\n */\n @State() isFolderOpen: boolean = false\n\n /**\n * Verifica se o texto do link contém mais de 20 caracteres e realiza o truncamento deste caso positivo.\n * O número de caracteres pode ser configurado na variável 'charactersNumberTruncate'.\n */\n private trunc(word: string) {\n return word.length > charactersNumberTruncate ? `${word.slice(0, charactersNumberTruncate)}...` : word\n }\n\n /**\n * Exibe o tooltip e define seu posicionamento, caso o usuário realize o 'mouse over'.\n */\n private handleMouseOver(event: MouseEvent, text: string) {\n const target = event.target as HTMLElement | null\n if (!target) return\n\n const rect = target.getBoundingClientRect()\n this.tooltipPosition = { x: rect.left + rect.width / 2, y: rect.top - 10 }\n\n if (text.length > charactersNumberTruncate) {\n this.tooltipText = text\n this.showTooltip = true\n }\n }\n\n /**\n * Esconde o tooltip caso o usuário realize o 'mouse out'.\n */\n private handleMouseOut() {\n this.showTooltip = false\n }\n\n /**\n * Converte de string para JSON o valor passado na propriedade 'crumbs'.\n * Retorna o valor padrão do Breadcrumbs caso crumbs seja vazio ou inválido\n */\n private getParsedItems(): BreadcrumbItem[] {\n if (!this.crumbs || this.crumbs === '') {\n return this.defaultCrumbs\n }\n\n try {\n const parsed = typeof this.crumbs === 'string' ? JSON.parse(this.crumbs) : this.crumbs\n return Array.isArray(parsed) && parsed.length > 0 ? parsed : this.defaultCrumbs\n } catch {\n console.error('Invalid JSON format for crumbs:', this.crumbs)\n return this.defaultCrumbs\n }\n }\n\n /**\n * Ao clicar no botão HOME, direciona o usuário para URL passada na propriedade 'homeUrl'.\n */\n private handleHomeClick() {\n window.location.href = this.homeUrl\n }\n\n /**\n * Altera o estado do botão 'Folder', caso a lista dropdown esteja aberta ou fechada.\n */\n private toggleFolder() {\n this.isFolderOpen = !this.isFolderOpen\n }\n\n /**\n * Define as classes CSS usadas no breadcrumb.\n */\n private getCssClassMap(): { [key: string]: boolean } {\n return {\n 'br-breadcrumb': true,\n small: this.isSmallScreen,\n }\n }\n\n /**\n * Atualiza o estado 'isSmallScreen' com base no tamanho do container pai, se menor que 570px.\n */\n private resizeObserver: ResizeObserver\n\n /**\n * Atualiza os estados de largura do breadcrumb ao detectar mudanças no container pai.\n */\n private updateContainerSize = (entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const containerWidth = entry.contentRect.width\n this.isSmallScreen = containerWidth < 570\n this.larguraPai = containerWidth\n this.calcularLarguraItens()\n }\n }\n\n /**\n * Adiciona o 'resizeObserver' para checar o tamanho do container pai.\n */\n connectedCallback() {\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(this.updateContainerSize)\n if (this.el.parentElement !== null) {\n this.resizeObserver.observe(this.el.parentElement)\n }\n }\n }\n\n /**\n * Remove o 'resizeObserver'.\n */\n disconnectedCallback() {\n if (this.resizeObserver != null) {\n this.resizeObserver.disconnect()\n }\n }\n\n /**\n * Calcula a largura total dos itens do breadcrumb para determinar se precisa de truncamento.\n */\n private calcularLarguraItens() {\n requestAnimationFrame(() => {\n const itens = this.el.shadowRoot?.querySelectorAll('.crumb, .mobile-active-page, br-item')\n if (itens) {\n let totalWidth = 0\n itens.forEach((item) => {\n totalWidth += (item as HTMLElement).getBoundingClientRect().width\n })\n this.larguraInterna = totalWidth\n this.isTruncate = this.larguraInterna > this.larguraPai\n }\n })\n }\n\n /**\n * Executa cálculos de largura após o componente ser carregado.\n */\n componentDidLoad() {\n this.calcularLarguraItens()\n }\n\n /**\n * Renderiza botão Home\n */\n private renderHomeButton() {\n const buttonFolderClass = this.isFolderOpen ? 'fa6-solid:folder-minus' : 'fa6-solid:folder-plus'\n return (\n <br-button\n id=\"circle\"\n shape=\"circle\"\n aria-label={this.isSmallScreen ? 'Exibir lista de páginas' : 'Voltar para Home'}\n onClick={this.isSmallScreen ? () => this.toggleFolder() : () => this.handleHomeClick()}\n >\n <br-icon icon-name={`${this.isSmallScreen ? buttonFolderClass : 'fa6-solid:house'}`}></br-icon>\n </br-button>\n )\n }\n\n /**\n * Renderiza botão Folder no comportamento truncado\n */\n private renderTruncateButton() {\n if (this.isTruncate && !this.isSmallScreen) {\n const buttonFolderClass = this.isFolderOpen ? 'fa6-solid:folder-minus' : 'fa6-solid:folder-plus'\n return (\n <div class=\"buttonFolderGroup\">\n <br-icon class=\"br-icon\" icon-name=\"fa6-solid:chevron-right\" width=\"12\" height=\"12\"></br-icon>\n <br-button\n id=\"circle\"\n shape=\"circle\"\n aria-label={this.isFolderOpen ? 'Recolher lista de páginas' : 'Exibir lista de páginas'}\n onClick={() => this.toggleFolder()}\n onKeyDown={(event) => this.handleKeyDown(event)}\n >\n <br-icon icon-name={buttonFolderClass}></br-icon>\n </br-button>\n </div>\n )\n }\n return null\n }\n\n /**\n * Renderiza itens do Breadcrumb no comportamento mobile ou truncado\n */\n private renderBreadcrumbItems() {\n const parsedItems = this.getParsedItems()\n const lastItem = parsedItems[parsedItems.length - 2]\n\n return this.isSmallScreen || this.isTruncate ? (\n <div class=\"buttonFolderGroup\">\n {this.isTruncate && !this.isSmallScreen && lastItem ? (\n <span>\n <br-icon class=\"br-icon\" icon-name=\"fa6-solid:chevron-right\" width=\"12\" height=\"12\"></br-icon>\n <a\n id=\"nextCrumb\"\n href={lastItem.url || 'javascript:void(0)'}\n target={lastItem.target || '_self'}\n onMouseOver={(event) => this.handleMouseOver(event, lastItem.label)}\n onMouseOut={() => this.handleMouseOut()}\n >\n {this.trunc(lastItem.label)}\n </a>\n </span>\n ) : null}\n {this.renderMobileActiveItem(parsedItems)}\n {this.renderBreadcrumbList(parsedItems)}\n </div>\n ) : (\n parsedItems.map((item, index) => (\n <li\n key={index}\n class={`crumb ${item.home ? 'home' : ''}`}\n data-active={item.active ? 'active' : null}\n aria-label={`Página ${index + 1} de ${parsedItems.length}`}\n >\n {this.renderBreadcrumbLink(item)}\n </li>\n ))\n )\n }\n\n /**\n * Renderiza item da página atual\n */\n private renderMobileActiveItem(parsedItems: BreadcrumbItem[]) {\n const activeItem = parsedItems.find((item) => item.active)\n if (!activeItem) return null\n return (\n <span class=\"mobile-active-page\">\n <br-icon class=\"br-icon\" icon-name=\"fa6-solid:chevron-right\" width=\"12\" height=\"12\"></br-icon>\n <span aria-current=\"page\" data-active=\"active\" tabindex=\"0\">\n {activeItem.label}\n </span>\n </span>\n )\n }\n\n /**\n * Renderiza Lista dropdown contendo os itens do Breadcrumb\n */\n private renderBreadcrumbList(parsedItems: BreadcrumbItem[]) {\n return (\n <br-list class={this.isFolderOpen ? 'mobile-crumb-list show' : 'mobile-crumb-list'}>\n {this.isSmallScreen && (\n <div aria-label={`Página 1 de ${parsedItems.length}`}>\n <br-item>\n <a href={this.homeUrl} target=\"_self\">\n Página Inicial\n </a>\n </br-item>\n <span class=\"br-divider\"></span>\n </div>\n )}\n {parsedItems.map((item, index) => {\n if (this.isTruncate && !this.isSmallScreen && index === parsedItems.length - 2) {\n return null\n }\n return (\n !item.active && (\n <div\n key={index}\n aria-label={\n this.isTruncate && !this.isSmallScreen\n ? `Página ${index + 1} de ${parsedItems.length - 2}`\n : `Página ${index + 2} de ${parsedItems.length}`\n }\n >\n <br-item>\n <a\n id={index == 0 ? 'firstElementList' : ''}\n href={item.url || 'javascript:void(0)'}\n target={item.target || '_self'}\n onMouseOver={(event) => this.handleMouseOver(event, item.label)}\n onMouseOut={() => this.handleMouseOut()}\n onKeyDown={\n index == parsedItems.length - 3 && this.isFolderOpen && this.isTruncate && !this.isSmallScreen\n ? (event) => {\n if (event.key === 'Tab') {\n this.handleKeyDownOut(event)\n this.toggleFolder()\n }\n }\n : null\n }\n >\n {this.trunc(item.label)}\n </a>\n </br-item>\n <span class=\"br-divider\"></span>\n </div>\n )\n )\n })}\n </br-list>\n )\n }\n\n /**\n * Renderiza itens do Breadcrumb no formato desktop\n */\n private renderBreadcrumbLink(item: BreadcrumbItem) {\n return item.active ? (\n <span>\n <br-icon class=\"br-icon\" icon-name=\"fa6-solid:chevron-right\" width=\"12\" height=\"12\"></br-icon>\n <span aria-current=\"page\" tabindex=\"0\">\n {item.label}\n </span>\n </span>\n ) : (\n <span>\n <br-icon class=\"br-icon\" icon-name=\"fa6-solid:chevron-right\" width=\"12\" height=\"12\"></br-icon>\n <a\n href={item.url || 'javascript:void(0)'}\n target={item.target || '_self'}\n onMouseOver={(event) => this.handleMouseOver(event, item.label)}\n onMouseOut={() => this.handleMouseOut()}\n >\n {this.trunc(item.label)}\n </a>\n </span>\n )\n }\n\n /**\n * Renderiza Tooltip\n */\n private renderTooltip() {\n if (!this.showTooltip) return null\n return (\n <div class=\"tooltip-box\" style={{ left: `${this.tooltipPosition.x}px`, top: `${this.tooltipPosition.y}px` }}>\n {this.tooltipText}\n </div>\n )\n }\n\n /**\n * Controla navegação pelo teclado após lista de itens aberta\n * Dispara foco no primeiro item da lista flutuante\n */\n private handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Tab') {\n if (this.isFolderOpen && this.isTruncate && !this.isSmallScreen) {\n setTimeout(() => {\n const element = this.el.shadowRoot?.getElementById('firstElementList')\n if (element) {\n element.focus()\n }\n }, 0) // Aguarda um ciclo de renderização\n }\n }\n }\n\n /**\n * Ao finalizar navegação por teclado dentro da lista, dispara foco no item fora da lista flutuante\n */\n private handleKeyDownOut(event: KeyboardEvent) {\n if (event.key === 'Tab') {\n if (this.isFolderOpen && this.isTruncate && !this.isSmallScreen) {\n setTimeout(() => {\n const element = this.el.shadowRoot?.getElementById('nextCrumb')\n if (element) {\n element.focus()\n }\n }, 0)\n }\n }\n }\n\n render() {\n return (\n <Host>\n <nav class={this.getCssClassMap()} aria-label=\"Breadcrumbs\">\n <ol class=\"crumb-list\">\n {this.renderHomeButton()}\n {this.renderTruncateButton()}\n {this.renderBreadcrumbItems()}\n </ol>\n </nav>\n {this.renderTooltip()}\n </Host>\n )\n }\n}\n\n/**\n * ID do Breadcrumb\n */\nlet breadcrumbId = 0\n\n/**\n * Limite de caracteres para o truncamento\n */\nconst charactersNumberTruncate = 20\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["scrimCss","Scrim","constructor","hostRef","this","customId","ScrimId","isOpen","disableCloseOnClick","zIndex","customBackground","customOpacity","displayMode","scrollThreshold","activator","isActive","hasActivatorSlot","contentRef","activatorElement","scrollOffset","lastScrollTop","previouslyFocusedElement","handleActivatorClick","toggle","handleBlockScroll","e","scrollStrategy","window","scrollTo","preventDefault","stopPropagation","handleScrollClose","currentScroll","scrollY","Math","abs","handleOpenChange","handleKeyDown","event","shouldHandleEscape","key","handleTabNavigation","handleMaskClick","_event","close","newValue","updateStyles","document","activeElement","applyScrollStrategy","setTimeout","focusFirstElement","brScrimOpen","emit","resetScrolling","restoreFocus","brScrimClose","undefined","el","style","setProperty","handleActivatorChange","removeActivatorClickListener","setupActivator","componentWillLoad","checkActivatorSlot","componentDidLoad","setupActivatorSlotClick","addEventListener","connectedCallback","disconnectedCallback","removeEventListener","cleanupActivatorSlotClick","slotName","querySelector","slotEl","_a","shadowRoot","assignedElements","_c","_b","call","length","console","warn","parentElement","element","HTMLElement","addActivatorClickListener","enableScrollBlock","enableScrollWatcher","body","documentElement","removeProperty","setAttribute","focus","focusableElements","getFocusableElements","firstElement","scrollIntoView","block","inline","preventScroll","targetElement","isConnected","error","defaultSlot","flatten","forEach","matches","FOCUSABLE_SELECTORS","push","nestedFocusables","Array","from","querySelectorAll","filterVisibleElements","elements","filter","offsetWidth","offsetHeight","getComputedStyle","visibility","lastElement","isTabForward","shiftKey","shouldTrapFocus","wrapFocus","getCssClassMap","opened","positionContent","setScrollThreshold","threshold","open","render","h","Host","name","class","id","role","onClick","ref","tabIndex","onKeyDown","join"],"sources":["../../packages/webcomponents/src/components/scrim/scrim.scss?tag=br-scrim&encapsulation=shadow","../../packages/webcomponents/src/components/scrim/scrim.tsx"],"sourcesContent":[":host {\n --br-scrim-opacity: 1;\n\n .br-scrim {\n visibility: hidden;\n transition: visibility 0.3s ease;\n z-index: var(--z-index-layer-4);\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: auto;\n }\n\n .br-scrim.mode-fullscreen {\n position: fixed;\n inset: 0;\n }\n\n .br-scrim.mode-parent {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n }\n\n .br-scrim.opened {\n visibility: visible;\n pointer-events: auto;\n }\n\n .mask {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: var(--surface-overlay-scrim);\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: auto;\n }\n\n .br-scrim.opened .mask {\n opacity: var(--br-scrim-opacity);\n }\n\n .content {\n position: relative;\n outline: none;\n pointer-events: auto;\n opacity: 0;\n transform: scale(0.9);\n transition:\n opacity 0.3s ease,\n transform 0.3s ease;\n background: transparent;\n padding: 0;\n margin: 0;\n border: none;\n box-shadow: none;\n overflow: visible;\n contain: none;\n display: inline-block;\n width: fit-content;\n height: fit-content;\n z-index: calc(var(--z-index-layer-4) + 1);\n\n &:focus {\n outline: var(--focus-outline);\n outline-offset: var(--focus-offset);\n box-shadow: var(--focus-shadow);\n }\n }\n\n .br-scrim.opened .content {\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n }\n\n .br-scrim.position-top .content {\n position: absolute;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n }\n\n .br-scrim.position-bottom .content {\n position: absolute;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n }\n\n .br-scrim.position-left .content {\n position: absolute;\n top: 50%;\n left: 0;\n transform: translateY(-50%);\n }\n\n .br-scrim.position-right .content {\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n }\n\n .br-scrim.position-center .content {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n .content ::slotted(*) {\n opacity: 1 !important;\n filter: none;\n }\n\n /* Estilos responsivos */\n @media (width <= 768px) {\n .content {\n max-width: 95%;\n max-height: 95%;\n width: auto;\n }\n\n .br-scrim.position-top .content,\n .br-scrim.position-bottom .content {\n width: 100%;\n max-width: 100%;\n border-radius: 0;\n }\n }\n}\n","import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core'\n\nimport { CssClassMap } from '../../utils/interfaces'\n\n/**\n * Para uma descrição detalhada, consulte a [documentação do GovBR-DS](https://www.gov.br/ds/components/scrim?tab=designer).\n *\n * @slot default - Elemento que será exibido junto com o Scrim, devendo ser fornecido através do slot. Esse elemento representa o conteúdo principal a ser destacado sobre o fundo escurecido.\n * @slot activator - Elemento que, quando clicado, ativa/desativa o scrim. Tem 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 = `br-scrim-${ScrimId++}`\n\n /**\n * Ativa/desativa o scrim\n */\n @Prop({ reflect: 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 * Define um valor CSS personalizado para o background do scrim\n */\n @Prop() customBackground: 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() scrollThreshold: number = 50\n\n /**\n * Define o seletor para o elemento activator.\n * Pode ser:\n * - Um seletor CSS (ex: '.button-class', '#button-id')\n * - A string 'parent' para usar o elemento pai como activator\n * Nota: O slot 'activator' tem prioridade sobre esta propriedade.\n */\n @Prop() activator: 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 previouslyFocusedElement: HTMLElement | null | undefined = 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 this.isActive = newValue\n this.updateStyles()\n\n if (this.isActive) {\n this.previouslyFocusedElement = document.activeElement as HTMLElement\n this.applyScrollStrategy()\n setTimeout(() => {\n this.focusFirstElement()\n }, 100)\n this.brScrimOpen.emit()\n } else {\n this.resetScrolling()\n this.restoreFocus()\n this.brScrimClose.emit()\n }\n }\n\n @Watch('zIndex')\n @Watch('customBackground')\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.customBackground !== null) {\n this.el.style.setProperty('--surface-overlay-scrim', this.customBackground)\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 }\n\n componentDidLoad() {\n this.isActive = this.isOpen\n this.updateStyles()\n if (this.isActive) {\n this.applyScrollStrategy()\n this.focusFirstElement()\n }\n this.setupActivator()\n this.setupActivatorSlotClick()\n this.contentRef.addEventListener('keydown', this.handleKeyDown)\n }\n\n connectedCallback() {\n if (this.scrollStrategy === 'close') {\n window.addEventListener('scroll', this.handleScrollClose)\n }\n }\n\n disconnectedCallback() {\n window.removeEventListener('scroll', this.handleScrollClose)\n this.contentRef.removeEventListener('keydown', this.handleKeyDown)\n this.removeActivatorClickListener()\n this.cleanupActivatorSlotClick()\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 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 el.addEventListener('click', this.handleActivatorClick)\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 const slotEl = this.el.shadowRoot?.querySelector('slot[name=\"activator\"]') as HTMLSlotElement\n const assignedElements = slotEl?.assignedElements?.() ?? []\n\n if (assignedElements.length === 1) {\n assignedElements[0].removeEventListener('click', this.handleActivatorClick)\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 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 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 }\n\n private handleScrollClose = () => {\n if (this.scrollStrategy === 'close' && this.isActive) {\n const currentScroll = window.scrollY\n if (Math.abs(currentScroll - this.lastScrollTop) > this.scrollThreshold) {\n this.handleOpenChange(false)\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 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\n // ======================================================================\n private handleKeyDown = (event: KeyboardEvent) => {\n if (!this.isActive) return\n\n if (this.shouldHandleEscape(event)) {\n this.handleOpenChange(false)\n return\n }\n\n if (event.key === 'Tab') {\n this.handleTabNavigation(event)\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 // 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.handleOpenChange(true)\n }\n\n /**\n * Método público para esconder o scrim\n */\n @Method()\n async close() {\n this.handleOpenChange(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.handleOpenChange(!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-hidden={this.isActive ? 'false' : 'true'}\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 class=\"content\"\n tabIndex={-1}\n onKeyDown={this.handleKeyDown}\n aria-label=\"Conteúdo do diálogo\"\n >\n <slot></slot>\n </div>\n </div>\n </Host>\n )\n }\n}\n\nlet ScrimId = 0\n"],"mappings":"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","ignoreList":[]}
|