@lightspeed/crane 3.5.0-rc.0 → 3.5.1-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,17 @@
1
1
  # Changelog
2
2
 
3
- ## 3.5.0 - 2026-06-08
3
+ ## 3.5.1 - 2026-06-16
4
+
5
+ ### Fixed
6
+
7
+ - align custom storefront layout Dutch and French labels
8
+
9
+ ## 3.5.0 - 2026-06-09
10
+
11
+ ### Added
12
+
13
+ - Support all types for Button and Menu content setting
14
+ - validate custom storefront layout slot dependencies
4
15
 
5
16
  ### Changed
6
17
 
package/dist/cli.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import*as Qs from"fs";import ee,{existsSync as ke,readFileSync as Ar,statSync as ws,promises as Pr,writeFileSync as wr,createReadStream as gp,mkdtempSync as Ep,mkdirSync as Tp,rmSync as Za}from"fs";import*as ei from"path";import Se,{resolve as G,dirname as Wa,relative as Ka,basename as Sp,sep as Cr,parse as qa,join as We}from"path";import bp from"cac";import{green as et,yellow as Ip,red as xp,gray as Ap}from"kolorist";import Qt from"prompts";import Ya from"adm-zip";import{glob as W,globSync as Xa}from"glob";import tt from"typescript";import{normalizePath as Pp,build as ht,defineConfig as ti,createServer as wp}from"vite";import"vue";import"vue/server-renderer";import*as Ie from"process";import si from"process";import{JSONPath as Cp}from"jsonpath-plus";import{readFile as _r,writeFile as _p}from"fs/promises";import{pathToFileURL as Ja,URL as vp}from"url";import vr,{AxiosError as Qa}from"axios";import Np from"tinycolor2";import{ButtonTypeEnum as ii}from"@lightspeed/crane-api";import{builtinModules as eo}from"module";import{viteExternalsPlugin as to}from"vite-plugin-externals";import Op from"vite-plugin-compression";import Lp from"@vitejs/plugin-vue";import Dp from"vite-tsconfig-paths";import kp from"vite-plugin-checker";import{encode as Rp}from"@jridgewell/sourcemap-codec";import{promisify as so}from"node:util";import io from"node:zlib";import me from"node:fs";import Re from"node:path";import be from"node:process";import Mp from"micromatch";import{fileURLToPath as $p}from"node:url";import{ConcurrencyManager as Fp}from"axios-concurrency";import{inc as Bp}from"semver";import Up from"cli-progress";import{WebSocketServer as jp,WebSocket as zp}from"ws";import*as Vp from"os";import{spawnSync as Gp}from"child_process";const Hp="3.5.0-rc.0";function P(e,s,i){function a(f,y){if(f._zod||Object.defineProperty(f,"_zod",{value:{def:y,constr:h,traits:new Set},enumerable:!1}),f._zod.traits.has(e))return;f._zod.traits.add(e),s(f,y);const T=h.prototype,I=Object.keys(T);for(let A=0;A<I.length;A++){const L=I[A];L in f||(f[L]=T[L].bind(f))}}const c=i?.Parent??Object;class u extends c{}Object.defineProperty(u,"name",{value:e});function h(f){var y;const T=i?.Parent?new u:this;a(T,f),(y=T._zod).deferred??(y.deferred=[]);for(const I of T._zod.deferred)I();return T}return Object.defineProperty(h,"init",{value:a}),Object.defineProperty(h,Symbol.hasInstance,{value:f=>i?.Parent&&f instanceof i.Parent?!0:f?._zod?.traits?.has(e)}),Object.defineProperty(h,"name",{value:e}),h}class es extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}class ro extends Error{constructor(s){super(`Encountered unidirectional transform during encode: ${s}`),this.name="ZodEncodeError"}}const Nr={};function pt(e){return e&&Object.assign(Nr,e),Nr}function no(e){const s=Object.values(e).filter(a=>typeof a=="number");return Object.entries(e).filter(([a,c])=>s.indexOf(+a)===-1).map(([a,c])=>c)}function Or(e,s){return typeof s=="bigint"?s.toString():s}function ri(e){return{get value(){{const s=e();return Object.defineProperty(this,"value",{value:s}),s}}}}function Lr(e){return e==null}function Dr(e){const s=e.startsWith("^")?1:0,i=e.endsWith("$")?e.length-1:e.length;return e.slice(s,i)}function Zp(e,s){const i=(e.toString().split(".")[1]||"").length,a=s.toString();let c=(a.split(".")[1]||"").length;if(c===0&&/\d?e-\d?/.test(a)){const y=a.match(/\d?e-(\d?)/);y?.[1]&&(c=Number.parseInt(y[1]))}const u=i>c?i:c,h=Number.parseInt(e.toFixed(u).replace(".","")),f=Number.parseInt(s.toFixed(u).replace(".",""));return h%f/10**u}const ao=Symbol("evaluating");function re(e,s,i){let a;Object.defineProperty(e,s,{get(){if(a!==ao)return a===void 0&&(a=ao,a=i()),a},set(c){Object.defineProperty(e,s,{value:c})},configurable:!0})}function Ft(e,s,i){Object.defineProperty(e,s,{value:i,writable:!0,enumerable:!0,configurable:!0})}function Ct(...e){const s={};for(const i of e){const a=Object.getOwnPropertyDescriptors(i);Object.assign(s,a)}return Object.defineProperties({},s)}function oo(e){return JSON.stringify(e)}function Wp(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}const co="captureStackTrace"in Error?Error.captureStackTrace:(...e)=>{};function Cs(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const Kp=ri(()=>{if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{const e=Function;return new e(""),!0}catch{return!1}});function ts(e){if(Cs(e)===!1)return!1;const s=e.constructor;if(s===void 0||typeof s!="function")return!0;const i=s.prototype;return!(Cs(i)===!1||Object.prototype.hasOwnProperty.call(i,"isPrototypeOf")===!1)}function lo(e){return ts(e)?{...e}:Array.isArray(e)?[...e]:e}const qp=new Set(["string","number","symbol"]);function ss(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function _t(e,s,i){const a=new e._zod.constr(s??e._zod.def);return(!s||i?.parent)&&(a._zod.parent=e),a}function U(e){const s=e;if(!s)return{};if(typeof s=="string")return{error:()=>s};if(s?.message!==void 0){if(s?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");s.error=s.message}return delete s.message,typeof s.error=="string"?{...s,error:()=>s.error}:s}function Yp(e){return Object.keys(e).filter(s=>e[s]._zod.optin==="optional"&&e[s]._zod.optout==="optional")}const Xp={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function Jp(e,s){const i=e._zod.def,a=i.checks;if(a&&a.length>0)throw new Error(".pick() cannot be used on object schemas containing refinements");const u=Ct(e._zod.def,{get shape(){const h={};for(const f in s){if(!(f in i.shape))throw new Error(`Unrecognized key: "${f}"`);s[f]&&(h[f]=i.shape[f])}return Ft(this,"shape",h),h},checks:[]});return _t(e,u)}function Qp(e,s){const i=e._zod.def,a=i.checks;if(a&&a.length>0)throw new Error(".omit() cannot be used on object schemas containing refinements");const u=Ct(e._zod.def,{get shape(){const h={...e._zod.def.shape};for(const f in s){if(!(f in i.shape))throw new Error(`Unrecognized key: "${f}"`);s[f]&&delete h[f]}return Ft(this,"shape",h),h},checks:[]});return _t(e,u)}function ed(e,s){if(!ts(s))throw new Error("Invalid input to extend: expected a plain object");const i=e._zod.def.checks;if(i&&i.length>0){const u=e._zod.def.shape;for(const h in s)if(Object.getOwnPropertyDescriptor(u,h)!==void 0)throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}const c=Ct(e._zod.def,{get shape(){const u={...e._zod.def.shape,...s};return Ft(this,"shape",u),u}});return _t(e,c)}function td(e,s){if(!ts(s))throw new Error("Invalid input to safeExtend: expected a plain object");const i=Ct(e._zod.def,{get shape(){const a={...e._zod.def.shape,...s};return Ft(this,"shape",a),a}});return _t(e,i)}function sd(e,s){const i=Ct(e._zod.def,{get shape(){const a={...e._zod.def.shape,...s._zod.def.shape};return Ft(this,"shape",a),a},get catchall(){return s._zod.def.catchall},checks:[]});return _t(e,i)}function id(e,s,i){const c=s._zod.def.checks;if(c&&c.length>0)throw new Error(".partial() cannot be used on object schemas containing refinements");const h=Ct(s._zod.def,{get shape(){const f=s._zod.def.shape,y={...f};if(i)for(const T in i){if(!(T in f))throw new Error(`Unrecognized key: "${T}"`);i[T]&&(y[T]=e?new e({type:"optional",innerType:f[T]}):f[T])}else for(const T in f)y[T]=e?new e({type:"optional",innerType:f[T]}):f[T];return Ft(this,"shape",y),y},checks:[]});return _t(s,h)}function rd(e,s,i){const a=Ct(s._zod.def,{get shape(){const c=s._zod.def.shape,u={...c};if(i)for(const h in i){if(!(h in u))throw new Error(`Unrecognized key: "${h}"`);i[h]&&(u[h]=new e({type:"nonoptional",innerType:c[h]}))}else for(const h in c)u[h]=new e({type:"nonoptional",innerType:c[h]});return Ft(this,"shape",u),u}});return _t(s,a)}function is(e,s=0){if(e.aborted===!0)return!0;for(let i=s;i<e.issues.length;i++)if(e.issues[i]?.continue!==!0)return!0;return!1}function rs(e,s){return s.map(i=>{var a;return(a=i).path??(a.path=[]),i.path.unshift(e),i})}function ni(e){return typeof e=="string"?e:e?.message}function vt(e,s,i){const a={...e,path:e.path??[]};if(!e.message){const c=ni(e.inst?._zod.def?.error?.(e))??ni(s?.error?.(e))??ni(i.customError?.(e))??ni(i.localeError?.(e))??"Invalid input";a.message=c}return delete a.inst,delete a.continue,s?.reportInput||delete a.input,a}function kr(e){return Array.isArray(e)?"array":typeof e=="string"?"string":"unknown"}function _s(...e){const[s,i,a]=e;return typeof s=="string"?{message:s,code:"custom",input:i,inst:a}:{...s}}const uo=(e,s)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:s,enumerable:!1}),e.message=JSON.stringify(s,Or,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},ho=P("$ZodError",uo),po=P("$ZodError",uo,{Parent:Error});function nd(e,s=i=>i.message){const i={},a=[];for(const c of e.issues)c.path.length>0?(i[c.path[0]]=i[c.path[0]]||[],i[c.path[0]].push(s(c))):a.push(s(c));return{formErrors:a,fieldErrors:i}}function ad(e,s=i=>i.message){const i={_errors:[]},a=c=>{for(const u of c.issues)if(u.code==="invalid_union"&&u.errors.length)u.errors.map(h=>a({issues:h}));else if(u.code==="invalid_key")a({issues:u.issues});else if(u.code==="invalid_element")a({issues:u.issues});else if(u.path.length===0)i._errors.push(s(u));else{let h=i,f=0;for(;f<u.path.length;){const y=u.path[f];f===u.path.length-1?(h[y]=h[y]||{_errors:[]},h[y]._errors.push(s(u))):h[y]=h[y]||{_errors:[]},h=h[y],f++}}};return a(e),i}const Rr=e=>(s,i,a,c)=>{const u=a?Object.assign(a,{async:!1}):{async:!1},h=s._zod.run({value:i,issues:[]},u);if(h instanceof Promise)throw new es;if(h.issues.length){const f=new(c?.Err??e)(h.issues.map(y=>vt(y,u,pt())));throw co(f,c?.callee),f}return h.value},Mr=e=>async(s,i,a,c)=>{const u=a?Object.assign(a,{async:!0}):{async:!0};let h=s._zod.run({value:i,issues:[]},u);if(h instanceof Promise&&(h=await h),h.issues.length){const f=new(c?.Err??e)(h.issues.map(y=>vt(y,u,pt())));throw co(f,c?.callee),f}return h.value},ai=e=>(s,i,a)=>{const c=a?{...a,async:!1}:{async:!1},u=s._zod.run({value:i,issues:[]},c);if(u instanceof Promise)throw new es;return u.issues.length?{success:!1,error:new(e??ho)(u.issues.map(h=>vt(h,c,pt())))}:{success:!0,data:u.value}},od=ai(po),oi=e=>async(s,i,a)=>{const c=a?Object.assign(a,{async:!0}):{async:!0};let u=s._zod.run({value:i,issues:[]},c);return u instanceof Promise&&(u=await u),u.issues.length?{success:!1,error:new e(u.issues.map(h=>vt(h,c,pt())))}:{success:!0,data:u.value}},cd=oi(po),ld=e=>(s,i,a)=>{const c=a?Object.assign(a,{direction:"backward"}):{direction:"backward"};return Rr(e)(s,i,c)},ud=e=>(s,i,a)=>Rr(e)(s,i,a),hd=e=>async(s,i,a)=>{const c=a?Object.assign(a,{direction:"backward"}):{direction:"backward"};return Mr(e)(s,i,c)},pd=e=>async(s,i,a)=>Mr(e)(s,i,a),dd=e=>(s,i,a)=>{const c=a?Object.assign(a,{direction:"backward"}):{direction:"backward"};return ai(e)(s,i,c)},fd=e=>(s,i,a)=>ai(e)(s,i,a),md=e=>async(s,i,a)=>{const c=a?Object.assign(a,{direction:"backward"}):{direction:"backward"};return oi(e)(s,i,c)},yd=e=>async(s,i,a)=>oi(e)(s,i,a),gd=/^[cC][^\s-]{8,}$/,Ed=/^[0-9a-z]+$/,Td=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,Sd=/^[0-9a-vA-V]{20}$/,bd=/^[A-Za-z0-9]{27}$/,Id=/^[a-zA-Z0-9_-]{21}$/,xd=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,Ad=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,fo=e=>e?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,Pd=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,wd="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";function Cd(){return new RegExp(wd,"u")}const _d=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,vd=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,Nd=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Od=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Ld=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,mo=/^[A-Za-z0-9_-]*$/,Dd=/^\+[1-9]\d{6,14}$/,yo="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",kd=new RegExp(`^${yo}$`);function go(e){const s="(?:[01]\\d|2[0-3]):[0-5]\\d";return typeof e.precision=="number"?e.precision===-1?`${s}`:e.precision===0?`${s}:[0-5]\\d`:`${s}:[0-5]\\d\\.\\d{${e.precision}}`:`${s}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Rd(e){return new RegExp(`^${go(e)}$`)}function Md(e){const s=go({precision:e.precision}),i=["Z"];e.local&&i.push(""),e.offset&&i.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");const a=`${s}(?:${i.join("|")})`;return new RegExp(`^${yo}T(?:${a})$`)}const $d=e=>{const s=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${s}$`)},Fd=/^-?\d+$/,Eo=/^-?\d+(?:\.\d+)?$/,Bd=/^(?:true|false)$/i,Ud=/^[^A-Z]*$/,jd=/^[^a-z]*$/,Fe=P("$ZodCheck",(e,s)=>{var i;e._zod??(e._zod={}),e._zod.def=s,(i=e._zod).onattach??(i.onattach=[])}),To={number:"number",bigint:"bigint",object:"date"},So=P("$ZodCheckLessThan",(e,s)=>{Fe.init(e,s);const i=To[typeof s.value];e._zod.onattach.push(a=>{const c=a._zod.bag,u=(s.inclusive?c.maximum:c.exclusiveMaximum)??Number.POSITIVE_INFINITY;s.value<u&&(s.inclusive?c.maximum=s.value:c.exclusiveMaximum=s.value)}),e._zod.check=a=>{(s.inclusive?a.value<=s.value:a.value<s.value)||a.issues.push({origin:i,code:"too_big",maximum:typeof s.value=="object"?s.value.getTime():s.value,input:a.value,inclusive:s.inclusive,inst:e,continue:!s.abort})}}),bo=P("$ZodCheckGreaterThan",(e,s)=>{Fe.init(e,s);const i=To[typeof s.value];e._zod.onattach.push(a=>{const c=a._zod.bag,u=(s.inclusive?c.minimum:c.exclusiveMinimum)??Number.NEGATIVE_INFINITY;s.value>u&&(s.inclusive?c.minimum=s.value:c.exclusiveMinimum=s.value)}),e._zod.check=a=>{(s.inclusive?a.value>=s.value:a.value>s.value)||a.issues.push({origin:i,code:"too_small",minimum:typeof s.value=="object"?s.value.getTime():s.value,input:a.value,inclusive:s.inclusive,inst:e,continue:!s.abort})}}),zd=P("$ZodCheckMultipleOf",(e,s)=>{Fe.init(e,s),e._zod.onattach.push(i=>{var a;(a=i._zod.bag).multipleOf??(a.multipleOf=s.value)}),e._zod.check=i=>{if(typeof i.value!=typeof s.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof i.value=="bigint"?i.value%s.value===BigInt(0):Zp(i.value,s.value)===0)||i.issues.push({origin:typeof i.value,code:"not_multiple_of",divisor:s.value,input:i.value,inst:e,continue:!s.abort})}}),Vd=P("$ZodCheckNumberFormat",(e,s)=>{Fe.init(e,s),s.format=s.format||"float64";const i=s.format?.includes("int"),a=i?"int":"number",[c,u]=Xp[s.format];e._zod.onattach.push(h=>{const f=h._zod.bag;f.format=s.format,f.minimum=c,f.maximum=u,i&&(f.pattern=Fd)}),e._zod.check=h=>{const f=h.value;if(i){if(!Number.isInteger(f)){h.issues.push({expected:a,format:s.format,code:"invalid_type",continue:!1,input:f,inst:e});return}if(!Number.isSafeInteger(f)){f>0?h.issues.push({input:f,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:a,inclusive:!0,continue:!s.abort}):h.issues.push({input:f,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:a,inclusive:!0,continue:!s.abort});return}}f<c&&h.issues.push({origin:"number",input:f,code:"too_small",minimum:c,inclusive:!0,inst:e,continue:!s.abort}),f>u&&h.issues.push({origin:"number",input:f,code:"too_big",maximum:u,inclusive:!0,inst:e,continue:!s.abort})}}),Gd=P("$ZodCheckMaxLength",(e,s)=>{var i;Fe.init(e,s),(i=e._zod.def).when??(i.when=a=>{const c=a.value;return!Lr(c)&&c.length!==void 0}),e._zod.onattach.push(a=>{const c=a._zod.bag.maximum??Number.POSITIVE_INFINITY;s.maximum<c&&(a._zod.bag.maximum=s.maximum)}),e._zod.check=a=>{const c=a.value;if(c.length<=s.maximum)return;const h=kr(c);a.issues.push({origin:h,code:"too_big",maximum:s.maximum,inclusive:!0,input:c,inst:e,continue:!s.abort})}}),Hd=P("$ZodCheckMinLength",(e,s)=>{var i;Fe.init(e,s),(i=e._zod.def).when??(i.when=a=>{const c=a.value;return!Lr(c)&&c.length!==void 0}),e._zod.onattach.push(a=>{const c=a._zod.bag.minimum??Number.NEGATIVE_INFINITY;s.minimum>c&&(a._zod.bag.minimum=s.minimum)}),e._zod.check=a=>{const c=a.value;if(c.length>=s.minimum)return;const h=kr(c);a.issues.push({origin:h,code:"too_small",minimum:s.minimum,inclusive:!0,input:c,inst:e,continue:!s.abort})}}),Zd=P("$ZodCheckLengthEquals",(e,s)=>{var i;Fe.init(e,s),(i=e._zod.def).when??(i.when=a=>{const c=a.value;return!Lr(c)&&c.length!==void 0}),e._zod.onattach.push(a=>{const c=a._zod.bag;c.minimum=s.length,c.maximum=s.length,c.length=s.length}),e._zod.check=a=>{const c=a.value,u=c.length;if(u===s.length)return;const h=kr(c),f=u>s.length;a.issues.push({origin:h,...f?{code:"too_big",maximum:s.length}:{code:"too_small",minimum:s.length},inclusive:!0,exact:!0,input:a.value,inst:e,continue:!s.abort})}}),ci=P("$ZodCheckStringFormat",(e,s)=>{var i,a;Fe.init(e,s),e._zod.onattach.push(c=>{const u=c._zod.bag;u.format=s.format,s.pattern&&(u.patterns??(u.patterns=new Set),u.patterns.add(s.pattern))}),s.pattern?(i=e._zod).check??(i.check=c=>{s.pattern.lastIndex=0,!s.pattern.test(c.value)&&c.issues.push({origin:"string",code:"invalid_format",format:s.format,input:c.value,...s.pattern?{pattern:s.pattern.toString()}:{},inst:e,continue:!s.abort})}):(a=e._zod).check??(a.check=()=>{})}),Wd=P("$ZodCheckRegex",(e,s)=>{ci.init(e,s),e._zod.check=i=>{s.pattern.lastIndex=0,!s.pattern.test(i.value)&&i.issues.push({origin:"string",code:"invalid_format",format:"regex",input:i.value,pattern:s.pattern.toString(),inst:e,continue:!s.abort})}}),Kd=P("$ZodCheckLowerCase",(e,s)=>{s.pattern??(s.pattern=Ud),ci.init(e,s)}),qd=P("$ZodCheckUpperCase",(e,s)=>{s.pattern??(s.pattern=jd),ci.init(e,s)}),Yd=P("$ZodCheckIncludes",(e,s)=>{Fe.init(e,s);const i=ss(s.includes),a=new RegExp(typeof s.position=="number"?`^.{${s.position}}${i}`:i);s.pattern=a,e._zod.onattach.push(c=>{const u=c._zod.bag;u.patterns??(u.patterns=new Set),u.patterns.add(a)}),e._zod.check=c=>{c.value.includes(s.includes,s.position)||c.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:s.includes,input:c.value,inst:e,continue:!s.abort})}}),Xd=P("$ZodCheckStartsWith",(e,s)=>{Fe.init(e,s);const i=new RegExp(`^${ss(s.prefix)}.*`);s.pattern??(s.pattern=i),e._zod.onattach.push(a=>{const c=a._zod.bag;c.patterns??(c.patterns=new Set),c.patterns.add(i)}),e._zod.check=a=>{a.value.startsWith(s.prefix)||a.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:s.prefix,input:a.value,inst:e,continue:!s.abort})}}),Jd=P("$ZodCheckEndsWith",(e,s)=>{Fe.init(e,s);const i=new RegExp(`.*${ss(s.suffix)}$`);s.pattern??(s.pattern=i),e._zod.onattach.push(a=>{const c=a._zod.bag;c.patterns??(c.patterns=new Set),c.patterns.add(i)}),e._zod.check=a=>{a.value.endsWith(s.suffix)||a.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:s.suffix,input:a.value,inst:e,continue:!s.abort})}}),Qd=P("$ZodCheckOverwrite",(e,s)=>{Fe.init(e,s),e._zod.check=i=>{i.value=s.tx(i.value)}});class ef{constructor(s=[]){this.content=[],this.indent=0,this&&(this.args=s)}indented(s){this.indent+=1,s(this),this.indent-=1}write(s){if(typeof s=="function"){s(this,{execution:"sync"}),s(this,{execution:"async"});return}const a=s.split(`
1
+ import*as Qs from"fs";import ee,{existsSync as ke,readFileSync as Ar,statSync as ws,promises as Pr,writeFileSync as wr,createReadStream as gp,mkdtempSync as Ep,mkdirSync as Tp,rmSync as Za}from"fs";import*as ei from"path";import Se,{resolve as G,dirname as Wa,relative as Ka,basename as Sp,sep as Cr,parse as qa,join as We}from"path";import bp from"cac";import{green as et,yellow as Ip,red as xp,gray as Ap}from"kolorist";import Qt from"prompts";import Ya from"adm-zip";import{glob as W,globSync as Xa}from"glob";import tt from"typescript";import{normalizePath as Pp,build as ht,defineConfig as ti,createServer as wp}from"vite";import"vue";import"vue/server-renderer";import*as Ie from"process";import si from"process";import{JSONPath as Cp}from"jsonpath-plus";import{readFile as _r,writeFile as _p}from"fs/promises";import{pathToFileURL as Ja,URL as vp}from"url";import vr,{AxiosError as Qa}from"axios";import Np from"tinycolor2";import{ButtonTypeEnum as ii}from"@lightspeed/crane-api";import{builtinModules as eo}from"module";import{viteExternalsPlugin as to}from"vite-plugin-externals";import Op from"vite-plugin-compression";import Lp from"@vitejs/plugin-vue";import Dp from"vite-tsconfig-paths";import kp from"vite-plugin-checker";import{encode as Rp}from"@jridgewell/sourcemap-codec";import{promisify as so}from"node:util";import io from"node:zlib";import me from"node:fs";import Re from"node:path";import be from"node:process";import Mp from"micromatch";import{fileURLToPath as $p}from"node:url";import{ConcurrencyManager as Fp}from"axios-concurrency";import{inc as Bp}from"semver";import Up from"cli-progress";import{WebSocketServer as jp,WebSocket as zp}from"ws";import*as Vp from"os";import{spawnSync as Gp}from"child_process";const Hp="3.5.1-rc.0";function P(e,s,i){function a(f,y){if(f._zod||Object.defineProperty(f,"_zod",{value:{def:y,constr:h,traits:new Set},enumerable:!1}),f._zod.traits.has(e))return;f._zod.traits.add(e),s(f,y);const T=h.prototype,I=Object.keys(T);for(let A=0;A<I.length;A++){const L=I[A];L in f||(f[L]=T[L].bind(f))}}const c=i?.Parent??Object;class u extends c{}Object.defineProperty(u,"name",{value:e});function h(f){var y;const T=i?.Parent?new u:this;a(T,f),(y=T._zod).deferred??(y.deferred=[]);for(const I of T._zod.deferred)I();return T}return Object.defineProperty(h,"init",{value:a}),Object.defineProperty(h,Symbol.hasInstance,{value:f=>i?.Parent&&f instanceof i.Parent?!0:f?._zod?.traits?.has(e)}),Object.defineProperty(h,"name",{value:e}),h}class es extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}class ro extends Error{constructor(s){super(`Encountered unidirectional transform during encode: ${s}`),this.name="ZodEncodeError"}}const Nr={};function pt(e){return e&&Object.assign(Nr,e),Nr}function no(e){const s=Object.values(e).filter(a=>typeof a=="number");return Object.entries(e).filter(([a,c])=>s.indexOf(+a)===-1).map(([a,c])=>c)}function Or(e,s){return typeof s=="bigint"?s.toString():s}function ri(e){return{get value(){{const s=e();return Object.defineProperty(this,"value",{value:s}),s}}}}function Lr(e){return e==null}function Dr(e){const s=e.startsWith("^")?1:0,i=e.endsWith("$")?e.length-1:e.length;return e.slice(s,i)}function Zp(e,s){const i=(e.toString().split(".")[1]||"").length,a=s.toString();let c=(a.split(".")[1]||"").length;if(c===0&&/\d?e-\d?/.test(a)){const y=a.match(/\d?e-(\d?)/);y?.[1]&&(c=Number.parseInt(y[1]))}const u=i>c?i:c,h=Number.parseInt(e.toFixed(u).replace(".","")),f=Number.parseInt(s.toFixed(u).replace(".",""));return h%f/10**u}const ao=Symbol("evaluating");function re(e,s,i){let a;Object.defineProperty(e,s,{get(){if(a!==ao)return a===void 0&&(a=ao,a=i()),a},set(c){Object.defineProperty(e,s,{value:c})},configurable:!0})}function Ft(e,s,i){Object.defineProperty(e,s,{value:i,writable:!0,enumerable:!0,configurable:!0})}function Ct(...e){const s={};for(const i of e){const a=Object.getOwnPropertyDescriptors(i);Object.assign(s,a)}return Object.defineProperties({},s)}function oo(e){return JSON.stringify(e)}function Wp(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}const co="captureStackTrace"in Error?Error.captureStackTrace:(...e)=>{};function Cs(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const Kp=ri(()=>{if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{const e=Function;return new e(""),!0}catch{return!1}});function ts(e){if(Cs(e)===!1)return!1;const s=e.constructor;if(s===void 0||typeof s!="function")return!0;const i=s.prototype;return!(Cs(i)===!1||Object.prototype.hasOwnProperty.call(i,"isPrototypeOf")===!1)}function lo(e){return ts(e)?{...e}:Array.isArray(e)?[...e]:e}const qp=new Set(["string","number","symbol"]);function ss(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function _t(e,s,i){const a=new e._zod.constr(s??e._zod.def);return(!s||i?.parent)&&(a._zod.parent=e),a}function U(e){const s=e;if(!s)return{};if(typeof s=="string")return{error:()=>s};if(s?.message!==void 0){if(s?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");s.error=s.message}return delete s.message,typeof s.error=="string"?{...s,error:()=>s.error}:s}function Yp(e){return Object.keys(e).filter(s=>e[s]._zod.optin==="optional"&&e[s]._zod.optout==="optional")}const Xp={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function Jp(e,s){const i=e._zod.def,a=i.checks;if(a&&a.length>0)throw new Error(".pick() cannot be used on object schemas containing refinements");const u=Ct(e._zod.def,{get shape(){const h={};for(const f in s){if(!(f in i.shape))throw new Error(`Unrecognized key: "${f}"`);s[f]&&(h[f]=i.shape[f])}return Ft(this,"shape",h),h},checks:[]});return _t(e,u)}function Qp(e,s){const i=e._zod.def,a=i.checks;if(a&&a.length>0)throw new Error(".omit() cannot be used on object schemas containing refinements");const u=Ct(e._zod.def,{get shape(){const h={...e._zod.def.shape};for(const f in s){if(!(f in i.shape))throw new Error(`Unrecognized key: "${f}"`);s[f]&&delete h[f]}return Ft(this,"shape",h),h},checks:[]});return _t(e,u)}function ed(e,s){if(!ts(s))throw new Error("Invalid input to extend: expected a plain object");const i=e._zod.def.checks;if(i&&i.length>0){const u=e._zod.def.shape;for(const h in s)if(Object.getOwnPropertyDescriptor(u,h)!==void 0)throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}const c=Ct(e._zod.def,{get shape(){const u={...e._zod.def.shape,...s};return Ft(this,"shape",u),u}});return _t(e,c)}function td(e,s){if(!ts(s))throw new Error("Invalid input to safeExtend: expected a plain object");const i=Ct(e._zod.def,{get shape(){const a={...e._zod.def.shape,...s};return Ft(this,"shape",a),a}});return _t(e,i)}function sd(e,s){const i=Ct(e._zod.def,{get shape(){const a={...e._zod.def.shape,...s._zod.def.shape};return Ft(this,"shape",a),a},get catchall(){return s._zod.def.catchall},checks:[]});return _t(e,i)}function id(e,s,i){const c=s._zod.def.checks;if(c&&c.length>0)throw new Error(".partial() cannot be used on object schemas containing refinements");const h=Ct(s._zod.def,{get shape(){const f=s._zod.def.shape,y={...f};if(i)for(const T in i){if(!(T in f))throw new Error(`Unrecognized key: "${T}"`);i[T]&&(y[T]=e?new e({type:"optional",innerType:f[T]}):f[T])}else for(const T in f)y[T]=e?new e({type:"optional",innerType:f[T]}):f[T];return Ft(this,"shape",y),y},checks:[]});return _t(s,h)}function rd(e,s,i){const a=Ct(s._zod.def,{get shape(){const c=s._zod.def.shape,u={...c};if(i)for(const h in i){if(!(h in u))throw new Error(`Unrecognized key: "${h}"`);i[h]&&(u[h]=new e({type:"nonoptional",innerType:c[h]}))}else for(const h in c)u[h]=new e({type:"nonoptional",innerType:c[h]});return Ft(this,"shape",u),u}});return _t(s,a)}function is(e,s=0){if(e.aborted===!0)return!0;for(let i=s;i<e.issues.length;i++)if(e.issues[i]?.continue!==!0)return!0;return!1}function rs(e,s){return s.map(i=>{var a;return(a=i).path??(a.path=[]),i.path.unshift(e),i})}function ni(e){return typeof e=="string"?e:e?.message}function vt(e,s,i){const a={...e,path:e.path??[]};if(!e.message){const c=ni(e.inst?._zod.def?.error?.(e))??ni(s?.error?.(e))??ni(i.customError?.(e))??ni(i.localeError?.(e))??"Invalid input";a.message=c}return delete a.inst,delete a.continue,s?.reportInput||delete a.input,a}function kr(e){return Array.isArray(e)?"array":typeof e=="string"?"string":"unknown"}function _s(...e){const[s,i,a]=e;return typeof s=="string"?{message:s,code:"custom",input:i,inst:a}:{...s}}const uo=(e,s)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:s,enumerable:!1}),e.message=JSON.stringify(s,Or,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},ho=P("$ZodError",uo),po=P("$ZodError",uo,{Parent:Error});function nd(e,s=i=>i.message){const i={},a=[];for(const c of e.issues)c.path.length>0?(i[c.path[0]]=i[c.path[0]]||[],i[c.path[0]].push(s(c))):a.push(s(c));return{formErrors:a,fieldErrors:i}}function ad(e,s=i=>i.message){const i={_errors:[]},a=c=>{for(const u of c.issues)if(u.code==="invalid_union"&&u.errors.length)u.errors.map(h=>a({issues:h}));else if(u.code==="invalid_key")a({issues:u.issues});else if(u.code==="invalid_element")a({issues:u.issues});else if(u.path.length===0)i._errors.push(s(u));else{let h=i,f=0;for(;f<u.path.length;){const y=u.path[f];f===u.path.length-1?(h[y]=h[y]||{_errors:[]},h[y]._errors.push(s(u))):h[y]=h[y]||{_errors:[]},h=h[y],f++}}};return a(e),i}const Rr=e=>(s,i,a,c)=>{const u=a?Object.assign(a,{async:!1}):{async:!1},h=s._zod.run({value:i,issues:[]},u);if(h instanceof Promise)throw new es;if(h.issues.length){const f=new(c?.Err??e)(h.issues.map(y=>vt(y,u,pt())));throw co(f,c?.callee),f}return h.value},Mr=e=>async(s,i,a,c)=>{const u=a?Object.assign(a,{async:!0}):{async:!0};let h=s._zod.run({value:i,issues:[]},u);if(h instanceof Promise&&(h=await h),h.issues.length){const f=new(c?.Err??e)(h.issues.map(y=>vt(y,u,pt())));throw co(f,c?.callee),f}return h.value},ai=e=>(s,i,a)=>{const c=a?{...a,async:!1}:{async:!1},u=s._zod.run({value:i,issues:[]},c);if(u instanceof Promise)throw new es;return u.issues.length?{success:!1,error:new(e??ho)(u.issues.map(h=>vt(h,c,pt())))}:{success:!0,data:u.value}},od=ai(po),oi=e=>async(s,i,a)=>{const c=a?Object.assign(a,{async:!0}):{async:!0};let u=s._zod.run({value:i,issues:[]},c);return u instanceof Promise&&(u=await u),u.issues.length?{success:!1,error:new e(u.issues.map(h=>vt(h,c,pt())))}:{success:!0,data:u.value}},cd=oi(po),ld=e=>(s,i,a)=>{const c=a?Object.assign(a,{direction:"backward"}):{direction:"backward"};return Rr(e)(s,i,c)},ud=e=>(s,i,a)=>Rr(e)(s,i,a),hd=e=>async(s,i,a)=>{const c=a?Object.assign(a,{direction:"backward"}):{direction:"backward"};return Mr(e)(s,i,c)},pd=e=>async(s,i,a)=>Mr(e)(s,i,a),dd=e=>(s,i,a)=>{const c=a?Object.assign(a,{direction:"backward"}):{direction:"backward"};return ai(e)(s,i,c)},fd=e=>(s,i,a)=>ai(e)(s,i,a),md=e=>async(s,i,a)=>{const c=a?Object.assign(a,{direction:"backward"}):{direction:"backward"};return oi(e)(s,i,c)},yd=e=>async(s,i,a)=>oi(e)(s,i,a),gd=/^[cC][^\s-]{8,}$/,Ed=/^[0-9a-z]+$/,Td=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,Sd=/^[0-9a-vA-V]{20}$/,bd=/^[A-Za-z0-9]{27}$/,Id=/^[a-zA-Z0-9_-]{21}$/,xd=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,Ad=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,fo=e=>e?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,Pd=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,wd="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";function Cd(){return new RegExp(wd,"u")}const _d=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,vd=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,Nd=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Od=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Ld=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,mo=/^[A-Za-z0-9_-]*$/,Dd=/^\+[1-9]\d{6,14}$/,yo="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",kd=new RegExp(`^${yo}$`);function go(e){const s="(?:[01]\\d|2[0-3]):[0-5]\\d";return typeof e.precision=="number"?e.precision===-1?`${s}`:e.precision===0?`${s}:[0-5]\\d`:`${s}:[0-5]\\d\\.\\d{${e.precision}}`:`${s}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Rd(e){return new RegExp(`^${go(e)}$`)}function Md(e){const s=go({precision:e.precision}),i=["Z"];e.local&&i.push(""),e.offset&&i.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");const a=`${s}(?:${i.join("|")})`;return new RegExp(`^${yo}T(?:${a})$`)}const $d=e=>{const s=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${s}$`)},Fd=/^-?\d+$/,Eo=/^-?\d+(?:\.\d+)?$/,Bd=/^(?:true|false)$/i,Ud=/^[^A-Z]*$/,jd=/^[^a-z]*$/,Fe=P("$ZodCheck",(e,s)=>{var i;e._zod??(e._zod={}),e._zod.def=s,(i=e._zod).onattach??(i.onattach=[])}),To={number:"number",bigint:"bigint",object:"date"},So=P("$ZodCheckLessThan",(e,s)=>{Fe.init(e,s);const i=To[typeof s.value];e._zod.onattach.push(a=>{const c=a._zod.bag,u=(s.inclusive?c.maximum:c.exclusiveMaximum)??Number.POSITIVE_INFINITY;s.value<u&&(s.inclusive?c.maximum=s.value:c.exclusiveMaximum=s.value)}),e._zod.check=a=>{(s.inclusive?a.value<=s.value:a.value<s.value)||a.issues.push({origin:i,code:"too_big",maximum:typeof s.value=="object"?s.value.getTime():s.value,input:a.value,inclusive:s.inclusive,inst:e,continue:!s.abort})}}),bo=P("$ZodCheckGreaterThan",(e,s)=>{Fe.init(e,s);const i=To[typeof s.value];e._zod.onattach.push(a=>{const c=a._zod.bag,u=(s.inclusive?c.minimum:c.exclusiveMinimum)??Number.NEGATIVE_INFINITY;s.value>u&&(s.inclusive?c.minimum=s.value:c.exclusiveMinimum=s.value)}),e._zod.check=a=>{(s.inclusive?a.value>=s.value:a.value>s.value)||a.issues.push({origin:i,code:"too_small",minimum:typeof s.value=="object"?s.value.getTime():s.value,input:a.value,inclusive:s.inclusive,inst:e,continue:!s.abort})}}),zd=P("$ZodCheckMultipleOf",(e,s)=>{Fe.init(e,s),e._zod.onattach.push(i=>{var a;(a=i._zod.bag).multipleOf??(a.multipleOf=s.value)}),e._zod.check=i=>{if(typeof i.value!=typeof s.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof i.value=="bigint"?i.value%s.value===BigInt(0):Zp(i.value,s.value)===0)||i.issues.push({origin:typeof i.value,code:"not_multiple_of",divisor:s.value,input:i.value,inst:e,continue:!s.abort})}}),Vd=P("$ZodCheckNumberFormat",(e,s)=>{Fe.init(e,s),s.format=s.format||"float64";const i=s.format?.includes("int"),a=i?"int":"number",[c,u]=Xp[s.format];e._zod.onattach.push(h=>{const f=h._zod.bag;f.format=s.format,f.minimum=c,f.maximum=u,i&&(f.pattern=Fd)}),e._zod.check=h=>{const f=h.value;if(i){if(!Number.isInteger(f)){h.issues.push({expected:a,format:s.format,code:"invalid_type",continue:!1,input:f,inst:e});return}if(!Number.isSafeInteger(f)){f>0?h.issues.push({input:f,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:a,inclusive:!0,continue:!s.abort}):h.issues.push({input:f,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:e,origin:a,inclusive:!0,continue:!s.abort});return}}f<c&&h.issues.push({origin:"number",input:f,code:"too_small",minimum:c,inclusive:!0,inst:e,continue:!s.abort}),f>u&&h.issues.push({origin:"number",input:f,code:"too_big",maximum:u,inclusive:!0,inst:e,continue:!s.abort})}}),Gd=P("$ZodCheckMaxLength",(e,s)=>{var i;Fe.init(e,s),(i=e._zod.def).when??(i.when=a=>{const c=a.value;return!Lr(c)&&c.length!==void 0}),e._zod.onattach.push(a=>{const c=a._zod.bag.maximum??Number.POSITIVE_INFINITY;s.maximum<c&&(a._zod.bag.maximum=s.maximum)}),e._zod.check=a=>{const c=a.value;if(c.length<=s.maximum)return;const h=kr(c);a.issues.push({origin:h,code:"too_big",maximum:s.maximum,inclusive:!0,input:c,inst:e,continue:!s.abort})}}),Hd=P("$ZodCheckMinLength",(e,s)=>{var i;Fe.init(e,s),(i=e._zod.def).when??(i.when=a=>{const c=a.value;return!Lr(c)&&c.length!==void 0}),e._zod.onattach.push(a=>{const c=a._zod.bag.minimum??Number.NEGATIVE_INFINITY;s.minimum>c&&(a._zod.bag.minimum=s.minimum)}),e._zod.check=a=>{const c=a.value;if(c.length>=s.minimum)return;const h=kr(c);a.issues.push({origin:h,code:"too_small",minimum:s.minimum,inclusive:!0,input:c,inst:e,continue:!s.abort})}}),Zd=P("$ZodCheckLengthEquals",(e,s)=>{var i;Fe.init(e,s),(i=e._zod.def).when??(i.when=a=>{const c=a.value;return!Lr(c)&&c.length!==void 0}),e._zod.onattach.push(a=>{const c=a._zod.bag;c.minimum=s.length,c.maximum=s.length,c.length=s.length}),e._zod.check=a=>{const c=a.value,u=c.length;if(u===s.length)return;const h=kr(c),f=u>s.length;a.issues.push({origin:h,...f?{code:"too_big",maximum:s.length}:{code:"too_small",minimum:s.length},inclusive:!0,exact:!0,input:a.value,inst:e,continue:!s.abort})}}),ci=P("$ZodCheckStringFormat",(e,s)=>{var i,a;Fe.init(e,s),e._zod.onattach.push(c=>{const u=c._zod.bag;u.format=s.format,s.pattern&&(u.patterns??(u.patterns=new Set),u.patterns.add(s.pattern))}),s.pattern?(i=e._zod).check??(i.check=c=>{s.pattern.lastIndex=0,!s.pattern.test(c.value)&&c.issues.push({origin:"string",code:"invalid_format",format:s.format,input:c.value,...s.pattern?{pattern:s.pattern.toString()}:{},inst:e,continue:!s.abort})}):(a=e._zod).check??(a.check=()=>{})}),Wd=P("$ZodCheckRegex",(e,s)=>{ci.init(e,s),e._zod.check=i=>{s.pattern.lastIndex=0,!s.pattern.test(i.value)&&i.issues.push({origin:"string",code:"invalid_format",format:"regex",input:i.value,pattern:s.pattern.toString(),inst:e,continue:!s.abort})}}),Kd=P("$ZodCheckLowerCase",(e,s)=>{s.pattern??(s.pattern=Ud),ci.init(e,s)}),qd=P("$ZodCheckUpperCase",(e,s)=>{s.pattern??(s.pattern=jd),ci.init(e,s)}),Yd=P("$ZodCheckIncludes",(e,s)=>{Fe.init(e,s);const i=ss(s.includes),a=new RegExp(typeof s.position=="number"?`^.{${s.position}}${i}`:i);s.pattern=a,e._zod.onattach.push(c=>{const u=c._zod.bag;u.patterns??(u.patterns=new Set),u.patterns.add(a)}),e._zod.check=c=>{c.value.includes(s.includes,s.position)||c.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:s.includes,input:c.value,inst:e,continue:!s.abort})}}),Xd=P("$ZodCheckStartsWith",(e,s)=>{Fe.init(e,s);const i=new RegExp(`^${ss(s.prefix)}.*`);s.pattern??(s.pattern=i),e._zod.onattach.push(a=>{const c=a._zod.bag;c.patterns??(c.patterns=new Set),c.patterns.add(i)}),e._zod.check=a=>{a.value.startsWith(s.prefix)||a.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:s.prefix,input:a.value,inst:e,continue:!s.abort})}}),Jd=P("$ZodCheckEndsWith",(e,s)=>{Fe.init(e,s);const i=new RegExp(`.*${ss(s.suffix)}$`);s.pattern??(s.pattern=i),e._zod.onattach.push(a=>{const c=a._zod.bag;c.patterns??(c.patterns=new Set),c.patterns.add(i)}),e._zod.check=a=>{a.value.endsWith(s.suffix)||a.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:s.suffix,input:a.value,inst:e,continue:!s.abort})}}),Qd=P("$ZodCheckOverwrite",(e,s)=>{Fe.init(e,s),e._zod.check=i=>{i.value=s.tx(i.value)}});class ef{constructor(s=[]){this.content=[],this.indent=0,this&&(this.args=s)}indented(s){this.indent+=1,s(this),this.indent-=1}write(s){if(typeof s=="function"){s(this,{execution:"sync"}),s(this,{execution:"async"});return}const a=s.split(`
2
2
  `).filter(h=>h),c=Math.min(...a.map(h=>h.length-h.trimStart().length)),u=a.map(h=>h.slice(c)).map(h=>" ".repeat(this.indent*2)+h);for(const h of u)this.content.push(h)}compile(){const s=Function,i=this?.args,c=[...(this?.content??[""]).map(u=>` ${u}`)];return new s(...i,c.join(`
3
3
  `))}}const tf={major:4,minor:3,patch:6},ye=P("$ZodType",(e,s)=>{var i;e??(e={}),e._zod.def=s,e._zod.bag=e._zod.bag||{},e._zod.version=tf;const a=[...e._zod.def.checks??[]];e._zod.traits.has("$ZodCheck")&&a.unshift(e);for(const c of a)for(const u of c._zod.onattach)u(e);if(a.length===0)(i=e._zod).deferred??(i.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{const c=(h,f,y)=>{let T=is(h),I;for(const A of f){if(A._zod.def.when){if(!A._zod.def.when(h))continue}else if(T)continue;const L=h.issues.length,R=A._zod.check(h);if(R instanceof Promise&&y?.async===!1)throw new es;if(I||R instanceof Promise)I=(I??Promise.resolve()).then(async()=>{await R,h.issues.length!==L&&(T||(T=is(h,L)))});else{if(h.issues.length===L)continue;T||(T=is(h,L))}}return I?I.then(()=>h):h},u=(h,f,y)=>{if(is(h))return h.aborted=!0,h;const T=c(f,a,y);if(T instanceof Promise){if(y.async===!1)throw new es;return T.then(I=>e._zod.parse(I,y))}return e._zod.parse(T,y)};e._zod.run=(h,f)=>{if(f.skipChecks)return e._zod.parse(h,f);if(f.direction==="backward"){const T=e._zod.parse({value:h.value,issues:[]},{...f,skipChecks:!0});return T instanceof Promise?T.then(I=>u(I,h,f)):u(T,h,f)}const y=e._zod.parse(h,f);if(y instanceof Promise){if(f.async===!1)throw new es;return y.then(T=>c(T,a,f))}return c(y,a,f)}}re(e,"~standard",()=>({validate:c=>{try{const u=od(e,c);return u.success?{value:u.data}:{issues:u.error?.issues}}catch{return cd(e,c).then(h=>h.success?{value:h.data}:{issues:h.error?.issues})}},vendor:"zod",version:1}))}),$r=P("$ZodString",(e,s)=>{ye.init(e,s),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??$d(e._zod.bag),e._zod.parse=(i,a)=>{if(s.coerce)try{i.value=String(i.value)}catch{}return typeof i.value=="string"||i.issues.push({expected:"string",code:"invalid_type",input:i.value,inst:e}),i}}),de=P("$ZodStringFormat",(e,s)=>{ci.init(e,s),$r.init(e,s)}),sf=P("$ZodGUID",(e,s)=>{s.pattern??(s.pattern=Ad),de.init(e,s)}),rf=P("$ZodUUID",(e,s)=>{if(s.version){const a={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[s.version];if(a===void 0)throw new Error(`Invalid UUID version: "${s.version}"`);s.pattern??(s.pattern=fo(a))}else s.pattern??(s.pattern=fo());de.init(e,s)}),nf=P("$ZodEmail",(e,s)=>{s.pattern??(s.pattern=Pd),de.init(e,s)}),af=P("$ZodURL",(e,s)=>{de.init(e,s),e._zod.check=i=>{try{const a=i.value.trim(),c=new URL(a);s.hostname&&(s.hostname.lastIndex=0,s.hostname.test(c.hostname)||i.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:s.hostname.source,input:i.value,inst:e,continue:!s.abort})),s.protocol&&(s.protocol.lastIndex=0,s.protocol.test(c.protocol.endsWith(":")?c.protocol.slice(0,-1):c.protocol)||i.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:s.protocol.source,input:i.value,inst:e,continue:!s.abort})),s.normalize?i.value=c.href:i.value=a;return}catch{i.issues.push({code:"invalid_format",format:"url",input:i.value,inst:e,continue:!s.abort})}}}),of=P("$ZodEmoji",(e,s)=>{s.pattern??(s.pattern=Cd()),de.init(e,s)}),cf=P("$ZodNanoID",(e,s)=>{s.pattern??(s.pattern=Id),de.init(e,s)}),lf=P("$ZodCUID",(e,s)=>{s.pattern??(s.pattern=gd),de.init(e,s)}),uf=P("$ZodCUID2",(e,s)=>{s.pattern??(s.pattern=Ed),de.init(e,s)}),hf=P("$ZodULID",(e,s)=>{s.pattern??(s.pattern=Td),de.init(e,s)}),pf=P("$ZodXID",(e,s)=>{s.pattern??(s.pattern=Sd),de.init(e,s)}),df=P("$ZodKSUID",(e,s)=>{s.pattern??(s.pattern=bd),de.init(e,s)}),ff=P("$ZodISODateTime",(e,s)=>{s.pattern??(s.pattern=Md(s)),de.init(e,s)}),mf=P("$ZodISODate",(e,s)=>{s.pattern??(s.pattern=kd),de.init(e,s)}),yf=P("$ZodISOTime",(e,s)=>{s.pattern??(s.pattern=Rd(s)),de.init(e,s)}),gf=P("$ZodISODuration",(e,s)=>{s.pattern??(s.pattern=xd),de.init(e,s)}),Ef=P("$ZodIPv4",(e,s)=>{s.pattern??(s.pattern=_d),de.init(e,s),e._zod.bag.format="ipv4"}),Tf=P("$ZodIPv6",(e,s)=>{s.pattern??(s.pattern=vd),de.init(e,s),e._zod.bag.format="ipv6",e._zod.check=i=>{try{new URL(`http://[${i.value}]`)}catch{i.issues.push({code:"invalid_format",format:"ipv6",input:i.value,inst:e,continue:!s.abort})}}}),Sf=P("$ZodCIDRv4",(e,s)=>{s.pattern??(s.pattern=Nd),de.init(e,s)}),bf=P("$ZodCIDRv6",(e,s)=>{s.pattern??(s.pattern=Od),de.init(e,s),e._zod.check=i=>{const a=i.value.split("/");try{if(a.length!==2)throw new Error;const[c,u]=a;if(!u)throw new Error;const h=Number(u);if(`${h}`!==u)throw new Error;if(h<0||h>128)throw new Error;new URL(`http://[${c}]`)}catch{i.issues.push({code:"invalid_format",format:"cidrv6",input:i.value,inst:e,continue:!s.abort})}}});function Io(e){if(e==="")return!0;if(e.length%4!==0)return!1;try{return atob(e),!0}catch{return!1}}const If=P("$ZodBase64",(e,s)=>{s.pattern??(s.pattern=Ld),de.init(e,s),e._zod.bag.contentEncoding="base64",e._zod.check=i=>{Io(i.value)||i.issues.push({code:"invalid_format",format:"base64",input:i.value,inst:e,continue:!s.abort})}});function xf(e){if(!mo.test(e))return!1;const s=e.replace(/[-_]/g,a=>a==="-"?"+":"/"),i=s.padEnd(Math.ceil(s.length/4)*4,"=");return Io(i)}const Af=P("$ZodBase64URL",(e,s)=>{s.pattern??(s.pattern=mo),de.init(e,s),e._zod.bag.contentEncoding="base64url",e._zod.check=i=>{xf(i.value)||i.issues.push({code:"invalid_format",format:"base64url",input:i.value,inst:e,continue:!s.abort})}}),Pf=P("$ZodE164",(e,s)=>{s.pattern??(s.pattern=Dd),de.init(e,s)});function wf(e,s=null){try{const i=e.split(".");if(i.length!==3)return!1;const[a]=i;if(!a)return!1;const c=JSON.parse(atob(a));return!("typ"in c&&c?.typ!=="JWT"||!c.alg||s&&(!("alg"in c)||c.alg!==s))}catch{return!1}}const Cf=P("$ZodJWT",(e,s)=>{de.init(e,s),e._zod.check=i=>{wf(i.value,s.alg)||i.issues.push({code:"invalid_format",format:"jwt",input:i.value,inst:e,continue:!s.abort})}}),xo=P("$ZodNumber",(e,s)=>{ye.init(e,s),e._zod.pattern=e._zod.bag.pattern??Eo,e._zod.parse=(i,a)=>{if(s.coerce)try{i.value=Number(i.value)}catch{}const c=i.value;if(typeof c=="number"&&!Number.isNaN(c)&&Number.isFinite(c))return i;const u=typeof c=="number"?Number.isNaN(c)?"NaN":Number.isFinite(c)?void 0:"Infinity":void 0;return i.issues.push({expected:"number",code:"invalid_type",input:c,inst:e,...u?{received:u}:{}}),i}}),_f=P("$ZodNumberFormat",(e,s)=>{Vd.init(e,s),xo.init(e,s)}),vf=P("$ZodBoolean",(e,s)=>{ye.init(e,s),e._zod.pattern=Bd,e._zod.parse=(i,a)=>{if(s.coerce)try{i.value=!!i.value}catch{}const c=i.value;return typeof c=="boolean"||i.issues.push({expected:"boolean",code:"invalid_type",input:c,inst:e}),i}}),Nf=P("$ZodUnknown",(e,s)=>{ye.init(e,s),e._zod.parse=i=>i}),Of=P("$ZodNever",(e,s)=>{ye.init(e,s),e._zod.parse=(i,a)=>(i.issues.push({expected:"never",code:"invalid_type",input:i.value,inst:e}),i)});function Ao(e,s,i){e.issues.length&&s.issues.push(...rs(i,e.issues)),s.value[i]=e.value}const Lf=P("$ZodArray",(e,s)=>{ye.init(e,s),e._zod.parse=(i,a)=>{const c=i.value;if(!Array.isArray(c))return i.issues.push({expected:"array",code:"invalid_type",input:c,inst:e}),i;i.value=Array(c.length);const u=[];for(let h=0;h<c.length;h++){const f=c[h],y=s.element._zod.run({value:f,issues:[]},a);y instanceof Promise?u.push(y.then(T=>Ao(T,i,h))):Ao(y,i,h)}return u.length?Promise.all(u).then(()=>i):i}});function li(e,s,i,a,c){if(e.issues.length){if(c&&!(i in a))return;s.issues.push(...rs(i,e.issues))}e.value===void 0?i in a&&(s.value[i]=void 0):s.value[i]=e.value}function Po(e){const s=Object.keys(e.shape);for(const a of s)if(!e.shape?.[a]?._zod?.traits?.has("$ZodType"))throw new Error(`Invalid element at key "${a}": expected a Zod schema`);const i=Yp(e.shape);return{...e,keys:s,keySet:new Set(s),numKeys:s.length,optionalKeys:new Set(i)}}function wo(e,s,i,a,c,u){const h=[],f=c.keySet,y=c.catchall._zod,T=y.def.type,I=y.optout==="optional";for(const A in s){if(f.has(A))continue;if(T==="never"){h.push(A);continue}const L=y.run({value:s[A],issues:[]},a);L instanceof Promise?e.push(L.then(R=>li(R,i,A,s,I))):li(L,i,A,s,I)}return h.length&&i.issues.push({code:"unrecognized_keys",keys:h,input:s,inst:u}),e.length?Promise.all(e).then(()=>i):i}const Df=P("$ZodObject",(e,s)=>{if(ye.init(e,s),!Object.getOwnPropertyDescriptor(s,"shape")?.get){const f=s.shape;Object.defineProperty(s,"shape",{get:()=>{const y={...f};return Object.defineProperty(s,"shape",{value:y}),y}})}const a=ri(()=>Po(s));re(e._zod,"propValues",()=>{const f=s.shape,y={};for(const T in f){const I=f[T]._zod;if(I.values){y[T]??(y[T]=new Set);for(const A of I.values)y[T].add(A)}}return y});const c=Cs,u=s.catchall;let h;e._zod.parse=(f,y)=>{h??(h=a.value);const T=f.value;if(!c(T))return f.issues.push({expected:"object",code:"invalid_type",input:T,inst:e}),f;f.value={};const I=[],A=h.shape;for(const L of h.keys){const R=A[L],oe=R._zod.optout==="optional",le=R._zod.run({value:T[L],issues:[]},y);le instanceof Promise?I.push(le.then(Ce=>li(Ce,f,L,T,oe))):li(le,f,L,T,oe)}return u?wo(I,T,f,y,a.value,e):I.length?Promise.all(I).then(()=>f):f}}),kf=P("$ZodObjectJIT",(e,s)=>{Df.init(e,s);const i=e._zod.parse,a=ri(()=>Po(s)),c=L=>{const R=new ef(["shape","payload","ctx"]),oe=a.value,le=$e=>{const we=oo($e);return`shape[${we}]._zod.run({ value: input[${we}], issues: [] }, ctx)`};R.write("const input = payload.value;");const Ce=Object.create(null);let S=0;for(const $e of oe.keys)Ce[$e]=`key_${S++}`;R.write("const newResult = {};");for(const $e of oe.keys){const we=Ce[$e],Ne=oo($e),qt=L[$e]?._zod?.optout==="optional";R.write(`const ${we} = ${le($e)};`),qt?R.write(`
4
4
  if (${we}.issues.length) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lightspeed/crane",
3
- "version": "3.5.0-rc.0",
3
+ "version": "3.5.1-rc.0",
4
4
  "type": "module",
5
5
  "bin": "bin/crane.js",
6
6
  "main": "./dist/app.mjs",
@@ -65,7 +65,7 @@
65
65
  },
66
66
  "dependencies": {
67
67
  "@jridgewell/sourcemap-codec": "^1.5.4",
68
- "@lightspeed/crane-api": "2.5.0-rc.0",
68
+ "@lightspeed/crane-api": "2.5.0",
69
69
  "@lightspeed/eslint-config-crane": "1.1.3",
70
70
  "@types/micromatch": "^4.0.8",
71
71
  "@types/prompts": "^2.4.2",
@@ -96,23 +96,23 @@ export default translation.init({
96
96
  },
97
97
 
98
98
  nl: {
99
- '$label.accordion.catalog_page_settings': 'Cataloguspagina-instellingen',
100
- '$label.accordion.product_card_settings': 'Productkaart-instellingen',
99
+ '$label.accordion.catalog_page_settings': 'Catalogusppagina-instellingen',
100
+ '$label.accordion.product_card_settings': 'Productkaartinstellingen',
101
101
  '$label.accordion.categories_settings': 'Categorie-instellingen',
102
102
 
103
- '$label.show': 'Tonen',
104
- '$label.do_not_show': 'Niet tonen',
105
- '$label.show_on_mouse_hover': 'Tonen bij muisaanwijzer',
103
+ '$label.show': 'Weergeven',
104
+ '$label.do_not_show': 'Niet weergeven',
105
+ '$label.show_on_mouse_hover': 'Weergeven bij muis erover',
106
106
 
107
107
  '$label.category_view.label': 'Categorieweergave',
108
- '$label.category_view.description': 'Toon producten uit hoofdcategorieën alleen op de bijbehorende categoriepagina\'s. '
109
- + 'Deze optie past bij catalogi met een groot aantal producten.',
108
+ '$label.category_view.description': 'Toon producten uit de basiscategorieën alleen op de respectievelijke categoriepagina\'s. '
109
+ + 'Deze optie past bij catalogussen met een groot aantal producten.',
110
110
  '$label.category_view.expanded': 'Uitgevouwen categorieën',
111
111
  '$label.category_view.collapsed': 'Samengevouwen categorieën',
112
112
 
113
- '$label.product_filter_placement.label': 'Plaatsing productfilter',
113
+ '$label.product_filter_placement.label': 'Filterplaatsing',
114
114
  '$label.product_filter_placement.category_pages': 'Op categoriepagina\'s',
115
- '$label.product_filter_placement.all_pages': 'Op catalogus- en categoriepagina\'s',
115
+ '$label.product_filter_placement.all_pages': 'Op categorie- en cataloguspagina\'s',
116
116
 
117
117
  '$label.filter_panel_orientation.label': 'Oriëntatie filterpaneel',
118
118
  '$label.filter_panel_orientation.vertical': 'Verticaal',
@@ -120,38 +120,38 @@ export default translation.init({
120
120
 
121
121
  '$label.filter_priority.label': 'Filterprioriteit',
122
122
  '$label.filter_priority.description': 'Er kunnen maximaal 4 filters horizontaal worden weergegeven. De rest wordt '
123
- + 'gegroepeerd onder \u201CAndere filters\u201D. Om een bepaald filter horizontaal weer te geven, '
124
- + 'plaatst u het bij de top 4 in de filtersortering in het configuratiescherm.',
123
+ + 'gegroepeerd onder \u201COverige filters\u201D. Als u een bepaald filter horizontaal wilt weergeven, '
124
+ + 'plaats deze dan in de top 4 in de filtersortering in de beheeromgeving.',
125
125
  '$label.filter_priority.button': 'Productfilters sorteren',
126
126
 
127
- '$label.side_to_show_filters.label': 'Zijde om filters te tonen',
127
+ '$label.side_to_show_filters.label': 'Kant om filters weer te geven',
128
128
  '$label.side_to_show_filters.right': 'Rechts',
129
129
  '$label.side_to_show_filters.left': 'Links',
130
130
 
131
131
  '$label.expand_filter_panel.label': 'Filterpaneel uitvouwen',
132
- '$label.show_sort_by_options.label': 'Opties "Sorteren op" tonen',
133
- '$label.show_bottom_navigation_menu.label': 'Onderste navigatiemenu tonen',
134
- '$label.show_signin_link.label': 'Link "Aanmelden" tonen',
132
+ '$label.show_sort_by_options.label': 'Opties voor "Sorteren op" weergeven',
133
+ '$label.show_bottom_navigation_menu.label': 'Navigatiemenu onderaan weergeven',
134
+ '$label.show_signin_link.label': 'Link "Inloggen" weergeven',
135
135
 
136
136
  '$label.card_grid_spacing.label': 'Rasterafstand kaarten',
137
- '$label.card_grid_spacing.description': 'Geldt voor zowel product- als categoriekaarten.',
137
+ '$label.card_grid_spacing.description': 'Van toepassing op zowel product- als categoriekaarten.',
138
138
  '$label.card_grid_spacing.none': 'Geen',
139
139
  '$label.card_grid_spacing.narrow': 'Smal',
140
- '$label.card_grid_spacing.medium': 'Gemiddeld',
140
+ '$label.card_grid_spacing.medium': 'Normaal',
141
141
  '$label.card_grid_spacing.wide': 'Breed',
142
142
 
143
- '$label.content_alignment.label': 'Uitlijning inhoud',
143
+ '$label.content_alignment.label': 'Uitlijning van inhoud',
144
144
  '$label.content_alignment.left': 'Links',
145
- '$label.content_alignment.center': 'Gecentreerd',
145
+ '$label.content_alignment.center': 'Midden',
146
146
  '$label.content_alignment.right': 'Rechts',
147
147
  '$label.content_alignment.justify': 'Uitvullen',
148
148
 
149
- '$label.image_proportions.label': 'Beeldverhoudingen',
150
- '$label.image_proportions.portrait_2_3': 'Portret (2:3)',
151
- '$label.image_proportions.portrait_3_4': 'Portret (3:4)',
149
+ '$label.image_proportions.label': 'Afbeeldingsverhouding',
150
+ '$label.image_proportions.portrait_2_3': 'Staand (2:3)',
151
+ '$label.image_proportions.portrait_3_4': 'Staand (3:4)',
152
152
  '$label.image_proportions.square_1_1': 'Vierkant (1:1)',
153
- '$label.image_proportions.landscape_4_3': 'Landschap (4:3)',
154
- '$label.image_proportions.landscape_2_3': 'Landschap (2:3)',
153
+ '$label.image_proportions.landscape_4_3': 'Liggend (4:3)',
154
+ '$label.image_proportions.landscape_2_3': 'Liggend (2:3)',
155
155
 
156
156
  '$label.card_size.label': 'Kaartgrootte',
157
157
  '$label.card_size.small': 'Klein',
@@ -163,72 +163,72 @@ export default translation.init({
163
163
  '$label.price.label': 'Prijs',
164
164
 
165
165
  '$label.color_swatches.label': 'Kleurstalen',
166
- '$label.color_swatches.description': 'U kunt het uiterlijk van kleurstalen instellen in Productdetails.',
166
+ '$label.color_swatches.description': 'U kunt het uiterlijk van kleurstalen instellen in Productgegevens.',
167
167
 
168
168
  '$label.sku.label': 'SKU',
169
- '$label.buy_now_button.label': 'Knop "Nu kopen"',
169
+ '$label.buy_now_button.label': '“Koop nu"-knop',
170
170
  '$label.product_rating.label': 'Productbeoordeling',
171
171
 
172
172
  '$label.rating_view.label': 'Beoordelingsweergave',
173
- '$label.rating_view.five_stars': 'Vijf sterren weergave',
174
- '$label.rating_view.one_star': 'Eén ster weergave',
173
+ '$label.rating_view.five_stars': 'Weergave met vijf sterren',
174
+ '$label.rating_view.one_star': 'Weergave met één ster',
175
175
 
176
- '$label.show_average_product_rating.label': 'Gemiddelde productbeoordeling tonen',
177
- '$label.show_total_number_of_reviews.label': 'Totaal aantal beoordelingen tonen',
178
- '$label.show_product_card_frame.label': 'Productkaart kader tonen',
179
- '$label.show_main_product_image.label': 'Hoofdproductafbeelding tonen',
180
- '$label.show_additional_image_on_hover.label': 'Extra afbeelding tonen bij muisaanwijzer',
176
+ '$label.show_average_product_rating.label': 'Gemiddelde productbeoordeling weergeven',
177
+ '$label.show_total_number_of_reviews.label': 'Totaal aantal reviews weergeven',
178
+ '$label.show_product_card_frame.label': 'Productkaartframe weergeven',
179
+ '$label.show_main_product_image.label': 'Hoofdafbeelding weergeven',
180
+ '$label.show_additional_image_on_hover.label': 'Aanvullende afbeelding weergeven bij muis erover',
181
181
 
182
182
  '$label.divider': '',
183
183
 
184
- '$label.name_position.label': 'Naampositie',
184
+ '$label.name_position.label': 'Positie van naam',
185
185
  '$label.name_position.on_the_image': 'Op de afbeelding',
186
186
  '$label.name_position.below_the_image': 'Onder de afbeelding',
187
- '$label.name_position.on_mouse_hover': 'Bij muisaanwijzer',
187
+ '$label.name_position.on_mouse_hover': 'Bij muis erover',
188
188
  '$label.name_position.hide_category_names': 'Categorienamen verbergen',
189
189
  '$label.name_position.hide_category_images': 'Categorieafbeeldingen verbergen',
190
190
  },
191
191
 
192
192
  fr: {
193
- '$label.accordion.catalog_page_settings': 'Paramètres de la page catalogue',
194
- '$label.accordion.product_card_settings': 'Paramètres de la fiche produit',
193
+ '$label.accordion.catalog_page_settings': 'Paramètres de la page du catalogue',
194
+ '$label.accordion.product_card_settings': 'Paramètres de la fiche de produit',
195
195
  '$label.accordion.categories_settings': 'Paramètres des catégories',
196
196
 
197
197
  '$label.show': 'Afficher',
198
198
  '$label.do_not_show': 'Ne pas afficher',
199
199
  '$label.show_on_mouse_hover': 'Afficher au survol de la souris',
200
200
 
201
- '$label.category_view.label': 'Vue des catégories',
202
- '$label.category_view.description': 'Affichez les produits des catégories racines uniquement sur les pages de catégories respectives. '
203
- + 'Cette option convient aux catalogues comportant un grand nombre de produits.',
204
- '$label.category_view.expanded': 'Catégories dépliées',
205
- '$label.category_view.collapsed': 'Catégories repliées',
201
+ '$label.category_view.label': 'Vue par catégorie',
202
+ '$label.category_view.description': 'Affichez les produits des catégories racines sur les pages des catégorie respectives uniquement. '
203
+ + 'Cette option convient aux catalogues qui ont un grand nombre de produits.',
204
+ '$label.category_view.expanded': 'Catégories développées',
205
+ '$label.category_view.collapsed': 'Catégories réduites',
206
206
 
207
- '$label.product_filter_placement.label': 'Emplacement du filtre produit',
207
+ '$label.product_filter_placement.label': 'Placement du filtre',
208
208
  '$label.product_filter_placement.category_pages': 'Sur les pages de catégories',
209
- '$label.product_filter_placement.all_pages': 'Sur les pages catalogue et catégories',
209
+ '$label.product_filter_placement.all_pages': 'Sur les pages de catégories et la page du catalogue',
210
210
 
211
211
  '$label.filter_panel_orientation.label': 'Orientation du panneau de filtres',
212
- '$label.filter_panel_orientation.vertical': 'Vertical',
213
- '$label.filter_panel_orientation.horizontal': 'Horizontal',
212
+ '$label.filter_panel_orientation.vertical': 'Verticale',
213
+ '$label.filter_panel_orientation.horizontal': 'Horizontale',
214
214
 
215
- '$label.filter_priority.label': 'Priorité des filtres',
215
+ '$label.filter_priority.label': 'Priorité du filtre',
216
216
  '$label.filter_priority.description': 'Jusqu\'à 4 filtres peuvent être affichés horizontalement. Les autres sont regroupés '
217
- + 'sous \u201CAutres filtres\u201D. Pour afficher un filtre horizontalement, placez-le parmi les 4 premiers '
218
- + 'dans le tri des filtres du panneau de configuration.',
219
- '$label.filter_priority.button': 'Trier les filtres produits',
217
+ + 'sous « Autres filtres ». Pour afficher un filtre spécifique horizontalement, placez-le parmi les 4 premiers '
218
+ + 'dans le tri des filtres dans le panneau de contrôle.',
219
+ '$label.filter_priority.button': 'Trier les filtres de produits',
220
220
 
221
- '$label.side_to_show_filters.label': 'Côté pour afficher les filtres',
221
+ '$label.side_to_show_filters.label': 'Côté afficher les filtres',
222
222
  '$label.side_to_show_filters.right': 'Droite',
223
223
  '$label.side_to_show_filters.left': 'Gauche',
224
224
 
225
- '$label.expand_filter_panel.label': 'Déplier le panneau de filtres',
226
- '$label.show_sort_by_options.label': 'Afficher les options "Trier par"',
225
+ '$label.expand_filter_panel.label': 'Développer le panneau de filtre',
226
+ '$label.show_sort_by_options.label': 'Afficher les options « Trier par »',
227
227
  '$label.show_bottom_navigation_menu.label': 'Afficher le menu de navigation inférieur',
228
- '$label.show_signin_link.label': 'Afficher le lien "Se connecter"',
228
+ '$label.show_signin_link.label': 'Afficher le lien « Se connecter »',
229
229
 
230
- '$label.card_grid_spacing.label': 'Espacement de la grille de cartes',
231
- '$label.card_grid_spacing.description': 'S\'applique aux cartes de produits et de catégories.',
230
+ '$label.card_grid_spacing.label': 'Espacement de la grille du panier',
231
+ '$label.card_grid_spacing.description': 'S\'applique à la fois aux fiches de produits et de catégories.',
232
232
  '$label.card_grid_spacing.none': 'Aucun',
233
233
  '$label.card_grid_spacing.narrow': 'Étroit',
234
234
  '$label.card_grid_spacing.medium': 'Moyen',
@@ -236,9 +236,9 @@ export default translation.init({
236
236
 
237
237
  '$label.content_alignment.label': 'Alignement du contenu',
238
238
  '$label.content_alignment.left': 'Gauche',
239
- '$label.content_alignment.center': 'Centré',
239
+ '$label.content_alignment.center': 'Centre',
240
240
  '$label.content_alignment.right': 'Droite',
241
- '$label.content_alignment.justify': 'Justifié',
241
+ '$label.content_alignment.justify': 'Justifier',
242
242
 
243
243
  '$label.image_proportions.label': 'Proportions de l\'image',
244
244
  '$label.image_proportions.portrait_2_3': 'Portrait (2:3)',
@@ -247,29 +247,29 @@ export default translation.init({
247
247
  '$label.image_proportions.landscape_4_3': 'Paysage (4:3)',
248
248
  '$label.image_proportions.landscape_2_3': 'Paysage (2:3)',
249
249
 
250
- '$label.card_size.label': 'Taille de la carte',
251
- '$label.card_size.small': 'Petit',
252
- '$label.card_size.medium': 'Moyen',
253
- '$label.card_size.large': 'Grand',
250
+ '$label.card_size.label': 'Taille de la fiche',
251
+ '$label.card_size.small': 'Petite',
252
+ '$label.card_size.medium': 'Moyenne',
253
+ '$label.card_size.large': 'Grande',
254
254
 
255
255
  '$label.product_name.label': 'Nom du produit',
256
256
  '$label.product_subtitle.label': 'Sous-titre du produit',
257
257
  '$label.price.label': 'Prix',
258
258
 
259
259
  '$label.color_swatches.label': 'Échantillons de couleurs',
260
- '$label.color_swatches.description': 'Vous pouvez configurer l\'apparence des échantillons de couleurs dans les Détails du produit.',
260
+ '$label.color_swatches.description': 'Vous pouvez configurer l\'apparence des échantillons dans les détails du produit.',
261
261
 
262
- '$label.sku.label': 'SKU',
263
- '$label.buy_now_button.label': 'Bouton "Acheter maintenant"',
262
+ '$label.sku.label': 'UGS',
263
+ '$label.buy_now_button.label': 'Bouton « Acheter maintenant »',
264
264
  '$label.product_rating.label': 'Évaluation du produit',
265
265
 
266
- '$label.rating_view.label': 'Vue des évaluations',
267
- '$label.rating_view.five_stars': 'Vue cinq étoiles',
268
- '$label.rating_view.one_star': 'Vue une étoile',
266
+ '$label.rating_view.label': 'Affichage des évaluations',
267
+ '$label.rating_view.five_stars': 'Vue de cinq étoiles',
268
+ '$label.rating_view.one_star': 'Vue d\'une étoile',
269
269
 
270
- '$label.show_average_product_rating.label': 'Afficher la note moyenne du produit',
270
+ '$label.show_average_product_rating.label': 'Afficher l\'évaluation moyenne du produit',
271
271
  '$label.show_total_number_of_reviews.label': 'Afficher le nombre total d\'avis',
272
- '$label.show_product_card_frame.label': 'Afficher le cadre de la fiche produit',
272
+ '$label.show_product_card_frame.label': 'Afficher le cadre de la fiche de produit',
273
273
  '$label.show_main_product_image.label': 'Afficher l\'image principale du produit',
274
274
  '$label.show_additional_image_on_hover.label': 'Afficher une image supplémentaire au survol',
275
275
 
@@ -278,8 +278,8 @@ export default translation.init({
278
278
  '$label.name_position.label': 'Position du nom',
279
279
  '$label.name_position.on_the_image': 'Sur l\'image',
280
280
  '$label.name_position.below_the_image': 'Sous l\'image',
281
- '$label.name_position.on_mouse_hover': 'Au survol de la souris',
281
+ '$label.name_position.on_mouse_hover': 'Au passage de la souris',
282
282
  '$label.name_position.hide_category_names': 'Masquer les noms de catégories',
283
- '$label.name_position.hide_category_images': 'Masquer les images de catégories',
283
+ '$label.name_position.hide_category_images': 'Masquer les images de la catégorie',
284
284
  },
285
285
  });
@@ -96,23 +96,23 @@ export default translation.init({
96
96
  },
97
97
 
98
98
  nl: {
99
- '$label.accordion.catalog_page_settings': 'Cataloguspagina-instellingen',
100
- '$label.accordion.product_card_settings': 'Productkaart-instellingen',
99
+ '$label.accordion.catalog_page_settings': 'Catalogusppagina-instellingen',
100
+ '$label.accordion.product_card_settings': 'Productkaartinstellingen',
101
101
  '$label.accordion.categories_settings': 'Categorie-instellingen',
102
102
 
103
- '$label.show': 'Tonen',
104
- '$label.do_not_show': 'Niet tonen',
105
- '$label.show_on_mouse_hover': 'Tonen bij muisaanwijzer',
103
+ '$label.show': 'Weergeven',
104
+ '$label.do_not_show': 'Niet weergeven',
105
+ '$label.show_on_mouse_hover': 'Weergeven bij muis erover',
106
106
 
107
107
  '$label.category_view.label': 'Categorieweergave',
108
- '$label.category_view.description': 'Toon producten uit hoofdcategorieën alleen op de bijbehorende categoriepagina\'s. '
109
- + 'Deze optie past bij catalogi met een groot aantal producten.',
108
+ '$label.category_view.description': 'Toon producten uit de basiscategorieën alleen op de respectievelijke categoriepagina\'s. '
109
+ + 'Deze optie past bij catalogussen met een groot aantal producten.',
110
110
  '$label.category_view.expanded': 'Uitgevouwen categorieën',
111
111
  '$label.category_view.collapsed': 'Samengevouwen categorieën',
112
112
 
113
- '$label.product_filter_placement.label': 'Plaatsing productfilter',
113
+ '$label.product_filter_placement.label': 'Filterplaatsing',
114
114
  '$label.product_filter_placement.category_pages': 'Op categoriepagina\'s',
115
- '$label.product_filter_placement.all_pages': 'Op catalogus- en categoriepagina\'s',
115
+ '$label.product_filter_placement.all_pages': 'Op categorie- en cataloguspagina\'s',
116
116
 
117
117
  '$label.filter_panel_orientation.label': 'Oriëntatie filterpaneel',
118
118
  '$label.filter_panel_orientation.vertical': 'Verticaal',
@@ -120,38 +120,38 @@ export default translation.init({
120
120
 
121
121
  '$label.filter_priority.label': 'Filterprioriteit',
122
122
  '$label.filter_priority.description': 'Er kunnen maximaal 4 filters horizontaal worden weergegeven. De rest wordt '
123
- + 'gegroepeerd onder \u201CAndere filters\u201D. Om een bepaald filter horizontaal weer te geven, '
124
- + 'plaatst u het bij de top 4 in de filtersortering in het configuratiescherm.',
123
+ + 'gegroepeerd onder \u201COverige filters\u201D. Als u een bepaald filter horizontaal wilt weergeven, '
124
+ + 'plaats deze dan in de top 4 in de filtersortering in de beheeromgeving.',
125
125
  '$label.filter_priority.button': 'Productfilters sorteren',
126
126
 
127
- '$label.side_to_show_filters.label': 'Zijde om filters te tonen',
127
+ '$label.side_to_show_filters.label': 'Kant om filters weer te geven',
128
128
  '$label.side_to_show_filters.right': 'Rechts',
129
129
  '$label.side_to_show_filters.left': 'Links',
130
130
 
131
131
  '$label.expand_filter_panel.label': 'Filterpaneel uitvouwen',
132
- '$label.show_sort_by_options.label': 'Opties "Sorteren op" tonen',
133
- '$label.show_bottom_navigation_menu.label': 'Onderste navigatiemenu tonen',
134
- '$label.show_signin_link.label': 'Link "Aanmelden" tonen',
132
+ '$label.show_sort_by_options.label': 'Opties voor "Sorteren op" weergeven',
133
+ '$label.show_bottom_navigation_menu.label': 'Navigatiemenu onderaan weergeven',
134
+ '$label.show_signin_link.label': 'Link "Inloggen" weergeven',
135
135
 
136
136
  '$label.card_grid_spacing.label': 'Rasterafstand kaarten',
137
- '$label.card_grid_spacing.description': 'Geldt voor zowel product- als categoriekaarten.',
137
+ '$label.card_grid_spacing.description': 'Van toepassing op zowel product- als categoriekaarten.',
138
138
  '$label.card_grid_spacing.none': 'Geen',
139
139
  '$label.card_grid_spacing.narrow': 'Smal',
140
- '$label.card_grid_spacing.medium': 'Gemiddeld',
140
+ '$label.card_grid_spacing.medium': 'Normaal',
141
141
  '$label.card_grid_spacing.wide': 'Breed',
142
142
 
143
- '$label.content_alignment.label': 'Uitlijning inhoud',
143
+ '$label.content_alignment.label': 'Uitlijning van inhoud',
144
144
  '$label.content_alignment.left': 'Links',
145
- '$label.content_alignment.center': 'Gecentreerd',
145
+ '$label.content_alignment.center': 'Midden',
146
146
  '$label.content_alignment.right': 'Rechts',
147
147
  '$label.content_alignment.justify': 'Uitvullen',
148
148
 
149
- '$label.image_proportions.label': 'Beeldverhoudingen',
150
- '$label.image_proportions.portrait_2_3': 'Portret (2:3)',
151
- '$label.image_proportions.portrait_3_4': 'Portret (3:4)',
149
+ '$label.image_proportions.label': 'Afbeeldingsverhouding',
150
+ '$label.image_proportions.portrait_2_3': 'Staand (2:3)',
151
+ '$label.image_proportions.portrait_3_4': 'Staand (3:4)',
152
152
  '$label.image_proportions.square_1_1': 'Vierkant (1:1)',
153
- '$label.image_proportions.landscape_4_3': 'Landschap (4:3)',
154
- '$label.image_proportions.landscape_2_3': 'Landschap (2:3)',
153
+ '$label.image_proportions.landscape_4_3': 'Liggend (4:3)',
154
+ '$label.image_proportions.landscape_2_3': 'Liggend (2:3)',
155
155
 
156
156
  '$label.card_size.label': 'Kaartgrootte',
157
157
  '$label.card_size.small': 'Klein',
@@ -163,72 +163,72 @@ export default translation.init({
163
163
  '$label.price.label': 'Prijs',
164
164
 
165
165
  '$label.color_swatches.label': 'Kleurstalen',
166
- '$label.color_swatches.description': 'U kunt het uiterlijk van kleurstalen instellen in Productdetails.',
166
+ '$label.color_swatches.description': 'U kunt het uiterlijk van kleurstalen instellen in Productgegevens.',
167
167
 
168
168
  '$label.sku.label': 'SKU',
169
- '$label.buy_now_button.label': 'Knop "Nu kopen"',
169
+ '$label.buy_now_button.label': '“Koop nu"-knop',
170
170
  '$label.product_rating.label': 'Productbeoordeling',
171
171
 
172
172
  '$label.rating_view.label': 'Beoordelingsweergave',
173
- '$label.rating_view.five_stars': 'Vijf sterren weergave',
174
- '$label.rating_view.one_star': 'Eén ster weergave',
173
+ '$label.rating_view.five_stars': 'Weergave met vijf sterren',
174
+ '$label.rating_view.one_star': 'Weergave met één ster',
175
175
 
176
- '$label.show_average_product_rating.label': 'Gemiddelde productbeoordeling tonen',
177
- '$label.show_total_number_of_reviews.label': 'Totaal aantal beoordelingen tonen',
178
- '$label.show_product_card_frame.label': 'Productkaart kader tonen',
179
- '$label.show_main_product_image.label': 'Hoofdproductafbeelding tonen',
180
- '$label.show_additional_image_on_hover.label': 'Extra afbeelding tonen bij muisaanwijzer',
176
+ '$label.show_average_product_rating.label': 'Gemiddelde productbeoordeling weergeven',
177
+ '$label.show_total_number_of_reviews.label': 'Totaal aantal reviews weergeven',
178
+ '$label.show_product_card_frame.label': 'Productkaartframe weergeven',
179
+ '$label.show_main_product_image.label': 'Hoofdafbeelding weergeven',
180
+ '$label.show_additional_image_on_hover.label': 'Aanvullende afbeelding weergeven bij muis erover',
181
181
 
182
182
  '$label.divider': '',
183
183
 
184
- '$label.name_position.label': 'Naampositie',
184
+ '$label.name_position.label': 'Positie van naam',
185
185
  '$label.name_position.on_the_image': 'Op de afbeelding',
186
186
  '$label.name_position.below_the_image': 'Onder de afbeelding',
187
- '$label.name_position.on_mouse_hover': 'Bij muisaanwijzer',
187
+ '$label.name_position.on_mouse_hover': 'Bij muis erover',
188
188
  '$label.name_position.hide_category_names': 'Categorienamen verbergen',
189
189
  '$label.name_position.hide_category_images': 'Categorieafbeeldingen verbergen',
190
190
  },
191
191
 
192
192
  fr: {
193
- '$label.accordion.catalog_page_settings': 'Paramètres de la page catalogue',
194
- '$label.accordion.product_card_settings': 'Paramètres de la fiche produit',
193
+ '$label.accordion.catalog_page_settings': 'Paramètres de la page du catalogue',
194
+ '$label.accordion.product_card_settings': 'Paramètres de la fiche de produit',
195
195
  '$label.accordion.categories_settings': 'Paramètres des catégories',
196
196
 
197
197
  '$label.show': 'Afficher',
198
198
  '$label.do_not_show': 'Ne pas afficher',
199
199
  '$label.show_on_mouse_hover': 'Afficher au survol de la souris',
200
200
 
201
- '$label.category_view.label': 'Vue des catégories',
202
- '$label.category_view.description': 'Affichez les produits des catégories racines uniquement sur les pages de catégories respectives. '
203
- + 'Cette option convient aux catalogues comportant un grand nombre de produits.',
204
- '$label.category_view.expanded': 'Catégories dépliées',
205
- '$label.category_view.collapsed': 'Catégories repliées',
201
+ '$label.category_view.label': 'Vue par catégorie',
202
+ '$label.category_view.description': 'Affichez les produits des catégories racines sur les pages des catégorie respectives uniquement. '
203
+ + 'Cette option convient aux catalogues qui ont un grand nombre de produits.',
204
+ '$label.category_view.expanded': 'Catégories développées',
205
+ '$label.category_view.collapsed': 'Catégories réduites',
206
206
 
207
- '$label.product_filter_placement.label': 'Emplacement du filtre produit',
207
+ '$label.product_filter_placement.label': 'Placement du filtre',
208
208
  '$label.product_filter_placement.category_pages': 'Sur les pages de catégories',
209
- '$label.product_filter_placement.all_pages': 'Sur les pages catalogue et catégories',
209
+ '$label.product_filter_placement.all_pages': 'Sur les pages de catégories et la page du catalogue',
210
210
 
211
211
  '$label.filter_panel_orientation.label': 'Orientation du panneau de filtres',
212
- '$label.filter_panel_orientation.vertical': 'Vertical',
213
- '$label.filter_panel_orientation.horizontal': 'Horizontal',
212
+ '$label.filter_panel_orientation.vertical': 'Verticale',
213
+ '$label.filter_panel_orientation.horizontal': 'Horizontale',
214
214
 
215
- '$label.filter_priority.label': 'Priorité des filtres',
215
+ '$label.filter_priority.label': 'Priorité du filtre',
216
216
  '$label.filter_priority.description': 'Jusqu\'à 4 filtres peuvent être affichés horizontalement. Les autres sont regroupés '
217
- + 'sous \u201CAutres filtres\u201D. Pour afficher un filtre horizontalement, placez-le parmi les 4 premiers '
218
- + 'dans le tri des filtres du panneau de configuration.',
219
- '$label.filter_priority.button': 'Trier les filtres produits',
217
+ + 'sous « Autres filtres ». Pour afficher un filtre spécifique horizontalement, placez-le parmi les 4 premiers '
218
+ + 'dans le tri des filtres dans le panneau de contrôle.',
219
+ '$label.filter_priority.button': 'Trier les filtres de produits',
220
220
 
221
- '$label.side_to_show_filters.label': 'Côté pour afficher les filtres',
221
+ '$label.side_to_show_filters.label': 'Côté afficher les filtres',
222
222
  '$label.side_to_show_filters.right': 'Droite',
223
223
  '$label.side_to_show_filters.left': 'Gauche',
224
224
 
225
- '$label.expand_filter_panel.label': 'Déplier le panneau de filtres',
226
- '$label.show_sort_by_options.label': 'Afficher les options "Trier par"',
225
+ '$label.expand_filter_panel.label': 'Développer le panneau de filtre',
226
+ '$label.show_sort_by_options.label': 'Afficher les options « Trier par »',
227
227
  '$label.show_bottom_navigation_menu.label': 'Afficher le menu de navigation inférieur',
228
- '$label.show_signin_link.label': 'Afficher le lien "Se connecter"',
228
+ '$label.show_signin_link.label': 'Afficher le lien « Se connecter »',
229
229
 
230
- '$label.card_grid_spacing.label': 'Espacement de la grille de cartes',
231
- '$label.card_grid_spacing.description': 'S\'applique aux cartes de produits et de catégories.',
230
+ '$label.card_grid_spacing.label': 'Espacement de la grille du panier',
231
+ '$label.card_grid_spacing.description': 'S\'applique à la fois aux fiches de produits et de catégories.',
232
232
  '$label.card_grid_spacing.none': 'Aucun',
233
233
  '$label.card_grid_spacing.narrow': 'Étroit',
234
234
  '$label.card_grid_spacing.medium': 'Moyen',
@@ -236,9 +236,9 @@ export default translation.init({
236
236
 
237
237
  '$label.content_alignment.label': 'Alignement du contenu',
238
238
  '$label.content_alignment.left': 'Gauche',
239
- '$label.content_alignment.center': 'Centré',
239
+ '$label.content_alignment.center': 'Centre',
240
240
  '$label.content_alignment.right': 'Droite',
241
- '$label.content_alignment.justify': 'Justifié',
241
+ '$label.content_alignment.justify': 'Justifier',
242
242
 
243
243
  '$label.image_proportions.label': 'Proportions de l\'image',
244
244
  '$label.image_proportions.portrait_2_3': 'Portrait (2:3)',
@@ -247,29 +247,29 @@ export default translation.init({
247
247
  '$label.image_proportions.landscape_4_3': 'Paysage (4:3)',
248
248
  '$label.image_proportions.landscape_2_3': 'Paysage (2:3)',
249
249
 
250
- '$label.card_size.label': 'Taille de la carte',
251
- '$label.card_size.small': 'Petit',
252
- '$label.card_size.medium': 'Moyen',
253
- '$label.card_size.large': 'Grand',
250
+ '$label.card_size.label': 'Taille de la fiche',
251
+ '$label.card_size.small': 'Petite',
252
+ '$label.card_size.medium': 'Moyenne',
253
+ '$label.card_size.large': 'Grande',
254
254
 
255
255
  '$label.product_name.label': 'Nom du produit',
256
256
  '$label.product_subtitle.label': 'Sous-titre du produit',
257
257
  '$label.price.label': 'Prix',
258
258
 
259
259
  '$label.color_swatches.label': 'Échantillons de couleurs',
260
- '$label.color_swatches.description': 'Vous pouvez configurer l\'apparence des échantillons de couleurs dans les Détails du produit.',
260
+ '$label.color_swatches.description': 'Vous pouvez configurer l\'apparence des échantillons dans les détails du produit.',
261
261
 
262
- '$label.sku.label': 'SKU',
263
- '$label.buy_now_button.label': 'Bouton "Acheter maintenant"',
262
+ '$label.sku.label': 'UGS',
263
+ '$label.buy_now_button.label': 'Bouton « Acheter maintenant »',
264
264
  '$label.product_rating.label': 'Évaluation du produit',
265
265
 
266
- '$label.rating_view.label': 'Vue des évaluations',
267
- '$label.rating_view.five_stars': 'Vue cinq étoiles',
268
- '$label.rating_view.one_star': 'Vue une étoile',
266
+ '$label.rating_view.label': 'Affichage des évaluations',
267
+ '$label.rating_view.five_stars': 'Vue de cinq étoiles',
268
+ '$label.rating_view.one_star': 'Vue d\'une étoile',
269
269
 
270
- '$label.show_average_product_rating.label': 'Afficher la note moyenne du produit',
270
+ '$label.show_average_product_rating.label': 'Afficher l\'évaluation moyenne du produit',
271
271
  '$label.show_total_number_of_reviews.label': 'Afficher le nombre total d\'avis',
272
- '$label.show_product_card_frame.label': 'Afficher le cadre de la fiche produit',
272
+ '$label.show_product_card_frame.label': 'Afficher le cadre de la fiche de produit',
273
273
  '$label.show_main_product_image.label': 'Afficher l\'image principale du produit',
274
274
  '$label.show_additional_image_on_hover.label': 'Afficher une image supplémentaire au survol',
275
275
 
@@ -278,8 +278,8 @@ export default translation.init({
278
278
  '$label.name_position.label': 'Position du nom',
279
279
  '$label.name_position.on_the_image': 'Sur l\'image',
280
280
  '$label.name_position.below_the_image': 'Sous l\'image',
281
- '$label.name_position.on_mouse_hover': 'Au survol de la souris',
281
+ '$label.name_position.on_mouse_hover': 'Au passage de la souris',
282
282
  '$label.name_position.hide_category_names': 'Masquer les noms de catégories',
283
- '$label.name_position.hide_category_images': 'Masquer les images de catégories',
283
+ '$label.name_position.hide_category_images': 'Masquer les images de la catégorie',
284
284
  },
285
285
  });
@@ -89,77 +89,76 @@ export default translation.init({
89
89
 
90
90
  nl: {
91
91
  '$label.main_product_info.title': 'Belangrijkste productinformatie',
92
- '$label.main_product_info.description': 'Informatie zoals naam, SKU, ondertitel, prijs '
93
- + 'en productopties blijft vast. De lay-out en het uiterlijk van deze elementen kunnen niet worden gewijzigd.',
92
+ '$label.main_product_info.description': 'Informatie zoals naam, subtitel, prijs en productopties blijft vast. '
93
+ + 'Lay-out en uiterlijk van deze elementen kunnen niet worden gewijzigd.',
94
94
  '$label.main_product_info.sku': 'SKU',
95
- '$label.main_product_info.show_sku': 'SKU tonen',
96
- '$label.main_product_info.loyalty': 'Loyalty',
97
- '$label.main_product_info.show_loyalty': 'Loyalty-bonussen tonen',
95
+ '$label.main_product_info.show_sku': 'SKU weergeven',
96
+ '$label.main_product_info.loyalty': 'Loyalty-bonus',
97
+ '$label.main_product_info.show_loyalty': 'Bonusbedrag weergeven',
98
98
  '$label.main_product_info.loyalty_note_label': '',
99
- '$label.main_product_info.loyalty_note': 'U kunt uw Loyalty-instellingen beheren in het X-Series-beheerpaneel '
100
- + ' Instellingen → Loyalty-pagina.',
99
+ '$label.main_product_info.loyalty_note': 'Om Loyalty te beheren, gaat u naar de beheeromgeving van Retail POS (X-Series) '
100
+ + 'en vervolgens naar Instellen → Loyalty.',
101
101
 
102
102
  '$label.additional_product_info.title': 'Aanvullende productinformatie',
103
- '$label.additional_product_info.description': 'Aanvullende informatie verschijnt in dezelfde '
104
- + 'volgorde als op de productpagina. U kunt deze instellingen bewerken en herschikken om klanten '
105
- + 'het product beter te laten begrijpen.',
103
+ '$label.additional_product_info.description': 'Aanvullende informatie wordt weergegeven in dezelfde volgorde als op de productpagina. '
104
+ + 'U kunt deze instellingen bewerken en herschikken om klanten te helpen het product beter te begrijpen.',
106
105
 
107
- '$label.show': 'Tonen',
108
- '$label.do_not_show': 'Niet tonen',
106
+ '$label.show': 'Weergeven',
107
+ '$label.do_not_show': 'Niet weergeven',
109
108
  '$label.learn_more': 'Meer informatie',
110
109
 
111
110
  '$label.image_gallery': 'Afbeeldingengalerij',
112
111
  '$label.image_gallery.image_placement': 'Afbeeldingsplaatsing',
113
112
  '$label.image_gallery.horizontal': 'Horizontaal',
114
113
  '$label.image_gallery.vertical': 'Verticaal',
115
- '$label.image_gallery.full_images': 'Afbeeldingen op volledig formaat',
116
- '$label.image_gallery.zoom_image': 'Afbeelding zoomen bij aanwijzen',
117
- '$label.image_gallery.show_alt_text': 'Alt-tekst van afbeelding als beschrijving tonen',
114
+ '$label.image_gallery.full_images': 'Afbeeldingen op volledige grootte',
115
+ '$label.image_gallery.zoom_image': 'Afbeelding zoomen bij muis erover',
116
+ '$label.image_gallery.show_alt_text': 'Alt-tekst voor afbeeldingen weergeven als beschrijving',
118
117
 
119
118
  '$label.color_swatches': 'Kleurstalen',
120
- '$label.color_swatches.description': 'Kleurstalinstellingen worden ook toegepast op de productkaart in de catalogus.',
119
+ '$label.color_swatches.description': 'Kleurstaalinstellingen worden ook toegepast op de productkaart in de catalogus.',
121
120
  '$label.color_swatches.size': 'Grootte',
122
121
  '$label.color_swatches.size.small': 'Klein',
123
- '$label.color_swatches.size.medium': 'Gemiddeld',
122
+ '$label.color_swatches.size.medium': 'Normaal',
124
123
  '$label.color_swatches.size.large': 'Groot',
125
124
  '$label.color_swatches.shape': 'Vorm',
126
125
  '$label.color_swatches.shape.circle': 'Cirkel',
127
126
  '$label.color_swatches.shape.square': 'Vierkant',
128
127
  '$label.color_swatches.shape.rounded_square': 'Afgerond vierkant',
129
128
 
130
- '$label.add_to_bag_button': 'Knop "In winkelwagen"',
129
+ '$label.add_to_bag_button': 'Knop "Toevoegen aan tas"',
131
130
  '$label.add_to_bag_button.stock_availability': 'Voorraadbeschikbaarheid',
132
- '$label.add_to_bag_button.number_of_items': 'Aantal items',
133
- '$label.add_to_bag_button.product_quantity': 'Producthoeveelheid',
131
+ '$label.add_to_bag_button.number_of_items': 'Aantal artikelen',
132
+ '$label.add_to_bag_button.product_quantity': 'Productaantal',
134
133
 
135
134
  '$label.navigation': 'Navigatie',
136
135
  '$label.navigation.breadcrumbs': 'Broodkruimels',
137
- '$label.navigation.breadcrumbs.in_sidebar': 'Tonen in zijbalk',
138
- '$label.navigation.breadcrumbs.in_header': 'Tonen in koptekst',
139
- '$label.navigation.breadcrumbs.do_not_show': 'Niet tonen',
140
- '$label.navigation.show_arrows': 'Navigatiepijlen tonen',
136
+ '$label.navigation.breadcrumbs.in_sidebar': 'Weergeven in zijbalk',
137
+ '$label.navigation.breadcrumbs.in_header': 'Weergeven in koptekst',
138
+ '$label.navigation.breadcrumbs.do_not_show': 'Niet weergeven',
139
+ '$label.navigation.show_arrows': 'Navigatiepijlen weergeven',
141
140
 
142
- '$label.outlets_stock': 'Vestigingen & Voorraad',
143
- '$label.outlets_stock.list_outlets': 'Lijst van beschikbare vestigingen',
144
- '$label.outlets_stock.number_of_items': 'Aantal items op voorraad',
141
+ '$label.outlets_stock': 'Winkellocaties en voorraad',
142
+ '$label.outlets_stock.list_outlets': 'Lijst van beschikbare winkellocaties',
143
+ '$label.outlets_stock.number_of_items': 'Aantal artikelen op voorraad',
145
144
 
146
145
  '$label.estimated_delivery_time': 'Geschatte levertijd',
147
146
  '$label.estimated_delivery_time.display': 'Geschatte levertijd weergeven',
148
- '$label.estimated_delivery_time.description': 'Ga naar het configuratiescherm om de geschatte levertijd te beheren.',
147
+ '$label.estimated_delivery_time.description': 'Ga naar de beheeromgeving om de geschatte levertijd te beheren.',
149
148
  '$label.estimated_delivery_time.info_label': '',
150
149
  '$label.estimated_delivery_time.info_description': '',
151
150
 
152
151
  '$label.wholesale_prices': 'Groothandelsprijzen',
153
152
  '$label.wholesale_prices.display': 'Groothandelsprijzen weergeven',
154
- '$label.wholesale_prices.description': 'Ga naar het configuratiescherm om de groothandelsprijzen te beheren.',
153
+ '$label.wholesale_prices.description': 'Ga naar de beheeromgeving om groothandelsprijzen te beheren.',
155
154
  '$label.wholesale_prices.info_label': '',
156
155
  '$label.wholesale_prices.info_description': '',
157
156
 
158
- '$label.product_reviews': 'Productbeoordelingen',
157
+ '$label.product_reviews': 'Productreviews',
159
158
  '$label.product_reviews.show': 'Productbeoordelingen tonen',
160
159
  '$label.product_reviews.section_view': 'Sectieweergave',
161
- '$label.product_reviews.one_card': 'Eén kaart',
162
- '$label.product_reviews.multiple_cards': 'Meerdere kaarten',
160
+ '$label.product_reviews.one_card': 'Reviewsectie met één kaart',
161
+ '$label.product_reviews.multiple_cards': 'Sectie met meerdere reviews',
163
162
 
164
163
  '$label.favorites_button': 'Favorietenknop',
165
164
  '$label.favorites_button.display': 'Favorietenknop weergeven',
@@ -167,26 +166,26 @@ export default translation.init({
167
166
  '$label.share_buttons': 'Deelknoppen',
168
167
  '$label.share_buttons.display': 'Deelknoppen weergeven',
169
168
 
170
- '$label.product_details': 'Productdetails',
169
+ '$label.product_details': 'Productgegevens',
171
170
  '$label.product_details.weight': 'Gewicht',
172
- '$label.product_details.attributes': 'Productkenmerken',
171
+ '$label.product_details.attributes': 'Productattributen',
173
172
  '$label.product_details.description_toggle': 'Productbeschrijving',
174
173
  },
175
174
 
176
175
  fr: {
177
176
  '$label.main_product_info.title': 'Informations principales du produit',
178
- '$label.main_product_info.description': 'Les informations telles que le nom, le SKU, le sous-titre, le prix '
179
- + 'et les options du produit restent fixes. La mise en page et l\'apparence de ces éléments ne peuvent pas être modifiées.',
180
- '$label.main_product_info.sku': 'SKU',
181
- '$label.main_product_info.show_sku': 'Afficher le SKU',
182
- '$label.main_product_info.loyalty': 'Loyalty',
183
- '$label.main_product_info.show_loyalty': 'Afficher les bonus Loyalty',
177
+ '$label.main_product_info.description': 'Les informations telles que le nom, la description, le prix et les options '
178
+ + 'du produit restent fixes. La mise en page et l\'apparence de ces éléments ne peuvent pas être modifiées.',
179
+ '$label.main_product_info.sku': 'UGS',
180
+ '$label.main_product_info.show_sku': 'Afficher l\'UGS',
181
+ '$label.main_product_info.loyalty': 'Bonus fidélité',
182
+ '$label.main_product_info.show_loyalty': 'Afficher le montant du bonus',
184
183
  '$label.main_product_info.loyalty_note_label': '',
185
- '$label.main_product_info.loyalty_note': 'Vous pouvez gérer vos paramètres Loyalty dans le panneau '
186
- + 'd\'administration X-Series Paramètrespage Loyalty.',
184
+ '$label.main_product_info.loyalty_note': 'Pour gérer le bonus fidélité, ouvrez le panneau de contrôle de votre point de vente '
185
+ + '(X-Series) et accédez à Configuration Fidélité.',
187
186
 
188
- '$label.additional_product_info.title': 'Informations complémentaires du produit',
189
- '$label.additional_product_info.description': 'Les informations complémentaires apparaissent dans le même '
187
+ '$label.additional_product_info.title': 'Informations supplémentaires du produit',
188
+ '$label.additional_product_info.description': 'Les informations supplémentaires apparaissent dans le même '
190
189
  + 'ordre que sur la page du produit. Vous pouvez modifier et réorganiser ces paramètres pour aider les clients '
191
190
  + 'à mieux comprendre le produit.',
192
191
 
@@ -195,28 +194,28 @@ export default translation.init({
195
194
  '$label.learn_more': 'En savoir plus',
196
195
 
197
196
  '$label.image_gallery': 'Galerie d\'images',
198
- '$label.image_gallery.image_placement': 'Placement des images',
197
+ '$label.image_gallery.image_placement': 'Placement de l\'image',
199
198
  '$label.image_gallery.horizontal': 'Horizontal',
200
199
  '$label.image_gallery.vertical': 'Vertical',
201
200
  '$label.image_gallery.full_images': 'Images en taille réelle',
202
- '$label.image_gallery.zoom_image': 'Zoom sur l\'image au survol',
203
- '$label.image_gallery.show_alt_text': 'Afficher le texte alternatif de l\'image comme description',
201
+ '$label.image_gallery.zoom_image': 'Zoomer sur l\'image au survol du curseur',
202
+ '$label.image_gallery.show_alt_text': 'Afficher le texte alternatif de l\'image en tant que description',
204
203
 
205
204
  '$label.color_swatches': 'Échantillons de couleurs',
206
- '$label.color_swatches.description': 'Les paramètres des échantillons de couleurs sont également appliqués à la fiche produit dans le catalogue.',
205
+ '$label.color_swatches.description': 'Les paramètres des échantillons de couleur sont également appliqués à la fiche du produit dans le catalogue.',
207
206
  '$label.color_swatches.size': 'Taille',
208
- '$label.color_swatches.size.small': 'Petit',
209
- '$label.color_swatches.size.medium': 'Moyen',
210
- '$label.color_swatches.size.large': 'Grand',
207
+ '$label.color_swatches.size.small': 'Petite',
208
+ '$label.color_swatches.size.medium': 'Moyenne',
209
+ '$label.color_swatches.size.large': 'Grande',
211
210
  '$label.color_swatches.shape': 'Forme',
212
211
  '$label.color_swatches.shape.circle': 'Cercle',
213
212
  '$label.color_swatches.shape.square': 'Carré',
214
- '$label.color_swatches.shape.rounded_square': 'Carré Arrondi',
213
+ '$label.color_swatches.shape.rounded_square': 'Carré arrondi',
215
214
 
216
- '$label.add_to_bag_button': 'Bouton "Ajouter au Panier"',
217
- '$label.add_to_bag_button.stock_availability': 'Disponibilité en stock',
215
+ '$label.add_to_bag_button': 'Bouton « Ajouter au panier »',
216
+ '$label.add_to_bag_button.stock_availability': 'Disponibilité du stock',
218
217
  '$label.add_to_bag_button.number_of_items': 'Nombre d\'articles',
219
- '$label.add_to_bag_button.product_quantity': 'Quantité du produit',
218
+ '$label.add_to_bag_button.product_quantity': 'Quantité de produit',
220
219
 
221
220
  '$label.navigation': 'Navigation',
222
221
  '$label.navigation.breadcrumbs': 'Fil d\'Ariane',
@@ -225,30 +224,30 @@ export default translation.init({
225
224
  '$label.navigation.breadcrumbs.do_not_show': 'Ne pas afficher',
226
225
  '$label.navigation.show_arrows': 'Afficher les flèches de navigation',
227
226
 
228
- '$label.outlets_stock': 'Points de vente & Stock',
227
+ '$label.outlets_stock': 'Points de vente et stock',
229
228
  '$label.outlets_stock.list_outlets': 'Liste des points de vente disponibles',
230
229
  '$label.outlets_stock.number_of_items': 'Nombre d\'articles en stock',
231
230
 
232
231
  '$label.estimated_delivery_time': 'Délai de livraison estimé',
233
232
  '$label.estimated_delivery_time.display': 'Afficher le délai de livraison estimé',
234
- '$label.estimated_delivery_time.description': 'Pour gérer le délai de livraison estimé, accédez au panneau de configuration.',
233
+ '$label.estimated_delivery_time.description': 'Accédez au panneau de contrôle pour gérer le délai de livraison estimé.',
235
234
  '$label.estimated_delivery_time.info_label': '',
236
235
  '$label.estimated_delivery_time.info_description': '',
237
236
 
238
237
  '$label.wholesale_prices': 'Prix de gros',
239
238
  '$label.wholesale_prices.display': 'Afficher les prix de gros',
240
- '$label.wholesale_prices.description': 'Pour gérer les prix de gros, accédez au panneau de configuration.',
239
+ '$label.wholesale_prices.description': 'Accédez au panneau de contrôle pour gérer les prix de gros.',
241
240
  '$label.wholesale_prices.info_label': '',
242
241
  '$label.wholesale_prices.info_description': '',
243
242
 
244
- '$label.product_reviews': 'Avis sur les produits',
245
- '$label.product_reviews.show': 'Afficher les avis produits',
246
- '$label.product_reviews.section_view': 'Vue de la section',
247
- '$label.product_reviews.one_card': 'Une carte',
248
- '$label.product_reviews.multiple_cards': 'Plusieurs cartes',
243
+ '$label.product_reviews': 'Avis sur le produit',
244
+ '$label.product_reviews.show': 'Afficher les avis sur les produits',
245
+ '$label.product_reviews.section_view': 'Vue de section',
246
+ '$label.product_reviews.one_card': 'Section d\'une fiche avec un avis',
247
+ '$label.product_reviews.multiple_cards': 'Section des avis multiples',
249
248
 
250
- '$label.favorites_button': 'Bouton favoris',
251
- '$label.favorites_button.display': 'Afficher le bouton favoris',
249
+ '$label.favorites_button': 'Bouton Favoris',
250
+ '$label.favorites_button.display': 'Afficher le bouton des favoris',
252
251
 
253
252
  '$label.share_buttons': 'Boutons de partage',
254
253
  '$label.share_buttons.display': 'Afficher les boutons de partage',