@gfazioli/mantine-text-animate 2.4.2 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/Gradient/Gradient.cjs +80 -0
  3. package/dist/cjs/Gradient/Gradient.cjs.map +1 -0
  4. package/dist/cjs/Gradient/Gradient.module.css.cjs +7 -0
  5. package/dist/cjs/Gradient/Gradient.module.css.cjs.map +1 -0
  6. package/dist/cjs/Highlight/Highlight.cjs +78 -0
  7. package/dist/cjs/Highlight/Highlight.cjs.map +1 -0
  8. package/dist/cjs/Highlight/Highlight.module.css.cjs +7 -0
  9. package/dist/cjs/Highlight/Highlight.module.css.cjs.map +1 -0
  10. package/dist/cjs/Morphing/Morphing.cjs +79 -0
  11. package/dist/cjs/Morphing/Morphing.cjs.map +1 -0
  12. package/dist/cjs/Morphing/Morphing.module.css.cjs +7 -0
  13. package/dist/cjs/Morphing/Morphing.module.css.cjs.map +1 -0
  14. package/dist/cjs/Morphing/use-morphing.cjs +240 -0
  15. package/dist/cjs/Morphing/use-morphing.cjs.map +1 -0
  16. package/dist/cjs/NumberTicker/NumberTicker.cjs +11 -3
  17. package/dist/cjs/NumberTicker/NumberTicker.cjs.map +1 -1
  18. package/dist/cjs/NumberTicker/use-number-ticker.cjs +15 -3
  19. package/dist/cjs/NumberTicker/use-number-ticker.cjs.map +1 -1
  20. package/dist/cjs/RotatingText/RotatingText.cjs +71 -0
  21. package/dist/cjs/RotatingText/RotatingText.cjs.map +1 -0
  22. package/dist/cjs/RotatingText/RotatingText.module.css.cjs +7 -0
  23. package/dist/cjs/RotatingText/RotatingText.module.css.cjs.map +1 -0
  24. package/dist/cjs/RotatingText/use-rotating-text.cjs +112 -0
  25. package/dist/cjs/RotatingText/use-rotating-text.cjs.map +1 -0
  26. package/dist/cjs/Spinner/Spinner.cjs +42 -31
  27. package/dist/cjs/Spinner/Spinner.cjs.map +1 -1
  28. package/dist/cjs/SplitFlap/SplitFlap.cjs +92 -0
  29. package/dist/cjs/SplitFlap/SplitFlap.cjs.map +1 -0
  30. package/dist/cjs/SplitFlap/SplitFlap.module.css.cjs +7 -0
  31. package/dist/cjs/SplitFlap/SplitFlap.module.css.cjs.map +1 -0
  32. package/dist/cjs/SplitFlap/use-split-flap.cjs +258 -0
  33. package/dist/cjs/SplitFlap/use-split-flap.cjs.map +1 -0
  34. package/dist/cjs/TextAnimate.cjs +114 -29
  35. package/dist/cjs/TextAnimate.cjs.map +1 -1
  36. package/dist/cjs/TextTicker/TextTicker.cjs +6 -0
  37. package/dist/cjs/TextTicker/TextTicker.cjs.map +1 -1
  38. package/dist/cjs/TextTicker/use-text-ticker.cjs +97 -7
  39. package/dist/cjs/TextTicker/use-text-ticker.cjs.map +1 -1
  40. package/dist/cjs/Typewriter/Typewriter.cjs +40 -20
  41. package/dist/cjs/Typewriter/Typewriter.cjs.map +1 -1
  42. package/dist/cjs/Typewriter/use-typewriter.cjs +85 -6
  43. package/dist/cjs/Typewriter/use-typewriter.cjs.map +1 -1
  44. package/dist/cjs/index.cjs +8 -0
  45. package/dist/cjs/index.cjs.map +1 -1
  46. package/dist/cjs/use-text-animate.cjs +38 -0
  47. package/dist/cjs/use-text-animate.cjs.map +1 -0
  48. package/dist/esm/Gradient/Gradient.mjs +78 -0
  49. package/dist/esm/Gradient/Gradient.mjs.map +1 -0
  50. package/dist/esm/Gradient/Gradient.module.css.mjs +5 -0
  51. package/dist/esm/Gradient/Gradient.module.css.mjs.map +1 -0
  52. package/dist/esm/Highlight/Highlight.mjs +76 -0
  53. package/dist/esm/Highlight/Highlight.mjs.map +1 -0
  54. package/dist/esm/Highlight/Highlight.module.css.mjs +5 -0
  55. package/dist/esm/Highlight/Highlight.module.css.mjs.map +1 -0
  56. package/dist/esm/Morphing/Morphing.mjs +77 -0
  57. package/dist/esm/Morphing/Morphing.mjs.map +1 -0
  58. package/dist/esm/Morphing/Morphing.module.css.mjs +5 -0
  59. package/dist/esm/Morphing/Morphing.module.css.mjs.map +1 -0
  60. package/dist/esm/Morphing/use-morphing.mjs +238 -0
  61. package/dist/esm/Morphing/use-morphing.mjs.map +1 -0
  62. package/dist/esm/NumberTicker/NumberTicker.mjs +11 -3
  63. package/dist/esm/NumberTicker/NumberTicker.mjs.map +1 -1
  64. package/dist/esm/NumberTicker/use-number-ticker.mjs +15 -3
  65. package/dist/esm/NumberTicker/use-number-ticker.mjs.map +1 -1
  66. package/dist/esm/RotatingText/RotatingText.mjs +69 -0
  67. package/dist/esm/RotatingText/RotatingText.mjs.map +1 -0
  68. package/dist/esm/RotatingText/RotatingText.module.css.mjs +5 -0
  69. package/dist/esm/RotatingText/RotatingText.module.css.mjs.map +1 -0
  70. package/dist/esm/RotatingText/use-rotating-text.mjs +110 -0
  71. package/dist/esm/RotatingText/use-rotating-text.mjs.map +1 -0
  72. package/dist/esm/Spinner/Spinner.mjs +43 -32
  73. package/dist/esm/Spinner/Spinner.mjs.map +1 -1
  74. package/dist/esm/SplitFlap/SplitFlap.mjs +90 -0
  75. package/dist/esm/SplitFlap/SplitFlap.mjs.map +1 -0
  76. package/dist/esm/SplitFlap/SplitFlap.module.css.mjs +5 -0
  77. package/dist/esm/SplitFlap/SplitFlap.module.css.mjs.map +1 -0
  78. package/dist/esm/SplitFlap/use-split-flap.mjs +256 -0
  79. package/dist/esm/SplitFlap/use-split-flap.mjs.map +1 -0
  80. package/dist/esm/TextAnimate.mjs +115 -30
  81. package/dist/esm/TextAnimate.mjs.map +1 -1
  82. package/dist/esm/TextTicker/TextTicker.mjs +6 -0
  83. package/dist/esm/TextTicker/TextTicker.mjs.map +1 -1
  84. package/dist/esm/TextTicker/use-text-ticker.mjs +97 -7
  85. package/dist/esm/TextTicker/use-text-ticker.mjs.map +1 -1
  86. package/dist/esm/Typewriter/Typewriter.mjs +40 -20
  87. package/dist/esm/Typewriter/Typewriter.mjs.map +1 -1
  88. package/dist/esm/Typewriter/use-typewriter.mjs +86 -7
  89. package/dist/esm/Typewriter/use-typewriter.mjs.map +1 -1
  90. package/dist/esm/index.mjs +4 -0
  91. package/dist/esm/index.mjs.map +1 -1
  92. package/dist/esm/use-text-animate.mjs +36 -0
  93. package/dist/esm/use-text-animate.mjs.map +1 -0
  94. package/dist/styles.css +1 -1
  95. package/dist/styles.layer.css +1 -1
  96. package/dist/types/Gradient/Gradient.d.ts +73 -0
  97. package/dist/types/Highlight/Highlight.d.ts +78 -0
  98. package/dist/types/Morphing/Morphing.d.ts +50 -0
  99. package/dist/types/Morphing/use-morphing.d.ts +73 -0
  100. package/dist/types/NumberTicker/NumberTicker.d.ts +9 -1
  101. package/dist/types/NumberTicker/use-number-ticker.d.ts +8 -1
  102. package/dist/types/RotatingText/RotatingText.d.ts +55 -0
  103. package/dist/types/RotatingText/use-rotating-text.d.ts +49 -0
  104. package/dist/types/Spinner/Spinner.d.ts +7 -4
  105. package/dist/types/SplitFlap/SplitFlap.d.ts +85 -0
  106. package/dist/types/SplitFlap/use-split-flap.d.ts +85 -0
  107. package/dist/types/TextAnimate.d.ts +76 -1
  108. package/dist/types/TextTicker/use-text-ticker.d.ts +15 -1
  109. package/dist/types/Typewriter/use-typewriter.d.ts +26 -2
  110. package/dist/types/index.d.mts +10 -1
  111. package/dist/types/index.d.ts +10 -1
  112. package/dist/types/use-text-animate.d.ts +36 -0
  113. package/package.json +1 -1
@@ -1,8 +1,14 @@
1
1
  'use client';
2
- import React, { useState, useEffect } from 'react';
2
+ import React, { useRef, useState, useEffect, useCallback } from 'react';
3
3
  import { createVarsResolver, getSize, polymorphicFactory, useProps, useStyles, Box, Text } from '@mantine/core';
4
+ import { useMergedRef } from '@mantine/hooks';
5
+ import { Gradient } from './Gradient/Gradient.mjs';
6
+ import { Highlight } from './Highlight/Highlight.mjs';
7
+ import { Morphing } from './Morphing/Morphing.mjs';
4
8
  import { NumberTicker } from './NumberTicker/NumberTicker.mjs';
9
+ import { RotatingText } from './RotatingText/RotatingText.mjs';
5
10
  import { Spinner } from './Spinner/Spinner.mjs';
11
+ import { SplitFlap } from './SplitFlap/SplitFlap.mjs';
6
12
  import { TextTicker } from './TextTicker/TextTicker.mjs';
7
13
  import { Typewriter } from './Typewriter/Typewriter.mjs';
8
14
  import classes from './TextAnimate.module.css.mjs';
@@ -25,6 +31,12 @@ const defaultStaggerTimings = {
25
31
  character: 0.03,
26
32
  line: 0.06
27
33
  };
34
+ const containerStyles = {
35
+ whiteSpace: "pre-wrap",
36
+ position: "relative",
37
+ display: "block",
38
+ minHeight: "1em"
39
+ };
28
40
  const varsResolver = createVarsResolver(
29
41
  (_, { animateProps: { translateDistance, blurAmount, scaleAmount } }) => ({
30
42
  root: {
@@ -47,6 +59,10 @@ const TextAnimate = polymorphicFactory((_props, ref) => {
47
59
  animateProps,
48
60
  onAnimationStart,
49
61
  onAnimationEnd,
62
+ onAnimationComplete,
63
+ trigger,
64
+ triggerOptions,
65
+ loopDelay,
50
66
  classNames,
51
67
  style,
52
68
  styles,
@@ -57,18 +73,69 @@ const TextAnimate = polymorphicFactory((_props, ref) => {
57
73
  ...others
58
74
  } = props;
59
75
  const staggerTiming = segmentDelay !== void 0 ? segmentDelay : defaultStaggerTimings[by];
60
- const [isInitialRender, setIsInitialRender] = useState(true);
76
+ const completedCountRef = useRef(0);
77
+ const [isAnimating, setIsAnimating] = useState(false);
78
+ const [loopPhase, setLoopPhase] = useState("in");
79
+ const loopTimerRef = useRef(null);
80
+ useEffect(() => {
81
+ return () => {
82
+ if (loopTimerRef.current) {
83
+ clearTimeout(loopTimerRef.current);
84
+ }
85
+ };
86
+ }, []);
87
+ const inViewRef = useRef(null);
88
+ const [inView, setInView] = useState(false);
61
89
  useEffect(() => {
62
- if (animate === "in") {
63
- setIsInitialRender(false);
90
+ if (trigger !== "inView" || !inViewRef.current || typeof IntersectionObserver === "undefined") {
91
+ return;
64
92
  }
65
- }, [animate]);
66
- const containerStyles = {
67
- whiteSpace: "pre-wrap",
68
- position: "relative",
69
- display: "block",
70
- minHeight: "1em"
71
- };
93
+ const observer = new IntersectionObserver(
94
+ ([entry]) => {
95
+ if (entry.isIntersecting) {
96
+ setInView(true);
97
+ observer.disconnect();
98
+ }
99
+ },
100
+ {
101
+ threshold: triggerOptions?.threshold ?? 0.1,
102
+ rootMargin: triggerOptions?.rootMargin ?? "0px"
103
+ }
104
+ );
105
+ observer.observe(inViewRef.current);
106
+ return () => observer.disconnect();
107
+ }, [trigger, triggerOptions?.threshold, triggerOptions?.rootMargin]);
108
+ const mergedRef = useMergedRef(ref, inViewRef);
109
+ let effectiveAnimate = animate;
110
+ if (animate === "loop") {
111
+ effectiveAnimate = loopPhase;
112
+ }
113
+ if (trigger === "inView") {
114
+ effectiveAnimate = inView ? animate === "loop" ? loopPhase : animate || "in" : void 0;
115
+ }
116
+ const prefersReducedMotion = typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
117
+ const prevEffectiveRef = useRef(effectiveAnimate);
118
+ useEffect(() => {
119
+ if (effectiveAnimate !== prevEffectiveRef.current) {
120
+ completedCountRef.current = 0;
121
+ prevEffectiveRef.current = effectiveAnimate;
122
+ if (prefersReducedMotion) {
123
+ setIsAnimating(false);
124
+ onAnimationComplete?.(effectiveAnimate);
125
+ if (animate === "loop") {
126
+ const delayMs = loopDelay ?? 2e3;
127
+ if (loopTimerRef.current) {
128
+ clearTimeout(loopTimerRef.current);
129
+ }
130
+ loopTimerRef.current = setTimeout(() => {
131
+ setLoopPhase((prev) => prev === "in" ? "out" : "in");
132
+ }, delayMs);
133
+ }
134
+ } else {
135
+ setIsAnimating(true);
136
+ }
137
+ }
138
+ }, [effectiveAnimate, prefersReducedMotion, onAnimationComplete, animate, loopDelay]);
72
139
  const getStyles = useStyles({
73
140
  name: "TextAnimate",
74
141
  props,
@@ -81,21 +148,6 @@ const TextAnimate = polymorphicFactory((_props, ref) => {
81
148
  vars,
82
149
  varsResolver
83
150
  });
84
- if (animate === "none" || animate === false || animate === void 0) {
85
- if (!isInitialRender) {
86
- setIsInitialRender(true);
87
- }
88
- return /* @__PURE__ */ React.createElement(Box, { ref, ...getStyles("root"), style: containerStyles }, /* @__PURE__ */ React.createElement(Text, { component: "span", ...others, style: { visibility: "hidden" } }, children));
89
- }
90
- if (animate === "static") {
91
- return /* @__PURE__ */ React.createElement(Box, { ref, ...getStyles("root"), style: containerStyles }, /* @__PURE__ */ React.createElement(Text, { component: "span", ...others }, children));
92
- }
93
- function handleOnAnimationStart() {
94
- onAnimationStart?.(animate);
95
- }
96
- function handleOnAnimationEnd() {
97
- onAnimationEnd?.(animate);
98
- }
99
151
  let segments = [];
100
152
  switch (by) {
101
153
  case "word":
@@ -112,19 +164,47 @@ const TextAnimate = polymorphicFactory((_props, ref) => {
112
164
  segments = [children];
113
165
  break;
114
166
  }
115
- return /* @__PURE__ */ React.createElement(Box, { ref, ...getStyles("root", { style: containerStyles }) }, segments.map((segment, i) => /* @__PURE__ */ React.createElement(
167
+ const handleOnAnimationStart = useCallback(() => {
168
+ setIsAnimating(true);
169
+ onAnimationStart?.(effectiveAnimate);
170
+ }, [onAnimationStart, effectiveAnimate]);
171
+ const handleOnAnimationEnd = useCallback(() => {
172
+ onAnimationEnd?.(effectiveAnimate);
173
+ completedCountRef.current += 1;
174
+ if (completedCountRef.current === segments.length) {
175
+ setIsAnimating(false);
176
+ onAnimationComplete?.(effectiveAnimate);
177
+ if (animate === "loop") {
178
+ const delayMs = loopDelay ?? 2e3;
179
+ if (loopTimerRef.current) {
180
+ clearTimeout(loopTimerRef.current);
181
+ }
182
+ loopTimerRef.current = setTimeout(() => {
183
+ setLoopPhase((prev) => prev === "in" ? "out" : "in");
184
+ }, delayMs);
185
+ }
186
+ }
187
+ }, [onAnimationEnd, onAnimationComplete, effectiveAnimate, segments.length, animate, loopDelay]);
188
+ if (effectiveAnimate === "none" || effectiveAnimate === false || effectiveAnimate === void 0) {
189
+ return /* @__PURE__ */ React.createElement(Box, { ref: mergedRef, ...getStyles("root"), style: containerStyles, "aria-live": "polite" }, /* @__PURE__ */ React.createElement(Text, { component: "span", ...others, style: { visibility: "hidden" } }, children));
190
+ }
191
+ if (effectiveAnimate === "static") {
192
+ return /* @__PURE__ */ React.createElement(Box, { ref: mergedRef, ...getStyles("root"), style: containerStyles, "aria-live": "polite" }, /* @__PURE__ */ React.createElement(Text, { component: "span", ...others }, children));
193
+ }
194
+ return /* @__PURE__ */ React.createElement(Box, { ref: mergedRef, ...getStyles("root", { style: containerStyles }), "aria-live": "polite" }, segments.map((segment, i) => /* @__PURE__ */ React.createElement(
116
195
  Text,
117
196
  {
118
- "data-text-animate": animate,
197
+ "data-text-animate": effectiveAnimate,
119
198
  "data-text-animate-animation": animation,
120
- key: `${by}-${segment}-${delay}-${animate}-${duration}-${JSON.stringify(animateProps)}-${i}`,
199
+ "data-animating": isAnimating || void 0,
200
+ key: `${by}-${effectiveAnimate}-${i}`,
121
201
  ...getStyles("segment", {
122
202
  style: {
123
203
  ...by === "line" ? { display: "block", whiteSpace: "normal" } : {},
124
204
  animationDelay: `${delay + i * staggerTiming}s`,
125
205
  animationDuration: `${duration}s`,
126
206
  animationFillMode: "forwards",
127
- animationDirection: animate === "in" ? "normal" : "reverse"
207
+ animationDirection: effectiveAnimate === "in" ? "normal" : "reverse"
128
208
  }
129
209
  }),
130
210
  component: "span",
@@ -141,6 +221,11 @@ TextAnimate.Typewriter = Typewriter;
141
221
  TextAnimate.Spinner = Spinner;
142
222
  TextAnimate.NumberTicker = NumberTicker;
143
223
  TextAnimate.TextTicker = TextTicker;
224
+ TextAnimate.Gradient = Gradient;
225
+ TextAnimate.Highlight = Highlight;
226
+ TextAnimate.SplitFlap = SplitFlap;
227
+ TextAnimate.Morphing = Morphing;
228
+ TextAnimate.RotatingText = RotatingText;
144
229
 
145
230
  export { TextAnimate };
146
231
  //# sourceMappingURL=TextAnimate.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextAnimate.mjs","sources":["../../src/TextAnimate.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport {\n Box,\n createVarsResolver,\n getSize,\n polymorphicFactory,\n Text,\n useProps,\n useStyles,\n type BoxProps,\n type MantineSize,\n type PolymorphicFactory,\n type StylesApiProps,\n type TextProps,\n type TextStylesNames,\n type TextVariant,\n} from '@mantine/core';\nimport { NumberTicker } from './NumberTicker/NumberTicker';\nimport { Spinner } from './Spinner/Spinner';\nimport { TextTicker } from './TextTicker/TextTicker';\nimport { Typewriter } from './Typewriter/Typewriter';\nimport classes from './TextAnimate.module.css';\n\n/**\n * Type defining how text should be split for animation\n * - text: Animate the entire text as one unit\n * - word: Animate each word separately\n * - character: Animate each character separately\n * - line: Animate each line separately (split by newlines)\n */\nexport type TextAnimateAnimationType = 'text' | 'word' | 'character' | 'line';\n\n/**\n * Available animation variants\n */\nexport type TextAnimateAnimationVariant =\n | 'fade'\n | 'blur'\n | 'scale'\n | 'slideUp'\n | 'slideDown'\n | 'slideUpElastic'\n | 'slideDownElastic'\n | 'slideLeft'\n | 'slideRight'\n | 'slideLeftElastic'\n | 'slideRightElastic'\n | 'blurUp'\n | 'blurDown';\n\n/**\n * Animation direction\n */\nexport type TextAnimateAnimationDirection = 'in' | 'out' | 'static' | 'none' | false | undefined;\n\n// Add a new interface for AnimateProps\ninterface TextAnimateAnimateProps {\n /**\n * Controls the distance for slide animations (in pixels)\n * @default 20\n */\n translateDistance?: MantineSize;\n\n /**\n * Controls the scale factor for scale animations\n * For scaleUp: initial scale = 1 - scaleAmount (e.g., 0.8 means start at 0.2)\n * For scaleDown: initial scale = 1 + scaleAmount (e.g., 0.8 means start at 1.8)\n * @default 0.8\n */\n scaleAmount?: number;\n\n /**\n * Controls the blur amount for blur animations (in pixels)\n * @default 10\n */\n blurAmount?: MantineSize;\n}\n\nexport type TextAnimateStylesNames = 'root' | 'segment' | TextStylesNames;\n\nexport type TextAnimateCssVariables = {\n root:\n | '--text-animate-translation-distance'\n | '--text-animate-blur-amount'\n | '--text-animate-scale-amount';\n};\n\nexport type TextAnimateDirection = 'horizontal' | 'vertical';\n\nexport type TextAnimateIn = 'positive' | 'negative';\n\nexport type TextAnimateOut = TextAnimateIn;\n\nexport interface TextAnimateBaseProps {\n /**\n * The text content to animate\n */\n children: string;\n\n /**\n * The class name to be applied to each segment\n */\n segmentClassName?: string;\n\n /**\n * The delay before the animation starts (in seconds)\n * @default 0\n */\n delay?: number;\n\n /**\n * The duration of the animation (in seconds)\n * @default 0.3\n */\n duration?: number;\n\n /**\n * How to split the text for animation\n * @default \"word\"\n */\n by?: TextAnimateAnimationType;\n\n /**\n * Controls the animation direction\n * - `in`: Animate elements in (appear)\n * - `out`: Animate elements out (disappear)\n * - `static`: Do not animate\n * - `none`: Do not animate\n * @default undefined (no animation)\n */\n animate?: TextAnimateAnimationDirection;\n\n /**\n * The animation preset to use\n * @default \"fade\"\n */\n animation?: TextAnimateAnimationVariant;\n\n /**\n * The delay between each segment's animation (in seconds)\n * This controls the staggered timing between segments\n * @default Based on animation type (0.03-0.06)\n */\n segmentDelay?: number;\n\n /**\n * Animation properties to control intensity of animations\n * @default Values are chosen to match the selected animation variant.\n */\n animateProps?: TextAnimateAnimateProps;\n\n /**\n * Callback function to be called when the animation starts\n * @param animate The direction of the animation\n */\n onAnimationStart?: (animate: 'in' | 'out') => void;\n\n /**\n * Callback function to be called when the animation ends\n * @param animate The direction of the animation\n */\n onAnimationEnd?: (animate: 'in' | 'out') => void;\n}\n\nexport interface TextAnimateProps\n extends\n BoxProps,\n Omit<TextProps, 'classNames' | 'styles' | 'unstyled' | 'vars' | 'attributes'>,\n TextAnimateBaseProps,\n StylesApiProps<TextAnimateFactory> {}\n\nexport type TextAnimateFactory = PolymorphicFactory<{\n props: TextAnimateProps;\n defaultComponent: 'p';\n defaultRef: HTMLParagraphElement;\n stylesNames: TextAnimateStylesNames;\n vars: TextAnimateCssVariables;\n variant: TextVariant;\n staticComponents: {\n Typewriter: typeof Typewriter;\n Spinner: typeof Spinner;\n NumberTicker: typeof NumberTicker;\n TextTicker: typeof TextTicker;\n };\n}>;\n\nconst defaultProps: Partial<TextAnimateProps> = {\n delay: 0,\n duration: 0.3,\n segmentDelay: 0.05,\n by: 'word',\n animation: 'fade',\n animateProps: {\n translateDistance: '20' as MantineSize,\n scaleAmount: 2,\n blurAmount: '10' as MantineSize,\n },\n};\n\n/**\n * Default stagger timing values for different animation types (in seconds)\n * Controls the delay between animating each segment\n */\nconst defaultStaggerTimings: Record<TextAnimateAnimationType, number> = {\n text: 0.06,\n word: 0.05,\n character: 0.03,\n line: 0.06,\n};\n\nconst varsResolver = createVarsResolver<TextAnimateFactory>(\n (_, { animateProps: { translateDistance, blurAmount, scaleAmount } }) => ({\n root: {\n '--text-animate-translation-distance': translateDistance\n ? getSize(translateDistance, 'translate-distance')\n : '20px',\n '--text-animate-blur-amount': blurAmount ? getSize(blurAmount, 'blur-amount') : '10px',\n '--text-animate-scale-amount': scaleAmount ? scaleAmount.toString() : '0.8',\n },\n })\n);\n\nexport const TextAnimate = polymorphicFactory<TextAnimateFactory>((_props, ref) => {\n const props = useProps('TextAnimate', defaultProps, _props);\n const {\n delay,\n duration,\n segmentClassName,\n animate,\n by,\n animation,\n segmentDelay,\n animateProps,\n onAnimationStart,\n onAnimationEnd,\n\n classNames,\n style,\n styles,\n unstyled,\n vars,\n children,\n className,\n\n ...others\n } = props;\n\n // Use provided segmentDelay or default based on animation type\n const staggerTiming = segmentDelay !== undefined ? segmentDelay : defaultStaggerTimings[by];\n\n // Add state to track if we're transitioning from \"none\" to \"in\"\n const [isInitialRender, setIsInitialRender] = useState(true);\n\n // Use useEffect to handle the transition\n useEffect(() => {\n if (animate === 'in') {\n // If we're animating in, we're no longer in initial render state\n setIsInitialRender(false);\n }\n }, [animate]);\n\n // Container styles\n const containerStyles: React.CSSProperties = {\n whiteSpace: 'pre-wrap',\n position: 'relative',\n display: 'block',\n minHeight: '1em',\n };\n\n const getStyles = useStyles<TextAnimateFactory>({\n name: 'TextAnimate',\n props,\n classes,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n varsResolver,\n });\n\n // If animate is \"none\" or false, return null (don't render anything)\n if (animate === 'none' || animate === false || animate === undefined) {\n // Reset the initial render state when we hide the component\n if (!isInitialRender) {\n setIsInitialRender(true);\n }\n return (\n <Box ref={ref} {...getStyles('root')} style={containerStyles}>\n <Text component=\"span\" {...others} style={{ visibility: 'hidden' }}>\n {children}\n </Text>\n </Box>\n );\n }\n\n // If animate is \"static\", render the text directly without animation\n if (animate === 'static') {\n return (\n <Box ref={ref} {...getStyles('root')} style={containerStyles}>\n <Text component=\"span\" {...others}>\n {children}\n </Text>\n </Box>\n );\n }\n\n // Handle animation events\n function handleOnAnimationStart() {\n onAnimationStart?.(animate as 'in' | 'out');\n }\n\n // Handle animation end event\n function handleOnAnimationEnd() {\n onAnimationEnd?.(animate as 'in' | 'out');\n }\n\n // Split text based on the 'by' prop\n let segments: string[] = [];\n switch (by) {\n case 'word':\n segments = children.split(/(\\s+)/);\n break;\n case 'character':\n segments = children.split('');\n break;\n case 'line':\n segments = children.split('\\n');\n break;\n case 'text':\n default:\n segments = [children];\n break;\n }\n\n return (\n <Box ref={ref} {...getStyles('root', { style: containerStyles })}>\n {segments.map((segment, i) => (\n <Text\n data-text-animate={animate}\n data-text-animate-animation={animation}\n key={`${by}-${segment}-${delay}-${animate}-${duration}-${JSON.stringify(animateProps)}-${i}`}\n {...getStyles('segment', {\n style: {\n ...(by === 'line' ? { display: 'block', whiteSpace: 'normal' } : {}),\n animationDelay: `${delay + i * staggerTiming}s`,\n animationDuration: `${duration}s`,\n animationFillMode: 'forwards',\n animationDirection: animate === 'in' ? 'normal' : 'reverse',\n },\n })}\n component=\"span\"\n onAnimationStart={handleOnAnimationStart}\n onAnimationEnd={handleOnAnimationEnd}\n {...others}\n >\n {segment}\n </Text>\n ))}\n </Box>\n );\n});\n\nTextAnimate.classes = classes;\nTextAnimate.displayName = 'TextAnimate';\nTextAnimate.Typewriter = Typewriter;\nTextAnimate.Spinner = Spinner;\nTextAnimate.NumberTicker = NumberTicker;\nTextAnimate.TextTicker = TextTicker;\n"],"names":[],"mappings":";;;;;;;;;AAeA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAY,CAAA,CAAA,CAAG,CAAA;AACrB,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAK,EAAE,CAAC,CAAA;AACV,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAE,CAAA,CAAA,CAAG,CAAA;AACf,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,EAAE,CAAA,CAAA,CAAA,CAAI,CAAA;AACpB,CAAA,CAAE,CAAA,CAAE,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACZ,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACnB,CAAA,CAAE,YAAY,CAAA,CAAE,CAAA;AAChB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,EAAE,CAAA,CAAA,CAAA,CAAI,CAAA;AAC3B,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,EAAE,CAAC,CAAA;AAClB,CAAA,CAAA,CAAA,CAAI,UAAU,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA;AAChB,CAAA,CAAA,CAAA;AACA,CAAC,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,qBAAqB,CAAA,CAAA,CAAG,CAAA;AAC9B,CAAA,CAAE,CAAA,CAAA,CAAA,CAAI,EAAE,CAAA,CAAA,CAAA,CAAI,CAAA;AACZ,CAAA,CAAE,CAAA,CAAA,CAAA,CAAI,EAAE,CAAA,CAAA,CAAA,CAAI,CAAA;AACZ,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,CAAA,CAAA,CAAA,CAAI,CAAA;AACjB,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA;AACR,CAAC,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA;AACvC,CAAA,CAAE,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,YAAY,CAAA,CAAE,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAE,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AAC5E,CAAA,CAAA,CAAA,CAAI,IAAI,CAAA,CAAE,CAAA;AACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAC,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AAC1H,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA4B,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AAC5F,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA6B,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,WAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAE,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA;AAC5E,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAG,CAAA;AACH,CAAC,CAAA;AACW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA;AAC/D,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,aAAa,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA;AAC7D,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACR,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA;AACT,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA;AACZ,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA;AACpB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AACX,CAAA,CAAA,CAAA,CAAI,CAAA,CAAE,CAAA;AACN,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA;AACb,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;AAChB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;AAChB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA;AACpB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA;AAClB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA;AACd,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA;AACT,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACV,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA;AACZ,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAI,CAAA;AACR,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA;AACZ,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA;AACb,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACP,CAAA,CAAA,CAAG,GAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA;AACX,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,CAAC,CAAA,CAAE,CAAC,CAAA;AAC1F,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA;AAC9D,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AAClB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAE,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA;AAC/B,CAAA,CAAA,CAAA,CAAI,CAAA;AACJ,CAAA,CAAE,CAAC,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAC,CAAA;AACf,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,eAAe,CAAA,CAAA,CAAG,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA;AACxB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AACpB,CAAA,CAAA,CAAA,CAAI,SAAS,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA;AACf,CAAA,CAAA,CAAG,CAAA;AACH,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAI,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA;AACvB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA;AACT,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AACX,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA;AACb,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA;AACT,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA;AACd,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACV,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA;AACZ,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAI,CAAA;AACR,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA,CAAG,CAAC,CAAA;AACJ,CAAA,CAAE,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAE,CAAA;AACrE,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAE,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAI,CAAA;AACJ,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAuB,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,EAAE,CAAA,CAAA,CAAG,CAAA,CAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,MAAM,CAAC,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,aAAa,CAAC,CAAA,CAAA,CAAA,CAAI,EAAE,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA,CAAE,UAAU,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAE,CAAA,CAAE,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAC,CAAA;AAClO,CAAA,CAAE,CAAA;AACF,CAAA,CAAE,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAE,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAI,uBAAuB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,GAAG,CAAA,CAAE,CAAA,CAAE,CAAA,CAAA,CAAG,CAAA,CAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,MAAM,CAAC,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAAA,CAAA,CAAI,EAAE,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAE,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAE,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAC,CAAA;AACjM,CAAA,CAAE,CAAA;AACF,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,sBAAsB,CAAA,CAAA,CAAG,CAAA;AACpC,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA;AAC/B,CAAA,CAAE,CAAA;AACF,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,oBAAoB,CAAA,CAAA,CAAG,CAAA;AAClC,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA;AAC7B,CAAA,CAAE,CAAA;AACF,CAAA,CAAE,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAG,CAAA,CAAE,CAAA;AACnB,CAAA,CAAE,QAAQ,CAAA,CAAE,CAAA,CAAA,CAAA;AACZ,CAAA,CAAA,CAAA,CAAI,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,OAAO,CAAC,CAAA;AACxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAI,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,EAAE,CAAC,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAI,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,IAAI,CAAC,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAI,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACf,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA;AAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA;AACA,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAuB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,CAAA,CAAE,CAAA,CAAA,CAAG,EAAE,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAE,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,OAAO,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA;AAC7K,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAI,CAAA;AACR,CAAA,CAAA,CAAA,CAAI,CAAA;AACJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA6B,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAG,CAAA,CAAE,CAAC,CAAA,CAAE,EAAE,CAAC,CAAC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAClG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,KAAK,CAAA,CAAE,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAG,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAG,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAE,GAAG,CAAA,CAAE,CAAA;AAC5E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAC,CAAC,CAAA;AACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,iBAAiB,CAAA,CAAE,CAAC,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAC,CAAC,CAAA;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,kBAAkB,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,KAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,QAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC5D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA;AACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA;AACL,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA;AACL,CAAC,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA;;"}
1
+ {"version":3,"file":"TextAnimate.mjs","sources":["../../src/TextAnimate.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n Box,\n createVarsResolver,\n getSize,\n polymorphicFactory,\n Text,\n useProps,\n useStyles,\n type BoxProps,\n type MantineSize,\n type PolymorphicFactory,\n type StylesApiProps,\n type TextProps,\n type TextStylesNames,\n type TextVariant,\n} from '@mantine/core';\nimport { useMergedRef } from '@mantine/hooks';\nimport { Gradient } from './Gradient/Gradient';\nimport { Highlight } from './Highlight/Highlight';\nimport { Morphing } from './Morphing/Morphing';\nimport { NumberTicker } from './NumberTicker/NumberTicker';\nimport { RotatingText } from './RotatingText/RotatingText';\nimport { Spinner } from './Spinner/Spinner';\nimport { SplitFlap } from './SplitFlap/SplitFlap';\nimport { TextTicker } from './TextTicker/TextTicker';\nimport { Typewriter } from './Typewriter/Typewriter';\nimport classes from './TextAnimate.module.css';\n\n/**\n * Type defining how text should be split for animation\n * - text: Animate the entire text as one unit\n * - word: Animate each word separately\n * - character: Animate each character separately\n * - line: Animate each line separately (split by newlines)\n */\nexport type TextAnimateAnimationType = 'text' | 'word' | 'character' | 'line';\n\n/**\n * Available animation variants\n */\nexport type TextAnimateAnimationVariant =\n | 'fade'\n | 'blur'\n | 'scale'\n | 'slideUp'\n | 'slideDown'\n | 'slideUpElastic'\n | 'slideDownElastic'\n | 'slideLeft'\n | 'slideRight'\n | 'slideLeftElastic'\n | 'slideRightElastic'\n | 'blurUp'\n | 'blurDown';\n\n/**\n * Animation direction\n */\nexport type TextAnimateAnimationDirection =\n | 'in'\n | 'out'\n | 'loop'\n | 'static'\n | 'none'\n | false\n | undefined;\n\n// Add a new interface for AnimateProps\ninterface TextAnimateAnimateProps {\n /**\n * Controls the distance for slide animations (in pixels)\n * @default 20\n */\n translateDistance?: MantineSize;\n\n /**\n * Controls the scale factor for scale animations\n * For scaleUp: initial scale = 1 - scaleAmount (e.g., 0.8 means start at 0.2)\n * For scaleDown: initial scale = 1 + scaleAmount (e.g., 0.8 means start at 1.8)\n * @default 0.8\n */\n scaleAmount?: number;\n\n /**\n * Controls the blur amount for blur animations (in pixels)\n * @default 10\n */\n blurAmount?: MantineSize;\n}\n\n/**\n * Trigger mode for TextAnimate animation\n * - `mount`: Animate on mount (default behavior)\n * - `inView`: Animate when the element enters the viewport\n * - `manual`: Do not auto-animate; control via `animate` prop only\n */\nexport type TextAnimateTrigger = 'mount' | 'inView' | 'manual';\n\n/**\n * Options for the IntersectionObserver when trigger is \"inView\"\n */\nexport interface TextAnimateTriggerOptions {\n /**\n * IntersectionObserver threshold (0-1)\n * @default 0.1\n */\n threshold?: number;\n\n /**\n * IntersectionObserver root margin\n * @default \"0px\"\n */\n rootMargin?: string;\n}\n\nexport type TextAnimateStylesNames = 'root' | 'segment' | TextStylesNames;\n\nexport type TextAnimateCssVariables = {\n root:\n | '--text-animate-translation-distance'\n | '--text-animate-blur-amount'\n | '--text-animate-scale-amount';\n};\n\nexport type TextAnimateDirection = 'horizontal' | 'vertical';\n\nexport type TextAnimateIn = 'positive' | 'negative';\n\nexport type TextAnimateOut = TextAnimateIn;\n\nexport interface TextAnimateBaseProps {\n /**\n * The text content to animate\n */\n children: string;\n\n /**\n * The class name to be applied to each segment\n */\n segmentClassName?: string;\n\n /**\n * The delay before the animation starts (in seconds)\n * @default 0\n */\n delay?: number;\n\n /**\n * The duration of the animation (in seconds)\n * @default 0.3\n */\n duration?: number;\n\n /**\n * How to split the text for animation\n * @default \"word\"\n */\n by?: TextAnimateAnimationType;\n\n /**\n * Controls the animation direction\n * - `in`: Animate elements in (appear)\n * - `out`: Animate elements out (disappear)\n * - `static`: Do not animate\n * - `none`: Do not animate\n * @default undefined (no animation)\n */\n animate?: TextAnimateAnimationDirection;\n\n /**\n * The animation preset to use\n * @default \"fade\"\n */\n animation?: TextAnimateAnimationVariant;\n\n /**\n * The delay between each segment's animation (in seconds)\n * This controls the staggered timing between segments\n * @default Based on animation type (0.03-0.06)\n */\n segmentDelay?: number;\n\n /**\n * Animation properties to control intensity of animations\n * @default Values are chosen to match the selected animation variant.\n */\n animateProps?: TextAnimateAnimateProps;\n\n /**\n * Callback function to be called when the animation starts\n * @param animate The direction of the animation\n */\n onAnimationStart?: (animate: 'in' | 'out') => void;\n\n /**\n * Callback function to be called when the animation ends\n * @param animate The direction of the animation\n */\n onAnimationEnd?: (animate: 'in' | 'out') => void;\n\n /**\n * Callback function called when all segments have completed their animation\n * @param animate The direction of the animation\n */\n onAnimationComplete?: (animate: 'in' | 'out') => void;\n\n /**\n * Trigger mode for animation\n * - `mount`: Animate on mount (default, preserves v2 behavior)\n * - `inView`: Animate when element enters the viewport via IntersectionObserver\n * - `manual`: Do not auto-animate; control via `animate` prop only\n * @default \"mount\"\n */\n trigger?: TextAnimateTrigger;\n\n /**\n * Options for IntersectionObserver when trigger is \"inView\"\n */\n triggerOptions?: TextAnimateTriggerOptions;\n\n /**\n * Delay in milliseconds between loop phases (in→pause→out→pause→in)\n * Only used when `animate=\"loop\"`\n * @default 2000\n */\n loopDelay?: number;\n}\n\nexport interface TextAnimateProps\n extends\n BoxProps,\n Omit<TextProps, 'classNames' | 'styles' | 'unstyled' | 'vars' | 'attributes'>,\n TextAnimateBaseProps,\n StylesApiProps<TextAnimateFactory> {}\n\nexport type TextAnimateFactory = PolymorphicFactory<{\n props: TextAnimateProps;\n defaultComponent: 'p';\n defaultRef: HTMLParagraphElement;\n stylesNames: TextAnimateStylesNames;\n vars: TextAnimateCssVariables;\n variant: TextVariant;\n staticComponents: {\n Typewriter: typeof Typewriter;\n Spinner: typeof Spinner;\n NumberTicker: typeof NumberTicker;\n TextTicker: typeof TextTicker;\n Gradient: typeof Gradient;\n Highlight: typeof Highlight;\n SplitFlap: typeof SplitFlap;\n Morphing: typeof Morphing;\n RotatingText: typeof RotatingText;\n };\n}>;\n\nconst defaultProps: Partial<TextAnimateProps> = {\n delay: 0,\n duration: 0.3,\n segmentDelay: 0.05,\n by: 'word',\n animation: 'fade',\n animateProps: {\n translateDistance: '20' as MantineSize,\n scaleAmount: 2,\n blurAmount: '10' as MantineSize,\n },\n};\n\n/**\n * Default stagger timing values for different animation types (in seconds)\n * Controls the delay between animating each segment\n */\nconst defaultStaggerTimings: Record<TextAnimateAnimationType, number> = {\n text: 0.06,\n word: 0.05,\n character: 0.03,\n line: 0.06,\n};\n\nconst containerStyles: React.CSSProperties = {\n whiteSpace: 'pre-wrap',\n position: 'relative',\n display: 'block',\n minHeight: '1em',\n};\n\nconst varsResolver = createVarsResolver<TextAnimateFactory>(\n (_, { animateProps: { translateDistance, blurAmount, scaleAmount } }) => ({\n root: {\n '--text-animate-translation-distance': translateDistance\n ? getSize(translateDistance, 'translate-distance')\n : '20px',\n '--text-animate-blur-amount': blurAmount ? getSize(blurAmount, 'blur-amount') : '10px',\n '--text-animate-scale-amount': scaleAmount ? scaleAmount.toString() : '0.8',\n },\n })\n);\n\nexport const TextAnimate = polymorphicFactory<TextAnimateFactory>((_props, ref) => {\n const props = useProps('TextAnimate', defaultProps, _props);\n const {\n delay,\n duration,\n segmentClassName,\n animate,\n by,\n animation,\n segmentDelay,\n animateProps,\n onAnimationStart,\n onAnimationEnd,\n onAnimationComplete,\n trigger,\n triggerOptions,\n loopDelay,\n\n classNames,\n style,\n styles,\n unstyled,\n vars,\n children,\n className,\n\n ...others\n } = props;\n\n // Use provided segmentDelay or default based on animation type\n const staggerTiming = segmentDelay !== undefined ? segmentDelay : defaultStaggerTimings[by];\n\n // Track completed segment animations and will-change lifecycle\n const completedCountRef = useRef(0);\n const [isAnimating, setIsAnimating] = useState(false);\n\n // Loop mode state machine\n const [loopPhase, setLoopPhase] = useState<'in' | 'out'>('in');\n const loopTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n // Cleanup loop timer on unmount\n useEffect(() => {\n return () => {\n if (loopTimerRef.current) {\n clearTimeout(loopTimerRef.current);\n }\n };\n }, []);\n\n // IntersectionObserver for trigger=\"inView\"\n const inViewRef = useRef<HTMLElement>(null);\n const [inView, setInView] = useState(false);\n\n useEffect(() => {\n if (trigger !== 'inView' || !inViewRef.current || typeof IntersectionObserver === 'undefined') {\n return;\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setInView(true);\n observer.disconnect();\n }\n },\n {\n threshold: triggerOptions?.threshold ?? 0.1,\n rootMargin: triggerOptions?.rootMargin ?? '0px',\n }\n );\n\n observer.observe(inViewRef.current);\n return () => observer.disconnect();\n }, [trigger, triggerOptions?.threshold, triggerOptions?.rootMargin]);\n\n const mergedRef = useMergedRef(ref, inViewRef);\n\n // Resolve effective animate value based on trigger mode and loop\n let effectiveAnimate = animate;\n if (animate === 'loop') {\n effectiveAnimate = loopPhase;\n }\n if (trigger === 'inView') {\n effectiveAnimate = inView ? (animate === 'loop' ? loopPhase : animate || 'in') : undefined;\n }\n\n // Detect prefers-reduced-motion (CSS disables animations, so onAnimationEnd never fires)\n const prefersReducedMotion =\n typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n // Reset counter when effective animation direction changes (includes loop phase transitions)\n const prevEffectiveRef = useRef(effectiveAnimate);\n useEffect(() => {\n if (effectiveAnimate !== prevEffectiveRef.current) {\n completedCountRef.current = 0;\n prevEffectiveRef.current = effectiveAnimate;\n\n if (prefersReducedMotion) {\n // CSS animations are disabled — short-circuit: fire completion synchronously\n setIsAnimating(false);\n onAnimationComplete?.(effectiveAnimate as 'in' | 'out');\n if (animate === 'loop') {\n const delayMs = loopDelay ?? 2000;\n if (loopTimerRef.current) {\n clearTimeout(loopTimerRef.current);\n }\n loopTimerRef.current = setTimeout(() => {\n setLoopPhase((prev) => (prev === 'in' ? 'out' : 'in'));\n }, delayMs);\n }\n } else {\n setIsAnimating(true);\n }\n }\n }, [effectiveAnimate, prefersReducedMotion, onAnimationComplete, animate, loopDelay]);\n\n const getStyles = useStyles<TextAnimateFactory>({\n name: 'TextAnimate',\n props,\n classes,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n varsResolver,\n });\n\n // Split text based on the 'by' prop — must be before early returns to keep hook order stable\n let segments: string[] = [];\n switch (by) {\n case 'word':\n segments = children.split(/(\\s+)/);\n break;\n case 'character':\n segments = children.split('');\n break;\n case 'line':\n segments = children.split('\\n');\n break;\n case 'text':\n default:\n segments = [children];\n break;\n }\n\n // Handle animation events — hooks must be called before early returns\n const handleOnAnimationStart = useCallback(() => {\n setIsAnimating(true);\n onAnimationStart?.(effectiveAnimate as 'in' | 'out');\n }, [onAnimationStart, effectiveAnimate]);\n\n const handleOnAnimationEnd = useCallback(() => {\n onAnimationEnd?.(effectiveAnimate as 'in' | 'out');\n completedCountRef.current += 1;\n if (completedCountRef.current === segments.length) {\n setIsAnimating(false);\n onAnimationComplete?.(effectiveAnimate as 'in' | 'out');\n\n // Loop mode: schedule next phase transition\n if (animate === 'loop') {\n const delayMs = loopDelay ?? 2000;\n if (loopTimerRef.current) {\n clearTimeout(loopTimerRef.current);\n }\n loopTimerRef.current = setTimeout(() => {\n setLoopPhase((prev) => (prev === 'in' ? 'out' : 'in'));\n }, delayMs);\n }\n }\n }, [onAnimationEnd, onAnimationComplete, effectiveAnimate, segments.length, animate, loopDelay]);\n\n // If animate is \"none\" or false, render hidden text (preserves layout space)\n if (effectiveAnimate === 'none' || effectiveAnimate === false || effectiveAnimate === undefined) {\n return (\n <Box ref={mergedRef} {...getStyles('root')} style={containerStyles} aria-live=\"polite\">\n <Text component=\"span\" {...others} style={{ visibility: 'hidden' }}>\n {children}\n </Text>\n </Box>\n );\n }\n\n // If animate is \"static\", render the text directly without animation\n if (effectiveAnimate === 'static') {\n return (\n <Box ref={mergedRef} {...getStyles('root')} style={containerStyles} aria-live=\"polite\">\n <Text component=\"span\" {...others}>\n {children}\n </Text>\n </Box>\n );\n }\n\n return (\n <Box ref={mergedRef} {...getStyles('root', { style: containerStyles })} aria-live=\"polite\">\n {segments.map((segment, i) => (\n <Text\n data-text-animate={effectiveAnimate}\n data-text-animate-animation={animation}\n data-animating={isAnimating || undefined}\n key={`${by}-${effectiveAnimate}-${i}`}\n {...getStyles('segment', {\n style: {\n ...(by === 'line' ? { display: 'block', whiteSpace: 'normal' } : {}),\n animationDelay: `${delay + i * staggerTiming}s`,\n animationDuration: `${duration}s`,\n animationFillMode: 'forwards',\n animationDirection: effectiveAnimate === 'in' ? 'normal' : 'reverse',\n },\n })}\n component=\"span\"\n onAnimationStart={handleOnAnimationStart}\n onAnimationEnd={handleOnAnimationEnd}\n {...others}\n >\n {segment}\n </Text>\n ))}\n </Box>\n );\n});\n\nTextAnimate.classes = classes;\nTextAnimate.displayName = 'TextAnimate';\nTextAnimate.Typewriter = Typewriter;\nTextAnimate.Spinner = Spinner;\nTextAnimate.NumberTicker = NumberTicker;\nTextAnimate.TextTicker = TextTicker;\nTextAnimate.Gradient = Gradient;\nTextAnimate.Highlight = Highlight;\nTextAnimate.SplitFlap = SplitFlap;\nTextAnimate.Morphing = Morphing;\nTextAnimate.RotatingText = RotatingText;\n"],"names":[],"mappings":"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,CAAA,CAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA;AAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA;AAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;;"}
@@ -34,6 +34,8 @@ const TextTicker = polymorphicFactory((_props, ref) => {
34
34
  easing,
35
35
  randomChangeSpeed,
36
36
  revealDirection,
37
+ scrambleDuration,
38
+ staggerDelay,
37
39
  onCompleted,
38
40
  classNames,
39
41
  style,
@@ -54,6 +56,8 @@ const TextTicker = polymorphicFactory((_props, ref) => {
54
56
  easing,
55
57
  randomChangeSpeed,
56
58
  revealDirection,
59
+ scrambleDuration,
60
+ staggerDelay,
57
61
  onCompleted
58
62
  });
59
63
  const getStyles = useStyles({
@@ -80,11 +84,13 @@ const TextTicker = polymorphicFactory((_props, ref) => {
80
84
  }
81
85
  }),
82
86
  component: "p",
87
+ "aria-live": "polite",
83
88
  ...others
84
89
  },
85
90
  text
86
91
  );
87
92
  });
93
+ TextTicker.classes = classes;
88
94
  TextTicker.displayName = "TextTicker";
89
95
 
90
96
  export { TextTicker };
@@ -1 +1 @@
1
- {"version":3,"file":"TextTicker.mjs","sources":["../../../src/TextTicker/TextTicker.tsx"],"sourcesContent":["import React from 'react';\nimport {\n Box,\n createVarsResolver,\n polymorphicFactory,\n useProps,\n useStyles,\n type BoxProps,\n type PolymorphicFactory,\n type StylesApiProps,\n} from '@mantine/core';\nimport { useTextTicker, type TextTickerBaseProps } from './use-text-ticker';\nimport classes from './TextTicker.module.css';\n\nexport type TextTickerStylesNames = 'root';\n\nexport type TextTickerCssVariables = {\n root: '--text-ticker-animation-duration' | '--text-ticker-animation-delay';\n};\n\nexport interface TextTickerProps\n extends BoxProps, TextTickerBaseProps, StylesApiProps<TextTickerFactory> {}\n\nexport type TextTickerFactory = PolymorphicFactory<{\n props: TextTickerProps;\n defaultComponent: 'p';\n defaultRef: HTMLParagraphElement;\n stylesNames: TextTickerStylesNames;\n vars: TextTickerCssVariables;\n}>;\n\nconst defaultProps: Partial<TextTickerProps> = {\n characterSet: 'alphanumeric',\n customCharacters: '',\n delay: 0,\n speed: 1,\n easing: 'ease-out',\n randomChangeSpeed: 1,\n revealDirection: 'left-to-right',\n initialText: 'random',\n animate: true,\n};\n\nconst varsResolver = createVarsResolver<TextTickerFactory>((_, { delay, speed }) => ({\n root: {\n '--text-ticker-animation-duration': `${1 / (speed || 1)}s`,\n '--text-ticker-animation-delay': `${delay || 0}s`,\n },\n}));\n\n/**\n * TextTicker Component\n *\n * A component that animates text from random characters to a target string.\n * This implementation uses the useTextTicker hook internally.\n */\nexport const TextTicker = polymorphicFactory<TextTickerFactory>((_props, ref) => {\n const props = useProps('TextTicker', defaultProps, _props);\n\n const {\n value,\n initialText,\n animate,\n characterSet,\n customCharacters,\n delay,\n speed,\n easing,\n randomChangeSpeed,\n revealDirection,\n onCompleted,\n\n classNames,\n style,\n styles,\n unstyled,\n vars,\n className,\n\n ...others\n } = props;\n\n // Use the hook with mapped props\n const { text } = useTextTicker({\n value,\n initialText,\n animate,\n characterSet,\n customCharacters,\n delay,\n speed,\n easing,\n randomChangeSpeed,\n revealDirection,\n onCompleted,\n });\n\n const getStyles = useStyles<TextTickerFactory>({\n name: 'TextTicker',\n props,\n classes,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n varsResolver,\n });\n\n return (\n <Box\n ref={ref}\n {...getStyles('root', {\n style: {\n display: 'inline-block',\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n },\n })}\n component=\"p\"\n {...others}\n >\n {text}\n </Box>\n );\n});\n\nTextTicker.displayName = 'TextTicker';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TextTicker.mjs","sources":["../../../src/TextTicker/TextTicker.tsx"],"sourcesContent":["import React from 'react';\nimport {\n Box,\n createVarsResolver,\n polymorphicFactory,\n useProps,\n useStyles,\n type BoxProps,\n type PolymorphicFactory,\n type StylesApiProps,\n} from '@mantine/core';\nimport { useTextTicker, type TextTickerBaseProps } from './use-text-ticker';\nimport classes from './TextTicker.module.css';\n\nexport type TextTickerStylesNames = 'root';\n\nexport type TextTickerCssVariables = {\n root: '--text-ticker-animation-duration' | '--text-ticker-animation-delay';\n};\n\nexport interface TextTickerProps\n extends BoxProps, TextTickerBaseProps, StylesApiProps<TextTickerFactory> {}\n\nexport type TextTickerFactory = PolymorphicFactory<{\n props: TextTickerProps;\n defaultComponent: 'p';\n defaultRef: HTMLParagraphElement;\n stylesNames: TextTickerStylesNames;\n vars: TextTickerCssVariables;\n}>;\n\nconst defaultProps: Partial<TextTickerProps> = {\n characterSet: 'alphanumeric',\n customCharacters: '',\n delay: 0,\n speed: 1,\n easing: 'ease-out',\n randomChangeSpeed: 1,\n revealDirection: 'left-to-right',\n initialText: 'random',\n animate: true,\n};\n\nconst varsResolver = createVarsResolver<TextTickerFactory>((_, { delay, speed }) => ({\n root: {\n '--text-ticker-animation-duration': `${1 / (speed || 1)}s`,\n '--text-ticker-animation-delay': `${delay || 0}s`,\n },\n}));\n\n/**\n * TextTicker Component\n *\n * A component that animates text from random characters to a target string.\n * This implementation uses the useTextTicker hook internally.\n */\nexport const TextTicker = polymorphicFactory<TextTickerFactory>((_props, ref) => {\n const props = useProps('TextTicker', defaultProps, _props);\n\n const {\n value,\n initialText,\n animate,\n characterSet,\n customCharacters,\n delay,\n speed,\n easing,\n randomChangeSpeed,\n revealDirection,\n scrambleDuration,\n staggerDelay,\n onCompleted,\n\n classNames,\n style,\n styles,\n unstyled,\n vars,\n className,\n\n ...others\n } = props;\n\n // Use the hook with mapped props\n const { text } = useTextTicker({\n value,\n initialText,\n animate,\n characterSet,\n customCharacters,\n delay,\n speed,\n easing,\n randomChangeSpeed,\n revealDirection,\n scrambleDuration,\n staggerDelay,\n onCompleted,\n });\n\n const getStyles = useStyles<TextTickerFactory>({\n name: 'TextTicker',\n props,\n classes,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n varsResolver,\n });\n\n return (\n <Box\n ref={ref}\n {...getStyles('root', {\n style: {\n display: 'inline-block',\n fontFamily: 'monospace',\n whiteSpace: 'pre',\n },\n })}\n component=\"p\"\n aria-live=\"polite\"\n {...others}\n >\n {text}\n </Box>\n );\n});\n\nTextTicker.classes = classes;\nTextTicker.displayName = 'TextTicker';\n"],"names":[],"mappings":"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"}
@@ -32,6 +32,8 @@ function useTextTicker({
32
32
  easing = "ease-out",
33
33
  randomChangeSpeed = 1,
34
34
  revealDirection = "left-to-right",
35
+ scrambleDuration,
36
+ staggerDelay = 50,
35
37
  onCompleted
36
38
  }) {
37
39
  const [displayText, setDisplayText] = useState("");
@@ -45,6 +47,8 @@ function useTextTicker({
45
47
  const manualStartRef = useRef(false);
46
48
  const animatePropRef = useRef(animate);
47
49
  const animationCompletedRef = useRef(false);
50
+ const displayTextRef = useRef([]);
51
+ const charStartTimesRef = useRef([]);
48
52
  const getCharacterPool = () => {
49
53
  if (characterSet === "custom" && customCharacters && customCharacters.length > 0) {
50
54
  return customCharacters;
@@ -100,7 +104,64 @@ function useTextTicker({
100
104
  return indices;
101
105
  }
102
106
  };
103
- const animateFrame = (timestamp) => {
107
+ const getOrderMap = () => {
108
+ const order = getCharIndexOrder();
109
+ const map = /* @__PURE__ */ new Map();
110
+ order.forEach((charIndex, orderPosition) => {
111
+ map.set(charIndex, orderPosition);
112
+ });
113
+ return map;
114
+ };
115
+ const animateFrameScramble = (timestamp) => {
116
+ if (!startTimeRef.current) {
117
+ startTimeRef.current = timestamp;
118
+ charStabilityRef.current = Array(value.length).fill(false);
119
+ const orderMap = getOrderMap();
120
+ charStartTimesRef.current = Array.from(
121
+ { length: value.length },
122
+ (_, i) => timestamp + (orderMap.get(i) || 0) * staggerDelay
123
+ );
124
+ }
125
+ const pool = getCharacterPool();
126
+ const newTextArray = [];
127
+ let allSettled = true;
128
+ for (let i = 0; i < value.length; i++) {
129
+ if (charStabilityRef.current[i]) {
130
+ newTextArray.push(value[i]);
131
+ continue;
132
+ }
133
+ if (timestamp < charStartTimesRef.current[i]) {
134
+ newTextArray.push(value[i] === " " ? " " : pool[Math.floor(Math.random() * pool.length)]);
135
+ allSettled = false;
136
+ continue;
137
+ }
138
+ const charElapsed = timestamp - charStartTimesRef.current[i];
139
+ if (charElapsed >= scrambleDuration) {
140
+ charStabilityRef.current[i] = true;
141
+ newTextArray.push(value[i]);
142
+ continue;
143
+ }
144
+ if (value[i] === " ") {
145
+ newTextArray.push(" ");
146
+ } else {
147
+ newTextArray.push(pool[Math.floor(Math.random() * pool.length)]);
148
+ }
149
+ allSettled = false;
150
+ }
151
+ displayTextRef.current = newTextArray;
152
+ setDisplayText(newTextArray.join(""));
153
+ if (allSettled) {
154
+ displayTextRef.current = [...value];
155
+ setDisplayText(value);
156
+ setIsAnimating(false);
157
+ startTimeRef.current = 0;
158
+ animationCompletedRef.current = true;
159
+ onCompleted?.();
160
+ return;
161
+ }
162
+ animationFrameRef.current = requestAnimationFrame(animateFrameScramble);
163
+ };
164
+ const animateFrameDefault = (timestamp) => {
104
165
  if (!startTimeRef.current) {
105
166
  startTimeRef.current = timestamp;
106
167
  charStabilityRef.current = Array(value.length).fill(false);
@@ -126,14 +187,16 @@ function useTextTicker({
126
187
  if (Math.random() < changeThreshold) {
127
188
  newTextArray[i] = pool[Math.floor(Math.random() * pool.length)];
128
189
  } else {
129
- const currentChar = displayText[i] || pool[Math.floor(Math.random() * pool.length)];
190
+ const currentChar = displayTextRef.current[i] || pool[Math.floor(Math.random() * pool.length)];
130
191
  newTextArray[i] = currentChar;
131
192
  }
132
193
  allStable = false;
133
194
  }
134
195
  }
196
+ displayTextRef.current = newTextArray;
135
197
  setDisplayText(newTextArray.join(""));
136
198
  if (progress >= 1 || allStable) {
199
+ displayTextRef.current = [...value];
137
200
  setDisplayText(value);
138
201
  setIsAnimating(false);
139
202
  startTimeRef.current = 0;
@@ -143,8 +206,9 @@ function useTextTicker({
143
206
  }
144
207
  return;
145
208
  }
146
- animationFrameRef.current = requestAnimationFrame(animateFrame);
209
+ animationFrameRef.current = requestAnimationFrame(animateFrameDefault);
147
210
  };
211
+ const animateFrame = scrambleDuration != null ? animateFrameScramble : animateFrameDefault;
148
212
  const start = () => {
149
213
  animationCompletedRef.current = false;
150
214
  if (!animatePropRef.current) {
@@ -184,15 +248,27 @@ function useTextTicker({
184
248
  };
185
249
  const reset = () => {
186
250
  stop();
187
- setDisplayText(generateInitialText());
251
+ const initial = generateInitialText();
252
+ displayTextRef.current = [...initial];
253
+ setDisplayText(initial);
188
254
  startTimeRef.current = 0;
189
255
  charStabilityRef.current = Array(value.length).fill(false);
190
256
  animationCompletedRef.current = false;
191
257
  };
192
258
  useEffect(() => {
193
259
  if (isFirstRenderRef.current) {
194
- setDisplayText(generateInitialText());
195
260
  isFirstRenderRef.current = false;
261
+ const prefersReducedMotion = typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
262
+ if (prefersReducedMotion && animate) {
263
+ displayTextRef.current = [...value];
264
+ setDisplayText(value);
265
+ animationCompletedRef.current = true;
266
+ onCompleted?.();
267
+ return;
268
+ }
269
+ const initial = generateInitialText();
270
+ displayTextRef.current = [...initial];
271
+ setDisplayText(initial);
196
272
  }
197
273
  }, []);
198
274
  useEffect(() => {
@@ -209,8 +285,22 @@ function useTextTicker({
209
285
  }
210
286
  }, [isAnimating, animate]);
211
287
  useEffect(() => {
212
- if (!isAnimating) {
213
- setDisplayText(generateInitialText());
288
+ if (randomOrderRef.current.length !== value.length) {
289
+ randomOrderRef.current = [];
290
+ }
291
+ if (isAnimating) {
292
+ stop();
293
+ startTimeRef.current = 0;
294
+ charStabilityRef.current = Array(value.length).fill(false);
295
+ animationCompletedRef.current = false;
296
+ const initial = generateInitialText();
297
+ displayTextRef.current = [...initial];
298
+ setDisplayText(initial);
299
+ delayTimeoutRef.current = setTimeout(() => start(), 0);
300
+ } else {
301
+ const initial = generateInitialText();
302
+ displayTextRef.current = [...initial];
303
+ setDisplayText(initial);
214
304
  }
215
305
  }, [value, initialText, characterSet, customCharacters]);
216
306
  useEffect(() => {