@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,49 +2,54 @@
2
2
  * Construído por SERPRO
3
3
  * © https://serpro.gov.br/ - MIT License.
4
4
  */
5
- import { Host, h } from "@stencil/core";
5
+ import { Fragment, Host, h } from "@stencil/core";
6
6
  import { addDays } from "date-fns/addDays";
7
7
  import { addMonths } from "date-fns/addMonths";
8
+ import { addYears } from "date-fns/addYears";
8
9
  import { compareAsc } from "date-fns/compareAsc";
9
10
  import { eachDayOfInterval } from "date-fns/eachDayOfInterval";
10
11
  import { endOfMonth } from "date-fns/endOfMonth";
11
12
  import { endOfWeek } from "date-fns/endOfWeek";
12
13
  import { format } from "date-fns/format";
14
+ import { getDaysInMonth } from "date-fns/getDaysInMonth";
13
15
  import { isAfter } from "date-fns/isAfter";
14
16
  import { isBefore } from "date-fns/isBefore";
15
17
  import { isSameDay } from "date-fns/isSameDay";
16
18
  import { isSameMonth } from "date-fns/isSameMonth";
17
19
  import { parse } from "date-fns/parse";
18
20
  import { set } from "date-fns/set";
21
+ import { startOfDay } from "date-fns/startOfDay";
19
22
  import { startOfMonth } from "date-fns/startOfMonth";
20
23
  import { startOfWeek } from "date-fns/startOfWeek";
21
24
  import { subMonths } from "date-fns/subMonths";
22
25
  import { toDate } from "date-fns/toDate";
23
26
  import { dispatchNativeFormEvent } from "../../../shared/utils/event";
24
- import { reportInvalidPropValue } from "../../../shared/utils/prop-warning";
25
- import { resolveAllowedPropValue } from "../../../shared/utils/props";
26
27
  import { resolveSsrLocalDate } from "../../../shared/utils/ssr-date";
27
28
  import { DATETIME_PICKER_LOCALE, NAVIGATION_ACTION } from "../datetime-picker-constants";
28
- import { isValidDatetimePickerDateRange, normalizeDatetimePickerDisabledDates, } from "../datetime-picker-props-validation";
29
- import { getMonthLabels, getWeekdayLabels, resolveDateFnsLocale } from "./date-picker-locale";
29
+ import { getMonthLabels, getWeekdayFullNames, getWeekdayLabels, resolveDateFnsLocale } from "./date-picker-locale";
30
30
  import { normalizeLocale, normalizeWeekStartsOn } from "./date-picker-props-validation";
31
+ /** Formato da chave local de dia usada em `data-date` e nas buscas de datas bloqueadas. */
32
+ const DAY_KEY_FORMAT = 'yyyy-MM-dd';
31
33
  /**
32
- * Subcomponente de calendário visual do GovBR-DS, projetado para seleção interativa de datas individuais ou intervalos.
34
+ * Calendário usado pelo `br-datetime-picker`. Também pode ser usado sozinho, quando a tela precisa de um calendário sempre visível.
33
35
  *
34
- * ### Papel na composição
36
+ * Usado sozinho, ele não tem campo de texto nem participa de formulário: a aplicação lê a seleção e cuida da validação.
35
37
  *
36
- * - Exibe a grade mensal navegável com suporte a seleção de dia, navegação entre meses e anos, e destaque para a data atual e intervalos.
37
- * - Implementa navegação acessível por teclado WAI-ARIA Grid (setas direcionais para dias e semanas).
38
+ * ```html
39
+ * <br-date-picker id="agenda"></br-date-picker>
40
+ * ```
38
41
  *
39
- * ### Regra de uso e relacionamento
42
+ * ```js
43
+ * const calendario = document.querySelector('#agenda');
44
+ * calendario.addEventListener('change', () => console.log(calendario.value));
45
+ * ```
40
46
  *
41
- * Geralmente exibido dentro da superfície suspensa coordenada pelo `br-datetime-picker`. Pode ser declarado isoladamente quando a interface demandar um calendário estático permanentemente embutido na página (inline calendar).
47
+ * - `value`: data selecionada (`Date`).
48
+ * - `referenceDate`: mês exibido.
49
+ * - `disabledDates`: datas que não podem ser escolhidas.
50
+ * - `selectionMode="range"`: seleção de intervalo, lida em `rangeValue`.
42
51
  *
43
- * Para a documentação completa de design, consulte o [Design System do GovBR](https://www.gov.br/ds/components/datetime-picker?tab=designer).
44
- *
45
-
46
- * @category Formulários, Seleção
47
- * @status stable
52
+ * Para mudar o idioma, veja "Idiomas" na documentação do `br-datetime-picker`.
48
53
  *
49
54
  * @part container - Parte para o container base do calendário.
50
55
  * @part header - Cabeçalho do calendário (contendo navegação e seleção de mês/ano).
@@ -58,73 +63,78 @@ import { normalizeLocale, normalizeWeekStartsOn } from "./date-picker-props-vali
58
63
  */
59
64
  export class DatePicker {
60
65
  constructor() {
61
- /** Data com foco atual na navegação por teclado do calendário. */
62
- this.focusedDate = new Date();
63
- /** Datas inválidas são removidas da lista antes da comparação com o calendário. */
64
- this.normalizedDisabledDates = [];
65
- /** Define o índice do dia em que a semana começa na interface do calendário. */
66
+ /**
67
+ * Índice do dia em que a semana começa na interface do calendário.
68
+ * @default 0
69
+ */
66
70
  this.weekStartsOn = 0;
67
71
  /**
68
- * Data usada como base visual para o mês atualmente exibido, sem alterar a seleção.
69
- * Recebe uma instância de `Date` por property binding; valores inválidos usam a data atual.
70
- *
71
- * @example
72
- * ```js
73
- * const calendar = document.querySelector('br-date-picker');
74
- * calendar.referenceDate = new Date(2026, 8, 1);
75
- * ```
72
+ * Data usada como base visual para o mês atualmente exibido.
73
+ * @default new Date()
76
74
  */
77
75
  this.referenceDate = new Date();
78
76
  /**
79
- * Data efetivamente selecionada, ou `null` quando não há seleção; é diferente de `referenceDate`, que controla apenas o mês visível.
80
- * Recebe uma instância de `Date` por property binding; datas inválidas usam `null`.
81
- *
82
- * @example
83
- * ```js
84
- * const calendar = document.querySelector('br-date-picker');
85
- * calendar.value = new Date(2026, 8, 7);
86
- * ```
77
+ * Data atualmente selecionada pelo usuário, ou `null` quando não há seleção.
78
+ * @default null
87
79
  */
88
80
  this.value = null;
89
- /** Define se a seleção ocorre por data única ou por intervalo. Valores inválidos usam `single`. */
81
+ /**
82
+ * Define se a seleção ocorre por data única ou por intervalo.
83
+ * @default 'single'
84
+ */
90
85
  this.selectionMode = 'single';
91
- /** Data inicial selecionada quando o calendário opera no modo de intervalo. */
86
+ /**
87
+ * Data inicial selecionada quando o calendário opera no modo de intervalo.
88
+ * @default null
89
+ */
92
90
  this.rangeStart = null;
93
- /** Data final selecionada quando o calendário opera no modo de intervalo. */
91
+ /**
92
+ * Data final selecionada quando o calendário opera no modo de intervalo.
93
+ * @default null
94
+ */
94
95
  this.rangeEnd = null;
95
- /** Desabilita a interação do calendário quando ativo. */
96
+ /**
97
+ * Desabilita a interação do calendário quando `true`.
98
+ * @default false
99
+ */
96
100
  this.disabled = false;
97
101
  /**
98
102
  * Lista de datas indisponíveis para seleção no calendário.
99
- * Recebe instâncias de `Date` por property binding; datas inválidas são ignoradas.
100
- *
101
- * @example
102
- * ```js
103
- * const calendar = document.querySelector('br-date-picker');
104
- * calendar.disabledDates = [new Date(2026, 8, 7), new Date(2026, 8, 8)];
105
- * ```
103
+ * @default []
106
104
  */
107
105
  this.disabledDates = [];
108
- /** Locale usado para gerar nomes de meses e dias da semana. */
106
+ /**
107
+ * Locale usado para gerar nomes de meses e dias da semana.
108
+ * @default DATETIME_PICKER_LOCALE.DEFAULT
109
+ */
109
110
  this.locale = DATETIME_PICKER_LOCALE.DEFAULT;
110
111
  /**
111
- * Define se o calendário deve manter um número fixo de linhas (6 semanas = 42 dias)
112
- * ou variar conforme o mês.
113
- *
114
- * Quando `true`, o calendário sempre exibe 6 semanas completas.
115
- * Quando `false`, o calendário adapta-se ao mês, exibindo apenas as semanas necessárias.
116
- *
112
+ * Se `true`, o calendário sempre exibe 6 semanas (42 dias); caso contrário, adapta-se ao mês.
117
113
  * @default false
118
114
  */
119
115
  this.fixedRowCount = false;
120
- /** Sinaliza ao componentDidRender que deve mover o foco para a célula atual. */
116
+ /**
117
+ * Data atualmente com foco para navegação por teclado.
118
+ * Usada para controlar qual célula do calendário recebe `tabindex=0`.
119
+ * @type {Date}
120
+ * @default new Date()
121
+ * @internal
122
+ */
123
+ this.focusedDate = new Date();
124
+ /**
125
+ * Sinaliza ao `componentDidRender` que o foco deve ser movido para a célula atual.
126
+ * @internal
127
+ */
121
128
  this.shouldFocusDate = false;
122
- /** Mantém handlers estáveis por data para evitar recriação a cada renderização. */
123
- this.dayClickHandlers = new WeakMap();
124
129
  /**
125
- * Atualiza o mês exibido a partir da seleção do usuário.
126
- *
127
- * @param event - Mudança do `<select>` de mês.
130
+ * Chaves `yyyy-MM-dd` das datas bloqueadas, para consulta O(1) por célula.
131
+ * @internal
132
+ */
133
+ this.disabledDateKeysCache = new Set();
134
+ /**
135
+ * Handler de mudança do seletor de mês.
136
+ * @param event - evento de mudança do `<select>`
137
+ * @internal
128
138
  */
129
139
  this.handleMonthChange = (event) => {
130
140
  if (this.disabled) {
@@ -136,16 +146,21 @@ export class DatePicker {
136
146
  console.warn(`Índice de mês inválido selecionado: ${select.value}`);
137
147
  return;
138
148
  }
139
- const date = set(this.baseDate, { month: monthIndex, date: 1 });
140
- this.emitDateStateChange(date);
149
+ this.navigateToMonth(set(this.baseDate, { month: monthIndex, date: 1 }));
141
150
  };
142
151
  /**
143
- * Executa a ação de navegação associada ao botão clicado.
144
- *
145
- * @param event - Clique no botão de navegação.
152
+ * Trata cliques nos botões de navegação do calendário.
153
+ * @param event - evento de clique
154
+ * @internal
146
155
  */
147
156
  this.handleNavigationClick = (event) => {
148
- const action = event.currentTarget.dataset.action;
157
+ if (this.disabled) {
158
+ return;
159
+ }
160
+ const actionFromPath = event
161
+ .composedPath()
162
+ .find((target) => target instanceof HTMLElement && target.dataset.action !== undefined);
163
+ const action = (actionFromPath?.dataset.action ?? event.currentTarget?.dataset.action);
149
164
  if (action === undefined) {
150
165
  console.warn('Botão de navegação clicado sem data-action definido');
151
166
  return;
@@ -162,9 +177,10 @@ export class DatePicker {
162
177
  }
163
178
  };
164
179
  /**
165
- * Atualiza o ano exibido a partir do valor digitado.
166
- *
167
- * @param event - Mudança do campo de ano.
180
+ * Handler de alteração do campo ano.
181
+ * Valida o ano antes de aplicar a mudança.
182
+ * @param event - evento de mudança do input de ano
183
+ * @internal
168
184
  */
169
185
  this.handleYearChange = (event) => {
170
186
  if (this.disabled) {
@@ -176,23 +192,35 @@ export class DatePicker {
176
192
  console.warn(`Ano inválido digitado: ${input.value}`);
177
193
  return;
178
194
  }
179
- const date = set(this.baseDate, { year, month: this.baseDate.getMonth(), date: 1 });
180
- const range = this.effectiveSelectionMode === 'range' && this.rangeStart !== null && this.rangeEnd !== null
181
- ? { start: this.rangeStart, end: this.rangeEnd }
182
- : undefined;
183
- this.emitDateStateChange(date, this.value, range);
195
+ this.navigateToMonth(set(this.baseDate, { year, month: this.baseDate.getMonth(), date: 1 }));
184
196
  };
185
197
  /**
186
- * Gerencia a navegação por teclado dentro da grade de dias.
187
- *
188
- * Teclas suportadas:
189
- * - `ArrowLeft` / `ArrowRight`: avança ou recua um dia.
190
- * - `ArrowUp` / `ArrowDown`: avança ou recua sete dias (linha inteira).
191
- * - `PageUp` / `PageDown`: navega entre meses.
192
- * - `Home` / `End`: primeiro ou último dia da semana atual.
193
- * - `Enter` / `Space`: seleciona o dia com foco.
198
+ * Trata cliques com um handler compartilhado, lendo a data local da célula.
199
+ * @param event - evento de clique da célula
200
+ * @internal
201
+ */
202
+ this.handleDayCellClick = (event) => {
203
+ const cell = event.currentTarget;
204
+ if (!(cell instanceof HTMLElement) || cell.dataset.date === undefined) {
205
+ console.warn('Célula de dia clicada sem data-date definido');
206
+ return;
207
+ }
208
+ const date = parse(cell.dataset.date, DAY_KEY_FORMAT, this.baseDate);
209
+ if (Number.isNaN(date.getTime())) {
210
+ console.warn(`Data inválida na célula de dia: ${cell.dataset.date}`);
211
+ return;
212
+ }
213
+ this.handleDayClick(date);
214
+ };
215
+ /**
216
+ * Gerencia navegação por teclado dentro da grade de dias.
217
+ * Teclas suportadas: ArrowLeft/Right/Up/Down, PageUp/PageDown (mês), Shift+PageUp/PageDown (ano),
218
+ * Home/End, Enter/Space.
194
219
  *
195
- * @param event - Evento de teclado disparado na grade.
220
+ * Permanece ativo em datas bloqueadas para que o foco não fique preso nelas; somente a seleção é ignorada.
221
+ * @param event - evento de teclado
222
+ * @returns void
223
+ * @internal
196
224
  */
197
225
  this.handleGridKeydown = (event) => {
198
226
  const HANDLED_KEYS = [
@@ -209,12 +237,22 @@ export class DatePicker {
209
237
  ];
210
238
  if (!HANDLED_KEYS.includes(event.key))
211
239
  return;
212
- const target = event.target;
213
- const dateKey = target.dataset?.date;
214
- if (dateKey === undefined)
215
- return;
216
- event.preventDefault();
217
- const current = parse(dateKey, 'yyyy-MM-dd', new Date());
240
+ // O `event.target` pode ser um nó interno (texto) ou o foco pode estar
241
+ // em um container; tentamos localizar a célula com `data-date`.
242
+ const targetEl = event.target?.closest?.('[data-date]');
243
+ // Se encontrarmos a célula, usamos sua data; caso contrário, usamos a
244
+ // data atualmente focada (`focusedDate`) como fallback. Em ambos os casos
245
+ // prevenimos o comportamento padrão para manter consistência.
246
+ let current;
247
+ if (targetEl && targetEl.dataset?.date !== undefined) {
248
+ const dateKey = targetEl.dataset.date;
249
+ event.preventDefault();
250
+ current = parse(dateKey, DAY_KEY_FORMAT, new Date());
251
+ }
252
+ else {
253
+ event.preventDefault();
254
+ current = this.getNormalizedFocusedDate();
255
+ }
218
256
  if (event.key === 'Enter' || event.key === ' ') {
219
257
  if (!this.isDateDisabled(current)) {
220
258
  this.handleDayClick(current);
@@ -236,10 +274,10 @@ export class DatePicker {
236
274
  next = addDays(current, 7);
237
275
  break;
238
276
  case 'PageUp':
239
- next = addMonths(current, -1);
277
+ next = event.shiftKey ? addYears(current, -1) : addMonths(current, -1);
240
278
  break;
241
279
  case 'PageDown':
242
- next = addMonths(current, 1);
280
+ next = event.shiftKey ? addYears(current, 1) : addMonths(current, 1);
243
281
  break;
244
282
  case 'Home':
245
283
  next = startOfWeek(current, { weekStartsOn: this.weekStartsOn });
@@ -253,47 +291,43 @@ export class DatePicker {
253
291
  this.moveFocusTo(next);
254
292
  };
255
293
  }
256
- get effectiveSelectionMode() {
257
- return resolveAllowedPropValue(this.el, 'selectionMode', this.selectionMode, ['single', 'range'], 'single');
258
- }
294
+ /**
295
+ * Observador para a prop `rangeValue` — sincroniza `rangeStart` e `rangeEnd`.
296
+ * @param {DatetimePickerDateRange | undefined} newValue - novo intervalo controlado recebido (`undefined` quando não fornecido)
297
+ * @internal
298
+ */
259
299
  handleRangeValueChange(newValue) {
260
300
  if (!newValue)
261
301
  return;
262
- if (!isValidDatetimePickerDateRange(newValue)) {
263
- 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.');
264
- return;
265
- }
266
302
  this.rangeStart = newValue.start;
267
303
  this.rangeEnd = newValue.end;
268
304
  }
269
305
  /**
270
306
  * Sincroniza `focusedDate` quando o valor selecionado muda externamente.
271
307
  *
272
- * @param newValue - Novo valor recebido via prop.
308
+ * @param {Date | null} newValue - Novo valor recebido via prop.
273
309
  */
274
- handleValueChange(newValue) {
275
- const normalizedValue = this.normalizeDateProp(newValue, 'value', null);
276
- const receivedTime = newValue instanceof Date && !Number.isNaN(newValue.getTime()) ? newValue.getTime() : null;
277
- if ((normalizedValue?.getTime() ?? null) !== receivedTime) {
278
- this.value = normalizedValue;
279
- return;
280
- }
281
- this.focusedDate = toDate(normalizedValue ?? this.referenceDate);
282
- }
283
- handleReferenceDateChange(newValue) {
284
- const normalizedReferenceDate = this.normalizeDateProp(newValue, 'referenceDate', new Date());
285
- const receivedTime = newValue instanceof Date && !Number.isNaN(newValue.getTime()) ? newValue.getTime() : null;
286
- if (normalizedReferenceDate.getTime() !== receivedTime) {
287
- this.referenceDate = normalizedReferenceDate;
288
- return;
310
+ /**
311
+ * Observador para a prop `value` — atualiza `focusedDate` quando a seleção externa muda.
312
+ * @param {Date | null} newValue - novo valor de seleção (ou `null`)
313
+ * @param {Date | null} oldValue - valor anterior da seleção
314
+ * @internal
315
+ */
316
+ handleValueChange(newValue, oldValue) {
317
+ // Reatribuições com o mesmo instante (ex.: navegação entre meses) não devem mover o foco.
318
+ if (newValue !== null && newValue.getTime() !== oldValue?.getTime()) {
319
+ this.focusedDate = toDate(newValue);
289
320
  }
290
- if (this.value === null)
291
- this.focusedDate = toDate(normalizedReferenceDate);
292
321
  }
293
322
  /**
294
323
  * Revalida a configuração quando o início da semana muda.
295
324
  *
296
- * @param newValue - Novo valor recebido via prop.
325
+ * @param {number} newValue - Novo valor recebido via prop.
326
+ */
327
+ /**
328
+ * Observador para `weekStartsOn` — revalida a configuração quando alterada externamente.
329
+ * @param {number} newValue - novo índice do início da semana
330
+ * @internal
297
331
  */
298
332
  handleWeekStartsOnChange(newValue) {
299
333
  this.ensureValidWeekStartsOn(newValue);
@@ -301,42 +335,35 @@ export class DatePicker {
301
335
  /**
302
336
  * Revalida o locale quando a prop muda.
303
337
  *
304
- * @param newValue - Novo valor recebido via prop.
338
+ * @param {string} newValue - Novo valor recebido via prop.
339
+ */
340
+ /**
341
+ * Observador para `locale` — revalida/normaliza o locale informado.
342
+ * @param {string} newValue - nova string de locale
343
+ * @internal
305
344
  */
306
345
  handleLocaleChange(newValue) {
307
346
  this.ensureValidLocale(newValue);
308
347
  }
309
- handleDisabledDatesChange(newValue) {
310
- this.normalizedDisabledDates = normalizeDatetimePickerDisabledDates(newValue, 'br-date-picker');
311
- }
312
- /**
313
- * Normaliza os valores públicos antes da primeira renderização.
314
- */
315
348
  componentWillLoad() {
316
- this.referenceDate = this.normalizeDateProp(this.referenceDate, 'referenceDate', new Date());
317
- this.value = this.normalizeDateProp(this.value, 'value', null);
318
349
  this.referenceDate = resolveSsrLocalDate(this.el, this.referenceDate);
319
350
  this.ensureValidWeekStartsOn();
320
351
  this.ensureValidLocale();
321
- this.handleDisabledDatesChange(this.disabledDates);
322
352
  this.focusedDate = toDate(this.value ?? this.referenceDate);
323
353
  }
324
- /**
325
- * Move o foco para a célula correspondente ao `focusedDate` após re-renderização.
326
- */
327
354
  componentDidRender() {
328
355
  if (!this.shouldFocusDate)
329
356
  return;
330
357
  this.shouldFocusDate = false;
331
358
  const normalizedDate = this.getNormalizedFocusedDate();
332
- const dateKey = format(normalizedDate, 'yyyy-MM-dd');
359
+ const dateKey = format(normalizedDate, DAY_KEY_FORMAT);
333
360
  const cell = this.el.shadowRoot?.querySelector(`[data-date="${dateKey}"]`);
334
361
  cell?.focus();
335
362
  }
336
363
  /**
337
- * Garante que o valor de `weekStartsOn` esteja dentro do domínio suportado.
338
- *
364
+ * Valida e normaliza `weekStartsOn`.
339
365
  * @param value - Valor bruto informado pelo consumidor.
366
+ * @internal
340
367
  */
341
368
  ensureValidWeekStartsOn(value = this.weekStartsOn) {
342
369
  const normalizedWeekStartsOn = normalizeWeekStartsOn(value);
@@ -344,18 +371,10 @@ export class DatePicker {
344
371
  this.weekStartsOn = normalizedWeekStartsOn;
345
372
  }
346
373
  }
347
- normalizeDateProp(value, propertyName, fallback) {
348
- if (value === null && fallback === null)
349
- return null;
350
- if (value instanceof Date && !Number.isNaN(value.getTime()))
351
- return toDate(value);
352
- reportInvalidPropValue(this.el, propertyName, value, 'Informe uma instância de Date válida.', `Aplicando fallback ${fallback === null ? 'null' : 'new Date()'}.`);
353
- return fallback === null ? null : toDate(fallback);
354
- }
355
374
  /**
356
- * Garante que o locale informado seja suportado.
357
- *
375
+ * Valida e normaliza o `locale` informado.
358
376
  * @param value - Valor bruto informado pelo consumidor.
377
+ * @internal
359
378
  */
360
379
  ensureValidLocale(value = this.locale) {
361
380
  const normalizedLocale = normalizeLocale(value);
@@ -364,16 +383,20 @@ export class DatePicker {
364
383
  }
365
384
  }
366
385
  /**
367
- * Emite o estado consolidado do componente para manter a navegação sincronizada.
386
+ * Emite `dateStateChange` atualizando `referenceDate`, `value` e `range`.
387
+ * Zera segundos/milissegundos para consistência.
368
388
  *
369
- * @param nextReferenceDate - Nova data de referência após a interação.
370
- * @param nextValue - Valor selecionado final; por padrão, mantém a seleção atual.
389
+ * @param nextReferenceDate - nova data de referência
390
+ * @param nextValue - data selecionada ou `null` (por padrão, mantém `this.value`)
391
+ * @param nextRange - intervalo de datas quando aplicável
392
+ * @internal
371
393
  */
372
394
  emitDateStateChange(nextReferenceDate, nextValue = this.value, nextRange = undefined) {
373
395
  // Garantir segundos zerados (componente não manipula segundos)
374
396
  const normalizedReference = set(nextReferenceDate, { seconds: 0, milliseconds: 0 });
375
397
  const normalizedValue = nextValue === null ? null : set(nextValue, { seconds: 0, milliseconds: 0 });
376
398
  const valueChanged = this.value?.getTime() !== normalizedValue?.getTime();
399
+ this.referenceDate = normalizedReference;
377
400
  this.value = normalizedValue;
378
401
  this.dateStateChange.emit({
379
402
  referenceDate: normalizedReference,
@@ -388,10 +411,10 @@ export class DatePicker {
388
411
  }
389
412
  }
390
413
  /**
391
- * Resolve o ícone usado em cada ação de navegação.
392
- *
393
- * @param action - Ação de navegação representada pelo botão.
394
- * @returns Nome do ícone ou um fallback quando a ação não é reconhecida.
414
+ * Resolve o nome do ícone para a ação de navegação.
415
+ * @param action - Ação de navegação
416
+ * @returns Nome do ícone
417
+ * @internal
395
418
  */
396
419
  getIconForAction(action) {
397
420
  switch (action) {
@@ -404,9 +427,9 @@ export class DatePicker {
404
427
  }
405
428
  }
406
429
  /**
407
- * Aplica a data clicada preservando hora e minuto da referência atual.
408
- *
409
- * @param date - Dia selecionado no calendário.
430
+ * Trata o clique numa célula de dia: aplica seleção ou atualiza intervalo.
431
+ * @param date - dia clicado
432
+ * @internal
410
433
  */
411
434
  handleDayClick(date) {
412
435
  if (this.disabled || this.isDateDisabled(date)) {
@@ -418,13 +441,17 @@ export class DatePicker {
418
441
  seconds: 0,
419
442
  milliseconds: 0,
420
443
  });
421
- if (this.effectiveSelectionMode === 'range') {
444
+ if (this.selectionMode === 'range') {
422
445
  this.handleRangeDayClick(newDate);
423
446
  return;
424
447
  }
425
448
  this.emitDateStateChange(newDate, newDate);
426
449
  }
427
- /** Atualiza o intervalo selecionado com base no clique atual. */
450
+ /**
451
+ * Atualiza o intervalo selecionado no modo `range`.
452
+ * @param clickedDate - data clicada pelo usuário
453
+ * @internal
454
+ */
428
455
  handleRangeDayClick(clickedDate) {
429
456
  const start = this.rangeStart;
430
457
  const end = this.rangeEnd;
@@ -441,153 +468,205 @@ export class DatePicker {
441
468
  end: normalizedEnd,
442
469
  });
443
470
  }
444
- /** Decrementa o mês mantendo o primeiro dia do mês exibido e preservando a seleção de range. */
471
+ /**
472
+ * Decrementa o mês exibido e preserva seleção/intervalo quando aplicável.
473
+ * @internal
474
+ */
445
475
  decreaseMonth() {
446
476
  if (this.disabled) {
447
477
  return;
448
478
  }
449
- const date = set(subMonths(this.baseDate, 1), { date: 1 });
450
- const range = this.effectiveSelectionMode === 'range' && this.rangeStart !== null && this.rangeEnd !== null
451
- ? { start: this.rangeStart, end: this.rangeEnd }
452
- : undefined;
453
- this.emitDateStateChange(date, this.value, range);
479
+ this.navigateToMonth(set(subMonths(this.baseDate, 1), { date: 1 }));
454
480
  }
455
- /** Incrementa o mês mantendo o primeiro dia do mês exibido e preservando a seleção de range. */
481
+ /**
482
+ * Incrementa o mês exibido e preserva seleção/intervalo quando aplicável.
483
+ * @internal
484
+ */
456
485
  increaseMonth() {
457
486
  if (this.disabled) {
458
487
  return;
459
488
  }
460
- const date = set(addMonths(this.baseDate, 1), { date: 1 });
461
- const range = this.effectiveSelectionMode === 'range' && this.rangeStart !== null && this.rangeEnd !== null
489
+ this.navigateToMonth(set(addMonths(this.baseDate, 1), { date: 1 }));
490
+ }
491
+ /**
492
+ * Exibe o mês informado preservando a seleção, o intervalo completo e o dia em foco.
493
+ *
494
+ * O foco vai para a data selecionada quando ela pertence ao novo mês; caso
495
+ * contrário, mantém o mesmo dia do mês, limitado ao último dia disponível
496
+ * (ex.: 31/01 → 28/02).
497
+ *
498
+ * @param monthDate - primeiro dia do mês de destino
499
+ * @internal
500
+ */
501
+ navigateToMonth(monthDate) {
502
+ const value = this.value;
503
+ this.focusedDate =
504
+ value !== null && isSameMonth(value, monthDate)
505
+ ? value
506
+ : set(monthDate, { date: Math.min(this.focusedDate.getDate(), getDaysInMonth(monthDate)) });
507
+ const range = this.selectionMode === 'range' && this.rangeStart !== null && this.rangeEnd !== null
462
508
  ? { start: this.rangeStart, end: this.rangeEnd }
463
509
  : undefined;
464
- this.emitDateStateChange(date, this.value, range);
510
+ this.emitDateStateChange(monthDate, value, range);
465
511
  }
466
- /** Indica se um dia está indisponível para seleção. */
512
+ /**
513
+ * Verifica se uma data está indisponível para seleção.
514
+ * @param date - data a verificar
515
+ * @returns `true` se a data estiver na lista de `disabledDates`
516
+ * @internal
517
+ */
467
518
  isDateDisabled(date) {
468
- return this.normalizedDisabledDates.some((disabledDate) => isSameDay(disabledDate, date));
519
+ return this.disabledDateKeys.has(format(date, DAY_KEY_FORMAT));
469
520
  }
470
- /** Data base usada para todos os cálculos de calendário. */
521
+ /**
522
+ * Chaves locais das datas bloqueadas, recalculadas somente quando `disabledDates` é substituída.
523
+ * Entradas inválidas são ignoradas.
524
+ * @internal
525
+ */
526
+ get disabledDateKeys() {
527
+ if (this.disabledDateKeysSource !== this.disabledDates) {
528
+ this.disabledDateKeysSource = this.disabledDates;
529
+ this.disabledDateKeysCache = new Set((this.disabledDates ?? [])
530
+ .map((disabledDate) => toDate(disabledDate))
531
+ .filter((disabledDate) => !Number.isNaN(disabledDate.getTime()))
532
+ .map((disabledDate) => format(disabledDate, DAY_KEY_FORMAT)));
533
+ }
534
+ return this.disabledDateKeysCache;
535
+ }
536
+ /**
537
+ * Data base usada para todos os cálculos de calendário.
538
+ * @returns data de referência interna
539
+ * @internal
540
+ */
471
541
  get baseDate() {
472
542
  return this.referenceDate;
473
543
  }
474
544
  /**
475
- * Recupera um handler estável para a célula do dia informado.
476
- *
477
- * @param date - Dia representado pela célula.
478
- * @returns Função de clique reutilizável.
479
- */
480
- getDayClickHandler(date) {
481
- let handler = this.dayClickHandlers.get(date);
482
- if (handler === undefined) {
483
- handler = () => this.handleDayClick(date);
484
- this.dayClickHandlers.set(date, handler);
485
- }
486
- return handler;
487
- }
488
- /** Formata o dia exibido com zero à esquerda. */
545
+ * Formata o dia exibido com zero à esquerda (ex: '01', '09').
546
+ * @param date - data a formatar
547
+ * @returns string com dois dígitos do dia
548
+ * @internal
549
+ */
489
550
  getDayWithLeadingZero(date) {
490
551
  return format(date, 'dd');
491
552
  }
492
553
  /**
493
- * Constrói o rótulo acessível completo da célula de dia.
494
- *
495
- * @param date - Dia representado pela célula.
496
- * @returns Texto anunciado pelo leitor de tela, incluindo estado de seleção.
554
+ * Constrói o rótulo acessível da célula de dia, incluindo estado (selecionado/início/fim).
555
+ * @param date - dia representado pela célula
556
+ * @param state - estado já calculado da célula
557
+ * @returns string para `aria-label`
558
+ * @internal
497
559
  */
498
- getDayCellAriaLabel(date) {
560
+ getDayCellAriaLabel(date, state) {
499
561
  const fullDate = format(date, "d 'de' MMMM 'de' yyyy", { locale: this.dateFnsLocale });
500
- const isSelected = this.effectiveSelectionMode === 'single' && this.value !== null && isSameDay(date, this.value);
501
- const isRangeStart = this.effectiveSelectionMode === 'range' && this.rangeStart !== null && isSameDay(date, this.rangeStart);
502
- const isRangeEnd = this.effectiveSelectionMode === 'range' && this.rangeEnd !== null && isSameDay(date, this.rangeEnd);
503
- const isBetween = this.effectiveSelectionMode === 'range' &&
504
- this.rangeStart !== null &&
505
- this.rangeEnd !== null &&
506
- this.isDateBetweenRange(date, this.rangeStart, this.rangeEnd);
507
- if (isSelected)
562
+ if (state.isSelected)
508
563
  return `${fullDate}, selecionado`;
509
- if (isRangeStart)
564
+ if (state.isRangeStart)
510
565
  return `${fullDate}, início do intervalo`;
511
- if (isRangeEnd)
566
+ if (state.isRangeEnd)
512
567
  return `${fullDate}, fim do intervalo`;
513
- if (isBetween)
568
+ if (state.isInRange)
514
569
  return `${fullDate}, no intervalo selecionado`;
515
570
  return fullDate;
516
571
  }
517
- /** Locale do date-fns derivado da prop pública do componente. */
572
+ /**
573
+ * Locale do `date-fns` derivado da prop pública `locale`.
574
+ * @internal
575
+ */
518
576
  get dateFnsLocale() {
519
577
  return resolveDateFnsLocale(this.locale);
520
578
  }
521
579
  /**
522
- * Calcula as classes CSS da célula do dia com base em seleção, mês e data atual.
523
- *
524
- * @param date - Dia da grade do calendário.
525
- */
526
- getDayCssClasses(date) {
527
- const selected = this.value;
528
- const rangeStart = this.rangeStart;
529
- const rangeEnd = this.rangeEnd;
530
- const hasRange = rangeStart !== null && rangeEnd !== null;
531
- const isRangeStart = rangeStart !== null && isSameDay(date, rangeStart);
532
- const isRangeEnd = rangeEnd !== null && isSameDay(date, rangeEnd);
533
- const isBetweenRange = hasRange && this.isDateBetweenRange(date, rangeStart, rangeEnd);
580
+ * Calcula uma única vez o estado de seleção da célula, compartilhado por classes, ARIA e foco.
581
+ * @param date - dia da grade
582
+ * @param today - instante atual compartilhado pela renderização da grade
583
+ * @returns estado da célula
584
+ * @internal
585
+ */
586
+ getDayCellState(date, today) {
587
+ const isRange = this.selectionMode === 'range';
588
+ const { value, rangeStart, rangeEnd } = this;
589
+ return {
590
+ isToday: isSameDay(date, today),
591
+ isOutsideMonth: !isSameMonth(date, this.baseDate),
592
+ isSelected: !isRange && value !== null && isSameDay(date, value),
593
+ isRangeStart: isRange && rangeStart !== null && isSameDay(date, rangeStart),
594
+ isRangeEnd: isRange && rangeEnd !== null && isSameDay(date, rangeEnd),
595
+ isInRange: isRange && rangeStart !== null && rangeEnd !== null && this.isDateBetweenRange(date, rangeStart, rangeEnd),
596
+ };
597
+ }
598
+ /**
599
+ * Calcula o mapa de classes CSS da célula do dia.
600
+ * @param state - estado já calculado da célula
601
+ * @param disabled - indica se a célula está bloqueada
602
+ * @returns mapa de classes booleanas
603
+ * @internal
604
+ */
605
+ getDayCssClasses(state, disabled) {
534
606
  return {
535
607
  day: true,
536
- 'outside-month': !isSameMonth(date, this.baseDate),
537
- today: isSameDay(date, toDate(new Date())),
538
- selected: this.effectiveSelectionMode === 'single' && selected !== null && isSameDay(date, selected),
539
- 'range-start': this.effectiveSelectionMode === 'range' && isRangeStart,
540
- 'range-end': this.effectiveSelectionMode === 'range' && isRangeEnd,
541
- 'in-range': this.effectiveSelectionMode === 'range' && isBetweenRange,
608
+ 'outside-month': state.isOutsideMonth,
609
+ today: state.isToday,
610
+ selected: state.isSelected,
611
+ 'range-start': state.isRangeStart,
612
+ 'range-end': state.isRangeEnd,
613
+ 'in-range': state.isInRange,
614
+ disabled,
542
615
  };
543
616
  }
544
- /** Normaliza os limites do intervalo para garantir ordem cronológica. */
617
+ /**
618
+ * Normaliza os limites do intervalo garantindo ordem cronológica (start <= end).
619
+ * @param start - data de início
620
+ * @param end - data de fim
621
+ * @returns tupla [start, end] na ordem correta
622
+ * @internal
623
+ */
545
624
  normalizeRangeBounds(start, end) {
546
625
  return compareAsc(start, end) <= 0 ? [start, end] : [end, start];
547
626
  }
548
- /** Verifica se uma data está estritamente entre início e fim do intervalo. */
627
+ /**
628
+ * Verifica se uma data está estritamente entre `start` e `end`.
629
+ * @param date - data a verificar
630
+ * @param start - início do intervalo
631
+ * @param end - fim do intervalo
632
+ * @returns `true` se `start < date < end`
633
+ * @internal
634
+ */
549
635
  isDateBetweenRange(date, start, end) {
550
636
  return isAfter(date, start) && isBefore(date, end);
551
637
  }
552
- /** Gera a sequência completa de dias visíveis na grade do mês. */
553
- getMonthViewDates() {
638
+ /**
639
+ * Calcula os limites da grade do mês, respeitando `fixedRowCount`, sem gerar suas datas.
640
+ * @returns limites inclusivos da grade
641
+ * @internal
642
+ */
643
+ getMonthViewInterval() {
554
644
  const start = startOfWeek(startOfMonth(this.baseDate), { weekStartsOn: this.weekStartsOn });
555
- let end = endOfWeek(endOfMonth(this.baseDate), { weekStartsOn: this.weekStartsOn });
556
- // Se fixedRowCount está ativo, garante sempre 6 semanas (42 dias)
557
- if (this.fixedRowCount) {
558
- // Calcula o número de semanas que seriam normalmente geradas
559
- const normalizedDates = eachDayOfInterval({ start, end });
560
- const currentWeekCount = Math.ceil(normalizedDates.length / 7);
561
- const targetWeekCount = 6;
562
- // Se não houver 6 semanas, estende o final para alcançar 42 dias
563
- if (currentWeekCount < targetWeekCount) {
564
- const daysToAdd = (targetWeekCount - currentWeekCount) * 7;
565
- end = addDays(end, daysToAdd);
566
- }
567
- }
568
- return eachDayOfInterval({ start, end });
645
+ const end = this.fixedRowCount
646
+ ? addDays(start, 41)
647
+ : endOfWeek(endOfMonth(this.baseDate), { weekStartsOn: this.weekStartsOn });
648
+ return { start, end };
569
649
  }
570
650
  /**
571
- * Retorna o `focusedDate` normalizado para estar sempre dentro da grade visível.
572
- *
573
- * Se `focusedDate` não estiver visível no mês atual, retorna o primeiro dia
574
- * da grade do mês para garantir que sempre haja um elemento com `tabIndex={0}`.
575
- *
576
- * @returns Data focada normalizada ou primeiro dia da grade.
651
+ * Retorna o `focusedDate` normalizado para estar dentro da grade visível.
652
+ * Se não estiver visível, retorna o primeiro dia da grade.
653
+ * @param interval - limites da grade atual; calculados quando não fornecidos
654
+ * @returns data normalizada para foco
655
+ * @internal
577
656
  */
578
- getNormalizedFocusedDate() {
579
- const visibleDates = this.getMonthViewDates();
580
- const isInCurrentMonth = visibleDates.some((d) => isSameDay(d, this.focusedDate));
581
- if (isInCurrentMonth) {
657
+ getNormalizedFocusedDate(interval = this.getMonthViewInterval()) {
658
+ const focusedDay = startOfDay(this.focusedDate).getTime();
659
+ const isVisible = focusedDay >= interval.start.getTime() && focusedDay <= interval.end.getTime();
660
+ if (isVisible) {
582
661
  return this.focusedDate;
583
662
  }
584
- return visibleDates[0] ?? this.focusedDate;
663
+ return interval.start;
585
664
  }
586
665
  /**
587
- * Constrói o rótulo acessível dos botões de navegação do mês.
588
- *
589
- * @param action - Ação associada ao botão.
590
- * @returns Texto acessível exibido para leitores de tela.
666
+ * Constrói o rótulo acessível para os botões de navegação.
667
+ * @param action - ação de navegação
668
+ * @returns rótulo para `aria-label`
669
+ * @internal
591
670
  */
592
671
  getNavigationAriaLabel(action) {
593
672
  switch (action) {
@@ -599,78 +678,126 @@ export class DatePicker {
599
678
  return 'Navegar';
600
679
  }
601
680
  }
602
- /** Retorna os rótulos das semanas conforme locale e início da semana. */
681
+ /**
682
+ * Retorna os rótulos dos dias da semana conforme `locale` e `weekStartsOn`.
683
+ * @internal
684
+ */
603
685
  getWeekdayLabels() {
604
686
  return getWeekdayLabels(this.locale, this.weekStartsOn);
605
687
  }
606
- /** Retorna os rótulos dos meses no locale atual. */
688
+ /**
689
+ * Retorna os rótulos dos meses no locale atual.
690
+ * @internal
691
+ */
607
692
  getMonthLabels() {
608
693
  return getMonthLabels(this.locale);
609
694
  }
610
695
  /**
611
- * Renderiza um botão consistente de navegação do calendário.
612
- *
613
- * @param action - Ação executada pelo botão.
696
+ * Move o foco de teclado para a data informada e atualiza `referenceDate` se necessário.
697
+ * @param date - data alvo do foco
698
+ * @returns void
699
+ * @internal
700
+ */
701
+ moveFocusTo(date) {
702
+ this.focusedDate = date;
703
+ this.shouldFocusDate = true;
704
+ if (!isSameMonth(date, this.baseDate)) {
705
+ this.emitDateStateChange(date, this.value);
706
+ }
707
+ }
708
+ /**
709
+ * Renderiza um botão de navegação consistente para o calendário.
710
+ * @param action - ação do botão
711
+ * @returns elemento JSX do botão de navegação
712
+ * @internal
614
713
  */
615
714
  renderNavigationButton(action) {
616
- 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" })));
715
+ 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" })));
617
716
  }
618
- /** Renderiza o cabeçalho do calendário com navegação, mês e ano. */
717
+ /**
718
+ * Renderiza o cabeçalho do calendário (navegação, mês e ano).
719
+ * @returns elemento JSX do cabeçalho
720
+ * @internal
721
+ */
619
722
  renderCalendarHeader() {
620
723
  return (h("div", { class: "header", part: "header" }, this.renderNavigationButton(NAVIGATION_ACTION.PREVIOUS_MONTH), this.renderMonthSelection(), this.renderYearSelection(), this.renderNavigationButton(NAVIGATION_ACTION.NEXT_MONTH)));
621
724
  }
622
- /** Renderiza a seleção de mês com label acessível. */
725
+ /**
726
+ * Renderiza o seletor de mês com rótulo acessível.
727
+ * @returns elemento JSX do seletor de mês
728
+ * @internal
729
+ */
623
730
  renderMonthSelection() {
624
731
  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))));
625
732
  }
626
- /** Renderiza o campo de ano com label acessível. */
733
+ /**
734
+ * Renderiza o campo de ano com rótulo acessível.
735
+ * @returns elemento JSX do campo de ano
736
+ * @internal
737
+ */
627
738
  renderYearSelection() {
628
739
  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" })));
629
740
  }
630
- /** Renderiza uma opção do seletor de meses. */
741
+ /**
742
+ * Renderiza uma opção do seletor de meses.
743
+ * @param month - label do mês
744
+ * @param index - índice do mês (0-11)
745
+ * @returns elemento `<option>` para o mês
746
+ * @internal
747
+ */
631
748
  renderMonthOption(month, index) {
632
749
  return (h("option", { key: `month-${index}`, value: index, selected: index === this.referenceDate.getMonth() }, month));
633
750
  }
634
- /** Renderiza a estrutura principal do calendário. */
751
+ /**
752
+ * Renderiza a estrutura principal do calendário (grade e cabeçalho).
753
+ * @returns elemento JSX com a grade do calendário
754
+ * @internal
755
+ */
635
756
  renderCalendar() {
636
757
  const monthLabel = format(this.baseDate, "MMMM 'de' yyyy", { locale: this.dateFnsLocale });
637
- return (h("div", { class: "calendar", role: "grid", "aria-label": `Calendário de ${monthLabel}`, part: "calendar" }, this.renderWeekdays(), this.renderMonthGrid()));
758
+ 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())));
638
759
  }
639
- /** Renderiza a linha de rótulos dos dias da semana. */
760
+ /**
761
+ * Renderiza os rótulos dos dias da semana.
762
+ * @returns elemento JSX com os cabeçalhos das colunas dos dias
763
+ * @internal
764
+ */
640
765
  renderWeekdays() {
641
766
  const labels = this.getWeekdayLabels();
642
- 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)))));
767
+ const fullNames = getWeekdayFullNames(this.locale, this.weekStartsOn);
768
+ 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)))));
643
769
  }
644
- /** Renderiza a grade com os dias do mês atual. */
770
+ /**
771
+ * Renderiza a grade de dias do mês atual.
772
+ * @returns elemento JSX contendo semanas e dias
773
+ * @internal
774
+ */
645
775
  renderMonthGrid() {
646
- const dates = this.getMonthViewDates();
776
+ const interval = this.getMonthViewInterval();
777
+ const dates = eachDayOfInterval(interval);
778
+ const normalizedFocusedDate = this.getNormalizedFocusedDate(interval);
779
+ const today = new Date();
647
780
  const weeks = Array.from({ length: Math.ceil(dates.length / 7) }, (_, index) => dates.slice(index * 7, index * 7 + 7));
648
- return (h("div", { class: "monthdays", role: "rowgroup", onKeyDown: this.handleGridKeydown, part: "grid" }, weeks.map((week) => (h("div", { key: `week-${format(week[0], 'yyyy-MM-dd')}`, class: "week", role: "row", tabIndex: -1 }, week.map(this.renderDayCell, this))))));
781
+ return (h("div", { class: "monthdays", role: "rowgroup", part: "grid" }, weeks.map((week) => (h("div", { key: `week-${format(week[0], DAY_KEY_FORMAT)}`, class: "week", role: "row", tabIndex: -1 }, week.map((date) => this.renderDayCell(date, normalizedFocusedDate, today)))))));
649
782
  }
650
783
  /**
651
- * Move o foco de teclado para a data informada, navegando de mês quando necessário.
652
- *
653
- * @param date - Data de destino do foco.
784
+ * Renderiza uma célula de dia com estado visual apropriado.
785
+ * @param date - data representada pela célula
786
+ * @param normalizedFocusedDate - data de foco normalizada para a grade atual
787
+ * @param today - instante atual compartilhado pela renderização da grade
788
+ * @returns elemento JSX da célula de dia
789
+ * @internal
654
790
  */
655
- moveFocusTo(date) {
656
- this.focusedDate = date;
657
- this.shouldFocusDate = true;
658
- if (!isSameMonth(date, this.baseDate)) {
659
- this.emitDateStateChange(date, this.value);
660
- }
661
- }
662
- /** Renderiza uma célula de dia com estado visual apropriado. */
663
- renderDayCell(date) {
664
- const disabled = this.disabled || this.isDateDisabled(date);
665
- const isSelected = this.effectiveSelectionMode === 'single' && this.value !== null && isSameDay(date, this.value);
666
- const isRangeStart = this.effectiveSelectionMode === 'range' && this.rangeStart !== null && isSameDay(date, this.rangeStart);
667
- const isRangeEnd = this.effectiveSelectionMode === 'range' && this.rangeEnd !== null && isSameDay(date, this.rangeEnd);
668
- const isActiveDay = isSelected || isRangeStart || isRangeEnd;
669
- const isFocused = isSameDay(date, this.getNormalizedFocusedDate());
670
- return (h("div", { key: format(date, 'yyyy-MM-dd'), role: "gridcell", tabIndex: this.disabled ? undefined : isFocused ? 0 : -1, "data-date": 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)));
791
+ renderDayCell(date, normalizedFocusedDate, today) {
792
+ const dateKey = format(date, DAY_KEY_FORMAT);
793
+ const disabled = this.disabled || this.disabledDateKeys.has(dateKey);
794
+ const state = this.getDayCellState(date, today);
795
+ const isActiveDay = state.isSelected || state.isRangeStart || state.isRangeEnd;
796
+ const isFocused = isSameDay(date, normalizedFocusedDate);
797
+ 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)));
671
798
  }
672
799
  render() {
673
- return (h(Host, { key: 'bf83467d8324a00d3e1d3dc8912bdc732e33ea77' }, h("div", { key: 'e6501b7d8765b032c3681d3d44937631f342bb15', class: "br-date-picker", part: "container" }, this.renderCalendarHeader(), this.renderCalendar())));
800
+ return (h(Host, { key: 'd909c9c84061f6b456a0350e2ab3fe6e50cc5d83' }, h("div", { key: 'aba7fc5f0b7bce2a9aa2d95bae9897f138dd8146', class: "br-date-picker", part: "container" }, this.renderCalendarHeader(), this.renderCalendar())));
674
801
  }
675
802
  static get is() { return "br-date-picker"; }
676
803
  static get encapsulation() { return "shadow"; }
@@ -704,8 +831,11 @@ export class DatePicker {
704
831
  "required": false,
705
832
  "optional": false,
706
833
  "docs": {
707
- "tags": [],
708
- "text": "Define o \u00EDndice do dia em que a semana come\u00E7a na interface do calend\u00E1rio."
834
+ "tags": [{
835
+ "name": "default",
836
+ "text": "0"
837
+ }],
838
+ "text": "\u00CDndice do dia em que a semana come\u00E7a na interface do calend\u00E1rio."
709
839
  },
710
840
  "getter": false,
711
841
  "setter": false,
@@ -730,10 +860,10 @@ export class DatePicker {
730
860
  "optional": false,
731
861
  "docs": {
732
862
  "tags": [{
733
- "name": "example",
734
- "text": "```js\nconst calendar = document.querySelector('br-date-picker');\ncalendar.referenceDate = new Date(2026, 8, 1);\n```"
863
+ "name": "default",
864
+ "text": "new Date()"
735
865
  }],
736
- "text": "Data usada como base visual para o m\u00EAs atualmente exibido, sem alterar a sele\u00E7\u00E3o.\nRecebe uma inst\u00E2ncia de `Date` por property binding; valores inv\u00E1lidos usam a data atual."
866
+ "text": "Data usada como base visual para o m\u00EAs atualmente exibido."
737
867
  },
738
868
  "getter": false,
739
869
  "setter": false,
@@ -756,10 +886,10 @@ export class DatePicker {
756
886
  "optional": false,
757
887
  "docs": {
758
888
  "tags": [{
759
- "name": "example",
760
- "text": "```js\nconst calendar = document.querySelector('br-date-picker');\ncalendar.value = new Date(2026, 8, 7);\n```"
889
+ "name": "default",
890
+ "text": "null"
761
891
  }],
762
- "text": "Data efetivamente selecionada, ou `null` quando n\u00E3o h\u00E1 sele\u00E7\u00E3o; \u00E9 diferente de `referenceDate`, que controla apenas o m\u00EAs vis\u00EDvel.\nRecebe uma inst\u00E2ncia de `Date` por property binding; datas inv\u00E1lidas usam `null`."
892
+ "text": "Data atualmente selecionada pelo usu\u00E1rio, ou `null` quando n\u00E3o h\u00E1 sele\u00E7\u00E3o."
763
893
  },
764
894
  "getter": false,
765
895
  "setter": false,
@@ -783,8 +913,11 @@ export class DatePicker {
783
913
  "required": false,
784
914
  "optional": false,
785
915
  "docs": {
786
- "tags": [],
787
- "text": "Define se a sele\u00E7\u00E3o ocorre por data \u00FAnica ou por intervalo. Valores inv\u00E1lidos usam `single`."
916
+ "tags": [{
917
+ "name": "default",
918
+ "text": "'single'"
919
+ }],
920
+ "text": "Define se a sele\u00E7\u00E3o ocorre por data \u00FAnica ou por intervalo."
788
921
  },
789
922
  "getter": false,
790
923
  "setter": false,
@@ -808,7 +941,10 @@ export class DatePicker {
808
941
  "required": false,
809
942
  "optional": false,
810
943
  "docs": {
811
- "tags": [],
944
+ "tags": [{
945
+ "name": "default",
946
+ "text": "null"
947
+ }],
812
948
  "text": "Data inicial selecionada quando o calend\u00E1rio opera no modo de intervalo."
813
949
  },
814
950
  "getter": false,
@@ -831,7 +967,10 @@ export class DatePicker {
831
967
  "required": false,
832
968
  "optional": false,
833
969
  "docs": {
834
- "tags": [],
970
+ "tags": [{
971
+ "name": "default",
972
+ "text": "null"
973
+ }],
835
974
  "text": "Data final selecionada quando o calend\u00E1rio opera no modo de intervalo."
836
975
  },
837
976
  "getter": false,
@@ -857,10 +996,10 @@ export class DatePicker {
857
996
  "optional": true,
858
997
  "docs": {
859
998
  "tags": [{
860
- "name": "example",
861
- "text": "```js\nconst calendar = document.querySelector('br-date-picker');\ncalendar.selectionMode = 'range';\ncalendar.rangeValue = { start: new Date(2026, 8, 7), end: new Date(2026, 8, 12) };\n```"
999
+ "name": "default",
1000
+ "text": "undefined"
862
1001
  }],
863
- "text": "Intervalo controlado no modo `range`, reunindo `rangeStart` e `rangeEnd` em uma atualiza\u00E7\u00E3o.\nDeve conter datas v\u00E1lidas ou `null`; valores inv\u00E1lidos s\u00E3o ignorados. Passe o objeto por property binding."
1002
+ "text": "Intervalo controlado no modo `range`.\nQuando definido, mant\u00E9m `rangeStart` e `rangeEnd` sincronizados."
864
1003
  },
865
1004
  "getter": false,
866
1005
  "setter": false
@@ -876,8 +1015,11 @@ export class DatePicker {
876
1015
  "required": false,
877
1016
  "optional": false,
878
1017
  "docs": {
879
- "tags": [],
880
- "text": "Desabilita a intera\u00E7\u00E3o do calend\u00E1rio quando ativo."
1018
+ "tags": [{
1019
+ "name": "default",
1020
+ "text": "false"
1021
+ }],
1022
+ "text": "Desabilita a intera\u00E7\u00E3o do calend\u00E1rio quando `true`."
881
1023
  },
882
1024
  "getter": false,
883
1025
  "setter": false,
@@ -902,10 +1044,10 @@ export class DatePicker {
902
1044
  "optional": false,
903
1045
  "docs": {
904
1046
  "tags": [{
905
- "name": "example",
906
- "text": "```js\nconst calendar = document.querySelector('br-date-picker');\ncalendar.disabledDates = [new Date(2026, 8, 7), new Date(2026, 8, 8)];\n```"
1047
+ "name": "default",
1048
+ "text": "[]"
907
1049
  }],
908
- "text": "Lista de datas indispon\u00EDveis para sele\u00E7\u00E3o no calend\u00E1rio.\nRecebe inst\u00E2ncias de `Date` por property binding; datas inv\u00E1lidas s\u00E3o ignoradas."
1050
+ "text": "Lista de datas indispon\u00EDveis para sele\u00E7\u00E3o no calend\u00E1rio."
909
1051
  },
910
1052
  "getter": false,
911
1053
  "setter": false,
@@ -922,7 +1064,10 @@ export class DatePicker {
922
1064
  "required": false,
923
1065
  "optional": false,
924
1066
  "docs": {
925
- "tags": [],
1067
+ "tags": [{
1068
+ "name": "default",
1069
+ "text": "DATETIME_PICKER_LOCALE.DEFAULT"
1070
+ }],
926
1071
  "text": "Locale usado para gerar nomes de meses e dias da semana."
927
1072
  },
928
1073
  "getter": false,
@@ -946,7 +1091,7 @@ export class DatePicker {
946
1091
  "name": "default",
947
1092
  "text": "false"
948
1093
  }],
949
- "text": "Define se o calend\u00E1rio deve manter um n\u00FAmero fixo de linhas (6 semanas = 42 dias)\nou variar conforme o m\u00EAs.\n\nQuando `true`, o calend\u00E1rio sempre exibe 6 semanas completas.\nQuando `false`, o calend\u00E1rio adapta-se ao m\u00EAs, exibindo apenas as semanas necess\u00E1rias."
1094
+ "text": "Se `true`, o calend\u00E1rio sempre exibe 6 semanas (42 dias); caso contr\u00E1rio, adapta-se ao m\u00EAs."
950
1095
  },
951
1096
  "getter": false,
952
1097
  "setter": false,
@@ -958,8 +1103,7 @@ export class DatePicker {
958
1103
  }
959
1104
  static get states() {
960
1105
  return {
961
- "focusedDate": {},
962
- "normalizedDisabledDates": {}
1106
+ "focusedDate": {}
963
1107
  };
964
1108
  }
965
1109
  static get events() {
@@ -970,12 +1114,27 @@ export class DatePicker {
970
1114
  "cancelable": true,
971
1115
  "composed": true,
972
1116
  "docs": {
973
- "tags": [],
974
- "text": "Evento emitido quando a data de refer\u00EAncia ou a sele\u00E7\u00E3o mudam."
1117
+ "tags": [{
1118
+ "name": "property",
1119
+ "text": "{Date} referenceDate - Data de refer\u00EAncia atual do calend\u00E1rio (segundos/milissegundos zerados)."
1120
+ }, {
1121
+ "name": "property",
1122
+ "text": "{(Date|null)} value - Data selecionada ou `null` quando nenhuma sele\u00E7\u00E3o."
1123
+ }, {
1124
+ "name": "property",
1125
+ "text": "{{start: Date, end: (Date|null)}=} range - Intervalo selecionado quando `selectionMode === 'range'`.\n\nConsumidores usam este evento para sincronizar UI externas e integra\u00E7\u00E3o com formul\u00E1rios."
1126
+ }, {
1127
+ "name": "event",
1128
+ "text": "dateStateChange"
1129
+ }, {
1130
+ "name": "type",
1131
+ "text": "{EventEmitter<DatetimePickerDateState>}"
1132
+ }],
1133
+ "text": "Emite o estado consolidado do componente quando h\u00E1 mudan\u00E7a de refer\u00EAncia/sele\u00E7\u00E3o.\n\nPayload (DatetimePickerDateState):"
975
1134
  },
976
1135
  "complexType": {
977
1136
  "original": "DatetimePickerDateState",
978
- "resolved": "{ referenceDate: Date; value: Date; range?: DatetimePickerDateRange; rangeDates?: DatetimePickerRangeDateState[]; }",
1137
+ "resolved": "{ referenceDate: Date; value: Date; range?: DatetimePickerDateRange; rangeDates?: DatetimePickerRangeDateState[]; origin?: string; }",
979
1138
  "references": {
980
1139
  "DatetimePickerDateState": {
981
1140
  "location": "import",
@@ -995,18 +1154,12 @@ export class DatePicker {
995
1154
  }, {
996
1155
  "propName": "value",
997
1156
  "methodName": "handleValueChange"
998
- }, {
999
- "propName": "referenceDate",
1000
- "methodName": "handleReferenceDateChange"
1001
1157
  }, {
1002
1158
  "propName": "weekStartsOn",
1003
1159
  "methodName": "handleWeekStartsOnChange"
1004
1160
  }, {
1005
1161
  "propName": "locale",
1006
1162
  "methodName": "handleLocaleChange"
1007
- }, {
1008
- "propName": "disabledDates",
1009
- "methodName": "handleDisabledDatesChange"
1010
1163
  }];
1011
1164
  }
1012
1165
  }