@govbr-ds/webcomponents 2.1.0 → 2.1.2

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 (866) hide show
  1. package/README.md +0 -11
  2. package/cem/custom-elements.json +272 -71
  3. package/dist/cjs/app-globals-DcqHuMBv.js +9 -0
  4. package/dist/cjs/br-avatar.cjs.entry.js +248 -0
  5. package/dist/cjs/br-breadcrumb-item.cjs.entry.js +45 -0
  6. package/dist/cjs/br-breadcrumb.cjs.entry.js +443 -0
  7. package/dist/cjs/br-button_2.cjs.entry.js +280 -0
  8. package/dist/cjs/br-card.cjs.entry.js +111 -0
  9. package/dist/cjs/br-carousel-page.cjs.entry.js +80 -0
  10. package/dist/cjs/br-carousel.cjs.entry.js +565 -0
  11. package/dist/cjs/br-checkbox-group.cjs.entry.js +118 -0
  12. package/dist/cjs/br-checkbox.cjs.entry.js +288 -0
  13. package/dist/cjs/br-checkgroup.cjs.entry.js +20 -0
  14. package/dist/cjs/br-collapse_2.cjs.entry.js +683 -0
  15. package/dist/cjs/br-cookiebar-cookie.cjs.entry.js +83 -0
  16. package/dist/cjs/br-cookiebar-group.cjs.entry.js +309 -0
  17. package/dist/cjs/br-cookiebar-header.cjs.entry.js +39 -0
  18. package/dist/cjs/br-cookiebar-link.cjs.entry.js +55 -0
  19. package/dist/cjs/br-cookiebar-note-group.cjs.entry.js +70 -0
  20. package/dist/cjs/br-cookiebar-note.cjs.entry.js +25 -0
  21. package/dist/cjs/br-cookiebar.cjs.entry.js +758 -0
  22. package/dist/cjs/br-crumb.cjs.entry.js +51 -0
  23. package/dist/cjs/br-date-picker_3.cjs.entry.js +2447 -0
  24. package/dist/cjs/br-datetime-picker.cjs.entry.js +1886 -0
  25. package/dist/cjs/br-divider.cjs.entry.js +225 -0
  26. package/dist/cjs/br-dropdown_2.cjs.entry.js +2000 -0
  27. package/dist/cjs/br-footer-category.cjs.entry.js +102 -0
  28. package/dist/cjs/br-footer-item.cjs.entry.js +52 -0
  29. package/dist/cjs/br-footer-legal.cjs.entry.js +41 -0
  30. package/dist/cjs/br-footer-logo.cjs.entry.js +104 -0
  31. package/dist/cjs/br-footer-social.cjs.entry.js +71 -0
  32. package/dist/cjs/br-footer.cjs.entry.js +92 -0
  33. package/dist/cjs/br-header-function.cjs.entry.js +142 -0
  34. package/dist/cjs/br-header-link.cjs.entry.js +60 -0
  35. package/dist/cjs/br-header-list.cjs.entry.js +279 -0
  36. package/dist/cjs/br-header-logo.cjs.entry.js +178 -0
  37. package/dist/cjs/br-header.cjs.entry.js +642 -0
  38. package/dist/cjs/br-icon.cjs.entry.js +485 -0
  39. package/dist/cjs/br-input.cjs.entry.js +599 -0
  40. package/dist/cjs/br-item.cjs.entry.js +367 -0
  41. package/dist/cjs/br-link.cjs.entry.js +133 -0
  42. package/dist/cjs/br-loading.cjs.entry.js +505 -0
  43. package/dist/cjs/br-magic-button.cjs.entry.js +93 -0
  44. package/dist/cjs/br-menu-group.cjs.entry.js +23 -0
  45. package/dist/cjs/br-menu-header.cjs.entry.js +47 -0
  46. package/dist/cjs/br-menu-info.cjs.entry.js +38 -0
  47. package/dist/cjs/br-menu-item.cjs.entry.js +79 -0
  48. package/dist/cjs/br-menu-link.cjs.entry.js +56 -0
  49. package/dist/cjs/br-menu-list.cjs.entry.js +149 -0
  50. package/dist/cjs/br-menu-logo.cjs.entry.js +75 -0
  51. package/dist/cjs/br-menu-social.cjs.entry.js +65 -0
  52. package/dist/cjs/br-menu.cjs.entry.js +993 -0
  53. package/dist/cjs/br-modal.cjs.entry.js +496 -0
  54. package/dist/cjs/br-notification-body.cjs.entry.js +71 -0
  55. package/dist/cjs/br-notification-header.cjs.entry.js +48 -0
  56. package/dist/cjs/br-notification-item.cjs.entry.js +110 -0
  57. package/dist/cjs/br-notification.cjs.entry.js +334 -0
  58. package/dist/cjs/br-pagination.cjs.entry.js +884 -0
  59. package/dist/cjs/br-radio-group.cjs.entry.js +428 -0
  60. package/dist/cjs/br-radio.cjs.entry.js +357 -0
  61. package/dist/cjs/br-scrim.cjs.entry.js +1336 -0
  62. package/dist/cjs/br-select-input_3.cjs.entry.js +988 -0
  63. package/dist/cjs/br-sign-in.cjs.entry.js +126 -0
  64. package/dist/cjs/br-skip-link-item.cjs.entry.js +20 -0
  65. package/dist/cjs/br-skip-link.cjs.entry.js +362 -0
  66. package/dist/cjs/br-skiplink-item.cjs.entry.js +192 -0
  67. package/dist/cjs/br-slider.cjs.entry.js +687 -0
  68. package/dist/cjs/br-step_2.cjs.entry.js +628 -0
  69. package/dist/cjs/br-switch.cjs.entry.js +245 -0
  70. package/dist/cjs/br-tab-item.cjs.entry.js +185 -0
  71. package/dist/cjs/br-tab.cjs.entry.js +397 -0
  72. package/dist/cjs/br-table-body.cjs.entry.js +37 -0
  73. package/dist/cjs/br-table-cell.cjs.entry.js +184 -0
  74. package/dist/cjs/br-table-header-cell.cjs.entry.js +173 -0
  75. package/dist/cjs/br-table-header.cjs.entry.js +37 -0
  76. package/dist/cjs/br-table-row.cjs.entry.js +81 -0
  77. package/dist/cjs/br-table.cjs.entry.js +680 -0
  78. package/dist/cjs/br-tag.cjs.entry.js +493 -0
  79. package/dist/cjs/br-textarea.cjs.entry.js +306 -0
  80. package/dist/cjs/br-tooltip.cjs.entry.js +627 -0
  81. package/dist/cjs/br-upload.cjs.entry.js +581 -0
  82. package/dist/cjs/br-wizard-panel.cjs.entry.js +54 -0
  83. package/dist/cjs/br-wizard.cjs.entry.js +708 -0
  84. package/dist/cjs/breakpoint-observer-P8veqXg7.js +144 -0
  85. package/dist/cjs/clamp-Co_hWptd.js +25 -0
  86. package/dist/cjs/cookiebar.utils-CB1gQwZ4.js +18 -0
  87. package/dist/cjs/datetime-picker-constants-B5pWeOn1.js +3827 -0
  88. package/dist/cjs/event-CmVdNHxl.js +56 -0
  89. package/dist/cjs/floating-surface-dismiss-ccdiD0KF.js +63 -0
  90. package/dist/cjs/floating-ui-MBI1osio.js +136 -0
  91. package/dist/cjs/floating-ui.dom-BUSTaaxR.js +1715 -0
  92. package/dist/cjs/focus-DuywwJPR.js +30 -0
  93. package/dist/cjs/getNextElement-R9l3JtM9.js +31 -0
  94. package/dist/cjs/iconify-icon-DfODV9bf.js +2307 -0
  95. package/dist/cjs/id-CjRFMzf6.js +20 -0
  96. package/dist/cjs/index-C92n55ch.js +678 -0
  97. package/dist/cjs/index-CRdcutym.js +3287 -0
  98. package/dist/cjs/index.cjs.js +12 -0
  99. package/dist/cjs/isNil-DO5zWc3l.js +19 -0
  100. package/dist/cjs/isValid-Fu3kaWNn.js +3694 -0
  101. package/dist/cjs/loader.cjs.js +17 -0
  102. package/dist/cjs/native-dialog--Ewqm4w0.js +49 -0
  103. package/dist/cjs/navigation-AbzwcRCU.js +25 -0
  104. package/dist/cjs/parts-D5K3ae2C.js +19 -0
  105. package/dist/cjs/props-CScmBvKd.js +24 -0
  106. package/dist/cjs/raf-batcher-yc87a4dS.js +55 -0
  107. package/dist/cjs/slot-DAllytTj.js +48 -0
  108. package/dist/cjs/swipe-BU8_XE9f.js +345 -0
  109. package/dist/cjs/table-constants-BOPSay0B.js +183 -0
  110. package/dist/cjs/validator-CTCajtT9.js +123 -0
  111. package/dist/cjs/webcomponents.cjs.js +50 -0
  112. package/dist/collection/assets/icon-search.svg +6 -0
  113. package/dist/collection/assets/logo-negative.svg +1 -0
  114. package/dist/collection/assets/logo-positive.svg +1 -0
  115. package/dist/collection/assets/wc.svg +1 -0
  116. package/dist/collection/collection-manifest.json +113 -0
  117. package/dist/collection/components/avatar/avatar.css +1 -0
  118. package/dist/collection/components/avatar/avatar.js +589 -0
  119. package/dist/collection/components/avatar/avatar.types.js +1 -0
  120. package/dist/collection/components/breadcrumb/breadcrumb-item/breadcrumb-item.js +166 -0
  121. package/dist/collection/components/breadcrumb/breadcrumb.css +1 -0
  122. package/dist/collection/components/breadcrumb/breadcrumb.js +619 -0
  123. package/dist/collection/components/breadcrumb/breadcrumb.types.js +1 -0
  124. package/dist/collection/components/breadcrumb/crumb/crumb.js +175 -0
  125. package/dist/collection/components/button/button.css +1 -0
  126. package/dist/collection/components/button/button.js +546 -0
  127. package/dist/collection/components/button/button.types.js +1 -0
  128. package/dist/collection/components/card/card.css +1 -0
  129. package/dist/collection/components/card/card.js +225 -0
  130. package/dist/collection/components/carousel/carousel-page/carousel-page.css +1 -0
  131. package/dist/collection/components/carousel/carousel-page/carousel-page.js +195 -0
  132. package/dist/collection/components/carousel/carousel.css +1 -0
  133. package/dist/collection/components/carousel/carousel.js +1217 -0
  134. package/dist/collection/components/carousel/carousel.types.js +1 -0
  135. package/dist/collection/components/checkbox/checkbox.css +1 -0
  136. package/dist/collection/components/checkbox/checkbox.js +823 -0
  137. package/dist/collection/components/checkbox/checkbox.types.js +1 -0
  138. package/dist/collection/components/checkbox-group/checkbox-group.css +1 -0
  139. package/dist/collection/components/checkbox-group/checkbox-group.js +268 -0
  140. package/dist/collection/components/checkgroup/checkgroup.js +166 -0
  141. package/dist/collection/components/collapse/collapse.css +1 -0
  142. package/dist/collection/components/collapse/collapse.js +642 -0
  143. package/dist/collection/components/collapse/collapse.types.js +1 -0
  144. package/dist/collection/components/cookiebar/cookiebar-cookie/cookiebar-cookie.css +1 -0
  145. package/dist/collection/components/cookiebar/cookiebar-cookie/cookiebar-cookie.js +529 -0
  146. package/dist/collection/components/cookiebar/cookiebar-group/cookiebar-group.css +1 -0
  147. package/dist/collection/components/cookiebar/cookiebar-group/cookiebar-group.js +628 -0
  148. package/dist/collection/components/cookiebar/cookiebar-header/cookiebar-header.css +1 -0
  149. package/dist/collection/components/cookiebar/cookiebar-header/cookiebar-header.js +165 -0
  150. package/dist/collection/components/cookiebar/cookiebar-link/cookiebar-link.css +1 -0
  151. package/dist/collection/components/cookiebar/cookiebar-link/cookiebar-link.js +201 -0
  152. package/dist/collection/components/cookiebar/cookiebar-note/cookiebar-note.css +1 -0
  153. package/dist/collection/components/cookiebar/cookiebar-note/cookiebar-note.js +100 -0
  154. package/dist/collection/components/cookiebar/cookiebar-note-group/cookiebar-note-group.css +1 -0
  155. package/dist/collection/components/cookiebar/cookiebar-note-group/cookiebar-note-group.js +172 -0
  156. package/dist/collection/components/cookiebar/cookiebar.css +1 -0
  157. package/dist/collection/components/cookiebar/cookiebar.js +1419 -0
  158. package/dist/collection/components/cookiebar/cookiebar.types.js +1 -0
  159. package/dist/collection/components/cookiebar/cookiebar.utils.js +14 -0
  160. package/dist/collection/components/datetime-picker/date-picker/date-picker-locale.js +94 -0
  161. package/dist/collection/components/datetime-picker/date-picker/date-picker-props-validation.js +57 -0
  162. package/dist/collection/components/datetime-picker/date-picker/date-picker.css +1 -0
  163. package/dist/collection/components/datetime-picker/date-picker/date-picker.js +913 -0
  164. package/dist/collection/components/datetime-picker/datetime-input/datetime-input-props-validation.js +65 -0
  165. package/dist/collection/components/datetime-picker/datetime-input/datetime-input.css +1 -0
  166. package/dist/collection/components/datetime-picker/datetime-input/datetime-input.js +826 -0
  167. package/dist/collection/components/datetime-picker/datetime-picker-constants.js +36 -0
  168. package/dist/collection/components/datetime-picker/datetime-picker-form-associated.js +112 -0
  169. package/dist/collection/components/datetime-picker/datetime-picker-props-validation.js +202 -0
  170. package/dist/collection/components/datetime-picker/datetime-picker.css +1 -0
  171. package/dist/collection/components/datetime-picker/datetime-picker.js +1924 -0
  172. package/dist/collection/components/datetime-picker/datetime-picker.types.js +1 -0
  173. package/dist/collection/components/datetime-picker/datetime-picker.utils.js +250 -0
  174. package/dist/collection/components/datetime-picker/time-picker/time-picker-constants.js +13 -0
  175. package/dist/collection/components/datetime-picker/time-picker/time-picker.css +1 -0
  176. package/dist/collection/components/datetime-picker/time-picker/time-picker.js +456 -0
  177. package/dist/collection/components/divider/divider.css +1 -0
  178. package/dist/collection/components/divider/divider.js +537 -0
  179. package/dist/collection/components/divider/divider.types.js +1 -0
  180. package/dist/collection/components/dropdown/dropdown.css +1 -0
  181. package/dist/collection/components/dropdown/dropdown.js +939 -0
  182. package/dist/collection/components/dropdown/dropdown.types.js +1 -0
  183. package/dist/collection/components/footer/footer-category/footer-category.css +1 -0
  184. package/dist/collection/components/footer/footer-category/footer-category.js +160 -0
  185. package/dist/collection/components/footer/footer-item/footer-item.css +1 -0
  186. package/dist/collection/components/footer/footer-item/footer-item.js +154 -0
  187. package/dist/collection/components/footer/footer-legal/footer-legal.css +1 -0
  188. package/dist/collection/components/footer/footer-legal/footer-legal.js +75 -0
  189. package/dist/collection/components/footer/footer-logo/footer-logo.css +1 -0
  190. package/dist/collection/components/footer/footer-logo/footer-logo.js +342 -0
  191. package/dist/collection/components/footer/footer-logo/footer-logo.types.js +1 -0
  192. package/dist/collection/components/footer/footer-social/footer-social.css +1 -0
  193. package/dist/collection/components/footer/footer-social/footer-social.js +239 -0
  194. package/dist/collection/components/footer/footer.css +1 -0
  195. package/dist/collection/components/footer/footer.js +245 -0
  196. package/dist/collection/components/footer/footer.types.js +1 -0
  197. package/dist/collection/components/global.types.js +1 -0
  198. package/dist/collection/components/header/header-function/header-function.css +1 -0
  199. package/dist/collection/components/header/header-function/header-function.js +311 -0
  200. package/dist/collection/components/header/header-link/header-link.css +1 -0
  201. package/dist/collection/components/header/header-link/header-link.js +189 -0
  202. package/dist/collection/components/header/header-list/header-list.css +1 -0
  203. package/dist/collection/components/header/header-list/header-list.js +452 -0
  204. package/dist/collection/components/header/header-logo/header-logo.css +1 -0
  205. package/dist/collection/components/header/header-logo/header-logo.js +421 -0
  206. package/dist/collection/components/header/header.css +1 -0
  207. package/dist/collection/components/header/header.js +1131 -0
  208. package/dist/collection/components/header/header.types.js +1 -0
  209. package/dist/collection/components/icon/default-icons-cache.js +233 -0
  210. package/dist/collection/components/icon/icon.css +1 -0
  211. package/dist/collection/components/icon/icon.js +598 -0
  212. package/dist/collection/components/icon/icon.types.js +1 -0
  213. package/dist/collection/components/icon/icon.utils.js +33 -0
  214. package/dist/collection/components/input/input.css +1 -0
  215. package/dist/collection/components/input/input.js +1642 -0
  216. package/dist/collection/components/input/input.types.js +1 -0
  217. package/dist/collection/components/item/item.css +1 -0
  218. package/dist/collection/components/item/item.js +917 -0
  219. package/dist/collection/components/item/item.types.js +1 -0
  220. package/dist/collection/components/link/link.css +1 -0
  221. package/dist/collection/components/link/link.js +699 -0
  222. package/dist/collection/components/list/list.css +1 -0
  223. package/dist/collection/components/list/list.js +728 -0
  224. package/dist/collection/components/loading/loading.css +1 -0
  225. package/dist/collection/components/loading/loading.js +1169 -0
  226. package/dist/collection/components/loading/loading.types.js +1 -0
  227. package/dist/collection/components/magic-button/magic-button.css +1 -0
  228. package/dist/collection/components/magic-button/magic-button.js +238 -0
  229. package/dist/collection/components/menu/menu-group/menu-group.css +1 -0
  230. package/dist/collection/components/menu/menu-group/menu-group.js +77 -0
  231. package/dist/collection/components/menu/menu-header/menu-header.css +1 -0
  232. package/dist/collection/components/menu/menu-header/menu-header.js +161 -0
  233. package/dist/collection/components/menu/menu-info/menu-info.css +1 -0
  234. package/dist/collection/components/menu/menu-info/menu-info.js +94 -0
  235. package/dist/collection/components/menu/menu-item/menu-item.css +1 -0
  236. package/dist/collection/components/menu/menu-item/menu-item.js +306 -0
  237. package/dist/collection/components/menu/menu-item/menu-item.types.js +1 -0
  238. package/dist/collection/components/menu/menu-link/menu-link.css +1 -0
  239. package/dist/collection/components/menu/menu-link/menu-link.js +260 -0
  240. package/dist/collection/components/menu/menu-list/menu-list.css +1 -0
  241. package/dist/collection/components/menu/menu-list/menu-list.js +311 -0
  242. package/dist/collection/components/menu/menu-logo/menu-logo.css +1 -0
  243. package/dist/collection/components/menu/menu-logo/menu-logo.js +230 -0
  244. package/dist/collection/components/menu/menu-social/menu-social.css +1 -0
  245. package/dist/collection/components/menu/menu-social/menu-social.js +263 -0
  246. package/dist/collection/components/menu/menu.css +1 -0
  247. package/dist/collection/components/menu/menu.js +1372 -0
  248. package/dist/collection/components/menu/menu.types.js +1 -0
  249. package/dist/collection/components/menu/menu.utils.js +279 -0
  250. package/dist/collection/components/message/message.css +1 -0
  251. package/dist/collection/components/message/message.js +508 -0
  252. package/dist/collection/components/modal/modal.css +1 -0
  253. package/dist/collection/components/modal/modal.js +842 -0
  254. package/dist/collection/components/modal/modal.types.js +1 -0
  255. package/dist/collection/components/notification/notification-body/notification-body.css +1 -0
  256. package/dist/collection/components/notification/notification-body/notification-body.js +153 -0
  257. package/dist/collection/components/notification/notification-header/notification-header.css +1 -0
  258. package/dist/collection/components/notification/notification-header/notification-header.js +181 -0
  259. package/dist/collection/components/notification/notification-item/notification-item.css +1 -0
  260. package/dist/collection/components/notification/notification-item/notification-item.js +351 -0
  261. package/dist/collection/components/notification/notification-item/notification-item.types.js +1 -0
  262. package/dist/collection/components/notification/notification.css +1 -0
  263. package/dist/collection/components/notification/notification.js +838 -0
  264. package/dist/collection/components/notification/notification.types.js +1 -0
  265. package/dist/collection/components/pagination/pagination.css +1 -0
  266. package/dist/collection/components/pagination/pagination.js +1470 -0
  267. package/dist/collection/components/pagination/pagination.types.js +1 -0
  268. package/dist/collection/components/radio/radio.css +1 -0
  269. package/dist/collection/components/radio/radio.js +847 -0
  270. package/dist/collection/components/radio/radio.types.js +1 -0
  271. package/dist/collection/components/radio-group/radio-group.css +1 -0
  272. package/dist/collection/components/radio-group/radio-group.js +862 -0
  273. package/dist/collection/components/radio-group/radio-group.types.js +1 -0
  274. package/dist/collection/components/scrim/scrim.css +1 -0
  275. package/dist/collection/components/scrim/scrim.js +1825 -0
  276. package/dist/collection/components/scrim/scrim.types.js +1 -0
  277. package/dist/collection/components/scrim/scrim.utils.js +132 -0
  278. package/dist/collection/components/select/select-input/select-input.css +1 -0
  279. package/dist/collection/components/select/select-input/select-input.js +586 -0
  280. package/dist/collection/components/select/select-list/select-list.css +1 -0
  281. package/dist/collection/components/select/select-list/select-list.js +1159 -0
  282. package/dist/collection/components/select/select-option/select-option.css +1 -0
  283. package/dist/collection/components/select/select-option/select-option.js +564 -0
  284. package/dist/collection/components/select/select.constants.js +6 -0
  285. package/dist/collection/components/select/select.css +1 -0
  286. package/dist/collection/components/select/select.js +2692 -0
  287. package/dist/collection/components/select/select.types.js +1 -0
  288. package/dist/collection/components/select/select.utils.js +34 -0
  289. package/dist/collection/components/sign-in/sign-in.css +1 -0
  290. package/dist/collection/components/sign-in/sign-in.js +401 -0
  291. package/dist/collection/components/sign-in/sign-in.types.js +1 -0
  292. package/dist/collection/components/skip-link/skip-link-item/skip-link-item-alias.js +103 -0
  293. package/dist/collection/components/skip-link/skip-link-item/skip-link-item.css +1 -0
  294. package/dist/collection/components/skip-link/skip-link-item/skip-link-item.js +450 -0
  295. package/dist/collection/components/skip-link/skip-link.css +1 -0
  296. package/dist/collection/components/skip-link/skip-link.js +699 -0
  297. package/dist/collection/components/skip-link/skip-link.types.js +1 -0
  298. package/dist/collection/components/slider/slider.css +1 -0
  299. package/dist/collection/components/slider/slider.js +1324 -0
  300. package/dist/collection/components/slider/slider.types.js +1 -0
  301. package/dist/collection/components/step/step-item/step-item.css +1 -0
  302. package/dist/collection/components/step/step-item/step-item.js +604 -0
  303. package/dist/collection/components/step/step-item/step-item.types.js +1 -0
  304. package/dist/collection/components/step/step.css +1 -0
  305. package/dist/collection/components/step/step.js +896 -0
  306. package/dist/collection/components/step/step.types.js +1 -0
  307. package/dist/collection/components/switch/switch.css +1 -0
  308. package/dist/collection/components/switch/switch.js +715 -0
  309. package/dist/collection/components/switch/switch.types.js +1 -0
  310. package/dist/collection/components/tab/tab-item/tab-item.css +1 -0
  311. package/dist/collection/components/tab/tab-item/tab-item.js +425 -0
  312. package/dist/collection/components/tab/tab.css +1 -0
  313. package/dist/collection/components/tab/tab.js +724 -0
  314. package/dist/collection/components/tab/tab.types.js +1 -0
  315. package/dist/collection/components/table/table-body/table-body.css +1 -0
  316. package/dist/collection/components/table/table-body/table-body.js +51 -0
  317. package/dist/collection/components/table/table-cell/table-cell.css +1 -0
  318. package/dist/collection/components/table/table-cell/table-cell.js +373 -0
  319. package/dist/collection/components/table/table-constants.js +171 -0
  320. package/dist/collection/components/table/table-header/table-header.css +1 -0
  321. package/dist/collection/components/table/table-header/table-header.js +51 -0
  322. package/dist/collection/components/table/table-header-cell/table-header-cell.css +1 -0
  323. package/dist/collection/components/table/table-header-cell/table-header-cell.js +402 -0
  324. package/dist/collection/components/table/table-row/table-row.css +1 -0
  325. package/dist/collection/components/table/table-row/table-row.js +261 -0
  326. package/dist/collection/components/table/table-tokens.js +50 -0
  327. package/dist/collection/components/table/table-types.js +1 -0
  328. package/dist/collection/components/table/table-utils.js +44 -0
  329. package/dist/collection/components/table/table.css +1 -0
  330. package/dist/collection/components/table/table.js +1030 -0
  331. package/dist/collection/components/tag/tag.css +1 -0
  332. package/dist/collection/components/tag/tag.js +1152 -0
  333. package/dist/collection/components/tag/tag.types.js +1 -0
  334. package/dist/collection/components/textarea/textarea.css +1 -0
  335. package/dist/collection/components/textarea/textarea.js +985 -0
  336. package/dist/collection/components/textarea/textarea.types.js +1 -0
  337. package/dist/collection/components/tooltip/tooltip.css +1 -0
  338. package/dist/collection/components/tooltip/tooltip.js +1024 -0
  339. package/dist/collection/components/tooltip/tooltip.types.js +1 -0
  340. package/dist/collection/components/upload/upload.css +1 -0
  341. package/dist/collection/components/upload/upload.js +1314 -0
  342. package/dist/collection/components/upload/upload.types.js +1 -0
  343. package/dist/collection/components/wizard/wizard-panel/wizard-panel.css +1 -0
  344. package/dist/collection/components/wizard/wizard-panel/wizard-panel.js +167 -0
  345. package/dist/collection/components/wizard/wizard.css +1 -0
  346. package/dist/collection/components/wizard/wizard.js +1228 -0
  347. package/dist/collection/index.js +14 -0
  348. package/dist/collection/pages/components/cookiebar/index.js +26 -0
  349. package/dist/collection/pages/components/link/index.js +29 -0
  350. package/dist/collection/pages/components/pagination/index.js +12 -0
  351. package/dist/collection/pages/components/slider/index.js +18 -0
  352. package/dist/collection/pages/scripts/code-editor.js +101 -0
  353. package/dist/collection/pages/scripts/component-controls.js +600 -0
  354. package/dist/collection/pages/scripts/dev-event-console.js +47 -0
  355. package/dist/collection/pages/scripts/menu.js +192 -0
  356. package/dist/collection/pages/scripts/pageLoader.js +1422 -0
  357. package/dist/collection/shared/utils/assetsPath.js +75 -0
  358. package/dist/collection/shared/utils/breakpoint-observer.js +139 -0
  359. package/dist/collection/shared/utils/clamp.js +21 -0
  360. package/dist/collection/shared/utils/css-variables.js +12 -0
  361. package/dist/collection/shared/utils/cssVariables.js +37 -0
  362. package/dist/collection/shared/utils/date.js +405 -0
  363. package/dist/collection/shared/utils/debounce.js +39 -0
  364. package/dist/collection/shared/utils/event.js +55 -0
  365. package/dist/collection/shared/utils/floating-surface-dismiss.js +59 -0
  366. package/dist/collection/shared/utils/floating-ui.js +131 -0
  367. package/dist/collection/shared/utils/focus.js +24 -0
  368. package/dist/collection/shared/utils/form.js +82 -0
  369. package/dist/collection/shared/utils/format-bytes.js +20 -0
  370. package/dist/collection/shared/utils/getNextElement.js +30 -0
  371. package/dist/collection/shared/utils/getRandom.js +27 -0
  372. package/dist/collection/shared/utils/helpers.js +31 -0
  373. package/dist/collection/shared/utils/id.js +16 -0
  374. package/dist/collection/shared/utils/index.js +60 -0
  375. package/dist/collection/shared/utils/interfaces.js +1 -0
  376. package/dist/collection/shared/utils/isClient.js +14 -0
  377. package/dist/collection/shared/utils/isDefined.js +19 -0
  378. package/dist/collection/shared/utils/isEmpty.js +30 -0
  379. package/dist/collection/shared/utils/isHTMLElement.js +16 -0
  380. package/dist/collection/shared/utils/isNil.js +15 -0
  381. package/dist/collection/shared/utils/isString.js +20 -0
  382. package/dist/collection/shared/utils/native-dialog.js +44 -0
  383. package/dist/collection/shared/utils/navigation.js +21 -0
  384. package/dist/collection/shared/utils/parts.js +15 -0
  385. package/dist/collection/shared/utils/prop-warning.js +7 -0
  386. package/dist/collection/shared/utils/props.js +37 -0
  387. package/dist/collection/shared/utils/raf-batcher.js +51 -0
  388. package/dist/collection/shared/utils/scrollLock.js +141 -0
  389. package/dist/collection/shared/utils/setRafTimeout.js +38 -0
  390. package/dist/collection/shared/utils/slot.js +113 -0
  391. package/dist/collection/shared/utils/ssr-date.js +33 -0
  392. package/dist/collection/shared/utils/stringToArray.js +29 -0
  393. package/dist/collection/shared/utils/swipe.js +342 -0
  394. package/dist/collection/shared/utils/transition.js +127 -0
  395. package/dist/collection/shared/utils/types.js +1 -0
  396. package/dist/collection/shared/utils/validator.js +51 -0
  397. package/dist/collection/value-accessors/angular-value-accessor-config.js +41 -0
  398. package/dist/collection/value-accessors/index.js +6 -0
  399. package/dist/collection/value-accessors/vue-model-config.js +43 -0
  400. package/dist/components/br-avatar.d.ts +11 -0
  401. package/dist/components/br-avatar.js +5 -0
  402. package/dist/components/br-breadcrumb-item.d.ts +11 -0
  403. package/dist/components/br-breadcrumb-item.js +5 -0
  404. package/dist/components/br-breadcrumb.d.ts +11 -0
  405. package/dist/components/br-breadcrumb.js +5 -0
  406. package/dist/components/br-button.d.ts +11 -0
  407. package/dist/components/br-button.js +5 -0
  408. package/dist/components/br-card.d.ts +11 -0
  409. package/dist/components/br-card.js +5 -0
  410. package/dist/components/br-carousel-page.d.ts +11 -0
  411. package/dist/components/br-carousel-page.js +5 -0
  412. package/dist/components/br-carousel.d.ts +11 -0
  413. package/dist/components/br-carousel.js +5 -0
  414. package/dist/components/br-checkbox-group.d.ts +11 -0
  415. package/dist/components/br-checkbox-group.js +5 -0
  416. package/dist/components/br-checkbox.d.ts +11 -0
  417. package/dist/components/br-checkbox.js +5 -0
  418. package/dist/components/br-checkgroup.d.ts +11 -0
  419. package/dist/components/br-checkgroup.js +5 -0
  420. package/dist/components/br-collapse.d.ts +11 -0
  421. package/dist/components/br-collapse.js +5 -0
  422. package/dist/components/br-cookiebar-cookie.d.ts +11 -0
  423. package/dist/components/br-cookiebar-cookie.js +5 -0
  424. package/dist/components/br-cookiebar-group.d.ts +11 -0
  425. package/dist/components/br-cookiebar-group.js +5 -0
  426. package/dist/components/br-cookiebar-header.d.ts +11 -0
  427. package/dist/components/br-cookiebar-header.js +5 -0
  428. package/dist/components/br-cookiebar-link.d.ts +11 -0
  429. package/dist/components/br-cookiebar-link.js +5 -0
  430. package/dist/components/br-cookiebar-note-group.d.ts +11 -0
  431. package/dist/components/br-cookiebar-note-group.js +5 -0
  432. package/dist/components/br-cookiebar-note.d.ts +11 -0
  433. package/dist/components/br-cookiebar-note.js +5 -0
  434. package/dist/components/br-cookiebar.d.ts +11 -0
  435. package/dist/components/br-cookiebar.js +5 -0
  436. package/dist/components/br-crumb.d.ts +11 -0
  437. package/dist/components/br-crumb.js +5 -0
  438. package/dist/components/br-date-picker.d.ts +11 -0
  439. package/dist/components/br-date-picker.js +5 -0
  440. package/dist/components/br-datetime-input.d.ts +11 -0
  441. package/dist/components/br-datetime-input.js +5 -0
  442. package/dist/components/br-datetime-picker.d.ts +11 -0
  443. package/dist/components/br-datetime-picker.js +5 -0
  444. package/dist/components/br-divider.d.ts +11 -0
  445. package/dist/components/br-divider.js +5 -0
  446. package/dist/components/br-dropdown.d.ts +11 -0
  447. package/dist/components/br-dropdown.js +5 -0
  448. package/dist/components/br-footer-category.d.ts +11 -0
  449. package/dist/components/br-footer-category.js +5 -0
  450. package/dist/components/br-footer-item.d.ts +11 -0
  451. package/dist/components/br-footer-item.js +5 -0
  452. package/dist/components/br-footer-legal.d.ts +11 -0
  453. package/dist/components/br-footer-legal.js +5 -0
  454. package/dist/components/br-footer-logo.d.ts +11 -0
  455. package/dist/components/br-footer-logo.js +5 -0
  456. package/dist/components/br-footer-social.d.ts +11 -0
  457. package/dist/components/br-footer-social.js +5 -0
  458. package/dist/components/br-footer.d.ts +11 -0
  459. package/dist/components/br-footer.js +5 -0
  460. package/dist/components/br-header-function.d.ts +11 -0
  461. package/dist/components/br-header-function.js +5 -0
  462. package/dist/components/br-header-link.d.ts +11 -0
  463. package/dist/components/br-header-link.js +5 -0
  464. package/dist/components/br-header-list.d.ts +11 -0
  465. package/dist/components/br-header-list.js +5 -0
  466. package/dist/components/br-header-logo.d.ts +11 -0
  467. package/dist/components/br-header-logo.js +5 -0
  468. package/dist/components/br-header.d.ts +11 -0
  469. package/dist/components/br-header.js +5 -0
  470. package/dist/components/br-icon.d.ts +11 -0
  471. package/dist/components/br-icon.js +5 -0
  472. package/dist/components/br-input.d.ts +11 -0
  473. package/dist/components/br-input.js +5 -0
  474. package/dist/components/br-item.d.ts +11 -0
  475. package/dist/components/br-item.js +5 -0
  476. package/dist/components/br-link.d.ts +11 -0
  477. package/dist/components/br-link.js +5 -0
  478. package/dist/components/br-list.d.ts +11 -0
  479. package/dist/components/br-list.js +5 -0
  480. package/dist/components/br-loading.d.ts +11 -0
  481. package/dist/components/br-loading.js +5 -0
  482. package/dist/components/br-magic-button.d.ts +11 -0
  483. package/dist/components/br-magic-button.js +5 -0
  484. package/dist/components/br-menu-group.d.ts +11 -0
  485. package/dist/components/br-menu-group.js +5 -0
  486. package/dist/components/br-menu-header.d.ts +11 -0
  487. package/dist/components/br-menu-header.js +5 -0
  488. package/dist/components/br-menu-info.d.ts +11 -0
  489. package/dist/components/br-menu-info.js +5 -0
  490. package/dist/components/br-menu-item.d.ts +11 -0
  491. package/dist/components/br-menu-item.js +5 -0
  492. package/dist/components/br-menu-link.d.ts +11 -0
  493. package/dist/components/br-menu-link.js +5 -0
  494. package/dist/components/br-menu-list.d.ts +11 -0
  495. package/dist/components/br-menu-list.js +5 -0
  496. package/dist/components/br-menu-logo.d.ts +11 -0
  497. package/dist/components/br-menu-logo.js +5 -0
  498. package/dist/components/br-menu-social.d.ts +11 -0
  499. package/dist/components/br-menu-social.js +5 -0
  500. package/dist/components/br-menu.d.ts +11 -0
  501. package/dist/components/br-menu.js +5 -0
  502. package/dist/components/br-message.d.ts +11 -0
  503. package/dist/components/br-message.js +5 -0
  504. package/dist/components/br-modal.d.ts +11 -0
  505. package/dist/components/br-modal.js +5 -0
  506. package/dist/components/br-notification-body.d.ts +11 -0
  507. package/dist/components/br-notification-body.js +5 -0
  508. package/dist/components/br-notification-header.d.ts +11 -0
  509. package/dist/components/br-notification-header.js +5 -0
  510. package/dist/components/br-notification-item.d.ts +11 -0
  511. package/dist/components/br-notification-item.js +5 -0
  512. package/dist/components/br-notification.d.ts +11 -0
  513. package/dist/components/br-notification.js +5 -0
  514. package/dist/components/br-pagination.d.ts +11 -0
  515. package/dist/components/br-pagination.js +5 -0
  516. package/dist/components/br-radio-group.d.ts +11 -0
  517. package/dist/components/br-radio-group.js +5 -0
  518. package/dist/components/br-radio.d.ts +11 -0
  519. package/dist/components/br-radio.js +5 -0
  520. package/dist/components/br-scrim.d.ts +11 -0
  521. package/dist/components/br-scrim.js +5 -0
  522. package/dist/components/br-select-input.d.ts +11 -0
  523. package/dist/components/br-select-input.js +5 -0
  524. package/dist/components/br-select-list.d.ts +11 -0
  525. package/dist/components/br-select-list.js +5 -0
  526. package/dist/components/br-select-option.d.ts +11 -0
  527. package/dist/components/br-select-option.js +5 -0
  528. package/dist/components/br-select.d.ts +11 -0
  529. package/dist/components/br-select.js +5 -0
  530. package/dist/components/br-sign-in.d.ts +11 -0
  531. package/dist/components/br-sign-in.js +5 -0
  532. package/dist/components/br-skip-link-item.d.ts +11 -0
  533. package/dist/components/br-skip-link-item.js +5 -0
  534. package/dist/components/br-skip-link.d.ts +11 -0
  535. package/dist/components/br-skip-link.js +5 -0
  536. package/dist/components/br-skiplink-item.d.ts +11 -0
  537. package/dist/components/br-skiplink-item.js +5 -0
  538. package/dist/components/br-slider.d.ts +11 -0
  539. package/dist/components/br-slider.js +5 -0
  540. package/dist/components/br-step-item.d.ts +11 -0
  541. package/dist/components/br-step-item.js +5 -0
  542. package/dist/components/br-step.d.ts +11 -0
  543. package/dist/components/br-step.js +5 -0
  544. package/dist/components/br-switch.d.ts +11 -0
  545. package/dist/components/br-switch.js +5 -0
  546. package/dist/components/br-tab-item.d.ts +11 -0
  547. package/dist/components/br-tab-item.js +5 -0
  548. package/dist/components/br-tab.d.ts +11 -0
  549. package/dist/components/br-tab.js +5 -0
  550. package/dist/components/br-table-body.d.ts +11 -0
  551. package/dist/components/br-table-body.js +5 -0
  552. package/dist/components/br-table-cell.d.ts +11 -0
  553. package/dist/components/br-table-cell.js +5 -0
  554. package/dist/components/br-table-header-cell.d.ts +11 -0
  555. package/dist/components/br-table-header-cell.js +5 -0
  556. package/dist/components/br-table-header.d.ts +11 -0
  557. package/dist/components/br-table-header.js +5 -0
  558. package/dist/components/br-table-row.d.ts +11 -0
  559. package/dist/components/br-table-row.js +5 -0
  560. package/dist/components/br-table.d.ts +11 -0
  561. package/dist/components/br-table.js +5 -0
  562. package/dist/components/br-tag.d.ts +11 -0
  563. package/dist/components/br-tag.js +5 -0
  564. package/dist/components/br-textarea.d.ts +11 -0
  565. package/dist/components/br-textarea.js +5 -0
  566. package/dist/components/br-time-picker.d.ts +11 -0
  567. package/dist/components/br-time-picker.js +5 -0
  568. package/dist/components/br-tooltip.d.ts +11 -0
  569. package/dist/components/br-tooltip.js +5 -0
  570. package/dist/components/br-upload.d.ts +11 -0
  571. package/dist/components/br-upload.js +5 -0
  572. package/dist/components/br-wizard-panel.d.ts +11 -0
  573. package/dist/components/br-wizard-panel.js +5 -0
  574. package/dist/components/br-wizard.d.ts +11 -0
  575. package/dist/components/br-wizard.js +5 -0
  576. package/dist/components/index.d.ts +213 -0
  577. package/dist/components/index.js +5 -0
  578. package/dist/components/p-34Jfn-U-.js +5 -0
  579. package/dist/components/p-5z6jgH1D.js +5 -0
  580. package/dist/components/p-6OdfnwnK.js +5 -0
  581. package/dist/components/p-9S9bgUT0.js +5 -0
  582. package/dist/components/p-B-qLmYZC.js +5 -0
  583. package/dist/components/p-B55qsau4.js +5 -0
  584. package/dist/components/p-B7Amgxkp.js +5 -0
  585. package/dist/components/p-BC7f6MK8.js +5 -0
  586. package/dist/components/p-BKuMQJrQ.js +5 -0
  587. package/dist/components/p-BPJpHGOW.js +5 -0
  588. package/dist/components/p-BWXfdbQH.js +5 -0
  589. package/dist/components/p-Bb-nLtTG.js +5 -0
  590. package/dist/components/p-BeE7R9nu.js +5 -0
  591. package/dist/components/p-BkS6ujyf.js +5 -0
  592. package/dist/components/p-Bo0QYHJO.js +5 -0
  593. package/dist/components/p-C1yRmdso.js +5 -0
  594. package/dist/components/p-C2i2c_io.js +5 -0
  595. package/dist/components/p-C7v0lVlX.js +5 -0
  596. package/dist/components/p-CMBsvswx.js +5 -0
  597. package/dist/components/p-CRrimdz6.js +5 -0
  598. package/dist/components/p-CWORw84-.js +5 -0
  599. package/dist/components/p-CXMwM9m4.js +5 -0
  600. package/dist/components/p-CdDwqbBv.js +5 -0
  601. package/dist/components/p-CvUMXJCl.js +5 -0
  602. package/dist/components/p-D3usVJE2.js +16 -0
  603. package/dist/components/p-D6zroLx5.js +5 -0
  604. package/dist/components/p-DA5GS53D.js +5 -0
  605. package/dist/components/p-DBP6K_aq.js +5 -0
  606. package/dist/components/p-DBmwzG9E.js +5 -0
  607. package/dist/components/p-DCrVo-8T.js +5 -0
  608. package/dist/components/p-DFUKDNck.js +5 -0
  609. package/dist/components/p-DHicj0By.js +5 -0
  610. package/dist/components/p-DIK54tTj.js +5 -0
  611. package/dist/components/p-DQRSHR-D.js +5 -0
  612. package/dist/components/p-DRVMm1Py.js +5 -0
  613. package/dist/components/p-DWPmUV72.js +5 -0
  614. package/dist/components/p-DXjQyH6s.js +5 -0
  615. package/dist/components/p-DYA74R1r.js +5 -0
  616. package/dist/components/p-DmCxdB9P.js +5 -0
  617. package/dist/components/p-Dmfk7eEe.js +5 -0
  618. package/dist/components/p-Dp0xy_3n.js +5 -0
  619. package/dist/components/p-DxZJrIyL.js +5 -0
  620. package/dist/components/p-JAkkThgf.js +5 -0
  621. package/dist/components/p-Ud-WB0hx.js +5 -0
  622. package/dist/components/p-bhULC15U.js +5 -0
  623. package/dist/components/p-cF3ia5e9.js +5 -0
  624. package/dist/components/p-fpMNttbg.js +5 -0
  625. package/dist/components/p-gvnfuTjd.js +5 -0
  626. package/dist/components/p-qYONSNcf.js +5 -0
  627. package/dist/components/p-qhhHGJY1.js +5 -0
  628. package/dist/components/p-ttI0nvv_.js +5 -0
  629. package/dist/components/p-ukNmfGNP.js +5 -0
  630. package/dist/components/p-xa8e1kSW.js +5 -0
  631. package/dist/esm/app-globals-DVjNHTTs.js +7 -0
  632. package/dist/esm/br-avatar.entry.js +246 -0
  633. package/dist/esm/br-breadcrumb-item.entry.js +43 -0
  634. package/dist/esm/br-breadcrumb.entry.js +441 -0
  635. package/dist/esm/br-button_2.entry.js +277 -0
  636. package/dist/esm/br-card.entry.js +109 -0
  637. package/dist/esm/br-carousel-page.entry.js +78 -0
  638. package/dist/esm/br-carousel.entry.js +563 -0
  639. package/dist/esm/br-checkbox-group.entry.js +116 -0
  640. package/dist/esm/br-checkbox.entry.js +286 -0
  641. package/dist/esm/br-checkgroup.entry.js +18 -0
  642. package/dist/esm/br-collapse_2.entry.js +680 -0
  643. package/dist/esm/br-cookiebar-cookie.entry.js +81 -0
  644. package/dist/esm/br-cookiebar-group.entry.js +307 -0
  645. package/dist/esm/br-cookiebar-header.entry.js +37 -0
  646. package/dist/esm/br-cookiebar-link.entry.js +53 -0
  647. package/dist/esm/br-cookiebar-note-group.entry.js +68 -0
  648. package/dist/esm/br-cookiebar-note.entry.js +23 -0
  649. package/dist/esm/br-cookiebar.entry.js +756 -0
  650. package/dist/esm/br-crumb.entry.js +49 -0
  651. package/dist/esm/br-date-picker_3.entry.js +2443 -0
  652. package/dist/esm/br-datetime-picker.entry.js +1884 -0
  653. package/dist/esm/br-divider.entry.js +223 -0
  654. package/dist/esm/br-dropdown_2.entry.js +1997 -0
  655. package/dist/esm/br-footer-category.entry.js +100 -0
  656. package/dist/esm/br-footer-item.entry.js +50 -0
  657. package/dist/esm/br-footer-legal.entry.js +39 -0
  658. package/dist/esm/br-footer-logo.entry.js +102 -0
  659. package/dist/esm/br-footer-social.entry.js +69 -0
  660. package/dist/esm/br-footer.entry.js +90 -0
  661. package/dist/esm/br-header-function.entry.js +140 -0
  662. package/dist/esm/br-header-link.entry.js +58 -0
  663. package/dist/esm/br-header-list.entry.js +277 -0
  664. package/dist/esm/br-header-logo.entry.js +176 -0
  665. package/dist/esm/br-header.entry.js +640 -0
  666. package/dist/esm/br-icon.entry.js +483 -0
  667. package/dist/esm/br-input.entry.js +597 -0
  668. package/dist/esm/br-item.entry.js +365 -0
  669. package/dist/esm/br-link.entry.js +131 -0
  670. package/dist/esm/br-loading.entry.js +503 -0
  671. package/dist/esm/br-magic-button.entry.js +91 -0
  672. package/dist/esm/br-menu-group.entry.js +21 -0
  673. package/dist/esm/br-menu-header.entry.js +45 -0
  674. package/dist/esm/br-menu-info.entry.js +36 -0
  675. package/dist/esm/br-menu-item.entry.js +77 -0
  676. package/dist/esm/br-menu-link.entry.js +54 -0
  677. package/dist/esm/br-menu-list.entry.js +147 -0
  678. package/dist/esm/br-menu-logo.entry.js +73 -0
  679. package/dist/esm/br-menu-social.entry.js +63 -0
  680. package/dist/esm/br-menu.entry.js +991 -0
  681. package/dist/esm/br-modal.entry.js +494 -0
  682. package/dist/esm/br-notification-body.entry.js +69 -0
  683. package/dist/esm/br-notification-header.entry.js +46 -0
  684. package/dist/esm/br-notification-item.entry.js +108 -0
  685. package/dist/esm/br-notification.entry.js +332 -0
  686. package/dist/esm/br-pagination.entry.js +882 -0
  687. package/dist/esm/br-radio-group.entry.js +426 -0
  688. package/dist/esm/br-radio.entry.js +355 -0
  689. package/dist/esm/br-scrim.entry.js +1334 -0
  690. package/dist/esm/br-select-input_3.entry.js +984 -0
  691. package/dist/esm/br-sign-in.entry.js +124 -0
  692. package/dist/esm/br-skip-link-item.entry.js +18 -0
  693. package/dist/esm/br-skip-link.entry.js +360 -0
  694. package/dist/esm/br-skiplink-item.entry.js +190 -0
  695. package/dist/esm/br-slider.entry.js +685 -0
  696. package/dist/esm/br-step_2.entry.js +625 -0
  697. package/dist/esm/br-switch.entry.js +243 -0
  698. package/dist/esm/br-tab-item.entry.js +183 -0
  699. package/dist/esm/br-tab.entry.js +395 -0
  700. package/dist/esm/br-table-body.entry.js +35 -0
  701. package/dist/esm/br-table-cell.entry.js +182 -0
  702. package/dist/esm/br-table-header-cell.entry.js +171 -0
  703. package/dist/esm/br-table-header.entry.js +35 -0
  704. package/dist/esm/br-table-row.entry.js +79 -0
  705. package/dist/esm/br-table.entry.js +678 -0
  706. package/dist/esm/br-tag.entry.js +491 -0
  707. package/dist/esm/br-textarea.entry.js +304 -0
  708. package/dist/esm/br-tooltip.entry.js +625 -0
  709. package/dist/esm/br-upload.entry.js +579 -0
  710. package/dist/esm/br-wizard-panel.entry.js +52 -0
  711. package/dist/esm/br-wizard.entry.js +706 -0
  712. package/dist/esm/breakpoint-observer-DBmwzG9E.js +141 -0
  713. package/dist/esm/clamp-gvnfuTjd.js +23 -0
  714. package/dist/esm/cookiebar.utils-DYA74R1r.js +16 -0
  715. package/dist/esm/datetime-picker-constants-Bfm58jO6.js +3798 -0
  716. package/dist/esm/event-DFN_so7I.js +48 -0
  717. package/dist/esm/floating-surface-dismiss-BWXfdbQH.js +61 -0
  718. package/dist/esm/floating-ui-BavFwMnx.js +134 -0
  719. package/dist/esm/floating-ui.dom-DIK54tTj.js +1707 -0
  720. package/dist/esm/focus-DxZJrIyL.js +26 -0
  721. package/dist/esm/getNextElement-9S9bgUT0.js +28 -0
  722. package/dist/esm/iconify-icon-D3usVJE2.js +2303 -0
  723. package/dist/esm/id-BkS6ujyf.js +18 -0
  724. package/dist/esm/index-Bo-2igoO.js +671 -0
  725. package/dist/esm/index-C2RBydfd.js +3258 -0
  726. package/dist/esm/index.js +6 -0
  727. package/dist/esm/isNil-B-qLmYZC.js +17 -0
  728. package/dist/esm/isValid-DIUZX1qS.js +3684 -0
  729. package/dist/esm/loader.js +15 -0
  730. package/dist/esm/native-dialog-B55qsau4.js +46 -0
  731. package/dist/esm/navigation-bhULC15U.js +23 -0
  732. package/dist/esm/parts-Bb5vVlCC.js +17 -0
  733. package/dist/esm/props-DRVMm1Py.js +22 -0
  734. package/dist/esm/raf-batcher-cF3ia5e9.js +53 -0
  735. package/dist/esm/slot-BIG-yees.js +44 -0
  736. package/dist/esm/swipe-Dmfk7eEe.js +343 -0
  737. package/dist/esm/table-constants-CXMwM9m4.js +170 -0
  738. package/dist/esm/validator-D3tVP32U.js +113 -0
  739. package/dist/esm/webcomponents.js +46 -0
  740. package/dist/hydrate/index.d.ts +287 -0
  741. package/dist/hydrate/index.js +67516 -0
  742. package/dist/hydrate/index.mjs +67506 -0
  743. package/dist/hydrate/package.json +12 -0
  744. package/dist/index.cjs.js +1 -0
  745. package/dist/index.js +1 -0
  746. package/dist/loader/cdn.js +5 -0
  747. package/dist/loader/index.cjs.js +5 -0
  748. package/dist/loader/index.d.ts +24 -0
  749. package/dist/loader/index.es2017.js +5 -0
  750. package/dist/loader/index.js +6 -0
  751. package/dist/types/components/item/item.d.ts +1 -0
  752. package/dist/types/components/select/select-list/select-list.d.ts +1 -0
  753. package/dist/types/components/select/select-option/select-option.d.ts +1 -0
  754. package/dist/types/components/select/select.d.ts +14 -0
  755. package/dist/types/components/select/select.types.d.ts +2 -0
  756. package/dist/types/components/select/select.utils.d.ts +13 -0
  757. package/dist/webcomponents/index.esm.js +5 -0
  758. package/dist/webcomponents/p-0196804a.entry.js +5 -0
  759. package/dist/webcomponents/p-0410186a.entry.js +5 -0
  760. package/dist/webcomponents/p-0415ef22.entry.js +5 -0
  761. package/dist/webcomponents/p-0777c7b1.entry.js +5 -0
  762. package/dist/webcomponents/p-0caa4d12.entry.js +5 -0
  763. package/dist/webcomponents/p-0d4f718d.entry.js +5 -0
  764. package/dist/webcomponents/p-0e84c9e8.entry.js +5 -0
  765. package/dist/webcomponents/p-12286e73.entry.js +5 -0
  766. package/dist/webcomponents/p-147ac8d3.entry.js +5 -0
  767. package/dist/webcomponents/p-1580beee.entry.js +5 -0
  768. package/dist/webcomponents/p-18ee6175.entry.js +5 -0
  769. package/dist/webcomponents/p-1bca4499.entry.js +5 -0
  770. package/dist/webcomponents/p-1c303a4e.entry.js +5 -0
  771. package/dist/webcomponents/p-1d6b0b6f.entry.js +5 -0
  772. package/dist/webcomponents/p-1d8cb8fd.entry.js +5 -0
  773. package/dist/webcomponents/p-224daaac.entry.js +5 -0
  774. package/dist/webcomponents/p-28426d2a.entry.js +5 -0
  775. package/dist/webcomponents/p-2abd2da0.entry.js +5 -0
  776. package/dist/webcomponents/p-2fdc51ae.entry.js +5 -0
  777. package/dist/webcomponents/p-30c428b6.entry.js +5 -0
  778. package/dist/webcomponents/p-36bbea4e.entry.js +5 -0
  779. package/dist/webcomponents/p-3907ebfa.entry.js +5 -0
  780. package/dist/webcomponents/p-39a16f9d.entry.js +5 -0
  781. package/dist/webcomponents/p-3ebbd2f5.entry.js +5 -0
  782. package/dist/webcomponents/p-3ef7eac8.entry.js +5 -0
  783. package/dist/webcomponents/p-45356e9a.entry.js +5 -0
  784. package/dist/webcomponents/p-46513db4.entry.js +5 -0
  785. package/dist/webcomponents/p-4c13221a.entry.js +5 -0
  786. package/dist/webcomponents/p-51ce2c31.entry.js +5 -0
  787. package/dist/webcomponents/p-52df61cb.entry.js +5 -0
  788. package/dist/webcomponents/p-569134cf.entry.js +5 -0
  789. package/dist/webcomponents/p-5ce7db4a.entry.js +5 -0
  790. package/dist/webcomponents/p-5f373708.entry.js +5 -0
  791. package/dist/webcomponents/p-5f6afb79.entry.js +5 -0
  792. package/dist/webcomponents/p-5fc7ba4c.entry.js +5 -0
  793. package/dist/webcomponents/p-66006312.entry.js +5 -0
  794. package/dist/webcomponents/p-66b13fd9.entry.js +5 -0
  795. package/dist/webcomponents/p-6OdfnwnK.js +5 -0
  796. package/dist/webcomponents/p-750799b7.entry.js +5 -0
  797. package/dist/webcomponents/p-756ff2ad.entry.js +5 -0
  798. package/dist/webcomponents/p-765bfe27.entry.js +5 -0
  799. package/dist/webcomponents/p-7ab96c11.entry.js +5 -0
  800. package/dist/webcomponents/p-7c2ff8b4.entry.js +5 -0
  801. package/dist/webcomponents/p-7f7506f0.entry.js +5 -0
  802. package/dist/webcomponents/p-7fb03a49.entry.js +5 -0
  803. package/dist/webcomponents/p-82200563.entry.js +5 -0
  804. package/dist/webcomponents/p-83ff4579.entry.js +5 -0
  805. package/dist/webcomponents/p-85f8063b.entry.js +5 -0
  806. package/dist/webcomponents/p-8b558233.entry.js +5 -0
  807. package/dist/webcomponents/p-8e6c2767.entry.js +5 -0
  808. package/dist/webcomponents/p-8e819355.entry.js +5 -0
  809. package/dist/webcomponents/p-92a9b9c4.entry.js +5 -0
  810. package/dist/webcomponents/p-966ad32f.entry.js +5 -0
  811. package/dist/webcomponents/p-9679d230.entry.js +5 -0
  812. package/dist/webcomponents/p-96dd663b.entry.js +5 -0
  813. package/dist/webcomponents/p-98843fa3.entry.js +5 -0
  814. package/dist/webcomponents/p-9S9bgUT0.js +5 -0
  815. package/dist/webcomponents/p-9a375eff.entry.js +5 -0
  816. package/dist/webcomponents/p-9b358cff.entry.js +5 -0
  817. package/dist/webcomponents/p-9f7558c7.entry.js +5 -0
  818. package/dist/webcomponents/p-B-qLmYZC.js +5 -0
  819. package/dist/webcomponents/p-B55qsau4.js +5 -0
  820. package/dist/webcomponents/p-BIG-yees.js +5 -0
  821. package/dist/webcomponents/p-BWXfdbQH.js +5 -0
  822. package/dist/webcomponents/p-Bb5vVlCC.js +5 -0
  823. package/dist/webcomponents/p-Bfm58jO6.js +5 -0
  824. package/dist/webcomponents/p-BhMVJQ4-.js +5 -0
  825. package/dist/webcomponents/p-BkS6ujyf.js +5 -0
  826. package/dist/webcomponents/p-C2RBydfd.js +6 -0
  827. package/dist/webcomponents/p-CO5cOQQU.js +5 -0
  828. package/dist/webcomponents/p-CXMwM9m4.js +5 -0
  829. package/dist/webcomponents/p-D3tVP32U.js +5 -0
  830. package/dist/webcomponents/p-D3usVJE2.js +16 -0
  831. package/dist/webcomponents/p-DBmwzG9E.js +5 -0
  832. package/dist/webcomponents/p-DFN_so7I.js +5 -0
  833. package/dist/webcomponents/p-DIK54tTj.js +5 -0
  834. package/dist/webcomponents/p-DRVMm1Py.js +5 -0
  835. package/dist/webcomponents/p-DVjNHTTs.js +5 -0
  836. package/dist/webcomponents/p-DYA74R1r.js +5 -0
  837. package/dist/webcomponents/p-Dmfk7eEe.js +5 -0
  838. package/dist/webcomponents/p-DxZJrIyL.js +5 -0
  839. package/dist/webcomponents/p-a382e115.entry.js +5 -0
  840. package/dist/webcomponents/p-a4ae72e3.entry.js +5 -0
  841. package/dist/webcomponents/p-a994c190.entry.js +5 -0
  842. package/dist/webcomponents/p-a9ff7c25.entry.js +5 -0
  843. package/dist/webcomponents/p-bhULC15U.js +5 -0
  844. package/dist/webcomponents/p-c0b0f531.entry.js +5 -0
  845. package/dist/webcomponents/p-c211af17.entry.js +5 -0
  846. package/dist/webcomponents/p-c492d926.entry.js +5 -0
  847. package/dist/webcomponents/p-c4cfe599.entry.js +5 -0
  848. package/dist/webcomponents/p-c846e784.entry.js +5 -0
  849. package/dist/webcomponents/p-c949d993.entry.js +5 -0
  850. package/dist/webcomponents/p-cF3ia5e9.js +5 -0
  851. package/dist/webcomponents/p-d1e899cd.entry.js +5 -0
  852. package/dist/webcomponents/p-d38d82cc.entry.js +5 -0
  853. package/dist/webcomponents/p-e0ce536a.entry.js +5 -0
  854. package/dist/webcomponents/p-e1331288.entry.js +5 -0
  855. package/dist/webcomponents/p-e360a463.entry.js +5 -0
  856. package/dist/webcomponents/p-f078f972.entry.js +5 -0
  857. package/dist/webcomponents/p-f26038e2.entry.js +5 -0
  858. package/dist/webcomponents/p-f303f6b3.entry.js +5 -0
  859. package/dist/webcomponents/p-f6318e94.entry.js +5 -0
  860. package/dist/webcomponents/p-f85ee01c.entry.js +5 -0
  861. package/dist/webcomponents/p-fcd4ae48.entry.js +5 -0
  862. package/dist/webcomponents/p-ffe0241e.entry.js +5 -0
  863. package/dist/webcomponents/p-gvnfuTjd.js +5 -0
  864. package/dist/webcomponents/webcomponents.esm.js +5 -0
  865. package/package.json +3 -7
  866. package/cem/.gitkeep +0 -0
@@ -0,0 +1,2000 @@
1
+ /*!
2
+ * Construído por SERPRO
3
+ * © https://serpro.gov.br/ - MIT License.
4
+ */
5
+ 'use strict';
6
+
7
+ var index = require('./index-CRdcutym.js');
8
+ var floatingSurfaceDismiss = require('./floating-surface-dismiss-ccdiD0KF.js');
9
+ var floatingUi = require('./floating-ui-MBI1osio.js');
10
+ var id = require('./id-CjRFMzf6.js');
11
+ var isNil = require('./isNil-DO5zWc3l.js');
12
+ var event = require('./event-CmVdNHxl.js');
13
+ var validator = require('./validator-CTCajtT9.js');
14
+ var slot = require('./slot-DAllytTj.js');
15
+ require('./floating-ui.dom-BUSTaaxR.js');
16
+
17
+ const dropdownCss = () => `*,*::before,*::after{box-sizing:border-box}:host{line-height:var(--font-line-height-medium);-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}main{display:block}hr{box-sizing:content-box;height:0;overflow:visible}a{background-color:rgba(0,0,0,0)}b,strong{font-weight:bolder}code{font-family:monospace;font-size:1em}small{font-size:80%}img{border-style:none}button,input,select,textarea{font-family:inherit;font-size:100%;line-height:var(--font-line-height-medium);margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{appearance:none}::-webkit-file-upload-button{appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.d-none{display:none !important}@media (min-width: 576px){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}}[data-toggle=dropdown]+*{position:absolute}.dropdown{position:relative}.dropdown [data-toggle=dropdown]+*{box-shadow:var(--surface-shadow-sm);left:0;position:absolute;top:100%}.dropdown>.br-notification{left:auto;right:0}.dropdown .br-item{--color:var(--color-light);--color-rgb:var(--color-light-rgb);--text-color:var(--color-light);--interactive:var(--interactive-light);--interactive-rgb:var(--color-rgb);--visited:var(--visited-light);--hover:var(--hover-light);--pressed:var(--pressed-light);--focus-color:var(--focus-color-light);--focus:var(--focus-color-light);--item-padding-y:var(--spacing-scale-2x);background-color:var(--background-light);color:var(--color)}.dropdown .br-item:not(:last-child){border-bottom:1px solid var(--border-color)}.dropdown .br-item.selected{--color:var(--color-dark);--color-rgb:var(--color-dark-rgb);--text-color:var(--color-dark);--interactive:var(--interactive-dark);--interactive-rgb:var(--interactive-dark-rgb);--visited:var(--visited-dark);--hover:var(--hover-dark);--pressed:var(--pressed-dark);--focus-color:var(--focus-color-dark);--focus:var(--focus-color-dark)}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.align-items-center{align-items:center !important}.col,[class*=col-]{padding-left:calc(var(--grid-gutter)*.5);padding-right:calc(var(--grid-gutter)*.5);width:100%}.col{flex:1 0 0%;min-width:8.3333333333%}.col-auto{flex:0 0 auto;width:auto}.col-2{flex-basis:16.6666666667%;max-width:16.6666666667%}.container,.container-fluid,.container-lg{--grid-margin:var(--grid-portrait-margin);--grid-maxwidth:var(--grid-portrait-maxwidth);margin-left:auto;margin-right:auto;max-width:var(--grid-maxwidth);padding-left:var(--grid-margin);padding-right:var(--grid-margin);width:100%}.row{--grid-gutter:var(--grid-portrait-gutter);display:flex;flex-wrap:wrap;margin-left:calc(var(--grid-gutter)*-0.5);margin-right:calc(var(--grid-gutter)*-0.5)}@media (min-width: 576px){.container,.container-lg,.container-fluid{--grid-margin:var(--grid-tablet-margin)}.row{--grid-gutter:var(--grid-tablet-gutter)}.container{--grid-maxwidth:calc(var(--grid-breakpoint-sm) - var(--grid-tablet-margin))}}@media (min-width: 992px){.container,.container-lg,.container-fluid{--grid-margin:var(--grid-tablet-margin)}.row{--grid-gutter:var(--grid-tablet-gutter)}.container{--grid-maxwidth:calc(var(--grid-breakpoint-md) - var(--grid-tablet-margin))}}@media (min-width: 1280px){.container,.container-lg,.container-fluid{--grid-margin:var(--grid-desktop-margin)}.row{--grid-gutter:var(--grid-desktop-gutter)}.container,.container-lg{--grid-maxwidth:calc(var(--grid-breakpoint-lg) - var(--grid-desktop-margin))}}@media (min-width: 1600px){.container,.container-lg,.container-fluid{--grid-margin:var(--grid-tv-margin)}.row{--grid-gutter:var(--grid-tv-gutter)}.container,.container-lg{--grid-maxwidth:calc(var(--grid-breakpoint-xl) - var(--grid-tv-margin))}}.ease{animation-timing-function:cubic-bezier(0.25, 0.1, 0.25, 1)}.ease-in-out{animation-timing-function:cubic-bezier(0.42, 0, 0.58, 1)}.mt-1{margin-top:var(--spacing-scale-half) !important}.mr-1{margin-right:var(--spacing-scale-half) !important}.mb-1{margin-bottom:var(--spacing-scale-half) !important}.ml-1{margin-left:var(--spacing-scale-half) !important}.mx-3{margin-left:var(--spacing-scale-2x) !important;margin-right:var(--spacing-scale-2x) !important}.mb-4{margin-bottom:var(--spacing-scale-3x) !important}.ml-auto{margin-left:auto !important}.pt-half{padding-top:var(--spacing-scale-half) !important}@media (min-width: 576px){.ml-sm-0{margin-left:var(--spacing-scale-default) !important}}.highlight{background:var(--status-highlight-background) linear-gradient(var(--status-highlight-overlay), var(--status-highlight-overlay));color:var(--status-highlight-text);padding:0 var(--spacing-scale-half)}[disabled],.disabled{cursor:not-allowed;opacity:var(--disabled)}[disabled] *,.disabled *{pointer-events:none}.text-center{text-align:center !important}.text-right{text-align:right !important}.text-nowrap{white-space:nowrap !important}.text-uppercase{text-transform:uppercase !important}.text-bold{font-weight:700 !important}.text-base{font-size:var(--font-size-scale-base) !important}.text-down-01{font-size:var(--font-size-scale-down-01) !important}@media (min-width: 576px){.text-sm-center{text-align:center !important}.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}}p{color:var(--color);font-size:var(--font-size-scale-base);font-weight:var(--font-weight-regular);line-height:var(--font-line-height-medium);margin-bottom:var(--spacing-scale-2x);margin-top:0}p a{text-decoration:underline}@media (min-width: 576px){p{font-size:var(--font-size-scale-up-01)}}a{--focus-offset:var(--spacing-scale-half)}a:focus{outline:none}a.focus-visible,a:focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}a:not(:disabled):hover{background-image:linear-gradient(rgba(var(--interactive-rgb), var(--hover)), rgba(var(--interactive-rgb), var(--hover)))}a:not(:disabled):active{background-image:linear-gradient(rgba(var(--interactive-rgb), var(--pressed)), rgba(var(--interactive-rgb), var(--pressed)))}a{color:var(--interactive);text-decoration:none}.main-content a{text-decoration:underline}button{cursor:pointer}img{max-width:100%;vertical-align:middle}h2,.h2{color:var(--color);font-size:var(--font-size-scale-up-03);font-weight:var(--font-weight-semi-bold);line-height:var(--font-line-height-low);margin-bottom:var(--spacing-scale-2xh);margin-top:var(--spacing-scale-3xh);padding-bottom:var(--spacing-scale-2xh)}@media (min-width: 576px){.h2,h2{font-size:var(--font-size-scale-up-05);font-weight:var(--font-weight-regular)}}ul,ol{margin-bottom:var(--spacing-scale-2x);margin-top:0;padding:0 0 0 var(--spacing-scale-5x)}table{--table-background:var(--background);--table-color:var(--color);--table-border-color:var(--gray-20);--table-border-style:solid;--table-border-width:1px;--table-hover:var(--color-rgb);--table-padding:var(--spacing-scale-3x);--table-font-weight:var(--font-weight-medium);--table-th-background:var(--background-alternative);--table-th-font-weight:var(--font-weight-semi-bold);--table-row-size:var(--spacing-scale-2x);border-collapse:collapse;width:100%}tr.selected,tr.is-selected{--color:var(--color-dark);--color-rgb:var(--color-dark-rgb);--text-color:var(--color-dark);--interactive:var(--interactive-dark);--interactive-rgb:var(--interactive-dark-rgb);--visited:var(--visited-dark);--hover:var(--hover-dark);--pressed:var(--pressed-dark);--focus-color:var(--focus-color-dark);--focus:var(--focus-color-dark)}label,.label{color:var(--color);font-size:var(--font-size-scale-base);font-weight:var(--font-weight-semi-bold);line-height:var(--font-line-height-medium);margin-bottom:var(--spacing-scale-half)}fieldset,.fieldset{border:var(--surface-width-none);margin-bottom:var(--spacing-scale-5x);margin-top:0;padding:0}legend,.legend{color:var(--color);font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-semi-bold);line-height:var(--font-line-height-low);margin-bottom:var(--spacing-scale-2x);margin-top:var(--spacing-scale-2x)}::placeholder,.placeholder{color:var(--color-light);font-size:var(--font-size-scale-base);font-style:italic;font-weight:var(--font-weight-regular);line-height:var(--font-line-height-medium);margin-bottom:var(--spacing-scale-half);margin-top:var(--spacing-scale-half);opacity:1}input,textarea,.input{color:var(--color-light);font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-medium);line-height:var(--font-line-height-low);margin-bottom:var(--spacing-scale-half)}.help{font-size:var(--font-size-scale-base)}code,.code{background:var(--gray-5);border-radius:4px;color:var(--gray-80);display:inline-block;font-family:monospace;font-size:var(--font-size-scale-base);font-weight:var(--font-weight-medium);line-height:var(--font-line-height-low);padding:var(--spacing-scale-half)}*[data-toggle=collapse]:not(:disabled):hover{background-image:linear-gradient(rgba(var(--interactive-rgb), var(--hover)), rgba(var(--interactive-rgb), var(--hover)))}*[data-toggle=collapse]:focus{outline:none}*[data-toggle=collapse].focus-visible,*[data-toggle=collapse]:focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}:host{display:inline-block;position:relative}:host #trigger{display:inline-flex;align-items:center;cursor:pointer;outline:none}:host [part=trigger-arrow]{margin-left:var(--spacing-scale-half)}:host #trigger::slotted([slot=trigger]):focus:focus{outline:none}:host #trigger::slotted([slot=trigger]):focus.focus-visible,:host #trigger::slotted([slot=trigger]):focus:focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}:host ::slotted([slot=target] *:focus):focus{outline:none}:host ::slotted([slot=target] *:focus).focus-visible,:host ::slotted([slot=target] *:focus):focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}:host #target{display:none;position:absolute;z-index:var(--z-index-layer-1);box-shadow:var(--surface-shadow-sm);border-radius:0}:host #target:focus:focus{outline:none}:host #target:focus.focus-visible,:host #target:focus:focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}:host([arrow-position=left]) [part=trigger-arrow]{margin-left:0;margin-right:var(--spacing-scale-half)}:host([is-open]) #target{display:block;width:max-content}@media (max-width: 575px){:host([is-open]) #target{width:100vw !important;max-width:100vw !important}}`;
18
+
19
+ const Dropdown = class {
20
+ constructor(hostRef) {
21
+ index.registerInstance(this, hostRef);
22
+ this.brDidOpen = index.createEvent(this, "brDidOpen", 7);
23
+ this.brDidClose = index.createEvent(this, "brDidClose", 7);
24
+ this.brDropdownChange = index.createEvent(this, "brDropdownChange", 7);
25
+ this.brDropdownOpenChange = index.createEvent(this, "brDropdownOpenChange", 6);
26
+ /**
27
+ * Identificador único do componente.
28
+ * Quando omitido, um valor é gerado automaticamente.
29
+ *
30
+ * > **Padrão:** valor único gerado por generateUniqueId().
31
+ *
32
+ * > **Uso compartilhado:** mantenha esta descrição idêntica em todos os componentes que usam `customId`.
33
+ */
34
+ this.customId = id.generateUniqueId();
35
+ /**
36
+ * Indica se o dropdown está aberto ou fechado.
37
+ * Esta propriedade é refletida no DOM e pode ser alterada externamente.
38
+ * O valor padrão é falso (fechado).
39
+ */
40
+ this.isOpen = false;
41
+ /**
42
+ * Define o posicionamento do target (alvo) em relação ao trigger (acionador).
43
+ */
44
+ this.placement = 'bottom-start';
45
+ /**
46
+ * Exibe uma seta ao lado do elemento acionador.
47
+ * O valor padrão é falso para preservar a apresentação dos triggers existentes.
48
+ */
49
+ this.showArrow = false;
50
+ /**
51
+ * Define o posicionamento da seta ('left' ou 'right') em relação ao elemento acionador.
52
+ * O valor padrão é 'right'.
53
+ */
54
+ this.arrowPosition = 'right';
55
+ /**
56
+ * Define se o dropdown deve permanecer aberto quando outro dropdown é aberto.
57
+ * Quando definido como false (padrão), o dropdown será fechado automaticamente quando outro dropdown for aberto.
58
+ * Quando definido como true, o dropdown permanecerá aberto mesmo quando outro dropdown for aberto.
59
+ */
60
+ this.preventAutoDismiss = false;
61
+ /**
62
+ * Define o z-index do elemento target (alvo) do dropdown.
63
+ * Permite customizar a ordem de sobreposição do painel dropdown em relação aos demais elementos da página.
64
+ * O valor padrão utiliza a variável CSS do design system: var(--z-index-layer-1).
65
+ */
66
+ this.targetZIndex = 'var(--z-index-layer-1)';
67
+ /**
68
+ * Desabilita a interação com o componente.
69
+ *
70
+ * > **Uso compartilhado:** mantenha esta descrição idêntica em todos os componentes que usam `disabled`.
71
+ */
72
+ this.disabled = false;
73
+ /**
74
+ * Método chamado sempre que a propriedade `isOpen` muda.
75
+ * Emite um evento com o novo estado do dropdown.
76
+ */
77
+ this.pendingOpenInit = false;
78
+ this.clickListenerAttached = false;
79
+ this.targetElement = null;
80
+ this.dropdownItems = [];
81
+ this.dropdownLinks = [];
82
+ this.focusableElement = null;
83
+ this.triggerKeydownHandler = (event) => {
84
+ if (this.disabled)
85
+ return;
86
+ if (event.key === 'Enter' || event.key === ' ') {
87
+ event.preventDefault();
88
+ this.handleTriggerBehavior(event);
89
+ }
90
+ else if (event.key === 'Escape') {
91
+ event.preventDefault();
92
+ this.hide();
93
+ this.focusOnTriggerElement();
94
+ }
95
+ else if (event.key === 'ArrowDown' && this.isOpen) {
96
+ event.preventDefault();
97
+ this.initializeDropdownItems();
98
+ if (this.dropdownLinks.length > 0) {
99
+ this.focusOnElement(this.dropdownLinks[0]);
100
+ }
101
+ else if (this.dropdownItems.length > 0) {
102
+ this.focusOnElement(this.dropdownItems[0]);
103
+ }
104
+ }
105
+ };
106
+ this.targetKeydownHandler = (event) => {
107
+ if (event.key === 'Escape') {
108
+ event.preventDefault();
109
+ this.hide();
110
+ this.focusOnTriggerElement();
111
+ }
112
+ };
113
+ /**
114
+ * Alterna o estado do dropdown entre aberto e fechado.
115
+ */
116
+ this.toggle = (event) => {
117
+ if (this.disabled)
118
+ return;
119
+ event.stopPropagation();
120
+ this.isOpen = !this.isOpen;
121
+ };
122
+ /**
123
+ * Handler para eventos de keydown nos itens não-link
124
+ * Implementa navegação completa por setas, Tab não navega entre estes itens
125
+ */
126
+ this.handleItemKeydown = (event) => {
127
+ const item = event.currentTarget;
128
+ const key = event.key;
129
+ const currentIndex = this.dropdownItems.indexOf(item);
130
+ const lastIndex = this.dropdownItems.length - 1;
131
+ switch (key) {
132
+ case 'ArrowUp':
133
+ event.preventDefault();
134
+ if (currentIndex <= 0) {
135
+ this.focusOnElement(this.dropdownItems[lastIndex]);
136
+ }
137
+ else {
138
+ this.focusOnElement(this.dropdownItems[currentIndex - 1]);
139
+ }
140
+ break;
141
+ case 'ArrowDown':
142
+ event.preventDefault();
143
+ if (currentIndex >= lastIndex) {
144
+ this.focusOnElement(this.dropdownItems[0]);
145
+ }
146
+ else {
147
+ this.focusOnElement(this.dropdownItems[currentIndex + 1]);
148
+ }
149
+ break;
150
+ case 'Home':
151
+ event.preventDefault();
152
+ this.focusOnElement(this.dropdownItems[0]);
153
+ break;
154
+ case 'End':
155
+ event.preventDefault();
156
+ this.focusOnElement(this.dropdownItems[lastIndex]);
157
+ break;
158
+ case 'Enter':
159
+ case ' ':
160
+ event.preventDefault();
161
+ item.click();
162
+ this.hide();
163
+ this.focusOnTriggerElement();
164
+ break;
165
+ case 'Tab':
166
+ break;
167
+ case 'Escape':
168
+ event.preventDefault();
169
+ this.hide();
170
+ this.focusOnTriggerElement();
171
+ break;
172
+ }
173
+ };
174
+ /**
175
+ * Handler específico para links
176
+ */
177
+ this.handleLinkKeydown = (event) => {
178
+ const link = event.currentTarget;
179
+ const key = event.key;
180
+ const linkIndex = this.dropdownLinks.indexOf(link);
181
+ const lastLinkIndex = this.dropdownLinks.length - 1;
182
+ switch (key) {
183
+ case 'ArrowUp':
184
+ case 'ArrowDown':
185
+ case 'Home':
186
+ case 'End':
187
+ event.preventDefault();
188
+ event.stopPropagation();
189
+ break;
190
+ case 'Tab':
191
+ event.preventDefault();
192
+ if (!event.shiftKey) {
193
+ if (linkIndex >= lastLinkIndex) {
194
+ this.focusOnElement(this.dropdownLinks[0]);
195
+ }
196
+ else {
197
+ this.focusOnElement(this.dropdownLinks[linkIndex + 1]);
198
+ }
199
+ }
200
+ else {
201
+ if (linkIndex <= 0) {
202
+ this.focusOnElement(this.dropdownLinks[lastLinkIndex]);
203
+ }
204
+ else {
205
+ this.focusOnElement(this.dropdownLinks[linkIndex - 1]);
206
+ }
207
+ }
208
+ break;
209
+ case 'Enter':
210
+ case ' ':
211
+ if (key === ' ' && link.tagName.toLowerCase() === 'a') {
212
+ event.preventDefault();
213
+ }
214
+ setTimeout(() => this.hide(), 100);
215
+ break;
216
+ case 'Escape':
217
+ event.preventDefault();
218
+ this.hide();
219
+ this.focusOnTriggerElement();
220
+ break;
221
+ }
222
+ };
223
+ }
224
+ isOpenChanged(newValue) {
225
+ if (newValue) {
226
+ this.attachClickListener();
227
+ this.attachOpenListeners();
228
+ this.brDidOpen.emit({ id: this.customId });
229
+ this.pendingOpenInit = true;
230
+ }
231
+ else {
232
+ this.detachClickListener();
233
+ this.detachOpenListeners();
234
+ this.cleanupPositioning();
235
+ this.brDidClose.emit({ id: this.customId });
236
+ if (this.triggerElement !== null && this.triggerElement !== undefined) {
237
+ this.focusOnTriggerElement();
238
+ }
239
+ }
240
+ this.brDropdownChange.emit({ isOpen: newValue });
241
+ this.brDropdownOpenChange.emit({ open: newValue });
242
+ }
243
+ /**
244
+ * Aplica o novo valor de z-index ao elemento target.
245
+ */
246
+ targetZIndexChanged() {
247
+ this.updateTargetZIndex();
248
+ }
249
+ /**
250
+ * Evento emitido quando o dropdown é aberto.
251
+ * Este evento é usado para implementar o auto-dismiss de outros dropdowns.
252
+ *
253
+ * @internal
254
+ */
255
+ placementChanged() {
256
+ if (!this.isOpen)
257
+ return;
258
+ this.cleanupPositioning();
259
+ this.positionDropdown();
260
+ }
261
+ /**
262
+ * Fecha o dropdown se for desabilitado enquanto estiver aberto.
263
+ */
264
+ disabledChanged(newValue) {
265
+ if (newValue && this.isOpen) {
266
+ this.hide();
267
+ }
268
+ }
269
+ connectedCallback() {
270
+ this.clickHandler = this.onClickOutside.bind(this);
271
+ this.dropdownOpenHandler = this.onDropdownDidOpen.bind(this);
272
+ if (this.isOpen)
273
+ this.attachOpenListeners();
274
+ }
275
+ disconnectedCallback() {
276
+ this.detachClickListener();
277
+ this.detachOpenListeners();
278
+ if (this.targetElement !== null && this.targetElement !== undefined) {
279
+ this.targetElement.removeEventListener('keydown', this.targetKeydownHandler);
280
+ }
281
+ this.cleanupPositioning();
282
+ this.clearDropdownItemListeners();
283
+ }
284
+ componentDidLoad() {
285
+ this.triggerElement = this.el.shadowRoot.querySelector('#trigger');
286
+ this.targetElement = this.el.shadowRoot.querySelector('#target');
287
+ this.setBehavior();
288
+ this.updateTargetZIndex();
289
+ if (this.isOpen) {
290
+ this.attachClickListener();
291
+ this.initializeDropdownItems();
292
+ this.positionDropdown();
293
+ }
294
+ }
295
+ attachClickListener() {
296
+ if (this.clickListenerAttached)
297
+ return;
298
+ document.addEventListener('click', this.clickHandler);
299
+ this.clickListenerAttached = true;
300
+ }
301
+ detachClickListener() {
302
+ if (!this.clickListenerAttached)
303
+ return;
304
+ document.removeEventListener('click', this.clickHandler);
305
+ this.clickListenerAttached = false;
306
+ }
307
+ attachOpenListeners() {
308
+ if (!this.isOpen)
309
+ return;
310
+ document.addEventListener('brDidOpen', this.dropdownOpenHandler);
311
+ this.cleanupBlockingSurfaceDismissal ?? (this.cleanupBlockingSurfaceDismissal = floatingSurfaceDismiss.listenForExternalBlockingSurface(this.el, () => void this.hide()));
312
+ }
313
+ detachOpenListeners() {
314
+ document.removeEventListener('brDidOpen', this.dropdownOpenHandler);
315
+ this.cleanupBlockingSurfaceDismissal?.();
316
+ this.cleanupBlockingSurfaceDismissal = undefined;
317
+ }
318
+ componentDidRender() {
319
+ if (this.isOpen && this.pendingOpenInit) {
320
+ this.pendingOpenInit = false;
321
+ this.initializeDropdownItems();
322
+ this.positionDropdown();
323
+ }
324
+ }
325
+ /**
326
+ * Esconde o dropdown.
327
+ * Define a propriedade `isOpen` como falsa e retorna o novo estado.
328
+ * Este método pode ser chamado externamente.
329
+ * @deprecated Use `close`.
330
+ */
331
+ async hide() {
332
+ this.isOpen = false;
333
+ return { isOpen: this.isOpen };
334
+ }
335
+ /** Fecha o dropdown e mantém o formato de retorno legado. */
336
+ async close() {
337
+ return await this.hide();
338
+ }
339
+ /**
340
+ * Abre o dropdown.
341
+ * Define a propriedade `isOpen` como verdadeira e retorna o novo estado.
342
+ * Este método pode ser chamado externamente.
343
+ */
344
+ async open() {
345
+ this.isOpen = true;
346
+ return { isOpen: this.isOpen };
347
+ }
348
+ /**
349
+ * Define o foco no elemento interno do componente.
350
+ * Este método pode ser chamado externamente para garantir que o foco seja aplicado ao elemento correto.
351
+ */
352
+ async setFocus() {
353
+ if (this.focusableElement !== null && this.focusableElement !== undefined) {
354
+ this.focusableElement.focus();
355
+ }
356
+ else {
357
+ this.focusOnTriggerElement();
358
+ }
359
+ }
360
+ /**
361
+ * Limpa o posicionamento do Floating UI
362
+ */
363
+ cleanupPositioning() {
364
+ this.floatingManager?.stop();
365
+ }
366
+ clearDropdownItemListeners() {
367
+ this.dropdownItems.forEach((item) => {
368
+ item.removeEventListener('keydown', this.handleItemKeydown);
369
+ });
370
+ this.dropdownLinks.forEach((link) => {
371
+ link.removeEventListener('keydown', this.handleLinkKeydown);
372
+ });
373
+ this.dropdownItems = [];
374
+ this.dropdownLinks = [];
375
+ }
376
+ /**
377
+ * Foca em um elemento específico com suporte a componentes personalizados
378
+ * @param targetElement Elemento a receber o foco
379
+ */
380
+ focusOnElement(targetElement) {
381
+ if (targetElement && targetElement !== this.el) {
382
+ if ('setFocus' in targetElement) {
383
+ targetElement.setFocus();
384
+ }
385
+ else {
386
+ targetElement.focus();
387
+ }
388
+ targetElement.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
389
+ }
390
+ }
391
+ /**
392
+ * Foca no elemento interativo dentro do slot trigger
393
+ * Esta função procura pelo elemento dentro do slot trigger e aplica o foco nele
394
+ */
395
+ focusOnTriggerElement() {
396
+ const triggerSlot = this.el.shadowRoot.querySelector('slot[name="trigger"]');
397
+ if (triggerSlot !== null) {
398
+ const slotElements = triggerSlot.assignedElements();
399
+ if (slotElements.length > 0) {
400
+ const firstElement = slotElements[0];
401
+ if ('setFocus' in firstElement) {
402
+ firstElement.setFocus();
403
+ }
404
+ else {
405
+ firstElement.focus();
406
+ }
407
+ firstElement.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
408
+ }
409
+ else {
410
+ this.focusTrigger();
411
+ }
412
+ }
413
+ else {
414
+ this.focusTrigger();
415
+ }
416
+ }
417
+ /**
418
+ * Auxiliar para focar no elemento trigger
419
+ */
420
+ focusTrigger() {
421
+ if (typeof this.triggerElement !== 'undefined') {
422
+ this.triggerElement.focus();
423
+ this.triggerElement.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
424
+ }
425
+ }
426
+ getCssClassMap() {
427
+ return {
428
+ 'br-dropdown': true,
429
+ disabled: this.disabled,
430
+ };
431
+ }
432
+ /**
433
+ * Lida com o comportamento no trigger
434
+ */
435
+ handleTriggerBehavior(event) {
436
+ if (this.disabled)
437
+ return;
438
+ event.preventDefault();
439
+ this.toggle(event);
440
+ if (this.isOpen) {
441
+ setTimeout(() => {
442
+ this.initializeDropdownItems();
443
+ }, 0);
444
+ }
445
+ }
446
+ /**
447
+ * Inicializa os itens do dropdown com comportamentos de navegação com teclado,
448
+ * separando claramente entre elementos navegáveis por Tab e elementos navegáveis por setas
449
+ */
450
+ initializeDropdownItems() {
451
+ if (this.targetElement === null)
452
+ return;
453
+ this.clearDropdownItemListeners();
454
+ this.targetElement.setAttribute('tabindex', '-1');
455
+ this.targetElement.focus();
456
+ const targetSlot = this.el.shadowRoot.querySelector('slot[name="target"]');
457
+ if (isNil.isNil(targetSlot))
458
+ return;
459
+ const assignedElements = targetSlot.assignedElements();
460
+ if (assignedElements.length === 0)
461
+ return;
462
+ const nonLinkSelector = 'button, br-button, input, br-input, br-item:not([href]), textarea, br-textarea, select, br-select, details, [tabindex]:not([tabindex="-1"]):not(a[href])';
463
+ const linkSelector = 'a[href], br-item[href]';
464
+ assignedElements.forEach((element) => {
465
+ if (element instanceof HTMLElement) {
466
+ if (element.matches(linkSelector)) {
467
+ this.dropdownLinks.push(element);
468
+ }
469
+ else if (element.matches(nonLinkSelector)) {
470
+ this.dropdownItems.push(element);
471
+ }
472
+ }
473
+ const linkChildren = Array.from(element.querySelectorAll(linkSelector));
474
+ this.dropdownLinks = this.dropdownLinks.concat(linkChildren);
475
+ const nonLinkChildren = Array.from(element.querySelectorAll(nonLinkSelector));
476
+ this.dropdownItems = this.dropdownItems.concat(nonLinkChildren);
477
+ });
478
+ this.dropdownItems.forEach((item) => {
479
+ item.addEventListener('keydown', this.handleItemKeydown);
480
+ });
481
+ this.dropdownLinks.forEach((link) => {
482
+ link.addEventListener('keydown', this.handleLinkKeydown);
483
+ });
484
+ if (this.dropdownLinks.length > 0) {
485
+ this.focusOnElement(this.dropdownLinks[0]);
486
+ this.focusableElement = this.dropdownLinks[0];
487
+ }
488
+ else if (this.dropdownItems.length > 0) {
489
+ this.focusOnElement(this.dropdownItems[0]);
490
+ this.focusableElement = this.dropdownItems[0];
491
+ }
492
+ }
493
+ /**
494
+ * Método que lida com cliques fora do dropdown.
495
+ *
496
+ * @param {MouseEvent} event - O evento de clique que ocorreu.
497
+ */
498
+ onClickOutside(event) {
499
+ if (!this.isOpen)
500
+ return;
501
+ const path = event.composedPath();
502
+ if (this.triggerElement &&
503
+ this.targetElement &&
504
+ !path.includes(this.triggerElement) &&
505
+ !path.includes(this.targetElement)) {
506
+ this.hide();
507
+ }
508
+ }
509
+ /**
510
+ * Método que lida com o evento brDidOpen de outros dropdowns
511
+ * Fecha este dropdown se não for o emissor do evento e preventAutoDismiss=false
512
+ */
513
+ onDropdownDidOpen(event) {
514
+ if (this.preventAutoDismiss) {
515
+ return;
516
+ }
517
+ const customEvent = event;
518
+ const eventTarget = event.target;
519
+ const isDropdownEvent = eventTarget?.tagName.toLowerCase() === 'br-dropdown';
520
+ if (isDropdownEvent && this.isOpen && customEvent.detail.id !== this.customId) {
521
+ this.hide();
522
+ }
523
+ }
524
+ /**
525
+ * Posiciona o dropdown usando Floating UI
526
+ */
527
+ positionDropdown() {
528
+ if (this.triggerElement == null || this.targetElement == null)
529
+ return;
530
+ this.floatingManager = new floatingUi.FloatingUIManager({
531
+ triggerElement: this.triggerElement,
532
+ contentElement: this.targetElement,
533
+ placement: this.placement,
534
+ offset: 4,
535
+ });
536
+ this.floatingManager.start();
537
+ }
538
+ /**
539
+ * Configura os comportamentos de interação do dropdown
540
+ */
541
+ setBehavior() {
542
+ if (this.triggerElement === null)
543
+ return;
544
+ if (this.targetElement !== null) {
545
+ this.targetElement.addEventListener('keydown', this.targetKeydownHandler);
546
+ }
547
+ }
548
+ /**
549
+ * Atualiza o z-index do target conforme a propriedade targetZIndex
550
+ */
551
+ updateTargetZIndex() {
552
+ if (this.targetElement === null) {
553
+ return;
554
+ }
555
+ if (this.targetZIndex !== null && this.targetZIndex !== undefined) {
556
+ this.targetElement.style.zIndex = this.targetZIndex;
557
+ }
558
+ }
559
+ render() {
560
+ return (index.h(index.Host, { key: '695bafe3b8c346f97a0db7360e32ac518ea1502b', "is-open": this.isOpen, placement: this.placement, "prevent-auto-dismiss": this.preventAutoDismiss, disabled: this.disabled, "arrow-position": this.arrowPosition }, index.h("div", { key: '301507910f180a8e8799df3a3b677f768c3bf50f', class: this.getCssClassMap(), id: this.customId }, index.h("div", { key: '7eed65fb40a674563a0378271ab8dbf4c3e441ef', id: "trigger", part: "trigger", role: "button", tabIndex: this.disabled ? -1 : 0, onClick: this.disabled ? null : this.toggle, onKeyDown: (e) => (this.disabled ? null : this.triggerKeydownHandler(e)), "aria-controls": "target", "aria-haspopup": "true", "aria-expanded": this.isOpen ? 'true' : 'false', "aria-label": this.ariaLabel || null, "aria-disabled": this.disabled ? 'true' : null }, this.showArrow && this.arrowPosition === 'left' ? (index.h("br-icon", { iconName: this.isOpen ? 'fa6-solid:caret-up' : 'fa6-solid:caret-down', "aria-hidden": "true", part: "trigger-arrow", width: "16", height: "16" })) : null, index.h("slot", { key: 'fa3d69c559202120e5f13c37b02fc4f89a4f1063', name: "trigger" }), this.showArrow && this.arrowPosition === 'right' ? (index.h("br-icon", { iconName: this.isOpen ? 'fa6-solid:caret-up' : 'fa6-solid:caret-down', "aria-hidden": "true", part: "trigger-arrow", width: "16", height: "16" })) : null), index.h("div", { key: '9071300ed8deeeeaa0f669f825e6eecf1fa96e75', id: "target", part: "target", "aria-hidden": this.isOpen ? 'false' : 'true' }, index.h("slot", { key: 'c6c7dca48b06b11ab9c97d8e3f76de0a275dfb0d', name: "target" })))));
561
+ }
562
+ get el() { return index.getElement(this); }
563
+ static get watchers() { return {
564
+ "isOpen": [{
565
+ "isOpenChanged": 0
566
+ }],
567
+ "targetZIndex": [{
568
+ "targetZIndexChanged": 0
569
+ }],
570
+ "placement": [{
571
+ "placementChanged": 0
572
+ }],
573
+ "disabled": [{
574
+ "disabledChanged": 0
575
+ }]
576
+ }; }
577
+ };
578
+ Dropdown.style = dropdownCss();
579
+
580
+ function transitionSelection({ currentValues, multiple, value, selected, selectableValues = [], }) {
581
+ const current = [...new Set(currentValues)];
582
+ if (!multiple) {
583
+ const values = selected && value ? [value] : [];
584
+ return { values, changed: values.length !== current.length || values[0] !== current[0] };
585
+ }
586
+ if (!value && selectableValues.length > 0) {
587
+ const values = selected ? [...new Set(selectableValues)] : [];
588
+ return {
589
+ values,
590
+ changed: values.length !== current.length || values.some((item, index) => item !== current[index]),
591
+ };
592
+ }
593
+ const next = new Set(current);
594
+ if (selected)
595
+ next.add(value);
596
+ else
597
+ next.delete(value);
598
+ const values = [...next];
599
+ return { values, changed: values.length !== current.length || values.some((item, index) => item !== current[index]) };
600
+ }
601
+ function transitionAllSelection(currentValues, selected, selectableValues) {
602
+ return transitionSelection({
603
+ currentValues,
604
+ multiple: true,
605
+ value: '',
606
+ selected,
607
+ selectableValues,
608
+ });
609
+ }
610
+
611
+ const selectCss = () => `*,*::before,*::after{box-sizing:border-box}:host{line-height:var(--font-line-height-medium);-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}main{display:block}hr{box-sizing:content-box;height:0;overflow:visible}a{background-color:rgba(0,0,0,0)}b,strong{font-weight:bolder}code{font-family:monospace;font-size:1em}small{font-size:80%}img{border-style:none}button,input,select,textarea{font-family:inherit;font-size:100%;line-height:var(--font-line-height-medium);margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{appearance:none}::-webkit-file-upload-button{appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.d-none{display:none !important}@media (min-width: 576px){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}}[data-toggle=dropdown]+*{position:absolute}.dropdown{position:relative}.dropdown [data-toggle=dropdown]+*{box-shadow:var(--surface-shadow-sm);left:0;position:absolute;top:100%}.dropdown>.br-notification{left:auto;right:0}.dropdown .br-item{--color:var(--color-light);--color-rgb:var(--color-light-rgb);--text-color:var(--color-light);--interactive:var(--interactive-light);--interactive-rgb:var(--color-rgb);--visited:var(--visited-light);--hover:var(--hover-light);--pressed:var(--pressed-light);--focus-color:var(--focus-color-light);--focus:var(--focus-color-light);--item-padding-y:var(--spacing-scale-2x);background-color:var(--background-light);color:var(--color)}.dropdown .br-item:not(:last-child){border-bottom:1px solid var(--border-color)}.dropdown .br-item.selected{--color:var(--color-dark);--color-rgb:var(--color-dark-rgb);--text-color:var(--color-dark);--interactive:var(--interactive-dark);--interactive-rgb:var(--interactive-dark-rgb);--visited:var(--visited-dark);--hover:var(--hover-dark);--pressed:var(--pressed-dark);--focus-color:var(--focus-color-dark);--focus:var(--focus-color-dark)}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.align-items-center{align-items:center !important}.col,[class*=col-]{padding-left:calc(var(--grid-gutter)*.5);padding-right:calc(var(--grid-gutter)*.5);width:100%}.col{flex:1 0 0%;min-width:8.3333333333%}.col-auto{flex:0 0 auto;width:auto}.col-2{flex-basis:16.6666666667%;max-width:16.6666666667%}.container,.container-fluid,.container-lg{--grid-margin:var(--grid-portrait-margin);--grid-maxwidth:var(--grid-portrait-maxwidth);margin-left:auto;margin-right:auto;max-width:var(--grid-maxwidth);padding-left:var(--grid-margin);padding-right:var(--grid-margin);width:100%}.row{--grid-gutter:var(--grid-portrait-gutter);display:flex;flex-wrap:wrap;margin-left:calc(var(--grid-gutter)*-0.5);margin-right:calc(var(--grid-gutter)*-0.5)}@media (min-width: 576px){.container,.container-lg,.container-fluid{--grid-margin:var(--grid-tablet-margin)}.row{--grid-gutter:var(--grid-tablet-gutter)}.container{--grid-maxwidth:calc(var(--grid-breakpoint-sm) - var(--grid-tablet-margin))}}@media (min-width: 992px){.container,.container-lg,.container-fluid{--grid-margin:var(--grid-tablet-margin)}.row{--grid-gutter:var(--grid-tablet-gutter)}.container{--grid-maxwidth:calc(var(--grid-breakpoint-md) - var(--grid-tablet-margin))}}@media (min-width: 1280px){.container,.container-lg,.container-fluid{--grid-margin:var(--grid-desktop-margin)}.row{--grid-gutter:var(--grid-desktop-gutter)}.container,.container-lg{--grid-maxwidth:calc(var(--grid-breakpoint-lg) - var(--grid-desktop-margin))}}@media (min-width: 1600px){.container,.container-lg,.container-fluid{--grid-margin:var(--grid-tv-margin)}.row{--grid-gutter:var(--grid-tv-gutter)}.container,.container-lg{--grid-maxwidth:calc(var(--grid-breakpoint-xl) - var(--grid-tv-margin))}}.ease{animation-timing-function:cubic-bezier(0.25, 0.1, 0.25, 1)}.ease-in-out{animation-timing-function:cubic-bezier(0.42, 0, 0.58, 1)}.mt-1{margin-top:var(--spacing-scale-half) !important}.mr-1{margin-right:var(--spacing-scale-half) !important}.mb-1{margin-bottom:var(--spacing-scale-half) !important}.ml-1{margin-left:var(--spacing-scale-half) !important}.mx-3{margin-left:var(--spacing-scale-2x) !important;margin-right:var(--spacing-scale-2x) !important}.mb-4{margin-bottom:var(--spacing-scale-3x) !important}.ml-auto{margin-left:auto !important}.pt-half{padding-top:var(--spacing-scale-half) !important}@media (min-width: 576px){.ml-sm-0{margin-left:var(--spacing-scale-default) !important}}.highlight{background:var(--status-highlight-background) linear-gradient(var(--status-highlight-overlay), var(--status-highlight-overlay));color:var(--status-highlight-text);padding:0 var(--spacing-scale-half)}[disabled],.disabled{cursor:not-allowed;opacity:var(--disabled)}[disabled] *,.disabled *{pointer-events:none}.text-center{text-align:center !important}.text-right{text-align:right !important}.text-nowrap{white-space:nowrap !important}.text-uppercase{text-transform:uppercase !important}.text-bold{font-weight:700 !important}.text-base{font-size:var(--font-size-scale-base) !important}.text-down-01{font-size:var(--font-size-scale-down-01) !important}@media (min-width: 576px){.text-sm-center{text-align:center !important}.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}}p{color:var(--color);font-size:var(--font-size-scale-base);font-weight:var(--font-weight-regular);line-height:var(--font-line-height-medium);margin-bottom:var(--spacing-scale-2x);margin-top:0}p a{text-decoration:underline}@media (min-width: 576px){p{font-size:var(--font-size-scale-up-01)}}a{--focus-offset:var(--spacing-scale-half)}a:focus{outline:none}a.focus-visible,a:focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}a:not(:disabled):hover{background-image:linear-gradient(rgba(var(--interactive-rgb), var(--hover)), rgba(var(--interactive-rgb), var(--hover)))}a:not(:disabled):active{background-image:linear-gradient(rgba(var(--interactive-rgb), var(--pressed)), rgba(var(--interactive-rgb), var(--pressed)))}a{color:var(--interactive);text-decoration:none}.main-content a{text-decoration:underline}button{cursor:pointer}img{max-width:100%;vertical-align:middle}h2,.h2{color:var(--color);font-size:var(--font-size-scale-up-03);font-weight:var(--font-weight-semi-bold);line-height:var(--font-line-height-low);margin-bottom:var(--spacing-scale-2xh);margin-top:var(--spacing-scale-3xh);padding-bottom:var(--spacing-scale-2xh)}@media (min-width: 576px){.h2,h2{font-size:var(--font-size-scale-up-05);font-weight:var(--font-weight-regular)}}ul,ol{margin-bottom:var(--spacing-scale-2x);margin-top:0;padding:0 0 0 var(--spacing-scale-5x)}table{--table-background:var(--background);--table-color:var(--color);--table-border-color:var(--gray-20);--table-border-style:solid;--table-border-width:1px;--table-hover:var(--color-rgb);--table-padding:var(--spacing-scale-3x);--table-font-weight:var(--font-weight-medium);--table-th-background:var(--background-alternative);--table-th-font-weight:var(--font-weight-semi-bold);--table-row-size:var(--spacing-scale-2x);border-collapse:collapse;width:100%}tr.selected,tr.is-selected{--color:var(--color-dark);--color-rgb:var(--color-dark-rgb);--text-color:var(--color-dark);--interactive:var(--interactive-dark);--interactive-rgb:var(--interactive-dark-rgb);--visited:var(--visited-dark);--hover:var(--hover-dark);--pressed:var(--pressed-dark);--focus-color:var(--focus-color-dark);--focus:var(--focus-color-dark)}label,.label{color:var(--color);font-size:var(--font-size-scale-base);font-weight:var(--font-weight-semi-bold);line-height:var(--font-line-height-medium);margin-bottom:var(--spacing-scale-half)}fieldset,.fieldset{border:var(--surface-width-none);margin-bottom:var(--spacing-scale-5x);margin-top:0;padding:0}legend,.legend{color:var(--color);font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-semi-bold);line-height:var(--font-line-height-low);margin-bottom:var(--spacing-scale-2x);margin-top:var(--spacing-scale-2x)}::placeholder,.placeholder{color:var(--color-light);font-size:var(--font-size-scale-base);font-style:italic;font-weight:var(--font-weight-regular);line-height:var(--font-line-height-medium);margin-bottom:var(--spacing-scale-half);margin-top:var(--spacing-scale-half);opacity:1}input,textarea,.input{color:var(--color-light);font-size:var(--font-size-scale-up-01);font-weight:var(--font-weight-medium);line-height:var(--font-line-height-low);margin-bottom:var(--spacing-scale-half)}.help{font-size:var(--font-size-scale-base)}code,.code{background:var(--gray-5);border-radius:4px;color:var(--gray-80);display:inline-block;font-family:monospace;font-size:var(--font-size-scale-base);font-weight:var(--font-weight-medium);line-height:var(--font-line-height-low);padding:var(--spacing-scale-half)}*[data-toggle=collapse]:not(:disabled):hover{background-image:linear-gradient(rgba(var(--interactive-rgb), var(--hover)), rgba(var(--interactive-rgb), var(--hover)))}*[data-toggle=collapse]:focus{outline:none}*[data-toggle=collapse].focus-visible,*[data-toggle=collapse]:focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}.br-select{--select-divider:1px solid var(--color-secondary-04);--select-shadow:var(--surface-shadow-md)}.br-select .br-input input{padding-right:29px;text-overflow:ellipsis}.br-select .br-input input::after{bottom:0;padding:0 5px;position:absolute;right:0}.br-select{max-width:400px;min-width:100px;position:relative}.br-select .br-list{background:var(--bg-color);box-shadow:var(--select-shadow);display:none;margin-top:-2px;max-height:404px;overflow:auto;position:absolute;resize:none;width:100%;z-index:1}.br-select .br-list::-webkit-scrollbar{height:var(--spacing-scale-base);width:var(--spacing-scale-base)}.br-select .br-list::-webkit-scrollbar-track{background:var(--gray-10)}.br-select .br-list::-webkit-scrollbar-thumb{background:var(--gray-30)}.br-select .br-list:hover::-webkit-scrollbar-thumb{background:var(--gray-40)}.br-select .br-list:focus,.br-select .br-list:active{color:var(--color-secondary-09);outline:none}.br-select .br-list:hover::-webkit-scrollbar-thumb{background:var(--color-secondary-07)}.br-select .br-list[expanded]{display:block}.br-select .br-item{--color:var(--color-light);--color-rgb:var(--color-light-rgb);--text-color:var(--color-light);--interactive:var(--interactive-light);--interactive-rgb:var(--interactive-light-rgb);--visited:var(--visited-light);--hover:var(--hover-light);--pressed:var(--pressed-light);--focus-color:var(--focus-color-light);--focus:var(--focus-color-light);--item-padding-y:var(--spacing-scale-2x)}.br-select .br-item .content{padding:0}.br-select .br-item .br-checkbox,.br-select .br-item .br-radio{--item-padding-x:var(--spacing-scale-2x);--item-padding-y:var(--spacing-scale-2x)}.br-select .br-item .br-checkbox input:hover:not(:disabled)+label::before,.br-select .br-item .br-radio input:hover:not(:disabled)+label::before{background-image:none}.br-select .br-item .br-checkbox input+label,.br-select .br-item .br-radio input+label{padding-left:calc(var(--checkbox-padding) + var(--checkbox-size) + var(--item-padding-x))}.br-select .br-item .br-radio input+label{color:var(--text-color);display:block;height:auto;min-height:0;padding:var(--item-padding)}.br-select .br-item .br-radio input+label::before,.br-select .br-item .br-radio input+label::after{content:none}.br-select .br-item:not(:last-child){border-bottom:var(--select-divider)}.br-select .br-item:not([disabled]){--focus-offset:calc(var(--spacing-scale-half) * -1)}.br-select .br-item:not([disabled]):focus{outline:none}.br-select .br-item:not([disabled]).focus-visible,.br-select .br-item:not([disabled]):focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}.br-select .br-item:not([disabled]):not(:disabled):hover{background-image:linear-gradient(rgba(var(--color-rgb), var(--hover)), rgba(var(--color-rgb), var(--hover)))}.br-select .br-item.selected,.br-select .br-item[selected]{--color:var(--color-dark);--color-rgb:var(--color-dark-rgb);--text-color:var(--color-dark);--interactive:var(--interactive-dark);--interactive-rgb:var(--interactive-dark-rgb);--visited:var(--visited-dark);--hover:var(--hover-dark);--pressed:var(--pressed-dark);--focus-color:var(--focus-color-dark);--focus:var(--focus-color-dark)}.br-select .br-item.selected:focus,.br-select .br-item[selected]:focus{outline:none}.br-select .br-item.selected.focus-visible,.br-select .br-item.selected:focus-visible,.br-select .br-item[selected].focus-visible,.br-select .br-item[selected]:focus-visible{outline-color:var(--focus);outline-offset:var(--focus-offset);outline-style:var(--focus-style);outline-width:var(--focus-width)}.br-select .br-item.selected:not(:disabled):hover,.br-select .br-item[selected]:not(:disabled):hover{background-image:linear-gradient(rgba(var(--color-rgb), var(--hover)), rgba(var(--color-rgb), var(--hover)))}.br-select .br-item.disabled{line-height:calc(var(--font-line-height-high)*2);padding-left:calc(var(--item-padding) + var(--spacing-scale-base))}.br-select.inverted .br-input,.br-select.inverted .br-input label,.br-select.dark-mode .br-input,.br-select.dark-mode .br-input label{--color:var(--color-dark);--focus-color:var(--focus-color-dark)}:host{display:inline-block}.br-select{min-width:100px;max-width:400px;position:relative}:host([multiple]) .br-select{min-width:200px}`;
612
+
613
+ let selectId = 0;
614
+ const Select = class {
615
+ constructor(hostRef) {
616
+ index.registerInstance(this, hostRef);
617
+ this.brSelectStateChange = index.createEvent(this, "brSelectStateChange", 7);
618
+ this.valueChange = index.createEvent(this, "valueChange", 7);
619
+ this.optionHover = index.createEvent(this, "optionHover", 7);
620
+ this.brSelectSearch = index.createEvent(this, "brSelectSearch", 6);
621
+ this.opened = index.createEvent(this, "opened", 7);
622
+ this.closed = index.createEvent(this, "closed", 7);
623
+ this.brSelectValidationChange = index.createEvent(this, "brSelectValidationChange", 7);
624
+ if (hostRef.$hostElement$["s-ei"]) {
625
+ this.elementInternals = hostRef.$hostElement$["s-ei"];
626
+ }
627
+ else {
628
+ this.elementInternals = hostRef.$hostElement$.attachInternals();
629
+ hostRef.$hostElement$["s-ei"] = this.elementInternals;
630
+ }
631
+ /**
632
+ * Remove a borda do input quando o componente não está em foco.
633
+ *
634
+ * @default false
635
+ */
636
+ this.borderless = false;
637
+ /**
638
+ * Desativa toda a interação do select.
639
+ *
640
+ * @default false
641
+ */
642
+ this.disabled = false;
643
+ /**
644
+ * Exibe label e campo na mesma linha.
645
+ *
646
+ * @default false
647
+ * @deprecated Use `inline`.
648
+ */
649
+ this.isInline = false;
650
+ /**
651
+ * Habilita o modo de seleção múltipla.
652
+ *
653
+ * @default false
654
+ * @deprecated Use `multiple`.
655
+ */
656
+ this.isMultiple = false;
657
+ /**
658
+ * Mantém a lista aberta depois de uma seleção.
659
+ *
660
+ * @default false
661
+ * @deprecated O comportamento atual usa o fechamento padrão do select; mantenha esta prop
662
+ * apenas para compatibilidade com integrações legadas.
663
+ */
664
+ this.keepOpenOnSelect = false;
665
+ /**
666
+ * Define quantas opções ficam visíveis na janela da lista.
667
+ *
668
+ * @default 6
669
+ */
670
+ this.visibleItems = 6;
671
+ /**
672
+ * Informa a altura base de cada opção para o cálculo de virtual scroll.
673
+ *
674
+ * @default 40
675
+ */
676
+ this.itemHeight = 40;
677
+ /**
678
+ * Controla a largura do campo de entrada.
679
+ *
680
+ * @type {string}
681
+ * @example '20rem'
682
+ */
683
+ this.inputWidth = undefined;
684
+ /**
685
+ * Define quantas opções extras são renderizadas antes e depois da área visível no virtual scroll.
686
+ *
687
+ * @default 1
688
+ */
689
+ this.overscan = 1;
690
+ /**
691
+ * Controla o estado aberto/fechado da lista.
692
+ *
693
+ * @default false
694
+ * @deprecated Use `open`.
695
+ */
696
+ this.isOpen = false;
697
+ /**
698
+ * Valor público do select baseado nas opções atualmente selecionadas.
699
+ *
700
+ * @type {string | string[] | undefined}
701
+ * @remarks Em modo múltiplo, o valor público é um array de strings.
702
+ */
703
+ this.value = '';
704
+ /**
705
+ * Texto exibido quando não há seleção.
706
+ *
707
+ * @type {string | undefined}
708
+ */
709
+ this.placeholder = '';
710
+ /**
711
+ * Indica que o preenchimento do select é obrigatório.
712
+ *
713
+ * @default false
714
+ */
715
+ this.required = false;
716
+ /**
717
+ * Rótulo apresentado para a opção de selecionar todos no modo múltiplo.
718
+ *
719
+ * @default 'Selecionar todos'
720
+ */
721
+ this.selectAllLabel = Select.SELECT_ALL_LABEL;
722
+ /**
723
+ * Habilita a filtragem textual das opções por rótulo ou valor.
724
+ *
725
+ * @default true
726
+ */
727
+ this.filterable = true;
728
+ /**
729
+ * Define se as opções são filtradas localmente ou fornecidas por uma busca remota.
730
+ * Em `remote`, o componente emite `brSelectSearch`; a aplicação deve buscar,
731
+ * validar e aplicar as opções por `setOptions()`.
732
+ * @default 'local'
733
+ */
734
+ this.searchMode = 'local';
735
+ /**
736
+ * Indica que uma busca remota de opções está pendente.
737
+ * Enquanto ativo, novas opções não podem ser selecionadas; a aplicação
738
+ * continua responsável por debounce, cancelamento, erros e autenticação.
739
+ * @default false
740
+ */
741
+ this.loading = false;
742
+ /**
743
+ * Exibe o ícone de busca no campo de entrada.
744
+ *
745
+ * @default false
746
+ */
747
+ this.showSearchIcon = false;
748
+ /**
749
+ * Rótulo apresentado quando todas as opções já estão selecionadas no modo múltiplo.
750
+ *
751
+ * @default 'Desselecionar todos'
752
+ */
753
+ this.unselectAllLabel = Select.DESELECT_ALL_LABEL;
754
+ /**
755
+ * Opções fornecidas como array ou JSON, além das opções projetadas por slot.
756
+ *
757
+ * @deprecated O formato de opções tipado atual é preferível; o formato legado permanece aceito.
758
+ */
759
+ this.options = [];
760
+ /** Identificador público do controle. */
761
+ this.customId = `br-select-${selectId++}`;
762
+ /** Quantidade mínima de opções selecionadas no modo múltiplo. */
763
+ this.minSelections = 0;
764
+ /** Quantidade máxima de opções selecionadas no modo múltiplo. */
765
+ this.maxSelections = 0;
766
+ this.shouldRestoreSelectedOptionOnOpen = false;
767
+ this.pendingOptions = null;
768
+ this.slotElement = null;
769
+ this.handleSlotChange = () => this.syncOptionsFromSlot();
770
+ this.lastEmittedStateKey = '';
771
+ this.isStateChangeReady = false;
772
+ this.isValueChangeReady = false;
773
+ this.listboxId = `${this.customId}-listbox`;
774
+ this.activeOptionIndex = -1;
775
+ this.searchTerm = '';
776
+ this.formDisabled = false;
777
+ this.isValidating = false;
778
+ this.validatorMessage = null;
779
+ this.hasFeedbackSlot = false;
780
+ this.hasValidationLoadingSlot = false;
781
+ this.selectedValuesState = [];
782
+ this.customValidationMessage = '';
783
+ this.validationRunId = 0;
784
+ this.lastAnnouncedOpen = false;
785
+ this.isApplyingExternalValue = false;
786
+ this.suppressValueChange = false;
787
+ this.hasImperativeOptions = false;
788
+ this.remoteSelectedOptions = new Map();
789
+ this.selectionInitialized = false;
790
+ this.selectedValues = [];
791
+ this.suppressFocusOpen = false;
792
+ /**
793
+ * Sincroniza as opções declaradas no slot com a lista interna renderizada.
794
+ *
795
+ * @remarks
796
+ * Esse passo mantém alinhados o estado visual da lista e o texto exibido no input
797
+ * quando as opções são adicionadas, removidas ou alteradas dinamicamente.
798
+ */
799
+ this.syncOptionsFromSlot = (updateDisplayValue = true) => {
800
+ if (this.hasImperativeOptions)
801
+ return;
802
+ const nodes = this.slotElement?.assignedNodes({ flatten: true }) ?? Array.from(this.el.childNodes);
803
+ const options = nodes.map((n) => this.nodeToOption(n)).filter((o) => Boolean(o));
804
+ // Envia opções para o br-select-list
805
+ if (this.selectListElement)
806
+ this.selectListElement.options = this.getListOptions(options);
807
+ if (updateDisplayValue)
808
+ this.syncDisplayValue(options);
809
+ };
810
+ }
811
+ formDisabledCallback(disabled) {
812
+ this.formDisabled = disabled;
813
+ }
814
+ formResetCallback() {
815
+ this.validationRunId++;
816
+ this.validatorMessage = null;
817
+ this.customValidationMessage = '';
818
+ this.applySelectedValue(this.initialValue);
819
+ }
820
+ formStateRestoreCallback(state) {
821
+ if (typeof state !== 'string' || state === '')
822
+ return;
823
+ try {
824
+ this.applySelectedValue(JSON.parse(state));
825
+ }
826
+ catch {
827
+ this.applySelectedValue(state);
828
+ }
829
+ }
830
+ componentWillLoad() {
831
+ this.hasFeedbackSlot = slot.hasNamedLightDomSlot(this.el, 'feedback');
832
+ this.hasValidationLoadingSlot = slot.hasNamedLightDomSlot(this.el, 'validation-loading');
833
+ this.setSelectionMode(this.effectiveMultiple);
834
+ const initialOptions = this.getHostOptions();
835
+ const propOptions = this.getOptionsProp();
836
+ const sourceOptions = initialOptions.length === 0 && propOptions.length > 0 ? propOptions : initialOptions;
837
+ this.setSelectedValues(this.valueFromPublicValue(this.value) ??
838
+ sourceOptions.filter((option) => option.selected).map((option) => option.value));
839
+ this.selectionInitialized = true;
840
+ if (initialOptions.length === 0 && propOptions.length > 0) {
841
+ this.pendingOptions = propOptions;
842
+ this.syncDisplayValue(propOptions);
843
+ }
844
+ else {
845
+ this.syncDisplayValue(initialOptions);
846
+ }
847
+ this.initialValue = Array.isArray(this.value) ? [...this.value] : this.value;
848
+ this.syncFormState();
849
+ }
850
+ componentDidLoad() {
851
+ this.lastEmittedStateKey = this.getStateChangeKey();
852
+ this.isStateChangeReady = true;
853
+ this.setSelectionMode(this.effectiveMultiple);
854
+ // Inicializa sincronização de opções a partir do slot
855
+ this.slotElement = this.el.shadowRoot?.querySelector('slot:not([name])');
856
+ if (this.slotElement) {
857
+ this.syncOptionsFromSlot(false);
858
+ this.slotElement.addEventListener('slotchange', this.handleSlotChange);
859
+ }
860
+ if (this.pendingOptions && this.selectListElement) {
861
+ this.selectListElement.options = this.getListOptions(this.pendingOptions);
862
+ this.pendingOptions = null;
863
+ }
864
+ this.isValueChangeReady = true;
865
+ this.lastAnnouncedOpen = this.effectiveOpen;
866
+ if (this.effectiveOpen)
867
+ this.attachBlockingSurfaceListener();
868
+ this.updateValidity();
869
+ }
870
+ componentDidRender() {
871
+ this.syncNativeSelectSelection();
872
+ this.updateValidity();
873
+ }
874
+ disconnectedCallback() {
875
+ if (this.slotElement) {
876
+ this.slotElement.removeEventListener('slotchange', this.handleSlotChange);
877
+ this.slotElement = null;
878
+ }
879
+ this.detachBlockingSurfaceListener();
880
+ }
881
+ get effectiveMultiple() {
882
+ return this.multiple ?? this.isMultiple;
883
+ }
884
+ get effectiveInline() {
885
+ return this.inline ?? this.isInline;
886
+ }
887
+ get effectiveOpen() {
888
+ return this.open ?? this.isOpen;
889
+ }
890
+ valueFromPublicValue(value) {
891
+ if (this.effectiveMultiple)
892
+ return Array.isArray(value) ? [...new Set(value.filter(Boolean))] : null;
893
+ return typeof value === 'string' && value ? [value] : null;
894
+ }
895
+ setSelectedValues(values) {
896
+ const next = [...new Set(values.filter(Boolean))];
897
+ if (!this.effectiveMultiple && next.length > 1)
898
+ next.splice(1);
899
+ if (this.selectedValues.length === next.length &&
900
+ this.selectedValues.every((value, index) => value === next[index]))
901
+ return;
902
+ this.selectedValues = next;
903
+ this.selectedValuesState = next;
904
+ }
905
+ get canonicalSelectedValues() {
906
+ return this.selectedValues;
907
+ }
908
+ applyCanonicalSelection(options, values = this.canonicalSelectedValues) {
909
+ if (!this.selectionInitialized)
910
+ return options.map((option) => ({ ...option }));
911
+ const selected = new Set(values);
912
+ return options.map((option) => ({ ...option, selected: selected.has(option.value) }));
913
+ }
914
+ getListOptions(options) {
915
+ const normalized = this.applyCanonicalSelection(options).filter((option) => option.value !== '__select_all__');
916
+ if (!this.effectiveMultiple)
917
+ return normalized;
918
+ const selectable = normalized.filter((option) => !this.isSelectAllLabel(this.getOptionLabel(option)));
919
+ const allSelected = selectable.length > 0 && selectable.every((option) => Boolean(option.selected));
920
+ const anySelected = selectable.some((option) => Boolean(option.selected));
921
+ return [
922
+ {
923
+ value: '__select_all__',
924
+ label: allSelected ? this.unselectAllLabel : this.selectAllLabel,
925
+ selected: allSelected,
926
+ indeterminate: anySelected && !allSelected,
927
+ },
928
+ ...selectable,
929
+ ];
930
+ }
931
+ isDisabled() {
932
+ return validator.isFormControlDisabled(this.disabled, this.formDisabled);
933
+ }
934
+ handleDisabledChange(isDisabled) {
935
+ if (isDisabled && this.effectiveOpen) {
936
+ this.close();
937
+ return;
938
+ }
939
+ this.emitStateChange();
940
+ }
941
+ handleIsOpenChange(isOpen) {
942
+ if (this.open === undefined)
943
+ this.syncOpenState(isOpen);
944
+ }
945
+ handleFilterableChange(filterable) {
946
+ if (!filterable) {
947
+ this.clearSearch();
948
+ }
949
+ }
950
+ handleLoadingChange(loading) {
951
+ if (this.selectListElement)
952
+ this.selectListElement.loading = loading;
953
+ }
954
+ handleIsMultipleChange(isMultiple) {
955
+ if (this.multiple === undefined)
956
+ this.setSelectionMode(isMultiple);
957
+ this.syncDisplayValue();
958
+ }
959
+ handleMultipleChange(multiple) {
960
+ if (multiple !== undefined)
961
+ this.setSelectionMode(multiple);
962
+ this.syncDisplayValue();
963
+ }
964
+ handleOpenChange(open) {
965
+ if (open !== undefined)
966
+ this.syncOpenState(open);
967
+ }
968
+ handleExternalValueChange(value) {
969
+ if (this.isApplyingExternalValue)
970
+ return;
971
+ this.applySelectedValue(value);
972
+ }
973
+ handleOptionsChange() {
974
+ const options = this.getOptionsProp();
975
+ void this.setOptions(options);
976
+ }
977
+ syncOpenState(isOpen) {
978
+ if (this.lastAnnouncedOpen !== isOpen) {
979
+ (isOpen ? this.opened : this.closed).emit();
980
+ this.lastAnnouncedOpen = isOpen;
981
+ }
982
+ if (isOpen) {
983
+ this.attachBlockingSurfaceListener();
984
+ this.selectInputElement?.flipUp();
985
+ void this.openListAndRestorePointerFocus();
986
+ }
987
+ else {
988
+ this.detachBlockingSurfaceListener();
989
+ this.selectInputElement?.flipDown();
990
+ void this.selectListElement?.close();
991
+ }
992
+ this.emitStateChange();
993
+ }
994
+ attachBlockingSurfaceListener() {
995
+ this.cleanupBlockingSurfaceDismissal ?? (this.cleanupBlockingSurfaceDismissal = floatingSurfaceDismiss.listenForExternalBlockingSurface(this.el, () => void this.close()));
996
+ }
997
+ detachBlockingSurfaceListener() {
998
+ this.cleanupBlockingSurfaceDismissal?.();
999
+ this.cleanupBlockingSurfaceDismissal = undefined;
1000
+ }
1001
+ handleSelectInputFocus() {
1002
+ this.activeOptionIndex = -1;
1003
+ if (this.suppressFocusOpen)
1004
+ return;
1005
+ if (this.filterable && !this.effectiveOpen) {
1006
+ this.clearSearch();
1007
+ void this.show();
1008
+ }
1009
+ }
1010
+ handleSelectInputValueChange(event) {
1011
+ if (!this.filterable || this.isDisabled())
1012
+ return;
1013
+ const nextSearchTerm = event.detail ?? '';
1014
+ this.searchTerm = nextSearchTerm;
1015
+ this.activeOptionIndex = -1;
1016
+ this.brSelectSearch.emit({ query: nextSearchTerm });
1017
+ /*
1018
+ * A chamada imperativa garante que a transição para string vazia também
1019
+ * alcance a lista interna. Isso evita depender apenas da remoção/atualização
1020
+ * do atributo `search-term` no custom element.
1021
+ */
1022
+ void this.getSelectListController()?.setSearchTerm?.(nextSearchTerm);
1023
+ if (!this.effectiveOpen) {
1024
+ void this.show();
1025
+ }
1026
+ }
1027
+ handleSelectInputActionClick() {
1028
+ this.toggleOpenFromPointer();
1029
+ }
1030
+ handleSelectInputClick() {
1031
+ if (this.filterable) {
1032
+ if (!this.effectiveOpen) {
1033
+ this.shouldRestoreSelectedOptionOnOpen = true;
1034
+ void this.show();
1035
+ }
1036
+ return;
1037
+ }
1038
+ this.toggleOpenFromPointer();
1039
+ }
1040
+ handleSelectOptionStateChange(event$1) {
1041
+ event$1.stopPropagation();
1042
+ const detail = event$1.detail;
1043
+ // Use a lista interna para preservar rótulos e opções remotas enquanto as
1044
+ // props projetadas aguardam a próxima renderização.
1045
+ const listOptions = this.getSelectListController()?.options;
1046
+ const sourceOptions = Array.isArray(listOptions) && listOptions.length > 0
1047
+ ? listOptions.map((option) => ({ ...option }))
1048
+ : this.getCurrentOptions();
1049
+ // No modo simples, o evento é a decisão final da interação. A lista
1050
+ // virtualizada e as opções projetadas podem ainda conter o snapshot da
1051
+ // interação anterior durante cliques consecutivos; derivar a coleção a
1052
+ // partir do valor do evento evita que esse snapshot reapareça no valor
1053
+ // público ou no formulário.
1054
+ const selectableValues = sourceOptions
1055
+ .filter((option) => !this.isSelectAllLabel(this.getOptionLabel(option)))
1056
+ .map((option) => option.value);
1057
+ const transition = this.isSelectAllLabel(detail.label ?? detail.value)
1058
+ ? transitionAllSelection(this.selectedValues, Boolean(detail.selected), selectableValues)
1059
+ : transitionSelection({
1060
+ currentValues: this.selectedValues,
1061
+ multiple: this.effectiveMultiple,
1062
+ value: detail.value,
1063
+ selected: Boolean(detail.selected),
1064
+ });
1065
+ this.setSelectedValues(transition.values);
1066
+ const options = this.applyCanonicalSelection(sourceOptions, transition.values);
1067
+ if (this.selectListElement)
1068
+ this.selectListElement.options = this.getListOptions(options);
1069
+ this.reflectRenderedListSelection(transition.values);
1070
+ this.syncSlottedOptionSelection(transition.values);
1071
+ this.rememberRemoteSelections(options);
1072
+ this.syncDisplayValue(options);
1073
+ this.syncActiveOptionIndex(event$1.detail);
1074
+ this.emitStateChange(detail);
1075
+ this.updateValidity();
1076
+ if (!transition.changed)
1077
+ return;
1078
+ if (!this.effectiveMultiple) {
1079
+ this.suppressFocusOpen = true;
1080
+ void this.selectInputElement?.setFocus?.();
1081
+ void this.close().finally(() => {
1082
+ this.suppressFocusOpen = false;
1083
+ });
1084
+ }
1085
+ event.dispatchNativeFormEvent(this.el, 'input');
1086
+ event.dispatchNativeFormEvent(this.el, 'change');
1087
+ }
1088
+ handleSelectOptionHover(event) {
1089
+ this.optionHover.emit(event.detail);
1090
+ }
1091
+ // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: centraliza a navegação por teclado do componente.
1092
+ async handleKeyDown(event) {
1093
+ if (this.isDisabled())
1094
+ return;
1095
+ const path = this.getEventPath(event);
1096
+ const isFromInput = path.includes(this.selectInputElement);
1097
+ const isFromList = path.includes(this.selectListElement);
1098
+ if (!isFromInput && !isFromList)
1099
+ return;
1100
+ switch (event.key) {
1101
+ case 'ArrowDown':
1102
+ event.preventDefault();
1103
+ await this.openAndFocusBoundary(isFromInput, 1);
1104
+ return;
1105
+ case 'ArrowUp':
1106
+ event.preventDefault();
1107
+ await this.openAndFocusBoundary(isFromInput, -1);
1108
+ return;
1109
+ case 'Home':
1110
+ if (!this.effectiveOpen)
1111
+ return;
1112
+ event.preventDefault();
1113
+ await this.focusOptionByIndex(0);
1114
+ return;
1115
+ case 'End':
1116
+ if (!this.effectiveOpen)
1117
+ return;
1118
+ event.preventDefault();
1119
+ await this.focusOptionByIndex(this.getNavigableOptions().length - 1);
1120
+ return;
1121
+ case 'Enter':
1122
+ case ' ':
1123
+ if (isFromInput && this.filterable && event.key === ' ') {
1124
+ return;
1125
+ }
1126
+ if (isFromList) {
1127
+ return;
1128
+ }
1129
+ event.preventDefault();
1130
+ if (!this.effectiveOpen) {
1131
+ await this.show();
1132
+ await this.focusInitialOption(1);
1133
+ return;
1134
+ }
1135
+ await this.selectFocusedOption();
1136
+ return;
1137
+ case 'Escape':
1138
+ if (!this.effectiveOpen)
1139
+ return;
1140
+ event.preventDefault();
1141
+ await this.close();
1142
+ this.activeOptionIndex = -1;
1143
+ await this.selectInputElement?.setFocus?.();
1144
+ return;
1145
+ case 'Tab':
1146
+ if (!this.effectiveOpen)
1147
+ return;
1148
+ await this.close();
1149
+ this.activeOptionIndex = -1;
1150
+ return;
1151
+ default:
1152
+ return;
1153
+ }
1154
+ }
1155
+ handleWindowClick(ev) {
1156
+ this.handleOutsideClick(ev);
1157
+ }
1158
+ /**
1159
+ * Habilita o select para interação do usuário.
1160
+ *
1161
+ * @returns Uma promise concluída após a atualização do estado.
1162
+ */
1163
+ async enable() {
1164
+ this.disabled = false;
1165
+ }
1166
+ /**
1167
+ * Desabilita o select e impede novas interações.
1168
+ *
1169
+ * @returns Uma promise concluída após a atualização do estado.
1170
+ */
1171
+ async disable() {
1172
+ this.disabled = true;
1173
+ }
1174
+ /**
1175
+ * Abre a lista de opções quando o componente está habilitado.
1176
+ *
1177
+ * @returns Uma promise concluída após a atualização do estado.
1178
+ */
1179
+ async show() {
1180
+ if (this.isDisabled())
1181
+ return;
1182
+ if (this.open !== undefined)
1183
+ this.open = true;
1184
+ else
1185
+ this.isOpen = true;
1186
+ }
1187
+ /**
1188
+ * Fecha a lista de opções quando o componente está habilitado.
1189
+ *
1190
+ * @returns Uma promise concluída após a atualização do estado.
1191
+ */
1192
+ async close() {
1193
+ if (this.isDisabled())
1194
+ return;
1195
+ if (this.open !== undefined)
1196
+ this.open = false;
1197
+ else
1198
+ this.isOpen = false;
1199
+ this.clearSearch();
1200
+ }
1201
+ /**
1202
+ * Alterna entre os estados aberto e fechado do select.
1203
+ *
1204
+ * @returns {Promise<void>} Uma promise concluída após a atualização do estado.
1205
+ */
1206
+ async toggleOpen() {
1207
+ if (this.isDisabled())
1208
+ return;
1209
+ if (this.open !== undefined)
1210
+ this.open = !this.open;
1211
+ else
1212
+ this.isOpen = !this.isOpen;
1213
+ }
1214
+ /**
1215
+ * Limpa a seleção atual.
1216
+ *
1217
+ * @deprecated Use `setValue('')` ou a API de formulário.
1218
+ */
1219
+ async clear() {
1220
+ await this.setValue(this.effectiveMultiple ? [] : '');
1221
+ }
1222
+ /**
1223
+ * Retorna o valor público atual.
1224
+ *
1225
+ * @deprecated Leia a propriedade `value` diretamente.
1226
+ */
1227
+ async getValue() {
1228
+ return this.value ?? (this.effectiveMultiple ? [] : '');
1229
+ }
1230
+ /**
1231
+ * Define o valor público do select.
1232
+ *
1233
+ * @deprecated Atribua a propriedade `value` diretamente.
1234
+ */
1235
+ async setValue(value) {
1236
+ this.applySelectedValue(value);
1237
+ }
1238
+ /**
1239
+ * Move o foco para o campo interno.
1240
+ *
1241
+ * @deprecated Use o foco nativo do componente quando possível.
1242
+ */
1243
+ async setFocus() {
1244
+ await this.selectInputElement?.setFocus?.();
1245
+ }
1246
+ async checkValidity() {
1247
+ return this.elementInternals?.checkValidity?.() ?? true;
1248
+ }
1249
+ async reportValidity() {
1250
+ return this.elementInternals?.reportValidity?.() ?? true;
1251
+ }
1252
+ async setCustomValidity(message) {
1253
+ this.customValidationMessage = message;
1254
+ this.updateValidity();
1255
+ }
1256
+ async getValidationState() {
1257
+ return validator.getFormValidationState(this.elementInternals);
1258
+ }
1259
+ async validate() {
1260
+ const validator = this.resolveValidator();
1261
+ if (!validator || this.isDisabled())
1262
+ return this.checkValidity();
1263
+ const runId = ++this.validationRunId;
1264
+ this.isValidating = true;
1265
+ this.validatorMessage = null;
1266
+ this.updateValidity();
1267
+ this.brSelectValidationChange.emit({ validating: true, valid: null, message: null });
1268
+ let message = null;
1269
+ try {
1270
+ const currentValue = this.effectiveMultiple
1271
+ ? [...(Array.isArray(this.value) ? this.value : [])]
1272
+ : String(this.value ?? '');
1273
+ message = (await validator(currentValue)) || null;
1274
+ }
1275
+ catch {
1276
+ message = 'Não foi possível validar a seleção.';
1277
+ }
1278
+ if (runId !== this.validationRunId)
1279
+ return false;
1280
+ this.validatorMessage = message;
1281
+ this.isValidating = false;
1282
+ this.updateValidity();
1283
+ const valid = message === null && (await this.checkValidity());
1284
+ this.brSelectValidationChange.emit({ validating: false, valid, message });
1285
+ return valid;
1286
+ }
1287
+ /**
1288
+ * Substitui a coleção atual de opções por uma nova lista.
1289
+ *
1290
+ * @param options Opções que devem ser exibidas pela lista interna.
1291
+ * Em `search-mode="remote"`, a seleção atual é preservada mesmo quando não
1292
+ * aparece na resposta recebida.
1293
+ * @returns Uma promise concluída após a sincronização das opções.
1294
+ */
1295
+ async setOptions(options) {
1296
+ this.hasImperativeOptions = true;
1297
+ const nextOptions = this.searchMode === 'remote' ? this.applyRemoteSelection(options) : options;
1298
+ this.suppressValueChange = true;
1299
+ try {
1300
+ if (this.selectListElement) {
1301
+ this.selectListElement.options = this.getListOptions(nextOptions);
1302
+ }
1303
+ else {
1304
+ this.pendingOptions = nextOptions;
1305
+ }
1306
+ this.syncDisplayValue(nextOptions);
1307
+ }
1308
+ finally {
1309
+ this.suppressValueChange = false;
1310
+ }
1311
+ }
1312
+ /**
1313
+ * Adiciona ou atualiza uma única opção na coleção interna.
1314
+ *
1315
+ * @param option Opção que deve ser inserida ou atualizada.
1316
+ * @returns Uma promise concluída após a sincronização da opção.
1317
+ */
1318
+ async setOption(option) {
1319
+ this.hasImperativeOptions = true;
1320
+ const currentOptions = this.getCurrentOptions();
1321
+ const index = currentOptions.findIndex((currentOption) => currentOption.value === option.value);
1322
+ const nextOptions = [...currentOptions];
1323
+ if (index === -1)
1324
+ nextOptions.push(option);
1325
+ else
1326
+ nextOptions[index] = option;
1327
+ if (this.selectListElement) {
1328
+ this.selectListElement.options = this.getListOptions(nextOptions);
1329
+ }
1330
+ else {
1331
+ this.pendingOptions = nextOptions;
1332
+ }
1333
+ this.syncDisplayValue(nextOptions);
1334
+ }
1335
+ getHostOptions() {
1336
+ return Array.from(this.el.childNodes)
1337
+ .map((node) => this.nodeToOption(node))
1338
+ .filter((option) => Boolean(option));
1339
+ }
1340
+ nodeToOption(node) {
1341
+ if (node.nodeType === Node.ELEMENT_NODE)
1342
+ return this.elementToOption(node);
1343
+ if (node.nodeType === Node.TEXT_NODE)
1344
+ return this.textNodeToOption(node);
1345
+ return null;
1346
+ }
1347
+ elementToOption(el) {
1348
+ if (el.tagName.toLowerCase() === 'br-select-option')
1349
+ return this.optionElementToData(el);
1350
+ const text = (el.textContent || '').trim();
1351
+ return text ? { value: text, label: text } : null;
1352
+ }
1353
+ textNodeToOption(textNode) {
1354
+ const text = (textNode.textContent || '').trim();
1355
+ return text ? { value: text, label: text } : null;
1356
+ }
1357
+ optionElementToData(el) {
1358
+ const rawValue = el.getAttribute('value') ?? el.value ?? '';
1359
+ const rawLabel = el.getAttribute('label') ?? el.label ?? '';
1360
+ let value = String(rawValue || '').trim();
1361
+ let label = String(rawLabel || '').trim();
1362
+ const inner = this.extractInnerTextFromOption(el);
1363
+ const content = (el.innerHTML || '').trim();
1364
+ const selected = el.hasAttribute('selected') || Boolean(el.selected);
1365
+ if (!value) {
1366
+ if (inner)
1367
+ value = inner.trim();
1368
+ }
1369
+ if (!label)
1370
+ label = inner?.trim() || value;
1371
+ return { value: value || '', label: label || undefined, selected, content: content || undefined };
1372
+ }
1373
+ extractInnerTextFromOption(el) {
1374
+ const fromSlot = this.getAssignedSlotText(el);
1375
+ if (fromSlot)
1376
+ return fromSlot;
1377
+ const fallback = (el.textContent || '').trim();
1378
+ return fallback || null;
1379
+ }
1380
+ getAssignedSlotText(el) {
1381
+ try {
1382
+ const innerSlot = el.shadowRoot?.querySelector('slot:not([name])');
1383
+ if (!innerSlot?.assignedNodes)
1384
+ return null;
1385
+ const text = innerSlot
1386
+ .assignedNodes({ flatten: true })
1387
+ .map((node) => (node.textContent || '').trim())
1388
+ .filter(Boolean)
1389
+ .join(' ')
1390
+ .trim();
1391
+ return text || null;
1392
+ }
1393
+ catch (_e) {
1394
+ return null;
1395
+ }
1396
+ }
1397
+ getOptionLabel(option) {
1398
+ return (option.label ?? option.value).trim();
1399
+ }
1400
+ getDisplayValue(options = this.getCurrentOptions()) {
1401
+ const selectedOptions = options.filter((option) => {
1402
+ if (!option.selected)
1403
+ return false;
1404
+ const optionLabel = this.getOptionLabel(option);
1405
+ return !this.isSelectAllLabel(optionLabel);
1406
+ });
1407
+ if (selectedOptions.length === 0)
1408
+ return '';
1409
+ if (!this.effectiveMultiple) {
1410
+ return this.getOptionLabel(selectedOptions[0]);
1411
+ }
1412
+ const [firstSelected, ...otherSelected] = selectedOptions;
1413
+ const firstLabel = this.getOptionLabel(firstSelected);
1414
+ if (otherSelected.length === 0)
1415
+ return firstLabel;
1416
+ return `${firstLabel} + (${otherSelected.length})`;
1417
+ }
1418
+ syncDisplayValue(options) {
1419
+ const resolvedOptions = this.getFormOptions(options ?? this.getCurrentOptions());
1420
+ this.displayValue = this.getDisplayValue(resolvedOptions);
1421
+ this.syncValue(resolvedOptions);
1422
+ }
1423
+ syncValue(options) {
1424
+ this.setSelectedValues(options
1425
+ .filter((option) => option.selected && !this.isSelectAllLabel(this.getOptionLabel(option)))
1426
+ .map((option) => option.value));
1427
+ const nextValue = this.getSerializedValue(options);
1428
+ this.syncFormState(options);
1429
+ if (this.value === nextValue)
1430
+ return;
1431
+ this.isApplyingExternalValue = true;
1432
+ this.value = nextValue;
1433
+ this.isApplyingExternalValue = false;
1434
+ if (!this.isValueChangeReady || this.suppressValueChange)
1435
+ return;
1436
+ this.valueChange.emit(Array.isArray(nextValue) ? nextValue.join(',') : nextValue);
1437
+ }
1438
+ getSerializedValue(options) {
1439
+ const selectedValues = options
1440
+ .filter((option) => {
1441
+ if (!option.selected)
1442
+ return false;
1443
+ const optionLabel = this.getOptionLabel(option);
1444
+ return !this.isSelectAllLabel(optionLabel);
1445
+ })
1446
+ .map((option) => option.value);
1447
+ if (this.effectiveMultiple)
1448
+ return selectedValues;
1449
+ if (selectedValues.length === 0)
1450
+ return '';
1451
+ return selectedValues[0];
1452
+ }
1453
+ getOptionsProp() {
1454
+ if (Array.isArray(this.options))
1455
+ return this.options;
1456
+ try {
1457
+ const parsed = JSON.parse(this.options || '[]');
1458
+ return Array.isArray(parsed) ? parsed : [];
1459
+ }
1460
+ catch {
1461
+ return [];
1462
+ }
1463
+ }
1464
+ applySelectedValue(value) {
1465
+ const currentOptions = this.getCurrentOptions();
1466
+ const requestedValues = this.valueFromPublicValue(value) ?? [];
1467
+ this.setSelectedValues(requestedValues);
1468
+ const options = currentOptions.map((option) => ({
1469
+ ...option,
1470
+ selected: requestedValues.includes(option.value),
1471
+ }));
1472
+ this.isApplyingExternalValue = true;
1473
+ if (this.selectListElement)
1474
+ this.selectListElement.options = this.getListOptions(options);
1475
+ else
1476
+ this.pendingOptions = options;
1477
+ this.reflectRenderedListSelection(requestedValues);
1478
+ this.value = value;
1479
+ this.isApplyingExternalValue = false;
1480
+ this.remoteSelectedOptions.clear();
1481
+ this.rememberRemoteSelections(options);
1482
+ if (this.searchMode === 'remote') {
1483
+ const selectedValues = new Set(Array.isArray(value) ? value : [value ?? '']);
1484
+ selectedValues.forEach((selectedValue) => {
1485
+ if (selectedValue && !currentOptions.some((option) => option.value === selectedValue)) {
1486
+ this.remoteSelectedOptions.set(selectedValue, {
1487
+ value: selectedValue,
1488
+ label: selectedValue,
1489
+ selected: true,
1490
+ });
1491
+ }
1492
+ });
1493
+ this.syncDisplayValue(this.getCurrentOptions());
1494
+ return;
1495
+ }
1496
+ this.syncDisplayValue(options);
1497
+ }
1498
+ applyRemoteSelection(options) {
1499
+ this.rememberRemoteSelections(this.getCurrentOptions());
1500
+ const selectedValues = new Set(this.selectedValues);
1501
+ const nextOptions = options.map((option) => ({
1502
+ ...option,
1503
+ selected: selectedValues.has(option.value) || Boolean(option.selected),
1504
+ }));
1505
+ this.rememberRemoteSelections(nextOptions);
1506
+ return nextOptions;
1507
+ }
1508
+ rememberRemoteSelections(options) {
1509
+ if (this.searchMode !== 'remote')
1510
+ return;
1511
+ const visibleValues = new Set(options.map((option) => option.value));
1512
+ options.forEach((option) => {
1513
+ if (option.selected)
1514
+ this.remoteSelectedOptions.set(option.value, { ...option, selected: true });
1515
+ else if (visibleValues.has(option.value))
1516
+ this.remoteSelectedOptions.delete(option.value);
1517
+ });
1518
+ }
1519
+ getFormOptions(options) {
1520
+ if (this.searchMode !== 'remote')
1521
+ return options;
1522
+ const result = options.map((option) => ({ ...option }));
1523
+ const existingValues = new Set(result.map((option) => option.value));
1524
+ this.remoteSelectedOptions.forEach((option, value) => {
1525
+ if (!existingValues.has(value))
1526
+ result.push({ ...option, selected: true });
1527
+ });
1528
+ return result;
1529
+ }
1530
+ syncFormState(options = this.getCurrentOptions()) {
1531
+ const selected = this.getFormOptions(options).filter((option) => option.selected && !this.isSelectAllLabel(this.getOptionLabel(option)));
1532
+ const selectedValues = selected.map((option) => option.value);
1533
+ const formValue = this.effectiveMultiple ? JSON.stringify(selectedValues) : (selectedValues[0] ?? null);
1534
+ validator.safeSetFormValue(this.elementInternals, formValue);
1535
+ this.syncNativeSelectSelection(selectedValues);
1536
+ this.updateValidity(selectedValues.length);
1537
+ }
1538
+ syncNativeSelectSelection(values = this.getSelectedValues()) {
1539
+ const nativeSelect = this.getNativeSelect();
1540
+ if (!nativeSelect)
1541
+ return;
1542
+ const selectedValues = new Set(values);
1543
+ Array.from(nativeSelect.options).forEach((option) => {
1544
+ option.selected = option.value === '' ? selectedValues.size === 0 : selectedValues.has(option.value);
1545
+ });
1546
+ }
1547
+ getSelectedValues() {
1548
+ return [...this.selectedValues];
1549
+ }
1550
+ updateValidity(selectedCount = this.getSelectedValues().length) {
1551
+ const nativeSelect = this.getNativeSelect();
1552
+ if (!nativeSelect)
1553
+ return;
1554
+ const selectionMessage = this.effectiveMultiple && this.minSelections > 0 && selectedCount < this.minSelections
1555
+ ? `Selecione pelo menos ${this.minSelections} opções.`
1556
+ : this.effectiveMultiple && this.maxSelections > 0 && selectedCount > this.maxSelections
1557
+ ? `Selecione no máximo ${this.maxSelections} opções.`
1558
+ : '';
1559
+ nativeSelect.setCustomValidity(this.customValidationMessage || this.validatorMessage || selectionMessage);
1560
+ validator.syncNativeFormValidity(this.elementInternals, nativeSelect);
1561
+ }
1562
+ getNativeSelect() {
1563
+ return (this.el.shadowRoot?.querySelector('select[part="hidden-select"]') ??
1564
+ this.nativeSelect);
1565
+ }
1566
+ resolveValidator() {
1567
+ return validator.resolveFormValidator(this.validator);
1568
+ }
1569
+ getRenderedDisplayValue() {
1570
+ return this.displayValue ?? this.getDisplayValue();
1571
+ }
1572
+ /**
1573
+ * Retorna o id da opção atualmente ativa para consumo do `aria-activedescendant`.
1574
+ *
1575
+ * @returns O id da opção ativa ou `undefined` quando a lista está fechada.
1576
+ */
1577
+ getActiveDescendant() {
1578
+ if (!this.effectiveOpen || this.activeOptionIndex < 0)
1579
+ return undefined;
1580
+ return `${this.listboxId}-option-${this.activeOptionIndex}`;
1581
+ }
1582
+ toggleOpenFromPointer() {
1583
+ if (!this.effectiveOpen) {
1584
+ this.shouldRestoreSelectedOptionOnOpen = true;
1585
+ }
1586
+ void this.toggleOpen();
1587
+ }
1588
+ async openListAndRestorePointerFocus() {
1589
+ await this.selectListElement?.open();
1590
+ if (!this.shouldRestoreSelectedOptionOnOpen)
1591
+ return;
1592
+ this.shouldRestoreSelectedOptionOnOpen = false;
1593
+ await this.scrollFirstSelectedOptionToTop();
1594
+ }
1595
+ async scrollFirstSelectedOptionToTop() {
1596
+ const options = this.getNavigableOptions();
1597
+ const firstSelectedIndex = options.findIndex((option) => !this.isSelectAllLabel(this.getOptionLabel(option)) && Boolean(option.selected));
1598
+ if (firstSelectedIndex < 0)
1599
+ return;
1600
+ const didScroll = await this.getSelectListController()?.scrollFirstSelectedOptionToTop?.();
1601
+ if (didScroll) {
1602
+ this.activeOptionIndex = firstSelectedIndex;
1603
+ }
1604
+ }
1605
+ async openAndFocusBoundary(fromInput, direction) {
1606
+ if (!this.effectiveOpen) {
1607
+ await this.show();
1608
+ await this.focusInitialOption(direction);
1609
+ return;
1610
+ }
1611
+ if (fromInput && this.activeOptionIndex < 0) {
1612
+ await this.focusInitialOption(direction);
1613
+ return;
1614
+ }
1615
+ await this.moveActiveOption(direction);
1616
+ }
1617
+ /**
1618
+ * Define qual opção deve receber foco ao abrir o select pelo teclado.
1619
+ *
1620
+ * @param direction Direção inicial da navegação. `1` abre do topo para baixo e `-1` do fim para cima.
1621
+ */
1622
+ async focusInitialOption(direction) {
1623
+ const options = this.getNavigableOptions();
1624
+ if (options.length === 0)
1625
+ return;
1626
+ const selectedIndex = options.findIndex((option) => Boolean(option.selected));
1627
+ const fallbackIndex = direction > 0 ? 0 : options.length - 1;
1628
+ const initialIndex = selectedIndex >= 0 ? selectedIndex : fallbackIndex;
1629
+ await this.focusOptionByIndex(initialIndex);
1630
+ }
1631
+ async moveActiveOption(step) {
1632
+ const options = this.getNavigableOptions();
1633
+ if (options.length === 0)
1634
+ return;
1635
+ const baseIndex = this.getCurrentActiveIndex();
1636
+ const nextIndex = Math.min(options.length - 1, Math.max(0, baseIndex + step));
1637
+ await this.focusOptionByIndex(nextIndex);
1638
+ }
1639
+ /**
1640
+ * Resolve o índice ativo atual a partir do estado local ou da opção já selecionada.
1641
+ *
1642
+ * @returns O índice que deve servir como base para a próxima navegação por teclado.
1643
+ */
1644
+ getCurrentActiveIndex() {
1645
+ if (this.activeOptionIndex >= 0)
1646
+ return this.activeOptionIndex;
1647
+ const options = this.getNavigableOptions();
1648
+ const selectedIndex = options.findIndex((option) => Boolean(option.selected));
1649
+ return selectedIndex >= 0 ? selectedIndex : 0;
1650
+ }
1651
+ /**
1652
+ * Encaminha o foco lógico para uma opção específica da lista interna.
1653
+ *
1654
+ * @param index Índice da opção que deve receber foco.
1655
+ */
1656
+ async focusOptionByIndex(index) {
1657
+ const didFocus = await this.getSelectListController()?.focusOption?.(index);
1658
+ if (didFocus) {
1659
+ this.activeOptionIndex = index;
1660
+ }
1661
+ }
1662
+ /**
1663
+ * Seleciona a opção atualmente ativa sem duplicar a lógica de seleção da lista.
1664
+ *
1665
+ * @remarks
1666
+ * Em modo simples, a opção ativa é sempre marcada. Em modo múltiplo, a seleção é alternada.
1667
+ */
1668
+ async selectFocusedOption() {
1669
+ const options = this.getNavigableOptions();
1670
+ if (options.length === 0)
1671
+ return;
1672
+ const index = this.getCurrentActiveIndex();
1673
+ const option = options[index];
1674
+ const nextSelected = this.effectiveMultiple ? !option?.selected : true;
1675
+ if (this.effectiveMultiple && index === 0 && option && !this.isSelectAllLabel(this.getOptionLabel(option))) {
1676
+ this.handleSelectOptionStateChange(new CustomEvent('brSelectOptionStateChange', {
1677
+ detail: {
1678
+ value: '__select_all__',
1679
+ label: this.selectAllLabel,
1680
+ selected: true,
1681
+ disabled: false,
1682
+ },
1683
+ }));
1684
+ return;
1685
+ }
1686
+ const didSelect = await this.getSelectListController()?.setOptionSelected?.(index, nextSelected);
1687
+ if (didSelect) {
1688
+ this.activeOptionIndex = index;
1689
+ }
1690
+ }
1691
+ syncActiveOptionIndex(detail) {
1692
+ const options = this.getNavigableOptions();
1693
+ const optionIndex = options.findIndex((option) => option.value === detail.value);
1694
+ if (optionIndex >= 0) {
1695
+ this.activeOptionIndex = optionIndex;
1696
+ }
1697
+ }
1698
+ /**
1699
+ * Reflete no slot a seleção que foi consolidada pela lista interna.
1700
+ *
1701
+ * @param detail Estado emitido pela opção que disparou a mudança.
1702
+ * @remarks
1703
+ * Essa sincronização mantém as props/atributos das opções declaradas pelo consumidor em
1704
+ * conformidade com o estado calculado internamente, inclusive no caso do "selecionar todos".
1705
+ */
1706
+ syncSlottedOptionSelection(values = this.selectedValues) {
1707
+ const slottedOptions = Array.from(this.el.children).filter((el) => el.tagName.toLowerCase() === 'br-select-option');
1708
+ if (slottedOptions.length === 0)
1709
+ return;
1710
+ const selectedValues = new Set(values);
1711
+ slottedOptions.forEach((option) => {
1712
+ const resolved = this.optionElementToData(option).value;
1713
+ option.selected = selectedValues.has(resolved);
1714
+ option.indeterminate = false;
1715
+ if (option.selected)
1716
+ option.setAttribute('selected', '');
1717
+ else
1718
+ option.removeAttribute('selected');
1719
+ });
1720
+ if (!this.effectiveMultiple)
1721
+ return;
1722
+ const selectableOptions = slottedOptions.filter((option) => {
1723
+ const optionLabel = (option.label ?? option.value).trim();
1724
+ return !this.isSelectAllLabel(optionLabel);
1725
+ });
1726
+ const allSelected = selectableOptions.length > 0 && selectableOptions.every((option) => Boolean(option.selected));
1727
+ const anySelected = selectableOptions.some((option) => Boolean(option.selected));
1728
+ slottedOptions.forEach((option) => {
1729
+ const optionLabel = (option.label ?? option.value).trim();
1730
+ if (!this.isSelectAllLabel(optionLabel))
1731
+ return;
1732
+ option.indeterminate = anySelected && !allSelected;
1733
+ option.selected = allSelected;
1734
+ this.normalizeSelectAllState(option);
1735
+ if (option.selected)
1736
+ option.setAttribute('selected', '');
1737
+ else
1738
+ option.removeAttribute('selected');
1739
+ });
1740
+ }
1741
+ reflectRenderedListSelection(values) {
1742
+ const renderedOptions = this.selectListElement?.shadowRoot?.querySelectorAll('br-select-option');
1743
+ if (!renderedOptions)
1744
+ return;
1745
+ const selectedValues = new Set(values);
1746
+ renderedOptions.forEach((option) => {
1747
+ if (this.isSelectAllLabel(option.label))
1748
+ return;
1749
+ option.selected = selectedValues.has(option.value);
1750
+ });
1751
+ }
1752
+ isSelectAllLabel(label) {
1753
+ return label === this.selectAllLabel || label === this.unselectAllLabel;
1754
+ }
1755
+ getSelectAllLabel(selected, indeterminate) {
1756
+ return selected && !indeterminate ? this.unselectAllLabel : this.selectAllLabel;
1757
+ }
1758
+ normalizeSelectAllState(option) {
1759
+ const selected = Boolean(option.selected) && !option.indeterminate;
1760
+ const indeterminate = Boolean(option.indeterminate);
1761
+ option.selected = selected;
1762
+ option.indeterminate = indeterminate;
1763
+ option.label = this.getSelectAllLabel(selected, indeterminate);
1764
+ }
1765
+ handleOutsideClick(ev) {
1766
+ if (!this.effectiveOpen)
1767
+ return;
1768
+ const clickPath = this.getEventPath(ev);
1769
+ const isClickInsideSelect = clickPath.includes(this.el);
1770
+ if (isClickInsideSelect)
1771
+ return;
1772
+ this.close();
1773
+ }
1774
+ emitStateChange(option) {
1775
+ const payload = this.getStateChangeDetail(option);
1776
+ const nextStateKey = JSON.stringify(payload);
1777
+ if (!this.isStateChangeReady) {
1778
+ this.lastEmittedStateKey = nextStateKey;
1779
+ return;
1780
+ }
1781
+ if (this.lastEmittedStateKey === nextStateKey)
1782
+ return;
1783
+ this.lastEmittedStateKey = nextStateKey;
1784
+ this.brSelectStateChange.emit(payload);
1785
+ }
1786
+ getStateChangeDetail(optionChange) {
1787
+ const payload = {
1788
+ isOpen: this.effectiveOpen,
1789
+ };
1790
+ const currentOptions = this.getFormOptions(this.getCurrentOptions());
1791
+ if (this.effectiveMultiple) {
1792
+ payload.options = currentOptions
1793
+ .filter((option) => !this.isSelectAllLabel((option.label ?? option.value).trim()))
1794
+ .map((option) => this.normalizeOptionForOutput(option));
1795
+ return payload;
1796
+ }
1797
+ const selectedOption = currentOptions.find((option) => Boolean(option.selected));
1798
+ if (selectedOption) {
1799
+ payload.option = this.normalizeOptionForOutput(selectedOption);
1800
+ return payload;
1801
+ }
1802
+ if (optionChange?.value) {
1803
+ const { disabled: _disabled, ...normalizedOption } = optionChange;
1804
+ payload.option = {
1805
+ ...normalizedOption,
1806
+ label: optionChange.label ?? optionChange.value,
1807
+ };
1808
+ }
1809
+ return payload;
1810
+ }
1811
+ normalizeOptionForOutput(option) {
1812
+ const optionLabel = (option.label ?? option.value).trim();
1813
+ const isSelectAll = this.isSelectAllLabel(optionLabel);
1814
+ const { disabled: _disabled, ...optionWithoutDisabled } = option;
1815
+ if (isSelectAll) {
1816
+ return optionWithoutDisabled;
1817
+ }
1818
+ const { indeterminate, ...normalized } = optionWithoutDisabled;
1819
+ return normalized;
1820
+ }
1821
+ getStateChangeKey() {
1822
+ return JSON.stringify(this.getStateChangeDetail());
1823
+ }
1824
+ /**
1825
+ * Obtém o snapshot atual das opções respeitando a fonte mais atual disponível.
1826
+ *
1827
+ * @returns A coleção de opções normalizadas para leitura do estado público.
1828
+ * @remarks
1829
+ * A precedência é: lista interna, opções pendentes, conteúdo do slot e, por último,
1830
+ * os filhos atuais do host.
1831
+ */
1832
+ // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: prioriza a precedência entre slot, lista e opções remotas.
1833
+ getCurrentOptions() {
1834
+ // As opções projetadas são a fonte canônica quando não há coleção
1835
+ // imperativa: a lista virtualizada pode manter um snapshot enquanto o
1836
+ // consumidor altera `selected` diretamente no slot.
1837
+ if (!this.hasImperativeOptions && this.slotElement) {
1838
+ const nodes = this.slotElement.assignedNodes({ flatten: true }) ?? [];
1839
+ const slotOptions = nodes
1840
+ .map((node) => this.nodeToOption(node))
1841
+ .filter((option) => Boolean(option));
1842
+ if (slotOptions.length > 0) {
1843
+ const normalizedSlotOptions = this.applyCanonicalSelection(slotOptions);
1844
+ if (this.effectiveMultiple &&
1845
+ !normalizedSlotOptions.some((option) => this.isSelectAllLabel(this.getOptionLabel(option)))) {
1846
+ normalizedSlotOptions.unshift({
1847
+ value: '__select_all__',
1848
+ label: this.selectAllLabel,
1849
+ selected: false,
1850
+ indeterminate: false,
1851
+ });
1852
+ }
1853
+ return normalizedSlotOptions;
1854
+ }
1855
+ }
1856
+ const listOptions = this.getSelectListController()?.options;
1857
+ if (Array.isArray(listOptions) && listOptions.length > 0) {
1858
+ const normalizedListOptions = listOptions.map((option) => ({ ...option }));
1859
+ const hasRealOptions = normalizedListOptions.some((option) => !this.isSelectAllLabel(this.getOptionLabel(option)));
1860
+ if (hasRealOptions) {
1861
+ if (this.effectiveMultiple &&
1862
+ !normalizedListOptions.some((option) => this.isSelectAllLabel(this.getOptionLabel(option)))) {
1863
+ normalizedListOptions.unshift({
1864
+ value: '__select_all__',
1865
+ label: this.selectAllLabel,
1866
+ selected: false,
1867
+ indeterminate: false,
1868
+ });
1869
+ }
1870
+ return this.applyCanonicalSelection(normalizedListOptions);
1871
+ }
1872
+ }
1873
+ if (this.pendingOptions) {
1874
+ return this.applyCanonicalSelection(this.pendingOptions);
1875
+ }
1876
+ const hostOptions = this.applyCanonicalSelection(this.getHostOptions());
1877
+ if (this.effectiveMultiple && hostOptions.length > 0) {
1878
+ return [
1879
+ {
1880
+ value: '__select_all__',
1881
+ label: this.selectAllLabel,
1882
+ selected: false,
1883
+ indeterminate: false,
1884
+ },
1885
+ ...hostOptions,
1886
+ ];
1887
+ }
1888
+ return hostOptions;
1889
+ }
1890
+ normalizeSearchText(value) {
1891
+ return value
1892
+ .normalize('NFD')
1893
+ .replace(/[\u0300-\u036f]/g, '')
1894
+ .toLocaleLowerCase('pt-BR')
1895
+ .trim();
1896
+ }
1897
+ getNavigableOptions() {
1898
+ const options = this.getCurrentOptions();
1899
+ const normalizedTerm = this.normalizeSearchText(this.searchTerm);
1900
+ if (!this.filterable || this.searchMode === 'remote' || !normalizedTerm)
1901
+ return options;
1902
+ return options.filter((option) => {
1903
+ if (this.isSelectAllLabel(this.getOptionLabel(option)))
1904
+ return this.effectiveMultiple;
1905
+ const label = this.normalizeSearchText(this.getOptionLabel(option));
1906
+ const value = this.normalizeSearchText(option.value);
1907
+ return label.includes(normalizedTerm) || value.includes(normalizedTerm);
1908
+ });
1909
+ }
1910
+ clearSearch() {
1911
+ if (!this.searchTerm)
1912
+ return;
1913
+ this.searchTerm = '';
1914
+ this.activeOptionIndex = -1;
1915
+ void this.getSelectListController()?.setSearchTerm?.('');
1916
+ }
1917
+ getEventPath(ev) {
1918
+ return ev.composedPath ? ev.composedPath() : (ev.path ?? []);
1919
+ }
1920
+ getSelectListController() {
1921
+ return this.selectListElement;
1922
+ }
1923
+ getCssClassMap() {
1924
+ return {
1925
+ 'br-select': true,
1926
+ };
1927
+ }
1928
+ getAccessibleLabel() {
1929
+ return this.label?.trim() || this.placeholder?.trim() || 'Selecao';
1930
+ }
1931
+ setSelectionMode(isMultiple) {
1932
+ this.selectListElement?.setMultiple(isMultiple);
1933
+ }
1934
+ renderSelectInput() {
1935
+ return (index.h("br-select-input", { part: "input", exportparts: "container:input-container, input:input-field, label:input-label, group:input-group, icon:input-icon, action:input-action, action-button:input-action-button", ref: (el) => (this.selectInputElement = el), "aria-activedescendant": this.getActiveDescendant(), "aria-controls": this.listboxId, "aria-disabled": String(this.isDisabled()), "aria-expanded": String(this.effectiveOpen), "aria-haspopup": "listbox", "aria-label": this.getAccessibleLabel(), "aria-required": String(this.required), borderless: this.borderless, "is-inline": this.effectiveInline, "is-open": this.effectiveOpen, label: this.label, name: this.name, placeholder: this.placeholder, required: this.required, disabled: this.isDisabled(), filterable: this.filterable, showSearchIcon: this.showSearchIcon, autocomplete: this.autocomplete, "input-width": this.inputWidth, role: "combobox", value: this.filterable && this.effectiveOpen ? this.searchTerm : this.getRenderedDisplayValue() }));
1936
+ }
1937
+ renderSelectList() {
1938
+ return (index.h("br-select-list", { part: "list", options: this.getCurrentOptions(), exportparts: "list, option, checkbox, select-all, empty-option, option-checkbox, option-radio", "active-option-index": this.activeOptionIndex, "aria-label": this.getAccessibleLabel(), "aria-multiselectable": this.effectiveMultiple ? 'true' : 'false', id: this.listboxId, "visible-items": this.visibleItems, "item-height": this.itemHeight, overscan: this.overscan, "search-term": this.filterable && this.searchMode === 'local' ? this.searchTerm : '', role: "listbox", "select-all-label": this.selectAllLabel, "unselect-all-label": this.unselectAllLabel, ref: (el) => {
1939
+ this.selectListElement = el;
1940
+ this.selectListElement.loading = this.loading;
1941
+ this.setSelectionMode(this.effectiveMultiple);
1942
+ void this.getSelectListController()?.setSearchTerm?.(this.filterable ? this.searchTerm : '');
1943
+ } }, index.h("slot", null), index.h("slot", { name: "loading", slot: "loading" })));
1944
+ }
1945
+ renderHiddenSelect() {
1946
+ const options = this.getFormOptions(this.getCurrentOptions()).filter((option) => !this.isSelectAllLabel(this.getOptionLabel(option)));
1947
+ const hasSelection = options.some((option) => option.selected);
1948
+ return (index.h("select", { ref: (el) => (this.nativeSelect = el), part: "hidden-select", name: this.name, autocomplete: this.autocomplete, multiple: this.effectiveMultiple, required: this.required, disabled: this.isDisabled(), tabIndex: -1, "aria-hidden": "true", style: {
1949
+ position: 'absolute',
1950
+ width: '1px',
1951
+ height: '1px',
1952
+ padding: '0',
1953
+ margin: '-1px',
1954
+ overflow: 'hidden',
1955
+ clip: 'rect(0, 0, 0, 0)',
1956
+ whiteSpace: 'nowrap',
1957
+ border: '0',
1958
+ }, onChange: (event) => event.preventDefault() }, index.h("option", { value: "", selected: !hasSelection }), options.map((option) => (index.h("option", { key: option.value, value: option.value, selected: option.selected, disabled: option.disabled })))));
1959
+ }
1960
+ render() {
1961
+ return (index.h(index.Host, { key: '9eab35d12b8b0fff68f16bb1e1ccc1209ea09687', "aria-busy": this.isValidating || this.loading ? 'true' : null }, index.h("div", { key: '68747830dd29319dc044caa056ffc13fea834bea', class: this.getCssClassMap(), part: "container" }, this.renderSelectInput(), this.renderSelectList(), index.h("div", { key: '825c7934402930816fba48f02d161d936c8a4e3e', part: "feedback", hidden: !this.hasFeedbackSlot && !this.validatorMessage }, index.h("slot", { key: '10b2ee676c54b913b39b6523d3ebce462ed031e3', name: "feedback", onSlotchange: (event) => (this.hasFeedbackSlot = slot.hasAssignedSlotContent(event.currentTarget)) }, this.validatorMessage)), index.h("div", { key: '571a5a5e89ae14a91f8c88c0b1fb5e7341adb094', part: "validation-loading", hidden: !this.hasValidationLoadingSlot || !this.isValidating }, index.h("slot", { key: 'e9647f09ce303d15a564707e1d3a060280de10a1', name: "validation-loading" })), this.renderHiddenSelect())));
1962
+ }
1963
+ static get formAssociated() { return true; }
1964
+ get el() { return index.getElement(this); }
1965
+ static get watchers() { return {
1966
+ "disabled": [{
1967
+ "handleDisabledChange": 0
1968
+ }],
1969
+ "isOpen": [{
1970
+ "handleIsOpenChange": 0
1971
+ }],
1972
+ "filterable": [{
1973
+ "handleFilterableChange": 0
1974
+ }],
1975
+ "loading": [{
1976
+ "handleLoadingChange": 0
1977
+ }],
1978
+ "isMultiple": [{
1979
+ "handleIsMultipleChange": 0
1980
+ }],
1981
+ "multiple": [{
1982
+ "handleMultipleChange": 0
1983
+ }],
1984
+ "open": [{
1985
+ "handleOpenChange": 0
1986
+ }],
1987
+ "value": [{
1988
+ "handleExternalValueChange": 0
1989
+ }],
1990
+ "options": [{
1991
+ "handleOptionsChange": 0
1992
+ }]
1993
+ }; }
1994
+ };
1995
+ Select.SELECT_ALL_LABEL = 'Selecionar todos';
1996
+ Select.DESELECT_ALL_LABEL = 'Desselecionar todos';
1997
+ Select.style = selectCss();
1998
+
1999
+ exports.br_dropdown = Dropdown;
2000
+ exports.br_select = Select;