@salla.sa/twilight-components 2.12.68 → 2.12.71

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.
Files changed (79) hide show
  1. package/dist/cjs/{app-globals-537a7062.js → app-globals-36ab7ecf.js} +2 -2
  2. package/dist/cjs/{app-globals-537a7062.js.map → app-globals-36ab7ecf.js.map} +1 -1
  3. package/dist/cjs/loader.cjs.js +2 -2
  4. package/dist/cjs/salla-add-product-button_47.cjs.entry.js +20 -5
  5. package/dist/cjs/salla-add-product-button_47.cjs.entry.js.map +1 -1
  6. package/dist/cjs/salla-contacts.cjs.entry.js +2 -0
  7. package/dist/cjs/salla-contacts.cjs.entry.js.map +1 -1
  8. package/dist/cjs/salla-filters.cjs.entry.js +96 -3
  9. package/dist/cjs/salla-filters.cjs.entry.js.map +1 -1
  10. package/dist/cjs/twilight.cjs.js +2 -2
  11. package/dist/collection/components/salla-bottom-alert/salla-bottom-alert.js +25 -6
  12. package/dist/collection/components/salla-bottom-alert/salla-bottom-alert.js.map +1 -1
  13. package/dist/collection/components/salla-contacts/salla-contacts.js +2 -0
  14. package/dist/collection/components/salla-contacts/salla-contacts.js.map +1 -1
  15. package/dist/collection/components/salla-filters/salla-filters.js +96 -3
  16. package/dist/collection/components/salla-filters/salla-filters.js.map +1 -1
  17. package/dist/components/index.js +1 -1
  18. package/dist/components/index.js.map +1 -1
  19. package/dist/components/salla-bottom-alert.js +25 -6
  20. package/dist/components/salla-bottom-alert.js.map +1 -1
  21. package/dist/components/salla-contacts.js +2 -0
  22. package/dist/components/salla-contacts.js.map +1 -1
  23. package/dist/components/salla-filters.js +96 -3
  24. package/dist/components/salla-filters.js.map +1 -1
  25. package/dist/esm/{app-globals-7795aa55.js → app-globals-3843d7b4.js} +2 -2
  26. package/dist/esm/{app-globals-7795aa55.js.map → app-globals-3843d7b4.js.map} +1 -1
  27. package/dist/esm/loader.js +2 -2
  28. package/dist/esm/salla-add-product-button_47.entry.js +20 -5
  29. package/dist/esm/salla-add-product-button_47.entry.js.map +1 -1
  30. package/dist/esm/salla-contacts.entry.js +2 -0
  31. package/dist/esm/salla-contacts.entry.js.map +1 -1
  32. package/dist/esm/salla-filters.entry.js +96 -3
  33. package/dist/esm/salla-filters.entry.js.map +1 -1
  34. package/dist/esm/twilight.js +2 -2
  35. package/dist/esm-es5/{app-globals-7795aa55.js → app-globals-3843d7b4.js} +2 -2
  36. package/dist/{twilight/p-14c42ca3.system.js.map → esm-es5/app-globals-3843d7b4.js.map} +1 -1
  37. package/dist/esm-es5/loader.js +1 -1
  38. package/dist/esm-es5/loader.js.map +1 -1
  39. package/dist/esm-es5/salla-add-product-button_47.entry.js +1 -1
  40. package/dist/esm-es5/salla-add-product-button_47.entry.js.map +1 -1
  41. package/dist/esm-es5/salla-contacts.entry.js +1 -1
  42. package/dist/esm-es5/salla-contacts.entry.js.map +1 -1
  43. package/dist/esm-es5/salla-filters.entry.js +2 -2
  44. package/dist/esm-es5/salla-filters.entry.js.map +1 -1
  45. package/dist/esm-es5/twilight.js +1 -1
  46. package/dist/esm-es5/twilight.js.map +1 -1
  47. package/dist/twilight/{p-0b684f2a.system.entry.js → p-0a6b09fa.system.entry.js} +2 -2
  48. package/dist/twilight/p-0a6b09fa.system.entry.js.map +1 -0
  49. package/dist/twilight/p-2059b78a.system.js +5 -0
  50. package/dist/twilight/{p-a8240d5d.system.js.map → p-2059b78a.system.js.map} +1 -1
  51. package/dist/twilight/{p-bd831e45.entry.js → p-29f9af2d.entry.js} +2 -2
  52. package/dist/twilight/p-29f9af2d.entry.js.map +1 -0
  53. package/dist/twilight/p-412d8d1c.entry.js +5 -0
  54. package/dist/twilight/p-412d8d1c.entry.js.map +1 -0
  55. package/dist/twilight/{p-688e0ccc.system.entry.js → p-5bf1cc00.system.entry.js} +2 -2
  56. package/dist/twilight/p-5bf1cc00.system.entry.js.map +1 -0
  57. package/dist/twilight/{p-da02effc.js → p-66395721.js} +2 -2
  58. package/dist/twilight/{p-da02effc.js.map → p-66395721.js.map} +1 -1
  59. package/dist/twilight/{p-14c42ca3.system.js → p-75f5e4ac.system.js} +2 -2
  60. package/dist/{esm-es5/app-globals-7795aa55.js.map → twilight/p-75f5e4ac.system.js.map} +1 -1
  61. package/dist/twilight/{p-8defc948.entry.js → p-902f747a.entry.js} +2 -2
  62. package/dist/twilight/p-902f747a.entry.js.map +1 -0
  63. package/dist/twilight/p-d3520da5.system.entry.js +5 -0
  64. package/dist/twilight/p-d3520da5.system.entry.js.map +1 -0
  65. package/dist/twilight/twilight.esm.js +1 -1
  66. package/dist/twilight/twilight.esm.js.map +1 -1
  67. package/dist/twilight/twilight.js +1 -1
  68. package/dist/types/components/salla-bottom-alert/salla-bottom-alert.d.ts +5 -0
  69. package/dist/types/components/salla-filters/salla-filters.d.ts +4 -0
  70. package/package.json +5 -5
  71. package/dist/twilight/p-0b684f2a.system.entry.js.map +0 -1
  72. package/dist/twilight/p-2ad1baef.entry.js +0 -5
  73. package/dist/twilight/p-2ad1baef.entry.js.map +0 -1
  74. package/dist/twilight/p-688e0ccc.system.entry.js.map +0 -1
  75. package/dist/twilight/p-8defc948.entry.js.map +0 -1
  76. package/dist/twilight/p-a8240d5d.system.js +0 -5
  77. package/dist/twilight/p-bd831e45.entry.js.map +0 -1
  78. package/dist/twilight/p-d236e332.system.entry.js +0 -5
  79. package/dist/twilight/p-d236e332.system.entry.js.map +0 -1
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * Crafted with ❤ by Salla
3
+ */
4
+ import{r as t,c as s,h as e,H as i,g as l}from"./p-dd9b5ccb.js";import{F as a,a as n}from"./p-61ac07f6.js";const r=":host{display:block}.s-rating-stars-small{line-height:12px}.s-filters-radio{background-image:none !important}";const o=class{constructor(e){t(this,e);this.changed=s(this,"changed",7);this.isReady=false;this.filters=undefined;this.isSidebarOpen=undefined;this.filtersData={};this.apply=undefined;this.reset=undefined;salla.event.on("filters::hidden",(()=>this.host.style.display="none"));salla.lang.onLoaded((()=>{this.apply=salla.lang.get("pages.checkout.apply");this.reset=salla.lang.get("pages.categories.filters_reset")}));salla.event.on("filters::fetched",(({filters:t})=>{this.host.style.display="";let s={};this.filters=t.map((t=>{t.label={category_id:salla.lang.get("common.titles.categories"),brand_id:salla.lang.get("common.titles.brands"),rating:salla.lang.get("pages.categories.filter_rating"),price:salla.lang.get("pages.categories.filter_price")}[t.key]||t.label;t.inputType=a.RADIO;if(t.key=="rating"){t.inputType=a.RADIO;let{max:s,min:e}=t.values;t.values=[5,4,3,2,1].filter((t=>t>=e||t<=s))}if(this.filtersData[t.key]){s[t.key]=this.filtersData[t.key]}return t}));this.filtersData=s;this.host.childNodes.forEach((async t=>t.setWidgetHeight&&await t.setWidgetHeight()))}))}connectedCallback(){try{const t=new URLSearchParams(window.location.search);const s={};for(const[e,i]of t.entries()){const t=e.replace(/\]/g,"").split("[");t.reduce(((t,s,e,l)=>{const a=e===l.length-1;const n=/^\d+$/.test(s)?parseInt(s,10):s;if(a){if(/^\d+$/.test(s)){this.addObjectValue(t,l[e-1],i);return t[l[e-1]]}else if(t[n]){t[n]=[t[n],i]}else{t[n]=i}}else{t[n]=t[n]||{}}return t[n]}),s)}this.filtersData=this.flattenObject(s["filters"])||{}}catch(t){salla.logger.warn("failed to get filters from url",t.message)}}flattenObject(t){for(const s in t){if(typeof t[s]==="object"){if(t[s][s]&&Array.isArray(t[s][s])){t[s]=t[s][s]}else{this.flattenObject(t[s])}}}return t}addObjectValue(t,s,e){if(t.hasOwnProperty(s)){if(Array.isArray(t[s])){t[s].push(e)}else{t[s]=[t[s],e]}}else{t[s]=[e]}}async getFilters(){return this.filtersData}async applyFilters(){if(!this.isReady){return}let t=Object.keys(this.filtersData).length>0;setTimeout((()=>{var s;if(t){let t=new URL(window.location.href);for(const[s]of t.searchParams.entries()){if(s.startsWith("filters")){t.searchParams.delete(s)}}let s=this.encodeFilters(this.filtersData);t.search=t.search?t.search.split("&filters")[0]+"&"+s:`?${s}`;window.history.pushState({},"",t.href)}else{let t=new URL(window.location.href);(s=t.searchParams)===null||s===void 0?void 0:s.delete("filters");window.history.pushState({},"",t.toString())}salla.event.emit("salla-filters::changed",this.filtersData);this.changed.emit(this.filtersData)}),300)}encodeFilters(t,s="filters"){const e=[];for(const i in t){if(Object.prototype.hasOwnProperty.call(t,i)){const l=t[i];const a=s?`${s}[${i}]`:i;if(Array.isArray(l)){for(let t=0;t<l.length;t++){e.push(`${a}[${t}]=${l[t]}`)}}else if(typeof l==="object"&&l!==null){e.push(this.encodeFilters(l,a))}else{let t=`${a}=${l}`;e.push(t)}}}return e.join("&")}async resetFilters(){this.removeFiltersQueryParams();this.filtersData={};this.host.childNodes.forEach((t=>t.reset&&t.reset()));salla.event.emit("salla-filters::reset");return this.applyFilters()}removeFiltersQueryParams(){const t=new URLSearchParams(window.location.search);const s=Array.from(t.keys()).filter((t=>!t.startsWith("filters["))).map((s=>`${encodeURIComponent(s)}=${encodeURIComponent(t.get(s))}`)).join("&");const e=s?`${window.location.pathname}?${s}`:window.location.pathname;window.history.pushState({},"",e)}handleOptionChange(t,s,e){if(s.type===n.RANGE){this.filtersData[s.key]=e}let i=t.target.checked;if(s.type===n.VARIANTS){this.filtersData.variants=this.filtersData.variants||{};i&&(this.filtersData.variants[s.key]=e);i||delete this.filtersData.variants[s.key]}if(t.target.type==a.RADIO){i&&(this.filtersData[s.key]=e);i||delete this.filtersData[s.key]}if(t.target.type==a.CHECKBOX){this.filtersData[s.key]=this.filtersData[s.key]||[];if(i){this.filtersData[s.key].push(e)}this.filtersData[s.key]=this.filtersData[s.key].filter((t=>t!=e))}this.applyFilters()}render(){var t,s;return e(i,null,(t=this.filters)===null||t===void 0?void 0:t.map((t=>e("salla-filters-widget",{option:t,filtersData:this.filtersData,onChanged:({detail:{event:t,option:s,value:e}})=>this.handleOptionChange(t,s,e)}))),((s=this.filters)===null||s===void 0?void 0:s.length)?e("div",{class:"s-filters-footer"},e("salla-button",{color:"gray",fill:"outline",onClick:()=>this.resetFilters()},this.reset)):"")}componentDidLoad(){this.isReady=true}get host(){return l(this)}};o.style=r;export{o as salla_filters};
5
+ //# sourceMappingURL=p-412d8d1c.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["sallaFiltersCss","SallaFilters","constructor","hostRef","this","isReady","salla","event","on","host","style","display","lang","onLoaded","apply","get","reset","filters","freshFilterData","map","filter","label","category_id","brand_id","rating","price","key","inputType","FilterOptionInputType","RADIO","max","min","values","stars","filtersData","childNodes","forEach","async","widget","setWidgetHeight","connectedCallback","searchParams","URLSearchParams","window","location","search","filterObject","value","entries","keys","replace","split","reduce","obj","keyPart","index","array","isLastKey","length","finalKey","test","parseInt","addObjectValue","flattenObject","e","logger","warn","message","Array","isArray","hasOwnProperty","push","getFilters","applyFilters","hasFilters","Object","setTimeout","url","URL","href","startsWith","delete","encodedFilterValues","encodeFilters","history","pushState","_a","toString","emit","changed","parentKey","encodedFilters","prototype","call","fullKey","i","result","join","resetFilters","removeFiltersQueryParams","newUrl","from","encodeURIComponent","finalUrl","pathname","handleOptionChange","option","type","FilterOptionTypes","RANGE","isChecked","target","checked","VARIANTS","variants","CHECKBOX","val","render","h","Host","onChanged","detail","_b","class","color","fill","onClick","componentDidLoad"],"sources":["src/components/salla-filters/salla-filters.scss?tag=salla-filters","src/components/salla-filters/salla-filters.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.s-rating-stars-small {\n line-height: 12px;\n}\n.s-filters-radio{\n background-image: none !important;\n}","import { Component, Element, h, Event, EventEmitter, Host, Method, Prop, State } from '@stencil/core';\nimport { Filter, FilterOptionInputType, FilterOptionTypes } from \"./interfaces\";\n\n@Component({\n tag: 'salla-filters',\n styleUrl: 'salla-filters.scss',\n})\nexport class SallaFilters {\n\n constructor() {\n salla.event.on('filters::hidden', () => this.host.style.display = 'none');\n\n salla.lang.onLoaded(() => {\n this.apply = salla.lang.get('pages.checkout.apply');\n this.reset = salla.lang.get('pages.categories.filters_reset');\n });\n\n salla.event.on('filters::fetched', ({ filters }) => {\n this.host.style.display = '';\n let freshFilterData = {};\n this.filters = filters\n .map((filter: Filter) => {\n filter.label = {\n category_id: salla.lang.get('common.titles.categories'),\n brand_id: salla.lang.get('common.titles.brands'),\n rating: salla.lang.get('pages.categories.filter_rating'),\n price: salla.lang.get('pages.categories.filter_price'),\n }[filter.key] || filter.label;\n filter.inputType = FilterOptionInputType.RADIO;//todo:: support FilterOptionInputType.CHECKBOX\n if (filter.key == 'rating') {\n filter.inputType = FilterOptionInputType.RADIO;\n //@ts-ignore\n let { max, min } = filter.values;\n //@ts-ignore\n filter.values = [5, 4, 3, 2, 1].filter(stars => stars >= min || stars <= max)\n }\n\n //when getting new filters, maybe less than we had, so let's get from the old one, only what is existed now.\n if (this.filtersData[filter.key]) {\n freshFilterData[filter.key] = this.filtersData[filter.key];\n }\n\n return filter;\n });\n this.filtersData = freshFilterData;\n this.host.childNodes.forEach(async (widget: HTMLSallaFiltersWidgetElement) => widget.setWidgetHeight && await widget.setWidgetHeight())\n });\n }\n\n connectedCallback() {\n try {\n const searchParams = new URLSearchParams(window.location.search);\n const filterObject = {};\n\n for (const [key, value] of searchParams.entries()) {\n const keys = key.replace(/\\]/g, '').split('[');\n keys.reduce((obj, keyPart, index, array) => {\n const isLastKey = index === array.length - 1;\n const finalKey = /^\\d+$/.test(keyPart) ? parseInt(keyPart, 10) : keyPart;\n if (isLastKey) {\n if (/^\\d+$/.test(keyPart)) {\n this.addObjectValue(obj, array[index - 1], value)\n return obj[array[index - 1]];\n } else if (obj[finalKey]) {\n obj[finalKey] = [obj[finalKey], value];\n } else {\n obj[finalKey] = value;\n }\n } else {\n obj[finalKey] = obj[finalKey] || {};\n }\n\n return obj[finalKey];\n }, filterObject);\n }\n\n this.filtersData = this.flattenObject(filterObject[\"filters\"]) || {};\n } catch (e) {\n salla.logger.warn('failed to get filters from url', e.message);\n }\n\n }\n\n private flattenObject(obj: any) {\n for (const key in obj) {\n if (typeof obj[key] === 'object') {\n if (obj[key][key] && Array.isArray(obj[key][key])) {\n obj[key] = obj[key][key];\n } else {\n this.flattenObject(obj[key]);\n }\n }\n }\n return obj;\n }\n\n\n private addObjectValue(obj, key, value) {\n if (obj.hasOwnProperty(key)) {\n if (Array.isArray(obj[key])) {\n obj[key].push(value);\n } else {\n obj[key] = [obj[key], value];\n }\n } else {\n obj[key] = [value];\n }\n }\n\n\n @Element() host: HTMLElement;\n\n /**\n * Array of filter options\n */\n @Prop({ reflect: true, mutable: true }) filters?: Filter[];\n\n private isReady = false;//to avoid triggering the changed event\n\n @State() isSidebarOpen: boolean;\n @State() filtersData: object | any = {}\n @State() apply: string;\n @State() reset: string;\n\n /**\n * Custom event fired when the selected filters are changed.\n */\n @Event() changed: EventEmitter;\n\n /**\n * Method to get filter data.\n */\n @Method()\n async getFilters() {\n return this.filtersData;\n }\n\n /**\n * Apply filter action.\n */\n @Method()\n async applyFilters() {\n if (!this.isReady) {\n return;\n }\n let hasFilters = Object.keys(this.filtersData).length > 0;\n setTimeout(() => {\n if (hasFilters) {\n let url = new URL(window.location.href);\n for (const [key] of url.searchParams.entries()) {\n if (key.startsWith(\"filters\")) {\n url.searchParams.delete(key);\n }\n }\n let encodedFilterValues = this.encodeFilters(this.filtersData)\n url.search = url.search ? url.search.split(\"&filters\")[0] + \"&\" + encodedFilterValues : `?${encodedFilterValues}`;\n window.history.pushState({}, '', url.href);\n } else {\n let url = new URL(window.location.href);\n url.searchParams?.delete('filters');\n window.history.pushState({}, '', url.toString());\n }\n salla.event.emit('salla-filters::changed', this.filtersData);\n this.changed.emit(this.filtersData);\n }, 300);\n }\n\n private encodeFilters(filters, parentKey = 'filters') {\n const encodedFilters = [];\n\n for (const key in filters) {\n if (Object.prototype.hasOwnProperty.call(filters, key)) {\n const value = filters[key];\n\n const fullKey = parentKey ? `${parentKey}[${key}]` : key;\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n encodedFilters.push(`${fullKey}[${i}]=${value[i]}`)\n }\n }\n else if (typeof value === 'object' && value !== null) {\n encodedFilters.push(this.encodeFilters(value, fullKey));\n } else {\n // const encodedKey = encodeURIComponent(fullKey);\n // const encodedValue = encodeURIComponent(value);\n let result = `${fullKey}=${value}`\n encodedFilters.push(result);\n }\n }\n }\n return encodedFilters.join('&');\n };\n\n /**\n * Reset selected filters.\n */\n @Method()\n async resetFilters() {\n this.removeFiltersQueryParams()\n this.filtersData = {};\n this.host.childNodes.forEach((widget: HTMLSallaFiltersWidgetElement) => widget.reset && widget.reset())\n salla.event.emit('salla-filters::reset');\n return this.applyFilters();\n }\n\n private removeFiltersQueryParams() {\n const searchParams = new URLSearchParams(window.location.search);\n\n const newUrl = Array.from(searchParams.keys())\n .filter(key => !key.startsWith('filters['))\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(searchParams.get(key))}`)\n .join('&');\n\n const finalUrl = newUrl ? `${window.location.pathname}?${newUrl}` : window.location.pathname;\n window.history.pushState({}, '', finalUrl);\n }\n\n /**\n * @param {{target:HTMLInputElement}} event\n * @param option\n * @param value\n * @private\n */\n private handleOptionChange(event, option: Filter, value) {\n if (option.type === FilterOptionTypes.RANGE) {\n this.filtersData[option.key] = value;\n\n }\n let isChecked = event.target.checked;\n\n if (option.type === FilterOptionTypes.VARIANTS) {\n this.filtersData.variants = this.filtersData.variants || {};\n isChecked && (this.filtersData.variants[option.key] = value);\n isChecked || (delete this.filtersData.variants[option.key]);\n\n }\n\n if (event.target.type == FilterOptionInputType.RADIO) {\n isChecked && (this.filtersData[option.key] = value);\n isChecked || (delete this.filtersData[option.key]);\n }\n\n //it's checkbox\n // add if condition to avoid error when the filter is not existed in the filtersData\n if (event.target.type == FilterOptionInputType.CHECKBOX) {\n this.filtersData[option.key] = this.filtersData[option.key] || [];\n if (isChecked) {\n this.filtersData[option.key].push(value);\n\n }\n this.filtersData[option.key] = this.filtersData[option.key].filter(val => val != value);\n }\n this.applyFilters();\n }\n\n render() {\n return <Host>\n {this.filters?.map(option => <salla-filters-widget\n option={option}\n filtersData={this.filtersData}\n onChanged={({ detail: { event, option, value } }) => this.handleOptionChange(event, option, value)} />)}\n\n {this.filters?.length ? <div class=\"s-filters-footer\">\n {/* <salla-button color='primary' onClick={() => this.applyFilters()}>{this.apply}</salla-button> */}\n <salla-button color='gray' fill='outline' onClick={() => this.resetFilters()}>{this.reset}</salla-button>\n </div> : ''}\n </Host>;\n }\n\n componentDidLoad() {\n this.isReady = true;\n }\n}\n\n"],"mappings":"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"}