@govbr-ds/webcomponents 2.3.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 +1764 -1575
- package/cem/webcomponents.html-custom-data.json +194 -163
- package/dist/cjs/br-avatar.cjs.entry.js +3 -3
- package/dist/cjs/br-breadcrumb-item.cjs.entry.js +1 -1
- package/dist/cjs/br-breadcrumb.cjs.entry.js +3 -3
- package/dist/cjs/br-button_2.cjs.entry.js +4 -4
- package/dist/cjs/br-card.cjs.entry.js +3 -3
- package/dist/cjs/br-carousel-page.cjs.entry.js +2 -2
- package/dist/cjs/br-carousel.cjs.entry.js +2 -2
- package/dist/cjs/br-checkbox-group.cjs.entry.js +3 -3
- package/dist/cjs/br-checkbox.cjs.entry.js +4 -4
- package/dist/cjs/br-checkgroup.cjs.entry.js +1 -1
- package/dist/cjs/br-collapse_2.cjs.entry.js +5 -5
- package/dist/cjs/br-cookiebar-cookie.cjs.entry.js +2 -2
- package/dist/cjs/br-cookiebar-group.cjs.entry.js +2 -2
- package/dist/cjs/br-cookiebar-header.cjs.entry.js +2 -2
- package/dist/cjs/br-cookiebar-link.cjs.entry.js +2 -2
- package/dist/cjs/br-cookiebar-note-group.cjs.entry.js +1 -1
- package/dist/cjs/br-cookiebar-note.cjs.entry.js +2 -2
- package/dist/cjs/br-cookiebar.cjs.entry.js +3 -3
- package/dist/cjs/br-crumb.cjs.entry.js +1 -1
- package/dist/cjs/br-date-picker_3.cjs.entry.js +984 -545
- package/dist/cjs/br-datetime-picker.cjs.entry.js +1346 -310
- package/dist/cjs/br-divider.cjs.entry.js +3 -3
- package/dist/cjs/br-dropdown_2.cjs.entry.js +282 -139
- package/dist/cjs/br-footer-category.cjs.entry.js +3 -3
- package/dist/cjs/br-footer-item.cjs.entry.js +2 -2
- package/dist/cjs/br-footer-legal.cjs.entry.js +2 -2
- package/dist/cjs/br-footer-logo.cjs.entry.js +2 -2
- package/dist/cjs/br-footer-social.cjs.entry.js +2 -2
- package/dist/cjs/br-footer.cjs.entry.js +4 -4
- package/dist/cjs/br-header-function.cjs.entry.js +2 -2
- package/dist/cjs/br-header-link.cjs.entry.js +2 -2
- package/dist/cjs/br-header-list.cjs.entry.js +2 -2
- package/dist/cjs/br-header-logo.cjs.entry.js +2 -2
- package/dist/cjs/br-header.cjs.entry.js +2 -2
- package/dist/cjs/br-icon.cjs.entry.js +3 -3
- package/dist/cjs/br-input.cjs.entry.js +64 -10
- package/dist/cjs/br-item.cjs.entry.js +3 -3
- package/dist/cjs/br-link.cjs.entry.js +8 -8
- package/dist/cjs/br-loading.cjs.entry.js +2 -2
- package/dist/cjs/br-magic-button.cjs.entry.js +2 -2
- package/dist/cjs/br-menu-group.cjs.entry.js +2 -2
- package/dist/cjs/br-menu-header.cjs.entry.js +2 -2
- package/dist/cjs/br-menu-info.cjs.entry.js +2 -2
- package/dist/cjs/br-menu-item.cjs.entry.js +2 -2
- package/dist/cjs/br-menu-link.cjs.entry.js +2 -2
- package/dist/cjs/br-menu-list.cjs.entry.js +1 -1
- package/dist/cjs/br-menu-logo.cjs.entry.js +2 -2
- package/dist/cjs/br-menu-social.cjs.entry.js +1 -1
- package/dist/cjs/br-menu.cjs.entry.js +4 -4
- package/dist/cjs/br-modal.cjs.entry.js +1 -1
- package/dist/cjs/br-notification-body.cjs.entry.js +2 -2
- package/dist/cjs/br-notification-header.cjs.entry.js +2 -2
- package/dist/cjs/br-notification-item.cjs.entry.js +2 -2
- package/dist/cjs/br-notification.cjs.entry.js +3 -3
- package/dist/cjs/br-pagination.cjs.entry.js +3 -3
- package/dist/cjs/br-radio-group.cjs.entry.js +4 -4
- package/dist/cjs/br-radio.cjs.entry.js +4 -4
- package/dist/cjs/br-scrim.cjs.entry.js +3 -3
- package/dist/cjs/br-select-input_3.cjs.entry.js +308 -101
- package/dist/cjs/br-sign-in.cjs.entry.js +3 -3
- package/dist/cjs/br-skip-link-item.cjs.entry.js +1 -1
- package/dist/cjs/br-skip-link.cjs.entry.js +2 -2
- package/dist/cjs/br-skiplink-item.cjs.entry.js +2 -2
- package/dist/cjs/br-slider.cjs.entry.js +3 -3
- package/dist/cjs/br-step_2.cjs.entry.js +6 -6
- package/dist/cjs/br-switch.cjs.entry.js +4 -4
- package/dist/cjs/br-tab-item.cjs.entry.js +2 -2
- package/dist/cjs/br-tab.cjs.entry.js +4 -4
- package/dist/cjs/br-table-body.cjs.entry.js +2 -2
- package/dist/cjs/br-table-cell.cjs.entry.js +2 -2
- package/dist/cjs/br-table-header-cell.cjs.entry.js +2 -2
- package/dist/cjs/br-table-header.cjs.entry.js +2 -2
- package/dist/cjs/br-table-row.cjs.entry.js +2 -2
- package/dist/cjs/br-table.cjs.entry.js +2 -2
- package/dist/cjs/br-tag.cjs.entry.js +4 -4
- package/dist/cjs/br-textarea.cjs.entry.js +3 -3
- package/dist/cjs/br-tooltip.cjs.entry.js +2 -2
- package/dist/cjs/br-upload.cjs.entry.js +8 -24
- package/dist/cjs/br-wizard-panel.cjs.entry.js +2 -2
- package/dist/cjs/br-wizard.cjs.entry.js +2 -2
- package/dist/cjs/{datetime-picker-constants-B5pWeOn1.js → datetime-picker-constants-CTf1kVJ1.js} +21 -5
- package/dist/cjs/format-bytes-Cs8SH2w0.js +24 -0
- package/dist/cjs/{iconify-icon-DfODV9bf.js → iconify-icon-LjavbM-D.js} +103 -57
- package/dist/cjs/index-Bc30P_6z.js +14 -14
- package/dist/cjs/{index-C92n55ch.js → index-Caoez3xb.js} +75 -27
- package/dist/cjs/index.cjs.js +2 -2
- package/dist/cjs/{datetime-picker-props-validation-DmNKSXsy.js → isValid-DgJ-noPS.js} +1 -483
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/select.utils-C38f5Kea.js +62 -0
- 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.css +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.css +1 -1
- 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.css +1 -1
- package/dist/collection/components/button/button.js +21 -21
- package/dist/collection/components/card/card.css +1 -1
- package/dist/collection/components/card/card.js +20 -22
- package/dist/collection/components/carousel/carousel-page/carousel-page.css +1 -1
- package/dist/collection/components/carousel/carousel-page/carousel-page.js +3 -13
- package/dist/collection/components/carousel/carousel.css +1 -1
- package/dist/collection/components/carousel/carousel.js +23 -30
- package/dist/collection/components/checkbox/checkbox.css +1 -1
- package/dist/collection/components/checkbox/checkbox.js +18 -24
- package/dist/collection/components/checkbox-group/checkbox-group.css +1 -1
- 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.css +1 -1
- package/dist/collection/components/collapse/collapse.js +25 -21
- package/dist/collection/components/cookiebar/cookiebar-cookie/cookiebar-cookie.css +1 -1
- package/dist/collection/components/cookiebar/cookiebar-cookie/cookiebar-cookie.js +3 -16
- package/dist/collection/components/cookiebar/cookiebar-group/cookiebar-group.css +1 -1
- package/dist/collection/components/cookiebar/cookiebar-group/cookiebar-group.js +3 -16
- package/dist/collection/components/cookiebar/cookiebar-header/cookiebar-header.css +1 -1
- package/dist/collection/components/cookiebar/cookiebar-header/cookiebar-header.js +3 -16
- package/dist/collection/components/cookiebar/cookiebar-link/cookiebar-link.css +1 -1
- package/dist/collection/components/cookiebar/cookiebar-link/cookiebar-link.js +3 -15
- package/dist/collection/components/cookiebar/cookiebar-note/cookiebar-note.css +1 -1
- package/dist/collection/components/cookiebar/cookiebar-note/cookiebar-note.js +3 -14
- package/dist/collection/components/cookiebar/cookiebar-note-group/cookiebar-note-group.css +1 -1
- package/dist/collection/components/cookiebar/cookiebar-note-group/cookiebar-note-group.js +2 -13
- package/dist/collection/components/cookiebar/cookiebar.css +1 -1
- package/dist/collection/components/cookiebar/cookiebar.js +32 -27
- package/dist/collection/components/datetime-picker/date-picker/date-picker-locale.js +73 -26
- package/dist/collection/components/datetime-picker/date-picker/date-picker-props-validation.js +14 -13
- package/dist/collection/components/datetime-picker/date-picker/date-picker.css +1 -1
- package/dist/collection/components/datetime-picker/date-picker/date-picker.js +474 -321
- package/dist/collection/components/datetime-picker/datetime-input/datetime-input-constants.js +59 -0
- package/dist/collection/components/datetime-picker/datetime-input/datetime-input-props-validation.js +19 -15
- package/dist/collection/components/datetime-picker/datetime-input/datetime-input.css +1 -1
- package/dist/collection/components/datetime-picker/datetime-input/datetime-input.js +370 -218
- package/dist/collection/components/datetime-picker/datetime-input/datetime-input.types.js +1 -0
- package/dist/collection/components/datetime-picker/datetime-picker-constants.js +19 -5
- package/dist/collection/components/datetime-picker/datetime-picker-form-associated.js +92 -11
- package/dist/collection/components/datetime-picker/datetime-picker-props-validation.js +52 -33
- package/dist/collection/components/datetime-picker/datetime-picker.css +1 -1
- package/dist/collection/components/datetime-picker/datetime-picker.js +917 -368
- package/dist/collection/components/datetime-picker/datetime-picker.utils.js +62 -49
- package/dist/collection/components/datetime-picker/time-picker/time-picker-constants.js +3 -2
- package/dist/collection/components/datetime-picker/time-picker/time-picker.css +1 -1
- package/dist/collection/components/datetime-picker/time-picker/time-picker.js +145 -92
- package/dist/collection/components/divider/divider.css +1 -1
- package/dist/collection/components/divider/divider.js +15 -19
- package/dist/collection/components/dropdown/dropdown.css +1 -1
- package/dist/collection/components/dropdown/dropdown.js +22 -21
- package/dist/collection/components/footer/footer-category/footer-category.css +1 -1
- package/dist/collection/components/footer/footer-category/footer-category.js +4 -17
- package/dist/collection/components/footer/footer-item/footer-item.css +1 -1
- package/dist/collection/components/footer/footer-item/footer-item.js +3 -16
- package/dist/collection/components/footer/footer-legal/footer-legal.css +1 -1
- package/dist/collection/components/footer/footer-legal/footer-legal.js +2 -16
- package/dist/collection/components/footer/footer-logo/footer-logo.css +1 -1
- package/dist/collection/components/footer/footer-logo/footer-logo.js +3 -16
- package/dist/collection/components/footer/footer-social/footer-social.css +1 -1
- package/dist/collection/components/footer/footer-social/footer-social.js +3 -15
- package/dist/collection/components/footer/footer.css +1 -1
- package/dist/collection/components/footer/footer.js +25 -29
- package/dist/collection/components/header/header-function/header-function.css +1 -1
- package/dist/collection/components/header/header-function/header-function.js +10 -14
- package/dist/collection/components/header/header-link/header-link.css +1 -1
- package/dist/collection/components/header/header-link/header-link.js +3 -16
- package/dist/collection/components/header/header-list/header-list.css +1 -1
- package/dist/collection/components/header/header-list/header-list.js +3 -16
- package/dist/collection/components/header/header-logo/header-logo.css +1 -1
- package/dist/collection/components/header/header-logo/header-logo.js +3 -16
- package/dist/collection/components/header/header.css +1 -1
- package/dist/collection/components/header/header.js +30 -27
- package/dist/collection/components/icon/icon.css +1 -1
- 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 +125 -30
- package/dist/collection/components/item/item.css +1 -1
- package/dist/collection/components/item/item.js +18 -22
- package/dist/collection/components/link/link.css +1 -1
- package/dist/collection/components/link/link.js +25 -29
- package/dist/collection/components/list/list.css +1 -1
- package/dist/collection/components/list/list.js +17 -21
- package/dist/collection/components/loading/loading.css +1 -1
- package/dist/collection/components/loading/loading.js +17 -24
- package/dist/collection/components/magic-button/magic-button.css +1 -1
- package/dist/collection/components/magic-button/magic-button.js +13 -20
- package/dist/collection/components/menu/menu-group/menu-group.css +1 -1
- package/dist/collection/components/menu/menu-group/menu-group.js +3 -16
- package/dist/collection/components/menu/menu-header/menu-header.css +1 -1
- package/dist/collection/components/menu/menu-header/menu-header.js +3 -16
- package/dist/collection/components/menu/menu-info/menu-info.css +1 -1
- package/dist/collection/components/menu/menu-info/menu-info.js +2 -15
- package/dist/collection/components/menu/menu-item/menu-item.css +1 -1
- package/dist/collection/components/menu/menu-item/menu-item.js +3 -16
- package/dist/collection/components/menu/menu-link/menu-link.css +1 -1
- package/dist/collection/components/menu/menu-link/menu-link.js +5 -17
- package/dist/collection/components/menu/menu-list/menu-list.css +1 -1
- package/dist/collection/components/menu/menu-list/menu-list.js +2 -15
- package/dist/collection/components/menu/menu-logo/menu-logo.css +1 -1
- package/dist/collection/components/menu/menu-logo/menu-logo.js +2 -15
- package/dist/collection/components/menu/menu-social/menu-social.css +1 -1
- package/dist/collection/components/menu/menu-social/menu-social.js +2 -15
- package/dist/collection/components/menu/menu.css +1 -1
- package/dist/collection/components/menu/menu.js +28 -35
- package/dist/collection/components/message/message.css +1 -1
- package/dist/collection/components/message/message.js +22 -25
- package/dist/collection/components/modal/modal.css +1 -1
- package/dist/collection/components/modal/modal.js +18 -21
- package/dist/collection/components/notification/notification-body/notification-body.css +1 -1
- package/dist/collection/components/notification/notification-body/notification-body.js +3 -13
- package/dist/collection/components/notification/notification-header/notification-header.css +1 -1
- package/dist/collection/components/notification/notification-header/notification-header.js +3 -14
- package/dist/collection/components/notification/notification-item/notification-item.css +1 -1
- package/dist/collection/components/notification/notification-item/notification-item.js +3 -16
- package/dist/collection/components/notification/notification.css +1 -1
- 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.css +1 -1
- package/dist/collection/components/radio/radio.js +17 -20
- package/dist/collection/components/radio-group/radio-group.css +1 -1
- package/dist/collection/components/radio-group/radio-group.js +20 -20
- package/dist/collection/components/scrim/scrim.css +1 -1
- 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 +157 -27
- package/dist/collection/components/select/select-list/select-list.css +1 -1
- package/dist/collection/components/select/select-list/select-list.js +269 -80
- package/dist/collection/components/select/select-option/select-option.css +1 -1
- package/dist/collection/components/select/select-option/select-option.js +20 -16
- package/dist/collection/components/select/select.css +1 -1
- package/dist/collection/components/select/select.js +367 -180
- package/dist/collection/components/select/select.utils.js +26 -7
- package/dist/collection/components/sign-in/sign-in.css +1 -1
- 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.css +1 -1
- package/dist/collection/components/skip-link/skip-link-item/skip-link-item.js +5 -15
- package/dist/collection/components/skip-link/skip-link.css +1 -1
- package/dist/collection/components/skip-link/skip-link.js +18 -24
- package/dist/collection/components/slider/slider.css +1 -1
- package/dist/collection/components/slider/slider.js +15 -25
- package/dist/collection/components/step/step-item/step-item.css +1 -1
- package/dist/collection/components/step/step-item/step-item.js +5 -15
- package/dist/collection/components/step/step.css +1 -1
- package/dist/collection/components/step/step.js +16 -25
- package/dist/collection/components/switch/switch.css +1 -1
- package/dist/collection/components/switch/switch.js +16 -20
- package/dist/collection/components/tab/tab-item/tab-item.css +1 -1
- package/dist/collection/components/tab/tab-item/tab-item.js +5 -15
- package/dist/collection/components/tab/tab.css +1 -1
- package/dist/collection/components/tab/tab.js +22 -29
- package/dist/collection/components/table/table-body/table-body.css +1 -1
- package/dist/collection/components/table/table-body/table-body.js +3 -13
- package/dist/collection/components/table/table-cell/table-cell.css +1 -1
- package/dist/collection/components/table/table-cell/table-cell.js +3 -12
- package/dist/collection/components/table/table-header/table-header.css +1 -1
- package/dist/collection/components/table/table-header/table-header.js +3 -13
- package/dist/collection/components/table/table-header-cell/table-header-cell.css +1 -1
- package/dist/collection/components/table/table-header-cell/table-header-cell.js +3 -13
- package/dist/collection/components/table/table-row/table-row.css +1 -1
- package/dist/collection/components/table/table-row/table-row.js +3 -13
- package/dist/collection/components/table/table.css +1 -1
- package/dist/collection/components/table/table.js +25 -32
- package/dist/collection/components/tag/tag.css +1 -1
- package/dist/collection/components/tag/tag.js +17 -26
- package/dist/collection/components/textarea/textarea.css +1 -1
- package/dist/collection/components/textarea/textarea.js +14 -22
- package/dist/collection/components/tooltip/tooltip.css +1 -1
- 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.css +1 -1
- package/dist/collection/components/wizard/wizard-panel/wizard-panel.js +3 -13
- package/dist/collection/components/wizard/wizard.css +1 -1
- 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-448Z5r2f.js +5 -0
- package/dist/{webcomponents/p-5f422a69.entry.js → components/p-AhfgJCUp.js} +1 -1
- package/dist/components/p-AoNL6BaW.js +5 -0
- package/dist/components/p-B468MCYC.js +5 -0
- package/dist/components/p-B7bNfmgh.js +5 -0
- package/dist/components/p-B985Ov_x.js +5 -0
- package/dist/components/p-BOWQIHQA.js +5 -0
- package/dist/components/p-BPQrgCRr.js +5 -0
- package/dist/components/p-BwQT0fOJ.js +5 -0
- package/dist/components/p-CAgbUwsx.js +5 -0
- package/dist/components/p-CFXey8i8.js +5 -0
- package/dist/components/p-CVz_akHx.js +5 -0
- package/dist/components/p-CW8xwk6J.js +5 -0
- package/dist/components/p-CYZVdKeO.js +5 -0
- package/dist/components/p-C_DC6oQW.js +16 -0
- package/dist/components/p-CeWbZN7V.js +5 -0
- package/dist/components/p-CyXVsiz9.js +5 -0
- package/dist/components/p-DDe0tQEO.js +5 -0
- package/dist/components/{p-CZZVc2gK.js → p-DJKZ8ktB.js} +1 -1
- package/dist/components/p-DRsZ9GNg.js +5 -0
- package/dist/components/p-DU54cqCf.js +5 -0
- package/dist/components/p-DVJlmlEX.js +5 -0
- package/dist/components/p-DcMjwTqu.js +5 -0
- package/dist/components/p-Dd1qCWAK.js +5 -0
- package/dist/components/p-Dn36Mj2E.js +5 -0
- package/dist/components/p-DoWy_P8b.js +5 -0
- package/dist/components/p-HbhTnepI.js +5 -0
- package/dist/components/{p-BcqVlof7.js → p-JkJjzmGm.js} +1 -1
- package/dist/components/{p-Nze3Utvd.js → p-Or3FLzbz.js} +1 -1
- package/dist/components/p-SWQlgYWR.js +5 -0
- package/dist/components/p-Zb9nyfTY.js +5 -0
- package/dist/components/p-jvKQA6x7.js +5 -0
- package/dist/components/p-pQb-3jFY.js +5 -0
- package/dist/components/p-qX6sHxOk.js +5 -0
- package/dist/esm/br-avatar.entry.js +3 -3
- package/dist/esm/br-breadcrumb-item.entry.js +1 -1
- package/dist/esm/br-breadcrumb.entry.js +3 -3
- package/dist/esm/br-button_2.entry.js +4 -4
- package/dist/esm/br-card.entry.js +3 -3
- package/dist/esm/br-carousel-page.entry.js +2 -2
- package/dist/esm/br-carousel.entry.js +3 -3
- package/dist/esm/br-checkbox-group.entry.js +3 -3
- package/dist/esm/br-checkbox.entry.js +5 -5
- package/dist/esm/br-checkgroup.entry.js +1 -1
- package/dist/esm/br-collapse_2.entry.js +6 -6
- package/dist/esm/br-cookiebar-cookie.entry.js +2 -2
- package/dist/esm/br-cookiebar-group.entry.js +2 -2
- package/dist/esm/br-cookiebar-header.entry.js +2 -2
- package/dist/esm/br-cookiebar-link.entry.js +2 -2
- package/dist/esm/br-cookiebar-note-group.entry.js +1 -1
- package/dist/esm/br-cookiebar-note.entry.js +2 -2
- package/dist/esm/br-cookiebar.entry.js +4 -4
- package/dist/esm/br-crumb.entry.js +1 -1
- package/dist/esm/br-date-picker_3.entry.js +966 -527
- package/dist/esm/br-datetime-picker.entry.js +1316 -280
- package/dist/esm/br-divider.entry.js +3 -3
- package/dist/esm/br-dropdown_2.entry.js +281 -138
- package/dist/esm/br-footer-category.entry.js +3 -3
- package/dist/esm/br-footer-item.entry.js +2 -2
- package/dist/esm/br-footer-legal.entry.js +2 -2
- package/dist/esm/br-footer-logo.entry.js +2 -2
- package/dist/esm/br-footer-social.entry.js +2 -2
- package/dist/esm/br-footer.entry.js +4 -4
- package/dist/esm/br-header-function.entry.js +2 -2
- package/dist/esm/br-header-link.entry.js +2 -2
- package/dist/esm/br-header-list.entry.js +3 -3
- package/dist/esm/br-header-logo.entry.js +2 -2
- package/dist/esm/br-header.entry.js +2 -2
- package/dist/esm/br-icon.entry.js +3 -3
- package/dist/esm/br-input.entry.js +65 -11
- package/dist/esm/br-item.entry.js +3 -3
- package/dist/esm/br-link.entry.js +8 -8
- package/dist/esm/br-loading.entry.js +2 -2
- package/dist/esm/br-magic-button.entry.js +2 -2
- package/dist/esm/br-menu-group.entry.js +2 -2
- package/dist/esm/br-menu-header.entry.js +2 -2
- package/dist/esm/br-menu-info.entry.js +2 -2
- package/dist/esm/br-menu-item.entry.js +2 -2
- package/dist/esm/br-menu-link.entry.js +2 -2
- package/dist/esm/br-menu-list.entry.js +1 -1
- package/dist/esm/br-menu-logo.entry.js +2 -2
- package/dist/esm/br-menu-social.entry.js +1 -1
- package/dist/esm/br-menu.entry.js +5 -5
- package/dist/esm/br-modal.entry.js +1 -1
- package/dist/esm/br-notification-body.entry.js +2 -2
- package/dist/esm/br-notification-header.entry.js +2 -2
- package/dist/esm/br-notification-item.entry.js +2 -2
- package/dist/esm/br-notification.entry.js +4 -4
- package/dist/esm/br-pagination.entry.js +3 -3
- package/dist/esm/br-radio-group.entry.js +5 -5
- package/dist/esm/br-radio.entry.js +5 -5
- package/dist/esm/br-scrim.entry.js +3 -3
- package/dist/esm/br-select-input_3.entry.js +308 -101
- package/dist/esm/br-sign-in.entry.js +3 -3
- package/dist/esm/br-skip-link-item.entry.js +1 -1
- package/dist/esm/br-skip-link.entry.js +2 -2
- package/dist/esm/br-skiplink-item.entry.js +2 -2
- package/dist/esm/br-slider.entry.js +4 -4
- package/dist/esm/br-step_2.entry.js +6 -6
- package/dist/esm/br-switch.entry.js +5 -5
- package/dist/esm/br-tab-item.entry.js +2 -2
- package/dist/esm/br-tab.entry.js +4 -4
- package/dist/esm/br-table-body.entry.js +2 -2
- package/dist/esm/br-table-cell.entry.js +2 -2
- package/dist/esm/br-table-header-cell.entry.js +2 -2
- package/dist/esm/br-table-header.entry.js +2 -2
- package/dist/esm/br-table-row.entry.js +2 -2
- package/dist/esm/br-table.entry.js +2 -2
- package/dist/esm/br-tag.entry.js +5 -5
- package/dist/esm/br-textarea.entry.js +4 -4
- package/dist/esm/br-tooltip.entry.js +3 -3
- package/dist/esm/br-upload.entry.js +6 -22
- package/dist/esm/br-wizard-panel.entry.js +2 -2
- package/dist/esm/br-wizard.entry.js +2 -2
- package/dist/esm/{datetime-picker-constants-BtRPYRvA.js → datetime-picker-constants-1l4_-FEJ.js} +20 -6
- package/dist/esm/{event-CfuJQ1DY.js → event-6Da1SZ3J.js} +1 -1
- package/dist/esm/format-bytes-B7bNfmgh.js +22 -0
- package/dist/esm/{iconify-icon-D3usVJE2.js → iconify-icon-C_DC6oQW.js} +103 -57
- package/dist/esm/{index-BQPOWxe5.js → index-BQRBKuY0.js} +75 -28
- package/dist/esm/index-ConyRdJe.js +14 -14
- package/dist/esm/index.js +2 -2
- package/dist/esm/{datetime-picker-props-validation-BeTcUTnE.js → isValid-wU7S6MI2.js} +2 -477
- package/dist/esm/loader.js +1 -1
- package/dist/esm/select.utils-BYsh2ZdE.js +57 -0
- package/dist/esm/{slot-BIG-yees.js → slot-Bt01zQ7-.js} +1 -1
- package/dist/esm/webcomponents.js +1 -1
- package/dist/hydrate/index.js +4459 -3577
- package/dist/hydrate/index.mjs +4459 -3577
- 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 +20 -12
- package/dist/types/components/datetime-picker/date-picker/date-picker-props-validation.d.ts +14 -13
- package/dist/types/components/datetime-picker/date-picker/date-picker.d.ts +313 -164
- package/dist/types/components/datetime-picker/datetime-input/datetime-input-constants.d.ts +14 -0
- package/dist/types/components/datetime-picker/datetime-input/datetime-input-props-validation.d.ts +19 -15
- package/dist/types/components/datetime-picker/datetime-input/datetime-input.d.ts +226 -105
- package/dist/types/components/datetime-picker/datetime-input/datetime-input.types.d.ts +36 -0
- package/dist/types/components/datetime-picker/datetime-picker-constants.d.ts +19 -5
- package/dist/types/components/datetime-picker/datetime-picker-form-associated.d.ts +32 -5
- package/dist/types/components/datetime-picker/datetime-picker-props-validation.d.ts +22 -24
- package/dist/types/components/datetime-picker/datetime-picker.d.ts +510 -241
- package/dist/types/components/datetime-picker/datetime-picker.types.d.ts +75 -21
- package/dist/types/components/datetime-picker/datetime-picker.utils.d.ts +53 -47
- package/dist/types/components/datetime-picker/time-picker/time-picker-constants.d.ts +3 -2
- package/dist/types/components/datetime-picker/time-picker/time-picker.d.ts +123 -62
- 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 +48 -23
- package/dist/types/components/input/input.types.d.ts +4 -0
- 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 +20 -12
- package/dist/types/components/select/select-list/select-list.d.ts +27 -14
- package/dist/types/components/select/select-option/select-option.d.ts +6 -10
- package/dist/types/components/select/select.d.ts +75 -87
- package/dist/types/components/select/select.types.d.ts +12 -0
- package/dist/types/components/select/select.utils.d.ts +3 -0
- 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 +3586 -5062
- package/dist/webcomponents/index.esm.js +1 -1
- package/dist/webcomponents/p-031a2256.entry.js +5 -0
- package/dist/webcomponents/p-0602e5b1.entry.js +5 -0
- package/dist/webcomponents/p-079d5f69.entry.js +5 -0
- package/dist/webcomponents/p-087ed5e7.entry.js +5 -0
- package/dist/webcomponents/p-0d5a9ebf.entry.js +5 -0
- package/dist/webcomponents/p-105b4d06.entry.js +5 -0
- package/dist/webcomponents/p-11d4edc5.entry.js +5 -0
- package/dist/webcomponents/p-12dd22af.entry.js +5 -0
- package/dist/webcomponents/p-14aedf0d.entry.js +5 -0
- package/dist/webcomponents/p-152482f9.entry.js +5 -0
- package/dist/webcomponents/p-19b4b1b7.entry.js +5 -0
- package/dist/webcomponents/p-1cd1126e.entry.js +5 -0
- package/dist/webcomponents/{p-BtRPYRvA.js → p-1l4_-FEJ.js} +1 -1
- package/dist/webcomponents/p-21e10074.entry.js +5 -0
- package/dist/webcomponents/p-2271ea84.entry.js +5 -0
- package/dist/webcomponents/p-271b1ede.entry.js +5 -0
- package/dist/webcomponents/p-28f732fc.entry.js +5 -0
- package/dist/webcomponents/{p-c1dafd8d.entry.js → p-2971d38a.entry.js} +1 -1
- package/dist/{components/p-DOJ1vYOl.js → webcomponents/p-2ac48875.entry.js} +1 -1
- package/dist/webcomponents/p-2b1a919c.entry.js +5 -0
- package/dist/webcomponents/p-2da57966.entry.js +5 -0
- package/dist/webcomponents/p-2e81b0b3.entry.js +5 -0
- package/dist/webcomponents/p-2eececed.entry.js +5 -0
- package/dist/webcomponents/{p-513ee754.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-32ea6342.entry.js +5 -0
- package/dist/webcomponents/p-330ec8ab.entry.js +5 -0
- package/dist/webcomponents/p-374f83b1.entry.js +5 -0
- package/dist/webcomponents/p-3926cc91.entry.js +5 -0
- package/dist/webcomponents/p-39a7826d.entry.js +5 -0
- package/dist/webcomponents/p-3bcc2c58.entry.js +5 -0
- package/dist/webcomponents/p-3c7ce0e4.entry.js +5 -0
- package/dist/webcomponents/p-467842ca.entry.js +5 -0
- package/dist/webcomponents/p-53550e8c.entry.js +5 -0
- package/dist/webcomponents/p-53e71a8a.entry.js +5 -0
- package/dist/webcomponents/p-5528b466.entry.js +5 -0
- package/dist/webcomponents/p-55e0822d.entry.js +5 -0
- package/dist/webcomponents/p-58bacbe1.entry.js +5 -0
- package/dist/webcomponents/p-5a5ed7d8.entry.js +5 -0
- package/dist/webcomponents/p-621f0fa8.entry.js +5 -0
- package/dist/webcomponents/p-6514a75d.entry.js +5 -0
- package/dist/webcomponents/{p-19a38e20.entry.js → p-678b43a6.entry.js} +1 -1
- package/dist/webcomponents/{p-CfuJQ1DY.js → p-6Da1SZ3J.js} +1 -1
- package/dist/webcomponents/p-6b6be415.entry.js +5 -0
- package/dist/webcomponents/{p-0d2ca2f7.entry.js → p-6d58ab4f.entry.js} +1 -1
- package/dist/webcomponents/p-6ff9b26e.entry.js +5 -0
- package/dist/webcomponents/p-84dfbfdd.entry.js +5 -0
- package/dist/webcomponents/{p-d5d2205c.entry.js → p-85c8d060.entry.js} +1 -1
- package/dist/webcomponents/p-913d6f28.entry.js +5 -0
- package/dist/webcomponents/{p-94848046.entry.js → p-975ea5c7.entry.js} +1 -1
- package/dist/webcomponents/p-992167bc.entry.js +5 -0
- package/dist/webcomponents/p-B7bNfmgh.js +5 -0
- package/dist/webcomponents/p-BYsh2ZdE.js +5 -0
- package/dist/webcomponents/p-C_DC6oQW.js +16 -0
- package/dist/webcomponents/{p-DV-iW9Aj.js → p-CpE_G6IZ.js} +1 -1
- package/dist/webcomponents/p-DnwERaeQ.js +5 -0
- package/dist/webcomponents/p-a21872bf.entry.js +5 -0
- package/dist/webcomponents/{p-0b0cf355.entry.js → p-a9f16a65.entry.js} +1 -1
- package/dist/webcomponents/p-b8d4ace3.entry.js +5 -0
- package/dist/webcomponents/{p-6850e98e.entry.js → p-bbcde1ea.entry.js} +1 -1
- package/dist/webcomponents/p-bbf47e78.entry.js +5 -0
- package/dist/webcomponents/p-bf35e506.entry.js +5 -0
- package/dist/webcomponents/{p-b02a7218.entry.js → p-c09af3cd.entry.js} +1 -1
- package/dist/webcomponents/p-c29268b5.entry.js +5 -0
- package/dist/webcomponents/p-c3e61c39.entry.js +5 -0
- package/dist/webcomponents/{p-b16590fc.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-cae39e13.entry.js +5 -0
- package/dist/webcomponents/p-cb1e08b1.entry.js +5 -0
- package/dist/webcomponents/{p-e94a52ac.entry.js → p-cb690a87.entry.js} +1 -1
- package/dist/webcomponents/p-d0be7243.entry.js +5 -0
- package/dist/webcomponents/p-d191c6e3.entry.js +5 -0
- package/dist/webcomponents/p-d205f3fd.entry.js +5 -0
- package/dist/webcomponents/p-d3bd2c40.entry.js +5 -0
- package/dist/webcomponents/{p-61977114.entry.js → p-dbeea64e.entry.js} +1 -1
- package/dist/webcomponents/p-df475129.entry.js +5 -0
- package/dist/webcomponents/p-e0ccf189.entry.js +5 -0
- package/dist/webcomponents/p-e121429a.entry.js +5 -0
- package/dist/webcomponents/p-e4b968b5.entry.js +5 -0
- package/dist/webcomponents/p-e661c024.entry.js +5 -0
- package/dist/webcomponents/p-e6c6f305.entry.js +5 -0
- package/dist/webcomponents/p-e8291be2.entry.js +5 -0
- package/dist/webcomponents/p-eb5806c7.entry.js +5 -0
- package/dist/webcomponents/{p-82759002.entry.js → p-ed3fa8ec.entry.js} +1 -1
- package/dist/webcomponents/p-f9084f16.entry.js +5 -0
- package/dist/webcomponents/{p-4118b878.entry.js → p-fad3aa61.entry.js} +1 -1
- package/dist/webcomponents/webcomponents.esm.js +1 -1
- package/package.json +2 -2
- package/dist/collection/pages/components/select/remote.js +0 -33
- package/dist/collection/pages/components/select/virtualized.js +0 -13
- package/dist/components/p-0qmYp77w.js +0 -5
- package/dist/components/p-5c3rNBXh.js +0 -5
- package/dist/components/p-B8oIvH3q.js +0 -5
- package/dist/components/p-BECz8XWJ.js +0 -5
- package/dist/components/p-BM4Ys6hX.js +0 -5
- package/dist/components/p-BXWh9s7p.js +0 -5
- package/dist/components/p-BblZlUp2.js +0 -5
- package/dist/components/p-Bezou5CQ.js +0 -5
- package/dist/components/p-BjeUETWJ.js +0 -5
- package/dist/components/p-Cd6udSDt.js +0 -5
- package/dist/components/p-Ci0_RqAE.js +0 -5
- package/dist/components/p-CuBgClZm.js +0 -5
- package/dist/components/p-D0QYZSoP.js +0 -5
- package/dist/components/p-D3usVJE2.js +0 -16
- package/dist/components/p-D4SWpW6-.js +0 -5
- package/dist/components/p-D579DS7x.js +0 -5
- package/dist/components/p-D8K7rhHd.js +0 -5
- package/dist/components/p-D9nXlCuS.js +0 -5
- package/dist/components/p-DKFO6Q_g.js +0 -5
- package/dist/components/p-DNJSSCNi.js +0 -5
- package/dist/components/p-DYI30IZL.js +0 -5
- package/dist/components/p-DcVldfL0.js +0 -5
- package/dist/components/p-DhvmHPp4.js +0 -5
- package/dist/components/p-DwgiHL0b.js +0 -5
- package/dist/components/p-WxDB6Dk4.js +0 -5
- package/dist/components/p-ZLoeVagg.js +0 -5
- package/dist/components/p-gbYJ9sfc.js +0 -5
- package/dist/components/p-uc8ABlC_.js +0 -5
- package/dist/components/p-v60ypfxD.js +0 -5
- package/dist/webcomponents/p-078bd760.entry.js +0 -5
- package/dist/webcomponents/p-07c2cdff.entry.js +0 -5
- package/dist/webcomponents/p-09817344.entry.js +0 -5
- package/dist/webcomponents/p-0d79ca44.entry.js +0 -5
- package/dist/webcomponents/p-0fe3c47b.entry.js +0 -5
- package/dist/webcomponents/p-116b53c9.entry.js +0 -5
- package/dist/webcomponents/p-1240dae7.entry.js +0 -5
- package/dist/webcomponents/p-14ff5865.entry.js +0 -5
- package/dist/webcomponents/p-15743a02.entry.js +0 -5
- package/dist/webcomponents/p-16cebf49.entry.js +0 -5
- package/dist/webcomponents/p-1884b9d3.entry.js +0 -5
- package/dist/webcomponents/p-1d36c8fa.entry.js +0 -5
- package/dist/webcomponents/p-1fa4b5b2.entry.js +0 -5
- package/dist/webcomponents/p-212c069b.entry.js +0 -5
- package/dist/webcomponents/p-23f37cd6.entry.js +0 -5
- package/dist/webcomponents/p-24502b63.entry.js +0 -5
- package/dist/webcomponents/p-27fb81f3.entry.js +0 -5
- package/dist/webcomponents/p-28844490.entry.js +0 -5
- package/dist/webcomponents/p-2b41bdcc.entry.js +0 -5
- package/dist/webcomponents/p-2cb1e09b.entry.js +0 -5
- package/dist/webcomponents/p-2fcda70b.entry.js +0 -5
- package/dist/webcomponents/p-3378300c.entry.js +0 -5
- package/dist/webcomponents/p-3ae9cf69.entry.js +0 -5
- package/dist/webcomponents/p-3b79cd49.entry.js +0 -5
- package/dist/webcomponents/p-3c1513ec.entry.js +0 -5
- package/dist/webcomponents/p-4534a3c3.entry.js +0 -5
- package/dist/webcomponents/p-48abf568.entry.js +0 -5
- package/dist/webcomponents/p-4e5ea05c.entry.js +0 -5
- package/dist/webcomponents/p-521a1076.entry.js +0 -5
- package/dist/webcomponents/p-59fc52c0.entry.js +0 -5
- package/dist/webcomponents/p-5a9f4ea2.entry.js +0 -5
- package/dist/webcomponents/p-71853dfc.entry.js +0 -5
- package/dist/webcomponents/p-76d51654.entry.js +0 -5
- package/dist/webcomponents/p-77e242f3.entry.js +0 -5
- package/dist/webcomponents/p-7b849472.entry.js +0 -5
- package/dist/webcomponents/p-7dbfb875.entry.js +0 -5
- package/dist/webcomponents/p-7fa7f052.entry.js +0 -5
- package/dist/webcomponents/p-81c65747.entry.js +0 -5
- package/dist/webcomponents/p-91a5329f.entry.js +0 -5
- package/dist/webcomponents/p-966773a9.entry.js +0 -5
- package/dist/webcomponents/p-9abb5a53.entry.js +0 -5
- package/dist/webcomponents/p-9bf2e325.entry.js +0 -5
- package/dist/webcomponents/p-9c943b40.entry.js +0 -5
- package/dist/webcomponents/p-9ec3ca00.entry.js +0 -5
- package/dist/webcomponents/p-B0PbhaxL.js +0 -5
- package/dist/webcomponents/p-D3usVJE2.js +0 -16
- package/dist/webcomponents/p-ad91f149.entry.js +0 -5
- package/dist/webcomponents/p-aeea1f17.entry.js +0 -5
- package/dist/webcomponents/p-c2ca0289.entry.js +0 -5
- package/dist/webcomponents/p-c8af334e.entry.js +0 -5
- package/dist/webcomponents/p-cac49c6a.entry.js +0 -5
- package/dist/webcomponents/p-cb9ebfbe.entry.js +0 -5
- package/dist/webcomponents/p-ce3d689c.entry.js +0 -5
- package/dist/webcomponents/p-d11f95a0.entry.js +0 -5
- package/dist/webcomponents/p-dad03b49.entry.js +0 -5
- package/dist/webcomponents/p-db8e6322.entry.js +0 -5
- package/dist/webcomponents/p-dea8015f.entry.js +0 -5
- package/dist/webcomponents/p-e07e309d.entry.js +0 -5
- package/dist/webcomponents/p-e53d874b.entry.js +0 -5
- package/dist/webcomponents/p-e5540387.entry.js +0 -5
- package/dist/webcomponents/p-e9be4d3f.entry.js +0 -5
- package/dist/webcomponents/p-e9db9381.entry.js +0 -5
- package/dist/webcomponents/p-edca5de1.entry.js +0 -5
- package/dist/webcomponents/p-ee5b9fc9.entry.js +0 -5
- package/dist/webcomponents/p-f4ef8c63.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
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
* Construído por SERPRO
|
|
3
3
|
* © https://serpro.gov.br/ - MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-ConyRdJe.js';
|
|
6
|
-
import { r as resolveDateFnsLocale, s as startOfWeekExports, a as addDaysExports, g as getWeekdayLabels, b as getMonthLabels } from './index-
|
|
7
|
-
import { b as requireToDate,
|
|
8
|
-
import { s as setExports, p as parseExports,
|
|
9
|
-
import { d as dispatchNativeFormEvent } from './event-
|
|
10
|
-
import { w as warnInvalidPropValue
|
|
11
|
-
import { r as resolveAllowedPropValue } from './props-D07GjR4_.js';
|
|
5
|
+
import { r as registerInstance, c as createEvent, h, F as Fragment, H as Host, g as getElement } from './index-ConyRdJe.js';
|
|
6
|
+
import { r as resolveDateFnsLocale, s as startOfWeekExports, a as addDaysExports, g as getWeekdayLabels, b as getMonthLabels, c as getWeekdayFullNames } from './index-BQRBKuY0.js';
|
|
7
|
+
import { b as requireToDate, a as requireConstructFrom, g as requireDefaultOptions, h as requireGetDaysInMonth, i as requireNormalizeDates, j as requireStartOfDay, d as DATETIME_PICKER_LOCALE, N as NAVIGATION_ACTION, f as formatExports, k as requireAddLeadingZeros, D as DATETIME_PICKER_MODE, e as DATETIME_RANGE_ORDER_MESSAGE, c as requireConstants } from './datetime-picker-constants-1l4_-FEJ.js';
|
|
8
|
+
import { s as setExports, p as parseExports, t as toDateExports, a as resolveSsrLocalDate, b as isSameDayExports, e as eachDayOfIntervalExports, i as isValidExports } from './isValid-wU7S6MI2.js';
|
|
9
|
+
import { d as dispatchNativeFormEvent } from './event-6Da1SZ3J.js';
|
|
10
|
+
import { w as warnInvalidPropValue } from './prop-warning-BlGV-x0w.js';
|
|
12
11
|
|
|
13
12
|
var addMonths = {};
|
|
14
13
|
|
|
@@ -99,6 +98,50 @@ function requireAddMonths () {
|
|
|
99
98
|
|
|
100
99
|
var addMonthsExports = /*@__PURE__*/ requireAddMonths();
|
|
101
100
|
|
|
101
|
+
var addYears = {};
|
|
102
|
+
|
|
103
|
+
var hasRequiredAddYears;
|
|
104
|
+
|
|
105
|
+
function requireAddYears () {
|
|
106
|
+
if (hasRequiredAddYears) return addYears;
|
|
107
|
+
hasRequiredAddYears = 1;
|
|
108
|
+
addYears.addYears = addYears$1;
|
|
109
|
+
var _index = /*@__PURE__*/ requireAddMonths();
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The {@link addYears} function options.
|
|
113
|
+
*/
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* @name addYears
|
|
117
|
+
* @category Year Helpers
|
|
118
|
+
* @summary Add the specified number of years to the given date.
|
|
119
|
+
*
|
|
120
|
+
* @description
|
|
121
|
+
* Add the specified number of years to the given date.
|
|
122
|
+
*
|
|
123
|
+
* @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
|
|
124
|
+
* @typeParam ResultDate - The result `Date` type.
|
|
125
|
+
*
|
|
126
|
+
* @param date - The date to be changed
|
|
127
|
+
* @param amount - The amount of years to be added.
|
|
128
|
+
* @param options - The options
|
|
129
|
+
*
|
|
130
|
+
* @returns The new date with the years added
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* // Add 5 years to 1 September 2014:
|
|
134
|
+
* const result = addYears(new Date(2014, 8, 1), 5)
|
|
135
|
+
* //=> Sun Sep 01 2019 00:00:00
|
|
136
|
+
*/
|
|
137
|
+
function addYears$1(date, amount, options) {
|
|
138
|
+
return (0, _index.addMonths)(date, amount * 12, options);
|
|
139
|
+
}
|
|
140
|
+
return addYears;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
var addYearsExports = /*@__PURE__*/ requireAddYears();
|
|
144
|
+
|
|
102
145
|
var compareAsc = {};
|
|
103
146
|
|
|
104
147
|
var hasRequiredCompareAsc;
|
|
@@ -267,6 +310,8 @@ function requireEndOfWeek () {
|
|
|
267
310
|
|
|
268
311
|
var endOfWeekExports = /*@__PURE__*/ requireEndOfWeek();
|
|
269
312
|
|
|
313
|
+
var getDaysInMonthExports = /*@__PURE__*/ requireGetDaysInMonth();
|
|
314
|
+
|
|
270
315
|
var isAfter = {};
|
|
271
316
|
|
|
272
317
|
var hasRequiredIsAfter;
|
|
@@ -393,6 +438,8 @@ function requireIsSameMonth () {
|
|
|
393
438
|
|
|
394
439
|
var isSameMonthExports = /*@__PURE__*/ requireIsSameMonth();
|
|
395
440
|
|
|
441
|
+
var startOfDayExports = /*@__PURE__*/ requireStartOfDay();
|
|
442
|
+
|
|
396
443
|
var startOfMonth = {};
|
|
397
444
|
|
|
398
445
|
var hasRequiredStartOfMonth;
|
|
@@ -487,19 +534,20 @@ var subMonthsExports = /*@__PURE__*/ requireSubMonths();
|
|
|
487
534
|
|
|
488
535
|
const VALID_WEEK_START_DAYS = [0, 1, 2, 3, 4, 5, 6];
|
|
489
536
|
/**
|
|
490
|
-
* Verifica se
|
|
537
|
+
* Verifica se um valor representa um índice válido para o primeiro dia da semana (0-6).
|
|
491
538
|
*
|
|
492
|
-
* @param value
|
|
493
|
-
* @returns `true` quando
|
|
539
|
+
* @param {number} value Valor a validar (possivelmente vindo de uma `@Prop`).
|
|
540
|
+
* @returns {value is WeekDayIndex} `true` quando `value` é um `WeekDayIndex` válido (0..6).
|
|
494
541
|
*/
|
|
495
542
|
function isValidWeekStartsOn(value) {
|
|
496
543
|
return VALID_WEEK_START_DAYS.includes(value);
|
|
497
544
|
}
|
|
498
545
|
/**
|
|
499
|
-
* Normaliza o índice de início da semana
|
|
546
|
+
* Normaliza o índice de início da semana.
|
|
547
|
+
* Quando o valor é inválido, emite um aviso e retorna o fallback `0`.
|
|
500
548
|
*
|
|
501
|
-
* @param value
|
|
502
|
-
* @returns Índice normalizado
|
|
549
|
+
* @param {number} value Valor informado pelo consumidor.
|
|
550
|
+
* @returns {WeekDayIndex} Índice normalizado (`WeekDayIndex`).
|
|
503
551
|
*/
|
|
504
552
|
function normalizeWeekStartsOn(value) {
|
|
505
553
|
if (isValidWeekStartsOn(value))
|
|
@@ -508,11 +556,10 @@ function normalizeWeekStartsOn(value) {
|
|
|
508
556
|
return 0;
|
|
509
557
|
}
|
|
510
558
|
/**
|
|
511
|
-
*
|
|
512
|
-
* Retorna true se a resolução for bem-sucedida (inclui fallback).
|
|
559
|
+
* Verifica se um código de `locale` pode ser resolvido pelo date-fns.
|
|
513
560
|
*
|
|
514
|
-
* @param value
|
|
515
|
-
* @returns `true`
|
|
561
|
+
* @param {string} value Código de locale (ex.: "pt-BR").
|
|
562
|
+
* @returns {boolean} `true` se a resolução for bem-sucedida; `false` caso contrário.
|
|
516
563
|
*/
|
|
517
564
|
function isValidLocaleCode(value) {
|
|
518
565
|
try {
|
|
@@ -524,10 +571,11 @@ function isValidLocaleCode(value) {
|
|
|
524
571
|
}
|
|
525
572
|
}
|
|
526
573
|
/**
|
|
527
|
-
* Normaliza o locale informado
|
|
574
|
+
* Normaliza o código de `locale` informado pelo consumidor.
|
|
575
|
+
* Se inválido, emite aviso e retorna o `DATETIME_PICKER_LOCALE.DEFAULT`.
|
|
528
576
|
*
|
|
529
|
-
* @param value
|
|
530
|
-
* @returns
|
|
577
|
+
* @param {string} value Código de locale informado pelo consumidor.
|
|
578
|
+
* @returns {string} Código de locale validado (ou o default do componente).
|
|
531
579
|
*/
|
|
532
580
|
function normalizeLocale(value) {
|
|
533
581
|
if (isValidLocaleCode(value))
|
|
@@ -536,79 +584,86 @@ function normalizeLocale(value) {
|
|
|
536
584
|
return DATETIME_PICKER_LOCALE.DEFAULT;
|
|
537
585
|
}
|
|
538
586
|
|
|
539
|
-
const datePickerCss = () => `*,*::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}code{font-family:monospace;font-size:1em}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)}code,.code{background:var(--gray-5);border-radius:4px;color:var(--gray-80);display:inline-block;font-family:monospace;font-size:var(--font-size-scale-base);font-weight:var(--font-weight-medium);line-height:var(--font-line-height-low);padding: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)}pre code,.pre code{display:inline;padding:0}*[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}:host{display:block;width:100%;max-width:304px;height:auto;box-sizing:border-box}.header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--spacing-scale-base);width:100%;box-sizing:border-box}select{appearance:none;border:none;background:rgba(0,0,0,0);padding-right:20px;font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-semi-bold);color:var(--blue-warm-vivid-70);outline:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'><path fill='%231351b4' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L224 285.229l154.706-154.705c9.373-9.373 24.569-9.373 33.941 0l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.373-24.569 9.373-33.942 0z'/></svg>");background-repeat:no-repeat;background-position:right .35rem center;background-size:10px}select option{color:var(--color)}select:focus{outline:none}select:focus-visible{outline:var(--focus) var(--focus-style) var(--focus-width);outline-offset:var(--focus-offset)}select:hover{cursor:pointer}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;white-space:nowrap;border:0}input[type=number]{width:70px;padding:4px;font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-semi-bold);background-color:var(--gray-0);color:var(--gray-80);text-align:center;border-color:var(--border-color-alternative);border-radius:var(--surface-rounder-sm);border-style:var(--border-style);border-width:var(--border-width)}input[type=number]:hover{background:linear-gradient(rgb(var(--color-rgb), var(--hover)), rgb(var(--color-rgb), var(--hover)))}.weekdays{margin-bottom:var(--spacing-scale-half)}.weekdays,.monthdays{display:grid;grid-template-columns:repeat(7, 1fr);place-items:center center;text-align:center;gap:var(--spacing-scale-half) var(--spacing-scale-half);width:100%;box-sizing:border-box}.weekday{display:flex;align-items:center;justify-content:center;font-weight:var(--font-weight-medium);color:var(--gray-70);width:var(--spacing-scale-4x)}.week{display:contents}.day{display:flex;align-items:center;justify-content:center;justify-self:center;padding:var(--spacing-scale-half);font-weight:var(--font-weight-semi-bold);color:var(--blue-warm-vivid-70);border-radius:50%;width:var(--spacing-scale-4x);height:var(--spacing-scale-4x)}.day:hover{background:var(--hover-effect);cursor:pointer}.day:focus-visible{outline:var(--focus) var(--focus-style) var(--focus-width);outline-offset:var(--focus-offset)}.day.selected{background:var(--blue-warm-vivid-70);color:var(--color-secondary-01);font-weight:var(--font-weight-bold)}.day.in-range{background:var(--blue-warm-vivid-10);color:var(--blue-warm-vivid-70);border-radius:0;place-self:stretch stretch;width:100%;height:100%;overflow:hidden}.day.range-start{background:var(--blue-warm-vivid-70);color:var(--color-secondary-01);font-weight:var(--font-weight-bold);width:100%;height:100%;border-radius:var(--surface-rounder-pill) 0 0 var(--surface-rounder-pill);place-self:stretch stretch;overflow:hidden}.day.range-end{background:var(--blue-warm-vivid-70);color:var(--color-secondary-01);font-weight:var(--font-weight-bold);width:100%;height:100%;border-radius:0 var(--surface-rounder-pill) var(--surface-rounder-pill) 0;place-self:stretch stretch;overflow:hidden}.day.range-start.range-end{border-radius:var(--surface-rounder-pill);height:100%;overflow:hidden}.day.disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.outside-month{font-weight:var(--font-weight-regular);color:var(--gray-70)}.today{background:var(--orange-vivid-5);color:var(--gray-80)}`;
|
|
587
|
+
const datePickerCss = () => `*,*::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}:host{display:block;width:100%;max-width:304px;height:auto;box-sizing:border-box}.header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--spacing-scale-base);width:100%;box-sizing:border-box}select{appearance:none;border:none;background:rgba(0,0,0,0);padding-right:20px;font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-semi-bold);color:var(--blue-warm-vivid-70);outline:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'><path fill='%231351b4' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L224 285.229l154.706-154.705c9.373-9.373 24.569-9.373 33.941 0l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.373-24.569 9.373-33.942 0z'/></svg>");background-repeat:no-repeat;background-position:right .35rem center;background-size:10px}select option{color:var(--color)}select:focus{outline:none}select:focus-visible{outline:var(--focus) var(--focus-style) var(--focus-width);outline-offset:var(--focus-offset)}select:hover{cursor:pointer}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;white-space:nowrap;border:0}input[type=number]{width:70px;padding:4px;font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-semi-bold);background-color:var(--gray-0);color:var(--gray-80);text-align:center;border-color:var(--border-color-alternative);border-radius:var(--surface-rounder-sm);border-style:var(--border-style);border-width:var(--border-width)}input[type=number]:hover{background:linear-gradient(rgb(var(--color-rgb), var(--hover)), rgb(var(--color-rgb), var(--hover)))}.weekdays{margin-bottom:var(--spacing-scale-half)}.weekdays,.monthdays{display:grid;grid-template-columns:repeat(7, 1fr);place-items:center center;text-align:center;gap:var(--spacing-scale-half) var(--spacing-scale-half);width:100%;box-sizing:border-box}.weekday{display:flex;align-items:center;justify-content:center;font-weight:var(--font-weight-medium);color:var(--gray-70);width:var(--spacing-scale-4x)}.week{display:contents}.day{display:flex;align-items:center;justify-content:center;justify-self:center;padding:var(--spacing-scale-half);font-weight:var(--font-weight-semi-bold);color:var(--blue-warm-vivid-70);border-radius:50%;width:var(--spacing-scale-4x);height:var(--spacing-scale-4x)}.day:hover{background:var(--hover-effect);cursor:pointer}.day:focus-visible{outline:var(--focus) var(--focus-style) var(--focus-width);outline-offset:var(--focus-offset)}.day.selected{background:var(--blue-warm-vivid-70);color:var(--color-secondary-01);font-weight:var(--font-weight-bold)}.day.in-range{background:var(--blue-warm-vivid-10);color:var(--blue-warm-vivid-70);border-radius:0;place-self:stretch stretch;width:100%;height:100%;overflow:hidden}.day.range-start{background:var(--blue-warm-vivid-70);color:var(--color-secondary-01);font-weight:var(--font-weight-bold);width:100%;height:100%;border-radius:var(--surface-rounder-pill) 0 0 var(--surface-rounder-pill);place-self:stretch stretch;overflow:hidden}.day.range-end{background:var(--blue-warm-vivid-70);color:var(--color-secondary-01);font-weight:var(--font-weight-bold);width:100%;height:100%;border-radius:0 var(--surface-rounder-pill) var(--surface-rounder-pill) 0;place-self:stretch stretch;overflow:hidden}.day.range-start.range-end{border-radius:var(--surface-rounder-pill);height:100%;overflow:hidden}.day.disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.outside-month{font-weight:var(--font-weight-regular);color:var(--gray-70)}.today{background:var(--orange-vivid-5);color:var(--gray-80)}`;
|
|
540
588
|
|
|
589
|
+
/** Formato da chave local de dia usada em `data-date` e nas buscas de datas bloqueadas. */
|
|
590
|
+
const DAY_KEY_FORMAT = 'yyyy-MM-dd';
|
|
541
591
|
const DatePicker = class {
|
|
542
592
|
constructor(hostRef) {
|
|
543
593
|
registerInstance(this, hostRef);
|
|
544
594
|
this.dateStateChange = createEvent(this, "dateStateChange", 7);
|
|
545
|
-
/**
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
/** Define o índice do dia em que a semana começa na interface do calendário. */
|
|
595
|
+
/**
|
|
596
|
+
* Índice do dia em que a semana começa na interface do calendário.
|
|
597
|
+
* @default 0
|
|
598
|
+
*/
|
|
550
599
|
this.weekStartsOn = 0;
|
|
551
600
|
/**
|
|
552
|
-
* Data usada como base visual para o mês atualmente exibido
|
|
553
|
-
*
|
|
554
|
-
*
|
|
555
|
-
* @example
|
|
556
|
-
* ```js
|
|
557
|
-
* const calendar = document.querySelector('br-date-picker');
|
|
558
|
-
* calendar.referenceDate = new Date(2026, 8, 1);
|
|
559
|
-
* ```
|
|
601
|
+
* Data usada como base visual para o mês atualmente exibido.
|
|
602
|
+
* @default new Date()
|
|
560
603
|
*/
|
|
561
604
|
this.referenceDate = new Date();
|
|
562
605
|
/**
|
|
563
|
-
* Data
|
|
564
|
-
*
|
|
565
|
-
*
|
|
566
|
-
* @example
|
|
567
|
-
* ```js
|
|
568
|
-
* const calendar = document.querySelector('br-date-picker');
|
|
569
|
-
* calendar.value = new Date(2026, 8, 7);
|
|
570
|
-
* ```
|
|
606
|
+
* Data atualmente selecionada pelo usuário, ou `null` quando não há seleção.
|
|
607
|
+
* @default null
|
|
571
608
|
*/
|
|
572
609
|
this.value = null;
|
|
573
|
-
/**
|
|
610
|
+
/**
|
|
611
|
+
* Define se a seleção ocorre por data única ou por intervalo.
|
|
612
|
+
* @default 'single'
|
|
613
|
+
*/
|
|
574
614
|
this.selectionMode = 'single';
|
|
575
|
-
/**
|
|
615
|
+
/**
|
|
616
|
+
* Data inicial selecionada quando o calendário opera no modo de intervalo.
|
|
617
|
+
* @default null
|
|
618
|
+
*/
|
|
576
619
|
this.rangeStart = null;
|
|
577
|
-
/**
|
|
620
|
+
/**
|
|
621
|
+
* Data final selecionada quando o calendário opera no modo de intervalo.
|
|
622
|
+
* @default null
|
|
623
|
+
*/
|
|
578
624
|
this.rangeEnd = null;
|
|
579
|
-
/**
|
|
625
|
+
/**
|
|
626
|
+
* Desabilita a interação do calendário quando `true`.
|
|
627
|
+
* @default false
|
|
628
|
+
*/
|
|
580
629
|
this.disabled = false;
|
|
581
630
|
/**
|
|
582
631
|
* Lista de datas indisponíveis para seleção no calendário.
|
|
583
|
-
*
|
|
584
|
-
*
|
|
585
|
-
* @example
|
|
586
|
-
* ```js
|
|
587
|
-
* const calendar = document.querySelector('br-date-picker');
|
|
588
|
-
* calendar.disabledDates = [new Date(2026, 8, 7), new Date(2026, 8, 8)];
|
|
589
|
-
* ```
|
|
632
|
+
* @default []
|
|
590
633
|
*/
|
|
591
634
|
this.disabledDates = [];
|
|
592
|
-
/**
|
|
635
|
+
/**
|
|
636
|
+
* Locale usado para gerar nomes de meses e dias da semana.
|
|
637
|
+
* @default DATETIME_PICKER_LOCALE.DEFAULT
|
|
638
|
+
*/
|
|
593
639
|
this.locale = DATETIME_PICKER_LOCALE.DEFAULT;
|
|
594
640
|
/**
|
|
595
|
-
*
|
|
596
|
-
* ou variar conforme o mês.
|
|
597
|
-
*
|
|
598
|
-
* Quando `true`, o calendário sempre exibe 6 semanas completas.
|
|
599
|
-
* Quando `false`, o calendário adapta-se ao mês, exibindo apenas as semanas necessárias.
|
|
600
|
-
*
|
|
641
|
+
* Se `true`, o calendário sempre exibe 6 semanas (42 dias); caso contrário, adapta-se ao mês.
|
|
601
642
|
* @default false
|
|
602
643
|
*/
|
|
603
644
|
this.fixedRowCount = false;
|
|
604
|
-
/**
|
|
645
|
+
/**
|
|
646
|
+
* Data atualmente com foco para navegação por teclado.
|
|
647
|
+
* Usada para controlar qual célula do calendário recebe `tabindex=0`.
|
|
648
|
+
* @type {Date}
|
|
649
|
+
* @default new Date()
|
|
650
|
+
* @internal
|
|
651
|
+
*/
|
|
652
|
+
this.focusedDate = new Date();
|
|
653
|
+
/**
|
|
654
|
+
* Sinaliza ao `componentDidRender` que o foco deve ser movido para a célula atual.
|
|
655
|
+
* @internal
|
|
656
|
+
*/
|
|
605
657
|
this.shouldFocusDate = false;
|
|
606
|
-
/** Mantém handlers estáveis por data para evitar recriação a cada renderização. */
|
|
607
|
-
this.dayClickHandlers = new WeakMap();
|
|
608
658
|
/**
|
|
609
|
-
*
|
|
610
|
-
*
|
|
611
|
-
|
|
659
|
+
* Chaves `yyyy-MM-dd` das datas bloqueadas, para consulta O(1) por célula.
|
|
660
|
+
* @internal
|
|
661
|
+
*/
|
|
662
|
+
this.disabledDateKeysCache = new Set();
|
|
663
|
+
/**
|
|
664
|
+
* Handler de mudança do seletor de mês.
|
|
665
|
+
* @param event - evento de mudança do `<select>`
|
|
666
|
+
* @internal
|
|
612
667
|
*/
|
|
613
668
|
this.handleMonthChange = (event) => {
|
|
614
669
|
if (this.disabled) {
|
|
@@ -620,16 +675,21 @@ const DatePicker = class {
|
|
|
620
675
|
console.warn(`Índice de mês inválido selecionado: ${select.value}`);
|
|
621
676
|
return;
|
|
622
677
|
}
|
|
623
|
-
|
|
624
|
-
this.emitDateStateChange(date);
|
|
678
|
+
this.navigateToMonth(setExports.set(this.baseDate, { month: monthIndex, date: 1 }));
|
|
625
679
|
};
|
|
626
680
|
/**
|
|
627
|
-
*
|
|
628
|
-
*
|
|
629
|
-
* @
|
|
681
|
+
* Trata cliques nos botões de navegação do calendário.
|
|
682
|
+
* @param event - evento de clique
|
|
683
|
+
* @internal
|
|
630
684
|
*/
|
|
631
685
|
this.handleNavigationClick = (event) => {
|
|
632
|
-
|
|
686
|
+
if (this.disabled) {
|
|
687
|
+
return;
|
|
688
|
+
}
|
|
689
|
+
const actionFromPath = event
|
|
690
|
+
.composedPath()
|
|
691
|
+
.find((target) => target instanceof HTMLElement && target.dataset.action !== undefined);
|
|
692
|
+
const action = (actionFromPath?.dataset.action ?? event.currentTarget?.dataset.action);
|
|
633
693
|
if (action === undefined) {
|
|
634
694
|
console.warn('Botão de navegação clicado sem data-action definido');
|
|
635
695
|
return;
|
|
@@ -646,9 +706,10 @@ const DatePicker = class {
|
|
|
646
706
|
}
|
|
647
707
|
};
|
|
648
708
|
/**
|
|
649
|
-
*
|
|
650
|
-
*
|
|
651
|
-
* @param event -
|
|
709
|
+
* Handler de alteração do campo ano.
|
|
710
|
+
* Valida o ano antes de aplicar a mudança.
|
|
711
|
+
* @param event - evento de mudança do input de ano
|
|
712
|
+
* @internal
|
|
652
713
|
*/
|
|
653
714
|
this.handleYearChange = (event) => {
|
|
654
715
|
if (this.disabled) {
|
|
@@ -660,23 +721,35 @@ const DatePicker = class {
|
|
|
660
721
|
console.warn(`Ano inválido digitado: ${input.value}`);
|
|
661
722
|
return;
|
|
662
723
|
}
|
|
663
|
-
|
|
664
|
-
const range = this.effectiveSelectionMode === 'range' && this.rangeStart !== null && this.rangeEnd !== null
|
|
665
|
-
? { start: this.rangeStart, end: this.rangeEnd }
|
|
666
|
-
: undefined;
|
|
667
|
-
this.emitDateStateChange(date, this.value, range);
|
|
724
|
+
this.navigateToMonth(setExports.set(this.baseDate, { year, month: this.baseDate.getMonth(), date: 1 }));
|
|
668
725
|
};
|
|
669
726
|
/**
|
|
670
|
-
*
|
|
671
|
-
*
|
|
672
|
-
*
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
727
|
+
* Trata cliques com um handler compartilhado, lendo a data local da célula.
|
|
728
|
+
* @param event - evento de clique da célula
|
|
729
|
+
* @internal
|
|
730
|
+
*/
|
|
731
|
+
this.handleDayCellClick = (event) => {
|
|
732
|
+
const cell = event.currentTarget;
|
|
733
|
+
if (!(cell instanceof HTMLElement) || cell.dataset.date === undefined) {
|
|
734
|
+
console.warn('Célula de dia clicada sem data-date definido');
|
|
735
|
+
return;
|
|
736
|
+
}
|
|
737
|
+
const date = parseExports.parse(cell.dataset.date, DAY_KEY_FORMAT, this.baseDate);
|
|
738
|
+
if (Number.isNaN(date.getTime())) {
|
|
739
|
+
console.warn(`Data inválida na célula de dia: ${cell.dataset.date}`);
|
|
740
|
+
return;
|
|
741
|
+
}
|
|
742
|
+
this.handleDayClick(date);
|
|
743
|
+
};
|
|
744
|
+
/**
|
|
745
|
+
* Gerencia navegação por teclado dentro da grade de dias.
|
|
746
|
+
* Teclas suportadas: ArrowLeft/Right/Up/Down, PageUp/PageDown (mês), Shift+PageUp/PageDown (ano),
|
|
747
|
+
* Home/End, Enter/Space.
|
|
678
748
|
*
|
|
679
|
-
*
|
|
749
|
+
* Permanece ativo em datas bloqueadas para que o foco não fique preso nelas; somente a seleção é ignorada.
|
|
750
|
+
* @param event - evento de teclado
|
|
751
|
+
* @returns void
|
|
752
|
+
* @internal
|
|
680
753
|
*/
|
|
681
754
|
this.handleGridKeydown = (event) => {
|
|
682
755
|
const HANDLED_KEYS = [
|
|
@@ -693,12 +766,22 @@ const DatePicker = class {
|
|
|
693
766
|
];
|
|
694
767
|
if (!HANDLED_KEYS.includes(event.key))
|
|
695
768
|
return;
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
769
|
+
// O `event.target` pode ser um nó interno (texto) ou o foco pode estar
|
|
770
|
+
// em um container; tentamos localizar a célula com `data-date`.
|
|
771
|
+
const targetEl = event.target?.closest?.('[data-date]');
|
|
772
|
+
// Se encontrarmos a célula, usamos sua data; caso contrário, usamos a
|
|
773
|
+
// data atualmente focada (`focusedDate`) como fallback. Em ambos os casos
|
|
774
|
+
// prevenimos o comportamento padrão para manter consistência.
|
|
775
|
+
let current;
|
|
776
|
+
if (targetEl && targetEl.dataset?.date !== undefined) {
|
|
777
|
+
const dateKey = targetEl.dataset.date;
|
|
778
|
+
event.preventDefault();
|
|
779
|
+
current = parseExports.parse(dateKey, DAY_KEY_FORMAT, new Date());
|
|
780
|
+
}
|
|
781
|
+
else {
|
|
782
|
+
event.preventDefault();
|
|
783
|
+
current = this.getNormalizedFocusedDate();
|
|
784
|
+
}
|
|
702
785
|
if (event.key === 'Enter' || event.key === ' ') {
|
|
703
786
|
if (!this.isDateDisabled(current)) {
|
|
704
787
|
this.handleDayClick(current);
|
|
@@ -720,10 +803,10 @@ const DatePicker = class {
|
|
|
720
803
|
next = addDaysExports.addDays(current, 7);
|
|
721
804
|
break;
|
|
722
805
|
case 'PageUp':
|
|
723
|
-
next = addMonthsExports.addMonths(current, -1);
|
|
806
|
+
next = event.shiftKey ? addYearsExports.addYears(current, -1) : addMonthsExports.addMonths(current, -1);
|
|
724
807
|
break;
|
|
725
808
|
case 'PageDown':
|
|
726
|
-
next = addMonthsExports.addMonths(current, 1);
|
|
809
|
+
next = event.shiftKey ? addYearsExports.addYears(current, 1) : addMonthsExports.addMonths(current, 1);
|
|
727
810
|
break;
|
|
728
811
|
case 'Home':
|
|
729
812
|
next = startOfWeekExports.startOfWeek(current, { weekStartsOn: this.weekStartsOn });
|
|
@@ -737,47 +820,43 @@ const DatePicker = class {
|
|
|
737
820
|
this.moveFocusTo(next);
|
|
738
821
|
};
|
|
739
822
|
}
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
823
|
+
/**
|
|
824
|
+
* Observador para a prop `rangeValue` — sincroniza `rangeStart` e `rangeEnd`.
|
|
825
|
+
* @param {DatetimePickerDateRange | undefined} newValue - novo intervalo controlado recebido (`undefined` quando não fornecido)
|
|
826
|
+
* @internal
|
|
827
|
+
*/
|
|
743
828
|
handleRangeValueChange(newValue) {
|
|
744
829
|
if (!newValue)
|
|
745
830
|
return;
|
|
746
|
-
if (!isValidDatetimePickerDateRange(newValue)) {
|
|
747
|
-
reportInvalidPropValue(this.el, 'rangeValue', newValue, 'Informe um objeto com `start` e `end` como Date válido ou null.', 'Ignorando o intervalo inválido e mantendo o último intervalo efetivo.');
|
|
748
|
-
return;
|
|
749
|
-
}
|
|
750
831
|
this.rangeStart = newValue.start;
|
|
751
832
|
this.rangeEnd = newValue.end;
|
|
752
833
|
}
|
|
753
834
|
/**
|
|
754
835
|
* Sincroniza `focusedDate` quando o valor selecionado muda externamente.
|
|
755
836
|
*
|
|
756
|
-
* @param newValue - Novo valor recebido via prop.
|
|
837
|
+
* @param {Date | null} newValue - Novo valor recebido via prop.
|
|
757
838
|
*/
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
const normalizedReferenceDate = this.normalizeDateProp(newValue, 'referenceDate', new Date());
|
|
769
|
-
const receivedTime = newValue instanceof Date && !Number.isNaN(newValue.getTime()) ? newValue.getTime() : null;
|
|
770
|
-
if (normalizedReferenceDate.getTime() !== receivedTime) {
|
|
771
|
-
this.referenceDate = normalizedReferenceDate;
|
|
772
|
-
return;
|
|
839
|
+
/**
|
|
840
|
+
* Observador para a prop `value` — atualiza `focusedDate` quando a seleção externa muda.
|
|
841
|
+
* @param {Date | null} newValue - novo valor de seleção (ou `null`)
|
|
842
|
+
* @param {Date | null} oldValue - valor anterior da seleção
|
|
843
|
+
* @internal
|
|
844
|
+
*/
|
|
845
|
+
handleValueChange(newValue, oldValue) {
|
|
846
|
+
// Reatribuições com o mesmo instante (ex.: navegação entre meses) não devem mover o foco.
|
|
847
|
+
if (newValue !== null && newValue.getTime() !== oldValue?.getTime()) {
|
|
848
|
+
this.focusedDate = toDateExports.toDate(newValue);
|
|
773
849
|
}
|
|
774
|
-
if (this.value === null)
|
|
775
|
-
this.focusedDate = toDateExports.toDate(normalizedReferenceDate);
|
|
776
850
|
}
|
|
777
851
|
/**
|
|
778
852
|
* Revalida a configuração quando o início da semana muda.
|
|
779
853
|
*
|
|
780
|
-
* @param newValue - Novo valor recebido via prop.
|
|
854
|
+
* @param {number} newValue - Novo valor recebido via prop.
|
|
855
|
+
*/
|
|
856
|
+
/**
|
|
857
|
+
* Observador para `weekStartsOn` — revalida a configuração quando alterada externamente.
|
|
858
|
+
* @param {number} newValue - novo índice do início da semana
|
|
859
|
+
* @internal
|
|
781
860
|
*/
|
|
782
861
|
handleWeekStartsOnChange(newValue) {
|
|
783
862
|
this.ensureValidWeekStartsOn(newValue);
|
|
@@ -785,42 +864,35 @@ const DatePicker = class {
|
|
|
785
864
|
/**
|
|
786
865
|
* Revalida o locale quando a prop muda.
|
|
787
866
|
*
|
|
788
|
-
* @param newValue - Novo valor recebido via prop.
|
|
867
|
+
* @param {string} newValue - Novo valor recebido via prop.
|
|
868
|
+
*/
|
|
869
|
+
/**
|
|
870
|
+
* Observador para `locale` — revalida/normaliza o locale informado.
|
|
871
|
+
* @param {string} newValue - nova string de locale
|
|
872
|
+
* @internal
|
|
789
873
|
*/
|
|
790
874
|
handleLocaleChange(newValue) {
|
|
791
875
|
this.ensureValidLocale(newValue);
|
|
792
876
|
}
|
|
793
|
-
handleDisabledDatesChange(newValue) {
|
|
794
|
-
this.normalizedDisabledDates = normalizeDatetimePickerDisabledDates(newValue, 'br-date-picker');
|
|
795
|
-
}
|
|
796
|
-
/**
|
|
797
|
-
* Normaliza os valores públicos antes da primeira renderização.
|
|
798
|
-
*/
|
|
799
877
|
componentWillLoad() {
|
|
800
|
-
this.referenceDate = this.normalizeDateProp(this.referenceDate, 'referenceDate', new Date());
|
|
801
|
-
this.value = this.normalizeDateProp(this.value, 'value', null);
|
|
802
878
|
this.referenceDate = resolveSsrLocalDate(this.el, this.referenceDate);
|
|
803
879
|
this.ensureValidWeekStartsOn();
|
|
804
880
|
this.ensureValidLocale();
|
|
805
|
-
this.handleDisabledDatesChange(this.disabledDates);
|
|
806
881
|
this.focusedDate = toDateExports.toDate(this.value ?? this.referenceDate);
|
|
807
882
|
}
|
|
808
|
-
/**
|
|
809
|
-
* Move o foco para a célula correspondente ao `focusedDate` após re-renderização.
|
|
810
|
-
*/
|
|
811
883
|
componentDidRender() {
|
|
812
884
|
if (!this.shouldFocusDate)
|
|
813
885
|
return;
|
|
814
886
|
this.shouldFocusDate = false;
|
|
815
887
|
const normalizedDate = this.getNormalizedFocusedDate();
|
|
816
|
-
const dateKey = formatExports.format(normalizedDate,
|
|
888
|
+
const dateKey = formatExports.format(normalizedDate, DAY_KEY_FORMAT);
|
|
817
889
|
const cell = this.el.shadowRoot?.querySelector(`[data-date="${dateKey}"]`);
|
|
818
890
|
cell?.focus();
|
|
819
891
|
}
|
|
820
892
|
/**
|
|
821
|
-
*
|
|
822
|
-
*
|
|
893
|
+
* Valida e normaliza `weekStartsOn`.
|
|
823
894
|
* @param value - Valor bruto informado pelo consumidor.
|
|
895
|
+
* @internal
|
|
824
896
|
*/
|
|
825
897
|
ensureValidWeekStartsOn(value = this.weekStartsOn) {
|
|
826
898
|
const normalizedWeekStartsOn = normalizeWeekStartsOn(value);
|
|
@@ -828,18 +900,10 @@ const DatePicker = class {
|
|
|
828
900
|
this.weekStartsOn = normalizedWeekStartsOn;
|
|
829
901
|
}
|
|
830
902
|
}
|
|
831
|
-
normalizeDateProp(value, propertyName, fallback) {
|
|
832
|
-
if (value === null && fallback === null)
|
|
833
|
-
return null;
|
|
834
|
-
if (value instanceof Date && !Number.isNaN(value.getTime()))
|
|
835
|
-
return toDateExports.toDate(value);
|
|
836
|
-
reportInvalidPropValue(this.el, propertyName, value, 'Informe uma instância de Date válida.', `Aplicando fallback ${fallback === null ? 'null' : 'new Date()'}.`);
|
|
837
|
-
return fallback === null ? null : toDateExports.toDate(fallback);
|
|
838
|
-
}
|
|
839
903
|
/**
|
|
840
|
-
*
|
|
841
|
-
*
|
|
904
|
+
* Valida e normaliza o `locale` informado.
|
|
842
905
|
* @param value - Valor bruto informado pelo consumidor.
|
|
906
|
+
* @internal
|
|
843
907
|
*/
|
|
844
908
|
ensureValidLocale(value = this.locale) {
|
|
845
909
|
const normalizedLocale = normalizeLocale(value);
|
|
@@ -848,16 +912,20 @@ const DatePicker = class {
|
|
|
848
912
|
}
|
|
849
913
|
}
|
|
850
914
|
/**
|
|
851
|
-
* Emite
|
|
915
|
+
* Emite `dateStateChange` atualizando `referenceDate`, `value` e `range`.
|
|
916
|
+
* Zera segundos/milissegundos para consistência.
|
|
852
917
|
*
|
|
853
|
-
* @param nextReferenceDate -
|
|
854
|
-
* @param nextValue -
|
|
918
|
+
* @param nextReferenceDate - nova data de referência
|
|
919
|
+
* @param nextValue - data selecionada ou `null` (por padrão, mantém `this.value`)
|
|
920
|
+
* @param nextRange - intervalo de datas quando aplicável
|
|
921
|
+
* @internal
|
|
855
922
|
*/
|
|
856
923
|
emitDateStateChange(nextReferenceDate, nextValue = this.value, nextRange = undefined) {
|
|
857
924
|
// Garantir segundos zerados (componente não manipula segundos)
|
|
858
925
|
const normalizedReference = setExports.set(nextReferenceDate, { seconds: 0, milliseconds: 0 });
|
|
859
926
|
const normalizedValue = nextValue === null ? null : setExports.set(nextValue, { seconds: 0, milliseconds: 0 });
|
|
860
927
|
const valueChanged = this.value?.getTime() !== normalizedValue?.getTime();
|
|
928
|
+
this.referenceDate = normalizedReference;
|
|
861
929
|
this.value = normalizedValue;
|
|
862
930
|
this.dateStateChange.emit({
|
|
863
931
|
referenceDate: normalizedReference,
|
|
@@ -872,10 +940,10 @@ const DatePicker = class {
|
|
|
872
940
|
}
|
|
873
941
|
}
|
|
874
942
|
/**
|
|
875
|
-
* Resolve o ícone
|
|
876
|
-
*
|
|
877
|
-
* @
|
|
878
|
-
* @
|
|
943
|
+
* Resolve o nome do ícone para a ação de navegação.
|
|
944
|
+
* @param action - Ação de navegação
|
|
945
|
+
* @returns Nome do ícone
|
|
946
|
+
* @internal
|
|
879
947
|
*/
|
|
880
948
|
getIconForAction(action) {
|
|
881
949
|
switch (action) {
|
|
@@ -888,9 +956,9 @@ const DatePicker = class {
|
|
|
888
956
|
}
|
|
889
957
|
}
|
|
890
958
|
/**
|
|
891
|
-
*
|
|
892
|
-
*
|
|
893
|
-
* @
|
|
959
|
+
* Trata o clique numa célula de dia: aplica seleção ou atualiza intervalo.
|
|
960
|
+
* @param date - dia clicado
|
|
961
|
+
* @internal
|
|
894
962
|
*/
|
|
895
963
|
handleDayClick(date) {
|
|
896
964
|
if (this.disabled || this.isDateDisabled(date)) {
|
|
@@ -902,13 +970,17 @@ const DatePicker = class {
|
|
|
902
970
|
seconds: 0,
|
|
903
971
|
milliseconds: 0,
|
|
904
972
|
});
|
|
905
|
-
if (this.
|
|
973
|
+
if (this.selectionMode === 'range') {
|
|
906
974
|
this.handleRangeDayClick(newDate);
|
|
907
975
|
return;
|
|
908
976
|
}
|
|
909
977
|
this.emitDateStateChange(newDate, newDate);
|
|
910
978
|
}
|
|
911
|
-
/**
|
|
979
|
+
/**
|
|
980
|
+
* Atualiza o intervalo selecionado no modo `range`.
|
|
981
|
+
* @param clickedDate - data clicada pelo usuário
|
|
982
|
+
* @internal
|
|
983
|
+
*/
|
|
912
984
|
handleRangeDayClick(clickedDate) {
|
|
913
985
|
const start = this.rangeStart;
|
|
914
986
|
const end = this.rangeEnd;
|
|
@@ -925,153 +997,205 @@ const DatePicker = class {
|
|
|
925
997
|
end: normalizedEnd,
|
|
926
998
|
});
|
|
927
999
|
}
|
|
928
|
-
/**
|
|
1000
|
+
/**
|
|
1001
|
+
* Decrementa o mês exibido e preserva seleção/intervalo quando aplicável.
|
|
1002
|
+
* @internal
|
|
1003
|
+
*/
|
|
929
1004
|
decreaseMonth() {
|
|
930
1005
|
if (this.disabled) {
|
|
931
1006
|
return;
|
|
932
1007
|
}
|
|
933
|
-
|
|
934
|
-
const range = this.effectiveSelectionMode === 'range' && this.rangeStart !== null && this.rangeEnd !== null
|
|
935
|
-
? { start: this.rangeStart, end: this.rangeEnd }
|
|
936
|
-
: undefined;
|
|
937
|
-
this.emitDateStateChange(date, this.value, range);
|
|
1008
|
+
this.navigateToMonth(setExports.set(subMonthsExports.subMonths(this.baseDate, 1), { date: 1 }));
|
|
938
1009
|
}
|
|
939
|
-
/**
|
|
1010
|
+
/**
|
|
1011
|
+
* Incrementa o mês exibido e preserva seleção/intervalo quando aplicável.
|
|
1012
|
+
* @internal
|
|
1013
|
+
*/
|
|
940
1014
|
increaseMonth() {
|
|
941
1015
|
if (this.disabled) {
|
|
942
1016
|
return;
|
|
943
1017
|
}
|
|
944
|
-
|
|
945
|
-
|
|
1018
|
+
this.navigateToMonth(setExports.set(addMonthsExports.addMonths(this.baseDate, 1), { date: 1 }));
|
|
1019
|
+
}
|
|
1020
|
+
/**
|
|
1021
|
+
* Exibe o mês informado preservando a seleção, o intervalo completo e o dia em foco.
|
|
1022
|
+
*
|
|
1023
|
+
* O foco vai para a data selecionada quando ela pertence ao novo mês; caso
|
|
1024
|
+
* contrário, mantém o mesmo dia do mês, limitado ao último dia disponível
|
|
1025
|
+
* (ex.: 31/01 → 28/02).
|
|
1026
|
+
*
|
|
1027
|
+
* @param monthDate - primeiro dia do mês de destino
|
|
1028
|
+
* @internal
|
|
1029
|
+
*/
|
|
1030
|
+
navigateToMonth(monthDate) {
|
|
1031
|
+
const value = this.value;
|
|
1032
|
+
this.focusedDate =
|
|
1033
|
+
value !== null && isSameMonthExports.isSameMonth(value, monthDate)
|
|
1034
|
+
? value
|
|
1035
|
+
: setExports.set(monthDate, { date: Math.min(this.focusedDate.getDate(), getDaysInMonthExports.getDaysInMonth(monthDate)) });
|
|
1036
|
+
const range = this.selectionMode === 'range' && this.rangeStart !== null && this.rangeEnd !== null
|
|
946
1037
|
? { start: this.rangeStart, end: this.rangeEnd }
|
|
947
1038
|
: undefined;
|
|
948
|
-
this.emitDateStateChange(
|
|
1039
|
+
this.emitDateStateChange(monthDate, value, range);
|
|
949
1040
|
}
|
|
950
|
-
/**
|
|
1041
|
+
/**
|
|
1042
|
+
* Verifica se uma data está indisponível para seleção.
|
|
1043
|
+
* @param date - data a verificar
|
|
1044
|
+
* @returns `true` se a data estiver na lista de `disabledDates`
|
|
1045
|
+
* @internal
|
|
1046
|
+
*/
|
|
951
1047
|
isDateDisabled(date) {
|
|
952
|
-
return this.
|
|
1048
|
+
return this.disabledDateKeys.has(formatExports.format(date, DAY_KEY_FORMAT));
|
|
1049
|
+
}
|
|
1050
|
+
/**
|
|
1051
|
+
* Chaves locais das datas bloqueadas, recalculadas somente quando `disabledDates` é substituída.
|
|
1052
|
+
* Entradas inválidas são ignoradas.
|
|
1053
|
+
* @internal
|
|
1054
|
+
*/
|
|
1055
|
+
get disabledDateKeys() {
|
|
1056
|
+
if (this.disabledDateKeysSource !== this.disabledDates) {
|
|
1057
|
+
this.disabledDateKeysSource = this.disabledDates;
|
|
1058
|
+
this.disabledDateKeysCache = new Set((this.disabledDates ?? [])
|
|
1059
|
+
.map((disabledDate) => toDateExports.toDate(disabledDate))
|
|
1060
|
+
.filter((disabledDate) => !Number.isNaN(disabledDate.getTime()))
|
|
1061
|
+
.map((disabledDate) => formatExports.format(disabledDate, DAY_KEY_FORMAT)));
|
|
1062
|
+
}
|
|
1063
|
+
return this.disabledDateKeysCache;
|
|
953
1064
|
}
|
|
954
|
-
/**
|
|
1065
|
+
/**
|
|
1066
|
+
* Data base usada para todos os cálculos de calendário.
|
|
1067
|
+
* @returns data de referência interna
|
|
1068
|
+
* @internal
|
|
1069
|
+
*/
|
|
955
1070
|
get baseDate() {
|
|
956
1071
|
return this.referenceDate;
|
|
957
1072
|
}
|
|
958
1073
|
/**
|
|
959
|
-
*
|
|
960
|
-
*
|
|
961
|
-
* @
|
|
962
|
-
* @
|
|
1074
|
+
* Formata o dia exibido com zero à esquerda (ex: '01', '09').
|
|
1075
|
+
* @param date - data a formatar
|
|
1076
|
+
* @returns string com dois dígitos do dia
|
|
1077
|
+
* @internal
|
|
963
1078
|
*/
|
|
964
|
-
getDayClickHandler(date) {
|
|
965
|
-
let handler = this.dayClickHandlers.get(date);
|
|
966
|
-
if (handler === undefined) {
|
|
967
|
-
handler = () => this.handleDayClick(date);
|
|
968
|
-
this.dayClickHandlers.set(date, handler);
|
|
969
|
-
}
|
|
970
|
-
return handler;
|
|
971
|
-
}
|
|
972
|
-
/** Formata o dia exibido com zero à esquerda. */
|
|
973
1079
|
getDayWithLeadingZero(date) {
|
|
974
1080
|
return formatExports.format(date, 'dd');
|
|
975
1081
|
}
|
|
976
1082
|
/**
|
|
977
|
-
* Constrói o rótulo acessível
|
|
978
|
-
*
|
|
979
|
-
* @param
|
|
980
|
-
* @returns
|
|
1083
|
+
* Constrói o rótulo acessível da célula de dia, incluindo estado (selecionado/início/fim).
|
|
1084
|
+
* @param date - dia representado pela célula
|
|
1085
|
+
* @param state - estado já calculado da célula
|
|
1086
|
+
* @returns string para `aria-label`
|
|
1087
|
+
* @internal
|
|
981
1088
|
*/
|
|
982
|
-
getDayCellAriaLabel(date) {
|
|
1089
|
+
getDayCellAriaLabel(date, state) {
|
|
983
1090
|
const fullDate = formatExports.format(date, "d 'de' MMMM 'de' yyyy", { locale: this.dateFnsLocale });
|
|
984
|
-
|
|
985
|
-
const isRangeStart = this.effectiveSelectionMode === 'range' && this.rangeStart !== null && isSameDayExports.isSameDay(date, this.rangeStart);
|
|
986
|
-
const isRangeEnd = this.effectiveSelectionMode === 'range' && this.rangeEnd !== null && isSameDayExports.isSameDay(date, this.rangeEnd);
|
|
987
|
-
const isBetween = this.effectiveSelectionMode === 'range' &&
|
|
988
|
-
this.rangeStart !== null &&
|
|
989
|
-
this.rangeEnd !== null &&
|
|
990
|
-
this.isDateBetweenRange(date, this.rangeStart, this.rangeEnd);
|
|
991
|
-
if (isSelected)
|
|
1091
|
+
if (state.isSelected)
|
|
992
1092
|
return `${fullDate}, selecionado`;
|
|
993
|
-
if (isRangeStart)
|
|
1093
|
+
if (state.isRangeStart)
|
|
994
1094
|
return `${fullDate}, início do intervalo`;
|
|
995
|
-
if (isRangeEnd)
|
|
1095
|
+
if (state.isRangeEnd)
|
|
996
1096
|
return `${fullDate}, fim do intervalo`;
|
|
997
|
-
if (
|
|
1097
|
+
if (state.isInRange)
|
|
998
1098
|
return `${fullDate}, no intervalo selecionado`;
|
|
999
1099
|
return fullDate;
|
|
1000
1100
|
}
|
|
1001
|
-
/**
|
|
1101
|
+
/**
|
|
1102
|
+
* Locale do `date-fns` derivado da prop pública `locale`.
|
|
1103
|
+
* @internal
|
|
1104
|
+
*/
|
|
1002
1105
|
get dateFnsLocale() {
|
|
1003
1106
|
return resolveDateFnsLocale(this.locale);
|
|
1004
1107
|
}
|
|
1005
1108
|
/**
|
|
1006
|
-
* Calcula
|
|
1007
|
-
*
|
|
1008
|
-
* @param
|
|
1109
|
+
* Calcula uma única vez o estado de seleção da célula, compartilhado por classes, ARIA e foco.
|
|
1110
|
+
* @param date - dia da grade
|
|
1111
|
+
* @param today - instante atual compartilhado pela renderização da grade
|
|
1112
|
+
* @returns estado da célula
|
|
1113
|
+
* @internal
|
|
1114
|
+
*/
|
|
1115
|
+
getDayCellState(date, today) {
|
|
1116
|
+
const isRange = this.selectionMode === 'range';
|
|
1117
|
+
const { value, rangeStart, rangeEnd } = this;
|
|
1118
|
+
return {
|
|
1119
|
+
isToday: isSameDayExports.isSameDay(date, today),
|
|
1120
|
+
isOutsideMonth: !isSameMonthExports.isSameMonth(date, this.baseDate),
|
|
1121
|
+
isSelected: !isRange && value !== null && isSameDayExports.isSameDay(date, value),
|
|
1122
|
+
isRangeStart: isRange && rangeStart !== null && isSameDayExports.isSameDay(date, rangeStart),
|
|
1123
|
+
isRangeEnd: isRange && rangeEnd !== null && isSameDayExports.isSameDay(date, rangeEnd),
|
|
1124
|
+
isInRange: isRange && rangeStart !== null && rangeEnd !== null && this.isDateBetweenRange(date, rangeStart, rangeEnd),
|
|
1125
|
+
};
|
|
1126
|
+
}
|
|
1127
|
+
/**
|
|
1128
|
+
* Calcula o mapa de classes CSS da célula do dia.
|
|
1129
|
+
* @param state - estado já calculado da célula
|
|
1130
|
+
* @param disabled - indica se a célula está bloqueada
|
|
1131
|
+
* @returns mapa de classes booleanas
|
|
1132
|
+
* @internal
|
|
1009
1133
|
*/
|
|
1010
|
-
getDayCssClasses(
|
|
1011
|
-
const selected = this.value;
|
|
1012
|
-
const rangeStart = this.rangeStart;
|
|
1013
|
-
const rangeEnd = this.rangeEnd;
|
|
1014
|
-
const hasRange = rangeStart !== null && rangeEnd !== null;
|
|
1015
|
-
const isRangeStart = rangeStart !== null && isSameDayExports.isSameDay(date, rangeStart);
|
|
1016
|
-
const isRangeEnd = rangeEnd !== null && isSameDayExports.isSameDay(date, rangeEnd);
|
|
1017
|
-
const isBetweenRange = hasRange && this.isDateBetweenRange(date, rangeStart, rangeEnd);
|
|
1134
|
+
getDayCssClasses(state, disabled) {
|
|
1018
1135
|
return {
|
|
1019
1136
|
day: true,
|
|
1020
|
-
'outside-month':
|
|
1021
|
-
today:
|
|
1022
|
-
selected:
|
|
1023
|
-
'range-start':
|
|
1024
|
-
'range-end':
|
|
1025
|
-
'in-range':
|
|
1137
|
+
'outside-month': state.isOutsideMonth,
|
|
1138
|
+
today: state.isToday,
|
|
1139
|
+
selected: state.isSelected,
|
|
1140
|
+
'range-start': state.isRangeStart,
|
|
1141
|
+
'range-end': state.isRangeEnd,
|
|
1142
|
+
'in-range': state.isInRange,
|
|
1143
|
+
disabled,
|
|
1026
1144
|
};
|
|
1027
1145
|
}
|
|
1028
|
-
/**
|
|
1146
|
+
/**
|
|
1147
|
+
* Normaliza os limites do intervalo garantindo ordem cronológica (start <= end).
|
|
1148
|
+
* @param start - data de início
|
|
1149
|
+
* @param end - data de fim
|
|
1150
|
+
* @returns tupla [start, end] na ordem correta
|
|
1151
|
+
* @internal
|
|
1152
|
+
*/
|
|
1029
1153
|
normalizeRangeBounds(start, end) {
|
|
1030
1154
|
return compareAscExports.compareAsc(start, end) <= 0 ? [start, end] : [end, start];
|
|
1031
1155
|
}
|
|
1032
|
-
/**
|
|
1156
|
+
/**
|
|
1157
|
+
* Verifica se uma data está estritamente entre `start` e `end`.
|
|
1158
|
+
* @param date - data a verificar
|
|
1159
|
+
* @param start - início do intervalo
|
|
1160
|
+
* @param end - fim do intervalo
|
|
1161
|
+
* @returns `true` se `start < date < end`
|
|
1162
|
+
* @internal
|
|
1163
|
+
*/
|
|
1033
1164
|
isDateBetweenRange(date, start, end) {
|
|
1034
1165
|
return isAfterExports.isAfter(date, start) && isBeforeExports.isBefore(date, end);
|
|
1035
1166
|
}
|
|
1036
|
-
/**
|
|
1037
|
-
|
|
1167
|
+
/**
|
|
1168
|
+
* Calcula os limites da grade do mês, respeitando `fixedRowCount`, sem gerar suas datas.
|
|
1169
|
+
* @returns limites inclusivos da grade
|
|
1170
|
+
* @internal
|
|
1171
|
+
*/
|
|
1172
|
+
getMonthViewInterval() {
|
|
1038
1173
|
const start = startOfWeekExports.startOfWeek(startOfMonthExports.startOfMonth(this.baseDate), { weekStartsOn: this.weekStartsOn });
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
const normalizedDates = eachDayOfIntervalExports.eachDayOfInterval({ start, end });
|
|
1044
|
-
const currentWeekCount = Math.ceil(normalizedDates.length / 7);
|
|
1045
|
-
const targetWeekCount = 6;
|
|
1046
|
-
// Se não houver 6 semanas, estende o final para alcançar 42 dias
|
|
1047
|
-
if (currentWeekCount < targetWeekCount) {
|
|
1048
|
-
const daysToAdd = (targetWeekCount - currentWeekCount) * 7;
|
|
1049
|
-
end = addDaysExports.addDays(end, daysToAdd);
|
|
1050
|
-
}
|
|
1051
|
-
}
|
|
1052
|
-
return eachDayOfIntervalExports.eachDayOfInterval({ start, end });
|
|
1174
|
+
const end = this.fixedRowCount
|
|
1175
|
+
? addDaysExports.addDays(start, 41)
|
|
1176
|
+
: endOfWeekExports.endOfWeek(endOfMonthExports.endOfMonth(this.baseDate), { weekStartsOn: this.weekStartsOn });
|
|
1177
|
+
return { start, end };
|
|
1053
1178
|
}
|
|
1054
1179
|
/**
|
|
1055
|
-
* Retorna o `focusedDate` normalizado para estar
|
|
1056
|
-
*
|
|
1057
|
-
*
|
|
1058
|
-
*
|
|
1059
|
-
*
|
|
1060
|
-
* @returns Data focada normalizada ou primeiro dia da grade.
|
|
1180
|
+
* Retorna o `focusedDate` normalizado para estar dentro da grade visível.
|
|
1181
|
+
* Se não estiver visível, retorna o primeiro dia da grade.
|
|
1182
|
+
* @param interval - limites da grade atual; calculados quando não fornecidos
|
|
1183
|
+
* @returns data normalizada para foco
|
|
1184
|
+
* @internal
|
|
1061
1185
|
*/
|
|
1062
|
-
getNormalizedFocusedDate() {
|
|
1063
|
-
const
|
|
1064
|
-
const
|
|
1065
|
-
if (
|
|
1186
|
+
getNormalizedFocusedDate(interval = this.getMonthViewInterval()) {
|
|
1187
|
+
const focusedDay = startOfDayExports.startOfDay(this.focusedDate).getTime();
|
|
1188
|
+
const isVisible = focusedDay >= interval.start.getTime() && focusedDay <= interval.end.getTime();
|
|
1189
|
+
if (isVisible) {
|
|
1066
1190
|
return this.focusedDate;
|
|
1067
1191
|
}
|
|
1068
|
-
return
|
|
1192
|
+
return interval.start;
|
|
1069
1193
|
}
|
|
1070
1194
|
/**
|
|
1071
|
-
* Constrói o rótulo acessível
|
|
1072
|
-
*
|
|
1073
|
-
* @
|
|
1074
|
-
* @
|
|
1195
|
+
* Constrói o rótulo acessível para os botões de navegação.
|
|
1196
|
+
* @param action - ação de navegação
|
|
1197
|
+
* @returns rótulo para `aria-label`
|
|
1198
|
+
* @internal
|
|
1075
1199
|
*/
|
|
1076
1200
|
getNavigationAriaLabel(action) {
|
|
1077
1201
|
switch (action) {
|
|
@@ -1083,78 +1207,126 @@ const DatePicker = class {
|
|
|
1083
1207
|
return 'Navegar';
|
|
1084
1208
|
}
|
|
1085
1209
|
}
|
|
1086
|
-
/**
|
|
1210
|
+
/**
|
|
1211
|
+
* Retorna os rótulos dos dias da semana conforme `locale` e `weekStartsOn`.
|
|
1212
|
+
* @internal
|
|
1213
|
+
*/
|
|
1087
1214
|
getWeekdayLabels() {
|
|
1088
1215
|
return getWeekdayLabels(this.locale, this.weekStartsOn);
|
|
1089
1216
|
}
|
|
1090
|
-
/**
|
|
1217
|
+
/**
|
|
1218
|
+
* Retorna os rótulos dos meses no locale atual.
|
|
1219
|
+
* @internal
|
|
1220
|
+
*/
|
|
1091
1221
|
getMonthLabels() {
|
|
1092
1222
|
return getMonthLabels(this.locale);
|
|
1093
1223
|
}
|
|
1094
1224
|
/**
|
|
1095
|
-
*
|
|
1096
|
-
*
|
|
1097
|
-
* @
|
|
1225
|
+
* Move o foco de teclado para a data informada e atualiza `referenceDate` se necessário.
|
|
1226
|
+
* @param date - data alvo do foco
|
|
1227
|
+
* @returns void
|
|
1228
|
+
* @internal
|
|
1229
|
+
*/
|
|
1230
|
+
moveFocusTo(date) {
|
|
1231
|
+
this.focusedDate = date;
|
|
1232
|
+
this.shouldFocusDate = true;
|
|
1233
|
+
if (!isSameMonthExports.isSameMonth(date, this.baseDate)) {
|
|
1234
|
+
this.emitDateStateChange(date, this.value);
|
|
1235
|
+
}
|
|
1236
|
+
}
|
|
1237
|
+
/**
|
|
1238
|
+
* Renderiza um botão de navegação consistente para o calendário.
|
|
1239
|
+
* @param action - ação do botão
|
|
1240
|
+
* @returns elemento JSX do botão de navegação
|
|
1241
|
+
* @internal
|
|
1098
1242
|
*/
|
|
1099
1243
|
renderNavigationButton(action) {
|
|
1100
|
-
return (h("br-button", { emphasis: "tertiary", density: "small", shape: "circle", disabled: this.disabled, "data-action": action, "aria-label": this.getNavigationAriaLabel(action), onClick: this.handleNavigationClick }, h("br-icon", { iconName: this.getIconForAction(action), width: "20", height: "20", "aria-hidden": "true" })));
|
|
1244
|
+
return (h("br-button", { type: "button", emphasis: "tertiary", density: "small", shape: "circle", disabled: this.disabled, "data-action": action, "aria-label": this.getNavigationAriaLabel(action), onClick: this.handleNavigationClick }, h("br-icon", { iconName: this.getIconForAction(action), width: "20", height: "20", "aria-hidden": "true" })));
|
|
1101
1245
|
}
|
|
1102
|
-
/**
|
|
1246
|
+
/**
|
|
1247
|
+
* Renderiza o cabeçalho do calendário (navegação, mês e ano).
|
|
1248
|
+
* @returns elemento JSX do cabeçalho
|
|
1249
|
+
* @internal
|
|
1250
|
+
*/
|
|
1103
1251
|
renderCalendarHeader() {
|
|
1104
1252
|
return (h("div", { class: "header", part: "header" }, this.renderNavigationButton(NAVIGATION_ACTION.PREVIOUS_MONTH), this.renderMonthSelection(), this.renderYearSelection(), this.renderNavigationButton(NAVIGATION_ACTION.NEXT_MONTH)));
|
|
1105
1253
|
}
|
|
1106
|
-
/**
|
|
1254
|
+
/**
|
|
1255
|
+
* Renderiza o seletor de mês com rótulo acessível.
|
|
1256
|
+
* @returns elemento JSX do seletor de mês
|
|
1257
|
+
* @internal
|
|
1258
|
+
*/
|
|
1107
1259
|
renderMonthSelection() {
|
|
1108
1260
|
return (h("label", { class: "month-selection" }, h("span", { class: "visually-hidden" }, "Selecionar m\u00EAs"), h("select", { onChange: this.handleMonthChange, "aria-label": "Selecionar m\u00EAs", disabled: this.disabled, part: "month-select" }, this.getMonthLabels().map(this.renderMonthOption, this))));
|
|
1109
1261
|
}
|
|
1110
|
-
/**
|
|
1262
|
+
/**
|
|
1263
|
+
* Renderiza o campo de ano com rótulo acessível.
|
|
1264
|
+
* @returns elemento JSX do campo de ano
|
|
1265
|
+
* @internal
|
|
1266
|
+
*/
|
|
1111
1267
|
renderYearSelection() {
|
|
1112
1268
|
return (h("label", { class: "year-selection" }, h("span", { class: "visually-hidden" }, "Selecionar ano"), h("input", { type: "number", value: this.referenceDate.getFullYear(), onChange: this.handleYearChange, "aria-label": "Selecionar ano", disabled: this.disabled, part: "year-input" })));
|
|
1113
1269
|
}
|
|
1114
|
-
/**
|
|
1270
|
+
/**
|
|
1271
|
+
* Renderiza uma opção do seletor de meses.
|
|
1272
|
+
* @param month - label do mês
|
|
1273
|
+
* @param index - índice do mês (0-11)
|
|
1274
|
+
* @returns elemento `<option>` para o mês
|
|
1275
|
+
* @internal
|
|
1276
|
+
*/
|
|
1115
1277
|
renderMonthOption(month, index) {
|
|
1116
1278
|
return (h("option", { key: `month-${index}`, value: index, selected: index === this.referenceDate.getMonth() }, month));
|
|
1117
1279
|
}
|
|
1118
|
-
/**
|
|
1280
|
+
/**
|
|
1281
|
+
* Renderiza a estrutura principal do calendário (grade e cabeçalho).
|
|
1282
|
+
* @returns elemento JSX com a grade do calendário
|
|
1283
|
+
* @internal
|
|
1284
|
+
*/
|
|
1119
1285
|
renderCalendar() {
|
|
1120
1286
|
const monthLabel = formatExports.format(this.baseDate, "MMMM 'de' yyyy", { locale: this.dateFnsLocale });
|
|
1121
|
-
return (h("div", { class: "calendar", role: "grid", "aria-label": `Calendário de ${monthLabel}`, part: "calendar" }, this.renderWeekdays(), this.renderMonthGrid()));
|
|
1287
|
+
return (h(Fragment, null, h("div", { class: "visually-hidden", "aria-live": "polite" }, monthLabel), h("div", { class: "calendar", role: "grid", "aria-label": `Calendário de ${monthLabel}`, part: "calendar" }, this.renderWeekdays(), this.renderMonthGrid())));
|
|
1122
1288
|
}
|
|
1123
|
-
/**
|
|
1289
|
+
/**
|
|
1290
|
+
* Renderiza os rótulos dos dias da semana.
|
|
1291
|
+
* @returns elemento JSX com os cabeçalhos das colunas dos dias
|
|
1292
|
+
* @internal
|
|
1293
|
+
*/
|
|
1124
1294
|
renderWeekdays() {
|
|
1125
1295
|
const labels = this.getWeekdayLabels();
|
|
1126
|
-
|
|
1296
|
+
const fullNames = getWeekdayFullNames(this.locale, this.weekStartsOn);
|
|
1297
|
+
return (h("div", { class: "weekdays", role: "row", tabIndex: -1, part: "weekdays" }, labels.map((label, index) => (h("div", { key: `weekday-${index}`, class: "weekday", role: "columnheader", tabIndex: -1, "aria-label": fullNames[index], part: "weekday" }, label)))));
|
|
1127
1298
|
}
|
|
1128
|
-
/**
|
|
1299
|
+
/**
|
|
1300
|
+
* Renderiza a grade de dias do mês atual.
|
|
1301
|
+
* @returns elemento JSX contendo semanas e dias
|
|
1302
|
+
* @internal
|
|
1303
|
+
*/
|
|
1129
1304
|
renderMonthGrid() {
|
|
1130
|
-
const
|
|
1305
|
+
const interval = this.getMonthViewInterval();
|
|
1306
|
+
const dates = eachDayOfIntervalExports.eachDayOfInterval(interval);
|
|
1307
|
+
const normalizedFocusedDate = this.getNormalizedFocusedDate(interval);
|
|
1308
|
+
const today = new Date();
|
|
1131
1309
|
const weeks = Array.from({ length: Math.ceil(dates.length / 7) }, (_, index) => dates.slice(index * 7, index * 7 + 7));
|
|
1132
|
-
return (h("div", { class: "monthdays", role: "rowgroup",
|
|
1310
|
+
return (h("div", { class: "monthdays", role: "rowgroup", part: "grid" }, weeks.map((week) => (h("div", { key: `week-${formatExports.format(week[0], DAY_KEY_FORMAT)}`, class: "week", role: "row", tabIndex: -1 }, week.map((date) => this.renderDayCell(date, normalizedFocusedDate, today)))))));
|
|
1133
1311
|
}
|
|
1134
1312
|
/**
|
|
1135
|
-
*
|
|
1136
|
-
*
|
|
1137
|
-
* @param
|
|
1313
|
+
* Renderiza uma célula de dia com estado visual apropriado.
|
|
1314
|
+
* @param date - data representada pela célula
|
|
1315
|
+
* @param normalizedFocusedDate - data de foco normalizada para a grade atual
|
|
1316
|
+
* @param today - instante atual compartilhado pela renderização da grade
|
|
1317
|
+
* @returns elemento JSX da célula de dia
|
|
1318
|
+
* @internal
|
|
1138
1319
|
*/
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
this.
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
/** Renderiza uma célula de dia com estado visual apropriado. */
|
|
1147
|
-
renderDayCell(date) {
|
|
1148
|
-
const disabled = this.disabled || this.isDateDisabled(date);
|
|
1149
|
-
const isSelected = this.effectiveSelectionMode === 'single' && this.value !== null && isSameDayExports.isSameDay(date, this.value);
|
|
1150
|
-
const isRangeStart = this.effectiveSelectionMode === 'range' && this.rangeStart !== null && isSameDayExports.isSameDay(date, this.rangeStart);
|
|
1151
|
-
const isRangeEnd = this.effectiveSelectionMode === 'range' && this.rangeEnd !== null && isSameDayExports.isSameDay(date, this.rangeEnd);
|
|
1152
|
-
const isActiveDay = isSelected || isRangeStart || isRangeEnd;
|
|
1153
|
-
const isFocused = isSameDayExports.isSameDay(date, this.getNormalizedFocusedDate());
|
|
1154
|
-
return (h("div", { key: formatExports.format(date, 'yyyy-MM-dd'), role: "gridcell", tabIndex: this.disabled ? undefined : isFocused ? 0 : -1, "data-date": formatExports.format(date, 'yyyy-MM-dd'), class: { ...this.getDayCssClasses(date), disabled }, onClick: disabled ? undefined : this.getDayClickHandler(date), onKeyDown: disabled ? undefined : this.handleGridKeydown, "aria-label": this.getDayCellAriaLabel(date), "aria-selected": isActiveDay ? 'true' : 'false', "aria-disabled": disabled ? 'true' : null, part: "day" }, this.getDayWithLeadingZero(date)));
|
|
1320
|
+
renderDayCell(date, normalizedFocusedDate, today) {
|
|
1321
|
+
const dateKey = formatExports.format(date, DAY_KEY_FORMAT);
|
|
1322
|
+
const disabled = this.disabled || this.disabledDateKeys.has(dateKey);
|
|
1323
|
+
const state = this.getDayCellState(date, today);
|
|
1324
|
+
const isActiveDay = state.isSelected || state.isRangeStart || state.isRangeEnd;
|
|
1325
|
+
const isFocused = isSameDayExports.isSameDay(date, normalizedFocusedDate);
|
|
1326
|
+
return (h("div", { key: dateKey, role: "gridcell", tabIndex: this.disabled ? undefined : isFocused ? 0 : -1, "data-date": dateKey, class: this.getDayCssClasses(state, disabled), onClick: disabled ? undefined : this.handleDayCellClick, onKeyDown: this.handleGridKeydown, "aria-label": this.getDayCellAriaLabel(date, state), "aria-selected": isActiveDay ? 'true' : 'false', "aria-current": state.isToday ? 'date' : null, "aria-disabled": disabled ? 'true' : null, part: "day" }, this.getDayWithLeadingZero(date)));
|
|
1155
1327
|
}
|
|
1156
1328
|
render() {
|
|
1157
|
-
return (h(Host, { key: '
|
|
1329
|
+
return (h(Host, { key: 'd909c9c84061f6b456a0350e2ab3fe6e50cc5d83' }, h("div", { key: 'aba7fc5f0b7bce2a9aa2d95bae9897f138dd8146', class: "br-date-picker", part: "container" }, this.renderCalendarHeader(), this.renderCalendar())));
|
|
1158
1330
|
}
|
|
1159
1331
|
get el() { return getElement(this); }
|
|
1160
1332
|
static get watchers() { return {
|
|
@@ -1164,17 +1336,11 @@ const DatePicker = class {
|
|
|
1164
1336
|
"value": [{
|
|
1165
1337
|
"handleValueChange": 0
|
|
1166
1338
|
}],
|
|
1167
|
-
"referenceDate": [{
|
|
1168
|
-
"handleReferenceDateChange": 0
|
|
1169
|
-
}],
|
|
1170
1339
|
"weekStartsOn": [{
|
|
1171
1340
|
"handleWeekStartsOnChange": 0
|
|
1172
1341
|
}],
|
|
1173
1342
|
"locale": [{
|
|
1174
1343
|
"handleLocaleChange": 0
|
|
1175
|
-
}],
|
|
1176
|
-
"disabledDates": [{
|
|
1177
|
-
"handleDisabledDatesChange": 0
|
|
1178
1344
|
}]
|
|
1179
1345
|
}; }
|
|
1180
1346
|
};
|
|
@@ -1260,6 +1426,62 @@ function requireGetMinutes () {
|
|
|
1260
1426
|
|
|
1261
1427
|
var getMinutesExports = /*@__PURE__*/ requireGetMinutes();
|
|
1262
1428
|
|
|
1429
|
+
/**
|
|
1430
|
+
* Configurações de formato e mensagens usadas por `br-datetime-input`.
|
|
1431
|
+
*
|
|
1432
|
+
* Cada chave representa um modo suportado (`date`, `time`, `datetime`) e
|
|
1433
|
+
* mapeia para um `InputFormatConfig` que descreve máscara de entrada,
|
|
1434
|
+
* contagens de dígitos aceitas, formatos de exibição/parse e mensagens de
|
|
1435
|
+
* validação específicas do modo.
|
|
1436
|
+
*
|
|
1437
|
+
* Mantemos a configuração centralizada para evitar lógica dispersa pelo
|
|
1438
|
+
* componente e permitir alterações de formato em um único local.
|
|
1439
|
+
*/
|
|
1440
|
+
const INPUT_FORMAT_CONFIG = {
|
|
1441
|
+
date: {
|
|
1442
|
+
mask: '##/##/####',
|
|
1443
|
+
acceptedDigitCounts: [8],
|
|
1444
|
+
fullDigitCount: 8,
|
|
1445
|
+
displayFormat: 'dd/MM/yyyy',
|
|
1446
|
+
parseFormats: ['dd/MM/yyyy'],
|
|
1447
|
+
messages: {
|
|
1448
|
+
incomplete: 'Complete a data no formato DD/MM/AAAA.',
|
|
1449
|
+
invalid: 'Informe uma data válida.',
|
|
1450
|
+
incompleteRange: 'Complete o intervalo no formato DD/MM/AAAA - DD/MM/AAAA.',
|
|
1451
|
+
invalidRange: 'Informe um intervalo de datas válido.',
|
|
1452
|
+
},
|
|
1453
|
+
rangeFormat: 'DD/MM/AAAA - DD/MM/AAAA',
|
|
1454
|
+
},
|
|
1455
|
+
time: {
|
|
1456
|
+
mask: '##:##',
|
|
1457
|
+
acceptedDigitCounts: [4],
|
|
1458
|
+
fullDigitCount: 4,
|
|
1459
|
+
displayFormat: 'HH:mm',
|
|
1460
|
+
parseFormats: ['HH:mm'],
|
|
1461
|
+
messages: {
|
|
1462
|
+
incomplete: 'Complete o horário no formato HH:MM.',
|
|
1463
|
+
invalid: 'Informe um horário válido.',
|
|
1464
|
+
incompleteRange: 'Complete o intervalo no formato HH:MM - HH:MM.',
|
|
1465
|
+
invalidRange: 'Informe um intervalo de horários válido.',
|
|
1466
|
+
},
|
|
1467
|
+
rangeFormat: 'HH:MM - HH:MM',
|
|
1468
|
+
},
|
|
1469
|
+
datetime: {
|
|
1470
|
+
mask: '##/##/#### ##:##',
|
|
1471
|
+
acceptedDigitCounts: [8, 12],
|
|
1472
|
+
fullDigitCount: 12,
|
|
1473
|
+
displayFormat: 'dd/MM/yyyy HH:mm',
|
|
1474
|
+
parseFormats: ['dd/MM/yyyy HH:mm', 'dd/MM/yyyy'],
|
|
1475
|
+
messages: {
|
|
1476
|
+
incomplete: 'Complete a data e hora no formato DD/MM/AAAA HH:MM.',
|
|
1477
|
+
invalid: 'Informe uma data e hora válidas.',
|
|
1478
|
+
incompleteRange: 'Complete o intervalo no formato DD/MM/AAAA HH:MM - DD/MM/AAAA HH:MM.',
|
|
1479
|
+
invalidRange: 'Informe um intervalo de data e hora válido.',
|
|
1480
|
+
},
|
|
1481
|
+
rangeFormat: 'DD/MM/AAAA HH:MM - DD/MM/AAAA HH:MM',
|
|
1482
|
+
},
|
|
1483
|
+
};
|
|
1484
|
+
|
|
1263
1485
|
var formatISO = {};
|
|
1264
1486
|
|
|
1265
1487
|
var hasRequiredFormatISO;
|
|
@@ -1378,19 +1600,20 @@ function requireFormatISO () {
|
|
|
1378
1600
|
var formatISOExports = /*@__PURE__*/ requireFormatISO();
|
|
1379
1601
|
|
|
1380
1602
|
/**
|
|
1381
|
-
*
|
|
1603
|
+
* Verifica se `value` é um modo suportado pelo `br-datetime-input`.
|
|
1382
1604
|
*
|
|
1383
|
-
* @param value - Valor recebido via prop/atributo.
|
|
1384
|
-
* @returns `true` quando
|
|
1605
|
+
* @param {string} value - Valor recebido via prop/atributo.
|
|
1606
|
+
* @returns {value is DatetimePickerMode} `true` quando pertence ao conjunto suportado.
|
|
1385
1607
|
*/
|
|
1386
1608
|
function isValidDatetimeInputMode(value) {
|
|
1387
1609
|
return Object.values(DATETIME_PICKER_MODE).includes(value);
|
|
1388
1610
|
}
|
|
1389
1611
|
/**
|
|
1390
|
-
* Normaliza o modo do
|
|
1612
|
+
* Normaliza o modo do componente, aplicando o valor padrão quando inválido.
|
|
1613
|
+
* Emite um aviso via `warnInvalidPropValue` quando o valor é inválido.
|
|
1391
1614
|
*
|
|
1392
|
-
* @param value - Valor bruto
|
|
1393
|
-
* @returns Modo válido
|
|
1615
|
+
* @param {string} value - Valor bruto recebido via prop.
|
|
1616
|
+
* @returns {DatetimePickerMode} - Modo válido (ou `DATETIME_PICKER_MODE.DEFAULT`).
|
|
1394
1617
|
*/
|
|
1395
1618
|
function normalizeDatetimeInputMode(value) {
|
|
1396
1619
|
if (isValidDatetimeInputMode(value))
|
|
@@ -1399,19 +1622,21 @@ function normalizeDatetimeInputMode(value) {
|
|
|
1399
1622
|
return DATETIME_PICKER_MODE.DEFAULT;
|
|
1400
1623
|
}
|
|
1401
1624
|
/**
|
|
1402
|
-
*
|
|
1625
|
+
* Retorna `true` quando `value` é uma instância válida de `Date`.
|
|
1403
1626
|
*
|
|
1404
|
-
* @param value - Valor
|
|
1405
|
-
* @returns `true`
|
|
1627
|
+
* @param {unknown} value - Valor a ser verificado.
|
|
1628
|
+
* @returns {value is Date} - `true` para instâncias de Date válidas.
|
|
1406
1629
|
*/
|
|
1407
1630
|
function isValidDateInstance(value) {
|
|
1408
1631
|
return value instanceof Date && !Number.isNaN(value.getTime());
|
|
1409
1632
|
}
|
|
1410
1633
|
/**
|
|
1411
|
-
* Normaliza a
|
|
1634
|
+
* Normaliza a `referenceDate` garantindo uma `Date` válida.
|
|
1635
|
+
* Quando `value` for inválido, retorna um fallback (data atual) e emite
|
|
1636
|
+
* um warning com o valor sugerido em ISO.
|
|
1412
1637
|
*
|
|
1413
|
-
* @param value - Valor recebido via prop.
|
|
1414
|
-
* @returns Date
|
|
1638
|
+
* @param {unknown} value - Valor recebido via prop.
|
|
1639
|
+
* @returns {Date} - Data válida para uso interno.
|
|
1415
1640
|
*/
|
|
1416
1641
|
function normalizeDatetimeInputReferenceDate(value) {
|
|
1417
1642
|
if (isValidDateInstance(value))
|
|
@@ -1421,10 +1646,11 @@ function normalizeDatetimeInputReferenceDate(value) {
|
|
|
1421
1646
|
return fallback;
|
|
1422
1647
|
}
|
|
1423
1648
|
/**
|
|
1424
|
-
* Normaliza o
|
|
1649
|
+
* Normaliza o `value` da prop para `Date` válido ou `null`.
|
|
1650
|
+
* Emite warning quando o valor é inválido e retorna `null`.
|
|
1425
1651
|
*
|
|
1426
|
-
* @param value - Valor recebido via prop.
|
|
1427
|
-
* @returns Date
|
|
1652
|
+
* @param {unknown} value - Valor recebido via prop.
|
|
1653
|
+
* @returns {Date | null} - Data válida ou `null`.
|
|
1428
1654
|
*/
|
|
1429
1655
|
function normalizeDatetimeInputValue(value) {
|
|
1430
1656
|
if (value === null)
|
|
@@ -1435,112 +1661,135 @@ function normalizeDatetimeInputValue(value) {
|
|
|
1435
1661
|
return null;
|
|
1436
1662
|
}
|
|
1437
1663
|
|
|
1438
|
-
const datetimeInputCss = () => `*,*::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}code{font-family:monospace;font-size:1em}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)}code,.code{background:var(--gray-5);border-radius:4px;color:var(--gray-80);display:inline-block;font-family:monospace;font-size:var(--font-size-scale-base);font-weight:var(--font-weight-medium);line-height:var(--font-line-height-low);padding: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)}pre code,.pre code{display:inline;padding:0}*[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}:host{display:block;width:100%}br-input[disabled]{opacity:1}`;
|
|
1664
|
+
const datetimeInputCss = () => `*,*::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}:host{display:block;width:100%}br-input[disabled]{opacity:1}`;
|
|
1439
1665
|
|
|
1440
1666
|
const DatetimeInput = class {
|
|
1441
1667
|
constructor(hostRef) {
|
|
1442
1668
|
registerInstance(this, hostRef);
|
|
1443
1669
|
this.dateStateChange = createEvent(this, "dateStateChange", 7);
|
|
1444
1670
|
this.togglePicker = createEvent(this, "togglePicker", 7);
|
|
1445
|
-
|
|
1446
|
-
this.inputValue = '';
|
|
1671
|
+
this.inputValidationChange = createEvent(this, "inputValidationChange", 7);
|
|
1447
1672
|
/**
|
|
1448
|
-
*
|
|
1673
|
+
* Texto de placeholder exibido quando o campo estiver vazio.
|
|
1449
1674
|
*
|
|
1450
1675
|
* @default ''
|
|
1451
1676
|
*/
|
|
1452
1677
|
this.placeholder = '';
|
|
1453
1678
|
/**
|
|
1454
|
-
*
|
|
1679
|
+
* Modo de entrada que controla máscara, parser e formato exibido.
|
|
1455
1680
|
*
|
|
1456
1681
|
* @default 'datetime'
|
|
1457
1682
|
*/
|
|
1458
1683
|
this.mode = 'datetime';
|
|
1459
1684
|
/**
|
|
1460
|
-
* Data de referência
|
|
1461
|
-
* Recebe uma instância de `Date` por property binding.
|
|
1685
|
+
* Data de referência usada para navegação e preenchimento de valores parciais.
|
|
1462
1686
|
*
|
|
1463
1687
|
* @default new Date()
|
|
1464
|
-
* @example
|
|
1465
|
-
* ```js
|
|
1466
|
-
* const input = document.querySelector('br-datetime-input');
|
|
1467
|
-
* input.referenceDate = new Date(2026, 8, 1);
|
|
1468
|
-
* ```
|
|
1469
1688
|
*/
|
|
1470
1689
|
this.referenceDate = new Date();
|
|
1471
1690
|
/**
|
|
1472
|
-
*
|
|
1473
|
-
* de `referenceDate`, que controla apenas a referência visual.
|
|
1474
|
-
* Recebe uma instância de `Date` por property binding.
|
|
1691
|
+
* Valor atualmente selecionado pelo componente.
|
|
1475
1692
|
*
|
|
1476
1693
|
* @default null
|
|
1477
|
-
* @example
|
|
1478
|
-
* ```js
|
|
1479
|
-
* const input = document.querySelector('br-datetime-input');
|
|
1480
|
-
* input.value = new Date(2026, 8, 7, 14, 30);
|
|
1481
|
-
* ```
|
|
1482
1694
|
*/
|
|
1483
1695
|
this.value = null;
|
|
1484
1696
|
/**
|
|
1485
|
-
*
|
|
1697
|
+
* Controla os estados de read-only ou bloqueio de formulário.
|
|
1486
1698
|
*
|
|
1487
1699
|
* @default false
|
|
1488
1700
|
*/
|
|
1489
1701
|
this.disabled = false;
|
|
1490
1702
|
/**
|
|
1491
|
-
* Define
|
|
1492
|
-
* Aceita `single` ou `range`; valores inválidos usam `single`.
|
|
1703
|
+
* Define o modo de seleção: `single` (valor único) ou `range` (intervalo).
|
|
1493
1704
|
*
|
|
1494
1705
|
* @default 'single'
|
|
1495
1706
|
*/
|
|
1496
1707
|
this.selectionMode = 'single';
|
|
1497
1708
|
/**
|
|
1498
|
-
*
|
|
1709
|
+
* Início do intervalo em `selectionMode === 'range'`.
|
|
1499
1710
|
*
|
|
1500
1711
|
* @default null
|
|
1501
1712
|
*/
|
|
1502
1713
|
this.rangeStart = null;
|
|
1503
1714
|
/**
|
|
1504
|
-
*
|
|
1715
|
+
* Fim do intervalo em `selectionMode === 'range'`.
|
|
1505
1716
|
*
|
|
1506
1717
|
* @default null
|
|
1507
1718
|
*/
|
|
1508
1719
|
this.rangeEnd = null;
|
|
1720
|
+
/**
|
|
1721
|
+
* Marcador do último texto confirmado (commit) exibido no input.
|
|
1722
|
+
*
|
|
1723
|
+
* @internal
|
|
1724
|
+
* @type {string | null}
|
|
1725
|
+
* @default null
|
|
1726
|
+
*/
|
|
1727
|
+
this.lastCommittedInputText = null;
|
|
1728
|
+
/**
|
|
1729
|
+
* Texto atual do campo usado durante a edição manual.
|
|
1730
|
+
*
|
|
1731
|
+
* @internal Mantido localmente; não faz parte do contrato público do componente.
|
|
1732
|
+
* @type {string}
|
|
1733
|
+
* @default ''
|
|
1734
|
+
*/
|
|
1735
|
+
this.inputValue = '';
|
|
1736
|
+
/**
|
|
1737
|
+
* Handler do clique no botão de ação interno.
|
|
1738
|
+
*
|
|
1739
|
+
* @param event - Ativação pública da ação do br-input.
|
|
1740
|
+
* @returns {void}
|
|
1741
|
+
*/
|
|
1509
1742
|
this.handleActionButtonClick = (event) => {
|
|
1510
1743
|
if (this.disabled)
|
|
1511
1744
|
return;
|
|
1512
1745
|
event.stopPropagation();
|
|
1746
|
+
event.detail.originalEvent.stopPropagation();
|
|
1513
1747
|
this.togglePicker.emit();
|
|
1514
1748
|
};
|
|
1515
1749
|
/**
|
|
1516
|
-
*
|
|
1517
|
-
*
|
|
1750
|
+
* Blur handler: consome o evento e confirma o conteúdo atual.
|
|
1751
|
+
*
|
|
1752
|
+
* @param {FocusEvent} event - Evento de blur do input.
|
|
1753
|
+
* @returns {void}
|
|
1518
1754
|
*/
|
|
1519
1755
|
this.handleInputBlur = (event) => {
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1756
|
+
event.stopPropagation();
|
|
1757
|
+
this.commitCurrentInput();
|
|
1758
|
+
};
|
|
1759
|
+
/**
|
|
1760
|
+
* Handler para commit disparado pelo `change` do `br-input`.
|
|
1761
|
+
*
|
|
1762
|
+
* @param {Event} event - Evento de change.
|
|
1763
|
+
* @returns {void}
|
|
1764
|
+
*/
|
|
1765
|
+
this.handleInputCommit = (event) => {
|
|
1766
|
+
event.stopPropagation();
|
|
1767
|
+
this.commitCurrentInput();
|
|
1527
1768
|
};
|
|
1528
1769
|
/**
|
|
1529
1770
|
* Atualiza o estado local com o valor digitado no campo.
|
|
1530
1771
|
*
|
|
1531
|
-
* @param event - Evento de input
|
|
1772
|
+
* @param {Event} event - Evento de input redistribuído pelo `br-input`.
|
|
1773
|
+
* @returns {void}
|
|
1532
1774
|
*/
|
|
1533
1775
|
this.handleInputChange = (event) => {
|
|
1776
|
+
event.stopPropagation();
|
|
1534
1777
|
if (this.disabled) {
|
|
1535
1778
|
return;
|
|
1536
1779
|
}
|
|
1537
1780
|
const input = event.target;
|
|
1538
|
-
this.
|
|
1781
|
+
this.lastCommittedInputText = null;
|
|
1782
|
+
this.emitInputValidation(null);
|
|
1783
|
+
this.setInternalInputValue(input.value ?? '');
|
|
1539
1784
|
};
|
|
1540
1785
|
/**
|
|
1541
|
-
*
|
|
1786
|
+
* Handler de teclado no campo de entrada.
|
|
1787
|
+
*
|
|
1788
|
+
* Suporta atalhos ARIA (Alt+ArrowDown / F4) para abrir/fechar o picker
|
|
1789
|
+
* e Enter para confirmar a edição.
|
|
1542
1790
|
*
|
|
1543
|
-
* @param event - Evento de teclado
|
|
1791
|
+
* @param {KeyboardEvent} event - Evento de teclado.
|
|
1792
|
+
* @returns {void}
|
|
1544
1793
|
*/
|
|
1545
1794
|
this.handleInputKeydown = (event) => {
|
|
1546
1795
|
if (this.disabled) {
|
|
@@ -1552,37 +1801,23 @@ const DatetimeInput = class {
|
|
|
1552
1801
|
this.togglePicker.emit();
|
|
1553
1802
|
return;
|
|
1554
1803
|
}
|
|
1555
|
-
if (event.key === 'Enter') {
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
* Evita propagação do clique e solicita a abertura/fechamento do picker.
|
|
1561
|
-
*
|
|
1562
|
-
* @param event - Evento de clique no ícone de ação.
|
|
1563
|
-
*/
|
|
1564
|
-
this.handleToggleDropdown = (event) => {
|
|
1565
|
-
if (this.disabled) {
|
|
1566
|
-
return;
|
|
1804
|
+
if (event.key === 'Enter' && event.composedPath().some((target) => target instanceof HTMLInputElement)) {
|
|
1805
|
+
// Previne submissão de formulários e garante deduplicação
|
|
1806
|
+
// usando a mesma rotina que blur/change usam.
|
|
1807
|
+
event.preventDefault();
|
|
1808
|
+
this.commitCurrentInput();
|
|
1567
1809
|
}
|
|
1568
|
-
event.stopPropagation();
|
|
1569
|
-
this.togglePicker.emit();
|
|
1570
1810
|
};
|
|
1571
1811
|
}
|
|
1572
|
-
/**
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
}
|
|
1812
|
+
/**
|
|
1813
|
+
* Watcher: sincroniza `rangeStart`/`rangeEnd` a partir de `rangeValue` controlado.
|
|
1814
|
+
*
|
|
1815
|
+
* @param {DatetimePickerDateRange | undefined} newValue - Novo intervalo ou `undefined`.
|
|
1816
|
+
* @returns {void}
|
|
1817
|
+
*/
|
|
1579
1818
|
handleRangeValueChange(newValue) {
|
|
1580
1819
|
if (!newValue)
|
|
1581
1820
|
return;
|
|
1582
|
-
if (!isValidDatetimePickerDateRange(newValue)) {
|
|
1583
|
-
reportInvalidPropValue(this.el, 'rangeValue', newValue, 'Informe um objeto com `start` e `end` como Date válido ou null.', 'Ignorando o intervalo inválido e mantendo o último intervalo efetivo.');
|
|
1584
|
-
return;
|
|
1585
|
-
}
|
|
1586
1821
|
this.rangeStart = newValue.start;
|
|
1587
1822
|
this.rangeEnd = newValue.end;
|
|
1588
1823
|
this.syncInputValueFromProps();
|
|
@@ -1592,6 +1827,13 @@ const DatetimeInput = class {
|
|
|
1592
1827
|
*
|
|
1593
1828
|
* @param newValue - Novo valor recebido via prop.
|
|
1594
1829
|
*/
|
|
1830
|
+
/**
|
|
1831
|
+
* Watcher: reage a mudanças externas em `value`, normalizando e sincronizando
|
|
1832
|
+
* o texto exibido no input.
|
|
1833
|
+
*
|
|
1834
|
+
* @param {Date | null} newValue - Novo valor recebido via prop.
|
|
1835
|
+
* @returns {void}
|
|
1836
|
+
*/
|
|
1595
1837
|
handleValueChange(newValue) {
|
|
1596
1838
|
this.ensureValidValue(newValue);
|
|
1597
1839
|
this.syncInputValueFromProps();
|
|
@@ -1601,6 +1843,12 @@ const DatetimeInput = class {
|
|
|
1601
1843
|
*
|
|
1602
1844
|
* @param newValue - Novo modo recebido via prop.
|
|
1603
1845
|
*/
|
|
1846
|
+
/**
|
|
1847
|
+
* Watcher: aplica normalização do `mode` e atualiza a máscara/valor exibido.
|
|
1848
|
+
*
|
|
1849
|
+
* @param {string} newValue - Novo modo recebido via prop.
|
|
1850
|
+
* @returns {void}
|
|
1851
|
+
*/
|
|
1604
1852
|
handleModeChange(newValue) {
|
|
1605
1853
|
this.ensureValidMode(newValue);
|
|
1606
1854
|
this.syncInputValueFromProps();
|
|
@@ -1610,6 +1858,12 @@ const DatetimeInput = class {
|
|
|
1610
1858
|
*
|
|
1611
1859
|
* @param newValue - Nova data de referência recebida.
|
|
1612
1860
|
*/
|
|
1861
|
+
/**
|
|
1862
|
+
* Watcher: valida `referenceDate` e resina o input quando não há seleção.
|
|
1863
|
+
*
|
|
1864
|
+
* @param {Date} newValue - Nova data de referência recebida.
|
|
1865
|
+
* @returns {void}
|
|
1866
|
+
*/
|
|
1613
1867
|
handleReferenceDateChange(newValue) {
|
|
1614
1868
|
this.ensureValidReferenceDate(newValue);
|
|
1615
1869
|
if (this.value === null) {
|
|
@@ -1621,8 +1875,13 @@ const DatetimeInput = class {
|
|
|
1621
1875
|
*
|
|
1622
1876
|
* @param newValue - Nova data inicial do range.
|
|
1623
1877
|
*/
|
|
1878
|
+
/**
|
|
1879
|
+
* Watcher: atualiza a representação textual quando o início do range muda.
|
|
1880
|
+
*
|
|
1881
|
+
* @returns {void}
|
|
1882
|
+
*/
|
|
1624
1883
|
handleRangeStartChange() {
|
|
1625
|
-
if (this.
|
|
1884
|
+
if (this.selectionMode === 'range') {
|
|
1626
1885
|
this.syncInputValueFromProps();
|
|
1627
1886
|
}
|
|
1628
1887
|
}
|
|
@@ -1631,8 +1890,13 @@ const DatetimeInput = class {
|
|
|
1631
1890
|
*
|
|
1632
1891
|
* @param newValue - Nova data final do range.
|
|
1633
1892
|
*/
|
|
1893
|
+
/**
|
|
1894
|
+
* Watcher: atualiza a representação textual quando o fim do range muda.
|
|
1895
|
+
*
|
|
1896
|
+
* @returns {void}
|
|
1897
|
+
*/
|
|
1634
1898
|
handleRangeEndChange() {
|
|
1635
|
-
if (this.
|
|
1899
|
+
if (this.selectionMode === 'range') {
|
|
1636
1900
|
this.syncInputValueFromProps();
|
|
1637
1901
|
}
|
|
1638
1902
|
}
|
|
@@ -1647,41 +1911,36 @@ const DatetimeInput = class {
|
|
|
1647
1911
|
this.syncInputValueFromProps();
|
|
1648
1912
|
}
|
|
1649
1913
|
/**
|
|
1650
|
-
*
|
|
1914
|
+
* Confirma o conteúdo atual evitando commits duplicados (blur + change).
|
|
1651
1915
|
*
|
|
1652
|
-
*
|
|
1653
|
-
* o browser dispara um click sintético. Adicionamos um listener imperativo para
|
|
1654
|
-
* garantir que o clique no botão de ação acione o toggle. O blur é observado na raiz
|
|
1655
|
-
* interna porque mover o foco do input para essa ação não desfoca o host `br-input`.
|
|
1916
|
+
* @returns {void}
|
|
1656
1917
|
*/
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
const brInput = this.el.shadowRoot?.querySelector('br-input');
|
|
1660
|
-
if (!brInput)
|
|
1661
|
-
return;
|
|
1662
|
-
if (!brInput.shadowRoot)
|
|
1663
|
-
await brInput.componentOnReady();
|
|
1664
|
-
if (!this.el.isConnected || !brInput.shadowRoot)
|
|
1918
|
+
commitCurrentInput() {
|
|
1919
|
+
if (this.disabled)
|
|
1665
1920
|
return;
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
const actionButton = this.inputShadowRoot.querySelector('br-button.button-transform');
|
|
1669
|
-
if (!actionButton)
|
|
1921
|
+
const currentText = this.inputValue.trim();
|
|
1922
|
+
if (this.lastCommittedInputText === currentText)
|
|
1670
1923
|
return;
|
|
1671
|
-
this.
|
|
1672
|
-
|
|
1673
|
-
|
|
1924
|
+
this.lastCommittedInputText = currentText;
|
|
1925
|
+
this.commitInputValue();
|
|
1926
|
+
this.lastCommittedInputText = this.inputValue.trim();
|
|
1674
1927
|
}
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1928
|
+
/**
|
|
1929
|
+
* Retorna a máscara delegada ao `br-input` de acordo com o modo atual.
|
|
1930
|
+
*
|
|
1931
|
+
* @returns {string | undefined} - Máscara a ser aplicada, ou `undefined` quando indisponível.
|
|
1932
|
+
*/
|
|
1933
|
+
getInputMask() {
|
|
1934
|
+
if (this.selectionMode === 'range') {
|
|
1935
|
+
const boundaryMask = INPUT_FORMAT_CONFIG[this.mode].mask;
|
|
1936
|
+
return `${boundaryMask} - ${boundaryMask}`;
|
|
1937
|
+
}
|
|
1938
|
+
return INPUT_FORMAT_CONFIG[this.mode].mask;
|
|
1680
1939
|
}
|
|
1681
1940
|
/**
|
|
1682
1941
|
* Retorna o rótulo acessível do botão de alternância do picker.
|
|
1683
1942
|
*
|
|
1684
|
-
* @returns Texto anunciado pelo leitor de tela para o ícone de ação.
|
|
1943
|
+
* @returns {string} - Texto anunciado pelo leitor de tela para o ícone de ação.
|
|
1685
1944
|
*/
|
|
1686
1945
|
getToggleAriaLabel() {
|
|
1687
1946
|
switch (this.mode) {
|
|
@@ -1694,9 +1953,10 @@ const DatetimeInput = class {
|
|
|
1694
1953
|
}
|
|
1695
1954
|
}
|
|
1696
1955
|
/**
|
|
1697
|
-
* Normaliza
|
|
1956
|
+
* Normaliza e aplica um modo válido (`date` | `time` | `datetime`).
|
|
1698
1957
|
*
|
|
1699
|
-
* @param value - Modo informado externamente.
|
|
1958
|
+
* @param {string} value - Modo informado externamente.
|
|
1959
|
+
* @returns {void}
|
|
1700
1960
|
*/
|
|
1701
1961
|
ensureValidMode(value = this.mode) {
|
|
1702
1962
|
const normalizedMode = normalizeDatetimeInputMode(value);
|
|
@@ -1705,9 +1965,10 @@ const DatetimeInput = class {
|
|
|
1705
1965
|
}
|
|
1706
1966
|
}
|
|
1707
1967
|
/**
|
|
1708
|
-
* Garante que
|
|
1968
|
+
* Garante que `referenceDate` seja uma `Date` válida; caso contrário, normaliza.
|
|
1709
1969
|
*
|
|
1710
|
-
* @param value - Data de referência recebida via prop.
|
|
1970
|
+
* @param {Date} value - Data de referência recebida via prop.
|
|
1971
|
+
* @returns {void}
|
|
1711
1972
|
*/
|
|
1712
1973
|
ensureValidReferenceDate(value = this.referenceDate) {
|
|
1713
1974
|
const normalizedReferenceDate = normalizeDatetimeInputReferenceDate(value);
|
|
@@ -1718,7 +1979,8 @@ const DatetimeInput = class {
|
|
|
1718
1979
|
/**
|
|
1719
1980
|
* Normaliza o valor selecionado para `Date` válido ou `null`.
|
|
1720
1981
|
*
|
|
1721
|
-
* @param value - Valor recebido via prop.
|
|
1982
|
+
* @param {Date | null} value - Valor recebido via prop.
|
|
1983
|
+
* @returns {void}
|
|
1722
1984
|
*/
|
|
1723
1985
|
ensureValidValue(value = this.value) {
|
|
1724
1986
|
const normalizedValue = normalizeDatetimeInputValue(value);
|
|
@@ -1728,47 +1990,131 @@ const DatetimeInput = class {
|
|
|
1728
1990
|
}
|
|
1729
1991
|
/**
|
|
1730
1992
|
* Consolida o texto digitado, tenta analisar e emite o novo estado selecionado.
|
|
1993
|
+
*
|
|
1994
|
+
* Trata modos `single` e `range` e valida mensagens de erro apropriadas.
|
|
1995
|
+
*
|
|
1996
|
+
* @returns {void}
|
|
1731
1997
|
*/
|
|
1732
1998
|
commitInputValue() {
|
|
1733
1999
|
const inputText = this.inputValue.trim();
|
|
1734
2000
|
if (inputText === '') {
|
|
2001
|
+
this.emitInputValidation(true);
|
|
1735
2002
|
this.value = null;
|
|
1736
2003
|
this.dateStateChange.emit({
|
|
1737
2004
|
referenceDate: this.referenceDate,
|
|
1738
2005
|
value: null,
|
|
2006
|
+
origin: this.el.tagName,
|
|
1739
2007
|
});
|
|
1740
2008
|
this.emitNativeValueChange();
|
|
1741
2009
|
return;
|
|
1742
2010
|
}
|
|
1743
|
-
if (this.
|
|
2011
|
+
if (this.selectionMode === 'range') {
|
|
1744
2012
|
const parsedRange = this.parseRangeInput(inputText);
|
|
1745
|
-
if (parsedRange === null)
|
|
2013
|
+
if (parsedRange === null) {
|
|
2014
|
+
this.emitInputValidation(false, this.getRangeValidationMessage(inputText));
|
|
2015
|
+
return;
|
|
2016
|
+
}
|
|
2017
|
+
if (this.mode === 'datetime' && compareAscExports.compareAsc(parsedRange.end, parsedRange.start) < 0) {
|
|
2018
|
+
this.emitInputValidation(false, DATETIME_RANGE_ORDER_MESSAGE);
|
|
1746
2019
|
return;
|
|
2020
|
+
}
|
|
1747
2021
|
const normalizedRange = this.normalizeRangeBounds(parsedRange.start, parsedRange.end);
|
|
2022
|
+
this.emitInputValidation(true);
|
|
1748
2023
|
this.rangeValue = normalizedRange;
|
|
1749
|
-
this.
|
|
2024
|
+
this.setInternalInputValue(`${this.formatDateByMode(normalizedRange.start)} - ${this.formatDateByMode(normalizedRange.end)}`);
|
|
1750
2025
|
this.value = normalizedRange.end;
|
|
1751
2026
|
this.dateStateChange.emit({
|
|
1752
2027
|
referenceDate: normalizedRange.end,
|
|
1753
2028
|
value: normalizedRange.end,
|
|
1754
2029
|
range: normalizedRange,
|
|
2030
|
+
origin: this.el.tagName,
|
|
1755
2031
|
});
|
|
1756
2032
|
this.emitNativeValueChange();
|
|
1757
2033
|
return;
|
|
1758
2034
|
}
|
|
2035
|
+
if (!this.isInputComplete(inputText)) {
|
|
2036
|
+
this.emitInputValidation(false, this.getInputValidationMessage(inputText));
|
|
2037
|
+
return;
|
|
2038
|
+
}
|
|
1759
2039
|
const parsed = this.parseInputValue(inputText);
|
|
1760
|
-
if (parsed === null)
|
|
2040
|
+
if (parsed === null) {
|
|
2041
|
+
this.emitInputValidation(false, this.getInputValidationMessage(inputText));
|
|
1761
2042
|
return;
|
|
2043
|
+
}
|
|
2044
|
+
this.emitInputValidation(true);
|
|
1762
2045
|
const newDate = new Date(parsed);
|
|
1763
2046
|
newDate.setSeconds(0, 0);
|
|
1764
|
-
this.
|
|
2047
|
+
this.setInternalInputValue(this.formatDateByMode(newDate));
|
|
1765
2048
|
this.value = newDate;
|
|
1766
2049
|
this.dateStateChange.emit({
|
|
1767
2050
|
referenceDate: newDate,
|
|
1768
2051
|
value: newDate,
|
|
2052
|
+
origin: this.el.tagName,
|
|
1769
2053
|
});
|
|
1770
2054
|
this.emitNativeValueChange();
|
|
1771
2055
|
}
|
|
2056
|
+
/**
|
|
2057
|
+
* Emite o resultado da validação textual sem alterar o valor selecionado.
|
|
2058
|
+
*
|
|
2059
|
+
* @param {boolean} valid - Indica se a entrada é válida.
|
|
2060
|
+
* @param {string} [message] - Mensagem de erro quando inválido.
|
|
2061
|
+
* @returns {void}
|
|
2062
|
+
*/
|
|
2063
|
+
emitInputValidation(valid, message = '') {
|
|
2064
|
+
this.inputValidationChange.emit({ valid, message: valid ? '' : message, origin: this.el.tagName });
|
|
2065
|
+
}
|
|
2066
|
+
/**
|
|
2067
|
+
* Verifica se a entrada possui a quantidade de dígitos esperada para o modo atual.
|
|
2068
|
+
*
|
|
2069
|
+
* @param {string} value - Texto de entrada a ser verificado.
|
|
2070
|
+
* @returns {boolean} - `true` quando completo.
|
|
2071
|
+
*/
|
|
2072
|
+
isInputComplete(value) {
|
|
2073
|
+
const digits = value.replace(/\D/g, '');
|
|
2074
|
+
const config = INPUT_FORMAT_CONFIG[this.mode];
|
|
2075
|
+
return config.acceptedDigitCounts.includes(digits.length);
|
|
2076
|
+
}
|
|
2077
|
+
/**
|
|
2078
|
+
* Retorna mensagem de validação contextual para uma entrada incompleta ou inválida.
|
|
2079
|
+
*
|
|
2080
|
+
* @param {string} value - Texto de entrada a ser avaliado.
|
|
2081
|
+
* @returns {string} - Mensagem de validação apropriada.
|
|
2082
|
+
*/
|
|
2083
|
+
getInputValidationMessage(value) {
|
|
2084
|
+
const digits = value.replace(/\D/g, '');
|
|
2085
|
+
const config = INPUT_FORMAT_CONFIG[this.mode];
|
|
2086
|
+
if (!config)
|
|
2087
|
+
return 'Informe um valor válido.';
|
|
2088
|
+
const digitCount = digits.length;
|
|
2089
|
+
if (this.mode === 'datetime' &&
|
|
2090
|
+
config.acceptedDigitCounts.includes(digitCount) &&
|
|
2091
|
+
digitCount < config.fullDigitCount) {
|
|
2092
|
+
return config.messages.invalid;
|
|
2093
|
+
}
|
|
2094
|
+
return digitCount < config.fullDigitCount ? config.messages.incomplete : config.messages.invalid;
|
|
2095
|
+
}
|
|
2096
|
+
/**
|
|
2097
|
+
* Mensagem específica para o formato de intervalo do modo atual.
|
|
2098
|
+
*
|
|
2099
|
+
* @param {string} value - Texto de intervalo informado no input.
|
|
2100
|
+
* @returns {string} - Mensagem de validação do intervalo.
|
|
2101
|
+
*/
|
|
2102
|
+
getRangeValidationMessage(value) {
|
|
2103
|
+
const [startRaw = '', endRaw = ''] = value.split(/\s*-\s*/, 2);
|
|
2104
|
+
const startDigits = startRaw.replace(/\D/g, '');
|
|
2105
|
+
const endDigits = endRaw.replace(/\D/g, '');
|
|
2106
|
+
const config = INPUT_FORMAT_CONFIG[this.mode];
|
|
2107
|
+
const expectedDigits = config.fullDigitCount;
|
|
2108
|
+
if (startDigits.length < expectedDigits || endDigits.length < expectedDigits) {
|
|
2109
|
+
return `Complete o intervalo no formato ${config.rangeFormat}.`;
|
|
2110
|
+
}
|
|
2111
|
+
return config.messages.invalidRange;
|
|
2112
|
+
}
|
|
2113
|
+
/**
|
|
2114
|
+
* Dispara eventos nativos `input` e `change` para compatibilidade com forms.
|
|
2115
|
+
*
|
|
2116
|
+
* @returns {void}
|
|
2117
|
+
*/
|
|
1772
2118
|
emitNativeValueChange() {
|
|
1773
2119
|
dispatchNativeFormEvent(this.el, 'input');
|
|
1774
2120
|
dispatchNativeFormEvent(this.el, 'change');
|
|
@@ -1790,55 +2136,90 @@ const DatetimeInput = class {
|
|
|
1790
2136
|
return null;
|
|
1791
2137
|
}
|
|
1792
2138
|
const base = this.referenceDate ?? toDateExports.toDate(new Date());
|
|
1793
|
-
const parsedStart = this.
|
|
1794
|
-
const parsedEnd = this.
|
|
2139
|
+
const parsedStart = this.parseInputValue(startText, this.rangeStart ?? base);
|
|
2140
|
+
const parsedEnd = this.parseInputValue(endText, this.rangeEnd ?? base);
|
|
1795
2141
|
if (parsedStart === null || parsedEnd === null) {
|
|
1796
2142
|
return null;
|
|
1797
2143
|
}
|
|
1798
2144
|
return { start: parsedStart, end: parsedEnd };
|
|
1799
2145
|
}
|
|
1800
|
-
/**
|
|
2146
|
+
/**
|
|
2147
|
+
* Normaliza os limites do intervalo para garantir ordem cronológica.
|
|
2148
|
+
*
|
|
2149
|
+
* - Em `time` e `datetime` mantém os limites informados.
|
|
2150
|
+
* - Em `date` reordena caso necessário.
|
|
2151
|
+
*
|
|
2152
|
+
* @param {Date} start - Data de início.
|
|
2153
|
+
* @param {Date} end - Data de término.
|
|
2154
|
+
* @returns {{ start: Date; end: Date }} - Limites normalizados.
|
|
2155
|
+
*/
|
|
1801
2156
|
normalizeRangeBounds(start, end) {
|
|
2157
|
+
if (this.mode !== 'date')
|
|
2158
|
+
return { start, end };
|
|
1802
2159
|
return compareAscExports.compareAsc(start, end) <= 0 ? { start, end } : { start: end, end: start };
|
|
1803
2160
|
}
|
|
1804
2161
|
/**
|
|
1805
|
-
* Sincroniza o texto do
|
|
2162
|
+
* Sincroniza o texto do input com as props `value`/`rangeStart`/`rangeEnd` e `mode`.
|
|
2163
|
+
*
|
|
2164
|
+
* @returns {void}
|
|
1806
2165
|
*/
|
|
1807
2166
|
syncInputValueFromProps() {
|
|
1808
|
-
if (this.
|
|
2167
|
+
if (this.selectionMode === 'range') {
|
|
1809
2168
|
if (this.rangeStart === null || this.rangeEnd === null) {
|
|
1810
|
-
this.
|
|
2169
|
+
this.setInternalInputValue('');
|
|
1811
2170
|
return;
|
|
1812
2171
|
}
|
|
1813
2172
|
const startFormatted = this.formatDateByMode(this.rangeStart);
|
|
1814
2173
|
const endFormatted = this.formatDateByMode(this.rangeEnd);
|
|
1815
|
-
this.
|
|
2174
|
+
this.setInternalInputValue(`${startFormatted} - ${endFormatted}`);
|
|
1816
2175
|
return;
|
|
1817
2176
|
}
|
|
1818
2177
|
if (this.value === null) {
|
|
1819
|
-
this.
|
|
2178
|
+
this.setInternalInputValue('');
|
|
1820
2179
|
return;
|
|
1821
2180
|
}
|
|
1822
|
-
this.
|
|
2181
|
+
this.setInternalInputValue(this.formatDateByMode(this.value));
|
|
2182
|
+
}
|
|
2183
|
+
/**
|
|
2184
|
+
* Retorna o elemento interno `<br-input>` quando disponível.
|
|
2185
|
+
*
|
|
2186
|
+
* @internal
|
|
2187
|
+
* @returns {HTMLBrInputElement | null} Elemento interno `<br-input>` ou `null` se não estiver disponível.
|
|
2188
|
+
*/
|
|
2189
|
+
getBrInputElement() {
|
|
2190
|
+
return this.el.shadowRoot?.querySelector('br-input');
|
|
2191
|
+
}
|
|
2192
|
+
/**
|
|
2193
|
+
* Define o valor interno do input imperativamente.
|
|
2194
|
+
*
|
|
2195
|
+
* @internal Define o valor interno do input sem re-renderizar o host.
|
|
2196
|
+
* @param {string} value Valor a ser definido no input interno.
|
|
2197
|
+
*/
|
|
2198
|
+
setInternalInputValue(value) {
|
|
2199
|
+
this.inputValue = value;
|
|
2200
|
+
const br = this.getBrInputElement();
|
|
2201
|
+
if (br) {
|
|
2202
|
+
// atualiza imperativamente o componente filho sem re-renderizar o host
|
|
2203
|
+
try {
|
|
2204
|
+
br.value = value;
|
|
2205
|
+
}
|
|
2206
|
+
catch { }
|
|
2207
|
+
}
|
|
1823
2208
|
}
|
|
1824
2209
|
/**
|
|
1825
2210
|
* Formata uma data de acordo com o modo atual do componente.
|
|
1826
2211
|
*
|
|
1827
|
-
* @param date - Data a ser formatada para exibição no input.
|
|
1828
|
-
* @returns Representação textual da data/hora no padrão esperado.
|
|
2212
|
+
* @param {Date} date - Data a ser formatada para exibição no input.
|
|
2213
|
+
* @returns {string} - Representação textual da data/hora no padrão esperado.
|
|
1829
2214
|
*/
|
|
1830
2215
|
formatDateByMode(date) {
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
return formatExports.format(date, 'dd/MM/yyyy');
|
|
1834
|
-
case 'time':
|
|
1835
|
-
return formatExports.format(date, 'HH:mm');
|
|
1836
|
-
default:
|
|
1837
|
-
return formatExports.format(date, 'dd/MM/yyyy HH:mm');
|
|
1838
|
-
}
|
|
2216
|
+
const config = INPUT_FORMAT_CONFIG[this.mode];
|
|
2217
|
+
return formatExports.format(date, config.displayFormat);
|
|
1839
2218
|
}
|
|
1840
2219
|
/**
|
|
1841
|
-
* Retorna
|
|
2220
|
+
* Retorna o mapa de classes CSS aplicado ao host do componente.
|
|
2221
|
+
*
|
|
2222
|
+
* @returns {CssClassMap}
|
|
1842
2223
|
*/
|
|
1843
2224
|
getCssClassMap() {
|
|
1844
2225
|
return {
|
|
@@ -1848,7 +2229,7 @@ const DatetimeInput = class {
|
|
|
1848
2229
|
/**
|
|
1849
2230
|
* Seleciona o ícone do campo conforme o modo de entrada ativo.
|
|
1850
2231
|
*
|
|
1851
|
-
* @returns Nome do ícone usado na ação lateral do input.
|
|
2232
|
+
* @returns {string} - Nome do ícone usado na ação lateral do input.
|
|
1852
2233
|
*/
|
|
1853
2234
|
getInputIcon() {
|
|
1854
2235
|
switch (this.mode) {
|
|
@@ -1861,11 +2242,11 @@ const DatetimeInput = class {
|
|
|
1861
2242
|
/**
|
|
1862
2243
|
* Converte o texto digitado em `Date` com base no modo configurado.
|
|
1863
2244
|
*
|
|
1864
|
-
* @param value - Texto informado pelo usuário no input.
|
|
1865
|
-
* @
|
|
2245
|
+
* @param {string} value - Texto informado pelo usuário no input.
|
|
2246
|
+
* @param {Date} [base] - Data base usada para completar valores parciais.
|
|
2247
|
+
* @returns {Date | null} - Data convertida ou `null` quando inválida.
|
|
1866
2248
|
*/
|
|
1867
|
-
parseInputValue(value) {
|
|
1868
|
-
const base = this.value ?? this.referenceDate ?? toDateExports.toDate(new Date());
|
|
2249
|
+
parseInputValue(value, base = this.value ?? this.referenceDate ?? toDateExports.toDate(new Date())) {
|
|
1869
2250
|
switch (this.mode) {
|
|
1870
2251
|
case 'date':
|
|
1871
2252
|
return this.parseDateInput(value, base);
|
|
@@ -1880,12 +2261,14 @@ const DatetimeInput = class {
|
|
|
1880
2261
|
/**
|
|
1881
2262
|
* Faz parse de uma data no formato `dd/MM/yyyy`, preservando hora e minuto base.
|
|
1882
2263
|
*
|
|
1883
|
-
* @param value - Texto de data digitado pelo usuário.
|
|
1884
|
-
* @param base - Data base usada para completar informações de tempo.
|
|
1885
|
-
* @returns Data válida normalizada ou `null` quando o parse falhar.
|
|
2264
|
+
* @param {string} value - Texto de data digitado pelo usuário.
|
|
2265
|
+
* @param {Date} base - Data base usada para completar informações de tempo.
|
|
2266
|
+
* @returns {Date | null} - Data válida normalizada ou `null` quando o parse falhar.
|
|
1886
2267
|
*/
|
|
1887
2268
|
parseDateInput(value, base) {
|
|
1888
|
-
const
|
|
2269
|
+
const config = INPUT_FORMAT_CONFIG[this.mode];
|
|
2270
|
+
const datePattern = config.parseFormats[0];
|
|
2271
|
+
const parsedDate = parseExports.parse(value, datePattern, base);
|
|
1889
2272
|
if (!isValidExports.isValid(parsedDate))
|
|
1890
2273
|
return null;
|
|
1891
2274
|
return setExports.set(parsedDate, {
|
|
@@ -1898,12 +2281,14 @@ const DatetimeInput = class {
|
|
|
1898
2281
|
/**
|
|
1899
2282
|
* Faz parse de hora no formato `HH:mm`, preservando o dia da data base.
|
|
1900
2283
|
*
|
|
1901
|
-
* @param value - Texto de hora digitado pelo usuário.
|
|
1902
|
-
* @param base - Data base usada para manter dia, mês e ano.
|
|
1903
|
-
* @returns Data válida com hora ajustada ou `null` quando inválida.
|
|
2284
|
+
* @param {string} value - Texto de hora digitado pelo usuário.
|
|
2285
|
+
* @param {Date} base - Data base usada para manter dia, mês e ano.
|
|
2286
|
+
* @returns {Date | null} - Data válida com hora ajustada ou `null` quando inválida.
|
|
1904
2287
|
*/
|
|
1905
2288
|
parseTimeInput(value, base) {
|
|
1906
|
-
const
|
|
2289
|
+
const config = INPUT_FORMAT_CONFIG[this.mode];
|
|
2290
|
+
const timePattern = config.parseFormats[0];
|
|
2291
|
+
const parsedTime = parseExports.parse(value, timePattern, base);
|
|
1907
2292
|
if (!isValidExports.isValid(parsedTime))
|
|
1908
2293
|
return null;
|
|
1909
2294
|
return setExports.set(base, {
|
|
@@ -1914,20 +2299,23 @@ const DatetimeInput = class {
|
|
|
1914
2299
|
});
|
|
1915
2300
|
}
|
|
1916
2301
|
/**
|
|
1917
|
-
* Faz parse de data e hora completas,
|
|
2302
|
+
* Faz parse de data e hora completas, aceitando somente a data como fallback.
|
|
1918
2303
|
*
|
|
1919
|
-
* @param value - Texto digitado no input.
|
|
1920
|
-
* @param base - Data base usada como contexto para completar o parse.
|
|
1921
|
-
* @returns Data válida a partir da entrada ou `null` quando não reconhecida.
|
|
2304
|
+
* @param {string} value - Texto digitado no input.
|
|
2305
|
+
* @param {Date} base - Data base usada como contexto para completar o parse.
|
|
2306
|
+
* @returns {Date | null} - Data válida a partir da entrada ou `null` quando não reconhecida.
|
|
1922
2307
|
*/
|
|
1923
2308
|
parseDateTimeInput(value, base) {
|
|
2309
|
+
const config = INPUT_FORMAT_CONFIG[this.mode];
|
|
2310
|
+
const fullPattern = config.parseFormats[0];
|
|
2311
|
+
const fallbackDatePattern = config.parseFormats[1];
|
|
1924
2312
|
// data + hora
|
|
1925
|
-
const full = parseExports.parse(value,
|
|
2313
|
+
const full = parseExports.parse(value, fullPattern, base);
|
|
1926
2314
|
if (isValidExports.isValid(full))
|
|
1927
2315
|
return full;
|
|
1928
|
-
//
|
|
1929
|
-
const date =
|
|
1930
|
-
if (date
|
|
2316
|
+
// somente data -> preserva a hora da data base
|
|
2317
|
+
const date = parseExports.parse(value, fallbackDatePattern, base);
|
|
2318
|
+
if (isValidExports.isValid(date)) {
|
|
1931
2319
|
return setExports.set(date, {
|
|
1932
2320
|
hours: getHoursExports.getHours(base),
|
|
1933
2321
|
minutes: getMinutesExports.getMinutes(base),
|
|
@@ -1935,14 +2323,7 @@ const DatetimeInput = class {
|
|
|
1935
2323
|
milliseconds: 0,
|
|
1936
2324
|
});
|
|
1937
2325
|
}
|
|
1938
|
-
|
|
1939
|
-
return this.parseTimeInput(value, base);
|
|
1940
|
-
}
|
|
1941
|
-
/**
|
|
1942
|
-
* Renderiza o campo textual e o ícone de ação do datetime input.
|
|
1943
|
-
*/
|
|
1944
|
-
renderInputField() {
|
|
1945
|
-
return (h("br-input", { type: "text", value: this.inputValue, placeholder: this.placeholder, disabled: this.disabled, actionLabel: this.getToggleAriaLabel(), onInput: this.handleInputChange, onKeyDown: this.handleInputKeydown, "aria-label": this.getInputAriaLabel(), part: "input" }, h("br-icon", { slot: "action", iconName: this.getInputIcon(), width: "16", height: "16", "aria-hidden": "true", onClick: this.handleToggleDropdown, part: "icon" })));
|
|
2326
|
+
return null;
|
|
1946
2327
|
}
|
|
1947
2328
|
/**
|
|
1948
2329
|
* Retorna o rótulo acessível do campo de entrada de acordo com o modo ativo.
|
|
@@ -1959,11 +2340,19 @@ const DatetimeInput = class {
|
|
|
1959
2340
|
return 'Campo de data e hora';
|
|
1960
2341
|
}
|
|
1961
2342
|
}
|
|
2343
|
+
/**
|
|
2344
|
+
* Renderiza o campo textual e o ícone de ação do datetime input.
|
|
2345
|
+
*
|
|
2346
|
+
* @returns {JSX.Element}
|
|
2347
|
+
*/
|
|
2348
|
+
renderInputField() {
|
|
2349
|
+
return (h("br-input", { type: "text", mask: this.getInputMask(), placeholder: this.placeholder, disabled: this.disabled, actionLabel: this.getToggleAriaLabel(), onInput: this.handleInputChange, onChange: this.handleInputCommit, onBlur: this.handleInputBlur, onKeyDown: this.handleInputKeydown, onBrInputActionClick: this.handleActionButtonClick, "aria-label": this.getInputAriaLabel(), part: "input" }, h("br-icon", { slot: "action", iconName: this.getInputIcon(), width: "16", height: "16", "aria-hidden": "true", part: "icon" })));
|
|
2350
|
+
}
|
|
1962
2351
|
/**
|
|
1963
2352
|
* Renderização principal do componente.
|
|
1964
2353
|
*/
|
|
1965
2354
|
render() {
|
|
1966
|
-
return (h(Host, { key: '
|
|
2355
|
+
return (h(Host, { key: 'dd5b4fa7df2b33edc9c262b4d7cf0d161ae195b8' }, h("div", { key: '83035393364d795eeb46f7a9f03309e33d53aa42', class: this.getCssClassMap(), part: "container" }, this.renderInputField())));
|
|
1967
2356
|
}
|
|
1968
2357
|
static get delegatesFocus() { return true; }
|
|
1969
2358
|
get el() { return getElement(this); }
|
|
@@ -2221,57 +2610,79 @@ function requireSubMinutes () {
|
|
|
2221
2610
|
var subMinutesExports = /*@__PURE__*/ requireSubMinutes();
|
|
2222
2611
|
|
|
2223
2612
|
/**
|
|
2224
|
-
* Conjunto
|
|
2613
|
+
* Conjunto imutável dos campos suportados pelo `br-time-picker`.
|
|
2225
2614
|
*
|
|
2226
|
-
*
|
|
2615
|
+
* @readonly
|
|
2616
|
+
* @constant {Readonly<Record<string, string>>}
|
|
2227
2617
|
*/
|
|
2228
2618
|
const INPUT_TIME_TYPE = {
|
|
2229
2619
|
HOUR: 'hour',
|
|
2230
2620
|
MINUTE: 'minute',
|
|
2231
2621
|
};
|
|
2232
2622
|
|
|
2233
|
-
const timePickerCss = () => `*,*::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}code{font-family:monospace;font-size:1em}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)}code,.code{background:var(--gray-5);border-radius:4px;color:var(--gray-80);display:inline-block;font-family:monospace;font-size:var(--font-size-scale-base);font-weight:var(--font-weight-medium);line-height:var(--font-line-height-low);padding: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)}pre code,.pre code{display:inline;padding:0}*[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}:host{display:block;width:100%;max-width:144px;height:116px;margin-inline:auto;box-sizing:border-box}.br-time-picker{display:flex;justify-content:center;align-items:center;width:100%;height:100%;box-sizing:border-box}.timer{display:flex;flex-direction:row;justify-content:center;align-items:center;gap:var(--spacing-scale-sm);width:100%;box-sizing:border-box}.time-field{display:flex;flex-direction:column;align-items:center;justify-content:flex-end}.time-field label{font-size:var(--font-size-scale-down-01);color:var(--gray-70);margin-bottom:4px}.time-field input{width:var(--spacing-scale-6x);height:var(--spacing-scale-6x);padding:4px;font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-semi-bold);text-align:center;border-color:var(--border-color-alternative);border-radius:var(--surface-rounder-sm);border-style:var(--border-style);border-width:var(--border-width)}.time-field input:hover{background:linear-gradient(rgb(var(--color-rgb), var(--hover)), rgb(var(--color-rgb), var(--hover)))}.time-separator{display:inline-block;font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-semi-bold);color:var(--gray-70);align-self:center;line-height:1;padding:0 var(--spacing-scale-base)}`;
|
|
2623
|
+
const timePickerCss = () => `*,*::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}:host{display:block;width:100%;max-width:144px;height:116px;margin-inline:auto;box-sizing:border-box}.br-time-picker{display:flex;justify-content:center;align-items:center;width:100%;height:100%;box-sizing:border-box}.timer{display:flex;flex-direction:row;justify-content:center;align-items:center;gap:var(--spacing-scale-sm);width:100%;box-sizing:border-box}.time-field{display:flex;flex-direction:column;align-items:center;justify-content:flex-end}.time-field label{font-size:var(--font-size-scale-down-01);color:var(--gray-70);margin-bottom:4px}.time-field input{width:var(--spacing-scale-6x);height:var(--spacing-scale-6x);padding:4px;font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-semi-bold);text-align:center;border-color:var(--border-color-alternative);border-radius:var(--surface-rounder-sm);border-style:var(--border-style);border-width:var(--border-width)}.time-field input:hover{background:linear-gradient(rgb(var(--color-rgb), var(--hover)), rgb(var(--color-rgb), var(--hover)))}.time-separator{display:inline-block;font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-semi-bold);color:var(--gray-70);align-self:center;line-height:1;padding:0 var(--spacing-scale-base)}`;
|
|
2234
2624
|
|
|
2235
2625
|
const TimePicker = class {
|
|
2236
2626
|
constructor(hostRef) {
|
|
2237
2627
|
registerInstance(this, hostRef);
|
|
2238
2628
|
this.dateStateChange = createEvent(this, "dateStateChange", 7);
|
|
2239
|
-
/** Mantém o rascunho digitado por campo para evitar aplicar valor parcial prematuramente. */
|
|
2240
|
-
this.timeDraft = {};
|
|
2241
2629
|
/**
|
|
2242
|
-
* Data
|
|
2243
|
-
* Recebe uma instância de `Date` por property binding; valores inválidos usam a data atual.
|
|
2630
|
+
* Data de referência usada para exibir e ajustar hora e minuto.
|
|
2244
2631
|
*
|
|
2245
|
-
* @
|
|
2246
|
-
* ```js
|
|
2247
|
-
* const timePicker = document.querySelector('br-time-picker');
|
|
2248
|
-
* timePicker.referenceDate = new Date(2026, 8, 7, 9);
|
|
2249
|
-
* ```
|
|
2632
|
+
* @default new Date()
|
|
2250
2633
|
*/
|
|
2251
2634
|
this.referenceDate = new Date();
|
|
2252
2635
|
/**
|
|
2253
|
-
*
|
|
2254
|
-
* Recebe uma instância de `Date` por property binding; datas inválidas usam `null`.
|
|
2636
|
+
* Valor selecionado pelo usuário.
|
|
2255
2637
|
*
|
|
2256
|
-
* @
|
|
2257
|
-
* ```js
|
|
2258
|
-
* const timePicker = document.querySelector('br-time-picker');
|
|
2259
|
-
* timePicker.value = new Date(2026, 8, 7, 14, 30);
|
|
2260
|
-
* ```
|
|
2638
|
+
* @default null
|
|
2261
2639
|
*/
|
|
2262
2640
|
this.value = null;
|
|
2263
|
-
/**
|
|
2641
|
+
/**
|
|
2642
|
+
* Indica se os controles do seletor estão desabilitados.
|
|
2643
|
+
*
|
|
2644
|
+
* @default false
|
|
2645
|
+
*/
|
|
2264
2646
|
this.disabled = false;
|
|
2265
|
-
/**
|
|
2647
|
+
/**
|
|
2648
|
+
* Rascunho dos valores digitados por cada campo (`hour` | `minute`).
|
|
2649
|
+
* Mantém entradas parciais até o commit por blur/Enter.
|
|
2650
|
+
*/
|
|
2651
|
+
this.timeDraft = {};
|
|
2652
|
+
/**
|
|
2653
|
+
* Mapa memorizado de handlers para o evento `input` por tipo de campo.
|
|
2654
|
+
*
|
|
2655
|
+
* Motivo: evita recriar closures a cada render, reduz alocação e mantém
|
|
2656
|
+
* identidade das funções (útil para comparação/remoção quando necessário).
|
|
2657
|
+
*
|
|
2658
|
+
* @private
|
|
2659
|
+
* @type {Map<InputTimeType, (event: Event) => void>}
|
|
2660
|
+
*/
|
|
2266
2661
|
this.timeInputChangeHandlers = new Map();
|
|
2267
|
-
/**
|
|
2662
|
+
/**
|
|
2663
|
+
* Mapa memorizado de handlers de commit (blur/confirm) por tipo de campo.
|
|
2664
|
+
*
|
|
2665
|
+
* Contém funções que finalizam o rascunho e aplicam o valor via
|
|
2666
|
+
* `handleTimeInputCommit(type)`.
|
|
2667
|
+
*
|
|
2668
|
+
* @private
|
|
2669
|
+
* @type {Map<InputTimeType, () => void>}
|
|
2670
|
+
*/
|
|
2268
2671
|
this.timeInputCommitHandlers = new Map();
|
|
2269
|
-
/**
|
|
2672
|
+
/**
|
|
2673
|
+
* Mapa memorizado de handlers de teclado por tipo de campo.
|
|
2674
|
+
*
|
|
2675
|
+
* Suporta comportamento de `Enter` (confirma) e setas para ajuste.
|
|
2676
|
+
* Memorizar evita recriar closures e melhora performance em re-renders.
|
|
2677
|
+
*
|
|
2678
|
+
* @private
|
|
2679
|
+
* @type {Map<InputTimeType, (event: KeyboardEvent) => void>}
|
|
2680
|
+
*/
|
|
2270
2681
|
this.timeInputKeydownHandlers = new Map();
|
|
2271
2682
|
/**
|
|
2272
2683
|
* Executa a navegação associada ao botão clicado.
|
|
2273
2684
|
*
|
|
2274
|
-
* @param event - Clique disparado pelo botão de navegação.
|
|
2685
|
+
* @param {MouseEvent} event - Clique disparado pelo botão de navegação.
|
|
2275
2686
|
*/
|
|
2276
2687
|
this.handleNavigationClick = (event) => {
|
|
2277
2688
|
if (this.disabled) {
|
|
@@ -2301,8 +2712,8 @@ const TimePicker = class {
|
|
|
2301
2712
|
/**
|
|
2302
2713
|
* Atualiza o rascunho do campo removendo qualquer caractere não numérico.
|
|
2303
2714
|
*
|
|
2304
|
-
* @param event - Evento de input do campo de hora ou minuto.
|
|
2305
|
-
* @param type - Campo que está sendo editado.
|
|
2715
|
+
* @param {Event} event - Evento de input do campo de hora ou minuto.
|
|
2716
|
+
* @param {InputTimeType} type - Campo que está sendo editado.
|
|
2306
2717
|
*/
|
|
2307
2718
|
this.handleTimeInputChange = (event, type) => {
|
|
2308
2719
|
if (this.disabled) {
|
|
@@ -2313,41 +2724,38 @@ const TimePicker = class {
|
|
|
2313
2724
|
this.timeDraft = { ...this.timeDraft, [type]: value };
|
|
2314
2725
|
};
|
|
2315
2726
|
}
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
|
|
2727
|
+
/**
|
|
2728
|
+
* Sincroniza `referenceDate` quando a prop `value` muda.
|
|
2729
|
+
*
|
|
2730
|
+
* Normaliza segundos/milissegundos e restaura rascunhos locais.
|
|
2731
|
+
*
|
|
2732
|
+
* @param {Date | null} newValue - Novo valor vindo da prop `value`.
|
|
2733
|
+
* @returns {void}
|
|
2734
|
+
*/
|
|
2322
2735
|
handleValueChange(newValue) {
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2736
|
+
if (newValue === null || !(newValue instanceof Date) || Number.isNaN(newValue.getTime())) {
|
|
2737
|
+
return;
|
|
2738
|
+
}
|
|
2739
|
+
const normalizedValue = setExports.set(toDateExports.toDate(newValue), { seconds: 0, milliseconds: 0 });
|
|
2740
|
+
if (this.referenceDate.getTime() !== normalizedValue.getTime()) {
|
|
2741
|
+
this.referenceDate = normalizedValue;
|
|
2742
|
+
}
|
|
2743
|
+
this.timeDraft = {};
|
|
2327
2744
|
}
|
|
2328
2745
|
componentWillLoad() {
|
|
2329
|
-
this.referenceDate = this.normalizeDateProp(this.referenceDate, 'referenceDate', new Date());
|
|
2330
|
-
this.value = this.normalizeDateProp(this.value, 'value', null);
|
|
2331
2746
|
this.referenceDate = resolveSsrLocalDate(this.el, this.referenceDate);
|
|
2332
2747
|
}
|
|
2333
|
-
normalizeDateProp(value, propertyName, fallback) {
|
|
2334
|
-
if (value === null && fallback === null)
|
|
2335
|
-
return null;
|
|
2336
|
-
if (value instanceof Date && !Number.isNaN(value.getTime()))
|
|
2337
|
-
return toDateExports.toDate(value);
|
|
2338
|
-
reportInvalidPropValue(this.el, propertyName, value, 'Informe uma instância de Date válida.', `Aplicando fallback ${fallback === null ? 'null' : 'new Date()'}.`);
|
|
2339
|
-
return fallback === null ? null : toDateExports.toDate(fallback);
|
|
2340
|
-
}
|
|
2341
2748
|
/**
|
|
2342
2749
|
* Emite o estado consolidado para manter hora, minuto e data sincronizados.
|
|
2343
2750
|
*
|
|
2344
|
-
* @param nextReferenceDate - Nova data de referência após a interação.
|
|
2345
|
-
* @param nextValue - Valor final selecionado; quando omitido, assume a data de referência.
|
|
2751
|
+
* @param {Date} nextReferenceDate - Nova data de referência após a interação.
|
|
2752
|
+
* @param {Date | null} nextValue - Valor final selecionado; quando omitido, assume a data de referência.
|
|
2346
2753
|
*/
|
|
2347
2754
|
emitDateStateChange(nextReferenceDate, nextValue = toDateExports.toDate(new Date(nextReferenceDate))) {
|
|
2348
2755
|
// Ao emitir, garantir segundos zerados (componente não controla segundos)
|
|
2349
2756
|
const normalizedReference = setExports.set(nextReferenceDate, { seconds: 0, milliseconds: 0 });
|
|
2350
2757
|
const normalizedValue = nextValue === null ? null : setExports.set(nextValue, { seconds: 0, milliseconds: 0 });
|
|
2758
|
+
this.referenceDate = normalizedReference;
|
|
2351
2759
|
this.value = normalizedValue;
|
|
2352
2760
|
this.dateStateChange.emit({
|
|
2353
2761
|
referenceDate: normalizedReference,
|
|
@@ -2359,8 +2767,8 @@ const TimePicker = class {
|
|
|
2359
2767
|
/**
|
|
2360
2768
|
* Resolve o ícone associado à ação de navegação.
|
|
2361
2769
|
*
|
|
2362
|
-
* @param action - Ação representada pelo botão.
|
|
2363
|
-
* @returns O nome do ícone ou uma string vazia quando a ação não é reconhecida.
|
|
2770
|
+
* @param {NavigationAction} action - Ação representada pelo botão.
|
|
2771
|
+
* @returns {string} O nome do ícone ou uma string vazia quando a ação não é reconhecida.
|
|
2364
2772
|
*/
|
|
2365
2773
|
getIconForAction(action) {
|
|
2366
2774
|
switch (action) {
|
|
@@ -2377,7 +2785,7 @@ const TimePicker = class {
|
|
|
2377
2785
|
/**
|
|
2378
2786
|
* Aplica o valor digitado ao estado do componente quando o campo é concluído.
|
|
2379
2787
|
*
|
|
2380
|
-
* @param type - Campo que será aplicado.
|
|
2788
|
+
* @param {InputTimeType} type - Campo que será aplicado.
|
|
2381
2789
|
*/
|
|
2382
2790
|
handleTimeInputCommit(type) {
|
|
2383
2791
|
if (this.disabled) {
|
|
@@ -2407,8 +2815,8 @@ const TimePicker = class {
|
|
|
2407
2815
|
/**
|
|
2408
2816
|
* Constrói o rótulo acessível das ações de navegação com base no valor atual.
|
|
2409
2817
|
*
|
|
2410
|
-
* @param action - Ação que o botão executa.
|
|
2411
|
-
* @returns Texto acessível do botão.
|
|
2818
|
+
* @param {NavigationAction} action - Ação que o botão executa.
|
|
2819
|
+
* @returns {string} Texto acessível do botão.
|
|
2412
2820
|
*/
|
|
2413
2821
|
getNavigationAriaLabel(action) {
|
|
2414
2822
|
switch (action) {
|
|
@@ -2532,6 +2940,13 @@ const TimePicker = class {
|
|
|
2532
2940
|
}
|
|
2533
2941
|
return handler;
|
|
2534
2942
|
}
|
|
2943
|
+
/**
|
|
2944
|
+
* Ajusta o valor do campo via teclado (ArrowUp/ArrowDown).
|
|
2945
|
+
*
|
|
2946
|
+
* @param event - Evento de teclado que disparou a ação.
|
|
2947
|
+
* @param type - Tipo do campo (`hour` | `minute`) a ser ajustado.
|
|
2948
|
+
* @returns void
|
|
2949
|
+
*/
|
|
2535
2950
|
adjustTimeInputWithKeyboard(event, type) {
|
|
2536
2951
|
if (event.key !== 'ArrowUp' && event.key !== 'ArrowDown')
|
|
2537
2952
|
return;
|
|
@@ -2542,22 +2957,38 @@ const TimePicker = class {
|
|
|
2542
2957
|
}
|
|
2543
2958
|
type === INPUT_TIME_TYPE.HOUR ? this.decreaseHour() : this.decreaseMinute();
|
|
2544
2959
|
}
|
|
2545
|
-
/**
|
|
2960
|
+
/**
|
|
2961
|
+
* Incrementa a hora sem alterar os demais componentes da data.
|
|
2962
|
+
*
|
|
2963
|
+
* @returns void
|
|
2964
|
+
*/
|
|
2546
2965
|
increaseHour() {
|
|
2547
2966
|
const date = addHoursExports.addHours(this.referenceDate, 1);
|
|
2548
2967
|
this.emitDateStateChange(date);
|
|
2549
2968
|
}
|
|
2550
|
-
/**
|
|
2969
|
+
/**
|
|
2970
|
+
* Incrementa o minuto sem alterar os demais componentes da data.
|
|
2971
|
+
*
|
|
2972
|
+
* @returns void
|
|
2973
|
+
*/
|
|
2551
2974
|
increaseMinute() {
|
|
2552
2975
|
const date = addMinutesExports.addMinutes(this.referenceDate, 1);
|
|
2553
2976
|
this.emitDateStateChange(date);
|
|
2554
2977
|
}
|
|
2555
|
-
/**
|
|
2978
|
+
/**
|
|
2979
|
+
* Decrementa a hora sem alterar os demais componentes da data.
|
|
2980
|
+
*
|
|
2981
|
+
* @returns void
|
|
2982
|
+
*/
|
|
2556
2983
|
decreaseHour() {
|
|
2557
2984
|
const date = subHoursExports.subHours(this.referenceDate, 1);
|
|
2558
2985
|
this.emitDateStateChange(date);
|
|
2559
2986
|
}
|
|
2560
|
-
/**
|
|
2987
|
+
/**
|
|
2988
|
+
* Decrementa o minuto sem alterar os demais componentes da data.
|
|
2989
|
+
*
|
|
2990
|
+
* @returns void
|
|
2991
|
+
*/
|
|
2561
2992
|
decreaseMinute() {
|
|
2562
2993
|
const date = subMinutesExports.subMinutes(this.referenceDate, 1);
|
|
2563
2994
|
this.emitDateStateChange(date);
|
|
@@ -2565,32 +2996,40 @@ const TimePicker = class {
|
|
|
2565
2996
|
/**
|
|
2566
2997
|
* Renderiza um botão de navegação consistente para hora ou minuto.
|
|
2567
2998
|
*
|
|
2568
|
-
* @param action - Ação que o botão executará.
|
|
2999
|
+
* @param {NavigationAction} action - Ação que o botão executará.
|
|
3000
|
+
* @returns {JSX.Element}
|
|
2569
3001
|
*/
|
|
2570
3002
|
renderNavigationButton(action) {
|
|
2571
3003
|
return (h("br-button", { type: "button", emphasis: "tertiary", density: "small", shape: "circle", disabled: this.disabled, "data-action": action, "aria-label": this.getNavigationAriaLabel(action), onClick: this.handleNavigationClick }, h("br-icon", { iconName: this.getIconForAction(action), width: "20", height: "20", "aria-hidden": "true" })));
|
|
2572
3004
|
}
|
|
2573
|
-
/**
|
|
3005
|
+
/**
|
|
3006
|
+
* Renderiza o bloco completo de hora e minuto.
|
|
3007
|
+
*
|
|
3008
|
+
* @returns {JSX.Element}
|
|
3009
|
+
*/
|
|
2574
3010
|
renderTimePicker() {
|
|
2575
3011
|
return (h("div", { class: "timer", role: "group", "aria-label": "Seletor de hora e minuto", part: "timer" }, this.renderTimeField(INPUT_TIME_TYPE.HOUR), h("span", { class: "time-separator", "aria-hidden": "true", part: "separator" }, ":"), this.renderTimeField(INPUT_TIME_TYPE.MINUTE)));
|
|
2576
3012
|
}
|
|
2577
3013
|
/**
|
|
2578
3014
|
* Renderiza um campo de edição com navegação lateral.
|
|
2579
3015
|
*
|
|
2580
|
-
* @param type - Tipo do campo a ser exibido.
|
|
3016
|
+
* @param {InputTimeType} type - Tipo do campo a ser exibido.
|
|
3017
|
+
* @returns {JSX.Element}
|
|
2581
3018
|
*/
|
|
2582
3019
|
renderTimeField(type) {
|
|
2583
3020
|
const { nextAction, prevAction } = this.getTimeFieldConfig(type);
|
|
2584
3021
|
return (h("div", { class: "time-field", part: "field" }, this.renderNavigationButton(nextAction), h("input", { type: "text", inputmode: "numeric", maxLength: 2, value: this.timeDraft[type] ?? this.getTimeFieldValue(type), "aria-label": this.getTimeFieldAriaLabel(type), onInput: this.getTimeInputChangeHandler(type), onBlur: this.getTimeInputCommitHandler(type), onKeyDown: this.getTimeInputKeydownHandler(type), disabled: this.disabled, part: "input" }), this.renderNavigationButton(prevAction)));
|
|
2585
3022
|
}
|
|
3023
|
+
/**
|
|
3024
|
+
* Render principal do componente.
|
|
3025
|
+
*
|
|
3026
|
+
* @returns {JSX.Element}
|
|
3027
|
+
*/
|
|
2586
3028
|
render() {
|
|
2587
|
-
return (h(Host, { key: '
|
|
3029
|
+
return (h(Host, { key: 'e81125092811d06b37cdd61d562998de83020880' }, h("div", { key: 'df218ea0cc8424f55ed0689e5479ef47cdbee74c', class: "br-time-picker", part: "container" }, this.renderTimePicker())));
|
|
2588
3030
|
}
|
|
2589
3031
|
get el() { return getElement(this); }
|
|
2590
3032
|
static get watchers() { return {
|
|
2591
|
-
"referenceDate": [{
|
|
2592
|
-
"handleReferenceDateChange": 0
|
|
2593
|
-
}],
|
|
2594
3033
|
"value": [{
|
|
2595
3034
|
"handleValueChange": 0
|
|
2596
3035
|
}]
|