Changeset 3385207
- Timestamp:
- 10/27/2025 12:08:22 PM (4 months ago)
- Location:
- responsive-columns/trunk
- Files:
-
- 6 edited
-
blocks/editor.css (modified) (1 diff)
-
build/index.asset.php (modified) (1 diff)
-
build/index.js (modified) (1 diff)
-
languages/responsive-columns.pot (modified) (4 diffs)
-
readme.txt (modified) (4 diffs)
-
responsive-columns.php (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
responsive-columns/trunk/blocks/editor.css
r3293306 r3385207 18 18 .s1-rc-gap-control input { 19 19 padding-right: 20px !important; 20 } 21 22 .s1-rc-masonry-toggle__notice { 23 margin-top: 8px; 24 font-size: 12px; 25 line-height: 1.4; 26 color: var(--wp-components-color-foreground, #1e1e1e); 27 } 28 29 .s1-rc-masonry-toggle__notice.is-disabled { 30 color: var(--wp-components-color-foreground-muted, #6c6f7d); 20 31 } 21 32 -
responsive-columns/trunk/build/index.asset.php
r3384657 r3385207 1 <?php return array('dependencies' => array('wp-block-editor', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-hooks', 'wp-i18n'), 'version' => ' 41cd6decf2285ef08189');1 <?php return array('dependencies' => array('wp-block-editor', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-hooks', 'wp-i18n'), 'version' => '1e02c20be99f1086f5ef'); -
responsive-columns/trunk/build/index.js
r3384657 r3385207 1 (()=>{"use strict";const e=window.wp.hooks,t=window.wp.compose,n=window.wp.element,r=window.wp.data,o=window.wp.blockEditor,a=window.wp.components, l=window.wp.i18n;var i="core/columns",c="core/post-template",s=[i,c],u={enableResponsiveColumns:!1,enableMasonry:!1,columnsMobilePortrait:1,columnsMobileLandscape:1,columnsTabletPortrait:2,columnsTabletLandscape:2,gapX:null,gapYSplit:!1,gapY:null},p={enableResponsiveColumns:{type:"boolean",default:u.enableResponsiveColumns},enableMasonry:{type:"boolean",default:u.enableMasonry},columnsMobilePortrait:{type:"number",default:u.columnsMobilePortrait},columnsMobileLandscape:{type:"number",default:u.columnsMobileLandscape},columnsTabletPortrait:{type:"number",default:u.columnsTabletPortrait},columnsTabletLandscape:{type:"number",default:u.columnsTabletLandscape},gapX:{type:"number",default:u.gapX},gapYSplit:{type:"boolean",default:u.gapYSplit},gapY:{type:"number",default:u.gapY}},m=["columnsTabletLandscape","columnsTabletPortrait","columnsMobileLandscape","columnsMobilePortrait"],b={columnsTabletLandscape:{icon:"tablet",rotation:90},columnsTabletPortrait:{icon:"tablet",rotation:0},columnsMobileLandscape:{icon:"smartphone",rotation:90},columnsMobilePortrait:{icon:"smartphone",rotation:0}},d={columnsTabletLandscape:(0,l.__)("Columns – Tablet landscape","responsive-columns"),columnsTabletPortrait:(0,l.__)("Columns – Tablet portrait","responsive-columns"),columnsMobileLandscape:(0,l.__)("Columns – Mobile landscape","responsive-columns"),columnsMobilePortrait:(0,l.__)("Columns – Mobile portrait","responsive-columns")};const f=(0,n.memo)(function(e){var t=e.attributes,r=e.onChange,o=(0,n.useMemo)(function(){return m.map(function(e){var t=b[e],n=t.icon,r=t.rotation,o=d[e];return{name:e,title:React.createElement("span",{className:"s1-rc-breakpoint-tab",title:o},React.createElement("span",{className:"dashicons dashicons-".concat(n),style:{transform:"rotate(".concat(r,"deg)")},"aria-hidden":"true"}),React.createElement(a.VisuallyHidden,null,o))}})},[]),l=(0,n.useCallback)(function(e){var n,o=d[e.name];return React.createElement(a.RangeControl,{label:o,hideLabelFromVision:!0,"aria-label":o,value:null!==(n=null==t?void 0:t[e.name])&&void 0!==n?n:1,min:1,max:6,onChange:function(t){return r(e.name,t)}})},[t,r]);return React.createElement("div",{className:"s1-rc-breakpoints"},React.createElement(a.TabPanel,{activeClass:"is-active",tabs:o},l))});var v=(0,l.__)("px","responsive-columns");const y=(0,n.memo)(function e(r){var o=r.gapX,i=r.gapY,c=r.gapYSplit,s=r.onGapChange,u=r.onToggleRowGap,p=(0,t.useInstanceId)(e),m="s1-rc-gap-x-".concat(p),b="s1-rc-gap-y-".concat(p),d=(0,n.useMemo)(function(){return{columns:(0,l.__)("Gap between columns","responsive-columns"),columnsAria:(0,l.__)("Gap between columns in pixels","responsive-columns"),columnsDescription:(0,l.__)("Controls the horizontal spacing used on the front end.","responsive-columns"),rows:(0,l.__)("Gap between rows","responsive-columns"),rowsAria:(0,l.__)("Gap between rows in pixels","responsive-columns"),rowsDescription:(0,l.__)("Controls the vertical spacing used on the front end.","responsive-columns"),toggle:(0,l.__)("Custom row gap","responsive-columns"),toggleDescription:(0,l.__)("Enable to adjust the row gap separately from columns.","responsive-columns")}},[]),f="s1-rc-gap-x-description-".concat(p),y="s1-rc-gap-toggle-description-".concat(p),g="s1-rc-gap-y-description-".concat(p),w=(0,n.useCallback)(function(e){return(0,l.sprintf)((0,l._x)("%d pixels","gap value for sliders","responsive-columns"),e)},[]),h=(0,n.useCallback)(function(){return React.createElement("span",{className:"components-input-control__suffix","aria-hidden":"true"},v)},[]);return React.createElement("div",{className:"s1-rc-gap-controls"},React.createElement(a.VisuallyHidden,{id:y},d.toggleDescription),React.createElement("div",{className:"s1-rc-gap-control"},React.createElement(a.VisuallyHidden,{id:f},d.columnsDescription),React.createElement(a.RangeControl,{id:m,label:d.columns,"aria-label":d.columnsAria,"aria-describedby":f,"aria-valuetext":w(null!=o?o:0),value:null!=o?o:0,min:0,max:96,onChange:function(e){return s("gapX",e)}}),h()),React.createElement(a.ToggleControl,{label:d.toggle,checked:c,onChange:u,"aria-describedby":y,"aria-controls":b,"aria-expanded":c}),c&&React.createElement("div",{className:"s1-rc-gap-control"},React.createElement(a.VisuallyHidden,{id:g},d.rowsDescription),React.createElement(a.RangeControl,{id:b,label:d.rows,"aria-label":d.rowsAria,"aria-describedby":g,"aria-valuetext":w(null!=i?i:0),value:null!=i?i:0,min:0,max:96,onChange:function(e){return s("gapY",e)}}),h()))}),g=(0,n.memo)(function(e){var t=e.checked,r=e.onChange,o=e.help,i=(0,n.useMemo)(function(){return(0,l.__)("Enable masonry layout","responsive-columns")},[]);return React.createElement(a.ToggleControl,{label:i,checked:t,onChange:r,help:o})});function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function h(e,t){var n=t.min,r=t.max,o=t.fallback,a=Number(e);return Number.isFinite(a)?function(e,t,n){return Math.min(Math.max(Number(e),t),n)}(a,n,r):o}function R(e){var t={};return Object.entries(e).forEach(function(e){var n,r,o,a=(o=2,function(e){if(Array.isArray(e))return e}(r=e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,l,i=[],c=!0,s=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(i.push(r.value),i.length!==t);c=!0);}catch(e){s=!0,o=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw o}}return i}}(r,o)||function(e,t){if(e){if("string"==typeof e)return w(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?w(e,t):void 0}}(r,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),l=a[0],i=a[1];switch(l){case"enableResponsiveColumns":case"enableMasonry":case"gapYSplit":t[l]=function(e){return void 0!==e&&Boolean(e)}(i);break;case"columnsMobilePortrait":case"columnsMobileLandscape":case"columnsTabletPortrait":case"columnsTabletLandscape":t[l]=h(i,{min:1,max:6,fallback:u[l]});break;case"gapX":case"gapY":if(null==i){t[l]=null;break}t[l]=h(i,{min:0,max:96,fallback:""===i?0:null!==(n=u[l])&&void 0!==n?n:0});break;default:t[l]=i}}),t}function P(e){return Boolean(e.enableResponsiveColumns&&e.enableMasonry)}function C(e){return C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},C(e)}function O(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function E(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?O(Object(n),!0).forEach(function(t){S(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):O(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function S(e,t,n){return(t=function(e){var t=function(e){if("object"!=C(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=C(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==C(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function j(e){var t,n,r,o,a={"--s1-rc-columns-mobile-portrait":String(null!==(t=e.columnsMobilePortrait)&&void 0!==t?t:u.columnsMobilePortrait),"--s1-rc-columns-mobile-landscape":String(null!==(n=e.columnsMobileLandscape)&&void 0!==n?n:u.columnsMobileLandscape),"--s1-rc-columns-tablet-portrait":String(null!==(r=e.columnsTabletPortrait)&&void 0!==r?r:u.columnsTabletPortrait),"--s1-rc-columns-tablet-landscape":String(null!==(o=e.columnsTabletLandscape)&&void 0!==o?o:u.columnsTabletLandscape)};return null!==e.gapX&&void 0!==e.gapX&&(a["--s1-rc-gap-x"]="".concat(e.gapX,"px")),e.gapYSplit&&null!==e.gapY&&void 0!==e.gapY&&(a["--s1-rc-gap-y"]="".concat(e.gapY,"px")),a}function k(e,t){if(!t.enableResponsiveColumns)return e;var n=[e.className||"","has-s1-rc-columns"];return P(t)&&n.push("has-s1-rc-masonry"),E(E({},e),{},{className:n.join(" ").trim(),style:E(E({},e.style||{}),j(t))},P(t)?{"data-s1-rc-masonry":"1"}:{})}function _(e){return _="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_(e)}function M(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function T(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?M(Object(n),!0).forEach(function(t){N(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):M(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function N(e,t,n){return(t=function(e){var t=function(e){if("object"!=_(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=_(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==_(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Y(e){var t=e.attributes,i=e.setAttributes,c=e.blockName,s=e.clientId,p=(0,n.useCallback)(function(e){var t,n,r;return null!==(t=null===(n=e("core/block-editor"))||void 0===n||null===(r=n.getSettings)||void 0===r?void 0:r.call(n))&&void 0!==t?t:{}},[]),m=(0,r.useSelect)(p,[p]),b=(0,n.useRef)(),d=(0,n.useCallback)(function(e){i(R(e))},[i]),v=(0,n.useCallback)(function(e){return function(t){d(N({},e,t))}},[d]),w=(0,n.useCallback)(function(){return void 0===b.current&&(b.current=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"undefined"!=typeof document?document:void 0,n=function(e){var t,n=null==e||null===(t=e.spacing)||void 0===t?void 0:t.blockGap,r="object"===C(n)?null==n?void 0:n.value:n;if("number"==typeof r&&Number.isFinite(r))return r;if("string"==typeof r&&r.trim()){var o=r.trim();if(o.endsWith("px"))return Number.parseFloat(o.slice(0,-2));var a=Number.parseFloat(o);if(Number.isFinite(a))return a}return null}(e);return null!==n?n:function(e){var t;if(!e)return 24;var n=e.createElement("div");n.className="is-layout-grid",n.style.display="grid",(e.querySelector(".editor-styles-wrapper")||e.body).appendChild(n);var r=null===(t=e.defaultView)||void 0===t||null===(t=t.getComputedStyle(n))||void 0===t||null===(t=t.gap)||void 0===t?void 0:t.trim();if(n.remove(),!r||"normal"===r)for(var o=0;o<=12;o+=1){var a;if(r=null===(a=e.defaultView)||void 0===a||null===(a=a.getComputedStyle(e.documentElement))||void 0===a||null===(a=a.getPropertyValue("--wp--preset--spacing--".concat(o)))||void 0===a?void 0:a.trim())break}var l=Number.parseFloat(r||"");return Number.isFinite(l)?Math.round(l):24}(t)}(m)),b.current},[m]);(0,n.useEffect)(function(){if(null===t.gapX||void 0===t.gapX){var e=w();d({gapX:e,gapY:e})}},[t.gapX,w,d]);var h=(0,n.useMemo)(function(){return v("enableResponsiveColumns")},[v]),P=(0,n.useCallback)(function(e,t){v(e)(t)},[v]),O=(0,n.useCallback)(function(e,t){v(e)(t)},[v]),E=(0,n.useCallback)(function(e){if(e){var n,r,o=null!==(n=null!==(r=t.gapY)&&void 0!==r?r:t.gapX)&&void 0!==n?n:w();d({gapYSplit:!0,gapY:o})}else d({gapYSplit:!1,gapY:null})},[t.gapY,t.gapX,w,d]),S=(0,n.useMemo)(function(){return v("enableMasonry")},[v]),j=(0,n.useCallback)(function(){var e=w();d(T(T({},u),{},{enableResponsiveColumns:t.enableResponsiveColumns,gapX:e,gapY:e}))},[t.enableResponsiveColumns,w,d]),k=(0,n.useMemo)(function(){return function(e,t){var n,r,o=Number(null==t||null===(n=t.layout)||void 0===n?void 0:n.columnCount);return"core/post-template"===e&&"grid"===(null==t||null===(r=t.layout)||void 0===r?void 0:r.type)&&Number.isFinite(o)&&o>0}(c,t)},[c,t]),_=(0,n.useMemo)(function(){return"s1-rc-reset-description-".concat(s)},[s]);return React.createElement(o.InspectorControls,null,React.createElement(a.PanelBody,{className:"s1-rc-panel",title:(0,l.__)("Responsive Columns","responsive-columns"),initialOpen:!0},React.createElement(a.PanelRow,null,React.createElement(a.ToggleControl,{label:(0,l.__)("Enable responsive layout","responsive-columns"),checked:t.enableResponsiveColumns,onChange:h})),t.enableResponsiveColumns&&React.createElement(React.Fragment,null,React.createElement(a.PanelRow,null,React.createElement(f,{attributes:t,onChange:P})),React.createElement(a.PanelRow,null,React.createElement(y,{gapX:t.gapX,gapY:t.gapY,gapYSplit:t.gapYSplit,onGapChange:O,onToggleRowGap:E})),k&&React.createElement(a.PanelRow,null,React.createElement(g,{checked:t.enableMasonry,onChange:S,help:(0,l.__)("Works with queries that use a fixed number of columns.","responsive-columns")})),React.createElement(a.PanelRow,null,React.createElement(a.Button,{variant:"secondary",size:"small",onClick:j,"aria-describedby":_},(0,l.__)("Reset responsive settings","responsive-columns")),React.createElement(a.VisuallyHidden,{id:_},(0,l.__)("Restore default breakpoint and gap values.","responsive-columns"))))))}function x(e){return x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},x(e)}function L(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function D(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?L(Object(n),!0).forEach(function(t){X(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):L(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function X(e,t,n){return(t=function(e){var t=function(e){if("object"!=x(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=x(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==x(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var F=new Set(s);(0,e.addFilter)("blocks.registerBlockType","responsive-columns/attributes",function(e,t){return F.has(t)?D(D({},e),{},{attributes:D(D({},null==e?void 0:e.attributes),p)}):e});var A=function(e){var t,n=e.name,o=e.attributes,a=e.clientId;return(0,r.useSelect)(function(e){var t;return n===i||n===c&&"grid"===(null==o||null===(t=o.layout)||void 0===t?void 0:t.type)&&(0,e("core/block-editor").getBlockParentsByBlockName)(a,"core/query").length>0},[n,a,null==o||null===(t=o.layout)||void 0===t?void 0:t.type])},I=(0,t.createHigherOrderComponent)(function(e){return function(t){var r=A(t),o=(0,n.useMemo)(function(){return r?React.createElement(Y,{attributes:t.attributes,setAttributes:t.setAttributes,blockName:t.name,clientId:t.clientId}):null},[r,t.attributes,t.setAttributes,t.name,t.clientId]);return o?React.createElement(n.Fragment,null,React.createElement(e,t),o):React.createElement(e,t)}},"withResponsiveColumnsInspector");(0,e.addFilter)("editor.BlockEdit","responsive-columns/inspector",I);var B=(0,t.createHigherOrderComponent)(function(e){return function(t){return A(t)?React.createElement(e,function(e,t){if(!t.enableResponsiveColumns)return e;var n=e.wrapperProps||{},r=[n.className||"","has-s1-rc-columns"];return P(t)&&r.push("has-s1-rc-masonry"),E(E({},e),{},{wrapperProps:E(E({},n),{},{className:r.join(" ").trim(),style:E(E({},n.style||{}),j(t))})})}(t,t.attributes)):React.createElement(e,t)}},"withResponsiveColumnsPreview");(0,e.addFilter)("editor.BlockListBlock","responsive-columns/preview",B),(0,e.addFilter)("blocks.getSaveContent.extraProps","responsive-columns/save",function(e,t,n){return t.name!==i?e:k(e,n)}),(0,e.addFilter)("blocks.getServerSideWrapperProps","responsive-columns/server-wrapper",function(e,t,n){var r;return t.name!==c||"grid"!==(null==n||null===(r=n.layout)||void 0===r?void 0:r.type)?e:k(e,n)})})();1 (()=>{"use strict";const e=window.wp.hooks,t=window.wp.compose,n=window.wp.element,r=window.wp.data,o=window.wp.blockEditor,a=window.wp.components,i=window.wp.i18n;var l="core/columns",u="core/post-template",c=[l,u],s={enableResponsiveColumns:!1,enableMasonry:!1,columnsMobilePortrait:1,columnsMobileLandscape:1,columnsTabletPortrait:2,columnsTabletLandscape:2,gapX:null,gapYSplit:!1,gapY:null},p={enableResponsiveColumns:{type:"boolean",default:s.enableResponsiveColumns},enableMasonry:{type:"boolean",default:s.enableMasonry},columnsMobilePortrait:{type:"number",default:s.columnsMobilePortrait},columnsMobileLandscape:{type:"number",default:s.columnsMobileLandscape},columnsTabletPortrait:{type:"number",default:s.columnsTabletPortrait},columnsTabletLandscape:{type:"number",default:s.columnsTabletLandscape},gapX:{type:"string",default:s.gapX},gapYSplit:{type:"boolean",default:s.gapYSplit},gapY:{type:"string",default:s.gapY}},f=["columnsTabletLandscape","columnsTabletPortrait","columnsMobileLandscape","columnsMobilePortrait"],m={columnsTabletLandscape:{icon:"tablet",rotation:90},columnsTabletPortrait:{icon:"tablet",rotation:0},columnsMobileLandscape:{icon:"smartphone",rotation:90},columnsMobilePortrait:{icon:"smartphone",rotation:0}},b={columnsTabletLandscape:(0,i.__)("Columns – Tablet landscape","responsive-columns"),columnsTabletPortrait:(0,i.__)("Columns – Tablet portrait","responsive-columns"),columnsMobileLandscape:(0,i.__)("Columns – Mobile landscape","responsive-columns"),columnsMobilePortrait:(0,i.__)("Columns – Mobile portrait","responsive-columns")};const d=(0,n.memo)(function(e){var t=e.attributes,r=e.onChange,o=(0,n.useMemo)(function(){return f.map(function(e){var t=m[e],n=t.icon,r=t.rotation,o=b[e];return{name:e,title:React.createElement("span",{className:"s1-rc-breakpoint-tab",title:o},React.createElement("span",{className:"dashicons dashicons-".concat(n),style:{transform:"rotate(".concat(r,"deg)")},"aria-hidden":"true"}),React.createElement(a.VisuallyHidden,null,o))}})},[]),i=(0,n.useCallback)(function(e){var n,o=b[e.name];return React.createElement(a.RangeControl,{label:o,hideLabelFromVision:!0,"aria-label":o,value:null!==(n=null==t?void 0:t[e.name])&&void 0!==n?n:1,min:1,max:6,onChange:function(t){return r(e.name,t)}})},[t,r]);return React.createElement("div",{className:"s1-rc-breakpoints"},React.createElement(a.TabPanel,{activeClass:"is-active",tabs:o},i))});function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?v(Object(n),!0).forEach(function(t){g(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function g(e,t,n){return(t=function(e){var t=function(e){if("object"!=S(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=S(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==S(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return h(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var _n=0,r=function(){};return{s:r,n:function(){return _n>=e.length?{done:!0}:{done:!1,value:e[_n++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(i)throw o}}}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function S(e){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},S(e)}var k=/^-?\d*\.?\d+$/,C=/^-?\d*\.?\d+(?:[a-z%]+)?$/i;function P(e){if(null==e)return null;if("object"===S(e))return Object.prototype.hasOwnProperty.call(e,"value")?P(e.value):Object.prototype.hasOwnProperty.call(e,"default")?P(e.default):Object.prototype.hasOwnProperty.call(e,"top")?P(e.top):Object.prototype.hasOwnProperty.call(e,"left")?P(e.left):null;if("number"==typeof e&&Number.isFinite(e))return"".concat(e,"px");if("string"==typeof e){var t=e.trim();return""===t||"normal"===t?null:t}return null}function O(e){var t,n;return function(e){var t,n;if(!e)return null;var r=null==e||null===(t=e.styles)||void 0===t||null===(t=t.spacing)||void 0===t?void 0:t.blockGap,o=null==e||null===(n=e.spacing)||void 0===n?void 0:n.blockGap,a=P(r),i=P(o);return null!==a?a:null!==i?i:null}(null!=e?e:null===(t=(0,r.select)("core/block-editor"))||void 0===t||null===(n=t.getSettings)||void 0===n?void 0:n.call(t))}function E(e,t){if("string"==typeof e)return e.trim();if(null!=e)return"number"==typeof e&&Number.isFinite(e)?"".concat(e,"px"):"";var n=O(t);return"string"==typeof n?n:""}function R(e){if("number"==typeof e)return Number.isFinite(e);if("string"!=typeof e)return!1;var t=e.trim();if(""===t)return!1;var n=t.toLowerCase();return!n.includes("var(")&&!n.includes("clamp(")&&C.test(t)}function j(e){if(null==e)return"";if("number"==typeof e)return Number.isFinite(e)?"".concat(e,"px"):"";if("string"!=typeof e)return e;var t=e.trim();if(""===t)return"";var n=t.toLowerCase();if(n.includes("var(")||n.includes("clamp("))return t;if(C.test(t)&&!k.test(t))return t;if(k.test(t)){var r=Number(t);return Number.isFinite(r)?"".concat(r,"px"):t}return t}var _=["var(--wp--style--block-gap)","var(--wp--custom--block-gap)","var(--wp--preset--spacing--block-gap)"],M=['iframe[name="editor-canvas"]','iframe[aria-label="Editor canvas"]',"iframe.editor-canvas","iframe.edit-site-visual-editor__editor-canvas","iframe.edit-site-iframe"],x=[".block-editor-block-list__layout",".edit-site-visual-editor__content-area",".is-root-container",".wp-site-blocks",".wp-block-post-content"];function T(e){if(!e||!e.body)return!1;var t,n=w(x);try{for(n.s();!(t=n.n()).done;){var r=t.value;if(e.body.querySelector(r))return!0}}catch(e){n.e(e)}finally{n.f()}return e.body.childElementCount>0}function N(e){if(!e||"undefined"==typeof window)return null;var t=function(){if("undefined"==typeof document)return null;var e,t=[],n=w(M);try{for(n.s();!(e=n.n()).done;){var r,o=e.value,a=w(document.querySelectorAll(o));try{for(a.s();!(r=a.n()).done;){var i,l=r.value;if(l&&"iframe"===(null===(i=l.tagName)||void 0===i?void 0:i.toLowerCase())){var u=l.contentDocument;if(u&&u.body){if(T(u))return u;t.push(u)}}}}catch(e){a.e(e)}finally{a.f()}}}catch(e){n.e(e)}finally{n.f()}var c,s=w(document.querySelectorAll("iframe"));try{for(s.s();!(c=s.n()).done;){var p,f=c.value;if(f&&"iframe"===(null===(p=f.tagName)||void 0===p?void 0:p.toLowerCase())){var m=f.contentDocument;if(m&&T(m))return m;m&&m.body&&t.push(m)}}}catch(e){s.e(e)}finally{s.f()}var b=document.body;if(b){var d,v=w(x);try{for(v.s();!(d=v.n()).done;){var y=d.value;if(b.querySelector(y))return document}}catch(e){v.e(e)}finally{v.f()}}return t.length>0?t[0]:null}();if(!t)return null;var n=function(e,t){var n,r=null==e?void 0:e.body,o=null!==(n=null==e?void 0:e.defaultView)&&void 0!==n?n:window;if(!r||!o||"function"!=typeof o.getComputedStyle)return null;var a=e.createElement("div");a.style.position="absolute",a.style.visibility="hidden",a.style.pointerEvents="none",a.style.display="grid",a.style.gridTemplateColumns="1fr 1fr",a.style.gap=String(t),r.appendChild(a);try{var i,l,u=o.getComputedStyle(a),c=null!==(i=null==u?void 0:u.columnGap)&&void 0!==i?i:"",s=null!==(l=null==u?void 0:u.rowGap)&&void 0!==l?l:"",p="string"==typeof c?c.trim():"",f="string"==typeof s?s.trim():"",m=function(e){return"string"==typeof e&&/^\d*\.?\d+px$/i.test(e)};if(m(p)&&m(f))return{col:p,row:f};if(m(p))return{col:p,row:p};if(m(f))return{col:f,row:f}}catch(e){}finally{r.removeChild(a)}return null}(t,e);return n}function Y(){var e,t=w(_);try{for(t.s();!(e=t.n()).done;){var n=N(e.value);if(null!=n&&n.col&&null!=n&&n.row)return n}}catch(e){t.e(e)}finally{t.f()}return null}var A=(0,i.__)("px","responsive-columns");const L=(0,n.memo)(function e(r){var o=r.gapX,l=r.gapY,u=r.gapYSplit,c=r.onGapChange,s=r.onToggleRowGap,p=r.themeGap,f=r.defaultGap,m=(0,t.useInstanceId)(e),b="s1-rc-gap-x-".concat(m),d="s1-rc-gap-y-".concat(m),v=(0,n.useMemo)(function(){return{columns:(0,i.__)("Gap between columns","responsive-columns"),columnsAria:(0,i.__)("Gap between columns in pixels","responsive-columns"),columnsDescription:(0,i.__)("Controls the horizontal spacing used on the front end.","responsive-columns"),rows:(0,i.__)("Gap between rows","responsive-columns"),rowsAria:(0,i.__)("Gap between rows in pixels","responsive-columns"),rowsDescription:(0,i.__)("Controls the vertical spacing used on the front end.","responsive-columns"),toggle:(0,i.__)("Custom row gap","responsive-columns"),toggleDescription:(0,i.__)("Enable to adjust the row gap separately from columns.","responsive-columns")}},[]),y="s1-rc-gap-x-description-".concat(m),g="s1-rc-gap-toggle-description-".concat(m),w="s1-rc-gap-y-description-".concat(m),h=(0,n.useCallback)(function(e){return(0,i.sprintf)((0,i._x)("%d pixels","gap value for sliders","responsive-columns"),e)},[]),S=(0,n.useCallback)(function(){return React.createElement("span",{className:"components-input-control__suffix","aria-hidden":"true"},A)},[]),k=(0,n.useMemo)(function(){if("number"==typeof f&&Number.isFinite(f))return f;if("string"==typeof f&&R(f)){var e=Number.parseFloat(f);if(Number.isFinite(e))return e}return 0},[f]),C=(0,n.useCallback)(function(e){if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){var t=e.trim();if(""===t)return k;if(R(t)){var n=Number.parseFloat(t);if(Number.isFinite(n))return n}}return k},[k]),P=C(o),O=C(l),E="string"==typeof f?f.trim():"",_="string"==typeof p?p.trim():"",M=(0,n.useMemo)(function(){return"string"==typeof o&&""!==o.trim()?o.trim():""!==E?E:""!==_?_:h(P)},[o,E,_,P,h]),x=(0,n.useMemo)(function(){return"string"==typeof l&&""!==l.trim()?l.trim():""!==E?E:""!==_?_:h(O)},[l,E,_,O,h]);return React.createElement("div",{className:"s1-rc-gap-controls"},React.createElement(a.VisuallyHidden,{id:g},v.toggleDescription),React.createElement("div",{className:"s1-rc-gap-control"},React.createElement(a.VisuallyHidden,{id:y},v.columnsDescription),React.createElement(a.RangeControl,{id:b,label:v.columns,"aria-label":v.columnsAria,"aria-describedby":y,"aria-valuetext":M,value:P,min:0,max:96,onChange:function(e){return c("gapX",j(e))}}),S()),React.createElement(a.ToggleControl,{label:v.toggle,checked:u,onChange:s,"aria-describedby":g,"aria-controls":d,"aria-expanded":u}),u&&React.createElement("div",{className:"s1-rc-gap-control"},React.createElement(a.VisuallyHidden,{id:w},v.rowsDescription),React.createElement(a.RangeControl,{id:d,label:v.rows,"aria-label":v.rowsAria,"aria-describedby":w,"aria-valuetext":x,value:O,min:0,max:96,onChange:function(e){return c("gapY",j(e))}}),S()))}),D=(0,n.memo)(function(e){var t=e.checked,r=e.onChange,o=e.help,l=e.disabled,u=e.notice,c=(0,n.useMemo)(function(){return(0,i.__)("Enable masonry layout","responsive-columns")},[]);return React.createElement("div",{className:"s1-rc-masonry-toggle"},React.createElement(a.ToggleControl,{label:c,checked:t,onChange:r,help:o,disabled:l}),u&&React.createElement("div",{className:"s1-rc-masonry-toggle__notice".concat(l?" is-disabled":""),"aria-live":"polite"},u))});function X(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function F(e,t){var n=t.min,r=t.max,o=t.fallback,a=Number(e);return Number.isFinite(a)?function(e,t,n){return Math.min(Math.max(Number(e),t),n)}(a,n,r):o}function I(e){var t={};return Object.entries(e).forEach(function(e){var n,r,o=(r=2,function(e){if(Array.isArray(e))return e}(n=e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],u=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);u=!0);}catch(e){c=!0,o=e}finally{try{if(!u&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw o}}return l}}(n,r)||function(e,t){if(e){if("string"==typeof e)return X(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?X(e,t):void 0}}(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),a=o[0],i=o[1];switch(a){case"enableResponsiveColumns":case"enableMasonry":case"gapYSplit":t[a]=function(e){return void 0!==e&&Boolean(e)}(i);break;case"columnsMobilePortrait":case"columnsMobileLandscape":case"columnsTabletPortrait":case"columnsTabletLandscape":t[a]=F(i,{min:1,max:6,fallback:s[a]});break;case"gapX":case"gapY":if(null==i){t[a]=null;break}if("number"==typeof i){var l=F(i,{min:0,max:96,fallback:0});t[a]="".concat(l,"px");break}if("string"==typeof i){var u=j(i);if(""===u){t[a]="";break}if("string"==typeof u){var c=u.trim();if(c.endsWith("px")){var p=Number.parseFloat(c);if(Number.isFinite(p)){var f=F(p,{min:0,max:96,fallback:p});t[a]="".concat(f,"px");break}}t[a]=c;break}t[a]=u;break}t[a]="";break;default:t[a]=i}}),t}function G(e){return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},G(e)}function B(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var $={desktop:["desktop","large","default","base",""],tablet:["tablet","medium"],mobile:["mobile","small"]};function H(e){if("number"==typeof e)return Number.isFinite(e)?e:void 0;if("string"==typeof e){var t=e.trim().toLowerCase();if(""===t)return;var n=Number(t);return Number.isFinite(n)?n:void 0}}function U(e,t){if(e){var n=e.columnCount;if(null!=n)return"object"===G(n)?function(e,t){var n,r=(t||"desktop").toLowerCase(),o=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return B(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?B(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var _n=0,r=function(){};return{s:r,n:function(){return _n>=e.length?{done:!0}:{done:!1,value:e[_n++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(i)throw o}}}}($[r]||$.desktop);try{for(o.s();!(n=o.n()).done;){var a=n.value;if(""===a&&void 0!==e.columnCount){var i=H(e.columnCount);if(i)return i}if(void 0!==e[a]){var l=H(e[a]);if(l)return l}var u=a?"columnCount".concat(a.charAt(0).toUpperCase()).concat(a.slice(1)):"columnCount";if(void 0!==e[u]){var c=H(e[u]);if(c)return c}var s=a?"".concat(a.charAt(0).toUpperCase()).concat(a.slice(1)):"Desktop";if(void 0!==e[s]){var p=H(e[s]);if(p)return p}}}catch(e){o.e(e)}finally{o.f()}}(n,t):H(n)}}function V(e){return Boolean(e.enableResponsiveColumns&&e.enableMasonry)}function q(e){return q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},q(e)}function z(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Q(e){var t,l,u,c,p,f=e.attributes,m=e.setAttributes,b=e.blockName,v=e.clientId,g=(0,n.useCallback)(function(e){var t,n,r;return null!==(t=null===(n=e("core/block-editor"))||void 0===n||null===(r=n.getSettings)||void 0===r?void 0:r.call(n))&&void 0!==t?t:{}},[]),w=(0,r.useSelect)(g,[g]),h=(0,r.useSelect)(function(e){var t=function(t){var n=e(t);if(n)return"function"==typeof n.__experimentalGetPreviewDeviceType?n.__experimentalGetPreviewDeviceType():"function"==typeof n.getPreviewDeviceType?n.getPreviewDeviceType():void 0};return t("core/edit-site")||t("core/edit-post")||t("core/edit-widgets")||t("core/customize-widgets")||"Desktop"},[]),S=(0,r.useDispatch)("core/notices").createNotice,k=(0,n.useCallback)(function(){return function(e){var t=null;"number"==typeof(t="string"==typeof e||"number"==typeof e||null==e?e:O(e))&&Number.isFinite(t)&&(t="".concat(t,"px")),"string"!=typeof t&&(t="");var n=t.trim(),r=/^-?\d*\.?\d+px$/i.test(n);if(""===n){var o=Y();return o?y(y({},o),{},{source:"css-variable"}):{col:"24px",row:"24px",source:"fallback"}}if(r)return{col:n,row:n,source:"settings"};var a=N(n);if(null!=a&&a.col&&null!=a&&a.row)return y(y({},a),{},{source:"measure"});var i=Y();return i?y(y({},i),{},{source:"css-variable"}):{col:"24px",row:"24px",source:"fallback"}}(w)},[w]),C=(c=(0,n.useState)(function(){return k()}),p=2,function(e){if(Array.isArray(e))return e}(c)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,l=[],u=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=a.call(n)).done)&&(l.push(r.value),l.length!==t);u=!0);}catch(e){c=!0,o=e}finally{try{if(!u&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw o}}return l}}(c,p)||function(e,t){if(e){if("string"==typeof e)return z(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?z(e,t):void 0}}(c,p)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),P=C[0],R=C[1],j=null!==(t=null==P?void 0:P.source)&&void 0!==t?t:"fallback",_=null!==(l=null==P?void 0:P.col)&&void 0!==l?l:"",M=null!==(u=null==P?void 0:P.row)&&void 0!==u?u:"",x=(0,n.useRef)(0);(0,n.useEffect)(function(){R(function(e){var t,n,r=k();return(t=e)===(n=r)||t&&n&&t.col===n.col&&t.row===n.row&&t.source===n.source?e:r})},[k]),(0,n.useEffect)(function(){if("fallback"===j){if(!(x.current>=5)){var e=setTimeout(function(){x.current+=1,R(function(){return k()})},200);return function(){return clearTimeout(e)}}}else x.current=0},[k,j]);var T=(0,n.useMemo)(function(){return E(_,w)},[_,w]),A=(0,n.useMemo)(function(){return E(M,w)},[M,w]),X=(0,n.useCallback)(function(e){m(I(e))},[m]),F=(0,n.useCallback)(function(e){return function(t){X(function(e,t,n){return(t=function(e){var t=function(e){if("object"!=q(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=q(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==q(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},e,t))}},[X]);(0,n.useEffect)(function(){null!==f.gapX&&void 0!==f.gapX||X({gapX:"fallback"===j?T:_,gapY:"fallback"===j?A:M})},[f.gapX,T,A,j,_,M,X]),(0,n.useEffect)(function(){f.gapYSplit||null!==f.gapX&&void 0!==f.gapX&&f.gapY!==f.gapX&&X({gapY:f.gapX})},[f.gapYSplit,f.gapX,f.gapY,X]);var G=(0,n.useMemo)(function(){return F("enableResponsiveColumns")},[F]),B=(0,n.useCallback)(function(e,t){F(e)(t)},[F]),$=(0,n.useCallback)(function(e,t){"gapX"!==e||f.gapYSplit?F(e)(t):X({gapX:t,gapY:t})},[f.gapYSplit,X,F]),H=(0,n.useCallback)(function(e){var t;if(e){var n,r,o,a=null!==(n=null!==(r=null!==(o=f.gapY)&&void 0!==o?o:f.gapX)&&void 0!==r?r:A)&&void 0!==n?n:T;X({gapYSplit:!0,gapY:a})}else{var i=null!==(t=f.gapX)&&void 0!==t?t:T;X({gapYSplit:!1,gapY:i})}},[f.gapY,f.gapX,T,A,X]),V=(0,n.useMemo)(function(){return F("enableMasonry")},[F]),Q=(0,n.useCallback)(function(){var e=k(),t="fallback"===e.source&&"fallback"!==j?{col:_,row:M,source:j}:e;X({columnsMobilePortrait:s.columnsMobilePortrait,columnsMobileLandscape:s.columnsMobileLandscape,columnsTabletPortrait:s.columnsTabletPortrait,columnsTabletLandscape:s.columnsTabletLandscape,gapX:t.col,gapY:t.row,gapYSplit:!1})},[k,X,_,M,j]),W=(0,n.useMemo)(function(){return function(e,t){return"core/post-template"===e&&(null==t?void 0:t.layout)}(b,f)},[b,f]),J=(0,n.useMemo)(function(){return function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("grid"!==(null==e||null===(t=e.layout)||void 0===t?void 0:t.type))return{ready:!1,reason:"not-grid"};var r=U(null==e?void 0:e.layout,n.previewDeviceType);return!r||r<=0?{ready:!1,reason:"no-fixed-columns"}:{ready:!0,reason:"ok"}}(f,{previewDeviceType:h})},[f,h]),K=(0,n.useMemo)(function(){return!W||J.ready?null:"not-grid"===J.reason?(0,i.__)("Masonry is disabled for this layout mode.","responsive-columns"):"no-fixed-columns"===J.reason?(0,i.__)("Masonry is disabled until a fixed column count is set on this breakpoint.","responsive-columns"):null},[J,W]),Z=!J.ready,ee=(0,n.useRef)();(0,n.useEffect)(function(){if(W)if(J.ready)ee.current=void 0;else if(f.enableMasonry){if(X({enableMasonry:!1}),ee.current!==J.reason){ee.current=J.reason;var e="not-grid"===J.reason?(0,i.__)("Masonry disabled: switch the Query Loop to the grid layout.","responsive-columns"):(0,i.__)("Masonry disabled: set a fixed column count on the active breakpoint.","responsive-columns");S("info",e,{type:"snackbar"})}}else ee.current=J.reason;else ee.current=void 0},[f.enableMasonry,S,J,X,W]),(0,n.useEffect)(function(){if(W&&!J.ready&&("undefined"!=typeof window&&window.SCRIPT_DEBUG||("undefined"!=typeof process&&process.env,0))){var e="not-grid"===J.reason?"Query Loop must use the grid layout.":"A fixed column count is required on the active breakpoint.";console.info("[responsive-columns] Masonry unavailable: ".concat(e))}},[J,W]);var te=(0,n.useMemo)(function(){return"s1-rc-reset-description-".concat(v)},[v]);return React.createElement(o.InspectorControls,null,React.createElement(a.PanelBody,{className:"s1-rc-panel",title:(0,i.__)("Responsive Columns","responsive-columns"),initialOpen:!0},React.createElement(a.PanelRow,null,React.createElement(a.ToggleControl,{label:(0,i.__)("Enable responsive layout","responsive-columns"),checked:f.enableResponsiveColumns,onChange:G})),f.enableResponsiveColumns&&React.createElement(React.Fragment,null,React.createElement(a.PanelRow,null,React.createElement(d,{attributes:f,onChange:B})),React.createElement(a.PanelRow,null,React.createElement(L,{gapX:f.gapX,gapY:f.gapY,gapYSplit:f.gapYSplit,onGapChange:$,onToggleRowGap:H,themeGap:T,defaultGap:T})),W&&React.createElement(a.PanelRow,null,React.createElement(D,{checked:f.enableMasonry,onChange:V,disabled:Z,notice:K})),React.createElement(a.PanelRow,null,React.createElement(a.Button,{variant:"secondary",size:"small",onClick:Q,"aria-describedby":te,title:(0,i.__)("Reset gaps and breakpoints to the theme defaults.","responsive-columns")},(0,i.__)("Reset responsive settings","responsive-columns")),React.createElement(a.VisuallyHidden,{id:te},(0,i.__)("Restore the breakpoint and gap values provided by the current theme.","responsive-columns"))))))}function W(e){return W="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},W(e)}function J(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function K(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?J(Object(n),!0).forEach(function(t){Z(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):J(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Z(e,t,n){return(t=function(e){var t=function(e){if("object"!=W(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=W(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==W(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ee(e){var t,n,r,o,a={"--s1-rc-columns-mobile-portrait":String(null!==(t=e.columnsMobilePortrait)&&void 0!==t?t:s.columnsMobilePortrait),"--s1-rc-columns-mobile-landscape":String(null!==(n=e.columnsMobileLandscape)&&void 0!==n?n:s.columnsMobileLandscape),"--s1-rc-columns-tablet-portrait":String(null!==(r=e.columnsTabletPortrait)&&void 0!==r?r:s.columnsTabletPortrait),"--s1-rc-columns-tablet-landscape":String(null!==(o=e.columnsTabletLandscape)&&void 0!==o?o:s.columnsTabletLandscape)};if(null!==e.gapX&&void 0!==e.gapX)if("string"==typeof e.gapX){var i=e.gapX.trim();""!==i&&(a["--s1-rc-gap-x"]=i)}else"number"==typeof e.gapX&&Number.isFinite(e.gapX)&&(a["--s1-rc-gap-x"]="".concat(e.gapX,"px"));if(e.gapYSplit&&null!==e.gapY&&void 0!==e.gapY)if("string"==typeof e.gapY){var l=e.gapY.trim();""!==l&&(a["--s1-rc-gap-y"]=l)}else"number"==typeof e.gapY&&Number.isFinite(e.gapY)&&(a["--s1-rc-gap-y"]="".concat(e.gapY,"px"));return a}function te(e,t){if(!t.enableResponsiveColumns)return e;var n=[e.className||"","has-s1-rc-columns"];return V(t)&&n.push("has-s1-rc-masonry"),K(K({},e),{},{className:n.join(" ").trim(),style:K(K({},e.style||{}),ee(t))},V(t)?{"data-s1-rc-masonry":"1"}:{})}function ne(e){return ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ne(e)}function re(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function oe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?re(Object(n),!0).forEach(function(t){ae(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):re(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ae(e,t,n){return(t=function(e){var t=function(e){if("object"!=ne(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ne(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ne(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ie=new Set(c);(0,e.addFilter)("blocks.registerBlockType","responsive-columns/attributes",function(e,t){return ie.has(t)?oe(oe({},e),{},{attributes:oe(oe({},null==e?void 0:e.attributes),p)}):e});var le=function(e){var t,n=e.name,o=e.attributes,a=e.clientId;return(0,r.useSelect)(function(e){var t;return n===l||n===u&&"grid"===(null==o||null===(t=o.layout)||void 0===t?void 0:t.type)&&(0,e("core/block-editor").getBlockParentsByBlockName)(a,"core/query").length>0},[n,a,null==o||null===(t=o.layout)||void 0===t?void 0:t.type])},ue=(0,t.createHigherOrderComponent)(function(e){return function(t){var r=le(t),o=(0,n.useMemo)(function(){return r?React.createElement(Q,{attributes:t.attributes,setAttributes:t.setAttributes,blockName:t.name,clientId:t.clientId}):null},[r,t.attributes,t.setAttributes,t.name,t.clientId]);return o?React.createElement(n.Fragment,null,React.createElement(e,t),o):React.createElement(e,t)}},"withResponsiveColumnsInspector");(0,e.addFilter)("editor.BlockEdit","responsive-columns/inspector",ue);var ce=(0,t.createHigherOrderComponent)(function(e){return function(t){return le(t)?React.createElement(e,function(e,t){if(!t.enableResponsiveColumns)return e;var n=e.wrapperProps||{},r=[n.className||"","has-s1-rc-columns"];return V(t)&&r.push("has-s1-rc-masonry"),K(K({},e),{},{wrapperProps:K(K({},n),{},{className:r.join(" ").trim(),style:K(K({},n.style||{}),ee(t))})})}(t,t.attributes)):React.createElement(e,t)}},"withResponsiveColumnsPreview");(0,e.addFilter)("editor.BlockListBlock","responsive-columns/preview",ce),(0,e.addFilter)("blocks.getSaveContent.extraProps","responsive-columns/save",function(e,t,n){return t.name!==l?e:te(e,n)}),(0,e.addFilter)("blocks.getServerSideWrapperProps","responsive-columns/server-wrapper",function(e,t,n){var r;return t.name!==u||"grid"!==(null==n||null===(r=n.layout)||void 0===r?void 0:r.type)?e:te(e,n)})})(); -
responsive-columns/trunk/languages/responsive-columns.pot
r3384652 r3385207 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: Responsive Columns 1.1. 0\n"5 "Project-Id-Version: Responsive Columns 1.1.1\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/responsive-columns\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2025-10-2 6T07:49:16+00:00\n"12 "POT-Creation-Date: 2025-10-27T11:44:12+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.11.0\n" … … 103 103 104 104 #: build/index.js:1 105 msgid "Masonry is disabled for this layout mode." 106 msgstr "" 107 108 #: build/index.js:1 109 msgid "Masonry is disabled until a fixed column count is set on this breakpoint." 110 msgstr "" 111 112 #: build/index.js:1 113 msgid "Masonry disabled: switch the Query Loop to the grid layout." 114 msgstr "" 115 116 #: build/index.js:1 117 msgid "Masonry disabled: set a fixed column count on the active breakpoint." 118 msgstr "" 119 120 #: build/index.js:1 105 121 msgid "Enable responsive layout" 106 122 msgstr "" 107 123 108 124 #: build/index.js:1 109 msgid " Works with queries that use a fixed number of columns."125 msgid "Reset gaps and breakpoints to the theme defaults." 110 126 msgstr "" 111 127 … … 115 131 116 132 #: build/index.js:1 117 msgid "Restore default breakpoint and gap values."133 msgid "Restore the breakpoint and gap values provided by the current theme." 118 134 msgstr "" -
responsive-columns/trunk/readme.txt
r3384648 r3385207 6 6 Tested up to: 6.8 7 7 Requires PHP: 7.4 8 Stable tag: 1.1. 08 Stable tag: 1.1.1 9 9 License: GPL-2.0-or-later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html 11 11 12 Ad ds per-device column counts, Gap X/Y and optional Masonry to core Columns & Query Loop — no extra blocks or CSS.12 Adaptive column counts, gap controls, and Masonry layouts for core Columns and Query Loop blocks — no custom blocks required. 13 13 14 14 == Description == 15 15 16 > **Stop guessing how many columns will show on a phone.** 17 > Responsive Columns lets you set an exact column count for **four breakpoints** right inside the core block inspector. 16 > **See exactly how many columns appear on every device.** Responsive Columns extends the core Columns block and the Query Loop (grid) template with precise controls for four breakpoints, X/Y gap management, and an optional Masonry layout. 18 17 19 18 ### Key features 20 19 21 * **Desktop / Tablet-Landscape / Tablet-Portrait / Mobile** 22 Pick **1 – 6 columns** for each breakpoint. 23 * **Theme-aware gaps** 24 Reads `--wp--style--block-gap`, lets you tweak **Gap X** and **Gap Y** without hard-coding pixels. 25 * **Masonry layout for Query Loop (Grid)** — one click, zero jQuery. 26 * Works with **core/Columns** _and_ **core/Post Template (Query Loop Grid)**. 27 * **Lightweight** — one helper class, pure CSS variables; editor JS ≈ 3 kB. 20 * **Four responsive breakpoints.** Fine-tune Desktop, Tablet landscape, Tablet portrait, and Mobile column counts (1–6 columns). 21 * **Theme-aware gaps.** Uses your theme's block gap as a starting point and lets you override horizontal and vertical spacing independently. 22 * **One-click Masonry for Query Loop (Grid).** No jQuery, automatically reflows posts as your content changes. 23 * **Native block experience.** Works directly inside core/Columns and core/Post Template (grid) so patterns, reusable blocks, and theme.json continue to work. 24 * **Lightweight.** Modern ES modules (~4 kB compressed) and CSS custom properties. Editor assets load only when needed. 28 25 29 26 ### How it works 30 27 31 The plugin adds one class `has-s1-rc-columns` and these CSS variables:28 The plugin adds a `has-s1-rc-columns` class and a handful of CSS custom properties: 32 29 33 30 --s1-rc-columns-mobile-portrait … … 39 36 --s1-rc-gap-y / vertical, falls back to X */ 40 37 41 Your theme keeps its own `display:grid` / `flex` rules — 42 only `grid-template-columns` and gaps are overridden inside media queries. 38 Your theme's layout styles stay in control — Responsive Columns only adjusts `grid-template-columns` and gap values inside media queries. Disable or uninstall the plugin and the columns fall back to WordPress defaults without leaving orphan styles behind. 43 39 44 Deactivate the plugin and everything gracefully falls back to the default block behaviour. 40 ### Editor experience 41 42 * Inspector panel with device icons, tooltips, and numeric inputs for precise values. 43 * Theme gap detection with a reset button to restore defaults in one click. 44 * Gap linking lets you mirror vertical spacing or split it into a custom row gap. 45 * Masonry toggle explains prerequisites (Query Loop + Grid layout with a desktop column count). 46 47 ### Accessibility & localisation 48 49 * All UI controls are keyboard accessible and include human-readable labels. 50 * Strings are translation ready via the `responsive-columns` text domain and JSON translation support. 45 51 46 52 == Installation == 47 53 48 1. Upload the folder to `/wp-content/plugins/` **or** search “Responsive Columns” in *Plugins → Add New*.49 2. Activate the plugin. 50 3. Select a ny **Columns** block (or **Query Loop → Grid**), open the sidebar and find the **“Responsive Columns”** panel.54 1. Upload the plugin folder to `/wp-content/plugins/` or search “Responsive Columns” in *Plugins → Add New*. 55 2. Activate the plugin. 56 3. Select a **Columns** block or **Query Loop → Grid**, open the sidebar, and expand the **Responsive Columns** panel. 51 57 52 58 == Frequently Asked Questions == 53 59 54 = Does it work with Reusable Blocks and Patterns? = 55 Yes. Settings are stored as native block attributes, so patterns and reusable blocks keep their responsive values.60 = Does it work with Reusable Blocks and Patterns? = 61 Yes. Responsive settings are saved as native block attributes and persist across reusable blocks, synced patterns, and template parts. 56 62 57 = Will my layout break if I uninstall the plugin? = 58 No. The extra attributes are simply ignored and columns revert to the default “stack on mobile”.63 = Will my layout break if I uninstall the plugin? = 64 No. Extra attributes are ignored by core blocks once the plugin is removed. Your content reverts to the default responsive behaviour (stacking on smaller screens). 59 65 60 66 == Screenshots == … … 65 71 66 72 == Changelog == 73 74 = 1.1.1 = 75 * **Fixes & Defaults:** 76 “Reset responsive settings” now restores gap values directly from the active theme (`theme.json`). 77 New blocks initialize with the correct default gap from the theme or a reliable fallback (`24px`). 78 79 * **UX Improvements:** 80 Column and row gaps now stay synchronized consistently when linked (X ↔ Y). 81 Editor controls always display real pixel values based on the theme rather than placeholders. 82 83 * **Masonry Guard:** 84 Added a responsive validation layer that only enables Masonry for valid Query Loop grid layouts. 85 The toggle now includes clear inline guidance and automatic reset behavior when prerequisites are not met. 67 86 68 87 = 1.1.0 = … … 80 99 81 100 = 1.0.0 = 82 * Initial public release — breakpoints, Gap X / Yand Masonry option.101 * Initial public release — breakpoints, gap controls, and Masonry option. 83 102 84 103 == Upgrade Notice == 85 104 105 = 1.1.1 = 106 This patch improves theme gap detection, default handling, and Masonry reliability while keeping existing layouts visually unchanged. 107 86 108 = 1.1.0 = 87 109 This update improves code safety, performance, accessibility, and build stability without changing any existing functionality. -
responsive-columns/trunk/responsive-columns.php
r3384648 r3385207 4 4 * Plugin URI: https://wordpress.org/plugins/responsive-columns/ 5 5 * Description: Adaptive column counts, X/Y gaps and optional Masonry layout for core/Columns and Query Loop (Grid). 6 * Version: 1.1. 06 * Version: 1.1.1 7 7 * Requires at least: 6.4 8 8 * Requires PHP: 7.4 … … 21 21 final class S1_Responsive_Columns { 22 22 23 public const VERSION = '1.1.0';23 public const VERSION = '1.1.1'; 24 24 private const SLUG = 'responsive-columns'; 25 25 private const HANDLE = 's1-rc'; … … 40 40 $this->url = plugin_dir_url( $this->file ); 41 41 42 add_action( 'enqueue_block_editor_assets', [ $this, 'enqueue_editor_assets' ] ); 43 add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_front_styles' ] ); 44 add_action( 'init', [ $this, 'register_front_assets' ] ); 45 add_filter( 'render_block', [ $this, 'filter_post_template' ], 10, 2 ); 42 add_action( 'enqueue_block_editor_assets', [ $this, 'enqueue_editor_assets' ] ); 43 add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_front_styles' ] ); 44 add_action( 'init', [ $this, 'register_block_styles' ] ); 45 add_action( 'init', [ $this, 'register_front_assets' ] ); 46 add_filter( 'render_block', [ $this, 'filter_post_template' ], 10, 2 ); 46 47 } 47 48 … … 101 102 if ( function_exists( 'wp_set_script_translations' ) ) { 102 103 wp_set_script_translations( $handle, self::SLUG, $this->dir . 'languages' ); 103 } 104 105 $editor_rel = 'blocks/editor.css'; 106 $editor_path = $this->dir . $editor_rel; 107 if ( file_exists( $editor_path ) ) { 108 wp_enqueue_style( 109 $handle, 110 $this->url . $editor_rel, 111 [ 'wp-edit-blocks' ], 112 filemtime( $editor_path ) 113 ); 114 } 115 } 104 } 105 } 106 107 108 public function register_block_styles(): void { 109 if ( ! function_exists( 'wp_enqueue_block_style' ) ) { 110 return; 111 } 112 113 $style_rel = 'blocks/editor.css'; 114 $style_path = $this->dir . $style_rel; 115 116 if ( ! file_exists( $style_path ) ) { 117 return; 118 } 119 120 $version = filemtime( $style_path ); 121 $version = $version ? (string) $version : self::VERSION; 122 123 $args = [ 124 'handle' => self::HANDLE . '-editor-style', 125 'src' => $this->url . $style_rel, 126 'path' => $style_path, 127 'deps' => [ 'wp-block-library' ], 128 'ver' => $version, 129 ]; 130 131 foreach ( [ 'core/post-template', 'core/columns' ] as $block ) { 132 wp_enqueue_block_style( $block, $args ); 133 } 134 } 116 135 117 136 … … 182 201 } 183 202 184 if ( array_key_exists( 'gapX', $attrs ) && null !== $attrs['gapX'] ) { 185 $vars .= '--s1-rc-gap-x:' . intval( $attrs['gapX'] ) . 'px;'; 186 } 187 if ( 188 ! empty( $attrs['gapYSplit'] ) && 189 array_key_exists( 'gapY', $attrs ) && 190 null !== $attrs['gapY'] 191 ) { 192 $vars .= '--s1-rc-gap-y:' . intval( $attrs['gapY'] ) . 'px;'; 193 } 203 if ( array_key_exists( 'gapX', $attrs ) && null !== $attrs['gapX'] ) { 204 if ( is_string( $attrs['gapX'] ) ) { 205 $gap_x = trim( $attrs['gapX'] ); 206 if ( '' !== $gap_x ) { 207 $vars .= '--s1-rc-gap-x:' . sanitize_text_field( $gap_x ) . ';'; 208 } 209 } elseif ( is_numeric( $attrs['gapX'] ) ) { 210 $gap_x = max( 0, floatval( $attrs['gapX'] ) ); 211 $vars .= '--s1-rc-gap-x:' . $gap_x . 'px;'; 212 } 213 } 214 if ( 215 ! empty( $attrs['gapYSplit'] ) && 216 array_key_exists( 'gapY', $attrs ) && 217 null !== $attrs['gapY'] 218 ) { 219 if ( is_string( $attrs['gapY'] ) ) { 220 $gap_y = trim( $attrs['gapY'] ); 221 if ( '' !== $gap_y ) { 222 $vars .= '--s1-rc-gap-y:' . sanitize_text_field( $gap_y ) . ';'; 223 } 224 } elseif ( is_numeric( $attrs['gapY'] ) ) { 225 $gap_y = max( 0, floatval( $attrs['gapY'] ) ); 226 $vars .= '--s1-rc-gap-y:' . $gap_y . 'px;'; 227 } 228 } 194 229 195 230 if ( ! class_exists( 'WP_HTML_Tag_Processor' ) ) {
Note: See TracChangeset
for help on using the changeset viewer.