@fluencypassdevs/cycle 1.15.1 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/bin/cli.mjs +0 -0
  2. package/bin/mcp.mjs +94 -0
  3. package/dist/{chunk-CBBCTX3A.js → chunk-2KFWBA76.js} +4 -4
  4. package/dist/{chunk-CBBCTX3A.js.map → chunk-2KFWBA76.js.map} +1 -1
  5. package/dist/{chunk-MJKZELI3.js → chunk-2M73I67G.js} +6 -6
  6. package/dist/{chunk-MJKZELI3.js.map → chunk-2M73I67G.js.map} +1 -1
  7. package/dist/{chunk-OHRYR7PN.js → chunk-2MBHI4VU.js} +3 -3
  8. package/dist/chunk-2MBHI4VU.js.map +1 -0
  9. package/dist/{chunk-WMOGNJWP.js → chunk-2SGRMGCM.js} +3 -3
  10. package/dist/chunk-2SGRMGCM.js.map +1 -0
  11. package/dist/{chunk-T7EIAVSF.js → chunk-2XFXNZNW.js} +3 -3
  12. package/dist/chunk-2XFXNZNW.js.map +1 -0
  13. package/dist/{chunk-JUVL7GN2.js → chunk-325K2R3T.js} +3 -3
  14. package/dist/{chunk-JUVL7GN2.js.map → chunk-325K2R3T.js.map} +1 -1
  15. package/dist/{chunk-LC55JPI4.js → chunk-32NHCUEZ.js} +3 -3
  16. package/dist/chunk-32NHCUEZ.js.map +1 -0
  17. package/dist/{chunk-J3DGYZGK.js → chunk-3VRHZPW6.js} +3 -3
  18. package/dist/chunk-3VRHZPW6.js.map +1 -0
  19. package/dist/{chunk-KRENXLKC.js → chunk-4HNTMD2U.js} +6 -6
  20. package/dist/{chunk-KRENXLKC.js.map → chunk-4HNTMD2U.js.map} +1 -1
  21. package/dist/{chunk-U27GHP5Z.js → chunk-4MDQXCMY.js} +3 -3
  22. package/dist/chunk-4MDQXCMY.js.map +1 -0
  23. package/dist/{chunk-KCEFPJZT.js → chunk-5TA6AMTY.js} +3 -3
  24. package/dist/chunk-5TA6AMTY.js.map +1 -0
  25. package/dist/{chunk-SCZXIVL5.js → chunk-6AZLLBX6.js} +3 -3
  26. package/dist/chunk-6AZLLBX6.js.map +1 -0
  27. package/dist/{chunk-ZJRXBOM2.js → chunk-6GP26S4R.js} +3 -3
  28. package/dist/{chunk-ZJRXBOM2.js.map → chunk-6GP26S4R.js.map} +1 -1
  29. package/dist/{chunk-WL6J5ZVH.js → chunk-6H7AHQ5J.js} +3 -3
  30. package/dist/{chunk-WL6J5ZVH.js.map → chunk-6H7AHQ5J.js.map} +1 -1
  31. package/dist/{chunk-Y33BGBHR.js → chunk-6ZID2UNI.js} +3 -3
  32. package/dist/chunk-6ZID2UNI.js.map +1 -0
  33. package/dist/chunk-7FJ7LRSV.js +3 -0
  34. package/dist/chunk-7FJ7LRSV.js.map +1 -0
  35. package/dist/{chunk-HZOLDTOT.js → chunk-7HSANE2V.js} +3 -3
  36. package/dist/chunk-7HSANE2V.js.map +1 -0
  37. package/dist/{chunk-KSALAAWD.js → chunk-7QFXFNTZ.js} +3 -3
  38. package/dist/chunk-7QFXFNTZ.js.map +1 -0
  39. package/dist/{chunk-EZVWNHDF.js → chunk-7ZSICZXA.js} +4 -4
  40. package/dist/{chunk-EZVWNHDF.js.map → chunk-7ZSICZXA.js.map} +1 -1
  41. package/dist/{chunk-M3U2TKWS.js → chunk-A3L7MI2Y.js} +7 -7
  42. package/dist/{chunk-M3U2TKWS.js.map → chunk-A3L7MI2Y.js.map} +1 -1
  43. package/dist/{chunk-HCSVANPX.js → chunk-AHHT4FZS.js} +4 -4
  44. package/dist/{chunk-HCSVANPX.js.map → chunk-AHHT4FZS.js.map} +1 -1
  45. package/dist/{chunk-DO4M3OVV.js → chunk-CRZ5YYB7.js} +5 -5
  46. package/dist/chunk-CRZ5YYB7.js.map +1 -0
  47. package/dist/{chunk-RXCQLSWL.js → chunk-E7MMJTJY.js} +3 -3
  48. package/dist/{chunk-RXCQLSWL.js.map → chunk-E7MMJTJY.js.map} +1 -1
  49. package/dist/{chunk-CMOTOQK7.js → chunk-FQZHCNV7.js} +3 -3
  50. package/dist/{chunk-CMOTOQK7.js.map → chunk-FQZHCNV7.js.map} +1 -1
  51. package/dist/{chunk-EMX27A3U.js → chunk-FVWCKX3O.js} +3 -3
  52. package/dist/{chunk-EMX27A3U.js.map → chunk-FVWCKX3O.js.map} +1 -1
  53. package/dist/{chunk-SDPIL7HA.js → chunk-GD4HLQDQ.js} +3 -3
  54. package/dist/chunk-GD4HLQDQ.js.map +1 -0
  55. package/dist/{chunk-AUCSNGST.js → chunk-GDPUWRNH.js} +3 -3
  56. package/dist/{chunk-AUCSNGST.js.map → chunk-GDPUWRNH.js.map} +1 -1
  57. package/dist/{chunk-HXFGULDU.js → chunk-HCVRYT4T.js} +3 -3
  58. package/dist/chunk-HCVRYT4T.js.map +1 -0
  59. package/dist/{chunk-H6VG367Y.js → chunk-ICNOGTXR.js} +3 -3
  60. package/dist/{chunk-H6VG367Y.js.map → chunk-ICNOGTXR.js.map} +1 -1
  61. package/dist/{chunk-GR65GV2N.js → chunk-IWRXFK4K.js} +3 -3
  62. package/dist/chunk-IWRXFK4K.js.map +1 -0
  63. package/dist/chunk-JB64LF6D.js +3 -0
  64. package/dist/chunk-JB64LF6D.js.map +1 -0
  65. package/dist/{chunk-M56K3ZKY.js → chunk-JK6OQLKZ.js} +3 -3
  66. package/dist/chunk-JK6OQLKZ.js.map +1 -0
  67. package/dist/{chunk-HIAYFCBX.js → chunk-JRQLKRNY.js} +3 -3
  68. package/dist/{chunk-HIAYFCBX.js.map → chunk-JRQLKRNY.js.map} +1 -1
  69. package/dist/{chunk-SIEPZ5LD.js → chunk-K2CCV6UB.js} +3 -3
  70. package/dist/chunk-K2CCV6UB.js.map +1 -0
  71. package/dist/{chunk-YW7VSQJE.js → chunk-KLX547KZ.js} +3 -3
  72. package/dist/chunk-KLX547KZ.js.map +1 -0
  73. package/dist/{chunk-HBFS7W6V.js → chunk-KNJTTOAD.js} +3 -3
  74. package/dist/{chunk-HBFS7W6V.js.map → chunk-KNJTTOAD.js.map} +1 -1
  75. package/dist/{chunk-LBMPZDD5.js → chunk-KPE5CRIS.js} +3 -3
  76. package/dist/chunk-KPE5CRIS.js.map +1 -0
  77. package/dist/chunk-KVOKG5YR.js +56 -0
  78. package/dist/chunk-KVOKG5YR.js.map +1 -0
  79. package/dist/chunk-L6XU524P.js +74 -0
  80. package/dist/chunk-L6XU524P.js.map +1 -0
  81. package/dist/{chunk-3TSOMZJO.js → chunk-LALM2LHM.js} +3 -3
  82. package/dist/chunk-LALM2LHM.js.map +1 -0
  83. package/dist/{chunk-46SWH3RS.js → chunk-LCBAI3A3.js} +3 -3
  84. package/dist/{chunk-46SWH3RS.js.map → chunk-LCBAI3A3.js.map} +1 -1
  85. package/dist/{chunk-E3E64CT4.js → chunk-LM5ZJFLA.js} +4 -4
  86. package/dist/{chunk-E3E64CT4.js.map → chunk-LM5ZJFLA.js.map} +1 -1
  87. package/dist/chunk-LYTC7UMN.js +3 -0
  88. package/dist/chunk-LYTC7UMN.js.map +1 -0
  89. package/dist/chunk-N2F3ZG2S.js +3 -0
  90. package/dist/chunk-N2F3ZG2S.js.map +1 -0
  91. package/dist/{chunk-K2XIXOMO.js → chunk-NEMGLKDF.js} +3 -3
  92. package/dist/chunk-NEMGLKDF.js.map +1 -0
  93. package/dist/{chunk-I4DM7SVV.js → chunk-OC5O5LV4.js} +3 -3
  94. package/dist/chunk-OC5O5LV4.js.map +1 -0
  95. package/dist/{chunk-ILYZQBBN.js → chunk-OM4W6UQG.js} +3 -3
  96. package/dist/{chunk-ILYZQBBN.js.map → chunk-OM4W6UQG.js.map} +1 -1
  97. package/dist/chunk-PJRWKWDP.js +48 -0
  98. package/dist/chunk-PJRWKWDP.js.map +1 -0
  99. package/dist/{chunk-T5AHJXEY.js → chunk-PS3MV5G7.js} +4 -4
  100. package/dist/{chunk-T5AHJXEY.js.map → chunk-PS3MV5G7.js.map} +1 -1
  101. package/dist/chunk-QRJ4WJKZ.js +105 -0
  102. package/dist/chunk-QRJ4WJKZ.js.map +1 -0
  103. package/dist/{chunk-XMZVSCCY.js → chunk-RPU3FY62.js} +6 -6
  104. package/dist/{chunk-XMZVSCCY.js.map → chunk-RPU3FY62.js.map} +1 -1
  105. package/dist/{chunk-TBLO2A4C.js → chunk-SDLHXYPS.js} +3 -3
  106. package/dist/chunk-SDLHXYPS.js.map +1 -0
  107. package/dist/{chunk-AIBZJWUG.js → chunk-SYD6ELLP.js} +7 -7
  108. package/dist/{chunk-AIBZJWUG.js.map → chunk-SYD6ELLP.js.map} +1 -1
  109. package/dist/{chunk-E6WZOLWX.js → chunk-T2TJG24M.js} +3 -3
  110. package/dist/chunk-T2TJG24M.js.map +1 -0
  111. package/dist/{chunk-NE5CT5LH.js → chunk-TDBDX5NV.js} +4 -4
  112. package/dist/chunk-TDBDX5NV.js.map +1 -0
  113. package/dist/{chunk-JGZGZIGR.js → chunk-TK67WF35.js} +3 -3
  114. package/dist/{chunk-JGZGZIGR.js.map → chunk-TK67WF35.js.map} +1 -1
  115. package/dist/{chunk-C2P3ZSEY.js → chunk-U6TIZ4VM.js} +3 -3
  116. package/dist/chunk-U6TIZ4VM.js.map +1 -0
  117. package/dist/{chunk-C5JGLWV6.js → chunk-UAIVLCPV.js} +3 -3
  118. package/dist/{chunk-C5JGLWV6.js.map → chunk-UAIVLCPV.js.map} +1 -1
  119. package/dist/{chunk-6RHG4VOA.js → chunk-ULGVGD73.js} +3 -3
  120. package/dist/chunk-ULGVGD73.js.map +1 -0
  121. package/dist/{chunk-7AACZB3Q.js → chunk-ULVUD6RZ.js} +3 -3
  122. package/dist/{chunk-7AACZB3Q.js.map → chunk-ULVUD6RZ.js.map} +1 -1
  123. package/dist/{chunk-IGFCIAF3.js → chunk-US5LXJTO.js} +3 -3
  124. package/dist/chunk-US5LXJTO.js.map +1 -0
  125. package/dist/{chunk-WUK6APAX.js → chunk-VHHYWRLE.js} +5 -5
  126. package/dist/chunk-VHHYWRLE.js.map +1 -0
  127. package/dist/{chunk-C6YZNBOO.js → chunk-VHNPIT56.js} +4 -4
  128. package/dist/{chunk-C6YZNBOO.js.map → chunk-VHNPIT56.js.map} +1 -1
  129. package/dist/{chunk-QTH4LSO6.js → chunk-W4KJCBMW.js} +3 -3
  130. package/dist/chunk-W4KJCBMW.js.map +1 -0
  131. package/dist/{chunk-FTR4NEFA.js → chunk-WAIOC22O.js} +3 -3
  132. package/dist/chunk-WAIOC22O.js.map +1 -0
  133. package/dist/{chunk-U2SCIVKI.js → chunk-WLDNN4UF.js} +3 -3
  134. package/dist/chunk-WLDNN4UF.js.map +1 -0
  135. package/dist/{chunk-5Z3ZM7PS.js → chunk-WNG6RPIA.js} +3 -3
  136. package/dist/{chunk-5Z3ZM7PS.js.map → chunk-WNG6RPIA.js.map} +1 -1
  137. package/dist/{chunk-SXCNJQ7S.js → chunk-WXD7XZWE.js} +4 -4
  138. package/dist/{chunk-SXCNJQ7S.js.map → chunk-WXD7XZWE.js.map} +1 -1
  139. package/dist/{chunk-JDPJQSZV.js → chunk-WZTN5NHK.js} +4 -4
  140. package/dist/chunk-WZTN5NHK.js.map +1 -0
  141. package/dist/chunk-X2ZI3JOX.js +82 -0
  142. package/dist/chunk-X2ZI3JOX.js.map +1 -0
  143. package/dist/{chunk-XXTQV27H.js → chunk-XKMHNJCL.js} +5 -5
  144. package/dist/chunk-XKMHNJCL.js.map +1 -0
  145. package/dist/{chunk-6ANVMIR5.js → chunk-XNSKKZB6.js} +3 -3
  146. package/dist/chunk-XNSKKZB6.js.map +1 -0
  147. package/dist/{chunk-QM54AVC7.js → chunk-Y5M7UK7R.js} +3 -3
  148. package/dist/chunk-Y5M7UK7R.js.map +1 -0
  149. package/dist/{chunk-3VAYZAEF.js → chunk-YHCDOHJL.js} +7 -7
  150. package/dist/{chunk-3VAYZAEF.js.map → chunk-YHCDOHJL.js.map} +1 -1
  151. package/dist/{chunk-JDGM46MB.js → chunk-YIOXPV2N.js} +3 -3
  152. package/dist/{chunk-JDGM46MB.js.map → chunk-YIOXPV2N.js.map} +1 -1
  153. package/dist/{chunk-XDJ2E6KQ.js → chunk-YQXVNJP5.js} +3 -3
  154. package/dist/chunk-YQXVNJP5.js.map +1 -0
  155. package/dist/composites/chat-thread.js +14 -12
  156. package/dist/hooks/use-intersection.js +1 -1
  157. package/dist/hooks/use-reduced-motion.js +1 -1
  158. package/dist/icons/index.d.ts +1 -1
  159. package/dist/icons/index.js +3 -2
  160. package/dist/index.js +57 -53
  161. package/dist/layout/container.js +3 -2
  162. package/dist/layout/grid.js +3 -2
  163. package/dist/layout/stack.js +3 -2
  164. package/dist/lib/utils.js +2 -1
  165. package/dist/logos/fluencypass.js +3 -2
  166. package/dist/logos/product.js +3 -3
  167. package/dist/marketing/buttons/cta-brand.d.ts +39 -0
  168. package/dist/marketing/buttons/cta-brand.js +8 -0
  169. package/dist/marketing/buttons/cta-brand.js.map +1 -0
  170. package/dist/marketing/buttons/index.d.ts +5 -0
  171. package/dist/marketing/buttons/index.js +9 -0
  172. package/dist/marketing/buttons/index.js.map +1 -0
  173. package/dist/marketing/buttons/link-brand.d.ts +39 -0
  174. package/dist/marketing/buttons/link-brand.js +6 -0
  175. package/dist/marketing/buttons/link-brand.js.map +1 -0
  176. package/dist/marketing/effects/card-dark-glow.js +2 -2
  177. package/dist/marketing/effects/circle-glow.js +2 -2
  178. package/dist/marketing/effects/hand-underline.d.ts +33 -0
  179. package/dist/marketing/effects/hand-underline.js +8 -0
  180. package/dist/marketing/effects/hand-underline.js.map +1 -0
  181. package/dist/marketing/effects/index.d.ts +3 -0
  182. package/dist/marketing/effects/index.js +9 -4
  183. package/dist/marketing/effects/magnetic-button.d.ts +36 -0
  184. package/dist/marketing/effects/magnetic-button.js +7 -0
  185. package/dist/marketing/effects/magnetic-button.js.map +1 -0
  186. package/dist/marketing/effects/marquee.js +2 -2
  187. package/dist/marketing/effects/rotating-word.d.ts +40 -0
  188. package/dist/marketing/effects/rotating-word.js +7 -0
  189. package/dist/marketing/effects/rotating-word.js.map +1 -0
  190. package/dist/marketing/layout/index.d.ts +36 -2
  191. package/dist/marketing/layout/index.js +2 -2
  192. package/dist/marketing/layout/section.d.ts +2 -36
  193. package/dist/marketing/layout/section.js +2 -2
  194. package/dist/marketing/motion/animated-number.js +4 -4
  195. package/dist/marketing/motion/index.js +7 -7
  196. package/dist/marketing/motion/reveal-on-scroll.js +4 -4
  197. package/dist/marketing/motion/smooth-anchor.js +1 -1
  198. package/dist/marketing/motion/stagger-reveal.js +4 -4
  199. package/dist/marketing/typography/hero-heading.js +2 -2
  200. package/dist/marketing/typography/index.js +5 -5
  201. package/dist/marketing/typography/section-eyebrow.js +2 -2
  202. package/dist/marketing/typography/section-heading.js +2 -2
  203. package/dist/marketing/typography/section-subtitle.js +2 -2
  204. package/dist/styles/tokens.css +182 -8
  205. package/dist/ui/accordion.js +2 -2
  206. package/dist/ui/alert-dialog.js +4 -3
  207. package/dist/ui/alert.js +6 -4
  208. package/dist/ui/audio-player.js +6 -4
  209. package/dist/ui/avatar.js +2 -2
  210. package/dist/ui/badge.js +2 -2
  211. package/dist/ui/button.js +2 -2
  212. package/dist/ui/chat-bubble.js +4 -3
  213. package/dist/ui/chat-message.js +10 -8
  214. package/dist/ui/chat-panel.js +9 -7
  215. package/dist/ui/checkbox.js +2 -2
  216. package/dist/ui/circular-progress.js +3 -2
  217. package/dist/ui/dialog.js +4 -3
  218. package/dist/ui/drawer.js +3 -2
  219. package/dist/ui/dropdown-menu.js +3 -2
  220. package/dist/ui/editor.js +8 -6
  221. package/dist/ui/empty.js +2 -2
  222. package/dist/ui/fab.js +3 -2
  223. package/dist/ui/file-card.js +3 -2
  224. package/dist/ui/input.js +2 -2
  225. package/dist/ui/label.js +2 -2
  226. package/dist/ui/like-dislike.js +8 -6
  227. package/dist/ui/live-waiting.js +7 -5
  228. package/dist/ui/message-bar.js +3 -2
  229. package/dist/ui/message-rating.js +3 -2
  230. package/dist/ui/popover.js +3 -2
  231. package/dist/ui/progress-dot.js +3 -2
  232. package/dist/ui/progress-stage.js +3 -2
  233. package/dist/ui/progress.js +3 -2
  234. package/dist/ui/radio-group.js +2 -2
  235. package/dist/ui/resizable.js +3 -2
  236. package/dist/ui/scroll-area.js +2 -2
  237. package/dist/ui/select.js +2 -2
  238. package/dist/ui/sheet.js +2 -2
  239. package/dist/ui/skeleton.js +2 -2
  240. package/dist/ui/slider.js +3 -2
  241. package/dist/ui/sonner.js +6 -4
  242. package/dist/ui/spinner.js +4 -4
  243. package/dist/ui/switch.js +2 -2
  244. package/dist/ui/tabs.js +2 -2
  245. package/dist/ui/textarea.js +2 -2
  246. package/dist/ui/toggle.js +3 -2
  247. package/dist/ui/tooltip.js +2 -2
  248. package/dist/ui/video-player.js +6 -4
  249. package/package.json +14 -21
  250. package/README.md +0 -85
  251. package/dist/chunk-3TSOMZJO.js.map +0 -1
  252. package/dist/chunk-6ANVMIR5.js.map +0 -1
  253. package/dist/chunk-6RHG4VOA.js.map +0 -1
  254. package/dist/chunk-C2P3ZSEY.js.map +0 -1
  255. package/dist/chunk-DO4M3OVV.js.map +0 -1
  256. package/dist/chunk-E6WZOLWX.js.map +0 -1
  257. package/dist/chunk-FTR4NEFA.js.map +0 -1
  258. package/dist/chunk-GR65GV2N.js.map +0 -1
  259. package/dist/chunk-HXFGULDU.js.map +0 -1
  260. package/dist/chunk-HZOLDTOT.js.map +0 -1
  261. package/dist/chunk-I4DM7SVV.js.map +0 -1
  262. package/dist/chunk-IGFCIAF3.js.map +0 -1
  263. package/dist/chunk-J3DGYZGK.js.map +0 -1
  264. package/dist/chunk-JDPJQSZV.js.map +0 -1
  265. package/dist/chunk-K2XIXOMO.js.map +0 -1
  266. package/dist/chunk-KCEFPJZT.js.map +0 -1
  267. package/dist/chunk-KSALAAWD.js.map +0 -1
  268. package/dist/chunk-LBMPZDD5.js.map +0 -1
  269. package/dist/chunk-LC55JPI4.js.map +0 -1
  270. package/dist/chunk-M56K3ZKY.js.map +0 -1
  271. package/dist/chunk-NE5CT5LH.js.map +0 -1
  272. package/dist/chunk-OHRYR7PN.js.map +0 -1
  273. package/dist/chunk-QM54AVC7.js.map +0 -1
  274. package/dist/chunk-QTH4LSO6.js.map +0 -1
  275. package/dist/chunk-SCZXIVL5.js.map +0 -1
  276. package/dist/chunk-SDPIL7HA.js.map +0 -1
  277. package/dist/chunk-SIEPZ5LD.js.map +0 -1
  278. package/dist/chunk-T7EIAVSF.js.map +0 -1
  279. package/dist/chunk-TBLO2A4C.js.map +0 -1
  280. package/dist/chunk-U27GHP5Z.js.map +0 -1
  281. package/dist/chunk-U2SCIVKI.js.map +0 -1
  282. package/dist/chunk-WMOGNJWP.js.map +0 -1
  283. package/dist/chunk-WUK6APAX.js.map +0 -1
  284. package/dist/chunk-XDJ2E6KQ.js.map +0 -1
  285. package/dist/chunk-XXTQV27H.js.map +0 -1
  286. package/dist/chunk-Y33BGBHR.js.map +0 -1
  287. package/dist/chunk-YW7VSQJE.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../core/src/components/ui/textarea.tsx"],"names":[],"mappings":";;;;;AAWA,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EACrB,CAAC,IAAwE,GAAA,KAAQ;AAAhF,IAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAAW,YAAA,GAAe,SAAA,EAAW,OAAA,GAAU,SAAA,EAZpD,GAYG,EAAA,EAA+D,KAAA,GAAA,SAAA,CAA/D,EAAA,EAA+D,CAA7D,WAAA,EAAW,cAAA,EAA0B,SAAA,CAAA,CAAA;AACtC,IAAA,uBACE,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,UAAA;AAAA,QACV,WAAA,EAAW,YAAA;AAAA,QACX,cAAA,EAAc,OAAA;AAAA,QACd,SAAA,EAAW,EAAA;AAAA;AAAA,UAET,0SAAA;AAAA;AAAA,UAEA,YAAY,SAAA,IAAa,uHAAA;AAAA,UACzB,YAAY,SAAA,IAAa,mCAAA;AAAA,UACzB,YAAY,SAAA,IAAa,uGAAA;AAAA;AAAA,UAEzB,YAAY,QAAA,IAAY,6CAAA;AAAA,UACxB,YAAY,QAAA,IAAY,sCAAA;AAAA,UACxB,YAAY,QAAA,IAAY,0GAAA;AAAA;AAAA,UAExB,mLAAA;AAAA;AAAA,UAEA,UAAA;AAAA;AAAA,UAEA,iBAAiB,IAAA,IAAQ,gCAAA;AAAA,UACzB,iBAAiB,SAAA,IAAa,gCAAA;AAAA,UAC9B,iBAAiB,IAAA,IAAQ,mCAAA;AAAA,UACzB;AAAA;AACF,OAAA,EACI,KAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-KPE5CRIS.js","sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@core/lib/utils\"\n\nexport interface TextareaProps extends React.ComponentProps<\"textarea\"> {\n /** Tamanho do textarea: sm (min-h 60px), default (min-h 80px), lg (min-h 120px) */\n textareaSize?: \"sm\" | \"default\" | \"lg\"\n /** Variante visual: outline (borda) ou filled (fundo preenchido) */\n variant?: \"outline\" | \"filled\"\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, textareaSize = \"default\", variant = \"outline\", ...props }, ref) => {\n return (\n <textarea\n ref={ref}\n data-slot=\"textarea\"\n data-size={textareaSize}\n data-variant={variant}\n className={cn(\n // Base\n \"w-full min-w-0 rounded-lg text-neutral-foreground transition-[color,border-color,box-shadow,background-color] outline-none selection:bg-primary selection:text-primary-foreground placeholder:text-neutral-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n // Variant: outline\n variant === \"outline\" && \"border border-neutral-border bg-transparent shadow-xs dark:border-neutral-border dark:bg-transparent dark:shadow-none\",\n variant === \"outline\" && \"hover:border-ring hover:bg-ring/5\",\n variant === \"outline\" && \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:bg-ring/5\",\n // Variant: filled (mesmos tokens do Button outline: accent light, input dark)\n variant === \"filled\" && \"border border-transparent bg-neutral-accent\",\n variant === \"filled\" && \"hover:border-ring hover:bg-secondary\",\n variant === \"filled\" && \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:bg-secondary\",\n // Error (sempre visível, ambas variantes)\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:hover:border-destructive dark:aria-invalid:border-destructive dark:aria-invalid:ring-destructive/40\",\n // Resize\n \"resize-y\",\n // Sizes\n textareaSize === \"sm\" && \"min-h-[60px] px-3 py-2 text-sm\",\n textareaSize === \"default\" && \"min-h-[80px] px-4 py-2 text-sm\",\n textareaSize === \"lg\" && \"min-h-[120px] px-4 py-3 text-base\",\n className\n )}\n {...props}\n />\n )\n }\n)\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n"]}
@@ -0,0 +1,56 @@
1
+ import { MagneticButton } from './chunk-QRJ4WJKZ.js';
2
+ import { cn } from './chunk-W4KJCBMW.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-KVOKG5YR.js.map
56
+ //# sourceMappingURL=chunk-KVOKG5YR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../pulse/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-KVOKG5YR.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@core/lib/utils\"\nimport { MagneticButton } from \"@pulse/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"]}
@@ -0,0 +1,74 @@
1
+ import { useReducedMotion } from './chunk-2XFXNZNW.js';
2
+ import { useIntersection } from './chunk-2MBHI4VU.js';
3
+ import { cn } from './chunk-W4KJCBMW.js';
4
+ import { __objRest, __spreadProps, __spreadValues } from './chunk-2NMEKWO5.js';
5
+ import * as React from 'react';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var PATH_LENGTH = 240;
9
+ var STROKE_WIDTH = 2.2;
10
+ var SVG_PATH = "M 2 9 C 30 4, 70 12, 110 7 S 180 4, 198 8";
11
+ var SVG_VIEWBOX = "0 0 200 14";
12
+ var HandUnderline = React.forwardRef(
13
+ function HandUnderline2(_a, forwardedRef) {
14
+ var _b = _a, { delay = 600, duration = 780, className, children } = _b, props = __objRest(_b, ["delay", "duration", "className", "children"]);
15
+ const reduced = useReducedMotion();
16
+ const { ref, isVisible } = useIntersection({
17
+ threshold: 0.6,
18
+ rootMargin: "0px",
19
+ startVisible: reduced
20
+ });
21
+ const [draw, setDraw] = React.useState(reduced);
22
+ React.useImperativeHandle(forwardedRef, () => ref.current, [ref]);
23
+ React.useEffect(() => {
24
+ if (!isVisible || draw) return;
25
+ if (reduced) {
26
+ setDraw(true);
27
+ return;
28
+ }
29
+ const id = window.setTimeout(() => setDraw(true), delay);
30
+ return () => window.clearTimeout(id);
31
+ }, [isVisible, draw, delay, reduced]);
32
+ return /* @__PURE__ */ jsxs(
33
+ "span",
34
+ __spreadProps(__spreadValues({
35
+ ref,
36
+ "data-slot": "hand-underline",
37
+ className: cn("relative inline-block whitespace-nowrap", className)
38
+ }, props), {
39
+ children: [
40
+ children,
41
+ /* @__PURE__ */ jsx(
42
+ "svg",
43
+ {
44
+ "aria-hidden": "true",
45
+ viewBox: SVG_VIEWBOX,
46
+ preserveAspectRatio: "none",
47
+ className: "absolute left-0 right-0 -bottom-1 w-full pointer-events-none",
48
+ style: { height: "0.32em" },
49
+ children: /* @__PURE__ */ jsx(
50
+ "path",
51
+ {
52
+ d: SVG_PATH,
53
+ fill: "none",
54
+ stroke: "currentColor",
55
+ strokeWidth: STROKE_WIDTH,
56
+ strokeLinecap: "round",
57
+ style: {
58
+ strokeDasharray: PATH_LENGTH,
59
+ strokeDashoffset: draw ? 0 : PATH_LENGTH,
60
+ transition: reduced ? "none" : `stroke-dashoffset ${duration}ms cubic-bezier(0.22, 1, 0.36, 1)`
61
+ }
62
+ }
63
+ )
64
+ }
65
+ )
66
+ ]
67
+ })
68
+ );
69
+ }
70
+ );
71
+
72
+ export { HandUnderline };
73
+ //# sourceMappingURL=chunk-L6XU524P.js.map
74
+ //# sourceMappingURL=chunk-L6XU524P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../pulse/src/components/marketing/effects/hand-underline.tsx"],"names":["HandUnderline"],"mappings":";;;;;;;AAiBA,IAAM,WAAA,GAAc,GAAA;AACpB,IAAM,YAAA,GAAe,GAAA;AACrB,IAAM,QAAA,GAAW,2CAAA;AACjB,IAAM,WAAA,GAAc,YAAA;AAuBpB,IAAM,aAAA,GAAsB,KAAA,CAAA,UAAA;AAAA,EAC1B,SAASA,cAAAA,CACP,EAAA,EACA,YAAA,EACA;AAFA,IAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,KAAA,GAAQ,GAAA,EAAK,QAAA,GAAW,GAAA,EAAK,SAAA,EAAW,QAAA,EA7C9C,GA6CI,EAAA,EAAuD,KAAA,GAAA,SAAA,CAAvD,EAAA,EAAuD,CAArD,OAAA,EAAa,YAAgB,WAAA,EAAW,UAAA,CAAA,CAAA;AAG1C,IAAA,MAAM,UAAU,gBAAA,EAAiB;AACjC,IAAA,MAAM,EAAE,GAAA,EAAK,SAAA,EAAU,GAAI,eAAA,CAAiC;AAAA,MAC1D,SAAA,EAAW,GAAA;AAAA,MACX,UAAA,EAAY,KAAA;AAAA,MACZ,YAAA,EAAc;AAAA,KACf,CAAA;AACD,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,OAAO,CAAA;AAG9C,IAAM,0BAAoB,YAAA,EAAc,MAAM,IAAI,OAAA,EAA4B,CAAC,GAAG,CAAC,CAAA;AAEnF,IAAM,gBAAU,MAAM;AACpB,MAAA,IAAI,CAAC,aAAa,IAAA,EAAM;AACxB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,QAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAK,MAAA,CAAO,UAAA,CAAW,MAAM,OAAA,CAAQ,IAAI,GAAG,KAAK,CAAA;AACvD,MAAA,OAAO,MAAM,MAAA,CAAO,YAAA,CAAa,EAAE,CAAA;AAAA,IACrC,GAAG,CAAC,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,OAAO,CAAC,CAAA;AAEpC,IAAA,uBACE,IAAA;AAAA,MAAC,MAAA;AAAA,MAAA,aAAA,CAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,gBAAA;AAAA,QACV,SAAA,EAAW,EAAA,CAAG,yCAAA,EAA2C,SAAS;AAAA,OAAA,EAC9D,KAAA,CAAA,EAJL;AAAA,QAME,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,0BACD,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAY,MAAA;AAAA,cACZ,OAAA,EAAS,WAAA;AAAA,cACT,mBAAA,EAAoB,MAAA;AAAA,cACpB,SAAA,EAAU,8DAAA;AAAA,cACV,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA,EAAS;AAAA,cAE1B,QAAA,kBAAA,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,CAAA,EAAG,QAAA;AAAA,kBACH,IAAA,EAAK,MAAA;AAAA,kBACL,MAAA,EAAO,cAAA;AAAA,kBACP,WAAA,EAAa,YAAA;AAAA,kBACb,aAAA,EAAc,OAAA;AAAA,kBACd,KAAA,EAAO;AAAA,oBACL,eAAA,EAAiB,WAAA;AAAA,oBACjB,gBAAA,EAAkB,OAAO,CAAA,GAAI,WAAA;AAAA,oBAC7B,UAAA,EAAY,OAAA,GACR,MAAA,GACA,CAAA,kBAAA,EAAqB,QAAQ,CAAA,iCAAA;AAAA;AACnC;AAAA;AACF;AAAA;AACF;AAAA,OAAA;AAAA,KACF;AAAA,EAEJ;AACF","file":"chunk-L6XU524P.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@core/lib/utils\"\nimport { useReducedMotion } from \"@pulse/hooks/use-reduced-motion\"\nimport { useIntersection } from \"@pulse/hooks/use-intersection\"\n\nexport interface HandUnderlineProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"children\"> {\n /** Delay em ms entre intersecao no viewport e inicio do draw. Default `600`. */\n delay?: number\n /** Duracao do draw em ms (stroke-dashoffset 240 → 0). Default `780`. */\n duration?: number\n children: React.ReactNode\n}\n\nconst PATH_LENGTH = 240\nconst STROKE_WIDTH = 2.2\nconst SVG_PATH = \"M 2 9 C 30 4, 70 12, 110 7 S 180 4, 198 8\"\nconst SVG_VIEWBOX = \"0 0 200 14\"\n\n/**\n * Wrapper que desenha um underline SVG em curva sutil abaixo do texto, animado\n * via stroke-dasharray quando entra no viewport. Util pra dar enfase em\n * palavras-chave em headings sem usar bold/color.\n *\n * Cor do stroke: `currentColor` — herda do parent. Wrappa com\n * `<span className=\"text-[color:var(--brand-default)]\">` ou outra cor.\n *\n * Acessibilidade:\n * - SVG `aria-hidden` (decorativo).\n * - `prefers-reduced-motion: reduce` — desenha o underline completo direto,\n * sem animar.\n *\n * @example\n * <h2>\n * Acelere o ingles do seu{\" \"}\n * <HandUnderline className=\"text-[color:var(--brand-default)]\">\n * time corporativo\n * </HandUnderline>\n * </h2>\n */\nconst HandUnderline = React.forwardRef<HTMLSpanElement, HandUnderlineProps>(\n function HandUnderline(\n { delay = 600, duration = 780, className, children, ...props },\n forwardedRef\n ) {\n const reduced = useReducedMotion()\n const { ref, isVisible } = useIntersection<HTMLSpanElement>({\n threshold: 0.6,\n rootMargin: \"0px\",\n startVisible: reduced,\n })\n const [draw, setDraw] = React.useState(reduced)\n\n // Combina forwarded ref + ref interno do useIntersection.\n React.useImperativeHandle(forwardedRef, () => ref.current as HTMLSpanElement, [ref])\n\n React.useEffect(() => {\n if (!isVisible || draw) return\n if (reduced) {\n setDraw(true)\n return\n }\n const id = window.setTimeout(() => setDraw(true), delay)\n return () => window.clearTimeout(id)\n }, [isVisible, draw, delay, reduced])\n\n return (\n <span\n ref={ref}\n data-slot=\"hand-underline\"\n className={cn(\"relative inline-block whitespace-nowrap\", className)}\n {...props}\n >\n {children}\n <svg\n aria-hidden=\"true\"\n viewBox={SVG_VIEWBOX}\n preserveAspectRatio=\"none\"\n className=\"absolute left-0 right-0 -bottom-1 w-full pointer-events-none\"\n style={{ height: \"0.32em\" }}\n >\n <path\n d={SVG_PATH}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={STROKE_WIDTH}\n strokeLinecap=\"round\"\n style={{\n strokeDasharray: PATH_LENGTH,\n strokeDashoffset: draw ? 0 : PATH_LENGTH,\n transition: reduced\n ? \"none\"\n : `stroke-dashoffset ${duration}ms cubic-bezier(0.22, 1, 0.36, 1)`,\n }}\n />\n </svg>\n </span>\n )\n }\n)\n\nexport { HandUnderline }\n"]}
@@ -1,4 +1,4 @@
1
- import { cn } from './chunk-QTH4LSO6.js';
1
+ import { cn } from './chunk-W4KJCBMW.js';
2
2
  import { __objRest, __spreadValues } from './chunk-2NMEKWO5.js';
3
3
  import { cva } from 'class-variance-authority';
4
4
  import { Slot } from 'radix-ui';
@@ -58,5 +58,5 @@ function Button(_a) {
58
58
  }
59
59
 
60
60
  export { Button, buttonVariants };
61
- //# sourceMappingURL=chunk-3TSOMZJO.js.map
62
- //# sourceMappingURL=chunk-3TSOMZJO.js.map
61
+ //# sourceMappingURL=chunk-LALM2LHM.js.map
62
+ //# sourceMappingURL=chunk-LALM2LHM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../core/src/components/ui/button.tsx"],"names":[],"mappings":";;;;;;AAMA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,upBAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,wDAAA;AAAA,QACT,WAAA,EACE,oKAAA;AAAA,QACF,OAAA,EACE,uIAAA;AAAA,QACF,SAAA,EACE,8DAAA;AAAA,QACF,KAAA,EACE,mFAAA;AAAA,QACF,IAAA,EAAM;AAAA,OACR;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,oGAAA;AAAA,QACT,EAAA,EAAI,mGAAA;AAAA,QACJ,EAAA,EAAI,qGAAA;AAAA,QACJ,EAAA,EAAI,oGAAA;AAAA,QACJ,IAAA,EAAM,mEAAA;AAAA,QACN,SAAA,EAAW,gEAAA;AAAA,QACX,SAAA,EAAW,kEAAA;AAAA,QACX,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAQA,SAAS,OAAO,EAAA,EAMA;AANA,EAAA,IAAA,EAAA,GAAA,EAAA,EACd;AAAA,IAAA,SAAA;AAAA,IACA,OAAA,GAAU,SAAA;AAAA,IACV,IAAA,GAAO,SAAA;AAAA,IACP,OAAA,GAAU;AAAA,GAlDZ,GA8CgB,EAAA,EAKX,KAAA,GAAA,SAAA,CALW,EAAA,EAKX;AAAA,IAJH,WAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;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,QAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,SAAA,EAAW,CAAC;AAAA,KAAA,EACtD,KAAA;AAAA,GACN;AAEJ","file":"chunk-LALM2LHM.js","sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"@core/lib/utils\"\n\nconst buttonVariants = cva(\n \"relative inline-flex shrink-0 items-center justify-center gap-2 rounded-lg whitespace-nowrap transition-all duration-150 outline-none cursor-pointer active:scale-[0.97] active:brightness-[0.92] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 disabled:active:scale-100 disabled:active:brightness-100 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 after:absolute after:top-1/2 after:left-1/2 after:-translate-x-1/2 after:-translate-y-1/2 after:size-full after:min-h-11 after:min-w-11\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"text-primary hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline active:scale-100 active:brightness-100\",\n },\n size: {\n default: \"h-10 px-4 py-2 button-md has-[>svg]:px-3 [&_svg:not([class*='size-'])]:size-6 [&_svg]:stroke-[1.5]\",\n xs: \"h-6 px-2 py-1 button-sm has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3 [&_svg]:stroke-[1]\",\n sm: \"h-8 px-3 py-2 button-sm has-[>svg]:px-2.5 [&_svg:not([class*='size-'])]:size-4 [&_svg]:stroke-[1.2]\",\n lg: \"h-12 px-6 py-3 button-lg has-[>svg]:px-4 [&_svg:not([class*='size-'])]:size-6 [&_svg]:stroke-[1.5]\",\n icon: \"size-10 [&_svg:not([class*='size-'])]:size-6 [&_svg]:stroke-[1.5]\",\n \"icon-xs\": \"size-6 [&_svg:not([class*='size-'])]:size-3 [&_svg]:stroke-[1]\",\n \"icon-sm\": \"size-8 [&_svg:not([class*='size-'])]:size-4 [&_svg]:stroke-[1.2]\",\n \"icon-lg\": \"size-12 [&_svg:not([class*='size-'])]:size-6 [&_svg]:stroke-[1.5]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ComponentProps<\"button\">,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: ButtonProps) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n"]}
@@ -1,4 +1,4 @@
1
- import { cn } from './chunk-QTH4LSO6.js';
1
+ import { cn } from './chunk-W4KJCBMW.js';
2
2
  import { __objRest, __spreadValues } from './chunk-2NMEKWO5.js';
3
3
  import { Popover as Popover$1 } from 'radix-ui';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -74,5 +74,5 @@ function PopoverDescription(_a) {
74
74
  }
75
75
 
76
76
  export { Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger };
77
- //# sourceMappingURL=chunk-46SWH3RS.js.map
78
- //# sourceMappingURL=chunk-46SWH3RS.js.map
77
+ //# sourceMappingURL=chunk-LCBAI3A3.js.map
78
+ //# sourceMappingURL=chunk-LCBAI3A3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/popover.tsx"],"names":["PopoverPrimitive"],"mappings":";;;;;AAOA,SAAS,QAAQ,EAAA,EAEsC;AAFtC,EAAA,IACZ,kBADY,EAAA,EACZ,EAAA,CAAA;AAEH,EAAA,2BAAQA,SAAA,CAAiB,IAAA,EAAjB,cAAA,CAAA,EAAsB,WAAA,EAAU,aAAc,KAAA,CAAO,CAAA;AAC/D;AAEA,SAAS,eAAe,EAAA,EAEkC;AAFlC,EAAA,IACnB,kBADmB,EAAA,EACnB,EAAA,CAAA;AAEH,EAAA,2BAAQA,SAAA,CAAiB,OAAA,EAAjB,cAAA,CAAA,EAAyB,WAAA,EAAU,qBAAsB,KAAA,CAAO,CAAA;AAC1E;AAEA,SAAS,eAAe,EAAA,EAKkC;AALlC,EAAA,IAAA,EAAA,GAAA,EAAA,EACtB;AAAA,IAAA,SAAA;AAAA,IACA,KAAA,GAAQ,QAAA;AAAA,IACR,UAAA,GAAa;AAAA,GAtBf,GAmBwB,EAAA,EAInB,KAAA,GAAA,SAAA,CAJmB,EAAA,EAInB;AAAA,IAHH,WAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,uBACE,GAAA,CAACA,SAAA,CAAiB,MAAA,EAAjB,EACC,QAAA,kBAAA,GAAA;AAAA,IAACA,SAAA,CAAiB,OAAA;AAAA,IAAjB,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,geAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN,EACF,CAAA;AAEJ;AAEA,SAAS,cAAc,EAAA,EAEkC;AAFlC,EAAA,IAClB,kBADkB,EAAA,EAClB,EAAA,CAAA;AAEH,EAAA,2BAAQA,SAAA,CAAiB,MAAA,EAAjB,cAAA,CAAA,EAAwB,WAAA,EAAU,oBAAqB,KAAA,CAAO,CAAA;AACxE;AAEA,SAAS,cAAc,EAAA,EAAsD;AAAtD,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EA/CzB,GA+CuB,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AACvB,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,SAAS;AAAA,KAAA,EAClD,KAAA;AAAA,GACN;AAEJ;AAEA,SAAS,aAAa,EAAA,EAAqD;AAArD,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAzDxB,GAyDsB,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AACtB,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,aAAA,EAAe,SAAS;AAAA,KAAA,EAClC,KAAA;AAAA,GACN;AAEJ;AAEA,SAAS,mBAAmB,EAAA,EAGE;AAHF,EAAA,IAAA,EAAA,GAAA,EAAA,EAC1B;AAAA,IAAA;AAAA,GApEF,GAmE4B,EAAA,EAEvB,KAAA,GAAA,SAAA,CAFuB,EAAA,EAEvB;AAAA,IADH;AAAA,GAAA,CAAA;AAGA,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS;AAAA,KAAA,EAC5C,KAAA;AAAA,GACN;AAEJ","file":"chunk-46SWH3RS.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <div\n data-slot=\"popover-title\"\n className={cn(\"font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n}\n"]}
1
+ {"version":3,"sources":["../src/components/ui/popover.tsx"],"names":["PopoverPrimitive"],"mappings":";;;;;AAOA,SAAS,QAAQ,EAAA,EAEsC;AAFtC,EAAA,IACZ,kBADY,EAAA,EACZ,EAAA,CAAA;AAEH,EAAA,2BAAQA,SAAA,CAAiB,IAAA,EAAjB,cAAA,CAAA,EAAsB,WAAA,EAAU,aAAc,KAAA,CAAO,CAAA;AAC/D;AAEA,SAAS,eAAe,EAAA,EAEkC;AAFlC,EAAA,IACnB,kBADmB,EAAA,EACnB,EAAA,CAAA;AAEH,EAAA,2BAAQA,SAAA,CAAiB,OAAA,EAAjB,cAAA,CAAA,EAAyB,WAAA,EAAU,qBAAsB,KAAA,CAAO,CAAA;AAC1E;AAEA,SAAS,eAAe,EAAA,EAKkC;AALlC,EAAA,IAAA,EAAA,GAAA,EAAA,EACtB;AAAA,IAAA,SAAA;AAAA,IACA,KAAA,GAAQ,QAAA;AAAA,IACR,UAAA,GAAa;AAAA,GAtBf,GAmBwB,EAAA,EAInB,KAAA,GAAA,SAAA,CAJmB,EAAA,EAInB;AAAA,IAHH,WAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,uBACE,GAAA,CAACA,SAAA,CAAiB,MAAA,EAAjB,EACC,QAAA,kBAAA,GAAA;AAAA,IAACA,SAAA,CAAiB,OAAA;AAAA,IAAjB,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,geAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN,EACF,CAAA;AAEJ;AAEA,SAAS,cAAc,EAAA,EAEkC;AAFlC,EAAA,IAClB,kBADkB,EAAA,EAClB,EAAA,CAAA;AAEH,EAAA,2BAAQA,SAAA,CAAiB,MAAA,EAAjB,cAAA,CAAA,EAAwB,WAAA,EAAU,oBAAqB,KAAA,CAAO,CAAA;AACxE;AAEA,SAAS,cAAc,EAAA,EAAsD;AAAtD,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EA/CzB,GA+CuB,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AACvB,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,SAAS;AAAA,KAAA,EAClD,KAAA;AAAA,GACN;AAEJ;AAEA,SAAS,aAAa,EAAA,EAAqD;AAArD,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAzDxB,GAyDsB,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AACtB,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,aAAA,EAAe,SAAS;AAAA,KAAA,EAClC,KAAA;AAAA,GACN;AAEJ;AAEA,SAAS,mBAAmB,EAAA,EAGE;AAHF,EAAA,IAAA,EAAA,GAAA,EAAA,EAC1B;AAAA,IAAA;AAAA,GApEF,GAmE4B,EAAA,EAEvB,KAAA,GAAA,SAAA,CAFuB,EAAA,EAEvB;AAAA,IADH;AAAA,GAAA,CAAA;AAGA,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS;AAAA,KAAA,EAC5C,KAAA;AAAA,GACN;AAEJ","file":"chunk-LCBAI3A3.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <div\n data-slot=\"popover-title\"\n className={cn(\"font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { resolveAudioSpeedNormal } from './chunk-EFT7BHN7.js';
2
- import { CycleIcon } from './chunk-IGFCIAF3.js';
3
- import { cn } from './chunk-QTH4LSO6.js';
2
+ import { CycleIcon } from './chunk-US5LXJTO.js';
3
+ import { cn } from './chunk-W4KJCBMW.js';
4
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';
@@ -257,5 +257,5 @@ var AudioPlayer = React.forwardRef(
257
257
  );
258
258
 
259
259
  export { AudioPlayer };
260
- //# sourceMappingURL=chunk-E3E64CT4.js.map
261
- //# sourceMappingURL=chunk-E3E64CT4.js.map
260
+ //# sourceMappingURL=chunk-LM5ZJFLA.js.map
261
+ //# sourceMappingURL=chunk-LM5ZJFLA.js.map
@@ -1 +1 @@
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
+ {"version":3,"sources":["../src/components/ui/audio-player.tsx"],"names":["AudioPlayer"],"mappings":";;;;;;;;;;AAoFA,IAAM,kBAAA,GAA2B,KAAA,CAAA,aAAA,CAAuC,EAAE,WAAA,EAAa,UAAU,CAAA;AACjG,SAAS,cAAA,GAAiB;AACxB,EAAA,OAAa,iBAAW,kBAAkB,CAAA;AAC5C;AAIA,IAAM,eAAA,GACJ,+RAAA;AAGF,IAAM,eAAA,GACJ,8FAAA;AAEF,IAAM,gBAAA,GACJ,6DAAA;AAIF,SAAS,gBAAA,GAAmB;AAC1B,EAAA,MAAM,QAAA,GAAW,cAAc,QAAQ,CAAA;AACvC,EAAA,uBACE,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,eAAA,EACpB,QAAA,EAAA,QAAA,mBACC,GAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,IAAA,EAAM,IAAA,EAAK,IAAA,EAAK,UAAA,EAAU,IAAA,EAAC,WAAW,eAAA,EAAiB,CAAA,mBAExE,GAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK,IAAA,EAAK,UAAA,EAAU,IAAA,EAAC,SAAA,EAAW,eAAA,EAAiB,CAAA,EAE7E,CAAA;AAEJ;AAEA,SAAS,wBAAA,GAA2B;AAClC,EAAA,2BACG,UAAA,EAAA,EAAW,SAAA,EAAW,eAAA,EAAiB,OAAA,EAAS,KAC/C,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,SAAA,EAAW,MAAK,IAAA,EAAK,UAAA,EAAU,IAAA,EAAC,SAAA,EAAW,kBAAkB,CAAA,EAChF,CAAA;AAEJ;AAEA,SAAS,uBAAA,GAA0B;AACjC,EAAA,2BACG,UAAA,EAAA,EAAW,SAAA,EAAW,eAAA,EAAiB,OAAA,EAAS,IAC/C,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,QAAA,EAAU,MAAK,IAAA,EAAK,UAAA,EAAU,IAAA,EAAC,SAAA,EAAW,kBAAkB,CAAA,EAC/E,CAAA;AAEJ;AAEA,SAAS,gBAAA,GAAmB;AAC1B,EAAA,MAAM,MAAA,GAAS,cAAc,QAAQ,CAAA;AACrC,EAAA,MAAM,OAAA,GAAU,cAAc,OAAO,CAAA;AAErC,EAAA,MAAM,OAAO,OAAA,IAAW,MAAA,KAAW,IAAI,OAAA,GAAU,MAAA,GAAS,MAAM,OAAA,GAAU,OAAA;AAE1E,EAAA,uBACE,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,eAAA,EACrB,8BAAC,SAAA,EAAA,EAAU,IAAA,EAAM,IAAA,EAAM,IAAA,EAAK,IAAA,EAAK,UAAA,EAAU,IAAA,EAAC,SAAA,EAAW,iBAAiB,CAAA,EAC1E,CAAA;AAEJ;AAEA,SAAS,kBAAA,GAAqB;AAC5B,EAAA,uBACE,IAAA,CAAC,YAAA,CAAa,IAAA,EAAb,EAAkB,WAAU,+GAAA,EAC3B,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAA,CAAa,KAAA,EAAb,EAAmB,SAAA,EAAU,kGAAA,EAC5B,QAAA,kBAAA,GAAA,CAAC,YAAA,CAAa,SAAA,EAAb,EAAuB,SAAA,EAAU,+GAAA,EAAgH,CAAA,EACpJ,CAAA;AAAA,oBACA,GAAA,CAAC,YAAA,CAAa,KAAA,EAAb,EAAmB,WAAU,2PAAA,EAA4P;AAAA,GAAA,EAC5R,CAAA;AAEJ;AAEA,SAAS,YAAA,GAAe;AACtB,EAAA,uBACE,IAAA,CAAC,UAAA,CAAW,IAAA,EAAX,EAAgB,WAAU,uGAAA,EACzB,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,UAAA,CAAW,KAAA,EAAX,EAAiB,SAAA,EAAU,kGAAA,EAC1B,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,CAAW,QAAA,EAAX,EAAoB,SAAA,EAAU,mIAAA,EAAoI,CAAA;AAAA,sBACnK,GAAA,CAAC,UAAA,CAAW,SAAA,EAAX,EAAqB,WAAU,+GAAA,EAAgH;AAAA,KAAA,EAClJ,CAAA;AAAA,oBACA,GAAA,CAAC,UAAA,CAAW,KAAA,EAAX,EAAiB,WAAU,2PAAA,EAA4P,CAAA;AAAA,oBAGxR,GAAA,CAAC,UAAA,CAAW,OAAA,EAAX,EAAmB,SAAA,EAAU,qHAAA,EAC5B,QAAA,kBAAA,GAAA,CAAC,UAAA,CAAW,KAAA,EAAX,EAAiB,SAAA,EAAU,+GAAA,EAAgH,CAAA,EAC9I;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,gBAAA,GAAmB;AAC1B,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6HAAA,EACb,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAK,SAAA,EAAU,CAAA;AAAA,oBACrB,GAAA,CAAC,UAAK,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,oBACP,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,UAAA,EAAW;AAAA,GAAA,EACxB,CAAA;AAEJ;AAEA,SAAS,iBAAA,GAAoB;AAC3B,EAAA,MAAM,YAAA,GAAe,cAAc,cAAc,CAAA;AACjD,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,IAAI,cAAA,EAAe;AAEzB,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAA,EAAK,IAAA,EAAM,GAAG,IAAA,EAAM,GAAA,EAAK,MAAM,CAAC,CAAA;AAE/C,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,QAC5B,SAAA,EAAW,eAAA;AAAA,QAEV,2BAAiB,CAAA,mBAChB,GAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,OAAO,IAAA,EAAK,IAAA,EAAK,UAAA,EAAU,IAAA,EAAC,WAAW,gBAAA,EAAkB,CAAA,mBAE1E,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,6FAAA,EAA+F,QAAA,EAAA;AAAA,UAAA,YAAA;AAAA,UAAa;AAAA,SAAA,EAAC;AAAA;AAAA,KAEjI;AAAA,IAEC,wBACC,IAAA,CAAA,QAAA,EAAA,EAEE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,SAAI,SAAA,EAAU,oBAAA,EAAqB,SAAS,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,CAAA;AAAA,0BAElE,KAAA,EAAA,EAAI,SAAA,EAAU,iHACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACV,IAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,SAAS,MAAM;AACb,YAAA,MAAA,CAAO,mBAAmB,IAAI,CAAA;AAC9B,YAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,UACf,CAAA;AAAA,UACA,SAAA,EAAW,EAAA;AAAA,YACT,0JAAA;AAAA,YACA,iBAAiB,IAAA,IAAQ;AAAA,WAC3B;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA,YAAA,KAAiB,wBAAQ,GAAA,CAAC,SAAA,EAAA,EAAU,IAAA,EAAM,KAAA,EAAO,MAAK,KAAA,EAAM,UAAA,EAAU,IAAA,EAAC,SAAA,EAAU,2BAA0B,CAAA,EAC9G,CAAA;AAAA,4BACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAA,EAAa,QAAA,EAAA,IAAA,KAAS,IAAI,CAAA,CAAE,WAAA,GAAc,CAAA,EAAG,IAAI,CAAA,CAAA,CAAA,EAAI;AAAA;AAAA,SAAA;AAAA,QAdhE;AAAA,OAgBR,CAAA,EACH;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAIO,IAAM,WAAA,GAAoB,KAAA,CAAA,UAAA;AAAA,EAC/B,SAASA,YAAAA,CACP;AAAA,IACE,GAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA,GAAc,EAAA;AAAA,IACd,OAAA,GAAU,SAAA;AAAA,IACV,MAAA,GAAS,KAAA;AAAA,IACT,QAAA,GAAW,KAAA;AAAA,IACX,KAAA,GAAQ,KAAA;AAAA,IACR,IAAA,GAAO,KAAA;AAAA,IACP,SAAA,GAAY,IAAA;AAAA,IACZ,SAAA;AAAA,IACA,MAAA,GAAS,OAAA;AAAA,IACT,MAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,KAEF,GAAA,EACA;AACA,IAAA,MAAM,cAAA,GAAuB,KAAA,CAAA,OAAA;AAAA,MAC3B,OAAO,EAAE,WAAA,EAAa,wBAAwB,MAAA,EAAQ,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,WAAW,CAAA,EAAE,CAAA;AAAA,MAC3E,CAAC,QAAQ,MAAM;AAAA,KACjB;AACA,IAAA,MAAM,MAAA,GAAe,aAA4B,IAAI,CAAA;AAErD,IAAM,KAAA,CAAA,mBAAA,CAAoB,KAAK,OAAO;AAAA,MACpC,IAAA,GAAO;AA7Qb,QAAA,IAAA,EAAA;AA8QQ,QAAA,CAAA,EAAA,GAAA,MAAA,CAAO,YAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,IAAA,EAAA;AAAA,MAClB,CAAA;AAAA,MACA,KAAA,GAAQ;AAhRd,QAAA,IAAA,EAAA;AAiRQ,QAAA,CAAA,EAAA,GAAA,MAAA,CAAO,YAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,KAAA,EAAA;AAAA,MAClB,CAAA;AAAA,MACA,IAAI,WAAA,GAAc;AAnRxB,QAAA,IAAA,EAAA,EAAA,EAAA;AAoRQ,QAAA,OAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,OAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,WAAA,KAAhB,IAAA,GAAA,EAAA,GAA+B,CAAA;AAAA,MACxC,CAAA;AAAA,MACA,IAAI,QAAA,GAAW;AAtRrB,QAAA,IAAA,EAAA,EAAA,EAAA;AAuRQ,QAAA,OAAA,CAAO,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,OAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,QAAA,KAAhB,IAAA,GAAA,EAAA,GAA4B,CAAA;AAAA,MACrC;AAAA,KACF,CAAE,CAAA;AAEF,IAAA,MAAM,gBAAA,GAAyB,KAAA,CAAA,WAAA;AAAA,MAC7B,CAAC,MAAA,KAAoC;AACnC,QAAA,IAAI,YAAA,IAAgB,OAAO,OAAA,EAAS;AAClC,UAAA,YAAA,CAAa,MAAA,CAAO,WAAA,EAAa,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA;AAAA,QAC1D;AAAA,MACF,CAAA;AAAA,MACA,CAAC,YAAY;AAAA,KACf;AAEA,IAAA,MAAM,WAAA,GAAoB,kBAAY,MAAM;AAC1C,MAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,EAAA;AAAA,IACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAGZ,IAAA,MAAM,mBAAA,GAA4B,aAAO,KAAK,CAAA;AAC9C,IAAA,MAAM,aAAA,GAAsB,kBAAY,MAAM;AAC5C,MAAA,IAAI,aAAa,SAAA,GAAY,CAAA,IAAK,CAAC,mBAAA,CAAoB,OAAA,IAAW,OAAO,OAAA,EAAS;AAChF,QAAA,MAAA,CAAO,QAAQ,WAAA,GAAc,SAAA;AAC7B,QAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAAA,MAChC;AAAA,IACF,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,IAAA,MAAM,YAAA,GAAe,cAAA,CAAA,cAAA,CAAA;AAAA,MACnB,SAAA,EAAW;AAAA,KAAA,EACP,YAAA,GAAe,EAAE,YAAA,EAAc,gBAAA,EAAiB,GAAI,EAAC,CAAA,EACrD,OAAA,GAAU,EAAE,OAAA,EAAS,WAAA,EAAY,GAAI,EAAC,CAAA;AAG5C,IAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,MAAA,uBACE,GAAA,CAAC,kBAAA,CAAmB,QAAA,EAAnB,EAA4B,OAAO,cAAA,EACpC,QAAA,kBAAA,IAAA;AAAA,QAAC,WAAA;AAAA,QAAA,aAAA,CAAA,cAAA,CAAA;AAAA,UACC,GAAA,EAAK,MAAA;AAAA,UACL,GAAA;AAAA,UACA,QAAA;AAAA,UACA,KAAA;AAAA,UACA,IAAA;AAAA,UACA,QAAA,EAAS,OAAA;AAAA,UACT,aAAA,EAAa,SAAS,EAAA,GAAK,MAAA;AAAA,UAC3B,KAAA,EAAO,MAAA,GAAS,EAAE,sBAAA,EAAwB,+BAA8B,GAA8B,MAAA;AAAA,UACtG,SAAA,EAAW,EAAA;AAAA,YACT,6FAAA;AAAA,YACA;AAAA;AACF,SAAA,EACI,YAAA,CAAA,EAbL;AAAA,UAeC,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,aAAA,EAAA,EAAc,WAAU,SAAA,EAAU,CAAA;AAAA,4BAGnC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACZ,QAAA,EAAA;AAAA,cAAA,QAAA,oBACC,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,GAAA,EAAK,QAAA;AAAA,kBACL,GAAA,EAAK,WAAA;AAAA,kBACL,SAAA,EAAU;AAAA;AAAA,eACZ;AAAA,8BAEF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,OAAE,SAAA,EAAW,EAAA;AAAA,kBACZ,mCAAA;AAAA,kBACA,SAAS,yBAAA,GAA4B;AAAA,mBACnC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,gBACT,QAAA,oBACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA;AAAA,kBACZ,6BAAA;AAAA,kBACA,SAAS,4BAAA,GAA+B;AAAA,mBACtC,QAAA,EAAA,QAAA,EAAS;AAAA,eAAA,EAEjB;AAAA,aAAA,EACF,CAAA;AAAA,gCAGC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,kBAAA,GAAA,CAAC,gBAAa,CAAA,EAChB,CAAA;AAAA,4BAGA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,SAAI,SAAA,EAAW,EAAA;AAAA,gBACd,+CAAA;AAAA,gBACA,SAAS,4BAAA,GAA+B;AAAA,eAC1C,EACE,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,WAAU,CAAA,EACvB,CAAA;AAAA,8BACA,GAAA,CAAC,SAAI,SAAA,EAAW,EAAA;AAAA,gBACd,+CAAA;AAAA,gBACA,SAAS,4BAAA,GAA+B;AAAA,eAC1C,EACE,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,YAAW,CAAA,EACxB;AAAA,aAAA,EACF,CAAA;AAAA,4BAGA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,wBAAA,EAAA,EAAyB,CAAA;AAAA,kCACzB,gBAAA,EAAA,EAAiB,CAAA;AAAA,kCACjB,uBAAA,EAAA,EAAwB,CAAA;AAAA,8BAEzB,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,cAEvB,SAAA,wBAAc,iBAAA,EAAA,EAAkB,CAAA;AAAA,kCAChC,gBAAA,EAAA,EAAiB,CAAA;AAAA,kCACjB,kBAAA,EAAA,EAAmB;AAAA,aAAA,EACtB;AAAA;AAAA,SAAA;AAAA,OACF,EACA,CAAA;AAAA,IAEJ;AAGA,IAAA,uBACE,GAAA,CAAC,kBAAA,CAAmB,QAAA,EAAnB,EAA4B,OAAO,cAAA,EACpC,QAAA,kBAAA,IAAA;AAAA,MAAC,WAAA;AAAA,MAAA,aAAA,CAAA,cAAA,CAAA;AAAA,QACC,GAAA,EAAK,MAAA;AAAA,QACL,GAAA;AAAA,QACA,QAAA;AAAA,QACA,KAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAA,EAAS,OAAA;AAAA,QACT,aAAA,EAAa,SAAS,EAAA,GAAK,MAAA;AAAA,QAC3B,KAAA,EAAO,MAAA,GAAS,EAAE,sBAAA,EAAwB,+BAA8B,GAA8B,MAAA;AAAA,QACtG,SAAA,EAAW,EAAA;AAAA,UACT,kHAAA;AAAA,UACA;AAAA;AACF,OAAA,EACI,YAAA,CAAA,EAbL;AAAA,QAeC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,aAAA,EAAA,EAAc,WAAU,SAAA,EAAU,CAAA;AAAA,8BAGlC,wBAAA,EAAA,EAAyB,CAAA;AAAA,8BACzB,gBAAA,EAAA,EAAiB,CAAA;AAAA,8BACjB,uBAAA,EAAA,EAAwB,CAAA;AAAA,8BAGxB,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,kBAAA,GAAA,CAAC,gBAAa,CAAA,EAChB,CAAA;AAAA,8BAGC,gBAAA,EAAA,EAAiB,CAAA;AAAA,UAGjB,SAAA,wBAAc,iBAAA,EAAA,EAAkB,CAAA;AAAA,8BAChC,gBAAA,EAAA,EAAiB,CAAA;AAAA,8BACjB,kBAAA,EAAA,EAAmB;AAAA;AAAA,OAAA;AAAA,KACtB,EACA,CAAA;AAAA,EAEJ;AACF","file":"chunk-LM5ZJFLA.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"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-LYTC7UMN.js.map
3
+ //# sourceMappingURL=chunk-LYTC7UMN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-LYTC7UMN.js"}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-N2F3ZG2S.js.map
3
+ //# sourceMappingURL=chunk-N2F3ZG2S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-N2F3ZG2S.js"}
@@ -1,4 +1,4 @@
1
- import { cn } from './chunk-QTH4LSO6.js';
1
+ import { cn } from './chunk-W4KJCBMW.js';
2
2
  import { __objRest, __spreadValues } from './chunk-2NMEKWO5.js';
3
3
  import * as React from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -20,5 +20,5 @@ var CardDarkGlow = React.forwardRef(
20
20
  );
21
21
 
22
22
  export { CardDarkGlow };
23
- //# sourceMappingURL=chunk-K2XIXOMO.js.map
24
- //# sourceMappingURL=chunk-K2XIXOMO.js.map
23
+ //# sourceMappingURL=chunk-NEMGLKDF.js.map
24
+ //# sourceMappingURL=chunk-NEMGLKDF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../pulse/src/components/marketing/effects/card-dark-glow.tsx"],"names":["CardDarkGlow"],"mappings":";;;;;AA+BA,IAAM,YAAA,GAAqB,KAAA,CAAA,UAAA;AAAA,EACzB,SAASA,aAAAA,CAAa,EAAA,EAAyD,GAAA,EAAK;AAA9D,IAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,EAAA,GAAK,KAAA,EAAO,WAAA,GAAc,IAAA,EAAM,SAAA,EAhC1D,GAgCwB,EAAA,EAAgD,KAAA,GAAA,SAAA,CAAhD,EAAA,EAAgD,CAA9C,IAAA,EAAY,aAAA,EAAoB,WAAA,CAAA,CAAA;AACtD,IAAA,MAAM,GAAA,GAAM,EAAA;AACZ,IAAA,uBACE,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,gBAAA;AAAA,QACV,kBAAA,EAAkB,cAAc,MAAA,GAAS,OAAA;AAAA,QACzC,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,SAAS;AAAA,OAAA,EAC3C,KAAA;AAAA,KACN;AAAA,EAEJ;AACF","file":"chunk-NEMGLKDF.js","sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@core/lib/utils\"\n\ntype CardDarkGlowTag = \"div\" | \"article\" | \"section\"\n\nexport interface CardDarkGlowProps extends React.HTMLAttributes<HTMLElement> {\n /** Tag renderizada. Default `\"div\"`. */\n as?: CardDarkGlowTag\n /**\n * Habilita lift visual no hover (`translateY(-3px)` + glow mais forte).\n * Default `true`. Use `false` em cards que sao apenas conteudo (sem ser link/clicavel).\n */\n interactive?: boolean\n}\n\n/**\n * Wrapper de card com inset highlight + sombra com glow rose subtil + hover\n * lift opcional. Pareie com `CircleGlow` (no container externo) pra entregar o\n * efeito \"dark premium\" que repete pelas dobras do corporate.\n *\n * @example\n * <CardDarkGlow className=\"rounded-2xl bg-card border p-6\">\n * <h3>Titulo</h3>\n * <p>Descricao do card</p>\n * </CardDarkGlow>\n *\n * <CardDarkGlow as=\"article\" interactive={false}>\n * ...card nao-interativo, sem hover lift\n * </CardDarkGlow>\n */\nconst CardDarkGlow = React.forwardRef<HTMLElement, CardDarkGlowProps>(\n function CardDarkGlow({ as = \"div\", interactive = true, className, ...props }, ref) {\n const Tag = as as React.ElementType\n return (\n <Tag\n ref={ref}\n data-slot=\"card-dark-glow\"\n data-interactive={interactive ? \"true\" : \"false\"}\n className={cn(\"cycle-card-dark-glow\", className)}\n {...props}\n />\n )\n }\n)\n\nexport { CardDarkGlow }\n"]}
@@ -1,4 +1,4 @@
1
- import { cn } from './chunk-QTH4LSO6.js';
1
+ import { cn } from './chunk-W4KJCBMW.js';
2
2
  import { __objRest, __spreadValues } from './chunk-2NMEKWO5.js';
3
3
  import * as React from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -40,5 +40,5 @@ var Input = React.forwardRef(
40
40
  Input.displayName = "Input";
41
41
 
42
42
  export { Input };
43
- //# sourceMappingURL=chunk-I4DM7SVV.js.map
44
- //# sourceMappingURL=chunk-I4DM7SVV.js.map
43
+ //# sourceMappingURL=chunk-OC5O5LV4.js.map
44
+ //# sourceMappingURL=chunk-OC5O5LV4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../core/src/components/ui/input.tsx"],"names":[],"mappings":";;;;;AAUA,IAAM,KAAA,GAAc,KAAA,CAAA,UAAA;AAAA,EAClB,CAAC,IAA2E,GAAA,KAAQ;AAAnF,IAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAAW,IAAA,EAAM,SAAA,GAAY,SAAA,EAAW,OAAA,GAAU,SAAA,EAXvD,GAWG,EAAA,EAAkE,KAAA,GAAA,SAAA,CAAlE,EAAA,EAAkE,CAAhE,WAAA,EAAW,QAAM,WAAA,EAAuB,SAAA,CAAA,CAAA;AACzC,IAAA,uBACE,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QACC,IAAA;AAAA,QACA,GAAA;AAAA,QACA,WAAA,EAAU,OAAA;AAAA,QACV,WAAA,EAAW,SAAA;AAAA,QACX,cAAA,EAAc,OAAA;AAAA,QACd,SAAA,EAAW,EAAA;AAAA;AAAA,UAET,2YAAA;AAAA;AAAA,UAEA,YAAY,SAAA,IAAa,uHAAA;AAAA,UACzB,YAAY,SAAA,IAAa,mCAAA;AAAA,UACzB,YAAY,SAAA,IAAa,uGAAA;AAAA;AAAA,UAEzB,YAAY,QAAA,IAAY,6CAAA;AAAA,UACxB,YAAY,QAAA,IAAY,sCAAA;AAAA,UACxB,YAAY,QAAA,IAAY,0GAAA;AAAA;AAAA,UAExB,mLAAA;AAAA;AAAA,UAEA,cAAc,IAAA,IAAQ,uBAAA;AAAA,UACtB,cAAc,SAAA,IAAa,wBAAA;AAAA,UAC3B,cAAc,IAAA,IAAQ,0BAAA;AAAA,UACtB;AAAA;AACF,OAAA,EACI,KAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,KAAA,CAAM,WAAA,GAAc,OAAA","file":"chunk-OC5O5LV4.js","sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@core/lib/utils\"\n\nexport interface InputProps extends React.ComponentProps<\"input\"> {\n inputSize?: \"sm\" | \"default\" | \"lg\"\n /** Variante visual: outline (borda) ou filled (fundo preenchido) */\n variant?: \"outline\" | \"filled\"\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, inputSize = \"default\", variant = \"outline\", ...props }, ref) => {\n return (\n <input\n type={type}\n ref={ref}\n data-slot=\"input\"\n data-size={inputSize}\n data-variant={variant}\n className={cn(\n // Base\n \"w-full min-w-0 rounded-lg text-neutral-foreground transition-[color,border-color,box-shadow,background-color] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:border-0 file:bg-transparent file:font-medium file:text-neutral-foreground placeholder:text-neutral-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n // Variant: outline\n variant === \"outline\" && \"border border-neutral-border bg-transparent shadow-xs dark:border-neutral-border dark:bg-transparent dark:shadow-none\",\n variant === \"outline\" && \"hover:border-ring hover:bg-ring/5\",\n variant === \"outline\" && \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:bg-ring/5\",\n // Variant: filled (mesmos tokens do Button outline: accent light, input dark)\n variant === \"filled\" && \"border border-transparent bg-neutral-accent\",\n variant === \"filled\" && \"hover:border-ring hover:bg-secondary\",\n variant === \"filled\" && \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:bg-secondary\",\n // Error (sempre visível, ambas variantes)\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:hover:border-destructive dark:aria-invalid:border-destructive dark:aria-invalid:ring-destructive/40\",\n // Sizes\n inputSize === \"sm\" && \"h-8 px-3 py-2 text-sm\",\n inputSize === \"default\" && \"h-10 px-4 py-2 text-sm\",\n inputSize === \"lg\" && \"h-12 px-4 py-3 text-base\",\n className\n )}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n"]}
@@ -1,4 +1,4 @@
1
- import { cn } from './chunk-QTH4LSO6.js';
1
+ import { cn } from './chunk-W4KJCBMW.js';
2
2
  import { __objRest, __spreadProps, __spreadValues } from './chunk-2NMEKWO5.js';
3
3
  import { cva } from 'class-variance-authority';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -53,5 +53,5 @@ function ProgressStage(_a) {
53
53
  }
54
54
 
55
55
  export { ProgressStage };
56
- //# sourceMappingURL=chunk-ILYZQBBN.js.map
57
- //# sourceMappingURL=chunk-ILYZQBBN.js.map
56
+ //# sourceMappingURL=chunk-OM4W6UQG.js.map
57
+ //# sourceMappingURL=chunk-OM4W6UQG.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/progress-stage.tsx"],"names":[],"mappings":";;;;;AAKA,IAAM,yBAAA,GAA4B,IAAI,qBAAA,EAAuB;AAAA,EAC3D,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,KAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,OAAA,EAAS,KAAA;AAAA,MACT,EAAA,EAAI;AAAA;AACN,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;AAaD,SAAS,cAAc,EAAA,EAOA;AAPA,EAAA,IAAA,EAAA,GAAA,EAAA,EACrB;AAAA,IAAA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP,KAAA;AAAA,IACA;AAAA,GAnCF,GA8BuB,EAAA,EAMlB,KAAA,GAAA,SAAA,CANkB,EAAA,EAMlB;AAAA,IALH,QAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,EAAA,EAAI,KAAK,GAAA,CAAI,CAAA,EAAG,MAAM,CAAC,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,KAAA,EAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA;AAEjD,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS;AAAA,KAAA,EACxC,KAAA,CAAA,EAHL;AAAA,MAKE,QAAA,EAAA,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,OAAM,EAAG,CAAC,GAAG,CAAA,qBACjC,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAW,EAAA;AAAA,YACT,yBAAA,CAA0B,EAAE,IAAA,EAAM,CAAA;AAAA,YAClC,CAAA,GAAI,MAAA,GACA,EAAA,CAAG,KAAA,EAAO,YAAY,CAAA,GACtB;AAAA;AACN,SAAA;AAAA,QANK;AAAA,OAQR;AAAA,KAAA;AAAA,GACH;AAEJ","file":"chunk-ILYZQBBN.js","sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst progressStagePillVariants = cva(\"flex-1 rounded-full\", {\n variants: {\n size: {\n xs: \"h-1\",\n sm: \"h-1.5\",\n default: \"h-2\",\n lg: \"h-3\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n})\n\nexport interface ProgressStageProps\n extends React.ComponentProps<\"div\">,\n VariantProps<typeof progressStagePillVariants> {\n /** Numero total de stages (2–10) */\n stages: number\n /** Quantos stages estao preenchidos (0–stages) */\n value: number\n /** Classe de tema aplicada apenas nas pills preenchidas (ex: \"theme-class\") */\n theme?: string\n}\n\nfunction ProgressStage({\n stages,\n value,\n size = \"default\",\n theme,\n className,\n ...props\n}: ProgressStageProps) {\n const total = Math.min(10, Math.max(2, stages))\n const filled = Math.min(total, Math.max(0, value))\n\n return (\n <div\n data-slot=\"progress-stage\"\n className={cn(\"flex w-full gap-2\", className)}\n {...props}\n >\n {Array.from({ length: total }, (_, i) => (\n <div\n key={i}\n className={cn(\n progressStagePillVariants({ size }),\n i < filled\n ? cn(theme, \"bg-primary\")\n : \"bg-neutral-input\"\n )}\n />\n ))}\n </div>\n )\n}\n\nexport { ProgressStage }\n"]}
1
+ {"version":3,"sources":["../src/components/ui/progress-stage.tsx"],"names":[],"mappings":";;;;;AAKA,IAAM,yBAAA,GAA4B,IAAI,qBAAA,EAAuB;AAAA,EAC3D,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,KAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,OAAA,EAAS,KAAA;AAAA,MACT,EAAA,EAAI;AAAA;AACN,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;AAaD,SAAS,cAAc,EAAA,EAOA;AAPA,EAAA,IAAA,EAAA,GAAA,EAAA,EACrB;AAAA,IAAA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP,KAAA;AAAA,IACA;AAAA,GAnCF,GA8BuB,EAAA,EAMlB,KAAA,GAAA,SAAA,CANkB,EAAA,EAMlB;AAAA,IALH,QAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,EAAA,EAAI,KAAK,GAAA,CAAI,CAAA,EAAG,MAAM,CAAC,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,KAAA,EAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA;AAEjD,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS;AAAA,KAAA,EACxC,KAAA,CAAA,EAHL;AAAA,MAKE,QAAA,EAAA,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,OAAM,EAAG,CAAC,GAAG,CAAA,qBACjC,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAW,EAAA;AAAA,YACT,yBAAA,CAA0B,EAAE,IAAA,EAAM,CAAA;AAAA,YAClC,CAAA,GAAI,MAAA,GACA,EAAA,CAAG,KAAA,EAAO,YAAY,CAAA,GACtB;AAAA;AACN,SAAA;AAAA,QANK;AAAA,OAQR;AAAA,KAAA;AAAA,GACH;AAEJ","file":"chunk-OM4W6UQG.js","sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst progressStagePillVariants = cva(\"flex-1 rounded-full\", {\n variants: {\n size: {\n xs: \"h-1\",\n sm: \"h-1.5\",\n default: \"h-2\",\n lg: \"h-3\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n})\n\nexport interface ProgressStageProps\n extends React.ComponentProps<\"div\">,\n VariantProps<typeof progressStagePillVariants> {\n /** Numero total de stages (2–10) */\n stages: number\n /** Quantos stages estao preenchidos (0–stages) */\n value: number\n /** Classe de tema aplicada apenas nas pills preenchidas (ex: \"theme-class\") */\n theme?: string\n}\n\nfunction ProgressStage({\n stages,\n value,\n size = \"default\",\n theme,\n className,\n ...props\n}: ProgressStageProps) {\n const total = Math.min(10, Math.max(2, stages))\n const filled = Math.min(total, Math.max(0, value))\n\n return (\n <div\n data-slot=\"progress-stage\"\n className={cn(\"flex w-full gap-2\", className)}\n {...props}\n >\n {Array.from({ length: total }, (_, i) => (\n <div\n key={i}\n className={cn(\n progressStagePillVariants({ size }),\n i < filled\n ? cn(theme, \"bg-primary\")\n : \"bg-neutral-input\"\n )}\n />\n ))}\n </div>\n )\n}\n\nexport { ProgressStage }\n"]}
@@ -0,0 +1,48 @@
1
+ import { cn } from './chunk-W4KJCBMW.js';
2
+ import { __objRest, __spreadProps, __spreadValues } from './chunk-2NMEKWO5.js';
3
+ import * as React from 'react';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var BASE_CLASSES = [
7
+ "text-[color:var(--brand-default)]",
8
+ "hover:text-[color:var(--brand-dark)]",
9
+ "underline-offset-4 transition-colors",
10
+ "outline-none focus-visible:outline-2 focus-visible:outline-offset-2",
11
+ "focus-visible:outline-[color:var(--brand-default)] rounded-sm"
12
+ ].join(" ");
13
+ var LinkBrand = React.forwardRef(
14
+ function LinkBrand2(props, ref) {
15
+ if (props.as === "button") {
16
+ const _a = props, { as: _as, className: className2, children: children2 } = _a, rest2 = __objRest(_a, ["as", "className", "children"]);
17
+ return /* @__PURE__ */ jsx(
18
+ "button",
19
+ __spreadProps(__spreadValues({
20
+ ref,
21
+ type: "button",
22
+ "data-slot": "link-brand",
23
+ className: cn(BASE_CLASSES, className2)
24
+ }, rest2), {
25
+ children: children2
26
+ })
27
+ );
28
+ }
29
+ const _b = props, { href, external = false, className, children } = _b, rest = __objRest(_b, ["href", "external", "className", "children"]);
30
+ return /* @__PURE__ */ jsx(
31
+ "a",
32
+ __spreadProps(__spreadValues({
33
+ ref,
34
+ href,
35
+ target: external ? "_blank" : void 0,
36
+ rel: external ? "noopener noreferrer" : void 0,
37
+ "data-slot": "link-brand",
38
+ className: cn(BASE_CLASSES, className)
39
+ }, rest), {
40
+ children
41
+ })
42
+ );
43
+ }
44
+ );
45
+
46
+ export { LinkBrand };
47
+ //# sourceMappingURL=chunk-PJRWKWDP.js.map
48
+ //# sourceMappingURL=chunk-PJRWKWDP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../pulse/src/components/marketing/buttons/link-brand.tsx"],"names":["LinkBrand","className","children","rest"],"mappings":";;;;;AAMA,IAAM,YAAA,GAAe;AAAA,EACnB,mCAAA;AAAA,EACA,sCAAA;AAAA,EACA,sCAAA;AAAA,EACA,qEAAA;AAAA,EACA;AACF,CAAA,CAAE,KAAK,GAAG,CAAA;AAuCV,IAAM,SAAA,GAAkB,KAAA,CAAA,UAAA;AAAA,EACtB,SAASA,UAAAA,CAAU,KAAA,EAAO,GAAA,EAAK;AAC7B,IAAA,IAAI,KAAA,CAAM,OAAO,QAAA,EAAU;AACzB,MAAA,MAAkD,EAAA,GAAA,KAAA,EAA1C,EAAA,EAAA,EAAI,GAAA,EAAK,SAAA,EAAAC,YAAW,QAAA,EAAAC,SAAAA,EAtDlC,GAsDwD,EAAA,EAATC,KAAAA,GAAA,SAAA,CAAS,EAAA,EAAT,CAAjC,MAAS,WAAA,EAAW,UAAA,CAAA,CAAA;AAC5B,MAAA,uBACE,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA,aAAA,CAAA,cAAA,CAAA;AAAA,UACC,GAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,WAAA,EAAU,YAAA;AAAA,UACV,SAAA,EAAW,EAAA,CAAG,YAAA,EAAcF,UAAS;AAAA,SAAA,EACjCE,KAAAA,CAAAA,EALL;AAAA,UAOE,QAAA,EAAAD;AAAA,SAAA;AAAA,OACH;AAAA,IAEJ;AAEA,IAAA,MAAiE,EAAA,GAAA,KAAA,EAAzD,EAAA,IAAA,EAAM,QAAA,GAAW,KAAA,EAAO,SAAA,EAAW,QAAA,EApE/C,GAoEqE,EAAA,EAAT,IAAA,GAAA,SAAA,CAAS,EAAA,EAAT,CAAhD,MAAA,EAAM,YAAkB,WAAA,EAAW,UAAA,CAAA,CAAA;AAC3C,IAAA,uBACE,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,YAAA;AAAA,QACV,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS;AAAA,OAAA,EACjC,IAAA,CAAA,EAPL;AAAA,QASE;AAAA,OAAA;AAAA,KACH;AAAA,EAEJ;AACF","file":"chunk-PJRWKWDP.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@core/lib/utils\"\n\nconst BASE_CLASSES = [\n \"text-[color:var(--brand-default)]\",\n \"hover:text-[color:var(--brand-dark)]\",\n \"underline-offset-4 transition-colors\",\n \"outline-none focus-visible:outline-2 focus-visible:outline-offset-2\",\n \"focus-visible:outline-[color:var(--brand-default)] rounded-sm\",\n].join(\" \")\n\ntype LinkBrandAnchorProps = {\n /** Renderiza como `<a>` (default). */\n as?: \"a\"\n /** URL destino. */\n href: string\n external?: boolean\n} & Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"as\" | \"href\">\n\ntype LinkBrandButtonProps = {\n /** Renderiza como `<button>` quando a acao e JS (sem URL). */\n as: \"button\"\n href?: never\n external?: never\n} & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"as\">\n\nexport type LinkBrandProps = LinkBrandAnchorProps | LinkBrandButtonProps\n\n/**\n * Link de texto discreto da marca — `text-brand-default` com hover pra\n * `text-brand-dark`. Usado em nav, footer e texto inline.\n *\n * Sem underline por default (visual mais clean). Pra ter underline, passe\n * `className=\"hover:underline\"` ou `underline` no consumer.\n *\n * Pode renderizar como `<a>` (default) ou `<button>` via prop `as`.\n *\n * @example\n * <LinkBrand href=\"/precos\">Ver planos</LinkBrand>\n *\n * <LinkBrand href=\"https://twitter.com\" external>\n * Siga no Twitter\n * </LinkBrand>\n *\n * <LinkBrand as=\"button\" onClick={() => openModal()}>\n * Abrir filtros\n * </LinkBrand>\n */\nconst LinkBrand = React.forwardRef<HTMLAnchorElement | HTMLButtonElement, LinkBrandProps>(\n function LinkBrand(props, ref) {\n if (props.as === \"button\") {\n const { as: _as, className, children, ...rest } = props\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n data-slot=\"link-brand\"\n className={cn(BASE_CLASSES, className)}\n {...rest}\n >\n {children}\n </button>\n )\n }\n\n const { href, external = false, className, children, ...rest } = props\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noopener noreferrer\" : undefined}\n data-slot=\"link-brand\"\n className={cn(BASE_CLASSES, className)}\n {...rest}\n >\n {children}\n </a>\n )\n }\n)\n\nexport { LinkBrand }\n"]}
@@ -1,5 +1,5 @@
1
- import { CycleIcon } from './chunk-IGFCIAF3.js';
2
- import { cn } from './chunk-QTH4LSO6.js';
1
+ import { CycleIcon } from './chunk-US5LXJTO.js';
2
+ import { cn } from './chunk-W4KJCBMW.js';
3
3
  import { __objRest, __spreadValues, __spreadProps } from './chunk-2NMEKWO5.js';
4
4
  import { cva } from 'class-variance-authority';
5
5
  import { X } from 'lucide-react';
@@ -106,5 +106,5 @@ function AlertClose(_a) {
106
106
  }
107
107
 
108
108
  export { Alert, AlertAction, AlertClose, AlertDescription, AlertTitle, alertVariants };
109
- //# sourceMappingURL=chunk-T5AHJXEY.js.map
110
- //# sourceMappingURL=chunk-T5AHJXEY.js.map
109
+ //# sourceMappingURL=chunk-PS3MV5G7.js.map
110
+ //# sourceMappingURL=chunk-PS3MV5G7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/alert.tsx"],"names":[],"mappings":"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","file":"chunk-T5AHJXEY.js","sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { CycleIcon } from \"@/components/icons\"\n\nconst alertVariants = cva(\n \"relative grid w-full grid-cols-[0_1fr_auto] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr_auto] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current\",\n positive:\n \"theme-positive bg-card text-card-foreground border-border *:data-[slot=alert-description]:text-muted-foreground [&>svg]:text-current\",\n warning:\n \"theme-warning bg-card text-card-foreground border-border *:data-[slot=alert-description]:text-muted-foreground [&>svg]:text-current\",\n critical:\n \"theme-critical bg-card text-card-foreground border-border *:data-[slot=alert-description]:text-muted-foreground [&>svg]:text-current\",\n info:\n \"theme-class bg-card text-card-foreground border-border *:data-[slot=alert-description]:text-muted-foreground [&>svg]:text-current\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface AlertProps\n extends React.ComponentProps<\"div\">,\n VariantProps<typeof alertVariants> {}\n\nfunction Alert({ className, variant, ...props }: AlertProps) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({\n className,\n ...props\n}: React.ComponentProps<\"button\">) {\n return (\n <button\n data-slot=\"alert-action\"\n className={cn(\n \"col-start-2 mt-2 inline-flex h-8 items-center justify-center rounded-md border border-current/20 bg-transparent px-3 text-xs font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertClose({\n className,\n onClick,\n ...props\n}: React.ComponentProps<\"button\">) {\n return (\n <button\n data-slot=\"alert-close\"\n aria-label=\"Fechar alerta\"\n className={cn(\n \"col-start-3 row-start-1 -mr-1 -mt-0.5 inline-flex size-7 items-center justify-center rounded-md text-muted-foreground/60 transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n className\n )}\n onClick={onClick}\n {...props}\n >\n <CycleIcon icon={X} size=\"xs\" decorative />\n </button>\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction, AlertClose, alertVariants }\n"]}
1
+ {"version":3,"sources":["../src/components/ui/alert.tsx"],"names":[],"mappings":"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","file":"chunk-PS3MV5G7.js","sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { CycleIcon } from \"@/components/icons\"\n\nconst alertVariants = cva(\n \"relative grid w-full grid-cols-[0_1fr_auto] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr_auto] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current\",\n positive:\n \"theme-positive bg-card text-card-foreground border-border *:data-[slot=alert-description]:text-muted-foreground [&>svg]:text-current\",\n warning:\n \"theme-warning bg-card text-card-foreground border-border *:data-[slot=alert-description]:text-muted-foreground [&>svg]:text-current\",\n critical:\n \"theme-critical bg-card text-card-foreground border-border *:data-[slot=alert-description]:text-muted-foreground [&>svg]:text-current\",\n info:\n \"theme-class bg-card text-card-foreground border-border *:data-[slot=alert-description]:text-muted-foreground [&>svg]:text-current\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface AlertProps\n extends React.ComponentProps<\"div\">,\n VariantProps<typeof alertVariants> {}\n\nfunction Alert({ className, variant, ...props }: AlertProps) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({\n className,\n ...props\n}: React.ComponentProps<\"button\">) {\n return (\n <button\n data-slot=\"alert-action\"\n className={cn(\n \"col-start-2 mt-2 inline-flex h-8 items-center justify-center rounded-md border border-current/20 bg-transparent px-3 text-xs font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertClose({\n className,\n onClick,\n ...props\n}: React.ComponentProps<\"button\">) {\n return (\n <button\n data-slot=\"alert-close\"\n aria-label=\"Fechar alerta\"\n className={cn(\n \"col-start-3 row-start-1 -mr-1 -mt-0.5 inline-flex size-7 items-center justify-center rounded-md text-muted-foreground/60 transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n className\n )}\n onClick={onClick}\n {...props}\n >\n <CycleIcon icon={X} size=\"xs\" decorative />\n </button>\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction, AlertClose, alertVariants }\n"]}