@xiping/react-components 1.0.40 → 1.0.45

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 (49) hide show
  1. package/dist/cjs/components/flip-text/FlipText.js +1 -1
  2. package/dist/cjs/components/gradient-text/index.d.ts +10 -0
  3. package/dist/cjs/components/gradient-text/index.js +1 -0
  4. package/dist/cjs/components/hyper-text/index.js +1 -1
  5. package/dist/cjs/components/image-viewer/ImageViewer.js +1 -1
  6. package/dist/cjs/components/shimmer-button/ShimmerButton.js +1 -1
  7. package/dist/cjs/components/shiny-button/ShinyButton.js +1 -1
  8. package/dist/cjs/components/sparkles-text/SparklesText.js +1 -1
  9. package/dist/cjs/components/split-text/SplitText.js +1 -1
  10. package/dist/cjs/components/subtitle-player/SubtitlePlayer.d.ts +30 -0
  11. package/dist/cjs/components/subtitle-player/SubtitlePlayer.js +3 -0
  12. package/dist/cjs/components/subtitle-player/index.d.ts +2 -0
  13. package/dist/cjs/components/txt-editor/TxtEditor.d.ts +5 -4
  14. package/dist/cjs/components/txt-editor/TxtEditor.js +32 -1
  15. package/dist/cjs/components/txt-reader/TxtReader.js +1 -1
  16. package/dist/cjs/components/txt-reader/index.module.css.js +1 -1
  17. package/dist/cjs/components/typing-animation/index.js +1 -1
  18. package/dist/cjs/components/variable-proximity/index.d.ts +25 -0
  19. package/dist/cjs/components/variable-proximity/index.js +1 -0
  20. package/dist/cjs/components/video-dialog/VideoDialog.js +1 -1
  21. package/dist/cjs/index.d.ts +3 -0
  22. package/dist/cjs/index.js +1 -1
  23. package/dist/cjs/react-components.css +1 -1
  24. package/dist/cjs/subtitle/lib/src/parser.js +5 -0
  25. package/dist/es/components/flip-text/FlipText.js +15 -14
  26. package/dist/es/components/gradient-text/index.d.ts +10 -0
  27. package/dist/es/components/gradient-text/index.js +22 -0
  28. package/dist/es/components/hyper-text/index.js +27 -25
  29. package/dist/es/components/image-viewer/ImageViewer.js +89 -65
  30. package/dist/es/components/shimmer-button/ShimmerButton.js +29 -62
  31. package/dist/es/components/shiny-button/ShinyButton.js +15 -17
  32. package/dist/es/components/sparkles-text/SparklesText.js +30 -29
  33. package/dist/es/components/split-text/SplitText.js +37 -35
  34. package/dist/es/components/subtitle-player/SubtitlePlayer.d.ts +30 -0
  35. package/dist/es/components/subtitle-player/SubtitlePlayer.js +103 -0
  36. package/dist/es/components/subtitle-player/index.d.ts +2 -0
  37. package/dist/es/components/txt-editor/TxtEditor.d.ts +5 -4
  38. package/dist/es/components/txt-editor/TxtEditor.js +102 -43
  39. package/dist/es/components/txt-reader/TxtReader.js +48 -55
  40. package/dist/es/components/txt-reader/index.module.css.js +6 -2
  41. package/dist/es/components/typing-animation/index.js +11 -13
  42. package/dist/es/components/variable-proximity/index.d.ts +25 -0
  43. package/dist/es/components/variable-proximity/index.js +212 -0
  44. package/dist/es/components/video-dialog/VideoDialog.js +35 -48
  45. package/dist/es/index.d.ts +3 -0
  46. package/dist/es/index.js +60 -54
  47. package/dist/es/react-components.css +1 -1
  48. package/dist/es/subtitle/lib/src/parser.js +56 -0
  49. package/package.json +16 -12
@@ -0,0 +1,212 @@
1
+ import { jsxs as G, jsx as k } from "react/jsx-runtime";
2
+ import { forwardRef as H, useRef as y, useMemo as N, useEffect as w } from "react";
3
+ import { motion as J } from "motion/react";
4
+ /* empty css */
5
+ const l = {
6
+ robotoFlex: !1,
7
+ notoSansSC: !1,
8
+ loading: !1
9
+ };
10
+ function V(n) {
11
+ if (typeof document > "u") return !1;
12
+ try {
13
+ return document.fonts.check(`1em "${n}"`);
14
+ } catch {
15
+ return !0;
16
+ }
17
+ }
18
+ function K() {
19
+ if (l.loading || l.robotoFlex && l.notoSansSC) return;
20
+ l.loading = !0;
21
+ const n = V("Roboto Flex"), r = V("Noto Sans SC");
22
+ if (n && (l.robotoFlex = !0), r && (l.notoSansSC = !0), n && r) {
23
+ l.loading = !1;
24
+ return;
25
+ }
26
+ const i = (t, s) => {
27
+ if (document.querySelector(`link[href="${t}"]`)) {
28
+ s?.();
29
+ return;
30
+ }
31
+ const c = document.createElement("link");
32
+ c.rel = "stylesheet", c.href = t, c.onload = () => s?.(), document.head.appendChild(c);
33
+ }, f = [
34
+ // 国内镜像(优先)
35
+ {
36
+ roboto: "https://fonts.loli.net/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap",
37
+ noto: "https://fonts.loli.net/css2?family=Noto+Sans+SC:wght@100..900&display=swap"
38
+ },
39
+ // Google Fonts(备选)
40
+ {
41
+ roboto: "https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap",
42
+ noto: "https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@100..900&display=swap"
43
+ }
44
+ ], d = (t) => {
45
+ if (t >= f.length) {
46
+ l.loading = !1;
47
+ return;
48
+ }
49
+ const s = f[t];
50
+ let m = 0;
51
+ const c = () => {
52
+ m++, m === 2 && (l.loading = !1);
53
+ };
54
+ n ? c() : i(s.roboto, () => {
55
+ l.robotoFlex = !0, c();
56
+ }), r ? c() : i(s.noto, () => {
57
+ l.notoSansSC = !0, c();
58
+ }), setTimeout(() => {
59
+ (!l.robotoFlex || !l.notoSansSC) && d(t + 1);
60
+ }, 3e3);
61
+ };
62
+ d(0);
63
+ }
64
+ function O(n = !0) {
65
+ w(() => {
66
+ n && typeof document < "u" && K();
67
+ }, [n]);
68
+ }
69
+ function Q(n) {
70
+ w(() => {
71
+ let r;
72
+ const i = () => {
73
+ n(), r = requestAnimationFrame(i);
74
+ };
75
+ return r = requestAnimationFrame(i), () => cancelAnimationFrame(r);
76
+ }, [n]);
77
+ }
78
+ function W(n) {
79
+ const r = y({ x: 0, y: 0 });
80
+ return w(() => {
81
+ const i = (t, s) => {
82
+ if (n?.current) {
83
+ const m = n.current.getBoundingClientRect();
84
+ r.current = { x: t - m.left, y: s - m.top };
85
+ } else
86
+ r.current = { x: t, y: s };
87
+ }, f = (t) => i(t.clientX, t.clientY), d = (t) => {
88
+ const s = t.touches[0];
89
+ i(s.clientX, s.clientY);
90
+ };
91
+ return window.addEventListener("mousemove", f), window.addEventListener("touchmove", d), () => {
92
+ window.removeEventListener("mousemove", f), window.removeEventListener("touchmove", d);
93
+ };
94
+ }, [n]), r;
95
+ }
96
+ const Z = H(
97
+ (n, r) => {
98
+ const {
99
+ label: i,
100
+ fromFontVariationSettings: f,
101
+ toFontVariationSettings: d,
102
+ containerRef: t,
103
+ radius: s = 50,
104
+ falloff: m = "linear",
105
+ className: c = "",
106
+ onClick: E,
107
+ style: C,
108
+ fontFamily: g,
109
+ autoLoadFonts: P = !0,
110
+ ...A
111
+ } = n;
112
+ O(P && !g);
113
+ const b = y([]), v = y([]), S = W(t), F = y({
114
+ x: null,
115
+ y: null
116
+ }), $ = N(() => {
117
+ const e = (o) => new Map(
118
+ o.split(",").map((p) => p.trim()).map((p) => {
119
+ const [h, x] = p.split(" ");
120
+ return [h.replace(/['"]/g, ""), parseFloat(x)];
121
+ })
122
+ ), a = e(f), u = e(d);
123
+ return Array.from(a.entries()).map(([o, p]) => ({
124
+ axis: o,
125
+ fromValue: p,
126
+ toValue: u.get(o) ?? p
127
+ }));
128
+ }, [f, d]), q = (e, a, u, o) => Math.sqrt((u - e) ** 2 + (o - a) ** 2), I = (e) => {
129
+ const a = Math.min(Math.max(1 - e / s, 0), 1);
130
+ switch (m) {
131
+ case "exponential":
132
+ return a ** 2;
133
+ case "gaussian":
134
+ return Math.exp(-((e / (s / 2)) ** 2) / 2);
135
+ case "linear":
136
+ default:
137
+ return a;
138
+ }
139
+ };
140
+ Q(() => {
141
+ if (!t?.current) return;
142
+ const { x: e, y: a } = S.current;
143
+ if (F.current.x === e && F.current.y === a)
144
+ return;
145
+ F.current = { x: e, y: a };
146
+ const u = t.current.getBoundingClientRect();
147
+ b.current.forEach((o, p) => {
148
+ if (!o) return;
149
+ const h = o.getBoundingClientRect(), x = h.left + h.width / 2 - u.left, Y = h.top + h.height / 2 - u.top, L = q(
150
+ S.current.x,
151
+ S.current.y,
152
+ x,
153
+ Y
154
+ );
155
+ if (L >= s) {
156
+ o.style.fontVariationSettings = f;
157
+ return;
158
+ }
159
+ const z = I(L), M = $.map(({ axis: T, fromValue: R, toValue: D }) => {
160
+ const U = R + (D - R) * z;
161
+ return `'${T}' ${U}`;
162
+ }).join(", ");
163
+ v.current[p] = M, o.style.fontVariationSettings = M;
164
+ });
165
+ });
166
+ const j = /[\u4e00-\u9fa5]/.test(i) ? i.split("") : i.split(" ").flatMap((e, a, u) => {
167
+ const o = e.split("");
168
+ return a < u.length - 1 ? [...o, " "] : o;
169
+ });
170
+ let B = 0;
171
+ const X = N(() => {
172
+ const e = { display: "inline", ...C };
173
+ return g && (e.fontFamily = g), e;
174
+ }, [g, C]);
175
+ return /* @__PURE__ */ G(
176
+ "span",
177
+ {
178
+ ref: r,
179
+ className: `${c} variable-proximity`,
180
+ onClick: E,
181
+ style: X,
182
+ ...A,
183
+ children: [
184
+ j.map((e, a) => {
185
+ const u = B++;
186
+ return /* @__PURE__ */ k(
187
+ J.span,
188
+ {
189
+ ref: (o) => {
190
+ b.current[u] = o;
191
+ },
192
+ style: {
193
+ display: e === " " ? "inline" : "inline-block",
194
+ fontVariationSettings: v.current[u]
195
+ },
196
+ "aria-hidden": "true",
197
+ children: e
198
+ },
199
+ a
200
+ );
201
+ }),
202
+ /* @__PURE__ */ k("span", { className: "sr-only", children: i })
203
+ ]
204
+ }
205
+ );
206
+ }
207
+ );
208
+ Z.displayName = "VariableProximity";
209
+ export {
210
+ Z as VariableProximity,
211
+ Z as default
212
+ };
@@ -1,10 +1,11 @@
1
1
  "use client";
2
- import { jsxs as i, jsx as e } from "react/jsx-runtime";
3
- import { useState as m } from "react";
4
- import { AnimatePresence as p, motion as t } from "motion/react";
5
- import { Play as u, XIcon as y } from "lucide-react";
6
- import { cn as x } from "../../utils/utils.js";
7
- const f = {
2
+ import { jsxs as a, jsx as i } from "react/jsx-runtime";
3
+ import { useState as s } from "react";
4
+ import { AnimatePresence as m, motion as e } from "motion/react";
5
+ import { Play as y, XIcon as x } from "lucide-react";
6
+ import g from "clsx";
7
+ /* empty css */
8
+ const v = {
8
9
  "from-bottom": {
9
10
  initial: { y: "100%", opacity: 0 },
10
11
  animate: { y: 0, opacity: 1 },
@@ -46,70 +47,56 @@ const f = {
46
47
  exit: { x: "100%", opacity: 0 }
47
48
  }
48
49
  };
49
- function N({
50
- animationStyle: o = "from-center",
51
- videoSrc: r,
52
- thumbnailSrc: l,
53
- thumbnailAlt: n = "Video thumbnail",
54
- className: c
50
+ function V({
51
+ animationStyle: t = "from-center",
52
+ videoSrc: n,
53
+ thumbnailSrc: c,
54
+ thumbnailAlt: l = "Video thumbnail",
55
+ className: p
55
56
  }) {
56
- const [s, a] = m(!1), d = f[o];
57
- return /* @__PURE__ */ i("div", { className: x("relative", c), children: [
58
- /* @__PURE__ */ i(
57
+ const [r, o] = s(!1), d = v[t];
58
+ return /* @__PURE__ */ a("div", { className: g("xiping-video-dialog", p), children: [
59
+ /* @__PURE__ */ a(
59
60
  "div",
60
61
  {
61
- className: "group relative cursor-pointer",
62
- onClick: () => a(!0),
62
+ className: "xiping-video-dialog-container",
63
+ onClick: () => o(!0),
63
64
  children: [
64
- /* @__PURE__ */ e(
65
+ /* @__PURE__ */ i(
65
66
  "img",
66
67
  {
67
- src: l,
68
- alt: n,
68
+ src: c,
69
+ alt: l,
69
70
  width: 1920,
70
71
  height: 1080,
71
- className: "w-full rounded-md border shadow-lg transition-all duration-200 ease-out group-hover:brightness-[0.8]"
72
+ className: "xiping-video-dialog-thumbnail"
72
73
  }
73
74
  ),
74
- /* @__PURE__ */ e("div", { className: "absolute inset-0 flex scale-[0.9] items-center justify-center rounded-2xl transition-all duration-200 ease-out group-hover:scale-100", children: /* @__PURE__ */ e("div", { className: "flex size-28 items-center justify-center rounded-full bg-primary/10 backdrop-blur-md", children: /* @__PURE__ */ e(
75
- "div",
76
- {
77
- className: "relative flex size-20 scale-100 items-center justify-center rounded-full bg-gradient-to-b from-primary/30 to-primary shadow-md transition-all duration-200 ease-out group-hover:scale-[1.2]",
78
- children: /* @__PURE__ */ e(
79
- u,
80
- {
81
- className: "size-8 scale-100 fill-white text-white transition-transform duration-200 ease-out group-hover:scale-105",
82
- style: {
83
- filter: "drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06))"
84
- }
85
- }
86
- )
87
- }
88
- ) }) })
75
+ /* @__PURE__ */ i("div", { className: "xiping-video-dialog-overlay", children: /* @__PURE__ */ i("div", { className: "xiping-video-dialog-play-outer", children: /* @__PURE__ */ i("div", { className: "xiping-video-dialog-play-inner", children: /* @__PURE__ */ i(y, { className: "xiping-video-dialog-play-icon" }) }) }) })
89
76
  ]
90
77
  }
91
78
  ),
92
- /* @__PURE__ */ e(p, { children: s && /* @__PURE__ */ e(
93
- t.div,
79
+ /* @__PURE__ */ i(m, { children: r && /* @__PURE__ */ i(
80
+ e.div,
94
81
  {
95
82
  initial: { opacity: 0 },
96
83
  animate: { opacity: 1 },
97
- onClick: () => a(!1),
84
+ onClick: () => o(!1),
98
85
  exit: { opacity: 0 },
99
- className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-md",
100
- children: /* @__PURE__ */ i(
101
- t.div,
86
+ className: "xiping-video-dialog-modal",
87
+ children: /* @__PURE__ */ a(
88
+ e.div,
102
89
  {
103
90
  ...d,
104
91
  transition: { type: "spring", damping: 30, stiffness: 300 },
105
- className: "relative mx-4 aspect-video w-full max-w-4xl md:mx-0",
92
+ className: "xiping-video-dialog-modal-content",
106
93
  children: [
107
- /* @__PURE__ */ e(t.button, { className: "absolute -top-16 right-0 rounded-full bg-neutral-900/50 p-2 text-xl text-white ring-1 backdrop-blur-md dark:bg-neutral-100/50 dark:text-black", children: /* @__PURE__ */ e(y, { className: "size-5" }) }),
108
- /* @__PURE__ */ e("div", { className: "relative isolate z-[1] size-full overflow-hidden rounded-2xl border-2 border-white", children: /* @__PURE__ */ e(
94
+ /* @__PURE__ */ i(e.button, { className: "xiping-video-dialog-close-button", children: /* @__PURE__ */ i(x, { className: "xiping-video-dialog-close-icon" }) }),
95
+ /* @__PURE__ */ i("div", { className: "xiping-video-dialog-video-wrapper", children: /* @__PURE__ */ i(
109
96
  "iframe",
110
97
  {
111
- src: r,
112
- className: "size-full rounded-2xl",
98
+ src: n,
99
+ className: "xiping-video-dialog-iframe",
113
100
  allowFullScreen: !0,
114
101
  allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
115
102
  }
@@ -122,5 +109,5 @@ function N({
122
109
  ] });
123
110
  }
124
111
  export {
125
- N as VideoDialog
112
+ V as VideoDialog
126
113
  };
@@ -25,4 +25,7 @@ export * from './components/scratch-to-reveal';
25
25
  export * from './components/split-text';
26
26
  export * from './components/dome-gallery';
27
27
  export * from './components/text-type';
28
+ export * from './components/gradient-text';
29
+ export * from './components/variable-proximity';
30
+ export * from './components/subtitle-player';
28
31
  export * from './hooks/useStayTimeReport';
package/dist/es/index.js CHANGED
@@ -1,63 +1,69 @@
1
1
  /* empty css */
2
2
  import { Button as r } from "./components/button/Button.js";
3
- import { TxtReader as p } from "./components/txt-reader/TxtReader.js";
4
- import { HyperText as x } from "./components/hyper-text/index.js";
3
+ import { TxtReader as x } from "./components/txt-reader/TxtReader.js";
4
+ import { HyperText as p } from "./components/hyper-text/index.js";
5
5
  import { TypingAnimation as i } from "./components/typing-animation/index.js";
6
6
  import { QRCode as d } from "./components/qr-code/index.js";
7
- import { Confetti as T, ConfettiButton as l } from "./components/confetti-button/index.js";
8
- import { useStayTimeReport as c } from "./hooks/useStayTimeReport.js";
9
- import { default as S } from "./components/pinch-content/PinchContent.js";
10
- import { default as h } from "./components/image-viewer/ImageViewer.js";
11
- import { ShimmerButton as B } from "./components/shimmer-button/ShimmerButton.js";
12
- import { default as A } from "./components/image-compare/ImageCompare.js";
13
- import { default as I } from "./components/text-type/TextType.js";
14
- import { TextAnimate as F } from "./components/text-animate/TextAnimate.js";
15
- import { Dock as L, DockIcon as P, dockVariants as v } from "./components/dock/Duck.js";
16
- import { TxtEditor as E } from "./components/txt-editor/TxtEditor.js";
17
- import { Message as H } from "./components/message/Message.js";
18
- import { default as Q } from "react-force-graph-3d";
19
- import { default as j } from "canvas-confetti";
20
- import { Pointer as z } from "./components/pointer/Pointer.js";
21
- import { SparklesText as K } from "./components/sparkles-text/SparklesText.js";
22
- import { BlurFade as O } from "./components/blur-fade/BlurFade.js";
23
- import { VideoDialog as W } from "./components/video-dialog/VideoDialog.js";
24
- import { ComicText as Y } from "./components/comic-text/ComicText.js";
25
- import { FlipText as _ } from "./components/flip-text/FlipText.js";
26
- import { AnimatedList as oo, AnimatedListItem as to } from "./components/animated-list/AnimatedList.js";
27
- import { ShinyButton as ro } from "./components/shiny-button/ShinyButton.js";
28
- import { ScratchToReveal as po } from "./components/scratch-to-reveal/ScratchToReveal.js";
29
- import { SplitText as xo } from "./components/split-text/SplitText.js";
7
+ import { Confetti as s, ConfettiButton as u } from "./components/confetti-button/index.js";
8
+ import { default as c } from "./components/gradient-text/index.js";
9
+ import { VariableProximity as S } from "./components/variable-proximity/index.js";
10
+ import { useStayTimeReport as g } from "./hooks/useStayTimeReport.js";
11
+ import { default as B } from "./components/pinch-content/PinchContent.js";
12
+ import { default as A } from "./components/image-viewer/ImageViewer.js";
13
+ import { ShimmerButton as I } from "./components/shimmer-button/ShimmerButton.js";
14
+ import { default as R } from "./components/image-compare/ImageCompare.js";
15
+ import { default as F } from "./components/text-type/TextType.js";
16
+ import { TextAnimate as G } from "./components/text-animate/TextAnimate.js";
17
+ import { Dock as v, DockIcon as w, dockVariants as E } from "./components/dock/Duck.js";
18
+ import { TxtEditor as M } from "./components/txt-editor/TxtEditor.js";
19
+ import { Message as j } from "./components/message/Message.js";
20
+ import { default as z } from "react-force-graph-3d";
21
+ import { default as K } from "canvas-confetti";
22
+ import { Pointer as O } from "./components/pointer/Pointer.js";
23
+ import { SparklesText as W } from "./components/sparkles-text/SparklesText.js";
24
+ import { BlurFade as Y } from "./components/blur-fade/BlurFade.js";
25
+ import { VideoDialog as _ } from "./components/video-dialog/VideoDialog.js";
26
+ import { ComicText as oo } from "./components/comic-text/ComicText.js";
27
+ import { FlipText as eo } from "./components/flip-text/FlipText.js";
28
+ import { AnimatedList as mo, AnimatedListItem as xo } from "./components/animated-list/AnimatedList.js";
29
+ import { ShinyButton as po } from "./components/shiny-button/ShinyButton.js";
30
+ import { ScratchToReveal as io } from "./components/scratch-to-reveal/ScratchToReveal.js";
31
+ import { SplitText as lo } from "./components/split-text/SplitText.js";
32
+ import { SubtitlePlayer as uo } from "./components/subtitle-player/SubtitlePlayer.js";
30
33
  export {
31
- oo as AnimatedList,
32
- to as AnimatedListItem,
33
- O as BlurFade,
34
+ mo as AnimatedList,
35
+ xo as AnimatedListItem,
36
+ Y as BlurFade,
34
37
  r as Button,
35
- Y as ComicText,
36
- T as Confetti,
37
- l as ConfettiButton,
38
- L as Dock,
39
- P as DockIcon,
40
- _ as FlipText,
41
- Q as ForceGraph3D,
42
- x as HyperText,
43
- A as ImageCompare,
44
- h as ImageViewer,
45
- H as Message,
46
- S as PinchContent,
47
- z as Pointer,
38
+ oo as ComicText,
39
+ s as Confetti,
40
+ u as ConfettiButton,
41
+ v as Dock,
42
+ w as DockIcon,
43
+ eo as FlipText,
44
+ z as ForceGraph3D,
45
+ c as GradientText,
46
+ p as HyperText,
47
+ R as ImageCompare,
48
+ A as ImageViewer,
49
+ j as Message,
50
+ B as PinchContent,
51
+ O as Pointer,
48
52
  d as QRCode,
49
- po as ScratchToReveal,
50
- B as ShimmerButton,
51
- ro as ShinyButton,
52
- K as SparklesText,
53
- xo as SplitText,
54
- F as TextAnimate,
55
- I as TextType,
56
- E as TxtEditor,
57
- p as TxtReader,
53
+ io as ScratchToReveal,
54
+ I as ShimmerButton,
55
+ po as ShinyButton,
56
+ W as SparklesText,
57
+ lo as SplitText,
58
+ uo as SubtitlePlayer,
59
+ G as TextAnimate,
60
+ F as TextType,
61
+ M as TxtEditor,
62
+ x as TxtReader,
58
63
  i as TypingAnimation,
59
- W as VideoDialog,
60
- j as confetti,
61
- v as dockVariants,
62
- c as useStayTimeReport
64
+ S as VariableProximity,
65
+ _ as VideoDialog,
66
+ K as confetti,
67
+ E as dockVariants,
68
+ g as useStayTimeReport
63
69
  };