From 3d88fc130530c87a14ddf6ae78c28a3dbcd54b5c Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Wed, 01 Oct 2025 04:13:11 +0000
Subject: [PATCH] Video Block built

---
 build/video/index.asset.php     |    1 
 build/video/index.js            |    1 
 build/video/index.css           |    1 
 build/video/index-rtl.css       |    1 
 build/video/style-index.css     |    1 
 build/video/block.json          |   75 +++++++++++++++++++++++++++++++++++++
 build/video/style-index-rtl.css |    1 
 7 files changed, 81 insertions(+), 0 deletions(-)

diff --git a/build/video/block.json b/build/video/block.json
new file mode 100644
index 0000000..7a88d90
--- /dev/null
+++ b/build/video/block.json
@@ -0,0 +1,75 @@
+{
+  "$schema": "https://schemas.wp.org/trunk/block.json",
+  "apiVersion": 3,
+  "name": "jvb/video-cover",
+  "version": "1.0.0",
+  "title": "Video Cover",
+  "category": "jvb",
+  "icon": "video-alt3",
+  "description": "Self-hosted video cover with poster and multiple format support",
+  "supports": {
+    "html": false,
+    "align": [
+      "wide",
+      "full"
+    ],
+    "spacing": {
+      "margin": true,
+      "padding": true
+    }
+  },
+  "attributes": {
+    "posterId": {
+      "type": "number",
+      "default": 0
+    },
+    "posterUrl": {
+      "type": "string",
+      "default": ""
+    },
+    "videoSources": {
+      "type": "array",
+      "default": [],
+      "items": {
+        "type": "object",
+        "properties": {
+          "id": {
+            "type": "number"
+          },
+          "url": {
+            "type": "string"
+          },
+          "mime": {
+            "type": "string"
+          }
+        }
+      }
+    },
+    "mobileSources": {
+      "type": "array",
+      "default": [],
+      "items": {
+        "type": "object",
+        "properties": {
+          "id": {
+            "type": "number"
+          },
+          "url": {
+            "type": "string"
+          },
+          "mime": {
+            "type": "string"
+          }
+        }
+      }
+    },
+    "fadeEffect": {
+      "type": "boolean",
+      "default": false
+    }
+  },
+  "textdomain": "jvb",
+  "editorScript": "file:./index.js",
+  "editorStyle": "file:./index.css",
+  "style": "file:./style-index.css"
+}
\ No newline at end of file
diff --git a/build/video/index-rtl.css b/build/video/index-rtl.css
new file mode 100644
index 0000000..76b8ed9
--- /dev/null
+++ b/build/video/index-rtl.css
@@ -0,0 +1 @@
+.video-cover-editor{background:#f0f0f0;border:2px dashed #ccc;border-radius:4px;min-height:200px}.video-cover-editor .video-cover-preview{position:relative;width:100%}.video-cover-editor .video-cover-preview img{display:block;height:auto;width:100%}.video-cover-editor .video-cover-preview .video-overlay{background:rgba(0,0,0,.7);bottom:0;color:#fff;font-size:14px;right:0;padding:10px;position:absolute;left:0}.video-cover-editor .video-cover-preview .video-overlay p{margin:0}.video-cover-editor .video-cover-placeholder{align-items:center;color:#666;display:flex;font-size:16px;justify-content:center;min-height:200px}.video-source-list{list-style:none;margin:10px 0;padding:0}.video-source-list .video-source-item{align-items:center;background:#f5f5f5;border-radius:4px;display:flex;justify-content:space-between;margin-bottom:5px;padding:8px 12px}.video-source-list .video-source-item .video-source-mime{font-family:monospace;font-size:13px}
diff --git a/build/video/index.asset.php b/build/video/index.asset.php
new file mode 100644
index 0000000..f806b91
--- /dev/null
+++ b/build/video/index.asset.php
@@ -0,0 +1 @@
+<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => '58cb97ca090cbaa7a151');
diff --git a/build/video/index.css b/build/video/index.css
new file mode 100644
index 0000000..b9e9e4d
--- /dev/null
+++ b/build/video/index.css
@@ -0,0 +1 @@
+.video-cover-editor{background:#f0f0f0;border:2px dashed #ccc;border-radius:4px;min-height:200px}.video-cover-editor .video-cover-preview{position:relative;width:100%}.video-cover-editor .video-cover-preview img{display:block;height:auto;width:100%}.video-cover-editor .video-cover-preview .video-overlay{background:rgba(0,0,0,.7);bottom:0;color:#fff;font-size:14px;left:0;padding:10px;position:absolute;right:0}.video-cover-editor .video-cover-preview .video-overlay p{margin:0}.video-cover-editor .video-cover-placeholder{align-items:center;color:#666;display:flex;font-size:16px;justify-content:center;min-height:200px}.video-source-list{list-style:none;margin:10px 0;padding:0}.video-source-list .video-source-item{align-items:center;background:#f5f5f5;border-radius:4px;display:flex;justify-content:space-between;margin-bottom:5px;padding:8px 12px}.video-source-list .video-source-item .video-source-mime{font-family:monospace;font-size:13px}
diff --git a/build/video/index.js b/build/video/index.js
new file mode 100644
index 0000000..3b085c1
--- /dev/null
+++ b/build/video/index.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,o={128:()=>{const e=window.wp.blocks,o=window.wp.i18n,s=window.wp.blockEditor,i=window.wp.components,r=window.ReactJSXRuntime,l=["video/mp4","video/webm","video/ogg","video/ogv"],n=JSON.parse('{"UU":"jvb/video-cover"}');(0,e.registerBlockType)(n.UU,{edit:function({attributes:e,setAttributes:n}){const{posterId:d,posterUrl:t,videoSources:c,mobileSources:a,fadeEffect:v}=e,p=(0,s.useBlockProps)({className:"video-cover-editor"}),m=(e,o=!1)=>{const s={id:e.id,url:e.url,mime:e.mime};o?a.some((o=>o.mime===e.mime))||n({mobileSources:[...a,s]}):c.some((o=>o.mime===e.mime))||n({videoSources:[...c,s]})},j=(e,s=!1)=>0===e.length?null:(0,r.jsx)("ul",{className:"video-source-list",children:e.map(((e,l)=>(0,r.jsxs)("li",{className:"video-source-item",children:[(0,r.jsx)("span",{className:"video-source-mime",children:e.mime}),(0,r.jsx)(i.Button,{isDestructive:!0,isSmall:!0,onClick:()=>((e,o=!1)=>{if(o){const o=[...a];o.splice(e,1),n({mobileSources:o})}else{const o=[...c];o.splice(e,1),n({videoSources:o})}})(l,s),children:(0,o.__)("Remove","jvb")})]},l)))});return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.InspectorControls,{children:(0,r.jsxs)(i.PanelBody,{title:(0,o.__)("Video Settings","jvb"),initialOpen:!0,children:[(0,r.jsx)(i.BaseControl,{label:(0,o.__)("Poster Image","jvb"),help:(0,o.__)("Image shown while video loads","jvb"),children:(0,r.jsx)(s.MediaUploadCheck,{children:(0,r.jsx)(s.MediaUpload,{onSelect:e=>{n({posterId:e.id,posterUrl:e.url})},allowedTypes:["image"],value:d,render:({open:e})=>(0,r.jsxs)(r.Fragment,{children:[t&&(0,r.jsx)("img",{src:t,alt:(0,o.__)("Poster preview","jvb"),style:{maxWidth:"100%",marginBottom:"10px"}}),(0,r.jsx)(i.Button,{onClick:e,variant:t?"secondary":"primary",children:t?(0,o.__)("Change Poster","jvb"):(0,o.__)("Select Poster","jvb")}),t&&(0,r.jsx)(i.Button,{isDestructive:!0,onClick:()=>n({posterId:0,posterUrl:""}),style:{marginLeft:"10px"},children:(0,o.__)("Remove","jvb")})]})})})}),(0,r.jsxs)(i.BaseControl,{label:(0,o.__)("Desktop Video Sources","jvb"),help:(0,o.__)("Add multiple formats for better browser support","jvb"),children:[j(c,!1),(0,r.jsx)(s.MediaUploadCheck,{children:(0,r.jsx)(s.MediaUpload,{onSelect:e=>m(e,!1),allowedTypes:l,render:({open:e})=>(0,r.jsx)(i.Button,{onClick:e,variant:"secondary",children:(0,o.__)("Add Desktop Video","jvb")})})})]}),(0,r.jsxs)(i.BaseControl,{label:(0,o.__)("Mobile Video Sources (Optional)","jvb"),help:(0,o.__)("Smaller videos for mobile devices","jvb"),children:[j(a,!0),(0,r.jsx)(s.MediaUploadCheck,{children:(0,r.jsx)(s.MediaUpload,{onSelect:e=>m(e,!0),allowedTypes:l,render:({open:e})=>(0,r.jsx)(i.Button,{onClick:e,variant:"secondary",children:(0,o.__)("Add Mobile Video","jvb")})})})]}),(0,r.jsx)(i.ToggleControl,{label:(0,o.__)("Fade Effect","jvb"),help:(0,o.__)("Add fade class to video element","jvb"),checked:v,onChange:e=>n({fadeEffect:e})})]})}),(0,r.jsx)("div",{...p,children:t?(0,r.jsxs)("div",{className:"video-cover-preview",children:[(0,r.jsx)("img",{src:t,alt:(0,o.__)("Video poster","jvb")}),(0,r.jsx)("div",{className:"video-overlay",children:(0,r.jsxs)("p",{children:[c.length," ",(0,o.__)("desktop source(s)","jvb"),a.length>0&&`, ${a.length} ${(0,o.__)("mobile source(s)","jvb")}`]})})]}):(0,r.jsx)("div",{className:"video-cover-placeholder",children:(0,r.jsx)("p",{children:(0,o.__)("Configure video sources in the sidebar →","jvb")})})}),(0,r.jsx)("div",{className:"inner-blocks",children:(0,r.jsx)(s.InnerBlocks,{})})]})},save:()=>null})}},s={};function i(e){var r=s[e];if(void 0!==r)return r.exports;var l=s[e]={exports:{}};return o[e](l,l.exports,i),l.exports}i.m=o,e=[],i.O=(o,s,r,l)=>{if(!s){var n=1/0;for(a=0;a<e.length;a++){for(var[s,r,l]=e[a],d=!0,t=0;t<s.length;t++)(!1&l||n>=l)&&Object.keys(i.O).every((e=>i.O[e](s[t])))?s.splice(t--,1):(d=!1,l<n&&(n=l));if(d){e.splice(a--,1);var c=r();void 0!==c&&(o=c)}}return o}l=l||0;for(var a=e.length;a>0&&e[a-1][2]>l;a--)e[a]=e[a-1];e[a]=[s,r,l]},i.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),(()=>{var e={205:0,601:0};i.O.j=o=>0===e[o];var o=(o,s)=>{var r,l,[n,d,t]=s,c=0;if(n.some((o=>0!==e[o]))){for(r in d)i.o(d,r)&&(i.m[r]=d[r]);if(t)var a=t(i)}for(o&&o(s);c<n.length;c++)l=n[c],i.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return i.O(a)},s=globalThis.webpackChunkjvb=globalThis.webpackChunkjvb||[];s.forEach(o.bind(null,0)),s.push=o.bind(null,s.push.bind(s))})();var r=i.O(void 0,[601],(()=>i(128)));r=i.O(r)})();
\ No newline at end of file
diff --git a/build/video/style-index-rtl.css b/build/video/style-index-rtl.css
new file mode 100644
index 0000000..668a8e1
--- /dev/null
+++ b/build/video/style-index-rtl.css
@@ -0,0 +1 @@
+.video-cover{display:block;height:auto;-o-object-fit:cover;object-fit:cover;width:100%}.video-cover.fade{animation:fadeIn 1s ease-in}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.video-cover video{filter:grayscale(100%) contrast(1);flex:1 0 100%;height:105vh;right:50%;max-width:none;mix-blend-mode:multiply;opacity:.85;pointer-events:none;position:absolute;top:0;transform:translate(40%,-10%);width:300vw!important}
diff --git a/build/video/style-index.css b/build/video/style-index.css
new file mode 100644
index 0000000..01411b5
--- /dev/null
+++ b/build/video/style-index.css
@@ -0,0 +1 @@
+.video-cover{display:block;height:auto;-o-object-fit:cover;object-fit:cover;width:100%}.video-cover.fade{animation:fadeIn 1s ease-in}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.video-cover video{filter:grayscale(100%) contrast(1);flex:1 0 100%;height:105vh;left:50%;max-width:none;mix-blend-mode:multiply;opacity:.85;pointer-events:none;position:absolute;top:0;transform:translate(-40%,-10%);width:300vw!important}

--
Gitblit v1.10.0