@govbr-ds/webcomponents 2.4.0 → 2.5.0
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/README.md +2 -2
- package/cem/custom-elements.json +371 -199
- package/cem/webcomponents.html-custom-data.json +146 -121
- package/dist/cjs/br-avatar.cjs.entry.js +2 -2
- package/dist/cjs/br-breadcrumb-item.cjs.entry.js +1 -1
- package/dist/cjs/br-breadcrumb.cjs.entry.js +2 -2
- package/dist/cjs/br-button_2.cjs.entry.js +2 -2
- package/dist/cjs/br-card.cjs.entry.js +2 -2
- package/dist/cjs/br-carousel-page.cjs.entry.js +1 -1
- package/dist/cjs/br-carousel.cjs.entry.js +1 -1
- package/dist/cjs/br-checkbox-group.cjs.entry.js +2 -2
- package/dist/cjs/br-checkbox.cjs.entry.js +3 -3
- package/dist/cjs/br-checkgroup.cjs.entry.js +1 -1
- package/dist/cjs/br-collapse_2.cjs.entry.js +3 -3
- package/dist/cjs/br-cookiebar-cookie.cjs.entry.js +1 -1
- package/dist/cjs/br-cookiebar-group.cjs.entry.js +1 -1
- package/dist/cjs/br-cookiebar-header.cjs.entry.js +1 -1
- package/dist/cjs/br-cookiebar-link.cjs.entry.js +1 -1
- package/dist/cjs/br-cookiebar-note.cjs.entry.js +1 -1
- package/dist/cjs/br-cookiebar.cjs.entry.js +2 -2
- package/dist/cjs/br-crumb.cjs.entry.js +1 -1
- package/dist/cjs/br-date-picker_3.cjs.entry.js +154 -67
- package/dist/cjs/br-datetime-picker.cjs.entry.js +5 -5
- package/dist/cjs/br-divider.cjs.entry.js +2 -2
- package/dist/cjs/br-dropdown_2.cjs.entry.js +40 -16
- 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-social.cjs.entry.js +1 -1
- package/dist/cjs/br-footer.cjs.entry.js +3 -3
- package/dist/cjs/br-header-function.cjs.entry.js +1 -1
- package/dist/cjs/br-header-link.cjs.entry.js +1 -1
- package/dist/cjs/br-header-list.cjs.entry.js +1 -1
- package/dist/cjs/br-header-logo.cjs.entry.js +1 -1
- package/dist/cjs/br-header.cjs.entry.js +1 -1
- package/dist/cjs/br-icon.cjs.entry.js +2 -2
- package/dist/cjs/br-input.cjs.entry.js +58 -10
- package/dist/cjs/br-item.cjs.entry.js +2 -2
- package/dist/cjs/br-link.cjs.entry.js +7 -7
- package/dist/cjs/br-loading.cjs.entry.js +1 -1
- package/dist/cjs/br-magic-button.cjs.entry.js +1 -1
- package/dist/cjs/br-menu-group.cjs.entry.js +1 -1
- package/dist/cjs/br-menu-header.cjs.entry.js +1 -1
- package/dist/cjs/br-menu-info.cjs.entry.js +1 -1
- package/dist/cjs/br-menu-item.cjs.entry.js +1 -1
- package/dist/cjs/br-menu-link.cjs.entry.js +1 -1
- package/dist/cjs/br-menu-logo.cjs.entry.js +1 -1
- package/dist/cjs/br-menu.cjs.entry.js +3 -3
- package/dist/cjs/br-notification-body.cjs.entry.js +1 -1
- package/dist/cjs/br-notification-header.cjs.entry.js +1 -1
- package/dist/cjs/br-notification-item.cjs.entry.js +1 -1
- package/dist/cjs/br-notification.cjs.entry.js +2 -2
- package/dist/cjs/br-pagination.cjs.entry.js +3 -3
- package/dist/cjs/br-radio-group.cjs.entry.js +3 -3
- package/dist/cjs/br-radio.cjs.entry.js +3 -3
- package/dist/cjs/br-scrim.cjs.entry.js +2 -2
- package/dist/cjs/br-select-input_3.cjs.entry.js +39 -16
- package/dist/cjs/br-sign-in.cjs.entry.js +2 -2
- package/dist/cjs/br-skip-link-item.cjs.entry.js +1 -1
- package/dist/cjs/br-skip-link.cjs.entry.js +1 -1
- package/dist/cjs/br-skiplink-item.cjs.entry.js +1 -1
- package/dist/cjs/br-slider.cjs.entry.js +2 -2
- package/dist/cjs/br-step_2.cjs.entry.js +4 -4
- package/dist/cjs/br-switch.cjs.entry.js +3 -3
- package/dist/cjs/br-tab-item.cjs.entry.js +1 -1
- package/dist/cjs/br-tab.cjs.entry.js +3 -3
- package/dist/cjs/br-table-body.cjs.entry.js +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.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 +3 -3
- package/dist/cjs/br-textarea.cjs.entry.js +2 -2
- package/dist/cjs/br-tooltip.cjs.entry.js +1 -1
- package/dist/cjs/br-upload.cjs.entry.js +4 -4
- package/dist/cjs/br-wizard-panel.cjs.entry.js +1 -1
- package/dist/cjs/br-wizard.cjs.entry.js +1 -1
- package/dist/cjs/{datetime-picker-constants-CCeI5iW7.js → datetime-picker-constants-CTf1kVJ1.js} +1 -0
- package/dist/cjs/{iconify-icon-DfODV9bf.js → iconify-icon-LjavbM-D.js} +103 -57
- package/dist/cjs/{index-C-IpVFDH.js → index-Caoez3xb.js} +64 -16
- package/dist/cjs/index.cjs.js +2 -2
- package/dist/cjs/{isValid-CduHZTFc.js → isValid-DgJ-noPS.js} +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{slot-DAllytTj.js → slot-CjaqqX7y.js} +1 -1
- package/dist/cjs/webcomponents.cjs.js +1 -1
- package/dist/collection/components/avatar/avatar.js +21 -21
- package/dist/collection/components/breadcrumb/breadcrumb-item/breadcrumb-item.js +4 -12
- package/dist/collection/components/breadcrumb/breadcrumb.js +32 -27
- package/dist/collection/components/breadcrumb/crumb/crumb.js +2 -13
- package/dist/collection/components/button/button.js +21 -21
- package/dist/collection/components/card/card.js +20 -22
- package/dist/collection/components/carousel/carousel-page/carousel-page.js +3 -13
- package/dist/collection/components/carousel/carousel.js +23 -30
- package/dist/collection/components/checkbox/checkbox.js +18 -24
- package/dist/collection/components/checkbox-group/checkbox-group.js +19 -20
- package/dist/collection/components/checkgroup/checkgroup.js +2 -14
- package/dist/collection/components/collapse/collapse.js +25 -21
- package/dist/collection/components/cookiebar/cookiebar-cookie/cookiebar-cookie.js +3 -16
- package/dist/collection/components/cookiebar/cookiebar-group/cookiebar-group.js +3 -16
- package/dist/collection/components/cookiebar/cookiebar-header/cookiebar-header.js +3 -16
- package/dist/collection/components/cookiebar/cookiebar-link/cookiebar-link.js +3 -15
- package/dist/collection/components/cookiebar/cookiebar-note/cookiebar-note.js +3 -14
- package/dist/collection/components/cookiebar/cookiebar-note-group/cookiebar-note-group.js +2 -13
- package/dist/collection/components/cookiebar/cookiebar.js +32 -27
- package/dist/collection/components/datetime-picker/date-picker/date-picker-locale.js +62 -15
- package/dist/collection/components/datetime-picker/date-picker/date-picker.js +120 -71
- package/dist/collection/components/datetime-picker/datetime-input/datetime-input.js +3 -13
- package/dist/collection/components/datetime-picker/datetime-picker.js +23 -27
- package/dist/collection/components/datetime-picker/time-picker/time-picker.js +5 -15
- package/dist/collection/components/divider/divider.js +15 -19
- package/dist/collection/components/dropdown/dropdown.js +22 -21
- package/dist/collection/components/footer/footer-category/footer-category.js +4 -17
- package/dist/collection/components/footer/footer-item/footer-item.js +3 -16
- package/dist/collection/components/footer/footer-legal/footer-legal.js +2 -16
- package/dist/collection/components/footer/footer-logo/footer-logo.js +3 -16
- package/dist/collection/components/footer/footer-social/footer-social.js +3 -15
- package/dist/collection/components/footer/footer.js +25 -29
- package/dist/collection/components/header/header-function/header-function.js +10 -14
- package/dist/collection/components/header/header-link/header-link.js +3 -16
- package/dist/collection/components/header/header-list/header-list.js +3 -16
- package/dist/collection/components/header/header-logo/header-logo.js +3 -16
- package/dist/collection/components/header/header.js +30 -27
- package/dist/collection/components/icon/icon.js +22 -17
- package/dist/collection/components/input/input.css +1 -1
- package/dist/collection/components/input/input.js +98 -30
- package/dist/collection/components/item/item.js +18 -22
- package/dist/collection/components/link/link.js +25 -29
- package/dist/collection/components/list/list.js +17 -21
- package/dist/collection/components/loading/loading.js +17 -24
- package/dist/collection/components/magic-button/magic-button.js +13 -20
- package/dist/collection/components/menu/menu-group/menu-group.js +3 -16
- package/dist/collection/components/menu/menu-header/menu-header.js +3 -16
- package/dist/collection/components/menu/menu-info/menu-info.js +2 -15
- package/dist/collection/components/menu/menu-item/menu-item.js +3 -16
- package/dist/collection/components/menu/menu-link/menu-link.js +5 -17
- package/dist/collection/components/menu/menu-list/menu-list.js +2 -15
- package/dist/collection/components/menu/menu-logo/menu-logo.js +2 -15
- package/dist/collection/components/menu/menu-social/menu-social.js +2 -15
- package/dist/collection/components/menu/menu.js +28 -35
- package/dist/collection/components/message/message.js +22 -25
- package/dist/collection/components/modal/modal.js +18 -21
- package/dist/collection/components/notification/notification-body/notification-body.js +3 -13
- package/dist/collection/components/notification/notification-header/notification-header.js +3 -14
- package/dist/collection/components/notification/notification-item/notification-item.js +3 -16
- package/dist/collection/components/notification/notification.js +20 -29
- package/dist/collection/components/pagination/pagination.css +1 -1
- package/dist/collection/components/pagination/pagination.js +15 -23
- package/dist/collection/components/radio/radio.js +17 -20
- package/dist/collection/components/radio-group/radio-group.js +20 -20
- package/dist/collection/components/scrim/scrim.js +14 -17
- package/dist/collection/components/select/select-input/select-input.css +1 -1
- package/dist/collection/components/select/select-input/select-input.js +43 -19
- package/dist/collection/components/select/select-list/select-list.css +1 -1
- package/dist/collection/components/select/select-list/select-list.js +52 -15
- package/dist/collection/components/select/select-option/select-option.js +8 -13
- package/dist/collection/components/select/select.css +1 -1
- package/dist/collection/components/select/select.js +83 -105
- package/dist/collection/components/sign-in/sign-in.js +12 -16
- package/dist/collection/components/skip-link/skip-link-item/skip-link-item-alias.js +8 -4
- package/dist/collection/components/skip-link/skip-link-item/skip-link-item.js +5 -15
- package/dist/collection/components/skip-link/skip-link.js +18 -24
- package/dist/collection/components/slider/slider.js +15 -25
- package/dist/collection/components/step/step-item/step-item.js +5 -15
- package/dist/collection/components/step/step.js +16 -25
- package/dist/collection/components/switch/switch.js +16 -20
- package/dist/collection/components/tab/tab-item/tab-item.js +5 -15
- package/dist/collection/components/tab/tab.js +22 -29
- package/dist/collection/components/table/table-body/table-body.js +3 -13
- package/dist/collection/components/table/table-cell/table-cell.js +3 -12
- package/dist/collection/components/table/table-header/table-header.js +3 -13
- package/dist/collection/components/table/table-header-cell/table-header-cell.js +3 -13
- package/dist/collection/components/table/table-row/table-row.js +3 -13
- package/dist/collection/components/table/table.js +25 -32
- package/dist/collection/components/tag/tag.js +17 -26
- package/dist/collection/components/textarea/textarea.js +14 -22
- package/dist/collection/components/tooltip/tooltip.js +13 -19
- package/dist/collection/components/upload/upload.css +1 -1
- package/dist/collection/components/upload/upload.js +36 -29
- package/dist/collection/components/wizard/wizard-panel/wizard-panel.js +3 -13
- package/dist/collection/components/wizard/wizard.js +22 -26
- package/dist/collection/pages/components/select/remote-options.js +87 -0
- package/dist/collection/shared/utils/slot.js +1 -1
- package/dist/components/br-avatar.js +1 -1
- package/dist/components/br-breadcrumb-item.js +1 -1
- package/dist/components/br-breadcrumb.js +1 -1
- package/dist/components/br-button.js +1 -1
- package/dist/components/br-card.js +1 -1
- package/dist/components/br-carousel-page.js +1 -1
- package/dist/components/br-carousel.js +1 -1
- package/dist/components/br-checkbox-group.js +1 -1
- package/dist/components/br-checkbox.js +1 -1
- package/dist/components/br-checkgroup.js +1 -1
- package/dist/components/br-collapse.js +1 -1
- package/dist/components/br-cookiebar-cookie.js +1 -1
- package/dist/components/br-cookiebar-group.js +1 -1
- package/dist/components/br-cookiebar-header.js +1 -1
- package/dist/components/br-cookiebar-link.js +1 -1
- package/dist/components/br-cookiebar-note-group.js +1 -1
- package/dist/components/br-cookiebar-note.js +1 -1
- package/dist/components/br-cookiebar.js +1 -1
- package/dist/components/br-crumb.js +1 -1
- package/dist/components/br-date-picker.js +1 -1
- package/dist/components/br-datetime-input.js +1 -1
- package/dist/components/br-datetime-picker.js +1 -1
- package/dist/components/br-divider.js +1 -1
- package/dist/components/br-dropdown.js +1 -1
- package/dist/components/br-footer-category.js +1 -1
- package/dist/components/br-footer-item.js +1 -1
- package/dist/components/br-footer-legal.js +1 -1
- package/dist/components/br-footer-logo.js +1 -1
- package/dist/components/br-footer-social.js +1 -1
- package/dist/components/br-footer.js +1 -1
- package/dist/components/br-header-function.js +1 -1
- package/dist/components/br-header-link.js +1 -1
- package/dist/components/br-header-list.js +1 -1
- package/dist/components/br-header-logo.js +1 -1
- package/dist/components/br-header.js +1 -1
- package/dist/components/br-icon.js +1 -1
- package/dist/components/br-input.js +1 -1
- package/dist/components/br-item.js +1 -1
- package/dist/components/br-link.js +1 -1
- package/dist/components/br-list.js +1 -1
- package/dist/components/br-loading.js +1 -1
- package/dist/components/br-magic-button.js +1 -1
- package/dist/components/br-menu-group.js +1 -1
- package/dist/components/br-menu-header.js +1 -1
- package/dist/components/br-menu-info.js +1 -1
- package/dist/components/br-menu-item.js +1 -1
- package/dist/components/br-menu-link.js +1 -1
- package/dist/components/br-menu-list.js +1 -1
- package/dist/components/br-menu-logo.js +1 -1
- package/dist/components/br-menu-social.js +1 -1
- package/dist/components/br-menu.js +1 -1
- package/dist/components/br-message.js +1 -1
- package/dist/components/br-modal.js +1 -1
- package/dist/components/br-notification-body.js +1 -1
- package/dist/components/br-notification-header.js +1 -1
- package/dist/components/br-notification-item.js +1 -1
- package/dist/components/br-notification.js +1 -1
- package/dist/components/br-pagination.js +1 -1
- package/dist/components/br-radio-group.js +1 -1
- package/dist/components/br-radio.js +1 -1
- package/dist/components/br-scrim.js +1 -1
- package/dist/components/br-select-input.js +1 -1
- package/dist/components/br-select-list.js +1 -1
- package/dist/components/br-select-option.js +1 -1
- package/dist/components/br-select.js +1 -1
- package/dist/components/br-sign-in.js +1 -1
- package/dist/components/br-skip-link-item.js +1 -1
- package/dist/components/br-skip-link.js +1 -1
- package/dist/components/br-skiplink-item.js +1 -1
- package/dist/components/br-slider.js +1 -1
- package/dist/components/br-step-item.js +1 -1
- package/dist/components/br-step.js +1 -1
- package/dist/components/br-switch.js +1 -1
- package/dist/components/br-tab-item.js +1 -1
- package/dist/components/br-tab.js +1 -1
- package/dist/components/br-table-body.js +1 -1
- package/dist/components/br-table-cell.js +1 -1
- package/dist/components/br-table-header-cell.js +1 -1
- package/dist/components/br-table-header.js +1 -1
- package/dist/components/br-table-row.js +1 -1
- package/dist/components/br-table.js +1 -1
- package/dist/components/br-tag.js +1 -1
- package/dist/components/br-textarea.js +1 -1
- package/dist/components/br-time-picker.js +1 -1
- package/dist/components/br-tooltip.js +1 -1
- package/dist/components/br-upload.js +1 -1
- package/dist/components/br-wizard-panel.js +1 -1
- package/dist/components/br-wizard.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/{p-jOb1hCPi.js → p-448Z5r2f.js} +1 -1
- package/dist/components/{p-DL6xuxGG.js → p-AhfgJCUp.js} +1 -1
- package/dist/components/{p-BzQFMh9j.js → p-AoNL6BaW.js} +1 -1
- package/dist/components/{p-Devw08cc.js → p-B468MCYC.js} +1 -1
- package/dist/components/{p-BH6QYnAr.js → p-B985Ov_x.js} +1 -1
- package/dist/components/{p-5h-W9_JR.js → p-BOWQIHQA.js} +1 -1
- package/dist/components/{p-Di96UxvH.js → p-BPQrgCRr.js} +1 -1
- package/dist/components/{p-CeNELttN.js → p-BwQT0fOJ.js} +1 -1
- package/dist/components/{p-CjtmJTLO.js → p-CAgbUwsx.js} +1 -1
- package/dist/components/{p-DDu3JV_r.js → p-CFXey8i8.js} +1 -1
- package/dist/components/{p-DsO4F0Cz.js → p-CVz_akHx.js} +1 -1
- package/dist/components/{p-DFWqyfUe.js → p-CW8xwk6J.js} +1 -1
- package/dist/components/p-CYZVdKeO.js +5 -0
- package/dist/components/p-C_DC6oQW.js +16 -0
- package/dist/components/{p-CCPHCJjw.js → p-CeWbZN7V.js} +1 -1
- package/dist/components/p-CyXVsiz9.js +5 -0
- package/dist/components/{p-BFHvuEnN.js → p-DDe0tQEO.js} +1 -1
- package/dist/components/{p-D-3G3Ioq.js → p-DJKZ8ktB.js} +1 -1
- package/dist/components/{p-BicHMcSS.js → p-DRsZ9GNg.js} +1 -1
- package/dist/components/p-DU54cqCf.js +5 -0
- package/dist/components/p-DVJlmlEX.js +5 -0
- package/dist/components/{p-ta-24T1Z.js → p-DcMjwTqu.js} +1 -1
- package/dist/components/p-Dd1qCWAK.js +5 -0
- package/dist/components/{p-rMnkh3Cy.js → p-Dn36Mj2E.js} +1 -1
- package/dist/components/{p-DOX9Uwk1.js → p-DoWy_P8b.js} +1 -1
- package/dist/components/{p-Dp3MsSXu.js → p-HbhTnepI.js} +1 -1
- package/dist/components/{p-CbgKdASU.js → p-JkJjzmGm.js} +1 -1
- package/dist/components/{p-Bvrw9yWR.js → p-Or3FLzbz.js} +1 -1
- package/dist/components/{p-PV731d8s.js → p-SWQlgYWR.js} +1 -1
- package/dist/components/{p-XW6Hp_Jk.js → p-Zb9nyfTY.js} +1 -1
- package/dist/components/{p-OQpiDEK9.js → p-jvKQA6x7.js} +1 -1
- package/dist/components/{p-CBHd0-fF.js → p-pQb-3jFY.js} +1 -1
- package/dist/components/{p-848QkYoM.js → p-qX6sHxOk.js} +1 -1
- package/dist/esm/br-avatar.entry.js +2 -2
- package/dist/esm/br-breadcrumb-item.entry.js +1 -1
- package/dist/esm/br-breadcrumb.entry.js +2 -2
- package/dist/esm/br-button_2.entry.js +2 -2
- package/dist/esm/br-card.entry.js +2 -2
- package/dist/esm/br-carousel-page.entry.js +1 -1
- package/dist/esm/br-carousel.entry.js +1 -1
- package/dist/esm/br-checkbox-group.entry.js +2 -2
- package/dist/esm/br-checkbox.entry.js +3 -3
- package/dist/esm/br-checkgroup.entry.js +1 -1
- package/dist/esm/br-collapse_2.entry.js +3 -3
- package/dist/esm/br-cookiebar-cookie.entry.js +1 -1
- package/dist/esm/br-cookiebar-group.entry.js +1 -1
- package/dist/esm/br-cookiebar-header.entry.js +1 -1
- package/dist/esm/br-cookiebar-link.entry.js +1 -1
- package/dist/esm/br-cookiebar-note.entry.js +1 -1
- package/dist/esm/br-cookiebar.entry.js +2 -2
- package/dist/esm/br-crumb.entry.js +1 -1
- package/dist/esm/br-date-picker_3.entry.js +155 -68
- package/dist/esm/br-datetime-picker.entry.js +5 -5
- package/dist/esm/br-divider.entry.js +2 -2
- package/dist/esm/br-dropdown_2.entry.js +40 -16
- 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-social.entry.js +1 -1
- package/dist/esm/br-footer.entry.js +3 -3
- package/dist/esm/br-header-function.entry.js +1 -1
- package/dist/esm/br-header-link.entry.js +1 -1
- package/dist/esm/br-header-list.entry.js +1 -1
- package/dist/esm/br-header-logo.entry.js +1 -1
- package/dist/esm/br-header.entry.js +1 -1
- package/dist/esm/br-icon.entry.js +2 -2
- package/dist/esm/br-input.entry.js +59 -11
- package/dist/esm/br-item.entry.js +2 -2
- package/dist/esm/br-link.entry.js +7 -7
- package/dist/esm/br-loading.entry.js +1 -1
- package/dist/esm/br-magic-button.entry.js +1 -1
- package/dist/esm/br-menu-group.entry.js +1 -1
- package/dist/esm/br-menu-header.entry.js +1 -1
- package/dist/esm/br-menu-info.entry.js +1 -1
- package/dist/esm/br-menu-item.entry.js +1 -1
- package/dist/esm/br-menu-link.entry.js +1 -1
- package/dist/esm/br-menu-logo.entry.js +1 -1
- package/dist/esm/br-menu.entry.js +3 -3
- package/dist/esm/br-notification-body.entry.js +1 -1
- package/dist/esm/br-notification-header.entry.js +1 -1
- package/dist/esm/br-notification-item.entry.js +1 -1
- package/dist/esm/br-notification.entry.js +2 -2
- package/dist/esm/br-pagination.entry.js +3 -3
- package/dist/esm/br-radio-group.entry.js +3 -3
- package/dist/esm/br-radio.entry.js +3 -3
- package/dist/esm/br-scrim.entry.js +2 -2
- package/dist/esm/br-select-input_3.entry.js +39 -16
- package/dist/esm/br-sign-in.entry.js +2 -2
- package/dist/esm/br-skip-link-item.entry.js +1 -1
- package/dist/esm/br-skip-link.entry.js +1 -1
- package/dist/esm/br-skiplink-item.entry.js +1 -1
- package/dist/esm/br-slider.entry.js +2 -2
- package/dist/esm/br-step_2.entry.js +4 -4
- package/dist/esm/br-switch.entry.js +3 -3
- package/dist/esm/br-tab-item.entry.js +1 -1
- package/dist/esm/br-tab.entry.js +3 -3
- package/dist/esm/br-table-body.entry.js +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.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 +3 -3
- package/dist/esm/br-textarea.entry.js +2 -2
- package/dist/esm/br-tooltip.entry.js +1 -1
- package/dist/esm/br-upload.entry.js +4 -4
- package/dist/esm/br-wizard-panel.entry.js +1 -1
- package/dist/esm/br-wizard.entry.js +1 -1
- package/dist/esm/{datetime-picker-constants-DDc4sADe.js → datetime-picker-constants-1l4_-FEJ.js} +1 -1
- package/dist/esm/{iconify-icon-D3usVJE2.js → iconify-icon-C_DC6oQW.js} +103 -57
- package/dist/esm/{index-CytVKoHT.js → index-BQRBKuY0.js} +64 -17
- package/dist/esm/index.js +2 -2
- package/dist/esm/{isValid-Bee0Uvqc.js → isValid-wU7S6MI2.js} +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{slot-BIG-yees.js → slot-Bt01zQ7-.js} +1 -1
- package/dist/esm/webcomponents.js +1 -1
- package/dist/hydrate/index.js +1452 -1876
- package/dist/hydrate/index.mjs +1452 -1876
- package/dist/types/components/avatar/avatar.d.ts +20 -20
- package/dist/types/components/breadcrumb/breadcrumb-item/breadcrumb-item.d.ts +3 -11
- package/dist/types/components/breadcrumb/breadcrumb.d.ts +30 -25
- package/dist/types/components/breadcrumb/crumb/crumb.d.ts +1 -12
- package/dist/types/components/button/button.d.ts +20 -20
- package/dist/types/components/card/card.d.ts +19 -21
- package/dist/types/components/carousel/carousel-page/carousel-page.d.ts +2 -12
- package/dist/types/components/carousel/carousel.d.ts +22 -29
- package/dist/types/components/checkbox/checkbox.d.ts +16 -22
- package/dist/types/components/checkbox-group/checkbox-group.d.ts +17 -18
- package/dist/types/components/checkgroup/checkgroup.d.ts +1 -13
- package/dist/types/components/collapse/collapse.d.ts +24 -20
- package/dist/types/components/cookiebar/cookiebar-cookie/cookiebar-cookie.d.ts +2 -15
- package/dist/types/components/cookiebar/cookiebar-group/cookiebar-group.d.ts +2 -15
- package/dist/types/components/cookiebar/cookiebar-header/cookiebar-header.d.ts +2 -15
- package/dist/types/components/cookiebar/cookiebar-link/cookiebar-link.d.ts +2 -14
- package/dist/types/components/cookiebar/cookiebar-note/cookiebar-note.d.ts +2 -13
- package/dist/types/components/cookiebar/cookiebar-note-group/cookiebar-note-group.d.ts +2 -13
- package/dist/types/components/cookiebar/cookiebar.d.ts +30 -25
- package/dist/types/components/datetime-picker/date-picker/date-picker-locale.d.ts +12 -4
- package/dist/types/components/datetime-picker/date-picker/date-picker.d.ts +57 -11
- package/dist/types/components/datetime-picker/datetime-input/datetime-input.d.ts +2 -12
- package/dist/types/components/datetime-picker/datetime-picker.d.ts +22 -26
- package/dist/types/components/datetime-picker/time-picker/time-picker.d.ts +3 -13
- package/dist/types/components/divider/divider.d.ts +14 -18
- package/dist/types/components/dropdown/dropdown.d.ts +21 -20
- package/dist/types/components/footer/footer-category/footer-category.d.ts +2 -15
- package/dist/types/components/footer/footer-item/footer-item.d.ts +2 -15
- package/dist/types/components/footer/footer-legal/footer-legal.d.ts +1 -15
- package/dist/types/components/footer/footer-logo/footer-logo.d.ts +2 -15
- package/dist/types/components/footer/footer-social/footer-social.d.ts +2 -14
- package/dist/types/components/footer/footer.d.ts +23 -27
- package/dist/types/components/header/header-function/header-function.d.ts +9 -13
- package/dist/types/components/header/header-link/header-link.d.ts +2 -15
- package/dist/types/components/header/header-list/header-list.d.ts +2 -15
- package/dist/types/components/header/header-logo/header-logo.d.ts +2 -15
- package/dist/types/components/header/header.d.ts +29 -26
- package/dist/types/components/icon/icon.d.ts +21 -16
- package/dist/types/components/input/input.d.ts +39 -22
- package/dist/types/components/item/item.d.ts +17 -21
- package/dist/types/components/link/link.d.ts +18 -22
- package/dist/types/components/list/list.d.ts +16 -20
- package/dist/types/components/loading/loading.d.ts +16 -23
- package/dist/types/components/magic-button/magic-button.d.ts +12 -19
- package/dist/types/components/menu/menu-group/menu-group.d.ts +2 -15
- package/dist/types/components/menu/menu-header/menu-header.d.ts +2 -15
- package/dist/types/components/menu/menu-info/menu-info.d.ts +1 -14
- package/dist/types/components/menu/menu-item/menu-item.d.ts +2 -15
- package/dist/types/components/menu/menu-link/menu-link.d.ts +4 -16
- package/dist/types/components/menu/menu-list/menu-list.d.ts +2 -15
- package/dist/types/components/menu/menu-logo/menu-logo.d.ts +1 -14
- package/dist/types/components/menu/menu-social/menu-social.d.ts +2 -15
- package/dist/types/components/menu/menu.d.ts +25 -32
- package/dist/types/components/message/message.d.ts +21 -24
- package/dist/types/components/modal/modal.d.ts +18 -21
- package/dist/types/components/notification/notification-body/notification-body.d.ts +2 -12
- package/dist/types/components/notification/notification-header/notification-header.d.ts +2 -13
- package/dist/types/components/notification/notification-item/notification-item.d.ts +2 -15
- package/dist/types/components/notification/notification.d.ts +18 -27
- package/dist/types/components/pagination/pagination.d.ts +13 -21
- package/dist/types/components/radio/radio.d.ts +15 -18
- package/dist/types/components/radio-group/radio-group.d.ts +18 -18
- package/dist/types/components/scrim/scrim.d.ts +12 -15
- package/dist/types/components/select/select-input/select-input.d.ts +11 -10
- package/dist/types/components/select/select-list/select-list.d.ts +13 -12
- package/dist/types/components/select/select-option/select-option.d.ts +5 -10
- package/dist/types/components/select/select.d.ts +42 -94
- package/dist/types/components/sign-in/sign-in.d.ts +11 -15
- package/dist/types/components/skip-link/skip-link-item/skip-link-item-alias.d.ts +7 -3
- package/dist/types/components/skip-link/skip-link-item/skip-link-item.d.ts +4 -14
- package/dist/types/components/skip-link/skip-link.d.ts +17 -23
- package/dist/types/components/slider/slider.d.ts +14 -24
- package/dist/types/components/step/step-item/step-item.d.ts +2 -12
- package/dist/types/components/step/step.d.ts +15 -24
- package/dist/types/components/switch/switch.d.ts +14 -18
- package/dist/types/components/tab/tab-item/tab-item.d.ts +4 -14
- package/dist/types/components/tab/tab.d.ts +19 -26
- package/dist/types/components/table/table-body/table-body.d.ts +2 -12
- package/dist/types/components/table/table-cell/table-cell.d.ts +2 -11
- package/dist/types/components/table/table-header/table-header.d.ts +2 -12
- package/dist/types/components/table/table-header-cell/table-header-cell.d.ts +2 -12
- package/dist/types/components/table/table-row/table-row.d.ts +2 -12
- package/dist/types/components/table/table.d.ts +24 -31
- package/dist/types/components/tag/tag.d.ts +15 -24
- package/dist/types/components/textarea/textarea.d.ts +13 -21
- package/dist/types/components/tooltip/tooltip.d.ts +12 -18
- package/dist/types/components/upload/upload.d.ts +20 -27
- package/dist/types/components/wizard/wizard-panel/wizard-panel.d.ts +2 -12
- package/dist/types/components/wizard/wizard.d.ts +21 -25
- package/dist/types/components.d.ts +3384 -4947
- package/dist/webcomponents/index.esm.js +1 -1
- package/dist/webcomponents/{p-08ac6f09.entry.js → p-031a2256.entry.js} +1 -1
- package/dist/webcomponents/{p-23a5cfd7.entry.js → p-0602e5b1.entry.js} +1 -1
- package/dist/webcomponents/p-079d5f69.entry.js +5 -0
- package/dist/webcomponents/{p-0fc112fc.entry.js → p-087ed5e7.entry.js} +1 -1
- package/dist/webcomponents/{p-7ee564a1.entry.js → p-0d5a9ebf.entry.js} +1 -1
- package/dist/webcomponents/{p-a038be16.entry.js → p-105b4d06.entry.js} +1 -1
- package/dist/webcomponents/{p-6a293be8.entry.js → p-11d4edc5.entry.js} +1 -1
- package/dist/webcomponents/{p-31a4694a.entry.js → p-12dd22af.entry.js} +1 -1
- package/dist/webcomponents/{p-b07bfdc5.entry.js → p-14aedf0d.entry.js} +1 -1
- package/dist/webcomponents/{p-1ba60d13.entry.js → p-152482f9.entry.js} +1 -1
- package/dist/webcomponents/{p-09c79c1d.entry.js → p-19b4b1b7.entry.js} +1 -1
- package/dist/webcomponents/{p-b0124459.entry.js → p-1cd1126e.entry.js} +1 -1
- package/dist/webcomponents/{p-DDc4sADe.js → p-1l4_-FEJ.js} +1 -1
- package/dist/webcomponents/{p-18cf093a.entry.js → p-21e10074.entry.js} +1 -1
- package/dist/webcomponents/{p-47c490ef.entry.js → p-2271ea84.entry.js} +1 -1
- package/dist/webcomponents/{p-c717c745.entry.js → p-271b1ede.entry.js} +1 -1
- package/dist/webcomponents/{p-b66ab52d.entry.js → p-28f732fc.entry.js} +1 -1
- package/dist/webcomponents/{p-b5d25332.entry.js → p-2971d38a.entry.js} +1 -1
- package/dist/webcomponents/{p-b063c12f.entry.js → p-2ac48875.entry.js} +1 -1
- package/dist/webcomponents/{p-609cf652.entry.js → p-2b1a919c.entry.js} +1 -1
- package/dist/webcomponents/{p-05b459f2.entry.js → p-2da57966.entry.js} +1 -1
- package/dist/webcomponents/{p-eb94199d.entry.js → p-2e81b0b3.entry.js} +1 -1
- package/dist/webcomponents/p-2eececed.entry.js +5 -0
- package/dist/webcomponents/{p-f99d8c9c.entry.js → p-2f904c4a.entry.js} +1 -1
- package/dist/webcomponents/p-32414f1c.entry.js +5 -0
- package/dist/webcomponents/{p-5a7c2031.entry.js → p-324afbce.entry.js} +1 -1
- package/dist/webcomponents/{p-a89b684d.entry.js → p-330ec8ab.entry.js} +1 -1
- package/dist/webcomponents/{p-37914e63.entry.js → p-374f83b1.entry.js} +1 -1
- package/dist/webcomponents/{p-d08b6266.entry.js → p-3926cc91.entry.js} +1 -1
- package/dist/webcomponents/{p-745213f7.entry.js → p-39a7826d.entry.js} +1 -1
- package/dist/webcomponents/{p-8aa6f07c.entry.js → p-3bcc2c58.entry.js} +1 -1
- package/dist/webcomponents/{p-67605757.entry.js → p-3c7ce0e4.entry.js} +1 -1
- package/dist/webcomponents/{p-473561f2.entry.js → p-467842ca.entry.js} +1 -1
- package/dist/webcomponents/p-53550e8c.entry.js +5 -0
- package/dist/webcomponents/p-53e71a8a.entry.js +5 -0
- package/dist/webcomponents/{p-198aa844.entry.js → p-5528b466.entry.js} +1 -1
- package/dist/webcomponents/{p-a32d17cb.entry.js → p-55e0822d.entry.js} +1 -1
- package/dist/webcomponents/{p-01801ac1.entry.js → p-58bacbe1.entry.js} +1 -1
- package/dist/webcomponents/{p-a46f068e.entry.js → p-621f0fa8.entry.js} +1 -1
- package/dist/webcomponents/{p-821341dc.entry.js → p-6514a75d.entry.js} +1 -1
- package/dist/webcomponents/{p-dc23cb2e.entry.js → p-678b43a6.entry.js} +1 -1
- package/dist/webcomponents/p-6b6be415.entry.js +5 -0
- package/dist/webcomponents/{p-ac68355e.entry.js → p-6d58ab4f.entry.js} +1 -1
- package/dist/webcomponents/{p-fdcb54a3.entry.js → p-6ff9b26e.entry.js} +1 -1
- package/dist/webcomponents/{p-e241caf3.entry.js → p-84dfbfdd.entry.js} +1 -1
- package/dist/webcomponents/{p-6f1a4fbe.entry.js → p-85c8d060.entry.js} +1 -1
- package/dist/webcomponents/{p-3b0dd0ff.entry.js → p-913d6f28.entry.js} +1 -1
- package/dist/webcomponents/{p-fed02286.entry.js → p-975ea5c7.entry.js} +1 -1
- package/dist/webcomponents/{p-15022ab7.entry.js → p-992167bc.entry.js} +1 -1
- package/dist/webcomponents/p-C_DC6oQW.js +16 -0
- package/dist/webcomponents/{p-fOJu6uZR.js → p-CpE_G6IZ.js} +1 -1
- package/dist/webcomponents/p-DnwERaeQ.js +5 -0
- package/dist/webcomponents/{p-1bb96641.entry.js → p-a21872bf.entry.js} +1 -1
- package/dist/webcomponents/{p-db309a11.entry.js → p-a9f16a65.entry.js} +1 -1
- package/dist/webcomponents/{p-7fda8b89.entry.js → p-bbcde1ea.entry.js} +1 -1
- package/dist/webcomponents/{p-42b60169.entry.js → p-bbf47e78.entry.js} +1 -1
- package/dist/webcomponents/{p-42c9c6c5.entry.js → p-bf35e506.entry.js} +1 -1
- package/dist/webcomponents/{p-9e0324a7.entry.js → p-c09af3cd.entry.js} +1 -1
- package/dist/webcomponents/{p-794b701b.entry.js → p-c29268b5.entry.js} +1 -1
- package/dist/webcomponents/{p-7352d459.entry.js → p-c3e61c39.entry.js} +1 -1
- package/dist/webcomponents/{p-fb76b1e0.entry.js → p-c6b2545a.entry.js} +1 -1
- package/dist/webcomponents/{p-b55425b7.entry.js → p-c6f2f17b.entry.js} +1 -1
- package/dist/webcomponents/{p-95f3c44a.entry.js → p-cae39e13.entry.js} +1 -1
- package/dist/webcomponents/{p-8116ee93.entry.js → p-cb1e08b1.entry.js} +1 -1
- package/dist/webcomponents/{p-dacb7e2c.entry.js → p-cb690a87.entry.js} +1 -1
- package/dist/webcomponents/{p-8ddf3ce3.entry.js → p-d0be7243.entry.js} +1 -1
- package/dist/webcomponents/{p-3658adcf.entry.js → p-d191c6e3.entry.js} +1 -1
- package/dist/webcomponents/{p-2c8595d3.entry.js → p-d205f3fd.entry.js} +1 -1
- package/dist/webcomponents/{p-4b01c60f.entry.js → p-d3bd2c40.entry.js} +1 -1
- package/dist/webcomponents/{p-af888d13.entry.js → p-dbeea64e.entry.js} +1 -1
- package/dist/webcomponents/{p-d6165aa0.entry.js → p-df475129.entry.js} +1 -1
- package/dist/webcomponents/{p-67774920.entry.js → p-e0ccf189.entry.js} +1 -1
- package/dist/webcomponents/p-e121429a.entry.js +5 -0
- package/dist/webcomponents/{p-96dbb585.entry.js → p-e4b968b5.entry.js} +1 -1
- package/dist/webcomponents/{p-67d62559.entry.js → p-e6c6f305.entry.js} +1 -1
- package/dist/webcomponents/{p-13babfc4.entry.js → p-e8291be2.entry.js} +1 -1
- package/dist/webcomponents/{p-614683d9.entry.js → p-eb5806c7.entry.js} +1 -1
- package/dist/webcomponents/{p-20477061.entry.js → p-ed3fa8ec.entry.js} +1 -1
- package/dist/webcomponents/{p-21feda62.entry.js → p-f9084f16.entry.js} +1 -1
- package/dist/webcomponents/{p-695dbeb0.entry.js → p-fad3aa61.entry.js} +1 -1
- package/dist/webcomponents/webcomponents.esm.js +1 -1
- package/package.json +1 -1
- package/dist/collection/pages/components/select/remote.js +0 -33
- package/dist/collection/pages/components/select/virtualized.js +0 -13
- package/dist/components/p-BcW8O6h2.js +0 -5
- package/dist/components/p-Bs7iRQTG.js +0 -5
- package/dist/components/p-D3usVJE2.js +0 -16
- package/dist/components/p-DUq7uT2-.js +0 -5
- package/dist/components/p-DuLHFTpa.js +0 -5
- package/dist/components/p-DusornQ0.js +0 -5
- package/dist/webcomponents/p-09817344.entry.js +0 -5
- package/dist/webcomponents/p-172d42c2.entry.js +0 -5
- package/dist/webcomponents/p-9815ab95.entry.js +0 -5
- package/dist/webcomponents/p-CJipT0in.js +0 -5
- package/dist/webcomponents/p-D3usVJE2.js +0 -16
- package/dist/webcomponents/p-b609b464.entry.js +0 -5
- package/dist/webcomponents/p-ce3d689c.entry.js +0 -5
- package/dist/webcomponents/p-e7107869.entry.js +0 -5
- package/dist/webcomponents/p-f8993ae4.entry.js +0 -5
- /package/dist/components/{p-5z6jgH1D.js → p-BNckUhK6.js} +0 -0
- /package/dist/webcomponents/{p-BIG-yees.js → p-Bt01zQ7-.js} +0 -0
|
@@ -4,26 +4,18 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { Host, h } from "@stencil/core";
|
|
6
6
|
import { reportInvalidPropValue } from "../../../shared/utils/prop-warning";
|
|
7
|
-
import { resolveDensity, resolveIntegerPropValue, resolveNumberPropValue } from "../../../shared/utils/props";
|
|
7
|
+
import { resolveAllowedPropValue, resolveDensity, resolveIntegerPropValue, resolveNumberPropValue, } from "../../../shared/utils/props";
|
|
8
8
|
import { createRafBatcher } from "../../../shared/utils/raf-batcher";
|
|
9
9
|
import { filterSelectOptions, SELECT_ALL_OPTION_VALUE } from "../select.utils";
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Painel suspenso com lista virtualizada do `br-select`.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
* - Atua como o painel suspenso (popup `listbox`) que exibe os itens `br-select-option`.
|
|
15
|
-
* - Implementa virtualização de itens para oferecer alta performance mesmo em listas extensas com centenas ou milhares de opções.
|
|
16
|
-
* - Mantém o posicionamento flutuante e controla a rolagem de visualização do item ativo em navegação por teclado.
|
|
17
|
-
*
|
|
18
|
-
* ### Regra de uso e relacionamento
|
|
19
|
-
* Gerenciado exclusivamente pelo componente pai `br-select`, que injeta a coleção normalizada em `options`, controla o estado de exibição (aberto/fechado), a seleção múltipla e o índice ativo. A prop `options` desta lista é um contrato interno de composição e não substitui a API de opções do `br-select`. A lista cria internamente elementos `br-select-option` para a janela virtualizada, em vez de exibir diretamente os filhos declarados no slot do pai. Não utilize `br-select-list` como controle autônomo de formulário, pois ele não possui associação nativa com formulários (`formAssociated`) nem campo de acionamento próprio.
|
|
20
|
-
*
|
|
21
|
-
* Para a documentação completa de design, consulte o [Design System do GovBR](https://www.gov.br/ds/components/select?tab=designer).
|
|
13
|
+
* É gerenciado internamente pelo `br-select` para exibir as opções com alta performance, mesmo em listas grandes. Não é necessário utilizá-lo de forma avulsa.
|
|
22
14
|
*
|
|
23
15
|
* @category Formulários, Seleção
|
|
24
16
|
* @status stable
|
|
25
17
|
* @part list - Contêiner visual da lista virtualizada.
|
|
26
|
-
* @slot loading - Indicador exibido enquanto resultados remotos são carregados.
|
|
18
|
+
* @slot loading - Indicador exibido enquanto resultados remotos são carregados. Padrão: spinner com o texto "Pesquisando…".
|
|
27
19
|
* @part loading - Área do indicador de carregamento.
|
|
28
20
|
* @part option-group - Cabeçalho visual de um grupo de opções.
|
|
29
21
|
*/
|
|
@@ -54,6 +46,14 @@ export class SelectList {
|
|
|
54
46
|
* @default ''
|
|
55
47
|
*/
|
|
56
48
|
this.searchTerm = '';
|
|
49
|
+
/**
|
|
50
|
+
* Define se `searchTerm` filtra as opções (`local`) ou se as opções já chegam
|
|
51
|
+
* filtradas pelo servidor (`remote`). Nos dois modos, um termo sem resultados
|
|
52
|
+
* exibe a mensagem de lista vazia. Valores inválidos usam `local`.
|
|
53
|
+
*
|
|
54
|
+
* @default 'local'
|
|
55
|
+
*/
|
|
56
|
+
this.searchMode = 'local';
|
|
57
57
|
/** Indica que os resultados remotos estão sendo carregados.
|
|
58
58
|
* @default false
|
|
59
59
|
*/
|
|
@@ -155,6 +155,9 @@ export class SelectList {
|
|
|
155
155
|
option.selected = selected;
|
|
156
156
|
});
|
|
157
157
|
}
|
|
158
|
+
get effectiveSearchMode() {
|
|
159
|
+
return resolveAllowedPropValue(this.el, 'searchMode', this.searchMode, ['local', 'remote'], 'local');
|
|
160
|
+
}
|
|
158
161
|
get effectiveVisibleItems() {
|
|
159
162
|
return resolveIntegerPropValue(this.el, 'visibleItems', this.visibleItems, 1, Number.MAX_SAFE_INTEGER, 6);
|
|
160
163
|
}
|
|
@@ -559,7 +562,8 @@ export class SelectList {
|
|
|
559
562
|
.trim();
|
|
560
563
|
}
|
|
561
564
|
getFilteredOptions() {
|
|
562
|
-
|
|
565
|
+
// No modo remoto o servidor já filtrou: o termo serve só para o estado vazio.
|
|
566
|
+
const normalizedTerm = this.effectiveSearchMode === 'local' ? this.normalizeSearchText(this.searchTerm) : '';
|
|
563
567
|
const cacheKey = `${normalizedTerm}|${this.effectiveMultiple}|${this.selectAllLabel}|${this.unselectAllLabel}|${this.options.length}`;
|
|
564
568
|
if (this.options === this.filteredOptionsCacheSource &&
|
|
565
569
|
cacheKey === this.filteredOptionsCacheKey &&
|
|
@@ -801,6 +805,9 @@ export class SelectList {
|
|
|
801
805
|
} }, row.group));
|
|
802
806
|
}
|
|
803
807
|
getVirtualScrollStyle() {
|
|
808
|
+
// Durante o carregamento não há linhas virtuais: a altura acompanha o indicador.
|
|
809
|
+
if (this.loading)
|
|
810
|
+
return { overflowY: 'auto', overflowX: 'hidden' };
|
|
804
811
|
return {
|
|
805
812
|
height: `${this.getViewportHeight()}px`,
|
|
806
813
|
overflowY: 'auto',
|
|
@@ -859,10 +866,10 @@ export class SelectList {
|
|
|
859
866
|
return h("div", { style: this.getVirtualSpacerStyle() }, renderedRows);
|
|
860
867
|
}
|
|
861
868
|
renderLoading() {
|
|
862
|
-
return (h("div", { part: "loading", role: "status", "aria-live": "polite" }, h("slot", { name: "loading" }, h("br-loading", {
|
|
869
|
+
return (h("div", { part: "loading", role: "status", "aria-live": "polite" }, h("slot", { name: "loading" }, h("br-loading", { size: "small", label: "Pesquisando\u2026", labelPosition: "right" }))));
|
|
863
870
|
}
|
|
864
871
|
render() {
|
|
865
|
-
return (h(Host, { key: '
|
|
872
|
+
return (h(Host, { key: 'b374cf9ebd19771a1a1dfecc4a33f6447b59fba6' }, h("div", { key: '665a2c3efef778936ca27d376c48de3cbf38f685', class: this.getCssClassMap(), part: "list", tabIndex: -1, ref: (el) => (this.listElement = el), onScroll: this.handleScroll, style: this.getVirtualScrollStyle() }, this.loading ? this.renderLoading() : this.renderVirtualOptions())));
|
|
866
873
|
}
|
|
867
874
|
static get is() { return "br-select-list"; }
|
|
868
875
|
static get encapsulation() { return "shadow"; }
|
|
@@ -962,6 +969,36 @@ export class SelectList {
|
|
|
962
969
|
"attribute": "search-term",
|
|
963
970
|
"defaultValue": "''"
|
|
964
971
|
},
|
|
972
|
+
"searchMode": {
|
|
973
|
+
"type": "string",
|
|
974
|
+
"mutable": false,
|
|
975
|
+
"complexType": {
|
|
976
|
+
"original": "SelectSearchMode",
|
|
977
|
+
"resolved": "\"local\" | \"remote\"",
|
|
978
|
+
"references": {
|
|
979
|
+
"SelectSearchMode": {
|
|
980
|
+
"location": "import",
|
|
981
|
+
"path": "../select.types",
|
|
982
|
+
"id": "src/components/select/select.types.ts::SelectSearchMode",
|
|
983
|
+
"referenceLocation": "SelectSearchMode"
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
},
|
|
987
|
+
"required": false,
|
|
988
|
+
"optional": false,
|
|
989
|
+
"docs": {
|
|
990
|
+
"tags": [{
|
|
991
|
+
"name": "default",
|
|
992
|
+
"text": "'local'"
|
|
993
|
+
}],
|
|
994
|
+
"text": "Define se `searchTerm` filtra as op\u00E7\u00F5es (`local`) ou se as op\u00E7\u00F5es j\u00E1 chegam\nfiltradas pelo servidor (`remote`). Nos dois modos, um termo sem resultados\nexibe a mensagem de lista vazia. Valores inv\u00E1lidos usam `local`."
|
|
995
|
+
},
|
|
996
|
+
"getter": false,
|
|
997
|
+
"setter": false,
|
|
998
|
+
"reflect": false,
|
|
999
|
+
"attribute": "search-mode",
|
|
1000
|
+
"defaultValue": "'local'"
|
|
1001
|
+
},
|
|
965
1002
|
"loading": {
|
|
966
1003
|
"type": "boolean",
|
|
967
1004
|
"mutable": false,
|
|
@@ -7,18 +7,13 @@ import { findComposedOwner } from "../../../shared/utils/ownership";
|
|
|
7
7
|
import { resolveDensity } from "../../../shared/utils/props";
|
|
8
8
|
import { EMPTY_VALUE_WARNING, MISSING_VALUE_WARNING } from "../select.constants";
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Representa uma opção dentro do `br-select`. Use no slot padrão do componente.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
* - Define o valor de submissão (`value`) e o rótulo legível exibido para o usuário.
|
|
14
|
-
* - Identifica opcionalmente o grupo visual e semântico ao qual a opção pertence.
|
|
15
|
-
* - Exibe os estados de seleção (`selected`), desativação (`disabled`) e, no modo de seleção múltipla, o checkbox correspondente.
|
|
16
|
-
* - Suporta marcação com destaque textual correspondente aos filtros de busca aplicados.
|
|
12
|
+
* Defina `value` para o valor de formulário e `label` para o texto exibido. Use `selected` para marcar a opção como selecionada inicialmente e `disabled` para desabilitá-la. Para agrupamento, utilize `group`.
|
|
17
13
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* Para a documentação completa de design, consulte o [Design System do GovBR](https://www.gov.br/ds/components/select?tab=designer).
|
|
14
|
+
* ```html
|
|
15
|
+
* <br-select-option value="df" label="Distrito Federal"></br-select-option>
|
|
16
|
+
* ```
|
|
22
17
|
*
|
|
23
18
|
* @category Formulários, Seleção
|
|
24
19
|
* @status stable
|
|
@@ -106,7 +101,7 @@ export class SelectOption {
|
|
|
106
101
|
handleSelectedChange() {
|
|
107
102
|
this.brSelectOptionPropsChange.emit();
|
|
108
103
|
// Alterações programáticas de `selected` seguem o mesmo protocolo de
|
|
109
|
-
// interação e permitem que o select pai atualize seu modelo
|
|
104
|
+
// interação e permitem que o select pai atualize seu modelo principal.
|
|
110
105
|
this.emitStateChange();
|
|
111
106
|
}
|
|
112
107
|
/**
|
|
@@ -249,7 +244,7 @@ export class SelectOption {
|
|
|
249
244
|
return this.normalizeText(this.el.textContent || '');
|
|
250
245
|
}
|
|
251
246
|
render() {
|
|
252
|
-
return (h(Host, { key: '
|
|
247
|
+
return (h(Host, { key: 'e892cbbfcfeb38db24a7d3dab9615bb5460a7eb2', part: this.el.getAttribute('part') || 'option', exportparts: "checkbox:checkbox, checkbox:option-checkbox", "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.getAccessibleLabel(), "aria-selected": this.selected ? 'true' : 'false', role: "option", tabindex: "-1", onClickCapture: this.handleActivation, onKeyDown: this.handleKeyDown, onMouseEnter: () => {
|
|
253
248
|
this.el.dispatchEvent(new CustomEvent('brInternalSelectOptionHover', {
|
|
254
249
|
bubbles: true,
|
|
255
250
|
composed: true,
|
|
@@ -261,7 +256,7 @@ export class SelectOption {
|
|
|
261
256
|
composed: true,
|
|
262
257
|
detail: { label: this.getResolvedLabel(), value: this.getResolvedValue() },
|
|
263
258
|
}));
|
|
264
|
-
} }, h("br-item", { key: '
|
|
259
|
+
} }, h("br-item", { key: 'ce4ae4c45dbb4083c4544229f7fd08040d1cb0fc', class: this.getCssClassMap(), density: this.effectiveDensity, disabled: this.disabled, selected: this.selected }, this.showCheckbox && (h("br-checkbox", { key: '8d6e3da863b1ccd0a2f2f5dd41fda196fe6d83b6', exportparts: "input:checkbox, input:option-checkbox", slot: "start", checked: this.selected, disabled: true, indeterminate: this.indeterminate, name: this.getResolvedValue(), "aria-hidden": "true" })), h("span", { key: 'a0445a17529219be933e91d79b489560390f9e30', class: "br-select-option-label" }, h("slot", { key: '6885bf29055abc27c4c0a1cba5e8bd2e7d4abb2a' }, this.getResolvedLabel())))));
|
|
265
260
|
}
|
|
266
261
|
static get is() { return "br-select-option"; }
|
|
267
262
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
*,*::before,*::after{box-sizing:border-box}:host{line-height:var(--font-line-height-medium);-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}main{display:block}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace;font-size:1em}a{background-color:rgba(0,0,0,0)}b,strong{font-weight:bolder}small{font-size:80%}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:var(--font-line-height-medium);margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{appearance:none}::-webkit-file-upload-button{appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.d-none{display:none !important}@media(min-width: 576px){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}}[data-toggle=dropdown]+*{position:absolute}.dropdown{position:relative}.dropdown [data-toggle=dropdown]+*{box-shadow:var(--surface-shadow-sm);left:0;position:absolute;top:100%}.dropdown>.br-notification{left:auto;right:0}.dropdown .br-item{--color: var(--color-light);--color-rgb: var(--color-light-rgb);--text-color: var(--color-light);--interactive: var(--interactive-light);--interactive-rgb: var(--color-rgb);--visited: var(--visited-light);--hover: var(--hover-light);--pressed: var(--pressed-light);--focus-color: var(--focus-color-light);--focus: var(--focus-color-light);--item-padding-y: var(--spacing-scale-2x);background-color:var(--background-light);color:var(--color)}.dropdown .br-item:not(:last-child){border-bottom:1px solid var(--border-color)}.dropdown .br-item.selected{--color: var(--color-dark);--color-rgb: var(--color-dark-rgb);--text-color: var(--color-dark);--interactive: var(--interactive-dark);--interactive-rgb: var(--interactive-dark-rgb);--visited: var(--visited-dark);--hover: var(--hover-dark);--pressed: var(--pressed-dark);--focus-color: var(--focus-color-dark);--focus: var(--focus-color-dark)}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.align-items-center{align-items:center !important}.col,[class*=col-]{padding-left:calc(var(--grid-gutter)*.5);padding-right:calc(var(--grid-gutter)*.5);width:100%}.col{flex:1 0 0%;min-width:8.3333333333%}.col-auto{flex:0 0 auto;width:auto}.col-2{flex-basis:16.6666666667%;max-width:16.6666666667%}.container,.container-fluid,.container-lg{--grid-margin: var(--grid-portrait-margin);--grid-maxwidth: var(--grid-portrait-maxwidth);margin-left:auto;margin-right:auto;max-width:var(--grid-maxwidth);padding-left:var(--grid-margin);padding-right:var(--grid-margin);width:100%}.row{--grid-gutter: var(--grid-portrait-gutter);display:flex;flex-wrap:wrap;margin-left:calc(var(--grid-gutter)*-0.5);margin-right:calc(var(--grid-gutter)*-0.5)}@media(min-width: 576px){.container,.container-lg,.container-fluid{--grid-margin: var(--grid-tablet-margin)}.row{--grid-gutter: var(--grid-tablet-gutter)}.container{--grid-maxwidth: calc(var(--grid-breakpoint-sm) - var(--grid-tablet-margin))}.col-sm-4{flex-basis:33.3333333333%;max-width:33.3333333333%}}@media(min-width: 992px){.container,.container-lg,.container-fluid{--grid-margin: var(--grid-tablet-margin)}.row{--grid-gutter: var(--grid-tablet-gutter)}.container{--grid-maxwidth: calc(var(--grid-breakpoint-md) - var(--grid-tablet-margin))}}@media(min-width: 1280px){.container,.container-lg,.container-fluid{--grid-margin: var(--grid-desktop-margin)}.row{--grid-gutter: var(--grid-desktop-gutter)}.container,.container-lg{--grid-maxwidth: calc(var(--grid-breakpoint-lg) - var(--grid-desktop-margin))}.col-lg-3{flex-basis:25%;max-width:25%}}@media(min-width: 1600px){.container,.container-lg,.container-fluid{--grid-margin: var(--grid-tv-margin)}.row{--grid-gutter: var(--grid-tv-gutter)}.container,.container-lg{--grid-maxwidth: calc(var(--grid-breakpoint-xl) - var(--grid-tv-margin))}}.ease{animation-timing-function:cubic-bezier(0.25, 0.1, 0.25, 1)}.ease-out{animation-timing-function:cubic-bezier(0, 0, 0.58, 1)}.ease-in-out{animation-timing-function:cubic-bezier(0.42, 0, 0.58, 1)}.fast{animation-duration:var(--duration-fast)}.slow{animation-duration:var(--duration-slow)}.mt-1{margin-top:var(--spacing-scale-half) !important}.mr-1{margin-right:var(--spacing-scale-half) !important}.mb-1{margin-bottom:var(--spacing-scale-half) !important}.ml-1{margin-left:var(--spacing-scale-half) !important}.mx-3{margin-left:var(--spacing-scale-2x) !important;margin-right:var(--spacing-scale-2x) !important}.mb-4{margin-bottom:var(--spacing-scale-3x) !important}.ml-auto{margin-left:auto !important}.pt-half{padding-top:var(--spacing-scale-half) !important}@media(min-width: 576px){.ml-sm-0{margin-left:var(--spacing-scale-default) !important}}.highlight{background:var(--status-highlight-background) linear-gradient(var(--status-highlight-overlay), var(--status-highlight-overlay));color:var(--status-highlight-text);padding:0 var(--spacing-scale-half)}[disabled],.disabled{cursor:not-allowed;opacity:var(--disabled)}[disabled] *,.disabled *{pointer-events:none}fieldset[disabled]{opacity:1}.text-center{text-align:center !important}.text-right{text-align:right !important}.text-nowrap{white-space:nowrap !important}.text-uppercase{text-transform:uppercase !important}.text-bold{font-weight:700 !important}.text-base{font-size:var(--font-size-scale-base) !important}.text-down-01{font-size:var(--font-size-scale-down-01) !important}@media(min-width: 576px){.text-sm-center{text-align:center !important}.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}}p{color:var(--color);font-size:var(--font-size-scale-base);font-weight:var(--font-weight-regular);line-height:var(--font-line-height-medium);margin-bottom:var(--spacing-scale-2x);margin-top:0}p a{text-decoration:underline}@media(min-width: 576px){p{font-size:var(--font-size-scale-up-01)}}a{--focus-offset: var(--spacing-scale-half)}a:focus{outline:none}a.focus-visible,a:focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}a:not(:disabled):hover{background-image:linear-gradient(rgba(var(--interactive-rgb), var(--hover)), rgba(var(--interactive-rgb), var(--hover)))}a:not(:disabled):active{background-image:linear-gradient(rgba(var(--interactive-rgb), var(--pressed)), rgba(var(--interactive-rgb), var(--pressed)))}a{color:var(--interactive);text-decoration:none}.main-content a{text-decoration:underline}button{cursor:pointer}img{max-width:100%;vertical-align:middle}h2,.h2{color:var(--color);font-size:var(--font-size-scale-up-03);font-weight:var(--font-weight-semi-bold);line-height:var(--font-line-height-low);margin-bottom:var(--spacing-scale-2xh);margin-top:var(--spacing-scale-3xh);padding-bottom:var(--spacing-scale-2xh)}@media(min-width: 576px){.h2,h2{font-size:var(--font-size-scale-up-05);font-weight:var(--font-weight-regular)}}ul,ol{margin-bottom:var(--spacing-scale-2x);margin-top:0;padding:0 0 0 var(--spacing-scale-5x)}table{--table-background: var(--background);--table-color: var(--color);--table-border-color: var(--gray-20);--table-border-style: solid;--table-border-width: 1px;--table-hover: var(--color-rgb);--table-padding: var(--spacing-scale-3x);--table-font-weight: var(--font-weight-medium);--table-th-background: var(--background-alternative);--table-th-font-weight: var(--font-weight-semi-bold);--table-row-size: var(--spacing-scale-2x);border-collapse:collapse;width:100%}tr.selected,tr.is-selected{--color: var(--color-dark);--color-rgb: var(--color-dark-rgb);--text-color: var(--color-dark);--interactive: var(--interactive-dark);--interactive-rgb: var(--interactive-dark-rgb);--visited: var(--visited-dark);--hover: var(--hover-dark);--pressed: var(--pressed-dark);--focus-color: var(--focus-color-dark);--focus: var(--focus-color-dark)}label,.label{color:var(--color);font-size:var(--font-size-scale-base);font-weight:var(--font-weight-semi-bold);line-height:var(--font-line-height-medium);margin-bottom:var(--spacing-scale-half)}fieldset,.fieldset{border:var(--surface-width-none);margin-bottom:var(--spacing-scale-5x);margin-top:0;padding:0}legend,.legend{color:var(--color);font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-semi-bold);line-height:var(--font-line-height-low);margin-bottom:var(--spacing-scale-2x);margin-top:var(--spacing-scale-2x)}::placeholder,.placeholder{color:var(--color-light);font-size:var(--font-size-scale-base);font-style:italic;font-weight:var(--font-weight-regular);line-height:var(--font-line-height-medium);margin-bottom:var(--spacing-scale-half);margin-top:var(--spacing-scale-half);opacity:1}input,textarea,.input{color:var(--color-light);font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-medium);line-height:var(--font-line-height-low);margin-bottom:var(--spacing-scale-half)}pre,.pre{background:var(--gray-5);margin:var(--spacing-scale-2x) 0 var(--spacing-scale-4x);padding:var(--spacing-scale-2x)}*[data-toggle=collapse]:not(:disabled):hover{background-image:linear-gradient(rgba(var(--interactive-rgb), var(--hover)), rgba(var(--interactive-rgb), var(--hover)))}*[data-toggle=collapse]:focus{outline:none}*[data-toggle=collapse].focus-visible,*[data-toggle=collapse]:focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}@media(prefers-reduced-motion: reduce){:host,:host::before,:host::after,:host *,:host *::before,:host *::after{animation:none !important;scroll-behavior:auto !important;transition:none !important}}:host-context([data-wbc-reduced-motion=true])::before,:host-context([data-wbc-reduced-motion=true])::after,:host-context([data-wbc-reduced-motion=true]) *,:host-context([data-wbc-reduced-motion=true]) *::before,:host-context([data-wbc-reduced-motion=true]) *::after{animation:none !important;scroll-behavior:auto !important;transition:none !important}.br-select{--select-divider: 1px solid var(--color-secondary-04);--select-shadow: var(--surface-shadow-md)}.br-select .br-input input{padding-right:29px;text-overflow:ellipsis}.br-select .br-input input::after{bottom:0;padding:0 5px;position:absolute;right:0}.br-select{max-width:400px;min-width:100px;position:relative}.br-select .br-list{background:var(--bg-color);box-shadow:var(--select-shadow);display:none;margin-top:-2px;max-height:404px;overflow:auto;position:absolute;resize:none;width:100%;z-index:1}.br-select .br-list::-webkit-scrollbar{height:var(--spacing-scale-base);width:var(--spacing-scale-base)}.br-select .br-list::-webkit-scrollbar-track{background:var(--gray-10)}.br-select .br-list::-webkit-scrollbar-thumb{background:var(--gray-30)}.br-select .br-list:hover::-webkit-scrollbar-thumb{background:var(--gray-40)}.br-select .br-list:focus,.br-select .br-list:active{color:var(--color-secondary-09);outline:none}.br-select .br-list:hover::-webkit-scrollbar-thumb{background:var(--color-secondary-07)}.br-select .br-list[expanded]{display:block}.br-select .br-item{--color: var(--color-light);--color-rgb: var(--color-light-rgb);--text-color: var(--color-light);--interactive: var(--interactive-light);--interactive-rgb: var(--interactive-light-rgb);--visited: var(--visited-light);--hover: var(--hover-light);--pressed: var(--pressed-light);--focus-color: var(--focus-color-light);--focus: var(--focus-color-light);--item-padding-y: var(--spacing-scale-2x)}.br-select .br-item .content{padding:0}.br-select .br-item .br-checkbox,.br-select .br-item .br-radio{--item-padding-x: var(--spacing-scale-2x);--item-padding-y: var(--spacing-scale-2x)}.br-select .br-item .br-checkbox input:hover:not(:disabled)+label::before,.br-select .br-item .br-radio input:hover:not(:disabled)+label::before{background-image:none}.br-select .br-item .br-checkbox input+label,.br-select .br-item .br-radio input+label{padding-left:calc(var(--checkbox-padding) + var(--checkbox-size) + var(--item-padding-x))}.br-select .br-item .br-radio input+label{color:var(--text-color);display:block;height:auto;min-height:0;padding:var(--item-padding)}.br-select .br-item .br-radio input+label::before,.br-select .br-item .br-radio input+label::after{content:none}.br-select .br-item:not(:last-child){border-bottom:var(--select-divider)}.br-select .br-item:not([disabled]){--focus-offset: calc(var(--spacing-scale-half) * -1)}.br-select .br-item:not([disabled]):focus{outline:none}.br-select .br-item:not([disabled]).focus-visible,.br-select .br-item:not([disabled]):focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}.br-select .br-item:not([disabled]):not(:disabled):hover{background-image:linear-gradient(rgba(var(--color-rgb), var(--hover)), rgba(var(--color-rgb), var(--hover)))}.br-select .br-item.selected,.br-select .br-item[selected]{--color: var(--color-dark);--color-rgb: var(--color-dark-rgb);--text-color: var(--color-dark);--interactive: var(--interactive-dark);--interactive-rgb: var(--interactive-dark-rgb);--visited: var(--visited-dark);--hover: var(--hover-dark);--pressed: var(--pressed-dark);--focus-color: var(--focus-color-dark);--focus: var(--focus-color-dark)}.br-select .br-item.selected:focus,.br-select .br-item[selected]:focus{outline:none}.br-select .br-item.selected.focus-visible,.br-select .br-item.selected:focus-visible,.br-select .br-item[selected].focus-visible,.br-select .br-item[selected]:focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}.br-select .br-item.selected:not(:disabled):hover,.br-select .br-item[selected]:not(:disabled):hover{background-image:linear-gradient(rgba(var(--color-rgb), var(--hover)), rgba(var(--color-rgb), var(--hover)))}.br-select .br-item.disabled{line-height:calc(var(--font-line-height-high)*2);padding-left:calc(var(--item-padding) + var(--spacing-scale-base))}.br-select.inverted .br-input,.br-select.inverted .br-input label,.br-select.dark-mode .br-input,.br-select.dark-mode .br-input label{--color: var(--color-dark);--focus-color: var(--focus-color-dark)}:host{box-sizing:border-box;display:block;max-width:100%;width:100%}.br-select{box-sizing:border-box;min-width:0;position:relative;width:100%;max-width:100%}:host([multiple]) .br-select{min-width:0}
|
|
1
|
+
*,*::before,*::after{box-sizing:border-box}:host{line-height:var(--font-line-height-medium);-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}main{display:block}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace;font-size:1em}a{background-color:rgba(0,0,0,0)}b,strong{font-weight:bolder}small{font-size:80%}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:var(--font-line-height-medium);margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{appearance:none}::-webkit-file-upload-button{appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.d-none{display:none !important}@media(min-width: 576px){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}}[data-toggle=dropdown]+*{position:absolute}.dropdown{position:relative}.dropdown [data-toggle=dropdown]+*{box-shadow:var(--surface-shadow-sm);left:0;position:absolute;top:100%}.dropdown>.br-notification{left:auto;right:0}.dropdown .br-item{--color: var(--color-light);--color-rgb: var(--color-light-rgb);--text-color: var(--color-light);--interactive: var(--interactive-light);--interactive-rgb: var(--color-rgb);--visited: var(--visited-light);--hover: var(--hover-light);--pressed: var(--pressed-light);--focus-color: var(--focus-color-light);--focus: var(--focus-color-light);--item-padding-y: var(--spacing-scale-2x);background-color:var(--background-light);color:var(--color)}.dropdown .br-item:not(:last-child){border-bottom:1px solid var(--border-color)}.dropdown .br-item.selected{--color: var(--color-dark);--color-rgb: var(--color-dark-rgb);--text-color: var(--color-dark);--interactive: var(--interactive-dark);--interactive-rgb: var(--interactive-dark-rgb);--visited: var(--visited-dark);--hover: var(--hover-dark);--pressed: var(--pressed-dark);--focus-color: var(--focus-color-dark);--focus: var(--focus-color-dark)}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.align-items-center{align-items:center !important}.col,[class*=col-]{padding-left:calc(var(--grid-gutter)*.5);padding-right:calc(var(--grid-gutter)*.5);width:100%}.col{flex:1 0 0%;min-width:8.3333333333%}.col-auto{flex:0 0 auto;width:auto}.col-2{flex-basis:16.6666666667%;max-width:16.6666666667%}.container,.container-fluid,.container-lg{--grid-margin: var(--grid-portrait-margin);--grid-maxwidth: var(--grid-portrait-maxwidth);margin-left:auto;margin-right:auto;max-width:var(--grid-maxwidth);padding-left:var(--grid-margin);padding-right:var(--grid-margin);width:100%}.row{--grid-gutter: var(--grid-portrait-gutter);display:flex;flex-wrap:wrap;margin-left:calc(var(--grid-gutter)*-0.5);margin-right:calc(var(--grid-gutter)*-0.5)}@media(min-width: 576px){.container,.container-lg,.container-fluid{--grid-margin: var(--grid-tablet-margin)}.row{--grid-gutter: var(--grid-tablet-gutter)}.container{--grid-maxwidth: calc(var(--grid-breakpoint-sm) - var(--grid-tablet-margin))}.col-sm-4{flex-basis:33.3333333333%;max-width:33.3333333333%}}@media(min-width: 992px){.container,.container-lg,.container-fluid{--grid-margin: var(--grid-tablet-margin)}.row{--grid-gutter: var(--grid-tablet-gutter)}.container{--grid-maxwidth: calc(var(--grid-breakpoint-md) - var(--grid-tablet-margin))}}@media(min-width: 1280px){.container,.container-lg,.container-fluid{--grid-margin: var(--grid-desktop-margin)}.row{--grid-gutter: var(--grid-desktop-gutter)}.container,.container-lg{--grid-maxwidth: calc(var(--grid-breakpoint-lg) - var(--grid-desktop-margin))}.col-lg-3{flex-basis:25%;max-width:25%}}@media(min-width: 1600px){.container,.container-lg,.container-fluid{--grid-margin: var(--grid-tv-margin)}.row{--grid-gutter: var(--grid-tv-gutter)}.container,.container-lg{--grid-maxwidth: calc(var(--grid-breakpoint-xl) - var(--grid-tv-margin))}}.ease{animation-timing-function:cubic-bezier(0.25, 0.1, 0.25, 1)}.ease-out{animation-timing-function:cubic-bezier(0, 0, 0.58, 1)}.ease-in-out{animation-timing-function:cubic-bezier(0.42, 0, 0.58, 1)}.fast{animation-duration:var(--duration-fast)}.slow{animation-duration:var(--duration-slow)}.mt-1{margin-top:var(--spacing-scale-half) !important}.mr-1{margin-right:var(--spacing-scale-half) !important}.mb-1{margin-bottom:var(--spacing-scale-half) !important}.ml-1{margin-left:var(--spacing-scale-half) !important}.mx-3{margin-left:var(--spacing-scale-2x) !important;margin-right:var(--spacing-scale-2x) !important}.mb-4{margin-bottom:var(--spacing-scale-3x) !important}.ml-auto{margin-left:auto !important}.pt-half{padding-top:var(--spacing-scale-half) !important}@media(min-width: 576px){.ml-sm-0{margin-left:var(--spacing-scale-default) !important}}.highlight{background:var(--status-highlight-background) linear-gradient(var(--status-highlight-overlay), var(--status-highlight-overlay));color:var(--status-highlight-text);padding:0 var(--spacing-scale-half)}[disabled],.disabled{cursor:not-allowed;opacity:var(--disabled)}[disabled] *,.disabled *{pointer-events:none}fieldset[disabled]{opacity:1}.text-center{text-align:center !important}.text-right{text-align:right !important}.text-nowrap{white-space:nowrap !important}.text-uppercase{text-transform:uppercase !important}.text-bold{font-weight:700 !important}.text-base{font-size:var(--font-size-scale-base) !important}.text-down-01{font-size:var(--font-size-scale-down-01) !important}@media(min-width: 576px){.text-sm-center{text-align:center !important}.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}}p{color:var(--color);font-size:var(--font-size-scale-base);font-weight:var(--font-weight-regular);line-height:var(--font-line-height-medium);margin-bottom:var(--spacing-scale-2x);margin-top:0}p a{text-decoration:underline}@media(min-width: 576px){p{font-size:var(--font-size-scale-up-01)}}a{--focus-offset: var(--spacing-scale-half)}a:focus{outline:none}a.focus-visible,a:focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}a:not(:disabled):hover{background-image:linear-gradient(rgba(var(--interactive-rgb), var(--hover)), rgba(var(--interactive-rgb), var(--hover)))}a:not(:disabled):active{background-image:linear-gradient(rgba(var(--interactive-rgb), var(--pressed)), rgba(var(--interactive-rgb), var(--pressed)))}a{color:var(--interactive);text-decoration:none}.main-content a{text-decoration:underline}button{cursor:pointer}img{max-width:100%;vertical-align:middle}h2,.h2{color:var(--color);font-size:var(--font-size-scale-up-03);font-weight:var(--font-weight-semi-bold);line-height:var(--font-line-height-low);margin-bottom:var(--spacing-scale-2xh);margin-top:var(--spacing-scale-3xh);padding-bottom:var(--spacing-scale-2xh)}@media(min-width: 576px){.h2,h2{font-size:var(--font-size-scale-up-05);font-weight:var(--font-weight-regular)}}ul,ol{margin-bottom:var(--spacing-scale-2x);margin-top:0;padding:0 0 0 var(--spacing-scale-5x)}table{--table-background: var(--background);--table-color: var(--color);--table-border-color: var(--gray-20);--table-border-style: solid;--table-border-width: 1px;--table-hover: var(--color-rgb);--table-padding: var(--spacing-scale-3x);--table-font-weight: var(--font-weight-medium);--table-th-background: var(--background-alternative);--table-th-font-weight: var(--font-weight-semi-bold);--table-row-size: var(--spacing-scale-2x);border-collapse:collapse;width:100%}tr.selected,tr.is-selected{--color: var(--color-dark);--color-rgb: var(--color-dark-rgb);--text-color: var(--color-dark);--interactive: var(--interactive-dark);--interactive-rgb: var(--interactive-dark-rgb);--visited: var(--visited-dark);--hover: var(--hover-dark);--pressed: var(--pressed-dark);--focus-color: var(--focus-color-dark);--focus: var(--focus-color-dark)}label,.label{color:var(--color);font-size:var(--font-size-scale-base);font-weight:var(--font-weight-semi-bold);line-height:var(--font-line-height-medium);margin-bottom:var(--spacing-scale-half)}fieldset,.fieldset{border:var(--surface-width-none);margin-bottom:var(--spacing-scale-5x);margin-top:0;padding:0}legend,.legend{color:var(--color);font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-semi-bold);line-height:var(--font-line-height-low);margin-bottom:var(--spacing-scale-2x);margin-top:var(--spacing-scale-2x)}::placeholder,.placeholder{color:var(--color-light);font-size:var(--font-size-scale-base);font-style:italic;font-weight:var(--font-weight-regular);line-height:var(--font-line-height-medium);margin-bottom:var(--spacing-scale-half);margin-top:var(--spacing-scale-half);opacity:1}input,textarea,.input{color:var(--color-light);font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-medium);line-height:var(--font-line-height-low);margin-bottom:var(--spacing-scale-half)}pre,.pre{background:var(--gray-5);margin:var(--spacing-scale-2x) 0 var(--spacing-scale-4x);padding:var(--spacing-scale-2x)}*[data-toggle=collapse]:not(:disabled):hover{background-image:linear-gradient(rgba(var(--interactive-rgb), var(--hover)), rgba(var(--interactive-rgb), var(--hover)))}*[data-toggle=collapse]:focus{outline:none}*[data-toggle=collapse].focus-visible,*[data-toggle=collapse]:focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}@media(prefers-reduced-motion: reduce){:host,:host::before,:host::after,:host *,:host *::before,:host *::after{animation:none !important;scroll-behavior:auto !important;transition:none !important}}:host-context([data-wbc-reduced-motion=true])::before,:host-context([data-wbc-reduced-motion=true])::after,:host-context([data-wbc-reduced-motion=true]) *,:host-context([data-wbc-reduced-motion=true]) *::before,:host-context([data-wbc-reduced-motion=true]) *::after{animation:none !important;scroll-behavior:auto !important;transition:none !important}.br-select{--select-divider: 1px solid var(--color-secondary-04);--select-shadow: var(--surface-shadow-md)}.br-select .br-input input{padding-right:29px;text-overflow:ellipsis}.br-select .br-input input::after{bottom:0;padding:0 5px;position:absolute;right:0}.br-select{max-width:400px;min-width:100px;position:relative}.br-select .br-list{background:var(--bg-color);box-shadow:var(--select-shadow);display:none;margin-top:-2px;max-height:404px;overflow:auto;position:absolute;resize:none;width:100%;z-index:1}.br-select .br-list::-webkit-scrollbar{height:var(--spacing-scale-base);width:var(--spacing-scale-base)}.br-select .br-list::-webkit-scrollbar-track{background:var(--gray-10)}.br-select .br-list::-webkit-scrollbar-thumb{background:var(--gray-30)}.br-select .br-list:hover::-webkit-scrollbar-thumb{background:var(--gray-40)}.br-select .br-list:focus,.br-select .br-list:active{color:var(--color-secondary-09);outline:none}.br-select .br-list:hover::-webkit-scrollbar-thumb{background:var(--color-secondary-07)}.br-select .br-list[expanded]{display:block}.br-select .br-item{--color: var(--color-light);--color-rgb: var(--color-light-rgb);--text-color: var(--color-light);--interactive: var(--interactive-light);--interactive-rgb: var(--interactive-light-rgb);--visited: var(--visited-light);--hover: var(--hover-light);--pressed: var(--pressed-light);--focus-color: var(--focus-color-light);--focus: var(--focus-color-light);--item-padding-y: var(--spacing-scale-2x)}.br-select .br-item .content{padding:0}.br-select .br-item .br-checkbox,.br-select .br-item .br-radio{--item-padding-x: var(--spacing-scale-2x);--item-padding-y: var(--spacing-scale-2x)}.br-select .br-item .br-checkbox input:hover:not(:disabled)+label::before,.br-select .br-item .br-radio input:hover:not(:disabled)+label::before{background-image:none}.br-select .br-item .br-checkbox input+label,.br-select .br-item .br-radio input+label{padding-left:calc(var(--checkbox-padding) + var(--checkbox-size) + var(--item-padding-x))}.br-select .br-item .br-radio input+label{color:var(--text-color);display:block;height:auto;min-height:0;padding:var(--item-padding)}.br-select .br-item .br-radio input+label::before,.br-select .br-item .br-radio input+label::after{content:none}.br-select .br-item:not(:last-child){border-bottom:var(--select-divider)}.br-select .br-item:not([disabled]){--focus-offset: calc(var(--spacing-scale-half) * -1)}.br-select .br-item:not([disabled]):focus{outline:none}.br-select .br-item:not([disabled]).focus-visible,.br-select .br-item:not([disabled]):focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}.br-select .br-item:not([disabled]):not(:disabled):hover{background-image:linear-gradient(rgba(var(--color-rgb), var(--hover)), rgba(var(--color-rgb), var(--hover)))}.br-select .br-item.selected,.br-select .br-item[selected]{--color: var(--color-dark);--color-rgb: var(--color-dark-rgb);--text-color: var(--color-dark);--interactive: var(--interactive-dark);--interactive-rgb: var(--interactive-dark-rgb);--visited: var(--visited-dark);--hover: var(--hover-dark);--pressed: var(--pressed-dark);--focus-color: var(--focus-color-dark);--focus: var(--focus-color-dark)}.br-select .br-item.selected:focus,.br-select .br-item[selected]:focus{outline:none}.br-select .br-item.selected.focus-visible,.br-select .br-item.selected:focus-visible,.br-select .br-item[selected].focus-visible,.br-select .br-item[selected]:focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}.br-select .br-item.selected:not(:disabled):hover,.br-select .br-item[selected]:not(:disabled):hover{background-image:linear-gradient(rgba(var(--color-rgb), var(--hover)), rgba(var(--color-rgb), var(--hover)))}.br-select .br-item.disabled{line-height:calc(var(--font-line-height-high)*2);padding-left:calc(var(--item-padding) + var(--spacing-scale-base))}.br-select.inverted .br-input,.br-select.inverted .br-input label,.br-select.dark-mode .br-input,.br-select.dark-mode .br-input label{--color: var(--color-dark);--focus-color: var(--focus-color-dark)}:host{box-sizing:border-box;display:block;max-width:100%;width:100%}.br-select{box-sizing:border-box;min-width:0;position:relative;width:100%;max-width:100%}:host([hide-search-icon]) br-select-input::part(icon){display:none}:host([multiple]) .br-select{min-width:0}
|
|
@@ -16,109 +16,39 @@ import { filterSelectOptions, SELECT_ALL_OPTION_VALUE, transitionAllSelection, t
|
|
|
16
16
|
const SELECT_SEARCH_MODES = ['local', 'remote'];
|
|
17
17
|
const SELECT_AUTOCOMPLETE_VALUES = ['on', 'off'];
|
|
18
18
|
/**
|
|
19
|
-
* O
|
|
19
|
+
* O `br-select` permite escolher uma ou mais opções em uma lista suspensa expansível com suporte a busca e virtualização.
|
|
20
20
|
*
|
|
21
|
-
*
|
|
21
|
+
* Declare as opções com `<br-select-option>` no slot padrão, ou forneça os dados dinamicamente com o método `setOptions()`. Para seleção múltipla, use `multiple`. Para habilitar busca por digitação, use `filterable`.
|
|
22
22
|
*
|
|
23
|
-
*
|
|
24
|
-
* -
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* -
|
|
23
|
+
* ```html
|
|
24
|
+
* <br-select label="Estado" placeholder="Selecione um estado">
|
|
25
|
+
* <br-select-option value="df" label="Distrito Federal"></br-select-option>
|
|
26
|
+
* <br-select-option value="sp" label="São Paulo"></br-select-option>
|
|
27
|
+
* <br-select-option value="rj" label="Rio de Janeiro"></br-select-option>
|
|
28
|
+
* </br-select>
|
|
29
|
+
* ```
|
|
29
30
|
*
|
|
30
|
-
*
|
|
31
|
+
* Em formulários HTML, o componente integra-se nativamente via `ElementInternals`, enviando os valores selecionados no submit e validando campos obrigatórios com `required`.
|
|
31
32
|
*
|
|
32
|
-
*
|
|
33
|
-
* Ao receber foco, o campo abre a lista sem alterar a seleção atual.
|
|
33
|
+
* ### Quando usar
|
|
34
34
|
*
|
|
35
|
-
* -
|
|
36
|
-
* -
|
|
37
|
-
* -
|
|
38
|
-
* - **Espaço:** confirma a opção destacada em modo não filtrável; em modo filtrável, insere um espaço no campo de busca.
|
|
39
|
-
* - **Escape:** fecha a lista, remove o destaque e devolve o foco ao campo.
|
|
40
|
-
* - **Tab:** fecha a lista e deixa o navegador mover o foco para o próximo controle, sem alterar a seleção implicitamente.
|
|
41
|
-
* - **Busca incremental:** em modo não filtrável, caracteres consecutivos destacam a primeira opção habilitada correspondente; em modo filtrável, a digitação filtra a lista.
|
|
42
|
-
* - **Alt+ArrowDown / Alt+ArrowUp:** abre ou fecha a lista sem alterar a seleção.
|
|
35
|
+
* - Listas com 5 ou mais opções que ocupariam muito espaço visível se exibidas abertas.
|
|
36
|
+
* - Seleção que exige filtro ou busca por digitação.
|
|
37
|
+
* - Carregamento dinâmico ou remoto de opções a partir de uma API (`search-mode="remote"`).
|
|
43
38
|
*
|
|
44
|
-
* ### Quando
|
|
39
|
+
* ### Quando evitar
|
|
45
40
|
*
|
|
46
|
-
* -
|
|
47
|
-
*
|
|
48
|
-
* - For necessário filtrar opções por texto (digitação em lista longa).
|
|
49
|
-
* - As opções forem carregadas dinamicamente de uma API externa (busca remota/paginada).
|
|
50
|
-
* - O espaço no leiaute for restrito e exigir um controle compacto e expansível.
|
|
51
|
-
* - **Evite e prefira outro componente quando:**
|
|
52
|
-
* - Houver poucas opções fixas (de 2 a 4 opções mutuamente exclusivas): prefira `br-radio` ou `br-radio-group` para manter as alternativas imediatamente visíveis.
|
|
53
|
-
* - Houver uma escolha binária (sim/não, ativo/inativo): prefira `br-switch` ou `br-checkbox`.
|
|
54
|
-
* - Houver seleção múltipla com até 4 alternativas: prefira `br-checkbox` ou um grupo de checkboxes visíveis.
|
|
41
|
+
* - Poucas opções fixas (2 a 4 opções): use `br-radio` ou `br-radio-group`.
|
|
42
|
+
* - Escolha simples de sim/não: use `br-switch` ou `br-checkbox`.
|
|
55
43
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* O ecossistema do Select é composto pelo elemento principal orquestrador e três subcomponentes especializados:
|
|
59
|
-
*
|
|
60
|
-
* | Subcomponente | Papel | Regra de uso |
|
|
61
|
-
* | --- | --- | --- |
|
|
62
|
-
* | `br-select` | **Orquestrador principal.** Gerencia o valor, ciclo de vida, acessibilidade, busca, formulário e renderização dos elementos internos. | Deve ser o único componente diretamente instanciado no template da aplicação. |
|
|
63
|
-
* | `br-select-input` | **Campo de acionamento.** Exibe o valor selecionado, o rótulo (`label`), o campo de busca/digitação e o botão de expandir/recolher. | Coordenado automaticamente pelo `br-select`; utilize isoladamente apenas em composições arquiteturais avançadas. |
|
|
64
|
-
* | `br-select-list` | **Lista suspensa virtualizada.** Contêiner flutuante que renderiza as opções de forma otimizada com suporte a rolagem e virtualização. | Gerenciada exclusivamente pelo `br-select`; não deve ser usada como controle autônomo. |
|
|
65
|
-
* | `br-select-option` | **Item individual de opção.** Representa um valor selecionável, exibindo texto, estado de seleção e checkbox/radio associado. | Deve ser declarado dentro do slot padrão do `br-select` para cada opção desejada. |
|
|
66
|
-
*
|
|
67
|
-
* Além dos subcomponentes, o `br-select` oferece slots dedicados:
|
|
68
|
-
* - `default`: Slot principal onde são passados os elementos `br-select-option`.
|
|
69
|
-
* - `feedback`: Slot para exibição de mensagens de validação (ex.: `br-message`).
|
|
70
|
-
* - `loading`: Slot para indicador de carregamento durante busca remota.
|
|
71
|
-
* - `validation-loading`: Slot para indicador visual durante validação assíncrona.
|
|
72
|
-
*
|
|
73
|
-
* ### Como fornecer opções
|
|
74
|
-
*
|
|
75
|
-
* O `br-select` possui uma API declarativa canônica e uma API imperativa para atualizações dinâmicas:
|
|
76
|
-
*
|
|
77
|
-
* 1. **Slot com `br-select-option`:** é a forma declarativa canônica para código novo. O pai lê os atributos e o conteúdo de cada opção e os transforma em dados para a lista. Em frameworks, a coleção também pode ser renderizada como vários elementos `br-select-option`.
|
|
78
|
-
* 2. **Método `setOptions()`:** substitui a coleção de forma imperativa e deve ser reservado para dados dinâmicos, especialmente respostas de busca remota. A lista recebe os objetos e cria internamente somente a janela visível de opções.
|
|
79
|
-
*
|
|
80
|
-
* `br-select-input` e `br-select-list` não substituem essas fontes. Eles são peças internas da composição: o primeiro controla o campo de acionamento e busca; o segundo recebe a coleção normalizada e renderiza a lista virtualizada.
|
|
81
|
-
*
|
|
82
|
-
* Evite misturar slot e dados imperativos sem necessidade. Na inicialização, opções declaradas no slot têm precedência quando existem. Depois que `options` é alterada ou `setOptions()` é chamado, a coleção imperativa passa a ser a fonte de dados e alterações posteriores no slot não são sincronizadas.
|
|
83
|
-
*
|
|
84
|
-
* A prop `options` é uma API legada e está depreciada. Ela continua funcionando apenas para preservar compatibilidade: no HTML, recebe uma string JSON; em JavaScript e frameworks, recebe um array por property binding. Não a adote em código novo; use `br-select-option` ou, para respostas dinâmicas/remotas, `setOptions()`.
|
|
85
|
-
*
|
|
86
|
-
* Cada objeto deve conter `value` string e pode conter `label`, `selected`, `disabled`, `indeterminate` e `content`. `content` é renderizado como HTML na lista; não use esse campo com conteúdo não confiável.
|
|
87
|
-
*
|
|
88
|
-
* ### O Conceito "Lego" e a Diferença entre os Componentes {#conceito-lego}
|
|
89
|
-
*
|
|
90
|
-
* O ecossistema de seleção do GovBR-DS foi projetado seguindo o **conceito de peças de Lego**: modular, flexível e combinável:
|
|
91
|
-
*
|
|
92
|
-
* 1. **`br-select` (Componente Principal / Modelo Pronto):**
|
|
93
|
-
* É o **componente principal**. Já vem montado com todas as peças essenciais integradas: o acionador (`br-select-input`), a lista flutuante virtualizada (`br-select-list`), a navegação por teclado e a integração nativa com formulários (`formAssociated`). Na quase totalidade das aplicações (99% dos casos), você deve usar apenas `<br-select>`.
|
|
94
|
-
*
|
|
95
|
-
* 2. **`br-select-option` (Peça de Conteúdo):**
|
|
96
|
-
* É a peça de Lego que você encaixa diretamente no slot padrão do `<br-select>` para definir cada valor selecionável.
|
|
97
|
-
*
|
|
98
|
-
* 3. **`br-select-input` e `br-select-list` (Subcomponentes Internos):**
|
|
99
|
-
* São as peças internas que formam a estrutura do `br-select`. No uso comum, **não devem ser declarados manualmente**, pois o `br-select` já os instancia e os sincroniza automaticamente.
|
|
100
|
-
*
|
|
101
|
-
* #### Quando usar apenas `<br-select>`?
|
|
102
|
-
* Use apenas `<br-select>` em quase todos os fluxos. Para opções fixas, declare os itens `<br-select-option>` no slot padrão; para opções dinâmicas, alimente a coleção com `setOptions()`. A prop `options` permanece disponível somente para compatibilidade legada.
|
|
103
|
-
*
|
|
104
|
-
* #### Quando montar os componentes separadamente?
|
|
105
|
-
* A montagem separada das peças avulsas de Lego (`br-select-input` + `br-select-list` + `br-select-option`) destina-se exclusivamente a **composições arquiteturais avançadas**, onde o leiaute exige desacoplar fisicamente o campo de acionamento da lista suspensa (ex.: campo de busca fixo na barra superior e a lista exibida dentro de um drawer ou modal lateral). Nesse caso, a aplicação precisa implementar manualmente a sincronização de foco, abertura, navegação por teclado e repasse de valor ao formulário.
|
|
106
|
-
*
|
|
107
|
-
* ### Como os subcomponentes se relacionam
|
|
108
|
-
*
|
|
109
|
-
* A arquitetura do `br-select` segue o padrão de **orquestrador centralizado**:
|
|
110
|
-
* 1. **O componente pai coordena o estado:** A aplicação declara o `<br-select>` com múltiplos `<br-select-option>` filhos ou usa `setOptions()` para dados dinâmicos. O `br-select` projeta internamente o `<br-select-input>` e a `<br-select-list>`, garantindo sincronia total de foco, estados de abertura, termos pesquisados e eventos. A prop `options` não é uma alternativa para código novo; existe somente para compatibilidade legada.
|
|
111
|
-
* 2. **Evite montagem manual desarticulada:** Tentar declarar manualmente `br-select-input` e `br-select-list` fora do `br-select` quebra as relações de acessibilidade WAI-ARIA (combobox, controles expandidos, aria-activedescendant) e desvincula o controle da validação nativa de formulários (`ElementInternals`).
|
|
112
|
-
* 3. **Comunicação por eventos:** Para busca remota ou resposta a seleção, a aplicação escuta os eventos disparados diretamente pelo `br-select` (`brSearch`, `change`, `input`), sem precisar interceptar nós internos da lista ou do campo de texto.
|
|
113
|
-
*
|
|
114
|
-
* Para a documentação completa de design, incluindo diretrizes de acessibilidade e especificações visuais, consulte o [Design System do GovBR](https://www.gov.br/ds/components/select?tab=designer).
|
|
44
|
+
* Consulte as [diretrizes de design do GovBR](https://www.gov.br/ds/components/select?tab=designer).
|
|
115
45
|
*
|
|
116
46
|
* @category Formulários, Seleção
|
|
117
47
|
* @status stable
|
|
118
48
|
* @slot default - Opções declaradas com elementos br-select-option.
|
|
119
49
|
* @slot feedback - Mensagem de validação, normalmente um br-message.
|
|
120
50
|
* @slot validation-loading - Indicador exibido durante validação assíncrona.
|
|
121
|
-
* @slot loading - Indicador exibido
|
|
51
|
+
* @slot loading - Indicador exibido na lista enquanto `loading` está ativo. Padrão: spinner com o texto "Pesquisando…"; aceita texto, imagem ou qualquer HTML.
|
|
122
52
|
*
|
|
123
53
|
* @part container - Contêiner visual principal do select.
|
|
124
54
|
* @part input - Campo de seleção e busca.
|
|
@@ -129,6 +59,7 @@ const SELECT_AUTOCOMPLETE_VALUES = ['on', 'off'];
|
|
|
129
59
|
* @part input-icon - Ícone do campo.
|
|
130
60
|
* @part input-action - Botão de abertura e fechamento.
|
|
131
61
|
* @part input-action-button - Botão interno da ação.
|
|
62
|
+
* @part input-clear - Botão de limpar o termo digitado durante a busca.
|
|
132
63
|
* @part list - Lista de opções.
|
|
133
64
|
* @part option - Opção individual.
|
|
134
65
|
* @part option-group - Cabeçalho visual de um grupo de opções.
|
|
@@ -264,24 +195,36 @@ export class Select {
|
|
|
264
195
|
this.filterable = true;
|
|
265
196
|
/**
|
|
266
197
|
* Define se as opções são filtradas localmente ou fornecidas por uma busca remota.
|
|
267
|
-
* Em `remote`, o componente emite `brSelectSearch
|
|
268
|
-
*
|
|
198
|
+
* Em `remote`, o componente emite `brSelectSearch` e exibe as opções recebidas
|
|
199
|
+
* sem filtrá-las de novo pelo termo digitado; a aplicação deve buscar, validar e
|
|
200
|
+
* aplicar a resposta com `setOptions()` ou re-renderizando os `br-select-option`.
|
|
201
|
+
* A seleção é preservada mesmo quando não aparece na resposta seguinte.
|
|
269
202
|
* @default 'local'
|
|
270
203
|
*/
|
|
271
204
|
this.searchMode = 'local';
|
|
272
205
|
/**
|
|
273
206
|
* Indica que uma busca remota de opções está pendente.
|
|
274
|
-
* Enquanto ativo,
|
|
275
|
-
*
|
|
207
|
+
* Enquanto ativo, a lista exibe o slot `loading` (padrão: "Pesquisando…") e novas
|
|
208
|
+
* opções não podem ser selecionadas; a aplicação continua responsável por
|
|
209
|
+
* debounce, cancelamento, erros e autenticação.
|
|
276
210
|
* @default false
|
|
277
211
|
*/
|
|
278
212
|
this.loading = false;
|
|
279
213
|
/**
|
|
280
|
-
* Exibe o
|
|
214
|
+
* Exibe a lupa mesmo quando o select não é filtrável; selects com `filterable`
|
|
215
|
+
* já a exibem. A lupa é omitida quando o campo é estreito demais (menos de
|
|
216
|
+
* 128px) para comportar lupa, valor e seta.
|
|
281
217
|
*
|
|
282
218
|
* @default false
|
|
283
219
|
*/
|
|
284
220
|
this.showSearchIcon = false;
|
|
221
|
+
/**
|
|
222
|
+
* Oculta a lupa mesmo quando `filterable` está ativo, sem desabilitar a busca.
|
|
223
|
+
* Tem precedência visual sobre `showSearchIcon` e não altera o comportamento padrão.
|
|
224
|
+
*
|
|
225
|
+
* @default false
|
|
226
|
+
*/
|
|
227
|
+
this.hideSearchIcon = false;
|
|
285
228
|
/**
|
|
286
229
|
* Rótulo apresentado quando todas as opções já estão selecionadas no modo múltiplo.
|
|
287
230
|
*
|
|
@@ -401,6 +344,13 @@ export class Select {
|
|
|
401
344
|
get effectiveOverscan() {
|
|
402
345
|
return resolveIntegerPropValue(this.el, 'overscan', this.overscan, 0, Number.MAX_SAFE_INTEGER, 1);
|
|
403
346
|
}
|
|
347
|
+
/**
|
|
348
|
+
* Termo repassado à lista. Ela só filtra no modo local; no remoto, usa o termo
|
|
349
|
+
* apenas para exibir a mensagem de lista vazia.
|
|
350
|
+
*/
|
|
351
|
+
get listSearchTerm() {
|
|
352
|
+
return this.filterable ? this.searchTerm : '';
|
|
353
|
+
}
|
|
404
354
|
get effectiveSearchMode() {
|
|
405
355
|
return resolveAllowedPropValue(this.el, 'searchMode', this.searchMode, SELECT_SEARCH_MODES, 'local');
|
|
406
356
|
}
|
|
@@ -627,7 +577,7 @@ export class Select {
|
|
|
627
577
|
* alcance a lista interna. Isso evita depender apenas da remoção/atualização
|
|
628
578
|
* do atributo `search-term` no custom element.
|
|
629
579
|
*/
|
|
630
|
-
void this.getSelectListController()?.setSearchTerm?.(
|
|
580
|
+
void this.getSelectListController()?.setSearchTerm?.(this.listSearchTerm);
|
|
631
581
|
if (!this.effectiveOpen) {
|
|
632
582
|
void this.show();
|
|
633
583
|
}
|
|
@@ -1591,7 +1541,7 @@ export class Select {
|
|
|
1591
1541
|
* os filhos atuais do host.
|
|
1592
1542
|
*/
|
|
1593
1543
|
getCurrentOptions() {
|
|
1594
|
-
// As opções projetadas são a fonte
|
|
1544
|
+
// As opções projetadas são a fonte principal quando não há coleção
|
|
1595
1545
|
// imperativa: a lista virtualizada pode manter um snapshot enquanto o
|
|
1596
1546
|
// consumidor altera `selected` diretamente no slot.
|
|
1597
1547
|
if (!this.hasImperativeOptions && this.slotElement) {
|
|
@@ -1615,6 +1565,10 @@ export class Select {
|
|
|
1615
1565
|
if (this.pendingOptions) {
|
|
1616
1566
|
return this.getListOptions(this.pendingOptions);
|
|
1617
1567
|
}
|
|
1568
|
+
// Depois de setOptions(), a coleção imperativa é a fonte: uma resposta vazia
|
|
1569
|
+
// não volta a exibir as opções declaradas no HTML.
|
|
1570
|
+
if (this.hasImperativeOptions)
|
|
1571
|
+
return this.getListOptions([]);
|
|
1618
1572
|
const hostOptions = this.applyCanonicalSelection(this.getHostOptions());
|
|
1619
1573
|
return this.getListOptions(hostOptions);
|
|
1620
1574
|
}
|
|
@@ -1623,7 +1577,8 @@ export class Select {
|
|
|
1623
1577
|
const hostOptions = this.hasImperativeOptions ? [] : this.getHostOptions();
|
|
1624
1578
|
const hostDisabledState = new Map(hostOptions.map((option) => [option.value, Boolean(option.disabled)]));
|
|
1625
1579
|
const options = currentOptions.map((option) => hostDisabledState.has(option.value) ? { ...option, disabled: hostDisabledState.get(option.value) } : option);
|
|
1626
|
-
|
|
1580
|
+
const localSearchTerm = this.effectiveSearchMode === 'local' ? this.listSearchTerm : '';
|
|
1581
|
+
return filterSelectOptions(options, localSearchTerm, this.selectAllLabel, this.unselectAllLabel);
|
|
1627
1582
|
}
|
|
1628
1583
|
clearSearch() {
|
|
1629
1584
|
if (!this.searchTerm)
|
|
@@ -1650,18 +1605,18 @@ export class Select {
|
|
|
1650
1605
|
this.selectListElement?.setMultiple(isMultiple);
|
|
1651
1606
|
}
|
|
1652
1607
|
renderSelectInput() {
|
|
1653
|
-
return (h("br-select-input", { part: "input", exportparts: "container:input-container, input:input-field, label:input-label, group:input-group, icon:input-icon, action:input-action, action-button:input-action-button", ref: (el) => (this.selectInputElement = el), "aria-disabled": String(this.isDisabled()), "aria-label": this.getAccessibleLabel(), borderless: this.borderless, density: this.effectiveDensity, "is-inline": this.effectiveInline, "is-open": this.effectiveOpen, label: this.label, name: this.name, placeholder: this.placeholder, required: this.required, disabled: this.isDisabled(), filterable: this.filterable, showSearchIcon: this.showSearchIcon, autocomplete: this.effectiveAutocomplete, "input-width": this.inputWidth, value: this.filterable && this.effectiveOpen ? this.searchTerm : this.getRenderedDisplayValue() }));
|
|
1608
|
+
return (h("br-select-input", { part: "input", exportparts: "container:input-container, input:input-field, label:input-label, group:input-group, icon:input-icon, action:input-action, action-button:input-action-button, clear:input-clear", ref: (el) => (this.selectInputElement = el), "aria-disabled": String(this.isDisabled()), "aria-label": this.getAccessibleLabel(), borderless: this.borderless, density: this.effectiveDensity, "is-inline": this.effectiveInline, "is-open": this.effectiveOpen, label: this.label, name: this.name, placeholder: this.placeholder, required: this.required, disabled: this.isDisabled(), filterable: this.filterable, showSearchIcon: this.showSearchIcon, clearable: this.filterable && this.effectiveOpen, autocomplete: this.effectiveAutocomplete, "input-width": this.inputWidth, value: this.filterable && this.effectiveOpen ? this.searchTerm : this.getRenderedDisplayValue() }));
|
|
1654
1609
|
}
|
|
1655
1610
|
renderSelectList() {
|
|
1656
1611
|
return (h("br-select-list", { part: "list", "aria-hidden": "true", onMouseDown: (event) => {
|
|
1657
1612
|
event.preventDefault();
|
|
1658
1613
|
void this.selectInputElement?.setFocus();
|
|
1659
|
-
}, options: this.getListOptions(this.getCurrentOptions()), exportparts: "list, option, checkbox, select-all, empty-option, option-checkbox, option-radio, option-group", "active-option-index": this.isActiveIndicatorHidden ? -1 : this.activeOptionIndex, "aria-label": this.getAccessibleLabel(), "aria-multiselectable": this.effectiveMultiple ? 'true' : 'false', density: this.effectiveDensity, id: this.listboxId, "visible-items": this.effectiveVisibleItems, "item-height": this.effectiveItemHeight, overscan: this.effectiveOverscan, hideDividers: this.hideDividers, "search-term": this.
|
|
1614
|
+
}, options: this.getListOptions(this.getCurrentOptions()), exportparts: "list, option, checkbox, select-all, empty-option, option-checkbox, option-radio, option-group", "active-option-index": this.isActiveIndicatorHidden ? -1 : this.activeOptionIndex, "aria-label": this.getAccessibleLabel(), "aria-multiselectable": this.effectiveMultiple ? 'true' : 'false', density: this.effectiveDensity, id: this.listboxId, "visible-items": this.effectiveVisibleItems, "item-height": this.effectiveItemHeight, overscan: this.effectiveOverscan, hideDividers: this.hideDividers, "search-term": this.listSearchTerm, "search-mode": this.effectiveSearchMode, role: "listbox", "select-all-label": this.selectAllLabel, "unselect-all-label": this.unselectAllLabel, ref: (el) => {
|
|
1660
1615
|
this.selectListElement = el;
|
|
1661
1616
|
this.selectListElement.loading = this.loading;
|
|
1662
1617
|
this.setSelectionMode(this.effectiveMultiple);
|
|
1663
|
-
void this.getSelectListController()?.setSearchTerm?.(this.
|
|
1664
|
-
} }, h("slot", null), h("slot", { name: "loading", slot: "loading" })));
|
|
1618
|
+
void this.getSelectListController()?.setSearchTerm?.(this.listSearchTerm);
|
|
1619
|
+
} }, h("slot", null), h("slot", { name: "loading", slot: "loading" }, h("br-loading", { size: "small", label: "Pesquisando\u2026", labelPosition: "right" }))));
|
|
1665
1620
|
}
|
|
1666
1621
|
renderHiddenSelect() {
|
|
1667
1622
|
const options = this.getFormOptions(this.getCurrentOptions()).filter((option) => !this.isSelectAllLabel(this.getOptionLabel(option)));
|
|
@@ -1700,7 +1655,7 @@ export class Select {
|
|
|
1700
1655
|
return (h("option", { key: option.value, value: option.value, selected: option.selected, disabled: option.disabled }));
|
|
1701
1656
|
}
|
|
1702
1657
|
render() {
|
|
1703
|
-
return (h(Host, { key: '
|
|
1658
|
+
return (h(Host, { key: '6a73a46788b952ed54fc3962563d572b7303222f', "aria-busy": this.isValidating || this.loading ? 'true' : null }, h("div", { key: 'a05db2f095fb30ae9379ec87d8474289d8560a5b', class: this.getCssClassMap(), part: "container" }, this.renderSelectInput(), this.renderSelectList(), h("div", { key: '9218c94b7c8fe9ef170c4b1c9e47559cdae50c16', part: "feedback", hidden: !this.hasFeedbackSlot && !this.validationErrorMessage }, h("slot", { key: '2d74cf5804367c3b8dab39e57a0d050018de84b5', name: "feedback", onSlotchange: (event) => (this.hasFeedbackSlot = hasAssignedSlotContent(event.currentTarget)) }, this.validationErrorMessage ? (h("br-message", { "is-feedback": true, state: "danger", message: this.validationErrorMessage })) : null)), h("div", { key: 'f2e6019a54128ddae642226986ecf13803fce30d', part: "validation-loading", hidden: !this.hasValidationLoadingSlot || !this.isValidating }, h("slot", { key: '3d83e4359c05d95294d1d9ab87fef1d7d068f1f3', name: "validation-loading" })), this.renderHiddenSelect())));
|
|
1704
1659
|
}
|
|
1705
1660
|
static get is() { return "br-select"; }
|
|
1706
1661
|
static get encapsulation() { return "shadow"; }
|
|
@@ -2259,7 +2214,7 @@ export class Select {
|
|
|
2259
2214
|
"name": "default",
|
|
2260
2215
|
"text": "'local'"
|
|
2261
2216
|
}],
|
|
2262
|
-
"text": "Define se as op\u00E7\u00F5es s\u00E3o filtradas localmente ou fornecidas por uma busca remota.\nEm `remote`, o componente emite `brSelectSearch
|
|
2217
|
+
"text": "Define se as op\u00E7\u00F5es s\u00E3o filtradas localmente ou fornecidas por uma busca remota.\nEm `remote`, o componente emite `brSelectSearch` e exibe as op\u00E7\u00F5es recebidas\nsem filtr\u00E1-las de novo pelo termo digitado; a aplica\u00E7\u00E3o deve buscar, validar e\naplicar a resposta com `setOptions()` ou re-renderizando os `br-select-option`.\nA sele\u00E7\u00E3o \u00E9 preservada mesmo quando n\u00E3o aparece na resposta seguinte."
|
|
2263
2218
|
},
|
|
2264
2219
|
"getter": false,
|
|
2265
2220
|
"setter": false,
|
|
@@ -2282,7 +2237,7 @@ export class Select {
|
|
|
2282
2237
|
"name": "default",
|
|
2283
2238
|
"text": "false"
|
|
2284
2239
|
}],
|
|
2285
|
-
"text": "Indica que uma busca remota de op\u00E7\u00F5es est\u00E1 pendente.\nEnquanto ativo,
|
|
2240
|
+
"text": "Indica que uma busca remota de op\u00E7\u00F5es est\u00E1 pendente.\nEnquanto ativo, a lista exibe o slot `loading` (padr\u00E3o: \"Pesquisando\u2026\") e novas\nop\u00E7\u00F5es n\u00E3o podem ser selecionadas; a aplica\u00E7\u00E3o continua respons\u00E1vel por\ndebounce, cancelamento, erros e autentica\u00E7\u00E3o."
|
|
2286
2241
|
},
|
|
2287
2242
|
"getter": false,
|
|
2288
2243
|
"setter": false,
|
|
@@ -2305,7 +2260,7 @@ export class Select {
|
|
|
2305
2260
|
"name": "default",
|
|
2306
2261
|
"text": "false"
|
|
2307
2262
|
}],
|
|
2308
|
-
"text": "Exibe o \
|
|
2263
|
+
"text": "Exibe a lupa mesmo quando o select n\u00E3o \u00E9 filtr\u00E1vel; selects com `filterable`\nj\u00E1 a exibem. A lupa \u00E9 omitida quando o campo \u00E9 estreito demais (menos de\n128px) para comportar lupa, valor e seta."
|
|
2309
2264
|
},
|
|
2310
2265
|
"getter": false,
|
|
2311
2266
|
"setter": false,
|
|
@@ -2313,6 +2268,29 @@ export class Select {
|
|
|
2313
2268
|
"attribute": "show-search-icon",
|
|
2314
2269
|
"defaultValue": "false"
|
|
2315
2270
|
},
|
|
2271
|
+
"hideSearchIcon": {
|
|
2272
|
+
"type": "boolean",
|
|
2273
|
+
"mutable": false,
|
|
2274
|
+
"complexType": {
|
|
2275
|
+
"original": "boolean",
|
|
2276
|
+
"resolved": "boolean",
|
|
2277
|
+
"references": {}
|
|
2278
|
+
},
|
|
2279
|
+
"required": false,
|
|
2280
|
+
"optional": false,
|
|
2281
|
+
"docs": {
|
|
2282
|
+
"tags": [{
|
|
2283
|
+
"name": "default",
|
|
2284
|
+
"text": "false"
|
|
2285
|
+
}],
|
|
2286
|
+
"text": "Oculta a lupa mesmo quando `filterable` est\u00E1 ativo, sem desabilitar a busca.\nTem preced\u00EAncia visual sobre `showSearchIcon` e n\u00E3o altera o comportamento padr\u00E3o."
|
|
2287
|
+
},
|
|
2288
|
+
"getter": false,
|
|
2289
|
+
"setter": false,
|
|
2290
|
+
"reflect": true,
|
|
2291
|
+
"attribute": "hide-search-icon",
|
|
2292
|
+
"defaultValue": "false"
|
|
2293
|
+
},
|
|
2316
2294
|
"unselectAllLabel": {
|
|
2317
2295
|
"type": "string",
|
|
2318
2296
|
"mutable": false,
|