@bigbot-community/bigbot-ui 1.0.1

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 (352) hide show
  1. package/dist/braip-ui.cjs +2 -0
  2. package/dist/braip-ui.cjs.map +1 -0
  3. package/dist/braip-ui.js +2502 -0
  4. package/dist/braip-ui.js.map +1 -0
  5. package/dist/style.css +1 -0
  6. package/dist/types/components/atoms/BrAvatar/BrAvatar.vue.d.ts +9 -0
  7. package/dist/types/components/atoms/BrAvatar/BrAvatar.vue.d.ts.map +1 -0
  8. package/dist/types/components/atoms/BrAvatar/index.d.ts +3 -0
  9. package/dist/types/components/atoms/BrAvatar/index.d.ts.map +1 -0
  10. package/dist/types/components/atoms/BrAvatar/types.d.ts +37 -0
  11. package/dist/types/components/atoms/BrAvatar/types.d.ts.map +1 -0
  12. package/dist/types/components/atoms/BrBadge/BrBadge.test.d.ts +2 -0
  13. package/dist/types/components/atoms/BrBadge/BrBadge.test.d.ts.map +1 -0
  14. package/dist/types/components/atoms/BrBadge/BrBadge.vue.d.ts +18 -0
  15. package/dist/types/components/atoms/BrBadge/BrBadge.vue.d.ts.map +1 -0
  16. package/dist/types/components/atoms/BrBadge/index.d.ts +3 -0
  17. package/dist/types/components/atoms/BrBadge/index.d.ts.map +1 -0
  18. package/dist/types/components/atoms/BrBadge/types.d.ts +20 -0
  19. package/dist/types/components/atoms/BrBadge/types.d.ts.map +1 -0
  20. package/dist/types/components/atoms/BrButton/BrButton.test.d.ts +2 -0
  21. package/dist/types/components/atoms/BrButton/BrButton.test.d.ts.map +1 -0
  22. package/dist/types/components/atoms/BrButton/BrButton.vue.d.ts +25 -0
  23. package/dist/types/components/atoms/BrButton/BrButton.vue.d.ts.map +1 -0
  24. package/dist/types/components/atoms/BrButton/index.d.ts +3 -0
  25. package/dist/types/components/atoms/BrButton/index.d.ts.map +1 -0
  26. package/dist/types/components/atoms/BrButton/types.d.ts +35 -0
  27. package/dist/types/components/atoms/BrButton/types.d.ts.map +1 -0
  28. package/dist/types/components/atoms/BrCheckbox/BrCheckbox.test.d.ts +2 -0
  29. package/dist/types/components/atoms/BrCheckbox/BrCheckbox.test.d.ts.map +1 -0
  30. package/dist/types/components/atoms/BrCheckbox/BrCheckbox.vue.d.ts +29 -0
  31. package/dist/types/components/atoms/BrCheckbox/BrCheckbox.vue.d.ts.map +1 -0
  32. package/dist/types/components/atoms/BrCheckbox/BrCheckboxGroup.vue.d.ts +17 -0
  33. package/dist/types/components/atoms/BrCheckbox/BrCheckboxGroup.vue.d.ts.map +1 -0
  34. package/dist/types/components/atoms/BrCheckbox/index.d.ts +4 -0
  35. package/dist/types/components/atoms/BrCheckbox/index.d.ts.map +1 -0
  36. package/dist/types/components/atoms/BrCheckbox/types.d.ts +86 -0
  37. package/dist/types/components/atoms/BrCheckbox/types.d.ts.map +1 -0
  38. package/dist/types/components/atoms/BrImage/BrImage.vue.d.ts +9 -0
  39. package/dist/types/components/atoms/BrImage/BrImage.vue.d.ts.map +1 -0
  40. package/dist/types/components/atoms/BrImage/index.d.ts +3 -0
  41. package/dist/types/components/atoms/BrImage/index.d.ts.map +1 -0
  42. package/dist/types/components/atoms/BrImage/types.d.ts +43 -0
  43. package/dist/types/components/atoms/BrImage/types.d.ts.map +1 -0
  44. package/dist/types/components/atoms/BrInput/BrInput.test.d.ts +2 -0
  45. package/dist/types/components/atoms/BrInput/BrInput.test.d.ts.map +1 -0
  46. package/dist/types/components/atoms/BrInput/BrInput.vue.d.ts +35 -0
  47. package/dist/types/components/atoms/BrInput/BrInput.vue.d.ts.map +1 -0
  48. package/dist/types/components/atoms/BrInput/index.d.ts +3 -0
  49. package/dist/types/components/atoms/BrInput/index.d.ts.map +1 -0
  50. package/dist/types/components/atoms/BrInput/types.d.ts +55 -0
  51. package/dist/types/components/atoms/BrInput/types.d.ts.map +1 -0
  52. package/dist/types/components/atoms/BrProgressbar/BrProgressbar.vue.d.ts +15 -0
  53. package/dist/types/components/atoms/BrProgressbar/BrProgressbar.vue.d.ts.map +1 -0
  54. package/dist/types/components/atoms/BrProgressbar/index.d.ts +3 -0
  55. package/dist/types/components/atoms/BrProgressbar/index.d.ts.map +1 -0
  56. package/dist/types/components/atoms/BrProgressbar/types.d.ts +55 -0
  57. package/dist/types/components/atoms/BrProgressbar/types.d.ts.map +1 -0
  58. package/dist/types/components/atoms/BrRadio/BrRadio.vue.d.ts +26 -0
  59. package/dist/types/components/atoms/BrRadio/BrRadio.vue.d.ts.map +1 -0
  60. package/dist/types/components/atoms/BrRadio/BrRadioGroup.vue.d.ts +17 -0
  61. package/dist/types/components/atoms/BrRadio/BrRadioGroup.vue.d.ts.map +1 -0
  62. package/dist/types/components/atoms/BrRadio/index.d.ts +4 -0
  63. package/dist/types/components/atoms/BrRadio/index.d.ts.map +1 -0
  64. package/dist/types/components/atoms/BrRadio/types.d.ts +77 -0
  65. package/dist/types/components/atoms/BrRadio/types.d.ts.map +1 -0
  66. package/dist/types/components/atoms/BrRating/BrRating.vue.d.ts +21 -0
  67. package/dist/types/components/atoms/BrRating/BrRating.vue.d.ts.map +1 -0
  68. package/dist/types/components/atoms/BrRating/index.d.ts +3 -0
  69. package/dist/types/components/atoms/BrRating/index.d.ts.map +1 -0
  70. package/dist/types/components/atoms/BrRating/types.d.ts +51 -0
  71. package/dist/types/components/atoms/BrRating/types.d.ts.map +1 -0
  72. package/dist/types/components/atoms/BrSelect/BrSelect.vue.d.ts +27 -0
  73. package/dist/types/components/atoms/BrSelect/BrSelect.vue.d.ts.map +1 -0
  74. package/dist/types/components/atoms/BrSelect/index.d.ts +3 -0
  75. package/dist/types/components/atoms/BrSelect/index.d.ts.map +1 -0
  76. package/dist/types/components/atoms/BrSelect/types.d.ts +52 -0
  77. package/dist/types/components/atoms/BrSelect/types.d.ts.map +1 -0
  78. package/dist/types/components/atoms/BrSpinner/BrSpinner.vue.d.ts +8 -0
  79. package/dist/types/components/atoms/BrSpinner/BrSpinner.vue.d.ts.map +1 -0
  80. package/dist/types/components/atoms/BrSpinner/index.d.ts +3 -0
  81. package/dist/types/components/atoms/BrSpinner/index.d.ts.map +1 -0
  82. package/dist/types/components/atoms/BrSpinner/types.d.ts +20 -0
  83. package/dist/types/components/atoms/BrSpinner/types.d.ts.map +1 -0
  84. package/dist/types/components/atoms/BrSwitch/BrSwitch.test.d.ts +2 -0
  85. package/dist/types/components/atoms/BrSwitch/BrSwitch.test.d.ts.map +1 -0
  86. package/dist/types/components/atoms/BrSwitch/BrSwitch.vue.d.ts +15 -0
  87. package/dist/types/components/atoms/BrSwitch/BrSwitch.vue.d.ts.map +1 -0
  88. package/dist/types/components/atoms/BrSwitch/index.d.ts +3 -0
  89. package/dist/types/components/atoms/BrSwitch/index.d.ts.map +1 -0
  90. package/dist/types/components/atoms/BrSwitch/types.d.ts +14 -0
  91. package/dist/types/components/atoms/BrSwitch/types.d.ts.map +1 -0
  92. package/dist/types/components/atoms/BrTextarea/BrTextarea.vue.d.ts +31 -0
  93. package/dist/types/components/atoms/BrTextarea/BrTextarea.vue.d.ts.map +1 -0
  94. package/dist/types/components/atoms/BrTextarea/index.d.ts +3 -0
  95. package/dist/types/components/atoms/BrTextarea/index.d.ts.map +1 -0
  96. package/dist/types/components/atoms/BrTextarea/types.d.ts +37 -0
  97. package/dist/types/components/atoms/BrTextarea/types.d.ts.map +1 -0
  98. package/dist/types/components/atoms/BrTitle/BrTitle.vue.d.ts +22 -0
  99. package/dist/types/components/atoms/BrTitle/BrTitle.vue.d.ts.map +1 -0
  100. package/dist/types/components/atoms/BrTitle/index.d.ts +3 -0
  101. package/dist/types/components/atoms/BrTitle/index.d.ts.map +1 -0
  102. package/dist/types/components/atoms/BrTitle/types.d.ts +41 -0
  103. package/dist/types/components/atoms/BrTitle/types.d.ts.map +1 -0
  104. package/dist/types/components/atoms/BrVideo/BrVideo.vue.d.ts +39 -0
  105. package/dist/types/components/atoms/BrVideo/BrVideo.vue.d.ts.map +1 -0
  106. package/dist/types/components/atoms/BrVideo/index.d.ts +3 -0
  107. package/dist/types/components/atoms/BrVideo/index.d.ts.map +1 -0
  108. package/dist/types/components/atoms/BrVideo/types.d.ts +48 -0
  109. package/dist/types/components/atoms/BrVideo/types.d.ts.map +1 -0
  110. package/dist/types/components/atoms/index.d.ts +16 -0
  111. package/dist/types/components/atoms/index.d.ts.map +1 -0
  112. package/dist/types/components/index.d.ts +4 -0
  113. package/dist/types/components/index.d.ts.map +1 -0
  114. package/dist/types/components/molecules/BrAccordion/BrAccordion.vue.d.ts +23 -0
  115. package/dist/types/components/molecules/BrAccordion/BrAccordion.vue.d.ts.map +1 -0
  116. package/dist/types/components/molecules/BrAccordion/BrAccordionItem.vue.d.ts +20 -0
  117. package/dist/types/components/molecules/BrAccordion/BrAccordionItem.vue.d.ts.map +1 -0
  118. package/dist/types/components/molecules/BrAccordion/index.d.ts +4 -0
  119. package/dist/types/components/molecules/BrAccordion/index.d.ts.map +1 -0
  120. package/dist/types/components/molecules/BrAccordion/types.d.ts +72 -0
  121. package/dist/types/components/molecules/BrAccordion/types.d.ts.map +1 -0
  122. package/dist/types/components/molecules/BrCalendar/BrCalendar.vue.d.ts +21 -0
  123. package/dist/types/components/molecules/BrCalendar/BrCalendar.vue.d.ts.map +1 -0
  124. package/dist/types/components/molecules/BrCalendar/index.d.ts +3 -0
  125. package/dist/types/components/molecules/BrCalendar/index.d.ts.map +1 -0
  126. package/dist/types/components/molecules/BrCalendar/types.d.ts +68 -0
  127. package/dist/types/components/molecules/BrCalendar/types.d.ts.map +1 -0
  128. package/dist/types/components/molecules/BrCard/BrCard.vue.d.ts +35 -0
  129. package/dist/types/components/molecules/BrCard/BrCard.vue.d.ts.map +1 -0
  130. package/dist/types/components/molecules/BrCard/index.d.ts +3 -0
  131. package/dist/types/components/molecules/BrCard/index.d.ts.map +1 -0
  132. package/dist/types/components/molecules/BrCard/types.d.ts +61 -0
  133. package/dist/types/components/molecules/BrCard/types.d.ts.map +1 -0
  134. package/dist/types/components/molecules/BrFormField/BrFormField.vue.d.ts +24 -0
  135. package/dist/types/components/molecules/BrFormField/BrFormField.vue.d.ts.map +1 -0
  136. package/dist/types/components/molecules/BrFormField/index.d.ts +3 -0
  137. package/dist/types/components/molecules/BrFormField/index.d.ts.map +1 -0
  138. package/dist/types/components/molecules/BrFormField/types.d.ts +55 -0
  139. package/dist/types/components/molecules/BrFormField/types.d.ts.map +1 -0
  140. package/dist/types/components/molecules/BrModal/BrModal.test.d.ts +2 -0
  141. package/dist/types/components/molecules/BrModal/BrModal.test.d.ts.map +1 -0
  142. package/dist/types/components/molecules/BrModal/BrModal.vue.d.ts +43 -0
  143. package/dist/types/components/molecules/BrModal/BrModal.vue.d.ts.map +1 -0
  144. package/dist/types/components/molecules/BrModal/index.d.ts +3 -0
  145. package/dist/types/components/molecules/BrModal/index.d.ts.map +1 -0
  146. package/dist/types/components/molecules/BrModal/types.d.ts +49 -0
  147. package/dist/types/components/molecules/BrModal/types.d.ts.map +1 -0
  148. package/dist/types/components/molecules/BrStepper/BrStepper.vue.d.ts +22 -0
  149. package/dist/types/components/molecules/BrStepper/BrStepper.vue.d.ts.map +1 -0
  150. package/dist/types/components/molecules/BrStepper/index.d.ts +3 -0
  151. package/dist/types/components/molecules/BrStepper/index.d.ts.map +1 -0
  152. package/dist/types/components/molecules/BrStepper/types.d.ts +65 -0
  153. package/dist/types/components/molecules/BrStepper/types.d.ts.map +1 -0
  154. package/dist/types/components/molecules/BrTabs/BrTab.vue.d.ts +23 -0
  155. package/dist/types/components/molecules/BrTabs/BrTab.vue.d.ts.map +1 -0
  156. package/dist/types/components/molecules/BrTabs/BrTabPanel.vue.d.ts +16 -0
  157. package/dist/types/components/molecules/BrTabs/BrTabPanel.vue.d.ts.map +1 -0
  158. package/dist/types/components/molecules/BrTabs/BrTabs.test.d.ts +2 -0
  159. package/dist/types/components/molecules/BrTabs/BrTabs.test.d.ts.map +1 -0
  160. package/dist/types/components/molecules/BrTabs/BrTabs.vue.d.ts +40 -0
  161. package/dist/types/components/molecules/BrTabs/BrTabs.vue.d.ts.map +1 -0
  162. package/dist/types/components/molecules/BrTabs/index.d.ts +5 -0
  163. package/dist/types/components/molecules/BrTabs/index.d.ts.map +1 -0
  164. package/dist/types/components/molecules/BrTabs/types.d.ts +116 -0
  165. package/dist/types/components/molecules/BrTabs/types.d.ts.map +1 -0
  166. package/dist/types/components/molecules/index.d.ts +8 -0
  167. package/dist/types/components/molecules/index.d.ts.map +1 -0
  168. package/dist/types/components/organisms/BrNavbar/BrNavbar.vue.d.ts +28 -0
  169. package/dist/types/components/organisms/BrNavbar/BrNavbar.vue.d.ts.map +1 -0
  170. package/dist/types/components/organisms/BrNavbar/index.d.ts +3 -0
  171. package/dist/types/components/organisms/BrNavbar/index.d.ts.map +1 -0
  172. package/dist/types/components/organisms/BrNavbar/types.d.ts +84 -0
  173. package/dist/types/components/organisms/BrNavbar/types.d.ts.map +1 -0
  174. package/dist/types/components/organisms/BrSidebar/BrSidebar.vue.d.ts +35 -0
  175. package/dist/types/components/organisms/BrSidebar/BrSidebar.vue.d.ts.map +1 -0
  176. package/dist/types/components/organisms/BrSidebar/index.d.ts +3 -0
  177. package/dist/types/components/organisms/BrSidebar/index.d.ts.map +1 -0
  178. package/dist/types/components/organisms/BrSidebar/types.d.ts +100 -0
  179. package/dist/types/components/organisms/BrSidebar/types.d.ts.map +1 -0
  180. package/dist/types/components/organisms/index.d.ts +3 -0
  181. package/dist/types/components/organisms/index.d.ts.map +1 -0
  182. package/dist/types/index.d.ts +5 -0
  183. package/dist/types/index.d.ts.map +1 -0
  184. package/dist/types/plugin.d.ts +9 -0
  185. package/dist/types/plugin.d.ts.map +1 -0
  186. package/dist/types/types/index.d.ts +48 -0
  187. package/dist/types/types/index.d.ts.map +1 -0
  188. package/package.json +77 -0
  189. package/src/assets/icons/airplane.svg +7 -0
  190. package/src/assets/icons/anchor.svg +6 -0
  191. package/src/assets/icons/arrow-bottom-right-o.svg +9 -0
  192. package/src/assets/icons/arrow-bottom-right-r.svg +9 -0
  193. package/src/assets/icons/arrow-bottom-right.svg +7 -0
  194. package/src/assets/icons/arrow-down-o.svg +9 -0
  195. package/src/assets/icons/arrow-down-r.svg +9 -0
  196. package/src/assets/icons/arrow-down.svg +7 -0
  197. package/src/assets/icons/arrow-left-o.svg +9 -0
  198. package/src/assets/icons/arrow-left-r.svg +9 -0
  199. package/src/assets/icons/arrow-left.svg +7 -0
  200. package/src/assets/icons/arrow-long-up.svg +7 -0
  201. package/src/assets/icons/arrow-right-o.svg +9 -0
  202. package/src/assets/icons/arrow-right-r.svg +9 -0
  203. package/src/assets/icons/arrow-right.svg +7 -0
  204. package/src/assets/icons/arrow-top-left-o.svg +9 -0
  205. package/src/assets/icons/arrow-top-left-r.svg +9 -0
  206. package/src/assets/icons/arrow-top-left.svg +7 -0
  207. package/src/assets/icons/arrow-top-right-o.svg +9 -0
  208. package/src/assets/icons/arrow-top-right-r.svg +9 -0
  209. package/src/assets/icons/arrow-top-right.svg +7 -0
  210. package/src/assets/icons/arrow-up-o.svg +9 -0
  211. package/src/assets/icons/arrow-up-r.svg +9 -0
  212. package/src/assets/icons/arrow-up.svg +7 -0
  213. package/src/assets/icons/awards.svg +6 -0
  214. package/src/assets/icons/band-aid.svg +21 -0
  215. package/src/assets/icons/bee.svg +7 -0
  216. package/src/assets/icons/bitbucket.svg +7 -0
  217. package/src/assets/icons/block.svg +11 -0
  218. package/src/assets/icons/bowl.svg +6 -0
  219. package/src/assets/icons/boy.svg +14 -0
  220. package/src/assets/icons/briefcase.svg +9 -0
  221. package/src/assets/icons/browse.svg +13 -0
  222. package/src/assets/icons/brush.svg +6 -0
  223. package/src/assets/icons/calibrate.svg +11 -0
  224. package/src/assets/icons/cap.svg +9 -0
  225. package/src/assets/icons/card-clubs.svg +17 -0
  226. package/src/assets/icons/card-diamonds.svg +9 -0
  227. package/src/assets/icons/card-hearts.svg +11 -0
  228. package/src/assets/icons/card-spades.svg +11 -0
  229. package/src/assets/icons/check-o.svg +9 -0
  230. package/src/assets/icons/check-r.svg +9 -0
  231. package/src/assets/icons/check.svg +3 -0
  232. package/src/assets/icons/chevron-double-down-o.svg +14 -0
  233. package/src/assets/icons/chevron-double-down-r.svg +14 -0
  234. package/src/assets/icons/chevron-double-down.svg +12 -0
  235. package/src/assets/icons/chevron-double-left-o.svg +14 -0
  236. package/src/assets/icons/chevron-double-left-r.svg +14 -0
  237. package/src/assets/icons/chevron-double-left.svg +12 -0
  238. package/src/assets/icons/chevron-double-right-o.svg +14 -0
  239. package/src/assets/icons/chevron-double-right-r.svg +14 -0
  240. package/src/assets/icons/chevron-double-right.svg +12 -0
  241. package/src/assets/icons/pix.svg +7 -0
  242. package/src/assets/icons/push-chevron-left-o.svg +12 -0
  243. package/src/assets/icons/push-chevron-left-r.svg +12 -0
  244. package/src/assets/icons/push-chevron-left.svg +10 -0
  245. package/src/assets/icons/push-chevron-right-o.svg +12 -0
  246. package/src/assets/icons/push-chevron-right-r.svg +12 -0
  247. package/src/assets/icons/push-chevron-right.svg +10 -0
  248. package/src/assets/icons/push-chevron-up-o.svg +6 -0
  249. package/src/assets/icons/push-chevron-up-r.svg +6 -0
  250. package/src/assets/icons/push-chevron-up.svg +10 -0
  251. package/src/assets/icons/sync.svg +12 -0
  252. package/src/assets/icons/trending-down.svg +7 -0
  253. package/src/assets/icons/trending.svg +7 -0
  254. package/src/components/atoms/BrAvatar/BrAvatar.vue +154 -0
  255. package/src/components/atoms/BrAvatar/index.ts +2 -0
  256. package/src/components/atoms/BrAvatar/types.ts +43 -0
  257. package/src/components/atoms/BrBadge/BrBadge.test.ts +61 -0
  258. package/src/components/atoms/BrBadge/BrBadge.vue +125 -0
  259. package/src/components/atoms/BrBadge/index.ts +2 -0
  260. package/src/components/atoms/BrBadge/types.ts +22 -0
  261. package/src/components/atoms/BrButton/BrButton.test.ts +79 -0
  262. package/src/components/atoms/BrButton/BrButton.vue +291 -0
  263. package/src/components/atoms/BrButton/index.ts +2 -0
  264. package/src/components/atoms/BrButton/types.ts +44 -0
  265. package/src/components/atoms/BrCheckbox/BrCheckbox.test.ts +132 -0
  266. package/src/components/atoms/BrCheckbox/BrCheckbox.vue +198 -0
  267. package/src/components/atoms/BrCheckbox/BrCheckboxGroup.vue +92 -0
  268. package/src/components/atoms/BrCheckbox/index.ts +3 -0
  269. package/src/components/atoms/BrCheckbox/types.ts +102 -0
  270. package/src/components/atoms/BrImage/BrImage.vue +134 -0
  271. package/src/components/atoms/BrImage/index.ts +2 -0
  272. package/src/components/atoms/BrImage/types.ts +51 -0
  273. package/src/components/atoms/BrInput/BrInput.test.ts +98 -0
  274. package/src/components/atoms/BrInput/BrInput.vue +215 -0
  275. package/src/components/atoms/BrInput/index.ts +2 -0
  276. package/src/components/atoms/BrInput/types.ts +65 -0
  277. package/src/components/atoms/BrProgressbar/BrProgressbar.vue +204 -0
  278. package/src/components/atoms/BrProgressbar/index.ts +2 -0
  279. package/src/components/atoms/BrProgressbar/types.ts +64 -0
  280. package/src/components/atoms/BrRadio/BrRadio.vue +175 -0
  281. package/src/components/atoms/BrRadio/BrRadioGroup.vue +77 -0
  282. package/src/components/atoms/BrRadio/index.ts +3 -0
  283. package/src/components/atoms/BrRadio/types.ts +91 -0
  284. package/src/components/atoms/BrRating/BrRating.vue +234 -0
  285. package/src/components/atoms/BrRating/index.ts +2 -0
  286. package/src/components/atoms/BrRating/types.ts +60 -0
  287. package/src/components/atoms/BrSelect/BrSelect.vue +408 -0
  288. package/src/components/atoms/BrSelect/index.ts +2 -0
  289. package/src/components/atoms/BrSelect/types.ts +61 -0
  290. package/src/components/atoms/BrSpinner/BrSpinner.vue +125 -0
  291. package/src/components/atoms/BrSpinner/index.ts +2 -0
  292. package/src/components/atoms/BrSpinner/types.ts +22 -0
  293. package/src/components/atoms/BrSwitch/BrSwitch.test.ts +81 -0
  294. package/src/components/atoms/BrSwitch/BrSwitch.vue +181 -0
  295. package/src/components/atoms/BrSwitch/index.ts +2 -0
  296. package/src/components/atoms/BrSwitch/types.ts +15 -0
  297. package/src/components/atoms/BrTextarea/BrTextarea.vue +179 -0
  298. package/src/components/atoms/BrTextarea/index.ts +2 -0
  299. package/src/components/atoms/BrTextarea/types.ts +43 -0
  300. package/src/components/atoms/BrTitle/BrTitle.vue +154 -0
  301. package/src/components/atoms/BrTitle/index.ts +2 -0
  302. package/src/components/atoms/BrTitle/types.ts +47 -0
  303. package/src/components/atoms/BrVideo/BrVideo.vue +135 -0
  304. package/src/components/atoms/BrVideo/index.ts +2 -0
  305. package/src/components/atoms/BrVideo/types.ts +56 -0
  306. package/src/components/atoms/index.ts +20 -0
  307. package/src/components/index.ts +7 -0
  308. package/src/components/molecules/BrAccordion/BrAccordion.vue +112 -0
  309. package/src/components/molecules/BrAccordion/BrAccordionItem.vue +168 -0
  310. package/src/components/molecules/BrAccordion/index.ts +3 -0
  311. package/src/components/molecules/BrAccordion/types.ts +85 -0
  312. package/src/components/molecules/BrCalendar/BrCalendar.vue +553 -0
  313. package/src/components/molecules/BrCalendar/index.ts +2 -0
  314. package/src/components/molecules/BrCalendar/types.ts +80 -0
  315. package/src/components/molecules/BrCard/BrCard.vue +262 -0
  316. package/src/components/molecules/BrCard/index.ts +2 -0
  317. package/src/components/molecules/BrCard/types.ts +72 -0
  318. package/src/components/molecules/BrFormField/BrFormField.vue +241 -0
  319. package/src/components/molecules/BrFormField/index.ts +2 -0
  320. package/src/components/molecules/BrFormField/types.ts +64 -0
  321. package/src/components/molecules/BrModal/BrModal.test.ts +212 -0
  322. package/src/components/molecules/BrModal/BrModal.vue +404 -0
  323. package/src/components/molecules/BrModal/index.ts +2 -0
  324. package/src/components/molecules/BrModal/types.ts +57 -0
  325. package/src/components/molecules/BrStepper/BrStepper.vue +302 -0
  326. package/src/components/molecules/BrStepper/index.ts +2 -0
  327. package/src/components/molecules/BrStepper/types.ts +77 -0
  328. package/src/components/molecules/BrTabs/BrTab.vue +69 -0
  329. package/src/components/molecules/BrTabs/BrTabPanel.vue +36 -0
  330. package/src/components/molecules/BrTabs/BrTabs.test.ts +168 -0
  331. package/src/components/molecules/BrTabs/BrTabs.vue +319 -0
  332. package/src/components/molecules/BrTabs/index.ts +4 -0
  333. package/src/components/molecules/BrTabs/types.ts +139 -0
  334. package/src/components/molecules/index.ts +11 -0
  335. package/src/components/organisms/BrNavbar/BrNavbar.vue +424 -0
  336. package/src/components/organisms/BrNavbar/index.ts +2 -0
  337. package/src/components/organisms/BrNavbar/types.ts +101 -0
  338. package/src/components/organisms/BrSidebar/BrSidebar.vue +382 -0
  339. package/src/components/organisms/BrSidebar/index.ts +2 -0
  340. package/src/components/organisms/BrSidebar/types.ts +121 -0
  341. package/src/components/organisms/index.ts +6 -0
  342. package/src/index.ts +32 -0
  343. package/src/plugin.ts +61 -0
  344. package/src/styles/base/_animations.scss +187 -0
  345. package/src/styles/base/_reset.scss +109 -0
  346. package/src/styles/base/index.scss +6 -0
  347. package/src/styles/main.scss +9 -0
  348. package/src/styles/tokens/_colors.scss +185 -0
  349. package/src/styles/tokens/_spacing.scss +88 -0
  350. package/src/styles/tokens/_typography.scss +77 -0
  351. package/src/styles/tokens/index.scss +7 -0
  352. package/src/types/index.ts +125 -0
@@ -0,0 +1,408 @@
1
+ <script setup lang="ts">
2
+ /**
3
+ * BrSelect - Dropdown select component
4
+ *
5
+ * @example
6
+ * <BrSelect v-model="selected" :options="options" />
7
+ * <BrSelect v-model="value" :options="items" placeholder="Selecione..." />
8
+ */
9
+
10
+ import { computed, ref, watch, onMounted, onUnmounted } from 'vue'
11
+ import type { SelectProps, SelectOption } from './types'
12
+
13
+ // ---------------------------------------------------------------------------
14
+ // PROPS
15
+ // ---------------------------------------------------------------------------
16
+
17
+ const props = withDefaults(defineProps<SelectProps>(), {
18
+ options: () => [],
19
+ placeholder: 'Selecione...',
20
+ disabled: false,
21
+ error: false,
22
+ size: 'md',
23
+ searchable: false,
24
+ clearable: false,
25
+ })
26
+
27
+ // ---------------------------------------------------------------------------
28
+ // MODEL
29
+ // ---------------------------------------------------------------------------
30
+
31
+ const model = defineModel<string | number | null>()
32
+
33
+ // ---------------------------------------------------------------------------
34
+ // EMITS
35
+ // ---------------------------------------------------------------------------
36
+
37
+ const emit = defineEmits<{
38
+ (e: 'change', value: string | number | null): void
39
+ (e: 'open'): void
40
+ (e: 'close'): void
41
+ }>()
42
+
43
+ // ---------------------------------------------------------------------------
44
+ // REFS
45
+ // ---------------------------------------------------------------------------
46
+
47
+ const selectRef = ref<HTMLDivElement | null>(null)
48
+ const isOpen = ref(false)
49
+ const searchQuery = ref('')
50
+ const highlightedIndex = ref(0)
51
+
52
+ // ---------------------------------------------------------------------------
53
+ // COMPUTED
54
+ // ---------------------------------------------------------------------------
55
+
56
+ const selectedOption = computed(() => {
57
+ return props.options.find((opt) => opt.id === model.value)
58
+ })
59
+
60
+ const filteredOptions = computed(() => {
61
+ if (!props.searchable || !searchQuery.value) {
62
+ return props.options
63
+ }
64
+ const query = searchQuery.value.toLowerCase()
65
+ return props.options.filter((opt) => opt.text.toLowerCase().includes(query))
66
+ })
67
+
68
+ const classes = computed(() => [
69
+ 'br-select',
70
+ `br-select--${props.size}`,
71
+ {
72
+ 'br-select--open': isOpen.value,
73
+ 'br-select--error': props.error,
74
+ 'br-select--disabled': props.disabled,
75
+ 'br-select--has-value': model.value !== null && model.value !== undefined,
76
+ },
77
+ ])
78
+
79
+ // ---------------------------------------------------------------------------
80
+ // METHODS
81
+ // ---------------------------------------------------------------------------
82
+
83
+ function toggleDropdown() {
84
+ if (props.disabled) return
85
+ isOpen.value = !isOpen.value
86
+ if (isOpen.value) {
87
+ emit('open')
88
+ highlightedIndex.value = 0
89
+ } else {
90
+ emit('close')
91
+ searchQuery.value = ''
92
+ }
93
+ }
94
+
95
+ function selectOption(option: SelectOption) {
96
+ model.value = option.id
97
+ emit('change', option.id)
98
+ closeDropdown()
99
+ }
100
+
101
+ function closeDropdown() {
102
+ isOpen.value = false
103
+ searchQuery.value = ''
104
+ emit('close')
105
+ }
106
+
107
+ function clearSelection() {
108
+ model.value = null
109
+ emit('change', null)
110
+ }
111
+
112
+ function handleKeydown(event: KeyboardEvent) {
113
+ if (!isOpen.value) {
114
+ if (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown') {
115
+ event.preventDefault()
116
+ toggleDropdown()
117
+ }
118
+ return
119
+ }
120
+
121
+ switch (event.key) {
122
+ case 'ArrowDown':
123
+ event.preventDefault()
124
+ highlightedIndex.value = Math.min(highlightedIndex.value + 1, filteredOptions.value.length - 1)
125
+ break
126
+ case 'ArrowUp':
127
+ event.preventDefault()
128
+ highlightedIndex.value = Math.max(highlightedIndex.value - 1, 0)
129
+ break
130
+ case 'Enter':
131
+ event.preventDefault()
132
+ if (filteredOptions.value[highlightedIndex.value]) {
133
+ selectOption(filteredOptions.value[highlightedIndex.value])
134
+ }
135
+ break
136
+ case 'Escape':
137
+ closeDropdown()
138
+ break
139
+ }
140
+ }
141
+
142
+ function handleClickOutside(event: MouseEvent) {
143
+ if (selectRef.value && !selectRef.value.contains(event.target as Node)) {
144
+ closeDropdown()
145
+ }
146
+ }
147
+
148
+ // ---------------------------------------------------------------------------
149
+ // LIFECYCLE
150
+ // ---------------------------------------------------------------------------
151
+
152
+ onMounted(() => {
153
+ document.addEventListener('click', handleClickOutside)
154
+ })
155
+
156
+ onUnmounted(() => {
157
+ document.removeEventListener('click', handleClickOutside)
158
+ })
159
+ </script>
160
+
161
+ <template>
162
+ <div ref="selectRef" :class="classes" @keydown="handleKeydown">
163
+ <button
164
+ type="button"
165
+ class="br-select__trigger"
166
+ :disabled="disabled"
167
+ @click="toggleDropdown"
168
+ >
169
+ <span class="br-select__value">
170
+ {{ selectedOption?.text || placeholder }}
171
+ </span>
172
+ <span class="br-select__actions">
173
+ <span
174
+ v-if="clearable && model !== null && model !== undefined"
175
+ class="br-select__clear"
176
+ @click.stop="clearSelection"
177
+ >
178
+ <svg viewBox="0 0 24 24" fill="currentColor">
179
+ <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" />
180
+ </svg>
181
+ </span>
182
+ <span class="br-select__arrow">
183
+ <svg viewBox="0 0 24 24" fill="currentColor">
184
+ <path d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6z" />
185
+ </svg>
186
+ </span>
187
+ </span>
188
+ </button>
189
+
190
+ <Transition name="br-select-dropdown">
191
+ <div v-if="isOpen" class="br-select__dropdown">
192
+ <input
193
+ v-if="searchable"
194
+ v-model="searchQuery"
195
+ type="text"
196
+ class="br-select__search"
197
+ placeholder="Buscar..."
198
+ @click.stop
199
+ />
200
+ <ul class="br-select__options">
201
+ <li
202
+ v-for="(option, index) in filteredOptions"
203
+ :key="option.id"
204
+ class="br-select__option"
205
+ :class="{
206
+ 'br-select__option--selected': option.id === model,
207
+ 'br-select__option--highlighted': index === highlightedIndex,
208
+ }"
209
+ @click="selectOption(option)"
210
+ @mouseenter="highlightedIndex = index"
211
+ >
212
+ {{ option.text }}
213
+ </li>
214
+ <li v-if="filteredOptions.length === 0" class="br-select__empty">
215
+ Nenhum resultado encontrado
216
+ </li>
217
+ </ul>
218
+ </div>
219
+ </Transition>
220
+ </div>
221
+ </template>
222
+
223
+ <style lang="scss" scoped>
224
+ .br-select {
225
+ position: relative;
226
+ width: 100%;
227
+
228
+ &__trigger {
229
+ display: flex;
230
+ align-items: center;
231
+ justify-content: space-between;
232
+ width: 100%;
233
+ padding: 0 var(--br-space-4);
234
+ border: 1px solid var(--br-light-300);
235
+ border-radius: var(--br-radius-sm);
236
+ background: var(--br-light-0);
237
+ color: var(--br-dark-700);
238
+ font-family: var(--br-font-primary);
239
+ cursor: pointer;
240
+ transition: all var(--br-transition-fast);
241
+
242
+ &:focus {
243
+ outline: none;
244
+ border-color: var(--br-primary-600);
245
+ box-shadow: 0 0 0 3px rgba(109, 54, 251, 0.1);
246
+ }
247
+ }
248
+
249
+ &__value {
250
+ flex: 1;
251
+ text-align: left;
252
+ overflow: hidden;
253
+ text-overflow: ellipsis;
254
+ white-space: nowrap;
255
+ }
256
+
257
+ &__actions {
258
+ display: flex;
259
+ align-items: center;
260
+ gap: var(--br-space-1);
261
+ }
262
+
263
+ &__clear,
264
+ &__arrow {
265
+ display: flex;
266
+ align-items: center;
267
+ justify-content: center;
268
+ width: 20px;
269
+ height: 20px;
270
+ color: var(--br-dark-900);
271
+
272
+ svg {
273
+ width: 16px;
274
+ height: 16px;
275
+ }
276
+ }
277
+
278
+ &__clear:hover {
279
+ color: var(--br-danger-600);
280
+ }
281
+
282
+ &__arrow {
283
+ transition: transform var(--br-transition-fast);
284
+ }
285
+
286
+ // ---------------------------------------------------------------------------
287
+ // SIZES
288
+ // ---------------------------------------------------------------------------
289
+
290
+ &--sm .br-select__trigger {
291
+ height: 36px;
292
+ font-size: var(--br-text-xs);
293
+ }
294
+
295
+ &--md .br-select__trigger {
296
+ height: 44px;
297
+ font-size: var(--br-text-sm);
298
+ }
299
+
300
+ &--lg .br-select__trigger {
301
+ height: 56px;
302
+ font-size: var(--br-text-base);
303
+ }
304
+
305
+ // ---------------------------------------------------------------------------
306
+ // STATES
307
+ // ---------------------------------------------------------------------------
308
+
309
+ &--open {
310
+ .br-select__arrow {
311
+ transform: rotate(180deg);
312
+ }
313
+
314
+ .br-select__trigger {
315
+ border-color: var(--br-primary-600);
316
+ }
317
+ }
318
+
319
+ &--error .br-select__trigger {
320
+ border-color: var(--br-danger-600);
321
+ }
322
+
323
+ &--disabled .br-select__trigger {
324
+ background: var(--br-light-200);
325
+ color: var(--br-dark-1100);
326
+ cursor: not-allowed;
327
+ }
328
+
329
+ &:not(&--has-value) .br-select__value {
330
+ color: var(--br-dark-1100);
331
+ }
332
+
333
+ // ---------------------------------------------------------------------------
334
+ // DROPDOWN
335
+ // ---------------------------------------------------------------------------
336
+
337
+ &__dropdown {
338
+ position: absolute;
339
+ top: calc(100% + 4px);
340
+ left: 0;
341
+ right: 0;
342
+ z-index: var(--br-z-dropdown);
343
+ background: var(--br-light-0);
344
+ border: 1px solid var(--br-light-300);
345
+ border-radius: var(--br-radius-md);
346
+ box-shadow: var(--br-shadow-lg);
347
+ overflow: hidden;
348
+ }
349
+
350
+ &__search {
351
+ width: 100%;
352
+ padding: var(--br-space-3);
353
+ border: none;
354
+ border-bottom: 1px solid var(--br-light-300);
355
+ font-family: var(--br-font-primary);
356
+ font-size: var(--br-text-sm);
357
+
358
+ &:focus {
359
+ outline: none;
360
+ }
361
+ }
362
+
363
+ &__options {
364
+ list-style: none;
365
+ margin: 0;
366
+ padding: var(--br-space-1) 0;
367
+ max-height: 240px;
368
+ overflow-y: auto;
369
+ }
370
+
371
+ &__option {
372
+ padding: var(--br-space-3) var(--br-space-4);
373
+ cursor: pointer;
374
+ transition: background var(--br-transition-fast);
375
+
376
+ &:hover,
377
+ &--highlighted {
378
+ background: var(--br-light-100);
379
+ }
380
+
381
+ &--selected {
382
+ background: var(--br-primary-100);
383
+ color: var(--br-primary-700);
384
+ }
385
+ }
386
+
387
+ &__empty {
388
+ padding: var(--br-space-4);
389
+ text-align: center;
390
+ color: var(--br-dark-1100);
391
+ }
392
+ }
393
+
394
+ // ---------------------------------------------------------------------------
395
+ // TRANSITION
396
+ // ---------------------------------------------------------------------------
397
+
398
+ .br-select-dropdown-enter-active,
399
+ .br-select-dropdown-leave-active {
400
+ transition: opacity 0.15s ease, transform 0.15s ease;
401
+ }
402
+
403
+ .br-select-dropdown-enter-from,
404
+ .br-select-dropdown-leave-to {
405
+ opacity: 0;
406
+ transform: translateY(-8px);
407
+ }
408
+ </style>
@@ -0,0 +1,2 @@
1
+ export { default as BrSelect } from './BrSelect.vue'
2
+ export * from './types'
@@ -0,0 +1,61 @@
1
+ export type SelectSize = 'sm' | 'md' | 'lg'
2
+
3
+ export interface SelectOption {
4
+ /**
5
+ * Unique identifier
6
+ */
7
+ id: string | number
8
+
9
+ /**
10
+ * Display text
11
+ */
12
+ text: string
13
+
14
+ /**
15
+ * Disabled option
16
+ */
17
+ disabled?: boolean
18
+ }
19
+
20
+ export interface SelectProps {
21
+ /**
22
+ * Available options
23
+ */
24
+ options?: SelectOption[]
25
+
26
+ /**
27
+ * Placeholder text
28
+ * @default 'Selecione...'
29
+ */
30
+ placeholder?: string
31
+
32
+ /**
33
+ * Disable the select
34
+ * @default false
35
+ */
36
+ disabled?: boolean
37
+
38
+ /**
39
+ * Error state
40
+ * @default false
41
+ */
42
+ error?: boolean
43
+
44
+ /**
45
+ * Select size
46
+ * @default 'md'
47
+ */
48
+ size?: SelectSize
49
+
50
+ /**
51
+ * Enable search/filter
52
+ * @default false
53
+ */
54
+ searchable?: boolean
55
+
56
+ /**
57
+ * Allow clearing selection
58
+ * @default false
59
+ */
60
+ clearable?: boolean
61
+ }
@@ -0,0 +1,125 @@
1
+ <script setup lang="ts">
2
+ /**
3
+ * BrSpinner - Loading spinner component
4
+ *
5
+ * @example
6
+ * <BrSpinner />
7
+ * <BrSpinner size="lg" color="var(--br-primary-600)" />
8
+ * <BrSpinner status="success" />
9
+ */
10
+
11
+ import { computed } from 'vue'
12
+ import type { SpinnerProps } from './types'
13
+
14
+ // ---------------------------------------------------------------------------
15
+ // PROPS
16
+ // ---------------------------------------------------------------------------
17
+
18
+ const props = withDefaults(defineProps<SpinnerProps>(), {
19
+ size: 'md',
20
+ color: 'var(--br-primary-600)',
21
+ status: 'loading',
22
+ })
23
+
24
+ // ---------------------------------------------------------------------------
25
+ // COMPUTED
26
+ // ---------------------------------------------------------------------------
27
+
28
+ const sizeMap = {
29
+ sm: 16,
30
+ md: 24,
31
+ lg: 32,
32
+ xl: 48,
33
+ }
34
+
35
+ const spinnerSize = computed(() => sizeMap[props.size])
36
+
37
+ const styles = computed(() => ({
38
+ '--spinner-size': `${spinnerSize.value}px`,
39
+ '--spinner-color': props.color,
40
+ }))
41
+ </script>
42
+
43
+ <template>
44
+ <div class="br-spinner" :style="styles">
45
+ <span v-if="status === 'loading'" class="br-spinner__circle" />
46
+ <svg
47
+ v-else-if="status === 'success'"
48
+ class="br-spinner__check"
49
+ viewBox="0 0 24 24"
50
+ fill="none"
51
+ xmlns="http://www.w3.org/2000/svg"
52
+ >
53
+ <path
54
+ d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z"
55
+ fill="currentColor"
56
+ />
57
+ </svg>
58
+ <svg
59
+ v-else-if="status === 'error'"
60
+ class="br-spinner__error"
61
+ viewBox="0 0 24 24"
62
+ fill="none"
63
+ xmlns="http://www.w3.org/2000/svg"
64
+ >
65
+ <path
66
+ d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
67
+ fill="currentColor"
68
+ />
69
+ </svg>
70
+ </div>
71
+ </template>
72
+
73
+ <style lang="scss" scoped>
74
+ .br-spinner {
75
+ display: inline-flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+
79
+ &__circle {
80
+ width: var(--spinner-size);
81
+ height: var(--spinner-size);
82
+ border-radius: 50%;
83
+ background: conic-gradient(from 0deg, transparent 0%, var(--spinner-color) 100%);
84
+ mask: radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 3px));
85
+ -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 3px));
86
+ animation: br-spin 1s linear infinite;
87
+ }
88
+
89
+ &__check,
90
+ &__error {
91
+ width: var(--spinner-size);
92
+ height: var(--spinner-size);
93
+ color: var(--spinner-color);
94
+ animation: br-fade-in 0.3s ease-out;
95
+ }
96
+
97
+ &__check {
98
+ color: var(--br-success-600);
99
+ }
100
+
101
+ &__error {
102
+ color: var(--br-danger-600);
103
+ }
104
+ }
105
+
106
+ @keyframes br-spin {
107
+ from {
108
+ transform: rotate(0deg);
109
+ }
110
+ to {
111
+ transform: rotate(360deg);
112
+ }
113
+ }
114
+
115
+ @keyframes br-fade-in {
116
+ from {
117
+ opacity: 0;
118
+ transform: scale(0.8);
119
+ }
120
+ to {
121
+ opacity: 1;
122
+ transform: scale(1);
123
+ }
124
+ }
125
+ </style>
@@ -0,0 +1,2 @@
1
+ export { default as BrSpinner } from './BrSpinner.vue'
2
+ export * from './types'
@@ -0,0 +1,22 @@
1
+ export type SpinnerSize = 'sm' | 'md' | 'lg' | 'xl'
2
+ export type SpinnerStatus = 'loading' | 'success' | 'error'
3
+
4
+ export interface SpinnerProps {
5
+ /**
6
+ * Spinner size
7
+ * @default 'md'
8
+ */
9
+ size?: SpinnerSize
10
+
11
+ /**
12
+ * Spinner color
13
+ * @default 'var(--br-primary-600)'
14
+ */
15
+ color?: string
16
+
17
+ /**
18
+ * Spinner status
19
+ * @default 'loading'
20
+ */
21
+ status?: SpinnerStatus
22
+ }
@@ -0,0 +1,81 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import BrSwitch from './BrSwitch.vue'
4
+
5
+ describe('BrSwitch', () => {
6
+ it('renders as button element', () => {
7
+ const wrapper = mount(BrSwitch)
8
+ expect(wrapper.element.tagName).toBe('BUTTON')
9
+ })
10
+
11
+ it('has role="switch" attribute', () => {
12
+ const wrapper = mount(BrSwitch)
13
+ expect(wrapper.attributes('role')).toBe('switch')
14
+ })
15
+
16
+ it('toggles value on click', async () => {
17
+ const wrapper = mount(BrSwitch, {
18
+ props: {
19
+ modelValue: false,
20
+ 'onUpdate:modelValue': (e: boolean) => wrapper.setProps({ modelValue: e }),
21
+ },
22
+ })
23
+ expect(wrapper.props('modelValue')).toBe(false)
24
+ await wrapper.trigger('click')
25
+ expect(wrapper.props('modelValue')).toBe(true)
26
+ })
27
+
28
+ it('applies checked class when value is true', () => {
29
+ const wrapper = mount(BrSwitch, {
30
+ props: { modelValue: true },
31
+ })
32
+ expect(wrapper.classes()).toContain('br-switch--checked')
33
+ })
34
+
35
+ it('does not toggle when disabled', async () => {
36
+ const wrapper = mount(BrSwitch, {
37
+ props: {
38
+ modelValue: false,
39
+ disabled: true,
40
+ 'onUpdate:modelValue': (e: boolean) => wrapper.setProps({ modelValue: e }),
41
+ },
42
+ })
43
+ await wrapper.trigger('click')
44
+ expect(wrapper.props('modelValue')).toBe(false)
45
+ })
46
+
47
+ it('applies disabled class when disabled', () => {
48
+ const wrapper = mount(BrSwitch, {
49
+ props: { disabled: true },
50
+ })
51
+ expect(wrapper.classes()).toContain('br-switch--disabled')
52
+ })
53
+
54
+ it('applies correct size class', () => {
55
+ const sizes = ['sm', 'md', 'lg'] as const
56
+ sizes.forEach((size) => {
57
+ const wrapper = mount(BrSwitch, {
58
+ props: { size },
59
+ })
60
+ expect(wrapper.classes()).toContain(`br-switch--${size}`)
61
+ })
62
+ })
63
+
64
+ it('has aria-checked attribute reflecting state', () => {
65
+ const wrapperFalse = mount(BrSwitch, {
66
+ props: { modelValue: false },
67
+ })
68
+ expect(wrapperFalse.attributes('aria-checked')).toBe('false')
69
+
70
+ const wrapperTrue = mount(BrSwitch, {
71
+ props: { modelValue: true },
72
+ })
73
+ expect(wrapperTrue.attributes('aria-checked')).toBe('true')
74
+ })
75
+
76
+ it('contains track and thumb elements', () => {
77
+ const wrapper = mount(BrSwitch)
78
+ expect(wrapper.find('.br-switch__track').exists()).toBe(true)
79
+ expect(wrapper.find('.br-switch__thumb').exists()).toBe(true)
80
+ })
81
+ })