@botuyo/chat-widget-standalone 1.0.60 → 1.0.62

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 (42) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +302 -323
  3. package/dist/Avatar3D-LfNJe183.js.map +1 -1
  4. package/dist/botuyo-chat.es.js +35 -36
  5. package/dist/botuyo-chat.es.js.map +1 -1
  6. package/dist/botuyo-chat.umd.js +1 -1
  7. package/dist/botuyo-chat.umd.js.map +1 -1
  8. package/dist/{chunk-audio-CjO94O6M.js → chunk-audio-Cam9NjvU.js} +2 -2
  9. package/dist/chunk-audio-Cam9NjvU.js.map +1 -0
  10. package/dist/{chunk-chat-ui-D94hKAOR.js → chunk-chat-ui-VGFEt16R.js} +32 -32
  11. package/dist/chunk-chat-ui-VGFEt16R.js.map +1 -0
  12. package/dist/{chunk-gallery-54UV-aGf.js → chunk-gallery-DPka8_Y7.js} +2 -2
  13. package/dist/chunk-gallery-DPka8_Y7.js.map +1 -0
  14. package/dist/src/chat-widget/ChatWidget.d.ts.map +1 -1
  15. package/dist/src/chat-widget/components/Gallery.stories.d.ts.map +1 -1
  16. package/dist/src/chat-widget/components/MessageBubble.d.ts.map +1 -1
  17. package/dist/src/chat-widget/components/MessageList.d.ts.map +1 -1
  18. package/dist/src/chat-widget/hooks/useChatSocket.d.ts.map +1 -1
  19. package/dist/src/chat-widget/hooks/useWidgetTheme.d.ts +1 -1
  20. package/dist/src/chat-widget/types/index.d.ts +20 -0
  21. package/dist/src/chat-widget/types/index.d.ts.map +1 -1
  22. package/dist/src/chat-widget/utils/theme.d.ts +4 -3
  23. package/dist/src/chat-widget/utils/theme.d.ts.map +1 -1
  24. package/dist/standalone.d.ts +6 -1
  25. package/dist/standalone.d.ts.map +1 -1
  26. package/dist/stats-umd.html +1 -1
  27. package/dist/stats.html +1 -1
  28. package/package.json +155 -155
  29. package/dist/ShadowChatWidget.d.ts +0 -25
  30. package/dist/ShadowChatWidget.d.ts.map +0 -1
  31. package/dist/chunk-audio-CjO94O6M.js.map +0 -1
  32. package/dist/chunk-chat-ui-D94hKAOR.js.map +0 -1
  33. package/dist/chunk-gallery-54UV-aGf.js.map +0 -1
  34. package/dist/src/chat-widget/utils/theme.examples.d.ts +0 -47
  35. package/dist/src/chat-widget/utils/theme.examples.d.ts.map +0 -1
  36. package/dist/src/chat-widget/utils/themes/index.d.ts +0 -12
  37. package/dist/src/chat-widget/utils/themes/index.d.ts.map +0 -1
  38. package/examples/cdn-example.html +0 -226
  39. package/examples/nextjs-example.js +0 -188
  40. package/examples/nextjs-example.tsx +0 -229
  41. package/examples/react-example.js +0 -168
  42. package/examples/react-example.tsx +0 -221
package/package.json CHANGED
@@ -1,155 +1,155 @@
1
- {
2
- "name": "@botuyo/chat-widget-standalone",
3
- "version": "1.0.60",
4
- "type": "module",
5
- "description": "BotUyo Chat Widget - Standalone CDN version with React/TypeScript support",
6
- "main": "dist/botuyo-chat.umd.js",
7
- "module": "dist/botuyo-chat.es.js",
8
- "types": "dist/standalone.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./dist/standalone.d.ts",
12
- "import": "./dist/botuyo-chat.es.js",
13
- "require": "./dist/botuyo-chat.umd.js"
14
- },
15
- "./dist/style.css": "./dist/botuyo-chat.css",
16
- "./style.css": "./dist/botuyo-chat.css"
17
- },
18
- "scripts": {
19
- "dev": "vite",
20
- "build": "npm run clean && npm run build:es && npm run build:umd && npm run build:types",
21
- "build:es": "vite build",
22
- "build:umd": "vite build -c vite.config.umd.mjs",
23
- "build:types": "tsc --project tsconfig.build.json",
24
- "preview": "vite preview",
25
- "clean": "npx rimraf dist",
26
- "lint": "eslint .",
27
- "lint:fix": "eslint . --fix",
28
- "typecheck": "tsc --noEmit",
29
- "test": "vitest",
30
- "test:ui": "vitest --ui",
31
- "test:run": "vitest run",
32
- "test:coverage": "vitest run --coverage",
33
- "test:e2e": "playwright test",
34
- "test:e2e:ui": "playwright test --ui",
35
- "test:e2e:debug": "playwright test --debug",
36
- "test:e2e:report": "playwright show-report",
37
- "storybook": "storybook dev -p 6006",
38
- "build-storybook": "storybook build",
39
- "format": "prettier --write \"src/**/*.{ts,tsx,css}\"",
40
- "format:check": "prettier --check \"src/**/*.{ts,tsx,css}\""
41
- },
42
- "lint-staged": {
43
- "*.{ts,tsx}": [
44
- "eslint --fix",
45
- "prettier --write"
46
- ],
47
- "*.{css,md,json}": [
48
- "prettier --write"
49
- ]
50
- },
51
- "keywords": [
52
- "chat",
53
- "widget",
54
- "chatbot",
55
- "customer-support",
56
- "botuyo",
57
- "standalone",
58
- "cdn",
59
- "react",
60
- "typescript",
61
- "nextjs",
62
- "socket.io"
63
- ],
64
- "author": "BotUyo",
65
- "license": "MIT",
66
- "repository": {
67
- "type": "git",
68
- "url": "https://github.com/botuyo/chat-widget.git"
69
- },
70
- "bugs": {
71
- "url": "https://github.com/botuyo/chat-widget/issues"
72
- },
73
- "homepage": "https://github.com/botuyo/chat-widget#readme",
74
- "devDependencies": {
75
- "@axe-core/playwright": "^4.11.0",
76
- "@chromatic-com/storybook": "^5.0.0",
77
- "@eslint/js": "^9.39.2",
78
- "@playwright/test": "^1.58.0",
79
- "@storybook/addon-a11y": "^10.2.0",
80
- "@storybook/addon-docs": "^10.2.0",
81
- "@storybook/addon-onboarding": "^10.2.0",
82
- "@storybook/addon-vitest": "^10.2.0",
83
- "@storybook/react-vite": "^10.2.0",
84
- "@tailwindcss/postcss": "^4.1.18",
85
- "@tanstack/react-virtual": "^3.13.18",
86
- "@testing-library/dom": "^10.4.1",
87
- "@testing-library/jest-dom": "^6.9.1",
88
- "@testing-library/react": "^16.3.2",
89
- "@testing-library/user-event": "^14.6.1",
90
- "@types/node": "^25.0.10",
91
- "@types/react": "^19.2.9",
92
- "@types/react-dom": "^19.2.3",
93
- "@typescript-eslint/eslint-plugin": "^8.53.1",
94
- "@typescript-eslint/parser": "^8.53.1",
95
- "@vitejs/plugin-react": "^5.1.2",
96
- "@vitest/browser-playwright": "^4.0.18",
97
- "@vitest/coverage-v8": "^4.0.18",
98
- "@vitest/ui": "^4.0.18",
99
- "autoprefixer": "^10.4.23",
100
- "axe-core": "^4.11.1",
101
- "cors": "^2.8.6",
102
- "cssnano": "^7.1.2",
103
- "cssnano-preset-advanced": "^7.0.10",
104
- "eslint": "^9.39.2",
105
- "eslint-plugin-react-hooks": "^7.0.1",
106
- "eslint-plugin-react-refresh": "^0.4.5",
107
- "eslint-plugin-storybook": "^10.2.0",
108
- "globals": "^17.1.0",
109
- "happy-dom": "^20.3.7",
110
- "husky": "^9.1.7",
111
- "lint-staged": "^16.2.7",
112
- "playwright": "^1.58.0",
113
- "postcss": "^8.5.6",
114
- "prettier": "^3.8.1",
115
- "react": "^18.3.1",
116
- "react-dom": "^18.3.1",
117
- "rehype-sanitize": "^6.0.0",
118
- "rollup-plugin-visualizer": "^6.0.5",
119
- "socket.io": "^4.8.3",
120
- "storybook": "^10.2.0",
121
- "tailwindcss": "^4.1.18",
122
- "terser": "^5.46.0",
123
- "typescript": "^5.3.3",
124
- "typescript-eslint": "^8.53.1",
125
- "vite": "^7.3.1",
126
- "vitest": "^4.0.18",
127
- "zod": "^4.3.6"
128
- },
129
- "peerDependencies": {
130
- "react": "^18.0.0 || ^19.0.0",
131
- "react-dom": "^18.0.0 || ^19.0.0"
132
- },
133
- "dependencies": {
134
- "@pixiv/three-vrm": "^3.4.5",
135
- "@react-three/drei": "^9.122.0",
136
- "@react-three/fiber": "^8.18.0",
137
- "@types/three": "^0.182.0",
138
- "browser-image-compression": "^2.0.2",
139
- "clsx": "^2.1.1",
140
- "idb": "^8.0.3",
141
- "lucide-react": "^0.400.0",
142
- "react-markdown": "^10.1.0",
143
- "remark-gfm": "^4.0.1",
144
- "socket.io-client": "^4.7.4",
145
- "tailwind-merge": "^3.4.0",
146
- "three": "^0.182.0"
147
- },
148
- "files": [
149
- "dist",
150
- "README.md",
151
- "INSTALLATION_GUIDE.md",
152
- "LICENSE",
153
- "examples"
154
- ]
155
- }
1
+ {
2
+ "name": "@botuyo/chat-widget-standalone",
3
+ "version": "1.0.62",
4
+ "type": "module",
5
+ "description": "BotUyo Chat Widget - Standalone CDN version with React/TypeScript support",
6
+ "main": "dist/botuyo-chat.umd.js",
7
+ "module": "dist/botuyo-chat.es.js",
8
+ "types": "dist/standalone.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/standalone.d.ts",
12
+ "import": "./dist/botuyo-chat.es.js",
13
+ "require": "./dist/botuyo-chat.umd.js"
14
+ },
15
+ "./dist/style.css": "./dist/botuyo-chat.css",
16
+ "./style.css": "./dist/botuyo-chat.css"
17
+ },
18
+ "scripts": {
19
+ "dev": "vite",
20
+ "build": "npm run clean && npm run build:es && npm run build:umd && npm run build:types",
21
+ "build:es": "vite build",
22
+ "build:umd": "vite build -c vite.config.umd.mjs",
23
+ "build:types": "tsc --project tsconfig.build.json",
24
+ "preview": "vite preview",
25
+ "clean": "npx rimraf dist",
26
+ "lint": "eslint .",
27
+ "lint:fix": "eslint . --fix",
28
+ "typecheck": "tsc --noEmit",
29
+ "test": "vitest",
30
+ "test:ui": "vitest --ui",
31
+ "test:run": "vitest run",
32
+ "test:coverage": "vitest run --coverage",
33
+ "test:e2e": "playwright test",
34
+ "test:e2e:ui": "playwright test --ui",
35
+ "test:e2e:debug": "playwright test --debug",
36
+ "test:e2e:report": "playwright show-report",
37
+ "storybook": "storybook dev -p 6006",
38
+ "build-storybook": "storybook build",
39
+ "format": "prettier --write \"src/**/*.{ts,tsx,css}\"",
40
+ "format:check": "prettier --check \"src/**/*.{ts,tsx,css}\""
41
+ },
42
+ "lint-staged": {
43
+ "*.{ts,tsx}": [
44
+ "eslint --fix",
45
+ "prettier --write"
46
+ ],
47
+ "*.{css,md,json}": [
48
+ "prettier --write"
49
+ ]
50
+ },
51
+ "keywords": [
52
+ "chat",
53
+ "widget",
54
+ "chatbot",
55
+ "customer-support",
56
+ "botuyo",
57
+ "standalone",
58
+ "cdn",
59
+ "react",
60
+ "typescript",
61
+ "nextjs",
62
+ "socket.io"
63
+ ],
64
+ "author": "BotUyo",
65
+ "license": "MIT",
66
+ "repository": {
67
+ "type": "git",
68
+ "url": "https://github.com/botuyo/chat-widget.git"
69
+ },
70
+ "bugs": {
71
+ "url": "https://github.com/botuyo/chat-widget/issues"
72
+ },
73
+ "homepage": "https://github.com/botuyo/chat-widget#readme",
74
+ "devDependencies": {
75
+ "@axe-core/playwright": "^4.11.0",
76
+ "@chromatic-com/storybook": "^5.0.0",
77
+ "@eslint/js": "^9.39.2",
78
+ "@playwright/test": "^1.58.0",
79
+ "@storybook/addon-a11y": "^10.2.0",
80
+ "@storybook/addon-docs": "^10.2.0",
81
+ "@storybook/addon-onboarding": "^10.2.0",
82
+ "@storybook/addon-vitest": "^10.2.0",
83
+ "@storybook/react-vite": "^10.2.0",
84
+ "@tailwindcss/postcss": "^4.1.18",
85
+ "@tanstack/react-virtual": "^3.13.18",
86
+ "@testing-library/dom": "^10.4.1",
87
+ "@testing-library/jest-dom": "^6.9.1",
88
+ "@testing-library/react": "^16.3.2",
89
+ "@testing-library/user-event": "^14.6.1",
90
+ "@types/node": "^25.0.10",
91
+ "@types/react": "^19.2.9",
92
+ "@types/react-dom": "^19.2.3",
93
+ "@typescript-eslint/eslint-plugin": "^8.53.1",
94
+ "@typescript-eslint/parser": "^8.53.1",
95
+ "@vitejs/plugin-react": "^5.1.2",
96
+ "@vitest/browser-playwright": "^4.0.18",
97
+ "@vitest/coverage-v8": "^4.0.18",
98
+ "@vitest/ui": "^4.0.18",
99
+ "autoprefixer": "^10.4.23",
100
+ "axe-core": "^4.11.1",
101
+ "cors": "^2.8.6",
102
+ "cssnano": "^7.1.2",
103
+ "cssnano-preset-advanced": "^7.0.10",
104
+ "eslint": "^9.39.2",
105
+ "eslint-plugin-react-hooks": "^7.0.1",
106
+ "eslint-plugin-react-refresh": "^0.4.5",
107
+ "eslint-plugin-storybook": "^10.2.0",
108
+ "globals": "^17.1.0",
109
+ "happy-dom": "^20.3.7",
110
+ "husky": "^9.1.7",
111
+ "lint-staged": "^16.2.7",
112
+ "playwright": "^1.58.0",
113
+ "postcss": "^8.5.6",
114
+ "prettier": "^3.8.1",
115
+ "react": "^18.3.1",
116
+ "react-dom": "^18.3.1",
117
+ "rehype-sanitize": "^6.0.0",
118
+ "rollup-plugin-visualizer": "^6.0.5",
119
+ "socket.io": "^4.8.3",
120
+ "storybook": "^10.2.0",
121
+ "tailwindcss": "^4.1.18",
122
+ "terser": "^5.46.0",
123
+ "typescript": "^5.3.3",
124
+ "typescript-eslint": "^8.53.1",
125
+ "vite": "^7.3.1",
126
+ "vitest": "^4.0.18",
127
+ "zod": "^4.3.6"
128
+ },
129
+ "peerDependencies": {
130
+ "react": "^18.0.0 || ^19.0.0",
131
+ "react-dom": "^18.0.0 || ^19.0.0"
132
+ },
133
+ "dependencies": {
134
+ "@pixiv/three-vrm": "^3.4.5",
135
+ "@react-three/drei": "^9.122.0",
136
+ "@react-three/fiber": "^8.18.0",
137
+ "@types/three": "^0.182.0",
138
+ "browser-image-compression": "^2.0.2",
139
+ "clsx": "^2.1.1",
140
+ "idb": "^8.0.3",
141
+ "lucide-react": "^0.400.0",
142
+ "react-markdown": "^10.1.0",
143
+ "remark-gfm": "^4.0.1",
144
+ "socket.io-client": "^4.7.4",
145
+ "tailwind-merge": "^3.4.0",
146
+ "three": "^0.182.0"
147
+ },
148
+ "files": [
149
+ "dist",
150
+ "README.md",
151
+ "INSTALLATION_GUIDE.md",
152
+ "LICENSE",
153
+ "examples"
154
+ ]
155
+ }
@@ -1,25 +0,0 @@
1
- /**
2
- * ShadowChatWidget — Shadow DOM wrapper for ChatWidget React component
3
- *
4
- * Self-contained wrapper that provides:
5
- * - Shadow DOM for CSS isolation
6
- * - Built-in Error Boundary (consumers don't need to wrap)
7
- * - Auto dark mode detection (observes data-theme + prefers-color-scheme)
8
- * - Lazy loading with Suspense
9
- *
10
- * Used when the widget is imported as an npm React component (not CDN).
11
- * The standalone/CDN version handles Shadow DOM in standalone.tsx.
12
- */
13
- import { type FC } from 'react';
14
- import type { ChatWidgetProps } from './src/chat-widget/types';
15
- /**
16
- * Shadow DOM wrapper that renders ChatWidget inside an isolated shadow root.
17
- * All props are forwarded to the inner ChatWidget.
18
- *
19
- * Includes:
20
- * - Error Boundary (crashes render null, never break host page)
21
- * - Auto dark mode (observes host page data-theme + prefers-color-scheme)
22
- */
23
- export declare const ShadowChatWidget: FC<ChatWidgetProps>;
24
- export default ShadowChatWidget;
25
- //# sourceMappingURL=ShadowChatWidget.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ShadowChatWidget.d.ts","sourceRoot":"","sources":["../ShadowChatWidget.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAc,EAA0C,KAAK,EAAE,EAAkB,MAAM,OAAO,CAAC;AAE/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAsD/D;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,eAAe,CAgGhD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk-audio-CjO94O6M.js","sources":["../src/chat-widget/components/AudioPlayer.tsx"],"sourcesContent":["'use client'\r\n\r\nimport { useState, useRef, useMemo, memo, useCallback } from 'react'\r\nimport { Play, Pause, Loader2, AlertCircle, RotateCw } from './Icons'\r\nimport { cn } from '@/lib/utils'\r\nimport { getPrimaryColor } from '../utils/theme'\r\n\r\ninterface AudioPlayerProps {\r\n url: string\r\n isBot: boolean\r\n primaryColor?: string\r\n}\r\n\r\nexport type { AudioPlayerProps }\r\n\r\nexport const AudioPlayer = memo(function AudioPlayer({\r\n url,\r\n isBot,\r\n primaryColor,\r\n}: AudioPlayerProps) {\r\n const [isPlaying, setIsPlaying] = useState(false)\r\n const [duration, setDuration] = useState(0)\r\n const [currentTime, setCurrentTime] = useState(0)\r\n // Blob URLs from URL.createObjectURL() are valid during the current session\r\n const [isLoading, setIsLoading] = useState(true)\r\n const [error, setError] = useState<string | null>(null)\r\n const audioRef = useRef<HTMLAudioElement>(null)\r\n\r\n const brandColor = useMemo(() => getPrimaryColor({ primaryColor }), [primaryColor])\r\n\r\n const togglePlay = useCallback(() => {\r\n if (error) return\r\n if (isPlaying) audioRef.current?.pause()\r\n else audioRef.current?.play().catch((e) => {\r\n console.error('[AudioPlayer] Play error:', e)\r\n setError('Error al reproducir')\r\n })\r\n setIsPlaying(!isPlaying)\r\n }, [isPlaying, error])\r\n\r\n const handleLoadedMetadata = useCallback(() => {\r\n setDuration(audioRef.current?.duration || 0)\r\n }, [])\r\n\r\n const handleCanPlayThrough = useCallback(() => {\r\n setIsLoading(false)\r\n setError(null)\r\n }, [])\r\n\r\n const handleError = useCallback(() => {\r\n console.error('[AudioPlayer] Failed to load audio:', url)\r\n setIsLoading(false)\r\n setError('No se pudo cargar')\r\n }, [url])\r\n\r\n const handleRetry = useCallback(() => {\r\n setIsLoading(true)\r\n setError(null)\r\n if (audioRef.current) {\r\n audioRef.current.load()\r\n }\r\n }, [])\r\n\r\n return (\r\n <div\r\n className={cn(\r\n 'flex items-center gap-3 py-1 min-w-[200px]',\r\n isBot ? 'text-foreground' : 'text-primary-foreground'\r\n )}\r\n >\r\n {/* Always render <audio> — onError handles expired URLs naturally */}\r\n <audio\r\n ref={audioRef}\r\n src={url}\r\n preload=\"metadata\"\r\n onLoadedMetadata={handleLoadedMetadata}\r\n onCanPlayThrough={handleCanPlayThrough}\r\n onTimeUpdate={() => setCurrentTime(audioRef.current?.currentTime || 0)}\r\n onEnded={() => setIsPlaying(false)}\r\n onError={handleError}\r\n />\r\n \r\n {error ? (\r\n // Error state - show retry button\r\n <button\r\n onClick={handleRetry}\r\n className=\"w-8 h-8 rounded-full flex items-center justify-center shrink-0 bg-red-500/20 text-red-500 hover:bg-red-500/30 transition-colors\"\r\n title=\"Reintentar\"\r\n >\r\n <RotateCw className=\"w-4 h-4\" />\r\n </button>\r\n ) : (\r\n // Normal play/pause button\r\n <button\r\n onClick={togglePlay}\r\n disabled={isLoading}\r\n className=\"w-8 h-8 rounded-full flex items-center justify-center shrink-0 transition-opacity\"\r\n style={{\r\n backgroundColor: isBot ? brandColor : 'hsl(var(--card))',\r\n color: isBot ? 'white' : brandColor,\r\n opacity: isLoading ? 0.6 : 1,\r\n }}\r\n >\r\n {isLoading ? (\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n ) : isPlaying ? (\r\n <Pause className=\"w-4 h-4 fill-current\" />\r\n ) : (\r\n <Play className=\"w-4 h-4 fill-current ml-0.5\" />\r\n )}\r\n </button>\r\n )}\r\n \r\n <div className=\"flex-1 space-y-1\">\r\n {error ? (\r\n <div className=\"flex items-center gap-1.5 text-red-500\">\r\n <AlertCircle className=\"w-3 h-3\" />\r\n <span className=\"text-[9px] font-bold\">{error}</span>\r\n </div>\r\n ) : (\r\n <>\r\n <div className=\"relative h-1 w-full bg-current/20 rounded-full overflow-hidden\">\r\n <div\r\n className=\"absolute h-full bg-current rounded-full transition-all\"\r\n style={{ width: `${(currentTime / duration) * 100 || 0}%` }}\r\n />\r\n </div>\r\n <div className=\"flex justify-between text-[9px] font-bold opacity-60\">\r\n <span>\r\n {Math.floor(currentTime / 60)}:\r\n {Math.floor(currentTime % 60)\r\n .toString()\r\n .padStart(2, '0')}\r\n </span>\r\n <span>\r\n {isLoading ? '--:--' : `${Math.floor(duration / 60)}:${Math.floor(duration % 60).toString().padStart(2, '0')}`}\r\n </span>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n )\r\n})\r\n"],"names":["AudioPlayer","memo","url","isBot","primaryColor","isPlaying","setIsPlaying","useState","duration","setDuration","currentTime","setCurrentTime","isLoading","setIsLoading","error","setError","audioRef","useRef","brandColor","useMemo","getPrimaryColor","togglePlay","useCallback","current","pause","play","catch","e","console","handleLoadedMetadata","handleCanPlayThrough","handleError","handleRetry","load","jsxs","className","cn","children","jsx","ref","src","preload","onLoadedMetadata","onCanPlayThrough","onTimeUpdate","onEnded","onError","onClick","title","RotateCw","disabled","style","backgroundColor","color","opacity","Loader2","Pause","Play","AlertCircle","Fragment","width","Math","floor","toString","padStart"],"mappings":"0OAeO,MAAMA,EAAcC,EAAK,UAAqBC,IACnDA,EAAAC,MACAA,EAAAC,aACAA,IAEA,MAAOC,EAAWC,GAAgBC,GAAS,IACpCC,EAAUC,GAAeF,EAAS,IAClCG,EAAaC,GAAkBJ,EAAS,IAExCK,EAAWC,GAAgBN,GAAS,IACpCO,EAAOC,GAAYR,EAAwB,MAC5CS,EAAWC,EAAyB,MAEpCC,EAAaC,EAAQ,IAAMC,EAAgB,CAAEhB,iBAAiB,CAACA,IAE/DiB,EAAaC,EAAY,KACzBR,IACAT,EAAWW,EAASO,SAASC,UACnBD,SAASE,OAAOC,MAAOC,IACnCC,QAAQd,MAAM,4BAA6Ba,GAC3CZ,EAAS,yBAEXT,GAAcD,KACb,CAACA,EAAWS,IAETe,EAAuBP,EAAY,KACvCb,EAAYO,EAASO,SAASf,UAAY,IACzC,IAEGsB,EAAuBR,EAAY,KACvCT,GAAa,GACbE,EAAS,OACR,IAEGgB,EAAcT,EAAY,KAC9BM,QAAQd,MAAM,sCAAuCZ,GACrDW,GAAa,GACbE,EAAS,sBACR,CAACb,IAEE8B,EAAcV,EAAY,KAC9BT,GAAa,GACbE,EAAS,MACLC,EAASO,SACXP,EAASO,QAAQU,QAElB;AAEH,OACEC,EAAC,MAAA,CACCC,UAAWC,EACT,6CACAjC,EAAQ,kBAAoB,2BAI9BkC,SAAA;eAAAC,EAAC,QAAA,CACCC,IAAKvB,EACLwB,IAAKtC,EACLuC,QAAQ,WACRC,iBAAkBb,EAClBc,iBAAkBb,EAClBc,aAAc,IAAMjC,EAAeK,EAASO,SAASb,aAAe,GACpEmC,QAAS,IAAMvC,GAAa,GAC5BwC,QAASf;eAKTO,EAAC,SAFFxB,EAEE,CACCiC,QAASf,EACTG,UAAU,kIACVa,MAAM,aAENX,wBAAAC,EAACW,EAAA,CAASd,UAAU,aAIrB,CACCY,QAAS1B,EACT6B,SAAUtC,EACVuB,UAAU,oFACVgB,MAAO,CACLC,gBAAiBjD,EAAQe,EAAa,mBACtCmC,MAAOlD,EAAQ,QAAUe,EACzBoC,QAAS1C,EAAY,GAAM,GAG5ByB,SAAAzB,iBACC0B,EAACiB,EAAA,CAAQpB,UAAU,yBACjB9B,iBACFiC,EAACkB,EAAA,CAAMrB,UAAU,0CAEhBsB,EAAA,CAAKtB,UAAU;eAKtBG,EAAC,OAAIH,UAAU,mBACZE,0BACCH,EAAC,MAAA,CAAIC,UAAU,yCACbE,SAAA;eAAAC,EAACoB,EAAA,CAAYvB,UAAU;iBACtB,OAAA,CAAKA,UAAU,uBAAwBE,SAAAvB,sBAG1CoB,EAAAyB,EAAA,CACEtB,SAAA;eAAAC,EAAC,MAAA,CAAIH,UAAU,iEACbE,wBAAAC,EAAC,MAAA,CACCH,UAAU,yDACVgB,MAAO,CAAES,MAAO,GAAIlD,EAAcF,EAAY,KAAO;eAGzD0B,EAAC,MAAA,CAAIC,UAAU,uDACbE,SAAA;eAAAH,EAAC,OAAA,CACEG,SAAA,CAAAwB,KAAKC,MAAMpD,EAAc,IAAI,IAC7BmD,KAAKC,MAAMpD,EAAc,IACvBqD,WACAC,SAAS,EAAG;eAEjB1B,EAAC,QACED,SAAAzB,EAAY,QAAU,GAAGiD,KAAKC,MAAMtD,EAAW,OAAOqD,KAAKC,MAAMtD,EAAW,IAAIuD,WAAWC,SAAS,EAAG,mBAQxH"}