@govbr-ds/webcomponents 2.0.0-next.61 → 2.0.0-next.63

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 (277) hide show
  1. package/dist/cjs/br-checkbox.br-input.br-radio.entry.cjs.js.map +1 -1
  2. package/dist/cjs/br-checkbox_3.cjs.entry.js +17 -28
  3. package/dist/cjs/br-collapse.br-list.entry.cjs.js.map +1 -1
  4. package/dist/cjs/br-collapse_2.cjs.entry.js +10 -15
  5. package/dist/cjs/br-datetime-picker.cjs.entry.js +18 -31
  6. package/dist/cjs/br-datetime-picker.entry.cjs.js.map +1 -1
  7. package/dist/cjs/br-dropdown.br-select.entry.cjs.js.map +1 -1
  8. package/dist/cjs/br-dropdown_2.cjs.entry.js +73 -56
  9. package/dist/cjs/br-header-list.cjs.entry.js +6 -13
  10. package/dist/cjs/br-header-list.entry.cjs.js.map +1 -1
  11. package/dist/cjs/br-header.cjs.entry.js +2 -5
  12. package/dist/cjs/br-header.entry.cjs.js.map +1 -1
  13. package/dist/cjs/br-item.cjs.entry.js +3 -6
  14. package/dist/cjs/br-item.entry.cjs.js.map +1 -1
  15. package/dist/cjs/br-message.cjs.entry.js +13 -16
  16. package/dist/cjs/br-message.entry.cjs.js.map +1 -1
  17. package/dist/cjs/br-modal.cjs.entry.js +123 -24
  18. package/dist/cjs/br-modal.entry.cjs.js.map +1 -1
  19. package/dist/cjs/br-scrim.cjs.entry.js +108 -25
  20. package/dist/cjs/br-scrim.entry.cjs.js.map +1 -1
  21. package/dist/cjs/br-skip-link.cjs.entry.js +24 -29
  22. package/dist/cjs/br-skip-link.entry.cjs.js.map +1 -1
  23. package/dist/cjs/br-skiplink-item.cjs.entry.js +32 -37
  24. package/dist/cjs/br-skiplink-item.entry.cjs.js.map +1 -1
  25. package/dist/cjs/br-step.br-step-item.entry.cjs.js.map +1 -1
  26. package/dist/cjs/br-step_2.cjs.entry.js +33 -56
  27. package/dist/cjs/br-switch.cjs.entry.js +3 -6
  28. package/dist/cjs/br-switch.entry.cjs.js.map +1 -1
  29. package/dist/cjs/br-textarea.cjs.entry.js +5 -8
  30. package/dist/cjs/br-textarea.entry.cjs.js.map +1 -1
  31. package/dist/cjs/br-tooltip.cjs.entry.js +1 -2
  32. package/dist/cjs/br-tooltip.entry.cjs.js.map +1 -1
  33. package/dist/cjs/br-wizard-panel.cjs.entry.js +6 -13
  34. package/dist/cjs/br-wizard-panel.entry.cjs.js.map +1 -1
  35. package/dist/cjs/br-wizard.cjs.entry.js +147 -182
  36. package/dist/cjs/br-wizard.entry.cjs.js.map +1 -1
  37. package/dist/cjs/{floating-ui-D_WzFT9x.js → floating-ui-CkTJEp-y.js} +11 -15
  38. package/dist/{esm/floating-ui-DBIzWbO2.js.map → cjs/floating-ui-CkTJEp-y.js.map} +1 -1
  39. package/dist/cjs/loader.cjs.js +1 -1
  40. package/dist/cjs/webcomponents.cjs.js +1 -1
  41. package/dist/collection/components/checkbox/checkbox.js +9 -16
  42. package/dist/collection/components/checkbox/checkbox.js.map +1 -1
  43. package/dist/collection/components/collapse/collapse.js +10 -15
  44. package/dist/collection/components/collapse/collapse.js.map +1 -1
  45. package/dist/collection/components/datetime-picker/datetime-picker.js +18 -31
  46. package/dist/collection/components/datetime-picker/datetime-picker.js.map +1 -1
  47. package/dist/collection/components/dropdown/dropdown.js +13 -20
  48. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  49. package/dist/collection/components/header/header-list/header-list.js +6 -13
  50. package/dist/collection/components/header/header-list/header-list.js.map +1 -1
  51. package/dist/collection/components/header/header.js +2 -5
  52. package/dist/collection/components/header/header.js.map +1 -1
  53. package/dist/collection/components/item/item.js +3 -6
  54. package/dist/collection/components/item/item.js.map +1 -1
  55. package/dist/collection/components/message/message.js +13 -16
  56. package/dist/collection/components/message/message.js.map +1 -1
  57. package/dist/collection/components/modal/modal.js +156 -46
  58. package/dist/collection/components/modal/modal.js.map +1 -1
  59. package/dist/collection/components/radio/radio.js +8 -13
  60. package/dist/collection/components/radio/radio.js.map +1 -1
  61. package/dist/collection/components/scrim/scrim.js +108 -25
  62. package/dist/collection/components/scrim/scrim.js.map +1 -1
  63. package/dist/collection/components/select/select.js +79 -36
  64. package/dist/collection/components/select/select.js.map +1 -1
  65. package/dist/collection/components/skip-link/skip-link-item/skip-link-item.js +32 -37
  66. package/dist/collection/components/skip-link/skip-link-item/skip-link-item.js.map +1 -1
  67. package/dist/collection/components/skip-link/skip-link.js +24 -29
  68. package/dist/collection/components/skip-link/skip-link.js.map +1 -1
  69. package/dist/collection/components/step/step-item/step-item.js +13 -26
  70. package/dist/collection/components/step/step-item/step-item.js.map +1 -1
  71. package/dist/collection/components/step/step.js +20 -31
  72. package/dist/collection/components/step/step.js.map +1 -1
  73. package/dist/collection/components/switch/switch.js +3 -6
  74. package/dist/collection/components/switch/switch.js.map +1 -1
  75. package/dist/collection/components/textarea/textarea.js +5 -8
  76. package/dist/collection/components/textarea/textarea.js.map +1 -1
  77. package/dist/collection/components/wizard/wizard-panel/wizard-panel.js +6 -13
  78. package/dist/collection/components/wizard/wizard-panel/wizard-panel.js.map +1 -1
  79. package/dist/collection/components/wizard/wizard.js +147 -182
  80. package/dist/collection/components/wizard/wizard.js.map +1 -1
  81. package/dist/collection/pages/components/modal/index.js +1 -53
  82. package/dist/collection/utils/floating-ui.js +9 -12
  83. package/dist/collection/utils/floating-ui.js.map +1 -1
  84. package/dist/components/br-breadcrumb.js +3 -3
  85. package/dist/components/br-checkbox.js +4 -4
  86. package/dist/components/br-checkgroup.js +1 -1
  87. package/dist/components/br-collapse.js +4 -4
  88. package/dist/components/br-datetime-picker.js +1981 -1995
  89. package/dist/components/br-datetime-picker.js.map +1 -1
  90. package/dist/components/br-dropdown.js +1 -1
  91. package/dist/components/br-footer-category.js +3 -3
  92. package/dist/components/br-footer-item.js +1 -1
  93. package/dist/components/br-header-function.js +1 -1
  94. package/dist/components/br-header-link.js +1 -1
  95. package/dist/components/br-header-list.js +31 -39
  96. package/dist/components/br-header-list.js.map +1 -1
  97. package/dist/components/br-header.js +63 -67
  98. package/dist/components/br-header.js.map +1 -1
  99. package/dist/components/br-item.js +1 -1
  100. package/dist/components/br-list.js +3 -3
  101. package/dist/components/br-message.js +28 -32
  102. package/dist/components/br-message.js.map +1 -1
  103. package/dist/components/br-modal.js +140 -49
  104. package/dist/components/br-modal.js.map +1 -1
  105. package/dist/components/br-pagination.js +7 -7
  106. package/dist/components/br-radio.js +1 -1
  107. package/dist/components/br-scrim.js +112 -43
  108. package/dist/components/br-scrim.js.map +1 -1
  109. package/dist/components/br-select.js +3 -3
  110. package/dist/components/br-skip-link.js +38 -44
  111. package/dist/components/br-skip-link.js.map +1 -1
  112. package/dist/components/br-skiplink-item.js +55 -61
  113. package/dist/components/br-skiplink-item.js.map +1 -1
  114. package/dist/components/br-step-item.js +4 -4
  115. package/dist/components/br-step.js +4 -4
  116. package/dist/components/br-switch.js +12 -16
  117. package/dist/components/br-switch.js.map +1 -1
  118. package/dist/components/br-textarea.js +14 -18
  119. package/dist/components/br-textarea.js.map +1 -1
  120. package/dist/components/br-tooltip.js +1 -1
  121. package/dist/components/br-wizard-panel.js +13 -21
  122. package/dist/components/br-wizard-panel.js.map +1 -1
  123. package/dist/components/br-wizard.js +190 -228
  124. package/dist/components/br-wizard.js.map +1 -1
  125. package/dist/components/{p-Cc75U9ZX.js → p-B_YesJM8.js} +26 -34
  126. package/dist/components/{p-Cc75U9ZX.js.map → p-B_YesJM8.js.map} +1 -1
  127. package/dist/components/{p-xFn46pdm.js → p-Bc03PTAW.js} +27 -39
  128. package/dist/components/{p-xFn46pdm.js.map → p-Bc03PTAW.js.map} +1 -1
  129. package/dist/components/{p-DzKEfDGA.js → p-Bri6ECVa.js} +27 -33
  130. package/dist/components/{p-DzKEfDGA.js.map → p-Bri6ECVa.js.map} +1 -1
  131. package/dist/components/{p-BZ8BetvD.js → p-CJSXIVVe.js} +17 -23
  132. package/dist/components/{p-BZ8BetvD.js.map → p-CJSXIVVe.js.map} +1 -1
  133. package/dist/components/{p-D9c7NikS.js → p-CWRBs6PD.js} +24 -38
  134. package/dist/components/{p-D9c7NikS.js.map → p-CWRBs6PD.js.map} +1 -1
  135. package/dist/components/{p-D0dPo1K5.js → p-CwtLw60M.js} +12 -16
  136. package/dist/components/{p-D0dPo1K5.js.map → p-CwtLw60M.js.map} +1 -1
  137. package/dist/components/{p-z1PVVVFI.js → p-DW63EY0U.js} +27 -35
  138. package/dist/components/{p-z1PVVVFI.js.map → p-DW63EY0U.js.map} +1 -1
  139. package/dist/components/{p-7kxAU6Gr.js → p-DdjKNpU3.js} +92 -72
  140. package/dist/components/p-DdjKNpU3.js.map +1 -0
  141. package/dist/{webcomponents/p-B4au_byv.js → components/p-k0WZfTfL.js} +121 -124
  142. package/dist/components/{p-B4au_byv.js.map → p-k0WZfTfL.js.map} +1 -1
  143. package/dist/components/{p-OKkBxn1z.js → p-lIb35q2K.js} +3 -3
  144. package/dist/custom-elements.json +1613 -430
  145. package/dist/esm/br-checkbox.br-input.br-radio.entry.js.map +1 -1
  146. package/dist/esm/br-checkbox_3.entry.js +17 -28
  147. package/dist/esm/br-collapse.br-list.entry.js.map +1 -1
  148. package/dist/esm/br-collapse_2.entry.js +10 -15
  149. package/dist/esm/br-datetime-picker.entry.js +18 -31
  150. package/dist/esm/br-datetime-picker.entry.js.map +1 -1
  151. package/dist/esm/br-dropdown.br-select.entry.js.map +1 -1
  152. package/dist/esm/br-dropdown_2.entry.js +73 -56
  153. package/dist/esm/br-header-list.entry.js +6 -13
  154. package/dist/esm/br-header-list.entry.js.map +1 -1
  155. package/dist/esm/br-header.entry.js +2 -5
  156. package/dist/esm/br-header.entry.js.map +1 -1
  157. package/dist/esm/br-item.entry.js +3 -6
  158. package/dist/esm/br-item.entry.js.map +1 -1
  159. package/dist/esm/br-message.entry.js +13 -16
  160. package/dist/esm/br-message.entry.js.map +1 -1
  161. package/dist/esm/br-modal.entry.js +123 -24
  162. package/dist/esm/br-modal.entry.js.map +1 -1
  163. package/dist/esm/br-scrim.entry.js +108 -25
  164. package/dist/esm/br-scrim.entry.js.map +1 -1
  165. package/dist/esm/br-skip-link.entry.js +24 -29
  166. package/dist/esm/br-skip-link.entry.js.map +1 -1
  167. package/dist/esm/br-skiplink-item.entry.js +32 -37
  168. package/dist/esm/br-skiplink-item.entry.js.map +1 -1
  169. package/dist/esm/br-step.br-step-item.entry.js.map +1 -1
  170. package/dist/esm/br-step_2.entry.js +33 -56
  171. package/dist/esm/br-switch.entry.js +3 -6
  172. package/dist/esm/br-switch.entry.js.map +1 -1
  173. package/dist/esm/br-textarea.entry.js +5 -8
  174. package/dist/esm/br-textarea.entry.js.map +1 -1
  175. package/dist/esm/br-tooltip.entry.js +1 -2
  176. package/dist/esm/br-tooltip.entry.js.map +1 -1
  177. package/dist/esm/br-wizard-panel.entry.js +6 -13
  178. package/dist/esm/br-wizard-panel.entry.js.map +1 -1
  179. package/dist/esm/br-wizard.entry.js +147 -182
  180. package/dist/esm/br-wizard.entry.js.map +1 -1
  181. package/dist/esm/{floating-ui-DBIzWbO2.js → floating-ui-k0WZfTfL.js} +11 -15
  182. package/dist/{cjs/floating-ui-D_WzFT9x.js.map → esm/floating-ui-k0WZfTfL.js.map} +1 -1
  183. package/dist/esm/loader.js +1 -1
  184. package/dist/esm/webcomponents.js +1 -1
  185. package/dist/hydrate/index.js +634 -578
  186. package/dist/hydrate/index.mjs +634 -578
  187. package/dist/types/components/modal/modal.d.ts +46 -4
  188. package/dist/types/components/scrim/scrim.d.ts +39 -1
  189. package/dist/types/components/select/select.d.ts +5 -0
  190. package/dist/types/components.d.ts +21 -11
  191. package/dist/webcomponents/br-checkbox.br-input.br-radio.entry.esm.js.map +1 -1
  192. package/dist/webcomponents/br-collapse.br-list.entry.esm.js.map +1 -1
  193. package/dist/webcomponents/br-datetime-picker.entry.esm.js.map +1 -1
  194. package/dist/webcomponents/br-dropdown.br-select.entry.esm.js.map +1 -1
  195. package/dist/webcomponents/br-header-list.entry.esm.js.map +1 -1
  196. package/dist/webcomponents/br-header.entry.esm.js.map +1 -1
  197. package/dist/webcomponents/br-item.entry.esm.js.map +1 -1
  198. package/dist/webcomponents/br-message.entry.esm.js.map +1 -1
  199. package/dist/webcomponents/br-modal.entry.esm.js.map +1 -1
  200. package/dist/webcomponents/br-scrim.entry.esm.js.map +1 -1
  201. package/dist/webcomponents/br-skip-link.entry.esm.js.map +1 -1
  202. package/dist/webcomponents/br-skiplink-item.entry.esm.js.map +1 -1
  203. package/dist/webcomponents/br-step.br-step-item.entry.esm.js.map +1 -1
  204. package/dist/webcomponents/br-switch.entry.esm.js.map +1 -1
  205. package/dist/webcomponents/br-textarea.entry.esm.js.map +1 -1
  206. package/dist/webcomponents/br-tooltip.entry.esm.js.map +1 -1
  207. package/dist/webcomponents/br-wizard-panel.entry.esm.js.map +1 -1
  208. package/dist/webcomponents/br-wizard.entry.esm.js.map +1 -1
  209. package/dist/webcomponents/{p-2fe329d6.entry.js → p-10e25a32.entry.js} +28 -34
  210. package/dist/webcomponents/p-10e25a32.entry.js.map +1 -0
  211. package/dist/webcomponents/{p-097912c2.entry.js → p-1991135d.entry.js} +30 -36
  212. package/dist/webcomponents/p-1991135d.entry.js.map +1 -0
  213. package/dist/webcomponents/{p-61e5421b.entry.js → p-27eb10f9.entry.js} +57 -61
  214. package/dist/webcomponents/p-27eb10f9.entry.js.map +1 -0
  215. package/dist/webcomponents/{p-5070161f.entry.js → p-30af66b3.entry.js} +45 -51
  216. package/dist/webcomponents/p-30af66b3.entry.js.map +1 -0
  217. package/dist/webcomponents/{p-9464b692.entry.js → p-336071a5.entry.js} +2 -4
  218. package/dist/webcomponents/p-336071a5.entry.js.map +1 -0
  219. package/dist/webcomponents/{p-8a034433.entry.js → p-462c5647.entry.js} +20 -24
  220. package/dist/webcomponents/p-462c5647.entry.js.map +1 -0
  221. package/dist/webcomponents/{p-d674cee3.entry.js → p-46dfc3ee.entry.js} +12 -16
  222. package/dist/webcomponents/p-46dfc3ee.entry.js.map +1 -0
  223. package/dist/webcomponents/{p-821b896c.entry.js → p-56aabe89.entry.js} +36 -44
  224. package/dist/webcomponents/p-56aabe89.entry.js.map +1 -0
  225. package/dist/webcomponents/{p-a615baaa.entry.js → p-5710a3e9.entry.js} +41 -65
  226. package/dist/webcomponents/p-5710a3e9.entry.js.map +1 -0
  227. package/dist/webcomponents/{p-1799a082.entry.js → p-6a9d2a0b.entry.js} +1996 -2010
  228. package/dist/webcomponents/p-6a9d2a0b.entry.js.map +1 -0
  229. package/dist/webcomponents/{p-8ad1f003.entry.js → p-83001853.entry.js} +175 -213
  230. package/dist/webcomponents/p-83001853.entry.js.map +1 -0
  231. package/dist/webcomponents/{p-28dba962.entry.js → p-90401ecd.entry.js} +124 -34
  232. package/dist/webcomponents/p-90401ecd.entry.js.map +1 -0
  233. package/dist/webcomponents/{p-e7b38c63.entry.js → p-a2eec4fb.entry.js} +112 -43
  234. package/dist/webcomponents/p-a2eec4fb.entry.js.map +1 -0
  235. package/dist/webcomponents/{p-d6475852.entry.js → p-c1b0a116.entry.js} +11 -19
  236. package/dist/webcomponents/p-c1b0a116.entry.js.map +1 -0
  237. package/dist/webcomponents/{p-c90a089a.entry.js → p-ca2d95f7.entry.js} +96 -83
  238. package/dist/webcomponents/p-ca2d95f7.entry.js.map +1 -0
  239. package/dist/webcomponents/{p-7ff6698f.entry.js → p-cfa86a23.entry.js} +10 -14
  240. package/dist/webcomponents/p-cfa86a23.entry.js.map +1 -0
  241. package/dist/webcomponents/{p-abc0ecbe.entry.js → p-e5875d3d.entry.js} +10 -14
  242. package/dist/webcomponents/p-e5875d3d.entry.js.map +1 -0
  243. package/dist/webcomponents/{p-0bfb0edf.entry.js → p-f2ea0d7e.entry.js} +133 -145
  244. package/dist/webcomponents/p-f2ea0d7e.entry.js.map +1 -0
  245. package/dist/{components/p-B4au_byv.js → webcomponents/p-k0WZfTfL.js} +121 -124
  246. package/dist/webcomponents/{p-B4au_byv.js.map → p-k0WZfTfL.js.map} +1 -1
  247. package/dist/webcomponents/webcomponents.esm.js +1 -1
  248. package/dist/webcomponents.html-custom-data.json +1708 -349
  249. package/package.json +1 -1
  250. package/dist/cjs/tslib.es6-CF44W9Bn.js +0 -42
  251. package/dist/cjs/tslib.es6-CF44W9Bn.js.map +0 -1
  252. package/dist/components/p-7kxAU6Gr.js.map +0 -1
  253. package/dist/components/p-DIPMDb5E.js +0 -55
  254. package/dist/components/p-DIPMDb5E.js.map +0 -1
  255. package/dist/esm/tslib.es6-DIPMDb5E.js +0 -40
  256. package/dist/esm/tslib.es6-DIPMDb5E.js.map +0 -1
  257. package/dist/webcomponents/p-097912c2.entry.js.map +0 -1
  258. package/dist/webcomponents/p-0bfb0edf.entry.js.map +0 -1
  259. package/dist/webcomponents/p-1799a082.entry.js.map +0 -1
  260. package/dist/webcomponents/p-28dba962.entry.js.map +0 -1
  261. package/dist/webcomponents/p-2fe329d6.entry.js.map +0 -1
  262. package/dist/webcomponents/p-5070161f.entry.js.map +0 -1
  263. package/dist/webcomponents/p-61e5421b.entry.js.map +0 -1
  264. package/dist/webcomponents/p-7ff6698f.entry.js.map +0 -1
  265. package/dist/webcomponents/p-821b896c.entry.js.map +0 -1
  266. package/dist/webcomponents/p-8a034433.entry.js.map +0 -1
  267. package/dist/webcomponents/p-8ad1f003.entry.js.map +0 -1
  268. package/dist/webcomponents/p-9464b692.entry.js.map +0 -1
  269. package/dist/webcomponents/p-DIPMDb5E.js +0 -55
  270. package/dist/webcomponents/p-DIPMDb5E.js.map +0 -1
  271. package/dist/webcomponents/p-a615baaa.entry.js.map +0 -1
  272. package/dist/webcomponents/p-abc0ecbe.entry.js.map +0 -1
  273. package/dist/webcomponents/p-c90a089a.entry.js.map +0 -1
  274. package/dist/webcomponents/p-d6475852.entry.js.map +0 -1
  275. package/dist/webcomponents/p-d674cee3.entry.js.map +0 -1
  276. package/dist/webcomponents/p-e7b38c63.entry.js.map +0 -1
  277. /package/dist/components/{p-OKkBxn1z.js.map → p-lIb35q2K.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../../../../packages/webcomponents/src/components/select/select.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AttachInternals, Component, Element, Event, EventEmitter, h, Method, Prop, State, Watch } from '@stencil/core'\n\nimport { CssClassMap } from '../../utils/interfaces'\n\n/**\n * ## Design System\n *\n * Para a documentação completa de design, incluindo diretrizes de uso, acessibilidade e exemplos visuais, consulte o [Design System do GovBR](https://www.gov.br/ds/components/select?tab=designer).\n */\n@Component({\n tag: 'br-select',\n styleUrl: 'select.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class Select {\n /**\n * Referência ao elemento host do componente.\n * Utilize esta propriedade para acessar e manipular o elemento do DOM associado ao componente.\n */\n @Element() el: HTMLBrSelectElement\n\n @AttachInternals() elementInternals: ElementInternals\n\n /**\n * Rótulo que indica o tipo de informação que deve ser selecionada.\n */\n @Prop({ reflect: true }) label: string\n\n /**\n * Texto auxiliar exibido antes de uma seleção.\n */\n @Prop({ reflect: true }) placeholder: string = ''\n\n /**\n * Habilita o modo múltiplo para selecionar várias opções.\n */\n @Prop({ reflect: true }) isMultiple: boolean = false\n\n /**\n * Define as opções disponíveis no componente de seleção.\n * Se uma string for fornecida, ela será convertida internamente para um array via `JSON.parse`. Caso o formato seja inválido, um erro será registrado e as opções serão definidas como um array vazio.\n * Exemplo de uso:\n * ```typescript\n * options='[{\"label\": \"Sim\", \"value\": \"1\"}, {\"label\": \"Não\", \"value\": \"0\"}]'\n * // ou\n * options=[{ label: \"Sim\", value: \"1\" }, { label: \"Não\", value: \"0\" }]\n * ```\n */\n @Prop({ reflect: true }) options:\n | string\n | {\n label: string\n value: string\n selected?: boolean\n }[] = []\n\n /**\n * Rótulo para selecionar todas as opções.\n */\n @Prop({ reflect: true }) selectAllLabel: string = 'Selecionar todos'\n\n /**\n * Rótulo para desmarcar todas as opções.\n */\n @Prop({ reflect: true }) unselectAllLabel: string = 'Desselecionar todos'\n\n /**\n * Exibe o ícone de busca no campo de entrada.\n */\n @Prop({ reflect: true }) showSearchIcon: boolean = false\n\n /**\n * Indica se a listagem de itens do select está expandida\n */\n @Prop({ reflect: true }) isOpen: boolean = false\n\n /**\n * Exibe o rótulo e o controle em linha (ao lado), ao invés de empilhados.\n * Útil para casos contextuais como paginação.\n */\n @Prop({ reflect: true }) isInline: boolean = false\n\n /**\n * Largura do campo de entrada interno (por exemplo, '88px').\n * Quando definido, sobrescreve a largura padrão de 100% do input.\n */\n @Prop({ reflect: true }) inputWidth?: string\n\n /**\n * Propaga para o input interno a remoção da borda quando desfocado.\n */\n @Prop({ reflect: true }) borderless: boolean = false\n\n /**\n * Identificador único.\n * Caso não seja fornecido, um ID gerado automaticamente será usado.\n */\n @Prop({ reflect: true }) readonly customId: string = `br-select-${selectId++}`\n\n // Representa as opções do select disponíveis para renderização.\n // Cada opção contém `label`, `value` e o estado de seleção (`selected`).\n @State() parsedOptions: { label: string; value: string; selected?: boolean }[] = []\n\n // Opções filtradas de acordo com o termo de busca digitado.\n @State() filteredOptions: { label: string; value: string; selected?: boolean }[] = []\n\n // Valor exibido no input, refletindo as opções selecionadas.\n @State() inputValue: string = ''\n\n // Termo digitado no input (modo busca).\n @State() searchTerm: string = ''\n\n /** Valor selecionado (string para single, string[] para multiple) */\n @Prop({ reflect: false, mutable: true }) value?: string | string[]\n\n @State() selectedValue?: string | string[]\n\n // Indica se todas as opções estão selecionadas. Comportamento do checkbox \"Selecionar Todos\".\n @State() isAllSelected: boolean = false\n\n // Indica se o estado do checkbox \"Selecionar Todos\" está indeterminado (algumas, mas não todas, opções selecionadas).\n @State() isIndeterminate: boolean = false\n\n // Controla se a lista de opções do select está expandida (aberta) ou colapsada (fechada).\n @State() isExpanded: boolean = false\n\n // Armazena o índice do item atualmente focado, usado para navegação por teclado.\n @State() focusedIndex: number = -1\n\n /**\n * Evento emitido sempre que houver atualização nos itens selecionados.\n * RENOMEADO PARA valueChange para compatibilidade com ngModel.\n */\n @Event({ bubbles: true, composed: true }) valueChange: EventEmitter\n\n /** Emite os dados da opção quando ela recebe foco/hover (antes da seleção). */\n @Event({ bubbles: true, composed: true }) optionHover: EventEmitter<{ label: string; value: string }>\n\n /** Dispara quando o dropdown é aberto. */\n @Event({ bubbles: true, composed: true }) opened: EventEmitter<void>\n\n /** Dispara quando o dropdown é fechado. */\n @Event({ bubbles: true, composed: true }) closed: EventEmitter<void>\n\n @Watch('options')\n synchronizeSelect() {\n try {\n let parsedOptions: { label: string; value: string; selected?: boolean }[] = []\n if (typeof this.options === 'string') {\n try {\n const jsonData = JSON.parse(this.options)\n if (Array.isArray(jsonData)) {\n parsedOptions = jsonData\n } else {\n throw new Error('JSON inválido: deve ser um array')\n }\n } catch (error) {\n console.error('Erro ao converter options para JSON:', error.message)\n parsedOptions = []\n }\n } else if (Array.isArray(this.options)) {\n parsedOptions = this.options\n }\n\n // Sanitiza as opções (remove opções inválidas, etc.)\n this.parsedOptions = parsedOptions\n\n // Atualiza lista filtrada considerando o termo atual\n this.filteredOptions = this.getFilteredOptions(this.searchTerm)\n\n // Atualiza o estado do componente\n this.updateSelectedOptions()\n this.updateSelectedAllState()\n this.emitSelectedOptions()\n } catch (error) {\n console.error('Erro ao processar as opções do select:', error)\n this.parsedOptions = []\n }\n }\n\n @Watch('value')\n syncValueFromOutside(newVal: string | string[]) {\n // Atualize parsedOptions a partir de newVal\n this.parsedOptions = this.parsedOptions.map((o) => ({\n ...o,\n selected: this.isMultiple ? Array.isArray(newVal) && newVal.includes(o.value) : newVal === o.value,\n }))\n this.selectedValue = newVal\n this.updateSelectedOptions() // mantém inputValue coeso\n this.updateSelectedAllState()\n this.filteredOptions = this.getFilteredOptions(this.searchTerm)\n }\n\n componentWillLoad() {\n this.isExpanded = this.isOpen\n this.synchronizeSelect()\n }\n\n @Watch('isExpanded')\n handleExpandedChange(isExpanded: boolean) {\n if (isExpanded) {\n this.opened.emit()\n } else {\n this.closed.emit()\n }\n }\n\n componentDidLoad() {\n document.addEventListener('click', this.handleClickOutside)\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleClickOutside)\n }\n\n /**\n * Fecha a lista suspensa (`dropdown`) do `br-select` quando o usuário clica fora do componente.\n * O listener global é adicionado no `componentDidLoad` e removido no `disconnectedCallback` para evitar vazamentos de memória.\n * Se a lista estiver aberta (`this.isExpanded`) e o clique ocorrer fora (`!this.el.contains(target)`), ela é fechada.\n * A reatividade do StencilJS garante a atualização automática da interface.\n * A arrow function (`=>`) mantém o contexto correto de `this` ao ser usada como callback.\n *\n * @param {MouseEvent} event O evento de clique.\n * @returns {void}\n */\n private readonly handleClickOutside = (event: MouseEvent) => {\n // Usa composedPath para considerar nós dentro de Shadow DOM como \"dentro\" do componente\n const path = (event.composedPath && event.composedPath()) || []\n const clickedInside = path.includes(this.el) || (event.target instanceof Node && this.el.contains(event.target))\n\n if (this.isExpanded && !clickedInside) {\n this.isExpanded = false\n }\n }\n\n private handleKeydownOnInput(event: KeyboardEvent) {\n switch (event.key) {\n case 'Tab':\n this.closeSelect()\n break\n case 'ArrowDown':\n event.preventDefault()\n if (!this.isExpanded) {\n this.openSelect()\n }\n this.focusItemInDirection('next')\n break\n case 'ArrowUp':\n event.preventDefault()\n if (!this.isExpanded) {\n this.openSelect()\n }\n this.focusItemInDirection('previous')\n break\n case 'Escape':\n this.closeSelect()\n this.resetFocus()\n break\n case 'Enter':\n this.toggleOpen()\n break\n default:\n }\n }\n\n private handleKeydownOnList(event: KeyboardEvent) {\n event.preventDefault()\n switch (event.key) {\n case 'Tab':\n case 'Escape':\n this.resetFocus()\n break\n case 'ArrowUp':\n this.focusItemInDirection('previous')\n break\n case 'ArrowDown':\n this.focusItemInDirection('next')\n break\n default:\n break\n }\n }\n\n private handleKeydownOnItem(event: KeyboardEvent, index: number) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n const option = this.filteredOptions[index]\n if (option !== undefined) {\n this.handleSelectionByValue(option.value)\n }\n } else if (event.key === 'Escape') {\n this.closeSelect()\n }\n }\n\n private handleSelectAllKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.toggleSelectAll()\n } else if (event.key === 'Escape') {\n event.preventDefault()\n this.closeSelect()\n }\n }\n\n private resetFocus() {\n const input = this.el.shadowRoot.querySelector('br-input') as HTMLBrInputElement | null\n input?.focus()\n }\n\n private focusItemInDirection(direction: 'next' | 'previous') {\n let itemCount = this.parsedOptions.length\n if (this.isMultiple) itemCount += 1\n\n this.focusedIndex =\n direction === 'next' ? (this.focusedIndex + 1) % itemCount : (this.focusedIndex - 1 + itemCount) % itemCount\n\n this.focusItem(this.focusedIndex)\n }\n\n private focusItem(index: number) {\n const items = this.el.shadowRoot.querySelectorAll('.br-item')\n if (items[index]) {\n const item = items[index] as HTMLElement\n item.focus()\n this.emitHoverFromOption(this.filteredOptions[index])\n }\n }\n\n private emitHoverFromOption(option?: { label: string; value: string }) {\n if (!option) return\n this.optionHover.emit({ label: option.label || option.value, value: option.value })\n }\n\n private openSelect() {\n this.isExpanded = true\n }\n\n private closeSelect() {\n this.isExpanded = false\n // Reinicializar o índice focado ao fechar o select\n this.focusedIndex = -1\n }\n\n private handleSelectionByValue(value: string) {\n const index = this.parsedOptions.findIndex((o) => o.value === value)\n if (index === -1) return\n\n if (this.isMultiple) {\n this.parsedOptions = this.parsedOptions.map((o, i) => (i === index ? { ...o, selected: !o.selected } : o))\n // Fecha o dropdown e limpa a busca para mostrar o resumo das seleções\n this.isExpanded = false\n this.isFocused = false\n this.searchTerm = ''\n } else {\n this.parsedOptions = this.parsedOptions.map((o, i) => ({\n ...o,\n selected: i === index,\n }))\n this.isExpanded = false\n // Se fechou, não estamos mais focados na busca.\n // Isso garante que o valor selecionado seja exibido em vez do termo de busca.\n this.isFocused = false\n this.searchTerm = ''\n }\n\n this.selectedValue = this.isMultiple ? this.parsedOptions.filter((o) => o.selected).map((o) => o.value) : value\n\n this.value = this.selectedValue\n this.valueChange.emit(this.selectedValue)\n\n this.updateSelectedOptions()\n this.updateSelectedAllState()\n \n // Força a atualização da referência do array para garantir que o Stencil detecte a mudança\n this.filteredOptions = [...this.getFilteredOptions(this.searchTerm)]\n\n try {\n this.elementInternals.setFormValue(JSON.stringify(this.selectedValue ?? []))\n } catch {}\n }\n\n private updateSelectedOptions() {\n this.inputValue = this.getStringValue(this.parsedOptions.filter((option) => option.selected))\n }\n\n private normalizeText(text: string): string {\n return (text || '')\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n }\n\n private getFilteredOptions(term: string) {\n if (!term) {\n return this.parsedOptions\n }\n\n const normalizedTerm = this.normalizeText(term)\n return this.parsedOptions.filter((option) => {\n const normalizedLabel = this.normalizeText(option.label || option.value)\n const normalizedValue = this.normalizeText(option.value)\n return normalizedLabel.includes(normalizedTerm) || normalizedValue.includes(normalizedTerm)\n })\n }\n\n private getStringValue(options: { label: string; value: string; selected?: boolean }[]) {\n if (options.length > 0) {\n const firstSelected = options[0].label || options[0].value\n if (this.isMultiple) {\n const howManySelected = options.length > 1 ? ` + (${options.length - 1})` : ''\n return `${firstSelected}${howManySelected}`\n } else {\n return firstSelected\n }\n }\n return ''\n }\n\n private emitSelectedOptions() {\n // A lógica de emissão do evento já está no handleSelection para o ngModel.\n // Esta função pode ser simplificada ou removida se a única finalidade era emitir para ngModel.\n // No entanto, se houver outros consumidores deste evento, você pode mantê-la.\n const selectedValues = this.parsedOptions.filter((option) => option.selected === true).map((option) => option.value) // É importante emitir o 'value' para o ngModel.\n\n // Já emitimos em handleSelection, mas se quiser ter certeza, pode emitir aqui também.\n // this.valueChange.emit(this.isMultiple ? selectedValues : selectedValues[0] ?? undefined);\n\n // Atualiza o valor do form associado\n try {\n this.elementInternals.setFormValue(JSON.stringify(this.isMultiple ? selectedValues : (selectedValues[0] ?? null)))\n } catch {\n // Ignora erro em testes onde setFormValue não é implementado\n }\n }\n\n private updateSelectedAllState() {\n const selectedCount = this.parsedOptions.filter((option) => option.selected).length\n const total = this.parsedOptions.length\n\n this.isAllSelected = total > 0 && selectedCount === total\n this.isIndeterminate = selectedCount > 0 && selectedCount < total\n }\n\n private toggleSelectAll() {\n const updatedOptions = this.parsedOptions.map((option) => ({ ...option, selected: !this.isAllSelected }))\n this.parsedOptions = updatedOptions\n\n this.updateSelectedAllState()\n this.updateSelectedOptions()\n\n // Atualiza a prop 'value' e emite o evento para ngModel\n this.selectedValue = this.isMultiple\n ? this.parsedOptions.filter((o) => o.selected).map((o) => o.value)\n : this.parsedOptions.find((o) => o.selected)?.value\n this.value = this.selectedValue\n this.valueChange.emit(this.selectedValue)\n\n try {\n this.elementInternals.setFormValue(JSON.stringify(this.selectedValue ?? []))\n } catch {\n // Ignora erro em testes onde setFormValue não é implementado\n }\n }\n\n // Indica se o input de busca está focado.\n @State() isFocused: boolean = false\n\n private renderInput() {\n // Se estiver focado, mostramos EXATAMENTE o que está sendo digitado (searchTerm), mesmo que seja vazio.\n // Se não estiver focado, mostramos o termo de busca (se houver) ou o valor selecionado (inputValue).\n const displayValue = this.isFocused ? this.searchTerm : (this.searchTerm || this.inputValue)\n\n return (\n <br-input\n exportparts=\"label\"\n value={displayValue}\n label={this.label}\n isInline={this.isInline}\n controlWidth={this.inputWidth}\n borderless={this.borderless}\n placeholder={this.placeholder}\n actionLabel={this.isExpanded ? 'Recolher lista de opções' : 'Exibir lista de opções'}\n actionTabIndex={-1}\n readonly={false}\n onClick={() => this.toggleOpen()}\n onInput={(event) => this.handleSearchInput(event)}\n onFocus={() => this.handleSearchFocus()}\n onBlur={(event) => this.handleSearchBlur(event)}\n onKeyDown={(event) => this.handleKeydownOnInput(event)}\n >\n {this.showSearchIcon && <br-icon slot=\"icon\" icon-name=\"fa-solid:search\" aria-hidden=\"true\"></br-icon>}\n <br-icon\n slot=\"action\"\n icon-name={this.isExpanded ? 'fa-solid:angle-up' : 'fa-solid:angle-down'}\n height=\"16\"\n aria-hidden=\"true\"\n ></br-icon>\n </br-input>\n )\n }\n\n private renderSelectAllCheckbox() {\n return (\n <div\n class={`br-item highlighted ${this.isAllSelected ? 'selected' : ''}`}\n data-all=\"data-all\"\n tabindex=\"-1\"\n role=\"option\"\n aria-selected={this.isAllSelected}\n onKeyDown={(event) => this.handleSelectAllKeyDown(event)}\n onClick={() => this.toggleSelectAll()}\n >\n <br-checkbox\n name={`checkbox-${this.customId}`}\n label={this.isAllSelected ? this.unselectAllLabel : this.selectAllLabel}\n checked={this.isAllSelected}\n indeterminate={this.isIndeterminate}\n onClick={(e) => e.stopPropagation()}\n onCheckedChange={() => this.toggleSelectAll()}\n ></br-checkbox>\n </div>\n )\n }\n\n private renderOptions() {\n if (this.filteredOptions.length === 0) {\n return (\n <div class=\"br-item empty\" role=\"option\" aria-selected=\"false\" tabindex={-1}>\n Nenhum resultado encontrado\n </div>\n )\n }\n\n return this.filteredOptions.map((option, index) => (\n <div\n class={`br-item ${option.selected ? 'selected' : ''}`}\n key={`${option.label}-${this.customId}`}\n role=\"option\"\n tabindex={this.focusedIndex === index ? 0 : -1}\n aria-selected={option.selected}\n data-value={option.value}\n onClick={() => this.handleSelectionByValue(option.value)}\n onKeyDown={(event) => this.handleKeydownOnItem(event, index)}\n onMouseOver={() => this.emitHoverFromOption(option)}\n onPointerOver={() => this.emitHoverFromOption(option)}\n onFocus={() => this.emitHoverFromOption(option)}\n >\n {this.isMultiple ? (\n <br-checkbox\n name={`checkbox-${index}-${this.customId}`}\n label={option.label || option.value}\n checked={option.selected === true}\n onClick={(e) => e.stopPropagation()}\n onCheckedChange={() => this.handleSelectionByValue(option.value)}\n />\n ) : (\n <br-radio\n exportparts=\"radio-input, radio-label\"\n name={`radio-${index}-${this.customId}`}\n label={option.label || option.value}\n checked={option.selected === true}\n onClick={(e) => e.stopPropagation()}\n onCheckedChange={() => this.handleSelectionByValue(option.value)}\n />\n )}\n </div>\n ))\n }\n\n /**\n * Determina um id para o radio.\n */\n private getComputedId() {\n return this.customId?.length > 0 ? this.customId : `br-select-${this.customId}`\n }\n\n /**\n * Inverte o valor da prop `isOpen`\n */\n @Method()\n async toggleOpen() {\n this.isExpanded = !this.isExpanded\n }\n\n /**\n * Limpa todas as opções selecionadas.\n */\n @Method()\n async clear() {\n const updatedOptions = this.parsedOptions.map((option) => ({ ...option, selected: false }))\n this.parsedOptions = updatedOptions\n\n const newValue = this.isMultiple ? [] : undefined\n this.selectedValue = newValue\n this.value = newValue\n\n this.updateSelectedOptions()\n this.updateSelectedAllState()\n this.valueChange.emit(newValue)\n\n try {\n this.elementInternals.setFormValue(JSON.stringify(newValue ?? (this.isMultiple ? [] : null)))\n } catch {\n // Ignora erro em testes onde setFormValue não é implementado\n }\n }\n\n /**\n * Retorna o valor selecionado.\n * @returns {Promise<string | string[]>} O valor atual.\n */\n @Method()\n async getValue() {\n return this.value\n }\n\n /**\n * Define o valor do componente.\n * @param {string | string[]} newValue O novo valor a ser definido.\n */\n @Method()\n async setValue(newValue: string | string[]) {\n this.value = newValue\n // O @Watch('value') cuidará da sincronização\n }\n\n private getCssClassMap(): CssClassMap {\n return {\n 'br-select': true,\n }\n }\n\n private handleSearchInput(event: Event) {\n const value = (event.target as HTMLInputElement).value ?? ''\n this.searchTerm = value\n this.filteredOptions = this.getFilteredOptions(value)\n this.isExpanded = true\n }\n\n private handleSearchFocus() {\n this.isFocused = true\n this.filteredOptions = this.getFilteredOptions(this.searchTerm)\n }\n\n private handleSearchBlur(event: FocusEvent) {\n // Se o foco foi movido para dentro do componente (ex: clicou no checkbox/item),\n // não limpamos a busca para manter a lista filtrada estável e permitir o clique.\n const relatedTarget = event.relatedTarget as Node\n if (relatedTarget && (this.el.contains(relatedTarget) || this.el.shadowRoot?.contains(relatedTarget))) {\n return\n }\n\n this.isFocused = false\n // Ao sair do campo, volta a exibir o resumo das seleções\n this.searchTerm = ''\n this.filteredOptions = this.getFilteredOptions('')\n }\n\n render() {\n return (\n <div class={this.getCssClassMap()} id={this.getComputedId()}>\n {this.renderInput()}\n\n {this.isExpanded && (\n <br-list\n tabindex={-1}\n onKeyDown={(event) => this.handleKeydownOnList(event)}\n style={this.inputWidth !== undefined ? { width: this.inputWidth } : undefined}\n >\n {this.isMultiple && this.renderSelectAllCheckbox()}\n {this.renderOptions()}\n </br-list>\n )}\n </div>\n )\n }\n}\n\nlet selectId = 0\n"]}
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../../../../packages/webcomponents/src/components/select/select.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAIvH;;;;GAIG;AAOH,MAAM,OAAO,MAAM;IANnB;QAoBE;;WAEG;QACsB,gBAAW,GAAW,EAAE,CAAA;QAEjD;;WAEG;QACsB,eAAU,GAAY,KAAK,CAAA;QAEpD;;;;;;;;;WASG;QACsB,YAAO,GAMtB,EAAE,CAAA;QAEZ;;WAEG;QACsB,mBAAc,GAAW,kBAAkB,CAAA;QAEpE;;WAEG;QACsB,qBAAgB,GAAW,qBAAqB,CAAA;QAEzE;;WAEG;QACsB,mBAAc,GAAY,KAAK,CAAA;QAExD;;WAEG;QACsB,WAAM,GAAY,KAAK,CAAA;QAEhD;;;WAGG;QACsB,aAAQ,GAAY,KAAK,CAAA;QAQlD;;;WAGG;QACsB,aAAQ,GAAY,KAAK,CAAA;QAElD;;WAEG;QACsB,eAAU,GAAY,KAAK,CAAA;QAEpD;;;WAGG;QAC+B,aAAQ,GAAW,aAAa,QAAQ,EAAE,EAAE,CAAA;QAE9E,gEAAgE;QAChE,yEAAyE;QAChE,kBAAa,GAA2D,EAAE,CAAA;QAEnF,4DAA4D;QACnD,oBAAe,GAA2D,EAAE,CAAA;QAErF,6DAA6D;QACpD,eAAU,GAAW,EAAE,CAAA;QAEhC,wCAAwC;QAC/B,eAAU,GAAW,EAAE,CAAA;QAOhC,8FAA8F;QACrF,kBAAa,GAAY,KAAK,CAAA;QAEvC,sHAAsH;QAC7G,oBAAe,GAAY,KAAK,CAAA;QAEzC,0FAA0F;QACjF,eAAU,GAAY,KAAK,CAAA;QAEpC,iFAAiF;QACxE,iBAAY,GAAW,CAAC,CAAC,CAAA;QAwFlC;;;;;;;;;WASG;QACc,uBAAkB,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC1D,wFAAwF;YACxF,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,CAAA;YAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,YAAY,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;YAEhH,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;gBACtC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;YACzB,CAAC;QACH,CAAC,CAAA;QAwOD,0CAA0C;QACjC,cAAS,GAAY,KAAK,CAAA;KA2OpC;IA5iBC,iBAAiB;QACf,IAAI,CAAC;YACH,IAAI,aAAa,GAA2D,EAAE,CAAA;YAC9E,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBACzC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC5B,aAAa,GAAG,QAAQ,CAAA;oBAC1B,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;oBACrD,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;oBACpE,aAAa,GAAG,EAAE,CAAA;gBACpB,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAA;YAC9B,CAAC;YAED,qDAAqD;YACrD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;YAElC,qDAAqD;YACrD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAE/D,kCAAkC;YAClC,IAAI,CAAC,qBAAqB,EAAE,CAAA;YAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAA;YAC7B,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAA;YAC9D,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACzB,CAAC;IACH,CAAC;IAGD,oBAAoB,CAAC,MAAyB;QAC5C,4CAA4C;QAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iCAC9C,CAAC,KACJ,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,IAClG,CAAC,CAAA;QACH,IAAI,CAAC,aAAa,GAAG,MAAM,CAAA;QAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAA,CAAC,0BAA0B;QACvD,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACjE,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAA;QAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAA;IAC1B,CAAC;IAGD,oBAAoB,CAAC,UAAmB;QACtC,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QACpB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC7D,CAAC;IAED,oBAAoB;QAClB,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAChE,CAAC;IAsBO,oBAAoB,CAAC,KAAoB;QAC/C,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;YAClB,KAAK,KAAK;gBACR,IAAI,CAAC,WAAW,EAAE,CAAA;gBAClB,MAAK;YACP,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBACrB,IAAI,CAAC,UAAU,EAAE,CAAA;gBACnB,CAAC;gBACD,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;gBACjC,MAAK;YACP,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBACrB,IAAI,CAAC,UAAU,EAAE,CAAA;gBACnB,CAAC;gBACD,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAA;gBACrC,MAAK;YACP,KAAK,QAAQ;gBACX,IAAI,CAAC,WAAW,EAAE,CAAA;gBAClB,IAAI,CAAC,UAAU,EAAE,CAAA;gBACjB,MAAK;YACP,KAAK,OAAO;gBACV,IAAI,CAAC,UAAU,EAAE,CAAA;gBACjB,MAAK;YACP,QAAQ;QACV,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,KAAoB;QAC9C,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;YAClB,KAAK,KAAK,CAAC;YACX,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,EAAE,CAAA;gBACjB,MAAK;YACP,KAAK,SAAS;gBACZ,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAA;gBACrC,MAAK;YACP,KAAK,WAAW;gBACd,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;gBACjC,MAAK;YACP;gBACE,MAAK;QACT,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,KAAoB,EAAE,KAAa;QAC7D,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC/C,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;YAC1C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,KAAoB;QACjD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC/C,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,IAAI,CAAC,eAAe,EAAE,CAAA;QACxB,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAA8B,CAAA;QACvF,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,CAAA;IAChB,CAAC;IAEO,oBAAoB,CAAC,SAA8B;QACzD,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAA;QACzC,IAAI,IAAI,CAAC,UAAU;YAAE,SAAS,IAAI,CAAC,CAAA;QAEnC,IAAI,CAAC,YAAY;YACf,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAA;QAE9G,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACnC,CAAC;IAEO,SAAS,CAAC,KAAa;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAA;QAC7D,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAgB,CAAA;YACxC,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,MAAyC;QACnE,IAAI,CAAC,MAAM;YAAE,OAAM;QACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;IACrF,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;IACxB,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;QACvB,mDAAmD;QACnD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;IACxB,CAAC;IAEO,sBAAsB,CAAC,KAAa;;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;QACpE,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAM;QAExB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,iCAAM,CAAC,KAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1G,sEAAsE;YACtE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;YACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;YACtB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,iCACjD,CAAC,KACJ,QAAQ,EAAE,CAAC,KAAK,KAAK,IACrB,CAAC,CAAA;YACH,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;YACvB,gDAAgD;YAChD,8EAA8E;YAC9E,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;YACtB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;QACtB,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAE/G,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAA;QAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAEzC,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAE7B,2FAA2F;QAC3F,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;QAEpE,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAA,IAAI,CAAC,aAAa,mCAAI,EAAE,CAAC,CAAC,CAAA;QAC9E,CAAC;QAAC,WAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAEO,qBAAqB;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC/F,CAAC;IAEO,aAAa,CAAC,IAAY;QAChC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;aAChB,SAAS,CAAC,KAAK,CAAC;aAChB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;aAC/B,WAAW,EAAE,CAAA;IAClB,CAAC;IAEO,kBAAkB,CAAC,IAAY;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,aAAa,CAAA;QAC3B,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAC/C,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAA;YACxE,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACxD,OAAO,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;QAC7F,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,cAAc,CAAC,OAA+D;QACpF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;YAC1D,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;gBAC9E,OAAO,GAAG,aAAa,GAAG,eAAe,EAAE,CAAA;YAC7C,CAAC;iBAAM,CAAC;gBACN,OAAO,aAAa,CAAA;YACtB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAEO,mBAAmB;;QACzB,2EAA2E;QAC3E,+FAA+F;QAC/F,8EAA8E;QAC9E,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,CAAC,gDAAgD;QAErK,sFAAsF;QACtF,4FAA4F;QAE5F,qCAAqC;QACrC,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAA,cAAc,CAAC,CAAC,CAAC,mCAAI,IAAI,CAAC,CAAC,CAAC,CAAA;QACpH,CAAC;QAAC,WAAM,CAAC;YACP,6DAA6D;QAC/D,CAAC;IACH,CAAC;IAEO,sBAAsB;QAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAA;QACnF,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAA;QAEvC,IAAI,CAAC,aAAa,GAAG,KAAK,GAAG,CAAC,IAAI,aAAa,KAAK,KAAK,CAAA;QACzD,IAAI,CAAC,eAAe,GAAG,aAAa,GAAG,CAAC,IAAI,aAAa,GAAG,KAAK,CAAA;IACnE,CAAC;IAEO,eAAe;;QACrB,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iCAAM,MAAM,KAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,aAAa,IAAG,CAAC,CAAA;QACzG,IAAI,CAAC,aAAa,GAAG,cAAc,CAAA;QAEnC,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC7B,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAE5B,wDAAwD;QACxD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU;YAClC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YAClE,CAAC,CAAC,MAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,0CAAE,KAAK,CAAA;QACrD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAA;QAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAEzC,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAA,IAAI,CAAC,aAAa,mCAAI,EAAE,CAAC,CAAC,CAAA;QAC9E,CAAC;QAAC,WAAM,CAAC;YACP,6DAA6D;QAC/D,CAAC;IACH,CAAC;IAKO,WAAW;QACjB,wGAAwG;QACxG,qGAAqG;QACrG,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAA;QAE1F,OAAO,CACL,gBACE,WAAW,EAAC,OAAO,EACnB,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,YAAY,EAAE,IAAI,CAAC,UAAU,EAC7B,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,wBAAwB,EACpF,cAAc,EAAE,CAAC,CAAC,EAClB,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,UAAU,EAAE,CAAA;YACvC,CAAC,EACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EACjD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,EACvC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAC/C,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;YACtD,CAAC;YAEA,IAAI,CAAC,cAAc,IAAI,eAAS,IAAI,EAAC,MAAM,eAAW,iBAAiB,iBAAa,MAAM,GAAW;YACtG,eACE,IAAI,EAAC,QAAQ,eACF,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,qBAAqB,EACxE,MAAM,EAAC,IAAI,iBACC,MAAM,GACT,CACF,CACZ,CAAA;IACH,CAAC;IAEO,uBAAuB;QAC7B,OAAO,CACL,WACE,KAAK,EAAE,uBAAuB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,cAC9F,UAAU,EACnB,QAAQ,EAAC,IAAI,EACb,IAAI,EAAC,QAAQ,mBACE,IAAI,CAAC,aAAa,mBAClB,IAAI,CAAC,QAAQ,EAC5B,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAA;YACxD,CAAC,EACD,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,eAAe,EAAE,CAAA;YAC5C,CAAC;YAED,mBACE,IAAI,EAAE,YAAY,IAAI,CAAC,QAAQ,EAAE,EACjC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EACvE,OAAO,EAAE,IAAI,CAAC,aAAa,EAC3B,aAAa,EAAE,IAAI,CAAC,eAAe,EACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACnC,eAAe,EAAE,GAAG,EAAE;oBACpB,IAAI,CAAC,IAAI,CAAC,QAAQ;wBAAE,IAAI,CAAC,eAAe,EAAE,CAAA;gBAC5C,CAAC,GACY,CACX,CACP,CAAA;IACH,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,CACL,WAAK,KAAK,EAAC,eAAe,EAAC,IAAI,EAAC,QAAQ,mBAAe,OAAO,EAAC,QAAQ,EAAE,CAAC,CAAC,kCAErE,CACP,CAAA;QACH,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CACjD,WACE,KAAK,EAAE,WAAW,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EACxF,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,EACvC,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBACpD,MAAM,CAAC,QAAQ,mBACf,IAAI,CAAC,QAAQ,gBAChB,MAAM,CAAC,KAAK,EACxB,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC/D,CAAC,EACD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAC5D,CAAC,EACD,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EACnD,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EACrD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAE9C,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CACjB,mBACE,IAAI,EAAE,YAAY,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,EAC1C,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EACnC,OAAO,EAAE,MAAM,CAAC,QAAQ,KAAK,IAAI,EACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACnC,eAAe,EAAE,GAAG,EAAE;gBACpB,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC/D,CAAC,GACD,CACH,CAAC,CAAC,CAAC,CACF,gBACE,WAAW,EAAC,0BAA0B,EACtC,IAAI,EAAE,SAAS,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,EACvC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EACnC,OAAO,EAAE,MAAM,CAAC,QAAQ,KAAK,IAAI,EACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACnC,eAAe,EAAE,GAAG,EAAE;gBACpB,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC/D,CAAC,GACD,CACH,CACG,CACP,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACK,aAAa;;QACnB,OAAO,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,MAAM,IAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjF,CAAC;IAED;;OAEG;IAEH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAA;IACpC,CAAC;IAED;;OAEG;IAEH,KAAK,CAAC,KAAK;QACT,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iCAAM,MAAM,KAAE,QAAQ,EAAE,KAAK,IAAG,CAAC,CAAA;QAC3F,IAAI,CAAC,aAAa,GAAG,cAAc,CAAA;QAEnC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;QACjD,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA;QAC7B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;QAErB,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAE/B,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/F,CAAC;QAAC,WAAM,CAAC;YACP,6DAA6D;QAC/D,CAAC;IACH,CAAC;IAED;;;OAGG;IAEH,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED;;;OAGG;IAEH,KAAK,CAAC,QAAQ,CAAC,QAA2B;QACxC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;QACrB,6CAA6C;IAC/C,CAAC;IAEO,cAAc;QACpB,OAAO;YACL,WAAW,EAAE,IAAI;SAClB,CAAA;IACH,CAAC;IAEO,iBAAiB,CAAC,KAAY;;QACpC,MAAM,KAAK,GAAG,MAAC,KAAK,CAAC,MAA2B,CAAC,KAAK,mCAAI,EAAE,CAAA;QAC5D,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;QACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;QACrD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;IACxB,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACjE,CAAC;IAEO,gBAAgB,CAAC,KAAiB;;QACxC,gFAAgF;QAChF,iFAAiF;QACjF,MAAM,aAAa,GAAG,KAAK,CAAC,aAAqB,CAAA;QACjD,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAI,MAAA,IAAI,CAAC,EAAE,CAAC,UAAU,0CAAE,QAAQ,CAAC,aAAa,CAAC,CAAA,CAAC,EAAE,CAAC;YACtG,OAAM;QACR,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;QACtB,yDAAyD;QACzD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;IACpD,CAAC;IAED,MAAM;QACJ,OAAO,CACL,4DAAK,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,mBAAiB,IAAI,CAAC,QAAQ;YACtF,IAAI,CAAC,WAAW,EAAE;YAElB,IAAI,CAAC,UAAU,IAAI,CAClB,gEACE,QAAQ,EAAE,CAAC,CAAC,EACZ,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EACrD,KAAK,EAAE,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;gBAE5E,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,uBAAuB,EAAE;gBACjD,IAAI,CAAC,aAAa,EAAE,CACb,CACX,CACG,CACP,CAAA;IACH,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF;AAED,IAAI,QAAQ,GAAG,CAAC,CAAA","sourcesContent":["import { AttachInternals, Component, Element, Event, EventEmitter, h, Method, Prop, State, Watch } from '@stencil/core'\n\nimport { CssClassMap } from '../../utils/interfaces'\n\n/**\n * ## Design System\n *\n * Para a documentação completa de design, incluindo diretrizes de uso, acessibilidade e exemplos visuais, consulte o [Design System do GovBR](https://www.gov.br/ds/components/select?tab=designer).\n */\n@Component({\n tag: 'br-select',\n styleUrl: 'select.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class Select {\n /**\n * Referência ao elemento host do componente.\n * Utilize esta propriedade para acessar e manipular o elemento do DOM associado ao componente.\n */\n @Element() el: HTMLBrSelectElement\n\n @AttachInternals() elementInternals: ElementInternals\n\n /**\n * Rótulo que indica o tipo de informação que deve ser selecionada.\n */\n @Prop({ reflect: true }) label: string\n\n /**\n * Texto auxiliar exibido antes de uma seleção.\n */\n @Prop({ reflect: true }) placeholder: string = ''\n\n /**\n * Habilita o modo múltiplo para selecionar várias opções.\n */\n @Prop({ reflect: true }) isMultiple: boolean = false\n\n /**\n * Define as opções disponíveis no componente de seleção.\n * Se uma string for fornecida, ela será convertida internamente para um array via `JSON.parse`. Caso o formato seja inválido, um erro será registrado e as opções serão definidas como um array vazio.\n * Exemplo de uso:\n * ```typescript\n * options='[{\"label\": \"Sim\", \"value\": \"1\"}, {\"label\": \"Não\", \"value\": \"0\"}]'\n * // ou\n * options=[{ label: \"Sim\", value: \"1\" }, { label: \"Não\", value: \"0\" }]\n * ```\n */\n @Prop({ reflect: true }) options:\n | string\n | {\n label: string\n value: string\n selected?: boolean\n }[] = []\n\n /**\n * Rótulo para selecionar todas as opções.\n */\n @Prop({ reflect: true }) selectAllLabel: string = 'Selecionar todos'\n\n /**\n * Rótulo para desmarcar todas as opções.\n */\n @Prop({ reflect: true }) unselectAllLabel: string = 'Desselecionar todos'\n\n /**\n * Exibe o ícone de busca no campo de entrada.\n */\n @Prop({ reflect: true }) showSearchIcon: boolean = false\n\n /**\n * Indica se a listagem de itens do select está expandida\n */\n @Prop({ reflect: true }) isOpen: boolean = false\n\n /**\n * Exibe o rótulo e o controle em linha (ao lado), ao invés de empilhados.\n * Útil para casos contextuais como paginação.\n */\n @Prop({ reflect: true }) isInline: boolean = false\n\n /**\n * Largura do campo de entrada interno (por exemplo, '88px').\n * Quando definido, sobrescreve a largura padrão de 100% do input.\n */\n @Prop({ reflect: true }) inputWidth?: string\n\n /**\n * Desabilita a interação com o componente `br-select`.\n * Quando `true`, o input e as opções ficam desabilitados e não respondem a cliques ou teclas.\n */\n @Prop({ reflect: true }) disabled: boolean = false\n\n /**\n * Propaga para o input interno a remoção da borda quando desfocado.\n */\n @Prop({ reflect: true }) borderless: boolean = false\n\n /**\n * Identificador único.\n * Caso não seja fornecido, um ID gerado automaticamente será usado.\n */\n @Prop({ reflect: true }) readonly customId: string = `br-select-${selectId++}`\n\n // Representa as opções do select disponíveis para renderização.\n // Cada opção contém `label`, `value` e o estado de seleção (`selected`).\n @State() parsedOptions: { label: string; value: string; selected?: boolean }[] = []\n\n // Opções filtradas de acordo com o termo de busca digitado.\n @State() filteredOptions: { label: string; value: string; selected?: boolean }[] = []\n\n // Valor exibido no input, refletindo as opções selecionadas.\n @State() inputValue: string = ''\n\n // Termo digitado no input (modo busca).\n @State() searchTerm: string = ''\n\n /** Valor selecionado (string para single, string[] para multiple) */\n @Prop({ reflect: false, mutable: true }) value?: string | string[]\n\n @State() selectedValue?: string | string[]\n\n // Indica se todas as opções estão selecionadas. Comportamento do checkbox \"Selecionar Todos\".\n @State() isAllSelected: boolean = false\n\n // Indica se o estado do checkbox \"Selecionar Todos\" está indeterminado (algumas, mas não todas, opções selecionadas).\n @State() isIndeterminate: boolean = false\n\n // Controla se a lista de opções do select está expandida (aberta) ou colapsada (fechada).\n @State() isExpanded: boolean = false\n\n // Armazena o índice do item atualmente focado, usado para navegação por teclado.\n @State() focusedIndex: number = -1\n\n /**\n * Evento emitido sempre que houver atualização nos itens selecionados.\n * RENOMEADO PARA valueChange para compatibilidade com ngModel.\n */\n @Event({ bubbles: true, composed: true }) valueChange: EventEmitter\n\n /** Emite os dados da opção quando ela recebe foco/hover (antes da seleção). */\n @Event({ bubbles: true, composed: true }) optionHover: EventEmitter<{ label: string; value: string }>\n\n /** Dispara quando o dropdown é aberto. */\n @Event({ bubbles: true, composed: true }) opened: EventEmitter<void>\n\n /** Dispara quando o dropdown é fechado. */\n @Event({ bubbles: true, composed: true }) closed: EventEmitter<void>\n\n @Watch('options')\n synchronizeSelect() {\n try {\n let parsedOptions: { label: string; value: string; selected?: boolean }[] = []\n if (typeof this.options === 'string') {\n try {\n const jsonData = JSON.parse(this.options)\n if (Array.isArray(jsonData)) {\n parsedOptions = jsonData\n } else {\n throw new Error('JSON inválido: deve ser um array')\n }\n } catch (error) {\n console.error('Erro ao converter options para JSON:', error.message)\n parsedOptions = []\n }\n } else if (Array.isArray(this.options)) {\n parsedOptions = this.options\n }\n\n // Sanitiza as opções (remove opções inválidas, etc.)\n this.parsedOptions = parsedOptions\n\n // Atualiza lista filtrada considerando o termo atual\n this.filteredOptions = this.getFilteredOptions(this.searchTerm)\n\n // Atualiza o estado do componente\n this.updateSelectedOptions()\n this.updateSelectedAllState()\n this.emitSelectedOptions()\n } catch (error) {\n console.error('Erro ao processar as opções do select:', error)\n this.parsedOptions = []\n }\n }\n\n @Watch('value')\n syncValueFromOutside(newVal: string | string[]) {\n // Atualize parsedOptions a partir de newVal\n this.parsedOptions = this.parsedOptions.map((o) => ({\n ...o,\n selected: this.isMultiple ? Array.isArray(newVal) && newVal.includes(o.value) : newVal === o.value,\n }))\n this.selectedValue = newVal\n this.updateSelectedOptions() // mantém inputValue coeso\n this.updateSelectedAllState()\n this.filteredOptions = this.getFilteredOptions(this.searchTerm)\n }\n\n componentWillLoad() {\n this.isExpanded = this.isOpen\n this.synchronizeSelect()\n }\n\n @Watch('isExpanded')\n handleExpandedChange(isExpanded: boolean) {\n if (isExpanded) {\n this.opened.emit()\n } else {\n this.closed.emit()\n }\n }\n\n componentDidLoad() {\n document.addEventListener('click', this.handleClickOutside)\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleClickOutside)\n }\n\n /**\n * Fecha a lista suspensa (`dropdown`) do `br-select` quando o usuário clica fora do componente.\n * O listener global é adicionado no `componentDidLoad` e removido no `disconnectedCallback` para evitar vazamentos de memória.\n * Se a lista estiver aberta (`this.isExpanded`) e o clique ocorrer fora (`!this.el.contains(target)`), ela é fechada.\n * A reatividade do StencilJS garante a atualização automática da interface.\n * A arrow function (`=>`) mantém o contexto correto de `this` ao ser usada como callback.\n *\n * @param {MouseEvent} event O evento de clique.\n * @returns {void}\n */\n private readonly handleClickOutside = (event: MouseEvent) => {\n // Usa composedPath para considerar nós dentro de Shadow DOM como \"dentro\" do componente\n const path = (event.composedPath && event.composedPath()) || []\n const clickedInside = path.includes(this.el) || (event.target instanceof Node && this.el.contains(event.target))\n\n if (this.isExpanded && !clickedInside) {\n this.isExpanded = false\n }\n }\n\n private handleKeydownOnInput(event: KeyboardEvent) {\n switch (event.key) {\n case 'Tab':\n this.closeSelect()\n break\n case 'ArrowDown':\n event.preventDefault()\n if (!this.isExpanded) {\n this.openSelect()\n }\n this.focusItemInDirection('next')\n break\n case 'ArrowUp':\n event.preventDefault()\n if (!this.isExpanded) {\n this.openSelect()\n }\n this.focusItemInDirection('previous')\n break\n case 'Escape':\n this.closeSelect()\n this.resetFocus()\n break\n case 'Enter':\n this.toggleOpen()\n break\n default:\n }\n }\n\n private handleKeydownOnList(event: KeyboardEvent) {\n event.preventDefault()\n switch (event.key) {\n case 'Tab':\n case 'Escape':\n this.resetFocus()\n break\n case 'ArrowUp':\n this.focusItemInDirection('previous')\n break\n case 'ArrowDown':\n this.focusItemInDirection('next')\n break\n default:\n break\n }\n }\n\n private handleKeydownOnItem(event: KeyboardEvent, index: number) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n const option = this.filteredOptions[index]\n if (option !== undefined) {\n this.handleSelectionByValue(option.value)\n }\n } else if (event.key === 'Escape') {\n this.closeSelect()\n }\n }\n\n private handleSelectAllKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.toggleSelectAll()\n } else if (event.key === 'Escape') {\n event.preventDefault()\n this.closeSelect()\n }\n }\n\n private resetFocus() {\n const input = this.el.shadowRoot.querySelector('br-input') as HTMLBrInputElement | null\n input?.focus()\n }\n\n private focusItemInDirection(direction: 'next' | 'previous') {\n let itemCount = this.parsedOptions.length\n if (this.isMultiple) itemCount += 1\n\n this.focusedIndex =\n direction === 'next' ? (this.focusedIndex + 1) % itemCount : (this.focusedIndex - 1 + itemCount) % itemCount\n\n this.focusItem(this.focusedIndex)\n }\n\n private focusItem(index: number) {\n const items = this.el.shadowRoot.querySelectorAll('.br-item')\n if (items[index]) {\n const item = items[index] as HTMLElement\n item.focus()\n this.emitHoverFromOption(this.filteredOptions[index])\n }\n }\n\n private emitHoverFromOption(option?: { label: string; value: string }) {\n if (!option) return\n this.optionHover.emit({ label: option.label || option.value, value: option.value })\n }\n\n private openSelect() {\n this.isExpanded = true\n }\n\n private closeSelect() {\n this.isExpanded = false\n // Reinicializar o índice focado ao fechar o select\n this.focusedIndex = -1\n }\n\n private handleSelectionByValue(value: string) {\n const index = this.parsedOptions.findIndex((o) => o.value === value)\n if (index === -1) return\n\n if (this.isMultiple) {\n this.parsedOptions = this.parsedOptions.map((o, i) => (i === index ? { ...o, selected: !o.selected } : o))\n // Fecha o dropdown e limpa a busca para mostrar o resumo das seleções\n this.isExpanded = false\n this.isFocused = false\n this.searchTerm = ''\n } else {\n this.parsedOptions = this.parsedOptions.map((o, i) => ({\n ...o,\n selected: i === index,\n }))\n this.isExpanded = false\n // Se fechou, não estamos mais focados na busca.\n // Isso garante que o valor selecionado seja exibido em vez do termo de busca.\n this.isFocused = false\n this.searchTerm = ''\n }\n\n this.selectedValue = this.isMultiple ? this.parsedOptions.filter((o) => o.selected).map((o) => o.value) : value\n\n this.value = this.selectedValue\n this.valueChange.emit(this.selectedValue)\n\n this.updateSelectedOptions()\n this.updateSelectedAllState()\n\n // Força a atualização da referência do array para garantir que o Stencil detecte a mudança\n this.filteredOptions = [...this.getFilteredOptions(this.searchTerm)]\n\n try {\n this.elementInternals.setFormValue(JSON.stringify(this.selectedValue ?? []))\n } catch {}\n }\n\n private updateSelectedOptions() {\n this.inputValue = this.getStringValue(this.parsedOptions.filter((option) => option.selected))\n }\n\n private normalizeText(text: string): string {\n return (text || '')\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n }\n\n private getFilteredOptions(term: string) {\n if (!term) {\n return this.parsedOptions\n }\n\n const normalizedTerm = this.normalizeText(term)\n return this.parsedOptions.filter((option) => {\n const normalizedLabel = this.normalizeText(option.label || option.value)\n const normalizedValue = this.normalizeText(option.value)\n return normalizedLabel.includes(normalizedTerm) || normalizedValue.includes(normalizedTerm)\n })\n }\n\n private getStringValue(options: { label: string; value: string; selected?: boolean }[]) {\n if (options.length > 0) {\n const firstSelected = options[0].label || options[0].value\n if (this.isMultiple) {\n const howManySelected = options.length > 1 ? ` + (${options.length - 1})` : ''\n return `${firstSelected}${howManySelected}`\n } else {\n return firstSelected\n }\n }\n return ''\n }\n\n private emitSelectedOptions() {\n // A lógica de emissão do evento já está no handleSelection para o ngModel.\n // Esta função pode ser simplificada ou removida se a única finalidade era emitir para ngModel.\n // No entanto, se houver outros consumidores deste evento, você pode mantê-la.\n const selectedValues = this.parsedOptions.filter((option) => option.selected === true).map((option) => option.value) // É importante emitir o 'value' para o ngModel.\n\n // Já emitimos em handleSelection, mas se quiser ter certeza, pode emitir aqui também.\n // this.valueChange.emit(this.isMultiple ? selectedValues : selectedValues[0] ?? undefined);\n\n // Atualiza o valor do form associado\n try {\n this.elementInternals.setFormValue(JSON.stringify(this.isMultiple ? selectedValues : (selectedValues[0] ?? null)))\n } catch {\n // Ignora erro em testes onde setFormValue não é implementado\n }\n }\n\n private updateSelectedAllState() {\n const selectedCount = this.parsedOptions.filter((option) => option.selected).length\n const total = this.parsedOptions.length\n\n this.isAllSelected = total > 0 && selectedCount === total\n this.isIndeterminate = selectedCount > 0 && selectedCount < total\n }\n\n private toggleSelectAll() {\n const updatedOptions = this.parsedOptions.map((option) => ({ ...option, selected: !this.isAllSelected }))\n this.parsedOptions = updatedOptions\n\n this.updateSelectedAllState()\n this.updateSelectedOptions()\n\n // Atualiza a prop 'value' e emite o evento para ngModel\n this.selectedValue = this.isMultiple\n ? this.parsedOptions.filter((o) => o.selected).map((o) => o.value)\n : this.parsedOptions.find((o) => o.selected)?.value\n this.value = this.selectedValue\n this.valueChange.emit(this.selectedValue)\n\n try {\n this.elementInternals.setFormValue(JSON.stringify(this.selectedValue ?? []))\n } catch {\n // Ignora erro em testes onde setFormValue não é implementado\n }\n }\n\n // Indica se o input de busca está focado.\n @State() isFocused: boolean = false\n\n private renderInput() {\n // Se estiver focado, mostramos EXATAMENTE o que está sendo digitado (searchTerm), mesmo que seja vazio.\n // Se não estiver focado, mostramos o termo de busca (se houver) ou o valor selecionado (inputValue).\n const displayValue = this.isFocused ? this.searchTerm : this.searchTerm || this.inputValue\n\n return (\n <br-input\n exportparts=\"label\"\n value={displayValue}\n label={this.label}\n isInline={this.isInline}\n controlWidth={this.inputWidth}\n borderless={this.borderless}\n placeholder={this.placeholder}\n actionLabel={this.isExpanded ? 'Recolher lista de opções' : 'Exibir lista de opções'}\n actionTabIndex={-1}\n readonly={false}\n disabled={this.disabled}\n onClick={() => {\n if (!this.disabled) this.toggleOpen()\n }}\n onInput={(event) => this.handleSearchInput(event)}\n onFocus={() => this.handleSearchFocus()}\n onBlur={(event) => this.handleSearchBlur(event)}\n onKeyDown={(event) => {\n if (!this.disabled) this.handleKeydownOnInput(event)\n }}\n >\n {this.showSearchIcon && <br-icon slot=\"icon\" icon-name=\"fa-solid:search\" aria-hidden=\"true\"></br-icon>}\n <br-icon\n slot=\"action\"\n icon-name={this.isExpanded ? 'fa-solid:angle-up' : 'fa-solid:angle-down'}\n height=\"16\"\n aria-hidden=\"true\"\n ></br-icon>\n </br-input>\n )\n }\n\n private renderSelectAllCheckbox() {\n return (\n <div\n class={`br-item highlighted ${this.isAllSelected ? 'selected' : ''} ${this.disabled ? 'disabled' : ''}`}\n data-all=\"data-all\"\n tabindex=\"-1\"\n role=\"option\"\n aria-selected={this.isAllSelected}\n aria-disabled={this.disabled}\n onKeyDown={(event) => {\n if (!this.disabled) this.handleSelectAllKeyDown(event)\n }}\n onClick={() => {\n if (!this.disabled) this.toggleSelectAll()\n }}\n >\n <br-checkbox\n name={`checkbox-${this.customId}`}\n label={this.isAllSelected ? this.unselectAllLabel : this.selectAllLabel}\n checked={this.isAllSelected}\n indeterminate={this.isIndeterminate}\n disabled={this.disabled}\n onClick={(e) => e.stopPropagation()}\n onCheckedChange={() => {\n if (!this.disabled) this.toggleSelectAll()\n }}\n ></br-checkbox>\n </div>\n )\n }\n\n private renderOptions() {\n if (this.filteredOptions.length === 0) {\n return (\n <div class=\"br-item empty\" role=\"option\" aria-selected=\"false\" tabindex={-1}>\n Nenhum resultado encontrado\n </div>\n )\n }\n\n return this.filteredOptions.map((option, index) => (\n <div\n class={`br-item ${option.selected ? 'selected' : ''} ${this.disabled ? 'disabled' : ''}`}\n key={`${option.label}-${this.customId}`}\n role=\"option\"\n tabindex={this.disabled ? -1 : this.focusedIndex === index ? 0 : -1}\n aria-selected={option.selected}\n aria-disabled={this.disabled}\n data-value={option.value}\n onClick={() => {\n if (!this.disabled) this.handleSelectionByValue(option.value)\n }}\n onKeyDown={(event) => {\n if (!this.disabled) this.handleKeydownOnItem(event, index)\n }}\n onMouseOver={() => this.emitHoverFromOption(option)}\n onPointerOver={() => this.emitHoverFromOption(option)}\n onFocus={() => this.emitHoverFromOption(option)}\n >\n {this.isMultiple ? (\n <br-checkbox\n name={`checkbox-${index}-${this.customId}`}\n label={option.label || option.value}\n checked={option.selected === true}\n disabled={this.disabled}\n onClick={(e) => e.stopPropagation()}\n onCheckedChange={() => {\n if (!this.disabled) this.handleSelectionByValue(option.value)\n }}\n />\n ) : (\n <br-radio\n exportparts=\"radio-input, radio-label\"\n name={`radio-${index}-${this.customId}`}\n label={option.label || option.value}\n checked={option.selected === true}\n disabled={this.disabled}\n onClick={(e) => e.stopPropagation()}\n onCheckedChange={() => {\n if (!this.disabled) this.handleSelectionByValue(option.value)\n }}\n />\n )}\n </div>\n ))\n }\n\n /**\n * Determina um id para o radio.\n */\n private getComputedId() {\n return this.customId?.length > 0 ? this.customId : `br-select-${this.customId}`\n }\n\n /**\n * Inverte o valor da prop `isOpen`\n */\n @Method()\n async toggleOpen() {\n this.isExpanded = !this.isExpanded\n }\n\n /**\n * Limpa todas as opções selecionadas.\n */\n @Method()\n async clear() {\n const updatedOptions = this.parsedOptions.map((option) => ({ ...option, selected: false }))\n this.parsedOptions = updatedOptions\n\n const newValue = this.isMultiple ? [] : undefined\n this.selectedValue = newValue\n this.value = newValue\n\n this.updateSelectedOptions()\n this.updateSelectedAllState()\n this.valueChange.emit(newValue)\n\n try {\n this.elementInternals.setFormValue(JSON.stringify(newValue ?? (this.isMultiple ? [] : null)))\n } catch {\n // Ignora erro em testes onde setFormValue não é implementado\n }\n }\n\n /**\n * Retorna o valor selecionado.\n * @returns {Promise<string | string[]>} O valor atual.\n */\n @Method()\n async getValue() {\n return this.value\n }\n\n /**\n * Define o valor do componente.\n * @param {string | string[]} newValue O novo valor a ser definido.\n */\n @Method()\n async setValue(newValue: string | string[]) {\n this.value = newValue\n // O @Watch('value') cuidará da sincronização\n }\n\n private getCssClassMap(): CssClassMap {\n return {\n 'br-select': true,\n }\n }\n\n private handleSearchInput(event: Event) {\n const value = (event.target as HTMLInputElement).value ?? ''\n this.searchTerm = value\n this.filteredOptions = this.getFilteredOptions(value)\n this.isExpanded = true\n }\n\n private handleSearchFocus() {\n this.isFocused = true\n this.filteredOptions = this.getFilteredOptions(this.searchTerm)\n }\n\n private handleSearchBlur(event: FocusEvent) {\n // Se o foco foi movido para dentro do componente (ex: clicou no checkbox/item),\n // não limpamos a busca para manter a lista filtrada estável e permitir o clique.\n const relatedTarget = event.relatedTarget as Node\n if (relatedTarget && (this.el.contains(relatedTarget) || this.el.shadowRoot?.contains(relatedTarget))) {\n return\n }\n\n this.isFocused = false\n // Ao sair do campo, volta a exibir o resumo das seleções\n this.searchTerm = ''\n this.filteredOptions = this.getFilteredOptions('')\n }\n\n render() {\n return (\n <div class={this.getCssClassMap()} id={this.getComputedId()} aria-disabled={this.disabled}>\n {this.renderInput()}\n\n {this.isExpanded && (\n <br-list\n tabindex={-1}\n onKeyDown={(event) => this.handleKeydownOnList(event)}\n style={this.inputWidth !== undefined ? { width: this.inputWidth } : undefined}\n >\n {this.isMultiple && this.renderSelectAllCheckbox()}\n {this.renderOptions()}\n </br-list>\n )}\n </div>\n )\n }\n}\n\nlet selectId = 0\n"]}
@@ -2,7 +2,6 @@
2
2
  * Construído por SERPRO
3
3
  * © https://serpro.gov.br/ - MIT License.
4
4
  */
5
- import { __awaiter } from "tslib";
6
5
  import { h, Host, } from "@stencil/core";
7
6
  import Helpers from "../../../utils/helpers";
8
7
  /**
@@ -45,51 +44,47 @@ export class SkipLinkItem {
45
44
  /**
46
45
  * Move o foco para este item.
47
46
  */
48
- itemFocus() {
49
- return __awaiter(this, void 0, void 0, function* () {
50
- var _a;
51
- const brItemElement = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('br-item');
52
- if (brItemElement !== null) {
53
- yield new Promise((resolve) => requestAnimationFrame(resolve));
54
- const brItemShadowRoot = brItemElement.shadowRoot;
55
- if (brItemShadowRoot !== null) {
56
- const focusableElement = brItemShadowRoot.querySelector('a, button');
57
- if (focusableElement !== null) {
58
- focusableElement.focus();
59
- this.brSkiplinkItemFocus.emit({ itemId: this.customId });
60
- return;
61
- }
47
+ async itemFocus() {
48
+ var _a;
49
+ const brItemElement = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('br-item');
50
+ if (brItemElement !== null) {
51
+ await new Promise((resolve) => requestAnimationFrame(resolve));
52
+ const brItemShadowRoot = brItemElement.shadowRoot;
53
+ if (brItemShadowRoot !== null) {
54
+ const focusableElement = brItemShadowRoot.querySelector('a, button');
55
+ if (focusableElement !== null) {
56
+ focusableElement.focus();
57
+ this.brSkiplinkItemFocus.emit({ itemId: this.customId });
58
+ return;
62
59
  }
63
- brItemElement.focus();
64
- this.brSkiplinkItemFocus.emit({ itemId: this.customId });
65
60
  }
66
- });
61
+ brItemElement.focus();
62
+ this.brSkiplinkItemFocus.emit({ itemId: this.customId });
63
+ }
67
64
  }
68
65
  /**
69
66
  * Navega para o target definido.
70
67
  * Move o foco para o elemento alvo e ajusta a rolagem da página se necessário.
71
68
  */
72
- navigateToTarget() {
73
- return __awaiter(this, void 0, void 0, function* () {
74
- try {
75
- const targetElement = document.querySelector(this.target);
76
- if (targetElement !== null) {
77
- targetElement.setAttribute('tabindex', '-1');
78
- targetElement.focus();
79
- targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
80
- this.brSkiplinkItemClick.emit({
81
- itemId: this.customId,
82
- target: this.target,
83
- });
84
- }
85
- else {
86
- console.warn(`Skip Link: Target element "${this.target}" not found`);
87
- }
69
+ async navigateToTarget() {
70
+ try {
71
+ const targetElement = document.querySelector(this.target);
72
+ if (targetElement !== null) {
73
+ targetElement.setAttribute('tabindex', '-1');
74
+ targetElement.focus();
75
+ targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
76
+ this.brSkiplinkItemClick.emit({
77
+ itemId: this.customId,
78
+ target: this.target,
79
+ });
88
80
  }
89
- catch (error) {
90
- console.error('Skip Link: Error navigating to target', error);
81
+ else {
82
+ console.warn(`Skip Link: Target element "${this.target}" not found`);
91
83
  }
92
- });
84
+ }
85
+ catch (error) {
86
+ console.error('Skip Link: Error navigating to target', error);
87
+ }
93
88
  }
94
89
  /**
95
90
  * Listener para cliques no item.
@@ -1 +1 @@
1
- {"version":3,"file":"skip-link-item.js","sourceRoot":"","sources":["../../../../../../../packages/webcomponents/src/components/skip-link/skip-link-item/skip-link-item.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n} from '@stencil/core'\n\nimport Helpers from '../../../utils/helpers'\n\n/**\n * ## Design System\n *\n * Para a documentação completa de design, incluindo diretrizes de uso, acessibilidade e exemplos visuais, consulte o [Design System do GovBR](https://www.gov.br/ds/components/skip-link?tab=designer).\n *\n * @slot default - Slot para o texto do link de navegação rápida.\n * @slot tag - Slot para personalizar a tag numérica do atalho de teclado, exibindo o valor de key-number por padrão.\n */\n@Component({\n tag: 'br-skiplink-item',\n styleUrl: 'skip-link-item.scss',\n shadow: true,\n})\nexport class SkipLinkItem {\n /**\n * Referência ao elemento host do componente.\n * Utilize esta propriedade para acessar e manipular o elemento do DOM associado ao componente.\n */\n @Element() el: HTMLBrSkiplinkItemElement\n\n @AttachInternals() elementInternals: ElementInternals\n\n /**\n * ID do elemento de destino ou seletor CSS.\n * Este é o elemento para o qual o usuário será levado ao ativar este item.\n */\n @Prop({ reflect: true }) readonly target!: string\n\n /**\n * Número da tecla para acesso rápido.\n * Permite que o usuário ative este item pressionando Alt+[keyNumber].\n * Aceita valores de 1 a 9.\n * Esta propriedade implementa uma alternativa ao accessKey nativa,\n * fornecendo um atalho de teclado consistente e acessível.\n */\n @Prop({ reflect: true }) readonly keyNumber?: number\n\n /**\n * ID personalizado.\n * Caso não seja fornecido, um ID gerado automaticamente será usado.\n */\n @Prop({ reflect: true }) readonly customId: string = Helpers.generateUniqueId()\n\n /**\n * Controla a visibilidade da tag numérica.\n * Quando `true`, a tag numérica não será exibida, mesmo que `keyNumber` esteja definido.\n * O atalho de teclado continua funcionando, apenas a indicação visual é ocultada.\n */\n @Prop({ reflect: true }) readonly hideTag: boolean = false\n\n /**\n * Estado interno que armazena o índice do item (1, 2, 3...).\n * Definido automaticamente pelo componente pai.\n */\n @State() private itemIndex: number | null = null\n\n /**\n * Estado interno que armazena o total de itens.\n * Definido automaticamente pelo componente pai.\n */\n @State() private itemTotal: number | null = null\n\n /**\n * MutationObserver para monitorar mudanças nos atributos de contagem.\n * Observa quando o componente pai define data-item-index e data-item-total.\n */\n private mutationObserver: MutationObserver | null = null\n\n /**\n * Evento emitido quando o item é clicado/ativado.\n * O evento contém informações sobre o item e o target.\n */\n @Event() brSkiplinkItemClick: EventEmitter<{ itemId: string; target: string }>\n\n /**\n * Evento emitido quando o item recebe foco.\n */\n @Event() brSkiplinkItemFocus: EventEmitter<{ itemId: string }>\n\n /**\n * Move o foco para este item.\n */\n @Method()\n async itemFocus(): Promise<void> {\n const brItemElement = this.el.shadowRoot?.querySelector('br-item') as HTMLElement | null\n\n if (brItemElement !== null) {\n await new Promise((resolve) => requestAnimationFrame(resolve))\n\n const brItemShadowRoot = brItemElement.shadowRoot\n if (brItemShadowRoot !== null) {\n const focusableElement = brItemShadowRoot.querySelector('a, button') as HTMLElement | null\n if (focusableElement !== null) {\n focusableElement.focus()\n this.brSkiplinkItemFocus.emit({ itemId: this.customId })\n return\n }\n }\n\n brItemElement.focus()\n this.brSkiplinkItemFocus.emit({ itemId: this.customId })\n }\n }\n\n /**\n * Navega para o target definido.\n * Move o foco para o elemento alvo e ajusta a rolagem da página se necessário.\n */\n @Method()\n async navigateToTarget(): Promise<void> {\n try {\n const targetElement = document.querySelector(this.target) as HTMLElement | null\n\n if (targetElement !== null) {\n targetElement.setAttribute('tabindex', '-1')\n targetElement.focus()\n\n targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' })\n\n this.brSkiplinkItemClick.emit({\n itemId: this.customId,\n target: this.target,\n })\n } else {\n console.warn(`Skip Link: Target element \"${this.target}\" not found`)\n }\n } catch (error) {\n console.error('Skip Link: Error navigating to target', error)\n }\n }\n\n /**\n * Listener para cliques no item.\n */\n @Listen('click')\n handleClick(_event: MouseEvent) {\n this.navigateToTarget()\n }\n\n /**\n * Listener para teclas Enter, Space e atalho Alt+[keyNumber].\n */\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n const skipLink = this.el.closest('br-skip-link') as HTMLBrSkipLinkElement\n if (skipLink !== null && typeof skipLink.hide === 'function') {\n event.preventDefault()\n skipLink.hide()\n }\n return\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.navigateToTarget()\n return\n }\n\n // atalho Alt+[keyNumber]\n if (event.altKey && this.keyNumber && event.key === this.keyNumber.toString()) {\n event.preventDefault()\n this.navigateToTarget()\n return\n }\n }\n\n /**\n * Listener para foco no item.\n */\n @Listen('focus')\n handleFocus() {\n this.brSkiplinkItemFocus.emit({ itemId: this.customId })\n }\n\n componentWillLoad() {\n this.updateItemCount()\n }\n\n componentDidLoad() {\n this.mutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.type === 'attributes' &&\n (mutation.attributeName === 'data-item-index' || mutation.attributeName === 'data-item-total')\n ) {\n this.updateItemCount()\n }\n })\n })\n\n this.mutationObserver.observe(this.el, {\n attributes: true,\n attributeFilter: ['data-item-index', 'data-item-total'],\n })\n }\n\n disconnectedCallback() {\n if (this.mutationObserver !== null && this.mutationObserver !== undefined) {\n this.mutationObserver.disconnect()\n this.mutationObserver = null\n }\n }\n\n /**\n * Atualiza a contagem de itens lendo os atributos definidos pelo componente pai.\n */\n private updateItemCount() {\n const indexAttr = this.el.getAttribute('data-item-index')\n const totalAttr = this.el.getAttribute('data-item-total')\n\n if (indexAttr !== null && totalAttr !== null) {\n this.itemIndex = parseInt(indexAttr, 10)\n this.itemTotal = parseInt(totalAttr, 10)\n } else {\n this.itemIndex = null\n this.itemTotal = null\n }\n }\n\n /**\n * Retorna a string de contagem no formato (X/Y) se disponível.\n */\n private getItemCountText(): string | null {\n if (this.itemIndex !== null && this.itemTotal !== null) {\n return ` (${this.itemIndex}/${this.itemTotal})`\n }\n return null\n }\n\n render() {\n const itemCountText = this.getItemCountText()\n\n return (\n <Host>\n <br-item\n href={this.target}\n id={this.customId}\n density=\"large\"\n aria-keyshortcuts={this.keyNumber !== undefined ? `Alt+${this.keyNumber}` : undefined}\n >\n <slot></slot>\n {itemCountText && <span aria-hidden=\"true\">{itemCountText}</span>}\n {this.keyNumber && !this.hideTag && (\n <slot name=\"tag\" slot=\"end\">\n <br-tag class=\"ml-1 text\" color=\"bg-interactive\">\n {this.keyNumber}\n </br-tag>\n </slot>\n )}\n </br-item>\n </Host>\n )\n }\n}\n"]}
1
+ {"version":3,"file":"skip-link-item.js","sourceRoot":"","sources":["../../../../../../../packages/webcomponents/src/components/skip-link/skip-link-item/skip-link-item.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,SAAS,EACT,OAAO,EACP,KAAK,EAEL,CAAC,EACD,IAAI,EACJ,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,GACN,MAAM,eAAe,CAAA;AAEtB,OAAO,OAAO,MAAM,wBAAwB,CAAA;AAE5C;;;;;;;GAOG;AAMH,MAAM,OAAO,YAAY;IALzB;QA6BE;;;WAGG;QAC+B,aAAQ,GAAW,OAAO,CAAC,gBAAgB,EAAE,CAAA;QAE/E;;;;WAIG;QAC+B,YAAO,GAAY,KAAK,CAAA;QAE1D;;;WAGG;QACc,cAAS,GAAkB,IAAI,CAAA;QAEhD;;;WAGG;QACc,cAAS,GAAkB,IAAI,CAAA;QAEhD;;;WAGG;QACK,qBAAgB,GAA4B,IAAI,CAAA;KA4LzD;IA/KC;;OAEG;IAEH,KAAK,CAAC,SAAS;;QACb,MAAM,aAAa,GAAG,MAAA,IAAI,CAAC,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,SAAS,CAAuB,CAAA;QAExF,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YAC3B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAA;YAE9D,MAAM,gBAAgB,GAAG,aAAa,CAAC,UAAU,CAAA;YACjD,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;gBAC9B,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,aAAa,CAAC,WAAW,CAAuB,CAAA;gBAC1F,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;oBAC9B,gBAAgB,CAAC,KAAK,EAAE,CAAA;oBACxB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;oBACxD,OAAM;gBACR,CAAC;YACH,CAAC;YAED,aAAa,CAAC,KAAK,EAAE,CAAA;YACrB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;IAED;;;OAGG;IAEH,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAuB,CAAA;YAE/E,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC3B,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;gBAC5C,aAAa,CAAC,KAAK,EAAE,CAAA;gBAErB,aAAa,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;gBAEpE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;oBAC5B,MAAM,EAAE,IAAI,CAAC,QAAQ;oBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,MAAM,aAAa,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAA;QAC/D,CAAC;IACH,CAAC;IAED;;OAEG;IAEH,WAAW,CAAC,MAAkB;QAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAA;IACzB,CAAC;IAED;;OAEG;IAEH,aAAa,CAAC,KAAoB;QAChC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAA0B,CAAA;YACzE,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC7D,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,QAAQ,CAAC,IAAI,EAAE,CAAA;YACjB,CAAC;YACD,OAAM;QACR,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC/C,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,IAAI,CAAC,gBAAgB,EAAE,CAAA;YACvB,OAAM;QACR,CAAC;QAED,yBAAyB;QACzB,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC9E,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,IAAI,CAAC,gBAAgB,EAAE,CAAA;YACvB,OAAM;QACR,CAAC;IACH,CAAC;IAED;;OAEG;IAEH,WAAW;QACT,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,EAAE,EAAE;YACzD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC7B,IACE,QAAQ,CAAC,IAAI,KAAK,YAAY;oBAC9B,CAAC,QAAQ,CAAC,aAAa,KAAK,iBAAiB,IAAI,QAAQ,CAAC,aAAa,KAAK,iBAAiB,CAAC,EAC9F,CAAC;oBACD,IAAI,CAAC,eAAe,EAAE,CAAA;gBACxB,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE;YACrC,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;SACxD,CAAC,CAAA;IACJ,CAAC;IAED,oBAAoB;QAClB,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;YAC1E,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAA;YAClC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAA;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAA;QAEzD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;YACxC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAC1C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACvD,OAAO,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,GAAG,CAAA;QACjD,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM;QACJ,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAE7C,OAAO,CACL,EAAC,IAAI;YACH,gEACE,IAAI,EAAE,IAAI,CAAC,MAAM,EACjB,EAAE,EAAE,IAAI,CAAC,QAAQ,EACjB,OAAO,EAAC,OAAO,uBACI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;gBAErF,8DAAa;gBACZ,aAAa,IAAI,4EAAkB,MAAM,IAAE,aAAa,CAAQ;gBAChE,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAClC,6DAAM,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,KAAK;oBACzB,+DAAQ,KAAK,EAAC,WAAW,EAAC,KAAK,EAAC,gBAAgB,IAC7C,IAAI,CAAC,SAAS,CACR,CACJ,CACR,CACO,CACL,CACR,CAAA;IACH,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n} from '@stencil/core'\n\nimport Helpers from '../../../utils/helpers'\n\n/**\n * ## Design System\n *\n * Para a documentação completa de design, incluindo diretrizes de uso, acessibilidade e exemplos visuais, consulte o [Design System do GovBR](https://www.gov.br/ds/components/skip-link?tab=designer).\n *\n * @slot default - Slot para o texto do link de navegação rápida.\n * @slot tag - Slot para personalizar a tag numérica do atalho de teclado, exibindo o valor de key-number por padrão.\n */\n@Component({\n tag: 'br-skiplink-item',\n styleUrl: 'skip-link-item.scss',\n shadow: true,\n})\nexport class SkipLinkItem {\n /**\n * Referência ao elemento host do componente.\n * Utilize esta propriedade para acessar e manipular o elemento do DOM associado ao componente.\n */\n @Element() el: HTMLBrSkiplinkItemElement\n\n @AttachInternals() elementInternals: ElementInternals\n\n /**\n * ID do elemento de destino ou seletor CSS.\n * Este é o elemento para o qual o usuário será levado ao ativar este item.\n */\n @Prop({ reflect: true }) readonly target!: string\n\n /**\n * Número da tecla para acesso rápido.\n * Permite que o usuário ative este item pressionando Alt+[keyNumber].\n * Aceita valores de 1 a 9.\n * Esta propriedade implementa uma alternativa ao accessKey nativa,\n * fornecendo um atalho de teclado consistente e acessível.\n */\n @Prop({ reflect: true }) readonly keyNumber?: number\n\n /**\n * ID personalizado.\n * Caso não seja fornecido, um ID gerado automaticamente será usado.\n */\n @Prop({ reflect: true }) readonly customId: string = Helpers.generateUniqueId()\n\n /**\n * Controla a visibilidade da tag numérica.\n * Quando `true`, a tag numérica não será exibida, mesmo que `keyNumber` esteja definido.\n * O atalho de teclado continua funcionando, apenas a indicação visual é ocultada.\n */\n @Prop({ reflect: true }) readonly hideTag: boolean = false\n\n /**\n * Estado interno que armazena o índice do item (1, 2, 3...).\n * Definido automaticamente pelo componente pai.\n */\n @State() private itemIndex: number | null = null\n\n /**\n * Estado interno que armazena o total de itens.\n * Definido automaticamente pelo componente pai.\n */\n @State() private itemTotal: number | null = null\n\n /**\n * MutationObserver para monitorar mudanças nos atributos de contagem.\n * Observa quando o componente pai define data-item-index e data-item-total.\n */\n private mutationObserver: MutationObserver | null = null\n\n /**\n * Evento emitido quando o item é clicado/ativado.\n * O evento contém informações sobre o item e o target.\n */\n @Event() brSkiplinkItemClick: EventEmitter<{ itemId: string; target: string }>\n\n /**\n * Evento emitido quando o item recebe foco.\n */\n @Event() brSkiplinkItemFocus: EventEmitter<{ itemId: string }>\n\n /**\n * Move o foco para este item.\n */\n @Method()\n async itemFocus(): Promise<void> {\n const brItemElement = this.el.shadowRoot?.querySelector('br-item') as HTMLElement | null\n\n if (brItemElement !== null) {\n await new Promise((resolve) => requestAnimationFrame(resolve))\n\n const brItemShadowRoot = brItemElement.shadowRoot\n if (brItemShadowRoot !== null) {\n const focusableElement = brItemShadowRoot.querySelector('a, button') as HTMLElement | null\n if (focusableElement !== null) {\n focusableElement.focus()\n this.brSkiplinkItemFocus.emit({ itemId: this.customId })\n return\n }\n }\n\n brItemElement.focus()\n this.brSkiplinkItemFocus.emit({ itemId: this.customId })\n }\n }\n\n /**\n * Navega para o target definido.\n * Move o foco para o elemento alvo e ajusta a rolagem da página se necessário.\n */\n @Method()\n async navigateToTarget(): Promise<void> {\n try {\n const targetElement = document.querySelector(this.target) as HTMLElement | null\n\n if (targetElement !== null) {\n targetElement.setAttribute('tabindex', '-1')\n targetElement.focus()\n\n targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' })\n\n this.brSkiplinkItemClick.emit({\n itemId: this.customId,\n target: this.target,\n })\n } else {\n console.warn(`Skip Link: Target element \"${this.target}\" not found`)\n }\n } catch (error) {\n console.error('Skip Link: Error navigating to target', error)\n }\n }\n\n /**\n * Listener para cliques no item.\n */\n @Listen('click')\n handleClick(_event: MouseEvent) {\n this.navigateToTarget()\n }\n\n /**\n * Listener para teclas Enter, Space e atalho Alt+[keyNumber].\n */\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n const skipLink = this.el.closest('br-skip-link') as HTMLBrSkipLinkElement\n if (skipLink !== null && typeof skipLink.hide === 'function') {\n event.preventDefault()\n skipLink.hide()\n }\n return\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.navigateToTarget()\n return\n }\n\n // atalho Alt+[keyNumber]\n if (event.altKey && this.keyNumber && event.key === this.keyNumber.toString()) {\n event.preventDefault()\n this.navigateToTarget()\n return\n }\n }\n\n /**\n * Listener para foco no item.\n */\n @Listen('focus')\n handleFocus() {\n this.brSkiplinkItemFocus.emit({ itemId: this.customId })\n }\n\n componentWillLoad() {\n this.updateItemCount()\n }\n\n componentDidLoad() {\n this.mutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.type === 'attributes' &&\n (mutation.attributeName === 'data-item-index' || mutation.attributeName === 'data-item-total')\n ) {\n this.updateItemCount()\n }\n })\n })\n\n this.mutationObserver.observe(this.el, {\n attributes: true,\n attributeFilter: ['data-item-index', 'data-item-total'],\n })\n }\n\n disconnectedCallback() {\n if (this.mutationObserver !== null && this.mutationObserver !== undefined) {\n this.mutationObserver.disconnect()\n this.mutationObserver = null\n }\n }\n\n /**\n * Atualiza a contagem de itens lendo os atributos definidos pelo componente pai.\n */\n private updateItemCount() {\n const indexAttr = this.el.getAttribute('data-item-index')\n const totalAttr = this.el.getAttribute('data-item-total')\n\n if (indexAttr !== null && totalAttr !== null) {\n this.itemIndex = parseInt(indexAttr, 10)\n this.itemTotal = parseInt(totalAttr, 10)\n } else {\n this.itemIndex = null\n this.itemTotal = null\n }\n }\n\n /**\n * Retorna a string de contagem no formato (X/Y) se disponível.\n */\n private getItemCountText(): string | null {\n if (this.itemIndex !== null && this.itemTotal !== null) {\n return ` (${this.itemIndex}/${this.itemTotal})`\n }\n return null\n }\n\n render() {\n const itemCountText = this.getItemCountText()\n\n return (\n <Host>\n <br-item\n href={this.target}\n id={this.customId}\n density=\"large\"\n aria-keyshortcuts={this.keyNumber !== undefined ? `Alt+${this.keyNumber}` : undefined}\n >\n <slot></slot>\n {itemCountText && <span aria-hidden=\"true\">{itemCountText}</span>}\n {this.keyNumber && !this.hideTag && (\n <slot name=\"tag\" slot=\"end\">\n <br-tag class=\"ml-1 text\" color=\"bg-interactive\">\n {this.keyNumber}\n </br-tag>\n </slot>\n )}\n </br-item>\n </Host>\n )\n }\n}\n"]}
@@ -2,7 +2,6 @@
2
2
  * Construído por SERPRO
3
3
  * © https://serpro.gov.br/ - MIT License.
4
4
  */
5
- import { __awaiter } from "tslib";
6
5
  import { h, Host, } from "@stencil/core";
7
6
  import Helpers from "../../utils/helpers";
8
7
  /**
@@ -248,40 +247,36 @@ export class SkipLink {
248
247
  /**
249
248
  * Oculta o componente programaticamente.
250
249
  */
251
- hide() {
252
- return __awaiter(this, void 0, void 0, function* () {
253
- const focusedElement = this.el.querySelector(':focus');
254
- if (focusedElement instanceof HTMLElement) {
255
- focusedElement.blur();
256
- }
257
- this.isVisible = false;
258
- this.brDidHide.emit();
259
- return Promise.resolve();
260
- });
250
+ async hide() {
251
+ const focusedElement = this.el.querySelector(':focus');
252
+ if (focusedElement instanceof HTMLElement) {
253
+ focusedElement.blur();
254
+ }
255
+ this.isVisible = false;
256
+ this.brDidHide.emit();
257
+ return Promise.resolve();
261
258
  }
262
259
  /**
263
260
  * Exibe o componente programaticamente.
264
261
  */
265
- show() {
266
- return __awaiter(this, void 0, void 0, function* () {
267
- var _a;
268
- this.isVisible = true;
269
- yield new Promise((resolve) => requestAnimationFrame(resolve));
270
- const firstItem = this.el.querySelector('br-skiplink-item');
271
- if (firstItem !== null) {
272
- if (typeof firstItem.itemFocus === 'function') {
273
- yield firstItem.itemFocus();
274
- }
275
- else {
276
- const focusableElement = (_a = firstItem.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('a, button');
277
- if (focusableElement !== null) {
278
- focusableElement.focus();
279
- }
262
+ async show() {
263
+ var _a;
264
+ this.isVisible = true;
265
+ await new Promise((resolve) => requestAnimationFrame(resolve));
266
+ const firstItem = this.el.querySelector('br-skiplink-item');
267
+ if (firstItem !== null) {
268
+ if (typeof firstItem.itemFocus === 'function') {
269
+ await firstItem.itemFocus();
270
+ }
271
+ else {
272
+ const focusableElement = (_a = firstItem.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('a, button');
273
+ if (focusableElement !== null) {
274
+ focusableElement.focus();
280
275
  }
281
276
  }
282
- this.brDidShow.emit();
283
- return Promise.resolve();
284
- });
277
+ }
278
+ this.brDidShow.emit();
279
+ return Promise.resolve();
285
280
  }
286
281
  getEffectivePosition() {
287
282
  if (this.isSmallScreen) {
@@ -1 +1 @@
1
- {"version":3,"file":"skip-link.js","sourceRoot":"","sources":["../../../../../../packages/webcomponents/src/components/skip-link/skip-link.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core'\n\nimport Helpers from '../../utils/helpers'\nimport { CssClassMap } from '../../utils/interfaces'\n\n/**\n * ## Design System\n *\n * Para a documentação completa de design, incluindo diretrizes de uso, acessibilidade e exemplos visuais, consulte o [Design System do GovBR](https://www.gov.br/ds/components/skip-link?tab=designer).\n *\n * @slot default - Slot para inserir os itens de navegação rápida (br-skiplink-item).\n *\n * @part container - Parte para o contêiner principal do componente skip-link, usada para estilização via ::part().\n */\n@Component({\n tag: 'br-skip-link',\n styleUrl: 'skip-link.scss',\n shadow: true,\n})\nexport class SkipLink {\n /**\n * Referência ao elemento host do componente.\n * Utilize esta propriedade para acessar e manipular o elemento do DOM associado ao componente.\n */\n @Element() el: HTMLBrSkipLinkElement\n\n @AttachInternals() elementInternals: ElementInternals\n\n /**\n * Identificador único.\n * Caso não seja fornecido, um ID gerado automaticamente será usado.\n */\n @Prop({ reflect: true }) readonly customId: string = Helpers.generateUniqueId()\n\n /**\n * Define se o skip link apresenta um ou múltiplos itens visíveis.\n * - 'simple': Exibe apenas um item por vez.\n * - 'compound': Exibe uma lista com múltiplos itens.\n */\n @Prop({ reflect: true }) readonly variant: 'simple' | 'compound' = 'compound'\n\n /**\n * Define a posição do skip link na tela.\n * - 'top-left': Posicionado no canto superior esquerdo.\n * - 'top-center': Posicionado no centro superior.\n * - 'top-right': Posicionado no canto superior direito.\n */\n @Prop({ reflect: true }) readonly position: 'top-left' | 'top-center' | 'top-right' = 'top-left'\n\n /**\n * Define o z-index do componente.\n * Controla a ordem de empilhamento do componente na página.\n */\n @Prop({ reflect: true }) readonly zIndex: number | null = null\n\n /**\n * Exibe a contagem de itens no formato (1/4), (2/4), etc.\n * Quando `true`, cada item mostrará sua posição relativa ao total de itens.\n * Por padrão, é `true` para o modo simple e `false` para o modo compound.\n */\n @Prop({ reflect: true }) readonly showItemCount?: boolean\n\n /**\n * Estado interno que controla a visibilidade do componente.\n */\n @State() private isVisible: boolean = false\n\n /**\n * Define se o componente está em modo tela pequena\n */\n @State() private isSmallScreen: boolean = false\n\n /**\n * Define se o componente precisa mudar para modo simples por falta de espaço\n */\n @State() private needsSimpleMode: boolean = false\n\n /**\n * Largura do container pai\n */\n @State() private containerWidth: number = 0\n\n /**\n * ResizeObserver para monitorar mudanças no tamanho do container\n */\n private resizeObserver: ResizeObserver\n\n /**\n * Evento emitido quando um item do skiplink é ativado.\n * O evento contém informações sobre o item acionado e o elemento target.\n */\n @Event() brSkiplinkNavigation: EventEmitter<{ itemId: string; target: string }>\n\n /**\n * Evento emitido quando o skiplink se torna visível.\n */\n @Event() brDidShow: EventEmitter<void>\n\n /**\n * Evento emitido quando o skiplink se torna oculto.\n */\n @Event() brDidHide: EventEmitter<void>\n\n @Watch('zIndex')\n updateStyles() {\n if (this.zIndex !== null && this.zIndex !== undefined) {\n this.el.style.zIndex = `${this.zIndex}`\n this.el.style.setProperty('--skiplink-layer', `${this.zIndex}`)\n }\n }\n\n /**\n * Observa mudanças nos estados que afetam o modo efetivo (simple/compound)\n * e atualiza as contagens dos itens quando necessário.\n */\n @Watch('needsSimpleMode')\n @Watch('isSmallScreen')\n watchModeChanges() {\n this.updateItemCounts()\n }\n\n /**\n * Listener para eventos de navegação dos itens filhos.\n */\n @Listen('brSkiplinkItemClick')\n handleItemNavigation(event: CustomEvent<{ itemId: string; target: string }>) {\n this.brSkiplinkNavigation.emit(event.detail)\n this.hide()\n }\n\n /**\n * Listener para evento de foco no componente.\n */\n @Listen('focusin')\n handleFocusIn() {\n if (!this.isVisible) {\n this.show()\n }\n }\n\n /**\n * Listener para evento de perda de foco no componente.\n */\n @Listen('focusout')\n handleFocusOut(event: FocusEvent) {\n const relatedTarget = event.relatedTarget as HTMLElement | null\n if (relatedTarget === null || !this.el.contains(relatedTarget)) {\n this.hide()\n }\n }\n\n /**\n * Listener para a tecla Escape.\n */\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape' && this.isVisible) {\n event.preventDefault()\n this.hide()\n ;(document.activeElement as HTMLElement)?.blur()\n return\n }\n }\n\n connectedCallback() {\n document.addEventListener('keydown', this.globalKeyHandler)\n\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(this.updateContainerSize)\n const parentElement = this.el.parentElement\n if (parentElement !== null) {\n this.resizeObserver.observe(parentElement)\n }\n }\n }\n\n disconnectedCallback() {\n document.removeEventListener('keydown', this.globalKeyHandler)\n\n if (this.resizeObserver !== undefined && this.resizeObserver !== null) {\n this.resizeObserver.disconnect()\n }\n }\n\n componentWillLoad() {\n const parentElement = this.el.parentElement\n if (parentElement !== null) {\n this.containerWidth = parentElement.clientWidth\n }\n }\n\n componentDidLoad() {\n this.updateItemCounts()\n this.calculateItemsWidth()\n }\n\n /**\n * Manipulador global para atalhos de teclado Alt+[número].\n */\n private globalKeyHandler = (event: KeyboardEvent) => {\n if (event.altKey && /^[1-9]$/.test(event.key)) {\n const items = this.el.querySelectorAll('br-skiplink-item') as NodeListOf<HTMLBrSkiplinkItemElement>\n const targetItem = Array.from(items).find((item) => {\n const keyNumber = item.getAttribute('key-number')\n return keyNumber === event.key\n })\n\n if (targetItem && typeof targetItem.navigateToTarget === 'function') {\n event.preventDefault()\n targetItem.navigateToTarget()\n this.show()\n }\n }\n }\n\n /**\n * Calcula a largura total dos itens e atualiza os estados do componente\n */\n private updateContainerSize = (entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const width = entry.contentRect.width\n this.containerWidth = width\n this.isSmallScreen = width < 570\n\n if (!this.isSmallScreen) {\n this.calculateItemsWidth()\n } else {\n this.needsSimpleMode = false\n }\n }\n }\n\n /**\n * Calcula a largura total dos itens do skip-link e determina se deve usar modo simple ou compound.\n */\n private calculateItemsWidth() {\n requestAnimationFrame(() => {\n const items = this.el.querySelectorAll('br-skiplink-item') as NodeListOf<HTMLBrSkiplinkItemElement>\n\n if (items.length === 0 || this.isSmallScreen) return\n if (items.length > 4) {\n this.needsSimpleMode = true\n return\n }\n\n this.needsSimpleMode = false\n const totalWidth = this.sumItemsWidth(items)\n\n const availableWidth = this.calculateAvailableWidth()\n\n if (totalWidth > availableWidth) {\n this.needsSimpleMode = true\n }\n })\n }\n\n /**\n * Soma a largura de todos os itens do skip-link\n */\n private sumItemsWidth(items: NodeListOf<HTMLBrSkiplinkItemElement>): number {\n let total = 0\n\n items.forEach((item) => {\n const brItem = item.shadowRoot?.querySelector('br-item') as HTMLElement | null\n if (brItem === null) return\n\n const width = brItem.offsetWidth || brItem.scrollWidth || brItem.getBoundingClientRect().width\n total += width\n })\n\n return total\n }\n\n /**\n * Calcula a largura disponível descontando margens e margem de segurança\n */\n private calculateAvailableWidth(): number {\n if (this.containerWidth === 0) return 0\n\n // Obtém o valor da margem definida no CSS\n const computedStyle = getComputedStyle(this.el)\n const spacingValue = computedStyle.getPropertyValue('--spacing-scale-3x').trim()\n const margin = parseFloat(spacingValue) || 24\n\n // Margem de segurança para evitar quebras visuais\n const safetyMargin = 20\n\n // Desconta: margem esquerda + margem direita + margem de segurança\n return this.containerWidth - margin * 2 - safetyMargin\n }\n\n /**\n * Atualiza os atributos de contagem nos itens filhos.\n * Adiciona data-item-index e data-item-total em cada br-skiplink-item.\n * A contagem é exibida quando o componente está em modo simple (incluindo modo responsivo).\n */\n private updateItemCounts() {\n const effectiveVariant = this.isSmallScreen || this.needsSimpleMode ? 'simple' : this.variant\n const shouldShowCount = this.showItemCount !== undefined ? this.showItemCount : effectiveVariant === 'simple'\n const isCompoundMode = effectiveVariant === 'compound'\n\n const items = this.el.querySelectorAll('br-skiplink-item') as NodeListOf<HTMLBrSkiplinkItemElement>\n\n items.forEach((item) => {\n if (isCompoundMode) {\n item.classList.add('compound-mode')\n } else {\n item.classList.remove('compound-mode')\n }\n })\n\n if (!shouldShowCount) {\n items.forEach((item) => {\n item.removeAttribute('data-item-index')\n item.removeAttribute('data-item-total')\n })\n return\n }\n\n const total = items.length\n items.forEach((item, index) => {\n item.setAttribute('data-item-index', (index + 1).toString())\n item.setAttribute('data-item-total', total.toString())\n })\n }\n\n /**\n * Oculta o componente programaticamente.\n */\n @Method()\n async hide(): Promise<void> {\n const focusedElement = this.el.querySelector(':focus')\n if (focusedElement instanceof HTMLElement) {\n focusedElement.blur()\n }\n this.isVisible = false\n this.brDidHide.emit()\n return Promise.resolve()\n }\n\n /**\n * Exibe o componente programaticamente.\n */\n @Method()\n async show(): Promise<void> {\n this.isVisible = true\n\n await new Promise((resolve) => requestAnimationFrame(resolve))\n\n const firstItem = this.el.querySelector('br-skiplink-item') as HTMLBrSkiplinkItemElement | null\n if (firstItem !== null) {\n if (typeof firstItem.itemFocus === 'function') {\n await firstItem.itemFocus()\n } else {\n const focusableElement = firstItem.shadowRoot?.querySelector('a, button') as HTMLElement | null\n if (focusableElement !== null) {\n focusableElement.focus()\n }\n }\n }\n\n this.brDidShow.emit()\n return Promise.resolve()\n }\n\n private getEffectivePosition(): 'top-left' | 'top-center' | 'top-right' {\n if (this.isSmallScreen) {\n return 'top-left'\n }\n return this.position\n }\n\n private getCssClassMap(): CssClassMap {\n const effectiveVariant = this.isSmallScreen || this.needsSimpleMode ? 'simple' : this.variant\n const effectivePosition = this.getEffectivePosition()\n\n return {\n 'br-skiplink': true,\n full: effectiveVariant === 'compound',\n [effectivePosition]: true,\n visible: this.isVisible,\n }\n }\n\n render() {\n return (\n <Host>\n <nav part=\"container\" class={this.getCssClassMap()} id={this.customId} role=\"navigation\">\n <br-list>\n <slot></slot>\n </br-list>\n </nav>\n </Host>\n )\n }\n}\n"]}
1
+ {"version":3,"file":"skip-link.js","sourceRoot":"","sources":["../../../../../../packages/webcomponents/src/components/skip-link/skip-link.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core'\n\nimport Helpers from '../../utils/helpers'\nimport { CssClassMap } from '../../utils/interfaces'\n\n/**\n * ## Design System\n *\n * Para a documentação completa de design, incluindo diretrizes de uso, acessibilidade e exemplos visuais, consulte o [Design System do GovBR](https://www.gov.br/ds/components/skip-link?tab=designer).\n *\n * @slot default - Slot para inserir os itens de navegação rápida (br-skiplink-item).\n *\n * @part container - Parte para o contêiner principal do componente skip-link, usada para estilização via ::part().\n */\n@Component({\n tag: 'br-skip-link',\n styleUrl: 'skip-link.scss',\n shadow: true,\n})\nexport class SkipLink {\n /**\n * Referência ao elemento host do componente.\n * Utilize esta propriedade para acessar e manipular o elemento do DOM associado ao componente.\n */\n @Element() el: HTMLBrSkipLinkElement\n\n @AttachInternals() elementInternals: ElementInternals\n\n /**\n * Identificador único.\n * Caso não seja fornecido, um ID gerado automaticamente será usado.\n */\n @Prop({ reflect: true }) readonly customId: string = Helpers.generateUniqueId()\n\n /**\n * Define se o skip link apresenta um ou múltiplos itens visíveis.\n * - 'simple': Exibe apenas um item por vez.\n * - 'compound': Exibe uma lista com múltiplos itens.\n */\n @Prop({ reflect: true }) readonly variant: 'simple' | 'compound' = 'compound'\n\n /**\n * Define a posição do skip link na tela.\n * - 'top-left': Posicionado no canto superior esquerdo.\n * - 'top-center': Posicionado no centro superior.\n * - 'top-right': Posicionado no canto superior direito.\n */\n @Prop({ reflect: true }) readonly position: 'top-left' | 'top-center' | 'top-right' = 'top-left'\n\n /**\n * Define o z-index do componente.\n * Controla a ordem de empilhamento do componente na página.\n */\n @Prop({ reflect: true }) readonly zIndex: number | null = null\n\n /**\n * Exibe a contagem de itens no formato (1/4), (2/4), etc.\n * Quando `true`, cada item mostrará sua posição relativa ao total de itens.\n * Por padrão, é `true` para o modo simple e `false` para o modo compound.\n */\n @Prop({ reflect: true }) readonly showItemCount?: boolean\n\n /**\n * Estado interno que controla a visibilidade do componente.\n */\n @State() private isVisible: boolean = false\n\n /**\n * Define se o componente está em modo tela pequena\n */\n @State() private isSmallScreen: boolean = false\n\n /**\n * Define se o componente precisa mudar para modo simples por falta de espaço\n */\n @State() private needsSimpleMode: boolean = false\n\n /**\n * Largura do container pai\n */\n @State() private containerWidth: number = 0\n\n /**\n * ResizeObserver para monitorar mudanças no tamanho do container\n */\n private resizeObserver: ResizeObserver\n\n /**\n * Evento emitido quando um item do skiplink é ativado.\n * O evento contém informações sobre o item acionado e o elemento target.\n */\n @Event() brSkiplinkNavigation: EventEmitter<{ itemId: string; target: string }>\n\n /**\n * Evento emitido quando o skiplink se torna visível.\n */\n @Event() brDidShow: EventEmitter<void>\n\n /**\n * Evento emitido quando o skiplink se torna oculto.\n */\n @Event() brDidHide: EventEmitter<void>\n\n @Watch('zIndex')\n updateStyles() {\n if (this.zIndex !== null && this.zIndex !== undefined) {\n this.el.style.zIndex = `${this.zIndex}`\n this.el.style.setProperty('--skiplink-layer', `${this.zIndex}`)\n }\n }\n\n /**\n * Observa mudanças nos estados que afetam o modo efetivo (simple/compound)\n * e atualiza as contagens dos itens quando necessário.\n */\n @Watch('needsSimpleMode')\n @Watch('isSmallScreen')\n watchModeChanges() {\n this.updateItemCounts()\n }\n\n /**\n * Listener para eventos de navegação dos itens filhos.\n */\n @Listen('brSkiplinkItemClick')\n handleItemNavigation(event: CustomEvent<{ itemId: string; target: string }>) {\n this.brSkiplinkNavigation.emit(event.detail)\n this.hide()\n }\n\n /**\n * Listener para evento de foco no componente.\n */\n @Listen('focusin')\n handleFocusIn() {\n if (!this.isVisible) {\n this.show()\n }\n }\n\n /**\n * Listener para evento de perda de foco no componente.\n */\n @Listen('focusout')\n handleFocusOut(event: FocusEvent) {\n const relatedTarget = event.relatedTarget as HTMLElement | null\n if (relatedTarget === null || !this.el.contains(relatedTarget)) {\n this.hide()\n }\n }\n\n /**\n * Listener para a tecla Escape.\n */\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape' && this.isVisible) {\n event.preventDefault()\n this.hide()\n ;(document.activeElement as HTMLElement)?.blur()\n return\n }\n }\n\n connectedCallback() {\n document.addEventListener('keydown', this.globalKeyHandler)\n\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(this.updateContainerSize)\n const parentElement = this.el.parentElement\n if (parentElement !== null) {\n this.resizeObserver.observe(parentElement)\n }\n }\n }\n\n disconnectedCallback() {\n document.removeEventListener('keydown', this.globalKeyHandler)\n\n if (this.resizeObserver !== undefined && this.resizeObserver !== null) {\n this.resizeObserver.disconnect()\n }\n }\n\n componentWillLoad() {\n const parentElement = this.el.parentElement\n if (parentElement !== null) {\n this.containerWidth = parentElement.clientWidth\n }\n }\n\n componentDidLoad() {\n this.updateItemCounts()\n this.calculateItemsWidth()\n }\n\n /**\n * Manipulador global para atalhos de teclado Alt+[número].\n */\n private globalKeyHandler = (event: KeyboardEvent) => {\n if (event.altKey && /^[1-9]$/.test(event.key)) {\n const items = this.el.querySelectorAll('br-skiplink-item') as NodeListOf<HTMLBrSkiplinkItemElement>\n const targetItem = Array.from(items).find((item) => {\n const keyNumber = item.getAttribute('key-number')\n return keyNumber === event.key\n })\n\n if (targetItem && typeof targetItem.navigateToTarget === 'function') {\n event.preventDefault()\n targetItem.navigateToTarget()\n this.show()\n }\n }\n }\n\n /**\n * Calcula a largura total dos itens e atualiza os estados do componente\n */\n private updateContainerSize = (entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const width = entry.contentRect.width\n this.containerWidth = width\n this.isSmallScreen = width < 570\n\n if (!this.isSmallScreen) {\n this.calculateItemsWidth()\n } else {\n this.needsSimpleMode = false\n }\n }\n }\n\n /**\n * Calcula a largura total dos itens do skip-link e determina se deve usar modo simple ou compound.\n */\n private calculateItemsWidth() {\n requestAnimationFrame(() => {\n const items = this.el.querySelectorAll('br-skiplink-item') as NodeListOf<HTMLBrSkiplinkItemElement>\n\n if (items.length === 0 || this.isSmallScreen) return\n if (items.length > 4) {\n this.needsSimpleMode = true\n return\n }\n\n this.needsSimpleMode = false\n const totalWidth = this.sumItemsWidth(items)\n\n const availableWidth = this.calculateAvailableWidth()\n\n if (totalWidth > availableWidth) {\n this.needsSimpleMode = true\n }\n })\n }\n\n /**\n * Soma a largura de todos os itens do skip-link\n */\n private sumItemsWidth(items: NodeListOf<HTMLBrSkiplinkItemElement>): number {\n let total = 0\n\n items.forEach((item) => {\n const brItem = item.shadowRoot?.querySelector('br-item') as HTMLElement | null\n if (brItem === null) return\n\n const width = brItem.offsetWidth || brItem.scrollWidth || brItem.getBoundingClientRect().width\n total += width\n })\n\n return total\n }\n\n /**\n * Calcula a largura disponível descontando margens e margem de segurança\n */\n private calculateAvailableWidth(): number {\n if (this.containerWidth === 0) return 0\n\n // Obtém o valor da margem definida no CSS\n const computedStyle = getComputedStyle(this.el)\n const spacingValue = computedStyle.getPropertyValue('--spacing-scale-3x').trim()\n const margin = parseFloat(spacingValue) || 24\n\n // Margem de segurança para evitar quebras visuais\n const safetyMargin = 20\n\n // Desconta: margem esquerda + margem direita + margem de segurança\n return this.containerWidth - margin * 2 - safetyMargin\n }\n\n /**\n * Atualiza os atributos de contagem nos itens filhos.\n * Adiciona data-item-index e data-item-total em cada br-skiplink-item.\n * A contagem é exibida quando o componente está em modo simple (incluindo modo responsivo).\n */\n private updateItemCounts() {\n const effectiveVariant = this.isSmallScreen || this.needsSimpleMode ? 'simple' : this.variant\n const shouldShowCount = this.showItemCount !== undefined ? this.showItemCount : effectiveVariant === 'simple'\n const isCompoundMode = effectiveVariant === 'compound'\n\n const items = this.el.querySelectorAll('br-skiplink-item') as NodeListOf<HTMLBrSkiplinkItemElement>\n\n items.forEach((item) => {\n if (isCompoundMode) {\n item.classList.add('compound-mode')\n } else {\n item.classList.remove('compound-mode')\n }\n })\n\n if (!shouldShowCount) {\n items.forEach((item) => {\n item.removeAttribute('data-item-index')\n item.removeAttribute('data-item-total')\n })\n return\n }\n\n const total = items.length\n items.forEach((item, index) => {\n item.setAttribute('data-item-index', (index + 1).toString())\n item.setAttribute('data-item-total', total.toString())\n })\n }\n\n /**\n * Oculta o componente programaticamente.\n */\n @Method()\n async hide(): Promise<void> {\n const focusedElement = this.el.querySelector(':focus')\n if (focusedElement instanceof HTMLElement) {\n focusedElement.blur()\n }\n this.isVisible = false\n this.brDidHide.emit()\n return Promise.resolve()\n }\n\n /**\n * Exibe o componente programaticamente.\n */\n @Method()\n async show(): Promise<void> {\n this.isVisible = true\n\n await new Promise((resolve) => requestAnimationFrame(resolve))\n\n const firstItem = this.el.querySelector('br-skiplink-item') as HTMLBrSkiplinkItemElement | null\n if (firstItem !== null) {\n if (typeof firstItem.itemFocus === 'function') {\n await firstItem.itemFocus()\n } else {\n const focusableElement = firstItem.shadowRoot?.querySelector('a, button') as HTMLElement | null\n if (focusableElement !== null) {\n focusableElement.focus()\n }\n }\n }\n\n this.brDidShow.emit()\n return Promise.resolve()\n }\n\n private getEffectivePosition(): 'top-left' | 'top-center' | 'top-right' {\n if (this.isSmallScreen) {\n return 'top-left'\n }\n return this.position\n }\n\n private getCssClassMap(): CssClassMap {\n const effectiveVariant = this.isSmallScreen || this.needsSimpleMode ? 'simple' : this.variant\n const effectivePosition = this.getEffectivePosition()\n\n return {\n 'br-skiplink': true,\n full: effectiveVariant === 'compound',\n [effectivePosition]: true,\n visible: this.isVisible,\n }\n }\n\n render() {\n return (\n <Host>\n <nav part=\"container\" class={this.getCssClassMap()} id={this.customId} role=\"navigation\">\n <br-list>\n <slot></slot>\n </br-list>\n </nav>\n </Host>\n )\n }\n}\n"]}
@@ -2,7 +2,6 @@
2
2
  * Construído por SERPRO
3
3
  * © https://serpro.gov.br/ - MIT License.
4
4
  */
5
- import { __awaiter } from "tslib";
6
5
  import { h, Host, } from "@stencil/core";
7
6
  /**
8
7
  * ## Design System
@@ -111,55 +110,43 @@ export class StepItem {
111
110
  *
112
111
  * Método disponibilizado via api do elemento que indica a posição do step item, ele serve para setar o state stepItemPositionStatus do componente
113
112
  */
114
- setStepItemPositionStatus(value) {
115
- return __awaiter(this, void 0, void 0, function* () {
116
- this.stepItemPositionStatus = value;
117
- });
113
+ async setStepItemPositionStatus(value) {
114
+ this.stepItemPositionStatus = value;
118
115
  }
119
116
  /**
120
117
  * Método que define a orientação do stepItem e controla a exibição da linha do tempo após o componente.
121
118
  */
122
- handleShowTimeLine(value, layout) {
123
- return __awaiter(this, void 0, void 0, function* () {
124
- this.showTimeLine = value;
125
- this.stepLayout = layout;
126
- });
119
+ async handleShowTimeLine(value, layout) {
120
+ this.showTimeLine = value;
121
+ this.stepLayout = layout;
127
122
  }
128
123
  /**
129
124
  *
130
125
  * Método disponibilizado via api do elemento que atribui o valor ao estado que define onde o label, o texto de destaque, irá ficar localizado
131
126
  */
132
- setLabelPosition(value) {
133
- return __awaiter(this, void 0, void 0, function* () {
134
- this.labelPosition = value;
135
- });
127
+ async setLabelPosition(value) {
128
+ this.labelPosition = value;
136
129
  }
137
130
  /**
138
131
  *
139
132
  * Método disponibilizado via api do elemento que atribui o valor que irá definir o tipo de conteúdo apresentado dentro do componente stepItem
140
133
  */
141
- setContentType(value) {
142
- return __awaiter(this, void 0, void 0, function* () {
143
- this.contentType = value;
144
- });
134
+ async setContentType(value) {
135
+ this.contentType = value;
145
136
  }
146
137
  /**
147
138
  *
148
139
  * Método disponibilizado via api do elemento que atribui o valor que irá definir o modo como o componente irá se comportar e exibir seu estilo.
149
140
  */
150
- setMode(value) {
151
- return __awaiter(this, void 0, void 0, function* () {
152
- this.mode = value;
153
- });
141
+ async setMode(value) {
142
+ this.mode = value;
154
143
  }
155
144
  /**
156
145
  *
157
146
  * Método disponibilizado via api do elemento que atribui o valor que irá ser exibido dentro do componente stepItem
158
147
  */
159
- setContent(value) {
160
- return __awaiter(this, void 0, void 0, function* () {
161
- this.content = value;
162
- });
148
+ async setContent(value) {
149
+ this.content = value;
163
150
  }
164
151
  getStepContainerClassMap() {
165
152
  return {