@jaaq/jaaq-sdk-js 1.1.1 → 1.2.0-dev-ec79f7e-20260605
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/README.md +18 -7
- package/dist/embed/embed-collection.html +17 -4
- package/dist/embed/embed.html +15 -3
- package/dist/index.cjs +57 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +100 -24
- package/dist/index.mjs +56 -12
- package/dist/index.mjs.map +1 -1
- package/dist/jaaq-sdk.min.js +1 -1
- package/dist/jaaq-sdk.min.js.map +1 -1
- package/dist/ui/index.cjs +102 -17
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.d.ts +89 -10
- package/dist/ui/index.mjs +102 -17
- package/dist/ui/index.mjs.map +1 -1
- package/dist/ui/jaaq-ui-bundled.min.js +2 -2
- package/dist/ui/jaaq-ui-bundled.min.js.map +1 -1
- package/dist/ui/jaaq-ui.min.js +2 -2
- package/dist/ui/jaaq-ui.min.js.map +1 -1
- package/dist/ui/react/index.cjs +78 -18
- package/dist/ui/react/index.cjs.map +1 -1
- package/dist/ui/react/index.d.ts +84 -7
- package/dist/ui/react/index.mjs +78 -18
- package/dist/ui/react/index.mjs.map +1 -1
- package/dist/ui/react/jaaq-ui-react.min.js +2 -2
- package/dist/ui/react/jaaq-ui-react.min.js.map +1 -1
- package/dist/ui/vanilla/index.cjs +102 -17
- package/dist/ui/vanilla/index.cjs.map +1 -1
- package/dist/ui/vanilla/index.d.ts +89 -10
- package/dist/ui/vanilla/index.mjs +102 -17
- package/dist/ui/vanilla/index.mjs.map +1 -1
- package/dist/ui/vanilla/jaaq-vanilla-bundled.min.js +2 -2
- package/dist/ui/vanilla/jaaq-vanilla-bundled.min.js.map +1 -1
- package/dist/ui/vanilla/jaaq-vanilla.min.js +2 -2
- package/dist/ui/vanilla/jaaq-vanilla.min.js.map +1 -1
- package/dist/ui/webcomponents/index.cjs +74 -14
- package/dist/ui/webcomponents/index.cjs.map +1 -1
- package/dist/ui/webcomponents/index.d.ts +86 -9
- package/dist/ui/webcomponents/index.mjs +74 -14
- package/dist/ui/webcomponents/index.mjs.map +1 -1
- package/dist/ui/webcomponents/jaaq-webcomponents-bundled.min.js +2 -2
- package/dist/ui/webcomponents/jaaq-webcomponents-bundled.min.js.map +1 -1
- package/dist/ui/webcomponents/jaaq-webcomponents.min.js +2 -2
- package/dist/ui/webcomponents/jaaq-webcomponents.min.js.map +1 -1
- package/package.json +38 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jaaq-ui.min.js","sources":["../../../src/core/httpClient.ts","../../../src/index.ts","../../../src/resources/videos.ts","../../../src/resources/collections.ts","../../../src/ui/shared/controls.ts","../../src/ui/shared/styles.css","../../src/ui/vanilla/styles.css","../../../src/ui/vanilla/VideoPlayer.ts","../../node_modules/.pnpm/@splidejs+splide@4.1.4/node_modules/@splidejs/splide/dist/js/splide.esm.js","../../node_modules/.pnpm/@splidejs+splide@4.1.4/node_modules/@splidejs/splide/dist/css/splide.min.css","../../../src/ui/vanilla/autoInit.ts","../../src/ui/webcomponents/CollectionPlayer.css","../../../src/ui/webcomponents/CollectionPlayer.ts","../../../src/ui/webcomponents/VideoPlayer.ts","../../../src/ui/webcomponents/register.ts","../../../src/ui/vanilla/CollectionPlayer.ts"],"sourcesContent":["export type FetchLike = typeof globalThis.fetch;\ntype RequestOptions = Parameters<typeof globalThis.fetch>[1];\ntype FetchResponse = Awaited<ReturnType<FetchLike>>;\n\nexport interface HttpClientConfig {\n baseUrl: string;\n apiKey: string;\n clientId: string;\n fetch?: FetchLike;\n timeoutMs?: number;\n}\n\nexport interface HttpClient {\n get<T>(_path: string, _init?: RequestOptions): Promise<T>;\n post<T>(_path: string, _body?: unknown, _init?: RequestOptions): Promise<T>;\n put<T>(_path: string, _body?: unknown, _init?: RequestOptions): Promise<T>;\n patch<T>(_path: string, _body?: unknown, _init?: RequestOptions): Promise<T>;\n delete<T>(_path: string, _init?: RequestOptions): Promise<T>;\n}\n\nasync function parseJson<T>(res: FetchResponse): Promise<T> {\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`HTTP ${res.status}: ${text || res.statusText}`);\n }\n if (res.status === 204) return undefined as unknown as T;\n return res.json() as Promise<T>;\n}\n\nfunction joinUrl(baseUrl: string, clientId: string, path: string): string {\n // return path if it is an absolute URL\n if (/^https?:\\/\\//i.test(path)) return path;\n const base = baseUrl.replace(/\\/+$/, '');\n const relative = path.replace(/^\\/+/, '');\n return `${base}/b2b/v1/subscription/${encodeURIComponent(clientId)}${relative.startsWith('/') ? relative : `/${relative}`}`;\n}\n\nexport function createHttpClient(config: HttpClientConfig): HttpClient {\n const { baseUrl, apiKey, clientId, fetch: fetchImpl } = config;\n\n const f: FetchLike | undefined = fetchImpl ?? (globalThis.fetch as FetchLike | undefined);\n if (!f) {\n throw new Error('No fetch implementation found. Provide one in SDKConfig.fetch for Node or custom environments.');\n }\n\n const baseHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n };\n\n const fullUrl = (path: string) => joinUrl(baseUrl, clientId, path);\n\n const request = async <T>(method: string, path: string, init?: RequestOptions, body?: unknown) => {\n const reqInit: RequestOptions = {\n method,\n headers: {\n ...baseHeaders,\n ...(init?.headers as Record<string, string> | undefined),\n },\n ...init,\n };\n if (body !== undefined) reqInit.body = JSON.stringify(body);\n const res = await f(fullUrl(path), reqInit);\n return parseJson<T>(res);\n };\n\n return {\n get: <T>(path: string, init?: RequestOptions) => request<T>('GET', path, init),\n post: <T>(path: string, body?: unknown, init?: RequestOptions) => request<T>('POST', path, init, body),\n put: <T>(path: string, body?: unknown, init?: RequestOptions) => request<T>('PUT', path, init, body),\n patch: <T>(path: string, body?: unknown, init?: RequestOptions) => request<T>('PATCH', path, init, body),\n delete: <T>(path: string, init?: RequestOptions) => request<T>('DELETE', path, init),\n };\n}\n","import { createHttpClient, type HttpClient, type FetchLike } from '@core/httpClient';\nimport { createVideosResource, type VideosResource } from '@resources/videos';\nimport { createCollectionsResource, type CollectionsResource } from '@resources/collections';\n\n// Public type exports for consumers (barrel)\nexport * from '@src/types';\n\nexport const BASE_URL = process.env.JAAQ_API_URL || 'https://api.jaaq.app';\n\nexport interface SDKConfig {\n baseUrl?: string; // Pending to approve\n apiKey: string; // Provided by backend per client\n clientId: string; // Provided by each consuming company at init\n fetch?: FetchLike; // Optional fetch injection (Node/custom envs) // Pending to approve\n timeoutMs?: number;\n}\n\nexport class JaaqClient {\n public readonly videos: VideosResource;\n public readonly collections: CollectionsResource;\n\n // Keep constructor private to enforce controlled instantiation.\n private constructor(http: HttpClient) {\n this.videos = createVideosResource(http);\n this.collections = createCollectionsResource(http);\n }\n\n /**\n * Public \"friend\" constructor that remains inside the class boundary.\n * This method is callable from the module-level build function\n * without exposing `new JaaqClient(...)` to consumers.\n */\n static fromHttp(http: HttpClient): JaaqClient {\n return new JaaqClient(http);\n }\n\n /**\n * OO-friendly static initializer.\n * Delegates to the single source of truth: `buildClient`.\n */\n static init(config: SDKConfig): JaaqClient {\n return buildClient(config);\n }\n}\n\n/**\n * Canonical factory (idiomatic for JS/TS).\n * Delegates to the single source of truth: `buildClient`.\n */\nexport function createJaaqClient(config: SDKConfig): JaaqClient {\n return buildClient(config);\n}\n\n/**\n * Single source of truth for constructing the client.\n * Both `createJaaqClient` and `JaaqClient.init` call this function.\n * The constructor stays private; instantiation is funneled via `JaaqClient.fromHttp`.\n */\nfunction buildClient(config: SDKConfig): JaaqClient {\n const { baseUrl = BASE_URL, apiKey, clientId, fetch: fetchImpl } = config;\n\n const http = createHttpClient({\n baseUrl,\n apiKey,\n clientId,\n fetch: fetchImpl ?? (globalThis.fetch as FetchLike | undefined),\n });\n\n return JaaqClient.fromHttp(http);\n}\n","import type { HttpClient } from '@core/httpClient';\nimport type { VideoDTO } from '@src/types/videos';\n\nexport type VideosResource = {\n getById(_id: string): Promise<VideoDTO>;\n};\n\nexport function createVideosResource(http: HttpClient): VideosResource {\n return {\n async getById(id: string) {\n const path = `/videos/${encodeURIComponent(id)}`;\n const response = await http.get<{ video: VideoDTO }>(path);\n return response.video;\n },\n };\n}\n","import type { HttpClient } from '@core/httpClient';\nimport type { CollectionDTO } from '@src/types/collection';\n\nexport type CollectionsResource = {\n list(): Promise<CollectionDTO[]>;\n getById(_id: string): Promise<CollectionDTO>;\n};\n\nexport function createCollectionsResource(http: HttpClient): CollectionsResource {\n return {\n async list() {\n const path = '/collections';\n const response = await http.get<{ collections: CollectionDTO[] }>(path);\n return response.collections;\n },\n async getById(id: string) {\n const path = `/collections/${encodeURIComponent(id)}`;\n const response = await http.get<{ collection: CollectionDTO }>(path);\n return response.collection;\n },\n };\n}\n","/**\n * Formats a time value in seconds to a human-readable string (M:SS format)\n * @param seconds - Time in seconds to format\n * @returns Formatted time string in M:SS format, or \"0:00\" if invalid\n * @example\n * formatTime(65) // \"1:05\"\n * formatTime(0) // \"0:00\"\n * formatTime(125) // \"2:05\"\n */\nexport function formatTime(seconds: number): string {\n if (isNaN(seconds) || !isFinite(seconds)) {\n return '0:00';\n }\n\n const minutes = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${minutes}:${secs.toString().padStart(2, '0')}`;\n}\n\n/**\n * Checks if a video URL is an HLS (HTTP Live Streaming) source\n * @param url - Video URL to check\n * @returns True if the URL contains .m3u8 extension, false otherwise\n */\nexport function isHLSSource(url: string): boolean {\n return url.includes('.m3u8');\n}\n\n/**\n * Toggles fullscreen mode for the given element\n * If not in fullscreen, requests fullscreen for the element\n * If already in fullscreen, exits fullscreen mode\n * @param element - HTML element to toggle fullscreen for\n * @returns Promise that resolves when fullscreen state changes\n */\nexport function toggleFullscreen(element: HTMLElement): Promise<void> {\n if (!document.fullscreenElement) {\n return element.requestFullscreen();\n } else {\n return document.exitFullscreen();\n }\n}\n\n/**\n * Clamps a numeric value between a minimum and maximum value\n * @param value - Value to clamp\n * @param min - Minimum allowed value\n * @param max - Maximum allowed value\n * @returns The clamped value\n * @example\n * clamp(5, 0, 10) // 5\n * clamp(-5, 0, 10) // 0\n * clamp(15, 0, 10) // 10\n */\nexport function clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n",".jaaq-video-player {\n position: relative;\n width: 100%;\n max-width: none;\n margin: 0;\n background: #000;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n aspect-ratio: 9 / 16;\n}\n\n.jaaq-video-player video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: block;\n background: #000;\n object-fit: cover;\n}\n\n.jaaq-video-player.fullscreen {\n max-width: 100%;\n border-radius: 0;\n aspect-ratio: auto;\n}\n\n.jaaq-controls {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n background: linear-gradient(to top, rgba(0, 0, 0, 0.8), transparent);\n padding: 40px 16px 16px;\n opacity: 1;\n z-index: 5;\n}\n\n.jaaq-progress-bar {\n width: 100%;\n flex: 1 1 0;\n min-width: 80px;\n height: 4px;\n background: rgba(255, 255, 255, 0.3);\n border-radius: 2px;\n cursor: pointer;\n position: relative;\n}\n\n.jaaq-progress-filled {\n height: 100%;\n background: #007bff;\n border-radius: 2px;\n width: 0%;\n transition: width 0.1s linear;\n}\n\n.jaaq-progress-bar:hover .jaaq-progress-filled {\n background: #0056b3;\n}\n\n.jaaq-controls-bottom {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n color: white;\n}\n\n.jaaq-control-btn {\n background: transparent;\n border: none;\n color: white;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n font-size: 20px;\n line-height: 1;\n}\n\n.jaaq-control-btn:hover {\n transform: scale(1.1);\n}\n\n.jaaq-control-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.jaaq-loading {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 50px;\n height: 50px;\n border: 4px solid rgba(255, 255, 255, 0.3);\n border-top-color: #007bff;\n border-radius: 50%;\n animation: jaaq-spin 1s linear infinite;\n}\n\n@keyframes jaaq-spin {\n to {\n transform: translate(-50%, -50%) rotate(360deg);\n }\n}\n\n.jaaq-error {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: rgba(220, 53, 69, 0.9);\n color: white;\n padding: 16px 24px;\n border-radius: 8px;\n max-width: 80%;\n text-align: center;\n font-size: 14px;\n}\n\n.jaaq-video-info {\n padding: 16px;\n background: #f8f9fa;\n border-radius: 0 0 12px 12px;\n margin-top: -12px;\n}\n\n.jaaq-video-info h3 {\n margin: 0 0 8px 0;\n color: #333;\n font-size: 18px;\n font-weight: 600;\n}\n\n.jaaq-video-info p {\n margin: 4px 0;\n color: #666;\n font-size: 14px;\n}\n\n.jaaq-video-info strong {\n color: #333;\n}\n\n.jaaq-logo {\n position: absolute;\n top: 20px;\n left: 22px;\n color: white;\n font-size: 16px;\n font-weight: 600;\n z-index: 10;\n font-family:\n 'Archivo',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n sans-serif;\n letter-spacing: 0.5px;\n pointer-events: none;\n}\n\n.jaaq-center-play-btn {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 84px;\n height: 84px;\n background: transparent;\n border: none;\n cursor: pointer;\n z-index: 15;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n padding: 0;\n}\n\n.jaaq-center-play-btn:hover {\n transform: translate(-50%, -50%) scale(1.1);\n}\n\n.jaaq-center-play-btn svg {\n width: 100%;\n height: 100%;\n filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.3));\n}\n\n.jaaq-video-player.is-playing .jaaq-center-play-btn {\n display: none;\n}\n\n.jaaq-gradient-overlay {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n background: linear-gradient(180deg, transparent 0%, #0f0f0f 100%);\n padding: 80px 22px 85px;\n pointer-events: none;\n z-index: 5;\n}\n\n.jaaq-caption-display {\n font-family:\n 'Archivo',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n sans-serif;\n font-weight: 400;\n font-size: 16px;\n line-height: 20px;\n color: white;\n background: rgba(0, 0, 0, 0.8);\n padding: 8px 16px;\n margin-bottom: 12px;\n border-radius: 4px;\n text-align: center;\n max-width: 90%;\n margin-left: auto;\n margin-right: auto;\n}\n\n.jaaq-video-title {\n font-family:\n 'Archivo',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n sans-serif;\n font-weight: 600;\n font-size: 18.695px;\n line-height: 21.5px;\n color: white;\n margin-bottom: 8px;\n letter-spacing: 0.37px;\n}\n\n.jaaq-video-author {\n font-family:\n 'Archivo',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n sans-serif;\n font-weight: 500;\n font-size: 14.021px;\n line-height: 16.825px;\n color: white;\n opacity: 0.7;\n margin-bottom: 8px;\n letter-spacing: -0.14px;\n}\n\n.jaaq-video-description {\n font-family:\n 'Archivo',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n sans-serif;\n font-weight: 400;\n font-size: 11px;\n line-height: 16px;\n color: #aaa8aa;\n letter-spacing: -0.11px;\n}\n\n.jaaq-description-text {\n color: #aaa8aa;\n}\n\n.jaaq-read-more {\n color: white;\n cursor: pointer;\n pointer-events: auto;\n}\n\n.jaaq-read-more:hover {\n text-decoration: underline;\n}\n\n.jaaq-progress-bar {\n background: rgba(255, 255, 255, 0.2);\n}\n\n.jaaq-progress-filled {\n background: white;\n}\n\n.jaaq-captions-btn {\n font-size: 14px;\n font-weight: 600;\n border: 1.5px solid white;\n border-radius: 3px;\n padding: 4px 6px;\n line-height: 1;\n}\n\n.jaaq-captions-btn.active {\n background: white;\n color: #000;\n}\n",".jaaq-vanilla-player {\n user-select: none;\n}\n\n.jaaq-vanilla-player video {\n outline: none;\n}\n\n.jaaq-collection-player {\n width: 100%;\n max-width: 1400px;\n margin: 0 auto;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n}\n\n.jaaq-collection-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 400px;\n}\n\n.jaaq-collection-spinner {\n width: 50px;\n height: 50px;\n border: 4px solid rgba(0, 123, 255, 0.3);\n border-top-color: #007bff;\n border-radius: 50%;\n animation: jaaq-collection-spin 1s linear infinite;\n}\n\n@keyframes jaaq-collection-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n.jaaq-collection-error {\n background: rgba(220, 53, 69, 0.9);\n color: white;\n padding: 16px 24px;\n border-radius: 8px;\n text-align: center;\n font-size: 14px;\n margin: 20px;\n}\n\n.jaaq-collection-carousel .splide__track {\n padding: 40px 0;\n}\n\n.jaaq-collection-carousel .splide__slide {\n opacity: 0.7;\n transition: all 0.3s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.jaaq-collection-carousel .splide__slide.is-active {\n opacity: 1;\n}\n\n.jaaq-collection-carousel .splide__slide jaaq-video-player {\n width: 100%;\n max-width: 600px;\n transition: all 0.3s ease;\n}\n\n.jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 800px;\n}\n\n.jaaq-collection-carousel .splide__arrow {\n background: rgba(0, 0, 0, 0.5);\n border: none;\n width: 48px;\n height: 48px;\n border-radius: 50%;\n color: white;\n cursor: pointer;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n}\n\n.jaaq-collection-carousel .splide__arrow:hover {\n background: rgba(0, 0, 0, 0.8);\n transform: scale(1.1);\n}\n\n.jaaq-collection-carousel .splide__arrow:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.jaaq-collection-carousel .splide__arrow svg {\n fill: white;\n width: 20px;\n height: 20px;\n}\n\n.jaaq-collection-carousel .splide__pagination {\n bottom: -30px;\n}\n\n.jaaq-collection-carousel .splide__pagination__page {\n background: #ccc;\n border: none;\n width: 10px;\n height: 10px;\n margin: 0 4px;\n border-radius: 50%;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.jaaq-collection-carousel .splide__pagination__page.is-active {\n background: #007bff;\n transform: scale(1.3);\n}\n\n@media (max-width: 1024px) {\n .jaaq-collection-carousel .splide__slide jaaq-video-player {\n max-width: 500px;\n }\n\n .jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 650px;\n }\n}\n\n@media (max-width: 768px) {\n .jaaq-collection-carousel .splide__track {\n padding: 20px 0;\n }\n\n .jaaq-collection-carousel .splide__slide jaaq-video-player {\n max-width: 400px;\n }\n\n .jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 500px;\n }\n\n .jaaq-collection-carousel .splide__arrow {\n width: 40px;\n height: 40px;\n }\n}\n\n@media (max-width: 480px) {\n .jaaq-collection-carousel .splide__slide jaaq-video-player {\n max-width: 100%;\n }\n\n .jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 100%;\n }\n}\n","import Hls from 'hls.js';\nimport { createJaaqClient, type JaaqClient } from '@src/index';\nimport { isHLSSource, toggleFullscreen, clamp } from '@ui/shared/controls';\nimport type { PlayerConfig, PlayerEventMap, PlayerEventCallback, PlayerState } from '@ui/shared/types';\nimport type { VideoDTO } from '@src/types';\nimport '@ui/shared/styles.css';\nimport './styles.css';\n\n/**\n * Vanilla JavaScript video player with custom controls, HLS support, and event system\n * @example\n * const player = new JaaqVideoPlayer('#container', {\n * videoId: 'video-id',\n * apiKey: 'api-key',\n * clientId: 'client-id',\n * autoplay: false\n * });\n *\n * player.on('play', () => console.log('Playing'));\n * player.on('pause', () => console.log('Paused'));\n */\ntype CaptionCue = {\n start: number;\n end: number;\n text: string;\n};\n\nexport class JaaqVideoPlayer {\n private container: HTMLElement;\n private config: PlayerConfig;\n private client: JaaqClient | null = null;\n private hls: Hls | null = null;\n private videoElement: HTMLVideoElement | null = null;\n private state: PlayerState;\n private listeners: Map<keyof PlayerEventMap, Set<PlayerEventCallback<unknown>>> = new Map();\n private captionCues: CaptionCue[] = [];\n private elements: {\n player?: HTMLDivElement;\n controls?: HTMLDivElement;\n progressBar?: HTMLDivElement;\n progressFilled?: HTMLDivElement;\n playPauseBtn?: HTMLButtonElement;\n volumeBtn?: HTMLButtonElement;\n fullscreenBtn?: HTMLButtonElement;\n captionsBtn?: HTMLButtonElement;\n loading?: HTMLDivElement;\n error?: HTMLDivElement;\n logo?: HTMLDivElement;\n centerPlayBtn?: HTMLButtonElement;\n gradientOverlay?: HTMLDivElement;\n captionDisplay?: HTMLDivElement;\n videoTitle?: HTMLDivElement;\n videoAuthor?: HTMLDivElement;\n videoDescription?: HTMLDivElement;\n } = {};\n\n /**\n * Creates a new video player instance\n * @param container - HTML element or CSS selector to render the player into\n * @param config - Player configuration options\n * @throws {Error} If container element is not found or if authentication credentials are missing\n */\n constructor(container: HTMLElement | string, config: PlayerConfig) {\n this.container = typeof container === 'string' ? document.querySelector(container)! : container;\n\n if (!this.container) {\n throw new Error('Container element not found');\n }\n\n this.config = config;\n this.state = {\n isPlaying: false,\n currentTime: 0,\n duration: 0,\n volume: 1,\n isMuted: config.startMuted === true,\n isFullscreen: false,\n isLoading: true,\n error: null,\n videoData: null,\n captionsEnabled: false,\n };\n\n if (config.client) {\n this.client = config.client;\n } else if (config.apiKey && config.clientId) {\n this.client = createJaaqClient({\n apiKey: config.apiKey,\n clientId: config.clientId,\n baseUrl: config.baseUrl,\n });\n } else {\n throw new Error('Please provide either a client instance or apiKey and clientId');\n }\n\n this.init();\n }\n\n private async init(): Promise<void> {\n this.createDOM();\n await this.loadVideo();\n this.attachEventListeners();\n if (this.config.startMuted === true) {\n this.updateVolumeUI();\n }\n }\n\n private createDOM(): void {\n this.container.innerHTML = '';\n\n const wrapper = document.createElement('div');\n wrapper.style.width = this.config.width || '100%';\n wrapper.style.height = this.config.height || 'auto';\n\n const player = document.createElement('div');\n player.className = `jaaq-video-player jaaq-vanilla-player ${this.config.className || ''}`;\n this.elements.player = player;\n\n const video = document.createElement('video');\n this.videoElement = video;\n if (this.config.startMuted === true) {\n video.muted = true;\n video.setAttribute('muted', '');\n }\n player.appendChild(video);\n\n const logo = document.createElement('div');\n logo.className = 'jaaq-logo';\n logo.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"15\" viewBox=\"0 0 50 15\" fill=\"none\">\n <path d=\"M48.0329 10.7826C48.7578 9.6622 49.1402 8.37108 49.1402 7.02322C49.1402 3.19784 46.0283 0.0859375 42.2029 0.0859375C38.3775 0.0859375 35.2656 3.19784 35.2656 7.02322C35.2656 10.8486 38.3753 13.9578 42.1985 13.9605C42.1991 13.9605 42.2002 13.9605 42.2007 13.9605H42.2029C43.8475 13.9605 45.4305 13.3687 46.6698 12.3285L49.9971 14.56V12.0999L48.0334 10.7826H48.0329ZM37.309 7.02322C37.309 4.32479 39.5045 2.12927 42.2035 2.12927C44.9024 2.12927 47.0974 4.32479 47.0974 7.02322C47.0974 7.96252 46.8345 8.862 46.3359 9.64475L43.9817 8.06561C43.4531 7.71378 42.8373 7.52778 42.2002 7.52778C40.4394 7.52778 39.0054 8.95036 38.9846 10.7062C37.9586 9.80839 37.3084 8.49053 37.3084 7.02322H37.309ZM42.2035 11.9172C42.2035 11.9172 42.2002 11.9172 42.1985 11.9172C41.5527 11.9161 41.0274 11.3903 41.0274 10.7439C41.0274 10.0975 41.5538 9.57056 42.2007 9.57056C42.4331 9.57056 42.6578 9.6382 42.8493 9.76584L44.8714 11.1224C44.0853 11.633 43.1586 11.9172 42.2029 11.9172H42.2035Z\" fill=\"white\"/>\n <path d=\"M31.0751 0.686201C30.9856 0.579834 30.8858 0.483286 30.7767 0.39983C30.4374 0.138004 30.0283 0 29.5946 0C29.161 0 28.7524 0.138549 28.4126 0.39983C28.2304 0.540561 28.0755 0.711838 27.9533 0.909844C27.8835 1.02276 27.8257 1.14003 27.7815 1.25785L23.1172 13.7317H25.4551L29.5946 2.66135L33.7342 13.7317H36.0721L31.4078 1.25785C31.3303 1.05003 31.218 0.858024 31.0745 0.686746L31.0751 0.686201Z\" fill=\"white\"/>\n <path d=\"M17.4969 0.686201C17.4075 0.579834 17.3076 0.483286 17.1986 0.39983C16.8593 0.138004 16.4502 0 16.0165 0C15.5829 0 15.1743 0.138549 14.8345 0.39983C14.6523 0.540561 14.4974 0.711838 14.3752 0.909844C14.3054 1.02276 14.2476 1.14003 14.2034 1.25785L9.53906 13.7317H11.8769L16.0165 2.66135L20.1561 13.7317H22.494L17.8302 1.25731C17.7527 1.04948 17.6404 0.857478 17.4969 0.686201Z\" fill=\"white\"/>\n <path d=\"M9.86046 0.511825V0.371094H7.82204V9.02333C7.82204 10.6248 6.51891 11.928 4.91741 11.928C3.47028 11.928 2.23261 10.849 2.03897 9.41771L2.01988 9.27807L1.88024 9.29716L0.13964 9.5328L0 9.5519L0.0190914 9.69154C0.348555 12.1292 2.45462 13.9669 4.91741 13.9669C7.64313 13.9669 9.86046 11.7496 9.86046 9.02388V0.511825Z\" fill=\"white\"/>\n </svg>\n `;\n this.elements.logo = logo;\n player.appendChild(logo);\n\n const centerPlayBtn = document.createElement('button');\n centerPlayBtn.className = 'jaaq-center-play-btn';\n centerPlayBtn.innerHTML = `\n <svg viewBox=\"0 0 84 84\" fill=\"none\">\n <circle cx=\"42\" cy=\"42\" r=\"42\" fill=\"white\" fill-opacity=\"0.9\"/>\n <path d=\"M33 28L56 42L33 56V28Z\" fill=\"#000\"/>\n </svg>\n `;\n centerPlayBtn.setAttribute('aria-label', 'Play video');\n this.elements.centerPlayBtn = centerPlayBtn;\n player.appendChild(centerPlayBtn);\n\n const gradientOverlay = document.createElement('div');\n gradientOverlay.className = 'jaaq-gradient-overlay';\n this.elements.gradientOverlay = gradientOverlay;\n\n const captionDisplay = document.createElement('div');\n captionDisplay.className = 'jaaq-caption-display';\n captionDisplay.style.display = 'none';\n this.elements.captionDisplay = captionDisplay;\n gradientOverlay.appendChild(captionDisplay);\n\n const videoTitle = document.createElement('div');\n videoTitle.className = 'jaaq-video-title';\n this.elements.videoTitle = videoTitle;\n gradientOverlay.appendChild(videoTitle);\n\n const videoAuthor = document.createElement('div');\n videoAuthor.className = 'jaaq-video-author';\n this.elements.videoAuthor = videoAuthor;\n gradientOverlay.appendChild(videoAuthor);\n\n const videoDescription = document.createElement('div');\n videoDescription.className = 'jaaq-video-description';\n this.elements.videoDescription = videoDescription;\n gradientOverlay.appendChild(videoDescription);\n\n player.appendChild(gradientOverlay);\n\n const loading = document.createElement('div');\n loading.className = 'jaaq-loading';\n this.elements.loading = loading;\n player.appendChild(loading);\n\n const error = document.createElement('div');\n error.className = 'jaaq-error';\n error.style.display = 'none';\n this.elements.error = error;\n player.appendChild(error);\n\n const controls = document.createElement('div');\n controls.className = 'jaaq-controls';\n this.elements.controls = controls;\n\n const controlsBottom = document.createElement('div');\n controlsBottom.className = 'jaaq-controls-bottom';\n\n const playPauseBtn = document.createElement('button');\n playPauseBtn.className = 'jaaq-control-btn';\n playPauseBtn.textContent = '▶';\n playPauseBtn.setAttribute('aria-label', 'Play');\n this.elements.playPauseBtn = playPauseBtn;\n controlsBottom.appendChild(playPauseBtn);\n\n const volumeBtn = document.createElement('button');\n volumeBtn.className = 'jaaq-control-btn';\n volumeBtn.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"20\" viewBox=\"0 0 22 20\" fill=\"none\">\n <path d=\"M11.2168 19.9287L4.20801 13.7031H0V6.22559H4.20898L11.2168 0V19.9287ZM14.0215 0.150391C16.2405 0.150468 18.1409 1.39074 19.4385 3.17676C20.7365 4.9634 21.499 7.36811 21.499 9.96484C21.499 12.5613 20.7363 14.9654 19.4385 16.752C18.1409 18.538 16.2405 19.7792 14.0215 19.7793V17.1025C15.2032 17.1025 16.3824 16.4464 17.3135 15.165C18.2442 13.8839 18.8593 12.0493 18.8594 9.96484C18.8594 7.88034 18.2442 6.04581 17.3135 4.76465C16.3824 3.4832 15.2033 2.82723 14.0215 2.82715V0.150391ZM14.0215 5.75879C15.5701 5.75896 16.8252 7.64189 16.8252 9.96484C16.8251 12.2877 15.57 14.1707 14.0215 14.1709V5.75879Z\" fill=\"white\"/>\n </svg>\n `;\n volumeBtn.setAttribute('aria-label', 'Mute');\n this.elements.volumeBtn = volumeBtn;\n controlsBottom.appendChild(volumeBtn);\n\n const progressBar = document.createElement('div');\n progressBar.className = 'jaaq-progress-bar';\n this.elements.progressBar = progressBar;\n\n const progressFilled = document.createElement('div');\n progressFilled.className = 'jaaq-progress-filled';\n this.elements.progressFilled = progressFilled;\n progressBar.appendChild(progressFilled);\n controlsBottom.appendChild(progressBar);\n\n const captionsBtn = document.createElement('button');\n captionsBtn.className = 'jaaq-control-btn jaaq-captions-btn';\n captionsBtn.innerHTML = 'CC';\n captionsBtn.setAttribute('aria-label', 'Captions');\n this.elements.captionsBtn = captionsBtn;\n controlsBottom.appendChild(captionsBtn);\n\n const fullscreenBtn = document.createElement('button');\n fullscreenBtn.className = 'jaaq-control-btn';\n fullscreenBtn.textContent = '⛶';\n fullscreenBtn.setAttribute('aria-label', 'Fullscreen');\n this.elements.fullscreenBtn = fullscreenBtn;\n controlsBottom.appendChild(fullscreenBtn);\n\n controls.appendChild(controlsBottom);\n player.appendChild(controls);\n\n wrapper.appendChild(player);\n this.container.appendChild(wrapper);\n\n this.updateControlsVisibility();\n }\n\n private updateControlsVisibility(): void {\n const showControls = this.config.controls !== false;\n if (this.elements.controls) {\n this.elements.controls.style.display = showControls ? '' : 'none';\n }\n }\n\n private async loadVideo(): Promise<void> {\n if (!this.client || !this.videoElement) return;\n\n try {\n this.setState({ isLoading: true, error: null });\n\n const video = await this.client.videos.getById(this.config.videoId);\n this.setState({ videoData: video });\n\n if (video.subtitle) {\n this.captionCues = this.parseWebVTT(video.subtitle);\n }\n\n this.updateOverlayContent(video);\n this.emit('loaded', video);\n\n const videoUrl = video.videoUrl;\n\n if (isHLSSource(videoUrl)) {\n if (Hls.isSupported()) {\n if (this.hls) {\n this.hls.destroy();\n }\n\n const hls = new Hls({\n enableWorker: true,\n lowLatencyMode: true,\n });\n\n if (this.config.startMuted === true && this.videoElement) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n }\n\n hls.loadSource(videoUrl);\n hls.attachMedia(this.videoElement);\n\n if (this.config.startMuted === true && this.videoElement) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n }\n\n hls.on(Hls.Events.MANIFEST_PARSED, () => {\n this.setState({ isLoading: false });\n if (this.elements.loading) {\n this.elements.loading.style.display = 'none';\n }\n if (this.config.startMuted === true && this.videoElement) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n this.updateVolumeUI();\n }\n if (this.config.autoplay) {\n if (this.config.startMuted === true && this.videoElement) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n this.updateVolumeUI();\n }\n this.play();\n }\n });\n\n hls.on(Hls.Events.ERROR, (_event: unknown, data: { fatal?: boolean; type?: string; details?: string }) => {\n if (data.fatal) {\n const errorMsg = `HLS Error: ${data.type} - ${data.details}`;\n this.showError(errorMsg);\n this.emit('error', new Error(errorMsg));\n }\n });\n\n this.hls = hls;\n } else if (this.videoElement.canPlayType('application/vnd.apple.mpegurl')) {\n this.videoElement.src = videoUrl;\n if (this.config.startMuted === true) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n this.updateVolumeUI();\n }\n this.setState({ isLoading: false });\n if (this.elements.loading) {\n this.elements.loading.style.display = 'none';\n }\n if (this.config.autoplay) {\n if (this.config.startMuted === true && this.videoElement) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n this.updateVolumeUI();\n }\n this.play();\n }\n } else {\n throw new Error('HLS is not supported in this browser');\n }\n } else {\n this.videoElement.src = videoUrl;\n if (this.config.startMuted === true) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n this.updateVolumeUI();\n }\n this.setState({ isLoading: false });\n if (this.elements.loading) {\n this.elements.loading.style.display = 'none';\n }\n if (this.config.autoplay) {\n if (this.config.startMuted === true && this.videoElement) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n this.updateVolumeUI();\n }\n this.play();\n }\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : 'Failed to load video';\n this.showError(errorMsg);\n this.setState({ isLoading: false });\n this.emit('error', err instanceof Error ? err : new Error(errorMsg));\n }\n }\n\n private parseWebVTT(webvtt: string): CaptionCue[] {\n const cues: CaptionCue[] = [];\n const lines = webvtt.split('\\n');\n\n let i = 0;\n while (i < lines.length) {\n const line = lines[i].trim();\n\n if (line.includes('-->')) {\n const [startTime, endTime] = line.split('-->').map((t) => t.trim());\n\n const parseTimestamp = (timestamp: string): number => {\n const parts = timestamp.split(':');\n if (parts.length === 3) {\n const hours = parseFloat(parts[0]);\n const minutes = parseFloat(parts[1]);\n const seconds = parseFloat(parts[2]);\n return hours * 3600 + minutes * 60 + seconds;\n } else if (parts.length === 2) {\n const minutes = parseFloat(parts[0]);\n const seconds = parseFloat(parts[1]);\n return minutes * 60 + seconds;\n }\n return 0;\n };\n\n const start = parseTimestamp(startTime);\n const end = parseTimestamp(endTime);\n\n i++;\n const textLines: string[] = [];\n while (i < lines.length && lines[i].trim() !== '') {\n textLines.push(lines[i].trim());\n i++;\n }\n\n if (textLines.length > 0) {\n cues.push({\n start,\n end,\n text: textLines.join(' '),\n });\n }\n }\n\n i++;\n }\n\n return cues;\n }\n\n private updateOverlayContent(video: VideoDTO): void {\n const showLogo = this.config.showLogo !== false;\n const showTitle = this.config.showTitle !== false;\n const showAuthor = this.config.showAuthor !== false;\n const showDescription = this.config.showDescription !== false;\n const showCaptions = this.config.showCaptions !== false;\n\n if (this.elements.logo) {\n this.elements.logo.style.display = showLogo ? 'block' : 'none';\n }\n\n if (this.elements.videoTitle) {\n const question = video.question || '';\n const creator = video.creator || '';\n const titleText = creator ? `${question} - ${creator}` : question;\n this.elements.videoTitle.textContent = titleText;\n this.elements.videoTitle.style.display = showTitle && question ? 'block' : 'none';\n }\n\n if (this.elements.videoAuthor) {\n const authorData = (video as any).author || (video as any).creator || (video as any).userName || '';\n this.elements.videoAuthor.textContent = authorData;\n this.elements.videoAuthor.style.display = showAuthor && authorData ? 'block' : 'none';\n }\n\n if (this.elements.videoDescription) {\n const descriptionText = video.creatorBiography || video.description || '';\n if (descriptionText) {\n const maxLength = 150;\n const truncated = descriptionText.length > maxLength ? descriptionText.substring(0, maxLength) + '...' : descriptionText;\n this.elements.videoDescription.innerHTML = `\n <span class=\"jaaq-description-text\">${truncated}</span>\n ${descriptionText.length > maxLength ? '<span class=\"jaaq-read-more\"> Read more</span>' : ''}\n `;\n }\n this.elements.videoDescription.style.display = showDescription && descriptionText ? 'block' : 'none';\n }\n\n if (this.elements.captionsBtn) {\n this.elements.captionsBtn.style.display = showCaptions ? 'flex' : 'none';\n }\n }\n\n private attachEventListeners(): void {\n if (!this.videoElement) return;\n\n this.videoElement.addEventListener('play', () => {\n this.setState({ isPlaying: true });\n this.updatePlayPauseButton();\n if (this.elements.centerPlayBtn) {\n this.elements.centerPlayBtn.style.display = 'none';\n }\n this.emit('play', undefined);\n });\n\n this.videoElement.addEventListener('pause', () => {\n this.setState({ isPlaying: false });\n this.updatePlayPauseButton();\n if (this.elements.centerPlayBtn) {\n this.elements.centerPlayBtn.style.display = 'flex';\n }\n this.emit('pause', undefined);\n });\n\n this.videoElement.addEventListener('timeupdate', () => {\n this.setState({ currentTime: this.videoElement!.currentTime });\n this.updateProgress();\n this.updateCaptions();\n this.emit('timeupdate', this.videoElement!.currentTime);\n });\n\n this.videoElement.addEventListener('durationchange', () => {\n this.setState({ duration: this.videoElement!.duration });\n });\n\n this.videoElement.addEventListener('volumechange', () => {\n this.setState({\n volume: this.videoElement!.volume,\n isMuted: this.videoElement!.muted,\n });\n this.updateVolumeUI();\n this.emit('volumechange', this.videoElement!.volume);\n });\n\n this.videoElement.addEventListener('ended', () => {\n this.emit('ended', undefined);\n });\n\n this.elements.playPauseBtn?.addEventListener('click', () => {\n this.togglePlayPause();\n });\n\n this.elements.centerPlayBtn?.addEventListener('click', () => {\n this.play();\n if (this.elements.centerPlayBtn) {\n this.elements.centerPlayBtn.style.display = 'none';\n }\n });\n\n this.elements.progressBar?.addEventListener('click', (e) => {\n this.handleSeek(e);\n });\n\n this.elements.volumeBtn?.addEventListener('click', () => {\n this.toggleMute();\n });\n\n this.elements.captionsBtn?.addEventListener('click', () => {\n this.toggleCaptions();\n });\n\n this.elements.fullscreenBtn?.addEventListener('click', () => {\n this.toggleFullscreen();\n });\n\n document.addEventListener('fullscreenchange', () => {\n const isFullscreen = !!document.fullscreenElement;\n this.setState({ isFullscreen });\n this.elements.player?.classList.toggle('fullscreen', isFullscreen);\n this.emit('fullscreenchange', isFullscreen);\n });\n\n this.elements.player?.addEventListener('mousemove', () => {\n this.elements.player?.classList.remove('is-paused');\n });\n\n this.videoElement.addEventListener('pause', () => {\n this.elements.player?.classList.add('is-paused');\n });\n\n this.videoElement.addEventListener('play', () => {\n this.elements.player?.classList.remove('is-paused');\n });\n }\n\n private setState(newState: Partial<PlayerState>): void {\n this.state = { ...this.state, ...newState };\n }\n\n private updatePlayPauseButton(): void {\n if (this.elements.playPauseBtn) {\n this.elements.playPauseBtn.textContent = this.state.isPlaying ? '⏸' : '▶';\n this.elements.playPauseBtn.setAttribute('aria-label', this.state.isPlaying ? 'Pause' : 'Play');\n }\n }\n\n private updateProgress(): void {\n if (this.elements.progressFilled && this.state.duration > 0) {\n const progress = (this.state.currentTime / this.state.duration) * 100;\n this.elements.progressFilled.style.width = `${progress}%`;\n }\n }\n\n private updateVolumeUI(): void {\n if (this.elements.volumeBtn) {\n const { isMuted, volume } = this.state;\n\n if (isMuted || volume === 0) {\n this.elements.volumeBtn.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"20\" viewBox=\"0 0 22 20\" fill=\"none\">\n <path d=\"M11.2168 19.9287L4.20801 13.7031H0V6.22559H4.20898L11.2168 0V19.9287Z\" fill=\"white\"/>\n </svg>\n `;\n } else {\n this.elements.volumeBtn.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"20\" viewBox=\"0 0 22 20\" fill=\"none\">\n <path d=\"M11.2168 19.9287L4.20801 13.7031H0V6.22559H4.20898L11.2168 0V19.9287ZM14.0215 0.150391C16.2405 0.150468 18.1409 1.39074 19.4385 3.17676C20.7365 4.9634 21.499 7.36811 21.499 9.96484C21.499 12.5613 20.7363 14.9654 19.4385 16.752C18.1409 18.538 16.2405 19.7792 14.0215 19.7793V17.1025C15.2032 17.1025 16.3824 16.4464 17.3135 15.165C18.2442 13.8839 18.8593 12.0493 18.8594 9.96484C18.8594 7.88034 18.2442 6.04581 17.3135 4.76465C16.3824 3.4832 15.2033 2.82723 14.0215 2.82715V0.150391ZM14.0215 5.75879C15.5701 5.75896 16.8252 7.64189 16.8252 9.96484C16.8251 12.2877 15.57 14.1707 14.0215 14.1709V5.75879Z\" fill=\"white\"/>\n </svg>\n `;\n }\n }\n }\n\n private updateCaptions(): void {\n if (!this.elements.captionDisplay || !this.state.captionsEnabled) {\n if (this.elements.captionDisplay) {\n this.elements.captionDisplay.style.display = 'none';\n }\n return;\n }\n\n const currentTime = this.state.currentTime;\n const currentCue = this.captionCues.find((cue) => currentTime >= cue.start && currentTime <= cue.end);\n\n if (currentCue) {\n this.elements.captionDisplay.textContent = currentCue.text;\n this.elements.captionDisplay.style.display = 'block';\n } else {\n this.elements.captionDisplay.style.display = 'none';\n }\n }\n\n private handleSeek(e: MouseEvent): void {\n if (!this.videoElement || !this.state.duration || !this.elements.progressBar) return;\n\n const rect = this.elements.progressBar.getBoundingClientRect();\n const percent = (e.clientX - rect.left) / rect.width;\n this.videoElement.currentTime = this.state.duration * clamp(percent, 0, 1);\n }\n\n private showError(message: string): void {\n this.setState({ error: message, isLoading: false });\n if (this.elements.error) {\n this.elements.error.textContent = message;\n this.elements.error.style.display = 'block';\n }\n if (this.elements.loading) {\n this.elements.loading.style.display = 'none';\n }\n }\n\n private togglePlayPause(): void {\n if (this.state.isPlaying) {\n this.pause();\n } else {\n this.play();\n }\n }\n\n private toggleCaptions(): void {\n this.setState({ captionsEnabled: !this.state.captionsEnabled });\n this.updateCaptionsButton();\n this.updateCaptions();\n }\n\n private updateCaptionsButton(): void {\n if (this.elements.captionsBtn) {\n if (this.state.captionsEnabled) {\n this.elements.captionsBtn.classList.add('active');\n } else {\n this.elements.captionsBtn.classList.remove('active');\n }\n }\n }\n\n private toggleFullscreen(): void {\n if (this.elements.player) {\n toggleFullscreen(this.elements.player);\n }\n }\n\n /**\n * Starts or resumes video playback\n */\n public play(): void {\n if (this.videoElement) {\n if (this.config.startMuted === true && !this.videoElement.muted) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n }\n this.videoElement.play();\n }\n }\n\n /**\n * Pauses video playback\n */\n public pause(): void {\n this.videoElement?.pause();\n }\n\n /**\n * Sets the playback volume\n * @param volume - Volume level between 0 (silent) and 1 (maximum)\n */\n public setVolume(volume: number): void {\n if (this.videoElement) {\n this.videoElement.volume = clamp(volume, 0, 1);\n this.videoElement.muted = volume === 0;\n }\n }\n\n /**\n * Toggles audio mute state\n */\n public toggleMute(): void {\n if (this.videoElement) {\n this.videoElement.muted = !this.videoElement.muted;\n }\n }\n\n /**\n * Seeks to a specific time in the video\n * @param time - Target time in seconds\n */\n public seek(time: number): void {\n if (this.videoElement) {\n this.videoElement.currentTime = clamp(time, 0, this.state.duration);\n }\n }\n\n public setFeatures(\n features: Partial<\n Pick<PlayerConfig, 'showLogo' | 'showTitle' | 'showAuthor' | 'showDescription' | 'showCaptions' | 'controls' | 'startMuted'>\n >,\n ): void {\n this.config = { ...this.config, ...features };\n\n if (features.controls !== undefined) {\n this.updateControlsVisibility();\n }\n\n if (features.startMuted !== undefined && this.videoElement) {\n this.videoElement.muted = features.startMuted === true;\n if (features.startMuted === true) {\n this.videoElement.setAttribute('muted', '');\n } else {\n this.videoElement.removeAttribute('muted');\n }\n this.setState({ isMuted: features.startMuted === true });\n this.updateVolumeUI();\n }\n\n if (this.state.videoData) {\n this.updateOverlayContent(this.state.videoData);\n } else {\n if (features.showLogo !== undefined && this.elements.logo) {\n this.elements.logo.style.display = features.showLogo ? 'block' : 'none';\n }\n if (features.showCaptions !== undefined && this.elements.captionsBtn) {\n this.elements.captionsBtn.style.display = features.showCaptions ? 'flex' : 'none';\n }\n }\n }\n\n /**\n * Returns a copy of the current player state\n * @returns Current player state object\n */\n public getState(): PlayerState {\n return { ...this.state };\n }\n\n /**\n * Registers an event listener for player events\n * @param event - Event name to listen for\n * @param callback - Function to call when event fires\n */\n public on<K extends keyof PlayerEventMap>(event: K, callback: PlayerEventCallback<PlayerEventMap[K]>): void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(callback as PlayerEventCallback<unknown>);\n }\n\n /**\n * Removes an event listener for player events\n * @param event - Event name to stop listening for\n * @param callback - Function to remove from listeners\n */\n public off<K extends keyof PlayerEventMap>(event: K, callback: PlayerEventCallback<PlayerEventMap[K]>): void {\n const callbacks = this.listeners.get(event);\n if (callbacks) {\n callbacks.delete(callback as PlayerEventCallback<unknown>);\n }\n }\n\n private emit<K extends keyof PlayerEventMap>(event: K, data: PlayerEventMap[K]): void {\n const callbacks = this.listeners.get(event);\n if (callbacks) {\n callbacks.forEach((callback) => callback(data));\n }\n }\n\n /**\n * Destroys the player instance and cleans up resources\n * Removes all event listeners, stops playback, and clears the DOM\n */\n public destroy(): void {\n if (this.hls) {\n this.hls.destroy();\n this.hls = null;\n }\n\n if (this.videoElement) {\n this.videoElement.pause();\n this.videoElement.src = '';\n this.videoElement = null;\n }\n\n this.listeners.clear();\n this.container.innerHTML = '';\n }\n}\n","function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/*!\n * Splide.js\n * Version : 4.1.4\n * License : MIT\n * Copyright: 2022 Naotoshi Fujita\n */\nvar MEDIA_PREFERS_REDUCED_MOTION = \"(prefers-reduced-motion: reduce)\";\nvar CREATED = 1;\nvar MOUNTED = 2;\nvar IDLE = 3;\nvar MOVING = 4;\nvar SCROLLING = 5;\nvar DRAGGING = 6;\nvar DESTROYED = 7;\nvar STATES = {\n CREATED: CREATED,\n MOUNTED: MOUNTED,\n IDLE: IDLE,\n MOVING: MOVING,\n SCROLLING: SCROLLING,\n DRAGGING: DRAGGING,\n DESTROYED: DESTROYED\n};\n\nfunction empty(array) {\n array.length = 0;\n}\n\nfunction slice(arrayLike, start, end) {\n return Array.prototype.slice.call(arrayLike, start, end);\n}\n\nfunction apply(func) {\n return func.bind.apply(func, [null].concat(slice(arguments, 1)));\n}\n\nvar nextTick = setTimeout;\n\nvar noop = function noop() {};\n\nfunction raf(func) {\n return requestAnimationFrame(func);\n}\n\nfunction typeOf(type, subject) {\n return typeof subject === type;\n}\n\nfunction isObject(subject) {\n return !isNull(subject) && typeOf(\"object\", subject);\n}\n\nvar isArray = Array.isArray;\nvar isFunction = apply(typeOf, \"function\");\nvar isString = apply(typeOf, \"string\");\nvar isUndefined = apply(typeOf, \"undefined\");\n\nfunction isNull(subject) {\n return subject === null;\n}\n\nfunction isHTMLElement(subject) {\n try {\n return subject instanceof (subject.ownerDocument.defaultView || window).HTMLElement;\n } catch (e) {\n return false;\n }\n}\n\nfunction toArray(value) {\n return isArray(value) ? value : [value];\n}\n\nfunction forEach(values, iteratee) {\n toArray(values).forEach(iteratee);\n}\n\nfunction includes(array, value) {\n return array.indexOf(value) > -1;\n}\n\nfunction push(array, items) {\n array.push.apply(array, toArray(items));\n return array;\n}\n\nfunction toggleClass(elm, classes, add) {\n if (elm) {\n forEach(classes, function (name) {\n if (name) {\n elm.classList[add ? \"add\" : \"remove\"](name);\n }\n });\n }\n}\n\nfunction addClass(elm, classes) {\n toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\n}\n\nfunction append(parent, children) {\n forEach(children, parent.appendChild.bind(parent));\n}\n\nfunction before(nodes, ref) {\n forEach(nodes, function (node) {\n var parent = (ref || node).parentNode;\n\n if (parent) {\n parent.insertBefore(node, ref);\n }\n });\n}\n\nfunction matches(elm, selector) {\n return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\n}\n\nfunction children(parent, selector) {\n var children2 = parent ? slice(parent.children) : [];\n return selector ? children2.filter(function (child) {\n return matches(child, selector);\n }) : children2;\n}\n\nfunction child(parent, selector) {\n return selector ? children(parent, selector)[0] : parent.firstElementChild;\n}\n\nvar ownKeys = Object.keys;\n\nfunction forOwn(object, iteratee, right) {\n if (object) {\n (right ? ownKeys(object).reverse() : ownKeys(object)).forEach(function (key) {\n key !== \"__proto__\" && iteratee(object[key], key);\n });\n }\n\n return object;\n}\n\nfunction assign(object) {\n slice(arguments, 1).forEach(function (source) {\n forOwn(source, function (value, key) {\n object[key] = source[key];\n });\n });\n return object;\n}\n\nfunction merge(object) {\n slice(arguments, 1).forEach(function (source) {\n forOwn(source, function (value, key) {\n if (isArray(value)) {\n object[key] = value.slice();\n } else if (isObject(value)) {\n object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value);\n } else {\n object[key] = value;\n }\n });\n });\n return object;\n}\n\nfunction omit(object, keys) {\n forEach(keys || ownKeys(object), function (key) {\n delete object[key];\n });\n}\n\nfunction removeAttribute(elms, attrs) {\n forEach(elms, function (elm) {\n forEach(attrs, function (attr) {\n elm && elm.removeAttribute(attr);\n });\n });\n}\n\nfunction setAttribute(elms, attrs, value) {\n if (isObject(attrs)) {\n forOwn(attrs, function (value2, name) {\n setAttribute(elms, name, value2);\n });\n } else {\n forEach(elms, function (elm) {\n isNull(value) || value === \"\" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));\n });\n }\n}\n\nfunction create(tag, attrs, parent) {\n var elm = document.createElement(tag);\n\n if (attrs) {\n isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);\n }\n\n parent && append(parent, elm);\n return elm;\n}\n\nfunction style(elm, prop, value) {\n if (isUndefined(value)) {\n return getComputedStyle(elm)[prop];\n }\n\n if (!isNull(value)) {\n elm.style[prop] = \"\" + value;\n }\n}\n\nfunction display(elm, display2) {\n style(elm, \"display\", display2);\n}\n\nfunction focus(elm) {\n elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({\n preventScroll: true\n });\n}\n\nfunction getAttribute(elm, attr) {\n return elm.getAttribute(attr);\n}\n\nfunction hasClass(elm, className) {\n return elm && elm.classList.contains(className);\n}\n\nfunction rect(target) {\n return target.getBoundingClientRect();\n}\n\nfunction remove(nodes) {\n forEach(nodes, function (node) {\n if (node && node.parentNode) {\n node.parentNode.removeChild(node);\n }\n });\n}\n\nfunction parseHtml(html) {\n return child(new DOMParser().parseFromString(html, \"text/html\").body);\n}\n\nfunction prevent(e, stopPropagation) {\n e.preventDefault();\n\n if (stopPropagation) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n}\n\nfunction query(parent, selector) {\n return parent && parent.querySelector(selector);\n}\n\nfunction queryAll(parent, selector) {\n return selector ? slice(parent.querySelectorAll(selector)) : [];\n}\n\nfunction removeClass(elm, classes) {\n toggleClass(elm, classes, false);\n}\n\nfunction timeOf(e) {\n return e.timeStamp;\n}\n\nfunction unit(value) {\n return isString(value) ? value : value ? value + \"px\" : \"\";\n}\n\nvar PROJECT_CODE = \"splide\";\nvar DATA_ATTRIBUTE = \"data-\" + PROJECT_CODE;\n\nfunction assert(condition, message) {\n if (!condition) {\n throw new Error(\"[\" + PROJECT_CODE + \"] \" + (message || \"\"));\n }\n}\n\nvar min = Math.min,\n max = Math.max,\n floor = Math.floor,\n ceil = Math.ceil,\n abs = Math.abs;\n\nfunction approximatelyEqual(x, y, epsilon) {\n return abs(x - y) < epsilon;\n}\n\nfunction between(number, x, y, exclusive) {\n var minimum = min(x, y);\n var maximum = max(x, y);\n return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;\n}\n\nfunction clamp(number, x, y) {\n var minimum = min(x, y);\n var maximum = max(x, y);\n return min(max(minimum, number), maximum);\n}\n\nfunction sign(x) {\n return +(x > 0) - +(x < 0);\n}\n\nfunction camelToKebab(string) {\n return string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nfunction format(string, replacements) {\n forEach(replacements, function (replacement) {\n string = string.replace(\"%s\", \"\" + replacement);\n });\n return string;\n}\n\nfunction pad(number) {\n return number < 10 ? \"0\" + number : \"\" + number;\n}\n\nvar ids = {};\n\nfunction uniqueId(prefix) {\n return \"\" + prefix + pad(ids[prefix] = (ids[prefix] || 0) + 1);\n}\n\nfunction EventBinder() {\n var listeners = [];\n\n function bind(targets, events, callback, options) {\n forEachEvent(targets, events, function (target, event, namespace) {\n var isEventTarget = (\"addEventListener\" in target);\n var remover = isEventTarget ? target.removeEventListener.bind(target, event, callback, options) : target[\"removeListener\"].bind(target, callback);\n isEventTarget ? target.addEventListener(event, callback, options) : target[\"addListener\"](callback);\n listeners.push([target, event, namespace, callback, remover]);\n });\n }\n\n function unbind(targets, events, callback) {\n forEachEvent(targets, events, function (target, event, namespace) {\n listeners = listeners.filter(function (listener) {\n if (listener[0] === target && listener[1] === event && listener[2] === namespace && (!callback || listener[3] === callback)) {\n listener[4]();\n return false;\n }\n\n return true;\n });\n });\n }\n\n function dispatch(target, type, detail) {\n var e;\n var bubbles = true;\n\n if (typeof CustomEvent === \"function\") {\n e = new CustomEvent(type, {\n bubbles: bubbles,\n detail: detail\n });\n } else {\n e = document.createEvent(\"CustomEvent\");\n e.initCustomEvent(type, bubbles, false, detail);\n }\n\n target.dispatchEvent(e);\n return e;\n }\n\n function forEachEvent(targets, events, iteratee) {\n forEach(targets, function (target) {\n target && forEach(events, function (events2) {\n events2.split(\" \").forEach(function (eventNS) {\n var fragment = eventNS.split(\".\");\n iteratee(target, fragment[0], fragment[1]);\n });\n });\n });\n }\n\n function destroy() {\n listeners.forEach(function (data) {\n data[4]();\n });\n empty(listeners);\n }\n\n return {\n bind: bind,\n unbind: unbind,\n dispatch: dispatch,\n destroy: destroy\n };\n}\n\nvar EVENT_MOUNTED = \"mounted\";\nvar EVENT_READY = \"ready\";\nvar EVENT_MOVE = \"move\";\nvar EVENT_MOVED = \"moved\";\nvar EVENT_CLICK = \"click\";\nvar EVENT_ACTIVE = \"active\";\nvar EVENT_INACTIVE = \"inactive\";\nvar EVENT_VISIBLE = \"visible\";\nvar EVENT_HIDDEN = \"hidden\";\nvar EVENT_REFRESH = \"refresh\";\nvar EVENT_UPDATED = \"updated\";\nvar EVENT_RESIZE = \"resize\";\nvar EVENT_RESIZED = \"resized\";\nvar EVENT_DRAG = \"drag\";\nvar EVENT_DRAGGING = \"dragging\";\nvar EVENT_DRAGGED = \"dragged\";\nvar EVENT_SCROLL = \"scroll\";\nvar EVENT_SCROLLED = \"scrolled\";\nvar EVENT_OVERFLOW = \"overflow\";\nvar EVENT_DESTROY = \"destroy\";\nvar EVENT_ARROWS_MOUNTED = \"arrows:mounted\";\nvar EVENT_ARROWS_UPDATED = \"arrows:updated\";\nvar EVENT_PAGINATION_MOUNTED = \"pagination:mounted\";\nvar EVENT_PAGINATION_UPDATED = \"pagination:updated\";\nvar EVENT_NAVIGATION_MOUNTED = \"navigation:mounted\";\nvar EVENT_AUTOPLAY_PLAY = \"autoplay:play\";\nvar EVENT_AUTOPLAY_PLAYING = \"autoplay:playing\";\nvar EVENT_AUTOPLAY_PAUSE = \"autoplay:pause\";\nvar EVENT_LAZYLOAD_LOADED = \"lazyload:loaded\";\nvar EVENT_SLIDE_KEYDOWN = \"sk\";\nvar EVENT_SHIFTED = \"sh\";\nvar EVENT_END_INDEX_CHANGED = \"ei\";\n\nfunction EventInterface(Splide2) {\n var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment();\n var binder = EventBinder();\n\n function on(events, callback) {\n binder.bind(bus, toArray(events).join(\" \"), function (e) {\n callback.apply(callback, isArray(e.detail) ? e.detail : []);\n });\n }\n\n function emit(event) {\n binder.dispatch(bus, event, slice(arguments, 1));\n }\n\n if (Splide2) {\n Splide2.event.on(EVENT_DESTROY, binder.destroy);\n }\n\n return assign(binder, {\n bus: bus,\n on: on,\n off: apply(binder.unbind, bus),\n emit: emit\n });\n}\n\nfunction RequestInterval(interval, onInterval, onUpdate, limit) {\n var now = Date.now;\n var startTime;\n var rate = 0;\n var id;\n var paused = true;\n var count = 0;\n\n function update() {\n if (!paused) {\n rate = interval ? min((now() - startTime) / interval, 1) : 1;\n onUpdate && onUpdate(rate);\n\n if (rate >= 1) {\n onInterval();\n startTime = now();\n\n if (limit && ++count >= limit) {\n return pause();\n }\n }\n\n id = raf(update);\n }\n }\n\n function start(resume) {\n resume || cancel();\n startTime = now() - (resume ? rate * interval : 0);\n paused = false;\n id = raf(update);\n }\n\n function pause() {\n paused = true;\n }\n\n function rewind() {\n startTime = now();\n rate = 0;\n\n if (onUpdate) {\n onUpdate(rate);\n }\n }\n\n function cancel() {\n id && cancelAnimationFrame(id);\n rate = 0;\n id = 0;\n paused = true;\n }\n\n function set(time) {\n interval = time;\n }\n\n function isPaused() {\n return paused;\n }\n\n return {\n start: start,\n rewind: rewind,\n pause: pause,\n cancel: cancel,\n set: set,\n isPaused: isPaused\n };\n}\n\nfunction State(initialState) {\n var state = initialState;\n\n function set(value) {\n state = value;\n }\n\n function is(states) {\n return includes(toArray(states), state);\n }\n\n return {\n set: set,\n is: is\n };\n}\n\nfunction Throttle(func, duration) {\n var interval = RequestInterval(duration || 0, func, null, 1);\n return function () {\n interval.isPaused() && interval.start();\n };\n}\n\nfunction Media(Splide2, Components2, options) {\n var state = Splide2.state;\n var breakpoints = options.breakpoints || {};\n var reducedMotion = options.reducedMotion || {};\n var binder = EventBinder();\n var queries = [];\n\n function setup() {\n var isMin = options.mediaQuery === \"min\";\n ownKeys(breakpoints).sort(function (n, m) {\n return isMin ? +n - +m : +m - +n;\n }).forEach(function (key) {\n register(breakpoints[key], \"(\" + (isMin ? \"min\" : \"max\") + \"-width:\" + key + \"px)\");\n });\n register(reducedMotion, MEDIA_PREFERS_REDUCED_MOTION);\n update();\n }\n\n function destroy(completely) {\n if (completely) {\n binder.destroy();\n }\n }\n\n function register(options2, query) {\n var queryList = matchMedia(query);\n binder.bind(queryList, \"change\", update);\n queries.push([options2, queryList]);\n }\n\n function update() {\n var destroyed = state.is(DESTROYED);\n var direction = options.direction;\n var merged = queries.reduce(function (merged2, entry) {\n return merge(merged2, entry[1].matches ? entry[0] : {});\n }, {});\n omit(options);\n set(merged);\n\n if (options.destroy) {\n Splide2.destroy(options.destroy === \"completely\");\n } else if (destroyed) {\n destroy(true);\n Splide2.mount();\n } else {\n direction !== options.direction && Splide2.refresh();\n }\n }\n\n function reduce(enable) {\n if (matchMedia(MEDIA_PREFERS_REDUCED_MOTION).matches) {\n enable ? merge(options, reducedMotion) : omit(options, ownKeys(reducedMotion));\n }\n }\n\n function set(opts, base, notify) {\n merge(options, opts);\n base && merge(Object.getPrototypeOf(options), opts);\n\n if (notify || !state.is(CREATED)) {\n Splide2.emit(EVENT_UPDATED, options);\n }\n }\n\n return {\n setup: setup,\n destroy: destroy,\n reduce: reduce,\n set: set\n };\n}\n\nvar ARROW = \"Arrow\";\nvar ARROW_LEFT = ARROW + \"Left\";\nvar ARROW_RIGHT = ARROW + \"Right\";\nvar ARROW_UP = ARROW + \"Up\";\nvar ARROW_DOWN = ARROW + \"Down\";\nvar LTR = \"ltr\";\nvar RTL = \"rtl\";\nvar TTB = \"ttb\";\nvar ORIENTATION_MAP = {\n width: [\"height\"],\n left: [\"top\", \"right\"],\n right: [\"bottom\", \"left\"],\n x: [\"y\"],\n X: [\"Y\"],\n Y: [\"X\"],\n ArrowLeft: [ARROW_UP, ARROW_RIGHT],\n ArrowRight: [ARROW_DOWN, ARROW_LEFT]\n};\n\nfunction Direction(Splide2, Components2, options) {\n function resolve(prop, axisOnly, direction) {\n direction = direction || options.direction;\n var index = direction === RTL && !axisOnly ? 1 : direction === TTB ? 0 : -1;\n return ORIENTATION_MAP[prop] && ORIENTATION_MAP[prop][index] || prop.replace(/width|left|right/i, function (match, offset) {\n var replacement = ORIENTATION_MAP[match.toLowerCase()][index] || match;\n return offset > 0 ? replacement.charAt(0).toUpperCase() + replacement.slice(1) : replacement;\n });\n }\n\n function orient(value) {\n return value * (options.direction === RTL ? 1 : -1);\n }\n\n return {\n resolve: resolve,\n orient: orient\n };\n}\n\nvar ROLE = \"role\";\nvar TAB_INDEX = \"tabindex\";\nvar DISABLED = \"disabled\";\nvar ARIA_PREFIX = \"aria-\";\nvar ARIA_CONTROLS = ARIA_PREFIX + \"controls\";\nvar ARIA_CURRENT = ARIA_PREFIX + \"current\";\nvar ARIA_SELECTED = ARIA_PREFIX + \"selected\";\nvar ARIA_LABEL = ARIA_PREFIX + \"label\";\nvar ARIA_LABELLEDBY = ARIA_PREFIX + \"labelledby\";\nvar ARIA_HIDDEN = ARIA_PREFIX + \"hidden\";\nvar ARIA_ORIENTATION = ARIA_PREFIX + \"orientation\";\nvar ARIA_ROLEDESCRIPTION = ARIA_PREFIX + \"roledescription\";\nvar ARIA_LIVE = ARIA_PREFIX + \"live\";\nvar ARIA_BUSY = ARIA_PREFIX + \"busy\";\nvar ARIA_ATOMIC = ARIA_PREFIX + \"atomic\";\nvar ALL_ATTRIBUTES = [ROLE, TAB_INDEX, DISABLED, ARIA_CONTROLS, ARIA_CURRENT, ARIA_LABEL, ARIA_LABELLEDBY, ARIA_HIDDEN, ARIA_ORIENTATION, ARIA_ROLEDESCRIPTION];\nvar CLASS_PREFIX = PROJECT_CODE + \"__\";\nvar STATUS_CLASS_PREFIX = \"is-\";\nvar CLASS_ROOT = PROJECT_CODE;\nvar CLASS_TRACK = CLASS_PREFIX + \"track\";\nvar CLASS_LIST = CLASS_PREFIX + \"list\";\nvar CLASS_SLIDE = CLASS_PREFIX + \"slide\";\nvar CLASS_CLONE = CLASS_SLIDE + \"--clone\";\nvar CLASS_CONTAINER = CLASS_SLIDE + \"__container\";\nvar CLASS_ARROWS = CLASS_PREFIX + \"arrows\";\nvar CLASS_ARROW = CLASS_PREFIX + \"arrow\";\nvar CLASS_ARROW_PREV = CLASS_ARROW + \"--prev\";\nvar CLASS_ARROW_NEXT = CLASS_ARROW + \"--next\";\nvar CLASS_PAGINATION = CLASS_PREFIX + \"pagination\";\nvar CLASS_PAGINATION_PAGE = CLASS_PAGINATION + \"__page\";\nvar CLASS_PROGRESS = CLASS_PREFIX + \"progress\";\nvar CLASS_PROGRESS_BAR = CLASS_PROGRESS + \"__bar\";\nvar CLASS_TOGGLE = CLASS_PREFIX + \"toggle\";\nvar CLASS_TOGGLE_PLAY = CLASS_TOGGLE + \"__play\";\nvar CLASS_TOGGLE_PAUSE = CLASS_TOGGLE + \"__pause\";\nvar CLASS_SPINNER = CLASS_PREFIX + \"spinner\";\nvar CLASS_SR = CLASS_PREFIX + \"sr\";\nvar CLASS_INITIALIZED = STATUS_CLASS_PREFIX + \"initialized\";\nvar CLASS_ACTIVE = STATUS_CLASS_PREFIX + \"active\";\nvar CLASS_PREV = STATUS_CLASS_PREFIX + \"prev\";\nvar CLASS_NEXT = STATUS_CLASS_PREFIX + \"next\";\nvar CLASS_VISIBLE = STATUS_CLASS_PREFIX + \"visible\";\nvar CLASS_LOADING = STATUS_CLASS_PREFIX + \"loading\";\nvar CLASS_FOCUS_IN = STATUS_CLASS_PREFIX + \"focus-in\";\nvar CLASS_OVERFLOW = STATUS_CLASS_PREFIX + \"overflow\";\nvar STATUS_CLASSES = [CLASS_ACTIVE, CLASS_VISIBLE, CLASS_PREV, CLASS_NEXT, CLASS_LOADING, CLASS_FOCUS_IN, CLASS_OVERFLOW];\nvar CLASSES = {\n slide: CLASS_SLIDE,\n clone: CLASS_CLONE,\n arrows: CLASS_ARROWS,\n arrow: CLASS_ARROW,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n pagination: CLASS_PAGINATION,\n page: CLASS_PAGINATION_PAGE,\n spinner: CLASS_SPINNER\n};\n\nfunction closest(from, selector) {\n if (isFunction(from.closest)) {\n return from.closest(selector);\n }\n\n var elm = from;\n\n while (elm && elm.nodeType === 1) {\n if (matches(elm, selector)) {\n break;\n }\n\n elm = elm.parentElement;\n }\n\n return elm;\n}\n\nvar FRICTION = 5;\nvar LOG_INTERVAL = 200;\nvar POINTER_DOWN_EVENTS = \"touchstart mousedown\";\nvar POINTER_MOVE_EVENTS = \"touchmove mousemove\";\nvar POINTER_UP_EVENTS = \"touchend touchcancel mouseup click\";\n\nfunction Elements(Splide2, Components2, options) {\n var _EventInterface = EventInterface(Splide2),\n on = _EventInterface.on,\n bind = _EventInterface.bind;\n\n var root = Splide2.root;\n var i18n = options.i18n;\n var elements = {};\n var slides = [];\n var rootClasses = [];\n var trackClasses = [];\n var track;\n var list;\n var isUsingKey;\n\n function setup() {\n collect();\n init();\n update();\n }\n\n function mount() {\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, setup);\n on(EVENT_UPDATED, update);\n bind(document, POINTER_DOWN_EVENTS + \" keydown\", function (e) {\n isUsingKey = e.type === \"keydown\";\n }, {\n capture: true\n });\n bind(root, \"focusin\", function () {\n toggleClass(root, CLASS_FOCUS_IN, !!isUsingKey);\n });\n }\n\n function destroy(completely) {\n var attrs = ALL_ATTRIBUTES.concat(\"style\");\n empty(slides);\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n removeAttribute([track, list], attrs);\n removeAttribute(root, completely ? attrs : [\"style\", ARIA_ROLEDESCRIPTION]);\n }\n\n function update() {\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n rootClasses = getClasses(CLASS_ROOT);\n trackClasses = getClasses(CLASS_TRACK);\n addClass(root, rootClasses);\n addClass(track, trackClasses);\n setAttribute(root, ARIA_LABEL, options.label);\n setAttribute(root, ARIA_LABELLEDBY, options.labelledby);\n }\n\n function collect() {\n track = find(\".\" + CLASS_TRACK);\n list = child(track, \".\" + CLASS_LIST);\n assert(track && list, \"A track/list element is missing.\");\n push(slides, children(list, \".\" + CLASS_SLIDE + \":not(.\" + CLASS_CLONE + \")\"));\n forOwn({\n arrows: CLASS_ARROWS,\n pagination: CLASS_PAGINATION,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n bar: CLASS_PROGRESS_BAR,\n toggle: CLASS_TOGGLE\n }, function (className, key) {\n elements[key] = find(\".\" + className);\n });\n assign(elements, {\n root: root,\n track: track,\n list: list,\n slides: slides\n });\n }\n\n function init() {\n var id = root.id || uniqueId(PROJECT_CODE);\n var role = options.role;\n root.id = id;\n track.id = track.id || id + \"-track\";\n list.id = list.id || id + \"-list\";\n\n if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\n setAttribute(root, ROLE, role);\n }\n\n setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\n setAttribute(list, ROLE, \"presentation\");\n }\n\n function find(selector) {\n var elm = query(root, selector);\n return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\n }\n\n function getClasses(base) {\n return [base + \"--\" + options.type, base + \"--\" + options.direction, options.drag && base + \"--draggable\", options.isNavigation && base + \"--nav\", base === CLASS_ROOT && CLASS_ACTIVE];\n }\n\n return assign(elements, {\n setup: setup,\n mount: mount,\n destroy: destroy\n });\n}\n\nvar SLIDE = \"slide\";\nvar LOOP = \"loop\";\nvar FADE = \"fade\";\n\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n var event = EventInterface(Splide2);\n var on = event.on,\n emit = event.emit,\n bind = event.bind;\n var Components = Splide2.Components,\n root = Splide2.root,\n options = Splide2.options;\n var isNavigation = options.isNavigation,\n updateOnMove = options.updateOnMove,\n i18n = options.i18n,\n pagination = options.pagination,\n slideFocus = options.slideFocus;\n var resolve = Components.Direction.resolve;\n var styles = getAttribute(slide, \"style\");\n var label = getAttribute(slide, ARIA_LABEL);\n var isClone = slideIndex > -1;\n var container = child(slide, \".\" + CLASS_CONTAINER);\n var destroyed;\n\n function mount() {\n if (!isClone) {\n slide.id = root.id + \"-slide\" + pad(index + 1);\n setAttribute(slide, ROLE, pagination ? \"tabpanel\" : \"group\");\n setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide);\n setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length]));\n }\n\n listen();\n }\n\n function listen() {\n bind(slide, \"click\", apply(emit, EVENT_CLICK, self));\n bind(slide, \"keydown\", apply(emit, EVENT_SLIDE_KEYDOWN, self));\n on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update);\n on(EVENT_NAVIGATION_MOUNTED, initNavigation);\n\n if (updateOnMove) {\n on(EVENT_MOVE, onMove);\n }\n }\n\n function destroy() {\n destroyed = true;\n event.destroy();\n removeClass(slide, STATUS_CLASSES);\n removeAttribute(slide, ALL_ATTRIBUTES);\n setAttribute(slide, \"style\", styles);\n setAttribute(slide, ARIA_LABEL, label || \"\");\n }\n\n function initNavigation() {\n var controls = Splide2.splides.map(function (target) {\n var Slide2 = target.splide.Components.Slides.getAt(index);\n return Slide2 ? Slide2.slide.id : \"\";\n }).join(\" \");\n setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1));\n setAttribute(slide, ARIA_CONTROLS, controls);\n setAttribute(slide, ROLE, slideFocus ? \"button\" : \"\");\n slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION);\n }\n\n function onMove() {\n if (!destroyed) {\n update();\n }\n }\n\n function update() {\n if (!destroyed) {\n var curr = Splide2.index;\n updateActivity();\n updateVisibility();\n toggleClass(slide, CLASS_PREV, index === curr - 1);\n toggleClass(slide, CLASS_NEXT, index === curr + 1);\n }\n }\n\n function updateActivity() {\n var active = isActive();\n\n if (active !== hasClass(slide, CLASS_ACTIVE)) {\n toggleClass(slide, CLASS_ACTIVE, active);\n setAttribute(slide, ARIA_CURRENT, isNavigation && active || \"\");\n emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\n }\n }\n\n function updateVisibility() {\n var visible = isVisible();\n var hidden = !visible && (!isActive() || isClone);\n\n if (!Splide2.state.is([MOVING, SCROLLING])) {\n setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n }\n\n setAttribute(queryAll(slide, options.focusableNodes || \"\"), TAB_INDEX, hidden ? -1 : \"\");\n\n if (slideFocus) {\n setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n }\n\n if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n toggleClass(slide, CLASS_VISIBLE, visible);\n emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n }\n\n if (!visible && document.activeElement === slide) {\n var Slide2 = Components.Slides.getAt(Splide2.index);\n Slide2 && focus(Slide2.slide);\n }\n }\n\n function style$1(prop, value, useContainer) {\n style(useContainer && container || slide, prop, value);\n }\n\n function isActive() {\n var curr = Splide2.index;\n return curr === index || options.cloneStatus && curr === slideIndex;\n }\n\n function isVisible() {\n if (Splide2.is(FADE)) {\n return isActive();\n }\n\n var trackRect = rect(Components.Elements.track);\n var slideRect = rect(slide);\n var left = resolve(\"left\", true);\n var right = resolve(\"right\", true);\n return floor(trackRect[left]) <= ceil(slideRect[left]) && floor(slideRect[right]) <= ceil(trackRect[right]);\n }\n\n function isWithin(from, distance) {\n var diff = abs(from - index);\n\n if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n diff = min(diff, Splide2.length - diff);\n }\n\n return diff <= distance;\n }\n\n var self = {\n index: index,\n slideIndex: slideIndex,\n slide: slide,\n container: container,\n isClone: isClone,\n mount: mount,\n destroy: destroy,\n update: update,\n style: style$1,\n isWithin: isWithin\n };\n return self;\n}\n\nfunction Slides(Splide2, Components2, options) {\n var _EventInterface2 = EventInterface(Splide2),\n on = _EventInterface2.on,\n emit = _EventInterface2.emit,\n bind = _EventInterface2.bind;\n\n var _Components2$Elements = Components2.Elements,\n slides = _Components2$Elements.slides,\n list = _Components2$Elements.list;\n var Slides2 = [];\n\n function mount() {\n init();\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, init);\n }\n\n function init() {\n slides.forEach(function (slide, index) {\n register(slide, index, -1);\n });\n }\n\n function destroy() {\n forEach$1(function (Slide2) {\n Slide2.destroy();\n });\n empty(Slides2);\n }\n\n function update() {\n forEach$1(function (Slide2) {\n Slide2.update();\n });\n }\n\n function register(slide, index, slideIndex) {\n var object = Slide$1(Splide2, index, slideIndex, slide);\n object.mount();\n Slides2.push(object);\n Slides2.sort(function (Slide1, Slide2) {\n return Slide1.index - Slide2.index;\n });\n }\n\n function get(excludeClones) {\n return excludeClones ? filter(function (Slide2) {\n return !Slide2.isClone;\n }) : Slides2;\n }\n\n function getIn(page) {\n var Controller = Components2.Controller;\n var index = Controller.toIndex(page);\n var max = Controller.hasFocus() ? 1 : options.perPage;\n return filter(function (Slide2) {\n return between(Slide2.index, index, index + max - 1);\n });\n }\n\n function getAt(index) {\n return filter(index)[0];\n }\n\n function add(items, index) {\n forEach(items, function (slide) {\n if (isString(slide)) {\n slide = parseHtml(slide);\n }\n\n if (isHTMLElement(slide)) {\n var ref = slides[index];\n ref ? before(slide, ref) : append(list, slide);\n addClass(slide, options.classes.slide);\n observeImages(slide, apply(emit, EVENT_RESIZE));\n }\n });\n emit(EVENT_REFRESH);\n }\n\n function remove$1(matcher) {\n remove(filter(matcher).map(function (Slide2) {\n return Slide2.slide;\n }));\n emit(EVENT_REFRESH);\n }\n\n function forEach$1(iteratee, excludeClones) {\n get(excludeClones).forEach(iteratee);\n }\n\n function filter(matcher) {\n return Slides2.filter(isFunction(matcher) ? matcher : function (Slide2) {\n return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index);\n });\n }\n\n function style(prop, value, useContainer) {\n forEach$1(function (Slide2) {\n Slide2.style(prop, value, useContainer);\n });\n }\n\n function observeImages(elm, callback) {\n var images = queryAll(elm, \"img\");\n var length = images.length;\n\n if (length) {\n images.forEach(function (img) {\n bind(img, \"load error\", function () {\n if (! --length) {\n callback();\n }\n });\n });\n } else {\n callback();\n }\n }\n\n function getLength(excludeClones) {\n return excludeClones ? slides.length : Slides2.length;\n }\n\n function isEnough() {\n return Slides2.length > options.perPage;\n }\n\n return {\n mount: mount,\n destroy: destroy,\n update: update,\n register: register,\n get: get,\n getIn: getIn,\n getAt: getAt,\n add: add,\n remove: remove$1,\n forEach: forEach$1,\n filter: filter,\n style: style,\n getLength: getLength,\n isEnough: isEnough\n };\n}\n\nfunction Layout(Splide2, Components2, options) {\n var _EventInterface3 = EventInterface(Splide2),\n on = _EventInterface3.on,\n bind = _EventInterface3.bind,\n emit = _EventInterface3.emit;\n\n var Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var _Components2$Elements2 = Components2.Elements,\n root = _Components2$Elements2.root,\n track = _Components2$Elements2.track,\n list = _Components2$Elements2.list;\n var getAt = Slides.getAt,\n styleSlides = Slides.style;\n var vertical;\n var rootRect;\n var overflow;\n\n function mount() {\n init();\n bind(window, \"resize load\", Throttle(apply(emit, EVENT_RESIZE)));\n on([EVENT_UPDATED, EVENT_REFRESH], init);\n on(EVENT_RESIZE, resize);\n }\n\n function init() {\n vertical = options.direction === TTB;\n style(root, \"maxWidth\", unit(options.width));\n style(track, resolve(\"paddingLeft\"), cssPadding(false));\n style(track, resolve(\"paddingRight\"), cssPadding(true));\n resize(true);\n }\n\n function resize(force) {\n var newRect = rect(root);\n\n if (force || rootRect.width !== newRect.width || rootRect.height !== newRect.height) {\n style(track, \"height\", cssTrackHeight());\n styleSlides(resolve(\"marginRight\"), unit(options.gap));\n styleSlides(\"width\", cssSlideWidth());\n styleSlides(\"height\", cssSlideHeight(), true);\n rootRect = newRect;\n emit(EVENT_RESIZED);\n\n if (overflow !== (overflow = isOverflow())) {\n toggleClass(root, CLASS_OVERFLOW, overflow);\n emit(EVENT_OVERFLOW, overflow);\n }\n }\n }\n\n function cssPadding(right) {\n var padding = options.padding;\n var prop = resolve(right ? \"right\" : \"left\");\n return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n }\n\n function cssTrackHeight() {\n var height = \"\";\n\n if (vertical) {\n height = cssHeight();\n assert(height, \"height or heightRatio is missing.\");\n height = \"calc(\" + height + \" - \" + cssPadding(false) + \" - \" + cssPadding(true) + \")\";\n }\n\n return height;\n }\n\n function cssHeight() {\n return unit(options.height || rect(list).width * options.heightRatio);\n }\n\n function cssSlideWidth() {\n return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\n }\n\n function cssSlideHeight() {\n return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight());\n }\n\n function cssSlideSize() {\n var gap = unit(options.gap);\n return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n }\n\n function listSize() {\n return rect(list)[resolve(\"width\")];\n }\n\n function slideSize(index, withoutGap) {\n var Slide = getAt(index || 0);\n return Slide ? rect(Slide.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\n }\n\n function totalSize(index, withoutGap) {\n var Slide = getAt(index);\n\n if (Slide) {\n var right = rect(Slide.slide)[resolve(\"right\")];\n var left = rect(list)[resolve(\"left\")];\n return abs(right - left) + (withoutGap ? 0 : getGap());\n }\n\n return 0;\n }\n\n function sliderSize(withoutGap) {\n return totalSize(Splide2.length - 1) - totalSize(0) + slideSize(0, withoutGap);\n }\n\n function getGap() {\n var Slide = getAt(0);\n return Slide && parseFloat(style(Slide.slide, resolve(\"marginRight\"))) || 0;\n }\n\n function getPadding(right) {\n return parseFloat(style(track, resolve(\"padding\" + (right ? \"Right\" : \"Left\")))) || 0;\n }\n\n function isOverflow() {\n return Splide2.is(FADE) || sliderSize(true) > listSize();\n }\n\n return {\n mount: mount,\n resize: resize,\n listSize: listSize,\n slideSize: slideSize,\n sliderSize: sliderSize,\n totalSize: totalSize,\n getPadding: getPadding,\n isOverflow: isOverflow\n };\n}\n\nvar MULTIPLIER = 2;\n\nfunction Clones(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on;\n var Elements = Components2.Elements,\n Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var clones = [];\n var cloneCount;\n\n function mount() {\n on(EVENT_REFRESH, remount);\n on([EVENT_UPDATED, EVENT_RESIZE], observe);\n\n if (cloneCount = computeCloneCount()) {\n generate(cloneCount);\n Components2.Layout.resize(true);\n }\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function destroy() {\n remove(clones);\n empty(clones);\n event.destroy();\n }\n\n function observe() {\n var count = computeCloneCount();\n\n if (cloneCount !== count) {\n if (cloneCount < count || !count) {\n event.emit(EVENT_REFRESH);\n }\n }\n }\n\n function generate(count) {\n var slides = Slides.get().slice();\n var length = slides.length;\n\n if (length) {\n while (slides.length < count) {\n push(slides, slides);\n }\n\n push(slides.slice(-count), slides.slice(0, count)).forEach(function (Slide, index) {\n var isHead = index < count;\n var clone = cloneDeep(Slide.slide, index);\n isHead ? before(clone, slides[0].slide) : append(Elements.list, clone);\n push(clones, clone);\n Slides.register(clone, index - count + (isHead ? 0 : length), Slide.index);\n });\n }\n }\n\n function cloneDeep(elm, index) {\n var clone = elm.cloneNode(true);\n addClass(clone, options.classes.clone);\n clone.id = Splide2.root.id + \"-clone\" + pad(index + 1);\n return clone;\n }\n\n function computeCloneCount() {\n var clones2 = options.clones;\n\n if (!Splide2.is(LOOP)) {\n clones2 = 0;\n } else if (isUndefined(clones2)) {\n var fixedSize = options[resolve(\"fixedWidth\")] && Components2.Layout.slideSize(0);\n var fixedCount = fixedSize && ceil(rect(Elements.track)[resolve(\"width\")] / fixedSize);\n clones2 = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage * MULTIPLIER;\n }\n\n return clones2;\n }\n\n return {\n mount: mount,\n destroy: destroy\n };\n}\n\nfunction Move(Splide2, Components2, options) {\n var _EventInterface4 = EventInterface(Splide2),\n on = _EventInterface4.on,\n emit = _EventInterface4.emit;\n\n var set = Splide2.state.set;\n var _Components2$Layout = Components2.Layout,\n slideSize = _Components2$Layout.slideSize,\n getPadding = _Components2$Layout.getPadding,\n totalSize = _Components2$Layout.totalSize,\n listSize = _Components2$Layout.listSize,\n sliderSize = _Components2$Layout.sliderSize;\n var _Components2$Directio = Components2.Direction,\n resolve = _Components2$Directio.resolve,\n orient = _Components2$Directio.orient;\n var _Components2$Elements3 = Components2.Elements,\n list = _Components2$Elements3.list,\n track = _Components2$Elements3.track;\n var Transition;\n\n function mount() {\n Transition = Components2.Transition;\n on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\n }\n\n function reposition() {\n if (!Components2.Controller.isBusy()) {\n Components2.Scroll.cancel();\n jump(Splide2.index);\n Components2.Slides.update();\n }\n }\n\n function move(dest, index, prev, callback) {\n if (dest !== index && canShift(dest > prev)) {\n cancel();\n translate(shift(getPosition(), dest > prev), true);\n }\n\n set(MOVING);\n emit(EVENT_MOVE, index, prev, dest);\n Transition.start(index, function () {\n set(IDLE);\n emit(EVENT_MOVED, index, prev, dest);\n callback && callback();\n });\n }\n\n function jump(index) {\n translate(toPosition(index, true));\n }\n\n function translate(position, preventLoop) {\n if (!Splide2.is(FADE)) {\n var destination = preventLoop ? position : loop(position);\n style(list, \"transform\", \"translate\" + resolve(\"X\") + \"(\" + destination + \"px)\");\n position !== destination && emit(EVENT_SHIFTED);\n }\n }\n\n function loop(position) {\n if (Splide2.is(LOOP)) {\n var index = toIndex(position);\n var exceededMax = index > Components2.Controller.getEnd();\n var exceededMin = index < 0;\n\n if (exceededMin || exceededMax) {\n position = shift(position, exceededMax);\n }\n }\n\n return position;\n }\n\n function shift(position, backwards) {\n var excess = position - getLimit(backwards);\n var size = sliderSize();\n position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1);\n return position;\n }\n\n function cancel() {\n translate(getPosition(), true);\n Transition.cancel();\n }\n\n function toIndex(position) {\n var Slides = Components2.Slides.get();\n var index = 0;\n var minDistance = Infinity;\n\n for (var i = 0; i < Slides.length; i++) {\n var slideIndex = Slides[i].index;\n var distance = abs(toPosition(slideIndex, true) - position);\n\n if (distance <= minDistance) {\n minDistance = distance;\n index = slideIndex;\n } else {\n break;\n }\n }\n\n return index;\n }\n\n function toPosition(index, trimming) {\n var position = orient(totalSize(index - 1) - offset(index));\n return trimming ? trim(position) : position;\n }\n\n function getPosition() {\n var left = resolve(\"left\");\n return rect(list)[left] - rect(track)[left] + orient(getPadding(false));\n }\n\n function trim(position) {\n if (options.trimSpace && Splide2.is(SLIDE)) {\n position = clamp(position, 0, orient(sliderSize(true) - listSize()));\n }\n\n return position;\n }\n\n function offset(index) {\n var focus = options.focus;\n return focus === \"center\" ? (listSize() - slideSize(index, true)) / 2 : +focus * slideSize(index) || 0;\n }\n\n function getLimit(max) {\n return toPosition(max ? Components2.Controller.getEnd() : 0, !!options.trimSpace);\n }\n\n function canShift(backwards) {\n var shifted = orient(shift(getPosition(), backwards));\n return backwards ? shifted >= 0 : shifted <= list[resolve(\"scrollWidth\")] - rect(track)[resolve(\"width\")];\n }\n\n function exceededLimit(max, position) {\n position = isUndefined(position) ? getPosition() : position;\n var exceededMin = max !== true && orient(position) < orient(getLimit(false));\n var exceededMax = max !== false && orient(position) > orient(getLimit(true));\n return exceededMin || exceededMax;\n }\n\n return {\n mount: mount,\n move: move,\n jump: jump,\n translate: translate,\n shift: shift,\n cancel: cancel,\n toIndex: toIndex,\n toPosition: toPosition,\n getPosition: getPosition,\n getLimit: getLimit,\n exceededLimit: exceededLimit,\n reposition: reposition\n };\n}\n\nfunction Controller(Splide2, Components2, options) {\n var _EventInterface5 = EventInterface(Splide2),\n on = _EventInterface5.on,\n emit = _EventInterface5.emit;\n\n var Move = Components2.Move;\n var getPosition = Move.getPosition,\n getLimit = Move.getLimit,\n toPosition = Move.toPosition;\n var _Components2$Slides = Components2.Slides,\n isEnough = _Components2$Slides.isEnough,\n getLength = _Components2$Slides.getLength;\n var omitEnd = options.omitEnd;\n var isLoop = Splide2.is(LOOP);\n var isSlide = Splide2.is(SLIDE);\n var getNext = apply(getAdjacent, false);\n var getPrev = apply(getAdjacent, true);\n var currIndex = options.start || 0;\n var endIndex;\n var prevIndex = currIndex;\n var slideCount;\n var perMove;\n var perPage;\n\n function mount() {\n init();\n on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], init);\n on(EVENT_RESIZED, onResized);\n }\n\n function init() {\n slideCount = getLength(true);\n perMove = options.perMove;\n perPage = options.perPage;\n endIndex = getEnd();\n var index = clamp(currIndex, 0, omitEnd ? endIndex : slideCount - 1);\n\n if (index !== currIndex) {\n currIndex = index;\n Move.reposition();\n }\n }\n\n function onResized() {\n if (endIndex !== getEnd()) {\n emit(EVENT_END_INDEX_CHANGED);\n }\n }\n\n function go(control, allowSameIndex, callback) {\n if (!isBusy()) {\n var dest = parse(control);\n var index = loop(dest);\n\n if (index > -1 && (allowSameIndex || index !== currIndex)) {\n setIndex(index);\n Move.move(dest, index, prevIndex, callback);\n }\n }\n }\n\n function scroll(destination, duration, snap, callback) {\n Components2.Scroll.scroll(destination, duration, snap, function () {\n var index = loop(Move.toIndex(getPosition()));\n setIndex(omitEnd ? min(index, endIndex) : index);\n callback && callback();\n });\n }\n\n function parse(control) {\n var index = currIndex;\n\n if (isString(control)) {\n var _ref = control.match(/([+\\-<>])(\\d+)?/) || [],\n indicator = _ref[1],\n number = _ref[2];\n\n if (indicator === \"+\" || indicator === \"-\") {\n index = computeDestIndex(currIndex + +(\"\" + indicator + (+number || 1)), currIndex);\n } else if (indicator === \">\") {\n index = number ? toIndex(+number) : getNext(true);\n } else if (indicator === \"<\") {\n index = getPrev(true);\n }\n } else {\n index = isLoop ? control : clamp(control, 0, endIndex);\n }\n\n return index;\n }\n\n function getAdjacent(prev, destination) {\n var number = perMove || (hasFocus() ? 1 : perPage);\n var dest = computeDestIndex(currIndex + number * (prev ? -1 : 1), currIndex, !(perMove || hasFocus()));\n\n if (dest === -1 && isSlide) {\n if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {\n return prev ? 0 : endIndex;\n }\n }\n\n return destination ? dest : loop(dest);\n }\n\n function computeDestIndex(dest, from, snapPage) {\n if (isEnough() || hasFocus()) {\n var index = computeMovableDestIndex(dest);\n\n if (index !== dest) {\n from = dest;\n dest = index;\n snapPage = false;\n }\n\n if (dest < 0 || dest > endIndex) {\n if (!perMove && (between(0, dest, from, true) || between(endIndex, from, dest, true))) {\n dest = toIndex(toPage(dest));\n } else {\n if (isLoop) {\n dest = snapPage ? dest < 0 ? -(slideCount % perPage || perPage) : slideCount : dest;\n } else if (options.rewind) {\n dest = dest < 0 ? endIndex : 0;\n } else {\n dest = -1;\n }\n }\n } else {\n if (snapPage && dest !== from) {\n dest = toIndex(toPage(from) + (dest < from ? -1 : 1));\n }\n }\n } else {\n dest = -1;\n }\n\n return dest;\n }\n\n function computeMovableDestIndex(dest) {\n if (isSlide && options.trimSpace === \"move\" && dest !== currIndex) {\n var position = getPosition();\n\n while (position === toPosition(dest, true) && between(dest, 0, Splide2.length - 1, !options.rewind)) {\n dest < currIndex ? --dest : ++dest;\n }\n }\n\n return dest;\n }\n\n function loop(index) {\n return isLoop ? (index + slideCount) % slideCount || 0 : index;\n }\n\n function getEnd() {\n var end = slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage);\n\n while (omitEnd && end-- > 0) {\n if (toPosition(slideCount - 1, true) !== toPosition(end, true)) {\n end++;\n break;\n }\n }\n\n return clamp(end, 0, slideCount - 1);\n }\n\n function toIndex(page) {\n return clamp(hasFocus() ? page : perPage * page, 0, endIndex);\n }\n\n function toPage(index) {\n return hasFocus() ? min(index, endIndex) : floor((index >= endIndex ? slideCount - 1 : index) / perPage);\n }\n\n function toDest(destination) {\n var closest = Move.toIndex(destination);\n return isSlide ? clamp(closest, 0, endIndex) : closest;\n }\n\n function setIndex(index) {\n if (index !== currIndex) {\n prevIndex = currIndex;\n currIndex = index;\n }\n }\n\n function getIndex(prev) {\n return prev ? prevIndex : currIndex;\n }\n\n function hasFocus() {\n return !isUndefined(options.focus) || options.isNavigation;\n }\n\n function isBusy() {\n return Splide2.state.is([MOVING, SCROLLING]) && !!options.waitForTransition;\n }\n\n return {\n mount: mount,\n go: go,\n scroll: scroll,\n getNext: getNext,\n getPrev: getPrev,\n getAdjacent: getAdjacent,\n getEnd: getEnd,\n setIndex: setIndex,\n getIndex: getIndex,\n toIndex: toIndex,\n toPage: toPage,\n toDest: toDest,\n hasFocus: hasFocus,\n isBusy: isBusy\n };\n}\n\nvar XML_NAME_SPACE = \"http://www.w3.org/2000/svg\";\nvar PATH = \"m15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z\";\nvar SIZE = 40;\n\nfunction Arrows(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on,\n bind = event.bind,\n emit = event.emit;\n var classes = options.classes,\n i18n = options.i18n;\n var Elements = Components2.Elements,\n Controller = Components2.Controller;\n var placeholder = Elements.arrows,\n track = Elements.track;\n var wrapper = placeholder;\n var prev = Elements.prev;\n var next = Elements.next;\n var created;\n var wrapperClasses;\n var arrows = {};\n\n function mount() {\n init();\n on(EVENT_UPDATED, remount);\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function init() {\n var enabled = options.arrows;\n\n if (enabled && !(prev && next)) {\n createArrows();\n }\n\n if (prev && next) {\n assign(arrows, {\n prev: prev,\n next: next\n });\n display(wrapper, enabled ? \"\" : \"none\");\n addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\n\n if (enabled) {\n listen();\n update();\n setAttribute([prev, next], ARIA_CONTROLS, track.id);\n emit(EVENT_ARROWS_MOUNTED, prev, next);\n }\n }\n }\n\n function destroy() {\n event.destroy();\n removeClass(wrapper, wrapperClasses);\n\n if (created) {\n remove(placeholder ? [prev, next] : wrapper);\n prev = next = null;\n } else {\n removeAttribute([prev, next], ALL_ATTRIBUTES);\n }\n }\n\n function listen() {\n on([EVENT_MOUNTED, EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED, EVENT_END_INDEX_CHANGED], update);\n bind(next, \"click\", apply(go, \">\"));\n bind(prev, \"click\", apply(go, \"<\"));\n }\n\n function go(control) {\n Controller.go(control, true);\n }\n\n function createArrows() {\n wrapper = placeholder || create(\"div\", classes.arrows);\n prev = createArrow(true);\n next = createArrow(false);\n created = true;\n append(wrapper, [prev, next]);\n !placeholder && before(wrapper, track);\n }\n\n function createArrow(prev2) {\n var arrow = \"<button class=\\\"\" + classes.arrow + \" \" + (prev2 ? classes.prev : classes.next) + \"\\\" type=\\\"button\\\"><svg xmlns=\\\"\" + XML_NAME_SPACE + \"\\\" viewBox=\\\"0 0 \" + SIZE + \" \" + SIZE + \"\\\" width=\\\"\" + SIZE + \"\\\" height=\\\"\" + SIZE + \"\\\" focusable=\\\"false\\\"><path d=\\\"\" + (options.arrowPath || PATH) + \"\\\" />\";\n return parseHtml(arrow);\n }\n\n function update() {\n if (prev && next) {\n var index = Splide2.index;\n var prevIndex = Controller.getPrev();\n var nextIndex = Controller.getNext();\n var prevLabel = prevIndex > -1 && index < prevIndex ? i18n.last : i18n.prev;\n var nextLabel = nextIndex > -1 && index > nextIndex ? i18n.first : i18n.next;\n prev.disabled = prevIndex < 0;\n next.disabled = nextIndex < 0;\n setAttribute(prev, ARIA_LABEL, prevLabel);\n setAttribute(next, ARIA_LABEL, nextLabel);\n emit(EVENT_ARROWS_UPDATED, prev, next, prevIndex, nextIndex);\n }\n }\n\n return {\n arrows: arrows,\n mount: mount,\n destroy: destroy,\n update: update\n };\n}\n\nvar INTERVAL_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-interval\";\n\nfunction Autoplay(Splide2, Components2, options) {\n var _EventInterface6 = EventInterface(Splide2),\n on = _EventInterface6.on,\n bind = _EventInterface6.bind,\n emit = _EventInterface6.emit;\n\n var interval = RequestInterval(options.interval, Splide2.go.bind(Splide2, \">\"), onAnimationFrame);\n var isPaused = interval.isPaused;\n var Elements = Components2.Elements,\n _Components2$Elements4 = Components2.Elements,\n root = _Components2$Elements4.root,\n toggle = _Components2$Elements4.toggle;\n var autoplay = options.autoplay;\n var hovered;\n var focused;\n var stopped = autoplay === \"pause\";\n\n function mount() {\n if (autoplay) {\n listen();\n toggle && setAttribute(toggle, ARIA_CONTROLS, Elements.track.id);\n stopped || play();\n update();\n }\n }\n\n function listen() {\n if (options.pauseOnHover) {\n bind(root, \"mouseenter mouseleave\", function (e) {\n hovered = e.type === \"mouseenter\";\n autoToggle();\n });\n }\n\n if (options.pauseOnFocus) {\n bind(root, \"focusin focusout\", function (e) {\n focused = e.type === \"focusin\";\n autoToggle();\n });\n }\n\n if (toggle) {\n bind(toggle, \"click\", function () {\n stopped ? play() : pause(true);\n });\n }\n\n on([EVENT_MOVE, EVENT_SCROLL, EVENT_REFRESH], interval.rewind);\n on(EVENT_MOVE, onMove);\n }\n\n function play() {\n if (isPaused() && Components2.Slides.isEnough()) {\n interval.start(!options.resetProgress);\n focused = hovered = stopped = false;\n update();\n emit(EVENT_AUTOPLAY_PLAY);\n }\n }\n\n function pause(stop) {\n if (stop === void 0) {\n stop = true;\n }\n\n stopped = !!stop;\n update();\n\n if (!isPaused()) {\n interval.pause();\n emit(EVENT_AUTOPLAY_PAUSE);\n }\n }\n\n function autoToggle() {\n if (!stopped) {\n hovered || focused ? pause(false) : play();\n }\n }\n\n function update() {\n if (toggle) {\n toggleClass(toggle, CLASS_ACTIVE, !stopped);\n setAttribute(toggle, ARIA_LABEL, options.i18n[stopped ? \"play\" : \"pause\"]);\n }\n }\n\n function onAnimationFrame(rate) {\n var bar = Elements.bar;\n bar && style(bar, \"width\", rate * 100 + \"%\");\n emit(EVENT_AUTOPLAY_PLAYING, rate);\n }\n\n function onMove(index) {\n var Slide = Components2.Slides.getAt(index);\n interval.set(Slide && +getAttribute(Slide.slide, INTERVAL_DATA_ATTRIBUTE) || options.interval);\n }\n\n return {\n mount: mount,\n destroy: interval.cancel,\n play: play,\n pause: pause,\n isPaused: isPaused\n };\n}\n\nfunction Cover(Splide2, Components2, options) {\n var _EventInterface7 = EventInterface(Splide2),\n on = _EventInterface7.on;\n\n function mount() {\n if (options.cover) {\n on(EVENT_LAZYLOAD_LOADED, apply(toggle, true));\n on([EVENT_MOUNTED, EVENT_UPDATED, EVENT_REFRESH], apply(cover, true));\n }\n }\n\n function cover(cover2) {\n Components2.Slides.forEach(function (Slide) {\n var img = child(Slide.container || Slide.slide, \"img\");\n\n if (img && img.src) {\n toggle(cover2, img, Slide);\n }\n });\n }\n\n function toggle(cover2, img, Slide) {\n Slide.style(\"background\", cover2 ? \"center/cover no-repeat url(\\\"\" + img.src + \"\\\")\" : \"\", true);\n display(img, cover2 ? \"none\" : \"\");\n }\n\n return {\n mount: mount,\n destroy: apply(cover, false)\n };\n}\n\nvar BOUNCE_DIFF_THRESHOLD = 10;\nvar BOUNCE_DURATION = 600;\nvar FRICTION_FACTOR = 0.6;\nvar BASE_VELOCITY = 1.5;\nvar MIN_DURATION = 800;\n\nfunction Scroll(Splide2, Components2, options) {\n var _EventInterface8 = EventInterface(Splide2),\n on = _EventInterface8.on,\n emit = _EventInterface8.emit;\n\n var set = Splide2.state.set;\n var Move = Components2.Move;\n var getPosition = Move.getPosition,\n getLimit = Move.getLimit,\n exceededLimit = Move.exceededLimit,\n translate = Move.translate;\n var isSlide = Splide2.is(SLIDE);\n var interval;\n var callback;\n var friction = 1;\n\n function mount() {\n on(EVENT_MOVE, clear);\n on([EVENT_UPDATED, EVENT_REFRESH], cancel);\n }\n\n function scroll(destination, duration, snap, onScrolled, noConstrain) {\n var from = getPosition();\n clear();\n\n if (snap && (!isSlide || !exceededLimit())) {\n var size = Components2.Layout.sliderSize();\n var offset = sign(destination) * size * floor(abs(destination) / size) || 0;\n destination = Move.toPosition(Components2.Controller.toDest(destination % size)) + offset;\n }\n\n var noDistance = approximatelyEqual(from, destination, 1);\n friction = 1;\n duration = noDistance ? 0 : duration || max(abs(destination - from) / BASE_VELOCITY, MIN_DURATION);\n callback = onScrolled;\n interval = RequestInterval(duration, onEnd, apply(update, from, destination, noConstrain), 1);\n set(SCROLLING);\n emit(EVENT_SCROLL);\n interval.start();\n }\n\n function onEnd() {\n set(IDLE);\n callback && callback();\n emit(EVENT_SCROLLED);\n }\n\n function update(from, to, noConstrain, rate) {\n var position = getPosition();\n var target = from + (to - from) * easing(rate);\n var diff = (target - position) * friction;\n translate(position + diff);\n\n if (isSlide && !noConstrain && exceededLimit()) {\n friction *= FRICTION_FACTOR;\n\n if (abs(diff) < BOUNCE_DIFF_THRESHOLD) {\n scroll(getLimit(exceededLimit(true)), BOUNCE_DURATION, false, callback, true);\n }\n }\n }\n\n function clear() {\n if (interval) {\n interval.cancel();\n }\n }\n\n function cancel() {\n if (interval && !interval.isPaused()) {\n clear();\n onEnd();\n }\n }\n\n function easing(t) {\n var easingFunc = options.easingFunc;\n return easingFunc ? easingFunc(t) : 1 - Math.pow(1 - t, 4);\n }\n\n return {\n mount: mount,\n destroy: clear,\n scroll: scroll,\n cancel: cancel\n };\n}\n\nvar SCROLL_LISTENER_OPTIONS = {\n passive: false,\n capture: true\n};\n\nfunction Drag(Splide2, Components2, options) {\n var _EventInterface9 = EventInterface(Splide2),\n on = _EventInterface9.on,\n emit = _EventInterface9.emit,\n bind = _EventInterface9.bind,\n unbind = _EventInterface9.unbind;\n\n var state = Splide2.state;\n var Move = Components2.Move,\n Scroll = Components2.Scroll,\n Controller = Components2.Controller,\n track = Components2.Elements.track,\n reduce = Components2.Media.reduce;\n var _Components2$Directio2 = Components2.Direction,\n resolve = _Components2$Directio2.resolve,\n orient = _Components2$Directio2.orient;\n var getPosition = Move.getPosition,\n exceededLimit = Move.exceededLimit;\n var basePosition;\n var baseEvent;\n var prevBaseEvent;\n var isFree;\n var dragging;\n var exceeded = false;\n var clickPrevented;\n var disabled;\n var target;\n\n function mount() {\n bind(track, POINTER_MOVE_EVENTS, noop, SCROLL_LISTENER_OPTIONS);\n bind(track, POINTER_UP_EVENTS, noop, SCROLL_LISTENER_OPTIONS);\n bind(track, POINTER_DOWN_EVENTS, onPointerDown, SCROLL_LISTENER_OPTIONS);\n bind(track, \"click\", onClick, {\n capture: true\n });\n bind(track, \"dragstart\", prevent);\n on([EVENT_MOUNTED, EVENT_UPDATED], init);\n }\n\n function init() {\n var drag = options.drag;\n disable(!drag);\n isFree = drag === \"free\";\n }\n\n function onPointerDown(e) {\n clickPrevented = false;\n\n if (!disabled) {\n var isTouch = isTouchEvent(e);\n\n if (isDraggable(e.target) && (isTouch || !e.button)) {\n if (!Controller.isBusy()) {\n target = isTouch ? track : window;\n dragging = state.is([MOVING, SCROLLING]);\n prevBaseEvent = null;\n bind(target, POINTER_MOVE_EVENTS, onPointerMove, SCROLL_LISTENER_OPTIONS);\n bind(target, POINTER_UP_EVENTS, onPointerUp, SCROLL_LISTENER_OPTIONS);\n Move.cancel();\n Scroll.cancel();\n save(e);\n } else {\n prevent(e, true);\n }\n }\n }\n }\n\n function onPointerMove(e) {\n if (!state.is(DRAGGING)) {\n state.set(DRAGGING);\n emit(EVENT_DRAG);\n }\n\n if (e.cancelable) {\n if (dragging) {\n Move.translate(basePosition + constrain(diffCoord(e)));\n var expired = diffTime(e) > LOG_INTERVAL;\n var hasExceeded = exceeded !== (exceeded = exceededLimit());\n\n if (expired || hasExceeded) {\n save(e);\n }\n\n clickPrevented = true;\n emit(EVENT_DRAGGING);\n prevent(e);\n } else if (isSliderDirection(e)) {\n dragging = shouldStart(e);\n prevent(e);\n }\n }\n }\n\n function onPointerUp(e) {\n if (state.is(DRAGGING)) {\n state.set(IDLE);\n emit(EVENT_DRAGGED);\n }\n\n if (dragging) {\n move(e);\n prevent(e);\n }\n\n unbind(target, POINTER_MOVE_EVENTS, onPointerMove);\n unbind(target, POINTER_UP_EVENTS, onPointerUp);\n dragging = false;\n }\n\n function onClick(e) {\n if (!disabled && clickPrevented) {\n prevent(e, true);\n }\n }\n\n function save(e) {\n prevBaseEvent = baseEvent;\n baseEvent = e;\n basePosition = getPosition();\n }\n\n function move(e) {\n var velocity = computeVelocity(e);\n var destination = computeDestination(velocity);\n var rewind = options.rewind && options.rewindByDrag;\n reduce(false);\n\n if (isFree) {\n Controller.scroll(destination, 0, options.snap);\n } else if (Splide2.is(FADE)) {\n Controller.go(orient(sign(velocity)) < 0 ? rewind ? \"<\" : \"-\" : rewind ? \">\" : \"+\");\n } else if (Splide2.is(SLIDE) && exceeded && rewind) {\n Controller.go(exceededLimit(true) ? \">\" : \"<\");\n } else {\n Controller.go(Controller.toDest(destination), true);\n }\n\n reduce(true);\n }\n\n function shouldStart(e) {\n var thresholds = options.dragMinThreshold;\n var isObj = isObject(thresholds);\n var mouse = isObj && thresholds.mouse || 0;\n var touch = (isObj ? thresholds.touch : +thresholds) || 10;\n return abs(diffCoord(e)) > (isTouchEvent(e) ? touch : mouse);\n }\n\n function isSliderDirection(e) {\n return abs(diffCoord(e)) > abs(diffCoord(e, true));\n }\n\n function computeVelocity(e) {\n if (Splide2.is(LOOP) || !exceeded) {\n var time = diffTime(e);\n\n if (time && time < LOG_INTERVAL) {\n return diffCoord(e) / time;\n }\n }\n\n return 0;\n }\n\n function computeDestination(velocity) {\n return getPosition() + sign(velocity) * min(abs(velocity) * (options.flickPower || 600), isFree ? Infinity : Components2.Layout.listSize() * (options.flickMaxPages || 1));\n }\n\n function diffCoord(e, orthogonal) {\n return coordOf(e, orthogonal) - coordOf(getBaseEvent(e), orthogonal);\n }\n\n function diffTime(e) {\n return timeOf(e) - timeOf(getBaseEvent(e));\n }\n\n function getBaseEvent(e) {\n return baseEvent === e && prevBaseEvent || baseEvent;\n }\n\n function coordOf(e, orthogonal) {\n return (isTouchEvent(e) ? e.changedTouches[0] : e)[\"page\" + resolve(orthogonal ? \"Y\" : \"X\")];\n }\n\n function constrain(diff) {\n return diff / (exceeded && Splide2.is(SLIDE) ? FRICTION : 1);\n }\n\n function isDraggable(target2) {\n var noDrag = options.noDrag;\n return !matches(target2, \".\" + CLASS_PAGINATION_PAGE + \", .\" + CLASS_ARROW) && (!noDrag || !matches(target2, noDrag));\n }\n\n function isTouchEvent(e) {\n return typeof TouchEvent !== \"undefined\" && e instanceof TouchEvent;\n }\n\n function isDragging() {\n return dragging;\n }\n\n function disable(value) {\n disabled = value;\n }\n\n return {\n mount: mount,\n disable: disable,\n isDragging: isDragging\n };\n}\n\nvar NORMALIZATION_MAP = {\n Spacebar: \" \",\n Right: ARROW_RIGHT,\n Left: ARROW_LEFT,\n Up: ARROW_UP,\n Down: ARROW_DOWN\n};\n\nfunction normalizeKey(key) {\n key = isString(key) ? key : key.key;\n return NORMALIZATION_MAP[key] || key;\n}\n\nvar KEYBOARD_EVENT = \"keydown\";\n\nfunction Keyboard(Splide2, Components2, options) {\n var _EventInterface10 = EventInterface(Splide2),\n on = _EventInterface10.on,\n bind = _EventInterface10.bind,\n unbind = _EventInterface10.unbind;\n\n var root = Splide2.root;\n var resolve = Components2.Direction.resolve;\n var target;\n var disabled;\n\n function mount() {\n init();\n on(EVENT_UPDATED, destroy);\n on(EVENT_UPDATED, init);\n on(EVENT_MOVE, onMove);\n }\n\n function init() {\n var keyboard = options.keyboard;\n\n if (keyboard) {\n target = keyboard === \"global\" ? window : root;\n bind(target, KEYBOARD_EVENT, onKeydown);\n }\n }\n\n function destroy() {\n unbind(target, KEYBOARD_EVENT);\n }\n\n function disable(value) {\n disabled = value;\n }\n\n function onMove() {\n var _disabled = disabled;\n disabled = true;\n nextTick(function () {\n disabled = _disabled;\n });\n }\n\n function onKeydown(e) {\n if (!disabled) {\n var key = normalizeKey(e);\n\n if (key === resolve(ARROW_LEFT)) {\n Splide2.go(\"<\");\n } else if (key === resolve(ARROW_RIGHT)) {\n Splide2.go(\">\");\n }\n }\n }\n\n return {\n mount: mount,\n destroy: destroy,\n disable: disable\n };\n}\n\nvar SRC_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-lazy\";\nvar SRCSET_DATA_ATTRIBUTE = SRC_DATA_ATTRIBUTE + \"-srcset\";\nvar IMAGE_SELECTOR = \"[\" + SRC_DATA_ATTRIBUTE + \"], [\" + SRCSET_DATA_ATTRIBUTE + \"]\";\n\nfunction LazyLoad(Splide2, Components2, options) {\n var _EventInterface11 = EventInterface(Splide2),\n on = _EventInterface11.on,\n off = _EventInterface11.off,\n bind = _EventInterface11.bind,\n emit = _EventInterface11.emit;\n\n var isSequential = options.lazyLoad === \"sequential\";\n var events = [EVENT_MOVED, EVENT_SCROLLED];\n var entries = [];\n\n function mount() {\n if (options.lazyLoad) {\n init();\n on(EVENT_REFRESH, init);\n }\n }\n\n function init() {\n empty(entries);\n register();\n\n if (isSequential) {\n loadNext();\n } else {\n off(events);\n on(events, check);\n check();\n }\n }\n\n function register() {\n Components2.Slides.forEach(function (Slide) {\n queryAll(Slide.slide, IMAGE_SELECTOR).forEach(function (img) {\n var src = getAttribute(img, SRC_DATA_ATTRIBUTE);\n var srcset = getAttribute(img, SRCSET_DATA_ATTRIBUTE);\n\n if (src !== img.src || srcset !== img.srcset) {\n var className = options.classes.spinner;\n var parent = img.parentElement;\n var spinner = child(parent, \".\" + className) || create(\"span\", className, parent);\n entries.push([img, Slide, spinner]);\n img.src || display(img, \"none\");\n }\n });\n });\n }\n\n function check() {\n entries = entries.filter(function (data) {\n var distance = options.perPage * ((options.preloadPages || 1) + 1) - 1;\n return data[1].isWithin(Splide2.index, distance) ? load(data) : true;\n });\n entries.length || off(events);\n }\n\n function load(data) {\n var img = data[0];\n addClass(data[1].slide, CLASS_LOADING);\n bind(img, \"load error\", apply(onLoad, data));\n setAttribute(img, \"src\", getAttribute(img, SRC_DATA_ATTRIBUTE));\n setAttribute(img, \"srcset\", getAttribute(img, SRCSET_DATA_ATTRIBUTE));\n removeAttribute(img, SRC_DATA_ATTRIBUTE);\n removeAttribute(img, SRCSET_DATA_ATTRIBUTE);\n }\n\n function onLoad(data, e) {\n var img = data[0],\n Slide = data[1];\n removeClass(Slide.slide, CLASS_LOADING);\n\n if (e.type !== \"error\") {\n remove(data[2]);\n display(img, \"\");\n emit(EVENT_LAZYLOAD_LOADED, img, Slide);\n emit(EVENT_RESIZE);\n }\n\n isSequential && loadNext();\n }\n\n function loadNext() {\n entries.length && load(entries.shift());\n }\n\n return {\n mount: mount,\n destroy: apply(empty, entries),\n check: check\n };\n}\n\nfunction Pagination(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on,\n emit = event.emit,\n bind = event.bind;\n var Slides = Components2.Slides,\n Elements = Components2.Elements,\n Controller = Components2.Controller;\n var hasFocus = Controller.hasFocus,\n getIndex = Controller.getIndex,\n go = Controller.go;\n var resolve = Components2.Direction.resolve;\n var placeholder = Elements.pagination;\n var items = [];\n var list;\n var paginationClasses;\n\n function mount() {\n destroy();\n on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], mount);\n var enabled = options.pagination;\n placeholder && display(placeholder, enabled ? \"\" : \"none\");\n\n if (enabled) {\n on([EVENT_MOVE, EVENT_SCROLL, EVENT_SCROLLED], update);\n createPagination();\n update();\n emit(EVENT_PAGINATION_MOUNTED, {\n list: list,\n items: items\n }, getAt(Splide2.index));\n }\n }\n\n function destroy() {\n if (list) {\n remove(placeholder ? slice(list.children) : list);\n removeClass(list, paginationClasses);\n empty(items);\n list = null;\n }\n\n event.destroy();\n }\n\n function createPagination() {\n var length = Splide2.length;\n var classes = options.classes,\n i18n = options.i18n,\n perPage = options.perPage;\n var max = hasFocus() ? Controller.getEnd() + 1 : ceil(length / perPage);\n list = placeholder || create(\"ul\", classes.pagination, Elements.track.parentElement);\n addClass(list, paginationClasses = CLASS_PAGINATION + \"--\" + getDirection());\n setAttribute(list, ROLE, \"tablist\");\n setAttribute(list, ARIA_LABEL, i18n.select);\n setAttribute(list, ARIA_ORIENTATION, getDirection() === TTB ? \"vertical\" : \"\");\n\n for (var i = 0; i < max; i++) {\n var li = create(\"li\", null, list);\n var button = create(\"button\", {\n class: classes.page,\n type: \"button\"\n }, li);\n var controls = Slides.getIn(i).map(function (Slide) {\n return Slide.slide.id;\n });\n var text = !hasFocus() && perPage > 1 ? i18n.pageX : i18n.slideX;\n bind(button, \"click\", apply(onClick, i));\n\n if (options.paginationKeyboard) {\n bind(button, \"keydown\", apply(onKeydown, i));\n }\n\n setAttribute(li, ROLE, \"presentation\");\n setAttribute(button, ROLE, \"tab\");\n setAttribute(button, ARIA_CONTROLS, controls.join(\" \"));\n setAttribute(button, ARIA_LABEL, format(text, i + 1));\n setAttribute(button, TAB_INDEX, -1);\n items.push({\n li: li,\n button: button,\n page: i\n });\n }\n }\n\n function onClick(page) {\n go(\">\" + page, true);\n }\n\n function onKeydown(page, e) {\n var length = items.length;\n var key = normalizeKey(e);\n var dir = getDirection();\n var nextPage = -1;\n\n if (key === resolve(ARROW_RIGHT, false, dir)) {\n nextPage = ++page % length;\n } else if (key === resolve(ARROW_LEFT, false, dir)) {\n nextPage = (--page + length) % length;\n } else if (key === \"Home\") {\n nextPage = 0;\n } else if (key === \"End\") {\n nextPage = length - 1;\n }\n\n var item = items[nextPage];\n\n if (item) {\n focus(item.button);\n go(\">\" + nextPage);\n prevent(e, true);\n }\n }\n\n function getDirection() {\n return options.paginationDirection || options.direction;\n }\n\n function getAt(index) {\n return items[Controller.toPage(index)];\n }\n\n function update() {\n var prev = getAt(getIndex(true));\n var curr = getAt(getIndex());\n\n if (prev) {\n var button = prev.button;\n removeClass(button, CLASS_ACTIVE);\n removeAttribute(button, ARIA_SELECTED);\n setAttribute(button, TAB_INDEX, -1);\n }\n\n if (curr) {\n var _button = curr.button;\n addClass(_button, CLASS_ACTIVE);\n setAttribute(_button, ARIA_SELECTED, true);\n setAttribute(_button, TAB_INDEX, \"\");\n }\n\n emit(EVENT_PAGINATION_UPDATED, {\n list: list,\n items: items\n }, prev, curr);\n }\n\n return {\n items: items,\n mount: mount,\n destroy: destroy,\n getAt: getAt,\n update: update\n };\n}\n\nvar TRIGGER_KEYS = [\" \", \"Enter\"];\n\nfunction Sync(Splide2, Components2, options) {\n var isNavigation = options.isNavigation,\n slideFocus = options.slideFocus;\n var events = [];\n\n function mount() {\n Splide2.splides.forEach(function (target) {\n if (!target.isParent) {\n sync(Splide2, target.splide);\n sync(target.splide, Splide2);\n }\n });\n\n if (isNavigation) {\n navigate();\n }\n }\n\n function destroy() {\n events.forEach(function (event) {\n event.destroy();\n });\n empty(events);\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function sync(splide, target) {\n var event = EventInterface(splide);\n event.on(EVENT_MOVE, function (index, prev, dest) {\n target.go(target.is(LOOP) ? dest : index);\n });\n events.push(event);\n }\n\n function navigate() {\n var event = EventInterface(Splide2);\n var on = event.on;\n on(EVENT_CLICK, onClick);\n on(EVENT_SLIDE_KEYDOWN, onKeydown);\n on([EVENT_MOUNTED, EVENT_UPDATED], update);\n events.push(event);\n event.emit(EVENT_NAVIGATION_MOUNTED, Splide2.splides);\n }\n\n function update() {\n setAttribute(Components2.Elements.list, ARIA_ORIENTATION, options.direction === TTB ? \"vertical\" : \"\");\n }\n\n function onClick(Slide) {\n Splide2.go(Slide.index);\n }\n\n function onKeydown(Slide, e) {\n if (includes(TRIGGER_KEYS, normalizeKey(e))) {\n onClick(Slide);\n prevent(e);\n }\n }\n\n return {\n setup: apply(Components2.Media.set, {\n slideFocus: isUndefined(slideFocus) ? isNavigation : slideFocus\n }, true),\n mount: mount,\n destroy: destroy,\n remount: remount\n };\n}\n\nfunction Wheel(Splide2, Components2, options) {\n var _EventInterface12 = EventInterface(Splide2),\n bind = _EventInterface12.bind;\n\n var lastTime = 0;\n\n function mount() {\n if (options.wheel) {\n bind(Components2.Elements.track, \"wheel\", onWheel, SCROLL_LISTENER_OPTIONS);\n }\n }\n\n function onWheel(e) {\n if (e.cancelable) {\n var deltaY = e.deltaY;\n var backwards = deltaY < 0;\n var timeStamp = timeOf(e);\n\n var _min = options.wheelMinThreshold || 0;\n\n var sleep = options.wheelSleep || 0;\n\n if (abs(deltaY) > _min && timeStamp - lastTime > sleep) {\n Splide2.go(backwards ? \"<\" : \">\");\n lastTime = timeStamp;\n }\n\n shouldPrevent(backwards) && prevent(e);\n }\n }\n\n function shouldPrevent(backwards) {\n return !options.releaseWheel || Splide2.state.is(MOVING) || Components2.Controller.getAdjacent(backwards) !== -1;\n }\n\n return {\n mount: mount\n };\n}\n\nvar SR_REMOVAL_DELAY = 90;\n\nfunction Live(Splide2, Components2, options) {\n var _EventInterface13 = EventInterface(Splide2),\n on = _EventInterface13.on;\n\n var track = Components2.Elements.track;\n var enabled = options.live && !options.isNavigation;\n var sr = create(\"span\", CLASS_SR);\n var interval = RequestInterval(SR_REMOVAL_DELAY, apply(toggle, false));\n\n function mount() {\n if (enabled) {\n disable(!Components2.Autoplay.isPaused());\n setAttribute(track, ARIA_ATOMIC, true);\n sr.textContent = \"\\u2026\";\n on(EVENT_AUTOPLAY_PLAY, apply(disable, true));\n on(EVENT_AUTOPLAY_PAUSE, apply(disable, false));\n on([EVENT_MOVED, EVENT_SCROLLED], apply(toggle, true));\n }\n }\n\n function toggle(active) {\n setAttribute(track, ARIA_BUSY, active);\n\n if (active) {\n append(track, sr);\n interval.start();\n } else {\n remove(sr);\n interval.cancel();\n }\n }\n\n function destroy() {\n removeAttribute(track, [ARIA_LIVE, ARIA_ATOMIC, ARIA_BUSY]);\n remove(sr);\n }\n\n function disable(disabled) {\n if (enabled) {\n setAttribute(track, ARIA_LIVE, disabled ? \"off\" : \"polite\");\n }\n }\n\n return {\n mount: mount,\n disable: disable,\n destroy: destroy\n };\n}\n\nvar ComponentConstructors = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Media: Media,\n Direction: Direction,\n Elements: Elements,\n Slides: Slides,\n Layout: Layout,\n Clones: Clones,\n Move: Move,\n Controller: Controller,\n Arrows: Arrows,\n Autoplay: Autoplay,\n Cover: Cover,\n Scroll: Scroll,\n Drag: Drag,\n Keyboard: Keyboard,\n LazyLoad: LazyLoad,\n Pagination: Pagination,\n Sync: Sync,\n Wheel: Wheel,\n Live: Live\n});\nvar I18N = {\n prev: \"Previous slide\",\n next: \"Next slide\",\n first: \"Go to first slide\",\n last: \"Go to last slide\",\n slideX: \"Go to slide %s\",\n pageX: \"Go to page %s\",\n play: \"Start autoplay\",\n pause: \"Pause autoplay\",\n carousel: \"carousel\",\n slide: \"slide\",\n select: \"Select a slide to show\",\n slideLabel: \"%s of %s\"\n};\nvar DEFAULTS = {\n type: \"slide\",\n role: \"region\",\n speed: 400,\n perPage: 1,\n cloneStatus: true,\n arrows: true,\n pagination: true,\n paginationKeyboard: true,\n interval: 5e3,\n pauseOnHover: true,\n pauseOnFocus: true,\n resetProgress: true,\n easing: \"cubic-bezier(0.25, 1, 0.5, 1)\",\n drag: true,\n direction: \"ltr\",\n trimSpace: true,\n focusableNodes: \"a, button, textarea, input, select, iframe\",\n live: true,\n classes: CLASSES,\n i18n: I18N,\n reducedMotion: {\n speed: 0,\n rewindSpeed: 0,\n autoplay: \"pause\"\n }\n};\n\nfunction Fade(Splide2, Components2, options) {\n var Slides = Components2.Slides;\n\n function mount() {\n EventInterface(Splide2).on([EVENT_MOUNTED, EVENT_REFRESH], init);\n }\n\n function init() {\n Slides.forEach(function (Slide) {\n Slide.style(\"transform\", \"translateX(-\" + 100 * Slide.index + \"%)\");\n });\n }\n\n function start(index, done) {\n Slides.style(\"transition\", \"opacity \" + options.speed + \"ms \" + options.easing);\n nextTick(done);\n }\n\n return {\n mount: mount,\n start: start,\n cancel: noop\n };\n}\n\nfunction Slide(Splide2, Components2, options) {\n var Move = Components2.Move,\n Controller = Components2.Controller,\n Scroll = Components2.Scroll;\n var list = Components2.Elements.list;\n var transition = apply(style, list, \"transition\");\n var endCallback;\n\n function mount() {\n EventInterface(Splide2).bind(list, \"transitionend\", function (e) {\n if (e.target === list && endCallback) {\n cancel();\n endCallback();\n }\n });\n }\n\n function start(index, done) {\n var destination = Move.toPosition(index, true);\n var position = Move.getPosition();\n var speed = getSpeed(index);\n\n if (abs(destination - position) >= 1 && speed >= 1) {\n if (options.useScroll) {\n Scroll.scroll(destination, speed, false, done);\n } else {\n transition(\"transform \" + speed + \"ms \" + options.easing);\n Move.translate(destination, true);\n endCallback = done;\n }\n } else {\n Move.jump(index);\n done();\n }\n }\n\n function cancel() {\n transition(\"\");\n Scroll.cancel();\n }\n\n function getSpeed(index) {\n var rewindSpeed = options.rewindSpeed;\n\n if (Splide2.is(SLIDE) && rewindSpeed) {\n var prev = Controller.getIndex(true);\n var end = Controller.getEnd();\n\n if (prev === 0 && index >= end || prev >= end && index === 0) {\n return rewindSpeed;\n }\n }\n\n return options.speed;\n }\n\n return {\n mount: mount,\n start: start,\n cancel: cancel\n };\n}\n\nvar _Splide = /*#__PURE__*/function () {\n function _Splide(target, options) {\n this.event = EventInterface();\n this.Components = {};\n this.state = State(CREATED);\n this.splides = [];\n this._o = {};\n this._E = {};\n var root = isString(target) ? query(document, target) : target;\n assert(root, root + \" is invalid.\");\n this.root = root;\n options = merge({\n label: getAttribute(root, ARIA_LABEL) || \"\",\n labelledby: getAttribute(root, ARIA_LABELLEDBY) || \"\"\n }, DEFAULTS, _Splide.defaults, options || {});\n\n try {\n merge(options, JSON.parse(getAttribute(root, DATA_ATTRIBUTE)));\n } catch (e) {\n assert(false, \"Invalid JSON\");\n }\n\n this._o = Object.create(merge({}, options));\n }\n\n var _proto = _Splide.prototype;\n\n _proto.mount = function mount(Extensions, Transition) {\n var _this = this;\n\n var state = this.state,\n Components2 = this.Components;\n assert(state.is([CREATED, DESTROYED]), \"Already mounted!\");\n state.set(CREATED);\n this._C = Components2;\n this._T = Transition || this._T || (this.is(FADE) ? Fade : Slide);\n this._E = Extensions || this._E;\n var Constructors = assign({}, ComponentConstructors, this._E, {\n Transition: this._T\n });\n forOwn(Constructors, function (Component, key) {\n var component = Component(_this, Components2, _this._o);\n Components2[key] = component;\n component.setup && component.setup();\n });\n forOwn(Components2, function (component) {\n component.mount && component.mount();\n });\n this.emit(EVENT_MOUNTED);\n addClass(this.root, CLASS_INITIALIZED);\n state.set(IDLE);\n this.emit(EVENT_READY);\n return this;\n };\n\n _proto.sync = function sync(splide) {\n this.splides.push({\n splide: splide\n });\n splide.splides.push({\n splide: this,\n isParent: true\n });\n\n if (this.state.is(IDLE)) {\n this._C.Sync.remount();\n\n splide.Components.Sync.remount();\n }\n\n return this;\n };\n\n _proto.go = function go(control) {\n this._C.Controller.go(control);\n\n return this;\n };\n\n _proto.on = function on(events, callback) {\n this.event.on(events, callback);\n return this;\n };\n\n _proto.off = function off(events) {\n this.event.off(events);\n return this;\n };\n\n _proto.emit = function emit(event) {\n var _this$event;\n\n (_this$event = this.event).emit.apply(_this$event, [event].concat(slice(arguments, 1)));\n\n return this;\n };\n\n _proto.add = function add(slides, index) {\n this._C.Slides.add(slides, index);\n\n return this;\n };\n\n _proto.remove = function remove(matcher) {\n this._C.Slides.remove(matcher);\n\n return this;\n };\n\n _proto.is = function is(type) {\n return this._o.type === type;\n };\n\n _proto.refresh = function refresh() {\n this.emit(EVENT_REFRESH);\n return this;\n };\n\n _proto.destroy = function destroy(completely) {\n if (completely === void 0) {\n completely = true;\n }\n\n var event = this.event,\n state = this.state;\n\n if (state.is(CREATED)) {\n EventInterface(this).on(EVENT_READY, this.destroy.bind(this, completely));\n } else {\n forOwn(this._C, function (component) {\n component.destroy && component.destroy(completely);\n }, true);\n event.emit(EVENT_DESTROY);\n event.destroy();\n completely && empty(this.splides);\n state.set(DESTROYED);\n }\n\n return this;\n };\n\n _createClass(_Splide, [{\n key: \"options\",\n get: function get() {\n return this._o;\n },\n set: function set(options) {\n this._C.Media.set(options, true, true);\n }\n }, {\n key: \"length\",\n get: function get() {\n return this._C.Slides.getLength(true);\n }\n }, {\n key: \"index\",\n get: function get() {\n return this._C.Controller.getIndex();\n }\n }]);\n\n return _Splide;\n}();\n\nvar Splide = _Splide;\nSplide.defaults = {};\nSplide.STATES = STATES;\nvar CLASS_RENDERED = \"is-rendered\";\nvar RENDERER_DEFAULT_CONFIG = {\n listTag: \"ul\",\n slideTag: \"li\"\n};\n\nvar Style = /*#__PURE__*/function () {\n function Style(id, options) {\n this.styles = {};\n this.id = id;\n this.options = options;\n }\n\n var _proto2 = Style.prototype;\n\n _proto2.rule = function rule(selector, prop, value, breakpoint) {\n breakpoint = breakpoint || \"default\";\n var selectors = this.styles[breakpoint] = this.styles[breakpoint] || {};\n var styles = selectors[selector] = selectors[selector] || {};\n styles[prop] = value;\n };\n\n _proto2.build = function build() {\n var _this2 = this;\n\n var css = \"\";\n\n if (this.styles.default) {\n css += this.buildSelectors(this.styles.default);\n }\n\n Object.keys(this.styles).sort(function (n, m) {\n return _this2.options.mediaQuery === \"min\" ? +n - +m : +m - +n;\n }).forEach(function (breakpoint) {\n if (breakpoint !== \"default\") {\n css += \"@media screen and (max-width: \" + breakpoint + \"px) {\";\n css += _this2.buildSelectors(_this2.styles[breakpoint]);\n css += \"}\";\n }\n });\n return css;\n };\n\n _proto2.buildSelectors = function buildSelectors(selectors) {\n var _this3 = this;\n\n var css = \"\";\n forOwn(selectors, function (styles, selector) {\n selector = (\"#\" + _this3.id + \" \" + selector).trim();\n css += selector + \" {\";\n forOwn(styles, function (value, prop) {\n if (value || value === 0) {\n css += prop + \": \" + value + \";\";\n }\n });\n css += \"}\";\n });\n return css;\n };\n\n return Style;\n}();\n\nvar SplideRenderer = /*#__PURE__*/function () {\n function SplideRenderer(contents, options, config, defaults) {\n this.slides = [];\n this.options = {};\n this.breakpoints = [];\n merge(DEFAULTS, defaults || {});\n merge(merge(this.options, DEFAULTS), options || {});\n this.contents = contents;\n this.config = assign({}, RENDERER_DEFAULT_CONFIG, config || {});\n this.id = this.config.id || uniqueId(\"splide\");\n this.Style = new Style(this.id, this.options);\n this.Direction = Direction(null, null, this.options);\n assert(this.contents.length, \"Provide at least 1 content.\");\n this.init();\n }\n\n SplideRenderer.clean = function clean(splide) {\n var _EventInterface14 = EventInterface(splide),\n on = _EventInterface14.on;\n\n var root = splide.root;\n var clones = queryAll(root, \".\" + CLASS_CLONE);\n on(EVENT_MOUNTED, function () {\n remove(child(root, \"style\"));\n });\n remove(clones);\n };\n\n var _proto3 = SplideRenderer.prototype;\n\n _proto3.init = function init() {\n this.parseBreakpoints();\n this.initSlides();\n this.registerRootStyles();\n this.registerTrackStyles();\n this.registerSlideStyles();\n this.registerListStyles();\n };\n\n _proto3.initSlides = function initSlides() {\n var _this4 = this;\n\n push(this.slides, this.contents.map(function (content, index) {\n content = isString(content) ? {\n html: content\n } : content;\n content.styles = content.styles || {};\n content.attrs = content.attrs || {};\n\n _this4.cover(content);\n\n var classes = _this4.options.classes.slide + \" \" + (index === 0 ? CLASS_ACTIVE : \"\");\n assign(content.attrs, {\n class: (classes + \" \" + (content.attrs.class || \"\")).trim(),\n style: _this4.buildStyles(content.styles)\n });\n return content;\n }));\n\n if (this.isLoop()) {\n this.generateClones(this.slides);\n }\n };\n\n _proto3.registerRootStyles = function registerRootStyles() {\n var _this5 = this;\n\n this.breakpoints.forEach(function (_ref2) {\n var width = _ref2[0],\n options = _ref2[1];\n\n _this5.Style.rule(\" \", \"max-width\", unit(options.width), width);\n });\n };\n\n _proto3.registerTrackStyles = function registerTrackStyles() {\n var _this6 = this;\n\n var Style2 = this.Style;\n var selector = \".\" + CLASS_TRACK;\n this.breakpoints.forEach(function (_ref3) {\n var width = _ref3[0],\n options = _ref3[1];\n Style2.rule(selector, _this6.resolve(\"paddingLeft\"), _this6.cssPadding(options, false), width);\n Style2.rule(selector, _this6.resolve(\"paddingRight\"), _this6.cssPadding(options, true), width);\n Style2.rule(selector, \"height\", _this6.cssTrackHeight(options), width);\n });\n };\n\n _proto3.registerListStyles = function registerListStyles() {\n var _this7 = this;\n\n var Style2 = this.Style;\n var selector = \".\" + CLASS_LIST;\n this.breakpoints.forEach(function (_ref4) {\n var width = _ref4[0],\n options = _ref4[1];\n Style2.rule(selector, \"transform\", _this7.buildTranslate(options), width);\n\n if (!_this7.cssSlideHeight(options)) {\n Style2.rule(selector, \"aspect-ratio\", _this7.cssAspectRatio(options), width);\n }\n });\n };\n\n _proto3.registerSlideStyles = function registerSlideStyles() {\n var _this8 = this;\n\n var Style2 = this.Style;\n var selector = \".\" + CLASS_SLIDE;\n this.breakpoints.forEach(function (_ref5) {\n var width = _ref5[0],\n options = _ref5[1];\n Style2.rule(selector, \"width\", _this8.cssSlideWidth(options), width);\n Style2.rule(selector, \"height\", _this8.cssSlideHeight(options) || \"100%\", width);\n Style2.rule(selector, _this8.resolve(\"marginRight\"), unit(options.gap) || \"0px\", width);\n Style2.rule(selector + \" > img\", \"display\", options.cover ? \"none\" : \"inline\", width);\n });\n };\n\n _proto3.buildTranslate = function buildTranslate(options) {\n var _this$Direction = this.Direction,\n resolve = _this$Direction.resolve,\n orient = _this$Direction.orient;\n var values = [];\n values.push(this.cssOffsetClones(options));\n values.push(this.cssOffsetGaps(options));\n\n if (this.isCenter(options)) {\n values.push(this.buildCssValue(orient(-50), \"%\"));\n values.push.apply(values, this.cssOffsetCenter(options));\n }\n\n return values.filter(Boolean).map(function (value) {\n return \"translate\" + resolve(\"X\") + \"(\" + value + \")\";\n }).join(\" \");\n };\n\n _proto3.cssOffsetClones = function cssOffsetClones(options) {\n var _this$Direction2 = this.Direction,\n resolve = _this$Direction2.resolve,\n orient = _this$Direction2.orient;\n var cloneCount = this.getCloneCount();\n\n if (this.isFixedWidth(options)) {\n var _this$parseCssValue = this.parseCssValue(options[resolve(\"fixedWidth\")]),\n value = _this$parseCssValue.value,\n unit2 = _this$parseCssValue.unit;\n\n return this.buildCssValue(orient(value) * cloneCount, unit2);\n }\n\n var percent = 100 * cloneCount / options.perPage;\n return orient(percent) + \"%\";\n };\n\n _proto3.cssOffsetCenter = function cssOffsetCenter(options) {\n var _this$Direction3 = this.Direction,\n resolve = _this$Direction3.resolve,\n orient = _this$Direction3.orient;\n\n if (this.isFixedWidth(options)) {\n var _this$parseCssValue2 = this.parseCssValue(options[resolve(\"fixedWidth\")]),\n value = _this$parseCssValue2.value,\n unit2 = _this$parseCssValue2.unit;\n\n return [this.buildCssValue(orient(value / 2), unit2)];\n }\n\n var values = [];\n var perPage = options.perPage,\n gap = options.gap;\n values.push(orient(50 / perPage) + \"%\");\n\n if (gap) {\n var _this$parseCssValue3 = this.parseCssValue(gap),\n _value = _this$parseCssValue3.value,\n _unit = _this$parseCssValue3.unit;\n\n var gapOffset = (_value / perPage - _value) / 2;\n values.push(this.buildCssValue(orient(gapOffset), _unit));\n }\n\n return values;\n };\n\n _proto3.cssOffsetGaps = function cssOffsetGaps(options) {\n var cloneCount = this.getCloneCount();\n\n if (cloneCount && options.gap) {\n var orient = this.Direction.orient;\n\n var _this$parseCssValue4 = this.parseCssValue(options.gap),\n value = _this$parseCssValue4.value,\n unit2 = _this$parseCssValue4.unit;\n\n if (this.isFixedWidth(options)) {\n return this.buildCssValue(orient(value * cloneCount), unit2);\n }\n\n var perPage = options.perPage;\n var gaps = cloneCount / perPage;\n return this.buildCssValue(orient(gaps * value), unit2);\n }\n\n return \"\";\n };\n\n _proto3.resolve = function resolve(prop) {\n return camelToKebab(this.Direction.resolve(prop));\n };\n\n _proto3.cssPadding = function cssPadding(options, right) {\n var padding = options.padding;\n var prop = this.Direction.resolve(right ? \"right\" : \"left\", true);\n return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n };\n\n _proto3.cssTrackHeight = function cssTrackHeight(options) {\n var height = \"\";\n\n if (this.isVertical()) {\n height = this.cssHeight(options);\n assert(height, '\"height\" is missing.');\n height = \"calc(\" + height + \" - \" + this.cssPadding(options, false) + \" - \" + this.cssPadding(options, true) + \")\";\n }\n\n return height;\n };\n\n _proto3.cssHeight = function cssHeight(options) {\n return unit(options.height);\n };\n\n _proto3.cssSlideWidth = function cssSlideWidth(options) {\n return options.autoWidth ? \"\" : unit(options.fixedWidth) || (this.isVertical() ? \"\" : this.cssSlideSize(options));\n };\n\n _proto3.cssSlideHeight = function cssSlideHeight(options) {\n return unit(options.fixedHeight) || (this.isVertical() ? options.autoHeight ? \"\" : this.cssSlideSize(options) : this.cssHeight(options));\n };\n\n _proto3.cssSlideSize = function cssSlideSize(options) {\n var gap = unit(options.gap);\n return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n };\n\n _proto3.cssAspectRatio = function cssAspectRatio(options) {\n var heightRatio = options.heightRatio;\n return heightRatio ? \"\" + 1 / heightRatio : \"\";\n };\n\n _proto3.buildCssValue = function buildCssValue(value, unit2) {\n return \"\" + value + unit2;\n };\n\n _proto3.parseCssValue = function parseCssValue(value) {\n if (isString(value)) {\n var number = parseFloat(value) || 0;\n var unit2 = value.replace(/\\d*(\\.\\d*)?/, \"\") || \"px\";\n return {\n value: number,\n unit: unit2\n };\n }\n\n return {\n value: value,\n unit: \"px\"\n };\n };\n\n _proto3.parseBreakpoints = function parseBreakpoints() {\n var _this9 = this;\n\n var breakpoints = this.options.breakpoints;\n this.breakpoints.push([\"default\", this.options]);\n\n if (breakpoints) {\n forOwn(breakpoints, function (options, width) {\n _this9.breakpoints.push([width, merge(merge({}, _this9.options), options)]);\n });\n }\n };\n\n _proto3.isFixedWidth = function isFixedWidth(options) {\n return !!options[this.Direction.resolve(\"fixedWidth\")];\n };\n\n _proto3.isLoop = function isLoop() {\n return this.options.type === LOOP;\n };\n\n _proto3.isCenter = function isCenter(options) {\n if (options.focus === \"center\") {\n if (this.isLoop()) {\n return true;\n }\n\n if (this.options.type === SLIDE) {\n return !this.options.trimSpace;\n }\n }\n\n return false;\n };\n\n _proto3.isVertical = function isVertical() {\n return this.options.direction === TTB;\n };\n\n _proto3.buildClasses = function buildClasses() {\n var options = this.options;\n return [CLASS_ROOT, CLASS_ROOT + \"--\" + options.type, CLASS_ROOT + \"--\" + options.direction, options.drag && CLASS_ROOT + \"--draggable\", options.isNavigation && CLASS_ROOT + \"--nav\", CLASS_ACTIVE, !this.config.hidden && CLASS_RENDERED].filter(Boolean).join(\" \");\n };\n\n _proto3.buildAttrs = function buildAttrs(attrs) {\n var attr = \"\";\n forOwn(attrs, function (value, key) {\n attr += value ? \" \" + camelToKebab(key) + \"=\\\"\" + value + \"\\\"\" : \"\";\n });\n return attr.trim();\n };\n\n _proto3.buildStyles = function buildStyles(styles) {\n var style = \"\";\n forOwn(styles, function (value, key) {\n style += \" \" + camelToKebab(key) + \":\" + value + \";\";\n });\n return style.trim();\n };\n\n _proto3.renderSlides = function renderSlides() {\n var _this10 = this;\n\n var tag = this.config.slideTag;\n return this.slides.map(function (content) {\n return \"<\" + tag + \" \" + _this10.buildAttrs(content.attrs) + \">\" + (content.html || \"\") + \"</\" + tag + \">\";\n }).join(\"\");\n };\n\n _proto3.cover = function cover(content) {\n var styles = content.styles,\n _content$html = content.html,\n html = _content$html === void 0 ? \"\" : _content$html;\n\n if (this.options.cover && !this.options.lazyLoad) {\n var src = html.match(/<img.*?src\\s*=\\s*(['\"])(.+?)\\1.*?>/);\n\n if (src && src[2]) {\n styles.background = \"center/cover no-repeat url('\" + src[2] + \"')\";\n }\n }\n };\n\n _proto3.generateClones = function generateClones(contents) {\n var classes = this.options.classes;\n var count = this.getCloneCount();\n var slides = contents.slice();\n\n while (slides.length < count) {\n push(slides, slides);\n }\n\n push(slides.slice(-count).reverse(), slides.slice(0, count)).forEach(function (content, index) {\n var attrs = assign({}, content.attrs, {\n class: content.attrs.class + \" \" + classes.clone\n });\n var clone = assign({}, content, {\n attrs: attrs\n });\n index < count ? contents.unshift(clone) : contents.push(clone);\n });\n };\n\n _proto3.getCloneCount = function getCloneCount() {\n if (this.isLoop()) {\n var options = this.options;\n\n if (options.clones) {\n return options.clones;\n }\n\n var perPage = max.apply(void 0, this.breakpoints.map(function (_ref6) {\n var options2 = _ref6[1];\n return options2.perPage;\n }));\n return perPage * ((options.flickMaxPages || 1) + 1);\n }\n\n return 0;\n };\n\n _proto3.renderArrows = function renderArrows() {\n var html = \"\";\n html += \"<div class=\\\"\" + this.options.classes.arrows + \"\\\">\";\n html += this.renderArrow(true);\n html += this.renderArrow(false);\n html += \"</div>\";\n return html;\n };\n\n _proto3.renderArrow = function renderArrow(prev) {\n var _this$options = this.options,\n classes = _this$options.classes,\n i18n = _this$options.i18n;\n var attrs = {\n class: classes.arrow + \" \" + (prev ? classes.prev : classes.next),\n type: \"button\",\n ariaLabel: prev ? i18n.prev : i18n.next\n };\n return \"<button \" + this.buildAttrs(attrs) + \"><svg xmlns=\\\"\" + XML_NAME_SPACE + \"\\\" viewBox=\\\"0 0 \" + SIZE + \" \" + SIZE + \"\\\" width=\\\"\" + SIZE + \"\\\" height=\\\"\" + SIZE + \"\\\"><path d=\\\"\" + (this.options.arrowPath || PATH) + \"\\\" /></svg></button>\";\n };\n\n _proto3.html = function html() {\n var _this$config = this.config,\n rootClass = _this$config.rootClass,\n listTag = _this$config.listTag,\n arrows = _this$config.arrows,\n beforeTrack = _this$config.beforeTrack,\n afterTrack = _this$config.afterTrack,\n slider = _this$config.slider,\n beforeSlider = _this$config.beforeSlider,\n afterSlider = _this$config.afterSlider;\n var html = \"\";\n html += \"<div id=\\\"\" + this.id + \"\\\" class=\\\"\" + this.buildClasses() + \" \" + (rootClass || \"\") + \"\\\">\";\n html += \"<style>\" + this.Style.build() + \"</style>\";\n\n if (slider) {\n html += beforeSlider || \"\";\n html += \"<div class=\\\"splide__slider\\\">\";\n }\n\n html += beforeTrack || \"\";\n\n if (arrows) {\n html += this.renderArrows();\n }\n\n html += \"<div class=\\\"splide__track\\\">\";\n html += \"<\" + listTag + \" class=\\\"splide__list\\\">\";\n html += this.renderSlides();\n html += \"</\" + listTag + \">\";\n html += \"</div>\";\n html += afterTrack || \"\";\n\n if (slider) {\n html += \"</div>\";\n html += afterSlider || \"\";\n }\n\n html += \"</div>\";\n return html;\n };\n\n return SplideRenderer;\n}();\n\nexport { CLASSES, CLASS_ACTIVE, CLASS_ARROW, CLASS_ARROWS, CLASS_ARROW_NEXT, CLASS_ARROW_PREV, CLASS_CLONE, CLASS_CONTAINER, CLASS_FOCUS_IN, CLASS_INITIALIZED, CLASS_LIST, CLASS_LOADING, CLASS_NEXT, CLASS_OVERFLOW, CLASS_PAGINATION, CLASS_PAGINATION_PAGE, CLASS_PREV, CLASS_PROGRESS, CLASS_PROGRESS_BAR, CLASS_ROOT, CLASS_SLIDE, CLASS_SPINNER, CLASS_SR, CLASS_TOGGLE, CLASS_TOGGLE_PAUSE, CLASS_TOGGLE_PLAY, CLASS_TRACK, CLASS_VISIBLE, DEFAULTS, EVENT_ACTIVE, EVENT_ARROWS_MOUNTED, EVENT_ARROWS_UPDATED, EVENT_AUTOPLAY_PAUSE, EVENT_AUTOPLAY_PLAY, EVENT_AUTOPLAY_PLAYING, EVENT_CLICK, EVENT_DESTROY, EVENT_DRAG, EVENT_DRAGGED, EVENT_DRAGGING, EVENT_END_INDEX_CHANGED, EVENT_HIDDEN, EVENT_INACTIVE, EVENT_LAZYLOAD_LOADED, EVENT_MOUNTED, EVENT_MOVE, EVENT_MOVED, EVENT_NAVIGATION_MOUNTED, EVENT_OVERFLOW, EVENT_PAGINATION_MOUNTED, EVENT_PAGINATION_UPDATED, EVENT_READY, EVENT_REFRESH, EVENT_RESIZE, EVENT_RESIZED, EVENT_SCROLL, EVENT_SCROLLED, EVENT_SHIFTED, EVENT_SLIDE_KEYDOWN, EVENT_UPDATED, EVENT_VISIBLE, EventBinder, EventInterface, FADE, LOOP, LTR, RTL, RequestInterval, SLIDE, STATUS_CLASSES, Splide, SplideRenderer, State, TTB, Throttle, Splide as default };\n",".splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__arrow{-ms-flex-align:center;align-items:center;background:#ccc;border:0;border-radius:50%;cursor:pointer;display:-ms-flexbox;display:flex;height:2em;-ms-flex-pack:center;justify-content:center;opacity:.7;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:2em;z-index:1}.splide__arrow svg{fill:#000;height:1.2em;width:1.2em}.splide__arrow:hover:not(:disabled){opacity:.9}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:3px solid #0bf;outline-offset:3px}.splide__pagination{bottom:.5em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:50%;display:inline-block;height:8px;margin:3px;opacity:.7;padding:0;position:relative;transition:transform .2s linear;width:8px}.splide__pagination__page.is-active{background:#fff;transform:scale(1.4);z-index:1}.splide__pagination__page:hover{cursor:pointer;opacity:.9}.splide__pagination__page:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:3px solid #0bf;outline-offset:3px}.splide__progress__bar{background:#ccc;height:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0)}.splide__slide:focus{outline:0}@supports(outline-offset:-3px){.splide__slide:focus-visible{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide__slide:focus-visible{border:3px solid #0bf}}@supports(outline-offset:-3px){.splide.is-focus-in .splide__slide:focus{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide.is-focus-in .splide__slide:focus{border:3px solid #0bf}.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#0bf}}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:3px solid #0bf;outline-offset:3px}.splide__track--nav>.splide__list>.splide__slide{border:3px solid transparent;cursor:pointer}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #000}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotate(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotate(90deg)}.splide__pagination--ttb{bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;left:auto;padding:1em 0;right:.5em;top:0}","import { JaaqVideoPlayer } from './VideoPlayer';\nimport type { PlayerConfig } from '@ui/shared/types';\n\n/**\n * Internal registry mapping DOM elements to their player instances\n */\nconst playerRegistry = new WeakMap<Element, JaaqVideoPlayer>();\n\n/**\n * Internal list of all initialized players for cleanup operations\n */\nconst playerList: Array<{ element: Element; player: JaaqVideoPlayer }> = [];\n\n/**\n * Parses data attributes from a DOM element to create player configuration\n * @param element - DOM element with data-* attributes\n * @returns Player configuration object or null if required attributes are missing\n */\nfunction parseDataAttributes(element: Element): PlayerConfig | null {\n const apiKey = element.getAttribute('data-api-key');\n const clientId = element.getAttribute('data-client-id');\n const videoId = element.getAttribute('data-video-id');\n\n if (!apiKey || !clientId || !videoId) {\n console.error('JAAQ Player: Missing required attributes (data-api-key, data-client-id, data-video-id)', element);\n return null;\n }\n\n const config: PlayerConfig = {\n apiKey,\n clientId,\n videoId,\n };\n\n const autoplay = element.getAttribute('data-autoplay');\n if (autoplay !== null) {\n config.autoplay = autoplay === 'true';\n }\n\n const width = element.getAttribute('data-width');\n if (width) {\n config.width = width;\n }\n\n const height = element.getAttribute('data-height');\n if (height) {\n config.height = height;\n }\n\n const baseUrl = element.getAttribute('data-base-url');\n if (baseUrl) {\n config.baseUrl = baseUrl;\n }\n\n const className = element.getAttribute('data-class-name');\n if (className) {\n config.className = className;\n }\n\n return config;\n}\n\n/**\n * Initializes a video player for a given DOM element\n * @param element - DOM element to initialize player for\n * @returns Initialized player instance or null if initialization fails\n */\nfunction initializePlayer(element: Element): JaaqVideoPlayer | null {\n if (playerRegistry.has(element)) {\n return playerRegistry.get(element)!;\n }\n\n const config = parseDataAttributes(element);\n if (!config) {\n return null;\n }\n\n try {\n const player = new JaaqVideoPlayer(element as HTMLElement, config);\n playerRegistry.set(element, player);\n playerList.push({ element, player });\n return player;\n } catch (error) {\n console.error('JAAQ Player: Failed to initialize player', error, element);\n return null;\n }\n}\n\n/**\n * Initializes all video players with data-jaaq-player attribute\n * @param rootElement - Root element to search for players (defaults to document)\n */\nfunction initializePlayers(rootElement: Document | Element = document): void {\n const elements = rootElement.querySelectorAll('[data-jaaq-player]');\n elements.forEach((element) => {\n initializePlayer(element);\n });\n}\n\n/**\n * Retrieves a player instance for a given element or selector\n * @param elementOrSelector - DOM element or CSS selector\n * @returns Player instance or null if not found\n */\nfunction getPlayer(elementOrSelector: Element | string): JaaqVideoPlayer | null {\n let element: Element | null;\n\n if (typeof elementOrSelector === 'string') {\n element = document.querySelector(elementOrSelector);\n if (!element) {\n console.error('JAAQ Player: Element not found for selector', elementOrSelector);\n return null;\n }\n } else {\n element = elementOrSelector;\n }\n\n return playerRegistry.get(element) || null;\n}\n\n/**\n * Destroys all initialized player instances and cleans up resources\n */\nfunction destroyAll(): void {\n playerList.forEach(({ element, player }) => {\n try {\n player.destroy();\n playerRegistry.delete(element);\n } catch (error) {\n console.error('JAAQ Player: Error destroying player', error);\n }\n });\n playerList.length = 0;\n}\n\n/**\n * Auto-initialization API for declarative video player setup\n * Automatically finds and initializes players marked with [data-jaaq-player]\n * @example\n * // Auto-initialization on page load\n * <div data-jaaq-player data-api-key=\"key\" data-client-id=\"id\" data-video-id=\"video\"></div>\n *\n * // Manual initialization\n * JaaqPlayer.init();\n *\n * // Get player instance\n * const player = JaaqPlayer.getPlayer('[data-video-id=\"video\"]');\n * player.on('play', () => console.log('Playing'));\n */\nexport const JaaqPlayer = {\n /** Initialize all players with [data-jaaq-player] attribute */\n init: initializePlayers,\n /** Get player instance by element or selector */\n getPlayer,\n /** Destroy all initialized players */\n destroyAll,\n};\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n initializePlayers();\n });\n } else {\n initializePlayers();\n }\n}\n",".jaaq-collection-player {\n width: 100%;\n max-width: 1400px;\n margin: 0 auto;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n}\n\n.jaaq-collection-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 400px;\n}\n\n.jaaq-collection-spinner {\n width: 50px;\n height: 50px;\n border: 4px solid rgba(0, 123, 255, 0.3);\n border-top-color: #007bff;\n border-radius: 50%;\n animation: jaaq-collection-spin 1s linear infinite;\n}\n\n@keyframes jaaq-collection-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n.jaaq-collection-error {\n background: rgba(220, 53, 69, 0.9);\n color: white;\n padding: 16px 24px;\n border-radius: 8px;\n text-align: center;\n font-size: 14px;\n margin: 20px;\n}\n\n.jaaq-collection-carousel .splide__track {\n padding: 40px 0;\n}\n\n.jaaq-collection-carousel .splide__slide {\n opacity: 0.7;\n transition: all 0.3s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.jaaq-collection-carousel .splide__slide.is-active {\n opacity: 1;\n}\n\n.jaaq-collection-carousel .splide__slide jaaq-video-player {\n width: 100%;\n max-width: 600px;\n transition: all 0.3s ease;\n}\n\n.jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 800px;\n}\n\n.jaaq-collection-carousel .splide__arrow {\n background: rgba(0, 0, 0, 0.5);\n border: none;\n width: 48px;\n height: 48px;\n border-radius: 50%;\n color: white;\n cursor: pointer;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n}\n\n.jaaq-collection-carousel .splide__arrow:hover {\n background: rgba(0, 0, 0, 0.8);\n transform: scale(1.1);\n}\n\n.jaaq-collection-carousel .splide__arrow:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.jaaq-collection-carousel .splide__arrow svg {\n fill: white;\n width: 20px;\n height: 20px;\n}\n\n.jaaq-collection-carousel .splide__pagination {\n bottom: -30px;\n}\n\n.jaaq-collection-carousel .splide__pagination__page {\n background: #ccc;\n border: none;\n width: 10px;\n height: 10px;\n margin: 0 4px;\n border-radius: 50%;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.jaaq-collection-carousel .splide__pagination__page.is-active {\n background: white;\n transform: scale(1.3);\n}\n\n@media (max-width: 1024px) {\n .jaaq-collection-carousel .splide__slide jaaq-video-player {\n max-width: 500px;\n }\n\n .jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 650px;\n }\n}\n\n@media (max-width: 768px) {\n .jaaq-collection-carousel .splide__track {\n padding: 20px 0;\n }\n\n .jaaq-collection-carousel .splide__slide jaaq-video-player {\n max-width: 400px;\n }\n\n .jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 500px;\n }\n\n .jaaq-collection-carousel .splide__arrow {\n width: 40px;\n height: 40px;\n }\n}\n\n@media (max-width: 480px) {\n .jaaq-collection-carousel .splide__slide jaaq-video-player {\n max-width: 100%;\n }\n\n .jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 100%;\n }\n}\n","import Splide from '@splidejs/splide';\nimport { JaaqClient, BASE_URL } from '@src/index';\nimport type { CollectionDTO } from '@src/types';\nimport sharedStyles from '@ui/shared/styles.css';\nimport collectionStyles from './CollectionPlayer.css';\nimport splideStyles from '@splidejs/splide/css';\n\nconst COMPONENT_STYLES = `\n:host {\n display: block;\n width: 100%;\n}\n\n:host([hidden]) {\n display: none;\n}\n`;\n\nexport class JaaqCollectionPlayerElement extends HTMLElement {\n private splide: Splide | null = null;\n private container: HTMLDivElement | null = null;\n private carouselElement: HTMLDivElement | null = null;\n private clientInstance: JaaqClient | null = null;\n private connected = false;\n private collectionData: CollectionDTO | null = null;\n private autoplayTimeoutId: number | null = null;\n\n static get observedAttributes() {\n return [\n 'collection-id',\n 'api-key',\n 'client-id',\n 'subscription-id',\n 'base-url',\n 'autoplay',\n 'show-arrows',\n 'show-dots',\n 'video-settings',\n ];\n }\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n this.connected = true;\n this.render();\n this.initCarousel();\n }\n\n disconnectedCallback() {\n this.connected = false;\n this.destroyCarousel();\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {\n if (!this.connected || oldValue === newValue) return;\n\n if (name === 'collection-id' || name === 'video-settings') {\n this.destroyCarousel();\n this.initCarousel();\n }\n\n if (name === 'show-arrows' || name === 'show-dots') {\n this.destroyCarousel();\n this.initCarousel();\n }\n }\n\n private getBooleanAttr(name: string, defaultValue: boolean): boolean {\n const v = this.getAttribute(name);\n if (v === null) return defaultValue;\n return v !== 'false';\n }\n\n private render() {\n if (!this.shadowRoot) return;\n\n const styleSheet = document.createElement('style');\n styleSheet.textContent = `\n ${sharedStyles}\n ${collectionStyles}\n ${splideStyles}\n ${COMPONENT_STYLES}\n `;\n\n this.container = document.createElement('div');\n this.container.className = 'jaaq-collection-player';\n\n this.shadowRoot.appendChild(styleSheet);\n this.shadowRoot.appendChild(this.container);\n }\n\n private async initCarousel() {\n if (!this.container) return;\n\n const collectionId = this.getAttribute('collection-id');\n if (!collectionId) {\n this.emitError(new Error('collection-id attribute is required'));\n return;\n }\n\n const apiKey = this.getAttribute('api-key');\n const clientId = this.getAttribute('client-id');\n const baseUrl = this.getAttribute('base-url') || undefined;\n\n if (!this.clientInstance && !apiKey && !clientId) {\n this.emitError(new Error('Either client property or api-key and client-id attributes are required'));\n return;\n }\n\n this.showLoading();\n\n try {\n const client =\n this.clientInstance ||\n JaaqClient.init({\n apiKey: apiKey!,\n clientId: clientId!,\n baseUrl: baseUrl || BASE_URL,\n });\n\n this.collectionData = await client.collections.getById(collectionId);\n\n if (!this.collectionData.videos || this.collectionData.videos.length === 0) {\n this.emitError(new Error('No videos found in collection'));\n return;\n }\n\n this.renderCarousel();\n this.initSplide();\n\n this.dispatchEvent(\n new CustomEvent('jaaq:collection:loaded', {\n detail: this.collectionData,\n bubbles: true,\n composed: true,\n }),\n );\n } catch (error) {\n this.emitError(error instanceof Error ? error : new Error('Failed to load collection'));\n }\n }\n\n private showLoading() {\n if (!this.container) return;\n this.container.innerHTML = `\n <div class=\"jaaq-collection-loading\">\n <div class=\"jaaq-collection-spinner\"></div>\n </div>\n `;\n }\n\n private renderCarousel() {\n if (!this.container || !this.collectionData) return;\n\n this.container.innerHTML = '';\n\n this.carouselElement = document.createElement('div');\n this.carouselElement.className = 'splide jaaq-collection-carousel';\n\n const track = document.createElement('div');\n track.className = 'splide__track';\n\n const list = document.createElement('ul');\n list.className = 'splide__list';\n\n const apiKey = this.getAttribute('api-key');\n const clientId = this.getAttribute('client-id');\n const baseUrl = this.getAttribute('base-url');\n const videoSettingsAttr = this.getAttribute('video-settings');\n let videoSettings: Record<string, unknown> | null = null;\n if (videoSettingsAttr) {\n try {\n videoSettings = JSON.parse(videoSettingsAttr);\n } catch (e) {\n console.warn('[CollectionPlayer] Failed to parse video-settings attribute', e);\n }\n }\n\n this.collectionData.videos.forEach((video) => {\n const slide = document.createElement('li');\n slide.className = 'splide__slide';\n\n const player = document.createElement('jaaq-video-player');\n player.setAttribute('video-id', video.videoId);\n if (apiKey) player.setAttribute('api-key', apiKey);\n if (clientId) player.setAttribute('client-id', clientId);\n if (baseUrl) player.setAttribute('base-url', baseUrl);\n player.setAttribute('autoplay', 'false');\n player.setAttribute('width', '100%');\n\n if (videoSettings) {\n if (videoSettings.controls !== undefined) {\n player.setAttribute('controls', String(videoSettings.controls));\n }\n if (videoSettings.showLogo !== undefined) {\n player.setAttribute('show-logo', String(videoSettings.showLogo));\n }\n if (videoSettings.showTitle !== undefined) {\n player.setAttribute('show-title', String(videoSettings.showTitle));\n }\n if (videoSettings.showAuthor !== undefined) {\n player.setAttribute('show-author', String(videoSettings.showAuthor));\n }\n if (videoSettings.showDescription !== undefined) {\n player.setAttribute('show-description', String(videoSettings.showDescription));\n }\n if (videoSettings.showCaptions !== undefined) {\n player.setAttribute('show-captions', String(videoSettings.showCaptions));\n }\n if (videoSettings.startMuted !== undefined) {\n player.setAttribute('start-muted', String(videoSettings.startMuted));\n }\n if (videoSettings.width !== undefined) {\n player.setAttribute('width', String(videoSettings.width));\n }\n if (videoSettings.height !== undefined) {\n player.setAttribute('height', String(videoSettings.height));\n }\n }\n\n slide.appendChild(player);\n list.appendChild(slide);\n });\n\n track.appendChild(list);\n this.carouselElement.appendChild(track);\n this.container.appendChild(this.carouselElement);\n }\n\n private initSplide() {\n if (!this.carouselElement) return;\n\n const showArrows = this.getBooleanAttr('show-arrows', true);\n const showDots = this.getBooleanAttr('show-dots', true);\n\n this.splide = new Splide(this.carouselElement, {\n type: 'loop',\n perPage: 3,\n focus: 'center',\n gap: '0.5rem',\n perMove: 1,\n autoHeight: true,\n updateOnMove: true,\n padding: '5 rem',\n breakpoints: {\n 768: {\n perPage: 1,\n },\n 1024: {\n perPage: 2,\n },\n },\n arrows: showArrows,\n pagination: showDots,\n autoplay: false,\n });\n\n this.splide.on('moved', (newIndex: number) => {\n console.log('[CollectionPlayer] Splide moved event', {\n newIndex,\n splideIndex: this.splide?.index,\n Components: this.splide?.Components,\n });\n this.handleSlideChange(newIndex);\n\n this.dispatchEvent(\n new CustomEvent('jaaq:collection:slidechange', {\n detail: { index: newIndex, video: this.collectionData?.videos[newIndex] },\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.splide.mount();\n\n console.log('[CollectionPlayer] After mount', {\n splideIndex: this.splide.index,\n length: this.splide.length,\n });\n\n setTimeout(() => {\n if (this.splide) {\n console.log('[CollectionPlayer] Initial handleSlideChange after DOM update');\n this.handleSlideChange(this.splide.index);\n }\n }, 100);\n }\n\n private handleSlideChange(activeIndex: number) {\n if (!this.carouselElement) return;\n\n const isAutoplayEnabled = this.hasAttribute('autoplay') && this.getAttribute('autoplay') !== 'false';\n console.log('[CollectionPlayer] handleSlideChange called', { activeIndex, isAutoplayEnabled });\n\n if (this.autoplayTimeoutId !== null) {\n console.log('[CollectionPlayer] Clearing existing autoplay timeout', { timeoutId: this.autoplayTimeoutId });\n clearTimeout(this.autoplayTimeoutId);\n this.autoplayTimeoutId = null;\n }\n\n const activeSlide = this.carouselElement.querySelector('.splide__slide.is-active:not(.splide__slide--clone)');\n const activePlayer = activeSlide?.querySelector('jaaq-video-player') as any;\n const activeVideoId = activePlayer?.getAttribute('video-id');\n\n console.log('[CollectionPlayer] Active slide from DOM:', {\n activeIndex,\n activeVideoId,\n foundActiveSlide: !!activeSlide,\n });\n\n const originalSlides = this.carouselElement.querySelectorAll('.splide__slide:not(.splide__slide--clone)');\n\n Array.from(originalSlides).map((slide, idx) => {\n const player = slide.querySelector('jaaq-video-player') as any;\n const videoId = player?.getAttribute('video-id') || 'unknown';\n const isActive = slide.classList.contains('is-active');\n return {\n index: idx,\n videoId,\n isActive,\n };\n });\n\n originalSlides.forEach((slide, index) => {\n const player = slide.querySelector('jaaq-video-player') as any;\n if (!player) return;\n\n const videoId = player.getAttribute('video-id');\n const isActive = slide.classList.contains('is-active');\n\n if (isActive) {\n if (isAutoplayEnabled) {\n this.autoplayTimeoutId = window.setTimeout(() => {\n console.log('[CollectionPlayer] 1s delay complete, playing video', {\n index,\n videoId,\n });\n player.play?.();\n }, 1000);\n }\n } else {\n player.pause?.();\n }\n });\n }\n\n private destroyCarousel() {\n if (this.autoplayTimeoutId !== null) {\n clearTimeout(this.autoplayTimeoutId);\n this.autoplayTimeoutId = null;\n }\n if (this.splide) {\n this.splide.destroy();\n this.splide = null;\n }\n if (this.container) {\n this.container.innerHTML = '';\n }\n this.collectionData = null;\n }\n\n private emitError(error: Error) {\n if (this.container) {\n this.container.innerHTML = `\n <div class=\"jaaq-collection-error\">\n ${error.message}\n </div>\n `;\n }\n\n this.dispatchEvent(\n new CustomEvent('jaaq:collection:error', {\n detail: error,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n get client(): JaaqClient | null {\n return this.clientInstance;\n }\n\n set client(value: JaaqClient | null) {\n this.clientInstance = value;\n if (this.connected) {\n this.destroyCarousel();\n this.initCarousel();\n }\n }\n\n get collectionId(): string | null {\n return this.getAttribute('collection-id');\n }\n\n set collectionId(value: string | null) {\n if (value) {\n this.setAttribute('collection-id', value);\n } else {\n this.removeAttribute('collection-id');\n }\n }\n\n refresh(): void {\n this.destroyCarousel();\n this.initCarousel();\n }\n\n next(): void {\n this.splide?.go('+1');\n }\n\n prev(): void {\n this.splide?.go('-1');\n }\n\n go(index: number): void {\n this.splide?.go(index);\n }\n\n destroy(): void {\n this.destroyCarousel();\n }\n\n getCollection(): CollectionDTO | null {\n return this.collectionData;\n }\n}\n","import { JaaqVideoPlayer } from '@ui/vanilla/VideoPlayer';\nimport type { JaaqClient } from '@src/index';\nimport type { PlayerState } from '@ui/shared/types';\nimport sharedStyles from '@ui/shared/styles.css';\nimport vanillaStyles from '@ui/vanilla/styles.css';\n\nconst COMPONENT_STYLES = `\n:host {\n display: block;\n width: 100%;\n}\n\n:host([hidden]) {\n display: none;\n}\n`;\n\n/**\n * Custom web component for JAAQ video player with Shadow DOM encapsulation\n * Provides a framework-agnostic video player with custom controls and HLS support\n *\n * @example\n * // Declarative usage\n * <jaaq-video-player\n * video-id=\"video-123\"\n * api-key=\"key\"\n * client-id=\"client\"\n * autoplay=\"false\">\n * </jaaq-video-player>\n *\n * @example\n * // Programmatic usage\n * const player = document.createElement('jaaq-video-player');\n * player.setAttribute('video-id', 'video-123');\n * player.addEventListener('jaaq:play', () => console.log('Playing'));\n * document.body.appendChild(player);\n */\nexport class JaaqVideoPlayerElement extends HTMLElement {\n private player: JaaqVideoPlayer | null = null;\n private container: HTMLDivElement | null = null;\n private clientInstance: JaaqClient | null = null;\n private connected = false;\n\n static get observedAttributes() {\n return [\n 'video-id',\n 'api-key',\n 'client-id',\n 'autoplay',\n 'base-url',\n 'width',\n 'height',\n 'controls',\n 'show-logo',\n 'show-title',\n 'show-author',\n 'show-description',\n 'show-captions',\n 'start-muted',\n ];\n }\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n this.connected = true;\n this.render();\n this.initPlayer();\n }\n\n disconnectedCallback() {\n this.connected = false;\n this.destroyPlayer();\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {\n if (!this.connected || oldValue === newValue) return;\n\n if (name === 'video-id' && this.player) {\n this.destroyPlayer();\n this.initPlayer();\n } else if (name === 'width' || name === 'height') {\n this.updateContainerStyles();\n } else if (\n name === 'controls' ||\n name === 'show-logo' ||\n name === 'show-title' ||\n name === 'show-author' ||\n name === 'show-description' ||\n name === 'show-captions' ||\n name === 'start-muted'\n ) {\n if (this.player) {\n const features: any = {};\n if (name === 'controls') {\n features.controls = !this.hasAttribute('controls') || this.getAttribute('controls') !== 'false';\n } else if (name === 'show-logo') {\n features.showLogo = !this.hasAttribute('show-logo') || this.getAttribute('show-logo') !== 'false';\n } else if (name === 'show-title') {\n features.showTitle = !this.hasAttribute('show-title') || this.getAttribute('show-title') !== 'false';\n } else if (name === 'show-author') {\n features.showAuthor = !this.hasAttribute('show-author') || this.getAttribute('show-author') !== 'false';\n } else if (name === 'show-description') {\n features.showDescription = !this.hasAttribute('show-description') || this.getAttribute('show-description') !== 'false';\n } else if (name === 'show-captions') {\n features.showCaptions = !this.hasAttribute('show-captions') || this.getAttribute('show-captions') !== 'false';\n } else if (name === 'start-muted') {\n features.startMuted = this.hasAttribute('start-muted') && this.getAttribute('start-muted') !== 'false';\n }\n this.player.setFeatures(features);\n }\n }\n }\n\n private render() {\n if (!this.shadowRoot) return;\n\n const styleSheet = document.createElement('style');\n styleSheet.textContent = `\n ${sharedStyles}\n ${vanillaStyles}\n ${COMPONENT_STYLES}\n `;\n\n this.container = document.createElement('div');\n this.container.className = 'jaaq-webcomponent-container';\n\n this.shadowRoot.appendChild(styleSheet);\n this.shadowRoot.appendChild(this.container);\n\n this.updateContainerStyles();\n }\n\n private updateContainerStyles() {\n if (!this.container) return;\n\n const width = this.getAttribute('width') || '100%';\n const height = this.getAttribute('height') || 'auto';\n\n this.container.style.width = width;\n this.container.style.height = height;\n }\n\n private async initPlayer() {\n if (!this.container || this.player) return;\n\n const videoId = this.getAttribute('video-id');\n if (!videoId) {\n this.emitError(new Error('video-id attribute is required'));\n return;\n }\n\n const apiKey = this.getAttribute('api-key');\n const clientId = this.getAttribute('client-id');\n const baseUrl = this.getAttribute('base-url') || undefined;\n const autoplay = this.hasAttribute('autoplay') && this.getAttribute('autoplay') !== 'false';\n const controls = !this.hasAttribute('controls') || this.getAttribute('controls') !== 'false';\n\n const showLogo = !this.hasAttribute('show-logo') || this.getAttribute('show-logo') !== 'false';\n const showTitle = !this.hasAttribute('show-title') || this.getAttribute('show-title') !== 'false';\n const showAuthor = !this.hasAttribute('show-author') || this.getAttribute('show-author') !== 'false';\n const showDescription = !this.hasAttribute('show-description') || this.getAttribute('show-description') !== 'false';\n const showCaptions = !this.hasAttribute('show-captions') || this.getAttribute('show-captions') !== 'false';\n const startMuted = this.hasAttribute('start-muted') && this.getAttribute('start-muted') !== 'false';\n\n if (!this.clientInstance && !apiKey && !clientId) {\n this.emitError(new Error('Either client property or api-key and client-id attributes are required'));\n return;\n }\n\n try {\n this.player = new JaaqVideoPlayer(this.container, {\n videoId: videoId ?? undefined,\n apiKey: apiKey ?? undefined,\n clientId: clientId ?? undefined,\n client: this.clientInstance || undefined,\n baseUrl,\n autoplay,\n controls,\n showLogo,\n showTitle,\n showAuthor,\n showDescription,\n showCaptions,\n startMuted,\n });\n\n this.attachPlayerEvents();\n } catch (error) {\n this.emitError(error instanceof Error ? error : new Error('Failed to initialize player'));\n }\n }\n\n private attachPlayerEvents() {\n if (!this.player) return;\n\n this.player.on('loaded', (video) => {\n this.dispatchEvent(\n new CustomEvent('jaaq:loaded', {\n detail: video,\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.player.on('play', () => {\n this.dispatchEvent(\n new CustomEvent('jaaq:play', {\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.player.on('pause', () => {\n this.dispatchEvent(\n new CustomEvent('jaaq:pause', {\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.player.on('timeupdate', (time) => {\n this.dispatchEvent(\n new CustomEvent('jaaq:timeupdate', {\n detail: time,\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.player.on('volumechange', (volume) => {\n this.dispatchEvent(\n new CustomEvent('jaaq:volumechange', {\n detail: volume,\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.player.on('ended', () => {\n this.dispatchEvent(\n new CustomEvent('jaaq:ended', {\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.player.on('error', (error) => {\n this.emitError(error);\n });\n\n this.player.on('fullscreenchange', (isFullscreen) => {\n this.dispatchEvent(\n new CustomEvent('jaaq:fullscreenchange', {\n detail: isFullscreen,\n bubbles: true,\n composed: true,\n }),\n );\n });\n }\n\n private emitError(error: Error) {\n this.dispatchEvent(\n new CustomEvent('jaaq:error', {\n detail: error,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private destroyPlayer() {\n if (this.player) {\n this.player.destroy();\n this.player = null;\n }\n }\n\n /**\n * Gets the current JaaqClient instance\n */\n get client(): JaaqClient | null {\n return this.clientInstance;\n }\n\n /**\n * Sets a JaaqClient instance for the player to use\n * Reinitializes the player if already connected\n */\n set client(value: JaaqClient | null) {\n this.clientInstance = value;\n if (this.connected) {\n this.destroyPlayer();\n this.initPlayer();\n }\n }\n\n /**\n * Gets the current video ID\n */\n get videoId(): string | null {\n return this.getAttribute('video-id');\n }\n\n /**\n * Sets the video ID\n * Updates the video-id attribute and triggers player reinitialization\n */\n set videoId(value: string | null) {\n if (value) {\n this.setAttribute('video-id', value);\n } else {\n this.removeAttribute('video-id');\n }\n }\n\n /**\n * Starts or resumes video playback\n */\n play(): void {\n this.player?.play();\n }\n\n /**\n * Pauses video playback\n */\n pause(): void {\n this.player?.pause();\n }\n\n /**\n * Sets the playback volume\n * @param volume - Volume level between 0 (silent) and 1 (maximum)\n */\n setVolume(volume: number): void {\n this.player?.setVolume(volume);\n }\n\n /**\n * Toggles audio mute state\n */\n toggleMute(): void {\n this.player?.toggleMute();\n }\n\n /**\n * Seeks to a specific time in the video\n * @param time - Target time in seconds\n */\n seek(time: number): void {\n this.player?.seek(time);\n }\n\n /**\n * Returns the current player state\n * @returns Current player state object or null if player not initialized\n */\n getState(): PlayerState | null {\n return this.player?.getState() || null;\n }\n\n /**\n * Destroys the player instance and cleans up resources\n */\n destroy(): void {\n this.destroyPlayer();\n }\n}\n","import { JaaqVideoPlayerElement } from './VideoPlayer';\nimport { JaaqCollectionPlayerElement } from './CollectionPlayer';\n\nconst COMPONENT_TAGS = {\n VIDEO_PLAYER: 'jaaq-video-player',\n COLLECTION_PLAYER: 'jaaq-collection-player',\n};\n\n/**\n * Registers JAAQ custom elements (<jaaq-video-player> and <jaaq-collection-player>)\n * Safe to call multiple times - only registers if not already registered\n *\n * @example\n * import { registerJaaqComponents } from '@jaaq/jaaq-sdk-js/ui/webcomponents';\n * registerJaaqComponents();\n */\nexport function registerJaaqComponents(): void {\n if (typeof window === 'undefined' || typeof customElements === 'undefined') {\n console.warn('Custom Elements API is not available. Web components cannot be registered.');\n return;\n }\n\n if (!customElements.get(COMPONENT_TAGS.VIDEO_PLAYER)) {\n customElements.define(COMPONENT_TAGS.VIDEO_PLAYER, JaaqVideoPlayerElement);\n }\n\n if (!customElements.get(COMPONENT_TAGS.COLLECTION_PLAYER)) {\n customElements.define(COMPONENT_TAGS.COLLECTION_PLAYER, JaaqCollectionPlayerElement);\n }\n}\n\n/**\n * Checks if the JAAQ web components are already registered\n * @returns True if components are registered, false otherwise\n */\nexport function isRegistered(): boolean {\n if (typeof window === 'undefined' || typeof customElements === 'undefined') {\n return false;\n }\n return !!customElements.get(COMPONENT_TAGS.VIDEO_PLAYER) && !!customElements.get(COMPONENT_TAGS.COLLECTION_PLAYER);\n}\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n registerJaaqComponents();\n });\n } else {\n registerJaaqComponents();\n }\n}\n","import Splide from '@splidejs/splide';\nimport { JaaqClient, BASE_URL, createJaaqClient } from '@src/index';\nimport type { CollectionDTO, VideoDTO } from '@src/types';\nimport type { VideoSettings } from '@ui/shared/types';\nimport '@ui/shared/styles.css';\nimport './styles.css';\nimport '@splidejs/splide/css';\n\ntype CollectionPlayerConfig = {\n collectionId: string;\n client?: JaaqClient;\n apiKey?: string;\n clientId?: string;\n baseUrl?: string;\n autoplay?: boolean;\n showArrows?: boolean;\n showDots?: boolean;\n className?: string;\n videoSettings?: VideoSettings;\n};\n\ntype CollectionPlayerEventMap = {\n loaded: CollectionDTO;\n slidechange: { index: number; video: VideoDTO };\n error: Error;\n};\n\ntype CollectionPlayerEventCallback<T> = (_data: T) => void;\n\nexport class JaaqCollectionPlayer {\n private container: HTMLElement;\n private config: CollectionPlayerConfig;\n private client: JaaqClient | null = null;\n private splide: Splide | null = null;\n private playerElement: HTMLDivElement | null = null;\n private carouselElement: HTMLDivElement | null = null;\n private collectionData: CollectionDTO | null = null;\n private autoplayTimeoutId: number | null = null;\n private listeners: Map<keyof CollectionPlayerEventMap, Set<CollectionPlayerEventCallback<unknown>>> = new Map();\n\n constructor(container: HTMLElement | string, config: CollectionPlayerConfig) {\n this.container = typeof container === 'string' ? document.querySelector(container)! : container;\n\n if (!this.container) {\n throw new Error('Container element not found');\n }\n\n this.config = { autoplay: false, showArrows: true, showDots: true, ...config };\n\n if (config.client) {\n this.client = config.client;\n } else if (config.apiKey && config.clientId) {\n this.client = createJaaqClient({\n apiKey: config.apiKey,\n clientId: config.clientId,\n baseUrl: config.baseUrl || BASE_URL,\n });\n } else {\n throw new Error('Either client property or apiKey and clientId are required');\n }\n\n this.init();\n }\n\n private async init(): Promise<void> {\n this.render();\n await this.initCarousel();\n }\n\n private render(): void {\n this.container.innerHTML = '';\n\n this.playerElement = document.createElement('div');\n this.playerElement.className = `jaaq-collection-player ${this.config.className || ''}`;\n\n this.container.appendChild(this.playerElement);\n }\n\n private async initCarousel(): Promise<void> {\n if (!this.playerElement) return;\n\n const collectionId = this.config.collectionId;\n if (!collectionId) {\n this.emitError(new Error('collectionId is required'));\n return;\n }\n\n this.showLoading();\n\n try {\n if (!this.client) {\n throw new Error('Client is not initialized');\n }\n\n this.collectionData = await this.client.collections.getById(collectionId);\n\n if (!this.collectionData.videos || this.collectionData.videos.length === 0) {\n this.emitError(new Error('No videos found in collection'));\n return;\n }\n\n this.renderCarousel();\n this.initSplide();\n\n this.emit('loaded', this.collectionData);\n } catch (error) {\n this.emitError(error instanceof Error ? error : new Error('Failed to load collection'));\n }\n }\n\n private showLoading(): void {\n if (!this.playerElement) return;\n this.playerElement.innerHTML = `\n <div class=\"jaaq-collection-loading\">\n <div class=\"jaaq-collection-spinner\"></div>\n </div>\n `;\n }\n\n private renderCarousel(): void {\n if (!this.playerElement || !this.collectionData) return;\n\n this.playerElement.innerHTML = '';\n\n this.carouselElement = document.createElement('div');\n this.carouselElement.className = 'splide jaaq-collection-carousel';\n\n const track = document.createElement('div');\n track.className = 'splide__track';\n\n const list = document.createElement('ul');\n list.className = 'splide__list';\n\n this.collectionData.videos.forEach((video) => {\n const slide = document.createElement('li');\n slide.className = 'splide__slide';\n\n const player = document.createElement('jaaq-video-player') as HTMLElement;\n player.setAttribute('video-id', video.videoId);\n if (this.config.apiKey) player.setAttribute('api-key', this.config.apiKey);\n if (this.config.clientId) player.setAttribute('client-id', this.config.clientId);\n if (this.config.baseUrl) player.setAttribute('base-url', this.config.baseUrl);\n player.setAttribute('autoplay', 'false');\n player.setAttribute('width', '100%');\n\n if (this.config.videoSettings) {\n const settings = this.config.videoSettings;\n if (settings.controls !== undefined) {\n player.setAttribute('controls', String(settings.controls));\n }\n if (settings.showLogo !== undefined) {\n player.setAttribute('show-logo', String(settings.showLogo));\n }\n if (settings.showTitle !== undefined) {\n player.setAttribute('show-title', String(settings.showTitle));\n }\n if (settings.showAuthor !== undefined) {\n player.setAttribute('show-author', String(settings.showAuthor));\n }\n if (settings.showDescription !== undefined) {\n player.setAttribute('show-description', String(settings.showDescription));\n }\n if (settings.showCaptions !== undefined) {\n player.setAttribute('show-captions', String(settings.showCaptions));\n }\n if (settings.startMuted !== undefined) {\n player.setAttribute('start-muted', String(settings.startMuted));\n }\n if (settings.width !== undefined) {\n player.setAttribute('width', String(settings.width));\n }\n if (settings.height !== undefined) {\n player.setAttribute('height', String(settings.height));\n }\n }\n\n if (this.client && (player as any).client !== undefined) {\n (player as any).client = this.client;\n }\n\n slide.appendChild(player);\n list.appendChild(slide);\n });\n\n track.appendChild(list);\n this.carouselElement.appendChild(track);\n this.playerElement.appendChild(this.carouselElement);\n }\n\n private initSplide(): void {\n if (!this.carouselElement) return;\n\n this.splide = new Splide(this.carouselElement, {\n type: 'loop',\n perPage: 3,\n focus: 'center',\n gap: '0.5rem',\n perMove: 1,\n autoHeight: true,\n updateOnMove: true,\n padding: '5rem',\n breakpoints: {\n 768: {\n perPage: 1,\n },\n 1024: {\n perPage: 2,\n },\n },\n arrows: this.config.showArrows !== false,\n pagination: this.config.showDots !== false,\n autoplay: false,\n });\n\n this.splide.on('moved', (newIndex: number) => {\n this.handleSlideChange(newIndex);\n\n if (this.collectionData) {\n this.emit('slidechange', { index: newIndex, video: this.collectionData.videos[newIndex] });\n }\n });\n\n this.splide.mount();\n\n setTimeout(() => {\n if (this.splide) {\n this.handleSlideChange(this.splide.index);\n }\n }, 100);\n }\n\n private handleSlideChange(_activeIndex: number): void {\n if (!this.carouselElement) return;\n\n const isAutoplayEnabled = this.config.autoplay;\n\n if (this.autoplayTimeoutId !== null) {\n clearTimeout(this.autoplayTimeoutId);\n this.autoplayTimeoutId = null;\n }\n\n const originalSlides = this.carouselElement.querySelectorAll('.splide__slide:not(.splide__slide--clone)');\n\n originalSlides.forEach((slide) => {\n const player = slide.querySelector('jaaq-video-player') as any;\n if (!player) return;\n\n const isActive = slide.classList.contains('is-active');\n\n if (isActive) {\n if (isAutoplayEnabled) {\n this.autoplayTimeoutId = window.setTimeout(() => {\n player.play?.();\n }, 1000);\n }\n } else {\n player.pause?.();\n }\n });\n }\n\n private destroyCarousel(): void {\n if (this.autoplayTimeoutId !== null) {\n clearTimeout(this.autoplayTimeoutId);\n this.autoplayTimeoutId = null;\n }\n if (this.splide) {\n this.splide.destroy();\n this.splide = null;\n }\n if (this.playerElement) {\n this.playerElement.innerHTML = '';\n }\n this.collectionData = null;\n }\n\n private emitError(error: Error): void {\n if (this.playerElement) {\n this.playerElement.innerHTML = `\n <div class=\"jaaq-collection-error\">\n ${error.message}\n </div>\n `;\n }\n\n this.emit('error', error);\n }\n\n on<K extends keyof CollectionPlayerEventMap>(event: K, callback: CollectionPlayerEventCallback<CollectionPlayerEventMap[K]>): void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(callback as CollectionPlayerEventCallback<unknown>);\n }\n\n off<K extends keyof CollectionPlayerEventMap>(event: K, callback: CollectionPlayerEventCallback<CollectionPlayerEventMap[K]>): void {\n const callbacks = this.listeners.get(event);\n if (callbacks) {\n callbacks.delete(callback as CollectionPlayerEventCallback<unknown>);\n }\n }\n\n private emit<K extends keyof CollectionPlayerEventMap>(event: K, data: CollectionPlayerEventMap[K]): void {\n const callbacks = this.listeners.get(event);\n if (callbacks) {\n callbacks.forEach((callback) => {\n callback(data);\n });\n }\n }\n\n refresh(): void {\n this.destroyCarousel();\n this.initCarousel();\n }\n\n next(): void {\n this.splide?.go('+1');\n }\n\n prev(): void {\n this.splide?.go('-1');\n }\n\n go(index: number): void {\n this.splide?.go(index);\n }\n\n destroy(): void {\n this.destroyCarousel();\n this.listeners.clear();\n this.container.innerHTML = '';\n }\n\n getCollection(): CollectionDTO | null {\n return this.collectionData;\n }\n}\n"],"names":["createHttpClient","config","baseUrl","apiKey","clientId","fetch","fetchImpl","f","globalThis","Error","baseHeaders","fullUrl","path","test","base","replace","relative","encodeURIComponent","startsWith","joinUrl","request","async","method","init","body","reqInit","headers","undefined","JSON","stringify","res","ok","text","catch","status","statusText","json","parseJson","get","post","put","patch","delete","BASE_URL","JaaqClient","constructor","http","this","videos","getById","id","video","createVideosResource","collections","collection","createCollectionsResource","fromHttp","buildClient","createJaaqClient","clamp","value","min","max","Math","document","styleId","getElementById","style","createElement","textContent","head","appendChild","JaaqVideoPlayer","container","client","hls","videoElement","listeners","Map","captionCues","elements","querySelector","state","isPlaying","currentTime","duration","volume","isMuted","startMuted","isFullscreen","isLoading","error","videoData","captionsEnabled","createDOM","loadVideo","attachEventListeners","updateVolumeUI","innerHTML","wrapper","width","height","player","className","muted","setAttribute","logo","centerPlayBtn","gradientOverlay","captionDisplay","display","videoTitle","videoAuthor","videoDescription","loading","controls","controlsBottom","playPauseBtn","volumeBtn","progressBar","progressFilled","captionsBtn","fullscreenBtn","updateControlsVisibility","showControls","setState","videoId","subtitle","parseWebVTT","updateOverlayContent","emit","videoUrl","includes","Hls","isSupported","destroy","enableWorker","lowLatencyMode","loadSource","attachMedia","on","Events","MANIFEST_PARSED","autoplay","play","ERROR","_event","data","fatal","errorMsg","type","details","showError","canPlayType","src","err","message","webvtt","cues","lines","split","i","length","line","trim","startTime","endTime","map","t","parseTimestamp","timestamp","parts","parseFloat","start","end","textLines","push","join","showLogo","showTitle","showAuthor","showDescription","showCaptions","question","creator","titleText","authorData","author","userName","descriptionText","creatorBiography","description","maxLength","truncated","substring","addEventListener","updatePlayPauseButton","updateProgress","updateCaptions","togglePlayPause","e","handleSeek","toggleMute","toggleCaptions","toggleFullscreen","fullscreenElement","classList","toggle","remove","add","newState","progress","currentCue","find","cue","rect","getBoundingClientRect","percent","clientX","left","pause","updateCaptionsButton","element","exitFullscreen","requestFullscreen","setVolume","seek","time","setFeatures","features","removeAttribute","getState","event","callback","has","set","Set","off","callbacks","forEach","clear","_createClass","Constructor","protoProps","staticProps","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_defineProperties","prototype","MEDIA_PREFERS_REDUCED_MOTION","STATES","CREATED","MOUNTED","IDLE","MOVING","SCROLLING","DRAGGING","DESTROYED","empty","array","slice","arrayLike","Array","call","apply","func","bind","concat","arguments","nextTick","setTimeout","noop","raf","requestAnimationFrame","typeOf","subject","isObject","isNull","isArray","isFunction","isString","isUndefined","isHTMLElement","ownerDocument","defaultView","window","HTMLElement","toArray","values","iteratee","indexOf","items","toggleClass","elm","classes","name","addClass","append","parent","children","before","nodes","ref","node","parentNode","insertBefore","matches","selector","children2","filter","child","firstElementChild","ownKeys","keys","forOwn","object","right","reverse","assign","source","merge","omit","elms","attrs","attr","value2","String","create","tag","prop","getComputedStyle","display2","focus","preventScroll","getAttribute","hasClass","contains","removeChild","parseHtml","html","DOMParser","parseFromString","prevent","stopPropagation","preventDefault","stopImmediatePropagation","query","queryAll","querySelectorAll","removeClass","timeOf","timeStamp","unit","PROJECT_CODE","DATA_ATTRIBUTE","assert","condition","floor","ceil","abs","approximatelyEqual","x","y","epsilon","between","number","exclusive","minimum","maximum","sign","format","string","replacements","replacement","pad","ids","EventBinder","forEachEvent","targets","events","events2","eventNS","fragment","options","namespace","isEventTarget","remover","removeEventListener","unbind","listener","dispatch","detail","bubbles","CustomEvent","createEvent","initCustomEvent","dispatchEvent","EVENT_MOUNTED","EVENT_READY","EVENT_MOVE","EVENT_MOVED","EVENT_CLICK","EVENT_ACTIVE","EVENT_INACTIVE","EVENT_VISIBLE","EVENT_HIDDEN","EVENT_REFRESH","EVENT_UPDATED","EVENT_RESIZE","EVENT_RESIZED","EVENT_SCROLL","EVENT_SCROLLED","EVENT_DESTROY","EVENT_ARROWS_MOUNTED","EVENT_NAVIGATION_MOUNTED","EVENT_AUTOPLAY_PLAY","EVENT_AUTOPLAY_PAUSE","EVENT_LAZYLOAD_LOADED","EVENT_SLIDE_KEYDOWN","EVENT_SHIFTED","EVENT_END_INDEX_CHANGED","EventInterface","Splide2","bus","createDocumentFragment","binder","RequestInterval","interval","onInterval","onUpdate","limit","now","Date","rate","paused","count","update","cancel","cancelAnimationFrame","resume","rewind","isPaused","ARROW","ARROW_LEFT","ARROW_RIGHT","ARROW_UP","ARROW_DOWN","TTB","ORIENTATION_MAP","X","Y","ArrowLeft","ArrowRight","ROLE","TAB_INDEX","ARIA_PREFIX","ARIA_CONTROLS","ARIA_CURRENT","ARIA_SELECTED","ARIA_LABEL","ARIA_LABELLEDBY","ARIA_HIDDEN","ARIA_ORIENTATION","ARIA_ROLEDESCRIPTION","ARIA_LIVE","ARIA_BUSY","ARIA_ATOMIC","ALL_ATTRIBUTES","CLASS_PREFIX","STATUS_CLASS_PREFIX","CLASS_ROOT","CLASS_TRACK","CLASS_LIST","CLASS_SLIDE","CLASS_CLONE","CLASS_CONTAINER","CLASS_ARROWS","CLASS_ARROW","CLASS_ARROW_PREV","CLASS_ARROW_NEXT","CLASS_PAGINATION","CLASS_PAGINATION_PAGE","CLASS_PROGRESS_BAR","CLASS_TOGGLE","CLASS_SR","CLASS_INITIALIZED","CLASS_ACTIVE","CLASS_PREV","CLASS_NEXT","CLASS_VISIBLE","CLASS_LOADING","CLASS_FOCUS_IN","CLASS_OVERFLOW","STATUS_CLASSES","CLASSES","slide","clone","arrows","arrow","prev","next","pagination","page","spinner","POINTER_DOWN_EVENTS","POINTER_MOVE_EVENTS","POINTER_UP_EVENTS","SLIDE","LOOP","FADE","Slide$1","index","slideIndex","destroyed","Components","root","isNavigation","updateOnMove","i18n","slideFocus","resolve","Direction","styles","label","isClone","initNavigation","splides","Slide2","splide","Slides","getAt","slideX","onMove","curr","active","isActive","self","visible","is","trackRect","Elements","track","slideRect","isVisible","hidden","focusableNodes","activeElement","updateVisibility","cloneStatus","mount","slideLabel","useContainer","isWithin","from","distance","diff","INTERVAL_DATA_ATTRIBUTE","SCROLL_LISTENER_OPTIONS","passive","capture","NORMALIZATION_MAP","Spacebar","Right","Left","Up","Down","normalizeKey","KEYBOARD_EVENT","SRC_DATA_ATTRIBUTE","SRCSET_DATA_ATTRIBUTE","IMAGE_SELECTOR","TRIGGER_KEYS","ComponentConstructors","freeze","__proto__","Media","Components2","breakpoints","reducedMotion","queries","completely","register","options2","queryList","matchMedia","direction","merged","reduce","merged2","entry","refresh","opts","notify","getPrototypeOf","setup","isMin","mediaQuery","sort","n","m","enable","axisOnly","match","offset","toLowerCase","charAt","toUpperCase","orient","list","isUsingKey","_EventInterface","slides","rootClasses","trackClasses","bar","prefix","role","tagName","carousel","getClasses","labelledby","closest","nodeType","parentElement","drag","_EventInterface2","_Components2$Elements","Slides2","forEach$1","Slide1","excludeClones","matcher","getIn","Controller","toIndex","hasFocus","perPage","images","img","getLength","isEnough","Layout","vertical","rootRect","overflow","_EventInterface3","_Components2$Elements2","styleSlides","cssPadding","resize","force","newRect","cssHeight","cssTrackHeight","gap","autoWidth","fixedWidth","cssSlideSize","fixedHeight","autoHeight","isOverflow","padding","heightRatio","listSize","slideSize","withoutGap","Slide","getGap","totalSize","sliderSize","getPadding","Clones","cloneCount","clones","remount","observe","computeCloneCount","isHead","cloneNode","cloneDeep","generate","clones2","fixedSize","Move","Transition","_EventInterface4","_Components2$Layout","_Components2$Directio","_Components2$Elements3","reposition","isBusy","Scroll","jump","translate","toPosition","position","preventLoop","destination","exceededMax","getEnd","shift","loop","backwards","excess","getLimit","size","getPosition","minDistance","Infinity","trimming","trimSpace","move","dest","shifted","exceededLimit","exceededMin","endIndex","slideCount","perMove","_EventInterface5","_Components2$Slides","omitEnd","isLoop","isSlide","getNext","getAdjacent","getPrev","currIndex","prevIndex","onResized","computeDestIndex","snapPage","computeMovableDestIndex","toPage","setIndex","waitForTransition","go","control","allowSameIndex","_ref","indicator","parse","scroll","snap","getIndex","toDest","Arrows","created","wrapperClasses","placeholder","enabled","createArrow","prev2","arrowPath","nextIndex","prevLabel","last","nextLabel","first","disabled","Autoplay","hovered","focused","_EventInterface6","_Components2$Elements4","stopped","resetProgress","stop","autoToggle","pauseOnHover","pauseOnFocus","listen","Cover","cover","cover2","_EventInterface8","friction","onScrolled","noConstrain","noDistance","onEnd","to","easingFunc","pow","Drag","basePosition","baseEvent","prevBaseEvent","isFree","dragging","clickPrevented","_EventInterface9","_Components2$Directio2","exceeded","disable","onPointerDown","isTouch","isTouchEvent","target2","noDrag","button","onPointerMove","onPointerUp","save","cancelable","diffCoord","expired","diffTime","hasExceeded","isSliderDirection","thresholds","dragMinThreshold","isObj","mouse","touch","shouldStart","velocity","computeVelocity","flickPower","flickMaxPages","computeDestination","rewindByDrag","onClick","orthogonal","coordOf","getBaseEvent","changedTouches","TouchEvent","isDragging","Keyboard","_EventInterface10","keyboard","onKeydown","_disabled","LazyLoad","_EventInterface11","isSequential","lazyLoad","entries","srcset","loadNext","check","preloadPages","load","onLoad","Pagination","paginationClasses","dir","getDirection","nextPage","item","paginationDirection","_button","select","li","class","pageX","paginationKeyboard","createPagination","Sync","isParent","sync","Wheel","lastTime","onWheel","deltaY","_min","wheelMinThreshold","sleep","wheelSleep","releaseWheel","shouldPrevent","wheel","Live","live","sr","DEFAULTS","speed","easing","rewindSpeed","Fade","done","endCallback","transition","getSpeed","useScroll","_Splide","states","_o","_E","defaults","_proto","Extensions","_this","_C","_T","Component","component","_this$event","Splide","playerRegistry","WeakMap","playerList","initializePlayer","console","parseDataAttributes","initializePlayers","rootElement","JaaqPlayer","getPlayer","elementOrSelector","destroyAll","readyState","JaaqCollectionPlayerElement","observedAttributes","super","carouselElement","clientInstance","connected","collectionData","autoplayTimeoutId","attachShadow","mode","connectedCallback","render","initCarousel","disconnectedCallback","destroyCarousel","attributeChangedCallback","oldValue","newValue","getBooleanAttr","defaultValue","v","shadowRoot","styleSheet","sharedStyles","collectionId","emitError","showLoading","renderCarousel","initSplide","composed","videoSettingsAttr","videoSettings","warn","showArrows","showDots","newIndex","log","splideIndex","handleSlideChange","activeIndex","isAutoplayEnabled","hasAttribute","timeoutId","clearTimeout","activeSlide","activePlayer","activeVideoId","foundActiveSlide","originalSlides","idx","getCollection","JaaqVideoPlayerElement","initPlayer","destroyPlayer","updateContainerStyles","attachPlayerEvents","COMPONENT_TAGS","registerJaaqComponents","customElements","define","playerElement","settings","_activeIndex"],"mappings":"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","x_google_ignoreList":[8,9]}
|
|
1
|
+
{"version":3,"file":"jaaq-ui.min.js","sources":["../../../src/core/httpClient.ts","../../../src/index.ts","../../../src/resources/v2/videos.ts","../../../src/resources/v2/collections.ts","../../../src/resources/v1/videos.ts","../../../src/resources/v1/collections.ts","../../../src/ui/shared/controls.ts","../../src/ui/shared/styles.css","../../src/ui/vanilla/styles.css","../../../src/ui/vanilla/VideoPlayer.ts","../../node_modules/.pnpm/@splidejs+splide@4.1.4/node_modules/@splidejs/splide/dist/js/splide.esm.js","../../node_modules/.pnpm/@splidejs+splide@4.1.4/node_modules/@splidejs/splide/dist/css/splide.min.css","../../../src/ui/vanilla/autoInit.ts","../../src/ui/webcomponents/CollectionPlayer.css","../../../src/ui/webcomponents/CollectionPlayer.ts","../../../src/ui/webcomponents/VideoPlayer.ts","../../../src/ui/webcomponents/register.ts","../../../src/ui/vanilla/CollectionPlayer.ts"],"sourcesContent":["export type FetchLike = typeof globalThis.fetch;\ntype RequestOptions = Parameters<typeof globalThis.fetch>[1];\ntype FetchResponse = Awaited<ReturnType<FetchLike>>;\n\nexport interface HttpClientConfig {\n baseUrl: string;\n apiVersion: string;\n apiKey: string;\n clientId: string;\n fetch?: FetchLike;\n timeoutMs?: number;\n}\n\nexport interface HttpClient {\n get<T>(_path: string, _init?: RequestOptions): Promise<T>;\n post<T>(_path: string, _body?: unknown, _init?: RequestOptions): Promise<T>;\n put<T>(_path: string, _body?: unknown, _init?: RequestOptions): Promise<T>;\n patch<T>(_path: string, _body?: unknown, _init?: RequestOptions): Promise<T>;\n delete<T>(_path: string, _init?: RequestOptions): Promise<T>;\n}\n\nasync function parseJson<T>(res: FetchResponse): Promise<T> {\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`HTTP ${res.status}: ${text || res.statusText}`);\n }\n if (res.status === 204) return undefined as unknown as T;\n return res.json() as Promise<T>;\n}\n\nfunction joinUrl(baseUrl: string, apiVersion: string, clientId: string, path: string): string {\n // return path if it is an absolute URL\n if (/^https?:\\/\\//i.test(path)) return path;\n const base = baseUrl.replace(/\\/+$/, '');\n const relative = path.replace(/^\\/+/, '');\n return `${base}/b2b/${apiVersion}/subscription/${encodeURIComponent(clientId)}${relative.startsWith('/') ? relative : `/${relative}`}`;\n}\n\nfunction convertToValidAPIVersion(version: string): string {\n const v = version.toLowerCase();\n if (v === 'v1' || v === 'v2') return v;\n return 'v1'; // default to v1 if invalid version provided\n}\n\nexport function createHttpClient(config: HttpClientConfig): HttpClient {\n const { baseUrl, apiKey, clientId, fetch: fetchImpl, apiVersion } = config;\n\n const f: FetchLike | undefined = fetchImpl ?? (globalThis.fetch as FetchLike | undefined);\n if (!f) {\n throw new Error('No fetch implementation found. Provide one in SDKConfig.fetch for Node or custom environments.');\n }\n\n const baseHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n };\n\n const fullUrl = (path: string) => joinUrl(baseUrl, convertToValidAPIVersion(apiVersion), clientId, path);\n\n const request = async <T>(method: string, path: string, init?: RequestOptions, body?: unknown) => {\n const reqInit: RequestOptions = {\n method,\n headers: {\n ...baseHeaders,\n ...(init?.headers as Record<string, string> | undefined),\n },\n ...init,\n };\n if (body !== undefined) reqInit.body = JSON.stringify(body);\n const res = await f(fullUrl(path), reqInit);\n return parseJson<T>(res);\n };\n\n return {\n get: <T>(path: string, init?: RequestOptions) => request<T>('GET', path, init),\n post: <T>(path: string, body?: unknown, init?: RequestOptions) => request<T>('POST', path, init, body),\n put: <T>(path: string, body?: unknown, init?: RequestOptions) => request<T>('PUT', path, init, body),\n patch: <T>(path: string, body?: unknown, init?: RequestOptions) => request<T>('PATCH', path, init, body),\n delete: <T>(path: string, init?: RequestOptions) => request<T>('DELETE', path, init),\n };\n}\n","import { createHttpClient, type HttpClient, type FetchLike } from '@core/httpClient';\nimport {\n createCollectionsResource,\n createCollectionsResourceV2,\n createVideosResource,\n createVideosResourceV2,\n type VideosResource,\n type VideosResourceV2,\n type CollectionsResource,\n type CollectionsResourceV2,\n} from '@src/resources';\n\n// Public type exports for consumers (barrel)\nexport * from '@src/types';\n\nexport const BASE_URL = process.env.JAAQ_API_URL || 'https://api.jaaq.app';\n\nexport interface SDKConfig {\n baseUrl?: string; // Pending to approve\n apiVersion?: string; // Optional API version override (defaults to 'v1')\n apiKey: string; // Provided by backend per client\n clientId: string; // Provided by each consuming company at init\n fetch?: FetchLike; // Optional fetch injection (Node/custom envs) // Pending to approve\n timeoutMs?: number;\n}\n\nexport type V1 = {\n videos: VideosResource;\n collections: CollectionsResource;\n};\n\nexport type V2 = {\n videos: VideosResourceV2;\n collections: CollectionsResourceV2;\n};\n\nexport type ClientVersion = V1 | V2;\n\nexport class JaaqClient<T extends ClientVersion = V1> {\n public readonly videos: T['videos'];\n public readonly collections: T['collections'];\n\n // Keep constructor private to enforce controlled instantiation.\n private constructor(http: HttpClient, apiVersion: string) {\n if (apiVersion === 'v2') {\n this.videos = createVideosResourceV2(http);\n this.collections = createCollectionsResourceV2(http);\n } else {\n this.videos = createVideosResource(http);\n this.collections = createCollectionsResource(http);\n }\n }\n\n /**\n * Public \"friend\" constructor that remains inside the class boundary.\n * This method is callable from the module-level build function\n * without exposing `new JaaqClient(...)` to consumers.\n */\n static fromHttp<T extends ClientVersion = V1>(http: HttpClient, apiVersion: string): JaaqClient<T> {\n return new JaaqClient(http, apiVersion);\n }\n\n /**\n * OO-friendly static initializer.\n * Delegates to the single source of truth: `buildClient`.\n */\n static init<T extends ClientVersion = V1>(config: SDKConfig): JaaqClient<T> {\n return buildClient(config);\n }\n}\n\n/**\n * Canonical factory (idiomatic for JS/TS).\n * Delegates to the single source of truth: `buildClient`.\n */\nexport function createJaaqClient<T extends ClientVersion = V1>(config: SDKConfig): JaaqClient<T> {\n return buildClient(config);\n}\n\nexport function createJaaqClientV1(config: SDKConfig): JaaqClient<V1> {\n return createJaaqClient({ ...config, apiVersion: 'v1' });\n}\n\nexport function createJaaqClientV2(config: SDKConfig): JaaqClient<V2> {\n return createJaaqClient({ ...config, apiVersion: 'v2' });\n}\n\n/**\n * Single source of truth for constructing the client.\n * Both `createJaaqClient` and `JaaqClient.init` call this function.\n * The constructor stays private; instantiation is funneled via `JaaqClient.fromHttp`.\n */\nfunction buildClient<T extends ClientVersion = V1>(config: SDKConfig): JaaqClient<T> {\n const { baseUrl = BASE_URL, apiKey, clientId, fetch: fetchImpl, apiVersion = 'v1' } = config;\n\n const http = createHttpClient({\n baseUrl,\n apiKey,\n clientId,\n fetch: fetchImpl ?? (globalThis.fetch as FetchLike | undefined),\n apiVersion,\n });\n\n return JaaqClient.fromHttp(http, apiVersion);\n}\n","import type { HttpClient } from '@core/httpClient';\nimport type { VideoV2DTO } from '@src/types';\n\nexport type VideosResourceV2 = {\n getById(_id: string): Promise<VideoV2DTO>;\n};\n\nexport function createVideosResourceV2(http: HttpClient): VideosResourceV2 {\n return {\n async getById(id: string) {\n const path = `/videos/${encodeURIComponent(id)}`;\n const response = await http.get<{ video: VideoV2DTO }>(path);\n return response.video;\n },\n };\n}\n","import type { HttpClient } from '@core/httpClient';\nimport type { CollectionV2DTO } from '@src/types';\n\nexport type CollectionsResourceV2 = {\n list(): Promise<CollectionV2DTO[]>;\n getById(_id: string): Promise<CollectionV2DTO>;\n};\n\nexport function createCollectionsResourceV2(http: HttpClient): CollectionsResourceV2 {\n return {\n async list() {\n const path = '/collections';\n const response = await http.get<{ collections: CollectionV2DTO[] }>(path);\n return response.collections;\n },\n async getById(id: string) {\n const path = `/collections/${encodeURIComponent(id)}`;\n const response = await http.get<{ collection: CollectionV2DTO }>(path);\n return response.collection;\n },\n };\n}\n","import type { HttpClient } from '@core/httpClient';\nimport type { VideoDTO } from '@src/types';\n\nexport type VideosResource = {\n getById(_id: string): Promise<VideoDTO>;\n};\n\nexport function createVideosResource(http: HttpClient): VideosResource {\n return {\n async getById(id: string) {\n const path = `/videos/${encodeURIComponent(id)}`;\n const response = await http.get<{ video: VideoDTO }>(path);\n return response.video;\n },\n };\n}\n","import type { HttpClient } from '@core/httpClient';\nimport type { CollectionDTO } from '@src/types';\n\nexport type CollectionsResource = {\n list(): Promise<CollectionDTO[]>;\n getById(_id: string): Promise<CollectionDTO>;\n};\n\nexport function createCollectionsResource(http: HttpClient): CollectionsResource {\n return {\n async list() {\n const path = '/collections';\n const response = await http.get<{ collections: CollectionDTO[] }>(path);\n return response.collections;\n },\n async getById(id: string) {\n const path = `/collections/${encodeURIComponent(id)}`;\n const response = await http.get<{ collection: CollectionDTO }>(path);\n return response.collection;\n },\n };\n}\n","/**\n * Formats a time value in seconds to a human-readable string (M:SS format)\n * @param seconds - Time in seconds to format\n * @returns Formatted time string in M:SS format, or \"0:00\" if invalid\n * @example\n * formatTime(65) // \"1:05\"\n * formatTime(0) // \"0:00\"\n * formatTime(125) // \"2:05\"\n */\nexport function formatTime(seconds: number): string {\n if (isNaN(seconds) || !isFinite(seconds)) {\n return '0:00';\n }\n\n const minutes = Math.floor(seconds / 60);\n const secs = Math.floor(seconds % 60);\n return `${minutes}:${secs.toString().padStart(2, '0')}`;\n}\n\n/**\n * Checks if a video URL is an HLS (HTTP Live Streaming) source\n * @param url - Video URL to check\n * @returns True if the URL contains .m3u8 extension, false otherwise\n */\nexport function isHLSSource(url: string): boolean {\n return url.includes('.m3u8');\n}\n\n/**\n * Toggles fullscreen mode for the given element\n * If not in fullscreen, requests fullscreen for the element\n * If already in fullscreen, exits fullscreen mode\n * @param element - HTML element to toggle fullscreen for\n * @returns Promise that resolves when fullscreen state changes\n */\nexport function toggleFullscreen(element: HTMLElement): Promise<void> {\n if (!document.fullscreenElement) {\n return element.requestFullscreen();\n } else {\n return document.exitFullscreen();\n }\n}\n\n/**\n * Clamps a numeric value between a minimum and maximum value\n * @param value - Value to clamp\n * @param min - Minimum allowed value\n * @param max - Maximum allowed value\n * @returns The clamped value\n * @example\n * clamp(5, 0, 10) // 5\n * clamp(-5, 0, 10) // 0\n * clamp(15, 0, 10) // 10\n */\nexport function clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n",".jaaq-video-player {\n position: relative;\n width: 100%;\n max-width: none;\n margin: 0;\n background: #000;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n aspect-ratio: 9 / 16;\n}\n\n.jaaq-video-player video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: block;\n background: #000;\n object-fit: cover;\n}\n\n.jaaq-video-player.fullscreen {\n max-width: 100%;\n border-radius: 0;\n aspect-ratio: auto;\n}\n\n.jaaq-controls {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n background: linear-gradient(to top, rgba(0, 0, 0, 0.8), transparent);\n padding: 40px 16px 16px;\n opacity: 1;\n z-index: 5;\n}\n\n.jaaq-progress-bar {\n width: 100%;\n flex: 1 1 0;\n min-width: 80px;\n height: 4px;\n background: rgba(255, 255, 255, 0.3);\n border-radius: 2px;\n cursor: pointer;\n position: relative;\n}\n\n.jaaq-progress-filled {\n height: 100%;\n background: #007bff;\n border-radius: 2px;\n width: 0%;\n transition: width 0.1s linear;\n}\n\n.jaaq-progress-bar:hover .jaaq-progress-filled {\n background: #0056b3;\n}\n\n.jaaq-controls-bottom {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n color: white;\n}\n\n.jaaq-control-btn {\n background: transparent;\n border: none;\n color: white;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n font-size: 20px;\n line-height: 1;\n}\n\n.jaaq-control-btn:hover {\n transform: scale(1.1);\n}\n\n.jaaq-control-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.jaaq-loading {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 50px;\n height: 50px;\n border: 4px solid rgba(255, 255, 255, 0.3);\n border-top-color: #007bff;\n border-radius: 50%;\n animation: jaaq-spin 1s linear infinite;\n}\n\n@keyframes jaaq-spin {\n to {\n transform: translate(-50%, -50%) rotate(360deg);\n }\n}\n\n.jaaq-error {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: rgba(220, 53, 69, 0.9);\n color: white;\n padding: 16px 24px;\n border-radius: 8px;\n max-width: 80%;\n text-align: center;\n font-size: 14px;\n}\n\n.jaaq-video-info {\n padding: 16px;\n background: #f8f9fa;\n border-radius: 0 0 12px 12px;\n margin-top: -12px;\n}\n\n.jaaq-video-info h3 {\n margin: 0 0 8px 0;\n color: #333;\n font-size: 18px;\n font-weight: 600;\n}\n\n.jaaq-video-info p {\n margin: 4px 0;\n color: #666;\n font-size: 14px;\n}\n\n.jaaq-video-info strong {\n color: #333;\n}\n\n.jaaq-logo {\n position: absolute;\n top: 20px;\n left: 22px;\n color: white;\n font-size: 16px;\n font-weight: 600;\n z-index: 10;\n font-family:\n 'Archivo',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n sans-serif;\n letter-spacing: 0.5px;\n pointer-events: none;\n}\n\n.jaaq-center-play-btn {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 84px;\n height: 84px;\n background: transparent;\n border: none;\n cursor: pointer;\n z-index: 15;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n padding: 0;\n}\n\n.jaaq-center-play-btn:hover {\n transform: translate(-50%, -50%) scale(1.1);\n}\n\n.jaaq-center-play-btn svg {\n width: 100%;\n height: 100%;\n filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.3));\n}\n\n.jaaq-video-player.is-playing .jaaq-center-play-btn {\n display: none;\n}\n\n.jaaq-gradient-overlay {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n background: linear-gradient(180deg, transparent 0%, #0f0f0f 100%);\n padding: 80px 22px 85px;\n pointer-events: none;\n z-index: 5;\n}\n\n.jaaq-caption-display {\n font-family:\n 'Archivo',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n sans-serif;\n font-weight: 400;\n font-size: 16px;\n line-height: 20px;\n color: white;\n background: rgba(0, 0, 0, 0.8);\n padding: 8px 16px;\n margin-bottom: 12px;\n border-radius: 4px;\n text-align: center;\n max-width: 90%;\n margin-left: auto;\n margin-right: auto;\n}\n\n.jaaq-video-title {\n font-family:\n 'Archivo',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n sans-serif;\n font-weight: 600;\n font-size: 18.695px;\n line-height: 21.5px;\n color: white;\n margin-bottom: 8px;\n letter-spacing: 0.37px;\n}\n\n.jaaq-video-author {\n font-family:\n 'Archivo',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n sans-serif;\n font-weight: 500;\n font-size: 14.021px;\n line-height: 16.825px;\n color: white;\n opacity: 0.7;\n margin-bottom: 8px;\n letter-spacing: -0.14px;\n}\n\n.jaaq-video-description {\n font-family:\n 'Archivo',\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n sans-serif;\n font-weight: 400;\n font-size: 11px;\n line-height: 16px;\n color: #aaa8aa;\n letter-spacing: -0.11px;\n}\n\n.jaaq-description-text {\n color: #aaa8aa;\n}\n\n.jaaq-read-more {\n color: white;\n cursor: pointer;\n pointer-events: auto;\n}\n\n.jaaq-read-more:hover {\n text-decoration: underline;\n}\n\n.jaaq-progress-bar {\n background: rgba(255, 255, 255, 0.2);\n}\n\n.jaaq-progress-filled {\n background: white;\n}\n\n.jaaq-captions-btn {\n font-size: 14px;\n font-weight: 600;\n border: 1.5px solid white;\n border-radius: 3px;\n padding: 4px 6px;\n line-height: 1;\n}\n\n.jaaq-captions-btn.active {\n background: white;\n color: #000;\n}\n",".jaaq-vanilla-player {\n user-select: none;\n}\n\n.jaaq-vanilla-player video {\n outline: none;\n}\n\n.jaaq-collection-player {\n width: 100%;\n max-width: 1400px;\n margin: 0 auto;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n}\n\n.jaaq-collection-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 400px;\n}\n\n.jaaq-collection-spinner {\n width: 50px;\n height: 50px;\n border: 4px solid rgba(0, 123, 255, 0.3);\n border-top-color: #007bff;\n border-radius: 50%;\n animation: jaaq-collection-spin 1s linear infinite;\n}\n\n@keyframes jaaq-collection-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n.jaaq-collection-error {\n background: rgba(220, 53, 69, 0.9);\n color: white;\n padding: 16px 24px;\n border-radius: 8px;\n text-align: center;\n font-size: 14px;\n margin: 20px;\n}\n\n.jaaq-collection-carousel .splide__track {\n padding: 40px 0;\n}\n\n.jaaq-collection-carousel .splide__slide {\n opacity: 0.7;\n transition: all 0.3s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.jaaq-collection-carousel .splide__slide.is-active {\n opacity: 1;\n}\n\n.jaaq-collection-carousel .splide__slide jaaq-video-player {\n width: 100%;\n max-width: 600px;\n transition: all 0.3s ease;\n}\n\n.jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 800px;\n}\n\n.jaaq-collection-carousel .splide__arrow {\n background: rgba(0, 0, 0, 0.5);\n border: none;\n width: 48px;\n height: 48px;\n border-radius: 50%;\n color: white;\n cursor: pointer;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n}\n\n.jaaq-collection-carousel .splide__arrow:hover {\n background: rgba(0, 0, 0, 0.8);\n transform: scale(1.1);\n}\n\n.jaaq-collection-carousel .splide__arrow:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.jaaq-collection-carousel .splide__arrow svg {\n fill: white;\n width: 20px;\n height: 20px;\n}\n\n.jaaq-collection-carousel .splide__pagination {\n bottom: -30px;\n}\n\n.jaaq-collection-carousel .splide__pagination__page {\n background: #ccc;\n border: none;\n width: 10px;\n height: 10px;\n margin: 0 4px;\n border-radius: 50%;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.jaaq-collection-carousel .splide__pagination__page.is-active {\n background: #007bff;\n transform: scale(1.3);\n}\n\n@media (max-width: 1024px) {\n .jaaq-collection-carousel .splide__slide jaaq-video-player {\n max-width: 500px;\n }\n\n .jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 650px;\n }\n}\n\n@media (max-width: 768px) {\n .jaaq-collection-carousel .splide__track {\n padding: 20px 0;\n }\n\n .jaaq-collection-carousel .splide__slide jaaq-video-player {\n max-width: 400px;\n }\n\n .jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 500px;\n }\n\n .jaaq-collection-carousel .splide__arrow {\n width: 40px;\n height: 40px;\n }\n}\n\n@media (max-width: 480px) {\n .jaaq-collection-carousel .splide__slide jaaq-video-player {\n max-width: 100%;\n }\n\n .jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 100%;\n }\n}\n","import Hls from 'hls.js';\nimport { createJaaqClient, type JaaqClient } from '@src/index';\nimport { isHLSSource, toggleFullscreen, clamp } from '@ui/shared/controls';\nimport type { PlayerConfig, PlayerEventMap, PlayerEventCallback, PlayerState } from '@ui/shared/types';\nimport type { VideoDTO } from '@src/types';\nimport '@ui/shared/styles.css';\nimport './styles.css';\n\n/**\n * Vanilla JavaScript video player with custom controls, HLS support, and event system\n * @example\n * const player = new JaaqVideoPlayer('#container', {\n * videoId: 'video-id',\n * apiKey: 'api-key',\n * clientId: 'client-id',\n * autoplay: false\n * });\n *\n * player.on('play', () => console.log('Playing'));\n * player.on('pause', () => console.log('Paused'));\n */\ntype CaptionCue = {\n start: number;\n end: number;\n text: string;\n};\n\nexport class JaaqVideoPlayer {\n private container: HTMLElement;\n private config: PlayerConfig;\n private client: JaaqClient | null = null;\n private hls: Hls | null = null;\n private videoElement: HTMLVideoElement | null = null;\n private state: PlayerState;\n private listeners: Map<keyof PlayerEventMap, Set<PlayerEventCallback<unknown>>> = new Map();\n private captionCues: CaptionCue[] = [];\n private elements: {\n player?: HTMLDivElement;\n controls?: HTMLDivElement;\n progressBar?: HTMLDivElement;\n progressFilled?: HTMLDivElement;\n playPauseBtn?: HTMLButtonElement;\n volumeBtn?: HTMLButtonElement;\n fullscreenBtn?: HTMLButtonElement;\n captionsBtn?: HTMLButtonElement;\n loading?: HTMLDivElement;\n error?: HTMLDivElement;\n logo?: HTMLDivElement;\n centerPlayBtn?: HTMLButtonElement;\n gradientOverlay?: HTMLDivElement;\n captionDisplay?: HTMLDivElement;\n videoTitle?: HTMLDivElement;\n videoAuthor?: HTMLDivElement;\n videoDescription?: HTMLDivElement;\n } = {};\n\n /**\n * Creates a new video player instance\n * @param container - HTML element or CSS selector to render the player into\n * @param config - Player configuration options\n * @throws {Error} If container element is not found or if authentication credentials are missing\n */\n constructor(container: HTMLElement | string, config: PlayerConfig) {\n this.container = typeof container === 'string' ? document.querySelector(container)! : container;\n\n if (!this.container) {\n throw new Error('Container element not found');\n }\n\n this.config = config;\n this.state = {\n isPlaying: false,\n currentTime: 0,\n duration: 0,\n volume: 1,\n isMuted: config.startMuted === true,\n isFullscreen: false,\n isLoading: true,\n error: null,\n videoData: null,\n captionsEnabled: false,\n };\n\n if (config.client) {\n this.client = config.client;\n } else if (config.apiKey && config.clientId) {\n this.client = createJaaqClient({\n apiKey: config.apiKey,\n clientId: config.clientId,\n baseUrl: config.baseUrl,\n });\n } else {\n throw new Error('Please provide either a client instance or apiKey and clientId');\n }\n\n this.init();\n }\n\n private async init(): Promise<void> {\n this.createDOM();\n await this.loadVideo();\n this.attachEventListeners();\n if (this.config.startMuted === true) {\n this.updateVolumeUI();\n }\n }\n\n private createDOM(): void {\n this.container.innerHTML = '';\n\n const wrapper = document.createElement('div');\n wrapper.style.width = this.config.width || '100%';\n wrapper.style.height = this.config.height || 'auto';\n\n const player = document.createElement('div');\n player.className = `jaaq-video-player jaaq-vanilla-player ${this.config.className || ''}`;\n this.elements.player = player;\n\n const video = document.createElement('video');\n this.videoElement = video;\n if (this.config.startMuted === true) {\n video.muted = true;\n video.setAttribute('muted', '');\n }\n player.appendChild(video);\n\n const logo = document.createElement('div');\n logo.className = 'jaaq-logo';\n logo.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"15\" viewBox=\"0 0 50 15\" fill=\"none\">\n <path d=\"M48.0329 10.7826C48.7578 9.6622 49.1402 8.37108 49.1402 7.02322C49.1402 3.19784 46.0283 0.0859375 42.2029 0.0859375C38.3775 0.0859375 35.2656 3.19784 35.2656 7.02322C35.2656 10.8486 38.3753 13.9578 42.1985 13.9605C42.1991 13.9605 42.2002 13.9605 42.2007 13.9605H42.2029C43.8475 13.9605 45.4305 13.3687 46.6698 12.3285L49.9971 14.56V12.0999L48.0334 10.7826H48.0329ZM37.309 7.02322C37.309 4.32479 39.5045 2.12927 42.2035 2.12927C44.9024 2.12927 47.0974 4.32479 47.0974 7.02322C47.0974 7.96252 46.8345 8.862 46.3359 9.64475L43.9817 8.06561C43.4531 7.71378 42.8373 7.52778 42.2002 7.52778C40.4394 7.52778 39.0054 8.95036 38.9846 10.7062C37.9586 9.80839 37.3084 8.49053 37.3084 7.02322H37.309ZM42.2035 11.9172C42.2035 11.9172 42.2002 11.9172 42.1985 11.9172C41.5527 11.9161 41.0274 11.3903 41.0274 10.7439C41.0274 10.0975 41.5538 9.57056 42.2007 9.57056C42.4331 9.57056 42.6578 9.6382 42.8493 9.76584L44.8714 11.1224C44.0853 11.633 43.1586 11.9172 42.2029 11.9172H42.2035Z\" fill=\"white\"/>\n <path d=\"M31.0751 0.686201C30.9856 0.579834 30.8858 0.483286 30.7767 0.39983C30.4374 0.138004 30.0283 0 29.5946 0C29.161 0 28.7524 0.138549 28.4126 0.39983C28.2304 0.540561 28.0755 0.711838 27.9533 0.909844C27.8835 1.02276 27.8257 1.14003 27.7815 1.25785L23.1172 13.7317H25.4551L29.5946 2.66135L33.7342 13.7317H36.0721L31.4078 1.25785C31.3303 1.05003 31.218 0.858024 31.0745 0.686746L31.0751 0.686201Z\" fill=\"white\"/>\n <path d=\"M17.4969 0.686201C17.4075 0.579834 17.3076 0.483286 17.1986 0.39983C16.8593 0.138004 16.4502 0 16.0165 0C15.5829 0 15.1743 0.138549 14.8345 0.39983C14.6523 0.540561 14.4974 0.711838 14.3752 0.909844C14.3054 1.02276 14.2476 1.14003 14.2034 1.25785L9.53906 13.7317H11.8769L16.0165 2.66135L20.1561 13.7317H22.494L17.8302 1.25731C17.7527 1.04948 17.6404 0.857478 17.4969 0.686201Z\" fill=\"white\"/>\n <path d=\"M9.86046 0.511825V0.371094H7.82204V9.02333C7.82204 10.6248 6.51891 11.928 4.91741 11.928C3.47028 11.928 2.23261 10.849 2.03897 9.41771L2.01988 9.27807L1.88024 9.29716L0.13964 9.5328L0 9.5519L0.0190914 9.69154C0.348555 12.1292 2.45462 13.9669 4.91741 13.9669C7.64313 13.9669 9.86046 11.7496 9.86046 9.02388V0.511825Z\" fill=\"white\"/>\n </svg>\n `;\n this.elements.logo = logo;\n player.appendChild(logo);\n\n const centerPlayBtn = document.createElement('button');\n centerPlayBtn.className = 'jaaq-center-play-btn';\n centerPlayBtn.innerHTML = `\n <svg viewBox=\"0 0 84 84\" fill=\"none\">\n <circle cx=\"42\" cy=\"42\" r=\"42\" fill=\"white\" fill-opacity=\"0.9\"/>\n <path d=\"M33 28L56 42L33 56V28Z\" fill=\"#000\"/>\n </svg>\n `;\n centerPlayBtn.setAttribute('aria-label', 'Play video');\n this.elements.centerPlayBtn = centerPlayBtn;\n player.appendChild(centerPlayBtn);\n\n const gradientOverlay = document.createElement('div');\n gradientOverlay.className = 'jaaq-gradient-overlay';\n this.elements.gradientOverlay = gradientOverlay;\n\n const captionDisplay = document.createElement('div');\n captionDisplay.className = 'jaaq-caption-display';\n captionDisplay.style.display = 'none';\n this.elements.captionDisplay = captionDisplay;\n gradientOverlay.appendChild(captionDisplay);\n\n const videoTitle = document.createElement('div');\n videoTitle.className = 'jaaq-video-title';\n this.elements.videoTitle = videoTitle;\n gradientOverlay.appendChild(videoTitle);\n\n const videoAuthor = document.createElement('div');\n videoAuthor.className = 'jaaq-video-author';\n this.elements.videoAuthor = videoAuthor;\n gradientOverlay.appendChild(videoAuthor);\n\n const videoDescription = document.createElement('div');\n videoDescription.className = 'jaaq-video-description';\n this.elements.videoDescription = videoDescription;\n gradientOverlay.appendChild(videoDescription);\n\n player.appendChild(gradientOverlay);\n\n const loading = document.createElement('div');\n loading.className = 'jaaq-loading';\n this.elements.loading = loading;\n player.appendChild(loading);\n\n const error = document.createElement('div');\n error.className = 'jaaq-error';\n error.style.display = 'none';\n this.elements.error = error;\n player.appendChild(error);\n\n const controls = document.createElement('div');\n controls.className = 'jaaq-controls';\n this.elements.controls = controls;\n\n const controlsBottom = document.createElement('div');\n controlsBottom.className = 'jaaq-controls-bottom';\n\n const playPauseBtn = document.createElement('button');\n playPauseBtn.className = 'jaaq-control-btn';\n playPauseBtn.textContent = '▶';\n playPauseBtn.setAttribute('aria-label', 'Play');\n this.elements.playPauseBtn = playPauseBtn;\n controlsBottom.appendChild(playPauseBtn);\n\n const volumeBtn = document.createElement('button');\n volumeBtn.className = 'jaaq-control-btn';\n volumeBtn.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"20\" viewBox=\"0 0 22 20\" fill=\"none\">\n <path d=\"M11.2168 19.9287L4.20801 13.7031H0V6.22559H4.20898L11.2168 0V19.9287ZM14.0215 0.150391C16.2405 0.150468 18.1409 1.39074 19.4385 3.17676C20.7365 4.9634 21.499 7.36811 21.499 9.96484C21.499 12.5613 20.7363 14.9654 19.4385 16.752C18.1409 18.538 16.2405 19.7792 14.0215 19.7793V17.1025C15.2032 17.1025 16.3824 16.4464 17.3135 15.165C18.2442 13.8839 18.8593 12.0493 18.8594 9.96484C18.8594 7.88034 18.2442 6.04581 17.3135 4.76465C16.3824 3.4832 15.2033 2.82723 14.0215 2.82715V0.150391ZM14.0215 5.75879C15.5701 5.75896 16.8252 7.64189 16.8252 9.96484C16.8251 12.2877 15.57 14.1707 14.0215 14.1709V5.75879Z\" fill=\"white\"/>\n </svg>\n `;\n volumeBtn.setAttribute('aria-label', 'Mute');\n this.elements.volumeBtn = volumeBtn;\n controlsBottom.appendChild(volumeBtn);\n\n const progressBar = document.createElement('div');\n progressBar.className = 'jaaq-progress-bar';\n this.elements.progressBar = progressBar;\n\n const progressFilled = document.createElement('div');\n progressFilled.className = 'jaaq-progress-filled';\n this.elements.progressFilled = progressFilled;\n progressBar.appendChild(progressFilled);\n controlsBottom.appendChild(progressBar);\n\n const captionsBtn = document.createElement('button');\n captionsBtn.className = 'jaaq-control-btn jaaq-captions-btn';\n captionsBtn.innerHTML = 'CC';\n captionsBtn.setAttribute('aria-label', 'Captions');\n this.elements.captionsBtn = captionsBtn;\n controlsBottom.appendChild(captionsBtn);\n\n const fullscreenBtn = document.createElement('button');\n fullscreenBtn.className = 'jaaq-control-btn';\n fullscreenBtn.textContent = '⛶';\n fullscreenBtn.setAttribute('aria-label', 'Fullscreen');\n this.elements.fullscreenBtn = fullscreenBtn;\n controlsBottom.appendChild(fullscreenBtn);\n\n controls.appendChild(controlsBottom);\n player.appendChild(controls);\n\n wrapper.appendChild(player);\n this.container.appendChild(wrapper);\n\n this.updateControlsVisibility();\n }\n\n private updateControlsVisibility(): void {\n const showControls = this.config.controls !== false;\n if (this.elements.controls) {\n this.elements.controls.style.display = showControls ? '' : 'none';\n }\n }\n\n private async loadVideo(): Promise<void> {\n if (!this.client || !this.videoElement) return;\n\n try {\n this.setState({ isLoading: true, error: null });\n\n const video = await this.client.videos.getById(this.config.videoId);\n this.setState({ videoData: video });\n\n if (video.subtitle) {\n this.captionCues = this.parseWebVTT(video.subtitle);\n }\n\n this.updateOverlayContent(video);\n this.emit('loaded', video);\n\n const videoUrl = video.videoUrl;\n\n if (isHLSSource(videoUrl)) {\n if (Hls.isSupported()) {\n if (this.hls) {\n this.hls.destroy();\n }\n\n const hls = new Hls({\n enableWorker: true,\n lowLatencyMode: true,\n });\n\n if (this.config.startMuted === true && this.videoElement) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n }\n\n hls.loadSource(videoUrl);\n hls.attachMedia(this.videoElement);\n\n if (this.config.startMuted === true && this.videoElement) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n }\n\n hls.on(Hls.Events.MANIFEST_PARSED, () => {\n this.setState({ isLoading: false });\n if (this.elements.loading) {\n this.elements.loading.style.display = 'none';\n }\n if (this.config.startMuted === true && this.videoElement) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n this.updateVolumeUI();\n }\n if (this.config.autoplay) {\n if (this.config.startMuted === true && this.videoElement) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n this.updateVolumeUI();\n }\n this.play();\n }\n });\n\n hls.on(Hls.Events.ERROR, (_event: unknown, data: { fatal?: boolean; type?: string; details?: string }) => {\n if (data.fatal) {\n const errorMsg = `HLS Error: ${data.type} - ${data.details}`;\n this.showError(errorMsg);\n this.emit('error', new Error(errorMsg));\n }\n });\n\n this.hls = hls;\n } else if (this.videoElement.canPlayType('application/vnd.apple.mpegurl')) {\n this.videoElement.src = videoUrl;\n if (this.config.startMuted === true) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n this.updateVolumeUI();\n }\n this.setState({ isLoading: false });\n if (this.elements.loading) {\n this.elements.loading.style.display = 'none';\n }\n if (this.config.autoplay) {\n if (this.config.startMuted === true && this.videoElement) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n this.updateVolumeUI();\n }\n this.play();\n }\n } else {\n throw new Error('HLS is not supported in this browser');\n }\n } else {\n this.videoElement.src = videoUrl;\n if (this.config.startMuted === true) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n this.updateVolumeUI();\n }\n this.setState({ isLoading: false });\n if (this.elements.loading) {\n this.elements.loading.style.display = 'none';\n }\n if (this.config.autoplay) {\n if (this.config.startMuted === true && this.videoElement) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n this.updateVolumeUI();\n }\n this.play();\n }\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : 'Failed to load video';\n this.showError(errorMsg);\n this.setState({ isLoading: false });\n this.emit('error', err instanceof Error ? err : new Error(errorMsg));\n }\n }\n\n private parseWebVTT(webvtt: string): CaptionCue[] {\n const cues: CaptionCue[] = [];\n const lines = webvtt.split('\\n');\n\n let i = 0;\n while (i < lines.length) {\n const line = lines[i].trim();\n\n if (line.includes('-->')) {\n const [startTime, endTime] = line.split('-->').map((t) => t.trim());\n\n const parseTimestamp = (timestamp: string): number => {\n const parts = timestamp.split(':');\n if (parts.length === 3) {\n const hours = parseFloat(parts[0]);\n const minutes = parseFloat(parts[1]);\n const seconds = parseFloat(parts[2]);\n return hours * 3600 + minutes * 60 + seconds;\n } else if (parts.length === 2) {\n const minutes = parseFloat(parts[0]);\n const seconds = parseFloat(parts[1]);\n return minutes * 60 + seconds;\n }\n return 0;\n };\n\n const start = parseTimestamp(startTime);\n const end = parseTimestamp(endTime);\n\n i++;\n const textLines: string[] = [];\n while (i < lines.length && lines[i].trim() !== '') {\n textLines.push(lines[i].trim());\n i++;\n }\n\n if (textLines.length > 0) {\n cues.push({\n start,\n end,\n text: textLines.join(' '),\n });\n }\n }\n\n i++;\n }\n\n return cues;\n }\n\n private updateOverlayContent(video: VideoDTO): void {\n const showLogo = this.config.showLogo !== false;\n const showTitle = this.config.showTitle !== false;\n const showAuthor = this.config.showAuthor !== false;\n const showDescription = this.config.showDescription !== false;\n const showCaptions = this.config.showCaptions !== false;\n\n if (this.elements.logo) {\n this.elements.logo.style.display = showLogo ? 'block' : 'none';\n }\n\n if (this.elements.videoTitle) {\n const question = video.question || '';\n const creator = video.creator || '';\n const titleText = creator ? `${question} - ${creator}` : question;\n this.elements.videoTitle.textContent = titleText;\n this.elements.videoTitle.style.display = showTitle && question ? 'block' : 'none';\n }\n\n if (this.elements.videoAuthor) {\n const authorData = (video as any).author || (video as any).creator || (video as any).userName || '';\n this.elements.videoAuthor.textContent = authorData;\n this.elements.videoAuthor.style.display = showAuthor && authorData ? 'block' : 'none';\n }\n\n if (this.elements.videoDescription) {\n const descriptionText = video.creatorBiography || video.description || '';\n if (descriptionText) {\n const maxLength = 150;\n const truncated = descriptionText.length > maxLength ? descriptionText.substring(0, maxLength) + '...' : descriptionText;\n this.elements.videoDescription.innerHTML = `\n <span class=\"jaaq-description-text\">${truncated}</span>\n ${descriptionText.length > maxLength ? '<span class=\"jaaq-read-more\"> Read more</span>' : ''}\n `;\n }\n this.elements.videoDescription.style.display = showDescription && descriptionText ? 'block' : 'none';\n }\n\n if (this.elements.captionsBtn) {\n this.elements.captionsBtn.style.display = showCaptions ? 'flex' : 'none';\n }\n }\n\n private attachEventListeners(): void {\n if (!this.videoElement) return;\n\n this.videoElement.addEventListener('play', () => {\n this.setState({ isPlaying: true });\n this.updatePlayPauseButton();\n if (this.elements.centerPlayBtn) {\n this.elements.centerPlayBtn.style.display = 'none';\n }\n this.emit('play', undefined);\n });\n\n this.videoElement.addEventListener('pause', () => {\n this.setState({ isPlaying: false });\n this.updatePlayPauseButton();\n if (this.elements.centerPlayBtn) {\n this.elements.centerPlayBtn.style.display = 'flex';\n }\n this.emit('pause', undefined);\n });\n\n this.videoElement.addEventListener('timeupdate', () => {\n this.setState({ currentTime: this.videoElement!.currentTime });\n this.updateProgress();\n this.updateCaptions();\n this.emit('timeupdate', this.videoElement!.currentTime);\n });\n\n this.videoElement.addEventListener('durationchange', () => {\n this.setState({ duration: this.videoElement!.duration });\n });\n\n this.videoElement.addEventListener('volumechange', () => {\n this.setState({\n volume: this.videoElement!.volume,\n isMuted: this.videoElement!.muted,\n });\n this.updateVolumeUI();\n this.emit('volumechange', this.videoElement!.volume);\n });\n\n this.videoElement.addEventListener('ended', () => {\n this.emit('ended', undefined);\n });\n\n this.elements.playPauseBtn?.addEventListener('click', () => {\n this.togglePlayPause();\n });\n\n this.elements.centerPlayBtn?.addEventListener('click', () => {\n this.play();\n if (this.elements.centerPlayBtn) {\n this.elements.centerPlayBtn.style.display = 'none';\n }\n });\n\n this.elements.progressBar?.addEventListener('click', (e) => {\n this.handleSeek(e);\n });\n\n this.elements.volumeBtn?.addEventListener('click', () => {\n this.toggleMute();\n });\n\n this.elements.captionsBtn?.addEventListener('click', () => {\n this.toggleCaptions();\n });\n\n this.elements.fullscreenBtn?.addEventListener('click', () => {\n this.toggleFullscreen();\n });\n\n document.addEventListener('fullscreenchange', () => {\n const isFullscreen = !!document.fullscreenElement;\n this.setState({ isFullscreen });\n this.elements.player?.classList.toggle('fullscreen', isFullscreen);\n this.emit('fullscreenchange', isFullscreen);\n });\n\n this.elements.player?.addEventListener('mousemove', () => {\n this.elements.player?.classList.remove('is-paused');\n });\n\n this.videoElement.addEventListener('pause', () => {\n this.elements.player?.classList.add('is-paused');\n });\n\n this.videoElement.addEventListener('play', () => {\n this.elements.player?.classList.remove('is-paused');\n });\n }\n\n private setState(newState: Partial<PlayerState>): void {\n this.state = { ...this.state, ...newState };\n }\n\n private updatePlayPauseButton(): void {\n if (this.elements.playPauseBtn) {\n this.elements.playPauseBtn.textContent = this.state.isPlaying ? '⏸' : '▶';\n this.elements.playPauseBtn.setAttribute('aria-label', this.state.isPlaying ? 'Pause' : 'Play');\n }\n }\n\n private updateProgress(): void {\n if (this.elements.progressFilled && this.state.duration > 0) {\n const progress = (this.state.currentTime / this.state.duration) * 100;\n this.elements.progressFilled.style.width = `${progress}%`;\n }\n }\n\n private updateVolumeUI(): void {\n if (this.elements.volumeBtn) {\n const { isMuted, volume } = this.state;\n\n if (isMuted || volume === 0) {\n this.elements.volumeBtn.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"20\" viewBox=\"0 0 22 20\" fill=\"none\">\n <path d=\"M11.2168 19.9287L4.20801 13.7031H0V6.22559H4.20898L11.2168 0V19.9287Z\" fill=\"white\"/>\n </svg>\n `;\n } else {\n this.elements.volumeBtn.innerHTML = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"20\" viewBox=\"0 0 22 20\" fill=\"none\">\n <path d=\"M11.2168 19.9287L4.20801 13.7031H0V6.22559H4.20898L11.2168 0V19.9287ZM14.0215 0.150391C16.2405 0.150468 18.1409 1.39074 19.4385 3.17676C20.7365 4.9634 21.499 7.36811 21.499 9.96484C21.499 12.5613 20.7363 14.9654 19.4385 16.752C18.1409 18.538 16.2405 19.7792 14.0215 19.7793V17.1025C15.2032 17.1025 16.3824 16.4464 17.3135 15.165C18.2442 13.8839 18.8593 12.0493 18.8594 9.96484C18.8594 7.88034 18.2442 6.04581 17.3135 4.76465C16.3824 3.4832 15.2033 2.82723 14.0215 2.82715V0.150391ZM14.0215 5.75879C15.5701 5.75896 16.8252 7.64189 16.8252 9.96484C16.8251 12.2877 15.57 14.1707 14.0215 14.1709V5.75879Z\" fill=\"white\"/>\n </svg>\n `;\n }\n }\n }\n\n private updateCaptions(): void {\n if (!this.elements.captionDisplay || !this.state.captionsEnabled) {\n if (this.elements.captionDisplay) {\n this.elements.captionDisplay.style.display = 'none';\n }\n return;\n }\n\n const currentTime = this.state.currentTime;\n const currentCue = this.captionCues.find((cue) => currentTime >= cue.start && currentTime <= cue.end);\n\n if (currentCue) {\n this.elements.captionDisplay.textContent = currentCue.text;\n this.elements.captionDisplay.style.display = 'block';\n } else {\n this.elements.captionDisplay.style.display = 'none';\n }\n }\n\n private handleSeek(e: MouseEvent): void {\n if (!this.videoElement || !this.state.duration || !this.elements.progressBar) return;\n\n const rect = this.elements.progressBar.getBoundingClientRect();\n const percent = (e.clientX - rect.left) / rect.width;\n this.videoElement.currentTime = this.state.duration * clamp(percent, 0, 1);\n }\n\n private showError(message: string): void {\n this.setState({ error: message, isLoading: false });\n if (this.elements.error) {\n this.elements.error.textContent = message;\n this.elements.error.style.display = 'block';\n }\n if (this.elements.loading) {\n this.elements.loading.style.display = 'none';\n }\n }\n\n private togglePlayPause(): void {\n if (this.state.isPlaying) {\n this.pause();\n } else {\n this.play();\n }\n }\n\n private toggleCaptions(): void {\n this.setState({ captionsEnabled: !this.state.captionsEnabled });\n this.updateCaptionsButton();\n this.updateCaptions();\n }\n\n private updateCaptionsButton(): void {\n if (this.elements.captionsBtn) {\n if (this.state.captionsEnabled) {\n this.elements.captionsBtn.classList.add('active');\n } else {\n this.elements.captionsBtn.classList.remove('active');\n }\n }\n }\n\n private toggleFullscreen(): void {\n if (this.elements.player) {\n toggleFullscreen(this.elements.player);\n }\n }\n\n /**\n * Starts or resumes video playback\n */\n public play(): void {\n if (this.videoElement) {\n if (this.config.startMuted === true && !this.videoElement.muted) {\n this.videoElement.muted = true;\n this.videoElement.setAttribute('muted', '');\n this.setState({ isMuted: true });\n }\n this.videoElement.play();\n }\n }\n\n /**\n * Pauses video playback\n */\n public pause(): void {\n this.videoElement?.pause();\n }\n\n /**\n * Sets the playback volume\n * @param volume - Volume level between 0 (silent) and 1 (maximum)\n */\n public setVolume(volume: number): void {\n if (this.videoElement) {\n this.videoElement.volume = clamp(volume, 0, 1);\n this.videoElement.muted = volume === 0;\n }\n }\n\n /**\n * Toggles audio mute state\n */\n public toggleMute(): void {\n if (this.videoElement) {\n this.videoElement.muted = !this.videoElement.muted;\n }\n }\n\n /**\n * Seeks to a specific time in the video\n * @param time - Target time in seconds\n */\n public seek(time: number): void {\n if (this.videoElement) {\n this.videoElement.currentTime = clamp(time, 0, this.state.duration);\n }\n }\n\n public setFeatures(\n features: Partial<\n Pick<PlayerConfig, 'showLogo' | 'showTitle' | 'showAuthor' | 'showDescription' | 'showCaptions' | 'controls' | 'startMuted'>\n >,\n ): void {\n this.config = { ...this.config, ...features };\n\n if (features.controls !== undefined) {\n this.updateControlsVisibility();\n }\n\n if (features.startMuted !== undefined && this.videoElement) {\n this.videoElement.muted = features.startMuted === true;\n if (features.startMuted === true) {\n this.videoElement.setAttribute('muted', '');\n } else {\n this.videoElement.removeAttribute('muted');\n }\n this.setState({ isMuted: features.startMuted === true });\n this.updateVolumeUI();\n }\n\n if (this.state.videoData) {\n this.updateOverlayContent(this.state.videoData);\n } else {\n if (features.showLogo !== undefined && this.elements.logo) {\n this.elements.logo.style.display = features.showLogo ? 'block' : 'none';\n }\n if (features.showCaptions !== undefined && this.elements.captionsBtn) {\n this.elements.captionsBtn.style.display = features.showCaptions ? 'flex' : 'none';\n }\n }\n }\n\n /**\n * Returns a copy of the current player state\n * @returns Current player state object\n */\n public getState(): PlayerState {\n return { ...this.state };\n }\n\n /**\n * Registers an event listener for player events\n * @param event - Event name to listen for\n * @param callback - Function to call when event fires\n */\n public on<K extends keyof PlayerEventMap>(event: K, callback: PlayerEventCallback<PlayerEventMap[K]>): void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(callback as PlayerEventCallback<unknown>);\n }\n\n /**\n * Removes an event listener for player events\n * @param event - Event name to stop listening for\n * @param callback - Function to remove from listeners\n */\n public off<K extends keyof PlayerEventMap>(event: K, callback: PlayerEventCallback<PlayerEventMap[K]>): void {\n const callbacks = this.listeners.get(event);\n if (callbacks) {\n callbacks.delete(callback as PlayerEventCallback<unknown>);\n }\n }\n\n private emit<K extends keyof PlayerEventMap>(event: K, data: PlayerEventMap[K]): void {\n const callbacks = this.listeners.get(event);\n if (callbacks) {\n callbacks.forEach((callback) => callback(data));\n }\n }\n\n /**\n * Destroys the player instance and cleans up resources\n * Removes all event listeners, stops playback, and clears the DOM\n */\n public destroy(): void {\n if (this.hls) {\n this.hls.destroy();\n this.hls = null;\n }\n\n if (this.videoElement) {\n this.videoElement.pause();\n this.videoElement.src = '';\n this.videoElement = null;\n }\n\n this.listeners.clear();\n this.container.innerHTML = '';\n }\n}\n","function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/*!\n * Splide.js\n * Version : 4.1.4\n * License : MIT\n * Copyright: 2022 Naotoshi Fujita\n */\nvar MEDIA_PREFERS_REDUCED_MOTION = \"(prefers-reduced-motion: reduce)\";\nvar CREATED = 1;\nvar MOUNTED = 2;\nvar IDLE = 3;\nvar MOVING = 4;\nvar SCROLLING = 5;\nvar DRAGGING = 6;\nvar DESTROYED = 7;\nvar STATES = {\n CREATED: CREATED,\n MOUNTED: MOUNTED,\n IDLE: IDLE,\n MOVING: MOVING,\n SCROLLING: SCROLLING,\n DRAGGING: DRAGGING,\n DESTROYED: DESTROYED\n};\n\nfunction empty(array) {\n array.length = 0;\n}\n\nfunction slice(arrayLike, start, end) {\n return Array.prototype.slice.call(arrayLike, start, end);\n}\n\nfunction apply(func) {\n return func.bind.apply(func, [null].concat(slice(arguments, 1)));\n}\n\nvar nextTick = setTimeout;\n\nvar noop = function noop() {};\n\nfunction raf(func) {\n return requestAnimationFrame(func);\n}\n\nfunction typeOf(type, subject) {\n return typeof subject === type;\n}\n\nfunction isObject(subject) {\n return !isNull(subject) && typeOf(\"object\", subject);\n}\n\nvar isArray = Array.isArray;\nvar isFunction = apply(typeOf, \"function\");\nvar isString = apply(typeOf, \"string\");\nvar isUndefined = apply(typeOf, \"undefined\");\n\nfunction isNull(subject) {\n return subject === null;\n}\n\nfunction isHTMLElement(subject) {\n try {\n return subject instanceof (subject.ownerDocument.defaultView || window).HTMLElement;\n } catch (e) {\n return false;\n }\n}\n\nfunction toArray(value) {\n return isArray(value) ? value : [value];\n}\n\nfunction forEach(values, iteratee) {\n toArray(values).forEach(iteratee);\n}\n\nfunction includes(array, value) {\n return array.indexOf(value) > -1;\n}\n\nfunction push(array, items) {\n array.push.apply(array, toArray(items));\n return array;\n}\n\nfunction toggleClass(elm, classes, add) {\n if (elm) {\n forEach(classes, function (name) {\n if (name) {\n elm.classList[add ? \"add\" : \"remove\"](name);\n }\n });\n }\n}\n\nfunction addClass(elm, classes) {\n toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\n}\n\nfunction append(parent, children) {\n forEach(children, parent.appendChild.bind(parent));\n}\n\nfunction before(nodes, ref) {\n forEach(nodes, function (node) {\n var parent = (ref || node).parentNode;\n\n if (parent) {\n parent.insertBefore(node, ref);\n }\n });\n}\n\nfunction matches(elm, selector) {\n return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\n}\n\nfunction children(parent, selector) {\n var children2 = parent ? slice(parent.children) : [];\n return selector ? children2.filter(function (child) {\n return matches(child, selector);\n }) : children2;\n}\n\nfunction child(parent, selector) {\n return selector ? children(parent, selector)[0] : parent.firstElementChild;\n}\n\nvar ownKeys = Object.keys;\n\nfunction forOwn(object, iteratee, right) {\n if (object) {\n (right ? ownKeys(object).reverse() : ownKeys(object)).forEach(function (key) {\n key !== \"__proto__\" && iteratee(object[key], key);\n });\n }\n\n return object;\n}\n\nfunction assign(object) {\n slice(arguments, 1).forEach(function (source) {\n forOwn(source, function (value, key) {\n object[key] = source[key];\n });\n });\n return object;\n}\n\nfunction merge(object) {\n slice(arguments, 1).forEach(function (source) {\n forOwn(source, function (value, key) {\n if (isArray(value)) {\n object[key] = value.slice();\n } else if (isObject(value)) {\n object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value);\n } else {\n object[key] = value;\n }\n });\n });\n return object;\n}\n\nfunction omit(object, keys) {\n forEach(keys || ownKeys(object), function (key) {\n delete object[key];\n });\n}\n\nfunction removeAttribute(elms, attrs) {\n forEach(elms, function (elm) {\n forEach(attrs, function (attr) {\n elm && elm.removeAttribute(attr);\n });\n });\n}\n\nfunction setAttribute(elms, attrs, value) {\n if (isObject(attrs)) {\n forOwn(attrs, function (value2, name) {\n setAttribute(elms, name, value2);\n });\n } else {\n forEach(elms, function (elm) {\n isNull(value) || value === \"\" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));\n });\n }\n}\n\nfunction create(tag, attrs, parent) {\n var elm = document.createElement(tag);\n\n if (attrs) {\n isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);\n }\n\n parent && append(parent, elm);\n return elm;\n}\n\nfunction style(elm, prop, value) {\n if (isUndefined(value)) {\n return getComputedStyle(elm)[prop];\n }\n\n if (!isNull(value)) {\n elm.style[prop] = \"\" + value;\n }\n}\n\nfunction display(elm, display2) {\n style(elm, \"display\", display2);\n}\n\nfunction focus(elm) {\n elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({\n preventScroll: true\n });\n}\n\nfunction getAttribute(elm, attr) {\n return elm.getAttribute(attr);\n}\n\nfunction hasClass(elm, className) {\n return elm && elm.classList.contains(className);\n}\n\nfunction rect(target) {\n return target.getBoundingClientRect();\n}\n\nfunction remove(nodes) {\n forEach(nodes, function (node) {\n if (node && node.parentNode) {\n node.parentNode.removeChild(node);\n }\n });\n}\n\nfunction parseHtml(html) {\n return child(new DOMParser().parseFromString(html, \"text/html\").body);\n}\n\nfunction prevent(e, stopPropagation) {\n e.preventDefault();\n\n if (stopPropagation) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n}\n\nfunction query(parent, selector) {\n return parent && parent.querySelector(selector);\n}\n\nfunction queryAll(parent, selector) {\n return selector ? slice(parent.querySelectorAll(selector)) : [];\n}\n\nfunction removeClass(elm, classes) {\n toggleClass(elm, classes, false);\n}\n\nfunction timeOf(e) {\n return e.timeStamp;\n}\n\nfunction unit(value) {\n return isString(value) ? value : value ? value + \"px\" : \"\";\n}\n\nvar PROJECT_CODE = \"splide\";\nvar DATA_ATTRIBUTE = \"data-\" + PROJECT_CODE;\n\nfunction assert(condition, message) {\n if (!condition) {\n throw new Error(\"[\" + PROJECT_CODE + \"] \" + (message || \"\"));\n }\n}\n\nvar min = Math.min,\n max = Math.max,\n floor = Math.floor,\n ceil = Math.ceil,\n abs = Math.abs;\n\nfunction approximatelyEqual(x, y, epsilon) {\n return abs(x - y) < epsilon;\n}\n\nfunction between(number, x, y, exclusive) {\n var minimum = min(x, y);\n var maximum = max(x, y);\n return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;\n}\n\nfunction clamp(number, x, y) {\n var minimum = min(x, y);\n var maximum = max(x, y);\n return min(max(minimum, number), maximum);\n}\n\nfunction sign(x) {\n return +(x > 0) - +(x < 0);\n}\n\nfunction camelToKebab(string) {\n return string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nfunction format(string, replacements) {\n forEach(replacements, function (replacement) {\n string = string.replace(\"%s\", \"\" + replacement);\n });\n return string;\n}\n\nfunction pad(number) {\n return number < 10 ? \"0\" + number : \"\" + number;\n}\n\nvar ids = {};\n\nfunction uniqueId(prefix) {\n return \"\" + prefix + pad(ids[prefix] = (ids[prefix] || 0) + 1);\n}\n\nfunction EventBinder() {\n var listeners = [];\n\n function bind(targets, events, callback, options) {\n forEachEvent(targets, events, function (target, event, namespace) {\n var isEventTarget = (\"addEventListener\" in target);\n var remover = isEventTarget ? target.removeEventListener.bind(target, event, callback, options) : target[\"removeListener\"].bind(target, callback);\n isEventTarget ? target.addEventListener(event, callback, options) : target[\"addListener\"](callback);\n listeners.push([target, event, namespace, callback, remover]);\n });\n }\n\n function unbind(targets, events, callback) {\n forEachEvent(targets, events, function (target, event, namespace) {\n listeners = listeners.filter(function (listener) {\n if (listener[0] === target && listener[1] === event && listener[2] === namespace && (!callback || listener[3] === callback)) {\n listener[4]();\n return false;\n }\n\n return true;\n });\n });\n }\n\n function dispatch(target, type, detail) {\n var e;\n var bubbles = true;\n\n if (typeof CustomEvent === \"function\") {\n e = new CustomEvent(type, {\n bubbles: bubbles,\n detail: detail\n });\n } else {\n e = document.createEvent(\"CustomEvent\");\n e.initCustomEvent(type, bubbles, false, detail);\n }\n\n target.dispatchEvent(e);\n return e;\n }\n\n function forEachEvent(targets, events, iteratee) {\n forEach(targets, function (target) {\n target && forEach(events, function (events2) {\n events2.split(\" \").forEach(function (eventNS) {\n var fragment = eventNS.split(\".\");\n iteratee(target, fragment[0], fragment[1]);\n });\n });\n });\n }\n\n function destroy() {\n listeners.forEach(function (data) {\n data[4]();\n });\n empty(listeners);\n }\n\n return {\n bind: bind,\n unbind: unbind,\n dispatch: dispatch,\n destroy: destroy\n };\n}\n\nvar EVENT_MOUNTED = \"mounted\";\nvar EVENT_READY = \"ready\";\nvar EVENT_MOVE = \"move\";\nvar EVENT_MOVED = \"moved\";\nvar EVENT_CLICK = \"click\";\nvar EVENT_ACTIVE = \"active\";\nvar EVENT_INACTIVE = \"inactive\";\nvar EVENT_VISIBLE = \"visible\";\nvar EVENT_HIDDEN = \"hidden\";\nvar EVENT_REFRESH = \"refresh\";\nvar EVENT_UPDATED = \"updated\";\nvar EVENT_RESIZE = \"resize\";\nvar EVENT_RESIZED = \"resized\";\nvar EVENT_DRAG = \"drag\";\nvar EVENT_DRAGGING = \"dragging\";\nvar EVENT_DRAGGED = \"dragged\";\nvar EVENT_SCROLL = \"scroll\";\nvar EVENT_SCROLLED = \"scrolled\";\nvar EVENT_OVERFLOW = \"overflow\";\nvar EVENT_DESTROY = \"destroy\";\nvar EVENT_ARROWS_MOUNTED = \"arrows:mounted\";\nvar EVENT_ARROWS_UPDATED = \"arrows:updated\";\nvar EVENT_PAGINATION_MOUNTED = \"pagination:mounted\";\nvar EVENT_PAGINATION_UPDATED = \"pagination:updated\";\nvar EVENT_NAVIGATION_MOUNTED = \"navigation:mounted\";\nvar EVENT_AUTOPLAY_PLAY = \"autoplay:play\";\nvar EVENT_AUTOPLAY_PLAYING = \"autoplay:playing\";\nvar EVENT_AUTOPLAY_PAUSE = \"autoplay:pause\";\nvar EVENT_LAZYLOAD_LOADED = \"lazyload:loaded\";\nvar EVENT_SLIDE_KEYDOWN = \"sk\";\nvar EVENT_SHIFTED = \"sh\";\nvar EVENT_END_INDEX_CHANGED = \"ei\";\n\nfunction EventInterface(Splide2) {\n var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment();\n var binder = EventBinder();\n\n function on(events, callback) {\n binder.bind(bus, toArray(events).join(\" \"), function (e) {\n callback.apply(callback, isArray(e.detail) ? e.detail : []);\n });\n }\n\n function emit(event) {\n binder.dispatch(bus, event, slice(arguments, 1));\n }\n\n if (Splide2) {\n Splide2.event.on(EVENT_DESTROY, binder.destroy);\n }\n\n return assign(binder, {\n bus: bus,\n on: on,\n off: apply(binder.unbind, bus),\n emit: emit\n });\n}\n\nfunction RequestInterval(interval, onInterval, onUpdate, limit) {\n var now = Date.now;\n var startTime;\n var rate = 0;\n var id;\n var paused = true;\n var count = 0;\n\n function update() {\n if (!paused) {\n rate = interval ? min((now() - startTime) / interval, 1) : 1;\n onUpdate && onUpdate(rate);\n\n if (rate >= 1) {\n onInterval();\n startTime = now();\n\n if (limit && ++count >= limit) {\n return pause();\n }\n }\n\n id = raf(update);\n }\n }\n\n function start(resume) {\n resume || cancel();\n startTime = now() - (resume ? rate * interval : 0);\n paused = false;\n id = raf(update);\n }\n\n function pause() {\n paused = true;\n }\n\n function rewind() {\n startTime = now();\n rate = 0;\n\n if (onUpdate) {\n onUpdate(rate);\n }\n }\n\n function cancel() {\n id && cancelAnimationFrame(id);\n rate = 0;\n id = 0;\n paused = true;\n }\n\n function set(time) {\n interval = time;\n }\n\n function isPaused() {\n return paused;\n }\n\n return {\n start: start,\n rewind: rewind,\n pause: pause,\n cancel: cancel,\n set: set,\n isPaused: isPaused\n };\n}\n\nfunction State(initialState) {\n var state = initialState;\n\n function set(value) {\n state = value;\n }\n\n function is(states) {\n return includes(toArray(states), state);\n }\n\n return {\n set: set,\n is: is\n };\n}\n\nfunction Throttle(func, duration) {\n var interval = RequestInterval(duration || 0, func, null, 1);\n return function () {\n interval.isPaused() && interval.start();\n };\n}\n\nfunction Media(Splide2, Components2, options) {\n var state = Splide2.state;\n var breakpoints = options.breakpoints || {};\n var reducedMotion = options.reducedMotion || {};\n var binder = EventBinder();\n var queries = [];\n\n function setup() {\n var isMin = options.mediaQuery === \"min\";\n ownKeys(breakpoints).sort(function (n, m) {\n return isMin ? +n - +m : +m - +n;\n }).forEach(function (key) {\n register(breakpoints[key], \"(\" + (isMin ? \"min\" : \"max\") + \"-width:\" + key + \"px)\");\n });\n register(reducedMotion, MEDIA_PREFERS_REDUCED_MOTION);\n update();\n }\n\n function destroy(completely) {\n if (completely) {\n binder.destroy();\n }\n }\n\n function register(options2, query) {\n var queryList = matchMedia(query);\n binder.bind(queryList, \"change\", update);\n queries.push([options2, queryList]);\n }\n\n function update() {\n var destroyed = state.is(DESTROYED);\n var direction = options.direction;\n var merged = queries.reduce(function (merged2, entry) {\n return merge(merged2, entry[1].matches ? entry[0] : {});\n }, {});\n omit(options);\n set(merged);\n\n if (options.destroy) {\n Splide2.destroy(options.destroy === \"completely\");\n } else if (destroyed) {\n destroy(true);\n Splide2.mount();\n } else {\n direction !== options.direction && Splide2.refresh();\n }\n }\n\n function reduce(enable) {\n if (matchMedia(MEDIA_PREFERS_REDUCED_MOTION).matches) {\n enable ? merge(options, reducedMotion) : omit(options, ownKeys(reducedMotion));\n }\n }\n\n function set(opts, base, notify) {\n merge(options, opts);\n base && merge(Object.getPrototypeOf(options), opts);\n\n if (notify || !state.is(CREATED)) {\n Splide2.emit(EVENT_UPDATED, options);\n }\n }\n\n return {\n setup: setup,\n destroy: destroy,\n reduce: reduce,\n set: set\n };\n}\n\nvar ARROW = \"Arrow\";\nvar ARROW_LEFT = ARROW + \"Left\";\nvar ARROW_RIGHT = ARROW + \"Right\";\nvar ARROW_UP = ARROW + \"Up\";\nvar ARROW_DOWN = ARROW + \"Down\";\nvar LTR = \"ltr\";\nvar RTL = \"rtl\";\nvar TTB = \"ttb\";\nvar ORIENTATION_MAP = {\n width: [\"height\"],\n left: [\"top\", \"right\"],\n right: [\"bottom\", \"left\"],\n x: [\"y\"],\n X: [\"Y\"],\n Y: [\"X\"],\n ArrowLeft: [ARROW_UP, ARROW_RIGHT],\n ArrowRight: [ARROW_DOWN, ARROW_LEFT]\n};\n\nfunction Direction(Splide2, Components2, options) {\n function resolve(prop, axisOnly, direction) {\n direction = direction || options.direction;\n var index = direction === RTL && !axisOnly ? 1 : direction === TTB ? 0 : -1;\n return ORIENTATION_MAP[prop] && ORIENTATION_MAP[prop][index] || prop.replace(/width|left|right/i, function (match, offset) {\n var replacement = ORIENTATION_MAP[match.toLowerCase()][index] || match;\n return offset > 0 ? replacement.charAt(0).toUpperCase() + replacement.slice(1) : replacement;\n });\n }\n\n function orient(value) {\n return value * (options.direction === RTL ? 1 : -1);\n }\n\n return {\n resolve: resolve,\n orient: orient\n };\n}\n\nvar ROLE = \"role\";\nvar TAB_INDEX = \"tabindex\";\nvar DISABLED = \"disabled\";\nvar ARIA_PREFIX = \"aria-\";\nvar ARIA_CONTROLS = ARIA_PREFIX + \"controls\";\nvar ARIA_CURRENT = ARIA_PREFIX + \"current\";\nvar ARIA_SELECTED = ARIA_PREFIX + \"selected\";\nvar ARIA_LABEL = ARIA_PREFIX + \"label\";\nvar ARIA_LABELLEDBY = ARIA_PREFIX + \"labelledby\";\nvar ARIA_HIDDEN = ARIA_PREFIX + \"hidden\";\nvar ARIA_ORIENTATION = ARIA_PREFIX + \"orientation\";\nvar ARIA_ROLEDESCRIPTION = ARIA_PREFIX + \"roledescription\";\nvar ARIA_LIVE = ARIA_PREFIX + \"live\";\nvar ARIA_BUSY = ARIA_PREFIX + \"busy\";\nvar ARIA_ATOMIC = ARIA_PREFIX + \"atomic\";\nvar ALL_ATTRIBUTES = [ROLE, TAB_INDEX, DISABLED, ARIA_CONTROLS, ARIA_CURRENT, ARIA_LABEL, ARIA_LABELLEDBY, ARIA_HIDDEN, ARIA_ORIENTATION, ARIA_ROLEDESCRIPTION];\nvar CLASS_PREFIX = PROJECT_CODE + \"__\";\nvar STATUS_CLASS_PREFIX = \"is-\";\nvar CLASS_ROOT = PROJECT_CODE;\nvar CLASS_TRACK = CLASS_PREFIX + \"track\";\nvar CLASS_LIST = CLASS_PREFIX + \"list\";\nvar CLASS_SLIDE = CLASS_PREFIX + \"slide\";\nvar CLASS_CLONE = CLASS_SLIDE + \"--clone\";\nvar CLASS_CONTAINER = CLASS_SLIDE + \"__container\";\nvar CLASS_ARROWS = CLASS_PREFIX + \"arrows\";\nvar CLASS_ARROW = CLASS_PREFIX + \"arrow\";\nvar CLASS_ARROW_PREV = CLASS_ARROW + \"--prev\";\nvar CLASS_ARROW_NEXT = CLASS_ARROW + \"--next\";\nvar CLASS_PAGINATION = CLASS_PREFIX + \"pagination\";\nvar CLASS_PAGINATION_PAGE = CLASS_PAGINATION + \"__page\";\nvar CLASS_PROGRESS = CLASS_PREFIX + \"progress\";\nvar CLASS_PROGRESS_BAR = CLASS_PROGRESS + \"__bar\";\nvar CLASS_TOGGLE = CLASS_PREFIX + \"toggle\";\nvar CLASS_TOGGLE_PLAY = CLASS_TOGGLE + \"__play\";\nvar CLASS_TOGGLE_PAUSE = CLASS_TOGGLE + \"__pause\";\nvar CLASS_SPINNER = CLASS_PREFIX + \"spinner\";\nvar CLASS_SR = CLASS_PREFIX + \"sr\";\nvar CLASS_INITIALIZED = STATUS_CLASS_PREFIX + \"initialized\";\nvar CLASS_ACTIVE = STATUS_CLASS_PREFIX + \"active\";\nvar CLASS_PREV = STATUS_CLASS_PREFIX + \"prev\";\nvar CLASS_NEXT = STATUS_CLASS_PREFIX + \"next\";\nvar CLASS_VISIBLE = STATUS_CLASS_PREFIX + \"visible\";\nvar CLASS_LOADING = STATUS_CLASS_PREFIX + \"loading\";\nvar CLASS_FOCUS_IN = STATUS_CLASS_PREFIX + \"focus-in\";\nvar CLASS_OVERFLOW = STATUS_CLASS_PREFIX + \"overflow\";\nvar STATUS_CLASSES = [CLASS_ACTIVE, CLASS_VISIBLE, CLASS_PREV, CLASS_NEXT, CLASS_LOADING, CLASS_FOCUS_IN, CLASS_OVERFLOW];\nvar CLASSES = {\n slide: CLASS_SLIDE,\n clone: CLASS_CLONE,\n arrows: CLASS_ARROWS,\n arrow: CLASS_ARROW,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n pagination: CLASS_PAGINATION,\n page: CLASS_PAGINATION_PAGE,\n spinner: CLASS_SPINNER\n};\n\nfunction closest(from, selector) {\n if (isFunction(from.closest)) {\n return from.closest(selector);\n }\n\n var elm = from;\n\n while (elm && elm.nodeType === 1) {\n if (matches(elm, selector)) {\n break;\n }\n\n elm = elm.parentElement;\n }\n\n return elm;\n}\n\nvar FRICTION = 5;\nvar LOG_INTERVAL = 200;\nvar POINTER_DOWN_EVENTS = \"touchstart mousedown\";\nvar POINTER_MOVE_EVENTS = \"touchmove mousemove\";\nvar POINTER_UP_EVENTS = \"touchend touchcancel mouseup click\";\n\nfunction Elements(Splide2, Components2, options) {\n var _EventInterface = EventInterface(Splide2),\n on = _EventInterface.on,\n bind = _EventInterface.bind;\n\n var root = Splide2.root;\n var i18n = options.i18n;\n var elements = {};\n var slides = [];\n var rootClasses = [];\n var trackClasses = [];\n var track;\n var list;\n var isUsingKey;\n\n function setup() {\n collect();\n init();\n update();\n }\n\n function mount() {\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, setup);\n on(EVENT_UPDATED, update);\n bind(document, POINTER_DOWN_EVENTS + \" keydown\", function (e) {\n isUsingKey = e.type === \"keydown\";\n }, {\n capture: true\n });\n bind(root, \"focusin\", function () {\n toggleClass(root, CLASS_FOCUS_IN, !!isUsingKey);\n });\n }\n\n function destroy(completely) {\n var attrs = ALL_ATTRIBUTES.concat(\"style\");\n empty(slides);\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n removeAttribute([track, list], attrs);\n removeAttribute(root, completely ? attrs : [\"style\", ARIA_ROLEDESCRIPTION]);\n }\n\n function update() {\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n rootClasses = getClasses(CLASS_ROOT);\n trackClasses = getClasses(CLASS_TRACK);\n addClass(root, rootClasses);\n addClass(track, trackClasses);\n setAttribute(root, ARIA_LABEL, options.label);\n setAttribute(root, ARIA_LABELLEDBY, options.labelledby);\n }\n\n function collect() {\n track = find(\".\" + CLASS_TRACK);\n list = child(track, \".\" + CLASS_LIST);\n assert(track && list, \"A track/list element is missing.\");\n push(slides, children(list, \".\" + CLASS_SLIDE + \":not(.\" + CLASS_CLONE + \")\"));\n forOwn({\n arrows: CLASS_ARROWS,\n pagination: CLASS_PAGINATION,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n bar: CLASS_PROGRESS_BAR,\n toggle: CLASS_TOGGLE\n }, function (className, key) {\n elements[key] = find(\".\" + className);\n });\n assign(elements, {\n root: root,\n track: track,\n list: list,\n slides: slides\n });\n }\n\n function init() {\n var id = root.id || uniqueId(PROJECT_CODE);\n var role = options.role;\n root.id = id;\n track.id = track.id || id + \"-track\";\n list.id = list.id || id + \"-list\";\n\n if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\n setAttribute(root, ROLE, role);\n }\n\n setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\n setAttribute(list, ROLE, \"presentation\");\n }\n\n function find(selector) {\n var elm = query(root, selector);\n return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\n }\n\n function getClasses(base) {\n return [base + \"--\" + options.type, base + \"--\" + options.direction, options.drag && base + \"--draggable\", options.isNavigation && base + \"--nav\", base === CLASS_ROOT && CLASS_ACTIVE];\n }\n\n return assign(elements, {\n setup: setup,\n mount: mount,\n destroy: destroy\n });\n}\n\nvar SLIDE = \"slide\";\nvar LOOP = \"loop\";\nvar FADE = \"fade\";\n\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n var event = EventInterface(Splide2);\n var on = event.on,\n emit = event.emit,\n bind = event.bind;\n var Components = Splide2.Components,\n root = Splide2.root,\n options = Splide2.options;\n var isNavigation = options.isNavigation,\n updateOnMove = options.updateOnMove,\n i18n = options.i18n,\n pagination = options.pagination,\n slideFocus = options.slideFocus;\n var resolve = Components.Direction.resolve;\n var styles = getAttribute(slide, \"style\");\n var label = getAttribute(slide, ARIA_LABEL);\n var isClone = slideIndex > -1;\n var container = child(slide, \".\" + CLASS_CONTAINER);\n var destroyed;\n\n function mount() {\n if (!isClone) {\n slide.id = root.id + \"-slide\" + pad(index + 1);\n setAttribute(slide, ROLE, pagination ? \"tabpanel\" : \"group\");\n setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide);\n setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length]));\n }\n\n listen();\n }\n\n function listen() {\n bind(slide, \"click\", apply(emit, EVENT_CLICK, self));\n bind(slide, \"keydown\", apply(emit, EVENT_SLIDE_KEYDOWN, self));\n on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update);\n on(EVENT_NAVIGATION_MOUNTED, initNavigation);\n\n if (updateOnMove) {\n on(EVENT_MOVE, onMove);\n }\n }\n\n function destroy() {\n destroyed = true;\n event.destroy();\n removeClass(slide, STATUS_CLASSES);\n removeAttribute(slide, ALL_ATTRIBUTES);\n setAttribute(slide, \"style\", styles);\n setAttribute(slide, ARIA_LABEL, label || \"\");\n }\n\n function initNavigation() {\n var controls = Splide2.splides.map(function (target) {\n var Slide2 = target.splide.Components.Slides.getAt(index);\n return Slide2 ? Slide2.slide.id : \"\";\n }).join(\" \");\n setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1));\n setAttribute(slide, ARIA_CONTROLS, controls);\n setAttribute(slide, ROLE, slideFocus ? \"button\" : \"\");\n slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION);\n }\n\n function onMove() {\n if (!destroyed) {\n update();\n }\n }\n\n function update() {\n if (!destroyed) {\n var curr = Splide2.index;\n updateActivity();\n updateVisibility();\n toggleClass(slide, CLASS_PREV, index === curr - 1);\n toggleClass(slide, CLASS_NEXT, index === curr + 1);\n }\n }\n\n function updateActivity() {\n var active = isActive();\n\n if (active !== hasClass(slide, CLASS_ACTIVE)) {\n toggleClass(slide, CLASS_ACTIVE, active);\n setAttribute(slide, ARIA_CURRENT, isNavigation && active || \"\");\n emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\n }\n }\n\n function updateVisibility() {\n var visible = isVisible();\n var hidden = !visible && (!isActive() || isClone);\n\n if (!Splide2.state.is([MOVING, SCROLLING])) {\n setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n }\n\n setAttribute(queryAll(slide, options.focusableNodes || \"\"), TAB_INDEX, hidden ? -1 : \"\");\n\n if (slideFocus) {\n setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n }\n\n if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n toggleClass(slide, CLASS_VISIBLE, visible);\n emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n }\n\n if (!visible && document.activeElement === slide) {\n var Slide2 = Components.Slides.getAt(Splide2.index);\n Slide2 && focus(Slide2.slide);\n }\n }\n\n function style$1(prop, value, useContainer) {\n style(useContainer && container || slide, prop, value);\n }\n\n function isActive() {\n var curr = Splide2.index;\n return curr === index || options.cloneStatus && curr === slideIndex;\n }\n\n function isVisible() {\n if (Splide2.is(FADE)) {\n return isActive();\n }\n\n var trackRect = rect(Components.Elements.track);\n var slideRect = rect(slide);\n var left = resolve(\"left\", true);\n var right = resolve(\"right\", true);\n return floor(trackRect[left]) <= ceil(slideRect[left]) && floor(slideRect[right]) <= ceil(trackRect[right]);\n }\n\n function isWithin(from, distance) {\n var diff = abs(from - index);\n\n if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n diff = min(diff, Splide2.length - diff);\n }\n\n return diff <= distance;\n }\n\n var self = {\n index: index,\n slideIndex: slideIndex,\n slide: slide,\n container: container,\n isClone: isClone,\n mount: mount,\n destroy: destroy,\n update: update,\n style: style$1,\n isWithin: isWithin\n };\n return self;\n}\n\nfunction Slides(Splide2, Components2, options) {\n var _EventInterface2 = EventInterface(Splide2),\n on = _EventInterface2.on,\n emit = _EventInterface2.emit,\n bind = _EventInterface2.bind;\n\n var _Components2$Elements = Components2.Elements,\n slides = _Components2$Elements.slides,\n list = _Components2$Elements.list;\n var Slides2 = [];\n\n function mount() {\n init();\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, init);\n }\n\n function init() {\n slides.forEach(function (slide, index) {\n register(slide, index, -1);\n });\n }\n\n function destroy() {\n forEach$1(function (Slide2) {\n Slide2.destroy();\n });\n empty(Slides2);\n }\n\n function update() {\n forEach$1(function (Slide2) {\n Slide2.update();\n });\n }\n\n function register(slide, index, slideIndex) {\n var object = Slide$1(Splide2, index, slideIndex, slide);\n object.mount();\n Slides2.push(object);\n Slides2.sort(function (Slide1, Slide2) {\n return Slide1.index - Slide2.index;\n });\n }\n\n function get(excludeClones) {\n return excludeClones ? filter(function (Slide2) {\n return !Slide2.isClone;\n }) : Slides2;\n }\n\n function getIn(page) {\n var Controller = Components2.Controller;\n var index = Controller.toIndex(page);\n var max = Controller.hasFocus() ? 1 : options.perPage;\n return filter(function (Slide2) {\n return between(Slide2.index, index, index + max - 1);\n });\n }\n\n function getAt(index) {\n return filter(index)[0];\n }\n\n function add(items, index) {\n forEach(items, function (slide) {\n if (isString(slide)) {\n slide = parseHtml(slide);\n }\n\n if (isHTMLElement(slide)) {\n var ref = slides[index];\n ref ? before(slide, ref) : append(list, slide);\n addClass(slide, options.classes.slide);\n observeImages(slide, apply(emit, EVENT_RESIZE));\n }\n });\n emit(EVENT_REFRESH);\n }\n\n function remove$1(matcher) {\n remove(filter(matcher).map(function (Slide2) {\n return Slide2.slide;\n }));\n emit(EVENT_REFRESH);\n }\n\n function forEach$1(iteratee, excludeClones) {\n get(excludeClones).forEach(iteratee);\n }\n\n function filter(matcher) {\n return Slides2.filter(isFunction(matcher) ? matcher : function (Slide2) {\n return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index);\n });\n }\n\n function style(prop, value, useContainer) {\n forEach$1(function (Slide2) {\n Slide2.style(prop, value, useContainer);\n });\n }\n\n function observeImages(elm, callback) {\n var images = queryAll(elm, \"img\");\n var length = images.length;\n\n if (length) {\n images.forEach(function (img) {\n bind(img, \"load error\", function () {\n if (! --length) {\n callback();\n }\n });\n });\n } else {\n callback();\n }\n }\n\n function getLength(excludeClones) {\n return excludeClones ? slides.length : Slides2.length;\n }\n\n function isEnough() {\n return Slides2.length > options.perPage;\n }\n\n return {\n mount: mount,\n destroy: destroy,\n update: update,\n register: register,\n get: get,\n getIn: getIn,\n getAt: getAt,\n add: add,\n remove: remove$1,\n forEach: forEach$1,\n filter: filter,\n style: style,\n getLength: getLength,\n isEnough: isEnough\n };\n}\n\nfunction Layout(Splide2, Components2, options) {\n var _EventInterface3 = EventInterface(Splide2),\n on = _EventInterface3.on,\n bind = _EventInterface3.bind,\n emit = _EventInterface3.emit;\n\n var Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var _Components2$Elements2 = Components2.Elements,\n root = _Components2$Elements2.root,\n track = _Components2$Elements2.track,\n list = _Components2$Elements2.list;\n var getAt = Slides.getAt,\n styleSlides = Slides.style;\n var vertical;\n var rootRect;\n var overflow;\n\n function mount() {\n init();\n bind(window, \"resize load\", Throttle(apply(emit, EVENT_RESIZE)));\n on([EVENT_UPDATED, EVENT_REFRESH], init);\n on(EVENT_RESIZE, resize);\n }\n\n function init() {\n vertical = options.direction === TTB;\n style(root, \"maxWidth\", unit(options.width));\n style(track, resolve(\"paddingLeft\"), cssPadding(false));\n style(track, resolve(\"paddingRight\"), cssPadding(true));\n resize(true);\n }\n\n function resize(force) {\n var newRect = rect(root);\n\n if (force || rootRect.width !== newRect.width || rootRect.height !== newRect.height) {\n style(track, \"height\", cssTrackHeight());\n styleSlides(resolve(\"marginRight\"), unit(options.gap));\n styleSlides(\"width\", cssSlideWidth());\n styleSlides(\"height\", cssSlideHeight(), true);\n rootRect = newRect;\n emit(EVENT_RESIZED);\n\n if (overflow !== (overflow = isOverflow())) {\n toggleClass(root, CLASS_OVERFLOW, overflow);\n emit(EVENT_OVERFLOW, overflow);\n }\n }\n }\n\n function cssPadding(right) {\n var padding = options.padding;\n var prop = resolve(right ? \"right\" : \"left\");\n return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n }\n\n function cssTrackHeight() {\n var height = \"\";\n\n if (vertical) {\n height = cssHeight();\n assert(height, \"height or heightRatio is missing.\");\n height = \"calc(\" + height + \" - \" + cssPadding(false) + \" - \" + cssPadding(true) + \")\";\n }\n\n return height;\n }\n\n function cssHeight() {\n return unit(options.height || rect(list).width * options.heightRatio);\n }\n\n function cssSlideWidth() {\n return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\n }\n\n function cssSlideHeight() {\n return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight());\n }\n\n function cssSlideSize() {\n var gap = unit(options.gap);\n return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n }\n\n function listSize() {\n return rect(list)[resolve(\"width\")];\n }\n\n function slideSize(index, withoutGap) {\n var Slide = getAt(index || 0);\n return Slide ? rect(Slide.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\n }\n\n function totalSize(index, withoutGap) {\n var Slide = getAt(index);\n\n if (Slide) {\n var right = rect(Slide.slide)[resolve(\"right\")];\n var left = rect(list)[resolve(\"left\")];\n return abs(right - left) + (withoutGap ? 0 : getGap());\n }\n\n return 0;\n }\n\n function sliderSize(withoutGap) {\n return totalSize(Splide2.length - 1) - totalSize(0) + slideSize(0, withoutGap);\n }\n\n function getGap() {\n var Slide = getAt(0);\n return Slide && parseFloat(style(Slide.slide, resolve(\"marginRight\"))) || 0;\n }\n\n function getPadding(right) {\n return parseFloat(style(track, resolve(\"padding\" + (right ? \"Right\" : \"Left\")))) || 0;\n }\n\n function isOverflow() {\n return Splide2.is(FADE) || sliderSize(true) > listSize();\n }\n\n return {\n mount: mount,\n resize: resize,\n listSize: listSize,\n slideSize: slideSize,\n sliderSize: sliderSize,\n totalSize: totalSize,\n getPadding: getPadding,\n isOverflow: isOverflow\n };\n}\n\nvar MULTIPLIER = 2;\n\nfunction Clones(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on;\n var Elements = Components2.Elements,\n Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var clones = [];\n var cloneCount;\n\n function mount() {\n on(EVENT_REFRESH, remount);\n on([EVENT_UPDATED, EVENT_RESIZE], observe);\n\n if (cloneCount = computeCloneCount()) {\n generate(cloneCount);\n Components2.Layout.resize(true);\n }\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function destroy() {\n remove(clones);\n empty(clones);\n event.destroy();\n }\n\n function observe() {\n var count = computeCloneCount();\n\n if (cloneCount !== count) {\n if (cloneCount < count || !count) {\n event.emit(EVENT_REFRESH);\n }\n }\n }\n\n function generate(count) {\n var slides = Slides.get().slice();\n var length = slides.length;\n\n if (length) {\n while (slides.length < count) {\n push(slides, slides);\n }\n\n push(slides.slice(-count), slides.slice(0, count)).forEach(function (Slide, index) {\n var isHead = index < count;\n var clone = cloneDeep(Slide.slide, index);\n isHead ? before(clone, slides[0].slide) : append(Elements.list, clone);\n push(clones, clone);\n Slides.register(clone, index - count + (isHead ? 0 : length), Slide.index);\n });\n }\n }\n\n function cloneDeep(elm, index) {\n var clone = elm.cloneNode(true);\n addClass(clone, options.classes.clone);\n clone.id = Splide2.root.id + \"-clone\" + pad(index + 1);\n return clone;\n }\n\n function computeCloneCount() {\n var clones2 = options.clones;\n\n if (!Splide2.is(LOOP)) {\n clones2 = 0;\n } else if (isUndefined(clones2)) {\n var fixedSize = options[resolve(\"fixedWidth\")] && Components2.Layout.slideSize(0);\n var fixedCount = fixedSize && ceil(rect(Elements.track)[resolve(\"width\")] / fixedSize);\n clones2 = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage * MULTIPLIER;\n }\n\n return clones2;\n }\n\n return {\n mount: mount,\n destroy: destroy\n };\n}\n\nfunction Move(Splide2, Components2, options) {\n var _EventInterface4 = EventInterface(Splide2),\n on = _EventInterface4.on,\n emit = _EventInterface4.emit;\n\n var set = Splide2.state.set;\n var _Components2$Layout = Components2.Layout,\n slideSize = _Components2$Layout.slideSize,\n getPadding = _Components2$Layout.getPadding,\n totalSize = _Components2$Layout.totalSize,\n listSize = _Components2$Layout.listSize,\n sliderSize = _Components2$Layout.sliderSize;\n var _Components2$Directio = Components2.Direction,\n resolve = _Components2$Directio.resolve,\n orient = _Components2$Directio.orient;\n var _Components2$Elements3 = Components2.Elements,\n list = _Components2$Elements3.list,\n track = _Components2$Elements3.track;\n var Transition;\n\n function mount() {\n Transition = Components2.Transition;\n on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\n }\n\n function reposition() {\n if (!Components2.Controller.isBusy()) {\n Components2.Scroll.cancel();\n jump(Splide2.index);\n Components2.Slides.update();\n }\n }\n\n function move(dest, index, prev, callback) {\n if (dest !== index && canShift(dest > prev)) {\n cancel();\n translate(shift(getPosition(), dest > prev), true);\n }\n\n set(MOVING);\n emit(EVENT_MOVE, index, prev, dest);\n Transition.start(index, function () {\n set(IDLE);\n emit(EVENT_MOVED, index, prev, dest);\n callback && callback();\n });\n }\n\n function jump(index) {\n translate(toPosition(index, true));\n }\n\n function translate(position, preventLoop) {\n if (!Splide2.is(FADE)) {\n var destination = preventLoop ? position : loop(position);\n style(list, \"transform\", \"translate\" + resolve(\"X\") + \"(\" + destination + \"px)\");\n position !== destination && emit(EVENT_SHIFTED);\n }\n }\n\n function loop(position) {\n if (Splide2.is(LOOP)) {\n var index = toIndex(position);\n var exceededMax = index > Components2.Controller.getEnd();\n var exceededMin = index < 0;\n\n if (exceededMin || exceededMax) {\n position = shift(position, exceededMax);\n }\n }\n\n return position;\n }\n\n function shift(position, backwards) {\n var excess = position - getLimit(backwards);\n var size = sliderSize();\n position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1);\n return position;\n }\n\n function cancel() {\n translate(getPosition(), true);\n Transition.cancel();\n }\n\n function toIndex(position) {\n var Slides = Components2.Slides.get();\n var index = 0;\n var minDistance = Infinity;\n\n for (var i = 0; i < Slides.length; i++) {\n var slideIndex = Slides[i].index;\n var distance = abs(toPosition(slideIndex, true) - position);\n\n if (distance <= minDistance) {\n minDistance = distance;\n index = slideIndex;\n } else {\n break;\n }\n }\n\n return index;\n }\n\n function toPosition(index, trimming) {\n var position = orient(totalSize(index - 1) - offset(index));\n return trimming ? trim(position) : position;\n }\n\n function getPosition() {\n var left = resolve(\"left\");\n return rect(list)[left] - rect(track)[left] + orient(getPadding(false));\n }\n\n function trim(position) {\n if (options.trimSpace && Splide2.is(SLIDE)) {\n position = clamp(position, 0, orient(sliderSize(true) - listSize()));\n }\n\n return position;\n }\n\n function offset(index) {\n var focus = options.focus;\n return focus === \"center\" ? (listSize() - slideSize(index, true)) / 2 : +focus * slideSize(index) || 0;\n }\n\n function getLimit(max) {\n return toPosition(max ? Components2.Controller.getEnd() : 0, !!options.trimSpace);\n }\n\n function canShift(backwards) {\n var shifted = orient(shift(getPosition(), backwards));\n return backwards ? shifted >= 0 : shifted <= list[resolve(\"scrollWidth\")] - rect(track)[resolve(\"width\")];\n }\n\n function exceededLimit(max, position) {\n position = isUndefined(position) ? getPosition() : position;\n var exceededMin = max !== true && orient(position) < orient(getLimit(false));\n var exceededMax = max !== false && orient(position) > orient(getLimit(true));\n return exceededMin || exceededMax;\n }\n\n return {\n mount: mount,\n move: move,\n jump: jump,\n translate: translate,\n shift: shift,\n cancel: cancel,\n toIndex: toIndex,\n toPosition: toPosition,\n getPosition: getPosition,\n getLimit: getLimit,\n exceededLimit: exceededLimit,\n reposition: reposition\n };\n}\n\nfunction Controller(Splide2, Components2, options) {\n var _EventInterface5 = EventInterface(Splide2),\n on = _EventInterface5.on,\n emit = _EventInterface5.emit;\n\n var Move = Components2.Move;\n var getPosition = Move.getPosition,\n getLimit = Move.getLimit,\n toPosition = Move.toPosition;\n var _Components2$Slides = Components2.Slides,\n isEnough = _Components2$Slides.isEnough,\n getLength = _Components2$Slides.getLength;\n var omitEnd = options.omitEnd;\n var isLoop = Splide2.is(LOOP);\n var isSlide = Splide2.is(SLIDE);\n var getNext = apply(getAdjacent, false);\n var getPrev = apply(getAdjacent, true);\n var currIndex = options.start || 0;\n var endIndex;\n var prevIndex = currIndex;\n var slideCount;\n var perMove;\n var perPage;\n\n function mount() {\n init();\n on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], init);\n on(EVENT_RESIZED, onResized);\n }\n\n function init() {\n slideCount = getLength(true);\n perMove = options.perMove;\n perPage = options.perPage;\n endIndex = getEnd();\n var index = clamp(currIndex, 0, omitEnd ? endIndex : slideCount - 1);\n\n if (index !== currIndex) {\n currIndex = index;\n Move.reposition();\n }\n }\n\n function onResized() {\n if (endIndex !== getEnd()) {\n emit(EVENT_END_INDEX_CHANGED);\n }\n }\n\n function go(control, allowSameIndex, callback) {\n if (!isBusy()) {\n var dest = parse(control);\n var index = loop(dest);\n\n if (index > -1 && (allowSameIndex || index !== currIndex)) {\n setIndex(index);\n Move.move(dest, index, prevIndex, callback);\n }\n }\n }\n\n function scroll(destination, duration, snap, callback) {\n Components2.Scroll.scroll(destination, duration, snap, function () {\n var index = loop(Move.toIndex(getPosition()));\n setIndex(omitEnd ? min(index, endIndex) : index);\n callback && callback();\n });\n }\n\n function parse(control) {\n var index = currIndex;\n\n if (isString(control)) {\n var _ref = control.match(/([+\\-<>])(\\d+)?/) || [],\n indicator = _ref[1],\n number = _ref[2];\n\n if (indicator === \"+\" || indicator === \"-\") {\n index = computeDestIndex(currIndex + +(\"\" + indicator + (+number || 1)), currIndex);\n } else if (indicator === \">\") {\n index = number ? toIndex(+number) : getNext(true);\n } else if (indicator === \"<\") {\n index = getPrev(true);\n }\n } else {\n index = isLoop ? control : clamp(control, 0, endIndex);\n }\n\n return index;\n }\n\n function getAdjacent(prev, destination) {\n var number = perMove || (hasFocus() ? 1 : perPage);\n var dest = computeDestIndex(currIndex + number * (prev ? -1 : 1), currIndex, !(perMove || hasFocus()));\n\n if (dest === -1 && isSlide) {\n if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {\n return prev ? 0 : endIndex;\n }\n }\n\n return destination ? dest : loop(dest);\n }\n\n function computeDestIndex(dest, from, snapPage) {\n if (isEnough() || hasFocus()) {\n var index = computeMovableDestIndex(dest);\n\n if (index !== dest) {\n from = dest;\n dest = index;\n snapPage = false;\n }\n\n if (dest < 0 || dest > endIndex) {\n if (!perMove && (between(0, dest, from, true) || between(endIndex, from, dest, true))) {\n dest = toIndex(toPage(dest));\n } else {\n if (isLoop) {\n dest = snapPage ? dest < 0 ? -(slideCount % perPage || perPage) : slideCount : dest;\n } else if (options.rewind) {\n dest = dest < 0 ? endIndex : 0;\n } else {\n dest = -1;\n }\n }\n } else {\n if (snapPage && dest !== from) {\n dest = toIndex(toPage(from) + (dest < from ? -1 : 1));\n }\n }\n } else {\n dest = -1;\n }\n\n return dest;\n }\n\n function computeMovableDestIndex(dest) {\n if (isSlide && options.trimSpace === \"move\" && dest !== currIndex) {\n var position = getPosition();\n\n while (position === toPosition(dest, true) && between(dest, 0, Splide2.length - 1, !options.rewind)) {\n dest < currIndex ? --dest : ++dest;\n }\n }\n\n return dest;\n }\n\n function loop(index) {\n return isLoop ? (index + slideCount) % slideCount || 0 : index;\n }\n\n function getEnd() {\n var end = slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage);\n\n while (omitEnd && end-- > 0) {\n if (toPosition(slideCount - 1, true) !== toPosition(end, true)) {\n end++;\n break;\n }\n }\n\n return clamp(end, 0, slideCount - 1);\n }\n\n function toIndex(page) {\n return clamp(hasFocus() ? page : perPage * page, 0, endIndex);\n }\n\n function toPage(index) {\n return hasFocus() ? min(index, endIndex) : floor((index >= endIndex ? slideCount - 1 : index) / perPage);\n }\n\n function toDest(destination) {\n var closest = Move.toIndex(destination);\n return isSlide ? clamp(closest, 0, endIndex) : closest;\n }\n\n function setIndex(index) {\n if (index !== currIndex) {\n prevIndex = currIndex;\n currIndex = index;\n }\n }\n\n function getIndex(prev) {\n return prev ? prevIndex : currIndex;\n }\n\n function hasFocus() {\n return !isUndefined(options.focus) || options.isNavigation;\n }\n\n function isBusy() {\n return Splide2.state.is([MOVING, SCROLLING]) && !!options.waitForTransition;\n }\n\n return {\n mount: mount,\n go: go,\n scroll: scroll,\n getNext: getNext,\n getPrev: getPrev,\n getAdjacent: getAdjacent,\n getEnd: getEnd,\n setIndex: setIndex,\n getIndex: getIndex,\n toIndex: toIndex,\n toPage: toPage,\n toDest: toDest,\n hasFocus: hasFocus,\n isBusy: isBusy\n };\n}\n\nvar XML_NAME_SPACE = \"http://www.w3.org/2000/svg\";\nvar PATH = \"m15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z\";\nvar SIZE = 40;\n\nfunction Arrows(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on,\n bind = event.bind,\n emit = event.emit;\n var classes = options.classes,\n i18n = options.i18n;\n var Elements = Components2.Elements,\n Controller = Components2.Controller;\n var placeholder = Elements.arrows,\n track = Elements.track;\n var wrapper = placeholder;\n var prev = Elements.prev;\n var next = Elements.next;\n var created;\n var wrapperClasses;\n var arrows = {};\n\n function mount() {\n init();\n on(EVENT_UPDATED, remount);\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function init() {\n var enabled = options.arrows;\n\n if (enabled && !(prev && next)) {\n createArrows();\n }\n\n if (prev && next) {\n assign(arrows, {\n prev: prev,\n next: next\n });\n display(wrapper, enabled ? \"\" : \"none\");\n addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\n\n if (enabled) {\n listen();\n update();\n setAttribute([prev, next], ARIA_CONTROLS, track.id);\n emit(EVENT_ARROWS_MOUNTED, prev, next);\n }\n }\n }\n\n function destroy() {\n event.destroy();\n removeClass(wrapper, wrapperClasses);\n\n if (created) {\n remove(placeholder ? [prev, next] : wrapper);\n prev = next = null;\n } else {\n removeAttribute([prev, next], ALL_ATTRIBUTES);\n }\n }\n\n function listen() {\n on([EVENT_MOUNTED, EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED, EVENT_END_INDEX_CHANGED], update);\n bind(next, \"click\", apply(go, \">\"));\n bind(prev, \"click\", apply(go, \"<\"));\n }\n\n function go(control) {\n Controller.go(control, true);\n }\n\n function createArrows() {\n wrapper = placeholder || create(\"div\", classes.arrows);\n prev = createArrow(true);\n next = createArrow(false);\n created = true;\n append(wrapper, [prev, next]);\n !placeholder && before(wrapper, track);\n }\n\n function createArrow(prev2) {\n var arrow = \"<button class=\\\"\" + classes.arrow + \" \" + (prev2 ? classes.prev : classes.next) + \"\\\" type=\\\"button\\\"><svg xmlns=\\\"\" + XML_NAME_SPACE + \"\\\" viewBox=\\\"0 0 \" + SIZE + \" \" + SIZE + \"\\\" width=\\\"\" + SIZE + \"\\\" height=\\\"\" + SIZE + \"\\\" focusable=\\\"false\\\"><path d=\\\"\" + (options.arrowPath || PATH) + \"\\\" />\";\n return parseHtml(arrow);\n }\n\n function update() {\n if (prev && next) {\n var index = Splide2.index;\n var prevIndex = Controller.getPrev();\n var nextIndex = Controller.getNext();\n var prevLabel = prevIndex > -1 && index < prevIndex ? i18n.last : i18n.prev;\n var nextLabel = nextIndex > -1 && index > nextIndex ? i18n.first : i18n.next;\n prev.disabled = prevIndex < 0;\n next.disabled = nextIndex < 0;\n setAttribute(prev, ARIA_LABEL, prevLabel);\n setAttribute(next, ARIA_LABEL, nextLabel);\n emit(EVENT_ARROWS_UPDATED, prev, next, prevIndex, nextIndex);\n }\n }\n\n return {\n arrows: arrows,\n mount: mount,\n destroy: destroy,\n update: update\n };\n}\n\nvar INTERVAL_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-interval\";\n\nfunction Autoplay(Splide2, Components2, options) {\n var _EventInterface6 = EventInterface(Splide2),\n on = _EventInterface6.on,\n bind = _EventInterface6.bind,\n emit = _EventInterface6.emit;\n\n var interval = RequestInterval(options.interval, Splide2.go.bind(Splide2, \">\"), onAnimationFrame);\n var isPaused = interval.isPaused;\n var Elements = Components2.Elements,\n _Components2$Elements4 = Components2.Elements,\n root = _Components2$Elements4.root,\n toggle = _Components2$Elements4.toggle;\n var autoplay = options.autoplay;\n var hovered;\n var focused;\n var stopped = autoplay === \"pause\";\n\n function mount() {\n if (autoplay) {\n listen();\n toggle && setAttribute(toggle, ARIA_CONTROLS, Elements.track.id);\n stopped || play();\n update();\n }\n }\n\n function listen() {\n if (options.pauseOnHover) {\n bind(root, \"mouseenter mouseleave\", function (e) {\n hovered = e.type === \"mouseenter\";\n autoToggle();\n });\n }\n\n if (options.pauseOnFocus) {\n bind(root, \"focusin focusout\", function (e) {\n focused = e.type === \"focusin\";\n autoToggle();\n });\n }\n\n if (toggle) {\n bind(toggle, \"click\", function () {\n stopped ? play() : pause(true);\n });\n }\n\n on([EVENT_MOVE, EVENT_SCROLL, EVENT_REFRESH], interval.rewind);\n on(EVENT_MOVE, onMove);\n }\n\n function play() {\n if (isPaused() && Components2.Slides.isEnough()) {\n interval.start(!options.resetProgress);\n focused = hovered = stopped = false;\n update();\n emit(EVENT_AUTOPLAY_PLAY);\n }\n }\n\n function pause(stop) {\n if (stop === void 0) {\n stop = true;\n }\n\n stopped = !!stop;\n update();\n\n if (!isPaused()) {\n interval.pause();\n emit(EVENT_AUTOPLAY_PAUSE);\n }\n }\n\n function autoToggle() {\n if (!stopped) {\n hovered || focused ? pause(false) : play();\n }\n }\n\n function update() {\n if (toggle) {\n toggleClass(toggle, CLASS_ACTIVE, !stopped);\n setAttribute(toggle, ARIA_LABEL, options.i18n[stopped ? \"play\" : \"pause\"]);\n }\n }\n\n function onAnimationFrame(rate) {\n var bar = Elements.bar;\n bar && style(bar, \"width\", rate * 100 + \"%\");\n emit(EVENT_AUTOPLAY_PLAYING, rate);\n }\n\n function onMove(index) {\n var Slide = Components2.Slides.getAt(index);\n interval.set(Slide && +getAttribute(Slide.slide, INTERVAL_DATA_ATTRIBUTE) || options.interval);\n }\n\n return {\n mount: mount,\n destroy: interval.cancel,\n play: play,\n pause: pause,\n isPaused: isPaused\n };\n}\n\nfunction Cover(Splide2, Components2, options) {\n var _EventInterface7 = EventInterface(Splide2),\n on = _EventInterface7.on;\n\n function mount() {\n if (options.cover) {\n on(EVENT_LAZYLOAD_LOADED, apply(toggle, true));\n on([EVENT_MOUNTED, EVENT_UPDATED, EVENT_REFRESH], apply(cover, true));\n }\n }\n\n function cover(cover2) {\n Components2.Slides.forEach(function (Slide) {\n var img = child(Slide.container || Slide.slide, \"img\");\n\n if (img && img.src) {\n toggle(cover2, img, Slide);\n }\n });\n }\n\n function toggle(cover2, img, Slide) {\n Slide.style(\"background\", cover2 ? \"center/cover no-repeat url(\\\"\" + img.src + \"\\\")\" : \"\", true);\n display(img, cover2 ? \"none\" : \"\");\n }\n\n return {\n mount: mount,\n destroy: apply(cover, false)\n };\n}\n\nvar BOUNCE_DIFF_THRESHOLD = 10;\nvar BOUNCE_DURATION = 600;\nvar FRICTION_FACTOR = 0.6;\nvar BASE_VELOCITY = 1.5;\nvar MIN_DURATION = 800;\n\nfunction Scroll(Splide2, Components2, options) {\n var _EventInterface8 = EventInterface(Splide2),\n on = _EventInterface8.on,\n emit = _EventInterface8.emit;\n\n var set = Splide2.state.set;\n var Move = Components2.Move;\n var getPosition = Move.getPosition,\n getLimit = Move.getLimit,\n exceededLimit = Move.exceededLimit,\n translate = Move.translate;\n var isSlide = Splide2.is(SLIDE);\n var interval;\n var callback;\n var friction = 1;\n\n function mount() {\n on(EVENT_MOVE, clear);\n on([EVENT_UPDATED, EVENT_REFRESH], cancel);\n }\n\n function scroll(destination, duration, snap, onScrolled, noConstrain) {\n var from = getPosition();\n clear();\n\n if (snap && (!isSlide || !exceededLimit())) {\n var size = Components2.Layout.sliderSize();\n var offset = sign(destination) * size * floor(abs(destination) / size) || 0;\n destination = Move.toPosition(Components2.Controller.toDest(destination % size)) + offset;\n }\n\n var noDistance = approximatelyEqual(from, destination, 1);\n friction = 1;\n duration = noDistance ? 0 : duration || max(abs(destination - from) / BASE_VELOCITY, MIN_DURATION);\n callback = onScrolled;\n interval = RequestInterval(duration, onEnd, apply(update, from, destination, noConstrain), 1);\n set(SCROLLING);\n emit(EVENT_SCROLL);\n interval.start();\n }\n\n function onEnd() {\n set(IDLE);\n callback && callback();\n emit(EVENT_SCROLLED);\n }\n\n function update(from, to, noConstrain, rate) {\n var position = getPosition();\n var target = from + (to - from) * easing(rate);\n var diff = (target - position) * friction;\n translate(position + diff);\n\n if (isSlide && !noConstrain && exceededLimit()) {\n friction *= FRICTION_FACTOR;\n\n if (abs(diff) < BOUNCE_DIFF_THRESHOLD) {\n scroll(getLimit(exceededLimit(true)), BOUNCE_DURATION, false, callback, true);\n }\n }\n }\n\n function clear() {\n if (interval) {\n interval.cancel();\n }\n }\n\n function cancel() {\n if (interval && !interval.isPaused()) {\n clear();\n onEnd();\n }\n }\n\n function easing(t) {\n var easingFunc = options.easingFunc;\n return easingFunc ? easingFunc(t) : 1 - Math.pow(1 - t, 4);\n }\n\n return {\n mount: mount,\n destroy: clear,\n scroll: scroll,\n cancel: cancel\n };\n}\n\nvar SCROLL_LISTENER_OPTIONS = {\n passive: false,\n capture: true\n};\n\nfunction Drag(Splide2, Components2, options) {\n var _EventInterface9 = EventInterface(Splide2),\n on = _EventInterface9.on,\n emit = _EventInterface9.emit,\n bind = _EventInterface9.bind,\n unbind = _EventInterface9.unbind;\n\n var state = Splide2.state;\n var Move = Components2.Move,\n Scroll = Components2.Scroll,\n Controller = Components2.Controller,\n track = Components2.Elements.track,\n reduce = Components2.Media.reduce;\n var _Components2$Directio2 = Components2.Direction,\n resolve = _Components2$Directio2.resolve,\n orient = _Components2$Directio2.orient;\n var getPosition = Move.getPosition,\n exceededLimit = Move.exceededLimit;\n var basePosition;\n var baseEvent;\n var prevBaseEvent;\n var isFree;\n var dragging;\n var exceeded = false;\n var clickPrevented;\n var disabled;\n var target;\n\n function mount() {\n bind(track, POINTER_MOVE_EVENTS, noop, SCROLL_LISTENER_OPTIONS);\n bind(track, POINTER_UP_EVENTS, noop, SCROLL_LISTENER_OPTIONS);\n bind(track, POINTER_DOWN_EVENTS, onPointerDown, SCROLL_LISTENER_OPTIONS);\n bind(track, \"click\", onClick, {\n capture: true\n });\n bind(track, \"dragstart\", prevent);\n on([EVENT_MOUNTED, EVENT_UPDATED], init);\n }\n\n function init() {\n var drag = options.drag;\n disable(!drag);\n isFree = drag === \"free\";\n }\n\n function onPointerDown(e) {\n clickPrevented = false;\n\n if (!disabled) {\n var isTouch = isTouchEvent(e);\n\n if (isDraggable(e.target) && (isTouch || !e.button)) {\n if (!Controller.isBusy()) {\n target = isTouch ? track : window;\n dragging = state.is([MOVING, SCROLLING]);\n prevBaseEvent = null;\n bind(target, POINTER_MOVE_EVENTS, onPointerMove, SCROLL_LISTENER_OPTIONS);\n bind(target, POINTER_UP_EVENTS, onPointerUp, SCROLL_LISTENER_OPTIONS);\n Move.cancel();\n Scroll.cancel();\n save(e);\n } else {\n prevent(e, true);\n }\n }\n }\n }\n\n function onPointerMove(e) {\n if (!state.is(DRAGGING)) {\n state.set(DRAGGING);\n emit(EVENT_DRAG);\n }\n\n if (e.cancelable) {\n if (dragging) {\n Move.translate(basePosition + constrain(diffCoord(e)));\n var expired = diffTime(e) > LOG_INTERVAL;\n var hasExceeded = exceeded !== (exceeded = exceededLimit());\n\n if (expired || hasExceeded) {\n save(e);\n }\n\n clickPrevented = true;\n emit(EVENT_DRAGGING);\n prevent(e);\n } else if (isSliderDirection(e)) {\n dragging = shouldStart(e);\n prevent(e);\n }\n }\n }\n\n function onPointerUp(e) {\n if (state.is(DRAGGING)) {\n state.set(IDLE);\n emit(EVENT_DRAGGED);\n }\n\n if (dragging) {\n move(e);\n prevent(e);\n }\n\n unbind(target, POINTER_MOVE_EVENTS, onPointerMove);\n unbind(target, POINTER_UP_EVENTS, onPointerUp);\n dragging = false;\n }\n\n function onClick(e) {\n if (!disabled && clickPrevented) {\n prevent(e, true);\n }\n }\n\n function save(e) {\n prevBaseEvent = baseEvent;\n baseEvent = e;\n basePosition = getPosition();\n }\n\n function move(e) {\n var velocity = computeVelocity(e);\n var destination = computeDestination(velocity);\n var rewind = options.rewind && options.rewindByDrag;\n reduce(false);\n\n if (isFree) {\n Controller.scroll(destination, 0, options.snap);\n } else if (Splide2.is(FADE)) {\n Controller.go(orient(sign(velocity)) < 0 ? rewind ? \"<\" : \"-\" : rewind ? \">\" : \"+\");\n } else if (Splide2.is(SLIDE) && exceeded && rewind) {\n Controller.go(exceededLimit(true) ? \">\" : \"<\");\n } else {\n Controller.go(Controller.toDest(destination), true);\n }\n\n reduce(true);\n }\n\n function shouldStart(e) {\n var thresholds = options.dragMinThreshold;\n var isObj = isObject(thresholds);\n var mouse = isObj && thresholds.mouse || 0;\n var touch = (isObj ? thresholds.touch : +thresholds) || 10;\n return abs(diffCoord(e)) > (isTouchEvent(e) ? touch : mouse);\n }\n\n function isSliderDirection(e) {\n return abs(diffCoord(e)) > abs(diffCoord(e, true));\n }\n\n function computeVelocity(e) {\n if (Splide2.is(LOOP) || !exceeded) {\n var time = diffTime(e);\n\n if (time && time < LOG_INTERVAL) {\n return diffCoord(e) / time;\n }\n }\n\n return 0;\n }\n\n function computeDestination(velocity) {\n return getPosition() + sign(velocity) * min(abs(velocity) * (options.flickPower || 600), isFree ? Infinity : Components2.Layout.listSize() * (options.flickMaxPages || 1));\n }\n\n function diffCoord(e, orthogonal) {\n return coordOf(e, orthogonal) - coordOf(getBaseEvent(e), orthogonal);\n }\n\n function diffTime(e) {\n return timeOf(e) - timeOf(getBaseEvent(e));\n }\n\n function getBaseEvent(e) {\n return baseEvent === e && prevBaseEvent || baseEvent;\n }\n\n function coordOf(e, orthogonal) {\n return (isTouchEvent(e) ? e.changedTouches[0] : e)[\"page\" + resolve(orthogonal ? \"Y\" : \"X\")];\n }\n\n function constrain(diff) {\n return diff / (exceeded && Splide2.is(SLIDE) ? FRICTION : 1);\n }\n\n function isDraggable(target2) {\n var noDrag = options.noDrag;\n return !matches(target2, \".\" + CLASS_PAGINATION_PAGE + \", .\" + CLASS_ARROW) && (!noDrag || !matches(target2, noDrag));\n }\n\n function isTouchEvent(e) {\n return typeof TouchEvent !== \"undefined\" && e instanceof TouchEvent;\n }\n\n function isDragging() {\n return dragging;\n }\n\n function disable(value) {\n disabled = value;\n }\n\n return {\n mount: mount,\n disable: disable,\n isDragging: isDragging\n };\n}\n\nvar NORMALIZATION_MAP = {\n Spacebar: \" \",\n Right: ARROW_RIGHT,\n Left: ARROW_LEFT,\n Up: ARROW_UP,\n Down: ARROW_DOWN\n};\n\nfunction normalizeKey(key) {\n key = isString(key) ? key : key.key;\n return NORMALIZATION_MAP[key] || key;\n}\n\nvar KEYBOARD_EVENT = \"keydown\";\n\nfunction Keyboard(Splide2, Components2, options) {\n var _EventInterface10 = EventInterface(Splide2),\n on = _EventInterface10.on,\n bind = _EventInterface10.bind,\n unbind = _EventInterface10.unbind;\n\n var root = Splide2.root;\n var resolve = Components2.Direction.resolve;\n var target;\n var disabled;\n\n function mount() {\n init();\n on(EVENT_UPDATED, destroy);\n on(EVENT_UPDATED, init);\n on(EVENT_MOVE, onMove);\n }\n\n function init() {\n var keyboard = options.keyboard;\n\n if (keyboard) {\n target = keyboard === \"global\" ? window : root;\n bind(target, KEYBOARD_EVENT, onKeydown);\n }\n }\n\n function destroy() {\n unbind(target, KEYBOARD_EVENT);\n }\n\n function disable(value) {\n disabled = value;\n }\n\n function onMove() {\n var _disabled = disabled;\n disabled = true;\n nextTick(function () {\n disabled = _disabled;\n });\n }\n\n function onKeydown(e) {\n if (!disabled) {\n var key = normalizeKey(e);\n\n if (key === resolve(ARROW_LEFT)) {\n Splide2.go(\"<\");\n } else if (key === resolve(ARROW_RIGHT)) {\n Splide2.go(\">\");\n }\n }\n }\n\n return {\n mount: mount,\n destroy: destroy,\n disable: disable\n };\n}\n\nvar SRC_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-lazy\";\nvar SRCSET_DATA_ATTRIBUTE = SRC_DATA_ATTRIBUTE + \"-srcset\";\nvar IMAGE_SELECTOR = \"[\" + SRC_DATA_ATTRIBUTE + \"], [\" + SRCSET_DATA_ATTRIBUTE + \"]\";\n\nfunction LazyLoad(Splide2, Components2, options) {\n var _EventInterface11 = EventInterface(Splide2),\n on = _EventInterface11.on,\n off = _EventInterface11.off,\n bind = _EventInterface11.bind,\n emit = _EventInterface11.emit;\n\n var isSequential = options.lazyLoad === \"sequential\";\n var events = [EVENT_MOVED, EVENT_SCROLLED];\n var entries = [];\n\n function mount() {\n if (options.lazyLoad) {\n init();\n on(EVENT_REFRESH, init);\n }\n }\n\n function init() {\n empty(entries);\n register();\n\n if (isSequential) {\n loadNext();\n } else {\n off(events);\n on(events, check);\n check();\n }\n }\n\n function register() {\n Components2.Slides.forEach(function (Slide) {\n queryAll(Slide.slide, IMAGE_SELECTOR).forEach(function (img) {\n var src = getAttribute(img, SRC_DATA_ATTRIBUTE);\n var srcset = getAttribute(img, SRCSET_DATA_ATTRIBUTE);\n\n if (src !== img.src || srcset !== img.srcset) {\n var className = options.classes.spinner;\n var parent = img.parentElement;\n var spinner = child(parent, \".\" + className) || create(\"span\", className, parent);\n entries.push([img, Slide, spinner]);\n img.src || display(img, \"none\");\n }\n });\n });\n }\n\n function check() {\n entries = entries.filter(function (data) {\n var distance = options.perPage * ((options.preloadPages || 1) + 1) - 1;\n return data[1].isWithin(Splide2.index, distance) ? load(data) : true;\n });\n entries.length || off(events);\n }\n\n function load(data) {\n var img = data[0];\n addClass(data[1].slide, CLASS_LOADING);\n bind(img, \"load error\", apply(onLoad, data));\n setAttribute(img, \"src\", getAttribute(img, SRC_DATA_ATTRIBUTE));\n setAttribute(img, \"srcset\", getAttribute(img, SRCSET_DATA_ATTRIBUTE));\n removeAttribute(img, SRC_DATA_ATTRIBUTE);\n removeAttribute(img, SRCSET_DATA_ATTRIBUTE);\n }\n\n function onLoad(data, e) {\n var img = data[0],\n Slide = data[1];\n removeClass(Slide.slide, CLASS_LOADING);\n\n if (e.type !== \"error\") {\n remove(data[2]);\n display(img, \"\");\n emit(EVENT_LAZYLOAD_LOADED, img, Slide);\n emit(EVENT_RESIZE);\n }\n\n isSequential && loadNext();\n }\n\n function loadNext() {\n entries.length && load(entries.shift());\n }\n\n return {\n mount: mount,\n destroy: apply(empty, entries),\n check: check\n };\n}\n\nfunction Pagination(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on,\n emit = event.emit,\n bind = event.bind;\n var Slides = Components2.Slides,\n Elements = Components2.Elements,\n Controller = Components2.Controller;\n var hasFocus = Controller.hasFocus,\n getIndex = Controller.getIndex,\n go = Controller.go;\n var resolve = Components2.Direction.resolve;\n var placeholder = Elements.pagination;\n var items = [];\n var list;\n var paginationClasses;\n\n function mount() {\n destroy();\n on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], mount);\n var enabled = options.pagination;\n placeholder && display(placeholder, enabled ? \"\" : \"none\");\n\n if (enabled) {\n on([EVENT_MOVE, EVENT_SCROLL, EVENT_SCROLLED], update);\n createPagination();\n update();\n emit(EVENT_PAGINATION_MOUNTED, {\n list: list,\n items: items\n }, getAt(Splide2.index));\n }\n }\n\n function destroy() {\n if (list) {\n remove(placeholder ? slice(list.children) : list);\n removeClass(list, paginationClasses);\n empty(items);\n list = null;\n }\n\n event.destroy();\n }\n\n function createPagination() {\n var length = Splide2.length;\n var classes = options.classes,\n i18n = options.i18n,\n perPage = options.perPage;\n var max = hasFocus() ? Controller.getEnd() + 1 : ceil(length / perPage);\n list = placeholder || create(\"ul\", classes.pagination, Elements.track.parentElement);\n addClass(list, paginationClasses = CLASS_PAGINATION + \"--\" + getDirection());\n setAttribute(list, ROLE, \"tablist\");\n setAttribute(list, ARIA_LABEL, i18n.select);\n setAttribute(list, ARIA_ORIENTATION, getDirection() === TTB ? \"vertical\" : \"\");\n\n for (var i = 0; i < max; i++) {\n var li = create(\"li\", null, list);\n var button = create(\"button\", {\n class: classes.page,\n type: \"button\"\n }, li);\n var controls = Slides.getIn(i).map(function (Slide) {\n return Slide.slide.id;\n });\n var text = !hasFocus() && perPage > 1 ? i18n.pageX : i18n.slideX;\n bind(button, \"click\", apply(onClick, i));\n\n if (options.paginationKeyboard) {\n bind(button, \"keydown\", apply(onKeydown, i));\n }\n\n setAttribute(li, ROLE, \"presentation\");\n setAttribute(button, ROLE, \"tab\");\n setAttribute(button, ARIA_CONTROLS, controls.join(\" \"));\n setAttribute(button, ARIA_LABEL, format(text, i + 1));\n setAttribute(button, TAB_INDEX, -1);\n items.push({\n li: li,\n button: button,\n page: i\n });\n }\n }\n\n function onClick(page) {\n go(\">\" + page, true);\n }\n\n function onKeydown(page, e) {\n var length = items.length;\n var key = normalizeKey(e);\n var dir = getDirection();\n var nextPage = -1;\n\n if (key === resolve(ARROW_RIGHT, false, dir)) {\n nextPage = ++page % length;\n } else if (key === resolve(ARROW_LEFT, false, dir)) {\n nextPage = (--page + length) % length;\n } else if (key === \"Home\") {\n nextPage = 0;\n } else if (key === \"End\") {\n nextPage = length - 1;\n }\n\n var item = items[nextPage];\n\n if (item) {\n focus(item.button);\n go(\">\" + nextPage);\n prevent(e, true);\n }\n }\n\n function getDirection() {\n return options.paginationDirection || options.direction;\n }\n\n function getAt(index) {\n return items[Controller.toPage(index)];\n }\n\n function update() {\n var prev = getAt(getIndex(true));\n var curr = getAt(getIndex());\n\n if (prev) {\n var button = prev.button;\n removeClass(button, CLASS_ACTIVE);\n removeAttribute(button, ARIA_SELECTED);\n setAttribute(button, TAB_INDEX, -1);\n }\n\n if (curr) {\n var _button = curr.button;\n addClass(_button, CLASS_ACTIVE);\n setAttribute(_button, ARIA_SELECTED, true);\n setAttribute(_button, TAB_INDEX, \"\");\n }\n\n emit(EVENT_PAGINATION_UPDATED, {\n list: list,\n items: items\n }, prev, curr);\n }\n\n return {\n items: items,\n mount: mount,\n destroy: destroy,\n getAt: getAt,\n update: update\n };\n}\n\nvar TRIGGER_KEYS = [\" \", \"Enter\"];\n\nfunction Sync(Splide2, Components2, options) {\n var isNavigation = options.isNavigation,\n slideFocus = options.slideFocus;\n var events = [];\n\n function mount() {\n Splide2.splides.forEach(function (target) {\n if (!target.isParent) {\n sync(Splide2, target.splide);\n sync(target.splide, Splide2);\n }\n });\n\n if (isNavigation) {\n navigate();\n }\n }\n\n function destroy() {\n events.forEach(function (event) {\n event.destroy();\n });\n empty(events);\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function sync(splide, target) {\n var event = EventInterface(splide);\n event.on(EVENT_MOVE, function (index, prev, dest) {\n target.go(target.is(LOOP) ? dest : index);\n });\n events.push(event);\n }\n\n function navigate() {\n var event = EventInterface(Splide2);\n var on = event.on;\n on(EVENT_CLICK, onClick);\n on(EVENT_SLIDE_KEYDOWN, onKeydown);\n on([EVENT_MOUNTED, EVENT_UPDATED], update);\n events.push(event);\n event.emit(EVENT_NAVIGATION_MOUNTED, Splide2.splides);\n }\n\n function update() {\n setAttribute(Components2.Elements.list, ARIA_ORIENTATION, options.direction === TTB ? \"vertical\" : \"\");\n }\n\n function onClick(Slide) {\n Splide2.go(Slide.index);\n }\n\n function onKeydown(Slide, e) {\n if (includes(TRIGGER_KEYS, normalizeKey(e))) {\n onClick(Slide);\n prevent(e);\n }\n }\n\n return {\n setup: apply(Components2.Media.set, {\n slideFocus: isUndefined(slideFocus) ? isNavigation : slideFocus\n }, true),\n mount: mount,\n destroy: destroy,\n remount: remount\n };\n}\n\nfunction Wheel(Splide2, Components2, options) {\n var _EventInterface12 = EventInterface(Splide2),\n bind = _EventInterface12.bind;\n\n var lastTime = 0;\n\n function mount() {\n if (options.wheel) {\n bind(Components2.Elements.track, \"wheel\", onWheel, SCROLL_LISTENER_OPTIONS);\n }\n }\n\n function onWheel(e) {\n if (e.cancelable) {\n var deltaY = e.deltaY;\n var backwards = deltaY < 0;\n var timeStamp = timeOf(e);\n\n var _min = options.wheelMinThreshold || 0;\n\n var sleep = options.wheelSleep || 0;\n\n if (abs(deltaY) > _min && timeStamp - lastTime > sleep) {\n Splide2.go(backwards ? \"<\" : \">\");\n lastTime = timeStamp;\n }\n\n shouldPrevent(backwards) && prevent(e);\n }\n }\n\n function shouldPrevent(backwards) {\n return !options.releaseWheel || Splide2.state.is(MOVING) || Components2.Controller.getAdjacent(backwards) !== -1;\n }\n\n return {\n mount: mount\n };\n}\n\nvar SR_REMOVAL_DELAY = 90;\n\nfunction Live(Splide2, Components2, options) {\n var _EventInterface13 = EventInterface(Splide2),\n on = _EventInterface13.on;\n\n var track = Components2.Elements.track;\n var enabled = options.live && !options.isNavigation;\n var sr = create(\"span\", CLASS_SR);\n var interval = RequestInterval(SR_REMOVAL_DELAY, apply(toggle, false));\n\n function mount() {\n if (enabled) {\n disable(!Components2.Autoplay.isPaused());\n setAttribute(track, ARIA_ATOMIC, true);\n sr.textContent = \"\\u2026\";\n on(EVENT_AUTOPLAY_PLAY, apply(disable, true));\n on(EVENT_AUTOPLAY_PAUSE, apply(disable, false));\n on([EVENT_MOVED, EVENT_SCROLLED], apply(toggle, true));\n }\n }\n\n function toggle(active) {\n setAttribute(track, ARIA_BUSY, active);\n\n if (active) {\n append(track, sr);\n interval.start();\n } else {\n remove(sr);\n interval.cancel();\n }\n }\n\n function destroy() {\n removeAttribute(track, [ARIA_LIVE, ARIA_ATOMIC, ARIA_BUSY]);\n remove(sr);\n }\n\n function disable(disabled) {\n if (enabled) {\n setAttribute(track, ARIA_LIVE, disabled ? \"off\" : \"polite\");\n }\n }\n\n return {\n mount: mount,\n disable: disable,\n destroy: destroy\n };\n}\n\nvar ComponentConstructors = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Media: Media,\n Direction: Direction,\n Elements: Elements,\n Slides: Slides,\n Layout: Layout,\n Clones: Clones,\n Move: Move,\n Controller: Controller,\n Arrows: Arrows,\n Autoplay: Autoplay,\n Cover: Cover,\n Scroll: Scroll,\n Drag: Drag,\n Keyboard: Keyboard,\n LazyLoad: LazyLoad,\n Pagination: Pagination,\n Sync: Sync,\n Wheel: Wheel,\n Live: Live\n});\nvar I18N = {\n prev: \"Previous slide\",\n next: \"Next slide\",\n first: \"Go to first slide\",\n last: \"Go to last slide\",\n slideX: \"Go to slide %s\",\n pageX: \"Go to page %s\",\n play: \"Start autoplay\",\n pause: \"Pause autoplay\",\n carousel: \"carousel\",\n slide: \"slide\",\n select: \"Select a slide to show\",\n slideLabel: \"%s of %s\"\n};\nvar DEFAULTS = {\n type: \"slide\",\n role: \"region\",\n speed: 400,\n perPage: 1,\n cloneStatus: true,\n arrows: true,\n pagination: true,\n paginationKeyboard: true,\n interval: 5e3,\n pauseOnHover: true,\n pauseOnFocus: true,\n resetProgress: true,\n easing: \"cubic-bezier(0.25, 1, 0.5, 1)\",\n drag: true,\n direction: \"ltr\",\n trimSpace: true,\n focusableNodes: \"a, button, textarea, input, select, iframe\",\n live: true,\n classes: CLASSES,\n i18n: I18N,\n reducedMotion: {\n speed: 0,\n rewindSpeed: 0,\n autoplay: \"pause\"\n }\n};\n\nfunction Fade(Splide2, Components2, options) {\n var Slides = Components2.Slides;\n\n function mount() {\n EventInterface(Splide2).on([EVENT_MOUNTED, EVENT_REFRESH], init);\n }\n\n function init() {\n Slides.forEach(function (Slide) {\n Slide.style(\"transform\", \"translateX(-\" + 100 * Slide.index + \"%)\");\n });\n }\n\n function start(index, done) {\n Slides.style(\"transition\", \"opacity \" + options.speed + \"ms \" + options.easing);\n nextTick(done);\n }\n\n return {\n mount: mount,\n start: start,\n cancel: noop\n };\n}\n\nfunction Slide(Splide2, Components2, options) {\n var Move = Components2.Move,\n Controller = Components2.Controller,\n Scroll = Components2.Scroll;\n var list = Components2.Elements.list;\n var transition = apply(style, list, \"transition\");\n var endCallback;\n\n function mount() {\n EventInterface(Splide2).bind(list, \"transitionend\", function (e) {\n if (e.target === list && endCallback) {\n cancel();\n endCallback();\n }\n });\n }\n\n function start(index, done) {\n var destination = Move.toPosition(index, true);\n var position = Move.getPosition();\n var speed = getSpeed(index);\n\n if (abs(destination - position) >= 1 && speed >= 1) {\n if (options.useScroll) {\n Scroll.scroll(destination, speed, false, done);\n } else {\n transition(\"transform \" + speed + \"ms \" + options.easing);\n Move.translate(destination, true);\n endCallback = done;\n }\n } else {\n Move.jump(index);\n done();\n }\n }\n\n function cancel() {\n transition(\"\");\n Scroll.cancel();\n }\n\n function getSpeed(index) {\n var rewindSpeed = options.rewindSpeed;\n\n if (Splide2.is(SLIDE) && rewindSpeed) {\n var prev = Controller.getIndex(true);\n var end = Controller.getEnd();\n\n if (prev === 0 && index >= end || prev >= end && index === 0) {\n return rewindSpeed;\n }\n }\n\n return options.speed;\n }\n\n return {\n mount: mount,\n start: start,\n cancel: cancel\n };\n}\n\nvar _Splide = /*#__PURE__*/function () {\n function _Splide(target, options) {\n this.event = EventInterface();\n this.Components = {};\n this.state = State(CREATED);\n this.splides = [];\n this._o = {};\n this._E = {};\n var root = isString(target) ? query(document, target) : target;\n assert(root, root + \" is invalid.\");\n this.root = root;\n options = merge({\n label: getAttribute(root, ARIA_LABEL) || \"\",\n labelledby: getAttribute(root, ARIA_LABELLEDBY) || \"\"\n }, DEFAULTS, _Splide.defaults, options || {});\n\n try {\n merge(options, JSON.parse(getAttribute(root, DATA_ATTRIBUTE)));\n } catch (e) {\n assert(false, \"Invalid JSON\");\n }\n\n this._o = Object.create(merge({}, options));\n }\n\n var _proto = _Splide.prototype;\n\n _proto.mount = function mount(Extensions, Transition) {\n var _this = this;\n\n var state = this.state,\n Components2 = this.Components;\n assert(state.is([CREATED, DESTROYED]), \"Already mounted!\");\n state.set(CREATED);\n this._C = Components2;\n this._T = Transition || this._T || (this.is(FADE) ? Fade : Slide);\n this._E = Extensions || this._E;\n var Constructors = assign({}, ComponentConstructors, this._E, {\n Transition: this._T\n });\n forOwn(Constructors, function (Component, key) {\n var component = Component(_this, Components2, _this._o);\n Components2[key] = component;\n component.setup && component.setup();\n });\n forOwn(Components2, function (component) {\n component.mount && component.mount();\n });\n this.emit(EVENT_MOUNTED);\n addClass(this.root, CLASS_INITIALIZED);\n state.set(IDLE);\n this.emit(EVENT_READY);\n return this;\n };\n\n _proto.sync = function sync(splide) {\n this.splides.push({\n splide: splide\n });\n splide.splides.push({\n splide: this,\n isParent: true\n });\n\n if (this.state.is(IDLE)) {\n this._C.Sync.remount();\n\n splide.Components.Sync.remount();\n }\n\n return this;\n };\n\n _proto.go = function go(control) {\n this._C.Controller.go(control);\n\n return this;\n };\n\n _proto.on = function on(events, callback) {\n this.event.on(events, callback);\n return this;\n };\n\n _proto.off = function off(events) {\n this.event.off(events);\n return this;\n };\n\n _proto.emit = function emit(event) {\n var _this$event;\n\n (_this$event = this.event).emit.apply(_this$event, [event].concat(slice(arguments, 1)));\n\n return this;\n };\n\n _proto.add = function add(slides, index) {\n this._C.Slides.add(slides, index);\n\n return this;\n };\n\n _proto.remove = function remove(matcher) {\n this._C.Slides.remove(matcher);\n\n return this;\n };\n\n _proto.is = function is(type) {\n return this._o.type === type;\n };\n\n _proto.refresh = function refresh() {\n this.emit(EVENT_REFRESH);\n return this;\n };\n\n _proto.destroy = function destroy(completely) {\n if (completely === void 0) {\n completely = true;\n }\n\n var event = this.event,\n state = this.state;\n\n if (state.is(CREATED)) {\n EventInterface(this).on(EVENT_READY, this.destroy.bind(this, completely));\n } else {\n forOwn(this._C, function (component) {\n component.destroy && component.destroy(completely);\n }, true);\n event.emit(EVENT_DESTROY);\n event.destroy();\n completely && empty(this.splides);\n state.set(DESTROYED);\n }\n\n return this;\n };\n\n _createClass(_Splide, [{\n key: \"options\",\n get: function get() {\n return this._o;\n },\n set: function set(options) {\n this._C.Media.set(options, true, true);\n }\n }, {\n key: \"length\",\n get: function get() {\n return this._C.Slides.getLength(true);\n }\n }, {\n key: \"index\",\n get: function get() {\n return this._C.Controller.getIndex();\n }\n }]);\n\n return _Splide;\n}();\n\nvar Splide = _Splide;\nSplide.defaults = {};\nSplide.STATES = STATES;\nvar CLASS_RENDERED = \"is-rendered\";\nvar RENDERER_DEFAULT_CONFIG = {\n listTag: \"ul\",\n slideTag: \"li\"\n};\n\nvar Style = /*#__PURE__*/function () {\n function Style(id, options) {\n this.styles = {};\n this.id = id;\n this.options = options;\n }\n\n var _proto2 = Style.prototype;\n\n _proto2.rule = function rule(selector, prop, value, breakpoint) {\n breakpoint = breakpoint || \"default\";\n var selectors = this.styles[breakpoint] = this.styles[breakpoint] || {};\n var styles = selectors[selector] = selectors[selector] || {};\n styles[prop] = value;\n };\n\n _proto2.build = function build() {\n var _this2 = this;\n\n var css = \"\";\n\n if (this.styles.default) {\n css += this.buildSelectors(this.styles.default);\n }\n\n Object.keys(this.styles).sort(function (n, m) {\n return _this2.options.mediaQuery === \"min\" ? +n - +m : +m - +n;\n }).forEach(function (breakpoint) {\n if (breakpoint !== \"default\") {\n css += \"@media screen and (max-width: \" + breakpoint + \"px) {\";\n css += _this2.buildSelectors(_this2.styles[breakpoint]);\n css += \"}\";\n }\n });\n return css;\n };\n\n _proto2.buildSelectors = function buildSelectors(selectors) {\n var _this3 = this;\n\n var css = \"\";\n forOwn(selectors, function (styles, selector) {\n selector = (\"#\" + _this3.id + \" \" + selector).trim();\n css += selector + \" {\";\n forOwn(styles, function (value, prop) {\n if (value || value === 0) {\n css += prop + \": \" + value + \";\";\n }\n });\n css += \"}\";\n });\n return css;\n };\n\n return Style;\n}();\n\nvar SplideRenderer = /*#__PURE__*/function () {\n function SplideRenderer(contents, options, config, defaults) {\n this.slides = [];\n this.options = {};\n this.breakpoints = [];\n merge(DEFAULTS, defaults || {});\n merge(merge(this.options, DEFAULTS), options || {});\n this.contents = contents;\n this.config = assign({}, RENDERER_DEFAULT_CONFIG, config || {});\n this.id = this.config.id || uniqueId(\"splide\");\n this.Style = new Style(this.id, this.options);\n this.Direction = Direction(null, null, this.options);\n assert(this.contents.length, \"Provide at least 1 content.\");\n this.init();\n }\n\n SplideRenderer.clean = function clean(splide) {\n var _EventInterface14 = EventInterface(splide),\n on = _EventInterface14.on;\n\n var root = splide.root;\n var clones = queryAll(root, \".\" + CLASS_CLONE);\n on(EVENT_MOUNTED, function () {\n remove(child(root, \"style\"));\n });\n remove(clones);\n };\n\n var _proto3 = SplideRenderer.prototype;\n\n _proto3.init = function init() {\n this.parseBreakpoints();\n this.initSlides();\n this.registerRootStyles();\n this.registerTrackStyles();\n this.registerSlideStyles();\n this.registerListStyles();\n };\n\n _proto3.initSlides = function initSlides() {\n var _this4 = this;\n\n push(this.slides, this.contents.map(function (content, index) {\n content = isString(content) ? {\n html: content\n } : content;\n content.styles = content.styles || {};\n content.attrs = content.attrs || {};\n\n _this4.cover(content);\n\n var classes = _this4.options.classes.slide + \" \" + (index === 0 ? CLASS_ACTIVE : \"\");\n assign(content.attrs, {\n class: (classes + \" \" + (content.attrs.class || \"\")).trim(),\n style: _this4.buildStyles(content.styles)\n });\n return content;\n }));\n\n if (this.isLoop()) {\n this.generateClones(this.slides);\n }\n };\n\n _proto3.registerRootStyles = function registerRootStyles() {\n var _this5 = this;\n\n this.breakpoints.forEach(function (_ref2) {\n var width = _ref2[0],\n options = _ref2[1];\n\n _this5.Style.rule(\" \", \"max-width\", unit(options.width), width);\n });\n };\n\n _proto3.registerTrackStyles = function registerTrackStyles() {\n var _this6 = this;\n\n var Style2 = this.Style;\n var selector = \".\" + CLASS_TRACK;\n this.breakpoints.forEach(function (_ref3) {\n var width = _ref3[0],\n options = _ref3[1];\n Style2.rule(selector, _this6.resolve(\"paddingLeft\"), _this6.cssPadding(options, false), width);\n Style2.rule(selector, _this6.resolve(\"paddingRight\"), _this6.cssPadding(options, true), width);\n Style2.rule(selector, \"height\", _this6.cssTrackHeight(options), width);\n });\n };\n\n _proto3.registerListStyles = function registerListStyles() {\n var _this7 = this;\n\n var Style2 = this.Style;\n var selector = \".\" + CLASS_LIST;\n this.breakpoints.forEach(function (_ref4) {\n var width = _ref4[0],\n options = _ref4[1];\n Style2.rule(selector, \"transform\", _this7.buildTranslate(options), width);\n\n if (!_this7.cssSlideHeight(options)) {\n Style2.rule(selector, \"aspect-ratio\", _this7.cssAspectRatio(options), width);\n }\n });\n };\n\n _proto3.registerSlideStyles = function registerSlideStyles() {\n var _this8 = this;\n\n var Style2 = this.Style;\n var selector = \".\" + CLASS_SLIDE;\n this.breakpoints.forEach(function (_ref5) {\n var width = _ref5[0],\n options = _ref5[1];\n Style2.rule(selector, \"width\", _this8.cssSlideWidth(options), width);\n Style2.rule(selector, \"height\", _this8.cssSlideHeight(options) || \"100%\", width);\n Style2.rule(selector, _this8.resolve(\"marginRight\"), unit(options.gap) || \"0px\", width);\n Style2.rule(selector + \" > img\", \"display\", options.cover ? \"none\" : \"inline\", width);\n });\n };\n\n _proto3.buildTranslate = function buildTranslate(options) {\n var _this$Direction = this.Direction,\n resolve = _this$Direction.resolve,\n orient = _this$Direction.orient;\n var values = [];\n values.push(this.cssOffsetClones(options));\n values.push(this.cssOffsetGaps(options));\n\n if (this.isCenter(options)) {\n values.push(this.buildCssValue(orient(-50), \"%\"));\n values.push.apply(values, this.cssOffsetCenter(options));\n }\n\n return values.filter(Boolean).map(function (value) {\n return \"translate\" + resolve(\"X\") + \"(\" + value + \")\";\n }).join(\" \");\n };\n\n _proto3.cssOffsetClones = function cssOffsetClones(options) {\n var _this$Direction2 = this.Direction,\n resolve = _this$Direction2.resolve,\n orient = _this$Direction2.orient;\n var cloneCount = this.getCloneCount();\n\n if (this.isFixedWidth(options)) {\n var _this$parseCssValue = this.parseCssValue(options[resolve(\"fixedWidth\")]),\n value = _this$parseCssValue.value,\n unit2 = _this$parseCssValue.unit;\n\n return this.buildCssValue(orient(value) * cloneCount, unit2);\n }\n\n var percent = 100 * cloneCount / options.perPage;\n return orient(percent) + \"%\";\n };\n\n _proto3.cssOffsetCenter = function cssOffsetCenter(options) {\n var _this$Direction3 = this.Direction,\n resolve = _this$Direction3.resolve,\n orient = _this$Direction3.orient;\n\n if (this.isFixedWidth(options)) {\n var _this$parseCssValue2 = this.parseCssValue(options[resolve(\"fixedWidth\")]),\n value = _this$parseCssValue2.value,\n unit2 = _this$parseCssValue2.unit;\n\n return [this.buildCssValue(orient(value / 2), unit2)];\n }\n\n var values = [];\n var perPage = options.perPage,\n gap = options.gap;\n values.push(orient(50 / perPage) + \"%\");\n\n if (gap) {\n var _this$parseCssValue3 = this.parseCssValue(gap),\n _value = _this$parseCssValue3.value,\n _unit = _this$parseCssValue3.unit;\n\n var gapOffset = (_value / perPage - _value) / 2;\n values.push(this.buildCssValue(orient(gapOffset), _unit));\n }\n\n return values;\n };\n\n _proto3.cssOffsetGaps = function cssOffsetGaps(options) {\n var cloneCount = this.getCloneCount();\n\n if (cloneCount && options.gap) {\n var orient = this.Direction.orient;\n\n var _this$parseCssValue4 = this.parseCssValue(options.gap),\n value = _this$parseCssValue4.value,\n unit2 = _this$parseCssValue4.unit;\n\n if (this.isFixedWidth(options)) {\n return this.buildCssValue(orient(value * cloneCount), unit2);\n }\n\n var perPage = options.perPage;\n var gaps = cloneCount / perPage;\n return this.buildCssValue(orient(gaps * value), unit2);\n }\n\n return \"\";\n };\n\n _proto3.resolve = function resolve(prop) {\n return camelToKebab(this.Direction.resolve(prop));\n };\n\n _proto3.cssPadding = function cssPadding(options, right) {\n var padding = options.padding;\n var prop = this.Direction.resolve(right ? \"right\" : \"left\", true);\n return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n };\n\n _proto3.cssTrackHeight = function cssTrackHeight(options) {\n var height = \"\";\n\n if (this.isVertical()) {\n height = this.cssHeight(options);\n assert(height, '\"height\" is missing.');\n height = \"calc(\" + height + \" - \" + this.cssPadding(options, false) + \" - \" + this.cssPadding(options, true) + \")\";\n }\n\n return height;\n };\n\n _proto3.cssHeight = function cssHeight(options) {\n return unit(options.height);\n };\n\n _proto3.cssSlideWidth = function cssSlideWidth(options) {\n return options.autoWidth ? \"\" : unit(options.fixedWidth) || (this.isVertical() ? \"\" : this.cssSlideSize(options));\n };\n\n _proto3.cssSlideHeight = function cssSlideHeight(options) {\n return unit(options.fixedHeight) || (this.isVertical() ? options.autoHeight ? \"\" : this.cssSlideSize(options) : this.cssHeight(options));\n };\n\n _proto3.cssSlideSize = function cssSlideSize(options) {\n var gap = unit(options.gap);\n return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n };\n\n _proto3.cssAspectRatio = function cssAspectRatio(options) {\n var heightRatio = options.heightRatio;\n return heightRatio ? \"\" + 1 / heightRatio : \"\";\n };\n\n _proto3.buildCssValue = function buildCssValue(value, unit2) {\n return \"\" + value + unit2;\n };\n\n _proto3.parseCssValue = function parseCssValue(value) {\n if (isString(value)) {\n var number = parseFloat(value) || 0;\n var unit2 = value.replace(/\\d*(\\.\\d*)?/, \"\") || \"px\";\n return {\n value: number,\n unit: unit2\n };\n }\n\n return {\n value: value,\n unit: \"px\"\n };\n };\n\n _proto3.parseBreakpoints = function parseBreakpoints() {\n var _this9 = this;\n\n var breakpoints = this.options.breakpoints;\n this.breakpoints.push([\"default\", this.options]);\n\n if (breakpoints) {\n forOwn(breakpoints, function (options, width) {\n _this9.breakpoints.push([width, merge(merge({}, _this9.options), options)]);\n });\n }\n };\n\n _proto3.isFixedWidth = function isFixedWidth(options) {\n return !!options[this.Direction.resolve(\"fixedWidth\")];\n };\n\n _proto3.isLoop = function isLoop() {\n return this.options.type === LOOP;\n };\n\n _proto3.isCenter = function isCenter(options) {\n if (options.focus === \"center\") {\n if (this.isLoop()) {\n return true;\n }\n\n if (this.options.type === SLIDE) {\n return !this.options.trimSpace;\n }\n }\n\n return false;\n };\n\n _proto3.isVertical = function isVertical() {\n return this.options.direction === TTB;\n };\n\n _proto3.buildClasses = function buildClasses() {\n var options = this.options;\n return [CLASS_ROOT, CLASS_ROOT + \"--\" + options.type, CLASS_ROOT + \"--\" + options.direction, options.drag && CLASS_ROOT + \"--draggable\", options.isNavigation && CLASS_ROOT + \"--nav\", CLASS_ACTIVE, !this.config.hidden && CLASS_RENDERED].filter(Boolean).join(\" \");\n };\n\n _proto3.buildAttrs = function buildAttrs(attrs) {\n var attr = \"\";\n forOwn(attrs, function (value, key) {\n attr += value ? \" \" + camelToKebab(key) + \"=\\\"\" + value + \"\\\"\" : \"\";\n });\n return attr.trim();\n };\n\n _proto3.buildStyles = function buildStyles(styles) {\n var style = \"\";\n forOwn(styles, function (value, key) {\n style += \" \" + camelToKebab(key) + \":\" + value + \";\";\n });\n return style.trim();\n };\n\n _proto3.renderSlides = function renderSlides() {\n var _this10 = this;\n\n var tag = this.config.slideTag;\n return this.slides.map(function (content) {\n return \"<\" + tag + \" \" + _this10.buildAttrs(content.attrs) + \">\" + (content.html || \"\") + \"</\" + tag + \">\";\n }).join(\"\");\n };\n\n _proto3.cover = function cover(content) {\n var styles = content.styles,\n _content$html = content.html,\n html = _content$html === void 0 ? \"\" : _content$html;\n\n if (this.options.cover && !this.options.lazyLoad) {\n var src = html.match(/<img.*?src\\s*=\\s*(['\"])(.+?)\\1.*?>/);\n\n if (src && src[2]) {\n styles.background = \"center/cover no-repeat url('\" + src[2] + \"')\";\n }\n }\n };\n\n _proto3.generateClones = function generateClones(contents) {\n var classes = this.options.classes;\n var count = this.getCloneCount();\n var slides = contents.slice();\n\n while (slides.length < count) {\n push(slides, slides);\n }\n\n push(slides.slice(-count).reverse(), slides.slice(0, count)).forEach(function (content, index) {\n var attrs = assign({}, content.attrs, {\n class: content.attrs.class + \" \" + classes.clone\n });\n var clone = assign({}, content, {\n attrs: attrs\n });\n index < count ? contents.unshift(clone) : contents.push(clone);\n });\n };\n\n _proto3.getCloneCount = function getCloneCount() {\n if (this.isLoop()) {\n var options = this.options;\n\n if (options.clones) {\n return options.clones;\n }\n\n var perPage = max.apply(void 0, this.breakpoints.map(function (_ref6) {\n var options2 = _ref6[1];\n return options2.perPage;\n }));\n return perPage * ((options.flickMaxPages || 1) + 1);\n }\n\n return 0;\n };\n\n _proto3.renderArrows = function renderArrows() {\n var html = \"\";\n html += \"<div class=\\\"\" + this.options.classes.arrows + \"\\\">\";\n html += this.renderArrow(true);\n html += this.renderArrow(false);\n html += \"</div>\";\n return html;\n };\n\n _proto3.renderArrow = function renderArrow(prev) {\n var _this$options = this.options,\n classes = _this$options.classes,\n i18n = _this$options.i18n;\n var attrs = {\n class: classes.arrow + \" \" + (prev ? classes.prev : classes.next),\n type: \"button\",\n ariaLabel: prev ? i18n.prev : i18n.next\n };\n return \"<button \" + this.buildAttrs(attrs) + \"><svg xmlns=\\\"\" + XML_NAME_SPACE + \"\\\" viewBox=\\\"0 0 \" + SIZE + \" \" + SIZE + \"\\\" width=\\\"\" + SIZE + \"\\\" height=\\\"\" + SIZE + \"\\\"><path d=\\\"\" + (this.options.arrowPath || PATH) + \"\\\" /></svg></button>\";\n };\n\n _proto3.html = function html() {\n var _this$config = this.config,\n rootClass = _this$config.rootClass,\n listTag = _this$config.listTag,\n arrows = _this$config.arrows,\n beforeTrack = _this$config.beforeTrack,\n afterTrack = _this$config.afterTrack,\n slider = _this$config.slider,\n beforeSlider = _this$config.beforeSlider,\n afterSlider = _this$config.afterSlider;\n var html = \"\";\n html += \"<div id=\\\"\" + this.id + \"\\\" class=\\\"\" + this.buildClasses() + \" \" + (rootClass || \"\") + \"\\\">\";\n html += \"<style>\" + this.Style.build() + \"</style>\";\n\n if (slider) {\n html += beforeSlider || \"\";\n html += \"<div class=\\\"splide__slider\\\">\";\n }\n\n html += beforeTrack || \"\";\n\n if (arrows) {\n html += this.renderArrows();\n }\n\n html += \"<div class=\\\"splide__track\\\">\";\n html += \"<\" + listTag + \" class=\\\"splide__list\\\">\";\n html += this.renderSlides();\n html += \"</\" + listTag + \">\";\n html += \"</div>\";\n html += afterTrack || \"\";\n\n if (slider) {\n html += \"</div>\";\n html += afterSlider || \"\";\n }\n\n html += \"</div>\";\n return html;\n };\n\n return SplideRenderer;\n}();\n\nexport { CLASSES, CLASS_ACTIVE, CLASS_ARROW, CLASS_ARROWS, CLASS_ARROW_NEXT, CLASS_ARROW_PREV, CLASS_CLONE, CLASS_CONTAINER, CLASS_FOCUS_IN, CLASS_INITIALIZED, CLASS_LIST, CLASS_LOADING, CLASS_NEXT, CLASS_OVERFLOW, CLASS_PAGINATION, CLASS_PAGINATION_PAGE, CLASS_PREV, CLASS_PROGRESS, CLASS_PROGRESS_BAR, CLASS_ROOT, CLASS_SLIDE, CLASS_SPINNER, CLASS_SR, CLASS_TOGGLE, CLASS_TOGGLE_PAUSE, CLASS_TOGGLE_PLAY, CLASS_TRACK, CLASS_VISIBLE, DEFAULTS, EVENT_ACTIVE, EVENT_ARROWS_MOUNTED, EVENT_ARROWS_UPDATED, EVENT_AUTOPLAY_PAUSE, EVENT_AUTOPLAY_PLAY, EVENT_AUTOPLAY_PLAYING, EVENT_CLICK, EVENT_DESTROY, EVENT_DRAG, EVENT_DRAGGED, EVENT_DRAGGING, EVENT_END_INDEX_CHANGED, EVENT_HIDDEN, EVENT_INACTIVE, EVENT_LAZYLOAD_LOADED, EVENT_MOUNTED, EVENT_MOVE, EVENT_MOVED, EVENT_NAVIGATION_MOUNTED, EVENT_OVERFLOW, EVENT_PAGINATION_MOUNTED, EVENT_PAGINATION_UPDATED, EVENT_READY, EVENT_REFRESH, EVENT_RESIZE, EVENT_RESIZED, EVENT_SCROLL, EVENT_SCROLLED, EVENT_SHIFTED, EVENT_SLIDE_KEYDOWN, EVENT_UPDATED, EVENT_VISIBLE, EventBinder, EventInterface, FADE, LOOP, LTR, RTL, RequestInterval, SLIDE, STATUS_CLASSES, Splide, SplideRenderer, State, TTB, Throttle, Splide as default };\n",".splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__arrow{-ms-flex-align:center;align-items:center;background:#ccc;border:0;border-radius:50%;cursor:pointer;display:-ms-flexbox;display:flex;height:2em;-ms-flex-pack:center;justify-content:center;opacity:.7;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:2em;z-index:1}.splide__arrow svg{fill:#000;height:1.2em;width:1.2em}.splide__arrow:hover:not(:disabled){opacity:.9}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:3px solid #0bf;outline-offset:3px}.splide__pagination{bottom:.5em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:50%;display:inline-block;height:8px;margin:3px;opacity:.7;padding:0;position:relative;transition:transform .2s linear;width:8px}.splide__pagination__page.is-active{background:#fff;transform:scale(1.4);z-index:1}.splide__pagination__page:hover{cursor:pointer;opacity:.9}.splide__pagination__page:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:3px solid #0bf;outline-offset:3px}.splide__progress__bar{background:#ccc;height:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0)}.splide__slide:focus{outline:0}@supports(outline-offset:-3px){.splide__slide:focus-visible{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide__slide:focus-visible{border:3px solid #0bf}}@supports(outline-offset:-3px){.splide.is-focus-in .splide__slide:focus{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide.is-focus-in .splide__slide:focus{border:3px solid #0bf}.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#0bf}}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:3px solid #0bf;outline-offset:3px}.splide__track--nav>.splide__list>.splide__slide{border:3px solid transparent;cursor:pointer}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #000}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotate(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotate(90deg)}.splide__pagination--ttb{bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;left:auto;padding:1em 0;right:.5em;top:0}","import { JaaqVideoPlayer } from './VideoPlayer';\nimport type { PlayerConfig } from '@ui/shared/types';\n\n/**\n * Internal registry mapping DOM elements to their player instances\n */\nconst playerRegistry = new WeakMap<Element, JaaqVideoPlayer>();\n\n/**\n * Internal list of all initialized players for cleanup operations\n */\nconst playerList: Array<{ element: Element; player: JaaqVideoPlayer }> = [];\n\n/**\n * Parses data attributes from a DOM element to create player configuration\n * @param element - DOM element with data-* attributes\n * @returns Player configuration object or null if required attributes are missing\n */\nfunction parseDataAttributes(element: Element): PlayerConfig | null {\n const apiKey = element.getAttribute('data-api-key');\n const clientId = element.getAttribute('data-client-id');\n const videoId = element.getAttribute('data-video-id');\n\n if (!apiKey || !clientId || !videoId) {\n console.error('JAAQ Player: Missing required attributes (data-api-key, data-client-id, data-video-id)', element);\n return null;\n }\n\n const config: PlayerConfig = {\n apiKey,\n clientId,\n videoId,\n };\n\n const autoplay = element.getAttribute('data-autoplay');\n if (autoplay !== null) {\n config.autoplay = autoplay === 'true';\n }\n\n const width = element.getAttribute('data-width');\n if (width) {\n config.width = width;\n }\n\n const height = element.getAttribute('data-height');\n if (height) {\n config.height = height;\n }\n\n const baseUrl = element.getAttribute('data-base-url');\n if (baseUrl) {\n config.baseUrl = baseUrl;\n }\n\n const apiVersion = element.getAttribute('data-api-version');\n if (apiVersion) {\n config.apiVersion = apiVersion;\n }\n\n const className = element.getAttribute('data-class-name');\n if (className) {\n config.className = className;\n }\n\n return config;\n}\n\n/**\n * Initializes a video player for a given DOM element\n * @param element - DOM element to initialize player for\n * @returns Initialized player instance or null if initialization fails\n */\nfunction initializePlayer(element: Element): JaaqVideoPlayer | null {\n if (playerRegistry.has(element)) {\n return playerRegistry.get(element)!;\n }\n\n const config = parseDataAttributes(element);\n if (!config) {\n return null;\n }\n\n try {\n const player = new JaaqVideoPlayer(element as HTMLElement, config);\n playerRegistry.set(element, player);\n playerList.push({ element, player });\n return player;\n } catch (error) {\n console.error('JAAQ Player: Failed to initialize player', error, element);\n return null;\n }\n}\n\n/**\n * Initializes all video players with data-jaaq-player attribute\n * @param rootElement - Root element to search for players (defaults to document)\n */\nfunction initializePlayers(rootElement: Document | Element = document): void {\n const elements = rootElement.querySelectorAll('[data-jaaq-player]');\n elements.forEach((element) => {\n initializePlayer(element);\n });\n}\n\n/**\n * Retrieves a player instance for a given element or selector\n * @param elementOrSelector - DOM element or CSS selector\n * @returns Player instance or null if not found\n */\nfunction getPlayer(elementOrSelector: Element | string): JaaqVideoPlayer | null {\n let element: Element | null;\n\n if (typeof elementOrSelector === 'string') {\n element = document.querySelector(elementOrSelector);\n if (!element) {\n console.error('JAAQ Player: Element not found for selector', elementOrSelector);\n return null;\n }\n } else {\n element = elementOrSelector;\n }\n\n return playerRegistry.get(element) || null;\n}\n\n/**\n * Destroys all initialized player instances and cleans up resources\n */\nfunction destroyAll(): void {\n playerList.forEach(({ element, player }) => {\n try {\n player.destroy();\n playerRegistry.delete(element);\n } catch (error) {\n console.error('JAAQ Player: Error destroying player', error);\n }\n });\n playerList.length = 0;\n}\n\n/**\n * Auto-initialization API for declarative video player setup\n * Automatically finds and initializes players marked with [data-jaaq-player]\n * @example\n * // Auto-initialization on page load\n * <div data-jaaq-player data-api-key=\"key\" data-client-id=\"id\" data-video-id=\"video\"></div>\n *\n * // Manual initialization\n * JaaqPlayer.init();\n *\n * // Get player instance\n * const player = JaaqPlayer.getPlayer('[data-video-id=\"video\"]');\n * player.on('play', () => console.log('Playing'));\n */\nexport const JaaqPlayer = {\n /** Initialize all players with [data-jaaq-player] attribute */\n init: initializePlayers,\n /** Get player instance by element or selector */\n getPlayer,\n /** Destroy all initialized players */\n destroyAll,\n};\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n initializePlayers();\n });\n } else {\n initializePlayers();\n }\n}\n",".jaaq-collection-player {\n width: 100%;\n max-width: 1400px;\n margin: 0 auto;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n}\n\n.jaaq-collection-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 400px;\n}\n\n.jaaq-collection-spinner {\n width: 50px;\n height: 50px;\n border: 4px solid rgba(0, 123, 255, 0.3);\n border-top-color: #007bff;\n border-radius: 50%;\n animation: jaaq-collection-spin 1s linear infinite;\n}\n\n@keyframes jaaq-collection-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n.jaaq-collection-error {\n background: rgba(220, 53, 69, 0.9);\n color: white;\n padding: 16px 24px;\n border-radius: 8px;\n text-align: center;\n font-size: 14px;\n margin: 20px;\n}\n\n.jaaq-collection-carousel .splide__track {\n padding: 40px 0;\n}\n\n.jaaq-collection-carousel .splide__slide {\n opacity: 0.7;\n transition: all 0.3s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.jaaq-collection-carousel .splide__slide.is-active {\n opacity: 1;\n}\n\n.jaaq-collection-carousel .splide__slide jaaq-video-player {\n width: 100%;\n max-width: 600px;\n transition: all 0.3s ease;\n}\n\n.jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 800px;\n}\n\n.jaaq-collection-carousel .splide__arrow {\n background: rgba(0, 0, 0, 0.5);\n border: none;\n width: 48px;\n height: 48px;\n border-radius: 50%;\n color: white;\n cursor: pointer;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n}\n\n.jaaq-collection-carousel .splide__arrow:hover {\n background: rgba(0, 0, 0, 0.8);\n transform: scale(1.1);\n}\n\n.jaaq-collection-carousel .splide__arrow:disabled {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.jaaq-collection-carousel .splide__arrow svg {\n fill: white;\n width: 20px;\n height: 20px;\n}\n\n.jaaq-collection-carousel .splide__pagination {\n bottom: -30px;\n}\n\n.jaaq-collection-carousel .splide__pagination__page {\n background: #ccc;\n border: none;\n width: 10px;\n height: 10px;\n margin: 0 4px;\n border-radius: 50%;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.jaaq-collection-carousel .splide__pagination__page.is-active {\n background: white;\n transform: scale(1.3);\n}\n\n@media (max-width: 1024px) {\n .jaaq-collection-carousel .splide__slide jaaq-video-player {\n max-width: 500px;\n }\n\n .jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 650px;\n }\n}\n\n@media (max-width: 768px) {\n .jaaq-collection-carousel .splide__track {\n padding: 20px 0;\n }\n\n .jaaq-collection-carousel .splide__slide jaaq-video-player {\n max-width: 400px;\n }\n\n .jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 500px;\n }\n\n .jaaq-collection-carousel .splide__arrow {\n width: 40px;\n height: 40px;\n }\n}\n\n@media (max-width: 480px) {\n .jaaq-collection-carousel .splide__slide jaaq-video-player {\n max-width: 100%;\n }\n\n .jaaq-collection-carousel .splide__slide.is-active jaaq-video-player {\n max-width: 100%;\n }\n}\n","import Splide from '@splidejs/splide';\nimport { JaaqClient, BASE_URL } from '@src/index';\nimport type { CollectionDTO, VideoDTO } from '@src/types';\nimport sharedStyles from '@ui/shared/styles.css';\nimport collectionStyles from './CollectionPlayer.css';\nimport splideStyles from '@splidejs/splide/css';\n\nconst COMPONENT_STYLES = `\n:host {\n display: block;\n width: 100%;\n}\n\n:host([hidden]) {\n display: none;\n}\n`;\n\nexport class JaaqCollectionPlayerElement extends HTMLElement {\n private splide: Splide | null = null;\n private container: HTMLDivElement | null = null;\n private carouselElement: HTMLDivElement | null = null;\n private clientInstance: JaaqClient | null = null;\n private connected = false;\n private collectionData: CollectionDTO | null = null;\n private autoplayTimeoutId: number | null = null;\n\n static get observedAttributes() {\n return [\n 'collection-id',\n 'api-key',\n 'client-id',\n 'subscription-id',\n 'base-url',\n 'autoplay',\n 'show-arrows',\n 'show-dots',\n 'video-settings',\n ];\n }\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n this.connected = true;\n this.render();\n this.initCarousel();\n }\n\n disconnectedCallback() {\n this.connected = false;\n this.destroyCarousel();\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {\n if (!this.connected || oldValue === newValue) return;\n\n if (name === 'collection-id' || name === 'video-settings') {\n this.destroyCarousel();\n this.initCarousel();\n }\n\n if (name === 'show-arrows' || name === 'show-dots') {\n this.destroyCarousel();\n this.initCarousel();\n }\n }\n\n private getBooleanAttr(name: string, defaultValue: boolean): boolean {\n const v = this.getAttribute(name);\n if (v === null) return defaultValue;\n return v !== 'false';\n }\n\n private getVideosFromCollection(collection: { videos?: VideoDTO[]; videoGroups?: { videos?: VideoDTO[] }[] }): VideoDTO[] {\n if (collection.videos && collection.videos.length > 0) {\n return collection.videos;\n }\n\n if (collection.videoGroups && collection.videoGroups.length > 0) {\n const videos: VideoDTO[] = [];\n collection.videoGroups.forEach((group) => {\n if (group.videos && group.videos.length > 0) {\n videos.push(...group.videos);\n }\n });\n return videos;\n }\n\n return [];\n }\n\n private render() {\n if (!this.shadowRoot) return;\n\n const styleSheet = document.createElement('style');\n styleSheet.textContent = `\n ${sharedStyles}\n ${collectionStyles}\n ${splideStyles}\n ${COMPONENT_STYLES}\n `;\n\n this.container = document.createElement('div');\n this.container.className = 'jaaq-collection-player';\n\n this.shadowRoot.appendChild(styleSheet);\n this.shadowRoot.appendChild(this.container);\n }\n\n private async initCarousel() {\n if (!this.container) return;\n\n const collectionId = this.getAttribute('collection-id');\n if (!collectionId) {\n this.emitError(new Error('collection-id attribute is required'));\n return;\n }\n\n const apiKey = this.getAttribute('api-key');\n const clientId = this.getAttribute('client-id');\n const baseUrl = this.getAttribute('base-url') || undefined;\n const apiVersion = this.getAttribute('api-version') || undefined;\n\n if (!this.clientInstance && !apiKey && !clientId) {\n this.emitError(new Error('Either client property or api-key and client-id attributes are required'));\n return;\n }\n\n this.showLoading();\n\n try {\n const client =\n this.clientInstance ||\n JaaqClient.init({\n apiKey: apiKey!,\n clientId: clientId!,\n baseUrl: baseUrl || BASE_URL,\n apiVersion: apiVersion,\n });\n\n this.collectionData = await client.collections.getById(collectionId);\n const videos = this.getVideosFromCollection(this.collectionData);\n\n if (videos.length === 0) {\n this.emitError(new Error('No videos found in collection'));\n return;\n }\n\n this.renderCarousel();\n this.initSplide();\n\n this.dispatchEvent(\n new CustomEvent('jaaq:collection:loaded', {\n detail: this.collectionData,\n bubbles: true,\n composed: true,\n }),\n );\n } catch (error) {\n this.emitError(error instanceof Error ? error : new Error('Failed to load collection'));\n }\n }\n\n private showLoading() {\n if (!this.container) return;\n this.container.innerHTML = `\n <div class=\"jaaq-collection-loading\">\n <div class=\"jaaq-collection-spinner\"></div>\n </div>\n `;\n }\n\n private renderCarousel() {\n if (!this.container || !this.collectionData) return;\n\n this.container.innerHTML = '';\n\n this.carouselElement = document.createElement('div');\n this.carouselElement.className = 'splide jaaq-collection-carousel';\n\n const track = document.createElement('div');\n track.className = 'splide__track';\n\n const list = document.createElement('ul');\n list.className = 'splide__list';\n\n const apiKey = this.getAttribute('api-key');\n const clientId = this.getAttribute('client-id');\n const baseUrl = this.getAttribute('base-url');\n const videoSettingsAttr = this.getAttribute('video-settings');\n let videoSettings: Record<string, unknown> | null = null;\n if (videoSettingsAttr) {\n try {\n videoSettings = JSON.parse(videoSettingsAttr);\n } catch (e) {\n console.warn('[CollectionPlayer] Failed to parse video-settings attribute', e);\n }\n }\n\n const videos = this.getVideosFromCollection(this.collectionData);\n videos.forEach((video) => {\n const slide = document.createElement('li');\n slide.className = 'splide__slide';\n\n const player = document.createElement('jaaq-video-player');\n player.setAttribute('video-id', video.videoId);\n if (apiKey) player.setAttribute('api-key', apiKey);\n if (clientId) player.setAttribute('client-id', clientId);\n if (baseUrl) player.setAttribute('base-url', baseUrl);\n player.setAttribute('autoplay', 'false');\n player.setAttribute('width', '100%');\n\n if (videoSettings) {\n if (videoSettings.controls !== undefined) {\n player.setAttribute('controls', String(videoSettings.controls));\n }\n if (videoSettings.showLogo !== undefined) {\n player.setAttribute('show-logo', String(videoSettings.showLogo));\n }\n if (videoSettings.showTitle !== undefined) {\n player.setAttribute('show-title', String(videoSettings.showTitle));\n }\n if (videoSettings.showAuthor !== undefined) {\n player.setAttribute('show-author', String(videoSettings.showAuthor));\n }\n if (videoSettings.showDescription !== undefined) {\n player.setAttribute('show-description', String(videoSettings.showDescription));\n }\n if (videoSettings.showCaptions !== undefined) {\n player.setAttribute('show-captions', String(videoSettings.showCaptions));\n }\n if (videoSettings.startMuted !== undefined) {\n player.setAttribute('start-muted', String(videoSettings.startMuted));\n }\n if (videoSettings.width !== undefined) {\n player.setAttribute('width', String(videoSettings.width));\n }\n if (videoSettings.height !== undefined) {\n player.setAttribute('height', String(videoSettings.height));\n }\n }\n\n slide.appendChild(player);\n list.appendChild(slide);\n });\n\n track.appendChild(list);\n this.carouselElement.appendChild(track);\n this.container.appendChild(this.carouselElement);\n }\n\n private initSplide() {\n if (!this.carouselElement) return;\n\n const showArrows = this.getBooleanAttr('show-arrows', true);\n const showDots = this.getBooleanAttr('show-dots', true);\n\n this.splide = new Splide(this.carouselElement, {\n type: 'loop',\n perPage: 3,\n focus: 'center',\n gap: '0.5rem',\n perMove: 1,\n autoHeight: true,\n updateOnMove: true,\n padding: '5 rem',\n breakpoints: {\n 768: {\n perPage: 1,\n },\n 1024: {\n perPage: 2,\n },\n },\n arrows: showArrows,\n pagination: showDots,\n autoplay: false,\n });\n\n this.splide.on('moved', (newIndex: number) => {\n console.log('[CollectionPlayer] Splide moved event', {\n newIndex,\n splideIndex: this.splide?.index,\n Components: this.splide?.Components,\n });\n this.handleSlideChange(newIndex);\n\n const videos = this.collectionData ? this.getVideosFromCollection(this.collectionData) : [];\n this.dispatchEvent(\n new CustomEvent('jaaq:collection:slidechange', {\n detail: { index: newIndex, video: videos[newIndex] },\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.splide.mount();\n\n console.log('[CollectionPlayer] After mount', {\n splideIndex: this.splide.index,\n length: this.splide.length,\n });\n\n setTimeout(() => {\n if (this.splide) {\n console.log('[CollectionPlayer] Initial handleSlideChange after DOM update');\n this.handleSlideChange(this.splide.index);\n }\n }, 100);\n }\n\n private handleSlideChange(activeIndex: number) {\n if (!this.carouselElement) return;\n\n const isAutoplayEnabled = this.hasAttribute('autoplay') && this.getAttribute('autoplay') !== 'false';\n console.log('[CollectionPlayer] handleSlideChange called', { activeIndex, isAutoplayEnabled });\n\n if (this.autoplayTimeoutId !== null) {\n console.log('[CollectionPlayer] Clearing existing autoplay timeout', { timeoutId: this.autoplayTimeoutId });\n clearTimeout(this.autoplayTimeoutId);\n this.autoplayTimeoutId = null;\n }\n\n const activeSlide = this.carouselElement.querySelector('.splide__slide.is-active:not(.splide__slide--clone)');\n const activePlayer = activeSlide?.querySelector('jaaq-video-player') as any;\n const activeVideoId = activePlayer?.getAttribute('video-id');\n\n console.log('[CollectionPlayer] Active slide from DOM:', {\n activeIndex,\n activeVideoId,\n foundActiveSlide: !!activeSlide,\n });\n\n const originalSlides = this.carouselElement.querySelectorAll('.splide__slide:not(.splide__slide--clone)');\n\n Array.from(originalSlides).map((slide, idx) => {\n const player = slide.querySelector('jaaq-video-player') as any;\n const videoId = player?.getAttribute('video-id') || 'unknown';\n const isActive = slide.classList.contains('is-active');\n return {\n index: idx,\n videoId,\n isActive,\n };\n });\n\n originalSlides.forEach((slide, index) => {\n const player = slide.querySelector('jaaq-video-player') as any;\n if (!player) return;\n\n const videoId = player.getAttribute('video-id');\n const isActive = slide.classList.contains('is-active');\n\n if (isActive) {\n if (isAutoplayEnabled) {\n this.autoplayTimeoutId = window.setTimeout(() => {\n console.log('[CollectionPlayer] 1s delay complete, playing video', {\n index,\n videoId,\n });\n player.play?.();\n }, 1000);\n }\n } else {\n player.pause?.();\n }\n });\n }\n\n private destroyCarousel() {\n if (this.autoplayTimeoutId !== null) {\n clearTimeout(this.autoplayTimeoutId);\n this.autoplayTimeoutId = null;\n }\n if (this.splide) {\n this.splide.destroy();\n this.splide = null;\n }\n if (this.container) {\n this.container.innerHTML = '';\n }\n this.collectionData = null;\n }\n\n private emitError(error: Error) {\n if (this.container) {\n this.container.innerHTML = `\n <div class=\"jaaq-collection-error\">\n ${error.message}\n </div>\n `;\n }\n\n this.dispatchEvent(\n new CustomEvent('jaaq:collection:error', {\n detail: error,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n get client(): JaaqClient | null {\n return this.clientInstance;\n }\n\n set client(value: JaaqClient | null) {\n this.clientInstance = value;\n if (this.connected) {\n this.destroyCarousel();\n this.initCarousel();\n }\n }\n\n get collectionId(): string | null {\n return this.getAttribute('collection-id');\n }\n\n set collectionId(value: string | null) {\n if (value) {\n this.setAttribute('collection-id', value);\n } else {\n this.removeAttribute('collection-id');\n }\n }\n\n refresh(): void {\n this.destroyCarousel();\n this.initCarousel();\n }\n\n next(): void {\n this.splide?.go('+1');\n }\n\n prev(): void {\n this.splide?.go('-1');\n }\n\n go(index: number): void {\n this.splide?.go(index);\n }\n\n destroy(): void {\n this.destroyCarousel();\n }\n\n getCollection(): CollectionDTO | null {\n return this.collectionData;\n }\n}\n","import { JaaqVideoPlayer } from '@ui/vanilla/VideoPlayer';\nimport type { JaaqClient } from '@src/index';\nimport type { PlayerState } from '@ui/shared/types';\nimport sharedStyles from '@ui/shared/styles.css';\nimport vanillaStyles from '@ui/vanilla/styles.css';\n\nconst COMPONENT_STYLES = `\n:host {\n display: block;\n width: 100%;\n}\n\n:host([hidden]) {\n display: none;\n}\n`;\n\n/**\n * Custom web component for JAAQ video player with Shadow DOM encapsulation\n * Provides a framework-agnostic video player with custom controls and HLS support\n *\n * @example\n * // Declarative usage\n * <jaaq-video-player\n * video-id=\"video-123\"\n * api-key=\"key\"\n * client-id=\"client\"\n * autoplay=\"false\">\n * </jaaq-video-player>\n *\n * @example\n * // Programmatic usage\n * const player = document.createElement('jaaq-video-player');\n * player.setAttribute('video-id', 'video-123');\n * player.addEventListener('jaaq:play', () => console.log('Playing'));\n * document.body.appendChild(player);\n */\nexport class JaaqVideoPlayerElement extends HTMLElement {\n private player: JaaqVideoPlayer | null = null;\n private container: HTMLDivElement | null = null;\n private clientInstance: JaaqClient | null = null;\n private connected = false;\n\n static get observedAttributes() {\n return [\n 'video-id',\n 'api-key',\n 'client-id',\n 'autoplay',\n 'base-url',\n 'width',\n 'height',\n 'controls',\n 'show-logo',\n 'show-title',\n 'show-author',\n 'show-description',\n 'show-captions',\n 'start-muted',\n ];\n }\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n this.connected = true;\n this.render();\n this.initPlayer();\n }\n\n disconnectedCallback() {\n this.connected = false;\n this.destroyPlayer();\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {\n if (!this.connected || oldValue === newValue) return;\n\n if (name === 'video-id' && this.player) {\n this.destroyPlayer();\n this.initPlayer();\n } else if (name === 'width' || name === 'height') {\n this.updateContainerStyles();\n } else if (\n name === 'controls' ||\n name === 'show-logo' ||\n name === 'show-title' ||\n name === 'show-author' ||\n name === 'show-description' ||\n name === 'show-captions' ||\n name === 'start-muted'\n ) {\n if (this.player) {\n const features: any = {};\n if (name === 'controls') {\n features.controls = !this.hasAttribute('controls') || this.getAttribute('controls') !== 'false';\n } else if (name === 'show-logo') {\n features.showLogo = !this.hasAttribute('show-logo') || this.getAttribute('show-logo') !== 'false';\n } else if (name === 'show-title') {\n features.showTitle = !this.hasAttribute('show-title') || this.getAttribute('show-title') !== 'false';\n } else if (name === 'show-author') {\n features.showAuthor = !this.hasAttribute('show-author') || this.getAttribute('show-author') !== 'false';\n } else if (name === 'show-description') {\n features.showDescription = !this.hasAttribute('show-description') || this.getAttribute('show-description') !== 'false';\n } else if (name === 'show-captions') {\n features.showCaptions = !this.hasAttribute('show-captions') || this.getAttribute('show-captions') !== 'false';\n } else if (name === 'start-muted') {\n features.startMuted = this.hasAttribute('start-muted') && this.getAttribute('start-muted') !== 'false';\n }\n this.player.setFeatures(features);\n }\n }\n }\n\n private render() {\n if (!this.shadowRoot) return;\n\n const styleSheet = document.createElement('style');\n styleSheet.textContent = `\n ${sharedStyles}\n ${vanillaStyles}\n ${COMPONENT_STYLES}\n `;\n\n this.container = document.createElement('div');\n this.container.className = 'jaaq-webcomponent-container';\n\n this.shadowRoot.appendChild(styleSheet);\n this.shadowRoot.appendChild(this.container);\n\n this.updateContainerStyles();\n }\n\n private updateContainerStyles() {\n if (!this.container) return;\n\n const width = this.getAttribute('width') || '100%';\n const height = this.getAttribute('height') || 'auto';\n\n this.container.style.width = width;\n this.container.style.height = height;\n }\n\n private async initPlayer() {\n if (!this.container || this.player) return;\n\n const videoId = this.getAttribute('video-id');\n if (!videoId) {\n this.emitError(new Error('video-id attribute is required'));\n return;\n }\n\n const apiKey = this.getAttribute('api-key');\n const clientId = this.getAttribute('client-id');\n const baseUrl = this.getAttribute('base-url') || undefined;\n const apiVersion = this.getAttribute('api-version') || undefined;\n const autoplay = this.hasAttribute('autoplay') && this.getAttribute('autoplay') !== 'false';\n const controls = !this.hasAttribute('controls') || this.getAttribute('controls') !== 'false';\n\n const showLogo = !this.hasAttribute('show-logo') || this.getAttribute('show-logo') !== 'false';\n const showTitle = !this.hasAttribute('show-title') || this.getAttribute('show-title') !== 'false';\n const showAuthor = !this.hasAttribute('show-author') || this.getAttribute('show-author') !== 'false';\n const showDescription = !this.hasAttribute('show-description') || this.getAttribute('show-description') !== 'false';\n const showCaptions = !this.hasAttribute('show-captions') || this.getAttribute('show-captions') !== 'false';\n const startMuted = this.hasAttribute('start-muted') && this.getAttribute('start-muted') !== 'false';\n\n if (!this.clientInstance && !apiKey && !clientId) {\n this.emitError(new Error('Either client property or api-key and client-id attributes are required'));\n return;\n }\n\n try {\n this.player = new JaaqVideoPlayer(this.container, {\n videoId: videoId ?? undefined,\n apiKey: apiKey ?? undefined,\n clientId: clientId ?? undefined,\n client: this.clientInstance || undefined,\n baseUrl,\n apiVersion,\n autoplay,\n controls,\n showLogo,\n showTitle,\n showAuthor,\n showDescription,\n showCaptions,\n startMuted,\n });\n\n this.attachPlayerEvents();\n } catch (error) {\n this.emitError(error instanceof Error ? error : new Error('Failed to initialize player'));\n }\n }\n\n private attachPlayerEvents() {\n if (!this.player) return;\n\n this.player.on('loaded', (video) => {\n this.dispatchEvent(\n new CustomEvent('jaaq:loaded', {\n detail: video,\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.player.on('play', () => {\n this.dispatchEvent(\n new CustomEvent('jaaq:play', {\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.player.on('pause', () => {\n this.dispatchEvent(\n new CustomEvent('jaaq:pause', {\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.player.on('timeupdate', (time) => {\n this.dispatchEvent(\n new CustomEvent('jaaq:timeupdate', {\n detail: time,\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.player.on('volumechange', (volume) => {\n this.dispatchEvent(\n new CustomEvent('jaaq:volumechange', {\n detail: volume,\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.player.on('ended', () => {\n this.dispatchEvent(\n new CustomEvent('jaaq:ended', {\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this.player.on('error', (error) => {\n this.emitError(error);\n });\n\n this.player.on('fullscreenchange', (isFullscreen) => {\n this.dispatchEvent(\n new CustomEvent('jaaq:fullscreenchange', {\n detail: isFullscreen,\n bubbles: true,\n composed: true,\n }),\n );\n });\n }\n\n private emitError(error: Error) {\n this.dispatchEvent(\n new CustomEvent('jaaq:error', {\n detail: error,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private destroyPlayer() {\n if (this.player) {\n this.player.destroy();\n this.player = null;\n }\n }\n\n /**\n * Gets the current JaaqClient instance\n */\n get client(): JaaqClient | null {\n return this.clientInstance;\n }\n\n /**\n * Sets a JaaqClient instance for the player to use\n * Reinitializes the player if already connected\n */\n set client(value: JaaqClient | null) {\n this.clientInstance = value;\n if (this.connected) {\n this.destroyPlayer();\n this.initPlayer();\n }\n }\n\n /**\n * Gets the current video ID\n */\n get videoId(): string | null {\n return this.getAttribute('video-id');\n }\n\n /**\n * Sets the video ID\n * Updates the video-id attribute and triggers player reinitialization\n */\n set videoId(value: string | null) {\n if (value) {\n this.setAttribute('video-id', value);\n } else {\n this.removeAttribute('video-id');\n }\n }\n\n /**\n * Starts or resumes video playback\n */\n play(): void {\n this.player?.play();\n }\n\n /**\n * Pauses video playback\n */\n pause(): void {\n this.player?.pause();\n }\n\n /**\n * Sets the playback volume\n * @param volume - Volume level between 0 (silent) and 1 (maximum)\n */\n setVolume(volume: number): void {\n this.player?.setVolume(volume);\n }\n\n /**\n * Toggles audio mute state\n */\n toggleMute(): void {\n this.player?.toggleMute();\n }\n\n /**\n * Seeks to a specific time in the video\n * @param time - Target time in seconds\n */\n seek(time: number): void {\n this.player?.seek(time);\n }\n\n /**\n * Returns the current player state\n * @returns Current player state object or null if player not initialized\n */\n getState(): PlayerState | null {\n return this.player?.getState() || null;\n }\n\n /**\n * Destroys the player instance and cleans up resources\n */\n destroy(): void {\n this.destroyPlayer();\n }\n}\n","import { JaaqVideoPlayerElement } from './VideoPlayer';\nimport { JaaqCollectionPlayerElement } from './CollectionPlayer';\n\nconst COMPONENT_TAGS = {\n VIDEO_PLAYER: 'jaaq-video-player',\n COLLECTION_PLAYER: 'jaaq-collection-player',\n};\n\n/**\n * Registers JAAQ custom elements (<jaaq-video-player> and <jaaq-collection-player>)\n * Safe to call multiple times - only registers if not already registered\n *\n * @example\n * import { registerJaaqComponents } from '@jaaq/jaaq-sdk-js/ui/webcomponents';\n * registerJaaqComponents();\n */\nexport function registerJaaqComponents(): void {\n if (typeof window === 'undefined' || typeof customElements === 'undefined') {\n console.warn('Custom Elements API is not available. Web components cannot be registered.');\n return;\n }\n\n if (!customElements.get(COMPONENT_TAGS.VIDEO_PLAYER)) {\n customElements.define(COMPONENT_TAGS.VIDEO_PLAYER, JaaqVideoPlayerElement);\n }\n\n if (!customElements.get(COMPONENT_TAGS.COLLECTION_PLAYER)) {\n customElements.define(COMPONENT_TAGS.COLLECTION_PLAYER, JaaqCollectionPlayerElement);\n }\n}\n\n/**\n * Checks if the JAAQ web components are already registered\n * @returns True if components are registered, false otherwise\n */\nexport function isRegistered(): boolean {\n if (typeof window === 'undefined' || typeof customElements === 'undefined') {\n return false;\n }\n return !!customElements.get(COMPONENT_TAGS.VIDEO_PLAYER) && !!customElements.get(COMPONENT_TAGS.COLLECTION_PLAYER);\n}\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n registerJaaqComponents();\n });\n } else {\n registerJaaqComponents();\n }\n}\n","import Splide from '@splidejs/splide';\nimport { JaaqClient, BASE_URL, createJaaqClient } from '@src/index';\nimport type { CollectionDTO, VideoDTO } from '@src/types';\nimport type { VideoSettings } from '@ui/shared/types';\nimport '@ui/shared/styles.css';\nimport './styles.css';\nimport '@splidejs/splide/css';\n\ntype CollectionPlayerConfig = {\n collectionId: string;\n client?: JaaqClient;\n apiKey?: string;\n clientId?: string;\n baseUrl?: string;\n apiVersion?: string;\n autoplay?: boolean;\n showArrows?: boolean;\n showDots?: boolean;\n className?: string;\n videoSettings?: VideoSettings;\n};\n\ntype CollectionPlayerEventMap = {\n loaded: CollectionDTO;\n slidechange: { index: number; video: VideoDTO };\n error: Error;\n};\n\ntype CollectionPlayerEventCallback<T> = (_data: T) => void;\n\nexport class JaaqCollectionPlayer {\n private container: HTMLElement;\n private config: CollectionPlayerConfig;\n private client: JaaqClient | null = null;\n private splide: Splide | null = null;\n private playerElement: HTMLDivElement | null = null;\n private carouselElement: HTMLDivElement | null = null;\n private collectionData: CollectionDTO | null = null;\n private autoplayTimeoutId: number | null = null;\n private listeners: Map<keyof CollectionPlayerEventMap, Set<CollectionPlayerEventCallback<unknown>>> = new Map();\n\n constructor(container: HTMLElement | string, config: CollectionPlayerConfig) {\n this.container = typeof container === 'string' ? document.querySelector(container)! : container;\n\n if (!this.container) {\n throw new Error('Container element not found');\n }\n\n this.config = { autoplay: false, showArrows: true, showDots: true, ...config };\n\n if (config.client) {\n this.client = config.client;\n } else if (config.apiKey && config.clientId) {\n this.client = createJaaqClient({\n apiKey: config.apiKey,\n clientId: config.clientId,\n baseUrl: config.baseUrl || BASE_URL,\n apiVersion: config.apiVersion,\n });\n } else {\n throw new Error('Either client property or apiKey and clientId are required');\n }\n\n this.init();\n }\n\n private async init(): Promise<void> {\n this.render();\n await this.initCarousel();\n }\n\n private render(): void {\n this.container.innerHTML = '';\n\n this.playerElement = document.createElement('div');\n this.playerElement.className = `jaaq-collection-player ${this.config.className || ''}`;\n\n this.container.appendChild(this.playerElement);\n }\n\n private async initCarousel(): Promise<void> {\n if (!this.playerElement) return;\n\n const collectionId = this.config.collectionId;\n if (!collectionId) {\n this.emitError(new Error('collectionId is required'));\n return;\n }\n\n this.showLoading();\n\n try {\n if (!this.client) {\n throw new Error('Client is not initialized');\n }\n\n this.collectionData = await this.client.collections.getById(collectionId);\n\n const videos = this.getVideosFromCollection(this.collectionData);\n if (videos.length === 0) {\n this.emitError(new Error('No videos found in collection'));\n return;\n }\n\n this.renderCarousel();\n this.initSplide();\n\n this.emit('loaded', this.collectionData);\n } catch (error) {\n this.emitError(error instanceof Error ? error : new Error('Failed to load collection'));\n }\n }\n\n private showLoading(): void {\n if (!this.playerElement) return;\n this.playerElement.innerHTML = `\n <div class=\"jaaq-collection-loading\">\n <div class=\"jaaq-collection-spinner\"></div>\n </div>\n `;\n }\n\n private getVideosFromCollection(collection: { videos?: VideoDTO[]; videoGroups?: { videos?: VideoDTO[] }[] }): VideoDTO[] {\n if (collection.videos && collection.videos.length > 0) {\n return collection.videos;\n }\n\n if (collection.videoGroups && collection.videoGroups.length > 0) {\n const videos: VideoDTO[] = [];\n collection.videoGroups.forEach((group) => {\n if (group.videos && group.videos.length > 0) {\n videos.push(...group.videos);\n }\n });\n return videos;\n }\n\n return [];\n }\n\n private renderCarousel(): void {\n if (!this.playerElement || !this.collectionData) return;\n\n this.playerElement.innerHTML = '';\n\n this.carouselElement = document.createElement('div');\n this.carouselElement.className = 'splide jaaq-collection-carousel';\n\n const track = document.createElement('div');\n track.className = 'splide__track';\n\n const list = document.createElement('ul');\n list.className = 'splide__list';\n\n const videos = this.getVideosFromCollection(this.collectionData);\n videos.forEach((video: any) => {\n const slide = document.createElement('li');\n slide.className = 'splide__slide';\n\n const player = document.createElement('jaaq-video-player') as HTMLElement;\n player.setAttribute('video-id', video.videoId);\n if (this.config.apiKey) player.setAttribute('api-key', this.config.apiKey);\n if (this.config.clientId) player.setAttribute('client-id', this.config.clientId);\n if (this.config.baseUrl) player.setAttribute('base-url', this.config.baseUrl);\n if (this.config.apiVersion) player.setAttribute('api-version', this.config.apiVersion);\n player.setAttribute('autoplay', 'false');\n player.setAttribute('width', '100%');\n\n if (this.config.videoSettings) {\n const settings = this.config.videoSettings;\n if (settings.controls !== undefined) {\n player.setAttribute('controls', String(settings.controls));\n }\n if (settings.showLogo !== undefined) {\n player.setAttribute('show-logo', String(settings.showLogo));\n }\n if (settings.showTitle !== undefined) {\n player.setAttribute('show-title', String(settings.showTitle));\n }\n if (settings.showAuthor !== undefined) {\n player.setAttribute('show-author', String(settings.showAuthor));\n }\n if (settings.showDescription !== undefined) {\n player.setAttribute('show-description', String(settings.showDescription));\n }\n if (settings.showCaptions !== undefined) {\n player.setAttribute('show-captions', String(settings.showCaptions));\n }\n if (settings.startMuted !== undefined) {\n player.setAttribute('start-muted', String(settings.startMuted));\n }\n if (settings.width !== undefined) {\n player.setAttribute('width', String(settings.width));\n }\n if (settings.height !== undefined) {\n player.setAttribute('height', String(settings.height));\n }\n }\n\n if (this.client && (player as any).client !== undefined) {\n (player as any).client = this.client;\n }\n\n slide.appendChild(player);\n list.appendChild(slide);\n });\n\n track.appendChild(list);\n this.carouselElement.appendChild(track);\n this.playerElement.appendChild(this.carouselElement);\n }\n\n private initSplide(): void {\n if (!this.carouselElement) return;\n\n this.splide = new Splide(this.carouselElement, {\n type: 'loop',\n perPage: 3,\n focus: 'center',\n gap: '0.5rem',\n perMove: 1,\n autoHeight: true,\n updateOnMove: true,\n padding: '5rem',\n breakpoints: {\n 768: {\n perPage: 1,\n },\n 1024: {\n perPage: 2,\n },\n },\n arrows: this.config.showArrows !== false,\n pagination: this.config.showDots !== false,\n autoplay: false,\n });\n\n this.splide.on('moved', (newIndex: number) => {\n this.handleSlideChange(newIndex);\n\n if (this.collectionData) {\n const videos = this.getVideosFromCollection(this.collectionData);\n this.emit('slidechange', { index: newIndex, video: videos[newIndex] });\n }\n });\n\n this.splide.mount();\n\n setTimeout(() => {\n if (this.splide) {\n this.handleSlideChange(this.splide.index);\n }\n }, 100);\n }\n\n private handleSlideChange(_activeIndex: number): void {\n if (!this.carouselElement) return;\n\n const isAutoplayEnabled = this.config.autoplay;\n\n if (this.autoplayTimeoutId !== null) {\n clearTimeout(this.autoplayTimeoutId);\n this.autoplayTimeoutId = null;\n }\n\n const originalSlides = this.carouselElement.querySelectorAll('.splide__slide:not(.splide__slide--clone)');\n\n originalSlides.forEach((slide) => {\n const player = slide.querySelector('jaaq-video-player') as any;\n if (!player) return;\n\n const isActive = slide.classList.contains('is-active');\n\n if (isActive) {\n if (isAutoplayEnabled) {\n this.autoplayTimeoutId = window.setTimeout(() => {\n player.play?.();\n }, 1000);\n }\n } else {\n player.pause?.();\n }\n });\n }\n\n private destroyCarousel(): void {\n if (this.autoplayTimeoutId !== null) {\n clearTimeout(this.autoplayTimeoutId);\n this.autoplayTimeoutId = null;\n }\n if (this.splide) {\n this.splide.destroy();\n this.splide = null;\n }\n if (this.playerElement) {\n this.playerElement.innerHTML = '';\n }\n this.collectionData = null;\n }\n\n private emitError(error: Error): void {\n if (this.playerElement) {\n this.playerElement.innerHTML = `\n <div class=\"jaaq-collection-error\">\n ${error.message}\n </div>\n `;\n }\n\n this.emit('error', error);\n }\n\n on<K extends keyof CollectionPlayerEventMap>(event: K, callback: CollectionPlayerEventCallback<CollectionPlayerEventMap[K]>): void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(callback as CollectionPlayerEventCallback<unknown>);\n }\n\n off<K extends keyof CollectionPlayerEventMap>(event: K, callback: CollectionPlayerEventCallback<CollectionPlayerEventMap[K]>): void {\n const callbacks = this.listeners.get(event);\n if (callbacks) {\n callbacks.delete(callback as CollectionPlayerEventCallback<unknown>);\n }\n }\n\n private emit<K extends keyof CollectionPlayerEventMap>(event: K, data: CollectionPlayerEventMap[K]): void {\n const callbacks = this.listeners.get(event);\n if (callbacks) {\n callbacks.forEach((callback) => {\n callback(data);\n });\n }\n }\n\n refresh(): void {\n this.destroyCarousel();\n this.initCarousel();\n }\n\n next(): void {\n this.splide?.go('+1');\n }\n\n prev(): void {\n this.splide?.go('-1');\n }\n\n go(index: number): void {\n this.splide?.go(index);\n }\n\n destroy(): void {\n this.destroyCarousel();\n this.listeners.clear();\n this.container.innerHTML = '';\n }\n\n getCollection(): CollectionDTO | null {\n return this.collectionData;\n }\n}\n"],"names":["createHttpClient","config","baseUrl","apiKey","clientId","fetch","fetchImpl","apiVersion","f","globalThis","Error","baseHeaders","fullUrl","path","test","base","replace","relative","encodeURIComponent","startsWith","joinUrl","version","v","toLowerCase","convertToValidAPIVersion","request","async","method","init","body","reqInit","headers","undefined","JSON","stringify","res","ok","text","catch","status","statusText","json","parseJson","get","post","put","patch","delete","BASE_URL","JaaqClient","constructor","http","this","videos","getById","id","video","createVideosResourceV2","collections","collection","createCollectionsResourceV2","createVideosResource","createCollectionsResource","fromHttp","buildClient","createJaaqClient","clamp","value","min","max","Math","document","styleId","getElementById","style","createElement","textContent","head","appendChild","JaaqVideoPlayer","container","client","hls","videoElement","listeners","Map","captionCues","elements","querySelector","state","isPlaying","currentTime","duration","volume","isMuted","startMuted","isFullscreen","isLoading","error","videoData","captionsEnabled","createDOM","loadVideo","attachEventListeners","updateVolumeUI","innerHTML","wrapper","width","height","player","className","muted","setAttribute","logo","centerPlayBtn","gradientOverlay","captionDisplay","display","videoTitle","videoAuthor","videoDescription","loading","controls","controlsBottom","playPauseBtn","volumeBtn","progressBar","progressFilled","captionsBtn","fullscreenBtn","updateControlsVisibility","showControls","setState","videoId","subtitle","parseWebVTT","updateOverlayContent","emit","videoUrl","includes","Hls","isSupported","destroy","enableWorker","lowLatencyMode","loadSource","attachMedia","on","Events","MANIFEST_PARSED","autoplay","play","ERROR","_event","data","fatal","errorMsg","type","details","showError","canPlayType","src","err","message","webvtt","cues","lines","split","i","length","line","trim","startTime","endTime","map","t","parseTimestamp","timestamp","parts","parseFloat","start","end","textLines","push","join","showLogo","showTitle","showAuthor","showDescription","showCaptions","question","creator","titleText","authorData","author","userName","descriptionText","creatorBiography","description","maxLength","truncated","substring","addEventListener","updatePlayPauseButton","updateProgress","updateCaptions","togglePlayPause","e","handleSeek","toggleMute","toggleCaptions","toggleFullscreen","fullscreenElement","classList","toggle","remove","add","newState","progress","currentCue","find","cue","rect","getBoundingClientRect","percent","clientX","left","pause","updateCaptionsButton","element","exitFullscreen","requestFullscreen","setVolume","seek","time","setFeatures","features","removeAttribute","getState","event","callback","has","set","Set","off","callbacks","forEach","clear","_createClass","Constructor","protoProps","staticProps","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_defineProperties","prototype","MEDIA_PREFERS_REDUCED_MOTION","STATES","CREATED","MOUNTED","IDLE","MOVING","SCROLLING","DRAGGING","DESTROYED","empty","array","slice","arrayLike","Array","call","apply","func","bind","concat","arguments","nextTick","setTimeout","noop","raf","requestAnimationFrame","typeOf","subject","isObject","isNull","isArray","isFunction","isString","isUndefined","isHTMLElement","ownerDocument","defaultView","window","HTMLElement","toArray","values","iteratee","indexOf","items","toggleClass","elm","classes","name","addClass","append","parent","children","before","nodes","ref","node","parentNode","insertBefore","matches","selector","children2","filter","child","firstElementChild","ownKeys","keys","forOwn","object","right","reverse","assign","source","merge","omit","elms","attrs","attr","value2","String","create","tag","prop","getComputedStyle","display2","focus","preventScroll","getAttribute","hasClass","contains","removeChild","parseHtml","html","DOMParser","parseFromString","prevent","stopPropagation","preventDefault","stopImmediatePropagation","query","queryAll","querySelectorAll","removeClass","timeOf","timeStamp","unit","PROJECT_CODE","DATA_ATTRIBUTE","assert","condition","floor","ceil","abs","approximatelyEqual","x","y","epsilon","between","number","exclusive","minimum","maximum","sign","format","string","replacements","replacement","pad","ids","EventBinder","forEachEvent","targets","events","events2","eventNS","fragment","options","namespace","isEventTarget","remover","removeEventListener","unbind","listener","dispatch","detail","bubbles","CustomEvent","createEvent","initCustomEvent","dispatchEvent","EVENT_MOUNTED","EVENT_READY","EVENT_MOVE","EVENT_MOVED","EVENT_CLICK","EVENT_ACTIVE","EVENT_INACTIVE","EVENT_VISIBLE","EVENT_HIDDEN","EVENT_REFRESH","EVENT_UPDATED","EVENT_RESIZE","EVENT_RESIZED","EVENT_SCROLL","EVENT_SCROLLED","EVENT_DESTROY","EVENT_ARROWS_MOUNTED","EVENT_NAVIGATION_MOUNTED","EVENT_AUTOPLAY_PLAY","EVENT_AUTOPLAY_PAUSE","EVENT_LAZYLOAD_LOADED","EVENT_SLIDE_KEYDOWN","EVENT_SHIFTED","EVENT_END_INDEX_CHANGED","EventInterface","Splide2","bus","createDocumentFragment","binder","RequestInterval","interval","onInterval","onUpdate","limit","now","Date","rate","paused","count","update","cancel","cancelAnimationFrame","resume","rewind","isPaused","ARROW","ARROW_LEFT","ARROW_RIGHT","ARROW_UP","ARROW_DOWN","TTB","ORIENTATION_MAP","X","Y","ArrowLeft","ArrowRight","ROLE","TAB_INDEX","ARIA_PREFIX","ARIA_CONTROLS","ARIA_CURRENT","ARIA_SELECTED","ARIA_LABEL","ARIA_LABELLEDBY","ARIA_HIDDEN","ARIA_ORIENTATION","ARIA_ROLEDESCRIPTION","ARIA_LIVE","ARIA_BUSY","ARIA_ATOMIC","ALL_ATTRIBUTES","CLASS_PREFIX","STATUS_CLASS_PREFIX","CLASS_ROOT","CLASS_TRACK","CLASS_LIST","CLASS_SLIDE","CLASS_CLONE","CLASS_CONTAINER","CLASS_ARROWS","CLASS_ARROW","CLASS_ARROW_PREV","CLASS_ARROW_NEXT","CLASS_PAGINATION","CLASS_PAGINATION_PAGE","CLASS_PROGRESS_BAR","CLASS_TOGGLE","CLASS_SR","CLASS_INITIALIZED","CLASS_ACTIVE","CLASS_PREV","CLASS_NEXT","CLASS_VISIBLE","CLASS_LOADING","CLASS_FOCUS_IN","CLASS_OVERFLOW","STATUS_CLASSES","CLASSES","slide","clone","arrows","arrow","prev","next","pagination","page","spinner","POINTER_DOWN_EVENTS","POINTER_MOVE_EVENTS","POINTER_UP_EVENTS","SLIDE","LOOP","FADE","Slide$1","index","slideIndex","destroyed","Components","root","isNavigation","updateOnMove","i18n","slideFocus","resolve","Direction","styles","label","isClone","initNavigation","splides","Slide2","splide","Slides","getAt","slideX","onMove","curr","active","isActive","self","visible","is","trackRect","Elements","track","slideRect","isVisible","hidden","focusableNodes","activeElement","updateVisibility","cloneStatus","mount","slideLabel","useContainer","isWithin","from","distance","diff","INTERVAL_DATA_ATTRIBUTE","SCROLL_LISTENER_OPTIONS","passive","capture","NORMALIZATION_MAP","Spacebar","Right","Left","Up","Down","normalizeKey","KEYBOARD_EVENT","SRC_DATA_ATTRIBUTE","SRCSET_DATA_ATTRIBUTE","IMAGE_SELECTOR","TRIGGER_KEYS","ComponentConstructors","freeze","__proto__","Media","Components2","breakpoints","reducedMotion","queries","completely","register","options2","queryList","matchMedia","direction","merged","reduce","merged2","entry","refresh","opts","notify","getPrototypeOf","setup","isMin","mediaQuery","sort","n","m","enable","axisOnly","match","offset","charAt","toUpperCase","orient","list","isUsingKey","_EventInterface","slides","rootClasses","trackClasses","bar","prefix","role","tagName","carousel","getClasses","labelledby","closest","nodeType","parentElement","drag","_EventInterface2","_Components2$Elements","Slides2","forEach$1","Slide1","excludeClones","matcher","getIn","Controller","toIndex","hasFocus","perPage","images","img","getLength","isEnough","Layout","vertical","rootRect","overflow","_EventInterface3","_Components2$Elements2","styleSlides","cssPadding","resize","force","newRect","cssHeight","cssTrackHeight","gap","autoWidth","fixedWidth","cssSlideSize","fixedHeight","autoHeight","isOverflow","padding","heightRatio","listSize","slideSize","withoutGap","Slide","getGap","totalSize","sliderSize","getPadding","Clones","cloneCount","clones","remount","observe","computeCloneCount","isHead","cloneNode","cloneDeep","generate","clones2","fixedSize","Move","Transition","_EventInterface4","_Components2$Layout","_Components2$Directio","_Components2$Elements3","reposition","isBusy","Scroll","jump","translate","toPosition","position","preventLoop","destination","exceededMax","getEnd","shift","loop","backwards","excess","getLimit","size","getPosition","minDistance","Infinity","trimming","trimSpace","move","dest","shifted","exceededLimit","exceededMin","endIndex","slideCount","perMove","_EventInterface5","_Components2$Slides","omitEnd","isLoop","isSlide","getNext","getAdjacent","getPrev","currIndex","prevIndex","onResized","computeDestIndex","snapPage","computeMovableDestIndex","toPage","setIndex","waitForTransition","go","control","allowSameIndex","_ref","indicator","parse","scroll","snap","getIndex","toDest","Arrows","created","wrapperClasses","placeholder","enabled","createArrow","prev2","arrowPath","nextIndex","prevLabel","last","nextLabel","first","disabled","Autoplay","hovered","focused","_EventInterface6","_Components2$Elements4","stopped","resetProgress","stop","autoToggle","pauseOnHover","pauseOnFocus","listen","Cover","cover","cover2","_EventInterface8","friction","onScrolled","noConstrain","noDistance","onEnd","to","easingFunc","pow","Drag","basePosition","baseEvent","prevBaseEvent","isFree","dragging","clickPrevented","_EventInterface9","_Components2$Directio2","exceeded","disable","onPointerDown","isTouch","isTouchEvent","target2","noDrag","button","onPointerMove","onPointerUp","save","cancelable","diffCoord","expired","diffTime","hasExceeded","isSliderDirection","thresholds","dragMinThreshold","isObj","mouse","touch","shouldStart","velocity","computeVelocity","flickPower","flickMaxPages","computeDestination","rewindByDrag","onClick","orthogonal","coordOf","getBaseEvent","changedTouches","TouchEvent","isDragging","Keyboard","_EventInterface10","keyboard","onKeydown","_disabled","LazyLoad","_EventInterface11","isSequential","lazyLoad","entries","srcset","loadNext","check","preloadPages","load","onLoad","Pagination","paginationClasses","dir","getDirection","nextPage","item","paginationDirection","_button","select","li","class","pageX","paginationKeyboard","createPagination","Sync","isParent","sync","Wheel","lastTime","onWheel","deltaY","_min","wheelMinThreshold","sleep","wheelSleep","releaseWheel","shouldPrevent","wheel","Live","live","sr","DEFAULTS","speed","easing","rewindSpeed","Fade","done","endCallback","transition","getSpeed","useScroll","_Splide","states","_o","_E","defaults","_proto","Extensions","_this","_C","_T","Component","component","_this$event","Splide","playerRegistry","WeakMap","playerList","initializePlayer","console","parseDataAttributes","initializePlayers","rootElement","JaaqPlayer","getPlayer","elementOrSelector","destroyAll","readyState","JaaqCollectionPlayerElement","observedAttributes","super","carouselElement","clientInstance","connected","collectionData","autoplayTimeoutId","attachShadow","mode","connectedCallback","render","initCarousel","disconnectedCallback","destroyCarousel","attributeChangedCallback","oldValue","newValue","getBooleanAttr","defaultValue","getVideosFromCollection","videoGroups","group","shadowRoot","styleSheet","sharedStyles","collectionId","emitError","showLoading","renderCarousel","initSplide","composed","videoSettingsAttr","videoSettings","warn","showArrows","showDots","newIndex","log","splideIndex","handleSlideChange","activeIndex","isAutoplayEnabled","hasAttribute","timeoutId","clearTimeout","activeSlide","activePlayer","activeVideoId","foundActiveSlide","originalSlides","idx","getCollection","JaaqVideoPlayerElement","initPlayer","destroyPlayer","updateContainerStyles","attachPlayerEvents","COMPONENT_TAGS","registerJaaqComponents","customElements","define","playerElement","settings","_activeIndex"],"mappings":"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","x_google_ignoreList":[10,11]}
|