@fluencypassdevs/cycle 1.15.0 → 1.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/mcp.mjs +94 -0
- package/dist/{chunk-YINJ5YZ5.js → chunk-2NMEKWO5.js} +2 -2
- package/dist/{chunk-YINJ5YZ5.js.map → chunk-2NMEKWO5.js.map} +1 -1
- package/dist/{chunk-5I4PGGLN.js → chunk-3TSOMZJO.js} +4 -4
- package/dist/{chunk-5I4PGGLN.js.map → chunk-3TSOMZJO.js.map} +1 -1
- package/dist/{chunk-L32AMI4K.js → chunk-3VAYZAEF.js} +8 -8
- package/dist/{chunk-L32AMI4K.js.map → chunk-3VAYZAEF.js.map} +1 -1
- package/dist/{chunk-EF6FQT4Y.js → chunk-46SWH3RS.js} +4 -4
- package/dist/{chunk-EF6FQT4Y.js.map → chunk-46SWH3RS.js.map} +1 -1
- package/dist/{chunk-YJ4U7ISM.js → chunk-5Z3ZM7PS.js} +4 -4
- package/dist/{chunk-YJ4U7ISM.js.map → chunk-5Z3ZM7PS.js.map} +1 -1
- package/dist/{chunk-5BNTQSCS.js → chunk-6ANVMIR5.js} +4 -4
- package/dist/{chunk-5BNTQSCS.js.map → chunk-6ANVMIR5.js.map} +1 -1
- package/dist/{chunk-QZVQPUVT.js → chunk-6RHG4VOA.js} +4 -4
- package/dist/{chunk-QZVQPUVT.js.map → chunk-6RHG4VOA.js.map} +1 -1
- package/dist/{chunk-JMNMW54C.js → chunk-7AACZB3Q.js} +4 -4
- package/dist/{chunk-JMNMW54C.js.map → chunk-7AACZB3Q.js.map} +1 -1
- package/dist/{chunk-JGUDRAWA.js → chunk-AIBZJWUG.js} +8 -8
- package/dist/{chunk-JGUDRAWA.js.map → chunk-AIBZJWUG.js.map} +1 -1
- package/dist/{chunk-MTKKVYNS.js → chunk-AUCSNGST.js} +4 -4
- package/dist/{chunk-MTKKVYNS.js.map → chunk-AUCSNGST.js.map} +1 -1
- package/dist/{chunk-SZUWVHP4.js → chunk-C2P3ZSEY.js} +4 -4
- package/dist/{chunk-SZUWVHP4.js.map → chunk-C2P3ZSEY.js.map} +1 -1
- package/dist/{chunk-NOMLQHZS.js → chunk-C5JGLWV6.js} +4 -4
- package/dist/{chunk-NOMLQHZS.js.map → chunk-C5JGLWV6.js.map} +1 -1
- package/dist/{chunk-HZJRM5EK.js → chunk-C6YZNBOO.js} +5 -5
- package/dist/{chunk-HZJRM5EK.js.map → chunk-C6YZNBOO.js.map} +1 -1
- package/dist/{chunk-3EFI7PYC.js → chunk-CBBCTX3A.js} +5 -5
- package/dist/{chunk-3EFI7PYC.js.map → chunk-CBBCTX3A.js.map} +1 -1
- package/dist/{chunk-7NFHHOAE.js → chunk-CMOTOQK7.js} +4 -4
- package/dist/{chunk-7NFHHOAE.js.map → chunk-CMOTOQK7.js.map} +1 -1
- package/dist/chunk-DJ3DMPKK.js +56 -0
- package/dist/chunk-DJ3DMPKK.js.map +1 -0
- package/dist/{chunk-UJ6OER6O.js → chunk-DO4M3OVV.js} +6 -6
- package/dist/{chunk-UJ6OER6O.js.map → chunk-DO4M3OVV.js.map} +1 -1
- package/dist/{chunk-DCNZ2DRR.js → chunk-E3E64CT4.js} +6 -6
- package/dist/{chunk-DCNZ2DRR.js.map → chunk-E3E64CT4.js.map} +1 -1
- package/dist/{chunk-MSLQRGSP.js → chunk-E6WZOLWX.js} +4 -4
- package/dist/{chunk-MSLQRGSP.js.map → chunk-E6WZOLWX.js.map} +1 -1
- package/dist/{chunk-C6BQAAHX.js → chunk-EFT7BHN7.js} +3 -3
- package/dist/{chunk-C6BQAAHX.js.map → chunk-EFT7BHN7.js.map} +1 -1
- package/dist/{chunk-CIM6KJH5.js → chunk-EMX27A3U.js} +4 -4
- package/dist/{chunk-CIM6KJH5.js.map → chunk-EMX27A3U.js.map} +1 -1
- package/dist/{chunk-ELZCZ6ZH.js → chunk-EZVWNHDF.js} +5 -5
- package/dist/{chunk-ELZCZ6ZH.js.map → chunk-EZVWNHDF.js.map} +1 -1
- package/dist/{chunk-XHKFKLHD.js → chunk-FTR4NEFA.js} +4 -4
- package/dist/{chunk-XHKFKLHD.js.map → chunk-FTR4NEFA.js.map} +1 -1
- package/dist/chunk-G57PPNB3.js +74 -0
- package/dist/chunk-G57PPNB3.js.map +1 -0
- package/dist/{chunk-6JH4YWWX.js → chunk-GR65GV2N.js} +4 -4
- package/dist/{chunk-6JH4YWWX.js.map → chunk-GR65GV2N.js.map} +1 -1
- package/dist/{chunk-I5A3CME4.js → chunk-H6VG367Y.js} +4 -4
- package/dist/{chunk-I5A3CME4.js.map → chunk-H6VG367Y.js.map} +1 -1
- package/dist/{chunk-A3Z5GGAI.js → chunk-HBFS7W6V.js} +4 -4
- package/dist/{chunk-A3Z5GGAI.js.map → chunk-HBFS7W6V.js.map} +1 -1
- package/dist/{chunk-5NKTYXWQ.js → chunk-HCSVANPX.js} +5 -5
- package/dist/{chunk-5NKTYXWQ.js.map → chunk-HCSVANPX.js.map} +1 -1
- package/dist/{chunk-QANROH2K.js → chunk-HIAYFCBX.js} +4 -4
- package/dist/{chunk-QANROH2K.js.map → chunk-HIAYFCBX.js.map} +1 -1
- package/dist/{chunk-5HPZCREI.js → chunk-HXFGULDU.js} +4 -4
- package/dist/{chunk-5HPZCREI.js.map → chunk-HXFGULDU.js.map} +1 -1
- package/dist/{chunk-726XFHED.js → chunk-HZOLDTOT.js} +4 -4
- package/dist/{chunk-726XFHED.js.map → chunk-HZOLDTOT.js.map} +1 -1
- package/dist/{chunk-74WKJRW7.js → chunk-I4DM7SVV.js} +4 -4
- package/dist/{chunk-74WKJRW7.js.map → chunk-I4DM7SVV.js.map} +1 -1
- package/dist/{chunk-V7M2NHUO.js → chunk-IGFCIAF3.js} +3 -3
- package/dist/{chunk-V7M2NHUO.js.map → chunk-IGFCIAF3.js.map} +1 -1
- package/dist/{chunk-NYJMA2T7.js → chunk-ILYZQBBN.js} +4 -4
- package/dist/{chunk-NYJMA2T7.js.map → chunk-ILYZQBBN.js.map} +1 -1
- package/dist/{chunk-X4IBONFB.js → chunk-J3DGYZGK.js} +4 -4
- package/dist/{chunk-X4IBONFB.js.map → chunk-J3DGYZGK.js.map} +1 -1
- package/dist/{chunk-6OYSTCGP.js → chunk-JDGM46MB.js} +4 -4
- package/dist/{chunk-6OYSTCGP.js.map → chunk-JDGM46MB.js.map} +1 -1
- package/dist/{chunk-66CU7J2I.js → chunk-JDPJQSZV.js} +4 -4
- package/dist/{chunk-66CU7J2I.js.map → chunk-JDPJQSZV.js.map} +1 -1
- package/dist/{chunk-CWMXYPWK.js → chunk-JGZGZIGR.js} +4 -4
- package/dist/{chunk-CWMXYPWK.js.map → chunk-JGZGZIGR.js.map} +1 -1
- package/dist/chunk-JQRGW2RF.js +82 -0
- package/dist/chunk-JQRGW2RF.js.map +1 -0
- package/dist/{chunk-JRJBKPXW.js → chunk-JUVL7GN2.js} +4 -4
- package/dist/{chunk-JRJBKPXW.js.map → chunk-JUVL7GN2.js.map} +1 -1
- package/dist/{chunk-VXWMC2NK.js → chunk-K2XIXOMO.js} +4 -4
- package/dist/{chunk-VXWMC2NK.js.map → chunk-K2XIXOMO.js.map} +1 -1
- package/dist/{chunk-2MXR6RRJ.js → chunk-KCEFPJZT.js} +4 -4
- package/dist/{chunk-2MXR6RRJ.js.map → chunk-KCEFPJZT.js.map} +1 -1
- package/dist/{chunk-L2DJS6PG.js → chunk-KRENXLKC.js} +6 -6
- package/dist/{chunk-L2DJS6PG.js.map → chunk-KRENXLKC.js.map} +1 -1
- package/dist/{chunk-2EKU7RP4.js → chunk-KSALAAWD.js} +4 -4
- package/dist/{chunk-2EKU7RP4.js.map → chunk-KSALAAWD.js.map} +1 -1
- package/dist/{chunk-JJETOZMI.js → chunk-LBMPZDD5.js} +4 -4
- package/dist/{chunk-JJETOZMI.js.map → chunk-LBMPZDD5.js.map} +1 -1
- package/dist/{chunk-W4GSXVJ2.js → chunk-LC55JPI4.js} +4 -4
- package/dist/{chunk-W4GSXVJ2.js.map → chunk-LC55JPI4.js.map} +1 -1
- package/dist/{chunk-CG7NXMBC.js → chunk-M3U2TKWS.js} +8 -8
- package/dist/{chunk-CG7NXMBC.js.map → chunk-M3U2TKWS.js.map} +1 -1
- package/dist/{chunk-UEJLA7Q6.js → chunk-M56K3ZKY.js} +4 -4
- package/dist/{chunk-UEJLA7Q6.js.map → chunk-M56K3ZKY.js.map} +1 -1
- package/dist/{chunk-D4UH2HJQ.js → chunk-MJKZELI3.js} +7 -7
- package/dist/{chunk-D4UH2HJQ.js.map → chunk-MJKZELI3.js.map} +1 -1
- package/dist/{chunk-5XNYJECW.js → chunk-NE5CT5LH.js} +5 -5
- package/dist/{chunk-5XNYJECW.js.map → chunk-NE5CT5LH.js.map} +1 -1
- package/dist/{chunk-XQUQDZVA.js → chunk-OHRYR7PN.js} +3 -2
- package/dist/chunk-OHRYR7PN.js.map +1 -0
- package/dist/{chunk-NVA4ZJOS.js → chunk-QM54AVC7.js} +4 -4
- package/dist/{chunk-NVA4ZJOS.js.map → chunk-QM54AVC7.js.map} +1 -1
- package/dist/{chunk-TYCPXAXF.js → chunk-QTH4LSO6.js} +3 -2
- package/dist/chunk-QTH4LSO6.js.map +1 -0
- package/dist/{chunk-ZTANTDKS.js → chunk-RXCQLSWL.js} +4 -4
- package/dist/{chunk-ZTANTDKS.js.map → chunk-RXCQLSWL.js.map} +1 -1
- package/dist/{chunk-IGMII4BK.js → chunk-SCZXIVL5.js} +4 -4
- package/dist/{chunk-IGMII4BK.js.map → chunk-SCZXIVL5.js.map} +1 -1
- package/dist/{chunk-NW56QDQM.js → chunk-SDPIL7HA.js} +3 -2
- package/dist/chunk-SDPIL7HA.js.map +1 -0
- package/dist/{chunk-EACBYVLK.js → chunk-SIEPZ5LD.js} +4 -4
- package/dist/{chunk-EACBYVLK.js.map → chunk-SIEPZ5LD.js.map} +1 -1
- package/dist/{chunk-V3CBOIGK.js → chunk-SXCNJQ7S.js} +6 -6
- package/dist/{chunk-V3CBOIGK.js.map → chunk-SXCNJQ7S.js.map} +1 -1
- package/dist/{chunk-7ZXAU2CD.js → chunk-T5AHJXEY.js} +5 -5
- package/dist/{chunk-7ZXAU2CD.js.map → chunk-T5AHJXEY.js.map} +1 -1
- package/dist/{chunk-K2NUBNSA.js → chunk-T7EIAVSF.js} +3 -2
- package/dist/chunk-T7EIAVSF.js.map +1 -0
- package/dist/{chunk-F2Q3E2ZM.js → chunk-TBLO2A4C.js} +4 -4
- package/dist/{chunk-F2Q3E2ZM.js.map → chunk-TBLO2A4C.js.map} +1 -1
- package/dist/{chunk-HDCU6QSG.js → chunk-U27GHP5Z.js} +4 -4
- package/dist/{chunk-HDCU6QSG.js.map → chunk-U27GHP5Z.js.map} +1 -1
- package/dist/{chunk-VYHRNO77.js → chunk-U2SCIVKI.js} +4 -4
- package/dist/{chunk-VYHRNO77.js.map → chunk-U2SCIVKI.js.map} +1 -1
- package/dist/chunk-WCDYTWKA.js +105 -0
- package/dist/chunk-WCDYTWKA.js.map +1 -0
- package/dist/{chunk-AL2ALTBH.js → chunk-WL6J5ZVH.js} +4 -4
- package/dist/{chunk-AL2ALTBH.js.map → chunk-WL6J5ZVH.js.map} +1 -1
- package/dist/{chunk-5LZHXNBV.js → chunk-WMOGNJWP.js} +3 -3
- package/dist/{chunk-5LZHXNBV.js.map → chunk-WMOGNJWP.js.map} +1 -1
- package/dist/{chunk-TPRZMMT6.js → chunk-WUK6APAX.js} +6 -6
- package/dist/{chunk-TPRZMMT6.js.map → chunk-WUK6APAX.js.map} +1 -1
- package/dist/{chunk-NZXP7BAH.js → chunk-XDJ2E6KQ.js} +4 -4
- package/dist/{chunk-NZXP7BAH.js.map → chunk-XDJ2E6KQ.js.map} +1 -1
- package/dist/{chunk-F2XA2Z75.js → chunk-XMZVSCCY.js} +7 -7
- package/dist/{chunk-F2XA2Z75.js.map → chunk-XMZVSCCY.js.map} +1 -1
- package/dist/{chunk-7LH7PSQS.js → chunk-XXTQV27H.js} +6 -6
- package/dist/{chunk-7LH7PSQS.js.map → chunk-XXTQV27H.js.map} +1 -1
- package/dist/{chunk-3LXU5C35.js → chunk-Y33BGBHR.js} +4 -4
- package/dist/{chunk-3LXU5C35.js.map → chunk-Y33BGBHR.js.map} +1 -1
- package/dist/{chunk-JPEDYOV7.js → chunk-YW7VSQJE.js} +4 -4
- package/dist/{chunk-JPEDYOV7.js.map → chunk-YW7VSQJE.js.map} +1 -1
- package/dist/chunk-YZNOE4TO.js +48 -0
- package/dist/chunk-YZNOE4TO.js.map +1 -0
- package/dist/{chunk-PY2BIZNB.js → chunk-ZJRXBOM2.js} +4 -4
- package/dist/{chunk-PY2BIZNB.js.map → chunk-ZJRXBOM2.js.map} +1 -1
- package/dist/composites/chat-thread.js +14 -13
- package/dist/hooks/use-intersection.js +3 -2
- package/dist/hooks/use-reduced-motion.js +3 -2
- package/dist/icons/index.js +4 -3
- package/dist/icons/lucide.js +1 -0
- package/dist/index.js +56 -55
- package/dist/layout/container.js +4 -3
- package/dist/layout/grid.js +4 -3
- package/dist/layout/stack.js +4 -3
- package/dist/lib/utils.js +3 -2
- package/dist/logos/fluencypass.js +4 -3
- package/dist/logos/product.js +5 -4
- package/dist/marketing/buttons/cta-brand.d.ts +39 -0
- package/dist/marketing/buttons/cta-brand.js +8 -0
- package/dist/marketing/buttons/cta-brand.js.map +1 -0
- package/dist/marketing/buttons/index.d.ts +5 -0
- package/dist/marketing/buttons/index.js +9 -0
- package/dist/marketing/buttons/index.js.map +1 -0
- package/dist/marketing/buttons/link-brand.d.ts +39 -0
- package/dist/marketing/buttons/link-brand.js +6 -0
- package/dist/marketing/buttons/link-brand.js.map +1 -0
- package/dist/marketing/effects/card-dark-glow.js +4 -3
- package/dist/marketing/effects/circle-glow.js +4 -3
- package/dist/marketing/effects/hand-underline.d.ts +33 -0
- package/dist/marketing/effects/hand-underline.js +8 -0
- package/dist/marketing/effects/hand-underline.js.map +1 -0
- package/dist/marketing/effects/index.d.ts +3 -0
- package/dist/marketing/effects/index.js +11 -5
- package/dist/marketing/effects/magnetic-button.d.ts +36 -0
- package/dist/marketing/effects/magnetic-button.js +7 -0
- package/dist/marketing/effects/magnetic-button.js.map +1 -0
- package/dist/marketing/effects/marquee.js +4 -3
- package/dist/marketing/effects/rotating-word.d.ts +40 -0
- package/dist/marketing/effects/rotating-word.js +7 -0
- package/dist/marketing/effects/rotating-word.js.map +1 -0
- package/dist/marketing/layout/index.js +4 -3
- package/dist/marketing/layout/section.js +4 -3
- package/dist/marketing/motion/animated-number.js +6 -5
- package/dist/marketing/motion/index.js +9 -8
- package/dist/marketing/motion/reveal-on-scroll.js +6 -5
- package/dist/marketing/motion/smooth-anchor.js +3 -2
- package/dist/marketing/motion/stagger-reveal.js +6 -5
- package/dist/marketing/typography/hero-heading.js +4 -3
- package/dist/marketing/typography/index.js +7 -6
- package/dist/marketing/typography/section-eyebrow.js +4 -3
- package/dist/marketing/typography/section-heading.js +4 -3
- package/dist/marketing/typography/section-subtitle.js +4 -3
- package/dist/styles/tokens.css +37 -8
- package/dist/ui/accordion.js +4 -3
- package/dist/ui/alert-dialog.js +5 -4
- package/dist/ui/alert.js +6 -5
- package/dist/ui/audio-player.js +7 -6
- package/dist/ui/avatar.js +4 -3
- package/dist/ui/badge.js +4 -3
- package/dist/ui/button.js +4 -3
- package/dist/ui/chat-bubble.js +5 -4
- package/dist/ui/chat-message.js +10 -9
- package/dist/ui/chat-panel.js +9 -8
- package/dist/ui/checkbox.js +4 -3
- package/dist/ui/circular-progress.js +4 -3
- package/dist/ui/dialog.js +5 -4
- package/dist/ui/drawer.js +4 -3
- package/dist/ui/dropdown-menu.js +4 -3
- package/dist/ui/editor.js +8 -7
- package/dist/ui/empty.js +4 -3
- package/dist/ui/fab.js +4 -3
- package/dist/ui/file-card.js +4 -3
- package/dist/ui/input.js +4 -3
- package/dist/ui/label.js +4 -3
- package/dist/ui/like-dislike.js +8 -7
- package/dist/ui/live-waiting.js +7 -6
- package/dist/ui/message-bar.js +4 -3
- package/dist/ui/message-rating.js +4 -3
- package/dist/ui/player-i18n.js +3 -2
- package/dist/ui/popover.js +4 -3
- package/dist/ui/progress-dot.js +4 -3
- package/dist/ui/progress-stage.js +4 -3
- package/dist/ui/progress.js +4 -3
- package/dist/ui/radio-group.js +4 -3
- package/dist/ui/resizable.js +4 -3
- package/dist/ui/scroll-area.js +4 -3
- package/dist/ui/select.js +4 -3
- package/dist/ui/sheet.js +4 -3
- package/dist/ui/skeleton.js +4 -3
- package/dist/ui/slider.js +4 -3
- package/dist/ui/sonner.js +6 -5
- package/dist/ui/spinner.js +6 -5
- package/dist/ui/switch.js +4 -3
- package/dist/ui/tabs.js +4 -3
- package/dist/ui/textarea.js +4 -3
- package/dist/ui/toggle.js +4 -3
- package/dist/ui/tooltip.js +4 -3
- package/dist/ui/video-player.js +7 -6
- package/package.json +10 -2
- package/dist/chunk-K2NUBNSA.js.map +0 -1
- package/dist/chunk-NW56QDQM.js.map +0 -1
- package/dist/chunk-TYCPXAXF.js.map +0 -1
- package/dist/chunk-XQUQDZVA.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ui/empty.tsx"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/empty.tsx"],"names":[],"mappings":"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","file":"chunk-TBLO2A4C.js","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n \"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-header\"\n className={cn(\n \"flex max-w-sm flex-col items-center gap-2 text-center\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst emptyMediaVariants = cva(\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"flex size-10 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction EmptyMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n )\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-title\"\n className={cn(\"text-lg font-medium tracking-tight\", className)}\n {...props}\n />\n )\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn(\n \"text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn(\n \"flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { cn } from './chunk-
|
|
2
|
-
import { __objRest, __spreadValues } from './chunk-
|
|
1
|
+
import { cn } from './chunk-QTH4LSO6.js';
|
|
2
|
+
import { __objRest, __spreadValues } from './chunk-2NMEKWO5.js';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -20,5 +20,5 @@ var CircleGlow = React.forwardRef(
|
|
|
20
20
|
);
|
|
21
21
|
|
|
22
22
|
export { CircleGlow };
|
|
23
|
-
//# sourceMappingURL=chunk-
|
|
24
|
-
//# sourceMappingURL=chunk-
|
|
23
|
+
//# sourceMappingURL=chunk-U27GHP5Z.js.map
|
|
24
|
+
//# sourceMappingURL=chunk-U27GHP5Z.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/marketing/effects/circle-glow.tsx"],"names":["CircleGlow"],"mappings":";;;;;AA2BA,IAAM,UAAA,GAAmB,KAAA,CAAA,UAAA;AAAA,EACvB,SAASA,WAAAA,CAAW,EAAA,EAAsC,GAAA,EAAK;AAA3C,IAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,IAAA,GAAO,MAAM,SAAA,EA5BrC,GA4BsB,IAA6B,KAAA,GAAA,SAAA,CAA7B,EAAA,EAA6B,CAA3B,MAAA,EAAa,WAAA,CAAA,CAAA;AACjC,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,aAAA,EAAY,MAAA;AAAA,QACZ,WAAA,EAAU,aAAA;AAAA,QACV,WAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS;AAAA,OAAA,EACxC,KAAA;AAAA,KACN;AAAA,EAEJ;AACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/marketing/effects/circle-glow.tsx"],"names":["CircleGlow"],"mappings":";;;;;AA2BA,IAAM,UAAA,GAAmB,KAAA,CAAA,UAAA;AAAA,EACvB,SAASA,WAAAA,CAAW,EAAA,EAAsC,GAAA,EAAK;AAA3C,IAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,IAAA,GAAO,MAAM,SAAA,EA5BrC,GA4BsB,IAA6B,KAAA,GAAA,SAAA,CAA7B,EAAA,EAA6B,CAA3B,MAAA,EAAa,WAAA,CAAA,CAAA;AACjC,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,aAAA,EAAY,MAAA;AAAA,QACZ,WAAA,EAAU,aAAA;AAAA,QACV,WAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,EAAA,CAAG,mBAAA,EAAqB,SAAS;AAAA,OAAA,EACxC,KAAA;AAAA,KACN;AAAA,EAEJ;AACF","file":"chunk-U27GHP5Z.js","sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport interface CircleGlowProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /**\n * Tamanho relativo do glow. Controla o `transform: scale()` aplicado ao\n * elemento. Default `\"lg\"` (escala 1.0).\n */\n size?: \"sm\" | \"md\" | \"lg\"\n}\n\n/**\n * Decoracao de glow circular pulsante. Posicionada `absolute` — o **container\n * deve ser `relative`**. Idealmente coloque atras dos cards usando `-z-10`\n * (ou similar) via `className`.\n *\n * Sempre `aria-hidden` e `pointer-events: none` (e puramente visual).\n * Respeita `prefers-reduced-motion`.\n *\n * @example\n * <div className=\"relative\">\n * <CircleGlow className=\"-z-10\" />\n * <div className=\"grid grid-cols-3 gap-6\">{cards}</div>\n * </div>\n */\nconst CircleGlow = React.forwardRef<HTMLDivElement, CircleGlowProps>(\n function CircleGlow({ size = \"lg\", className, ...props }, ref) {\n return (\n <div\n ref={ref}\n aria-hidden=\"true\"\n data-slot=\"circle-glow\"\n data-size={size}\n className={cn(\"cycle-circle-glow\", className)}\n {...props}\n />\n )\n }\n)\n\nexport { CircleGlow }\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { cn } from './chunk-
|
|
2
|
-
import { __objRest, __spreadValues } from './chunk-
|
|
1
|
+
import { cn } from './chunk-QTH4LSO6.js';
|
|
2
|
+
import { __objRest, __spreadValues } from './chunk-2NMEKWO5.js';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -23,5 +23,5 @@ var SectionEyebrow = React.forwardRef(
|
|
|
23
23
|
);
|
|
24
24
|
|
|
25
25
|
export { SectionEyebrow };
|
|
26
|
-
//# sourceMappingURL=chunk-
|
|
27
|
-
//# sourceMappingURL=chunk-
|
|
26
|
+
//# sourceMappingURL=chunk-U2SCIVKI.js.map
|
|
27
|
+
//# sourceMappingURL=chunk-U2SCIVKI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/marketing/typography/section-eyebrow.tsx"],"names":["SectionEyebrow"],"mappings":";;;;;AAsBA,IAAM,cAAA,GAAuB,KAAA,CAAA,UAAA;AAAA,EAC3B,SAASA,eAAAA,CAAe,EAAA,EAAmD,GAAA,EAAK;AAAxD,IAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,EAAA,GAAK,GAAA,EAAK,KAAA,GAAQ,MAAA,EAAQ,SAAA,EAvBtD,GAuB0B,EAAA,EAA0C,KAAA,GAAA,SAAA,CAA1C,EAAA,EAA0C,CAAxC,IAAA,EAAU,OAAA,EAAgB,WAAA,CAAA,CAAA;AAClD,IAAA,MAAM,GAAA,GAAM,EAAA;AACZ,IAAA,uBACE,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,iBAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,mEAAA;AAAA,UACA,UAAU,QAAA,IAAY,aAAA;AAAA,UACtB;AAAA;AACF,OAAA,EACI,KAAA;AAAA,KACN;AAAA,EAEJ;AACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/marketing/typography/section-eyebrow.tsx"],"names":["SectionEyebrow"],"mappings":";;;;;AAsBA,IAAM,cAAA,GAAuB,KAAA,CAAA,UAAA;AAAA,EAC3B,SAASA,eAAAA,CAAe,EAAA,EAAmD,GAAA,EAAK;AAAxD,IAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,EAAA,GAAK,GAAA,EAAK,KAAA,GAAQ,MAAA,EAAQ,SAAA,EAvBtD,GAuB0B,EAAA,EAA0C,KAAA,GAAA,SAAA,CAA1C,EAAA,EAA0C,CAAxC,IAAA,EAAU,OAAA,EAAgB,WAAA,CAAA,CAAA;AAClD,IAAA,MAAM,GAAA,GAAM,EAAA;AACZ,IAAA,uBACE,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,iBAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,mEAAA;AAAA,UACA,UAAU,QAAA,IAAY,aAAA;AAAA,UACtB;AAAA;AACF,OAAA,EACI,KAAA;AAAA,KACN;AAAA,EAEJ;AACF","file":"chunk-U2SCIVKI.js","sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype SectionEyebrowTag = \"p\" | \"span\" | \"div\"\n\nexport interface SectionEyebrowProps extends React.HTMLAttributes<HTMLElement> {\n /** Tag renderizada. Default `\"p\"`. */\n as?: SectionEyebrowTag\n /** Alinhamento. Default `\"left\"`. */\n align?: \"left\" | \"center\"\n}\n\n/**\n * Rotulo monospace acima do `SectionHeading` — funciona como \"eyebrow\" que\n * categoriza a dobra (ex: \"Nossa solucao\", \"Para empresas\"). Tipografia\n * conservadora pra nao competir com o heading principal.\n *\n * @example\n * <SectionEyebrow align=\"center\">Para empresas</SectionEyebrow>\n * <SectionHeading>Acelere o ingles do seu time</SectionHeading>\n */\nconst SectionEyebrow = React.forwardRef<HTMLElement, SectionEyebrowProps>(\n function SectionEyebrow({ as = \"p\", align = \"left\", className, ...props }, ref) {\n const Tag = as as React.ElementType\n return (\n <Tag\n ref={ref}\n data-slot=\"section-eyebrow\"\n className={cn(\n \"text-xs font-mono uppercase tracking-widest text-muted-foreground\",\n align === \"center\" && \"text-center\",\n className\n )}\n {...props}\n />\n )\n }\n)\n\nexport { SectionEyebrow }\n"]}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { useReducedMotion } from './chunk-T7EIAVSF.js';
|
|
2
|
+
import { cn } from './chunk-QTH4LSO6.js';
|
|
3
|
+
import { __objRest, __spreadProps, __spreadValues } from './chunk-2NMEKWO5.js';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var MagneticButton = React.forwardRef(
|
|
8
|
+
function MagneticButton2(_a, forwardedRef) {
|
|
9
|
+
var _b = _a, { strength = 0.25, radius = 100, className, style, children } = _b, props = __objRest(_b, ["strength", "radius", "className", "style", "children"]);
|
|
10
|
+
const innerRef = React.useRef(null);
|
|
11
|
+
const ref = forwardedRef != null ? forwardedRef : innerRef;
|
|
12
|
+
const hoveredRef = React.useRef(false);
|
|
13
|
+
const reduced = useReducedMotion();
|
|
14
|
+
const [hovered, setHovered] = React.useState(false);
|
|
15
|
+
React.useEffect(() => {
|
|
16
|
+
const el = ref.current;
|
|
17
|
+
if (!el) return;
|
|
18
|
+
const s = hovered ? 1.03 : 1;
|
|
19
|
+
const cur = el.style.transform;
|
|
20
|
+
if (cur && /scale\([^)]+\)/.test(cur)) {
|
|
21
|
+
el.style.transform = cur.replace(/scale\([^)]+\)/, `scale(${s})`);
|
|
22
|
+
} else {
|
|
23
|
+
el.style.transform = `translate3d(0,0,0) scale(${s})`;
|
|
24
|
+
}
|
|
25
|
+
}, [hovered, ref]);
|
|
26
|
+
React.useEffect(() => {
|
|
27
|
+
if (reduced) return;
|
|
28
|
+
if (typeof window === "undefined") return;
|
|
29
|
+
if (window.matchMedia("(pointer: coarse)").matches) return;
|
|
30
|
+
const el = ref.current;
|
|
31
|
+
if (!el) return;
|
|
32
|
+
let isVisible = false;
|
|
33
|
+
let rafId = 0;
|
|
34
|
+
let lastX = 0;
|
|
35
|
+
let lastY = 0;
|
|
36
|
+
const io = new IntersectionObserver(
|
|
37
|
+
([entry]) => {
|
|
38
|
+
var _a2;
|
|
39
|
+
isVisible = (_a2 = entry == null ? void 0 : entry.isIntersecting) != null ? _a2 : false;
|
|
40
|
+
if (!isVisible) {
|
|
41
|
+
el.style.transform = `translate3d(0,0,0) scale(${hoveredRef.current ? 1.03 : 1})`;
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{ rootMargin: "200px" }
|
|
45
|
+
);
|
|
46
|
+
io.observe(el);
|
|
47
|
+
function flush() {
|
|
48
|
+
rafId = 0;
|
|
49
|
+
if (!isVisible) return;
|
|
50
|
+
const cur = ref.current;
|
|
51
|
+
if (!cur) return;
|
|
52
|
+
const rect = cur.getBoundingClientRect();
|
|
53
|
+
const cx = rect.left + rect.width / 2;
|
|
54
|
+
const cy = rect.top + rect.height / 2;
|
|
55
|
+
const dx = lastX - cx;
|
|
56
|
+
const dy = lastY - cy;
|
|
57
|
+
const dist = Math.hypot(dx, dy);
|
|
58
|
+
const tx = dist < radius ? dx * strength : 0;
|
|
59
|
+
const ty = dist < radius ? dy * strength : 0;
|
|
60
|
+
const s = hoveredRef.current ? 1.03 : 1;
|
|
61
|
+
cur.style.transform = `translate3d(${tx}px, ${ty}px, 0) scale(${s})`;
|
|
62
|
+
}
|
|
63
|
+
function onMove(e) {
|
|
64
|
+
if (!isVisible) return;
|
|
65
|
+
lastX = e.clientX;
|
|
66
|
+
lastY = e.clientY;
|
|
67
|
+
if (rafId) return;
|
|
68
|
+
rafId = requestAnimationFrame(flush);
|
|
69
|
+
}
|
|
70
|
+
window.addEventListener("mousemove", onMove, { passive: true });
|
|
71
|
+
return () => {
|
|
72
|
+
window.removeEventListener("mousemove", onMove);
|
|
73
|
+
io.disconnect();
|
|
74
|
+
if (rafId) cancelAnimationFrame(rafId);
|
|
75
|
+
};
|
|
76
|
+
}, [reduced, strength, radius, ref]);
|
|
77
|
+
return /* @__PURE__ */ jsx(
|
|
78
|
+
"div",
|
|
79
|
+
__spreadProps(__spreadValues({
|
|
80
|
+
ref,
|
|
81
|
+
"data-slot": "magnetic-button",
|
|
82
|
+
onMouseEnter: () => {
|
|
83
|
+
hoveredRef.current = true;
|
|
84
|
+
setHovered(true);
|
|
85
|
+
},
|
|
86
|
+
onMouseLeave: () => {
|
|
87
|
+
hoveredRef.current = false;
|
|
88
|
+
setHovered(false);
|
|
89
|
+
},
|
|
90
|
+
className: cn("inline-block", className),
|
|
91
|
+
style: __spreadValues({
|
|
92
|
+
transition: "transform 0.25s cubic-bezier(0.22, 1, 0.36, 1)",
|
|
93
|
+
willChange: "transform",
|
|
94
|
+
filter: hovered ? "var(--shadow-brand-glow-hover)" : "var(--shadow-brand-glow-idle)"
|
|
95
|
+
}, style)
|
|
96
|
+
}, props), {
|
|
97
|
+
children
|
|
98
|
+
})
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
export { MagneticButton };
|
|
104
|
+
//# sourceMappingURL=chunk-WCDYTWKA.js.map
|
|
105
|
+
//# sourceMappingURL=chunk-WCDYTWKA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/marketing/effects/magnetic-button.tsx"],"names":["MagneticButton","_a"],"mappings":"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","file":"chunk-WCDYTWKA.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { useReducedMotion } from \"@/hooks/use-reduced-motion\"\n\nexport interface MagneticButtonProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Multiplicador do offset (quanto o filho \"puxa\" em direcao ao cursor). Default `0.25`. */\n strength?: number\n /** Distancia em px na qual o efeito ativa. Default `100`. */\n radius?: number\n children: React.ReactNode\n}\n\n/**\n * Wrapper que aplica efeito magnetico no filho (puxa em direcao ao cursor\n * quando proximo). Inspirado em CTAs premium de landing pages.\n *\n * Otimizacoes de performance:\n * - Escreve `transform` direto no DOM via ref (sem React state na hot path).\n * - Throttle com `requestAnimationFrame` (max 1 update por frame).\n * - `IntersectionObserver` gating: so processa `mousemove` quando visivel\n * (rootMargin 200px pra suavidade na entrada).\n *\n * Acessibilidade:\n * - Skip total se `prefers-reduced-motion: reduce`.\n * - Skip total em `pointer: coarse` (touch devices) — sem cursor real.\n *\n * O drop-shadow usa CSS vars (`--shadow-brand-glow-idle/-hover`) — consumer\n * pode override pro brand proprio sem mexer no componente.\n *\n * @example\n * <MagneticButton>\n * <a href=\"#vendas\">\n * <Button variant=\"default\">CTA principal</Button>\n * </a>\n * </MagneticButton>\n */\nconst MagneticButton = React.forwardRef<HTMLDivElement, MagneticButtonProps>(\n function MagneticButton(\n { strength = 0.25, radius = 100, className, style, children, ...props },\n forwardedRef\n ) {\n const innerRef = React.useRef<HTMLDivElement>(null)\n const ref = (forwardedRef as React.RefObject<HTMLDivElement>) ?? innerRef\n const hoveredRef = React.useRef(false)\n const reduced = useReducedMotion()\n const [hovered, setHovered] = React.useState(false)\n\n // Sincroniza scale quando hover muda — sem tocar no offset do mousemove.\n React.useEffect(() => {\n const el = ref.current\n if (!el) return\n const s = hovered ? 1.03 : 1\n const cur = el.style.transform\n if (cur && /scale\\([^)]+\\)/.test(cur)) {\n el.style.transform = cur.replace(/scale\\([^)]+\\)/, `scale(${s})`)\n } else {\n el.style.transform = `translate3d(0,0,0) scale(${s})`\n }\n }, [hovered, ref])\n\n React.useEffect(() => {\n if (reduced) return\n if (typeof window === \"undefined\") return\n if (window.matchMedia(\"(pointer: coarse)\").matches) return\n\n const el = ref.current\n if (!el) return\n\n let isVisible = false\n let rafId = 0\n let lastX = 0\n let lastY = 0\n\n const io = new IntersectionObserver(\n ([entry]) => {\n isVisible = entry?.isIntersecting ?? false\n if (!isVisible) {\n el.style.transform = `translate3d(0,0,0) scale(${\n hoveredRef.current ? 1.03 : 1\n })`\n }\n },\n { rootMargin: \"200px\" }\n )\n io.observe(el)\n\n function flush() {\n rafId = 0\n if (!isVisible) return\n const cur = ref.current\n if (!cur) return\n const rect = cur.getBoundingClientRect()\n const cx = rect.left + rect.width / 2\n const cy = rect.top + rect.height / 2\n const dx = lastX - cx\n const dy = lastY - cy\n const dist = Math.hypot(dx, dy)\n const tx = dist < radius ? dx * strength : 0\n const ty = dist < radius ? dy * strength : 0\n const s = hoveredRef.current ? 1.03 : 1\n cur.style.transform = `translate3d(${tx}px, ${ty}px, 0) scale(${s})`\n }\n\n function onMove(e: MouseEvent) {\n if (!isVisible) return\n lastX = e.clientX\n lastY = e.clientY\n if (rafId) return\n rafId = requestAnimationFrame(flush)\n }\n\n window.addEventListener(\"mousemove\", onMove, { passive: true })\n return () => {\n window.removeEventListener(\"mousemove\", onMove)\n io.disconnect()\n if (rafId) cancelAnimationFrame(rafId)\n }\n }, [reduced, strength, radius, ref])\n\n return (\n <div\n ref={ref}\n data-slot=\"magnetic-button\"\n onMouseEnter={() => {\n hoveredRef.current = true\n setHovered(true)\n }}\n onMouseLeave={() => {\n hoveredRef.current = false\n setHovered(false)\n }}\n className={cn(\"inline-block\", className)}\n style={{\n transition: \"transform 0.25s cubic-bezier(0.22, 1, 0.36, 1)\",\n willChange: \"transform\",\n filter: hovered\n ? \"var(--shadow-brand-glow-hover)\"\n : \"var(--shadow-brand-glow-idle)\",\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nexport { MagneticButton }\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { cn } from './chunk-
|
|
2
|
-
import { __objRest, __spreadProps, __spreadValues } from './chunk-
|
|
1
|
+
import { cn } from './chunk-QTH4LSO6.js';
|
|
2
|
+
import { __objRest, __spreadProps, __spreadValues } from './chunk-2NMEKWO5.js';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { Slider as Slider$1 } from 'radix-ui';
|
|
5
5
|
import { cva } from 'class-variance-authority';
|
|
@@ -111,5 +111,5 @@ function Slider(_a) {
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
export { Slider, sliderVariants };
|
|
114
|
-
//# sourceMappingURL=chunk-
|
|
115
|
-
//# sourceMappingURL=chunk-
|
|
114
|
+
//# sourceMappingURL=chunk-WL6J5ZVH.js.map
|
|
115
|
+
//# sourceMappingURL=chunk-WL6J5ZVH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ui/slider.tsx"],"names":["SliderPrimitive"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/slider.tsx"],"names":["SliderPrimitive"],"mappings":";;;;;;;AAQA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,qOAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,EAAA;AAAA,QACJ,OAAA,EAAS,EAAA;AAAA,QACT,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AAEA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,sIAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,mEAAA;AAAA,QACJ,OAAA,EAAS,uEAAA;AAAA,QACT,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,wOAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,UAAA;AAAA,QACJ,OAAA,EAAS,QAAA;AAAA,QACT,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AASA,SAAS,OAAO,EAAA,EASA;AATA,EAAA,IAAA,EAAA,GAAA,EAAA,EACd;AAAA,IAAA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAA,GAAM,CAAA;AAAA,IACN,GAAA,GAAM,GAAA;AAAA,IACN,IAAA,GAAO,SAAA;AAAA,IACP;AAAA,GAtEF,GA+DgB,EAAA,EAQX,KAAA,GAAA,SAAA,CARW,EAAA,EAQX;AAAA,IAPH,WAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,OAAA,GAAgB,KAAA,CAAA,OAAA;AAAA,IACpB,MACE,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GACf,KAAA,GACA,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,GACxB,YAAA,GACA,CAAC,KAAK,GAAG,CAAA;AAAA,IACjB,CAAC,KAAA,EAAO,YAAA,EAAc,GAAA,EAAK,GAAG;AAAA,GAChC;AAEA,EAAA,uBACE,IAAA;AAAA,IAACA,QAAA,CAAgB,IAAA;AAAA,IAAhB,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,YAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA,SAAA,EAAW,GAAG,KAAA,EAAO,cAAA,CAAe,EAAE,IAAA,EAAM,GAAG,SAAS;AAAA,KAAA,EACpD,KAAA,CAAA,EAPL;AAAA,MASC,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAACA,QAAA,CAAgB,KAAA;AAAA,UAAhB;AAAA,YACC,WAAA,EAAU,cAAA;AAAA,YACV,SAAA,EAAW,aAAA,CAAc,EAAE,IAAA,EAAM,CAAA;AAAA,YAEjC,QAAA,kBAAA,GAAA;AAAA,cAACA,QAAA,CAAgB,KAAA;AAAA,cAAhB;AAAA,gBACC,WAAA,EAAU,cAAA;AAAA,gBACV,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,SACF;AAAA,QACC,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,QAAQ,MAAA,EAAO,EAAG,CAAC,CAAA,EAAG,KAAA,qBAC1C,GAAA;AAAA,UAACA,QAAA,CAAgB,KAAA;AAAA,UAAhB;AAAA,YACC,WAAA,EAAU,cAAA;AAAA,YAEV,SAAA,EAAW,aAAA,CAAc,EAAE,IAAA,EAAM;AAAA,WAAA;AAAA,UAD5B;AAAA,SAGR;AAAA;AAAA,KAAA;AAAA,GACH;AAEJ","file":"chunk-WL6J5ZVH.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Slider as SliderPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst sliderVariants = cva(\n \"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n {\n variants: {\n size: {\n sm: \"\",\n default: \"\",\n lg: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nconst trackVariants = cva(\n \"relative grow overflow-hidden rounded-full bg-neutral-accent data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full\",\n {\n variants: {\n size: {\n sm: \"data-[orientation=horizontal]:h-1 data-[orientation=vertical]:w-1\",\n default: \"data-[orientation=horizontal]:h-1.5 data-[orientation=vertical]:w-1.5\",\n lg: \"data-[orientation=horizontal]:h-2 data-[orientation=vertical]:w-2\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nconst thumbVariants = cva(\n \"block shrink-0 rounded-full border-2 border-primary bg-neutral-bg shadow-sm ring-ring/50 transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n size: {\n sm: \"size-3.5\",\n default: \"size-4\",\n lg: \"size-5\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nexport interface SliderProps\n extends React.ComponentProps<typeof SliderPrimitive.Root>,\n VariantProps<typeof sliderVariants> {\n /** Classe de tema aplicada (ex: \"theme-brand\") */\n theme?: string\n}\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n size = \"default\",\n theme,\n ...props\n}: SliderProps) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n )\n\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(theme, sliderVariants({ size }), className)}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={trackVariants({ size })}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className=\"absolute bg-primary data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className={thumbVariants({ size })}\n />\n ))}\n </SliderPrimitive.Root>\n )\n}\n\nexport { Slider, sliderVariants }\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { cn } from './chunk-
|
|
1
|
+
import { cn } from './chunk-QTH4LSO6.js';
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
3
|
|
|
4
4
|
var sizeMap = {
|
|
@@ -34,5 +34,5 @@ function FluencypassLogo({ className, size = "md" }) {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
export { FluencypassIcon, FluencypassLogo };
|
|
37
|
-
//# sourceMappingURL=chunk-
|
|
38
|
-
//# sourceMappingURL=chunk-
|
|
37
|
+
//# sourceMappingURL=chunk-WMOGNJWP.js.map
|
|
38
|
+
//# sourceMappingURL=chunk-WMOGNJWP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/fluencypass-logo.tsx"],"names":[],"mappings":";;;AAOA,IAAM,OAAA,GAAU;AAAA,EACd,EAAA,EAAI,EAAE,IAAA,EAAM,YAAA,EAAc,MAAM,YAAA,EAAa;AAAA,EAC7C,EAAA,EAAI,EAAE,IAAA,EAAM,YAAA,EAAc,MAAM,YAAA,EAAa;AAAA,EAC7C,EAAA,EAAI,EAAE,IAAA,EAAM,YAAA,EAAc,MAAM,YAAA,EAAa;AAAA,EAC7C,EAAA,EAAI,EAAE,IAAA,EAAM,aAAA,EAAe,MAAM,YAAA,EAAa;AAAA,EAC9C,EAAA,EAAI,EAAE,IAAA,EAAM,aAAA,EAAe,MAAM,YAAA;AACnC,CAAA;AAMO,SAAS,eAAA,CAAgB,EAAE,SAAA,GAAY,YAAA,EAAa,EAA2B;AACpF,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAM,4BAAA;AAAA,MACN,SAAA;AAAA,MACA,YAAA,EAAW,aAAA;AAAA,MACX,IAAA,EAAK,KAAA;AAAA,MAEL,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yrFAAA,EAA0rF,IAAA,EAAK,SAAA,EAAS,CAAA;AAAA,wBAChtF,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4xFAAA,EAA6xF,MAAK,SAAA,EAAS;AAAA;AAAA;AAAA,GACrzF;AAEJ;AAOO,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,IAAA,GAAO,MAAK,EAAyB;AAChF,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,QAAQ,IAAI,CAAA;AACnC,EAAA,4BACG,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,WAAW,IAAA,EAAM,CAAA;AAAA,wBACjC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,IAAA,EAAM,2BAA2B,GAAG,QAAA,EAAA,aAAA,EAAW;AAAA,GAAA,EACrE,CAAA;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/fluencypass-logo.tsx"],"names":[],"mappings":";;;AAOA,IAAM,OAAA,GAAU;AAAA,EACd,EAAA,EAAI,EAAE,IAAA,EAAM,YAAA,EAAc,MAAM,YAAA,EAAa;AAAA,EAC7C,EAAA,EAAI,EAAE,IAAA,EAAM,YAAA,EAAc,MAAM,YAAA,EAAa;AAAA,EAC7C,EAAA,EAAI,EAAE,IAAA,EAAM,YAAA,EAAc,MAAM,YAAA,EAAa;AAAA,EAC7C,EAAA,EAAI,EAAE,IAAA,EAAM,aAAA,EAAe,MAAM,YAAA,EAAa;AAAA,EAC9C,EAAA,EAAI,EAAE,IAAA,EAAM,aAAA,EAAe,MAAM,YAAA;AACnC,CAAA;AAMO,SAAS,eAAA,CAAgB,EAAE,SAAA,GAAY,YAAA,EAAa,EAA2B;AACpF,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAM,4BAAA;AAAA,MACN,SAAA;AAAA,MACA,YAAA,EAAW,aAAA;AAAA,MACX,IAAA,EAAK,KAAA;AAAA,MAEL,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yrFAAA,EAA0rF,IAAA,EAAK,SAAA,EAAS,CAAA;AAAA,wBAChtF,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4xFAAA,EAA6xF,MAAK,SAAA,EAAS;AAAA;AAAA;AAAA,GACrzF;AAEJ;AAOO,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,IAAA,GAAO,MAAK,EAAyB;AAChF,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,QAAQ,IAAI,CAAA;AACnC,EAAA,4BACG,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,gCAAA,EAAkC,SAAS,CAAA,EAC7D,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,WAAW,IAAA,EAAM,CAAA;AAAA,wBACjC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,IAAA,EAAM,2BAA2B,GAAG,QAAA,EAAA,aAAA,EAAW;AAAA,GAAA,EACrE,CAAA;AAEJ","file":"chunk-WMOGNJWP.js","sourcesContent":["import { cn } from \"@/lib/utils\"\n\nexport interface FluencypassLogoProps {\n className?: string\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n}\n\nconst sizeMap = {\n xs: { icon: \"h-5 w-auto\", text: \"heading-xs\" },\n sm: { icon: \"h-7 w-auto\", text: \"heading-sm\" },\n md: { icon: \"h-8 w-auto\", text: \"heading-md\" },\n lg: { icon: \"h-10 w-auto\", text: \"heading-lg\" },\n xl: { icon: \"h-12 w-auto\", text: \"heading-xl\" },\n} as const\n\n/**\n * Fluencypass icon — the coral \"S\" shape.\n * Cor primitiva #ED6A6D, nunca muda entre temas ou modos.\n */\nexport function FluencypassIcon({ className = \"h-7 w-auto\" }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 34 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n aria-label=\"Fluencypass\"\n role=\"img\"\n >\n <path d=\"M16.4698 29.5773C17.4618 28.9147 18.259 28.094 19.0927 27.2592C21.0624 25.2916 23.0321 23.324 25.0018 21.3565C25.8802 20.4791 25.9491 18.8661 25.0018 18.0008C24.0504 17.1336 22.5838 17.0606 21.6426 18.0008C20.0725 19.5692 18.5024 21.1376 16.9323 22.706C16.2102 23.4274 15.4901 24.1528 14.7638 24.8722C14.7213 24.9147 14.6807 24.9573 14.6381 24.9978C14.49 25.1417 14.3358 25.2774 14.1817 25.4132C14.5569 25.0789 14.0214 25.5186 13.8672 25.6118C13.6745 25.7273 13.4271 25.8063 13.2526 25.9421C13.2445 25.9482 13.2404 25.9522 13.2343 25.9563C13.1532 25.9846 13.0741 26.013 12.9929 26.0393C12.7718 26.1103 12.5467 26.1711 12.3195 26.2217C12.2221 26.244 12.1227 26.2602 12.0253 26.2805C12.0071 26.2845 11.9949 26.2866 11.9787 26.2906C11.9665 26.2906 11.9523 26.2906 11.932 26.2926C11.4675 26.323 11.0111 26.321 10.5465 26.2845C10.4289 26.2643 10.3112 26.244 10.1956 26.2197C9.92176 26.1629 9.64994 26.092 9.3842 26.0069C9.28278 25.9745 9.18338 25.938 9.08195 25.9056C9.06167 25.8995 9.04544 25.8934 9.03124 25.8894C8.8081 25.7901 8.58902 25.6847 8.37603 25.5692C8.18332 25.4639 7.99264 25.3524 7.80804 25.2349C7.7127 25.1741 7.61939 25.1092 7.52608 25.0444C7.47333 25.0059 7.38408 24.9411 7.3212 24.8884C6.93983 24.5662 6.58281 24.2156 6.25622 23.8387C6.18116 23.7536 6.10814 23.6645 6.03714 23.5753C6.01685 23.5449 5.99251 23.5044 5.95803 23.4497C5.7998 23.2025 5.64158 22.9552 5.50161 22.6979C5.39815 22.5074 5.30484 22.3109 5.21153 22.1163C5.20544 22.1062 5.20342 22.0981 5.19733 22.088C5.16285 21.9887 5.12836 21.8914 5.0959 21.7921C5.01882 21.5591 4.95188 21.324 4.89508 21.0849C4.87277 20.9937 4.79365 20.5135 4.78554 20.5236C4.74903 20.0981 4.7612 19.6766 4.76931 19.247C4.76931 19.2085 4.77945 19.1336 4.78554 19.0809C4.79365 19.0383 4.79974 18.9978 4.80988 18.9552C4.86668 18.6959 4.92348 18.4385 5.00259 18.1832C5.05939 17.9968 5.29876 17.5388 5.08779 17.9178C5.20139 17.7151 5.29267 17.5003 5.41033 17.2997C5.49958 17.1498 5.59492 17.0018 5.69432 16.858C5.67809 16.9005 5.98237 16.5398 6.07568 16.4446C6.59701 15.9076 7.13457 15.3869 7.66402 14.858C9.4694 13.0545 11.2748 11.2511 13.0802 9.44765C13.9585 8.57024 14.0275 6.95727 13.0802 6.09202C12.1288 5.22475 10.6622 5.1518 9.72094 6.09202C7.99669 7.81441 6.27245 9.5368 4.55023 11.2572C3.93965 11.8671 3.31892 12.4689 2.71847 13.087C0.955687 14.8965 -0.0180045 17.3261 0.000252168 19.8509C0.0225659 23.1092 1.6251 26.244 4.0857 28.3575C7.24614 31.5145 10.4086 34.6736 13.569 37.8306C14.0701 38.3311 14.5691 38.8296 15.0702 39.3301C15.9627 40.2217 17.48 40.2217 18.3726 39.3301C19.2692 38.4345 19.2692 36.9249 18.3726 36.0312C16.6504 34.3109 14.9282 32.5905 13.208 30.8722C14.3642 30.6574 15.4779 30.2399 16.4698 29.5773ZM5.19733 22.0839C5.16285 21.9887 5.02491 21.7232 5.19733 22.0839Z\" fill=\"#ED6A6D\"/>\n <path d=\"M29.5056 11.6596C26.3391 8.49645 23.1706 5.33131 20.004 2.16819C19.503 1.66768 19.004 1.1692 18.5029 0.668693C17.6104 -0.222898 16.093 -0.222898 15.2005 0.668693C14.3039 1.56434 14.3039 3.07396 15.2005 3.96758C16.9369 5.70213 18.6733 7.43668 20.4097 9.17123C19.2393 9.38804 18.1114 9.8156 17.1134 10.5005C16.1397 11.1672 15.3526 11.9797 14.525 12.8065C12.5776 14.7518 10.6323 16.695 8.68487 18.6403C7.80652 19.5177 7.73755 21.1307 8.68487 21.9959C9.63625 22.8632 11.1029 22.9362 12.0441 21.9959C13.5898 20.4519 15.1335 18.9098 16.6793 17.3658C17.4116 16.6342 18.1398 15.9027 18.8741 15.1733C18.9208 15.1266 18.9675 15.078 19.0141 15.0334C19.1358 14.9159 19.292 14.8085 19.3995 14.6788C19.4036 14.6727 19.4076 14.6687 19.4117 14.6646C19.5131 14.5937 19.6146 14.5268 19.718 14.462C19.9188 14.3364 20.1318 14.2371 20.3367 14.1216C20.3773 14.0993 20.4037 14.0831 20.4239 14.0689C20.4463 14.0628 20.4726 14.0567 20.5091 14.0446C20.7343 13.9757 20.9554 13.9027 21.1867 13.848C21.3185 13.8156 21.4504 13.7953 21.5822 13.7649C21.5985 13.7609 21.6127 13.7589 21.6248 13.7548C22.0934 13.7143 22.5498 13.7244 23.0184 13.7487C23.0326 13.7487 23.0407 13.7487 23.0509 13.7487C23.1503 13.7649 23.2476 13.7812 23.345 13.8014C23.6229 13.8561 23.8968 13.9271 24.1666 14.0081C24.3025 14.0507 24.4384 14.0973 24.5743 14.1439C24.5804 14.1459 24.6128 14.1581 24.6494 14.1743C24.7041 14.2006 24.7934 14.2411 24.8056 14.2472C24.9354 14.3141 25.0693 14.3769 25.1971 14.4458C25.4263 14.5694 25.6494 14.7011 25.8665 14.843C25.9618 14.9037 26.0531 14.9686 26.1464 15.0314C26.1748 15.0517 26.1971 15.0659 26.2174 15.08C26.2194 15.0861 26.2357 15.1023 26.2722 15.1348C26.6515 15.4732 27.0085 15.8217 27.3493 16.1966C27.3919 16.2432 27.4244 16.2796 27.4507 16.308C27.4974 16.3728 27.5461 16.4377 27.5907 16.5046C27.7591 16.7497 27.9173 17.003 28.0613 17.2644C28.1668 17.4549 28.2622 17.6515 28.3555 17.848C28.2845 17.7082 28.4833 18.1783 28.5198 18.2898C28.5948 18.5268 28.6618 18.7639 28.7165 19.0071C28.7429 19.1206 28.8099 19.6353 28.8139 19.5765C28.8443 20.0101 28.8403 20.4377 28.8139 20.8734C28.8139 20.8794 28.8119 20.8977 28.8078 20.9179C28.7936 20.9909 28.7652 21.1368 28.7571 21.1733C28.6942 21.4367 28.6273 21.692 28.5461 21.9514C28.5238 22.0203 28.4975 22.0892 28.4731 22.1581C28.463 22.1763 28.4508 22.1966 28.4386 22.2188C28.3392 22.3951 28.254 22.5775 28.1506 22.7518C28.1161 22.8085 27.9051 23.1003 27.8524 23.1874C27.753 23.2948 27.5725 23.4914 27.5258 23.538C26.9903 24.0871 26.4405 24.6221 25.8969 25.1651C24.1159 26.9443 22.3348 28.7234 20.5538 30.5025C19.6754 31.3799 19.6064 32.9929 20.5538 33.8582C21.5051 34.7254 22.9718 34.7984 23.913 33.8582C25.6129 32.1601 27.3108 30.464 29.0107 28.766C29.6334 28.1439 30.2684 27.5279 30.883 26.8956C32.6154 25.1145 33.5749 22.7457 33.5911 20.2634C33.6134 16.9767 31.9967 13.7974 29.5077 11.6657L29.5056 11.6596Z\" fill=\"#ED6A6D\"/>\n </svg>\n )\n}\n\n/**\n * Fluencypass brand logo — coral \"S\" icon + \"Fluencypass\" text.\n * O icone e cor primitiva (#ED6A6D), nunca muda.\n * O texto adapta ao light/dark via text-foreground.\n */\nexport function FluencypassLogo({ className, size = \"md\" }: FluencypassLogoProps) {\n const { icon, text } = sizeMap[size]\n return (\n <span className={cn(\"inline-flex items-center gap-2\", className)}>\n <FluencypassIcon className={icon} />\n <span className={cn(text, \"font-bold text-foreground\")}>Fluencypass</span>\n </span>\n )\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { useReducedMotion } from './chunk-
|
|
2
|
-
import { useIntersection } from './chunk-
|
|
3
|
-
import { cn } from './chunk-
|
|
4
|
-
import { __objRest, __spreadProps, __spreadValues } from './chunk-
|
|
1
|
+
import { useReducedMotion } from './chunk-T7EIAVSF.js';
|
|
2
|
+
import { useIntersection } from './chunk-OHRYR7PN.js';
|
|
3
|
+
import { cn } from './chunk-QTH4LSO6.js';
|
|
4
|
+
import { __objRest, __spreadProps, __spreadValues } from './chunk-2NMEKWO5.js';
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
import { jsx } from 'react/jsx-runtime';
|
|
7
7
|
|
|
@@ -53,5 +53,5 @@ function StaggerReveal(_a) {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
export { StaggerReveal };
|
|
56
|
-
//# sourceMappingURL=chunk-
|
|
57
|
-
//# sourceMappingURL=chunk-
|
|
56
|
+
//# sourceMappingURL=chunk-WUK6APAX.js.map
|
|
57
|
+
//# sourceMappingURL=chunk-WUK6APAX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/marketing/motion/stagger-reveal.tsx"],"names":["_a","_b"],"mappings":";;;;;;;AAiCA,SAAS,cAAc,EAAA,EAOA;AAPA,EAAA,IAAA,EAAA,GAAA,EAAA,EACrB;AAAA,IAAA,IAAA,GAAO,GAAA;AAAA,IACP,SAAA,GAAY,IAAA;AAAA,IACZ,UAAA,GAAa,kBAAA;AAAA,IACb,SAAA;AAAA,IACA;AAAA,GAtCF,GAiCuB,EAAA,EAMlB,KAAA,GAAA,SAAA,CANkB,EAAA,EAMlB;AAAA,IALH,MAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,UAAU,gBAAA,EAAiB;AACjC,EAAA,MAAM,EAAE,GAAA,EAAK,SAAA,EAAU,GAAI,eAAA,CAAgC;AAAA,IACzD,SAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA,EAAc;AAAA,GACf,CAAA;AAED,EAAA,MAAM,WAAiB,KAAA,CAAA,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,CAAC,OAAO,CAAA,KAAM;AAhD9D,IAAA,IAAAA,GAAAA,EAAAC,GAAAA;AAiDI,IAAA,IAAI,CAAO,KAAA,CAAA,cAAA,CAAe,KAAK,CAAA,EAAG,OAAO,KAAA;AAEzC,IAAA,MAAM,OAAA,GAAU,KAAA;AAChB,IAAA,MAAM,kBAAiBD,GAAAA,GAAA,OAAA,CAAQ,KAAA,CAAM,SAAA,KAAd,OAAAA,GAAAA,GAA2B,EAAA;AAClD,IAAA,MAAM,cAAkCC,GAAAA,GAAA,OAAA,CAAQ,MAAM,KAAA,KAAd,IAAA,GAAAA,MAAuB,EAAC;AAChE,IAAA,OAAa,mBAAa,OAAA,EAAS;AAAA,MACjC,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,eAAe,CAAA;AAAA,MAC7C,KAAA,EAAO,iCACF,UAAA,CAAA,EADE;AAAA;AAAA;AAAA,QAIL,CAAC,iBAA2B,GAAG,CAAA;AAAA,QAC/B,CAAC,mBAA6B,GAAG,CAAA,EAAG,IAAI,CAAA,EAAA;AAAA,OAC1C;AAAA,KACD,CAAA;AAAA,EACH,CAAC,CAAA;AAED,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,SAAA,IAAa,kBAAA,EAAoB,SAAS;AAAA,KAAA,EACpD,KAAA,CAAA,EAHL;AAAA,MAKE,QAAA,EAAA;AAAA,KAAA;AAAA,GACH;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/marketing/motion/stagger-reveal.tsx"],"names":["_a","_b"],"mappings":";;;;;;;AAiCA,SAAS,cAAc,EAAA,EAOA;AAPA,EAAA,IAAA,EAAA,GAAA,EAAA,EACrB;AAAA,IAAA,IAAA,GAAO,GAAA;AAAA,IACP,SAAA,GAAY,IAAA;AAAA,IACZ,UAAA,GAAa,kBAAA;AAAA,IACb,SAAA;AAAA,IACA;AAAA,GAtCF,GAiCuB,EAAA,EAMlB,KAAA,GAAA,SAAA,CANkB,EAAA,EAMlB;AAAA,IALH,MAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,UAAU,gBAAA,EAAiB;AACjC,EAAA,MAAM,EAAE,GAAA,EAAK,SAAA,EAAU,GAAI,eAAA,CAAgC;AAAA,IACzD,SAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA,EAAc;AAAA,GACf,CAAA;AAED,EAAA,MAAM,WAAiB,KAAA,CAAA,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,CAAC,OAAO,CAAA,KAAM;AAhD9D,IAAA,IAAAA,GAAAA,EAAAC,GAAAA;AAiDI,IAAA,IAAI,CAAO,KAAA,CAAA,cAAA,CAAe,KAAK,CAAA,EAAG,OAAO,KAAA;AAEzC,IAAA,MAAM,OAAA,GAAU,KAAA;AAChB,IAAA,MAAM,kBAAiBD,GAAAA,GAAA,OAAA,CAAQ,KAAA,CAAM,SAAA,KAAd,OAAAA,GAAAA,GAA2B,EAAA;AAClD,IAAA,MAAM,cAAkCC,GAAAA,GAAA,OAAA,CAAQ,MAAM,KAAA,KAAd,IAAA,GAAAA,MAAuB,EAAC;AAChE,IAAA,OAAa,mBAAa,OAAA,EAAS;AAAA,MACjC,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,eAAe,CAAA;AAAA,MAC7C,KAAA,EAAO,iCACF,UAAA,CAAA,EADE;AAAA;AAAA;AAAA,QAIL,CAAC,iBAA2B,GAAG,CAAA;AAAA,QAC/B,CAAC,mBAA6B,GAAG,CAAA,EAAG,IAAI,CAAA,EAAA;AAAA,OAC1C;AAAA,KACD,CAAA;AAAA,EACH,CAAC,CAAA;AAED,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,SAAA,IAAa,kBAAA,EAAoB,SAAS;AAAA,KAAA,EACpD,KAAA,CAAA,EAHL;AAAA,MAKE,QAAA,EAAA;AAAA,KAAA;AAAA,GACH;AAEJ","file":"chunk-WUK6APAX.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { useIntersection } from \"@/hooks/use-intersection\"\nimport { useReducedMotion } from \"@/hooks/use-reduced-motion\"\n\nexport interface StaggerRevealProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Delay entre cada filho em ms. Default `100`. */\n step?: number\n /** Fracao do container que precisa estar visivel pra disparar. Default `0.15`. */\n threshold?: number\n /** Margin do viewport (CSS shorthand). Default `\"0px 0px -10% 0px\"`. */\n rootMargin?: string\n}\n\n/**\n * Container que anima seus filhos entrando em sequencia (fade-up com delay\n * incremental). Clona cada filho valido e injeta `--stagger-index` como CSS\n * variable; a animacao acontece via `.stagger-child` em `globals.css`.\n *\n * O `step` (default 100ms) controla o espacamento entre cada filho:\n * - 1o filho: delay 0\n * - 2o filho: delay 100ms\n * - 3o filho: delay 200ms ...\n *\n * Note que o `step` so afeta visualmente quando o CSS usa\n * `calc(var(--stagger-index) * Xms)` — atualmente o globals usa `100ms`\n * fixo (o step prop sobrescreve via inline style se necessario).\n *\n * Acessibilidade: respeita `prefers-reduced-motion` — filhos ja entram visiveis.\n */\nfunction StaggerReveal({\n step = 100,\n threshold = 0.15,\n rootMargin = \"0px 0px -10% 0px\",\n className,\n children,\n ...props\n}: StaggerRevealProps) {\n const reduced = useReducedMotion()\n const { ref, isVisible } = useIntersection<HTMLDivElement>({\n threshold,\n rootMargin,\n startVisible: reduced,\n })\n\n const enhanced = React.Children.map(children, (child, i) => {\n if (!React.isValidElement(child)) return child\n type ChildProps = { className?: string; style?: React.CSSProperties }\n const element = child as React.ReactElement<ChildProps>\n const childClassName = element.props.className ?? \"\"\n const childStyle: React.CSSProperties = element.props.style ?? {}\n return React.cloneElement(element, {\n className: cn(childClassName, \"stagger-child\"),\n style: {\n ...childStyle,\n // `--stagger-index` e usada por .stagger-revealed .stagger-child no CSS.\n // `--stagger-step-ms` permite override do espacamento por instancia.\n [\"--stagger-index\" as string]: i,\n [\"--stagger-step-ms\" as string]: `${step}ms`,\n },\n })\n })\n\n return (\n <div\n ref={ref}\n className={cn(isVisible && \"stagger-revealed\", className)}\n {...props}\n >\n {enhanced}\n </div>\n )\n}\n\nexport { StaggerReveal }\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { cn } from './chunk-
|
|
2
|
-
import { __objRest, __spreadValues } from './chunk-
|
|
1
|
+
import { cn } from './chunk-QTH4LSO6.js';
|
|
2
|
+
import { __objRest, __spreadValues } from './chunk-2NMEKWO5.js';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -29,5 +29,5 @@ var Section = React.forwardRef(function Section2(_a, ref) {
|
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
export { Section };
|
|
32
|
-
//# sourceMappingURL=chunk-
|
|
33
|
-
//# sourceMappingURL=chunk-
|
|
32
|
+
//# sourceMappingURL=chunk-XDJ2E6KQ.js.map
|
|
33
|
+
//# sourceMappingURL=chunk-XDJ2E6KQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/marketing/layout/section.tsx"],"names":["Section"],"mappings":";;;;;AAoCA,IAAM,OAAA,GAAgB,KAAA,CAAA,UAAA,CAAsC,SAASA,QAAAA,CACnE,IACA,GAAA,EACA;AAFA,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,OAAK,SAAA,EAAW,OAAA,GAAU,SAAA,EAAW,IAAA,GAAO,QAAQ,EAAA,EAAI,SAAA,EArC5D,GAqCE,EAAA,EAAwE,kBAAxE,EAAA,EAAwE,CAAtE,IAAA,EAAgB,SAAA,EAAqB,QAAe,IAAA,EAAI,WAAA,CAAA,CAAA;AAG1D,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,GAAA;AAAA,MACA,EAAA;AAAA,MACA,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA;AAAA,QAET,iBAAA;AAAA;AAAA,QAEA,YAAY,MAAA,IAAU,wCAAA;AAAA,QACtB,YAAY,SAAA,IAAa,4BAAA;AAAA;AAAA,QAEzB,SAAS,OAAA,IAAW,eAAA;AAAA,QACpB;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ,CAAC","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/marketing/layout/section.tsx"],"names":["Section"],"mappings":";;;;;AAoCA,IAAM,OAAA,GAAgB,KAAA,CAAA,UAAA,CAAsC,SAASA,QAAAA,CACnE,IACA,GAAA,EACA;AAFA,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,OAAK,SAAA,EAAW,OAAA,GAAU,SAAA,EAAW,IAAA,GAAO,QAAQ,EAAA,EAAI,SAAA,EArC5D,GAqCE,EAAA,EAAwE,kBAAxE,EAAA,EAAwE,CAAtE,IAAA,EAAgB,SAAA,EAAqB,QAAe,IAAA,EAAI,WAAA,CAAA,CAAA;AAG1D,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,GAAA;AAAA,MACA,EAAA;AAAA,MACA,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA;AAAA,QAET,iBAAA;AAAA;AAAA,QAEA,YAAY,MAAA,IAAU,wCAAA;AAAA,QACtB,YAAY,SAAA,IAAa,4BAAA;AAAA;AAAA,QAEzB,SAAS,OAAA,IAAW,eAAA;AAAA,QACpB;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ,CAAC","file":"chunk-XDJ2E6KQ.js","sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport interface SectionProps extends React.HTMLAttributes<HTMLElement> {\n /** Tag HTML renderizada. Default `\"section\"`. */\n as?: \"section\" | \"div\"\n /**\n * Forma da dobra:\n * - `\"hero\"`: `min-h-screen flex flex-col` (primeira dobra acima do fold).\n * - `\"default\"`: padding vertical generoso (`py-20 md:py-28`) — usado nas demais.\n */\n variant?: \"hero\" | \"default\"\n /**\n * Aplica `.light-surface` quando `\"light\"` — sobrescreve os tokens semanticos\n * pra um fundo claro dentro de tema dark global. `\"dark\"` nao aplica nada\n * (segue o tema do root).\n */\n tone?: \"dark\" | \"light\"\n}\n\n/**\n * Wrapper de uma \"dobra\" de landing page. Generaliza o `HomeSection` do\n * `fluencypass-corporate-site`: padroniza padding/altura via `variant` e\n * permite alternar bg dark/light por dobra via `tone`.\n *\n * Pareie com `SectionHeading`, `SectionEyebrow`, `SectionSubtitle` pra montar\n * o cabecalho da dobra com tipografia consistente.\n *\n * @example\n * <Section id=\"pilares\" variant=\"default\" tone=\"light\">\n * <SectionEyebrow>O que oferecemos</SectionEyebrow>\n * <SectionHeading>3 pilares essenciais</SectionHeading>\n * <div className=\"grid md:grid-cols-3 gap-6\">...</div>\n * </Section>\n */\nconst Section = React.forwardRef<HTMLElement, SectionProps>(function Section(\n { as = \"section\", variant = \"default\", tone = \"dark\", id, className, ...props },\n ref\n) {\n const Tag = as as React.ElementType\n return (\n <Tag\n ref={ref}\n id={id}\n data-slot=\"marketing-section\"\n data-variant={variant}\n data-tone={tone}\n className={cn(\n // base\n \"relative w-full\",\n // variants\n variant === \"hero\" && \"min-h-screen flex flex-col scroll-mt-0\",\n variant === \"default\" && \"py-20 md:py-28 scroll-mt-8\",\n // tone\n tone === \"light\" && \"light-surface\",\n className\n )}\n {...props}\n />\n )\n})\n\nexport { Section }\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { CycleIcon } from './chunk-
|
|
2
|
-
import { Button } from './chunk-
|
|
3
|
-
import { Textarea } from './chunk-
|
|
4
|
-
import { cn } from './chunk-
|
|
5
|
-
import { __objRest, __spreadProps, __spreadValues } from './chunk-
|
|
1
|
+
import { CycleIcon } from './chunk-IGFCIAF3.js';
|
|
2
|
+
import { Button } from './chunk-3TSOMZJO.js';
|
|
3
|
+
import { Textarea } from './chunk-LBMPZDD5.js';
|
|
4
|
+
import { cn } from './chunk-QTH4LSO6.js';
|
|
5
|
+
import { __objRest, __spreadProps, __spreadValues } from './chunk-2NMEKWO5.js';
|
|
6
6
|
import * as React from 'react';
|
|
7
7
|
import { cva } from 'class-variance-authority';
|
|
8
8
|
import { ThumbsUp, ThumbsDown, Check, X } from 'lucide-react';
|
|
@@ -253,5 +253,5 @@ function LikeDislike(_a) {
|
|
|
253
253
|
}
|
|
254
254
|
|
|
255
255
|
export { LikeDislike, likeDislikeVariants };
|
|
256
|
-
//# sourceMappingURL=chunk-
|
|
257
|
-
//# sourceMappingURL=chunk-
|
|
256
|
+
//# sourceMappingURL=chunk-XMZVSCCY.js.map
|
|
257
|
+
//# sourceMappingURL=chunk-XMZVSCCY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ui/like-dislike.tsx"],"names":["e"],"mappings":"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","file":"chunk-F2XA2Z75.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { ThumbsUp, ThumbsDown, X, Check } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { CycleIcon } from \"@/components/icons\"\nimport { Button } from \"@/components/ui/button\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\n/* ---------------------------------- CVA ---------------------------------- */\n\nconst likeDislikeVariants = cva(\"inline-flex flex-col\", {\n variants: {\n size: {\n default: \"gap-2\",\n xs: \"gap-1.5\",\n sm: \"gap-1.5\",\n lg: \"gap-3\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n})\n\n/** Maps component size → toggle button dimensions + icon size + burst ray size */\nconst sizeConfig = {\n xs: { iconBtn: \"size-6\", icon: \"xs\" as const, text: \"text-xs\", rayH: \"h-1\", rayW: \"w-[2px]\" },\n sm: { iconBtn: \"size-8\", icon: \"xs\" as const, text: \"text-xs\", rayH: \"h-1.5\", rayW: \"w-[2px]\" },\n default: { iconBtn: \"size-10\", icon: \"sm\" as const, text: \"text-sm\", rayH: \"h-2\", rayW: \"w-[2px]\" },\n lg: { iconBtn: \"size-12\", icon: \"sm\" as const, text: \"text-base\", rayH: \"h-2.5\", rayW: \"w-[3px]\" },\n} as const\n\n/** Angles and colors for the burst rays */\nconst BURST_RAYS = [\n { angle: 0, delay: \"0ms\" },\n { angle: 45, delay: \"30ms\" },\n { angle: 90, delay: \"60ms\" },\n { angle: 135, delay: \"20ms\" },\n { angle: 180, delay: \"50ms\" },\n { angle: 225, delay: \"10ms\" },\n { angle: 270, delay: \"40ms\" },\n { angle: 315, delay: \"25ms\" },\n]\n\n/* -------------------------------- Types --------------------------------- */\n\nexport type LikeDislikeValue = \"like\" | \"dislike\" | null\n\nexport interface LikeDislikeProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\" | \"defaultValue\">,\n VariantProps<typeof likeDislikeVariants> {\n /** Current value — controlled */\n value?: LikeDislikeValue\n /** Default value — uncontrolled */\n defaultValue?: LikeDislikeValue\n /** Called when the value changes */\n onValueChange?: (value: LikeDislikeValue) => void\n /** Show feedback textarea when dislike is selected */\n showFeedback?: boolean\n /** Placeholder for the feedback textarea */\n feedbackPlaceholder?: string\n /** Label for the feedback submit button */\n feedbackSubmitLabel?: string\n /** Called when feedback is submitted. Can return a Promise for async handling. */\n onFeedbackSubmit?: (feedback: string) => void | Promise<void>\n /** Message shown after feedback is submitted */\n feedbackSuccessMessage?: string\n /** Delay in ms before auto-closing after submit. Default: 2000. Set 0 to disable. */\n feedbackAutoCloseDelay?: number\n /** Theme class for the burst animation rays (e.g. \"theme-brand\"). Default: \"theme-brand\" */\n burstTheme?: string\n /** Disabled state */\n disabled?: boolean\n}\n\n/* ------------------------------ Component ------------------------------- */\n\nfunction LikeDislike({\n className,\n size = \"default\",\n value: valueProp,\n defaultValue = null,\n onValueChange,\n showFeedback = false,\n feedbackPlaceholder = \"O que voce nao gostou?\",\n feedbackSubmitLabel = \"Enviar\",\n onFeedbackSubmit,\n feedbackSuccessMessage = \"Obrigado pelo feedback!\",\n feedbackAutoCloseDelay = 2000,\n burstTheme = \"theme-brand\",\n disabled = false,\n ...props\n}: LikeDislikeProps) {\n /* --- State --- */\n const isControlled = valueProp !== undefined\n const [internalValue, setInternalValue] = React.useState<LikeDislikeValue>(defaultValue)\n const currentValue = isControlled ? valueProp : internalValue\n\n const [feedbackText, setFeedbackText] = React.useState(\"\")\n const [isBursting, setIsBursting] = React.useState(false)\n const [feedbackDismissed, setFeedbackDismissed] = React.useState(false)\n const [feedbackStatus, setFeedbackStatus] = React.useState<\"idle\" | \"submitting\" | \"submitted\">(\"idle\")\n const autoCloseTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const s = sizeConfig[size ?? \"default\"]\n\n /* --- Handlers --- */\n function handleClick(target: \"like\" | \"dislike\") {\n if (disabled) return\n const next: LikeDislikeValue = currentValue === target ? null : target\n\n if (!isControlled) setInternalValue(next)\n onValueChange?.(next)\n setFeedbackDismissed(false)\n setFeedbackStatus(\"idle\")\n setFeedbackText(\"\")\n if (autoCloseTimerRef.current) clearTimeout(autoCloseTimerRef.current)\n\n // Trigger burst animation when transitioning TO like\n if (target === \"like\" && next === \"like\") {\n setIsBursting(true)\n }\n }\n\n function handleBurstEnd() {\n setIsBursting(false)\n }\n\n // Cleanup auto-close timer\n React.useEffect(() => {\n return () => {\n if (autoCloseTimerRef.current) clearTimeout(autoCloseTimerRef.current)\n }\n }, [])\n\n async function handleFeedbackSubmit(e: React.FormEvent) {\n e.preventDefault()\n if (!feedbackText.trim() || feedbackStatus === \"submitting\") return\n\n setFeedbackStatus(\"submitting\")\n try {\n await onFeedbackSubmit?.(feedbackText.trim())\n setFeedbackStatus(\"submitted\")\n setFeedbackText(\"\")\n\n // Auto-close after delay\n if (feedbackAutoCloseDelay > 0) {\n autoCloseTimerRef.current = setTimeout(() => {\n setFeedbackDismissed(true)\n setFeedbackStatus(\"idle\")\n }, feedbackAutoCloseDelay)\n }\n } catch {\n // If the callback throws, reset to idle so the user can retry\n setFeedbackStatus(\"idle\")\n }\n }\n\n const isLiked = currentValue === \"like\"\n const isDisliked = currentValue === \"dislike\"\n const showFeedbackPanel = isDisliked && showFeedback && !feedbackDismissed\n\n /* --- Shared button classes --- */\n const btnBase = cn(\n \"relative inline-flex shrink-0 items-center justify-center rounded-lg transition-[color,box-shadow,background-color] outline-none cursor-pointer\",\n \"hover:bg-muted hover:text-muted-foreground\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n s.iconBtn\n )\n\n return (\n <div\n data-slot=\"like-dislike\"\n className={cn(\"relative inline-flex\", className)}\n {...props}\n >\n {/* Button row */}\n <div className=\"inline-flex items-center gap-1\" role=\"group\" aria-label=\"Avaliar conteudo\">\n {/* Like */}\n <button\n type=\"button\"\n aria-pressed={isLiked}\n aria-label=\"Gostei\"\n disabled={disabled}\n onClick={() => handleClick(\"like\")}\n className={cn(\n btnBase,\n isLiked && \"bg-accent text-accent-foreground [&_svg]:fill-current\"\n )}\n >\n {/* Burst rays (behind the icon) */}\n {isBursting && (\n <span\n className={cn(\"absolute inset-0 z-0 pointer-events-none\", burstTheme)}\n aria-hidden=\"true\"\n >\n {BURST_RAYS.map(({ angle, delay }) => (\n <span\n key={angle}\n className=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2\"\n style={{ rotate: `${angle}deg` }}\n >\n <span\n className={cn(\n \"block rounded-full bg-primary opacity-0 animate-like-burst\",\n s.rayW, s.rayH\n )}\n style={{ animationDelay: delay }}\n />\n </span>\n ))}\n </span>\n )}\n\n {/* Icon with pop animation (above rays) */}\n <span\n className={cn(\"relative z-10\", isBursting && \"animate-like-pop\")}\n onAnimationEnd={handleBurstEnd}\n >\n <CycleIcon icon={ThumbsUp} size={s.icon} decorative />\n </span>\n </button>\n\n {/* Dislike */}\n <button\n type=\"button\"\n aria-pressed={isDisliked}\n aria-label=\"Nao gostei\"\n disabled={disabled}\n onClick={() => handleClick(\"dislike\")}\n className={cn(\n btnBase,\n isDisliked && \"bg-accent text-accent-foreground [&_svg]:fill-current\"\n )}\n >\n <CycleIcon icon={ThumbsDown} size={s.icon} decorative />\n </button>\n </div>\n\n {/* Floating feedback panel */}\n {showFeedbackPanel && (\n <div className=\"absolute left-0 top-full z-50 mt-2 w-72 rounded-lg border border-border bg-background p-3 shadow-md animate-in fade-in-0 zoom-in-95 slide-in-from-top-2\">\n {feedbackStatus === \"submitted\" ? (\n /* --- Success state --- */\n <div className=\"flex items-center gap-2 py-2\">\n <span className=\"inline-flex size-5 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground\">\n <CycleIcon icon={Check} size=\"xs\" decorative />\n </span>\n <p className={cn(\"text-foreground\", s.text)}>\n {feedbackSuccessMessage}\n </p>\n </div>\n ) : (\n /* --- Form state --- */\n <>\n <div className=\"flex items-center justify-between mb-2\">\n <p className={cn(\"font-medium text-foreground\", s.text)}>\n {feedbackPlaceholder}\n </p>\n <button\n type=\"button\"\n onClick={() => setFeedbackDismissed(true)}\n className=\"inline-flex size-6 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer\"\n aria-label=\"Fechar\"\n >\n <CycleIcon icon={X} size=\"xs\" decorative />\n </button>\n </div>\n <form onSubmit={handleFeedbackSubmit} className=\"flex flex-col gap-2\">\n <Textarea\n textareaSize=\"sm\"\n value={feedbackText}\n onChange={(e) => setFeedbackText(e.target.value)}\n placeholder=\"Conte-nos mais...\"\n disabled={disabled || feedbackStatus === \"submitting\"}\n className=\"resize-none min-h-[60px]\"\n aria-label=\"Feedback\"\n />\n <div className=\"flex justify-end\">\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={disabled || !feedbackText.trim() || feedbackStatus === \"submitting\"}\n >\n {feedbackStatus === \"submitting\" ? \"Enviando...\" : feedbackSubmitLabel}\n </Button>\n </div>\n </form>\n </>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport { LikeDislike, likeDislikeVariants }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/like-dislike.tsx"],"names":["e"],"mappings":"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","file":"chunk-XMZVSCCY.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { ThumbsUp, ThumbsDown, X, Check } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { CycleIcon } from \"@/components/icons\"\nimport { Button } from \"@/components/ui/button\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\n/* ---------------------------------- CVA ---------------------------------- */\n\nconst likeDislikeVariants = cva(\"inline-flex flex-col\", {\n variants: {\n size: {\n default: \"gap-2\",\n xs: \"gap-1.5\",\n sm: \"gap-1.5\",\n lg: \"gap-3\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n})\n\n/** Maps component size → toggle button dimensions + icon size + burst ray size */\nconst sizeConfig = {\n xs: { iconBtn: \"size-6\", icon: \"xs\" as const, text: \"text-xs\", rayH: \"h-1\", rayW: \"w-[2px]\" },\n sm: { iconBtn: \"size-8\", icon: \"xs\" as const, text: \"text-xs\", rayH: \"h-1.5\", rayW: \"w-[2px]\" },\n default: { iconBtn: \"size-10\", icon: \"sm\" as const, text: \"text-sm\", rayH: \"h-2\", rayW: \"w-[2px]\" },\n lg: { iconBtn: \"size-12\", icon: \"sm\" as const, text: \"text-base\", rayH: \"h-2.5\", rayW: \"w-[3px]\" },\n} as const\n\n/** Angles and colors for the burst rays */\nconst BURST_RAYS = [\n { angle: 0, delay: \"0ms\" },\n { angle: 45, delay: \"30ms\" },\n { angle: 90, delay: \"60ms\" },\n { angle: 135, delay: \"20ms\" },\n { angle: 180, delay: \"50ms\" },\n { angle: 225, delay: \"10ms\" },\n { angle: 270, delay: \"40ms\" },\n { angle: 315, delay: \"25ms\" },\n]\n\n/* -------------------------------- Types --------------------------------- */\n\nexport type LikeDislikeValue = \"like\" | \"dislike\" | null\n\nexport interface LikeDislikeProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\" | \"defaultValue\">,\n VariantProps<typeof likeDislikeVariants> {\n /** Current value — controlled */\n value?: LikeDislikeValue\n /** Default value — uncontrolled */\n defaultValue?: LikeDislikeValue\n /** Called when the value changes */\n onValueChange?: (value: LikeDislikeValue) => void\n /** Show feedback textarea when dislike is selected */\n showFeedback?: boolean\n /** Placeholder for the feedback textarea */\n feedbackPlaceholder?: string\n /** Label for the feedback submit button */\n feedbackSubmitLabel?: string\n /** Called when feedback is submitted. Can return a Promise for async handling. */\n onFeedbackSubmit?: (feedback: string) => void | Promise<void>\n /** Message shown after feedback is submitted */\n feedbackSuccessMessage?: string\n /** Delay in ms before auto-closing after submit. Default: 2000. Set 0 to disable. */\n feedbackAutoCloseDelay?: number\n /** Theme class for the burst animation rays (e.g. \"theme-brand\"). Default: \"theme-brand\" */\n burstTheme?: string\n /** Disabled state */\n disabled?: boolean\n}\n\n/* ------------------------------ Component ------------------------------- */\n\nfunction LikeDislike({\n className,\n size = \"default\",\n value: valueProp,\n defaultValue = null,\n onValueChange,\n showFeedback = false,\n feedbackPlaceholder = \"O que voce nao gostou?\",\n feedbackSubmitLabel = \"Enviar\",\n onFeedbackSubmit,\n feedbackSuccessMessage = \"Obrigado pelo feedback!\",\n feedbackAutoCloseDelay = 2000,\n burstTheme = \"theme-brand\",\n disabled = false,\n ...props\n}: LikeDislikeProps) {\n /* --- State --- */\n const isControlled = valueProp !== undefined\n const [internalValue, setInternalValue] = React.useState<LikeDislikeValue>(defaultValue)\n const currentValue = isControlled ? valueProp : internalValue\n\n const [feedbackText, setFeedbackText] = React.useState(\"\")\n const [isBursting, setIsBursting] = React.useState(false)\n const [feedbackDismissed, setFeedbackDismissed] = React.useState(false)\n const [feedbackStatus, setFeedbackStatus] = React.useState<\"idle\" | \"submitting\" | \"submitted\">(\"idle\")\n const autoCloseTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const s = sizeConfig[size ?? \"default\"]\n\n /* --- Handlers --- */\n function handleClick(target: \"like\" | \"dislike\") {\n if (disabled) return\n const next: LikeDislikeValue = currentValue === target ? null : target\n\n if (!isControlled) setInternalValue(next)\n onValueChange?.(next)\n setFeedbackDismissed(false)\n setFeedbackStatus(\"idle\")\n setFeedbackText(\"\")\n if (autoCloseTimerRef.current) clearTimeout(autoCloseTimerRef.current)\n\n // Trigger burst animation when transitioning TO like\n if (target === \"like\" && next === \"like\") {\n setIsBursting(true)\n }\n }\n\n function handleBurstEnd() {\n setIsBursting(false)\n }\n\n // Cleanup auto-close timer\n React.useEffect(() => {\n return () => {\n if (autoCloseTimerRef.current) clearTimeout(autoCloseTimerRef.current)\n }\n }, [])\n\n async function handleFeedbackSubmit(e: React.FormEvent) {\n e.preventDefault()\n if (!feedbackText.trim() || feedbackStatus === \"submitting\") return\n\n setFeedbackStatus(\"submitting\")\n try {\n await onFeedbackSubmit?.(feedbackText.trim())\n setFeedbackStatus(\"submitted\")\n setFeedbackText(\"\")\n\n // Auto-close after delay\n if (feedbackAutoCloseDelay > 0) {\n autoCloseTimerRef.current = setTimeout(() => {\n setFeedbackDismissed(true)\n setFeedbackStatus(\"idle\")\n }, feedbackAutoCloseDelay)\n }\n } catch {\n // If the callback throws, reset to idle so the user can retry\n setFeedbackStatus(\"idle\")\n }\n }\n\n const isLiked = currentValue === \"like\"\n const isDisliked = currentValue === \"dislike\"\n const showFeedbackPanel = isDisliked && showFeedback && !feedbackDismissed\n\n /* --- Shared button classes --- */\n const btnBase = cn(\n \"relative inline-flex shrink-0 items-center justify-center rounded-lg transition-[color,box-shadow,background-color] outline-none cursor-pointer\",\n \"hover:bg-muted hover:text-muted-foreground\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n s.iconBtn\n )\n\n return (\n <div\n data-slot=\"like-dislike\"\n className={cn(\"relative inline-flex\", className)}\n {...props}\n >\n {/* Button row */}\n <div className=\"inline-flex items-center gap-1\" role=\"group\" aria-label=\"Avaliar conteudo\">\n {/* Like */}\n <button\n type=\"button\"\n aria-pressed={isLiked}\n aria-label=\"Gostei\"\n disabled={disabled}\n onClick={() => handleClick(\"like\")}\n className={cn(\n btnBase,\n isLiked && \"bg-accent text-accent-foreground [&_svg]:fill-current\"\n )}\n >\n {/* Burst rays (behind the icon) */}\n {isBursting && (\n <span\n className={cn(\"absolute inset-0 z-0 pointer-events-none\", burstTheme)}\n aria-hidden=\"true\"\n >\n {BURST_RAYS.map(({ angle, delay }) => (\n <span\n key={angle}\n className=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2\"\n style={{ rotate: `${angle}deg` }}\n >\n <span\n className={cn(\n \"block rounded-full bg-primary opacity-0 animate-like-burst\",\n s.rayW, s.rayH\n )}\n style={{ animationDelay: delay }}\n />\n </span>\n ))}\n </span>\n )}\n\n {/* Icon with pop animation (above rays) */}\n <span\n className={cn(\"relative z-10\", isBursting && \"animate-like-pop\")}\n onAnimationEnd={handleBurstEnd}\n >\n <CycleIcon icon={ThumbsUp} size={s.icon} decorative />\n </span>\n </button>\n\n {/* Dislike */}\n <button\n type=\"button\"\n aria-pressed={isDisliked}\n aria-label=\"Nao gostei\"\n disabled={disabled}\n onClick={() => handleClick(\"dislike\")}\n className={cn(\n btnBase,\n isDisliked && \"bg-accent text-accent-foreground [&_svg]:fill-current\"\n )}\n >\n <CycleIcon icon={ThumbsDown} size={s.icon} decorative />\n </button>\n </div>\n\n {/* Floating feedback panel */}\n {showFeedbackPanel && (\n <div className=\"absolute left-0 top-full z-50 mt-2 w-72 rounded-lg border border-border bg-background p-3 shadow-md animate-in fade-in-0 zoom-in-95 slide-in-from-top-2\">\n {feedbackStatus === \"submitted\" ? (\n /* --- Success state --- */\n <div className=\"flex items-center gap-2 py-2\">\n <span className=\"inline-flex size-5 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground\">\n <CycleIcon icon={Check} size=\"xs\" decorative />\n </span>\n <p className={cn(\"text-foreground\", s.text)}>\n {feedbackSuccessMessage}\n </p>\n </div>\n ) : (\n /* --- Form state --- */\n <>\n <div className=\"flex items-center justify-between mb-2\">\n <p className={cn(\"font-medium text-foreground\", s.text)}>\n {feedbackPlaceholder}\n </p>\n <button\n type=\"button\"\n onClick={() => setFeedbackDismissed(true)}\n className=\"inline-flex size-6 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer\"\n aria-label=\"Fechar\"\n >\n <CycleIcon icon={X} size=\"xs\" decorative />\n </button>\n </div>\n <form onSubmit={handleFeedbackSubmit} className=\"flex flex-col gap-2\">\n <Textarea\n textareaSize=\"sm\"\n value={feedbackText}\n onChange={(e) => setFeedbackText(e.target.value)}\n placeholder=\"Conte-nos mais...\"\n disabled={disabled || feedbackStatus === \"submitting\"}\n className=\"resize-none min-h-[60px]\"\n aria-label=\"Feedback\"\n />\n <div className=\"flex justify-end\">\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={disabled || !feedbackText.trim() || feedbackStatus === \"submitting\"}\n >\n {feedbackStatus === \"submitting\" ? \"Enviando...\" : feedbackSubmitLabel}\n </Button>\n </div>\n </form>\n </>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport { LikeDislike, likeDislikeVariants }\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { useReducedMotion } from './chunk-
|
|
2
|
-
import { useIntersection } from './chunk-
|
|
3
|
-
import { cn } from './chunk-
|
|
4
|
-
import { __objRest, __spreadProps, __spreadValues } from './chunk-
|
|
1
|
+
import { useReducedMotion } from './chunk-T7EIAVSF.js';
|
|
2
|
+
import { useIntersection } from './chunk-OHRYR7PN.js';
|
|
3
|
+
import { cn } from './chunk-QTH4LSO6.js';
|
|
4
|
+
import { __objRest, __spreadProps, __spreadValues } from './chunk-2NMEKWO5.js';
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
import { jsxs } from 'react/jsx-runtime';
|
|
7
7
|
|
|
@@ -73,5 +73,5 @@ function AnimatedNumber(_a) {
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
export { AnimatedNumber };
|
|
76
|
-
//# sourceMappingURL=chunk-
|
|
77
|
-
//# sourceMappingURL=chunk-
|
|
76
|
+
//# sourceMappingURL=chunk-XXTQV27H.js.map
|
|
77
|
+
//# sourceMappingURL=chunk-XXTQV27H.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/marketing/motion/animated-number.tsx"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/marketing/motion/animated-number.tsx"],"names":[],"mappings":"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","file":"chunk-XXTQV27H.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { useIntersection } from \"@/hooks/use-intersection\"\nimport { useReducedMotion } from \"@/hooks/use-reduced-motion\"\n\nexport interface AnimatedNumberProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Valor final do contador. */\n value: number\n /** Valor inicial. Default `0`. */\n from?: number\n /** Duracao da animacao em ms. Default `1400`. */\n duration?: number\n /** Texto antes do numero (ex: `\"R$ \"` ou `\"+\"`). */\n prefix?: string\n /** Texto depois do numero (ex: `\"%\"` ou `\"k\"`). */\n suffix?: string\n /** Casas decimais. Default `0`. */\n decimals?: number\n /**\n * Formato dos numeros. `\"pt-BR\"` usa separador `.` e decimal `,`;\n * `\"plain\"` usa `toFixed`. Default `\"pt-BR\"`.\n */\n locale?: \"pt-BR\" | \"plain\"\n /** Threshold do IntersectionObserver. Default `0.4`. */\n threshold?: number\n}\n\nfunction easeOutCubic(t: number): number {\n return 1 - Math.pow(1 - t, 3)\n}\n\nfunction formatNumber(n: number, decimals: number, locale: \"pt-BR\" | \"plain\"): string {\n if (locale === \"pt-BR\") {\n return n.toLocaleString(\"pt-BR\", {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n })\n }\n return n.toFixed(decimals)\n}\n\n/**\n * Conta de `from` ate `value` com easing `easeOutCubic` quando o componente\n * entra no viewport. Aplica `tabular-nums` automaticamente pra largura estavel\n * durante a contagem (evita \"saltos\" no layout).\n *\n * Acessibilidade: respeita `prefers-reduced-motion` — pula direto pro valor\n * final, sem animar.\n */\nfunction AnimatedNumber({\n value,\n from = 0,\n duration = 1400,\n prefix = \"\",\n suffix = \"\",\n decimals = 0,\n locale = \"pt-BR\",\n threshold = 0.4,\n className,\n ...props\n}: AnimatedNumberProps) {\n const reduced = useReducedMotion()\n const { ref, isVisible } = useIntersection<HTMLSpanElement>({\n threshold,\n startVisible: reduced,\n })\n const [current, setCurrent] = React.useState(reduced ? value : from)\n const startedRef = React.useRef(false)\n\n React.useEffect(() => {\n if (reduced) {\n setCurrent(value)\n return\n }\n if (!isVisible || startedRef.current) return\n startedRef.current = true\n\n const start = performance.now()\n let frame = 0\n const tick = (now: number) => {\n const elapsed = now - start\n const t = Math.min(elapsed / duration, 1)\n const next = from + (value - from) * easeOutCubic(t)\n setCurrent(next)\n if (t < 1) frame = requestAnimationFrame(tick)\n }\n frame = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(frame)\n }, [isVisible, value, from, duration, reduced])\n\n return (\n <span ref={ref} className={cn(\"tabular-nums\", className)} {...props}>\n {prefix}\n {formatNumber(current, decimals, locale)}\n {suffix}\n </span>\n )\n}\n\nexport { AnimatedNumber }\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { cn } from './chunk-
|
|
2
|
-
import { __objRest, __spreadProps, __spreadValues } from './chunk-
|
|
1
|
+
import { cn } from './chunk-QTH4LSO6.js';
|
|
2
|
+
import { __objRest, __spreadProps, __spreadValues } from './chunk-2NMEKWO5.js';
|
|
3
3
|
import { ScrollArea as ScrollArea$1 } from 'radix-ui';
|
|
4
4
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -64,5 +64,5 @@ function ScrollBar(_a) {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
export { ScrollArea, ScrollBar };
|
|
67
|
-
//# sourceMappingURL=chunk-
|
|
68
|
-
//# sourceMappingURL=chunk-
|
|
67
|
+
//# sourceMappingURL=chunk-Y33BGBHR.js.map
|
|
68
|
+
//# sourceMappingURL=chunk-Y33BGBHR.js.map
|