@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.
Files changed (787) hide show
  1. package/README.md +2 -2
  2. package/cem/custom-elements.json +1764 -1575
  3. package/cem/webcomponents.html-custom-data.json +194 -163
  4. package/dist/cjs/br-avatar.cjs.entry.js +3 -3
  5. package/dist/cjs/br-breadcrumb-item.cjs.entry.js +1 -1
  6. package/dist/cjs/br-breadcrumb.cjs.entry.js +3 -3
  7. package/dist/cjs/br-button_2.cjs.entry.js +4 -4
  8. package/dist/cjs/br-card.cjs.entry.js +3 -3
  9. package/dist/cjs/br-carousel-page.cjs.entry.js +2 -2
  10. package/dist/cjs/br-carousel.cjs.entry.js +2 -2
  11. package/dist/cjs/br-checkbox-group.cjs.entry.js +3 -3
  12. package/dist/cjs/br-checkbox.cjs.entry.js +4 -4
  13. package/dist/cjs/br-checkgroup.cjs.entry.js +1 -1
  14. package/dist/cjs/br-collapse_2.cjs.entry.js +5 -5
  15. package/dist/cjs/br-cookiebar-cookie.cjs.entry.js +2 -2
  16. package/dist/cjs/br-cookiebar-group.cjs.entry.js +2 -2
  17. package/dist/cjs/br-cookiebar-header.cjs.entry.js +2 -2
  18. package/dist/cjs/br-cookiebar-link.cjs.entry.js +2 -2
  19. package/dist/cjs/br-cookiebar-note-group.cjs.entry.js +1 -1
  20. package/dist/cjs/br-cookiebar-note.cjs.entry.js +2 -2
  21. package/dist/cjs/br-cookiebar.cjs.entry.js +3 -3
  22. package/dist/cjs/br-crumb.cjs.entry.js +1 -1
  23. package/dist/cjs/br-date-picker_3.cjs.entry.js +984 -545
  24. package/dist/cjs/br-datetime-picker.cjs.entry.js +1346 -310
  25. package/dist/cjs/br-divider.cjs.entry.js +3 -3
  26. package/dist/cjs/br-dropdown_2.cjs.entry.js +282 -139
  27. package/dist/cjs/br-footer-category.cjs.entry.js +3 -3
  28. package/dist/cjs/br-footer-item.cjs.entry.js +2 -2
  29. package/dist/cjs/br-footer-legal.cjs.entry.js +2 -2
  30. package/dist/cjs/br-footer-logo.cjs.entry.js +2 -2
  31. package/dist/cjs/br-footer-social.cjs.entry.js +2 -2
  32. package/dist/cjs/br-footer.cjs.entry.js +4 -4
  33. package/dist/cjs/br-header-function.cjs.entry.js +2 -2
  34. package/dist/cjs/br-header-link.cjs.entry.js +2 -2
  35. package/dist/cjs/br-header-list.cjs.entry.js +2 -2
  36. package/dist/cjs/br-header-logo.cjs.entry.js +2 -2
  37. package/dist/cjs/br-header.cjs.entry.js +2 -2
  38. package/dist/cjs/br-icon.cjs.entry.js +3 -3
  39. package/dist/cjs/br-input.cjs.entry.js +64 -10
  40. package/dist/cjs/br-item.cjs.entry.js +3 -3
  41. package/dist/cjs/br-link.cjs.entry.js +8 -8
  42. package/dist/cjs/br-loading.cjs.entry.js +2 -2
  43. package/dist/cjs/br-magic-button.cjs.entry.js +2 -2
  44. package/dist/cjs/br-menu-group.cjs.entry.js +2 -2
  45. package/dist/cjs/br-menu-header.cjs.entry.js +2 -2
  46. package/dist/cjs/br-menu-info.cjs.entry.js +2 -2
  47. package/dist/cjs/br-menu-item.cjs.entry.js +2 -2
  48. package/dist/cjs/br-menu-link.cjs.entry.js +2 -2
  49. package/dist/cjs/br-menu-list.cjs.entry.js +1 -1
  50. package/dist/cjs/br-menu-logo.cjs.entry.js +2 -2
  51. package/dist/cjs/br-menu-social.cjs.entry.js +1 -1
  52. package/dist/cjs/br-menu.cjs.entry.js +4 -4
  53. package/dist/cjs/br-modal.cjs.entry.js +1 -1
  54. package/dist/cjs/br-notification-body.cjs.entry.js +2 -2
  55. package/dist/cjs/br-notification-header.cjs.entry.js +2 -2
  56. package/dist/cjs/br-notification-item.cjs.entry.js +2 -2
  57. package/dist/cjs/br-notification.cjs.entry.js +3 -3
  58. package/dist/cjs/br-pagination.cjs.entry.js +3 -3
  59. package/dist/cjs/br-radio-group.cjs.entry.js +4 -4
  60. package/dist/cjs/br-radio.cjs.entry.js +4 -4
  61. package/dist/cjs/br-scrim.cjs.entry.js +3 -3
  62. package/dist/cjs/br-select-input_3.cjs.entry.js +308 -101
  63. package/dist/cjs/br-sign-in.cjs.entry.js +3 -3
  64. package/dist/cjs/br-skip-link-item.cjs.entry.js +1 -1
  65. package/dist/cjs/br-skip-link.cjs.entry.js +2 -2
  66. package/dist/cjs/br-skiplink-item.cjs.entry.js +2 -2
  67. package/dist/cjs/br-slider.cjs.entry.js +3 -3
  68. package/dist/cjs/br-step_2.cjs.entry.js +6 -6
  69. package/dist/cjs/br-switch.cjs.entry.js +4 -4
  70. package/dist/cjs/br-tab-item.cjs.entry.js +2 -2
  71. package/dist/cjs/br-tab.cjs.entry.js +4 -4
  72. package/dist/cjs/br-table-body.cjs.entry.js +2 -2
  73. package/dist/cjs/br-table-cell.cjs.entry.js +2 -2
  74. package/dist/cjs/br-table-header-cell.cjs.entry.js +2 -2
  75. package/dist/cjs/br-table-header.cjs.entry.js +2 -2
  76. package/dist/cjs/br-table-row.cjs.entry.js +2 -2
  77. package/dist/cjs/br-table.cjs.entry.js +2 -2
  78. package/dist/cjs/br-tag.cjs.entry.js +4 -4
  79. package/dist/cjs/br-textarea.cjs.entry.js +3 -3
  80. package/dist/cjs/br-tooltip.cjs.entry.js +2 -2
  81. package/dist/cjs/br-upload.cjs.entry.js +8 -24
  82. package/dist/cjs/br-wizard-panel.cjs.entry.js +2 -2
  83. package/dist/cjs/br-wizard.cjs.entry.js +2 -2
  84. package/dist/cjs/{datetime-picker-constants-B5pWeOn1.js → datetime-picker-constants-CTf1kVJ1.js} +21 -5
  85. package/dist/cjs/format-bytes-Cs8SH2w0.js +24 -0
  86. package/dist/cjs/{iconify-icon-DfODV9bf.js → iconify-icon-LjavbM-D.js} +103 -57
  87. package/dist/cjs/index-Bc30P_6z.js +14 -14
  88. package/dist/cjs/{index-C92n55ch.js → index-Caoez3xb.js} +75 -27
  89. package/dist/cjs/index.cjs.js +2 -2
  90. package/dist/cjs/{datetime-picker-props-validation-DmNKSXsy.js → isValid-DgJ-noPS.js} +1 -483
  91. package/dist/cjs/loader.cjs.js +1 -1
  92. package/dist/cjs/select.utils-C38f5Kea.js +62 -0
  93. package/dist/cjs/{slot-DAllytTj.js → slot-CjaqqX7y.js} +1 -1
  94. package/dist/cjs/webcomponents.cjs.js +1 -1
  95. package/dist/collection/components/avatar/avatar.css +1 -1
  96. package/dist/collection/components/avatar/avatar.js +21 -21
  97. package/dist/collection/components/breadcrumb/breadcrumb-item/breadcrumb-item.js +4 -12
  98. package/dist/collection/components/breadcrumb/breadcrumb.css +1 -1
  99. package/dist/collection/components/breadcrumb/breadcrumb.js +32 -27
  100. package/dist/collection/components/breadcrumb/crumb/crumb.js +2 -13
  101. package/dist/collection/components/button/button.css +1 -1
  102. package/dist/collection/components/button/button.js +21 -21
  103. package/dist/collection/components/card/card.css +1 -1
  104. package/dist/collection/components/card/card.js +20 -22
  105. package/dist/collection/components/carousel/carousel-page/carousel-page.css +1 -1
  106. package/dist/collection/components/carousel/carousel-page/carousel-page.js +3 -13
  107. package/dist/collection/components/carousel/carousel.css +1 -1
  108. package/dist/collection/components/carousel/carousel.js +23 -30
  109. package/dist/collection/components/checkbox/checkbox.css +1 -1
  110. package/dist/collection/components/checkbox/checkbox.js +18 -24
  111. package/dist/collection/components/checkbox-group/checkbox-group.css +1 -1
  112. package/dist/collection/components/checkbox-group/checkbox-group.js +19 -20
  113. package/dist/collection/components/checkgroup/checkgroup.js +2 -14
  114. package/dist/collection/components/collapse/collapse.css +1 -1
  115. package/dist/collection/components/collapse/collapse.js +25 -21
  116. package/dist/collection/components/cookiebar/cookiebar-cookie/cookiebar-cookie.css +1 -1
  117. package/dist/collection/components/cookiebar/cookiebar-cookie/cookiebar-cookie.js +3 -16
  118. package/dist/collection/components/cookiebar/cookiebar-group/cookiebar-group.css +1 -1
  119. package/dist/collection/components/cookiebar/cookiebar-group/cookiebar-group.js +3 -16
  120. package/dist/collection/components/cookiebar/cookiebar-header/cookiebar-header.css +1 -1
  121. package/dist/collection/components/cookiebar/cookiebar-header/cookiebar-header.js +3 -16
  122. package/dist/collection/components/cookiebar/cookiebar-link/cookiebar-link.css +1 -1
  123. package/dist/collection/components/cookiebar/cookiebar-link/cookiebar-link.js +3 -15
  124. package/dist/collection/components/cookiebar/cookiebar-note/cookiebar-note.css +1 -1
  125. package/dist/collection/components/cookiebar/cookiebar-note/cookiebar-note.js +3 -14
  126. package/dist/collection/components/cookiebar/cookiebar-note-group/cookiebar-note-group.css +1 -1
  127. package/dist/collection/components/cookiebar/cookiebar-note-group/cookiebar-note-group.js +2 -13
  128. package/dist/collection/components/cookiebar/cookiebar.css +1 -1
  129. package/dist/collection/components/cookiebar/cookiebar.js +32 -27
  130. package/dist/collection/components/datetime-picker/date-picker/date-picker-locale.js +73 -26
  131. package/dist/collection/components/datetime-picker/date-picker/date-picker-props-validation.js +14 -13
  132. package/dist/collection/components/datetime-picker/date-picker/date-picker.css +1 -1
  133. package/dist/collection/components/datetime-picker/date-picker/date-picker.js +474 -321
  134. package/dist/collection/components/datetime-picker/datetime-input/datetime-input-constants.js +59 -0
  135. package/dist/collection/components/datetime-picker/datetime-input/datetime-input-props-validation.js +19 -15
  136. package/dist/collection/components/datetime-picker/datetime-input/datetime-input.css +1 -1
  137. package/dist/collection/components/datetime-picker/datetime-input/datetime-input.js +370 -218
  138. package/dist/collection/components/datetime-picker/datetime-input/datetime-input.types.js +1 -0
  139. package/dist/collection/components/datetime-picker/datetime-picker-constants.js +19 -5
  140. package/dist/collection/components/datetime-picker/datetime-picker-form-associated.js +92 -11
  141. package/dist/collection/components/datetime-picker/datetime-picker-props-validation.js +52 -33
  142. package/dist/collection/components/datetime-picker/datetime-picker.css +1 -1
  143. package/dist/collection/components/datetime-picker/datetime-picker.js +917 -368
  144. package/dist/collection/components/datetime-picker/datetime-picker.utils.js +62 -49
  145. package/dist/collection/components/datetime-picker/time-picker/time-picker-constants.js +3 -2
  146. package/dist/collection/components/datetime-picker/time-picker/time-picker.css +1 -1
  147. package/dist/collection/components/datetime-picker/time-picker/time-picker.js +145 -92
  148. package/dist/collection/components/divider/divider.css +1 -1
  149. package/dist/collection/components/divider/divider.js +15 -19
  150. package/dist/collection/components/dropdown/dropdown.css +1 -1
  151. package/dist/collection/components/dropdown/dropdown.js +22 -21
  152. package/dist/collection/components/footer/footer-category/footer-category.css +1 -1
  153. package/dist/collection/components/footer/footer-category/footer-category.js +4 -17
  154. package/dist/collection/components/footer/footer-item/footer-item.css +1 -1
  155. package/dist/collection/components/footer/footer-item/footer-item.js +3 -16
  156. package/dist/collection/components/footer/footer-legal/footer-legal.css +1 -1
  157. package/dist/collection/components/footer/footer-legal/footer-legal.js +2 -16
  158. package/dist/collection/components/footer/footer-logo/footer-logo.css +1 -1
  159. package/dist/collection/components/footer/footer-logo/footer-logo.js +3 -16
  160. package/dist/collection/components/footer/footer-social/footer-social.css +1 -1
  161. package/dist/collection/components/footer/footer-social/footer-social.js +3 -15
  162. package/dist/collection/components/footer/footer.css +1 -1
  163. package/dist/collection/components/footer/footer.js +25 -29
  164. package/dist/collection/components/header/header-function/header-function.css +1 -1
  165. package/dist/collection/components/header/header-function/header-function.js +10 -14
  166. package/dist/collection/components/header/header-link/header-link.css +1 -1
  167. package/dist/collection/components/header/header-link/header-link.js +3 -16
  168. package/dist/collection/components/header/header-list/header-list.css +1 -1
  169. package/dist/collection/components/header/header-list/header-list.js +3 -16
  170. package/dist/collection/components/header/header-logo/header-logo.css +1 -1
  171. package/dist/collection/components/header/header-logo/header-logo.js +3 -16
  172. package/dist/collection/components/header/header.css +1 -1
  173. package/dist/collection/components/header/header.js +30 -27
  174. package/dist/collection/components/icon/icon.css +1 -1
  175. package/dist/collection/components/icon/icon.js +22 -17
  176. package/dist/collection/components/input/input.css +1 -1
  177. package/dist/collection/components/input/input.js +125 -30
  178. package/dist/collection/components/item/item.css +1 -1
  179. package/dist/collection/components/item/item.js +18 -22
  180. package/dist/collection/components/link/link.css +1 -1
  181. package/dist/collection/components/link/link.js +25 -29
  182. package/dist/collection/components/list/list.css +1 -1
  183. package/dist/collection/components/list/list.js +17 -21
  184. package/dist/collection/components/loading/loading.css +1 -1
  185. package/dist/collection/components/loading/loading.js +17 -24
  186. package/dist/collection/components/magic-button/magic-button.css +1 -1
  187. package/dist/collection/components/magic-button/magic-button.js +13 -20
  188. package/dist/collection/components/menu/menu-group/menu-group.css +1 -1
  189. package/dist/collection/components/menu/menu-group/menu-group.js +3 -16
  190. package/dist/collection/components/menu/menu-header/menu-header.css +1 -1
  191. package/dist/collection/components/menu/menu-header/menu-header.js +3 -16
  192. package/dist/collection/components/menu/menu-info/menu-info.css +1 -1
  193. package/dist/collection/components/menu/menu-info/menu-info.js +2 -15
  194. package/dist/collection/components/menu/menu-item/menu-item.css +1 -1
  195. package/dist/collection/components/menu/menu-item/menu-item.js +3 -16
  196. package/dist/collection/components/menu/menu-link/menu-link.css +1 -1
  197. package/dist/collection/components/menu/menu-link/menu-link.js +5 -17
  198. package/dist/collection/components/menu/menu-list/menu-list.css +1 -1
  199. package/dist/collection/components/menu/menu-list/menu-list.js +2 -15
  200. package/dist/collection/components/menu/menu-logo/menu-logo.css +1 -1
  201. package/dist/collection/components/menu/menu-logo/menu-logo.js +2 -15
  202. package/dist/collection/components/menu/menu-social/menu-social.css +1 -1
  203. package/dist/collection/components/menu/menu-social/menu-social.js +2 -15
  204. package/dist/collection/components/menu/menu.css +1 -1
  205. package/dist/collection/components/menu/menu.js +28 -35
  206. package/dist/collection/components/message/message.css +1 -1
  207. package/dist/collection/components/message/message.js +22 -25
  208. package/dist/collection/components/modal/modal.css +1 -1
  209. package/dist/collection/components/modal/modal.js +18 -21
  210. package/dist/collection/components/notification/notification-body/notification-body.css +1 -1
  211. package/dist/collection/components/notification/notification-body/notification-body.js +3 -13
  212. package/dist/collection/components/notification/notification-header/notification-header.css +1 -1
  213. package/dist/collection/components/notification/notification-header/notification-header.js +3 -14
  214. package/dist/collection/components/notification/notification-item/notification-item.css +1 -1
  215. package/dist/collection/components/notification/notification-item/notification-item.js +3 -16
  216. package/dist/collection/components/notification/notification.css +1 -1
  217. package/dist/collection/components/notification/notification.js +20 -29
  218. package/dist/collection/components/pagination/pagination.css +1 -1
  219. package/dist/collection/components/pagination/pagination.js +15 -23
  220. package/dist/collection/components/radio/radio.css +1 -1
  221. package/dist/collection/components/radio/radio.js +17 -20
  222. package/dist/collection/components/radio-group/radio-group.css +1 -1
  223. package/dist/collection/components/radio-group/radio-group.js +20 -20
  224. package/dist/collection/components/scrim/scrim.css +1 -1
  225. package/dist/collection/components/scrim/scrim.js +14 -17
  226. package/dist/collection/components/select/select-input/select-input.css +1 -1
  227. package/dist/collection/components/select/select-input/select-input.js +157 -27
  228. package/dist/collection/components/select/select-list/select-list.css +1 -1
  229. package/dist/collection/components/select/select-list/select-list.js +269 -80
  230. package/dist/collection/components/select/select-option/select-option.css +1 -1
  231. package/dist/collection/components/select/select-option/select-option.js +20 -16
  232. package/dist/collection/components/select/select.css +1 -1
  233. package/dist/collection/components/select/select.js +367 -180
  234. package/dist/collection/components/select/select.utils.js +26 -7
  235. package/dist/collection/components/sign-in/sign-in.css +1 -1
  236. package/dist/collection/components/sign-in/sign-in.js +12 -16
  237. package/dist/collection/components/skip-link/skip-link-item/skip-link-item-alias.js +8 -4
  238. package/dist/collection/components/skip-link/skip-link-item/skip-link-item.css +1 -1
  239. package/dist/collection/components/skip-link/skip-link-item/skip-link-item.js +5 -15
  240. package/dist/collection/components/skip-link/skip-link.css +1 -1
  241. package/dist/collection/components/skip-link/skip-link.js +18 -24
  242. package/dist/collection/components/slider/slider.css +1 -1
  243. package/dist/collection/components/slider/slider.js +15 -25
  244. package/dist/collection/components/step/step-item/step-item.css +1 -1
  245. package/dist/collection/components/step/step-item/step-item.js +5 -15
  246. package/dist/collection/components/step/step.css +1 -1
  247. package/dist/collection/components/step/step.js +16 -25
  248. package/dist/collection/components/switch/switch.css +1 -1
  249. package/dist/collection/components/switch/switch.js +16 -20
  250. package/dist/collection/components/tab/tab-item/tab-item.css +1 -1
  251. package/dist/collection/components/tab/tab-item/tab-item.js +5 -15
  252. package/dist/collection/components/tab/tab.css +1 -1
  253. package/dist/collection/components/tab/tab.js +22 -29
  254. package/dist/collection/components/table/table-body/table-body.css +1 -1
  255. package/dist/collection/components/table/table-body/table-body.js +3 -13
  256. package/dist/collection/components/table/table-cell/table-cell.css +1 -1
  257. package/dist/collection/components/table/table-cell/table-cell.js +3 -12
  258. package/dist/collection/components/table/table-header/table-header.css +1 -1
  259. package/dist/collection/components/table/table-header/table-header.js +3 -13
  260. package/dist/collection/components/table/table-header-cell/table-header-cell.css +1 -1
  261. package/dist/collection/components/table/table-header-cell/table-header-cell.js +3 -13
  262. package/dist/collection/components/table/table-row/table-row.css +1 -1
  263. package/dist/collection/components/table/table-row/table-row.js +3 -13
  264. package/dist/collection/components/table/table.css +1 -1
  265. package/dist/collection/components/table/table.js +25 -32
  266. package/dist/collection/components/tag/tag.css +1 -1
  267. package/dist/collection/components/tag/tag.js +17 -26
  268. package/dist/collection/components/textarea/textarea.css +1 -1
  269. package/dist/collection/components/textarea/textarea.js +14 -22
  270. package/dist/collection/components/tooltip/tooltip.css +1 -1
  271. package/dist/collection/components/tooltip/tooltip.js +13 -19
  272. package/dist/collection/components/upload/upload.css +1 -1
  273. package/dist/collection/components/upload/upload.js +36 -29
  274. package/dist/collection/components/wizard/wizard-panel/wizard-panel.css +1 -1
  275. package/dist/collection/components/wizard/wizard-panel/wizard-panel.js +3 -13
  276. package/dist/collection/components/wizard/wizard.css +1 -1
  277. package/dist/collection/components/wizard/wizard.js +22 -26
  278. package/dist/collection/pages/components/select/remote-options.js +87 -0
  279. package/dist/collection/shared/utils/slot.js +1 -1
  280. package/dist/components/br-avatar.js +1 -1
  281. package/dist/components/br-breadcrumb-item.js +1 -1
  282. package/dist/components/br-breadcrumb.js +1 -1
  283. package/dist/components/br-button.js +1 -1
  284. package/dist/components/br-card.js +1 -1
  285. package/dist/components/br-carousel-page.js +1 -1
  286. package/dist/components/br-carousel.js +1 -1
  287. package/dist/components/br-checkbox-group.js +1 -1
  288. package/dist/components/br-checkbox.js +1 -1
  289. package/dist/components/br-checkgroup.js +1 -1
  290. package/dist/components/br-collapse.js +1 -1
  291. package/dist/components/br-cookiebar-cookie.js +1 -1
  292. package/dist/components/br-cookiebar-group.js +1 -1
  293. package/dist/components/br-cookiebar-header.js +1 -1
  294. package/dist/components/br-cookiebar-link.js +1 -1
  295. package/dist/components/br-cookiebar-note-group.js +1 -1
  296. package/dist/components/br-cookiebar-note.js +1 -1
  297. package/dist/components/br-cookiebar.js +1 -1
  298. package/dist/components/br-crumb.js +1 -1
  299. package/dist/components/br-date-picker.js +1 -1
  300. package/dist/components/br-datetime-input.js +1 -1
  301. package/dist/components/br-datetime-picker.js +1 -1
  302. package/dist/components/br-divider.js +1 -1
  303. package/dist/components/br-dropdown.js +1 -1
  304. package/dist/components/br-footer-category.js +1 -1
  305. package/dist/components/br-footer-item.js +1 -1
  306. package/dist/components/br-footer-legal.js +1 -1
  307. package/dist/components/br-footer-logo.js +1 -1
  308. package/dist/components/br-footer-social.js +1 -1
  309. package/dist/components/br-footer.js +1 -1
  310. package/dist/components/br-header-function.js +1 -1
  311. package/dist/components/br-header-link.js +1 -1
  312. package/dist/components/br-header-list.js +1 -1
  313. package/dist/components/br-header-logo.js +1 -1
  314. package/dist/components/br-header.js +1 -1
  315. package/dist/components/br-icon.js +1 -1
  316. package/dist/components/br-input.js +1 -1
  317. package/dist/components/br-item.js +1 -1
  318. package/dist/components/br-link.js +1 -1
  319. package/dist/components/br-list.js +1 -1
  320. package/dist/components/br-loading.js +1 -1
  321. package/dist/components/br-magic-button.js +1 -1
  322. package/dist/components/br-menu-group.js +1 -1
  323. package/dist/components/br-menu-header.js +1 -1
  324. package/dist/components/br-menu-info.js +1 -1
  325. package/dist/components/br-menu-item.js +1 -1
  326. package/dist/components/br-menu-link.js +1 -1
  327. package/dist/components/br-menu-list.js +1 -1
  328. package/dist/components/br-menu-logo.js +1 -1
  329. package/dist/components/br-menu-social.js +1 -1
  330. package/dist/components/br-menu.js +1 -1
  331. package/dist/components/br-message.js +1 -1
  332. package/dist/components/br-modal.js +1 -1
  333. package/dist/components/br-notification-body.js +1 -1
  334. package/dist/components/br-notification-header.js +1 -1
  335. package/dist/components/br-notification-item.js +1 -1
  336. package/dist/components/br-notification.js +1 -1
  337. package/dist/components/br-pagination.js +1 -1
  338. package/dist/components/br-radio-group.js +1 -1
  339. package/dist/components/br-radio.js +1 -1
  340. package/dist/components/br-scrim.js +1 -1
  341. package/dist/components/br-select-input.js +1 -1
  342. package/dist/components/br-select-list.js +1 -1
  343. package/dist/components/br-select-option.js +1 -1
  344. package/dist/components/br-select.js +1 -1
  345. package/dist/components/br-sign-in.js +1 -1
  346. package/dist/components/br-skip-link-item.js +1 -1
  347. package/dist/components/br-skip-link.js +1 -1
  348. package/dist/components/br-skiplink-item.js +1 -1
  349. package/dist/components/br-slider.js +1 -1
  350. package/dist/components/br-step-item.js +1 -1
  351. package/dist/components/br-step.js +1 -1
  352. package/dist/components/br-switch.js +1 -1
  353. package/dist/components/br-tab-item.js +1 -1
  354. package/dist/components/br-tab.js +1 -1
  355. package/dist/components/br-table-body.js +1 -1
  356. package/dist/components/br-table-cell.js +1 -1
  357. package/dist/components/br-table-header-cell.js +1 -1
  358. package/dist/components/br-table-header.js +1 -1
  359. package/dist/components/br-table-row.js +1 -1
  360. package/dist/components/br-table.js +1 -1
  361. package/dist/components/br-tag.js +1 -1
  362. package/dist/components/br-textarea.js +1 -1
  363. package/dist/components/br-time-picker.js +1 -1
  364. package/dist/components/br-tooltip.js +1 -1
  365. package/dist/components/br-upload.js +1 -1
  366. package/dist/components/br-wizard-panel.js +1 -1
  367. package/dist/components/br-wizard.js +1 -1
  368. package/dist/components/index.js +1 -1
  369. package/dist/components/p-448Z5r2f.js +5 -0
  370. package/dist/{webcomponents/p-5f422a69.entry.js → components/p-AhfgJCUp.js} +1 -1
  371. package/dist/components/p-AoNL6BaW.js +5 -0
  372. package/dist/components/p-B468MCYC.js +5 -0
  373. package/dist/components/p-B7bNfmgh.js +5 -0
  374. package/dist/components/p-B985Ov_x.js +5 -0
  375. package/dist/components/p-BOWQIHQA.js +5 -0
  376. package/dist/components/p-BPQrgCRr.js +5 -0
  377. package/dist/components/p-BwQT0fOJ.js +5 -0
  378. package/dist/components/p-CAgbUwsx.js +5 -0
  379. package/dist/components/p-CFXey8i8.js +5 -0
  380. package/dist/components/p-CVz_akHx.js +5 -0
  381. package/dist/components/p-CW8xwk6J.js +5 -0
  382. package/dist/components/p-CYZVdKeO.js +5 -0
  383. package/dist/components/p-C_DC6oQW.js +16 -0
  384. package/dist/components/p-CeWbZN7V.js +5 -0
  385. package/dist/components/p-CyXVsiz9.js +5 -0
  386. package/dist/components/p-DDe0tQEO.js +5 -0
  387. package/dist/components/{p-CZZVc2gK.js → p-DJKZ8ktB.js} +1 -1
  388. package/dist/components/p-DRsZ9GNg.js +5 -0
  389. package/dist/components/p-DU54cqCf.js +5 -0
  390. package/dist/components/p-DVJlmlEX.js +5 -0
  391. package/dist/components/p-DcMjwTqu.js +5 -0
  392. package/dist/components/p-Dd1qCWAK.js +5 -0
  393. package/dist/components/p-Dn36Mj2E.js +5 -0
  394. package/dist/components/p-DoWy_P8b.js +5 -0
  395. package/dist/components/p-HbhTnepI.js +5 -0
  396. package/dist/components/{p-BcqVlof7.js → p-JkJjzmGm.js} +1 -1
  397. package/dist/components/{p-Nze3Utvd.js → p-Or3FLzbz.js} +1 -1
  398. package/dist/components/p-SWQlgYWR.js +5 -0
  399. package/dist/components/p-Zb9nyfTY.js +5 -0
  400. package/dist/components/p-jvKQA6x7.js +5 -0
  401. package/dist/components/p-pQb-3jFY.js +5 -0
  402. package/dist/components/p-qX6sHxOk.js +5 -0
  403. package/dist/esm/br-avatar.entry.js +3 -3
  404. package/dist/esm/br-breadcrumb-item.entry.js +1 -1
  405. package/dist/esm/br-breadcrumb.entry.js +3 -3
  406. package/dist/esm/br-button_2.entry.js +4 -4
  407. package/dist/esm/br-card.entry.js +3 -3
  408. package/dist/esm/br-carousel-page.entry.js +2 -2
  409. package/dist/esm/br-carousel.entry.js +3 -3
  410. package/dist/esm/br-checkbox-group.entry.js +3 -3
  411. package/dist/esm/br-checkbox.entry.js +5 -5
  412. package/dist/esm/br-checkgroup.entry.js +1 -1
  413. package/dist/esm/br-collapse_2.entry.js +6 -6
  414. package/dist/esm/br-cookiebar-cookie.entry.js +2 -2
  415. package/dist/esm/br-cookiebar-group.entry.js +2 -2
  416. package/dist/esm/br-cookiebar-header.entry.js +2 -2
  417. package/dist/esm/br-cookiebar-link.entry.js +2 -2
  418. package/dist/esm/br-cookiebar-note-group.entry.js +1 -1
  419. package/dist/esm/br-cookiebar-note.entry.js +2 -2
  420. package/dist/esm/br-cookiebar.entry.js +4 -4
  421. package/dist/esm/br-crumb.entry.js +1 -1
  422. package/dist/esm/br-date-picker_3.entry.js +966 -527
  423. package/dist/esm/br-datetime-picker.entry.js +1316 -280
  424. package/dist/esm/br-divider.entry.js +3 -3
  425. package/dist/esm/br-dropdown_2.entry.js +281 -138
  426. package/dist/esm/br-footer-category.entry.js +3 -3
  427. package/dist/esm/br-footer-item.entry.js +2 -2
  428. package/dist/esm/br-footer-legal.entry.js +2 -2
  429. package/dist/esm/br-footer-logo.entry.js +2 -2
  430. package/dist/esm/br-footer-social.entry.js +2 -2
  431. package/dist/esm/br-footer.entry.js +4 -4
  432. package/dist/esm/br-header-function.entry.js +2 -2
  433. package/dist/esm/br-header-link.entry.js +2 -2
  434. package/dist/esm/br-header-list.entry.js +3 -3
  435. package/dist/esm/br-header-logo.entry.js +2 -2
  436. package/dist/esm/br-header.entry.js +2 -2
  437. package/dist/esm/br-icon.entry.js +3 -3
  438. package/dist/esm/br-input.entry.js +65 -11
  439. package/dist/esm/br-item.entry.js +3 -3
  440. package/dist/esm/br-link.entry.js +8 -8
  441. package/dist/esm/br-loading.entry.js +2 -2
  442. package/dist/esm/br-magic-button.entry.js +2 -2
  443. package/dist/esm/br-menu-group.entry.js +2 -2
  444. package/dist/esm/br-menu-header.entry.js +2 -2
  445. package/dist/esm/br-menu-info.entry.js +2 -2
  446. package/dist/esm/br-menu-item.entry.js +2 -2
  447. package/dist/esm/br-menu-link.entry.js +2 -2
  448. package/dist/esm/br-menu-list.entry.js +1 -1
  449. package/dist/esm/br-menu-logo.entry.js +2 -2
  450. package/dist/esm/br-menu-social.entry.js +1 -1
  451. package/dist/esm/br-menu.entry.js +5 -5
  452. package/dist/esm/br-modal.entry.js +1 -1
  453. package/dist/esm/br-notification-body.entry.js +2 -2
  454. package/dist/esm/br-notification-header.entry.js +2 -2
  455. package/dist/esm/br-notification-item.entry.js +2 -2
  456. package/dist/esm/br-notification.entry.js +4 -4
  457. package/dist/esm/br-pagination.entry.js +3 -3
  458. package/dist/esm/br-radio-group.entry.js +5 -5
  459. package/dist/esm/br-radio.entry.js +5 -5
  460. package/dist/esm/br-scrim.entry.js +3 -3
  461. package/dist/esm/br-select-input_3.entry.js +308 -101
  462. package/dist/esm/br-sign-in.entry.js +3 -3
  463. package/dist/esm/br-skip-link-item.entry.js +1 -1
  464. package/dist/esm/br-skip-link.entry.js +2 -2
  465. package/dist/esm/br-skiplink-item.entry.js +2 -2
  466. package/dist/esm/br-slider.entry.js +4 -4
  467. package/dist/esm/br-step_2.entry.js +6 -6
  468. package/dist/esm/br-switch.entry.js +5 -5
  469. package/dist/esm/br-tab-item.entry.js +2 -2
  470. package/dist/esm/br-tab.entry.js +4 -4
  471. package/dist/esm/br-table-body.entry.js +2 -2
  472. package/dist/esm/br-table-cell.entry.js +2 -2
  473. package/dist/esm/br-table-header-cell.entry.js +2 -2
  474. package/dist/esm/br-table-header.entry.js +2 -2
  475. package/dist/esm/br-table-row.entry.js +2 -2
  476. package/dist/esm/br-table.entry.js +2 -2
  477. package/dist/esm/br-tag.entry.js +5 -5
  478. package/dist/esm/br-textarea.entry.js +4 -4
  479. package/dist/esm/br-tooltip.entry.js +3 -3
  480. package/dist/esm/br-upload.entry.js +6 -22
  481. package/dist/esm/br-wizard-panel.entry.js +2 -2
  482. package/dist/esm/br-wizard.entry.js +2 -2
  483. package/dist/esm/{datetime-picker-constants-BtRPYRvA.js → datetime-picker-constants-1l4_-FEJ.js} +20 -6
  484. package/dist/esm/{event-CfuJQ1DY.js → event-6Da1SZ3J.js} +1 -1
  485. package/dist/esm/format-bytes-B7bNfmgh.js +22 -0
  486. package/dist/esm/{iconify-icon-D3usVJE2.js → iconify-icon-C_DC6oQW.js} +103 -57
  487. package/dist/esm/{index-BQPOWxe5.js → index-BQRBKuY0.js} +75 -28
  488. package/dist/esm/index-ConyRdJe.js +14 -14
  489. package/dist/esm/index.js +2 -2
  490. package/dist/esm/{datetime-picker-props-validation-BeTcUTnE.js → isValid-wU7S6MI2.js} +2 -477
  491. package/dist/esm/loader.js +1 -1
  492. package/dist/esm/select.utils-BYsh2ZdE.js +57 -0
  493. package/dist/esm/{slot-BIG-yees.js → slot-Bt01zQ7-.js} +1 -1
  494. package/dist/esm/webcomponents.js +1 -1
  495. package/dist/hydrate/index.js +4459 -3577
  496. package/dist/hydrate/index.mjs +4459 -3577
  497. package/dist/types/components/avatar/avatar.d.ts +20 -20
  498. package/dist/types/components/breadcrumb/breadcrumb-item/breadcrumb-item.d.ts +3 -11
  499. package/dist/types/components/breadcrumb/breadcrumb.d.ts +30 -25
  500. package/dist/types/components/breadcrumb/crumb/crumb.d.ts +1 -12
  501. package/dist/types/components/button/button.d.ts +20 -20
  502. package/dist/types/components/card/card.d.ts +19 -21
  503. package/dist/types/components/carousel/carousel-page/carousel-page.d.ts +2 -12
  504. package/dist/types/components/carousel/carousel.d.ts +22 -29
  505. package/dist/types/components/checkbox/checkbox.d.ts +16 -22
  506. package/dist/types/components/checkbox-group/checkbox-group.d.ts +17 -18
  507. package/dist/types/components/checkgroup/checkgroup.d.ts +1 -13
  508. package/dist/types/components/collapse/collapse.d.ts +24 -20
  509. package/dist/types/components/cookiebar/cookiebar-cookie/cookiebar-cookie.d.ts +2 -15
  510. package/dist/types/components/cookiebar/cookiebar-group/cookiebar-group.d.ts +2 -15
  511. package/dist/types/components/cookiebar/cookiebar-header/cookiebar-header.d.ts +2 -15
  512. package/dist/types/components/cookiebar/cookiebar-link/cookiebar-link.d.ts +2 -14
  513. package/dist/types/components/cookiebar/cookiebar-note/cookiebar-note.d.ts +2 -13
  514. package/dist/types/components/cookiebar/cookiebar-note-group/cookiebar-note-group.d.ts +2 -13
  515. package/dist/types/components/cookiebar/cookiebar.d.ts +30 -25
  516. package/dist/types/components/datetime-picker/date-picker/date-picker-locale.d.ts +20 -12
  517. package/dist/types/components/datetime-picker/date-picker/date-picker-props-validation.d.ts +14 -13
  518. package/dist/types/components/datetime-picker/date-picker/date-picker.d.ts +313 -164
  519. package/dist/types/components/datetime-picker/datetime-input/datetime-input-constants.d.ts +14 -0
  520. package/dist/types/components/datetime-picker/datetime-input/datetime-input-props-validation.d.ts +19 -15
  521. package/dist/types/components/datetime-picker/datetime-input/datetime-input.d.ts +226 -105
  522. package/dist/types/components/datetime-picker/datetime-input/datetime-input.types.d.ts +36 -0
  523. package/dist/types/components/datetime-picker/datetime-picker-constants.d.ts +19 -5
  524. package/dist/types/components/datetime-picker/datetime-picker-form-associated.d.ts +32 -5
  525. package/dist/types/components/datetime-picker/datetime-picker-props-validation.d.ts +22 -24
  526. package/dist/types/components/datetime-picker/datetime-picker.d.ts +510 -241
  527. package/dist/types/components/datetime-picker/datetime-picker.types.d.ts +75 -21
  528. package/dist/types/components/datetime-picker/datetime-picker.utils.d.ts +53 -47
  529. package/dist/types/components/datetime-picker/time-picker/time-picker-constants.d.ts +3 -2
  530. package/dist/types/components/datetime-picker/time-picker/time-picker.d.ts +123 -62
  531. package/dist/types/components/divider/divider.d.ts +14 -18
  532. package/dist/types/components/dropdown/dropdown.d.ts +21 -20
  533. package/dist/types/components/footer/footer-category/footer-category.d.ts +2 -15
  534. package/dist/types/components/footer/footer-item/footer-item.d.ts +2 -15
  535. package/dist/types/components/footer/footer-legal/footer-legal.d.ts +1 -15
  536. package/dist/types/components/footer/footer-logo/footer-logo.d.ts +2 -15
  537. package/dist/types/components/footer/footer-social/footer-social.d.ts +2 -14
  538. package/dist/types/components/footer/footer.d.ts +23 -27
  539. package/dist/types/components/header/header-function/header-function.d.ts +9 -13
  540. package/dist/types/components/header/header-link/header-link.d.ts +2 -15
  541. package/dist/types/components/header/header-list/header-list.d.ts +2 -15
  542. package/dist/types/components/header/header-logo/header-logo.d.ts +2 -15
  543. package/dist/types/components/header/header.d.ts +29 -26
  544. package/dist/types/components/icon/icon.d.ts +21 -16
  545. package/dist/types/components/input/input.d.ts +48 -23
  546. package/dist/types/components/input/input.types.d.ts +4 -0
  547. package/dist/types/components/item/item.d.ts +17 -21
  548. package/dist/types/components/link/link.d.ts +18 -22
  549. package/dist/types/components/list/list.d.ts +16 -20
  550. package/dist/types/components/loading/loading.d.ts +16 -23
  551. package/dist/types/components/magic-button/magic-button.d.ts +12 -19
  552. package/dist/types/components/menu/menu-group/menu-group.d.ts +2 -15
  553. package/dist/types/components/menu/menu-header/menu-header.d.ts +2 -15
  554. package/dist/types/components/menu/menu-info/menu-info.d.ts +1 -14
  555. package/dist/types/components/menu/menu-item/menu-item.d.ts +2 -15
  556. package/dist/types/components/menu/menu-link/menu-link.d.ts +4 -16
  557. package/dist/types/components/menu/menu-list/menu-list.d.ts +2 -15
  558. package/dist/types/components/menu/menu-logo/menu-logo.d.ts +1 -14
  559. package/dist/types/components/menu/menu-social/menu-social.d.ts +2 -15
  560. package/dist/types/components/menu/menu.d.ts +25 -32
  561. package/dist/types/components/message/message.d.ts +21 -24
  562. package/dist/types/components/modal/modal.d.ts +18 -21
  563. package/dist/types/components/notification/notification-body/notification-body.d.ts +2 -12
  564. package/dist/types/components/notification/notification-header/notification-header.d.ts +2 -13
  565. package/dist/types/components/notification/notification-item/notification-item.d.ts +2 -15
  566. package/dist/types/components/notification/notification.d.ts +18 -27
  567. package/dist/types/components/pagination/pagination.d.ts +13 -21
  568. package/dist/types/components/radio/radio.d.ts +15 -18
  569. package/dist/types/components/radio-group/radio-group.d.ts +18 -18
  570. package/dist/types/components/scrim/scrim.d.ts +12 -15
  571. package/dist/types/components/select/select-input/select-input.d.ts +20 -12
  572. package/dist/types/components/select/select-list/select-list.d.ts +27 -14
  573. package/dist/types/components/select/select-option/select-option.d.ts +6 -10
  574. package/dist/types/components/select/select.d.ts +75 -87
  575. package/dist/types/components/select/select.types.d.ts +12 -0
  576. package/dist/types/components/select/select.utils.d.ts +3 -0
  577. package/dist/types/components/sign-in/sign-in.d.ts +11 -15
  578. package/dist/types/components/skip-link/skip-link-item/skip-link-item-alias.d.ts +7 -3
  579. package/dist/types/components/skip-link/skip-link-item/skip-link-item.d.ts +4 -14
  580. package/dist/types/components/skip-link/skip-link.d.ts +17 -23
  581. package/dist/types/components/slider/slider.d.ts +14 -24
  582. package/dist/types/components/step/step-item/step-item.d.ts +2 -12
  583. package/dist/types/components/step/step.d.ts +15 -24
  584. package/dist/types/components/switch/switch.d.ts +14 -18
  585. package/dist/types/components/tab/tab-item/tab-item.d.ts +4 -14
  586. package/dist/types/components/tab/tab.d.ts +19 -26
  587. package/dist/types/components/table/table-body/table-body.d.ts +2 -12
  588. package/dist/types/components/table/table-cell/table-cell.d.ts +2 -11
  589. package/dist/types/components/table/table-header/table-header.d.ts +2 -12
  590. package/dist/types/components/table/table-header-cell/table-header-cell.d.ts +2 -12
  591. package/dist/types/components/table/table-row/table-row.d.ts +2 -12
  592. package/dist/types/components/table/table.d.ts +24 -31
  593. package/dist/types/components/tag/tag.d.ts +15 -24
  594. package/dist/types/components/textarea/textarea.d.ts +13 -21
  595. package/dist/types/components/tooltip/tooltip.d.ts +12 -18
  596. package/dist/types/components/upload/upload.d.ts +20 -27
  597. package/dist/types/components/wizard/wizard-panel/wizard-panel.d.ts +2 -12
  598. package/dist/types/components/wizard/wizard.d.ts +21 -25
  599. package/dist/types/components.d.ts +3586 -5062
  600. package/dist/webcomponents/index.esm.js +1 -1
  601. package/dist/webcomponents/p-031a2256.entry.js +5 -0
  602. package/dist/webcomponents/p-0602e5b1.entry.js +5 -0
  603. package/dist/webcomponents/p-079d5f69.entry.js +5 -0
  604. package/dist/webcomponents/p-087ed5e7.entry.js +5 -0
  605. package/dist/webcomponents/p-0d5a9ebf.entry.js +5 -0
  606. package/dist/webcomponents/p-105b4d06.entry.js +5 -0
  607. package/dist/webcomponents/p-11d4edc5.entry.js +5 -0
  608. package/dist/webcomponents/p-12dd22af.entry.js +5 -0
  609. package/dist/webcomponents/p-14aedf0d.entry.js +5 -0
  610. package/dist/webcomponents/p-152482f9.entry.js +5 -0
  611. package/dist/webcomponents/p-19b4b1b7.entry.js +5 -0
  612. package/dist/webcomponents/p-1cd1126e.entry.js +5 -0
  613. package/dist/webcomponents/{p-BtRPYRvA.js → p-1l4_-FEJ.js} +1 -1
  614. package/dist/webcomponents/p-21e10074.entry.js +5 -0
  615. package/dist/webcomponents/p-2271ea84.entry.js +5 -0
  616. package/dist/webcomponents/p-271b1ede.entry.js +5 -0
  617. package/dist/webcomponents/p-28f732fc.entry.js +5 -0
  618. package/dist/webcomponents/{p-c1dafd8d.entry.js → p-2971d38a.entry.js} +1 -1
  619. package/dist/{components/p-DOJ1vYOl.js → webcomponents/p-2ac48875.entry.js} +1 -1
  620. package/dist/webcomponents/p-2b1a919c.entry.js +5 -0
  621. package/dist/webcomponents/p-2da57966.entry.js +5 -0
  622. package/dist/webcomponents/p-2e81b0b3.entry.js +5 -0
  623. package/dist/webcomponents/p-2eececed.entry.js +5 -0
  624. package/dist/webcomponents/{p-513ee754.entry.js → p-2f904c4a.entry.js} +1 -1
  625. package/dist/webcomponents/p-32414f1c.entry.js +5 -0
  626. package/dist/webcomponents/{p-5a7c2031.entry.js → p-324afbce.entry.js} +1 -1
  627. package/dist/webcomponents/p-32ea6342.entry.js +5 -0
  628. package/dist/webcomponents/p-330ec8ab.entry.js +5 -0
  629. package/dist/webcomponents/p-374f83b1.entry.js +5 -0
  630. package/dist/webcomponents/p-3926cc91.entry.js +5 -0
  631. package/dist/webcomponents/p-39a7826d.entry.js +5 -0
  632. package/dist/webcomponents/p-3bcc2c58.entry.js +5 -0
  633. package/dist/webcomponents/p-3c7ce0e4.entry.js +5 -0
  634. package/dist/webcomponents/p-467842ca.entry.js +5 -0
  635. package/dist/webcomponents/p-53550e8c.entry.js +5 -0
  636. package/dist/webcomponents/p-53e71a8a.entry.js +5 -0
  637. package/dist/webcomponents/p-5528b466.entry.js +5 -0
  638. package/dist/webcomponents/p-55e0822d.entry.js +5 -0
  639. package/dist/webcomponents/p-58bacbe1.entry.js +5 -0
  640. package/dist/webcomponents/p-5a5ed7d8.entry.js +5 -0
  641. package/dist/webcomponents/p-621f0fa8.entry.js +5 -0
  642. package/dist/webcomponents/p-6514a75d.entry.js +5 -0
  643. package/dist/webcomponents/{p-19a38e20.entry.js → p-678b43a6.entry.js} +1 -1
  644. package/dist/webcomponents/{p-CfuJQ1DY.js → p-6Da1SZ3J.js} +1 -1
  645. package/dist/webcomponents/p-6b6be415.entry.js +5 -0
  646. package/dist/webcomponents/{p-0d2ca2f7.entry.js → p-6d58ab4f.entry.js} +1 -1
  647. package/dist/webcomponents/p-6ff9b26e.entry.js +5 -0
  648. package/dist/webcomponents/p-84dfbfdd.entry.js +5 -0
  649. package/dist/webcomponents/{p-d5d2205c.entry.js → p-85c8d060.entry.js} +1 -1
  650. package/dist/webcomponents/p-913d6f28.entry.js +5 -0
  651. package/dist/webcomponents/{p-94848046.entry.js → p-975ea5c7.entry.js} +1 -1
  652. package/dist/webcomponents/p-992167bc.entry.js +5 -0
  653. package/dist/webcomponents/p-B7bNfmgh.js +5 -0
  654. package/dist/webcomponents/p-BYsh2ZdE.js +5 -0
  655. package/dist/webcomponents/p-C_DC6oQW.js +16 -0
  656. package/dist/webcomponents/{p-DV-iW9Aj.js → p-CpE_G6IZ.js} +1 -1
  657. package/dist/webcomponents/p-DnwERaeQ.js +5 -0
  658. package/dist/webcomponents/p-a21872bf.entry.js +5 -0
  659. package/dist/webcomponents/{p-0b0cf355.entry.js → p-a9f16a65.entry.js} +1 -1
  660. package/dist/webcomponents/p-b8d4ace3.entry.js +5 -0
  661. package/dist/webcomponents/{p-6850e98e.entry.js → p-bbcde1ea.entry.js} +1 -1
  662. package/dist/webcomponents/p-bbf47e78.entry.js +5 -0
  663. package/dist/webcomponents/p-bf35e506.entry.js +5 -0
  664. package/dist/webcomponents/{p-b02a7218.entry.js → p-c09af3cd.entry.js} +1 -1
  665. package/dist/webcomponents/p-c29268b5.entry.js +5 -0
  666. package/dist/webcomponents/p-c3e61c39.entry.js +5 -0
  667. package/dist/webcomponents/{p-b16590fc.entry.js → p-c6b2545a.entry.js} +1 -1
  668. package/dist/webcomponents/{p-b55425b7.entry.js → p-c6f2f17b.entry.js} +1 -1
  669. package/dist/webcomponents/p-cae39e13.entry.js +5 -0
  670. package/dist/webcomponents/p-cb1e08b1.entry.js +5 -0
  671. package/dist/webcomponents/{p-e94a52ac.entry.js → p-cb690a87.entry.js} +1 -1
  672. package/dist/webcomponents/p-d0be7243.entry.js +5 -0
  673. package/dist/webcomponents/p-d191c6e3.entry.js +5 -0
  674. package/dist/webcomponents/p-d205f3fd.entry.js +5 -0
  675. package/dist/webcomponents/p-d3bd2c40.entry.js +5 -0
  676. package/dist/webcomponents/{p-61977114.entry.js → p-dbeea64e.entry.js} +1 -1
  677. package/dist/webcomponents/p-df475129.entry.js +5 -0
  678. package/dist/webcomponents/p-e0ccf189.entry.js +5 -0
  679. package/dist/webcomponents/p-e121429a.entry.js +5 -0
  680. package/dist/webcomponents/p-e4b968b5.entry.js +5 -0
  681. package/dist/webcomponents/p-e661c024.entry.js +5 -0
  682. package/dist/webcomponents/p-e6c6f305.entry.js +5 -0
  683. package/dist/webcomponents/p-e8291be2.entry.js +5 -0
  684. package/dist/webcomponents/p-eb5806c7.entry.js +5 -0
  685. package/dist/webcomponents/{p-82759002.entry.js → p-ed3fa8ec.entry.js} +1 -1
  686. package/dist/webcomponents/p-f9084f16.entry.js +5 -0
  687. package/dist/webcomponents/{p-4118b878.entry.js → p-fad3aa61.entry.js} +1 -1
  688. package/dist/webcomponents/webcomponents.esm.js +1 -1
  689. package/package.json +2 -2
  690. package/dist/collection/pages/components/select/remote.js +0 -33
  691. package/dist/collection/pages/components/select/virtualized.js +0 -13
  692. package/dist/components/p-0qmYp77w.js +0 -5
  693. package/dist/components/p-5c3rNBXh.js +0 -5
  694. package/dist/components/p-B8oIvH3q.js +0 -5
  695. package/dist/components/p-BECz8XWJ.js +0 -5
  696. package/dist/components/p-BM4Ys6hX.js +0 -5
  697. package/dist/components/p-BXWh9s7p.js +0 -5
  698. package/dist/components/p-BblZlUp2.js +0 -5
  699. package/dist/components/p-Bezou5CQ.js +0 -5
  700. package/dist/components/p-BjeUETWJ.js +0 -5
  701. package/dist/components/p-Cd6udSDt.js +0 -5
  702. package/dist/components/p-Ci0_RqAE.js +0 -5
  703. package/dist/components/p-CuBgClZm.js +0 -5
  704. package/dist/components/p-D0QYZSoP.js +0 -5
  705. package/dist/components/p-D3usVJE2.js +0 -16
  706. package/dist/components/p-D4SWpW6-.js +0 -5
  707. package/dist/components/p-D579DS7x.js +0 -5
  708. package/dist/components/p-D8K7rhHd.js +0 -5
  709. package/dist/components/p-D9nXlCuS.js +0 -5
  710. package/dist/components/p-DKFO6Q_g.js +0 -5
  711. package/dist/components/p-DNJSSCNi.js +0 -5
  712. package/dist/components/p-DYI30IZL.js +0 -5
  713. package/dist/components/p-DcVldfL0.js +0 -5
  714. package/dist/components/p-DhvmHPp4.js +0 -5
  715. package/dist/components/p-DwgiHL0b.js +0 -5
  716. package/dist/components/p-WxDB6Dk4.js +0 -5
  717. package/dist/components/p-ZLoeVagg.js +0 -5
  718. package/dist/components/p-gbYJ9sfc.js +0 -5
  719. package/dist/components/p-uc8ABlC_.js +0 -5
  720. package/dist/components/p-v60ypfxD.js +0 -5
  721. package/dist/webcomponents/p-078bd760.entry.js +0 -5
  722. package/dist/webcomponents/p-07c2cdff.entry.js +0 -5
  723. package/dist/webcomponents/p-09817344.entry.js +0 -5
  724. package/dist/webcomponents/p-0d79ca44.entry.js +0 -5
  725. package/dist/webcomponents/p-0fe3c47b.entry.js +0 -5
  726. package/dist/webcomponents/p-116b53c9.entry.js +0 -5
  727. package/dist/webcomponents/p-1240dae7.entry.js +0 -5
  728. package/dist/webcomponents/p-14ff5865.entry.js +0 -5
  729. package/dist/webcomponents/p-15743a02.entry.js +0 -5
  730. package/dist/webcomponents/p-16cebf49.entry.js +0 -5
  731. package/dist/webcomponents/p-1884b9d3.entry.js +0 -5
  732. package/dist/webcomponents/p-1d36c8fa.entry.js +0 -5
  733. package/dist/webcomponents/p-1fa4b5b2.entry.js +0 -5
  734. package/dist/webcomponents/p-212c069b.entry.js +0 -5
  735. package/dist/webcomponents/p-23f37cd6.entry.js +0 -5
  736. package/dist/webcomponents/p-24502b63.entry.js +0 -5
  737. package/dist/webcomponents/p-27fb81f3.entry.js +0 -5
  738. package/dist/webcomponents/p-28844490.entry.js +0 -5
  739. package/dist/webcomponents/p-2b41bdcc.entry.js +0 -5
  740. package/dist/webcomponents/p-2cb1e09b.entry.js +0 -5
  741. package/dist/webcomponents/p-2fcda70b.entry.js +0 -5
  742. package/dist/webcomponents/p-3378300c.entry.js +0 -5
  743. package/dist/webcomponents/p-3ae9cf69.entry.js +0 -5
  744. package/dist/webcomponents/p-3b79cd49.entry.js +0 -5
  745. package/dist/webcomponents/p-3c1513ec.entry.js +0 -5
  746. package/dist/webcomponents/p-4534a3c3.entry.js +0 -5
  747. package/dist/webcomponents/p-48abf568.entry.js +0 -5
  748. package/dist/webcomponents/p-4e5ea05c.entry.js +0 -5
  749. package/dist/webcomponents/p-521a1076.entry.js +0 -5
  750. package/dist/webcomponents/p-59fc52c0.entry.js +0 -5
  751. package/dist/webcomponents/p-5a9f4ea2.entry.js +0 -5
  752. package/dist/webcomponents/p-71853dfc.entry.js +0 -5
  753. package/dist/webcomponents/p-76d51654.entry.js +0 -5
  754. package/dist/webcomponents/p-77e242f3.entry.js +0 -5
  755. package/dist/webcomponents/p-7b849472.entry.js +0 -5
  756. package/dist/webcomponents/p-7dbfb875.entry.js +0 -5
  757. package/dist/webcomponents/p-7fa7f052.entry.js +0 -5
  758. package/dist/webcomponents/p-81c65747.entry.js +0 -5
  759. package/dist/webcomponents/p-91a5329f.entry.js +0 -5
  760. package/dist/webcomponents/p-966773a9.entry.js +0 -5
  761. package/dist/webcomponents/p-9abb5a53.entry.js +0 -5
  762. package/dist/webcomponents/p-9bf2e325.entry.js +0 -5
  763. package/dist/webcomponents/p-9c943b40.entry.js +0 -5
  764. package/dist/webcomponents/p-9ec3ca00.entry.js +0 -5
  765. package/dist/webcomponents/p-B0PbhaxL.js +0 -5
  766. package/dist/webcomponents/p-D3usVJE2.js +0 -16
  767. package/dist/webcomponents/p-ad91f149.entry.js +0 -5
  768. package/dist/webcomponents/p-aeea1f17.entry.js +0 -5
  769. package/dist/webcomponents/p-c2ca0289.entry.js +0 -5
  770. package/dist/webcomponents/p-c8af334e.entry.js +0 -5
  771. package/dist/webcomponents/p-cac49c6a.entry.js +0 -5
  772. package/dist/webcomponents/p-cb9ebfbe.entry.js +0 -5
  773. package/dist/webcomponents/p-ce3d689c.entry.js +0 -5
  774. package/dist/webcomponents/p-d11f95a0.entry.js +0 -5
  775. package/dist/webcomponents/p-dad03b49.entry.js +0 -5
  776. package/dist/webcomponents/p-db8e6322.entry.js +0 -5
  777. package/dist/webcomponents/p-dea8015f.entry.js +0 -5
  778. package/dist/webcomponents/p-e07e309d.entry.js +0 -5
  779. package/dist/webcomponents/p-e53d874b.entry.js +0 -5
  780. package/dist/webcomponents/p-e5540387.entry.js +0 -5
  781. package/dist/webcomponents/p-e9be4d3f.entry.js +0 -5
  782. package/dist/webcomponents/p-e9db9381.entry.js +0 -5
  783. package/dist/webcomponents/p-edca5de1.entry.js +0 -5
  784. package/dist/webcomponents/p-ee5b9fc9.entry.js +0 -5
  785. package/dist/webcomponents/p-f4ef8c63.entry.js +0 -5
  786. /package/dist/components/{p-5z6jgH1D.js → p-BNckUhK6.js} +0 -0
  787. /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-BQPOWxe5.js';
7
- import { b as requireToDate, c as requireConstructFrom, d as requireDefaultOptions, e as requireNormalizeDates, a as DATETIME_PICKER_LOCALE, N as NAVIGATION_ACTION, f as formatExports, g as requireAddLeadingZeros, D as DATETIME_PICKER_MODE, h as requireConstants } from './datetime-picker-constants-BtRPYRvA.js';
8
- import { s as setExports, p as parseExports, b as isValidDatetimePickerDateRange, t as toDateExports, e as normalizeDatetimePickerDisabledDates, c as resolveSsrLocalDate, h as isSameDayExports, g as eachDayOfIntervalExports, i as isValidExports } from './datetime-picker-props-validation-BeTcUTnE.js';
9
- import { d as dispatchNativeFormEvent } from './event-CfuJQ1DY.js';
10
- import { w as warnInvalidPropValue, r as reportInvalidPropValue } from './prop-warning-BlGV-x0w.js';
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 o valor informado representa um índice válido de início da semana.
537
+ * Verifica se um valor representa um índice válido para o primeiro dia da semana (0-6).
491
538
  *
492
- * @param value - Valor bruto recebido via prop.
493
- * @returns `true` quando o valor está entre `0` e `6`.
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 e aplica `0` quando o valor é inválido.
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 - Valor bruto recebido via prop.
502
- * @returns Índice normalizado para o primeiro dia da semana.
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
- * Valida se o código de locale pode ser resolvido pelo date-fns.
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 - Código de locale informado pelo consumidor.
515
- * @returns `true` quando o locale pode ser resolvido com sucesso.
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 e aplica o default do componente quando necessário.
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 - Código de locale informado pelo consumidor.
530
- * @returns Locale válido para o date picker.
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
- /** Data com foco atual na navegação por teclado do calendário. */
546
- this.focusedDate = new Date();
547
- /** Datas inválidas são removidas da lista antes da comparação com o calendário. */
548
- this.normalizedDisabledDates = [];
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, sem alterar a seleção.
553
- * Recebe uma instância de `Date` por property binding; valores inválidos usam a data atual.
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 efetivamente selecionada, ou `null` quando não há seleção; é diferente de `referenceDate`, que controla apenas o mês visível.
564
- * Recebe uma instância de `Date` por property binding; datas inválidas usam `null`.
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
- /** Define se a seleção ocorre por data única ou por intervalo. Valores inválidos usam `single`. */
610
+ /**
611
+ * Define se a seleção ocorre por data única ou por intervalo.
612
+ * @default 'single'
613
+ */
574
614
  this.selectionMode = 'single';
575
- /** Data inicial selecionada quando o calendário opera no modo de intervalo. */
615
+ /**
616
+ * Data inicial selecionada quando o calendário opera no modo de intervalo.
617
+ * @default null
618
+ */
576
619
  this.rangeStart = null;
577
- /** Data final selecionada quando o calendário opera no modo de intervalo. */
620
+ /**
621
+ * Data final selecionada quando o calendário opera no modo de intervalo.
622
+ * @default null
623
+ */
578
624
  this.rangeEnd = null;
579
- /** Desabilita a interação do calendário quando ativo. */
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
- * Recebe instâncias de `Date` por property binding; datas inválidas são ignoradas.
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
- /** Locale usado para gerar nomes de meses e dias da semana. */
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
- * Define se o calendário deve manter um número fixo de linhas (6 semanas = 42 dias)
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
- /** Sinaliza ao componentDidRender que deve mover o foco para a célula atual. */
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
- * Atualiza o mês exibido a partir da seleção do usuário.
610
- *
611
- * @param event - Mudança do `<select>` de mês.
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
- const date = setExports.set(this.baseDate, { month: monthIndex, date: 1 });
624
- this.emitDateStateChange(date);
678
+ this.navigateToMonth(setExports.set(this.baseDate, { month: monthIndex, date: 1 }));
625
679
  };
626
680
  /**
627
- * Executa a ação de navegação associada ao botão clicado.
628
- *
629
- * @param event - Clique no botão de navegação.
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
- const action = event.currentTarget.dataset.action;
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
- * Atualiza o ano exibido a partir do valor digitado.
650
- *
651
- * @param event - Mudança do campo de ano.
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
- const date = setExports.set(this.baseDate, { year, month: this.baseDate.getMonth(), date: 1 });
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
- * Gerencia a navegação por teclado dentro da grade de dias.
671
- *
672
- * Teclas suportadas:
673
- * - `ArrowLeft` / `ArrowRight`: avança ou recua um dia.
674
- * - `ArrowUp` / `ArrowDown`: avança ou recua sete dias (linha inteira).
675
- * - `PageUp` / `PageDown`: navega entre meses.
676
- * - `Home` / `End`: primeiro ou último dia da semana atual.
677
- * - `Enter` / `Space`: seleciona o dia com foco.
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
- * @param event - Evento de teclado disparado na grade.
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
- const target = event.target;
697
- const dateKey = target.dataset?.date;
698
- if (dateKey === undefined)
699
- return;
700
- event.preventDefault();
701
- const current = parseExports.parse(dateKey, 'yyyy-MM-dd', new Date());
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
- get effectiveSelectionMode() {
741
- return resolveAllowedPropValue(this.el, 'selectionMode', this.selectionMode, ['single', 'range'], 'single');
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
- handleValueChange(newValue) {
759
- const normalizedValue = this.normalizeDateProp(newValue, 'value', null);
760
- const receivedTime = newValue instanceof Date && !Number.isNaN(newValue.getTime()) ? newValue.getTime() : null;
761
- if ((normalizedValue?.getTime() ?? null) !== receivedTime) {
762
- this.value = normalizedValue;
763
- return;
764
- }
765
- this.focusedDate = toDateExports.toDate(normalizedValue ?? this.referenceDate);
766
- }
767
- handleReferenceDateChange(newValue) {
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, 'yyyy-MM-dd');
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
- * Garante que o valor de `weekStartsOn` esteja dentro do domínio suportado.
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
- * Garante que o locale informado seja suportado.
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 o estado consolidado do componente para manter a navegação sincronizada.
915
+ * Emite `dateStateChange` atualizando `referenceDate`, `value` e `range`.
916
+ * Zera segundos/milissegundos para consistência.
852
917
  *
853
- * @param nextReferenceDate - Nova data de referência após a interação.
854
- * @param nextValue - Valor selecionado final; por padrão, mantém a seleção atual.
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 usado em cada ação de navegação.
876
- *
877
- * @param action - Ação de navegação representada pelo botão.
878
- * @returns Nome do ícone ou um fallback quando a ação não é reconhecida.
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
- * Aplica a data clicada preservando hora e minuto da referência atual.
892
- *
893
- * @param date - Dia selecionado no calendário.
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.effectiveSelectionMode === 'range') {
973
+ if (this.selectionMode === 'range') {
906
974
  this.handleRangeDayClick(newDate);
907
975
  return;
908
976
  }
909
977
  this.emitDateStateChange(newDate, newDate);
910
978
  }
911
- /** Atualiza o intervalo selecionado com base no clique atual. */
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
- /** Decrementa o mês mantendo o primeiro dia do mês exibido e preservando a seleção de range. */
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
- const date = setExports.set(subMonthsExports.subMonths(this.baseDate, 1), { date: 1 });
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
- /** Incrementa o mês mantendo o primeiro dia do mês exibido e preservando a seleção de range. */
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
- const date = setExports.set(addMonthsExports.addMonths(this.baseDate, 1), { date: 1 });
945
- const range = this.effectiveSelectionMode === 'range' && this.rangeStart !== null && this.rangeEnd !== null
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(date, this.value, range);
1039
+ this.emitDateStateChange(monthDate, value, range);
949
1040
  }
950
- /** Indica se um dia está indisponível para seleção. */
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.normalizedDisabledDates.some((disabledDate) => isSameDayExports.isSameDay(disabledDate, date));
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
- /** Data base usada para todos os cálculos de calendário. */
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
- * Recupera um handler estável para a célula do dia informado.
960
- *
961
- * @param date - Dia representado pela célula.
962
- * @returns Função de clique reutilizável.
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 completo da célula de dia.
978
- *
979
- * @param date - Dia representado pela célula.
980
- * @returns Texto anunciado pelo leitor de tela, incluindo estado de seleção.
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
- const isSelected = this.effectiveSelectionMode === 'single' && this.value !== null && isSameDayExports.isSameDay(date, this.value);
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 (isBetween)
1097
+ if (state.isInRange)
998
1098
  return `${fullDate}, no intervalo selecionado`;
999
1099
  return fullDate;
1000
1100
  }
1001
- /** Locale do date-fns derivado da prop pública do componente. */
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 as classes CSS da célula do dia com base em seleção, mês e data atual.
1007
- *
1008
- * @param date - Dia da grade do calendário.
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(date) {
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': !isSameMonthExports.isSameMonth(date, this.baseDate),
1021
- today: isSameDayExports.isSameDay(date, toDateExports.toDate(new Date())),
1022
- selected: this.effectiveSelectionMode === 'single' && selected !== null && isSameDayExports.isSameDay(date, selected),
1023
- 'range-start': this.effectiveSelectionMode === 'range' && isRangeStart,
1024
- 'range-end': this.effectiveSelectionMode === 'range' && isRangeEnd,
1025
- 'in-range': this.effectiveSelectionMode === 'range' && isBetweenRange,
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
- /** Normaliza os limites do intervalo para garantir ordem cronológica. */
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
- /** Verifica se uma data está estritamente entre início e fim do intervalo. */
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
- /** Gera a sequência completa de dias visíveis na grade do mês. */
1037
- getMonthViewDates() {
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
- let end = endOfWeekExports.endOfWeek(endOfMonthExports.endOfMonth(this.baseDate), { weekStartsOn: this.weekStartsOn });
1040
- // Se fixedRowCount está ativo, garante sempre 6 semanas (42 dias)
1041
- if (this.fixedRowCount) {
1042
- // Calcula o número de semanas que seriam normalmente geradas
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 sempre dentro da grade visível.
1056
- *
1057
- * Se `focusedDate` não estiver visível no mês atual, retorna o primeiro dia
1058
- * da grade do mês para garantir que sempre haja um elemento com `tabIndex={0}`.
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 visibleDates = this.getMonthViewDates();
1064
- const isInCurrentMonth = visibleDates.some((d) => isSameDayExports.isSameDay(d, this.focusedDate));
1065
- if (isInCurrentMonth) {
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 visibleDates[0] ?? this.focusedDate;
1192
+ return interval.start;
1069
1193
  }
1070
1194
  /**
1071
- * Constrói o rótulo acessível dos botões de navegação do mês.
1072
- *
1073
- * @param action - Ação associada ao botão.
1074
- * @returns Texto acessível exibido para leitores de tela.
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
- /** Retorna os rótulos das semanas conforme locale e início da semana. */
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
- /** Retorna os rótulos dos meses no locale atual. */
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
- * Renderiza um botão consistente de navegação do calendário.
1096
- *
1097
- * @param action - Ação executada pelo botão.
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
- /** Renderiza o cabeçalho do calendário com navegação, mês e ano. */
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
- /** Renderiza a seleção de mês com label acessível. */
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
- /** Renderiza o campo de ano com label acessível. */
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
- /** Renderiza uma opção do seletor de meses. */
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
- /** Renderiza a estrutura principal do calendário. */
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
- /** Renderiza a linha de rótulos dos dias da semana. */
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
- 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": label, part: "weekday" }, label)))));
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
- /** Renderiza a grade com os dias do mês atual. */
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 dates = this.getMonthViewDates();
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", onKeyDown: this.handleGridKeydown, part: "grid" }, weeks.map((week) => (h("div", { key: `week-${formatExports.format(week[0], 'yyyy-MM-dd')}`, class: "week", role: "row", tabIndex: -1 }, week.map(this.renderDayCell, this))))));
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
- * Move o foco de teclado para a data informada, navegando de mês quando necessário.
1136
- *
1137
- * @param date - Data de destino do foco.
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
- moveFocusTo(date) {
1140
- this.focusedDate = date;
1141
- this.shouldFocusDate = true;
1142
- if (!isSameMonthExports.isSameMonth(date, this.baseDate)) {
1143
- this.emitDateStateChange(date, this.value);
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: 'bf83467d8324a00d3e1d3dc8912bdc732e33ea77' }, h("div", { key: 'e6501b7d8765b032c3681d3d44937631f342bb15', class: "br-date-picker", part: "container" }, this.renderCalendarHeader(), this.renderCalendar())));
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
- * Valida se o modo informado pertence ao conjunto suportado pelo datetime-input.
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 o modo é válido.
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 datetime-input para um valor suportado.
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 informado via prop.
1393
- * @returns Modo válido, aplicando o padrão quando necessário.
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
- * Verifica se o valor informado é uma instância de Date válida.
1625
+ * Retorna `true` quando `value` é uma instância válida de `Date`.
1403
1626
  *
1404
- * @param value - Valor recebido via prop.
1405
- * @returns `true` quando é Date válido.
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 data de referência para evitar valores inválidos.
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 válido para uso interno.
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 valor selecionado do input (Date válido ou null).
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 válido ou null quando o valor é inválido.
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
- /** Valor textual exibido no campo e usado durante a edição manual. */
1446
- this.inputValue = '';
1671
+ this.inputValidationChange = createEvent(this, "inputValidationChange", 7);
1447
1672
  /**
1448
- * Define o placeholder do campo de entrada.
1673
+ * Texto de placeholder exibido quando o campo estiver vazio.
1449
1674
  *
1450
1675
  * @default ''
1451
1676
  */
1452
1677
  this.placeholder = '';
1453
1678
  /**
1454
- * Define o modo de entrada: `date`, `time` ou `datetime`.
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 que orienta a navegação visual do calendário sem alterar a seleção.
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
- * Data efetivamente selecionada, ou `null` quando nada foi escolhido; é diferente
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
- * Desabilita digitação e abertura do picker quando ativo.
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 se a seleção ocorre por data única ou por intervalo.
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
- * Data inicial do intervalo quando em modo range.
1709
+ * Início do intervalo em `selectionMode === 'range'`.
1499
1710
  *
1500
1711
  * @default null
1501
1712
  */
1502
1713
  this.rangeStart = null;
1503
1714
  /**
1504
- * Data final do intervalo quando em modo range.
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
- * Confirma o conteúdo digitado quando o foco sai do input nativo, inclusive
1517
- * quando avança para o botão de calendário dentro do mesmo `br-input`.
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
- if (!(event.composedPath()[0] instanceof HTMLInputElement)) {
1521
- return;
1522
- }
1523
- if (this.disabled) {
1524
- return;
1525
- }
1526
- this.commitInputValue();
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 disparado pelo campo textual.
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.inputValue = input.value;
1781
+ this.lastCommittedInputText = null;
1782
+ this.emitInputValidation(null);
1783
+ this.setInternalInputValue(input.value ?? '');
1539
1784
  };
1540
1785
  /**
1541
- * Permite confirmar a digitação pressionando Enter.
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 do campo de entrada.
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
- this.commitInputValue();
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
- /** Move o foco para o input interno sem expor a árvore privada ao componente pai. @internal */
1573
- async focusInput() {
1574
- this.el.shadowRoot?.querySelector('br-input')?.focus();
1575
- }
1576
- get effectiveSelectionMode() {
1577
- return resolveAllowedPropValue(this.el, 'selectionMode', this.selectionMode, ['single', 'range'], 'single');
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.effectiveSelectionMode === 'range') {
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.effectiveSelectionMode === 'range') {
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
- * Registra os listeners do input nativo e do botão de ação após o DOM estar disponível.
1914
+ * Confirma o conteúdo atual evitando commits duplicados (blur + change).
1651
1915
  *
1652
- * O br-button que envolve o slot "action" é focável. Quando Space/Enter é pressionado,
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
- async componentDidLoad() {
1658
- // Tenta encontrar o br-button dentro do br-input que envolve o slot action
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
- this.inputShadowRoot = brInput.shadowRoot;
1667
- this.inputShadowRoot.addEventListener('blur', this.handleInputBlur, true);
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.actionButton = actionButton;
1672
- // Listener para clique no botão de ação (funciona para mouse e Space/Enter via button nativo)
1673
- actionButton.addEventListener('click', this.handleActionButtonClick);
1924
+ this.lastCommittedInputText = currentText;
1925
+ this.commitInputValue();
1926
+ this.lastCommittedInputText = this.inputValue.trim();
1674
1927
  }
1675
- disconnectedCallback() {
1676
- this.inputShadowRoot?.removeEventListener('blur', this.handleInputBlur, true);
1677
- this.inputShadowRoot = undefined;
1678
- this.actionButton?.removeEventListener('click', this.handleActionButtonClick);
1679
- this.actionButton = undefined;
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 o modo de operação para um valor suportado.
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 a data de referência seja uma instância válida de `Date`.
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.effectiveSelectionMode === 'range' && this.mode === 'date') {
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.inputValue = `${this.formatDateByMode(normalizedRange.start)} - ${this.formatDateByMode(normalizedRange.end)}`;
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.inputValue = this.formatDateByMode(newDate);
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.parseDateInput(startText, base);
1794
- const parsedEnd = this.parseDateInput(endText, base);
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
- /** Normaliza os limites do intervalo para garantir ordem cronológica. */
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 campo com as props atuais de valor e modo.
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.effectiveSelectionMode === 'range') {
2167
+ if (this.selectionMode === 'range') {
1809
2168
  if (this.rangeStart === null || this.rangeEnd === null) {
1810
- this.inputValue = '';
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.inputValue = `${startFormatted} - ${endFormatted}`;
2174
+ this.setInternalInputValue(`${startFormatted} - ${endFormatted}`);
1816
2175
  return;
1817
2176
  }
1818
2177
  if (this.value === null) {
1819
- this.inputValue = '';
2178
+ this.setInternalInputValue('');
1820
2179
  return;
1821
2180
  }
1822
- this.inputValue = this.formatDateByMode(this.value);
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
- switch (this.mode) {
1832
- case 'date':
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 as classes CSS base aplicadas ao host visual do componente.
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
- * @returns Data convertida em objeto `Date` ou `null` quando inválida.
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 parsedDate = parseExports.parse(value, 'dd/MM/yyyy', base);
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 parsedTime = parseExports.parse(value, 'HH:mm', base);
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, com fallback para entradas parciais.
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, 'dd/MM/yyyy HH:mm', base);
2313
+ const full = parseExports.parse(value, fullPattern, base);
1926
2314
  if (isValidExports.isValid(full))
1927
2315
  return full;
1928
- // so data -> hora atual
1929
- const date = this.parseDateInput(value, base);
1930
- if (date !== null) {
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
- // so hora -> data atual
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: '8c5536c6a740ac0d42be7bf89ffc1098d896f895' }, h("div", { key: 'c9a1a995838739f5b6e00fcf39a21bee81362e90', class: this.getCssClassMap(), part: "container" }, this.renderInputField())));
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 de campos suportados pelo time picker.
2613
+ * Conjunto imutável dos campos suportados pelo `br-time-picker`.
2225
2614
  *
2226
- * Esses valores são usados como contrato entre a renderização do campo e a lógica de commit.
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 usada como referência para a navegação de hora e minuto, sem representar necessariamente a seleção.
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
- * @example
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
- * Data que contém a hora e o minuto efetivamente selecionados, ou `null` quando vazio.
2254
- * Recebe uma instância de `Date` por property binding; datas inválidas usam `null`.
2636
+ * Valor selecionado pelo usuário.
2255
2637
  *
2256
- * @example
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
- /** Desabilita todos os controles de navegação e edição de hora/minuto. */
2641
+ /**
2642
+ * Indica se os controles do seletor estão desabilitados.
2643
+ *
2644
+ * @default false
2645
+ */
2264
2646
  this.disabled = false;
2265
- /** Cacheia handlers por tipo de campo para preservar a mesma referência entre renderizações. */
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
- /** Cacheia handlers de commit por tipo de campo. */
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
- /** Cacheia handlers de teclado por tipo de campo. */
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
- handleReferenceDateChange(newValue) {
2317
- const normalizedReferenceDate = this.normalizeDateProp(newValue, 'referenceDate', new Date());
2318
- const receivedTime = newValue instanceof Date && !Number.isNaN(newValue.getTime()) ? newValue.getTime() : null;
2319
- if (normalizedReferenceDate.getTime() !== receivedTime)
2320
- this.referenceDate = normalizedReferenceDate;
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
- const normalizedValue = this.normalizeDateProp(newValue, 'value', null);
2324
- const receivedTime = newValue instanceof Date && !Number.isNaN(newValue.getTime()) ? newValue.getTime() : null;
2325
- if ((normalizedValue?.getTime() ?? null) !== receivedTime)
2326
- this.value = normalizedValue;
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
- /** Incrementa a hora mantendo os demais componentes da data intactos. */
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
- /** Incrementa o minuto mantendo os demais componentes da data intactos. */
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
- /** Decrementa a hora mantendo os demais componentes da data intactos. */
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
- /** Decrementa o minuto mantendo os demais componentes da data intactos. */
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
- /** Renderiza o bloco completo de hora e minuto. */
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: 'c89413711940ab403593c5e7a61a7cce26e2fc98' }, h("div", { key: '98688b192d54e60106f8420dd932a709470b5379', class: "br-time-picker", part: "container" }, this.renderTimePicker())));
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
  }]