@fluencypassdevs/cycle 1.10.0 → 1.15.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.
- package/bin/mcp.mjs +225 -9
- package/dist/chunk-5HPZCREI.js +55 -0
- package/dist/chunk-5HPZCREI.js.map +1 -0
- package/dist/chunk-6JH4YWWX.js +29 -0
- package/dist/chunk-6JH4YWWX.js.map +1 -0
- package/dist/chunk-7LH7PSQS.js +77 -0
- package/dist/chunk-7LH7PSQS.js.map +1 -0
- package/dist/{chunk-YMWRR7ET.js → chunk-CG7NXMBC.js} +18 -23
- package/dist/chunk-CG7NXMBC.js.map +1 -0
- package/dist/{chunk-27PO7X4G.js → chunk-CWMXYPWK.js} +101 -11
- package/dist/chunk-CWMXYPWK.js.map +1 -0
- package/dist/chunk-EACBYVLK.js +29 -0
- package/dist/chunk-EACBYVLK.js.map +1 -0
- package/dist/chunk-HDCU6QSG.js +24 -0
- package/dist/chunk-HDCU6QSG.js.map +1 -0
- package/dist/{chunk-U4QKU5RB.js → chunk-JGUDRAWA.js} +81 -23
- package/dist/chunk-JGUDRAWA.js.map +1 -0
- package/dist/chunk-K2NUBNSA.js +17 -0
- package/dist/chunk-K2NUBNSA.js.map +1 -0
- package/dist/chunk-NW56QDQM.js +64 -0
- package/dist/chunk-NW56QDQM.js.map +1 -0
- package/dist/chunk-NZXP7BAH.js +33 -0
- package/dist/chunk-NZXP7BAH.js.map +1 -0
- package/dist/chunk-TPRZMMT6.js +57 -0
- package/dist/chunk-TPRZMMT6.js.map +1 -0
- package/dist/chunk-UJ6OER6O.js +49 -0
- package/dist/chunk-UJ6OER6O.js.map +1 -0
- package/dist/chunk-VXWMC2NK.js +24 -0
- package/dist/chunk-VXWMC2NK.js.map +1 -0
- package/dist/chunk-VYHRNO77.js +27 -0
- package/dist/chunk-VYHRNO77.js.map +1 -0
- package/dist/chunk-XHKFKLHD.js +26 -0
- package/dist/chunk-XHKFKLHD.js.map +1 -0
- package/dist/chunk-XQUQDZVA.js +36 -0
- package/dist/chunk-XQUQDZVA.js.map +1 -0
- package/dist/composites/chat-thread.d.ts +27 -2
- package/dist/composites/chat-thread.js +3 -3
- package/dist/hooks/use-intersection.d.ts +34 -0
- package/dist/hooks/use-intersection.js +4 -0
- package/dist/hooks/use-intersection.js.map +1 -0
- package/dist/hooks/use-reduced-motion.d.ts +11 -0
- package/dist/hooks/use-reduced-motion.js +4 -0
- package/dist/hooks/use-reduced-motion.js.map +1 -0
- package/dist/index.js +3 -3
- package/dist/marketing/effects/card-dark-glow.d.ts +30 -0
- package/dist/marketing/effects/card-dark-glow.js +5 -0
- package/dist/marketing/effects/card-dark-glow.js.map +1 -0
- package/dist/marketing/effects/circle-glow.d.ts +26 -0
- package/dist/marketing/effects/circle-glow.js +5 -0
- package/dist/marketing/effects/circle-glow.js.map +1 -0
- package/dist/marketing/effects/index.d.ts +4 -0
- package/dist/marketing/effects/index.js +7 -0
- package/dist/marketing/effects/index.js.map +1 -0
- package/dist/marketing/effects/marquee.d.ts +30 -0
- package/dist/marketing/effects/marquee.js +5 -0
- package/dist/marketing/effects/marquee.js.map +1 -0
- package/dist/marketing/layout/index.d.ts +2 -0
- package/dist/marketing/layout/index.js +5 -0
- package/dist/marketing/layout/index.js.map +1 -0
- package/dist/marketing/layout/section.d.ts +36 -0
- package/dist/marketing/layout/section.js +5 -0
- package/dist/marketing/layout/section.js.map +1 -0
- package/dist/marketing/motion/animated-number.d.ts +35 -0
- package/dist/marketing/motion/animated-number.js +7 -0
- package/dist/marketing/motion/animated-number.js.map +1 -0
- package/dist/marketing/motion/index.d.ts +6 -0
- package/dist/marketing/motion/index.js +10 -0
- package/dist/marketing/motion/index.js.map +1 -0
- package/dist/marketing/motion/reveal-on-scroll.d.ts +27 -0
- package/dist/marketing/motion/reveal-on-scroll.js +7 -0
- package/dist/marketing/motion/reveal-on-scroll.js.map +1 -0
- package/dist/marketing/motion/smooth-anchor.d.ts +31 -0
- package/dist/marketing/motion/smooth-anchor.js +4 -0
- package/dist/marketing/motion/smooth-anchor.js.map +1 -0
- package/dist/marketing/motion/stagger-reveal.d.ts +30 -0
- package/dist/marketing/motion/stagger-reveal.js +7 -0
- package/dist/marketing/motion/stagger-reveal.js.map +1 -0
- package/dist/marketing/typography/hero-heading.d.ts +25 -0
- package/dist/marketing/typography/hero-heading.js +5 -0
- package/dist/marketing/typography/hero-heading.js.map +1 -0
- package/dist/marketing/typography/index.d.ts +5 -0
- package/dist/marketing/typography/index.js +8 -0
- package/dist/marketing/typography/index.js.map +1 -0
- package/dist/marketing/typography/section-eyebrow.d.ts +21 -0
- package/dist/marketing/typography/section-eyebrow.js +5 -0
- package/dist/marketing/typography/section-eyebrow.js.map +1 -0
- package/dist/marketing/typography/section-heading.d.ts +37 -0
- package/dist/marketing/typography/section-heading.js +5 -0
- package/dist/marketing/typography/section-heading.js.map +1 -0
- package/dist/marketing/typography/section-subtitle.d.ts +19 -0
- package/dist/marketing/typography/section-subtitle.js +5 -0
- package/dist/marketing/typography/section-subtitle.js.map +1 -0
- package/dist/styles/tokens.css +192 -0
- package/dist/ui/chat-message.d.ts +7 -2
- package/dist/ui/chat-message.js +1 -1
- package/dist/ui/message-bar.d.ts +24 -1
- package/dist/ui/message-bar.js +1 -1
- package/package.json +37 -1
- package/dist/chunk-27PO7X4G.js.map +0 -1
- package/dist/chunk-U4QKU5RB.js.map +0 -1
- package/dist/chunk-YMWRR7ET.js.map +0 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { cn } from './chunk-TYCPXAXF.js';
|
|
2
|
+
import { __objRest, __spreadValues } from './chunk-YINJ5YZ5.js';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var SectionSubtitle = React.forwardRef(
|
|
7
|
+
function SectionSubtitle2(_a, ref) {
|
|
8
|
+
var _b = _a, { align = "center", className } = _b, props = __objRest(_b, ["align", "className"]);
|
|
9
|
+
return /* @__PURE__ */ jsx(
|
|
10
|
+
"p",
|
|
11
|
+
__spreadValues({
|
|
12
|
+
ref,
|
|
13
|
+
"data-slot": "section-subtitle",
|
|
14
|
+
className: cn(
|
|
15
|
+
"text-base sm:text-lg md:text-xl text-muted-foreground leading-relaxed text-balance max-w-3xl",
|
|
16
|
+
align === "center" ? "text-center mx-auto" : "text-left",
|
|
17
|
+
className
|
|
18
|
+
)
|
|
19
|
+
}, props)
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
export { SectionSubtitle };
|
|
25
|
+
//# sourceMappingURL=chunk-XHKFKLHD.js.map
|
|
26
|
+
//# sourceMappingURL=chunk-XHKFKLHD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/marketing/typography/section-subtitle.tsx"],"names":["SectionSubtitle"],"mappings":";;;;;AAoBA,IAAM,eAAA,GAAwB,KAAA,CAAA,UAAA;AAAA,EAC5B,SAASA,gBAAAA,CAAgB,EAAA,EAA2C,GAAA,EAAK;AAAhD,IAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,KAAA,GAAQ,UAAU,SAAA,EArB/C,GAqB2B,IAAkC,KAAA,GAAA,SAAA,CAAlC,EAAA,EAAkC,CAAhC,OAAA,EAAkB,WAAA,CAAA,CAAA;AAC3C,IAAA,uBACE,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,kBAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,8FAAA;AAAA,UACA,KAAA,KAAU,WAAW,qBAAA,GAAwB,WAAA;AAAA,UAC7C;AAAA;AACF,OAAA,EACI,KAAA;AAAA,KACN;AAAA,EAEJ;AACF","file":"chunk-XHKFKLHD.js","sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport interface SectionSubtitleProps\n extends React.HTMLAttributes<HTMLParagraphElement> {\n /** Alinhamento. Default `\"center\"`. */\n align?: \"left\" | \"center\"\n}\n\n/**\n * Body de apoio abaixo do `SectionHeading` — explica ou complementa o titulo\n * em uma frase. Cor muted, leading relaxado, max-width que evita linhas longas.\n *\n * @example\n * <SectionHeading>Nossa solucao em 3 passos</SectionHeading>\n * <SectionSubtitle>\n * Do diagnostico ao certificado, num caminho desenhado pra resultado.\n * </SectionSubtitle>\n */\nconst SectionSubtitle = React.forwardRef<HTMLParagraphElement, SectionSubtitleProps>(\n function SectionSubtitle({ align = \"center\", className, ...props }, ref) {\n return (\n <p\n ref={ref}\n data-slot=\"section-subtitle\"\n className={cn(\n \"text-base sm:text-lg md:text-xl text-muted-foreground leading-relaxed text-balance max-w-3xl\",\n align === \"center\" ? \"text-center mx-auto\" : \"text-left\",\n className\n )}\n {...props}\n />\n )\n }\n)\n\nexport { SectionSubtitle }\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useRef, useState, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
function useIntersection(options = {}) {
|
|
4
|
+
const {
|
|
5
|
+
threshold = 0.15,
|
|
6
|
+
rootMargin = "0px 0px -10% 0px",
|
|
7
|
+
root = null,
|
|
8
|
+
once = true,
|
|
9
|
+
startVisible = false
|
|
10
|
+
} = options;
|
|
11
|
+
const ref = useRef(null);
|
|
12
|
+
const [isVisible, setIsVisible] = useState(startVisible);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (startVisible) return;
|
|
15
|
+
const el = ref.current;
|
|
16
|
+
if (!el) return;
|
|
17
|
+
const observer = new IntersectionObserver(
|
|
18
|
+
([entry]) => {
|
|
19
|
+
if (entry == null ? void 0 : entry.isIntersecting) {
|
|
20
|
+
setIsVisible(true);
|
|
21
|
+
if (once) observer.disconnect();
|
|
22
|
+
} else if (!once) {
|
|
23
|
+
setIsVisible(false);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
{ threshold, rootMargin, root }
|
|
27
|
+
);
|
|
28
|
+
observer.observe(el);
|
|
29
|
+
return () => observer.disconnect();
|
|
30
|
+
}, [threshold, rootMargin, root, once, startVisible]);
|
|
31
|
+
return { ref, isVisible };
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { useIntersection };
|
|
35
|
+
//# sourceMappingURL=chunk-XQUQDZVA.js.map
|
|
36
|
+
//# sourceMappingURL=chunk-XQUQDZVA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-intersection.ts"],"names":[],"mappings":";;AAiCO,SAAS,eAAA,CACd,OAAA,GAAkC,EAAC,EACqB;AACxD,EAAA,MAAM;AAAA,IACJ,SAAA,GAAY,IAAA;AAAA,IACZ,UAAA,GAAa,kBAAA;AAAA,IACb,IAAA,GAAO,IAAA;AAAA,IACP,IAAA,GAAO,IAAA;AAAA,IACP,YAAA,GAAe;AAAA,GACjB,GAAI,OAAA;AAEJ,EAAA,MAAM,GAAA,GAAM,OAAiB,IAAI,CAAA;AACjC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,YAAY,CAAA;AAEvD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,YAAA,EAAc;AAClB,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,EAAA,EAAI;AAET,IAAA,MAAM,WAAW,IAAI,oBAAA;AAAA,MACnB,CAAC,CAAC,KAAK,CAAA,KAAM;AACX,QAAA,IAAI,+BAAO,cAAA,EAAgB;AACzB,UAAA,YAAA,CAAa,IAAI,CAAA;AACjB,UAAA,IAAI,IAAA,WAAe,UAAA,EAAW;AAAA,QAChC,CAAA,MAAA,IAAW,CAAC,IAAA,EAAM;AAChB,UAAA,YAAA,CAAa,KAAK,CAAA;AAAA,QACpB;AAAA,MACF,CAAA;AAAA,MACA,EAAE,SAAA,EAAW,UAAA,EAAY,IAAA;AAAK,KAChC;AAEA,IAAA,QAAA,CAAS,QAAQ,EAAE,CAAA;AACnB,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,GAAG,CAAC,SAAA,EAAW,YAAY,IAAA,EAAM,IAAA,EAAM,YAAY,CAAC,CAAA;AAEpD,EAAA,OAAO,EAAE,KAAK,SAAA,EAAU;AAC1B","file":"chunk-XQUQDZVA.js","sourcesContent":["\"use client\"\n\nimport { useEffect, useRef, useState } from \"react\"\n\nexport interface UseIntersectionOptions {\n /** Quanto do elemento precisa estar visivel pra disparar (0-1). Default `0.15`. */\n threshold?: number\n /** Margin do viewport (CSS shorthand). Default `\"0px 0px -10% 0px\"`. */\n rootMargin?: string\n /** Container alternativo (default: viewport). */\n root?: Element | null\n /** Quando `true`, desliga o observer apos a primeira intersecao. Default `true`. */\n once?: boolean\n /**\n * Quando `true`, comeca como visivel (sem aguardar observer). Util quando\n * `useReducedMotion()` e true e queremos pular a animacao de entrada.\n */\n startVisible?: boolean\n}\n\n/**\n * Observa um elemento e retorna `{ ref, isVisible }`. Reusado por\n * `RevealOnScroll`, `StaggerReveal` e `AnimatedNumber`.\n *\n * Comportamento:\n * - SSR-safe (so monta IntersectionObserver no client).\n * - `once=true` (default) desconecta o observer apos a primeira intersecao.\n * - `startVisible=true` ja entrega `isVisible: true` no primeiro render.\n *\n * @example\n * const { ref, isVisible } = useIntersection({ threshold: 0.4 })\n * return <div ref={ref}>{isVisible ? \"visible\" : \"hidden\"}</div>\n */\nexport function useIntersection<T extends HTMLElement = HTMLDivElement>(\n options: UseIntersectionOptions = {}\n): { ref: React.RefObject<T | null>; isVisible: boolean } {\n const {\n threshold = 0.15,\n rootMargin = \"0px 0px -10% 0px\",\n root = null,\n once = true,\n startVisible = false,\n } = options\n\n const ref = useRef<T | null>(null)\n const [isVisible, setIsVisible] = useState(startVisible)\n\n useEffect(() => {\n if (startVisible) return\n const el = ref.current\n if (!el) return\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry?.isIntersecting) {\n setIsVisible(true)\n if (once) observer.disconnect()\n } else if (!once) {\n setIsVisible(false)\n }\n },\n { threshold, rootMargin, root }\n )\n\n observer.observe(el)\n return () => observer.disconnect()\n }, [threshold, rootMargin, root, once, startVisible])\n\n return { ref, isVisible }\n}\n"]}
|
|
@@ -47,7 +47,10 @@ interface ChatThreadProps extends Omit<React.ComponentProps<"div">, "onChange">
|
|
|
47
47
|
onRetryMessage?: (messageId: string) => void;
|
|
48
48
|
/** Regenerar resposta da IA com erro (B3) */
|
|
49
49
|
onRegenerateResponse?: () => void;
|
|
50
|
-
/** Cancelar resposta da IA mid-thinking (F1)
|
|
50
|
+
/** Cancelar resposta da IA mid-thinking (F1). Passar este callback **ativa** o botao
|
|
51
|
+
* "Parar resposta" no rodape durante o estado `thinking`. Se omitido, o MessageBar
|
|
52
|
+
* some com animacao de saida quando a IA esta pensando e volta com animacao de entrada
|
|
53
|
+
* quando termina — o consumer indica que nao quer expor cancelamento. */
|
|
51
54
|
onStopResponse?: () => void;
|
|
52
55
|
/** Carregar mensagens antigas (G1 — scroll infinito) */
|
|
53
56
|
onLoadMore?: () => Promise<void> | void;
|
|
@@ -101,6 +104,28 @@ interface ChatThreadProps extends Omit<React.ComponentProps<"div">, "onChange">
|
|
|
101
104
|
maxLength?: number;
|
|
102
105
|
/** Modo so audio — passa pro MessageBar como state base */
|
|
103
106
|
audioOnlyMode?: boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Limite de duracao da gravacao em segundos (configurado pelo consumer).
|
|
109
|
+
* Quando atingido, o ChatThread auto-pausa a gravacao (vai pro paused state com
|
|
110
|
+
* preview play/cancel/send) — a menos que `onMaxDurationReached` seja passado,
|
|
111
|
+
* caso em que o consumer assume controle. Sem essa prop, sem limite.
|
|
112
|
+
*/
|
|
113
|
+
maxRecordingDuration?: number;
|
|
114
|
+
/** Quantos segundos antes do limite ativar o warning visual (timer destructive
|
|
115
|
+
* + label "Xs restantes"). Default 10. Ignorado sem `maxRecordingDuration`. */
|
|
116
|
+
warnAtSecondsLeft?: number;
|
|
117
|
+
/** Label do warning. Default pt-BR: `(s) => \`${s}s restantes\``. */
|
|
118
|
+
secondsLeftLabel?: (secondsLeft: number) => string;
|
|
119
|
+
/**
|
|
120
|
+
* Callback opcional disparado ao atingir o limite. Se omitido, ChatThread
|
|
121
|
+
* auto-pausa internamente. Se passado, **substitui** o auto-pause — o consumer
|
|
122
|
+
* decide o que fazer (ex: mostrar toast antes de pausar manualmente).
|
|
123
|
+
*/
|
|
124
|
+
onMaxDurationReached?: () => void;
|
|
125
|
+
/** URL da imagem do avatar do usuario (aparece em todas as msgs do user no desktop). */
|
|
126
|
+
userAvatar?: string;
|
|
127
|
+
/** Nome do usuario (usado para iniciais no fallback do avatar e alt da imagem). */
|
|
128
|
+
userName?: string;
|
|
104
129
|
/** Default: "Sem conexao. Tentando reconectar..." */
|
|
105
130
|
offlineBannerText?: string;
|
|
106
131
|
/** Default: "Tentar novamente" */
|
|
@@ -112,6 +137,6 @@ interface ChatThreadProps extends Omit<React.ComponentProps<"div">, "onChange">
|
|
|
112
137
|
/** Default: "Desculpe, nao consegui responder." */
|
|
113
138
|
defaultAiErrorText?: string;
|
|
114
139
|
}
|
|
115
|
-
declare function ChatThread({ messages, state, initialThinking, onSendText, onSendAudio, onRetryMessage, onRegenerateResponse, onStopResponse, onLoadMore, onStartRecording, onPauseRecording, onResumeRecording, onCancelRecording, onTogglePlay, onSeekPlayback, recordingStream, recordingDuration, isPlaying, playbackProgress, offline, rateLimitedUntil, rateLimitBannerText, quotaExhausted, quotaExhaustedConfig, onRate, ratingLabels, placeholder, maxLength, audioOnlyMode, offlineBannerText, retryButtonText, regenerateButtonText, stopResponseText, defaultAiErrorText, className, ...props }: ChatThreadProps): react_jsx_runtime.JSX.Element;
|
|
140
|
+
declare function ChatThread({ messages, state, initialThinking, onSendText, onSendAudio, onRetryMessage, onRegenerateResponse, onStopResponse, onLoadMore, onStartRecording, onPauseRecording, onResumeRecording, onCancelRecording, onTogglePlay, onSeekPlayback, recordingStream, recordingDuration, isPlaying, playbackProgress, offline, rateLimitedUntil, rateLimitBannerText, quotaExhausted, quotaExhaustedConfig, onRate, ratingLabels, placeholder, maxLength, audioOnlyMode, maxRecordingDuration, warnAtSecondsLeft, secondsLeftLabel, onMaxDurationReached, userAvatar, userName, offlineBannerText, retryButtonText, regenerateButtonText, stopResponseText, defaultAiErrorText, className, ...props }: ChatThreadProps): react_jsx_runtime.JSX.Element;
|
|
116
141
|
|
|
117
142
|
export { ChatThread, type ChatThreadMessage, type ChatThreadMessageStatus, type ChatThreadPersona, type ChatThreadProps, type ChatThreadState, type QuotaExhaustedConfig };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { ChatThread } from '../chunk-
|
|
1
|
+
export { ChatThread } from '../chunk-JGUDRAWA.js';
|
|
2
2
|
import '../chunk-3EFI7PYC.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-CG7NXMBC.js';
|
|
4
4
|
import '../chunk-6OYSTCGP.js';
|
|
5
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-CWMXYPWK.js';
|
|
6
6
|
import '../chunk-F2XA2Z75.js';
|
|
7
7
|
import '../chunk-JPEDYOV7.js';
|
|
8
8
|
import '../chunk-V7M2NHUO.js';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
interface UseIntersectionOptions {
|
|
2
|
+
/** Quanto do elemento precisa estar visivel pra disparar (0-1). Default `0.15`. */
|
|
3
|
+
threshold?: number;
|
|
4
|
+
/** Margin do viewport (CSS shorthand). Default `"0px 0px -10% 0px"`. */
|
|
5
|
+
rootMargin?: string;
|
|
6
|
+
/** Container alternativo (default: viewport). */
|
|
7
|
+
root?: Element | null;
|
|
8
|
+
/** Quando `true`, desliga o observer apos a primeira intersecao. Default `true`. */
|
|
9
|
+
once?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Quando `true`, comeca como visivel (sem aguardar observer). Util quando
|
|
12
|
+
* `useReducedMotion()` e true e queremos pular a animacao de entrada.
|
|
13
|
+
*/
|
|
14
|
+
startVisible?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Observa um elemento e retorna `{ ref, isVisible }`. Reusado por
|
|
18
|
+
* `RevealOnScroll`, `StaggerReveal` e `AnimatedNumber`.
|
|
19
|
+
*
|
|
20
|
+
* Comportamento:
|
|
21
|
+
* - SSR-safe (so monta IntersectionObserver no client).
|
|
22
|
+
* - `once=true` (default) desconecta o observer apos a primeira intersecao.
|
|
23
|
+
* - `startVisible=true` ja entrega `isVisible: true` no primeiro render.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* const { ref, isVisible } = useIntersection({ threshold: 0.4 })
|
|
27
|
+
* return <div ref={ref}>{isVisible ? "visible" : "hidden"}</div>
|
|
28
|
+
*/
|
|
29
|
+
declare function useIntersection<T extends HTMLElement = HTMLDivElement>(options?: UseIntersectionOptions): {
|
|
30
|
+
ref: React.RefObject<T | null>;
|
|
31
|
+
isVisible: boolean;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export { type UseIntersectionOptions, useIntersection };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"use-intersection.js"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns `true` quando o usuario habilitou "prefers-reduced-motion" no SO.
|
|
3
|
+
* Componentes do `marketing/motion/*` consultam esse hook pra desligar animacoes
|
|
4
|
+
* (resolver para o estado final direto) — requisito WCAG 2.3.3.
|
|
5
|
+
*
|
|
6
|
+
* SSR-safe: comeca em `false` no server e atualiza no client apos mount.
|
|
7
|
+
* Reage a mudancas dinamicas (usuario toggla a preferencia com a aba aberta).
|
|
8
|
+
*/
|
|
9
|
+
declare function useReducedMotion(): boolean;
|
|
10
|
+
|
|
11
|
+
export { useReducedMotion };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"use-reduced-motion.js"}
|
package/dist/index.js
CHANGED
|
@@ -17,11 +17,11 @@ export { Toaster, cycleToast } from './chunk-ELZCZ6ZH.js';
|
|
|
17
17
|
export { Alert, AlertAction, AlertClose, AlertDescription, AlertTitle, alertVariants } from './chunk-7ZXAU2CD.js';
|
|
18
18
|
export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue } from './chunk-SZUWVHP4.js';
|
|
19
19
|
export { Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger } from './chunk-EF6FQT4Y.js';
|
|
20
|
-
export { ChatThread } from './chunk-
|
|
20
|
+
export { ChatThread } from './chunk-JGUDRAWA.js';
|
|
21
21
|
export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger } from './chunk-3EFI7PYC.js';
|
|
22
|
-
export { ChatAudio, ChatMessage, chatMessageVariants } from './chunk-
|
|
22
|
+
export { ChatAudio, ChatMessage, chatMessageVariants } from './chunk-CG7NXMBC.js';
|
|
23
23
|
export { MessageRating } from './chunk-6OYSTCGP.js';
|
|
24
|
-
export { MessageBar } from './chunk-
|
|
24
|
+
export { MessageBar } from './chunk-CWMXYPWK.js';
|
|
25
25
|
export { ChatPanel } from './chunk-L32AMI4K.js';
|
|
26
26
|
export { ChatBubble, chatBubbleVariants } from './chunk-HZJRM5EK.js';
|
|
27
27
|
export { LikeDislike, likeDislikeVariants } from './chunk-F2XA2Z75.js';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
type CardDarkGlowTag = "div" | "article" | "section";
|
|
4
|
+
interface CardDarkGlowProps extends React.HTMLAttributes<HTMLElement> {
|
|
5
|
+
/** Tag renderizada. Default `"div"`. */
|
|
6
|
+
as?: CardDarkGlowTag;
|
|
7
|
+
/**
|
|
8
|
+
* Habilita lift visual no hover (`translateY(-3px)` + glow mais forte).
|
|
9
|
+
* Default `true`. Use `false` em cards que sao apenas conteudo (sem ser link/clicavel).
|
|
10
|
+
*/
|
|
11
|
+
interactive?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Wrapper de card com inset highlight + sombra com glow rose subtil + hover
|
|
15
|
+
* lift opcional. Pareie com `CircleGlow` (no container externo) pra entregar o
|
|
16
|
+
* efeito "dark premium" que repete pelas dobras do corporate.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* <CardDarkGlow className="rounded-2xl bg-card border p-6">
|
|
20
|
+
* <h3>Titulo</h3>
|
|
21
|
+
* <p>Descricao do card</p>
|
|
22
|
+
* </CardDarkGlow>
|
|
23
|
+
*
|
|
24
|
+
* <CardDarkGlow as="article" interactive={false}>
|
|
25
|
+
* ...card nao-interativo, sem hover lift
|
|
26
|
+
* </CardDarkGlow>
|
|
27
|
+
*/
|
|
28
|
+
declare const CardDarkGlow: React.ForwardRefExoticComponent<CardDarkGlowProps & React.RefAttributes<HTMLElement>>;
|
|
29
|
+
|
|
30
|
+
export { CardDarkGlow, type CardDarkGlowProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"card-dark-glow.js"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface CircleGlowProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
|
|
4
|
+
/**
|
|
5
|
+
* Tamanho relativo do glow. Controla o `transform: scale()` aplicado ao
|
|
6
|
+
* elemento. Default `"lg"` (escala 1.0).
|
|
7
|
+
*/
|
|
8
|
+
size?: "sm" | "md" | "lg";
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Decoracao de glow circular pulsante. Posicionada `absolute` — o **container
|
|
12
|
+
* deve ser `relative`**. Idealmente coloque atras dos cards usando `-z-10`
|
|
13
|
+
* (ou similar) via `className`.
|
|
14
|
+
*
|
|
15
|
+
* Sempre `aria-hidden` e `pointer-events: none` (e puramente visual).
|
|
16
|
+
* Respeita `prefers-reduced-motion`.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* <div className="relative">
|
|
20
|
+
* <CircleGlow className="-z-10" />
|
|
21
|
+
* <div className="grid grid-cols-3 gap-6">{cards}</div>
|
|
22
|
+
* </div>
|
|
23
|
+
*/
|
|
24
|
+
declare const CircleGlow: React.ForwardRefExoticComponent<CircleGlowProps & React.RefAttributes<HTMLDivElement>>;
|
|
25
|
+
|
|
26
|
+
export { CircleGlow, type CircleGlowProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"circle-glow.js"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { CircleGlow } from '../../chunk-HDCU6QSG.js';
|
|
2
|
+
export { CardDarkGlow } from '../../chunk-VXWMC2NK.js';
|
|
3
|
+
export { Marquee } from '../../chunk-5HPZCREI.js';
|
|
4
|
+
import '../../chunk-TYCPXAXF.js';
|
|
5
|
+
import '../../chunk-YINJ5YZ5.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface MarqueeProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
/** Duracao de um ciclo completo em segundos. Default `40`. */
|
|
5
|
+
speed?: number;
|
|
6
|
+
/** Direcao do movimento. Default `"left"`. */
|
|
7
|
+
direction?: "left" | "right";
|
|
8
|
+
/** Pausa em `:hover` e `:focus-within`. Default `true` (acessibilidade). */
|
|
9
|
+
pauseOnHover?: boolean;
|
|
10
|
+
/** Espacamento entre cada item em px. Default `48`. */
|
|
11
|
+
gap?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Scroll horizontal infinito (logo cloud, partner band). Duplica os children
|
|
15
|
+
* internamente pra criar loop seamless. Pausa em hover/focus pra dar tempo
|
|
16
|
+
* de leitura. Respeita `prefers-reduced-motion` (anima zerada).
|
|
17
|
+
*
|
|
18
|
+
* Importante: a duplicacao usa `aria-hidden` no segundo bloco pra evitar
|
|
19
|
+
* leitura repetida por screen readers.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* <Marquee speed={30} gap={64}>
|
|
23
|
+
* <img src="/logos/logo-a.png" alt="Cliente A" />
|
|
24
|
+
* <img src="/logos/logo-b.png" alt="Cliente B" />
|
|
25
|
+
* <img src="/logos/logo-c.png" alt="Cliente C" />
|
|
26
|
+
* </Marquee>
|
|
27
|
+
*/
|
|
28
|
+
declare const Marquee: React.ForwardRefExoticComponent<MarqueeProps & React.RefAttributes<HTMLDivElement>>;
|
|
29
|
+
|
|
30
|
+
export { Marquee, type MarqueeProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"marquee.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface SectionProps extends React.HTMLAttributes<HTMLElement> {
|
|
4
|
+
/** Tag HTML renderizada. Default `"section"`. */
|
|
5
|
+
as?: "section" | "div";
|
|
6
|
+
/**
|
|
7
|
+
* Forma da dobra:
|
|
8
|
+
* - `"hero"`: `min-h-screen flex flex-col` (primeira dobra acima do fold).
|
|
9
|
+
* - `"default"`: padding vertical generoso (`py-20 md:py-28`) — usado nas demais.
|
|
10
|
+
*/
|
|
11
|
+
variant?: "hero" | "default";
|
|
12
|
+
/**
|
|
13
|
+
* Aplica `.light-surface` quando `"light"` — sobrescreve os tokens semanticos
|
|
14
|
+
* pra um fundo claro dentro de tema dark global. `"dark"` nao aplica nada
|
|
15
|
+
* (segue o tema do root).
|
|
16
|
+
*/
|
|
17
|
+
tone?: "dark" | "light";
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Wrapper de uma "dobra" de landing page. Generaliza o `HomeSection` do
|
|
21
|
+
* `fluencypass-corporate-site`: padroniza padding/altura via `variant` e
|
|
22
|
+
* permite alternar bg dark/light por dobra via `tone`.
|
|
23
|
+
*
|
|
24
|
+
* Pareie com `SectionHeading`, `SectionEyebrow`, `SectionSubtitle` pra montar
|
|
25
|
+
* o cabecalho da dobra com tipografia consistente.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* <Section id="pilares" variant="default" tone="light">
|
|
29
|
+
* <SectionEyebrow>O que oferecemos</SectionEyebrow>
|
|
30
|
+
* <SectionHeading>3 pilares essenciais</SectionHeading>
|
|
31
|
+
* <div className="grid md:grid-cols-3 gap-6">...</div>
|
|
32
|
+
* </Section>
|
|
33
|
+
*/
|
|
34
|
+
declare const Section: React.ForwardRefExoticComponent<SectionProps & React.RefAttributes<HTMLElement>>;
|
|
35
|
+
|
|
36
|
+
export { Section, type SectionProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"section.js"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
interface AnimatedNumberProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
5
|
+
/** Valor final do contador. */
|
|
6
|
+
value: number;
|
|
7
|
+
/** Valor inicial. Default `0`. */
|
|
8
|
+
from?: number;
|
|
9
|
+
/** Duracao da animacao em ms. Default `1400`. */
|
|
10
|
+
duration?: number;
|
|
11
|
+
/** Texto antes do numero (ex: `"R$ "` ou `"+"`). */
|
|
12
|
+
prefix?: string;
|
|
13
|
+
/** Texto depois do numero (ex: `"%"` ou `"k"`). */
|
|
14
|
+
suffix?: string;
|
|
15
|
+
/** Casas decimais. Default `0`. */
|
|
16
|
+
decimals?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Formato dos numeros. `"pt-BR"` usa separador `.` e decimal `,`;
|
|
19
|
+
* `"plain"` usa `toFixed`. Default `"pt-BR"`.
|
|
20
|
+
*/
|
|
21
|
+
locale?: "pt-BR" | "plain";
|
|
22
|
+
/** Threshold do IntersectionObserver. Default `0.4`. */
|
|
23
|
+
threshold?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Conta de `from` ate `value` com easing `easeOutCubic` quando o componente
|
|
27
|
+
* entra no viewport. Aplica `tabular-nums` automaticamente pra largura estavel
|
|
28
|
+
* durante a contagem (evita "saltos" no layout).
|
|
29
|
+
*
|
|
30
|
+
* Acessibilidade: respeita `prefers-reduced-motion` — pula direto pro valor
|
|
31
|
+
* final, sem animar.
|
|
32
|
+
*/
|
|
33
|
+
declare function AnimatedNumber({ value, from, duration, prefix, suffix, decimals, locale, threshold, className, ...props }: AnimatedNumberProps): react_jsx_runtime.JSX.Element;
|
|
34
|
+
|
|
35
|
+
export { AnimatedNumber, type AnimatedNumberProps };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { AnimatedNumber } from '../../chunk-7LH7PSQS.js';
|
|
2
|
+
import '../../chunk-K2NUBNSA.js';
|
|
3
|
+
import '../../chunk-XQUQDZVA.js';
|
|
4
|
+
import '../../chunk-TYCPXAXF.js';
|
|
5
|
+
import '../../chunk-YINJ5YZ5.js';
|
|
6
|
+
//# sourceMappingURL=animated-number.js.map
|
|
7
|
+
//# sourceMappingURL=animated-number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"animated-number.js"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { RevealOnScroll, RevealOnScrollProps } from './reveal-on-scroll.js';
|
|
2
|
+
export { StaggerReveal, StaggerRevealProps } from './stagger-reveal.js';
|
|
3
|
+
export { AnimatedNumber, AnimatedNumberProps } from './animated-number.js';
|
|
4
|
+
export { SmoothAnchor, SmoothAnchorProps } from './smooth-anchor.js';
|
|
5
|
+
import 'react/jsx-runtime';
|
|
6
|
+
import 'react';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { RevealOnScroll } from '../../chunk-UJ6OER6O.js';
|
|
2
|
+
export { StaggerReveal } from '../../chunk-TPRZMMT6.js';
|
|
3
|
+
export { AnimatedNumber } from '../../chunk-7LH7PSQS.js';
|
|
4
|
+
export { SmoothAnchor } from '../../chunk-NW56QDQM.js';
|
|
5
|
+
import '../../chunk-K2NUBNSA.js';
|
|
6
|
+
import '../../chunk-XQUQDZVA.js';
|
|
7
|
+
import '../../chunk-TYCPXAXF.js';
|
|
8
|
+
import '../../chunk-YINJ5YZ5.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
type AsTag = "div" | "section" | "article" | "header" | "footer" | "main" | "aside";
|
|
5
|
+
interface RevealOnScrollProps extends React.HTMLAttributes<HTMLElement> {
|
|
6
|
+
/** Tag HTML renderizada. Default `"div"`. */
|
|
7
|
+
as?: AsTag;
|
|
8
|
+
/** Delay extra em ms antes de iniciar a animacao. Default `0`. */
|
|
9
|
+
delay?: number;
|
|
10
|
+
/** Fracao do elemento que precisa estar visivel pra disparar. Default `0.15`. */
|
|
11
|
+
threshold?: number;
|
|
12
|
+
/** Margin do viewport (CSS shorthand). Default `"0px 0px -10% 0px"`. */
|
|
13
|
+
rootMargin?: string;
|
|
14
|
+
/** Repetir a animacao toda vez que reentrar no viewport. Default `false`. */
|
|
15
|
+
repeat?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Envelopa qualquer conteudo e aplica fade-up suave quando o elemento entra
|
|
19
|
+
* no viewport. Usa a utility `.cycle-reveal` definida em `globals.css` (que
|
|
20
|
+
* faz `opacity 0 → 1` e `translateY(8px → 0)` com `--duration-reveal`).
|
|
21
|
+
*
|
|
22
|
+
* Acessibilidade: respeita `prefers-reduced-motion` — quando habilitado,
|
|
23
|
+
* o conteudo fica imediatamente visivel sem transicao.
|
|
24
|
+
*/
|
|
25
|
+
declare function RevealOnScroll({ as, delay, threshold, rootMargin, repeat, className, style, children, ...props }: RevealOnScrollProps): react_jsx_runtime.JSX.Element;
|
|
26
|
+
|
|
27
|
+
export { RevealOnScroll, type RevealOnScrollProps };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { RevealOnScroll } from '../../chunk-UJ6OER6O.js';
|
|
2
|
+
import '../../chunk-K2NUBNSA.js';
|
|
3
|
+
import '../../chunk-XQUQDZVA.js';
|
|
4
|
+
import '../../chunk-TYCPXAXF.js';
|
|
5
|
+
import '../../chunk-YINJ5YZ5.js';
|
|
6
|
+
//# sourceMappingURL=reveal-on-scroll.js.map
|
|
7
|
+
//# sourceMappingURL=reveal-on-scroll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"reveal-on-scroll.js"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
interface SmoothAnchorProps {
|
|
2
|
+
/** Offset em px pra compensar header sticky. Default `96`. */
|
|
3
|
+
headerOffset?: number;
|
|
4
|
+
/** Duracao do scroll em ms. Default `900`. */
|
|
5
|
+
duration?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Intercepta cliques em links de hash (`<a href="#algo">`) e faz scroll suave
|
|
9
|
+
* com easing `easeInOutCubic` em vez do `scroll-behavior: smooth` nativo
|
|
10
|
+
* (que tem duracao curta e easing fixo).
|
|
11
|
+
*
|
|
12
|
+
* Renderiza `null` (so registra listener global). Monte UMA VEZ por app,
|
|
13
|
+
* tipicamente no `<RootLayout>` ou na pagina raiz da landing.
|
|
14
|
+
*
|
|
15
|
+
* Comportamento:
|
|
16
|
+
* - Ignora clicks com modificadores (cmd/ctrl/middle-button).
|
|
17
|
+
* - Atualiza URL via `history.replaceState` sem disparar scroll nativo.
|
|
18
|
+
* - Adiciona classe `anchor-target-pulse` no destino apos chegar (animacao
|
|
19
|
+
* visual opcional, definida em `globals.css`).
|
|
20
|
+
* - Respeita `prefers-reduced-motion` (scroll instantaneo, sem easing).
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // app/layout.tsx
|
|
24
|
+
* <body>
|
|
25
|
+
* <SmoothAnchor headerOffset={64} />
|
|
26
|
+
* {children}
|
|
27
|
+
* </body>
|
|
28
|
+
*/
|
|
29
|
+
declare function SmoothAnchor({ headerOffset, duration }: SmoothAnchorProps): null;
|
|
30
|
+
|
|
31
|
+
export { SmoothAnchor, type SmoothAnchorProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"smooth-anchor.js"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
interface StaggerRevealProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
5
|
+
/** Delay entre cada filho em ms. Default `100`. */
|
|
6
|
+
step?: number;
|
|
7
|
+
/** Fracao do container que precisa estar visivel pra disparar. Default `0.15`. */
|
|
8
|
+
threshold?: number;
|
|
9
|
+
/** Margin do viewport (CSS shorthand). Default `"0px 0px -10% 0px"`. */
|
|
10
|
+
rootMargin?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Container que anima seus filhos entrando em sequencia (fade-up com delay
|
|
14
|
+
* incremental). Clona cada filho valido e injeta `--stagger-index` como CSS
|
|
15
|
+
* variable; a animacao acontece via `.stagger-child` em `globals.css`.
|
|
16
|
+
*
|
|
17
|
+
* O `step` (default 100ms) controla o espacamento entre cada filho:
|
|
18
|
+
* - 1o filho: delay 0
|
|
19
|
+
* - 2o filho: delay 100ms
|
|
20
|
+
* - 3o filho: delay 200ms ...
|
|
21
|
+
*
|
|
22
|
+
* Note que o `step` so afeta visualmente quando o CSS usa
|
|
23
|
+
* `calc(var(--stagger-index) * Xms)` — atualmente o globals usa `100ms`
|
|
24
|
+
* fixo (o step prop sobrescreve via inline style se necessario).
|
|
25
|
+
*
|
|
26
|
+
* Acessibilidade: respeita `prefers-reduced-motion` — filhos ja entram visiveis.
|
|
27
|
+
*/
|
|
28
|
+
declare function StaggerReveal({ step, threshold, rootMargin, className, children, ...props }: StaggerRevealProps): react_jsx_runtime.JSX.Element;
|
|
29
|
+
|
|
30
|
+
export { StaggerReveal, type StaggerRevealProps };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { StaggerReveal } from '../../chunk-TPRZMMT6.js';
|
|
2
|
+
import '../../chunk-K2NUBNSA.js';
|
|
3
|
+
import '../../chunk-XQUQDZVA.js';
|
|
4
|
+
import '../../chunk-TYCPXAXF.js';
|
|
5
|
+
import '../../chunk-YINJ5YZ5.js';
|
|
6
|
+
//# sourceMappingURL=stagger-reveal.js.map
|
|
7
|
+
//# sourceMappingURL=stagger-reveal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"stagger-reveal.js"}
|