From 8318f60480aedd4aa1e64dc35468247dfbba9316 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Wed, 09 Sep 2026 22:44:54 +0000
Subject: [PATCH] =Simplified event fields a bit, removed the recurrence for now to get Northeh done. Scaffolded a basic block to select a specific field to render anywhere.
---
src/meta/block.json | 3
package-lock.json | 892 +++++++++++++++++--------------------
inc/registrar/helpers/AddCustomFields.php | 27
build/meta/index.asset.php | 2
build/_meta/fields.js | 2
inc/registrar/helpers/MakeCalendarType.php | 207 ++++----
src/meta/index.js | 31 -
build/_meta/fields.asset.php | 2
build/meta/index.js | 2
src/_meta/fields/selector-field.js | 6
/dev/null | 1
src/_meta/fields/group-field.js | 31 +
src/_meta/fields/repeater-field.css | 3
src/_meta/fields/repeater-field.js | 1
build/meta/block.json | 6
inc/meta/Sanitizer.php | 5
package.json | 3
src/_meta/Fields.js | 4
src/_meta/SidePanel.js | 1
src/meta/edit.js | 83 ++-
src/_meta/fields/date-field.js | 12
21 files changed, 659 insertions(+), 665 deletions(-)
diff --git a/build/_meta/fields.asset.php b/build/_meta/fields.asset.php
index 7a36d24..3a0b921 100644
--- a/build/_meta/fields.asset.php
+++ b/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' => '6043ce2edcd946554582');
+<?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' => 'b289cda300edfd519494');
diff --git a/build/_meta/fields.js b/build/_meta/fields.js
index 993d9e1..372eb41 100644
--- a/build/_meta/fields.js
+++ b/build/_meta/fields.js
@@ -1 +1 @@
-(()=>{"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})})();
\ No newline at end of file
+(()=>{"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})},p=({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))]})},u=window.React,m=e=>{if(!e)return null;const[l,t,n]=e.split("-").map(Number);return new Date(l,t-1,n)},h=e=>{if(e.description&&0!==e.description.length)return(0,o.jsx)("p",{className:"hint",children:e.description})},v=e=>{if(e.description&&0!==e.description.length)return(0,o.jsx)("p",{className:"hint",children:e.description})},b=window.wp.element,j=(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,x=window.wp.mediaUtils,g=window.wp.blockEditor,f=window.wp.apiFetch;var w=e.n(f);const y={image:"image",video:"video",document:"application",all:""},C=({id:e,onRemove:l})=>{const[t,n]=(0,b.useState)(null);(0,b.useEffect)(()=>{let l=!1;if(e)return w()({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"})]})},_=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},N=(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:p,set:p,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})=>(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:m(l),onChange:t,help:e.description}),h(e)]}),time:({field:e,value:l,onChange:t})=>(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:l??"",onChange:e=>t(e.target.value)})}),datetime:({field:e,value:l,onChange:t})=>{const[n,a]=(0,u.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:n,onChange:t,label:e.label,help:e.description,value:l??"",is12Hour:!0}),v(e)]})},repeater:({field:e,value:l,onChange:t,meta:n})=>{const a=Array.isArray(l)?l:[],i=e.fields||{},[r,d]=(0,b.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:j(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)(R,{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=y[e.subtype]?[y[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)(C,{id:e,onRemove:r},e)):!!a&&(0,o.jsx)(C,{id:a,onRemove:r})}),(0,o.jsx)(g.MediaUploadCheck,{children:(0,o.jsx)(x.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,i=(e=>{const l=k(e);return"user"===l?e=>(0,_.addQueryArgs)("/wp/v2/users",{search:e,per_page:20}):"taxonomy"===l?l=>(0,_.addQueryArgs)(`/wp/v2/${e.taxonomy}`,{search:l,per_page:20,hide_empty:!1}):l=>(0,_.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,b.useState)([]),[p,u]=(0,b.useState)({}),[m,h]=(0,b.useState)({}),[v,j]=(0,b.useState)(""),[x,g]=(0,b.useState)(!1),f=v?`Not found. Create "${v}"?`:null;(0,b.useEffect)(()=>{y("");let e=!1;if(r.length)return Promise.all(r.map(e=>w()({path:i("")+`&include=${e}`}))).then(l=>{if(e)return;const t={},a=[];l.flat().forEach(e=>{const l=N(e,n);t[l]=e.id,a.push(l)}),u(e=>({...e,...t})),c(a)}).catch(()=>{}),()=>{e=!0};c([])},[JSON.stringify(r)]);const y=(0,b.useCallback)(e=>{j(e),w()({path:i(e)}).then(e=>{const l={};e.forEach(e=>{l[N(e,n)]=e.id}),h(l)}).catch(()=>{})},[i,n]),C=l=>{const n=1===e.max;t(n?l[l.length-1]??0:(e.max?l.slice(0,e.max):l).join(","))},A=v&&!Object.keys(m).some(e=>e.toLowerCase()===v.toLowerCase()),O=1===e.max&&d.length?[]:[...Object.keys(m),...a&&A?[f]:[]];return(0,o.jsx)(s.FormTokenField,{label:e.label,help:e.description,value:d,suggestions:O,onChange:l=>{if(l.find(e=>e===f)&&a&&!x)return g(!0),void w()({path:`/wp/v2/${e.taxonomy}`,method:"POST",data:S(n,v)}).then(e=>{const l=N(e,n),t=d.filter(e=>e!==f).concat(l),a=t.map(t=>p[t]??m[t]??(t===l?e.id:void 0)).filter(e=>void 0!==e);u(t=>({...t,[l]:e.id})),c(t),C(a)}).catch(()=>{}).finally(()=>g(!1));const t=l.filter(e=>void 0!==p[e]||void 0!==m[e]),i=t.map(e=>p[e]??m[e]);c(t),u(e=>({...e,...m})),C(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,b.useState)(a.address||""),[d,c]=(0,b.useState)([]),[p,u]=(0,b.useState)(!1),m=(0,t.useDebounce)(e=>{if(!e)return c([]);u(!0),w()({path:`jvb/v1/geocode?q=${encodeURIComponent(e)}`}).then(c).finally(()=>u(!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)}}),p&&(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"})]})]})]})},group:({field:e,value:l,onChange:t})=>{const n=l||{};return(0,o.jsxs)("div",{className:"jvb-group-field",id:e.name,children:[e.label&&(0,o.jsx)("h4",{className:"components-base-control__label",children:e.label}),Object.entries(e.fields||{}).map(([e,l])=>(0,o.jsx)(R,{field:{...l,name:e},value:n[e],onChange:l=>((e,l)=>{t({...n,[e]:l})})(e,l),meta:n},e)),e.description&&(0,o.jsx)("p",{className:"hint",children:e.description})]})}},O={"=":(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)},R=({id:e,field:l,value:t,onChange:n,meta:a})=>{if(!((e,l)=>!e?.field||(O[e.operator]||O["="])(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,(0,o.jsx)(s.PanelBody,{name:e,title:l,initialOpen:i,children:t.map(e=>(0,o.jsx)(R,{field:e,value:n?.[e.name],onChange:l=>((e,l)=>a({...n,[e]:l}))(e.name,l),meta:n},e.name))})),F=()=>(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()})),D=(0,n.withDispatch)(e=>({setMetaFields(l){e("core/editor").editPost({meta:l})}})),z=({section:e,fields:l})=>l.filter(l=>e.fields.includes(l.name)),B=e=>0===e,L=(0,t.compose)([T,D])(({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)(F,{}),children:"Additional Fields"}),(0,o.jsx)(a.PluginSidebar,{name:"jvb-meta-fields",icon:(0,o.jsx)(F,{}),title:"Additional Fields",children:Object.values(s).map((e,l)=>(0,o.jsx)(P,{name:e.title,fields:z({section:e,fields:n}),meta:r,setMeta:d,isOpen:B(l)},e.id))})]}):null});(0,l.registerPlugin)("jvb-meta-fields",{render:L})})();
\ No newline at end of file
diff --git a/build/meta/block.json b/build/meta/block.json
index 13bb4d0..af5f740 100644
--- a/build/meta/block.json
+++ b/build/meta/block.json
@@ -8,6 +8,12 @@
"icon": "edit-large",
"description": "Add a specific field from this content",
"example": {},
+ "attributes": {
+ "fieldName": {
+ "type": "string",
+ "default": ""
+ }
+ },
"supports": {
"align": [
"wide",
diff --git a/build/meta/index-rtl.css b/build/meta/index-rtl.css
deleted file mode 100644
index 8b13789..0000000
--- a/build/meta/index-rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/build/meta/index.asset.php b/build/meta/index.asset.php
index f416186..3f6afe3 100644
--- a/build/meta/index.asset.php
+++ b/build/meta/index.asset.php
@@ -1 +1 @@
-<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => '6cfb5d257a0c1c7f9d85');
+<?php return array('dependencies' => array('react', 'react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-media-utils', 'wp-url'), 'version' => '4fc77565e544173d57f5');
diff --git a/build/meta/index.css b/build/meta/index.css
deleted file mode 100644
index 8b13789..0000000
--- a/build/meta/index.css
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/build/meta/index.js b/build/meta/index.js
index 0415fb5..c97a964 100644
--- a/build/meta/index.js
+++ b/build/meta/index.js
@@ -1 +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)})();
\ No newline at end of file
+(()=>{"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 a in t)e.o(t,a)&&!e.o(l,a)&&Object.defineProperty(l,a,{enumerable:!0,get:t[a]})},o:(e,l)=>Object.hasOwn(e,l)},l=window.wp.blocks,t=window.wp.blockEditor,a=window.wp.components,n=window.wp.coreData,i=window.wp.data,s=window.ReactJSXRuntime,o={text:"text",email:"email",tel:"tel",url:"url",number:"number"},r=({field:e,value:l,onChange:t})=>"textarea"===e.type?(0,s.jsx)(a.TextareaControl,{label:e.label,help:e.description,value:l??"",onChange:t,id:e.name}):(0,s.jsx)(a.TextControl,{label:e.label,help:e.description,type:o[e.type]||"text",value:l??"",onChange:t,required:e.required,id:e.name}),d=({field:e,value:l,onChange:t})=>{const n=Object.entries(e.options||{}).map(([e,l])=>({label:l,value:e}));return"radio"===e.type?(0,s.jsx)(a.RadioControl,{label:e.label,help:e.description,selected:l,options:n,onChange:t,id:e.name}):(0,s.jsx)(a.SelectControl,{label:e.label,help:e.description,value:l??"",options:[{label:"— Select —",value:""},...n],onChange:t,id:e.name})},c=({field:e,value:l,onChange:t})=>{const n=Array.isArray(l)?l:[];return(0,s.jsxs)("fieldset",{id:e.name,children:[(0,s.jsx)("legend",{className:"jvb-field-label",children:e.label}),Object.entries(e.options||{}).map(([e,l])=>(0,s.jsx)(a.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,u=e=>{if(!e)return null;const[l,t,a]=e.split("-").map(Number);return new Date(l,t-1,a)},m=e=>{if(e.description&&0!==e.description.length)return(0,s.jsx)("p",{className:"hint",children:e.description})},h=e=>{if(e.description&&0!==e.description.length)return(0,s.jsx)("p",{className:"hint",children:e.description})},b=window.wp.element,v=(e,l,t)=>e?.includes("{{")?e.replace(/{{(.*?)}}/g,(e,t)=>{const a=l[t];return void 0===a?"":Array.isArray(a)?a.join(", "):String(a)}):e,j=window.wp.mediaUtils,x=window.wp.apiFetch;var f=e.n(x);const g={image:"image",video:"video",document:"application",all:""},y=({id:e,onRemove:l})=>{const[t,n]=(0,b.useState)(null);(0,b.useEffect)(()=>{let l=!1;if(e)return f()({path:`/wp/v2/media/${e}`}).then(e=>!l&&n(e)).catch(()=>{}),()=>{l=!0}},[e]);const i=t?.media_details?.sizes?.thumbnail?.source_url||t?.source_url,o="image"===t?.media_type;return(0,s.jsxs)("div",{className:"jvb-upload-thumb",children:[o&&i?(0,s.jsx)("img",{src:i,alt:t?.alt_text||""}):(0,s.jsx)("div",{className:"jvb-upload-thumb-placeholder",children:t?.title?.rendered||`#${e}`}),(0,s.jsx)(a.Button,{variant:"link",isDestructive:!0,onClick:()=>l(e),children:"Remove"})]})},C=window.wp.url,w=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,k=window.wp.compose,N={text:r,email:r,tel:r,url:r,number:r,textarea:r,select:d,radio:d,checkbox:c,set:c,true_false:({field:e,value:l,onChange:t})=>(0,s.jsx)(a.ToggleControl,{label:e.label,help:e.description,checked:!!l,onChange:t,id:e.name}),date:({field:e,value:l,onChange:t})=>(0,s.jsxs)("div",{className:"components-base-control",id:e.name,children:[(0,s.jsx)("label",{className:"components-base-control__label",children:e.label}),(0,s.jsx)(a.DatePicker,{currentDate:u(l),onChange:t,help:e.description}),m(e)]}),time:({field:e,value:l,onChange:t})=>(0,s.jsx)(a.BaseControl,{label:e.label,help:e.description,id:e.name,children:(0,s.jsx)("input",{type:"time",id:e.name,value:l??"",onChange:e=>t(e.target.value)})}),datetime:({field:e,value:l,onChange:t})=>{const[n,i]=(0,p.useState)(new Date);return(0,s.jsxs)("div",{className:"components-base-control",id:e.name,children:[(0,s.jsx)("label",{className:"components-base-control__label",children:e.label}),(0,s.jsx)(a.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 i=Array.isArray(l)?l:[],o=e.fields||{},[r,d]=(0,b.useState)(null);return(0,s.jsxs)("div",{className:"jvb-repeater-field",id:e.name,children:[(0,s.jsx)("p",{className:"jvb-field-label",children:e.label}),(0,s.jsx)(a.Panel,{children:i.map((l,c)=>(0,s.jsxs)(a.PanelBody,{title:v(e.row_label,l)||`Row ${c+1}`,initialOpen:r===c,onToggle:()=>d(r===c?null:c),children:[Object.entries(o).map(([e,a])=>(0,s.jsx)(O,{field:{...a,name:e},value:l[e],onChange:l=>((e,l,a)=>{const n=i.map((t,n)=>n===e?{...t,[l]:a}:t);t(n)})(c,e,l),meta:n},e)),(0,s.jsx)(a.Button,{variant:"link",isDestructive:!0,onClick:()=>(e=>t(i.filter((l,t)=>t!==e)))(c),children:"Remove"})]},c))}),(0,s.jsx)(a.Button,{variant:"secondary",onClick:()=>{return t([...i,(e=o,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:n})=>{const i=e.multiple||"gallery"===e.type,o=i?Array.isArray(l)?l:[]:l,r=g[e.subtype]?[g[e.subtype]]:"",d=e=>{n(i?o.filter(l=>l!==e):0)};return(0,s.jsxs)("div",{className:"jvb-upload-field",id:e.name,children:[(0,s.jsx)("p",{className:"jvb-field-label",children:e.label}),(0,s.jsx)("div",{className:i?"jvb-upload-grid":"jvb-upload-single",children:i?o.map(e=>(0,s.jsx)(y,{id:e,onRemove:d},e)):!!o&&(0,s.jsx)(y,{id:o,onRemove:d})}),(0,s.jsx)(t.MediaUploadCheck,{children:(0,s.jsx)(j.MediaUpload,{onSelect:e=>n(i?e.map(e=>e.id):e.id),allowedTypes:r,multiple:i,value:i?o:o||void 0,render:({open:l})=>(0,s.jsxs)(a.Button,{variant:"secondary",onClick:l,children:[(i?o.length:o)?"Change":"Select"," ",e.label]})})})]})},selector:({field:e,value:l,onChange:t})=>{const n=w(e),i="taxonomy"===n,o=(e=>{const l=w(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,hide_empty:!1}):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,b.useState)([]),[p,u]=(0,b.useState)({}),[m,h]=(0,b.useState)({}),[v,j]=(0,b.useState)(""),[x,g]=(0,b.useState)(!1),y=v?`Not found. Create "${v}"?`:null;(0,b.useEffect)(()=>{k("");let e=!1;if(r.length)return Promise.all(r.map(e=>f()({path:o("")+`&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)}),u(e=>({...e,...t})),c(a)}).catch(()=>{}),()=>{e=!0};c([])},[JSON.stringify(r)]);const k=(0,b.useCallback)(e=>{j(e),f()({path:o(e)}).then(e=>{const l={};e.forEach(e=>{l[_(e,n)]=e.id}),h(l)}).catch(()=>{})},[o,n]),N=l=>{const a=1===e.max;t(a?l[l.length-1]??0:(e.max?l.slice(0,e.max):l).join(","))},A=v&&!Object.keys(m).some(e=>e.toLowerCase()===v.toLowerCase()),O=1===e.max&&d.length?[]:[...Object.keys(m),...i&&A?[y]:[]];return(0,s.jsx)(a.FormTokenField,{label:e.label,help:e.description,value:d,suggestions:O,onChange:l=>{if(l.find(e=>e===y)&&i&&!x)return g(!0),void f()({path:`/wp/v2/${e.taxonomy}`,method:"POST",data:S(n,v)}).then(e=>{const l=_(e,n),t=d.filter(e=>e!==y).concat(l),a=t.map(t=>p[t]??m[t]??(t===l?e.id:void 0)).filter(e=>void 0!==e);u(t=>({...t,[l]:e.id})),c(t),N(a)}).catch(()=>{}).finally(()=>g(!1));const t=l.filter(e=>void 0!==p[e]||void 0!==m[e]),a=t.map(e=>p[e]??m[e]);c(t),u(e=>({...e,...m})),N(a)},onInputChange:k,maxLength:e.max||void 0,id:e.name,__experimentalExpandOnFocus:!0})},location:({field:e,value:l,onChange:t})=>{const n=l||{},[i,o]=(0,b.useState)(n.address||""),[r,d]=(0,b.useState)([]),[c,p]=(0,b.useState)(!1),u=(0,k.useDebounce)(e=>{if(!e)return d([]);p(!0),f()({path:`jvb/v1/geocode?q=${encodeURIComponent(e)}`}).then(d).finally(()=>p(!1))},400);return(0,s.jsxs)("div",{className:"jvb-location-field",id:e.name,children:[(0,s.jsx)(a.TextControl,{label:e.label,value:i,onChange:e=>{o(e),u(e)}}),c&&(0,s.jsx)(a.Spinner,{}),!!r.length&&(0,s.jsxs)("div",{className:"jvb-location-results",children:[r.map(e=>(0,s.jsx)(a.Button,{variant:"tertiary",onClick:()=>(e=>{const l=e.address||{},a={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)};t(a),o(a.address),d([])})(e),style:{display:"block",textAlign:"left"},children:e.display_name},e.place_id)),!!n.lat&&(0,s.jsxs)("p",{className:"jvb-location-summary",children:[n.address,", ",n.city,", ",n.province," ",n.postal_code,", ",n.country,(0,s.jsx)("br",{}),(0,s.jsx)(a.Button,{variant:"link",isDestructive:!0,onClick:()=>{t({}),o(""),d([])},children:"Clear"})]})]})]})},group:({field:e,value:l,onChange:t})=>{const a=l||{};return(0,s.jsxs)("div",{className:"jvb-group-field",id:e.name,children:[e.label&&(0,s.jsx)("h4",{className:"components-base-control__label",children:e.label}),Object.entries(e.fields||{}).map(([e,l])=>(0,s.jsx)(O,{field:{...l,name:e},value:a[e],onChange:l=>((e,l)=>{t({...a,[e]:l})})(e,l),meta:a},e)),e.description&&(0,s.jsx)("p",{className:"hint",children:e.description})]})}},A={"=":(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:i})=>{if(!((e,l)=>!e?.field||(A[e.operator]||A["="])(l?.[e.field],e.value))(l.condition,i))return null;const o=N[l.type];return o?(0,s.jsx)(a.PanelRow,{children:(0,s.jsx)(o,{field:l,value:t,onChange:n})}):null},P=JSON.parse('{"$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":{},"attributes":{"fieldName":{"type":"string","default":""}},"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"}');(0,l.registerBlockType)(P,{edit:({attributes:e,setAttributes:l})=>{const{fieldName:o}=e,{fields:r}=window.jvbFieldConfig||{},d=(0,i.useSelect)(e=>e("core/editor").getCurrentPostType(),[]),[c,p]=(0,n.useEntityProp)("postType",d,"meta"),u=(r||[]).find(e=>e.name===o),m=(0,t.useBlockProps)();return(0,s.jsxs)("div",{...m,children:[(0,s.jsx)(t.InspectorControls,{children:(0,s.jsx)(a.PanelBody,{title:"Field",children:(0,s.jsx)(a.SelectControl,{label:"Meta field",value:o,options:[{label:"Select a field…",value:""},...(r||[]).map(e=>({label:e.label||e.name,value:e.name}))],onChange:e=>l({fieldName:e})})})}),!u&&(0,s.jsx)(a.Placeholder,{label:"Meta Field",instructions:"Select a field in the block settings."}),u&&(0,s.jsx)(O,{field:u,value:c?.[o],onChange:e=>p({...c,[o]:e}),meta:c})]})},save:()=>null})})();
\ No newline at end of file
diff --git a/build/meta/style-index-rtl.css b/build/meta/style-index-rtl.css
deleted file mode 100644
index 8b13789..0000000
--- a/build/meta/style-index-rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/build/meta/style-index.css b/build/meta/style-index.css
deleted file mode 100644
index 8b13789..0000000
--- a/build/meta/style-index.css
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/inc/meta/Sanitizer.php b/inc/meta/Sanitizer.php
index 218a1ac..fa71881 100644
--- a/inc/meta/Sanitizer.php
+++ b/inc/meta/Sanitizer.php
@@ -205,9 +205,12 @@
return implode(',', $valid_ids);
}
- protected static function sanitizeLocation(array $value, array $field_config):array
+ protected static function sanitizeLocation(array $value, array $field_config):?array
{
error_log('Location field to sanitize: '.print_r($value, true));
+ if (empty($value['address']??'')) {
+ return MetaTypeManager::getType('location')['default'];
+ }
return [
'address' => sanitize_text_field($value['address'] ?? ''),
'lat' => (float)($value['lat'] ?? 0),
diff --git a/inc/registrar/helpers/AddCustomFields.php b/inc/registrar/helpers/AddCustomFields.php
index 292d6e2..c9709ff 100644
--- a/inc/registrar/helpers/AddCustomFields.php
+++ b/inc/registrar/helpers/AddCustomFields.php
@@ -73,8 +73,15 @@
foreach ($this->registrar->getFields(false) as $name => $config) {
$metaType = $this->getSchemaType($config);
- $schema = $metaType === 'array' ? $this->determineSchema($config) : true;
+ $rawSchema = in_array($metaType, ['array', 'object'], true)
+ ? $this->determineSchema($config)
+ : true;
+ $schema = is_array($rawSchema) ? $this->schema($rawSchema) : $rawSchema;
+ //Allow for null
+ if ($metaType === 'object') {
+ $metaType = ['object', 'null'];
+ }
register_post_meta($this->registrar->getBased(), jvbCheckBase($name), [
'single' => true,
'type' => $metaType,
@@ -163,16 +170,16 @@
$required[] = $name;
}
- $schema = $this->determineSchema($c);
- if (is_array($schema)) {
- if (array_key_exists('default', $schema)) {
- $args['default'] = $schema['default'];
+ $tmp = $this->determineSchema($c);
+ if (is_array($tmp)) {
+ if (array_key_exists('default', $tmp)) {
+ $args['default'] = $tmp['default'];
}
- if (array_key_exists('enum', $schema)) {
- $args['enum'] = $schema['enum'];
+ if (array_key_exists('enum', $tmp)) {
+ $args['enum'] = $tmp['enum'];
}
- if (array_key_exists('format', $schema)) {
- $args['format'] = $schema['format'];
+ if (array_key_exists('format', $tmp)) {
+ $args['format'] = $tmp['format'];
}
}
if (array_key_exists('default', $c)) {
@@ -201,7 +208,7 @@
protected function schemaLocation(array $config):array|true
{
return [
- 'type' => 'object',
+ 'type' => ['object', 'null'],
'properties' => [
'address' => [
'type' => 'string'
diff --git a/inc/registrar/helpers/MakeCalendarType.php b/inc/registrar/helpers/MakeCalendarType.php
index 1c2d011..53909e9 100644
--- a/inc/registrar/helpers/MakeCalendarType.php
+++ b/inc/registrar/helpers/MakeCalendarType.php
@@ -101,6 +101,7 @@
'label' => 'Daily Schedule',
'description' => 'Set specific times for multi-day events',
'add_label' => 'Add Day',
+ 'row_label' => 'New Day',
'condition' => [
'field' => 'make_multiple',
'operator' => '==',
@@ -162,107 +163,115 @@
'label' => 'Drop-ins Welcome?',
'default' => true,
],
- 'recurrence' => [
- 'type' => 'group',
- 'label' => 'Event Recurrence',
- 'condition' => [
- 'field' => 'status',
- 'operator' => '==',
- 'value' => 'repeat',
- ],
- 'fields' => [
- 'recurrence_type' => [
- 'type' => 'select',
- 'label' => 'Repeats',
- 'options' => [
- 'daily' => 'Daily',
- 'weekly' => 'Weekly',
- 'monthly' => 'Monthly',
- 'custom' => 'Custom'
- ]
- ],
- 'recurrence_interval' => [
- 'type' => 'number',
- 'label' => 'Every',
- 'description' => 'Repeat every X days/weeks/months',
- 'default' => 1,
- ],
- 'recurrence_days' => [
- 'type' => 'set',
- 'label' => 'On These Days',
- 'options' => [
- 'monday' => 'Monday',
- 'tuesday' => 'Tuesday',
- 'wednesday' => 'Wednesday',
- 'thursday' => 'Thursday',
- 'friday' => 'Friday',
- 'saturday' => 'Saturday',
- 'sunday' => 'Sunday'
- ],
- 'condition' => [
- 'field' => 'recurrence_type',
- 'operator' => '==',
- 'value' => 'weekly'
- ]
- ],
- 'recurrence_ends' => [
- 'type' => 'group',
- 'label' => 'Recurrence Ends',
- 'fields' => [
- 'type' => [
- 'type' => 'select',
- 'label' => 'Recurrence Ends',
- 'options' => [
- 'never' => 'Never',
- 'after' => 'After X occurrences',
- 'on' => 'On date'
- ]
- ],
- 'count' => [
- 'type' => 'number',
- 'label' => 'Number of occurrences',
- 'condition' => [
- 'field' => 'type',
- 'operator' => '==',
- 'value' => 'after'
- ]
- ],
- 'date' => [
- 'type' => 'date',
- 'label' => 'End date',
- 'condition' => [
- 'field' => 'type',
- 'operator' => '==',
- 'value' => 'on'
- ]
- ]
- ],
- ],
- 'rsvp_required' => [
- 'type' => 'true_false',
- 'label' => 'RSVP Required?'
- ],
- 'rsvp_limit' => [
- 'type' => 'number',
- 'label' => 'RSVP Limit',
- 'condition' => [
- 'field' => 'rsvp_required',
- 'operator' => '==',
- 'value' => 1
- ]
- ],
- 'rsvp_deadline' => [
- 'type' => 'datetime',
- 'label' => 'RSVP Deadline',
- 'condition' => [
- 'field' => 'rsvp_required',
- 'operator' => '==',
- 'value' => 1
- ]
- ],
+ //TODO
+ //RECURRENCE
+// 'make_recurring' => [
+// 'type' => 'true_false',
+// 'label' => 'Make Repeating Event',
+// 'default' => 0,
+// ],
+// 'recurrence_type' => [
+// 'type' => 'select',
+// 'label' => 'Repeats',
+// 'options' => [
+// 'daily' => 'Daily',
+// 'weekly' => 'Weekly',
+// 'monthly' => 'Monthly',
+// 'custom' => 'Custom'
+// ],
+// 'condition' => [
+// 'field' => 'make_recurring',
+// 'operator' => '==',
+// 'value' => '1',
+// ],
+// ],
+// 'recurrence_interval' => [
+// 'type' => 'number',
+// 'label' => 'Repeat',
+// 'description' => 'Repeat every X days/weeks/months',
+// 'default' => 1,
+//
+// 'condition' => [
+// 'field' => 'make_recurring',
+// 'operator' => '==',
+// 'value' => '1',
+// ],
+// ],
+// 'recurrence_days' => [
+// 'type' => 'set',
+// 'label' => 'On These Days',
+// 'options' => [
+// 'monday' => 'Monday',
+// 'tuesday' => 'Tuesday',
+// 'wednesday' => 'Wednesday',
+// 'thursday' => 'Thursday',
+// 'friday' => 'Friday',
+// 'saturday' => 'Saturday',
+// 'sunday' => 'Sunday'
+// ],
+// 'condition' => [
+// 'field' => 'recurrence_type',
+// 'operator' => '==',
+// 'value' => 'weekly'
+// ]
+// ],
+// 'recurrence_ends' => [
+// 'type' => 'select',
+// 'label' => 'Recurrence Ends',
+// 'options' => [
+// 'never' => 'Never',
+// 'after' => 'After X occurrences',
+// 'on' => 'On date'
+// ],
+// 'condition' => [
+// 'field' => 'make_recurring',
+// 'operator' => '==',
+// 'value' => '1',
+// ],
+// ],
+// 'recurrence_ends_number' => [
+// 'type' => 'number',
+// 'label' => 'Number of occurrences',
+// 'condition' => [
+// 'field' => 'recurrence_ends',
+// 'operator' => '==',
+// 'value' => 'after',
+// ],
+// ],
+// 'recurrence_ends_date' => [
+// 'type' => 'date',
+// 'label' => 'End date',
+// 'condition' => [
+// 'field' => 'recurrence_ends',
+// 'operator' => '==',
+// 'value' => 'on'
+// ]
+// ],
+
+ //RSVP
+ 'rsvp_required' => [
+ 'type' => 'true_false',
+ 'label' => 'RSVP Required?'
+ ],
+ 'rsvp_limit' => [
+ 'type' => 'number',
+ 'label' => 'RSVP Limit',
+ 'condition' => [
+ 'field' => 'rsvp_required',
+ 'operator' => '==',
+ 'value' => 1
]
- ]
+ ],
+ 'rsvp_deadline' => [
+ 'type' => 'datetime',
+ 'label' => 'RSVP Deadline',
+ 'condition' => [
+ 'field' => 'rsvp_required',
+ 'operator' => '==',
+ 'value' => 1
+ ]
+ ],
];
foreach ($fields as $name => $config) {
diff --git a/package-lock.json b/package-lock.json
index a3cfd61..932b7bc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -25,6 +25,9 @@
"sass": "^1.103.1"
},
"devDependencies": {
+ "@dnd-kit/core": "^6.3.1",
+ "@dnd-kit/sortable": "^10.0.0",
+ "@dnd-kit/utilities": "^3.2.2",
"@wordpress/scripts": "^34.2.0"
}
},
@@ -192,6 +195,13 @@
"url": "https://opencollective.com/babel"
}
},
+ "node_modules/@babel/core/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@babel/eslint-parser": {
"version": "7.29.7",
"resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.29.7.tgz",
@@ -2430,6 +2440,63 @@
"node": ">=10.0.0"
}
},
+ "node_modules/@dnd-kit/accessibility": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz",
+ "integrity": "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@dnd-kit/core": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz",
+ "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@dnd-kit/accessibility": "^3.1.1",
+ "@dnd-kit/utilities": "^3.2.2",
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@dnd-kit/sortable": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-10.0.0.tgz",
+ "integrity": "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@dnd-kit/utilities": "^3.2.2",
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "@dnd-kit/core": "^6.3.0",
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@dnd-kit/utilities": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.2.tgz",
+ "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
"node_modules/@dual-bundle/import-meta-resolve": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.2.1.tgz",
@@ -2494,21 +2561,6 @@
"stylis": "4.2.0"
}
},
- "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "license": "MIT"
- },
- "node_modules/@emotion/babel-plugin/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/@emotion/cache": {
"version": "11.14.0",
"resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
@@ -2667,9 +2719,9 @@
}
},
"node_modules/@eslint-community/eslint-plugin-eslint-comments": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.7.2.tgz",
- "integrity": "sha512-LF03qURSwEWm2dz5wtdDCzNk+7Opl0X7q6I3undsaIuNsEiNvRV3BCtqu14Q/6Pzg1tBj44LcxpW2EpSLZStZw==",
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.8.0.tgz",
+ "integrity": "sha512-bzGg2H83F9p55TKzlNUS/LWb1WF2OqdVX67FK1OadDPLVOhabFRERC7TiDJzk//LedaVnRS5uqK/2f/AZ/+VyA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3544,6 +3596,13 @@
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
+ "node_modules/@jest/source-map/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@jest/test-result": {
"version": "30.5.1",
"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.5.1.tgz",
@@ -3602,6 +3661,13 @@
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
+ "node_modules/@jest/transform/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@jest/types": {
"version": "30.5.1",
"resolved": "https://registry.npmjs.org/@jest/types/-/types-30.5.1.tgz",
@@ -3730,14 +3796,14 @@
}
},
"node_modules/@jsonjoy.com/fs-core": {
- "version": "4.69.1",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.69.1.tgz",
- "integrity": "sha512-ohxv/4KZSG03UmjDo//eIjedRRQEcIc0w4IjbyBcMS4mdkvTVMQwfNm1Ivxj4z35xIwpQbJ+1sGKq3l4vTaFiA==",
+ "version": "4.71.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.71.0.tgz",
+ "integrity": "sha512-9DFR/j+bm+tig1abs1CWS1/r0IVjNUdTp/+q6R/PXayXpO1rgbUh7tkanGYP40I0zdxbOreN3tmzBpVHgfMKzg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-node-builtins": "4.69.1",
- "@jsonjoy.com/fs-node-utils": "4.69.1",
+ "@jsonjoy.com/fs-node-builtins": "4.71.0",
+ "@jsonjoy.com/fs-node-utils": "4.71.0",
"thingies": "^2.5.0"
},
"engines": {
@@ -3752,15 +3818,15 @@
}
},
"node_modules/@jsonjoy.com/fs-fsa": {
- "version": "4.69.1",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.69.1.tgz",
- "integrity": "sha512-z9IfdQyZGXL9GB9gv+dXRuMjOjY8s2EmFQ8DhdxxjFJGfPITDDW1j/W84jlBr2SmCc+yv47yYiNQ3powkqWGVQ==",
+ "version": "4.71.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.71.0.tgz",
+ "integrity": "sha512-dRw5ojxzep3lntVGVBLzQUMYj1hXLH+DAz9sK0vKU+594x/zA2nYPOiitlyhYtOJ2nv1FXNq7c55rgwANknIWw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-core": "4.69.1",
- "@jsonjoy.com/fs-node-builtins": "4.69.1",
- "@jsonjoy.com/fs-node-utils": "4.69.1",
+ "@jsonjoy.com/fs-core": "4.71.0",
+ "@jsonjoy.com/fs-node-builtins": "4.71.0",
+ "@jsonjoy.com/fs-node-utils": "4.71.0",
"thingies": "^2.5.0"
},
"engines": {
@@ -3775,17 +3841,17 @@
}
},
"node_modules/@jsonjoy.com/fs-node": {
- "version": "4.69.1",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.69.1.tgz",
- "integrity": "sha512-oIIXv5EfAqj2Wsck9dDa5njbTyCpef4OV+W1h7cYrlph0rRIay91DIhNk+OdiwLgKHoqyBmUWRy3GXAHGiXQZw==",
+ "version": "4.71.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.71.0.tgz",
+ "integrity": "sha512-yt5Ak0otPdHPIlmMvF16aLG2qSZL52EYJ7HOkYpBcIPWw+kmT1FtTSj4oiV2OUkJbG8pLzA+RhMgrlRl85QuBw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-core": "4.69.1",
- "@jsonjoy.com/fs-node-builtins": "4.69.1",
- "@jsonjoy.com/fs-node-utils": "4.69.1",
- "@jsonjoy.com/fs-print": "4.69.1",
- "@jsonjoy.com/fs-snapshot": "4.69.1",
+ "@jsonjoy.com/fs-core": "4.71.0",
+ "@jsonjoy.com/fs-node-builtins": "4.71.0",
+ "@jsonjoy.com/fs-node-utils": "4.71.0",
+ "@jsonjoy.com/fs-print": "4.71.0",
+ "@jsonjoy.com/fs-snapshot": "4.71.0",
"glob-to-regex.js": "^1.0.0",
"thingies": "^2.5.0"
},
@@ -3801,9 +3867,9 @@
}
},
"node_modules/@jsonjoy.com/fs-node-builtins": {
- "version": "4.69.1",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.69.1.tgz",
- "integrity": "sha512-nJddTKNx2FrH+fNRHcHJpCD8bwZlQmYaT8SPEG86kKUae5XzWU5hXdk9T4vKU9yBoXfT2po1A3K/twf8ujBd0g==",
+ "version": "4.71.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.71.0.tgz",
+ "integrity": "sha512-BSzl+QFSxZF58BxGjV1wqCJ+qSn3b2IZnb+z3hDQq6goqOO5RuxF8gRihjsFx17AfpEpa7XjYcP8XpQtDU8RrQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -3818,15 +3884,15 @@
}
},
"node_modules/@jsonjoy.com/fs-node-to-fsa": {
- "version": "4.69.1",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.69.1.tgz",
- "integrity": "sha512-1GTORTbZ2GcshGyaGNgqJAm/INOWyTdHMbeuj2CsBWKYEQYHW4ZvkKHaR+46SO762skZcNVja3dLIfk3s1AdcQ==",
+ "version": "4.71.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.71.0.tgz",
+ "integrity": "sha512-OlXBZKIeDx5bIGcQmn0w+nVkLheCiuQSepKiBAiWSWimSdn8Q6Yc9ih2y8zStcJk31fieqnov9V+o8XTWn/5Rw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-fsa": "4.69.1",
- "@jsonjoy.com/fs-node-builtins": "4.69.1",
- "@jsonjoy.com/fs-node-utils": "4.69.1"
+ "@jsonjoy.com/fs-fsa": "4.71.0",
+ "@jsonjoy.com/fs-node-builtins": "4.71.0",
+ "@jsonjoy.com/fs-node-utils": "4.71.0"
},
"engines": {
"node": ">=10.0"
@@ -3840,13 +3906,13 @@
}
},
"node_modules/@jsonjoy.com/fs-node-utils": {
- "version": "4.69.1",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.69.1.tgz",
- "integrity": "sha512-45kAGpkTUKBNRguS34fdBkXbkBuZM75oU+snf3kRjfQGWHmp93aNKHdtbqrVqxpOdOvWAFnMx+UN6rRSLN2p9g==",
+ "version": "4.71.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.71.0.tgz",
+ "integrity": "sha512-YtzCL3jbKYx6LHxqS9ymJ9Ob7SO9cucI+kpNO3LijGNFEjFbvNsTlHkvFgocAMAjUk96TpQTCsYkzFQi1CdlAA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-node-builtins": "4.69.1",
+ "@jsonjoy.com/fs-node-builtins": "4.71.0",
"glob-to-regex.js": "^1.0.1"
},
"engines": {
@@ -3861,13 +3927,13 @@
}
},
"node_modules/@jsonjoy.com/fs-print": {
- "version": "4.69.1",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.69.1.tgz",
- "integrity": "sha512-As9V7Ra/mHsjHQicor5PTTymcqPb2QRTonedIsMuqMz2JEAZIFdRy+qvi5O15lIe88fASxHQXLIU6H5G01kfxg==",
+ "version": "4.71.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.71.0.tgz",
+ "integrity": "sha512-OhfDSdvyO8uGV0U11OP+mOeVCPgjuP1HqCGR/TdBQLxHoDEWJAK3KOP5fPXo57H7i3G0x0Vmv8xPRHDle4XGzA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-node-utils": "4.69.1",
+ "@jsonjoy.com/fs-node-utils": "4.71.0",
"tree-dump": "^1.1.0"
},
"engines": {
@@ -3882,14 +3948,14 @@
}
},
"node_modules/@jsonjoy.com/fs-snapshot": {
- "version": "4.69.1",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.69.1.tgz",
- "integrity": "sha512-wUffyQdpDSh5RVA+oubKLMcorJfpxUia+ETYPnK6LK+myJ4YVDKWX4UMSjUCapvbhjZRxr6tvwYh4zE3aBpAuA==",
+ "version": "4.71.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.71.0.tgz",
+ "integrity": "sha512-md+Wov365xa9A3nfW9YQTHLcweHHAee/e/0UoVRbldEHxboPJknuO3sEkNVVECO0dTqKra/ERaQylAMRrGWd0Q==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@jsonjoy.com/buffers": "^17.65.0",
- "@jsonjoy.com/fs-node-utils": "4.69.1",
+ "@jsonjoy.com/fs-node-utils": "4.71.0",
"@jsonjoy.com/json-pack": "^17.65.0",
"@jsonjoy.com/util": "^17.65.0"
},
@@ -5333,14 +5399,14 @@
}
},
"node_modules/@playwright/test": {
- "version": "1.62.1",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.62.1.tgz",
- "integrity": "sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==",
+ "version": "1.63.0",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.63.0.tgz",
+ "integrity": "sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"dependencies": {
- "playwright": "1.62.1"
+ "playwright": "1.63.0"
},
"bin": {
"playwright": "cli.js"
@@ -5398,6 +5464,16 @@
}
}
},
+ "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/@polka/url": {
"version": "1.0.0-next.29",
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
@@ -6298,9 +6374,9 @@
"license": "MIT"
},
"node_modules/@tanstack/history": {
- "version": "1.162.1",
- "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.162.1.tgz",
- "integrity": "sha512-DR9t6lfLVdrjgCwpglrR9DR7Ok8/HlXjcOE+goWXF3zyuLUO/ug7vMbSFxTqrQTtbRghJfyhmIZ0S6LhPIy44w==",
+ "version": "1.162.2",
+ "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.162.2.tgz",
+ "integrity": "sha512-Lemp3DJbzNqcin/nZpWxycDaEqySDbnIshDbyHJMMCapD4ZQMe57szRpBXOfzfP6fyWAtHNrLrcBUyANJ6Vlow==",
"license": "MIT",
"engines": {
"node": ">=20.19"
@@ -6311,14 +6387,14 @@
}
},
"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==",
+ "version": "1.170.33",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.170.33.tgz",
+ "integrity": "sha512-iNnI98vH3kO/V4dy6YM0CInhqwWBddU0G5wZK5jiMvr3HsK2avDQSRx3RY/y6v+6zQAqb2kD6hUPHIenrJBTSw==",
"license": "MIT",
"dependencies": {
- "@tanstack/history": "1.162.1",
+ "@tanstack/history": "1.162.2",
"@tanstack/react-store": "^0.9.3",
- "@tanstack/router-core": "1.171.27",
+ "@tanstack/router-core": "1.171.28",
"isbot": "^5.1.22"
},
"engines": {
@@ -6352,12 +6428,12 @@
}
},
"node_modules/@tanstack/router-core": {
- "version": "1.171.27",
- "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.171.27.tgz",
- "integrity": "sha512-wDwSLvoLwIaNcnx9UNcN9Mb7Y8QwCYq1U1RQZwyN186gnkIoIYI2SOxy8VqH1vFigbkHkk4FmwMAQlghPgDK2g==",
+ "version": "1.171.28",
+ "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.171.28.tgz",
+ "integrity": "sha512-PvPWSklhw6i9b0rzScVh0btQsK5u/gBYN3mBHyDzhC/U4LrB3WzPXPkUunQUKvQOGXCp16UEb7Htc/ITGm5DkQ==",
"license": "MIT",
"dependencies": {
- "@tanstack/history": "1.162.1",
+ "@tanstack/history": "1.162.2",
"cookie-es": "^3.0.0",
"seroval": "^1.6.2",
"seroval-plugins": "^1.6.2"
@@ -6841,17 +6917,17 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.69.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.69.0.tgz",
- "integrity": "sha512-t5jQTKPIgVW1PE6dR6H6Qz5gm8zjMlX5/2gRaOGd9eO6V7J+tQc6iWKukEe7dY8u9HyYasQ0yfF0/FSSTEO2gA==",
+ "version": "8.70.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.70.0.tgz",
+ "integrity": "sha512-/v8HZt6RlyIZxB3ntehELOcUcfxKPVGWXnQdJuHRmzrqgF8nQypcC/oxGW+Ot4VGKDq81XugPKxx0n5PBtf9PA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.12.2",
- "@typescript-eslint/scope-manager": "8.69.0",
- "@typescript-eslint/type-utils": "8.69.0",
- "@typescript-eslint/utils": "8.69.0",
- "@typescript-eslint/visitor-keys": "8.69.0",
+ "@typescript-eslint/scope-manager": "8.70.0",
+ "@typescript-eslint/type-utils": "8.70.0",
+ "@typescript-eslint/utils": "8.70.0",
+ "@typescript-eslint/visitor-keys": "8.70.0",
"ignore": "^7.0.5",
"natural-compare": "^1.4.0",
"ts-api-utils": "^2.5.0"
@@ -6864,22 +6940,22 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.69.0",
+ "@typescript-eslint/parser": "^8.70.0",
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.1.0"
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.69.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.69.0.tgz",
- "integrity": "sha512-l4b0DhWioGg6Gt2ebGlvfkFMOjRsauxtsnDRwUSRX1qHq3HdTfQHV8wW9zEXeciai6HfeaKOedQn2Zoofx3WBw==",
+ "version": "8.70.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.70.0.tgz",
+ "integrity": "sha512-zYvrmj9Yxd63UGaXw+kdt6A0F0s0qveJyuatIM77bYC2DE4pgmg7a50u8LR7PRtXd0x+h+Tl3eXabGm06SWd3Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.69.0",
- "@typescript-eslint/types": "8.69.0",
- "@typescript-eslint/typescript-estree": "8.69.0",
- "@typescript-eslint/visitor-keys": "8.69.0",
+ "@typescript-eslint/scope-manager": "8.70.0",
+ "@typescript-eslint/types": "8.70.0",
+ "@typescript-eslint/typescript-estree": "8.70.0",
+ "@typescript-eslint/visitor-keys": "8.70.0",
"debug": "^4.4.3"
},
"engines": {
@@ -6895,14 +6971,14 @@
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.69.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.69.0.tgz",
- "integrity": "sha512-yi4obFrHMmnsesWehHbkg9zMA7Jt8cXT+mKM08G999pH1yT6nqgsHx7MYm0uY1wAj8CqiBXYRJ7WAT0QdQHQXg==",
+ "version": "8.70.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.70.0.tgz",
+ "integrity": "sha512-hFHbTNqhU9G+2eKFXCBVb1tjFT/LceiJ4+HfLO4pTpDI0KHi6iajpcFFkaSQ9gXmCh7n82A0PthaayEdN6mspQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.69.0",
- "@typescript-eslint/types": "^8.69.0",
+ "@typescript-eslint/tsconfig-utils": "^8.70.0",
+ "@typescript-eslint/types": "^8.70.0",
"debug": "^4.4.3"
},
"engines": {
@@ -6917,14 +6993,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.69.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.69.0.tgz",
- "integrity": "sha512-ewfspqWvSxKSOaplqAUNbaSFO0eB6w1EtQ+esfYFRm3614Ty4uNtExkcbgd6nWsXphbqKyf9ZYdbZdv2xEoWEQ==",
+ "version": "8.70.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.70.0.tgz",
+ "integrity": "sha512-8nP3Kwh5hlgZ4FicGvmznAmJe8UL4sdU8tLukrPaMuQmDuk4Y8xYfzu/aYZW4xT2JCgc7H/TpDI5cGlxcWJSqQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.69.0",
- "@typescript-eslint/visitor-keys": "8.69.0"
+ "@typescript-eslint/types": "8.70.0",
+ "@typescript-eslint/visitor-keys": "8.70.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -6935,9 +7011,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.69.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.69.0.tgz",
- "integrity": "sha512-xNqK7YTDZsLniQMV/4rpFR8Z5JlqeRvVjuG1YgF/mdPVH84HSD19L8CczMA0qg2RfwEV231GHH3VnToJDo4MfQ==",
+ "version": "8.70.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.70.0.tgz",
+ "integrity": "sha512-adnkeeNq9Sq1sUf4+FRVc0KdgYghzsgFpZSQVZVvY0LCuUuN0FnQgyGzCJeC4fW1cdXseBAjU2EOqUIjbNcZUw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6952,15 +7028,15 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.69.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.69.0.tgz",
- "integrity": "sha512-ZfoJAVg3JZndQEpEl9petVlxau3lRuElc4HRMuAlLCf8to04/iHz692RUSNmXKDjEuJmIL+KZ2/BsOcBc16dsA==",
+ "version": "8.70.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.70.0.tgz",
+ "integrity": "sha512-NUMKIhYVaVIVLnRL9CRt+VVcuLgSHUCpXn4/+K8wql+vdInUzvx8BjUO1oJ7cG9shjFJKtF8F8Hh2kCh3/KBVw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.69.0",
- "@typescript-eslint/typescript-estree": "8.69.0",
- "@typescript-eslint/utils": "8.69.0",
+ "@typescript-eslint/types": "8.70.0",
+ "@typescript-eslint/typescript-estree": "8.70.0",
+ "@typescript-eslint/utils": "8.70.0",
"debug": "^4.4.3",
"ts-api-utils": "^2.5.0"
},
@@ -6977,9 +7053,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.69.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.69.0.tgz",
- "integrity": "sha512-K3VrubUPhlo9VDBS6QdI8YB5j7ClpqLRdefcz6PFrhnwicehBweqQ9Evhl4l+FYz0HdDmMqIiSX0aldGRYtDCA==",
+ "version": "8.70.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.70.0.tgz",
+ "integrity": "sha512-asTOIYhDg4zdzOScCyaytrsV3cR6B4ecPQlXw/dJIm7J/MZTtCtfVII9JD8Geh4jTCrK/Xe6cg5UevoleMcoJQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6991,16 +7067,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.69.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.69.0.tgz",
- "integrity": "sha512-AdFkgqck3Vudb/kWnxlyafU/4aBhHrbQ9locP2N4psXTy5mOBg0SHJumnLvx7r6g1gV4DKvUFwV2nJZBoqOD8w==",
+ "version": "8.70.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.70.0.tgz",
+ "integrity": "sha512-d9NmHMPEKQ7QCLLm1jI3zmoQBwT5KwFYjXBJ9ymZfKCUU+5rmTRykKAFvH5Qn/ZCds3CEAFS9OC9M/jkl0X2bA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.69.0",
- "@typescript-eslint/tsconfig-utils": "8.69.0",
- "@typescript-eslint/types": "8.69.0",
- "@typescript-eslint/visitor-keys": "8.69.0",
+ "@typescript-eslint/project-service": "8.70.0",
+ "@typescript-eslint/tsconfig-utils": "8.70.0",
+ "@typescript-eslint/types": "8.70.0",
+ "@typescript-eslint/visitor-keys": "8.70.0",
"debug": "^4.4.3",
"minimatch": "^10.2.2",
"semver": "^7.7.3",
@@ -7071,16 +7147,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.69.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.69.0.tgz",
- "integrity": "sha512-tUbx60BBqQa31kXF5MCsOOLL5E/WzUuxIn7YpAvq+eaUlqvk8/NXnXMBNAdLCr0icjkzem7iUA5QqWHe/hJ1aw==",
+ "version": "8.70.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.70.0.tgz",
+ "integrity": "sha512-oZmtKJz/4fufZ2p3+Cn3ijEojcdfR+1zYDH2xKYrEly0dR/Q/1xUPRCOlKGxod78nWlU2UnDe09GZ3TaknBFGA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.69.0",
- "@typescript-eslint/types": "8.69.0",
- "@typescript-eslint/typescript-estree": "8.69.0"
+ "@typescript-eslint/scope-manager": "8.70.0",
+ "@typescript-eslint/types": "8.70.0",
+ "@typescript-eslint/typescript-estree": "8.70.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -7095,13 +7171,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.69.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.69.0.tgz",
- "integrity": "sha512-+rmdgPA+EXkNgKYvHvFfhrs35utXbwaC5PGpDquSXcoXQDKUA5UjV0LmTucG/4JXkM31BTu4TilHtrN8IVBe8w==",
+ "version": "8.70.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.70.0.tgz",
+ "integrity": "sha512-BoC8PiO4Hkdo0TVJh9Ntxr5MxPDI7/oFsrygN5ADelFSeXG/qgNuucIGA+L5Z6JpPTE/uRfcTWtscjbUaufepQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.69.0",
+ "@typescript-eslint/types": "8.70.0",
"eslint-visitor-keys": "^5.0.0"
},
"engines": {
@@ -8033,25 +8109,6 @@
}
}
},
- "node_modules/@wordpress/blocks/node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "license": "MIT"
- },
- "node_modules/@wordpress/blocks/node_modules/uuid": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz",
- "integrity": "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist-node/bin/uuid"
- }
- },
"node_modules/@wordpress/browserslist-config": {
"version": "6.54.0",
"resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.54.0.tgz",
@@ -8164,25 +8221,6 @@
}
}
},
- "node_modules/@wordpress/components/node_modules/path-to-regexp": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
- "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==",
- "license": "MIT"
- },
- "node_modules/@wordpress/components/node_modules/uuid": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz",
- "integrity": "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist-node/bin/uuid"
- }
- },
"node_modules/@wordpress/compose": {
"version": "8.7.0",
"resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-8.7.0.tgz",
@@ -8274,19 +8312,6 @@
}
}
},
- "node_modules/@wordpress/core-data/node_modules/uuid": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz",
- "integrity": "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist-node/bin/uuid"
- }
- },
"node_modules/@wordpress/data": {
"version": "10.54.0",
"resolved": "https://registry.npmjs.org/@wordpress/data/-/data-10.54.0.tgz",
@@ -8546,51 +8571,6 @@
}
}
},
- "node_modules/@wordpress/editor/node_modules/@wordpress/theme": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@wordpress/theme/-/theme-2.0.0.tgz",
- "integrity": "sha512-4yFei1ayJinMOVY6cTzKZV961p2Vjex9Nst1SReIFKv3ckb6ih5QN+qMpJQdpuukwabXrBTaoiA4ZB1akl2CfQ==",
- "license": "GPL-2.0-or-later",
- "dependencies": {
- "@wordpress/compose": "^8.7.0",
- "@wordpress/deprecated": "^4.54.0",
- "@wordpress/element": "^8.6.0",
- "@wordpress/private-apis": "^1.54.0",
- "@wordpress/style-runtime": "^0.10.0",
- "colorjs.io": "^0.7.1",
- "memize": "^2.1.1"
- },
- "engines": {
- "node": "^20.19.0 || >=22.13.0",
- "npm": ">=10.2.3"
- },
- "peerDependencies": {
- "@types/react": "^18 || ^19",
- "esbuild": ">=0.27.2 <1.0.0",
- "postcss": "^8.0.0",
- "react": "^18 || ^19",
- "react-dom": "^18 || ^19",
- "stylelint": "^16 || ^17",
- "vite": "^7 || ^8"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "esbuild": {
- "optional": true
- },
- "postcss": {
- "optional": true
- },
- "stylelint": {
- "optional": true
- },
- "vite": {
- "optional": true
- }
- }
- },
"node_modules/@wordpress/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",
@@ -8606,19 +8586,6 @@
"react-dom": "^0.14.0 || ^15.0.0 || ^16.0.0"
}
},
- "node_modules/@wordpress/editor/node_modules/uuid": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz",
- "integrity": "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist-node/bin/uuid"
- }
- },
"node_modules/@wordpress/element": {
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/@wordpress/element/-/element-8.6.0.tgz",
@@ -8706,52 +8673,6 @@
}
}
},
- "node_modules/@wordpress/eslint-plugin/node_modules/@wordpress/theme": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@wordpress/theme/-/theme-2.0.0.tgz",
- "integrity": "sha512-4yFei1ayJinMOVY6cTzKZV961p2Vjex9Nst1SReIFKv3ckb6ih5QN+qMpJQdpuukwabXrBTaoiA4ZB1akl2CfQ==",
- "dev": true,
- "license": "GPL-2.0-or-later",
- "dependencies": {
- "@wordpress/compose": "^8.7.0",
- "@wordpress/deprecated": "^4.54.0",
- "@wordpress/element": "^8.6.0",
- "@wordpress/private-apis": "^1.54.0",
- "@wordpress/style-runtime": "^0.10.0",
- "colorjs.io": "^0.7.1",
- "memize": "^2.1.1"
- },
- "engines": {
- "node": "^20.19.0 || >=22.13.0",
- "npm": ">=10.2.3"
- },
- "peerDependencies": {
- "@types/react": "^18 || ^19",
- "esbuild": ">=0.27.2 <1.0.0",
- "postcss": "^8.0.0",
- "react": "^18 || ^19",
- "react-dom": "^18 || ^19",
- "stylelint": "^16 || ^17",
- "vite": "^7 || ^8"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "esbuild": {
- "optional": true
- },
- "postcss": {
- "optional": true
- },
- "stylelint": {
- "optional": true
- },
- "vite": {
- "optional": true
- }
- }
- },
"node_modules/@wordpress/eslint-plugin/node_modules/cosmiconfig": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
@@ -9403,12 +9324,6 @@
}
}
},
- "node_modules/@wordpress/plugins/node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "license": "MIT"
- },
"node_modules/@wordpress/postcss-plugins-preset": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-5.54.0.tgz",
@@ -9805,9 +9720,9 @@
}
},
"node_modules/@wordpress/scripts/node_modules/eslint": {
- "version": "10.9.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.9.1.tgz",
- "integrity": "sha512-9VaAkDURekixUQJy0oJYl2DcN6oKMfxay7XzaGYAWQwsb6qfKf+x76R2k1L8kb1boc+FyCAaTA9GmiKaaiaF+A==",
+ "version": "10.10.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.10.0.tgz",
+ "integrity": "sha512-NPXn6r5zl4uET1DAVPaOwzX3rut4c0wcmw3dWJAfOsTM5+TogXo0DDjz8pwm/hL8cyVNpHqeK4JpN0NjnyFFNw==",
"dev": true,
"license": "MIT",
"workspaces": [
@@ -9819,7 +9734,7 @@
"@eslint/config-array": "^0.23.5",
"@eslint/config-helpers": "^0.7.0",
"@eslint/core": "^1.2.1",
- "@eslint/plugin-kit": "^0.7.2",
+ "@eslint/plugin-kit": "^0.7.3",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
@@ -9834,7 +9749,7 @@
"esquery": "^1.7.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^8.0.0",
+ "file-entry-cache": "11.1.5 || >11.1.6 <12",
"find-up": "^5.0.0",
"glob-parent": "^6.0.2",
"ignore": "^5.2.0",
@@ -9913,6 +9828,16 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/@wordpress/scripts/node_modules/file-entry-cache": {
+ "version": "11.1.5",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.5.tgz",
+ "integrity": "sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^6.1.23"
+ }
+ },
"node_modules/@wordpress/scripts/node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -9930,6 +9855,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/@wordpress/scripts/node_modules/flat-cache": {
+ "version": "6.1.23",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.23.tgz",
+ "integrity": "sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cacheable": "^2.5.0",
+ "flatted": "^3.4.2",
+ "hookified": "^1.15.0"
+ }
+ },
"node_modules/@wordpress/scripts/node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -10084,11 +10021,31 @@
"stylelint-scss": "^6.4.0"
}
},
- "node_modules/@wordpress/stylelint-config/node_modules/@wordpress/theme": {
+ "node_modules/@wordpress/sync": {
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/sync/-/sync-1.54.0.tgz",
+ "integrity": "sha512-NHRGP27HecH/hGdM3YVFcKFqUw06UfLoUQPp8IuIR3Bk7DPj1PdM5PnbqyYibSf8caDE+bIduacbHv0mn2JLSg==",
+ "license": "GPL-2.0-or-later",
+ "dependencies": {
+ "@wordpress/api-fetch": "^7.54.0",
+ "@wordpress/hooks": "^4.54.0",
+ "@wordpress/private-apis": "^1.54.0",
+ "@wordpress/undo-manager": "^1.54.0",
+ "diff": "^8.0.3",
+ "fast-deep-equal": "^3.1.3",
+ "lib0": "^0.2.99",
+ "y-protocols": "^1.0.7",
+ "yjs": "^13.6.29"
+ },
+ "engines": {
+ "node": ">=18.12.0",
+ "npm": ">=8.19.2"
+ }
+ },
+ "node_modules/@wordpress/theme": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@wordpress/theme/-/theme-2.0.0.tgz",
"integrity": "sha512-4yFei1ayJinMOVY6cTzKZV961p2Vjex9Nst1SReIFKv3ckb6ih5QN+qMpJQdpuukwabXrBTaoiA4ZB1akl2CfQ==",
- "dev": true,
"license": "GPL-2.0-or-later",
"dependencies": {
"@wordpress/compose": "^8.7.0",
@@ -10130,27 +10087,6 @@
}
}
},
- "node_modules/@wordpress/sync": {
- "version": "1.54.0",
- "resolved": "https://registry.npmjs.org/@wordpress/sync/-/sync-1.54.0.tgz",
- "integrity": "sha512-NHRGP27HecH/hGdM3YVFcKFqUw06UfLoUQPp8IuIR3Bk7DPj1PdM5PnbqyYibSf8caDE+bIduacbHv0mn2JLSg==",
- "license": "GPL-2.0-or-later",
- "dependencies": {
- "@wordpress/api-fetch": "^7.54.0",
- "@wordpress/hooks": "^4.54.0",
- "@wordpress/private-apis": "^1.54.0",
- "@wordpress/undo-manager": "^1.54.0",
- "diff": "^8.0.3",
- "fast-deep-equal": "^3.1.3",
- "lib0": "^0.2.99",
- "y-protocols": "^1.0.7",
- "yjs": "^13.6.29"
- },
- "engines": {
- "node": ">=18.12.0",
- "npm": ">=8.19.2"
- }
- },
"node_modules/@wordpress/token-list": {
"version": "3.54.0",
"resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-3.54.0.tgz",
@@ -10199,51 +10135,6 @@
}
}
},
- "node_modules/@wordpress/ui/node_modules/@wordpress/theme": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@wordpress/theme/-/theme-2.0.0.tgz",
- "integrity": "sha512-4yFei1ayJinMOVY6cTzKZV961p2Vjex9Nst1SReIFKv3ckb6ih5QN+qMpJQdpuukwabXrBTaoiA4ZB1akl2CfQ==",
- "license": "GPL-2.0-or-later",
- "dependencies": {
- "@wordpress/compose": "^8.7.0",
- "@wordpress/deprecated": "^4.54.0",
- "@wordpress/element": "^8.6.0",
- "@wordpress/private-apis": "^1.54.0",
- "@wordpress/style-runtime": "^0.10.0",
- "colorjs.io": "^0.7.1",
- "memize": "^2.1.1"
- },
- "engines": {
- "node": "^20.19.0 || >=22.13.0",
- "npm": ">=10.2.3"
- },
- "peerDependencies": {
- "@types/react": "^18 || ^19",
- "esbuild": ">=0.27.2 <1.0.0",
- "postcss": "^8.0.0",
- "react": "^18 || ^19",
- "react-dom": "^18 || ^19",
- "stylelint": "^16 || ^17",
- "vite": "^7 || ^8"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "esbuild": {
- "optional": true
- },
- "postcss": {
- "optional": true
- },
- "stylelint": {
- "optional": true
- },
- "vite": {
- "optional": true
- }
- }
- },
"node_modules/@wordpress/undo-manager": {
"version": "1.54.0",
"resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-1.54.0.tgz",
@@ -10290,19 +10181,6 @@
}
}
},
- "node_modules/@wordpress/upload-media/node_modules/uuid": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz",
- "integrity": "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist-node/bin/uuid"
- }
- },
"node_modules/@wordpress/url": {
"version": "4.54.0",
"resolved": "https://registry.npmjs.org/@wordpress/url/-/url-4.54.0.tgz",
@@ -11015,9 +10893,9 @@
}
},
"node_modules/autoprefixer": {
- "version": "10.5.4",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.4.tgz",
- "integrity": "sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==",
+ "version": "10.5.5",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.5.tgz",
+ "integrity": "sha512-uiRYvQYe/nNSzBJ7OUnd2/TZVsAdob3blml44teEpee9Cc1f4rGZFewO+JT3Wo8mgFOSzNqes4FHZn/Qz8WOuw==",
"dev": true,
"funding": [
{
@@ -11035,8 +10913,8 @@
],
"license": "MIT",
"dependencies": {
- "browserslist": "^4.28.6",
- "caniuse-lite": "^1.0.30001806",
+ "browserslist": "^4.28.9",
+ "caniuse-lite": "^1.0.30001810",
"fraction.js": "^5.3.4",
"picocolors": "^1.1.1",
"postcss-value-parser": "^4.2.0"
@@ -11444,9 +11322,9 @@
}
},
"node_modules/body-parser": {
- "version": "1.20.6",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.6.tgz",
- "integrity": "sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==",
+ "version": "1.20.8",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.8.tgz",
+ "integrity": "sha512-JNcyFQ64OiijEkPzUBTCe+hyPXUD/3LEldGQ6iF5LR1w00mx9o7xtDWHXBY2iItjdCFGoilOLNQbH943ut7pHA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11458,7 +11336,7 @@
"http-errors": "~2.0.1",
"iconv-lite": "~0.4.24",
"on-finished": "~2.4.1",
- "qs": "~6.15.1",
+ "qs": "~6.16.0",
"raw-body": "~2.5.3",
"type-is": "~1.6.18",
"unpipe": "~1.0.0"
@@ -11498,6 +11376,23 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/body-parser/node_modules/qs": {
+ "version": "6.16.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz",
+ "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "es-define-property": "^1.0.1",
+ "side-channel": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/bonjour-service": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.4.4.tgz",
@@ -11541,9 +11436,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.28.8",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz",
- "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==",
+ "version": "4.28.9",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz",
+ "integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==",
"dev": true,
"funding": [
{
@@ -11561,11 +11456,11 @@
],
"license": "MIT",
"dependencies": {
- "baseline-browser-mapping": "^2.11.12",
- "caniuse-lite": "^1.0.30001809",
- "electron-to-chromium": "^1.5.402",
- "node-releases": "^2.0.53",
- "update-browserslist-db": "^1.3.0"
+ "baseline-browser-mapping": "^2.11.20",
+ "caniuse-lite": "^1.0.30001810",
+ "electron-to-chromium": "^1.5.420",
+ "node-releases": "^2.0.54",
+ "update-browserslist-db": "^1.3.2"
},
"bin": {
"browserslist": "cli.js"
@@ -12282,10 +12177,9 @@
}
},
"node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true,
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
"license": "MIT"
},
"node_modules/cookie": {
@@ -13281,9 +13175,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.420",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.420.tgz",
- "integrity": "sha512-2yD6XreGusOfNV+dUcvipJEXc3n/n7fgr7996aszTG+YY5E4mqM4tOq/3uhP129cazL9YHbVWSpc79ePotWtPA==",
+ "version": "1.5.424",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.424.tgz",
+ "integrity": "sha512-rTOe76LHREmnLOWc0NlakB7AlnWjhTNflk4YE3gnIBPbSXLiY+VDEgwYl4wAYdBPD7eq9NQq6TR8lvd9Fls2CA==",
"dev": true,
"license": "ISC"
},
@@ -14580,6 +14474,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/express/node_modules/path-to-regexp": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
+ "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/extract-zip": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
@@ -14775,6 +14676,7 @@
"integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"flat-cache": "^4.0.0"
},
@@ -14891,6 +14793,7 @@
"integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"flatted": "^3.2.9",
"keyv": "^4.5.4"
@@ -15049,9 +14952,9 @@
"license": "ISC"
},
"node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -15729,6 +15632,12 @@
"react-is": "^16.7.0"
}
},
+ "node_modules/hoist-non-react-statics/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "license": "MIT"
+ },
"node_modules/hookified": {
"version": "1.15.1",
"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz",
@@ -16037,9 +15946,9 @@
}
},
"node_modules/ignore": {
- "version": "7.0.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.8.tgz",
- "integrity": "sha512-YYNsSlXBjMk92SKnkwvB5LOVSa6OznlFUGcsvrFgNJbJCd0M1XKeFVRc8ZByeCqz32FivYNHJVooLmdqrmvp/Q==",
+ "version": "7.0.9",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.9.tgz",
+ "integrity": "sha512-brTTsvFRt5C1gGHtPst/281UjPD5t9fBqbgoMPlVWy11ZLTPfu7HxK4ZYqO9H7o/yC9rSTCI85EaQ4OoY12qYw==",
"devOptional": true,
"license": "MIT",
"engines": {
@@ -17724,7 +17633,8 @@
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
@@ -17795,6 +17705,7 @@
"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"json-buffer": "3.0.1"
}
@@ -18377,9 +18288,9 @@
"license": "MIT"
},
"node_modules/marked": {
- "version": "18.0.11",
- "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.11.tgz",
- "integrity": "sha512-HnslJfsZkRPBDJRHvVtAaWlZHEpSu7u8LgQuJCELjRKuWR+hpq4A7sLq3p8HaI9ypVoXDXxV34CsQJEe1+J5Aw==",
+ "version": "18.0.12",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.12.tgz",
+ "integrity": "sha512-LEm4ga2YeI2T3GVHj9b0BaDPPk93LLTHMFeMyQbNIzPxc8vCI0y/scy0ZA6z6lXKyT9j9Nhl/OC6ZYKYGuFScA==",
"license": "MIT",
"bin": {
"marked": "bin/marked.js"
@@ -18441,9 +18352,9 @@
}
},
"node_modules/mediabunny": {
- "version": "1.55.7",
- "resolved": "https://registry.npmjs.org/mediabunny/-/mediabunny-1.55.7.tgz",
- "integrity": "sha512-Sb/vI8frRiDPbPUwl3hz0n69NSe9yt4Nydcv5yxi8Rdgk0BgnujEGjZqE+uCTehFbafcqIu6gDAok8ln98dcqg==",
+ "version": "1.56.0",
+ "resolved": "https://registry.npmjs.org/mediabunny/-/mediabunny-1.56.0.tgz",
+ "integrity": "sha512-VLVYEVXI4fA2PabQoZs3XOmxDsio4gpG1Npz0iVICRNCQ+XYI3fBOngnwHljafaEjHUbYzrIDoctZbxcVfQpgQ==",
"license": "MPL-2.0",
"workspaces": [
".",
@@ -18459,20 +18370,20 @@
}
},
"node_modules/memfs": {
- "version": "4.69.1",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.69.1.tgz",
- "integrity": "sha512-x4Ion23tLmo/6CTNYrKriwACRWlsw5hg+ZDYr4sRriYiZEu04UmK+7ZE/jXjAeDfe2DlL4UIFAVKllqZlWCJ+g==",
+ "version": "4.71.0",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.71.0.tgz",
+ "integrity": "sha512-Zwrk7TpTXBkic7taZL+2QeppbauG0QOufRsT1zuXDYLW8jCajH0W1VSZ17+I7ODqiNbH9J1Vf1QJCqFlCfurDg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@jsonjoy.com/fs-core": "4.69.1",
- "@jsonjoy.com/fs-fsa": "4.69.1",
- "@jsonjoy.com/fs-node": "4.69.1",
- "@jsonjoy.com/fs-node-builtins": "4.69.1",
- "@jsonjoy.com/fs-node-to-fsa": "4.69.1",
- "@jsonjoy.com/fs-node-utils": "4.69.1",
- "@jsonjoy.com/fs-print": "4.69.1",
- "@jsonjoy.com/fs-snapshot": "4.69.1",
+ "@jsonjoy.com/fs-core": "4.71.0",
+ "@jsonjoy.com/fs-fsa": "4.71.0",
+ "@jsonjoy.com/fs-node": "4.71.0",
+ "@jsonjoy.com/fs-node-builtins": "4.71.0",
+ "@jsonjoy.com/fs-node-to-fsa": "4.71.0",
+ "@jsonjoy.com/fs-node-utils": "4.71.0",
+ "@jsonjoy.com/fs-print": "4.71.0",
+ "@jsonjoy.com/fs-snapshot": "4.71.0",
"@jsonjoy.com/json-pack": "^1.11.0",
"@jsonjoy.com/util": "^1.9.0",
"glob-to-regex.js": "^1.0.1",
@@ -18745,9 +18656,9 @@
}
},
"node_modules/minimizer-webpack-plugin": {
- "version": "5.9.0",
- "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.9.0.tgz",
- "integrity": "sha512-OASqv+dewv8vjkOBjqMOHvxUaXhtGBLZAXq7JbmYE8TSzBvOswiGq5JcBdc8ypuLL/8YUT1OEyupga6/iqdyTA==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.10.0.tgz",
+ "integrity": "sha512-2//60T4S0X1Ug/dqLDOgDaGlZsN1Lv8hf8oB0NOV/KIHSaXlPwXBBIbim79dE2Z7NEs52ES8YHoSv6Lmsk+XNg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19871,10 +19782,9 @@
}
},
"node_modules/path-to-regexp": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
- "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==",
- "dev": true,
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
+ "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==",
"license": "MIT"
},
"node_modules/path-type": {
@@ -20079,29 +19989,26 @@
}
},
"node_modules/playwright": {
- "version": "1.62.1",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz",
- "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==",
+ "version": "1.63.0",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz",
+ "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"dependencies": {
- "playwright-core": "1.62.1"
+ "playwright-core": "1.63.0"
},
"bin": {
"playwright": "cli.js"
},
"engines": {
"node": ">=20"
- },
- "optionalDependencies": {
- "fsevents": "2.3.2"
}
},
"node_modules/playwright-core": {
- "version": "1.62.1",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz",
- "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==",
+ "version": "1.63.0",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz",
+ "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
@@ -20753,9 +20660,9 @@
"license": "MIT"
},
"node_modules/postcss-safe-parser": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz",
- "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.1.0.tgz",
+ "integrity": "sha512-1WzZxRLaAFwEh6Do+zyGpjWV3nGJNxxhuh7Ubu/q1ICImMgZJnLwhoaEpRbG4pJppp2Y1ncL9ffA2f+LhrefQg==",
"devOptional": true,
"funding": [
{
@@ -21029,6 +20936,12 @@
"react-is": "^16.13.1"
}
},
+ "node_modules/prop-types/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "license": "MIT"
+ },
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -21375,9 +21288,9 @@
}
},
"node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"license": "MIT"
},
"node_modules/react-refresh": {
@@ -22064,9 +21977,9 @@
"license": "MIT"
},
"node_modules/sass": {
- "version": "1.103.1",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.103.1.tgz",
- "integrity": "sha512-9icZURbP51S6S0QGoyaeqk9uB06GNWxsFYWfH5RgpFgqK5FA8tJcM3AdVxrZEVJ7dz+L87nG95gBKf4VuaMHGw==",
+ "version": "1.104.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.104.0.tgz",
+ "integrity": "sha512-btHMApW2bgolvClhRW8AlQJzgI9lUB3pPSofBQQT+E46GWvf9o0TVQ13SYv5riWZVFyPN+JNz3TKW9XhBlc10w==",
"license": "MIT",
"dependencies": {
"chokidar": "^5.0.0",
@@ -22322,18 +22235,18 @@
}
},
"node_modules/seroval": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.6.4.tgz",
- "integrity": "sha512-LErWMNS2RRFdu2RMA5u/PA59/IWs0XsikyEXGQ2/36iEWFrdG0ABmg17E17cikrv76891kOAMq3TkTFXpwAHXw==",
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.6.7.tgz",
+ "integrity": "sha512-AeDcLh0yO2SFm9W71essgnSzLV9DI8ZH0x0knXn2DMnUZj728mpLbxjlbB6IqKCmqh8JA3cEqRyGoNkt584JcQ==",
"license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/seroval-plugins": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.6.4.tgz",
- "integrity": "sha512-R0f1U9hmn38+dFMz6b6ab8lwucmw4AtiY7St+JPWudy1dm+Bs3g884nyrsH9Cy6rKpZKLYayXuMda9GZ/fl8JQ==",
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.6.7.tgz",
+ "integrity": "sha512-4Nk35ttD3DTDJW4hgw5StsVAPeU6qnDFnULAouw6tQ7oLTV/ICXrWpsXo2EE52eSP2joUMazbVf52mFEcADqRw==",
"license": "MIT",
"engines": {
"node": ">=10"
@@ -22712,6 +22625,17 @@
"websocket-driver": "^0.7.4"
}
},
+ "node_modules/sockjs/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/socks": {
"version": "2.8.10",
"resolved": "https://registry.npmjs.org/socks/-/socks-2.8.10.tgz",
@@ -22743,13 +22667,12 @@
}
},
"node_modules/source-map": {
- "version": "0.7.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
- "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
- "dev": true,
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
"license": "BSD-3-Clause",
"engines": {
- "node": ">= 12"
+ "node": ">=0.10.0"
}
},
"node_modules/source-map-js": {
@@ -24202,20 +24125,20 @@
}
},
"node_modules/tldts-core": {
- "version": "7.4.11",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.11.tgz",
- "integrity": "sha512-CW3WN2rIIE/Of21mulhgnGOwoDyEFNygyIBOONSdyAuSATgMMUCpLeUlB+E8sAwA5xRV9hYPl+kyZ9citHCaKg==",
+ "version": "7.4.12",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.12.tgz",
+ "integrity": "sha512-nYNzS2WRf4QJmjzFFgAxLOBjyBxAGRbCy9PVBPaglcYyYajh40VBn+v5Ngr96ZMc7oM0+aCJdtQnNejvdBnXMQ==",
"dev": true,
"license": "MIT"
},
"node_modules/tldts-icann": {
- "version": "7.4.11",
- "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.4.11.tgz",
- "integrity": "sha512-1p+NDJ7FUYCliESmsQl9EW5Um8JIyFheiy6Y6ZoHho27d+TLAGFa0gMf1VOVy02vNY1aQo6xeKiaGj45+7P+PA==",
+ "version": "7.4.12",
+ "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.4.12.tgz",
+ "integrity": "sha512-KYMFombFttNwGKI9GhqlHBn/+QROOk2bvh5p+aVmRSF8VH+YYVS9fEq0ux099jzw0JXmk2yRErCiviveSL/QhA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "tldts-core": "^7.4.11"
+ "tldts-core": "^7.4.12"
}
},
"node_modules/tldts/node_modules/tldts-core": {
@@ -24537,16 +24460,16 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.69.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.69.0.tgz",
- "integrity": "sha512-B3MltX0VqjUBNEe3b3sSuiRbfa6XrfHFtBiPamjT5AsW/dfq+y+bc0wyuS9DxAS1LyzCxRp2+rxzpLUvqM2BvA==",
+ "version": "8.70.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.70.0.tgz",
+ "integrity": "sha512-P/W5cz70/cQAuKfY3xwQMWWTV7BvJ0mAQmi+9mBcsVPaBUpd6Ohpa+fECv9rBFrQcig86jAiNBFNWUqnTjr4pw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.69.0",
- "@typescript-eslint/parser": "8.69.0",
- "@typescript-eslint/typescript-estree": "8.69.0",
- "@typescript-eslint/utils": "8.69.0"
+ "@typescript-eslint/eslint-plugin": "8.70.0",
+ "@typescript-eslint/parser": "8.70.0",
+ "@typescript-eslint/typescript-estree": "8.70.0",
+ "@typescript-eslint/utils": "8.70.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -24861,14 +24784,16 @@
}
},
"node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).",
- "dev": true,
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz",
+ "integrity": "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
"license": "MIT",
"bin": {
- "uuid": "dist/bin/uuid"
+ "uuid": "dist-node/bin/uuid"
}
},
"node_modules/v8-to-istanbul": {
@@ -24886,6 +24811,13 @@
"node": ">=10.12.0"
}
},
+ "node_modules/v8-to-istanbul/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
diff --git a/package.json b/package.json
index 3f3a612..679cc45 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,9 @@
"start": "wp-scripts start"
},
"devDependencies": {
+ "@dnd-kit/core": "^6.3.1",
+ "@dnd-kit/sortable": "^10.0.0",
+ "@dnd-kit/utilities": "^3.2.2",
"@wordpress/scripts": "^34.2.0"
},
"dependencies": {
diff --git a/src/_meta/Fields.js b/src/_meta/Fields.js
index f0bdafa..e42b132 100644
--- a/src/_meta/Fields.js
+++ b/src/_meta/Fields.js
@@ -9,6 +9,7 @@
import UploadField from "./fields/upload-field";
import SelectorField from "./fields/selector-field";
import LocationField from "./fields/location-field.js";
+import GroupField from "./fields/group-field";
import { PanelRow } from '@wordpress/components';
const FIELD_MAP = {
@@ -29,7 +30,8 @@
repeater: RepeaterField,
upload: UploadField,
selector: SelectorField,
- location: LocationField
+ location: LocationField,
+ group: GroupField
};
const OPERATORS = {
diff --git a/src/_meta/SidePanel.js b/src/_meta/SidePanel.js
index 8a4006d..a6b5662 100644
--- a/src/_meta/SidePanel.js
+++ b/src/_meta/SidePanel.js
@@ -10,6 +10,7 @@
<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"/>
</svg>
);
+
const SidePanel = ( { postType, metaFields, setMetaFields } ) => {
const { fields, sections } = window.jvbFieldConfig || {};
diff --git a/src/_meta/fields/date-field.js b/src/_meta/fields/date-field.js
index 4cf8860..73a4cd7 100644
--- a/src/_meta/fields/date-field.js
+++ b/src/_meta/fields/date-field.js
@@ -2,22 +2,28 @@
import { DatePicker } from '@wordpress/components';
const DateField = ({field, value, onChange}) => {
- const [ date, setDate ] = useState( new Date() );
+ // const [ date, setDate ] = useState( new Date() );
return (
<div className="components-base-control" id={field.name}>
<label className="components-base-control__label">
{ field.label }
</label>
<DatePicker
- currentDate={ date }
+ currentDate={ toLocalDate(value) }
onChange={ onChange }
help={ field.description }
- value={value??''}
/>
{ getDescription(field) }
</div>
);
};
+
+const toLocalDate = (value) => {
+ if (!value) return null;
+ const [year, month, day] = value.split('-').map(Number);
+ return new Date(year, month - 1, day);
+};
+
const getDescription = (field) => {
if (!field.description || field.description.length === 0) return;
return (
diff --git a/src/_meta/fields/group-field.js b/src/_meta/fields/group-field.js
new file mode 100644
index 0000000..3fddf14
--- /dev/null
+++ b/src/_meta/fields/group-field.js
@@ -0,0 +1,31 @@
+import Fields from '../Fields';
+
+const GroupField = ({ field, value, onChange }) => {
+ const groupValue = value || {};
+
+ const setSubField = (name, subValue) => {
+ onChange({ ...groupValue, [name]: subValue });
+ };
+
+ return (
+ <div className="jvb-group-field" id={field.name}>
+ { field.label && (
+ <h4 className="components-base-control__label">{ field.label }</h4>
+ ) }
+ {
+ Object.entries(field.fields || {}).map(([name, subfield]) => (
+ <Fields
+ key={name}
+ field={{ ...subfield, name }}
+ value={groupValue[name]}
+ onChange={(v) => setSubField(name, v)}
+ meta={groupValue}
+ />
+ ))
+ }
+ { field.description && <p className="hint">{field.description}</p> }
+ </div>
+ );
+};
+
+export default GroupField;
diff --git a/src/_meta/fields/repeater-field.css b/src/_meta/fields/repeater-field.css
new file mode 100644
index 0000000..6793248
--- /dev/null
+++ b/src/_meta/fields/repeater-field.css
@@ -0,0 +1,3 @@
+.jvb-repeater-row { display: flex; align-items: flex-start; gap: 4px; }
+.jvb-repeater-row .jvb-repeater-field-body /* your PanelBody wrapper */ { flex: 1; }
+.jvb-repeater-drag-handle { cursor: grab; padding: 8px 4px; touch-action: none; }
diff --git a/src/_meta/fields/repeater-field.js b/src/_meta/fields/repeater-field.js
index 227de72..ebfea4e 100644
--- a/src/_meta/fields/repeater-field.js
+++ b/src/_meta/fields/repeater-field.js
@@ -15,6 +15,7 @@
Object.fromEntries(Object.entries(fields || {}).map(([name, f]) => [name, f.default ?? '']));
const RepeaterField = ({ field, value, onChange, meta }) => {
+
const rows = Array.isArray(value) ? value : [];
const subFields = field.fields || {};
const [openIndex, setOpenIndex] = useState(null);
diff --git a/src/_meta/fields/selector-field.js b/src/_meta/fields/selector-field.js
index 32bc66b..7c18a05 100644
--- a/src/_meta/fields/selector-field.js
+++ b/src/_meta/fields/selector-field.js
@@ -12,7 +12,7 @@
}
if (subtype === 'taxonomy') {
// Assumes taxonomy rest_base matches the (unprefixed) taxonomy slug.
- return (search) => addQueryArgs(`/wp/v2/${field.taxonomy}`, { search, per_page: 20 });
+ return (search) => addQueryArgs(`/wp/v2/${field.taxonomy}`, { search, per_page: 20, hide_empty: false });
}
return (search) => addQueryArgs('/wp/v2/search', { search, type: 'post', subtype: field.post_type, per_page: 20 });
};
@@ -40,6 +40,7 @@
// Resolve current IDs to labels on mount / value change
useEffect(() => {
+ onInputChange('');
let cancelled = false;
if (!ids.length) {
setTokens([]);
@@ -65,7 +66,6 @@
const onInputChange = useCallback((search) => {
setSearch(search);
- if (!search) { setOptions({}); return;}
apiFetch({ path: buildPath(search) })
.then((results) => {
@@ -81,7 +81,7 @@
if (isSingle) {
onChange(newIds[newIds.length - 1] ?? 0);
} else {
- onChange(field.max ? newIds.slice(0, field.max) : newIds);
+ onChange((field.max ? newIds.slice(0, field.max) : newIds).join(','));
}
};
diff --git a/src/meta/block.json b/src/meta/block.json
index 2388b27..73863ec 100644
--- a/src/meta/block.json
+++ b/src/meta/block.json
@@ -8,6 +8,9 @@
"icon": "edit-large",
"description": "Add a specific field from this content",
"example": {},
+ "attributes": {
+ "fieldName": { "type": "string", "default": "" }
+ },
"supports": {
"align": ["wide", "full"]
},
diff --git a/src/meta/edit.js b/src/meta/edit.js
index eabd90a..656409c 100644
--- a/src/meta/edit.js
+++ b/src/meta/edit.js
@@ -1,38 +1,51 @@
-/**
- * Retrieves the translation of text.
- *
- * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-i18n/
- */
-import { __ } from '@wordpress/i18n';
+import { InspectorControls, useBlockProps } from '@wordpress/block-editor';
+import { PanelBody, SelectControl, Placeholder } from '@wordpress/components';
+import { useEntityProp } from '@wordpress/core-data';
+import { useSelect } from '@wordpress/data';
+import Fields from '../_meta/Fields';
-/**
- * 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';
+const Edit = ({ attributes, setAttributes }) => {
+ const { fieldName } = attributes;
+ const { fields } = window.jvbFieldConfig || {};
-/**
- * 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>
+ const postType = useSelect(
+ (select) => select('core/editor').getCurrentPostType(),
+ []
);
-}
+ const [meta, setMeta] = useEntityProp('postType', postType, 'meta');
+
+ const field = (fields || []).find((f) => f.name === fieldName);
+
+ const blockProps = useBlockProps();
+
+ return (
+ <div {...blockProps}>
+ <InspectorControls>
+ <PanelBody title="Field">
+ <SelectControl
+ label="Meta field"
+ value={fieldName}
+ options={[
+ { label: 'Select a field…', value: '' },
+ ...(fields || []).map((f) => ({ label: f.label || f.name, value: f.name })),
+ ]}
+ onChange={(value) => setAttributes({ fieldName: value })}
+ />
+ </PanelBody>
+ </InspectorControls>
+
+ { !field && <Placeholder label="Meta Field" instructions="Select a field in the block settings." /> }
+
+ { field && (
+ <Fields
+ field={field}
+ value={meta?.[fieldName]}
+ onChange={(value) => setMeta({ ...meta, [fieldName]: value })}
+ meta={meta}
+ />
+ ) }
+ </div>
+ );
+};
+
+export default Edit;
diff --git a/src/meta/index.js b/src/meta/index.js
index d78e1bf..8eebed7 100644
--- a/src/meta/index.js
+++ b/src/meta/index.js
@@ -1,33 +1,8 @@
-/**
- * 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
- */
+registerBlockType(metadata, {
edit: Edit,
-} );
+ save: () => null, // dynamic/meta-driven, nothing saved to post_content
+});
--
Gitblit v1.10.0