@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.
Files changed (174) hide show
  1. package/dist/LottiePlayer.client-LBEC2JKY.mjs +161 -0
  2. package/dist/LottiePlayer.client-LBEC2JKY.mjs.map +1 -0
  3. package/dist/LottiePlayer.client-WFMG2OOW.cjs +168 -0
  4. package/dist/LottiePlayer.client-WFMG2OOW.cjs.map +1 -0
  5. package/dist/Mermaid.client-4TU2TSH3.mjs +477 -0
  6. package/dist/Mermaid.client-4TU2TSH3.mjs.map +1 -0
  7. package/dist/Mermaid.client-SBYY364Q.cjs +483 -0
  8. package/dist/Mermaid.client-SBYY364Q.cjs.map +1 -0
  9. package/dist/PlaygroundLayout-3YVSAEAF.cjs +1003 -0
  10. package/dist/PlaygroundLayout-3YVSAEAF.cjs.map +1 -0
  11. package/dist/PlaygroundLayout-4DYBORAS.mjs +996 -0
  12. package/dist/PlaygroundLayout-4DYBORAS.mjs.map +1 -0
  13. package/dist/PrettyCode.client-LCBPPTIX.mjs +152 -0
  14. package/dist/PrettyCode.client-LCBPPTIX.mjs.map +1 -0
  15. package/dist/PrettyCode.client-PNPLXRH6.cjs +154 -0
  16. package/dist/PrettyCode.client-PNPLXRH6.cjs.map +1 -0
  17. package/dist/chunk-37ZI6VD4.mjs +12 -0
  18. package/dist/chunk-37ZI6VD4.mjs.map +1 -0
  19. package/dist/chunk-3HK2OE62.cjs +81 -0
  20. package/dist/chunk-3HK2OE62.cjs.map +1 -0
  21. package/dist/chunk-7DGDQVQW.cjs +591 -0
  22. package/dist/chunk-7DGDQVQW.cjs.map +1 -0
  23. package/dist/chunk-M6P2FU7L.mjs +572 -0
  24. package/dist/chunk-M6P2FU7L.mjs.map +1 -0
  25. package/dist/chunk-UQ3XI5MY.cjs +15 -0
  26. package/dist/chunk-UQ3XI5MY.cjs.map +1 -0
  27. package/dist/chunk-YFRNE2IR.mjs +79 -0
  28. package/dist/chunk-YFRNE2IR.mjs.map +1 -0
  29. package/dist/index.cjs +5042 -0
  30. package/dist/index.cjs.map +1 -0
  31. package/dist/index.d.cts +1591 -0
  32. package/dist/index.d.ts +1591 -0
  33. package/dist/index.mjs +4941 -0
  34. package/dist/index.mjs.map +1 -0
  35. package/package.json +86 -0
  36. package/src/components/markdown/MarkdownMessage.tsx +340 -0
  37. package/src/components/markdown/index.ts +5 -0
  38. package/src/index.ts +26 -0
  39. package/src/stores/index.ts +9 -0
  40. package/src/stores/mediaCache.ts +534 -0
  41. package/src/tools/AudioPlayer/README.md +206 -0
  42. package/src/tools/AudioPlayer/components/HybridAudioPlayer.tsx +216 -0
  43. package/src/tools/AudioPlayer/components/HybridSimplePlayer.tsx +280 -0
  44. package/src/tools/AudioPlayer/components/HybridWaveform.tsx +279 -0
  45. package/src/tools/AudioPlayer/components/ReactiveCover/AudioReactiveCover.tsx +149 -0
  46. package/src/tools/AudioPlayer/components/ReactiveCover/effects/GlowEffect.tsx +110 -0
  47. package/src/tools/AudioPlayer/components/ReactiveCover/effects/MeshEffect.tsx +58 -0
  48. package/src/tools/AudioPlayer/components/ReactiveCover/effects/OrbsEffect.tsx +45 -0
  49. package/src/tools/AudioPlayer/components/ReactiveCover/effects/SpotlightEffect.tsx +82 -0
  50. package/src/tools/AudioPlayer/components/ReactiveCover/effects/index.ts +8 -0
  51. package/src/tools/AudioPlayer/components/ReactiveCover/index.ts +6 -0
  52. package/src/tools/AudioPlayer/components/index.ts +22 -0
  53. package/src/tools/AudioPlayer/context/HybridAudioProvider.tsx +158 -0
  54. package/src/tools/AudioPlayer/context/index.ts +16 -0
  55. package/src/tools/AudioPlayer/effects/index.ts +412 -0
  56. package/src/tools/AudioPlayer/hooks/index.ts +35 -0
  57. package/src/tools/AudioPlayer/hooks/useHybridAudio.ts +387 -0
  58. package/src/tools/AudioPlayer/hooks/useHybridAudioAnalysis.ts +95 -0
  59. package/src/tools/AudioPlayer/hooks/useVisualization.tsx +207 -0
  60. package/src/tools/AudioPlayer/index.ts +133 -0
  61. package/src/tools/AudioPlayer/types/effects.ts +73 -0
  62. package/src/tools/AudioPlayer/types/index.ts +27 -0
  63. package/src/tools/AudioPlayer/utils/debug.ts +14 -0
  64. package/src/tools/AudioPlayer/utils/formatTime.ts +10 -0
  65. package/src/tools/AudioPlayer/utils/index.ts +6 -0
  66. package/src/tools/ImageViewer/@refactoring/00-PLAN.md +71 -0
  67. package/src/tools/ImageViewer/@refactoring/01-TYPES.md +121 -0
  68. package/src/tools/ImageViewer/@refactoring/02-UTILS.md +143 -0
  69. package/src/tools/ImageViewer/@refactoring/03-HOOKS.md +261 -0
  70. package/src/tools/ImageViewer/@refactoring/04-COMPONENTS.md +427 -0
  71. package/src/tools/ImageViewer/@refactoring/05-EXECUTION-CHECKLIST.md +126 -0
  72. package/src/tools/ImageViewer/README.md +200 -0
  73. package/src/tools/ImageViewer/components/ImageInfo.tsx +44 -0
  74. package/src/tools/ImageViewer/components/ImageToolbar.tsx +145 -0
  75. package/src/tools/ImageViewer/components/ImageViewer.tsx +241 -0
  76. package/src/tools/ImageViewer/components/index.ts +7 -0
  77. package/src/tools/ImageViewer/hooks/index.ts +9 -0
  78. package/src/tools/ImageViewer/hooks/useImageLoading.ts +204 -0
  79. package/src/tools/ImageViewer/hooks/useImageTransform.ts +101 -0
  80. package/src/tools/ImageViewer/index.ts +60 -0
  81. package/src/tools/ImageViewer/types.ts +81 -0
  82. package/src/tools/ImageViewer/utils/constants.ts +59 -0
  83. package/src/tools/ImageViewer/utils/debug.ts +14 -0
  84. package/src/tools/ImageViewer/utils/index.ts +17 -0
  85. package/src/tools/ImageViewer/utils/lqip.ts +47 -0
  86. package/src/tools/JsonForm/JsonSchemaForm.tsx +197 -0
  87. package/src/tools/JsonForm/examples/BotConfigExample.tsx +249 -0
  88. package/src/tools/JsonForm/examples/RealBotConfigExample.tsx +161 -0
  89. package/src/tools/JsonForm/index.ts +46 -0
  90. package/src/tools/JsonForm/templates/ArrayFieldItemTemplate.tsx +47 -0
  91. package/src/tools/JsonForm/templates/ArrayFieldTemplate.tsx +74 -0
  92. package/src/tools/JsonForm/templates/BaseInputTemplate.tsx +107 -0
  93. package/src/tools/JsonForm/templates/ErrorListTemplate.tsx +35 -0
  94. package/src/tools/JsonForm/templates/FieldTemplate.tsx +62 -0
  95. package/src/tools/JsonForm/templates/ObjectFieldTemplate.tsx +116 -0
  96. package/src/tools/JsonForm/templates/index.ts +12 -0
  97. package/src/tools/JsonForm/types.ts +83 -0
  98. package/src/tools/JsonForm/utils.ts +213 -0
  99. package/src/tools/JsonForm/widgets/CheckboxWidget.tsx +37 -0
  100. package/src/tools/JsonForm/widgets/ColorWidget.tsx +219 -0
  101. package/src/tools/JsonForm/widgets/NumberWidget.tsx +89 -0
  102. package/src/tools/JsonForm/widgets/SelectWidget.tsx +97 -0
  103. package/src/tools/JsonForm/widgets/SliderWidget.tsx +148 -0
  104. package/src/tools/JsonForm/widgets/SwitchWidget.tsx +35 -0
  105. package/src/tools/JsonForm/widgets/TextWidget.tsx +96 -0
  106. package/src/tools/JsonForm/widgets/index.ts +14 -0
  107. package/src/tools/JsonTree/index.tsx +243 -0
  108. package/src/tools/LottiePlayer/LottiePlayer.client.tsx +213 -0
  109. package/src/tools/LottiePlayer/index.tsx +56 -0
  110. package/src/tools/LottiePlayer/types.ts +108 -0
  111. package/src/tools/LottiePlayer/useLottie.ts +164 -0
  112. package/src/tools/Mermaid/Mermaid.client.tsx +82 -0
  113. package/src/tools/Mermaid/components/MermaidCodeViewer.tsx +95 -0
  114. package/src/tools/Mermaid/components/MermaidFullscreenModal.tsx +103 -0
  115. package/src/tools/Mermaid/hooks/index.ts +4 -0
  116. package/src/tools/Mermaid/hooks/useMermaidCleanup.ts +73 -0
  117. package/src/tools/Mermaid/hooks/useMermaidFullscreen.ts +46 -0
  118. package/src/tools/Mermaid/hooks/useMermaidRenderer.ts +226 -0
  119. package/src/tools/Mermaid/hooks/useMermaidValidation.ts +29 -0
  120. package/src/tools/Mermaid/index.tsx +44 -0
  121. package/src/tools/Mermaid/utils/mermaid-helpers.ts +33 -0
  122. package/src/tools/OpenapiViewer/components/EndpointInfo.tsx +149 -0
  123. package/src/tools/OpenapiViewer/components/EndpointsLibrary.tsx +263 -0
  124. package/src/tools/OpenapiViewer/components/PlaygroundLayout.tsx +125 -0
  125. package/src/tools/OpenapiViewer/components/PlaygroundStepper.tsx +100 -0
  126. package/src/tools/OpenapiViewer/components/RequestBuilder.tsx +157 -0
  127. package/src/tools/OpenapiViewer/components/RequestParametersForm.tsx +253 -0
  128. package/src/tools/OpenapiViewer/components/ResponseViewer.tsx +173 -0
  129. package/src/tools/OpenapiViewer/components/VersionSelector.tsx +68 -0
  130. package/src/tools/OpenapiViewer/components/index.ts +14 -0
  131. package/src/tools/OpenapiViewer/constants.ts +39 -0
  132. package/src/tools/OpenapiViewer/context/PlaygroundContext.tsx +337 -0
  133. package/src/tools/OpenapiViewer/hooks/index.ts +8 -0
  134. package/src/tools/OpenapiViewer/hooks/useMobile.ts +10 -0
  135. package/src/tools/OpenapiViewer/hooks/useOpenApiSchema.ts +199 -0
  136. package/src/tools/OpenapiViewer/index.tsx +37 -0
  137. package/src/tools/OpenapiViewer/types.ts +151 -0
  138. package/src/tools/OpenapiViewer/utils/apiKeyManager.ts +149 -0
  139. package/src/tools/OpenapiViewer/utils/formatters.ts +71 -0
  140. package/src/tools/OpenapiViewer/utils/index.ts +9 -0
  141. package/src/tools/OpenapiViewer/utils/versionManager.ts +161 -0
  142. package/src/tools/PrettyCode/PrettyCode.client.tsx +208 -0
  143. package/src/tools/PrettyCode/index.tsx +47 -0
  144. package/src/tools/VideoPlayer/@refactoring/00-PLAN.md +91 -0
  145. package/src/tools/VideoPlayer/@refactoring/01-TYPES.md +284 -0
  146. package/src/tools/VideoPlayer/@refactoring/02-UTILS.md +141 -0
  147. package/src/tools/VideoPlayer/@refactoring/03-HOOKS.md +178 -0
  148. package/src/tools/VideoPlayer/@refactoring/04-COMPONENTS.md +95 -0
  149. package/src/tools/VideoPlayer/@refactoring/05-EXECUTION-CHECKLIST.md +139 -0
  150. package/src/tools/VideoPlayer/README.md +264 -0
  151. package/src/tools/VideoPlayer/components/VideoControls.tsx +138 -0
  152. package/src/tools/VideoPlayer/components/VideoErrorFallback.tsx +172 -0
  153. package/src/tools/VideoPlayer/components/VideoPlayer.tsx +201 -0
  154. package/src/tools/VideoPlayer/components/index.ts +14 -0
  155. package/src/tools/VideoPlayer/context/VideoPlayerContext.tsx +52 -0
  156. package/src/tools/VideoPlayer/context/index.ts +8 -0
  157. package/src/tools/VideoPlayer/hooks/index.ts +12 -0
  158. package/src/tools/VideoPlayer/hooks/useVideoPlayerSettings.ts +70 -0
  159. package/src/tools/VideoPlayer/hooks/useVideoPositionCache.ts +116 -0
  160. package/src/tools/VideoPlayer/index.ts +77 -0
  161. package/src/tools/VideoPlayer/providers/NativeProvider.tsx +284 -0
  162. package/src/tools/VideoPlayer/providers/StreamProvider.tsx +505 -0
  163. package/src/tools/VideoPlayer/providers/VidstackProvider.tsx +400 -0
  164. package/src/tools/VideoPlayer/providers/index.ts +8 -0
  165. package/src/tools/VideoPlayer/types/index.ts +38 -0
  166. package/src/tools/VideoPlayer/types/player.ts +116 -0
  167. package/src/tools/VideoPlayer/types/provider.ts +93 -0
  168. package/src/tools/VideoPlayer/types/sources.ts +97 -0
  169. package/src/tools/VideoPlayer/utils/debug.ts +14 -0
  170. package/src/tools/VideoPlayer/utils/fileSource.ts +78 -0
  171. package/src/tools/VideoPlayer/utils/index.ts +12 -0
  172. package/src/tools/VideoPlayer/utils/resolvers.ts +75 -0
  173. package/src/tools/_shared.ts +29 -0
  174. 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"]}