@fluencypassdevs/cycle 1.15.0 → 1.16.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 (247) hide show
  1. package/bin/mcp.mjs +94 -0
  2. package/dist/{chunk-YINJ5YZ5.js → chunk-2NMEKWO5.js} +2 -2
  3. package/dist/{chunk-YINJ5YZ5.js.map → chunk-2NMEKWO5.js.map} +1 -1
  4. package/dist/{chunk-5I4PGGLN.js → chunk-3TSOMZJO.js} +4 -4
  5. package/dist/{chunk-5I4PGGLN.js.map → chunk-3TSOMZJO.js.map} +1 -1
  6. package/dist/{chunk-L32AMI4K.js → chunk-3VAYZAEF.js} +8 -8
  7. package/dist/{chunk-L32AMI4K.js.map → chunk-3VAYZAEF.js.map} +1 -1
  8. package/dist/{chunk-EF6FQT4Y.js → chunk-46SWH3RS.js} +4 -4
  9. package/dist/{chunk-EF6FQT4Y.js.map → chunk-46SWH3RS.js.map} +1 -1
  10. package/dist/{chunk-YJ4U7ISM.js → chunk-5Z3ZM7PS.js} +4 -4
  11. package/dist/{chunk-YJ4U7ISM.js.map → chunk-5Z3ZM7PS.js.map} +1 -1
  12. package/dist/{chunk-5BNTQSCS.js → chunk-6ANVMIR5.js} +4 -4
  13. package/dist/{chunk-5BNTQSCS.js.map → chunk-6ANVMIR5.js.map} +1 -1
  14. package/dist/{chunk-QZVQPUVT.js → chunk-6RHG4VOA.js} +4 -4
  15. package/dist/{chunk-QZVQPUVT.js.map → chunk-6RHG4VOA.js.map} +1 -1
  16. package/dist/{chunk-JMNMW54C.js → chunk-7AACZB3Q.js} +4 -4
  17. package/dist/{chunk-JMNMW54C.js.map → chunk-7AACZB3Q.js.map} +1 -1
  18. package/dist/{chunk-JGUDRAWA.js → chunk-AIBZJWUG.js} +8 -8
  19. package/dist/{chunk-JGUDRAWA.js.map → chunk-AIBZJWUG.js.map} +1 -1
  20. package/dist/{chunk-MTKKVYNS.js → chunk-AUCSNGST.js} +4 -4
  21. package/dist/{chunk-MTKKVYNS.js.map → chunk-AUCSNGST.js.map} +1 -1
  22. package/dist/{chunk-SZUWVHP4.js → chunk-C2P3ZSEY.js} +4 -4
  23. package/dist/{chunk-SZUWVHP4.js.map → chunk-C2P3ZSEY.js.map} +1 -1
  24. package/dist/{chunk-NOMLQHZS.js → chunk-C5JGLWV6.js} +4 -4
  25. package/dist/{chunk-NOMLQHZS.js.map → chunk-C5JGLWV6.js.map} +1 -1
  26. package/dist/{chunk-HZJRM5EK.js → chunk-C6YZNBOO.js} +5 -5
  27. package/dist/{chunk-HZJRM5EK.js.map → chunk-C6YZNBOO.js.map} +1 -1
  28. package/dist/{chunk-3EFI7PYC.js → chunk-CBBCTX3A.js} +5 -5
  29. package/dist/{chunk-3EFI7PYC.js.map → chunk-CBBCTX3A.js.map} +1 -1
  30. package/dist/{chunk-7NFHHOAE.js → chunk-CMOTOQK7.js} +4 -4
  31. package/dist/{chunk-7NFHHOAE.js.map → chunk-CMOTOQK7.js.map} +1 -1
  32. package/dist/chunk-DJ3DMPKK.js +56 -0
  33. package/dist/chunk-DJ3DMPKK.js.map +1 -0
  34. package/dist/{chunk-UJ6OER6O.js → chunk-DO4M3OVV.js} +6 -6
  35. package/dist/{chunk-UJ6OER6O.js.map → chunk-DO4M3OVV.js.map} +1 -1
  36. package/dist/{chunk-DCNZ2DRR.js → chunk-E3E64CT4.js} +6 -6
  37. package/dist/{chunk-DCNZ2DRR.js.map → chunk-E3E64CT4.js.map} +1 -1
  38. package/dist/{chunk-MSLQRGSP.js → chunk-E6WZOLWX.js} +4 -4
  39. package/dist/{chunk-MSLQRGSP.js.map → chunk-E6WZOLWX.js.map} +1 -1
  40. package/dist/{chunk-C6BQAAHX.js → chunk-EFT7BHN7.js} +3 -3
  41. package/dist/{chunk-C6BQAAHX.js.map → chunk-EFT7BHN7.js.map} +1 -1
  42. package/dist/{chunk-CIM6KJH5.js → chunk-EMX27A3U.js} +4 -4
  43. package/dist/{chunk-CIM6KJH5.js.map → chunk-EMX27A3U.js.map} +1 -1
  44. package/dist/{chunk-ELZCZ6ZH.js → chunk-EZVWNHDF.js} +5 -5
  45. package/dist/{chunk-ELZCZ6ZH.js.map → chunk-EZVWNHDF.js.map} +1 -1
  46. package/dist/{chunk-XHKFKLHD.js → chunk-FTR4NEFA.js} +4 -4
  47. package/dist/{chunk-XHKFKLHD.js.map → chunk-FTR4NEFA.js.map} +1 -1
  48. package/dist/chunk-G57PPNB3.js +74 -0
  49. package/dist/chunk-G57PPNB3.js.map +1 -0
  50. package/dist/{chunk-6JH4YWWX.js → chunk-GR65GV2N.js} +4 -4
  51. package/dist/{chunk-6JH4YWWX.js.map → chunk-GR65GV2N.js.map} +1 -1
  52. package/dist/{chunk-I5A3CME4.js → chunk-H6VG367Y.js} +4 -4
  53. package/dist/{chunk-I5A3CME4.js.map → chunk-H6VG367Y.js.map} +1 -1
  54. package/dist/{chunk-A3Z5GGAI.js → chunk-HBFS7W6V.js} +4 -4
  55. package/dist/{chunk-A3Z5GGAI.js.map → chunk-HBFS7W6V.js.map} +1 -1
  56. package/dist/{chunk-5NKTYXWQ.js → chunk-HCSVANPX.js} +5 -5
  57. package/dist/{chunk-5NKTYXWQ.js.map → chunk-HCSVANPX.js.map} +1 -1
  58. package/dist/{chunk-QANROH2K.js → chunk-HIAYFCBX.js} +4 -4
  59. package/dist/{chunk-QANROH2K.js.map → chunk-HIAYFCBX.js.map} +1 -1
  60. package/dist/{chunk-5HPZCREI.js → chunk-HXFGULDU.js} +4 -4
  61. package/dist/{chunk-5HPZCREI.js.map → chunk-HXFGULDU.js.map} +1 -1
  62. package/dist/{chunk-726XFHED.js → chunk-HZOLDTOT.js} +4 -4
  63. package/dist/{chunk-726XFHED.js.map → chunk-HZOLDTOT.js.map} +1 -1
  64. package/dist/{chunk-74WKJRW7.js → chunk-I4DM7SVV.js} +4 -4
  65. package/dist/{chunk-74WKJRW7.js.map → chunk-I4DM7SVV.js.map} +1 -1
  66. package/dist/{chunk-V7M2NHUO.js → chunk-IGFCIAF3.js} +3 -3
  67. package/dist/{chunk-V7M2NHUO.js.map → chunk-IGFCIAF3.js.map} +1 -1
  68. package/dist/{chunk-NYJMA2T7.js → chunk-ILYZQBBN.js} +4 -4
  69. package/dist/{chunk-NYJMA2T7.js.map → chunk-ILYZQBBN.js.map} +1 -1
  70. package/dist/{chunk-X4IBONFB.js → chunk-J3DGYZGK.js} +4 -4
  71. package/dist/{chunk-X4IBONFB.js.map → chunk-J3DGYZGK.js.map} +1 -1
  72. package/dist/{chunk-6OYSTCGP.js → chunk-JDGM46MB.js} +4 -4
  73. package/dist/{chunk-6OYSTCGP.js.map → chunk-JDGM46MB.js.map} +1 -1
  74. package/dist/{chunk-66CU7J2I.js → chunk-JDPJQSZV.js} +4 -4
  75. package/dist/{chunk-66CU7J2I.js.map → chunk-JDPJQSZV.js.map} +1 -1
  76. package/dist/{chunk-CWMXYPWK.js → chunk-JGZGZIGR.js} +4 -4
  77. package/dist/{chunk-CWMXYPWK.js.map → chunk-JGZGZIGR.js.map} +1 -1
  78. package/dist/chunk-JQRGW2RF.js +82 -0
  79. package/dist/chunk-JQRGW2RF.js.map +1 -0
  80. package/dist/{chunk-JRJBKPXW.js → chunk-JUVL7GN2.js} +4 -4
  81. package/dist/{chunk-JRJBKPXW.js.map → chunk-JUVL7GN2.js.map} +1 -1
  82. package/dist/{chunk-VXWMC2NK.js → chunk-K2XIXOMO.js} +4 -4
  83. package/dist/{chunk-VXWMC2NK.js.map → chunk-K2XIXOMO.js.map} +1 -1
  84. package/dist/{chunk-2MXR6RRJ.js → chunk-KCEFPJZT.js} +4 -4
  85. package/dist/{chunk-2MXR6RRJ.js.map → chunk-KCEFPJZT.js.map} +1 -1
  86. package/dist/{chunk-L2DJS6PG.js → chunk-KRENXLKC.js} +6 -6
  87. package/dist/{chunk-L2DJS6PG.js.map → chunk-KRENXLKC.js.map} +1 -1
  88. package/dist/{chunk-2EKU7RP4.js → chunk-KSALAAWD.js} +4 -4
  89. package/dist/{chunk-2EKU7RP4.js.map → chunk-KSALAAWD.js.map} +1 -1
  90. package/dist/{chunk-JJETOZMI.js → chunk-LBMPZDD5.js} +4 -4
  91. package/dist/{chunk-JJETOZMI.js.map → chunk-LBMPZDD5.js.map} +1 -1
  92. package/dist/{chunk-W4GSXVJ2.js → chunk-LC55JPI4.js} +4 -4
  93. package/dist/{chunk-W4GSXVJ2.js.map → chunk-LC55JPI4.js.map} +1 -1
  94. package/dist/{chunk-CG7NXMBC.js → chunk-M3U2TKWS.js} +8 -8
  95. package/dist/{chunk-CG7NXMBC.js.map → chunk-M3U2TKWS.js.map} +1 -1
  96. package/dist/{chunk-UEJLA7Q6.js → chunk-M56K3ZKY.js} +4 -4
  97. package/dist/{chunk-UEJLA7Q6.js.map → chunk-M56K3ZKY.js.map} +1 -1
  98. package/dist/{chunk-D4UH2HJQ.js → chunk-MJKZELI3.js} +7 -7
  99. package/dist/{chunk-D4UH2HJQ.js.map → chunk-MJKZELI3.js.map} +1 -1
  100. package/dist/{chunk-5XNYJECW.js → chunk-NE5CT5LH.js} +5 -5
  101. package/dist/{chunk-5XNYJECW.js.map → chunk-NE5CT5LH.js.map} +1 -1
  102. package/dist/{chunk-XQUQDZVA.js → chunk-OHRYR7PN.js} +3 -2
  103. package/dist/chunk-OHRYR7PN.js.map +1 -0
  104. package/dist/{chunk-NVA4ZJOS.js → chunk-QM54AVC7.js} +4 -4
  105. package/dist/{chunk-NVA4ZJOS.js.map → chunk-QM54AVC7.js.map} +1 -1
  106. package/dist/{chunk-TYCPXAXF.js → chunk-QTH4LSO6.js} +3 -2
  107. package/dist/chunk-QTH4LSO6.js.map +1 -0
  108. package/dist/{chunk-ZTANTDKS.js → chunk-RXCQLSWL.js} +4 -4
  109. package/dist/{chunk-ZTANTDKS.js.map → chunk-RXCQLSWL.js.map} +1 -1
  110. package/dist/{chunk-IGMII4BK.js → chunk-SCZXIVL5.js} +4 -4
  111. package/dist/{chunk-IGMII4BK.js.map → chunk-SCZXIVL5.js.map} +1 -1
  112. package/dist/{chunk-NW56QDQM.js → chunk-SDPIL7HA.js} +3 -2
  113. package/dist/chunk-SDPIL7HA.js.map +1 -0
  114. package/dist/{chunk-EACBYVLK.js → chunk-SIEPZ5LD.js} +4 -4
  115. package/dist/{chunk-EACBYVLK.js.map → chunk-SIEPZ5LD.js.map} +1 -1
  116. package/dist/{chunk-V3CBOIGK.js → chunk-SXCNJQ7S.js} +6 -6
  117. package/dist/{chunk-V3CBOIGK.js.map → chunk-SXCNJQ7S.js.map} +1 -1
  118. package/dist/{chunk-7ZXAU2CD.js → chunk-T5AHJXEY.js} +5 -5
  119. package/dist/{chunk-7ZXAU2CD.js.map → chunk-T5AHJXEY.js.map} +1 -1
  120. package/dist/{chunk-K2NUBNSA.js → chunk-T7EIAVSF.js} +3 -2
  121. package/dist/chunk-T7EIAVSF.js.map +1 -0
  122. package/dist/{chunk-F2Q3E2ZM.js → chunk-TBLO2A4C.js} +4 -4
  123. package/dist/{chunk-F2Q3E2ZM.js.map → chunk-TBLO2A4C.js.map} +1 -1
  124. package/dist/{chunk-HDCU6QSG.js → chunk-U27GHP5Z.js} +4 -4
  125. package/dist/{chunk-HDCU6QSG.js.map → chunk-U27GHP5Z.js.map} +1 -1
  126. package/dist/{chunk-VYHRNO77.js → chunk-U2SCIVKI.js} +4 -4
  127. package/dist/{chunk-VYHRNO77.js.map → chunk-U2SCIVKI.js.map} +1 -1
  128. package/dist/chunk-WCDYTWKA.js +105 -0
  129. package/dist/chunk-WCDYTWKA.js.map +1 -0
  130. package/dist/{chunk-AL2ALTBH.js → chunk-WL6J5ZVH.js} +4 -4
  131. package/dist/{chunk-AL2ALTBH.js.map → chunk-WL6J5ZVH.js.map} +1 -1
  132. package/dist/{chunk-5LZHXNBV.js → chunk-WMOGNJWP.js} +3 -3
  133. package/dist/{chunk-5LZHXNBV.js.map → chunk-WMOGNJWP.js.map} +1 -1
  134. package/dist/{chunk-TPRZMMT6.js → chunk-WUK6APAX.js} +6 -6
  135. package/dist/{chunk-TPRZMMT6.js.map → chunk-WUK6APAX.js.map} +1 -1
  136. package/dist/{chunk-NZXP7BAH.js → chunk-XDJ2E6KQ.js} +4 -4
  137. package/dist/{chunk-NZXP7BAH.js.map → chunk-XDJ2E6KQ.js.map} +1 -1
  138. package/dist/{chunk-F2XA2Z75.js → chunk-XMZVSCCY.js} +7 -7
  139. package/dist/{chunk-F2XA2Z75.js.map → chunk-XMZVSCCY.js.map} +1 -1
  140. package/dist/{chunk-7LH7PSQS.js → chunk-XXTQV27H.js} +6 -6
  141. package/dist/{chunk-7LH7PSQS.js.map → chunk-XXTQV27H.js.map} +1 -1
  142. package/dist/{chunk-3LXU5C35.js → chunk-Y33BGBHR.js} +4 -4
  143. package/dist/{chunk-3LXU5C35.js.map → chunk-Y33BGBHR.js.map} +1 -1
  144. package/dist/{chunk-JPEDYOV7.js → chunk-YW7VSQJE.js} +4 -4
  145. package/dist/{chunk-JPEDYOV7.js.map → chunk-YW7VSQJE.js.map} +1 -1
  146. package/dist/chunk-YZNOE4TO.js +48 -0
  147. package/dist/chunk-YZNOE4TO.js.map +1 -0
  148. package/dist/{chunk-PY2BIZNB.js → chunk-ZJRXBOM2.js} +4 -4
  149. package/dist/{chunk-PY2BIZNB.js.map → chunk-ZJRXBOM2.js.map} +1 -1
  150. package/dist/composites/chat-thread.js +14 -13
  151. package/dist/hooks/use-intersection.js +3 -2
  152. package/dist/hooks/use-reduced-motion.js +3 -2
  153. package/dist/icons/index.js +4 -3
  154. package/dist/icons/lucide.js +1 -0
  155. package/dist/index.js +56 -55
  156. package/dist/layout/container.js +4 -3
  157. package/dist/layout/grid.js +4 -3
  158. package/dist/layout/stack.js +4 -3
  159. package/dist/lib/utils.js +3 -2
  160. package/dist/logos/fluencypass.js +4 -3
  161. package/dist/logos/product.js +5 -4
  162. package/dist/marketing/buttons/cta-brand.d.ts +39 -0
  163. package/dist/marketing/buttons/cta-brand.js +8 -0
  164. package/dist/marketing/buttons/cta-brand.js.map +1 -0
  165. package/dist/marketing/buttons/index.d.ts +5 -0
  166. package/dist/marketing/buttons/index.js +9 -0
  167. package/dist/marketing/buttons/index.js.map +1 -0
  168. package/dist/marketing/buttons/link-brand.d.ts +39 -0
  169. package/dist/marketing/buttons/link-brand.js +6 -0
  170. package/dist/marketing/buttons/link-brand.js.map +1 -0
  171. package/dist/marketing/effects/card-dark-glow.js +4 -3
  172. package/dist/marketing/effects/circle-glow.js +4 -3
  173. package/dist/marketing/effects/hand-underline.d.ts +33 -0
  174. package/dist/marketing/effects/hand-underline.js +8 -0
  175. package/dist/marketing/effects/hand-underline.js.map +1 -0
  176. package/dist/marketing/effects/index.d.ts +3 -0
  177. package/dist/marketing/effects/index.js +11 -5
  178. package/dist/marketing/effects/magnetic-button.d.ts +36 -0
  179. package/dist/marketing/effects/magnetic-button.js +7 -0
  180. package/dist/marketing/effects/magnetic-button.js.map +1 -0
  181. package/dist/marketing/effects/marquee.js +4 -3
  182. package/dist/marketing/effects/rotating-word.d.ts +40 -0
  183. package/dist/marketing/effects/rotating-word.js +7 -0
  184. package/dist/marketing/effects/rotating-word.js.map +1 -0
  185. package/dist/marketing/layout/index.js +4 -3
  186. package/dist/marketing/layout/section.js +4 -3
  187. package/dist/marketing/motion/animated-number.js +6 -5
  188. package/dist/marketing/motion/index.js +9 -8
  189. package/dist/marketing/motion/reveal-on-scroll.js +6 -5
  190. package/dist/marketing/motion/smooth-anchor.js +3 -2
  191. package/dist/marketing/motion/stagger-reveal.js +6 -5
  192. package/dist/marketing/typography/hero-heading.js +4 -3
  193. package/dist/marketing/typography/index.js +7 -6
  194. package/dist/marketing/typography/section-eyebrow.js +4 -3
  195. package/dist/marketing/typography/section-heading.js +4 -3
  196. package/dist/marketing/typography/section-subtitle.js +4 -3
  197. package/dist/styles/tokens.css +37 -8
  198. package/dist/ui/accordion.js +4 -3
  199. package/dist/ui/alert-dialog.js +5 -4
  200. package/dist/ui/alert.js +6 -5
  201. package/dist/ui/audio-player.js +7 -6
  202. package/dist/ui/avatar.js +4 -3
  203. package/dist/ui/badge.js +4 -3
  204. package/dist/ui/button.js +4 -3
  205. package/dist/ui/chat-bubble.js +5 -4
  206. package/dist/ui/chat-message.js +10 -9
  207. package/dist/ui/chat-panel.js +9 -8
  208. package/dist/ui/checkbox.js +4 -3
  209. package/dist/ui/circular-progress.js +4 -3
  210. package/dist/ui/dialog.js +5 -4
  211. package/dist/ui/drawer.js +4 -3
  212. package/dist/ui/dropdown-menu.js +4 -3
  213. package/dist/ui/editor.js +8 -7
  214. package/dist/ui/empty.js +4 -3
  215. package/dist/ui/fab.js +4 -3
  216. package/dist/ui/file-card.js +4 -3
  217. package/dist/ui/input.js +4 -3
  218. package/dist/ui/label.js +4 -3
  219. package/dist/ui/like-dislike.js +8 -7
  220. package/dist/ui/live-waiting.js +7 -6
  221. package/dist/ui/message-bar.js +4 -3
  222. package/dist/ui/message-rating.js +4 -3
  223. package/dist/ui/player-i18n.js +3 -2
  224. package/dist/ui/popover.js +4 -3
  225. package/dist/ui/progress-dot.js +4 -3
  226. package/dist/ui/progress-stage.js +4 -3
  227. package/dist/ui/progress.js +4 -3
  228. package/dist/ui/radio-group.js +4 -3
  229. package/dist/ui/resizable.js +4 -3
  230. package/dist/ui/scroll-area.js +4 -3
  231. package/dist/ui/select.js +4 -3
  232. package/dist/ui/sheet.js +4 -3
  233. package/dist/ui/skeleton.js +4 -3
  234. package/dist/ui/slider.js +4 -3
  235. package/dist/ui/sonner.js +6 -5
  236. package/dist/ui/spinner.js +6 -5
  237. package/dist/ui/switch.js +4 -3
  238. package/dist/ui/tabs.js +4 -3
  239. package/dist/ui/textarea.js +4 -3
  240. package/dist/ui/toggle.js +4 -3
  241. package/dist/ui/tooltip.js +4 -3
  242. package/dist/ui/video-player.js +7 -6
  243. package/package.json +10 -2
  244. package/dist/chunk-K2NUBNSA.js.map +0 -1
  245. package/dist/chunk-NW56QDQM.js.map +0 -1
  246. package/dist/chunk-TYCPXAXF.js.map +0 -1
  247. package/dist/chunk-XQUQDZVA.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/fab.tsx"],"names":[],"mappings":";;;;;;AAQA,IAAM,WAAA,GAAc,GAAA;AAAA,EAClB,+VAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,mEAAA;AAAA,QACJ,OAAA,EAAS,mEAAA;AAAA,QACT,EAAA,EAAI;AAAA,OACN;AAAA,MACA,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,wDAAA;AAAA,QACT,SAAA,EAAW,8DAAA;AAAA,QACX,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS;AAAA;AACX;AAEJ;AAEA,IAAM,mBAAA,GAAsB,GAAA;AAAA,EAC1B,8BAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,+EAAA;AAAA,QACJ,OAAA,EAAS,+EAAA;AAAA,QACT,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAaA,IAAM,eAAA,GAAkB;AAAA,EACtB,cAAA,EAAgB,6BAAA;AAAA,EAChB,aAAA,EAAe,4BAAA;AAAA,EACf,eAAA,EAAiB,+CAAA;AAAA,EACjB,IAAA,EAAM;AACR,CAAA;AAEA,SAAS,IAAI,EAAA,EAQA;AARA,EAAA,IAAA,EAAA,GAAA,EAAA,EACX;AAAA,IAAA,SAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP,OAAA,GAAU,SAAA;AAAA,IACV,OAAA,GAAU,KAAA;AAAA,IACV,QAAA,GAAW,KAAA;AAAA,IACX,QAAA,GAAW;AAAA,GAtEb,GAgEa,EAAA,EAOR,KAAA,GAAA,SAAA,CAPQ,EAAA,EAOR;AAAA,IANH,WAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,IAAA,GAAO,OAAA,GAAU,IAAA,CAAK,IAAA,GAAO,QAAA;AAEnC,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,KAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA;AAAA,QAET,wSAAA;AAAA;AAAA,QAEA,YAAY,SAAA,IAAa,wDAAA;AAAA,QACzB,YAAY,WAAA,IAAe,8DAAA;AAAA,QAC3B,YAAY,SAAA,IAAa,iGAAA;AAAA;AAAA,QAEzB,QAAA,GAAW,oBAAoB,EAAE,IAAA,EAAM,CAAA,GAAI,WAAA,CAAY,EAAE,IAAA,EAAM,CAAA;AAAA;AAAA,QAE/D,eAAA,CAAgB,8BAAY,cAAc,CAAA;AAAA,QAC1C;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ","file":"chunk-7NFHHOAE.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst fabVariants = cva(\n \"inline-flex shrink-0 items-center justify-center rounded-full whitespace-nowrap transition-all outline-none cursor-pointer shadow-lg hover:shadow-xl focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-primary/90\",\n {\n variants: {\n size: {\n sm: \"size-10 [&_svg:not([class*='size-'])]:size-4 [&_svg]:stroke-[1.5]\",\n default: \"size-12 [&_svg:not([class*='size-'])]:size-5 [&_svg]:stroke-[1.5]\",\n lg: \"size-14 [&_svg:not([class*='size-'])]:size-6 [&_svg]:stroke-[1.5]\",\n },\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n outline: \"border border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n size: \"default\",\n variant: \"default\",\n },\n }\n)\n\nconst fabExtendedVariants = cva(\n \"rounded-full gap-2 button-md\",\n {\n variants: {\n size: {\n sm: \"h-10 px-4 button-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:stroke-[1.5]\",\n default: \"h-12 px-5 button-md [&_svg:not([class*='size-'])]:size-5 [&_svg]:stroke-[1.5]\",\n lg: \"h-14 px-6 button-lg [&_svg:not([class*='size-'])]:size-6 [&_svg]:stroke-[1.5]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nexport interface FabProps\n extends React.ComponentProps<\"button\">,\n VariantProps<typeof fabVariants> {\n /** Render as child element (Slot) */\n asChild?: boolean\n /** Extended mode: pill shape with icon + label. Pass a string or ReactNode for the label. */\n extended?: boolean\n /** Position preset. \"none\" disables fixed positioning. Default: \"bottom-right\" */\n position?: \"bottom-right\" | \"bottom-left\" | \"bottom-center\" | \"none\"\n}\n\nconst positionClasses = {\n \"bottom-right\": \"fixed bottom-6 right-6 z-50\",\n \"bottom-left\": \"fixed bottom-6 left-6 z-50\",\n \"bottom-center\": \"fixed bottom-6 left-1/2 -translate-x-1/2 z-50\",\n none: \"\",\n} as const\n\nfunction Fab({\n className,\n size = \"default\",\n variant = \"default\",\n asChild = false,\n extended = false,\n position = \"bottom-right\",\n ...props\n}: FabProps) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"fab\"\n data-variant={variant}\n data-size={size}\n className={cn(\n // Base styles shared between icon and extended\n \"inline-flex shrink-0 items-center justify-center rounded-full whitespace-nowrap transition-all outline-none cursor-pointer shadow-lg hover:shadow-xl focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n // Variant colors\n variant === \"default\" && \"bg-primary text-primary-foreground hover:bg-primary/90\",\n variant === \"secondary\" && \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n variant === \"outline\" && \"border border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground\",\n // Size: icon-only (square) vs extended (pill)\n extended ? fabExtendedVariants({ size }) : fabVariants({ size }),\n // Position\n positionClasses[position ?? \"bottom-right\"],\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Fab, fabVariants }\n"]}
1
+ {"version":3,"sources":["../src/components/ui/fab.tsx"],"names":[],"mappings":";;;;;;AAQA,IAAM,WAAA,GAAc,GAAA;AAAA,EAClB,+VAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,mEAAA;AAAA,QACJ,OAAA,EAAS,mEAAA;AAAA,QACT,EAAA,EAAI;AAAA,OACN;AAAA,MACA,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,wDAAA;AAAA,QACT,SAAA,EAAW,8DAAA;AAAA,QACX,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS;AAAA;AACX;AAEJ;AAEA,IAAM,mBAAA,GAAsB,GAAA;AAAA,EAC1B,8BAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,+EAAA;AAAA,QACJ,OAAA,EAAS,+EAAA;AAAA,QACT,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAaA,IAAM,eAAA,GAAkB;AAAA,EACtB,cAAA,EAAgB,6BAAA;AAAA,EAChB,aAAA,EAAe,4BAAA;AAAA,EACf,eAAA,EAAiB,+CAAA;AAAA,EACjB,IAAA,EAAM;AACR,CAAA;AAEA,SAAS,IAAI,EAAA,EAQA;AARA,EAAA,IAAA,EAAA,GAAA,EAAA,EACX;AAAA,IAAA,SAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP,OAAA,GAAU,SAAA;AAAA,IACV,OAAA,GAAU,KAAA;AAAA,IACV,QAAA,GAAW,KAAA;AAAA,IACX,QAAA,GAAW;AAAA,GAtEb,GAgEa,EAAA,EAOR,KAAA,GAAA,SAAA,CAPQ,EAAA,EAOR;AAAA,IANH,WAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,IAAA,GAAO,OAAA,GAAU,IAAA,CAAK,IAAA,GAAO,QAAA;AAEnC,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,KAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA;AAAA,QAET,wSAAA;AAAA;AAAA,QAEA,YAAY,SAAA,IAAa,wDAAA;AAAA,QACzB,YAAY,WAAA,IAAe,8DAAA;AAAA,QAC3B,YAAY,SAAA,IAAa,iGAAA;AAAA;AAAA,QAEzB,QAAA,GAAW,oBAAoB,EAAE,IAAA,EAAM,CAAA,GAAI,WAAA,CAAY,EAAE,IAAA,EAAM,CAAA;AAAA;AAAA,QAE/D,eAAA,CAAgB,8BAAY,cAAc,CAAA;AAAA,QAC1C;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ","file":"chunk-CMOTOQK7.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst fabVariants = cva(\n \"inline-flex shrink-0 items-center justify-center rounded-full whitespace-nowrap transition-all outline-none cursor-pointer shadow-lg hover:shadow-xl focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-primary/90\",\n {\n variants: {\n size: {\n sm: \"size-10 [&_svg:not([class*='size-'])]:size-4 [&_svg]:stroke-[1.5]\",\n default: \"size-12 [&_svg:not([class*='size-'])]:size-5 [&_svg]:stroke-[1.5]\",\n lg: \"size-14 [&_svg:not([class*='size-'])]:size-6 [&_svg]:stroke-[1.5]\",\n },\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n outline: \"border border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n size: \"default\",\n variant: \"default\",\n },\n }\n)\n\nconst fabExtendedVariants = cva(\n \"rounded-full gap-2 button-md\",\n {\n variants: {\n size: {\n sm: \"h-10 px-4 button-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:stroke-[1.5]\",\n default: \"h-12 px-5 button-md [&_svg:not([class*='size-'])]:size-5 [&_svg]:stroke-[1.5]\",\n lg: \"h-14 px-6 button-lg [&_svg:not([class*='size-'])]:size-6 [&_svg]:stroke-[1.5]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nexport interface FabProps\n extends React.ComponentProps<\"button\">,\n VariantProps<typeof fabVariants> {\n /** Render as child element (Slot) */\n asChild?: boolean\n /** Extended mode: pill shape with icon + label. Pass a string or ReactNode for the label. */\n extended?: boolean\n /** Position preset. \"none\" disables fixed positioning. Default: \"bottom-right\" */\n position?: \"bottom-right\" | \"bottom-left\" | \"bottom-center\" | \"none\"\n}\n\nconst positionClasses = {\n \"bottom-right\": \"fixed bottom-6 right-6 z-50\",\n \"bottom-left\": \"fixed bottom-6 left-6 z-50\",\n \"bottom-center\": \"fixed bottom-6 left-1/2 -translate-x-1/2 z-50\",\n none: \"\",\n} as const\n\nfunction Fab({\n className,\n size = \"default\",\n variant = \"default\",\n asChild = false,\n extended = false,\n position = \"bottom-right\",\n ...props\n}: FabProps) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"fab\"\n data-variant={variant}\n data-size={size}\n className={cn(\n // Base styles shared between icon and extended\n \"inline-flex shrink-0 items-center justify-center rounded-full whitespace-nowrap transition-all outline-none cursor-pointer shadow-lg hover:shadow-xl focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n // Variant colors\n variant === \"default\" && \"bg-primary text-primary-foreground hover:bg-primary/90\",\n variant === \"secondary\" && \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n variant === \"outline\" && \"border border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground\",\n // Size: icon-only (square) vs extended (pill)\n extended ? fabExtendedVariants({ size }) : fabVariants({ size }),\n // Position\n positionClasses[position ?? \"bottom-right\"],\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Fab, fabVariants }\n"]}
@@ -0,0 +1,56 @@
1
+ import { MagneticButton } from './chunk-WCDYTWKA.js';
2
+ import { cn } from './chunk-QTH4LSO6.js';
3
+ import { __objRest, __spreadProps, __spreadValues } from './chunk-2NMEKWO5.js';
4
+ import * as React from 'react';
5
+ import { cva } from 'class-variance-authority';
6
+ import { jsx } from 'react/jsx-runtime';
7
+
8
+ var ctaBrandVariants = cva(
9
+ [
10
+ // Base
11
+ "inline-flex items-center justify-center gap-2",
12
+ "rounded-full font-semibold whitespace-nowrap",
13
+ "text-white border-0",
14
+ // Brand gradient (consome tokens --brand-soft/--brand-dark da Camada 2a)
15
+ "bg-gradient-to-b from-[color:var(--brand-soft)] to-[color:var(--brand-dark)]",
16
+ "hover:brightness-110 transition-[filter] duration-200",
17
+ // A11y focus
18
+ "outline-none focus-visible:outline-2 focus-visible:outline-offset-2",
19
+ "focus-visible:outline-[color:var(--brand-default)]"
20
+ ].join(" "),
21
+ {
22
+ variants: {
23
+ size: {
24
+ md: "h-11 px-7 text-sm",
25
+ lg: "h-13 px-10 text-base"
26
+ }
27
+ },
28
+ defaultVariants: {
29
+ size: "lg"
30
+ }
31
+ }
32
+ );
33
+ var CtaBrand = React.forwardRef(
34
+ function CtaBrand2(_a, ref) {
35
+ var _b = _a, { href, external = false, size, disableMagnetic = false, className, children } = _b, props = __objRest(_b, ["href", "external", "size", "disableMagnetic", "className", "children"]);
36
+ const anchor = /* @__PURE__ */ jsx(
37
+ "a",
38
+ __spreadProps(__spreadValues({
39
+ ref,
40
+ href,
41
+ target: external ? "_blank" : void 0,
42
+ rel: external ? "noopener noreferrer" : void 0,
43
+ "data-slot": "cta-brand",
44
+ className: cn(ctaBrandVariants({ size }), className)
45
+ }, props), {
46
+ children
47
+ })
48
+ );
49
+ if (disableMagnetic) return anchor;
50
+ return /* @__PURE__ */ jsx(MagneticButton, { children: anchor });
51
+ }
52
+ );
53
+
54
+ export { CtaBrand, ctaBrandVariants };
55
+ //# sourceMappingURL=chunk-DJ3DMPKK.js.map
56
+ //# sourceMappingURL=chunk-DJ3DMPKK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/marketing/buttons/cta-brand.tsx"],"names":["CtaBrand"],"mappings":";;;;;;;AAQA,IAAM,gBAAA,GAAmB,GAAA;AAAA,EACvB;AAAA;AAAA,IAEE,+CAAA;AAAA,IACA,8CAAA;AAAA,IACA,qBAAA;AAAA;AAAA,IAEA,8EAAA;AAAA,IACA,uDAAA;AAAA;AAAA,IAEA,qEAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAAA,EACV;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,mBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AAkCA,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EACrB,SAASA,SAAAA,CACP,EAAA,EACA,GAAA,EACA;AAFA,IAAA,IAAA,EAAA,GAAA,EAAA,EAAE,QAAM,QAAA,GAAW,KAAA,EAAO,IAAA,EAAM,eAAA,GAAkB,OAAO,SAAA,EAAW,QAAA,EApExE,GAoEI,EAAA,EAAiF,kBAAjF,EAAA,EAAiF,CAA/E,QAAM,UAAA,EAAkB,MAAA,EAAM,mBAAyB,WAAA,EAAW,UAAA,CAAA,CAAA;AAGpE,IAAA,MAAM,MAAA,mBACJ,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA,aAAA,CAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAA,EAAQ,WAAW,QAAA,GAAW,MAAA;AAAA,QAC9B,GAAA,EAAK,WAAW,qBAAA,GAAwB,MAAA;AAAA,QACxC,WAAA,EAAU,WAAA;AAAA,QACV,WAAW,EAAA,CAAG,gBAAA,CAAiB,EAAE,IAAA,EAAM,GAAG,SAAS;AAAA,OAAA,EAC/C,KAAA,CAAA,EAPL;AAAA,QASE;AAAA,OAAA;AAAA,KACH;AAGF,IAAA,IAAI,iBAAiB,OAAO,MAAA;AAC5B,IAAA,uBAAO,GAAA,CAAC,kBAAgB,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,EACjC;AACF","file":"chunk-DJ3DMPKK.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { MagneticButton } from \"@/components/marketing/effects/magnetic-button\"\n\nconst ctaBrandVariants = cva(\n [\n // Base\n \"inline-flex items-center justify-center gap-2\",\n \"rounded-full font-semibold whitespace-nowrap\",\n \"text-white border-0\",\n // Brand gradient (consome tokens --brand-soft/--brand-dark da Camada 2a)\n \"bg-gradient-to-b from-[color:var(--brand-soft)] to-[color:var(--brand-dark)]\",\n \"hover:brightness-110 transition-[filter] duration-200\",\n // A11y focus\n \"outline-none focus-visible:outline-2 focus-visible:outline-offset-2\",\n \"focus-visible:outline-[color:var(--brand-default)]\",\n ].join(\" \"),\n {\n variants: {\n size: {\n md: \"h-11 px-7 text-sm\",\n lg: \"h-13 px-10 text-base\",\n },\n },\n defaultVariants: {\n size: \"lg\",\n },\n }\n)\n\nexport interface CtaBrandProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"size\">,\n VariantProps<typeof ctaBrandVariants> {\n /** URL destino. Sempre renderiza como `<a>`. Pra acao de JS sem URL, use `<Button>` core. */\n href: string\n /** Quando true, abre em nova aba com `rel=\"noopener noreferrer\"`. Default `false`. */\n external?: boolean\n /**\n * Escape hatch — desliga o efeito magnetic wrapper. Use em contextos onde o\n * movimento incomoda (dentro de Sheet/Drawer/popover). Default `false`\n * (magnetic SEMPRE ligado — esse e o ponto do CtaBrand).\n */\n disableMagnetic?: boolean\n}\n\n/**\n * CTA principal de marketing — botao com gradient brand rose (Fluencypass),\n * rounded-full, drop-shadow glow + brightness hover, e efeito magnetic\n * embutido (puxa em direcao ao cursor).\n *\n * Pra acoes de JS sem URL (submit de form, abrir modal etc), use o\n * `<Button>` core do Cycle em vez disso.\n *\n * @example\n * <CtaBrand href=\"#vendas\">\n * Solicitar demonstracao\n * </CtaBrand>\n *\n * <CtaBrand href=\"https://app.fluencypass.com\" external size=\"md\">\n * Acessar app\n * </CtaBrand>\n */\nconst CtaBrand = React.forwardRef<HTMLAnchorElement, CtaBrandProps>(\n function CtaBrand(\n { href, external = false, size, disableMagnetic = false, className, children, ...props },\n ref\n ) {\n const anchor = (\n <a\n ref={ref}\n href={href}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noopener noreferrer\" : undefined}\n data-slot=\"cta-brand\"\n className={cn(ctaBrandVariants({ size }), className)}\n {...props}\n >\n {children}\n </a>\n )\n\n if (disableMagnetic) return anchor\n return <MagneticButton>{anchor}</MagneticButton>\n }\n)\n\nexport { CtaBrand, ctaBrandVariants }\n"]}
@@ -1,7 +1,7 @@
1
- import { useReducedMotion } from './chunk-K2NUBNSA.js';
2
- import { useIntersection } from './chunk-XQUQDZVA.js';
3
- import { cn } from './chunk-TYCPXAXF.js';
4
- import { __objRest, __spreadProps, __spreadValues } from './chunk-YINJ5YZ5.js';
1
+ import { useReducedMotion } from './chunk-T7EIAVSF.js';
2
+ import { useIntersection } from './chunk-OHRYR7PN.js';
3
+ import { cn } from './chunk-QTH4LSO6.js';
4
+ import { __objRest, __spreadProps, __spreadValues } from './chunk-2NMEKWO5.js';
5
5
  import { jsx } from 'react/jsx-runtime';
6
6
 
7
7
  function RevealOnScroll(_a) {
@@ -45,5 +45,5 @@ function RevealOnScroll(_a) {
45
45
  }
46
46
 
47
47
  export { RevealOnScroll };
48
- //# sourceMappingURL=chunk-UJ6OER6O.js.map
49
- //# sourceMappingURL=chunk-UJ6OER6O.js.map
48
+ //# sourceMappingURL=chunk-DO4M3OVV.js.map
49
+ //# sourceMappingURL=chunk-DO4M3OVV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/marketing/motion/reveal-on-scroll.tsx"],"names":[],"mappings":";;;;;;AA+BA,SAAS,eAAe,EAAA,EAUA;AAVA,EAAA,IAAA,EAAA,GAAA,EAAA,EACtB;AAAA,IAAA,EAAA,GAAK,KAAA;AAAA,IACL,KAAA,GAAQ,CAAA;AAAA,IACR,SAAA,GAAY,IAAA;AAAA,IACZ,UAAA,GAAa,kBAAA;AAAA,IACb,MAAA,GAAS,KAAA;AAAA,IACT,SAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GAvCF,GA+BwB,EAAA,EASnB,KAAA,GAAA,SAAA,CATmB,EAAA,EASnB;AAAA,IARH,IAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,UAAU,gBAAA,EAAiB;AACjC,EAAA,MAAM,EAAE,GAAA,EAAK,SAAA,EAAU,GAAI,eAAA,CAA6B;AAAA,IACtD,SAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAM,CAAC,MAAA;AAAA,IACP,YAAA,EAAc;AAAA,GACf,CAAA;AAED,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,SAAA,IAAa,cAAc,SAAS,CAAA;AAAA,MAClE,KAAA,EAAO,SAAS,CAAC,OAAA,GAAU,iBAAE,eAAA,EAAiB,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,EAAA,EAAS,KAAA,CAAA,GAAU;AAAA,KAAA,EACrE,KAAA,CAAA,EAJL;AAAA,MAME;AAAA,KAAA;AAAA,GACH;AAEJ","file":"chunk-UJ6OER6O.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { useIntersection } from \"@/hooks/use-intersection\"\nimport { useReducedMotion } from \"@/hooks/use-reduced-motion\"\n\ntype AsTag = \"div\" | \"section\" | \"article\" | \"header\" | \"footer\" | \"main\" | \"aside\"\n\nexport interface RevealOnScrollProps extends React.HTMLAttributes<HTMLElement> {\n /** Tag HTML renderizada. Default `\"div\"`. */\n as?: AsTag\n /** Delay extra em ms antes de iniciar a animacao. Default `0`. */\n delay?: number\n /** Fracao do elemento que precisa estar visivel pra disparar. Default `0.15`. */\n threshold?: number\n /** Margin do viewport (CSS shorthand). Default `\"0px 0px -10% 0px\"`. */\n rootMargin?: string\n /** Repetir a animacao toda vez que reentrar no viewport. Default `false`. */\n repeat?: boolean\n}\n\n/**\n * Envelopa qualquer conteudo e aplica fade-up suave quando o elemento entra\n * no viewport. Usa a utility `.cycle-reveal` definida em `globals.css` (que\n * faz `opacity 0 → 1` e `translateY(8px → 0)` com `--duration-reveal`).\n *\n * Acessibilidade: respeita `prefers-reduced-motion` — quando habilitado,\n * o conteudo fica imediatamente visivel sem transicao.\n */\nfunction RevealOnScroll({\n as = \"div\",\n delay = 0,\n threshold = 0.15,\n rootMargin = \"0px 0px -10% 0px\",\n repeat = false,\n className,\n style,\n children,\n ...props\n}: RevealOnScrollProps) {\n const reduced = useReducedMotion()\n const { ref, isVisible } = useIntersection<HTMLElement>({\n threshold,\n rootMargin,\n once: !repeat,\n startVisible: reduced,\n })\n\n const Tag = as as React.ElementType\n return (\n <Tag\n ref={ref}\n className={cn(\"cycle-reveal\", isVisible && \"is-visible\", className)}\n style={delay && !reduced ? { transitionDelay: `${delay}ms`, ...style } : style}\n {...props}\n >\n {children}\n </Tag>\n )\n}\n\nexport { RevealOnScroll }\n"]}
1
+ {"version":3,"sources":["../src/components/marketing/motion/reveal-on-scroll.tsx"],"names":[],"mappings":";;;;;;AA+BA,SAAS,eAAe,EAAA,EAUA;AAVA,EAAA,IAAA,EAAA,GAAA,EAAA,EACtB;AAAA,IAAA,EAAA,GAAK,KAAA;AAAA,IACL,KAAA,GAAQ,CAAA;AAAA,IACR,SAAA,GAAY,IAAA;AAAA,IACZ,UAAA,GAAa,kBAAA;AAAA,IACb,MAAA,GAAS,KAAA;AAAA,IACT,SAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GAvCF,GA+BwB,EAAA,EASnB,KAAA,GAAA,SAAA,CATmB,EAAA,EASnB;AAAA,IARH,IAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,UAAU,gBAAA,EAAiB;AACjC,EAAA,MAAM,EAAE,GAAA,EAAK,SAAA,EAAU,GAAI,eAAA,CAA6B;AAAA,IACtD,SAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAM,CAAC,MAAA;AAAA,IACP,YAAA,EAAc;AAAA,GACf,CAAA;AAED,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,SAAA,IAAa,cAAc,SAAS,CAAA;AAAA,MAClE,KAAA,EAAO,SAAS,CAAC,OAAA,GAAU,iBAAE,eAAA,EAAiB,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,EAAA,EAAS,KAAA,CAAA,GAAU;AAAA,KAAA,EACrE,KAAA,CAAA,EAJL;AAAA,MAME;AAAA,KAAA;AAAA,GACH;AAEJ","file":"chunk-DO4M3OVV.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { useIntersection } from \"@/hooks/use-intersection\"\nimport { useReducedMotion } from \"@/hooks/use-reduced-motion\"\n\ntype AsTag = \"div\" | \"section\" | \"article\" | \"header\" | \"footer\" | \"main\" | \"aside\"\n\nexport interface RevealOnScrollProps extends React.HTMLAttributes<HTMLElement> {\n /** Tag HTML renderizada. Default `\"div\"`. */\n as?: AsTag\n /** Delay extra em ms antes de iniciar a animacao. Default `0`. */\n delay?: number\n /** Fracao do elemento que precisa estar visivel pra disparar. Default `0.15`. */\n threshold?: number\n /** Margin do viewport (CSS shorthand). Default `\"0px 0px -10% 0px\"`. */\n rootMargin?: string\n /** Repetir a animacao toda vez que reentrar no viewport. Default `false`. */\n repeat?: boolean\n}\n\n/**\n * Envelopa qualquer conteudo e aplica fade-up suave quando o elemento entra\n * no viewport. Usa a utility `.cycle-reveal` definida em `globals.css` (que\n * faz `opacity 0 → 1` e `translateY(8px → 0)` com `--duration-reveal`).\n *\n * Acessibilidade: respeita `prefers-reduced-motion` — quando habilitado,\n * o conteudo fica imediatamente visivel sem transicao.\n */\nfunction RevealOnScroll({\n as = \"div\",\n delay = 0,\n threshold = 0.15,\n rootMargin = \"0px 0px -10% 0px\",\n repeat = false,\n className,\n style,\n children,\n ...props\n}: RevealOnScrollProps) {\n const reduced = useReducedMotion()\n const { ref, isVisible } = useIntersection<HTMLElement>({\n threshold,\n rootMargin,\n once: !repeat,\n startVisible: reduced,\n })\n\n const Tag = as as React.ElementType\n return (\n <Tag\n ref={ref}\n className={cn(\"cycle-reveal\", isVisible && \"is-visible\", className)}\n style={delay && !reduced ? { transitionDelay: `${delay}ms`, ...style } : style}\n {...props}\n >\n {children}\n </Tag>\n )\n}\n\nexport { RevealOnScroll }\n"]}
@@ -1,7 +1,7 @@
1
- import { resolveAudioSpeedNormal } from './chunk-C6BQAAHX.js';
2
- import { CycleIcon } from './chunk-V7M2NHUO.js';
3
- import { cn } from './chunk-TYCPXAXF.js';
4
- import { __spreadValues, __spreadProps } from './chunk-YINJ5YZ5.js';
1
+ import { resolveAudioSpeedNormal } from './chunk-EFT7BHN7.js';
2
+ import { CycleIcon } from './chunk-IGFCIAF3.js';
3
+ import { cn } from './chunk-QTH4LSO6.js';
4
+ import { __spreadValues, __spreadProps } from './chunk-2NMEKWO5.js';
5
5
  import * as React from 'react';
6
6
  import { MediaPlayer, MediaProvider, Time, TimeSlider, SeekButton, useMediaState, PlayButton, useMediaRemote, MuteButton, VolumeSlider } from '@vidstack/react';
7
7
  import '@vidstack/react/player/styles/base.css';
@@ -257,5 +257,5 @@ var AudioPlayer = React.forwardRef(
257
257
  );
258
258
 
259
259
  export { AudioPlayer };
260
- //# sourceMappingURL=chunk-DCNZ2DRR.js.map
261
- //# sourceMappingURL=chunk-DCNZ2DRR.js.map
260
+ //# sourceMappingURL=chunk-E3E64CT4.js.map
261
+ //# sourceMappingURL=chunk-E3E64CT4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/audio-player.tsx"],"names":["AudioPlayer"],"mappings":"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","file":"chunk-DCNZ2DRR.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport {\n MediaPlayer,\n MediaProvider,\n TimeSlider,\n VolumeSlider,\n Time,\n PlayButton,\n MuteButton,\n SeekButton,\n useMediaState,\n useMediaRemote,\n type MediaPlayerInstance,\n} from \"@vidstack/react\"\nimport \"@vidstack/react/player/styles/base.css\"\nimport {\n Play,\n Pause,\n Volume2,\n VolumeX,\n Volume1,\n RotateCcw,\n RotateCw,\n Gauge,\n Check,\n} from \"lucide-react\"\nimport { CycleIcon } from \"@/components/icons\"\nimport { cn } from \"@/lib/utils\"\nimport { type PlayerLocale, resolveAudioSpeedNormal } from \"@/components/ui/player-i18n\"\n\n/* ─── Types ─── */\n\nexport interface AudioPlayerRef {\n play(): void\n pause(): void\n readonly currentTime: number\n readonly duration: number\n}\n\nexport interface AudioPlayerLabels {\n /** Label da velocidade normal no menu (default depende do locale) */\n speedNormal?: string\n}\n\nexport interface AudioPlayerProps {\n /** URL do audio (mp3, ogg, m3u8) */\n src: string\n /** Nome da track/aula */\n title: string\n /** Subtitulo / nome do curso */\n subtitle?: string\n /** URL da imagem de capa (variante card) */\n coverArt?: string\n /** Alt text da imagem de capa */\n coverArtAlt?: string\n /** Variante de layout */\n variant?: \"default\" | \"card\"\n /** Icones, textos e sliders em primary-foreground — usar com .theme-* */\n filled?: boolean\n /** Iniciar automaticamente */\n autoPlay?: boolean\n /** Iniciar mutado */\n muted?: boolean\n /** Repetir ao terminar */\n loop?: boolean\n /** Exibir controle de velocidade (default: true — EdTech) */\n showSpeed?: boolean\n /** Tempo inicial em segundos — usado para retomar de onde o usuario parou (resume position) */\n startTime?: number\n /** Idioma dos controles (default: \"pt-BR\"). 13 locales pre-configurados. */\n locale?: PlayerLocale\n /** Overrides pontuais de labels — aplicados em cima do locale selecionado */\n labels?: AudioPlayerLabels\n /** Callback com progresso do audio (currentTime em segundos, duration em segundos) */\n onTimeUpdate?: (currentTime: number, duration: number) => void\n /** Callback disparado quando o audio termina */\n onEnded?: () => void\n className?: string\n}\n\n/* ─── Labels context ─── */\n\nconst AudioLabelsContext = React.createContext<{ speedNormal: string }>({ speedNormal: \"Normal\" })\nfunction useAudioLabels() {\n return React.useContext(AudioLabelsContext)\n}\n\n/* ─── Shared styles ─── */\n\nconst controlBtnClass =\n \"group/btn inline-flex size-9 cursor-pointer items-center justify-center rounded-md text-foreground outline-none transition-colors hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring group-data-[filled]:text-primary-foreground group-data-[filled]:hover:bg-primary-foreground/10\"\n\n/** Play, Pause e Volume usam icones filled (solid) — igual YouTube */\nconst filledIconClass =\n \"fill-current !stroke-transparent text-foreground group-data-[filled]:text-primary-foreground\"\n\nconst outlineIconClass =\n \"text-foreground group-data-[filled]:text-primary-foreground\"\n\n/* ─── Sub-components ─── */\n\nfunction AudioPlayControl() {\n const isPaused = useMediaState(\"paused\")\n return (\n <PlayButton className={controlBtnClass}>\n {isPaused ? (\n <CycleIcon icon={Play} size=\"sm\" decorative className={filledIconClass} />\n ) : (\n <CycleIcon icon={Pause} size=\"sm\" decorative className={filledIconClass} />\n )}\n </PlayButton>\n )\n}\n\nfunction AudioSeekBackwardControl() {\n return (\n <SeekButton className={controlBtnClass} seconds={-10}>\n <CycleIcon icon={RotateCcw} size=\"sm\" decorative className={outlineIconClass} />\n </SeekButton>\n )\n}\n\nfunction AudioSeekForwardControl() {\n return (\n <SeekButton className={controlBtnClass} seconds={10}>\n <CycleIcon icon={RotateCw} size=\"sm\" decorative className={outlineIconClass} />\n </SeekButton>\n )\n}\n\nfunction AudioMuteControl() {\n const volume = useMediaState(\"volume\")\n const isMuted = useMediaState(\"muted\")\n\n const Icon = isMuted || volume === 0 ? VolumeX : volume < 0.5 ? Volume1 : Volume2\n\n return (\n <MuteButton className={controlBtnClass}>\n <CycleIcon icon={Icon} size=\"sm\" decorative className={filledIconClass} />\n </MuteButton>\n )\n}\n\nfunction AudioVolumeControl() {\n return (\n <VolumeSlider.Root className=\"group relative hidden h-9 w-20 cursor-pointer touch-none select-none items-center outline-none sm:inline-flex\">\n <VolumeSlider.Track className=\"relative h-[4px] w-full rounded-full bg-accent group-data-[filled]/root:bg-primary-foreground/30\">\n <VolumeSlider.TrackFill className=\"absolute h-full w-[var(--slider-fill)] rounded-full bg-primary group-data-[filled]/root:bg-primary-foreground\" />\n </VolumeSlider.Track>\n <VolumeSlider.Thumb className=\"absolute left-[var(--slider-fill)] top-1/2 size-3 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary opacity-0 transition-opacity group-data-[active]:opacity-100 group-data-[dragging]:opacity-100 group-data-[filled]/root:bg-primary-foreground\" />\n </VolumeSlider.Root>\n )\n}\n\nfunction AudioSeekBar() {\n return (\n <TimeSlider.Root className=\"group relative inline-flex h-9 w-full cursor-pointer touch-none select-none items-center outline-none\">\n <TimeSlider.Track className=\"relative h-[4px] w-full rounded-full bg-accent group-data-[filled]/root:bg-primary-foreground/30\">\n <TimeSlider.Progress className=\"absolute h-full w-[var(--slider-progress)] rounded-full bg-accent-foreground/20 group-data-[filled]/root:bg-primary-foreground/20\" />\n <TimeSlider.TrackFill className=\"absolute h-full w-[var(--slider-fill)] rounded-full bg-primary group-data-[filled]/root:bg-primary-foreground\" />\n </TimeSlider.Track>\n <TimeSlider.Thumb className=\"absolute left-[var(--slider-fill)] top-1/2 size-3 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary opacity-0 transition-opacity group-data-[active]:opacity-100 group-data-[dragging]:opacity-100 group-data-[filled]/root:bg-primary-foreground\" />\n\n {/* Time preview on hover */}\n <TimeSlider.Preview className=\"pointer-events-none flex flex-col items-center opacity-0 transition-opacity duration-200 data-[visible]:opacity-100\">\n <TimeSlider.Value className=\"rounded bg-popover px-1.5 py-0.5 text-[11px] font-mono text-popover-foreground border border-border shadow-sm\" />\n </TimeSlider.Preview>\n </TimeSlider.Root>\n )\n}\n\nfunction AudioTimeDisplay() {\n return (\n <div className=\"flex items-center gap-1 text-xs font-mono text-muted-foreground tabular-nums group-data-[filled]:text-primary-foreground/80\">\n <Time type=\"current\" />\n <span>/</span>\n <Time type=\"duration\" />\n </div>\n )\n}\n\nfunction AudioSpeedControl() {\n const playbackRate = useMediaState(\"playbackRate\")\n const remote = useMediaRemote()\n const [open, setOpen] = React.useState(false)\n const l = useAudioLabels()\n\n const rates = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]\n\n return (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className={controlBtnClass}\n >\n {playbackRate === 1 ? (\n <CycleIcon icon={Gauge} size=\"sm\" decorative className={outlineIconClass} />\n ) : (\n <span className=\"text-xs font-mono font-semibold text-foreground group-data-[filled]:text-primary-foreground\">{playbackRate}x</span>\n )}\n </button>\n\n {open && (\n <>\n {/* Backdrop to close */}\n <div className=\"fixed inset-0 z-40\" onClick={() => setOpen(false)} />\n\n <div className=\"absolute bottom-full right-0 z-50 mb-2 min-w-[120px] rounded-lg border border-border bg-popover p-1 shadow-lg\">\n {rates.map((rate) => (\n <button\n key={rate}\n type=\"button\"\n onClick={() => {\n remote.changePlaybackRate(rate)\n setOpen(false)\n }}\n className={cn(\n \"flex w-full items-center gap-2 rounded-md px-3 py-1.5 text-sm text-popover-foreground/80 transition-colors hover:bg-accent hover:text-popover-foreground\",\n playbackRate === rate && \"text-popover-foreground font-medium\"\n )}\n >\n <span className=\"size-4 flex items-center justify-center\">\n {playbackRate === rate && <CycleIcon icon={Check} size=\"2xs\" decorative className=\"text-popover-foreground\" />}\n </span>\n <span className=\"font-mono\">{rate === 1 ? l.speedNormal : `${rate}x`}</span>\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n )\n}\n\n/* ─── Main component ─── */\n\nexport const AudioPlayer = React.forwardRef<AudioPlayerRef, AudioPlayerProps>(\n function AudioPlayer(\n {\n src,\n title,\n subtitle,\n coverArt,\n coverArtAlt = \"\",\n variant = \"default\",\n filled = false,\n autoPlay = false,\n muted = false,\n loop = false,\n showSpeed = true,\n startTime,\n locale = \"pt-BR\",\n labels,\n onTimeUpdate,\n onEnded,\n className,\n },\n ref\n ) {\n const resolvedLabels = React.useMemo(\n () => ({ speedNormal: resolveAudioSpeedNormal(locale, labels?.speedNormal) }),\n [locale, labels]\n )\n const player = React.useRef<MediaPlayerInstance>(null)\n\n React.useImperativeHandle(ref, () => ({\n play() {\n player.current?.play()\n },\n pause() {\n player.current?.pause()\n },\n get currentTime() {\n return player.current?.currentTime ?? 0\n },\n get duration() {\n return player.current?.duration ?? 0\n },\n }))\n\n const handleTimeUpdate = React.useCallback(\n (detail: { currentTime: number }) => {\n if (onTimeUpdate && player.current) {\n onTimeUpdate(detail.currentTime, player.current.duration)\n }\n },\n [onTimeUpdate]\n )\n\n const handleEnded = React.useCallback(() => {\n onEnded?.()\n }, [onEnded])\n\n // Resume position: seek to startTime once the player is ready\n const hasAppliedStartTime = React.useRef(false)\n const handleCanPlay = React.useCallback(() => {\n if (startTime && startTime > 0 && !hasAppliedStartTime.current && player.current) {\n player.current.currentTime = startTime\n hasAppliedStartTime.current = true\n }\n }, [startTime])\n\n const playerEvents = {\n onCanPlay: handleCanPlay,\n ...(onTimeUpdate ? { onTimeUpdate: handleTimeUpdate } : {}),\n ...(onEnded ? { onEnded: handleEnded } : {}),\n }\n\n if (variant === \"card\") {\n return (\n <AudioLabelsContext.Provider value={resolvedLabels}>\n <MediaPlayer\n ref={player}\n src={src}\n autoPlay={autoPlay}\n muted={muted}\n loop={loop}\n viewType=\"audio\"\n data-filled={filled ? \"\" : undefined}\n style={filled ? { '--primary-foreground': 'var(--secondary-foreground)' } as Record<string, string> : undefined}\n className={cn(\n \"group/root group !block w-full rounded-xl border border-border bg-card p-4 shadow-sm md:p-6\",\n className\n )}\n {...playerEvents}\n >\n <MediaProvider className=\"!hidden\" />\n\n {/* Top: cover art + text */}\n <div className=\"flex gap-4 mb-4 md:gap-5 md:mb-6\">\n {coverArt && (\n <img\n src={coverArt}\n alt={coverArtAlt}\n className=\"size-16 shrink-0 rounded-lg object-cover bg-muted md:size-24 md:rounded-xl\"\n />\n )}\n <div className=\"flex min-w-0 flex-col justify-center\">\n <p className={cn(\n \"truncate heading-md md:heading-xl\",\n filled ? \"text-primary-foreground\" : \"text-card-foreground\"\n )}>{title}</p>\n {subtitle && (\n <p className={cn(\n \"truncate body-md md:body-lg\",\n filled ? \"text-primary-foreground/70\" : \"text-muted-foreground\"\n )}>{subtitle}</p>\n )}\n </div>\n </div>\n\n {/* Seek bar */}\n <div className=\"flex w-full items-center\">\n <AudioSeekBar />\n </div>\n\n {/* Time */}\n <div className=\"flex items-center justify-between px-0.5 -mt-1 mb-1 md:mb-2\">\n <div className={cn(\n \"text-[11px] font-mono tabular-nums md:text-xs\",\n filled ? \"text-primary-foreground/80\" : \"text-muted-foreground\"\n )}>\n <Time type=\"current\" />\n </div>\n <div className={cn(\n \"text-[11px] font-mono tabular-nums md:text-xs\",\n filled ? \"text-primary-foreground/80\" : \"text-muted-foreground\"\n )}>\n <Time type=\"duration\" />\n </div>\n </div>\n\n {/* Controls */}\n <div className=\"flex items-center gap-1 md:gap-2\">\n <AudioSeekBackwardControl />\n <AudioPlayControl />\n <AudioSeekForwardControl />\n\n <div className=\"flex-1\" />\n\n {showSpeed && <AudioSpeedControl />}\n <AudioMuteControl />\n <AudioVolumeControl />\n </div>\n </MediaPlayer>\n </AudioLabelsContext.Provider>\n )\n }\n\n // Default variant (compact bar)\n return (\n <AudioLabelsContext.Provider value={resolvedLabels}>\n <MediaPlayer\n ref={player}\n src={src}\n autoPlay={autoPlay}\n muted={muted}\n loop={loop}\n viewType=\"audio\"\n data-filled={filled ? \"\" : undefined}\n style={filled ? { '--primary-foreground': 'var(--secondary-foreground)' } as Record<string, string> : undefined}\n className={cn(\n \"group/root group !flex w-full items-center gap-1.5 rounded-xl border border-border bg-card px-2 py-1.5 shadow-sm\",\n className\n )}\n {...playerEvents}\n >\n <MediaProvider className=\"!hidden\" />\n\n {/* Left controls */}\n <AudioSeekBackwardControl />\n <AudioPlayControl />\n <AudioSeekForwardControl />\n\n {/* Seek bar */}\n <div className=\"flex-1 px-1\">\n <AudioSeekBar />\n </div>\n\n {/* Time */}\n <AudioTimeDisplay />\n\n {/* Right controls */}\n {showSpeed && <AudioSpeedControl />}\n <AudioMuteControl />\n <AudioVolumeControl />\n </MediaPlayer>\n </AudioLabelsContext.Provider>\n )\n }\n)\n"]}
1
+ {"version":3,"sources":["../src/components/ui/audio-player.tsx"],"names":["AudioPlayer"],"mappings":"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","file":"chunk-E3E64CT4.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport {\n MediaPlayer,\n MediaProvider,\n TimeSlider,\n VolumeSlider,\n Time,\n PlayButton,\n MuteButton,\n SeekButton,\n useMediaState,\n useMediaRemote,\n type MediaPlayerInstance,\n} from \"@vidstack/react\"\nimport \"@vidstack/react/player/styles/base.css\"\nimport {\n Play,\n Pause,\n Volume2,\n VolumeX,\n Volume1,\n RotateCcw,\n RotateCw,\n Gauge,\n Check,\n} from \"lucide-react\"\nimport { CycleIcon } from \"@/components/icons\"\nimport { cn } from \"@/lib/utils\"\nimport { type PlayerLocale, resolveAudioSpeedNormal } from \"@/components/ui/player-i18n\"\n\n/* ─── Types ─── */\n\nexport interface AudioPlayerRef {\n play(): void\n pause(): void\n readonly currentTime: number\n readonly duration: number\n}\n\nexport interface AudioPlayerLabels {\n /** Label da velocidade normal no menu (default depende do locale) */\n speedNormal?: string\n}\n\nexport interface AudioPlayerProps {\n /** URL do audio (mp3, ogg, m3u8) */\n src: string\n /** Nome da track/aula */\n title: string\n /** Subtitulo / nome do curso */\n subtitle?: string\n /** URL da imagem de capa (variante card) */\n coverArt?: string\n /** Alt text da imagem de capa */\n coverArtAlt?: string\n /** Variante de layout */\n variant?: \"default\" | \"card\"\n /** Icones, textos e sliders em primary-foreground — usar com .theme-* */\n filled?: boolean\n /** Iniciar automaticamente */\n autoPlay?: boolean\n /** Iniciar mutado */\n muted?: boolean\n /** Repetir ao terminar */\n loop?: boolean\n /** Exibir controle de velocidade (default: true — EdTech) */\n showSpeed?: boolean\n /** Tempo inicial em segundos — usado para retomar de onde o usuario parou (resume position) */\n startTime?: number\n /** Idioma dos controles (default: \"pt-BR\"). 13 locales pre-configurados. */\n locale?: PlayerLocale\n /** Overrides pontuais de labels — aplicados em cima do locale selecionado */\n labels?: AudioPlayerLabels\n /** Callback com progresso do audio (currentTime em segundos, duration em segundos) */\n onTimeUpdate?: (currentTime: number, duration: number) => void\n /** Callback disparado quando o audio termina */\n onEnded?: () => void\n className?: string\n}\n\n/* ─── Labels context ─── */\n\nconst AudioLabelsContext = React.createContext<{ speedNormal: string }>({ speedNormal: \"Normal\" })\nfunction useAudioLabels() {\n return React.useContext(AudioLabelsContext)\n}\n\n/* ─── Shared styles ─── */\n\nconst controlBtnClass =\n \"group/btn inline-flex size-9 cursor-pointer items-center justify-center rounded-md text-foreground outline-none transition-colors hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring group-data-[filled]:text-primary-foreground group-data-[filled]:hover:bg-primary-foreground/10\"\n\n/** Play, Pause e Volume usam icones filled (solid) — igual YouTube */\nconst filledIconClass =\n \"fill-current !stroke-transparent text-foreground group-data-[filled]:text-primary-foreground\"\n\nconst outlineIconClass =\n \"text-foreground group-data-[filled]:text-primary-foreground\"\n\n/* ─── Sub-components ─── */\n\nfunction AudioPlayControl() {\n const isPaused = useMediaState(\"paused\")\n return (\n <PlayButton className={controlBtnClass}>\n {isPaused ? (\n <CycleIcon icon={Play} size=\"sm\" decorative className={filledIconClass} />\n ) : (\n <CycleIcon icon={Pause} size=\"sm\" decorative className={filledIconClass} />\n )}\n </PlayButton>\n )\n}\n\nfunction AudioSeekBackwardControl() {\n return (\n <SeekButton className={controlBtnClass} seconds={-10}>\n <CycleIcon icon={RotateCcw} size=\"sm\" decorative className={outlineIconClass} />\n </SeekButton>\n )\n}\n\nfunction AudioSeekForwardControl() {\n return (\n <SeekButton className={controlBtnClass} seconds={10}>\n <CycleIcon icon={RotateCw} size=\"sm\" decorative className={outlineIconClass} />\n </SeekButton>\n )\n}\n\nfunction AudioMuteControl() {\n const volume = useMediaState(\"volume\")\n const isMuted = useMediaState(\"muted\")\n\n const Icon = isMuted || volume === 0 ? VolumeX : volume < 0.5 ? Volume1 : Volume2\n\n return (\n <MuteButton className={controlBtnClass}>\n <CycleIcon icon={Icon} size=\"sm\" decorative className={filledIconClass} />\n </MuteButton>\n )\n}\n\nfunction AudioVolumeControl() {\n return (\n <VolumeSlider.Root className=\"group relative hidden h-9 w-20 cursor-pointer touch-none select-none items-center outline-none sm:inline-flex\">\n <VolumeSlider.Track className=\"relative h-[4px] w-full rounded-full bg-accent group-data-[filled]/root:bg-primary-foreground/30\">\n <VolumeSlider.TrackFill className=\"absolute h-full w-[var(--slider-fill)] rounded-full bg-primary group-data-[filled]/root:bg-primary-foreground\" />\n </VolumeSlider.Track>\n <VolumeSlider.Thumb className=\"absolute left-[var(--slider-fill)] top-1/2 size-3 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary opacity-0 transition-opacity group-data-[active]:opacity-100 group-data-[dragging]:opacity-100 group-data-[filled]/root:bg-primary-foreground\" />\n </VolumeSlider.Root>\n )\n}\n\nfunction AudioSeekBar() {\n return (\n <TimeSlider.Root className=\"group relative inline-flex h-9 w-full cursor-pointer touch-none select-none items-center outline-none\">\n <TimeSlider.Track className=\"relative h-[4px] w-full rounded-full bg-accent group-data-[filled]/root:bg-primary-foreground/30\">\n <TimeSlider.Progress className=\"absolute h-full w-[var(--slider-progress)] rounded-full bg-accent-foreground/20 group-data-[filled]/root:bg-primary-foreground/20\" />\n <TimeSlider.TrackFill className=\"absolute h-full w-[var(--slider-fill)] rounded-full bg-primary group-data-[filled]/root:bg-primary-foreground\" />\n </TimeSlider.Track>\n <TimeSlider.Thumb className=\"absolute left-[var(--slider-fill)] top-1/2 size-3 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary opacity-0 transition-opacity group-data-[active]:opacity-100 group-data-[dragging]:opacity-100 group-data-[filled]/root:bg-primary-foreground\" />\n\n {/* Time preview on hover */}\n <TimeSlider.Preview className=\"pointer-events-none flex flex-col items-center opacity-0 transition-opacity duration-200 data-[visible]:opacity-100\">\n <TimeSlider.Value className=\"rounded bg-popover px-1.5 py-0.5 text-[11px] font-mono text-popover-foreground border border-border shadow-sm\" />\n </TimeSlider.Preview>\n </TimeSlider.Root>\n )\n}\n\nfunction AudioTimeDisplay() {\n return (\n <div className=\"flex items-center gap-1 text-xs font-mono text-muted-foreground tabular-nums group-data-[filled]:text-primary-foreground/80\">\n <Time type=\"current\" />\n <span>/</span>\n <Time type=\"duration\" />\n </div>\n )\n}\n\nfunction AudioSpeedControl() {\n const playbackRate = useMediaState(\"playbackRate\")\n const remote = useMediaRemote()\n const [open, setOpen] = React.useState(false)\n const l = useAudioLabels()\n\n const rates = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]\n\n return (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className={controlBtnClass}\n >\n {playbackRate === 1 ? (\n <CycleIcon icon={Gauge} size=\"sm\" decorative className={outlineIconClass} />\n ) : (\n <span className=\"text-xs font-mono font-semibold text-foreground group-data-[filled]:text-primary-foreground\">{playbackRate}x</span>\n )}\n </button>\n\n {open && (\n <>\n {/* Backdrop to close */}\n <div className=\"fixed inset-0 z-40\" onClick={() => setOpen(false)} />\n\n <div className=\"absolute bottom-full right-0 z-50 mb-2 min-w-[120px] rounded-lg border border-border bg-popover p-1 shadow-lg\">\n {rates.map((rate) => (\n <button\n key={rate}\n type=\"button\"\n onClick={() => {\n remote.changePlaybackRate(rate)\n setOpen(false)\n }}\n className={cn(\n \"flex w-full items-center gap-2 rounded-md px-3 py-1.5 text-sm text-popover-foreground/80 transition-colors hover:bg-accent hover:text-popover-foreground\",\n playbackRate === rate && \"text-popover-foreground font-medium\"\n )}\n >\n <span className=\"size-4 flex items-center justify-center\">\n {playbackRate === rate && <CycleIcon icon={Check} size=\"2xs\" decorative className=\"text-popover-foreground\" />}\n </span>\n <span className=\"font-mono\">{rate === 1 ? l.speedNormal : `${rate}x`}</span>\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n )\n}\n\n/* ─── Main component ─── */\n\nexport const AudioPlayer = React.forwardRef<AudioPlayerRef, AudioPlayerProps>(\n function AudioPlayer(\n {\n src,\n title,\n subtitle,\n coverArt,\n coverArtAlt = \"\",\n variant = \"default\",\n filled = false,\n autoPlay = false,\n muted = false,\n loop = false,\n showSpeed = true,\n startTime,\n locale = \"pt-BR\",\n labels,\n onTimeUpdate,\n onEnded,\n className,\n },\n ref\n ) {\n const resolvedLabels = React.useMemo(\n () => ({ speedNormal: resolveAudioSpeedNormal(locale, labels?.speedNormal) }),\n [locale, labels]\n )\n const player = React.useRef<MediaPlayerInstance>(null)\n\n React.useImperativeHandle(ref, () => ({\n play() {\n player.current?.play()\n },\n pause() {\n player.current?.pause()\n },\n get currentTime() {\n return player.current?.currentTime ?? 0\n },\n get duration() {\n return player.current?.duration ?? 0\n },\n }))\n\n const handleTimeUpdate = React.useCallback(\n (detail: { currentTime: number }) => {\n if (onTimeUpdate && player.current) {\n onTimeUpdate(detail.currentTime, player.current.duration)\n }\n },\n [onTimeUpdate]\n )\n\n const handleEnded = React.useCallback(() => {\n onEnded?.()\n }, [onEnded])\n\n // Resume position: seek to startTime once the player is ready\n const hasAppliedStartTime = React.useRef(false)\n const handleCanPlay = React.useCallback(() => {\n if (startTime && startTime > 0 && !hasAppliedStartTime.current && player.current) {\n player.current.currentTime = startTime\n hasAppliedStartTime.current = true\n }\n }, [startTime])\n\n const playerEvents = {\n onCanPlay: handleCanPlay,\n ...(onTimeUpdate ? { onTimeUpdate: handleTimeUpdate } : {}),\n ...(onEnded ? { onEnded: handleEnded } : {}),\n }\n\n if (variant === \"card\") {\n return (\n <AudioLabelsContext.Provider value={resolvedLabels}>\n <MediaPlayer\n ref={player}\n src={src}\n autoPlay={autoPlay}\n muted={muted}\n loop={loop}\n viewType=\"audio\"\n data-filled={filled ? \"\" : undefined}\n style={filled ? { '--primary-foreground': 'var(--secondary-foreground)' } as Record<string, string> : undefined}\n className={cn(\n \"group/root group !block w-full rounded-xl border border-border bg-card p-4 shadow-sm md:p-6\",\n className\n )}\n {...playerEvents}\n >\n <MediaProvider className=\"!hidden\" />\n\n {/* Top: cover art + text */}\n <div className=\"flex gap-4 mb-4 md:gap-5 md:mb-6\">\n {coverArt && (\n <img\n src={coverArt}\n alt={coverArtAlt}\n className=\"size-16 shrink-0 rounded-lg object-cover bg-muted md:size-24 md:rounded-xl\"\n />\n )}\n <div className=\"flex min-w-0 flex-col justify-center\">\n <p className={cn(\n \"truncate heading-md md:heading-xl\",\n filled ? \"text-primary-foreground\" : \"text-card-foreground\"\n )}>{title}</p>\n {subtitle && (\n <p className={cn(\n \"truncate body-md md:body-lg\",\n filled ? \"text-primary-foreground/70\" : \"text-muted-foreground\"\n )}>{subtitle}</p>\n )}\n </div>\n </div>\n\n {/* Seek bar */}\n <div className=\"flex w-full items-center\">\n <AudioSeekBar />\n </div>\n\n {/* Time */}\n <div className=\"flex items-center justify-between px-0.5 -mt-1 mb-1 md:mb-2\">\n <div className={cn(\n \"text-[11px] font-mono tabular-nums md:text-xs\",\n filled ? \"text-primary-foreground/80\" : \"text-muted-foreground\"\n )}>\n <Time type=\"current\" />\n </div>\n <div className={cn(\n \"text-[11px] font-mono tabular-nums md:text-xs\",\n filled ? \"text-primary-foreground/80\" : \"text-muted-foreground\"\n )}>\n <Time type=\"duration\" />\n </div>\n </div>\n\n {/* Controls */}\n <div className=\"flex items-center gap-1 md:gap-2\">\n <AudioSeekBackwardControl />\n <AudioPlayControl />\n <AudioSeekForwardControl />\n\n <div className=\"flex-1\" />\n\n {showSpeed && <AudioSpeedControl />}\n <AudioMuteControl />\n <AudioVolumeControl />\n </div>\n </MediaPlayer>\n </AudioLabelsContext.Provider>\n )\n }\n\n // Default variant (compact bar)\n return (\n <AudioLabelsContext.Provider value={resolvedLabels}>\n <MediaPlayer\n ref={player}\n src={src}\n autoPlay={autoPlay}\n muted={muted}\n loop={loop}\n viewType=\"audio\"\n data-filled={filled ? \"\" : undefined}\n style={filled ? { '--primary-foreground': 'var(--secondary-foreground)' } as Record<string, string> : undefined}\n className={cn(\n \"group/root group !flex w-full items-center gap-1.5 rounded-xl border border-border bg-card px-2 py-1.5 shadow-sm\",\n className\n )}\n {...playerEvents}\n >\n <MediaProvider className=\"!hidden\" />\n\n {/* Left controls */}\n <AudioSeekBackwardControl />\n <AudioPlayControl />\n <AudioSeekForwardControl />\n\n {/* Seek bar */}\n <div className=\"flex-1 px-1\">\n <AudioSeekBar />\n </div>\n\n {/* Time */}\n <AudioTimeDisplay />\n\n {/* Right controls */}\n {showSpeed && <AudioSpeedControl />}\n <AudioMuteControl />\n <AudioVolumeControl />\n </MediaPlayer>\n </AudioLabelsContext.Provider>\n )\n }\n)\n"]}
@@ -1,5 +1,5 @@
1
- import { cn } from './chunk-TYCPXAXF.js';
2
- import { __objRest, __spreadValues } from './chunk-YINJ5YZ5.js';
1
+ import { cn } from './chunk-QTH4LSO6.js';
2
+ import { __objRest, __spreadValues } from './chunk-2NMEKWO5.js';
3
3
  import { Avatar as Avatar$1 } from 'radix-ui';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -109,5 +109,5 @@ function AvatarGroupCount(_a) {
109
109
  }
110
110
 
111
111
  export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage };
112
- //# sourceMappingURL=chunk-MSLQRGSP.js.map
113
- //# sourceMappingURL=chunk-MSLQRGSP.js.map
112
+ //# sourceMappingURL=chunk-E6WZOLWX.js.map
113
+ //# sourceMappingURL=chunk-E6WZOLWX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/avatar.tsx"],"names":["AvatarPrimitive"],"mappings":"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","file":"chunk-MSLQRGSP.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Avatar as AvatarPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Avatar({\n className,\n size = \"default\",\n theme,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: \"default\" | \"sm\" | \"lg\"\n /** Apply a color theme (.theme-*) — colors the fallback bg/text via primary tokens */\n theme?: string\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n data-themed={theme ? \"\" : undefined}\n className={cn(\n \"group/avatar relative flex size-8 shrink-0 rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6\",\n theme,\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full rounded-full\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"flex size-full items-center justify-center overflow-hidden rounded-full bg-muted text-sm text-muted-foreground\",\n \"group-data-[size=sm]/avatar:text-xs\",\n \"group-data-[themed]/avatar:bg-primary group-data-[themed]/avatar:text-primary-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 ring-background select-none\",\n \"bg-primary text-primary-foreground\",\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n}\n"]}
1
+ {"version":3,"sources":["../src/components/ui/avatar.tsx"],"names":["AvatarPrimitive"],"mappings":"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","file":"chunk-E6WZOLWX.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Avatar as AvatarPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Avatar({\n className,\n size = \"default\",\n theme,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: \"default\" | \"sm\" | \"lg\"\n /** Apply a color theme (.theme-*) — colors the fallback bg/text via primary tokens */\n theme?: string\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n data-themed={theme ? \"\" : undefined}\n className={cn(\n \"group/avatar relative flex size-8 shrink-0 rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6\",\n theme,\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full rounded-full\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"flex size-full items-center justify-center overflow-hidden rounded-full bg-muted text-sm text-muted-foreground\",\n \"group-data-[size=sm]/avatar:text-xs\",\n \"group-data-[themed]/avatar:bg-primary group-data-[themed]/avatar:text-primary-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 ring-background select-none\",\n \"bg-primary text-primary-foreground\",\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { __spreadValues } from './chunk-YINJ5YZ5.js';
1
+ import { __spreadValues } from './chunk-2NMEKWO5.js';
2
2
 
3
3
  // src/components/ui/player-i18n.ts
4
4
  var ptBR = {
@@ -869,5 +869,5 @@ function resolveAudioSpeedNormal(locale, override) {
869
869
  }
870
870
 
871
871
  export { playerLocales, resolveAudioSpeedNormal, resolveVideoLabels, resolveVidstackTranslations };
872
- //# sourceMappingURL=chunk-C6BQAAHX.js.map
873
- //# sourceMappingURL=chunk-C6BQAAHX.js.map
872
+ //# sourceMappingURL=chunk-EFT7BHN7.js.map
873
+ //# sourceMappingURL=chunk-EFT7BHN7.js.map