From 03cba12f78a757eb40458e0ccaf6412a24497936 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 10 Mar 2026 21:27:15 +0000 Subject: [PATCH 1/4] Add toggle group support for tab-like toggle behavior When toggle blocks are placed inside a container with the `toggle-block-group` class, they behave like tabs: activating one toggle automatically closes all others in the group. Adds a "Default toggle" option that marks which toggle should be active by default when no other toggle in the group is open. https://claude.ai/code/session_019mVP8YLjaU9V5LEzsujoCL --- src/toggle-block/block.json | 4 + src/toggle-block/deprecated.js | 24 +++++ src/toggle-block/index.js | 22 +++- src/toggle-block/view.js | 189 ++++++++++++++++++++++++++++----- 4 files changed, 211 insertions(+), 28 deletions(-) diff --git a/src/toggle-block/block.json b/src/toggle-block/block.json index c2fae76..599e846 100644 --- a/src/toggle-block/block.json +++ b/src/toggle-block/block.json @@ -29,6 +29,10 @@ "type": "string", "default": "" }, + "defaultToggle": { + "type": "boolean", + "default": false + }, "labelText": { "type": "string", "default": "" diff --git a/src/toggle-block/deprecated.js b/src/toggle-block/deprecated.js index cdd2600..95875a1 100644 --- a/src/toggle-block/deprecated.js +++ b/src/toggle-block/deprecated.js @@ -1,6 +1,30 @@ import { useBlockProps } from '@wordpress/block-editor'; const deprecated = [ + { + attributes: { + bodyClass: { type: 'string', default: '' }, + buttonText: { type: 'string', default: '' }, + controlsId: { type: 'string', default: '' }, + labelText: { type: 'string', default: '' }, + }, + save: (props) => { + const { + attributes: { bodyClass, buttonText, controlsId, labelText }, + } = props; + + return ( + + ); + }, + }, { attributes: { bodyClass: { type: 'string' }, diff --git a/src/toggle-block/index.js b/src/toggle-block/index.js index f39c087..9f8bdde 100644 --- a/src/toggle-block/index.js +++ b/src/toggle-block/index.js @@ -5,7 +5,11 @@ import { useBlockProps, } from '@wordpress/block-editor'; import { createBlock, registerBlockType } from '@wordpress/blocks'; -import { PanelBody, TextControl } from '@wordpress/components'; +import { + PanelBody, + TextControl, + ToggleControl, +} from '@wordpress/components'; import { __ } from '@wordpress/i18n'; // Internal dependencies. @@ -17,7 +21,7 @@ import './extend-navigation-block'; const Edit = (props) => { const { - attributes: { bodyClass, buttonText, controlsId, labelText }, + attributes: { bodyClass, buttonText, controlsId, defaultToggle, labelText }, setAttributes, } = props; @@ -58,6 +62,17 @@ const Edit = (props) => { setAttributes({ bodyClass: value }) } /> + + setAttributes({ defaultToggle: value }) + } + /> { const Save = (props) => { const { - attributes: { bodyClass, buttonText, controlsId, labelText }, + attributes: { bodyClass, buttonText, controlsId, defaultToggle, labelText }, } = props; return ( @@ -85,6 +100,7 @@ const Save = (props) => { aria-label={labelText} aria-controls={controlsId} {...(bodyClass && { 'data-body-class': bodyClass })} + {...(defaultToggle && { 'data-default-toggle': 'true' })} > {buttonText} diff --git a/src/toggle-block/view.js b/src/toggle-block/view.js index 77c4941..55c0fe3 100644 --- a/src/toggle-block/view.js +++ b/src/toggle-block/view.js @@ -1,6 +1,11 @@ { - const handleClick = (evt) => { - const controlsId = evt.target.getAttribute('aria-controls'); + /** + * Toggle a block on (show its controlled element). + * + * @param {HTMLElement} toggle The toggle button element. + */ + const toggleOn = (toggle) => { + const controlsId = toggle.getAttribute('aria-controls'); if (!controlsId) { return; @@ -12,39 +17,141 @@ return; } - const bodyClass = evt.target.getAttribute('data-body-class'); + const bodyClass = toggle.getAttribute('data-body-class'); - // Add a persisting class to the toggle button when it is - // clicked for the first time to flag that it has, at one - // point in its history, been toggled. - if (!evt.target.classList.contains('toggle-block-has-toggled')) { - evt.target.classList.add('toggle-block-has-toggled'); + if (!toggle.classList.contains('toggle-block-has-toggled')) { + toggle.classList.add('toggle-block-has-toggled'); } - /** - * Add a persisting class to the toggled block when it is - * toggled for the first time to flag that it has, at one - * point in its history, been toggled. - */ if (!toggledBlock.classList.contains('toggle-block-has-been-toggled')) { toggledBlock.classList.add('toggle-block-has-been-toggled'); } - if (toggledBlock.classList.contains('toggle-block-hidden')) { - evt.target.setAttribute('aria-pressed', 'true'); - evt.target.setAttribute('aria-expanded', 'true'); - toggledBlock.classList.remove('toggle-block-hidden'); + toggle.setAttribute('aria-pressed', 'true'); + toggle.setAttribute('aria-expanded', 'true'); + toggledBlock.classList.remove('toggle-block-hidden'); + + if (bodyClass) { + document.body.classList.add(bodyClass); + } + }; + + /** + * Toggle a block off (hide its controlled element). + * + * @param {HTMLElement} toggle The toggle button element. + */ + const toggleOff = (toggle) => { + const controlsId = toggle.getAttribute('aria-controls'); + + if (!controlsId) { + return; + } + + const toggledBlock = document.getElementById(controlsId); - if (bodyClass) { - document.body.classList.add(bodyClass); + if (!toggledBlock) { + return; + } + + const bodyClass = toggle.getAttribute('data-body-class'); + + toggle.setAttribute('aria-pressed', 'false'); + toggle.setAttribute('aria-expanded', 'false'); + toggledBlock.classList.add('toggle-block-hidden'); + + if (bodyClass) { + document.body.classList.remove(bodyClass); + } + }; + + /** + * Get the toggle group parent, if any. + * + * @param {HTMLElement} toggle The toggle button element. + * @returns {HTMLElement|null} The toggle group parent or null. + */ + const getToggleGroup = (toggle) => { + return toggle.closest('.toggle-block-group'); + }; + + /** + * Get all toggle blocks within a toggle group. + * + * @param {HTMLElement} group The toggle group element. + * @returns {NodeList} The toggle blocks within the group. + */ + const getGroupToggles = (group) => { + return group.querySelectorAll('.wp-block-happyprime-toggle-block'); + }; + + /** + * Find the default toggle within a group. + * + * @param {HTMLElement} group The toggle group element. + * @returns {HTMLElement|null} The default toggle or null. + */ + const getDefaultToggle = (group) => { + return group.querySelector( + '.wp-block-happyprime-toggle-block[data-default-toggle="true"]' + ); + }; + + const handleClick = (evt) => { + const toggle = evt.target.closest( + '.wp-block-happyprime-toggle-block' + ); + + if (!toggle) { + return; + } + + const controlsId = toggle.getAttribute('aria-controls'); + + if (!controlsId) { + return; + } + + const toggledBlock = document.getElementById(controlsId); + + if (!toggledBlock) { + return; + } + + const group = getToggleGroup(toggle); + const isCurrentlyOpen = + !toggledBlock.classList.contains('toggle-block-hidden'); + + if (group) { + // In a group, toggling on closes others. + if (!isCurrentlyOpen) { + // Close all other toggles in the group. + getGroupToggles(group).forEach((otherToggle) => { + if (otherToggle !== toggle) { + toggleOff(otherToggle); + } + }); + + // Open this toggle. + toggleOn(toggle); + } else { + // Closing the active toggle in a group. + toggleOff(toggle); + + // If there's a default toggle and it's not this one, + // activate it. + const defaultToggle = getDefaultToggle(group); + + if (defaultToggle && defaultToggle !== toggle) { + toggleOn(defaultToggle); + } } } else { - evt.target.setAttribute('aria-pressed', 'false'); - evt.target.setAttribute('aria-expanded', 'false'); - toggledBlock.classList.add('toggle-block-hidden'); - - if (bodyClass) { - document.body.classList.remove(bodyClass); + // Not in a group, original toggle behavior. + if (!isCurrentlyOpen) { + toggleOn(toggle); + } else { + toggleOff(toggle); } } }; @@ -85,5 +192,37 @@ el.addEventListener('click', handleClick); }); + + // Initialize toggle groups: activate the default toggle in each group. + document + .querySelectorAll('.toggle-block-group') + .forEach((group) => { + const toggles = getGroupToggles(group); + const hasActiveToggle = Array.from(toggles).some((toggle) => { + const cId = toggle.getAttribute('aria-controls'); + if (!cId) return false; + const controlled = document.getElementById(cId); + return ( + controlled && + !controlled.classList.contains('toggle-block-hidden') + ); + }); + + // If no toggle is already active, activate the default toggle. + if (!hasActiveToggle) { + const defaultToggle = getDefaultToggle(group); + + if (defaultToggle) { + // Close all others first, then open the default. + toggles.forEach((toggle) => { + if (toggle !== defaultToggle) { + toggleOff(toggle); + } + }); + + toggleOn(defaultToggle); + } + } + }); }); } From 257549987857a8521bf87940b50f585127f17e60 Mon Sep 17 00:00:00 2001 From: jeremyfelt Date: Tue, 10 Mar 2026 14:29:31 -0700 Subject: [PATCH 2/4] Apply npm run build --- build/toggle-block/block.json | 4 ++++ build/toggle-block/index.asset.php | 2 +- build/toggle-block/index.js | 2 +- build/toggle-block/view.asset.php | 2 +- build/toggle-block/view.js | 2 +- 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/build/toggle-block/block.json b/build/toggle-block/block.json index c2fae76..599e846 100644 --- a/build/toggle-block/block.json +++ b/build/toggle-block/block.json @@ -29,6 +29,10 @@ "type": "string", "default": "" }, + "defaultToggle": { + "type": "boolean", + "default": false + }, "labelText": { "type": "string", "default": "" diff --git a/build/toggle-block/index.asset.php b/build/toggle-block/index.asset.php index d725aa3..77cb95a 100644 --- a/build/toggle-block/index.asset.php +++ b/build/toggle-block/index.asset.php @@ -1 +1 @@ - array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-hooks', 'wp-i18n'), 'version' => '61ac43517d05434ffa10'); + array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-hooks', 'wp-i18n'), 'version' => '93d3de18fb73d4cf9c63'); diff --git a/build/toggle-block/index.js b/build/toggle-block/index.js index 5731b09..b6796d3 100644 --- a/build/toggle-block/index.js +++ b/build/toggle-block/index.js @@ -1 +1 @@ -(()=>{"use strict";function t(){return t=Object.assign?Object.assign.bind():function(t){for(var e=1;e{const{attributes:{bodyClass:l,buttonText:n,controlsId:a,labelText:r}}=o;return React.createElement("button",t({},e.useBlockProps.save(),{"aria-label":r,"aria-controls":a},l&&{"data-body-class":l}),n)}}];(0,window.wp.hooks.addFilter)("blocks.registerBlockType","happyprime/add-toggle-to-navigation",(function(t,e){if("core/navigation"!==e)return t;const o=t.allowedBlocks||[];return{...t,allowedBlocks:[...o,"happyprime/toggle-block"]}}));const s={from:[{type:"block",blocks:["core/navigation-link"],transform:(t,e)=>(0,o.createBlock)("happyprime/toggle-block",{buttonText:t.label||t.title||""},e)}],to:[{type:"block",blocks:["core/navigation-link"],transform:(t,e)=>(0,o.createBlock)("core/navigation-link",{label:t.buttonText||"",url:"#"},e)}]};(0,o.registerBlockType)(a,{edit:o=>{const{attributes:{bodyClass:a,buttonText:r,controlsId:s,labelText:c},setAttributes:i}=o;return React.createElement(React.Fragment,null,React.createElement(e.InspectorControls,null,React.createElement(l.PanelBody,{title:(0,n.__)("Toggle settings","toggle-block")},React.createElement(l.TextControl,{label:(0,n.__)("Controls ID","toggle-block"),description:(0,n.__)("Enter the HTML anchor ID of the element this toggle controls.","toggle-block"),value:s,onChange:t=>i({controlsId:t})}),React.createElement(l.TextControl,{label:(0,n.__)("Screen reader text","toggle-block"),description:(0,n.__)("Enter a description of what this toggle controls.","toggle-block"),value:c,onChange:t=>i({labelText:t})}),React.createElement(l.TextControl,{label:(0,n.__)("Body class","toggle-block"),description:(0,n.__)("Enter a class to add to the body when the toggle is active.","toggle-block"),value:a,onChange:t=>i({bodyClass:t})}))),React.createElement(e.RichText,t({},(0,e.useBlockProps)(),{tagName:"span",label:(0,n.__)("Button text","toggle-block"),placeholder:(0,n.__)("Button text","toggle-block"),value:r,onChange:t=>{i({buttonText:t})}})))},save:o=>{const{attributes:{bodyClass:l,buttonText:n,controlsId:a,labelText:r}}=o;return React.createElement("button",t({},e.useBlockProps.save(),{"aria-label":r,"aria-controls":a},l&&{"data-body-class":l}),React.createElement("span",null,n))},transforms:s,deprecated:r})})(); \ No newline at end of file +(()=>{"use strict";function e(){return e=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const{attributes:{bodyClass:l,buttonText:a,controlsId:n,labelText:r}}=o;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":r,"aria-controls":n},l&&{"data-body-class":l}),React.createElement("span",null,a))}},{attributes:{bodyClass:{type:"string"},buttonText:{type:"string"},controlsId:{type:"string"},labelText:{type:"string"}},save:o=>{const{attributes:{bodyClass:l,buttonText:a,controlsId:n,labelText:r}}=o;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":r,"aria-controls":n},l&&{"data-body-class":l}),a)}}];(0,window.wp.hooks.addFilter)("blocks.registerBlockType","happyprime/add-toggle-to-navigation",(function(e,t){if("core/navigation"!==t)return e;const o=e.allowedBlocks||[];return{...e,allowedBlocks:[...o,"happyprime/toggle-block"]}}));const s={from:[{type:"block",blocks:["core/navigation-link"],transform:(e,t)=>(0,o.createBlock)("happyprime/toggle-block",{buttonText:e.label||e.title||""},t)}],to:[{type:"block",blocks:["core/navigation-link"],transform:(e,t)=>(0,o.createBlock)("core/navigation-link",{label:e.buttonText||"",url:"#"},t)}]};(0,o.registerBlockType)(n,{edit:o=>{const{attributes:{bodyClass:n,buttonText:r,controlsId:s,defaultToggle:c,labelText:i},setAttributes:g}=o;return React.createElement(React.Fragment,null,React.createElement(t.InspectorControls,null,React.createElement(l.PanelBody,{title:(0,a.__)("Toggle settings","toggle-block")},React.createElement(l.TextControl,{label:(0,a.__)("Controls ID","toggle-block"),description:(0,a.__)("Enter the HTML anchor ID of the element this toggle controls.","toggle-block"),value:s,onChange:e=>g({controlsId:e})}),React.createElement(l.TextControl,{label:(0,a.__)("Screen reader text","toggle-block"),description:(0,a.__)("Enter a description of what this toggle controls.","toggle-block"),value:i,onChange:e=>g({labelText:e})}),React.createElement(l.TextControl,{label:(0,a.__)("Body class","toggle-block"),description:(0,a.__)("Enter a class to add to the body when the toggle is active.","toggle-block"),value:n,onChange:e=>g({bodyClass:e})}),React.createElement(l.ToggleControl,{label:(0,a.__)("Default toggle","toggle-block"),help:(0,a.__)("When inside a toggle group, this toggle will be active by default.","toggle-block"),checked:c,onChange:e=>g({defaultToggle:e})}))),React.createElement(t.RichText,e({},(0,t.useBlockProps)(),{tagName:"span",label:(0,a.__)("Button text","toggle-block"),placeholder:(0,a.__)("Button text","toggle-block"),value:r,onChange:e=>{g({buttonText:e})}})))},save:o=>{const{attributes:{bodyClass:l,buttonText:a,controlsId:n,defaultToggle:r,labelText:s}}=o;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":s,"aria-controls":n},l&&{"data-body-class":l},r&&{"data-default-toggle":"true"}),React.createElement("span",null,a))},transforms:s,deprecated:r})})(); \ No newline at end of file diff --git a/build/toggle-block/view.asset.php b/build/toggle-block/view.asset.php index 22ac49e..fb86b4d 100644 --- a/build/toggle-block/view.asset.php +++ b/build/toggle-block/view.asset.php @@ -1 +1 @@ - array(), 'version' => 'bcc5d43248b94f5647f5'); + array(), 'version' => '803095fd46a953086100'); diff --git a/build/toggle-block/view.js b/build/toggle-block/view.js index c63b2bc..7fb2633 100644 --- a/build/toggle-block/view.js +++ b/build/toggle-block/view.js @@ -1 +1 @@ -(()=>{{const t=t=>{const e=t.target.getAttribute("aria-controls");if(!e)return;const s=document.getElementById(e);if(!s)return;const a=t.target.getAttribute("data-body-class");t.target.classList.contains("toggle-block-has-toggled")||t.target.classList.add("toggle-block-has-toggled"),s.classList.contains("toggle-block-has-been-toggled")||s.classList.add("toggle-block-has-been-toggled"),s.classList.contains("toggle-block-hidden")?(t.target.setAttribute("aria-pressed","true"),t.target.setAttribute("aria-expanded","true"),s.classList.remove("toggle-block-hidden"),a&&document.body.classList.add(a)):(t.target.setAttribute("aria-pressed","false"),t.target.setAttribute("aria-expanded","false"),s.classList.add("toggle-block-hidden"),a&&document.body.classList.remove(a))};document.addEventListener("DOMContentLoaded",(()=>{document.querySelectorAll(".wp-block-happyprime-toggle-block").forEach((e=>{const s=e.getAttribute("aria-controls");if(!s)return;const a=document.getElementById(s);if(!a)return;const o=e.getAttribute("data-body-class");a.classList.contains("toggle-block-hidden")?(e.setAttribute("aria-pressed","false"),e.setAttribute("aria-expanded","false"),o&&document.body.classList.remove(o)):(e.setAttribute("aria-pressed","true"),e.setAttribute("aria-expanded","true"),o&&document.body.classList.add(o)),e.addEventListener("click",t)}))}))}})(); \ No newline at end of file +(()=>{{const t=t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");t.classList.contains("toggle-block-has-toggled")||t.classList.add("toggle-block-has-toggled"),o.classList.contains("toggle-block-has-been-toggled")||o.classList.add("toggle-block-has-been-toggled"),t.setAttribute("aria-pressed","true"),t.setAttribute("aria-expanded","true"),o.classList.remove("toggle-block-hidden"),s&&document.body.classList.add(s)},e=t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");t.setAttribute("aria-pressed","false"),t.setAttribute("aria-expanded","false"),o.classList.add("toggle-block-hidden"),s&&document.body.classList.remove(s)},o=t=>t.closest(".toggle-block-group"),s=t=>t.querySelectorAll(".wp-block-happyprime-toggle-block"),r=t=>t.querySelector('.wp-block-happyprime-toggle-block[data-default-toggle="true"]'),c=c=>{const a=c.target.closest(".wp-block-happyprime-toggle-block");if(!a)return;const l=a.getAttribute("aria-controls");if(!l)return;const n=document.getElementById(l);if(!n)return;const i=o(a),d=!n.classList.contains("toggle-block-hidden");if(i)if(d){e(a);const o=r(i);o&&o!==a&&t(o)}else s(i).forEach((t=>{t!==a&&e(t)})),t(a);else d?e(a):t(a)};document.addEventListener("DOMContentLoaded",(()=>{document.querySelectorAll(".wp-block-happyprime-toggle-block").forEach((t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");o.classList.contains("toggle-block-hidden")?(t.setAttribute("aria-pressed","false"),t.setAttribute("aria-expanded","false"),s&&document.body.classList.remove(s)):(t.setAttribute("aria-pressed","true"),t.setAttribute("aria-expanded","true"),s&&document.body.classList.add(s)),t.addEventListener("click",c)})),document.querySelectorAll(".toggle-block-group").forEach((o=>{const c=s(o);if(!Array.from(c).some((t=>{const e=t.getAttribute("aria-controls");if(!e)return!1;const o=document.getElementById(e);return o&&!o.classList.contains("toggle-block-hidden")}))){const s=r(o);s&&(c.forEach((t=>{t!==s&&e(t)})),t(s))}}))}))}})(); \ No newline at end of file From 944b51935cef942af73664f02e171419f24ca269 Mon Sep 17 00:00:00 2001 From: jeremyfelt Date: Tue, 10 Mar 2026 14:30:33 -0700 Subject: [PATCH 3/4] Update dependencies, rebuild --- build/toggle-block/index.asset.php | 2 +- build/toggle-block/index.js | 2 +- build/toggle-block/view.asset.php | 2 +- build/toggle-block/view.js | 2 +- package-lock.json | 1211 ++++++++++++++-------------- package.json | 18 +- src/toggle-block/index.js | 22 +- src/toggle-block/view.js | 59 +- 8 files changed, 670 insertions(+), 648 deletions(-) diff --git a/build/toggle-block/index.asset.php b/build/toggle-block/index.asset.php index 77cb95a..b1f5b84 100644 --- a/build/toggle-block/index.asset.php +++ b/build/toggle-block/index.asset.php @@ -1 +1 @@ - array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-hooks', 'wp-i18n'), 'version' => '93d3de18fb73d4cf9c63'); + array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-hooks', 'wp-i18n'), 'version' => 'f839081ca2c8193c2614'); diff --git a/build/toggle-block/index.js b/build/toggle-block/index.js index b6796d3..50dc3a2 100644 --- a/build/toggle-block/index.js +++ b/build/toggle-block/index.js @@ -1 +1 @@ -(()=>{"use strict";function e(){return e=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const{attributes:{bodyClass:l,buttonText:a,controlsId:n,labelText:r}}=o;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":r,"aria-controls":n},l&&{"data-body-class":l}),React.createElement("span",null,a))}},{attributes:{bodyClass:{type:"string"},buttonText:{type:"string"},controlsId:{type:"string"},labelText:{type:"string"}},save:o=>{const{attributes:{bodyClass:l,buttonText:a,controlsId:n,labelText:r}}=o;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":r,"aria-controls":n},l&&{"data-body-class":l}),a)}}];(0,window.wp.hooks.addFilter)("blocks.registerBlockType","happyprime/add-toggle-to-navigation",(function(e,t){if("core/navigation"!==t)return e;const o=e.allowedBlocks||[];return{...e,allowedBlocks:[...o,"happyprime/toggle-block"]}}));const s={from:[{type:"block",blocks:["core/navigation-link"],transform:(e,t)=>(0,o.createBlock)("happyprime/toggle-block",{buttonText:e.label||e.title||""},t)}],to:[{type:"block",blocks:["core/navigation-link"],transform:(e,t)=>(0,o.createBlock)("core/navigation-link",{label:e.buttonText||"",url:"#"},t)}]};(0,o.registerBlockType)(n,{edit:o=>{const{attributes:{bodyClass:n,buttonText:r,controlsId:s,defaultToggle:c,labelText:i},setAttributes:g}=o;return React.createElement(React.Fragment,null,React.createElement(t.InspectorControls,null,React.createElement(l.PanelBody,{title:(0,a.__)("Toggle settings","toggle-block")},React.createElement(l.TextControl,{label:(0,a.__)("Controls ID","toggle-block"),description:(0,a.__)("Enter the HTML anchor ID of the element this toggle controls.","toggle-block"),value:s,onChange:e=>g({controlsId:e})}),React.createElement(l.TextControl,{label:(0,a.__)("Screen reader text","toggle-block"),description:(0,a.__)("Enter a description of what this toggle controls.","toggle-block"),value:i,onChange:e=>g({labelText:e})}),React.createElement(l.TextControl,{label:(0,a.__)("Body class","toggle-block"),description:(0,a.__)("Enter a class to add to the body when the toggle is active.","toggle-block"),value:n,onChange:e=>g({bodyClass:e})}),React.createElement(l.ToggleControl,{label:(0,a.__)("Default toggle","toggle-block"),help:(0,a.__)("When inside a toggle group, this toggle will be active by default.","toggle-block"),checked:c,onChange:e=>g({defaultToggle:e})}))),React.createElement(t.RichText,e({},(0,t.useBlockProps)(),{tagName:"span",label:(0,a.__)("Button text","toggle-block"),placeholder:(0,a.__)("Button text","toggle-block"),value:r,onChange:e=>{g({buttonText:e})}})))},save:o=>{const{attributes:{bodyClass:l,buttonText:a,controlsId:n,defaultToggle:r,labelText:s}}=o;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":s,"aria-controls":n},l&&{"data-body-class":l},r&&{"data-default-toggle":"true"}),React.createElement("span",null,a))},transforms:s,deprecated:r})})(); \ No newline at end of file +(()=>{"use strict";function e(){return e=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const{attributes:{bodyClass:l,buttonText:a,controlsId:n,labelText:r}}=o;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":r,"aria-controls":n},l&&{"data-body-class":l}),React.createElement("span",null,a))}},{attributes:{bodyClass:{type:"string"},buttonText:{type:"string"},controlsId:{type:"string"},labelText:{type:"string"}},save:o=>{const{attributes:{bodyClass:l,buttonText:a,controlsId:n,labelText:r}}=o;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":r,"aria-controls":n},l&&{"data-body-class":l}),a)}}];(0,window.wp.hooks.addFilter)("blocks.registerBlockType","happyprime/add-toggle-to-navigation",function(e,t){if("core/navigation"!==t)return e;const o=e.allowedBlocks||[];return{...e,allowedBlocks:[...o,"happyprime/toggle-block"]}});const s={from:[{type:"block",blocks:["core/navigation-link"],transform:(e,t)=>(0,o.createBlock)("happyprime/toggle-block",{buttonText:e.label||e.title||""},t)}],to:[{type:"block",blocks:["core/navigation-link"],transform:(e,t)=>(0,o.createBlock)("core/navigation-link",{label:e.buttonText||"",url:"#"},t)}]};(0,o.registerBlockType)(n,{edit:o=>{const{attributes:{bodyClass:n,buttonText:r,controlsId:s,defaultToggle:c,labelText:i},setAttributes:g}=o;return React.createElement(React.Fragment,null,React.createElement(t.InspectorControls,null,React.createElement(l.PanelBody,{title:(0,a.__)("Toggle settings","toggle-block")},React.createElement(l.TextControl,{label:(0,a.__)("Controls ID","toggle-block"),description:(0,a.__)("Enter the HTML anchor ID of the element this toggle controls.","toggle-block"),value:s,onChange:e=>g({controlsId:e})}),React.createElement(l.TextControl,{label:(0,a.__)("Screen reader text","toggle-block"),description:(0,a.__)("Enter a description of what this toggle controls.","toggle-block"),value:i,onChange:e=>g({labelText:e})}),React.createElement(l.TextControl,{label:(0,a.__)("Body class","toggle-block"),description:(0,a.__)("Enter a class to add to the body when the toggle is active.","toggle-block"),value:n,onChange:e=>g({bodyClass:e})}),React.createElement(l.ToggleControl,{label:(0,a.__)("Default toggle","toggle-block"),help:(0,a.__)("When inside a toggle group, this toggle will be active by default.","toggle-block"),checked:c,onChange:e=>g({defaultToggle:e})}))),React.createElement(t.RichText,e({},(0,t.useBlockProps)(),{tagName:"span",label:(0,a.__)("Button text","toggle-block"),placeholder:(0,a.__)("Button text","toggle-block"),value:r,onChange:e=>{g({buttonText:e})}})))},save:o=>{const{attributes:{bodyClass:l,buttonText:a,controlsId:n,defaultToggle:r,labelText:s}}=o;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":s,"aria-controls":n},l&&{"data-body-class":l},r&&{"data-default-toggle":"true"}),React.createElement("span",null,a))},transforms:s,deprecated:r})})(); \ No newline at end of file diff --git a/build/toggle-block/view.asset.php b/build/toggle-block/view.asset.php index fb86b4d..3e19efc 100644 --- a/build/toggle-block/view.asset.php +++ b/build/toggle-block/view.asset.php @@ -1 +1 @@ - array(), 'version' => '803095fd46a953086100'); + array(), 'version' => 'fb3b32a436b1633da926'); diff --git a/build/toggle-block/view.js b/build/toggle-block/view.js index 7fb2633..66997e1 100644 --- a/build/toggle-block/view.js +++ b/build/toggle-block/view.js @@ -1 +1 @@ -(()=>{{const t=t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");t.classList.contains("toggle-block-has-toggled")||t.classList.add("toggle-block-has-toggled"),o.classList.contains("toggle-block-has-been-toggled")||o.classList.add("toggle-block-has-been-toggled"),t.setAttribute("aria-pressed","true"),t.setAttribute("aria-expanded","true"),o.classList.remove("toggle-block-hidden"),s&&document.body.classList.add(s)},e=t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");t.setAttribute("aria-pressed","false"),t.setAttribute("aria-expanded","false"),o.classList.add("toggle-block-hidden"),s&&document.body.classList.remove(s)},o=t=>t.closest(".toggle-block-group"),s=t=>t.querySelectorAll(".wp-block-happyprime-toggle-block"),r=t=>t.querySelector('.wp-block-happyprime-toggle-block[data-default-toggle="true"]'),c=c=>{const a=c.target.closest(".wp-block-happyprime-toggle-block");if(!a)return;const l=a.getAttribute("aria-controls");if(!l)return;const n=document.getElementById(l);if(!n)return;const i=o(a),d=!n.classList.contains("toggle-block-hidden");if(i)if(d){e(a);const o=r(i);o&&o!==a&&t(o)}else s(i).forEach((t=>{t!==a&&e(t)})),t(a);else d?e(a):t(a)};document.addEventListener("DOMContentLoaded",(()=>{document.querySelectorAll(".wp-block-happyprime-toggle-block").forEach((t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");o.classList.contains("toggle-block-hidden")?(t.setAttribute("aria-pressed","false"),t.setAttribute("aria-expanded","false"),s&&document.body.classList.remove(s)):(t.setAttribute("aria-pressed","true"),t.setAttribute("aria-expanded","true"),s&&document.body.classList.add(s)),t.addEventListener("click",c)})),document.querySelectorAll(".toggle-block-group").forEach((o=>{const c=s(o);if(!Array.from(c).some((t=>{const e=t.getAttribute("aria-controls");if(!e)return!1;const o=document.getElementById(e);return o&&!o.classList.contains("toggle-block-hidden")}))){const s=r(o);s&&(c.forEach((t=>{t!==s&&e(t)})),t(s))}}))}))}})(); \ No newline at end of file +(()=>{{const t=t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");t.classList.contains("toggle-block-has-toggled")||t.classList.add("toggle-block-has-toggled"),o.classList.contains("toggle-block-has-been-toggled")||o.classList.add("toggle-block-has-been-toggled"),t.setAttribute("aria-pressed","true"),t.setAttribute("aria-expanded","true"),o.classList.remove("toggle-block-hidden"),s&&document.body.classList.add(s)},e=t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");t.setAttribute("aria-pressed","false"),t.setAttribute("aria-expanded","false"),o.classList.add("toggle-block-hidden"),s&&document.body.classList.remove(s)},o=t=>t.closest(".toggle-block-group"),s=t=>t.querySelectorAll(".wp-block-happyprime-toggle-block"),r=t=>t.querySelector('.wp-block-happyprime-toggle-block[data-default-toggle="true"]'),c=c=>{const a=c.target.closest(".wp-block-happyprime-toggle-block");if(!a)return;const l=a.getAttribute("aria-controls");if(!l)return;const n=document.getElementById(l);if(!n)return;const i=o(a),d=!n.classList.contains("toggle-block-hidden");if(i)if(d){e(a);const o=r(i);o&&o!==a&&t(o)}else s(i).forEach(t=>{t!==a&&e(t)}),t(a);else d?e(a):t(a)};document.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll(".wp-block-happyprime-toggle-block").forEach(t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");o.classList.contains("toggle-block-hidden")?(t.setAttribute("aria-pressed","false"),t.setAttribute("aria-expanded","false"),s&&document.body.classList.remove(s)):(t.setAttribute("aria-pressed","true"),t.setAttribute("aria-expanded","true"),s&&document.body.classList.add(s)),t.addEventListener("click",c)}),document.querySelectorAll(".toggle-block-group").forEach(o=>{const c=s(o);if(!Array.from(c).some(t=>{const e=t.getAttribute("aria-controls");if(!e)return!1;const o=document.getElementById(e);return o&&!o.classList.contains("toggle-block-hidden")})){const s=r(o);s&&(c.forEach(t=>{t!==s&&e(t)}),t(s))}})})}})(); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 6eeaa8c..32962d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,41 +9,27 @@ "version": "0.5.0", "license": "GPL-2.0-or-later", "devDependencies": { - "@babel/core": "^7.27.4", - "@babel/plugin-transform-runtime": "^7.27.4", - "@babel/preset-env": "^7.27.2", - "@babel/preset-react": "^7.27.1", - "@babel/runtime": "^7.27.6", + "@babel/core": "^7.29.0", + "@babel/plugin-transform-runtime": "^7.29.0", + "@babel/preset-env": "^7.29.0", + "@babel/preset-react": "^7.28.5", + "@babel/runtime": "^7.28.6", "@happyprime/eslint-config": "^0.0.14", - "@wordpress/dependency-extraction-webpack-plugin": "^6.25.0", - "babel-loader": "^10.0.0", - "copy-webpack-plugin": "^13.0.0", - "webpack": "^5.99.9", + "@wordpress/dependency-extraction-webpack-plugin": "^6.41.0", + "babel-loader": "^10.1.1", + "copy-webpack-plugin": "^14.0.0", + "webpack": "^5.105.4", "webpack-cli": "^6.0.1" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -52,9 +38,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", - "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, "license": "MIT", "engines": { @@ -62,22 +48,22 @@ } }, "node_modules/@babel/core": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", - "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.4", - "@babel/parser": "^7.27.4", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.4", - "@babel/types": "^7.27.3", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -93,16 +79,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", - "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.5", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -110,26 +96,26 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz", - "integrity": "sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.1" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -140,18 +126,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", - "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.27.1", + "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "engines": { @@ -162,14 +148,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", - "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "regexpu-core": "^6.2.0", + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "engines": { @@ -180,60 +166,70 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", - "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.7.tgz", + "integrity": "sha512-6Fqi8MtQ/PweQ9xvux65emkLQ83uB+qAVtfHkC9UodyHMIZdxNI01HjLCLUtybElp2KY2XNE0nOgyP1E1vXw9w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -256,9 +252,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, "license": "MIT", "engines": { @@ -284,15 +280,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -326,9 +322,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -346,42 +342,42 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", - "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", - "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.6" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -391,14 +387,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", - "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -458,14 +454,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", - "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -488,13 +484,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", - "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -504,13 +500,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -569,15 +565,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", - "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -587,14 +583,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", - "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { @@ -621,13 +617,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.1.tgz", - "integrity": "sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -637,14 +633,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -654,14 +650,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", - "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -671,18 +667,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", - "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.27.1", - "globals": "^11.1.0" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -692,14 +688,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", - "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -709,13 +705,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz", - "integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -725,14 +722,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", - "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -758,14 +755,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -790,14 +787,31 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", - "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -858,13 +872,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", - "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -890,13 +904,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", - "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -939,14 +953,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -956,16 +970,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -992,14 +1006,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1025,13 +1039,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1041,13 +1055,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", - "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1057,16 +1071,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.3.tgz", - "integrity": "sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.3", - "@babel/plugin-transform-parameters": "^7.27.1" + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1093,13 +1108,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", - "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1109,13 +1124,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -1126,9 +1141,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", - "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "dev": true, "license": "MIT", "dependencies": { @@ -1142,14 +1157,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", - "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1159,15 +1174,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", - "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1193,9 +1208,9 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.27.1.tgz", - "integrity": "sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", "dev": true, "license": "MIT", "dependencies": { @@ -1262,13 +1277,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.1.tgz", - "integrity": "sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1278,14 +1293,14 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", - "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1311,17 +1326,17 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.4.tgz", - "integrity": "sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", + "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "engines": { @@ -1348,13 +1363,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", - "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -1429,14 +1444,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", - "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1463,14 +1478,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", - "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1480,80 +1495,81 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", - "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz", + "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/compat-data": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.27.1", - "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.27.1", - "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.27.1", - "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.27.1", - "@babel/plugin-transform-classes": "^7.27.1", - "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.1", - "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", - "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.27.2", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1", - "@babel/plugin-transform-parameters": "^7.27.1", - "@babel/plugin-transform-private-methods": "^7.27.1", - "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.27.1", - "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { @@ -1563,6 +1579,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.1.tgz", + "integrity": "sha512-ENp89vM9Pw4kv/koBb5N2f9bDZsR0hpf3BdPMOg/pkS3pwO4dzNnQZVXtBbeyAadgm865DmQG2jMMLqmZXvuCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.7", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", @@ -1579,15 +1609,15 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", - "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz", + "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-transform-react-display-name": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.28.0", "@babel/plugin-transform-react-jsx": "^7.27.1", "@babel/plugin-transform-react-jsx-development": "^7.27.1", "@babel/plugin-transform-react-pure-annotations": "^7.27.1" @@ -1600,9 +1630,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", - "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", "dev": true, "license": "MIT", "engines": { @@ -1610,48 +1640,48 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.4", - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1844,34 +1874,31 @@ "peer": true }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.0.0" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", "engines": { @@ -1879,9 +1906,9 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", "dependencies": { @@ -1890,16 +1917,16 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { @@ -1993,9 +2020,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, @@ -2015,13 +2042,13 @@ "peer": true }, "node_modules/@types/node": { - "version": "22.15.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.3.tgz", - "integrity": "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==", + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.4.0.tgz", + "integrity": "sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.18.0" } }, "node_modules/@ungap/structured-clone": { @@ -2241,9 +2268,9 @@ } }, "node_modules/@wordpress/dependency-extraction-webpack-plugin": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.25.0.tgz", - "integrity": "sha512-bAVve8ksBNfCcBq09IoTLCdF604UXtVh4Fb+/LBqyJc1kTTS02PsIv5aguSvCjcNSakQgvs7IJqEGJ2ZmP4JZg==", + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.41.0.tgz", + "integrity": "sha512-OYg+g+MFmHRRUcjl5hNOrBx56GRkp6MNhHuiAvYP7vFJ8dxwzKmk3AHfqr25QLt3K62ODHK1aaikE1dZt40kNg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -2272,9 +2299,9 @@ "license": "Apache-2.0" }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", "bin": { @@ -2284,6 +2311,19 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -2296,9 +2336,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "peer": true, @@ -2332,9 +2372,9 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", "dependencies": { @@ -2638,9 +2678,9 @@ } }, "node_modules/babel-loader": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", - "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.1.1.tgz", + "integrity": "sha512-JwKSzk2kjIe7mgPK+/lyZ2QAaJcpahNAdM+hgR2HI8D0OJVkdj8Rl6J3kaLYki9pwF7P2iWnD8qVv80Lq1ABtg==", "dev": true, "license": "MIT", "dependencies": { @@ -2650,19 +2690,28 @@ "node": "^18.20.0 || ^20.10.0 || >=22.0.0" }, "peerDependencies": { - "@babel/core": "^7.12.0", + "@babel/core": "^7.12.0 || ^8.0.0-beta.1", + "@rspack/core": "^1.0.0 || ^2.0.0-0", "webpack": ">=5.61.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", - "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.16.tgz", + "integrity": "sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.4", + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.7", "semver": "^6.3.1" }, "peerDependencies": { @@ -2670,27 +2719,27 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", - "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.7.tgz", + "integrity": "sha512-OTYbUlSwXhNgr4g6efMZgsO8//jA61P7ZbRX3iTT53VON8l+WQS8IAUEVo4a4cWknrg2W8Cj4gQhRYNCJ8GkAA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.4" + "@babel/helper-define-polyfill-provider": "^0.6.7" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -2704,10 +2753,23 @@ "license": "MIT", "peer": true }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "peer": true, @@ -2717,9 +2779,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -2737,10 +2799,11 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -2821,9 +2884,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001716", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001716.tgz", - "integrity": "sha512-49/c1+x3Kwz7ZIWt+4DvK3aMJy9oYXXG6/97JKsnjdCk/6n9vVyWL8NAwVt95Lwt9eigI10Hl782kDfZUUlRXw==", + "version": "1.0.30001777", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001777.tgz", + "integrity": "sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==", "dev": true, "funding": [ { @@ -2947,20 +3010,20 @@ "license": "MIT" }, "node_modules/copy-webpack-plugin": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.0.tgz", - "integrity": "sha512-FgR/h5a6hzJqATDGd9YG41SeDViH+0bkHn6WNXCi5zKAZkeESeSxLySSsFLHqLEVCh0E+rITmCf0dusXWYukeQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-14.0.0.tgz", + "integrity": "sha512-3JLW90aBGeaTLpM7mYQKpnVdgsUZRExY55giiZgLuX/xTQRUs1dOCwbBnWnvY6Q6rfZoXMNwzOQJCSZPppfqXA==", "dev": true, "license": "MIT", "dependencies": { "glob-parent": "^6.0.1", "normalize-path": "^3.0.0", "schema-utils": "^4.2.0", - "serialize-javascript": "^6.0.2", + "serialize-javascript": "^7.0.3", "tinyglobby": "^0.2.12" }, "engines": { - "node": ">= 18.12.0" + "node": ">= 20.9.0" }, "funding": { "type": "opencollective", @@ -2971,13 +3034,13 @@ } }, "node_modules/core-js-compat": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.42.0.tgz", - "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz", + "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.4" + "browserslist": "^4.28.1" }, "funding": { "type": "opencollective", @@ -3065,9 +3128,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -3159,9 +3222,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.146", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.146.tgz", - "integrity": "sha512-KI0DFJBdqehWSqXmNKIAHpjW4rHL1ugBx4ljOXli41E+IV3JKyTxZ6E7/NgVifzDXBHUqR8Ae1I+eu9vAIqfyQ==", + "version": "1.5.307", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz", + "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==", "dev": true, "license": "ISC" }, @@ -3174,14 +3237,14 @@ "peer": true }, "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz", + "integrity": "sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==", "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "tapable": "^2.3.0" }, "engines": { "node": ">=10.13.0" @@ -3319,9 +3382,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true, "license": "MIT" }, @@ -4270,16 +4333,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/globalthis": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", @@ -5028,9 +5081,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "peer": true, @@ -5192,13 +5245,17 @@ } }, "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "dev": true, "license": "MIT", "engines": { "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/locate-path": { @@ -5298,9 +5355,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "peer": true, @@ -5345,9 +5402,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", "dev": true, "license": "MIT" }, @@ -5829,16 +5886,6 @@ "license": "MIT", "peer": true }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -5892,9 +5939,9 @@ "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "dev": true, "license": "MIT", "dependencies": { @@ -5927,18 +5974,18 @@ } }, "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", + "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", + "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { "node": ">=4" @@ -5952,31 +5999,18 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -5988,13 +6022,13 @@ } }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -6118,27 +6152,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", @@ -6177,9 +6190,9 @@ } }, "node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, "license": "MIT", "dependencies": { @@ -6197,9 +6210,9 @@ } }, "node_modules/schema-utils/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", "dependencies": { @@ -6244,13 +6257,13 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.4.tgz", + "integrity": "sha512-DuGdB+Po43Q5Jxwpzt1lhyFSYKryqoNjQSA9M92tyw0lyHIOur+XCalOUe0KTJpyqzT8+fQ5A0Jf7vCx/NKmIg==", "dev": true, "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" + "engines": { + "node": ">=20.0.0" } }, "node_modules/set-function-length": { @@ -6674,24 +6687,28 @@ } }, "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "dev": true, "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/terser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -6703,16 +6720,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", + "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "engines": { @@ -6943,9 +6959,9 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "dev": true, "license": "MIT" }, @@ -6974,9 +6990,9 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "dev": true, "license": "MIT", "engines": { @@ -6984,9 +7000,9 @@ } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "dev": true, "license": "MIT", "engines": { @@ -6994,9 +7010,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -7036,9 +7052,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "dev": true, "license": "MIT", "dependencies": { @@ -7050,36 +7066,37 @@ } }, "node_modules/webpack": { - "version": "5.99.9", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", - "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", + "version": "5.105.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.4.tgz", + "integrity": "sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==", "dev": true, "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", + "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", + "acorn": "^8.16.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", + "enhanced-resolve": "^5.20.0", + "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", + "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^4.3.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.17", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.4" }, "bin": { "webpack": "bin/webpack.js" @@ -7166,9 +7183,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", + "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 64e2942..3e4720c 100644 --- a/package.json +++ b/package.json @@ -17,16 +17,16 @@ "url": "https://github.com/happyprime/toggle-block/" }, "devDependencies": { - "@babel/core": "^7.27.4", - "@babel/plugin-transform-runtime": "^7.27.4", - "@babel/preset-env": "^7.27.2", - "@babel/preset-react": "^7.27.1", - "@babel/runtime": "^7.27.6", + "@babel/core": "^7.29.0", + "@babel/plugin-transform-runtime": "^7.29.0", + "@babel/preset-env": "^7.29.0", + "@babel/preset-react": "^7.28.5", + "@babel/runtime": "^7.28.6", "@happyprime/eslint-config": "^0.0.14", - "@wordpress/dependency-extraction-webpack-plugin": "^6.25.0", - "babel-loader": "^10.0.0", - "copy-webpack-plugin": "^13.0.0", - "webpack": "^5.99.9", + "@wordpress/dependency-extraction-webpack-plugin": "^6.41.0", + "babel-loader": "^10.1.1", + "copy-webpack-plugin": "^14.0.0", + "webpack": "^5.105.4", "webpack-cli": "^6.0.1" }, "scripts": { diff --git a/src/toggle-block/index.js b/src/toggle-block/index.js index 9f8bdde..92af215 100644 --- a/src/toggle-block/index.js +++ b/src/toggle-block/index.js @@ -5,11 +5,7 @@ import { useBlockProps, } from '@wordpress/block-editor'; import { createBlock, registerBlockType } from '@wordpress/blocks'; -import { - PanelBody, - TextControl, - ToggleControl, -} from '@wordpress/components'; +import { PanelBody, TextControl, ToggleControl } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; // Internal dependencies. @@ -21,7 +17,13 @@ import './extend-navigation-block'; const Edit = (props) => { const { - attributes: { bodyClass, buttonText, controlsId, defaultToggle, labelText }, + attributes: { + bodyClass, + buttonText, + controlsId, + defaultToggle, + labelText, + }, setAttributes, } = props; @@ -91,7 +93,13 @@ const Edit = (props) => { const Save = (props) => { const { - attributes: { bodyClass, buttonText, controlsId, defaultToggle, labelText }, + attributes: { + bodyClass, + buttonText, + controlsId, + defaultToggle, + labelText, + }, } = props; return ( diff --git a/src/toggle-block/view.js b/src/toggle-block/view.js index 55c0fe3..07428b6 100644 --- a/src/toggle-block/view.js +++ b/src/toggle-block/view.js @@ -98,9 +98,7 @@ }; const handleClick = (evt) => { - const toggle = evt.target.closest( - '.wp-block-happyprime-toggle-block' - ); + const toggle = evt.target.closest('.wp-block-happyprime-toggle-block'); if (!toggle) { return; @@ -119,8 +117,9 @@ } const group = getToggleGroup(toggle); - const isCurrentlyOpen = - !toggledBlock.classList.contains('toggle-block-hidden'); + const isCurrentlyOpen = !toggledBlock.classList.contains( + 'toggle-block-hidden' + ); if (group) { // In a group, toggling on closes others. @@ -194,35 +193,33 @@ }); // Initialize toggle groups: activate the default toggle in each group. - document - .querySelectorAll('.toggle-block-group') - .forEach((group) => { - const toggles = getGroupToggles(group); - const hasActiveToggle = Array.from(toggles).some((toggle) => { - const cId = toggle.getAttribute('aria-controls'); - if (!cId) return false; - const controlled = document.getElementById(cId); - return ( - controlled && - !controlled.classList.contains('toggle-block-hidden') - ); - }); + document.querySelectorAll('.toggle-block-group').forEach((group) => { + const toggles = getGroupToggles(group); + const hasActiveToggle = Array.from(toggles).some((toggle) => { + const cId = toggle.getAttribute('aria-controls'); + if (!cId) return false; + const controlled = document.getElementById(cId); + return ( + controlled && + !controlled.classList.contains('toggle-block-hidden') + ); + }); - // If no toggle is already active, activate the default toggle. - if (!hasActiveToggle) { - const defaultToggle = getDefaultToggle(group); + // If no toggle is already active, activate the default toggle. + if (!hasActiveToggle) { + const defaultToggle = getDefaultToggle(group); - if (defaultToggle) { - // Close all others first, then open the default. - toggles.forEach((toggle) => { - if (toggle !== defaultToggle) { - toggleOff(toggle); - } - }); + if (defaultToggle) { + // Close all others first, then open the default. + toggles.forEach((toggle) => { + if (toggle !== defaultToggle) { + toggleOff(toggle); + } + }); - toggleOn(defaultToggle); - } + toggleOn(defaultToggle); } - }); + } + }); }); } From b4567b48d2c0b2f05a949aa54a3dc428e1055f0a Mon Sep 17 00:00:00 2001 From: jeremyfelt Date: Tue, 10 Mar 2026 15:39:59 -0700 Subject: [PATCH 4/4] Improve accessibility --- README.md | 9 +++++++++ build/toggle-block/block.json | 20 ++++++++++++++++--- build/toggle-block/index.asset.php | 2 +- build/toggle-block/index.js | 2 +- build/toggle-block/view.asset.php | 2 +- build/toggle-block/view.js | 2 +- composer.json | 2 +- package-lock.json | 4 ++-- package.json | 2 +- plugin.php | 2 +- src/toggle-block/block.json | 20 ++++++++++++++++--- src/toggle-block/deprecated.js | 32 ++++++++++++++++++++++++++++++ src/toggle-block/index.js | 2 +- src/toggle-block/view.js | 14 +++++++------ 14 files changed, 93 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 2fe279e..97d024b 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,15 @@ The "Controls ID" entered in this panel must match the "HTML anchor" assigned to ## Changelog +### 0.6.0 + +* Add toggle group support: when toggle blocks are inside a container with the `toggle-block-group` class, activating one toggle automatically closes others in the group. +* Add a "Default toggle" option to mark which toggle should be active by default in a group. +* Extend block supports to match paragraph and heading blocks: add font family, font style, font weight, letter spacing, text decoration, text transform, writing mode, border, and link color support. +* Only render `aria-label` when screen reader text is provided, allowing the button text to serve as the accessible name by default. +* Use `aria-expanded` instead of both `aria-pressed` and `aria-expanded` for toggle state. +* Update to latest dependencies, build process, and code standards. + ### 0.5.0 * Wrap button text in a `` element to help with styling. diff --git a/build/toggle-block/block.json b/build/toggle-block/block.json index 599e846..fe51bca 100644 --- a/build/toggle-block/block.json +++ b/build/toggle-block/block.json @@ -6,7 +6,7 @@ "category": "widgets", "icon": "location", "description": "Toggle button to show and hide another block.", - "version": "0.5.0", + "version": "0.6.0", "textdomain": "toggle-block", "editorScript": "file:index.js", "viewScript": [ @@ -46,7 +46,14 @@ "background": true, "enableContrastChecker": true, "text": true, - "gradients": true + "gradients": true, + "link": true + }, + "__experimentalBorder": { + "color": true, + "radius": true, + "style": true, + "width": true }, "defaultStylePicker": true, "dimensions": { @@ -62,7 +69,14 @@ }, "typography": { "fontSize": true, - "lineHeight": true + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontStyle": true, + "__experimentalFontWeight": true, + "__experimentalLetterSpacing": true, + "__experimentalTextDecoration": true, + "__experimentalTextTransform": true, + "__experimentalWritingMode": true } } } diff --git a/build/toggle-block/index.asset.php b/build/toggle-block/index.asset.php index b1f5b84..1925798 100644 --- a/build/toggle-block/index.asset.php +++ b/build/toggle-block/index.asset.php @@ -1 +1 @@ - array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-hooks', 'wp-i18n'), 'version' => 'f839081ca2c8193c2614'); + array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-hooks', 'wp-i18n'), 'version' => 'a5c3c55e8feccd19dc5a'); diff --git a/build/toggle-block/index.js b/build/toggle-block/index.js index 50dc3a2..390db60 100644 --- a/build/toggle-block/index.js +++ b/build/toggle-block/index.js @@ -1 +1 @@ -(()=>{"use strict";function e(){return e=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const{attributes:{bodyClass:l,buttonText:a,controlsId:n,labelText:r}}=o;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":r,"aria-controls":n},l&&{"data-body-class":l}),React.createElement("span",null,a))}},{attributes:{bodyClass:{type:"string"},buttonText:{type:"string"},controlsId:{type:"string"},labelText:{type:"string"}},save:o=>{const{attributes:{bodyClass:l,buttonText:a,controlsId:n,labelText:r}}=o;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":r,"aria-controls":n},l&&{"data-body-class":l}),a)}}];(0,window.wp.hooks.addFilter)("blocks.registerBlockType","happyprime/add-toggle-to-navigation",function(e,t){if("core/navigation"!==t)return e;const o=e.allowedBlocks||[];return{...e,allowedBlocks:[...o,"happyprime/toggle-block"]}});const s={from:[{type:"block",blocks:["core/navigation-link"],transform:(e,t)=>(0,o.createBlock)("happyprime/toggle-block",{buttonText:e.label||e.title||""},t)}],to:[{type:"block",blocks:["core/navigation-link"],transform:(e,t)=>(0,o.createBlock)("core/navigation-link",{label:e.buttonText||"",url:"#"},t)}]};(0,o.registerBlockType)(n,{edit:o=>{const{attributes:{bodyClass:n,buttonText:r,controlsId:s,defaultToggle:c,labelText:i},setAttributes:g}=o;return React.createElement(React.Fragment,null,React.createElement(t.InspectorControls,null,React.createElement(l.PanelBody,{title:(0,a.__)("Toggle settings","toggle-block")},React.createElement(l.TextControl,{label:(0,a.__)("Controls ID","toggle-block"),description:(0,a.__)("Enter the HTML anchor ID of the element this toggle controls.","toggle-block"),value:s,onChange:e=>g({controlsId:e})}),React.createElement(l.TextControl,{label:(0,a.__)("Screen reader text","toggle-block"),description:(0,a.__)("Enter a description of what this toggle controls.","toggle-block"),value:i,onChange:e=>g({labelText:e})}),React.createElement(l.TextControl,{label:(0,a.__)("Body class","toggle-block"),description:(0,a.__)("Enter a class to add to the body when the toggle is active.","toggle-block"),value:n,onChange:e=>g({bodyClass:e})}),React.createElement(l.ToggleControl,{label:(0,a.__)("Default toggle","toggle-block"),help:(0,a.__)("When inside a toggle group, this toggle will be active by default.","toggle-block"),checked:c,onChange:e=>g({defaultToggle:e})}))),React.createElement(t.RichText,e({},(0,t.useBlockProps)(),{tagName:"span",label:(0,a.__)("Button text","toggle-block"),placeholder:(0,a.__)("Button text","toggle-block"),value:r,onChange:e=>{g({buttonText:e})}})))},save:o=>{const{attributes:{bodyClass:l,buttonText:a,controlsId:n,defaultToggle:r,labelText:s}}=o;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":s,"aria-controls":n},l&&{"data-body-class":l},r&&{"data-default-toggle":"true"}),React.createElement("span",null,a))},transforms:s,deprecated:r})})(); \ No newline at end of file +(()=>{"use strict";function e(){return e=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const{attributes:{bodyClass:o,buttonText:a,controlsId:n,defaultToggle:r,labelText:s}}=l;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":s,"aria-controls":n},o&&{"data-body-class":o},r&&{"data-default-toggle":"true"}),React.createElement("span",null,a))}},{attributes:{bodyClass:{type:"string",default:""},buttonText:{type:"string",default:""},controlsId:{type:"string",default:""},labelText:{type:"string",default:""}},save:l=>{const{attributes:{bodyClass:o,buttonText:a,controlsId:n,labelText:r}}=l;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":r,"aria-controls":n},o&&{"data-body-class":o}),React.createElement("span",null,a))}},{attributes:{bodyClass:{type:"string"},buttonText:{type:"string"},controlsId:{type:"string"},labelText:{type:"string"}},save:l=>{const{attributes:{bodyClass:o,buttonText:a,controlsId:n,labelText:r}}=l;return React.createElement("button",e({},t.useBlockProps.save(),{"aria-label":r,"aria-controls":n},o&&{"data-body-class":o}),a)}}];(0,window.wp.hooks.addFilter)("blocks.registerBlockType","happyprime/add-toggle-to-navigation",function(e,t){if("core/navigation"!==t)return e;const l=e.allowedBlocks||[];return{...e,allowedBlocks:[...l,"happyprime/toggle-block"]}});const s={from:[{type:"block",blocks:["core/navigation-link"],transform:(e,t)=>(0,l.createBlock)("happyprime/toggle-block",{buttonText:e.label||e.title||""},t)}],to:[{type:"block",blocks:["core/navigation-link"],transform:(e,t)=>(0,l.createBlock)("core/navigation-link",{label:e.buttonText||"",url:"#"},t)}]};(0,l.registerBlockType)(n,{edit:l=>{const{attributes:{bodyClass:n,buttonText:r,controlsId:s,defaultToggle:i,labelText:c},setAttributes:g}=l;return React.createElement(React.Fragment,null,React.createElement(t.InspectorControls,null,React.createElement(o.PanelBody,{title:(0,a.__)("Toggle settings","toggle-block")},React.createElement(o.TextControl,{label:(0,a.__)("Controls ID","toggle-block"),description:(0,a.__)("Enter the HTML anchor ID of the element this toggle controls.","toggle-block"),value:s,onChange:e=>g({controlsId:e})}),React.createElement(o.TextControl,{label:(0,a.__)("Screen reader text","toggle-block"),description:(0,a.__)("Enter a description of what this toggle controls.","toggle-block"),value:c,onChange:e=>g({labelText:e})}),React.createElement(o.TextControl,{label:(0,a.__)("Body class","toggle-block"),description:(0,a.__)("Enter a class to add to the body when the toggle is active.","toggle-block"),value:n,onChange:e=>g({bodyClass:e})}),React.createElement(o.ToggleControl,{label:(0,a.__)("Default toggle","toggle-block"),help:(0,a.__)("When inside a toggle group, this toggle will be active by default.","toggle-block"),checked:i,onChange:e=>g({defaultToggle:e})}))),React.createElement(t.RichText,e({},(0,t.useBlockProps)(),{tagName:"span",label:(0,a.__)("Button text","toggle-block"),placeholder:(0,a.__)("Button text","toggle-block"),value:r,onChange:e=>{g({buttonText:e})}})))},save:l=>{const{attributes:{bodyClass:o,buttonText:a,controlsId:n,defaultToggle:r,labelText:s}}=l;return React.createElement("button",e({},t.useBlockProps.save(),s&&{"aria-label":s},{"aria-controls":n},o&&{"data-body-class":o},r&&{"data-default-toggle":"true"}),React.createElement("span",null,a))},transforms:s,deprecated:r})})(); \ No newline at end of file diff --git a/build/toggle-block/view.asset.php b/build/toggle-block/view.asset.php index 3e19efc..cef6d5a 100644 --- a/build/toggle-block/view.asset.php +++ b/build/toggle-block/view.asset.php @@ -1 +1 @@ - array(), 'version' => 'fb3b32a436b1633da926'); + array(), 'version' => 'b3c2eb6fcd265848e8b1'); diff --git a/build/toggle-block/view.js b/build/toggle-block/view.js index 66997e1..5f20096 100644 --- a/build/toggle-block/view.js +++ b/build/toggle-block/view.js @@ -1 +1 @@ -(()=>{{const t=t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");t.classList.contains("toggle-block-has-toggled")||t.classList.add("toggle-block-has-toggled"),o.classList.contains("toggle-block-has-been-toggled")||o.classList.add("toggle-block-has-been-toggled"),t.setAttribute("aria-pressed","true"),t.setAttribute("aria-expanded","true"),o.classList.remove("toggle-block-hidden"),s&&document.body.classList.add(s)},e=t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");t.setAttribute("aria-pressed","false"),t.setAttribute("aria-expanded","false"),o.classList.add("toggle-block-hidden"),s&&document.body.classList.remove(s)},o=t=>t.closest(".toggle-block-group"),s=t=>t.querySelectorAll(".wp-block-happyprime-toggle-block"),r=t=>t.querySelector('.wp-block-happyprime-toggle-block[data-default-toggle="true"]'),c=c=>{const a=c.target.closest(".wp-block-happyprime-toggle-block");if(!a)return;const l=a.getAttribute("aria-controls");if(!l)return;const n=document.getElementById(l);if(!n)return;const i=o(a),d=!n.classList.contains("toggle-block-hidden");if(i)if(d){e(a);const o=r(i);o&&o!==a&&t(o)}else s(i).forEach(t=>{t!==a&&e(t)}),t(a);else d?e(a):t(a)};document.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll(".wp-block-happyprime-toggle-block").forEach(t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");o.classList.contains("toggle-block-hidden")?(t.setAttribute("aria-pressed","false"),t.setAttribute("aria-expanded","false"),s&&document.body.classList.remove(s)):(t.setAttribute("aria-pressed","true"),t.setAttribute("aria-expanded","true"),s&&document.body.classList.add(s)),t.addEventListener("click",c)}),document.querySelectorAll(".toggle-block-group").forEach(o=>{const c=s(o);if(!Array.from(c).some(t=>{const e=t.getAttribute("aria-controls");if(!e)return!1;const o=document.getElementById(e);return o&&!o.classList.contains("toggle-block-hidden")})){const s=r(o);s&&(c.forEach(t=>{t!==s&&e(t)}),t(s))}})})}})(); \ No newline at end of file +(()=>{{const t=t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");t.classList.contains("toggle-block-has-toggled")||t.classList.add("toggle-block-has-toggled"),o.classList.contains("toggle-block-has-been-toggled")||o.classList.add("toggle-block-has-been-toggled"),t.setAttribute("aria-expanded","true"),o.classList.remove("toggle-block-hidden"),s&&document.body.classList.add(s)},e=t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");t.setAttribute("aria-expanded","false"),o.classList.add("toggle-block-hidden"),s&&document.body.classList.remove(s)},o=t=>t.closest(".toggle-block-group"),s=t=>t.querySelectorAll(".wp-block-happyprime-toggle-block"),c=t=>t.querySelector('.wp-block-happyprime-toggle-block[data-default-toggle="true"]'),l=l=>{const n=l.target.closest(".wp-block-happyprime-toggle-block");if(!n)return;const a=n.getAttribute("aria-controls");if(!a)return;const r=document.getElementById(a);if(!r)return;const d=o(n),i=!r.classList.contains("toggle-block-hidden");if(d)if(i){e(n);const o=c(d);o&&o!==n&&t(o)}else s(d).forEach(t=>{t!==n&&e(t)}),t(n);else i?e(n):t(n)},n=()=>{document.querySelectorAll(".wp-block-happyprime-toggle-block").forEach(t=>{const e=t.getAttribute("aria-controls");if(!e)return;const o=document.getElementById(e);if(!o)return;const s=t.getAttribute("data-body-class");o.classList.contains("toggle-block-hidden")?(t.setAttribute("aria-expanded","false"),s&&document.body.classList.remove(s)):(t.setAttribute("aria-expanded","true"),s&&document.body.classList.add(s)),t.addEventListener("click",l)}),document.querySelectorAll(".toggle-block-group").forEach(o=>{const l=s(o);if(!Array.from(l).some(t=>{const e=t.getAttribute("aria-controls");if(!e)return!1;const o=document.getElementById(e);return o&&!o.classList.contains("toggle-block-hidden")})){const s=c(o);s&&(l.forEach(t=>{t!==s&&e(t)}),t(s))}})};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",n):n()}})(); \ No newline at end of file diff --git a/composer.json b/composer.json index ac50617..1be4a53 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "happyprime/toggle-block", "description": "Add a toggle to show and hide another block.", - "version": "0.5.0", + "version": "0.6.0", "type": "wordpress-plugin", "minimum-stability": "stable", "license": "GPLv2-or-later", diff --git a/package-lock.json b/package-lock.json index 32962d7..7b78f64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "toggle-block", - "version": "0.5.0", + "version": "0.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "toggle-block", - "version": "0.5.0", + "version": "0.6.0", "license": "GPL-2.0-or-later", "devDependencies": { "@babel/core": "^7.29.0", diff --git a/package.json b/package.json index 3e4720c..4fdb820 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "toggle-block", - "version": "0.5.0", + "version": "0.6.0", "description": "Add a toggle to show and hide another block", "author": "Happy Prime", "license": "GPL-2.0-or-later", diff --git a/plugin.php b/plugin.php index 29d935d..9900139 100644 --- a/plugin.php +++ b/plugin.php @@ -2,7 +2,7 @@ /** * Plugin Name: Toggle Block * Description: Add a toggle to show and hide another block. - * Version: 0.5.0 + * Version: 0.6.0 * Plugin URI: https://github.com/happyprime/toggle-block/ * Author: Happy Prime * Author URI: https://happyprime.co diff --git a/src/toggle-block/block.json b/src/toggle-block/block.json index 599e846..fe51bca 100644 --- a/src/toggle-block/block.json +++ b/src/toggle-block/block.json @@ -6,7 +6,7 @@ "category": "widgets", "icon": "location", "description": "Toggle button to show and hide another block.", - "version": "0.5.0", + "version": "0.6.0", "textdomain": "toggle-block", "editorScript": "file:index.js", "viewScript": [ @@ -46,7 +46,14 @@ "background": true, "enableContrastChecker": true, "text": true, - "gradients": true + "gradients": true, + "link": true + }, + "__experimentalBorder": { + "color": true, + "radius": true, + "style": true, + "width": true }, "defaultStylePicker": true, "dimensions": { @@ -62,7 +69,14 @@ }, "typography": { "fontSize": true, - "lineHeight": true + "lineHeight": true, + "__experimentalFontFamily": true, + "__experimentalFontStyle": true, + "__experimentalFontWeight": true, + "__experimentalLetterSpacing": true, + "__experimentalTextDecoration": true, + "__experimentalTextTransform": true, + "__experimentalWritingMode": true } } } diff --git a/src/toggle-block/deprecated.js b/src/toggle-block/deprecated.js index 95875a1..1af004d 100644 --- a/src/toggle-block/deprecated.js +++ b/src/toggle-block/deprecated.js @@ -1,6 +1,38 @@ import { useBlockProps } from '@wordpress/block-editor'; const deprecated = [ + { + attributes: { + bodyClass: { type: 'string', default: '' }, + buttonText: { type: 'string', default: '' }, + controlsId: { type: 'string', default: '' }, + defaultToggle: { type: 'boolean', default: false }, + labelText: { type: 'string', default: '' }, + }, + save: (props) => { + const { + attributes: { + bodyClass, + buttonText, + controlsId, + defaultToggle, + labelText, + }, + } = props; + + return ( + + ); + }, + }, { attributes: { bodyClass: { type: 'string', default: '' }, diff --git a/src/toggle-block/index.js b/src/toggle-block/index.js index 92af215..c2b04aa 100644 --- a/src/toggle-block/index.js +++ b/src/toggle-block/index.js @@ -105,7 +105,7 @@ const Save = (props) => { return (