@salla.sa/base 2.11.21 → 2.11.45

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/dist/cjs/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("lodash/get"),t=require("eventemitter2"),r=require("store/src/store-engine"),n=require("store/storages/localStorage"),l=require("store/storages/sessionStorage"),i=require("store/storages/cookieStorage"),a=require("store/storages/memoryStorage");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),c=o(t),u=o(r),d=o(n),g=o(l),p=o(i),f=o(a);function h(e,t=!1){e+="";let r,n=["٠","١","٢","٣","٤","٥","٦","٧","٨","٩"],l=["0","1","2","3","4","5","6","7","8","9"],i=(t=t||!Salla.config.get("store.settings.arabic_numbers_enabled"))?n:l,a=t?l:n;for(let t=0;t<i.length;t++)r=new RegExp(i[t],"g"),e=e.replace(r,a[t]);return e}function m(e){let t=(e.match(/\./g)||[]).length;return t&&1!==t?m(e.replace(/\.(.+)\./g,".$1")):e}function S(e,t,r){let n=e[0];return r&&0==e.length?Array.isArray(r)?(r.push(t),r):[r,t]:Array.isArray(r)?(r.push(t),r):"string"==typeof r?[r,t]:r?(r[n]=S(e.slice(1),t,r[n]),r):n?{[n]:S(e.slice(1),t)}:""===n?[t]:t}function b(e){return Salla.config.get("store.url",window.location.href.split("/").slice(0,-1).join("/")).rtrim("/")+"/"+e.ltrim("/")}var w={digitsOnly:function(e){return h(e,!0).replace(/[^0-9.]/g,"").replace("..",".").rtrim(".")},inputDigitsOnly:function e(t,r=!1){if("string"==typeof t)return document.querySelectorAll(t).forEach((t=>e(t,r)));if(!t)return void Salla.logger.warn("Can't find Object With Id: "+t);let n=Salla.helpers.digitsOnly(t.value);return t.min&&n<t.min?t.value=t.min:t.max&&n>t.max?t.value=t.max:t.maxLength>=1&&n.toString().length>t.maxLength?t.value=n.toString().substring(0,t.maxLength):t.value=r||t.dataset.hasOwnProperty("digitsWithDecimal")?m(n):n.replace(/\D/g,"")},number:h,money:function(e){let t=Salla.config.currency(e?.currency).symbol;return h(e="object"==typeof e?e.amount:e)+" "+t},setNested:function(e,t,r){let n=e,l=t.split("."),i=l.length;for(let e=0;e<i-1;e++){let t=l[e];n[t]||(n[t]={}),n=n[t]}return n[l[i-1]]=r,e},getNested:function(e,t,r){let n=s.default(e,t);return void 0!==n?n:r},inputData:function(e,t,r={}){if(e.includes("[")){let n=e.split("]").join("").split("[");return{name:n[0],value:S(n.slice(1),t,r[n[0]])}}return{name:e,value:t}},url:{get:b,asset:function(e){return function(e){return window.location.origin+"/"+e.ltrim("/")}("themes/"+Salla.config.get("theme.name")+"/"+e.ltrim("/"))},cdn:function(e){return"https://cdn.salla.network/"+e.ltrim("/")},is_page:function(e){return e&&Salla.config.get("page.slug")===e},api:function(e){return Salla.config.get("store.api",b("")).rtrim("/")+"/"+e.ltrim("/")}},addParamToUrl:function(e,t){if(!t||!e)return window.location.href;let r=new RegExp("([?&])"+e+"=[^&]+[&]?","g"),n=window.location.href.replace(r,"$1").replace(/&$|\?$/,"");return n.includes("?")?n+="&":n+=(n.endsWith("/")?"":"/")+"?",(n+e+"="+encodeURIComponent(t)).replace(/&$|\?$/,"")},debounce:function(e,t){t=t||100;let r,n=[];return function(...l){return clearTimeout(r),r=setTimeout((()=>{let t=e(...l);n.forEach((e=>e(t))),n=[]}),t),new Promise((e=>n.push(e)))}}},v=function(e){let t={log:function(t,r){if(!e)return;if(!salla.config.isDebug())return;"trace"===salla.config.get("debug")&&(r="trace");let n=e.log,l=void 0===r?n:this.__dict__[r]||n,i=["%cTwilight","color: #5cd5c4;font-weight:bold; border:1px solid #5cd5c4; padding: 2px 6px; border-radius: 5px;"],a={event:"#CFF680",backend:"#7b68ee"}[r];a&&(i[0]+="%c"+r[0].toUpperCase()+r.substring(1),i.push(`margin-left: 5px;color: ${a};font-weight:bold; border:1px solid ${a}; padding: 2px 6px; border-radius: 5px;`)),l.call(e,...i.concat(...t))},__dict__:{trace:e.trace,debug:e.debug,info:e.info,warn:e.warn,error:e.error}};return{event:function(){t.log(arguments,"event")},trace:function(){t.log(arguments,"trace")},debug:function(){t.log(arguments,"debug")},info:function(){t.log(arguments,"info")},warn:function(){t.log(arguments,"warn")},error:function(){t.log(arguments,"error")},log:function(){t.log(arguments,void 0)},backend:function(){t.log(arguments,"backend")},logs:function(e){[e].flat().forEach((e=>e&&t.log([e].flat(),"backend")))}}}(console);class y extends c.default{constructor(){super({wildcard:!0,delimiter:"::",newListener:!1,removeListener:!1,maxListeners:10,verboseMemoryLeak:!1,ignoreErrors:!1}),this.delimiter="::","undefined"!=typeof document&&(this.body=document.querySelector("body")),this.logableEvents=["cart::item.added.failed","cart::item.deleted.failed"],this.ingoreLogEvents=["document::click","document::keyup","document::change"],this.noneFireableActions=["document.request"]}createAndDispatch(e,...t){this.dispatch(e,...t)}emit(e,...t){let r=e.replace("::",".");if(!this.noneFireableActions.includes(r)&&void 0!==Salla.call&&"function"==typeof Salla.call(r))return Salla.log(`'Salla.${r}(...)' triggered using event '${e}'`),r=r.split("."),void salla[r[0]][r[1]](...t);if(super.emit(e,...t),"undefined"!=typeof window){window.dataLayer=window.dataLayer||[];let r={event:e};t.map((e=>"object"==typeof e&&(r={...r,...e}))),window.dataLayer.push(r)}Salla.logger&&!this.ingoreLogEvents.includes(e)&&Salla.logger.event(e,...t),this.dispatchMobileEvent(e,{...t.values()})}dispatch(e,...t){return this.emit(e,...t)}dispatchEvents(e){if(e&&"object"==typeof e)for(const[t,r]of Object.entries(e))this.dispatch(t,r);else Salla.log("No Events To Dispatch!",e)}addListener(e,t){return this.on(e,t)}addEventListener(e,t){return this.on(e,t)}listen(e,t){return this.on(e,t)}registerGlobalListener(e,t){return this.onAny(t)}dispatchMobileEvent(e,t={}){if(!("undefined"!=typeof window&&window.dataLayer&&dataLayer[0]&&dataLayer[0].page&&dataLayer[0].page.mobileApp))return"";if(window.webkit)try{window.webkit.messageHandlers.callbackHandler.postMessage(JSON.stringify({event:e,details:t}))}catch(e){Salla.log(e,"The native context does not exist yet")}else if(Android)try{Android.customEventWithData(e,JSON.stringify({details:t}))}catch(e){Salla.log(e,"The native context does not exist yet")}}}const x=u.default.createStore([d.default,g.default,p.default,f.default],[]);"undefined"==typeof global?(window.salla=window.salla||window.Salla||{},window.Salla=window.salla):(global.salla=global.salla||global.Salla||{},global.Salla=global.salla),Salla.status="base",Salla.config=new class{constructor(e={},t={}){this.default_properties=t,this.properties_={...this.default_properties,...e}}merge(e){return Object.assign(this.properties_,e),this.properties_.store={...this.default_properties.store,...this.properties_.store},this}set(e,t){return e.includes(".")?(Salla.helpers.setNested(this.properties_,e,t),this):(this.properties_[e]=t,this)}get(e,t=null){return e.includes(".")?Salla.helpers.getNested(this.properties_,e,t):this.properties_.hasOwnProperty(e)?this.properties_[e]||t:t||void 0}all(){return this.properties_}isDebug(){return this.get("debug")||Salla.storage.get("debug")}},Salla.logger=v,Salla.event=new y,Salla.storage=new class{constructor(){Salla.event.on("storage::item.remove",(e=>this.remove(e))),Salla.event.on("storage::item.set",((e,t)=>this.set(e,t))),this.store=x}set(e,t){if(e.includes(".")){let r=e.split(".")[0],n={[r]:this.store.get(r)};return n=Salla.helpers.setNested(n,e,t),this.store.set(r,n[r])}return this.store.set(e,t)}remove(e){return this.store.remove(e)}clearAll(){return this.store.clearAll()}get(e,t){if(e.includes(".")){let t=e.split(".")[0];return Salla.helpers.getNested({[t]:this.store.get(t)},e)}return this.store.get(e,t)}},Salla.cookie=new class{constructor(){Salla.event.on("cookies::remove",(e=>this.remove(e))),Salla.event.on("cookies::add",((e,t)=>this.set(e,t)))}get(e){return document.cookie.split("; ").find((t=>t.startsWith(e+"=")))?.split("=")[1]}set(e,t="",r=10){let n="";if(r){let e=new Date;e.setTime(e.getTime()+24*r*60*60*1e3),n="; expires="+e.toUTCString()}return document.cookie=`${e}=${t}${n}"; path=/; secure; SameSite=Lax"`,this}remove(e){return document.cookie=`${e}=; Max-Age=0; path=/;`,this}clearAll(){let e=document.cookie.split(";");for(let t=0;t<e.length;t++){let r=e[t],n=r.indexOf("="),l=n>-1?r.substr(0,n):r;this.remove(l)}}},Salla.helpers=w,Salla.log=Salla.logger.log,Salla.money=Salla.helpers.money,Salla.url=Salla.helpers.url,Salla.versions={base:"[VI]{version}[/VI]"};var _=Salla;exports.default=_;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("lodash/get"),t=require("eventemitter2"),r=require("store/src/store-engine"),l=require("store/storages/localStorage"),n=require("store/storages/sessionStorage"),i=require("store/storages/cookieStorage"),a=require("store/storages/memoryStorage");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),c=o(t),u=o(r),d=o(l),g=o(n),p=o(i),f=o(a);function h(e,t=!1){e+="";let r,l=["٠","١","٢","٣","٤","٥","٦","٧","٨","٩"],n=["0","1","2","3","4","5","6","7","8","9"],i=(t=t||!Salla.config.get("store.settings.arabic_numbers_enabled"))?l:n,a=t?n:l;for(let t=0;t<i.length;t++)r=new RegExp(i[t],"g"),e=e.replace(r,a[t]);return e}function m(e){let t=(e.match(/\./g)||[]).length;return t&&1!==t?m(e.replace(/\.(.+)\./g,".$1")):e}function S(e,t,r){let l=e[0];return r&&0==e.length?Array.isArray(r)?(r.push(t),r):[r,t]:Array.isArray(r)?(r.push(t),r):"string"==typeof r?[r,t]:r?(r[l]=S(e.slice(1),t,r[l]),r):l?{[l]:S(e.slice(1),t)}:""===l?[t]:t}function b(e){return Salla.config.get("store.url",window.location.href.split("/").slice(0,-1).join("/")).rtrim("/")+"/"+e.ltrim("/")}var w={digitsOnly:function(e){return h(e,!0).replace(/[^0-9.]/g,"").replace("..",".").rtrim(".")},inputDigitsOnly:function e(t,r=!1){if("string"==typeof t)return document.querySelectorAll(t).forEach((t=>e(t,r)));if(!t)return void Salla.logger.warn("Can't find Object With Id: "+t);let l=Salla.helpers.digitsOnly(t.value);return t.min&&l<t.min?t.value=t.min:t.max&&l>t.max?t.value=t.max:t.maxLength>=1&&l.toString().length>t.maxLength?t.value=l.toString().substring(0,t.maxLength):t.value=r||t.dataset.hasOwnProperty("digitsWithDecimal")?m(l):l.replace(/\D/g,"")},number:h,money:function(e){let t=Salla.config.currency(e?.currency).symbol;return h(e="object"==typeof e?e.amount:e)+" "+t},setNested:function(e,t,r){let l=e,n=t.split("."),i=n.length;for(let e=0;e<i-1;e++){let t=n[e];l[t]||(l[t]={}),l=l[t]}return l[n[i-1]]=r,e},getNested:function(e,t,r){let l=s.default(e,t);return void 0!==l?l:r},inputData:function(e,t,r={}){if(e.includes("[")){let l=e.split("]").join("").split("[");return{name:l[0],value:S(l.slice(1),t,r[l[0]])}}return{name:e,value:t}},url:{get:b,asset:function(e){return function(e){return window.location.origin+"/"+e.ltrim("/")}("themes/"+Salla.config.get("theme.name")+"/"+e.ltrim("/"))},cdn:function(e){return"https://cdn.salla.network/"+e.ltrim("/")},is_page:function(e){return e&&Salla.config.get("page.slug")===e},api:function(e){return Salla.config.get("store.api",b("")).rtrim("/")+"/"+e.ltrim("/")}},addParamToUrl:function(e,t){if(!t||!e)return window.location.href;let r=new RegExp("([?&])"+e+"=[^&]+[&]?","g"),l=window.location.href.replace(r,"$1").split("#")[0].replace(/&$|\?$/,"");return l.includes("?")?l+="&":l+=(l.endsWith("/")?"":"/")+"?",(l+e+"="+encodeURIComponent(t)).replace(/&$|\?$/,"")},debounce:function(e,t){t=t||100;let r,l=[];return function(...n){return clearTimeout(r),r=setTimeout((()=>{let t=e(...n);l.forEach((e=>e(t))),l=[]}),t),new Promise((e=>l.push(e)))}}},v=function(e){let t={log:function(t,r){if(!e)return;if(!salla.config.isDebug())return;"trace"===salla.config.get("debug")&&(r="trace");let l=e.log,n=void 0===r?l:this.__dict__[r]||l,i=["%cTwilight","color: #5cd5c4;font-weight:bold; border:1px solid #5cd5c4; padding: 2px 6px; border-radius: 5px;"],a={event:"#CFF680",backend:"#7b68ee"}[r];a&&(i[0]+="%c"+r[0].toUpperCase()+r.substring(1),i.push(`margin-left: 5px;color: ${a};font-weight:bold; border:1px solid ${a}; padding: 2px 6px; border-radius: 5px;`)),n.call(e,...i.concat(...t))},__dict__:{trace:e.trace,debug:e.debug,info:e.info,warn:e.warn,error:e.error}};return{event:function(){t.log(arguments,"event")},trace:function(){t.log(arguments,"trace")},debug:function(){t.log(arguments,"debug")},info:function(){t.log(arguments,"info")},warn:function(){t.log(arguments,"warn")},error:function(){t.log(arguments,"error")},log:function(){t.log(arguments,void 0)},backend:function(){t.log(arguments,"backend")},logs:function(e){[e].flat().forEach((e=>e&&t.log([e].flat(),"backend")))}}}(console);class y extends c.default{constructor(){super({wildcard:!0,delimiter:"::",newListener:!1,removeListener:!1,maxListeners:10,verboseMemoryLeak:!1,ignoreErrors:!1}),this.delimiter="::","undefined"!=typeof document&&(this.body=document.querySelector("body")),this.logableEvents=["cart::item.added.failed","cart::item.deleted.failed"],this.ingoreLogEvents=["document::click","document::keyup","document::change"],this.noneFireableActions=["document.request"]}createAndDispatch(e,...t){this.dispatch(e,...t)}emit(e,...t){let r=e.replace("::",".");if(!this.noneFireableActions.includes(r)&&void 0!==Salla.call&&"function"==typeof Salla.call(r))return Salla.log(`'Salla.${r}(...)' triggered using event '${e}'`),r=r.split("."),void salla[r[0]][r[1]](...t);if(super.emit(e,...t),"undefined"!=typeof window){window.dataLayer=window.dataLayer||[];let r={event:e};t.map((e=>"object"==typeof e&&(r={...r,...e}))),window.dataLayer.push(r)}Salla.logger&&!this.ingoreLogEvents.includes(e)&&Salla.logger.event(e,...t),this.dispatchMobileEvent(e,{...t.values()})}dispatch(e,...t){return this.emit(e,...t)}dispatchEvents(e){if(e&&"object"==typeof e)for(const[t,r]of Object.entries(e))this.dispatch(t,r);else Salla.log("No Events To Dispatch!",e)}addListener(e,t){return this.on(e,t)}addEventListener(e,t){return this.on(e,t)}listen(e,t){return this.on(e,t)}registerGlobalListener(e,t){return this.onAny(t)}dispatchMobileEvent(e,t={}){if(!("undefined"!=typeof window&&window.dataLayer&&dataLayer[0]&&dataLayer[0].page&&dataLayer[0].page.mobileApp))return"";if(window.webkit)try{window.webkit.messageHandlers.callbackHandler.postMessage(JSON.stringify({event:e,details:t}))}catch(e){Salla.log(e,"The native context does not exist yet")}else if(Android)try{Android.customEventWithData(e,JSON.stringify({details:t}))}catch(e){Salla.log(e,"The native context does not exist yet")}}}const x=u.default.createStore([d.default,g.default,p.default,f.default],[]);"undefined"==typeof global?(window.salla=window.salla||window.Salla||{},window.Salla=window.salla):(global.salla=global.salla||global.Salla||{},global.Salla=global.salla),Salla.status="base",Salla.config=new class{constructor(e={},t={}){this.default_properties=t,this.properties_={...this.default_properties,...e}}merge(e){return Object.assign(this.properties_,e),this.properties_.store={...this.default_properties.store,...this.properties_.store},this}set(e,t){return e.includes(".")?(Salla.helpers.setNested(this.properties_,e,t),this):(this.properties_[e]=t,this)}get(e,t=null){return e.includes(".")?Salla.helpers.getNested(this.properties_,e,t):this.properties_.hasOwnProperty(e)?this.properties_[e]||t:t||void 0}all(){return this.properties_}isDebug(){return this.get("debug")||Salla.storage.get("debug")}},Salla.logger=v,Salla.event=new y,Salla.storage=new class{constructor(){Salla.event.on("storage::item.remove",(e=>this.remove(e))),Salla.event.on("storage::item.set",((e,t)=>this.set(e,t))),this.store=x}set(e,t){if(e.includes(".")){let r=e.split(".")[0],l={[r]:this.store.get(r)};return l=Salla.helpers.setNested(l,e,t),this.store.set(r,l[r])}return this.store.set(e,t)}remove(e){return this.store.remove(e)}clearAll(){return this.store.clearAll()}get(e,t){if(e.includes(".")){let t=e.split(".")[0];return Salla.helpers.getNested({[t]:this.store.get(t)},e)}return this.store.get(e,t)}},Salla.cookie=new class{constructor(){Salla.event.on("cookies::remove",(e=>this.remove(e))),Salla.event.on("cookies::add",((e,t)=>this.set(e,t)))}get(e){return document.cookie.split("; ").find((t=>t.startsWith(e+"=")))?.split("=")[1]}set(e,t="",r=10){let l="";if(r){let e=new Date;e.setTime(e.getTime()+24*r*60*60*1e3),l="; expires="+e.toUTCString()}return document.cookie=`${e}=${t}${l}"; path=/; secure; SameSite=Lax"`,this}remove(e){return document.cookie=`${e}=; Max-Age=0; path=/;`,this}clearAll(){let e=document.cookie.split(";");for(let t=0;t<e.length;t++){let r=e[t],l=r.indexOf("="),n=l>-1?r.substr(0,l):r;this.remove(n)}}},Salla.helpers=w,Salla.log=Salla.logger.log,Salla.money=Salla.helpers.money,Salla.url=Salla.helpers.url,Salla.versions={base:"[VI]{version}[/VI]"};var _=Salla;exports.default=_;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/helpers/numbers.js","../../src/helpers/index.js","../../src/logger.js","../../src/event.js","../../src/storage.js","../../src/index.js","../../src/config.js","../../src/cookie.js"],"sourcesContent":["/**\n * @param num\n * @param {boolean} isToEnglish\n * @return {string}\n */\nexport function number(num, isToEnglish = false) {\n num = num + \"\";//make sure that number will be converted to string;\n isToEnglish = isToEnglish || !Salla.config.get('store.settings.arabic_numbers_enabled');\n let ar = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];\n let en = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n let find = isToEnglish ? ar : en;\n let replace = isToEnglish ? en : ar;\n let regex;\n for (let i = 0; i < find.length; i++) {\n regex = new RegExp(find[i], \"g\");\n num = num.replace(regex, replace[i]);\n }\n return num;\n}\n\n/**\n * when need to get digit's only from string \"Jamal12Hi\" => 12, or \"١٢٣\" => 123\n * @param {string} num\n * @return {string}\n */\nexport function digitsOnly(num) {\n return number(num, true).replace(/[^0-9.]/g, '')\n .replace('..', '.')\n .rtrim('.'); // without this: `Salla.helpers.digitsOnly('١٬٦٠٠ ر.س')` => `1600.`\n}\n\n/**\n * @param {HTMLInputElement|string} input - selector or input object\n * @param {boolean} is_decimal\n * @return {string|*|void}\n */\nexport function inputDigitsOnly(input, is_decimal = false) {\n if (typeof input == 'string') {\n return document.querySelectorAll(input).forEach(el => inputDigitsOnly(el, is_decimal));\n }\n if (!input) {\n Salla.logger.warn('Can\\'t find Object With Id: ' + input);\n return;\n }\n let new_val = Salla.helpers.digitsOnly(input.value);\n\n if (input.min && new_val < input.min) {\n return input.value = input.min;\n }\n if (input.max && new_val > input.max) {\n return input.value = input.max;\n }\n if (input.maxLength >= 1 && new_val.toString().length > input.maxLength) {\n return input.value = new_val.toString().substring(0, input.maxLength);\n }\n\n return input.value = (is_decimal || input.dataset.hasOwnProperty('digitsWithDecimal'))\n ? getOnlyDecimal(new_val)\n : new_val.replace(/\\D/g, '');\n}\n\nexport function getOnlyDecimal(value) {\n let dotsCount = (value.match(/\\./g) || []).length;\n if (!dotsCount || dotsCount === 1) {\n return value;\n }\n\n // if there is more than one dotes, remove the last dot.\n // Ex: 123.545.66 => 123.54566\n return getOnlyDecimal(value.replace(/\\.(.+)\\./g, '.$1'));\n}\n\n/**\n * @param {string|number|{amount: number,currency: string}} money\n * @return string\n */\nexport function money(money) {\n let currency = Salla.config.currency(money?.currency).symbol;\n money = typeof money === 'object' ? money.amount : money;\n return number(money) + ' ' + currency;\n}","import {digitsOnly, inputDigitsOnly, money, number} from \"./numbers\";\nimport get from \"lodash/get\";\n\n/**\n * To use it, you need some moves:\n * 1- First : you should have global variable:`let my_debounce;`\n * 2- Next : make your own function: `function my_debounce_fn(callback,...data){...}`\n * 3- Next : in your method, check if it's not existed yet, use this helper method to create it: `if(!my_debounce){my_debounce=Salla.helpers.debounce((fn, ...inner_data) => fn(...inner_data), 500)}`\n * 4- Next : then delay the passed callback: `my_debounce(callback, ...data);`\n * 5- Finally : use it: `my_debounce(() =>{...yourRepeatableLogic})`\n * will be something like:\n *\n * ```\n * let my_debounce;\n * function my_debounce_fn(callback,...data){\n * if(!my_debounce){\n * //inline method\n * my_debounce=Salla.helpers.debounce((fn, ...inner_data) => fn(...inner_data), 500);\n * }\n * return my_debounce(callback, ...data);\n * }\n * // use it like:\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 1');\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 2');\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 3');\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 4');\n * //output=> `hello there - 4`\n * ```\n * 😎Or just use Salla appHelpers:`app.debounce((my_data)=>Salla.log(my_data), 'hello there - *')`\n *\n * @param fn\n * @param delay\n * @return {function(...[*]): Promise<unknown>}\n */\nfunction debounce(fn, delay) {\n delay = delay || 100;\n let resolves = [];\n let timer;\n return function (...args) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n let result = fn(...args);\n resolves.forEach((r) => r(result));\n resolves = [];\n }, delay);\n return new Promise((r) => resolves.push(r));\n };\n}\n\n/**\n * Use It When You want to grab data from input names with brackets Ex.\n * <input name=\"products[0][id]\" value...>\n * <input name=\"products[0][name]\" value...>\n * <input name=\"products[1][id]\" value...>\n * <input name=\"products[1][name]\" value...>\n * will be like: {products:[{id:.., name:..},{id:.., name:..}]}\n * @param name\n * @param value\n * @param dataset\n * @return {{name, value}|{name, value: (*|[*, *]|[string, *]|{}|[*])}}\n */\nfunction getInputDataWithName(name, value, dataset = {}) {\n if (name.includes(\"[\")) {\n let nameLevels = name.split(\"]\").join(\"\").split(\"[\");\n return {name: nameLevels[0], value: getLeveledData(nameLevels.slice(1), value, dataset[nameLevels[0]])};\n }\n return {name: name, value: value};\n}\n\n/**\n * in case input name is array for example \"jamal[4655]\" let's fix it\n * This Helper method to get suitable array data, Ex.\n * jamal[]=1\n * jamal[]=2\n * final result will be: {jamal:[1,2]}\n *\n * @param {String[]} nameLevels\n * @param {string|mixed} value\n * @param {{}|undefined} existedData\n * @return {*[]|*|(string|*)[]|{}}\n */\nfunction getLeveledData(nameLevels, value, existedData) {\n let currentName = nameLevels[0];\n\n //it's an array, so add value ass array\n if (existedData && nameLevels.length == 0) {\n if (Array.isArray(existedData)) {\n existedData.push(value);\n return existedData;\n }\n\n //todo::handle in case it's object\n return [existedData, value];\n }\n\n if (Array.isArray(existedData)) {\n existedData.push(value);\n return existedData;\n }\n\n if (typeof existedData === \"string\") {\n return [existedData, value];\n }\n\n //it's nested data\n if (existedData) {\n existedData[currentName] = getLeveledData(nameLevels.slice(1), value, existedData[currentName]);\n return existedData;\n }\n\n if (currentName) {\n return {[currentName]: getLeveledData(nameLevels.slice(1), value)};\n }\n\n //handling \"[]\" without name\n return currentName === \"\" ? [value] : value;\n}\n\n/*\nwindow.onbeforeunload = function (event) {\n Salla.document.event.leaving(event);\n if (!Salla.config.get(\"canLeave\")) {\n event.preventDefault();\n return false;\n }\n};\n*/\nfunction setNested(object, key, value) {\n let schema = object;\n let keys = key.split(\".\");\n let len = keys.length;\n for (let i = 0; i < len - 1; i++) {\n let elem = keys[i];\n if (!schema[elem]) schema[elem] = {};\n schema = schema[elem];\n }\n\n schema[keys[len - 1]] = value;\n return object;\n}\n\nfunction getNested(object, key, default_) {\n let data = get(object, key);\n return data !== undefined ? data : default_;\n}\n\n/**\n * @param {string } url\n * @return string\n */\nfunction url(url) {\n return (\n Salla.config.get(\"store.url\", window.location.href.split(\"/\").slice(0, -1).join(\"/\")).rtrim(\"/\") +\n \"/\" +\n url.ltrim(\"/\")\n );\n}\n\nfunction addParamToUrl(key, value) {\n if (!value || !key) {\n return window.location.href;\n }\n let regex = new RegExp(\"([?&])\" + key + \"=[^&]+[&]?\", \"g\");\n let url = window.location.href.replace(regex, \"$1\").replace(/&$|\\?$/, \"\"); //remove old one\n if (url.includes(\"?\")) {\n url += \"&\";\n } else {\n //avoid cases like this: 'https://my_store.test/ar?test=hi'\n url += (url.endsWith('/') ? \"\" : \"/\") + \"?\";\n }\n\n return (url + key + \"=\" + encodeURIComponent(value)).replace(/&$|\\?$/, \"\");\n}\n\n//this will get it without username if it's salla domain ex: Salla.sa/test will ignore test\nfunction baseUrl(path) {\n return window.location.origin + \"/\" + path.ltrim(\"/\");\n}\n\nfunction asset(path) {\n return baseUrl(\"themes/\" + Salla.config.get(\"theme.name\") + \"/\" + path.ltrim(\"/\"));\n}\n\nfunction cdn(path) {\n return \"https://cdn.salla.network/\" + path.ltrim(\"/\");\n}\n\n/**\n * Return url for api\n * @example Salla.url.api('test') => https://my_store.test/api/v1/test\n * @param path\n * @return {string}\n */\nfunction api(path) {\n return Salla.config.get(\"store.api\", url(\"\")).rtrim(\"/\") + \"/\" + path.ltrim(\"/\");\n}\n\nfunction is_page(pageName) {\n return pageName && Salla.config.get(\"page.slug\") === pageName;\n}\n\n/**\n * @type {{debounce: (function(*, *=): function(...[*]): Promise<unknown>), inputData: ((function(*=, *=, *): ({name, value}|{name, value: (*|*[]|(string|*)[]|{})}))|*), digitsOnly: ((function(*=, *=): (undefined|*))|*)}}\n */\nexport default {\n // Numbers helpers\n digitsOnly : digitsOnly,\n inputDigitsOnly: inputDigitsOnly,\n number : number,\n money : money,\n\n // Nested objects helpers\n setNested: setNested,\n getNested: getNested,\n inputData: getInputDataWithName,\n\n // Url helpers\n url : {\n get : url,\n asset : asset,\n cdn : cdn,\n is_page: is_page,\n api : api,\n },\n addParamToUrl: addParamToUrl,\n\n // other\n debounce: debounce,\n};\n","\"use strict\";\n/**\n * A logger to help us to use Salla.logger.log like console.log\n *\n * @namespace Salla.logger\n *\n * @credits @Ammar Hasan\n * @see https://stackoverflow.com/a/21856736\n *\n */\nexport default (function (c) {\n \"use strict\";\n\n let proxy = {\n log: function (a, type) {\n if (!c) {\n return; /* return or call your custom function here */\n }\n\n if(!salla.config.isDebug()){\n return;\n }\n\n // let's force trace for all logs when the debug is trace level\n if (salla.config.get('debug') === 'trace') {\n type = 'trace';\n }\n\n let colorableTypes={\n event:'#CFF680',\n backend:'#7b68ee'\n };\n\n let l = c.log,\n f = type === undefined ? l : (this.__dict__[type] || l);\n\n let style = ['%cTwilight', 'color: #5cd5c4;font-weight:bold; border:1px solid #5cd5c4; padding: 2px 6px; border-radius: 5px;'];\n let color=colorableTypes[type];\n if (color) {\n style[0] += '%c' + type[0].toUpperCase() + type.substring(1);\n style.push(`margin-left: 5px;color: ${color};font-weight:bold; border:1px solid ${color}; padding: 2px 6px; border-radius: 5px;`)\n }\n\n f.call(c, ...style.concat(...a))\n },\n __dict__: {\n \"trace\": c.trace,\n \"debug\": c.debug,\n \"info\": c.info,\n \"warn\": c.warn,\n \"error\": c.error\n }\n };\n\n return {\n event: function () {\n proxy.log(arguments, \"event\");\n },\n trace: function () {\n proxy.log(arguments, \"trace\");\n },\n debug: function () {\n proxy.log(arguments, \"debug\");\n },\n info: function () {\n proxy.log(arguments, \"info\");\n },\n warn: function () {\n proxy.log(arguments, \"warn\");\n },\n error: function () {\n proxy.log(arguments, \"error\");\n },\n log: function () {\n proxy.log(arguments, undefined);\n },\n //use this to pass messages from backEnd, no need to add documentations, because it will no passed in production\n backend: function () {\n proxy.log(arguments, \"backend\");\n },\n //this for internal usage to pass multi logs using one function, no need to add it to documentation @see \\Salla\\Core\\Traits\\WithStageLogger::debug\n logs:function (logs) {\n [logs].flat().forEach(logData => logData && proxy.log([logData].flat(), 'backend'));\n }\n };\n}(console))\n","import EventEmitter from \"eventemitter2\";\n\n/**\n * @namespace Salla.event\n *\n * @property {string} delimiter\n * @property {array} loggableEvents - log errors or important events.\n */\nexport default class Emitter extends EventEmitter {\n constructor() {\n let delimiter = \"::\";\n super({\n wildcard : true,\n delimiter : delimiter,\n newListener : false,\n removeListener : false,\n maxListeners : 10,\n verboseMemoryLeak: false,\n ignoreErrors : false,\n });\n this.delimiter = delimiter;\n\n if (typeof document !== \"undefined\") {\n this.body = document.querySelector(\"body\");\n }\n\n this.logableEvents = [\"cart::item.added.failed\", \"cart::item.deleted.failed\"];\n this.ingoreLogEvents = [\n \"document::click\",\n \"document::keyup\",\n \"document::change\",\n //'document::submit',\n ];\n\n this.noneFireableActions = [\"document.request\"];\n }\n\n /**\n * @param {string} event_name\n * @param data\n *\n * @deprecated , legacy code, use dispatch() instead\n */\n createAndDispatch(event_name, ...data) {\n this.dispatch(event_name, ...data);\n }\n\n emit(event_name, ...data) {\n /**\n * if the event, is api/event method, call it,\n * ex: cart::quick.add call Salla.api.cart.quickAdd(...data)\n * we don't used Salla.call(actionName)(...data), to avoid losing this scope in our apis.\n *\n * @deprecated don't use it anymore\n */\n let actionName = event_name.replace(\"::\", \".\");\n if (\n !this.noneFireableActions.includes(actionName) &&\n typeof Salla.call !== \"undefined\" &&\n typeof Salla.call(actionName) === \"function\"\n ) {\n Salla.log(`'Salla.${actionName}(...)' triggered using event '${event_name}'`);\n actionName = actionName.split(\".\"); //['cart','addItem']\n salla[actionName[0]][actionName[1]](...data);\n return;\n }\n\n\n super.emit(event_name, ...data);\n\n // let's send the event to data layer\n if (typeof window !== \"undefined\") {\n window.dataLayer = window.dataLayer || [];\n /**\n * data is coming as an array like this:\n * [{\"services\": {\"intercom\": {\"app_id\": \"***\"}}}]\n * we will merge it into one object like this:\n * {event: event_name, \"services\": {\"intercom\": {\"app_id\": \"***\"}}}\n */\n let dataLayerObject = {event: event_name};\n data.map(item => typeof item === 'object' && (dataLayerObject = {...dataLayerObject, ...item}));\n window.dataLayer.push(dataLayerObject);\n }\n\n //if there is need to log errors, or events, lets do it here.\n if (Salla.logger && !this.ingoreLogEvents.includes(event_name)) {\n Salla.logger.event(event_name, ...data);\n }\n\n this.dispatchMobileEvent(event_name, {...data.values()});\n }\n\n /**\n * Fire Event with data\n *\n * @param {string} event_name - action name like `cart::addItem` or event name like `cart::item.added`\n * @param {any|undefined} data\n * @data {{payload}} data\n */\n dispatch(event_name, ...data) {\n return this.emit(event_name, ...data);\n }\n\n /**\n * Fire multi events using object of events\n *\n * @param {Object.<string, *>} events\n */\n dispatchEvents(events) {\n if (!events || typeof events !== \"object\") {\n Salla.log(\"No Events To Dispatch!\", events);\n return;\n }\n\n for (const [event_name, payload] of Object.entries(events)) {\n this.dispatch(event_name, payload);\n }\n }\n\n /**\n * Alias for on function\n *\n * @param {string} eventName\n * @param {function} callback\n * @deprecated use on\n */\n addListener(eventName, callback) {\n return this.on(eventName, callback);\n }\n\n /**\n * Alias for on function\n *\n * @param {string} eventName\n * @param {function} callback\n * @deprecated use on\n */\n addEventListener(eventName, callback) {\n return this.on(eventName, callback);\n }\n\n /**\n * Alias for this.addListener\n * @param {string} eventName\n * @param {function} callback\n */\n listen(eventName, callback) {\n return this.on(eventName, callback);\n }\n\n /**\n * Register Global listener will allow you to track all events in salla,\n * all Salla events will push to it.\n *\n * @param {string} name\n * @param {function} callback\n * @deprecated use onAny\n */\n registerGlobalListener(name, callback) {\n return this.onAny(callback);\n }\n\n /**\n * This help to push an event to mobile app.\n *\n * @param eventName\n * @param details\n * @returns {string}\n */\n dispatchMobileEvent(eventName, details = {}) {\n if (\n typeof window === \"undefined\" ||\n !window.dataLayer ||\n !dataLayer[0] ||\n !dataLayer[0].page ||\n !dataLayer[0].page.mobileApp\n ) {\n return \"\";\n }\n\n if (window.webkit) {\n try {\n window.webkit.messageHandlers.callbackHandler.postMessage(\n JSON.stringify({\n event : eventName,\n details: details,\n })\n );\n } catch (err) {\n Salla.log(err, \"The native context does not exist yet\");\n }\n return;\n }\n\n if (Android) {\n try {\n Android.customEventWithData(eventName, JSON.stringify({details: details}));\n } catch (err) {\n Salla.log(err, \"The native context does not exist yet\");\n }\n }\n }\n}\n","import createStore from \"store/src/store-engine\"\nimport localStorage from \"store/storages/localStorage\"\nimport sessionStorage from \"store/storages/sessionStorage\"\nimport cookieStorage from \"store/storages/cookieStorage\"\nimport memoryStorage from \"store/storages/memoryStorage\"\n\nconst localStore = createStore.createStore([\n localStorage,\n sessionStorage,\n cookieStorage,\n memoryStorage,\n], [])\n\n/**\n * @namespace Salla.storage\n */\nexport default class Storage {\n constructor() {\n Salla.event.on(\"storage::item.remove\", (key) => this.remove(key));\n Salla.event.on(\"storage::item.set\", (key, value) => this.set(key, value));\n this.store = localStore;\n }\n\n set(key, value) {\n if (key.includes(\".\")) {\n let firstKey = key.split(\".\")[0];\n let parentObject = {[firstKey]: this.store.get(firstKey)};\n parentObject = Salla.helpers.setNested(parentObject, key, value);\n return this.store.set(firstKey, parentObject[firstKey]);\n }\n return this.store.set(key, value);\n }\n\n remove(key) {\n return this.store.remove(key);\n }\n\n clearAll() {\n return this.store.clearAll();\n }\n\n get(key, value) {\n if (key.includes(\".\")) {\n let firstKey = key.split(\".\")[0];\n return Salla.helpers.getNested({[firstKey]: this.store.get(firstKey)}, key);\n }\n return this.store.get(key, value);\n }\n}\n","\"use strict\";\n\nif (typeof global === 'undefined') {\n window.salla = window.salla || window.Salla || {};\n window.Salla = window.salla;\n} else {\n global.salla = global.salla || global.Salla || {};\n global.Salla = global.salla;\n}\n\n// loading helpers object and link it to salla\nimport Helpers from \"./helpers\"\nimport Logger from \"./logger\"\nimport Config from \"./config\"\nimport Emitter from \"./event\"\nimport Storage from \"./storage\"\nimport Cookie from \"./cookie\"\n\nSalla.status = 'base';\n// const Salla = {};\nSalla.config = new Config();\nSalla.logger = Logger;\nSalla.event = new Emitter();\n\nSalla.storage = new Storage();\nSalla.cookie = new Cookie();\nSalla.helpers = Helpers;\n\n// alias\nSalla.log = Salla.logger.log;\nSalla.money = Salla.helpers.money;\nSalla.url = Salla.helpers.url;\nSalla.versions = {\n base: '[VI]{version}[/VI]'\n};\n\nexport default Salla","/**\n * @namespace Salla.config\n *\n * @property {any} properties_\n */\nexport default class Config {\n constructor(properties = {}, default_properties = {}) {\n this.default_properties = default_properties;\n this.properties_ = {...this.default_properties, ...properties};\n }\n\n merge(config) {\n Object.assign(this.properties_, config);\n\n this.properties_.store = {...this.default_properties.store, ...this.properties_.store};\n\n return this;\n }\n\n set(key, value) {\n if (key.includes(\".\")) {\n Salla.helpers.setNested(this.properties_, key, value);\n return this;\n }\n this.properties_[key] = value;\n return this;\n }\n\n /**\n * @param {string} key\n * @param {null|any} default_\n * @return {any}\n */\n get(key, default_ = null) {\n if (key.includes(\".\")) {\n return Salla.helpers.getNested(this.properties_, key, default_);\n }\n\n return this.properties_.hasOwnProperty(key) ? this.properties_[key] || default_ : default_ || undefined;\n }\n\n all() {\n return this.properties_;\n }\n\n isDebug() {\n return this.get('debug') || Salla.storage.get('debug');\n }\n}\n","/**\n * @namespace Salla.cookie\n */\nexport default class Cookie {\n constructor() {\n Salla.event.on(\"cookies::remove\", (key) => this.remove(key));\n Salla.event.on(\"cookies::add\", (key, value) => this.set(key, value));\n }\n\n get(key) {\n return document.cookie\n .split(\"; \")\n .find((row) => row.startsWith(key + \"=\"))\n ?.split(\"=\")[1];\n }\n\n set(key, value = \"\", days = 10) {\n let expires = \"\";\n if (days) {\n let date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = \"; expires=\" + date.toUTCString();\n }\n document.cookie = `${key}=${value}${expires}\"; path=/; secure; SameSite=Lax\"`;\n return this;\n }\n\n remove(key) {\n document.cookie = `${key}=; Max-Age=0; path=/;`;\n return this;\n }\n\n clearAll() {\n let cookies = document.cookie.split(\";\");\n\n for (let i = 0; i < cookies.length; i++) {\n let cookie = cookies[i];\n let eqPos = cookie.indexOf(\"=\");\n let name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;\n this.remove(name);\n }\n }\n}\n"],"names":["number","num","isToEnglish","regex","ar","en","find","Salla","config","get","replace","i","length","RegExp","getOnlyDecimal","value","dotsCount","match","getLeveledData","nameLevels","existedData","currentName","Array","isArray","push","slice","url","window","location","href","split","join","rtrim","ltrim","Helpers","digitsOnly","inputDigitsOnly","input","is_decimal","document","querySelectorAll","forEach","el","logger","warn","new_val","helpers","min","max","maxLength","toString","substring","dataset","hasOwnProperty","money","currency","symbol","amount","setNested","object","key","schema","keys","len","elem","getNested","default_","data","undefined","inputData","name","includes","asset","path","origin","baseUrl","cdn","is_page","pageName","api","addParamToUrl","endsWith","encodeURIComponent","debounce","fn","delay","timer","resolves","args","clearTimeout","setTimeout","result","r","Promise","Logger","c","proxy","log","a","type","salla","isDebug","l","f","this","__dict__","style","color","event","backend","toUpperCase","call","concat","trace","debug","info","error","arguments","logs","flat","logData","console","Emitter","EventEmitter","constructor","super","wildcard","delimiter","newListener","removeListener","maxListeners","verboseMemoryLeak","ignoreErrors","body","querySelector","logableEvents","ingoreLogEvents","noneFireableActions","createAndDispatch","event_name","dispatch","emit","actionName","dataLayer","dataLayerObject","map","item","dispatchMobileEvent","values","dispatchEvents","events","payload","Object","entries","addListener","eventName","callback","on","addEventListener","listen","registerGlobalListener","onAny","details","page","mobileApp","webkit","messageHandlers","callbackHandler","postMessage","JSON","stringify","err","Android","customEventWithData","localStore","createStore","localStorage","sessionStorage","cookieStorage","memoryStorage","global","status","properties","default_properties","properties_","merge","assign","store","set","all","storage","remove","firstKey","parentObject","clearAll","cookie","row","startsWith","days","expires","date","Date","setTime","getTime","toUTCString","cookies","eqPos","indexOf","substr","versions","base","Salla$1"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/helpers/numbers.js","../../src/helpers/index.js","../../src/logger.js","../../src/event.js","../../src/storage.js","../../src/index.js","../../src/config.js","../../src/cookie.js"],"sourcesContent":["/**\n * @param num\n * @param {boolean} isToEnglish\n * @return {string}\n */\nexport function number(num, isToEnglish = false) {\n num = num + \"\";//make sure that number will be converted to string;\n isToEnglish = isToEnglish || !Salla.config.get('store.settings.arabic_numbers_enabled');\n let ar = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];\n let en = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n let find = isToEnglish ? ar : en;\n let replace = isToEnglish ? en : ar;\n let regex;\n for (let i = 0; i < find.length; i++) {\n regex = new RegExp(find[i], \"g\");\n num = num.replace(regex, replace[i]);\n }\n return num;\n}\n\n/**\n * when need to get digit's only from string \"Jamal12Hi\" => 12, or \"١٢٣\" => 123\n * @param {string} num\n * @return {string}\n */\nexport function digitsOnly(num) {\n return number(num, true).replace(/[^0-9.]/g, '')\n .replace('..', '.')\n .rtrim('.'); // without this: `Salla.helpers.digitsOnly('١٬٦٠٠ ر.س')` => `1600.`\n}\n\n/**\n * @param {HTMLInputElement|string} input - selector or input object\n * @param {boolean} is_decimal\n * @return {string|*|void}\n */\nexport function inputDigitsOnly(input, is_decimal = false) {\n if (typeof input == 'string') {\n return document.querySelectorAll(input).forEach(el => inputDigitsOnly(el, is_decimal));\n }\n if (!input) {\n Salla.logger.warn('Can\\'t find Object With Id: ' + input);\n return;\n }\n let new_val = Salla.helpers.digitsOnly(input.value);\n\n if (input.min && new_val < input.min) {\n return input.value = input.min;\n }\n if (input.max && new_val > input.max) {\n return input.value = input.max;\n }\n if (input.maxLength >= 1 && new_val.toString().length > input.maxLength) {\n return input.value = new_val.toString().substring(0, input.maxLength);\n }\n\n return input.value = (is_decimal || input.dataset.hasOwnProperty('digitsWithDecimal'))\n ? getOnlyDecimal(new_val)\n : new_val.replace(/\\D/g, '');\n}\n\nexport function getOnlyDecimal(value) {\n let dotsCount = (value.match(/\\./g) || []).length;\n if (!dotsCount || dotsCount === 1) {\n return value;\n }\n\n // if there is more than one dotes, remove the last dot.\n // Ex: 123.545.66 => 123.54566\n return getOnlyDecimal(value.replace(/\\.(.+)\\./g, '.$1'));\n}\n\n/**\n * @param {string|number|{amount: number,currency: string}} money\n * @return string\n */\nexport function money(money) {\n let currency = Salla.config.currency(money?.currency).symbol;\n money = typeof money === 'object' ? money.amount : money;\n return number(money) + ' ' + currency;\n}","import {digitsOnly, inputDigitsOnly, money, number} from \"./numbers\";\nimport get from \"lodash/get\";\n\n/**\n * To use it, you need some moves:\n * 1- First : you should have global variable:`let my_debounce;`\n * 2- Next : make your own function: `function my_debounce_fn(callback,...data){...}`\n * 3- Next : in your method, check if it's not existed yet, use this helper method to create it: `if(!my_debounce){my_debounce=Salla.helpers.debounce((fn, ...inner_data) => fn(...inner_data), 500)}`\n * 4- Next : then delay the passed callback: `my_debounce(callback, ...data);`\n * 5- Finally : use it: `my_debounce(() =>{...yourRepeatableLogic})`\n * will be something like:\n *\n * ```\n * let my_debounce;\n * function my_debounce_fn(callback,...data){\n * if(!my_debounce){\n * //inline method\n * my_debounce=Salla.helpers.debounce((fn, ...inner_data) => fn(...inner_data), 500);\n * }\n * return my_debounce(callback, ...data);\n * }\n * // use it like:\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 1');\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 2');\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 3');\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 4');\n * //output=> `hello there - 4`\n * ```\n * 😎Or just use Salla appHelpers:`app.debounce((my_data)=>Salla.log(my_data), 'hello there - *')`\n *\n * @param fn\n * @param delay\n * @return {function(...[*]): Promise<unknown>}\n */\nfunction debounce(fn, delay) {\n delay = delay || 100;\n let resolves = [];\n let timer;\n return function (...args) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n let result = fn(...args);\n resolves.forEach((r) => r(result));\n resolves = [];\n }, delay);\n return new Promise((r) => resolves.push(r));\n };\n}\n\n/**\n * Use It When You want to grab data from input names with brackets Ex.\n * <input name=\"products[0][id]\" value...>\n * <input name=\"products[0][name]\" value...>\n * <input name=\"products[1][id]\" value...>\n * <input name=\"products[1][name]\" value...>\n * will be like: {products:[{id:.., name:..},{id:.., name:..}]}\n * @param name\n * @param value\n * @param dataset\n * @return {{name, value}|{name, value: (*|[*, *]|[string, *]|{}|[*])}}\n */\nfunction getInputDataWithName(name, value, dataset = {}) {\n if (name.includes(\"[\")) {\n let nameLevels = name.split(\"]\").join(\"\").split(\"[\");\n return {name: nameLevels[0], value: getLeveledData(nameLevels.slice(1), value, dataset[nameLevels[0]])};\n }\n return {name: name, value: value};\n}\n\n/**\n * in case input name is array for example \"jamal[4655]\" let's fix it\n * This Helper method to get suitable array data, Ex.\n * jamal[]=1\n * jamal[]=2\n * final result will be: {jamal:[1,2]}\n *\n * @param {String[]} nameLevels\n * @param {string|mixed} value\n * @param {{}|undefined} existedData\n * @return {*[]|*|(string|*)[]|{}}\n */\nfunction getLeveledData(nameLevels, value, existedData) {\n let currentName = nameLevels[0];\n\n //it's an array, so add value ass array\n if (existedData && nameLevels.length == 0) {\n if (Array.isArray(existedData)) {\n existedData.push(value);\n return existedData;\n }\n\n //todo::handle in case it's object\n return [existedData, value];\n }\n\n if (Array.isArray(existedData)) {\n existedData.push(value);\n return existedData;\n }\n\n if (typeof existedData === \"string\") {\n return [existedData, value];\n }\n\n //it's nested data\n if (existedData) {\n existedData[currentName] = getLeveledData(nameLevels.slice(1), value, existedData[currentName]);\n return existedData;\n }\n\n if (currentName) {\n return {[currentName]: getLeveledData(nameLevels.slice(1), value)};\n }\n\n //handling \"[]\" without name\n return currentName === \"\" ? [value] : value;\n}\n\n/*\nwindow.onbeforeunload = function (event) {\n Salla.document.event.leaving(event);\n if (!Salla.config.get(\"canLeave\")) {\n event.preventDefault();\n return false;\n }\n};\n*/\nfunction setNested(object, key, value) {\n let schema = object;\n let keys = key.split(\".\");\n let len = keys.length;\n for (let i = 0; i < len - 1; i++) {\n let elem = keys[i];\n if (!schema[elem]) schema[elem] = {};\n schema = schema[elem];\n }\n\n schema[keys[len - 1]] = value;\n return object;\n}\n\nfunction getNested(object, key, default_) {\n let data = get(object, key);\n return data !== undefined ? data : default_;\n}\n\n/**\n * @param {string } url\n * @return string\n */\nfunction url(url) {\n return (\n Salla.config.get(\"store.url\", window.location.href.split(\"/\").slice(0, -1).join(\"/\")).rtrim(\"/\") +\n \"/\" +\n url.ltrim(\"/\")\n );\n}\n\nfunction addParamToUrl(key, value) {\n if (!value || !key) {\n return window.location.href;\n }\n let regex = new RegExp(\"([?&])\" + key + \"=[^&]+[&]?\", \"g\");\n let url = window.location.href\n .replace(regex, \"$1\") //remove old one\n .split('#')[0]//remove any hash values ex 'https://my_site.test/brands#brand-section-1'\n .replace(/&$|\\?$/, \"\");// remove the `?` or `&` if it's the last char\n if (url.includes(\"?\")) {\n url += \"&\";\n } else {\n //avoid cases like this: 'https://my_store.test/ar?test=hi'\n url += (url.endsWith('/') ? \"\" : \"/\") + \"?\";\n }\n\n return (url + key + \"=\" + encodeURIComponent(value)).replace(/&$|\\?$/, \"\");\n}\n\n//this will get it without username if it's salla domain ex: Salla.sa/test will ignore test\nfunction baseUrl(path) {\n return window.location.origin + \"/\" + path.ltrim(\"/\");\n}\n\nfunction asset(path) {\n return baseUrl(\"themes/\" + Salla.config.get(\"theme.name\") + \"/\" + path.ltrim(\"/\"));\n}\n\nfunction cdn(path) {\n return \"https://cdn.salla.network/\" + path.ltrim(\"/\");\n}\n\n/**\n * Return url for api\n * @example Salla.url.api('test') => https://my_store.test/api/v1/test\n * @param path\n * @return {string}\n */\nfunction api(path) {\n return Salla.config.get(\"store.api\", url(\"\")).rtrim(\"/\") + \"/\" + path.ltrim(\"/\");\n}\n\nfunction is_page(pageName) {\n return pageName && Salla.config.get(\"page.slug\") === pageName;\n}\n\n/**\n * @type {{debounce: (function(*, *=): function(...[*]): Promise<unknown>), inputData: ((function(*=, *=, *): ({name, value}|{name, value: (*|*[]|(string|*)[]|{})}))|*), digitsOnly: ((function(*=, *=): (undefined|*))|*)}}\n */\nexport default {\n // Numbers helpers\n digitsOnly : digitsOnly,\n inputDigitsOnly: inputDigitsOnly,\n number : number,\n money : money,\n\n // Nested objects helpers\n setNested: setNested,\n getNested: getNested,\n inputData: getInputDataWithName,\n\n // Url helpers\n url : {\n get : url,\n asset : asset,\n cdn : cdn,\n is_page: is_page,\n api : api,\n },\n addParamToUrl: addParamToUrl,\n\n // other\n debounce: debounce,\n};\n","\"use strict\";\n/**\n * A logger to help us to use Salla.logger.log like console.log\n *\n * @namespace Salla.logger\n *\n * @credits @Ammar Hasan\n * @see https://stackoverflow.com/a/21856736\n *\n */\nexport default (function (c) {\n \"use strict\";\n\n let proxy = {\n log: function (a, type) {\n if (!c) {\n return; /* return or call your custom function here */\n }\n\n if(!salla.config.isDebug()){\n return;\n }\n\n // let's force trace for all logs when the debug is trace level\n if (salla.config.get('debug') === 'trace') {\n type = 'trace';\n }\n\n let colorableTypes={\n event:'#CFF680',\n backend:'#7b68ee'\n };\n\n let l = c.log,\n f = type === undefined ? l : (this.__dict__[type] || l);\n\n let style = ['%cTwilight', 'color: #5cd5c4;font-weight:bold; border:1px solid #5cd5c4; padding: 2px 6px; border-radius: 5px;'];\n let color=colorableTypes[type];\n if (color) {\n style[0] += '%c' + type[0].toUpperCase() + type.substring(1);\n style.push(`margin-left: 5px;color: ${color};font-weight:bold; border:1px solid ${color}; padding: 2px 6px; border-radius: 5px;`)\n }\n\n f.call(c, ...style.concat(...a))\n },\n __dict__: {\n \"trace\": c.trace,\n \"debug\": c.debug,\n \"info\": c.info,\n \"warn\": c.warn,\n \"error\": c.error\n }\n };\n\n return {\n event: function () {\n proxy.log(arguments, \"event\");\n },\n trace: function () {\n proxy.log(arguments, \"trace\");\n },\n debug: function () {\n proxy.log(arguments, \"debug\");\n },\n info: function () {\n proxy.log(arguments, \"info\");\n },\n warn: function () {\n proxy.log(arguments, \"warn\");\n },\n error: function () {\n proxy.log(arguments, \"error\");\n },\n log: function () {\n proxy.log(arguments, undefined);\n },\n //use this to pass messages from backEnd, no need to add documentations, because it will no passed in production\n backend: function () {\n proxy.log(arguments, \"backend\");\n },\n //this for internal usage to pass multi logs using one function, no need to add it to documentation @see \\Salla\\Core\\Traits\\WithStageLogger::debug\n logs:function (logs) {\n [logs].flat().forEach(logData => logData && proxy.log([logData].flat(), 'backend'));\n }\n };\n}(console))\n","import EventEmitter from \"eventemitter2\";\n\n/**\n * @namespace Salla.event\n *\n * @property {string} delimiter\n * @property {array} loggableEvents - log errors or important events.\n */\nexport default class Emitter extends EventEmitter {\n constructor() {\n let delimiter = \"::\";\n super({\n wildcard : true,\n delimiter : delimiter,\n newListener : false,\n removeListener : false,\n maxListeners : 10,\n verboseMemoryLeak: false,\n ignoreErrors : false,\n });\n this.delimiter = delimiter;\n\n if (typeof document !== \"undefined\") {\n this.body = document.querySelector(\"body\");\n }\n\n this.logableEvents = [\"cart::item.added.failed\", \"cart::item.deleted.failed\"];\n this.ingoreLogEvents = [\n \"document::click\",\n \"document::keyup\",\n \"document::change\",\n //'document::submit',\n ];\n\n this.noneFireableActions = [\"document.request\"];\n }\n\n /**\n * @param {string} event_name\n * @param data\n *\n * @deprecated , legacy code, use dispatch() instead\n */\n createAndDispatch(event_name, ...data) {\n this.dispatch(event_name, ...data);\n }\n\n emit(event_name, ...data) {\n /**\n * if the event, is api/event method, call it,\n * ex: cart::quick.add call Salla.api.cart.quickAdd(...data)\n * we don't used Salla.call(actionName)(...data), to avoid losing this scope in our apis.\n *\n * @deprecated don't use it anymore\n */\n let actionName = event_name.replace(\"::\", \".\");\n if (\n !this.noneFireableActions.includes(actionName) &&\n typeof Salla.call !== \"undefined\" &&\n typeof Salla.call(actionName) === \"function\"\n ) {\n Salla.log(`'Salla.${actionName}(...)' triggered using event '${event_name}'`);\n actionName = actionName.split(\".\"); //['cart','addItem']\n salla[actionName[0]][actionName[1]](...data);\n return;\n }\n\n\n super.emit(event_name, ...data);\n\n // let's send the event to data layer\n if (typeof window !== \"undefined\") {\n window.dataLayer = window.dataLayer || [];\n /**\n * data is coming as an array like this:\n * [{\"services\": {\"intercom\": {\"app_id\": \"***\"}}}]\n * we will merge it into one object like this:\n * {event: event_name, \"services\": {\"intercom\": {\"app_id\": \"***\"}}}\n */\n let dataLayerObject = {event: event_name};\n data.map(item => typeof item === 'object' && (dataLayerObject = {...dataLayerObject, ...item}));\n window.dataLayer.push(dataLayerObject);\n }\n\n //if there is need to log errors, or events, lets do it here.\n if (Salla.logger && !this.ingoreLogEvents.includes(event_name)) {\n Salla.logger.event(event_name, ...data);\n }\n\n this.dispatchMobileEvent(event_name, {...data.values()});\n }\n\n /**\n * Fire Event with data\n *\n * @param {string} event_name - action name like `cart::addItem` or event name like `cart::item.added`\n * @param {any|undefined} data\n * @data {{payload}} data\n */\n dispatch(event_name, ...data) {\n return this.emit(event_name, ...data);\n }\n\n /**\n * Fire multi events using object of events\n *\n * @param {Object.<string, *>} events\n */\n dispatchEvents(events) {\n if (!events || typeof events !== \"object\") {\n Salla.log(\"No Events To Dispatch!\", events);\n return;\n }\n\n for (const [event_name, payload] of Object.entries(events)) {\n this.dispatch(event_name, payload);\n }\n }\n\n /**\n * Alias for on function\n *\n * @param {string} eventName\n * @param {function} callback\n * @deprecated use on\n */\n addListener(eventName, callback) {\n return this.on(eventName, callback);\n }\n\n /**\n * Alias for on function\n *\n * @param {string} eventName\n * @param {function} callback\n * @deprecated use on\n */\n addEventListener(eventName, callback) {\n return this.on(eventName, callback);\n }\n\n /**\n * Alias for this.addListener\n * @param {string} eventName\n * @param {function} callback\n */\n listen(eventName, callback) {\n return this.on(eventName, callback);\n }\n\n /**\n * Register Global listener will allow you to track all events in salla,\n * all Salla events will push to it.\n *\n * @param {string} name\n * @param {function} callback\n * @deprecated use onAny\n */\n registerGlobalListener(name, callback) {\n return this.onAny(callback);\n }\n\n /**\n * This help to push an event to mobile app.\n *\n * @param eventName\n * @param details\n * @returns {string}\n */\n dispatchMobileEvent(eventName, details = {}) {\n if (\n typeof window === \"undefined\" ||\n !window.dataLayer ||\n !dataLayer[0] ||\n !dataLayer[0].page ||\n !dataLayer[0].page.mobileApp\n ) {\n return \"\";\n }\n\n if (window.webkit) {\n try {\n window.webkit.messageHandlers.callbackHandler.postMessage(\n JSON.stringify({\n event : eventName,\n details: details,\n })\n );\n } catch (err) {\n Salla.log(err, \"The native context does not exist yet\");\n }\n return;\n }\n\n if (Android) {\n try {\n Android.customEventWithData(eventName, JSON.stringify({details: details}));\n } catch (err) {\n Salla.log(err, \"The native context does not exist yet\");\n }\n }\n }\n}\n","import createStore from \"store/src/store-engine\"\nimport localStorage from \"store/storages/localStorage\"\nimport sessionStorage from \"store/storages/sessionStorage\"\nimport cookieStorage from \"store/storages/cookieStorage\"\nimport memoryStorage from \"store/storages/memoryStorage\"\n\nconst localStore = createStore.createStore([\n localStorage,\n sessionStorage,\n cookieStorage,\n memoryStorage,\n], [])\n\n/**\n * @namespace Salla.storage\n */\nexport default class Storage {\n constructor() {\n Salla.event.on(\"storage::item.remove\", (key) => this.remove(key));\n Salla.event.on(\"storage::item.set\", (key, value) => this.set(key, value));\n this.store = localStore;\n }\n\n set(key, value) {\n if (key.includes(\".\")) {\n let firstKey = key.split(\".\")[0];\n let parentObject = {[firstKey]: this.store.get(firstKey)};\n parentObject = Salla.helpers.setNested(parentObject, key, value);\n return this.store.set(firstKey, parentObject[firstKey]);\n }\n return this.store.set(key, value);\n }\n\n remove(key) {\n return this.store.remove(key);\n }\n\n clearAll() {\n return this.store.clearAll();\n }\n\n get(key, value) {\n if (key.includes(\".\")) {\n let firstKey = key.split(\".\")[0];\n return Salla.helpers.getNested({[firstKey]: this.store.get(firstKey)}, key);\n }\n return this.store.get(key, value);\n }\n}\n","\"use strict\";\n\nif (typeof global === 'undefined') {\n window.salla = window.salla || window.Salla || {};\n window.Salla = window.salla;\n} else {\n global.salla = global.salla || global.Salla || {};\n global.Salla = global.salla;\n}\n\n// loading helpers object and link it to salla\nimport Helpers from \"./helpers\"\nimport Logger from \"./logger\"\nimport Config from \"./config\"\nimport Emitter from \"./event\"\nimport Storage from \"./storage\"\nimport Cookie from \"./cookie\"\n\nSalla.status = 'base';\n// const Salla = {};\nSalla.config = new Config();\nSalla.logger = Logger;\nSalla.event = new Emitter();\n\nSalla.storage = new Storage();\nSalla.cookie = new Cookie();\nSalla.helpers = Helpers;\n\n// alias\nSalla.log = Salla.logger.log;\nSalla.money = Salla.helpers.money;\nSalla.url = Salla.helpers.url;\nSalla.versions = {\n base: '[VI]{version}[/VI]'\n};\n\nexport default Salla","/**\n * @namespace Salla.config\n *\n * @property {any} properties_\n */\nexport default class Config {\n constructor(properties = {}, default_properties = {}) {\n this.default_properties = default_properties;\n this.properties_ = {...this.default_properties, ...properties};\n }\n\n merge(config) {\n Object.assign(this.properties_, config);\n\n this.properties_.store = {...this.default_properties.store, ...this.properties_.store};\n\n return this;\n }\n\n set(key, value) {\n if (key.includes(\".\")) {\n Salla.helpers.setNested(this.properties_, key, value);\n return this;\n }\n this.properties_[key] = value;\n return this;\n }\n\n /**\n * @param {string} key\n * @param {null|any} default_\n * @return {any}\n */\n get(key, default_ = null) {\n if (key.includes(\".\")) {\n return Salla.helpers.getNested(this.properties_, key, default_);\n }\n\n return this.properties_.hasOwnProperty(key) ? this.properties_[key] || default_ : default_ || undefined;\n }\n\n all() {\n return this.properties_;\n }\n\n isDebug() {\n return this.get('debug') || Salla.storage.get('debug');\n }\n}\n","/**\n * @namespace Salla.cookie\n */\nexport default class Cookie {\n constructor() {\n Salla.event.on(\"cookies::remove\", (key) => this.remove(key));\n Salla.event.on(\"cookies::add\", (key, value) => this.set(key, value));\n }\n\n get(key) {\n return document.cookie\n .split(\"; \")\n .find((row) => row.startsWith(key + \"=\"))\n ?.split(\"=\")[1];\n }\n\n set(key, value = \"\", days = 10) {\n let expires = \"\";\n if (days) {\n let date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = \"; expires=\" + date.toUTCString();\n }\n document.cookie = `${key}=${value}${expires}\"; path=/; secure; SameSite=Lax\"`;\n return this;\n }\n\n remove(key) {\n document.cookie = `${key}=; Max-Age=0; path=/;`;\n return this;\n }\n\n clearAll() {\n let cookies = document.cookie.split(\";\");\n\n for (let i = 0; i < cookies.length; i++) {\n let cookie = cookies[i];\n let eqPos = cookie.indexOf(\"=\");\n let name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;\n this.remove(name);\n }\n }\n}\n"],"names":["number","num","isToEnglish","regex","ar","en","find","Salla","config","get","replace","i","length","RegExp","getOnlyDecimal","value","dotsCount","match","getLeveledData","nameLevels","existedData","currentName","Array","isArray","push","slice","url","window","location","href","split","join","rtrim","ltrim","Helpers","digitsOnly","inputDigitsOnly","input","is_decimal","document","querySelectorAll","forEach","el","logger","warn","new_val","helpers","min","max","maxLength","toString","substring","dataset","hasOwnProperty","money","currency","symbol","amount","setNested","object","key","schema","keys","len","elem","getNested","default_","data","undefined","inputData","name","includes","asset","path","origin","baseUrl","cdn","is_page","pageName","api","addParamToUrl","endsWith","encodeURIComponent","debounce","fn","delay","timer","resolves","args","clearTimeout","setTimeout","result","r","Promise","Logger","c","proxy","log","a","type","salla","isDebug","l","f","this","__dict__","style","color","event","backend","toUpperCase","call","concat","trace","debug","info","error","arguments","logs","flat","logData","console","Emitter","EventEmitter","constructor","super","wildcard","delimiter","newListener","removeListener","maxListeners","verboseMemoryLeak","ignoreErrors","body","querySelector","logableEvents","ingoreLogEvents","noneFireableActions","createAndDispatch","event_name","dispatch","emit","actionName","dataLayer","dataLayerObject","map","item","dispatchMobileEvent","values","dispatchEvents","events","payload","Object","entries","addListener","eventName","callback","on","addEventListener","listen","registerGlobalListener","onAny","details","page","mobileApp","webkit","messageHandlers","callbackHandler","postMessage","JSON","stringify","err","Android","customEventWithData","localStore","createStore","localStorage","sessionStorage","cookieStorage","memoryStorage","global","status","properties","default_properties","properties_","merge","assign","store","set","all","storage","remove","firstKey","parentObject","clearAll","cookie","row","startsWith","days","expires","date","Date","setTime","getTime","toUTCString","cookies","eqPos","indexOf","substr","versions","base","Salla$1"],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import e from"lodash/get";import t from"eventemitter2";import r from"store/src/store-engine";import o from"store/storages/localStorage";import n from"store/storages/sessionStorage";import i from"store/storages/cookieStorage";import l from"store/storages/memoryStorage";function a(e,t=!1){e+="";let r,o=["٠","١","٢","٣","٤","٥","٦","٧","٨","٩"],n=["0","1","2","3","4","5","6","7","8","9"],i=(t=t||!Salla.config.get("store.settings.arabic_numbers_enabled"))?o:n,l=t?n:o;for(let t=0;t<i.length;t++)r=new RegExp(i[t],"g"),e=e.replace(r,l[t]);return e}function s(e){let t=(e.match(/\./g)||[]).length;return t&&1!==t?s(e.replace(/\.(.+)\./g,".$1")):e}function c(e,t,r){let o=e[0];return r&&0==e.length?Array.isArray(r)?(r.push(t),r):[r,t]:Array.isArray(r)?(r.push(t),r):"string"==typeof r?[r,t]:r?(r[o]=c(e.slice(1),t,r[o]),r):o?{[o]:c(e.slice(1),t)}:""===o?[t]:t}function u(e){return Salla.config.get("store.url",window.location.href.split("/").slice(0,-1).join("/")).rtrim("/")+"/"+e.ltrim("/")}var d={digitsOnly:function(e){return a(e,!0).replace(/[^0-9.]/g,"").replace("..",".").rtrim(".")},inputDigitsOnly:function e(t,r=!1){if("string"==typeof t)return document.querySelectorAll(t).forEach((t=>e(t,r)));if(!t)return void Salla.logger.warn("Can't find Object With Id: "+t);let o=Salla.helpers.digitsOnly(t.value);return t.min&&o<t.min?t.value=t.min:t.max&&o>t.max?t.value=t.max:t.maxLength>=1&&o.toString().length>t.maxLength?t.value=o.toString().substring(0,t.maxLength):t.value=r||t.dataset.hasOwnProperty("digitsWithDecimal")?s(o):o.replace(/\D/g,"")},number:a,money:function(e){let t=Salla.config.currency(e?.currency).symbol;return a(e="object"==typeof e?e.amount:e)+" "+t},setNested:function(e,t,r){let o=e,n=t.split("."),i=n.length;for(let e=0;e<i-1;e++){let t=n[e];o[t]||(o[t]={}),o=o[t]}return o[n[i-1]]=r,e},getNested:function(t,r,o){let n=e(t,r);return void 0!==n?n:o},inputData:function(e,t,r={}){if(e.includes("[")){let o=e.split("]").join("").split("[");return{name:o[0],value:c(o.slice(1),t,r[o[0]])}}return{name:e,value:t}},url:{get:u,asset:function(e){return function(e){return window.location.origin+"/"+e.ltrim("/")}("themes/"+Salla.config.get("theme.name")+"/"+e.ltrim("/"))},cdn:function(e){return"https://cdn.salla.network/"+e.ltrim("/")},is_page:function(e){return e&&Salla.config.get("page.slug")===e},api:function(e){return Salla.config.get("store.api",u("")).rtrim("/")+"/"+e.ltrim("/")}},addParamToUrl:function(e,t){if(!t||!e)return window.location.href;let r=new RegExp("([?&])"+e+"=[^&]+[&]?","g"),o=window.location.href.replace(r,"$1").replace(/&$|\?$/,"");return o.includes("?")?o+="&":o+=(o.endsWith("/")?"":"/")+"?",(o+e+"="+encodeURIComponent(t)).replace(/&$|\?$/,"")},debounce:function(e,t){t=t||100;let r,o=[];return function(...n){return clearTimeout(r),r=setTimeout((()=>{let t=e(...n);o.forEach((e=>e(t))),o=[]}),t),new Promise((e=>o.push(e)))}}},g=function(e){let t={log:function(t,r){if(!e)return;if(!salla.config.isDebug())return;"trace"===salla.config.get("debug")&&(r="trace");let o=e.log,n=void 0===r?o:this.__dict__[r]||o,i=["%cTwilight","color: #5cd5c4;font-weight:bold; border:1px solid #5cd5c4; padding: 2px 6px; border-radius: 5px;"],l={event:"#CFF680",backend:"#7b68ee"}[r];l&&(i[0]+="%c"+r[0].toUpperCase()+r.substring(1),i.push(`margin-left: 5px;color: ${l};font-weight:bold; border:1px solid ${l}; padding: 2px 6px; border-radius: 5px;`)),n.call(e,...i.concat(...t))},__dict__:{trace:e.trace,debug:e.debug,info:e.info,warn:e.warn,error:e.error}};return{event:function(){t.log(arguments,"event")},trace:function(){t.log(arguments,"trace")},debug:function(){t.log(arguments,"debug")},info:function(){t.log(arguments,"info")},warn:function(){t.log(arguments,"warn")},error:function(){t.log(arguments,"error")},log:function(){t.log(arguments,void 0)},backend:function(){t.log(arguments,"backend")},logs:function(e){[e].flat().forEach((e=>e&&t.log([e].flat(),"backend")))}}}(console);const p=r.createStore([o,n,i,l],[]);"undefined"==typeof global?(window.salla=window.salla||window.Salla||{},window.Salla=window.salla):(global.salla=global.salla||global.Salla||{},global.Salla=global.salla),Salla.status="base",Salla.config=new class{constructor(e={},t={}){this.default_properties=t,this.properties_={...this.default_properties,...e}}merge(e){return Object.assign(this.properties_,e),this.properties_.store={...this.default_properties.store,...this.properties_.store},this}set(e,t){return e.includes(".")?(Salla.helpers.setNested(this.properties_,e,t),this):(this.properties_[e]=t,this)}get(e,t=null){return e.includes(".")?Salla.helpers.getNested(this.properties_,e,t):this.properties_.hasOwnProperty(e)?this.properties_[e]||t:t||void 0}all(){return this.properties_}isDebug(){return this.get("debug")||Salla.storage.get("debug")}},Salla.logger=g,Salla.event=new class extends t{constructor(){super({wildcard:!0,delimiter:"::",newListener:!1,removeListener:!1,maxListeners:10,verboseMemoryLeak:!1,ignoreErrors:!1}),this.delimiter="::","undefined"!=typeof document&&(this.body=document.querySelector("body")),this.logableEvents=["cart::item.added.failed","cart::item.deleted.failed"],this.ingoreLogEvents=["document::click","document::keyup","document::change"],this.noneFireableActions=["document.request"]}createAndDispatch(e,...t){this.dispatch(e,...t)}emit(e,...t){let r=e.replace("::",".");if(!this.noneFireableActions.includes(r)&&void 0!==Salla.call&&"function"==typeof Salla.call(r))return Salla.log(`'Salla.${r}(...)' triggered using event '${e}'`),r=r.split("."),void salla[r[0]][r[1]](...t);if(super.emit(e,...t),"undefined"!=typeof window){window.dataLayer=window.dataLayer||[];let r={event:e};t.map((e=>"object"==typeof e&&(r={...r,...e}))),window.dataLayer.push(r)}Salla.logger&&!this.ingoreLogEvents.includes(e)&&Salla.logger.event(e,...t),this.dispatchMobileEvent(e,{...t.values()})}dispatch(e,...t){return this.emit(e,...t)}dispatchEvents(e){if(e&&"object"==typeof e)for(const[t,r]of Object.entries(e))this.dispatch(t,r);else Salla.log("No Events To Dispatch!",e)}addListener(e,t){return this.on(e,t)}addEventListener(e,t){return this.on(e,t)}listen(e,t){return this.on(e,t)}registerGlobalListener(e,t){return this.onAny(t)}dispatchMobileEvent(e,t={}){if(!("undefined"!=typeof window&&window.dataLayer&&dataLayer[0]&&dataLayer[0].page&&dataLayer[0].page.mobileApp))return"";if(window.webkit)try{window.webkit.messageHandlers.callbackHandler.postMessage(JSON.stringify({event:e,details:t}))}catch(e){Salla.log(e,"The native context does not exist yet")}else if(Android)try{Android.customEventWithData(e,JSON.stringify({details:t}))}catch(e){Salla.log(e,"The native context does not exist yet")}}},Salla.storage=new class{constructor(){Salla.event.on("storage::item.remove",(e=>this.remove(e))),Salla.event.on("storage::item.set",((e,t)=>this.set(e,t))),this.store=p}set(e,t){if(e.includes(".")){let r=e.split(".")[0],o={[r]:this.store.get(r)};return o=Salla.helpers.setNested(o,e,t),this.store.set(r,o[r])}return this.store.set(e,t)}remove(e){return this.store.remove(e)}clearAll(){return this.store.clearAll()}get(e,t){if(e.includes(".")){let t=e.split(".")[0];return Salla.helpers.getNested({[t]:this.store.get(t)},e)}return this.store.get(e,t)}},Salla.cookie=new class{constructor(){Salla.event.on("cookies::remove",(e=>this.remove(e))),Salla.event.on("cookies::add",((e,t)=>this.set(e,t)))}get(e){return document.cookie.split("; ").find((t=>t.startsWith(e+"=")))?.split("=")[1]}set(e,t="",r=10){let o="";if(r){let e=new Date;e.setTime(e.getTime()+24*r*60*60*1e3),o="; expires="+e.toUTCString()}return document.cookie=`${e}=${t}${o}"; path=/; secure; SameSite=Lax"`,this}remove(e){return document.cookie=`${e}=; Max-Age=0; path=/;`,this}clearAll(){let e=document.cookie.split(";");for(let t=0;t<e.length;t++){let r=e[t],o=r.indexOf("="),n=o>-1?r.substr(0,o):r;this.remove(n)}}},Salla.helpers=d,Salla.log=Salla.logger.log,Salla.money=Salla.helpers.money,Salla.url=Salla.helpers.url,Salla.versions={base:"[VI]{version}[/VI]"};var f=Salla;export{f as default};
1
+ import e from"lodash/get";import t from"eventemitter2";import r from"store/src/store-engine";import o from"store/storages/localStorage";import i from"store/storages/sessionStorage";import n from"store/storages/cookieStorage";import l from"store/storages/memoryStorage";function a(e,t=!1){e+="";let r,o=["٠","١","٢","٣","٤","٥","٦","٧","٨","٩"],i=["0","1","2","3","4","5","6","7","8","9"],n=(t=t||!Salla.config.get("store.settings.arabic_numbers_enabled"))?o:i,l=t?i:o;for(let t=0;t<n.length;t++)r=new RegExp(n[t],"g"),e=e.replace(r,l[t]);return e}function s(e){let t=(e.match(/\./g)||[]).length;return t&&1!==t?s(e.replace(/\.(.+)\./g,".$1")):e}function c(e,t,r){let o=e[0];return r&&0==e.length?Array.isArray(r)?(r.push(t),r):[r,t]:Array.isArray(r)?(r.push(t),r):"string"==typeof r?[r,t]:r?(r[o]=c(e.slice(1),t,r[o]),r):o?{[o]:c(e.slice(1),t)}:""===o?[t]:t}function u(e){return Salla.config.get("store.url",window.location.href.split("/").slice(0,-1).join("/")).rtrim("/")+"/"+e.ltrim("/")}var d={digitsOnly:function(e){return a(e,!0).replace(/[^0-9.]/g,"").replace("..",".").rtrim(".")},inputDigitsOnly:function e(t,r=!1){if("string"==typeof t)return document.querySelectorAll(t).forEach((t=>e(t,r)));if(!t)return void Salla.logger.warn("Can't find Object With Id: "+t);let o=Salla.helpers.digitsOnly(t.value);return t.min&&o<t.min?t.value=t.min:t.max&&o>t.max?t.value=t.max:t.maxLength>=1&&o.toString().length>t.maxLength?t.value=o.toString().substring(0,t.maxLength):t.value=r||t.dataset.hasOwnProperty("digitsWithDecimal")?s(o):o.replace(/\D/g,"")},number:a,money:function(e){let t=Salla.config.currency(e?.currency).symbol;return a(e="object"==typeof e?e.amount:e)+" "+t},setNested:function(e,t,r){let o=e,i=t.split("."),n=i.length;for(let e=0;e<n-1;e++){let t=i[e];o[t]||(o[t]={}),o=o[t]}return o[i[n-1]]=r,e},getNested:function(t,r,o){let i=e(t,r);return void 0!==i?i:o},inputData:function(e,t,r={}){if(e.includes("[")){let o=e.split("]").join("").split("[");return{name:o[0],value:c(o.slice(1),t,r[o[0]])}}return{name:e,value:t}},url:{get:u,asset:function(e){return function(e){return window.location.origin+"/"+e.ltrim("/")}("themes/"+Salla.config.get("theme.name")+"/"+e.ltrim("/"))},cdn:function(e){return"https://cdn.salla.network/"+e.ltrim("/")},is_page:function(e){return e&&Salla.config.get("page.slug")===e},api:function(e){return Salla.config.get("store.api",u("")).rtrim("/")+"/"+e.ltrim("/")}},addParamToUrl:function(e,t){if(!t||!e)return window.location.href;let r=new RegExp("([?&])"+e+"=[^&]+[&]?","g"),o=window.location.href.replace(r,"$1").split("#")[0].replace(/&$|\?$/,"");return o.includes("?")?o+="&":o+=(o.endsWith("/")?"":"/")+"?",(o+e+"="+encodeURIComponent(t)).replace(/&$|\?$/,"")},debounce:function(e,t){t=t||100;let r,o=[];return function(...i){return clearTimeout(r),r=setTimeout((()=>{let t=e(...i);o.forEach((e=>e(t))),o=[]}),t),new Promise((e=>o.push(e)))}}},g=function(e){let t={log:function(t,r){if(!e)return;if(!salla.config.isDebug())return;"trace"===salla.config.get("debug")&&(r="trace");let o=e.log,i=void 0===r?o:this.__dict__[r]||o,n=["%cTwilight","color: #5cd5c4;font-weight:bold; border:1px solid #5cd5c4; padding: 2px 6px; border-radius: 5px;"],l={event:"#CFF680",backend:"#7b68ee"}[r];l&&(n[0]+="%c"+r[0].toUpperCase()+r.substring(1),n.push(`margin-left: 5px;color: ${l};font-weight:bold; border:1px solid ${l}; padding: 2px 6px; border-radius: 5px;`)),i.call(e,...n.concat(...t))},__dict__:{trace:e.trace,debug:e.debug,info:e.info,warn:e.warn,error:e.error}};return{event:function(){t.log(arguments,"event")},trace:function(){t.log(arguments,"trace")},debug:function(){t.log(arguments,"debug")},info:function(){t.log(arguments,"info")},warn:function(){t.log(arguments,"warn")},error:function(){t.log(arguments,"error")},log:function(){t.log(arguments,void 0)},backend:function(){t.log(arguments,"backend")},logs:function(e){[e].flat().forEach((e=>e&&t.log([e].flat(),"backend")))}}}(console);const p=r.createStore([o,i,n,l],[]);"undefined"==typeof global?(window.salla=window.salla||window.Salla||{},window.Salla=window.salla):(global.salla=global.salla||global.Salla||{},global.Salla=global.salla),Salla.status="base",Salla.config=new class{constructor(e={},t={}){this.default_properties=t,this.properties_={...this.default_properties,...e}}merge(e){return Object.assign(this.properties_,e),this.properties_.store={...this.default_properties.store,...this.properties_.store},this}set(e,t){return e.includes(".")?(Salla.helpers.setNested(this.properties_,e,t),this):(this.properties_[e]=t,this)}get(e,t=null){return e.includes(".")?Salla.helpers.getNested(this.properties_,e,t):this.properties_.hasOwnProperty(e)?this.properties_[e]||t:t||void 0}all(){return this.properties_}isDebug(){return this.get("debug")||Salla.storage.get("debug")}},Salla.logger=g,Salla.event=new class extends t{constructor(){super({wildcard:!0,delimiter:"::",newListener:!1,removeListener:!1,maxListeners:10,verboseMemoryLeak:!1,ignoreErrors:!1}),this.delimiter="::","undefined"!=typeof document&&(this.body=document.querySelector("body")),this.logableEvents=["cart::item.added.failed","cart::item.deleted.failed"],this.ingoreLogEvents=["document::click","document::keyup","document::change"],this.noneFireableActions=["document.request"]}createAndDispatch(e,...t){this.dispatch(e,...t)}emit(e,...t){let r=e.replace("::",".");if(!this.noneFireableActions.includes(r)&&void 0!==Salla.call&&"function"==typeof Salla.call(r))return Salla.log(`'Salla.${r}(...)' triggered using event '${e}'`),r=r.split("."),void salla[r[0]][r[1]](...t);if(super.emit(e,...t),"undefined"!=typeof window){window.dataLayer=window.dataLayer||[];let r={event:e};t.map((e=>"object"==typeof e&&(r={...r,...e}))),window.dataLayer.push(r)}Salla.logger&&!this.ingoreLogEvents.includes(e)&&Salla.logger.event(e,...t),this.dispatchMobileEvent(e,{...t.values()})}dispatch(e,...t){return this.emit(e,...t)}dispatchEvents(e){if(e&&"object"==typeof e)for(const[t,r]of Object.entries(e))this.dispatch(t,r);else Salla.log("No Events To Dispatch!",e)}addListener(e,t){return this.on(e,t)}addEventListener(e,t){return this.on(e,t)}listen(e,t){return this.on(e,t)}registerGlobalListener(e,t){return this.onAny(t)}dispatchMobileEvent(e,t={}){if(!("undefined"!=typeof window&&window.dataLayer&&dataLayer[0]&&dataLayer[0].page&&dataLayer[0].page.mobileApp))return"";if(window.webkit)try{window.webkit.messageHandlers.callbackHandler.postMessage(JSON.stringify({event:e,details:t}))}catch(e){Salla.log(e,"The native context does not exist yet")}else if(Android)try{Android.customEventWithData(e,JSON.stringify({details:t}))}catch(e){Salla.log(e,"The native context does not exist yet")}}},Salla.storage=new class{constructor(){Salla.event.on("storage::item.remove",(e=>this.remove(e))),Salla.event.on("storage::item.set",((e,t)=>this.set(e,t))),this.store=p}set(e,t){if(e.includes(".")){let r=e.split(".")[0],o={[r]:this.store.get(r)};return o=Salla.helpers.setNested(o,e,t),this.store.set(r,o[r])}return this.store.set(e,t)}remove(e){return this.store.remove(e)}clearAll(){return this.store.clearAll()}get(e,t){if(e.includes(".")){let t=e.split(".")[0];return Salla.helpers.getNested({[t]:this.store.get(t)},e)}return this.store.get(e,t)}},Salla.cookie=new class{constructor(){Salla.event.on("cookies::remove",(e=>this.remove(e))),Salla.event.on("cookies::add",((e,t)=>this.set(e,t)))}get(e){return document.cookie.split("; ").find((t=>t.startsWith(e+"=")))?.split("=")[1]}set(e,t="",r=10){let o="";if(r){let e=new Date;e.setTime(e.getTime()+24*r*60*60*1e3),o="; expires="+e.toUTCString()}return document.cookie=`${e}=${t}${o}"; path=/; secure; SameSite=Lax"`,this}remove(e){return document.cookie=`${e}=; Max-Age=0; path=/;`,this}clearAll(){let e=document.cookie.split(";");for(let t=0;t<e.length;t++){let r=e[t],o=r.indexOf("="),i=o>-1?r.substr(0,o):r;this.remove(i)}}},Salla.helpers=d,Salla.log=Salla.logger.log,Salla.money=Salla.helpers.money,Salla.url=Salla.helpers.url,Salla.versions={base:"[VI]{version}[/VI]"};var f=Salla;export{f as default};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/helpers/numbers.js","../../src/helpers/index.js","../../src/logger.js","../../src/storage.js","../../src/index.js","../../src/config.js","../../src/event.js","../../src/cookie.js"],"sourcesContent":["/**\n * @param num\n * @param {boolean} isToEnglish\n * @return {string}\n */\nexport function number(num, isToEnglish = false) {\n num = num + \"\";//make sure that number will be converted to string;\n isToEnglish = isToEnglish || !Salla.config.get('store.settings.arabic_numbers_enabled');\n let ar = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];\n let en = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n let find = isToEnglish ? ar : en;\n let replace = isToEnglish ? en : ar;\n let regex;\n for (let i = 0; i < find.length; i++) {\n regex = new RegExp(find[i], \"g\");\n num = num.replace(regex, replace[i]);\n }\n return num;\n}\n\n/**\n * when need to get digit's only from string \"Jamal12Hi\" => 12, or \"١٢٣\" => 123\n * @param {string} num\n * @return {string}\n */\nexport function digitsOnly(num) {\n return number(num, true).replace(/[^0-9.]/g, '')\n .replace('..', '.')\n .rtrim('.'); // without this: `Salla.helpers.digitsOnly('١٬٦٠٠ ر.س')` => `1600.`\n}\n\n/**\n * @param {HTMLInputElement|string} input - selector or input object\n * @param {boolean} is_decimal\n * @return {string|*|void}\n */\nexport function inputDigitsOnly(input, is_decimal = false) {\n if (typeof input == 'string') {\n return document.querySelectorAll(input).forEach(el => inputDigitsOnly(el, is_decimal));\n }\n if (!input) {\n Salla.logger.warn('Can\\'t find Object With Id: ' + input);\n return;\n }\n let new_val = Salla.helpers.digitsOnly(input.value);\n\n if (input.min && new_val < input.min) {\n return input.value = input.min;\n }\n if (input.max && new_val > input.max) {\n return input.value = input.max;\n }\n if (input.maxLength >= 1 && new_val.toString().length > input.maxLength) {\n return input.value = new_val.toString().substring(0, input.maxLength);\n }\n\n return input.value = (is_decimal || input.dataset.hasOwnProperty('digitsWithDecimal'))\n ? getOnlyDecimal(new_val)\n : new_val.replace(/\\D/g, '');\n}\n\nexport function getOnlyDecimal(value) {\n let dotsCount = (value.match(/\\./g) || []).length;\n if (!dotsCount || dotsCount === 1) {\n return value;\n }\n\n // if there is more than one dotes, remove the last dot.\n // Ex: 123.545.66 => 123.54566\n return getOnlyDecimal(value.replace(/\\.(.+)\\./g, '.$1'));\n}\n\n/**\n * @param {string|number|{amount: number,currency: string}} money\n * @return string\n */\nexport function money(money) {\n let currency = Salla.config.currency(money?.currency).symbol;\n money = typeof money === 'object' ? money.amount : money;\n return number(money) + ' ' + currency;\n}","import {digitsOnly, inputDigitsOnly, money, number} from \"./numbers\";\nimport get from \"lodash/get\";\n\n/**\n * To use it, you need some moves:\n * 1- First : you should have global variable:`let my_debounce;`\n * 2- Next : make your own function: `function my_debounce_fn(callback,...data){...}`\n * 3- Next : in your method, check if it's not existed yet, use this helper method to create it: `if(!my_debounce){my_debounce=Salla.helpers.debounce((fn, ...inner_data) => fn(...inner_data), 500)}`\n * 4- Next : then delay the passed callback: `my_debounce(callback, ...data);`\n * 5- Finally : use it: `my_debounce(() =>{...yourRepeatableLogic})`\n * will be something like:\n *\n * ```\n * let my_debounce;\n * function my_debounce_fn(callback,...data){\n * if(!my_debounce){\n * //inline method\n * my_debounce=Salla.helpers.debounce((fn, ...inner_data) => fn(...inner_data), 500);\n * }\n * return my_debounce(callback, ...data);\n * }\n * // use it like:\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 1');\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 2');\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 3');\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 4');\n * //output=> `hello there - 4`\n * ```\n * 😎Or just use Salla appHelpers:`app.debounce((my_data)=>Salla.log(my_data), 'hello there - *')`\n *\n * @param fn\n * @param delay\n * @return {function(...[*]): Promise<unknown>}\n */\nfunction debounce(fn, delay) {\n delay = delay || 100;\n let resolves = [];\n let timer;\n return function (...args) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n let result = fn(...args);\n resolves.forEach((r) => r(result));\n resolves = [];\n }, delay);\n return new Promise((r) => resolves.push(r));\n };\n}\n\n/**\n * Use It When You want to grab data from input names with brackets Ex.\n * <input name=\"products[0][id]\" value...>\n * <input name=\"products[0][name]\" value...>\n * <input name=\"products[1][id]\" value...>\n * <input name=\"products[1][name]\" value...>\n * will be like: {products:[{id:.., name:..},{id:.., name:..}]}\n * @param name\n * @param value\n * @param dataset\n * @return {{name, value}|{name, value: (*|[*, *]|[string, *]|{}|[*])}}\n */\nfunction getInputDataWithName(name, value, dataset = {}) {\n if (name.includes(\"[\")) {\n let nameLevels = name.split(\"]\").join(\"\").split(\"[\");\n return {name: nameLevels[0], value: getLeveledData(nameLevels.slice(1), value, dataset[nameLevels[0]])};\n }\n return {name: name, value: value};\n}\n\n/**\n * in case input name is array for example \"jamal[4655]\" let's fix it\n * This Helper method to get suitable array data, Ex.\n * jamal[]=1\n * jamal[]=2\n * final result will be: {jamal:[1,2]}\n *\n * @param {String[]} nameLevels\n * @param {string|mixed} value\n * @param {{}|undefined} existedData\n * @return {*[]|*|(string|*)[]|{}}\n */\nfunction getLeveledData(nameLevels, value, existedData) {\n let currentName = nameLevels[0];\n\n //it's an array, so add value ass array\n if (existedData && nameLevels.length == 0) {\n if (Array.isArray(existedData)) {\n existedData.push(value);\n return existedData;\n }\n\n //todo::handle in case it's object\n return [existedData, value];\n }\n\n if (Array.isArray(existedData)) {\n existedData.push(value);\n return existedData;\n }\n\n if (typeof existedData === \"string\") {\n return [existedData, value];\n }\n\n //it's nested data\n if (existedData) {\n existedData[currentName] = getLeveledData(nameLevels.slice(1), value, existedData[currentName]);\n return existedData;\n }\n\n if (currentName) {\n return {[currentName]: getLeveledData(nameLevels.slice(1), value)};\n }\n\n //handling \"[]\" without name\n return currentName === \"\" ? [value] : value;\n}\n\n/*\nwindow.onbeforeunload = function (event) {\n Salla.document.event.leaving(event);\n if (!Salla.config.get(\"canLeave\")) {\n event.preventDefault();\n return false;\n }\n};\n*/\nfunction setNested(object, key, value) {\n let schema = object;\n let keys = key.split(\".\");\n let len = keys.length;\n for (let i = 0; i < len - 1; i++) {\n let elem = keys[i];\n if (!schema[elem]) schema[elem] = {};\n schema = schema[elem];\n }\n\n schema[keys[len - 1]] = value;\n return object;\n}\n\nfunction getNested(object, key, default_) {\n let data = get(object, key);\n return data !== undefined ? data : default_;\n}\n\n/**\n * @param {string } url\n * @return string\n */\nfunction url(url) {\n return (\n Salla.config.get(\"store.url\", window.location.href.split(\"/\").slice(0, -1).join(\"/\")).rtrim(\"/\") +\n \"/\" +\n url.ltrim(\"/\")\n );\n}\n\nfunction addParamToUrl(key, value) {\n if (!value || !key) {\n return window.location.href;\n }\n let regex = new RegExp(\"([?&])\" + key + \"=[^&]+[&]?\", \"g\");\n let url = window.location.href.replace(regex, \"$1\").replace(/&$|\\?$/, \"\"); //remove old one\n if (url.includes(\"?\")) {\n url += \"&\";\n } else {\n //avoid cases like this: 'https://my_store.test/ar?test=hi'\n url += (url.endsWith('/') ? \"\" : \"/\") + \"?\";\n }\n\n return (url + key + \"=\" + encodeURIComponent(value)).replace(/&$|\\?$/, \"\");\n}\n\n//this will get it without username if it's salla domain ex: Salla.sa/test will ignore test\nfunction baseUrl(path) {\n return window.location.origin + \"/\" + path.ltrim(\"/\");\n}\n\nfunction asset(path) {\n return baseUrl(\"themes/\" + Salla.config.get(\"theme.name\") + \"/\" + path.ltrim(\"/\"));\n}\n\nfunction cdn(path) {\n return \"https://cdn.salla.network/\" + path.ltrim(\"/\");\n}\n\n/**\n * Return url for api\n * @example Salla.url.api('test') => https://my_store.test/api/v1/test\n * @param path\n * @return {string}\n */\nfunction api(path) {\n return Salla.config.get(\"store.api\", url(\"\")).rtrim(\"/\") + \"/\" + path.ltrim(\"/\");\n}\n\nfunction is_page(pageName) {\n return pageName && Salla.config.get(\"page.slug\") === pageName;\n}\n\n/**\n * @type {{debounce: (function(*, *=): function(...[*]): Promise<unknown>), inputData: ((function(*=, *=, *): ({name, value}|{name, value: (*|*[]|(string|*)[]|{})}))|*), digitsOnly: ((function(*=, *=): (undefined|*))|*)}}\n */\nexport default {\n // Numbers helpers\n digitsOnly : digitsOnly,\n inputDigitsOnly: inputDigitsOnly,\n number : number,\n money : money,\n\n // Nested objects helpers\n setNested: setNested,\n getNested: getNested,\n inputData: getInputDataWithName,\n\n // Url helpers\n url : {\n get : url,\n asset : asset,\n cdn : cdn,\n is_page: is_page,\n api : api,\n },\n addParamToUrl: addParamToUrl,\n\n // other\n debounce: debounce,\n};\n","\"use strict\";\n/**\n * A logger to help us to use Salla.logger.log like console.log\n *\n * @namespace Salla.logger\n *\n * @credits @Ammar Hasan\n * @see https://stackoverflow.com/a/21856736\n *\n */\nexport default (function (c) {\n \"use strict\";\n\n let proxy = {\n log: function (a, type) {\n if (!c) {\n return; /* return or call your custom function here */\n }\n\n if(!salla.config.isDebug()){\n return;\n }\n\n // let's force trace for all logs when the debug is trace level\n if (salla.config.get('debug') === 'trace') {\n type = 'trace';\n }\n\n let colorableTypes={\n event:'#CFF680',\n backend:'#7b68ee'\n };\n\n let l = c.log,\n f = type === undefined ? l : (this.__dict__[type] || l);\n\n let style = ['%cTwilight', 'color: #5cd5c4;font-weight:bold; border:1px solid #5cd5c4; padding: 2px 6px; border-radius: 5px;'];\n let color=colorableTypes[type];\n if (color) {\n style[0] += '%c' + type[0].toUpperCase() + type.substring(1);\n style.push(`margin-left: 5px;color: ${color};font-weight:bold; border:1px solid ${color}; padding: 2px 6px; border-radius: 5px;`)\n }\n\n f.call(c, ...style.concat(...a))\n },\n __dict__: {\n \"trace\": c.trace,\n \"debug\": c.debug,\n \"info\": c.info,\n \"warn\": c.warn,\n \"error\": c.error\n }\n };\n\n return {\n event: function () {\n proxy.log(arguments, \"event\");\n },\n trace: function () {\n proxy.log(arguments, \"trace\");\n },\n debug: function () {\n proxy.log(arguments, \"debug\");\n },\n info: function () {\n proxy.log(arguments, \"info\");\n },\n warn: function () {\n proxy.log(arguments, \"warn\");\n },\n error: function () {\n proxy.log(arguments, \"error\");\n },\n log: function () {\n proxy.log(arguments, undefined);\n },\n //use this to pass messages from backEnd, no need to add documentations, because it will no passed in production\n backend: function () {\n proxy.log(arguments, \"backend\");\n },\n //this for internal usage to pass multi logs using one function, no need to add it to documentation @see \\Salla\\Core\\Traits\\WithStageLogger::debug\n logs:function (logs) {\n [logs].flat().forEach(logData => logData && proxy.log([logData].flat(), 'backend'));\n }\n };\n}(console))\n","import createStore from \"store/src/store-engine\"\nimport localStorage from \"store/storages/localStorage\"\nimport sessionStorage from \"store/storages/sessionStorage\"\nimport cookieStorage from \"store/storages/cookieStorage\"\nimport memoryStorage from \"store/storages/memoryStorage\"\n\nconst localStore = createStore.createStore([\n localStorage,\n sessionStorage,\n cookieStorage,\n memoryStorage,\n], [])\n\n/**\n * @namespace Salla.storage\n */\nexport default class Storage {\n constructor() {\n Salla.event.on(\"storage::item.remove\", (key) => this.remove(key));\n Salla.event.on(\"storage::item.set\", (key, value) => this.set(key, value));\n this.store = localStore;\n }\n\n set(key, value) {\n if (key.includes(\".\")) {\n let firstKey = key.split(\".\")[0];\n let parentObject = {[firstKey]: this.store.get(firstKey)};\n parentObject = Salla.helpers.setNested(parentObject, key, value);\n return this.store.set(firstKey, parentObject[firstKey]);\n }\n return this.store.set(key, value);\n }\n\n remove(key) {\n return this.store.remove(key);\n }\n\n clearAll() {\n return this.store.clearAll();\n }\n\n get(key, value) {\n if (key.includes(\".\")) {\n let firstKey = key.split(\".\")[0];\n return Salla.helpers.getNested({[firstKey]: this.store.get(firstKey)}, key);\n }\n return this.store.get(key, value);\n }\n}\n","\"use strict\";\n\nif (typeof global === 'undefined') {\n window.salla = window.salla || window.Salla || {};\n window.Salla = window.salla;\n} else {\n global.salla = global.salla || global.Salla || {};\n global.Salla = global.salla;\n}\n\n// loading helpers object and link it to salla\nimport Helpers from \"./helpers\"\nimport Logger from \"./logger\"\nimport Config from \"./config\"\nimport Emitter from \"./event\"\nimport Storage from \"./storage\"\nimport Cookie from \"./cookie\"\n\nSalla.status = 'base';\n// const Salla = {};\nSalla.config = new Config();\nSalla.logger = Logger;\nSalla.event = new Emitter();\n\nSalla.storage = new Storage();\nSalla.cookie = new Cookie();\nSalla.helpers = Helpers;\n\n// alias\nSalla.log = Salla.logger.log;\nSalla.money = Salla.helpers.money;\nSalla.url = Salla.helpers.url;\nSalla.versions = {\n base: '[VI]{version}[/VI]'\n};\n\nexport default Salla","/**\n * @namespace Salla.config\n *\n * @property {any} properties_\n */\nexport default class Config {\n constructor(properties = {}, default_properties = {}) {\n this.default_properties = default_properties;\n this.properties_ = {...this.default_properties, ...properties};\n }\n\n merge(config) {\n Object.assign(this.properties_, config);\n\n this.properties_.store = {...this.default_properties.store, ...this.properties_.store};\n\n return this;\n }\n\n set(key, value) {\n if (key.includes(\".\")) {\n Salla.helpers.setNested(this.properties_, key, value);\n return this;\n }\n this.properties_[key] = value;\n return this;\n }\n\n /**\n * @param {string} key\n * @param {null|any} default_\n * @return {any}\n */\n get(key, default_ = null) {\n if (key.includes(\".\")) {\n return Salla.helpers.getNested(this.properties_, key, default_);\n }\n\n return this.properties_.hasOwnProperty(key) ? this.properties_[key] || default_ : default_ || undefined;\n }\n\n all() {\n return this.properties_;\n }\n\n isDebug() {\n return this.get('debug') || Salla.storage.get('debug');\n }\n}\n","import EventEmitter from \"eventemitter2\";\n\n/**\n * @namespace Salla.event\n *\n * @property {string} delimiter\n * @property {array} loggableEvents - log errors or important events.\n */\nexport default class Emitter extends EventEmitter {\n constructor() {\n let delimiter = \"::\";\n super({\n wildcard : true,\n delimiter : delimiter,\n newListener : false,\n removeListener : false,\n maxListeners : 10,\n verboseMemoryLeak: false,\n ignoreErrors : false,\n });\n this.delimiter = delimiter;\n\n if (typeof document !== \"undefined\") {\n this.body = document.querySelector(\"body\");\n }\n\n this.logableEvents = [\"cart::item.added.failed\", \"cart::item.deleted.failed\"];\n this.ingoreLogEvents = [\n \"document::click\",\n \"document::keyup\",\n \"document::change\",\n //'document::submit',\n ];\n\n this.noneFireableActions = [\"document.request\"];\n }\n\n /**\n * @param {string} event_name\n * @param data\n *\n * @deprecated , legacy code, use dispatch() instead\n */\n createAndDispatch(event_name, ...data) {\n this.dispatch(event_name, ...data);\n }\n\n emit(event_name, ...data) {\n /**\n * if the event, is api/event method, call it,\n * ex: cart::quick.add call Salla.api.cart.quickAdd(...data)\n * we don't used Salla.call(actionName)(...data), to avoid losing this scope in our apis.\n *\n * @deprecated don't use it anymore\n */\n let actionName = event_name.replace(\"::\", \".\");\n if (\n !this.noneFireableActions.includes(actionName) &&\n typeof Salla.call !== \"undefined\" &&\n typeof Salla.call(actionName) === \"function\"\n ) {\n Salla.log(`'Salla.${actionName}(...)' triggered using event '${event_name}'`);\n actionName = actionName.split(\".\"); //['cart','addItem']\n salla[actionName[0]][actionName[1]](...data);\n return;\n }\n\n\n super.emit(event_name, ...data);\n\n // let's send the event to data layer\n if (typeof window !== \"undefined\") {\n window.dataLayer = window.dataLayer || [];\n /**\n * data is coming as an array like this:\n * [{\"services\": {\"intercom\": {\"app_id\": \"***\"}}}]\n * we will merge it into one object like this:\n * {event: event_name, \"services\": {\"intercom\": {\"app_id\": \"***\"}}}\n */\n let dataLayerObject = {event: event_name};\n data.map(item => typeof item === 'object' && (dataLayerObject = {...dataLayerObject, ...item}));\n window.dataLayer.push(dataLayerObject);\n }\n\n //if there is need to log errors, or events, lets do it here.\n if (Salla.logger && !this.ingoreLogEvents.includes(event_name)) {\n Salla.logger.event(event_name, ...data);\n }\n\n this.dispatchMobileEvent(event_name, {...data.values()});\n }\n\n /**\n * Fire Event with data\n *\n * @param {string} event_name - action name like `cart::addItem` or event name like `cart::item.added`\n * @param {any|undefined} data\n * @data {{payload}} data\n */\n dispatch(event_name, ...data) {\n return this.emit(event_name, ...data);\n }\n\n /**\n * Fire multi events using object of events\n *\n * @param {Object.<string, *>} events\n */\n dispatchEvents(events) {\n if (!events || typeof events !== \"object\") {\n Salla.log(\"No Events To Dispatch!\", events);\n return;\n }\n\n for (const [event_name, payload] of Object.entries(events)) {\n this.dispatch(event_name, payload);\n }\n }\n\n /**\n * Alias for on function\n *\n * @param {string} eventName\n * @param {function} callback\n * @deprecated use on\n */\n addListener(eventName, callback) {\n return this.on(eventName, callback);\n }\n\n /**\n * Alias for on function\n *\n * @param {string} eventName\n * @param {function} callback\n * @deprecated use on\n */\n addEventListener(eventName, callback) {\n return this.on(eventName, callback);\n }\n\n /**\n * Alias for this.addListener\n * @param {string} eventName\n * @param {function} callback\n */\n listen(eventName, callback) {\n return this.on(eventName, callback);\n }\n\n /**\n * Register Global listener will allow you to track all events in salla,\n * all Salla events will push to it.\n *\n * @param {string} name\n * @param {function} callback\n * @deprecated use onAny\n */\n registerGlobalListener(name, callback) {\n return this.onAny(callback);\n }\n\n /**\n * This help to push an event to mobile app.\n *\n * @param eventName\n * @param details\n * @returns {string}\n */\n dispatchMobileEvent(eventName, details = {}) {\n if (\n typeof window === \"undefined\" ||\n !window.dataLayer ||\n !dataLayer[0] ||\n !dataLayer[0].page ||\n !dataLayer[0].page.mobileApp\n ) {\n return \"\";\n }\n\n if (window.webkit) {\n try {\n window.webkit.messageHandlers.callbackHandler.postMessage(\n JSON.stringify({\n event : eventName,\n details: details,\n })\n );\n } catch (err) {\n Salla.log(err, \"The native context does not exist yet\");\n }\n return;\n }\n\n if (Android) {\n try {\n Android.customEventWithData(eventName, JSON.stringify({details: details}));\n } catch (err) {\n Salla.log(err, \"The native context does not exist yet\");\n }\n }\n }\n}\n","/**\n * @namespace Salla.cookie\n */\nexport default class Cookie {\n constructor() {\n Salla.event.on(\"cookies::remove\", (key) => this.remove(key));\n Salla.event.on(\"cookies::add\", (key, value) => this.set(key, value));\n }\n\n get(key) {\n return document.cookie\n .split(\"; \")\n .find((row) => row.startsWith(key + \"=\"))\n ?.split(\"=\")[1];\n }\n\n set(key, value = \"\", days = 10) {\n let expires = \"\";\n if (days) {\n let date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = \"; expires=\" + date.toUTCString();\n }\n document.cookie = `${key}=${value}${expires}\"; path=/; secure; SameSite=Lax\"`;\n return this;\n }\n\n remove(key) {\n document.cookie = `${key}=; Max-Age=0; path=/;`;\n return this;\n }\n\n clearAll() {\n let cookies = document.cookie.split(\";\");\n\n for (let i = 0; i < cookies.length; i++) {\n let cookie = cookies[i];\n let eqPos = cookie.indexOf(\"=\");\n let name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;\n this.remove(name);\n }\n }\n}\n"],"names":["number","num","isToEnglish","regex","ar","en","find","Salla","config","get","replace","i","length","RegExp","getOnlyDecimal","value","dotsCount","match","getLeveledData","nameLevels","existedData","currentName","Array","isArray","push","slice","url","window","location","href","split","join","rtrim","ltrim","Helpers","digitsOnly","inputDigitsOnly","input","is_decimal","document","querySelectorAll","forEach","el","logger","warn","new_val","helpers","min","max","maxLength","toString","substring","dataset","hasOwnProperty","money","currency","symbol","amount","setNested","object","key","schema","keys","len","elem","getNested","default_","data","undefined","inputData","name","includes","asset","path","origin","baseUrl","cdn","is_page","pageName","api","addParamToUrl","endsWith","encodeURIComponent","debounce","fn","delay","timer","resolves","args","clearTimeout","setTimeout","result","r","Promise","Logger","c","proxy","log","a","type","salla","isDebug","l","f","this","__dict__","style","color","event","backend","toUpperCase","call","concat","trace","debug","info","error","arguments","logs","flat","logData","console","localStore","createStore","localStorage","sessionStorage","cookieStorage","memoryStorage","global","status","constructor","properties","default_properties","properties_","merge","Object","assign","store","set","all","storage","EventEmitter","super","wildcard","delimiter","newListener","removeListener","maxListeners","verboseMemoryLeak","ignoreErrors","body","querySelector","logableEvents","ingoreLogEvents","noneFireableActions","createAndDispatch","event_name","dispatch","emit","actionName","dataLayer","dataLayerObject","map","item","dispatchMobileEvent","values","dispatchEvents","events","payload","entries","addListener","eventName","callback","on","addEventListener","listen","registerGlobalListener","onAny","details","page","mobileApp","webkit","messageHandlers","callbackHandler","postMessage","JSON","stringify","err","Android","customEventWithData","remove","firstKey","parentObject","clearAll","cookie","row","startsWith","days","expires","date","Date","setTime","getTime","toUTCString","cookies","eqPos","indexOf","substr","versions","base","Salla$1"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/helpers/numbers.js","../../src/helpers/index.js","../../src/logger.js","../../src/storage.js","../../src/index.js","../../src/config.js","../../src/event.js","../../src/cookie.js"],"sourcesContent":["/**\n * @param num\n * @param {boolean} isToEnglish\n * @return {string}\n */\nexport function number(num, isToEnglish = false) {\n num = num + \"\";//make sure that number will be converted to string;\n isToEnglish = isToEnglish || !Salla.config.get('store.settings.arabic_numbers_enabled');\n let ar = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];\n let en = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n let find = isToEnglish ? ar : en;\n let replace = isToEnglish ? en : ar;\n let regex;\n for (let i = 0; i < find.length; i++) {\n regex = new RegExp(find[i], \"g\");\n num = num.replace(regex, replace[i]);\n }\n return num;\n}\n\n/**\n * when need to get digit's only from string \"Jamal12Hi\" => 12, or \"١٢٣\" => 123\n * @param {string} num\n * @return {string}\n */\nexport function digitsOnly(num) {\n return number(num, true).replace(/[^0-9.]/g, '')\n .replace('..', '.')\n .rtrim('.'); // without this: `Salla.helpers.digitsOnly('١٬٦٠٠ ر.س')` => `1600.`\n}\n\n/**\n * @param {HTMLInputElement|string} input - selector or input object\n * @param {boolean} is_decimal\n * @return {string|*|void}\n */\nexport function inputDigitsOnly(input, is_decimal = false) {\n if (typeof input == 'string') {\n return document.querySelectorAll(input).forEach(el => inputDigitsOnly(el, is_decimal));\n }\n if (!input) {\n Salla.logger.warn('Can\\'t find Object With Id: ' + input);\n return;\n }\n let new_val = Salla.helpers.digitsOnly(input.value);\n\n if (input.min && new_val < input.min) {\n return input.value = input.min;\n }\n if (input.max && new_val > input.max) {\n return input.value = input.max;\n }\n if (input.maxLength >= 1 && new_val.toString().length > input.maxLength) {\n return input.value = new_val.toString().substring(0, input.maxLength);\n }\n\n return input.value = (is_decimal || input.dataset.hasOwnProperty('digitsWithDecimal'))\n ? getOnlyDecimal(new_val)\n : new_val.replace(/\\D/g, '');\n}\n\nexport function getOnlyDecimal(value) {\n let dotsCount = (value.match(/\\./g) || []).length;\n if (!dotsCount || dotsCount === 1) {\n return value;\n }\n\n // if there is more than one dotes, remove the last dot.\n // Ex: 123.545.66 => 123.54566\n return getOnlyDecimal(value.replace(/\\.(.+)\\./g, '.$1'));\n}\n\n/**\n * @param {string|number|{amount: number,currency: string}} money\n * @return string\n */\nexport function money(money) {\n let currency = Salla.config.currency(money?.currency).symbol;\n money = typeof money === 'object' ? money.amount : money;\n return number(money) + ' ' + currency;\n}","import {digitsOnly, inputDigitsOnly, money, number} from \"./numbers\";\nimport get from \"lodash/get\";\n\n/**\n * To use it, you need some moves:\n * 1- First : you should have global variable:`let my_debounce;`\n * 2- Next : make your own function: `function my_debounce_fn(callback,...data){...}`\n * 3- Next : in your method, check if it's not existed yet, use this helper method to create it: `if(!my_debounce){my_debounce=Salla.helpers.debounce((fn, ...inner_data) => fn(...inner_data), 500)}`\n * 4- Next : then delay the passed callback: `my_debounce(callback, ...data);`\n * 5- Finally : use it: `my_debounce(() =>{...yourRepeatableLogic})`\n * will be something like:\n *\n * ```\n * let my_debounce;\n * function my_debounce_fn(callback,...data){\n * if(!my_debounce){\n * //inline method\n * my_debounce=Salla.helpers.debounce((fn, ...inner_data) => fn(...inner_data), 500);\n * }\n * return my_debounce(callback, ...data);\n * }\n * // use it like:\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 1');\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 2');\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 3');\n * my_debounce_fn((my_data)=>Salla.log(my_data), 'hello there - 4');\n * //output=> `hello there - 4`\n * ```\n * 😎Or just use Salla appHelpers:`app.debounce((my_data)=>Salla.log(my_data), 'hello there - *')`\n *\n * @param fn\n * @param delay\n * @return {function(...[*]): Promise<unknown>}\n */\nfunction debounce(fn, delay) {\n delay = delay || 100;\n let resolves = [];\n let timer;\n return function (...args) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n let result = fn(...args);\n resolves.forEach((r) => r(result));\n resolves = [];\n }, delay);\n return new Promise((r) => resolves.push(r));\n };\n}\n\n/**\n * Use It When You want to grab data from input names with brackets Ex.\n * <input name=\"products[0][id]\" value...>\n * <input name=\"products[0][name]\" value...>\n * <input name=\"products[1][id]\" value...>\n * <input name=\"products[1][name]\" value...>\n * will be like: {products:[{id:.., name:..},{id:.., name:..}]}\n * @param name\n * @param value\n * @param dataset\n * @return {{name, value}|{name, value: (*|[*, *]|[string, *]|{}|[*])}}\n */\nfunction getInputDataWithName(name, value, dataset = {}) {\n if (name.includes(\"[\")) {\n let nameLevels = name.split(\"]\").join(\"\").split(\"[\");\n return {name: nameLevels[0], value: getLeveledData(nameLevels.slice(1), value, dataset[nameLevels[0]])};\n }\n return {name: name, value: value};\n}\n\n/**\n * in case input name is array for example \"jamal[4655]\" let's fix it\n * This Helper method to get suitable array data, Ex.\n * jamal[]=1\n * jamal[]=2\n * final result will be: {jamal:[1,2]}\n *\n * @param {String[]} nameLevels\n * @param {string|mixed} value\n * @param {{}|undefined} existedData\n * @return {*[]|*|(string|*)[]|{}}\n */\nfunction getLeveledData(nameLevels, value, existedData) {\n let currentName = nameLevels[0];\n\n //it's an array, so add value ass array\n if (existedData && nameLevels.length == 0) {\n if (Array.isArray(existedData)) {\n existedData.push(value);\n return existedData;\n }\n\n //todo::handle in case it's object\n return [existedData, value];\n }\n\n if (Array.isArray(existedData)) {\n existedData.push(value);\n return existedData;\n }\n\n if (typeof existedData === \"string\") {\n return [existedData, value];\n }\n\n //it's nested data\n if (existedData) {\n existedData[currentName] = getLeveledData(nameLevels.slice(1), value, existedData[currentName]);\n return existedData;\n }\n\n if (currentName) {\n return {[currentName]: getLeveledData(nameLevels.slice(1), value)};\n }\n\n //handling \"[]\" without name\n return currentName === \"\" ? [value] : value;\n}\n\n/*\nwindow.onbeforeunload = function (event) {\n Salla.document.event.leaving(event);\n if (!Salla.config.get(\"canLeave\")) {\n event.preventDefault();\n return false;\n }\n};\n*/\nfunction setNested(object, key, value) {\n let schema = object;\n let keys = key.split(\".\");\n let len = keys.length;\n for (let i = 0; i < len - 1; i++) {\n let elem = keys[i];\n if (!schema[elem]) schema[elem] = {};\n schema = schema[elem];\n }\n\n schema[keys[len - 1]] = value;\n return object;\n}\n\nfunction getNested(object, key, default_) {\n let data = get(object, key);\n return data !== undefined ? data : default_;\n}\n\n/**\n * @param {string } url\n * @return string\n */\nfunction url(url) {\n return (\n Salla.config.get(\"store.url\", window.location.href.split(\"/\").slice(0, -1).join(\"/\")).rtrim(\"/\") +\n \"/\" +\n url.ltrim(\"/\")\n );\n}\n\nfunction addParamToUrl(key, value) {\n if (!value || !key) {\n return window.location.href;\n }\n let regex = new RegExp(\"([?&])\" + key + \"=[^&]+[&]?\", \"g\");\n let url = window.location.href\n .replace(regex, \"$1\") //remove old one\n .split('#')[0]//remove any hash values ex 'https://my_site.test/brands#brand-section-1'\n .replace(/&$|\\?$/, \"\");// remove the `?` or `&` if it's the last char\n if (url.includes(\"?\")) {\n url += \"&\";\n } else {\n //avoid cases like this: 'https://my_store.test/ar?test=hi'\n url += (url.endsWith('/') ? \"\" : \"/\") + \"?\";\n }\n\n return (url + key + \"=\" + encodeURIComponent(value)).replace(/&$|\\?$/, \"\");\n}\n\n//this will get it without username if it's salla domain ex: Salla.sa/test will ignore test\nfunction baseUrl(path) {\n return window.location.origin + \"/\" + path.ltrim(\"/\");\n}\n\nfunction asset(path) {\n return baseUrl(\"themes/\" + Salla.config.get(\"theme.name\") + \"/\" + path.ltrim(\"/\"));\n}\n\nfunction cdn(path) {\n return \"https://cdn.salla.network/\" + path.ltrim(\"/\");\n}\n\n/**\n * Return url for api\n * @example Salla.url.api('test') => https://my_store.test/api/v1/test\n * @param path\n * @return {string}\n */\nfunction api(path) {\n return Salla.config.get(\"store.api\", url(\"\")).rtrim(\"/\") + \"/\" + path.ltrim(\"/\");\n}\n\nfunction is_page(pageName) {\n return pageName && Salla.config.get(\"page.slug\") === pageName;\n}\n\n/**\n * @type {{debounce: (function(*, *=): function(...[*]): Promise<unknown>), inputData: ((function(*=, *=, *): ({name, value}|{name, value: (*|*[]|(string|*)[]|{})}))|*), digitsOnly: ((function(*=, *=): (undefined|*))|*)}}\n */\nexport default {\n // Numbers helpers\n digitsOnly : digitsOnly,\n inputDigitsOnly: inputDigitsOnly,\n number : number,\n money : money,\n\n // Nested objects helpers\n setNested: setNested,\n getNested: getNested,\n inputData: getInputDataWithName,\n\n // Url helpers\n url : {\n get : url,\n asset : asset,\n cdn : cdn,\n is_page: is_page,\n api : api,\n },\n addParamToUrl: addParamToUrl,\n\n // other\n debounce: debounce,\n};\n","\"use strict\";\n/**\n * A logger to help us to use Salla.logger.log like console.log\n *\n * @namespace Salla.logger\n *\n * @credits @Ammar Hasan\n * @see https://stackoverflow.com/a/21856736\n *\n */\nexport default (function (c) {\n \"use strict\";\n\n let proxy = {\n log: function (a, type) {\n if (!c) {\n return; /* return or call your custom function here */\n }\n\n if(!salla.config.isDebug()){\n return;\n }\n\n // let's force trace for all logs when the debug is trace level\n if (salla.config.get('debug') === 'trace') {\n type = 'trace';\n }\n\n let colorableTypes={\n event:'#CFF680',\n backend:'#7b68ee'\n };\n\n let l = c.log,\n f = type === undefined ? l : (this.__dict__[type] || l);\n\n let style = ['%cTwilight', 'color: #5cd5c4;font-weight:bold; border:1px solid #5cd5c4; padding: 2px 6px; border-radius: 5px;'];\n let color=colorableTypes[type];\n if (color) {\n style[0] += '%c' + type[0].toUpperCase() + type.substring(1);\n style.push(`margin-left: 5px;color: ${color};font-weight:bold; border:1px solid ${color}; padding: 2px 6px; border-radius: 5px;`)\n }\n\n f.call(c, ...style.concat(...a))\n },\n __dict__: {\n \"trace\": c.trace,\n \"debug\": c.debug,\n \"info\": c.info,\n \"warn\": c.warn,\n \"error\": c.error\n }\n };\n\n return {\n event: function () {\n proxy.log(arguments, \"event\");\n },\n trace: function () {\n proxy.log(arguments, \"trace\");\n },\n debug: function () {\n proxy.log(arguments, \"debug\");\n },\n info: function () {\n proxy.log(arguments, \"info\");\n },\n warn: function () {\n proxy.log(arguments, \"warn\");\n },\n error: function () {\n proxy.log(arguments, \"error\");\n },\n log: function () {\n proxy.log(arguments, undefined);\n },\n //use this to pass messages from backEnd, no need to add documentations, because it will no passed in production\n backend: function () {\n proxy.log(arguments, \"backend\");\n },\n //this for internal usage to pass multi logs using one function, no need to add it to documentation @see \\Salla\\Core\\Traits\\WithStageLogger::debug\n logs:function (logs) {\n [logs].flat().forEach(logData => logData && proxy.log([logData].flat(), 'backend'));\n }\n };\n}(console))\n","import createStore from \"store/src/store-engine\"\nimport localStorage from \"store/storages/localStorage\"\nimport sessionStorage from \"store/storages/sessionStorage\"\nimport cookieStorage from \"store/storages/cookieStorage\"\nimport memoryStorage from \"store/storages/memoryStorage\"\n\nconst localStore = createStore.createStore([\n localStorage,\n sessionStorage,\n cookieStorage,\n memoryStorage,\n], [])\n\n/**\n * @namespace Salla.storage\n */\nexport default class Storage {\n constructor() {\n Salla.event.on(\"storage::item.remove\", (key) => this.remove(key));\n Salla.event.on(\"storage::item.set\", (key, value) => this.set(key, value));\n this.store = localStore;\n }\n\n set(key, value) {\n if (key.includes(\".\")) {\n let firstKey = key.split(\".\")[0];\n let parentObject = {[firstKey]: this.store.get(firstKey)};\n parentObject = Salla.helpers.setNested(parentObject, key, value);\n return this.store.set(firstKey, parentObject[firstKey]);\n }\n return this.store.set(key, value);\n }\n\n remove(key) {\n return this.store.remove(key);\n }\n\n clearAll() {\n return this.store.clearAll();\n }\n\n get(key, value) {\n if (key.includes(\".\")) {\n let firstKey = key.split(\".\")[0];\n return Salla.helpers.getNested({[firstKey]: this.store.get(firstKey)}, key);\n }\n return this.store.get(key, value);\n }\n}\n","\"use strict\";\n\nif (typeof global === 'undefined') {\n window.salla = window.salla || window.Salla || {};\n window.Salla = window.salla;\n} else {\n global.salla = global.salla || global.Salla || {};\n global.Salla = global.salla;\n}\n\n// loading helpers object and link it to salla\nimport Helpers from \"./helpers\"\nimport Logger from \"./logger\"\nimport Config from \"./config\"\nimport Emitter from \"./event\"\nimport Storage from \"./storage\"\nimport Cookie from \"./cookie\"\n\nSalla.status = 'base';\n// const Salla = {};\nSalla.config = new Config();\nSalla.logger = Logger;\nSalla.event = new Emitter();\n\nSalla.storage = new Storage();\nSalla.cookie = new Cookie();\nSalla.helpers = Helpers;\n\n// alias\nSalla.log = Salla.logger.log;\nSalla.money = Salla.helpers.money;\nSalla.url = Salla.helpers.url;\nSalla.versions = {\n base: '[VI]{version}[/VI]'\n};\n\nexport default Salla","/**\n * @namespace Salla.config\n *\n * @property {any} properties_\n */\nexport default class Config {\n constructor(properties = {}, default_properties = {}) {\n this.default_properties = default_properties;\n this.properties_ = {...this.default_properties, ...properties};\n }\n\n merge(config) {\n Object.assign(this.properties_, config);\n\n this.properties_.store = {...this.default_properties.store, ...this.properties_.store};\n\n return this;\n }\n\n set(key, value) {\n if (key.includes(\".\")) {\n Salla.helpers.setNested(this.properties_, key, value);\n return this;\n }\n this.properties_[key] = value;\n return this;\n }\n\n /**\n * @param {string} key\n * @param {null|any} default_\n * @return {any}\n */\n get(key, default_ = null) {\n if (key.includes(\".\")) {\n return Salla.helpers.getNested(this.properties_, key, default_);\n }\n\n return this.properties_.hasOwnProperty(key) ? this.properties_[key] || default_ : default_ || undefined;\n }\n\n all() {\n return this.properties_;\n }\n\n isDebug() {\n return this.get('debug') || Salla.storage.get('debug');\n }\n}\n","import EventEmitter from \"eventemitter2\";\n\n/**\n * @namespace Salla.event\n *\n * @property {string} delimiter\n * @property {array} loggableEvents - log errors or important events.\n */\nexport default class Emitter extends EventEmitter {\n constructor() {\n let delimiter = \"::\";\n super({\n wildcard : true,\n delimiter : delimiter,\n newListener : false,\n removeListener : false,\n maxListeners : 10,\n verboseMemoryLeak: false,\n ignoreErrors : false,\n });\n this.delimiter = delimiter;\n\n if (typeof document !== \"undefined\") {\n this.body = document.querySelector(\"body\");\n }\n\n this.logableEvents = [\"cart::item.added.failed\", \"cart::item.deleted.failed\"];\n this.ingoreLogEvents = [\n \"document::click\",\n \"document::keyup\",\n \"document::change\",\n //'document::submit',\n ];\n\n this.noneFireableActions = [\"document.request\"];\n }\n\n /**\n * @param {string} event_name\n * @param data\n *\n * @deprecated , legacy code, use dispatch() instead\n */\n createAndDispatch(event_name, ...data) {\n this.dispatch(event_name, ...data);\n }\n\n emit(event_name, ...data) {\n /**\n * if the event, is api/event method, call it,\n * ex: cart::quick.add call Salla.api.cart.quickAdd(...data)\n * we don't used Salla.call(actionName)(...data), to avoid losing this scope in our apis.\n *\n * @deprecated don't use it anymore\n */\n let actionName = event_name.replace(\"::\", \".\");\n if (\n !this.noneFireableActions.includes(actionName) &&\n typeof Salla.call !== \"undefined\" &&\n typeof Salla.call(actionName) === \"function\"\n ) {\n Salla.log(`'Salla.${actionName}(...)' triggered using event '${event_name}'`);\n actionName = actionName.split(\".\"); //['cart','addItem']\n salla[actionName[0]][actionName[1]](...data);\n return;\n }\n\n\n super.emit(event_name, ...data);\n\n // let's send the event to data layer\n if (typeof window !== \"undefined\") {\n window.dataLayer = window.dataLayer || [];\n /**\n * data is coming as an array like this:\n * [{\"services\": {\"intercom\": {\"app_id\": \"***\"}}}]\n * we will merge it into one object like this:\n * {event: event_name, \"services\": {\"intercom\": {\"app_id\": \"***\"}}}\n */\n let dataLayerObject = {event: event_name};\n data.map(item => typeof item === 'object' && (dataLayerObject = {...dataLayerObject, ...item}));\n window.dataLayer.push(dataLayerObject);\n }\n\n //if there is need to log errors, or events, lets do it here.\n if (Salla.logger && !this.ingoreLogEvents.includes(event_name)) {\n Salla.logger.event(event_name, ...data);\n }\n\n this.dispatchMobileEvent(event_name, {...data.values()});\n }\n\n /**\n * Fire Event with data\n *\n * @param {string} event_name - action name like `cart::addItem` or event name like `cart::item.added`\n * @param {any|undefined} data\n * @data {{payload}} data\n */\n dispatch(event_name, ...data) {\n return this.emit(event_name, ...data);\n }\n\n /**\n * Fire multi events using object of events\n *\n * @param {Object.<string, *>} events\n */\n dispatchEvents(events) {\n if (!events || typeof events !== \"object\") {\n Salla.log(\"No Events To Dispatch!\", events);\n return;\n }\n\n for (const [event_name, payload] of Object.entries(events)) {\n this.dispatch(event_name, payload);\n }\n }\n\n /**\n * Alias for on function\n *\n * @param {string} eventName\n * @param {function} callback\n * @deprecated use on\n */\n addListener(eventName, callback) {\n return this.on(eventName, callback);\n }\n\n /**\n * Alias for on function\n *\n * @param {string} eventName\n * @param {function} callback\n * @deprecated use on\n */\n addEventListener(eventName, callback) {\n return this.on(eventName, callback);\n }\n\n /**\n * Alias for this.addListener\n * @param {string} eventName\n * @param {function} callback\n */\n listen(eventName, callback) {\n return this.on(eventName, callback);\n }\n\n /**\n * Register Global listener will allow you to track all events in salla,\n * all Salla events will push to it.\n *\n * @param {string} name\n * @param {function} callback\n * @deprecated use onAny\n */\n registerGlobalListener(name, callback) {\n return this.onAny(callback);\n }\n\n /**\n * This help to push an event to mobile app.\n *\n * @param eventName\n * @param details\n * @returns {string}\n */\n dispatchMobileEvent(eventName, details = {}) {\n if (\n typeof window === \"undefined\" ||\n !window.dataLayer ||\n !dataLayer[0] ||\n !dataLayer[0].page ||\n !dataLayer[0].page.mobileApp\n ) {\n return \"\";\n }\n\n if (window.webkit) {\n try {\n window.webkit.messageHandlers.callbackHandler.postMessage(\n JSON.stringify({\n event : eventName,\n details: details,\n })\n );\n } catch (err) {\n Salla.log(err, \"The native context does not exist yet\");\n }\n return;\n }\n\n if (Android) {\n try {\n Android.customEventWithData(eventName, JSON.stringify({details: details}));\n } catch (err) {\n Salla.log(err, \"The native context does not exist yet\");\n }\n }\n }\n}\n","/**\n * @namespace Salla.cookie\n */\nexport default class Cookie {\n constructor() {\n Salla.event.on(\"cookies::remove\", (key) => this.remove(key));\n Salla.event.on(\"cookies::add\", (key, value) => this.set(key, value));\n }\n\n get(key) {\n return document.cookie\n .split(\"; \")\n .find((row) => row.startsWith(key + \"=\"))\n ?.split(\"=\")[1];\n }\n\n set(key, value = \"\", days = 10) {\n let expires = \"\";\n if (days) {\n let date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = \"; expires=\" + date.toUTCString();\n }\n document.cookie = `${key}=${value}${expires}\"; path=/; secure; SameSite=Lax\"`;\n return this;\n }\n\n remove(key) {\n document.cookie = `${key}=; Max-Age=0; path=/;`;\n return this;\n }\n\n clearAll() {\n let cookies = document.cookie.split(\";\");\n\n for (let i = 0; i < cookies.length; i++) {\n let cookie = cookies[i];\n let eqPos = cookie.indexOf(\"=\");\n let name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;\n this.remove(name);\n }\n }\n}\n"],"names":["number","num","isToEnglish","regex","ar","en","find","Salla","config","get","replace","i","length","RegExp","getOnlyDecimal","value","dotsCount","match","getLeveledData","nameLevels","existedData","currentName","Array","isArray","push","slice","url","window","location","href","split","join","rtrim","ltrim","Helpers","digitsOnly","inputDigitsOnly","input","is_decimal","document","querySelectorAll","forEach","el","logger","warn","new_val","helpers","min","max","maxLength","toString","substring","dataset","hasOwnProperty","money","currency","symbol","amount","setNested","object","key","schema","keys","len","elem","getNested","default_","data","undefined","inputData","name","includes","asset","path","origin","baseUrl","cdn","is_page","pageName","api","addParamToUrl","endsWith","encodeURIComponent","debounce","fn","delay","timer","resolves","args","clearTimeout","setTimeout","result","r","Promise","Logger","c","proxy","log","a","type","salla","isDebug","l","f","this","__dict__","style","color","event","backend","toUpperCase","call","concat","trace","debug","info","error","arguments","logs","flat","logData","console","localStore","createStore","localStorage","sessionStorage","cookieStorage","memoryStorage","global","status","constructor","properties","default_properties","properties_","merge","Object","assign","store","set","all","storage","EventEmitter","super","wildcard","delimiter","newListener","removeListener","maxListeners","verboseMemoryLeak","ignoreErrors","body","querySelector","logableEvents","ingoreLogEvents","noneFireableActions","createAndDispatch","event_name","dispatch","emit","actionName","dataLayer","dataLayerObject","map","item","dispatchMobileEvent","values","dispatchEvents","events","payload","entries","addListener","eventName","callback","on","addEventListener","listen","registerGlobalListener","onAny","details","page","mobileApp","webkit","messageHandlers","callbackHandler","postMessage","JSON","stringify","err","Android","customEventWithData","remove","firstKey","parentObject","clearAll","cookie","row","startsWith","days","expires","date","Date","setTime","getTime","toUTCString","cookies","eqPos","indexOf","substr","versions","base","Salla$1"],"mappings":"6QAKO,SAASA,EAAOC,EAAKC,GAAc,GACtCD,GAAY,GAEZ,IAIIE,EAJAC,EAAK,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnDC,EAAK,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnDC,GAHJJ,EAAcA,IAAgBK,MAAMC,OAAOC,IAAI,0CAGtBL,EAAKC,EAC1BK,EAAUR,EAAcG,EAAKD,EAEjC,IAAK,IAAIO,EAAI,EAAGA,EAAIL,EAAKM,OAAQD,IAC7BR,EAAQ,IAAIU,OAAOP,EAAKK,GAAI,KAC5BV,EAAMA,EAAIS,QAAQP,EAAOO,EAAQC,IAErC,OAAOV,CACV,CA2CM,SAASa,EAAeC,GAC3B,IAAIC,GAAaD,EAAME,MAAM,QAAU,IAAIL,OAC3C,OAAKI,GAA2B,IAAdA,EAMXF,EAAeC,EAAML,QAAQ,YAAa,QALtCK,CAMd,CCWD,SAASG,EAAeC,EAAYJ,EAAOK,GACzC,IAAIC,EAAcF,EAAW,GAG7B,OAAIC,GAAoC,GAArBD,EAAWP,OACxBU,MAAMC,QAAQH,IAChBA,EAAYI,KAAKT,GACVK,GAIF,CAACA,EAAaL,GAGnBO,MAAMC,QAAQH,IAChBA,EAAYI,KAAKT,GACVK,GAGkB,iBAAhBA,EACF,CAACA,EAAaL,GAInBK,GACFA,EAAYC,GAAeH,EAAeC,EAAWM,MAAM,GAAIV,EAAOK,EAAYC,IAC3ED,GAGLC,EACK,CAACA,CAACA,GAAcH,EAAeC,EAAWM,MAAM,GAAIV,IAItC,KAAhBM,EAAqB,CAACN,GAASA,CACvC,CAkCD,SAASW,EAAIA,GACX,OACEnB,MAAMC,OAAOC,IAAI,YAAakB,OAAOC,SAASC,KAAKC,MAAM,KAAKL,MAAM,GAAI,GAAGM,KAAK,MAAMC,MAAM,KAC5F,IACAN,EAAIO,MAAM,IAEb,CAmDD,IAAeC,EAAA,CAEbC,WDxLK,SAAoBlC,GACvB,OAAOD,EAAOC,GAAK,GAAMS,QAAQ,WAAY,IACxCA,QAAQ,KAAM,KACdsB,MAAM,IACd,ECqLCI,gBD9KK,SAASA,EAAgBC,EAAOC,GAAa,GAChD,GAAoB,iBAATD,EACP,OAAOE,SAASC,iBAAiBH,GAAOI,SAAQC,GAAMN,EAAgBM,EAAIJ,KAE9E,IAAKD,EAED,YADA9B,MAAMoC,OAAOC,KAAK,8BAAiCP,GAGvD,IAAIQ,EAAUtC,MAAMuC,QAAQX,WAAWE,EAAMtB,OAE7C,OAAIsB,EAAMU,KAAOF,EAAUR,EAAMU,IACtBV,EAAMtB,MAAQsB,EAAMU,IAE3BV,EAAMW,KAAOH,EAAUR,EAAMW,IACtBX,EAAMtB,MAAQsB,EAAMW,IAE3BX,EAAMY,WAAa,GAAKJ,EAAQK,WAAWtC,OAASyB,EAAMY,UACnDZ,EAAMtB,MAAQ8B,EAAQK,WAAWC,UAAU,EAAGd,EAAMY,WAGxDZ,EAAMtB,MAASuB,GAAcD,EAAMe,QAAQC,eAAe,qBAC3DvC,EAAe+B,GACfA,EAAQnC,QAAQ,MAAO,GAChC,ECwJCV,OAAiBA,EACjBsD,MDxIK,SAAeA,GAClB,IAAIC,EAAWhD,MAAMC,OAAO+C,SAASD,GAAOC,UAAUC,OAEtD,OAAOxD,EADPsD,EAAyB,iBAAVA,EAAqBA,EAAMG,OAASH,GAC5B,IAAMC,CAChC,ECuICG,UAxFF,SAAmBC,EAAQC,EAAK7C,GAC9B,IAAI8C,EAASF,EACTG,EAAOF,EAAI9B,MAAM,KACjBiC,EAAMD,EAAKlD,OACf,IAAK,IAAID,EAAI,EAAGA,EAAIoD,EAAM,EAAGpD,IAAK,CAChC,IAAIqD,EAAOF,EAAKnD,GACXkD,EAAOG,KAAOH,EAAOG,GAAQ,IAClCH,EAASA,EAAOG,EACjB,CAGD,OADAH,EAAOC,EAAKC,EAAM,IAAMhD,EACjB4C,CACR,EA6ECM,UA3EF,SAAmBN,EAAQC,EAAKM,GAC9B,IAAIC,EAAO1D,EAAIkD,EAAQC,GACvB,YAAgBQ,IAATD,EAAqBA,EAAOD,CACpC,EAyECG,UA5JF,SAA8BC,EAAMvD,EAAOqC,EAAU,CAAA,GACnD,GAAIkB,EAAKC,SAAS,KAAM,CACtB,IAAIpD,EAAamD,EAAKxC,MAAM,KAAKC,KAAK,IAAID,MAAM,KAChD,MAAO,CAACwC,KAAMnD,EAAW,GAAIJ,MAAOG,EAAeC,EAAWM,MAAM,GAAIV,EAAOqC,EAAQjC,EAAW,KACnG,CACD,MAAO,CAACmD,KAAMA,EAAMvD,MAAOA,EAC5B,EAyJCW,IAAe,CACbjB,IAASiB,EACT8C,MAxCJ,SAAeC,GACb,OALF,SAAiBA,GACf,OAAO9C,OAAOC,SAAS8C,OAAS,IAAMD,EAAKxC,MAAM,IAClD,CAGQ0C,CAAQ,UAAYpE,MAAMC,OAAOC,IAAI,cAAgB,IAAMgE,EAAKxC,MAAM,KAC9E,EAuCG2C,IArCJ,SAAaH,GACX,MAAO,6BAA+BA,EAAKxC,MAAM,IAClD,EAoCG4C,QAxBJ,SAAiBC,GACf,OAAOA,GAAYvE,MAAMC,OAAOC,IAAI,eAAiBqE,CACtD,EAuBGC,IA7BJ,SAAaN,GACX,OAAOlE,MAAMC,OAAOC,IAAI,YAAaiB,EAAI,KAAKM,MAAM,KAAO,IAAMyC,EAAKxC,MAAM,IAC7E,GA6BC+C,cArEF,SAAuBpB,EAAK7C,GAC1B,IAAKA,IAAU6C,EACb,OAAOjC,OAAOC,SAASC,KAEzB,IAAI1B,EAAQ,IAAIU,OAAO,SAAW+C,EAAM,aAAc,KAClDlC,EAAMC,OAAOC,SAASC,KACvBnB,QAAQP,EAAO,MACf2B,MAAM,KAAK,GACXpB,QAAQ,SAAU,IAQrB,OAPIgB,EAAI6C,SAAS,KACf7C,GAAO,IAGPA,IAAQA,EAAIuD,SAAS,KAAO,GAAK,KAAO,KAGlCvD,EAAMkC,EAAM,IAAMsB,mBAAmBnE,IAAQL,QAAQ,SAAU,GACxE,EAuDCyE,SApMF,SAAkBC,EAAIC,GACpBA,EAAQA,GAAS,IACjB,IACIC,EADAC,EAAW,GAEf,OAAO,YAAaC,GAOlB,OANAC,aAAaH,GACbA,EAAQI,YAAW,KACjB,IAAIC,EAASP,KAAMI,GACnBD,EAAS9C,SAASmD,GAAMA,EAAED,KAC1BJ,EAAW,EAAX,GACCF,GACI,IAAIQ,SAASD,GAAML,EAAS/D,KAAKoE,KAE3C,GCrCeE,EAAA,SAAUC,GAGxB,IAAIC,EAAQ,CACVC,IAAK,SAAUC,EAAGC,GAChB,IAAKJ,EACH,OAGF,IAAIK,MAAM5F,OAAO6F,UACf,OAIgC,UAA9BD,MAAM5F,OAAOC,IAAI,WACnB0F,EAAO,SAGT,IAKIG,EAAIP,EAAEE,IACNM,OAAanC,IAAT+B,EAAqBG,EAAKE,KAAKC,SAASN,IAASG,EAErDI,EAAQ,CAAC,aAAc,oGACvBC,EATe,CACjBC,MAAM,UACNC,QAAQ,WAOeV,GACrBQ,IACFD,EAAM,IAAM,KAAOP,EAAK,GAAGW,cAAgBX,EAAKhD,UAAU,GAC1DuD,EAAMlF,KAAM,2BAA0BmF,wCAA4CA,6CAGpFJ,EAAEQ,KAAKhB,KAAMW,EAAMM,UAAUd,GA9BrB,EAgCVO,SAAU,CACRQ,MAASlB,EAAEkB,MACXC,MAASnB,EAAEmB,MACXC,KAAQpB,EAAEoB,KACVvE,KAAQmD,EAAEnD,KACVwE,MAASrB,EAAEqB,QAIf,MAAO,CACLR,MAAO,WACLZ,EAAMC,IAAIoB,UAAW,QAFlB,EAILJ,MAAO,WACLjB,EAAMC,IAAIoB,UAAW,QALlB,EAOLH,MAAO,WACLlB,EAAMC,IAAIoB,UAAW,QARlB,EAULF,KAAM,WACJnB,EAAMC,IAAIoB,UAAW,OAXlB,EAaLzE,KAAM,WACJoD,EAAMC,IAAIoB,UAAW,OAdlB,EAgBLD,MAAO,WACLpB,EAAMC,IAAIoB,UAAW,QAjBlB,EAmBLpB,IAAK,WACHD,EAAMC,IAAIoB,eAAWjD,EApBlB,EAuBLyC,QAAS,WACPb,EAAMC,IAAIoB,UAAW,UAxBlB,EA2BLC,KAAK,SAAUA,GACb,CAACA,GAAMC,OAAO9E,SAAQ+E,GAAWA,GAAWxB,EAAMC,IAAI,CAACuB,GAASD,OAAQ,YACzE,EAzEW,CAAA,CA2EdE,SC/EF,MAAMC,EAAaC,EAAYA,YAAY,CACzCC,EACAC,EACAC,EACAC,GACC,ICTmB,oBAAXC,QACTrG,OAAOyE,MAAQzE,OAAOyE,OAASzE,OAAOpB,OAAS,GAC/CoB,OAAOpB,MAAQoB,OAAOyE,QAEtB4B,OAAO5B,MAAQ4B,OAAO5B,OAAS4B,OAAOzH,OAAS,GAC/CyH,OAAOzH,MAAQyH,OAAO5B,OAWxB7F,MAAM0H,OAAS,OAEf1H,MAAMC,OAAS,ICfA,MACb0H,YAAYC,EAAa,GAAIC,EAAqB,CAAA,GAChD5B,KAAK4B,mBAAqBA,EAC1B5B,KAAK6B,YAAc,IAAI7B,KAAK4B,sBAAuBD,EACpD,CAEDG,MAAM9H,GAKJ,OAJA+H,OAAOC,OAAOhC,KAAK6B,YAAa7H,GAEhCgG,KAAK6B,YAAYI,MAAQ,IAAIjC,KAAK4B,mBAAmBK,SAAUjC,KAAK6B,YAAYI,OAEzEjC,IACR,CAEDkC,IAAI9E,EAAK7C,GACP,OAAI6C,EAAIW,SAAS,MACfhE,MAAMuC,QAAQY,UAAU8C,KAAK6B,YAAazE,EAAK7C,GACxCyF,OAETA,KAAK6B,YAAYzE,GAAO7C,EACjByF,KACR,CAOD/F,IAAImD,EAAKM,EAAW,MAClB,OAAIN,EAAIW,SAAS,KACRhE,MAAMuC,QAAQmB,UAAUuC,KAAK6B,YAAazE,EAAKM,GAGjDsC,KAAK6B,YAAYhF,eAAeO,GAAO4C,KAAK6B,YAAYzE,IAAQM,EAAWA,QAAYE,CAC/F,CAEDuE,MACE,OAAOnC,KAAK6B,WACb,CAEDhC,UACE,OAAOG,KAAK/F,IAAI,UAAYF,MAAMqI,QAAQnI,IAAI,QAC/C,GD1BHF,MAAMoC,OAASmD,EACfvF,MAAMqG,MAAQ,IEdC,cAAsBiC,EACnCX,cAEEY,MAAM,CACJC,UAAmB,EACnBC,UAHc,KAIdC,aAAmB,EACnBC,gBAAmB,EACnBC,aAAmB,GACnBC,mBAAmB,EACnBC,cAAmB,IAErB7C,KAAKwC,UAVW,KAYQ,oBAAbzG,WACTiE,KAAK8C,KAAO/G,SAASgH,cAAc,SAGrC/C,KAAKgD,cAAgB,CAAC,0BAA2B,6BACjDhD,KAAKiD,gBAAkB,CACrB,kBACA,kBACA,oBAIFjD,KAAKkD,oBAAsB,CAAC,mBAC7B,CAQDC,kBAAkBC,KAAezF,GAC/BqC,KAAKqD,SAASD,KAAezF,EAC9B,CAED2F,KAAKF,KAAezF,GAQlB,IAAI4F,EAAaH,EAAWlJ,QAAQ,KAAM,KAC1C,IACG8F,KAAKkD,oBAAoBnF,SAASwF,SACb,IAAfxJ,MAAMwG,MACqB,mBAA3BxG,MAAMwG,KAAKgD,GAKlB,OAHAxJ,MAAM0F,IAAK,UAAS8D,kCAA2CH,MAC/DG,EAAaA,EAAWjI,MAAM,UAC9BsE,MAAM2D,EAAW,IAAIA,EAAW,OAAO5F,GAQzC,GAHA2E,MAAMgB,KAAKF,KAAezF,GAGJ,oBAAXxC,OAAwB,CACjCA,OAAOqI,UAAYrI,OAAOqI,WAAa,GAOvC,IAAIC,EAAkB,CAACrD,MAAOgD,GAC9BzF,EAAK+F,KAAIC,GAAwB,iBAATA,IAAsBF,EAAkB,IAAIA,KAAoBE,MACxFxI,OAAOqI,UAAUxI,KAAKyI,EAlCA,CAsCpB1J,MAAMoC,SAAW6D,KAAKiD,gBAAgBlF,SAASqF,IACjDrJ,MAAMoC,OAAOiE,MAAMgD,KAAezF,GAGpCqC,KAAK4D,oBAAoBR,EAAY,IAAIzF,EAAKkG,UAC/C,CASDR,SAASD,KAAezF,GACtB,OAAOqC,KAAKsD,KAAKF,KAAezF,EACjC,CAODmG,eAAeC,GACb,GAAKA,GAA4B,iBAAXA,EAKtB,IAAK,MAAOX,EAAYY,KAAYjC,OAAOkC,QAAQF,GACjD/D,KAAKqD,SAASD,EAAYY,QAL1BjK,MAAM0F,IAAI,yBAA0BsE,EAOvC,CASDG,YAAYC,EAAWC,GACrB,OAAOpE,KAAKqE,GAAGF,EAAWC,EAC3B,CASDE,iBAAiBH,EAAWC,GAC1B,OAAOpE,KAAKqE,GAAGF,EAAWC,EAC3B,CAODG,OAAOJ,EAAWC,GAChB,OAAOpE,KAAKqE,GAAGF,EAAWC,EAC3B,CAUDI,uBAAuB1G,EAAMsG,GAC3B,OAAOpE,KAAKyE,MAAML,EACnB,CASDR,oBAAoBO,EAAWO,EAAU,IACvC,KACoB,oBAAXvJ,QACNA,OAAOqI,WACPA,UAAU,IACVA,UAAU,GAAGmB,MACbnB,UAAU,GAAGmB,KAAKC,WAEnB,MAAO,GAGT,GAAIzJ,OAAO0J,OACT,IACE1J,OAAO0J,OAAOC,gBAAgBC,gBAAgBC,YAC5CC,KAAKC,UAAU,CACb9E,MAAS+D,EACTO,QAASA,IAKd,CAFC,MAAOS,GACPpL,MAAM0F,IAAI0F,EAAK,wCAChB,MAIH,GAAIC,QACF,IACEA,QAAQC,oBAAoBlB,EAAWc,KAAKC,UAAU,CAACR,QAASA,IAGjE,CAFC,MAAOS,GACPpL,MAAM0F,IAAI0F,EAAK,wCAChB,CAEJ,GFjLHpL,MAAMqI,QAAU,IDRD,MACbV,cACE3H,MAAMqG,MAAMiE,GAAG,wBAAyBjH,GAAQ4C,KAAKsF,OAAOlI,KAC5DrD,MAAMqG,MAAMiE,GAAG,qBAAqB,CAACjH,EAAK7C,IAAUyF,KAAKkC,IAAI9E,EAAK7C,KAClEyF,KAAKiC,MAAQf,CACd,CAEDgB,IAAI9E,EAAK7C,GACP,GAAI6C,EAAIW,SAAS,KAAM,CACrB,IAAIwH,EAAWnI,EAAI9B,MAAM,KAAK,GAC1BkK,EAAe,CAACD,CAACA,GAAWvF,KAAKiC,MAAMhI,IAAIsL,IAE/C,OADAC,EAAezL,MAAMuC,QAAQY,UAAUsI,EAAcpI,EAAK7C,GACnDyF,KAAKiC,MAAMC,IAAIqD,EAAUC,EAAaD,GAC9C,CACD,OAAOvF,KAAKiC,MAAMC,IAAI9E,EAAK7C,EAC5B,CAED+K,OAAOlI,GACL,OAAO4C,KAAKiC,MAAMqD,OAAOlI,EAC1B,CAEDqI,WACE,OAAOzF,KAAKiC,MAAMwD,UACnB,CAEDxL,IAAImD,EAAK7C,GACP,GAAI6C,EAAIW,SAAS,KAAM,CACrB,IAAIwH,EAAWnI,EAAI9B,MAAM,KAAK,GAC9B,OAAOvB,MAAMuC,QAAQmB,UAAU,CAAC8H,CAACA,GAAWvF,KAAKiC,MAAMhI,IAAIsL,IAAYnI,EACxE,CACD,OAAO4C,KAAKiC,MAAMhI,IAAImD,EAAK7C,EAC5B,GCtBHR,MAAM2L,OAAS,IGtBA,MACbhE,cACE3H,MAAMqG,MAAMiE,GAAG,mBAAoBjH,GAAQ4C,KAAKsF,OAAOlI,KACvDrD,MAAMqG,MAAMiE,GAAG,gBAAgB,CAACjH,EAAK7C,IAAUyF,KAAKkC,IAAI9E,EAAK7C,IAC9D,CAEDN,IAAImD,GACF,OAAOrB,SAAS2J,OACbpK,MAAM,MACNxB,MAAM6L,GAAQA,EAAIC,WAAWxI,EAAM,QAClC9B,MAAM,KAAK,EAChB,CAED4G,IAAI9E,EAAK7C,EAAQ,GAAIsL,EAAO,IAC1B,IAAIC,EAAU,GACd,GAAID,EAAM,CACR,IAAIE,EAAO,IAAIC,KACfD,EAAKE,QAAQF,EAAKG,UAAmB,GAAPL,EAAY,GAAK,GAAK,KACpDC,EAAU,aAAeC,EAAKI,aAC/B,CAED,OADApK,SAAS2J,OAAU,GAAEtI,KAAO7C,IAAQuL,oCAC7B9F,IACR,CAEDsF,OAAOlI,GAEL,OADArB,SAAS2J,OAAU,GAAEtI,yBACd4C,IACR,CAEDyF,WACE,IAAIW,EAAUrK,SAAS2J,OAAOpK,MAAM,KAEpC,IAAK,IAAInB,EAAI,EAAGA,EAAIiM,EAAQhM,OAAQD,IAAK,CACvC,IAAIuL,EAASU,EAAQjM,GACjBkM,EAAQX,EAAOY,QAAQ,KACvBxI,EAAOuI,GAAS,EAAIX,EAAOa,OAAO,EAAGF,GAASX,EAClD1F,KAAKsF,OAAOxH,EACb,CACF,GHfH/D,MAAMuC,QAAUZ,EAGhB3B,MAAM0F,IAAM1F,MAAMoC,OAAOsD,IACzB1F,MAAM+C,MAAQ/C,MAAMuC,QAAQQ,MAC5B/C,MAAMmB,IAAMnB,MAAMuC,QAAQpB,IAC1BnB,MAAMyM,SAAW,CACfC,KAAM,sBAGR,IAAAC,EAAe3M"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salla.sa/base",
3
- "version": "2.11.21",
3
+ "version": "2.11.45",
4
4
  "description": "Salla Base",
5
5
  "main": "dist/cjs/",
6
6
  "module": "dist/esm/",
@@ -54,5 +54,5 @@
54
54
  "rollup-plugin-terser": "^7.0.2",
55
55
  "rollup-plugin-version-injector": "^1.3.3"
56
56
  },
57
- "gitHead": "b591123b47bd10f7d6a4a812a6faf27cdb2968ff"
57
+ "gitHead": "103d0d1f646de275a904b75c3c874e3b3c951b1c"
58
58
  }