Jake Vanderwerf
2026-09-06 3e4e3db64b366028845cfd610c5b17f26bd062ee
=Added conditional logic. Skeletoned a block to select a particular meta for display.
14 files renamed
19 files added
1 files deleted
11 files modified
535 ■■■■■ changed files
build/_meta/fields.asset.php 2 ●●●●● patch | view | raw | blame | history
build/_meta/fields.js 2 ●●●●● patch | view | raw | blame | history
build/meta/block.json 26 ●●●●● patch | view | raw | blame | history
build/meta/index-rtl.css 1 ●●●●● patch | view | raw | blame | history
build/meta/index.asset.php 1 ●●●●● patch | view | raw | blame | history
build/meta/index.css 1 ●●●●● patch | view | raw | blame | history
build/meta/index.js 1 ●●●●● patch | view | raw | blame | history
build/meta/render.php 9 ●●●●● patch | view | raw | blame | history
build/meta/style-index-rtl.css 1 ●●●●● patch | view | raw | blame | history
build/meta/style-index.css 1 ●●●●● patch | view | raw | blame | history
build/meta/view.asset.php 1 ●●●●● patch | view | raw | blame | history
build/meta/view.js patch | view | raw | blame | history
build/summary/index.asset.php 2 ●●●●● patch | view | raw | blame | history
build/summary/index.js 2 ●●●●● patch | view | raw | blame | history
inc/blocks/RegisterBlocks.php 7 ●●●●● patch | view | raw | blame | history
inc/blocks/_setup.php 7 ●●●●● patch | view | raw | blame | history
inc/registrar/helpers/AddCustomFields.php 3 ●●●●● patch | view | raw | blame | history
inc/registrar/helpers/MakeCalendarType.php 19 ●●●●● patch | view | raw | blame | history
package-lock.json 285 ●●●●● patch | view | raw | blame | history
package.json 1 ●●●●● patch | view | raw | blame | history
src/_meta/Fields.js patch | view | raw | blame | history
src/_meta/Section.js 1 ●●●●● patch | view | raw | blame | history
src/_meta/SidePanel.js patch | view | raw | blame | history
src/_meta/fields/checkbox-field.js patch | view | raw | blame | history
src/_meta/fields/date-field.js patch | view | raw | blame | history
src/_meta/fields/datetime-field.js 2 ●●●●● patch | view | raw | blame | history
src/_meta/fields/location-field.js patch | view | raw | blame | history
src/_meta/fields/repeater-field.js patch | view | raw | blame | history
src/_meta/fields/select-field.js patch | view | raw | blame | history
src/_meta/fields/selector-field.js 16 ●●●●● patch | view | raw | blame | history
src/_meta/fields/switch-field.js patch | view | raw | blame | history
src/_meta/fields/text-field.js patch | view | raw | blame | history
src/_meta/fields/time-field.js 19 ●●●●● patch | view | raw | blame | history
src/_meta/fields/upload-field.js patch | view | raw | blame | history
src/_meta/index.js patch | view | raw | blame | history
src/editor-fields/fields/time-field.js 20 ●●●●● patch | view | raw | blame | history
src/meta/block.json 23 ●●●●● patch | view | raw | blame | history
src/meta/edit.js 38 ●●●●● patch | view | raw | blame | history
src/meta/editor.scss patch | view | raw | blame | history
src/meta/index.js 33 ●●●●● patch | view | raw | blame | history
src/meta/index.php patch | view | raw | blame | history
src/meta/render.php 9 ●●●●● patch | view | raw | blame | history
src/meta/style.scss patch | view | raw | blame | history
src/meta/view.js patch | view | raw | blame | history
webpack.config.js 2 ●●●●● patch | view | raw | blame | history
build/_meta/fields.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array('react', 'react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-media-utils', 'wp-plugins', 'wp-url'), 'version' => 'db98e6b71865d1cce76d');
<?php return array('dependencies' => array('react', 'react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-media-utils', 'wp-plugins', 'wp-url'), 'version' => '6043ce2edcd946554582');
build/_meta/fields.js
@@ -1 +1 @@
(()=>{"use strict";const e={n:l=>{const t=l&&l.__esModule?()=>l.default:()=>l;return e.d(t,{a:t}),t},d:(l,t)=>{for(var n in t)e.o(t,n)&&!e.o(l,n)&&Object.defineProperty(l,n,{enumerable:!0,get:t[n]})},o:(e,l)=>Object.hasOwn(e,l)},l=window.wp.plugins,t=(window.wp.i18n,window.wp.compose),n=window.wp.data,a=window.wp.editor,i=window.wp.coreData,s=window.wp.components,o=window.ReactJSXRuntime,r={text:"text",email:"email",tel:"tel",url:"url",number:"number"},d=({field:e,value:l,onChange:t})=>"textarea"===e.type?(0,o.jsx)(s.TextareaControl,{label:e.label,help:e.description,value:l??"",onChange:t,id:e.name}):(0,o.jsx)(s.TextControl,{label:e.label,help:e.description,type:r[e.type]||"text",value:l??"",onChange:t,required:e.required,id:e.name}),c=({field:e,value:l,onChange:t})=>{const n=Object.entries(e.options||{}).map(([e,l])=>({label:l,value:e}));return"radio"===e.type?(0,o.jsx)(s.RadioControl,{label:e.label,help:e.description,selected:l,options:n,onChange:t,id:e.name}):(0,o.jsx)(s.SelectControl,{label:e.label,help:e.description,value:l??"",options:[{label:"— Select —",value:""},...n],onChange:t,id:e.name})},u=({field:e,value:l,onChange:t})=>{const n=Array.isArray(l)?l:[];return(0,o.jsxs)("fieldset",{id:e.name,children:[(0,o.jsx)("legend",{className:"jvb-field-label",children:e.label}),Object.entries(e.options||{}).map(([e,l])=>(0,o.jsx)(s.CheckboxControl,{label:l,checked:n.includes(e),onChange:l=>((e,l)=>{t(l?[...n,e]:n.filter(l=>l!==e))})(e,l)},e))]})},p=window.React,m=e=>{if(e.description&&0!==e.description.length)return(0,o.jsx)("p",{className:"hint",children:e.description})},h=e=>{if(e.description&&0!==e.description.length)return(0,o.jsx)("p",{className:"hint",children:e.description})},v=window.wp.element,b=(e,l,t)=>e?.includes("{{")?e.replace(/{{(.*?)}}/g,(e,t)=>{const n=l[t];return void 0===n?"":Array.isArray(n)?n.join(", "):String(n)}):e,j=window.wp.mediaUtils,x=window.wp.blockEditor,g=window.wp.apiFetch;var f=e.n(g);const w={image:"image",video:"video",document:"application",all:""},y=({id:e,onRemove:l})=>{const[t,n]=(0,v.useState)(null);(0,v.useEffect)(()=>{let l=!1;if(e)return f()({path:`/wp/v2/media/${e}`}).then(e=>!l&&n(e)).catch(()=>{}),()=>{l=!0}},[e]);const a=t?.media_details?.sizes?.thumbnail?.source_url||t?.source_url,i="image"===t?.media_type;return(0,o.jsxs)("div",{className:"jvb-upload-thumb",children:[i&&a?(0,o.jsx)("img",{src:a,alt:t?.alt_text||""}):(0,o.jsx)("div",{className:"jvb-upload-thumb-placeholder",children:t?.title?.rendered||`#${e}`}),(0,o.jsx)(s.Button,{variant:"link",isDestructive:!0,onClick:()=>l(e),children:"Remove"})]})},C=window.wp.url,k=e=>e.subtype||e.type,S=(e,l,t)=>"post"===l?{title:t,status:"publish",postType:e.post_type}:{name:t},_=(e,l)=>"user"===l?e.name:e.title?.rendered??e.title??e.name,A={text:d,email:d,tel:d,url:d,number:d,textarea:d,select:c,radio:c,checkbox:u,set:u,true_false:({field:e,value:l,onChange:t})=>(0,o.jsx)(s.ToggleControl,{label:e.label,help:e.description,checked:!!l,onChange:t,id:e.name}),date:({field:e,value:l,onChange:t})=>{const[n,a]=(0,p.useState)(new Date);return(0,o.jsxs)("div",{className:"components-base-control",id:e.name,children:[(0,o.jsx)("label",{className:"components-base-control__label",children:e.label}),(0,o.jsx)(s.DatePicker,{currentDate:n,onChange:t,help:e.description,value:l??""}),m(e)]})},time:({field:e,value:l,onChange:t})=>{const[n,a]=(0,p.useState)(new Date);return(0,o.jsx)(s.TimePicker,{currentTime:n,onChange:t,label:e.label,help:e.description,value:l??"",is12Hour:!0,id:e.name})},datetime:({field:e,value:l,onChange:t})=>{const[n,a]=(0,p.useState)(new Date);return console.log(e),(0,o.jsxs)("div",{className:"components-base-control",id:e.name,children:[(0,o.jsx)("label",{className:"components-base-control__label",children:e.label}),(0,o.jsx)(s.DateTimePicker,{currentDate:n,onChange:t,label:e.label,help:e.description,value:l??"",is12Hour:!0}),h(e)]})},repeater:({field:e,value:l,onChange:t,meta:n})=>{const a=Array.isArray(l)?l:[],i=e.fields||{},[r,d]=(0,v.useState)(null);return(0,o.jsxs)("div",{className:"jvb-repeater-field",id:e.name,children:[(0,o.jsx)("p",{className:"jvb-field-label",children:e.label}),(0,o.jsx)(s.Panel,{children:a.map((l,c)=>(0,o.jsxs)(s.PanelBody,{title:b(e.row_label,l)||`Row ${c+1}`,initialOpen:r===c,onToggle:()=>d(r===c?null:c),children:[Object.entries(i).map(([e,i])=>(0,o.jsx)(O,{field:{...i,name:e},value:l[e],onChange:l=>((e,l,n)=>{const i=a.map((t,a)=>a===e?{...t,[l]:n}:t);t(i)})(c,e,l),meta:n},e)),(0,o.jsx)(s.Button,{variant:"link",isDestructive:!0,onClick:()=>(e=>t(a.filter((l,t)=>t!==e)))(c),children:"Remove"})]},c))}),(0,o.jsx)(s.Button,{variant:"secondary",onClick:()=>{return t([...a,(e=i,Object.fromEntries(Object.entries(e||{}).map(([e,l])=>[e,l.default??""])))]);var e},children:e.add_label||"Add Row"})]})},upload:({field:e,value:l,onChange:t})=>{const n=e.multiple||"gallery"===e.type,a=n?Array.isArray(l)?l:[]:l,i=w[e.subtype]?[w[e.subtype]]:"",r=e=>{t(n?a.filter(l=>l!==e):0)};return(0,o.jsxs)("div",{className:"jvb-upload-field",id:e.name,children:[(0,o.jsx)("p",{className:"jvb-field-label",children:e.label}),(0,o.jsx)("div",{className:n?"jvb-upload-grid":"jvb-upload-single",children:n?a.map(e=>(0,o.jsx)(y,{id:e,onRemove:r},e)):!!a&&(0,o.jsx)(y,{id:a,onRemove:r})}),(0,o.jsx)(x.MediaUploadCheck,{children:(0,o.jsx)(j.MediaUpload,{onSelect:e=>t(n?e.map(e=>e.id):e.id),allowedTypes:i,multiple:n,value:n?a:a||void 0,render:({open:l})=>(0,o.jsxs)(s.Button,{variant:"secondary",onClick:l,children:[(n?a.length:a)?"Change":"Select"," ",e.label]})})})]})},selector:({field:e,value:l,onChange:t})=>{const n=k(e),a="taxonomy"===n;console.log(e);const i=(e=>{const l=k(e);return"user"===l?e=>(0,C.addQueryArgs)("/wp/v2/users",{search:e,per_page:20}):"taxonomy"===l?l=>(0,C.addQueryArgs)(`/wp/v2/${e.taxonomy}`,{search:l,per_page:20}):l=>(0,C.addQueryArgs)("/wp/v2/search",{search:l,type:"post",subtype:e.post_type,per_page:20})})(e),r=Array.isArray(l)?l:l?l.split(","):[],[d,c]=(0,v.useState)([]),[u,p]=(0,v.useState)({}),[m,h]=(0,v.useState)({}),[b,j]=(0,v.useState)(""),[x,g]=(0,v.useState)(!1),w=b?`Not found. Create "${b}"?`:null;(0,v.useEffect)(()=>{let e=!1;if(r.length)return Promise.all(r.map(e=>f()({path:i("")+`&include=${e}`}))).then(l=>{if(e)return;const t={},a=[];l.flat().forEach(e=>{const l=_(e,n);t[l]=e.id,a.push(l)}),p(e=>({...e,...t})),c(a)}).catch(()=>{}),()=>{e=!0};c([])},[JSON.stringify(r)]);const y=(0,v.useCallback)(e=>{j(e),e?f()({path:i(e)}).then(e=>{const l={};e.forEach(e=>{l[_(e,n)]=e.id}),h(l)}).catch(()=>{}):h({})},[i,n]),A=l=>{const n=1===e.max;t(n?l[l.length-1]??0:e.max?l.slice(0,e.max):l)},N=b&&!Object.keys(m).some(e=>e.toLowerCase()===b.toLowerCase()),O=1===e.max&&d.length?[]:[...Object.keys(m),...a&&N?[w]:[]];return(0,o.jsx)(s.FormTokenField,{label:e.label,help:e.description,value:d,suggestions:O,onChange:l=>{if(l.find(e=>e===w)&&a&&!x)return g(!0),void f()({path:`/wp/v2/${e.taxonomy}`,method:"POST",data:S(e,n,b)}).then(e=>{const l=_(e,n);p(t=>({...t,[l]:e.id})),c(t=>{const n=t.filter(e=>e!==w).concat(l),a=n.map(t=>u[t]??m[t]??(t===l?e.id:void 0)).filter(e=>void 0!==e);return A(a),n})}).catch(()=>{}).finally(()=>g(!1));const t=l.filter(e=>void 0!==u[e]||void 0!==m[e]),i=t.map(e=>u[e]??m[e]);c(t),p(e=>({...e,...m})),A(i)},onInputChange:y,maxLength:e.max||void 0,id:e.name,__experimentalExpandOnFocus:!0})},location:({field:e,value:l,onChange:n})=>{const a=l||{},[i,r]=(0,v.useState)(a.address||""),[d,c]=(0,v.useState)([]),[u,p]=(0,v.useState)(!1),m=(0,t.useDebounce)(e=>{if(!e)return c([]);p(!0),f()({path:`jvb/v1/geocode?q=${encodeURIComponent(e)}`}).then(c).finally(()=>p(!1))},400);return(0,o.jsxs)("div",{className:"jvb-location-field",id:e.name,children:[(0,o.jsx)(s.TextControl,{label:e.label,value:i,onChange:e=>{r(e),m(e)}}),u&&(0,o.jsx)(s.Spinner,{}),!!d.length&&(0,o.jsxs)("div",{className:"jvb-location-results",children:[d.map(e=>(0,o.jsx)(s.Button,{variant:"tertiary",onClick:()=>(e=>{const l=e.address||{},t={address:[l.house_number,l.road].filter(Boolean).join(" "),city:l.city||l.town||l.village||"",province:l.state||"",postal_code:l.postcode||"",country:l.country||"",lat:parseFloat(e.lat),lng:parseFloat(e.lng)};n(t),r(t.address),c([])})(e),style:{display:"block",textAlign:"left"},children:e.display_name},e.place_id)),!!a.lat&&(0,o.jsxs)("p",{className:"jvb-location-summary",children:[a.address,", ",a.city,", ",a.province," ",a.postal_code,", ",a.country,(0,o.jsx)("br",{}),(0,o.jsx)(s.Button,{variant:"link",isDestructive:!0,onClick:()=>{n({}),r(""),c([])},children:"Clear"})]})]})]})}},N={"=":(e,l)=>e==l,"==":(e,l)=>e==l,"!=":(e,l)=>e!=l,">":(e,l)=>e>l,"<":(e,l)=>e<l,in:(e,l)=>Array.isArray(l)?l.includes(e):String(l).split(",").includes(e)},O=({id:e,field:l,value:t,onChange:n,meta:a})=>{if(!((e,l)=>!e?.field||(N[e.operator]||N["="])(l?.[e.field],e.value))(l.condition,a))return null;const i=A[l.type];return i?(0,o.jsx)(s.PanelRow,{children:(0,o.jsx)(i,{field:l,value:t,onChange:n})}):null},P=({id:e,name:l,fields:t,meta:n,setMeta:a,isOpen:i=!1})=>(e="jvb-section-"+e,console.log(t,"fields"),(0,o.jsx)(s.PanelBody,{name:e,title:l,initialOpen:i,children:t.map(e=>(0,o.jsx)(O,{field:e,value:n?.[e.name],onChange:l=>((e,l)=>a({...n,[e]:l}))(e.name,l),meta:n},e.name))})),R=()=>(0,o.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",fillRule:"evenodd",strokeLinecap:"square",strokeLinejoin:"round",strokeMiterlimit:"1.5",clipRule:"evenodd",viewBox:"0 0 32 32",children:(0,o.jsx)("path",{fill:"currentColor",fillRule:"nonzero",d:"M16.58 2.133c-7.715 0-15.14 6.014-14.547 13.707.561 7.287 6.938 13.185 13.938 13.947 8.25.898 14.47-5.953 14.004-13.988-.447-7.7-5.683-13.666-13.395-13.666m0 .607h.031v26.492q-.285-.017-.574-.048c-6.724-.732-12.86-6.391-13.398-13.391C2.072 8.442 9.209 2.74 16.58 2.74m-.488 1.145L16 3.889c-3.275.13-6.448 1.476-8.744 3.611-2.297 2.135-3.716 5.065-3.463 8.346.492 6.384 6.071 11.538 12.201 12.207l.09.01.021-.182-.091-.01c-6.041-.66-11.555-5.755-12.04-12.04-.247-3.221 1.142-6.092 3.405-8.196s5.4-3.437 8.629-3.565l.092-.004zm0 1.502L16 5.39c-2.868.113-5.647 1.293-7.658 3.164-2.012 1.87-3.255 4.436-3.033 7.31.43 5.593 5.316 10.106 10.685 10.692l.09.01.021-.18-.091-.01c-5.28-.576-10.1-5.031-10.524-10.525-.217-2.815.997-5.325 2.975-7.164 1.978-1.84 4.72-3.004 7.543-3.116l.092-.004zm0 1.504L16 6.893c-2.462.097-4.846 1.111-6.572 2.716-1.727 1.606-2.796 3.808-2.606 6.276.37 4.8 4.564 8.674 9.172 9.177l.09.01.021-.181-.091-.01c-4.52-.494-8.648-4.307-9.01-9.01-.186-2.408.854-4.554 2.547-6.129s4.04-2.57 6.457-2.666l.092-.004zm0 1.502L16 8.396c-2.055.082-4.045.926-5.486 2.266-1.442 1.34-2.335 3.182-2.176 5.244.309 4.009 3.808 7.24 7.656 7.66l.09.01.008-.068v-.002l.002-.01.004-.01v-.02l.007-.072-.091-.01c-3.76-.41-7.193-3.58-7.494-7.491-.155-2.002.709-3.787 2.117-5.096s3.361-2.14 5.37-2.219l.093-.004zm0 1.502L16 9.898a6.95 6.95 0 0 0-4.402 1.819c-1.157 1.075-1.872 2.553-1.744 4.209.247 3.216 3.053 5.81 6.14 6.146l.09.01.021-.182-.091-.01c-2.999-.327-5.739-2.86-5.979-5.978-.123-1.595.564-3.018 1.688-4.062a6.78 6.78 0 0 1 4.285-1.77l.092-.004zm0 1.503L16 11.4a5.24 5.24 0 0 0-3.316 1.372c-.872.81-1.413 1.924-1.317 3.173.187 2.425 2.3 4.377 4.627 4.631l.09.01.021-.182-.091-.01c-2.238-.244-4.286-2.136-4.465-4.462-.092-1.19.421-2.248 1.26-3.028a5.06 5.06 0 0 1 3.199-1.32l.092-.004zm0 1.502-.092.004a3.52 3.52 0 0 0-2.23.92c-.587.546-.952 1.3-.887 2.143.126 1.633 1.545 2.942 3.111 3.113h-.008l.01.002h.01l.078.01.022-.182-.092-.01c-1.477-.16-2.831-1.412-2.95-2.947-.06-.782.277-1.48.83-1.994a3.35 3.35 0 0 1 2.114-.873l.092-.004zm0 1.502-.092.004c-.43.017-.843.192-1.145.473-.301.28-.49.67-.457 1.107.065.841.791 1.512 1.596 1.6l.09.01.021-.182-.091-.01c-.717-.078-1.377-.688-1.434-1.431-.029-.377.132-.712.4-.961.269-.25.644-.409 1.028-.424l.092-.004z",clipRule:"nonzero",overflow:"visible"})}),T=(0,n.withSelect)(e=>({metaFields:e("core/editor").getEditedPostAttribute("meta"),postType:e("core/editor").getCurrentPostType()})),F=(0,n.withDispatch)(e=>({setMetaFields(l){e("core/editor").editPost({meta:l})}})),D=({section:e,fields:l})=>l.filter(l=>e.fields.includes(l.name)),z=e=>0===e,L=(0,t.compose)([T,F])(({postType:e,metaFields:l,setMetaFields:t})=>{const{fields:n,sections:s}=window.jvbFieldConfig||{},[r,d]=(0,i.useEntityProp)("postType",e,"meta");return n&&n.length?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(a.PluginSidebarMoreMenuItem,{target:"jvb-meta-fields",icon:(0,o.jsx)(R,{}),children:"Additional Fields"}),(0,o.jsx)(a.PluginSidebar,{name:"jvb-meta-fields",icon:(0,o.jsx)(R,{}),title:"Additional Fields",children:Object.values(s).map((e,l)=>(0,o.jsx)(P,{name:e.title,fields:D({section:e,fields:n}),meta:r,setMeta:d,isOpen:z(l)},e.id))})]}):null});(0,l.registerPlugin)("jvb-meta-fields",{render:L})})();
(()=>{"use strict";const e={n:t=>{const l=t&&t.__esModule?()=>t.default:()=>t;return e.d(l,{a:l}),l},d:(t,l)=>{for(var a in l)e.o(l,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:l[a]})},o:(e,t)=>Object.hasOwn(e,t)},t=window.wp.plugins,l=(window.wp.i18n,window.wp.compose),a=window.wp.data,n=window.wp.editor,i=window.wp.coreData,s=window.wp.components,o=window.ReactJSXRuntime,r={text:"text",email:"email",tel:"tel",url:"url",number:"number"},d=({field:e,value:t,onChange:l})=>"textarea"===e.type?(0,o.jsx)(s.TextareaControl,{label:e.label,help:e.description,value:t??"",onChange:l,id:e.name}):(0,o.jsx)(s.TextControl,{label:e.label,help:e.description,type:r[e.type]||"text",value:t??"",onChange:l,required:e.required,id:e.name}),c=({field:e,value:t,onChange:l})=>{const a=Object.entries(e.options||{}).map(([e,t])=>({label:t,value:e}));return"radio"===e.type?(0,o.jsx)(s.RadioControl,{label:e.label,help:e.description,selected:t,options:a,onChange:l,id:e.name}):(0,o.jsx)(s.SelectControl,{label:e.label,help:e.description,value:t??"",options:[{label:"— Select —",value:""},...a],onChange:l,id:e.name})},u=({field:e,value:t,onChange:l})=>{const a=Array.isArray(t)?t:[];return(0,o.jsxs)("fieldset",{id:e.name,children:[(0,o.jsx)("legend",{className:"jvb-field-label",children:e.label}),Object.entries(e.options||{}).map(([e,t])=>(0,o.jsx)(s.CheckboxControl,{label:t,checked:a.includes(e),onChange:t=>((e,t)=>{l(t?[...a,e]:a.filter(t=>t!==e))})(e,t)},e))]})},p=window.React,m=e=>{if(e.description&&0!==e.description.length)return(0,o.jsx)("p",{className:"hint",children:e.description})},h=e=>{if(e.description&&0!==e.description.length)return(0,o.jsx)("p",{className:"hint",children:e.description})},v=window.wp.element,b=(e,t,l)=>e?.includes("{{")?e.replace(/{{(.*?)}}/g,(e,l)=>{const a=t[l];return void 0===a?"":Array.isArray(a)?a.join(", "):String(a)}):e,j=window.wp.mediaUtils,x=window.wp.blockEditor,g=window.wp.apiFetch;var f=e.n(g);const w={image:"image",video:"video",document:"application",all:""},y=({id:e,onRemove:t})=>{const[l,a]=(0,v.useState)(null);(0,v.useEffect)(()=>{let t=!1;if(e)return f()({path:`/wp/v2/media/${e}`}).then(e=>!t&&a(e)).catch(()=>{}),()=>{t=!0}},[e]);const n=l?.media_details?.sizes?.thumbnail?.source_url||l?.source_url,i="image"===l?.media_type;return(0,o.jsxs)("div",{className:"jvb-upload-thumb",children:[i&&n?(0,o.jsx)("img",{src:n,alt:l?.alt_text||""}):(0,o.jsx)("div",{className:"jvb-upload-thumb-placeholder",children:l?.title?.rendered||`#${e}`}),(0,o.jsx)(s.Button,{variant:"link",isDestructive:!0,onClick:()=>t(e),children:"Remove"})]})},C=window.wp.url,_=e=>e.subtype||e.type,k=(e,t,l)=>"post"===t?{title:l,status:"publish",postType:e.post_type}:{name:l},S=(e,t)=>"user"===t?e.name:e.title?.rendered??e.title??e.name,A={text:d,email:d,tel:d,url:d,number:d,textarea:d,select:c,radio:c,checkbox:u,set:u,true_false:({field:e,value:t,onChange:l})=>(0,o.jsx)(s.ToggleControl,{label:e.label,help:e.description,checked:!!t,onChange:l,id:e.name}),date:({field:e,value:t,onChange:l})=>{const[a,n]=(0,p.useState)(new Date);return(0,o.jsxs)("div",{className:"components-base-control",id:e.name,children:[(0,o.jsx)("label",{className:"components-base-control__label",children:e.label}),(0,o.jsx)(s.DatePicker,{currentDate:a,onChange:l,help:e.description,value:t??""}),m(e)]})},time:({field:e,value:t,onChange:l})=>(0,o.jsx)(s.BaseControl,{label:e.label,help:e.description,id:e.name,children:(0,o.jsx)("input",{type:"time",id:e.name,value:t??"",onChange:e=>l(e.target.value)})}),datetime:({field:e,value:t,onChange:l})=>{const[a,n]=(0,p.useState)(new Date);return(0,o.jsxs)("div",{className:"components-base-control",id:e.name,children:[(0,o.jsx)("label",{className:"components-base-control__label",children:e.label}),(0,o.jsx)(s.DateTimePicker,{currentDate:a,onChange:l,label:e.label,help:e.description,value:t??"",is12Hour:!0}),h(e)]})},repeater:({field:e,value:t,onChange:l,meta:a})=>{const n=Array.isArray(t)?t:[],i=e.fields||{},[r,d]=(0,v.useState)(null);return(0,o.jsxs)("div",{className:"jvb-repeater-field",id:e.name,children:[(0,o.jsx)("p",{className:"jvb-field-label",children:e.label}),(0,o.jsx)(s.Panel,{children:n.map((t,c)=>(0,o.jsxs)(s.PanelBody,{title:b(e.row_label,t)||`Row ${c+1}`,initialOpen:r===c,onToggle:()=>d(r===c?null:c),children:[Object.entries(i).map(([e,i])=>(0,o.jsx)(O,{field:{...i,name:e},value:t[e],onChange:t=>((e,t,a)=>{const i=n.map((l,n)=>n===e?{...l,[t]:a}:l);l(i)})(c,e,t),meta:a},e)),(0,o.jsx)(s.Button,{variant:"link",isDestructive:!0,onClick:()=>(e=>l(n.filter((t,l)=>l!==e)))(c),children:"Remove"})]},c))}),(0,o.jsx)(s.Button,{variant:"secondary",onClick:()=>{return l([...n,(e=i,Object.fromEntries(Object.entries(e||{}).map(([e,t])=>[e,t.default??""])))]);var e},children:e.add_label||"Add Row"})]})},upload:({field:e,value:t,onChange:l})=>{const a=e.multiple||"gallery"===e.type,n=a?Array.isArray(t)?t:[]:t,i=w[e.subtype]?[w[e.subtype]]:"",r=e=>{l(a?n.filter(t=>t!==e):0)};return(0,o.jsxs)("div",{className:"jvb-upload-field",id:e.name,children:[(0,o.jsx)("p",{className:"jvb-field-label",children:e.label}),(0,o.jsx)("div",{className:a?"jvb-upload-grid":"jvb-upload-single",children:a?n.map(e=>(0,o.jsx)(y,{id:e,onRemove:r},e)):!!n&&(0,o.jsx)(y,{id:n,onRemove:r})}),(0,o.jsx)(x.MediaUploadCheck,{children:(0,o.jsx)(j.MediaUpload,{onSelect:e=>l(a?e.map(e=>e.id):e.id),allowedTypes:i,multiple:a,value:a?n:n||void 0,render:({open:t})=>(0,o.jsxs)(s.Button,{variant:"secondary",onClick:t,children:[(a?n.length:n)?"Change":"Select"," ",e.label]})})})]})},selector:({field:e,value:t,onChange:l})=>{const a=_(e),n="taxonomy"===a,i=(e=>{const t=_(e);return"user"===t?e=>(0,C.addQueryArgs)("/wp/v2/users",{search:e,per_page:20}):"taxonomy"===t?t=>(0,C.addQueryArgs)(`/wp/v2/${e.taxonomy}`,{search:t,per_page:20}):t=>(0,C.addQueryArgs)("/wp/v2/search",{search:t,type:"post",subtype:e.post_type,per_page:20})})(e),r=Array.isArray(t)?t:t?t.split(","):[],[d,c]=(0,v.useState)([]),[u,p]=(0,v.useState)({}),[m,h]=(0,v.useState)({}),[b,j]=(0,v.useState)(""),[x,g]=(0,v.useState)(!1),w=b?`Not found. Create "${b}"?`:null;(0,v.useEffect)(()=>{let e=!1;if(r.length)return Promise.all(r.map(e=>f()({path:i("")+`&include=${e}`}))).then(t=>{if(e)return;const l={},n=[];t.flat().forEach(e=>{const t=S(e,a);l[t]=e.id,n.push(t)}),p(e=>({...e,...l})),c(n)}).catch(()=>{}),()=>{e=!0};c([])},[JSON.stringify(r)]);const y=(0,v.useCallback)(e=>{j(e),e?f()({path:i(e)}).then(e=>{const t={};e.forEach(e=>{t[S(e,a)]=e.id}),h(t)}).catch(()=>{}):h({})},[i,a]),A=t=>{const a=1===e.max;l(a?t[t.length-1]??0:e.max?t.slice(0,e.max):t)},N=b&&!Object.keys(m).some(e=>e.toLowerCase()===b.toLowerCase()),O=1===e.max&&d.length?[]:[...Object.keys(m),...n&&N?[w]:[]];return(0,o.jsx)(s.FormTokenField,{label:e.label,help:e.description,value:d,suggestions:O,onChange:t=>{if(t.find(e=>e===w)&&n&&!x)return g(!0),void f()({path:`/wp/v2/${e.taxonomy}`,method:"POST",data:k(a,b)}).then(e=>{const t=S(e,a),l=d.filter(e=>e!==w).concat(t),n=l.map(l=>u[l]??m[l]??(l===t?e.id:void 0)).filter(e=>void 0!==e);p(l=>({...l,[t]:e.id})),c(l),A(n)}).catch(()=>{}).finally(()=>g(!1));const l=t.filter(e=>void 0!==u[e]||void 0!==m[e]),i=l.map(e=>u[e]??m[e]);c(l),p(e=>({...e,...m})),A(i)},onInputChange:y,maxLength:e.max||void 0,id:e.name,__experimentalExpandOnFocus:!0})},location:({field:e,value:t,onChange:a})=>{const n=t||{},[i,r]=(0,v.useState)(n.address||""),[d,c]=(0,v.useState)([]),[u,p]=(0,v.useState)(!1),m=(0,l.useDebounce)(e=>{if(!e)return c([]);p(!0),f()({path:`jvb/v1/geocode?q=${encodeURIComponent(e)}`}).then(c).finally(()=>p(!1))},400);return(0,o.jsxs)("div",{className:"jvb-location-field",id:e.name,children:[(0,o.jsx)(s.TextControl,{label:e.label,value:i,onChange:e=>{r(e),m(e)}}),u&&(0,o.jsx)(s.Spinner,{}),!!d.length&&(0,o.jsxs)("div",{className:"jvb-location-results",children:[d.map(e=>(0,o.jsx)(s.Button,{variant:"tertiary",onClick:()=>(e=>{const t=e.address||{},l={address:[t.house_number,t.road].filter(Boolean).join(" "),city:t.city||t.town||t.village||"",province:t.state||"",postal_code:t.postcode||"",country:t.country||"",lat:parseFloat(e.lat),lng:parseFloat(e.lng)};a(l),r(l.address),c([])})(e),style:{display:"block",textAlign:"left"},children:e.display_name},e.place_id)),!!n.lat&&(0,o.jsxs)("p",{className:"jvb-location-summary",children:[n.address,", ",n.city,", ",n.province," ",n.postal_code,", ",n.country,(0,o.jsx)("br",{}),(0,o.jsx)(s.Button,{variant:"link",isDestructive:!0,onClick:()=>{a({}),r(""),c([])},children:"Clear"})]})]})]})}},N={"=":(e,t)=>e==t,"==":(e,t)=>e==t,"!=":(e,t)=>e!=t,">":(e,t)=>e>t,"<":(e,t)=>e<t,in:(e,t)=>Array.isArray(t)?t.includes(e):String(t).split(",").includes(e)},O=({id:e,field:t,value:l,onChange:a,meta:n})=>{if(!((e,t)=>!e?.field||(N[e.operator]||N["="])(t?.[e.field],e.value))(t.condition,n))return null;const i=A[t.type];return i?(0,o.jsx)(s.PanelRow,{children:(0,o.jsx)(i,{field:t,value:l,onChange:a})}):null},R=({id:e,name:t,fields:l,meta:a,setMeta:n,isOpen:i=!1})=>(e="jvb-section-"+e,(0,o.jsx)(s.PanelBody,{name:e,title:t,initialOpen:i,children:l.map(e=>(0,o.jsx)(O,{field:e,value:a?.[e.name],onChange:t=>((e,t)=>n({...a,[e]:t}))(e.name,t),meta:a},e.name))})),P=()=>(0,o.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",fillRule:"evenodd",strokeLinecap:"square",strokeLinejoin:"round",strokeMiterlimit:"1.5",clipRule:"evenodd",viewBox:"0 0 32 32",children:(0,o.jsx)("path",{fill:"currentColor",fillRule:"nonzero",d:"M16.58 2.133c-7.715 0-15.14 6.014-14.547 13.707.561 7.287 6.938 13.185 13.938 13.947 8.25.898 14.47-5.953 14.004-13.988-.447-7.7-5.683-13.666-13.395-13.666m0 .607h.031v26.492q-.285-.017-.574-.048c-6.724-.732-12.86-6.391-13.398-13.391C2.072 8.442 9.209 2.74 16.58 2.74m-.488 1.145L16 3.889c-3.275.13-6.448 1.476-8.744 3.611-2.297 2.135-3.716 5.065-3.463 8.346.492 6.384 6.071 11.538 12.201 12.207l.09.01.021-.182-.091-.01c-6.041-.66-11.555-5.755-12.04-12.04-.247-3.221 1.142-6.092 3.405-8.196s5.4-3.437 8.629-3.565l.092-.004zm0 1.502L16 5.39c-2.868.113-5.647 1.293-7.658 3.164-2.012 1.87-3.255 4.436-3.033 7.31.43 5.593 5.316 10.106 10.685 10.692l.09.01.021-.18-.091-.01c-5.28-.576-10.1-5.031-10.524-10.525-.217-2.815.997-5.325 2.975-7.164 1.978-1.84 4.72-3.004 7.543-3.116l.092-.004zm0 1.504L16 6.893c-2.462.097-4.846 1.111-6.572 2.716-1.727 1.606-2.796 3.808-2.606 6.276.37 4.8 4.564 8.674 9.172 9.177l.09.01.021-.181-.091-.01c-4.52-.494-8.648-4.307-9.01-9.01-.186-2.408.854-4.554 2.547-6.129s4.04-2.57 6.457-2.666l.092-.004zm0 1.502L16 8.396c-2.055.082-4.045.926-5.486 2.266-1.442 1.34-2.335 3.182-2.176 5.244.309 4.009 3.808 7.24 7.656 7.66l.09.01.008-.068v-.002l.002-.01.004-.01v-.02l.007-.072-.091-.01c-3.76-.41-7.193-3.58-7.494-7.491-.155-2.002.709-3.787 2.117-5.096s3.361-2.14 5.37-2.219l.093-.004zm0 1.502L16 9.898a6.95 6.95 0 0 0-4.402 1.819c-1.157 1.075-1.872 2.553-1.744 4.209.247 3.216 3.053 5.81 6.14 6.146l.09.01.021-.182-.091-.01c-2.999-.327-5.739-2.86-5.979-5.978-.123-1.595.564-3.018 1.688-4.062a6.78 6.78 0 0 1 4.285-1.77l.092-.004zm0 1.503L16 11.4a5.24 5.24 0 0 0-3.316 1.372c-.872.81-1.413 1.924-1.317 3.173.187 2.425 2.3 4.377 4.627 4.631l.09.01.021-.182-.091-.01c-2.238-.244-4.286-2.136-4.465-4.462-.092-1.19.421-2.248 1.26-3.028a5.06 5.06 0 0 1 3.199-1.32l.092-.004zm0 1.502-.092.004a3.52 3.52 0 0 0-2.23.92c-.587.546-.952 1.3-.887 2.143.126 1.633 1.545 2.942 3.111 3.113h-.008l.01.002h.01l.078.01.022-.182-.092-.01c-1.477-.16-2.831-1.412-2.95-2.947-.06-.782.277-1.48.83-1.994a3.35 3.35 0 0 1 2.114-.873l.092-.004zm0 1.502-.092.004c-.43.017-.843.192-1.145.473-.301.28-.49.67-.457 1.107.065.841.791 1.512 1.596 1.6l.09.01.021-.182-.091-.01c-.717-.078-1.377-.688-1.434-1.431-.029-.377.132-.712.4-.961.269-.25.644-.409 1.028-.424l.092-.004z",clipRule:"nonzero",overflow:"visible"})}),F=(0,a.withSelect)(e=>({metaFields:e("core/editor").getEditedPostAttribute("meta"),postType:e("core/editor").getCurrentPostType()})),T=(0,a.withDispatch)(e=>({setMetaFields(t){e("core/editor").editPost({meta:t})}})),D=({section:e,fields:t})=>t.filter(t=>e.fields.includes(t.name)),z=e=>0===e,B=(0,l.compose)([F,T])(({postType:e,metaFields:t,setMetaFields:l})=>{const{fields:a,sections:s}=window.jvbFieldConfig||{},[r,d]=(0,i.useEntityProp)("postType",e,"meta");return a&&a.length?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.PluginSidebarMoreMenuItem,{target:"jvb-meta-fields",icon:(0,o.jsx)(P,{}),children:"Additional Fields"}),(0,o.jsx)(n.PluginSidebar,{name:"jvb-meta-fields",icon:(0,o.jsx)(P,{}),title:"Additional Fields",children:Object.values(s).map((e,t)=>(0,o.jsx)(R,{name:e.title,fields:D({section:e,fields:a}),meta:r,setMeta:d,isOpen:z(t)},e.id))})]}):null});(0,t.registerPlugin)("jvb-meta-fields",{render:B})})();
build/meta/block.json
New file
@@ -0,0 +1,26 @@
{
  "$schema": "https://schemas.wp.org/trunk/block.json",
  "apiVersion": 3,
  "name": "jvb/meta",
  "version": "0.1.0",
  "title": "Custom Field",
  "category": "jvb",
  "icon": "edit-large",
  "description": "Add a specific field from this content",
  "example": {},
  "supports": {
    "align": [
      "wide",
      "full"
    ]
  },
  "textdomain": "jvb",
  "selectors": {
    "root": ".jvb-meta"
  },
  "editorScript": "file:./index.js",
  "editorStyle": "file:./index.css",
  "style": "file:./style-index.css",
  "render": "file:./render.php",
  "viewScript": "file:./view.js"
}
build/meta/index-rtl.css
New file
@@ -0,0 +1 @@
build/meta/index.asset.php
New file
@@ -0,0 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => '6cfb5d257a0c1c7f9d85');
build/meta/index.css
New file
@@ -0,0 +1 @@
build/meta/index.js
New file
@@ -0,0 +1 @@
(()=>{"use strict";var t={796(){const t=window.wp.blocks,o=window.wp.i18n,e=window.wp.blockEditor,n=window.ReactJSXRuntime;(0,t.registerBlockType)("jvb/meta",{edit:function(){return(0,n.jsx)("p",{...(0,e.useBlockProps)(),children:(0,o.__)("Will output the menu","jvb")})}})}};const o={};function e(n){const r=o[n];if(void 0!==r)return r.exports;const i=o[n]={exports:{}};return t[n](i,i.exports,e),i.exports}e.m=t,(()=>{const t=[];e.O=(o,n,r,i)=>{if(n){i||=0;for(var s=t.length;s>0&&t[s-1][2]>i;s--)t[s]=t[s-1];return void(t[s]=[n,r,i])}let c=1/0;for(s=0;s<t.length;s++){let[n,r,i]=t[s],u=!0;for(var l=0;l<n.length;l++)1&i&&!(c>=i)||!Object.keys(e.O).every(t=>e.O[t](n[l]))?(u=!1,i<c&&(c=i)):n.splice(l--,1);if(u){t.splice(s--,1);const e=r();void 0!==e&&(o=e)}}return o}})(),e.o=(t,o)=>Object.hasOwn(t,o),(()=>{const t={105:0,933:0};e.O.j=o=>0===t[o];const o=(o,n)=>{let[r,i,s]=n;var c,l,u=0;if(r.some(o=>0!==t[o])){for(c in i)e.o(i,c)&&(e.m[c]=i[c]);if(s)var p=s(e)}for(o&&o(n);u<r.length;u++)l=r[u],e.o(t,l)&&t[l]&&t[l][0](),t[l]=0;return e.O(p)},n=globalThis.webpackChunkjvb||=[];n.forEach(o.bind(null,0)),n.push=o.bind(null,n.push.bind(n))})();let n=e.O(void 0,[933],()=>e(796));n=e.O(n)})();
build/meta/render.php
New file
@@ -0,0 +1,9 @@
<?php
if (!defined('ABSPATH')) {
    exit; // Exit if accessed directly
}
function jvbRenderMetaBlock() {
}
build/meta/style-index-rtl.css
New file
@@ -0,0 +1 @@
build/meta/style-index.css
New file
@@ -0,0 +1 @@
build/meta/view.asset.php
New file
@@ -0,0 +1 @@
<?php return array('dependencies' => array(), 'version' => '31d6cfe0d16ae931b73c');
build/meta/view.js
build/summary/index.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => '79dfee08279e8c8a026a');
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => 'a920179a21ccccf1b428');
build/summary/index.js
@@ -1 +1 @@
(()=>{"use strict";var e={955(){const e=window.wp.blocks,t=window.wp.i18n,n=window.wp.blockEditor,r=(window.wp.components,window.ReactJSXRuntime);(0,e.registerBlockType)("jvb/summary",{edit:function({attributes:e,setAttributes:o}){const i=(0,n.useBlockProps)();return(0,r.jsx)("div",{...i,children:(0,r.jsxs)("div",{className:"jvb-summary-preview",children:[(0,r.jsx)("h3",{children:(0,t.__)("Summary","jvb")}),(0,r.jsx)("p",{className:"jvb-list-preview-note",children:(0,t.__)("This will inherit the current query to build the information from our custom meta on the front end.","jvb")})]})})},save:function(){return null}})}};const t={};function n(r){const o=t[r];if(void 0!==o)return o.exports;const i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.m=e,(()=>{const e=[];n.O=(t,r,o,i)=>{if(r){i||=0;for(var s=e.length;s>0&&e[s-1][2]>i;s--)e[s]=e[s-1];return void(e[s]=[r,o,i])}let c=1/0;for(s=0;s<e.length;s++){let[r,o,i]=e[s],u=!0;for(var l=0;l<r.length;l++)1&i&&!(c>=i)||!Object.keys(n.O).every(e=>n.O[e](r[l]))?(u=!1,i<c&&(c=i)):r.splice(l--,1);if(u){e.splice(s--,1);const n=o();void 0!==n&&(t=n)}}return t}})(),n.o=(e,t)=>Object.hasOwn(e,t),(()=>{const e={592:0,75:0};n.O.j=t=>0===e[t];const t=(t,r)=>{let[o,i,s]=r;var c,l,u=0;if(o.some(t=>0!==e[t])){for(c in i)n.o(i,c)&&(n.m[c]=i[c]);if(s)var d=s(n)}for(t&&t(r);u<o.length;u++)l=o[u],n.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return n.O(d)},r=globalThis.webpackChunkjvb||=[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();let r=n.O(void 0,[75],()=>n(955));r=n.O(r)})();
(()=>{"use strict";var e={955(){const e=window.wp.blocks,t=window.wp.i18n,n=window.wp.blockEditor,r=(window.wp.components,window.ReactJSXRuntime);(0,e.registerBlockType)("jvb/summary",{edit:function({attributes:e,setAttributes:o}){const i=(0,n.useBlockProps)();return(0,r.jsx)("div",{...i,children:(0,r.jsxs)("div",{className:"jvb-summary-preview",children:[(0,r.jsx)("h3",{children:(0,t.__)("Summary","jvb")}),(0,r.jsx)("p",{className:"jvb-list-preview-note",children:(0,t.__)("This will inherit the current query to build the information from our custom meta on the front end.","jvb")})]})})},save:function(){return null}})}};const t={};function n(r){const o=t[r];if(void 0!==o)return o.exports;const i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.m=e,(()=>{const e=[];n.O=(t,r,o,i)=>{if(r){i||=0;for(var s=e.length;s>0&&e[s-1][2]>i;s--)e[s]=e[s-1];return void(e[s]=[r,o,i])}let c=1/0;for(s=0;s<e.length;s++){let[r,o,i]=e[s],u=!0;for(var l=0;l<r.length;l++)1&i&&!(c>=i)||!Object.keys(n.O).every(e=>n.O[e](r[l]))?(u=!1,i<c&&(c=i)):r.splice(l--,1);if(u){e.splice(s--,1);const n=o();void 0!==n&&(t=n)}}return t}})(),n.o=(e,t)=>Object.hasOwn(e,t),(()=>{const e={592:0,694:0};n.O.j=t=>0===e[t];const t=(t,r)=>{let[o,i,s]=r;var c,l,u=0;if(o.some(t=>0!==e[t])){for(c in i)n.o(i,c)&&(n.m[c]=i[c]);if(s)var d=s(n)}for(t&&t(r);u<o.length;u++)l=o[u],n.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return n.O(d)},r=globalThis.webpackChunkjvb||=[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();let r=n.O(void 0,[694],()=>n(955));r=n.O(r)})();
inc/blocks/RegisterBlocks.php
@@ -47,6 +47,13 @@
            ]
        );
    }
    register_block_type(
        JVB_DIR . '/build/meta',
        [
            'render_callback'   => 'jvbRenderMetaBlock'
        ]
    );
}
add_action('init', 'jvbRegisterBlocks');
inc/blocks/_setup.php
@@ -57,6 +57,13 @@
//      );
//  }
    register_block_type(
        JVB_DIR . '/build/meta',
        [
            'render_callback'   => 'jvbRenderMetaBlock'
        ]
    );
}
inc/registrar/helpers/AddCustomFields.php
@@ -50,6 +50,9 @@
                    if ($f['type'] === 'selector') {
                        $f['taxonomy'] = jvbCheckBase($f['taxonomy']);
                    }
                    if (array_key_exists('condition', $f)) {
                        $f['condition']['field'] = jvbCheckBase($f['condition']['field']);
                    }
                    return $f;
                },array_values($this->registrar->getFields(false))),
                'sections'  => array_map(function ($s) {
inc/registrar/helpers/MakeCalendarType.php
@@ -67,15 +67,15 @@
                'label'     => 'Make Multi-Day Event',
                'default'   => false,
            ],
            'date_end' => [
                'type'      => 'date',
                'label'     => 'Date End',
                'condition' => [
                    'field' => 'make_multiple',
                    'operator' => '==',
                    'value' => 1
                ]
            ],
//          'date_end' => [
//              'type'      => 'date',
//              'label'     => 'Date End',
//              'condition' => [
//                  'field' => 'make_multiple',
//                  'operator' => '==',
//                  'value' => 1
//              ]
//          ],
            'past' => [
                'type'      => 'true_false',
                'label'     => 'Past Event',
@@ -100,6 +100,7 @@
                'type' => 'repeater',
                'label' => 'Daily Schedule',
                'description' => 'Set specific times for multi-day events',
                'add_label' => 'Add Day',
                'condition' => [
                    'field' => 'make_multiple',
                    'operator' => '==',
package-lock.json
@@ -21,6 +21,7 @@
                "@wordpress/plugins": "^7.54.0",
                "@wordpress/upload-media": "^0.39.0",
                "@wordpress/url": "^4.54.0",
                "react": "^19.2.8",
                "sass": "^1.103.1"
            },
            "devDependencies": {
@@ -5792,78 +5793,18 @@
                }
            }
        },
        "node_modules/@react-spring/animated": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.5.tgz",
            "integrity": "sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==",
            "license": "MIT",
            "dependencies": {
                "@react-spring/shared": "~9.7.5",
                "@react-spring/types": "~9.7.5"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
            }
        },
        "node_modules/@react-spring/core": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.5.tgz",
            "integrity": "sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==",
            "license": "MIT",
            "dependencies": {
                "@react-spring/animated": "~9.7.5",
                "@react-spring/shared": "~9.7.5",
                "@react-spring/types": "~9.7.5"
            },
            "funding": {
                "type": "opencollective",
                "url": "https://opencollective.com/react-spring/donate"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
            }
        },
        "node_modules/@react-spring/rafz": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.7.5.tgz",
            "integrity": "sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==",
            "license": "MIT"
        },
        "node_modules/@react-spring/shared": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.5.tgz",
            "integrity": "sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==",
            "license": "MIT",
            "dependencies": {
                "@react-spring/rafz": "~9.7.5",
                "@react-spring/types": "~9.7.5"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
            }
        },
        "node_modules/@react-spring/types": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.5.tgz",
            "integrity": "sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==",
            "license": "MIT"
        },
        "node_modules/@react-spring/web": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.5.tgz",
            "integrity": "sha512-lmvqGwpe+CSttsWNZVr+Dg62adtKhauGwLyGE/RRyZ8AAMLgb9x3NDMA5RMElXo+IMyTkPp7nxTB8ZQlmhb6JQ==",
            "license": "MIT",
            "dependencies": {
                "@react-spring/animated": "~9.7.5",
                "@react-spring/core": "~9.7.5",
                "@react-spring/shared": "~9.7.5",
                "@react-spring/types": "~9.7.5"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
                "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
            }
        },
        "node_modules/@rtsao/scc": {
            "version": "1.1.0",
            "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -6369,6 +6310,47 @@
                "url": "https://github.com/sponsors/tannerlinsley"
            }
        },
        "node_modules/@tanstack/react-router": {
            "version": "1.170.32",
            "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.170.32.tgz",
            "integrity": "sha512-SIpxvaTKco100a5ZR3ePmArbhtm3XOx+w1dpGYY9gxHDta4iXSKDdQuhLonwJbIMkVJsU1rwXf0UDHMrF/1snw==",
            "license": "MIT",
            "dependencies": {
                "@tanstack/history": "1.162.1",
                "@tanstack/react-store": "^0.9.3",
                "@tanstack/router-core": "1.171.27",
                "isbot": "^5.1.22"
            },
            "engines": {
                "node": ">=20.19"
            },
            "funding": {
                "type": "github",
                "url": "https://github.com/sponsors/tannerlinsley"
            },
            "peerDependencies": {
                "react": ">=18.0.0 || >=19.0.0",
                "react-dom": ">=18.0.0 || >=19.0.0"
            }
        },
        "node_modules/@tanstack/react-store": {
            "version": "0.9.3",
            "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.9.3.tgz",
            "integrity": "sha512-y2iHd/N9OkoQbFJLUX1T9vbc2O9tjH0pQRgTcx1/Nz4IlwLvkgpuglXUx+mXt0g5ZDFrEeDnONPqkbfxXJKwRg==",
            "license": "MIT",
            "dependencies": {
                "@tanstack/store": "0.9.3",
                "use-sync-external-store": "^1.6.0"
            },
            "funding": {
                "type": "github",
                "url": "https://github.com/sponsors/tannerlinsley"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
                "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
            }
        },
        "node_modules/@tanstack/router-core": {
            "version": "1.171.27",
            "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.171.27.tgz",
@@ -7811,6 +7793,19 @@
                "npm": ">=8.19.2"
            }
        },
        "node_modules/@wordpress/babel-preset-default/node_modules/react": {
            "version": "18.3.1",
            "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
            "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
            "dev": true,
            "license": "MIT",
            "dependencies": {
                "loose-envify": "^1.1.0"
            },
            "engines": {
                "node": ">=0.10.0"
            }
        },
        "node_modules/@wordpress/base-styles": {
            "version": "13.0.0",
            "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-13.0.0.tgz",
@@ -7905,6 +7900,66 @@
                }
            }
        },
        "node_modules/@wordpress/block-editor/node_modules/@react-spring/web": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.5.tgz",
            "integrity": "sha512-lmvqGwpe+CSttsWNZVr+Dg62adtKhauGwLyGE/RRyZ8AAMLgb9x3NDMA5RMElXo+IMyTkPp7nxTB8ZQlmhb6JQ==",
            "license": "MIT",
            "dependencies": {
                "@react-spring/animated": "~9.7.5",
                "@react-spring/core": "~9.7.5",
                "@react-spring/shared": "~9.7.5",
                "@react-spring/types": "~9.7.5"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
                "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
            }
        },
        "node_modules/@wordpress/block-editor/node_modules/@react-spring/web/node_modules/@react-spring/animated": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.5.tgz",
            "integrity": "sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==",
            "license": "MIT",
            "dependencies": {
                "@react-spring/shared": "~9.7.5",
                "@react-spring/types": "~9.7.5"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
            }
        },
        "node_modules/@wordpress/block-editor/node_modules/@react-spring/web/node_modules/@react-spring/core": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.5.tgz",
            "integrity": "sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==",
            "license": "MIT",
            "dependencies": {
                "@react-spring/animated": "~9.7.5",
                "@react-spring/shared": "~9.7.5",
                "@react-spring/types": "~9.7.5"
            },
            "funding": {
                "type": "opencollective",
                "url": "https://opencollective.com/react-spring/donate"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
            }
        },
        "node_modules/@wordpress/block-editor/node_modules/@react-spring/web/node_modules/@react-spring/shared": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.5.tgz",
            "integrity": "sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==",
            "license": "MIT",
            "dependencies": {
                "@react-spring/rafz": "~9.7.5",
                "@react-spring/types": "~9.7.5"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
            }
        },
        "node_modules/@wordpress/block-editor/node_modules/react-autosize-textarea": {
            "version": "7.1.0",
            "resolved": "https://registry.npmjs.org/react-autosize-textarea/-/react-autosize-textarea-7.1.0.tgz",
@@ -8766,6 +8821,66 @@
                }
            }
        },
        "node_modules/@wordpress/fields/node_modules/@react-spring/web": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.5.tgz",
            "integrity": "sha512-lmvqGwpe+CSttsWNZVr+Dg62adtKhauGwLyGE/RRyZ8AAMLgb9x3NDMA5RMElXo+IMyTkPp7nxTB8ZQlmhb6JQ==",
            "license": "MIT",
            "dependencies": {
                "@react-spring/animated": "~9.7.5",
                "@react-spring/core": "~9.7.5",
                "@react-spring/shared": "~9.7.5",
                "@react-spring/types": "~9.7.5"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
                "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
            }
        },
        "node_modules/@wordpress/fields/node_modules/@react-spring/web/node_modules/@react-spring/animated": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.5.tgz",
            "integrity": "sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==",
            "license": "MIT",
            "dependencies": {
                "@react-spring/shared": "~9.7.5",
                "@react-spring/types": "~9.7.5"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
            }
        },
        "node_modules/@wordpress/fields/node_modules/@react-spring/web/node_modules/@react-spring/core": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.5.tgz",
            "integrity": "sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==",
            "license": "MIT",
            "dependencies": {
                "@react-spring/animated": "~9.7.5",
                "@react-spring/shared": "~9.7.5",
                "@react-spring/types": "~9.7.5"
            },
            "funding": {
                "type": "opencollective",
                "url": "https://opencollective.com/react-spring/donate"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
            }
        },
        "node_modules/@wordpress/fields/node_modules/@react-spring/web/node_modules/@react-spring/shared": {
            "version": "9.7.5",
            "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.5.tgz",
            "integrity": "sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==",
            "license": "MIT",
            "dependencies": {
                "@react-spring/rafz": "~9.7.5",
                "@react-spring/types": "~9.7.5"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
            }
        },
        "node_modules/@wordpress/global-styles-engine": {
            "version": "1.21.0",
            "resolved": "https://registry.npmjs.org/@wordpress/global-styles-engine/-/global-styles-engine-1.21.0.tgz",
@@ -9504,47 +9619,6 @@
                "react": "^18 || ^19"
            }
        },
        "node_modules/@wordpress/route/node_modules/@tanstack/react-router": {
            "version": "1.170.32",
            "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.170.32.tgz",
            "integrity": "sha512-SIpxvaTKco100a5ZR3ePmArbhtm3XOx+w1dpGYY9gxHDta4iXSKDdQuhLonwJbIMkVJsU1rwXf0UDHMrF/1snw==",
            "license": "MIT",
            "dependencies": {
                "@tanstack/history": "1.162.1",
                "@tanstack/react-store": "^0.9.3",
                "@tanstack/router-core": "1.171.27",
                "isbot": "^5.1.22"
            },
            "engines": {
                "node": ">=20.19"
            },
            "funding": {
                "type": "github",
                "url": "https://github.com/sponsors/tannerlinsley"
            },
            "peerDependencies": {
                "react": ">=18.0.0 || >=19.0.0",
                "react-dom": ">=18.0.0 || >=19.0.0"
            }
        },
        "node_modules/@wordpress/route/node_modules/@tanstack/react-router/node_modules/@tanstack/react-store": {
            "version": "0.9.3",
            "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.9.3.tgz",
            "integrity": "sha512-y2iHd/N9OkoQbFJLUX1T9vbc2O9tjH0pQRgTcx1/Nz4IlwLvkgpuglXUx+mXt0g5ZDFrEeDnONPqkbfxXJKwRg==",
            "license": "MIT",
            "dependencies": {
                "@tanstack/store": "0.9.3",
                "use-sync-external-store": "^1.6.0"
            },
            "funding": {
                "type": "github",
                "url": "https://github.com/sponsors/tannerlinsley"
            },
            "peerDependencies": {
                "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
                "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
            }
        },
        "node_modules/@wordpress/router": {
            "version": "1.54.0",
            "resolved": "https://registry.npmjs.org/@wordpress/router/-/router-1.54.0.tgz",
@@ -21228,13 +21302,10 @@
            }
        },
        "node_modules/react": {
            "version": "18.3.1",
            "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
            "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
            "version": "19.2.8",
            "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz",
            "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==",
            "license": "MIT",
            "dependencies": {
                "loose-envify": "^1.1.0"
            },
            "engines": {
                "node": ">=0.10.0"
            }
package.json
@@ -31,6 +31,7 @@
        "@wordpress/plugins": "^7.54.0",
        "@wordpress/upload-media": "^0.39.0",
        "@wordpress/url": "^4.54.0",
        "react": "^19.2.8",
        "sass": "^1.103.1"
    }
}
src/_meta/Fields.js
src/_meta/Section.js
File was renamed from src/editor-fields/Section.js
@@ -6,7 +6,6 @@
    id = 'jvb-section-'+id;
    const setField = (name, value) => setMeta({ ...meta, [name]: value });
    console.log(fields, 'fields');
    return (
        <PanelBody name={id} title={name} initialOpen={isOpen}>
            {
src/_meta/SidePanel.js
src/_meta/fields/checkbox-field.js
src/_meta/fields/date-field.js
src/_meta/fields/datetime-field.js
File was renamed from src/editor-fields/fields/datetime-field.js
@@ -3,7 +3,7 @@
const DateTimeField = ({field, value, onChange}) => {
    const [ date, setDate ] = useState( new Date() );
    console.log(field);
    return (
        <div className="components-base-control" id={field.name}>
src/_meta/fields/location-field.js
src/_meta/fields/repeater-field.js
src/_meta/fields/select-field.js
src/_meta/fields/selector-field.js
File was renamed from src/editor-fields/fields/selector-field.js
@@ -25,7 +25,7 @@
const SelectorField = ({ field, value, onChange }) => {
    const subtype = resolveSubtype(field);
    const canCreate = subtype === 'taxonomy';
    console.log(field);
    const buildPath = searchPath(field);
    const ids = Array.isArray(value) ? value : value ? value.split(',') : [];
@@ -90,17 +90,17 @@
        if (pendingCreate && canCreate && !creating) {
            setCreating(true);
            apiFetch({ path: `/wp/v2/${field.taxonomy}`, method: 'POST', data: createPayload(field, subtype, search) })
            apiFetch({ path: `/wp/v2/${field.taxonomy}`, method: 'POST', data: createPayload(subtype, search) })
                .then((item) => {
                    const label = labelOf(item, subtype);
                    setIdByLabel((prev) => ({ ...prev, [label]: item.id }));
                    setTokens((prev) => {
                        const finalTokens = prev.filter((t) => t !== createLabel).concat(label);
                        const newIds = finalTokens.map((l) => idByLabel[l] ?? options[l] ?? (l === label ? item.id : undefined))
                    const finalTokens = tokens.filter((t) => t !== createLabel).concat(label);
                    const newIds = finalTokens
                        .map((l) => idByLabel[l] ?? options[l] ?? (l === label ? item.id : undefined))
                            .filter((id) => id !== undefined);
                    setIdByLabel((prev) => ({ ...prev, [label]: item.id }));
                    setTokens(finalTokens);
                        commitIds(newIds);
                        return finalTokens;
                    });
                })
                .catch(() => {})
                .finally(() => setCreating(false));
src/_meta/fields/switch-field.js
src/_meta/fields/text-field.js
src/_meta/fields/time-field.js
New file
@@ -0,0 +1,19 @@
import { BaseControl } from '@wordpress/components';
const TimeField = ({field, value, onChange}) => {
    return (
        <BaseControl label={field.label} help={field.description} id={field.name}>
            <input
                type="time"
                id={field.name}
                value={value ?? ''}
                onChange={(e) => onChange(e.target.value)}
            />
        </BaseControl>
    );
};
export default TimeField;
src/_meta/fields/upload-field.js
src/_meta/index.js
src/editor-fields/fields/time-field.js
File was deleted
src/meta/block.json
New file
@@ -0,0 +1,23 @@
{
    "$schema": "https://schemas.wp.org/trunk/block.json",
    "apiVersion": 3,
    "name": "jvb/meta",
    "version": "0.1.0",
    "title": "Custom Field",
    "category": "jvb",
    "icon": "edit-large",
    "description": "Add a specific field from this content",
    "example": {},
    "supports": {
        "align": ["wide", "full"]
    },
    "textdomain": "jvb",
    "selectors": {
        "root": ".jvb-meta"
    },
    "editorScript": "file:./index.js",
    "editorStyle": "file:./index.css",
    "style": "file:./style-index.css",
    "render": "file:./render.php",
    "viewScript": "file:./view.js"
}
src/meta/edit.js
New file
@@ -0,0 +1,38 @@
/**
 * Retrieves the translation of text.
 *
 * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-i18n/
 */
import { __ } from '@wordpress/i18n';
/**
 * React hook that is used to mark the block wrapper element.
 * It provides all the necessary props like the class name.
 *
 * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-block-editor/#useblockprops
 */
import { useBlockProps } from '@wordpress/block-editor';
/**
 * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files.
 * Those files can contain any CSS code that gets applied to the editor.
 *
 * @see https://www.npmjs.com/package/@wordpress/scripts#using-css
 */
import './editor.scss';
/**
 * The edit function describes the structure of your block in the context of the
 * editor. This represents what the editor will render when the block is used.
 *
 * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#edit
 *
 * @return {Element} Element to render.
 */
export default function Edit() {
    return (
        <p { ...useBlockProps() }>
            { __( 'Will output the menu', 'jvb' ) }
        </p>
    );
}
src/meta/editor.scss
src/meta/index.js
New file
@@ -0,0 +1,33 @@
/**
 * Registers a new block provided a unique name and an object defining its behavior.
 *
 * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/
 */
import { registerBlockType } from '@wordpress/blocks';
/**
 * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files.
 * All files containing `style` keyword are bundled together. The code used
 * gets applied both to the front of your site and to the editor.
 *
 * @see https://www.npmjs.com/package/@wordpress/scripts#using-css
 */
import './style.scss';
/**
 * Internal dependencies
 */
import Edit from './edit';
import metadata from './block.json';
/**
 * Every block starts by registering a new block type definition.
 *
 * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/
 */
registerBlockType( metadata.name, {
    /**
     * @see ./edit.js
     */
    edit: Edit,
} );
src/meta/index.php
src/meta/render.php
New file
@@ -0,0 +1,9 @@
<?php
if (!defined('ABSPATH')) {
    exit; // Exit if accessed directly
}
function jvbRenderMetaBlock() {
}
src/meta/style.scss
src/meta/view.js
webpack.config.js
@@ -4,6 +4,6 @@
    ...defaultConfig,
    entry: {
        ...defaultConfig.entry(),
        '/_meta/fields': './src/editor-fields/index.js',
        '/_meta/fields': './src/_meta/index.js',
    },
};