@sarmal/react
Version:
React components and hooks for @sarmal/core animated curves
1 lines • 32.7 kB
Source Map (JSON)
{"version":3,"sources":["../src/use-morph.ts","../src/utils.ts","../src/use-sarmal.ts","../src/use-render-options.ts","../src/sarmal.tsx","../src/use-sarmal-svg.ts","../src/sarmal-svg.tsx","../src/use-sarmal-dot-matrix.ts","../src/use-dot-matrix-render-options.ts","../src/sarmal-dot-matrix.tsx"],"names":["useRef","useEffect","useLayoutEffect","createSarmal","jsx","memo","createSarmalSVG","createSarmalDotMatrix"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\";\nimport type { CurveDef, SarmalInstance, BaseRuntimeRenderOptions } from \"@sarmal/core\";\nimport type { MorphOptions } from \"./types\";\n\nimport { useRef, useEffect } from \"react\";\n\n/**\n * Creates a `committedCurveRef` and registers a morph effect that calls\n * `morphTo` when the `curve` reference changes.\n *\n * ! Callers must write `committedCurveRef.current = curve` in their init effect right after `createSarmal` / `createSarmalSVG`\n * This syncs the `ref` with the initial curve so the morph effect doesn't fire unnecessarily\n * when init deps and `curve` change at the same time.\n *\n * On initial mount and StrictMode remounts the `ref` already equals `curve`,\n * so no morph is triggered.\n */\nexport function useMorphEffect(\n curve: CurveDef,\n instance: React.RefObject<SarmalInstance<BaseRuntimeRenderOptions> | null>,\n morphOptions: MorphOptions | undefined,\n): React.RefObject<CurveDef> {\n const committedCurveRef = useRef<CurveDef>(curve);\n const morphOptionsRef = useRef<MorphOptions | undefined>(morphOptions);\n morphOptionsRef.current = morphOptions;\n\n useEffect(() => {\n if (curve === committedCurveRef.current) {\n return;\n }\n\n committedCurveRef.current = curve;\n\n if (instance.current == null) {\n return;\n }\n\n const rawOpts = morphOptionsRef.current;\n const opts =\n rawOpts?.morphDuration != null ||\n rawOpts?.morphStrategy != null ||\n rawOpts?.morphEasing != null ||\n rawOpts?.morphAlign != null\n ? {\n ...(rawOpts.morphDuration != null && { duration: rawOpts.morphDuration }),\n ...(rawOpts.morphStrategy != null && { morphStrategy: rawOpts.morphStrategy }),\n ...(rawOpts.morphEasing != null && { easing: rawOpts.morphEasing }),\n ...(rawOpts.morphAlign != null && { align: rawOpts.morphAlign }),\n }\n : undefined;\n\n instance.current.morphTo(curve, opts).catch(() => {});\n }, [curve]);\n\n return committedCurveRef;\n}\n","import type { TrailColor } from \"@sarmal/core\";\n\nexport function resolveCanvasSize(\n canvas: HTMLCanvasElement,\n initWidth?: number,\n initHeight?: number,\n) {\n const parent = canvas.parentElement;\n const parentW = parent?.clientWidth ?? 0;\n const parentH = parent?.clientHeight ?? 0;\n\n const w = initWidth ?? parentW;\n const h = initHeight ?? parentH;\n\n if (w > 0 && h > 0) {\n return { width: w, height: h };\n }\n\n console.warn(\n \"[sarmal] Could not determine canvas dimensions. The parent container reports 0x0. It needs an explicit height (height: auto won't work). Falling back to 300x300.\",\n );\n return { width: 300, height: 300 };\n}\n\nexport function shallowEqualTrailColor(a: TrailColor | undefined, b: TrailColor | undefined) {\n if (a === b) {\n return true;\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((c, i) => c === b[i]);\n }\n return false;\n}\n","\"use client\";\nimport type { CurveDef, SarmalInstance, SarmalOptions, CanvasInit } from \"@sarmal/core\";\nimport type { MorphOptions } from \"./types\";\n\nimport { useRef, useLayoutEffect } from \"react\";\nimport { createSarmal } from \"@sarmal/core\";\nimport { useMorphEffect } from \"./use-morph\";\nimport { resolveCanvasSize } from \"./utils\";\n\nexport function useSarmal(\n curve: CurveDef,\n options?: Partial<SarmalOptions>,\n init?: CanvasInit,\n morphOptions?: MorphOptions,\n): {\n canvasRef: React.RefObject<HTMLCanvasElement | null>;\n instance: React.RefObject<SarmalInstance | null>;\n} {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const instance = useRef<SarmalInstance>(null);\n const committedCurveRef = useMorphEffect(curve, instance, morphOptions);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps -- curve changes go through morphTo, not recreation\n useLayoutEffect(() => {\n const canvas = canvasRef.current;\n if (canvas == null) {\n return;\n }\n\n const { width, height } = resolveCanvasSize(canvas, init?.width, init?.height);\n canvas.width = width;\n canvas.height = height;\n\n instance.current = createSarmal(canvas, curve, {\n ...options,\n ...(init?.trailLength !== undefined && { trailLength: init.trailLength }),\n ...(init?.headRadius !== undefined && { headRadius: init.headRadius }),\n ...(init?.autoStart !== undefined && { autoStart: init.autoStart }),\n ...(init?.initialPhase !== undefined && { initialPhase: init.initialPhase }),\n ...(init?.pauseOnHidden !== undefined && { pauseOnHidden: init.pauseOnHidden }),\n });\n committedCurveRef.current = curve;\n return () => {\n instance.current?.destroy();\n instance.current = null;\n };\n }, [\n init?.width,\n init?.height,\n init?.trailLength,\n init?.headRadius,\n init?.autoStart,\n init?.initialPhase,\n init?.pauseOnHidden,\n ]);\n\n return { canvasRef, instance };\n}\n","\"use client\";\nimport type { SarmalInstance, TrailColor, TrailStyle } from \"@sarmal/core\";\nimport type React from \"react\";\n\nimport { useRef, useEffect } from \"react\";\nimport { shallowEqualTrailColor } from \"./utils\";\n\nexport function useRenderOptions(\n instance: React.RefObject<SarmalInstance | null>,\n trailColor: TrailColor | undefined,\n skeletonColor: string | undefined,\n headColor: string | undefined,\n trailStyle: TrailStyle | undefined,\n trailWidth: number | undefined,\n): void {\n const initializedRef = useRef(false);\n // TrailColor can be an object (array). Shallow equality check would avoid unexpected setRenderOptions calls\n const prevTrailColorRef = useRef<TrailColor | undefined>(trailColor);\n\n useEffect(() => {\n if (!initializedRef.current) {\n initializedRef.current = true;\n return;\n }\n\n const sarmal = instance.current;\n if (!sarmal) {\n return;\n }\n\n const trailColorChanged = !shallowEqualTrailColor(trailColor, prevTrailColorRef.current);\n prevTrailColorRef.current = trailColor;\n\n sarmal.setRenderOptions({\n ...(trailColorChanged && trailColor !== undefined && { trailColor }),\n ...(skeletonColor !== undefined && { skeletonColor }),\n // null is the core API signal for \"derive headColor from trailColor\"\n headColor: headColor ?? null,\n ...(trailStyle !== undefined && { trailStyle }),\n ...(trailWidth !== undefined && { trailWidth }),\n });\n }, [trailColor, skeletonColor, headColor, trailStyle, trailWidth]);\n}\n","\"use client\";\nimport type { SarmalProps } from \"./types\";\n\nimport { useLayoutEffect, memo } from \"react\";\nimport { useSarmal } from \"./use-sarmal\";\nimport { useRenderOptions } from \"./use-render-options\";\n\nconst SarmalInner = ({\n curve,\n className,\n style,\n trailColor,\n morphDuration,\n morphStrategy,\n morphEasing,\n morphAlign,\n onReady,\n skeletonColor,\n headColor,\n trailStyle,\n width,\n height,\n headRadius,\n trailLength,\n trailWidth,\n autoStart,\n initialPhase,\n pauseOnHidden,\n}: SarmalProps) => {\n const { canvasRef, instance } = useSarmal(\n curve,\n {\n ...(skeletonColor !== undefined && { skeletonColor }),\n ...(trailColor !== undefined && { trailColor }),\n ...(headColor !== undefined && { headColor }),\n ...(trailStyle !== undefined && { trailStyle }),\n },\n {\n ...(width !== undefined && { width }),\n ...(height !== undefined && { height }),\n ...(headRadius !== undefined && { headRadius }),\n ...(trailLength !== undefined && { trailLength }),\n ...(autoStart !== undefined && { autoStart }),\n ...(initialPhase !== undefined && { initialPhase }),\n ...(pauseOnHidden !== undefined && { pauseOnHidden }),\n },\n morphDuration !== undefined ||\n morphStrategy !== undefined ||\n morphEasing !== undefined ||\n morphAlign !== undefined\n ? {\n ...(morphDuration !== undefined && { morphDuration }),\n ...(morphStrategy !== undefined && { morphStrategy }),\n ...(morphEasing !== undefined && { morphEasing }),\n ...(morphAlign !== undefined && { morphAlign }),\n }\n : undefined,\n );\n\n useRenderOptions(instance, trailColor, skeletonColor, headColor, trailStyle, trailWidth);\n\n useLayoutEffect(() => {\n if (instance.current) {\n onReady?.(instance.current);\n }\n }, []);\n\n return <canvas ref={canvasRef} className={className} style={style} />;\n};\n\nexport const Sarmal = memo(SarmalInner);\nexport type { SarmalProps };\n","\"use client\";\nimport type { CurveDef, SarmalInstance, SVGSarmalOptions, BaseInit } from \"@sarmal/core\";\nimport type { MorphOptions } from \"./types\";\n\nimport { useRef, useLayoutEffect } from \"react\";\nimport { createSarmalSVG } from \"@sarmal/core\";\nimport { useMorphEffect } from \"./use-morph\";\n\n/**\n * React hook for creating and managing a Sarmal SVG instance.\n * Mirrors the lifecycle of {@link useSarmal}\n * but calls {@link createSarmalSVG} and returns an SVG ref instead of a canvas ref.\n * SVG elements scale with CSS, so width/height are not needed.\n * The renderer sets `viewBox=\"0 0 100 100\"` on the root `<svg>`.\n *\n * @param curve The curve definition to render. Morphs on reference change.\n * @param options Runtime visual options (trailColor, headColor, etc.) which can be updated with setRenderOptions\n * @param init Initial options. Changing any of these destroys and recreates the instance\n * @param morphOptions Options forwarded to morphTo when the curve changes\n * @returns An object with `svgRef` (attach to an `<svg>` element) and `instance` (the live SarmalInstance)\n */\nexport function useSarmalSVG(\n curve: CurveDef,\n options?: Partial<SVGSarmalOptions>,\n init?: BaseInit,\n morphOptions?: MorphOptions,\n): {\n svgRef: React.RefObject<SVGSVGElement | null>;\n instance: React.RefObject<SarmalInstance | null>;\n} {\n const svgRef = useRef<SVGSVGElement>(null);\n const instance = useRef<SarmalInstance>(null);\n const committedCurveRef = useMorphEffect(curve, instance, morphOptions);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps -- curve changes go through morphTo, not recreation\n useLayoutEffect(() => {\n const svg = svgRef.current;\n if (svg == null) {\n return;\n }\n\n instance.current = createSarmalSVG(svg, curve, {\n ...options,\n ...(init?.trailLength !== undefined && { trailLength: init.trailLength }),\n ...(init?.headRadius !== undefined && { headRadius: init.headRadius }),\n ...(init?.autoStart !== undefined && { autoStart: init.autoStart }),\n ...(init?.initialPhase !== undefined && { initialPhase: init.initialPhase }),\n ...(init?.pauseOnHidden !== undefined && { pauseOnHidden: init.pauseOnHidden }),\n });\n committedCurveRef.current = curve;\n return () => {\n instance.current?.destroy();\n instance.current = null;\n };\n }, [\n init?.trailLength,\n init?.headRadius,\n init?.autoStart,\n init?.initialPhase,\n init?.pauseOnHidden,\n ]);\n\n return { svgRef, instance };\n}\n","\"use client\";\nimport type { SarmalSVGProps } from \"./types\";\n\nimport { useLayoutEffect, memo } from \"react\";\nimport { useSarmalSVG } from \"./use-sarmal-svg\";\nimport { useRenderOptions } from \"./use-render-options\";\n\nconst SarmalSVGInner = ({\n curve,\n className,\n style,\n trailColor,\n morphDuration,\n morphStrategy,\n morphEasing,\n morphAlign,\n onReady,\n skeletonColor,\n headColor,\n trailStyle,\n headRadius,\n trailLength,\n trailWidth,\n autoStart,\n initialPhase,\n pauseOnHidden,\n}: SarmalSVGProps) => {\n const { svgRef, instance } = useSarmalSVG(\n curve,\n {\n ...(skeletonColor !== undefined && { skeletonColor }),\n ...(trailColor !== undefined && { trailColor }),\n ...(headColor !== undefined && { headColor }),\n ...(trailStyle !== undefined && { trailStyle }),\n },\n {\n ...(headRadius !== undefined && { headRadius }),\n ...(trailLength !== undefined && { trailLength }),\n ...(autoStart !== undefined && { autoStart }),\n ...(initialPhase !== undefined && { initialPhase }),\n ...(pauseOnHidden !== undefined && { pauseOnHidden }),\n },\n morphDuration !== undefined ||\n morphStrategy !== undefined ||\n morphEasing !== undefined ||\n morphAlign !== undefined\n ? {\n ...(morphDuration !== undefined && { morphDuration }),\n ...(morphStrategy !== undefined && { morphStrategy }),\n ...(morphEasing !== undefined && { morphEasing }),\n ...(morphAlign !== undefined && { morphAlign }),\n }\n : undefined,\n );\n\n useRenderOptions(instance, trailColor, skeletonColor, headColor, trailStyle, trailWidth);\n\n useLayoutEffect(() => {\n if (instance.current) {\n onReady?.(instance.current);\n }\n }, []);\n\n return <svg ref={svgRef} className={className} style={style} />;\n};\n\nexport const SarmalSVG = memo(SarmalSVGInner);\nexport type { SarmalSVGProps };\n","\"use client\";\nimport type {\n CurveDef,\n SarmalInstance,\n DotMatrixSarmalOptions,\n DotMatrixRuntimeRenderOptions,\n DotMatrixInit,\n} from \"@sarmal/core\";\nimport type { MorphOptions } from \"./types\";\n\nimport { useRef, useLayoutEffect } from \"react\";\nimport { createSarmalDotMatrix } from \"@sarmal/core\";\nimport { useMorphEffect } from \"./use-morph\";\nimport { resolveCanvasSize } from \"./utils\";\n\n/**\n * React hook for creating and managing a Sarmal dot matrix instance.\n * Mirrors the lifecycle of `useSarmal` but calls {@link createSarmalDotMatrix}.\n *\n * @param curve The curve definition to render. Morphs on reference change.\n * @param options Runtime visual options forwarded at creation.\n * @param init Initialization options. Changing any of these destroys and recreates the instance.\n * @param morphOptions Options forwarded to morphTo when the curve changes.\n */\nexport function useSarmalDotMatrix(\n curve: CurveDef,\n options?: Partial<DotMatrixSarmalOptions>,\n init?: DotMatrixInit,\n morphOptions?: MorphOptions,\n) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const instance = useRef<SarmalInstance<DotMatrixRuntimeRenderOptions>>(null);\n const committedCurveRef = useMorphEffect(curve, instance, morphOptions);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps -- curve changes go through morphTo, not recreation\n useLayoutEffect(() => {\n const canvas = canvasRef.current;\n if (canvas == null) {\n return;\n }\n\n const { width, height } = resolveCanvasSize(canvas, init?.width, init?.height);\n canvas.width = width;\n canvas.height = height;\n\n instance.current = createSarmalDotMatrix(canvas, curve, {\n ...options,\n ...(init?.cols !== undefined && { cols: init.cols }),\n ...(init?.rows !== undefined && { rows: init.rows }),\n ...(init?.roundness !== undefined && { roundness: init.roundness }),\n ...(init?.trailLength !== undefined && { trailLength: init.trailLength }),\n ...(init?.autoStart !== undefined && { autoStart: init.autoStart }),\n ...(init?.initialPhase !== undefined && { initialPhase: init.initialPhase }),\n ...(init?.pauseOnHidden !== undefined && { pauseOnHidden: init.pauseOnHidden }),\n });\n committedCurveRef.current = curve;\n return () => {\n instance.current?.destroy();\n instance.current = null;\n };\n }, [\n init?.width,\n init?.height,\n init?.cols,\n init?.rows,\n init?.roundness,\n init?.trailLength,\n init?.autoStart,\n init?.initialPhase,\n init?.pauseOnHidden,\n ]);\n\n return { canvasRef, instance };\n}\n","\"use client\";\nimport type {\n SarmalInstance,\n DotMatrixRuntimeRenderOptions,\n TrailColor,\n TrailStyle,\n} from \"@sarmal/core\";\nimport type React from \"react\";\n\nimport { useRef, useEffect } from \"react\";\nimport { shallowEqualTrailColor } from \"./utils\";\n\n/**\n * Calls `setRenderOptions` on a dot matrix instance when runtime visual props change.\n * Only the four options supported by the dot matrix renderer are handled:\n * `trailColor`, `trailStyle`, `skeletonColor`, and `gridColor`\n *\n * ! `headColor`, `headRadius`, and `trailWidth` are not available on the dot matrix renderer.\n */\nexport function useDotMatrixRenderOptions(\n instance: React.RefObject<SarmalInstance<DotMatrixRuntimeRenderOptions> | null>,\n trailColor: TrailColor | undefined,\n trailStyle: TrailStyle | undefined,\n skeletonColor: string | undefined,\n gridColor: string | undefined,\n) {\n const initializedRef = useRef(false);\n const prevTrailColorRef = useRef<TrailColor | undefined>(trailColor);\n\n useEffect(() => {\n if (!initializedRef.current) {\n initializedRef.current = true;\n return;\n }\n\n const sarmal = instance.current;\n if (!sarmal) {\n return;\n }\n\n const trailColorChanged = !shallowEqualTrailColor(trailColor, prevTrailColorRef.current);\n prevTrailColorRef.current = trailColor;\n\n sarmal.setRenderOptions({\n ...(trailColorChanged && trailColor !== undefined && { trailColor }),\n ...(skeletonColor !== undefined && { skeletonColor }),\n ...(trailStyle !== undefined && { trailStyle }),\n ...(gridColor !== undefined && { gridColor }),\n });\n }, [trailColor, skeletonColor, trailStyle, gridColor]);\n}\n","\"use client\";\nimport type { SarmalDotMatrixProps } from \"./types\";\n\nimport { useLayoutEffect, memo } from \"react\";\nimport { useSarmalDotMatrix } from \"./use-sarmal-dot-matrix\";\nimport { useDotMatrixRenderOptions } from \"./use-dot-matrix-render-options\";\n\nconst SarmalDotMatrixInner = ({\n curve,\n className,\n style,\n trailColor,\n trailStyle,\n skeletonColor,\n gridColor,\n morphDuration,\n morphStrategy,\n morphEasing,\n morphAlign,\n onReady,\n cols,\n rows,\n roundness,\n trailLength,\n width,\n height,\n autoStart,\n initialPhase,\n pauseOnHidden,\n}: SarmalDotMatrixProps) => {\n const { canvasRef, instance } = useSarmalDotMatrix(\n curve,\n {\n ...(trailColor !== undefined && { trailColor }),\n ...(trailStyle !== undefined && { trailStyle }),\n ...(skeletonColor !== undefined && { skeletonColor }),\n ...(gridColor !== undefined && { gridColor }),\n },\n {\n ...(cols !== undefined && { cols }),\n ...(rows !== undefined && { rows }),\n ...(roundness !== undefined && { roundness }),\n ...(trailLength !== undefined && { trailLength }),\n ...(width !== undefined && { width }),\n ...(height !== undefined && { height }),\n ...(autoStart !== undefined && { autoStart }),\n ...(initialPhase !== undefined && { initialPhase }),\n ...(pauseOnHidden !== undefined && { pauseOnHidden }),\n },\n morphDuration !== undefined ||\n morphStrategy !== undefined ||\n morphEasing !== undefined ||\n morphAlign !== undefined\n ? {\n ...(morphDuration !== undefined && { morphDuration }),\n ...(morphStrategy !== undefined && { morphStrategy }),\n ...(morphEasing !== undefined && { morphEasing }),\n ...(morphAlign !== undefined && { morphAlign }),\n }\n : undefined,\n );\n\n useDotMatrixRenderOptions(instance, trailColor, trailStyle, skeletonColor, gridColor);\n\n useLayoutEffect(() => {\n if (instance.current) {\n onReady?.(instance.current);\n }\n }, []);\n\n return <canvas ref={canvasRef} className={className} style={style} />;\n};\n\nexport const SarmalDotMatrix = memo(SarmalDotMatrixInner);\nexport type { SarmalDotMatrixProps };\n"]}