@salla.sa/twilight-components 2.13.42 → 2.13.43

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 (32) hide show
  1. package/dist/cjs/app-globals-45feca8f.js.map +1 -1
  2. package/dist/cjs/salla-add-product-button_47.cjs.entry.js.map +1 -1
  3. package/dist/cjs/salla-reviews.cjs.entry.js +2 -1
  4. package/dist/cjs/salla-reviews.cjs.entry.js.map +1 -1
  5. package/dist/collection/components/salla-reviews/salla-reviews.js +2 -1
  6. package/dist/collection/components/salla-reviews/salla-reviews.js.map +1 -1
  7. package/dist/components/index.js.map +1 -1
  8. package/dist/components/salla-quick-buy2.js.map +1 -1
  9. package/dist/components/salla-reviews.js +2 -1
  10. package/dist/components/salla-reviews.js.map +1 -1
  11. package/dist/esm/app-globals-486fea68.js.map +1 -1
  12. package/dist/esm/salla-add-product-button_47.entry.js.map +1 -1
  13. package/dist/esm/salla-reviews.entry.js +2 -1
  14. package/dist/esm/salla-reviews.entry.js.map +1 -1
  15. package/dist/esm-es5/app-globals-486fea68.js.map +1 -1
  16. package/dist/esm-es5/salla-add-product-button_47.entry.js.map +1 -1
  17. package/dist/esm-es5/salla-reviews.entry.js +1 -1
  18. package/dist/esm-es5/salla-reviews.entry.js.map +1 -1
  19. package/dist/twilight/p-6005717c.system.js.map +1 -1
  20. package/dist/twilight/{p-f82c4cd5.system.entry.js → p-6b99863e.system.entry.js} +2 -2
  21. package/dist/twilight/p-6b99863e.system.entry.js.map +1 -0
  22. package/dist/twilight/p-6c7b9377.entry.js.map +1 -1
  23. package/dist/twilight/p-9ca75cfb.system.entry.js.map +1 -1
  24. package/dist/twilight/p-bf392e76.system.js +1 -1
  25. package/dist/twilight/p-c1d20d62.js.map +1 -1
  26. package/dist/twilight/{p-d38e7783.entry.js → p-f209fb12.entry.js} +2 -2
  27. package/dist/twilight/p-f209fb12.entry.js.map +1 -0
  28. package/dist/twilight/twilight.esm.js +1 -1
  29. package/dist/types/global.d.ts +20 -0
  30. package/package.json +5 -5
  31. package/dist/twilight/p-d38e7783.entry.js.map +0 -1
  32. package/dist/twilight/p-f82c4cd5.system.entry.js.map +0 -1
@@ -57,8 +57,9 @@ const SallaReviews = class {
57
57
  componentWillLoad() {
58
58
  return (new Promise(resolve => salla.onReady(resolve)))
59
59
  .then(() => this.fetchReviews())
60
+ .then((resp) => resp.data || [])
60
61
  .then(reviews => {
61
- if (reviews.length > 0) {
62
+ if (reviews.length) {
62
63
  this.reviews = reviews;
63
64
  this.showReviews = true;
64
65
  Helper.Helper.generateReviewSchema(this.reviews);
@@ -1 +1 @@
1
- {"file":"salla-reviews.entry.cjs.js","mappings":";;;;;;;;;;;;;;;;;;;AAAA,MAAM,eAAe,GAAG,EAAE;;MCYb,YAAY;EACvB;;IAkEQ,kBAAa,GAAG,IAAI,CAAA;;kBA7Bc,OAAO;;iBAoBhB,CAAC;mBAGA,EAAE;;uBAEJ,KAAK;2BACF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;8BACvC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;IA/D7E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1B,KAAK,CAAC,OAAO,CAAC;MACZ,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;MAClD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;KACpD,CAAC,CAAA;IAEF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;MAClB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;MACjE,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;KACpE,CAAC,CAAA;GACH;EAyDD,YAAY;IACV,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;MAC1B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAqB,CAAC,CAAC,CAAC;KAChE;IACD,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG;MACb,QAAQ,EAAE,IAAI,CAAC,KAAK;MACpB,IAAI,EAAE,IAAI,CAAC,MAAM;MACjB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAqB,CAAC,GAAG,IAAI,CAAC,WAAW;KACjF,CAAC;IACF,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;GACxD;EAGD,iBAAiB;IACf,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;OACrD,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;OAC/B,IAAI,CAAC,OAAO;MACX,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxBA,aAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;OAC3C;KACF,CAAC,CAAC;GACJ;EAED,MAAM;IACJ,QACEC,iBAAK,KAAK,EAAC,qBAAqB,IAC9BA,iBAAK,KAAK,EAAC,0BAA0B,IACnCA,gBAAI,KAAK,EAAC,kBAAkB,IACzB,IAAI,CAAC,eAAe,CAClB,EACJ,CAAC,CAAC,IAAI,CAAC,cAAc,IACpBA,eAAG,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,EAAC,uBAAuB,IACvD,IAAI,CAAC,kBAAkB,EACxBA,kBAAM,KAAK,EAAC,4BAA4B,EAAC,SAAS,EAAEC,mBAAa,GAAI,CACnE,IACF,IAAI,CACJ,EACND,0BACE,QAAQ,2BACS,CAAC,EAClB,IAAI,EAAC,cAAc,EACnB,KAAK,EAAC,+BAA+B,6CAGrC,EAAE,EAAE,gBAAgB,IAAI,CAAC,MAAM,SAAS,IAExCA,iBAAK,IAAI,EAAC,OAAO,IACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAY,EAAEE,OAAK,MACpCF,iBAAK,GAAG,EAAEE,OAAK,EAAE,KAAK,EAAC,wBAAwB,IAC7CF,iBAAK,KAAK,EAAC,uBAAuB,IAChCA,iBAAK,KAAK,EAAC,8BAA8B,IACvCA,iBAAK,KAAK,EAAC,+BAA+B,IACxCA,iBACE,GAAG,EAAE,oBAAoB,cACf,IAAI,CAAC,MAAM,EACrB,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,cAAc,GAAGE,OAAK,EACnD,KAAK,EAAC,MAAM,GACZ,CACE,EACNF,iBAAK,KAAK,EAAC,6BAA6B,IACtCA,mBAAI,IAAI,CAAC,IAAI,CAAK,EAClBA,iBAAK,KAAK,EAAC,qCAAqC,IAC9CA,iBAAK,KAAK,EAAC,6BAA6B,IACrC,IAAI,CAAC,IAAI,IAAIA,oBAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAM,CACnC,EACNA,iBAAK,KAAK,EAAC,+BAA+B,IAExCA,gCAAoB,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAuB,CACtE,CACF,CACF,EAENA,kBAAM,KAAK,EAAC,6BAA6B,EAAC,SAAS,EAAE,aAAa,GAAI,CAClE,CACF,CACF,CACP,CAAC,CACE,CACO,CACX,EACN;GACH;;;;;;","names":["Helper","h","IconArrowLeft","index"],"sources":["src/components/salla-reviews/salla-reviews.scss?tag=salla-reviews","src/components/salla-reviews/salla-reviews.tsx"],"sourcesContent":["","import { Component, Prop, State, h } from '@stencil/core';\nimport IconArrowLeft from '../../assets/svg/arrow-left.svg'\nimport IconQuoteOpen from '../../assets/svg/quote-open.svg'\n\nimport {Source, Review} from \"./interfaces\"\nimport Helper from '../../Helpers/Helper';\n\n\n@Component({\n tag: 'salla-reviews',\n styleUrl: 'salla-reviews.scss',\n})\nexport class SallaReviews {\n constructor(){\n this.source = this.source;\n salla.onReady(() => {\n this.displayAllURL = salla.url.get('testimonials')\n this.isRTL = salla.config.get('theme.is_rtl', true)\n })\n\n salla.lang.onLoaded(() => { \n this.testimonialText = salla.lang.get('blocks.home.testimonials')\n this.displayAllLinkText = salla.lang.get('blocks.home.display_all')\n })\n }\n\n /**\n * Controls the visibility of a link to the reviews page.\n * \n * When set to `true`, a link will be displayed allowing users to navigate to the full reviews section.\n * \n * @type {boolean}\n */\n @Prop({ reflect: true }) displayAllLink: boolean\n\n /**\n * Specifies the data source for reviews.\n * \n * Valid options include:\n * - 'store': Retrieves reviews for the entire store.\n * - 'all': Retrieves reviews from all sources.\n * - 'categories': Retrieves reviews for specific product categories.\n * - 'products': Retrieves reviews for individual products.\n * - 'json': Retrieves reviews from a custom JSON payload provided in `sourceValue`.\n * \n * When using 'json' as the source, a valid payload must be provided in `sourceValue`.\n * \n * @type {Source}\n * @default \"store\"\n */\n @Prop({ reflect: true }) source: Source = \"store\";\n\n /**\n * Provides data specific to the chosen source.\n * \n * Required when using 'categories', 'products', or 'json' as the source:\n * - 'categories': An array of category IDs.\n * - 'products': An array of product IDs.\n * - 'json': A custom JSON object containing review data.\n * \n * @type {number | string | object | Array<string | number>}\n */\n @Prop({ reflect: true }) sourceValue: number | string | object | Array<string | number>;\n\n /**\n * Defines the maximum number of reviews to retrieve from the API.\n * \n * @type {number}\n * @default 5\n */\n @Prop({ reflect: true }) limit = 5\n\n\n @State() reviews: Array<Review> = [];\n @State() isRTL: boolean\n @State() showReviews: boolean = false;\n @State() testimonialText: string = salla.lang.get('blocks.home.testimonials');\n @State() displayAllLinkText: string = salla.lang.get('blocks.home.display_all');\n\n private displayAllURL = null\n\n fetchReviews() {\n if (this.source === 'json') {\n return Promise.resolve(JSON.parse(this.sourceValue as string));\n }\n const isJsonEncoded = ['products', 'categories'].includes(this.source);\n const params = {\n per_page: this.limit,\n type: this.source,\n items: isJsonEncoded ? JSON.parse(this.sourceValue as string) : this.sourceValue,\n };\n return salla.api.request('reviews', { params }, 'get');\n }\n\n\n componentWillLoad() {\n return (new Promise(resolve => salla.onReady(resolve)))\n .then(() => this.fetchReviews())\n .then(reviews => {\n if (reviews.length > 0) {\n this.reviews = reviews;\n this.showReviews = true;\n Helper.generateReviewSchema(this.reviews);\n }\n });\n }\n\n render() {\n return (\n <div class=\"s-reviews-container\">\n <div class=\"s-reviews-header-wrapper\">\n <h1 class=\"s-reviews-header\">\n {this.testimonialText}\n </h1>\n {!!this.displayAllLink ? (\n <a href={this.displayAllURL} class=\"s-reviews-display-all\">\n {this.displayAllLinkText}\n <span class=\"s-reviews-display-all-icon\" innerHTML={IconArrowLeft} />\n </a>\n ) : null}\n </div>\n <salla-slider\n centered\n slides-per-view={1}\n type=\"testimonials\"\n class=\"s-reviews-testimonials-slider\"\n controls-outer\n auto-play\n id={`testimonials-${this.source}-slider`}\n >\n <div slot=\"items\">\n {this.reviews.map((item: Review, index) => (\n <div key={index} class=\"s-reviews-swiper-slide\">\n <div class=\"s-reviews-testimonial\">\n <div class=\"s-reviews-testimonial__inner\">\n <div class=\"s-reviews-testimonial__avatar\">\n <img\n src={'images/s-empty.png'}\n data-src={item.avatar}\n alt={item.name ? item.name : 'testimonial-' + index}\n class=\"lazy\"\n />\n </div>\n <div class=\"s-reviews-testimonial__text\">\n <p>{item.text}</p>\n <div class=\"s-reviews-testimonial__name_wrapper\">\n <div class=\"s-reviews-testimonial__info\">\n {item.name && <h2>{`${item.name}`}</h2>}\n </div>\n <div class=\"s-reviews-testimonial__rating\">\n {/* TODO stars is missing */}\n <salla-rating-stars size=\"small\" value={item.rating}></salla-rating-stars>\n </div>\n </div>\n </div>\n\n <span class=\"s-reviews-testimonial__icon\" innerHTML={IconQuoteOpen} />\n </div>\n </div>\n </div>\n ))}\n </div>\n </salla-slider>\n </div>\n );\n }\n\n}\n\n"],"version":3}
1
+ {"file":"salla-reviews.entry.cjs.js","mappings":"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","names":["Helper","h","IconArrowLeft","index"],"sources":["src/components/salla-reviews/salla-reviews.scss?tag=salla-reviews","src/components/salla-reviews/salla-reviews.tsx"],"sourcesContent":["","import { Component, Prop, State, h } from '@stencil/core';\nimport IconArrowLeft from '../../assets/svg/arrow-left.svg'\nimport IconQuoteOpen from '../../assets/svg/quote-open.svg'\n\nimport {Source, Review} from \"./interfaces\"\nimport Helper from '../../Helpers/Helper';\n\n\n@Component({\n tag: 'salla-reviews',\n styleUrl: 'salla-reviews.scss',\n})\nexport class SallaReviews {\n constructor(){\n this.source = this.source;\n salla.onReady(() => {\n this.displayAllURL = salla.url.get('testimonials')\n this.isRTL = salla.config.get('theme.is_rtl', true)\n })\n\n salla.lang.onLoaded(() => { \n this.testimonialText = salla.lang.get('blocks.home.testimonials')\n this.displayAllLinkText = salla.lang.get('blocks.home.display_all')\n })\n }\n\n /**\n * Controls the visibility of a link to the reviews page.\n * \n * When set to `true`, a link will be displayed allowing users to navigate to the full reviews section.\n * \n * @type {boolean}\n */\n @Prop({ reflect: true }) displayAllLink: boolean\n\n /**\n * Specifies the data source for reviews.\n * \n * Valid options include:\n * - 'store': Retrieves reviews for the entire store.\n * - 'all': Retrieves reviews from all sources.\n * - 'categories': Retrieves reviews for specific product categories.\n * - 'products': Retrieves reviews for individual products.\n * - 'json': Retrieves reviews from a custom JSON payload provided in `sourceValue`.\n * \n * When using 'json' as the source, a valid payload must be provided in `sourceValue`.\n * \n * @type {Source}\n * @default \"store\"\n */\n @Prop({ reflect: true }) source: Source = \"store\";\n\n /**\n * Provides data specific to the chosen source.\n * \n * Required when using 'categories', 'products', or 'json' as the source:\n * - 'categories': An array of category IDs.\n * - 'products': An array of product IDs.\n * - 'json': A custom JSON object containing review data.\n * \n * @type {number | string | object | Array<string | number>}\n */\n @Prop({ reflect: true }) sourceValue: number | string | object | Array<string | number>;\n\n /**\n * Defines the maximum number of reviews to retrieve from the API.\n * \n * @type {number}\n * @default 5\n */\n @Prop({ reflect: true }) limit = 5\n\n\n @State() reviews: Array<Review> = [];\n @State() isRTL: boolean\n @State() showReviews: boolean = false;\n @State() testimonialText: string = salla.lang.get('blocks.home.testimonials');\n @State() displayAllLinkText: string = salla.lang.get('blocks.home.display_all');\n\n private displayAllURL = null\n\n fetchReviews() {\n if (this.source === 'json') {\n return Promise.resolve(JSON.parse(this.sourceValue as string));\n }\n const isJsonEncoded = ['products', 'categories'].includes(this.source);\n const params = {\n per_page: this.limit,\n type: this.source,\n items: isJsonEncoded ? JSON.parse(this.sourceValue as string) : this.sourceValue,\n };\n return salla.api.request('reviews', { params }, 'get');\n }\n\n\n componentWillLoad() {\n return (new Promise(resolve => salla.onReady(resolve)))\n .then(() => this.fetchReviews())\n .then((resp) => resp.data || [])\n .then(reviews => {\n if (reviews.length) {\n this.reviews = reviews;\n this.showReviews = true;\n Helper.generateReviewSchema(this.reviews);\n }\n });\n }\n\n render() {\n return (\n <div class=\"s-reviews-container\">\n <div class=\"s-reviews-header-wrapper\">\n <h1 class=\"s-reviews-header\">\n {this.testimonialText}\n </h1>\n {!!this.displayAllLink ? (\n <a href={this.displayAllURL} class=\"s-reviews-display-all\">\n {this.displayAllLinkText}\n <span class=\"s-reviews-display-all-icon\" innerHTML={IconArrowLeft} />\n </a>\n ) : null}\n </div>\n <salla-slider\n centered\n slides-per-view={1}\n type=\"testimonials\"\n class=\"s-reviews-testimonials-slider\"\n controls-outer\n auto-play\n id={`testimonials-${this.source}-slider`}\n >\n <div slot=\"items\">\n {this.reviews.map((item: Review, index) => (\n <div key={index} class=\"s-reviews-swiper-slide\">\n <div class=\"s-reviews-testimonial\">\n <div class=\"s-reviews-testimonial__inner\">\n <div class=\"s-reviews-testimonial__avatar\">\n <img\n src={'images/s-empty.png'}\n data-src={item.avatar}\n alt={item.name ? item.name : 'testimonial-' + index}\n class=\"lazy\"\n />\n </div>\n <div class=\"s-reviews-testimonial__text\">\n <p>{item.text}</p>\n <div class=\"s-reviews-testimonial__name_wrapper\">\n <div class=\"s-reviews-testimonial__info\">\n {item.name && <h2>{`${item.name}`}</h2>}\n </div>\n <div class=\"s-reviews-testimonial__rating\">\n {/* TODO stars is missing */}\n <salla-rating-stars size=\"small\" value={item.rating}></salla-rating-stars>\n </div>\n </div>\n </div>\n\n <span class=\"s-reviews-testimonial__icon\" innerHTML={IconQuoteOpen} />\n </div>\n </div>\n </div>\n ))}\n </div>\n </salla-slider>\n </div>\n );\n }\n\n}\n\n"],"version":3}
@@ -42,8 +42,9 @@ export class SallaReviews {
42
42
  componentWillLoad() {
43
43
  return (new Promise(resolve => salla.onReady(resolve)))
44
44
  .then(() => this.fetchReviews())
45
+ .then((resp) => resp.data || [])
45
46
  .then(reviews => {
46
- if (reviews.length > 0) {
47
+ if (reviews.length) {
47
48
  this.reviews = reviews;
48
49
  this.showReviews = true;
49
50
  Helper.generateReviewSchema(this.reviews);
@@ -1 +1 @@
1
- {"version":3,"file":"salla-reviews.js","sourceRoot":"","sources":["../../../src/components/salla-reviews/salla-reviews.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,aAAa,MAAM,iCAAiC,CAAA;AAC3D,OAAO,aAAa,MAAM,iCAAiC,CAAA;AAG3D,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAO1C,MAAM,OAAO,YAAY;EACvB;IAkEQ,kBAAa,GAAG,IAAI,CAAA;;kBA7Bc,OAAO;;iBAoBhB,CAAC;mBAGA,EAAE;;uBAEJ,KAAK;2BACF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC;8BACvC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC;IA/D7E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1B,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;MACjB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;MAClD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;MACvB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;MACjE,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;GACH;EAyDD,YAAY;IACV,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;MAC1B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAqB,CAAC,CAAC,CAAC;KAChE;IACD,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG;MACb,QAAQ,EAAE,IAAI,CAAC,KAAK;MACpB,IAAI,EAAE,IAAI,CAAC,MAAM;MACjB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;KACjF,CAAC;IACF,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;EACzD,CAAC;EAGD,iBAAiB;IACf,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;OACtD,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;OAC/B,IAAI,CAAC,OAAO,CAAC,EAAE;MACd,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;OAC3C;IACH,CAAC,CAAC,CAAC;EACL,CAAC;EAED,MAAM;IACJ,OAAO,CACL,WAAK,KAAK,EAAC,qBAAqB;MAC9B,WAAK,KAAK,EAAC,0BAA0B;QACnC,UAAI,KAAK,EAAC,kBAAkB,IACzB,IAAI,CAAC,eAAe,CAClB;QACJ,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CACvB,SAAG,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,EAAC,uBAAuB;UACvD,IAAI,CAAC,kBAAkB;UACxB,YAAM,KAAK,EAAC,4BAA4B,EAAC,SAAS,EAAE,aAAa,GAAI,CACnE,CACL,CAAC,CAAC,CAAC,IAAI,CACJ;MACN,oBACE,QAAQ,2BACS,CAAC,EAClB,IAAI,EAAC,cAAc,EACnB,KAAK,EAAC,+BAA+B,6CAGrC,EAAE,EAAE,gBAAgB,IAAI,CAAC,MAAM,SAAS;QAExC,WAAK,IAAI,EAAC,OAAO,IACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CACzC,WAAK,GAAG,EAAE,KAAK,EAAE,KAAK,EAAC,wBAAwB;UAC7C,WAAK,KAAK,EAAC,uBAAuB;YAChC,WAAK,KAAK,EAAC,8BAA8B;cACvC,WAAK,KAAK,EAAC,+BAA+B;gBACxC,WACE,GAAG,EAAE,oBAAoB,cACf,IAAI,CAAC,MAAM,EACrB,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,GAAG,KAAK,EACnD,KAAK,EAAC,MAAM,GACZ,CACE;cACN,WAAK,KAAK,EAAC,6BAA6B;gBACtC,aAAI,IAAI,CAAC,IAAI,CAAK;gBAClB,WAAK,KAAK,EAAC,qCAAqC;kBAC9C,WAAK,KAAK,EAAC,6BAA6B,IACrC,IAAI,CAAC,IAAI,IAAI,cAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAM,CACnC;kBACN,WAAK,KAAK,EAAC,+BAA+B;oBAExC,0BAAoB,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAuB,CACtE,CACF,CACF;cAEN,YAAM,KAAK,EAAC,6BAA6B,EAAC,SAAS,EAAE,aAAa,GAAI,CAClE,CACF,CACF,CACP,CAAC,CACE,CACO,CACX,CACP,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAEF","sourcesContent":["import { Component, Prop, State, h } from '@stencil/core';\nimport IconArrowLeft from '../../assets/svg/arrow-left.svg'\nimport IconQuoteOpen from '../../assets/svg/quote-open.svg'\n\nimport {Source, Review} from \"./interfaces\"\nimport Helper from '../../Helpers/Helper';\n\n\n@Component({\n tag: 'salla-reviews',\n styleUrl: 'salla-reviews.scss',\n})\nexport class SallaReviews {\n constructor(){\n this.source = this.source;\n salla.onReady(() => {\n this.displayAllURL = salla.url.get('testimonials')\n this.isRTL = salla.config.get('theme.is_rtl', true)\n })\n\n salla.lang.onLoaded(() => { \n this.testimonialText = salla.lang.get('blocks.home.testimonials')\n this.displayAllLinkText = salla.lang.get('blocks.home.display_all')\n })\n }\n\n /**\n * Controls the visibility of a link to the reviews page.\n * \n * When set to `true`, a link will be displayed allowing users to navigate to the full reviews section.\n * \n * @type {boolean}\n */\n @Prop({ reflect: true }) displayAllLink: boolean\n\n /**\n * Specifies the data source for reviews.\n * \n * Valid options include:\n * - 'store': Retrieves reviews for the entire store.\n * - 'all': Retrieves reviews from all sources.\n * - 'categories': Retrieves reviews for specific product categories.\n * - 'products': Retrieves reviews for individual products.\n * - 'json': Retrieves reviews from a custom JSON payload provided in `sourceValue`.\n * \n * When using 'json' as the source, a valid payload must be provided in `sourceValue`.\n * \n * @type {Source}\n * @default \"store\"\n */\n @Prop({ reflect: true }) source: Source = \"store\";\n\n /**\n * Provides data specific to the chosen source.\n * \n * Required when using 'categories', 'products', or 'json' as the source:\n * - 'categories': An array of category IDs.\n * - 'products': An array of product IDs.\n * - 'json': A custom JSON object containing review data.\n * \n * @type {number | string | object | Array<string | number>}\n */\n @Prop({ reflect: true }) sourceValue: number | string | object | Array<string | number>;\n\n /**\n * Defines the maximum number of reviews to retrieve from the API.\n * \n * @type {number}\n * @default 5\n */\n @Prop({ reflect: true }) limit = 5\n\n\n @State() reviews: Array<Review> = [];\n @State() isRTL: boolean\n @State() showReviews: boolean = false;\n @State() testimonialText: string = salla.lang.get('blocks.home.testimonials');\n @State() displayAllLinkText: string = salla.lang.get('blocks.home.display_all');\n\n private displayAllURL = null\n\n fetchReviews() {\n if (this.source === 'json') {\n return Promise.resolve(JSON.parse(this.sourceValue as string));\n }\n const isJsonEncoded = ['products', 'categories'].includes(this.source);\n const params = {\n per_page: this.limit,\n type: this.source,\n items: isJsonEncoded ? JSON.parse(this.sourceValue as string) : this.sourceValue,\n };\n return salla.api.request('reviews', { params }, 'get');\n }\n\n\n componentWillLoad() {\n return (new Promise(resolve => salla.onReady(resolve)))\n .then(() => this.fetchReviews())\n .then(reviews => {\n if (reviews.length > 0) {\n this.reviews = reviews;\n this.showReviews = true;\n Helper.generateReviewSchema(this.reviews);\n }\n });\n }\n\n render() {\n return (\n <div class=\"s-reviews-container\">\n <div class=\"s-reviews-header-wrapper\">\n <h1 class=\"s-reviews-header\">\n {this.testimonialText}\n </h1>\n {!!this.displayAllLink ? (\n <a href={this.displayAllURL} class=\"s-reviews-display-all\">\n {this.displayAllLinkText}\n <span class=\"s-reviews-display-all-icon\" innerHTML={IconArrowLeft} />\n </a>\n ) : null}\n </div>\n <salla-slider\n centered\n slides-per-view={1}\n type=\"testimonials\"\n class=\"s-reviews-testimonials-slider\"\n controls-outer\n auto-play\n id={`testimonials-${this.source}-slider`}\n >\n <div slot=\"items\">\n {this.reviews.map((item: Review, index) => (\n <div key={index} class=\"s-reviews-swiper-slide\">\n <div class=\"s-reviews-testimonial\">\n <div class=\"s-reviews-testimonial__inner\">\n <div class=\"s-reviews-testimonial__avatar\">\n <img\n src={'images/s-empty.png'}\n data-src={item.avatar}\n alt={item.name ? item.name : 'testimonial-' + index}\n class=\"lazy\"\n />\n </div>\n <div class=\"s-reviews-testimonial__text\">\n <p>{item.text}</p>\n <div class=\"s-reviews-testimonial__name_wrapper\">\n <div class=\"s-reviews-testimonial__info\">\n {item.name && <h2>{`${item.name}`}</h2>}\n </div>\n <div class=\"s-reviews-testimonial__rating\">\n {/* TODO stars is missing */}\n <salla-rating-stars size=\"small\" value={item.rating}></salla-rating-stars>\n </div>\n </div>\n </div>\n\n <span class=\"s-reviews-testimonial__icon\" innerHTML={IconQuoteOpen} />\n </div>\n </div>\n </div>\n ))}\n </div>\n </salla-slider>\n </div>\n );\n }\n\n}\n\n"]}
1
+ {"version":3,"file":"salla-reviews.js","sourceRoot":"","sources":["../../../src/components/salla-reviews/salla-reviews.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, State, h } from '@stencil/core';\nimport IconArrowLeft from '../../assets/svg/arrow-left.svg'\nimport IconQuoteOpen from '../../assets/svg/quote-open.svg'\n\nimport {Source, Review} from \"./interfaces\"\nimport Helper from '../../Helpers/Helper';\n\n\n@Component({\n tag: 'salla-reviews',\n styleUrl: 'salla-reviews.scss',\n})\nexport class SallaReviews {\n constructor(){\n this.source = this.source;\n salla.onReady(() => {\n this.displayAllURL = salla.url.get('testimonials')\n this.isRTL = salla.config.get('theme.is_rtl', true)\n })\n\n salla.lang.onLoaded(() => { \n this.testimonialText = salla.lang.get('blocks.home.testimonials')\n this.displayAllLinkText = salla.lang.get('blocks.home.display_all')\n })\n }\n\n /**\n * Controls the visibility of a link to the reviews page.\n * \n * When set to `true`, a link will be displayed allowing users to navigate to the full reviews section.\n * \n * @type {boolean}\n */\n @Prop({ reflect: true }) displayAllLink: boolean\n\n /**\n * Specifies the data source for reviews.\n * \n * Valid options include:\n * - 'store': Retrieves reviews for the entire store.\n * - 'all': Retrieves reviews from all sources.\n * - 'categories': Retrieves reviews for specific product categories.\n * - 'products': Retrieves reviews for individual products.\n * - 'json': Retrieves reviews from a custom JSON payload provided in `sourceValue`.\n * \n * When using 'json' as the source, a valid payload must be provided in `sourceValue`.\n * \n * @type {Source}\n * @default \"store\"\n */\n @Prop({ reflect: true }) source: Source = \"store\";\n\n /**\n * Provides data specific to the chosen source.\n * \n * Required when using 'categories', 'products', or 'json' as the source:\n * - 'categories': An array of category IDs.\n * - 'products': An array of product IDs.\n * - 'json': A custom JSON object containing review data.\n * \n * @type {number | string | object | Array<string | number>}\n */\n @Prop({ reflect: true }) sourceValue: number | string | object | Array<string | number>;\n\n /**\n * Defines the maximum number of reviews to retrieve from the API.\n * \n * @type {number}\n * @default 5\n */\n @Prop({ reflect: true }) limit = 5\n\n\n @State() reviews: Array<Review> = [];\n @State() isRTL: boolean\n @State() showReviews: boolean = false;\n @State() testimonialText: string = salla.lang.get('blocks.home.testimonials');\n @State() displayAllLinkText: string = salla.lang.get('blocks.home.display_all');\n\n private displayAllURL = null\n\n fetchReviews() {\n if (this.source === 'json') {\n return Promise.resolve(JSON.parse(this.sourceValue as string));\n }\n const isJsonEncoded = ['products', 'categories'].includes(this.source);\n const params = {\n per_page: this.limit,\n type: this.source,\n items: isJsonEncoded ? JSON.parse(this.sourceValue as string) : this.sourceValue,\n };\n return salla.api.request('reviews', { params }, 'get');\n }\n\n\n componentWillLoad() {\n return (new Promise(resolve => salla.onReady(resolve)))\n .then(() => this.fetchReviews())\n .then((resp) => resp.data || [])\n .then(reviews => {\n if (reviews.length) {\n this.reviews = reviews;\n this.showReviews = true;\n Helper.generateReviewSchema(this.reviews);\n }\n });\n }\n\n render() {\n return (\n <div class=\"s-reviews-container\">\n <div class=\"s-reviews-header-wrapper\">\n <h1 class=\"s-reviews-header\">\n {this.testimonialText}\n </h1>\n {!!this.displayAllLink ? (\n <a href={this.displayAllURL} class=\"s-reviews-display-all\">\n {this.displayAllLinkText}\n <span class=\"s-reviews-display-all-icon\" innerHTML={IconArrowLeft} />\n </a>\n ) : null}\n </div>\n <salla-slider\n centered\n slides-per-view={1}\n type=\"testimonials\"\n class=\"s-reviews-testimonials-slider\"\n controls-outer\n auto-play\n id={`testimonials-${this.source}-slider`}\n >\n <div slot=\"items\">\n {this.reviews.map((item: Review, index) => (\n <div key={index} class=\"s-reviews-swiper-slide\">\n <div class=\"s-reviews-testimonial\">\n <div class=\"s-reviews-testimonial__inner\">\n <div class=\"s-reviews-testimonial__avatar\">\n <img\n src={'images/s-empty.png'}\n data-src={item.avatar}\n alt={item.name ? item.name : 'testimonial-' + index}\n class=\"lazy\"\n />\n </div>\n <div class=\"s-reviews-testimonial__text\">\n <p>{item.text}</p>\n <div class=\"s-reviews-testimonial__name_wrapper\">\n <div class=\"s-reviews-testimonial__info\">\n {item.name && <h2>{`${item.name}`}</h2>}\n </div>\n <div class=\"s-reviews-testimonial__rating\">\n {/* TODO stars is missing */}\n <salla-rating-stars size=\"small\" value={item.rating}></salla-rating-stars>\n </div>\n </div>\n </div>\n\n <span class=\"s-reviews-testimonial__icon\" innerHTML={IconQuoteOpen} />\n </div>\n </div>\n </div>\n ))}\n </div>\n </salla-slider>\n </div>\n );\n }\n\n}\n\n"]}