@wazobiatech/wazui 1.1.3 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{PictureBlot-DPxMBH8x.cjs → PictureBlot-BKJtxBtt.cjs} +2 -2
- package/dist/{PictureBlot-DPxMBH8x.cjs.map → PictureBlot-BKJtxBtt.cjs.map} +1 -1
- package/dist/{PictureBlot-DK6U4-Ap.js → PictureBlot-PaeA_g_6.js} +2 -2
- package/dist/{PictureBlot-DK6U4-Ap.js.map → PictureBlot-PaeA_g_6.js.map} +1 -1
- package/dist/VideoBlot-C3Doc0pR.cjs +2 -0
- package/dist/VideoBlot-C3Doc0pR.cjs.map +1 -0
- package/dist/VideoBlot-DMpc2k-2.js +176 -0
- package/dist/VideoBlot-DMpc2k-2.js.map +1 -0
- package/dist/components/wazui/WazUiGqlMediaLibrary/WazUiGqlLibraryEditMedia.d.ts.map +1 -1
- package/dist/components/wazui/WazUiGqlMediaLibrary/WazUiGqlMediaGalleryImage.d.ts.map +1 -1
- package/dist/components/wazui/WazUiGqlMediaLibrary/WazUiGqlMediaLibraryAddMedia.d.ts.map +1 -1
- package/dist/components/wazui/WazUiGqlMediaLibrary/hooks.d.ts +1 -1
- package/dist/components/wazui/WazUiGqlMediaLibrary/hooks.d.ts.map +1 -1
- package/dist/components/wazui/WazUiGqlMediaLibrary/types.d.ts +5 -2
- package/dist/components/wazui/WazUiGqlMediaLibrary/types.d.ts.map +1 -1
- package/dist/components/wazui/WazUiWysiwygInput/blots/VideoBlot.d.ts.map +1 -1
- package/dist/{index-BLX-FC63.cjs → index-DbfIn9kw.cjs} +181 -181
- package/dist/index-DbfIn9kw.cjs.map +4 -0
- package/dist/{index-DLQ6iElj.js → index-sg0jndm7.js} +7318 -7303
- package/dist/index-sg0jndm7.js.map +4 -0
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{quill-CywiOvqz.js → quill-8Sind98o.js} +2 -2
- package/dist/{quill-CywiOvqz.js.map → quill-8Sind98o.js.map} +1 -1
- package/dist/{quill-Jnxar9Zk.cjs → quill-CcRE1rfp.cjs} +2 -2
- package/dist/{quill-Jnxar9Zk.cjs.map → quill-CcRE1rfp.cjs.map} +1 -1
- package/package.json +1 -1
- package/dist/VideoBlot-DFXWlVp9.cjs +0 -2
- package/dist/VideoBlot-DFXWlVp9.cjs.map +0 -1
- package/dist/VideoBlot-c7IiGkvp.js +0 -129
- package/dist/VideoBlot-c7IiGkvp.js.map +0 -1
- package/dist/index-BLX-FC63.cjs.map +0 -4
- package/dist/index-DLQ6iElj.js.map +0 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wazobiatech/wazui",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "`@repo/wazui` is a React component library that provides a set of reusable UI components, hooks, and providers for building modern web applications. It is built with TypeScript, Tailwind CSS, and integrates Shadcn UI components.",
|
|
6
6
|
"homepage": "https://bitbucket.org/wazobiatech/wazui#readme",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";"use strict";var h=Object.defineProperty;var E=(s,l,c)=>l in s?h(s,l,{enumerable:!0,configurable:!0,writable:!0,value:c}):s[l]=c;var b=(s,l,c)=>E(s,typeof l!="symbol"?l+"":l,c);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f="Click to edit caption...";function w(s){if(!s)return null;if(typeof s=="string")try{return JSON.parse(s)}catch{return null}return s}function C(s){const l=w(s);return(l==null?void 0:l.sdk)||""}const x=async()=>{if(typeof window>"u")return null;try{const l=(await Promise.resolve().then(()=>require("./quill-Jnxar9Zk.cjs"))).default.import("blots/block/embed");class c extends l{static create(n){const m=C(n.embed),a=document.createElement("div");a.className="ql-cms-video-wrapper",a.contentEditable="false",a.setAttribute("data-embed",typeof n.embed=="string"?n.embed:JSON.stringify(n.embed)),n.thumbnailUrl&&a.setAttribute("data-thumbnail-url",n.thumbnailUrl),n.url&&a.setAttribute("data-video-url",n.url);const y=/class=["']vsly-player["']/.test(m),p=!y&&!!n.url,r=document.createElement("div");if(r.className="ql-cms-video-player",r.style.position="relative",r.style.width="100%",r.style.background="#ddd",r.style.overflow="hidden",y||(r.style.paddingTop="56.25%"),m)r.innerHTML=m;else if(p){const t=document.createElement("video");t.src=n.url,t.setAttribute("preload","metadata"),t.setAttribute("controls",""),t.setAttribute("muted",""),t.setAttribute("playsinline",""),t.style.position="absolute",t.style.inset="0",t.style.width="100%",t.style.height="100%",t.style.objectFit="cover",r.appendChild(t)}const g=typeof window<"u"&&!!window.__WAZUI_EDITOR_PREVIEW__;if(n.thumbnailUrl&&g&&y){const t=document.createElement("div");t.className="ql-cms-video-preview",t.style.position="absolute",t.style.inset="0",t.style.backgroundImage=`url(${n.thumbnailUrl})`,t.style.backgroundSize="cover",t.style.backgroundPosition="center",t.style.display="flex",t.style.alignItems="center",t.style.justifyContent="center",t.style.pointerEvents="none";const i=document.createElement("div");i.style.width="64px",i.style.height="64px",i.style.borderRadius="50%",i.style.background="rgba(0,0,0,0.6)",i.style.display="flex",i.style.alignItems="center",i.style.justifyContent="center";const o=document.createElementNS("http://www.w3.org/2000/svg","svg");o.setAttribute("width","24"),o.setAttribute("height","24"),o.setAttribute("viewBox","0 0 24 24"),o.setAttribute("fill","white");const u=document.createElementNS("http://www.w3.org/2000/svg","path");u.setAttribute("d","M8 5v14l11-7z"),o.appendChild(u),i.appendChild(o),t.appendChild(i),r.appendChild(t)}a.appendChild(r);const e=document.createElement("div");e.className="ql-cms-video-caption",e.textContent=n.caption||f,e.style.fontStyle="italic",e.style.color=n.caption?"#666":"#999",e.style.fontSize="14px",e.style.marginTop="8px",e.style.textAlign="center",e.style.minHeight="1.2em",e.style.outline="none",e.style.padding="4px",e.style.borderRadius="4px",e.style.cursor="text",e.contentEditable="false",e.setAttribute("data-original-caption",n.caption||"");let d=!1;return e.addEventListener("click",t=>{t.stopPropagation(),t.preventDefault(),!d&&(d=!0,e.setAttribute("data-editing","true"),e.contentEditable="true",e.textContent===f&&(e.textContent="",e.style.color="#666"),setTimeout(()=>{e.focus();const i=document.createRange(),o=window.getSelection();i.selectNodeContents(e),i.collapse(!1),o==null||o.removeAllRanges(),o==null||o.addRange(i)},0))}),e.addEventListener("blur",()=>{setTimeout(()=>{var t;e.isConnected&&d&&(d=!1,e.removeAttribute("data-editing"),e.contentEditable="false",(t=e.textContent)!=null&&t.trim()||(e.textContent=f,e.style.color="#999"))},10)}),e.addEventListener("keydown",t=>{var i;if(d){if(t.key==="Enter"||t.key==="Escape"){t.stopPropagation(),t.preventDefault(),e.blur();return}if(t.key==="Backspace"){const o=((i=e.textContent)==null?void 0:i.trim())||"";if(!o||o===f){t.stopPropagation(),t.preventDefault();const u=e.closest(".ql-cms-video-wrapper");u&&u.parentNode&&(u.parentNode.removeChild(u),setTimeout(()=>{const v=document.querySelector(".ql-editor");v&&v.focus()},10));return}}t.stopPropagation()}}),e.addEventListener("input",t=>{d&&t.stopPropagation()}),e.addEventListener("mousedown",t=>{d&&t.stopPropagation()}),e.addEventListener("mouseup",t=>{d&&t.stopPropagation()}),e.addEventListener("paste",t=>{d&&t.stopPropagation()}),a.appendChild(e),a}static value(n){var d;const m=n.querySelector(".ql-cms-video-caption"),a=n.querySelector(".ql-cms-video-player");let y="";if(m){const t=((d=m.textContent)==null?void 0:d.trim())||"";t&&t!==f&&(y=t)}let p="";const r=n.getAttribute("data-embed");if(r)try{p=JSON.parse(r)}catch{p=r}else if(a){const t=a.querySelector(".vsly-player");t?p={sdk:t.outerHTML}:p={sdk:a.innerHTML}}const g=n.getAttribute("data-thumbnail-url")||void 0,e=n.getAttribute("data-video-url")||void 0;return{embed:p,caption:y,thumbnailUrl:g,url:e}}}return b(c,"blotName","cms-video"),b(c,"tagName","div"),b(c,"className","ql-cms-video-wrapper"),c}catch(s){return console.error("Failed to create VideoBlot:",s),null}};exports.default=x;
|
|
2
|
-
//# sourceMappingURL=VideoBlot-DFXWlVp9.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VideoBlot-DFXWlVp9.cjs","sources":["../src/components/wazui/WazUiWysiwygInput/blots/VideoBlot.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { VideoBlotReturnValue, VideoBlotValue, QuillBlockEmbedStatic } from './types';\n\nconst PLACEHOLDER_CAPTION = 'Click to edit caption...';\n\nfunction parseEmbed(value: VideoBlotValue['embed']): { sdk?: string | null; [key: string]: unknown } | null {\n if (!value) return null;\n if (typeof value === 'string') {\n try {\n return JSON.parse(value) as { sdk?: string | null; [key: string]: unknown };\n } catch {\n return null;\n }\n }\n return value;\n}\n\nfunction getSdkHtml(value: VideoBlotValue['embed']): string {\n const embed = parseEmbed(value);\n return embed?.sdk || '';\n}\n\nconst createVideoBlot = async () => {\n if (typeof window === 'undefined') return null;\n\n try {\n const Quill = (await import('quill')).default;\n const BlockEmbed = Quill.import('blots/block/embed') as QuillBlockEmbedStatic;\n\n class VideoBlot extends (BlockEmbed as any) {\n static blotName = 'cms-video';\n static tagName = 'div';\n static className = 'ql-cms-video-wrapper';\n\n static create(value: VideoBlotValue): HTMLElement {\n const sdkHtml = getSdkHtml(value.embed);\n\n // Wrap container + caption so Quill treats them as one block\n const wrapper = document.createElement('div');\n wrapper.className = 'ql-cms-video-wrapper';\n wrapper.contentEditable = 'false';\n wrapper.setAttribute('data-embed', typeof value.embed === 'string' ? value.embed : JSON.stringify(value.embed));\n if (value.thumbnailUrl) {\n wrapper.setAttribute('data-thumbnail-url', value.thumbnailUrl);\n }\n if (value.url) {\n wrapper.setAttribute('data-video-url', value.url);\n }\n\n const isViouslySdk = /class=[\"']vsly-player[\"']/.test(sdkHtml);\n const isCmsVideo = !isViouslySdk && !!value.url;\n\n // Player container: render the Viously SDK markup from the API\n const playerContainer = document.createElement('div');\n playerContainer.className = 'ql-cms-video-player';\n playerContainer.style.position = 'relative';\n playerContainer.style.width = '100%';\n playerContainer.style.background = '#ddd';\n playerContainer.style.overflow = 'hidden';\n // Only force a 16:9 aspect ratio when the SDK markup doesn't already\n // define its own (the Viously SDK includes its own padding-top wrapper).\n if (!isViouslySdk) {\n playerContainer.style.paddingTop = '56.25%';\n }\n\n if (sdkHtml) {\n playerContainer.innerHTML = sdkHtml;\n } else if (isCmsVideo) {\n // CMS uploaded videos: render a plain <video> element using the direct URL.\n const video = document.createElement('video');\n video.src = value.url as string;\n video.setAttribute('preload', 'metadata');\n video.setAttribute('controls', '');\n video.setAttribute('muted', '');\n video.setAttribute('playsinline', '');\n video.style.position = 'absolute';\n video.style.inset = '0';\n video.style.width = '100%';\n video.style.height = '100%';\n video.style.objectFit = 'cover';\n playerContainer.appendChild(video);\n }\n\n // Only show the thumbnail preview inside the actual editor and only for\n // Viously, because the Viously SDK script doesn't run there. CMS videos\n // already show a frame via the <video> element itself.\n const isEditor =\n typeof window !== 'undefined' &&\n !!(window as unknown as Record<string, unknown>).__WAZUI_EDITOR_PREVIEW__;\n\n if (value.thumbnailUrl && isEditor && isViouslySdk) {\n const preview = document.createElement('div');\n preview.className = 'ql-cms-video-preview';\n preview.style.position = 'absolute';\n preview.style.inset = '0';\n preview.style.backgroundImage = `url(${value.thumbnailUrl})`;\n preview.style.backgroundSize = 'cover';\n preview.style.backgroundPosition = 'center';\n preview.style.display = 'flex';\n preview.style.alignItems = 'center';\n preview.style.justifyContent = 'center';\n preview.style.pointerEvents = 'none';\n\n const playIcon = document.createElement('div');\n playIcon.style.width = '64px';\n playIcon.style.height = '64px';\n playIcon.style.borderRadius = '50%';\n playIcon.style.background = 'rgba(0,0,0,0.6)';\n playIcon.style.display = 'flex';\n playIcon.style.alignItems = 'center';\n playIcon.style.justifyContent = 'center';\n\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('width', '24');\n svg.setAttribute('height', '24');\n svg.setAttribute('viewBox', '0 0 24 24');\n svg.setAttribute('fill', 'white');\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n path.setAttribute('d', 'M8 5v14l11-7z');\n svg.appendChild(path);\n playIcon.appendChild(svg);\n\n preview.appendChild(playIcon);\n playerContainer.appendChild(preview);\n }\n\n wrapper.appendChild(playerContainer);\n\n // Create caption element\n const captionElement = document.createElement('div');\n captionElement.className = 'ql-cms-video-caption';\n captionElement.textContent = value.caption || PLACEHOLDER_CAPTION;\n captionElement.style.fontStyle = 'italic';\n captionElement.style.color = value.caption ? '#666' : '#999';\n captionElement.style.fontSize = '14px';\n captionElement.style.marginTop = '8px';\n captionElement.style.textAlign = 'center';\n captionElement.style.minHeight = '1.2em';\n captionElement.style.outline = 'none';\n captionElement.style.padding = '4px';\n captionElement.style.borderRadius = '4px';\n captionElement.style.cursor = 'text';\n captionElement.contentEditable = 'false';\n captionElement.setAttribute('data-original-caption', value.caption || '');\n\n let isEditingCaption = false;\n\n captionElement.addEventListener('click', e => {\n e.stopPropagation();\n e.preventDefault();\n\n if (isEditingCaption) return;\n\n isEditingCaption = true;\n captionElement.setAttribute('data-editing', 'true');\n captionElement.contentEditable = 'true';\n\n if (captionElement.textContent === PLACEHOLDER_CAPTION) {\n captionElement.textContent = '';\n captionElement.style.color = '#666';\n }\n\n setTimeout(() => {\n captionElement.focus();\n const range = document.createRange();\n const selection = window.getSelection();\n range.selectNodeContents(captionElement);\n range.collapse(false);\n selection?.removeAllRanges();\n selection?.addRange(range);\n }, 0);\n });\n\n captionElement.addEventListener('blur', () => {\n setTimeout(() => {\n if (!captionElement.isConnected) return;\n if (isEditingCaption) {\n isEditingCaption = false;\n captionElement.removeAttribute('data-editing');\n captionElement.contentEditable = 'false';\n const text = captionElement.textContent?.trim() || '';\n if (!text) {\n captionElement.textContent = PLACEHOLDER_CAPTION;\n captionElement.style.color = '#999';\n }\n }\n }, 10);\n });\n\n captionElement.addEventListener('keydown', e => {\n if (!isEditingCaption) return;\n\n if (e.key === 'Enter' || e.key === 'Escape') {\n e.stopPropagation();\n e.preventDefault();\n captionElement.blur();\n return;\n }\n\n if (e.key === 'Backspace') {\n const text = captionElement.textContent?.trim() || '';\n if (!text || text === PLACEHOLDER_CAPTION) {\n e.stopPropagation();\n e.preventDefault();\n\n const videoContainer = captionElement.closest('.ql-cms-video-wrapper');\n if (videoContainer && videoContainer.parentNode) {\n videoContainer.parentNode.removeChild(videoContainer);\n setTimeout(() => {\n const quillEditor = document.querySelector('.ql-editor');\n if (quillEditor) {\n (quillEditor as HTMLElement).focus();\n }\n }, 10);\n }\n return;\n }\n }\n\n e.stopPropagation();\n });\n\n captionElement.addEventListener('input', e => {\n if (isEditingCaption) {\n e.stopPropagation();\n }\n });\n\n captionElement.addEventListener('mousedown', e => {\n if (isEditingCaption) {\n e.stopPropagation();\n }\n });\n\n captionElement.addEventListener('mouseup', e => {\n if (isEditingCaption) {\n e.stopPropagation();\n }\n });\n\n captionElement.addEventListener('paste', e => {\n if (isEditingCaption) {\n e.stopPropagation();\n }\n });\n\n wrapper.appendChild(captionElement);\n\n return wrapper;\n }\n\n static value(node: HTMLElement): VideoBlotReturnValue {\n const captionElement = node.querySelector('.ql-cms-video-caption');\n const playerContainer = node.querySelector('.ql-cms-video-player');\n let caption = '';\n\n if (captionElement) {\n const text = captionElement.textContent?.trim() || '';\n if (text && text !== PLACEHOLDER_CAPTION) {\n caption = text;\n }\n }\n\n // Try to recover the original embed data from the rendered SDK markup.\n // If the wrapper was created from raw HTML (e.g. pasted), fall back to\n // serialising the current player container so the content is preserved.\n let embed: VideoBlotReturnValue['embed'] = '';\n const embedData = node.getAttribute('data-embed');\n if (embedData) {\n try {\n embed = JSON.parse(embedData) as VideoBlotReturnValue['embed'];\n } catch {\n embed = embedData;\n }\n } else if (playerContainer) {\n const vslyPlayer = playerContainer.querySelector('.vsly-player');\n if (vslyPlayer) {\n embed = { sdk: vslyPlayer.outerHTML };\n } else {\n embed = { sdk: playerContainer.innerHTML };\n }\n }\n\n const thumbnailUrl = node.getAttribute('data-thumbnail-url') || undefined;\n const url = node.getAttribute('data-video-url') || undefined;\n\n return {\n embed,\n caption,\n thumbnailUrl,\n url,\n };\n }\n }\n\n return VideoBlot;\n } catch (error) {\n console.error('Failed to create VideoBlot:', error);\n return null;\n }\n};\n\nexport default createVideoBlot;\n"],"names":["PLACEHOLDER_CAPTION","parseEmbed","value","getSdkHtml","embed","createVideoBlot","BlockEmbed","VideoBlot","sdkHtml","wrapper","isViouslySdk","isCmsVideo","playerContainer","video","isEditor","preview","playIcon","svg","path","captionElement","isEditingCaption","e","range","selection","_a","text","videoContainer","quillEditor","node","caption","embedData","vslyPlayer","thumbnailUrl","url","__publicField","error"],"mappings":"iQAIA,MAAMA,EAAsB,2BAE5B,SAASC,EAAWC,EAAwF,CAC1G,GAAI,CAACA,EAAO,OAAO,KACnB,GAAI,OAAOA,GAAU,SACnB,GAAI,CACF,OAAO,KAAK,MAAMA,CAAK,CACzB,MAAQ,CACN,OAAO,IACT,CAEF,OAAOA,CACT,CAEA,SAASC,EAAWD,EAAwC,CAC1D,MAAME,EAAQH,EAAWC,CAAK,EAC9B,OAAOE,GAAA,YAAAA,EAAO,MAAO,EACvB,CAEA,MAAMC,EAAkB,SAAY,CAClC,GAAI,OAAO,OAAW,IAAa,OAAO,KAE1C,GAAI,CAEF,MAAMC,GADS,MAAM,QAAA,QAAA,EAAA,KAAA,IAAA,QAAO,sBAAO,CAAA,GAAG,QACb,OAAO,mBAAmB,EAEnD,MAAMC,UAAmBD,CAAmB,CAK1C,OAAO,OAAOJ,EAAoC,CAChD,MAAMM,EAAUL,EAAWD,EAAM,KAAK,EAGhCO,EAAU,SAAS,cAAc,KAAK,EAC5CA,EAAQ,UAAY,uBACpBA,EAAQ,gBAAkB,QAC1BA,EAAQ,aAAa,aAAc,OAAOP,EAAM,OAAU,SAAWA,EAAM,MAAQ,KAAK,UAAUA,EAAM,KAAK,CAAC,EAC1GA,EAAM,cACRO,EAAQ,aAAa,qBAAsBP,EAAM,YAAY,EAE3DA,EAAM,KACRO,EAAQ,aAAa,iBAAkBP,EAAM,GAAG,EAGlD,MAAMQ,EAAe,4BAA4B,KAAKF,CAAO,EACvDG,EAAa,CAACD,GAAgB,CAAC,CAACR,EAAM,IAGtCU,EAAkB,SAAS,cAAc,KAAK,EAYpD,GAXAA,EAAgB,UAAY,sBAC5BA,EAAgB,MAAM,SAAW,WACjCA,EAAgB,MAAM,MAAQ,OAC9BA,EAAgB,MAAM,WAAa,OACnCA,EAAgB,MAAM,SAAW,SAG5BF,IACHE,EAAgB,MAAM,WAAa,UAGjCJ,EACFI,EAAgB,UAAYJ,UACnBG,EAAY,CAErB,MAAME,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,IAAMX,EAAM,IAClBW,EAAM,aAAa,UAAW,UAAU,EACxCA,EAAM,aAAa,WAAY,EAAE,EACjCA,EAAM,aAAa,QAAS,EAAE,EAC9BA,EAAM,aAAa,cAAe,EAAE,EACpCA,EAAM,MAAM,SAAW,WACvBA,EAAM,MAAM,MAAQ,IACpBA,EAAM,MAAM,MAAQ,OACpBA,EAAM,MAAM,OAAS,OACrBA,EAAM,MAAM,UAAY,QACxBD,EAAgB,YAAYC,CAAK,CACnC,CAKA,MAAMC,EACJ,OAAO,OAAW,KAClB,CAAC,CAAE,OAA8C,yBAEnD,GAAIZ,EAAM,cAAgBY,GAAYJ,EAAc,CAClD,MAAMK,EAAU,SAAS,cAAc,KAAK,EAC5CA,EAAQ,UAAY,uBACpBA,EAAQ,MAAM,SAAW,WACzBA,EAAQ,MAAM,MAAQ,IACtBA,EAAQ,MAAM,gBAAkB,OAAOb,EAAM,YAAY,IACzDa,EAAQ,MAAM,eAAiB,QAC/BA,EAAQ,MAAM,mBAAqB,SACnCA,EAAQ,MAAM,QAAU,OACxBA,EAAQ,MAAM,WAAa,SAC3BA,EAAQ,MAAM,eAAiB,SAC/BA,EAAQ,MAAM,cAAgB,OAE9B,MAAMC,EAAW,SAAS,cAAc,KAAK,EAC7CA,EAAS,MAAM,MAAQ,OACvBA,EAAS,MAAM,OAAS,OACxBA,EAAS,MAAM,aAAe,MAC9BA,EAAS,MAAM,WAAa,kBAC5BA,EAAS,MAAM,QAAU,OACzBA,EAAS,MAAM,WAAa,SAC5BA,EAAS,MAAM,eAAiB,SAEhC,MAAMC,EAAM,SAAS,gBAAgB,6BAA8B,KAAK,EACxEA,EAAI,aAAa,QAAS,IAAI,EAC9BA,EAAI,aAAa,SAAU,IAAI,EAC/BA,EAAI,aAAa,UAAW,WAAW,EACvCA,EAAI,aAAa,OAAQ,OAAO,EAChC,MAAMC,EAAO,SAAS,gBAAgB,6BAA8B,MAAM,EAC1EA,EAAK,aAAa,IAAK,eAAe,EACtCD,EAAI,YAAYC,CAAI,EACpBF,EAAS,YAAYC,CAAG,EAExBF,EAAQ,YAAYC,CAAQ,EAC5BJ,EAAgB,YAAYG,CAAO,CACrC,CAEAN,EAAQ,YAAYG,CAAe,EAGnC,MAAMO,EAAiB,SAAS,cAAc,KAAK,EACnDA,EAAe,UAAY,uBAC3BA,EAAe,YAAcjB,EAAM,SAAWF,EAC9CmB,EAAe,MAAM,UAAY,SACjCA,EAAe,MAAM,MAAQjB,EAAM,QAAU,OAAS,OACtDiB,EAAe,MAAM,SAAW,OAChCA,EAAe,MAAM,UAAY,MACjCA,EAAe,MAAM,UAAY,SACjCA,EAAe,MAAM,UAAY,QACjCA,EAAe,MAAM,QAAU,OAC/BA,EAAe,MAAM,QAAU,MAC/BA,EAAe,MAAM,aAAe,MACpCA,EAAe,MAAM,OAAS,OAC9BA,EAAe,gBAAkB,QACjCA,EAAe,aAAa,wBAAyBjB,EAAM,SAAW,EAAE,EAExE,IAAIkB,EAAmB,GAEvB,OAAAD,EAAe,iBAAiB,QAASE,GAAK,CAC5CA,EAAE,gBAAA,EACFA,EAAE,eAAA,EAEE,CAAAD,IAEJA,EAAmB,GACnBD,EAAe,aAAa,eAAgB,MAAM,EAClDA,EAAe,gBAAkB,OAE7BA,EAAe,cAAgBnB,IACjCmB,EAAe,YAAc,GAC7BA,EAAe,MAAM,MAAQ,QAG/B,WAAW,IAAM,CACfA,EAAe,MAAA,EACf,MAAMG,EAAQ,SAAS,YAAA,EACjBC,EAAY,OAAO,aAAA,EACzBD,EAAM,mBAAmBH,CAAc,EACvCG,EAAM,SAAS,EAAK,EACpBC,GAAA,MAAAA,EAAW,kBACXA,GAAA,MAAAA,EAAW,SAASD,EACtB,EAAG,CAAC,EACN,CAAC,EAEDH,EAAe,iBAAiB,OAAQ,IAAM,CAC5C,WAAW,IAAM,OACVA,EAAe,aAChBC,IACFA,EAAmB,GACnBD,EAAe,gBAAgB,cAAc,EAC7CA,EAAe,gBAAkB,SACpBK,EAAAL,EAAe,cAAf,MAAAK,EAA4B,SAEvCL,EAAe,YAAcnB,EAC7BmB,EAAe,MAAM,MAAQ,QAGnC,EAAG,EAAE,CACP,CAAC,EAEDA,EAAe,iBAAiB,UAAWE,GAAK,OAC9C,GAAKD,EAEL,IAAIC,EAAE,MAAQ,SAAWA,EAAE,MAAQ,SAAU,CAC3CA,EAAE,gBAAA,EACFA,EAAE,eAAA,EACFF,EAAe,KAAA,EACf,MACF,CAEA,GAAIE,EAAE,MAAQ,YAAa,CACzB,MAAMI,IAAOD,EAAAL,EAAe,cAAf,YAAAK,EAA4B,SAAU,GACnD,GAAI,CAACC,GAAQA,IAASzB,EAAqB,CACzCqB,EAAE,gBAAA,EACFA,EAAE,eAAA,EAEF,MAAMK,EAAiBP,EAAe,QAAQ,uBAAuB,EACjEO,GAAkBA,EAAe,aACnCA,EAAe,WAAW,YAAYA,CAAc,EACpD,WAAW,IAAM,CACf,MAAMC,EAAc,SAAS,cAAc,YAAY,EACnDA,GACDA,EAA4B,MAAA,CAEjC,EAAG,EAAE,GAEP,MACF,CACF,CAEAN,EAAE,gBAAA,EACJ,CAAC,EAEDF,EAAe,iBAAiB,QAASE,GAAK,CACxCD,GACFC,EAAE,gBAAA,CAEN,CAAC,EAEDF,EAAe,iBAAiB,YAAaE,GAAK,CAC5CD,GACFC,EAAE,gBAAA,CAEN,CAAC,EAEDF,EAAe,iBAAiB,UAAWE,GAAK,CAC1CD,GACFC,EAAE,gBAAA,CAEN,CAAC,EAEDF,EAAe,iBAAiB,QAASE,GAAK,CACxCD,GACFC,EAAE,gBAAA,CAEN,CAAC,EAEDZ,EAAQ,YAAYU,CAAc,EAE3BV,CACT,CAEA,OAAO,MAAMmB,EAAyC,OACpD,MAAMT,EAAiBS,EAAK,cAAc,uBAAuB,EAC3DhB,EAAkBgB,EAAK,cAAc,sBAAsB,EACjE,IAAIC,EAAU,GAEd,GAAIV,EAAgB,CAClB,MAAMM,IAAOD,EAAAL,EAAe,cAAf,YAAAK,EAA4B,SAAU,GAC/CC,GAAQA,IAASzB,IACnB6B,EAAUJ,EAEd,CAKA,IAAIrB,EAAuC,GAC3C,MAAM0B,EAAYF,EAAK,aAAa,YAAY,EAChD,GAAIE,EACF,GAAI,CACF1B,EAAQ,KAAK,MAAM0B,CAAS,CAC9B,MAAQ,CACN1B,EAAQ0B,CACV,SACSlB,EAAiB,CAC1B,MAAMmB,EAAanB,EAAgB,cAAc,cAAc,EAC3DmB,EACF3B,EAAQ,CAAE,IAAK2B,EAAW,SAAA,EAE1B3B,EAAQ,CAAE,IAAKQ,EAAgB,SAAA,CAEnC,CAEA,MAAMoB,EAAeJ,EAAK,aAAa,oBAAoB,GAAK,OAC1DK,EAAML,EAAK,aAAa,gBAAgB,GAAK,OAEnD,MAAO,CACL,MAAAxB,EACA,QAAAyB,EACA,aAAAG,EACA,IAAAC,CAAA,CAEJ,CAAA,CAtQA,OAAAC,EADI3B,EACG,WAAW,aAClB2B,EAFI3B,EAEG,UAAU,OACjB2B,EAHI3B,EAGG,YAAY,wBAuQdA,CACT,OAAS4B,EAAO,CACd,eAAQ,MAAM,8BAA+BA,CAAK,EAC3C,IACT,CACF"}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
var v = Object.defineProperty;
|
|
3
|
-
var E = (o, l, c) => l in o ? v(o, l, { enumerable: !0, configurable: !0, writable: !0, value: c }) : o[l] = c;
|
|
4
|
-
var b = (o, l, c) => E(o, typeof l != "symbol" ? l + "" : l, c);
|
|
5
|
-
const f = "Click to edit caption...";
|
|
6
|
-
function w(o) {
|
|
7
|
-
if (!o) return null;
|
|
8
|
-
if (typeof o == "string")
|
|
9
|
-
try {
|
|
10
|
-
return JSON.parse(o);
|
|
11
|
-
} catch {
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
14
|
-
return o;
|
|
15
|
-
}
|
|
16
|
-
function C(o) {
|
|
17
|
-
const l = w(o);
|
|
18
|
-
return (l == null ? void 0 : l.sdk) || "";
|
|
19
|
-
}
|
|
20
|
-
const k = async () => {
|
|
21
|
-
if (typeof window > "u") return null;
|
|
22
|
-
try {
|
|
23
|
-
const l = (await import("./quill-CywiOvqz.js")).default.import("blots/block/embed");
|
|
24
|
-
class c extends l {
|
|
25
|
-
static create(n) {
|
|
26
|
-
const m = C(n.embed), a = document.createElement("div");
|
|
27
|
-
a.className = "ql-cms-video-wrapper", a.contentEditable = "false", a.setAttribute("data-embed", typeof n.embed == "string" ? n.embed : JSON.stringify(n.embed)), n.thumbnailUrl && a.setAttribute("data-thumbnail-url", n.thumbnailUrl), n.url && a.setAttribute("data-video-url", n.url);
|
|
28
|
-
const y = /class=["']vsly-player["']/.test(m), p = !y && !!n.url, r = document.createElement("div");
|
|
29
|
-
if (r.className = "ql-cms-video-player", r.style.position = "relative", r.style.width = "100%", r.style.background = "#ddd", r.style.overflow = "hidden", y || (r.style.paddingTop = "56.25%"), m)
|
|
30
|
-
r.innerHTML = m;
|
|
31
|
-
else if (p) {
|
|
32
|
-
const t = document.createElement("video");
|
|
33
|
-
t.src = n.url, t.setAttribute("preload", "metadata"), t.setAttribute("controls", ""), t.setAttribute("muted", ""), t.setAttribute("playsinline", ""), t.style.position = "absolute", t.style.inset = "0", t.style.width = "100%", t.style.height = "100%", t.style.objectFit = "cover", r.appendChild(t);
|
|
34
|
-
}
|
|
35
|
-
const g = typeof window < "u" && !!window.__WAZUI_EDITOR_PREVIEW__;
|
|
36
|
-
if (n.thumbnailUrl && g && y) {
|
|
37
|
-
const t = document.createElement("div");
|
|
38
|
-
t.className = "ql-cms-video-preview", t.style.position = "absolute", t.style.inset = "0", t.style.backgroundImage = `url(${n.thumbnailUrl})`, t.style.backgroundSize = "cover", t.style.backgroundPosition = "center", t.style.display = "flex", t.style.alignItems = "center", t.style.justifyContent = "center", t.style.pointerEvents = "none";
|
|
39
|
-
const i = document.createElement("div");
|
|
40
|
-
i.style.width = "64px", i.style.height = "64px", i.style.borderRadius = "50%", i.style.background = "rgba(0,0,0,0.6)", i.style.display = "flex", i.style.alignItems = "center", i.style.justifyContent = "center";
|
|
41
|
-
const s = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
|
42
|
-
s.setAttribute("width", "24"), s.setAttribute("height", "24"), s.setAttribute("viewBox", "0 0 24 24"), s.setAttribute("fill", "white");
|
|
43
|
-
const u = document.createElementNS("http://www.w3.org/2000/svg", "path");
|
|
44
|
-
u.setAttribute("d", "M8 5v14l11-7z"), s.appendChild(u), i.appendChild(s), t.appendChild(i), r.appendChild(t);
|
|
45
|
-
}
|
|
46
|
-
a.appendChild(r);
|
|
47
|
-
const e = document.createElement("div");
|
|
48
|
-
e.className = "ql-cms-video-caption", e.textContent = n.caption || f, e.style.fontStyle = "italic", e.style.color = n.caption ? "#666" : "#999", e.style.fontSize = "14px", e.style.marginTop = "8px", e.style.textAlign = "center", e.style.minHeight = "1.2em", e.style.outline = "none", e.style.padding = "4px", e.style.borderRadius = "4px", e.style.cursor = "text", e.contentEditable = "false", e.setAttribute("data-original-caption", n.caption || "");
|
|
49
|
-
let d = !1;
|
|
50
|
-
return e.addEventListener("click", (t) => {
|
|
51
|
-
t.stopPropagation(), t.preventDefault(), !d && (d = !0, e.setAttribute("data-editing", "true"), e.contentEditable = "true", e.textContent === f && (e.textContent = "", e.style.color = "#666"), setTimeout(() => {
|
|
52
|
-
e.focus();
|
|
53
|
-
const i = document.createRange(), s = window.getSelection();
|
|
54
|
-
i.selectNodeContents(e), i.collapse(!1), s == null || s.removeAllRanges(), s == null || s.addRange(i);
|
|
55
|
-
}, 0));
|
|
56
|
-
}), e.addEventListener("blur", () => {
|
|
57
|
-
setTimeout(() => {
|
|
58
|
-
var t;
|
|
59
|
-
e.isConnected && d && (d = !1, e.removeAttribute("data-editing"), e.contentEditable = "false", (t = e.textContent) != null && t.trim() || (e.textContent = f, e.style.color = "#999"));
|
|
60
|
-
}, 10);
|
|
61
|
-
}), e.addEventListener("keydown", (t) => {
|
|
62
|
-
var i;
|
|
63
|
-
if (d) {
|
|
64
|
-
if (t.key === "Enter" || t.key === "Escape") {
|
|
65
|
-
t.stopPropagation(), t.preventDefault(), e.blur();
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
if (t.key === "Backspace") {
|
|
69
|
-
const s = ((i = e.textContent) == null ? void 0 : i.trim()) || "";
|
|
70
|
-
if (!s || s === f) {
|
|
71
|
-
t.stopPropagation(), t.preventDefault();
|
|
72
|
-
const u = e.closest(".ql-cms-video-wrapper");
|
|
73
|
-
u && u.parentNode && (u.parentNode.removeChild(u), setTimeout(() => {
|
|
74
|
-
const h = document.querySelector(".ql-editor");
|
|
75
|
-
h && h.focus();
|
|
76
|
-
}, 10));
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
t.stopPropagation();
|
|
81
|
-
}
|
|
82
|
-
}), e.addEventListener("input", (t) => {
|
|
83
|
-
d && t.stopPropagation();
|
|
84
|
-
}), e.addEventListener("mousedown", (t) => {
|
|
85
|
-
d && t.stopPropagation();
|
|
86
|
-
}), e.addEventListener("mouseup", (t) => {
|
|
87
|
-
d && t.stopPropagation();
|
|
88
|
-
}), e.addEventListener("paste", (t) => {
|
|
89
|
-
d && t.stopPropagation();
|
|
90
|
-
}), a.appendChild(e), a;
|
|
91
|
-
}
|
|
92
|
-
static value(n) {
|
|
93
|
-
var d;
|
|
94
|
-
const m = n.querySelector(".ql-cms-video-caption"), a = n.querySelector(".ql-cms-video-player");
|
|
95
|
-
let y = "";
|
|
96
|
-
if (m) {
|
|
97
|
-
const t = ((d = m.textContent) == null ? void 0 : d.trim()) || "";
|
|
98
|
-
t && t !== f && (y = t);
|
|
99
|
-
}
|
|
100
|
-
let p = "";
|
|
101
|
-
const r = n.getAttribute("data-embed");
|
|
102
|
-
if (r)
|
|
103
|
-
try {
|
|
104
|
-
p = JSON.parse(r);
|
|
105
|
-
} catch {
|
|
106
|
-
p = r;
|
|
107
|
-
}
|
|
108
|
-
else if (a) {
|
|
109
|
-
const t = a.querySelector(".vsly-player");
|
|
110
|
-
t ? p = { sdk: t.outerHTML } : p = { sdk: a.innerHTML };
|
|
111
|
-
}
|
|
112
|
-
const g = n.getAttribute("data-thumbnail-url") || void 0, e = n.getAttribute("data-video-url") || void 0;
|
|
113
|
-
return {
|
|
114
|
-
embed: p,
|
|
115
|
-
caption: y,
|
|
116
|
-
thumbnailUrl: g,
|
|
117
|
-
url: e
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return b(c, "blotName", "cms-video"), b(c, "tagName", "div"), b(c, "className", "ql-cms-video-wrapper"), c;
|
|
122
|
-
} catch (o) {
|
|
123
|
-
return console.error("Failed to create VideoBlot:", o), null;
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
|
-
export {
|
|
127
|
-
k as default
|
|
128
|
-
};
|
|
129
|
-
//# sourceMappingURL=VideoBlot-c7IiGkvp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VideoBlot-c7IiGkvp.js","sources":["../src/components/wazui/WazUiWysiwygInput/blots/VideoBlot.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { VideoBlotReturnValue, VideoBlotValue, QuillBlockEmbedStatic } from './types';\n\nconst PLACEHOLDER_CAPTION = 'Click to edit caption...';\n\nfunction parseEmbed(value: VideoBlotValue['embed']): { sdk?: string | null; [key: string]: unknown } | null {\n if (!value) return null;\n if (typeof value === 'string') {\n try {\n return JSON.parse(value) as { sdk?: string | null; [key: string]: unknown };\n } catch {\n return null;\n }\n }\n return value;\n}\n\nfunction getSdkHtml(value: VideoBlotValue['embed']): string {\n const embed = parseEmbed(value);\n return embed?.sdk || '';\n}\n\nconst createVideoBlot = async () => {\n if (typeof window === 'undefined') return null;\n\n try {\n const Quill = (await import('quill')).default;\n const BlockEmbed = Quill.import('blots/block/embed') as QuillBlockEmbedStatic;\n\n class VideoBlot extends (BlockEmbed as any) {\n static blotName = 'cms-video';\n static tagName = 'div';\n static className = 'ql-cms-video-wrapper';\n\n static create(value: VideoBlotValue): HTMLElement {\n const sdkHtml = getSdkHtml(value.embed);\n\n // Wrap container + caption so Quill treats them as one block\n const wrapper = document.createElement('div');\n wrapper.className = 'ql-cms-video-wrapper';\n wrapper.contentEditable = 'false';\n wrapper.setAttribute('data-embed', typeof value.embed === 'string' ? value.embed : JSON.stringify(value.embed));\n if (value.thumbnailUrl) {\n wrapper.setAttribute('data-thumbnail-url', value.thumbnailUrl);\n }\n if (value.url) {\n wrapper.setAttribute('data-video-url', value.url);\n }\n\n const isViouslySdk = /class=[\"']vsly-player[\"']/.test(sdkHtml);\n const isCmsVideo = !isViouslySdk && !!value.url;\n\n // Player container: render the Viously SDK markup from the API\n const playerContainer = document.createElement('div');\n playerContainer.className = 'ql-cms-video-player';\n playerContainer.style.position = 'relative';\n playerContainer.style.width = '100%';\n playerContainer.style.background = '#ddd';\n playerContainer.style.overflow = 'hidden';\n // Only force a 16:9 aspect ratio when the SDK markup doesn't already\n // define its own (the Viously SDK includes its own padding-top wrapper).\n if (!isViouslySdk) {\n playerContainer.style.paddingTop = '56.25%';\n }\n\n if (sdkHtml) {\n playerContainer.innerHTML = sdkHtml;\n } else if (isCmsVideo) {\n // CMS uploaded videos: render a plain <video> element using the direct URL.\n const video = document.createElement('video');\n video.src = value.url as string;\n video.setAttribute('preload', 'metadata');\n video.setAttribute('controls', '');\n video.setAttribute('muted', '');\n video.setAttribute('playsinline', '');\n video.style.position = 'absolute';\n video.style.inset = '0';\n video.style.width = '100%';\n video.style.height = '100%';\n video.style.objectFit = 'cover';\n playerContainer.appendChild(video);\n }\n\n // Only show the thumbnail preview inside the actual editor and only for\n // Viously, because the Viously SDK script doesn't run there. CMS videos\n // already show a frame via the <video> element itself.\n const isEditor =\n typeof window !== 'undefined' &&\n !!(window as unknown as Record<string, unknown>).__WAZUI_EDITOR_PREVIEW__;\n\n if (value.thumbnailUrl && isEditor && isViouslySdk) {\n const preview = document.createElement('div');\n preview.className = 'ql-cms-video-preview';\n preview.style.position = 'absolute';\n preview.style.inset = '0';\n preview.style.backgroundImage = `url(${value.thumbnailUrl})`;\n preview.style.backgroundSize = 'cover';\n preview.style.backgroundPosition = 'center';\n preview.style.display = 'flex';\n preview.style.alignItems = 'center';\n preview.style.justifyContent = 'center';\n preview.style.pointerEvents = 'none';\n\n const playIcon = document.createElement('div');\n playIcon.style.width = '64px';\n playIcon.style.height = '64px';\n playIcon.style.borderRadius = '50%';\n playIcon.style.background = 'rgba(0,0,0,0.6)';\n playIcon.style.display = 'flex';\n playIcon.style.alignItems = 'center';\n playIcon.style.justifyContent = 'center';\n\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('width', '24');\n svg.setAttribute('height', '24');\n svg.setAttribute('viewBox', '0 0 24 24');\n svg.setAttribute('fill', 'white');\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n path.setAttribute('d', 'M8 5v14l11-7z');\n svg.appendChild(path);\n playIcon.appendChild(svg);\n\n preview.appendChild(playIcon);\n playerContainer.appendChild(preview);\n }\n\n wrapper.appendChild(playerContainer);\n\n // Create caption element\n const captionElement = document.createElement('div');\n captionElement.className = 'ql-cms-video-caption';\n captionElement.textContent = value.caption || PLACEHOLDER_CAPTION;\n captionElement.style.fontStyle = 'italic';\n captionElement.style.color = value.caption ? '#666' : '#999';\n captionElement.style.fontSize = '14px';\n captionElement.style.marginTop = '8px';\n captionElement.style.textAlign = 'center';\n captionElement.style.minHeight = '1.2em';\n captionElement.style.outline = 'none';\n captionElement.style.padding = '4px';\n captionElement.style.borderRadius = '4px';\n captionElement.style.cursor = 'text';\n captionElement.contentEditable = 'false';\n captionElement.setAttribute('data-original-caption', value.caption || '');\n\n let isEditingCaption = false;\n\n captionElement.addEventListener('click', e => {\n e.stopPropagation();\n e.preventDefault();\n\n if (isEditingCaption) return;\n\n isEditingCaption = true;\n captionElement.setAttribute('data-editing', 'true');\n captionElement.contentEditable = 'true';\n\n if (captionElement.textContent === PLACEHOLDER_CAPTION) {\n captionElement.textContent = '';\n captionElement.style.color = '#666';\n }\n\n setTimeout(() => {\n captionElement.focus();\n const range = document.createRange();\n const selection = window.getSelection();\n range.selectNodeContents(captionElement);\n range.collapse(false);\n selection?.removeAllRanges();\n selection?.addRange(range);\n }, 0);\n });\n\n captionElement.addEventListener('blur', () => {\n setTimeout(() => {\n if (!captionElement.isConnected) return;\n if (isEditingCaption) {\n isEditingCaption = false;\n captionElement.removeAttribute('data-editing');\n captionElement.contentEditable = 'false';\n const text = captionElement.textContent?.trim() || '';\n if (!text) {\n captionElement.textContent = PLACEHOLDER_CAPTION;\n captionElement.style.color = '#999';\n }\n }\n }, 10);\n });\n\n captionElement.addEventListener('keydown', e => {\n if (!isEditingCaption) return;\n\n if (e.key === 'Enter' || e.key === 'Escape') {\n e.stopPropagation();\n e.preventDefault();\n captionElement.blur();\n return;\n }\n\n if (e.key === 'Backspace') {\n const text = captionElement.textContent?.trim() || '';\n if (!text || text === PLACEHOLDER_CAPTION) {\n e.stopPropagation();\n e.preventDefault();\n\n const videoContainer = captionElement.closest('.ql-cms-video-wrapper');\n if (videoContainer && videoContainer.parentNode) {\n videoContainer.parentNode.removeChild(videoContainer);\n setTimeout(() => {\n const quillEditor = document.querySelector('.ql-editor');\n if (quillEditor) {\n (quillEditor as HTMLElement).focus();\n }\n }, 10);\n }\n return;\n }\n }\n\n e.stopPropagation();\n });\n\n captionElement.addEventListener('input', e => {\n if (isEditingCaption) {\n e.stopPropagation();\n }\n });\n\n captionElement.addEventListener('mousedown', e => {\n if (isEditingCaption) {\n e.stopPropagation();\n }\n });\n\n captionElement.addEventListener('mouseup', e => {\n if (isEditingCaption) {\n e.stopPropagation();\n }\n });\n\n captionElement.addEventListener('paste', e => {\n if (isEditingCaption) {\n e.stopPropagation();\n }\n });\n\n wrapper.appendChild(captionElement);\n\n return wrapper;\n }\n\n static value(node: HTMLElement): VideoBlotReturnValue {\n const captionElement = node.querySelector('.ql-cms-video-caption');\n const playerContainer = node.querySelector('.ql-cms-video-player');\n let caption = '';\n\n if (captionElement) {\n const text = captionElement.textContent?.trim() || '';\n if (text && text !== PLACEHOLDER_CAPTION) {\n caption = text;\n }\n }\n\n // Try to recover the original embed data from the rendered SDK markup.\n // If the wrapper was created from raw HTML (e.g. pasted), fall back to\n // serialising the current player container so the content is preserved.\n let embed: VideoBlotReturnValue['embed'] = '';\n const embedData = node.getAttribute('data-embed');\n if (embedData) {\n try {\n embed = JSON.parse(embedData) as VideoBlotReturnValue['embed'];\n } catch {\n embed = embedData;\n }\n } else if (playerContainer) {\n const vslyPlayer = playerContainer.querySelector('.vsly-player');\n if (vslyPlayer) {\n embed = { sdk: vslyPlayer.outerHTML };\n } else {\n embed = { sdk: playerContainer.innerHTML };\n }\n }\n\n const thumbnailUrl = node.getAttribute('data-thumbnail-url') || undefined;\n const url = node.getAttribute('data-video-url') || undefined;\n\n return {\n embed,\n caption,\n thumbnailUrl,\n url,\n };\n }\n }\n\n return VideoBlot;\n } catch (error) {\n console.error('Failed to create VideoBlot:', error);\n return null;\n }\n};\n\nexport default createVideoBlot;\n"],"names":["PLACEHOLDER_CAPTION","parseEmbed","value","getSdkHtml","embed","createVideoBlot","BlockEmbed","VideoBlot","sdkHtml","wrapper","isViouslySdk","isCmsVideo","playerContainer","video","isEditor","preview","playIcon","svg","path","captionElement","isEditingCaption","e","range","selection","_a","text","videoContainer","quillEditor","node","caption","embedData","vslyPlayer","thumbnailUrl","url","__publicField","error"],"mappings":"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"}
|