Plugin Directory

Changeset 3801491


Ignore:
Timestamp:
11/14/2026 07:28:39 AM (less than one hour ago)
Author:
iqbal1hossain
Message:

update v1.2.1

Location:
noah-shop-builder-for-woocommerce
Files:
801 added
17 edited

Legend:

Unmodified
Added
Removed
  • noah-shop-builder-for-woocommerce/trunk/build/admin-dashboard.asset.php

    r3800774 r3801491  
    1414                'wp-url'
    1515        ),
    16         'version' => 'ccf97b25415a9e6abc1c'
     16        'version' => 'de7d8beeb7b0879ae6af'
    1717);
  • noah-shop-builder-for-woocommerce/trunk/build/admin-dashboard.js

    r3800774 r3801491  
    1 (()=>{"use strict";var e={659(e,o,s){const t=window.wp.element,r=window.wp.url,a=window.wp.i18n,n=window.wp.components,l=window.wp.data,i=window.wp.apiFetch;var c=s.n(i);const d=window.wp.notices,h="noah_shop_builder_blocks_list",m="noah_shop_builder_modules_list",u="noah_shop_builder_module_settings",p="noah_shop_builder_settings",g={blocks:{},loadError:null,modules:{},modulesLoadError:null,pendingSaves:0,settings:{},settingsLoadError:null},_={getBlocks:e=>e.blocks,getLoadError:e=>e.loadError,isSaving:e=>e.pendingSaves>0,getStatuses(e){const o={};for(const s of Object.values(e.blocks))s.required||(o[s.slug]=s.status);return o},getSettings:e=>e.settings,getSettingsLoadError:e=>e.settingsLoadError,getModules:e=>e.modules,getModulesLoadError:e=>e.modulesLoadError,getModuleStatuses(e){const o={};for(const s of Object.values(e.modules))o[s.slug]=s.status;return o}};let w=Promise.resolve();function v(e,o,s,t,r){const n=e.dispatch(d.store);o({type:"SAVE_START"});const l=w.then(async()=>{try{const e=await c()({path:"/wp/v2/settings",method:"POST",data:s()});return t(e),n.createSuccessNotice((0,a.__)("Settings saved.","noah-shop-builder-for-woocommerce"),{type:"snackbar",id:"noah-shop-builder-saved"}),!0}catch(e){return r(),n.createErrorNotice(e?.message||(0,a.__)("Settings could not be saved. Please try again.","noah-shop-builder-for-woocommerce"),{type:"snackbar",id:"noah-shop-builder-save-error"}),!1}finally{o({type:"SAVE_END"})}});return w=l,l}const x={receiveBlocks:e=>({type:"RECEIVE_BLOCKS",blocks:e}),receiveLoadError:e=>({type:"RECEIVE_LOAD_ERROR",message:e}),setStatuses:e=>({type:"SET_STATUSES",statuses:e}),toggleBlock:(e,o)=>({dispatch:s})=>s.updateStatuses({[e]:o?"active":"inactive"}),setAllBlocks:e=>({dispatch:o,select:s})=>{const t={};for(const o of Object.keys(s.getStatuses()))t[o]=e?"active":"inactive";return o.updateStatuses(t)},updateStatuses:e=>({dispatch:o,select:s,registry:t})=>{const r=s.getStatuses(),a={};for(const o of Object.keys(e))a[o]=r[o];return o.setStatuses(e),v(t,o,()=>({[h]:s.getStatuses()}),()=>{},()=>o.setStatuses(a))},receiveSettings:e=>({type:"RECEIVE_SETTINGS",settings:e}),receiveSettingsLoadError:e=>({type:"RECEIVE_SETTINGS_LOAD_ERROR",message:e}),saveSetting:(e,o)=>({dispatch:s,select:t,registry:r})=>{const a=t.getSettings()[e];return s.receiveSettings({[e]:o}),v(r,s,()=>({[p]:{[e]:o}}),e=>s.receiveSettings(e?.[p]||{}),()=>s.receiveSettings({[e]:a}))},receiveModules:e=>({type:"RECEIVE_MODULES",modules:e}),receiveModulesLoadError:e=>({type:"RECEIVE_MODULES_LOAD_ERROR",message:e}),toggleModule:(e,o)=>({dispatch:s,select:t,registry:r})=>{const a=t.getModules()[e]?.status;return s({type:"SET_MODULE",slug:e,changes:{status:o?"active":"inactive"}}),v(r,s,()=>({[m]:t.getModuleStatuses()}),()=>{},()=>s({type:"SET_MODULE",slug:e,changes:{status:a}}))},saveModuleSettings:(e,o)=>({dispatch:s,registry:t})=>v(t,s,()=>({[u]:{[e]:o}}),t=>s({type:"SET_MODULE",slug:e,changes:{settings:{...o,...t?.[u]?.[e]}}}),()=>{})},b={getBlocks:()=>async({dispatch:e})=>{try{const o=await c()({path:"/noah-shop-builder/v1/blocks"});e.receiveBlocks(o?.blocks||{})}catch(o){e.receiveLoadError(o?.message||(0,a.__)("Error loading blocks. Please reload the page.","noah-shop-builder-for-woocommerce"))}},getSettings:()=>async({dispatch:e})=>{try{const o=await c()({path:`/wp/v2/settings?_fields=${p}`});e.receiveSettings(o?.[p]||{})}catch(o){e.receiveSettingsLoadError(o?.message||(0,a.__)("Error loading settings. Please reload the page.","noah-shop-builder-for-woocommerce"))}},getModules:()=>async({dispatch:e})=>{try{const o=await c()({path:"/noah-shop-builder/v1/modules"});e.receiveModules(o?.modules||{})}catch(o){e.receiveModulesLoadError(o?.message||(0,a.__)("Error loading modules. Please reload the page.","noah-shop-builder-for-woocommerce"))}}},f=(0,l.createReduxStore)("noah-shop-builder/dashboard",{reducer:function(e=g,o){switch(o.type){case"RECEIVE_BLOCKS":return{...e,blocks:o.blocks,loadError:null};case"RECEIVE_LOAD_ERROR":return{...e,loadError:o.message};case"SET_STATUSES":{const s={...e.blocks};for(const[e,t]of Object.entries(o.statuses))s[e]&&!s[e].required&&(s[e]={...s[e],status:t});return{...e,blocks:s}}case"RECEIVE_MODULES":return{...e,modules:o.modules,modulesLoadError:null};case"RECEIVE_MODULES_LOAD_ERROR":return{...e,modulesLoadError:o.message};case"SET_MODULE":return e.modules[o.slug]?{...e,modules:{...e.modules,[o.slug]:{...e.modules[o.slug],...o.changes}}}:e;case"RECEIVE_SETTINGS":return{...e,settings:{...e.settings,...o.settings},settingsLoadError:null};case"RECEIVE_SETTINGS_LOAD_ERROR":return{...e,settingsLoadError:o.message};case"SAVE_START":return{...e,pendingSaves:e.pendingSaves+1};case"SAVE_END":return{...e,pendingSaves:Math.max(0,e.pendingSaves-1)}}return e},selectors:_,actions:x,resolvers:b});(0,l.register)(f);const j=window.ReactJSXRuntime;function y({badges:e}){return Array.isArray(e)&&0!==e.length?(0,j.jsx)("span",{className:"noah-badges",children:e.map(e=>(0,j.jsx)("span",{className:`badge badge-${e}`,children:e},e))}):null}const S={"noah-single":(0,a.__)("Single Product","noah-shop-builder-for-woocommerce"),"noah-archive":(0,a.__)("Shop & Archive","noah-shop-builder-for-woocommerce"),"noah-cart":(0,a.__)("Cart","noah-shop-builder-for-woocommerce"),"noah-checkout":(0,a.__)("Checkout","noah-shop-builder-for-woocommerce"),"noah-account":(0,a.__)("My Account","noah-shop-builder-for-woocommerce"),"noah-modules":(0,a.__)("Modules","noah-shop-builder-for-woocommerce")},k=window.wp.htmlEntities,N=window.wp.hooks,C=window.wp.primitives,E=(0,j.jsx)(C.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,j.jsx)(C.Path,{d:"M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z"})}),V=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z"})}),M=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M7.1 5.7 8 6.9c.4-.3.9-.6 1.5-.8l-.6-1.4c-.7.3-1.3.6-1.8 1ZM4.6 8.9l1.4.6c.2-.5.5-1 .8-1.5l-1.2-.9c-.4.6-.8 1.2-1 1.8Zm14.8 0c-.3-.7-.6-1.3-1-1.8l-1.2.9c.3.4.6.9.8 1.5l1.4-.6ZM7.1 18.3c.6.4 1.2.8 1.8 1l.6-1.4c-.5-.2-1-.5-1.5-.8l-.9 1.2ZM5.5 12v-.9h-.7l-.7-.2v2l1.5-.2v-.9Zm-.7 3h-.2c.3.7.6 1.3 1 1.9l1.2-.9c-.3-.4-.6-.9-.8-1.5l-1.2.5Zm9.7 3 .5 1.2v.2c.7-.3 1.3-.6 1.9-1l-.9-1.2c-.4.3-.9.6-1.5.8Zm-2.5.5h-.9l-.2 1.3v.2h2l-.2-1.5h-.9Zm7.9-7.5-1.5.2V13h.7l.7.2v-2ZM18 14.5c-.2.5-.5 1-.8 1.5l1.2.9c.4-.6.8-1.2 1-1.8h-.2l-1.2-.6ZM11 4.1l.2 1.5H13V4.2h-1.9ZM14.5 6c.5.2 1 .5 1.5.8l.9-1.2c-.6-.4-1.2-.8-1.8-1L14.5 6Z"})}),B=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2Zm.5 2v6.2h-6.8V4.4h6.2c.3 0 .5.2.5.5ZM5 4.5h6.2v6.8H4.4V5.1c0-.3.2-.5.5-.5ZM4.5 19v-6.2h6.8v6.8H5.1c-.3 0-.5-.2-.5-.5Zm14.5.5h-6.2v-6.8h6.8v6.2c0 .3-.2.5-.5.5Z"})}),L=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M10.5 4v4h3V4H15v4h1.5a1 1 0 011 1v4l-3 4v2a1 1 0 01-1 1h-3a1 1 0 01-1-1v-2l-3-4V9a1 1 0 011-1H9V4h1.5zm.5 12.5v2h2v-2l3-4v-3H8v3l3 4z"})}),z={seen:E,starFilled:V,swatch:M,table:B},R=[{slug:"wishlist",icon:V,title:(0,a.__)("Wishlist","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Shoppers save products from cards and product pages to a wishlist. Works for guests and logged-in customers, with a wishlist page block.","noah-shop-builder-for-woocommerce")},{slug:"variation-swatches",icon:M,title:(0,a.__)("Variation Swatches","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Replace variation dropdowns on product pages with color, image and label swatches that work with the keyboard.","noah-shop-builder-for-woocommerce")}];function T({common:e,value:o,onChange:s}){const[l,i]=(0,t.useState)(null);(0,t.useEffect)(()=>{let e=!0;return c()({path:(0,r.addQueryArgs)("/wp/v2/pages",{status:"publish",per_page:100,orderby:"title",order:"asc",_fields:"id,title"})}).catch(()=>[]).then(o=>e&&i(o)),()=>{e=!1}},[]);const d=[{value:"0",label:(0,a.__)("— None —","noah-shop-builder-for-woocommerce")},...(l??[]).map(e=>({value:String(e.id),label:e.title?.rendered?(0,k.decodeEntities)(e.title.rendered):(0,a.sprintf)(/* translators: %d: page ID */ /* translators: %d: page ID */
    2 (0,a.__)("#%d (no title)","noah-shop-builder-for-woocommerce"),e.id)}))];return(0,j.jsx)(n.SelectControl,{...e,__next40pxDefaultSize:!0,value:String(o||0),options:d,disabled:null===l,onChange:e=>s(parseInt(e,10)||0)})}function A({field:e,value:o,onChange:s}){const t={__nextHasNoMarginBottom:!0,label:e.badge?.length?(0,j.jsxs)(j.Fragment,{children:[e.label," ",(0,j.jsx)(y,{badges:e.badge})]}):e.label,help:e.help};return"page"===e.control&&"integer"===e.type?(0,j.jsx)(T,{common:t,value:o,onChange:s}):"boolean"===e.type?(0,j.jsx)(n.ToggleControl,{...t,checked:!!o,onChange:s}):e.options?(0,j.jsx)(n.SelectControl,{...t,__next40pxDefaultSize:!0,value:o,options:e.options,onChange:s}):"integer"===e.type?(0,j.jsx)(n.TextControl,{...t,__next40pxDefaultSize:!0,type:"number",min:e.minimum,max:e.maximum,value:o,onChange:e=>s(""===e?"":parseInt(e,10))}):(0,j.jsx)(n.TextControl,{...t,__next40pxDefaultSize:!0,value:o,onChange:s})}function D({module:e,onClose:o}){const[s,r]=(0,t.useState)(e.settings||{}),[i,c]=(0,t.useState)(!1),{saveModuleSettings:d}=(0,l.useDispatch)(f);return(0,j.jsx)(n.Modal,{title:(0,a.sprintf)(/* translators: %s: module name. */ /* translators: %s: module name. */
    3 (0,a.__)("%s settings","noah-shop-builder-for-woocommerce"),e.title),onRequestClose:o,className:"noah-module-settings",children:(0,j.jsxs)("form",{onSubmit:async t=>{t.preventDefault(),c(!0);const r=await d(e.slug,s);c(!1),r&&o()},children:[(0,j.jsx)("div",{className:"noah-module-settings__fields",children:e.fields.map(e=>(0,j.jsx)(A,{field:e,value:s[e.key]??e.default,onChange:o=>r({...s,[e.key]:o})},e.key))}),(0,j.jsxs)("div",{className:"noah-module-settings__actions",children:[(0,j.jsx)(n.Button,{variant:"tertiary",onClick:o,children:(0,a.__)("Cancel","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"primary",type:"submit",isBusy:i,disabled:i,children:(0,a.__)("Save","noah-shop-builder-for-woocommerce")})]})]})})}const H=window.wp.coreData,P=(0,j.jsx)(C.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,j.jsx)(C.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M5.5 12a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0ZM12 4a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-.75 12v-1.5h1.5V16h-1.5Zm0-8v5h1.5V8h-1.5Z"})}),O=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"m19 7-3-3-8.5 8.5-1 4 4-1L19 7Zm-7 11.5H5V20h7v-1.5Z"})}),Z=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z"})}),G=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M5 4.5h11a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V5a.5.5 0 0 1 .5-.5ZM3 5a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5Zm17 3v10.75c0 .69-.56 1.25-1.25 1.25H6v1.5h12.75a2.75 2.75 0 0 0 2.75-2.75V8H20Z"})}),I=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 5.5A2.25 2.25 0 0 0 9.878 7h4.244A2.251 2.251 0 0 0 12 5.5ZM12 4a3.751 3.751 0 0 0-3.675 3H5v1.5h1.27l.818 8.997a2.75 2.75 0 0 0 2.739 2.501h4.347a2.75 2.75 0 0 0 2.738-2.5L17.73 8.5H19V7h-3.325A3.751 3.751 0 0 0 12 4Zm4.224 4.5H7.776l.806 8.861a1.25 1.25 0 0 0 1.245 1.137h4.347a1.25 1.25 0 0 0 1.245-1.137l.805-8.861Z"})}),F=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M11 12.5V17.5H12.5V12.5H17.5V11H12.5V6H11V11H6V12.5H11Z"})}),W=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z"})}),q=(0,j.jsxs)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:[(0,j.jsx)(C.Path,{d:"M15.5 7.5h-7V9h7V7.5Zm-7 3.5h7v1.5h-7V11Zm7 3.5h-7V16h7v-1.5Z"}),(0,j.jsx)(C.Path,{d:"M17 4H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2ZM7 5.5h10a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H7a.5.5 0 0 1-.5-.5V6a.5.5 0 0 1 .5-.5Z"})]}),U=(0,j.jsx)(C.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,j.jsx)(C.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M11.934 7.406a1 1 0 0 0 .914.594H19a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V6a.5.5 0 0 1 .5-.5h5.764a.5.5 0 0 1 .447.276l.723 1.63Zm1.064-1.216a.5.5 0 0 0 .462.31H19a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.764a2 2 0 0 1 1.789 1.106l.445 1.084ZM8.5 10.5h7V12h-7v-1.5Zm7 3.5h-7v1.5h7V14Z"})}),Q=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{fillRule:"evenodd",d:"M19.75 11H21V8.667L19.875 4H4.125L3 8.667V11h1.25v8.75h15.5V11zm-1.5 0H5.75v7.25H10V13h4v5.25h4.25V11zm-5.5-5.5h2.067l.486 3.24.028.76H12.75v-4zm-3.567 0h2.067v4H8.669l.028-.76.486-3.24zm7.615 3.1l-.464-3.1h2.36l.806 3.345V9.5h-2.668l-.034-.9zM7.666 5.5h-2.36L4.5 8.845V9.5h2.668l.034-.9.464-3.1z",clipRule:"evenodd"})}),$=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M3 6.75C3 5.784 3.784 5 4.75 5H15V7.313l.05.027 5.056 2.73.394.212v3.468a1.75 1.75 0 01-1.75 1.75h-.012a2.5 2.5 0 11-4.975 0H9.737a2.5 2.5 0 11-4.975 0H3V6.75zM13.5 14V6.5H4.75a.25.25 0 00-.25.25V14h.965a2.493 2.493 0 011.785-.75c.7 0 1.332.287 1.785.75H13.5zm4.535 0h.715a.25.25 0 00.25-.25v-2.573l-4-2.16v4.568a2.487 2.487 0 011.25-.335c.7 0 1.332.287 1.785.75zM6.282 15.5a1.002 1.002 0 00.968 1.25 1 1 0 10-.968-1.25zm9 0a1 1 0 101.937.498 1 1 0 00-1.938-.498z"})}),K=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M3 7c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Zm2-.5h14c.3 0 .5.2.5.5v1L12 13.5 4.5 7.9V7c0-.3.2-.5.5-.5Zm-.5 3.3V17c0 .3.2.5.5.5h14c.3 0 .5-.2.5-.5V9.8L12 15.4 4.5 9.8Z"})}),X=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{fillRule:"evenodd",d:"M5.5 9.5v-2h13v2h-13zm0 3v4h13v-4h-13zM4 7a1 1 0 011-1h14a1 1 0 011 1v10a1 1 0 01-1 1H5a1 1 0 01-1-1V7z",clipRule:"evenodd"})}),J=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{fillRule:"evenodd",d:"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z",clipRule:"evenodd"})}),Y=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M15.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm-2.25 6v-2a2.75 2.75 0 00-2.75-2.75h-4A2.75 2.75 0 003.75 15v2h1.5v-2c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25v2h1.5zm7-2v2h-1.5v-2c0-.69-.56-1.25-1.25-1.25H15v-1.5h2.5A2.75 2.75 0 0120.25 15zM9.5 8.5a1 1 0 11-2 0 1 1 0 012 0zm1.5 0a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z",fillRule:"evenodd"})}),ee=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M18 5.5H6a.5.5 0 00-.5.5v3h13V6a.5.5 0 00-.5-.5zm.5 5H10v8h8a.5.5 0 00.5-.5v-7.5zm-10 0h-3V18a.5.5 0 00.5.5h2.5v-8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z"})}),oe={single:{icon:q,description:(0,a.__)("The page of one product: gallery, price, add to cart and details.","noah-shop-builder-for-woocommerce")},archive:{icon:U,description:(0,a.__)("Product category and tag pages.","noah-shop-builder-for-woocommerce")},shop:{icon:Q,description:(0,a.__)("The main shop page that lists your products.","noah-shop-builder-for-woocommerce")},quick_view:{icon:E,description:(0,a.__)("The popup shown when a shopper previews a product from a list.","noah-shop-builder-for-woocommerce")},cart:{icon:$,description:(0,a.__)("The cart page with the items a shopper is about to buy.","noah-shop-builder-for-woocommerce")},empty_cart:{icon:K,description:(0,a.__)("What shoppers see when their cart is empty.","noah-shop-builder-for-woocommerce")},checkout:{icon:X,description:(0,a.__)("Billing, shipping and payment steps.","noah-shop-builder-for-woocommerce")},order_received:{icon:J,description:(0,a.__)("The thank-you page after an order is placed.","noah-shop-builder-for-woocommerce")},my_account:{icon:Y,description:(0,a.__)("Customer dashboard, orders, addresses and account details.","noah-shop-builder-for-woocommerce")}};function se(e){return oe[e]||{icon:ee,description:""}}const te=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M20.5 16h-.7V8c0-1.1-.9-2-2-2H6.2c-1.1 0-2 .9-2 2v8h-.7c-.8 0-1.5.7-1.5 1.5h20c0-.8-.7-1.5-1.5-1.5zM5.7 8c0-.3.2-.5.5-.5h11.6c.3 0 .5.2.5.5v7.6H5.7V8z"})}),re=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M17 4H7c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H7c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h10c.3 0 .5.2.5.5v12zm-7.5-.5h4V16h-4v1.5z"})}),ae=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M15 4H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H9c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h6c.3 0 .5.2.5.5v12zm-4.5-.5h2V16h-2v1.5z"})}),ne=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"})}),le=[{slug:"desktop",label:(0,a.__)("Desktop","noah-shop-builder-for-woocommerce"),icon:te,width:"100%"},{slug:"tablet",label:(0,a.__)("Tablet","noah-shop-builder-for-woocommerce"),icon:re,width:"768px"},{slug:"mobile",label:(0,a.__)("Mobile","noah-shop-builder-for-woocommerce"),icon:ae,width:"375px"}],ie=function({url:e,title:o,onClose:s,action:r}){const[l,i]=(0,t.useState)("desktop"),[c,d]=(0,t.useState)(!0),h=le.find(e=>e.slug===l).width;return(0,j.jsx)(n.Modal,{className:"noah-preview-modal",title:o,onRequestClose:s,isFullScreen:!0,headerActions:(0,j.jsxs)("div",{className:"noah-preview-modal__actions",children:[(0,j.jsx)("div",{className:"noah-segmented",role:"group","aria-label":(0,a.__)("Preview size","noah-shop-builder-for-woocommerce"),children:le.map(e=>(0,j.jsx)(n.Button,{icon:e.icon,label:e.label,size:"compact","aria-pressed":l===e.slug,className:l===e.slug?"is-selected":"",onClick:()=>i(e.slug)},e.slug))}),(0,j.jsx)(n.Button,{icon:ne,label:(0,a.__)("Open in new tab","noah-shop-builder-for-woocommerce"),href:e,target:"_blank",rel:"noopener noreferrer",size:"compact"}),r]}),children:(0,j.jsxs)("div",{className:"noah-preview-modal__stage",children:[c&&(0,j.jsxs)("div",{className:"noah-preview-modal__loading",children:[(0,j.jsx)(n.Spinner,{}),(0,j.jsx)("p",{children:(0,a.__)("Loading preview…","noah-shop-builder-for-woocommerce")})]}),(0,j.jsx)("iframe",{title:o,src:e,style:{width:h},className:c?"is-loading":"",onLoad:()=>d(!1)})]})})},ce={img:"noah-wireframe__image",head:"noah-wireframe__heading",line:"noah-wireframe__line",accent:"noah-wireframe__accent",box:"noah-wireframe__box",dashed:"noah-wireframe__dashed"},de=(e,o,s,t,r)=>{const a=(s-5*(r-1))/r;return Array.from({length:r},(s,r)=>["img",e+r*(a+5),o,a,t])},he=(e,o,s,t)=>Array.from({length:t},(t,r)=>["box",e,o+11*r,s,7]),me={blank:[["dashed",8,8,144,84]],split:[["img",10,10,66,80],["head",86,14,56,7],["line",86,27,30,4],["line",86,37,22,4],["line",86,48,64,4],["line",86,56,58,4],["accent",86,68,40,10]],feature:[["img",10,10,84,62],["head",102,12,48,7],["line",102,25,26,4],["line",102,35,20,4],["line",102,45,48,4],["accent",102,45,30,4],["accent",102,56,48,10],...de(10,78,140,14,4)],stacked:[["img",50,8,60,44],["head",56,58,48,6],["line",66,69,28,4],["line",58,77,44,4],["accent",58,84,44,9]],grid:[["line",10,8,40,3],["head",10,15,60,7],["line",10,27,30,4],["box",120,25,30,7],...de(10,38,140,24,3),...de(10,66,140,24,3)],hero:[["head",50,10,60,8],["line",40,23,80,4],["line",30,32,100,4],["line",50,39,60,4],...de(10,50,140,19,4),...de(10,73,140,19,4)],sidebar:[["head",10,10,30,6],["line",10,22,28,4],["line",10,30,24,4],["line",10,38,30,4],["line",10,46,22,4],["head",50,10,50,7],...de(50,24,100,30,3),...de(50,58,100,30,3)],cart:[["head",10,10,50,8],["img",10,26,14,14],["line",30,30,50,4],["img",10,46,14,14],["line",30,50,44,4],["img",10,66,14,14],["line",30,70,54,4],["box",104,26,46,50],["line",110,34,34,4],["line",110,44,28,4],["accent",110,60,34,9]],"cart-trust":[["head",55,6,50,7],...de(10,18,140,12,3),["img",10,38,12,12],["line",27,42,50,4],["img",10,56,12,12],["line",27,60,44,4],["box",104,38,46,46],["line",110,46,34,4],["accent",110,70,34,8]],message:[["head",35,8,90,8],["line",45,21,70,4],["accent",62,31,36,9],["line",72,47,16,3],["head",60,55,40,5],...de(10,65,140,26,4)],"message-split":[["head",10,30,46,8],["line",10,43,40,4],["line",10,51,34,4],["accent",10,61,34,9],...de(66,10,84,38,2),...de(66,52,84,38,2)],checkout:[["head",10,8,40,7],...he(10,22,84,5),["accent",10,80,84,10],["box",104,22,46,58],["img",110,28,10,10],["line",124,31,20,4],["line",110,46,34,4],["line",110,56,28,4]],"checkout-trust":[["head",50,5,60,6],["line",45,14,70,3],...he(35,21,90,4),["box",35,64,90,14],["accent",35,81,90,6],["line",35,92,40,3],["line",85,92,40,3]],order:[["head",10,8,80,8],["box",10,22,140,12],["head",10,40,30,5],["line",10,50,140,4],["line",10,58,140,4],["box",10,68,66,24],["box",84,68,66,24]],thanks:[["accent",72,8,16,16],["head",50,30,60,8],["line",40,43,80,4],["box",35,53,90,22],["accent",60,82,40,9]],account:[["head",10,8,50,8],["line",10,26,30,4],["line",10,34,26,4],["line",10,42,30,4],["line",10,50,22,4],["line",10,58,28,4],["line",50,26,100,4],["line",50,34,90,4],["box",50,46,100,40]],"account-help":[["head",10,8,50,8],["line",10,26,22,4],["line",10,34,18,4],["line",10,42,22,4],["box",38,24,66,62],["box",112,24,38,44],["head",117,30,26,5],["line",117,40,28,3],["accent",117,54,28,8]]},ue=[["head",10,12,70,8],["line",10,28,140,4],["line",10,36,132,4],["line",10,44,120,4],["img",10,56,140,34]],pe=function({layout:e}){const o=me[e]||ue;return(0,j.jsxs)("svg",{className:"noah-wireframe",viewBox:"0 0 160 100","aria-hidden":"true",focusable:"false",children:[o.map(([e,o,s,t,r],a)=>(0,j.jsx)("rect",{className:ce[e],x:o,y:s,width:t,height:r,rx:"line"===e?2:3},a)),"blank"===e&&(0,j.jsx)("path",{className:"noah-wireframe__accent-stroke",d:"M80 40v20M70 50h20"})]})},ge="noah_template",_e="_noah_template_type",we="_noah_conditions",ve="publish";function xe(e){return e.meta?.[_e]||"single"}function be(e){const o=e.meta?.[we];return Array.isArray(o)?o:[]}function fe(e){return e.status===ve}function je(e){return e.title?.raw??e.title?.rendered??""}function ye(e){const o=e.filter(e=>"exclude"!==e.type),s=e.length-o.length;return 0===o.length?{kind:"none",include:0,exclude:s}:0===s&&1===o.length&&"all"===o[0].rule?{kind:"all",include:1,exclude:0}:{kind:"custom",include:o.length,exclude:s}}function Se(e){return e.map(e=>["exclude"===e.type?"exclude":"include",e.rule,[...e.ids||[]].sort((e,o)=>e-o).join(","),[...e.slugs||[]].sort().join(",")].join(":")).sort().join("|")}const ke="blank";function Ne({label:e,value:o,options:s,onChange:t}){return(0,j.jsxs)("fieldset",{className:"noah-templates-modal__field",children:[(0,j.jsx)("legend",{children:e}),(0,j.jsx)("div",{className:"noah-option-cards",role:"radiogroup",children:s.map(e=>(0,j.jsxs)("button",{type:"button",role:"radio","aria-checked":o===e.value,className:"noah-option-card "+(o===e.value?"is-selected":""),onClick:()=>t(e.value),children:[(0,j.jsx)("span",{className:"noah-option-card__radio"}),(0,j.jsxs)("span",{children:[(0,j.jsx)("strong",{children:e.title}),(0,j.jsx)("span",{children:e.description})]})]},e.value))})]})}function Ce({type:e,onSelect:o}){const[s,r]=(0,t.useState)(null),l=[{slug:ke,title:(0,a.__)("Blank","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Start from an empty canvas and add Noah blocks yourself.","noah-shop-builder-for-woocommerce"),layout:"blank",content:""},...e.starters];return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("div",{className:"noah-design-grid",children:l.map(e=>(0,j.jsxs)("div",{className:"noah-design-card",children:[(0,j.jsxs)("button",{type:"button",className:"noah-design-card__select",onClick:()=>o(e),children:[(0,j.jsx)("span",{className:"noah-design-card__preview",children:(0,j.jsx)(pe,{layout:e.layout})}),(0,j.jsxs)("span",{className:"noah-design-card__body",children:[(0,j.jsxs)("strong",{children:[e.title," ",(0,j.jsx)(y,{badges:e.badge})]}),e.description&&(0,j.jsx)("span",{children:e.description}),e.blocks&&(0,j.jsx)("span",{className:`noah-design-card__blocks is-${e.blocks}`,children:"noah"===e.blocks?(0,a.__)("Noah blocks","noah-shop-builder-for-woocommerce"):(0,a.__)("WooCommerce blocks","noah-shop-builder-for-woocommerce")})]})]}),e.preview_url&&(0,j.jsx)(n.Button,{className:"noah-design-card__preview-button",variant:"secondary",size:"compact",icon:E,onClick:()=>r(e),children:(0,a.__)("Preview","noah-shop-builder-for-woocommerce")})]},e.slug))}),s&&(0,j.jsx)(ie,{url:s.preview_url,title:s.title,onClose:()=>r(null),action:(0,j.jsx)(n.Button,{variant:"primary",size:"compact",onClick:()=>o(s),children:(0,a.__)("Use this design","noah-shop-builder-for-woocommerce")})})]})}const Ee=function({types:e,onClose:o}){const[s,i]=(0,t.useState)(null),[c,d]=(0,t.useState)(null),[h,m]=(0,t.useState)(""),[u,p]=(0,t.useState)("all"),[g,_]=(0,t.useState)(ve),[w,v]=(0,t.useState)(!1),[x,b]=(0,t.useState)(null),{saveEntityRecord:f}=(0,l.useDispatch)(H.store),y=e=>e?.starters?.length>0,S=()=>{y(s)&&c||i(null),d(null)};let k=1;s&&(k=c?3:2);const N=y(s)||!s?[1,2,3]:[1,3],C={1:(0,a.__)("What do you want to design?","noah-shop-builder-for-woocommerce"),2:(0,a.__)("Choose a starting design","noah-shop-builder-for-woocommerce"),3:(0,a.__)("Set up your template","noah-shop-builder-for-woocommerce")};return(0,j.jsxs)(n.Modal,{className:"noah-templates-modal",title:C[k],onRequestClose:w?()=>{}:o,size:"large",children:[(0,j.jsx)("div",{className:"noah-templates-modal__steps","aria-hidden":"true",children:N.map(e=>(0,j.jsx)("span",{className:k>=e?"is-active":""},e))}),2===k&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)("div",{className:"noah-templates-modal__subheader",children:[(0,j.jsx)(n.Button,{variant:"tertiary",icon:W,onClick:S,children:(0,a.__)("Back","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{className:"noah-templates-modal__intro",children:(0,a.sprintf)(/* translators: %s: template type, e.g. "Single Product". */ /* translators: %s: template type, e.g. "Single Product". */
    4 (0,a.__)("Pick a ready-made %s layout or start blank. Preview any design on your store first; you can change everything in the editor.","noah-shop-builder-for-woocommerce"),s.label)})]}),(0,j.jsx)(Ce,{type:s,onSelect:d})]}),1===k&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("p",{className:"noah-templates-modal__intro",children:(0,a.__)("Choose the store page this template replaces.","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("div",{className:"noah-type-grid",children:e.map(e=>{const o=se(e.slug);return(0,j.jsxs)("button",{type:"button",className:"noah-type-card",onClick:()=>{return i(o=e),d(y(o)?null:{slug:ke,content:""}),void m((0,a.sprintf)(/* translators: %s: template type, e.g. "Single Product". */ /* translators: %s: template type, e.g. "Single Product". */
     1(()=>{"use strict";var e={232(e,o,s){const t=window.wp.element,r=window.wp.url,a=window.wp.i18n,n=window.wp.components,l=window.wp.data,i=window.wp.apiFetch;var c=s.n(i);const d=window.wp.notices,h="noah_shop_builder_blocks_list",u="noah_shop_builder_modules_list",m="noah_shop_builder_module_settings",p="noah_shop_builder_settings",g={blocks:{},loadError:null,modules:{},modulesLoadError:null,pendingSaves:0,settings:{},settingsLoadError:null},_={getBlocks:e=>e.blocks,getLoadError:e=>e.loadError,isSaving:e=>e.pendingSaves>0,getStatuses(e){const o={};for(const s of Object.values(e.blocks))s.required||(o[s.slug]=s.status);return o},getSettings:e=>e.settings,getSettingsLoadError:e=>e.settingsLoadError,getModules:e=>e.modules,getModulesLoadError:e=>e.modulesLoadError,getModuleStatuses(e){const o={};for(const s of Object.values(e.modules))o[s.slug]=s.status;return o}};let w=Promise.resolve();function x(e,o,s,t,r){const n=e.dispatch(d.store);o({type:"SAVE_START"});const l=w.then(async()=>{try{const e=await c()({path:"/wp/v2/settings",method:"POST",data:s()});return t(e),n.createSuccessNotice((0,a.__)("Settings saved.","noah-shop-builder-for-woocommerce"),{type:"snackbar",id:"noah-shop-builder-saved"}),!0}catch(e){return r(),n.createErrorNotice(e?.message||(0,a.__)("Settings could not be saved. Please try again.","noah-shop-builder-for-woocommerce"),{type:"snackbar",id:"noah-shop-builder-save-error"}),!1}finally{o({type:"SAVE_END"})}});return w=l,l}const v={receiveBlocks:e=>({type:"RECEIVE_BLOCKS",blocks:e}),receiveLoadError:e=>({type:"RECEIVE_LOAD_ERROR",message:e}),setStatuses:e=>({type:"SET_STATUSES",statuses:e}),toggleBlock:(e,o)=>({dispatch:s})=>s.updateStatuses({[e]:o?"active":"inactive"}),setAllBlocks:e=>({dispatch:o,select:s})=>{const t={};for(const o of Object.keys(s.getStatuses()))t[o]=e?"active":"inactive";return o.updateStatuses(t)},updateStatuses:e=>({dispatch:o,select:s,registry:t})=>{const r=s.getStatuses(),a={};for(const o of Object.keys(e))a[o]=r[o];return o.setStatuses(e),x(t,o,()=>({[h]:s.getStatuses()}),()=>{},()=>o.setStatuses(a))},receiveSettings:e=>({type:"RECEIVE_SETTINGS",settings:e}),receiveSettingsLoadError:e=>({type:"RECEIVE_SETTINGS_LOAD_ERROR",message:e}),saveSetting:(e,o)=>({dispatch:s,select:t,registry:r})=>{const a=t.getSettings()[e];return s.receiveSettings({[e]:o}),x(r,s,()=>({[p]:{[e]:o}}),e=>s.receiveSettings(e?.[p]||{}),()=>s.receiveSettings({[e]:a}))},receiveModules:e=>({type:"RECEIVE_MODULES",modules:e}),receiveModulesLoadError:e=>({type:"RECEIVE_MODULES_LOAD_ERROR",message:e}),toggleModule:(e,o)=>({dispatch:s,select:t,registry:r})=>{const a=t.getModules()[e]?.status;return s({type:"SET_MODULE",slug:e,changes:{status:o?"active":"inactive"}}),x(r,s,()=>({[u]:t.getModuleStatuses()}),()=>{},()=>s({type:"SET_MODULE",slug:e,changes:{status:a}}))},saveModuleSettings:(e,o)=>({dispatch:s,registry:t})=>x(t,s,()=>({[m]:{[e]:o}}),t=>s({type:"SET_MODULE",slug:e,changes:{settings:{...o,...t?.[m]?.[e]}}}),()=>{})},b={getBlocks:()=>async({dispatch:e})=>{try{const o=await c()({path:"/noah-shop-builder/v1/blocks"});e.receiveBlocks(o?.blocks||{})}catch(o){e.receiveLoadError(o?.message||(0,a.__)("Error loading blocks. Please reload the page.","noah-shop-builder-for-woocommerce"))}},getSettings:()=>async({dispatch:e})=>{try{const o=await c()({path:`/wp/v2/settings?_fields=${p}`});e.receiveSettings(o?.[p]||{})}catch(o){e.receiveSettingsLoadError(o?.message||(0,a.__)("Error loading settings. Please reload the page.","noah-shop-builder-for-woocommerce"))}},getModules:()=>async({dispatch:e})=>{try{const o=await c()({path:"/noah-shop-builder/v1/modules"});e.receiveModules(o?.modules||{})}catch(o){e.receiveModulesLoadError(o?.message||(0,a.__)("Error loading modules. Please reload the page.","noah-shop-builder-for-woocommerce"))}}},f=(0,l.createReduxStore)("noah-shop-builder/dashboard",{reducer:function(e=g,o){switch(o.type){case"RECEIVE_BLOCKS":return{...e,blocks:o.blocks,loadError:null};case"RECEIVE_LOAD_ERROR":return{...e,loadError:o.message};case"SET_STATUSES":{const s={...e.blocks};for(const[e,t]of Object.entries(o.statuses))s[e]&&!s[e].required&&(s[e]={...s[e],status:t});return{...e,blocks:s}}case"RECEIVE_MODULES":return{...e,modules:o.modules,modulesLoadError:null};case"RECEIVE_MODULES_LOAD_ERROR":return{...e,modulesLoadError:o.message};case"SET_MODULE":return e.modules[o.slug]?{...e,modules:{...e.modules,[o.slug]:{...e.modules[o.slug],...o.changes}}}:e;case"RECEIVE_SETTINGS":return{...e,settings:{...e.settings,...o.settings},settingsLoadError:null};case"RECEIVE_SETTINGS_LOAD_ERROR":return{...e,settingsLoadError:o.message};case"SAVE_START":return{...e,pendingSaves:e.pendingSaves+1};case"SAVE_END":return{...e,pendingSaves:Math.max(0,e.pendingSaves-1)}}return e},selectors:_,actions:v,resolvers:b});(0,l.register)(f);const j=window.ReactJSXRuntime;function y({badges:e}){return Array.isArray(e)&&0!==e.length?(0,j.jsx)("span",{className:"noah-badges",children:e.map(e=>(0,j.jsx)("span",{className:`badge badge-${e}`,children:e},e))}):null}const S=(0,t.forwardRef)(({icon:e,size:o=24,...s},r)=>(0,t.cloneElement)(e,{width:o,height:o,...s,ref:r})),k=window.wp.primitives,N=(0,j.jsx)(k.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,j.jsx)(k.Path,{d:"M17 10h-1.2V7c0-2.1-1.7-3.8-3.8-3.8-2.1 0-3.8 1.7-3.8 3.8v3H7c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h10c.6 0 1-.4 1-1v-8c0-.6-.4-1-1-1zm-2.8 0H9.8V7c0-1.2 1-2.2 2.2-2.2s2.2 1 2.2 2.2v3z"})}),C={url:"",blocks:[],modules:[],features:{}};function E(){const e=window.noahShopBuilderProCatalog;return e&&"object"==typeof e?{url:e.url||"",blocks:Array.isArray(e.blocks)?e.blocks:[],modules:Array.isArray(e.modules)?e.modules:[],features:e.features&&"object"==typeof e.features?e.features:{}}:C}function V(){return(0,j.jsx)("span",{className:"noah-badges",children:(0,j.jsxs)("span",{className:"badge badge-locked",children:[(0,j.jsx)(S,{icon:N,size:12}),(0,a.__)("Pro","noah-shop-builder-for-woocommerce")]})})}function M({url:e,title:o,label:s,variant:t="button"}){return e?(0,j.jsxs)("a",{className:`noah-upgrade-link is-${t}`,href:e,target:"_blank",rel:"noopener noreferrer",children:[(0,j.jsx)(S,{icon:N,size:16}),s||(0,a.__)("Upgrade","noah-shop-builder-for-woocommerce"),(0,j.jsx)("span",{className:"screen-reader-text",children:(0,a.sprintf)(/* translators: %s: name of a Pro block, module or setting. */ /* translators: %s: name of a Pro block, module or setting. */
     2(0,a.__)("to unlock %s (opens in a new tab)","noah-shop-builder-for-woocommerce"),o)})]}):null}const B={"noah-single":(0,a.__)("Single Product","noah-shop-builder-for-woocommerce"),"noah-archive":(0,a.__)("Shop & Archive","noah-shop-builder-for-woocommerce"),"noah-cart":(0,a.__)("Cart","noah-shop-builder-for-woocommerce"),"noah-checkout":(0,a.__)("Checkout","noah-shop-builder-for-woocommerce"),"noah-account":(0,a.__)("My Account","noah-shop-builder-for-woocommerce"),"noah-modules":(0,a.__)("Modules","noah-shop-builder-for-woocommerce")},L=window.wp.htmlEntities,z=window.wp.hooks,R=(0,j.jsx)(k.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,j.jsx)(k.Path,{d:"M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z"})}),T=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z"})}),A=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M7.1 5.7 8 6.9c.4-.3.9-.6 1.5-.8l-.6-1.4c-.7.3-1.3.6-1.8 1ZM4.6 8.9l1.4.6c.2-.5.5-1 .8-1.5l-1.2-.9c-.4.6-.8 1.2-1 1.8Zm14.8 0c-.3-.7-.6-1.3-1-1.8l-1.2.9c.3.4.6.9.8 1.5l1.4-.6ZM7.1 18.3c.6.4 1.2.8 1.8 1l.6-1.4c-.5-.2-1-.5-1.5-.8l-.9 1.2ZM5.5 12v-.9h-.7l-.7-.2v2l1.5-.2v-.9Zm-.7 3h-.2c.3.7.6 1.3 1 1.9l1.2-.9c-.3-.4-.6-.9-.8-1.5l-1.2.5Zm9.7 3 .5 1.2v.2c.7-.3 1.3-.6 1.9-1l-.9-1.2c-.4.3-.9.6-1.5.8Zm-2.5.5h-.9l-.2 1.3v.2h2l-.2-1.5h-.9Zm7.9-7.5-1.5.2V13h.7l.7.2v-2ZM18 14.5c-.2.5-.5 1-.8 1.5l1.2.9c.4-.6.8-1.2 1-1.8h-.2l-1.2-.6ZM11 4.1l.2 1.5H13V4.2h-1.9ZM14.5 6c.5.2 1 .5 1.5.8l.9-1.2c-.6-.4-1.2-.8-1.8-1L14.5 6Z"})}),D=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2Zm.5 2v6.2h-6.8V4.4h6.2c.3 0 .5.2.5.5ZM5 4.5h6.2v6.8H4.4V5.1c0-.3.2-.5.5-.5ZM4.5 19v-6.2h6.8v6.8H5.1c-.3 0-.5-.2-.5-.5Zm14.5.5h-6.2v-6.8h6.8v6.2c0 .3-.2.5-.5.5Z"})}),P=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M10.5 4v4h3V4H15v4h1.5a1 1 0 011 1v4l-3 4v2a1 1 0 01-1 1h-3a1 1 0 01-1-1v-2l-3-4V9a1 1 0 011-1H9V4h1.5zm.5 12.5v2h2v-2l3-4v-3H8v3l3 4z"})}),H={seen:R,starFilled:T,swatch:A,table:D},O=[{slug:"wishlist",icon:T,title:(0,a.__)("Wishlist","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Shoppers save products from cards and product pages to a wishlist. Works for guests and logged-in customers, with a wishlist page block.","noah-shop-builder-for-woocommerce")},{slug:"variation-swatches",icon:A,title:(0,a.__)("Variation Swatches","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Replace variation dropdowns on product pages with color, image and label swatches that work with the keyboard.","noah-shop-builder-for-woocommerce")}];function Z({common:e,value:o,onChange:s}){const[l,i]=(0,t.useState)(null);(0,t.useEffect)(()=>{let e=!0;return c()({path:(0,r.addQueryArgs)("/wp/v2/pages",{status:"publish",per_page:100,orderby:"title",order:"asc",_fields:"id,title"})}).catch(()=>[]).then(o=>e&&i(o)),()=>{e=!1}},[]);const d=[{value:"0",label:(0,a.__)("— None —","noah-shop-builder-for-woocommerce")},...(l??[]).map(e=>({value:String(e.id),label:e.title?.rendered?(0,L.decodeEntities)(e.title.rendered):(0,a.sprintf)(/* translators: %d: page ID */ /* translators: %d: page ID */
     3(0,a.__)("#%d (no title)","noah-shop-builder-for-woocommerce"),e.id)}))];return(0,j.jsx)(n.SelectControl,{...e,__next40pxDefaultSize:!0,value:String(o||0),options:d,disabled:null===l,onChange:e=>s(parseInt(e,10)||0)})}function G({field:e,value:o,onChange:s}){const t={__nextHasNoMarginBottom:!0,label:e.badge?.length?(0,j.jsxs)(j.Fragment,{children:[e.label," ",(0,j.jsx)(y,{badges:e.badge})]}):e.label,help:e.help};return"page"===e.control&&"integer"===e.type?(0,j.jsx)(Z,{common:t,value:o,onChange:s}):"boolean"===e.type?(0,j.jsx)(n.ToggleControl,{...t,checked:!!o,onChange:s}):e.options?(0,j.jsx)(n.SelectControl,{...t,__next40pxDefaultSize:!0,value:o,options:e.options,onChange:s}):"integer"===e.type?(0,j.jsx)(n.TextControl,{...t,__next40pxDefaultSize:!0,type:"number",min:e.minimum,max:e.maximum,value:o,onChange:e=>s(""===e?"":parseInt(e,10))}):(0,j.jsx)(n.TextControl,{...t,__next40pxDefaultSize:!0,value:o,onChange:s})}function I({module:e,onClose:o}){const[s,r]=(0,t.useState)(e.settings||{}),[i,c]=(0,t.useState)(!1),{saveModuleSettings:d}=(0,l.useDispatch)(f);return(0,j.jsx)(n.Modal,{title:(0,a.sprintf)(/* translators: %s: module name. */ /* translators: %s: module name. */
     4(0,a.__)("%s settings","noah-shop-builder-for-woocommerce"),e.title),onRequestClose:o,className:"noah-module-settings",children:(0,j.jsxs)("form",{onSubmit:async t=>{t.preventDefault(),c(!0);const r=await d(e.slug,s);c(!1),r&&o()},children:[(0,j.jsx)("div",{className:"noah-module-settings__fields",children:e.fields.map(e=>(0,j.jsx)(G,{field:e,value:s[e.key]??e.default,onChange:o=>r({...s,[e.key]:o})},e.key))}),(0,j.jsxs)("div",{className:"noah-module-settings__actions",children:[(0,j.jsx)(n.Button,{variant:"tertiary",onClick:o,children:(0,a.__)("Cancel","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"primary",type:"submit",isBusy:i,disabled:i,children:(0,a.__)("Save","noah-shop-builder-for-woocommerce")})]})]})})}const F=window.wp.coreData,W=(0,j.jsx)(k.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,j.jsx)(k.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M5.5 12a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0ZM12 4a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-.75 12v-1.5h1.5V16h-1.5Zm0-8v5h1.5V8h-1.5Z"})}),U=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"m19 7-3-3-8.5 8.5-1 4 4-1L19 7Zm-7 11.5H5V20h7v-1.5Z"})}),q=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z"})}),Q=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M5 4.5h11a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V5a.5.5 0 0 1 .5-.5ZM3 5a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5Zm17 3v10.75c0 .69-.56 1.25-1.25 1.25H6v1.5h12.75a2.75 2.75 0 0 0 2.75-2.75V8H20Z"})}),$=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 5.5A2.25 2.25 0 0 0 9.878 7h4.244A2.251 2.251 0 0 0 12 5.5ZM12 4a3.751 3.751 0 0 0-3.675 3H5v1.5h1.27l.818 8.997a2.75 2.75 0 0 0 2.739 2.501h4.347a2.75 2.75 0 0 0 2.738-2.5L17.73 8.5H19V7h-3.325A3.751 3.751 0 0 0 12 4Zm4.224 4.5H7.776l.806 8.861a1.25 1.25 0 0 0 1.245 1.137h4.347a1.25 1.25 0 0 0 1.245-1.137l.805-8.861Z"})}),K=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M11 12.5V17.5H12.5V12.5H17.5V11H12.5V6H11V11H6V12.5H11Z"})}),X=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z"})}),J=(0,j.jsxs)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:[(0,j.jsx)(k.Path,{d:"M15.5 7.5h-7V9h7V7.5Zm-7 3.5h7v1.5h-7V11Zm7 3.5h-7V16h7v-1.5Z"}),(0,j.jsx)(k.Path,{d:"M17 4H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2ZM7 5.5h10a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H7a.5.5 0 0 1-.5-.5V6a.5.5 0 0 1 .5-.5Z"})]}),Y=(0,j.jsx)(k.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,j.jsx)(k.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M11.934 7.406a1 1 0 0 0 .914.594H19a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V6a.5.5 0 0 1 .5-.5h5.764a.5.5 0 0 1 .447.276l.723 1.63Zm1.064-1.216a.5.5 0 0 0 .462.31H19a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.764a2 2 0 0 1 1.789 1.106l.445 1.084ZM8.5 10.5h7V12h-7v-1.5Zm7 3.5h-7v1.5h7V14Z"})}),ee=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{fillRule:"evenodd",d:"M19.75 11H21V8.667L19.875 4H4.125L3 8.667V11h1.25v8.75h15.5V11zm-1.5 0H5.75v7.25H10V13h4v5.25h4.25V11zm-5.5-5.5h2.067l.486 3.24.028.76H12.75v-4zm-3.567 0h2.067v4H8.669l.028-.76.486-3.24zm7.615 3.1l-.464-3.1h2.36l.806 3.345V9.5h-2.668l-.034-.9zM7.666 5.5h-2.36L4.5 8.845V9.5h2.668l.034-.9.464-3.1z",clipRule:"evenodd"})}),oe=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M3 6.75C3 5.784 3.784 5 4.75 5H15V7.313l.05.027 5.056 2.73.394.212v3.468a1.75 1.75 0 01-1.75 1.75h-.012a2.5 2.5 0 11-4.975 0H9.737a2.5 2.5 0 11-4.975 0H3V6.75zM13.5 14V6.5H4.75a.25.25 0 00-.25.25V14h.965a2.493 2.493 0 011.785-.75c.7 0 1.332.287 1.785.75H13.5zm4.535 0h.715a.25.25 0 00.25-.25v-2.573l-4-2.16v4.568a2.487 2.487 0 011.25-.335c.7 0 1.332.287 1.785.75zM6.282 15.5a1.002 1.002 0 00.968 1.25 1 1 0 10-.968-1.25zm9 0a1 1 0 101.937.498 1 1 0 00-1.938-.498z"})}),se=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M3 7c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Zm2-.5h14c.3 0 .5.2.5.5v1L12 13.5 4.5 7.9V7c0-.3.2-.5.5-.5Zm-.5 3.3V17c0 .3.2.5.5.5h14c.3 0 .5-.2.5-.5V9.8L12 15.4 4.5 9.8Z"})}),te=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{fillRule:"evenodd",d:"M5.5 9.5v-2h13v2h-13zm0 3v4h13v-4h-13zM4 7a1 1 0 011-1h14a1 1 0 011 1v10a1 1 0 01-1 1H5a1 1 0 01-1-1V7z",clipRule:"evenodd"})}),re=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{fillRule:"evenodd",d:"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z",clipRule:"evenodd"})}),ae=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M15.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm-2.25 6v-2a2.75 2.75 0 00-2.75-2.75h-4A2.75 2.75 0 003.75 15v2h1.5v-2c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25v2h1.5zm7-2v2h-1.5v-2c0-.69-.56-1.25-1.25-1.25H15v-1.5h2.5A2.75 2.75 0 0120.25 15zM9.5 8.5a1 1 0 11-2 0 1 1 0 012 0zm1.5 0a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z",fillRule:"evenodd"})}),ne=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M18 5.5H6a.5.5 0 00-.5.5v3h13V6a.5.5 0 00-.5-.5zm.5 5H10v8h8a.5.5 0 00.5-.5v-7.5zm-10 0h-3V18a.5.5 0 00.5.5h2.5v-8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z"})}),le={single:{icon:J,description:(0,a.__)("The page of one product: gallery, price, add to cart and details.","noah-shop-builder-for-woocommerce")},archive:{icon:Y,description:(0,a.__)("Product category and tag pages.","noah-shop-builder-for-woocommerce")},shop:{icon:ee,description:(0,a.__)("The main shop page that lists your products.","noah-shop-builder-for-woocommerce")},quick_view:{icon:R,description:(0,a.__)("The popup shown when a shopper previews a product from a list.","noah-shop-builder-for-woocommerce")},cart:{icon:oe,description:(0,a.__)("The cart page with the items a shopper is about to buy.","noah-shop-builder-for-woocommerce")},empty_cart:{icon:se,description:(0,a.__)("What shoppers see when their cart is empty.","noah-shop-builder-for-woocommerce")},checkout:{icon:te,description:(0,a.__)("Billing, shipping and payment steps.","noah-shop-builder-for-woocommerce")},order_received:{icon:re,description:(0,a.__)("The thank-you page after an order is placed.","noah-shop-builder-for-woocommerce")},my_account:{icon:ae,description:(0,a.__)("Customer dashboard, orders, addresses and account details.","noah-shop-builder-for-woocommerce")}};function ie(e){return le[e]||{icon:ne,description:""}}const ce=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M20.5 16h-.7V8c0-1.1-.9-2-2-2H6.2c-1.1 0-2 .9-2 2v8h-.7c-.8 0-1.5.7-1.5 1.5h20c0-.8-.7-1.5-1.5-1.5zM5.7 8c0-.3.2-.5.5-.5h11.6c.3 0 .5.2.5.5v7.6H5.7V8z"})}),de=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M17 4H7c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H7c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h10c.3 0 .5.2.5.5v12zm-7.5-.5h4V16h-4v1.5z"})}),he=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M15 4H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H9c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h6c.3 0 .5.2.5.5v12zm-4.5-.5h2V16h-2v1.5z"})}),ue=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"})}),me=[{slug:"desktop",label:(0,a.__)("Desktop","noah-shop-builder-for-woocommerce"),icon:ce,width:"100%"},{slug:"tablet",label:(0,a.__)("Tablet","noah-shop-builder-for-woocommerce"),icon:de,width:"768px"},{slug:"mobile",label:(0,a.__)("Mobile","noah-shop-builder-for-woocommerce"),icon:he,width:"375px"}],pe=function({url:e,title:o,onClose:s,action:r}){const[l,i]=(0,t.useState)("desktop"),[c,d]=(0,t.useState)(!0),h=me.find(e=>e.slug===l).width;return(0,j.jsx)(n.Modal,{className:"noah-preview-modal",title:o,onRequestClose:s,isFullScreen:!0,headerActions:(0,j.jsxs)("div",{className:"noah-preview-modal__actions",children:[(0,j.jsx)("div",{className:"noah-segmented",role:"group","aria-label":(0,a.__)("Preview size","noah-shop-builder-for-woocommerce"),children:me.map(e=>(0,j.jsx)(n.Button,{icon:e.icon,label:e.label,size:"compact","aria-pressed":l===e.slug,className:l===e.slug?"is-selected":"",onClick:()=>i(e.slug)},e.slug))}),(0,j.jsx)(n.Button,{icon:ue,label:(0,a.__)("Open in new tab","noah-shop-builder-for-woocommerce"),href:e,target:"_blank",rel:"noopener noreferrer",size:"compact"}),r]}),children:(0,j.jsxs)("div",{className:"noah-preview-modal__stage",children:[c&&(0,j.jsxs)("div",{className:"noah-preview-modal__loading",children:[(0,j.jsx)(n.Spinner,{}),(0,j.jsx)("p",{children:(0,a.__)("Loading preview…","noah-shop-builder-for-woocommerce")})]}),(0,j.jsx)("iframe",{title:o,src:e,style:{width:h},className:c?"is-loading":"",onLoad:()=>d(!1)})]})})},ge={img:"noah-wireframe__image",head:"noah-wireframe__heading",line:"noah-wireframe__line",accent:"noah-wireframe__accent",box:"noah-wireframe__box",dashed:"noah-wireframe__dashed"},_e=(e,o,s,t,r)=>{const a=(s-5*(r-1))/r;return Array.from({length:r},(s,r)=>["img",e+r*(a+5),o,a,t])},we=(e,o,s,t)=>Array.from({length:t},(t,r)=>["box",e,o+11*r,s,7]),xe={blank:[["dashed",8,8,144,84]],split:[["img",10,10,66,80],["head",86,14,56,7],["line",86,27,30,4],["line",86,37,22,4],["line",86,48,64,4],["line",86,56,58,4],["accent",86,68,40,10]],feature:[["img",10,10,84,62],["head",102,12,48,7],["line",102,25,26,4],["line",102,35,20,4],["line",102,45,48,4],["accent",102,45,30,4],["accent",102,56,48,10],..._e(10,78,140,14,4)],stacked:[["img",50,8,60,44],["head",56,58,48,6],["line",66,69,28,4],["line",58,77,44,4],["accent",58,84,44,9]],grid:[["line",10,8,40,3],["head",10,15,60,7],["line",10,27,30,4],["box",120,25,30,7],..._e(10,38,140,24,3),..._e(10,66,140,24,3)],hero:[["head",50,10,60,8],["line",40,23,80,4],["line",30,32,100,4],["line",50,39,60,4],..._e(10,50,140,19,4),..._e(10,73,140,19,4)],sidebar:[["head",10,10,30,6],["line",10,22,28,4],["line",10,30,24,4],["line",10,38,30,4],["line",10,46,22,4],["head",50,10,50,7],..._e(50,24,100,30,3),..._e(50,58,100,30,3)],cart:[["head",10,10,50,8],["img",10,26,14,14],["line",30,30,50,4],["img",10,46,14,14],["line",30,50,44,4],["img",10,66,14,14],["line",30,70,54,4],["box",104,26,46,50],["line",110,34,34,4],["line",110,44,28,4],["accent",110,60,34,9]],"cart-trust":[["head",55,6,50,7],..._e(10,18,140,12,3),["img",10,38,12,12],["line",27,42,50,4],["img",10,56,12,12],["line",27,60,44,4],["box",104,38,46,46],["line",110,46,34,4],["accent",110,70,34,8]],message:[["head",35,8,90,8],["line",45,21,70,4],["accent",62,31,36,9],["line",72,47,16,3],["head",60,55,40,5],..._e(10,65,140,26,4)],"message-split":[["head",10,30,46,8],["line",10,43,40,4],["line",10,51,34,4],["accent",10,61,34,9],..._e(66,10,84,38,2),..._e(66,52,84,38,2)],checkout:[["head",10,8,40,7],...we(10,22,84,5),["accent",10,80,84,10],["box",104,22,46,58],["img",110,28,10,10],["line",124,31,20,4],["line",110,46,34,4],["line",110,56,28,4]],"checkout-trust":[["head",50,5,60,6],["line",45,14,70,3],...we(35,21,90,4),["box",35,64,90,14],["accent",35,81,90,6],["line",35,92,40,3],["line",85,92,40,3]],order:[["head",10,8,80,8],["box",10,22,140,12],["head",10,40,30,5],["line",10,50,140,4],["line",10,58,140,4],["box",10,68,66,24],["box",84,68,66,24]],thanks:[["accent",72,8,16,16],["head",50,30,60,8],["line",40,43,80,4],["box",35,53,90,22],["accent",60,82,40,9]],account:[["head",10,8,50,8],["line",10,26,30,4],["line",10,34,26,4],["line",10,42,30,4],["line",10,50,22,4],["line",10,58,28,4],["line",50,26,100,4],["line",50,34,90,4],["box",50,46,100,40]],"account-help":[["head",10,8,50,8],["line",10,26,22,4],["line",10,34,18,4],["line",10,42,22,4],["box",38,24,66,62],["box",112,24,38,44],["head",117,30,26,5],["line",117,40,28,3],["accent",117,54,28,8]]},ve=[["head",10,12,70,8],["line",10,28,140,4],["line",10,36,132,4],["line",10,44,120,4],["img",10,56,140,34]],be=function({layout:e}){const o=xe[e]||ve;return(0,j.jsxs)("svg",{className:"noah-wireframe",viewBox:"0 0 160 100","aria-hidden":"true",focusable:"false",children:[o.map(([e,o,s,t,r],a)=>(0,j.jsx)("rect",{className:ge[e],x:o,y:s,width:t,height:r,rx:"line"===e?2:3},a)),"blank"===e&&(0,j.jsx)("path",{className:"noah-wireframe__accent-stroke",d:"M80 40v20M70 50h20"})]})},fe="noah_template",je="_noah_template_type",ye="_noah_conditions",Se="publish";function ke(e){return e.meta?.[je]||"single"}function Ne(e){const o=e.meta?.[ye];return Array.isArray(o)?o:[]}function Ce(e){return e.status===Se}function Ee(e){return e.title?.raw??e.title?.rendered??""}function Ve(e){const o=e.filter(e=>"exclude"!==e.type),s=e.length-o.length;return 0===o.length?{kind:"none",include:0,exclude:s}:0===s&&1===o.length&&"all"===o[0].rule?{kind:"all",include:1,exclude:0}:{kind:"custom",include:o.length,exclude:s}}function Me(e){return e.map(e=>["exclude"===e.type?"exclude":"include",e.rule,[...e.ids||[]].sort((e,o)=>e-o).join(","),[...e.slugs||[]].sort().join(",")].join(":")).sort().join("|")}const Be="blank";function Le({label:e,value:o,options:s,onChange:t}){return(0,j.jsxs)("fieldset",{className:"noah-templates-modal__field",children:[(0,j.jsx)("legend",{children:e}),(0,j.jsx)("div",{className:"noah-option-cards",role:"radiogroup",children:s.map(e=>(0,j.jsxs)("button",{type:"button",role:"radio","aria-checked":o===e.value,className:"noah-option-card "+(o===e.value?"is-selected":""),onClick:()=>t(e.value),children:[(0,j.jsx)("span",{className:"noah-option-card__radio"}),(0,j.jsxs)("span",{children:[(0,j.jsx)("strong",{children:e.title}),(0,j.jsx)("span",{children:e.description})]})]},e.value))})]})}function ze({type:e,onSelect:o}){const[s,r]=(0,t.useState)(null),l=[{slug:Be,title:(0,a.__)("Blank","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Start from an empty canvas and add Noah blocks yourself.","noah-shop-builder-for-woocommerce"),layout:"blank",content:""},...e.starters];return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("div",{className:"noah-design-grid",children:l.map(e=>(0,j.jsxs)("div",{className:"noah-design-card",children:[(0,j.jsxs)("button",{type:"button",className:"noah-design-card__select",onClick:()=>o(e),children:[(0,j.jsx)("span",{className:"noah-design-card__preview",children:(0,j.jsx)(be,{layout:e.layout})}),(0,j.jsxs)("span",{className:"noah-design-card__body",children:[(0,j.jsxs)("strong",{children:[e.title," ",(0,j.jsx)(y,{badges:e.badge})]}),e.description&&(0,j.jsx)("span",{children:e.description}),e.blocks&&(0,j.jsx)("span",{className:`noah-design-card__blocks is-${e.blocks}`,children:"noah"===e.blocks?(0,a.__)("Noah blocks","noah-shop-builder-for-woocommerce"):(0,a.__)("WooCommerce blocks","noah-shop-builder-for-woocommerce")})]})]}),e.preview_url&&(0,j.jsx)(n.Button,{className:"noah-design-card__preview-button",variant:"secondary",size:"compact",icon:R,onClick:()=>r(e),children:(0,a.__)("Preview","noah-shop-builder-for-woocommerce")})]},e.slug))}),s&&(0,j.jsx)(pe,{url:s.preview_url,title:s.title,onClose:()=>r(null),action:(0,j.jsx)(n.Button,{variant:"primary",size:"compact",onClick:()=>o(s),children:(0,a.__)("Use this design","noah-shop-builder-for-woocommerce")})})]})}const Re=function({types:e,onClose:o}){const[s,i]=(0,t.useState)(null),[c,d]=(0,t.useState)(null),[h,u]=(0,t.useState)(""),[m,p]=(0,t.useState)("all"),[g,_]=(0,t.useState)(Se),[w,x]=(0,t.useState)(!1),[v,b]=(0,t.useState)(null),{saveEntityRecord:f}=(0,l.useDispatch)(F.store),y=e=>e?.starters?.length>0,S=()=>{y(s)&&c||i(null),d(null)};let k=1;s&&(k=c?3:2);const N=y(s)||!s?[1,2,3]:[1,3],C={1:(0,a.__)("What do you want to design?","noah-shop-builder-for-woocommerce"),2:(0,a.__)("Choose a starting design","noah-shop-builder-for-woocommerce"),3:(0,a.__)("Set up your template","noah-shop-builder-for-woocommerce")};return(0,j.jsxs)(n.Modal,{className:"noah-templates-modal",title:C[k],onRequestClose:w?()=>{}:o,size:"large",children:[(0,j.jsx)("div",{className:"noah-templates-modal__steps","aria-hidden":"true",children:N.map(e=>(0,j.jsx)("span",{className:k>=e?"is-active":""},e))}),2===k&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)("div",{className:"noah-templates-modal__subheader",children:[(0,j.jsx)(n.Button,{variant:"tertiary",icon:X,onClick:S,children:(0,a.__)("Back","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{className:"noah-templates-modal__intro",children:(0,a.sprintf)(/* translators: %s: template type, e.g. "Single Product". */ /* translators: %s: template type, e.g. "Single Product". */
     5(0,a.__)("Pick a ready-made %s layout or start blank. Preview any design on your store first; you can change everything in the editor.","noah-shop-builder-for-woocommerce"),s.label)})]}),(0,j.jsx)(ze,{type:s,onSelect:d})]}),1===k&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("p",{className:"noah-templates-modal__intro",children:(0,a.__)("Choose the store page this template replaces.","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("div",{className:"noah-type-grid",children:e.map(e=>{const o=ie(e.slug);return(0,j.jsxs)("button",{type:"button",className:"noah-type-card",onClick:()=>{return i(o=e),d(y(o)?null:{slug:Be,content:""}),void u((0,a.sprintf)(/* translators: %s: template type, e.g. "Single Product". */ /* translators: %s: template type, e.g. "Single Product". */
    56(0,a.__)("%s Template","noah-shop-builder-for-woocommerce"),o.label));var o},children:[(0,j.jsx)("span",{className:"noah-type-card__icon",children:(0,j.jsx)(n.Icon,{icon:o.icon,size:28})}),(0,j.jsx)("strong",{children:e.label}),o.description&&(0,j.jsx)("span",{className:"noah-type-card__description",children:o.description}),y(e)&&(0,j.jsx)("span",{className:"noah-type-card__starters",children:(0,a.sprintf)(/* translators: %d: number of starter designs. */ /* translators: %d: number of starter designs. */
    6 (0,a._n)("%d starter design","%d starter designs",e.starters.length,"noah-shop-builder-for-woocommerce"),e.starters.length)})]},e.slug)})})]}),3===k&&(0,j.jsxs)("form",{onSubmit:async e=>{e.preventDefault(),v(!0),b(null);try{const e=await f("postType",ge,{title:h.trim()||s.label,content:c.content,status:g,meta:{[_e]:s.slug,[we]:"all"===u?[{type:"include",rule:"all",ids:[]}]:[]}},{throwOnError:!0});window.location.href=(0,r.addQueryArgs)("post.php",{post:e.id,action:"edit"})}catch(e){b(e?.message||(0,a.__)("The template could not be created.","noah-shop-builder-for-woocommerce")),v(!1)}},className:"noah-templates-modal__form",children:[(0,j.jsxs)("div",{className:"noah-selected-type",children:[(0,j.jsx)("span",{className:"noah-type-card__icon",children:(0,j.jsx)(n.Icon,{icon:se(s.slug).icon,size:24})}),(0,j.jsxs)("div",{children:[(0,j.jsx)("strong",{children:s.label}),(0,j.jsx)("span",{children:c.slug===ke?(0,a.__)("Blank design","noah-shop-builder-for-woocommerce"):(0,a.sprintf)(/* translators: %s: starter design name. */ /* translators: %s: starter design name. */
    7 (0,a.__)("Starting design: %s","noah-shop-builder-for-woocommerce"),c.title)})]})]}),x&&(0,j.jsx)(n.Notice,{status:"error",isDismissible:!1,children:x}),(0,j.jsx)(n.TextControl,{__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,label:(0,a.__)("Template name","noah-shop-builder-for-woocommerce"),help:(0,a.__)("Only you see this name. It helps you find the template later.","noah-shop-builder-for-woocommerce"),value:h,onChange:m,autoFocus:!0}),(0,j.jsx)(Ne,{label:(0,a.__)("Where should it show?","noah-shop-builder-for-woocommerce"),value:u,onChange:p,options:[{value:"all",title:(0,a.__)("Entire store","noah-shop-builder-for-woocommerce"),description:(0,a.sprintf)(/* translators: %s: template type, e.g. "Single Product". */ /* translators: %s: template type, e.g. "Single Product". */
    8 (0,a.__)("Use it on every %s page.","noah-shop-builder-for-woocommerce"),s.label)},{value:"none",title:(0,a.__)("Not yet","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Save it without display rules and choose pages later.","noah-shop-builder-for-woocommerce")}]}),(0,j.jsx)(Ne,{label:(0,a.__)("Status","noah-shop-builder-for-woocommerce"),value:g,onChange:_,options:[{value:ve,title:(0,a.__)("Active","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Live on your store as soon as it matches a page.","noah-shop-builder-for-woocommerce")},{value:"draft",title:(0,a.__)("Inactive","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Hidden from shoppers. Turn it on when it’s ready.","noah-shop-builder-for-woocommerce")}]}),(0,j.jsxs)("div",{className:"noah-templates-modal__footer has-back",children:[(0,j.jsx)(n.Button,{variant:"tertiary",icon:W,onClick:S,disabled:w,children:(0,a.__)("Back","noah-shop-builder-for-woocommerce")}),(0,j.jsxs)("div",{className:"noah-templates-modal__footer-end",children:[(0,j.jsx)(n.Button,{variant:"tertiary",onClick:o,disabled:w,children:(0,a.__)("Cancel","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"primary",type:"submit",isBusy:w,disabled:w,children:(0,a.__)("Create and edit","noah-shop-builder-for-woocommerce")})]})]})]})]})},Ve={per_page:-1,status:[ve,"draft"].join(","),context:"edit",orderby:"modified",order:"desc"},Me={all:(0,a.__)("All","noah-shop-builder-for-woocommerce"),active:(0,a.__)("Active","noah-shop-builder-for-woocommerce"),inactive:(0,a.__)("Inactive","noah-shop-builder-for-woocommerce")},Be=e=>(0,r.addQueryArgs)("post.php",{post:e,action:"edit"});function Le(e){if("none"===e.kind)return(0,a.__)("Not shown anywhere","noah-shop-builder-for-woocommerce");if("all"===e.kind)return(0,a.__)("Entire store","noah-shop-builder-for-woocommerce");const o=(0,a.sprintf)(/* translators: %d: number of include rules. */ /* translators: %d: number of include rules. */
     7(0,a._n)("%d starter design","%d starter designs",e.starters.length,"noah-shop-builder-for-woocommerce"),e.starters.length)})]},e.slug)})})]}),3===k&&(0,j.jsxs)("form",{onSubmit:async e=>{e.preventDefault(),x(!0),b(null);try{const e=await f("postType",fe,{title:h.trim()||s.label,content:c.content,status:g,meta:{[je]:s.slug,[ye]:"all"===m?[{type:"include",rule:"all",ids:[]}]:[]}},{throwOnError:!0});window.location.href=(0,r.addQueryArgs)("post.php",{post:e.id,action:"edit"})}catch(e){b(e?.message||(0,a.__)("The template could not be created.","noah-shop-builder-for-woocommerce")),x(!1)}},className:"noah-templates-modal__form",children:[(0,j.jsxs)("div",{className:"noah-selected-type",children:[(0,j.jsx)("span",{className:"noah-type-card__icon",children:(0,j.jsx)(n.Icon,{icon:ie(s.slug).icon,size:24})}),(0,j.jsxs)("div",{children:[(0,j.jsx)("strong",{children:s.label}),(0,j.jsx)("span",{children:c.slug===Be?(0,a.__)("Blank design","noah-shop-builder-for-woocommerce"):(0,a.sprintf)(/* translators: %s: starter design name. */ /* translators: %s: starter design name. */
     8(0,a.__)("Starting design: %s","noah-shop-builder-for-woocommerce"),c.title)})]})]}),v&&(0,j.jsx)(n.Notice,{status:"error",isDismissible:!1,children:v}),(0,j.jsx)(n.TextControl,{__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,label:(0,a.__)("Template name","noah-shop-builder-for-woocommerce"),help:(0,a.__)("Only you see this name. It helps you find the template later.","noah-shop-builder-for-woocommerce"),value:h,onChange:u,autoFocus:!0}),(0,j.jsx)(Le,{label:(0,a.__)("Where should it show?","noah-shop-builder-for-woocommerce"),value:m,onChange:p,options:[{value:"all",title:(0,a.__)("Entire store","noah-shop-builder-for-woocommerce"),description:(0,a.sprintf)(/* translators: %s: template type, e.g. "Single Product". */ /* translators: %s: template type, e.g. "Single Product". */
     9(0,a.__)("Use it on every %s page.","noah-shop-builder-for-woocommerce"),s.label)},{value:"none",title:(0,a.__)("Not yet","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Save it without display rules and choose pages later.","noah-shop-builder-for-woocommerce")}]}),(0,j.jsx)(Le,{label:(0,a.__)("Status","noah-shop-builder-for-woocommerce"),value:g,onChange:_,options:[{value:Se,title:(0,a.__)("Active","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Live on your store as soon as it matches a page.","noah-shop-builder-for-woocommerce")},{value:"draft",title:(0,a.__)("Inactive","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Hidden from shoppers. Turn it on when it’s ready.","noah-shop-builder-for-woocommerce")}]}),(0,j.jsxs)("div",{className:"noah-templates-modal__footer has-back",children:[(0,j.jsx)(n.Button,{variant:"tertiary",icon:X,onClick:S,disabled:w,children:(0,a.__)("Back","noah-shop-builder-for-woocommerce")}),(0,j.jsxs)("div",{className:"noah-templates-modal__footer-end",children:[(0,j.jsx)(n.Button,{variant:"tertiary",onClick:o,disabled:w,children:(0,a.__)("Cancel","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"primary",type:"submit",isBusy:w,disabled:w,children:(0,a.__)("Create and edit","noah-shop-builder-for-woocommerce")})]})]})]})]})},Te={per_page:-1,status:[Se,"draft"].join(","),context:"edit",orderby:"modified",order:"desc"},Ae={all:(0,a.__)("All","noah-shop-builder-for-woocommerce"),active:(0,a.__)("Active","noah-shop-builder-for-woocommerce"),inactive:(0,a.__)("Inactive","noah-shop-builder-for-woocommerce")},De=e=>(0,r.addQueryArgs)("post.php",{post:e,action:"edit"});function Pe(e){if("none"===e.kind)return(0,a.__)("Not shown anywhere","noah-shop-builder-for-woocommerce");if("all"===e.kind)return(0,a.__)("Entire store","noah-shop-builder-for-woocommerce");const o=(0,a.sprintf)(/* translators: %d: number of include rules. */ /* translators: %d: number of include rules. */
    910(0,a._n)("%d rule","%d rules",e.include,"noah-shop-builder-for-woocommerce"),e.include);return e.exclude?(0,a.sprintf)(/* translators: 1: e.g. "2 rules", 2: number of exclusions. */ /* translators: 1: e.g. "2 rules", 2: number of exclusions. */
    10 (0,a._n)("%1$s, %2$d exclusion","%1$s, %2$d exclusions",e.exclude,"noah-shop-builder-for-woocommerce"),o,e.exclude):o}function ze(e){const o=new Date(e);return Number.isNaN(o.getTime())?"":o.toLocaleDateString(document.documentElement.lang||void 0,{dateStyle:"medium"})}function Re({types:e,list:o,value:s,onChange:t}){const r=o.reduce((e,o)=>{const s=xe(o);return e[s]=(e[s]||0)+1,e},{}),n=[{slug:"all",label:(0,a.__)("All templates","noah-shop-builder-for-woocommerce"),count:o.length},...e.filter(e=>r[e.slug]).map(e=>({...e,count:r[e.slug]}))];return(0,j.jsx)("div",{className:"noah-type-filter",role:"tablist","aria-label":(0,a.__)("Template type","noah-shop-builder-for-woocommerce"),children:n.map(e=>(0,j.jsxs)("button",{type:"button",role:"tab","aria-selected":s===e.slug,className:s===e.slug?"is-selected":"",onClick:()=>t(e.slug),children:[e.label,(0,j.jsx)("span",{className:"noah-type-filter__count",children:e.count})]},e.slug))})}function Te({template:e,typeLabel:o,conflicts:s,active:t,isBusy:r,onToggle:l,onPreview:i,onDuplicate:c,onDelete:d,refresh:h}){const m=(0,N.applyFilters)("noahShopBuilder.templates.rowActions",[],{template:e,refresh:h}),u=xe(e),p=ye(be(e)),g=je(e)||(0,a.__)("(no title)","noah-shop-builder-for-woocommerce"),_=`noah-template-status-${e.id}`;return(0,j.jsxs)("div",{className:"noah-template-row "+(t?"":"is-inactive"),role:"row",children:[(0,j.jsxs)("div",{className:"noah-template-row__main",role:"cell",children:[(0,j.jsx)("span",{className:"noah-template-row__icon",children:(0,j.jsx)(n.Icon,{icon:se(u).icon,size:22})}),(0,j.jsxs)("div",{children:[(0,j.jsx)("a",{className:"noah-template-row__title",href:Be(e.id),children:g}),(0,j.jsxs)("div",{className:"noah-template-row__meta",children:[(0,j.jsx)("span",{className:"noah-pill",children:o}),(0,j.jsx)("span",{children:(0,a.sprintf)(/* translators: %s: date. */ /* translators: %s: date. */
    11 (0,a.__)("Edited %s","noah-shop-builder-for-woocommerce"),ze(e.modified))})]})]})]}),(0,j.jsxs)("div",{className:"noah-template-row__display",role:"cell",children:[(0,j.jsx)("span",{className:`noah-display noah-display--${p.kind}`,children:Le(p)}),t&&s.length>0&&(0,j.jsx)(n.Tooltip,{text:(0,a.sprintf)(/* translators: %s: comma-separated template names. */ /* translators: %s: comma-separated template names. */
    12 (0,a.__)("Same pages and priority as %s. Only the most recently edited one is used.","noah-shop-builder-for-woocommerce"),s.join(", ")),children:(0,j.jsxs)("span",{className:"noah-badge noah-badge--warning",tabIndex:0,children:[(0,j.jsx)(n.Icon,{icon:P,size:16}),(0,a.__)("Conflict","noah-shop-builder-for-woocommerce")]})})]}),(0,j.jsxs)("div",{className:"noah-template-row__status",role:"cell",children:[(0,j.jsx)(n.FormToggle,{id:_,checked:t,disabled:r,onChange:()=>l(!t)}),(0,j.jsx)("label",{htmlFor:_,children:t?(0,a.__)("Active","noah-shop-builder-for-woocommerce"):(0,a.__)("Inactive","noah-shop-builder-for-woocommerce")})]}),(0,j.jsxs)("div",{className:"noah-template-row__actions",role:"cell",children:[(0,j.jsx)(n.Button,{variant:"secondary",size:"compact",icon:O,href:Be(e.id),children:(0,a.__)("Edit","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.DropdownMenu,{icon:Z,label:(0,a.__)("More actions","noah-shop-builder-for-woocommerce"),toggleProps:{size:"compact",disabled:r},popoverProps:{placement:"bottom-end"},children:({onClose:o})=>(0,j.jsxs)(n.MenuGroup,{children:[e.noah_preview_url&&(0,j.jsx)(n.MenuItem,{icon:E,onClick:()=>{o(),i()},children:(0,a.__)("Preview","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.MenuItem,{icon:G,onClick:()=>{o(),c()},children:(0,a.__)("Duplicate","noah-shop-builder-for-woocommerce")}),m.map(s=>(0,j.jsx)(n.MenuItem,{icon:s.icon,onClick:()=>{o(),s.onClick(e)},children:s.label},s.key)),(0,j.jsx)(n.MenuItem,{icon:I,isDestructive:!0,onClick:()=>{o(),d()},children:(0,a.__)("Delete","noah-shop-builder-for-woocommerce")})]})})]})]})}function Ae({onCreate:e}){const o=[{title:(0,a.__)("Pick a page","noah-shop-builder-for-woocommerce"),text:(0,a.__)("Product, shop, cart, checkout and more.","noah-shop-builder-for-woocommerce")},{title:(0,a.__)("Design it with blocks","noah-shop-builder-for-woocommerce"),text:(0,a.__)("Drag in Noah blocks in the editor you know.","noah-shop-builder-for-woocommerce")},{title:(0,a.__)("Turn it on","noah-shop-builder-for-woocommerce"),text:(0,a.__)("Active templates replace the WooCommerce page.","noah-shop-builder-for-woocommerce")}];return(0,j.jsxs)("div",{className:"noah-templates-empty",children:[(0,j.jsx)("h2",{children:(0,a.__)("Design your first store template","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Templates let you redesign WooCommerce pages without touching your theme.","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("ol",{className:"noah-templates-empty__steps",children:o.map((e,o)=>(0,j.jsxs)("li",{children:[(0,j.jsx)("span",{className:"noah-templates-empty__number",children:o+1}),(0,j.jsx)("strong",{children:e.title}),(0,j.jsx)("span",{children:e.text})]},e.title))}),(0,j.jsx)(n.Button,{variant:"primary",icon:F,onClick:e,__next40pxDefaultSize:!0,children:(0,a.__)("Create template","noah-shop-builder-for-woocommerce")})]})}const De=[{slug:"single_product",icon:q,title:(0,a.__)("Single Product","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Design product pages with title, gallery, price, add to cart, tabs, reviews, related products and more.","noah-shop-builder-for-woocommerce")},{slug:"archive",icon:U,title:(0,a.__)("Shop & Archive","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Build the shop page, category and tag archives and search results with product grids, filters, sorting and pagination.","noah-shop-builder-for-woocommerce")},{slug:"cart",icon:Q,title:(0,a.__)("Cart & Empty Cart","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Lay out the cart page, and a separate page for when the cart is empty.","noah-shop-builder-for-woocommerce")},{slug:"checkout",icon:X,title:(0,a.__)("Checkout","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Arrange billing, shipping, order review and payment your way, while WooCommerce still runs the checkout.","noah-shop-builder-for-woocommerce")},{slug:"quick_view",icon:E,title:(0,a.__)("Quick View","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Design the popup that opens from the “Quick view” button on product cards.","noah-shop-builder-for-woocommerce")}],He=[{title:(0,a.__)("Create a template","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Pick a template type and start from a ready-made starter design or a blank page.","noah-shop-builder-for-woocommerce")},{title:(0,a.__)("Design it with blocks","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Arrange Noah blocks in the block editor and preview the result with a real product.","noah-shop-builder-for-woocommerce")},{title:(0,a.__)("Choose where it shows","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Show the template on all pages of its type, or only on chosen products and categories, then publish.","noah-shop-builder-for-woocommerce")}],Pe=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"M12 4L4 7.9V20h16V7.9L12 4zm6.5 14.5H14V13h-4v5.5H5.5V8.8L12 5.7l6.5 3.1v9.7z"})}),Oe=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{d:"m3 5c0-1.10457.89543-2 2-2h13.5c1.1046 0 2 .89543 2 2v13.5c0 1.1046-.8954 2-2 2h-13.5c-1.10457 0-2-.8954-2-2zm2-.5h6v6.5h-6.5v-6c0-.27614.22386-.5.5-.5zm-.5 8v6c0 .2761.22386.5.5.5h6v-6.5zm8 0v6.5h6c.2761 0 .5-.2239.5-.5v-6zm0-8v6.5h6.5v-6c0-.27614-.2239-.5-.5-.5z",fillRule:"evenodd",clipRule:"evenodd"})}),Ze=(0,j.jsxs)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:[(0,j.jsx)(C.Path,{d:"M14.5 5.5h-7V7h7V5.5ZM7.5 9h7v1.5h-7V9Zm7 3.5h-7V14h7v-1.5Z"}),(0,j.jsx)(C.Path,{d:"M16 2H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2ZM6 3.5h10a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H6a.5.5 0 0 1-.5-.5V4a.5.5 0 0 1 .5-.5Z"}),(0,j.jsx)(C.Path,{d:"M20 8v11c0 .69-.31 1-.999 1H6v1.5h13.001c1.52 0 2.499-.982 2.499-2.5V8H20Z"})]}),Ge=(0,j.jsx)(C.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(C.Path,{fillRule:"evenodd",d:"M10.289 4.836A1 1 0 0111.275 4h1.306a1 1 0 01.987.836l.244 1.466c.787.26 1.503.679 2.108 1.218l1.393-.522a1 1 0 011.216.437l.653 1.13a1 1 0 01-.23 1.273l-1.148.944a6.025 6.025 0 010 2.435l1.149.946a1 1 0 01.23 1.272l-.653 1.13a1 1 0 01-1.216.437l-1.394-.522c-.605.54-1.32.958-2.108 1.218l-.244 1.466a1 1 0 01-.987.836h-1.306a1 1 0 01-.986-.836l-.244-1.466a5.995 5.995 0 01-2.108-1.218l-1.394.522a1 1 0 01-1.217-.436l-.653-1.131a1 1 0 01.23-1.272l1.149-.946a6.026 6.026 0 010-2.435l-1.148-.944a1 1 0 01-.23-1.272l.653-1.131a1 1 0 011.217-.437l1.393.522a5.994 5.994 0 012.108-1.218l.244-1.466zM14.929 12a3 3 0 11-6 0 3 3 0 016 0z",clipRule:"evenodd"})});function Ie(e,o){const s=window.getComputedStyle(o);if("rtl"!==s.direction)return e.offsetLeft-o.offsetLeft;const t=o.offsetParent.clientWidth-parseFloat(s.right||0);return e.offsetLeft+e.offsetWidth-t}const Fe={welcome:{label:(0,a.__)("Welcome","noah-shop-builder-for-woocommerce"),icon:Pe},block:{label:(0,a.__)("Blocks","noah-shop-builder-for-woocommerce"),icon:Oe},module:{label:(0,a.__)("Modules","noah-shop-builder-for-woocommerce"),icon:ee},templates:{label:(0,a.__)("Templates","noah-shop-builder-for-woocommerce"),icon:Ze},settings:{label:(0,a.__)("Settings","noah-shop-builder-for-woocommerce"),icon:Ge}},We=function({links:e,currentPage:o,setCurrentPage:s}){const[r,a]=(0,t.useState)({left:0,width:0}),l=(0,t.useRef)(null),i=(0,t.useRef)(null),c=(0,t.useRef)({}),d=Object.keys(e).map(e=>({page:e,label:Fe[e]?.label||e,icon:Fe[e]?.icon}));return(0,t.useEffect)(()=>{const e=l.current,s=()=>{const e=c.current[o],s=i.current;e&&s&&a({left:Ie(e,s),width:e.offsetWidth})};if(s(),!e||void 0===window.ResizeObserver)return;const t=new window.ResizeObserver(s);t.observe(e);for(const e of Object.values(c.current))e&&t.observe(e);return()=>t.disconnect()},[o]),(0,j.jsx)("header",{className:"noah-shop-builder-dashboard-header",children:(0,j.jsx)("div",{className:"noah-shop-builder-header-container",children:(0,j.jsxs)("nav",{className:"noah-shop-builder-dashboard-nav",ref:l,children:[(0,j.jsx)("div",{className:"nav-indicator",ref:i,style:{transform:`translateX(${r.left}px)`,width:`${r.width}px`}}),d.map(e=>(0,j.jsxs)("button",{ref:o=>c.current[e.page]=o,className:"nav-button "+(o===e.page?"active":""),onClick:o=>{o.preventDefault(),s(e.page)},type:"button",children:[e.icon&&(0,j.jsx)(n.Icon,{icon:e.icon,size:20}),(0,j.jsx)("span",{children:e.label})]},e.page))]})})})},qe=function(){const e=(0,l.useSelect)(e=>e(d.store).getNotices(),[]),{removeNotice:o}=(0,l.useDispatch)(d.store);return(0,j.jsx)(n.SnackbarList,{className:"noah-shop-builder-snackbars",notices:e.filter(e=>"snackbar"===e.type),onRemove:o})},Ue={welcome:function({onPageChange:e}){return(0,j.jsxs)("div",{className:"noah-shop-builder-welcome",children:[(0,j.jsxs)("div",{className:"section welcome-hero",children:[(0,j.jsx)("h1",{children:(0,a.__)("Welcome to Noah Shop Builder","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Design your WooCommerce product pages, shop, archives, cart and checkout in the block editor. No coding needed, and your theme stays in charge of the rest of the site.","noah-shop-builder-for-woocommerce")}),(0,j.jsxs)("div",{className:"button-group",children:[(0,j.jsx)(n.Button,{variant:"primary",onClick:()=>e("templates",{new:1}),children:(0,a.__)("Create a template","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"secondary",onClick:()=>e("templates"),children:(0,a.__)("View templates","noah-shop-builder-for-woocommerce")})]})]}),(0,j.jsxs)("div",{className:"section",children:[(0,j.jsx)("h2",{children:(0,a.__)("Get started","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("ol",{className:"welcome-steps",children:He.map(e=>(0,j.jsxs)("li",{children:[(0,j.jsx)("h3",{children:e.title}),(0,j.jsx)("p",{children:e.description})]},e.title))})]}),(0,j.jsxs)("div",{className:"section",children:[(0,j.jsx)("h2",{children:(0,a.__)("What you can build","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("div",{className:"welcome-cards",children:De.map(e=>(0,j.jsxs)("div",{className:"welcome-card",children:[(0,j.jsx)("span",{className:"welcome-card-icon",children:(0,j.jsx)(n.Icon,{icon:e.icon,size:24})}),(0,j.jsx)("h3",{children:e.title}),(0,j.jsx)("p",{children:e.description})]},e.slug))})]}),(0,j.jsxs)("div",{className:"welcome-columns",children:[(0,j.jsxs)("div",{className:"section",children:[(0,j.jsx)("h2",{children:(0,a.__)("Blocks","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Turn off the blocks you don’t use to keep the inserter tidy. Turned-off blocks load nothing on your store.","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"secondary",onClick:()=>e("block"),children:(0,a.__)("Manage blocks","noah-shop-builder-for-woocommerce")})]}),(0,j.jsxs)("div",{className:"section",children:[(0,j.jsx)("h2",{children:(0,a.__)("Modules","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Add Quick View, a wishlist and variation swatches to your store. Each module stays off until you turn it on, and has its own settings.","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"secondary",onClick:()=>e("module"),children:(0,a.__)("Manage modules","noah-shop-builder-for-woocommerce")})]}),(0,j.jsxs)("div",{className:"section",children:[(0,j.jsx)("h2",{children:(0,a.__)("Coming next","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Templates for the My Account and order received pages.","noah-shop-builder-for-woocommerce")})]})]})]})},block:function(){const{blocks:e,loadError:o,isLoaded:s}=(0,l.useSelect)(e=>{const o=e(f);return{blocks:o.getBlocks(),loadError:o.getLoadError(),isLoaded:o.hasFinishedResolution("getBlocks")}},[]),{toggleBlock:r,setAllBlocks:i}=(0,l.useDispatch)(f);if(!s)return(0,j.jsx)("div",{className:"section",children:(0,j.jsxs)("div",{style:{textAlign:"center",padding:"50px"},children:[(0,j.jsx)(n.Spinner,{}),(0,j.jsx)("p",{children:(0,a.__)("Loading blocks…","noah-shop-builder-for-woocommerce")})]})});const c=Object.values(e).filter(e=>!e.required),d=c.length>0&&c.every(e=>"active"===e.status),h=Object.values(e).reduce((e,o)=>{const s=o.category?.[0]||"other";return e[s]||(e[s]=[]),e[s].push(o),e},{});return(0,j.jsx)(t.Fragment,{children:(0,j.jsxs)("div",{className:"section noah-shop-builder-blocks",children:[o&&(0,j.jsx)(n.Notice,{status:"error",isDismissible:!1,children:o}),(0,j.jsxs)("div",{className:"blocks-header",children:[(0,j.jsxs)("div",{children:[(0,j.jsx)("h1",{children:(0,a.__)("Disable/Enable Blocks","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Turn blocks on or off. Changes are saved automatically.","noah-shop-builder-for-woocommerce")})]}),(0,j.jsx)("div",{className:"header-actions",children:(0,j.jsx)("div",{className:"bulk-toggle",children:(0,j.jsx)(n.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Enable all","noah-shop-builder-for-woocommerce"),checked:d,disabled:0===c.length,onChange:i})})})]}),Object.keys(h).map(e=>(0,j.jsxs)("div",{className:"blocks-category",children:[(0,j.jsx)("h2",{children:S[e]||e}),(0,j.jsx)("div",{className:"blocks-grid",children:h[e].map(e=>(0,j.jsxs)("div",{className:"block-card",children:[(0,j.jsxs)("div",{className:"block-info",children:[(0,j.jsx)("h3",{children:e.title}),(0,j.jsx)(y,{badges:e.badge})]}),(0,j.jsx)(n.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,j.jsx)("span",{className:"screen-reader-text",children:e.title}),help:e.required?(0,a.__)("Required","noah-shop-builder-for-woocommerce"):void 0,checked:"active"===e.status,disabled:e.required,onChange:o=>r(e.slug,o)})]},e.slug))})]},e))]})})},module:function({onPageChange:e}){const[o,s]=(0,t.useState)(null),{modules:r,loadError:i,isLoaded:c}=(0,l.useSelect)(e=>{const o=e(f);return{modules:o.getModules(),loadError:o.getModulesLoadError(),isLoaded:o.hasFinishedResolution("getModules")}},[]),{toggleModule:d}=(0,l.useDispatch)(f),h=(0,N.applyFilters)("noahShopBuilder.modules",R),m=Array.isArray(h)?h:R,u=Object.values(r),p=m.filter(e=>!r[e.slug]),g=e=>m.find(o=>o.slug===e.slug)?.icon||z[e.icon]||L,_=o?r[o]:null;return c?(0,j.jsxs)("div",{className:"section noah-shop-builder-modules",children:[(0,j.jsx)("h1",{children:(0,a.__)("Modules","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Modules add shopping features across your store. Turn each one on or off here; a module that is off loads no code at all.","noah-shop-builder-for-woocommerce")}),i&&(0,j.jsx)(n.Notice,{status:"error",isDismissible:!1,children:i}),u.length>0&&(0,j.jsx)("div",{className:"modules-grid",children:u.map(e=>{const o="active"===e.status;return(0,j.jsxs)("div",{className:"module-card"+(o?" is-active":""),children:[(0,j.jsxs)("div",{className:"module-card-header",children:[(0,j.jsx)("span",{className:"module-icon",children:(0,j.jsx)(n.Icon,{icon:g(e),size:24})}),(0,j.jsx)(n.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,j.jsx)("span",{className:"screen-reader-text",children:e.title}),checked:o,onChange:o=>d(e.slug,o)})]}),(0,j.jsxs)("h3",{children:[e.title," ",(0,j.jsx)(y,{badges:e.badge})]}),(0,j.jsx)("p",{children:e.description}),o&&e.fields.length>0&&(0,j.jsx)(n.Button,{variant:"secondary",size:"compact",className:"module-card-settings",onClick:()=>s(e.slug),children:(0,a.__)("Settings","noah-shop-builder-for-woocommerce")})]},e.slug)})}),p.length>0&&(0,j.jsxs)(j.Fragment,{children:[u.length>0&&(0,j.jsx)("h2",{children:(0,a.__)("Coming soon","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("div",{className:"modules-grid",children:p.map(e=>(0,j.jsxs)("div",{className:"module-card",children:[(0,j.jsxs)("div",{className:"module-card-header",children:[(0,j.jsx)("span",{className:"module-icon",children:(0,j.jsx)(n.Icon,{icon:e.icon,size:24})}),(0,j.jsx)("span",{className:"badge badge-upcoming",children:(0,a.__)("Upcoming","noah-shop-builder-for-woocommerce")})]}),(0,j.jsxs)("h3",{children:[e.title," ",(0,j.jsx)(y,{badges:e.badge})]}),(0,j.jsx)("p",{children:e.description})]},e.slug))})]}),0===u.length&&(0,j.jsxs)("div",{className:"modules-note",children:[(0,j.jsx)("p",{children:(0,a.__)("These modules are in development and will arrive in a future update. Until then, build your store pages with templates and blocks.","noah-shop-builder-for-woocommerce")}),(0,j.jsxs)("div",{className:"button-group",children:[(0,j.jsx)(n.Button,{variant:"primary",onClick:()=>e("templates"),children:(0,a.__)("Go to Templates","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"secondary",onClick:()=>e("block"),children:(0,a.__)("Go to Blocks","noah-shop-builder-for-woocommerce")})]})]}),_&&(0,j.jsx)(D,{module:_,onClose:()=>s(null)})]}):(0,j.jsx)("div",{className:"section",children:(0,j.jsxs)("div",{style:{textAlign:"center",padding:"50px"},children:[(0,j.jsx)(n.Spinner,{}),(0,j.jsx)("p",{children:(0,a.__)("Loading modules…","noah-shop-builder-for-woocommerce")})]})})},templates:function(){const[e,o]=(0,t.useState)(null),[s,i]=(0,t.useState)(null),[h,m]=(0,t.useState)(!1),[u,p]=(0,t.useState)("all"),[g,_]=(0,t.useState)("all"),[w,v]=(0,t.useState)(""),[x,b]=(0,t.useState)({}),[f,y]=(0,t.useState)(null),[S,k]=(0,t.useState)(null),[C,E]=(0,t.useState)(!1),V=(0,t.useRef)(null),{templates:M,loadError:B}=(0,l.useSelect)(e=>{const o=e(H.store);return{templates:o.getEntityRecords("postType",ge,Ve),loadError:o.getResolutionError?.("getEntityRecords",["postType",ge,Ve])}},[]),{saveEntityRecord:L,deleteEntityRecord:z,invalidateResolution:R}=(0,l.useDispatch)(H.store),T=()=>R("getEntityRecords",["postType",ge,Ve]),{createSuccessNotice:A,createErrorNotice:D}=(0,l.useDispatch)(d.store);M&&(V.current=M);const P=M||V.current;(0,t.useEffect)(()=>{c()({path:"/noah-shop-builder/v1/template-types"}).then(o).catch(e=>i(e?.message||(0,a.__)("Template types could not be loaded.","noah-shop-builder-for-woocommerce")))},[]),(0,t.useEffect)(()=>{(0,r.getQueryArg)(window.location.href,"new")&&(m(!0),window.history.replaceState(window.history.state,"",(0,r.removeQueryArgs)(window.location.href,"new")))},[]);const O=(0,t.useMemo)(()=>Object.fromEntries((e||[]).map(e=>[e.slug,e.label])),[e]),Z=(0,t.useMemo)(()=>function(e){const o=new Map;for(const s of e){const e=be(s);if(!fe(s)||"none"===ye(e).kind)continue;const t=[xe(s),Number(s.meta?._noah_priority)||0,Se(e)].join("#");o.has(t)||o.set(t,[]),o.get(t).push(s.id)}const s=new Map;for(const e of o.values())if(!(e.length<2))for(const o of e)s.set(o,e.filter(e=>e!==o));return s}(P||[]),[P]),G=(0,t.useMemo)(()=>Object.fromEntries((P||[]).map(e=>[e.id,je(e)])),[P]),I=e=>A(e,{type:"snackbar"}),W=(e,o)=>D(e?.message||o,{type:"snackbar"}),q=!P||!e,U=P?function(e,{type:o,status:s,search:t}){const r=t.trim().toLowerCase();return e.filter(e=>("all"===o||xe(e)===o)&&("all"===s||fe(e)===("active"===s))&&(!r||je(e).toLowerCase().includes(r)))}(P,{type:u,status:g,search:w}):[],Q=B?.message||s;return(0,j.jsxs)("div",{className:"section noah-templates",children:[(0,j.jsxs)("div",{className:"noah-templates__header",children:[(0,j.jsxs)("div",{children:[(0,j.jsx)("h1",{children:(0,a.__)("Templates","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Design your product, shop, cart and checkout pages. Active templates replace the matching WooCommerce page.","noah-shop-builder-for-woocommerce")})]}),(0,j.jsxs)("div",{className:"noah-templates__header-actions",children:[P&&(0,N.applyFilters)("noahShopBuilder.templates.headerActions",[],{templates:P,refresh:T}),P&&P.length>0&&(0,j.jsx)(n.Button,{variant:"primary",icon:F,onClick:()=>m(!0),disabled:!e,__next40pxDefaultSize:!0,children:(0,a.__)("Add New Template","noah-shop-builder-for-woocommerce")})]})]}),Q&&(0,j.jsx)(n.Notice,{status:"error",isDismissible:!1,children:Q}),q&&!Q&&(0,j.jsxs)("div",{className:"noah-templates__loading",children:[(0,j.jsx)(n.Spinner,{}),(0,j.jsx)("p",{children:(0,a.__)("Loading templates…","noah-shop-builder-for-woocommerce")})]}),!q&&0===P.length&&(0,j.jsx)(Ae,{onCreate:()=>m(!0)}),!q&&P.length>0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)("div",{className:"noah-templates__toolbar",children:[(0,j.jsx)(Re,{types:e,list:P,value:u,onChange:p}),(0,j.jsxs)("div",{className:"noah-templates__toolbar-end",children:[(0,j.jsx)("div",{className:"noah-segmented",role:"group","aria-label":(0,a.__)("Status","noah-shop-builder-for-woocommerce"),children:Object.entries(Me).map(([e,o])=>(0,j.jsx)("button",{type:"button","aria-pressed":g===e,className:g===e?"is-selected":"",onClick:()=>_(e),children:o},e))}),(0,j.jsx)(n.SearchControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Search templates","noah-shop-builder-for-woocommerce"),placeholder:(0,a.__)("Search templates","noah-shop-builder-for-woocommerce"),value:w,onChange:v})]})]}),(0,j.jsxs)("div",{className:"noah-templates__table",role:"table",children:[(0,j.jsxs)("div",{className:"noah-templates__head",role:"row",children:[(0,j.jsx)("span",{role:"columnheader",children:(0,a.__)("Template","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("span",{role:"columnheader",children:(0,a.__)("Shows on","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("span",{role:"columnheader",children:(0,a.__)("Status","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("span",{role:"columnheader",className:"screen-reader-text",children:(0,a.__)("Actions","noah-shop-builder-for-woocommerce")})]}),U.map(e=>(0,j.jsx)(Te,{template:e,typeLabel:O[xe(e)]||xe(e),conflicts:(Z.get(e.id)||[]).map(e=>`“${G[e]}”`),active:x[e.id]??fe(e),isBusy:e.id in x,onToggle:o=>(async(e,o)=>{b(s=>({...s,[e.id]:o}));try{await L("postType",ge,{id:e.id,status:o?ve:"draft"},{throwOnError:!0}),I(o?(0,a.__)("Template activated.","noah-shop-builder-for-woocommerce"):(0,a.__)("Template deactivated.","noah-shop-builder-for-woocommerce"))}catch(e){W(e,(0,a.__)("The status could not be saved.","noah-shop-builder-for-woocommerce"))}finally{b(({[e.id]:o,...s})=>s)}})(e,o),onPreview:()=>k(e),onDuplicate:()=>(async e=>{b(o=>({...o,[e.id]:fe(e)}));try{await L("postType",ge,{title:(0,a.sprintf)(/* translators: %s: template name. */ /* translators: %s: template name. */
    13 (0,a.__)("%s (Copy)","noah-shop-builder-for-woocommerce"),je(e)),content:e.content?.raw??"",status:"draft",meta:e.meta},{throwOnError:!0}),I((0,a.__)("Template duplicated as inactive.","noah-shop-builder-for-woocommerce"))}catch(e){W(e,(0,a.__)("The template could not be duplicated.","noah-shop-builder-for-woocommerce"))}finally{b(({[e.id]:o,...s})=>s)}})(e),onDelete:()=>y(e),refresh:T},e.id)),0===U.length&&(0,j.jsxs)("div",{className:"noah-templates__no-results",children:[(0,j.jsx)("p",{children:(0,a.__)("No templates match these filters.","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"link",onClick:()=>{p("all"),_("all"),v("")},children:(0,a.__)("Clear filters","noah-shop-builder-for-woocommerce")})]})]})]}),S&&(0,j.jsx)(ie,{url:S.noah_preview_url,title:je(S)||(0,a.__)("(no title)","noah-shop-builder-for-woocommerce"),onClose:()=>k(null),action:(0,j.jsx)(n.Button,{variant:"primary",size:"compact",href:Be(S.id),children:(0,a.__)("Edit","noah-shop-builder-for-woocommerce")})}),h&&e&&(0,j.jsx)(Ee,{types:e,onClose:()=>m(!1)}),f&&(0,j.jsxs)(n.Modal,{title:(0,a.__)("Delete template?","noah-shop-builder-for-woocommerce"),onRequestClose:()=>!C&&y(null),size:"small",children:[(0,j.jsx)("p",{children:(0,a.sprintf)(/* translators: %s: template name. */ /* translators: %s: template name. */
    14 (0,a.__)("“%s” will be deleted permanently. Pages that use it go back to their default design.","noah-shop-builder-for-woocommerce"),je(f))}),(0,j.jsxs)("div",{className:"noah-templates-modal__footer",children:[(0,j.jsx)(n.Button,{variant:"tertiary",onClick:()=>y(null),disabled:C,children:(0,a.__)("Cancel","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"primary",isDestructive:!0,isBusy:C,disabled:C,onClick:async()=>{E(!0);try{await z("postType",ge,f.id,{force:!0},{throwOnError:!0}),I((0,a.__)("Template deleted.","noah-shop-builder-for-woocommerce")),y(null)}catch(e){W(e,(0,a.__)("The template could not be deleted.","noah-shop-builder-for-woocommerce"))}finally{E(!1)}},children:(0,a.__)("Delete","noah-shop-builder-for-woocommerce")})]})]})]})},settings:function(){const{settings:e,loadError:o,isLoaded:s}=(0,l.useSelect)(e=>{const o=e(f);return{settings:o.getSettings(),loadError:o.getSettingsLoadError(),isLoaded:o.hasFinishedResolution("getSettings")}},[]),{saveSetting:t}=(0,l.useDispatch)(f);return s?(0,j.jsxs)("div",{className:"section noah-shop-builder-settings",children:[o&&(0,j.jsx)(n.Notice,{status:"error",isDismissible:!1,children:o}),(0,j.jsx)("h1",{children:(0,a.__)("Settings","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Changes are saved automatically.","noah-shop-builder-for-woocommerce")}),(0,j.jsxs)("div",{className:"settings-group",children:[(0,j.jsx)("h2",{children:(0,a.__)("Data","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("div",{className:"settings-card",children:(0,j.jsx)(n.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Delete all data when the plugin is deleted","noah-shop-builder-for-woocommerce"),help:(0,a.__)("When you delete Noah Shop Builder on the Plugins screen, its templates, settings, swatch settings and saved wishlists are removed for good. Deactivating the plugin never removes data. Add-ons that use this setting remove their own data too.","noah-shop-builder-for-woocommerce"),checked:!!e.delete_data,disabled:!!o,onChange:e=>t("delete_data",e)})})]})]}):(0,j.jsx)("div",{className:"section",children:(0,j.jsxs)("div",{style:{textAlign:"center",padding:"50px"},children:[(0,j.jsx)(n.Spinner,{}),(0,j.jsx)("p",{children:(0,a.__)("Loading settings…","noah-shop-builder-for-woocommerce")})]})})}},Qe=function(){const e=()=>{const e=(0,r.getQueryArgs)(window.location.search).subpage||window.location.hash?.slice(1)||"welcome";return Ue[e]?e:"welcome"},[o,s]=(0,t.useState)(e()),a=(e,o={})=>{const t=(0,r.addQueryArgs)(window.location.pathname,{page:"noah-shop-builder",subpage:e,...o});window.history.pushState({},"",t),s(e),n(e)},n=e=>{const o=document.querySelectorAll("#toplevel_page_noah-shop-builder ul li");for(const s of o){const o=s.querySelector("a"),t=!!o&&(0,r.getQueryArg)(o.href,"subpage")===e;s.classList.toggle("current",t),o&&(o.classList.toggle("current",t),t?o.setAttribute("aria-current","page"):o.removeAttribute("aria-current"))}};(0,t.useEffect)(()=>{n(o);const t=()=>{const o=e();s(o),n(o)};window.addEventListener("popstate",t);const l=document.querySelectorAll("#toplevel_page_noah-shop-builder ul li a"),i=e=>{const o=e.currentTarget.href,s=(0,r.getQueryArg)(o,"subpage");"noah-shop-builder"===(0,r.getQueryArg)(o,"page")&&Ue[s]&&(e.preventDefault(),a(s))};for(const e of l)e.addEventListener("click",i);return()=>{window.removeEventListener("popstate",t);for(const e of l)e.removeEventListener("click",i)}},[o]);const l=Ue[o]||Ue.welcome;return(0,j.jsxs)(t.Fragment,{children:[(0,j.jsx)(We,{links:Ue,currentPage:o,setCurrentPage:a}),(0,j.jsx)("div",{className:"noah-shop-builder-wrapper",children:(0,j.jsx)(l,{onPageChange:a})}),(0,j.jsx)(qe,{})]})},$e=document.getElementById("noah-shop-builder-admin-dashboard");$e&&(0,t.createRoot)($e).render((0,j.jsx)(Qe,{}))}};const o={};function s(t){const r=o[t];if(void 0!==r)return r.exports;const a=o[t]={exports:{}};return e[t](a,a.exports,s),a.exports}s.m=e,(()=>{const e=[];s.O=(o,t,r)=>{if(!t){for(var a=0;a<e.length;a++){let[t,r]=e[a],l=!0;for(var n=0;n<t.length;n++)s.O.j(t[n])?t.splice(n--,1):l=!1;if(l){e.splice(a--,1);const s=r();void 0!==s&&(o=s)}}return o}e.push([t,r])}})(),s.n=e=>{const o=e&&e.__esModule?()=>e.default:()=>e;return s.d(o,{a:o}),o},s.d=(e,o)=>{for(var t in o)s.o(o,t)&&!s.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:o[t]})},s.o=(e,o)=>Object.hasOwn(e,o),(()=>{const e={7:0,868:0};s.O.j=o=>0===e[o];const o=(o,t)=>{let[r,a,n]=t;var l,i,c=0;if(r.some(o=>0!==e[o])){for(l in a)s.o(a,l)&&(s.m[l]=a[l]);if(n)var d=n(s)}for(o&&o(t);c<r.length;c++)i=r[c],s.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return s.O(d)},t=globalThis.webpackChunknoah_shop_builder_for_woocommerce||=[];t.forEach(o.bind(null,0)),t.push=o.bind(null,t.push.bind(t))})();let t=s.O(void 0,[868],()=>s(659));t=s.O(t)})();
     11(0,a._n)("%1$s, %2$d exclusion","%1$s, %2$d exclusions",e.exclude,"noah-shop-builder-for-woocommerce"),o,e.exclude):o}function He(e){const o=new Date(e);return Number.isNaN(o.getTime())?"":o.toLocaleDateString(document.documentElement.lang||void 0,{dateStyle:"medium"})}function Oe({types:e,list:o,value:s,onChange:t}){const r=o.reduce((e,o)=>{const s=ke(o);return e[s]=(e[s]||0)+1,e},{}),n=[{slug:"all",label:(0,a.__)("All templates","noah-shop-builder-for-woocommerce"),count:o.length},...e.filter(e=>r[e.slug]).map(e=>({...e,count:r[e.slug]}))];return(0,j.jsx)("div",{className:"noah-type-filter",role:"tablist","aria-label":(0,a.__)("Template type","noah-shop-builder-for-woocommerce"),children:n.map(e=>(0,j.jsxs)("button",{type:"button",role:"tab","aria-selected":s===e.slug,className:s===e.slug?"is-selected":"",onClick:()=>t(e.slug),children:[e.label,(0,j.jsx)("span",{className:"noah-type-filter__count",children:e.count})]},e.slug))})}function Ze({template:e,typeLabel:o,conflicts:s,active:t,isBusy:r,onToggle:l,onPreview:i,onDuplicate:c,onDelete:d,refresh:h}){const u=(0,z.applyFilters)("noahShopBuilder.templates.rowActions",[],{template:e,refresh:h}),m=ke(e),p=Ve(Ne(e)),g=Ee(e)||(0,a.__)("(no title)","noah-shop-builder-for-woocommerce"),_=`noah-template-status-${e.id}`;return(0,j.jsxs)("div",{className:"noah-template-row "+(t?"":"is-inactive"),role:"row",children:[(0,j.jsxs)("div",{className:"noah-template-row__main",role:"cell",children:[(0,j.jsx)("span",{className:"noah-template-row__icon",children:(0,j.jsx)(n.Icon,{icon:ie(m).icon,size:22})}),(0,j.jsxs)("div",{children:[(0,j.jsx)("a",{className:"noah-template-row__title",href:De(e.id),children:g}),(0,j.jsxs)("div",{className:"noah-template-row__meta",children:[(0,j.jsx)("span",{className:"noah-pill",children:o}),(0,j.jsx)("span",{children:(0,a.sprintf)(/* translators: %s: date. */ /* translators: %s: date. */
     12(0,a.__)("Edited %s","noah-shop-builder-for-woocommerce"),He(e.modified))})]})]})]}),(0,j.jsxs)("div",{className:"noah-template-row__display",role:"cell",children:[(0,j.jsx)("span",{className:`noah-display noah-display--${p.kind}`,children:Pe(p)}),t&&s.length>0&&(0,j.jsx)(n.Tooltip,{text:(0,a.sprintf)(/* translators: %s: comma-separated template names. */ /* translators: %s: comma-separated template names. */
     13(0,a.__)("Same pages and priority as %s. Only the most recently edited one is used.","noah-shop-builder-for-woocommerce"),s.join(", ")),children:(0,j.jsxs)("span",{className:"noah-badge noah-badge--warning",tabIndex:0,children:[(0,j.jsx)(n.Icon,{icon:W,size:16}),(0,a.__)("Conflict","noah-shop-builder-for-woocommerce")]})})]}),(0,j.jsxs)("div",{className:"noah-template-row__status",role:"cell",children:[(0,j.jsx)(n.FormToggle,{id:_,checked:t,disabled:r,onChange:()=>l(!t)}),(0,j.jsx)("label",{htmlFor:_,children:t?(0,a.__)("Active","noah-shop-builder-for-woocommerce"):(0,a.__)("Inactive","noah-shop-builder-for-woocommerce")})]}),(0,j.jsxs)("div",{className:"noah-template-row__actions",role:"cell",children:[(0,j.jsx)(n.Button,{variant:"secondary",size:"compact",icon:U,href:De(e.id),children:(0,a.__)("Edit","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.DropdownMenu,{icon:q,label:(0,a.__)("More actions","noah-shop-builder-for-woocommerce"),toggleProps:{size:"compact",disabled:r},popoverProps:{placement:"bottom-end"},children:({onClose:o})=>(0,j.jsxs)(n.MenuGroup,{children:[e.noah_preview_url&&(0,j.jsx)(n.MenuItem,{icon:R,onClick:()=>{o(),i()},children:(0,a.__)("Preview","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.MenuItem,{icon:Q,onClick:()=>{o(),c()},children:(0,a.__)("Duplicate","noah-shop-builder-for-woocommerce")}),u.map(s=>(0,j.jsx)(n.MenuItem,{icon:s.icon,onClick:()=>{o(),s.onClick(e)},children:s.label},s.key)),(0,j.jsx)(n.MenuItem,{icon:$,isDestructive:!0,onClick:()=>{o(),d()},children:(0,a.__)("Delete","noah-shop-builder-for-woocommerce")})]})})]})]})}function Ge({onCreate:e}){const o=[{title:(0,a.__)("Pick a page","noah-shop-builder-for-woocommerce"),text:(0,a.__)("Product, shop, cart, checkout and more.","noah-shop-builder-for-woocommerce")},{title:(0,a.__)("Design it with blocks","noah-shop-builder-for-woocommerce"),text:(0,a.__)("Drag in Noah blocks in the editor you know.","noah-shop-builder-for-woocommerce")},{title:(0,a.__)("Turn it on","noah-shop-builder-for-woocommerce"),text:(0,a.__)("Active templates replace the WooCommerce page.","noah-shop-builder-for-woocommerce")}];return(0,j.jsxs)("div",{className:"noah-templates-empty",children:[(0,j.jsx)("h2",{children:(0,a.__)("Design your first store template","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Templates let you redesign WooCommerce pages without touching your theme.","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("ol",{className:"noah-templates-empty__steps",children:o.map((e,o)=>(0,j.jsxs)("li",{children:[(0,j.jsx)("span",{className:"noah-templates-empty__number",children:o+1}),(0,j.jsx)("strong",{children:e.title}),(0,j.jsx)("span",{children:e.text})]},e.title))}),(0,j.jsx)(n.Button,{variant:"primary",icon:K,onClick:e,__next40pxDefaultSize:!0,children:(0,a.__)("Create template","noah-shop-builder-for-woocommerce")})]})}const Ie=[{slug:"single_product",icon:J,title:(0,a.__)("Single Product","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Design product pages with title, gallery, price, add to cart, tabs, reviews, related products and more.","noah-shop-builder-for-woocommerce")},{slug:"archive",icon:Y,title:(0,a.__)("Shop & Archive","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Build the shop page, category and tag archives and search results with product grids, filters, sorting and pagination.","noah-shop-builder-for-woocommerce")},{slug:"cart",icon:ee,title:(0,a.__)("Cart & Empty Cart","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Lay out the cart page, and a separate page for when the cart is empty.","noah-shop-builder-for-woocommerce")},{slug:"checkout",icon:te,title:(0,a.__)("Checkout","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Arrange billing, shipping, order review and payment your way, while WooCommerce still runs the checkout.","noah-shop-builder-for-woocommerce")},{slug:"quick_view",icon:R,title:(0,a.__)("Quick View","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Design the popup that opens from the “Quick view” button on product cards.","noah-shop-builder-for-woocommerce")}],Fe=[{title:(0,a.__)("Create a template","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Pick a template type and start from a ready-made starter design or a blank page.","noah-shop-builder-for-woocommerce")},{title:(0,a.__)("Design it with blocks","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Arrange Noah blocks in the block editor and preview the result with a real product.","noah-shop-builder-for-woocommerce")},{title:(0,a.__)("Choose where it shows","noah-shop-builder-for-woocommerce"),description:(0,a.__)("Show the template on all pages of its type, or only on chosen products and categories, then publish.","noah-shop-builder-for-woocommerce")}],We=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"M12 4L4 7.9V20h16V7.9L12 4zm6.5 14.5H14V13h-4v5.5H5.5V8.8L12 5.7l6.5 3.1v9.7z"})}),Ue=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{d:"m3 5c0-1.10457.89543-2 2-2h13.5c1.1046 0 2 .89543 2 2v13.5c0 1.1046-.8954 2-2 2h-13.5c-1.10457 0-2-.8954-2-2zm2-.5h6v6.5h-6.5v-6c0-.27614.22386-.5.5-.5zm-.5 8v6c0 .2761.22386.5.5.5h6v-6.5zm8 0v6.5h6c.2761 0 .5-.2239.5-.5v-6zm0-8v6.5h6.5v-6c0-.27614-.2239-.5-.5-.5z",fillRule:"evenodd",clipRule:"evenodd"})}),qe=(0,j.jsxs)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:[(0,j.jsx)(k.Path,{d:"M14.5 5.5h-7V7h7V5.5ZM7.5 9h7v1.5h-7V9Zm7 3.5h-7V14h7v-1.5Z"}),(0,j.jsx)(k.Path,{d:"M16 2H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2ZM6 3.5h10a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H6a.5.5 0 0 1-.5-.5V4a.5.5 0 0 1 .5-.5Z"}),(0,j.jsx)(k.Path,{d:"M20 8v11c0 .69-.31 1-.999 1H6v1.5h13.001c1.52 0 2.499-.982 2.499-2.5V8H20Z"})]}),Qe=(0,j.jsx)(k.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,j.jsx)(k.Path,{fillRule:"evenodd",d:"M10.289 4.836A1 1 0 0111.275 4h1.306a1 1 0 01.987.836l.244 1.466c.787.26 1.503.679 2.108 1.218l1.393-.522a1 1 0 011.216.437l.653 1.13a1 1 0 01-.23 1.273l-1.148.944a6.025 6.025 0 010 2.435l1.149.946a1 1 0 01.23 1.272l-.653 1.13a1 1 0 01-1.216.437l-1.394-.522c-.605.54-1.32.958-2.108 1.218l-.244 1.466a1 1 0 01-.987.836h-1.306a1 1 0 01-.986-.836l-.244-1.466a5.995 5.995 0 01-2.108-1.218l-1.394.522a1 1 0 01-1.217-.436l-.653-1.131a1 1 0 01.23-1.272l1.149-.946a6.026 6.026 0 010-2.435l-1.148-.944a1 1 0 01-.23-1.272l.653-1.131a1 1 0 011.217-.437l1.393.522a5.994 5.994 0 012.108-1.218l.244-1.466zM14.929 12a3 3 0 11-6 0 3 3 0 016 0z",clipRule:"evenodd"})});function $e(e,o){const s=window.getComputedStyle(o);if("rtl"!==s.direction)return e.offsetLeft-o.offsetLeft;const t=o.offsetParent.clientWidth-parseFloat(s.right||0);return e.offsetLeft+e.offsetWidth-t}const Ke={welcome:{label:(0,a.__)("Welcome","noah-shop-builder-for-woocommerce"),icon:We},block:{label:(0,a.__)("Blocks","noah-shop-builder-for-woocommerce"),icon:Ue},module:{label:(0,a.__)("Modules","noah-shop-builder-for-woocommerce"),icon:ne},templates:{label:(0,a.__)("Templates","noah-shop-builder-for-woocommerce"),icon:qe},settings:{label:(0,a.__)("Settings","noah-shop-builder-for-woocommerce"),icon:Qe}},Xe=function({links:e,currentPage:o,setCurrentPage:s}){const[r,a]=(0,t.useState)({left:0,width:0}),l=(0,t.useRef)(null),i=(0,t.useRef)(null),c=(0,t.useRef)({}),d=Object.keys(e).map(e=>({page:e,label:Ke[e]?.label||e,icon:Ke[e]?.icon}));return(0,t.useEffect)(()=>{const e=l.current,s=()=>{const e=c.current[o],s=i.current;e&&s&&a({left:$e(e,s),width:e.offsetWidth})};if(s(),!e||void 0===window.ResizeObserver)return;const t=new window.ResizeObserver(s);t.observe(e);for(const e of Object.values(c.current))e&&t.observe(e);return()=>t.disconnect()},[o]),(0,j.jsx)("header",{className:"noah-shop-builder-dashboard-header",children:(0,j.jsx)("div",{className:"noah-shop-builder-header-container",children:(0,j.jsxs)("nav",{className:"noah-shop-builder-dashboard-nav",ref:l,children:[(0,j.jsx)("div",{className:"nav-indicator",ref:i,style:{transform:`translateX(${r.left}px)`,width:`${r.width}px`}}),d.map(e=>(0,j.jsxs)("button",{ref:o=>c.current[e.page]=o,className:"nav-button "+(o===e.page?"active":""),onClick:o=>{o.preventDefault(),s(e.page)},type:"button",children:[e.icon&&(0,j.jsx)(n.Icon,{icon:e.icon,size:20}),(0,j.jsx)("span",{children:e.label})]},e.page))]})})})},Je=function(){const e=(0,l.useSelect)(e=>e(d.store).getNotices(),[]),{removeNotice:o}=(0,l.useDispatch)(d.store);return(0,j.jsx)(n.SnackbarList,{className:"noah-shop-builder-snackbars",notices:e.filter(e=>"snackbar"===e.type),onRemove:o})},Ye={welcome:function({onPageChange:e}){return(0,j.jsxs)("div",{className:"noah-shop-builder-welcome",children:[(0,j.jsxs)("div",{className:"section welcome-hero",children:[(0,j.jsx)("h1",{children:(0,a.__)("Welcome to Noah Shop Builder","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Design your WooCommerce product pages, shop, archives, cart and checkout in the block editor. No coding needed, and your theme stays in charge of the rest of the site.","noah-shop-builder-for-woocommerce")}),(0,j.jsxs)("div",{className:"button-group",children:[(0,j.jsx)(n.Button,{variant:"primary",onClick:()=>e("templates",{new:1}),children:(0,a.__)("Create a template","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"secondary",onClick:()=>e("templates"),children:(0,a.__)("View templates","noah-shop-builder-for-woocommerce")})]})]}),(0,j.jsxs)("div",{className:"section",children:[(0,j.jsx)("h2",{children:(0,a.__)("Get started","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("ol",{className:"welcome-steps",children:Fe.map(e=>(0,j.jsxs)("li",{children:[(0,j.jsx)("h3",{children:e.title}),(0,j.jsx)("p",{children:e.description})]},e.title))})]}),(0,j.jsxs)("div",{className:"section",children:[(0,j.jsx)("h2",{children:(0,a.__)("What you can build","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("div",{className:"welcome-cards",children:Ie.map(e=>(0,j.jsxs)("div",{className:"welcome-card",children:[(0,j.jsx)("span",{className:"welcome-card-icon",children:(0,j.jsx)(n.Icon,{icon:e.icon,size:24})}),(0,j.jsx)("h3",{children:e.title}),(0,j.jsx)("p",{children:e.description})]},e.slug))})]}),(0,j.jsxs)("div",{className:"welcome-columns",children:[(0,j.jsxs)("div",{className:"section",children:[(0,j.jsx)("h2",{children:(0,a.__)("Blocks","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Turn off the blocks you don’t use to keep the inserter tidy. Turned-off blocks load nothing on your store.","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"secondary",onClick:()=>e("block"),children:(0,a.__)("Manage blocks","noah-shop-builder-for-woocommerce")})]}),(0,j.jsxs)("div",{className:"section",children:[(0,j.jsx)("h2",{children:(0,a.__)("Modules","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Add Quick View, a wishlist and variation swatches to your store. Each module stays off until you turn it on, and has its own settings.","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"secondary",onClick:()=>e("module"),children:(0,a.__)("Manage modules","noah-shop-builder-for-woocommerce")})]}),(0,j.jsxs)("div",{className:"section",children:[(0,j.jsx)("h2",{children:(0,a.__)("Coming next","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Templates for the My Account and order received pages.","noah-shop-builder-for-woocommerce")})]})]})]})},block:function(){const{blocks:e,loadError:o,isLoaded:s}=(0,l.useSelect)(e=>{const o=e(f);return{blocks:o.getBlocks(),loadError:o.getLoadError(),isLoaded:o.hasFinishedResolution("getBlocks")}},[]),{toggleBlock:r,setAllBlocks:i}=(0,l.useDispatch)(f);if(!s)return(0,j.jsx)("div",{className:"section",children:(0,j.jsxs)("div",{style:{textAlign:"center",padding:"50px"},children:[(0,j.jsx)(n.Spinner,{}),(0,j.jsx)("p",{children:(0,a.__)("Loading blocks…","noah-shop-builder-for-woocommerce")})]})});const c=Object.values(e).filter(e=>!e.required),d=c.length>0&&c.every(e=>"active"===e.status),h=Object.values(e).reduce((e,o)=>{const s=o.category?.[0]||"other";return e[s]||(e[s]=[]),e[s].push(o),e},{}),u=E();for(const o of u.blocks){if(e[o.slug])continue;const s=o.category||"other";h[s]||(h[s]=[]),h[s].push({...o,locked:!0})}return(0,j.jsx)(t.Fragment,{children:(0,j.jsxs)("div",{className:"section noah-shop-builder-blocks",children:[o&&(0,j.jsx)(n.Notice,{status:"error",isDismissible:!1,children:o}),(0,j.jsxs)("div",{className:"blocks-header",children:[(0,j.jsxs)("div",{children:[(0,j.jsx)("h1",{children:(0,a.__)("Disable/Enable Blocks","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Turn blocks on or off. Changes are saved automatically.","noah-shop-builder-for-woocommerce")})]}),(0,j.jsx)("div",{className:"header-actions",children:(0,j.jsx)("div",{className:"bulk-toggle",children:(0,j.jsx)(n.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Enable all","noah-shop-builder-for-woocommerce"),checked:d,disabled:0===c.length,onChange:i})})})]}),Object.keys(h).map(e=>(0,j.jsxs)("div",{className:"blocks-category",children:[(0,j.jsx)("h2",{children:B[e]||e}),(0,j.jsx)("div",{className:"blocks-grid",children:h[e].map(e=>(0,j.jsxs)("div",{className:"block-card"+(e.locked?" is-locked":""),children:[(0,j.jsxs)("div",{className:"block-info",children:[(0,j.jsx)("h3",{children:e.title}),e.locked?(0,j.jsx)(V,{}):(0,j.jsx)(y,{badges:e.badge}),e.doc&&(0,j.jsxs)("a",{className:"block-doc-link",href:e.doc,target:"_blank",rel:"noopener noreferrer",children:[(0,a.__)("Documentation","noah-shop-builder-for-woocommerce"),(0,j.jsx)("span",{className:"screen-reader-text",children:(0,a.sprintf)(/* translators: %s: block title. */ /* translators: %s: block title. */
     14(0,a.__)("for %s (opens in a new tab)","noah-shop-builder-for-woocommerce"),e.title)})]})]}),e.locked?(0,j.jsx)(M,{url:u.url,title:e.title}):(0,j.jsx)(n.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,j.jsx)("span",{className:"screen-reader-text",children:e.title}),help:e.required?(0,a.__)("Required","noah-shop-builder-for-woocommerce"):void 0,checked:"active"===e.status,disabled:e.required,onChange:o=>r(e.slug,o)})]},e.slug))})]},e))]})})},module:function({onPageChange:e}){const[o,s]=(0,t.useState)(null),{modules:r,loadError:i,isLoaded:c}=(0,l.useSelect)(e=>{const o=e(f);return{modules:o.getModules(),loadError:o.getModulesLoadError(),isLoaded:o.hasFinishedResolution("getModules")}},[]),{toggleModule:d}=(0,l.useDispatch)(f),h=(0,z.applyFilters)("noahShopBuilder.modules",O),u=Array.isArray(h)?h:O,m=Object.values(r),p=E(),g=p.modules.filter(e=>!r[e.slug]),_=u.filter(e=>!r[e.slug]&&!g.some(o=>o.slug===e.slug)),w=e=>(p.features[e.slug]||[]).filter(o=>!e.fields.some(e=>e.key===o.key)),x=e=>u.find(o=>o.slug===e.slug)?.icon||H[e.icon]||P,v=o?r[o]:null;return c?(0,j.jsxs)("div",{className:"section noah-shop-builder-modules",children:[(0,j.jsx)("h1",{children:(0,a.__)("Modules","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Modules add shopping features across your store. Turn each one on or off here; a module that is off loads no code at all.","noah-shop-builder-for-woocommerce")}),i&&(0,j.jsx)(n.Notice,{status:"error",isDismissible:!1,children:i}),(m.length>0||g.length>0)&&(0,j.jsxs)("div",{className:"modules-grid",children:[m.map(e=>{const o="active"===e.status;return(0,j.jsxs)("div",{className:"module-card"+(o?" is-active":""),children:[(0,j.jsxs)("div",{className:"module-card-header",children:[(0,j.jsx)("span",{className:"module-icon",children:(0,j.jsx)(n.Icon,{icon:x(e),size:24})}),(0,j.jsx)(n.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,j.jsx)("span",{className:"screen-reader-text",children:e.title}),checked:o,onChange:o=>d(e.slug,o)})]}),(0,j.jsxs)("h3",{children:[e.title," ",(0,j.jsx)(y,{badges:e.badge})]}),(0,j.jsx)("p",{children:e.description}),o&&e.fields.length>0&&(0,j.jsx)(n.Button,{variant:"secondary",size:"compact",className:"module-card-settings",onClick:()=>s(e.slug),children:(0,a.__)("Settings","noah-shop-builder-for-woocommerce")}),w(e).length>0&&(0,j.jsxs)("div",{className:"module-card-locked",children:[(0,j.jsx)("ul",{children:w(e).map(e=>(0,j.jsxs)("li",{children:[(0,j.jsx)(n.Icon,{icon:N,size:14}),e.label]},e.key))}),(0,j.jsx)(M,{url:p.url,title:w(e).map(e=>e.label).join(", "),label:(0,a.__)("Unlock with Pro","noah-shop-builder-for-woocommerce"),variant:"text"})]})]},e.slug)}),g.map(e=>(0,j.jsxs)("div",{className:"module-card is-locked",children:[(0,j.jsxs)("div",{className:"module-card-header",children:[(0,j.jsx)("span",{className:"module-icon",children:(0,j.jsx)(n.Icon,{icon:H[e.icon]||P,size:24})}),(0,j.jsx)(M,{url:p.url,title:e.title})]}),(0,j.jsxs)("h3",{children:[e.title," ",(0,j.jsx)(V,{})]}),(0,j.jsx)("p",{children:e.description})]},e.slug))]}),_.length>0&&(0,j.jsxs)(j.Fragment,{children:[m.length>0&&(0,j.jsx)("h2",{children:(0,a.__)("Coming soon","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("div",{className:"modules-grid",children:_.map(e=>(0,j.jsxs)("div",{className:"module-card",children:[(0,j.jsxs)("div",{className:"module-card-header",children:[(0,j.jsx)("span",{className:"module-icon",children:(0,j.jsx)(n.Icon,{icon:e.icon,size:24})}),(0,j.jsx)("span",{className:"badge badge-upcoming",children:(0,a.__)("Upcoming","noah-shop-builder-for-woocommerce")})]}),(0,j.jsxs)("h3",{children:[e.title," ",(0,j.jsx)(y,{badges:e.badge})]}),(0,j.jsx)("p",{children:e.description})]},e.slug))})]}),0===m.length&&(0,j.jsxs)("div",{className:"modules-note",children:[(0,j.jsx)("p",{children:(0,a.__)("These modules are in development and will arrive in a future update. Until then, build your store pages with templates and blocks.","noah-shop-builder-for-woocommerce")}),(0,j.jsxs)("div",{className:"button-group",children:[(0,j.jsx)(n.Button,{variant:"primary",onClick:()=>e("templates"),children:(0,a.__)("Go to Templates","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"secondary",onClick:()=>e("block"),children:(0,a.__)("Go to Blocks","noah-shop-builder-for-woocommerce")})]})]}),v&&(0,j.jsx)(I,{module:v,onClose:()=>s(null)})]}):(0,j.jsx)("div",{className:"section",children:(0,j.jsxs)("div",{style:{textAlign:"center",padding:"50px"},children:[(0,j.jsx)(n.Spinner,{}),(0,j.jsx)("p",{children:(0,a.__)("Loading modules…","noah-shop-builder-for-woocommerce")})]})})},templates:function(){const[e,o]=(0,t.useState)(null),[s,i]=(0,t.useState)(null),[h,u]=(0,t.useState)(!1),[m,p]=(0,t.useState)("all"),[g,_]=(0,t.useState)("all"),[w,x]=(0,t.useState)(""),[v,b]=(0,t.useState)({}),[f,y]=(0,t.useState)(null),[S,k]=(0,t.useState)(null),[N,C]=(0,t.useState)(!1),E=(0,t.useRef)(null),{templates:V,loadError:M}=(0,l.useSelect)(e=>{const o=e(F.store);return{templates:o.getEntityRecords("postType",fe,Te),loadError:o.getResolutionError?.("getEntityRecords",["postType",fe,Te])}},[]),{saveEntityRecord:B,deleteEntityRecord:L,invalidateResolution:R}=(0,l.useDispatch)(F.store),T=()=>R("getEntityRecords",["postType",fe,Te]),{createSuccessNotice:A,createErrorNotice:D}=(0,l.useDispatch)(d.store);V&&(E.current=V);const P=V||E.current;(0,t.useEffect)(()=>{c()({path:"/noah-shop-builder/v1/template-types"}).then(o).catch(e=>i(e?.message||(0,a.__)("Template types could not be loaded.","noah-shop-builder-for-woocommerce")))},[]),(0,t.useEffect)(()=>{(0,r.getQueryArg)(window.location.href,"new")&&(u(!0),window.history.replaceState(window.history.state,"",(0,r.removeQueryArgs)(window.location.href,"new")))},[]);const H=(0,t.useMemo)(()=>Object.fromEntries((e||[]).map(e=>[e.slug,e.label])),[e]),O=(0,t.useMemo)(()=>function(e){const o=new Map;for(const s of e){const e=Ne(s);if(!Ce(s)||"none"===Ve(e).kind)continue;const t=[ke(s),Number(s.meta?._noah_priority)||0,Me(e)].join("#");o.has(t)||o.set(t,[]),o.get(t).push(s.id)}const s=new Map;for(const e of o.values())if(!(e.length<2))for(const o of e)s.set(o,e.filter(e=>e!==o));return s}(P||[]),[P]),Z=(0,t.useMemo)(()=>Object.fromEntries((P||[]).map(e=>[e.id,Ee(e)])),[P]),G=e=>A(e,{type:"snackbar"}),I=(e,o)=>D(e?.message||o,{type:"snackbar"}),W=!P||!e,U=P?function(e,{type:o,status:s,search:t}){const r=t.trim().toLowerCase();return e.filter(e=>("all"===o||ke(e)===o)&&("all"===s||Ce(e)===("active"===s))&&(!r||Ee(e).toLowerCase().includes(r)))}(P,{type:m,status:g,search:w}):[],q=M?.message||s;return(0,j.jsxs)("div",{className:"section noah-templates",children:[(0,j.jsxs)("div",{className:"noah-templates__header",children:[(0,j.jsxs)("div",{children:[(0,j.jsx)("h1",{children:(0,a.__)("Templates","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Design your product, shop, cart and checkout pages. Active templates replace the matching WooCommerce page.","noah-shop-builder-for-woocommerce")})]}),(0,j.jsxs)("div",{className:"noah-templates__header-actions",children:[P&&(0,z.applyFilters)("noahShopBuilder.templates.headerActions",[],{templates:P,refresh:T}),P&&P.length>0&&(0,j.jsx)(n.Button,{variant:"primary",icon:K,onClick:()=>u(!0),disabled:!e,__next40pxDefaultSize:!0,children:(0,a.__)("Add New Template","noah-shop-builder-for-woocommerce")})]})]}),q&&(0,j.jsx)(n.Notice,{status:"error",isDismissible:!1,children:q}),W&&!q&&(0,j.jsxs)("div",{className:"noah-templates__loading",children:[(0,j.jsx)(n.Spinner,{}),(0,j.jsx)("p",{children:(0,a.__)("Loading templates…","noah-shop-builder-for-woocommerce")})]}),!W&&0===P.length&&(0,j.jsx)(Ge,{onCreate:()=>u(!0)}),!W&&P.length>0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)("div",{className:"noah-templates__toolbar",children:[(0,j.jsx)(Oe,{types:e,list:P,value:m,onChange:p}),(0,j.jsxs)("div",{className:"noah-templates__toolbar-end",children:[(0,j.jsx)("div",{className:"noah-segmented",role:"group","aria-label":(0,a.__)("Status","noah-shop-builder-for-woocommerce"),children:Object.entries(Ae).map(([e,o])=>(0,j.jsx)("button",{type:"button","aria-pressed":g===e,className:g===e?"is-selected":"",onClick:()=>_(e),children:o},e))}),(0,j.jsx)(n.SearchControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Search templates","noah-shop-builder-for-woocommerce"),placeholder:(0,a.__)("Search templates","noah-shop-builder-for-woocommerce"),value:w,onChange:x})]})]}),(0,j.jsxs)("div",{className:"noah-templates__table",role:"table",children:[(0,j.jsxs)("div",{className:"noah-templates__head",role:"row",children:[(0,j.jsx)("span",{role:"columnheader",children:(0,a.__)("Template","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("span",{role:"columnheader",children:(0,a.__)("Shows on","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("span",{role:"columnheader",children:(0,a.__)("Status","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("span",{role:"columnheader",className:"screen-reader-text",children:(0,a.__)("Actions","noah-shop-builder-for-woocommerce")})]}),U.map(e=>(0,j.jsx)(Ze,{template:e,typeLabel:H[ke(e)]||ke(e),conflicts:(O.get(e.id)||[]).map(e=>`“${Z[e]}”`),active:v[e.id]??Ce(e),isBusy:e.id in v,onToggle:o=>(async(e,o)=>{b(s=>({...s,[e.id]:o}));try{await B("postType",fe,{id:e.id,status:o?Se:"draft"},{throwOnError:!0}),G(o?(0,a.__)("Template activated.","noah-shop-builder-for-woocommerce"):(0,a.__)("Template deactivated.","noah-shop-builder-for-woocommerce"))}catch(e){I(e,(0,a.__)("The status could not be saved.","noah-shop-builder-for-woocommerce"))}finally{b(({[e.id]:o,...s})=>s)}})(e,o),onPreview:()=>k(e),onDuplicate:()=>(async e=>{b(o=>({...o,[e.id]:Ce(e)}));try{await B("postType",fe,{title:(0,a.sprintf)(/* translators: %s: template name. */ /* translators: %s: template name. */
     15(0,a.__)("%s (Copy)","noah-shop-builder-for-woocommerce"),Ee(e)),content:e.content?.raw??"",status:"draft",meta:e.meta},{throwOnError:!0}),G((0,a.__)("Template duplicated as inactive.","noah-shop-builder-for-woocommerce"))}catch(e){I(e,(0,a.__)("The template could not be duplicated.","noah-shop-builder-for-woocommerce"))}finally{b(({[e.id]:o,...s})=>s)}})(e),onDelete:()=>y(e),refresh:T},e.id)),0===U.length&&(0,j.jsxs)("div",{className:"noah-templates__no-results",children:[(0,j.jsx)("p",{children:(0,a.__)("No templates match these filters.","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"link",onClick:()=>{p("all"),_("all"),x("")},children:(0,a.__)("Clear filters","noah-shop-builder-for-woocommerce")})]})]})]}),S&&(0,j.jsx)(pe,{url:S.noah_preview_url,title:Ee(S)||(0,a.__)("(no title)","noah-shop-builder-for-woocommerce"),onClose:()=>k(null),action:(0,j.jsx)(n.Button,{variant:"primary",size:"compact",href:De(S.id),children:(0,a.__)("Edit","noah-shop-builder-for-woocommerce")})}),h&&e&&(0,j.jsx)(Re,{types:e,onClose:()=>u(!1)}),f&&(0,j.jsxs)(n.Modal,{title:(0,a.__)("Delete template?","noah-shop-builder-for-woocommerce"),onRequestClose:()=>!N&&y(null),size:"small",children:[(0,j.jsx)("p",{children:(0,a.sprintf)(/* translators: %s: template name. */ /* translators: %s: template name. */
     16(0,a.__)("“%s” will be deleted permanently. Pages that use it go back to their default design.","noah-shop-builder-for-woocommerce"),Ee(f))}),(0,j.jsxs)("div",{className:"noah-templates-modal__footer",children:[(0,j.jsx)(n.Button,{variant:"tertiary",onClick:()=>y(null),disabled:N,children:(0,a.__)("Cancel","noah-shop-builder-for-woocommerce")}),(0,j.jsx)(n.Button,{variant:"primary",isDestructive:!0,isBusy:N,disabled:N,onClick:async()=>{C(!0);try{await L("postType",fe,f.id,{force:!0},{throwOnError:!0}),G((0,a.__)("Template deleted.","noah-shop-builder-for-woocommerce")),y(null)}catch(e){I(e,(0,a.__)("The template could not be deleted.","noah-shop-builder-for-woocommerce"))}finally{C(!1)}},children:(0,a.__)("Delete","noah-shop-builder-for-woocommerce")})]})]})]})},settings:function(){const{settings:e,loadError:o,isLoaded:s}=(0,l.useSelect)(e=>{const o=e(f);return{settings:o.getSettings(),loadError:o.getSettingsLoadError(),isLoaded:o.hasFinishedResolution("getSettings")}},[]),{saveSetting:t}=(0,l.useDispatch)(f);return s?(0,j.jsxs)("div",{className:"section noah-shop-builder-settings",children:[o&&(0,j.jsx)(n.Notice,{status:"error",isDismissible:!1,children:o}),(0,j.jsx)("h1",{children:(0,a.__)("Settings","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("p",{children:(0,a.__)("Changes are saved automatically.","noah-shop-builder-for-woocommerce")}),(0,j.jsxs)("div",{className:"settings-group",children:[(0,j.jsx)("h2",{children:(0,a.__)("Data","noah-shop-builder-for-woocommerce")}),(0,j.jsx)("div",{className:"settings-card",children:(0,j.jsx)(n.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Delete all data when the plugin is deleted","noah-shop-builder-for-woocommerce"),help:(0,a.__)("When you delete Noah Shop Builder on the Plugins screen, its templates, settings, swatch settings and saved wishlists are removed for good. Deactivating the plugin never removes data. Add-ons that use this setting remove their own data too.","noah-shop-builder-for-woocommerce"),checked:!!e.delete_data,disabled:!!o,onChange:e=>t("delete_data",e)})})]})]}):(0,j.jsx)("div",{className:"section",children:(0,j.jsxs)("div",{style:{textAlign:"center",padding:"50px"},children:[(0,j.jsx)(n.Spinner,{}),(0,j.jsx)("p",{children:(0,a.__)("Loading settings…","noah-shop-builder-for-woocommerce")})]})})}},eo=function(){const e=()=>{const e=(0,r.getQueryArgs)(window.location.search).subpage||window.location.hash?.slice(1)||"welcome";return Ye[e]?e:"welcome"},[o,s]=(0,t.useState)(e()),a=(e,o={})=>{const t=(0,r.addQueryArgs)(window.location.pathname,{page:"noah-shop-builder",subpage:e,...o});window.history.pushState({},"",t),s(e),n(e)},n=e=>{const o=document.querySelectorAll("#toplevel_page_noah-shop-builder ul li");for(const s of o){const o=s.querySelector("a"),t=!!o&&(0,r.getQueryArg)(o.href,"subpage")===e;s.classList.toggle("current",t),o&&(o.classList.toggle("current",t),t?o.setAttribute("aria-current","page"):o.removeAttribute("aria-current"))}};(0,t.useEffect)(()=>{n(o);const t=()=>{const o=e();s(o),n(o)};window.addEventListener("popstate",t);const l=document.querySelectorAll("#toplevel_page_noah-shop-builder ul li a"),i=e=>{const o=e.currentTarget.href,s=(0,r.getQueryArg)(o,"subpage");"noah-shop-builder"===(0,r.getQueryArg)(o,"page")&&Ye[s]&&(e.preventDefault(),a(s))};for(const e of l)e.addEventListener("click",i);return()=>{window.removeEventListener("popstate",t);for(const e of l)e.removeEventListener("click",i)}},[o]);const l=Ye[o]||Ye.welcome;return(0,j.jsxs)(t.Fragment,{children:[(0,j.jsx)(Xe,{links:Ye,currentPage:o,setCurrentPage:a}),(0,j.jsx)("div",{className:"noah-shop-builder-wrapper",children:(0,j.jsx)(l,{onPageChange:a})}),(0,j.jsx)(Je,{})]})},oo=document.getElementById("noah-shop-builder-admin-dashboard");oo&&(0,t.createRoot)(oo).render((0,j.jsx)(eo,{}))}};const o={};function s(t){const r=o[t];if(void 0!==r)return r.exports;const a=o[t]={exports:{}};return e[t](a,a.exports,s),a.exports}s.m=e,(()=>{const e=[];s.O=(o,t,r)=>{if(!t){for(var a=0;a<e.length;a++){let[t,r]=e[a],l=!0;for(var n=0;n<t.length;n++)s.O.j(t[n])?t.splice(n--,1):l=!1;if(l){e.splice(a--,1);const s=r();void 0!==s&&(o=s)}}return o}e.push([t,r])}})(),s.n=e=>{const o=e&&e.__esModule?()=>e.default:()=>e;return s.d(o,{a:o}),o},s.d=(e,o)=>{for(var t in o)s.o(o,t)&&!s.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:o[t]})},s.o=(e,o)=>Object.hasOwn(e,o),(()=>{const e={7:0,868:0};s.O.j=o=>0===e[o];const o=(o,t)=>{let[r,a,n]=t;var l,i,c=0;if(r.some(o=>0!==e[o])){for(l in a)s.o(a,l)&&(s.m[l]=a[l]);if(n)var d=n(s)}for(o&&o(t);c<r.length;c++)i=r[c],s.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return s.O(d)},t=globalThis.webpackChunknoah_shop_builder_for_woocommerce||=[];t.forEach(o.bind(null,0)),t.push=o.bind(null,t.push.bind(t))})();let t=s.O(void 0,[868],()=>s(232));t=s.O(t)})();
  • noah-shop-builder-for-woocommerce/trunk/build/style-admin-dashboard-rtl.css

    r3800774 r3801491  
    11.noah-templates__header{align-items:flex-start;display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between;margin-bottom:24px}.noah-templates__header h1{margin:0 0 6px}.noah-templates__header p{margin:0;max-width:640px}.noah-templates__header-actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.noah-templates__header-actions:empty{display:none}.noah-templates__loading{padding:50px;text-align:center}.noah-templates__toolbar{align-items:center;display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;margin-bottom:16px}.noah-templates__toolbar-end{align-items:center;display:flex;flex-wrap:wrap;gap:12px}.noah-templates__toolbar-end .components-search-control{min-width:220px}.noah-templates__table{border:1px solid #e2e4e7;border-radius:12px;overflow:hidden}.noah-templates .noah-template-row,.noah-templates__head{align-items:center;display:grid;gap:16px;grid-template-columns:minmax(240px,2.2fr) minmax(160px,1.4fr) 130px 150px;padding:14px 20px}.noah-templates__head{background:#f9fafb;border-bottom:1px solid #e2e4e7;color:#6b7280;font-size:12px;font-weight:600;letter-spacing:.04em;padding-block:10px;text-transform:uppercase}.noah-templates__no-results{padding:40px 20px;text-align:center}.noah-templates__no-results p{margin:0 0 8px}.noah-template-row{border-bottom:1px solid #e2e4e7;transition:background .15s ease}.noah-template-row:last-child{border-bottom:0}.noah-template-row:hover{background:#fafaff}.noah-template-row__main{align-items:center;display:flex;gap:14px;min-width:0}.noah-template-row__main>div{min-width:0}.noah-template-row__icon{align-items:center;background:#eef2ff;border-radius:10px;color:#4f46e5;display:inline-flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.noah-template-row__icon svg{fill:currentcolor}.noah-template-row__title{color:#1d2327;display:block;font-size:14px;font-weight:600;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.noah-template-row__title:focus,.noah-template-row__title:hover{color:#4f46e5}.noah-template-row__meta{align-items:center;color:#6b7280;display:flex;font-size:12px;gap:8px;margin-top:4px}.noah-template-row__display{flex-wrap:wrap}.noah-template-row__display,.noah-template-row__status{align-items:center;display:flex;gap:8px}.noah-template-row__status label{color:#1d2327;cursor:pointer;font-size:13px}.noah-template-row__actions{align-items:center;display:flex;gap:4px;justify-content:flex-end}.noah-template-row.is-inactive .noah-template-row__icon{background:#f3f4f6;color:#6b7280}.noah-template-row.is-inactive .noah-template-row__status label{color:#6b7280}.noah-pill{background:#f3f4f6;border-radius:999px;color:#374151;display:inline-block;font-weight:500;padding:2px 8px}.noah-display{color:#1d2327;font-size:13px}.noah-display:before{background:#10b981;border-radius:50%;content:"";display:inline-block;height:8px;margin-inline-end:8px;width:8px}.noah-display--custom:before{background:#4f46e5}.noah-display--none{color:#6b7280}.noah-display--none:before{background:#d1d5db}.noah-badge{align-items:center;border-radius:999px;cursor:help;display:inline-flex;font-size:12px;font-weight:500;gap:4px;padding:2px 4px 2px 8px}.noah-badge svg{fill:currentcolor}.noah-badge--warning{background:#fef3c7;color:#92400e}.noah-type-filter{display:flex;flex-wrap:wrap;gap:6px}.noah-type-filter button{align-items:center;background:#fff;border:1px solid #e2e4e7;border-radius:999px;color:#374151;cursor:pointer;display:inline-flex;font-size:13px;gap:6px;padding:6px 12px;transition:all .15s ease}.noah-type-filter button:hover{border-color:#4f46e5;color:#4f46e5}.noah-type-filter button:focus-visible{outline:2px solid #4f46e5;outline-offset:1px}.noah-type-filter button.is-selected{background:#4f46e5;border-color:#4f46e5;color:#fff}.noah-type-filter button.is-selected .noah-type-filter__count{background:hsla(0,0%,100%,.2);color:#fff}.noah-type-filter__count{background:#f3f4f6;border-radius:999px;color:#6b7280;font-size:11px;line-height:18px;min-width:18px;padding:0 6px;text-align:center}.noah-segmented{background:#f3f4f6;border-radius:8px;display:inline-flex;padding:3px}.noah-segmented button{background:transparent;border:0;border-radius:6px;color:#6b7280;cursor:pointer;font-size:13px;padding:6px 12px}.noah-segmented button:focus-visible{outline:2px solid #4f46e5}.noah-segmented button.is-selected{background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.08);color:#1d2327}.noah-templates-empty{padding:40px 20px 20px;text-align:center}.noah-templates-empty h2{color:#1d2327;font-size:20px;margin:0 0 8px}.noah-templates-empty__steps{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));list-style:none;margin:24px auto 28px;max-width:760px;padding:0}.noah-templates-empty__steps li{align-items:center;border:1px dashed #e2e4e7;border-radius:12px;color:#6b7280;display:flex;flex-direction:column;font-size:13px;gap:6px;margin:0;padding:20px 16px}.noah-templates-empty__steps li strong{color:#1d2327;font-size:14px}.noah-templates-empty__number{align-items:center;background:linear-gradient(-135deg,#667eea,#764ba2);border-radius:50%;color:#fff;display:inline-flex;font-weight:600;height:28px;justify-content:center;width:28px}.noah-templates-modal__steps{display:flex;gap:6px;margin:-8px 0 16px}.noah-templates-modal__steps span{background:#e5e7eb;border-radius:2px;flex:1;height:4px;transition:background .2s ease}.noah-templates-modal__steps span.is-active{background:#4f46e5}.noah-templates-modal__intro{color:#6b7280;margin:0 0 16px}.noah-templates-modal__form{display:flex;flex-direction:column;gap:20px;max-width:640px}.noah-templates-modal__field{border:0;margin:0;padding:0}.noah-templates-modal__field legend{color:#1d2327;font-size:11px;font-weight:500;margin-bottom:8px;padding:0;text-transform:uppercase}.noah-templates-modal__footer{display:flex;gap:8px;justify-content:flex-end;margin-top:8px}.noah-type-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.noah-type-card{align-items:flex-start;background:#fff;border:1px solid #e2e4e7;border-radius:12px;cursor:pointer;display:flex;flex-direction:column;gap:6px;padding:18px;text-align:start;transition:all .15s ease}.noah-type-card strong{color:#1d2327;font-size:14px;margin-top:6px}.noah-type-card__description{color:#6b7280;font-size:12px;line-height:1.5}.noah-type-card__starters{background:#eef2ff;border-radius:999px;color:#4f46e5;font-size:11px;font-weight:600;margin-top:auto;padding:2px 8px}.noah-type-card:focus-visible,.noah-type-card:hover{border-color:#4f46e5;box-shadow:0 4px 14px rgba(79,70,229,.12);outline:none;transform:translateY(-1px)}.noah-type-card__icon{align-items:center;background:#eef2ff;border-radius:10px;color:#4f46e5;display:inline-flex;height:44px;justify-content:center;width:44px}.noah-type-card__icon svg{fill:currentcolor}.noah-templates-modal__subheader{align-items:center;display:flex;gap:12px;margin-bottom:16px}.noah-templates-modal__subheader .noah-templates-modal__intro{margin:0}.noah-templates-modal__subheader .components-button{flex-shrink:0}.noah-templates-modal__footer.has-back{justify-content:space-between}.noah-templates-modal__footer-end{display:flex;gap:8px}.noah-design-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.noah-design-card{background:#fff;border:1px solid #e2e4e7;border-radius:12px;overflow:hidden;position:relative;transition:all .15s ease}.noah-design-card__select{background:transparent;border:0;cursor:pointer;display:flex;flex-direction:column;height:100%;padding:0;text-align:start;width:100%}.noah-design-card__select:focus-visible{outline:2px solid #4f46e5;outline-offset:-2px}.noah-design-card__preview-button.components-button{background:#fff;inset-inline-end:10px;opacity:0;position:absolute;top:10px;transition:opacity .15s ease}.noah-design-card:focus-within .noah-design-card__preview-button,.noah-design-card:hover .noah-design-card__preview-button{opacity:1}@media(hover:none){.noah-design-card__preview-button.components-button{opacity:1}}.noah-design-card__blocks{align-self:flex-start;border-radius:999px;font-size:11px;font-weight:600;margin-top:4px;padding:1px 8px}.noah-design-card__blocks.is-noah{background:#eef2ff;color:#4f46e5}.noah-design-card__blocks.is-woocommerce{background:#f3e8ff;color:#7e22ce}.noah-design-card__preview{background:#f8f9fc;border-bottom:1px solid #e2e4e7;display:block;padding:14px}.noah-design-card__body{color:#6b7280;display:flex;flex-direction:column;font-size:12px;gap:4px;line-height:1.5;padding:14px 16px 16px}.noah-design-card__body strong{color:#1d2327;font-size:14px}.noah-design-card:focus-within,.noah-design-card:hover{border-color:#4f46e5;box-shadow:0 6px 18px rgba(79,70,229,.14);transform:translateY(-2px)}.noah-preview-modal .components-modal__content{background:#f0f0f1;display:flex;flex-direction:column;padding:0}.noah-preview-modal__actions{align-items:center;display:flex;gap:8px;margin-inline-end:8px}.noah-preview-modal__actions .noah-segmented .components-button{color:#6b7280;height:28px}.noah-preview-modal__actions .noah-segmented .components-button.is-selected{background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.08);color:#1d2327}.noah-preview-modal__stage{display:flex;flex:1;justify-content:center;min-height:0;padding:16px;position:relative}.noah-preview-modal__stage iframe{background:#fff;border:0;border-radius:8px;box-shadow:0 4px 24px rgba(0,0,0,.1);height:100%;max-width:100%;min-height:70vh;transition:width .25s ease,opacity .2s ease}.noah-preview-modal__stage iframe.is-loading{opacity:0}.noah-preview-modal__loading{align-items:center;display:flex;flex-direction:column;gap:8px;inset:0;justify-content:center;position:absolute}.noah-wireframe{background:#fff;border-radius:6px;box-shadow:0 1px 3px rgba(0,0,0,.06);display:block;height:auto;width:100%}.noah-wireframe__image{fill:#e0e7ff}.noah-wireframe__heading{fill:#9ca3af}.noah-wireframe__line{fill:#e5e7eb}.noah-wireframe__accent{fill:#4f46e5}.noah-wireframe__box{fill:#fff;stroke:#d1d5db;stroke-width:1}.noah-wireframe__dashed{fill:none;stroke:#c7cbd1;stroke-dasharray:5 4;stroke-width:1.5}.noah-wireframe__accent-stroke{fill:none;stroke:#4f46e5;stroke-linecap:round;stroke-width:3}.noah-selected-type{align-items:center;background:#eef2ff;border-radius:12px;display:flex;gap:14px;padding:14px}.noah-selected-type>div{color:#6b7280;display:flex;flex:1;flex-direction:column;font-size:12px;gap:2px}.noah-selected-type>div strong{color:#1d2327;font-size:14px}.noah-selected-type .noah-type-card__icon{background:#fff}.noah-option-cards{display:grid;gap:10px;grid-template-columns:repeat(2,1fr)}.noah-option-card{align-items:flex-start;background:#fff;border:1px solid #e2e4e7;border-radius:10px;cursor:pointer;display:flex;gap:10px;padding:12px 14px;text-align:start;transition:border-color .15s ease}.noah-option-card>span:last-child{color:#6b7280;display:flex;flex-direction:column;font-size:12px;gap:2px}.noah-option-card>span:last-child strong{color:#1d2327;font-size:13px}.noah-option-card__radio{border:1.5px solid #9ca3af;border-radius:50%;box-sizing:border-box;flex-shrink:0;height:16px;margin-top:1px;width:16px}.noah-option-card:hover{border-color:#4f46e5}.noah-option-card:focus-visible{outline:2px solid #4f46e5;outline-offset:1px}.noah-option-card.is-selected{background:#eef2ff;border-color:#4f46e5}.noah-option-card.is-selected .noah-option-card__radio{border:5px solid #4f46e5}@media(max-width:960px){.noah-templates__head{display:none}.noah-template-row{grid-template-columns:1fr auto;row-gap:10px}.noah-template-row__display{grid-column:1;padding-inline-start:54px}.noah-template-row__status{grid-column:2;grid-row:1}.noah-template-row__actions{grid-column:2}.noah-option-cards{grid-template-columns:1fr}}
    2 .noah-shop-builder-dashboard-header{background:linear-gradient(-135deg,#f5f7fa,#f0f2f5);border-radius:16px;box-shadow:0 2px 8px rgba(0,0,0,.05);margin:0 0 24px;padding:16px}.noah-shop-builder-dashboard-header .noah-shop-builder-header-container{max-width:100%}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav{backdrop-filter:blur(10px);background:hsla(0,0%,100%,.6);border-radius:12px;display:flex;gap:8px;justify-content:center;padding:6px;position:relative}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-indicator{background:linear-gradient(-135deg,#667eea,#764ba2);border-radius:8px;box-shadow:0 4px 12px rgba(102,126,234,.4),0 2px 4px rgba(102,126,234,.2);height:calc(100% - 12px);right:6px;pointer-events:none;position:absolute;top:6px;transition:all .4s cubic-bezier(.34,1.56,.64,1);z-index:0}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-indicator:before{background:linear-gradient(-135deg,hsla(0,0%,100%,.2),hsla(0,0%,100%,0));border-radius:8px;bottom:0;content:"";right:0;position:absolute;left:0;top:0}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button{align-items:center;background:transparent;border:none;border-radius:8px;color:#6b7280;cursor:pointer;display:flex;font-size:14px;font-weight:500;gap:8px;padding:12px 24px;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1);white-space:nowrap;z-index:1}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button svg{fill:currentcolor}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button:hover{color:#4f46e5}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button.active{color:#fff;z-index:1}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button.active svg{filter:drop-shadow(0 1px 2px rgba(0,0,0,.1))}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button:active{transform:translateY(0)}@media(max-width:600px){.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav{gap:4px;justify-content:space-between}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button{padding:10px 16px}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button span{clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}}@keyframes slideIn{0%{opacity:0;transform:translateY(0) scale(.95)}to{opacity:1;transform:translateY(-2px) scale(1)}}.noah-shop-builder-wrapper{margin:20px auto;max-width:1200px;padding:20px}.noah-shop-builder-wrapper h1{color:#1d2327;font-size:24px;margin-bottom:20px}.noah-shop-builder-wrapper p{color:#50575e;font-size:14px;line-height:1.6;margin-bottom:20px}.noah-shop-builder-wrapper .section{background:#fff;border:1px solid #c3c4c7;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.04);margin-bottom:20px;padding:30px}.noah-shop-builder-wrapper .button-group{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}.noah-shop-builder-wrapper .button-group button{margin:0}.noah-shop-builder-snackbars{inset-block-end:24px;inset-inline-start:184px;position:fixed;z-index:100000}.folded .noah-shop-builder-snackbars{inset-inline-start:60px}@media(max-width:782px){.noah-shop-builder-snackbars{inset-inline-start:16px}}.noah-shop-builder-blocks .blocks-header{align-items:flex-start;display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between;margin-bottom:30px}.noah-shop-builder-blocks .blocks-header h1{margin:0 0 8px}.noah-shop-builder-blocks .blocks-header p{margin:0}.noah-shop-builder-blocks .blocks-header .header-actions{align-items:center;display:flex;gap:20px}.noah-shop-builder-blocks .blocks-header .header-actions .bulk-toggle{align-items:center;background:#f6f7f7;border-radius:6px;display:flex;gap:12px;padding:8px 16px}.noah-shop-builder-blocks .blocks-header .header-actions .bulk-toggle label{color:#50575e;font-size:13px;font-weight:500;margin:0}.noah-shop-builder-blocks .blocks-header .header-actions .bulk-toggle .components-form-toggle{margin:0}.noah-shop-builder-blocks .blocks-category{margin-bottom:40px}.noah-shop-builder-blocks .blocks-category h2{border-bottom:2px solid #e8e8e8;color:#1d2327;font-size:18px;font-weight:600;margin:0 0 20px;padding-bottom:10px}.noah-shop-builder-blocks .blocks-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));margin-bottom:20px}.noah-shop-builder-blocks .block-card{align-items:center;background:#fff;border:1px solid #dcdcde;border-radius:8px;display:flex;justify-content:space-between;padding:20px;transition:all .2s ease}.noah-shop-builder-blocks .block-card:hover{border-color:#2271b1;box-shadow:0 2px 8px rgba(0,0,0,.08)}.noah-shop-builder-blocks .block-card .block-info{flex:1}.noah-shop-builder-blocks .block-card .block-info h3{color:#1d2327;font-size:15px;font-weight:600;margin:0 0 8px}.noah-shop-builder-blocks .block-card .components-form-toggle{flex-shrink:0;margin:0}.noah-shop-builder-blocks .blocks-footer{border-top:1px solid #dcdcde;display:flex;justify-content:flex-end;padding-top:20px}.noah-shop-builder-welcome h2{color:#1d2327;font-size:18px;font-weight:600;margin:0 0 20px}.noah-shop-builder-welcome h3{color:#1d2327;font-size:15px;font-weight:600;margin:0 0 8px}.noah-shop-builder-welcome .welcome-hero{background:linear-gradient(-135deg,#667eea,#764ba2);border:none;border-radius:8px}.noah-shop-builder-welcome .welcome-hero h1,.noah-shop-builder-welcome .welcome-hero p{color:#fff}.noah-shop-builder-welcome .welcome-hero p{font-size:15px;max-width:640px}.noah-shop-builder-welcome .welcome-hero .components-button.is-primary{background:#fff;color:#4f46e5}.noah-shop-builder-welcome .welcome-hero .components-button.is-secondary{box-shadow:inset 0 0 0 1px #fff;color:#fff}.noah-shop-builder-welcome .welcome-steps{counter-reset:noah-step;display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));list-style:none;margin:0;padding:0}.noah-shop-builder-welcome .welcome-steps li{background:#f6f7f7;border-radius:8px;counter-increment:noah-step;margin:0;padding:20px}.noah-shop-builder-welcome .welcome-steps li:before{align-items:center;background:#4f46e5;border-radius:50%;color:#fff;content:counter(noah-step);display:flex;font-weight:600;height:28px;justify-content:center;margin-bottom:12px;width:28px}.noah-shop-builder-welcome .welcome-steps p{margin:0}.noah-shop-builder-welcome .welcome-cards{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.noah-shop-builder-welcome .welcome-card{border:1px solid #dcdcde;border-radius:8px;padding:20px}.noah-shop-builder-welcome .welcome-card p{margin:0}.noah-shop-builder-welcome .welcome-card-icon{background:#eef2ff;border-radius:8px;color:#4f46e5;display:inline-flex;margin-bottom:12px;padding:8px}.noah-shop-builder-welcome .welcome-card-icon svg{fill:currentcolor}.noah-shop-builder-welcome .welcome-columns{display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.noah-shop-builder-welcome .welcome-columns .section{margin-bottom:0}.noah-badges{display:inline-flex;flex-wrap:wrap;gap:6px}.noah-badges .badge{background:#f0f0f1;border-radius:3px;color:#50575e;display:inline-block;font-size:11px;font-weight:600;letter-spacing:.3px;line-height:1.6;padding:2px 8px;text-transform:uppercase}.noah-badges .badge-new{background:#e7f5ff;color:#1971c2}.noah-badges .badge-beta{background:#fff3bf;color:#f59e0b}.noah-module-settings{width:min(480px,100vw - 32px)}.noah-module-settings .noah-module-settings__fields{display:flex;flex-direction:column;gap:20px}.noah-module-settings .noah-module-settings__actions{display:flex;gap:8px;justify-content:flex-end;margin-top:24px}.noah-shop-builder-settings .settings-group h2{border-bottom:2px solid #e8e8e8;color:#1d2327;font-size:18px;font-weight:600;margin:0 0 20px;padding-bottom:10px}.noah-shop-builder-settings .settings-card{background:#fff;border:1px solid #dcdcde;border-radius:8px;max-width:720px;padding:20px}.noah-shop-builder-settings .settings-card .components-base-control__help,.noah-shop-builder-settings .settings-card .components-toggle-control__help{margin:8px 0 0}.noah-shop-builder-modules .modules-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));margin-bottom:24px}.noah-shop-builder-modules .module-card{background:#fff;border:1px solid #dcdcde;border-radius:8px;padding:20px}.noah-shop-builder-modules .module-card h3{color:#1d2327;font-size:15px;font-weight:600;margin:0 0 8px}.noah-shop-builder-modules .module-card p{margin:0}.noah-shop-builder-modules .module-card.is-active{border-color:var(--wp-admin-theme-color,#3858e9)}.noah-shop-builder-modules .module-card .module-card-settings{margin-top:16px}.noah-shop-builder-modules>h2{font-size:15px;margin:8px 0 12px}.noah-shop-builder-modules .module-card-header{align-items:flex-start;display:flex;justify-content:space-between;margin-bottom:12px}.noah-shop-builder-modules .module-icon{background:#f6f7f7;border-radius:8px;color:#50575e;display:inline-flex;padding:8px}.noah-shop-builder-modules .module-icon svg{fill:currentcolor}.noah-shop-builder-modules .badge-upcoming{background:#fff3bf;border-radius:3px;color:#8a6100;display:inline-block;font-size:11px;font-weight:600;letter-spacing:.3px;padding:2px 8px;text-transform:uppercase}.noah-shop-builder-modules .modules-note{border-top:1px solid #dcdcde;padding-top:20px}.noah-shop-builder-modules .modules-note p{margin:0}
     2.noah-shop-builder-dashboard-header{background:linear-gradient(-135deg,#f5f7fa,#f0f2f5);border-radius:16px;box-shadow:0 2px 8px rgba(0,0,0,.05);margin:0 0 24px;padding:16px}.noah-shop-builder-dashboard-header .noah-shop-builder-header-container{max-width:100%}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav{backdrop-filter:blur(10px);background:hsla(0,0%,100%,.6);border-radius:12px;display:flex;gap:8px;justify-content:center;padding:6px;position:relative}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-indicator{background:linear-gradient(-135deg,#667eea,#764ba2);border-radius:8px;box-shadow:0 4px 12px rgba(102,126,234,.4),0 2px 4px rgba(102,126,234,.2);height:calc(100% - 12px);right:6px;pointer-events:none;position:absolute;top:6px;transition:all .4s cubic-bezier(.34,1.56,.64,1);z-index:0}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-indicator:before{background:linear-gradient(-135deg,hsla(0,0%,100%,.2),hsla(0,0%,100%,0));border-radius:8px;bottom:0;content:"";right:0;position:absolute;left:0;top:0}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button{align-items:center;background:transparent;border:none;border-radius:8px;color:#6b7280;cursor:pointer;display:flex;font-size:14px;font-weight:500;gap:8px;padding:12px 24px;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1);white-space:nowrap;z-index:1}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button svg{fill:currentcolor}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button:hover{color:#4f46e5}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button.active{color:#fff;z-index:1}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button.active svg{filter:drop-shadow(0 1px 2px rgba(0,0,0,.1))}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button:active{transform:translateY(0)}@media(max-width:600px){.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav{gap:4px;justify-content:space-between}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button{padding:10px 16px}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button span{clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}}@keyframes slideIn{0%{opacity:0;transform:translateY(0) scale(.95)}to{opacity:1;transform:translateY(-2px) scale(1)}}.noah-shop-builder-wrapper{margin:20px auto;max-width:1200px;padding:20px}.noah-shop-builder-wrapper h1{color:#1d2327;font-size:24px;margin-bottom:20px}.noah-shop-builder-wrapper p{color:#50575e;font-size:14px;line-height:1.6;margin-bottom:20px}.noah-shop-builder-wrapper .section{background:#fff;border:1px solid #c3c4c7;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.04);margin-bottom:20px;padding:30px}.noah-shop-builder-wrapper .button-group{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}.noah-shop-builder-wrapper .button-group button{margin:0}.noah-shop-builder-snackbars{inset-block-end:24px;inset-inline-start:184px;position:fixed;z-index:100000}.folded .noah-shop-builder-snackbars{inset-inline-start:60px}@media(max-width:782px){.noah-shop-builder-snackbars{inset-inline-start:16px}}.noah-shop-builder-blocks .blocks-header{align-items:flex-start;display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between;margin-bottom:30px}.noah-shop-builder-blocks .blocks-header h1{margin:0 0 8px}.noah-shop-builder-blocks .blocks-header p{margin:0}.noah-shop-builder-blocks .blocks-header .header-actions{align-items:center;display:flex;gap:20px}.noah-shop-builder-blocks .blocks-header .header-actions .bulk-toggle{align-items:center;background:#f6f7f7;border-radius:6px;display:flex;gap:12px;padding:8px 16px}.noah-shop-builder-blocks .blocks-header .header-actions .bulk-toggle label{color:#50575e;font-size:13px;font-weight:500;margin:0}.noah-shop-builder-blocks .blocks-header .header-actions .bulk-toggle .components-form-toggle{margin:0}.noah-shop-builder-blocks .blocks-category{margin-bottom:40px}.noah-shop-builder-blocks .blocks-category h2{border-bottom:2px solid #e8e8e8;color:#1d2327;font-size:18px;font-weight:600;margin:0 0 20px;padding-bottom:10px}.noah-shop-builder-blocks .blocks-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));margin-bottom:20px}.noah-shop-builder-blocks .block-card{align-items:center;background:#fff;border:1px solid #dcdcde;border-radius:8px;display:flex;justify-content:space-between;padding:20px;transition:all .2s ease}.noah-shop-builder-blocks .block-card:hover{border-color:#2271b1;box-shadow:0 2px 8px rgba(0,0,0,.08)}.noah-shop-builder-blocks .block-card .block-info{flex:1}.noah-shop-builder-blocks .block-card .block-info h3{color:#1d2327;font-size:15px;font-weight:600;margin:0 0 8px}.noah-shop-builder-blocks .block-card .block-info .block-doc-link{align-items:center;color:#2271b1;display:inline-flex;font-size:13px;gap:4px;margin-right:12px;margin-top:8px;text-decoration:none}.noah-shop-builder-blocks .block-card .block-info .block-doc-link:after{content:"↗";font-size:11px}.noah-shop-builder-blocks .block-card .block-info .block-doc-link:focus,.noah-shop-builder-blocks .block-card .block-info .block-doc-link:hover{color:#135e96;text-decoration:underline}.noah-shop-builder-blocks .block-card .block-info h3+.block-doc-link{margin-right:0}.noah-shop-builder-blocks .block-card .components-form-toggle{flex-shrink:0;margin:0}.noah-shop-builder-blocks .blocks-footer{border-top:1px solid #dcdcde;display:flex;justify-content:flex-end;padding-top:20px}.noah-shop-builder-welcome h2{color:#1d2327;font-size:18px;font-weight:600;margin:0 0 20px}.noah-shop-builder-welcome h3{color:#1d2327;font-size:15px;font-weight:600;margin:0 0 8px}.noah-shop-builder-welcome .welcome-hero{background:linear-gradient(-135deg,#667eea,#764ba2);border:none;border-radius:8px}.noah-shop-builder-welcome .welcome-hero h1,.noah-shop-builder-welcome .welcome-hero p{color:#fff}.noah-shop-builder-welcome .welcome-hero p{font-size:15px;max-width:640px}.noah-shop-builder-welcome .welcome-hero .components-button.is-primary{background:#fff;color:#4f46e5}.noah-shop-builder-welcome .welcome-hero .components-button.is-secondary{box-shadow:inset 0 0 0 1px #fff;color:#fff}.noah-shop-builder-welcome .welcome-steps{counter-reset:noah-step;display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));list-style:none;margin:0;padding:0}.noah-shop-builder-welcome .welcome-steps li{background:#f6f7f7;border-radius:8px;counter-increment:noah-step;margin:0;padding:20px}.noah-shop-builder-welcome .welcome-steps li:before{align-items:center;background:#4f46e5;border-radius:50%;color:#fff;content:counter(noah-step);display:flex;font-weight:600;height:28px;justify-content:center;margin-bottom:12px;width:28px}.noah-shop-builder-welcome .welcome-steps p{margin:0}.noah-shop-builder-welcome .welcome-cards{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.noah-shop-builder-welcome .welcome-card{border:1px solid #dcdcde;border-radius:8px;padding:20px}.noah-shop-builder-welcome .welcome-card p{margin:0}.noah-shop-builder-welcome .welcome-card-icon{background:#eef2ff;border-radius:8px;color:#4f46e5;display:inline-flex;margin-bottom:12px;padding:8px}.noah-shop-builder-welcome .welcome-card-icon svg{fill:currentcolor}.noah-shop-builder-welcome .welcome-columns{display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.noah-shop-builder-welcome .welcome-columns .section{margin-bottom:0}.noah-badges{display:inline-flex;flex-wrap:wrap;gap:6px}.noah-badges .badge{background:#f0f0f1;border-radius:3px;color:#50575e;display:inline-block;font-size:11px;font-weight:600;letter-spacing:.3px;line-height:1.6;padding:2px 8px;text-transform:uppercase}.noah-badges .badge-new{background:#e7f5ff;color:#1971c2}.noah-badges .badge-beta{background:#fff3bf;color:#f59e0b}.noah-badges .badge-locked{align-items:center;background:#f3e8ff;color:#6b21a8;display:inline-flex;gap:3px}.noah-badges .badge-locked svg{fill:currentcolor}.noah-upgrade-link{align-items:center;color:#6b21a8;display:inline-flex;flex-shrink:0;font-size:13px;font-weight:600;gap:4px;text-decoration:none}.noah-upgrade-link svg{fill:currentcolor}.noah-upgrade-link.is-button{background:#f3e8ff;border:1px solid #e9d5ff;border-radius:999px;padding:5px 9px 5px 12px}.noah-upgrade-link.is-button:focus,.noah-upgrade-link.is-button:hover{background:#6b21a8;border-color:#6b21a8;color:#fff}.noah-upgrade-link.is-text:focus,.noah-upgrade-link.is-text:hover{color:#4c1d95;text-decoration:underline}.noah-upgrade-link:focus{box-shadow:none;outline:2px solid var(--wp-admin-theme-color,#3858e9);outline-offset:2px}.noah-shop-builder-blocks .block-card.is-locked,.noah-shop-builder-modules .module-card.is-locked{background:#fcfaff;border-style:dashed}.noah-shop-builder-blocks .block-card.is-locked:hover,.noah-shop-builder-modules .module-card.is-locked:hover{border-color:#c084fc}.noah-shop-builder-modules .module-card-locked{border-top:1px dashed #dcdcde;margin-top:16px;padding-top:12px}.noah-shop-builder-modules .module-card-locked ul{list-style:none;margin:0 0 8px;padding:0}.noah-shop-builder-modules .module-card-locked li{align-items:center;color:#646970;display:flex;gap:6px;margin:0 0 4px}.noah-shop-builder-modules .module-card-locked li svg{fill:#6b21a8}.noah-module-settings{width:min(480px,100vw - 32px)}.noah-module-settings .noah-module-settings__fields{display:flex;flex-direction:column;gap:20px}.noah-module-settings .noah-module-settings__actions{display:flex;gap:8px;justify-content:flex-end;margin-top:24px}.noah-shop-builder-settings .settings-group h2{border-bottom:2px solid #e8e8e8;color:#1d2327;font-size:18px;font-weight:600;margin:0 0 20px;padding-bottom:10px}.noah-shop-builder-settings .settings-card{background:#fff;border:1px solid #dcdcde;border-radius:8px;max-width:720px;padding:20px}.noah-shop-builder-settings .settings-card .components-base-control__help,.noah-shop-builder-settings .settings-card .components-toggle-control__help{margin:8px 0 0}.noah-shop-builder-modules .modules-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));margin-bottom:24px}.noah-shop-builder-modules .module-card{background:#fff;border:1px solid #dcdcde;border-radius:8px;padding:20px}.noah-shop-builder-modules .module-card h3{color:#1d2327;font-size:15px;font-weight:600;margin:0 0 8px}.noah-shop-builder-modules .module-card p{margin:0}.noah-shop-builder-modules .module-card.is-active{border-color:var(--wp-admin-theme-color,#3858e9)}.noah-shop-builder-modules .module-card .module-card-settings{margin-top:16px}.noah-shop-builder-modules>h2{font-size:15px;margin:8px 0 12px}.noah-shop-builder-modules .module-card-header{align-items:flex-start;display:flex;justify-content:space-between;margin-bottom:12px}.noah-shop-builder-modules .module-icon{background:#f6f7f7;border-radius:8px;color:#50575e;display:inline-flex;padding:8px}.noah-shop-builder-modules .module-icon svg{fill:currentcolor}.noah-shop-builder-modules .badge-upcoming{background:#fff3bf;border-radius:3px;color:#8a6100;display:inline-block;font-size:11px;font-weight:600;letter-spacing:.3px;padding:2px 8px;text-transform:uppercase}.noah-shop-builder-modules .modules-note{border-top:1px solid #dcdcde;padding-top:20px}.noah-shop-builder-modules .modules-note p{margin:0}
  • noah-shop-builder-for-woocommerce/trunk/build/style-admin-dashboard.css

    r3800774 r3801491  
    11.noah-templates__header{align-items:flex-start;display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between;margin-bottom:24px}.noah-templates__header h1{margin:0 0 6px}.noah-templates__header p{margin:0;max-width:640px}.noah-templates__header-actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.noah-templates__header-actions:empty{display:none}.noah-templates__loading{padding:50px;text-align:center}.noah-templates__toolbar{align-items:center;display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;margin-bottom:16px}.noah-templates__toolbar-end{align-items:center;display:flex;flex-wrap:wrap;gap:12px}.noah-templates__toolbar-end .components-search-control{min-width:220px}.noah-templates__table{border:1px solid #e2e4e7;border-radius:12px;overflow:hidden}.noah-templates .noah-template-row,.noah-templates__head{align-items:center;display:grid;gap:16px;grid-template-columns:minmax(240px,2.2fr) minmax(160px,1.4fr) 130px 150px;padding:14px 20px}.noah-templates__head{background:#f9fafb;border-bottom:1px solid #e2e4e7;color:#6b7280;font-size:12px;font-weight:600;letter-spacing:.04em;padding-block:10px;text-transform:uppercase}.noah-templates__no-results{padding:40px 20px;text-align:center}.noah-templates__no-results p{margin:0 0 8px}.noah-template-row{border-bottom:1px solid #e2e4e7;transition:background .15s ease}.noah-template-row:last-child{border-bottom:0}.noah-template-row:hover{background:#fafaff}.noah-template-row__main{align-items:center;display:flex;gap:14px;min-width:0}.noah-template-row__main>div{min-width:0}.noah-template-row__icon{align-items:center;background:#eef2ff;border-radius:10px;color:#4f46e5;display:inline-flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.noah-template-row__icon svg{fill:currentcolor}.noah-template-row__title{color:#1d2327;display:block;font-size:14px;font-weight:600;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.noah-template-row__title:focus,.noah-template-row__title:hover{color:#4f46e5}.noah-template-row__meta{align-items:center;color:#6b7280;display:flex;font-size:12px;gap:8px;margin-top:4px}.noah-template-row__display{flex-wrap:wrap}.noah-template-row__display,.noah-template-row__status{align-items:center;display:flex;gap:8px}.noah-template-row__status label{color:#1d2327;cursor:pointer;font-size:13px}.noah-template-row__actions{align-items:center;display:flex;gap:4px;justify-content:flex-end}.noah-template-row.is-inactive .noah-template-row__icon{background:#f3f4f6;color:#6b7280}.noah-template-row.is-inactive .noah-template-row__status label{color:#6b7280}.noah-pill{background:#f3f4f6;border-radius:999px;color:#374151;display:inline-block;font-weight:500;padding:2px 8px}.noah-display{color:#1d2327;font-size:13px}.noah-display:before{background:#10b981;border-radius:50%;content:"";display:inline-block;height:8px;margin-inline-end:8px;width:8px}.noah-display--custom:before{background:#4f46e5}.noah-display--none{color:#6b7280}.noah-display--none:before{background:#d1d5db}.noah-badge{align-items:center;border-radius:999px;cursor:help;display:inline-flex;font-size:12px;font-weight:500;gap:4px;padding:2px 8px 2px 4px}.noah-badge svg{fill:currentcolor}.noah-badge--warning{background:#fef3c7;color:#92400e}.noah-type-filter{display:flex;flex-wrap:wrap;gap:6px}.noah-type-filter button{align-items:center;background:#fff;border:1px solid #e2e4e7;border-radius:999px;color:#374151;cursor:pointer;display:inline-flex;font-size:13px;gap:6px;padding:6px 12px;transition:all .15s ease}.noah-type-filter button:hover{border-color:#4f46e5;color:#4f46e5}.noah-type-filter button:focus-visible{outline:2px solid #4f46e5;outline-offset:1px}.noah-type-filter button.is-selected{background:#4f46e5;border-color:#4f46e5;color:#fff}.noah-type-filter button.is-selected .noah-type-filter__count{background:hsla(0,0%,100%,.2);color:#fff}.noah-type-filter__count{background:#f3f4f6;border-radius:999px;color:#6b7280;font-size:11px;line-height:18px;min-width:18px;padding:0 6px;text-align:center}.noah-segmented{background:#f3f4f6;border-radius:8px;display:inline-flex;padding:3px}.noah-segmented button{background:transparent;border:0;border-radius:6px;color:#6b7280;cursor:pointer;font-size:13px;padding:6px 12px}.noah-segmented button:focus-visible{outline:2px solid #4f46e5}.noah-segmented button.is-selected{background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.08);color:#1d2327}.noah-templates-empty{padding:40px 20px 20px;text-align:center}.noah-templates-empty h2{color:#1d2327;font-size:20px;margin:0 0 8px}.noah-templates-empty__steps{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));list-style:none;margin:24px auto 28px;max-width:760px;padding:0}.noah-templates-empty__steps li{align-items:center;border:1px dashed #e2e4e7;border-radius:12px;color:#6b7280;display:flex;flex-direction:column;font-size:13px;gap:6px;margin:0;padding:20px 16px}.noah-templates-empty__steps li strong{color:#1d2327;font-size:14px}.noah-templates-empty__number{align-items:center;background:linear-gradient(135deg,#667eea,#764ba2);border-radius:50%;color:#fff;display:inline-flex;font-weight:600;height:28px;justify-content:center;width:28px}.noah-templates-modal__steps{display:flex;gap:6px;margin:-8px 0 16px}.noah-templates-modal__steps span{background:#e5e7eb;border-radius:2px;flex:1;height:4px;transition:background .2s ease}.noah-templates-modal__steps span.is-active{background:#4f46e5}.noah-templates-modal__intro{color:#6b7280;margin:0 0 16px}.noah-templates-modal__form{display:flex;flex-direction:column;gap:20px;max-width:640px}.noah-templates-modal__field{border:0;margin:0;padding:0}.noah-templates-modal__field legend{color:#1d2327;font-size:11px;font-weight:500;margin-bottom:8px;padding:0;text-transform:uppercase}.noah-templates-modal__footer{display:flex;gap:8px;justify-content:flex-end;margin-top:8px}.noah-type-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.noah-type-card{align-items:flex-start;background:#fff;border:1px solid #e2e4e7;border-radius:12px;cursor:pointer;display:flex;flex-direction:column;gap:6px;padding:18px;text-align:start;transition:all .15s ease}.noah-type-card strong{color:#1d2327;font-size:14px;margin-top:6px}.noah-type-card__description{color:#6b7280;font-size:12px;line-height:1.5}.noah-type-card__starters{background:#eef2ff;border-radius:999px;color:#4f46e5;font-size:11px;font-weight:600;margin-top:auto;padding:2px 8px}.noah-type-card:focus-visible,.noah-type-card:hover{border-color:#4f46e5;box-shadow:0 4px 14px rgba(79,70,229,.12);outline:none;transform:translateY(-1px)}.noah-type-card__icon{align-items:center;background:#eef2ff;border-radius:10px;color:#4f46e5;display:inline-flex;height:44px;justify-content:center;width:44px}.noah-type-card__icon svg{fill:currentcolor}.noah-templates-modal__subheader{align-items:center;display:flex;gap:12px;margin-bottom:16px}.noah-templates-modal__subheader .noah-templates-modal__intro{margin:0}.noah-templates-modal__subheader .components-button{flex-shrink:0}.noah-templates-modal__footer.has-back{justify-content:space-between}.noah-templates-modal__footer-end{display:flex;gap:8px}.noah-design-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.noah-design-card{background:#fff;border:1px solid #e2e4e7;border-radius:12px;overflow:hidden;position:relative;transition:all .15s ease}.noah-design-card__select{background:transparent;border:0;cursor:pointer;display:flex;flex-direction:column;height:100%;padding:0;text-align:start;width:100%}.noah-design-card__select:focus-visible{outline:2px solid #4f46e5;outline-offset:-2px}.noah-design-card__preview-button.components-button{background:#fff;inset-inline-end:10px;opacity:0;position:absolute;top:10px;transition:opacity .15s ease}.noah-design-card:focus-within .noah-design-card__preview-button,.noah-design-card:hover .noah-design-card__preview-button{opacity:1}@media(hover:none){.noah-design-card__preview-button.components-button{opacity:1}}.noah-design-card__blocks{align-self:flex-start;border-radius:999px;font-size:11px;font-weight:600;margin-top:4px;padding:1px 8px}.noah-design-card__blocks.is-noah{background:#eef2ff;color:#4f46e5}.noah-design-card__blocks.is-woocommerce{background:#f3e8ff;color:#7e22ce}.noah-design-card__preview{background:#f8f9fc;border-bottom:1px solid #e2e4e7;display:block;padding:14px}.noah-design-card__body{color:#6b7280;display:flex;flex-direction:column;font-size:12px;gap:4px;line-height:1.5;padding:14px 16px 16px}.noah-design-card__body strong{color:#1d2327;font-size:14px}.noah-design-card:focus-within,.noah-design-card:hover{border-color:#4f46e5;box-shadow:0 6px 18px rgba(79,70,229,.14);transform:translateY(-2px)}.noah-preview-modal .components-modal__content{background:#f0f0f1;display:flex;flex-direction:column;padding:0}.noah-preview-modal__actions{align-items:center;display:flex;gap:8px;margin-inline-end:8px}.noah-preview-modal__actions .noah-segmented .components-button{color:#6b7280;height:28px}.noah-preview-modal__actions .noah-segmented .components-button.is-selected{background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.08);color:#1d2327}.noah-preview-modal__stage{display:flex;flex:1;justify-content:center;min-height:0;padding:16px;position:relative}.noah-preview-modal__stage iframe{background:#fff;border:0;border-radius:8px;box-shadow:0 4px 24px rgba(0,0,0,.1);height:100%;max-width:100%;min-height:70vh;transition:width .25s ease,opacity .2s ease}.noah-preview-modal__stage iframe.is-loading{opacity:0}.noah-preview-modal__loading{align-items:center;display:flex;flex-direction:column;gap:8px;inset:0;justify-content:center;position:absolute}.noah-wireframe{background:#fff;border-radius:6px;box-shadow:0 1px 3px rgba(0,0,0,.06);display:block;height:auto;width:100%}.noah-wireframe__image{fill:#e0e7ff}.noah-wireframe__heading{fill:#9ca3af}.noah-wireframe__line{fill:#e5e7eb}.noah-wireframe__accent{fill:#4f46e5}.noah-wireframe__box{fill:#fff;stroke:#d1d5db;stroke-width:1}.noah-wireframe__dashed{fill:none;stroke:#c7cbd1;stroke-dasharray:5 4;stroke-width:1.5}.noah-wireframe__accent-stroke{fill:none;stroke:#4f46e5;stroke-linecap:round;stroke-width:3}.noah-selected-type{align-items:center;background:#eef2ff;border-radius:12px;display:flex;gap:14px;padding:14px}.noah-selected-type>div{color:#6b7280;display:flex;flex:1;flex-direction:column;font-size:12px;gap:2px}.noah-selected-type>div strong{color:#1d2327;font-size:14px}.noah-selected-type .noah-type-card__icon{background:#fff}.noah-option-cards{display:grid;gap:10px;grid-template-columns:repeat(2,1fr)}.noah-option-card{align-items:flex-start;background:#fff;border:1px solid #e2e4e7;border-radius:10px;cursor:pointer;display:flex;gap:10px;padding:12px 14px;text-align:start;transition:border-color .15s ease}.noah-option-card>span:last-child{color:#6b7280;display:flex;flex-direction:column;font-size:12px;gap:2px}.noah-option-card>span:last-child strong{color:#1d2327;font-size:13px}.noah-option-card__radio{border:1.5px solid #9ca3af;border-radius:50%;box-sizing:border-box;flex-shrink:0;height:16px;margin-top:1px;width:16px}.noah-option-card:hover{border-color:#4f46e5}.noah-option-card:focus-visible{outline:2px solid #4f46e5;outline-offset:1px}.noah-option-card.is-selected{background:#eef2ff;border-color:#4f46e5}.noah-option-card.is-selected .noah-option-card__radio{border:5px solid #4f46e5}@media(max-width:960px){.noah-templates__head{display:none}.noah-template-row{grid-template-columns:1fr auto;row-gap:10px}.noah-template-row__display{grid-column:1;padding-inline-start:54px}.noah-template-row__status{grid-column:2;grid-row:1}.noah-template-row__actions{grid-column:2}.noah-option-cards{grid-template-columns:1fr}}
    2 .noah-shop-builder-dashboard-header{background:linear-gradient(135deg,#f5f7fa,#f0f2f5);border-radius:16px;box-shadow:0 2px 8px rgba(0,0,0,.05);margin:0 0 24px;padding:16px}.noah-shop-builder-dashboard-header .noah-shop-builder-header-container{max-width:100%}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav{backdrop-filter:blur(10px);background:hsla(0,0%,100%,.6);border-radius:12px;display:flex;gap:8px;justify-content:center;padding:6px;position:relative}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-indicator{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:8px;box-shadow:0 4px 12px rgba(102,126,234,.4),0 2px 4px rgba(102,126,234,.2);height:calc(100% - 12px);left:6px;pointer-events:none;position:absolute;top:6px;transition:all .4s cubic-bezier(.34,1.56,.64,1);z-index:0}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-indicator:before{background:linear-gradient(135deg,hsla(0,0%,100%,.2),hsla(0,0%,100%,0));border-radius:8px;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button{align-items:center;background:transparent;border:none;border-radius:8px;color:#6b7280;cursor:pointer;display:flex;font-size:14px;font-weight:500;gap:8px;padding:12px 24px;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1);white-space:nowrap;z-index:1}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button svg{fill:currentcolor}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button:hover{color:#4f46e5}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button.active{color:#fff;z-index:1}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button.active svg{filter:drop-shadow(0 1px 2px rgba(0,0,0,.1))}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button:active{transform:translateY(0)}@media(max-width:600px){.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav{gap:4px;justify-content:space-between}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button{padding:10px 16px}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button span{clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}}@keyframes slideIn{0%{opacity:0;transform:translateY(0) scale(.95)}to{opacity:1;transform:translateY(-2px) scale(1)}}.noah-shop-builder-wrapper{margin:20px auto;max-width:1200px;padding:20px}.noah-shop-builder-wrapper h1{color:#1d2327;font-size:24px;margin-bottom:20px}.noah-shop-builder-wrapper p{color:#50575e;font-size:14px;line-height:1.6;margin-bottom:20px}.noah-shop-builder-wrapper .section{background:#fff;border:1px solid #c3c4c7;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.04);margin-bottom:20px;padding:30px}.noah-shop-builder-wrapper .button-group{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}.noah-shop-builder-wrapper .button-group button{margin:0}.noah-shop-builder-snackbars{inset-block-end:24px;inset-inline-start:184px;position:fixed;z-index:100000}.folded .noah-shop-builder-snackbars{inset-inline-start:60px}@media(max-width:782px){.noah-shop-builder-snackbars{inset-inline-start:16px}}.noah-shop-builder-blocks .blocks-header{align-items:flex-start;display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between;margin-bottom:30px}.noah-shop-builder-blocks .blocks-header h1{margin:0 0 8px}.noah-shop-builder-blocks .blocks-header p{margin:0}.noah-shop-builder-blocks .blocks-header .header-actions{align-items:center;display:flex;gap:20px}.noah-shop-builder-blocks .blocks-header .header-actions .bulk-toggle{align-items:center;background:#f6f7f7;border-radius:6px;display:flex;gap:12px;padding:8px 16px}.noah-shop-builder-blocks .blocks-header .header-actions .bulk-toggle label{color:#50575e;font-size:13px;font-weight:500;margin:0}.noah-shop-builder-blocks .blocks-header .header-actions .bulk-toggle .components-form-toggle{margin:0}.noah-shop-builder-blocks .blocks-category{margin-bottom:40px}.noah-shop-builder-blocks .blocks-category h2{border-bottom:2px solid #e8e8e8;color:#1d2327;font-size:18px;font-weight:600;margin:0 0 20px;padding-bottom:10px}.noah-shop-builder-blocks .blocks-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));margin-bottom:20px}.noah-shop-builder-blocks .block-card{align-items:center;background:#fff;border:1px solid #dcdcde;border-radius:8px;display:flex;justify-content:space-between;padding:20px;transition:all .2s ease}.noah-shop-builder-blocks .block-card:hover{border-color:#2271b1;box-shadow:0 2px 8px rgba(0,0,0,.08)}.noah-shop-builder-blocks .block-card .block-info{flex:1}.noah-shop-builder-blocks .block-card .block-info h3{color:#1d2327;font-size:15px;font-weight:600;margin:0 0 8px}.noah-shop-builder-blocks .block-card .components-form-toggle{flex-shrink:0;margin:0}.noah-shop-builder-blocks .blocks-footer{border-top:1px solid #dcdcde;display:flex;justify-content:flex-end;padding-top:20px}.noah-shop-builder-welcome h2{color:#1d2327;font-size:18px;font-weight:600;margin:0 0 20px}.noah-shop-builder-welcome h3{color:#1d2327;font-size:15px;font-weight:600;margin:0 0 8px}.noah-shop-builder-welcome .welcome-hero{background:linear-gradient(135deg,#667eea,#764ba2);border:none;border-radius:8px}.noah-shop-builder-welcome .welcome-hero h1,.noah-shop-builder-welcome .welcome-hero p{color:#fff}.noah-shop-builder-welcome .welcome-hero p{font-size:15px;max-width:640px}.noah-shop-builder-welcome .welcome-hero .components-button.is-primary{background:#fff;color:#4f46e5}.noah-shop-builder-welcome .welcome-hero .components-button.is-secondary{box-shadow:inset 0 0 0 1px #fff;color:#fff}.noah-shop-builder-welcome .welcome-steps{counter-reset:noah-step;display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));list-style:none;margin:0;padding:0}.noah-shop-builder-welcome .welcome-steps li{background:#f6f7f7;border-radius:8px;counter-increment:noah-step;margin:0;padding:20px}.noah-shop-builder-welcome .welcome-steps li:before{align-items:center;background:#4f46e5;border-radius:50%;color:#fff;content:counter(noah-step);display:flex;font-weight:600;height:28px;justify-content:center;margin-bottom:12px;width:28px}.noah-shop-builder-welcome .welcome-steps p{margin:0}.noah-shop-builder-welcome .welcome-cards{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.noah-shop-builder-welcome .welcome-card{border:1px solid #dcdcde;border-radius:8px;padding:20px}.noah-shop-builder-welcome .welcome-card p{margin:0}.noah-shop-builder-welcome .welcome-card-icon{background:#eef2ff;border-radius:8px;color:#4f46e5;display:inline-flex;margin-bottom:12px;padding:8px}.noah-shop-builder-welcome .welcome-card-icon svg{fill:currentcolor}.noah-shop-builder-welcome .welcome-columns{display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.noah-shop-builder-welcome .welcome-columns .section{margin-bottom:0}.noah-badges{display:inline-flex;flex-wrap:wrap;gap:6px}.noah-badges .badge{background:#f0f0f1;border-radius:3px;color:#50575e;display:inline-block;font-size:11px;font-weight:600;letter-spacing:.3px;line-height:1.6;padding:2px 8px;text-transform:uppercase}.noah-badges .badge-new{background:#e7f5ff;color:#1971c2}.noah-badges .badge-beta{background:#fff3bf;color:#f59e0b}.noah-module-settings{width:min(480px,100vw - 32px)}.noah-module-settings .noah-module-settings__fields{display:flex;flex-direction:column;gap:20px}.noah-module-settings .noah-module-settings__actions{display:flex;gap:8px;justify-content:flex-end;margin-top:24px}.noah-shop-builder-settings .settings-group h2{border-bottom:2px solid #e8e8e8;color:#1d2327;font-size:18px;font-weight:600;margin:0 0 20px;padding-bottom:10px}.noah-shop-builder-settings .settings-card{background:#fff;border:1px solid #dcdcde;border-radius:8px;max-width:720px;padding:20px}.noah-shop-builder-settings .settings-card .components-base-control__help,.noah-shop-builder-settings .settings-card .components-toggle-control__help{margin:8px 0 0}.noah-shop-builder-modules .modules-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));margin-bottom:24px}.noah-shop-builder-modules .module-card{background:#fff;border:1px solid #dcdcde;border-radius:8px;padding:20px}.noah-shop-builder-modules .module-card h3{color:#1d2327;font-size:15px;font-weight:600;margin:0 0 8px}.noah-shop-builder-modules .module-card p{margin:0}.noah-shop-builder-modules .module-card.is-active{border-color:var(--wp-admin-theme-color,#3858e9)}.noah-shop-builder-modules .module-card .module-card-settings{margin-top:16px}.noah-shop-builder-modules>h2{font-size:15px;margin:8px 0 12px}.noah-shop-builder-modules .module-card-header{align-items:flex-start;display:flex;justify-content:space-between;margin-bottom:12px}.noah-shop-builder-modules .module-icon{background:#f6f7f7;border-radius:8px;color:#50575e;display:inline-flex;padding:8px}.noah-shop-builder-modules .module-icon svg{fill:currentcolor}.noah-shop-builder-modules .badge-upcoming{background:#fff3bf;border-radius:3px;color:#8a6100;display:inline-block;font-size:11px;font-weight:600;letter-spacing:.3px;padding:2px 8px;text-transform:uppercase}.noah-shop-builder-modules .modules-note{border-top:1px solid #dcdcde;padding-top:20px}.noah-shop-builder-modules .modules-note p{margin:0}
     2.noah-shop-builder-dashboard-header{background:linear-gradient(135deg,#f5f7fa,#f0f2f5);border-radius:16px;box-shadow:0 2px 8px rgba(0,0,0,.05);margin:0 0 24px;padding:16px}.noah-shop-builder-dashboard-header .noah-shop-builder-header-container{max-width:100%}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav{backdrop-filter:blur(10px);background:hsla(0,0%,100%,.6);border-radius:12px;display:flex;gap:8px;justify-content:center;padding:6px;position:relative}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-indicator{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:8px;box-shadow:0 4px 12px rgba(102,126,234,.4),0 2px 4px rgba(102,126,234,.2);height:calc(100% - 12px);left:6px;pointer-events:none;position:absolute;top:6px;transition:all .4s cubic-bezier(.34,1.56,.64,1);z-index:0}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-indicator:before{background:linear-gradient(135deg,hsla(0,0%,100%,.2),hsla(0,0%,100%,0));border-radius:8px;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button{align-items:center;background:transparent;border:none;border-radius:8px;color:#6b7280;cursor:pointer;display:flex;font-size:14px;font-weight:500;gap:8px;padding:12px 24px;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1);white-space:nowrap;z-index:1}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button svg{fill:currentcolor}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button:hover{color:#4f46e5}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button.active{color:#fff;z-index:1}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button.active svg{filter:drop-shadow(0 1px 2px rgba(0,0,0,.1))}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button:active{transform:translateY(0)}@media(max-width:600px){.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav{gap:4px;justify-content:space-between}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button{padding:10px 16px}.noah-shop-builder-dashboard-header .noah-shop-builder-dashboard-nav .nav-button span{clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}}@keyframes slideIn{0%{opacity:0;transform:translateY(0) scale(.95)}to{opacity:1;transform:translateY(-2px) scale(1)}}.noah-shop-builder-wrapper{margin:20px auto;max-width:1200px;padding:20px}.noah-shop-builder-wrapper h1{color:#1d2327;font-size:24px;margin-bottom:20px}.noah-shop-builder-wrapper p{color:#50575e;font-size:14px;line-height:1.6;margin-bottom:20px}.noah-shop-builder-wrapper .section{background:#fff;border:1px solid #c3c4c7;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.04);margin-bottom:20px;padding:30px}.noah-shop-builder-wrapper .button-group{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}.noah-shop-builder-wrapper .button-group button{margin:0}.noah-shop-builder-snackbars{inset-block-end:24px;inset-inline-start:184px;position:fixed;z-index:100000}.folded .noah-shop-builder-snackbars{inset-inline-start:60px}@media(max-width:782px){.noah-shop-builder-snackbars{inset-inline-start:16px}}.noah-shop-builder-blocks .blocks-header{align-items:flex-start;display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between;margin-bottom:30px}.noah-shop-builder-blocks .blocks-header h1{margin:0 0 8px}.noah-shop-builder-blocks .blocks-header p{margin:0}.noah-shop-builder-blocks .blocks-header .header-actions{align-items:center;display:flex;gap:20px}.noah-shop-builder-blocks .blocks-header .header-actions .bulk-toggle{align-items:center;background:#f6f7f7;border-radius:6px;display:flex;gap:12px;padding:8px 16px}.noah-shop-builder-blocks .blocks-header .header-actions .bulk-toggle label{color:#50575e;font-size:13px;font-weight:500;margin:0}.noah-shop-builder-blocks .blocks-header .header-actions .bulk-toggle .components-form-toggle{margin:0}.noah-shop-builder-blocks .blocks-category{margin-bottom:40px}.noah-shop-builder-blocks .blocks-category h2{border-bottom:2px solid #e8e8e8;color:#1d2327;font-size:18px;font-weight:600;margin:0 0 20px;padding-bottom:10px}.noah-shop-builder-blocks .blocks-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));margin-bottom:20px}.noah-shop-builder-blocks .block-card{align-items:center;background:#fff;border:1px solid #dcdcde;border-radius:8px;display:flex;justify-content:space-between;padding:20px;transition:all .2s ease}.noah-shop-builder-blocks .block-card:hover{border-color:#2271b1;box-shadow:0 2px 8px rgba(0,0,0,.08)}.noah-shop-builder-blocks .block-card .block-info{flex:1}.noah-shop-builder-blocks .block-card .block-info h3{color:#1d2327;font-size:15px;font-weight:600;margin:0 0 8px}.noah-shop-builder-blocks .block-card .block-info .block-doc-link{align-items:center;color:#2271b1;display:inline-flex;font-size:13px;gap:4px;margin-left:12px;margin-top:8px;text-decoration:none}.noah-shop-builder-blocks .block-card .block-info .block-doc-link:after{content:"↗";font-size:11px}.noah-shop-builder-blocks .block-card .block-info .block-doc-link:focus,.noah-shop-builder-blocks .block-card .block-info .block-doc-link:hover{color:#135e96;text-decoration:underline}.noah-shop-builder-blocks .block-card .block-info h3+.block-doc-link{margin-left:0}.noah-shop-builder-blocks .block-card .components-form-toggle{flex-shrink:0;margin:0}.noah-shop-builder-blocks .blocks-footer{border-top:1px solid #dcdcde;display:flex;justify-content:flex-end;padding-top:20px}.noah-shop-builder-welcome h2{color:#1d2327;font-size:18px;font-weight:600;margin:0 0 20px}.noah-shop-builder-welcome h3{color:#1d2327;font-size:15px;font-weight:600;margin:0 0 8px}.noah-shop-builder-welcome .welcome-hero{background:linear-gradient(135deg,#667eea,#764ba2);border:none;border-radius:8px}.noah-shop-builder-welcome .welcome-hero h1,.noah-shop-builder-welcome .welcome-hero p{color:#fff}.noah-shop-builder-welcome .welcome-hero p{font-size:15px;max-width:640px}.noah-shop-builder-welcome .welcome-hero .components-button.is-primary{background:#fff;color:#4f46e5}.noah-shop-builder-welcome .welcome-hero .components-button.is-secondary{box-shadow:inset 0 0 0 1px #fff;color:#fff}.noah-shop-builder-welcome .welcome-steps{counter-reset:noah-step;display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));list-style:none;margin:0;padding:0}.noah-shop-builder-welcome .welcome-steps li{background:#f6f7f7;border-radius:8px;counter-increment:noah-step;margin:0;padding:20px}.noah-shop-builder-welcome .welcome-steps li:before{align-items:center;background:#4f46e5;border-radius:50%;color:#fff;content:counter(noah-step);display:flex;font-weight:600;height:28px;justify-content:center;margin-bottom:12px;width:28px}.noah-shop-builder-welcome .welcome-steps p{margin:0}.noah-shop-builder-welcome .welcome-cards{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.noah-shop-builder-welcome .welcome-card{border:1px solid #dcdcde;border-radius:8px;padding:20px}.noah-shop-builder-welcome .welcome-card p{margin:0}.noah-shop-builder-welcome .welcome-card-icon{background:#eef2ff;border-radius:8px;color:#4f46e5;display:inline-flex;margin-bottom:12px;padding:8px}.noah-shop-builder-welcome .welcome-card-icon svg{fill:currentcolor}.noah-shop-builder-welcome .welcome-columns{display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.noah-shop-builder-welcome .welcome-columns .section{margin-bottom:0}.noah-badges{display:inline-flex;flex-wrap:wrap;gap:6px}.noah-badges .badge{background:#f0f0f1;border-radius:3px;color:#50575e;display:inline-block;font-size:11px;font-weight:600;letter-spacing:.3px;line-height:1.6;padding:2px 8px;text-transform:uppercase}.noah-badges .badge-new{background:#e7f5ff;color:#1971c2}.noah-badges .badge-beta{background:#fff3bf;color:#f59e0b}.noah-badges .badge-locked{align-items:center;background:#f3e8ff;color:#6b21a8;display:inline-flex;gap:3px}.noah-badges .badge-locked svg{fill:currentcolor}.noah-upgrade-link{align-items:center;color:#6b21a8;display:inline-flex;flex-shrink:0;font-size:13px;font-weight:600;gap:4px;text-decoration:none}.noah-upgrade-link svg{fill:currentcolor}.noah-upgrade-link.is-button{background:#f3e8ff;border:1px solid #e9d5ff;border-radius:999px;padding:5px 12px 5px 9px}.noah-upgrade-link.is-button:focus,.noah-upgrade-link.is-button:hover{background:#6b21a8;border-color:#6b21a8;color:#fff}.noah-upgrade-link.is-text:focus,.noah-upgrade-link.is-text:hover{color:#4c1d95;text-decoration:underline}.noah-upgrade-link:focus{box-shadow:none;outline:2px solid var(--wp-admin-theme-color,#3858e9);outline-offset:2px}.noah-shop-builder-blocks .block-card.is-locked,.noah-shop-builder-modules .module-card.is-locked{background:#fcfaff;border-style:dashed}.noah-shop-builder-blocks .block-card.is-locked:hover,.noah-shop-builder-modules .module-card.is-locked:hover{border-color:#c084fc}.noah-shop-builder-modules .module-card-locked{border-top:1px dashed #dcdcde;margin-top:16px;padding-top:12px}.noah-shop-builder-modules .module-card-locked ul{list-style:none;margin:0 0 8px;padding:0}.noah-shop-builder-modules .module-card-locked li{align-items:center;color:#646970;display:flex;gap:6px;margin:0 0 4px}.noah-shop-builder-modules .module-card-locked li svg{fill:#6b21a8}.noah-module-settings{width:min(480px,100vw - 32px)}.noah-module-settings .noah-module-settings__fields{display:flex;flex-direction:column;gap:20px}.noah-module-settings .noah-module-settings__actions{display:flex;gap:8px;justify-content:flex-end;margin-top:24px}.noah-shop-builder-settings .settings-group h2{border-bottom:2px solid #e8e8e8;color:#1d2327;font-size:18px;font-weight:600;margin:0 0 20px;padding-bottom:10px}.noah-shop-builder-settings .settings-card{background:#fff;border:1px solid #dcdcde;border-radius:8px;max-width:720px;padding:20px}.noah-shop-builder-settings .settings-card .components-base-control__help,.noah-shop-builder-settings .settings-card .components-toggle-control__help{margin:8px 0 0}.noah-shop-builder-modules .modules-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));margin-bottom:24px}.noah-shop-builder-modules .module-card{background:#fff;border:1px solid #dcdcde;border-radius:8px;padding:20px}.noah-shop-builder-modules .module-card h3{color:#1d2327;font-size:15px;font-weight:600;margin:0 0 8px}.noah-shop-builder-modules .module-card p{margin:0}.noah-shop-builder-modules .module-card.is-active{border-color:var(--wp-admin-theme-color,#3858e9)}.noah-shop-builder-modules .module-card .module-card-settings{margin-top:16px}.noah-shop-builder-modules>h2{font-size:15px;margin:8px 0 12px}.noah-shop-builder-modules .module-card-header{align-items:flex-start;display:flex;justify-content:space-between;margin-bottom:12px}.noah-shop-builder-modules .module-icon{background:#f6f7f7;border-radius:8px;color:#50575e;display:inline-flex;padding:8px}.noah-shop-builder-modules .module-icon svg{fill:currentcolor}.noah-shop-builder-modules .badge-upcoming{background:#fff3bf;border-radius:3px;color:#8a6100;display:inline-block;font-size:11px;font-weight:600;letter-spacing:.3px;padding:2px 8px;text-transform:uppercase}.noah-shop-builder-modules .modules-note{border-top:1px solid #dcdcde;padding-top:20px}.noah-shop-builder-modules .modules-note p{margin:0}
  • noah-shop-builder-for-woocommerce/trunk/includes/Admin/Admin.php

    r3800774 r3801491  
    373373                );
    374374
     375                wp_add_inline_script(
     376                        'noah-shop-builder-admin-dashboard',
     377                        'window.noahShopBuilderProCatalog = ' . wp_json_encode( ProCatalog::data() ) . ';',
     378                        'before'
     379                );
     380
    375381                wp_enqueue_style(
    376382                        'noah-shop-builder-admin-dashboard',
  • noah-shop-builder-for-woocommerce/trunk/includes/Config/BlockList.php

    r3800774 r3801491  
    1919 * `category` (block category slugs, see Blocks\Categories), `status` (default status),
    2020 * an optional `badge` list (`new`, `beta`; an add-on badges its own blocks, e.g. `pro`)
    21  * and, for blocks outside this plugin's
    22  * build folder, `dir` (absolute path of the built block folder).
     21 * an optional `doc` (documentation URL; free blocks get theirs from DOC_PAGES) and, for
     22 * blocks outside this plugin's build folder, `dir` (absolute path of the built block folder).
    2323 */
    2424class BlockList extends ConfigList {
     25
     26        /**
     27         * Base URL of the documentation site.
     28         *
     29         * @since 2.1.1
     30         */
     31        const DOCS_BASE = 'https://wpshark.xyz/docs/';
     32
     33        /**
     34         * Documentation pages of the free blocks: block slug => doc page slug.
     35         * Blocks without a published doc are left out and show no link.
     36         *
     37         * @since 2.1.1
     38         */
     39        const DOC_PAGES = array(
     40                'product-title'                  => 'product-title-block',
     41                'product-price'                  => 'product-price-block',
     42                'store-notices'                  => 'store-notices-block',
     43                'product-image'                  => 'product-image-block',
     44                'product-excerpt'                => 'product-excerpt-block',
     45                'product-description'            => 'product-description-block',
     46                'product-meta'                   => 'product-meta-block',
     47                'product-sku'                    => 'product-sku-block',
     48                'product-stock'                  => 'product-stock-block',
     49                'product-categories'             => 'product-categories-block',
     50                'product-tags'                   => 'product-tags-block',
     51                'product-rating'                 => 'product-rating-block',
     52                'product-review'                 => 'product-reviews-block',
     53                'product-share'                  => 'product-share-block',
     54                'product-tabs'                   => 'product-tabs-block',
     55                'product-additional-information' => 'additional-information-block',
     56                'add-to-cart'                    => 'add-to-cart-block',
     57                'breadcrumbs'                    => 'breadcrumbs-block',
     58                'related-products'               => 'related-products-block',
     59                'upsells'                        => 'upsells-block',
     60                'archive-products'               => 'archive-products-block',
     61                'archive-title'                  => 'archive-title-block',
     62                'archive-description'            => 'archive-description-block',
     63                'archive-result-count'           => 'archive-result-count-block',
     64                'archive-pagination'             => 'archive-pagination-block',
     65                'order-by'                       => 'order-by-filter-block',
     66                'products'                       => 'products-block',
     67                'cart-table'                     => 'cart-table-block',
     68                'cart-totals'                    => 'cart-total-block',
     69                'cross-sells'                    => 'cross-sell-block',
     70                'empty-cart-message'             => 'empty-cart-message-block',
     71                'return-to-shop'                 => 'return-to-shop-block',
     72                'checkout-form'                  => 'checkout-form-block',
     73                'checkout-billing'               => 'checkout-billing-block',
     74                'checkout-shipping'              => 'checkout-shipping-block',
     75                'checkout-additional'            => 'checkout-additional-block',
     76                'checkout-order-notes'           => 'order-notes-block',
     77                'checkout-order-review'          => 'order-review-block',
     78                'checkout-payment'               => 'checkout-payment-block',
     79                'checkout-coupon'                => 'checkout-coupon-block',
     80                'checkout-login'                 => 'checkout-login-block',
     81                'checkout-shipping-methods'      => 'checkout-shipping-methods-block',
     82                'wishlist-button'                => 'wishlist-button-block',
     83                'wishlist-table'                 => 'wishlist-table-block',
     84                'wishlist-counter'               => 'wishlist-counter-block',
     85        );
    2586
    2687        /**
    … …  
    3091         */
    3192        protected $type = 'blocks';
     93
     94        /**
     95         * Documentation URL of a block: its own `doc`, else its DOC_PAGES entry.
     96         *
     97         * @param array<string, mixed> $item Block list item.
     98         * @return string URL, or an empty string when the block has no doc.
     99         * @since 2.1.1
     100         */
     101        public static function doc_url( $item ) {
     102                $slug = (string) ( $item['slug'] ?? '' );
     103                $url  = (string) ( $item['doc'] ?? '' );
     104
     105                if ( '' === $url && isset( self::DOC_PAGES[ $slug ] ) ) {
     106                        $url = self::DOCS_BASE . self::DOC_PAGES[ $slug ] . '/';
     107                }
     108
     109                /**
     110                 * Filters a block's documentation URL on the Blocks dashboard page.
     111                 *
     112                 * @since 2.1.1
     113                 *
     114                 * @param string               $url  URL, or an empty string for no link.
     115                 * @param string               $slug Block slug.
     116                 * @param array<string, mixed> $item Block list item.
     117                 */
     118                return (string) apply_filters( 'noah_shop_builder/blocks/doc_url', $url, $slug, $item );
     119        }
    32120
    33121        /**
  • noah-shop-builder-for-woocommerce/trunk/includes/Core/API.php

    r3782288 r3801491  
    122122
    123123        /**
    124          * A block list item without server-side keys (an add-on block's `dir` path).
     124         * A block list item without server-side keys (an add-on block's `dir` path), with
     125         * its documentation URL in `doc` (empty when the block has no doc).
    125126         *
    126127         * @param array<string, mixed> $item Block list item.
    … …  
    130131        public function public_item( $item ) {
    131132                unset( $item['dir'] );
     133
     134                $item['doc'] = esc_url_raw( BlockList::doc_url( $item ) );
    132135
    133136                return $item;
    … …  
    294297                                                        ),
    295298                                                        'required' => array( 'type' => 'boolean' ),
     299                                                        'doc'      => array( 'type' => 'string' ),
    296300                                                ),
    297301                                        ),
  • noah-shop-builder-for-woocommerce/trunk/languages/noah-shop-builder-for-woocommerce.pot

    r3800774 r3801491  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Noah Shop Builder for WooCommerce 2.1.0\n"
     5"Project-Id-Version: Noah Shop Builder for WooCommerce 2.1.1\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/noah-shop-builder-for-woocommerce\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    … …  
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2026-11-13T16:10:07+01:00\n"
     12"POT-Creation-Date: 2026-11-14T08:02:50+01:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.12.0\n"
    … …  
    5252#: includes/Admin/Admin.php:115
    5353#: includes/Admin/Admin.php:116
    54 #: src/admin/blocks/index.js:21
     54#: src/admin/blocks/index.js:26
    5555#: src/admin/dashboard/components/Header.js:28
    56 #: src/admin/modules/index.js:330
     56#: src/admin/modules/index.js:356
    5757#: src/admin/welcome/index.js:197
    5858msgid "Modules"
    … …  
    7171#: includes/Admin/Admin.php:132
    7272#: src/admin/dashboard/components/Header.js:36
    73 #: src/admin/modules/index.js:390
     73#: src/admin/modules/index.js:416
    7474#: src/admin/settings/index.js:53
    7575#: src/blocks/account-navigation/edit.js:63
    … …  
    125125msgstr ""
    126126
     127#: includes/Admin/ProCatalog.php:97
     128msgid "Product Comparison"
     129msgstr ""
     130
     131#: includes/Admin/ProCatalog.php:98
     132msgid "Compare products side by side: price, rating, stock, attributes and more, with a floating compare bar."
     133msgstr ""
     134
     135#: includes/Admin/ProCatalog.php:106
     136msgid "Use WooCommerce’s wishlist"
     137msgstr ""
     138
     139#: includes/Admin/ProCatalog.php:110
     140msgid "Page cache support"
     141msgstr ""
     142
     143#: includes/Admin/ProCatalog.php:116
     144msgid "Swatches on product cards"
     145msgstr ""
     146
     147#: includes/Admin/ProCatalog.php:120
     148msgid "Availability states"
     149msgstr ""
     150
     151#: includes/Admin/ProCatalog.php:124
     152msgid "Swatches in Quick View"
     153msgstr ""
     154
     155#: includes/Admin/ProCatalog.php:155
     156msgid "Stock Progress Bar"
     157msgstr ""
     158
     159#: includes/Admin/ProCatalog.php:156
     160msgid "Deal Countdown"
     161msgstr ""
     162
     163#: includes/Admin/ProCatalog.php:157
     164msgid "Sticky Add to Cart"
     165msgstr ""
     166
     167#: includes/Admin/ProCatalog.php:158
     168msgid "Size Chart"
     169msgstr ""
     170
     171#: includes/Admin/ProCatalog.php:159
     172msgid "Products Per Page"
     173msgstr ""
     174
     175#: includes/Admin/ProCatalog.php:160
     176msgid "Archive View Mode"
     177msgstr ""
     178
     179#: includes/Admin/ProCatalog.php:161
     180msgid "Recently Viewed"
     181msgstr ""
     182
     183#: includes/Admin/ProCatalog.php:162
     184msgid "Deal Products"
     185msgstr ""
     186
     187#: includes/Admin/ProCatalog.php:163
     188msgid "Flash Sale Products"
     189msgstr ""
     190
     191#: includes/Admin/ProCatalog.php:164
     192msgid "Advanced Search"
     193msgstr ""
     194
     195#: includes/Admin/ProCatalog.php:165
     196msgid "Product Category List"
     197msgstr ""
     198
     199#: includes/Admin/ProCatalog.php:166
     200msgid "Product Filters"
     201msgstr ""
     202
     203#: includes/Admin/ProCatalog.php:167
     204msgid "Active Filters"
     205msgstr ""
     206
     207#: includes/Admin/ProCatalog.php:168
     208msgid "Reset Filters"
     209msgstr ""
     210
     211#: includes/Admin/ProCatalog.php:169
     212msgid "Stock Status Filter"
     213msgstr ""
     214
     215#: includes/Admin/ProCatalog.php:170
     216msgid "Price Filter"
     217msgstr ""
     218
     219#: includes/Admin/ProCatalog.php:171
     220msgid "Attribute Filter"
     221msgstr ""
     222
     223#: includes/Admin/ProCatalog.php:172
     224msgid "Rating Filter"
     225msgstr ""
     226
     227#: includes/Admin/ProCatalog.php:173
     228msgid "Category Filter"
     229msgstr ""
     230
     231#: includes/Admin/ProCatalog.php:174
     232msgid "Side Cart"
     233msgstr ""
     234
     235#: includes/Admin/ProCatalog.php:175
     236msgid "Free Shipping Bar"
     237msgstr ""
     238
     239#: includes/Admin/ProCatalog.php:176
     240msgid "Customer Details"
     241msgstr ""
     242
     243#: includes/Admin/ProCatalog.php:177
     244msgid "Payment Instructions"
     245msgstr ""
     246
     247#: includes/Admin/ProCatalog.php:178
     248msgid "Login / Register"
     249msgstr ""
     250
     251#: includes/Admin/ProCatalog.php:179
     252msgid "Account Dashboard"
     253msgstr ""
     254
     255#: includes/Admin/ProCatalog.php:180
     256msgid "Account Orders"
     257msgstr ""
     258
     259#: includes/Admin/ProCatalog.php:181
     260msgid "Account Downloads"
     261msgstr ""
     262
     263#: includes/Admin/ProCatalog.php:182
     264msgid "Account Addresses"
     265msgstr ""
     266
     267#: includes/Admin/ProCatalog.php:183
     268msgid "Account Details"
     269msgstr ""
     270
     271#: includes/Admin/ProCatalog.php:184
     272msgid "Compare Button"
     273msgstr ""
     274
     275#: includes/Admin/ProCatalog.php:185
     276msgid "Compare Bar"
     277msgstr ""
     278
     279#: includes/Admin/ProCatalog.php:186
     280msgid "Compare Table"
     281msgstr ""
     282
    127283#: includes/Blocks/CartTable.php:78
    128284#: includes/Modules/Wishlist/WishlistTable.php:82
    … …  
    224380#: includes/Config/TemplateTypes.php:92
    225381#: patterns/checkout-standard.php:16
    226 #: src/admin/blocks/index.js:19
     382#: src/admin/blocks/index.js:24
    227383#: src/admin/welcome/index.js:43
    228384msgid "Checkout"
    … …  
    327483
    328484#: includes/Config/TemplateTypes.php:62
    329 #: src/admin/blocks/index.js:16
     485#: src/admin/blocks/index.js:21
    330486#: src/admin/welcome/index.js:16
    331487msgid "Single Product"
    … …  
    347503
    348504#: includes/Config/TemplateTypes.php:82
    349 #: src/admin/blocks/index.js:18
     505#: src/admin/blocks/index.js:23
    350506msgid "Cart"
    351507msgstr ""
    … …  
    360516
    361517#: includes/Config/TemplateTypes.php:102
    362 #: src/admin/blocks/index.js:20
     518#: src/admin/blocks/index.js:25
    363519msgid "My Account"
    364520msgstr ""
    … …  
    540696
    541697#: includes/Modules/Swatches/SwatchesModule.php:38
    542 #: src/admin/modules/index.js:49
     698#: src/admin/modules/index.js:61
    543699msgid "Variation Swatches"
    544700msgstr ""
    545701
    546702#: includes/Modules/Swatches/SwatchesModule.php:39
    547 #: src/admin/modules/index.js:50
     703#: src/admin/modules/index.js:62
    548704msgid "Replace variation dropdowns on product pages with color, image and label swatches that work with the keyboard."
    549705msgstr ""
    … …  
    554710#: includes/Modules/Wishlist/WishlistModule.php:80
    555711#: includes/Modules/Wishlist/WishlistModule.php:275
    556 #: src/admin/modules/index.js:40
     712#: src/admin/modules/index.js:52
    557713msgid "Wishlist"
    558714msgstr ""
    … …  
    581737
    582738#: includes/Modules/Wishlist/WishlistModule.php:81
    583 #: src/admin/modules/index.js:41
     739#: src/admin/modules/index.js:53
    584740msgid "Shoppers save products from cards and product pages to a wishlist. Works for guests and logged-in customers, with a wishlist page block."
    585741msgstr ""
    … …  
    12631419msgstr ""
    12641420
    1265 #: src/admin/blocks/index.js:17
     1421#: src/admin/blocks/index.js:22
    12661422#: src/admin/welcome/index.js:25
    12671423msgid "Shop & Archive"
    12681424msgstr ""
    12691425
    1270 #: src/admin/blocks/index.js:48
     1426#: src/admin/blocks/index.js:53
    12711427msgid "Loading blocks…"
    12721428msgstr ""
    12731429
    1274 #: src/admin/blocks/index.js:86
     1430#: src/admin/blocks/index.js:105
    12751431msgid "Disable/Enable Blocks"
    12761432msgstr ""
    12771433
    1278 #: src/admin/blocks/index.js:92
     1434#: src/admin/blocks/index.js:111
    12791435msgid "Turn blocks on or off. Changes are saved automatically."
    12801436msgstr ""
    12811437
    1282 #: src/admin/blocks/index.js:102
     1438#: src/admin/blocks/index.js:121
    12831439msgid "Enable all"
    12841440msgstr ""
    12851441
    1286 #: src/admin/blocks/index.js:134
     1442#: src/admin/blocks/index.js:158
     1443msgid "Documentation"
     1444msgstr ""
     1445
     1446#. translators: %s: block title.
     1447#: src/admin/blocks/index.js:165
     1448#, js-format
     1449msgid "for %s (opens in a new tab)"
     1450msgstr ""
     1451
     1452#: src/admin/blocks/index.js:191
    12871453msgid "Required"
    12881454msgstr ""
    12891455
    1290 #: src/admin/modules/index.js:93
     1456#: src/admin/dashboard/components/ProLock.js:47
     1457msgid "Pro"
     1458msgstr ""
     1459
     1460#: src/admin/dashboard/components/ProLock.js:76
     1461msgid "Upgrade"
     1462msgstr ""
     1463
     1464#. translators: %s: name of a Pro block, module or setting.
     1465#: src/admin/dashboard/components/ProLock.js:80
     1466#, js-format
     1467msgid "to unlock %s (opens in a new tab)"
     1468msgstr ""
     1469
     1470#: src/admin/modules/index.js:105
    12911471msgid "— None —"
    12921472msgstr ""
    12931473
    12941474#. translators: %d: page ID
    1295 #: src/admin/modules/index.js:101
     1475#: src/admin/modules/index.js:113
    12961476#, js-format
    12971477msgid "#%d (no title)"
    … …  
    12991479
    13001480#. translators: %s: module name.
    1301 #: src/admin/modules/index.js:232
     1481#: src/admin/modules/index.js:244
    13021482#, js-format
    13031483msgid "%s settings"
    13041484msgstr ""
    13051485
    1306 #: src/admin/modules/index.js:256
     1486#: src/admin/modules/index.js:268
    13071487#: src/admin/templates/index.js:960
    13081488#: src/admin/templates/NewTemplateModal.js:529
    … …  
    13101490msgstr ""
    13111491
    1312 #: src/admin/modules/index.js:264
     1492#: src/admin/modules/index.js:276
    13131493msgid "Save"
    13141494msgstr ""
    13151495
    1316 #: src/admin/modules/index.js:318
     1496#: src/admin/modules/index.js:344
    13171497msgid "Loading modules…"
    13181498msgstr ""
    13191499
    1320 #: src/admin/modules/index.js:332
     1500#: src/admin/modules/index.js:358
    13211501msgid "Modules add shopping features across your store. Turn each one on or off here; a module that is off loads no code at all."
    13221502msgstr ""
    13231503
    1324 #: src/admin/modules/index.js:406
     1504#: src/admin/modules/index.js:444
     1505msgid "Unlock with Pro"
     1506msgstr ""
     1507
     1508#: src/admin/modules/index.js:485
    13251509msgid "Coming soon"
    13261510msgstr ""
    13271511
    1328 #: src/admin/modules/index.js:423
     1512#: src/admin/modules/index.js:502
    13291513msgid "Upcoming"
    13301514msgstr ""
    13311515
    1332 #: src/admin/modules/index.js:443
     1516#: src/admin/modules/index.js:522
    13331517msgid "These modules are in development and will arrive in a future update. Until then, build your store pages with templates and blocks."
    13341518msgstr ""
    13351519
    1336 #: src/admin/modules/index.js:453
     1520#: src/admin/modules/index.js:532
    13371521msgid "Go to Templates"
    13381522msgstr ""
    13391523
    1340 #: src/admin/modules/index.js:462
     1524#: src/admin/modules/index.js:541
    13411525msgid "Go to Blocks"
    13421526msgstr ""
  • noah-shop-builder-for-woocommerce/trunk/noah-shop-builder-for-woocommerce.php

    r3800774 r3801491  
    77 * Requires Plugins: woocommerce
    88 * Author: Iqbal Hossain
    9  * Version: 2.1.0
     9 * Version: 2.1.1
    1010 * License: GPL-3.0-or-later
    1111 * License URI: https://www.gnu.org/licenses/gpl-3.0.html
    … …  
    2020defined( 'ABSPATH' ) || exit;
    2121
    22 define( 'NOAH_SHOP_BUILDER_VERSION', '2.1.0' );
     22define( 'NOAH_SHOP_BUILDER_VERSION', '2.1.1' );
    2323define( 'NOAH_SHOP_BUILDER_FILE', __FILE__ );
    2424define( 'NOAH_SHOP_BUILDER_URL', plugin_dir_url( __FILE__ ) );
  • noah-shop-builder-for-woocommerce/trunk/package.json

    r3800774 r3801491  
    11{
    22        "name": "noah-shop-builder-for-woocommerce",
    3         "version": "2.1.0",
     3        "version": "2.1.1",
    44        "description": "A powerful WooCommerce store builder for Gutenberg with drag-and-drop blocks, ready-made templates, and easy customization.",
    55        "author": "Iqbal Hossain",
  • noah-shop-builder-for-woocommerce/trunk/readme.txt

    r3800774 r3801491  
    1 === Noah Shop Builder for WooCommerce ===
     1=== Noah Shop Builder for WooCommerce – Gutenberg Woo Builder, Woo Blocks & Woo Store Templates ===
    22Contributors: iqbal1hossain
    3 Tags: WooCommerce, Gutenberg blocks, shop builder, product display, WooCommerce templates
     3Tags: gutenberg woocommerce, woocommerce blocks, WooCommerce Builder, Variation Swatches, Quick View
    44Requires at least: 6.9
    55Tested up to: 7.1
    66Requires PHP: 7.4
    7 Stable tag: 2.1.0
     7Stable tag: 2.1.1
    88License: GPLv3 or later
    99License URI: https://www.gnu.org/licenses/gpl-3.0.html
    1010
    11 Design WooCommerce product, shop, cart, checkout, thank-you and account pages with blocks. Quick View, Wishlist and Variation Swatches included.
     11Gutenberg Woo builder: design WooCommerce product, shop, cart, checkout and account pages with blocks. Quick View, Wishlist and Variation Swatches.
    1212
    1313== Description ==
    1414
    1515**Noah Shop Builder for WooCommerce** is a comprehensive WooCommerce page builder designed specifically for the WordPress Gutenberg editor. Build beautiful, conversion-optimized online stores without writing a single line of code.
     16
     17Noah is a **Gutenberg Woo builder** and **Woo shop builder** in one plugin. Use **Woo blocks** to design every page of your **Woo store** – single product, shop, product archive, cart, empty cart, checkout, thank-you and My Account – right inside the block editor. No Elementor or other page builder needed: it is a native **Gutenberg WooCommerce builder** with 50 WooCommerce blocks, starter templates and built-in **Quick View**, **Wishlist** and **Variation Swatches** modules.
     18
     19= Why Choose Noah Woo Builder? =
     20
     21* **Gutenberg WooCommerce Builder** - Build your whole Woo store with the WordPress block editor you already know.
     22* **Woo Shop Builder** - Design the shop page, category pages and product archives with sortable product grids and lists.
     23* **Woo Product Page Builder** - Build custom single product pages with gallery, price, add to cart, tabs, reviews and related products.
     24* **Woo Cart & Checkout Builder** - Lay out the cart, empty cart and checkout pages with blocks.
     25* **WooCommerce Blocks for Any Page** - Show newest, best selling, on sale, featured or top rated products anywhere.
     26* **Variation Swatches** - Turn variation dropdowns into color, image or label swatches.
     27* **Quick View** - Let shoppers open a product in a popup without leaving the shop page.
     28* **Wishlist** - Let shoppers save products for later, as guests or logged-in customers.
     29* **Fast and Lightweight** - Built on native blocks, with no extra page builder loaded on your store.
     30* **Free** - All core Woo builder features are free.
    1631
    1732= Key Features =
    … …  
    5166* **Store Notices** - WooCommerce messages such as "Added to cart", coupon results and errors.
    5267
     68**Pro** ([Upgrade](https://wpshark.xyz/noah/pricing/))
     69
     70* **Stock Progress Bar** - Shows how much of the stock has sold. For products that manage stock.
     71* **Deal Countdown** - Time left on the product's sale, from its sale end date.
     72* **Sticky Add to Cart** - A bar with the product and its add to cart button that stays on screen once the shopper scrolls past the form.
     73* **Buy Now Button** - An option on the Add To Cart block that adds the product and goes straight to checkout.
     74* **Size Chart** - The product's size chart from Products → Size Charts, in the page or behind a "Size guide" button in a popup.
     75* **Product Tabs Layouts** - Accordion and stacked layouts for the Product Tabs block.
     76
    5377= Shop & Archive Blocks =
    5478
    … …  
    6185* **Order By Filter** - Lets shoppers sort products by popularity, rating, date or price.
    6286
     87**Pro** ([Upgrade](https://wpshark.xyz/noah/pricing/))
     88
     89* **Product Filters** - Lets shoppers narrow the products without a page reload, with product counts and a shareable URL. Holds the filter blocks below.
     90  * **Category Filter** - Pick one or more product categories.
     91  * **Price Filter** - Set a price range with a slider or by typing it.
     92  * **Attribute Filter** - Filter by an attribute such as color or size, as a list, swatches or a dropdown.
     93  * **Rating Filter** - Show only products rated at least a number of stars.
     94  * **Stock Status Filter** - Show only products in stock, on backorder or out of stock.
     95  * **Active Filters** - The filters the shopper picked, each with a remove button.
     96  * **Reset Filters** - A button that turns every filter off.
     97* **Products Per Page** - Lets shoppers choose how many products the page shows.
     98* **Archive View Mode** - Grid and list buttons that switch the product view without reloading.
     99* **Advanced Search** - A product search box that lists matching products while the shopper types, with an optional category menu.
     100* **Product Category List** - Your product categories with images and product counts, as a grid, a list or a carousel.
     101* **Recently Viewed** - The products a shopper looked at earlier in their visit.
     102* **Deal Products** - Products on sale with an end date, soonest first, each with a countdown.
     103* **Flash Sale Products** - Products whose sale falls inside the campaign dates, with a countdown to the end.
     104* **Product Card Layouts** - Overlay and flip card layouts, a carousel display for product lists and swatches on cards.
     105
    63106= Cart Blocks =
    64107
    … …  
    68111* **Empty Cart Message** - The "Your cart is currently empty." message for the empty cart page.
    69112* **Return To Shop** - A button that takes shoppers back to the shop page.
     113
     114**Pro** ([Upgrade](https://wpshark.xyz/noah/pricing/))
     115
     116* **Side Cart** - A cart icon with the item count that opens a cart drawer: change quantities, remove items and go to checkout without leaving the page.
     117* **Free Shipping Bar** - "Add $12 more to get free shipping!" with a progress bar, for the cart, product pages and headers.
    70118
    71119= Checkout Blocks =
    … …  
    88136* **Order Details** - The ordered items, totals and downloads, with the payment method's instructions and the addresses.
    89137
     138**Pro** ([Upgrade](https://wpshark.xyz/noah/pricing/))
     139
     140* **Customer Details** - The billing and shipping addresses, shown to the customer who placed the order.
     141* **Payment Instructions** - What the payment method shows after checkout, such as bank transfer details.
     142
    90143= My Account Blocks =
    91144
    92145* **Account Navigation** - The account menu: dashboard, orders, addresses, account details and more.
    93146* **Account Content** - The account page being visited, including pages added by other plugins.
     147
     148**Pro** ([Upgrade](https://wpshark.xyz/noah/pricing/))
     149
     150* **Login / Register** - The login form and, when your store allows it, the registration form.
     151* **Account Dashboard** - The welcome text and links to the other account pages.
     152* **Account Orders** - The customer's orders, with pagination.
     153* **Account Downloads** - The customer's downloadable products.
     154* **Account Addresses** - The billing and shipping addresses and the form to edit them.
     155* **Account Details** - The form for the customer's name, email and password.
     156* **Horizontal Account Navigation** - A horizontal layout for the Account Navigation block.
    94157
    95158= Modules =
    … …  
    106169Module buttons appear on the product cards of the Archive Products, Products, Related Products, Upsells and Cross-Sell blocks.
    107170
     171**Pro** ([Upgrade](https://wpshark.xyz/noah/pricing/))
     172
     173* **Product Comparison** - Shoppers compare products side by side: price, rating, stock, attributes and more.
     174  * **Compare Button** - Adds the product to the comparison or removes it.
     175  * **Compare Bar** - A floating bar with the products to compare.
     176  * **Compare Table** - The products side by side, with a "Highlight differences" switch.
     177* **Variation Swatches Extras** - Crossed-out unavailable options and swatches in Quick View.
     178* **Wishlist Extras** - WooCommerce wishlist integration and wishlist support for cached pages.
     179* **Module Buttons on WooCommerce Grids** - Quick View, Wishlist and Compare buttons on WooCommerce's own product grids.
     180
    108181= Starter Templates =
    109182
    … …  
    113186
    114187* **Single Page** - Gallery beside the product details, with tabs and related products below.
     188* **Stock Progress Bar** (Pro) - Large gallery with a buy box that shows the stock left and the time left on a sale, plus upsells.
    115189
    116190**Shop**
    117191
    118192* **Shop** - Shop title and intro above a sortable three-column product grid.
     193* **Shop with Filters** (Pro) - Product filters in a sidebar beside the product grid; the grid updates without a page reload.
     194* **Shop with Categories** (Pro) - Centered intro and category list, then a four-column product grid.
     195* **Shop Flip** (Pro) - Four-column grid whose cards show the second gallery image on hover, with a grid/list switch.
    119196
    120197**Product Archive**
    … …  
    122199* **Archive** - Category title and description above a sortable product grid.
    123200* **Category with Sidebar** - A category list in a sidebar next to the product grid.
     201* **Category with Filters** (Pro) - Product filters in a sidebar beside the category's products.
    124202
    125203**Cart**
    … …  
    146224
    147225* **Thank You Note** - A short, centered thank-you with the order summary and a keep-shopping button.
     226* **Order Confirmation** (Pro) - Order status, summary, totals, downloads and addresses.
    148227
    149228**My Account**
    150229
    151230* **Classic Account** - Account navigation beside the account content, with a page heading.
     231* **Account with Help Box** (Pro) - Account content with a side box for help and a link back to the shop.
     232
     233= Noah Shop Builder Pro =
     234
     235[Noah Shop Builder Pro](https://wpshark.xyz/noah/pricing/) is an add-on that adds the blocks, layouts, modules and starter designs marked **Pro** above, plus template export and import (move your templates to another site). Everything you build with the free plugin keeps working with or without Pro.
     236
     237👉 [Upgrade to Noah Shop Builder Pro](https://wpshark.xyz/noah/pricing/)
     238
     239= Build Your Woo Store in Minutes =
     240
     2411. Install Noah Shop Builder and WooCommerce.
     2422. Go to Noah Shop Builder → Templates and create a Shop, Single Product, Cart or Checkout template.
     2433. Pick a starter design or start blank, then add Woo blocks from the block inserter.
     2444. Choose where the template shows and publish. Your Gutenberg Woo store is ready.
    152245
    153246= How to Use =
    … …  
    174267* [Documentation](https://wpshark.xyz/docs/) - Comprehensive guides and tutorials
    175268* [Video Tutorials](https://www.youtube.com/watch?v=9F8VXErJSgk&list=PLaYGPJWHiizY) - Step-by-step video guides
     269* [Upgrade to Pro](https://wpshark.xyz/noah/pricing/) - Plans and pricing for Noah Shop Builder Pro
    176270
    177271= Privacy Policy =
    … …  
    220314Yes, Noah Shop Builder for WooCommerce requires WooCommerce to be installed and active. The plugin will show an admin notice if WooCommerce is not detected.
    221315
     316= Is Noah a Gutenberg WooCommerce builder? =
     317
     318Yes. Noah is a Woo builder made for Gutenberg. Every shop, product, cart, checkout, thank-you and account page is built from WooCommerce blocks in the WordPress block editor.
     319
     320= Do I need Elementor to build my Woo store? =
     321
     322No. Noah works in the WordPress block editor, so you can build a complete Woo store without Elementor or any other page builder.
     323
     324= What Woo blocks are included? =
     325
     32650 WooCommerce blocks for single product, shop and archive, cart, checkout, thank-you, My Account and wishlist pages. See the block lists above.
     327
     328= Can I build a custom WooCommerce shop page? =
     329
     330Yes. Create a Shop or Product Archive template in Noah Shop Builder → Templates, then design it with the Archive Products, Order By Filter, Archive Pagination and other shop blocks.
     331
     332= Does it include Variation Swatches and Quick View? =
     333
     334Yes. Variation Swatches, Quick View and Wishlist are free modules. Turn each one on in Noah Shop Builder → Modules.
     335
    222336= Is this plugin compatible with my theme? =
    223337
    … …  
    250364= Is the plugin free? =
    251365
    252 Yes, Noah Shop Builder for WooCommerce is completely free.
     366Yes, Noah Shop Builder for WooCommerce is completely free, with 50 blocks, starter templates and the Quick View, Wishlist and Variation Swatches modules.
     367
     368= What does the Pro add-on offer? =
     369
     370Noah Shop Builder Pro adds Product Filters, Advanced Search, Side Cart, Free Shipping Bar, Sticky Add to Cart, Buy Now, Deal Countdown, Size Chart, Product Comparison, extra product card layouts, more My Account blocks, template export/import and more. See the "Noah Shop Builder Pro" section above, or compare plans on the [pricing page](https://wpshark.xyz/noah/pricing/).
    253371
    254372= Where can I get support? =
    … …  
    270388
    271389== Changelog ==
     390
     391= 2.1.1 =
     392* New: The Blocks and Modules pages show the blocks and modules of Noah Shop Builder Pro as locked cards with an upgrade link. They show as usual once Pro is active.
     393* Improved: Block cards on the Blocks page link to each block's documentation.
     394* Improved: The readme lists the Pro blocks, modules and starter designs under each section.
    272395
    273396= 2.1.0 =
    … …  
    320443== Upgrade Notice ==
    321444
     445= 2.1.1 =
     446Block cards link to their documentation, and the Blocks and Modules pages show what Noah Shop Builder Pro adds.
     447
    322448= 2.1.0 =
    323449Adds Order Received and My Account templates, the Variation Swatches module and an option to delete all data on uninstall. Sale badges now use your theme's colors.
  • noah-shop-builder-for-woocommerce/trunk/src/admin/blocks/index.js

    r3782288 r3801491  
    44
    55import { Fragment } from '@wordpress/element';
    6 import { __ } from '@wordpress/i18n';
     6import { __, sprintf } from '@wordpress/i18n';
    77import { Notice, ToggleControl, Spinner } from '@wordpress/components';
    88import { useDispatch, useSelect } from '@wordpress/data';
    99import { store as dashboardStore } from '../store';
    1010import Badges from '../dashboard/components/Badges';
     11import {
     12        getProCatalog,
     13        LockedBadge,
     14        UpgradeLink,
     15} from '../dashboard/components/ProLock';
    1116
    1217/**
    … …  
    7277                return acc;
    7378        }, {} );
     79
     80        // Pro blocks show locked in their category, after the available ones.
     81        const proCatalog = getProCatalog();
     82
     83        for ( const item of proCatalog.blocks ) {
     84                if ( blocks[ item.slug ] ) {
     85                        continue;
     86                }
     87                const category = item.category || 'other';
     88                if ( ! groupedBlocks[ category ] ) {
     89                        groupedBlocks[ category ] = [];
     90                }
     91                groupedBlocks[ category ].push( { ...item, locked: true } );
     92        }
    7493
    7594        return (
    … …  
    117136                                                <div className="blocks-grid">
    118137                                                        { groupedBlocks[ category ].map( ( block ) => (
    119                                                                 <div key={ block.slug } className="block-card">
     138                                                                <div
     139                                                                        key={ block.slug }
     140                                                                        className={ `block-card${
     141                                                                                block.locked ? ' is-locked' : ''
     142                                                                        }` }
     143                                                                >
    120144                                                                        <div className="block-info">
    121145                                                                                <h3>{ block.title }</h3>
    122                                                                                 <Badges badges={ block.badge } />
     146                                                                                { block.locked ? (
     147                                                                                        <LockedBadge />
     148                                                                                ) : (
     149                                                                                        <Badges badges={ block.badge } />
     150                                                                                ) }
     151                                                                                { block.doc && (
     152                                                                                        <a
     153                                                                                                className="block-doc-link"
     154                                                                                                href={ block.doc }
     155                                                                                                target="_blank"
     156                                                                                                rel="noopener noreferrer"
     157                                                                                        >
     158                                                                                                { __(
     159                                                                                                        'Documentation',
     160                                                                                                        'noah-shop-builder-for-woocommerce'
     161                                                                                                ) }
     162                                                                                                <span className="screen-reader-text">
     163                                                                                                        { sprintf(
     164                                                                                                                /* translators: %s: block title. */
     165                                                                                                                __(
     166                                                                                                                        'for %s (opens in a new tab)',
     167                                                                                                                        'noah-shop-builder-for-woocommerce'
     168                                                                                                                ),
     169                                                                                                                block.title
     170                                                                                                        ) }
     171                                                                                                </span>
     172                                                                                        </a>
     173                                                                                ) }
    123174                                                                        </div>
    124                                                                         <ToggleControl
    125                                                                                 __nextHasNoMarginBottom
    126                                                                                 label={
    127                                                                                         // The title shows on the card; screen readers still get it.
    128                                                                                         <span className="screen-reader-text">
    129                                                                                                 { block.title }
    130                                                                                         </span>
    131                                                                                 }
    132                                                                                 help={
    133                                                                                         block.required
    134                                                                                                 ? __(
    135                                                                                                                 'Required',
    136                                                                                                                 'noah-shop-builder-for-woocommerce'
    137                                                                                                         )
    138                                                                                                 : undefined
    139                                                                                 }
    140                                                                                 checked={ block.status === 'active' }
    141                                                                                 disabled={ block.required }
    142                                                                                 onChange={ ( checked ) =>
    143                                                                                         toggleBlock( block.slug, checked )
    144                                                                                 }
    145                                                                         />
     175                                                                        { block.locked ? (
     176                                                                                <UpgradeLink
     177                                                                                        url={ proCatalog.url }
     178                                                                                        title={ block.title }
     179                                                                                />
     180                                                                        ) : (
     181                                                                                <ToggleControl
     182                                                                                        __nextHasNoMarginBottom
     183                                                                                        label={
     184                                                                                                // The title shows on the card; screen readers still get it.
     185                                                                                                <span className="screen-reader-text">
     186                                                                                                        { block.title }
     187                                                                                                </span>
     188                                                                                        }
     189                                                                                        help={
     190                                                                                                block.required
     191                                                                                                        ? __(
     192                                                                                                                        'Required',
     193                                                                                                                        'noah-shop-builder-for-woocommerce'
     194                                                                                                                )
     195                                                                                                        : undefined
     196                                                                                        }
     197                                                                                        checked={
     198                                                                                                block.status === 'active'
     199                                                                                        }
     200                                                                                        disabled={ block.required }
     201                                                                                        onChange={ ( checked ) =>
     202                                                                                                toggleBlock(
     203                                                                                                        block.slug,
     204                                                                                                        checked
     205                                                                                                )
     206                                                                                        }
     207                                                                                />
     208                                                                        ) }
    146209                                                                </div>
    147210                                                        ) ) }
  • noah-shop-builder-for-woocommerce/trunk/src/admin/dashboard/style.scss

    r3800774 r3801491  
    270270                        }
    271271
     272                        .block-doc-link {
     273                                display: inline-flex;
     274                                align-items: center;
     275                                gap: 4px;
     276                                margin-top: 8px;
     277                                margin-left: 12px;
     278                                font-size: 13px;
     279                                color: #2271b1;
     280                                text-decoration: none;
     281
     282                                &::after {
     283                                        content: "\2197";
     284                                        font-size: 11px;
     285                                }
     286
     287                                &:hover,
     288                                &:focus {
     289                                        color: #135e96;
     290                                        text-decoration: underline;
     291                                }
     292                        }
     293
     294                        // No badge before it: line up with the title.
     295                        h3 + .block-doc-link {
     296                                margin-left: 0;
     297                        }
    272298                }
    273299
    … …  
    434460                color: #f59e0b;
    435461        }
     462
     463        // Locked Pro item (ProLock.js).
     464        .badge-locked {
     465                display: inline-flex;
     466                align-items: center;
     467                gap: 3px;
     468                background: #f3e8ff;
     469                color: #6b21a8;
     470
     471                svg {
     472                        fill: currentcolor;
     473                }
     474        }
     475}
     476
     477// Link to the pricing page on a locked Pro item (ProLock.js).
     478.noah-upgrade-link {
     479        display: inline-flex;
     480        align-items: center;
     481        gap: 4px;
     482        flex-shrink: 0;
     483        font-size: 13px;
     484        font-weight: 600;
     485        color: #6b21a8;
     486        text-decoration: none;
     487
     488        svg {
     489                fill: currentcolor;
     490        }
     491
     492        &.is-button {
     493                padding: 5px 12px 5px 9px;
     494                background: #f3e8ff;
     495                border: 1px solid #e9d5ff;
     496                border-radius: 999px;
     497
     498                &:hover,
     499                &:focus {
     500                        background: #6b21a8;
     501                        border-color: #6b21a8;
     502                        color: #fff;
     503                }
     504        }
     505
     506        &.is-text {
     507                &:hover,
     508                &:focus {
     509                        color: #4c1d95;
     510                        text-decoration: underline;
     511                }
     512        }
     513
     514        &:focus {
     515                outline: 2px solid var(--wp-admin-theme-color, #3858e9);
     516                outline-offset: 2px;
     517                box-shadow: none;
     518        }
     519}
     520
     521.noah-shop-builder-blocks .block-card.is-locked,
     522.noah-shop-builder-modules .module-card.is-locked {
     523        background: #fcfaff;
     524        border-style: dashed;
     525
     526        &:hover {
     527                border-color: #c084fc;
     528        }
     529}
     530
     531.noah-shop-builder-modules .module-card-locked {
     532        margin-top: 16px;
     533        padding-top: 12px;
     534        border-top: 1px dashed #dcdcde;
     535
     536        ul {
     537                margin: 0 0 8px;
     538                padding: 0;
     539                list-style: none;
     540        }
     541
     542        li {
     543                display: flex;
     544                align-items: center;
     545                gap: 6px;
     546                margin: 0 0 4px;
     547                color: #646970;
     548
     549                svg {
     550                        fill: #6b21a8;
     551                }
     552        }
    436553}
    437554
  • noah-shop-builder-for-woocommerce/trunk/src/admin/modules/index.js

    r3800774 r3801491  
    1919import { decodeEntities } from '@wordpress/html-entities';
    2020import { applyFilters } from '@wordpress/hooks';
    21 import { plugins, seen, starFilled, swatch, table } from '@wordpress/icons';
     21import {
     22        lock,
     23        plugins,
     24        seen,
     25        starFilled,
     26        swatch,
     27        table,
     28} from '@wordpress/icons';
    2229import { addQueryArgs } from '@wordpress/url';
    2330import { store as dashboardStore } from '../store';
    2431import Badges from '../dashboard/components/Badges';
     32import {
     33        getProCatalog,
     34        LockedBadge,
     35        UpgradeLink,
     36} from '../dashboard/components/ProLock';
    2537
    2638/**
    … …  
    303315        const planned = Array.isArray( filtered ) ? filtered : upcomingModules;
    304316        const registered = Object.values( modules );
    305         const upcoming = planned.filter( ( item ) => ! modules[ item.slug ] );
     317        const proCatalog = getProCatalog();
     318        const locked = proCatalog.modules.filter(
     319                ( item ) => ! modules[ item.slug ]
     320        );
     321        const upcoming = planned.filter(
     322                ( item ) =>
     323                        ! modules[ item.slug ] &&
     324                        ! locked.some( ( lockedItem ) => lockedItem.slug === item.slug )
     325        );
     326        // Pro settings of a free module that aren't available (no Pro): shown locked.
     327        const lockedFeatures = ( module ) =>
     328                ( proCatalog.features[ module.slug ] || [] ).filter(
     329                        ( feature ) =>
     330                                ! module.fields.some( ( field ) => field.key === feature.key )
     331                );
    306332        const iconOf = ( module ) =>
    307333                planned.find( ( item ) => item.slug === module.slug )?.icon ||
    … …  
    342368                        ) }
    343369
    344                         { registered.length > 0 && (
     370                        { ( registered.length > 0 || locked.length > 0 ) && (
    345371                                <div className="modules-grid">
    346372                                        { registered.map( ( module ) => {
    … …  
    394420                                                                        </Button>
    395421                                                                ) }
     422                                                                { lockedFeatures( module ).length > 0 && (
     423                                                                        <div className="module-card-locked">
     424                                                                                <ul>
     425                                                                                        { lockedFeatures( module ).map(
     426                                                                                                ( feature ) => (
     427                                                                                                        <li key={ feature.key }>
     428                                                                                                                <Icon
     429                                                                                                                        icon={ lock }
     430                                                                                                                        size={ 14 }
     431                                                                                                                />
     432                                                                                                                { feature.label }
     433                                                                                                        </li>
     434                                                                                                )
     435                                                                                        ) }
     436                                                                                </ul>
     437                                                                                <UpgradeLink
     438                                                                                        url={ proCatalog.url }
     439                                                                                        title={ lockedFeatures( module )
     440                                                                                                .map(
     441                                                                                                        ( feature ) => feature.label
     442                                                                                                )
     443                                                                                                .join( ', ' ) }
     444                                                                                        label={ __(
     445                                                                                                'Unlock with Pro',
     446                                                                                                'noah-shop-builder-for-woocommerce'
     447                                                                                        ) }
     448                                                                                        variant="text"
     449                                                                                />
     450                                                                        </div>
     451                                                                ) }
    396452                                                        </div>
    397453                                                );
    398454                                        } ) }
     455                                        { locked.map( ( module ) => (
     456                                                <div
     457                                                        key={ module.slug }
     458                                                        className="module-card is-locked"
     459                                                >
     460                                                        <div className="module-card-header">
     461                                                                <span className="module-icon">
     462                                                                        <Icon
     463                                                                                icon={ ICONS[ module.icon ] || plugins }
     464                                                                                size={ 24 }
     465                                                                        />
     466                                                                </span>
     467                                                                <UpgradeLink
     468                                                                        url={ proCatalog.url }
     469                                                                        title={ module.title }
     470                                                                />
     471                                                        </div>
     472                                                        <h3>
     473                                                                { module.title } <LockedBadge />
     474                                                        </h3>
     475                                                        <p>{ module.description }</p>
     476                                                </div>
     477                                        ) ) }
    399478                                </div>
    400479                        ) }
  • noah-shop-builder-for-woocommerce/trunk/vendor/composer/autoload_classmap.php

    r3800774 r3801491  
    1010    'NoahShopBuilder\\Admin\\Admin' => $baseDir . '/includes/Admin/Admin.php',
    1111    'NoahShopBuilder\\Admin\\PluginLinks' => $baseDir . '/includes/Admin/PluginLinks.php',
     12    'NoahShopBuilder\\Admin\\ProCatalog' => $baseDir . '/includes/Admin/ProCatalog.php',
    1213    'NoahShopBuilder\\Assets\\DynamicCss' => $baseDir . '/includes/Assets/DynamicCss.php',
    1314    'NoahShopBuilder\\Assets\\Manager' => $baseDir . '/includes/Assets/Manager.php',
  • noah-shop-builder-for-woocommerce/trunk/vendor/composer/autoload_real.php

    r3800774 r3801491  
    3232        call_user_func(\Composer\Autoload\ComposerStaticInita2bd8db3214f3533eaef3d126cda274d::getInitializer($loader));
    3333
    34         $loader->setClassMapAuthoritative(true);
    3534        $loader->register(true);
    3635
  • noah-shop-builder-for-woocommerce/trunk/vendor/composer/autoload_static.php

    r3800774 r3801491  
    2525        'NoahShopBuilder\\Admin\\Admin' => __DIR__ . '/../..' . '/includes/Admin/Admin.php',
    2626        'NoahShopBuilder\\Admin\\PluginLinks' => __DIR__ . '/../..' . '/includes/Admin/PluginLinks.php',
     27        'NoahShopBuilder\\Admin\\ProCatalog' => __DIR__ . '/../..' . '/includes/Admin/ProCatalog.php',
    2728        'NoahShopBuilder\\Assets\\DynamicCss' => __DIR__ . '/../..' . '/includes/Assets/DynamicCss.php',
    2829        'NoahShopBuilder\\Assets\\Manager' => __DIR__ . '/../..' . '/includes/Assets/Manager.php',
Note: See TracChangeset for help on using the changeset viewer.