motion-presets-kit 0.1.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/LICENSE +21 -0
- package/README.md +174 -0
- package/bin/cli.mjs +115 -0
- package/bin/skill.mjs +94 -0
- package/dist/chunk-GU3ZCMLK.js +537 -0
- package/dist/chunk-GU3ZCMLK.js.map +1 -0
- package/dist/chunk-ONXBTJWT.js +167 -0
- package/dist/chunk-ONXBTJWT.js.map +1 -0
- package/dist/chunk-PFZKSPJW.js +164 -0
- package/dist/chunk-PFZKSPJW.js.map +1 -0
- package/dist/components.cjs +719 -0
- package/dist/components.cjs.map +1 -0
- package/dist/components.d.cts +199 -0
- package/dist/components.d.ts +199 -0
- package/dist/components.js +4 -0
- package/dist/components.js.map +1 -0
- package/dist/index-DtNOkqyg.d.cts +112 -0
- package/dist/index-DtNOkqyg.d.ts +112 -0
- package/dist/index.cjs +890 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +19 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/presets.cjs +334 -0
- package/dist/presets.cjs.map +1 -0
- package/dist/presets.d.cts +3 -0
- package/dist/presets.d.ts +3 -0
- package/dist/presets.js +4 -0
- package/dist/presets.js.map +1 -0
- package/package.json +117 -0
- package/scripts/postinstall.mjs +75 -0
- package/skill/motion-presets-kit/SKILL.md +221 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schemas/counter.ts","../src/schemas/draggable.ts","../src/schemas/marquee.ts","../src/schemas/text-animate.ts","../src/components/counter-utils.ts","../src/utils/warn.ts","../src/components/draggable-utils.ts","../src/components/Draggable.tsx","../src/utils/reduced-motion.ts","../src/components/hooks/useCounter.ts","../src/components/marquee-utils.ts","../src/components/Marquee.tsx","../src/utils/easing.ts","../src/schemas/base.ts","../src/schemas/fade.ts","../src/presets/fade.ts","../src/schemas/parent-variants.ts","../src/presets/parent-variants.ts","../src/components/text-animate-utils.ts","../src/components/TextAnimate.tsx","../src/schemas/clip-reveal.ts","../src/presets/clip-reveal.ts","../src/schemas/scale.ts","../src/presets/scale.ts","../src/schemas/slide.ts","../src/presets/slide.ts"],"names":["z","useRef","useEffect","jsx","motion","useMemo","useMotionValue","useState","useCallback","useMotionValueEvent","animate","memo","Marquee","useId","jsxs","Fragment","scale","stagger"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from \"zod\";\n\nexport const counterOptionsSchema = z.object({\n\tfrom: z.number().default(0),\n\tto: z.number().default(100),\n\tdecimals: z.number().int().min(0).default(0),\n\tprefix: z.string().default(\"\"),\n\tsuffix: z.string().default(\"\"),\n\tseparator: z.string().default(\",\"),\n\tformat: z\n\t\t.custom<(value: number) => string>(\n\t\t\t(value): value is (value: number) => string =>\n\t\t\t\ttypeof value === \"function\",\n\t\t)\n\t\t.optional(),\n\tduration: z.number().default(1),\n\treducedMotion: z.boolean().default(true),\n});\n\nexport type CounterOptions = z.input<typeof counterOptionsSchema>;\nexport type ResolvedCounterOptions = z.output<typeof counterOptionsSchema>;\n","import { z } from \"zod\";\n\nexport const dragConstraintsSchema = z.object({\n\ttop: z.number().optional(),\n\tright: z.number().optional(),\n\tbottom: z.number().optional(),\n\tleft: z.number().optional(),\n});\n\nexport const draggableOptionsSchema = z.object({\n\taxis: z.enum([\"x\", \"y\", \"both\"]).default(\"both\"),\n\tbounds: z\n\t\t.union([z.literal(\"parent\"), z.literal(\"document\"), dragConstraintsSchema])\n\t\t.optional(),\n\tsnapToGrid: z.tuple([z.number(), z.number()]).optional(),\n\tdragElastic: z.union([z.number(), z.boolean()]).optional(),\n\tdragMomentum: z.boolean().optional(),\n});\n\nexport type DraggableOptions = z.input<typeof draggableOptionsSchema>;\nexport type ResolvedDraggableOptions = z.output<typeof draggableOptionsSchema>;\nexport type DragConstraints = z.infer<typeof dragConstraintsSchema>;\n","import { z } from \"zod\";\n\nexport const marqueeOptionsSchema = z.object({\n\tspeed: z.number().positive().default(20),\n\tdirection: z.enum([\"left\", \"right\"]).default(\"left\"),\n\tpauseOnHover: z.boolean().default(true),\n\tgap: z.string().default(\"2rem\"),\n\treducedMotion: z.boolean().default(true),\n});\n\nexport type MarqueeOptions = z.input<typeof marqueeOptionsSchema>;\nexport type ResolvedMarqueeOptions = z.output<typeof marqueeOptionsSchema>;\n","import { z } from \"zod\";\n\nexport const textAnimateOptionsSchema = z.object({\n\tby: z.enum([\"word\", \"letter\"]).default(\"word\"),\n\ttype: z\n\t\t.enum([\n\t\t\t\"blurIn\",\n\t\t\t\"slideUp\",\n\t\t\t\"slideDown\",\n\t\t\t\"slideLeft\",\n\t\t\t\"slideRight\",\n\t\t\t\"typeWriter\",\n\t\t])\n\t\t.default(\"slideUp\"),\n\tduration: z.number().default(0.4),\n\tstartDelay: z.number().default(0),\n\thighlight: z.array(z.string()).default([]),\n\thighlightClassName: z.string().default(\"\"),\n\treducedMotion: z.boolean().default(true),\n});\n\nexport type TextAnimateOptions = z.input<typeof textAnimateOptionsSchema>;\nexport type ResolvedTextAnimateOptions = z.output<\n\ttypeof textAnimateOptionsSchema\n>;\n","import type { CounterOptions } from \"../schemas/counter\";\n\n/** Formatea un número con decimales, separador de miles, prefijo/sufijo y `format` custom (CL-005). */\nexport function formatCounterValue(\n\tvalue: number,\n\toptions: CounterOptions = {},\n): string {\n\tconst {\n\t\tdecimals = 0,\n\t\tprefix = \"\",\n\t\tsuffix = \"\",\n\t\tseparator = \",\",\n\t\tformat,\n\t} = options;\n\n\tif (format) return `${prefix}${format(value)}${suffix}`;\n\n\tconst fixed = Math.abs(value).toFixed(decimals);\n\tconst [integer = \"\", fraction] = fixed.split(\".\");\n\tconst requestGrouped = separator !== \"\" && separator !== \"none\";\n\tconst grouped = requestGrouped\n\t\t? integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator)\n\t\t: integer;\n\tconst sign = value < 0 ? \"-\" : \"\";\n\tconst decimalPart = fraction ? `.${fraction}` : \"\";\n\n\treturn `${prefix}${sign}${grouped}${decimalPart}${suffix}`;\n}\n","const PREFIX = \"[motion-presets-kit]\";\n\nfunction isProduction(): boolean {\n\treturn (\n\t\ttypeof process !== \"undefined\" &&\n\t\t!!process.env &&\n\t\tprocess.env.NODE_ENV === \"production\"\n\t);\n}\n\n/** Aviso de desarrollo con prefijo de la librería (se silencia en producción). */\nexport function warn(message: string): void {\n\tif (isProduction()) return;\n\tif (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n\t\tconsole.warn(`${PREFIX} ${message}`);\n\t}\n}\n","import type { RefObject } from \"react\";\nimport type { DragConstraints } from \"../schemas/draggable\";\n\n/** `true` si los límites tienen `top > bottom` o `left > right` (CL-007). */\nexport function hasInvalidBounds(bounds: DragConstraints): boolean {\n\tif (\n\t\tbounds.top !== undefined &&\n\t\tbounds.bottom !== undefined &&\n\t\tbounds.top > bounds.bottom\n\t) {\n\t\treturn true;\n\t}\n\tif (\n\t\tbounds.left !== undefined &&\n\t\tbounds.right !== undefined &&\n\t\tbounds.left > bounds.right\n\t) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport type ResolvedDragBounds = \"parent\" | \"document\" | DragConstraints | null;\n\n/** Normaliza `bounds` a un valor usable por motion, descartando límites inválidos (CL-007). */\nexport function resolveDragConstraints(\n\tbounds: \"parent\" | \"document\" | DragConstraints | undefined,\n): ResolvedDragBounds {\n\tif (bounds === undefined) return null;\n\tif (bounds === \"parent\" || bounds === \"document\") return bounds;\n\treturn hasInvalidBounds(bounds) ? null : bounds;\n}\n\n/**\n * Traduce `bounds` al prop `dragConstraints` de motion.\n * `\"parent\"`/`\"document\"` no son strings válidos en motion: se resuelven a un\n * ref al elemento contenedor (`containerRef`) que motion mide al iniciar el drag.\n */\nexport function getDragConstraintsProp(\n\tresolved: ResolvedDragBounds,\n\tcontainerRef: RefObject<Element | null>,\n): Partial<DragConstraints> | { current: Element | null } | undefined {\n\tif (resolved === \"parent\" || resolved === \"document\") return containerRef;\n\treturn resolved ?? undefined;\n}\n\n/** Construye el `modifyTarget` de `dragTransition` que ajusta el destino a la grilla. */\nexport function buildSnapModifier(\n\tsnapToGrid: [number, number] | undefined,\n): ((value: number) => number) | undefined {\n\tif (!snapToGrid) return undefined;\n\tconst [gridX, gridY] = snapToGrid;\n\tconst grid = gridX === 0 ? gridY : gridY === 0 ? gridX : gridX;\n\tif (grid === 0) return undefined;\n\treturn (value: number) => Math.round(value / grid) * grid;\n}\n","import { motion, type PanInfo } from \"motion/react\";\nimport { type ReactElement, type ReactNode, useEffect, useRef } from \"react\";\nimport {\n\ttype DragConstraints,\n\tdraggableOptionsSchema,\n} from \"../schemas/draggable\";\nimport { warn } from \"../utils/warn\";\nimport {\n\tbuildSnapModifier,\n\tgetDragConstraintsProp,\n\thasInvalidBounds,\n\tresolveDragConstraints,\n} from \"./draggable-utils\";\n\nexport interface DraggableProps {\n\tchildren?: ReactNode;\n\taxis?: \"x\" | \"y\" | \"both\";\n\tbounds?: \"parent\" | \"document\" | DragConstraints;\n\tsnapToGrid?: [number, number];\n\tdragElastic?: number | boolean;\n\tdragMomentum?: boolean;\n\tdragControls?: unknown;\n\tonDragStart?: (event: unknown, info: PanInfo) => void;\n\tonDrag?: (event: unknown, info: PanInfo) => void;\n\tonDragEnd?: (event: unknown, info: PanInfo) => void;\n\tclassName?: string;\n}\n\n/**\n * Wrapper de `motion.div` con drag configurable por eje, límites, snap y callbacks.\n * `bounds` inválidos se descartan con un `warn()` (CL-007).\n */\nexport function Draggable({\n\tchildren,\n\taxis = \"both\",\n\tbounds,\n\tsnapToGrid,\n\tdragElastic,\n\tdragMomentum,\n\tdragControls,\n\tonDragStart,\n\tonDrag,\n\tonDragEnd,\n\tclassName,\n}: DraggableProps): ReactElement {\n\tconst parsed = draggableOptionsSchema.safeParse({\n\t\taxis,\n\t\tbounds,\n\t\tsnapToGrid,\n\t\tdragElastic,\n\t\tdragMomentum,\n\t});\n\tif (!parsed.success) {\n\t\twarn(`Opciones inválidas en Draggable: ${parsed.error.message}`);\n\t}\n\n\tconst data = parsed.success ? parsed.data : draggableOptionsSchema.parse({});\n\n\tif (\n\t\ttypeof data.bounds === \"object\" &&\n\t\tdata.bounds !== null &&\n\t\thasInvalidBounds(data.bounds)\n\t) {\n\t\twarn(\n\t\t\t\"bounds inválidos en Draggable (top > bottom o left > right). Se ignoran los límites (CL-007).\",\n\t\t);\n\t}\n\n\tconst resolved = resolveDragConstraints(data.bounds);\n\tconst containerMode =\n\t\tresolved === \"parent\" || resolved === \"document\" ? resolved : null;\n\n\tconst elementRef = useRef<HTMLDivElement>(null);\n\tconst containerRef = useRef<Element | null>(null);\n\n\tuseEffect(() => {\n\t\tconst element = elementRef.current;\n\t\tif (!element || containerMode === null) return;\n\t\tcontainerRef.current =\n\t\t\tcontainerMode === \"parent\"\n\t\t\t\t? element.parentElement\n\t\t\t\t: (element.ownerDocument?.documentElement ?? null);\n\t}, [containerMode]);\n\n\tconst drag = data.axis === \"both\" ? true : (data.axis as \"x\" | \"y\");\n\tconst dragConstraints = getDragConstraintsProp(resolved, containerRef);\n\tconst modifyTarget = buildSnapModifier(data.snapToGrid);\n\n\treturn (\n\t\t<motion.div\n\t\t\tref={elementRef}\n\t\t\tdrag={drag}\n\t\t\tdragConstraints={dragConstraints}\n\t\t\tdragElastic={data.dragElastic}\n\t\t\tdragMomentum={data.dragMomentum}\n\t\t\tdragTransition={modifyTarget ? { modifyTarget } : undefined}\n\t\t\tdragControls={dragControls as never}\n\t\t\tonDragStart={onDragStart}\n\t\t\tonDrag={onDrag}\n\t\t\tonDragEnd={onDragEnd}\n\t\t\tclassName={className}\n\t\t>\n\t\t\t{children}\n\t\t</motion.div>\n\t);\n}\n","/**\n * `true` cuando el usuario prefiere movimiento reducido y la opción está activa.\n * Devuelve `false` en entornos sin `window.matchMedia` (SSR, Node).\n */\nexport function shouldReduceMotion(reducedMotion = true): boolean {\n\tif (!reducedMotion) return false;\n\tif (\n\t\ttypeof window === \"undefined\" ||\n\t\ttypeof window.matchMedia !== \"function\"\n\t) {\n\t\treturn false;\n\t}\n\treturn window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n","import { animate, useMotionValue, useMotionValueEvent } from \"motion/react\";\nimport {\n\ttype RefObject,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n} from \"react\";\nimport {\n\ttype CounterOptions,\n\tcounterOptionsSchema,\n} from \"../../schemas/counter\";\nimport { shouldReduceMotion } from \"../../utils/reduced-motion\";\nimport { warn } from \"../../utils/warn\";\nimport { formatCounterValue } from \"../counter-utils\";\n\nexport interface UseCounterResult {\n\tvalue: number;\n\tstart: () => void;\n\treset: () => void;\n}\n\n/**\n * Contador animado que escribe el valor formateado en `ref.current.textContent`\n * y expone el valor actual de forma reactiva.\n * Con `reducedMotion` activo muestra el valor final directamente (RF-095).\n */\nexport function useCounter(\n\tref: RefObject<HTMLElement | null>,\n\toptions: CounterOptions = {},\n): UseCounterResult {\n\tconst parsed = counterOptionsSchema.safeParse(options);\n\tif (!parsed.success) {\n\t\twarn(`Opciones inválidas en useCounter: ${parsed.error.message}`);\n\t}\n\tconst config = parsed.success ? parsed.data : counterOptionsSchema.parse({});\n\tconst { from, to, duration, reducedMotion } = config;\n\n\tconst formatOptions = useMemo(\n\t\t() => ({\n\t\t\tdecimals: config.decimals,\n\t\t\tprefix: config.prefix,\n\t\t\tsuffix: config.suffix,\n\t\t\tseparator: config.separator,\n\t\t\tformat: config.format,\n\t\t}),\n\t\t[\n\t\t\tconfig.decimals,\n\t\t\tconfig.prefix,\n\t\t\tconfig.suffix,\n\t\t\tconfig.separator,\n\t\t\tconfig.format,\n\t\t],\n\t);\n\n\tconst motionValue = useMotionValue(from);\n\tconst [value, setValue] = useState(from);\n\n\tconst writeValue = useCallback(\n\t\t(next: number) => {\n\t\t\tconst element = ref.current;\n\t\t\tif (element) {\n\t\t\t\telement.textContent = formatCounterValue(next, formatOptions);\n\t\t\t}\n\t\t},\n\t\t[ref, formatOptions],\n\t);\n\n\tuseMotionValueEvent(motionValue, \"change\", (latest) => {\n\t\tsetValue(latest);\n\t\twriteValue(latest);\n\t});\n\n\tuseEffect(() => {\n\t\tif (shouldReduceMotion(reducedMotion)) {\n\t\t\tmotionValue.set(to);\n\t\t\tsetValue(to);\n\t\t\twriteValue(to);\n\t\t}\n\t}, [motionValue, to, reducedMotion, writeValue]);\n\n\tconst start = useCallback(() => {\n\t\tif (shouldReduceMotion(reducedMotion)) {\n\t\t\tmotionValue.set(to);\n\t\t\tsetValue(to);\n\t\t\twriteValue(to);\n\t\t\treturn;\n\t\t}\n\t\tmotionValue.set(from);\n\t\tsetValue(from);\n\t\tanimate(motionValue, to, {\n\t\t\tduration,\n\t\t\tease: [0.16, 1, 0.3, 1],\n\t\t});\n\t}, [motionValue, from, to, duration, reducedMotion, writeValue]);\n\n\tconst reset = useCallback(() => {\n\t\tmotionValue.set(from);\n\t\tsetValue(from);\n\t\twriteValue(from);\n\t}, [motionValue, from, writeValue]);\n\n\treturn { value, start, reset };\n}\n","export interface MarqueeKeyframesOptions {\n\tid: string;\n\tdirection: \"left\" | \"right\";\n\tgap: string;\n\tspeed: number;\n\tpauseOnHover: boolean;\n}\n\nexport interface MarqueeKeyframes {\n\tanimationName: string;\n\tlistClassName: string;\n\ttrackClassName: string;\n\tcss: string;\n}\n\n/** Genera los `@keyframes` y clases CSS del marquee (una función pura, sin React). */\nexport function buildMarqueeKeyframes(\n\toptions: MarqueeKeyframesOptions,\n): MarqueeKeyframes {\n\tconst { id, direction, gap, speed, pauseOnHover } = options;\n\tconst animationName = `motion-marquee-${id}`;\n\tconst listClassName = `motion-marquee-list-${id}`;\n\tconst trackClassName = `motion-marquee-track-${id}`;\n\n\tconst from = direction === \"left\" ? \"0\" : `calc(-100% - ${gap})`;\n\tconst to = direction === \"left\" ? `calc(-100% - ${gap})` : \"0\";\n\n\tconst css = [\n\t\t`@keyframes ${animationName}{from{transform:translateX(${from})}to{transform:translateX(${to})}}`,\n\t\t`.${listClassName}{display:flex;align-items:center;flex-shrink:0;min-width:100%;gap:${gap};animation:${animationName} ${speed}s linear infinite;will-change:transform;backface-visibility:hidden}`,\n\t\t`.${trackClassName}{display:flex;gap:${gap}}`,\n\t\tpauseOnHover\n\t\t\t? `.${trackClassName}:hover .${listClassName}{animation-play-state:paused}`\n\t\t\t: \"\",\n\t]\n\t\t.filter(Boolean)\n\t\t.join(\"\");\n\n\treturn { animationName, listClassName, trackClassName, css };\n}\n","import {\n\ttype CSSProperties,\n\tmemo,\n\ttype ReactNode,\n\tuseEffect,\n\tuseId,\n\tuseMemo,\n\tuseRef,\n} from \"react\";\nimport {\n\tmarqueeOptionsSchema,\n\ttype ResolvedMarqueeOptions,\n} from \"../schemas/marquee\";\nimport { shouldReduceMotion } from \"../utils/reduced-motion\";\nimport { warn } from \"../utils/warn\";\nimport { buildMarqueeKeyframes } from \"./marquee-utils\";\n\nexport interface MarqueeProps {\n\tchildren: ReactNode;\n\tspeed?: number;\n\tdirection?: \"left\" | \"right\";\n\tpauseOnHover?: boolean;\n\tgap?: string;\n\tclassName?: string;\n\treducedMotion?: boolean;\n}\n\nconst MASK_STYLE: CSSProperties = {\n\tmaskImage:\n\t\t\"linear-gradient(to right, transparent, black 15%, black 85%, transparent)\",\n\tWebkitMaskImage:\n\t\t\"linear-gradient(to right, transparent, black 15%, black 85%, transparent)\",\n};\n\nconst BASE_STYLE: CSSProperties = {\n\tdisplay: \"flex\",\n\toverflow: \"hidden\",\n\twidth: \"100%\",\n};\n\n/** Marquee con CSS puro (`@keyframes`) y children duplicados para un loop sin costuras. */\nexport const Marquee = memo(function Marquee({\n\tchildren,\n\tspeed = 20,\n\tdirection = \"left\",\n\tpauseOnHover = true,\n\tgap = \"2rem\",\n\tclassName,\n\treducedMotion = true,\n}: MarqueeProps) {\n\tconst rawId = useId();\n\tconst id = rawId.replace(/[^a-zA-Z0-9_-]/g, \"\");\n\tconst duplicateRef = useRef<HTMLDivElement>(null);\n\n\tuseEffect(() => {\n\t\tconst element = duplicateRef.current;\n\t\tif (element) element.inert = true;\n\t}, []);\n\n\tconst parsed = marqueeOptionsSchema.safeParse({\n\t\tspeed,\n\t\tdirection,\n\t\tpauseOnHover,\n\t\tgap,\n\t\treducedMotion,\n\t});\n\tif (!parsed.success) {\n\t\twarn(`Opciones inválidas en Marquee: ${parsed.error.message}`);\n\t}\n\tconst config: ResolvedMarqueeOptions = parsed.success\n\t\t? parsed.data\n\t\t: marqueeOptionsSchema.parse({});\n\n\tconst keyframes = useMemo(\n\t\t() =>\n\t\t\tbuildMarqueeKeyframes({\n\t\t\t\tid,\n\t\t\t\tdirection: config.direction,\n\t\t\t\tgap: config.gap,\n\t\t\t\tspeed: config.speed,\n\t\t\t\tpauseOnHover: config.pauseOnHover,\n\t\t\t}),\n\t\t[id, config.direction, config.gap, config.speed, config.pauseOnHover],\n\t);\n\n\tconst paused = shouldReduceMotion(config.reducedMotion);\n\tconst listStyle: CSSProperties = {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tflexShrink: 0,\n\t\tminWidth: \"100%\",\n\t\tgap: config.gap,\n\t\t...(paused\n\t\t\t? {}\n\t\t\t: {\n\t\t\t\t\tanimation: `${keyframes.animationName} ${config.speed}s linear infinite`,\n\t\t\t\t\twillChange: \"transform\",\n\t\t\t\t\tbackfaceVisibility: \"hidden\",\n\t\t\t\t}),\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<style>{keyframes.css}</style>\n\t\t\t<section\n\t\t\t\taria-label=\"Contenido en desplazamiento continuo\"\n\t\t\t\tclassName={\n\t\t\t\t\tclassName\n\t\t\t\t\t\t? `${keyframes.trackClassName} ${className}`\n\t\t\t\t\t\t: keyframes.trackClassName\n\t\t\t\t}\n\t\t\t\tstyle={{ ...BASE_STYLE, ...MASK_STYLE }}\n\t\t\t>\n\t\t\t\t<div className={keyframes.listClassName} style={listStyle}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tref={duplicateRef}\n\t\t\t\t\tclassName={keyframes.listClassName}\n\t\t\t\t\tstyle={listStyle}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t</>\n\t);\n});\n","import type { Easing, SpringOptions, Transition } from \"motion/react\";\n\n/** Curva de easing por defecto de todos los presets. */\nexport const DEFAULT_EASE: Easing = [0.16, 1, 0.3, 1];\n\nexport interface BuildTransitionOptions {\n\tduration: number;\n\tdelay: number;\n\tease: Easing;\n\tspring?: Omit<SpringOptions, \"keyframes\">;\n\texcludeDelay: boolean;\n}\n\n/**\n * Construye la transición compartida por los presets.\n * - Si `spring` está definido, sobrescribe `duration` y `ease`.\n * - Si `excludeDelay` es `true`, omite `delay` (compatibilidad con stagger del padre).\n */\nexport function buildTransition(options: BuildTransitionOptions): Transition {\n\tconst { duration, delay, ease, spring, excludeDelay } = options;\n\n\tconst base: Transition = spring\n\t\t? { type: \"spring\", ...spring }\n\t\t: { duration, ease };\n\n\treturn excludeDelay ? base : { ...base, delay };\n}\n","import type { Easing, SpringOptions } from \"motion/react\";\nimport { z } from \"zod\";\nimport { DEFAULT_EASE } from \"../utils/easing\";\n\nconst EASING_NAMES = new Set([\n\t\"linear\",\n\t\"easeIn\",\n\t\"easeOut\",\n\t\"easeInOut\",\n\t\"circIn\",\n\t\"circOut\",\n\t\"circInOut\",\n\t\"backIn\",\n\t\"backOut\",\n\t\"backInOut\",\n\t\"anticipate\",\n]);\n\n/** Valida un `Easing` de motion: nombre, bezier de 4 números o función. */\nfunction isEasing(value: unknown): value is Easing {\n\tif (typeof value === \"function\") return true;\n\tif (typeof value === \"string\") return EASING_NAMES.has(value);\n\treturn (\n\t\tArray.isArray(value) &&\n\t\tvalue.length === 4 &&\n\t\tvalue.every((item) => typeof item === \"number\")\n\t);\n}\n\n/** Valida un objeto de opciones de spring (sin `keyframes`). */\nfunction isSpringOptions(\n\tvalue: unknown,\n): value is Omit<SpringOptions, \"keyframes\"> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Opciones compartidas por todos los presets que retornan variants. */\nexport const basePresetSchema = z.object({\n\tduration: z.number().default(0.5),\n\tdelay: z.number().default(0),\n\tease: z.custom<Easing>(isEasing).default(DEFAULT_EASE),\n\tspring: z\n\t\t.custom<Omit<SpringOptions, \"keyframes\">>(isSpringOptions)\n\t\t.optional(),\n\texcludeDelay: z.boolean().default(false),\n\treducedMotion: z.boolean().default(true),\n});\n\nexport type BasePresetOptions = z.input<typeof basePresetSchema>;\nexport type ResolvedBasePresetOptions = z.output<typeof basePresetSchema>;\n","import { z } from \"zod\";\nimport { basePresetSchema } from \"./base\";\n\nexport const fadeOptionsSchema = basePresetSchema.extend({\n\tdirection: z.enum([\"up\", \"down\", \"left\", \"right\", \"none\"]).default(\"up\"),\n\tdistance: z.number().default(60),\n\tblur: z.number().default(0),\n\tscale: z.number().default(1),\n});\n\nexport type FadeOptions = z.input<typeof fadeOptionsSchema>;\nexport type ResolvedFadeOptions = z.output<typeof fadeOptionsSchema>;\n","import type { TargetAndTransition, Variants } from \"motion/react\";\nimport { type FadeOptions, fadeOptionsSchema } from \"../schemas/fade\";\nimport { buildTransition } from \"../utils/easing\";\nimport { shouldReduceMotion } from \"../utils/reduced-motion\";\nimport { warn } from \"../utils/warn\";\n\nconst FADE_OFFSETS = {\n\tup: (distance: number) => ({ y: distance }),\n\tdown: (distance: number) => ({ y: -distance }),\n\tleft: (distance: number) => ({ x: distance }),\n\tright: (distance: number) => ({ x: -distance }),\n\tnone: () => ({}),\n} as const;\n\n/**\n * Fade de entrada con dirección, blur y escala opcionales.\n * Función pura que retorna `Variants` para usar en `motion`/`motion/react`.\n */\nexport function fade(options: FadeOptions = {}): Variants {\n\tconst parsed = fadeOptionsSchema.safeParse(options);\n\tif (!parsed.success) {\n\t\twarn(\n\t\t\t`Opciones inválidas en fade(): ${parsed.error.message}. Se usarán los valores por defecto.`,\n\t\t);\n\t}\n\tconst opts = parsed.success ? parsed.data : fadeOptionsSchema.parse({});\n\n\tconst {\n\t\tdirection,\n\t\tdistance,\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t\tblur,\n\t\tscale,\n\t\treducedMotion,\n\t} = opts;\n\n\tif (shouldReduceMotion(reducedMotion)) {\n\t\treturn {\n\t\t\tinitial: { opacity: 1, x: 0, y: 0 },\n\t\t\tanimate: { opacity: 1, x: 0, y: 0 },\n\t\t};\n\t}\n\n\tconst transition = buildTransition({\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t});\n\tconst hasBlur = blur > 0;\n\n\tconst initial: TargetAndTransition = {\n\t\topacity: 0,\n\t\t...FADE_OFFSETS[direction](distance),\n\t};\n\tif (scale !== 1) initial.scale = scale;\n\tif (hasBlur) initial.filter = `blur(${blur}px)`;\n\n\tconst animate: TargetAndTransition = {\n\t\topacity: 1,\n\t\tx: 0,\n\t\ty: 0,\n\t\twillChange: hasBlur ? \"transform, opacity, filter\" : \"transform, opacity\",\n\t\ttransition,\n\t};\n\tif (scale !== 1) animate.scale = 1;\n\tif (hasBlur) animate.filter = \"blur(0px)\";\n\n\treturn { initial, animate };\n}\n","import { z } from \"zod\";\n\nexport const parentVariantsSchema = z.object({\n\tdelayChildren: z.number().default(0),\n\tstartDelay: z.number().default(0),\n\treducedMotion: z.boolean().default(true),\n});\n\nexport type ParentVariantsOptions = z.input<typeof parentVariantsSchema>;\nexport type ResolvedParentVariantsOptions = z.output<\n\ttypeof parentVariantsSchema\n>;\n","import { stagger, type Variants } from \"motion/react\";\nimport {\n\ttype ParentVariantsOptions,\n\tparentVariantsSchema,\n} from \"../schemas/parent-variants\";\nimport { shouldReduceMotion } from \"../utils/reduced-motion\";\nimport { warn } from \"../utils/warn\";\n\n/**\n * Variants para el contenedor padre: anima hijos en cascada con `stagger()`.\n * Los hijos deben usar `excludeDelay: true` para heredar el stagger (CL-001).\n */\nexport function parentVariants(options: ParentVariantsOptions = {}): Variants {\n\tconst parsed = parentVariantsSchema.safeParse(options);\n\tif (!parsed.success) {\n\t\twarn(\n\t\t\t`Opciones inválidas en parentVariants(): ${parsed.error.message}. Se usarán los valores por defecto.`,\n\t\t);\n\t}\n\tconst opts = parsed.success ? parsed.data : parentVariantsSchema.parse({});\n\n\tconst { delayChildren, startDelay, reducedMotion } = opts;\n\n\tif (shouldReduceMotion(reducedMotion)) {\n\t\treturn {\n\t\t\tinitial: { opacity: 1 },\n\t\t\tanimate: { opacity: 1 },\n\t\t};\n\t}\n\n\treturn {\n\t\tinitial: { opacity: 0 },\n\t\tanimate: {\n\t\t\topacity: 1,\n\t\t\ttransition: {\n\t\t\t\tdelayChildren: stagger(delayChildren, { startDelay }),\n\t\t\t},\n\t\t},\n\t};\n}\n","export type TextAnimateBy = \"word\" | \"letter\";\n\nexport type TextAnimateType =\n\t| \"blurIn\"\n\t| \"slideUp\"\n\t| \"slideDown\"\n\t| \"slideLeft\"\n\t| \"slideRight\"\n\t| \"typeWriter\";\n\nexport interface TextAnimationParams {\n\tdirection: \"up\" | \"down\" | \"left\" | \"right\" | \"none\";\n\tdistance: number;\n\tblur: number;\n}\n\ntype TokenKind = \"tag\" | \"text\" | \"space\";\n\ninterface Token {\n\tkind: TokenKind;\n\tvalue: string;\n}\n\nconst TAG_RE = /<[^>]*>/g;\nconst TOKEN_SOURCE = \"<[^>]*>|\\\\s+|[^<\\\\s]+\";\n\nfunction tokenize(text: string): Token[] {\n\tconst tokens: Token[] = [];\n\tconst regex = new RegExp(TOKEN_SOURCE, \"g\");\n\tlet match = regex.exec(text);\n\twhile (match !== null) {\n\t\tconst value = match[0];\n\t\tif (value.startsWith(\"<\")) tokens.push({ kind: \"tag\", value });\n\t\telse if (/^\\s+$/.test(value)) tokens.push({ kind: \"space\", value });\n\t\telse tokens.push({ kind: \"text\", value });\n\t\tmatch = regex.exec(text);\n\t}\n\treturn tokens;\n}\n\n/**\n * Agrupa palabras manteniendo las etiquetas HTML pegadas a la palabra contigua\n * (CL-004). `\"<strong>Hello</strong> World\"` → `[\"<strong>Hello</strong>\", \"World\"]`.\n */\nfunction groupWords(tokens: Token[]): string[] {\n\tconst units: string[] = [];\n\tlet pending = \"\";\n\tlet current: string | null = null;\n\tconst flush = () => {\n\t\tif (current !== null) {\n\t\t\tunits.push(current);\n\t\t\tcurrent = null;\n\t\t}\n\t};\n\n\tfor (const token of tokens) {\n\t\tif (token.kind === \"space\") {\n\t\t\tflush();\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.kind === \"tag\") {\n\t\t\tif (current !== null) current += token.value;\n\t\t\telse pending += token.value;\n\t\t\tcontinue;\n\t\t}\n\t\tflush();\n\t\tcurrent = pending + token.value;\n\t\tpending = \"\";\n\t}\n\tflush();\n\tif (pending) units.push(pending);\n\treturn units;\n}\n\n/** Agrupa letras manteniendo las etiquetas pegadas a la primera/última letra. */\nfunction groupLetters(tokens: Token[]): string[] {\n\tconst units: string[] = [];\n\tlet pending = \"\";\n\n\tfor (const token of tokens) {\n\t\tif (token.kind === \"space\") {\n\t\t\tfor (const char of token.value) units.push(char);\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.kind === \"tag\") {\n\t\t\tif (token.value.startsWith(\"</\") && units.length > 0) {\n\t\t\t\tconst last = units.length - 1;\n\t\t\t\tunits[last] = `${units[last] ?? \"\"}${token.value}`;\n\t\t\t} else {\n\t\t\t\tpending += token.value;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tconst chars = [...token.value];\n\t\tchars.forEach((char, index) => {\n\t\t\tunits.push((index === 0 ? pending : \"\") + char);\n\t\t\tpending = \"\";\n\t\t});\n\t}\n\tif (pending) units.push(pending);\n\treturn units;\n}\n\n/** Divide el texto en palabras o letras, preservando las etiquetas HTML (CL-004). */\nexport function splitText(text: string, by: TextAnimateBy = \"word\"): string[] {\n\tconst tokens = tokenize(text);\n\treturn by === \"letter\" ? groupLetters(tokens) : groupWords(tokens);\n}\n\n/**\n * Rangos `[inicio, fin)` de coincidencias (case-insensitive) sobre el texto sin\n * etiquetas. Los índices alinean 1:1 con las unidades de `splitText(..., \"letter\")`.\n */\nexport function getHighlightRanges(\n\ttext: string,\n\thighlights: string[],\n): Array<[number, number]> {\n\tconst plain = text.replace(TAG_RE, \"\");\n\tconst lower = plain.toLowerCase();\n\tconst ranges: Array<[number, number]> = [];\n\n\tfor (const highlight of highlights) {\n\t\tif (!highlight) continue;\n\t\tconst needle = highlight.toLowerCase();\n\t\tlet from = 0;\n\t\twhile (from <= lower.length - needle.length) {\n\t\t\tconst index = lower.indexOf(needle, from);\n\t\t\tif (index === -1) break;\n\t\t\tranges.push([index, index + needle.length]);\n\t\t\tfrom = index + needle.length;\n\t\t}\n\t}\n\treturn ranges;\n}\n\n/** `true` si una palabra (sin etiquetas) contiene alguno de los resaltados. */\nexport function isWordHighlighted(word: string, highlights: string[]): boolean {\n\tconst plain = word.replace(TAG_RE, \"\").toLowerCase();\n\treturn highlights.some(\n\t\t(highlight) => highlight !== \"\" && plain.includes(highlight.toLowerCase()),\n\t);\n}\n\n/** Parámetros de `fade()` asociados a cada tipo de animación de texto. */\nexport function getAnimationParams(\n\ttype: TextAnimateType = \"slideUp\",\n): TextAnimationParams {\n\tswitch (type) {\n\t\tcase \"blurIn\":\n\t\t\treturn { direction: \"none\", distance: 0, blur: 8 };\n\t\tcase \"slideDown\":\n\t\t\treturn { direction: \"down\", distance: 20, blur: 4 };\n\t\tcase \"slideLeft\":\n\t\t\treturn { direction: \"left\", distance: 20, blur: 4 };\n\t\tcase \"slideRight\":\n\t\t\treturn { direction: \"right\", distance: 20, blur: 4 };\n\t\tcase \"typeWriter\":\n\t\t\treturn { direction: \"none\", distance: 0, blur: 0 };\n\t\tdefault:\n\t\t\treturn { direction: \"up\", distance: 20, blur: 4 };\n\t}\n}\n","import { type HTMLMotionProps, motion } from \"motion/react\";\nimport type * as React from \"react\";\nimport { type ElementType, type ReactElement, useMemo } from \"react\";\nimport { fade } from \"../presets/fade\";\nimport { parentVariants } from \"../presets/parent-variants\";\nimport {\n\ttype ResolvedTextAnimateOptions,\n\ttextAnimateOptionsSchema,\n} from \"../schemas/text-animate\";\nimport { warn } from \"../utils/warn\";\nimport {\n\tgetAnimationParams,\n\tgetHighlightRanges,\n\tisWordHighlighted,\n\tsplitText,\n\ttype TextAnimateBy,\n\ttype TextAnimateType,\n} from \"./text-animate-utils\";\n\ntype IntrinsicTag = keyof React.JSX.IntrinsicElements;\n\nconst componentCache = new Map<string, ElementType>();\n\nfunction getMotionComponent(tag: IntrinsicTag): ElementType {\n\tconst key = String(tag);\n\tlet component = componentCache.get(key);\n\tif (!component) {\n\t\tcomponent = motion.create(tag) as ElementType;\n\t\tcomponentCache.set(key, component);\n\t}\n\treturn component;\n}\n\nconst SPAN_STYLE = { display: \"inline-block\", whiteSpace: \"pre-wrap\" } as const;\nconst WORD_STYLE = { ...SPAN_STYLE, marginRight: \"0.25em\" } as const;\n\nexport interface TextAnimateProps extends HTMLMotionProps<\"p\"> {\n\ttext: string;\n\tas?: IntrinsicTag;\n\tby?: TextAnimateBy;\n\ttype?: TextAnimateType;\n\tduration?: number;\n\tstartDelay?: number;\n\thighlight?: string[];\n\thighlightClassName?: string;\n\treducedMotion?: boolean;\n}\n\n/**\n * Anima texto dividiéndolo en palabras o letras. Preserva el HTML inline (CL-004),\n * resalta coincidencias (case-insensitive) y anima al entrar en viewport.\n *\n * ADVERTENCIA: el HTML inline se inyecta con `dangerouslySetInnerHTML`. No pases\n * como `text` contenido no confiable sin sanitizarlo antes (riesgo de XSS).\n */\nexport function TextAnimate({\n\ttext,\n\tas = \"p\",\n\tby = \"word\",\n\ttype = \"slideUp\",\n\tduration = 0.4,\n\tstartDelay = 0,\n\thighlight = [],\n\thighlightClassName = \"\",\n\treducedMotion = true,\n\t...props\n}: TextAnimateProps): ReactElement {\n\tconst parsed = textAnimateOptionsSchema.safeParse({\n\t\tby,\n\t\ttype,\n\t\tduration,\n\t\tstartDelay,\n\t\thighlight,\n\t\thighlightClassName,\n\t\treducedMotion,\n\t});\n\tif (!parsed.success) {\n\t\twarn(`Opciones inválidas en TextAnimate: ${parsed.error.message}`);\n\t}\n\tconst config: ResolvedTextAnimateOptions = parsed.success\n\t\t? parsed.data\n\t\t: textAnimateOptionsSchema.parse({});\n\n\tconst MotionWrapper = useMemo(() => getMotionComponent(as), [as]);\n\tconst units = useMemo(() => splitText(text, config.by), [text, config.by]);\n\tconst ranges = useMemo(\n\t\t() =>\n\t\t\tconfig.by === \"letter\" ? getHighlightRanges(text, config.highlight) : [],\n\t\t[text, config.by, config.highlight],\n\t);\n\tconst animationParams = useMemo(\n\t\t() => getAnimationParams(config.type),\n\t\t[config.type],\n\t);\n\n\tconst parent = useMemo(\n\t\t() =>\n\t\t\tparentVariants({\n\t\t\t\tdelayChildren:\n\t\t\t\t\tconfig.type === \"typeWriter\" && config.by === \"letter\" ? 0.05 : 0.08,\n\t\t\t\tstartDelay: config.startDelay,\n\t\t\t\treducedMotion: config.reducedMotion,\n\t\t\t}),\n\t\t[config.type, config.by, config.startDelay, config.reducedMotion],\n\t);\n\n\tconst child = useMemo(\n\t\t() =>\n\t\t\tfade({\n\t\t\t\t...animationParams,\n\t\t\t\texcludeDelay: true,\n\t\t\t\tduration: config.type === \"typeWriter\" ? 0.05 : config.duration,\n\t\t\t\treducedMotion: config.reducedMotion,\n\t\t\t}),\n\t\t[animationParams, config.type, config.duration, config.reducedMotion],\n\t);\n\n\tconst isWord = config.by === \"word\";\n\tconst itemStyle = isWord ? WORD_STYLE : SPAN_STYLE;\n\n\treturn (\n\t\t<MotionWrapper\n\t\t\tvariants={parent}\n\t\t\tinitial=\"initial\"\n\t\t\twhileInView=\"animate\"\n\t\t\tviewport={{ once: true }}\n\t\t\t{...props}\n\t\t>\n\t\t\t{units.map((unit, index) => {\n\t\t\t\tconst highlighted = isWord\n\t\t\t\t\t? isWordHighlighted(unit, config.highlight)\n\t\t\t\t\t: ranges.some(([start, end]) => index >= start && index < end);\n\t\t\t\tconst hasHtml = /<[^>]*>/.test(unit);\n\t\t\t\tconst key = `${index}-${unit}`;\n\t\t\t\treturn (\n\t\t\t\t\t<motion.span\n\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\tvariants={child}\n\t\t\t\t\t\tclassName={highlighted ? config.highlightClassName : undefined}\n\t\t\t\t\t\tstyle={itemStyle}\n\t\t\t\t\t\t{...(hasHtml\n\t\t\t\t\t\t\t? { dangerouslySetInnerHTML: { __html: unit } }\n\t\t\t\t\t\t\t: { children: unit === \"\" ? \"\\u00A0\" : unit })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t</MotionWrapper>\n\t);\n}\n","import { z } from \"zod\";\nimport { basePresetSchema } from \"./base\";\n\nexport const clipRevealOptionsSchema = basePresetSchema.extend({\n\tdirection: z.enum([\"up\", \"down\", \"left\", \"right\"]).default(\"up\"),\n\tscale: z.number().optional(),\n});\n\nexport type ClipRevealOptions = z.input<typeof clipRevealOptionsSchema>;\nexport type ResolvedClipRevealOptions = z.output<\n\ttypeof clipRevealOptionsSchema\n>;\n","import type { TargetAndTransition, Variants } from \"motion/react\";\nimport {\n\ttype ClipRevealOptions,\n\tclipRevealOptionsSchema,\n} from \"../schemas/clip-reveal\";\nimport { buildTransition } from \"../utils/easing\";\nimport { shouldReduceMotion } from \"../utils/reduced-motion\";\nimport { warn } from \"../utils/warn\";\n\nconst REVEALED_CLIP = \"inset(0% 0% 0% 0%)\";\n\nconst CLIP_INSETS = {\n\tup: \"inset(100% 0% 0% 0%)\",\n\tdown: \"inset(0% 0% 100% 0%)\",\n\tleft: \"inset(0% 100% 0% 0%)\",\n\tright: \"inset(0% 0% 0% 100%)\",\n} as const;\n\n/**\n * Reveal cinematográfico animando `clipPath` (con escala opcional).\n * Función pura que retorna `Variants`.\n */\nexport function clipReveal(options: ClipRevealOptions = {}): Variants {\n\tconst parsed = clipRevealOptionsSchema.safeParse(options);\n\tif (!parsed.success) {\n\t\twarn(\n\t\t\t`Opciones inválidas en clipReveal(): ${parsed.error.message}. Se usarán los valores por defecto.`,\n\t\t);\n\t}\n\tconst opts = parsed.success ? parsed.data : clipRevealOptionsSchema.parse({});\n\n\tconst {\n\t\tdirection,\n\t\tscale,\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t\treducedMotion,\n\t} = opts;\n\tconst hasScale = scale !== undefined;\n\n\tif (shouldReduceMotion(reducedMotion)) {\n\t\tconst final: TargetAndTransition = { clipPath: REVEALED_CLIP };\n\t\tif (hasScale) final.scale = 1;\n\t\treturn { initial: final, animate: final };\n\t}\n\n\tconst transition = buildTransition({\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t});\n\n\tconst initial: TargetAndTransition = { clipPath: CLIP_INSETS[direction] };\n\tif (hasScale) initial.scale = scale;\n\n\tconst animate: TargetAndTransition = {\n\t\tclipPath: REVEALED_CLIP,\n\t\twillChange: hasScale ? \"clip-path, transform\" : \"clip-path\",\n\t\ttransition,\n\t};\n\tif (hasScale) animate.scale = 1;\n\n\treturn { initial, animate };\n}\n","import { z } from \"zod\";\nimport { basePresetSchema } from \"./base\";\n\nexport const scaleOptionsSchema = basePresetSchema.extend({\n\tfrom: z.number().default(0.8),\n});\n\nexport type ScaleOptions = z.input<typeof scaleOptionsSchema>;\nexport type ResolvedScaleOptions = z.output<typeof scaleOptionsSchema>;\n","import type { Variants } from \"motion/react\";\nimport { type ScaleOptions, scaleOptionsSchema } from \"../schemas/scale\";\nimport { buildTransition } from \"../utils/easing\";\nimport { shouldReduceMotion } from \"../utils/reduced-motion\";\nimport { warn } from \"../utils/warn\";\n\n/**\n * Entrada con escala (`from` → `1`) junto con `opacity: 0 → 1`.\n * Función pura que retorna `Variants`.\n */\nexport function scale(options: ScaleOptions = {}): Variants {\n\tconst parsed = scaleOptionsSchema.safeParse(options);\n\tif (!parsed.success) {\n\t\twarn(\n\t\t\t`Opciones inválidas en scale(): ${parsed.error.message}. Se usarán los valores por defecto.`,\n\t\t);\n\t}\n\tconst opts = parsed.success ? parsed.data : scaleOptionsSchema.parse({});\n\n\tconst { from, duration, delay, ease, spring, excludeDelay, reducedMotion } =\n\t\topts;\n\n\tif (shouldReduceMotion(reducedMotion)) {\n\t\treturn {\n\t\t\tinitial: { opacity: 1, scale: 1 },\n\t\t\tanimate: { opacity: 1, scale: 1 },\n\t\t};\n\t}\n\n\tconst transition = buildTransition({\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t});\n\n\treturn {\n\t\tinitial: { opacity: 0, scale: from },\n\t\tanimate: {\n\t\t\topacity: 1,\n\t\t\tscale: 1,\n\t\t\twillChange: \"transform, opacity\",\n\t\t\ttransition,\n\t\t},\n\t};\n}\n","import { z } from \"zod\";\nimport { basePresetSchema } from \"./base\";\n\nexport const slideOptionsSchema = basePresetSchema.extend({\n\tdirection: z.enum([\"up\", \"down\", \"left\", \"right\"]).default(\"right\"),\n\tdistance: z.number().default(100),\n});\n\nexport type SlideOptions = z.input<typeof slideOptionsSchema>;\nexport type ResolvedSlideOptions = z.output<typeof slideOptionsSchema>;\n","import type { TargetAndTransition, Variants } from \"motion/react\";\nimport { type SlideOptions, slideOptionsSchema } from \"../schemas/slide\";\nimport { buildTransition } from \"../utils/easing\";\nimport { shouldReduceMotion } from \"../utils/reduced-motion\";\nimport { warn } from \"../utils/warn\";\n\nconst SLIDE_AXIS = {\n\tup: \"y\",\n\tdown: \"y\",\n\tleft: \"x\",\n\tright: \"x\",\n} as const;\n\nconst SLIDE_SIGN = {\n\tup: 1,\n\tdown: -1,\n\tleft: 1,\n\tright: -1,\n} as const;\n\n/**\n * Desplazamiento puro (sin `opacity`) desde una dirección.\n * Función pura que retorna `Variants`.\n */\nexport function slide(options: SlideOptions = {}): Variants {\n\tconst parsed = slideOptionsSchema.safeParse(options);\n\tif (!parsed.success) {\n\t\twarn(\n\t\t\t`Opciones inválidas en slide(): ${parsed.error.message}. Se usarán los valores por defecto.`,\n\t\t);\n\t}\n\tconst opts = parsed.success ? parsed.data : slideOptionsSchema.parse({});\n\n\tconst {\n\t\tdirection,\n\t\tdistance,\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t\treducedMotion,\n\t} = opts;\n\n\tif (shouldReduceMotion(reducedMotion)) {\n\t\treturn {\n\t\t\tinitial: { x: 0, y: 0 },\n\t\t\tanimate: { x: 0, y: 0 },\n\t\t};\n\t}\n\n\tconst transition = buildTransition({\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t});\n\tconst offset = SLIDE_SIGN[direction] * distance;\n\n\tif (SLIDE_AXIS[direction] === \"x\") {\n\t\treturn {\n\t\t\tinitial: { x: offset } satisfies TargetAndTransition,\n\t\t\tanimate: {\n\t\t\t\tx: 0,\n\t\t\t\twillChange: \"transform\",\n\t\t\t\ttransition,\n\t\t\t} satisfies TargetAndTransition,\n\t\t};\n\t}\n\n\treturn {\n\t\tinitial: { y: offset } satisfies TargetAndTransition,\n\t\tanimate: {\n\t\t\ty: 0,\n\t\t\twillChange: \"transform\",\n\t\t\ttransition,\n\t\t} satisfies TargetAndTransition,\n\t};\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export { CounterOptions, DragConstraints, Draggable, DraggableOptions, DraggableProps, Marquee, MarqueeKeyframes, MarqueeKeyframesOptions, MarqueeOptions, MarqueeProps, ResolvedCounterOptions, ResolvedDragBounds, ResolvedDraggableOptions, ResolvedMarqueeOptions, ResolvedTextAnimateOptions, TextAnimate, TextAnimateBy, TextAnimateOptions, TextAnimateProps, TextAnimateType, TextAnimationParams, UseCounterResult, buildMarqueeKeyframes, buildSnapModifier, counterOptionsSchema, dragConstraintsSchema, draggableOptionsSchema, formatCounterValue, getAnimationParams, getDragConstraintsProp, getHighlightRanges, hasInvalidBounds, isWordHighlighted, marqueeOptionsSchema, resolveDragConstraints, splitText, textAnimateOptionsSchema, useCounter } from './components.cjs';
|
|
2
|
+
export { C as ClipRevealOptions, F as FadeOptions, P as ParentVariantsOptions, R as ResolvedClipRevealOptions, a as ResolvedFadeOptions, b as ResolvedParentVariantsOptions, c as ResolvedScaleOptions, d as ResolvedSlideOptions, S as ScaleOptions, e as SlideOptions, f as clipReveal, g as clipRevealOptionsSchema, h as fade, i as fadeOptionsSchema, p as parentVariants, j as parentVariantsSchema, s as scale, k as scaleOptionsSchema, l as slide, m as slideOptionsSchema } from './index-DtNOkqyg.cjs';
|
|
3
|
+
import { Easing, SpringOptions } from 'motion/react';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import 'react';
|
|
6
|
+
|
|
7
|
+
/** Opciones compartidas por todos los presets que retornan variants. */
|
|
8
|
+
declare const basePresetSchema: z.ZodObject<{
|
|
9
|
+
duration: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
delay: z.ZodDefault<z.ZodNumber>;
|
|
11
|
+
ease: z.ZodDefault<z.ZodCustom<Easing, Easing>>;
|
|
12
|
+
spring: z.ZodOptional<z.ZodCustom<Omit<SpringOptions, "keyframes">, Omit<SpringOptions, "keyframes">>>;
|
|
13
|
+
excludeDelay: z.ZodDefault<z.ZodBoolean>;
|
|
14
|
+
reducedMotion: z.ZodDefault<z.ZodBoolean>;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
type BasePresetOptions = z.input<typeof basePresetSchema>;
|
|
17
|
+
type ResolvedBasePresetOptions = z.output<typeof basePresetSchema>;
|
|
18
|
+
|
|
19
|
+
export { type BasePresetOptions, type ResolvedBasePresetOptions, basePresetSchema };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export { CounterOptions, DragConstraints, Draggable, DraggableOptions, DraggableProps, Marquee, MarqueeKeyframes, MarqueeKeyframesOptions, MarqueeOptions, MarqueeProps, ResolvedCounterOptions, ResolvedDragBounds, ResolvedDraggableOptions, ResolvedMarqueeOptions, ResolvedTextAnimateOptions, TextAnimate, TextAnimateBy, TextAnimateOptions, TextAnimateProps, TextAnimateType, TextAnimationParams, UseCounterResult, buildMarqueeKeyframes, buildSnapModifier, counterOptionsSchema, dragConstraintsSchema, draggableOptionsSchema, formatCounterValue, getAnimationParams, getDragConstraintsProp, getHighlightRanges, hasInvalidBounds, isWordHighlighted, marqueeOptionsSchema, resolveDragConstraints, splitText, textAnimateOptionsSchema, useCounter } from './components.js';
|
|
2
|
+
export { C as ClipRevealOptions, F as FadeOptions, P as ParentVariantsOptions, R as ResolvedClipRevealOptions, a as ResolvedFadeOptions, b as ResolvedParentVariantsOptions, c as ResolvedScaleOptions, d as ResolvedSlideOptions, S as ScaleOptions, e as SlideOptions, f as clipReveal, g as clipRevealOptionsSchema, h as fade, i as fadeOptionsSchema, p as parentVariants, j as parentVariantsSchema, s as scale, k as scaleOptionsSchema, l as slide, m as slideOptionsSchema } from './index-DtNOkqyg.js';
|
|
3
|
+
import { Easing, SpringOptions } from 'motion/react';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import 'react';
|
|
6
|
+
|
|
7
|
+
/** Opciones compartidas por todos los presets que retornan variants. */
|
|
8
|
+
declare const basePresetSchema: z.ZodObject<{
|
|
9
|
+
duration: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
delay: z.ZodDefault<z.ZodNumber>;
|
|
11
|
+
ease: z.ZodDefault<z.ZodCustom<Easing, Easing>>;
|
|
12
|
+
spring: z.ZodOptional<z.ZodCustom<Omit<SpringOptions, "keyframes">, Omit<SpringOptions, "keyframes">>>;
|
|
13
|
+
excludeDelay: z.ZodDefault<z.ZodBoolean>;
|
|
14
|
+
reducedMotion: z.ZodDefault<z.ZodBoolean>;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
type BasePresetOptions = z.input<typeof basePresetSchema>;
|
|
17
|
+
type ResolvedBasePresetOptions = z.output<typeof basePresetSchema>;
|
|
18
|
+
|
|
19
|
+
export { type BasePresetOptions, type ResolvedBasePresetOptions, basePresetSchema };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { clipReveal, clipRevealOptionsSchema, scale, scaleOptionsSchema, slide, slideOptionsSchema } from './chunk-ONXBTJWT.js';
|
|
2
|
+
export { Draggable, Marquee, TextAnimate, buildMarqueeKeyframes, buildSnapModifier, counterOptionsSchema, dragConstraintsSchema, draggableOptionsSchema, formatCounterValue, getAnimationParams, getDragConstraintsProp, getHighlightRanges, hasInvalidBounds, isWordHighlighted, marqueeOptionsSchema, resolveDragConstraints, splitText, textAnimateOptionsSchema, useCounter } from './chunk-GU3ZCMLK.js';
|
|
3
|
+
export { basePresetSchema, fade, fadeOptionsSchema, parentVariants, parentVariantsSchema } from './chunk-PFZKSPJW.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
package/dist/presets.cjs
ADDED
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var zod = require('zod');
|
|
4
|
+
var react = require('motion/react');
|
|
5
|
+
|
|
6
|
+
// src/schemas/clip-reveal.ts
|
|
7
|
+
|
|
8
|
+
// src/utils/easing.ts
|
|
9
|
+
var DEFAULT_EASE = [0.16, 1, 0.3, 1];
|
|
10
|
+
function buildTransition(options) {
|
|
11
|
+
const { duration, delay, ease, spring, excludeDelay } = options;
|
|
12
|
+
const base = spring ? { type: "spring", ...spring } : { duration, ease };
|
|
13
|
+
return excludeDelay ? base : { ...base, delay };
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// src/schemas/base.ts
|
|
17
|
+
var EASING_NAMES = /* @__PURE__ */ new Set([
|
|
18
|
+
"linear",
|
|
19
|
+
"easeIn",
|
|
20
|
+
"easeOut",
|
|
21
|
+
"easeInOut",
|
|
22
|
+
"circIn",
|
|
23
|
+
"circOut",
|
|
24
|
+
"circInOut",
|
|
25
|
+
"backIn",
|
|
26
|
+
"backOut",
|
|
27
|
+
"backInOut",
|
|
28
|
+
"anticipate"
|
|
29
|
+
]);
|
|
30
|
+
function isEasing(value) {
|
|
31
|
+
if (typeof value === "function") return true;
|
|
32
|
+
if (typeof value === "string") return EASING_NAMES.has(value);
|
|
33
|
+
return Array.isArray(value) && value.length === 4 && value.every((item) => typeof item === "number");
|
|
34
|
+
}
|
|
35
|
+
function isSpringOptions(value) {
|
|
36
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
37
|
+
}
|
|
38
|
+
var basePresetSchema = zod.z.object({
|
|
39
|
+
duration: zod.z.number().default(0.5),
|
|
40
|
+
delay: zod.z.number().default(0),
|
|
41
|
+
ease: zod.z.custom(isEasing).default(DEFAULT_EASE),
|
|
42
|
+
spring: zod.z.custom(isSpringOptions).optional(),
|
|
43
|
+
excludeDelay: zod.z.boolean().default(false),
|
|
44
|
+
reducedMotion: zod.z.boolean().default(true)
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// src/schemas/clip-reveal.ts
|
|
48
|
+
var clipRevealOptionsSchema = basePresetSchema.extend({
|
|
49
|
+
direction: zod.z.enum(["up", "down", "left", "right"]).default("up"),
|
|
50
|
+
scale: zod.z.number().optional()
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// src/utils/reduced-motion.ts
|
|
54
|
+
function shouldReduceMotion(reducedMotion = true) {
|
|
55
|
+
if (!reducedMotion) return false;
|
|
56
|
+
if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// src/utils/warn.ts
|
|
63
|
+
var PREFIX = "[motion-presets-kit]";
|
|
64
|
+
function isProduction() {
|
|
65
|
+
return typeof process !== "undefined" && !!process.env && process.env.NODE_ENV === "production";
|
|
66
|
+
}
|
|
67
|
+
function warn(message) {
|
|
68
|
+
if (isProduction()) return;
|
|
69
|
+
if (typeof console !== "undefined" && typeof console.warn === "function") {
|
|
70
|
+
console.warn(`${PREFIX} ${message}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// src/presets/clip-reveal.ts
|
|
75
|
+
var REVEALED_CLIP = "inset(0% 0% 0% 0%)";
|
|
76
|
+
var CLIP_INSETS = {
|
|
77
|
+
up: "inset(100% 0% 0% 0%)",
|
|
78
|
+
down: "inset(0% 0% 100% 0%)",
|
|
79
|
+
left: "inset(0% 100% 0% 0%)",
|
|
80
|
+
right: "inset(0% 0% 0% 100%)"
|
|
81
|
+
};
|
|
82
|
+
function clipReveal(options = {}) {
|
|
83
|
+
const parsed = clipRevealOptionsSchema.safeParse(options);
|
|
84
|
+
if (!parsed.success) {
|
|
85
|
+
warn(
|
|
86
|
+
`Opciones inv\xE1lidas en clipReveal(): ${parsed.error.message}. Se usar\xE1n los valores por defecto.`
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
const opts = parsed.success ? parsed.data : clipRevealOptionsSchema.parse({});
|
|
90
|
+
const {
|
|
91
|
+
direction,
|
|
92
|
+
scale: scale2,
|
|
93
|
+
duration,
|
|
94
|
+
delay,
|
|
95
|
+
ease,
|
|
96
|
+
spring,
|
|
97
|
+
excludeDelay,
|
|
98
|
+
reducedMotion
|
|
99
|
+
} = opts;
|
|
100
|
+
const hasScale = scale2 !== void 0;
|
|
101
|
+
if (shouldReduceMotion(reducedMotion)) {
|
|
102
|
+
const final = { clipPath: REVEALED_CLIP };
|
|
103
|
+
if (hasScale) final.scale = 1;
|
|
104
|
+
return { initial: final, animate: final };
|
|
105
|
+
}
|
|
106
|
+
const transition = buildTransition({
|
|
107
|
+
duration,
|
|
108
|
+
delay,
|
|
109
|
+
ease,
|
|
110
|
+
spring,
|
|
111
|
+
excludeDelay
|
|
112
|
+
});
|
|
113
|
+
const initial = { clipPath: CLIP_INSETS[direction] };
|
|
114
|
+
if (hasScale) initial.scale = scale2;
|
|
115
|
+
const animate = {
|
|
116
|
+
clipPath: REVEALED_CLIP,
|
|
117
|
+
willChange: hasScale ? "clip-path, transform" : "clip-path",
|
|
118
|
+
transition
|
|
119
|
+
};
|
|
120
|
+
if (hasScale) animate.scale = 1;
|
|
121
|
+
return { initial, animate };
|
|
122
|
+
}
|
|
123
|
+
var fadeOptionsSchema = basePresetSchema.extend({
|
|
124
|
+
direction: zod.z.enum(["up", "down", "left", "right", "none"]).default("up"),
|
|
125
|
+
distance: zod.z.number().default(60),
|
|
126
|
+
blur: zod.z.number().default(0),
|
|
127
|
+
scale: zod.z.number().default(1)
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
// src/presets/fade.ts
|
|
131
|
+
var FADE_OFFSETS = {
|
|
132
|
+
up: (distance) => ({ y: distance }),
|
|
133
|
+
down: (distance) => ({ y: -distance }),
|
|
134
|
+
left: (distance) => ({ x: distance }),
|
|
135
|
+
right: (distance) => ({ x: -distance }),
|
|
136
|
+
none: () => ({})
|
|
137
|
+
};
|
|
138
|
+
function fade(options = {}) {
|
|
139
|
+
const parsed = fadeOptionsSchema.safeParse(options);
|
|
140
|
+
if (!parsed.success) {
|
|
141
|
+
warn(
|
|
142
|
+
`Opciones inv\xE1lidas en fade(): ${parsed.error.message}. Se usar\xE1n los valores por defecto.`
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
const opts = parsed.success ? parsed.data : fadeOptionsSchema.parse({});
|
|
146
|
+
const {
|
|
147
|
+
direction,
|
|
148
|
+
distance,
|
|
149
|
+
duration,
|
|
150
|
+
delay,
|
|
151
|
+
ease,
|
|
152
|
+
spring,
|
|
153
|
+
excludeDelay,
|
|
154
|
+
blur,
|
|
155
|
+
scale: scale2,
|
|
156
|
+
reducedMotion
|
|
157
|
+
} = opts;
|
|
158
|
+
if (shouldReduceMotion(reducedMotion)) {
|
|
159
|
+
return {
|
|
160
|
+
initial: { opacity: 1, x: 0, y: 0 },
|
|
161
|
+
animate: { opacity: 1, x: 0, y: 0 }
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
const transition = buildTransition({
|
|
165
|
+
duration,
|
|
166
|
+
delay,
|
|
167
|
+
ease,
|
|
168
|
+
spring,
|
|
169
|
+
excludeDelay
|
|
170
|
+
});
|
|
171
|
+
const hasBlur = blur > 0;
|
|
172
|
+
const initial = {
|
|
173
|
+
opacity: 0,
|
|
174
|
+
...FADE_OFFSETS[direction](distance)
|
|
175
|
+
};
|
|
176
|
+
if (scale2 !== 1) initial.scale = scale2;
|
|
177
|
+
if (hasBlur) initial.filter = `blur(${blur}px)`;
|
|
178
|
+
const animate = {
|
|
179
|
+
opacity: 1,
|
|
180
|
+
x: 0,
|
|
181
|
+
y: 0,
|
|
182
|
+
willChange: hasBlur ? "transform, opacity, filter" : "transform, opacity",
|
|
183
|
+
transition
|
|
184
|
+
};
|
|
185
|
+
if (scale2 !== 1) animate.scale = 1;
|
|
186
|
+
if (hasBlur) animate.filter = "blur(0px)";
|
|
187
|
+
return { initial, animate };
|
|
188
|
+
}
|
|
189
|
+
var parentVariantsSchema = zod.z.object({
|
|
190
|
+
delayChildren: zod.z.number().default(0),
|
|
191
|
+
startDelay: zod.z.number().default(0),
|
|
192
|
+
reducedMotion: zod.z.boolean().default(true)
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
// src/presets/parent-variants.ts
|
|
196
|
+
function parentVariants(options = {}) {
|
|
197
|
+
const parsed = parentVariantsSchema.safeParse(options);
|
|
198
|
+
if (!parsed.success) {
|
|
199
|
+
warn(
|
|
200
|
+
`Opciones inv\xE1lidas en parentVariants(): ${parsed.error.message}. Se usar\xE1n los valores por defecto.`
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
const opts = parsed.success ? parsed.data : parentVariantsSchema.parse({});
|
|
204
|
+
const { delayChildren, startDelay, reducedMotion } = opts;
|
|
205
|
+
if (shouldReduceMotion(reducedMotion)) {
|
|
206
|
+
return {
|
|
207
|
+
initial: { opacity: 1 },
|
|
208
|
+
animate: { opacity: 1 }
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
initial: { opacity: 0 },
|
|
213
|
+
animate: {
|
|
214
|
+
opacity: 1,
|
|
215
|
+
transition: {
|
|
216
|
+
delayChildren: react.stagger(delayChildren, { startDelay })
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
var scaleOptionsSchema = basePresetSchema.extend({
|
|
222
|
+
from: zod.z.number().default(0.8)
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
// src/presets/scale.ts
|
|
226
|
+
function scale(options = {}) {
|
|
227
|
+
const parsed = scaleOptionsSchema.safeParse(options);
|
|
228
|
+
if (!parsed.success) {
|
|
229
|
+
warn(
|
|
230
|
+
`Opciones inv\xE1lidas en scale(): ${parsed.error.message}. Se usar\xE1n los valores por defecto.`
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
const opts = parsed.success ? parsed.data : scaleOptionsSchema.parse({});
|
|
234
|
+
const { from, duration, delay, ease, spring, excludeDelay, reducedMotion } = opts;
|
|
235
|
+
if (shouldReduceMotion(reducedMotion)) {
|
|
236
|
+
return {
|
|
237
|
+
initial: { opacity: 1, scale: 1 },
|
|
238
|
+
animate: { opacity: 1, scale: 1 }
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
const transition = buildTransition({
|
|
242
|
+
duration,
|
|
243
|
+
delay,
|
|
244
|
+
ease,
|
|
245
|
+
spring,
|
|
246
|
+
excludeDelay
|
|
247
|
+
});
|
|
248
|
+
return {
|
|
249
|
+
initial: { opacity: 0, scale: from },
|
|
250
|
+
animate: {
|
|
251
|
+
opacity: 1,
|
|
252
|
+
scale: 1,
|
|
253
|
+
willChange: "transform, opacity",
|
|
254
|
+
transition
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
var slideOptionsSchema = basePresetSchema.extend({
|
|
259
|
+
direction: zod.z.enum(["up", "down", "left", "right"]).default("right"),
|
|
260
|
+
distance: zod.z.number().default(100)
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
// src/presets/slide.ts
|
|
264
|
+
var SLIDE_AXIS = {
|
|
265
|
+
up: "y",
|
|
266
|
+
down: "y",
|
|
267
|
+
left: "x",
|
|
268
|
+
right: "x"
|
|
269
|
+
};
|
|
270
|
+
var SLIDE_SIGN = {
|
|
271
|
+
up: 1,
|
|
272
|
+
down: -1,
|
|
273
|
+
left: 1,
|
|
274
|
+
right: -1
|
|
275
|
+
};
|
|
276
|
+
function slide(options = {}) {
|
|
277
|
+
const parsed = slideOptionsSchema.safeParse(options);
|
|
278
|
+
if (!parsed.success) {
|
|
279
|
+
warn(
|
|
280
|
+
`Opciones inv\xE1lidas en slide(): ${parsed.error.message}. Se usar\xE1n los valores por defecto.`
|
|
281
|
+
);
|
|
282
|
+
}
|
|
283
|
+
const opts = parsed.success ? parsed.data : slideOptionsSchema.parse({});
|
|
284
|
+
const {
|
|
285
|
+
direction,
|
|
286
|
+
distance,
|
|
287
|
+
duration,
|
|
288
|
+
delay,
|
|
289
|
+
ease,
|
|
290
|
+
spring,
|
|
291
|
+
excludeDelay,
|
|
292
|
+
reducedMotion
|
|
293
|
+
} = opts;
|
|
294
|
+
if (shouldReduceMotion(reducedMotion)) {
|
|
295
|
+
return {
|
|
296
|
+
initial: { x: 0, y: 0 },
|
|
297
|
+
animate: { x: 0, y: 0 }
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
const transition = buildTransition({
|
|
301
|
+
duration,
|
|
302
|
+
delay,
|
|
303
|
+
ease,
|
|
304
|
+
spring,
|
|
305
|
+
excludeDelay
|
|
306
|
+
});
|
|
307
|
+
const offset = SLIDE_SIGN[direction] * distance;
|
|
308
|
+
if (SLIDE_AXIS[direction] === "x") {
|
|
309
|
+
return {
|
|
310
|
+
initial: { x: offset },
|
|
311
|
+
animate: {
|
|
312
|
+
x: 0,
|
|
313
|
+
willChange: "transform",
|
|
314
|
+
transition
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
return {
|
|
319
|
+
initial: { y: offset },
|
|
320
|
+
animate: {
|
|
321
|
+
y: 0,
|
|
322
|
+
willChange: "transform",
|
|
323
|
+
transition
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
exports.clipReveal = clipReveal;
|
|
329
|
+
exports.fade = fade;
|
|
330
|
+
exports.parentVariants = parentVariants;
|
|
331
|
+
exports.scale = scale;
|
|
332
|
+
exports.slide = slide;
|
|
333
|
+
//# sourceMappingURL=presets.cjs.map
|
|
334
|
+
//# sourceMappingURL=presets.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/easing.ts","../src/schemas/base.ts","../src/schemas/clip-reveal.ts","../src/utils/reduced-motion.ts","../src/utils/warn.ts","../src/presets/clip-reveal.ts","../src/schemas/fade.ts","../src/presets/fade.ts","../src/schemas/parent-variants.ts","../src/presets/parent-variants.ts","../src/schemas/scale.ts","../src/presets/scale.ts","../src/schemas/slide.ts","../src/presets/slide.ts"],"names":["z","scale","stagger"],"mappings":"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","file":"presets.cjs","sourcesContent":["import type { Easing, SpringOptions, Transition } from \"motion/react\";\n\n/** Curva de easing por defecto de todos los presets. */\nexport const DEFAULT_EASE: Easing = [0.16, 1, 0.3, 1];\n\nexport interface BuildTransitionOptions {\n\tduration: number;\n\tdelay: number;\n\tease: Easing;\n\tspring?: Omit<SpringOptions, \"keyframes\">;\n\texcludeDelay: boolean;\n}\n\n/**\n * Construye la transición compartida por los presets.\n * - Si `spring` está definido, sobrescribe `duration` y `ease`.\n * - Si `excludeDelay` es `true`, omite `delay` (compatibilidad con stagger del padre).\n */\nexport function buildTransition(options: BuildTransitionOptions): Transition {\n\tconst { duration, delay, ease, spring, excludeDelay } = options;\n\n\tconst base: Transition = spring\n\t\t? { type: \"spring\", ...spring }\n\t\t: { duration, ease };\n\n\treturn excludeDelay ? base : { ...base, delay };\n}\n","import type { Easing, SpringOptions } from \"motion/react\";\nimport { z } from \"zod\";\nimport { DEFAULT_EASE } from \"../utils/easing\";\n\nconst EASING_NAMES = new Set([\n\t\"linear\",\n\t\"easeIn\",\n\t\"easeOut\",\n\t\"easeInOut\",\n\t\"circIn\",\n\t\"circOut\",\n\t\"circInOut\",\n\t\"backIn\",\n\t\"backOut\",\n\t\"backInOut\",\n\t\"anticipate\",\n]);\n\n/** Valida un `Easing` de motion: nombre, bezier de 4 números o función. */\nfunction isEasing(value: unknown): value is Easing {\n\tif (typeof value === \"function\") return true;\n\tif (typeof value === \"string\") return EASING_NAMES.has(value);\n\treturn (\n\t\tArray.isArray(value) &&\n\t\tvalue.length === 4 &&\n\t\tvalue.every((item) => typeof item === \"number\")\n\t);\n}\n\n/** Valida un objeto de opciones de spring (sin `keyframes`). */\nfunction isSpringOptions(\n\tvalue: unknown,\n): value is Omit<SpringOptions, \"keyframes\"> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Opciones compartidas por todos los presets que retornan variants. */\nexport const basePresetSchema = z.object({\n\tduration: z.number().default(0.5),\n\tdelay: z.number().default(0),\n\tease: z.custom<Easing>(isEasing).default(DEFAULT_EASE),\n\tspring: z\n\t\t.custom<Omit<SpringOptions, \"keyframes\">>(isSpringOptions)\n\t\t.optional(),\n\texcludeDelay: z.boolean().default(false),\n\treducedMotion: z.boolean().default(true),\n});\n\nexport type BasePresetOptions = z.input<typeof basePresetSchema>;\nexport type ResolvedBasePresetOptions = z.output<typeof basePresetSchema>;\n","import { z } from \"zod\";\nimport { basePresetSchema } from \"./base\";\n\nexport const clipRevealOptionsSchema = basePresetSchema.extend({\n\tdirection: z.enum([\"up\", \"down\", \"left\", \"right\"]).default(\"up\"),\n\tscale: z.number().optional(),\n});\n\nexport type ClipRevealOptions = z.input<typeof clipRevealOptionsSchema>;\nexport type ResolvedClipRevealOptions = z.output<\n\ttypeof clipRevealOptionsSchema\n>;\n","/**\n * `true` cuando el usuario prefiere movimiento reducido y la opción está activa.\n * Devuelve `false` en entornos sin `window.matchMedia` (SSR, Node).\n */\nexport function shouldReduceMotion(reducedMotion = true): boolean {\n\tif (!reducedMotion) return false;\n\tif (\n\t\ttypeof window === \"undefined\" ||\n\t\ttypeof window.matchMedia !== \"function\"\n\t) {\n\t\treturn false;\n\t}\n\treturn window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n","const PREFIX = \"[motion-presets-kit]\";\n\nfunction isProduction(): boolean {\n\treturn (\n\t\ttypeof process !== \"undefined\" &&\n\t\t!!process.env &&\n\t\tprocess.env.NODE_ENV === \"production\"\n\t);\n}\n\n/** Aviso de desarrollo con prefijo de la librería (se silencia en producción). */\nexport function warn(message: string): void {\n\tif (isProduction()) return;\n\tif (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n\t\tconsole.warn(`${PREFIX} ${message}`);\n\t}\n}\n","import type { TargetAndTransition, Variants } from \"motion/react\";\nimport {\n\ttype ClipRevealOptions,\n\tclipRevealOptionsSchema,\n} from \"../schemas/clip-reveal\";\nimport { buildTransition } from \"../utils/easing\";\nimport { shouldReduceMotion } from \"../utils/reduced-motion\";\nimport { warn } from \"../utils/warn\";\n\nconst REVEALED_CLIP = \"inset(0% 0% 0% 0%)\";\n\nconst CLIP_INSETS = {\n\tup: \"inset(100% 0% 0% 0%)\",\n\tdown: \"inset(0% 0% 100% 0%)\",\n\tleft: \"inset(0% 100% 0% 0%)\",\n\tright: \"inset(0% 0% 0% 100%)\",\n} as const;\n\n/**\n * Reveal cinematográfico animando `clipPath` (con escala opcional).\n * Función pura que retorna `Variants`.\n */\nexport function clipReveal(options: ClipRevealOptions = {}): Variants {\n\tconst parsed = clipRevealOptionsSchema.safeParse(options);\n\tif (!parsed.success) {\n\t\twarn(\n\t\t\t`Opciones inválidas en clipReveal(): ${parsed.error.message}. Se usarán los valores por defecto.`,\n\t\t);\n\t}\n\tconst opts = parsed.success ? parsed.data : clipRevealOptionsSchema.parse({});\n\n\tconst {\n\t\tdirection,\n\t\tscale,\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t\treducedMotion,\n\t} = opts;\n\tconst hasScale = scale !== undefined;\n\n\tif (shouldReduceMotion(reducedMotion)) {\n\t\tconst final: TargetAndTransition = { clipPath: REVEALED_CLIP };\n\t\tif (hasScale) final.scale = 1;\n\t\treturn { initial: final, animate: final };\n\t}\n\n\tconst transition = buildTransition({\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t});\n\n\tconst initial: TargetAndTransition = { clipPath: CLIP_INSETS[direction] };\n\tif (hasScale) initial.scale = scale;\n\n\tconst animate: TargetAndTransition = {\n\t\tclipPath: REVEALED_CLIP,\n\t\twillChange: hasScale ? \"clip-path, transform\" : \"clip-path\",\n\t\ttransition,\n\t};\n\tif (hasScale) animate.scale = 1;\n\n\treturn { initial, animate };\n}\n","import { z } from \"zod\";\nimport { basePresetSchema } from \"./base\";\n\nexport const fadeOptionsSchema = basePresetSchema.extend({\n\tdirection: z.enum([\"up\", \"down\", \"left\", \"right\", \"none\"]).default(\"up\"),\n\tdistance: z.number().default(60),\n\tblur: z.number().default(0),\n\tscale: z.number().default(1),\n});\n\nexport type FadeOptions = z.input<typeof fadeOptionsSchema>;\nexport type ResolvedFadeOptions = z.output<typeof fadeOptionsSchema>;\n","import type { TargetAndTransition, Variants } from \"motion/react\";\nimport { type FadeOptions, fadeOptionsSchema } from \"../schemas/fade\";\nimport { buildTransition } from \"../utils/easing\";\nimport { shouldReduceMotion } from \"../utils/reduced-motion\";\nimport { warn } from \"../utils/warn\";\n\nconst FADE_OFFSETS = {\n\tup: (distance: number) => ({ y: distance }),\n\tdown: (distance: number) => ({ y: -distance }),\n\tleft: (distance: number) => ({ x: distance }),\n\tright: (distance: number) => ({ x: -distance }),\n\tnone: () => ({}),\n} as const;\n\n/**\n * Fade de entrada con dirección, blur y escala opcionales.\n * Función pura que retorna `Variants` para usar en `motion`/`motion/react`.\n */\nexport function fade(options: FadeOptions = {}): Variants {\n\tconst parsed = fadeOptionsSchema.safeParse(options);\n\tif (!parsed.success) {\n\t\twarn(\n\t\t\t`Opciones inválidas en fade(): ${parsed.error.message}. Se usarán los valores por defecto.`,\n\t\t);\n\t}\n\tconst opts = parsed.success ? parsed.data : fadeOptionsSchema.parse({});\n\n\tconst {\n\t\tdirection,\n\t\tdistance,\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t\tblur,\n\t\tscale,\n\t\treducedMotion,\n\t} = opts;\n\n\tif (shouldReduceMotion(reducedMotion)) {\n\t\treturn {\n\t\t\tinitial: { opacity: 1, x: 0, y: 0 },\n\t\t\tanimate: { opacity: 1, x: 0, y: 0 },\n\t\t};\n\t}\n\n\tconst transition = buildTransition({\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t});\n\tconst hasBlur = blur > 0;\n\n\tconst initial: TargetAndTransition = {\n\t\topacity: 0,\n\t\t...FADE_OFFSETS[direction](distance),\n\t};\n\tif (scale !== 1) initial.scale = scale;\n\tif (hasBlur) initial.filter = `blur(${blur}px)`;\n\n\tconst animate: TargetAndTransition = {\n\t\topacity: 1,\n\t\tx: 0,\n\t\ty: 0,\n\t\twillChange: hasBlur ? \"transform, opacity, filter\" : \"transform, opacity\",\n\t\ttransition,\n\t};\n\tif (scale !== 1) animate.scale = 1;\n\tif (hasBlur) animate.filter = \"blur(0px)\";\n\n\treturn { initial, animate };\n}\n","import { z } from \"zod\";\n\nexport const parentVariantsSchema = z.object({\n\tdelayChildren: z.number().default(0),\n\tstartDelay: z.number().default(0),\n\treducedMotion: z.boolean().default(true),\n});\n\nexport type ParentVariantsOptions = z.input<typeof parentVariantsSchema>;\nexport type ResolvedParentVariantsOptions = z.output<\n\ttypeof parentVariantsSchema\n>;\n","import { stagger, type Variants } from \"motion/react\";\nimport {\n\ttype ParentVariantsOptions,\n\tparentVariantsSchema,\n} from \"../schemas/parent-variants\";\nimport { shouldReduceMotion } from \"../utils/reduced-motion\";\nimport { warn } from \"../utils/warn\";\n\n/**\n * Variants para el contenedor padre: anima hijos en cascada con `stagger()`.\n * Los hijos deben usar `excludeDelay: true` para heredar el stagger (CL-001).\n */\nexport function parentVariants(options: ParentVariantsOptions = {}): Variants {\n\tconst parsed = parentVariantsSchema.safeParse(options);\n\tif (!parsed.success) {\n\t\twarn(\n\t\t\t`Opciones inválidas en parentVariants(): ${parsed.error.message}. Se usarán los valores por defecto.`,\n\t\t);\n\t}\n\tconst opts = parsed.success ? parsed.data : parentVariantsSchema.parse({});\n\n\tconst { delayChildren, startDelay, reducedMotion } = opts;\n\n\tif (shouldReduceMotion(reducedMotion)) {\n\t\treturn {\n\t\t\tinitial: { opacity: 1 },\n\t\t\tanimate: { opacity: 1 },\n\t\t};\n\t}\n\n\treturn {\n\t\tinitial: { opacity: 0 },\n\t\tanimate: {\n\t\t\topacity: 1,\n\t\t\ttransition: {\n\t\t\t\tdelayChildren: stagger(delayChildren, { startDelay }),\n\t\t\t},\n\t\t},\n\t};\n}\n","import { z } from \"zod\";\nimport { basePresetSchema } from \"./base\";\n\nexport const scaleOptionsSchema = basePresetSchema.extend({\n\tfrom: z.number().default(0.8),\n});\n\nexport type ScaleOptions = z.input<typeof scaleOptionsSchema>;\nexport type ResolvedScaleOptions = z.output<typeof scaleOptionsSchema>;\n","import type { Variants } from \"motion/react\";\nimport { type ScaleOptions, scaleOptionsSchema } from \"../schemas/scale\";\nimport { buildTransition } from \"../utils/easing\";\nimport { shouldReduceMotion } from \"../utils/reduced-motion\";\nimport { warn } from \"../utils/warn\";\n\n/**\n * Entrada con escala (`from` → `1`) junto con `opacity: 0 → 1`.\n * Función pura que retorna `Variants`.\n */\nexport function scale(options: ScaleOptions = {}): Variants {\n\tconst parsed = scaleOptionsSchema.safeParse(options);\n\tif (!parsed.success) {\n\t\twarn(\n\t\t\t`Opciones inválidas en scale(): ${parsed.error.message}. Se usarán los valores por defecto.`,\n\t\t);\n\t}\n\tconst opts = parsed.success ? parsed.data : scaleOptionsSchema.parse({});\n\n\tconst { from, duration, delay, ease, spring, excludeDelay, reducedMotion } =\n\t\topts;\n\n\tif (shouldReduceMotion(reducedMotion)) {\n\t\treturn {\n\t\t\tinitial: { opacity: 1, scale: 1 },\n\t\t\tanimate: { opacity: 1, scale: 1 },\n\t\t};\n\t}\n\n\tconst transition = buildTransition({\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t});\n\n\treturn {\n\t\tinitial: { opacity: 0, scale: from },\n\t\tanimate: {\n\t\t\topacity: 1,\n\t\t\tscale: 1,\n\t\t\twillChange: \"transform, opacity\",\n\t\t\ttransition,\n\t\t},\n\t};\n}\n","import { z } from \"zod\";\nimport { basePresetSchema } from \"./base\";\n\nexport const slideOptionsSchema = basePresetSchema.extend({\n\tdirection: z.enum([\"up\", \"down\", \"left\", \"right\"]).default(\"right\"),\n\tdistance: z.number().default(100),\n});\n\nexport type SlideOptions = z.input<typeof slideOptionsSchema>;\nexport type ResolvedSlideOptions = z.output<typeof slideOptionsSchema>;\n","import type { TargetAndTransition, Variants } from \"motion/react\";\nimport { type SlideOptions, slideOptionsSchema } from \"../schemas/slide\";\nimport { buildTransition } from \"../utils/easing\";\nimport { shouldReduceMotion } from \"../utils/reduced-motion\";\nimport { warn } from \"../utils/warn\";\n\nconst SLIDE_AXIS = {\n\tup: \"y\",\n\tdown: \"y\",\n\tleft: \"x\",\n\tright: \"x\",\n} as const;\n\nconst SLIDE_SIGN = {\n\tup: 1,\n\tdown: -1,\n\tleft: 1,\n\tright: -1,\n} as const;\n\n/**\n * Desplazamiento puro (sin `opacity`) desde una dirección.\n * Función pura que retorna `Variants`.\n */\nexport function slide(options: SlideOptions = {}): Variants {\n\tconst parsed = slideOptionsSchema.safeParse(options);\n\tif (!parsed.success) {\n\t\twarn(\n\t\t\t`Opciones inválidas en slide(): ${parsed.error.message}. Se usarán los valores por defecto.`,\n\t\t);\n\t}\n\tconst opts = parsed.success ? parsed.data : slideOptionsSchema.parse({});\n\n\tconst {\n\t\tdirection,\n\t\tdistance,\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t\treducedMotion,\n\t} = opts;\n\n\tif (shouldReduceMotion(reducedMotion)) {\n\t\treturn {\n\t\t\tinitial: { x: 0, y: 0 },\n\t\t\tanimate: { x: 0, y: 0 },\n\t\t};\n\t}\n\n\tconst transition = buildTransition({\n\t\tduration,\n\t\tdelay,\n\t\tease,\n\t\tspring,\n\t\texcludeDelay,\n\t});\n\tconst offset = SLIDE_SIGN[direction] * distance;\n\n\tif (SLIDE_AXIS[direction] === \"x\") {\n\t\treturn {\n\t\t\tinitial: { x: offset } satisfies TargetAndTransition,\n\t\t\tanimate: {\n\t\t\t\tx: 0,\n\t\t\t\twillChange: \"transform\",\n\t\t\t\ttransition,\n\t\t\t} satisfies TargetAndTransition,\n\t\t};\n\t}\n\n\treturn {\n\t\tinitial: { y: offset } satisfies TargetAndTransition,\n\t\tanimate: {\n\t\t\ty: 0,\n\t\t\twillChange: \"transform\",\n\t\t\ttransition,\n\t\t} satisfies TargetAndTransition,\n\t};\n}\n"]}
|
package/dist/presets.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"presets.js"}
|