@govbr-ds/webcomponents 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (658) hide show
  1. package/README.md +75 -24
  2. package/cem/custom-elements.json +1858 -1712
  3. package/cem/webcomponents.html-custom-data.json +73 -67
  4. package/dist/cjs/br-avatar.cjs.entry.js +2 -2
  5. package/dist/cjs/br-breadcrumb-item.cjs.entry.js +1 -1
  6. package/dist/cjs/br-breadcrumb.cjs.entry.js +2 -2
  7. package/dist/cjs/br-button_2.cjs.entry.js +10 -5
  8. package/dist/cjs/br-card.cjs.entry.js +2 -2
  9. package/dist/cjs/br-carousel-page.cjs.entry.js +2 -2
  10. package/dist/cjs/br-carousel.cjs.entry.js +2 -2
  11. package/dist/cjs/br-checkbox-group.cjs.entry.js +2 -2
  12. package/dist/cjs/br-checkbox.cjs.entry.js +3 -3
  13. package/dist/cjs/br-checkgroup.cjs.entry.js +1 -1
  14. package/dist/cjs/br-collapse_2.cjs.entry.js +11 -7
  15. package/dist/cjs/br-cookiebar-cookie.cjs.entry.js +2 -2
  16. package/dist/cjs/br-cookiebar-group.cjs.entry.js +2 -2
  17. package/dist/cjs/br-cookiebar-header.cjs.entry.js +2 -2
  18. package/dist/cjs/br-cookiebar-link.cjs.entry.js +2 -2
  19. package/dist/cjs/br-cookiebar-note-group.cjs.entry.js +2 -2
  20. package/dist/cjs/br-cookiebar-note.cjs.entry.js +2 -2
  21. package/dist/cjs/br-cookiebar.cjs.entry.js +2 -2
  22. package/dist/cjs/br-crumb.cjs.entry.js +1 -1
  23. package/dist/cjs/br-date-picker_3.cjs.entry.js +869 -517
  24. package/dist/cjs/br-datetime-picker.cjs.entry.js +1347 -311
  25. package/dist/cjs/br-divider.cjs.entry.js +2 -2
  26. package/dist/cjs/br-dropdown_2.cjs.entry.js +282 -165
  27. package/dist/cjs/br-footer-category.cjs.entry.js +2 -2
  28. package/dist/cjs/br-footer-item.cjs.entry.js +2 -2
  29. package/dist/cjs/br-footer-legal.cjs.entry.js +2 -2
  30. package/dist/cjs/br-footer-logo.cjs.entry.js +2 -2
  31. package/dist/cjs/br-footer-social.cjs.entry.js +2 -2
  32. package/dist/cjs/br-footer.cjs.entry.js +2 -2
  33. package/dist/cjs/br-header-function.cjs.entry.js +2 -2
  34. package/dist/cjs/br-header-link.cjs.entry.js +2 -2
  35. package/dist/cjs/br-header-list.cjs.entry.js +2 -2
  36. package/dist/cjs/br-header-logo.cjs.entry.js +2 -2
  37. package/dist/cjs/br-header.cjs.entry.js +27 -23
  38. package/dist/cjs/br-icon.cjs.entry.js +4 -33
  39. package/dist/cjs/br-input.cjs.entry.js +31 -6
  40. package/dist/cjs/br-item.cjs.entry.js +5 -4
  41. package/dist/cjs/br-link.cjs.entry.js +2 -2
  42. package/dist/cjs/br-loading.cjs.entry.js +2 -2
  43. package/dist/cjs/br-magic-button.cjs.entry.js +21 -8
  44. package/dist/cjs/br-menu-group.cjs.entry.js +2 -2
  45. package/dist/cjs/br-menu-header.cjs.entry.js +2 -2
  46. package/dist/cjs/br-menu-info.cjs.entry.js +2 -2
  47. package/dist/cjs/br-menu-item.cjs.entry.js +2 -2
  48. package/dist/cjs/br-menu-link.cjs.entry.js +2 -2
  49. package/dist/cjs/br-menu-list.cjs.entry.js +2 -2
  50. package/dist/cjs/br-menu-logo.cjs.entry.js +2 -2
  51. package/dist/cjs/br-menu-social.cjs.entry.js +2 -2
  52. package/dist/cjs/br-menu.cjs.entry.js +2 -2
  53. package/dist/cjs/br-modal.cjs.entry.js +20 -4
  54. package/dist/cjs/br-notification-body.cjs.entry.js +2 -2
  55. package/dist/cjs/br-notification-header.cjs.entry.js +2 -2
  56. package/dist/cjs/br-notification-item.cjs.entry.js +2 -2
  57. package/dist/cjs/br-notification.cjs.entry.js +2 -2
  58. package/dist/cjs/br-pagination.cjs.entry.js +4 -4
  59. package/dist/cjs/br-radio-group.cjs.entry.js +3 -3
  60. package/dist/cjs/br-radio.cjs.entry.js +3 -3
  61. package/dist/cjs/br-scrim.cjs.entry.js +2 -2
  62. package/dist/cjs/br-select-input_3.cjs.entry.js +286 -100
  63. package/dist/cjs/br-sign-in.cjs.entry.js +8 -4
  64. package/dist/cjs/br-skip-link-item.cjs.entry.js +1 -1
  65. package/dist/cjs/br-skip-link.cjs.entry.js +2 -2
  66. package/dist/cjs/br-skiplink-item.cjs.entry.js +2 -2
  67. package/dist/cjs/br-slider.cjs.entry.js +3 -3
  68. package/dist/cjs/br-step_2.cjs.entry.js +3 -3
  69. package/dist/cjs/br-switch.cjs.entry.js +3 -3
  70. package/dist/cjs/br-tab-item.cjs.entry.js +3 -3
  71. package/dist/cjs/br-tab.cjs.entry.js +38 -13
  72. package/dist/cjs/br-table-body.cjs.entry.js +2 -2
  73. package/dist/cjs/br-table-cell.cjs.entry.js +2 -2
  74. package/dist/cjs/br-table-header-cell.cjs.entry.js +2 -2
  75. package/dist/cjs/br-table-header.cjs.entry.js +2 -2
  76. package/dist/cjs/br-table-row.cjs.entry.js +2 -2
  77. package/dist/cjs/br-table.cjs.entry.js +2 -2
  78. package/dist/cjs/br-tag.cjs.entry.js +3 -3
  79. package/dist/cjs/br-textarea.cjs.entry.js +3 -3
  80. package/dist/cjs/br-tooltip.cjs.entry.js +2 -2
  81. package/dist/cjs/br-upload.cjs.entry.js +7 -23
  82. package/dist/cjs/br-wizard-panel.cjs.entry.js +2 -2
  83. package/dist/cjs/br-wizard.cjs.entry.js +2 -2
  84. package/dist/cjs/{datetime-picker-constants-B5pWeOn1.js → datetime-picker-constants-CCeI5iW7.js} +20 -5
  85. package/dist/cjs/format-bytes-Cs8SH2w0.js +24 -0
  86. package/dist/cjs/icon.utils-DF6kMskA.js +46 -0
  87. package/dist/cjs/{index-CGgZBuyy.js → index-Bc30P_6z.js} +33 -27
  88. package/dist/cjs/{index-C92n55ch.js → index-C-IpVFDH.js} +13 -13
  89. package/dist/cjs/index.cjs.js +2 -2
  90. package/dist/cjs/{datetime-picker-props-validation-DmNKSXsy.js → isValid-CduHZTFc.js} +1 -483
  91. package/dist/cjs/loader.cjs.js +2 -2
  92. package/dist/cjs/select.utils-C38f5Kea.js +62 -0
  93. package/dist/cjs/{validator-CTCajtT9.js → validator-GkkueMOx.js} +18 -0
  94. package/dist/cjs/webcomponents.cjs.js +3 -3
  95. package/dist/collection/collection-manifest.json +1 -1
  96. package/dist/collection/components/avatar/avatar.css +1 -1
  97. package/dist/collection/components/breadcrumb/breadcrumb.css +1 -1
  98. package/dist/collection/components/button/button.css +1 -1
  99. package/dist/collection/components/button/button.js +8 -3
  100. package/dist/collection/components/card/card.css +1 -1
  101. package/dist/collection/components/carousel/carousel-page/carousel-page.css +1 -1
  102. package/dist/collection/components/carousel/carousel.css +1 -1
  103. package/dist/collection/components/checkbox/checkbox.css +1 -1
  104. package/dist/collection/components/checkbox-group/checkbox-group.css +1 -1
  105. package/dist/collection/components/collapse/collapse.css +1 -1
  106. package/dist/collection/components/collapse/collapse.js +12 -6
  107. package/dist/collection/components/cookiebar/cookiebar-cookie/cookiebar-cookie.css +1 -1
  108. package/dist/collection/components/cookiebar/cookiebar-group/cookiebar-group.css +1 -1
  109. package/dist/collection/components/cookiebar/cookiebar-header/cookiebar-header.css +1 -1
  110. package/dist/collection/components/cookiebar/cookiebar-link/cookiebar-link.css +1 -1
  111. package/dist/collection/components/cookiebar/cookiebar-note/cookiebar-note.css +1 -1
  112. package/dist/collection/components/cookiebar/cookiebar-note-group/cookiebar-note-group.css +1 -1
  113. package/dist/collection/components/cookiebar/cookiebar.css +1 -1
  114. package/dist/collection/components/datetime-picker/date-picker/date-picker-locale.js +12 -12
  115. package/dist/collection/components/datetime-picker/date-picker/date-picker-props-validation.js +14 -13
  116. package/dist/collection/components/datetime-picker/date-picker/date-picker.css +1 -1
  117. package/dist/collection/components/datetime-picker/date-picker/date-picker.js +384 -280
  118. package/dist/collection/components/datetime-picker/datetime-input/datetime-input-constants.js +59 -0
  119. package/dist/collection/components/datetime-picker/datetime-input/datetime-input-props-validation.js +19 -15
  120. package/dist/collection/components/datetime-picker/datetime-input/datetime-input.css +1 -1
  121. package/dist/collection/components/datetime-picker/datetime-input/datetime-input.js +373 -211
  122. package/dist/collection/components/datetime-picker/datetime-input/datetime-input.types.js +1 -0
  123. package/dist/collection/components/datetime-picker/datetime-picker-constants.js +19 -5
  124. package/dist/collection/components/datetime-picker/datetime-picker-form-associated.js +92 -11
  125. package/dist/collection/components/datetime-picker/datetime-picker-props-validation.js +52 -33
  126. package/dist/collection/components/datetime-picker/datetime-picker.css +1 -1
  127. package/dist/collection/components/datetime-picker/datetime-picker.js +915 -362
  128. package/dist/collection/components/datetime-picker/datetime-picker.utils.js +62 -49
  129. package/dist/collection/components/datetime-picker/time-picker/time-picker-constants.js +3 -2
  130. package/dist/collection/components/datetime-picker/time-picker/time-picker.css +1 -1
  131. package/dist/collection/components/datetime-picker/time-picker/time-picker.js +148 -85
  132. package/dist/collection/components/divider/divider.css +1 -1
  133. package/dist/collection/components/dropdown/dropdown.css +1 -1
  134. package/dist/collection/components/dropdown/dropdown.js +32 -36
  135. package/dist/collection/components/footer/footer-category/footer-category.css +1 -1
  136. package/dist/collection/components/footer/footer-item/footer-item.css +1 -1
  137. package/dist/collection/components/footer/footer-legal/footer-legal.css +1 -1
  138. package/dist/collection/components/footer/footer-logo/footer-logo.css +1 -1
  139. package/dist/collection/components/footer/footer-social/footer-social.css +1 -1
  140. package/dist/collection/components/footer/footer.css +1 -1
  141. package/dist/collection/components/header/header-function/header-function.css +1 -1
  142. package/dist/collection/components/header/header-link/header-link.css +1 -1
  143. package/dist/collection/components/header/header-list/header-list.css +1 -1
  144. package/dist/collection/components/header/header-logo/header-logo.css +1 -1
  145. package/dist/collection/components/header/header.css +1 -1
  146. package/dist/collection/components/header/header.js +25 -21
  147. package/dist/collection/components/icon/icon.css +1 -1
  148. package/dist/collection/components/icon/icon.utils.js +8 -0
  149. package/dist/collection/components/input/input.css +1 -1
  150. package/dist/collection/components/input/input.js +50 -4
  151. package/dist/collection/components/item/item.css +1 -1
  152. package/dist/collection/components/item/item.js +4 -3
  153. package/dist/collection/components/link/link.css +1 -1
  154. package/dist/collection/components/list/list.css +1 -1
  155. package/dist/collection/components/loading/loading.css +1 -1
  156. package/dist/collection/components/magic-button/magic-button.css +1 -1
  157. package/dist/collection/components/magic-button/magic-button.js +20 -6
  158. package/dist/collection/components/menu/menu-group/menu-group.css +1 -1
  159. package/dist/collection/components/menu/menu-header/menu-header.css +1 -1
  160. package/dist/collection/components/menu/menu-info/menu-info.css +1 -1
  161. package/dist/collection/components/menu/menu-item/menu-item.css +1 -1
  162. package/dist/collection/components/menu/menu-link/menu-link.css +1 -1
  163. package/dist/collection/components/menu/menu-list/menu-list.css +1 -1
  164. package/dist/collection/components/menu/menu-logo/menu-logo.css +1 -1
  165. package/dist/collection/components/menu/menu-social/menu-social.css +1 -1
  166. package/dist/collection/components/menu/menu.css +1 -1
  167. package/dist/collection/components/message/message.css +1 -1
  168. package/dist/collection/components/modal/modal.css +1 -1
  169. package/dist/collection/components/modal/modal.js +19 -3
  170. package/dist/collection/components/notification/notification-body/notification-body.css +1 -1
  171. package/dist/collection/components/notification/notification-header/notification-header.css +1 -1
  172. package/dist/collection/components/notification/notification-item/notification-item.css +1 -1
  173. package/dist/collection/components/notification/notification.css +1 -1
  174. package/dist/collection/components/pagination/pagination.css +1 -1
  175. package/dist/collection/components/pagination/pagination.js +4 -2
  176. package/dist/collection/components/radio/radio.css +1 -1
  177. package/dist/collection/components/radio-group/radio-group.css +1 -1
  178. package/dist/collection/components/scrim/scrim.css +1 -1
  179. package/dist/collection/components/select/select-input/select-input.css +1 -1
  180. package/dist/collection/components/select/select-input/select-input.js +126 -18
  181. package/dist/collection/components/select/select-list/select-list.css +1 -1
  182. package/dist/collection/components/select/select-list/select-list.js +218 -66
  183. package/dist/collection/components/select/select-option/select-option.css +1 -1
  184. package/dist/collection/components/select/select-option/select-option.js +14 -5
  185. package/dist/collection/components/select/select.css +1 -1
  186. package/dist/collection/components/select/select.js +303 -94
  187. package/dist/collection/components/select/select.utils.js +29 -8
  188. package/dist/collection/components/sign-in/sign-in.css +1 -1
  189. package/dist/collection/components/sign-in/sign-in.js +8 -4
  190. package/dist/collection/components/skip-link/skip-link-item/skip-link-item.css +1 -1
  191. package/dist/collection/components/skip-link/skip-link.css +1 -1
  192. package/dist/collection/components/slider/slider.css +1 -1
  193. package/dist/collection/components/step/step-item/step-item.css +1 -1
  194. package/dist/collection/components/step/step.css +1 -1
  195. package/dist/collection/components/switch/switch.css +1 -1
  196. package/dist/collection/components/tab/tab-item/tab-item.css +1 -1
  197. package/dist/collection/components/tab/tab-item/tab-item.js +2 -2
  198. package/dist/collection/components/tab/tab.css +1 -1
  199. package/dist/collection/components/tab/tab.js +37 -10
  200. package/dist/collection/components/table/table-body/table-body.css +1 -1
  201. package/dist/collection/components/table/table-cell/table-cell.css +1 -1
  202. package/dist/collection/components/table/table-header/table-header.css +1 -1
  203. package/dist/collection/components/table/table-header-cell/table-header-cell.css +1 -1
  204. package/dist/collection/components/table/table-row/table-row.css +1 -1
  205. package/dist/collection/components/table/table.css +1 -1
  206. package/dist/collection/components/tag/tag.css +1 -1
  207. package/dist/collection/components/textarea/textarea.css +1 -1
  208. package/dist/collection/components/tooltip/tooltip.css +1 -1
  209. package/dist/collection/components/upload/upload.css +1 -1
  210. package/dist/collection/components/wizard/wizard-panel/wizard-panel.css +1 -1
  211. package/dist/collection/components/wizard/wizard.css +1 -1
  212. package/dist/collection/pages/components/select/remote.js +33 -0
  213. package/dist/collection/pages/components/select/virtualized.js +13 -0
  214. package/dist/collection/pages/components/upload/handler.js +25 -0
  215. package/dist/collection/pages/scripts/component-controls.js +15 -16
  216. package/dist/collection/pages/scripts/menu.js +0 -1
  217. package/dist/collection/pages/scripts/pageLoader.js +168 -91
  218. package/dist/collection/pages/scripts/pageloader-preview.js +37 -28
  219. package/dist/collection/shared/utils/form.js +17 -0
  220. package/dist/components/br-avatar.js +1 -1
  221. package/dist/components/br-breadcrumb-item.js +1 -1
  222. package/dist/components/br-breadcrumb.js +1 -1
  223. package/dist/components/br-button.js +1 -1
  224. package/dist/components/br-card.js +1 -1
  225. package/dist/components/br-carousel-page.js +1 -1
  226. package/dist/components/br-carousel.js +1 -1
  227. package/dist/components/br-checkbox-group.js +1 -1
  228. package/dist/components/br-checkbox.js +1 -1
  229. package/dist/components/br-checkgroup.js +1 -1
  230. package/dist/components/br-collapse.js +1 -1
  231. package/dist/components/br-cookiebar-cookie.js +1 -1
  232. package/dist/components/br-cookiebar-group.js +1 -1
  233. package/dist/components/br-cookiebar-header.js +1 -1
  234. package/dist/components/br-cookiebar-link.js +1 -1
  235. package/dist/components/br-cookiebar-note-group.js +1 -1
  236. package/dist/components/br-cookiebar-note.js +1 -1
  237. package/dist/components/br-cookiebar.js +1 -1
  238. package/dist/components/br-crumb.js +1 -1
  239. package/dist/components/br-date-picker.js +1 -1
  240. package/dist/components/br-datetime-input.js +1 -1
  241. package/dist/components/br-datetime-picker.js +1 -1
  242. package/dist/components/br-divider.js +1 -1
  243. package/dist/components/br-dropdown.js +1 -1
  244. package/dist/components/br-footer-category.js +1 -1
  245. package/dist/components/br-footer-item.js +1 -1
  246. package/dist/components/br-footer-legal.js +1 -1
  247. package/dist/components/br-footer-logo.js +1 -1
  248. package/dist/components/br-footer-social.js +1 -1
  249. package/dist/components/br-footer.js +1 -1
  250. package/dist/components/br-header-function.js +1 -1
  251. package/dist/components/br-header-link.js +1 -1
  252. package/dist/components/br-header-list.js +1 -1
  253. package/dist/components/br-header-logo.js +1 -1
  254. package/dist/components/br-header.js +1 -1
  255. package/dist/components/br-icon.js +1 -1
  256. package/dist/components/br-input.js +1 -1
  257. package/dist/components/br-item.js +1 -1
  258. package/dist/components/br-link.js +1 -1
  259. package/dist/components/br-list.js +1 -1
  260. package/dist/components/br-loading.js +1 -1
  261. package/dist/components/br-magic-button.js +1 -1
  262. package/dist/components/br-menu-group.js +1 -1
  263. package/dist/components/br-menu-header.js +1 -1
  264. package/dist/components/br-menu-info.js +1 -1
  265. package/dist/components/br-menu-item.js +1 -1
  266. package/dist/components/br-menu-link.js +1 -1
  267. package/dist/components/br-menu-list.js +1 -1
  268. package/dist/components/br-menu-logo.js +1 -1
  269. package/dist/components/br-menu-social.js +1 -1
  270. package/dist/components/br-menu.js +1 -1
  271. package/dist/components/br-message.js +1 -1
  272. package/dist/components/br-modal.js +1 -1
  273. package/dist/components/br-notification-body.js +1 -1
  274. package/dist/components/br-notification-header.js +1 -1
  275. package/dist/components/br-notification-item.js +1 -1
  276. package/dist/components/br-notification.js +1 -1
  277. package/dist/components/br-pagination.js +1 -1
  278. package/dist/components/br-radio-group.js +1 -1
  279. package/dist/components/br-radio.js +1 -1
  280. package/dist/components/br-scrim.js +1 -1
  281. package/dist/components/br-select-input.js +1 -1
  282. package/dist/components/br-select-list.js +1 -1
  283. package/dist/components/br-select-option.js +1 -1
  284. package/dist/components/br-select.js +1 -1
  285. package/dist/components/br-sign-in.js +1 -1
  286. package/dist/components/br-skip-link-item.js +1 -1
  287. package/dist/components/br-skip-link.js +1 -1
  288. package/dist/components/br-skiplink-item.js +1 -1
  289. package/dist/components/br-slider.js +1 -1
  290. package/dist/components/br-step-item.js +1 -1
  291. package/dist/components/br-step.js +1 -1
  292. package/dist/components/br-switch.js +1 -1
  293. package/dist/components/br-tab-item.js +1 -1
  294. package/dist/components/br-tab.js +1 -1
  295. package/dist/components/br-table-body.js +1 -1
  296. package/dist/components/br-table-cell.js +1 -1
  297. package/dist/components/br-table-header-cell.js +1 -1
  298. package/dist/components/br-table-header.js +1 -1
  299. package/dist/components/br-table-row.js +1 -1
  300. package/dist/components/br-table.js +1 -1
  301. package/dist/components/br-tag.js +1 -1
  302. package/dist/components/br-textarea.js +1 -1
  303. package/dist/components/br-time-picker.js +1 -1
  304. package/dist/components/br-tooltip.js +1 -1
  305. package/dist/components/br-upload.js +1 -1
  306. package/dist/components/br-wizard-panel.js +1 -1
  307. package/dist/components/br-wizard.js +1 -1
  308. package/dist/components/index.js +1 -1
  309. package/dist/components/p-5h-W9_JR.js +5 -0
  310. package/dist/components/p-848QkYoM.js +5 -0
  311. package/dist/components/p-B7bNfmgh.js +5 -0
  312. package/dist/components/p-BFHvuEnN.js +5 -0
  313. package/dist/components/p-BH6QYnAr.js +5 -0
  314. package/dist/{webcomponents/p-6c2fe5e4.entry.js → components/p-BcW8O6h2.js} +1 -1
  315. package/dist/components/p-BicHMcSS.js +5 -0
  316. package/dist/components/p-Bs7iRQTG.js +5 -0
  317. package/dist/components/{p-DSHbttu9.js → p-Bvrw9yWR.js} +1 -1
  318. package/dist/components/p-BzQFMh9j.js +5 -0
  319. package/dist/components/p-CBHd0-fF.js +5 -0
  320. package/dist/components/p-CCPHCJjw.js +5 -0
  321. package/dist/components/p-CDTENPaP.js +5 -0
  322. package/dist/components/{p-BcqVlof7.js → p-CbgKdASU.js} +1 -1
  323. package/dist/components/p-CeNELttN.js +5 -0
  324. package/dist/components/p-CjtmJTLO.js +5 -0
  325. package/dist/components/{p-DTGNra9m.js → p-D-3G3Ioq.js} +1 -1
  326. package/dist/components/p-DDu3JV_r.js +5 -0
  327. package/dist/components/p-DFWqyfUe.js +5 -0
  328. package/dist/components/p-DL6xuxGG.js +5 -0
  329. package/dist/components/p-DOX9Uwk1.js +5 -0
  330. package/dist/components/p-DUq7uT2-.js +5 -0
  331. package/dist/components/p-Devw08cc.js +5 -0
  332. package/dist/components/p-Di96UxvH.js +5 -0
  333. package/dist/components/p-Dp3MsSXu.js +5 -0
  334. package/dist/components/p-DsO4F0Cz.js +5 -0
  335. package/dist/components/p-DuLHFTpa.js +5 -0
  336. package/dist/components/p-DusornQ0.js +5 -0
  337. package/dist/components/{p-Dma14GVa.js → p-Jk_KQE5V.js} +1 -1
  338. package/dist/components/p-OQpiDEK9.js +5 -0
  339. package/dist/components/p-PV731d8s.js +5 -0
  340. package/dist/components/p-XW6Hp_Jk.js +5 -0
  341. package/dist/components/p-jOb1hCPi.js +5 -0
  342. package/dist/components/p-rMnkh3Cy.js +5 -0
  343. package/dist/components/p-ta-24T1Z.js +5 -0
  344. package/dist/esm/br-avatar.entry.js +2 -2
  345. package/dist/esm/br-breadcrumb-item.entry.js +1 -1
  346. package/dist/esm/br-breadcrumb.entry.js +2 -2
  347. package/dist/esm/br-button_2.entry.js +10 -5
  348. package/dist/esm/br-card.entry.js +2 -2
  349. package/dist/esm/br-carousel-page.entry.js +2 -2
  350. package/dist/esm/br-carousel.entry.js +3 -3
  351. package/dist/esm/br-checkbox-group.entry.js +2 -2
  352. package/dist/esm/br-checkbox.entry.js +4 -4
  353. package/dist/esm/br-checkgroup.entry.js +1 -1
  354. package/dist/esm/br-collapse_2.entry.js +12 -8
  355. package/dist/esm/br-cookiebar-cookie.entry.js +2 -2
  356. package/dist/esm/br-cookiebar-group.entry.js +2 -2
  357. package/dist/esm/br-cookiebar-header.entry.js +2 -2
  358. package/dist/esm/br-cookiebar-link.entry.js +2 -2
  359. package/dist/esm/br-cookiebar-note-group.entry.js +2 -2
  360. package/dist/esm/br-cookiebar-note.entry.js +2 -2
  361. package/dist/esm/br-cookiebar.entry.js +3 -3
  362. package/dist/esm/br-crumb.entry.js +1 -1
  363. package/dist/esm/br-date-picker_3.entry.js +844 -492
  364. package/dist/esm/br-datetime-picker.entry.js +1316 -280
  365. package/dist/esm/br-divider.entry.js +2 -2
  366. package/dist/esm/br-dropdown_2.entry.js +281 -164
  367. package/dist/esm/br-footer-category.entry.js +2 -2
  368. package/dist/esm/br-footer-item.entry.js +2 -2
  369. package/dist/esm/br-footer-legal.entry.js +2 -2
  370. package/dist/esm/br-footer-logo.entry.js +2 -2
  371. package/dist/esm/br-footer-social.entry.js +2 -2
  372. package/dist/esm/br-footer.entry.js +2 -2
  373. package/dist/esm/br-header-function.entry.js +2 -2
  374. package/dist/esm/br-header-link.entry.js +2 -2
  375. package/dist/esm/br-header-list.entry.js +3 -3
  376. package/dist/esm/br-header-logo.entry.js +2 -2
  377. package/dist/esm/br-header.entry.js +27 -23
  378. package/dist/esm/br-icon.entry.js +3 -32
  379. package/dist/esm/br-input.entry.js +32 -7
  380. package/dist/esm/br-item.entry.js +5 -4
  381. package/dist/esm/br-link.entry.js +2 -2
  382. package/dist/esm/br-loading.entry.js +2 -2
  383. package/dist/esm/br-magic-button.entry.js +21 -8
  384. package/dist/esm/br-menu-group.entry.js +2 -2
  385. package/dist/esm/br-menu-header.entry.js +2 -2
  386. package/dist/esm/br-menu-info.entry.js +2 -2
  387. package/dist/esm/br-menu-item.entry.js +2 -2
  388. package/dist/esm/br-menu-link.entry.js +2 -2
  389. package/dist/esm/br-menu-list.entry.js +2 -2
  390. package/dist/esm/br-menu-logo.entry.js +2 -2
  391. package/dist/esm/br-menu-social.entry.js +2 -2
  392. package/dist/esm/br-menu.entry.js +3 -3
  393. package/dist/esm/br-modal.entry.js +21 -5
  394. package/dist/esm/br-notification-body.entry.js +2 -2
  395. package/dist/esm/br-notification-header.entry.js +2 -2
  396. package/dist/esm/br-notification-item.entry.js +2 -2
  397. package/dist/esm/br-notification.entry.js +3 -3
  398. package/dist/esm/br-pagination.entry.js +4 -4
  399. package/dist/esm/br-radio-group.entry.js +4 -4
  400. package/dist/esm/br-radio.entry.js +4 -4
  401. package/dist/esm/br-scrim.entry.js +2 -2
  402. package/dist/esm/br-select-input_3.entry.js +286 -100
  403. package/dist/esm/br-sign-in.entry.js +8 -4
  404. package/dist/esm/br-skip-link-item.entry.js +1 -1
  405. package/dist/esm/br-skip-link.entry.js +2 -2
  406. package/dist/esm/br-skiplink-item.entry.js +2 -2
  407. package/dist/esm/br-slider.entry.js +4 -4
  408. package/dist/esm/br-step_2.entry.js +3 -3
  409. package/dist/esm/br-switch.entry.js +4 -4
  410. package/dist/esm/br-tab-item.entry.js +3 -3
  411. package/dist/esm/br-tab.entry.js +38 -13
  412. package/dist/esm/br-table-body.entry.js +2 -2
  413. package/dist/esm/br-table-cell.entry.js +2 -2
  414. package/dist/esm/br-table-header-cell.entry.js +2 -2
  415. package/dist/esm/br-table-header.entry.js +2 -2
  416. package/dist/esm/br-table-row.entry.js +2 -2
  417. package/dist/esm/br-table.entry.js +2 -2
  418. package/dist/esm/br-tag.entry.js +4 -4
  419. package/dist/esm/br-textarea.entry.js +4 -4
  420. package/dist/esm/br-tooltip.entry.js +3 -3
  421. package/dist/esm/br-upload.entry.js +5 -21
  422. package/dist/esm/br-wizard-panel.entry.js +2 -2
  423. package/dist/esm/br-wizard.entry.js +2 -2
  424. package/dist/esm/{datetime-picker-constants-BtRPYRvA.js → datetime-picker-constants-DDc4sADe.js} +20 -6
  425. package/dist/esm/{event-CfuJQ1DY.js → event-6Da1SZ3J.js} +1 -1
  426. package/dist/esm/format-bytes-B7bNfmgh.js +22 -0
  427. package/dist/esm/icon.utils-zlORkiHQ.js +43 -0
  428. package/dist/esm/{index-Dcn7tRST.js → index-ConyRdJe.js} +33 -27
  429. package/dist/esm/{index-BQPOWxe5.js → index-CytVKoHT.js} +13 -13
  430. package/dist/esm/index.js +2 -2
  431. package/dist/esm/{datetime-picker-props-validation-BeTcUTnE.js → isValid-Bee0Uvqc.js} +2 -477
  432. package/dist/esm/loader.js +3 -3
  433. package/dist/esm/select.utils-BYsh2ZdE.js +57 -0
  434. package/dist/esm/{validator-D3tVP32U.js → validator-BkWWrDEr.js} +18 -1
  435. package/dist/esm/webcomponents.js +4 -4
  436. package/dist/hydrate/index.js +3314 -1806
  437. package/dist/hydrate/index.mjs +3314 -1806
  438. package/dist/types/components/button/button.d.ts +2 -1
  439. package/dist/types/components/collapse/collapse.d.ts +6 -2
  440. package/dist/types/components/datetime-picker/date-picker/date-picker-locale.d.ts +9 -9
  441. package/dist/types/components/datetime-picker/date-picker/date-picker-props-validation.d.ts +14 -13
  442. package/dist/types/components/datetime-picker/date-picker/date-picker.d.ts +264 -161
  443. package/dist/types/components/datetime-picker/datetime-input/datetime-input-constants.d.ts +14 -0
  444. package/dist/types/components/datetime-picker/datetime-input/datetime-input-props-validation.d.ts +19 -15
  445. package/dist/types/components/datetime-picker/datetime-input/datetime-input.d.ts +229 -98
  446. package/dist/types/components/datetime-picker/datetime-input/datetime-input.types.d.ts +36 -0
  447. package/dist/types/components/datetime-picker/datetime-picker-constants.d.ts +19 -5
  448. package/dist/types/components/datetime-picker/datetime-picker-form-associated.d.ts +32 -5
  449. package/dist/types/components/datetime-picker/datetime-picker-props-validation.d.ts +22 -24
  450. package/dist/types/components/datetime-picker/datetime-picker.d.ts +508 -235
  451. package/dist/types/components/datetime-picker/datetime-picker.types.d.ts +75 -21
  452. package/dist/types/components/datetime-picker/datetime-picker.utils.d.ts +53 -47
  453. package/dist/types/components/datetime-picker/time-picker/time-picker-constants.d.ts +3 -2
  454. package/dist/types/components/datetime-picker/time-picker/time-picker.d.ts +126 -55
  455. package/dist/types/components/dropdown/dropdown.d.ts +12 -4
  456. package/dist/types/components/header/header.d.ts +2 -0
  457. package/dist/types/components/icon/icon.utils.d.ts +6 -0
  458. package/dist/types/components/input/input.d.ts +18 -1
  459. package/dist/types/components/input/input.types.d.ts +4 -0
  460. package/dist/types/components/item/item.d.ts +6 -1
  461. package/dist/types/components/magic-button/magic-button.d.ts +7 -3
  462. package/dist/types/components/modal/modal.d.ts +6 -0
  463. package/dist/types/components/pagination/pagination.d.ts +2 -0
  464. package/dist/types/components/select/select-input/select-input.d.ts +9 -2
  465. package/dist/types/components/select/select-list/select-list.d.ts +14 -2
  466. package/dist/types/components/select/select-option/select-option.d.ts +1 -0
  467. package/dist/types/components/select/select.d.ts +47 -7
  468. package/dist/types/components/select/select.types.d.ts +12 -0
  469. package/dist/types/components/select/select.utils.d.ts +3 -0
  470. package/dist/types/components/sign-in/sign-in.d.ts +3 -2
  471. package/dist/types/components/tab/tab-item/tab-item.d.ts +6 -2
  472. package/dist/types/components/tab/tab.d.ts +7 -0
  473. package/dist/types/components.d.ts +405 -318
  474. package/dist/types/shared/utils/form.d.ts +8 -0
  475. package/dist/types/stencil-public-runtime.d.ts +61 -55
  476. package/dist/webcomponents/index.esm.js +1 -1
  477. package/dist/webcomponents/p-01801ac1.entry.js +5 -0
  478. package/dist/webcomponents/p-05b459f2.entry.js +5 -0
  479. package/dist/webcomponents/p-08ac6f09.entry.js +5 -0
  480. package/dist/webcomponents/{p-cff24492.entry.js → p-09817344.entry.js} +1 -1
  481. package/dist/webcomponents/p-09c79c1d.entry.js +5 -0
  482. package/dist/webcomponents/p-0fc112fc.entry.js +5 -0
  483. package/dist/webcomponents/p-13babfc4.entry.js +5 -0
  484. package/dist/webcomponents/p-15022ab7.entry.js +5 -0
  485. package/dist/webcomponents/p-172d42c2.entry.js +5 -0
  486. package/dist/webcomponents/p-18cf093a.entry.js +5 -0
  487. package/dist/webcomponents/p-198aa844.entry.js +5 -0
  488. package/dist/webcomponents/p-1ba60d13.entry.js +5 -0
  489. package/dist/webcomponents/p-1bb96641.entry.js +5 -0
  490. package/dist/webcomponents/{p-7acf20d3.entry.js → p-20477061.entry.js} +1 -1
  491. package/dist/webcomponents/p-21feda62.entry.js +5 -0
  492. package/dist/webcomponents/p-23a5cfd7.entry.js +5 -0
  493. package/dist/webcomponents/{p-030c02f8.entry.js → p-2c8595d3.entry.js} +1 -1
  494. package/dist/webcomponents/{p-09770c98.entry.js → p-31a4694a.entry.js} +1 -1
  495. package/dist/webcomponents/p-32ea6342.entry.js +5 -0
  496. package/dist/webcomponents/p-3658adcf.entry.js +5 -0
  497. package/dist/webcomponents/p-37914e63.entry.js +5 -0
  498. package/dist/webcomponents/p-3b0dd0ff.entry.js +5 -0
  499. package/dist/webcomponents/p-42b60169.entry.js +5 -0
  500. package/dist/webcomponents/p-42c9c6c5.entry.js +5 -0
  501. package/dist/{components/p-SvVnvJdC.js → webcomponents/p-473561f2.entry.js} +1 -1
  502. package/dist/webcomponents/p-47c490ef.entry.js +5 -0
  503. package/dist/webcomponents/p-4b01c60f.entry.js +5 -0
  504. package/dist/webcomponents/p-5a5ed7d8.entry.js +5 -0
  505. package/dist/webcomponents/{p-c8b7bbab.entry.js → p-5a7c2031.entry.js} +1 -1
  506. package/dist/webcomponents/p-609cf652.entry.js +5 -0
  507. package/dist/webcomponents/p-614683d9.entry.js +5 -0
  508. package/dist/webcomponents/p-67605757.entry.js +5 -0
  509. package/dist/{components/p-CppRJiyC.js → webcomponents/p-67774920.entry.js} +1 -1
  510. package/dist/webcomponents/p-67d62559.entry.js +5 -0
  511. package/dist/webcomponents/p-695dbeb0.entry.js +5 -0
  512. package/dist/webcomponents/{p-CfuJQ1DY.js → p-6Da1SZ3J.js} +1 -1
  513. package/dist/webcomponents/p-6a293be8.entry.js +5 -0
  514. package/dist/webcomponents/{p-03359c92.entry.js → p-6f1a4fbe.entry.js} +1 -1
  515. package/dist/webcomponents/p-7352d459.entry.js +5 -0
  516. package/dist/webcomponents/p-745213f7.entry.js +5 -0
  517. package/dist/webcomponents/p-794b701b.entry.js +5 -0
  518. package/dist/webcomponents/{p-d826c052.entry.js → p-7ee564a1.entry.js} +1 -1
  519. package/dist/webcomponents/{p-e20188c0.entry.js → p-7fda8b89.entry.js} +1 -1
  520. package/dist/webcomponents/p-8116ee93.entry.js +5 -0
  521. package/dist/webcomponents/p-821341dc.entry.js +5 -0
  522. package/dist/webcomponents/p-8aa6f07c.entry.js +5 -0
  523. package/dist/webcomponents/p-8ddf3ce3.entry.js +5 -0
  524. package/dist/webcomponents/p-95f3c44a.entry.js +5 -0
  525. package/dist/webcomponents/p-96dbb585.entry.js +5 -0
  526. package/dist/webcomponents/p-9815ab95.entry.js +5 -0
  527. package/dist/webcomponents/{p-327f034f.entry.js → p-9e0324a7.entry.js} +1 -1
  528. package/dist/webcomponents/p-B7bNfmgh.js +5 -0
  529. package/dist/webcomponents/p-BYsh2ZdE.js +5 -0
  530. package/dist/webcomponents/p-BkWWrDEr.js +5 -0
  531. package/dist/webcomponents/p-CJipT0in.js +5 -0
  532. package/dist/webcomponents/{p-Dcn7tRST.js → p-ConyRdJe.js} +1 -1
  533. package/dist/webcomponents/{p-BtRPYRvA.js → p-DDc4sADe.js} +1 -1
  534. package/dist/webcomponents/p-a038be16.entry.js +5 -0
  535. package/dist/webcomponents/p-a32d17cb.entry.js +5 -0
  536. package/dist/webcomponents/p-a46f068e.entry.js +5 -0
  537. package/dist/webcomponents/p-a89b684d.entry.js +5 -0
  538. package/dist/webcomponents/{p-abaf2365.entry.js → p-ac68355e.entry.js} +1 -1
  539. package/dist/webcomponents/{p-ed5af0e4.entry.js → p-af888d13.entry.js} +1 -1
  540. package/dist/webcomponents/p-b0124459.entry.js +5 -0
  541. package/dist/webcomponents/p-b063c12f.entry.js +5 -0
  542. package/dist/webcomponents/p-b07bfdc5.entry.js +5 -0
  543. package/dist/webcomponents/{p-f558d7b9.entry.js → p-b55425b7.entry.js} +1 -1
  544. package/dist/webcomponents/{p-a0931550.entry.js → p-b5d25332.entry.js} +1 -1
  545. package/dist/webcomponents/p-b609b464.entry.js +5 -0
  546. package/dist/webcomponents/p-b66ab52d.entry.js +5 -0
  547. package/dist/webcomponents/p-b8d4ace3.entry.js +5 -0
  548. package/dist/webcomponents/p-c717c745.entry.js +5 -0
  549. package/dist/webcomponents/p-ce3d689c.entry.js +5 -0
  550. package/dist/webcomponents/p-d08b6266.entry.js +5 -0
  551. package/dist/webcomponents/p-d6165aa0.entry.js +5 -0
  552. package/dist/webcomponents/{p-01fb0754.entry.js → p-dacb7e2c.entry.js} +1 -1
  553. package/dist/webcomponents/p-db309a11.entry.js +5 -0
  554. package/dist/webcomponents/{p-edc6da0e.entry.js → p-dc23cb2e.entry.js} +1 -1
  555. package/dist/webcomponents/p-e241caf3.entry.js +5 -0
  556. package/dist/webcomponents/p-e661c024.entry.js +5 -0
  557. package/dist/webcomponents/p-e7107869.entry.js +5 -0
  558. package/dist/webcomponents/p-eb94199d.entry.js +5 -0
  559. package/dist/webcomponents/p-f8993ae4.entry.js +5 -0
  560. package/dist/webcomponents/{p-670e8fec.entry.js → p-f99d8c9c.entry.js} +1 -1
  561. package/dist/webcomponents/{p-DV-iW9Aj.js → p-fOJu6uZR.js} +1 -1
  562. package/dist/webcomponents/{p-a212fd85.entry.js → p-fb76b1e0.entry.js} +1 -1
  563. package/dist/webcomponents/p-fdcb54a3.entry.js +5 -0
  564. package/dist/webcomponents/{p-e3de5bb3.entry.js → p-fed02286.entry.js} +1 -1
  565. package/dist/webcomponents/p-zlORkiHQ.js +5 -0
  566. package/dist/webcomponents/webcomponents.esm.js +1 -1
  567. package/package.json +2 -2
  568. package/dist/components/p-B0o70fWP.js +0 -5
  569. package/dist/components/p-B96LROz9.js +0 -5
  570. package/dist/components/p-BDqef5-y.js +0 -5
  571. package/dist/components/p-BP5zMCxG.js +0 -5
  572. package/dist/components/p-BRaphxoP.js +0 -5
  573. package/dist/components/p-BUzBa9L1.js +0 -5
  574. package/dist/components/p-BblZlUp2.js +0 -5
  575. package/dist/components/p-Bc4nAk5i.js +0 -5
  576. package/dist/components/p-Bezou5CQ.js +0 -5
  577. package/dist/components/p-BrNh9KdF.js +0 -5
  578. package/dist/components/p-C5th2dxu.js +0 -5
  579. package/dist/components/p-CEdUp183.js +0 -5
  580. package/dist/components/p-CF7t0uxQ.js +0 -5
  581. package/dist/components/p-CFzHx6zV.js +0 -5
  582. package/dist/components/p-CG4em0S6.js +0 -5
  583. package/dist/components/p-CI4D3-pf.js +0 -5
  584. package/dist/components/p-CIrVPkVg.js +0 -5
  585. package/dist/components/p-CdDwqbBv.js +0 -5
  586. package/dist/components/p-Cvk1Ggs5.js +0 -5
  587. package/dist/components/p-D12US39c.js +0 -5
  588. package/dist/components/p-DGPJkJsj.js +0 -5
  589. package/dist/components/p-DX1wAFn4.js +0 -5
  590. package/dist/components/p-DpRZ4B0d.js +0 -5
  591. package/dist/components/p-G35qEQZd.js +0 -5
  592. package/dist/components/p-Ho_IybzR.js +0 -5
  593. package/dist/components/p-emAWunES.js +0 -5
  594. package/dist/components/p-fB79wKCm.js +0 -5
  595. package/dist/components/p-k7p4QJ8a.js +0 -5
  596. package/dist/webcomponents/p-01baafce.entry.js +0 -5
  597. package/dist/webcomponents/p-0b9714f1.entry.js +0 -5
  598. package/dist/webcomponents/p-12aa36a8.entry.js +0 -5
  599. package/dist/webcomponents/p-130b6e06.entry.js +0 -5
  600. package/dist/webcomponents/p-144f8c8d.entry.js +0 -5
  601. package/dist/webcomponents/p-14fe22e2.entry.js +0 -5
  602. package/dist/webcomponents/p-1ff9210a.entry.js +0 -5
  603. package/dist/webcomponents/p-2605cdc3.entry.js +0 -5
  604. package/dist/webcomponents/p-27afaec9.entry.js +0 -5
  605. package/dist/webcomponents/p-2a50e42d.entry.js +0 -5
  606. package/dist/webcomponents/p-342650b8.entry.js +0 -5
  607. package/dist/webcomponents/p-38f6a78b.entry.js +0 -5
  608. package/dist/webcomponents/p-3920fe3a.entry.js +0 -5
  609. package/dist/webcomponents/p-3ae97345.entry.js +0 -5
  610. package/dist/webcomponents/p-3cce767c.entry.js +0 -5
  611. package/dist/webcomponents/p-3df6c5d2.entry.js +0 -5
  612. package/dist/webcomponents/p-3e287899.entry.js +0 -5
  613. package/dist/webcomponents/p-3e5580ba.entry.js +0 -5
  614. package/dist/webcomponents/p-403637dd.entry.js +0 -5
  615. package/dist/webcomponents/p-435c8ef2.entry.js +0 -5
  616. package/dist/webcomponents/p-59da5b55.entry.js +0 -5
  617. package/dist/webcomponents/p-5dd4314c.entry.js +0 -5
  618. package/dist/webcomponents/p-646af6a5.entry.js +0 -5
  619. package/dist/webcomponents/p-68046544.entry.js +0 -5
  620. package/dist/webcomponents/p-68ec76b8.entry.js +0 -5
  621. package/dist/webcomponents/p-6c0ea20c.entry.js +0 -5
  622. package/dist/webcomponents/p-707df9b9.entry.js +0 -5
  623. package/dist/webcomponents/p-72b839fe.entry.js +0 -5
  624. package/dist/webcomponents/p-73dcc05b.entry.js +0 -5
  625. package/dist/webcomponents/p-7b01bddb.entry.js +0 -5
  626. package/dist/webcomponents/p-7cd38850.entry.js +0 -5
  627. package/dist/webcomponents/p-82454383.entry.js +0 -5
  628. package/dist/webcomponents/p-91e959a8.entry.js +0 -5
  629. package/dist/webcomponents/p-964c01e6.entry.js +0 -5
  630. package/dist/webcomponents/p-9858e42a.entry.js +0 -5
  631. package/dist/webcomponents/p-9c4200b0.entry.js +0 -5
  632. package/dist/webcomponents/p-9d9c87b1.entry.js +0 -5
  633. package/dist/webcomponents/p-B0PbhaxL.js +0 -5
  634. package/dist/webcomponents/p-D3tVP32U.js +0 -5
  635. package/dist/webcomponents/p-a2e75143.entry.js +0 -5
  636. package/dist/webcomponents/p-a3bb98c9.entry.js +0 -5
  637. package/dist/webcomponents/p-a8b5dba0.entry.js +0 -5
  638. package/dist/webcomponents/p-aa909443.entry.js +0 -5
  639. package/dist/webcomponents/p-aeb16645.entry.js +0 -5
  640. package/dist/webcomponents/p-b287c384.entry.js +0 -5
  641. package/dist/webcomponents/p-b506b0a1.entry.js +0 -5
  642. package/dist/webcomponents/p-b520c08c.entry.js +0 -5
  643. package/dist/webcomponents/p-b94c3f84.entry.js +0 -5
  644. package/dist/webcomponents/p-bda62f90.entry.js +0 -5
  645. package/dist/webcomponents/p-c201ae16.entry.js +0 -5
  646. package/dist/webcomponents/p-c7e899a1.entry.js +0 -5
  647. package/dist/webcomponents/p-cbf3e251.entry.js +0 -5
  648. package/dist/webcomponents/p-d35cf5b4.entry.js +0 -5
  649. package/dist/webcomponents/p-d45ffe9c.entry.js +0 -5
  650. package/dist/webcomponents/p-d719a4af.entry.js +0 -5
  651. package/dist/webcomponents/p-da21a60d.entry.js +0 -5
  652. package/dist/webcomponents/p-de0c7f26.entry.js +0 -5
  653. package/dist/webcomponents/p-e27882e1.entry.js +0 -5
  654. package/dist/webcomponents/p-e624ff04.entry.js +0 -5
  655. package/dist/webcomponents/p-f24fcf3d.entry.js +0 -5
  656. package/dist/webcomponents/p-f52ef0dc.entry.js +0 -5
  657. package/dist/webcomponents/p-fcab1428.entry.js +0 -5
  658. package/dist/webcomponents/p-fe1729a7.entry.js +0 -5
@@ -127,25 +127,7 @@ function getBaseUrl() {
127
127
  return baseUrl === '' ? '' : baseUrl;
128
128
  }
129
129
 
130
- function getPresetScriptUrl(path, script) {
131
- if (typeof script !== 'string' || !/\.js$/i.test(script)) return '';
132
-
133
- const componentSegments = String(path).replaceAll('\\', '/').split('/').filter(Boolean);
134
- const scriptSegments = script.replaceAll('\\', '/').split('/');
135
- if (
136
- componentSegments.length === 0 ||
137
- scriptSegments.some((segment) => !segment || segment === '.' || segment === '..')
138
- ) {
139
- return '';
140
- }
141
-
142
- const relativePath = [...componentSegments, ...scriptSegments].map(encodeURIComponent).join('/');
143
- const scriptUrl = new URL(`${getBaseUrl()}/pages/components/${relativePath}`, window.location.href);
144
- scriptUrl.searchParams.set('preview-version', String(Date.now()));
145
- return scriptUrl.href;
146
- }
147
-
148
- function createExampleElement(path, file, text, presets = [], defaultPreset = '', exampleLabel = '', baseScript = '') {
130
+ function createExampleElement(path, file, text, presets = [], defaultPreset = '', exampleLabel = '') {
149
131
  text = stripDevServerConnector(text);
150
132
  const contentDiv = document.createElement('br-item');
151
133
  contentDiv.classList.add('file', 'wbc-example');
@@ -177,42 +159,60 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
177
159
  const editorContainer = document.createElement('div');
178
160
  editorContainer.className = 'wbc-example-editor-container';
179
161
 
162
+ // Ids nativos das abas, com o escopo do exemplo para não duplicar ids entre exemplos da página.
163
+ const tabIds = Object.fromEntries(
164
+ ['code', 'events', 'controls', 'a11y', 'javascript', 'css', 'angular', 'react', 'vue'].map((name) => [
165
+ name,
166
+ `${controlsScope}-${name}-tab`,
167
+ ]),
168
+ );
180
169
  const tabComponent = document.createElement('br-tab');
181
170
  tabComponent.setAttribute('density', 'small');
182
- tabComponent.setAttribute('active-tab-id', 'code-tab');
171
+ // Ícones por classe (Font Awesome) em light DOM, pelo slot `icon-{id}` do br-tab.
172
+ const setTabIcon = (tabItem, iconClass) => {
173
+ const icon = document.createElement('i');
174
+ icon.slot = `icon-${tabItem.id}`;
175
+ icon.className = iconClass;
176
+ icon.setAttribute('aria-hidden', 'true');
177
+ tabComponent.appendChild(icon);
178
+ };
179
+ tabComponent.setAttribute('active-tab-id', tabIds.code);
183
180
  tabComponent.setAttribute('data-playground-badges', '');
184
181
 
185
182
  const codeTabItem = document.createElement('br-tab-item');
186
183
  codeTabItem.setAttribute('label', 'HTML');
187
- codeTabItem.setAttribute('icon', 'fab fa-html5');
188
184
  codeTabItem.setAttribute('icon-only', 'true');
189
185
  codeTabItem.setAttribute('title', 'Editor HTML');
190
- codeTabItem.setAttribute('tab-item-id', 'code-tab');
186
+ codeTabItem.id = tabIds.code;
191
187
  codeTabItem.setAttribute('active', 'true');
192
- codeTabItem.setAttribute('is-active', 'true');
193
188
 
194
189
  const eventsTabItem = document.createElement('br-tab-item');
195
190
  eventsTabItem.setAttribute('label', 'Console');
196
- eventsTabItem.setAttribute('icon', 'fas fa-terminal');
197
191
  eventsTabItem.setAttribute('icon-only', 'true');
198
192
  eventsTabItem.setAttribute('title', 'Console: eventos e mensagens de runtime');
199
- eventsTabItem.setAttribute('tab-item-id', 'events-tab');
193
+ eventsTabItem.id = tabIds.events;
200
194
 
201
195
  const controlsTabItem = document.createElement('br-tab-item');
202
196
  controlsTabItem.setAttribute('label', 'Controles');
203
- controlsTabItem.setAttribute('icon', 'fas fa-sliders-h');
204
197
  controlsTabItem.setAttribute('icon-only', 'true');
205
198
  controlsTabItem.setAttribute('title', 'Controles do componente');
206
- controlsTabItem.setAttribute('tab-item-id', 'controls-tab');
199
+ controlsTabItem.id = tabIds.controls;
207
200
 
208
- const javascriptTabItem = createFrameworkTab('JS', 'fab fa-js', 'javascript-tab', text, 'javascript', {
201
+ const javascriptTabItem = createFrameworkTab('JS', 'fab fa-js', tabIds.javascript, text, 'javascript', {
209
202
  editable: true,
210
203
  });
211
- const cssTabItem = createFrameworkTab('CSS', 'fab fa-css3-alt', 'css-tab', text, 'css', { editable: true });
212
- const angularTabItem = createFrameworkTab('Angular', 'fab fa-angular', 'angular-tab', text, 'angular');
213
- const reactTabItem = createFrameworkTab('React', 'fab fa-react', 'react-tab', text, 'react');
214
- const vueTabItem = createFrameworkTab('Vue', 'fab fa-vuejs', 'vue-tab', text, 'vue');
204
+ const cssTabItem = createFrameworkTab('CSS', 'fab fa-css3-alt', tabIds.css, text, 'css', { editable: true });
205
+ const angularTabItem = createFrameworkTab('Angular', 'fab fa-angular', tabIds.angular, text, 'angular');
206
+ const reactTabItem = createFrameworkTab('React', 'fab fa-react', tabIds.react, text, 'react');
207
+ const vueTabItem = createFrameworkTab('Vue', 'fab fa-vuejs', tabIds.vue, text, 'vue');
215
208
  const frameworkTabItems = [javascriptTabItem, cssTabItem, angularTabItem, reactTabItem, vueTabItem];
209
+ // Depois de os ids estarem definidos: o nome do slot depende do id da aba.
210
+ setTabIcon(codeTabItem, 'fab fa-html5');
211
+ setTabIcon(eventsTabItem, 'fas fa-terminal');
212
+ setTabIcon(controlsTabItem, 'fas fa-sliders-h');
213
+ frameworkTabItems.forEach((tab) => {
214
+ setTabIcon(tab, tab.dataset.icon);
215
+ });
216
216
  const frameworkEditors = new Map();
217
217
  const refreshFrameworkEditors = () => {
218
218
  requestAnimationFrame(() => {
@@ -327,7 +327,10 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
327
327
  let overflowRedo;
328
328
  let overflowDiff;
329
329
  let editorApi = null;
330
- const getEditorValue = () => editorApi?.getValue() ?? editorState.value;
330
+ // O editor é compartilhado pelas abas index.html/index.css/index.js; fora da
331
+ // aba HTML, o HTML vigente é o último valor aplicado.
332
+ const getEditorValue = () =>
333
+ activeVanillaFile === 'html' ? (editorApi?.getValue() ?? editorState.value) : editorState.value;
331
334
  const refreshEditor = () => {
332
335
  requestAnimationFrame(() => requestAnimationFrame(() => editorApi?.refresh?.()));
333
336
  };
@@ -387,8 +390,13 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
387
390
  presets.find(({ id, source }) => id === defaultPreset && Boolean(source)) ??
388
391
  presets.find(({ source }) => Boolean(source));
389
392
  const initialPresetId = initialPreset?.id || '';
390
- const baseScriptUrl = getPresetScriptUrl(path, baseScript);
391
- let activePresetScriptUrl = getPresetScriptUrl(path, initialPreset?.script);
393
+ const getPresetCss = (preset) => preset?.css || getFrameworkCode(editorState.value, 'css');
394
+ const getPresetJavascript = (preset) => preset?.javascript || '';
395
+ // Link compartilhado > rascunho local > arquivos do preset. O estado da URL não é confiável.
396
+ const sharedState = getSharedExampleState(path, file);
397
+ const pickSource = (...values) => values.find((value) => typeof value === 'string');
398
+ vanillaSources.css = pickSource(sharedState?.c, activeDraft?.css, getPresetCss(initialPreset));
399
+ vanillaSources.javascript = pickSource(sharedState?.j, activeDraft?.javascript, getPresetJavascript(initialPreset));
392
400
  presetOptions.forEach(({ id, label, source }) => {
393
401
  const option = document.createElement('br-select-option');
394
402
  option.value = id;
@@ -399,6 +407,33 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
399
407
  presetSelect.appendChild(option);
400
408
  });
401
409
  presetSelect.value = initialPresetId;
410
+
411
+ // Descrição do preset: linha de largura total entre o cabeçalho e o preview e, se houver,
412
+ // a explicação detalhada em <details>, recolhida a cada troca de preset. O parágrafo é uma
413
+ // região viva, então a troca é anunciada.
414
+ const presetDescription = document.createElement('div');
415
+ presetDescription.className = 'wbc-example-preset-description';
416
+ presetDescription.hidden = true;
417
+ const presetDescriptionText = document.createElement('p');
418
+ presetDescriptionText.className = 'wbc-example-preset-description__text';
419
+ presetDescriptionText.setAttribute('aria-live', 'polite');
420
+ const presetDetails = document.createElement('details');
421
+ presetDetails.className = 'wbc-example-preset-description__details';
422
+ const presetDetailsSummary = document.createElement('summary');
423
+ presetDetailsSummary.textContent = 'Explicação detalhada';
424
+ const presetDetailsBody = document.createElement('div');
425
+ presetDetailsBody.className = 'wbc-example-preset-description__body';
426
+ presetDetails.append(presetDetailsSummary, presetDetailsBody);
427
+ presetDescription.append(presetDescriptionText, presetDetails);
428
+ const updatePresetDescription = (preset) => {
429
+ presetDescription.hidden = !preset?.description;
430
+ presetDescriptionText.textContent = preset?.description ?? '';
431
+ presetDetails.open = false;
432
+ presetDetails.hidden = !preset?.details;
433
+ presetDetailsBody.textContent = preset?.details ?? '';
434
+ };
435
+ updatePresetDescription(initialPreset);
436
+
402
437
  let isApplyingPresetFromUrl = false;
403
438
  let title;
404
439
  const updateExampleLabel = (presetId = presetSelect.value) => {
@@ -409,13 +444,20 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
409
444
  presetSelect.addEventListener('change', () => {
410
445
  const selectedPreset = presetOptions.find(({ id }) => id === presetSelect.value);
411
446
  updateExampleLabel(selectedPreset?.id);
447
+ updatePresetDescription(selectedPreset);
412
448
  if (selectedPreset?.source) {
413
449
  controlsCssSource = '';
414
450
  controlsApi?.reset?.();
415
- activePresetScriptUrl = getPresetScriptUrl(path, selectedPreset.script);
416
451
  if (!isApplyingPresetFromUrl) updatePresetUrl(file, selectedPreset.id);
417
452
  comparisonBaseline = selectedPreset.source;
418
- setEditorValue(selectedPreset.source);
453
+ vanillaSources.css = getPresetCss(selectedPreset);
454
+ vanillaSources.javascript = getPresetJavascript(selectedPreset);
455
+ activateVanillaFile('html');
456
+ // Presets com o mesmo HTML ainda podem trocar JS/CSS.
457
+ if (selectedPreset.source === editorState.value) {
458
+ renderCurrentPreview(editorState.value);
459
+ persistDraft();
460
+ } else setEditorValue(selectedPreset.source);
419
461
  updateDiff(getEditorValue());
420
462
  }
421
463
  });
@@ -750,6 +792,8 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
750
792
  p: path,
751
793
  f: file,
752
794
  h: getEditorValue(),
795
+ j: vanillaSources.javascript,
796
+ c: vanillaSources.css,
753
797
  // Mantém a associação do código compartilhado ao preset para links legados e edição posterior.
754
798
  presetId: presetSelect.value || undefined,
755
799
  };
@@ -1029,6 +1073,7 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1029
1073
  const updateToolbarLayout = () => {
1030
1074
  const isCompact = header.clientWidth > 0 && header.clientWidth < 840;
1031
1075
  header.classList.toggle('is-compact-toolbar', isCompact);
1076
+ header.classList.toggle('is-stacked-toolbar', header.clientWidth > 0 && header.clientWidth < 576);
1032
1077
  };
1033
1078
  const headerResizeObserver = new ResizeObserver(updateToolbarLayout);
1034
1079
  headerResizeObserver.observe(header);
@@ -1193,7 +1238,6 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1193
1238
  };
1194
1239
 
1195
1240
  eventFilterInput.addEventListener('input', applyFilter);
1196
- eventFilterInput.addEventListener('valueChange', applyFilter);
1197
1241
  eventKindFilter.addEventListener('change', applyFilter);
1198
1242
 
1199
1243
  let newEventsCount = 0;
@@ -1205,7 +1249,7 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1205
1249
  };
1206
1250
 
1207
1251
  const markConsoleEntry = () => {
1208
- const isActive = eventsTabItem.getAttribute('is-active') === 'true';
1252
+ const isActive = tabComponent.activeTabId === tabIds.events;
1209
1253
  if (!isActive) {
1210
1254
  newEventsCount++;
1211
1255
  eventsTabItem.setAttribute('label', `Console (${newEventsCount})`);
@@ -1475,15 +1519,25 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1475
1519
  };
1476
1520
 
1477
1521
  let vanillaFileTabs;
1478
- const setEditorValue = (value, { recordHistory = true } = {}) => {
1479
- const nextValue = String(value ?? '');
1480
- if (nextValue === editorState.value) return;
1481
- activeVanillaFile = 'html';
1482
- vanillaFileTabs?.querySelectorAll('.wbc-framework-file-tab').forEach((item, index) => {
1483
- const active = index === 0;
1522
+ function activateVanillaFile(target) {
1523
+ if (target === activeVanillaFile) return;
1524
+ activeVanillaFile = target;
1525
+ vanillaFileTabs?.querySelectorAll('.wbc-framework-file-tab').forEach((item) => {
1526
+ const active = item.dataset.vanillaFile === target;
1484
1527
  item.classList.toggle('is-active', active);
1485
1528
  item.setAttribute('aria-selected', String(active));
1486
1529
  });
1530
+ if (!editorApi) return;
1531
+ isSwitchingVanillaFile = true;
1532
+ editorApi.setLanguage?.(target);
1533
+ editorApi.setValue(vanillaSources[target]);
1534
+ isSwitchingVanillaFile = false;
1535
+ }
1536
+
1537
+ const setEditorValue = (value, { recordHistory = true } = {}) => {
1538
+ const nextValue = String(value ?? '');
1539
+ if (nextValue === editorState.value) return;
1540
+ activateVanillaFile('html');
1487
1541
  isApplyingEditorValue = true;
1488
1542
  editorApi?.setValue(nextValue);
1489
1543
  isApplyingEditorValue = false;
@@ -1492,11 +1546,11 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1492
1546
 
1493
1547
  tabComponent.addEventListener('brTabChange', (event) => {
1494
1548
  const activeTabId = event.detail.tabId;
1495
- if (activeTabId !== 'code-tab') {
1549
+ if (activeTabId !== tabIds.code) {
1496
1550
  eventsTabItem.setAttribute('label', 'Console');
1497
1551
  newEventsCount = 0;
1498
1552
  }
1499
- if (frameworkTabItems.some((tab) => tab.getAttribute('tab-item-id') === activeTabId)) {
1553
+ if (frameworkTabItems.some((tab) => tab.id === activeTabId)) {
1500
1554
  refreshFrameworkEditors();
1501
1555
  }
1502
1556
  });
@@ -1517,20 +1571,10 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1517
1571
  fileTab.setAttribute('role', 'tab');
1518
1572
  fileTab.setAttribute('aria-selected', String(index === 0));
1519
1573
  fileTab.textContent = filename;
1574
+ fileTab.dataset.vanillaFile = target;
1520
1575
  fileTab.addEventListener('click', () => {
1521
1576
  if (target === activeVanillaFile) return;
1522
- vanillaSources[activeVanillaFile] = getEditorValue();
1523
- activeVanillaFile = target;
1524
- vanillaFileTabs.querySelectorAll('.wbc-framework-file-tab').forEach((item, itemIndex) => {
1525
- const active = itemIndex === vanillaFiles.findIndex(([value]) => value === target);
1526
- item.classList.toggle('is-active', active);
1527
- item.setAttribute('aria-selected', String(active));
1528
- });
1529
- if (!editorApi) return;
1530
- isSwitchingVanillaFile = true;
1531
- editorApi.setLanguage?.(target === 'html' ? 'html' : target === 'css' ? 'css' : 'javascript');
1532
- editorApi.setValue(vanillaSources[target]);
1533
- isSwitchingVanillaFile = false;
1577
+ activateVanillaFile(target);
1534
1578
  refreshEditor();
1535
1579
  });
1536
1580
  vanillaFileTabs.appendChild(fileTab);
@@ -1542,10 +1586,10 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1542
1586
  // --- ACCESSIBILITY TAB ---
1543
1587
  const a11yTabItem = document.createElement('br-tab-item');
1544
1588
  a11yTabItem.setAttribute('label', 'Acessibilidade');
1545
- a11yTabItem.setAttribute('icon', 'fas fa-universal-access');
1546
1589
  a11yTabItem.setAttribute('icon-only', 'true');
1547
1590
  a11yTabItem.setAttribute('title', 'Auditoria de acessibilidade');
1548
- a11yTabItem.setAttribute('tab-item-id', 'a11y-tab');
1591
+ a11yTabItem.id = tabIds.a11y;
1592
+ setTabIcon(a11yTabItem, 'fas fa-universal-access');
1549
1593
 
1550
1594
  const a11yWrapper = document.createElement('div');
1551
1595
  a11yWrapper.className = 'wbc-example-a11y-wrapper';
@@ -1639,8 +1683,8 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1639
1683
  };
1640
1684
 
1641
1685
  tabComponent.addEventListener('brTabChange', (event) => {
1642
- if (event.detail.tabId === 'a11y-tab') runAccessibilityAudit();
1643
- if (event.detail.tabId === 'code-tab') refreshEditor();
1686
+ if (event.detail.tabId === tabIds.a11y) runAccessibilityAudit();
1687
+ if (event.detail.tabId === tabIds.code) refreshEditor();
1644
1688
  });
1645
1689
 
1646
1690
  tabComponent.append(
@@ -1655,8 +1699,21 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1655
1699
  editorContainer.append(tabComponent);
1656
1700
 
1657
1701
  let controlsCssSource = '';
1702
+ let vanillaAssetsPreviewTimer;
1703
+ const persistDraft = () => {
1704
+ writePlaygroundDraft(path, file, {
1705
+ html: editorState.value,
1706
+ css: vanillaSources.css,
1707
+ javascript: vanillaSources.javascript,
1708
+ baselineHtml: comparisonBaseline,
1709
+ presetId: presetSelect.value || undefined,
1710
+ });
1711
+ };
1658
1712
  const renderCurrentPreview = (source) => {
1659
1713
  const managedStyle = controlsCssSource ? `<style data-playground-controls-css>${controlsCssSource}</style>` : '';
1714
+ const exampleStyle = vanillaSources.css.trim()
1715
+ ? `<style data-playground-css>${escapeInlineCode(vanillaSources.css, 'style')}</style>`
1716
+ : '';
1660
1717
  if (previewFrame) {
1661
1718
  previewFrame.classList.remove('wbc-preview-animate');
1662
1719
  void previewFrame.offsetWidth;
@@ -1664,10 +1721,9 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1664
1721
  }
1665
1722
  renderExamplePreview(
1666
1723
  preview,
1667
- `${source}${managedStyle}`,
1668
- path === 'templates',
1669
- baseScriptUrl,
1670
- activePresetScriptUrl,
1724
+ `${source}${exampleStyle}${managedStyle}`,
1725
+ path === 'templates' || path === 'templates-ai',
1726
+ vanillaSources.javascript,
1671
1727
  previewChannelId,
1672
1728
  );
1673
1729
  updatePreviewResizeA11y();
@@ -1676,7 +1732,17 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1676
1732
  const handleEditorChange = (source) => {
1677
1733
  if (isSwitchingVanillaFile) return;
1678
1734
  vanillaSources[activeVanillaFile] = String(source ?? '');
1679
- if (activeVanillaFile === 'html' && !isApplyingEditorValue) applyEditorValue(source);
1735
+ if (activeVanillaFile === 'html') {
1736
+ if (!isApplyingEditorValue) applyEditorValue(source);
1737
+ return;
1738
+ }
1739
+ // CSS/JS recriam o preview com debounce para não reexecutar o script a cada tecla.
1740
+ window.clearTimeout(vanillaAssetsPreviewTimer);
1741
+ vanillaAssetsPreviewTimer = window.setTimeout(() => {
1742
+ renderCurrentPreview(editorState.value);
1743
+ scheduleAccessibilityAudit();
1744
+ persistDraft();
1745
+ }, 600);
1680
1746
  };
1681
1747
 
1682
1748
  const applyEditorValue = (source, { recordHistory = true } = {}) => {
@@ -1688,11 +1754,7 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1688
1754
  renderCurrentPreview(source);
1689
1755
  scheduleAccessibilityAudit();
1690
1756
  renderedFilesContent[file] = { content: source.toLowerCase(), element: contentDiv };
1691
- writePlaygroundDraft(path, file, {
1692
- html: source,
1693
- baselineHtml: comparisonBaseline,
1694
- presetId: presetSelect.value || undefined,
1695
- });
1757
+ persistDraft();
1696
1758
  updateHistoryActions();
1697
1759
  updateDiff(source);
1698
1760
  if (!isUpdatingFromControls) {
@@ -1706,7 +1768,7 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1706
1768
  fullscreenBottomPanel.className = 'wbc-example-fullscreen-bottom-panel';
1707
1769
  fullscreenBottomPanel.appendChild(editorContainer);
1708
1770
 
1709
- contentDiv.append(header, preview, fullscreenBottomPanel);
1771
+ contentDiv.append(header, presetDescription, preview, fullscreenBottomPanel);
1710
1772
 
1711
1773
  initializeExample = () => {
1712
1774
  previewFrame = document.createElement('iframe');
@@ -1765,7 +1827,7 @@ function createExampleElement(path, file, text, presets = [], defaultPreset = ''
1765
1827
 
1766
1828
  customElements.whenDefined('br-tab').then(() => {
1767
1829
  requestAnimationFrame(async () => {
1768
- await tabComponent.setActiveTab?.('code-tab');
1830
+ await tabComponent.setActiveTab?.(tabIds.code);
1769
1831
  refreshEditor();
1770
1832
  });
1771
1833
  });
@@ -1891,14 +1953,7 @@ function getInitialExampleFile(path, files) {
1891
1953
  return { initialFile: 'default', requestedFile };
1892
1954
  }
1893
1955
 
1894
- function createExamplesList(
1895
- path,
1896
- results,
1897
- presets = [],
1898
- exampleConfigs = [],
1899
- initialFile = 'default',
1900
- baseScript = '',
1901
- ) {
1956
+ function createExamplesList(path, results, presets = [], exampleConfigs = [], initialFile = 'default') {
1902
1957
  let sharedElementToScroll = null;
1903
1958
  let initialPresetId = '';
1904
1959
  const examples = document.createElement('br-list');
@@ -1929,7 +1984,6 @@ function createExamplesList(
1929
1984
  availablePresets.map(({ source, ...preset }) => ({ ...preset, source: source?.text ?? null })),
1930
1985
  selectedPresetId,
1931
1986
  config?.label || file,
1932
- baseScript,
1933
1987
  );
1934
1988
  element.dataset.defaultPreset =
1935
1989
  fallbackPreset?.id || availablePresets.find((preset) => getPresetSource(preset))?.id || '';
@@ -1954,7 +2008,7 @@ function scrollToInitialExample(examples, requestedFile, sharedElementToScroll)
1954
2008
  }
1955
2009
  }
1956
2010
 
1957
- function renderLoadedPage(path, examples, results, presets = [], baseScript = '') {
2011
+ function renderLoadedPage(path, examples, results, presets = []) {
1958
2012
  const metadata = window.MENU_ITEMS?.find((item) => item.path === path);
1959
2013
  if (metadata) {
1960
2014
  CONTENT_ELEMENT.appendChild(createComponentHeading(metadata));
@@ -1966,7 +2020,7 @@ function renderLoadedPage(path, examples, results, presets = [], baseScript = ''
1966
2020
  examples: examplesList,
1967
2021
  initialPresetId,
1968
2022
  sharedElementToScroll,
1969
- } = createExamplesList(path, results, presets, examples, initialFile, baseScript);
2023
+ } = createExamplesList(path, results, presets, examples, initialFile);
1970
2024
  CONTENT_ELEMENT.appendChild(examplesList);
1971
2025
  if (initialFile && exampleIds.includes(initialFile)) {
1972
2026
  const targetHash = getExampleHash(initialFile, initialPresetId || undefined);
@@ -2030,7 +2084,7 @@ async function fetchPlaygroundSource(path, source) {
2030
2084
  throw lastError;
2031
2085
  }
2032
2086
 
2033
- function loadPage(path, examples, presets = [], baseScript = '') {
2087
+ function loadPage(path, examples, presets = [], baseScript = '', baseStyle = '') {
2034
2088
  const loadGeneration = ++pageLoadGeneration;
2035
2089
  cleanupExamples();
2036
2090
  window.WBCActiveRecorders = [];
@@ -2051,6 +2105,26 @@ function loadPage(path, examples, presets = [], baseScript = '') {
2051
2105
  console.warn(`Não foi possível carregar o preset ${path}/${source}:`, error);
2052
2106
  }),
2053
2107
  );
2108
+ // JS e CSS do preset ficam em arquivos irmãos do HTML; `index.js`/`index.css`
2109
+ // valem para todos os presets do componente e vêm antes do arquivo do preset.
2110
+ const assetSources = new Map();
2111
+ const uniqueAssetSources = [
2112
+ ...new Set([baseScript, baseStyle, ...presets.flatMap(({ script, style }) => [script, style])].filter(Boolean)),
2113
+ ];
2114
+ const assetPromises = uniqueAssetSources.map((source) =>
2115
+ fetchPlaygroundSource(path, source)
2116
+ .then((text) => {
2117
+ assetSources.set(source, text.trim());
2118
+ })
2119
+ .catch((error) => {
2120
+ console.warn(`Não foi possível carregar ${path}/${source}:`, error);
2121
+ }),
2122
+ );
2123
+ const joinAssets = (...sources) =>
2124
+ sources
2125
+ .map((source) => assetSources.get(source))
2126
+ .filter(Boolean)
2127
+ .join('\n\n');
2054
2128
  const promises = pageExamples.map((example) => {
2055
2129
  const selectedPreset = getPresetForExample(path, example, presets);
2056
2130
  const source = getPresetSource(selectedPreset);
@@ -2061,7 +2135,7 @@ function loadPage(path, examples, presets = [], baseScript = '') {
2061
2135
  return fetchPlaygroundSource(path, source).then((text) => ({ file: example.id, text }));
2062
2136
  });
2063
2137
 
2064
- Promise.all([Promise.all(promises), Promise.all(presetPromises)])
2138
+ Promise.all([Promise.all(promises), Promise.all(presetPromises), Promise.all(assetPromises)])
2065
2139
  .then(([results]) => {
2066
2140
  if (loadGeneration !== pageLoadGeneration) return;
2067
2141
  const loadedPresets = presets.map((preset) => ({
@@ -2069,8 +2143,10 @@ function loadPage(path, examples, presets = [], baseScript = '') {
2069
2143
  source: presetSources.has(preset.source)
2070
2144
  ? { text: presetSources.get(preset.source), path: preset.source }
2071
2145
  : null,
2146
+ javascript: joinAssets(baseScript, preset.script),
2147
+ css: joinAssets(baseStyle, preset.style),
2072
2148
  }));
2073
- renderLoadedPage(path, pageExamples, results, loadedPresets, baseScript);
2149
+ renderLoadedPage(path, pageExamples, results, loadedPresets);
2074
2150
  })
2075
2151
  .catch((error) => {
2076
2152
  console.log('Erro ao carregar a página:', error);
@@ -2179,7 +2255,8 @@ function processMenuItems(menuItems, menuBody, currentPath) {
2179
2255
  link.active = true;
2180
2256
  link.classList.add('active');
2181
2257
  }
2182
- if (Array.isArray(page.examples)) loadPage(page.path, page.examples, page.presets, page.baseScript);
2258
+ if (Array.isArray(page.examples))
2259
+ loadPage(page.path, page.examples, page.presets, page.baseScript, page.baseStyle);
2183
2260
  }
2184
2261
  });
2185
2262
  }
@@ -2255,7 +2332,7 @@ function loadPageFromURL() {
2255
2332
  if (currentPath.trim().length === 0 && menuItems.length > 0) {
2256
2333
  const firstPage = menuItems.find((p) => p?.path && Array.isArray(p.examples));
2257
2334
  if (firstPage) {
2258
- loadPage(firstPage.path, firstPage.examples, firstPage.presets, firstPage.baseScript);
2335
+ loadPage(firstPage.path, firstPage.examples, firstPage.presets, firstPage.baseScript, firstPage.baseStyle);
2259
2336
  const firstLink = menuBody
2260
2337
  ? Array.from(menuBody.children).find((item) => item.getAttribute('href') === `/${firstPage.path}`)
2261
2338
  : null;
@@ -6,6 +6,8 @@
6
6
  * `pageLoader.js` — a divisão é puramente física, sem mudança de comportamento.
7
7
  */
8
8
 
9
+ const OWN_MAIN_LANDMARK_PATTERN = /<main\b|\brole\s*=\s*["']?main\b/i;
10
+
9
11
  // Usado só por `renderExamplePreview` (abaixo).
10
12
  const DEV_SERVER_CONNECTOR_IFRAME_RE =
11
13
  /<iframe\b[^>]*title=["']Stencil Dev Server Connector[^"']*["'][\s\S]*?<\/iframe>/gi;
@@ -13,12 +15,12 @@ const DEV_SERVER_CONNECTOR_IFRAME_RE =
13
15
  // Cache do fonte do axe-core; privado de `loadAxeSource`.
14
16
  let axeSourcePromise;
15
17
 
16
- function escapeHtmlAttribute(value) {
17
- return String(value)
18
- .replaceAll('&', '&amp;')
19
- .replaceAll('"', '&quot;')
20
- .replaceAll('<', '&lt;')
21
- .replaceAll('>', '&gt;');
18
+ /**
19
+ * Impede que o conteúdo editado feche a tag `<script>`/`<style>` em que é
20
+ * incorporado no `srcdoc` do preview.
21
+ */
22
+ function escapeInlineCode(value, tagName) {
23
+ return String(value).replace(new RegExp(`</(${tagName})`, 'gi'), '<\\/$1');
22
24
  }
23
25
 
24
26
  function removePresetScripts(previewFrame) {
@@ -27,14 +29,7 @@ function removePresetScripts(previewFrame) {
27
29
  });
28
30
  }
29
31
 
30
- function renderExamplePreview(
31
- previewElement,
32
- source,
33
- edgeToEdge = false,
34
- baseScriptUrl = '',
35
- presetScriptUrl = '',
36
- previewChannelId = '',
37
- ) {
32
+ function renderExamplePreview(previewElement, source, edgeToEdge = false, javascript = '', previewChannelId = '') {
38
33
  const frame = previewElement.querySelector('iframe');
39
34
  if (!frame) return;
40
35
 
@@ -47,11 +42,11 @@ function renderExamplePreview(
47
42
  componentBundleUrl.searchParams.set('preview-version', String(Date.now()));
48
43
  const componentBundle = componentBundleUrl.href;
49
44
  const frameSource = rewritePreviewAssetPaths(stripDevServerConnector(source), baseUrl);
50
- const baseScript = baseScriptUrl
51
- ? `\n <script type="module" data-wbc-base-script src="${escapeHtmlAttribute(baseScriptUrl)}"></script>`
52
- : '';
53
- const presetScript = presetScriptUrl
54
- ? `\n <script type="module" data-wbc-preset-script src="${escapeHtmlAttribute(presetScriptUrl)}"></script>`
45
+ // Templates de página já declaram o próprio <main>; não aninha outro landmark principal.
46
+ const previewRootTag = OWN_MAIN_LANDMARK_PATTERN.test(frameSource) ? 'div' : 'main';
47
+ // Executado depois do bundle, como `index.js` + `<preset>.js` exibidos na aba JS.
48
+ const presetScript = javascript.trim()
49
+ ? `\n <script type="module" data-wbc-preset-script>${escapeInlineCode(javascript, 'script')}</script>`
55
50
  : '';
56
51
 
57
52
  frame.srcdoc = `<!doctype html>
@@ -59,6 +54,7 @@ function renderExamplePreview(
59
54
  <head>
60
55
  <meta charset="UTF-8">
61
56
  <meta name="viewport" content="width=device-width, initial-scale=1">
57
+ <title>Preview do exemplo - GovBR-DS</title>
62
58
  <base href="${window.location.href}">
63
59
  <link rel="stylesheet" href="${new URL(`${baseUrl}/assets/core.min.css`, window.location.href).href}">
64
60
  <link rel="stylesheet" href="${new URL(`${baseUrl}/assets/fonts/rawline/400.css`, window.location.href).href}">
@@ -82,7 +78,7 @@ function renderExamplePreview(
82
78
  html[data-wbc-reduced-motion='true'] *::after { animation: none !important; scroll-behavior: auto !important; transition: none !important; }
83
79
  </style>
84
80
  </head>
85
- <body${edgeToEdge ? ' class="wbc-preview-edge-to-edge"' : ''}><main data-wbc-preview-content>${frameSource}</main>
81
+ <body${edgeToEdge ? ' class="wbc-preview-edge-to-edge"' : ''}><${previewRootTag} data-wbc-preview-content>${frameSource}</${previewRootTag}>
86
82
  <style id="wbc-preview-reduced-motion">
87
83
  @media (prefers-reduced-motion: reduce) {
88
84
  *, *::before, *::after {
@@ -93,7 +89,6 @@ function renderExamplePreview(
93
89
  }
94
90
  </style>
95
91
  <script type="module" src="${componentBundle}"></script>
96
- ${baseScript}
97
92
  ${presetScript}
98
93
  <script>
99
94
  (() => {
@@ -102,6 +97,21 @@ function renderExamplePreview(
102
97
  window.addEventListener('keydown', (event) => {
103
98
  if (event.key === 'Escape') sendToParent({ type: 'wbc-preview-exit-fullscreen' });
104
99
  });
100
+ // O <base> aponta para a página do playground; sem isto, links "#ancora" (inclusive os
101
+ // renderizados no Shadow DOM dos componentes) navegariam o iframe para fora do exemplo.
102
+ window.addEventListener('click', (event) => {
103
+ if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey) return;
104
+ const anchor = event.composedPath().find((node) => node instanceof HTMLAnchorElement && node.hasAttribute('href'));
105
+ const href = anchor?.getAttribute('href') || '';
106
+ if (!href.startsWith('#')) return;
107
+ event.preventDefault();
108
+ const id = decodeURIComponent(href.slice(1));
109
+ location.hash = href;
110
+ const target = id ? document.getElementById(id) : null;
111
+ target?.scrollIntoView();
112
+ if (target && !target.matches('a[href], button, input, select, textarea, [tabindex]')) target.setAttribute('tabindex', '-1');
113
+ target?.focus({ preventScroll: true });
114
+ }, true);
105
115
  const overlayContentSelector =
106
116
  '[part="open-panel"], [part="default-panel"], [part="body"], .cookiebar-body, .content, .br-modal';
107
117
  const getOverlayHeight = (overlay) => {
@@ -449,7 +459,7 @@ function renderExamplePreview(
449
459
  if (mode === 'dark') document.documentElement.dataset.wbcTheme = value ? 'dark' : 'light';
450
460
  scheduleHeight();
451
461
  };
452
- const stateAttributes = ['disabled', 'loading', 'state', 'status', 'selected', 'active', 'invalid'];
462
+ const stateAttributes = ['disabled', 'loading', 'state', 'selected', 'active', 'invalid'];
453
463
  const stateSnapshots = new WeakMap();
454
464
  const applyState = (state) => {
455
465
  getAllElements().filter((element) => element.localName.includes('-')).forEach((element) => {
@@ -465,10 +475,8 @@ function renderExamplePreview(
465
475
  });
466
476
  if (state === 'disabled') element.setAttribute('disabled', '');
467
477
  if (state === 'loading') element.setAttribute('loading', '');
468
- if (state === 'error') {
469
- element.setAttribute('state', 'error');
470
- element.setAttribute('status', 'error');
471
- }
478
+ // Estado de erro canônico dos componentes (BrFeedbackState).
479
+ if (state === 'error') element.setAttribute('state', 'danger');
472
480
  if (state === 'selected') {
473
481
  element.setAttribute('selected', '');
474
482
  element.setAttribute('active', '');
@@ -623,10 +631,11 @@ function getFrameworkFiles(source, framework) {
623
631
  function createFrameworkTab(label, icon, tabId, source, framework, { editable = false } = {}) {
624
632
  const tab = document.createElement('br-tab-item');
625
633
  tab.setAttribute('label', label);
626
- tab.setAttribute('icon', icon);
634
+ // O ícone por classe vai no slot `icon-{id}` do br-tab (aplicado por setTabIcon no pageLoader).
635
+ tab.dataset.icon = icon;
627
636
  tab.setAttribute('icon-only', 'true');
628
637
  tab.setAttribute('title', `Código ${label}`);
629
- tab.setAttribute('tab-item-id', tabId);
638
+ tab.id = tabId;
630
639
  tab.dataset.framework = framework;
631
640
  tab.dataset.editable = String(editable);
632
641