@twick/timeline 0.14.0 → 0.14.2
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 +175 -175
- package/dist/core/addOns/animation.d.ts +5 -5
- package/dist/core/addOns/frame-effect.d.ts +3 -1
- package/dist/core/addOns/text-effect.d.ts +3 -4
- package/dist/core/editor/timeline.editor.d.ts +2 -0
- package/dist/core/elements/audio.element.d.ts +4 -0
- package/dist/core/elements/video.element.d.ts +4 -1
- package/dist/index-CXhwwSX--DHE9Xex3.js +14961 -0
- package/dist/index-CXhwwSX--DHE9Xex3.js.map +1 -0
- package/dist/index.js +19993 -190
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4953 -111
- package/dist/index.mjs.map +1 -1
- package/dist/types/index.d.ts +0 -2
- package/dist/utils/timeline.utils.d.ts +1 -0
- package/package.json +41 -40
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/utils/constants.ts","../src/utils/timeline.utils.ts","../../media-utils/dist/index.mjs","../src/core/elements/base.element.ts","../src/core/elements/video.element.ts","../src/core/elements/audio.element.ts","../src/core/elements/image.element.ts","../src/core/elements/text.element.ts","../src/core/elements/caption.element.ts","../src/core/elements/icon.element.ts","../src/core/elements/circle.element.ts","../src/core/elements/rect.element.ts","../src/core/addOns/animation.ts","../src/core/addOns/frame-effect.ts","../src/core/addOns/text-effect.ts","../src/core/visitor/element-deserializer.ts","../src/core/visitor/element-serializer.ts","../src/core/visitor/element-validator.ts","../src/core/track/track.friend.ts","../src/core/track/track.ts","../src/services/data.service.ts","../src/core/visitor/element-adder.ts","../src/core/visitor/element-remover.ts","../src/core/visitor/element-updater.ts","../src/core/visitor/element-cloner.ts","../src/core/visitor/element-splitter.ts","../src/core/editor/timeline.editor.ts","../src/context/undo-redo-context.tsx","../src/utils/register-editor.ts","../src/context/timeline-context.tsx","../src/index.ts"],"sourcesContent":["export const PLAYER_STATE = {\r\n REFRESH: \"Refresh\",\r\n PLAYING: \"Playing\",\r\n PAUSED: \"Paused\",\r\n};\r\n\r\nexport const CAPTION_STYLE = {\r\n WORD_BG_HIGHLIGHT: \"highlight_bg\",\r\n WORD_BY_WORD: \"word_by_word\",\r\n WORD_BY_WORD_WITH_BG: \"word_by_word_with_bg\",\r\n};\r\n\r\nexport const CAPTION_STYLE_OPTIONS = {\r\n [CAPTION_STYLE.WORD_BG_HIGHLIGHT]: {\r\n label: \"Highlight Background\",\r\n value: CAPTION_STYLE.WORD_BG_HIGHLIGHT,\r\n },\r\n [CAPTION_STYLE.WORD_BY_WORD]: {\r\n label: \"Word by Word\",\r\n value: CAPTION_STYLE.WORD_BY_WORD,\r\n },\r\n [CAPTION_STYLE.WORD_BY_WORD_WITH_BG]: {\r\n label: \"Word with Background\",\r\n value: CAPTION_STYLE.WORD_BY_WORD_WITH_BG,\r\n },\r\n};\r\n\r\nexport const CAPTION_FONT = {\r\n size: 40,\r\n};\r\n\r\nexport const CAPTION_COLOR = {\r\n text: \"#ffffff\",\r\n highlight: \"#ff4081\",\r\n bgColor: \"#8C52FF\",\r\n};\r\n\r\nexport const WORDS_PER_PHRASE = 4;\r\n\r\nexport const TIMELINE_ACTION = {\r\n NONE: \"none\",\r\n SET_PLAYER_STATE: \"setPlayerState\",\r\n UPDATE_PLAYER_DATA: \"updatePlayerData\",\r\n ON_PLAYER_UPDATED: \"onPlayerUpdated\",\r\n};\r\n\r\nexport const TIMELINE_ELEMENT_TYPE = {\r\n VIDEO: \"video\",\r\n CAPTION: \"caption\",\r\n IMAGE: \"image\",\r\n AUDIO: \"audio\",\r\n TEXT: \"text\",\r\n RECT: \"rect\",\r\n CIRCLE: \"circle\",\r\n ICON: \"icon\",\r\n};\r\n\r\nexport const PROCESS_STATE = {\r\n IDLE: \"Idle\",\r\n PROCESSING: \"Processing\",\r\n COMPLETED: \"Completed\",\r\n FAILED: \"Failed\",\r\n}; ","import { TrackElement } from \"../core/elements/base.element\";\r\nimport { Track } from \"../core/track/track\";\r\nimport { TrackJSON } from \"../types\";\r\n\r\nexport const getDecimalNumber = (num: number, precision = 3) => {\r\n return Number(num.toFixed(precision));\r\n};\r\n\r\nexport const getTotalDuration = (tracks: TrackJSON[]) => {\r\n return (tracks || []).reduce(\r\n (maxDuration, timeline) =>\r\n Math.max(\r\n maxDuration,\r\n (timeline?.elements || []).reduce(\r\n (timelineDuration, element) => Math.max(timelineDuration, element.e),\r\n 0\r\n )\r\n ),\r\n 0\r\n );\r\n};\r\n\r\nexport const generateShortUuid = (): string => {\r\n return \"xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\r\n const r = (Math.random() * 16) | 0,\r\n v = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n};\r\n\r\nexport const getCurrentElements = (\r\n currentTime: number,\r\n tracks: Track[]\r\n): Array<Readonly<TrackElement>> => {\r\n const currentElements: Array<Readonly<TrackElement>> = [];\r\n if (tracks?.length) {\r\n for (let i = 0; i < tracks.length; i++) {\r\n if (tracks[i]) {\r\n const elements = tracks[i].getElements();\r\n for (let j = 0; j < elements.length; j++) {\r\n const element = elements[j];\r\n if ((element.getStart() <= currentTime) && element.getEnd() >= currentTime) {\r\n currentElements.push(element);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return currentElements;\r\n}; \r\n\r\n\r\nexport const canSplitElement = (element: TrackElement, currentTime: number) => {\r\n return element.getStart() <= currentTime && element.getEnd() >= currentTime;\r\n}\r\n\r\nexport const isElementId = (id: string) => id.startsWith(\"e-\");\r\nexport const isTrackId = (id: string) => id.startsWith(\"t-\");","const imageDimensionsCache = {};\nconst videoMetaCache = {};\nconst audioDurationCache = {};\n\nconst getAudioDuration = (audioSrc) => {\n if (audioDurationCache[audioSrc]) {\n return Promise.resolve(audioDurationCache[audioSrc]);\n }\n return new Promise((resolve, reject) => {\n const audio = document.createElement(\"audio\");\n audio.preload = \"metadata\";\n const isSafeUrl = /^(https?:|blob:|data:audio\\/)/i.test(audioSrc);\n if (!isSafeUrl) {\n throw new Error(\"Unsafe audio source URL\");\n }\n audio.src = audioSrc;\n audio.onloadedmetadata = () => {\n const duration = audio.duration;\n audioDurationCache[audioSrc] = duration;\n resolve(duration);\n };\n audio.onerror = () => {\n reject(new Error(\"Failed to load audio metadata\"));\n };\n });\n};\n\nconst concurrencyLimit = 5;\nlet activeCount = 0;\nconst queue = [];\nfunction runNext() {\n if (queue.length === 0 || activeCount >= concurrencyLimit) return;\n const next = queue.shift();\n if (next) {\n activeCount++;\n next();\n }\n}\nfunction limit(fn) {\n return new Promise((resolve, reject) => {\n const task = () => {\n fn().then(resolve).catch(reject).finally(() => {\n activeCount--;\n runNext();\n });\n };\n if (activeCount < concurrencyLimit) {\n activeCount++;\n task();\n } else {\n queue.push(task);\n }\n });\n}\n\nconst loadImageDimensions = (url) => {\n return new Promise((resolve, reject) => {\n if (typeof document === \"undefined\") {\n reject(new Error(\"getImageDimensions() is only available in the browser.\"));\n return;\n }\n const img = new Image();\n img.onload = () => {\n resolve({ width: img.naturalWidth, height: img.naturalHeight });\n };\n img.onerror = reject;\n img.src = url;\n });\n};\nconst getImageDimensions = (url) => {\n if (imageDimensionsCache[url]) {\n return Promise.resolve(imageDimensionsCache[url]);\n }\n return limit(() => loadImageDimensions(url)).then((dimensions) => {\n imageDimensionsCache[url] = dimensions;\n return dimensions;\n });\n};\n\nconst getVideoMeta = (videoSrc) => {\n if (videoMetaCache[videoSrc]) {\n return Promise.resolve(videoMetaCache[videoSrc]);\n }\n return new Promise((resolve, reject) => {\n const video = document.createElement(\"video\");\n video.preload = \"metadata\";\n const isSafeUrl = /^(https?:|blob:|data:video\\/)/i.test(videoSrc);\n if (!isSafeUrl) {\n reject(new Error(\"Unsafe video source URL\"));\n return;\n }\n video.src = videoSrc;\n video.onloadedmetadata = () => {\n const meta = {\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n };\n videoMetaCache[videoSrc] = meta;\n resolve(meta);\n };\n video.onerror = () => reject(new Error(\"Failed to load video metadata\"));\n });\n};\n\nconst getThumbnail = async (videoUrl, seekTime = 0.1, playbackRate = 1) => {\n return new Promise((resolve, reject) => {\n const video = document.createElement(\"video\");\n video.crossOrigin = \"anonymous\";\n video.muted = true;\n video.playsInline = true;\n video.autoplay = false;\n video.preload = \"auto\";\n video.playbackRate = playbackRate;\n video.style.position = \"absolute\";\n video.style.left = \"-9999px\";\n video.style.top = \"-9999px\";\n video.style.width = \"1px\";\n video.style.height = \"1px\";\n video.style.opacity = \"0\";\n video.style.pointerEvents = \"none\";\n video.style.zIndex = \"-1\";\n let timeoutId;\n const cleanup = () => {\n if (video.parentNode) video.remove();\n if (timeoutId) clearTimeout(timeoutId);\n };\n const handleError = () => {\n cleanup();\n reject(new Error(`Failed to load video: ${video.error?.message || \"Unknown error\"}`));\n };\n const handleSeeked = () => {\n try {\n video.pause();\n const canvas = document.createElement(\"canvas\");\n const width = video.videoWidth || 640;\n const height = video.videoHeight || 360;\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n cleanup();\n reject(new Error(\"Failed to get canvas context\"));\n return;\n }\n ctx.drawImage(video, 0, 0, width, height);\n try {\n const dataUrl = canvas.toDataURL(\"image/jpeg\", 0.8);\n cleanup();\n resolve(dataUrl);\n } catch {\n canvas.toBlob((blob) => {\n if (!blob) {\n cleanup();\n reject(new Error(\"Failed to create Blob\"));\n return;\n }\n const blobUrl = URL.createObjectURL(blob);\n cleanup();\n resolve(blobUrl);\n }, \"image/jpeg\", 0.8);\n }\n } catch (err) {\n cleanup();\n reject(new Error(`Error creating thumbnail: ${err}`));\n }\n };\n video.addEventListener(\"error\", handleError, { once: true });\n video.addEventListener(\"seeked\", handleSeeked, { once: true });\n video.addEventListener(\"loadedmetadata\", () => {\n const playPromise = video.play();\n if (playPromise !== void 0) {\n playPromise.then(() => {\n video.currentTime = seekTime;\n }).catch(() => {\n video.currentTime = seekTime;\n });\n } else {\n video.currentTime = seekTime;\n }\n }, { once: true });\n timeoutId = window.setTimeout(() => {\n cleanup();\n reject(new Error(\"Video loading timed out\"));\n }, 5e3);\n video.src = videoUrl;\n document.body.appendChild(video);\n });\n};\n\nconst getScaledDimensions = (width, height, maxWidth, maxHeight) => {\n if (width <= maxWidth && height <= maxHeight) {\n return {\n width: width % 2 === 0 ? width : width - 1,\n height: height % 2 === 0 ? height : height - 1\n };\n }\n const widthRatio = maxWidth / width;\n const heightRatio = maxHeight / height;\n const scale = Math.min(widthRatio, heightRatio);\n let scaledWidth = Math.round(width * scale);\n let scaledHeight = Math.round(height * scale);\n if (scaledWidth % 2 !== 0) {\n scaledWidth -= 1;\n }\n if (scaledHeight % 2 !== 0) {\n scaledHeight -= 1;\n }\n return {\n width: Math.min(scaledWidth, maxWidth),\n height: Math.min(scaledHeight, maxHeight)\n };\n};\nconst getObjectFitSize = (objectFit, elementSize, containerSize) => {\n const elementAspectRatio = elementSize.width / elementSize.height;\n const containerAspectRatio = containerSize.width / containerSize.height;\n switch (objectFit) {\n case \"contain\":\n if (elementAspectRatio > containerAspectRatio) {\n return {\n width: containerSize.width,\n height: containerSize.width / elementAspectRatio\n };\n } else {\n return {\n width: containerSize.height * elementAspectRatio,\n height: containerSize.height\n };\n }\n case \"cover\":\n if (elementAspectRatio > containerAspectRatio) {\n return {\n width: containerSize.height * elementAspectRatio,\n height: containerSize.height\n };\n } else {\n return {\n width: containerSize.width,\n height: containerSize.width / elementAspectRatio\n };\n }\n case \"fill\":\n return {\n width: containerSize.width,\n height: containerSize.height\n };\n default:\n return {\n width: elementSize.width,\n height: elementSize.height\n };\n }\n};\n\nconst blobUrlToFile = async (blobUrl, fileName) => {\n const response = await fetch(blobUrl);\n const blob = await response.blob();\n return new File([blob], fileName, { type: blob.type });\n};\nconst saveAsFile = (content, type, name) => {\n const blob = typeof content === \"string\" ? new Blob([content], { type }) : content;\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = name;\n a.click();\n URL.revokeObjectURL(url);\n};\nconst downloadFile = async (url, filename) => {\n try {\n const response = await fetch(url);\n const blob = await response.blob();\n const downloadUrl = window.URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = downloadUrl;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(downloadUrl);\n } catch (error) {\n console.error(\"Error downloading file:\", error);\n throw error;\n }\n};\n\nconst detectMediaTypeFromUrl = async (url) => {\n try {\n const response = await fetch(url, { method: \"HEAD\" });\n const contentType = response.headers.get(\"Content-Type\");\n if (!contentType) return null;\n if (contentType.startsWith(\"image/\")) return \"image\";\n if (contentType.startsWith(\"video/\")) return \"video\";\n if (contentType.startsWith(\"audio/\")) return \"audio\";\n return null;\n } catch (error) {\n console.error(\"Fetch failed:\", error);\n return null;\n }\n};\n\nexport { blobUrlToFile, detectMediaTypeFromUrl, downloadFile, getAudioDuration, getImageDimensions, getObjectFitSize, getScaledDimensions, getThumbnail, getVideoMeta, limit, saveAsFile };\n//# sourceMappingURL=index.mjs.map\n","import { generateShortUuid } from \"../../utils/timeline.utils\";\r\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\r\nimport { ElementAnimation } from \"../addOns/animation\";\r\nimport { Position } from \"../../types\";\r\n\r\nexport abstract class TrackElement {\r\n protected id: string;\r\n protected type: string;\r\n protected s!: number;\r\n protected e!: number;\r\n protected trackId!: string;\r\n protected name!: string;\r\n protected animation?: ElementAnimation;\r\n protected props: Record<string, any>;\r\n\r\n constructor(type: string, id?: string) {\r\n this.id = id ?? `e-${generateShortUuid()}`;\r\n this.type = type;\r\n this.props = {\r\n x: 0,\r\n y: 0\r\n };\r\n }\r\n\r\n abstract accept<T>(visitor: ElementVisitor<T>): T;\r\n\r\n getId(): string {\r\n return this.id;\r\n }\r\n\r\n getType(): string {\r\n return this.type;\r\n }\r\n\r\n getStart(): number {\r\n return this.s;\r\n }\r\n\r\n getEnd(): number {\r\n return this.e;\r\n }\r\n\r\n getDuration(): number {\r\n return this.e - this.s;\r\n }\r\n\r\n getTrackId(): string {\r\n return this.trackId;\r\n }\r\n\r\n getProps(): Record<string, any> {\r\n return this.props;\r\n }\r\n\r\n getName(): string {\r\n return this.name;\r\n }\r\n\r\n getAnimation(): ElementAnimation | undefined {\r\n return this.animation;\r\n }\r\n\r\n getPosition(): Position {\r\n return {\r\n x: this.props?.x ?? 0,\r\n y: this.props?.y ?? 0\r\n };\r\n }\r\n\r\n setId(id: string) {\r\n this.id = id;\r\n return this;\r\n }\r\n\r\n setType(type: string) {\r\n this.type = type;\r\n return this;\r\n }\r\n\r\n setStart(s: number) {\r\n this.s = Math.max(0, s);\r\n return this;\r\n }\r\n\r\n setEnd(e: number) {\r\n this.e = Math.max(this.s ?? 0, e);\r\n return this;\r\n }\r\n\r\n setTrackId(trackId: string) {\r\n this.trackId = trackId;\r\n return this;\r\n }\r\n\r\n setName(name: string) {\r\n this.name = name;\r\n return this;\r\n }\r\n\r\n setAnimation(animation?: ElementAnimation) {\r\n this.animation = animation;\r\n return this;\r\n }\r\n\r\n setPosition(position: Position) {\r\n this.props.x = position.x;\r\n this.props.y = position.y;\r\n return this;\r\n }\r\n\r\n setProps(props: Record<string, any>) {\r\n this.props = structuredClone(props);\r\n return this;\r\n }\r\n}\r\n","import { getObjectFitSize, getVideoMeta } from \"@twick/media-utils\";\r\nimport { Frame, ObjectFit, Position, Size, VideoProps } from \"../../types\";\r\nimport { TrackElement } from \"./base.element\";\r\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\r\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\r\nimport { ElementFrameEffect } from \"../addOns/frame-effect\";\r\n\r\nexport class VideoElement extends TrackElement {\r\n protected baseSize!: Size;\r\n protected mediaDuration!: number;\r\n protected parentSize: Size;\r\n protected backgroundColor!: string;\r\n protected objectFit: ObjectFit;\r\n protected frameEffects?: ElementFrameEffect[];\r\n protected frame!: Frame;\r\n protected declare props: VideoProps;\r\n\r\n constructor(src: string, parentSize: Size) {\r\n super(TIMELINE_ELEMENT_TYPE.VIDEO);\r\n this.objectFit = \"cover\";\r\n this.frameEffects = [];\r\n this.parentSize = parentSize;\r\n this.props = {\r\n src,\r\n play: true,\r\n playbackRate: 1,\r\n time: 0,\r\n mediaFilter: \"none\",\r\n volume: 1,\r\n };\r\n }\r\n\r\n getParentSize() {\r\n return this.parentSize;\r\n }\r\n\r\n getFrame() {\r\n return this.frame;\r\n }\r\n\r\n getFrameEffects() {\r\n return this.frameEffects;\r\n }\r\n\r\n getBackgroundColor() {\r\n return this.backgroundColor;\r\n }\r\n\r\n getObjectFit() {\r\n return this.objectFit;\r\n }\r\n\r\n getMediaDuration() {\r\n return this.mediaDuration;\r\n }\r\n\r\n getStartAt(): number {\r\n return this.props.time || 0;\r\n }\r\n\r\n override getPosition(): Position {\r\n return {\r\n x: this.frame.x ?? 0,\r\n y: this.frame.y ?? 0\r\n };\r\n }\r\n\r\n async updateVideoMeta(updateFrame: boolean = true) {\r\n const meta = await getVideoMeta(this.props.src);\r\n\r\n if (updateFrame) {\r\n const baseSize = getObjectFitSize(\r\n \"contain\",\r\n { width: meta.width, height: meta.height },\r\n this.parentSize\r\n );\r\n this.frame = {\r\n ...this.frame,\r\n size: [baseSize.width, baseSize.height],\r\n };\r\n }\r\n this.mediaDuration = meta.duration;\r\n }\r\n\r\n override setPosition(position: Position) {\r\n this.frame.x = position.x;\r\n this.frame.y = position.y;\r\n return this;\r\n }\r\n\r\n async setSrc(src: string) {\r\n this.props.src = src;\r\n await this.updateVideoMeta();\r\n return this;\r\n }\r\n\r\n setMediaDuration(mediaDuration: number) {\r\n this.mediaDuration = mediaDuration;\r\n return this;\r\n }\r\n\r\n setParentSize(parentSize: Size) {\r\n this.parentSize = structuredClone(parentSize);\r\n return this;\r\n }\r\n\r\n setObjectFit(objectFit: ObjectFit) {\r\n this.objectFit = objectFit;\r\n return this;\r\n }\r\n\r\n setFrame(frame: Frame) {\r\n this.frame = structuredClone(frame);\r\n return this;\r\n }\r\n\r\n setPlay(play: boolean) {\r\n this.props.play = play;\r\n return this;\r\n }\r\n\r\n setPlaybackRate(playbackRate: number) {\r\n this.props.playbackRate = playbackRate;\r\n return this;\r\n }\r\n\r\n setStartAt(time: number) {\r\n this.props.time = Math.max(0, time);\r\n return this;\r\n }\r\n\r\n setMediaFilter(mediaFilter: string) {\r\n this.props.mediaFilter = mediaFilter;\r\n return this;\r\n }\r\n\r\n setVolume(volume: number) {\r\n this.props.volume = volume;\r\n return this;\r\n }\r\n\r\n setBackgroundColor(backgroundColor: string) {\r\n this.backgroundColor = backgroundColor;\r\n return this;\r\n }\r\n\r\n override setProps(props: Omit<any, \"src\">) {\r\n this.props = {\r\n play: this.props.play,\r\n ...structuredClone(props),\r\n src: this.props.src,\r\n };\r\n return this;\r\n }\r\n\r\n setFrameEffects(frameEffects?: ElementFrameEffect[]) {\r\n this.frameEffects = frameEffects;\r\n return this;\r\n }\r\n\r\n addFrameEffect(frameEffect: ElementFrameEffect) {\r\n this.frameEffects?.push(frameEffect);\r\n return this;\r\n }\r\n\r\n accept<T>(visitor: ElementVisitor<T>): T {\r\n return visitor.visitVideoElement(this);\r\n }\r\n}\r\n","import { getAudioDuration } from \"@twick/media-utils\";\r\nimport { TrackElement } from \"./base.element\";\r\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\r\nimport { AudioProps } from \"../../types\";\r\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\r\n\r\nexport class AudioElement extends TrackElement {\r\n protected mediaDuration!: number;\r\n protected declare props: AudioProps;\r\n\r\n constructor(src: string) {\r\n super(TIMELINE_ELEMENT_TYPE.AUDIO);\r\n this.props = {\r\n src,\r\n time: 0,\r\n play: true,\r\n playbackRate: 1,\r\n volume: 1,\r\n loop: false,\r\n };\r\n }\r\n\r\n getMediaDuration() {\r\n return this.mediaDuration;\r\n }\r\n\r\n getStartAt(): number {\r\n return this.props.time || 0;\r\n }\r\n\r\n async updateAudioMeta() {\r\n this.mediaDuration = await getAudioDuration(this.props.src);\r\n }\r\n\r\n async setSrc(src: string) {\r\n this.props.src = src;\r\n await this.updateAudioMeta();\r\n return this;\r\n }\r\n\r\n setMediaDuration(mediaDuration: number) {\r\n this.mediaDuration = mediaDuration;\r\n return this;\r\n }\r\n\r\n setVolume(volume: number) {\r\n this.props.volume = volume;\r\n return this;\r\n }\r\n\r\n setLoop(loop: boolean) {\r\n this.props.loop = loop;\r\n return this;\r\n }\r\n\r\n setStartAt(time: number) {\r\n this.props.time = Math.max(0, time);\r\n return this;\r\n }\r\n\r\n setPlaybackRate(playbackRate: number) {\r\n this.props.playbackRate = playbackRate;\r\n return this;\r\n }\r\n\r\n override setProps(props: Omit<any, \"src\">) {\r\n this.props = {\r\n play: this.props.play,\r\n ...structuredClone(props),\r\n src: this.props.src,\r\n };\r\n return this;\r\n }\r\n\r\n accept<T>(visitor: ElementVisitor<T>): T {\r\n return visitor.visitAudioElement(this);\r\n }\r\n}\r\n","import { getObjectFitSize, getImageDimensions } from \"@twick/media-utils\";\r\nimport { Frame, ImageProps, ObjectFit, Position, Size } from \"../../types\";\r\nimport { TrackElement } from \"./base.element\";\r\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\r\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\r\nimport { ElementFrameEffect } from \"../addOns/frame-effect\";\r\n\r\nexport class ImageElement extends TrackElement {\r\n protected backgroundColor!: string;\r\n protected parentSize: Size;\r\n protected objectFit: ObjectFit;\r\n frameEffects?: ElementFrameEffect[];\r\n frame!: Frame;\r\n protected declare props: ImageProps;\r\n\r\n constructor(src: string, parentSize: Size) {\r\n super(TIMELINE_ELEMENT_TYPE.IMAGE);\r\n this.parentSize = parentSize;\r\n this.objectFit = \"cover\";\r\n this.frameEffects = [];\r\n this.props = {\r\n src,\r\n mediaFilter: \"none\",\r\n };\r\n this.frame = {\r\n x: 0,\r\n y: 0\r\n }\r\n }\r\n\r\n getParentSize() {\r\n return this.parentSize;\r\n }\r\n\r\n getFrame() {\r\n return this.frame;\r\n }\r\n\r\n getFrameEffects() {\r\n return this.frameEffects;\r\n } \r\n\r\n getBackgroundColor() {\r\n return this.backgroundColor;\r\n }\r\n\r\n getObjectFit() {\r\n return this.objectFit;\r\n }\r\n\r\n override getPosition(): Position {\r\n return {\r\n x: this.frame.x ?? 0,\r\n y: this.frame.y ?? 0\r\n };\r\n }\r\n\r\n async updateImageMeta(updateFrame: boolean = true) {\r\n const meta = await getImageDimensions(this.props.src);\r\n if (updateFrame) {\r\n const baseSize = getObjectFitSize(\r\n \"contain\",\r\n { width: meta.width, height: meta.height },\r\n this.parentSize\r\n );\r\n this.frame = {\r\n size: [baseSize.width, baseSize.height],\r\n ...this.frame,\r\n }\r\n }\r\n }\r\n\r\n override setPosition(position: Position) {\r\n this.frame.x = position.x;\r\n this.frame.y = position.y;\r\n return this;\r\n }\r\n\r\n async setSrc(src: string) {\r\n this.props.src = src;\r\n await this.updateImageMeta();\r\n return this;\r\n }\r\n\r\n setObjectFit(objectFit: ObjectFit) {\r\n this.objectFit = objectFit;\r\n return this;\r\n }\r\n\r\n setFrame(frame: Frame) {\r\n this.frame = structuredClone(frame);\r\n return this;\r\n }\r\n\r\n\r\n setParentSize(parentSize: Size) {\r\n this.parentSize = structuredClone(parentSize);\r\n return this;\r\n }\r\n\r\n setMediaFilter(mediaFilter: string) {\r\n this.props.mediaFilter = mediaFilter;\r\n return this;\r\n }\r\n\r\n setBackgroundColor(backgroundColor: string) {\r\n this.backgroundColor = backgroundColor;\r\n return this;\r\n }\r\n\r\n override setProps(props: Omit<any, \"src\">) {\r\n this.props = {...structuredClone(props), src: this.props.src};\r\n return this;\r\n }\r\n\r\n setFrameEffects(frameEffects? : ElementFrameEffect[]) {\r\n this.frameEffects = frameEffects;\r\n return this;\r\n }\r\n\r\n addFrameEffect(frameEffect: ElementFrameEffect) {\r\n this.frameEffects?.push(frameEffect);\r\n return this;\r\n }\r\n\r\n accept<T>(visitor: ElementVisitor<T>): T {\r\n return visitor.visitImageElement(this);\r\n }\r\n\r\n}\r\n","import { TextAlign, TextProps } from \"../../types\";\r\nimport { TrackElement } from \"./base.element\";\r\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\r\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\r\nimport { ElementTextEffect } from \"../addOns/text-effect\";\r\n\r\nexport class TextElement extends TrackElement {\r\n protected textEffect?: ElementTextEffect;\r\n protected declare props: TextProps;\r\n\r\n constructor(text: string) {\r\n super(TIMELINE_ELEMENT_TYPE.TEXT);\r\n this.props = {\r\n text,\r\n fill: \"#888888\" //default-grey\r\n };\r\n }\r\n\r\n getTextEffect() {\r\n return this.textEffect;\r\n }\r\n\r\n getText(): string {\r\n return this.props.text;\r\n }\r\n\r\n getStrokeColor() {\r\n return this.props.stroke;\r\n }\r\n\r\n getLineWidth() {\r\n return this.props.lineWidth;\r\n }\r\n\r\n setText(text: string) {\r\n this.props.text = text;\r\n return this;\r\n }\r\n\r\n setFill(fill: string) {\r\n this.props.fill = fill;\r\n return this;\r\n }\r\n\r\n setRotation(rotation: number) {\r\n this.props.rotation = rotation;\r\n return this;\r\n }\r\n\r\n setFontSize(fontSize: number) {\r\n this.props.fontSize = fontSize;\r\n return this;\r\n }\r\n\r\n setFontFamily(fontFamily: string) {\r\n this.props.fontFamily = fontFamily;\r\n return this;\r\n }\r\n\r\n setFontWeight(fontWeight: number) {\r\n this.props.fontWeight = fontWeight;\r\n return this;\r\n }\r\n\r\n setFontStyle(fontStyle: \"normal\" | \"italic\") {\r\n this.props.fontStyle = fontStyle;\r\n return this;\r\n }\r\n\r\n setTextEffect(textEffect?: ElementTextEffect) {\r\n this.textEffect = textEffect;\r\n return this;\r\n }\r\n\r\n setTextAlign(textAlign: TextAlign) {\r\n this.props.textAlign = textAlign;\r\n return this;\r\n }\r\n\r\n setStrokeColor(stroke: string) {\r\n this.props.stroke = stroke;\r\n return this;\r\n }\r\n\r\n setLineWidth(lineWidth: number) {\r\n this.props.lineWidth = lineWidth;\r\n return this;\r\n }\r\n\r\n accept<T>(visitor: ElementVisitor<T>): T {\r\n return visitor.visitTextElement(this);\r\n }\r\n}\r\n","import { TrackElement } from \"./base.element\";\r\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\r\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\r\n\r\nexport class CaptionElement extends TrackElement {\r\n protected t: string;\r\n\r\n constructor(t: string, start: number, end: number) {\r\n super(TIMELINE_ELEMENT_TYPE.CAPTION);\r\n this.t = t;\r\n this.s = start;\r\n this.e = end;\r\n }\r\n\r\n getText(): string {\r\n return this.t;\r\n }\r\n\r\n setText(t: string) {\r\n this.t = t;\r\n return this;\r\n }\r\n\r\n accept<T>(visitor: ElementVisitor<T>): T {\r\n return visitor.visitCaptionElement(this);\r\n }\r\n\r\n}\r\n","import { TrackElement } from \"./base.element\";\r\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\r\nimport { IconProps, Size } from \"../../types\";\r\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\r\n\r\nexport class IconElement extends TrackElement {\r\n protected declare props: IconProps;\r\n constructor(src: string, size: Size) {\r\n super(TIMELINE_ELEMENT_TYPE.ICON);\r\n this.props = {\r\n src,\r\n size,\r\n };\r\n }\r\n\r\n accept<T>(visitor: ElementVisitor<T>): T {\r\n return visitor.visitIconElement(this);\r\n }\r\n}\r\n","import { TrackElement } from \"./base.element\";\r\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\r\nimport { CircleProps } from \"../../types\";\r\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\r\n\r\nexport class CircleElement extends TrackElement {\r\n protected declare props: CircleProps;\r\n constructor(fill: string, radius: number) {\r\n super(TIMELINE_ELEMENT_TYPE.CIRCLE);\r\n this.props = {\r\n radius,\r\n fill,\r\n };\r\n }\r\n\r\n getFill(): string {\r\n return this.props.fill;\r\n }\r\n\r\n getRadius(): number {\r\n return this.props.radius;\r\n }\r\n\r\n setFill(fill: string) {\r\n this.props.fill = fill;\r\n return this;\r\n }\r\n\r\n setRadius(radius: number) {\r\n this.props.radius = radius;\r\n return this;\r\n }\r\n \r\n\r\n accept<T>(visitor: ElementVisitor<T>): T {\r\n return visitor.visitCircleElement(this);\r\n }\r\n}\r\n","import { RectProps, Size } from \"../../types\";\r\nimport { TrackElement } from \"./base.element\";\r\nimport { ElementVisitor } from \"../visitor/element-visitor\";\r\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\r\n\r\nexport class RectElement extends TrackElement{\r\n protected declare props: RectProps;\r\n\r\n constructor(fill:string, size: Size) {\r\n super(TIMELINE_ELEMENT_TYPE.RECT); \r\n this.props = {\r\n width: size.width,\r\n height: size.height,\r\n fill,\r\n };\r\n }\r\n\r\n setFill(fill: string) { \r\n this.props.fill = fill;\r\n return this;\r\n }\r\n\r\n setSize(size: Size) {\r\n this.props.width = size.width;\r\n this.props.height = size.height;\r\n return this;\r\n }\r\n\r\n accept<T>(visitor: ElementVisitor<T>): T {\r\n return visitor.visitRectElement(this);\r\n }\r\n}","import { Animation } from \"../../types\";\r\n\r\nexport class ElementAnimation {\r\n private name: string;\r\n private interval?: number;\r\n private intensity?: number;\r\n private animate?: \"enter\" | \"exit\" | \"both\";\r\n private mode?: \"in\" | \"out\";\r\n private direction?: \"up\" | \"down\" | \"left\" | \"right\" | \"center\";\r\n\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n\r\n getName() {\r\n return this.name;\r\n }\r\n\r\n getInterval() {\r\n return this.interval;\r\n } \r\n\r\n getIntensity() {\r\n return this.intensity;\r\n }\r\n\r\n getAnimate() {\r\n return this.animate;\r\n }\r\n\r\n getMode() {\r\n return this.mode;\r\n }\r\n\r\n getDirection() {\r\n return this.direction;\r\n }\r\n\r\n setInterval(interval?: number) {\r\n this.interval = interval;\r\n }\r\n\r\n setIntensity(intensity?: number) {\r\n this.intensity = intensity;\r\n }\r\n\r\n setAnimate(animate?: \"enter\" | \"exit\" | \"both\") {\r\n this.animate = animate;\r\n }\r\n\r\n setMode(mode?: \"in\" | \"out\") {\r\n this.mode = mode;\r\n }\r\n\r\n setDirection(direction?: \"up\" | \"down\" | \"left\" | \"right\" | \"center\") {\r\n this.direction = direction;\r\n }\r\n\r\n toJSON(): Animation {\r\n return {\r\n name: this.name,\r\n interval: this.interval,\r\n intensity: this.intensity,\r\n animate: this.animate,\r\n mode: this.mode,\r\n direction: this.direction,\r\n };\r\n }\r\n\r\n static fromJSON(json: Animation) {\r\n const animation = new ElementAnimation(json.name);\r\n animation.setInterval(json.interval);\r\n animation.setIntensity(json.intensity);\r\n animation.setAnimate(json.animate);\r\n animation.setMode(json.mode);\r\n animation.setDirection(json.direction);\r\n return animation;\r\n };\r\n}\r\n\r\n\r\n","import { FrameEffect, FrameEffectProps } from \"../../types\";\r\n\r\nexport class ElementFrameEffect {\r\n private s: number;\r\n private e: number;\r\n private props!: FrameEffectProps;\r\n constructor(start: number, end: number) {\r\n this.s = start;\r\n this.e = end;\r\n }\r\n\r\n setProps(props: FrameEffectProps) {\r\n this.props = props;\r\n }\r\n\r\n getProps() {\r\n return this.props;\r\n }\r\n\r\n getStart() {\r\n return this.s;\r\n }\r\n\r\n getEnd() {\r\n return this.e;\r\n }\r\n\r\n toJSON(): FrameEffect {\r\n return {\r\n s: this.s,\r\n e: this.e,\r\n props: this.props,\r\n };\r\n }\r\n \r\n static fromJSON(json: FrameEffect) {\r\n const effect = new ElementFrameEffect(json.s, json.e);\r\n effect.setProps(json.props);\r\n return effect;\r\n }\r\n}\r\n","import { TextEffect } from \"../../types\";\r\n\r\nexport class ElementTextEffect {\r\n private name: string;\r\n private duration?: number;\r\n private delay?: number;\r\n private bufferTime?: number;\r\n\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n\r\n getName() {\r\n return this.name;\r\n }\r\n\r\n getDuration() {\r\n return this.duration;\r\n } \r\n\r\n getDelay() {\r\n return this.delay;\r\n }\r\n\r\n getBufferTime() {\r\n return this.bufferTime;\r\n }\r\n\r\n setName(name: string) {\r\n this.name = name;\r\n }\r\n\r\n setDuration(duration?: number) {\r\n this.duration = duration;\r\n }\r\n\r\n setDelay(delay?: number) {\r\n this.delay = delay;\r\n }\r\n\r\n setBufferTime(bufferTime?: number) {\r\n this.bufferTime = bufferTime;\r\n }\r\n\r\n toJSON(): TextEffect {\r\n return {\r\n name: this.name,\r\n delay: this.delay,\r\n duration: this.duration,\r\n bufferTime: this.bufferTime,\r\n };\r\n }\r\n\r\n static fromJSON(json: TextEffect) {\r\n const effect = new ElementTextEffect(json.name);\r\n effect.setDelay(json.delay);\r\n effect.setDuration(json.duration);\r\n effect.setBufferTime(json.bufferTime);\r\n return effect;\r\n };\r\n}\r\n\r\n\r\n","import { ElementJSON } from \"../../types\";\r\nimport { VideoElement } from \"../elements/video.element\";\r\nimport { AudioElement } from \"../elements/audio.element\";\r\nimport { ImageElement } from \"../elements/image.element\";\r\nimport { TextElement } from \"../elements/text.element\";\r\nimport { CaptionElement } from \"../elements/caption.element\";\r\nimport { IconElement } from \"../elements/icon.element\";\r\nimport { CircleElement } from \"../elements/circle.element\";\r\nimport { RectElement } from \"../elements/rect.element\";\r\nimport { TrackElement } from \"../elements/base.element\";\r\nimport { ElementAnimation } from \"../addOns/animation\";\r\nimport { ElementFrameEffect } from \"../addOns/frame-effect\";\r\nimport { ElementTextEffect } from \"../addOns/text-effect\";\r\n\r\nexport class ElementDeserializer {\r\n private static deserializeBaseElement(element: TrackElement, json: ElementJSON): void {\r\n if (json.id) element.setId(json.id);\r\n if (json.trackId) element.setTrackId(json.trackId);\r\n if (json.s !== undefined) element.setStart(json.s);\r\n if (json.e !== undefined) element.setEnd(json.e);\r\n if (json.props) element.setProps(json.props);\r\n if (json.animation) element.setAnimation(ElementAnimation.fromJSON(json.animation));\r\n }\r\n\r\n static deserializeVideoElement(json: ElementJSON): VideoElement {\r\n const parentSize = json.frame && json.frame.size \r\n ? { width: json.frame.size[0], height: json.frame.size[1] } \r\n : { width: 0, height: 0 };\r\n \r\n const videoElement = new VideoElement(json.props?.src || \"\", parentSize);\r\n ElementDeserializer.deserializeBaseElement(videoElement, json);\r\n \r\n if (json.mediaDuration !== undefined) videoElement.setMediaDuration(json.mediaDuration);\r\n if (json.objectFit) videoElement.setObjectFit(json.objectFit);\r\n if (json.frame) videoElement.setFrame(json.frame);\r\n if (json.frameEffects) videoElement.setFrameEffects(json.frameEffects.map((frameEffect) => ElementFrameEffect.fromJSON(frameEffect)));\r\n if (json.backgroundColor) videoElement.setBackgroundColor(json.backgroundColor);\r\n \r\n return videoElement;\r\n }\r\n\r\n static deserializeAudioElement(json: ElementJSON): AudioElement {\r\n const audioElement = new AudioElement(json.props?.src || \"\");\r\n ElementDeserializer.deserializeBaseElement(audioElement, json);\r\n \r\n if (json.mediaDuration !== undefined) audioElement.setMediaDuration(json.mediaDuration);\r\n \r\n return audioElement;\r\n }\r\n\r\n static deserializeImageElement(json: ElementJSON): ImageElement {\r\n const parentSize = json.frame && json.frame.size \r\n ? { width: json.frame.size[0], height: json.frame.size[1] } \r\n : { width: 0, height: 0 };\r\n \r\n const imageElement = new ImageElement(json.props?.src || \"\", parentSize);\r\n ElementDeserializer.deserializeBaseElement(imageElement, json);\r\n \r\n if (json.objectFit) imageElement.setObjectFit(json.objectFit);\r\n if (json.frame) imageElement.setFrame(json.frame);\r\n if (json.frameEffects) imageElement.setFrameEffects(json.frameEffects.map((frameEffect) => ElementFrameEffect.fromJSON(frameEffect)));\r\n if (json.backgroundColor) imageElement.setBackgroundColor(json.backgroundColor);\r\n \r\n return imageElement;\r\n }\r\n\r\n static deserializeTextElement(json: ElementJSON): TextElement {\r\n const textElement = new TextElement(json.props?.text || \"\");\r\n ElementDeserializer.deserializeBaseElement(textElement, json);\r\n \r\n if (json.textEffect) textElement.setTextEffect(ElementTextEffect.fromJSON(json.textEffect));\r\n \r\n return textElement;\r\n }\r\n\r\n static deserializeCaptionElement(json: ElementJSON): CaptionElement {\r\n const captionElement = new CaptionElement(\r\n json.t || \"\",\r\n json.s || 0,\r\n json.e || 0\r\n );\r\n ElementDeserializer.deserializeBaseElement(captionElement, json);\r\n \r\n return captionElement;\r\n }\r\n\r\n static deserializeIconElement(json: ElementJSON): IconElement {\r\n const size = json.props?.size \r\n ? { width: json.props.size[0], height: json.props.size[1] }\r\n : { width: 0, height: 0 };\r\n \r\n const iconElement = new IconElement(\r\n json.props?.src || \"\",\r\n size\r\n );\r\n ElementDeserializer.deserializeBaseElement(iconElement, json);\r\n \r\n return iconElement;\r\n }\r\n\r\n static deserializeCircleElement(json: ElementJSON): CircleElement {\r\n const circleElement = new CircleElement(\r\n json.props?.fill || \"\",\r\n json.props?.radius || 0\r\n );\r\n ElementDeserializer.deserializeBaseElement(circleElement, json);\r\n \r\n return circleElement;\r\n }\r\n\r\n static deserializeRectElement(json: ElementJSON): RectElement {\r\n const rectElement = new RectElement(\r\n json.props?.fill || \"\",\r\n { \r\n width: json.props?.width || 0, \r\n height: json.props?.height || 0 \r\n }\r\n );\r\n ElementDeserializer.deserializeBaseElement(rectElement, json);\r\n \r\n return rectElement;\r\n }\r\n\r\n static fromJSON(json: ElementJSON): TrackElement | null{\r\n try {\r\n switch (json.type) {\r\n case \"video\":\r\n return ElementDeserializer.deserializeVideoElement(json);\r\n case \"audio\":\r\n return ElementDeserializer.deserializeAudioElement(json);\r\n case \"image\":\r\n return ElementDeserializer.deserializeImageElement(json);\r\n case \"text\":\r\n return ElementDeserializer.deserializeTextElement(json);\r\n case \"caption\":\r\n return ElementDeserializer.deserializeCaptionElement(json);\r\n case \"icon\":\r\n return ElementDeserializer.deserializeIconElement(json);\r\n case \"circle\":\r\n return ElementDeserializer.deserializeCircleElement(json);\r\n case \"rect\":\r\n return ElementDeserializer.deserializeRectElement(json);\r\n default:\r\n throw new Error(`Unknown element type: ${json.type}`);\r\n }\r\n } catch(error) {\r\n console.error(\"Error deserializing element:\", error);\r\n return null;\r\n }\r\n }\r\n}\r\n","import { ElementJSON } from \"../../types\";\r\nimport { ElementVisitor } from \"./element-visitor\";\r\nimport { VideoElement } from \"../elements/video.element\";\r\nimport { AudioElement } from \"../elements/audio.element\";\r\nimport { ImageElement } from \"../elements/image.element\";\r\nimport { TextElement } from \"../elements/text.element\";\r\nimport { CaptionElement } from \"../elements/caption.element\";\r\nimport { RectElement } from \"../elements/rect.element\";\r\nimport { CircleElement } from \"../elements/circle.element\";\r\nimport { IconElement } from \"../elements/icon.element\";\r\nimport { TrackElement } from \"../elements/base.element\";\r\n\r\nexport class ElementSerializer implements ElementVisitor<ElementJSON> {\r\n serializeElement(element: TrackElement): ElementJSON {\r\n return {\r\n id: element.getId(),\r\n trackId: element.getTrackId(),\r\n type: element.getType(),\r\n name: element.getName(),\r\n s: element.getStart(),\r\n e: element.getEnd(),\r\n props: structuredClone(element.getProps()),\r\n animation: element.getAnimation()?.toJSON(),\r\n };\r\n }\r\n visitVideoElement(element: VideoElement): ElementJSON {\r\n return {\r\n ...this.serializeElement(element),\r\n frame: structuredClone(element.getFrame()),\r\n frameEffects: element.getFrameEffects()?.map((frameEffect) => frameEffect.toJSON()),\r\n backgroundColor: element.getBackgroundColor(),\r\n objectFit: element.getObjectFit(),\r\n mediaDuration: element.getMediaDuration(),\r\n };\r\n }\r\n\r\n visitAudioElement(element: AudioElement): ElementJSON {\r\n return {\r\n ...this.serializeElement(element),\r\n mediaDuration: element.getMediaDuration(),\r\n };\r\n }\r\n\r\n visitImageElement(element: ImageElement): ElementJSON {\r\n return {\r\n ...this.serializeElement(element),\r\n frame: structuredClone(element.getFrame()),\r\n frameEffects: element.getFrameEffects()?.map((frameEffect) => frameEffect.toJSON()),\r\n backgroundColor: element.getBackgroundColor(),\r\n objectFit: element.getObjectFit(),\r\n };\r\n }\r\n\r\n visitTextElement(element: TextElement): ElementJSON {\r\n return {\r\n ...this.serializeElement(element),\r\n textEffect: element.getTextEffect()?.toJSON(),\r\n };\r\n }\r\n\r\n visitCaptionElement(element: CaptionElement): ElementJSON {\r\n return {\r\n ...this.serializeElement(element),\r\n t: structuredClone(element.getText()),\r\n };\r\n }\r\n\r\n visitIconElement(element: IconElement): ElementJSON {\r\n return {\r\n ...this.serializeElement(element),\r\n };\r\n }\r\n\r\n visitCircleElement(element: CircleElement): ElementJSON {\r\n return {\r\n ...this.serializeElement(element),\r\n };\r\n }\r\n\r\n visitRectElement(element: RectElement): ElementJSON {\r\n return {\r\n ...this.serializeElement(element),\r\n };\r\n }\r\n}\r\n","import { ElementVisitor } from \"./element-visitor\";\r\nimport { VideoElement } from \"../elements/video.element\";\r\nimport { AudioElement } from \"../elements/audio.element\";\r\nimport { ImageElement } from \"../elements/image.element\";\r\nimport { TextElement } from \"../elements/text.element\";\r\nimport { CaptionElement } from \"../elements/caption.element\";\r\nimport { IconElement } from \"../elements/icon.element\";\r\nimport { CircleElement } from \"../elements/circle.element\";\r\nimport { RectElement } from \"../elements/rect.element\";\r\n\r\nexport class ValidationError extends Error {\r\n constructor(\r\n message: string,\r\n public errors: string[],\r\n public warnings: string[] = []\r\n ) {\r\n super(message);\r\n this.name = 'ValidationError';\r\n }\r\n}\r\n\r\nexport class ElementValidator implements ElementVisitor<boolean> {\r\n private validateBasicProperties(element: any): { errors: string[]; warnings: string[] } {\r\n const errors: string[] = [];\r\n const warnings: string[] = [];\r\n\r\n // Check required basic properties\r\n if (!element.getId()) {\r\n errors.push(\"Element must have an ID\");\r\n }\r\n\r\n if (!element.getType()) {\r\n errors.push(\"Element must have a type\");\r\n }\r\n\r\n if (element.getStart() === undefined || element.getStart() === null) {\r\n errors.push(\"Element must have a start time (s)\");\r\n }\r\n\r\n if (element.getEnd() === undefined || element.getEnd() === null) {\r\n errors.push(\"Element must have an end time (e)\");\r\n }\r\n\r\n if (element.getStart() !== undefined && element.getEnd() !== undefined) {\r\n if (element.getStart() < 0) {\r\n errors.push(\"Start time cannot be negative\");\r\n }\r\n \r\n if (element.getEnd() <= element.getStart()) {\r\n errors.push(\"End time must be greater than start time\");\r\n }\r\n }\r\n\r\n if (!element.getName()) {\r\n warnings.push(\"Element should have a name for better identification\");\r\n }\r\n\r\n if (!element.getTrackId()) {\r\n warnings.push(\"Element should have a track Id\");\r\n }\r\n\r\n return { errors, warnings };\r\n }\r\n\r\n private validateTextElement(element: TextElement): { errors: string[]; warnings: string[] } {\r\n const basicValidation = this.validateBasicProperties(element);\r\n const errors = [...basicValidation.errors];\r\n const warnings = [...basicValidation.warnings];\r\n\r\n // Check text-specific properties\r\n const props = element.getProps();\r\n if (!props?.text) {\r\n errors.push(\"Text element must have text content\");\r\n }\r\n\r\n if (props?.fontSize !== undefined && props.fontSize <= 0) {\r\n errors.push(\"Font size must be greater than 0\");\r\n }\r\n\r\n if (props?.fontWeight !== undefined && props.fontWeight < 0) {\r\n errors.push(\"Font weight cannot be negative\");\r\n }\r\n\r\n return { errors, warnings };\r\n }\r\n\r\n private validateVideoElement(element: VideoElement): { errors: string[]; warnings: string[] } {\r\n const basicValidation = this.validateBasicProperties(element);\r\n const errors = [...basicValidation.errors];\r\n const warnings = [...basicValidation.warnings];\r\n\r\n // Check video-specific properties\r\n const props = element.getProps();\r\n if (!props?.src) {\r\n errors.push(\"Video element must have a source URL\");\r\n }\r\n\r\n if (props?.volume !== undefined && (props.volume < 0 || props.volume > 1)) {\r\n errors.push(\"Volume must be between 0 and 1\");\r\n }\r\n\r\n if (props?.playbackRate !== undefined && props.playbackRate <= 0) {\r\n errors.push(\"Playback rate must be greater than 0\");\r\n }\r\n\r\n // Note: frame property is protected, so we can't validate it directly\r\n // This would need to be validated through a public method if needed\r\n\r\n return { errors, warnings };\r\n }\r\n\r\n private validateAudioElement(element: AudioElement): { errors: string[]; warnings: string[] } {\r\n const basicValidation = this.validateBasicProperties(element);\r\n const errors = [...basicValidation.errors];\r\n const warnings = [...basicValidation.warnings];\r\n\r\n // Check audio-specific properties\r\n const props = element.getProps();\r\n if (!props?.src) {\r\n errors.push(\"Audio element must have a source URL\");\r\n }\r\n\r\n if (props?.volume !== undefined && (props.volume < 0 || props.volume > 1)) {\r\n errors.push(\"Volume must be between 0 and 1\");\r\n }\r\n\r\n if (props?.playbackRate !== undefined && props.playbackRate <= 0) {\r\n errors.push(\"Playback rate must be greater than 0\");\r\n }\r\n\r\n return { errors, warnings };\r\n }\r\n\r\n private validateImageElement(element: ImageElement): { errors: string[]; warnings: string[] } {\r\n const basicValidation = this.validateBasicProperties(element);\r\n const errors = [...basicValidation.errors];\r\n const warnings = [...basicValidation.warnings];\r\n\r\n // Check image-specific properties\r\n const props = element.getProps();\r\n if (!props?.src) {\r\n errors.push(\"Image element must have a source URL\");\r\n }\r\n\r\n // Note: frame property is protected, so we can't validate it directly\r\n // This would need to be validated through a public method if needed\r\n\r\n return { errors, warnings };\r\n }\r\n\r\n private validateCaptionElement(element: CaptionElement): { errors: string[]; warnings: string[] } {\r\n const basicValidation = this.validateBasicProperties(element);\r\n const errors = [...basicValidation.errors];\r\n const warnings = [...basicValidation.warnings];\r\n\r\n // Check caption-specific properties\r\n const props = element.getProps();\r\n if (!props?.text) {\r\n errors.push(\"Caption element must have text content\");\r\n }\r\n\r\n return { errors, warnings };\r\n }\r\n\r\n private validateIconElement(element: IconElement): { errors: string[]; warnings: string[] } {\r\n const basicValidation = this.validateBasicProperties(element);\r\n const errors = [...basicValidation.errors];\r\n const warnings = [...basicValidation.warnings];\r\n\r\n // Check icon-specific properties\r\n const props = element.getProps();\r\n if (!props?.icon) {\r\n errors.push(\"Icon element must have an icon name\");\r\n }\r\n\r\n // Note: frame property is protected, so we can't validate it directly\r\n // This would need to be validated through a public method if needed\r\n\r\n return { errors, warnings };\r\n }\r\n\r\n private validateCircleElement(element: CircleElement): { errors: string[]; warnings: string[] } {\r\n const basicValidation = this.validateBasicProperties(element);\r\n const errors = [...basicValidation.errors];\r\n const warnings = [...basicValidation.warnings];\r\n\r\n // Check circle-specific properties\r\n const props = element.getProps();\r\n if (props?.radius !== undefined && props.radius <= 0) {\r\n errors.push(\"Circle radius must be greater than 0\");\r\n }\r\n\r\n // Note: frame property is protected, so we can't validate it directly\r\n // This would need to be validated through a public method if needed\r\n\r\n return { errors, warnings };\r\n }\r\n\r\n private validateRectElement(element: RectElement): { errors: string[]; warnings: string[] } {\r\n const basicValidation = this.validateBasicProperties(element);\r\n const errors = [...basicValidation.errors];\r\n const warnings = [...basicValidation.warnings];\r\n\r\n // Check rectangle-specific properties\r\n const props = element.getProps();\r\n if (props?.width !== undefined && props.width <= 0) {\r\n errors.push(\"Rectangle width must be greater than 0\");\r\n }\r\n\r\n if (props?.height !== undefined && props.height <= 0) {\r\n errors.push(\"Rectangle height must be greater than 0\");\r\n }\r\n\r\n // Note: frame property is protected, so we can't validate it directly\r\n // This would need to be validated through a public method if needed\r\n\r\n return { errors, warnings };\r\n }\r\n\r\n visitVideoElement(element: VideoElement): boolean {\r\n const validation = this.validateVideoElement(element);\r\n \r\n if (validation.errors.length > 0) {\r\n throw new ValidationError(\r\n `Video element validation failed: ${validation.errors.join(', ')}`,\r\n validation.errors,\r\n validation.warnings\r\n );\r\n }\r\n \r\n return true;\r\n }\r\n\r\n visitAudioElement(element: AudioElement): boolean {\r\n const validation = this.validateAudioElement(element);\r\n \r\n if (validation.errors.length > 0) {\r\n throw new ValidationError(\r\n `Audio element validation failed: ${validation.errors.join(', ')}`,\r\n validation.errors,\r\n validation.warnings\r\n );\r\n }\r\n \r\n return true;\r\n }\r\n\r\n visitImageElement(element: ImageElement): boolean {\r\n const validation = this.validateImageElement(element);\r\n \r\n if (validation.errors.length > 0) {\r\n throw new ValidationError(\r\n `Image element validation failed: ${validation.errors.join(', ')}`,\r\n validation.errors,\r\n validation.warnings\r\n );\r\n }\r\n \r\n return true;\r\n }\r\n\r\n visitTextElement(element: TextElement): boolean {\r\n const validation = this.validateTextElement(element);\r\n \r\n if (validation.errors.length > 0) {\r\n throw new ValidationError(\r\n `Text element validation failed: ${validation.errors.join(', ')}`,\r\n validation.errors,\r\n validation.warnings\r\n );\r\n }\r\n \r\n return true;\r\n }\r\n\r\n visitCaptionElement(element: CaptionElement): boolean {\r\n const validation = this.validateCaptionElement(element);\r\n \r\n if (validation.errors.length > 0) {\r\n throw new ValidationError(\r\n `Caption element validation failed: ${validation.errors.join(', ')}`,\r\n validation.errors,\r\n validation.warnings\r\n );\r\n }\r\n \r\n return true;\r\n }\r\n\r\n visitIconElement(element: IconElement): boolean {\r\n const validation = this.validateIconElement(element);\r\n \r\n if (validation.errors.length > 0) {\r\n throw new ValidationError(\r\n `Icon element validation failed: ${validation.errors.join(', ')}`,\r\n validation.errors,\r\n validation.warnings\r\n );\r\n }\r\n \r\n return true;\r\n }\r\n\r\n visitCircleElement(element: CircleElement): boolean {\r\n const validation = this.validateCircleElement(element);\r\n \r\n if (validation.errors.length > 0) {\r\n throw new ValidationError(\r\n `Circle element validation failed: ${validation.errors.join(', ')}`,\r\n validation.errors,\r\n validation.warnings\r\n );\r\n }\r\n \r\n return true;\r\n }\r\n\r\n visitRectElement(element: RectElement): boolean {\r\n const validation = this.validateRectElement(element);\r\n \r\n if (validation.errors.length > 0) {\r\n throw new ValidationError(\r\n `Rectangle element validation failed: ${validation.errors.join(', ')}`,\r\n validation.errors,\r\n validation.warnings\r\n );\r\n }\r\n \r\n return true;\r\n }\r\n} ","import { TrackElement } from \"../elements/base.element\";\r\nimport { Track } from \"./track\";\r\n\r\n/**\r\n * Friend class that provides explicit access to Track's protected methods\r\n * This implements the Friend Class Pattern for better encapsulation control\r\n */\r\nexport class TrackFriend {\r\n constructor(private track: Track) {}\r\n \r\n /**\r\n * Add an element to the track with validation\r\n * @param element The element to add\r\n * @param skipValidation If true, skips validation (use with caution)\r\n * @returns true if element was added successfully, throws ValidationError if validation fails\r\n */\r\n addElement(\r\n element: TrackElement,\r\n skipValidation: boolean = false\r\n ): boolean {\r\n // Use the public friend method that delegates to protected method\r\n return this.track.addElementViaFriend(element, skipValidation);\r\n }\r\n \r\n /**\r\n * Remove an element from the track\r\n * @param element The element to remove\r\n */\r\n removeElement(element: TrackElement): void {\r\n // Use the public friend method that delegates to protected method\r\n this.track.removeElementViaFriend(element);\r\n }\r\n \r\n /**\r\n * Update an element in the track with validation\r\n * @param element The element to update\r\n * @returns true if element was updated successfully, throws ValidationError if validation fails\r\n */\r\n updateElement(element: TrackElement): boolean {\r\n // Use the public friend method that delegates to protected method\r\n return this.track.updateElementViaFriend(element);\r\n }\r\n \r\n /**\r\n * Get the track instance (for advanced operations)\r\n * @returns The track instance\r\n */\r\n getTrack(): Track {\r\n return this.track;\r\n }\r\n }","import { ElementJSON, TrackJSON } from \"../../types\";\r\nimport { generateShortUuid } from \"../../utils/timeline.utils\";\r\nimport { TrackElement } from \"../elements/base.element\";\r\nimport { ElementDeserializer } from \"../visitor/element-deserializer\";\r\nimport { ElementSerializer } from \"../visitor/element-serializer\";\r\nimport {\r\n ElementValidator,\r\n ValidationError,\r\n} from \"../visitor/element-validator\";\r\nimport { TrackFriend } from \"./track.friend\";\r\n\r\nexport class Track {\r\n private id: string;\r\n private name: string;\r\n private type: string;\r\n private elements: TrackElement[];\r\n private validator: ElementValidator;\r\n\r\n constructor(name: string, id?: string) {\r\n this.name = name;\r\n this.id = id ?? `t-${generateShortUuid}`;\r\n this.type = \"element\";\r\n this.elements = [];\r\n this.validator = new ElementValidator();\r\n }\r\n\r\n /**\r\n * Create a friend instance for explicit access to protected methods\r\n * This implements the Friend Class Pattern\r\n * @returns TrackFriend instance\r\n */\r\n createFriend(): TrackFriend {\r\n return new TrackFriend(this);\r\n }\r\n\r\n /**\r\n * Friend method to add element (called by TrackFriend)\r\n * @param element The element to add\r\n * @param skipValidation If true, skips validation\r\n * @returns true if element was added successfully\r\n */\r\n addElementViaFriend(\r\n element: TrackElement,\r\n skipValidation: boolean = false\r\n ): boolean {\r\n return this.addElement(element, skipValidation);\r\n }\r\n\r\n /**\r\n * Friend method to remove element (called by TrackFriend)\r\n * @param element The element to remove\r\n */\r\n removeElementViaFriend(element: TrackElement): void {\r\n this.removeElement(element);\r\n }\r\n\r\n /**\r\n * Friend method to update element (called by TrackFriend)\r\n * @param element The element to update\r\n * @returns true if element was updated successfully\r\n */\r\n updateElementViaFriend(element: TrackElement): boolean {\r\n return this.updateElement(element);\r\n }\r\n\r\n getId(): string {\r\n return this.id;\r\n }\r\n\r\n getName(): string {\r\n return this.name;\r\n }\r\n\r\n getType(): string {\r\n return this.type;\r\n }\r\n\r\n getElements(): ReadonlyArray<TrackElement> {\r\n return [...this.elements];\r\n }\r\n\r\n /**\r\n * Validates an element\r\n * @param element The element to validate\r\n * @returns true if valid, throws ValidationError if invalid\r\n */\r\n validateElement(element: TrackElement): boolean {\r\n return element.accept(this.validator);\r\n }\r\n\r\n getTrackDuration(): number {\r\n return this.elements?.length\r\n ? this.elements[this.elements.length - 1].getEnd()\r\n : 0;\r\n }\r\n\r\n /**\r\n * Adds an element to the track with validation\r\n * @param element The element to add\r\n * @param skipValidation If true, skips validation (use with caution)\r\n * @returns true if element was added successfully, throws ValidationError if validation fails\r\n */\r\n protected addElement(\r\n element: TrackElement,\r\n skipValidation: boolean = false\r\n ): boolean {\r\n element.setTrackId(this.id);\r\n if (skipValidation) {\r\n this.elements.push(element);\r\n return true;\r\n }\r\n\r\n try {\r\n const isValid = this.validateElement(element);\r\n if (isValid) {\r\n this.elements.push(element);\r\n return true;\r\n }\r\n } catch (error) {\r\n if (error instanceof ValidationError) {\r\n throw error;\r\n }\r\n throw error;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n protected removeElement(element: TrackElement): void {\r\n const index = this.elements.findIndex((e) => e.getId() === element.getId());\r\n if (index !== -1) {\r\n this.elements.splice(index, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Updates an element in the track with validation\r\n * @param element The element to update\r\n * @returns true if element was updated successfully, throws ValidationError if validation fails\r\n */\r\n protected updateElement(element: TrackElement): boolean {\r\n try {\r\n const isValid = this.validateElement(element);\r\n if (isValid) {\r\n const index = this.elements.findIndex(\r\n (e) => e.getId() === element.getId()\r\n );\r\n if (index !== -1) {\r\n this.elements[index] = element;\r\n return true;\r\n }\r\n }\r\n } catch (error) {\r\n if (error instanceof ValidationError) {\r\n throw error;\r\n }\r\n throw error;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getElementById(id: string): Readonly<TrackElement> | undefined {\r\n const element = this.elements.find((e) => e.getId() === id);\r\n if (!element) return undefined;\r\n return element;\r\n }\r\n\r\n /**\r\n * Validates all elements in the track and returns combined result and per-element status\r\n * @returns Object with overall isValid and array of per-element validation results\r\n */\r\n validateAllElements(): {\r\n isValid: boolean;\r\n results: Array<{\r\n element: TrackElement;\r\n isValid: boolean;\r\n errors?: string[];\r\n warnings?: string[];\r\n }>;\r\n } {\r\n let validResult = true;\r\n const results = this.elements.map((element) => {\r\n try {\r\n const isValid = this.validateElement(element);\r\n if (!isValid) {\r\n validResult = false;\r\n }\r\n return { element, isValid };\r\n } catch (error) {\r\n if (error instanceof ValidationError) {\r\n validResult = false;\r\n return {\r\n element,\r\n isValid: false,\r\n errors: error.errors,\r\n warnings: error.warnings,\r\n };\r\n }\r\n return {\r\n element,\r\n isValid: false,\r\n errors: [error instanceof Error ? error.message : \"Unknown error\"],\r\n };\r\n }\r\n });\r\n return { isValid: validResult, results };\r\n }\r\n\r\n serialize(): TrackJSON {\r\n const serializer = new ElementSerializer();\r\n return {\r\n id: this.id,\r\n name: this.name,\r\n type: this.type,\r\n elements: this.elements.map(\r\n (element) => element.accept(serializer) as ElementJSON\r\n ),\r\n };\r\n }\r\n\r\n static fromJSON(json: any): Track {\r\n const track = new Track(json.name, json.id);\r\n track.type = json.type;\r\n track.elements = (json.elements || []).map(ElementDeserializer.fromJSON);\r\n return track;\r\n }\r\n}\r\n","import { TrackElement } from \"../core/elements/base.element\";\r\nimport { Track } from \"../core/track/track\";\r\n\r\ntype TimelineStore = {\r\n tracks: Track[];\r\n version: number;\r\n elementMap: Record<string, TrackElement>;\r\n trackMap: Record<string, any>;\r\n captionProps: Record<string, any>;\r\n}\r\n\r\nexport type TimelineTrackData = {\r\n tracks: Track[];\r\n version: number;\r\n}\r\n\r\nexport class TimelineContextStore {\r\n private static instance: TimelineContextStore;\r\n private storeMap: Map<string, TimelineStore>;\r\n\r\n private constructor() {\r\n this.storeMap = new Map();\r\n }\r\n\r\n public static getInstance(): TimelineContextStore {\r\n if (!TimelineContextStore.instance) {\r\n TimelineContextStore.instance = new TimelineContextStore();\r\n }\r\n return TimelineContextStore.instance;\r\n }\r\n\r\n public initializeContext(contextId: string): void {\r\n if (!this.storeMap.has(contextId)) {\r\n this.storeMap.set(contextId, {\r\n tracks: [],\r\n version: 0,\r\n elementMap: {},\r\n trackMap: {},\r\n captionProps: {},\r\n });\r\n }\r\n }\r\n\r\n public getTimelineData(contextId: string): TimelineTrackData | null {\r\n const timelineStore = this.storeMap.get(contextId);\r\n return timelineStore ? {\r\n tracks: timelineStore.tracks,\r\n version: timelineStore.version,\r\n } : null;\r\n }\r\n\r\n public setTimelineData(contextId: string, timelineData: TimelineTrackData): TimelineTrackData {\r\n this.ensureContext(contextId);\r\n this.storeMap.get(contextId)!.tracks = timelineData.tracks;\r\n this.storeMap.get(contextId)!.version = timelineData.version;\r\n return timelineData;\r\n }\r\n\r\n public getElementMap(contextId: string): Record<string, TrackElement> {\r\n this.ensureContext(contextId);\r\n return this.storeMap.get(contextId)!.elementMap;\r\n }\r\n\r\n public setElementMap(contextId: string, elementMap: Record<string, TrackElement>): void {\r\n this.ensureContext(contextId);\r\n this.storeMap.get(contextId)!.elementMap = elementMap;\r\n }\r\n\r\n public getTrackMap(contextId: string): Record<string, any> {\r\n this.ensureContext(contextId);\r\n return this.storeMap.get(contextId)!.trackMap;\r\n }\r\n\r\n public setTrackMap(contextId: string, trackMap: Record<string, any>): void {\r\n this.ensureContext(contextId);\r\n this.storeMap.get(contextId)!.trackMap = trackMap;\r\n }\r\n\r\n public getCaptionProps(contextId: string): Record<string, any> {\r\n this.ensureContext(contextId);\r\n return this.storeMap.get(contextId)!.captionProps;\r\n }\r\n\r\n public setCaptionProps(contextId: string, captionProps: Record<string, any>): void {\r\n this.ensureContext(contextId);\r\n this.storeMap.get(contextId)!.captionProps = captionProps;\r\n }\r\n\r\n public clearContext(contextId: string): void {\r\n this.storeMap.delete(contextId);\r\n }\r\n\r\n private ensureContext(contextId: string): void {\r\n if (!this.storeMap.has(contextId)) {\r\n this.initializeContext(contextId);\r\n }\r\n }\r\n}\r\n\r\nexport const timelineContextStore = TimelineContextStore.getInstance();","import { ElementVisitor } from \"./element-visitor\";\r\nimport { VideoElement } from \"../elements/video.element\";\r\nimport { AudioElement } from \"../elements/audio.element\";\r\nimport { ImageElement } from \"../elements/image.element\";\r\nimport { TextElement } from \"../elements/text.element\";\r\nimport { CaptionElement } from \"../elements/caption.element\";\r\nimport { IconElement } from \"../elements/icon.element\";\r\nimport { CircleElement } from \"../elements/circle.element\";\r\nimport { RectElement } from \"../elements/rect.element\";\r\nimport { Track } from \"../track/track\";\r\nimport { TrackFriend } from \"../track/track.friend\";\r\n\r\n/**\r\n * ElementAdder visitor for adding elements to tracks\r\n * Uses the visitor pattern to handle different element types\r\n * Implements the Friend Class Pattern for explicit access control\r\n */\r\nexport class ElementAdder implements ElementVisitor<Promise<boolean>> {\r\n private track: Track;\r\n private trackFriend: TrackFriend;\r\n\r\n constructor(track: Track) {\r\n this.track = track;\r\n this.trackFriend = track.createFriend();\r\n }\r\n\r\n async visitVideoElement(element: VideoElement): Promise<boolean> {\r\n await element.updateVideoMeta();\r\n const elements = this.track.getElements();\r\n const lastEndtime = elements?.length\r\n ? elements[elements.length - 1].getEnd()\r\n : 0;\r\n if (isNaN(element.getStart())) {\r\n element.setStart(lastEndtime);\r\n }\r\n if (isNaN(element.getEnd())) {\r\n element.setEnd(element.getStart() + element.getMediaDuration());\r\n }\r\n\r\n return this.trackFriend.addElement(element);\r\n }\r\n\r\n async visitAudioElement(element: AudioElement): Promise<boolean> {\r\n await element.updateAudioMeta();\r\n const elements = this.track.getElements();\r\n const lastEndtime = elements?.length\r\n ? elements[elements.length - 1].getEnd()\r\n : 0;\r\n if (isNaN(element.getStart())) {\r\n element.setStart(lastEndtime);\r\n }\r\n if (isNaN(element.getEnd())) {\r\n element.setEnd(element.getStart() + element.getMediaDuration());\r\n }\r\n \r\n return this.trackFriend.addElement(element);\r\n }\r\n\r\n async visitImageElement(element: ImageElement): Promise<boolean> {\r\n await element.updateImageMeta();\r\n const elements = this.track.getElements();\r\n const lastEndtime = elements?.length\r\n ? elements[elements.length - 1].getEnd()\r\n : 0;\r\n if (isNaN(element.getStart())) {\r\n element.setStart(lastEndtime);\r\n }\r\n if (isNaN(element.getEnd())) {\r\n element.setEnd(element.getStart() + 1);\r\n }\r\n \r\n return this.trackFriend.addElement(element);\r\n }\r\n\r\n async visitTextElement(element: TextElement): Promise<boolean> {\r\n const elements = this.track.getElements();\r\n const lastEndtime = elements?.length\r\n ? elements[elements.length - 1].getEnd()\r\n : 0;\r\n if (isNaN(element.getStart())) {\r\n element.setStart(lastEndtime);\r\n }\r\n if (isNaN(element.getEnd())) {\r\n element.setEnd(element.getStart() + 1);\r\n }\r\n \r\n return this.trackFriend.addElement(element);\r\n }\r\n\r\n async visitCaptionElement(element: CaptionElement): Promise<boolean> {\r\n const elements = this.track.getElements();\r\n const lastEndtime = elements?.length\r\n ? elements[elements.length - 1].getEnd()\r\n : 0;\r\n if (isNaN(element.getStart())) {\r\n element.setStart(lastEndtime);\r\n }\r\n if (isNaN(element.getEnd())) {\r\n element.setEnd(element.getStart() + 1);\r\n }\r\n \r\n return this.trackFriend.addElement(element);\r\n }\r\n\r\n async visitIconElement(element: IconElement): Promise<boolean> {\r\n const elements = this.track.getElements();\r\n const lastEndtime = elements?.length\r\n ? elements[elements.length - 1].getEnd()\r\n : 0;\r\n if (isNaN(element.getStart())) {\r\n element.setStart(lastEndtime);\r\n }\r\n if (isNaN(element.getEnd())) {\r\n element.setEnd(element.getStart() + 1);\r\n }\r\n \r\n return this.trackFriend.addElement(element);\r\n }\r\n\r\n async visitCircleElement(element: CircleElement): Promise<boolean> {\r\n const elements = this.track.getElements();\r\n const lastEndtime = elements?.length\r\n ? elements[elements.length - 1].getEnd()\r\n : 0;\r\n if (isNaN(element.getStart())) {\r\n element.setStart(lastEndtime);\r\n }\r\n if (isNaN(element.getEnd())) {\r\n element.setEnd(element.getStart() + 1);\r\n }\r\n \r\n return this.trackFriend.addElement(element);\r\n }\r\n\r\n async visitRectElement(element: RectElement): Promise<boolean> {\r\n const elements = this.track.getElements();\r\n const lastEndtime = elements?.length\r\n ? elements[elements.length - 1].getEnd()\r\n : 0;\r\n if (isNaN(element.getStart())) {\r\n element.setStart(lastEndtime);\r\n }\r\n if (isNaN(element.getEnd())) {\r\n element.setEnd(element.getStart() + 1);\r\n }\r\n \r\n return this.trackFriend.addElement(element);\r\n }\r\n}\r\n","import { ElementVisitor } from \"./element-visitor\";\r\nimport { VideoElement } from \"../elements/video.element\";\r\nimport { AudioElement } from \"../elements/audio.element\";\r\nimport { ImageElement } from \"../elements/image.element\";\r\nimport { TextElement } from \"../elements/text.element\";\r\nimport { CaptionElement } from \"../elements/caption.element\";\r\nimport { IconElement } from \"../elements/icon.element\";\r\nimport { CircleElement } from \"../elements/circle.element\";\r\nimport { RectElement } from \"../elements/rect.element\";\r\nimport { Track } from \"../track/track\";\r\nimport { TrackFriend } from \"../track/track.friend\";\r\n\r\n/**\r\n * ElementRemover visitor for removing elements from tracks\r\n * Uses the visitor pattern to handle different element types\r\n * Implements the Friend Class Pattern for explicit access control\r\n */\r\nexport class ElementRemover implements ElementVisitor<boolean> {\r\n private trackFriend: TrackFriend;\r\n\r\n constructor(track: Track) {\r\n this.trackFriend = track.createFriend();\r\n }\r\n\r\n visitVideoElement(element: VideoElement): boolean {\r\n this.trackFriend.removeElement(element);\r\n return true;\r\n }\r\n\r\n visitAudioElement(element: AudioElement): boolean {\r\n this.trackFriend.removeElement(element);\r\n return true;\r\n }\r\n\r\n visitImageElement(element: ImageElement): boolean {\r\n this.trackFriend.removeElement(element);\r\n return true;\r\n }\r\n\r\n visitTextElement(element: TextElement): boolean {\r\n this.trackFriend.removeElement(element);\r\n return true;\r\n }\r\n\r\n visitCaptionElement(element: CaptionElement): boolean {\r\n this.trackFriend.removeElement(element);\r\n return true;\r\n }\r\n\r\n visitIconElement(element: IconElement): boolean {\r\n this.trackFriend.removeElement(element);\r\n return true;\r\n }\r\n\r\n visitCircleElement(element: CircleElement): boolean {\r\n this.trackFriend.removeElement(element);\r\n return true;\r\n }\r\n\r\n visitRectElement(element: RectElement): boolean {\r\n this.trackFriend.removeElement(element);\r\n return true;\r\n }\r\n} ","import { ElementVisitor } from \"./element-visitor\";\r\nimport { VideoElement } from \"../elements/video.element\";\r\nimport { AudioElement } from \"../elements/audio.element\";\r\nimport { ImageElement } from \"../elements/image.element\";\r\nimport { TextElement } from \"../elements/text.element\";\r\nimport { CaptionElement } from \"../elements/caption.element\";\r\nimport { IconElement } from \"../elements/icon.element\";\r\nimport { CircleElement } from \"../elements/circle.element\";\r\nimport { RectElement } from \"../elements/rect.element\";\r\nimport { Track } from \"../track/track\";\r\nimport { TrackFriend } from \"../track/track.friend\";\r\n\r\n/**\r\n * ElementUpdater visitor for updating elements in tracks\r\n * Uses the visitor pattern to handle different element types\r\n * Implements the Friend Class Pattern for explicit access control\r\n */\r\nexport class ElementUpdater implements ElementVisitor<boolean> {\r\n private trackFriend: TrackFriend;\r\n\r\n constructor(track: Track) {\r\n this.trackFriend = track.createFriend();\r\n }\r\n\r\n visitVideoElement(element: VideoElement): boolean {\r\n return this.trackFriend.updateElement(element);\r\n }\r\n\r\n visitAudioElement(element: AudioElement): boolean {\r\n return this.trackFriend.updateElement(element);\r\n }\r\n\r\n visitImageElement(element: ImageElement): boolean {\r\n return this.trackFriend.updateElement(element);\r\n }\r\n\r\n visitTextElement(element: TextElement): boolean {\r\n return this.trackFriend.updateElement(element);\r\n }\r\n\r\n visitCaptionElement(element: CaptionElement): boolean {\r\n return this.trackFriend.updateElement(element);\r\n }\r\n\r\n visitIconElement(element: IconElement): boolean {\r\n return this.trackFriend.updateElement(element);\r\n }\r\n\r\n visitCircleElement(element: CircleElement): boolean {\r\n return this.trackFriend.updateElement(element);\r\n }\r\n\r\n visitRectElement(element: RectElement): boolean {\r\n return this.trackFriend.updateElement(element);\r\n }\r\n} ","import { ElementVisitor } from \"./element-visitor\";\r\nimport { VideoElement } from \"../elements/video.element\";\r\nimport { AudioElement } from \"../elements/audio.element\";\r\nimport { ImageElement } from \"../elements/image.element\";\r\nimport { TextElement } from \"../elements/text.element\";\r\nimport { CaptionElement } from \"../elements/caption.element\";\r\nimport { RectElement } from \"../elements/rect.element\";\r\nimport { CircleElement } from \"../elements/circle.element\";\r\nimport { IconElement } from \"../elements/icon.element\";\r\nimport { TrackElement } from \"../elements/base.element\";\r\n\r\nexport class ElementCloner implements ElementVisitor<TrackElement> {\r\n cloneElementProperties(srcElement: TrackElement, destElement: TrackElement) {\r\n return destElement\r\n .setName(srcElement.getName())\r\n .setType(srcElement.getType())\r\n .setStart(srcElement.getStart())\r\n .setEnd(srcElement.getEnd())\r\n .setProps(srcElement.getProps())\r\n .setAnimation(srcElement.getAnimation());\r\n }\r\n\r\n visitVideoElement(element: VideoElement): TrackElement {\r\n const props = element.getProps();\r\n const clonedElement = new VideoElement(props!.src, element.getParentSize());\r\n this.cloneElementProperties(element, clonedElement);\r\n clonedElement\r\n .setParentSize(element.getParentSize())\r\n .setMediaDuration(element.getMediaDuration())\r\n .setFrame(element.getFrame())\r\n .setFrameEffects(element.getFrameEffects() ?? [])\r\n .setBackgroundColor(element.getBackgroundColor())\r\n .setObjectFit(element.getObjectFit())\r\n return clonedElement;\r\n }\r\n\r\n visitAudioElement(element: AudioElement): TrackElement {\r\n const clonedElement = new AudioElement(element.getProps()!.src);\r\n this.cloneElementProperties(element, clonedElement);\r\n clonedElement.setMediaDuration(element.getMediaDuration());\r\n return clonedElement;\r\n }\r\n\r\n visitImageElement(element: ImageElement): TrackElement {\r\n const clonedElement = new ImageElement(\r\n element.getProps()!.src,\r\n element.getParentSize()\r\n );\r\n this.cloneElementProperties(element, clonedElement);\r\n clonedElement\r\n .setParentSize(element.getParentSize())\r\n .setFrame(element.getFrame())\r\n .setFrameEffects(element.getFrameEffects())\r\n .setBackgroundColor(element.getBackgroundColor())\r\n .setObjectFit(element.getObjectFit())\r\n\r\n return clonedElement;\r\n }\r\n\r\n visitTextElement(element: TextElement): TrackElement {\r\n const clonedElement = new TextElement(element.getProps()!.text);\r\n this.cloneElementProperties(element, clonedElement);\r\n clonedElement.setTextEffect(element.getTextEffect());\r\n return clonedElement;\r\n }\r\n\r\n visitCaptionElement(element: CaptionElement): TrackElement {\r\n const clonedElement = new CaptionElement(\r\n element.getProps()!.text,\r\n element.getStart(),\r\n element.getEnd()\r\n );\r\n this.cloneElementProperties(element, clonedElement);\r\n return clonedElement;\r\n }\r\n\r\n visitRectElement(element: RectElement): TrackElement {\r\n const clonedElement = new RectElement(\r\n element.getProps()!.fill,\r\n element.getProps()!.size\r\n );\r\n this.cloneElementProperties(element, clonedElement);\r\n return clonedElement;\r\n }\r\n\r\n visitCircleElement(element: CircleElement): TrackElement {\r\n const clonedElement = new CircleElement(\r\n element.getProps()!.fill,\r\n element.getProps()!.radius\r\n );\r\n this.cloneElementProperties(element, clonedElement);\r\n return clonedElement;\r\n }\r\n\r\n visitIconElement(element: IconElement): TrackElement {\r\n const clonedElement = new IconElement(\r\n element.getProps()!.src,\r\n element.getProps()!.size\r\n );\r\n this.cloneElementProperties(element, clonedElement);\r\n return clonedElement;\r\n }\r\n}\r\n","import { ElementVisitor } from \"./element-visitor\";\r\nimport { VideoElement } from \"../elements/video.element\";\r\nimport { AudioElement } from \"../elements/audio.element\";\r\nimport { ImageElement } from \"../elements/image.element\";\r\nimport { TextElement } from \"../elements/text.element\";\r\nimport { CaptionElement } from \"../elements/caption.element\";\r\nimport { RectElement } from \"../elements/rect.element\";\r\nimport { CircleElement } from \"../elements/circle.element\";\r\nimport { IconElement } from \"../elements/icon.element\";\r\nimport { ElementCloner } from \"./element-cloner\";\r\nimport { canSplitElement } from \"../../utils/timeline.utils\";\r\n\r\nexport interface SplitResult {\r\n firstElement: any;\r\n secondElement: any;\r\n success: boolean;\r\n}\r\n\r\nexport class ElementSplitter implements ElementVisitor<SplitResult> {\r\n private splitTime: number;\r\n private elementCloner: ElementCloner;\r\n constructor(splitTime: number) {\r\n this.splitTime = splitTime;\r\n this.elementCloner = new ElementCloner();\r\n }\r\n\r\n visitVideoElement(element: VideoElement): SplitResult {\r\n if (!canSplitElement(element, this.splitTime)) {\r\n return { firstElement: null, secondElement: null, success: false };\r\n }\r\n\r\n const firstElement = this.elementCloner.visitVideoElement(\r\n element\r\n ) as VideoElement;\r\n const secondElement = this.elementCloner.visitVideoElement(\r\n element\r\n ) as VideoElement;\r\n\r\n const props = element.getProps();\r\n const secondStartAt =\r\n (props!.time ?? 0) +\r\n (this.splitTime - element.getStart()) * (props!.playbackRate ?? 1);\r\n firstElement.setEnd(this.splitTime);\r\n secondElement.setStart(this.splitTime).setStartAt(secondStartAt);\r\n\r\n return { firstElement, secondElement, success: true };\r\n }\r\n\r\n visitAudioElement(element: AudioElement): SplitResult {\r\n if (!canSplitElement(element, this.splitTime)) {\r\n return { firstElement: null, secondElement: null, success: false };\r\n }\r\n const firstElement = this.elementCloner.visitAudioElement(\r\n element\r\n ) as AudioElement;\r\n const secondElement = this.elementCloner.visitAudioElement(\r\n element\r\n ) as AudioElement;\r\n\r\n const props = element.getProps();\r\n const secondStartAt =\r\n (props!.time ?? 0) +\r\n (this.splitTime - element.getStart()) * (props!.playbackRate ?? 1);\r\n firstElement.setEnd(this.splitTime);\r\n secondElement.setStart(this.splitTime).setStartAt(secondStartAt);\r\n\r\n return { firstElement, secondElement, success: true };\r\n }\r\n\r\n visitImageElement(element: ImageElement): SplitResult {\r\n if (!canSplitElement(element, this.splitTime)) {\r\n return { firstElement: null, secondElement: null, success: false };\r\n }\r\n const firstElement = this.elementCloner.visitImageElement(\r\n element\r\n ) as ImageElement;\r\n const secondElement = this.elementCloner.visitImageElement(\r\n element\r\n ) as ImageElement;\r\n firstElement.setEnd(this.splitTime);\r\n secondElement.setStart(this.splitTime);\r\n return { firstElement, secondElement, success: true };\r\n }\r\n\r\n visitTextElement(element: TextElement): SplitResult {\r\n if (!canSplitElement(element, this.splitTime)) {\r\n return { firstElement: null, secondElement: null, success: false };\r\n }\r\n const originalText = element.getText() || \"\";\r\n const originalTextArray = originalText.split(\" \");\r\n const percentage =\r\n (this.splitTime - element.getStart()) / element.getDuration();\r\n const firstElement = this.elementCloner.visitTextElement(\r\n element\r\n ) as TextElement;\r\n firstElement.setText(\r\n originalTextArray\r\n .slice(0, Math.floor(originalTextArray.length * percentage))\r\n .join(\" \")\r\n );\r\n firstElement.setEnd(this.splitTime);\r\n const secondElement = this.elementCloner.visitTextElement(\r\n element\r\n ) as TextElement;\r\n secondElement.setText(\r\n originalTextArray\r\n .slice(\r\n Math.floor(originalTextArray.length * percentage),\r\n originalTextArray.length\r\n )\r\n .join(\" \")\r\n );\r\n secondElement.setStart(this.splitTime);\r\n return { firstElement, secondElement, success: true };\r\n }\r\n\r\n visitCaptionElement(element: CaptionElement): SplitResult {\r\n if (!canSplitElement(element, this.splitTime)) {\r\n return { firstElement: null, secondElement: null, success: false };\r\n }\r\n const originalText = element.getText() || \"\";\r\n const originalTextArray = originalText.split(\" \");\r\n const percentage =\r\n (this.splitTime - element.getStart()) / element.getDuration();\r\n const firstElement = this.elementCloner.visitCaptionElement(\r\n element\r\n ) as CaptionElement;\r\n firstElement.setText(\r\n originalTextArray\r\n .slice(0, Math.floor(originalTextArray.length * percentage))\r\n .join(\" \")\r\n );\r\n firstElement.setEnd(this.splitTime);\r\n const secondElement = this.elementCloner.visitCaptionElement(\r\n element\r\n ) as CaptionElement;\r\n secondElement.setText(\r\n originalTextArray\r\n .slice(\r\n Math.floor(originalTextArray.length * percentage),\r\n originalTextArray.length\r\n )\r\n .join(\" \")\r\n );\r\n secondElement.setStart(this.splitTime);\r\n return { firstElement, secondElement, success: true };\r\n }\r\n\r\n visitRectElement(element: RectElement): SplitResult {\r\n if (!canSplitElement(element, this.splitTime)) {\r\n return { firstElement: null, secondElement: null, success: false };\r\n }\r\n const firstElement = this.elementCloner.visitRectElement(\r\n element\r\n ) as RectElement;\r\n const secondElement = this.elementCloner.visitRectElement(\r\n element\r\n ) as RectElement;\r\n firstElement.setEnd(this.splitTime);\r\n secondElement.setStart(this.splitTime);\r\n return { firstElement, secondElement, success: true };\r\n }\r\n\r\n visitCircleElement(element: CircleElement): SplitResult {\r\n if (!canSplitElement(element, this.splitTime)) {\r\n return { firstElement: null, secondElement: null, success: false };\r\n }\r\n const firstElement = this.elementCloner.visitCircleElement(element);\r\n const secondElement = this.elementCloner.visitCircleElement(element);\r\n firstElement.setEnd(this.splitTime);\r\n secondElement.setStart(this.splitTime);\r\n return { firstElement, secondElement, success: true };\r\n }\r\n\r\n visitIconElement(element: IconElement): SplitResult {\r\n if (!canSplitElement(element, this.splitTime)) {\r\n return { firstElement: null, secondElement: null, success: false };\r\n }\r\n const firstElement = this.elementCloner.visitIconElement(element);\r\n const secondElement = this.elementCloner.visitIconElement(element);\r\n firstElement.setEnd(this.splitTime);\r\n secondElement.setStart(this.splitTime);\r\n return { firstElement, secondElement, success: true };\r\n }\r\n}\r\n","import {\r\n generateShortUuid,\r\n getTotalDuration,\r\n} from \"../../utils/timeline.utils\";\r\nimport { Track } from \"../track/track\";\r\nimport {\r\n timelineContextStore,\r\n TimelineTrackData,\r\n} from \"../../services/data.service\";\r\nimport { PLAYER_STATE, TIMELINE_ACTION } from \"../../utils/constants\";\r\nimport { ElementAdder } from \"../visitor/element-adder\";\r\nimport { ElementRemover } from \"../visitor/element-remover\";\r\nimport { ElementUpdater } from \"../visitor/element-updater\";\r\nimport { ElementSplitter, SplitResult } from \"../visitor/element-splitter\";\r\nimport { ElementCloner } from \"../visitor/element-cloner\";\r\nimport { TrackElement } from \"../elements/base.element\";\r\nimport { ProjectJSON, TrackJSON } from \"../../types\";\r\n\r\n/**\r\n * Type for timeline operation context\r\n */\r\nexport interface TimelineOperationContext {\r\n contextId: string;\r\n setTotalDuration: (duration: number) => void;\r\n setPresent: (data: ProjectJSON) => void;\r\n handleUndo: () => ProjectJSON | null;\r\n handleRedo: () => ProjectJSON | null;\r\n handleResetHistory: () => void;\r\n updateChangeLog: () => void;\r\n setTimelineAction?: (action: string, payload?: unknown) => void;\r\n}\r\n\r\n/**\r\n * TimelineEditor\r\n *\r\n * This class provides an interface to execute all timeline operations\r\n * using a direct, class-based approach with track-based management.\r\n * It also handles undo/redo operations internally.\r\n */\r\nexport class TimelineEditor {\r\n private context: TimelineOperationContext;\r\n\r\n constructor(context: TimelineOperationContext) {\r\n this.context = context;\r\n // Ensure context is initialized in timelineContextStore\r\n timelineContextStore.initializeContext(this.context.contextId);\r\n }\r\n\r\n getContext(): TimelineOperationContext {\r\n return this.context;\r\n }\r\n\r\n pauseVideo(): void {\r\n if (this.context?.setTimelineAction) {\r\n this.context.setTimelineAction(\r\n TIMELINE_ACTION.SET_PLAYER_STATE,\r\n PLAYER_STATE.PAUSED\r\n );\r\n }\r\n }\r\n\r\n getTimelineData(): TimelineTrackData | null {\r\n const contextId = this.context.contextId;\r\n return timelineContextStore.getTimelineData(contextId);\r\n }\r\n\r\n getLatestVersion(): number {\r\n const contextId = this.context.contextId;\r\n const timelineData = timelineContextStore.getTimelineData(contextId);\r\n return timelineData?.version || 0;\r\n }\r\n\r\n protected setTimelineData(\r\n tracks: Track[],\r\n version?: number\r\n ): TimelineTrackData {\r\n const prevTimelineData = this.getTimelineData();\r\n const updatedVersion = version ?? (prevTimelineData?.version || 0) + 1;\r\n const updatedTimelineData = {\r\n tracks,\r\n version: updatedVersion,\r\n };\r\n timelineContextStore.setTimelineData(\r\n this.context.contextId,\r\n updatedTimelineData\r\n );\r\n this.updateHistory(updatedTimelineData);\r\n this.context.updateChangeLog();\r\n return updatedTimelineData as TimelineTrackData;\r\n }\r\n\r\n addTrack(name: string): Track {\r\n const prevTimelineData = this.getTimelineData();\r\n const id = `t-${generateShortUuid()}`;\r\n const track = new Track(name, id);\r\n const updatedTimelines = [...(prevTimelineData?.tracks || []), track];\r\n this.setTimelineData(updatedTimelines);\r\n return track;\r\n }\r\n\r\n getTrackById(id: string): Track | null {\r\n const prevTimelineData = this.getTimelineData();\r\n const track = prevTimelineData?.tracks.find((t) => t.getId() === id);\r\n return track as Track | null;\r\n }\r\n\r\n getTrackByName(name: string): Track | null {\r\n const prevTimelineData = this.getTimelineData();\r\n const track = prevTimelineData?.tracks.find((t) => t.getName() === name);\r\n return track as Track | null;\r\n }\r\n\r\n removeTrackById(id: string): void {\r\n const tracks = this.getTimelineData()?.tracks || [];\r\n const updatedTracks = tracks.filter((t) => t.getId() !== id);\r\n this.setTimelineData(updatedTracks);\r\n }\r\n\r\n removeTrack(track: Track): void {\r\n const tracks = this.getTimelineData()?.tracks || [];\r\n const updatedTracks = tracks.filter((t) => t.getId() !== track.getId());\r\n this.setTimelineData(updatedTracks);\r\n }\r\n\r\n /**\r\n * Refresh the timeline data\r\n */\r\n refresh(): void {\r\n const currentData = this.getTimelineData();\r\n if (currentData) {\r\n this.setTimelineData(currentData.tracks);\r\n }\r\n }\r\n\r\n /**\r\n * Add an element to a specific track using the visitor pattern\r\n * @param track The track to add the element to\r\n * @param element The element to add\r\n * @returns Promise<boolean> true if element was added successfully\r\n */\r\n async addElementToTrack(\r\n track: Track,\r\n element: TrackElement\r\n ): Promise<boolean> {\r\n if (!track) {\r\n return false;\r\n }\r\n try {\r\n // Use the visitor pattern to handle different element types\r\n const elementAdder = new ElementAdder(track);\r\n const result = await element.accept(elementAdder);\r\n \r\n if (result) {\r\n // Update the timeline data to reflect the change\r\n const currentData = this.getTimelineData();\r\n if (currentData) {\r\n this.setTimelineData(currentData.tracks);\r\n }\r\n }\r\n return result;\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Remove an element from a specific track using the visitor pattern\r\n * @param element The element to remove\r\n * @returns boolean true if element was removed successfully\r\n */\r\n removeElement(element: TrackElement): boolean {\r\n const track = this.getTrackById(element.getTrackId());\r\n if (!track) {\r\n return false;\r\n }\r\n\r\n try {\r\n // Use the visitor pattern to handle different element types\r\n const elementRemover = new ElementRemover(track);\r\n const result = element.accept(elementRemover);\r\n \r\n if (result) {\r\n // Update the timeline data to reflect the change\r\n const currentData = this.getTimelineData();\r\n if (currentData) {\r\n this.setTimelineData(currentData.tracks);\r\n }\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Update an element in a specific track using the visitor pattern\r\n * @param element The updated element\r\n * @returns boolean true if element was updated successfully\r\n */\r\n updateElement(element: TrackElement): boolean {\r\n const track = this.getTrackById(element.getTrackId());\r\n if (!track) {\r\n return false;\r\n }\r\n\r\n try {\r\n // Use the visitor pattern to handle different element types\r\n const elementUpdater = new ElementUpdater(track);\r\n const result = element.accept(elementUpdater);\r\n \r\n if (result) {\r\n // Update the timeline data to reflect the change\r\n const currentData = this.getTimelineData();\r\n if (currentData) {\r\n this.setTimelineData(currentData.tracks);\r\n }\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Split an element at a specific time point using the visitor pattern\r\n * @param element The element to split\r\n * @param splitTime The time point to split at\r\n * @returns SplitResult with first element, second element, and success status\r\n */\r\n async splitElement(element: TrackElement, splitTime: number): Promise<SplitResult> {\r\n const track = this.getTrackById(element.getTrackId());\r\n if (!track) {\r\n return { firstElement: element, secondElement: null, success: false };\r\n }\r\n\r\n try {\r\n // Use the visitor pattern to handle different element types\r\n const elementSplitter = new ElementSplitter(splitTime);\r\n const result = element.accept(elementSplitter);\r\n \r\n if (result.success) {\r\n const elementRemover = new ElementRemover(track);\r\n // Remove the original element from the track\r\n element.accept(elementRemover);\r\n\r\n // Add the first split element to the track\r\n const elementAdder = new ElementAdder(track);\r\n result.firstElement.accept(elementAdder);\r\n result.secondElement.accept(elementAdder);\r\n \r\n // Update the timeline data to reflect the change\r\n const currentData = this.getTimelineData();\r\n if (currentData) {\r\n this.setTimelineData(currentData.tracks);\r\n }\r\n }\r\n return result;\r\n } catch (error) {\r\n return { firstElement: element, secondElement: null, success: false };\r\n }\r\n }\r\n\r\n /**\r\n * Clone an element using the visitor pattern\r\n * @param element The element to clone\r\n * @returns TrackElement | null - the cloned element or null if cloning failed\r\n */\r\n cloneElement(element: TrackElement): TrackElement | null {\r\n try {\r\n const elementCloner = new ElementCloner();\r\n return element.accept(elementCloner);\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n reorderTracks(tracks: Track[]): void {\r\n this.setTimelineData(tracks);\r\n }\r\n\r\n updateHistory(timelineTrackData: TimelineTrackData): void {\r\n const tracks = timelineTrackData.tracks.map((t) => t.serialize());\r\n this.context.setTotalDuration(getTotalDuration(tracks));\r\n const version = timelineTrackData.version;\r\n this.context.setPresent({\r\n tracks,\r\n version,\r\n });\r\n }\r\n\r\n /**\r\n * Trigger undo operation and update timeline data\r\n */\r\n undo(): void {\r\n const result = this.context.handleUndo();\r\n if (result && result.tracks) {\r\n // Update the timeline data in the editor's store\r\n const tracks = result.tracks.map((t: TrackJSON) => Track.fromJSON(t));\r\n timelineContextStore.setTimelineData(this.context.contextId, {\r\n tracks,\r\n version: result.version,\r\n });\r\n\r\n // Update total duration\r\n this.context.setTotalDuration(getTotalDuration(result.tracks));\r\n this.context.updateChangeLog();\r\n\r\n // Trigger timeline action to notify components\r\n if (this.context?.setTimelineAction) {\r\n this.context.setTimelineAction(TIMELINE_ACTION.UPDATE_PLAYER_DATA, {\r\n tracks: result.tracks,\r\n version: result.version,\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Trigger redo operation and update timeline data\r\n */\r\n redo(): void {\r\n const result = this.context.handleRedo();\r\n if (result && result.tracks) {\r\n // Update the timeline data in the editor's store\r\n const tracks = result.tracks.map((t: TrackJSON) => Track.fromJSON(t));\r\n timelineContextStore.setTimelineData(this.context.contextId, {\r\n tracks,\r\n version: result.version,\r\n });\r\n\r\n // Update total duration\r\n this.context.setTotalDuration(getTotalDuration(result.tracks));\r\n this.context.updateChangeLog();\r\n\r\n // Trigger timeline action to notify components\r\n if (this.context?.setTimelineAction) {\r\n this.context.setTimelineAction(TIMELINE_ACTION.UPDATE_PLAYER_DATA, {\r\n tracks: result.tracks,\r\n version: result.version,\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Reset history and clear timeline data\r\n */\r\n resetHistory(): void {\r\n this.context.handleResetHistory();\r\n\r\n // Clear the timeline data in the editor's store\r\n timelineContextStore.setTimelineData(this.context.contextId, {\r\n tracks: [],\r\n version: 0,\r\n });\r\n\r\n // Reset total duration and version\r\n this.context.setTotalDuration(0);\r\n this.context.updateChangeLog();\r\n\r\n // Trigger timeline action to notify components\r\n if (this.context?.setTimelineAction) {\r\n this.context.setTimelineAction(TIMELINE_ACTION.UPDATE_PLAYER_DATA, {\r\n tracks: [],\r\n version: 0,\r\n });\r\n }\r\n }\r\n\r\n loadProject({\r\n tracks,\r\n version,\r\n }: {\r\n tracks: TrackJSON[];\r\n version: number;\r\n }): void {\r\n this.pauseVideo();\r\n this.context.handleResetHistory();\r\n // Convert Timeline[] to Track[] and set\r\n const timelineTracks = tracks.map((t) => Track.fromJSON(t));\r\n this.setTimelineData(timelineTracks, version);\r\n if (this.context?.setTimelineAction) {\r\n this.context.setTimelineAction(TIMELINE_ACTION.UPDATE_PLAYER_DATA, {\r\n tracks: tracks,\r\n version: version,\r\n forceUpdate: true,\r\n });\r\n }\r\n }\r\n}\r\n","import { createContext, useContext, useState } from \"react\";\r\nimport { ProjectJSON } from \"../types\";\r\n\r\nconst MAX_HISTORY = 20;\r\n\r\n// Helper function for deep cloning\r\nconst deepClone = <T,>(obj: T): T => {\r\n return JSON.parse(JSON.stringify(obj));\r\n};\r\n\r\ninterface UndoRedoState {\r\n past: ProjectJSON[];\r\n present: ProjectJSON | null;\r\n future: ProjectJSON[];\r\n}\r\n\r\ninterface UndoRedoContextType {\r\n // State\r\n canUndo: boolean;\r\n canRedo: boolean;\r\n present: ProjectJSON | null;\r\n // Actions\r\n setPresent: (data: ProjectJSON) => void;\r\n undo: () => ProjectJSON | null;\r\n redo: () => ProjectJSON | null;\r\n resetHistory: () => void;\r\n getLastPersistedState: () => ProjectJSON | null;\r\n // Configuration\r\n disablePersistence: () => void;\r\n}\r\n\r\nconst UndoRedoContext = createContext<UndoRedoContextType | undefined>(\r\n undefined\r\n);\r\n\r\n// Local storage utilities\r\nconst STORAGE_KEY_PREFIX = \"twick_undo_redo_\";\r\n\r\nconst saveToStorage = (key: string, state: UndoRedoState): void => {\r\n try {\r\n localStorage.setItem(key, JSON.stringify(state));\r\n } catch (error) {\r\n console.warn(\"Failed to save undo-redo state to localStorage:\", error);\r\n }\r\n};\r\n\r\nconst loadFromStorage = (key: string): UndoRedoState | null => {\r\n try {\r\n const stored = localStorage.getItem(key);\r\n if (!stored) return null;\r\n return JSON.parse(stored);\r\n } catch (error) {\r\n console.warn(\"Failed to load undo-redo state from localStorage:\", error);\r\n return null;\r\n }\r\n};\r\n\r\nexport interface UndoRedoProviderProps {\r\n children: React.ReactNode;\r\n persistenceKey?: string;\r\n maxHistorySize?: number;\r\n}\r\n\r\nexport const UndoRedoProvider: React.FC<UndoRedoProviderProps> = ({\r\n children,\r\n persistenceKey,\r\n maxHistorySize = MAX_HISTORY,\r\n}) => {\r\n const [state, setState] = useState<UndoRedoState>(() => {\r\n // Load from storage if persistence is enabled\r\n if (persistenceKey) {\r\n const stored = loadFromStorage(STORAGE_KEY_PREFIX + persistenceKey);\r\n if (stored) {\r\n return {\r\n past: stored.past,\r\n present: stored.present,\r\n future: stored.future,\r\n };\r\n }\r\n }\r\n\r\n return {\r\n past: [],\r\n present: null,\r\n future: [],\r\n };\r\n });\r\n\r\n // Save to storage whenever state changes (if persistence enabled)\r\n const saveState = (newState: UndoRedoState) => {\r\n if (persistenceKey) {\r\n saveToStorage(STORAGE_KEY_PREFIX + persistenceKey, newState);\r\n }\r\n };\r\n\r\n // When user makes a new change\r\n const setPresent = (data: ProjectJSON) => {\r\n setState((prevState) => {\r\n let newPast = [...prevState.past];\r\n if (prevState.present) {\r\n newPast.push(deepClone(prevState.present));\r\n }\r\n\r\n const newState: UndoRedoState = {\r\n past: newPast,\r\n present: deepClone(data),\r\n future: [], // Clear future because it's a new change\r\n };\r\n\r\n // Limit history size\r\n if (newState.past.length > maxHistorySize) {\r\n newState.past.shift(); // Remove oldest\r\n }\r\n\r\n saveState(newState);\r\n return newState;\r\n });\r\n };\r\n\r\n const undo = (): ProjectJSON | null => {\r\n let undoResult: ProjectJSON | null = null;\r\n\r\n setState((prevState) => {\r\n if (prevState.past.length === 0) return prevState;\r\n\r\n const previous = prevState.past[prevState.past.length - 1];\r\n const newState: UndoRedoState = {\r\n past: prevState.past.slice(0, -1), // Remove last item\r\n present: previous,\r\n future: prevState.present\r\n ? [deepClone(prevState.present), ...prevState.future]\r\n : prevState.future,\r\n };\r\n\r\n undoResult = previous;\r\n saveState(newState);\r\n return newState;\r\n });\r\n\r\n return undoResult;\r\n };\r\n\r\n const redo = (): ProjectJSON | null => {\r\n let redoResult: ProjectJSON | null = null;\r\n\r\n setState((prevState) => {\r\n if (prevState.future.length === 0) return prevState;\r\n\r\n const next = prevState.future[0];\r\n const newState: UndoRedoState = {\r\n past: prevState.present\r\n ? [...prevState.past, deepClone(prevState.present)]\r\n : prevState.past,\r\n present: next,\r\n future: prevState.future.slice(1), // Remove first item\r\n };\r\n\r\n // Limit history size\r\n if (newState.past.length > maxHistorySize) {\r\n newState.past.shift();\r\n }\r\n\r\n redoResult = next;\r\n saveState(newState);\r\n return newState;\r\n });\r\n\r\n return redoResult;\r\n };\r\n\r\n const getLastPersistedState = () => {\r\n if (persistenceKey) {\r\n const stored = loadFromStorage(STORAGE_KEY_PREFIX + persistenceKey);\r\n return stored?.present || null;\r\n }\r\n return null;\r\n };\r\n\r\n // Reset all history\r\n const resetHistory = () => {\r\n const newState: UndoRedoState = {\r\n past: [],\r\n present: null,\r\n future: [],\r\n };\r\n\r\n setState(newState);\r\n\r\n // Clear from storage too\r\n if (persistenceKey) {\r\n localStorage.removeItem(STORAGE_KEY_PREFIX + persistenceKey);\r\n }\r\n };\r\n\r\n const disablePersistence = () => {\r\n if (persistenceKey) {\r\n localStorage.removeItem(STORAGE_KEY_PREFIX + persistenceKey);\r\n }\r\n };\r\n\r\n const contextValue: UndoRedoContextType = {\r\n canUndo: state.past.length > 0,\r\n canRedo: state.future.length > 0,\r\n present: state.present,\r\n setPresent,\r\n undo,\r\n redo,\r\n resetHistory,\r\n getLastPersistedState,\r\n disablePersistence,\r\n };\r\n\r\n return (\r\n <UndoRedoContext.Provider value={contextValue}>\r\n {children}\r\n </UndoRedoContext.Provider>\r\n );\r\n};\r\n\r\nexport const useUndoRedo = (): UndoRedoContextType => {\r\n const context = useContext(UndoRedoContext);\r\n if (context === undefined) {\r\n throw new Error(\"useUndoRedo must be used within an UndoRedoProvider\");\r\n }\r\n return context;\r\n};\r\n","import { TimelineEditor } from \"../core/editor/timeline.editor\";\r\n\r\n// Global registry to store editor instances by contextId\r\nexport const editorRegistry = new Map<string, TimelineEditor>();\r\n\r\n// Expose the registry to the global window object for console access\r\ndeclare global {\r\n interface Window {\r\n twickTimelineEditors: Map<string, TimelineEditor>;\r\n }\r\n}\r\n\r\n// Initialize the global registry on window\r\nif (typeof window !== 'undefined') {\r\n window.twickTimelineEditors = editorRegistry;\r\n}","import {\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n} from \"react\";\r\nimport { TIMELINE_ACTION } from \"../utils/constants\";\r\nimport { UndoRedoProvider, useUndoRedo } from \"./undo-redo-context\";\r\nimport { Track } from \"../core/track/track\";\r\nimport { TrackElement } from \"../core/elements/base.element\";\r\nimport { ProjectJSON, TrackJSON } from \"../types\";\r\nimport { TimelineEditor } from \"../core/editor/timeline.editor\";\r\nimport { editorRegistry } from \"../utils/register-editor\";\r\n\r\nexport type TimelineContextType = {\r\n contextId: string;\r\n editor: TimelineEditor;\r\n selectedItem: Track | TrackElement | null;\r\n changeLog: number;\r\n timelineAction: {\r\n type: string;\r\n payload: any;\r\n };\r\n totalDuration: number;\r\n present: ProjectJSON | null;\r\n canUndo: boolean;\r\n canRedo: boolean;\r\n setSelectedItem: (item: Track | TrackElement | null) => void;\r\n setTimelineAction: (type: string, payload: any) => void;\r\n};\r\n\r\nconst TimelineContext = createContext<TimelineContextType | undefined>(\r\n undefined\r\n);\r\n\r\nexport interface TimelineProviderProps {\r\n children: React.ReactNode;\r\n contextId: string;\r\n initialData?: {\r\n tracks: TrackJSON[];\r\n version: number;\r\n };\r\n undoRedoPersistenceKey?: string;\r\n maxHistorySize?: number;\r\n}\r\n\r\n// Inner component that uses the UndoRedo context\r\nconst TimelineProviderInner = ({\r\n contextId,\r\n children,\r\n initialData,\r\n}: TimelineProviderProps) => {\r\n const [timelineAction, setTimelineActionState] = useState<{\r\n type: string;\r\n payload: any;\r\n }>({\r\n type: TIMELINE_ACTION.NONE,\r\n payload: null,\r\n });\r\n\r\n const [selectedItem, setSelectedItem] = useState<Track | TrackElement | null>(\r\n null\r\n );\r\n\r\n const [totalDuration, setTotalDuration] = useState(0);\r\n\r\n const [changeLog, setChangeLog] = useState(0);\r\n\r\n const undoRedoContext = useUndoRedo();\r\n\r\n const dataInitialized = useRef(false);\r\n\r\n const updateChangeLog = () => {\r\n setChangeLog((prev) => prev + 1);\r\n };\r\n\r\n // Create a single editor instance that's shared across all components\r\n const editor = useMemo(() => {\r\n if (editorRegistry.has(contextId)) {\r\n editorRegistry.delete(contextId);\r\n }\r\n const newEditor = new TimelineEditor({\r\n contextId,\r\n setTotalDuration,\r\n setPresent: undoRedoContext.setPresent,\r\n handleUndo: undoRedoContext.undo,\r\n handleRedo: undoRedoContext.redo,\r\n handleResetHistory: undoRedoContext.resetHistory,\r\n updateChangeLog: updateChangeLog,\r\n setTimelineAction: (action: string, payload?: unknown) => {\r\n setTimelineActionState({ type: action, payload });\r\n },\r\n });\r\n\r\n // Register the editor instance in the global registry\r\n editorRegistry.set(contextId, newEditor);\r\n\r\n return newEditor;\r\n }, [contextId]);\r\n\r\n const setTimelineAction = (type: string, payload: any) => {\r\n setTimelineActionState({ type, payload });\r\n };\r\n\r\n const initialize = (data: ProjectJSON) => {\r\n const lastPersistedState = undoRedoContext.getLastPersistedState();\r\n if (lastPersistedState) {\r\n editor.loadProject(lastPersistedState);\r\n return;\r\n } else {\r\n editor.loadProject(data);\r\n }\r\n };\r\n\r\n // Initialize timeline data if provided\r\n useEffect(() => {\r\n if (initialData && !dataInitialized.current) {\r\n initialize(initialData);\r\n dataInitialized.current = true;\r\n }\r\n }, [initialData]);\r\n\r\n const contextValue: TimelineContextType = {\r\n contextId,\r\n selectedItem,\r\n timelineAction,\r\n totalDuration,\r\n changeLog,\r\n present: undoRedoContext.present,\r\n canUndo: undoRedoContext.canUndo,\r\n canRedo: undoRedoContext.canRedo,\r\n setSelectedItem,\r\n setTimelineAction,\r\n editor, // Include the editor instance\r\n };\r\n\r\n return (\r\n <TimelineContext.Provider value={contextValue}>\r\n {children}\r\n </TimelineContext.Provider>\r\n );\r\n};\r\n\r\nexport const TimelineProvider = ({\r\n contextId,\r\n children,\r\n initialData,\r\n undoRedoPersistenceKey,\r\n maxHistorySize,\r\n}: TimelineProviderProps) => {\r\n // If undo/redo is enabled, wrap with UndoRedoProvider\r\n return (\r\n <UndoRedoProvider\r\n persistenceKey={undoRedoPersistenceKey}\r\n maxHistorySize={maxHistorySize}\r\n >\r\n <TimelineProviderInner\r\n initialData={initialData}\r\n contextId={contextId}\r\n undoRedoPersistenceKey={undoRedoPersistenceKey}\r\n maxHistorySize={maxHistorySize}\r\n >\r\n {children}\r\n </TimelineProviderInner>\r\n </UndoRedoProvider>\r\n );\r\n};\r\n\r\nexport const useTimelineContext = () => {\r\n const context = useContext(TimelineContext);\r\n if (context === undefined) {\r\n throw new Error(\r\n \"useTimelineContext must be used within a TimelineProvider\"\r\n );\r\n }\r\n return context;\r\n};\r\n","import { TIMELINE_ELEMENT_TYPE } from \"./utils/constants\";\r\nimport { TimelineEditor } from \"./core/editor/timeline.editor\";\r\nimport {\r\n TimelineProvider,\r\n TimelineProviderProps,\r\n} from \"./context/timeline-context\";\r\nimport { Track } from \"./core/track/track\";\r\nimport { ElementDeserializer } from \"./core/visitor/element-deserializer\";\r\nimport { ElementSerializer } from \"./core/visitor/element-serializer\";\r\nimport { ElementValidator } from \"./core/visitor/element-validator\";\r\nimport { ElementAdder } from \"./core/visitor/element-adder\";\r\nimport { ElementRemover } from \"./core/visitor/element-remover\";\r\nimport { ElementUpdater } from \"./core/visitor/element-updater\";\r\nimport { ElementSplitter } from \"./core/visitor/element-splitter\";\r\nimport { ElementCloner } from \"./core/visitor/element-cloner\";\r\nimport { CaptionElement } from \"./core/elements/caption.element\";\r\nimport { RectElement } from \"./core/elements/rect.element\";\r\nimport { TextElement } from \"./core/elements/text.element\";\r\nimport { ImageElement } from \"./core/elements/image.element\";\r\nimport { AudioElement } from \"./core/elements/audio.element\";\r\nimport { CircleElement } from \"./core/elements/circle.element\";\r\nimport { IconElement } from \"./core/elements/icon.element\";\r\nimport { VideoElement } from \"./core/elements/video.element\";\r\nimport {\r\n generateShortUuid,\r\n getTotalDuration,\r\n getCurrentElements,\r\n isTrackId,\r\n isElementId,\r\n} from \"./utils/timeline.utils\";\r\nimport { TrackElement } from \"./core/elements/base.element\";\r\nimport { ElementAnimation } from \"./core/addOns/animation\";\r\nimport { ElementFrameEffect } from \"./core/addOns/frame-effect\";\r\nimport { ElementTextEffect } from \"./core/addOns/text-effect\";\r\n\r\nexport {\r\n TrackElement,\r\n Track,\r\n CaptionElement,\r\n RectElement,\r\n TextElement,\r\n ImageElement,\r\n IconElement,\r\n AudioElement,\r\n CircleElement,\r\n VideoElement,\r\n ElementAnimation,\r\n ElementFrameEffect,\r\n ElementTextEffect\r\n};\r\n\r\nexport {\r\n TimelineProvider,\r\n TimelineEditor,\r\n};\r\n\r\nexport type { TimelineProviderProps };\r\nexport { TIMELINE_ELEMENT_TYPE };\r\n\r\nexport * from \"./types\";\r\nexport * from \"./utils/constants\";\r\nexport * from \"./utils/timeline.utils\";\r\nexport * from \"./context/timeline-context\";\r\n// Export core components\r\nexport * from \"./core/track/track\";\r\nexport * from \"./core/elements/base.element\";\r\nexport * from \"./core/visitor/element-visitor\";\r\nexport * from \"./core/visitor/element-serializer\";\r\nexport * from \"./core/visitor/element-deserializer\";\r\nexport * from \"./core/visitor/element-validator\";\r\nexport * from \"./core/visitor/element-adder\";\r\nexport * from \"./core/visitor/element-remover\";\r\nexport * from \"./core/visitor/element-updater\";\r\nexport * from \"./core/visitor/element-splitter\";\r\nexport * from \"./core/visitor/element-cloner\";\r\n\r\n// Expose classes globally on window object for browser access\r\nif (typeof window !== \"undefined\") {\r\n // Also expose the main exports\r\n (window as any).Twick = {\r\n Track: Track,\r\n TrackElement,\r\n ElementDeserializer,\r\n ElementSerializer,\r\n ElementValidator,\r\n ElementAdder,\r\n ElementRemover,\r\n ElementUpdater,\r\n ElementSplitter,\r\n ElementCloner,\r\n TimelineEditor,\r\n TimelineProvider,\r\n TIMELINE_ELEMENT_TYPE,\r\n // Element types\r\n CaptionElement,\r\n RectElement,\r\n TextElement,\r\n ImageElement,\r\n AudioElement,\r\n CircleElement,\r\n IconElement,\r\n VideoElement,\r\n ElementAnimation,\r\n ElementFrameEffect,\r\n ElementTextEffect,\r\n // Utility functions\r\n generateShortUuid,\r\n getTotalDuration,\r\n getCurrentElements,\r\n isTrackId,\r\n isElementId,\r\n };\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/utils/constants.ts","../../media-utils/dist/index.mjs","../src/core/elements/base.element.ts","../src/core/elements/video.element.ts","../src/utils/timeline.utils.ts","../src/core/elements/audio.element.ts","../src/core/elements/image.element.ts","../src/core/elements/text.element.ts","../src/core/elements/caption.element.ts","../src/core/elements/icon.element.ts","../src/core/elements/circle.element.ts","../src/core/elements/rect.element.ts","../src/core/addOns/animation.ts","../src/core/addOns/frame-effect.ts","../src/core/addOns/text-effect.ts","../src/core/visitor/element-deserializer.ts","../src/core/visitor/element-serializer.ts","../src/core/visitor/element-validator.ts","../src/core/track/track.friend.ts","../src/core/track/track.ts","../src/services/data.service.ts","../src/core/visitor/element-adder.ts","../src/core/visitor/element-remover.ts","../src/core/visitor/element-updater.ts","../src/core/visitor/element-cloner.ts","../src/core/visitor/element-splitter.ts","../src/core/editor/timeline.editor.ts","../src/context/undo-redo-context.tsx","../src/utils/register-editor.ts","../../../node_modules/.pnpm/posthog-js@1.258.5/node_modules/posthog-js/dist/module.js","../../../node_modules/.pnpm/posthog-js@1.258.5/node_modules/posthog-js/react/dist/esm/index.js","../src/context/timeline-context.tsx","../src/index.ts"],"sourcesContent":["export const PLAYER_STATE = {\n REFRESH: \"Refresh\",\n PLAYING: \"Playing\",\n PAUSED: \"Paused\",\n};\n\nexport const CAPTION_STYLE = {\n WORD_BG_HIGHLIGHT: \"highlight_bg\",\n WORD_BY_WORD: \"word_by_word\",\n WORD_BY_WORD_WITH_BG: \"word_by_word_with_bg\",\n};\n\nexport const CAPTION_STYLE_OPTIONS = {\n [CAPTION_STYLE.WORD_BG_HIGHLIGHT]: {\n label: \"Highlight Background\",\n value: CAPTION_STYLE.WORD_BG_HIGHLIGHT,\n },\n [CAPTION_STYLE.WORD_BY_WORD]: {\n label: \"Word by Word\",\n value: CAPTION_STYLE.WORD_BY_WORD,\n },\n [CAPTION_STYLE.WORD_BY_WORD_WITH_BG]: {\n label: \"Word with Background\",\n value: CAPTION_STYLE.WORD_BY_WORD_WITH_BG,\n },\n};\n\nexport const CAPTION_FONT = {\n size: 40,\n};\n\nexport const CAPTION_COLOR = {\n text: \"#ffffff\",\n highlight: \"#ff4081\",\n bgColor: \"#8C52FF\",\n};\n\nexport const WORDS_PER_PHRASE = 4;\n\nexport const TIMELINE_ACTION = {\n NONE: \"none\",\n SET_PLAYER_STATE: \"setPlayerState\",\n UPDATE_PLAYER_DATA: \"updatePlayerData\",\n ON_PLAYER_UPDATED: \"onPlayerUpdated\",\n};\n\nexport const TIMELINE_ELEMENT_TYPE = {\n VIDEO: \"video\",\n CAPTION: \"caption\",\n IMAGE: \"image\",\n AUDIO: \"audio\",\n TEXT: \"text\",\n RECT: \"rect\",\n CIRCLE: \"circle\",\n ICON: \"icon\",\n};\n\nexport const PROCESS_STATE = {\n IDLE: \"Idle\",\n PROCESSING: \"Processing\",\n COMPLETED: \"Completed\",\n FAILED: \"Failed\",\n}; ","const imageDimensionsCache = {};\nconst videoMetaCache = {};\nconst audioDurationCache = {};\n\nconst getAudioDuration = (audioSrc) => {\n if (audioDurationCache[audioSrc]) {\n return Promise.resolve(audioDurationCache[audioSrc]);\n }\n return new Promise((resolve, reject) => {\n const audio = document.createElement(\"audio\");\n audio.preload = \"metadata\";\n const isSafeUrl = /^(https?:|blob:|data:audio\\/)/i.test(audioSrc);\n if (!isSafeUrl) {\n throw new Error(\"Unsafe audio source URL\");\n }\n audio.src = audioSrc;\n audio.onloadedmetadata = () => {\n const duration = audio.duration;\n audioDurationCache[audioSrc] = duration;\n resolve(duration);\n };\n audio.onerror = () => {\n reject(new Error(\"Failed to load audio metadata\"));\n };\n });\n};\n\nconst concurrencyLimit = 5;\nlet activeCount = 0;\nconst queue = [];\nfunction runNext() {\n if (queue.length === 0 || activeCount >= concurrencyLimit) return;\n const next = queue.shift();\n if (next) {\n activeCount++;\n next();\n }\n}\nfunction limit(fn) {\n return new Promise((resolve, reject) => {\n const task = () => {\n fn().then(resolve).catch(reject).finally(() => {\n activeCount--;\n runNext();\n });\n };\n if (activeCount < concurrencyLimit) {\n activeCount++;\n task();\n } else {\n queue.push(task);\n }\n });\n}\n\nconst loadImageDimensions = (url) => {\n return new Promise((resolve, reject) => {\n if (typeof document === \"undefined\") {\n reject(new Error(\"getImageDimensions() is only available in the browser.\"));\n return;\n }\n const img = new Image();\n img.onload = () => {\n resolve({ width: img.naturalWidth, height: img.naturalHeight });\n };\n img.onerror = reject;\n img.src = url;\n });\n};\nconst getImageDimensions = (url) => {\n if (imageDimensionsCache[url]) {\n return Promise.resolve(imageDimensionsCache[url]);\n }\n return limit(() => loadImageDimensions(url)).then((dimensions) => {\n imageDimensionsCache[url] = dimensions;\n return dimensions;\n });\n};\n\nconst getVideoMeta = (videoSrc) => {\n if (videoMetaCache[videoSrc]) {\n return Promise.resolve(videoMetaCache[videoSrc]);\n }\n return new Promise((resolve, reject) => {\n const video = document.createElement(\"video\");\n video.preload = \"metadata\";\n const isSafeUrl = /^(https?:|blob:|data:video\\/)/i.test(videoSrc);\n if (!isSafeUrl) {\n reject(new Error(\"Unsafe video source URL\"));\n return;\n }\n video.src = videoSrc;\n video.onloadedmetadata = () => {\n const meta = {\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n };\n videoMetaCache[videoSrc] = meta;\n resolve(meta);\n };\n video.onerror = () => reject(new Error(\"Failed to load video metadata\"));\n });\n};\n\nconst getThumbnail = async (videoUrl, seekTime = 0.1, playbackRate = 1) => {\n return new Promise((resolve, reject) => {\n const video = document.createElement(\"video\");\n video.crossOrigin = \"anonymous\";\n video.muted = true;\n video.playsInline = true;\n video.autoplay = false;\n video.preload = \"auto\";\n video.playbackRate = playbackRate;\n video.style.position = \"absolute\";\n video.style.left = \"-9999px\";\n video.style.top = \"-9999px\";\n video.style.width = \"1px\";\n video.style.height = \"1px\";\n video.style.opacity = \"0\";\n video.style.pointerEvents = \"none\";\n video.style.zIndex = \"-1\";\n let timeoutId;\n const cleanup = () => {\n if (video.parentNode) video.remove();\n if (timeoutId) clearTimeout(timeoutId);\n };\n const handleError = () => {\n cleanup();\n reject(new Error(`Failed to load video: ${video.error?.message || \"Unknown error\"}`));\n };\n const handleSeeked = () => {\n try {\n video.pause();\n const canvas = document.createElement(\"canvas\");\n const width = video.videoWidth || 640;\n const height = video.videoHeight || 360;\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n cleanup();\n reject(new Error(\"Failed to get canvas context\"));\n return;\n }\n ctx.drawImage(video, 0, 0, width, height);\n try {\n const dataUrl = canvas.toDataURL(\"image/jpeg\", 0.8);\n cleanup();\n resolve(dataUrl);\n } catch {\n canvas.toBlob((blob) => {\n if (!blob) {\n cleanup();\n reject(new Error(\"Failed to create Blob\"));\n return;\n }\n const blobUrl = URL.createObjectURL(blob);\n cleanup();\n resolve(blobUrl);\n }, \"image/jpeg\", 0.8);\n }\n } catch (err) {\n cleanup();\n reject(new Error(`Error creating thumbnail: ${err}`));\n }\n };\n video.addEventListener(\"error\", handleError, { once: true });\n video.addEventListener(\"seeked\", handleSeeked, { once: true });\n video.addEventListener(\"loadedmetadata\", () => {\n const playPromise = video.play();\n if (playPromise !== void 0) {\n playPromise.then(() => {\n video.currentTime = seekTime;\n }).catch(() => {\n video.currentTime = seekTime;\n });\n } else {\n video.currentTime = seekTime;\n }\n }, { once: true });\n timeoutId = window.setTimeout(() => {\n cleanup();\n reject(new Error(\"Video loading timed out\"));\n }, 5e3);\n video.src = videoUrl;\n document.body.appendChild(video);\n });\n};\n\nconst extractAudio = async ({\n src,\n playbackRate = 1,\n start = 0,\n end\n}) => {\n if (!src) throw new Error(\"src is required\");\n if (playbackRate <= 0) throw new Error(\"playbackRate must be > 0\");\n const isSafeUrl = /^(https?:|blob:|data:)/i.test(src);\n if (!isSafeUrl) throw new Error(\"Unsafe media source URL\");\n const audioBuffer = await fetchAndDecodeAudio(src);\n const clampedStart = Math.max(0, start || 0);\n const fullDuration = audioBuffer.duration;\n const clampedEnd = Math.min(\n typeof end === \"number\" ? end : fullDuration,\n fullDuration\n );\n if (clampedEnd <= clampedStart)\n throw new Error(\"Invalid range: end must be greater than start\");\n const renderedBuffer = await renderAudioSegment(\n audioBuffer,\n clampedStart,\n clampedEnd,\n playbackRate\n );\n const mp3Blob = await audioBufferToMp3(renderedBuffer);\n return URL.createObjectURL(mp3Blob);\n};\nconst stitchAudio = async (segments, totalDuration) => {\n if (!segments || segments.length === 0) {\n throw new Error(\"At least one audio segment is required\");\n }\n const duration = totalDuration || Math.max(...segments.map((s) => s.e));\n const renderedBuffer = await createAudioTimeline(segments, duration);\n const mp3Blob = await audioBufferToMp3(renderedBuffer);\n return URL.createObjectURL(mp3Blob);\n};\nconst fetchAndDecodeAudio = async (src) => {\n const response = await fetch(src);\n if (!response.ok) throw new Error(`Failed to fetch source: ${response.status}`);\n const arrayBuffer = await response.arrayBuffer();\n return decodeAudioData(arrayBuffer);\n};\nconst decodeAudioData = async (arrayBuffer) => {\n const AudioContextCtor = window.AudioContext || window.webkitAudioContext;\n if (!AudioContextCtor) throw new Error(\"Web Audio API not supported\");\n const audioContext = new AudioContextCtor();\n try {\n return await new Promise((resolve, reject) => {\n audioContext.decodeAudioData(\n arrayBuffer.slice(0),\n (buf) => resolve(buf),\n (err) => reject(err || new Error(\"Failed to decode audio\"))\n );\n });\n } finally {\n audioContext.close();\n }\n};\nconst renderAudioSegment = async (audioBuffer, start, end, playbackRate) => {\n const OfflineAudioContextCtor = window.OfflineAudioContext || window.webkitOfflineAudioContext;\n if (!OfflineAudioContextCtor) throw new Error(\"OfflineAudioContext not supported\");\n const sampleRate = audioBuffer.sampleRate;\n const numChannels = audioBuffer.numberOfChannels;\n const sourceDuration = end - start;\n const renderedFrames = Math.max(\n 1,\n Math.ceil(sourceDuration / playbackRate * sampleRate)\n );\n const offline = new OfflineAudioContextCtor(numChannels, renderedFrames, sampleRate);\n const sourceNode = offline.createBufferSource();\n sourceNode.buffer = audioBuffer;\n sourceNode.playbackRate.value = playbackRate;\n sourceNode.connect(offline.destination);\n sourceNode.start(0, start, sourceDuration);\n return await offline.startRendering();\n};\nconst createAudioTimeline = async (segments, duration) => {\n const OfflineAudioContextCtor = window.OfflineAudioContext || window.webkitOfflineAudioContext;\n if (!OfflineAudioContextCtor) throw new Error(\"OfflineAudioContext not supported\");\n const sampleRate = 44100;\n const totalFrames = Math.ceil(duration * sampleRate);\n const offline = new OfflineAudioContextCtor(2, totalFrames, sampleRate);\n for (const segment of segments) {\n if (segment.s >= segment.e) {\n console.warn(`Invalid segment: start (${segment.s}) >= end (${segment.e})`);\n continue;\n }\n const volume = segment.volume ?? 1;\n if (volume <= 0) {\n console.warn(`Skipping muted segment: ${segment.src}`);\n continue;\n }\n try {\n const audioBuffer = await fetchAndDecodeAudio(segment.src);\n const segmentDuration = segment.e - segment.s;\n const sourceDuration = Math.min(segmentDuration, audioBuffer.duration);\n const source = offline.createBufferSource();\n source.buffer = audioBuffer;\n if (volume !== 1) {\n const gainNode = offline.createGain();\n gainNode.gain.value = volume;\n source.connect(gainNode);\n gainNode.connect(offline.destination);\n } else {\n source.connect(offline.destination);\n }\n source.start(segment.s, 0, sourceDuration);\n } catch (error) {\n console.warn(`Failed to process segment: ${segment.src}`, error);\n }\n }\n return await offline.startRendering();\n};\nconst audioBufferToMp3 = async (buffer) => {\n try {\n const wavArrayBuffer = audioBufferToWavArrayBuffer(buffer);\n const pcmBuffer = await decodeAudioData(wavArrayBuffer);\n return await encodePcmToMp3(pcmBuffer);\n } catch (error) {\n return audioBufferToWavBlob(buffer);\n }\n};\nconst audioBufferToWavArrayBuffer = (buffer) => {\n const numChannels = buffer.numberOfChannels;\n const sampleRate = buffer.sampleRate;\n const numFrames = buffer.length;\n const interleaved = interleave(buffer, numChannels, numFrames);\n const bytesPerSample = 2;\n const blockAlign = numChannels * bytesPerSample;\n const byteRate = sampleRate * blockAlign;\n const dataSize = interleaved.length * bytesPerSample;\n const bufferSize = 44 + dataSize;\n const arrayBuffer = new ArrayBuffer(bufferSize);\n const view = new DataView(arrayBuffer);\n writeString(view, 0, \"RIFF\");\n view.setUint32(4, 36 + dataSize, true);\n writeString(view, 8, \"WAVE\");\n writeString(view, 12, \"fmt \");\n view.setUint32(16, 16, true);\n view.setUint16(20, 1, true);\n view.setUint16(22, numChannels, true);\n view.setUint32(24, sampleRate, true);\n view.setUint32(28, byteRate, true);\n view.setUint16(32, blockAlign, true);\n view.setUint16(34, 16, true);\n writeString(view, 36, \"data\");\n view.setUint32(40, dataSize, true);\n floatTo16BitPCM(view, 44, interleaved);\n return arrayBuffer;\n};\nconst encodePcmToMp3 = async (buffer) => {\n const lamejs = await import('./index-CXhwwSX-.js').then(n => n.i);\n const channels = buffer.numberOfChannels >= 2 ? 2 : 1;\n const targetSampleRate = 22050;\n const downsampledBuffer = downsampleAudioBuffer(buffer, targetSampleRate);\n const kbps = 48;\n const mp3encoder = new lamejs.default.Mp3Encoder(channels, targetSampleRate, kbps);\n const samplesPerFrame = 1152;\n const leftFloat = downsampledBuffer.getChannelData(0);\n const left = floatTo16(leftFloat);\n let right;\n if (channels === 2) {\n const rightFloat = downsampledBuffer.getChannelData(1);\n right = floatTo16(rightFloat);\n }\n const mp3Chunks = [];\n for (let i = 0; i < left.length; i += samplesPerFrame) {\n const leftChunk = left.subarray(i, Math.min(i + samplesPerFrame, left.length));\n let mp3buf;\n if (channels === 2 && right) {\n const rightChunk = right.subarray(i, Math.min(i + samplesPerFrame, right.length));\n mp3buf = mp3encoder.encodeBuffer(leftChunk, rightChunk);\n } else {\n mp3buf = mp3encoder.encodeBuffer(leftChunk);\n }\n if (mp3buf.length > 0) mp3Chunks.push(mp3buf);\n }\n const end = mp3encoder.flush();\n if (end.length > 0) mp3Chunks.push(end);\n return new Blob(mp3Chunks, { type: \"audio/mpeg\" });\n};\nconst audioBufferToWavBlob = (buffer) => {\n const arrayBuffer = audioBufferToWavArrayBuffer(buffer);\n return new Blob([arrayBuffer], { type: \"audio/wav\" });\n};\nconst downsampleAudioBuffer = (buffer, targetSampleRate) => {\n if (buffer.sampleRate === targetSampleRate) {\n return buffer;\n }\n const ratio = buffer.sampleRate / targetSampleRate;\n const newLength = Math.round(buffer.length / ratio);\n const newBuffer = new AudioContext().createBuffer(\n buffer.numberOfChannels,\n newLength,\n targetSampleRate\n );\n for (let channel = 0; channel < buffer.numberOfChannels; channel++) {\n const oldData = buffer.getChannelData(channel);\n const newData = newBuffer.getChannelData(channel);\n for (let i = 0; i < newLength; i++) {\n const oldIndex = Math.floor(i * ratio);\n newData[i] = oldData[oldIndex];\n }\n }\n return newBuffer;\n};\nconst interleave = (buffer, numChannels, numFrames) => {\n if (numChannels === 1) {\n return buffer.getChannelData(0).slice(0, numFrames);\n }\n const result = new Float32Array(numFrames * numChannels);\n const channelData = [];\n for (let ch = 0; ch < numChannels; ch++) {\n channelData[ch] = buffer.getChannelData(ch);\n }\n let writeIndex = 0;\n for (let i = 0; i < numFrames; i++) {\n for (let ch = 0; ch < numChannels; ch++) {\n result[writeIndex++] = channelData[ch][i];\n }\n }\n return result;\n};\nconst floatTo16BitPCM = (view, offset, input) => {\n let pos = offset;\n for (let i = 0; i < input.length; i++, pos += 2) {\n let s = Math.max(-1, Math.min(1, input[i]));\n view.setInt16(pos, s < 0 ? s * 32768 : s * 32767, true);\n }\n};\nconst floatTo16 = (input) => {\n const output = new Int16Array(input.length);\n for (let i = 0; i < input.length; i++) {\n const s = Math.max(-1, Math.min(1, input[i]));\n output[i] = s < 0 ? s * 32768 : s * 32767;\n }\n return output;\n};\nconst writeString = (view, offset, str) => {\n for (let i = 0; i < str.length; i++) {\n view.setUint8(offset + i, str.charCodeAt(i));\n }\n};\n\nconst getScaledDimensions = (width, height, maxWidth, maxHeight) => {\n if (width <= maxWidth && height <= maxHeight) {\n return {\n width: width % 2 === 0 ? width : width - 1,\n height: height % 2 === 0 ? height : height - 1\n };\n }\n const widthRatio = maxWidth / width;\n const heightRatio = maxHeight / height;\n const scale = Math.min(widthRatio, heightRatio);\n let scaledWidth = Math.round(width * scale);\n let scaledHeight = Math.round(height * scale);\n if (scaledWidth % 2 !== 0) {\n scaledWidth -= 1;\n }\n if (scaledHeight % 2 !== 0) {\n scaledHeight -= 1;\n }\n return {\n width: Math.min(scaledWidth, maxWidth),\n height: Math.min(scaledHeight, maxHeight)\n };\n};\nconst getObjectFitSize = (objectFit, elementSize, containerSize) => {\n const elementAspectRatio = elementSize.width / elementSize.height;\n const containerAspectRatio = containerSize.width / containerSize.height;\n switch (objectFit) {\n case \"contain\":\n if (elementAspectRatio > containerAspectRatio) {\n return {\n width: containerSize.width,\n height: containerSize.width / elementAspectRatio\n };\n } else {\n return {\n width: containerSize.height * elementAspectRatio,\n height: containerSize.height\n };\n }\n case \"cover\":\n if (elementAspectRatio > containerAspectRatio) {\n return {\n width: containerSize.height * elementAspectRatio,\n height: containerSize.height\n };\n } else {\n return {\n width: containerSize.width,\n height: containerSize.width / elementAspectRatio\n };\n }\n case \"fill\":\n return {\n width: containerSize.width,\n height: containerSize.height\n };\n default:\n return {\n width: elementSize.width,\n height: elementSize.height\n };\n }\n};\n\nconst blobUrlToFile = async (blobUrl, fileName) => {\n const response = await fetch(blobUrl);\n const blob = await response.blob();\n return new File([blob], fileName, { type: blob.type });\n};\nconst saveAsFile = (content, type, name) => {\n const blob = typeof content === \"string\" ? new Blob([content], { type }) : content;\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = name;\n a.click();\n URL.revokeObjectURL(url);\n};\nconst downloadFile = async (url, filename) => {\n try {\n const response = await fetch(url);\n const blob = await response.blob();\n const downloadUrl = window.URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = downloadUrl;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(downloadUrl);\n } catch (error) {\n console.error(\"Error downloading file:\", error);\n throw error;\n }\n};\n\nconst detectMediaTypeFromUrl = async (url) => {\n try {\n const response = await fetch(url, { method: \"HEAD\" });\n const contentType = response.headers.get(\"Content-Type\");\n if (!contentType) return null;\n if (contentType.startsWith(\"image/\")) return \"image\";\n if (contentType.startsWith(\"video/\")) return \"video\";\n if (contentType.startsWith(\"audio/\")) return \"audio\";\n return null;\n } catch (error) {\n console.error(\"Fetch failed:\", error);\n return null;\n }\n};\n\nexport { blobUrlToFile, detectMediaTypeFromUrl, downloadFile, extractAudio, getAudioDuration, getImageDimensions, getObjectFitSize, getScaledDimensions, getThumbnail, getVideoMeta, limit, saveAsFile, stitchAudio };\n//# sourceMappingURL=index.mjs.map\n","import { generateShortUuid } from \"../../utils/timeline.utils\";\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\nimport { ElementAnimation } from \"../addOns/animation\";\nimport { Position } from \"../../types\";\n\nexport abstract class TrackElement {\n protected id: string;\n protected type: string;\n protected s!: number;\n protected e!: number;\n protected trackId!: string;\n protected name!: string;\n protected animation?: ElementAnimation;\n protected props: Record<string, any>;\n\n constructor(type: string, id?: string) {\n this.id = id ?? `e-${generateShortUuid()}`;\n this.type = type;\n this.props = {\n x: 0,\n y: 0\n };\n }\n\n abstract accept<T>(visitor: ElementVisitor<T>): T;\n\n getId(): string {\n return this.id;\n }\n\n getType(): string {\n return this.type;\n }\n\n getStart(): number {\n return this.s;\n }\n\n getEnd(): number {\n return this.e;\n }\n\n getDuration(): number {\n return this.e - this.s;\n }\n\n getTrackId(): string {\n return this.trackId;\n }\n\n getProps(): Record<string, any> {\n return this.props;\n }\n\n getName(): string {\n return this.name;\n }\n\n getAnimation(): ElementAnimation | undefined {\n return this.animation;\n }\n\n getPosition(): Position {\n return {\n x: this.props?.x ?? 0,\n y: this.props?.y ?? 0\n };\n }\n\n setId(id: string) {\n this.id = id;\n return this;\n }\n\n setType(type: string) {\n this.type = type;\n return this;\n }\n\n setStart(s: number) {\n this.s = Math.max(0, s);\n return this;\n }\n\n setEnd(e: number) {\n this.e = Math.max(this.s ?? 0, e);\n return this;\n }\n\n setTrackId(trackId: string) {\n this.trackId = trackId;\n return this;\n }\n\n setName(name: string) {\n this.name = name;\n return this;\n }\n\n setAnimation(animation?: ElementAnimation) {\n this.animation = animation;\n return this;\n }\n\n setPosition(position: Position) {\n this.props.x = position.x;\n this.props.y = position.y;\n return this;\n }\n\n setProps(props: Record<string, any>) {\n this.props = structuredClone(props);\n return this;\n }\n}\n","import { getObjectFitSize, getVideoMeta } from \"@twick/media-utils\";\nimport { Frame, ObjectFit, Position, Size, VideoProps } from \"../../types\";\nimport { TrackElement } from \"./base.element\";\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\nimport { ElementFrameEffect } from \"../addOns/frame-effect\";\n\nexport class VideoElement extends TrackElement {\n protected baseSize!: Size;\n protected mediaDuration!: number;\n protected parentSize: Size;\n protected backgroundColor!: string;\n protected objectFit: ObjectFit;\n protected frameEffects?: ElementFrameEffect[];\n protected frame!: Frame;\n protected declare props: VideoProps;\n\n constructor(src: string, parentSize: Size) {\n super(TIMELINE_ELEMENT_TYPE.VIDEO);\n this.objectFit = \"cover\";\n this.frameEffects = [];\n this.parentSize = parentSize;\n this.props = {\n src,\n playbackRate: 1,\n time: 0,\n mediaFilter: \"none\",\n volume: 1,\n };\n }\n\n getParentSize() {\n return this.parentSize;\n }\n\n getFrame() {\n return this.frame;\n }\n\n getFrameEffects() {\n return this.frameEffects;\n }\n\n getBackgroundColor() {\n return this.backgroundColor;\n }\n\n getObjectFit() {\n return this.objectFit;\n }\n\n getMediaDuration() {\n return this.mediaDuration;\n }\n\n getStartAt(): number {\n return this.props.time || 0;\n }\n\n getEndAt(): number {\n return this.getDuration() * this.getPlaybackRate();\n }\n\n getSrc(): string {\n return this.props.src;\n }\n\n getPlaybackRate(): number {\n return this.props.playbackRate ?? 1;\n }\n\n getVolume(): number {\n return this.props.volume ?? 1;\n } \n\n override getPosition(): Position {\n return {\n x: this.frame.x ?? 0,\n y: this.frame.y ?? 0\n };\n }\n\n\n async updateVideoMeta(updateFrame: boolean = true) {\n const meta = await getVideoMeta(this.props.src);\n\n if (updateFrame) {\n const baseSize = getObjectFitSize(\n \"contain\",\n { width: meta.width, height: meta.height },\n this.parentSize\n );\n this.frame = {\n ...this.frame,\n size: [baseSize.width, baseSize.height],\n };\n }\n this.mediaDuration = meta.duration;\n }\n\n override setPosition(position: Position) {\n this.frame.x = position.x;\n this.frame.y = position.y;\n return this;\n }\n\n async setSrc(src: string) {\n this.props.src = src;\n await this.updateVideoMeta();\n return this;\n }\n\n setMediaDuration(mediaDuration: number) {\n this.mediaDuration = mediaDuration;\n return this;\n }\n\n setParentSize(parentSize: Size) {\n this.parentSize = structuredClone(parentSize);\n return this;\n }\n\n setObjectFit(objectFit: ObjectFit) {\n this.objectFit = objectFit;\n return this;\n }\n\n setFrame(frame: Frame) {\n this.frame = structuredClone(frame);\n return this;\n }\n\n setPlaybackRate(playbackRate: number) {\n this.props.playbackRate = playbackRate;\n return this;\n }\n\n setStartAt(time: number) {\n this.props.time = Math.max(0, time);\n return this;\n }\n\n setMediaFilter(mediaFilter: string) {\n this.props.mediaFilter = mediaFilter;\n return this;\n }\n\n setVolume(volume: number) {\n this.props.volume = volume;\n return this;\n }\n\n setBackgroundColor(backgroundColor: string) {\n this.backgroundColor = backgroundColor;\n return this;\n }\n\n override setProps(props: Omit<any, \"src\">) {\n this.props = {\n ...structuredClone(props),\n src: this.props.src,\n };\n return this;\n }\n\n setFrameEffects(frameEffects?: ElementFrameEffect[]) {\n this.frameEffects = frameEffects;\n return this;\n }\n\n addFrameEffect(frameEffect: ElementFrameEffect) {\n this.frameEffects?.push(frameEffect);\n return this;\n }\n\n accept<T>(visitor: ElementVisitor<T>): T {\n return visitor.visitVideoElement(this);\n }\n}\n","import { extractAudio, stitchAudio } from \"@twick/media-utils\";\nimport { TrackElement } from \"../core/elements/base.element\";\nimport { VideoElement } from \"../core/elements/video.element\";\nimport { Track } from \"../core/track/track\";\nimport { TrackJSON } from \"../types\";\n\nexport const getDecimalNumber = (num: number, precision = 3) => {\n return Number(num.toFixed(precision));\n};\n\nexport const getTotalDuration = (tracks: TrackJSON[]) => {\n return (tracks || []).reduce(\n (maxDuration, timeline) =>\n Math.max(\n maxDuration,\n (timeline?.elements || []).reduce(\n (timelineDuration, element) => Math.max(timelineDuration, element.e),\n 0\n )\n ),\n 0\n );\n};\n\nexport const generateShortUuid = (): string => {\n return \"xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0,\n v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nexport const getCurrentElements = (\n currentTime: number,\n tracks: Track[]\n): Array<Readonly<TrackElement>> => {\n const currentElements: Array<Readonly<TrackElement>> = [];\n if (tracks?.length) {\n for (let i = 0; i < tracks.length; i++) {\n if (tracks[i]) {\n const elements = tracks[i].getElements();\n for (let j = 0; j < elements.length; j++) {\n const element = elements[j];\n if (\n element.getStart() <= currentTime &&\n element.getEnd() >= currentTime\n ) {\n currentElements.push(element);\n }\n }\n }\n }\n }\n return currentElements;\n};\n\nexport const canSplitElement = (element: TrackElement, currentTime: number) => {\n return element.getStart() <= currentTime && element.getEnd() >= currentTime;\n};\n\nexport const isElementId = (id: string) => id.startsWith(\"e-\");\nexport const isTrackId = (id: string) => id.startsWith(\"t-\");\n\nexport const extractVideoAudio = async (tracks: Track[], duration: number) => {\n const videoSegments: {\n src: string;\n startAt: number;\n endAt: number;\n s: number;\n e: number;\n volume: number;\n playbackRate: number;\n }[] = [];\n tracks.forEach((track) =>\n track.getElements().forEach((element) => {\n if (element instanceof VideoElement) {\n videoSegments.push({\n src: element.getSrc(),\n startAt: element.getStartAt(),\n endAt: element.getEndAt(),\n s: element.getStart(),\n e: element.getEnd(),\n volume: element.getVolume(),\n playbackRate: element.getPlaybackRate(),\n });\n }\n })\n );\n\n const videoAudioPromises = videoSegments.map((segment) => {\n return extractAudio({\n src: segment.src,\n startAt: segment.startAt,\n endAt: segment.endAt,\n volume: segment.volume,\n playbackRate: segment.playbackRate,\n });\n });\n\n const audioUrls = await Promise.all(videoAudioPromises);\n const extractedAudio = await stitchAudio(\n audioUrls.map((url: string, index: number) => ({\n src: url,\n s: videoSegments[index].s,\n e: videoSegments[index].e,\n volume: videoSegments[index].volume,\n })),\n duration\n );\n\n return extractedAudio;\n};\n","import { getAudioDuration } from \"@twick/media-utils\";\nimport { TrackElement } from \"./base.element\";\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\nimport { AudioProps } from \"../../types\";\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\n\nexport class AudioElement extends TrackElement {\n protected mediaDuration!: number;\n protected declare props: AudioProps;\n\n constructor(src: string) {\n super(TIMELINE_ELEMENT_TYPE.AUDIO);\n this.props = {\n src,\n time: 0,\n playbackRate: 1,\n volume: 1,\n loop: false,\n };\n }\n\n getMediaDuration() {\n return this.mediaDuration;\n }\n\n getStartAt(): number {\n return this.props.time || 0;\n }\n\n getEndAt(): number {\n return this.getDuration() * this.getPlaybackRate();\n }\n\n getSrc(): string {\n return this.props.src;\n }\n\n getPlaybackRate(): number {\n return this.props.playbackRate ?? 1;\n }\n\n getVolume(): number {\n return this.props.volume ?? 1;\n } \n\n async updateAudioMeta() {\n this.mediaDuration = await getAudioDuration(this.props.src);\n }\n\n async setSrc(src: string) {\n this.props.src = src;\n await this.updateAudioMeta();\n return this;\n }\n\n setMediaDuration(mediaDuration: number) {\n this.mediaDuration = mediaDuration;\n return this;\n }\n\n setVolume(volume: number) {\n this.props.volume = volume;\n return this;\n }\n\n setLoop(loop: boolean) {\n this.props.loop = loop;\n return this;\n }\n\n setStartAt(time: number) {\n this.props.time = Math.max(0, time);\n return this;\n }\n\n setPlaybackRate(playbackRate: number) {\n this.props.playbackRate = playbackRate;\n return this;\n }\n\n override setProps(props: Omit<any, \"src\">) {\n this.props = {\n ...structuredClone(props),\n src: this.props.src,\n };\n return this;\n }\n\n accept<T>(visitor: ElementVisitor<T>): T {\n return visitor.visitAudioElement(this);\n }\n}\n","import { getObjectFitSize, getImageDimensions } from \"@twick/media-utils\";\nimport { Frame, ImageProps, ObjectFit, Position, Size } from \"../../types\";\nimport { TrackElement } from \"./base.element\";\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\nimport { ElementFrameEffect } from \"../addOns/frame-effect\";\n\nexport class ImageElement extends TrackElement {\n protected backgroundColor!: string;\n protected parentSize: Size;\n protected objectFit: ObjectFit;\n frameEffects?: ElementFrameEffect[];\n frame!: Frame;\n protected declare props: ImageProps;\n\n constructor(src: string, parentSize: Size) {\n super(TIMELINE_ELEMENT_TYPE.IMAGE);\n this.parentSize = parentSize;\n this.objectFit = \"cover\";\n this.frameEffects = [];\n this.props = {\n src,\n mediaFilter: \"none\",\n };\n this.frame = {\n x: 0,\n y: 0\n }\n }\n\n getParentSize() {\n return this.parentSize;\n }\n\n getFrame() {\n return this.frame;\n }\n\n getFrameEffects() {\n return this.frameEffects;\n } \n\n getBackgroundColor() {\n return this.backgroundColor;\n }\n\n getObjectFit() {\n return this.objectFit;\n }\n\n override getPosition(): Position {\n return {\n x: this.frame.x ?? 0,\n y: this.frame.y ?? 0\n };\n }\n\n async updateImageMeta(updateFrame: boolean = true) {\n const meta = await getImageDimensions(this.props.src);\n if (updateFrame) {\n const baseSize = getObjectFitSize(\n \"contain\",\n { width: meta.width, height: meta.height },\n this.parentSize\n );\n this.frame = {\n size: [baseSize.width, baseSize.height],\n ...this.frame,\n }\n }\n }\n\n override setPosition(position: Position) {\n this.frame.x = position.x;\n this.frame.y = position.y;\n return this;\n }\n\n async setSrc(src: string) {\n this.props.src = src;\n await this.updateImageMeta();\n return this;\n }\n\n setObjectFit(objectFit: ObjectFit) {\n this.objectFit = objectFit;\n return this;\n }\n\n setFrame(frame: Frame) {\n this.frame = structuredClone(frame);\n return this;\n }\n\n\n setParentSize(parentSize: Size) {\n this.parentSize = structuredClone(parentSize);\n return this;\n }\n\n setMediaFilter(mediaFilter: string) {\n this.props.mediaFilter = mediaFilter;\n return this;\n }\n\n setBackgroundColor(backgroundColor: string) {\n this.backgroundColor = backgroundColor;\n return this;\n }\n\n override setProps(props: Omit<any, \"src\">) {\n this.props = {...structuredClone(props), src: this.props.src};\n return this;\n }\n\n setFrameEffects(frameEffects? : ElementFrameEffect[]) {\n this.frameEffects = frameEffects;\n return this;\n }\n\n addFrameEffect(frameEffect: ElementFrameEffect) {\n this.frameEffects?.push(frameEffect);\n return this;\n }\n\n accept<T>(visitor: ElementVisitor<T>): T {\n return visitor.visitImageElement(this);\n }\n\n}\n","import { TextAlign, TextProps } from \"../../types\";\nimport { TrackElement } from \"./base.element\";\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\nimport { ElementTextEffect } from \"../addOns/text-effect\";\n\nexport class TextElement extends TrackElement {\n protected textEffect?: ElementTextEffect;\n protected declare props: TextProps;\n\n constructor(text: string) {\n super(TIMELINE_ELEMENT_TYPE.TEXT);\n this.props = {\n text,\n fill: \"#888888\" //default-grey\n };\n }\n\n getTextEffect() {\n return this.textEffect;\n }\n\n getText(): string {\n return this.props.text;\n }\n\n getStrokeColor() {\n return this.props.stroke;\n }\n\n getLineWidth() {\n return this.props.lineWidth;\n }\n\n setText(text: string) {\n this.props.text = text;\n return this;\n }\n\n setFill(fill: string) {\n this.props.fill = fill;\n return this;\n }\n\n setRotation(rotation: number) {\n this.props.rotation = rotation;\n return this;\n }\n\n setFontSize(fontSize: number) {\n this.props.fontSize = fontSize;\n return this;\n }\n\n setFontFamily(fontFamily: string) {\n this.props.fontFamily = fontFamily;\n return this;\n }\n\n setFontWeight(fontWeight: number) {\n this.props.fontWeight = fontWeight;\n return this;\n }\n\n setFontStyle(fontStyle: \"normal\" | \"italic\") {\n this.props.fontStyle = fontStyle;\n return this;\n }\n\n setTextEffect(textEffect?: ElementTextEffect) {\n this.textEffect = textEffect;\n return this;\n }\n\n setTextAlign(textAlign: TextAlign) {\n this.props.textAlign = textAlign;\n return this;\n }\n\n setStrokeColor(stroke: string) {\n this.props.stroke = stroke;\n return this;\n }\n\n setLineWidth(lineWidth: number) {\n this.props.lineWidth = lineWidth;\n return this;\n }\n\n accept<T>(visitor: ElementVisitor<T>): T {\n return visitor.visitTextElement(this);\n }\n}\n","import { TrackElement } from \"./base.element\";\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\n\nexport class CaptionElement extends TrackElement {\n protected t: string;\n\n constructor(t: string, start: number, end: number) {\n super(TIMELINE_ELEMENT_TYPE.CAPTION);\n this.t = t;\n this.s = start;\n this.e = end;\n }\n\n getText(): string {\n return this.t;\n }\n\n setText(t: string) {\n this.t = t;\n return this;\n }\n\n accept<T>(visitor: ElementVisitor<T>): T {\n return visitor.visitCaptionElement(this);\n }\n\n}\n","import { TrackElement } from \"./base.element\";\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\nimport { IconProps, Size } from \"../../types\";\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\n\nexport class IconElement extends TrackElement {\n protected declare props: IconProps;\n constructor(src: string, size: Size) {\n super(TIMELINE_ELEMENT_TYPE.ICON);\n this.props = {\n src,\n size,\n };\n }\n\n accept<T>(visitor: ElementVisitor<T>): T {\n return visitor.visitIconElement(this);\n }\n}\n","import { TrackElement } from \"./base.element\";\nimport type { ElementVisitor } from \"../visitor/element-visitor\";\nimport { CircleProps } from \"../../types\";\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\n\nexport class CircleElement extends TrackElement {\n protected declare props: CircleProps;\n constructor(fill: string, radius: number) {\n super(TIMELINE_ELEMENT_TYPE.CIRCLE);\n this.props = {\n radius,\n fill,\n };\n }\n\n getFill(): string {\n return this.props.fill;\n }\n\n getRadius(): number {\n return this.props.radius;\n }\n\n setFill(fill: string) {\n this.props.fill = fill;\n return this;\n }\n\n setRadius(radius: number) {\n this.props.radius = radius;\n return this;\n }\n \n\n accept<T>(visitor: ElementVisitor<T>): T {\n return visitor.visitCircleElement(this);\n }\n}\n","import { RectProps, Size } from \"../../types\";\nimport { TrackElement } from \"./base.element\";\nimport { ElementVisitor } from \"../visitor/element-visitor\";\nimport { TIMELINE_ELEMENT_TYPE } from \"../../utils/constants\";\n\nexport class RectElement extends TrackElement{\n protected declare props: RectProps;\n\n constructor(fill:string, size: Size) {\n super(TIMELINE_ELEMENT_TYPE.RECT); \n this.props = {\n width: size.width,\n height: size.height,\n fill,\n };\n }\n\n setFill(fill: string) { \n this.props.fill = fill;\n return this;\n }\n\n setSize(size: Size) {\n this.props.width = size.width;\n this.props.height = size.height;\n return this;\n }\n\n accept<T>(visitor: ElementVisitor<T>): T {\n return visitor.visitRectElement(this);\n }\n}","import { Animation } from \"../../types\";\n\nexport class ElementAnimation {\n private name: string;\n private interval?: number;\n private intensity?: number;\n private animate?: \"enter\" | \"exit\" | \"both\";\n private mode?: \"in\" | \"out\";\n private direction?: \"up\" | \"down\" | \"left\" | \"right\" | \"center\";\n\n constructor(name: string) {\n this.name = name;\n }\n\n getName() {\n return this.name;\n }\n\n getInterval() {\n return this.interval;\n } \n\n getIntensity() {\n return this.intensity;\n }\n\n getAnimate() {\n return this.animate;\n }\n\n getMode() {\n return this.mode;\n }\n\n getDirection() {\n return this.direction;\n }\n\n setInterval(interval?: number) {\n this.interval = interval;\n return this;\n }\n\n setIntensity(intensity?: number) {\n this.intensity = intensity;\n return this;\n }\n\n setAnimate(animate?: \"enter\" | \"exit\" | \"both\") {\n this.animate = animate;\n return this;\n }\n\n setMode(mode?: \"in\" | \"out\") {\n this.mode = mode;\n return this;\n }\n\n setDirection(direction?: \"up\" | \"down\" | \"left\" | \"right\" | \"center\") {\n this.direction = direction;\n return this;\n }\n\n toJSON(): Animation {\n return {\n name: this.name,\n interval: this.interval,\n intensity: this.intensity,\n animate: this.animate,\n mode: this.mode,\n direction: this.direction,\n };\n }\n\n static fromJSON(json: Animation) {\n const animation = new ElementAnimation(json.name);\n animation.setInterval(json.interval);\n animation.setIntensity(json.intensity);\n animation.setAnimate(json.animate);\n animation.setMode(json.mode);\n animation.setDirection(json.direction);\n return animation;\n };\n}\n\n\n","import { FrameEffect, FrameEffectProps } from \"../../types\";\n\nexport class ElementFrameEffect {\n private s: number;\n private e: number;\n private props!: FrameEffectProps;\n constructor(start: number, end: number) {\n this.s = start;\n this.e = end;\n }\n\n setProps(props: FrameEffectProps) {\n this.props = props;\n return this;\n }\n\n getProps() {\n return this.props;\n }\n\n getStart() {\n return this.s;\n }\n\n getEnd() {\n return this.e;\n }\n\n setStart(start: number) {\n this.s = start;\n return this;\n }\n\n setEnd(end: number) {\n this.e = end;\n return this;\n }\n\n toJSON(): FrameEffect {\n return {\n s: this.s,\n e: this.e,\n props: this.props,\n };\n }\n \n static fromJSON(json: FrameEffect) {\n const effect = new ElementFrameEffect(json.s, json.e);\n effect.setProps(json.props);\n return effect;\n }\n}\n","import { TextEffect } from \"../../types\";\n\nexport class ElementTextEffect {\n private name: string;\n private duration?: number;\n private delay?: number;\n private bufferTime?: number;\n\n constructor(name: string) {\n this.name = name;\n }\n\n getName() {\n return this.name;\n }\n\n getDuration() {\n return this.duration;\n } \n\n getDelay() {\n return this.delay;\n }\n\n getBufferTime() {\n return this.bufferTime;\n }\n\n setDuration(duration?: number) {\n this.duration = duration;\n return this;\n }\n\n setDelay(delay?: number) {\n this.delay = delay;\n return this;\n }\n\n setBufferTime(bufferTime?: number) {\n this.bufferTime = bufferTime;\n return this;\n }\n\n toJSON(): TextEffect {\n return {\n name: this.name,\n delay: this.delay,\n duration: this.duration,\n bufferTime: this.bufferTime,\n };\n }\n\n static fromJSON(json: TextEffect) {\n const effect = new ElementTextEffect(json.name);\n effect.setDelay(json.delay);\n effect.setDuration(json.duration);\n effect.setBufferTime(json.bufferTime);\n return effect;\n };\n}\n\n\n","import { ElementJSON } from \"../../types\";\nimport { VideoElement } from \"../elements/video.element\";\nimport { AudioElement } from \"../elements/audio.element\";\nimport { ImageElement } from \"../elements/image.element\";\nimport { TextElement } from \"../elements/text.element\";\nimport { CaptionElement } from \"../elements/caption.element\";\nimport { IconElement } from \"../elements/icon.element\";\nimport { CircleElement } from \"../elements/circle.element\";\nimport { RectElement } from \"../elements/rect.element\";\nimport { TrackElement } from \"../elements/base.element\";\nimport { ElementAnimation } from \"../addOns/animation\";\nimport { ElementFrameEffect } from \"../addOns/frame-effect\";\nimport { ElementTextEffect } from \"../addOns/text-effect\";\n\nexport class ElementDeserializer {\n private static deserializeBaseElement(element: TrackElement, json: ElementJSON): void {\n if (json.id) element.setId(json.id);\n if (json.trackId) element.setTrackId(json.trackId);\n if (json.s !== undefined) element.setStart(json.s);\n if (json.e !== undefined) element.setEnd(json.e);\n if (json.props) element.setProps(json.props);\n if (json.animation) element.setAnimation(ElementAnimation.fromJSON(json.animation));\n }\n\n static deserializeVideoElement(json: ElementJSON): VideoElement {\n const parentSize = json.frame && json.frame.size \n ? { width: json.frame.size[0], height: json.frame.size[1] } \n : { width: 0, height: 0 };\n \n const videoElement = new VideoElement(json.props?.src || \"\", parentSize);\n ElementDeserializer.deserializeBaseElement(videoElement, json);\n \n if (json.mediaDuration !== undefined) videoElement.setMediaDuration(json.mediaDuration);\n if (json.objectFit) videoElement.setObjectFit(json.objectFit);\n if (json.frame) videoElement.setFrame(json.frame);\n if (json.frameEffects) videoElement.setFrameEffects(json.frameEffects.map((frameEffect) => ElementFrameEffect.fromJSON(frameEffect)));\n if (json.backgroundColor) videoElement.setBackgroundColor(json.backgroundColor);\n \n return videoElement;\n }\n\n static deserializeAudioElement(json: ElementJSON): AudioElement {\n const audioElement = new AudioElement(json.props?.src || \"\");\n ElementDeserializer.deserializeBaseElement(audioElement, json);\n \n if (json.mediaDuration !== undefined) audioElement.setMediaDuration(json.mediaDuration);\n \n return audioElement;\n }\n\n static deserializeImageElement(json: ElementJSON): ImageElement {\n const parentSize = json.frame && json.frame.size \n ? { width: json.frame.size[0], height: json.frame.size[1] } \n : { width: 0, height: 0 };\n \n const imageElement = new ImageElement(json.props?.src || \"\", parentSize);\n ElementDeserializer.deserializeBaseElement(imageElement, json);\n \n if (json.objectFit) imageElement.setObjectFit(json.objectFit);\n if (json.frame) imageElement.setFrame(json.frame);\n if (json.frameEffects) imageElement.setFrameEffects(json.frameEffects.map((frameEffect) => ElementFrameEffect.fromJSON(frameEffect)));\n if (json.backgroundColor) imageElement.setBackgroundColor(json.backgroundColor);\n \n return imageElement;\n }\n\n static deserializeTextElement(json: ElementJSON): TextElement {\n const textElement = new TextElement(json.props?.text || \"\");\n ElementDeserializer.deserializeBaseElement(textElement, json);\n \n if (json.textEffect) textElement.setTextEffect(ElementTextEffect.fromJSON(json.textEffect));\n \n return textElement;\n }\n\n static deserializeCaptionElement(json: ElementJSON): CaptionElement {\n const captionElement = new CaptionElement(\n json.t || \"\",\n json.s || 0,\n json.e || 0\n );\n ElementDeserializer.deserializeBaseElement(captionElement, json);\n \n return captionElement;\n }\n\n static deserializeIconElement(json: ElementJSON): IconElement {\n const size = json.props?.size \n ? { width: json.props.size[0], height: json.props.size[1] }\n : { width: 0, height: 0 };\n \n const iconElement = new IconElement(\n json.props?.src || \"\",\n size\n );\n ElementDeserializer.deserializeBaseElement(iconElement, json);\n \n return iconElement;\n }\n\n static deserializeCircleElement(json: ElementJSON): CircleElement {\n const circleElement = new CircleElement(\n json.props?.fill || \"\",\n json.props?.radius || 0\n );\n ElementDeserializer.deserializeBaseElement(circleElement, json);\n \n return circleElement;\n }\n\n static deserializeRectElement(json: ElementJSON): RectElement {\n const rectElement = new RectElement(\n json.props?.fill || \"\",\n { \n width: json.props?.width || 0, \n height: json.props?.height || 0 \n }\n );\n ElementDeserializer.deserializeBaseElement(rectElement, json);\n \n return rectElement;\n }\n\n static fromJSON(json: ElementJSON): TrackElement | null{\n try {\n switch (json.type) {\n case \"video\":\n return ElementDeserializer.deserializeVideoElement(json);\n case \"audio\":\n return ElementDeserializer.deserializeAudioElement(json);\n case \"image\":\n return ElementDeserializer.deserializeImageElement(json);\n case \"text\":\n return ElementDeserializer.deserializeTextElement(json);\n case \"caption\":\n return ElementDeserializer.deserializeCaptionElement(json);\n case \"icon\":\n return ElementDeserializer.deserializeIconElement(json);\n case \"circle\":\n return ElementDeserializer.deserializeCircleElement(json);\n case \"rect\":\n return ElementDeserializer.deserializeRectElement(json);\n default:\n throw new Error(`Unknown element type: ${json.type}`);\n }\n } catch(error) {\n console.error(\"Error deserializing element:\", error);\n return null;\n }\n }\n}\n","import { ElementJSON } from \"../../types\";\nimport { ElementVisitor } from \"./element-visitor\";\nimport { VideoElement } from \"../elements/video.element\";\nimport { AudioElement } from \"../elements/audio.element\";\nimport { ImageElement } from \"../elements/image.element\";\nimport { TextElement } from \"../elements/text.element\";\nimport { CaptionElement } from \"../elements/caption.element\";\nimport { RectElement } from \"../elements/rect.element\";\nimport { CircleElement } from \"../elements/circle.element\";\nimport { IconElement } from \"../elements/icon.element\";\nimport { TrackElement } from \"../elements/base.element\";\n\nexport class ElementSerializer implements ElementVisitor<ElementJSON> {\n serializeElement(element: TrackElement): ElementJSON {\n return {\n id: element.getId(),\n trackId: element.getTrackId(),\n type: element.getType(),\n name: element.getName(),\n s: element.getStart(),\n e: element.getEnd(),\n props: structuredClone(element.getProps()),\n animation: element.getAnimation()?.toJSON(),\n };\n }\n visitVideoElement(element: VideoElement): ElementJSON {\n return {\n ...this.serializeElement(element),\n frame: structuredClone(element.getFrame()),\n frameEffects: element.getFrameEffects()?.map((frameEffect) => frameEffect.toJSON()),\n backgroundColor: element.getBackgroundColor(),\n objectFit: element.getObjectFit(),\n mediaDuration: element.getMediaDuration(),\n };\n }\n\n visitAudioElement(element: AudioElement): ElementJSON {\n return {\n ...this.serializeElement(element),\n mediaDuration: element.getMediaDuration(),\n };\n }\n\n visitImageElement(element: ImageElement): ElementJSON {\n return {\n ...this.serializeElement(element),\n frame: structuredClone(element.getFrame()),\n frameEffects: element.getFrameEffects()?.map((frameEffect) => frameEffect.toJSON()),\n backgroundColor: element.getBackgroundColor(),\n objectFit: element.getObjectFit(),\n };\n }\n\n visitTextElement(element: TextElement): ElementJSON {\n return {\n ...this.serializeElement(element),\n textEffect: element.getTextEffect()?.toJSON(),\n };\n }\n\n visitCaptionElement(element: CaptionElement): ElementJSON {\n return {\n ...this.serializeElement(element),\n t: structuredClone(element.getText()),\n };\n }\n\n visitIconElement(element: IconElement): ElementJSON {\n return {\n ...this.serializeElement(element),\n };\n }\n\n visitCircleElement(element: CircleElement): ElementJSON {\n return {\n ...this.serializeElement(element),\n };\n }\n\n visitRectElement(element: RectElement): ElementJSON {\n return {\n ...this.serializeElement(element),\n };\n }\n}\n","import { ElementVisitor } from \"./element-visitor\";\nimport { VideoElement } from \"../elements/video.element\";\nimport { AudioElement } from \"../elements/audio.element\";\nimport { ImageElement } from \"../elements/image.element\";\nimport { TextElement } from \"../elements/text.element\";\nimport { CaptionElement } from \"../elements/caption.element\";\nimport { IconElement } from \"../elements/icon.element\";\nimport { CircleElement } from \"../elements/circle.element\";\nimport { RectElement } from \"../elements/rect.element\";\n\nexport class ValidationError extends Error {\n constructor(\n message: string,\n public errors: string[],\n public warnings: string[] = []\n ) {\n super(message);\n this.name = 'ValidationError';\n }\n}\n\nexport class ElementValidator implements ElementVisitor<boolean> {\n private validateBasicProperties(element: any): { errors: string[]; warnings: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check required basic properties\n if (!element.getId()) {\n errors.push(\"Element must have an ID\");\n }\n\n if (!element.getType()) {\n errors.push(\"Element must have a type\");\n }\n\n if (element.getStart() === undefined || element.getStart() === null) {\n errors.push(\"Element must have a start time (s)\");\n }\n\n if (element.getEnd() === undefined || element.getEnd() === null) {\n errors.push(\"Element must have an end time (e)\");\n }\n\n if (element.getStart() !== undefined && element.getEnd() !== undefined) {\n if (element.getStart() < 0) {\n errors.push(\"Start time cannot be negative\");\n }\n \n if (element.getEnd() <= element.getStart()) {\n errors.push(\"End time must be greater than start time\");\n }\n }\n\n if (!element.getName()) {\n warnings.push(\"Element should have a name for better identification\");\n }\n\n if (!element.getTrackId()) {\n warnings.push(\"Element should have a track Id\");\n }\n\n return { errors, warnings };\n }\n\n private validateTextElement(element: TextElement): { errors: string[]; warnings: string[] } {\n const basicValidation = this.validateBasicProperties(element);\n const errors = [...basicValidation.errors];\n const warnings = [...basicValidation.warnings];\n\n // Check text-specific properties\n const props = element.getProps();\n if (!props?.text) {\n errors.push(\"Text element must have text content\");\n }\n\n if (props?.fontSize !== undefined && props.fontSize <= 0) {\n errors.push(\"Font size must be greater than 0\");\n }\n\n if (props?.fontWeight !== undefined && props.fontWeight < 0) {\n errors.push(\"Font weight cannot be negative\");\n }\n\n return { errors, warnings };\n }\n\n private validateVideoElement(element: VideoElement): { errors: string[]; warnings: string[] } {\n const basicValidation = this.validateBasicProperties(element);\n const errors = [...basicValidation.errors];\n const warnings = [...basicValidation.warnings];\n\n // Check video-specific properties\n const props = element.getProps();\n if (!props?.src) {\n errors.push(\"Video element must have a source URL\");\n }\n\n if (props?.volume !== undefined && (props.volume < 0 || props.volume > 1)) {\n errors.push(\"Volume must be between 0 and 1\");\n }\n\n if (props?.playbackRate !== undefined && props.playbackRate <= 0) {\n errors.push(\"Playback rate must be greater than 0\");\n }\n\n // Note: frame property is protected, so we can't validate it directly\n // This would need to be validated through a public method if needed\n\n return { errors, warnings };\n }\n\n private validateAudioElement(element: AudioElement): { errors: string[]; warnings: string[] } {\n const basicValidation = this.validateBasicProperties(element);\n const errors = [...basicValidation.errors];\n const warnings = [...basicValidation.warnings];\n\n // Check audio-specific properties\n const props = element.getProps();\n if (!props?.src) {\n errors.push(\"Audio element must have a source URL\");\n }\n\n if (props?.volume !== undefined && (props.volume < 0 || props.volume > 1)) {\n errors.push(\"Volume must be between 0 and 1\");\n }\n\n if (props?.playbackRate !== undefined && props.playbackRate <= 0) {\n errors.push(\"Playback rate must be greater than 0\");\n }\n\n return { errors, warnings };\n }\n\n private validateImageElement(element: ImageElement): { errors: string[]; warnings: string[] } {\n const basicValidation = this.validateBasicProperties(element);\n const errors = [...basicValidation.errors];\n const warnings = [...basicValidation.warnings];\n\n // Check image-specific properties\n const props = element.getProps();\n if (!props?.src) {\n errors.push(\"Image element must have a source URL\");\n }\n\n // Note: frame property is protected, so we can't validate it directly\n // This would need to be validated through a public method if needed\n\n return { errors, warnings };\n }\n\n private validateCaptionElement(element: CaptionElement): { errors: string[]; warnings: string[] } {\n const basicValidation = this.validateBasicProperties(element);\n const errors = [...basicValidation.errors];\n const warnings = [...basicValidation.warnings];\n\n // Check caption-specific properties\n const props = element.getProps();\n if (!props?.text) {\n errors.push(\"Caption element must have text content\");\n }\n\n return { errors, warnings };\n }\n\n private validateIconElement(element: IconElement): { errors: string[]; warnings: string[] } {\n const basicValidation = this.validateBasicProperties(element);\n const errors = [...basicValidation.errors];\n const warnings = [...basicValidation.warnings];\n\n // Check icon-specific properties\n const props = element.getProps();\n if (!props?.icon) {\n errors.push(\"Icon element must have an icon name\");\n }\n\n // Note: frame property is protected, so we can't validate it directly\n // This would need to be validated through a public method if needed\n\n return { errors, warnings };\n }\n\n private validateCircleElement(element: CircleElement): { errors: string[]; warnings: string[] } {\n const basicValidation = this.validateBasicProperties(element);\n const errors = [...basicValidation.errors];\n const warnings = [...basicValidation.warnings];\n\n // Check circle-specific properties\n const props = element.getProps();\n if (props?.radius !== undefined && props.radius <= 0) {\n errors.push(\"Circle radius must be greater than 0\");\n }\n\n // Note: frame property is protected, so we can't validate it directly\n // This would need to be validated through a public method if needed\n\n return { errors, warnings };\n }\n\n private validateRectElement(element: RectElement): { errors: string[]; warnings: string[] } {\n const basicValidation = this.validateBasicProperties(element);\n const errors = [...basicValidation.errors];\n const warnings = [...basicValidation.warnings];\n\n // Check rectangle-specific properties\n const props = element.getProps();\n if (props?.width !== undefined && props.width <= 0) {\n errors.push(\"Rectangle width must be greater than 0\");\n }\n\n if (props?.height !== undefined && props.height <= 0) {\n errors.push(\"Rectangle height must be greater than 0\");\n }\n\n // Note: frame property is protected, so we can't validate it directly\n // This would need to be validated through a public method if needed\n\n return { errors, warnings };\n }\n\n visitVideoElement(element: VideoElement): boolean {\n const validation = this.validateVideoElement(element);\n \n if (validation.errors.length > 0) {\n throw new ValidationError(\n `Video element validation failed: ${validation.errors.join(', ')}`,\n validation.errors,\n validation.warnings\n );\n }\n \n return true;\n }\n\n visitAudioElement(element: AudioElement): boolean {\n const validation = this.validateAudioElement(element);\n \n if (validation.errors.length > 0) {\n throw new ValidationError(\n `Audio element validation failed: ${validation.errors.join(', ')}`,\n validation.errors,\n validation.warnings\n );\n }\n \n return true;\n }\n\n visitImageElement(element: ImageElement): boolean {\n const validation = this.validateImageElement(element);\n \n if (validation.errors.length > 0) {\n throw new ValidationError(\n `Image element validation failed: ${validation.errors.join(', ')}`,\n validation.errors,\n validation.warnings\n );\n }\n \n return true;\n }\n\n visitTextElement(element: TextElement): boolean {\n const validation = this.validateTextElement(element);\n \n if (validation.errors.length > 0) {\n throw new ValidationError(\n `Text element validation failed: ${validation.errors.join(', ')}`,\n validation.errors,\n validation.warnings\n );\n }\n \n return true;\n }\n\n visitCaptionElement(element: CaptionElement): boolean {\n const validation = this.validateCaptionElement(element);\n \n if (validation.errors.length > 0) {\n throw new ValidationError(\n `Caption element validation failed: ${validation.errors.join(', ')}`,\n validation.errors,\n validation.warnings\n );\n }\n \n return true;\n }\n\n visitIconElement(element: IconElement): boolean {\n const validation = this.validateIconElement(element);\n \n if (validation.errors.length > 0) {\n throw new ValidationError(\n `Icon element validation failed: ${validation.errors.join(', ')}`,\n validation.errors,\n validation.warnings\n );\n }\n \n return true;\n }\n\n visitCircleElement(element: CircleElement): boolean {\n const validation = this.validateCircleElement(element);\n \n if (validation.errors.length > 0) {\n throw new ValidationError(\n `Circle element validation failed: ${validation.errors.join(', ')}`,\n validation.errors,\n validation.warnings\n );\n }\n \n return true;\n }\n\n visitRectElement(element: RectElement): boolean {\n const validation = this.validateRectElement(element);\n \n if (validation.errors.length > 0) {\n throw new ValidationError(\n `Rectangle element validation failed: ${validation.errors.join(', ')}`,\n validation.errors,\n validation.warnings\n );\n }\n \n return true;\n }\n} ","import { TrackElement } from \"../elements/base.element\";\nimport { Track } from \"./track\";\n\n/**\n * Friend class that provides explicit access to Track's protected methods\n * This implements the Friend Class Pattern for better encapsulation control\n */\nexport class TrackFriend {\n constructor(private track: Track) {}\n \n /**\n * Add an element to the track with validation\n * @param element The element to add\n * @param skipValidation If true, skips validation (use with caution)\n * @returns true if element was added successfully, throws ValidationError if validation fails\n */\n addElement(\n element: TrackElement,\n skipValidation: boolean = false\n ): boolean {\n // Use the public friend method that delegates to protected method\n return this.track.addElementViaFriend(element, skipValidation);\n }\n \n /**\n * Remove an element from the track\n * @param element The element to remove\n */\n removeElement(element: TrackElement): void {\n // Use the public friend method that delegates to protected method\n this.track.removeElementViaFriend(element);\n }\n \n /**\n * Update an element in the track with validation\n * @param element The element to update\n * @returns true if element was updated successfully, throws ValidationError if validation fails\n */\n updateElement(element: TrackElement): boolean {\n // Use the public friend method that delegates to protected method\n return this.track.updateElementViaFriend(element);\n }\n \n /**\n * Get the track instance (for advanced operations)\n * @returns The track instance\n */\n getTrack(): Track {\n return this.track;\n }\n }","import { ElementJSON, TrackJSON } from \"../../types\";\nimport { generateShortUuid } from \"../../utils/timeline.utils\";\nimport { TrackElement } from \"../elements/base.element\";\nimport { ElementDeserializer } from \"../visitor/element-deserializer\";\nimport { ElementSerializer } from \"../visitor/element-serializer\";\nimport {\n ElementValidator,\n ValidationError,\n} from \"../visitor/element-validator\";\nimport { TrackFriend } from \"./track.friend\";\n\nexport class Track {\n private id: string;\n private name: string;\n private type: string;\n private elements: TrackElement[];\n private validator: ElementValidator;\n\n constructor(name: string, id?: string) {\n this.name = name;\n this.id = id ?? `t-${generateShortUuid}`;\n this.type = \"element\";\n this.elements = [];\n this.validator = new ElementValidator();\n }\n\n /**\n * Create a friend instance for explicit access to protected methods\n * This implements the Friend Class Pattern\n * @returns TrackFriend instance\n */\n createFriend(): TrackFriend {\n return new TrackFriend(this);\n }\n\n /**\n * Friend method to add element (called by TrackFriend)\n * @param element The element to add\n * @param skipValidation If true, skips validation\n * @returns true if element was added successfully\n */\n addElementViaFriend(\n element: TrackElement,\n skipValidation: boolean = false\n ): boolean {\n return this.addElement(element, skipValidation);\n }\n\n /**\n * Friend method to remove element (called by TrackFriend)\n * @param element The element to remove\n */\n removeElementViaFriend(element: TrackElement): void {\n this.removeElement(element);\n }\n\n /**\n * Friend method to update element (called by TrackFriend)\n * @param element The element to update\n * @returns true if element was updated successfully\n */\n updateElementViaFriend(element: TrackElement): boolean {\n return this.updateElement(element);\n }\n\n getId(): string {\n return this.id;\n }\n\n getName(): string {\n return this.name;\n }\n\n getType(): string {\n return this.type;\n }\n\n getElements(): ReadonlyArray<TrackElement> {\n return [...this.elements];\n }\n\n /**\n * Validates an element\n * @param element The element to validate\n * @returns true if valid, throws ValidationError if invalid\n */\n validateElement(element: TrackElement): boolean {\n return element.accept(this.validator);\n }\n\n getTrackDuration(): number {\n return this.elements?.length\n ? this.elements[this.elements.length - 1].getEnd()\n : 0;\n }\n\n /**\n * Adds an element to the track with validation\n * @param element The element to add\n * @param skipValidation If true, skips validation (use with caution)\n * @returns true if element was added successfully, throws ValidationError if validation fails\n */\n protected addElement(\n element: TrackElement,\n skipValidation: boolean = false\n ): boolean {\n element.setTrackId(this.id);\n if (skipValidation) {\n this.elements.push(element);\n return true;\n }\n\n try {\n const isValid = this.validateElement(element);\n if (isValid) {\n this.elements.push(element);\n return true;\n }\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw error;\n }\n\n return false;\n }\n\n protected removeElement(element: TrackElement): void {\n const index = this.elements.findIndex((e) => e.getId() === element.getId());\n if (index !== -1) {\n this.elements.splice(index, 1);\n }\n }\n\n /**\n * Updates an element in the track with validation\n * @param element The element to update\n * @returns true if element was updated successfully, throws ValidationError if validation fails\n */\n protected updateElement(element: TrackElement): boolean {\n try {\n const isValid = this.validateElement(element);\n if (isValid) {\n const index = this.elements.findIndex(\n (e) => e.getId() === element.getId()\n );\n if (index !== -1) {\n this.elements[index] = element;\n return true;\n }\n }\n } catch (error) {\n if (error instanceof ValidationError) {\n throw error;\n }\n throw error;\n }\n\n return false;\n }\n\n getElementById(id: string): Readonly<TrackElement> | undefined {\n const element = this.elements.find((e) => e.getId() === id);\n if (!element) return undefined;\n return element;\n }\n\n /**\n * Validates all elements in the track and returns combined result and per-element status\n * @returns Object with overall isValid and array of per-element validation results\n */\n validateAllElements(): {\n isValid: boolean;\n results: Array<{\n element: TrackElement;\n isValid: boolean;\n errors?: string[];\n warnings?: string[];\n }>;\n } {\n let validResult = true;\n const results = this.elements.map((element) => {\n try {\n const isValid = this.validateElement(element);\n if (!isValid) {\n validResult = false;\n }\n return { element, isValid };\n } catch (error) {\n if (error instanceof ValidationError) {\n validResult = false;\n return {\n element,\n isValid: false,\n errors: error.errors,\n warnings: error.warnings,\n };\n }\n return {\n element,\n isValid: false,\n errors: [error instanceof Error ? error.message : \"Unknown error\"],\n };\n }\n });\n return { isValid: validResult, results };\n }\n\n serialize(): TrackJSON {\n const serializer = new ElementSerializer();\n return {\n id: this.id,\n name: this.name,\n type: this.type,\n elements: this.elements.map(\n (element) => element.accept(serializer) as ElementJSON\n ),\n };\n }\n\n static fromJSON(json: any): Track {\n const track = new Track(json.name, json.id);\n track.type = json.type;\n track.elements = (json.elements || []).map(ElementDeserializer.fromJSON);\n return track;\n }\n}\n","import { TrackElement } from \"../core/elements/base.element\";\nimport { Track } from \"../core/track/track\";\n\ntype TimelineStore = {\n tracks: Track[];\n version: number;\n elementMap: Record<string, TrackElement>;\n trackMap: Record<string, any>;\n captionProps: Record<string, any>;\n}\n\nexport type TimelineTrackData = {\n tracks: Track[];\n version: number;\n}\n\nexport class TimelineContextStore {\n private static instance: TimelineContextStore;\n private storeMap: Map<string, TimelineStore>;\n\n private constructor() {\n this.storeMap = new Map();\n }\n\n public static getInstance(): TimelineContextStore {\n if (!TimelineContextStore.instance) {\n TimelineContextStore.instance = new TimelineContextStore();\n }\n return TimelineContextStore.instance;\n }\n\n public initializeContext(contextId: string): void {\n if (!this.storeMap.has(contextId)) {\n this.storeMap.set(contextId, {\n tracks: [],\n version: 0,\n elementMap: {},\n trackMap: {},\n captionProps: {},\n });\n }\n }\n\n public getTimelineData(contextId: string): TimelineTrackData | null {\n const timelineStore = this.storeMap.get(contextId);\n return timelineStore ? {\n tracks: timelineStore.tracks,\n version: timelineStore.version,\n } : null;\n }\n\n public setTimelineData(contextId: string, timelineData: TimelineTrackData): TimelineTrackData {\n this.ensureContext(contextId);\n this.storeMap.get(contextId)!.tracks = timelineData.tracks;\n this.storeMap.get(contextId)!.version = timelineData.version;\n return timelineData;\n }\n\n public getElementMap(contextId: string): Record<string, TrackElement> {\n this.ensureContext(contextId);\n return this.storeMap.get(contextId)!.elementMap;\n }\n\n public setElementMap(contextId: string, elementMap: Record<string, TrackElement>): void {\n this.ensureContext(contextId);\n this.storeMap.get(contextId)!.elementMap = elementMap;\n }\n\n public getTrackMap(contextId: string): Record<string, any> {\n this.ensureContext(contextId);\n return this.storeMap.get(contextId)!.trackMap;\n }\n\n public setTrackMap(contextId: string, trackMap: Record<string, any>): void {\n this.ensureContext(contextId);\n this.storeMap.get(contextId)!.trackMap = trackMap;\n }\n\n public getCaptionProps(contextId: string): Record<string, any> {\n this.ensureContext(contextId);\n return this.storeMap.get(contextId)!.captionProps;\n }\n\n public setCaptionProps(contextId: string, captionProps: Record<string, any>): void {\n this.ensureContext(contextId);\n this.storeMap.get(contextId)!.captionProps = captionProps;\n }\n\n public clearContext(contextId: string): void {\n this.storeMap.delete(contextId);\n }\n\n private ensureContext(contextId: string): void {\n if (!this.storeMap.has(contextId)) {\n this.initializeContext(contextId);\n }\n }\n}\n\nexport const timelineContextStore = TimelineContextStore.getInstance();","import { ElementVisitor } from \"./element-visitor\";\nimport { VideoElement } from \"../elements/video.element\";\nimport { AudioElement } from \"../elements/audio.element\";\nimport { ImageElement } from \"../elements/image.element\";\nimport { TextElement } from \"../elements/text.element\";\nimport { CaptionElement } from \"../elements/caption.element\";\nimport { IconElement } from \"../elements/icon.element\";\nimport { CircleElement } from \"../elements/circle.element\";\nimport { RectElement } from \"../elements/rect.element\";\nimport { Track } from \"../track/track\";\nimport { TrackFriend } from \"../track/track.friend\";\n\n/**\n * ElementAdder visitor for adding elements to tracks\n * Uses the visitor pattern to handle different element types\n * Implements the Friend Class Pattern for explicit access control\n */\nexport class ElementAdder implements ElementVisitor<Promise<boolean>> {\n private track: Track;\n private trackFriend: TrackFriend;\n\n constructor(track: Track) {\n this.track = track;\n this.trackFriend = track.createFriend();\n }\n\n async visitVideoElement(element: VideoElement): Promise<boolean> {\n await element.updateVideoMeta();\n const elements = this.track.getElements();\n const lastEndtime = elements?.length\n ? elements[elements.length - 1].getEnd()\n : 0;\n if (isNaN(element.getStart())) {\n element.setStart(lastEndtime);\n }\n if (isNaN(element.getEnd())) {\n element.setEnd(element.getStart() + element.getMediaDuration());\n }\n\n return this.trackFriend.addElement(element);\n }\n\n async visitAudioElement(element: AudioElement): Promise<boolean> {\n await element.updateAudioMeta();\n const elements = this.track.getElements();\n const lastEndtime = elements?.length\n ? elements[elements.length - 1].getEnd()\n : 0;\n if (isNaN(element.getStart())) {\n element.setStart(lastEndtime);\n }\n if (isNaN(element.getEnd())) {\n element.setEnd(element.getStart() + element.getMediaDuration());\n }\n \n return this.trackFriend.addElement(element);\n }\n\n async visitImageElement(element: ImageElement): Promise<boolean> {\n await element.updateImageMeta();\n const elements = this.track.getElements();\n const lastEndtime = elements?.length\n ? elements[elements.length - 1].getEnd()\n : 0;\n if (isNaN(element.getStart())) {\n element.setStart(lastEndtime);\n }\n if (isNaN(element.getEnd())) {\n element.setEnd(element.getStart() + 1);\n }\n \n return this.trackFriend.addElement(element);\n }\n\n async visitTextElement(element: TextElement): Promise<boolean> {\n const elements = this.track.getElements();\n const lastEndtime = elements?.length\n ? elements[elements.length - 1].getEnd()\n : 0;\n if (isNaN(element.getStart())) {\n element.setStart(lastEndtime);\n }\n if (isNaN(element.getEnd())) {\n element.setEnd(element.getStart() + 1);\n }\n \n return this.trackFriend.addElement(element);\n }\n\n async visitCaptionElement(element: CaptionElement): Promise<boolean> {\n const elements = this.track.getElements();\n const lastEndtime = elements?.length\n ? elements[elements.length - 1].getEnd()\n : 0;\n if (isNaN(element.getStart())) {\n element.setStart(lastEndtime);\n }\n if (isNaN(element.getEnd())) {\n element.setEnd(element.getStart() + 1);\n }\n \n return this.trackFriend.addElement(element);\n }\n\n async visitIconElement(element: IconElement): Promise<boolean> {\n const elements = this.track.getElements();\n const lastEndtime = elements?.length\n ? elements[elements.length - 1].getEnd()\n : 0;\n if (isNaN(element.getStart())) {\n element.setStart(lastEndtime);\n }\n if (isNaN(element.getEnd())) {\n element.setEnd(element.getStart() + 1);\n }\n \n return this.trackFriend.addElement(element);\n }\n\n async visitCircleElement(element: CircleElement): Promise<boolean> {\n const elements = this.track.getElements();\n const lastEndtime = elements?.length\n ? elements[elements.length - 1].getEnd()\n : 0;\n if (isNaN(element.getStart())) {\n element.setStart(lastEndtime);\n }\n if (isNaN(element.getEnd())) {\n element.setEnd(element.getStart() + 1);\n }\n \n return this.trackFriend.addElement(element);\n }\n\n async visitRectElement(element: RectElement): Promise<boolean> {\n const elements = this.track.getElements();\n const lastEndtime = elements?.length\n ? elements[elements.length - 1].getEnd()\n : 0;\n if (isNaN(element.getStart())) {\n element.setStart(lastEndtime);\n }\n if (isNaN(element.getEnd())) {\n element.setEnd(element.getStart() + 1);\n }\n \n return this.trackFriend.addElement(element);\n }\n}\n","import { ElementVisitor } from \"./element-visitor\";\nimport { VideoElement } from \"../elements/video.element\";\nimport { AudioElement } from \"../elements/audio.element\";\nimport { ImageElement } from \"../elements/image.element\";\nimport { TextElement } from \"../elements/text.element\";\nimport { CaptionElement } from \"../elements/caption.element\";\nimport { IconElement } from \"../elements/icon.element\";\nimport { CircleElement } from \"../elements/circle.element\";\nimport { RectElement } from \"../elements/rect.element\";\nimport { Track } from \"../track/track\";\nimport { TrackFriend } from \"../track/track.friend\";\n\n/**\n * ElementRemover visitor for removing elements from tracks\n * Uses the visitor pattern to handle different element types\n * Implements the Friend Class Pattern for explicit access control\n */\nexport class ElementRemover implements ElementVisitor<boolean> {\n private trackFriend: TrackFriend;\n\n constructor(track: Track) {\n this.trackFriend = track.createFriend();\n }\n\n visitVideoElement(element: VideoElement): boolean {\n this.trackFriend.removeElement(element);\n return true;\n }\n\n visitAudioElement(element: AudioElement): boolean {\n this.trackFriend.removeElement(element);\n return true;\n }\n\n visitImageElement(element: ImageElement): boolean {\n this.trackFriend.removeElement(element);\n return true;\n }\n\n visitTextElement(element: TextElement): boolean {\n this.trackFriend.removeElement(element);\n return true;\n }\n\n visitCaptionElement(element: CaptionElement): boolean {\n this.trackFriend.removeElement(element);\n return true;\n }\n\n visitIconElement(element: IconElement): boolean {\n this.trackFriend.removeElement(element);\n return true;\n }\n\n visitCircleElement(element: CircleElement): boolean {\n this.trackFriend.removeElement(element);\n return true;\n }\n\n visitRectElement(element: RectElement): boolean {\n this.trackFriend.removeElement(element);\n return true;\n }\n} ","import { ElementVisitor } from \"./element-visitor\";\nimport { VideoElement } from \"../elements/video.element\";\nimport { AudioElement } from \"../elements/audio.element\";\nimport { ImageElement } from \"../elements/image.element\";\nimport { TextElement } from \"../elements/text.element\";\nimport { CaptionElement } from \"../elements/caption.element\";\nimport { IconElement } from \"../elements/icon.element\";\nimport { CircleElement } from \"../elements/circle.element\";\nimport { RectElement } from \"../elements/rect.element\";\nimport { Track } from \"../track/track\";\nimport { TrackFriend } from \"../track/track.friend\";\n\n/**\n * ElementUpdater visitor for updating elements in tracks\n * Uses the visitor pattern to handle different element types\n * Implements the Friend Class Pattern for explicit access control\n */\nexport class ElementUpdater implements ElementVisitor<boolean> {\n private trackFriend: TrackFriend;\n\n constructor(track: Track) {\n this.trackFriend = track.createFriend();\n }\n\n visitVideoElement(element: VideoElement): boolean {\n return this.trackFriend.updateElement(element);\n }\n\n visitAudioElement(element: AudioElement): boolean {\n return this.trackFriend.updateElement(element);\n }\n\n visitImageElement(element: ImageElement): boolean {\n return this.trackFriend.updateElement(element);\n }\n\n visitTextElement(element: TextElement): boolean {\n return this.trackFriend.updateElement(element);\n }\n\n visitCaptionElement(element: CaptionElement): boolean {\n return this.trackFriend.updateElement(element);\n }\n\n visitIconElement(element: IconElement): boolean {\n return this.trackFriend.updateElement(element);\n }\n\n visitCircleElement(element: CircleElement): boolean {\n return this.trackFriend.updateElement(element);\n }\n\n visitRectElement(element: RectElement): boolean {\n return this.trackFriend.updateElement(element);\n }\n} ","import { ElementVisitor } from \"./element-visitor\";\nimport { VideoElement } from \"../elements/video.element\";\nimport { AudioElement } from \"../elements/audio.element\";\nimport { ImageElement } from \"../elements/image.element\";\nimport { TextElement } from \"../elements/text.element\";\nimport { CaptionElement } from \"../elements/caption.element\";\nimport { RectElement } from \"../elements/rect.element\";\nimport { CircleElement } from \"../elements/circle.element\";\nimport { IconElement } from \"../elements/icon.element\";\nimport { TrackElement } from \"../elements/base.element\";\n\nexport class ElementCloner implements ElementVisitor<TrackElement> {\n cloneElementProperties(srcElement: TrackElement, destElement: TrackElement) {\n return destElement\n .setName(srcElement.getName())\n .setType(srcElement.getType())\n .setStart(srcElement.getStart())\n .setEnd(srcElement.getEnd())\n .setProps(srcElement.getProps())\n .setAnimation(srcElement.getAnimation());\n }\n\n visitVideoElement(element: VideoElement): TrackElement {\n const props = element.getProps();\n const clonedElement = new VideoElement(props!.src, element.getParentSize());\n this.cloneElementProperties(element, clonedElement);\n clonedElement\n .setParentSize(element.getParentSize())\n .setMediaDuration(element.getMediaDuration())\n .setFrame(element.getFrame())\n .setFrameEffects(element.getFrameEffects() ?? [])\n .setBackgroundColor(element.getBackgroundColor())\n .setObjectFit(element.getObjectFit())\n return clonedElement;\n }\n\n visitAudioElement(element: AudioElement): TrackElement {\n const clonedElement = new AudioElement(element.getProps()!.src);\n this.cloneElementProperties(element, clonedElement);\n clonedElement.setMediaDuration(element.getMediaDuration());\n return clonedElement;\n }\n\n visitImageElement(element: ImageElement): TrackElement {\n const clonedElement = new ImageElement(\n element.getProps()!.src,\n element.getParentSize()\n );\n this.cloneElementProperties(element, clonedElement);\n clonedElement\n .setParentSize(element.getParentSize())\n .setFrame(element.getFrame())\n .setFrameEffects(element.getFrameEffects())\n .setBackgroundColor(element.getBackgroundColor())\n .setObjectFit(element.getObjectFit())\n\n return clonedElement;\n }\n\n visitTextElement(element: TextElement): TrackElement {\n const clonedElement = new TextElement(element.getProps()!.text);\n this.cloneElementProperties(element, clonedElement);\n clonedElement.setTextEffect(element.getTextEffect());\n return clonedElement;\n }\n\n visitCaptionElement(element: CaptionElement): TrackElement {\n const clonedElement = new CaptionElement(\n element.getProps()!.text,\n element.getStart(),\n element.getEnd()\n );\n this.cloneElementProperties(element, clonedElement);\n return clonedElement;\n }\n\n visitRectElement(element: RectElement): TrackElement {\n const clonedElement = new RectElement(\n element.getProps()!.fill,\n element.getProps()!.size\n );\n this.cloneElementProperties(element, clonedElement);\n return clonedElement;\n }\n\n visitCircleElement(element: CircleElement): TrackElement {\n const clonedElement = new CircleElement(\n element.getProps()!.fill,\n element.getProps()!.radius\n );\n this.cloneElementProperties(element, clonedElement);\n return clonedElement;\n }\n\n visitIconElement(element: IconElement): TrackElement {\n const clonedElement = new IconElement(\n element.getProps()!.src,\n element.getProps()!.size\n );\n this.cloneElementProperties(element, clonedElement);\n return clonedElement;\n }\n}\n","import { ElementVisitor } from \"./element-visitor\";\nimport { VideoElement } from \"../elements/video.element\";\nimport { AudioElement } from \"../elements/audio.element\";\nimport { ImageElement } from \"../elements/image.element\";\nimport { TextElement } from \"../elements/text.element\";\nimport { CaptionElement } from \"../elements/caption.element\";\nimport { RectElement } from \"../elements/rect.element\";\nimport { CircleElement } from \"../elements/circle.element\";\nimport { IconElement } from \"../elements/icon.element\";\nimport { ElementCloner } from \"./element-cloner\";\nimport { canSplitElement } from \"../../utils/timeline.utils\";\n\nexport interface SplitResult {\n firstElement: any;\n secondElement: any;\n success: boolean;\n}\n\nexport class ElementSplitter implements ElementVisitor<SplitResult> {\n private splitTime: number;\n private elementCloner: ElementCloner;\n constructor(splitTime: number) {\n this.splitTime = splitTime;\n this.elementCloner = new ElementCloner();\n }\n\n visitVideoElement(element: VideoElement): SplitResult {\n if (!canSplitElement(element, this.splitTime)) {\n return { firstElement: null, secondElement: null, success: false };\n }\n\n const firstElement = this.elementCloner.visitVideoElement(\n element\n ) as VideoElement;\n const secondElement = this.elementCloner.visitVideoElement(\n element\n ) as VideoElement;\n\n const props = element.getProps();\n const secondStartAt =\n (props!.time ?? 0) +\n (this.splitTime - element.getStart()) * (props!.playbackRate ?? 1);\n firstElement.setEnd(this.splitTime);\n secondElement.setStart(this.splitTime).setStartAt(secondStartAt);\n\n return { firstElement, secondElement, success: true };\n }\n\n visitAudioElement(element: AudioElement): SplitResult {\n if (!canSplitElement(element, this.splitTime)) {\n return { firstElement: null, secondElement: null, success: false };\n }\n const firstElement = this.elementCloner.visitAudioElement(\n element\n ) as AudioElement;\n const secondElement = this.elementCloner.visitAudioElement(\n element\n ) as AudioElement;\n\n const props = element.getProps();\n const secondStartAt =\n (props!.time ?? 0) +\n (this.splitTime - element.getStart()) * (props!.playbackRate ?? 1);\n firstElement.setEnd(this.splitTime);\n secondElement.setStart(this.splitTime).setStartAt(secondStartAt);\n\n return { firstElement, secondElement, success: true };\n }\n\n visitImageElement(element: ImageElement): SplitResult {\n if (!canSplitElement(element, this.splitTime)) {\n return { firstElement: null, secondElement: null, success: false };\n }\n const firstElement = this.elementCloner.visitImageElement(\n element\n ) as ImageElement;\n const secondElement = this.elementCloner.visitImageElement(\n element\n ) as ImageElement;\n firstElement.setEnd(this.splitTime);\n secondElement.setStart(this.splitTime);\n return { firstElement, secondElement, success: true };\n }\n\n visitTextElement(element: TextElement): SplitResult {\n if (!canSplitElement(element, this.splitTime)) {\n return { firstElement: null, secondElement: null, success: false };\n }\n const originalText = element.getText() || \"\";\n const originalTextArray = originalText.split(\" \");\n const percentage =\n (this.splitTime - element.getStart()) / element.getDuration();\n const firstElement = this.elementCloner.visitTextElement(\n element\n ) as TextElement;\n firstElement.setText(\n originalTextArray\n .slice(0, Math.floor(originalTextArray.length * percentage))\n .join(\" \")\n );\n firstElement.setEnd(this.splitTime);\n const secondElement = this.elementCloner.visitTextElement(\n element\n ) as TextElement;\n secondElement.setText(\n originalTextArray\n .slice(\n Math.floor(originalTextArray.length * percentage),\n originalTextArray.length\n )\n .join(\" \")\n );\n secondElement.setStart(this.splitTime);\n return { firstElement, secondElement, success: true };\n }\n\n visitCaptionElement(element: CaptionElement): SplitResult {\n if (!canSplitElement(element, this.splitTime)) {\n return { firstElement: null, secondElement: null, success: false };\n }\n const originalText = element.getText() || \"\";\n const originalTextArray = originalText.split(\" \");\n const percentage =\n (this.splitTime - element.getStart()) / element.getDuration();\n const firstElement = this.elementCloner.visitCaptionElement(\n element\n ) as CaptionElement;\n firstElement.setText(\n originalTextArray\n .slice(0, Math.floor(originalTextArray.length * percentage))\n .join(\" \")\n );\n firstElement.setEnd(this.splitTime);\n const secondElement = this.elementCloner.visitCaptionElement(\n element\n ) as CaptionElement;\n secondElement.setText(\n originalTextArray\n .slice(\n Math.floor(originalTextArray.length * percentage),\n originalTextArray.length\n )\n .join(\" \")\n );\n secondElement.setStart(this.splitTime);\n return { firstElement, secondElement, success: true };\n }\n\n visitRectElement(element: RectElement): SplitResult {\n if (!canSplitElement(element, this.splitTime)) {\n return { firstElement: null, secondElement: null, success: false };\n }\n const firstElement = this.elementCloner.visitRectElement(\n element\n ) as RectElement;\n const secondElement = this.elementCloner.visitRectElement(\n element\n ) as RectElement;\n firstElement.setEnd(this.splitTime);\n secondElement.setStart(this.splitTime);\n return { firstElement, secondElement, success: true };\n }\n\n visitCircleElement(element: CircleElement): SplitResult {\n if (!canSplitElement(element, this.splitTime)) {\n return { firstElement: null, secondElement: null, success: false };\n }\n const firstElement = this.elementCloner.visitCircleElement(element);\n const secondElement = this.elementCloner.visitCircleElement(element);\n firstElement.setEnd(this.splitTime);\n secondElement.setStart(this.splitTime);\n return { firstElement, secondElement, success: true };\n }\n\n visitIconElement(element: IconElement): SplitResult {\n if (!canSplitElement(element, this.splitTime)) {\n return { firstElement: null, secondElement: null, success: false };\n }\n const firstElement = this.elementCloner.visitIconElement(element);\n const secondElement = this.elementCloner.visitIconElement(element);\n firstElement.setEnd(this.splitTime);\n secondElement.setStart(this.splitTime);\n return { firstElement, secondElement, success: true };\n }\n}\n","import {\n extractVideoAudio,\n generateShortUuid,\n getTotalDuration,\n} from \"../../utils/timeline.utils\";\nimport { Track } from \"../track/track\";\nimport {\n timelineContextStore,\n TimelineTrackData,\n} from \"../../services/data.service\";\nimport { PLAYER_STATE, TIMELINE_ACTION } from \"../../utils/constants\";\nimport { ElementAdder } from \"../visitor/element-adder\";\nimport { ElementRemover } from \"../visitor/element-remover\";\nimport { ElementUpdater } from \"../visitor/element-updater\";\nimport { ElementSplitter, SplitResult } from \"../visitor/element-splitter\";\nimport { ElementCloner } from \"../visitor/element-cloner\";\nimport { TrackElement } from \"../elements/base.element\";\nimport { ProjectJSON, TrackJSON } from \"../../types\";\n\n/**\n * Type for timeline operation context\n */\nexport interface TimelineOperationContext {\n contextId: string;\n setTotalDuration: (duration: number) => void;\n setPresent: (data: ProjectJSON) => void;\n handleUndo: () => ProjectJSON | null;\n handleRedo: () => ProjectJSON | null;\n handleResetHistory: () => void;\n updateChangeLog: () => void;\n setTimelineAction?: (action: string, payload?: unknown) => void;\n}\n\n/**\n * TimelineEditor\n *\n * This class provides an interface to execute all timeline operations\n * using a direct, class-based approach with track-based management.\n * It also handles undo/redo operations internally.\n */\nexport class TimelineEditor {\n private context: TimelineOperationContext;\n private totalDuration: number = 0;\n\n constructor(context: TimelineOperationContext) {\n this.context = context;\n // Ensure context is initialized in timelineContextStore\n timelineContextStore.initializeContext(this.context.contextId);\n }\n\n getContext(): TimelineOperationContext {\n return this.context;\n }\n\n pauseVideo(): void {\n if (this.context?.setTimelineAction) {\n this.context.setTimelineAction(\n TIMELINE_ACTION.SET_PLAYER_STATE,\n PLAYER_STATE.PAUSED\n );\n }\n }\n\n getTimelineData(): TimelineTrackData | null {\n const contextId = this.context.contextId;\n return timelineContextStore.getTimelineData(contextId);\n }\n\n getLatestVersion(): number {\n const contextId = this.context.contextId;\n const timelineData = timelineContextStore.getTimelineData(contextId);\n return timelineData?.version || 0;\n }\n\n protected setTimelineData(\n tracks: Track[],\n version?: number\n ): TimelineTrackData {\n const prevTimelineData = this.getTimelineData();\n const updatedVersion = version ?? (prevTimelineData?.version || 0) + 1;\n const updatedTimelineData = {\n tracks,\n version: updatedVersion,\n };\n timelineContextStore.setTimelineData(\n this.context.contextId,\n updatedTimelineData\n );\n this.updateHistory(updatedTimelineData);\n this.context.updateChangeLog();\n return updatedTimelineData as TimelineTrackData;\n }\n\n addTrack(name: string): Track {\n const prevTimelineData = this.getTimelineData();\n const id = `t-${generateShortUuid()}`;\n const track = new Track(name, id);\n const updatedTimelines = [...(prevTimelineData?.tracks || []), track];\n this.setTimelineData(updatedTimelines);\n return track;\n }\n\n getTrackById(id: string): Track | null {\n const prevTimelineData = this.getTimelineData();\n const track = prevTimelineData?.tracks.find((t) => t.getId() === id);\n return track as Track | null;\n }\n\n getTrackByName(name: string): Track | null {\n const prevTimelineData = this.getTimelineData();\n const track = prevTimelineData?.tracks.find((t) => t.getName() === name);\n return track as Track | null;\n }\n\n removeTrackById(id: string): void {\n const tracks = this.getTimelineData()?.tracks || [];\n const updatedTracks = tracks.filter((t) => t.getId() !== id);\n this.setTimelineData(updatedTracks);\n }\n\n removeTrack(track: Track): void {\n const tracks = this.getTimelineData()?.tracks || [];\n const updatedTracks = tracks.filter((t) => t.getId() !== track.getId());\n this.setTimelineData(updatedTracks);\n }\n\n /**\n * Refresh the timeline data\n */\n refresh(): void {\n const currentData = this.getTimelineData();\n if (currentData) {\n this.setTimelineData(currentData.tracks);\n }\n }\n\n /**\n * Add an element to a specific track using the visitor pattern\n * @param track The track to add the element to\n * @param element The element to add\n * @returns Promise<boolean> true if element was added successfully\n */\n async addElementToTrack(\n track: Track,\n element: TrackElement\n ): Promise<boolean> {\n if (!track) {\n return false;\n }\n try {\n // Use the visitor pattern to handle different element types\n const elementAdder = new ElementAdder(track);\n const result = await element.accept(elementAdder);\n \n if (result) {\n // Update the timeline data to reflect the change\n const currentData = this.getTimelineData();\n if (currentData) {\n this.setTimelineData(currentData.tracks);\n }\n }\n return result;\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Remove an element from a specific track using the visitor pattern\n * @param element The element to remove\n * @returns boolean true if element was removed successfully\n */\n removeElement(element: TrackElement): boolean {\n const track = this.getTrackById(element.getTrackId());\n if (!track) {\n return false;\n }\n\n try {\n // Use the visitor pattern to handle different element types\n const elementRemover = new ElementRemover(track);\n const result = element.accept(elementRemover);\n \n if (result) {\n // Update the timeline data to reflect the change\n const currentData = this.getTimelineData();\n if (currentData) {\n this.setTimelineData(currentData.tracks);\n }\n }\n\n return result;\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Update an element in a specific track using the visitor pattern\n * @param element The updated element\n * @returns boolean true if element was updated successfully\n */\n updateElement(element: TrackElement): boolean {\n const track = this.getTrackById(element.getTrackId());\n if (!track) {\n return false;\n }\n\n try {\n // Use the visitor pattern to handle different element types\n const elementUpdater = new ElementUpdater(track);\n const result = element.accept(elementUpdater);\n \n if (result) {\n // Update the timeline data to reflect the change\n const currentData = this.getTimelineData();\n if (currentData) {\n this.setTimelineData(currentData.tracks);\n }\n }\n\n return result;\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Split an element at a specific time point using the visitor pattern\n * @param element The element to split\n * @param splitTime The time point to split at\n * @returns SplitResult with first element, second element, and success status\n */\n async splitElement(element: TrackElement, splitTime: number): Promise<SplitResult> {\n const track = this.getTrackById(element.getTrackId());\n if (!track) {\n return { firstElement: element, secondElement: null, success: false };\n }\n\n try {\n // Use the visitor pattern to handle different element types\n const elementSplitter = new ElementSplitter(splitTime);\n const result = element.accept(elementSplitter);\n \n if (result.success) {\n const elementRemover = new ElementRemover(track);\n // Remove the original element from the track\n element.accept(elementRemover);\n\n // Add the first split element to the track\n const elementAdder = new ElementAdder(track);\n result.firstElement.accept(elementAdder);\n result.secondElement.accept(elementAdder);\n \n // Update the timeline data to reflect the change\n const currentData = this.getTimelineData();\n if (currentData) {\n this.setTimelineData(currentData.tracks);\n }\n }\n return result;\n } catch (error) {\n return { firstElement: element, secondElement: null, success: false };\n }\n }\n\n /**\n * Clone an element using the visitor pattern\n * @param element The element to clone\n * @returns TrackElement | null - the cloned element or null if cloning failed\n */\n cloneElement(element: TrackElement): TrackElement | null {\n try {\n const elementCloner = new ElementCloner();\n return element.accept(elementCloner);\n } catch (error) {\n return null;\n }\n }\n\n reorderTracks(tracks: Track[]): void {\n this.setTimelineData(tracks);\n }\n\n updateHistory(timelineTrackData: TimelineTrackData): void {\n const tracks = timelineTrackData.tracks.map((t) => t.serialize());\n this.totalDuration = getTotalDuration(tracks); \n this.context.setTotalDuration(this.totalDuration);\n const version = timelineTrackData.version;\n this.context.setPresent({\n tracks,\n version,\n });\n }\n\n /**\n * Trigger undo operation and update timeline data\n */\n undo(): void {\n const result = this.context.handleUndo();\n if (result && result.tracks) {\n // Update the timeline data in the editor's store\n const tracks = result.tracks.map((t: TrackJSON) => Track.fromJSON(t));\n timelineContextStore.setTimelineData(this.context.contextId, {\n tracks,\n version: result.version,\n });\n\n // Update total duration\n this.totalDuration = getTotalDuration(result.tracks);\n this.context.setTotalDuration(this.totalDuration);\n this.context.updateChangeLog();\n\n // Trigger timeline action to notify components\n if (this.context?.setTimelineAction) {\n this.context.setTimelineAction(TIMELINE_ACTION.UPDATE_PLAYER_DATA, {\n tracks: result.tracks,\n version: result.version,\n });\n }\n }\n }\n\n /**\n * Trigger redo operation and update timeline data\n */\n redo(): void {\n const result = this.context.handleRedo();\n if (result && result.tracks) {\n // Update the timeline data in the editor's store\n const tracks = result.tracks.map((t: TrackJSON) => Track.fromJSON(t));\n timelineContextStore.setTimelineData(this.context.contextId, {\n tracks,\n version: result.version,\n });\n\n // Update total duration\n this.totalDuration = getTotalDuration(result.tracks);\n this.context.setTotalDuration(this.totalDuration);\n this.context.updateChangeLog();\n\n // Trigger timeline action to notify components\n if (this.context?.setTimelineAction) {\n this.context.setTimelineAction(TIMELINE_ACTION.UPDATE_PLAYER_DATA, {\n tracks: result.tracks,\n version: result.version,\n });\n }\n }\n }\n\n /**\n * Reset history and clear timeline data\n */\n resetHistory(): void {\n this.context.handleResetHistory();\n\n // Clear the timeline data in the editor's store\n timelineContextStore.setTimelineData(this.context.contextId, {\n tracks: [],\n version: 0,\n });\n\n // Reset total duration and version\n this.context.setTotalDuration(0);\n this.context.updateChangeLog();\n\n // Trigger timeline action to notify components\n if (this.context?.setTimelineAction) {\n this.context.setTimelineAction(TIMELINE_ACTION.UPDATE_PLAYER_DATA, {\n tracks: [],\n version: 0,\n });\n }\n }\n\n loadProject({\n tracks,\n version,\n }: {\n tracks: TrackJSON[];\n version: number;\n }): void {\n this.pauseVideo();\n this.context.handleResetHistory();\n // Convert Timeline[] to Track[] and set\n const timelineTracks = tracks.map((t) => Track.fromJSON(t));\n this.setTimelineData(timelineTracks, version);\n if (this.context?.setTimelineAction) {\n this.context.setTimelineAction(TIMELINE_ACTION.UPDATE_PLAYER_DATA, {\n tracks: tracks,\n version: version,\n forceUpdate: true,\n });\n }\n }\n\n async getVideoAudio(): Promise<string> {\n const tracks = this.getTimelineData()?.tracks || [];\n const audioBlobUrl = await extractVideoAudio(tracks, this.totalDuration);\n return audioBlobUrl;\n }\n}\n","import { createContext, useContext, useState } from \"react\";\nimport { ProjectJSON } from \"../types\";\n\nconst MAX_HISTORY = 20;\n\n// Helper function for deep cloning\nconst deepClone = <T,>(obj: T): T => {\n return JSON.parse(JSON.stringify(obj));\n};\n\ninterface UndoRedoState {\n past: ProjectJSON[];\n present: ProjectJSON | null;\n future: ProjectJSON[];\n}\n\ninterface UndoRedoContextType {\n // State\n canUndo: boolean;\n canRedo: boolean;\n present: ProjectJSON | null;\n // Actions\n setPresent: (data: ProjectJSON) => void;\n undo: () => ProjectJSON | null;\n redo: () => ProjectJSON | null;\n resetHistory: () => void;\n getLastPersistedState: () => ProjectJSON | null;\n // Configuration\n disablePersistence: () => void;\n}\n\nconst UndoRedoContext = createContext<UndoRedoContextType | undefined>(\n undefined\n);\n\n// Local storage utilities\nconst STORAGE_KEY_PREFIX = \"twick_undo_redo_\";\n\nconst saveToStorage = (key: string, state: UndoRedoState): void => {\n try {\n localStorage.setItem(key, JSON.stringify(state));\n } catch (error) {\n console.warn(\"Failed to save undo-redo state to localStorage:\", error);\n }\n};\n\nconst loadFromStorage = (key: string): UndoRedoState | null => {\n try {\n const stored = localStorage.getItem(key);\n if (!stored) return null;\n return JSON.parse(stored);\n } catch (error) {\n console.warn(\"Failed to load undo-redo state from localStorage:\", error);\n return null;\n }\n};\n\nexport interface UndoRedoProviderProps {\n children: React.ReactNode;\n persistenceKey?: string;\n maxHistorySize?: number;\n}\n\nexport const UndoRedoProvider: React.FC<UndoRedoProviderProps> = ({\n children,\n persistenceKey,\n maxHistorySize = MAX_HISTORY,\n}) => {\n const [state, setState] = useState<UndoRedoState>(() => {\n // Load from storage if persistence is enabled\n if (persistenceKey) {\n const stored = loadFromStorage(STORAGE_KEY_PREFIX + persistenceKey);\n if (stored) {\n return {\n past: stored.past,\n present: stored.present,\n future: stored.future,\n };\n }\n }\n\n return {\n past: [],\n present: null,\n future: [],\n };\n });\n\n // Save to storage whenever state changes (if persistence enabled)\n const saveState = (newState: UndoRedoState) => {\n if (persistenceKey) {\n saveToStorage(STORAGE_KEY_PREFIX + persistenceKey, newState);\n }\n };\n\n // When user makes a new change\n const setPresent = (data: ProjectJSON) => {\n setState((prevState) => {\n let newPast = [...prevState.past];\n if (prevState.present) {\n newPast.push(deepClone(prevState.present));\n }\n\n const newState: UndoRedoState = {\n past: newPast,\n present: deepClone(data),\n future: [], // Clear future because it's a new change\n };\n\n // Limit history size\n if (newState.past.length > maxHistorySize) {\n newState.past.shift(); // Remove oldest\n }\n\n saveState(newState);\n return newState;\n });\n };\n\n const undo = (): ProjectJSON | null => {\n let undoResult: ProjectJSON | null = null;\n\n setState((prevState) => {\n if (prevState.past.length === 0) return prevState;\n\n const previous = prevState.past[prevState.past.length - 1];\n const newState: UndoRedoState = {\n past: prevState.past.slice(0, -1), // Remove last item\n present: previous,\n future: prevState.present\n ? [deepClone(prevState.present), ...prevState.future]\n : prevState.future,\n };\n\n undoResult = previous;\n saveState(newState);\n return newState;\n });\n\n return undoResult;\n };\n\n const redo = (): ProjectJSON | null => {\n let redoResult: ProjectJSON | null = null;\n\n setState((prevState) => {\n if (prevState.future.length === 0) return prevState;\n\n const next = prevState.future[0];\n const newState: UndoRedoState = {\n past: prevState.present\n ? [...prevState.past, deepClone(prevState.present)]\n : prevState.past,\n present: next,\n future: prevState.future.slice(1), // Remove first item\n };\n\n // Limit history size\n if (newState.past.length > maxHistorySize) {\n newState.past.shift();\n }\n\n redoResult = next;\n saveState(newState);\n return newState;\n });\n\n return redoResult;\n };\n\n const getLastPersistedState = () => {\n if (persistenceKey) {\n const stored = loadFromStorage(STORAGE_KEY_PREFIX + persistenceKey);\n return stored?.present || null;\n }\n return null;\n };\n\n // Reset all history\n const resetHistory = () => {\n const newState: UndoRedoState = {\n past: [],\n present: null,\n future: [],\n };\n\n setState(newState);\n\n // Clear from storage too\n if (persistenceKey) {\n localStorage.removeItem(STORAGE_KEY_PREFIX + persistenceKey);\n }\n };\n\n const disablePersistence = () => {\n if (persistenceKey) {\n localStorage.removeItem(STORAGE_KEY_PREFIX + persistenceKey);\n }\n };\n\n const contextValue: UndoRedoContextType = {\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n present: state.present,\n setPresent,\n undo,\n redo,\n resetHistory,\n getLastPersistedState,\n disablePersistence,\n };\n\n return (\n <UndoRedoContext.Provider value={contextValue}>\n {children}\n </UndoRedoContext.Provider>\n );\n};\n\nexport const useUndoRedo = (): UndoRedoContextType => {\n const context = useContext(UndoRedoContext);\n if (context === undefined) {\n throw new Error(\"useUndoRedo must be used within an UndoRedoProvider\");\n }\n return context;\n};\n","import { TimelineEditor } from \"../core/editor/timeline.editor\";\n\n// Global registry to store editor instances by contextId\nexport const editorRegistry = new Map<string, TimelineEditor>();\n\n// Expose the registry to the global window object for console access\ndeclare global {\n interface Window {\n twickTimelineEditors: Map<string, TimelineEditor>;\n }\n}\n\n// Initialize the global registry on window\nif (typeof window !== 'undefined') {\n window.twickTimelineEditors = editorRegistry;\n}","var t=\"undefined\"!=typeof window?window:void 0,i=\"undefined\"!=typeof globalThis?globalThis:t,e=Array.prototype,r=e.forEach,s=e.indexOf,n=null==i?void 0:i.navigator,o=null==i?void 0:i.document,a=null==i?void 0:i.location,l=null==i?void 0:i.fetch,u=null!=i&&i.XMLHttpRequest&&\"withCredentials\"in new i.XMLHttpRequest?i.XMLHttpRequest:void 0,h=null==i?void 0:i.AbortController,d=null==n?void 0:n.userAgent,v=null!=t?t:{},c={DEBUG:!1,LIB_VERSION:\"1.258.5\"},f=\"$copy_autocapture\",p=[\"$snapshot\",\"$pageview\",\"$pageleave\",\"$set\",\"survey dismissed\",\"survey sent\",\"survey shown\",\"$identify\",\"$groupidentify\",\"$create_alias\",\"$$client_ingestion_warning\",\"$web_experiment_applied\",\"$feature_enrollment_update\",\"$feature_flag_called\"],_=function(t){return t.GZipJS=\"gzip-js\",t.Base64=\"base64\",t}({}),g=[\"fatal\",\"error\",\"warning\",\"log\",\"info\",\"debug\"];function m(t,i){return-1!==t.indexOf(i)}var b=function(t){return t.trim()},y=function(t){return t.replace(/^\\$/,\"\")};var w=Array.isArray,S=Object.prototype,$=S.hasOwnProperty,x=S.toString,k=w||function(t){return\"[object Array]\"===x.call(t)},E=t=>\"function\"==typeof t,I=t=>t===Object(t)&&!k(t),P=t=>{if(I(t)){for(var i in t)if($.call(t,i))return!1;return!0}return!1},R=t=>void 0===t,T=t=>\"[object String]\"==x.call(t),M=t=>T(t)&&0===t.trim().length,C=t=>null===t,F=t=>R(t)||C(t),O=t=>\"[object Number]\"==x.call(t),A=t=>\"[object Boolean]\"===x.call(t),D=t=>t instanceof FormData,L=t=>m(p,t),j=i=>{var e={t:function(e){if(t&&(c.DEBUG||v.POSTHOG_DEBUG)&&!R(t.console)&&t.console){for(var r=(\"__rrweb_original__\"in t.console[e]?t.console[e].__rrweb_original__:t.console[e]),s=arguments.length,n=new Array(s>1?s-1:0),o=1;o<s;o++)n[o-1]=arguments[o];r(i,...n)}},info:function(){for(var t=arguments.length,i=new Array(t),r=0;r<t;r++)i[r]=arguments[r];e.t(\"log\",...i)},warn:function(){for(var t=arguments.length,i=new Array(t),r=0;r<t;r++)i[r]=arguments[r];e.t(\"warn\",...i)},error:function(){for(var t=arguments.length,i=new Array(t),r=0;r<t;r++)i[r]=arguments[r];e.t(\"error\",...i)},critical:function(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];console.error(i,...e)},uninitializedWarning:t=>{e.error(\"You must initialize PostHog before calling \"+t)},createLogger:t=>j(i+\" \"+t)};return e},N=j(\"[PostHog.js]\"),z=N.createLogger,U=z(\"[ExternalScriptsLoader]\"),q=(t,i,e)=>{if(t.config.disable_external_dependency_loading)return U.warn(i+\" was requested but loading of external scripts is disabled.\"),e(\"Loading of external scripts is disabled\");var r=null==o?void 0:o.querySelectorAll(\"script\");if(r)for(var s=0;s<r.length;s++)if(r[s].src===i)return e();var n=()=>{if(!o)return e(\"document not found\");var r=o.createElement(\"script\");if(r.type=\"text/javascript\",r.crossOrigin=\"anonymous\",r.src=i,r.onload=t=>e(void 0,t),r.onerror=t=>e(t),t.config.prepare_external_dependency_script&&(r=t.config.prepare_external_dependency_script(r)),!r)return e(\"prepare_external_dependency_script returned null\");var s,n=o.querySelectorAll(\"body > script\");n.length>0?null==(s=n[0].parentNode)||s.insertBefore(r,n[0]):o.body.appendChild(r)};null!=o&&o.body?n():null==o||o.addEventListener(\"DOMContentLoaded\",n)};function B(){return B=Object.assign?Object.assign.bind():function(t){for(var i=1;i<arguments.length;i++){var e=arguments[i];for(var r in e)({}).hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t},B.apply(null,arguments)}function H(t,i){if(null==t)return{};var e={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(-1!==i.indexOf(r))continue;e[r]=t[r]}return e}v.__PosthogExtensions__=v.__PosthogExtensions__||{},v.__PosthogExtensions__.loadExternalDependency=(t,i,e)=>{var r=\"/static/\"+i+\".js?v=\"+t.version;if(\"remote-config\"===i&&(r=\"/array/\"+t.config.token+\"/config.js\"),\"toolbar\"===i){var s=3e5;r=r+\"&t=\"+Math.floor(Date.now()/s)*s}var n=t.requestRouter.endpointFor(\"assets\",r);q(t,n,e)},v.__PosthogExtensions__.loadSiteApp=(t,i,e)=>{var r=t.requestRouter.endpointFor(\"api\",i);q(t,r,e)};var W={};function G(t,i,e){if(k(t))if(r&&t.forEach===r)t.forEach(i,e);else if(\"length\"in t&&t.length===+t.length)for(var s=0,n=t.length;s<n;s++)if(s in t&&i.call(e,t[s],s)===W)return}function J(t,i,e){if(!F(t)){if(k(t))return G(t,i,e);if(D(t)){for(var r of t.entries())if(i.call(e,r[1],r[0])===W)return}else for(var s in t)if($.call(t,s)&&i.call(e,t[s],s)===W)return}}var V=function(t){for(var i=arguments.length,e=new Array(i>1?i-1:0),r=1;r<i;r++)e[r-1]=arguments[r];return G(e,(function(i){for(var e in i)void 0!==i[e]&&(t[e]=i[e])})),t},K=function(t){for(var i=arguments.length,e=new Array(i>1?i-1:0),r=1;r<i;r++)e[r-1]=arguments[r];return G(e,(function(i){G(i,(function(i){t.push(i)}))})),t};function Y(t){for(var i=Object.keys(t),e=i.length,r=new Array(e);e--;)r[e]=[i[e],t[i[e]]];return r}var X=function(t){try{return t()}catch(t){return}},Q=function(t){return function(){try{for(var i=arguments.length,e=new Array(i),r=0;r<i;r++)e[r]=arguments[r];return t.apply(this,e)}catch(t){N.critical(\"Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A.\"),N.critical(t)}}},Z=function(t){var i={};return J(t,(function(t,e){(T(t)&&t.length>0||O(t))&&(i[e]=t)})),i};function tt(t,i){return e=t,r=t=>T(t)&&!C(i)?t.slice(0,i):t,s=new Set,function t(i,e){return i!==Object(i)?r?r(i,e):i:s.has(i)?void 0:(s.add(i),k(i)?(n=[],G(i,(i=>{n.push(t(i))}))):(n={},J(i,((i,e)=>{s.has(i)||(n[e]=t(i,e))}))),n);var n}(e);var e,r,s}var it=[\"herokuapp.com\",\"vercel.app\",\"netlify.app\"];function et(t){var i=null==t?void 0:t.hostname;if(!T(i))return!1;var e=i.split(\".\").slice(-2).join(\".\");for(var r of it)if(e===r)return!1;return!0}function rt(t,i){for(var e=0;e<t.length;e++)if(i(t[e]))return t[e]}function st(t,i,e,r){var{capture:s=!1,passive:n=!0}=null!=r?r:{};null==t||t.addEventListener(i,e,{capture:s,passive:n})}var nt=\"$people_distinct_id\",ot=\"__alias\",at=\"__timers\",lt=\"$autocapture_disabled_server_side\",ut=\"$heatmaps_enabled_server_side\",ht=\"$exception_capture_enabled_server_side\",dt=\"$error_tracking_suppression_rules\",vt=\"$error_tracking_capture_extension_exceptions\",ct=\"$web_vitals_enabled_server_side\",ft=\"$dead_clicks_enabled_server_side\",pt=\"$web_vitals_allowed_metrics\",_t=\"$session_recording_enabled_server_side\",gt=\"$console_log_recording_enabled_server_side\",mt=\"$session_recording_network_payload_capture\",bt=\"$session_recording_masking\",yt=\"$session_recording_canvas_recording\",wt=\"$replay_sample_rate\",St=\"$replay_minimum_duration\",$t=\"$replay_script_config\",xt=\"$sesid\",kt=\"$session_is_sampled\",Et=\"$session_recording_url_trigger_activated_session\",It=\"$session_recording_event_trigger_activated_session\",Pt=\"$enabled_feature_flags\",Rt=\"$early_access_features\",Tt=\"$feature_flag_details\",Mt=\"$stored_person_properties\",Ct=\"$stored_group_properties\",Ft=\"$surveys\",Ot=\"$surveys_activated\",At=\"$flag_call_reported\",Dt=\"$user_state\",Lt=\"$client_session_props\",jt=\"$capture_rate_limit\",Nt=\"$initial_campaign_params\",zt=\"$initial_referrer_info\",Ut=\"$initial_person_info\",qt=\"$epp\",Bt=\"__POSTHOG_TOOLBAR__\",Ht=\"$posthog_cookieless\",Wt=[nt,ot,\"__cmpns\",at,_t,ut,xt,Pt,dt,Dt,Rt,Tt,Ct,Mt,Ft,At,Lt,jt,Nt,zt,qt,Ut];function Gt(t){return t instanceof Element&&(t.id===Bt||!(null==t.closest||!t.closest(\".toolbar-global-fade-container\")))}function Jt(t){return!!t&&1===t.nodeType}function Vt(t,i){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===i.toLowerCase()}function Kt(t){return!!t&&3===t.nodeType}function Yt(t){return!!t&&11===t.nodeType}function Xt(t){return t?b(t).split(/\\s+/):[]}function Qt(i){var e=null==t?void 0:t.location.href;return!!(e&&i&&i.some((t=>e.match(t))))}function Zt(t){var i=\"\";switch(typeof t.className){case\"string\":i=t.className;break;case\"object\":i=(t.className&&\"baseVal\"in t.className?t.className.baseVal:null)||t.getAttribute(\"class\")||\"\";break;default:i=\"\"}return Xt(i)}function ti(t){return F(t)?null:b(t).split(/(\\s+)/).filter((t=>fi(t))).join(\"\").replace(/[\\r\\n]/g,\" \").replace(/[ ]+/g,\" \").substring(0,255)}function ii(t){var i=\"\";return oi(t)&&!ai(t)&&t.childNodes&&t.childNodes.length&&J(t.childNodes,(function(t){var e;Kt(t)&&t.textContent&&(i+=null!==(e=ti(t.textContent))&&void 0!==e?e:\"\")})),b(i)}function ei(t){return R(t.target)?t.srcElement||null:null!=(i=t.target)&&i.shadowRoot?t.composedPath()[0]||null:t.target||null;var i}var ri=[\"a\",\"button\",\"form\",\"input\",\"select\",\"textarea\",\"label\"];function si(t){var i=t.parentNode;return!(!i||!Jt(i))&&i}function ni(i,e,r,s,n){var o,a,l;if(void 0===r&&(r=void 0),!t||!i||Vt(i,\"html\")||!Jt(i))return!1;if(null!=(o=r)&&o.url_allowlist&&!Qt(r.url_allowlist))return!1;if(null!=(a=r)&&a.url_ignorelist&&Qt(r.url_ignorelist))return!1;if(null!=(l=r)&&l.dom_event_allowlist){var u=r.dom_event_allowlist;if(u&&!u.some((t=>e.type===t)))return!1}for(var h=!1,d=[i],v=!0,c=i;c.parentNode&&!Vt(c,\"body\");)if(Yt(c.parentNode))d.push(c.parentNode.host),c=c.parentNode.host;else{if(!(v=si(c)))break;if(s||ri.indexOf(v.tagName.toLowerCase())>-1)h=!0;else{var f=t.getComputedStyle(v);f&&\"pointer\"===f.getPropertyValue(\"cursor\")&&(h=!0)}d.push(v),c=v}if(!function(t,i){var e=null==i?void 0:i.element_allowlist;if(R(e))return!0;var r,s=function(t){if(e.some((i=>t.tagName.toLowerCase()===i)))return{v:!0}};for(var n of t)if(r=s(n))return r.v;return!1}(d,r))return!1;if(!function(t,i){var e=null==i?void 0:i.css_selector_allowlist;if(R(e))return!0;var r,s=function(t){if(e.some((i=>t.matches(i))))return{v:!0}};for(var n of t)if(r=s(n))return r.v;return!1}(d,r))return!1;var p=t.getComputedStyle(i);if(p&&\"pointer\"===p.getPropertyValue(\"cursor\")&&\"click\"===e.type)return!0;var _=i.tagName.toLowerCase();switch(_){case\"html\":return!1;case\"form\":return(n||[\"submit\"]).indexOf(e.type)>=0;case\"input\":case\"select\":case\"textarea\":return(n||[\"change\",\"click\"]).indexOf(e.type)>=0;default:return h?(n||[\"click\"]).indexOf(e.type)>=0:(n||[\"click\"]).indexOf(e.type)>=0&&(ri.indexOf(_)>-1||\"true\"===i.getAttribute(\"contenteditable\"))}}function oi(t){for(var i=t;i.parentNode&&!Vt(i,\"body\");i=i.parentNode){var e=Zt(i);if(m(e,\"ph-sensitive\")||m(e,\"ph-no-capture\"))return!1}if(m(Zt(t),\"ph-include\"))return!0;var r=t.type||\"\";if(T(r))switch(r.toLowerCase()){case\"hidden\":case\"password\":return!1}var s=t.name||t.id||\"\";if(T(s)){if(/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(s.replace(/[^a-zA-Z0-9]/g,\"\")))return!1}return!0}function ai(t){return!!(Vt(t,\"input\")&&![\"button\",\"checkbox\",\"submit\",\"reset\"].includes(t.type)||Vt(t,\"select\")||Vt(t,\"textarea\")||\"true\"===t.getAttribute(\"contenteditable\"))}var li=\"(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11})\",ui=new RegExp(\"^(?:\"+li+\")$\"),hi=new RegExp(li),di=\"\\\\d{3}-?\\\\d{2}-?\\\\d{4}\",vi=new RegExp(\"^(\"+di+\")$\"),ci=new RegExp(\"(\"+di+\")\");function fi(t,i){if(void 0===i&&(i=!0),F(t))return!1;if(T(t)){if(t=b(t),(i?ui:hi).test((t||\"\").replace(/[- ]/g,\"\")))return!1;if((i?vi:ci).test(t))return!1}return!0}function pi(t){var i=ii(t);return fi(i=(i+\" \"+_i(t)).trim())?i:\"\"}function _i(t){var i=\"\";return t&&t.childNodes&&t.childNodes.length&&J(t.childNodes,(function(t){var e;if(t&&\"span\"===(null==(e=t.tagName)?void 0:e.toLowerCase()))try{var r=ii(t);i=(i+\" \"+r).trim(),t.childNodes&&t.childNodes.length&&(i=(i+\" \"+_i(t)).trim())}catch(t){N.error(\"[AutoCapture]\",t)}})),i}function gi(t){return function(t){var i=t.map((t=>{var i,e,r=\"\";if(t.tag_name&&(r+=t.tag_name),t.attr_class)for(var s of(t.attr_class.sort(),t.attr_class))r+=\".\"+s.replace(/\"/g,\"\");var n=B({},t.text?{text:t.text}:{},{\"nth-child\":null!==(i=t.nth_child)&&void 0!==i?i:0,\"nth-of-type\":null!==(e=t.nth_of_type)&&void 0!==e?e:0},t.href?{href:t.href}:{},t.attr_id?{attr_id:t.attr_id}:{},t.attributes),o={};return Y(n).sort(((t,i)=>{var[e]=t,[r]=i;return e.localeCompare(r)})).forEach((t=>{var[i,e]=t;return o[mi(i.toString())]=mi(e.toString())})),r+=\":\",r+=Y(o).map((t=>{var[i,e]=t;return i+'=\"'+e+'\"'})).join(\"\")}));return i.join(\";\")}(function(t){return t.map((t=>{var i,e,r={text:null==(i=t.$el_text)?void 0:i.slice(0,400),tag_name:t.tag_name,href:null==(e=t.attr__href)?void 0:e.slice(0,2048),attr_class:bi(t),attr_id:t.attr__id,nth_child:t.nth_child,nth_of_type:t.nth_of_type,attributes:{}};return Y(t).filter((t=>{var[i]=t;return 0===i.indexOf(\"attr__\")})).forEach((t=>{var[i,e]=t;return r.attributes[i]=e})),r}))}(t))}function mi(t){return t.replace(/\"|\\\\\"/g,'\\\\\"')}function bi(t){var i=t.attr__class;return i?k(i)?i:Xt(i):void 0}class yi{constructor(){this.clicks=[]}isRageClick(t,i,e){var r=this.clicks[this.clicks.length-1];if(r&&Math.abs(t-r.x)+Math.abs(i-r.y)<30&&e-r.timestamp<1e3){if(this.clicks.push({x:t,y:i,timestamp:e}),3===this.clicks.length)return!0}else this.clicks=[{x:t,y:i,timestamp:e}];return!1}}var wi=[\"localhost\",\"127.0.0.1\"],Si=t=>{var i=null==o?void 0:o.createElement(\"a\");return R(i)?null:(i.href=t,i)},$i=function(t,i){var e,r;void 0===i&&(i=\"&\");var s=[];return J(t,(function(t,i){R(t)||R(i)||\"undefined\"===i||(e=encodeURIComponent((t=>t instanceof File)(t)?t.name:t.toString()),r=encodeURIComponent(i),s[s.length]=r+\"=\"+e)})),s.join(i)},xi=function(t,i){for(var e,r=((t.split(\"#\")[0]||\"\").split(/\\?(.*)/)[1]||\"\").replace(/^\\?+/g,\"\").split(\"&\"),s=0;s<r.length;s++){var n=r[s].split(\"=\");if(n[0]===i){e=n;break}}if(!k(e)||e.length<2)return\"\";var o=e[1];try{o=decodeURIComponent(o)}catch(t){N.error(\"Skipping decoding for malformed query param: \"+o)}return o.replace(/\\+/g,\" \")},ki=function(t,i,e){if(!t||!i||!i.length)return t;for(var r=t.split(\"#\"),s=r[0]||\"\",n=r[1],o=s.split(\"?\"),a=o[1],l=o[0],u=(a||\"\").split(\"&\"),h=[],d=0;d<u.length;d++){var v=u[d].split(\"=\");k(v)&&(i.includes(v[0])?h.push(v[0]+\"=\"+e):h.push(u[d]))}var c=l;return null!=a&&(c+=\"?\"+h.join(\"&\")),null!=n&&(c+=\"#\"+n),c},Ei=function(t,i){var e=t.match(new RegExp(i+\"=([^&]*)\"));return e?e[1]:null},Ii=z(\"[AutoCapture]\");function Pi(t,i){return i.length>t?i.slice(0,t)+\"...\":i}function Ri(t){if(t.previousElementSibling)return t.previousElementSibling;var i=t;do{i=i.previousSibling}while(i&&!Jt(i));return i}function Ti(t,i,e,r){var s=t.tagName.toLowerCase(),n={tag_name:s};ri.indexOf(s)>-1&&!e&&(\"a\"===s.toLowerCase()||\"button\"===s.toLowerCase()?n.$el_text=Pi(1024,pi(t)):n.$el_text=Pi(1024,ii(t)));var o=Zt(t);o.length>0&&(n.classes=o.filter((function(t){return\"\"!==t}))),J(t.attributes,(function(e){var s;if((!ai(t)||-1!==[\"name\",\"id\",\"class\",\"aria-label\"].indexOf(e.name))&&((null==r||!r.includes(e.name))&&!i&&fi(e.value)&&(s=e.name,!T(s)||\"_ngcontent\"!==s.substring(0,10)&&\"_nghost\"!==s.substring(0,7)))){var o=e.value;\"class\"===e.name&&(o=Xt(o).join(\" \")),n[\"attr__\"+e.name]=Pi(1024,o)}}));for(var a=1,l=1,u=t;u=Ri(u);)a++,u.tagName===t.tagName&&l++;return n.nth_child=a,n.nth_of_type=l,n}function Mi(i,e){for(var r,s,{e:n,maskAllElementAttributes:o,maskAllText:a,elementAttributeIgnoreList:l,elementsChainAsString:u}=e,h=[i],d=i;d.parentNode&&!Vt(d,\"body\");)Yt(d.parentNode)?(h.push(d.parentNode.host),d=d.parentNode.host):(h.push(d.parentNode),d=d.parentNode);var v,c=[],f={},p=!1,_=!1;if(J(h,(t=>{var i=oi(t);\"a\"===t.tagName.toLowerCase()&&(p=t.getAttribute(\"href\"),p=i&&p&&fi(p)&&p),m(Zt(t),\"ph-no-capture\")&&(_=!0),c.push(Ti(t,o,a,l));var e=function(t){if(!oi(t))return{};var i={};return J(t.attributes,(function(t){if(t.name&&0===t.name.indexOf(\"data-ph-capture-attribute\")){var e=t.name.replace(\"data-ph-capture-attribute-\",\"\"),r=t.value;e&&r&&fi(r)&&(i[e]=r)}})),i}(t);V(f,e)})),_)return{props:{},explicitNoCapture:_};if(a||(\"a\"===i.tagName.toLowerCase()||\"button\"===i.tagName.toLowerCase()?c[0].$el_text=pi(i):c[0].$el_text=ii(i)),p){var g,b;c[0].attr__href=p;var y=null==(g=Si(p))?void 0:g.host,w=null==t||null==(b=t.location)?void 0:b.host;y&&w&&y!==w&&(v=p)}return{props:V({$event_type:n.type,$ce_version:1},u?{}:{$elements:c},{$elements_chain:gi(c)},null!=(r=c[0])&&r.$el_text?{$el_text:null==(s=c[0])?void 0:s.$el_text}:{},v&&\"click\"===n.type?{$external_click_url:v}:{},f)}}class Ci{constructor(t){this.i=!1,this.o=null,this.rageclicks=new yi,this.h=!1,this.instance=t,this.m=null}get S(){var t,i,e=I(this.instance.config.autocapture)?this.instance.config.autocapture:{};return e.url_allowlist=null==(t=e.url_allowlist)?void 0:t.map((t=>new RegExp(t))),e.url_ignorelist=null==(i=e.url_ignorelist)?void 0:i.map((t=>new RegExp(t))),e}$(){if(this.isBrowserSupported()){if(t&&o){var i=i=>{i=i||(null==t?void 0:t.event);try{this.k(i)}catch(t){Ii.error(\"Failed to capture event\",t)}};if(st(o,\"submit\",i,{capture:!0}),st(o,\"change\",i,{capture:!0}),st(o,\"click\",i,{capture:!0}),this.S.capture_copied_text){var e=i=>{i=i||(null==t?void 0:t.event),this.k(i,f)};st(o,\"copy\",e,{capture:!0}),st(o,\"cut\",e,{capture:!0})}}}else Ii.info(\"Disabling Automatic Event Collection because this browser is not supported\")}startIfEnabled(){this.isEnabled&&!this.i&&(this.$(),this.i=!0)}onRemoteConfig(t){t.elementsChainAsString&&(this.h=t.elementsChainAsString),this.instance.persistence&&this.instance.persistence.register({[lt]:!!t.autocapture_opt_out}),this.o=!!t.autocapture_opt_out,this.startIfEnabled()}setElementSelectors(t){this.m=t}getElementSelectors(t){var i,e=[];return null==(i=this.m)||i.forEach((i=>{var r=null==o?void 0:o.querySelectorAll(i);null==r||r.forEach((r=>{t===r&&e.push(i)}))})),e}get isEnabled(){var t,i,e=null==(t=this.instance.persistence)?void 0:t.props[lt],r=this.o;if(C(r)&&!A(e)&&!this.instance.I())return!1;var s=null!==(i=this.o)&&void 0!==i?i:!!e;return!!this.instance.config.autocapture&&!s}k(i,e){if(void 0===e&&(e=\"$autocapture\"),this.isEnabled){var r,s=ei(i);if(Kt(s)&&(s=s.parentNode||null),\"$autocapture\"===e&&\"click\"===i.type&&i instanceof MouseEvent)this.instance.config.rageclick&&null!=(r=this.rageclicks)&&r.isRageClick(i.clientX,i.clientY,(new Date).getTime())&&this.k(i,\"$rageclick\");var n=e===f;if(s&&ni(s,i,this.S,n,n?[\"copy\",\"cut\"]:void 0)){var{props:o,explicitNoCapture:a}=Mi(s,{e:i,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.S.element_attribute_ignorelist,elementsChainAsString:this.h});if(a)return!1;var l=this.getElementSelectors(s);if(l&&l.length>0&&(o.$element_selectors=l),e===f){var u,h=ti(null==t||null==(u=t.getSelection())?void 0:u.toString()),d=i.type||\"clipboard\";if(!h)return!1;o.$selected_content=h,o.$copy_type=d}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return E(null==o?void 0:o.querySelectorAll)}}Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return O(t)&&isFinite(t)&&Math.floor(t)===t});var Fi=\"0123456789abcdef\";class Oi{constructor(t){if(this.bytes=t,16!==t.length)throw new TypeError(\"not 128-bit length\")}static fromFieldsV7(t,i,e,r){if(!Number.isInteger(t)||!Number.isInteger(i)||!Number.isInteger(e)||!Number.isInteger(r)||t<0||i<0||e<0||r<0||t>0xffffffffffff||i>4095||e>1073741823||r>4294967295)throw new RangeError(\"invalid field value\");var s=new Uint8Array(16);return s[0]=t/Math.pow(2,40),s[1]=t/Math.pow(2,32),s[2]=t/Math.pow(2,24),s[3]=t/Math.pow(2,16),s[4]=t/Math.pow(2,8),s[5]=t,s[6]=112|i>>>8,s[7]=i,s[8]=128|e>>>24,s[9]=e>>>16,s[10]=e>>>8,s[11]=e,s[12]=r>>>24,s[13]=r>>>16,s[14]=r>>>8,s[15]=r,new Oi(s)}toString(){for(var t=\"\",i=0;i<this.bytes.length;i++)t=t+Fi.charAt(this.bytes[i]>>>4)+Fi.charAt(15&this.bytes[i]),3!==i&&5!==i&&7!==i&&9!==i||(t+=\"-\");if(36!==t.length)throw new Error(\"Invalid UUIDv7 was generated\");return t}clone(){return new Oi(this.bytes.slice(0))}equals(t){return 0===this.compareTo(t)}compareTo(t){for(var i=0;i<16;i++){var e=this.bytes[i]-t.bytes[i];if(0!==e)return Math.sign(e)}return 0}}class Ai{constructor(){this.P=0,this.R=0,this.T=new ji}generate(){var t=this.generateOrAbort();if(R(t)){this.P=0;var i=this.generateOrAbort();if(R(i))throw new Error(\"Could not generate UUID after timestamp reset\");return i}return t}generateOrAbort(){var t=Date.now();if(t>this.P)this.P=t,this.M();else{if(!(t+1e4>this.P))return;this.R++,this.R>4398046511103&&(this.P++,this.M())}return Oi.fromFieldsV7(this.P,Math.trunc(this.R/Math.pow(2,30)),this.R&Math.pow(2,30)-1,this.T.nextUint32())}M(){this.R=1024*this.T.nextUint32()+(1023&this.T.nextUint32())}}var Di,Li=t=>{if(\"undefined\"!=typeof UUIDV7_DENY_WEAK_RNG&&UUIDV7_DENY_WEAK_RNG)throw new Error(\"no cryptographically strong RNG available\");for(var i=0;i<t.length;i++)t[i]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return t};t&&!R(t.crypto)&&crypto.getRandomValues&&(Li=t=>crypto.getRandomValues(t));class ji{constructor(){this.C=new Uint32Array(8),this.F=1/0}nextUint32(){return this.F>=this.C.length&&(Li(this.C),this.F=0),this.C[this.F++]}}var Ni=()=>zi().toString(),zi=()=>(Di||(Di=new Ai)).generate(),Ui=\"\";var qi=/[a-z0-9][a-z0-9-]+\\.[a-z]{2,}$/i;function Bi(t,i){if(i){var e=function(t,i){if(void 0===i&&(i=o),Ui)return Ui;if(!i)return\"\";if([\"localhost\",\"127.0.0.1\"].includes(t))return\"\";for(var e=t.split(\".\"),r=Math.min(e.length,8),s=\"dmn_chk_\"+Ni();!Ui&&r--;){var n=e.slice(r).join(\".\"),a=s+\"=1;domain=.\"+n+\";path=/\";i.cookie=a+\";max-age=3\",i.cookie.includes(s)&&(i.cookie=a+\";max-age=0\",Ui=n)}return Ui}(t);if(!e){var r=(t=>{var i=t.match(qi);return i?i[0]:\"\"})(t);r!==e&&N.info(\"Warning: cookie subdomain discovery mismatch\",r,e),e=r}return e?\"; domain=.\"+e:\"\"}return\"\"}var Hi={O:()=>!!o,A:function(t){N.error(\"cookieStore error: \"+t)},D:function(t){if(o){try{for(var i=t+\"=\",e=o.cookie.split(\";\").filter((t=>t.length)),r=0;r<e.length;r++){for(var s=e[r];\" \"==s.charAt(0);)s=s.substring(1,s.length);if(0===s.indexOf(i))return decodeURIComponent(s.substring(i.length,s.length))}}catch(t){}return null}},L:function(t){var i;try{i=JSON.parse(Hi.D(t))||{}}catch(t){}return i},j:function(t,i,e,r,s){if(o)try{var n=\"\",a=\"\",l=Bi(o.location.hostname,r);if(e){var u=new Date;u.setTime(u.getTime()+24*e*60*60*1e3),n=\"; expires=\"+u.toUTCString()}s&&(a=\"; secure\");var h=t+\"=\"+encodeURIComponent(JSON.stringify(i))+n+\"; SameSite=Lax; path=/\"+l+a;return h.length>3686.4&&N.warn(\"cookieStore warning: large cookie, len=\"+h.length),o.cookie=h,h}catch(t){return}},N:function(t,i){try{Hi.j(t,\"\",-1,i)}catch(t){return}}},Wi=null,Gi={O:function(){if(!C(Wi))return Wi;var i=!0;if(R(t))i=!1;else try{var e=\"__mplssupport__\";Gi.j(e,\"xyz\"),'\"xyz\"'!==Gi.D(e)&&(i=!1),Gi.N(e)}catch(t){i=!1}return i||N.error(\"localStorage unsupported; falling back to cookie store\"),Wi=i,i},A:function(t){N.error(\"localStorage error: \"+t)},D:function(i){try{return null==t?void 0:t.localStorage.getItem(i)}catch(t){Gi.A(t)}return null},L:function(t){try{return JSON.parse(Gi.D(t))||{}}catch(t){}return null},j:function(i,e){try{null==t||t.localStorage.setItem(i,JSON.stringify(e))}catch(t){Gi.A(t)}},N:function(i){try{null==t||t.localStorage.removeItem(i)}catch(t){Gi.A(t)}}},Ji=[\"distinct_id\",xt,kt,qt,Ut],Vi=B({},Gi,{L:function(t){try{var i={};try{i=Hi.L(t)||{}}catch(t){}var e=V(i,JSON.parse(Gi.D(t)||\"{}\"));return Gi.j(t,e),e}catch(t){}return null},j:function(t,i,e,r,s,n){try{Gi.j(t,i,void 0,void 0,n);var o={};Ji.forEach((t=>{i[t]&&(o[t]=i[t])})),Object.keys(o).length&&Hi.j(t,o,e,r,s,n)}catch(t){Gi.A(t)}},N:function(i,e){try{null==t||t.localStorage.removeItem(i),Hi.N(i,e)}catch(t){Gi.A(t)}}}),Ki={},Yi={O:function(){return!0},A:function(t){N.error(\"memoryStorage error: \"+t)},D:function(t){return Ki[t]||null},L:function(t){return Ki[t]||null},j:function(t,i){Ki[t]=i},N:function(t){delete Ki[t]}},Xi=null,Qi={O:function(){if(!C(Xi))return Xi;if(Xi=!0,R(t))Xi=!1;else try{var i=\"__support__\";Qi.j(i,\"xyz\"),'\"xyz\"'!==Qi.D(i)&&(Xi=!1),Qi.N(i)}catch(t){Xi=!1}return Xi},A:function(t){N.error(\"sessionStorage error: \",t)},D:function(i){try{return null==t?void 0:t.sessionStorage.getItem(i)}catch(t){Qi.A(t)}return null},L:function(t){try{return JSON.parse(Qi.D(t))||null}catch(t){}return null},j:function(i,e){try{null==t||t.sessionStorage.setItem(i,JSON.stringify(e))}catch(t){Qi.A(t)}},N:function(i){try{null==t||t.sessionStorage.removeItem(i)}catch(t){Qi.A(t)}}},Zi=function(t){return t[t.PENDING=-1]=\"PENDING\",t[t.DENIED=0]=\"DENIED\",t[t.GRANTED=1]=\"GRANTED\",t}({});class te{constructor(t){this._instance=t}get S(){return this._instance.config}get consent(){return this.U()?Zi.DENIED:this.q}isOptedOut(){return this.consent===Zi.DENIED||this.consent===Zi.PENDING&&this.S.opt_out_capturing_by_default}isOptedIn(){return!this.isOptedOut()}optInOut(t){this.B.j(this.H,t?1:0,this.S.cookie_expiration,this.S.cross_subdomain_cookie,this.S.secure_cookie)}reset(){this.B.N(this.H,this.S.cross_subdomain_cookie)}get H(){var{token:t,opt_out_capturing_cookie_prefix:i}=this._instance.config;return(i||\"__ph_opt_in_out_\")+t}get q(){var t=this.B.D(this.H);return\"1\"===t?Zi.GRANTED:\"0\"===t?Zi.DENIED:Zi.PENDING}get B(){if(!this.W){var t=this.S.opt_out_capturing_persistence_type;this.W=\"localStorage\"===t?Gi:Hi;var i=\"localStorage\"===t?Hi:Gi;i.D(this.H)&&(this.W.D(this.H)||this.optInOut(\"1\"===i.D(this.H)),i.N(this.H,this.S.cross_subdomain_cookie))}return this.W}U(){return!!this.S.respect_dnt&&!!rt([null==n?void 0:n.doNotTrack,null==n?void 0:n.msDoNotTrack,v.doNotTrack],(t=>m([!0,1,\"1\",\"yes\"],t)))}}var ie=z(\"[Dead Clicks]\"),ee=()=>!0,re=t=>{var i,e=!(null==(i=t.instance.persistence)||!i.get_property(ft)),r=t.instance.config.capture_dead_clicks;return A(r)?r:e};class se{get lazyLoadedDeadClicksAutocapture(){return this.G}constructor(t,i,e){this.instance=t,this.isEnabled=i,this.onCapture=e,this.startIfEnabled()}onRemoteConfig(t){this.instance.persistence&&this.instance.persistence.register({[ft]:null==t?void 0:t.captureDeadClicks}),this.startIfEnabled()}startIfEnabled(){this.isEnabled(this)&&this.J((()=>{this.V()}))}J(t){var i,e;null!=(i=v.__PosthogExtensions__)&&i.initDeadClicksAutocapture&&t(),null==(e=v.__PosthogExtensions__)||null==e.loadExternalDependency||e.loadExternalDependency(this.instance,\"dead-clicks-autocapture\",(i=>{i?ie.error(\"failed to load script\",i):t()}))}V(){var t;if(o){if(!this.G&&null!=(t=v.__PosthogExtensions__)&&t.initDeadClicksAutocapture){var i=I(this.instance.config.capture_dead_clicks)?this.instance.config.capture_dead_clicks:{};i.__onCapture=this.onCapture,this.G=v.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,i),this.G.start(o),ie.info(\"starting...\")}}else ie.error(\"`document` not found. Cannot start.\")}stop(){this.G&&(this.G.stop(),this.G=void 0,ie.info(\"stopping...\"))}}function ne(t,i,e,r,s){return i>e&&(N.warn(\"min cannot be greater than max.\"),i=e),O(t)?t>e?(r&&N.warn(r+\" cannot be greater than max: \"+e+\". Using max value instead.\"),e):t<i?(r&&N.warn(r+\" cannot be less than min: \"+i+\". Using min value instead.\"),i):t:(r&&N.warn(r+\" must be a number. using max or fallback. max: \"+e+\", fallback: \"+s),ne(s||e,i,e,r))}class oe{constructor(t){this.K={},this.Y=()=>{Object.keys(this.K).forEach((t=>{var i=this.X(t)+this.Z;i>=this.tt?delete this.K[t]:this.it(t,i)}))},this.X=t=>this.K[String(t)],this.it=(t,i)=>{this.K[String(t)]=i},this.consumeRateLimit=t=>{var i,e=null!==(i=this.X(t))&&void 0!==i?i:this.tt;if(0===(e=Math.max(e-1,0)))return!0;this.it(t,e);var r,s=0===e;s&&(null==(r=this.et)||r.call(this,t));return s},this.rt=t,this.et=this.rt.et,this.tt=ne(this.rt.bucketSize,0,100,\"rate limiter bucket size\"),this.Z=ne(this.rt.refillRate,0,this.tt,\"rate limiter refill rate\"),this.st=ne(this.rt.refillInterval,0,864e5,\"rate limiter refill interval\"),setInterval((()=>{this.Y()}),this.st)}}var ae=z(\"[ExceptionAutocapture]\");class le{constructor(i){var e,r,s;this.nt=()=>{var i;if(t&&this.isEnabled&&null!=(i=v.__PosthogExtensions__)&&i.errorWrappingFunctions){var e=v.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,r=v.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,s=v.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.ot&&this.S.capture_unhandled_errors&&(this.ot=e(this.captureException.bind(this))),!this.lt&&this.S.capture_unhandled_rejections&&(this.lt=r(this.captureException.bind(this))),!this.ut&&this.S.capture_console_errors&&(this.ut=s(this.captureException.bind(this)))}catch(t){ae.error(\"failed to start\",t),this.ht()}}},this._instance=i,this.dt=!(null==(e=this._instance.persistence)||!e.props[ht]),this.S=this.vt(),this.ct=new oe({refillRate:null!==(r=this._instance.config.error_tracking.__exceptionRateLimiterRefillRate)&&void 0!==r?r:1,bucketSize:null!==(s=this._instance.config.error_tracking.__exceptionRateLimiterBucketSize)&&void 0!==s?s:10,refillInterval:1e4}),this.startIfEnabled()}vt(){var t=this._instance.config.capture_exceptions,i={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return I(t)?i=B({},i,t):(R(t)?this.dt:t)&&(i=B({},i,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),i}get isEnabled(){return this.S.capture_console_errors||this.S.capture_unhandled_errors||this.S.capture_unhandled_rejections}startIfEnabled(){this.isEnabled&&(ae.info(\"enabled\"),this.J(this.nt))}J(t){var i,e;null!=(i=v.__PosthogExtensions__)&&i.errorWrappingFunctions&&t(),null==(e=v.__PosthogExtensions__)||null==e.loadExternalDependency||e.loadExternalDependency(this._instance,\"exception-autocapture\",(i=>{if(i)return ae.error(\"failed to load script\",i);t()}))}ht(){var t,i,e;null==(t=this.ot)||t.call(this),this.ot=void 0,null==(i=this.lt)||i.call(this),this.lt=void 0,null==(e=this.ut)||e.call(this),this.ut=void 0}onRemoteConfig(t){var i=t.autocaptureExceptions;this.dt=!!i||!1,this.S=this.vt(),this._instance.persistence&&this._instance.persistence.register({[ht]:this.dt}),this.startIfEnabled()}captureException(t){var i,e=this._instance.requestRouter.endpointFor(\"ui\");t.$exception_personURL=e+\"/project/\"+this._instance.config.token+\"/person/\"+this._instance.get_distinct_id();var r=null!==(i=t.$exception_list[0].type)&&void 0!==i?i:\"Exception\";this.ct.consumeRateLimit(r)?ae.info(\"Skipping exception capture because of client rate limiting.\",{exception:t.$exception_list[0].type}):this._instance.exceptions.sendExceptionEvent(t)}}function ue(t){return!R(Event)&&he(t,Event)}function he(t,i){try{return t instanceof i}catch(t){return!1}}function de(t){switch(Object.prototype.toString.call(t)){case\"[object Error]\":case\"[object Exception]\":case\"[object DOMException]\":case\"[object DOMError]\":return!0;default:return he(t,Error)}}function ve(t,i){return Object.prototype.toString.call(t)===\"[object \"+i+\"]\"}function ce(t){return ve(t,\"DOMError\")}var fe=/\\(error: (.*)\\)/,pe=50,_e=\"?\";function ge(t,i,e,r){var s={platform:\"web:javascript\",filename:t,function:\"<anonymous>\"===i?_e:i,in_app:!0};return R(e)||(s.lineno=e),R(r)||(s.colno=r),s}var me=/^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i,be=/^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,ye=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,we=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i,Se=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,$e=function(){for(var t=arguments.length,i=new Array(t),e=0;e<t;e++)i[e]=arguments[e];var r=i.sort(((t,i)=>t[0]-i[0])).map((t=>t[1]));return function(t,i){void 0===i&&(i=0);for(var e=[],s=t.split(\"\\n\"),n=i;n<s.length;n++){var o=s[n];if(!(o.length>1024)){var a=fe.test(o)?o.replace(fe,\"$1\"):o;if(!a.match(/\\S*Error: /)){for(var l of r){var u=l(a);if(u){e.push(u);break}}if(e.length>=pe)break}}}return function(t){if(!t.length)return[];var i=Array.from(t);return i.reverse(),i.slice(0,pe).map((t=>B({},t,{filename:t.filename||xe(i).filename,function:t.function||_e})))}(e)}}(...[[30,t=>{var i=me.exec(t);if(i){var[,e,r,s]=i;return ge(e,_e,+r,+s)}var n=be.exec(t);if(n){if(n[2]&&0===n[2].indexOf(\"eval\")){var o=ye.exec(n[2]);o&&(n[2]=o[1],n[3]=o[2],n[4]=o[3])}var[a,l]=Pe(n[1]||_e,n[2]);return ge(l,a,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}}],[50,t=>{var i=we.exec(t);if(i){if(i[3]&&i[3].indexOf(\" > eval\")>-1){var e=Se.exec(i[3]);e&&(i[1]=i[1]||\"eval\",i[3]=e[1],i[4]=e[2],i[5]=\"\")}var r=i[3],s=i[1]||_e;return[s,r]=Pe(s,r),ge(r,s,i[4]?+i[4]:void 0,i[5]?+i[5]:void 0)}}]]);function xe(t){return t[t.length-1]||{}}var ke,Ee,Ie,Pe=(t,i)=>{var e=-1!==t.indexOf(\"safari-extension\"),r=-1!==t.indexOf(\"safari-web-extension\");return e||r?[-1!==t.indexOf(\"@\")?t.split(\"@\")[0]:_e,e?\"safari-extension:\"+i:\"safari-web-extension:\"+i]:[t,i]};var Re=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;function Te(t,i){void 0===i&&(i=0);var e=t.stacktrace||t.stack||\"\",r=function(t){if(t&&Me.test(t.message))return 1;return 0}(t);try{var s=$e,n=function(t,i){var e=function(t){var i=globalThis._posthogChunkIds;if(!i)return{};var e=Object.keys(i);return Ie&&e.length===Ee||(Ee=e.length,Ie=e.reduce(((e,r)=>{ke||(ke={});var s=ke[r];if(s)e[s[0]]=s[1];else for(var n=t(r),o=n.length-1;o>=0;o--){var a=n[o],l=null==a?void 0:a.filename,u=i[r];if(l&&u){e[l]=u,ke[r]=[l,u];break}}return e}),{})),Ie}(i);return t.forEach((t=>{t.filename&&(t.chunk_id=e[t.filename])})),t}(s(e,r),s);return n.slice(0,n.length-i)}catch(t){}return[]}var Me=/Minified React error #\\d+;/i;function Ce(t,i){var e,r,s=Te(t),n=null===(e=null==i?void 0:i.handled)||void 0===e||e,o=null!==(r=null==i?void 0:i.synthetic)&&void 0!==r&&r;return{type:null!=i&&i.overrideExceptionType?i.overrideExceptionType:t.name,value:function(t){var i=t.message;if(i.error&&\"string\"==typeof i.error.message)return String(i.error.message);return String(i)}(t),stacktrace:{frames:s,type:\"raw\"},mechanism:{handled:n,synthetic:o}}}function Fe(t,i){var e=Ce(t,i);return t.cause&&de(t.cause)&&t.cause!==t?[e,...Fe(t.cause,{handled:null==i?void 0:i.handled,synthetic:null==i?void 0:i.synthetic})]:[e]}function Oe(t,i){return{$exception_list:Fe(t,i),$exception_level:\"error\"}}function Ae(t,i){var e,r,s,n=null===(e=null==i?void 0:i.handled)||void 0===e||e,o=null===(r=null==i?void 0:i.synthetic)||void 0===r||r,a={type:null!=i&&i.overrideExceptionType?i.overrideExceptionType:null!==(s=null==i?void 0:i.defaultExceptionType)&&void 0!==s?s:\"Error\",value:t||(null==i?void 0:i.defaultExceptionMessage),mechanism:{handled:n,synthetic:o}};if(null!=i&&i.syntheticException){var l=Te(i.syntheticException,1);l.length&&(a.stacktrace={frames:l,type:\"raw\"})}return{$exception_list:[a],$exception_level:\"error\"}}function De(t){return T(t)&&!M(t)&&g.indexOf(t)>=0}function Le(t,i){var e,r,s=null===(e=null==i?void 0:i.handled)||void 0===e||e,n=null===(r=null==i?void 0:i.synthetic)||void 0===r||r,o=null!=i&&i.overrideExceptionType?i.overrideExceptionType:ue(t)?t.constructor.name:\"Error\",a=\"Non-Error 'exception' captured with keys: \"+function(t,i){void 0===i&&(i=40);var e=Object.keys(t);if(e.sort(),!e.length)return\"[object has no keys]\";for(var r=e.length;r>0;r--){var s=e.slice(0,r).join(\", \");if(!(s.length>i))return r===e.length||s.length<=i?s:s.slice(0,i)+\"...\"}return\"\"}(t),l={type:o,value:a,mechanism:{handled:s,synthetic:n}};if(null!=i&&i.syntheticException){var u=Te(null==i?void 0:i.syntheticException,1);u.length&&(l.stacktrace={frames:u,type:\"raw\"})}return{$exception_list:[l],$exception_level:De(t.level)?t.level:\"error\"}}function je(t,i){var{error:e,event:r}=t,s={$exception_list:[]},n=e||r;if(ce(n)||function(t){return ve(t,\"DOMException\")}(n)){var o=n;if(function(t){return\"stack\"in t}(n))s=Oe(n,i);else{var a=o.name||(ce(o)?\"DOMError\":\"DOMException\"),l=o.message?a+\": \"+o.message:a;s=Ae(l,B({},i,{overrideExceptionType:ce(o)?\"DOMError\":\"DOMException\",defaultExceptionMessage:l}))}return\"code\"in o&&(s.$exception_DOMException_code=\"\"+o.code),s}if(function(t){return ve(t,\"ErrorEvent\")}(n)&&n.error)return Oe(n.error,i);if(de(n))return Oe(n,i);if(function(t){return ve(t,\"Object\")}(n)||ue(n))return Le(n,i);if(R(e)&&T(r)){var u=\"Error\",h=r,d=r.match(Re);return d&&(u=d[1],h=d[2]),Ae(h,B({},i,{overrideExceptionType:u,defaultExceptionMessage:h}))}return Ae(n,i)}function Ne(t,i,e){try{if(!(i in t))return()=>{};var r=t[i],s=e(r);return E(s)&&(s.prototype=s.prototype||{},Object.defineProperties(s,{__posthog_wrapped__:{enumerable:!1,value:!0}})),t[i]=s,()=>{t[i]=r}}catch(t){return()=>{}}}class ze{constructor(i){var e;this._instance=i,this.ft=(null==t||null==(e=t.location)?void 0:e.pathname)||\"\"}get isEnabled(){return\"history_change\"===this._instance.config.capture_pageview}startIfEnabled(){this.isEnabled&&(N.info(\"History API monitoring enabled, starting...\"),this.monitorHistoryChanges())}stop(){this._t&&this._t(),this._t=void 0,N.info(\"History API monitoring stopped\")}monitorHistoryChanges(){var i,e;if(t&&t.history){var r=this;null!=(i=t.history.pushState)&&i.__posthog_wrapped__||Ne(t.history,\"pushState\",(t=>function(i,e,s){t.call(this,i,e,s),r.gt(\"pushState\")})),null!=(e=t.history.replaceState)&&e.__posthog_wrapped__||Ne(t.history,\"replaceState\",(t=>function(i,e,s){t.call(this,i,e,s),r.gt(\"replaceState\")})),this.bt()}}gt(i){try{var e,r=null==t||null==(e=t.location)?void 0:e.pathname;if(!r)return;r!==this.ft&&this.isEnabled&&this._instance.capture(\"$pageview\",{navigation_type:i}),this.ft=r}catch(t){N.error(\"Error capturing \"+i+\" pageview\",t)}}bt(){if(!this._t){var i=()=>{this.gt(\"popstate\")};st(t,\"popstate\",i),this._t=()=>{t&&t.removeEventListener(\"popstate\",i)}}}}function Ue(t){var i,e;return(null==(i=JSON.stringify(t,(e=[],function(t,i){if(I(i)){for(;e.length>0&&e[e.length-1]!==this;)e.pop();return e.includes(i)?\"[Circular]\":(e.push(i),i)}return i})))?void 0:i.length)||0}function qe(t,i){if(void 0===i&&(i=6606028.8),t.size>=i&&t.data.length>1){var e=Math.floor(t.data.length/2),r=t.data.slice(0,e),s=t.data.slice(e);return[qe({size:Ue(r),data:r,sessionId:t.sessionId,windowId:t.windowId}),qe({size:Ue(s),data:s,sessionId:t.sessionId,windowId:t.windowId})].flatMap((t=>t))}return[t]}var Be=(t=>(t[t.DomContentLoaded=0]=\"DomContentLoaded\",t[t.Load=1]=\"Load\",t[t.FullSnapshot=2]=\"FullSnapshot\",t[t.IncrementalSnapshot=3]=\"IncrementalSnapshot\",t[t.Meta=4]=\"Meta\",t[t.Custom=5]=\"Custom\",t[t.Plugin=6]=\"Plugin\",t))(Be||{}),He=(t=>(t[t.Mutation=0]=\"Mutation\",t[t.MouseMove=1]=\"MouseMove\",t[t.MouseInteraction=2]=\"MouseInteraction\",t[t.Scroll=3]=\"Scroll\",t[t.ViewportResize=4]=\"ViewportResize\",t[t.Input=5]=\"Input\",t[t.TouchMove=6]=\"TouchMove\",t[t.MediaInteraction=7]=\"MediaInteraction\",t[t.StyleSheetRule=8]=\"StyleSheetRule\",t[t.CanvasMutation=9]=\"CanvasMutation\",t[t.Font=10]=\"Font\",t[t.Log=11]=\"Log\",t[t.Drag=12]=\"Drag\",t[t.StyleDeclaration=13]=\"StyleDeclaration\",t[t.Selection=14]=\"Selection\",t[t.AdoptedStyleSheet=15]=\"AdoptedStyleSheet\",t[t.CustomElement=16]=\"CustomElement\",t))(He||{}),We=\"[SessionRecording]\",Ge=\"redacted\",Je={initiatorTypes:[\"audio\",\"beacon\",\"body\",\"css\",\"early-hint\",\"embed\",\"fetch\",\"frame\",\"iframe\",\"icon\",\"image\",\"img\",\"input\",\"link\",\"navigation\",\"object\",\"ping\",\"script\",\"track\",\"video\",\"xmlhttprequest\"],maskRequestFn:t=>t,recordHeaders:!1,recordBody:!1,recordInitialRequests:!1,recordPerformance:!1,performanceEntryTypeToObserve:[\"first-input\",\"navigation\",\"paint\",\"resource\"],payloadSizeLimitBytes:1e6,payloadHostDenyList:[\".lr-ingest.io\",\".ingest.sentry.io\",\".clarity.ms\",\"analytics.google.com\",\"bam.nr-data.net\"]},Ve=[\"authorization\",\"x-forwarded-for\",\"authorization\",\"cookie\",\"set-cookie\",\"x-api-key\",\"x-real-ip\",\"remote-addr\",\"forwarded\",\"proxy-authorization\",\"x-csrf-token\",\"x-csrftoken\",\"x-xsrf-token\"],Ke=[\"password\",\"secret\",\"passwd\",\"api_key\",\"apikey\",\"auth\",\"credentials\",\"mysql_pwd\",\"privatekey\",\"private_key\",\"token\"],Ye=[\"/s/\",\"/e/\",\"/i/\"];function Xe(t,i,e,r){if(F(t))return t;var s=(null==i?void 0:i[\"content-length\"])||function(t){return new Blob([t]).size}(t);return T(s)&&(s=parseInt(s)),s>e?We+\" \"+r+\" body too large to record (\"+s+\" bytes)\":t}function Qe(t,i){if(F(t))return t;var e=t;return fi(e,!1)||(e=We+\" \"+i+\" body \"+Ge),J(Ke,(t=>{var r,s;null!=(r=e)&&r.length&&-1!==(null==(s=e)?void 0:s.indexOf(t))&&(e=We+\" \"+i+\" body \"+Ge+\" as might contain: \"+t)})),e}var Ze=(t,i)=>{var e,r,s,n={payloadSizeLimitBytes:Je.payloadSizeLimitBytes,performanceEntryTypeToObserve:[...Je.performanceEntryTypeToObserve],payloadHostDenyList:[...i.payloadHostDenyList||[],...Je.payloadHostDenyList]},o=!1!==t.session_recording.recordHeaders&&i.recordHeaders,a=!1!==t.session_recording.recordBody&&i.recordBody,l=!1!==t.capture_performance&&i.recordPerformance,u=(e=n,s=Math.min(1e6,null!==(r=e.payloadSizeLimitBytes)&&void 0!==r?r:1e6),t=>(null!=t&&t.requestBody&&(t.requestBody=Xe(t.requestBody,t.requestHeaders,s,\"Request\")),null!=t&&t.responseBody&&(t.responseBody=Xe(t.responseBody,t.responseHeaders,s,\"Response\")),t)),h=i=>{return u(((t,i)=>{var e,r=Si(t.name),s=0===i.indexOf(\"http\")?null==(e=Si(i))?void 0:e.pathname:i;\"/\"===s&&(s=\"\");var n=null==r?void 0:r.pathname.replace(s||\"\",\"\");if(!(r&&n&&Ye.some((t=>0===n.indexOf(t)))))return t})((r=(e=i).requestHeaders,F(r)||J(Object.keys(null!=r?r:{}),(t=>{Ve.includes(t.toLowerCase())&&(r[t]=Ge)})),e),t.api_host));var e,r},d=E(t.session_recording.maskNetworkRequestFn);return d&&E(t.session_recording.maskCapturedNetworkRequestFn)&&N.warn(\"Both `maskNetworkRequestFn` and `maskCapturedNetworkRequestFn` are defined. `maskNetworkRequestFn` will be ignored.\"),d&&(t.session_recording.maskCapturedNetworkRequestFn=i=>{var e=t.session_recording.maskNetworkRequestFn({url:i.name});return B({},i,{name:null==e?void 0:e.url})}),n.maskRequestFn=E(t.session_recording.maskCapturedNetworkRequestFn)?i=>{var e,r=h(i);return r&&null!==(e=null==t.session_recording.maskCapturedNetworkRequestFn?void 0:t.session_recording.maskCapturedNetworkRequestFn(r))&&void 0!==e?e:void 0}:t=>function(t){if(!R(t))return t.requestBody=Qe(t.requestBody,\"Request\"),t.responseBody=Qe(t.responseBody,\"Response\"),t}(h(t)),B({},Je,n,{recordHeaders:o,recordBody:a,recordPerformance:l,recordInitialRequests:l})};class tr{constructor(t,i){var e,r;void 0===i&&(i={}),this.yt={},this.wt=t=>{if(!this.yt[t]){var i,e;this.yt[t]=!0;var r=this.St(t);null==(i=(e=this.rt).onBlockedNode)||i.call(e,t,r)}},this.$t=t=>{var i=this.St(t);if(\"svg\"!==(null==i?void 0:i.nodeName)&&i instanceof Element){var e=i.closest(\"svg\");if(e)return[this._rrweb.mirror.getId(e),e]}return[t,i]},this.St=t=>this._rrweb.mirror.getNode(t),this.xt=t=>{var i,e,r,s,n,o,a,l;return(null!==(i=null==(e=t.removes)?void 0:e.length)&&void 0!==i?i:0)+(null!==(r=null==(s=t.attributes)?void 0:s.length)&&void 0!==r?r:0)+(null!==(n=null==(o=t.texts)?void 0:o.length)&&void 0!==n?n:0)+(null!==(a=null==(l=t.adds)?void 0:l.length)&&void 0!==a?a:0)},this.throttleMutations=t=>{if(3!==t.type||0!==t.data.source)return t;var i=t.data,e=this.xt(i);i.attributes&&(i.attributes=i.attributes.filter((t=>{var[i]=this.$t(t.id);return!this.ct.consumeRateLimit(i)&&t})));var r=this.xt(i);return 0!==r||e===r?t:void 0},this._rrweb=t,this.rt=i,this.ct=new oe({bucketSize:null!==(e=this.rt.bucketSize)&&void 0!==e?e:100,refillRate:null!==(r=this.rt.refillRate)&&void 0!==r?r:10,refillInterval:1e3,et:this.wt})}}var ir=Uint8Array,er=Uint16Array,rr=Uint32Array,sr=new ir([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),nr=new ir([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),or=new ir([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ar=function(t,i){for(var e=new er(31),r=0;r<31;++r)e[r]=i+=1<<t[r-1];var s=new rr(e[30]);for(r=1;r<30;++r)for(var n=e[r];n<e[r+1];++n)s[n]=n-e[r]<<5|r;return[e,s]},lr=ar(sr,2),ur=lr[0],hr=lr[1];ur[28]=258,hr[258]=28;for(var dr=ar(nr,0)[1],vr=new er(32768),cr=0;cr<32768;++cr){var fr=(43690&cr)>>>1|(21845&cr)<<1;fr=(61680&(fr=(52428&fr)>>>2|(13107&fr)<<2))>>>4|(3855&fr)<<4,vr[cr]=((65280&fr)>>>8|(255&fr)<<8)>>>1}var pr=function(t,i,e){for(var r=t.length,s=0,n=new er(i);s<r;++s)++n[t[s]-1];var o,a=new er(i);for(s=0;s<i;++s)a[s]=a[s-1]+n[s-1]<<1;if(e){o=new er(1<<i);var l=15-i;for(s=0;s<r;++s)if(t[s])for(var u=s<<4|t[s],h=i-t[s],d=a[t[s]-1]++<<h,v=d|(1<<h)-1;d<=v;++d)o[vr[d]>>>l]=u}else for(o=new er(r),s=0;s<r;++s)o[s]=vr[a[t[s]-1]++]>>>15-t[s];return o},_r=new ir(288);for(cr=0;cr<144;++cr)_r[cr]=8;for(cr=144;cr<256;++cr)_r[cr]=9;for(cr=256;cr<280;++cr)_r[cr]=7;for(cr=280;cr<288;++cr)_r[cr]=8;var gr=new ir(32);for(cr=0;cr<32;++cr)gr[cr]=5;var mr=pr(_r,9,0),br=pr(gr,5,0),yr=function(t){return(t/8>>0)+(7&t&&1)},wr=function(t,i,e){(null==e||e>t.length)&&(e=t.length);var r=new(t instanceof er?er:t instanceof rr?rr:ir)(e-i);return r.set(t.subarray(i,e)),r},Sr=function(t,i,e){e<<=7&i;var r=i/8>>0;t[r]|=e,t[r+1]|=e>>>8},$r=function(t,i,e){e<<=7&i;var r=i/8>>0;t[r]|=e,t[r+1]|=e>>>8,t[r+2]|=e>>>16},xr=function(t,i){for(var e=[],r=0;r<t.length;++r)t[r]&&e.push({s:r,f:t[r]});var s=e.length,n=e.slice();if(!s)return[new ir(0),0];if(1==s){var o=new ir(e[0].s+1);return o[e[0].s]=1,[o,1]}e.sort((function(t,i){return t.f-i.f})),e.push({s:-1,f:25001});var a=e[0],l=e[1],u=0,h=1,d=2;for(e[0]={s:-1,f:a.f+l.f,l:a,r:l};h!=s-1;)a=e[e[u].f<e[d].f?u++:d++],l=e[u!=h&&e[u].f<e[d].f?u++:d++],e[h++]={s:-1,f:a.f+l.f,l:a,r:l};var v=n[0].s;for(r=1;r<s;++r)n[r].s>v&&(v=n[r].s);var c=new er(v+1),f=kr(e[h-1],c,0);if(f>i){r=0;var p=0,_=f-i,g=1<<_;for(n.sort((function(t,i){return c[i.s]-c[t.s]||t.f-i.f}));r<s;++r){var m=n[r].s;if(!(c[m]>i))break;p+=g-(1<<f-c[m]),c[m]=i}for(p>>>=_;p>0;){var b=n[r].s;c[b]<i?p-=1<<i-c[b]++-1:++r}for(;r>=0&&p;--r){var y=n[r].s;c[y]==i&&(--c[y],++p)}f=i}return[new ir(c),f]},kr=function(t,i,e){return-1==t.s?Math.max(kr(t.l,i,e+1),kr(t.r,i,e+1)):i[t.s]=e},Er=function(t){for(var i=t.length;i&&!t[--i];);for(var e=new er(++i),r=0,s=t[0],n=1,o=function(t){e[r++]=t},a=1;a<=i;++a)if(t[a]==s&&a!=i)++n;else{if(!s&&n>2){for(;n>138;n-=138)o(32754);n>2&&(o(n>10?n-11<<5|28690:n-3<<5|12305),n=0)}else if(n>3){for(o(s),--n;n>6;n-=6)o(8304);n>2&&(o(n-3<<5|8208),n=0)}for(;n--;)o(s);n=1,s=t[a]}return[e.subarray(0,r),i]},Ir=function(t,i){for(var e=0,r=0;r<i.length;++r)e+=t[r]*i[r];return e},Pr=function(t,i,e){var r=e.length,s=yr(i+2);t[s]=255&r,t[s+1]=r>>>8,t[s+2]=255^t[s],t[s+3]=255^t[s+1];for(var n=0;n<r;++n)t[s+n+4]=e[n];return 8*(s+4+r)},Rr=function(t,i,e,r,s,n,o,a,l,u,h){Sr(i,h++,e),++s[256];for(var d=xr(s,15),v=d[0],c=d[1],f=xr(n,15),p=f[0],_=f[1],g=Er(v),m=g[0],b=g[1],y=Er(p),w=y[0],S=y[1],$=new er(19),x=0;x<m.length;++x)$[31&m[x]]++;for(x=0;x<w.length;++x)$[31&w[x]]++;for(var k=xr($,7),E=k[0],I=k[1],P=19;P>4&&!E[or[P-1]];--P);var R,T,M,C,F=u+5<<3,O=Ir(s,_r)+Ir(n,gr)+o,A=Ir(s,v)+Ir(n,p)+o+14+3*P+Ir($,E)+(2*$[16]+3*$[17]+7*$[18]);if(F<=O&&F<=A)return Pr(i,h,t.subarray(l,l+u));if(Sr(i,h,1+(A<O)),h+=2,A<O){R=pr(v,c,0),T=v,M=pr(p,_,0),C=p;var D=pr(E,I,0);Sr(i,h,b-257),Sr(i,h+5,S-1),Sr(i,h+10,P-4),h+=14;for(x=0;x<P;++x)Sr(i,h+3*x,E[or[x]]);h+=3*P;for(var L=[m,w],j=0;j<2;++j){var N=L[j];for(x=0;x<N.length;++x){var z=31&N[x];Sr(i,h,D[z]),h+=E[z],z>15&&(Sr(i,h,N[x]>>>5&127),h+=N[x]>>>12)}}}else R=mr,T=_r,M=br,C=gr;for(x=0;x<a;++x)if(r[x]>255){z=r[x]>>>18&31;$r(i,h,R[z+257]),h+=T[z+257],z>7&&(Sr(i,h,r[x]>>>23&31),h+=sr[z]);var U=31&r[x];$r(i,h,M[U]),h+=C[U],U>3&&($r(i,h,r[x]>>>5&8191),h+=nr[U])}else $r(i,h,R[r[x]]),h+=T[r[x]];return $r(i,h,R[256]),h+T[256]},Tr=new rr([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Mr=function(){for(var t=new rr(256),i=0;i<256;++i){for(var e=i,r=9;--r;)e=(1&e&&3988292384)^e>>>1;t[i]=e}return t}(),Cr=function(){var t=4294967295;return{p:function(i){for(var e=t,r=0;r<i.length;++r)e=Mr[255&e^i[r]]^e>>>8;t=e},d:function(){return 4294967295^t}}},Fr=function(t,i,e,r,s){return function(t,i,e,r,s,n){var o=t.length,a=new ir(r+o+5*(1+Math.floor(o/7e3))+s),l=a.subarray(r,a.length-s),u=0;if(!i||o<8)for(var h=0;h<=o;h+=65535){var d=h+65535;d<o?u=Pr(l,u,t.subarray(h,d)):(l[h]=n,u=Pr(l,u,t.subarray(h,o)))}else{for(var v=Tr[i-1],c=v>>>13,f=8191&v,p=(1<<e)-1,_=new er(32768),g=new er(p+1),m=Math.ceil(e/3),b=2*m,y=function(i){return(t[i]^t[i+1]<<m^t[i+2]<<b)&p},w=new rr(25e3),S=new er(288),$=new er(32),x=0,k=0,E=(h=0,0),I=0,P=0;h<o;++h){var R=y(h),T=32767&h,M=g[R];if(_[T]=M,g[R]=T,I<=h){var C=o-h;if((x>7e3||E>24576)&&C>423){u=Rr(t,l,0,w,S,$,k,E,P,h-P,u),E=x=k=0,P=h;for(var F=0;F<286;++F)S[F]=0;for(F=0;F<30;++F)$[F]=0}var O=2,A=0,D=f,L=T-M&32767;if(C>2&&R==y(h-L))for(var j=Math.min(c,C)-1,N=Math.min(32767,h),z=Math.min(258,C);L<=N&&--D&&T!=M;){if(t[h+O]==t[h+O-L]){for(var U=0;U<z&&t[h+U]==t[h+U-L];++U);if(U>O){if(O=U,A=L,U>j)break;var q=Math.min(L,U-2),B=0;for(F=0;F<q;++F){var H=h-L+F+32768&32767,W=H-_[H]+32768&32767;W>B&&(B=W,M=H)}}}L+=(T=M)-(M=_[T])+32768&32767}if(A){w[E++]=268435456|hr[O]<<18|dr[A];var G=31&hr[O],J=31&dr[A];k+=sr[G]+nr[J],++S[257+G],++$[J],I=h+O,++x}else w[E++]=t[h],++S[t[h]]}}u=Rr(t,l,n,w,S,$,k,E,P,h-P,u)}return wr(a,0,r+yr(u)+s)}(t,null==i.level?6:i.level,null==i.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(t.length)))):12+i.mem,e,r,!s)},Or=function(t,i,e){for(;e;++i)t[i]=e,e>>>=8},Ar=function(t,i){var e=i.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=i.level<2?4:9==i.level?2:0,t[9]=3,0!=i.mtime&&Or(t,4,Math.floor(new Date(i.mtime||Date.now())/1e3)),e){t[3]=8;for(var r=0;r<=e.length;++r)t[r+10]=e.charCodeAt(r)}},Dr=function(t){return 10+(t.filename&&t.filename.length+1||0)};function Lr(t,i){void 0===i&&(i={});var e=Cr(),r=t.length;e.p(t);var s=Fr(t,i,Dr(i),8),n=s.length;return Ar(s,i),Or(s,n-8,e.d()),Or(s,n-4,r),s}function jr(t,i){var e=t.length;if(\"undefined\"!=typeof TextEncoder)return(new TextEncoder).encode(t);for(var r=new ir(t.length+(t.length>>>1)),s=0,n=function(t){r[s++]=t},o=0;o<e;++o){if(s+5>r.length){var a=new ir(s+8+(e-o<<1));a.set(r),r=a}var l=t.charCodeAt(o);l<128||i?n(l):l<2048?(n(192|l>>>6),n(128|63&l)):l>55295&&l<57344?(n(240|(l=65536+(1047552&l)|1023&t.charCodeAt(++o))>>>18),n(128|l>>>12&63),n(128|l>>>6&63),n(128|63&l)):(n(224|l>>>12),n(128|l>>>6&63),n(128|63&l))}return wr(r,0,s)}function Nr(t,i){return function(t){for(var i=0,e=0;e<t.length;e++)i=(i<<5)-i+t.charCodeAt(e),i|=0;return Math.abs(i)}(t)%100<ne(100*i,0,100)}var zr=\"disabled\",Ur=\"sampled\",qr=\"active\",Br=\"buffering\",Hr=\"paused\",Wr=\"trigger\",Gr=Wr+\"_activated\",Jr=Wr+\"_pending\",Vr=Wr+\"_\"+zr;function Kr(t,i){return i.some((i=>\"regex\"===i.matching&&new RegExp(i.url).test(t)))}class Yr{constructor(t){this.kt=t}triggerStatus(t){var i=this.kt.map((i=>i.triggerStatus(t)));return i.includes(Gr)?Gr:i.includes(Jr)?Jr:Vr}stop(){this.kt.forEach((t=>t.stop()))}}class Xr{constructor(t){this.kt=t}triggerStatus(t){var i=new Set;for(var e of this.kt)i.add(e.triggerStatus(t));switch(i.delete(Vr),i.size){case 0:return Vr;case 1:return Array.from(i)[0];default:return Jr}}stop(){this.kt.forEach((t=>t.stop()))}}class Qr{triggerStatus(){return Jr}stop(){}}class Zr{constructor(t){this.Et=[],this.It=[],this.urlBlocked=!1,this._instance=t}onRemoteConfig(t){var i,e;this.Et=(null==(i=t.sessionRecording)?void 0:i.urlTriggers)||[],this.It=(null==(e=t.sessionRecording)?void 0:e.urlBlocklist)||[]}Pt(t){var i;return 0===this.Et.length?Vr:(null==(i=this._instance)?void 0:i.get_property(Et))===t?Gr:Jr}triggerStatus(t){var i=this.Pt(t),e=i===Gr?Gr:i===Jr?Jr:Vr;return this._instance.register_for_session({$sdk_debug_replay_url_trigger_status:e}),e}checkUrlTriggerConditions(i,e,r){if(void 0!==t&&t.location.href){var s=t.location.href,n=this.urlBlocked,o=Kr(s,this.It);n&&o||(o&&!n?i():!o&&n&&e(),Kr(s,this.Et)&&r(\"url\"))}}stop(){}}class ts{constructor(t){this.linkedFlag=null,this.linkedFlagSeen=!1,this.Rt=()=>{},this._instance=t}triggerStatus(){var t=Jr;return F(this.linkedFlag)&&(t=Vr),this.linkedFlagSeen&&(t=Gr),this._instance.register_for_session({$sdk_debug_replay_linked_flag_trigger_status:t}),t}onRemoteConfig(t,i){var e;if(this.linkedFlag=(null==(e=t.sessionRecording)?void 0:e.linkedFlag)||null,!F(this.linkedFlag)&&!this.linkedFlagSeen){var r=T(this.linkedFlag)?this.linkedFlag:this.linkedFlag.flag,s=T(this.linkedFlag)?null:this.linkedFlag.variant;this.Rt=this._instance.onFeatureFlags(((t,e)=>{var n=!1;if(I(e)&&r in e){var o=e[r];n=A(o)?!0===o:s?o===s:!!o}this.linkedFlagSeen=n,n&&i(r,s)}))}}stop(){this.Rt()}}class is{constructor(t){this.Tt=[],this._instance=t}onRemoteConfig(t){var i;this.Tt=(null==(i=t.sessionRecording)?void 0:i.eventTriggers)||[]}Mt(t){var i;return 0===this.Tt.length?Vr:(null==(i=this._instance)?void 0:i.get_property(It))===t?Gr:Jr}triggerStatus(t){var i=this.Mt(t),e=i===Gr?Gr:i===Jr?Jr:Vr;return this._instance.register_for_session({$sdk_debug_replay_event_trigger_status:e}),e}stop(){}}function es(t){return t.isRecordingEnabled?Br:zr}function rs(t){if(!t.receivedFlags)return Br;if(!t.isRecordingEnabled)return zr;if(t.urlTriggerMatching.urlBlocked)return Hr;var i=!0===t.isSampled,e=new Yr([t.eventTriggerMatching,t.urlTriggerMatching,t.linkedFlagMatching]).triggerStatus(t.sessionId);return i?Ur:e===Gr?qr:e===Jr?Br:!1===t.isSampled?zr:qr}function ss(t){if(!t.receivedFlags)return Br;if(!t.isRecordingEnabled)return zr;if(t.urlTriggerMatching.urlBlocked)return Hr;var i=new Xr([t.eventTriggerMatching,t.urlTriggerMatching,t.linkedFlagMatching]).triggerStatus(t.sessionId),e=i!==Vr,r=A(t.isSampled);return e&&i===Jr?Br:e&&i===Vr||r&&!t.isSampled?zr:!0===t.isSampled?Ur:qr}var ns=\"[SessionRecording]\",os=z(ns);function as(){var t;return null==v||null==(t=v.__PosthogExtensions__)||null==(t=t.rrweb)?void 0:t.record}var ls=3e5,us=[He.MouseMove,He.MouseInteraction,He.Scroll,He.ViewportResize,He.Input,He.TouchMove,He.MediaInteraction,He.Drag],hs=t=>({rrwebMethod:t,enqueuedAt:Date.now(),attempt:1});function ds(t){return function(t,i){for(var e=\"\",r=0;r<t.length;){var s=t[r++];s<128||i?e+=String.fromCharCode(s):s<224?e+=String.fromCharCode((31&s)<<6|63&t[r++]):s<240?e+=String.fromCharCode((15&s)<<12|(63&t[r++])<<6|63&t[r++]):(s=((15&s)<<18|(63&t[r++])<<12|(63&t[r++])<<6|63&t[r++])-65536,e+=String.fromCharCode(55296|s>>10,56320|1023&s))}return e}(Lr(jr(JSON.stringify(t))),!0)}function vs(t){return t.type===Be.Custom&&\"sessionIdle\"===t.data.tag}class cs{get sessionId(){return this.Ct}get Ft(){return this._instance.config.session_recording.session_idle_threshold_ms||3e5}get started(){return this.Ot}get At(){if(!this._instance.sessionManager)throw new Error(ns+\" must be started with a valid sessionManager.\");return this._instance.sessionManager}get Dt(){var t,i;return this.Lt.triggerStatus(this.sessionId)===Jr?6e4:null!==(t=null==(i=this._instance.config.session_recording)?void 0:i.full_snapshot_interval_millis)&&void 0!==t?t:ls}get jt(){var t=this._instance.get_property(kt);return A(t)?t:null}get Nt(){var t,i,e=null==(t=this.C)?void 0:t.data[(null==(i=this.C)?void 0:i.data.length)-1],{sessionStartTimestamp:r}=this.At.checkAndGetSessionAndWindowId(!0);return e?e.timestamp-r:null}get zt(){var i=!!this._instance.get_property(_t),e=!this._instance.config.disable_session_recording;return t&&i&&e}get Ut(){var t=!!this._instance.get_property(gt),i=this._instance.config.enable_recording_console_log;return null!=i?i:t}get qt(){var t,i,e,r,s,n,o=this._instance.config.session_recording.captureCanvas,a=this._instance.get_property(yt),l=null!==(t=null!==(i=null==o?void 0:o.recordCanvas)&&void 0!==i?i:null==a?void 0:a.enabled)&&void 0!==t&&t,u=null!==(e=null!==(r=null==o?void 0:o.canvasFps)&&void 0!==r?r:null==a?void 0:a.fps)&&void 0!==e?e:4,h=null!==(s=null!==(n=null==o?void 0:o.canvasQuality)&&void 0!==n?n:null==a?void 0:a.quality)&&void 0!==s?s:.4;if(\"string\"==typeof h){var d=parseFloat(h);h=isNaN(d)?.4:d}return{enabled:l,fps:ne(u,0,12,\"canvas recording fps\",4),quality:ne(h,0,1,\"canvas recording quality\",.4)}}get Bt(){var t,i,e=this._instance.get_property(mt),r={recordHeaders:null==(t=this._instance.config.session_recording)?void 0:t.recordHeaders,recordBody:null==(i=this._instance.config.session_recording)?void 0:i.recordBody},s=(null==r?void 0:r.recordHeaders)||(null==e?void 0:e.recordHeaders),n=(null==r?void 0:r.recordBody)||(null==e?void 0:e.recordBody),o=I(this._instance.config.capture_performance)?this._instance.config.capture_performance.network_timing:this._instance.config.capture_performance,a=!!(A(o)?o:null==e?void 0:e.capturePerformance);return s||n||a?{recordHeaders:s,recordBody:n,recordPerformance:a}:void 0}get Ht(){var t,i,e,r,s,n,o=this._instance.get_property(bt),a={maskAllInputs:null==(t=this._instance.config.session_recording)?void 0:t.maskAllInputs,maskTextSelector:null==(i=this._instance.config.session_recording)?void 0:i.maskTextSelector,blockSelector:null==(e=this._instance.config.session_recording)?void 0:e.blockSelector},l=null!==(r=null==a?void 0:a.maskAllInputs)&&void 0!==r?r:null==o?void 0:o.maskAllInputs,u=null!==(s=null==a?void 0:a.maskTextSelector)&&void 0!==s?s:null==o?void 0:o.maskTextSelector,h=null!==(n=null==a?void 0:a.blockSelector)&&void 0!==n?n:null==o?void 0:o.blockSelector;return R(l)&&R(u)&&R(h)?void 0:{maskAllInputs:null==l||l,maskTextSelector:u,blockSelector:h}}get Wt(){var t=this._instance.get_property(wt);return O(t)?t:null}get Gt(){var t=this._instance.get_property(St);return O(t)?t:null}get status(){return this.Jt?this.Vt({receivedFlags:this.Jt,isRecordingEnabled:this.zt,isSampled:this.jt,urlTriggerMatching:this.Kt,eventTriggerMatching:this.Yt,linkedFlagMatching:this.Xt,sessionId:this.sessionId}):Br}constructor(t){if(this.Vt=es,this.Jt=!1,this.Qt=[],this.Zt=\"unknown\",this.ti=Date.now(),this.Lt=new Qr,this.ii=void 0,this.ei=void 0,this.ri=void 0,this.si=void 0,this.ni=void 0,this._forceAllowLocalhostNetworkCapture=!1,this.oi=()=>{this.ai()},this.li=()=>{this.ui(\"browser offline\",{})},this.hi=()=>{this.ui(\"browser online\",{})},this.di=()=>{if(null!=o&&o.visibilityState){var t=\"window \"+o.visibilityState;this.ui(t,{})}},this._instance=t,this.Ot=!1,this.vi=\"/s/\",this.ci=void 0,this.Jt=!1,!this._instance.sessionManager)throw os.error(\"started without valid sessionManager\"),new Error(ns+\" started without valid sessionManager. This is a bug.\");if(this._instance.config.__preview_experimental_cookieless_mode)throw new Error(ns+\" cannot be used with __preview_experimental_cookieless_mode.\");this.Xt=new ts(this._instance),this.Kt=new Zr(this._instance),this.Yt=new is(this._instance);var{sessionId:i,windowId:e}=this.At.checkAndGetSessionAndWindowId();this.Ct=i,this.fi=e,this.C=this.pi(),this.Ft>=this.At.sessionTimeoutMs&&os.warn(\"session_idle_threshold_ms (\"+this.Ft+\") is greater than the session timeout (\"+this.At.sessionTimeoutMs+\"). Session will never be detected as idle\")}startIfEnabledOrStop(i){this.zt?(this.gi(i),st(t,\"beforeunload\",this.oi),st(t,\"offline\",this.li),st(t,\"online\",this.hi),st(t,\"visibilitychange\",this.di),this.mi(),this.bi(),F(this.ii)&&(this.ii=this._instance.on(\"eventCaptured\",(t=>{try{if(\"$pageview\"===t.event){var i=null!=t&&t.properties.$current_url?this.yi(null==t?void 0:t.properties.$current_url):\"\";if(!i)return;this.ui(\"$pageview\",{href:i})}}catch(t){os.error(\"Could not add $pageview to rrweb session\",t)}}))),this.ei||(this.ei=this.At.onSessionId(((t,i,e)=>{var r,s;e&&(this.ui(\"$session_id_change\",{sessionId:t,windowId:i,changeReason:e}),null==(r=this._instance)||null==(r=r.persistence)||r.unregister(It),null==(s=this._instance)||null==(s=s.persistence)||s.unregister(Et))})))):this.stopRecording()}stopRecording(){var i,e,r,s;this.Ot&&this.ci&&(this.ci(),this.ci=void 0,this.Ot=!1,null==t||t.removeEventListener(\"beforeunload\",this.oi),null==t||t.removeEventListener(\"offline\",this.li),null==t||t.removeEventListener(\"online\",this.hi),null==t||t.removeEventListener(\"visibilitychange\",this.di),this.pi(),clearInterval(this.wi),null==(i=this.ii)||i.call(this),this.ii=void 0,null==(e=this.ni)||e.call(this),this.ni=void 0,null==(r=this.ei)||r.call(this),this.ei=void 0,null==(s=this.si)||s.call(this),this.si=void 0,this.Yt.stop(),this.Kt.stop(),this.Xt.stop(),os.info(\"stopped\"))}Si(){var t;null==(t=this._instance.persistence)||t.unregister(kt)}$i(t){var i,e=this.Ct!==t,r=this.Wt;if(O(r)){var s=this.jt,n=e||!A(s),o=n?Nr(t,r):s;n&&(o?this.xi(Ur):os.warn(\"Sample rate (\"+r+\") has determined that this sessionId (\"+t+\") will not be sent to the server.\"),this.ui(\"samplingDecisionMade\",{sampleRate:r,isSampled:o})),null==(i=this._instance.persistence)||i.register({[kt]:o})}else this.Si()}onRemoteConfig(t){var i,e,r,s;(this.ui(\"$remote_config_received\",t),this.ki(t),null!=(i=t.sessionRecording)&&i.endpoint)&&(this.vi=null==(s=t.sessionRecording)?void 0:s.endpoint);this.mi(),\"any\"===(null==(e=t.sessionRecording)?void 0:e.triggerMatchType)?(this.Vt=rs,this.Lt=new Yr([this.Yt,this.Kt])):(this.Vt=ss,this.Lt=new Xr([this.Yt,this.Kt])),this._instance.register_for_session({$sdk_debug_replay_remote_trigger_matching_config:null==(r=t.sessionRecording)?void 0:r.triggerMatchType}),this.Kt.onRemoteConfig(t),this.Yt.onRemoteConfig(t),this.Xt.onRemoteConfig(t,((t,i)=>{this.xi(\"linked_flag_matched\",{flag:t,variant:i})})),this.Jt=!0,this.startIfEnabledOrStop()}mi(){O(this.Wt)&&F(this.si)&&(this.si=this.At.onSessionId((t=>{this.$i(t)})))}ki(t){if(this._instance.persistence){var i,e=this._instance.persistence,r=()=>{var i,r,s,n,o,a,l,u,h,d=null==(i=t.sessionRecording)?void 0:i.sampleRate,v=F(d)?null:parseFloat(d);F(v)&&this.Si();var c=null==(r=t.sessionRecording)?void 0:r.minimumDurationMilliseconds;e.register({[_t]:!!t.sessionRecording,[gt]:null==(s=t.sessionRecording)?void 0:s.consoleLogRecordingEnabled,[mt]:B({capturePerformance:t.capturePerformance},null==(n=t.sessionRecording)?void 0:n.networkPayloadCapture),[bt]:null==(o=t.sessionRecording)?void 0:o.masking,[yt]:{enabled:null==(a=t.sessionRecording)?void 0:a.recordCanvas,fps:null==(l=t.sessionRecording)?void 0:l.canvasFps,quality:null==(u=t.sessionRecording)?void 0:u.canvasQuality},[wt]:v,[St]:R(c)?null:c,[$t]:null==(h=t.sessionRecording)?void 0:h.scriptConfig})};r(),null==(i=this.ri)||i.call(this),this.ri=this.At.onSessionId(r)}}log(t,i){var e;void 0===i&&(i=\"log\"),null==(e=this._instance.sessionRecording)||e.onRRwebEmit({type:6,data:{plugin:\"rrweb/console@1\",payload:{level:i,trace:[],payload:[JSON.stringify(t)]}},timestamp:Date.now()})}gi(t){if(!R(Object.assign)&&!R(Array.from)&&!(this.Ot||this._instance.config.disable_session_recording||this._instance.consent.isOptedOut())){var i;if(this.Ot=!0,this.At.checkAndGetSessionAndWindowId(),as())this.Ei();else null==(i=v.__PosthogExtensions__)||null==i.loadExternalDependency||i.loadExternalDependency(this._instance,this.Ii,(t=>{if(t)return os.error(\"could not load recorder\",t);this.Ei()}));os.info(\"starting\"),this.status===qr&&this.xi(t||\"recording_initialized\")}}get Ii(){var t;return(null==(t=this._instance)||null==(t=t.persistence)||null==(t=t.get_property($t))?void 0:t.script)||\"recorder\"}Pi(t){var i;return 3===t.type&&-1!==us.indexOf(null==(i=t.data)?void 0:i.source)}Ri(t){var i=this.Pi(t);i||this.Zt||t.timestamp-this.ti>this.Ft&&(this.Zt=!0,clearInterval(this.wi),this.ui(\"sessionIdle\",{eventTimestamp:t.timestamp,lastActivityTimestamp:this.ti,threshold:this.Ft,bufferLength:this.C.data.length,bufferSize:this.C.size}),this.ai());var e=!1;if(i&&(this.ti=t.timestamp,this.Zt)){var r=\"unknown\"===this.Zt;this.Zt=!1,r||(this.ui(\"sessionNoLongerIdle\",{reason:\"user activity\",type:t.type}),e=!0)}if(!this.Zt){var{windowId:s,sessionId:n}=this.At.checkAndGetSessionAndWindowId(!i,t.timestamp),o=this.Ct!==n,a=this.fi!==s;this.fi=s,this.Ct=n,o||a?(this.stopRecording(),this.startIfEnabledOrStop(\"session_id_changed\")):e&&this.Ti()}}Mi(t){try{return t.rrwebMethod(),!0}catch(i){return this.Qt.length<10?this.Qt.push({enqueuedAt:t.enqueuedAt||Date.now(),attempt:t.attempt++,rrwebMethod:t.rrwebMethod}):os.warn(\"could not emit queued rrweb event.\",i,t),!1}}ui(t,i){return this.Mi(hs((()=>as().addCustomEvent(t,i))))}Ci(){return this.Mi(hs((()=>as().takeFullSnapshot())))}Ei(){var t,i,e,r,s={blockClass:\"ph-no-capture\",blockSelector:void 0,ignoreClass:\"ph-ignore-input\",maskTextClass:\"ph-mask\",maskTextSelector:void 0,maskTextFn:void 0,maskAllInputs:!0,maskInputOptions:{password:!0},maskInputFn:void 0,slimDOMOptions:{},collectFonts:!1,inlineStylesheet:!0,recordCrossOriginIframes:!1},n=this._instance.config.session_recording;for(var[o,a]of Object.entries(n||{}))o in s&&(\"maskInputOptions\"===o?s.maskInputOptions=B({password:!0},a):s[o]=a);(this.qt&&this.qt.enabled&&(s.recordCanvas=!0,s.sampling={canvas:this.qt.fps},s.dataURLOptions={type:\"image/webp\",quality:this.qt.quality}),this.Ht)&&(s.maskAllInputs=null===(i=this.Ht.maskAllInputs)||void 0===i||i,s.maskTextSelector=null!==(e=this.Ht.maskTextSelector)&&void 0!==e?e:void 0,s.blockSelector=null!==(r=this.Ht.blockSelector)&&void 0!==r?r:void 0);var l=as();if(l){this.Fi=null!==(t=this.Fi)&&void 0!==t?t:new tr(l,{refillRate:this._instance.config.session_recording.__mutationThrottlerRefillRate,bucketSize:this._instance.config.session_recording.__mutationThrottlerBucketSize,onBlockedNode:(t,i)=>{var e=\"Too many mutations on node '\"+t+\"'. Rate limiting. This could be due to SVG animations or something similar\";os.info(e,{node:i}),this.log(ns+\" \"+e,\"warn\")}});var u=this.Oi();this.ci=l(B({emit:t=>{this.onRRwebEmit(t)},plugins:u},s)),this.ti=Date.now(),this.Zt=A(this.Zt)?this.Zt:\"unknown\",this.ui(\"$session_options\",{sessionRecordingOptions:s,activePlugins:u.map((t=>null==t?void 0:t.name))}),this.ui(\"$posthog_config\",{config:this._instance.config})}else os.error(\"onScriptLoaded was called but rrwebRecord is not available. This indicates something has gone wrong.\")}Ti(){if(this.wi&&clearInterval(this.wi),!0!==this.Zt){var t=this.Dt;t&&(this.wi=setInterval((()=>{this.Ci()}),t))}}Oi(){var t,i,e=[],r=null==(t=v.__PosthogExtensions__)||null==(t=t.rrwebPlugins)?void 0:t.getRecordConsolePlugin;r&&this.Ut&&e.push(r());var s=null==(i=v.__PosthogExtensions__)||null==(i=i.rrwebPlugins)?void 0:i.getRecordNetworkPlugin;this.Bt&&E(s)&&(!wi.includes(location.hostname)||this._forceAllowLocalhostNetworkCapture?e.push(s(Ze(this._instance.config,this.Bt))):os.info(\"NetworkCapture not started because we are on localhost.\"));return e}onRRwebEmit(t){var i;if(this.Ai(),t&&I(t)){if(t.type===Be.Meta){var e=this.yi(t.data.href);if(this.Di=e,!e)return;t.data.href=e}else this.Li();if(this.Kt.checkUrlTriggerConditions((()=>this.ji()),(()=>this.Ni()),(t=>this.zi(t))),!this.Kt.urlBlocked||(r=t).type===Be.Custom&&\"recording paused\"===r.data.tag){var r;t.type===Be.FullSnapshot&&this.Ti(),t.type===Be.FullSnapshot&&this.Jt&&this.Lt.triggerStatus(this.sessionId)===Jr&&this.pi();var s=this.Fi?this.Fi.throttleMutations(t):t;if(s){var n=function(t){var i=t;if(i&&I(i)&&6===i.type&&I(i.data)&&\"rrweb/console@1\"===i.data.plugin){i.data.payload.payload.length>10&&(i.data.payload.payload=i.data.payload.payload.slice(0,10),i.data.payload.payload.push(\"...[truncated]\"));for(var e=[],r=0;r<i.data.payload.payload.length;r++)i.data.payload.payload[r]&&i.data.payload.payload[r].length>2e3?e.push(i.data.payload.payload[r].slice(0,2e3)+\"...[truncated]\"):e.push(i.data.payload.payload[r]);return i.data.payload.payload=e,t}return t}(s);if(this.Ri(n),!0!==this.Zt||vs(n)){if(vs(n)){var o=n.data.payload;if(o){var a=o.lastActivityTimestamp,l=o.threshold;n.timestamp=a+l}}var u=null===(i=this._instance.config.session_recording.compress_events)||void 0===i||i?function(t){if(Ue(t)<1024)return t;try{if(t.type===Be.FullSnapshot)return B({},t,{data:ds(t.data),cv:\"2024-10\"});if(t.type===Be.IncrementalSnapshot&&t.data.source===He.Mutation)return B({},t,{cv:\"2024-10\",data:B({},t.data,{texts:ds(t.data.texts),attributes:ds(t.data.attributes),removes:ds(t.data.removes),adds:ds(t.data.adds)})});if(t.type===Be.IncrementalSnapshot&&t.data.source===He.StyleSheetRule)return B({},t,{cv:\"2024-10\",data:B({},t.data,{adds:t.data.adds?ds(t.data.adds):void 0,removes:t.data.removes?ds(t.data.removes):void 0})})}catch(t){os.error(\"could not compress event - will use uncompressed event\",t)}return t}(n):n,h={$snapshot_bytes:Ue(u),$snapshot_data:u,$session_id:this.Ct,$window_id:this.fi};this.status!==zr?this.Ui(h):this.pi()}}}}}Li(){if(!this._instance.config.capture_pageview&&t){var i=this.yi(t.location.href);this.Di!==i&&(this.ui(\"$url_changed\",{href:i}),this.Di=i)}}Ai(){if(this.Qt.length){var t=[...this.Qt];this.Qt=[],t.forEach((t=>{Date.now()-t.enqueuedAt<=2e3&&this.Mi(t)}))}}yi(t){var i=this._instance.config.session_recording;if(i.maskNetworkRequestFn){var e,r={url:t};return null==(e=r=i.maskNetworkRequestFn(r))?void 0:e.url}return t}pi(){return this.C={size:0,data:[],sessionId:this.Ct,windowId:this.fi},this.C}ai(){this.qi&&(clearTimeout(this.qi),this.qi=void 0);var t=this.Gt,i=this.Nt,e=O(i)&&i>=0,r=O(t)&&e&&i<t;if(this.status===Br||this.status===Hr||this.status===zr||r)return this.qi=setTimeout((()=>{this.ai()}),2e3),this.C;this.C.data.length>0&&qe(this.C).forEach((t=>{this.Bi({$snapshot_bytes:t.size,$snapshot_data:t.data,$session_id:t.sessionId,$window_id:t.windowId,$lib:\"web\",$lib_version:c.LIB_VERSION})}));return this.pi()}Ui(t){var i,e=2+((null==(i=this.C)?void 0:i.data.length)||0);!this.Zt&&(this.C.size+t.$snapshot_bytes+e>943718.4||this.C.sessionId!==this.Ct)&&(this.C=this.ai()),this.C.size+=t.$snapshot_bytes,this.C.data.push(t.$snapshot_data),this.qi||this.Zt||(this.qi=setTimeout((()=>{this.ai()}),2e3))}Bi(t){this._instance.capture(\"$snapshot\",t,{_url:this._instance.requestRouter.endpointFor(\"api\",this.vi),_noTruncate:!0,_batchKey:\"recordings\",skip_client_rate_limiting:!0})}zi(t){var i;this.Lt.triggerStatus(this.sessionId)===Jr&&(null==(i=this._instance)||null==(i=i.persistence)||i.register({[\"url\"===t?Et:It]:this.Ct}),this.ai(),this.xi(t+\"_trigger_matched\"))}ji(){this.Kt.urlBlocked||(this.Kt.urlBlocked=!0,clearInterval(this.wi),os.info(\"recording paused due to URL blocker\"),this.ui(\"recording paused\",{reason:\"url blocker\"}))}Ni(){this.Kt.urlBlocked&&(this.Kt.urlBlocked=!1,this.Ci(),this.Ti(),this.ui(\"recording resumed\",{reason:\"left blocked url\"}),os.info(\"recording resumed\"))}bi(){0!==this.Yt.Tt.length&&F(this.ni)&&(this.ni=this._instance.on(\"eventCaptured\",(t=>{try{this.Yt.Tt.includes(t.event)&&this.zi(\"event\")}catch(t){os.error(\"Could not activate event trigger\",t)}})))}overrideLinkedFlag(){this.Xt.linkedFlagSeen=!0,this.Ci(),this.xi(\"linked_flag_overridden\")}overrideSampling(){var t;null==(t=this._instance.persistence)||t.register({[kt]:!0}),this.Ci(),this.xi(\"sampling_overridden\")}overrideTrigger(t){this.zi(t)}xi(t,i){this._instance.register_for_session({$session_recording_start_reason:t}),os.info(t.replace(\"_\",\" \"),i),m([\"recording_initialized\",\"session_id_changed\"],t)||this.ui(t,i)}get sdkDebugProperties(){var{sessionStartTimestamp:t}=this.At.checkAndGetSessionAndWindowId(!0);return{$recording_status:this.status,$sdk_debug_replay_internal_buffer_length:this.C.data.length,$sdk_debug_replay_internal_buffer_size:this.C.size,$sdk_debug_current_session_duration:this.Nt,$sdk_debug_session_start:t}}}var fs=z(\"[SegmentIntegration]\");function ps(t,i){var e=t.config.segment;if(!e)return i();!function(t,i){var e=t.config.segment;if(!e)return i();var r=e=>{var r=()=>e.anonymousId()||Ni();t.config.get_device_id=r,e.id()&&(t.register({distinct_id:e.id(),$device_id:r()}),t.persistence.set_property(Dt,\"identified\")),i()},s=e.user();\"then\"in s&&E(s.then)?s.then((t=>r(t))):r(s)}(t,(()=>{e.register((t=>{Promise&&Promise.resolve||fs.warn(\"This browser does not have Promise support, and can not use the segment integration\");var i=(i,e)=>{if(!e)return i;i.event.userId||i.event.anonymousId===t.get_distinct_id()||(fs.info(\"No userId set, resetting PostHog\"),t.reset()),i.event.userId&&i.event.userId!==t.get_distinct_id()&&(fs.info(\"UserId set, identifying with PostHog\"),t.identify(i.event.userId));var r=t.calculateEventProperties(e,i.event.properties);return i.event.properties=Object.assign({},r,i.event.properties),i};return{name:\"PostHog JS\",type:\"enrichment\",version:\"1.0.0\",isLoaded:()=>!0,load:()=>Promise.resolve(),track:t=>i(t,t.event.event),page:t=>i(t,\"$pageview\"),identify:t=>i(t,\"$identify\"),screen:t=>i(t,\"$screen\")}})(t)).then((()=>{i()}))}))}var _s=\"posthog-js\";function gs(t,i){var{organization:e,projectId:r,prefix:s,severityAllowList:n=[\"error\"]}=void 0===i?{}:i;return i=>{var o,a,l,u,h;if(!(\"*\"===n||n.includes(i.level))||!t.__loaded)return i;i.tags||(i.tags={});var d=t.requestRouter.endpointFor(\"ui\",\"/project/\"+t.config.token+\"/person/\"+t.get_distinct_id());i.tags[\"PostHog Person URL\"]=d,t.sessionRecordingStarted()&&(i.tags[\"PostHog Recording URL\"]=t.get_session_replay_url({withTimestamp:!0}));var v=(null==(o=i.exception)?void 0:o.values)||[],c=v.map((t=>B({},t,{stacktrace:t.stacktrace?B({},t.stacktrace,{type:\"raw\",frames:(t.stacktrace.frames||[]).map((t=>B({},t,{platform:\"web:javascript\"})))}):void 0}))),f={$exception_message:(null==(a=v[0])?void 0:a.value)||i.message,$exception_type:null==(l=v[0])?void 0:l.type,$exception_personURL:d,$exception_level:i.level,$exception_list:c,$sentry_event_id:i.event_id,$sentry_exception:i.exception,$sentry_exception_message:(null==(u=v[0])?void 0:u.value)||i.message,$sentry_exception_type:null==(h=v[0])?void 0:h.type,$sentry_tags:i.tags};return e&&r&&(f.$sentry_url=(s||\"https://sentry.io/organizations/\")+e+\"/issues/?project=\"+r+\"&query=\"+i.event_id),t.exceptions.sendExceptionEvent(f),i}}class ms{constructor(t,i,e,r,s){this.name=_s,this.setupOnce=function(n){n(gs(t,{organization:i,projectId:e,prefix:r,severityAllowList:s}))}}}var bs=null!=t&&t.location?Ei(t.location.hash,\"__posthog\")||Ei(location.hash,\"state\"):null,ys=\"_postHogToolbarParams\",ws=z(\"[Toolbar]\"),Ss=function(t){return t[t.UNINITIALIZED=0]=\"UNINITIALIZED\",t[t.LOADING=1]=\"LOADING\",t[t.LOADED=2]=\"LOADED\",t}(Ss||{});class $s{constructor(t){this.instance=t}Hi(t){v.ph_toolbar_state=t}Wi(){var t;return null!==(t=v.ph_toolbar_state)&&void 0!==t?t:Ss.UNINITIALIZED}maybeLoadToolbar(i,e,r){if(void 0===i&&(i=void 0),void 0===e&&(e=void 0),void 0===r&&(r=void 0),!t||!o)return!1;i=null!=i?i:t.location,r=null!=r?r:t.history;try{if(!e){try{t.localStorage.setItem(\"test\",\"test\"),t.localStorage.removeItem(\"test\")}catch(t){return!1}e=null==t?void 0:t.localStorage}var s,n=bs||Ei(i.hash,\"__posthog\")||Ei(i.hash,\"state\"),a=n?X((()=>JSON.parse(atob(decodeURIComponent(n)))))||X((()=>JSON.parse(decodeURIComponent(n)))):null;return a&&\"ph_authorize\"===a.action?((s=a).source=\"url\",s&&Object.keys(s).length>0&&(a.desiredHash?i.hash=a.desiredHash:r?r.replaceState(r.state,\"\",i.pathname+i.search):i.hash=\"\")):((s=JSON.parse(e.getItem(ys)||\"{}\")).source=\"localstorage\",delete s.userIntent),!(!s.token||this.instance.config.token!==s.token)&&(this.loadToolbar(s),!0)}catch(t){return!1}}Gi(t){var i=v.ph_load_toolbar||v.ph_load_editor;!F(i)&&E(i)?i(t,this.instance):ws.warn(\"No toolbar load function found\")}loadToolbar(i){var e=!(null==o||!o.getElementById(Bt));if(!t||e)return!1;var r=\"custom\"===this.instance.requestRouter.region&&this.instance.config.advanced_disable_toolbar_metrics,s=B({token:this.instance.config.token},i,{apiURL:this.instance.requestRouter.endpointFor(\"ui\")},r?{instrument:!1}:{});if(t.localStorage.setItem(ys,JSON.stringify(B({},s,{source:void 0}))),this.Wi()===Ss.LOADED)this.Gi(s);else if(this.Wi()===Ss.UNINITIALIZED){var n;this.Hi(Ss.LOADING),null==(n=v.__PosthogExtensions__)||null==n.loadExternalDependency||n.loadExternalDependency(this.instance,\"toolbar\",(t=>{if(t)return ws.error(\"[Toolbar] Failed to load\",t),void this.Hi(Ss.UNINITIALIZED);this.Hi(Ss.LOADED),this.Gi(s)})),st(t,\"turbolinks:load\",(()=>{this.Hi(Ss.UNINITIALIZED),this.loadToolbar(s)}))}return!0}Ji(t){return this.loadToolbar(t)}maybeLoadEditor(t,i,e){return void 0===t&&(t=void 0),void 0===i&&(i=void 0),void 0===e&&(e=void 0),this.maybeLoadToolbar(t,i,e)}}var xs=z(\"[TracingHeaders]\");class ks{constructor(t){this.Vi=void 0,this.Ki=void 0,this.nt=()=>{var t,i;R(this.Vi)&&(null==(t=v.__PosthogExtensions__)||null==(t=t.tracingHeadersPatchFns)||t._patchXHR(this._instance.config.__add_tracing_headers||[],this._instance.get_distinct_id(),this._instance.sessionManager));R(this.Ki)&&(null==(i=v.__PosthogExtensions__)||null==(i=i.tracingHeadersPatchFns)||i._patchFetch(this._instance.config.__add_tracing_headers||[],this._instance.get_distinct_id(),this._instance.sessionManager))},this._instance=t}J(t){var i,e;null!=(i=v.__PosthogExtensions__)&&i.tracingHeadersPatchFns&&t(),null==(e=v.__PosthogExtensions__)||null==e.loadExternalDependency||e.loadExternalDependency(this._instance,\"tracing-headers\",(i=>{if(i)return xs.error(\"failed to load script\",i);t()}))}startIfEnabledOrStop(){var t,i;this._instance.config.__add_tracing_headers?this.J(this.nt):(null==(t=this.Vi)||t.call(this),null==(i=this.Ki)||i.call(this),this.Vi=void 0,this.Ki=void 0)}}var Es=z(\"[Web Vitals]\"),Is=9e5;class Ps{constructor(t){var i;this.Yi=!1,this.i=!1,this.C={url:void 0,metrics:[],firstMetricTimestamp:void 0},this.Xi=()=>{clearTimeout(this.Qi),0!==this.C.metrics.length&&(this._instance.capture(\"$web_vitals\",this.C.metrics.reduce(((t,i)=>B({},t,{[\"$web_vitals_\"+i.name+\"_event\"]:B({},i),[\"$web_vitals_\"+i.name+\"_value\"]:i.value})),{})),this.C={url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.Zi=t=>{var i,e=null==(i=this._instance.sessionManager)?void 0:i.checkAndGetSessionAndWindowId(!0);if(R(e))Es.error(\"Could not read session ID. Dropping metrics!\");else{this.C=this.C||{url:void 0,metrics:[],firstMetricTimestamp:void 0};var r=this.te();if(!R(r))if(F(null==t?void 0:t.name)||F(null==t?void 0:t.value))Es.error(\"Invalid metric received\",t);else if(this.ie&&t.value>=this.ie)Es.error(\"Ignoring metric with value >= \"+this.ie,t);else this.C.url!==r&&(this.Xi(),this.Qi=setTimeout(this.Xi,this.flushToCaptureTimeoutMs)),R(this.C.url)&&(this.C.url=r),this.C.firstMetricTimestamp=R(this.C.firstMetricTimestamp)?Date.now():this.C.firstMetricTimestamp,t.attribution&&t.attribution.interactionTargetElement&&(t.attribution.interactionTargetElement=void 0),this.C.metrics.push(B({},t,{$current_url:r,$session_id:e.sessionId,$window_id:e.windowId,timestamp:Date.now()})),this.C.metrics.length===this.allowedMetrics.length&&this.Xi()}},this.nt=()=>{var t,i,e,r,s=v.__PosthogExtensions__;R(s)||R(s.postHogWebVitalsCallbacks)||({onLCP:t,onCLS:i,onFCP:e,onINP:r}=s.postHogWebVitalsCallbacks),t&&i&&e&&r?(this.allowedMetrics.indexOf(\"LCP\")>-1&&t(this.Zi.bind(this)),this.allowedMetrics.indexOf(\"CLS\")>-1&&i(this.Zi.bind(this)),this.allowedMetrics.indexOf(\"FCP\")>-1&&e(this.Zi.bind(this)),this.allowedMetrics.indexOf(\"INP\")>-1&&r(this.Zi.bind(this)),this.i=!0):Es.error(\"web vitals callbacks not loaded - not starting\")},this._instance=t,this.Yi=!(null==(i=this._instance.persistence)||!i.props[ct]),this.startIfEnabled()}get allowedMetrics(){var t,i,e=I(this._instance.config.capture_performance)?null==(t=this._instance.config.capture_performance)?void 0:t.web_vitals_allowed_metrics:void 0;return R(e)?(null==(i=this._instance.persistence)?void 0:i.props[pt])||[\"CLS\",\"FCP\",\"INP\",\"LCP\"]:e}get flushToCaptureTimeoutMs(){return(I(this._instance.config.capture_performance)?this._instance.config.capture_performance.web_vitals_delayed_flush_ms:void 0)||5e3}get ie(){var t=I(this._instance.config.capture_performance)&&O(this._instance.config.capture_performance.__web_vitals_max_value)?this._instance.config.capture_performance.__web_vitals_max_value:Is;return 0<t&&t<=6e4?Is:t}get isEnabled(){var t=null==a?void 0:a.protocol;if(\"http:\"!==t&&\"https:\"!==t)return Es.info(\"Web Vitals are disabled on non-http/https protocols\"),!1;var i=I(this._instance.config.capture_performance)?this._instance.config.capture_performance.web_vitals:A(this._instance.config.capture_performance)?this._instance.config.capture_performance:void 0;return A(i)?i:this.Yi}startIfEnabled(){this.isEnabled&&!this.i&&(Es.info(\"enabled, starting...\"),this.J(this.nt))}onRemoteConfig(t){var i=I(t.capturePerformance)&&!!t.capturePerformance.web_vitals,e=I(t.capturePerformance)?t.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[ct]:i}),this._instance.persistence.register({[pt]:e})),this.Yi=i,this.startIfEnabled()}J(t){var i,e;null!=(i=v.__PosthogExtensions__)&&i.postHogWebVitalsCallbacks&&t(),null==(e=v.__PosthogExtensions__)||null==e.loadExternalDependency||e.loadExternalDependency(this._instance,\"web-vitals\",(i=>{i?Es.error(\"failed to load script\",i):t()}))}te(){var i=t?t.location.href:void 0;return i||Es.error(\"Could not determine current URL\"),i}}var Rs=z(\"[Heatmaps]\");function Ts(t){return I(t)&&\"clientX\"in t&&\"clientY\"in t&&O(t.clientX)&&O(t.clientY)}class Ms{constructor(t){var i;this.rageclicks=new yi,this.Yi=!1,this.i=!1,this.ee=null,this.instance=t,this.Yi=!(null==(i=this.instance.persistence)||!i.props[ut])}get flushIntervalMilliseconds(){var t=5e3;return I(this.instance.config.capture_heatmaps)&&this.instance.config.capture_heatmaps.flush_interval_milliseconds&&(t=this.instance.config.capture_heatmaps.flush_interval_milliseconds),t}get isEnabled(){return R(this.instance.config.capture_heatmaps)?R(this.instance.config.enable_heatmaps)?this.Yi:this.instance.config.enable_heatmaps:!1!==this.instance.config.capture_heatmaps}startIfEnabled(){if(this.isEnabled){if(this.i)return;Rs.info(\"starting...\"),this.re(),this.ee=setInterval(this.se.bind(this),this.flushIntervalMilliseconds)}else{var t,i;clearInterval(null!==(t=this.ee)&&void 0!==t?t:void 0),null==(i=this.ne)||i.stop(),this.getAndClearBuffer()}}onRemoteConfig(t){var i=!!t.heatmaps;this.instance.persistence&&this.instance.persistence.register({[ut]:i}),this.Yi=i,this.startIfEnabled()}getAndClearBuffer(){var t=this.C;return this.C=void 0,t}oe(t){this.ae(t.originalEvent,\"deadclick\")}re(){t&&o&&(st(t,\"beforeunload\",this.se.bind(this)),st(o,\"click\",(i=>this.ae(i||(null==t?void 0:t.event))),{capture:!0}),st(o,\"mousemove\",(i=>this.le(i||(null==t?void 0:t.event))),{capture:!0}),this.ne=new se(this.instance,ee,this.oe.bind(this)),this.ne.startIfEnabled(),this.i=!0)}ue(i,e){var r=this.instance.scrollManager.scrollY(),s=this.instance.scrollManager.scrollX(),n=this.instance.scrollManager.scrollElement(),o=function(i,e,r){for(var s=i;s&&Jt(s)&&!Vt(s,\"body\");){if(s===r)return!1;if(m(e,null==t?void 0:t.getComputedStyle(s).position))return!0;s=si(s)}return!1}(ei(i),[\"fixed\",\"sticky\"],n);return{x:i.clientX+(o?0:s),y:i.clientY+(o?0:r),target_fixed:o,type:e}}ae(t,i){var e;if(void 0===i&&(i=\"click\"),!Gt(t.target)&&Ts(t)){var r=this.ue(t,i);null!=(e=this.rageclicks)&&e.isRageClick(t.clientX,t.clientY,(new Date).getTime())&&this.he(B({},r,{type:\"rageclick\"})),this.he(r)}}le(t){!Gt(t.target)&&Ts(t)&&(clearTimeout(this.de),this.de=setTimeout((()=>{this.he(this.ue(t,\"mousemove\"))}),500))}he(i){if(t){var e=t.location.href;this.C=this.C||{},this.C[e]||(this.C[e]=[]),this.C[e].push(i)}}se(){this.C&&!P(this.C)&&this.instance.capture(\"$$heatmap\",{$heatmap_data:this.getAndClearBuffer()})}}class Cs{constructor(t){this._instance=t}doPageView(i,e){var r,s=this.ve(i,e);return this.ce={pathname:null!==(r=null==t?void 0:t.location.pathname)&&void 0!==r?r:\"\",pageViewId:e,timestamp:i},this._instance.scrollManager.resetContext(),s}doPageLeave(t){var i;return this.ve(t,null==(i=this.ce)?void 0:i.pageViewId)}doEvent(){var t;return{$pageview_id:null==(t=this.ce)?void 0:t.pageViewId}}ve(t,i){var e=this.ce;if(!e)return{$pageview_id:i};var r={$pageview_id:i,$prev_pageview_id:e.pageViewId},s=this._instance.scrollManager.getContext();if(s&&!this._instance.config.disable_scroll_properties){var{maxScrollHeight:n,lastScrollY:o,maxScrollY:a,maxContentHeight:l,lastContentY:u,maxContentY:h}=s;if(!(R(n)||R(o)||R(a)||R(l)||R(u)||R(h))){n=Math.ceil(n),o=Math.ceil(o),a=Math.ceil(a),l=Math.ceil(l),u=Math.ceil(u),h=Math.ceil(h);var d=n<=1?1:ne(o/n,0,1),v=n<=1?1:ne(a/n,0,1),c=l<=1?1:ne(u/l,0,1),f=l<=1?1:ne(h/l,0,1);r=V(r,{$prev_pageview_last_scroll:o,$prev_pageview_last_scroll_percentage:d,$prev_pageview_max_scroll:a,$prev_pageview_max_scroll_percentage:v,$prev_pageview_last_content:u,$prev_pageview_last_content_percentage:c,$prev_pageview_max_content:h,$prev_pageview_max_content_percentage:f})}}return e.pathname&&(r.$prev_pageview_pathname=e.pathname),e.timestamp&&(r.$prev_pageview_duration=(t.getTime()-e.timestamp.getTime())/1e3),r}}var Fs=function(t){var i,e,r,s,n=\"\";for(i=e=0,r=(t=(t+\"\").replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\")).length,s=0;s<r;s++){var o=t.charCodeAt(s),a=null;o<128?e++:a=o>127&&o<2048?String.fromCharCode(o>>6|192,63&o|128):String.fromCharCode(o>>12|224,o>>6&63|128,63&o|128),C(a)||(e>i&&(n+=t.substring(i,e)),n+=a,i=e=s+1)}return e>i&&(n+=t.substring(i,t.length)),n},Os=!!u||!!l,As=\"text/plain\",Ds=(t,i)=>{var[e,r]=t.split(\"?\"),s=B({},i);null==r||r.split(\"&\").forEach((t=>{var[i]=t.split(\"=\");delete s[i]}));var n=$i(s);return e+\"?\"+(n=n?(r?r+\"&\":\"\")+n:r)},Ls=(t,i)=>JSON.stringify(t,((t,i)=>\"bigint\"==typeof i?i.toString():i),i),js=t=>{var{data:i,compression:e}=t;if(i){if(e===_.GZipJS){var r=Lr(jr(Ls(i)),{mtime:0}),s=new Blob([r],{type:As});return{contentType:As,body:s,estimatedSize:s.size}}if(e===_.Base64){var n=function(t){var i,e,r,s,n,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",a=0,l=0,u=\"\",h=[];if(!t)return t;t=Fs(t);do{i=(n=t.charCodeAt(a++)<<16|t.charCodeAt(a++)<<8|t.charCodeAt(a++))>>18&63,e=n>>12&63,r=n>>6&63,s=63&n,h[l++]=o.charAt(i)+o.charAt(e)+o.charAt(r)+o.charAt(s)}while(a<t.length);switch(u=h.join(\"\"),t.length%3){case 1:u=u.slice(0,-2)+\"==\";break;case 2:u=u.slice(0,-1)+\"=\"}return u}(Ls(i)),o=(t=>\"data=\"+encodeURIComponent(\"string\"==typeof t?t:Ls(t)))(n);return{contentType:\"application/x-www-form-urlencoded\",body:o,estimatedSize:new Blob([o]).size}}var a=Ls(i);return{contentType:\"application/json\",body:a,estimatedSize:new Blob([a]).size}}},Ns=[];l&&Ns.push({transport:\"fetch\",method:t=>{var i,e,{contentType:r,body:s,estimatedSize:n}=null!==(i=js(t))&&void 0!==i?i:{},o=new Headers;J(t.headers,(function(t,i){o.append(i,t)})),r&&o.append(\"Content-Type\",r);var a=t.url,u=null;if(h){var d=new h;u={signal:d.signal,timeout:setTimeout((()=>d.abort()),t.timeout)}}l(a,B({method:(null==t?void 0:t.method)||\"GET\",headers:o,keepalive:\"POST\"===t.method&&(n||0)<52428.8,body:s,signal:null==(e=u)?void 0:e.signal},t.fetchOptions)).then((i=>i.text().then((e=>{var r={statusCode:i.status,text:e};if(200===i.status)try{r.json=JSON.parse(e)}catch(t){N.error(t)}null==t.callback||t.callback(r)})))).catch((i=>{N.error(i),null==t.callback||t.callback({statusCode:0,text:i})})).finally((()=>u?clearTimeout(u.timeout):null))}}),u&&Ns.push({transport:\"XHR\",method:t=>{var i,e=new u;e.open(t.method||\"GET\",t.url,!0);var{contentType:r,body:s}=null!==(i=js(t))&&void 0!==i?i:{};J(t.headers,(function(t,i){e.setRequestHeader(i,t)})),r&&e.setRequestHeader(\"Content-Type\",r),t.timeout&&(e.timeout=t.timeout),e.withCredentials=!0,e.onreadystatechange=()=>{if(4===e.readyState){var i={statusCode:e.status,text:e.responseText};if(200===e.status)try{i.json=JSON.parse(e.responseText)}catch(t){}null==t.callback||t.callback(i)}},e.send(s)}}),null!=n&&n.sendBeacon&&Ns.push({transport:\"sendBeacon\",method:t=>{var i=Ds(t.url,{beacon:\"1\"});try{var e,{contentType:r,body:s}=null!==(e=js(t))&&void 0!==e?e:{},o=\"string\"==typeof s?new Blob([s],{type:r}):s;n.sendBeacon(i,o)}catch(t){}}});var zs=function(t,i){if(!function(t){try{new RegExp(t)}catch(t){return!1}return!0}(i))return!1;try{return new RegExp(i).test(t)}catch(t){return!1}};function Us(t,i,e){return Ls({distinct_id:t,userPropertiesToSet:i,userPropertiesToSetOnce:e})}var qs={exact:(t,i)=>i.some((i=>t.some((t=>i===t)))),is_not:(t,i)=>i.every((i=>t.every((t=>i!==t)))),regex:(t,i)=>i.some((i=>t.some((t=>zs(i,t))))),not_regex:(t,i)=>i.every((i=>t.every((t=>!zs(i,t))))),icontains:(t,i)=>i.map(Bs).some((i=>t.map(Bs).some((t=>i.includes(t))))),not_icontains:(t,i)=>i.map(Bs).every((i=>t.map(Bs).every((t=>!i.includes(t)))))},Bs=t=>t.toLowerCase(),Hs=z(\"[Error tracking]\");class Ws{constructor(t){var i,e;this.fe=[],this._instance=t,this.fe=null!==(i=null==(e=this._instance.persistence)?void 0:e.get_property(dt))&&void 0!==i?i:[]}onRemoteConfig(t){var i,e,r,s=null!==(i=null==(e=t.errorTracking)?void 0:e.suppressionRules)&&void 0!==i?i:[],n=null==(r=t.errorTracking)?void 0:r.captureExtensionExceptions;this.fe=s,this._instance.persistence&&this._instance.persistence.register({[dt]:this.fe,[vt]:n})}get pe(){var t,i=!!this._instance.get_property(vt),e=this._instance.config.error_tracking.captureExtensionExceptions;return null!==(t=null!=e?e:i)&&void 0!==t&&t}sendExceptionEvent(t){if(this._e(t))Hs.info(\"Skipping exception capture because a suppression rule matched\");else{if(this.pe||!this.ge(t))return this._instance.capture(\"$exception\",t,{_noTruncate:!0,_batchKey:\"exceptionEvent\"});Hs.info(\"Skipping exception capture because it was thrown by an extension\")}}_e(t){var i=t.$exception_list;if(!i||!k(i)||0===i.length)return!1;var e=i.reduce(((t,i)=>{var{type:e,value:r}=i;return T(e)&&e.length>0&&t.$exception_types.push(e),T(r)&&r.length>0&&t.$exception_values.push(r),t}),{$exception_types:[],$exception_values:[]});return this.fe.some((t=>{var i=t.values.map((t=>{var i,r=qs[t.operator],s=k(t.value)?t.value:[t.value],n=null!==(i=e[t.key])&&void 0!==i?i:[];return s.length>0&&r(s,n)}));return\"OR\"===t.type?i.some(Boolean):i.every(Boolean)}))}ge(t){var i=t.$exception_list;return!(!i||!k(i))&&i.flatMap((t=>{var i,e;return null!==(i=null==(e=t.stacktrace)?void 0:e.frames)&&void 0!==i?i:[]})).some((t=>t.filename&&t.filename.startsWith(\"chrome-extension://\")))}}var Gs=\"Mobile\",Js=\"iOS\",Vs=\"Android\",Ks=\"Tablet\",Ys=Vs+\" \"+Ks,Xs=\"iPad\",Qs=\"Apple\",Zs=Qs+\" Watch\",tn=\"Safari\",en=\"BlackBerry\",rn=\"Samsung\",sn=rn+\"Browser\",nn=rn+\" Internet\",on=\"Chrome\",an=on+\" OS\",ln=on+\" \"+Js,un=\"Internet Explorer\",hn=un+\" \"+Gs,dn=\"Opera\",vn=dn+\" Mini\",cn=\"Edge\",fn=\"Microsoft \"+cn,pn=\"Firefox\",_n=pn+\" \"+Js,gn=\"Nintendo\",mn=\"PlayStation\",bn=\"Xbox\",yn=Vs+\" \"+Gs,wn=Gs+\" \"+tn,Sn=\"Windows\",$n=Sn+\" Phone\",xn=\"Nokia\",kn=\"Ouya\",En=\"Generic\",In=En+\" \"+Gs.toLowerCase(),Pn=En+\" \"+Ks.toLowerCase(),Rn=\"Konqueror\",Tn=\"(\\\\d+(\\\\.\\\\d+)?)\",Mn=new RegExp(\"Version/\"+Tn),Cn=new RegExp(bn,\"i\"),Fn=new RegExp(mn+\" \\\\w+\",\"i\"),On=new RegExp(gn+\" \\\\w+\",\"i\"),An=new RegExp(en+\"|PlayBook|BB10\",\"i\"),Dn={\"NT3.51\":\"NT 3.11\",\"NT4.0\":\"NT 4.0\",\"5.0\":\"2000\",5.1:\"XP\",5.2:\"XP\",\"6.0\":\"Vista\",6.1:\"7\",6.2:\"8\",6.3:\"8.1\",6.4:\"10\",\"10.0\":\"10\"};var Ln=(t,i)=>i&&m(i,Qs)||function(t){return m(t,tn)&&!m(t,on)&&!m(t,Vs)}(t),jn=function(t,i){return i=i||\"\",m(t,\" OPR/\")&&m(t,\"Mini\")?vn:m(t,\" OPR/\")?dn:An.test(t)?en:m(t,\"IE\"+Gs)||m(t,\"WPDesktop\")?hn:m(t,sn)?nn:m(t,cn)||m(t,\"Edg/\")?fn:m(t,\"FBIOS\")?\"Facebook \"+Gs:m(t,\"UCWEB\")||m(t,\"UCBrowser\")?\"UC Browser\":m(t,\"CriOS\")?ln:m(t,\"CrMo\")||m(t,on)?on:m(t,Vs)&&m(t,tn)?yn:m(t,\"FxiOS\")?_n:m(t.toLowerCase(),Rn.toLowerCase())?Rn:Ln(t,i)?m(t,Gs)?wn:tn:m(t,pn)?pn:m(t,\"MSIE\")||m(t,\"Trident/\")?un:m(t,\"Gecko\")?pn:\"\"},Nn={[hn]:[new RegExp(\"rv:\"+Tn)],[fn]:[new RegExp(cn+\"?\\\\/\"+Tn)],[on]:[new RegExp(\"(\"+on+\"|CrMo)\\\\/\"+Tn)],[ln]:[new RegExp(\"CriOS\\\\/\"+Tn)],\"UC Browser\":[new RegExp(\"(UCBrowser|UCWEB)\\\\/\"+Tn)],[tn]:[Mn],[wn]:[Mn],[dn]:[new RegExp(\"(Opera|OPR)\\\\/\"+Tn)],[pn]:[new RegExp(pn+\"\\\\/\"+Tn)],[_n]:[new RegExp(\"FxiOS\\\\/\"+Tn)],[Rn]:[new RegExp(\"Konqueror[:/]?\"+Tn,\"i\")],[en]:[new RegExp(en+\" \"+Tn),Mn],[yn]:[new RegExp(\"android\\\\s\"+Tn,\"i\")],[nn]:[new RegExp(sn+\"\\\\/\"+Tn)],[un]:[new RegExp(\"(rv:|MSIE )\"+Tn)],Mozilla:[new RegExp(\"rv:\"+Tn)]},zn=function(t,i){var e=jn(t,i),r=Nn[e];if(R(r))return null;for(var s=0;s<r.length;s++){var n=r[s],o=t.match(n);if(o)return parseFloat(o[o.length-2])}return null},Un=[[new RegExp(bn+\"; \"+bn+\" (.*?)[);]\",\"i\"),t=>[bn,t&&t[1]||\"\"]],[new RegExp(gn,\"i\"),[gn,\"\"]],[new RegExp(mn,\"i\"),[mn,\"\"]],[An,[en,\"\"]],[new RegExp(Sn,\"i\"),(t,i)=>{if(/Phone/.test(i)||/WPDesktop/.test(i))return[$n,\"\"];if(new RegExp(Gs).test(i)&&!/IEMobile\\b/.test(i))return[Sn+\" \"+Gs,\"\"];var e=/Windows NT ([0-9.]+)/i.exec(i);if(e&&e[1]){var r=e[1],s=Dn[r]||\"\";return/arm/i.test(i)&&(s=\"RT\"),[Sn,s]}return[Sn,\"\"]}],[/((iPhone|iPad|iPod).*?OS (\\d+)_(\\d+)_?(\\d+)?|iPhone)/,t=>{if(t&&t[3]){var i=[t[3],t[4],t[5]||\"0\"];return[Js,i.join(\".\")]}return[Js,\"\"]}],[/(watch.*\\/(\\d+\\.\\d+\\.\\d+)|watch os,(\\d+\\.\\d+),)/i,t=>{var i=\"\";return t&&t.length>=3&&(i=R(t[2])?t[3]:t[2]),[\"watchOS\",i]}],[new RegExp(\"(\"+Vs+\" (\\\\d+)\\\\.(\\\\d+)\\\\.?(\\\\d+)?|\"+Vs+\")\",\"i\"),t=>{if(t&&t[2]){var i=[t[2],t[3],t[4]||\"0\"];return[Vs,i.join(\".\")]}return[Vs,\"\"]}],[/Mac OS X (\\d+)[_.](\\d+)[_.]?(\\d+)?/i,t=>{var i=[\"Mac OS X\",\"\"];if(t&&t[1]){var e=[t[1],t[2],t[3]||\"0\"];i[1]=e.join(\".\")}return i}],[/Mac/i,[\"Mac OS X\",\"\"]],[/CrOS/,[an,\"\"]],[/Linux|debian/i,[\"Linux\",\"\"]]],qn=function(t){return On.test(t)?gn:Fn.test(t)?mn:Cn.test(t)?bn:new RegExp(kn,\"i\").test(t)?kn:new RegExp(\"(\"+$n+\"|WPDesktop)\",\"i\").test(t)?$n:/iPad/.test(t)?Xs:/iPod/.test(t)?\"iPod Touch\":/iPhone/.test(t)?\"iPhone\":/(watch)(?: ?os[,/]|\\d,\\d\\/)[\\d.]+/i.test(t)?Zs:An.test(t)?en:/(kobo)\\s(ereader|touch)/i.test(t)?\"Kobo\":new RegExp(xn,\"i\").test(t)?xn:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i.test(t)||/(kf[a-z]+)( bui|\\)).+silk\\//i.test(t)?\"Kindle Fire\":/(Android|ZTE)/i.test(t)?!new RegExp(Gs).test(t)||/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(t)?/pixel[\\daxl ]{1,6}/i.test(t)&&!/pixel c/i.test(t)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(t)||/lmy47v/i.test(t)&&!/QTAQZ3/i.test(t)?Vs:Ys:Vs:new RegExp(\"(pda|\"+Gs+\")\",\"i\").test(t)?In:new RegExp(Ks,\"i\").test(t)&&!new RegExp(Ks+\" pc\",\"i\").test(t)?Pn:\"\"},Bn=\"https?://(.*)\",Hn=[\"gclid\",\"gclsrc\",\"dclid\",\"gbraid\",\"wbraid\",\"fbclid\",\"msclkid\",\"twclid\",\"li_fat_id\",\"igshid\",\"ttclid\",\"rdt_cid\",\"epik\",\"qclid\",\"sccid\",\"irclid\",\"_kx\"],Wn=K([\"utm_source\",\"utm_medium\",\"utm_campaign\",\"utm_content\",\"utm_term\",\"gad_source\",\"mc_cid\"],Hn),Gn=\"<masked>\",Jn=[\"li_fat_id\"];function Vn(t,i,e){if(!o)return{};var r,s=i?K([],Hn,e||[]):[],n=Kn(ki(o.URL,s,Gn),t),a=(r={},J(Jn,(function(t){var i=Hi.D(t);r[t]=i||null})),r);return V(a,n)}function Kn(t,i){var e=Wn.concat(i||[]),r={};return J(e,(function(i){var e=xi(t,i);r[i]=e||null})),r}function Yn(t){var i=function(t){return t?0===t.search(Bn+\"google.([^/?]*)\")?\"google\":0===t.search(Bn+\"bing.com\")?\"bing\":0===t.search(Bn+\"yahoo.com\")?\"yahoo\":0===t.search(Bn+\"duckduckgo.com\")?\"duckduckgo\":null:null}(t),e=\"yahoo\"!=i?\"q\":\"p\",r={};if(!C(i)){r.$search_engine=i;var s=o?xi(o.referrer,e):\"\";s.length&&(r.ph_keyword=s)}return r}function Xn(){return navigator.language||navigator.userLanguage}function Qn(){return(null==o?void 0:o.referrer)||\"$direct\"}function Zn(t,i){var e=t?K([],Hn,i||[]):[],r=null==a?void 0:a.href.substring(0,1e3);return{r:Qn().substring(0,1e3),u:r?ki(r,e,Gn):void 0}}function to(t){var i,{r:e,u:r}=t,s={$referrer:e,$referring_domain:null==e?void 0:\"$direct\"==e?\"$direct\":null==(i=Si(e))?void 0:i.host};if(r){s.$current_url=r;var n=Si(r);s.$host=null==n?void 0:n.host,s.$pathname=null==n?void 0:n.pathname;var o=Kn(r);V(s,o)}if(e){var a=Yn(e);V(s,a)}return s}function io(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch(t){return}}function eo(){try{return(new Date).getTimezoneOffset()}catch(t){return}}function ro(i,e){if(!d)return{};var r,s,n,o=i?K([],Hn,e||[]):[],[l,u]=function(t){for(var i=0;i<Un.length;i++){var[e,r]=Un[i],s=e.exec(t),n=s&&(E(r)?r(s,t):r);if(n)return n}return[\"\",\"\"]}(d);return V(Z({$os:l,$os_version:u,$browser:jn(d,navigator.vendor),$device:qn(d),$device_type:(s=d,n=qn(s),n===Xs||n===Ys||\"Kobo\"===n||\"Kindle Fire\"===n||n===Pn?Ks:n===gn||n===bn||n===mn||n===kn?\"Console\":n===Zs?\"Wearable\":n?Gs:\"Desktop\"),$timezone:io(),$timezone_offset:eo()}),{$current_url:ki(null==a?void 0:a.href,o,Gn),$host:null==a?void 0:a.host,$pathname:null==a?void 0:a.pathname,$raw_user_agent:d.length>1e3?d.substring(0,997)+\"...\":d,$browser_version:zn(d,navigator.vendor),$browser_language:Xn(),$browser_language_prefix:(r=Xn(),\"string\"==typeof r?r.split(\"-\")[0]:void 0),$screen_height:null==t?void 0:t.screen.height,$screen_width:null==t?void 0:t.screen.width,$viewport_height:null==t?void 0:t.innerHeight,$viewport_width:null==t?void 0:t.innerWidth,$lib:\"web\",$lib_version:c.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3})}var so=z(\"[FeatureFlags]\"),no=\"$active_feature_flags\",oo=\"$override_feature_flags\",ao=\"$feature_flag_payloads\",lo=\"$override_feature_flag_payloads\",uo=\"$feature_flag_request_id\",ho=t=>{var i={};for(var[e,r]of Y(t||{}))r&&(i[e]=r);return i},vo=t=>{var i=t.flags;return i?(t.featureFlags=Object.fromEntries(Object.keys(i).map((t=>{var e;return[t,null!==(e=i[t].variant)&&void 0!==e?e:i[t].enabled]}))),t.featureFlagPayloads=Object.fromEntries(Object.keys(i).filter((t=>i[t].enabled)).filter((t=>{var e;return null==(e=i[t].metadata)?void 0:e.payload})).map((t=>{var e;return[t,null==(e=i[t].metadata)?void 0:e.payload]})))):so.warn(\"Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version\"),t},co=function(t){return t.FeatureFlags=\"feature_flags\",t.Recordings=\"recordings\",t}({});class fo{constructor(t){this.me=!1,this.be=!1,this.ye=!1,this.we=!1,this.Se=!1,this.$e=!1,this.xe=!1,this._instance=t,this.featureFlagEventHandlers=[]}flags(){if(this._instance.config.__preview_remote_config)this.$e=!0;else{var t=!this.ke&&(this._instance.config.advanced_disable_feature_flags||this._instance.config.advanced_disable_feature_flags_on_first_load);this.Ee({disableFlags:t})}}get hasLoadedFlags(){return this.be}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var t=this._instance.get_property(Tt),i=this._instance.get_property(oo),e=this._instance.get_property(lo);if(!e&&!i)return t||{};var r=V({},t||{}),s=[...new Set([...Object.keys(e||{}),...Object.keys(i||{})])];for(var n of s){var o,a,l=r[n],u=null==i?void 0:i[n],h=R(u)?null!==(o=null==l?void 0:l.enabled)&&void 0!==o&&o:!!u,d=R(u)?l.variant:\"string\"==typeof u?u:void 0,v=null==e?void 0:e[n],c=B({},l,{enabled:h,variant:h?null!=d?d:null==l?void 0:l.variant:void 0});if(h!==(null==l?void 0:l.enabled)&&(c.original_enabled=null==l?void 0:l.enabled),d!==(null==l?void 0:l.variant)&&(c.original_variant=null==l?void 0:l.variant),v)c.metadata=B({},null==l?void 0:l.metadata,{payload:v,original_payload:null==l||null==(a=l.metadata)?void 0:a.payload});r[n]=c}return this.me||(so.warn(\" Overriding feature flag details!\",{flagDetails:t,overriddenPayloads:e,finalDetails:r}),this.me=!0),r}getFlagVariants(){var t=this._instance.get_property(Pt),i=this._instance.get_property(oo);if(!i)return t||{};for(var e=V({},t),r=Object.keys(i),s=0;s<r.length;s++)e[r[s]]=i[r[s]];return this.me||(so.warn(\" Overriding feature flags!\",{enabledFlags:t,overriddenFlags:i,finalFlags:e}),this.me=!0),e}getFlagPayloads(){var t=this._instance.get_property(ao),i=this._instance.get_property(lo);if(!i)return t||{};for(var e=V({},t||{}),r=Object.keys(i),s=0;s<r.length;s++)e[r[s]]=i[r[s]];return this.me||(so.warn(\" Overriding feature flag payloads!\",{flagPayloads:t,overriddenPayloads:i,finalPayloads:e}),this.me=!0),e}reloadFeatureFlags(){this.we||this._instance.config.advanced_disable_feature_flags||this.ke||(this.ke=setTimeout((()=>{this.Ee()}),5))}Ie(){clearTimeout(this.ke),this.ke=void 0}ensureFlagsLoaded(){this.be||this.ye||this.ke||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this.we=t}Ee(t){var i;if(this.Ie(),!this._instance.I())if(this.ye)this.Se=!0;else{var e={token:this._instance.config.token,distinct_id:this._instance.get_distinct_id(),groups:this._instance.getGroups(),$anon_distinct_id:this.$anon_distinct_id,person_properties:B({},(null==(i=this._instance.persistence)?void 0:i.get_initial_props())||{},this._instance.get_property(Mt)||{}),group_properties:this._instance.get_property(Ct)};(null!=t&&t.disableFlags||this._instance.config.advanced_disable_feature_flags)&&(e.disable_flags=!0);var r=this._instance.config.__preview_remote_config,s=r?\"/flags/?v=2\":\"/flags/?v=2&config=true\",n=this._instance.config.advanced_only_evaluate_survey_feature_flags?\"&only_evaluate_survey_feature_flags=true\":\"\",o=this._instance.requestRouter.endpointFor(\"api\",s+n);r&&(e.timezone=io()),this.ye=!0,this._instance.Pe({method:\"POST\",url:o,data:e,compression:this._instance.config.disable_compression?void 0:_.Base64,timeout:this._instance.config.feature_flag_request_timeout_ms,callback:t=>{var i,r,s=!0;(200===t.statusCode&&(this.Se||(this.$anon_distinct_id=void 0),s=!1),this.ye=!1,this.$e)||(this.$e=!0,this._instance.Re(null!==(r=t.json)&&void 0!==r?r:{}));if(!e.disable_flags||this.Se)if(this.xe=!s,t.json&&null!=(i=t.json.quotaLimited)&&i.includes(co.FeatureFlags))so.warn(\"You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more.\");else{var n;if(!e.disable_flags)this.receivedFeatureFlags(null!==(n=t.json)&&void 0!==n?n:{},s);this.Se&&(this.Se=!1,this.Ee())}}})}}getFeatureFlag(t,i){if(void 0===i&&(i={}),this.be||this.getFlags()&&this.getFlags().length>0){var e=this.getFlagVariants()[t],r=\"\"+e,s=this._instance.get_property(uo)||void 0,n=this._instance.get_property(At)||{};if((i.send_event||!(\"send_event\"in i))&&(!(t in n)||!n[t].includes(r))){var o,a,l,u,h,d,v,c,f;k(n[t])?n[t].push(r):n[t]=[r],null==(o=this._instance.persistence)||o.register({[At]:n});var p=this.getFeatureFlagDetails(t),_={$feature_flag:t,$feature_flag_response:e,$feature_flag_payload:this.getFeatureFlagPayload(t)||null,$feature_flag_request_id:s,$feature_flag_bootstrapped_response:(null==(a=this._instance.config.bootstrap)||null==(a=a.featureFlags)?void 0:a[t])||null,$feature_flag_bootstrapped_payload:(null==(l=this._instance.config.bootstrap)||null==(l=l.featureFlagPayloads)?void 0:l[t])||null,$used_bootstrap_value:!this.xe};R(null==p||null==(u=p.metadata)?void 0:u.version)||(_.$feature_flag_version=p.metadata.version);var g,m=null!==(h=null==p||null==(d=p.reason)?void 0:d.description)&&void 0!==h?h:null==p||null==(v=p.reason)?void 0:v.code;if(m&&(_.$feature_flag_reason=m),null!=p&&null!=(c=p.metadata)&&c.id&&(_.$feature_flag_id=p.metadata.id),R(null==p?void 0:p.original_variant)&&R(null==p?void 0:p.original_enabled)||(_.$feature_flag_original_response=R(p.original_variant)?p.original_enabled:p.original_variant),null!=p&&null!=(f=p.metadata)&&f.original_payload)_.$feature_flag_original_payload=null==p||null==(g=p.metadata)?void 0:g.original_payload;this._instance.capture(\"$feature_flag_called\",_)}return e}so.warn('getFeatureFlag for key \"'+t+\"\\\" failed. Feature flags didn't load in time.\")}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){return this.getFlagPayloads()[t]}getRemoteConfigPayload(t,i){var e=this._instance.config.token;this._instance.Pe({method:\"POST\",url:this._instance.requestRouter.endpointFor(\"api\",\"/flags/?v=2&config=true\"),data:{distinct_id:this._instance.get_distinct_id(),token:e},compression:this._instance.config.disable_compression?void 0:_.Base64,timeout:this._instance.config.feature_flag_request_timeout_ms,callback:e=>{var r,s=null==(r=e.json)?void 0:r.featureFlagPayloads;i((null==s?void 0:s[t])||void 0)}})}isFeatureEnabled(t,i){if(void 0===i&&(i={}),this.be||this.getFlags()&&this.getFlags().length>0)return!!this.getFeatureFlag(t,i);so.warn('isFeatureEnabled for key \"'+t+\"\\\" failed. Feature flags didn't load in time.\")}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((i=>i!==t))}receivedFeatureFlags(t,i){if(this._instance.persistence){this.be=!0;var e=this.getFlagVariants(),r=this.getFlagPayloads(),s=this.getFlagsWithDetails();!function(t,i,e,r,s){void 0===e&&(e={}),void 0===r&&(r={}),void 0===s&&(s={});var n=vo(t),o=n.flags,a=n.featureFlags,l=n.featureFlagPayloads;if(a){var u=t.requestId;if(k(a)){so.warn(\"v1 of the feature flags endpoint is deprecated. Please use the latest version.\");var h={};if(a)for(var d=0;d<a.length;d++)h[a[d]]=!0;i&&i.register({[no]:a,[Pt]:h})}else{var v=a,c=l,f=o;t.errorsWhileComputingFlags&&(v=B({},e,v),c=B({},r,c),f=B({},s,f)),i&&i.register(B({[no]:Object.keys(ho(v)),[Pt]:v||{},[ao]:c||{},[Tt]:f||{}},u?{[uo]:u}:{}))}}}(t,this._instance.persistence,e,r,s),this.Te(i)}}override(t,i){void 0===i&&(i=!1),so.warn(\"override is deprecated. Please use overrideFeatureFlags instead.\"),this.overrideFeatureFlags({flags:t,suppressWarning:i})}overrideFeatureFlags(t){if(!this._instance.__loaded||!this._instance.persistence)return so.uninitializedWarning(\"posthog.featureFlags.overrideFeatureFlags\");if(!1===t)return this._instance.persistence.unregister(oo),this._instance.persistence.unregister(lo),void this.Te();if(t&&\"object\"==typeof t&&(\"flags\"in t||\"payloads\"in t)){var i,e=t;if(this.me=Boolean(null!==(i=e.suppressWarning)&&void 0!==i&&i),\"flags\"in e)if(!1===e.flags)this._instance.persistence.unregister(oo);else if(e.flags)if(k(e.flags)){for(var r={},s=0;s<e.flags.length;s++)r[e.flags[s]]=!0;this._instance.persistence.register({[oo]:r})}else this._instance.persistence.register({[oo]:e.flags});return\"payloads\"in e&&(!1===e.payloads?this._instance.persistence.unregister(lo):e.payloads&&this._instance.persistence.register({[lo]:e.payloads})),void this.Te()}this.Te()}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.be){var{flags:i,flagVariants:e}=this.Me();t(i,e)}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,i,e){var r,s=(this._instance.get_property(Rt)||[]).find((i=>i.flagKey===t)),n={[\"$feature_enrollment/\"+t]:i},o={$feature_flag:t,$feature_enrollment:i,$set:n};s&&(o.$early_access_feature_name=s.name),e&&(o.$feature_enrollment_stage=e),this._instance.capture(\"$feature_enrollment_update\",o),this.setPersonPropertiesForFlags(n,!1);var a=B({},this.getFlagVariants(),{[t]:i});null==(r=this._instance.persistence)||r.register({[no]:Object.keys(ho(a)),[Pt]:a}),this.Te()}getEarlyAccessFeatures(t,i,e){void 0===i&&(i=!1);var r=this._instance.get_property(Rt),s=e?\"&\"+e.map((t=>\"stage=\"+t)).join(\"&\"):\"\";if(r&&!i)return t(r);this._instance.Pe({url:this._instance.requestRouter.endpointFor(\"api\",\"/api/early_access_features/?token=\"+this._instance.config.token+s),method:\"GET\",callback:i=>{var e,r;if(i.json){var s=i.json.earlyAccessFeatures;return null==(e=this._instance.persistence)||e.unregister(Rt),null==(r=this._instance.persistence)||r.register({[Rt]:s}),t(s)}}})}Me(){var t=this.getFlags(),i=this.getFlagVariants();return{flags:t.filter((t=>i[t])),flagVariants:Object.keys(i).filter((t=>i[t])).reduce(((t,e)=>(t[e]=i[e],t)),{})}}Te(t){var{flags:i,flagVariants:e}=this.Me();this.featureFlagEventHandlers.forEach((r=>r(i,e,{errorsLoading:t})))}setPersonPropertiesForFlags(t,i){void 0===i&&(i=!0);var e=this._instance.get_property(Mt)||{};this._instance.register({[Mt]:B({},e,t)}),i&&this._instance.reloadFeatureFlags()}resetPersonPropertiesForFlags(){this._instance.unregister(Mt)}setGroupPropertiesForFlags(t,i){void 0===i&&(i=!0);var e=this._instance.get_property(Ct)||{};0!==Object.keys(e).length&&Object.keys(e).forEach((i=>{e[i]=B({},e[i],t[i]),delete t[i]})),this._instance.register({[Ct]:B({},e,t)}),i&&this._instance.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var i=this._instance.get_property(Ct)||{};this._instance.register({[Ct]:B({},i,{[t]:{}})})}else this._instance.unregister(Ct)}reset(){this.be=!1,this.ye=!1,this.we=!1,this.Se=!1,this.$e=!1,this.xe=!1,this.$anon_distinct_id=void 0,this.Ie(),this.me=!1}}var po=[\"cookie\",\"localstorage\",\"localstorage+cookie\",\"sessionstorage\",\"memory\"];class _o{constructor(t,i){this.S=t,this.props={},this.Ce=!1,this.Fe=(t=>{var i=\"\";return t.token&&(i=t.token.replace(/\\+/g,\"PL\").replace(/\\//g,\"SL\").replace(/=/g,\"EQ\")),t.persistence_name?\"ph_\"+t.persistence_name:\"ph_\"+i+\"_posthog\"})(t),this.B=this.Oe(t),this.load(),t.debug&&N.info(\"Persistence loaded\",t.persistence,B({},this.props)),this.update_config(t,t,i),this.save()}isDisabled(){return!!this.Ae}Oe(t){-1===po.indexOf(t.persistence.toLowerCase())&&(N.critical(\"Unknown persistence type \"+t.persistence+\"; falling back to localStorage+cookie\"),t.persistence=\"localStorage+cookie\");var i=t.persistence.toLowerCase();return\"localstorage\"===i&&Gi.O()?Gi:\"localstorage+cookie\"===i&&Vi.O()?Vi:\"sessionstorage\"===i&&Qi.O()?Qi:\"memory\"===i?Yi:\"cookie\"===i?Hi:Vi.O()?Vi:Hi}properties(){var t={};return J(this.props,(function(i,e){if(e===Pt&&I(i))for(var r=Object.keys(i),n=0;n<r.length;n++)t[\"$feature/\"+r[n]]=i[r[n]];else a=e,l=!1,(C(o=Wt)?l:s&&o.indexOf===s?-1!=o.indexOf(a):(J(o,(function(t){if(l||(l=t===a))return W})),l))||(t[e]=i);var o,a,l})),t}load(){if(!this.Ae){var t=this.B.L(this.Fe);t&&(this.props=V({},t))}}save(){this.Ae||this.B.j(this.Fe,this.props,this.De,this.Le,this.je,this.S.debug)}remove(){this.B.N(this.Fe,!1),this.B.N(this.Fe,!0)}clear(){this.remove(),this.props={}}register_once(t,i,e){if(I(t)){R(i)&&(i=\"None\"),this.De=R(e)?this.Ne:e;var r=!1;if(J(t,((t,e)=>{this.props.hasOwnProperty(e)&&this.props[e]!==i||(this.props[e]=t,r=!0)})),r)return this.save(),!0}return!1}register(t,i){if(I(t)){this.De=R(i)?this.Ne:i;var e=!1;if(J(t,((i,r)=>{t.hasOwnProperty(r)&&this.props[r]!==i&&(this.props[r]=i,e=!0)})),e)return this.save(),!0}return!1}unregister(t){t in this.props&&(delete this.props[t],this.save())}update_campaign_params(){if(!this.Ce){var t=Vn(this.S.custom_campaign_params,this.S.mask_personal_data_properties,this.S.custom_personal_data_properties);P(Z(t))||this.register(t),this.Ce=!0}}update_search_keyword(){var t;this.register((t=null==o?void 0:o.referrer)?Yn(t):{})}update_referrer_info(){var t;this.register_once({$referrer:Qn(),$referring_domain:null!=o&&o.referrer&&(null==(t=Si(o.referrer))?void 0:t.host)||\"$direct\"},void 0)}set_initial_person_info(){this.props[Nt]||this.props[zt]||this.register_once({[Ut]:Zn(this.S.mask_personal_data_properties,this.S.custom_personal_data_properties)},void 0)}get_initial_props(){var t={};J([zt,Nt],(i=>{var e=this.props[i];e&&J(e,(function(i,e){t[\"$initial_\"+y(e)]=i}))}));var i,e,r=this.props[Ut];if(r){var s=(i=to(r),e={},J(i,(function(t,i){e[\"$initial_\"+y(i)]=t})),e);V(t,s)}return t}safe_merge(t){return J(this.props,(function(i,e){e in t||(t[e]=i)})),t}update_config(t,i,e){if(this.Ne=this.De=t.cookie_expiration,this.set_disabled(t.disable_persistence||!!e),this.set_cross_subdomain(t.cross_subdomain_cookie),this.set_secure(t.secure_cookie),t.persistence!==i.persistence){var r=this.Oe(t),s=this.props;this.clear(),this.B=r,this.props=s,this.save()}}set_disabled(t){this.Ae=t,this.Ae?this.remove():this.save()}set_cross_subdomain(t){t!==this.Le&&(this.Le=t,this.remove(),this.save())}set_secure(t){t!==this.je&&(this.je=t,this.remove(),this.save())}set_event_timer(t,i){var e=this.props[at]||{};e[t]=i,this.props[at]=e,this.save()}remove_event_timer(t){var i=(this.props[at]||{})[t];return R(i)||(delete this.props[at][t],this.save()),i}get_property(t){return this.props[t]}set_property(t,i){this.props[t]=i,this.save()}}class go{constructor(){this.ze={},this.ze={}}on(t,i){return this.ze[t]||(this.ze[t]=[]),this.ze[t].push(i),()=>{this.ze[t]=this.ze[t].filter((t=>t!==i))}}emit(t,i){for(var e of this.ze[t]||[])e(i);for(var r of this.ze[\"*\"]||[])r(t,i)}}class mo{constructor(t){this.Ue=new go,this.qe=(t,i)=>this.Be(t,i)&&this.He(t,i)&&this.We(t,i),this.Be=(t,i)=>null==i||!i.event||(null==t?void 0:t.event)===(null==i?void 0:i.event),this._instance=t,this.Ge=new Set,this.Je=new Set}init(){var t;if(!R(null==(t=this._instance)?void 0:t.Ve)){var i;null==(i=this._instance)||i.Ve(((t,i)=>{this.on(t,i)}))}}register(t){var i,e;if(!R(null==(i=this._instance)?void 0:i.Ve)&&(t.forEach((t=>{var i,e;null==(i=this.Je)||i.add(t),null==(e=t.steps)||e.forEach((t=>{var i;null==(i=this.Ge)||i.add((null==t?void 0:t.event)||\"\")}))})),null!=(e=this._instance)&&e.autocapture)){var r,s=new Set;t.forEach((t=>{var i;null==(i=t.steps)||i.forEach((t=>{null!=t&&t.selector&&s.add(null==t?void 0:t.selector)}))})),null==(r=this._instance)||r.autocapture.setElementSelectors(s)}}on(t,i){var e;null!=i&&0!=t.length&&(this.Ge.has(t)||this.Ge.has(null==i?void 0:i.event))&&this.Je&&(null==(e=this.Je)?void 0:e.size)>0&&this.Je.forEach((t=>{this.Ke(i,t)&&this.Ue.emit(\"actionCaptured\",t.name)}))}Ye(t){this.onAction(\"actionCaptured\",(i=>t(i)))}Ke(t,i){if(null==(null==i?void 0:i.steps))return!1;for(var e of i.steps)if(this.qe(t,e))return!0;return!1}onAction(t,i){return this.Ue.on(t,i)}He(t,i){if(null!=i&&i.url){var e,r=null==t||null==(e=t.properties)?void 0:e.$current_url;if(!r||\"string\"!=typeof r)return!1;if(!mo.Xe(r,null==i?void 0:i.url,(null==i?void 0:i.url_matching)||\"contains\"))return!1}return!0}static Xe(i,e,r){switch(r){case\"regex\":return!!t&&zs(i,e);case\"exact\":return e===i;case\"contains\":var s=mo.Qe(e).replace(/_/g,\".\").replace(/%/g,\".*\");return zs(i,s);default:return!1}}static Qe(t){return t.replace(/[|\\\\{}()[\\]^$+*?.]/g,\"\\\\$&\").replace(/-/g,\"\\\\x2d\")}We(t,i){if((null!=i&&i.href||null!=i&&i.tag_name||null!=i&&i.text)&&!this.Ze(t).some((t=>!(null!=i&&i.href&&!mo.Xe(t.href||\"\",null==i?void 0:i.href,(null==i?void 0:i.href_matching)||\"exact\"))&&((null==i||!i.tag_name||t.tag_name===(null==i?void 0:i.tag_name))&&!(null!=i&&i.text&&!mo.Xe(t.text||\"\",null==i?void 0:i.text,(null==i?void 0:i.text_matching)||\"exact\")&&!mo.Xe(t.$el_text||\"\",null==i?void 0:i.text,(null==i?void 0:i.text_matching)||\"exact\"))))))return!1;if(null!=i&&i.selector){var e,r=null==t||null==(e=t.properties)?void 0:e.$element_selectors;if(!r)return!1;if(!r.includes(null==i?void 0:i.selector))return!1}return!0}Ze(t){return null==(null==t?void 0:t.properties.$elements)?[]:null==t?void 0:t.properties.$elements}}var bo=function(t){return t.Button=\"button\",t.Tab=\"tab\",t.Selector=\"selector\",t}({}),yo=function(t){return t.TopLeft=\"top_left\",t.TopRight=\"top_right\",t.TopCenter=\"top_center\",t.MiddleLeft=\"middle_left\",t.MiddleRight=\"middle_right\",t.MiddleCenter=\"middle_center\",t.Left=\"left\",t.Center=\"center\",t.Right=\"right\",t.NextToTrigger=\"next_to_trigger\",t}({}),wo=function(t){return t.Popover=\"popover\",t.API=\"api\",t.Widget=\"widget\",t.ExternalSurvey=\"external_survey\",t}({}),So=function(t){return t.Open=\"open\",t.MultipleChoice=\"multiple_choice\",t.SingleChoice=\"single_choice\",t.Rating=\"rating\",t.Link=\"link\",t}({}),$o=function(t){return t.NextQuestion=\"next_question\",t.End=\"end\",t.ResponseBased=\"response_based\",t.SpecificQuestion=\"specific_question\",t}({}),xo=function(t){return t.Once=\"once\",t.Recurring=\"recurring\",t.Always=\"always\",t}({}),ko=function(t){return t.SHOWN=\"survey shown\",t.DISMISSED=\"survey dismissed\",t.SENT=\"survey sent\",t}({}),Eo=function(t){return t.SURVEY_ID=\"$survey_id\",t.SURVEY_NAME=\"$survey_name\",t.SURVEY_RESPONSE=\"$survey_response\",t.SURVEY_ITERATION=\"$survey_iteration\",t.SURVEY_ITERATION_START_DATE=\"$survey_iteration_start_date\",t.SURVEY_PARTIALLY_COMPLETED=\"$survey_partially_completed\",t.SURVEY_SUBMISSION_ID=\"$survey_submission_id\",t.SURVEY_QUESTIONS=\"$survey_questions\",t.SURVEY_COMPLETED=\"$survey_completed\",t}({}),Io=z(\"[Surveys]\");var Po=\"seenSurvey_\",Ro=(t,i)=>{var e=\"$survey_\"+i+\"/\"+t.id;return t.current_iteration&&t.current_iteration>0&&(e=\"$survey_\"+i+\"/\"+t.id+\"/\"+t.current_iteration),e},To=[wo.Popover,wo.Widget,wo.API];class Mo{constructor(t){this._instance=t,this.tr=new Map,this.ir=new Map}register(t){var i;R(null==(i=this._instance)?void 0:i.Ve)||(this.er(t),this.rr(t))}rr(t){var i=t.filter((t=>{var i,e;return(null==(i=t.conditions)?void 0:i.actions)&&(null==(e=t.conditions)||null==(e=e.actions)||null==(e=e.values)?void 0:e.length)>0}));if(0!==i.length){if(null==this.sr){this.sr=new mo(this._instance),this.sr.init();this.sr.Ye((t=>{this.onAction(t)}))}i.forEach((t=>{var i,e,r,s,n;t.conditions&&null!=(i=t.conditions)&&i.actions&&null!=(e=t.conditions)&&null!=(e=e.actions)&&e.values&&(null==(r=t.conditions)||null==(r=r.actions)||null==(r=r.values)?void 0:r.length)>0&&(null==(s=this.sr)||s.register(t.conditions.actions.values),null==(n=t.conditions)||null==(n=n.actions)||null==(n=n.values)||n.forEach((i=>{if(i&&i.name){var e=this.ir.get(i.name);e&&e.push(t.id),this.ir.set(i.name,e||[t.id])}})))}))}}er(t){var i;if(0!==t.filter((t=>{var i,e;return(null==(i=t.conditions)?void 0:i.events)&&(null==(e=t.conditions)||null==(e=e.events)||null==(e=e.values)?void 0:e.length)>0})).length){null==(i=this._instance)||i.Ve(((t,i)=>{this.onEvent(t,i)})),t.forEach((t=>{var i;null==(i=t.conditions)||null==(i=i.events)||null==(i=i.values)||i.forEach((i=>{if(i&&i.name){var e=this.tr.get(i.name);e&&e.push(t.id),this.tr.set(i.name,e||[t.id])}}))}))}}onEvent(t,i){var e,r=(null==(e=this._instance)||null==(e=e.persistence)?void 0:e.props[Ot])||[];if(\"survey shown\"===t&&i&&r.length>0){var s;Io.info(\"survey event matched, removing survey from activated surveys\",{event:t,eventPayload:i,existingActivatedSurveys:r});var n=null==i||null==(s=i.properties)?void 0:s.$survey_id;if(n){var o=r.indexOf(n);o>=0&&(r.splice(o,1),this.nr(r))}}else this.tr.has(t)&&(Io.info(\"survey event matched, updating activated surveys\",{event:t,surveys:this.tr.get(t)}),this.nr(r.concat(this.tr.get(t)||[])))}onAction(t){var i,e=(null==(i=this._instance)||null==(i=i.persistence)?void 0:i.props[Ot])||[];this.ir.has(t)&&this.nr(e.concat(this.ir.get(t)||[]))}nr(t){var i;null==(i=this._instance)||null==(i=i.persistence)||i.register({[Ot]:[...new Set(t)]})}getSurveys(){var t,i=null==(t=this._instance)||null==(t=t.persistence)?void 0:t.props[Ot];return i||[]}getEventToSurveys(){return this.tr}ar(){return this.sr}}class Co{constructor(t){this.lr=void 0,this._surveyManager=null,this.ur=!1,this.hr=!1,this.dr=[],this._instance=t,this._surveyEventReceiver=null}onRemoteConfig(t){var i=t.surveys;if(F(i))return Io.warn(\"Flags not loaded yet. Not loading surveys.\");var e=k(i);this.lr=e?i.length>0:i,Io.info(\"flags response received, isSurveysEnabled: \"+this.lr),this.loadIfEnabled()}reset(){localStorage.removeItem(\"lastSeenSurveyDate\");for(var t=[],i=0;i<localStorage.length;i++){var e=localStorage.key(i);(null!=e&&e.startsWith(Po)||null!=e&&e.startsWith(\"inProgressSurvey_\"))&&t.push(e)}t.forEach((t=>localStorage.removeItem(t)))}loadIfEnabled(){if(!this._surveyManager)if(this.hr)Io.info(\"Already initializing surveys, skipping...\");else if(this._instance.config.disable_surveys)Io.info(\"Disabled. Not loading surveys.\");else{var t=null==v?void 0:v.__PosthogExtensions__;if(t){if(!R(this.lr)||this._instance.config.advanced_enable_surveys){var i=this.lr||this._instance.config.advanced_enable_surveys;this.hr=!0;try{var e=t.generateSurveys;if(e)return void this.vr(e,i);var r=t.loadExternalDependency;if(!r)return void this.cr(\"PostHog loadExternalDependency extension not found.\");r(this._instance,\"surveys\",(e=>{e||!t.generateSurveys?this.cr(\"Could not load surveys script\",e):this.vr(t.generateSurveys,i)}))}catch(t){throw this.cr(\"Error initializing surveys\",t),t}finally{this.hr=!1}}}else Io.error(\"PostHog Extensions not found.\")}}vr(t,i){this._surveyManager=t(this._instance,i),this._surveyEventReceiver=new Mo(this._instance),Io.info(\"Surveys loaded successfully\"),this.pr({isLoaded:!0})}cr(t,i){Io.error(t,i),this.pr({isLoaded:!1,error:t})}onSurveysLoaded(t){return this.dr.push(t),this._surveyManager&&this.pr({isLoaded:!0}),()=>{this.dr=this.dr.filter((i=>i!==t))}}getSurveys(t,i){if(void 0===i&&(i=!1),this._instance.config.disable_surveys)return Io.info(\"Disabled. Not loading surveys.\"),t([]);var e=this._instance.get_property(Ft);if(e&&!i)return t(e,{isLoaded:!0});if(this.ur)return t([],{isLoaded:!1,error:\"Surveys are already being loaded\"});try{this.ur=!0,this._instance.Pe({url:this._instance.requestRouter.endpointFor(\"api\",\"/api/surveys/?token=\"+this._instance.config.token),method:\"GET\",timeout:this._instance.config.surveys_request_timeout_ms,callback:i=>{var e;this.ur=!1;var r=i.statusCode;if(200!==r||!i.json){var s=\"Surveys API could not be loaded, status: \"+r;return Io.error(s),t([],{isLoaded:!1,error:s})}var n,o=i.json.surveys||[],a=o.filter((t=>function(t){return!(!t.start_date||t.end_date)}(t)&&(function(t){var i;return!(null==(i=t.conditions)||null==(i=i.events)||null==(i=i.values)||!i.length)}(t)||function(t){var i;return!(null==(i=t.conditions)||null==(i=i.actions)||null==(i=i.values)||!i.length)}(t))));a.length>0&&(null==(n=this._surveyEventReceiver)||n.register(a));return null==(e=this._instance.persistence)||e.register({[Ft]:o}),t(o,{isLoaded:!0})}})}catch(t){throw this.ur=!1,t}}pr(t){for(var i of this.dr)try{if(!t.isLoaded)return i([],t);this.getSurveys(i)}catch(t){Io.error(\"Error in survey callback\",t)}}getActiveMatchingSurveys(t,i){if(void 0===i&&(i=!1),!F(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,i);Io.warn(\"init was not called\")}_r(t){var i=null;return this.getSurveys((e=>{var r;i=null!==(r=e.find((i=>i.id===t)))&&void 0!==r?r:null})),i}gr(t){if(F(this._surveyManager))return{eligible:!1,reason:\"SDK is not enabled or survey functionality is not yet loaded\"};var i=\"string\"==typeof t?this._r(t):t;return i?this._surveyManager.checkSurveyEligibility(i):{eligible:!1,reason:\"Survey not found\"}}canRenderSurvey(t){if(F(this._surveyManager))return Io.warn(\"init was not called\"),{visible:!1,disabledReason:\"SDK is not enabled or survey functionality is not yet loaded\"};var i=this.gr(t);return{visible:i.eligible,disabledReason:i.reason}}canRenderSurveyAsync(t,i){return F(this._surveyManager)?(Io.warn(\"init was not called\"),Promise.resolve({visible:!1,disabledReason:\"SDK is not enabled or survey functionality is not yet loaded\"})):new Promise((e=>{this.getSurveys((i=>{var r,s=null!==(r=i.find((i=>i.id===t)))&&void 0!==r?r:null;if(s){var n=this.gr(s);e({visible:n.eligible,disabledReason:n.reason})}else e({visible:!1,disabledReason:\"Survey not found\"})}),i)}))}renderSurvey(t,i){if(F(this._surveyManager))Io.warn(\"init was not called\");else{var e=this._r(t);if(e)if(To.includes(e.type)){var r=null==o?void 0:o.querySelector(i);r?this._surveyManager.renderSurvey(e,r):Io.warn(\"Survey element not found\")}else Io.warn(\"Surveys of type \"+e.type+\" cannot be rendered in the app\");else Io.warn(\"Survey not found\")}}}var Fo=z(\"[RateLimiter]\");class Oo{constructor(t){var i,e;this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=t=>{var i=t.text;if(i&&i.length)try{(JSON.parse(i).quota_limited||[]).forEach((t=>{Fo.info((t||\"events\")+\" is quota limited.\"),this.serverLimits[t]=(new Date).getTime()+6e4}))}catch(t){return void Fo.warn('could not rate limit - continuing. Error: \"'+(null==t?void 0:t.message)+'\"',{text:i})}},this.instance=t,this.captureEventsPerSecond=(null==(i=t.config.rate_limiting)?void 0:i.events_per_second)||10,this.captureEventsBurstLimit=Math.max((null==(e=t.config.rate_limiting)?void 0:e.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond),this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}clientRateLimitContext(t){var i,e,r;void 0===t&&(t=!1);var s=(new Date).getTime(),n=null!==(i=null==(e=this.instance.persistence)?void 0:e.get_property(jt))&&void 0!==i?i:{tokens:this.captureEventsBurstLimit,last:s};n.tokens+=(s-n.last)/1e3*this.captureEventsPerSecond,n.last=s,n.tokens>this.captureEventsBurstLimit&&(n.tokens=this.captureEventsBurstLimit);var o=n.tokens<1;return o||t||(n.tokens=Math.max(0,n.tokens-1)),!o||this.lastEventRateLimited||t||this.instance.capture(\"$$client_ingestion_warning\",{$$client_ingestion_warning_message:\"posthog-js client rate limited. Config is set to \"+this.captureEventsPerSecond+\" events per second and \"+this.captureEventsBurstLimit+\" events burst limit.\"},{skip_client_rate_limiting:!0}),this.lastEventRateLimited=o,null==(r=this.instance.persistence)||r.set_property(jt,n),{isRateLimited:o,remainingTokens:n.tokens}}isServerRateLimited(t){var i=this.serverLimits[t||\"events\"]||!1;return!1!==i&&(new Date).getTime()<i}}var Ao=z(\"[RemoteConfig]\");class Do{constructor(t){this._instance=t}get remoteConfig(){var t;return null==(t=v._POSTHOG_REMOTE_CONFIG)||null==(t=t[this._instance.config.token])?void 0:t.config}mr(t){var i,e;null!=(i=v.__PosthogExtensions__)&&i.loadExternalDependency?null==(e=v.__PosthogExtensions__)||null==e.loadExternalDependency||e.loadExternalDependency(this._instance,\"remote-config\",(()=>t(this.remoteConfig))):(Ao.error(\"PostHog Extensions not found. Cannot load remote config.\"),t())}br(t){this._instance.Pe({method:\"GET\",url:this._instance.requestRouter.endpointFor(\"assets\",\"/array/\"+this._instance.config.token+\"/config\"),callback:i=>{t(i.json)}})}load(){try{if(this.remoteConfig)return Ao.info(\"Using preloaded remote config\",this.remoteConfig),void this.Re(this.remoteConfig);if(this._instance.I())return void Ao.warn(\"Remote config is disabled. Falling back to local config.\");this.mr((t=>{if(!t)return Ao.info(\"No config found after loading remote JS config. Falling back to JSON.\"),void this.br((t=>{this.Re(t)}));this.Re(t)}))}catch(t){Ao.error(\"Error loading remote config\",t)}}Re(t){t?this._instance.config.__preview_remote_config?(this._instance.Re(t),!1!==t.hasFeatureFlags&&this._instance.featureFlags.ensureFlagsLoaded()):Ao.info(\"__preview_remote_config is disabled. Logging config instead\",t):Ao.error(\"Failed to fetch remote config from PostHog.\")}}var Lo=3e3;class jo{constructor(t,i){this.yr=!0,this.wr=[],this.Sr=ne((null==i?void 0:i.flush_interval_ms)||Lo,250,5e3,\"flush interval\",Lo),this.$r=t}enqueue(t){this.wr.push(t),this.kr||this.Er()}unload(){this.Ir();var t=this.wr.length>0?this.Pr():{},i=Object.values(t);[...i.filter((t=>0===t.url.indexOf(\"/e\"))),...i.filter((t=>0!==t.url.indexOf(\"/e\")))].map((t=>{this.$r(B({},t,{transport:\"sendBeacon\"}))}))}enable(){this.yr=!1,this.Er()}Er(){var t=this;this.yr||(this.kr=setTimeout((()=>{if(this.Ir(),this.wr.length>0){var i=this.Pr(),e=function(){var e=i[r],s=(new Date).getTime();e.data&&k(e.data)&&J(e.data,(t=>{t.offset=Math.abs(t.timestamp-s),delete t.timestamp})),t.$r(e)};for(var r in i)e()}}),this.Sr))}Ir(){clearTimeout(this.kr),this.kr=void 0}Pr(){var t={};return J(this.wr,(i=>{var e,r=i,s=(r?r.batchKey:null)||r.url;R(t[s])&&(t[s]=B({},r,{data:[]})),null==(e=t[s].data)||e.push(r.data)})),this.wr=[],t}}var No=[\"retriesPerformedSoFar\"];class zo{constructor(i){this.Rr=!1,this.Tr=3e3,this.wr=[],this._instance=i,this.wr=[],this.Mr=!0,!R(t)&&\"onLine\"in t.navigator&&(this.Mr=t.navigator.onLine,st(t,\"online\",(()=>{this.Mr=!0,this.se()})),st(t,\"offline\",(()=>{this.Mr=!1})))}get length(){return this.wr.length}retriableRequest(t){var{retriesPerformedSoFar:i}=t,e=H(t,No);O(i)&&i>0&&(e.url=Ds(e.url,{retry_count:i})),this._instance.Pe(B({},e,{callback:t=>{200!==t.statusCode&&(t.statusCode<400||t.statusCode>=500)&&(null!=i?i:0)<10?this.Cr(B({retriesPerformedSoFar:i},e)):null==e.callback||e.callback(t)}}))}Cr(t){var i=t.retriesPerformedSoFar||0;t.retriesPerformedSoFar=i+1;var e=function(t){var i=3e3*Math.pow(2,t),e=i/2,r=Math.min(18e5,i),s=(Math.random()-.5)*(r-e);return Math.ceil(r+s)}(i),r=Date.now()+e;this.wr.push({retryAt:r,requestOptions:t});var s=\"Enqueued failed request for retry in \"+e;navigator.onLine||(s+=\" (Browser is offline)\"),N.warn(s),this.Rr||(this.Rr=!0,this.Fr())}Fr(){this.Or&&clearTimeout(this.Or),this.Or=setTimeout((()=>{this.Mr&&this.wr.length>0&&this.se(),this.Fr()}),this.Tr)}se(){var t=Date.now(),i=[],e=this.wr.filter((e=>e.retryAt<t||(i.push(e),!1)));if(this.wr=i,e.length>0)for(var{requestOptions:r}of e)this.retriableRequest(r)}unload(){for(var{requestOptions:t}of(this.Or&&(clearTimeout(this.Or),this.Or=void 0),this.wr))try{this._instance.Pe(B({},t,{transport:\"sendBeacon\"}))}catch(t){N.error(t)}this.wr=[]}}class Uo{constructor(t){this.Ar=()=>{var t,i,e,r;this.Dr||(this.Dr={});var s=this.scrollElement(),n=this.scrollY(),o=s?Math.max(0,s.scrollHeight-s.clientHeight):0,a=n+((null==s?void 0:s.clientHeight)||0),l=(null==s?void 0:s.scrollHeight)||0;this.Dr.lastScrollY=Math.ceil(n),this.Dr.maxScrollY=Math.max(n,null!==(t=this.Dr.maxScrollY)&&void 0!==t?t:0),this.Dr.maxScrollHeight=Math.max(o,null!==(i=this.Dr.maxScrollHeight)&&void 0!==i?i:0),this.Dr.lastContentY=a,this.Dr.maxContentY=Math.max(a,null!==(e=this.Dr.maxContentY)&&void 0!==e?e:0),this.Dr.maxContentHeight=Math.max(l,null!==(r=this.Dr.maxContentHeight)&&void 0!==r?r:0)},this._instance=t}getContext(){return this.Dr}resetContext(){var t=this.Dr;return setTimeout(this.Ar,0),t}startMeasuringScrollPosition(){st(t,\"scroll\",this.Ar,{capture:!0}),st(t,\"scrollend\",this.Ar,{capture:!0}),st(t,\"resize\",this.Ar)}scrollElement(){if(!this._instance.config.scroll_root_selector)return null==t?void 0:t.document.documentElement;var i=k(this._instance.config.scroll_root_selector)?this._instance.config.scroll_root_selector:[this._instance.config.scroll_root_selector];for(var e of i){var r=null==t?void 0:t.document.querySelector(e);if(r)return r}}scrollY(){if(this._instance.config.scroll_root_selector){var i=this.scrollElement();return i&&i.scrollTop||0}return t&&(t.scrollY||t.pageYOffset||t.document.documentElement.scrollTop)||0}scrollX(){if(this._instance.config.scroll_root_selector){var i=this.scrollElement();return i&&i.scrollLeft||0}return t&&(t.scrollX||t.pageXOffset||t.document.documentElement.scrollLeft)||0}}var qo=t=>Zn(null==t?void 0:t.config.mask_personal_data_properties,null==t?void 0:t.config.custom_personal_data_properties);class Bo{constructor(t,i,e,r){this.Lr=t=>{var i=this.jr();if(!i||i.sessionId!==t){var e={sessionId:t,props:this.Nr(this._instance)};this.zr.register({[Lt]:e})}},this._instance=t,this.Ur=i,this.zr=e,this.Nr=r||qo,this.Ur.onSessionId(this.Lr)}jr(){return this.zr.props[Lt]}getSetOnceProps(){var t,i=null==(t=this.jr())?void 0:t.props;return i?\"r\"in i?to(i):{$referring_domain:i.referringDomain,$pathname:i.initialPathName,utm_source:i.utm_source,utm_campaign:i.utm_campaign,utm_medium:i.utm_medium,utm_content:i.utm_content,utm_term:i.utm_term}:{}}getSessionProps(){var t={};return J(Z(this.getSetOnceProps()),((i,e)=>{\"$current_url\"===e&&(e=\"url\"),t[\"$session_entry_\"+y(e)]=i})),t}}var Ho=z(\"[SessionId]\");class Wo{constructor(t,i,e){var r;if(this.qr=[],this.Br=(t,i)=>Math.abs(t-i)>this.sessionTimeoutMs,!t.persistence)throw new Error(\"SessionIdManager requires a PostHogPersistence instance\");if(t.config.__preview_experimental_cookieless_mode)throw new Error(\"SessionIdManager cannot be used with __preview_experimental_cookieless_mode\");this.S=t.config,this.zr=t.persistence,this.fi=void 0,this.Ct=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.Hr=i||Ni,this.Wr=e||Ni;var s=this.S.persistence_name||this.S.token,n=this.S.session_idle_timeout_seconds||1800;if(this._sessionTimeoutMs=1e3*ne(n,60,36e3,\"session_idle_timeout_seconds\",1800),t.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.Gr(),this.Jr=\"ph_\"+s+\"_window_id\",this.Vr=\"ph_\"+s+\"_primary_window_exists\",this.Kr()){var o=Qi.L(this.Jr),a=Qi.L(this.Vr);o&&!a?this.fi=o:Qi.N(this.Jr),Qi.j(this.Vr,!0)}if(null!=(r=this.S.bootstrap)&&r.sessionID)try{var l=(t=>{var i=t.replace(/-/g,\"\");if(32!==i.length)throw new Error(\"Not a valid UUID\");if(\"7\"!==i[12])throw new Error(\"Not a UUIDv7\");return parseInt(i.substring(0,12),16)})(this.S.bootstrap.sessionID);this.Yr(this.S.bootstrap.sessionID,(new Date).getTime(),l)}catch(t){Ho.error(\"Invalid sessionID in bootstrap\",t)}this.Xr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(t){return R(this.qr)&&(this.qr=[]),this.qr.push(t),this.Ct&&t(this.Ct,this.fi),()=>{this.qr=this.qr.filter((i=>i!==t))}}Kr(){return\"memory\"!==this.S.persistence&&!this.zr.Ae&&Qi.O()}Qr(t){t!==this.fi&&(this.fi=t,this.Kr()&&Qi.j(this.Jr,t))}Zr(){return this.fi?this.fi:this.Kr()?Qi.L(this.Jr):null}Yr(t,i,e){t===this.Ct&&i===this._sessionActivityTimestamp&&e===this._sessionStartTimestamp||(this._sessionStartTimestamp=e,this._sessionActivityTimestamp=i,this.Ct=t,this.zr.register({[xt]:[i,t,e]}))}ts(){if(this.Ct&&this._sessionActivityTimestamp&&this._sessionStartTimestamp)return[this._sessionActivityTimestamp,this.Ct,this._sessionStartTimestamp];var t=this.zr.props[xt];return k(t)&&2===t.length&&t.push(t[0]),t||[0,null,0]}resetSessionId(){this.Yr(null,null,null)}Xr(){st(t,\"beforeunload\",(()=>{this.Kr()&&Qi.N(this.Vr)}),{capture:!1})}checkAndGetSessionAndWindowId(t,i){if(void 0===t&&(t=!1),void 0===i&&(i=null),this.S.__preview_experimental_cookieless_mode)throw new Error(\"checkAndGetSessionAndWindowId should not be called in __preview_experimental_cookieless_mode\");var e=i||(new Date).getTime(),[r,s,n]=this.ts(),o=this.Zr(),a=O(n)&&n>0&&Math.abs(e-n)>864e5,l=!1,u=!s,h=!t&&this.Br(e,r);u||h||a?(s=this.Hr(),o=this.Wr(),Ho.info(\"new session ID generated\",{sessionId:s,windowId:o,changeReason:{noSessionId:u,activityTimeout:h,sessionPastMaximumLength:a}}),n=e,l=!0):o||(o=this.Wr(),l=!0);var d=0===r||!t||a?e:r,v=0===n?(new Date).getTime():n;return this.Qr(o),this.Yr(s,d,v),t||this.Gr(),l&&this.qr.forEach((t=>t(s,o,l?{noSessionId:u,activityTimeout:h,sessionPastMaximumLength:a}:void 0))),{sessionId:s,windowId:o,sessionStartTimestamp:v,changeReason:l?{noSessionId:u,activityTimeout:h,sessionPastMaximumLength:a}:void 0,lastActivityTimestamp:r}}Gr(){clearTimeout(this.es),this.es=setTimeout((()=>{var[t]=this.ts();this.Br((new Date).getTime(),t)&&this.resetSessionId()}),1.1*this.sessionTimeoutMs)}}var Go=[\"$set_once\",\"$set\"],Jo=z(\"[SiteApps]\");class Vo{constructor(t){this._instance=t,this.rs=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ss(t,i){if(i){var e=this.globalsForEvent(i);this.rs.push(e),this.rs.length>1e3&&(this.rs=this.rs.slice(10))}}get siteAppLoaders(){var t;return null==(t=v._POSTHOG_REMOTE_CONFIG)||null==(t=t[this._instance.config.token])?void 0:t.siteApps}init(){if(this.isEnabled){var t=this._instance.Ve(this.ss.bind(this));this.ns=()=>{t(),this.rs=[],this.ns=void 0}}}globalsForEvent(t){var i,e,r,s,n,o,a;if(!t)throw new Error(\"Event payload is required\");var l={},u=this._instance.get_property(\"$groups\")||[],h=this._instance.get_property(\"$stored_group_properties\")||{};for(var[d,v]of Object.entries(h))l[d]={id:u[d],type:d,properties:v};var{$set_once:c,$set:f}=t;return{event:B({},H(t,Go),{properties:B({},t.properties,f?{$set:B({},null!==(i=null==(e=t.properties)?void 0:e.$set)&&void 0!==i?i:{},f)}:{},c?{$set_once:B({},null!==(r=null==(s=t.properties)?void 0:s.$set_once)&&void 0!==r?r:{},c)}:{}),elements_chain:null!==(n=null==(o=t.properties)?void 0:o.$elements_chain)&&void 0!==n?n:\"\",distinct_id:null==(a=t.properties)?void 0:a.distinct_id}),person:{properties:this._instance.get_property(\"$stored_person_properties\")},groups:l}}setupSiteApp(t){var i=this.apps[t.id],e=()=>{var e;(!i.errored&&this.rs.length&&(Jo.info(\"Processing \"+this.rs.length+\" events for site app with id \"+t.id),this.rs.forEach((t=>null==i.processEvent?void 0:i.processEvent(t))),i.processedBuffer=!0),Object.values(this.apps).every((t=>t.processedBuffer||t.errored)))&&(null==(e=this.ns)||e.call(this))},r=!1,s=s=>{i.errored=!s,i.loaded=!0,Jo.info(\"Site app with id \"+t.id+\" \"+(s?\"loaded\":\"errored\")),r&&e()};try{var{processEvent:n}=t.init({posthog:this._instance,callback:t=>{s(t)}});n&&(i.processEvent=n),r=!0}catch(i){Jo.error(\"Error while initializing PostHog app with config id \"+t.id,i),s(!1)}if(r&&i.loaded)try{e()}catch(e){Jo.error(\"Error while processing buffered events PostHog app with config id \"+t.id,e),i.errored=!0}}os(){var t=this.siteAppLoaders||[];for(var i of t)this.apps[i.id]={id:i.id,loaded:!1,errored:!1,processedBuffer:!1};for(var e of t)this.setupSiteApp(e)}ls(t){if(0!==Object.keys(this.apps).length){var i=this.globalsForEvent(t);for(var e of Object.values(this.apps))try{null==e.processEvent||e.processEvent(i)}catch(i){Jo.error(\"Error while processing event \"+t.event+\" for site app \"+e.id,i)}}}onRemoteConfig(t){var i,e,r,s=this;if(null!=(i=this.siteAppLoaders)&&i.length)return this.isEnabled?(this.os(),void this._instance.on(\"eventCaptured\",(t=>this.ls(t)))):void Jo.error('PostHog site apps are disabled. Enable the \"opt_in_site_apps\" config to proceed.');if(null==(e=this.ns)||e.call(this),null!=(r=t.siteApps)&&r.length)if(this.isEnabled){var n=function(t){var i;v[\"__$$ph_site_app_\"+t]=s._instance,null==(i=v.__PosthogExtensions__)||null==i.loadSiteApp||i.loadSiteApp(s._instance,a,(i=>{if(i)return Jo.error(\"Error while initializing PostHog app with config id \"+t,i)}))};for(var{id:o,url:a}of t.siteApps)n(o)}else Jo.error('PostHog site apps are disabled. Enable the \"opt_in_site_apps\" config to proceed.')}}var Ko=[\"amazonbot\",\"amazonproductbot\",\"app.hypefactors.com\",\"applebot\",\"archive.org_bot\",\"awariobot\",\"backlinksextendedbot\",\"baiduspider\",\"bingbot\",\"bingpreview\",\"chrome-lighthouse\",\"dataforseobot\",\"deepscan\",\"duckduckbot\",\"facebookexternal\",\"facebookcatalog\",\"http://yandex.com/bots\",\"hubspot\",\"ia_archiver\",\"leikibot\",\"linkedinbot\",\"meta-externalagent\",\"mj12bot\",\"msnbot\",\"nessus\",\"petalbot\",\"pinterest\",\"prerender\",\"rogerbot\",\"screaming frog\",\"sebot-wa\",\"sitebulb\",\"slackbot\",\"slurp\",\"trendictionbot\",\"turnitin\",\"twitterbot\",\"vercelbot\",\"yahoo! slurp\",\"yandexbot\",\"zoombot\",\"bot.htm\",\"bot.php\",\"(bot;\",\"bot/\",\"crawler\",\"ahrefsbot\",\"ahrefssiteaudit\",\"semrushbot\",\"siteauditbot\",\"splitsignalbot\",\"gptbot\",\"oai-searchbot\",\"chatgpt-user\",\"perplexitybot\",\"better uptime bot\",\"sentryuptimebot\",\"uptimerobot\",\"headlesschrome\",\"cypress\",\"google-hoteladsverifier\",\"adsbot-google\",\"apis-google\",\"duplexweb-google\",\"feedfetcher-google\",\"google favicon\",\"google web preview\",\"google-read-aloud\",\"googlebot\",\"googleother\",\"google-cloudvertexbot\",\"googleweblight\",\"mediapartners-google\",\"storebot-google\",\"google-inspectiontool\",\"bytespider\"],Yo=function(t,i){if(!t)return!1;var e=t.toLowerCase();return Ko.concat(i||[]).some((t=>{var i=t.toLowerCase();return-1!==e.indexOf(i)}))},Xo=function(t,i){if(!t)return!1;var e=t.userAgent;if(e&&Yo(e,i))return!0;try{var r=null==t?void 0:t.userAgentData;if(null!=r&&r.brands&&r.brands.some((t=>Yo(null==t?void 0:t.brand,i))))return!0}catch(t){}return!!t.webdriver},Qo=function(t){return t.US=\"us\",t.EU=\"eu\",t.CUSTOM=\"custom\",t}({}),Zo=\"i.posthog.com\";class ta{constructor(t){this.us={},this.instance=t}get apiHost(){var t=this.instance.config.api_host.trim().replace(/\\/$/,\"\");return\"https://app.posthog.com\"===t?\"https://us.i.posthog.com\":t}get uiHost(){var t,i=null==(t=this.instance.config.ui_host)?void 0:t.replace(/\\/$/,\"\");return i||(i=this.apiHost.replace(\".\"+Zo,\".posthog.com\")),\"https://app.posthog.com\"===i?\"https://us.posthog.com\":i}get region(){return this.us[this.apiHost]||(/https:\\/\\/(app|us|us-assets)(\\.i)?\\.posthog\\.com/i.test(this.apiHost)?this.us[this.apiHost]=Qo.US:/https:\\/\\/(eu|eu-assets)(\\.i)?\\.posthog\\.com/i.test(this.apiHost)?this.us[this.apiHost]=Qo.EU:this.us[this.apiHost]=Qo.CUSTOM),this.us[this.apiHost]}endpointFor(t,i){if(void 0===i&&(i=\"\"),i&&(i=\"/\"===i[0]?i:\"/\"+i),\"ui\"===t)return this.uiHost+i;if(this.region===Qo.CUSTOM)return this.apiHost+i;var e=Zo+i;switch(t){case\"assets\":return\"https://\"+this.region+\"-assets.\"+e;case\"api\":return\"https://\"+this.region+\".\"+e}}}var ia={icontains:(i,e)=>!!t&&e.href.toLowerCase().indexOf(i.toLowerCase())>-1,not_icontains:(i,e)=>!!t&&-1===e.href.toLowerCase().indexOf(i.toLowerCase()),regex:(i,e)=>!!t&&zs(e.href,i),not_regex:(i,e)=>!!t&&!zs(e.href,i),exact:(t,i)=>i.href===t,is_not:(t,i)=>i.href!==t};class ea{constructor(t){var i=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(t){void 0===t&&(t=!1),i.getWebExperiments((t=>{ea.hs(\"retrieved web experiments from the server\"),i.ds=new Map,t.forEach((t=>{if(t.feature_flag_key){var e;if(i.ds)ea.hs(\"setting flag key \",t.feature_flag_key,\" to web experiment \",t),null==(e=i.ds)||e.set(t.feature_flag_key,t);var r=i._instance.getFeatureFlag(t.feature_flag_key);T(r)&&t.variants[r]&&i.vs(t.name,r,t.variants[r].transforms)}else if(t.variants)for(var s in t.variants){var n=t.variants[s];ea.cs(n)&&i.vs(t.name,s,n.transforms)}}))}),t)},this._instance=t,this._instance.onFeatureFlags((t=>{this.onFeatureFlags(t)}))}onFeatureFlags(t){if(this._is_bot())ea.hs(\"Refusing to render web experiment since the viewer is a likely bot\");else if(!this._instance.config.disable_web_experiments){if(F(this.ds))return this.ds=new Map,this.loadIfEnabled(),void this.previewWebExperiment();ea.hs(\"applying feature flags\",t),t.forEach((t=>{var i;if(this.ds&&null!=(i=this.ds)&&i.has(t)){var e,r=this._instance.getFeatureFlag(t),s=null==(e=this.ds)?void 0:e.get(t);r&&null!=s&&s.variants[r]&&this.vs(s.name,r,s.variants[r].transforms)}}))}}previewWebExperiment(){var t=ea.getWindowLocation();if(null!=t&&t.search){var i=xi(null==t?void 0:t.search,\"__experiment_id\"),e=xi(null==t?void 0:t.search,\"__experiment_variant\");i&&e&&(ea.hs(\"previewing web experiments \"+i+\" && \"+e),this.getWebExperiments((t=>{this.fs(parseInt(i),e,t)}),!1,!0))}}loadIfEnabled(){this._instance.config.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(t,i,e){if(this._instance.config.disable_web_experiments&&!e)return t([]);var r=this._instance.get_property(\"$web_experiments\");if(r&&!i)return t(r);this._instance.Pe({url:this._instance.requestRouter.endpointFor(\"api\",\"/api/web_experiments/?token=\"+this._instance.config.token),method:\"GET\",callback:i=>{if(200!==i.statusCode||!i.json)return t([]);var e=i.json.experiments||[];return t(e)}})}fs(t,i,e){var r=e.filter((i=>i.id===t));r&&r.length>0&&(ea.hs(\"Previewing web experiment [\"+r[0].name+\"] with variant [\"+i+\"]\"),this.vs(r[0].name,i,r[0].variants[i].transforms))}static cs(t){return!F(t.conditions)&&(ea.ps(t)&&ea._s(t))}static ps(t){var i;if(F(t.conditions)||F(null==(i=t.conditions)?void 0:i.url))return!0;var e,r,s,n=ea.getWindowLocation();return!!n&&(null==(e=t.conditions)||!e.url||ia[null!==(r=null==(s=t.conditions)?void 0:s.urlMatchType)&&void 0!==r?r:\"icontains\"](t.conditions.url,n))}static getWindowLocation(){return null==t?void 0:t.location}static _s(t){var i;if(F(t.conditions)||F(null==(i=t.conditions)?void 0:i.utm))return!0;var e=Vn();if(e.utm_source){var r,s,n,o,a,l,u,h,d=null==(r=t.conditions)||null==(r=r.utm)||!r.utm_campaign||(null==(s=t.conditions)||null==(s=s.utm)?void 0:s.utm_campaign)==e.utm_campaign,v=null==(n=t.conditions)||null==(n=n.utm)||!n.utm_source||(null==(o=t.conditions)||null==(o=o.utm)?void 0:o.utm_source)==e.utm_source,c=null==(a=t.conditions)||null==(a=a.utm)||!a.utm_medium||(null==(l=t.conditions)||null==(l=l.utm)?void 0:l.utm_medium)==e.utm_medium,f=null==(u=t.conditions)||null==(u=u.utm)||!u.utm_term||(null==(h=t.conditions)||null==(h=h.utm)?void 0:h.utm_term)==e.utm_term;return d&&c&&f&&v}return!1}static hs(t){for(var i=arguments.length,e=new Array(i>1?i-1:0),r=1;r<i;r++)e[r-1]=arguments[r];N.info(\"[WebExperiments] \"+t,e)}vs(t,i,e){this._is_bot()?ea.hs(\"Refusing to render web experiment since the viewer is a likely bot\"):\"control\"!==i?e.forEach((e=>{if(e.selector){var r;ea.hs(\"applying transform of variant \"+i+\" for experiment \"+t+\" \",e);var s=null==(r=document)?void 0:r.querySelectorAll(e.selector);null==s||s.forEach((t=>{var i=t;e.html&&(i.innerHTML=e.html),e.css&&i.setAttribute(\"style\",e.css)}))}})):ea.hs(\"Control variants leave the page unmodified.\")}_is_bot(){return n&&this._instance?Xo(n,this._instance.config.custom_blocked_useragents):void 0}}var ra=z(\"[PostHog ExternalIntegrations]\"),sa={intercom:\"intercom-integration\",crispChat:\"crisp-chat-integration\"};class na{constructor(t){this._instance=t}J(t,i){var e;null==(e=v.__PosthogExtensions__)||null==e.loadExternalDependency||e.loadExternalDependency(this._instance,t,(t=>{if(t)return ra.error(\"failed to load script\",t);i()}))}startIfEnabledOrStop(){var t=this,i=function(i){var e,s,n;(!r||null!=(e=v.__PosthogExtensions__)&&null!=(e=e.integrations)&&e[i]||t.J(sa[i],(()=>{var e;null==(e=v.__PosthogExtensions__)||null==(e=e.integrations)||null==(e=e[i])||e.start(t._instance)})),!r&&null!=(s=v.__PosthogExtensions__)&&null!=(s=s.integrations)&&s[i])&&(null==(n=v.__PosthogExtensions__)||null==(n=n.integrations)||null==(n=n[i])||n.stop())};for(var[e,r]of Object.entries(null!==(s=this._instance.config.integrations)&&void 0!==s?s:{})){var s;i(e)}}}var oa={},aa=()=>{},la=\"posthog\",ua=!Os&&-1===(null==d?void 0:d.indexOf(\"MSIE\"))&&-1===(null==d?void 0:d.indexOf(\"Mozilla\")),ha=i=>{var e;return{api_host:\"https://us.i.posthog.com\",ui_host:null,token:\"\",autocapture:!0,rageclick:!0,cross_subdomain_cookie:et(null==o?void 0:o.location),persistence:\"localStorage+cookie\",persistence_name:\"\",loaded:aa,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageview:\"2025-05-24\"!==i||\"history_change\",capture_pageleave:\"if_capture_pageview\",defaults:null!=i?i:\"unset\",debug:a&&T(null==a?void 0:a.search)&&-1!==a.search.indexOf(\"__posthog_debug=true\")||!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_web_experiments:!0,disable_surveys:!1,disable_surveys_automatic_display:!1,disable_external_dependency_loading:!1,enable_recording_console_log:void 0,secure_cookie:\"https:\"===(null==t||null==(e=t.location)?void 0:e.protocol),ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:\"localStorage\",opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,session_recording:{},mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error:t=>{var i=\"Bad HTTP status: \"+t.statusCode+\" \"+t.text;N.error(i)},get_device_id:t=>t,capture_performance:void 0,name:\"posthog\",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:\"identified_only\",before_send:void 0,request_queue_config:{flush_interval_ms:Lo},error_tracking:{},_onCapture:aa}},da=t=>{var i={};R(t.process_person)||(i.person_profiles=t.process_person),R(t.xhr_headers)||(i.request_headers=t.xhr_headers),R(t.cookie_name)||(i.persistence_name=t.cookie_name),R(t.disable_cookie)||(i.disable_persistence=t.disable_cookie),R(t.store_google)||(i.save_campaign_params=t.store_google),R(t.verbose)||(i.debug=t.verbose);var e=V({},i,t);return k(t.property_blacklist)&&(R(t.property_denylist)?e.property_denylist=t.property_blacklist:k(t.property_denylist)?e.property_denylist=[...t.property_blacklist,...t.property_denylist]:N.error(\"Invalid value for property_denylist config: \"+t.property_denylist)),e};class va{constructor(){this.__forceAllowLocalhost=!1}get gs(){return this.__forceAllowLocalhost}set gs(t){N.error(\"WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`\"),this.__forceAllowLocalhost=t}}class ca{get decideEndpointWasHit(){var t,i;return null!==(t=null==(i=this.featureFlags)?void 0:i.hasLoadedFlags)&&void 0!==t&&t}get flagsEndpointWasHit(){var t,i;return null!==(t=null==(i=this.featureFlags)?void 0:i.hasLoadedFlags)&&void 0!==t&&t}constructor(){this.webPerformance=new va,this.bs=!1,this.version=c.LIB_VERSION,this.ys=new go,this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=ha(),this.SentryIntegration=ms,this.sentryIntegration=t=>function(t,i){var e=gs(t,i);return{name:_s,processEvent:t=>e(t)}}(this,t),this.__request_queue=[],this.__loaded=!1,this.analyticsDefaultEndpoint=\"/e/\",this.ws=!1,this.Ss=null,this.$s=null,this.xs=null,this.featureFlags=new fo(this),this.toolbar=new $s(this),this.scrollManager=new Uo(this),this.pageViewManager=new Cs(this),this.surveys=new Co(this),this.experiments=new ea(this),this.exceptions=new Ws(this),this.rateLimiter=new Oo(this),this.requestRouter=new ta(this),this.consent=new te(this),this.externalIntegrations=new na(this),this.people={set:(t,i,e)=>{var r=T(t)?{[t]:i}:t;this.setPersonProperties(r),null==e||e({})},set_once:(t,i,e)=>{var r=T(t)?{[t]:i}:t;this.setPersonProperties(void 0,r),null==e||e({})}},this.on(\"eventCaptured\",(t=>N.info('send \"'+(null==t?void 0:t.event)+'\"',t)))}init(t,i,e){if(e&&e!==la){var r,s=null!==(r=oa[e])&&void 0!==r?r:new ca;return s._init(t,i,e),oa[e]=s,oa[la][e]=s,s}return this._init(t,i,e)}_init(i,e,r){var s,n;if(void 0===e&&(e={}),R(i)||M(i))return N.critical(\"PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()\"),this;if(this.__loaded)return N.warn(\"You have already initialized PostHog! Re-initializing is a no-op\"),this;this.__loaded=!0,this.config={},this.ks=e,this.Es=[],e.person_profiles&&(this.$s=e.person_profiles),this.set_config(V({},ha(e.defaults),da(e),{name:r,token:i})),this.config.on_xhr_error&&N.error(\"on_xhr_error is deprecated. Use on_request_error instead\"),this.compression=e.disable_compression?void 0:_.GZipJS;var o=this.Is();this.persistence=new _o(this.config,o),this.sessionPersistence=\"sessionStorage\"===this.config.persistence||\"memory\"===this.config.persistence?this.persistence:new _o(B({},this.config,{persistence:\"sessionStorage\"}),o);var a=B({},this.persistence.props),l=B({},this.sessionPersistence.props);if(this.register({$initialization_time:(new Date).toISOString()}),this.Ps=new jo((t=>this.Rs(t)),this.config.request_queue_config),this.Ts=new zo(this),this.__request_queue=[],this.config.__preview_experimental_cookieless_mode||(this.sessionManager=new Wo(this),this.sessionPropsManager=new Bo(this,this.sessionManager,this.persistence)),new ks(this).startIfEnabledOrStop(),this.siteApps=new Vo(this),null==(s=this.siteApps)||s.init(),this.config.__preview_experimental_cookieless_mode||(this.sessionRecording=new cs(this),this.sessionRecording.startIfEnabledOrStop()),this.config.disable_scroll_properties||this.scrollManager.startMeasuringScrollPosition(),this.autocapture=new Ci(this),this.autocapture.startIfEnabled(),this.surveys.loadIfEnabled(),this.heatmaps=new Ms(this),this.heatmaps.startIfEnabled(),this.webVitalsAutocapture=new Ps(this),this.exceptionObserver=new le(this),this.exceptionObserver.startIfEnabled(),this.deadClicksAutocapture=new se(this,re),this.deadClicksAutocapture.startIfEnabled(),this.historyAutocapture=new ze(this),this.historyAutocapture.startIfEnabled(),c.DEBUG=c.DEBUG||this.config.debug,c.DEBUG&&N.info(\"Starting in debug mode\",{this:this,config:e,thisC:B({},this.config),p:a,s:l}),void 0!==(null==(n=e.bootstrap)?void 0:n.distinctID)){var u,h,d=this.config.get_device_id(Ni()),v=null!=(u=e.bootstrap)&&u.isIdentifiedID?d:e.bootstrap.distinctID;this.persistence.set_property(Dt,null!=(h=e.bootstrap)&&h.isIdentifiedID?\"identified\":\"anonymous\"),this.register({distinct_id:e.bootstrap.distinctID,$device_id:v})}if(this.Ms()){var f,p,g=Object.keys((null==(f=e.bootstrap)?void 0:f.featureFlags)||{}).filter((t=>{var i;return!(null==(i=e.bootstrap)||null==(i=i.featureFlags)||!i[t])})).reduce(((t,i)=>{var r;return t[i]=(null==(r=e.bootstrap)||null==(r=r.featureFlags)?void 0:r[i])||!1,t}),{}),m=Object.keys((null==(p=e.bootstrap)?void 0:p.featureFlagPayloads)||{}).filter((t=>g[t])).reduce(((t,i)=>{var r,s;null!=(r=e.bootstrap)&&null!=(r=r.featureFlagPayloads)&&r[i]&&(t[i]=null==(s=e.bootstrap)||null==(s=s.featureFlagPayloads)?void 0:s[i]);return t}),{});this.featureFlags.receivedFeatureFlags({featureFlags:g,featureFlagPayloads:m})}if(this.config.__preview_experimental_cookieless_mode)this.register_once({distinct_id:Ht,$device_id:null},\"\");else if(!this.get_distinct_id()){var b=this.config.get_device_id(Ni());this.register_once({distinct_id:b,$device_id:b},\"\"),this.persistence.set_property(Dt,\"anonymous\")}return st(t,\"onpagehide\"in self?\"pagehide\":\"unload\",this._handle_unload.bind(this),{passive:!1}),this.toolbar.maybeLoadToolbar(),e.segment?ps(this,(()=>this.Cs())):this.Cs(),E(this.config._onCapture)&&this.config._onCapture!==aa&&(N.warn(\"onCapture is deprecated. Please use `before_send` instead\"),this.on(\"eventCaptured\",(t=>this.config._onCapture(t.event,t)))),this.config.ip&&N.warn('The `ip` config option has NO EFFECT AT ALL and has been deprecated. Use a custom transformation or \"Discard IP data\" project setting instead. See https://posthog.com/tutorials/web-redact-properties#hiding-customer-ip-address for more information.'),this}Re(t){var i,e,r,s,n,a,l,u;if(!o||!o.body)return N.info(\"document not ready yet, trying again in 500 milliseconds...\"),void setTimeout((()=>{this.Re(t)}),500);this.compression=void 0,t.supportedCompression&&!this.config.disable_compression&&(this.compression=m(t.supportedCompression,_.GZipJS)?_.GZipJS:m(t.supportedCompression,_.Base64)?_.Base64:void 0),null!=(i=t.analytics)&&i.endpoint&&(this.analyticsDefaultEndpoint=t.analytics.endpoint),this.set_config({person_profiles:this.$s?this.$s:\"identified_only\"}),null==(e=this.siteApps)||e.onRemoteConfig(t),null==(r=this.sessionRecording)||r.onRemoteConfig(t),null==(s=this.autocapture)||s.onRemoteConfig(t),null==(n=this.heatmaps)||n.onRemoteConfig(t),this.surveys.onRemoteConfig(t),null==(a=this.webVitalsAutocapture)||a.onRemoteConfig(t),null==(l=this.exceptionObserver)||l.onRemoteConfig(t),this.exceptions.onRemoteConfig(t),null==(u=this.deadClicksAutocapture)||u.onRemoteConfig(t)}Cs(){try{this.config.loaded(this)}catch(t){N.critical(\"`loaded` function failed\",t)}this.Fs(),this.config.capture_pageview&&setTimeout((()=>{this.consent.isOptedIn()&&this.Os()}),1),new Do(this).load(),this.featureFlags.flags()}Fs(){var t;this.has_opted_out_capturing()||this.config.request_batching&&(null==(t=this.Ps)||t.enable())}_dom_loaded(){this.has_opted_out_capturing()||G(this.__request_queue,(t=>this.Rs(t))),this.__request_queue=[],this.Fs()}_handle_unload(){var t,i;this.config.request_batching?(this.As()&&this.capture(\"$pageleave\"),null==(t=this.Ps)||t.unload(),null==(i=this.Ts)||i.unload()):this.As()&&this.capture(\"$pageleave\",null,{transport:\"sendBeacon\"})}Pe(t){this.__loaded&&(ua?this.__request_queue.push(t):this.rateLimiter.isServerRateLimited(t.batchKey)||(t.transport=t.transport||this.config.api_transport,t.url=Ds(t.url,{ip:this.config.ip?1:0}),t.headers=B({},this.config.request_headers),t.compression=\"best-available\"===t.compression?this.compression:t.compression,t.fetchOptions=t.fetchOptions||this.config.fetch_options,(t=>{var i,e,r,s=B({},t);s.timeout=s.timeout||6e4,s.url=Ds(s.url,{_:(new Date).getTime().toString(),ver:c.LIB_VERSION,compression:s.compression});var n=null!==(i=s.transport)&&void 0!==i?i:\"fetch\",o=null!==(e=null==(r=rt(Ns,(t=>t.transport===n)))?void 0:r.method)&&void 0!==e?e:Ns[0].method;if(!o)throw new Error(\"No available transport method\");o(s)})(B({},t,{callback:i=>{var e,r;(this.rateLimiter.checkForLimiting(i),i.statusCode>=400)&&(null==(e=(r=this.config).on_request_error)||e.call(r,i));null==t.callback||t.callback(i)}}))))}Rs(t){this.Ts?this.Ts.retriableRequest(t):this.Pe(t)}_execute_array(t){var i,e=[],r=[],s=[];G(t,(t=>{t&&(i=t[0],k(i)?s.push(t):E(t)?t.call(this):k(t)&&\"alias\"===i?e.push(t):k(t)&&-1!==i.indexOf(\"capture\")&&E(this[i])?s.push(t):r.push(t))}));var n=function(t,i){G(t,(function(t){if(k(t[0])){var e=i;J(t,(function(t){e=e[t[0]].apply(e,t.slice(1))}))}else this[t[0]].apply(this,t.slice(1))}),i)};n(e,this),n(r,this),n(s,this)}Ms(){var t,i;return(null==(t=this.config.bootstrap)?void 0:t.featureFlags)&&Object.keys(null==(i=this.config.bootstrap)?void 0:i.featureFlags).length>0||!1}push(t){this._execute_array([t])}capture(t,i,e){var r;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.Ps){if(!this.consent.isOptedOut())if(!R(t)&&T(t)){if(this.config.opt_out_useragent_filter||!this._is_bot()){var s=null!=e&&e.skip_client_rate_limiting?void 0:this.rateLimiter.clientRateLimitContext();if(null==s||!s.isRateLimited){null!=i&&i.$current_url&&!T(null==i?void 0:i.$current_url)&&(N.error(\"Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value.\"),null==i||delete i.$current_url),this.sessionPersistence.update_search_keyword(),this.config.save_campaign_params&&this.sessionPersistence.update_campaign_params(),this.config.save_referrer&&this.sessionPersistence.update_referrer_info(),(this.config.save_campaign_params||this.config.save_referrer)&&this.persistence.set_initial_person_info();var n=new Date,o=(null==e?void 0:e.timestamp)||n,a=Ni(),l={uuid:a,event:t,properties:this.calculateEventProperties(t,i||{},o,a)};s&&(l.properties.$lib_rate_limit_remaining_tokens=s.remainingTokens),(null==e?void 0:e.$set)&&(l.$set=null==e?void 0:e.$set);var u,h,d=this.Ds(null==e?void 0:e.$set_once);if(d&&(l.$set_once=d),(l=tt(l,null!=e&&e._noTruncate?null:this.config.properties_string_max_length)).timestamp=o,R(null==e?void 0:e.timestamp)||(l.properties.$event_time_override_provided=!0,l.properties.$event_time_override_system_time=n),t===ko.DISMISSED||t===ko.SENT){var v=null==i?void 0:i[Eo.SURVEY_ID],c=null==i?void 0:i[Eo.SURVEY_ITERATION];localStorage.setItem((h=\"\"+Po+(u={id:v,current_iteration:c}).id,u.current_iteration&&u.current_iteration>0&&(h=\"\"+Po+u.id+\"_\"+u.current_iteration),h),\"true\"),l.$set=B({},l.$set,{[Ro({id:v,current_iteration:c},t===ko.SENT?\"responded\":\"dismissed\")]:!0})}var f=B({},l.properties.$set,l.$set);if(P(f)||this.setPersonPropertiesForFlags(f),!F(this.config.before_send)){var p=this.Ls(l);if(!p)return;l=p}this.ys.emit(\"eventCaptured\",l);var _={method:\"POST\",url:null!==(r=null==e?void 0:e._url)&&void 0!==r?r:this.requestRouter.endpointFor(\"api\",this.analyticsDefaultEndpoint),data:l,compression:\"best-available\",batchKey:null==e?void 0:e._batchKey};return!this.config.request_batching||e&&(null==e||!e._batchKey)||null!=e&&e.send_instantly?this.Rs(_):this.Ps.enqueue(_),l}N.critical(\"This capture call is ignored due to client rate limiting.\")}}else N.error(\"No event name provided to posthog.capture\")}else N.uninitializedWarning(\"posthog.capture\")}Ve(t){return this.on(\"eventCaptured\",(i=>t(i.event,i)))}calculateEventProperties(t,i,e,r,s){if(e=e||new Date,!this.persistence||!this.sessionPersistence)return i;var n=s?void 0:this.persistence.remove_event_timer(t),a=B({},i);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.config.__preview_experimental_cookieless_mode&&(a.$cookieless_mode=!0),\"$snapshot\"===t){var l=B({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!T(a.distinct_id)&&!O(a.distinct_id)||M(a.distinct_id))&&N.error(\"Invalid distinct_id for replay event. This indicates a bug in your implementation\"),a}var u,h=ro(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties);if(this.sessionManager){var{sessionId:v,windowId:c}=this.sessionManager.checkAndGetSessionAndWindowId(s,e.getTime());a.$session_id=v,a.$window_id=c}this.sessionPropsManager&&V(a,this.sessionPropsManager.getSessionProps());try{var f;this.sessionRecording&&V(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=null==(f=this.Ts)?void 0:f.length}catch(t){a.$sdk_debug_error_capturing_properties=String(t)}if(this.requestRouter.region===Qo.CUSTOM&&(a.$lib_custom_api_host=this.config.api_host),u=\"$pageview\"!==t||s?\"$pageleave\"!==t||s?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(e):this.pageViewManager.doPageView(e,r),a=V(a,u),\"$pageview\"===t&&o&&(a.title=o.title),!R(n)){var p=e.getTime()-n;a.$duration=parseFloat((p/1e3).toFixed(3))}d&&this.config.opt_out_useragent_filter&&(a.$browser_type=this._is_bot()?\"bot\":\"browser\"),(a=V({},h,this.persistence.properties(),this.sessionPersistence.properties(),a)).$is_identified=this._isIdentified(),k(this.config.property_denylist)?J(this.config.property_denylist,(function(t){delete a[t]})):N.error(\"Invalid value for property_denylist config: \"+this.config.property_denylist+\" or property_blacklist config: \"+this.config.property_blacklist);var _=this.config.sanitize_properties;_&&(N.error(\"sanitize_properties is deprecated. Use before_send instead\"),a=_(a,t));var g=this.js();return a.$process_person_profile=g,g&&!s&&this.Ns(\"_calculate_event_properties\"),a}Ds(t){var i;if(!this.persistence||!this.js())return t;if(this.bs)return t;var e=this.persistence.get_initial_props(),r=null==(i=this.sessionPropsManager)?void 0:i.getSetOnceProps(),s=V({},e,r||{},t||{}),n=this.config.sanitize_properties;return n&&(N.error(\"sanitize_properties is deprecated. Use before_send instead\"),s=n(s,\"$set_once\")),this.bs=!0,P(s)?void 0:s}register(t,i){var e;null==(e=this.persistence)||e.register(t,i)}register_once(t,i,e){var r;null==(r=this.persistence)||r.register_once(t,i,e)}register_for_session(t){var i;null==(i=this.sessionPersistence)||i.register(t)}unregister(t){var i;null==(i=this.persistence)||i.unregister(t)}unregister_for_session(t){var i;null==(i=this.sessionPersistence)||i.unregister(t)}zs(t,i){this.register({[t]:i})}getFeatureFlag(t,i){return this.featureFlags.getFeatureFlag(t,i)}getFeatureFlagPayload(t){var i=this.featureFlags.getFeatureFlagPayload(t);try{return JSON.parse(i)}catch(t){return i}}isFeatureEnabled(t,i){return this.featureFlags.isFeatureEnabled(t,i)}reloadFeatureFlags(){this.featureFlags.reloadFeatureFlags()}updateEarlyAccessFeatureEnrollment(t,i,e){this.featureFlags.updateEarlyAccessFeatureEnrollment(t,i,e)}getEarlyAccessFeatures(t,i,e){return void 0===i&&(i=!1),this.featureFlags.getEarlyAccessFeatures(t,i,e)}on(t,i){return this.ys.on(t,i)}onFeatureFlags(t){return this.featureFlags.onFeatureFlags(t)}onSurveysLoaded(t){return this.surveys.onSurveysLoaded(t)}onSessionId(t){var i,e;return null!==(i=null==(e=this.sessionManager)?void 0:e.onSessionId(t))&&void 0!==i?i:()=>{}}getSurveys(t,i){void 0===i&&(i=!1),this.surveys.getSurveys(t,i)}getActiveMatchingSurveys(t,i){void 0===i&&(i=!1),this.surveys.getActiveMatchingSurveys(t,i)}renderSurvey(t,i){this.surveys.renderSurvey(t,i)}canRenderSurvey(t){return this.surveys.canRenderSurvey(t)}canRenderSurveyAsync(t,i){return void 0===i&&(i=!1),this.surveys.canRenderSurveyAsync(t,i)}identify(t,i,e){if(!this.__loaded||!this.persistence)return N.uninitializedWarning(\"posthog.identify\");if(O(t)&&(t=t.toString(),N.warn(\"The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.\")),t)if([\"distinct_id\",\"distinctid\"].includes(t.toLowerCase()))N.critical('The string \"'+t+'\" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.');else if(t!==Ht){if(this.Ns(\"posthog.identify\")){var r=this.get_distinct_id();if(this.register({$user_id:t}),!this.get_property(\"$device_id\")){var s=r;this.register_once({$had_persisted_distinct_id:!0,$device_id:s},\"\")}t!==r&&t!==this.get_property(ot)&&(this.unregister(ot),this.register({distinct_id:t}));var n=\"anonymous\"===(this.persistence.get_property(Dt)||\"anonymous\");t!==r&&n?(this.persistence.set_property(Dt,\"identified\"),this.setPersonPropertiesForFlags(B({},e||{},i||{}),!1),this.capture(\"$identify\",{distinct_id:t,$anon_distinct_id:r},{$set:i||{},$set_once:e||{}}),this.xs=Us(t,i,e),this.featureFlags.setAnonymousDistinctId(r)):(i||e)&&this.setPersonProperties(i,e),t!==r&&(this.reloadFeatureFlags(),this.unregister(At))}}else N.critical('The string \"'+Ht+'\" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.');else N.error(\"Unique user id has not been set in posthog.identify\")}setPersonProperties(t,i){if((t||i)&&this.Ns(\"posthog.setPersonProperties\")){var e=Us(this.get_distinct_id(),t,i);this.xs!==e?(this.setPersonPropertiesForFlags(B({},i||{},t||{})),this.capture(\"$set\",{$set:t||{},$set_once:i||{}}),this.xs=e):N.info(\"A duplicate setPersonProperties call was made with the same properties. It has been ignored.\")}}group(t,i,e){if(t&&i){if(this.Ns(\"posthog.group\")){var r=this.getGroups();r[t]!==i&&this.resetGroupPropertiesForFlags(t),this.register({$groups:B({},r,{[t]:i})}),e&&(this.capture(\"$groupidentify\",{$group_type:t,$group_key:i,$group_set:e}),this.setGroupPropertiesForFlags({[t]:e})),r[t]===i||e||this.reloadFeatureFlags()}}else N.error(\"posthog.group requires a group type and group key\")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(t,i){void 0===i&&(i=!0),this.featureFlags.setPersonPropertiesForFlags(t,i)}resetPersonPropertiesForFlags(){this.featureFlags.resetPersonPropertiesForFlags()}setGroupPropertiesForFlags(t,i){void 0===i&&(i=!0),this.Ns(\"posthog.setGroupPropertiesForFlags\")&&this.featureFlags.setGroupPropertiesForFlags(t,i)}resetGroupPropertiesForFlags(t){this.featureFlags.resetGroupPropertiesForFlags(t)}reset(t){var i,e,r,s;if(N.info(\"reset\"),!this.__loaded)return N.uninitializedWarning(\"posthog.reset\");var n=this.get_property(\"$device_id\");if(this.consent.reset(),null==(i=this.persistence)||i.clear(),null==(e=this.sessionPersistence)||e.clear(),this.surveys.reset(),this.featureFlags.reset(),null==(r=this.persistence)||r.set_property(Dt,\"anonymous\"),null==(s=this.sessionManager)||s.resetSessionId(),this.xs=null,this.config.__preview_experimental_cookieless_mode)this.register_once({distinct_id:Ht,$device_id:null},\"\");else{var o=this.config.get_device_id(Ni());this.register_once({distinct_id:o,$device_id:t?o:n},\"\")}this.register({$last_posthog_reset:(new Date).toISOString()},1)}get_distinct_id(){return this.get_property(\"distinct_id\")}getGroups(){return this.get_property(\"$groups\")||{}}get_session_id(){var t,i;return null!==(t=null==(i=this.sessionManager)?void 0:i.checkAndGetSessionAndWindowId(!0).sessionId)&&void 0!==t?t:\"\"}get_session_replay_url(t){if(!this.sessionManager)return\"\";var{sessionId:i,sessionStartTimestamp:e}=this.sessionManager.checkAndGetSessionAndWindowId(!0),r=this.requestRouter.endpointFor(\"ui\",\"/project/\"+this.config.token+\"/replay/\"+i);if(null!=t&&t.withTimestamp&&e){var s,n=null!==(s=t.timestampLookBack)&&void 0!==s?s:10;if(!e)return r;r+=\"?t=\"+Math.max(Math.floor(((new Date).getTime()-e)/1e3)-n,0)}return r}alias(t,i){return t===this.get_property(nt)?(N.critical(\"Attempting to create alias for existing People user - aborting.\"),-2):this.Ns(\"posthog.alias\")?(R(i)&&(i=this.get_distinct_id()),t!==i?(this.zs(ot,t),this.capture(\"$create_alias\",{alias:t,distinct_id:i})):(N.warn(\"alias matches current distinct_id - skipping api call.\"),this.identify(t),-1)):void 0}set_config(t){var i=B({},this.config);if(I(t)){var e,r,s,n,o;V(this.config,da(t));var a=this.Is();null==(e=this.persistence)||e.update_config(this.config,i,a),this.sessionPersistence=\"sessionStorage\"===this.config.persistence||\"memory\"===this.config.persistence?this.persistence:new _o(B({},this.config,{persistence:\"sessionStorage\"}),a),Gi.O()&&\"true\"===Gi.D(\"ph_debug\")&&(this.config.debug=!0),this.config.debug&&(c.DEBUG=!0,N.info(\"set_config\",{config:t,oldConfig:i,newConfig:B({},this.config)})),null==(r=this.sessionRecording)||r.startIfEnabledOrStop(),null==(s=this.autocapture)||s.startIfEnabled(),null==(n=this.heatmaps)||n.startIfEnabled(),this.surveys.loadIfEnabled(),this.Us(),null==(o=this.externalIntegrations)||o.startIfEnabledOrStop()}}startSessionRecording(t){var i=!0===t,e={sampling:i||!(null==t||!t.sampling),linked_flag:i||!(null==t||!t.linked_flag),url_trigger:i||!(null==t||!t.url_trigger),event_trigger:i||!(null==t||!t.event_trigger)};if(Object.values(e).some(Boolean)){var r,s,n,o,a;if(null==(r=this.sessionManager)||r.checkAndGetSessionAndWindowId(),e.sampling)null==(s=this.sessionRecording)||s.overrideSampling();if(e.linked_flag)null==(n=this.sessionRecording)||n.overrideLinkedFlag();if(e.url_trigger)null==(o=this.sessionRecording)||o.overrideTrigger(\"url\");if(e.event_trigger)null==(a=this.sessionRecording)||a.overrideTrigger(\"event\")}this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var t;return!(null==(t=this.sessionRecording)||!t.started)}captureException(t,i){var e=new Error(\"PostHog syntheticException\");return this.exceptions.sendExceptionEvent(B({},je((t=>t instanceof Error)(t)?{error:t,event:t.message}:{event:t},{syntheticException:e}),i))}loadToolbar(t){return this.toolbar.loadToolbar(t)}get_property(t){var i;return null==(i=this.persistence)?void 0:i.props[t]}getSessionProperty(t){var i;return null==(i=this.sessionPersistence)?void 0:i.props[t]}toString(){var t,i=null!==(t=this.config.name)&&void 0!==t?t:la;return i!==la&&(i=la+\".\"+i),i}_isIdentified(){var t,i;return\"identified\"===(null==(t=this.persistence)?void 0:t.get_property(Dt))||\"identified\"===(null==(i=this.sessionPersistence)?void 0:i.get_property(Dt))}js(){var t,i;return!(\"never\"===this.config.person_profiles||\"identified_only\"===this.config.person_profiles&&!this._isIdentified()&&P(this.getGroups())&&(null==(t=this.persistence)||null==(t=t.props)||!t[ot])&&(null==(i=this.persistence)||null==(i=i.props)||!i[qt]))}As(){return!0===this.config.capture_pageleave||\"if_capture_pageview\"===this.config.capture_pageleave&&(!0===this.config.capture_pageview||\"history_change\"===this.config.capture_pageview)}createPersonProfile(){this.js()||this.Ns(\"posthog.createPersonProfile\")&&this.setPersonProperties({},{})}Ns(t){return\"never\"===this.config.person_profiles?(N.error(t+' was called, but process_person is set to \"never\". This call will be ignored.'),!1):(this.zs(qt,!0),!0)}Is(){var t=this.consent.isOptedOut(),i=this.config.opt_out_persistence_by_default;return this.config.disable_persistence||t&&!!i}Us(){var t,i,e,r,s=this.Is();(null==(t=this.persistence)?void 0:t.Ae)!==s&&(null==(e=this.persistence)||e.set_disabled(s));(null==(i=this.sessionPersistence)?void 0:i.Ae)!==s&&(null==(r=this.sessionPersistence)||r.set_disabled(s));return s}opt_in_capturing(t){var i;(this.consent.optInOut(!0),this.Us(),R(null==t?void 0:t.captureEventName)||null!=t&&t.captureEventName)&&this.capture(null!==(i=null==t?void 0:t.captureEventName)&&void 0!==i?i:\"$opt_in\",null==t?void 0:t.captureProperties,{send_instantly:!0});this.config.capture_pageview&&this.Os()}opt_out_capturing(){this.consent.optInOut(!1),this.Us()}has_opted_in_capturing(){return this.consent.isOptedIn()}has_opted_out_capturing(){return this.consent.isOptedOut()}clear_opt_in_out_capturing(){this.consent.reset(),this.Us()}_is_bot(){return n?Xo(n,this.config.custom_blocked_useragents):void 0}Os(){o&&(\"visible\"===o.visibilityState?this.ws||(this.ws=!0,this.capture(\"$pageview\",{title:o.title},{send_instantly:!0}),this.Ss&&(o.removeEventListener(\"visibilitychange\",this.Ss),this.Ss=null)):this.Ss||(this.Ss=this.Os.bind(this),st(o,\"visibilitychange\",this.Ss)))}debug(i){!1===i?(null==t||t.console.log(\"You've disabled debug mode.\"),localStorage&&localStorage.removeItem(\"ph_debug\"),this.set_config({debug:!1})):(null==t||t.console.log(\"You're now in debug mode. All calls to PostHog will be logged in your console.\\nYou can disable this with `posthog.debug(false)`.\"),localStorage&&localStorage.setItem(\"ph_debug\",\"true\"),this.set_config({debug:!0}))}I(){var t,i,e,r,s,n,o,a=this.ks||{};return\"advanced_disable_flags\"in a?!!a.advanced_disable_flags:!1!==this.config.advanced_disable_flags?!!this.config.advanced_disable_flags:!0===this.config.advanced_disable_decide?(N.warn(\"Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version.\"),!0):(e=\"advanced_disable_decide\",r=!1,s=N,n=(i=\"advanced_disable_flags\")in(t=a)&&!R(t[i]),o=e in t&&!R(t[e]),n?t[i]:o?(s&&s.warn(\"Config field '\"+e+\"' is deprecated. Please use '\"+i+\"' instead. The old field will be removed in a future major version.\"),t[e]):r)}Ls(t){if(F(this.config.before_send))return t;var i=k(this.config.before_send)?this.config.before_send:[this.config.before_send],e=t;for(var r of i){if(e=r(e),F(e)){var s=\"Event '\"+t.event+\"' was rejected in beforeSend function\";return L(t.event)?N.warn(s+\". This can cause unexpected behavior.\"):N.info(s),null}e.properties&&!P(e.properties)||N.warn(\"Event '\"+t.event+\"' has no properties after beforeSend function, this is likely an error.\")}return e}getPageViewId(){var t;return null==(t=this.pageViewManager.ce)?void 0:t.pageViewId}captureTraceFeedback(t,i){this.capture(\"$ai_feedback\",{$ai_trace_id:String(t),$ai_feedback_text:i})}captureTraceMetric(t,i,e){this.capture(\"$ai_metric\",{$ai_trace_id:String(t),$ai_metric_name:i,$ai_metric_value:String(e)})}}!function(t,i){for(var e=0;e<i.length;e++)t.prototype[i[e]]=Q(t.prototype[i[e]])}(ca,[\"identify\"]);var fa,pa=(fa=oa[la]=new ca,function(){function i(){i.done||(i.done=!0,ua=!1,J(oa,(function(t){t._dom_loaded()})))}null!=o&&o.addEventListener?\"complete\"===o.readyState?i():st(o,\"DOMContentLoaded\",i,{capture:!1}):t&&N.error(\"Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized\")}(),fa);export{f as COPY_AUTOCAPTURE_EVENT,_ as Compression,ca as PostHog,ko as SurveyEventName,Eo as SurveyEventProperties,yo as SurveyPosition,$o as SurveyQuestionBranchingType,So as SurveyQuestionType,xo as SurveySchedule,wo as SurveyType,bo as SurveyWidgetType,pa as default,p as knownUnsafeEditableEvent,pa as posthog,g as severityLevels};\n//# sourceMappingURL=module.js.map\n","import posthogJs from 'posthog-js';\nimport React, { createContext, useRef, useMemo, useEffect, useContext, useState, useCallback, Children } from 'react';\n\nvar PostHogContext = createContext({ client: posthogJs });\n\nfunction isDeepEqual(obj1, obj2, visited) {\n if (visited === void 0) { visited = new WeakMap(); }\n if (obj1 === obj2) {\n return true;\n }\n if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) {\n return false;\n }\n if (visited.has(obj1) && visited.get(obj1) === obj2) {\n return true;\n }\n visited.set(obj1, obj2);\n var keys1 = Object.keys(obj1);\n var keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n for (var _i = 0, keys1_1 = keys1; _i < keys1_1.length; _i++) {\n var key = keys1_1[_i];\n if (!keys2.includes(key)) {\n return false;\n }\n if (!isDeepEqual(obj1[key], obj2[key], visited)) {\n return false;\n }\n }\n return true;\n}\n\nfunction PostHogProvider(_a) {\n var children = _a.children, client = _a.client, apiKey = _a.apiKey, options = _a.options;\n var previousInitializationRef = useRef(null);\n var posthog = useMemo(function () {\n if (client) {\n if (apiKey) {\n console.warn('[PostHog.js] You have provided both `client` and `apiKey` to `PostHogProvider`. `apiKey` will be ignored in favour of `client`.');\n }\n if (options) {\n console.warn('[PostHog.js] You have provided both `client` and `options` to `PostHogProvider`. `options` will be ignored in favour of `client`.');\n }\n return client;\n }\n if (apiKey) {\n return posthogJs;\n }\n console.warn('[PostHog.js] No `apiKey` or `client` were provided to `PostHogProvider`. Using default global `window.posthog` instance. You must initialize it manually. This is not recommended behavior.');\n return posthogJs;\n }, [client, apiKey, JSON.stringify(options)]);\n useEffect(function () {\n if (client) {\n return;\n }\n var previousInitialization = previousInitializationRef.current;\n if (!previousInitialization) {\n if (posthogJs.__loaded) {\n console.warn('[PostHog.js] `posthog` was already loaded elsewhere. This may cause issues.');\n }\n posthogJs.init(apiKey, options);\n previousInitializationRef.current = {\n apiKey: apiKey,\n options: options !== null && options !== void 0 ? options : {},\n };\n }\n else {\n if (apiKey !== previousInitialization.apiKey) {\n console.warn(\"[PostHog.js] You have provided a different `apiKey` to `PostHogProvider` than the one that was already initialized. This is not supported by our provider and we'll keep using the previous key. If you need to toggle between API Keys you need to control the `client` yourself and pass it in as a prop rather than an `apiKey` prop.\");\n }\n if (options && !isDeepEqual(options, previousInitialization.options)) {\n posthogJs.set_config(options);\n }\n previousInitializationRef.current = {\n apiKey: apiKey,\n options: options !== null && options !== void 0 ? options : {},\n };\n }\n }, [client, apiKey, JSON.stringify(options)]);\n return React.createElement(PostHogContext.Provider, { value: { client: posthog } }, children);\n}\n\nvar usePostHog = function () {\n var client = useContext(PostHogContext).client;\n return client;\n};\n\nfunction useFeatureFlagEnabled(flag) {\n var client = usePostHog();\n var _a = useState(function () { return client.isFeatureEnabled(flag); }), featureEnabled = _a[0], setFeatureEnabled = _a[1];\n useEffect(function () {\n return client.onFeatureFlags(function () {\n setFeatureEnabled(client.isFeatureEnabled(flag));\n });\n }, [client, flag]);\n return featureEnabled;\n}\n\nfunction useFeatureFlagPayload(flag) {\n var client = usePostHog();\n var _a = useState(function () { return client.getFeatureFlagPayload(flag); }), featureFlagPayload = _a[0], setFeatureFlagPayload = _a[1];\n useEffect(function () {\n return client.onFeatureFlags(function () {\n setFeatureFlagPayload(client.getFeatureFlagPayload(flag));\n });\n }, [client, flag]);\n return featureFlagPayload;\n}\n\nfunction useActiveFeatureFlags() {\n var client = usePostHog();\n var _a = useState(function () { return client.featureFlags.getFlags(); }), featureFlags = _a[0], setFeatureFlags = _a[1];\n useEffect(function () {\n return client.onFeatureFlags(function (flags) {\n setFeatureFlags(flags);\n });\n }, [client]);\n return featureFlags;\n}\n\nfunction useFeatureFlagVariantKey(flag) {\n var client = usePostHog();\n var _a = useState(function () {\n return client.getFeatureFlag(flag);\n }), featureFlagVariantKey = _a[0], setFeatureFlagVariantKey = _a[1];\n useEffect(function () {\n return client.onFeatureFlags(function () {\n setFeatureFlagVariantKey(client.getFeatureFlag(flag));\n });\n }, [client, flag]);\n return featureFlagVariantKey;\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar isFunction = function (f) {\n return typeof f === 'function';\n};\nvar isUndefined = function (x) {\n return x === void 0;\n};\nvar isNull = function (x) {\n return x === null;\n};\n\nfunction PostHogFeature(_a) {\n var flag = _a.flag, match = _a.match, children = _a.children, fallback = _a.fallback, visibilityObserverOptions = _a.visibilityObserverOptions, trackInteraction = _a.trackInteraction, trackView = _a.trackView, props = __rest(_a, [\"flag\", \"match\", \"children\", \"fallback\", \"visibilityObserverOptions\", \"trackInteraction\", \"trackView\"]);\n var payload = useFeatureFlagPayload(flag);\n var variant = useFeatureFlagVariantKey(flag);\n var shouldTrackInteraction = trackInteraction !== null && trackInteraction !== void 0 ? trackInteraction : true;\n var shouldTrackView = trackView !== null && trackView !== void 0 ? trackView : true;\n if (isUndefined(match) || variant === match) {\n var childNode = isFunction(children) ? children(payload) : children;\n return (React.createElement(VisibilityAndClickTrackers, __assign({ flag: flag, options: visibilityObserverOptions, trackInteraction: shouldTrackInteraction, trackView: shouldTrackView }, props), childNode));\n }\n return React.createElement(React.Fragment, null, fallback);\n}\nfunction captureFeatureInteraction(_a) {\n var _b;\n var flag = _a.flag, posthog = _a.posthog, flagVariant = _a.flagVariant;\n var properties = {\n feature_flag: flag,\n $set: (_b = {}, _b[\"$feature_interaction/\".concat(flag)] = flagVariant !== null && flagVariant !== void 0 ? flagVariant : true, _b),\n };\n if (typeof flagVariant === 'string') {\n properties.feature_flag_variant = flagVariant;\n }\n posthog.capture('$feature_interaction', properties);\n}\nfunction captureFeatureView(_a) {\n var _b;\n var flag = _a.flag, posthog = _a.posthog, flagVariant = _a.flagVariant;\n var properties = {\n feature_flag: flag,\n $set: (_b = {}, _b[\"$feature_view/\".concat(flag)] = flagVariant !== null && flagVariant !== void 0 ? flagVariant : true, _b),\n };\n if (typeof flagVariant === 'string') {\n properties.feature_flag_variant = flagVariant;\n }\n posthog.capture('$feature_view', properties);\n}\nfunction VisibilityAndClickTracker(_a) {\n var flag = _a.flag, children = _a.children, onIntersect = _a.onIntersect, onClick = _a.onClick, trackView = _a.trackView, options = _a.options, props = __rest(_a, [\"flag\", \"children\", \"onIntersect\", \"onClick\", \"trackView\", \"options\"]);\n var ref = useRef(null);\n var posthog = usePostHog();\n useEffect(function () {\n if (isNull(ref.current) || !trackView)\n return;\n var observer = new IntersectionObserver(function (_a) {\n var entry = _a[0];\n return onIntersect(entry);\n }, __assign({ threshold: 0.1 }, options));\n observer.observe(ref.current);\n return function () { return observer.disconnect(); };\n }, [flag, options, posthog, ref, trackView, onIntersect]);\n return (React.createElement(\"div\", __assign({ ref: ref }, props, { onClick: onClick }), children));\n}\nfunction VisibilityAndClickTrackers(_a) {\n var flag = _a.flag, children = _a.children, trackInteraction = _a.trackInteraction, trackView = _a.trackView, options = _a.options, props = __rest(_a, [\"flag\", \"children\", \"trackInteraction\", \"trackView\", \"options\"]);\n var clickTrackedRef = useRef(false);\n var visibilityTrackedRef = useRef(false);\n var posthog = usePostHog();\n var variant = useFeatureFlagVariantKey(flag);\n var cachedOnClick = useCallback(function () {\n if (!clickTrackedRef.current && trackInteraction) {\n captureFeatureInteraction({ flag: flag, posthog: posthog, flagVariant: variant });\n clickTrackedRef.current = true;\n }\n }, [flag, posthog, trackInteraction, variant]);\n var onIntersect = function (entry) {\n if (!visibilityTrackedRef.current && entry.isIntersecting) {\n captureFeatureView({ flag: flag, posthog: posthog, flagVariant: variant });\n visibilityTrackedRef.current = true;\n }\n };\n var trackedChildren = Children.map(children, function (child) {\n return (React.createElement(VisibilityAndClickTracker, __assign({ flag: flag, onClick: cachedOnClick, onIntersect: onIntersect, trackView: trackView, options: options }, props), child));\n });\n return React.createElement(React.Fragment, null, trackedChildren);\n}\n\nvar INITIAL_STATE = {\n componentStack: null,\n error: null,\n};\nvar __POSTHOG_ERROR_MESSAGES = {\n INVALID_FALLBACK: '[PostHog.js][PostHogErrorBoundary] Invalid fallback prop, provide a valid React element or a function that returns a valid React element.',\n};\nvar PostHogErrorBoundary = (function (_super) {\n __extends(PostHogErrorBoundary, _super);\n function PostHogErrorBoundary(props) {\n var _this = _super.call(this, props) || this;\n _this.state = INITIAL_STATE;\n return _this;\n }\n PostHogErrorBoundary.prototype.componentDidCatch = function (error, errorInfo) {\n var componentStack = errorInfo.componentStack;\n var additionalProperties = this.props.additionalProperties;\n this.setState({\n error: error,\n componentStack: componentStack,\n });\n var currentProperties;\n if (isFunction(additionalProperties)) {\n currentProperties = additionalProperties(error);\n }\n else if (typeof additionalProperties === 'object') {\n currentProperties = additionalProperties;\n }\n var client = this.context.client;\n client.captureException(error, currentProperties);\n };\n PostHogErrorBoundary.prototype.render = function () {\n var _a = this.props, children = _a.children, fallback = _a.fallback;\n var state = this.state;\n if (state.componentStack == null) {\n return isFunction(children) ? children() : children;\n }\n var element = isFunction(fallback)\n ? React.createElement(fallback, {\n error: state.error,\n componentStack: state.componentStack,\n })\n : fallback;\n if (React.isValidElement(element)) {\n return element;\n }\n console.warn(__POSTHOG_ERROR_MESSAGES.INVALID_FALLBACK);\n return React.createElement(React.Fragment, null);\n };\n PostHogErrorBoundary.contextType = PostHogContext;\n return PostHogErrorBoundary;\n}(React.Component));\n\nexport { PostHogContext, PostHogErrorBoundary, PostHogFeature, PostHogProvider, useActiveFeatureFlags, useFeatureFlagEnabled, useFeatureFlagPayload, useFeatureFlagVariantKey, usePostHog };\n//# sourceMappingURL=index.js.map\n","import {\n createContext,\n useContext,\n useState,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { TIMELINE_ACTION } from \"../utils/constants\";\nimport { UndoRedoProvider, useUndoRedo } from \"./undo-redo-context\";\nimport { Track } from \"../core/track/track\";\nimport { TrackElement } from \"../core/elements/base.element\";\nimport { ProjectJSON, TrackJSON } from \"../types\";\nimport { TimelineEditor } from \"../core/editor/timeline.editor\";\nimport { editorRegistry } from \"../utils/register-editor\";\nimport { PostHogProvider } from \"posthog-js/react\";\nimport posthog from \"posthog-js\";\n\nexport type TimelineContextType = {\n contextId: string;\n editor: TimelineEditor;\n selectedItem: Track | TrackElement | null;\n changeLog: number;\n timelineAction: {\n type: string;\n payload: any;\n };\n totalDuration: number;\n present: ProjectJSON | null;\n canUndo: boolean;\n canRedo: boolean;\n setSelectedItem: (item: Track | TrackElement | null) => void;\n setTimelineAction: (type: string, payload: any) => void;\n};\n\nconst TimelineContext = createContext<TimelineContextType | undefined>(\n undefined\n);\n\nexport interface TimelineProviderProps {\n children: React.ReactNode;\n contextId: string;\n initialData?: {\n tracks: TrackJSON[];\n version: number;\n };\n undoRedoPersistenceKey?: string;\n maxHistorySize?: number;\n}\n\n// Inner component that uses the UndoRedo context\nconst TimelineProviderInner = ({\n contextId,\n children,\n initialData,\n}: TimelineProviderProps) => {\n const [timelineAction, setTimelineActionState] = useState<{\n type: string;\n payload: any;\n }>({\n type: TIMELINE_ACTION.NONE,\n payload: null,\n });\n\n const [selectedItem, setSelectedItem] = useState<Track | TrackElement | null>(\n null\n );\n\n const [totalDuration, setTotalDuration] = useState(0);\n\n const [changeLog, setChangeLog] = useState(0);\n\n const undoRedoContext = useUndoRedo();\n\n const dataInitialized = useRef(false);\n\n const updateChangeLog = () => {\n setChangeLog((prev) => prev + 1);\n };\n\n // Create a single editor instance that's shared across all components\n const editor = useMemo(() => {\n if (editorRegistry.has(contextId)) {\n editorRegistry.delete(contextId);\n } else {\n posthog.capture(\"timeline_editor_created\", {\n contextId,\n });\n }\n const newEditor = new TimelineEditor({\n contextId,\n setTotalDuration,\n setPresent: undoRedoContext.setPresent,\n handleUndo: undoRedoContext.undo,\n handleRedo: undoRedoContext.redo,\n handleResetHistory: undoRedoContext.resetHistory,\n updateChangeLog: updateChangeLog,\n setTimelineAction: (action: string, payload?: unknown) => {\n setTimelineActionState({ type: action, payload });\n },\n });\n\n // Register the editor instance in the global registry\n editorRegistry.set(contextId, newEditor);\n\n return newEditor;\n }, [contextId]);\n\n const setTimelineAction = (type: string, payload: any) => {\n setTimelineActionState({ type, payload });\n };\n\n const initialize = (data: ProjectJSON) => {\n const lastPersistedState = undoRedoContext.getLastPersistedState();\n if (lastPersistedState) {\n editor.loadProject(lastPersistedState);\n return;\n } else {\n editor.loadProject(data);\n }\n };\n\n // Initialize timeline data if provided\n useEffect(() => {\n if (initialData && !dataInitialized.current) {\n initialize(initialData);\n dataInitialized.current = true;\n }\n }, [initialData]);\n\n const contextValue: TimelineContextType = {\n contextId,\n selectedItem,\n timelineAction,\n totalDuration,\n changeLog,\n present: undoRedoContext.present,\n canUndo: undoRedoContext.canUndo,\n canRedo: undoRedoContext.canRedo,\n setSelectedItem,\n setTimelineAction,\n editor, // Include the editor instance\n };\n\n return (\n <TimelineContext.Provider value={contextValue}>\n {children}\n </TimelineContext.Provider>\n );\n};\n\nexport const TimelineProvider = ({\n contextId,\n children,\n initialData,\n undoRedoPersistenceKey,\n maxHistorySize,\n}: TimelineProviderProps) => {\n // If undo/redo is enabled, wrap with UndoRedoProvider\n return (\n <PostHogProvider\n apiKey=\"phc_XaPky8YDbZjqm4GkCWBsVmICZTOTgjascrsftSOoJUJ\"\n options={{\n api_host: \"https://us.i.posthog.com\",\n defaults: \"2025-05-24\",\n disable_session_recording: true,\n }}\n >\n <UndoRedoProvider\n persistenceKey={undoRedoPersistenceKey}\n maxHistorySize={maxHistorySize}\n >\n <TimelineProviderInner\n initialData={initialData}\n contextId={contextId}\n undoRedoPersistenceKey={undoRedoPersistenceKey}\n maxHistorySize={maxHistorySize}\n >\n {children}\n </TimelineProviderInner>\n </UndoRedoProvider>\n </PostHogProvider>\n );\n};\n\nexport const useTimelineContext = () => {\n const context = useContext(TimelineContext);\n if (context === undefined) {\n throw new Error(\n \"useTimelineContext must be used within a TimelineProvider\"\n );\n }\n return context;\n};\n","import { TIMELINE_ELEMENT_TYPE } from \"./utils/constants\";\nimport { TimelineEditor } from \"./core/editor/timeline.editor\";\nimport {\n TimelineProvider,\n TimelineProviderProps,\n} from \"./context/timeline-context\";\nimport { Track } from \"./core/track/track\";\nimport { ElementDeserializer } from \"./core/visitor/element-deserializer\";\nimport { ElementSerializer } from \"./core/visitor/element-serializer\";\nimport { ElementValidator } from \"./core/visitor/element-validator\";\nimport { ElementAdder } from \"./core/visitor/element-adder\";\nimport { ElementRemover } from \"./core/visitor/element-remover\";\nimport { ElementUpdater } from \"./core/visitor/element-updater\";\nimport { ElementSplitter } from \"./core/visitor/element-splitter\";\nimport { ElementCloner } from \"./core/visitor/element-cloner\";\nimport { CaptionElement } from \"./core/elements/caption.element\";\nimport { RectElement } from \"./core/elements/rect.element\";\nimport { TextElement } from \"./core/elements/text.element\";\nimport { ImageElement } from \"./core/elements/image.element\";\nimport { AudioElement } from \"./core/elements/audio.element\";\nimport { CircleElement } from \"./core/elements/circle.element\";\nimport { IconElement } from \"./core/elements/icon.element\";\nimport { VideoElement } from \"./core/elements/video.element\";\nimport {\n generateShortUuid,\n getTotalDuration,\n getCurrentElements,\n isTrackId,\n isElementId,\n} from \"./utils/timeline.utils\";\nimport { TrackElement } from \"./core/elements/base.element\";\nimport { ElementAnimation } from \"./core/addOns/animation\";\nimport { ElementFrameEffect } from \"./core/addOns/frame-effect\";\nimport { ElementTextEffect } from \"./core/addOns/text-effect\";\n\nexport {\n TrackElement,\n Track,\n CaptionElement,\n RectElement,\n TextElement,\n ImageElement,\n IconElement,\n AudioElement,\n CircleElement,\n VideoElement,\n ElementAnimation,\n ElementFrameEffect,\n ElementTextEffect\n};\n\nexport {\n TimelineProvider,\n TimelineEditor,\n};\n\nexport type { TimelineProviderProps };\nexport { TIMELINE_ELEMENT_TYPE };\n\nexport * from \"./types\";\nexport * from \"./utils/constants\";\nexport * from \"./utils/timeline.utils\";\nexport * from \"./context/timeline-context\";\n// Export core components\nexport * from \"./core/track/track\";\nexport * from \"./core/elements/base.element\";\nexport * from \"./core/visitor/element-visitor\";\nexport * from \"./core/visitor/element-serializer\";\nexport * from \"./core/visitor/element-deserializer\";\nexport * from \"./core/visitor/element-validator\";\nexport * from \"./core/visitor/element-adder\";\nexport * from \"./core/visitor/element-remover\";\nexport * from \"./core/visitor/element-updater\";\nexport * from \"./core/visitor/element-splitter\";\nexport * from \"./core/visitor/element-cloner\";\n\n// Expose classes globally on window object for browser access\nif (typeof window !== \"undefined\") {\n // Also expose the main exports\n (window as any).Twick = {\n Track: Track,\n TrackElement,\n ElementDeserializer,\n ElementSerializer,\n ElementValidator,\n ElementAdder,\n ElementRemover,\n ElementUpdater,\n ElementSplitter,\n ElementCloner,\n TimelineEditor,\n TimelineProvider,\n TIMELINE_ELEMENT_TYPE,\n // Element types\n CaptionElement,\n RectElement,\n TextElement,\n ImageElement,\n AudioElement,\n CircleElement,\n IconElement,\n VideoElement,\n ElementAnimation,\n ElementFrameEffect,\n ElementTextEffect,\n // Utility functions\n generateShortUuid,\n getTotalDuration,\n getCurrentElements,\n isTrackId,\n isElementId,\n };\n}\n"],"names":["fn","s","n","i","e","c","r","v","j","t","o","a","l","u","h","d","f","p","_","g","b","y","w","m","S","$","x","k","E","I","P","R","T","M","C","F","O","A","D","L","N","z","U","q","B","H","W","G","J","posthogJs","_i","posthog"],"mappings":"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","x_google_ignoreList":[29,30]}
|