@djangocfg/ui-tools 2.1.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/LottiePlayer.client-LBEC2JKY.mjs +161 -0
- package/dist/LottiePlayer.client-LBEC2JKY.mjs.map +1 -0
- package/dist/LottiePlayer.client-WFMG2OOW.cjs +168 -0
- package/dist/LottiePlayer.client-WFMG2OOW.cjs.map +1 -0
- package/dist/Mermaid.client-4TU2TSH3.mjs +477 -0
- package/dist/Mermaid.client-4TU2TSH3.mjs.map +1 -0
- package/dist/Mermaid.client-SBYY364Q.cjs +483 -0
- package/dist/Mermaid.client-SBYY364Q.cjs.map +1 -0
- package/dist/PlaygroundLayout-3YVSAEAF.cjs +1003 -0
- package/dist/PlaygroundLayout-3YVSAEAF.cjs.map +1 -0
- package/dist/PlaygroundLayout-4DYBORAS.mjs +996 -0
- package/dist/PlaygroundLayout-4DYBORAS.mjs.map +1 -0
- package/dist/PrettyCode.client-LCBPPTIX.mjs +152 -0
- package/dist/PrettyCode.client-LCBPPTIX.mjs.map +1 -0
- package/dist/PrettyCode.client-PNPLXRH6.cjs +154 -0
- package/dist/PrettyCode.client-PNPLXRH6.cjs.map +1 -0
- package/dist/chunk-37ZI6VD4.mjs +12 -0
- package/dist/chunk-37ZI6VD4.mjs.map +1 -0
- package/dist/chunk-3HK2OE62.cjs +81 -0
- package/dist/chunk-3HK2OE62.cjs.map +1 -0
- package/dist/chunk-7DGDQVQW.cjs +591 -0
- package/dist/chunk-7DGDQVQW.cjs.map +1 -0
- package/dist/chunk-M6P2FU7L.mjs +572 -0
- package/dist/chunk-M6P2FU7L.mjs.map +1 -0
- package/dist/chunk-UQ3XI5MY.cjs +15 -0
- package/dist/chunk-UQ3XI5MY.cjs.map +1 -0
- package/dist/chunk-YFRNE2IR.mjs +79 -0
- package/dist/chunk-YFRNE2IR.mjs.map +1 -0
- package/dist/index.cjs +5042 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1591 -0
- package/dist/index.d.ts +1591 -0
- package/dist/index.mjs +4941 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +86 -0
- package/src/components/markdown/MarkdownMessage.tsx +340 -0
- package/src/components/markdown/index.ts +5 -0
- package/src/index.ts +26 -0
- package/src/stores/index.ts +9 -0
- package/src/stores/mediaCache.ts +534 -0
- package/src/tools/AudioPlayer/README.md +206 -0
- package/src/tools/AudioPlayer/components/HybridAudioPlayer.tsx +216 -0
- package/src/tools/AudioPlayer/components/HybridSimplePlayer.tsx +280 -0
- package/src/tools/AudioPlayer/components/HybridWaveform.tsx +279 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/AudioReactiveCover.tsx +149 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/effects/GlowEffect.tsx +110 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/effects/MeshEffect.tsx +58 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/effects/OrbsEffect.tsx +45 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/effects/SpotlightEffect.tsx +82 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/effects/index.ts +8 -0
- package/src/tools/AudioPlayer/components/ReactiveCover/index.ts +6 -0
- package/src/tools/AudioPlayer/components/index.ts +22 -0
- package/src/tools/AudioPlayer/context/HybridAudioProvider.tsx +158 -0
- package/src/tools/AudioPlayer/context/index.ts +16 -0
- package/src/tools/AudioPlayer/effects/index.ts +412 -0
- package/src/tools/AudioPlayer/hooks/index.ts +35 -0
- package/src/tools/AudioPlayer/hooks/useHybridAudio.ts +387 -0
- package/src/tools/AudioPlayer/hooks/useHybridAudioAnalysis.ts +95 -0
- package/src/tools/AudioPlayer/hooks/useVisualization.tsx +207 -0
- package/src/tools/AudioPlayer/index.ts +133 -0
- package/src/tools/AudioPlayer/types/effects.ts +73 -0
- package/src/tools/AudioPlayer/types/index.ts +27 -0
- package/src/tools/AudioPlayer/utils/debug.ts +14 -0
- package/src/tools/AudioPlayer/utils/formatTime.ts +10 -0
- package/src/tools/AudioPlayer/utils/index.ts +6 -0
- package/src/tools/ImageViewer/@refactoring/00-PLAN.md +71 -0
- package/src/tools/ImageViewer/@refactoring/01-TYPES.md +121 -0
- package/src/tools/ImageViewer/@refactoring/02-UTILS.md +143 -0
- package/src/tools/ImageViewer/@refactoring/03-HOOKS.md +261 -0
- package/src/tools/ImageViewer/@refactoring/04-COMPONENTS.md +427 -0
- package/src/tools/ImageViewer/@refactoring/05-EXECUTION-CHECKLIST.md +126 -0
- package/src/tools/ImageViewer/README.md +200 -0
- package/src/tools/ImageViewer/components/ImageInfo.tsx +44 -0
- package/src/tools/ImageViewer/components/ImageToolbar.tsx +145 -0
- package/src/tools/ImageViewer/components/ImageViewer.tsx +241 -0
- package/src/tools/ImageViewer/components/index.ts +7 -0
- package/src/tools/ImageViewer/hooks/index.ts +9 -0
- package/src/tools/ImageViewer/hooks/useImageLoading.ts +204 -0
- package/src/tools/ImageViewer/hooks/useImageTransform.ts +101 -0
- package/src/tools/ImageViewer/index.ts +60 -0
- package/src/tools/ImageViewer/types.ts +81 -0
- package/src/tools/ImageViewer/utils/constants.ts +59 -0
- package/src/tools/ImageViewer/utils/debug.ts +14 -0
- package/src/tools/ImageViewer/utils/index.ts +17 -0
- package/src/tools/ImageViewer/utils/lqip.ts +47 -0
- package/src/tools/JsonForm/JsonSchemaForm.tsx +197 -0
- package/src/tools/JsonForm/examples/BotConfigExample.tsx +249 -0
- package/src/tools/JsonForm/examples/RealBotConfigExample.tsx +161 -0
- package/src/tools/JsonForm/index.ts +46 -0
- package/src/tools/JsonForm/templates/ArrayFieldItemTemplate.tsx +47 -0
- package/src/tools/JsonForm/templates/ArrayFieldTemplate.tsx +74 -0
- package/src/tools/JsonForm/templates/BaseInputTemplate.tsx +107 -0
- package/src/tools/JsonForm/templates/ErrorListTemplate.tsx +35 -0
- package/src/tools/JsonForm/templates/FieldTemplate.tsx +62 -0
- package/src/tools/JsonForm/templates/ObjectFieldTemplate.tsx +116 -0
- package/src/tools/JsonForm/templates/index.ts +12 -0
- package/src/tools/JsonForm/types.ts +83 -0
- package/src/tools/JsonForm/utils.ts +213 -0
- package/src/tools/JsonForm/widgets/CheckboxWidget.tsx +37 -0
- package/src/tools/JsonForm/widgets/ColorWidget.tsx +219 -0
- package/src/tools/JsonForm/widgets/NumberWidget.tsx +89 -0
- package/src/tools/JsonForm/widgets/SelectWidget.tsx +97 -0
- package/src/tools/JsonForm/widgets/SliderWidget.tsx +148 -0
- package/src/tools/JsonForm/widgets/SwitchWidget.tsx +35 -0
- package/src/tools/JsonForm/widgets/TextWidget.tsx +96 -0
- package/src/tools/JsonForm/widgets/index.ts +14 -0
- package/src/tools/JsonTree/index.tsx +243 -0
- package/src/tools/LottiePlayer/LottiePlayer.client.tsx +213 -0
- package/src/tools/LottiePlayer/index.tsx +56 -0
- package/src/tools/LottiePlayer/types.ts +108 -0
- package/src/tools/LottiePlayer/useLottie.ts +164 -0
- package/src/tools/Mermaid/Mermaid.client.tsx +82 -0
- package/src/tools/Mermaid/components/MermaidCodeViewer.tsx +95 -0
- package/src/tools/Mermaid/components/MermaidFullscreenModal.tsx +103 -0
- package/src/tools/Mermaid/hooks/index.ts +4 -0
- package/src/tools/Mermaid/hooks/useMermaidCleanup.ts +73 -0
- package/src/tools/Mermaid/hooks/useMermaidFullscreen.ts +46 -0
- package/src/tools/Mermaid/hooks/useMermaidRenderer.ts +226 -0
- package/src/tools/Mermaid/hooks/useMermaidValidation.ts +29 -0
- package/src/tools/Mermaid/index.tsx +44 -0
- package/src/tools/Mermaid/utils/mermaid-helpers.ts +33 -0
- package/src/tools/OpenapiViewer/components/EndpointInfo.tsx +149 -0
- package/src/tools/OpenapiViewer/components/EndpointsLibrary.tsx +263 -0
- package/src/tools/OpenapiViewer/components/PlaygroundLayout.tsx +125 -0
- package/src/tools/OpenapiViewer/components/PlaygroundStepper.tsx +100 -0
- package/src/tools/OpenapiViewer/components/RequestBuilder.tsx +157 -0
- package/src/tools/OpenapiViewer/components/RequestParametersForm.tsx +253 -0
- package/src/tools/OpenapiViewer/components/ResponseViewer.tsx +173 -0
- package/src/tools/OpenapiViewer/components/VersionSelector.tsx +68 -0
- package/src/tools/OpenapiViewer/components/index.ts +14 -0
- package/src/tools/OpenapiViewer/constants.ts +39 -0
- package/src/tools/OpenapiViewer/context/PlaygroundContext.tsx +337 -0
- package/src/tools/OpenapiViewer/hooks/index.ts +8 -0
- package/src/tools/OpenapiViewer/hooks/useMobile.ts +10 -0
- package/src/tools/OpenapiViewer/hooks/useOpenApiSchema.ts +199 -0
- package/src/tools/OpenapiViewer/index.tsx +37 -0
- package/src/tools/OpenapiViewer/types.ts +151 -0
- package/src/tools/OpenapiViewer/utils/apiKeyManager.ts +149 -0
- package/src/tools/OpenapiViewer/utils/formatters.ts +71 -0
- package/src/tools/OpenapiViewer/utils/index.ts +9 -0
- package/src/tools/OpenapiViewer/utils/versionManager.ts +161 -0
- package/src/tools/PrettyCode/PrettyCode.client.tsx +208 -0
- package/src/tools/PrettyCode/index.tsx +47 -0
- package/src/tools/VideoPlayer/@refactoring/00-PLAN.md +91 -0
- package/src/tools/VideoPlayer/@refactoring/01-TYPES.md +284 -0
- package/src/tools/VideoPlayer/@refactoring/02-UTILS.md +141 -0
- package/src/tools/VideoPlayer/@refactoring/03-HOOKS.md +178 -0
- package/src/tools/VideoPlayer/@refactoring/04-COMPONENTS.md +95 -0
- package/src/tools/VideoPlayer/@refactoring/05-EXECUTION-CHECKLIST.md +139 -0
- package/src/tools/VideoPlayer/README.md +264 -0
- package/src/tools/VideoPlayer/components/VideoControls.tsx +138 -0
- package/src/tools/VideoPlayer/components/VideoErrorFallback.tsx +172 -0
- package/src/tools/VideoPlayer/components/VideoPlayer.tsx +201 -0
- package/src/tools/VideoPlayer/components/index.ts +14 -0
- package/src/tools/VideoPlayer/context/VideoPlayerContext.tsx +52 -0
- package/src/tools/VideoPlayer/context/index.ts +8 -0
- package/src/tools/VideoPlayer/hooks/index.ts +12 -0
- package/src/tools/VideoPlayer/hooks/useVideoPlayerSettings.ts +70 -0
- package/src/tools/VideoPlayer/hooks/useVideoPositionCache.ts +116 -0
- package/src/tools/VideoPlayer/index.ts +77 -0
- package/src/tools/VideoPlayer/providers/NativeProvider.tsx +284 -0
- package/src/tools/VideoPlayer/providers/StreamProvider.tsx +505 -0
- package/src/tools/VideoPlayer/providers/VidstackProvider.tsx +400 -0
- package/src/tools/VideoPlayer/providers/index.ts +8 -0
- package/src/tools/VideoPlayer/types/index.ts +38 -0
- package/src/tools/VideoPlayer/types/player.ts +116 -0
- package/src/tools/VideoPlayer/types/provider.ts +93 -0
- package/src/tools/VideoPlayer/types/sources.ts +97 -0
- package/src/tools/VideoPlayer/utils/debug.ts +14 -0
- package/src/tools/VideoPlayer/utils/fileSource.ts +78 -0
- package/src/tools/VideoPlayer/utils/index.ts +12 -0
- package/src/tools/VideoPlayer/utils/resolvers.ts +75 -0
- package/src/tools/_shared.ts +29 -0
- package/src/tools/index.ts +172 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { useLottie } from './chunk-YFRNE2IR.mjs';
|
|
2
|
+
import { __name } from './chunk-37ZI6VD4.mjs';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import Lottie from 'react-lottie-player';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var SIZE_PRESETS = {
|
|
8
|
+
xs: { width: 64, height: 64 },
|
|
9
|
+
sm: { width: 128, height: 128 },
|
|
10
|
+
md: { width: 256, height: 256 },
|
|
11
|
+
lg: { width: 384, height: 384 },
|
|
12
|
+
xl: { width: 512, height: 512 },
|
|
13
|
+
full: { width: "100%", height: "100%" }
|
|
14
|
+
};
|
|
15
|
+
function LottiePlayer({
|
|
16
|
+
src,
|
|
17
|
+
size = "md",
|
|
18
|
+
width,
|
|
19
|
+
height,
|
|
20
|
+
autoplay = true,
|
|
21
|
+
loop = true,
|
|
22
|
+
speed = 1,
|
|
23
|
+
direction = 1,
|
|
24
|
+
controls = false,
|
|
25
|
+
background,
|
|
26
|
+
className,
|
|
27
|
+
showLoading = true,
|
|
28
|
+
onComplete,
|
|
29
|
+
onLoad,
|
|
30
|
+
onError
|
|
31
|
+
}) {
|
|
32
|
+
const { animationData, isLoading, error, retry } = useLottie({ src });
|
|
33
|
+
React.useEffect(() => {
|
|
34
|
+
if (animationData && onLoad) {
|
|
35
|
+
onLoad();
|
|
36
|
+
}
|
|
37
|
+
}, [animationData, onLoad]);
|
|
38
|
+
React.useEffect(() => {
|
|
39
|
+
if (error && onError) {
|
|
40
|
+
onError(error);
|
|
41
|
+
}
|
|
42
|
+
}, [error, onError]);
|
|
43
|
+
const dimensions = React.useMemo(() => {
|
|
44
|
+
if (width !== void 0 || height !== void 0) {
|
|
45
|
+
return {
|
|
46
|
+
width: width ?? SIZE_PRESETS[size].width,
|
|
47
|
+
height: height ?? SIZE_PRESETS[size].height
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return SIZE_PRESETS[size];
|
|
51
|
+
}, [size, width, height]);
|
|
52
|
+
const handleComplete = React.useCallback(() => {
|
|
53
|
+
if (onComplete) {
|
|
54
|
+
onComplete();
|
|
55
|
+
}
|
|
56
|
+
}, [onComplete]);
|
|
57
|
+
if (isLoading && showLoading) {
|
|
58
|
+
return /* @__PURE__ */ jsx(
|
|
59
|
+
"div",
|
|
60
|
+
{
|
|
61
|
+
className: `flex items-center justify-center ${className || ""}`,
|
|
62
|
+
style: {
|
|
63
|
+
width: dimensions.width,
|
|
64
|
+
height: dimensions.height,
|
|
65
|
+
background: background || "transparent"
|
|
66
|
+
},
|
|
67
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-2", children: [
|
|
68
|
+
/* @__PURE__ */ jsx("div", { className: "h-8 w-8 animate-spin rounded-full border-4 border-gray-300 border-t-gray-900" }),
|
|
69
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm text-gray-500", children: "Loading animation..." })
|
|
70
|
+
] })
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
if (error) {
|
|
75
|
+
return /* @__PURE__ */ jsx(
|
|
76
|
+
"div",
|
|
77
|
+
{
|
|
78
|
+
className: `flex items-center justify-center ${className || ""}`,
|
|
79
|
+
style: {
|
|
80
|
+
width: dimensions.width,
|
|
81
|
+
height: dimensions.height,
|
|
82
|
+
background: background || "transparent"
|
|
83
|
+
},
|
|
84
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-2 p-4 text-center", children: [
|
|
85
|
+
/* @__PURE__ */ jsx(
|
|
86
|
+
"svg",
|
|
87
|
+
{
|
|
88
|
+
className: "h-8 w-8 text-red-500",
|
|
89
|
+
fill: "none",
|
|
90
|
+
stroke: "currentColor",
|
|
91
|
+
viewBox: "0 0 24 24",
|
|
92
|
+
children: /* @__PURE__ */ jsx(
|
|
93
|
+
"path",
|
|
94
|
+
{
|
|
95
|
+
strokeLinecap: "round",
|
|
96
|
+
strokeLinejoin: "round",
|
|
97
|
+
strokeWidth: 2,
|
|
98
|
+
d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
}
|
|
102
|
+
),
|
|
103
|
+
/* @__PURE__ */ jsx("div", { className: "text-sm text-red-600", children: error.message }),
|
|
104
|
+
/* @__PURE__ */ jsx(
|
|
105
|
+
"button",
|
|
106
|
+
{
|
|
107
|
+
onClick: retry,
|
|
108
|
+
className: "rounded bg-red-100 px-3 py-1 text-sm text-red-700 hover:bg-red-200",
|
|
109
|
+
children: "Retry"
|
|
110
|
+
}
|
|
111
|
+
)
|
|
112
|
+
] })
|
|
113
|
+
}
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
if (!animationData) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
return /* @__PURE__ */ jsxs(
|
|
120
|
+
"div",
|
|
121
|
+
{
|
|
122
|
+
className,
|
|
123
|
+
style: {
|
|
124
|
+
width: dimensions.width,
|
|
125
|
+
height: dimensions.height,
|
|
126
|
+
background: background || "transparent"
|
|
127
|
+
},
|
|
128
|
+
children: [
|
|
129
|
+
/* @__PURE__ */ jsx(
|
|
130
|
+
Lottie,
|
|
131
|
+
{
|
|
132
|
+
animationData,
|
|
133
|
+
play: autoplay,
|
|
134
|
+
loop,
|
|
135
|
+
speed,
|
|
136
|
+
direction,
|
|
137
|
+
style: {
|
|
138
|
+
width: "100%",
|
|
139
|
+
height: "100%"
|
|
140
|
+
},
|
|
141
|
+
onComplete: handleComplete,
|
|
142
|
+
rendererSettings: {
|
|
143
|
+
preserveAspectRatio: "xMidYMid meet"
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
),
|
|
147
|
+
controls && /* @__PURE__ */ jsx("div", { className: "mt-2 flex items-center justify-center gap-2", children: /* @__PURE__ */ jsxs("span", { className: "text-xs text-gray-500", children: [
|
|
148
|
+
"Speed: ",
|
|
149
|
+
speed,
|
|
150
|
+
"x | Direction: ",
|
|
151
|
+
direction === 1 ? "Forward" : "Reverse"
|
|
152
|
+
] }) })
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
__name(LottiePlayer, "LottiePlayer");
|
|
158
|
+
|
|
159
|
+
export { LottiePlayer };
|
|
160
|
+
//# sourceMappingURL=LottiePlayer.client-LBEC2JKY.mjs.map
|
|
161
|
+
//# sourceMappingURL=LottiePlayer.client-LBEC2JKY.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/LottiePlayer/LottiePlayer.client.tsx"],"names":[],"mappings":"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","file":"LottiePlayer.client-LBEC2JKY.mjs","sourcesContent":["/**\n * LottiePlayer Component\n *\n * Universal Lottie animation player component\n */\n\n'use client';\n\nimport React from 'react';\nimport Lottie from 'react-lottie-player';\n\nimport { LottiePlayerProps } from './types';\nimport { useLottie } from './useLottie';\n\n// Size presets mapping\nconst SIZE_PRESETS = {\n xs: { width: 64, height: 64 },\n sm: { width: 128, height: 128 },\n md: { width: 256, height: 256 },\n lg: { width: 384, height: 384 },\n xl: { width: 512, height: 512 },\n full: { width: '100%', height: '100%' },\n} as const;\n\n/**\n * LottiePlayer component for displaying Lottie animations\n *\n * Features:\n * - Loads animations from URLs or objects\n * - Size presets or custom dimensions\n * - Playback controls (speed, direction, loop)\n * - Loading and error states\n * - Event callbacks\n *\n * Usage:\n * ```tsx\n * // From URL with size preset\n * <LottiePlayer\n * src=\"https://example.com/animation.json\"\n * size=\"md\"\n * autoplay\n * loop\n * />\n *\n * // From object with custom size\n * <LottiePlayer\n * src={animationData}\n * width={300}\n * height={300}\n * speed={1.5}\n * controls\n * />\n *\n * // With callbacks\n * <LottiePlayer\n * src=\"https://example.com/animation.json\"\n * onLoad={() => console.log('Animation loaded')}\n * onComplete={() => console.log('Animation completed')}\n * onError={(err) => console.error('Error:', err)}\n * />\n * ```\n */\nexport function LottiePlayer({\n src,\n size = 'md',\n width,\n height,\n autoplay = true,\n loop = true,\n speed = 1,\n direction = 1,\n controls = false,\n background,\n className,\n showLoading = true,\n onComplete,\n onLoad,\n onError,\n}: LottiePlayerProps) {\n // Load animation data using our custom hook\n const { animationData, isLoading, error, retry } = useLottie({ src });\n\n // Notify parent about load state\n React.useEffect(() => {\n if (animationData && onLoad) {\n onLoad();\n }\n }, [animationData, onLoad]);\n\n // Notify parent about errors\n React.useEffect(() => {\n if (error && onError) {\n onError(error);\n }\n }, [error, onError]);\n\n // Determine dimensions\n const dimensions = React.useMemo(() => {\n // Custom dimensions override size preset\n if (width !== undefined || height !== undefined) {\n return {\n width: width ?? SIZE_PRESETS[size].width,\n height: height ?? SIZE_PRESETS[size].height,\n };\n }\n\n // Use size preset\n return SIZE_PRESETS[size];\n }, [size, width, height]);\n\n // Handle complete event\n const handleComplete = React.useCallback(() => {\n if (onComplete) {\n onComplete();\n }\n }, [onComplete]);\n\n // Loading state\n if (isLoading && showLoading) {\n return (\n <div\n className={`flex items-center justify-center ${className || ''}`}\n style={{\n width: dimensions.width,\n height: dimensions.height,\n background: background || 'transparent',\n }}\n >\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-gray-300 border-t-gray-900\" />\n <span className=\"text-sm text-gray-500\">Loading animation...</span>\n </div>\n </div>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div\n className={`flex items-center justify-center ${className || ''}`}\n style={{\n width: dimensions.width,\n height: dimensions.height,\n background: background || 'transparent',\n }}\n >\n <div className=\"flex flex-col items-center gap-2 p-4 text-center\">\n <svg\n className=\"h-8 w-8 text-red-500\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div className=\"text-sm text-red-600\">{error.message}</div>\n <button\n onClick={retry}\n className=\"rounded bg-red-100 px-3 py-1 text-sm text-red-700 hover:bg-red-200\"\n >\n Retry\n </button>\n </div>\n </div>\n );\n }\n\n // No animation data\n if (!animationData) {\n return null;\n }\n\n // Render the Lottie player\n return (\n <div\n className={className}\n style={{\n width: dimensions.width,\n height: dimensions.height,\n background: background || 'transparent',\n }}\n >\n <Lottie\n animationData={animationData}\n play={autoplay}\n loop={loop}\n speed={speed}\n direction={direction}\n style={{\n width: '100%',\n height: '100%',\n }}\n onComplete={handleComplete}\n rendererSettings={{\n preserveAspectRatio: 'xMidYMid meet',\n }}\n />\n {controls && (\n <div className=\"mt-2 flex items-center justify-center gap-2\">\n <span className=\"text-xs text-gray-500\">\n Speed: {speed}x | Direction: {direction === 1 ? 'Forward' : 'Reverse'}\n </span>\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk3HK2OE62_cjs = require('./chunk-3HK2OE62.cjs');
|
|
4
|
+
var chunkUQ3XI5MY_cjs = require('./chunk-UQ3XI5MY.cjs');
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var Lottie = require('react-lottie-player');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
|
|
11
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
12
|
+
var Lottie__default = /*#__PURE__*/_interopDefault(Lottie);
|
|
13
|
+
|
|
14
|
+
var SIZE_PRESETS = {
|
|
15
|
+
xs: { width: 64, height: 64 },
|
|
16
|
+
sm: { width: 128, height: 128 },
|
|
17
|
+
md: { width: 256, height: 256 },
|
|
18
|
+
lg: { width: 384, height: 384 },
|
|
19
|
+
xl: { width: 512, height: 512 },
|
|
20
|
+
full: { width: "100%", height: "100%" }
|
|
21
|
+
};
|
|
22
|
+
function LottiePlayer({
|
|
23
|
+
src,
|
|
24
|
+
size = "md",
|
|
25
|
+
width,
|
|
26
|
+
height,
|
|
27
|
+
autoplay = true,
|
|
28
|
+
loop = true,
|
|
29
|
+
speed = 1,
|
|
30
|
+
direction = 1,
|
|
31
|
+
controls = false,
|
|
32
|
+
background,
|
|
33
|
+
className,
|
|
34
|
+
showLoading = true,
|
|
35
|
+
onComplete,
|
|
36
|
+
onLoad,
|
|
37
|
+
onError
|
|
38
|
+
}) {
|
|
39
|
+
const { animationData, isLoading, error, retry } = chunk3HK2OE62_cjs.useLottie({ src });
|
|
40
|
+
React__default.default.useEffect(() => {
|
|
41
|
+
if (animationData && onLoad) {
|
|
42
|
+
onLoad();
|
|
43
|
+
}
|
|
44
|
+
}, [animationData, onLoad]);
|
|
45
|
+
React__default.default.useEffect(() => {
|
|
46
|
+
if (error && onError) {
|
|
47
|
+
onError(error);
|
|
48
|
+
}
|
|
49
|
+
}, [error, onError]);
|
|
50
|
+
const dimensions = React__default.default.useMemo(() => {
|
|
51
|
+
if (width !== void 0 || height !== void 0) {
|
|
52
|
+
return {
|
|
53
|
+
width: width ?? SIZE_PRESETS[size].width,
|
|
54
|
+
height: height ?? SIZE_PRESETS[size].height
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return SIZE_PRESETS[size];
|
|
58
|
+
}, [size, width, height]);
|
|
59
|
+
const handleComplete = React__default.default.useCallback(() => {
|
|
60
|
+
if (onComplete) {
|
|
61
|
+
onComplete();
|
|
62
|
+
}
|
|
63
|
+
}, [onComplete]);
|
|
64
|
+
if (isLoading && showLoading) {
|
|
65
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
66
|
+
"div",
|
|
67
|
+
{
|
|
68
|
+
className: `flex items-center justify-center ${className || ""}`,
|
|
69
|
+
style: {
|
|
70
|
+
width: dimensions.width,
|
|
71
|
+
height: dimensions.height,
|
|
72
|
+
background: background || "transparent"
|
|
73
|
+
},
|
|
74
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-2", children: [
|
|
75
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-8 w-8 animate-spin rounded-full border-4 border-gray-300 border-t-gray-900" }),
|
|
76
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-gray-500", children: "Loading animation..." })
|
|
77
|
+
] })
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
if (error) {
|
|
82
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
83
|
+
"div",
|
|
84
|
+
{
|
|
85
|
+
className: `flex items-center justify-center ${className || ""}`,
|
|
86
|
+
style: {
|
|
87
|
+
width: dimensions.width,
|
|
88
|
+
height: dimensions.height,
|
|
89
|
+
background: background || "transparent"
|
|
90
|
+
},
|
|
91
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-2 p-4 text-center", children: [
|
|
92
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
93
|
+
"svg",
|
|
94
|
+
{
|
|
95
|
+
className: "h-8 w-8 text-red-500",
|
|
96
|
+
fill: "none",
|
|
97
|
+
stroke: "currentColor",
|
|
98
|
+
viewBox: "0 0 24 24",
|
|
99
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
100
|
+
"path",
|
|
101
|
+
{
|
|
102
|
+
strokeLinecap: "round",
|
|
103
|
+
strokeLinejoin: "round",
|
|
104
|
+
strokeWidth: 2,
|
|
105
|
+
d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
}
|
|
109
|
+
),
|
|
110
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-red-600", children: error.message }),
|
|
111
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
112
|
+
"button",
|
|
113
|
+
{
|
|
114
|
+
onClick: retry,
|
|
115
|
+
className: "rounded bg-red-100 px-3 py-1 text-sm text-red-700 hover:bg-red-200",
|
|
116
|
+
children: "Retry"
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
] })
|
|
120
|
+
}
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
if (!animationData) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
127
|
+
"div",
|
|
128
|
+
{
|
|
129
|
+
className,
|
|
130
|
+
style: {
|
|
131
|
+
width: dimensions.width,
|
|
132
|
+
height: dimensions.height,
|
|
133
|
+
background: background || "transparent"
|
|
134
|
+
},
|
|
135
|
+
children: [
|
|
136
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
137
|
+
Lottie__default.default,
|
|
138
|
+
{
|
|
139
|
+
animationData,
|
|
140
|
+
play: autoplay,
|
|
141
|
+
loop,
|
|
142
|
+
speed,
|
|
143
|
+
direction,
|
|
144
|
+
style: {
|
|
145
|
+
width: "100%",
|
|
146
|
+
height: "100%"
|
|
147
|
+
},
|
|
148
|
+
onComplete: handleComplete,
|
|
149
|
+
rendererSettings: {
|
|
150
|
+
preserveAspectRatio: "xMidYMid meet"
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
),
|
|
154
|
+
controls && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex items-center justify-center gap-2", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-gray-500", children: [
|
|
155
|
+
"Speed: ",
|
|
156
|
+
speed,
|
|
157
|
+
"x | Direction: ",
|
|
158
|
+
direction === 1 ? "Forward" : "Reverse"
|
|
159
|
+
] }) })
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
chunkUQ3XI5MY_cjs.__name(LottiePlayer, "LottiePlayer");
|
|
165
|
+
|
|
166
|
+
exports.LottiePlayer = LottiePlayer;
|
|
167
|
+
//# sourceMappingURL=LottiePlayer.client-WFMG2OOW.cjs.map
|
|
168
|
+
//# sourceMappingURL=LottiePlayer.client-WFMG2OOW.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/LottiePlayer/LottiePlayer.client.tsx"],"names":["useLottie","React","jsx","jsxs","Lottie","__name"],"mappings":"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","file":"LottiePlayer.client-WFMG2OOW.cjs","sourcesContent":["/**\n * LottiePlayer Component\n *\n * Universal Lottie animation player component\n */\n\n'use client';\n\nimport React from 'react';\nimport Lottie from 'react-lottie-player';\n\nimport { LottiePlayerProps } from './types';\nimport { useLottie } from './useLottie';\n\n// Size presets mapping\nconst SIZE_PRESETS = {\n xs: { width: 64, height: 64 },\n sm: { width: 128, height: 128 },\n md: { width: 256, height: 256 },\n lg: { width: 384, height: 384 },\n xl: { width: 512, height: 512 },\n full: { width: '100%', height: '100%' },\n} as const;\n\n/**\n * LottiePlayer component for displaying Lottie animations\n *\n * Features:\n * - Loads animations from URLs or objects\n * - Size presets or custom dimensions\n * - Playback controls (speed, direction, loop)\n * - Loading and error states\n * - Event callbacks\n *\n * Usage:\n * ```tsx\n * // From URL with size preset\n * <LottiePlayer\n * src=\"https://example.com/animation.json\"\n * size=\"md\"\n * autoplay\n * loop\n * />\n *\n * // From object with custom size\n * <LottiePlayer\n * src={animationData}\n * width={300}\n * height={300}\n * speed={1.5}\n * controls\n * />\n *\n * // With callbacks\n * <LottiePlayer\n * src=\"https://example.com/animation.json\"\n * onLoad={() => console.log('Animation loaded')}\n * onComplete={() => console.log('Animation completed')}\n * onError={(err) => console.error('Error:', err)}\n * />\n * ```\n */\nexport function LottiePlayer({\n src,\n size = 'md',\n width,\n height,\n autoplay = true,\n loop = true,\n speed = 1,\n direction = 1,\n controls = false,\n background,\n className,\n showLoading = true,\n onComplete,\n onLoad,\n onError,\n}: LottiePlayerProps) {\n // Load animation data using our custom hook\n const { animationData, isLoading, error, retry } = useLottie({ src });\n\n // Notify parent about load state\n React.useEffect(() => {\n if (animationData && onLoad) {\n onLoad();\n }\n }, [animationData, onLoad]);\n\n // Notify parent about errors\n React.useEffect(() => {\n if (error && onError) {\n onError(error);\n }\n }, [error, onError]);\n\n // Determine dimensions\n const dimensions = React.useMemo(() => {\n // Custom dimensions override size preset\n if (width !== undefined || height !== undefined) {\n return {\n width: width ?? SIZE_PRESETS[size].width,\n height: height ?? SIZE_PRESETS[size].height,\n };\n }\n\n // Use size preset\n return SIZE_PRESETS[size];\n }, [size, width, height]);\n\n // Handle complete event\n const handleComplete = React.useCallback(() => {\n if (onComplete) {\n onComplete();\n }\n }, [onComplete]);\n\n // Loading state\n if (isLoading && showLoading) {\n return (\n <div\n className={`flex items-center justify-center ${className || ''}`}\n style={{\n width: dimensions.width,\n height: dimensions.height,\n background: background || 'transparent',\n }}\n >\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-gray-300 border-t-gray-900\" />\n <span className=\"text-sm text-gray-500\">Loading animation...</span>\n </div>\n </div>\n );\n }\n\n // Error state\n if (error) {\n return (\n <div\n className={`flex items-center justify-center ${className || ''}`}\n style={{\n width: dimensions.width,\n height: dimensions.height,\n background: background || 'transparent',\n }}\n >\n <div className=\"flex flex-col items-center gap-2 p-4 text-center\">\n <svg\n className=\"h-8 w-8 text-red-500\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <div className=\"text-sm text-red-600\">{error.message}</div>\n <button\n onClick={retry}\n className=\"rounded bg-red-100 px-3 py-1 text-sm text-red-700 hover:bg-red-200\"\n >\n Retry\n </button>\n </div>\n </div>\n );\n }\n\n // No animation data\n if (!animationData) {\n return null;\n }\n\n // Render the Lottie player\n return (\n <div\n className={className}\n style={{\n width: dimensions.width,\n height: dimensions.height,\n background: background || 'transparent',\n }}\n >\n <Lottie\n animationData={animationData}\n play={autoplay}\n loop={loop}\n speed={speed}\n direction={direction}\n style={{\n width: '100%',\n height: '100%',\n }}\n onComplete={handleComplete}\n rendererSettings={{\n preserveAspectRatio: 'xMidYMid meet',\n }}\n />\n {controls && (\n <div className=\"mt-2 flex items-center justify-center gap-2\">\n <span className=\"text-xs text-gray-500\">\n Speed: {speed}x | Direction: {direction === 1 ? 'Forward' : 'Reverse'}\n </span>\n </div>\n )}\n </div>\n );\n}\n"]}
|