@salla.sa/twilight-components 2.10.7 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/cjs/{app-globals-da038c01.js → app-globals-ffcb56c9.js} +1 -1
  2. package/dist/cjs/loader.cjs.js +2 -2
  3. package/dist/cjs/salla-button_37.cjs.entry.js +226 -107
  4. package/dist/cjs/twilight.cjs.js +2 -2
  5. package/dist/collection/components/salla-file-upload/salla-file-upload.js +69 -6
  6. package/dist/collection/components/salla-gifting/salla-gifting.js +25 -41
  7. package/dist/collection/components/salla-login-modal/intefaces.js +9 -0
  8. package/dist/collection/components/salla-login-modal/salla-login-modal.js +61 -3
  9. package/dist/collection/components/salla-map/salla-map.js +10 -8
  10. package/dist/collection/components/salla-product-options/salla-product-options.js +72 -58
  11. package/dist/collection/components/salla-slider/salla-slider.js +63 -23
  12. package/dist/collection/components/salla-user-menu/salla-user-menu.js +1 -3
  13. package/dist/components/camera.js +11 -0
  14. package/dist/components/index.js +1 -1
  15. package/dist/components/salla-file-upload2.js +35 -3
  16. package/dist/components/salla-gifting.js +20 -36
  17. package/dist/components/salla-login-modal.js +81 -6
  18. package/dist/components/salla-map.js +7 -5
  19. package/dist/components/salla-product-options.js +61 -53
  20. package/dist/components/salla-slider2.js +28 -5
  21. package/dist/components/salla-user-menu.js +1 -3
  22. package/dist/esm/{app-globals-41701201.js → app-globals-3afeeb74.js} +1 -1
  23. package/dist/esm/loader.js +2 -2
  24. package/dist/esm/salla-button_37.entry.js +226 -107
  25. package/dist/esm/twilight.js +2 -2
  26. package/dist/esm-es5/{app-globals-41701201.js → app-globals-3afeeb74.js} +1 -1
  27. package/dist/esm-es5/loader.js +1 -1
  28. package/dist/esm-es5/salla-button_37.entry.js +4 -4
  29. package/dist/esm-es5/twilight.js +1 -1
  30. package/dist/twilight/p-9bbacabc.entry.js +30 -0
  31. package/dist/twilight/{p-88643516.js → p-d4a11dd1.js} +2 -2
  32. package/dist/twilight/p-d859d898.system.js +4 -0
  33. package/dist/twilight/{p-25d2fe80.system.js → p-db94f281.system.js} +2 -2
  34. package/dist/twilight/{p-dcd65bb2.system.entry.js → p-e69f3e88.system.entry.js} +1 -1
  35. package/dist/twilight/twilight.esm.js +1 -1
  36. package/dist/twilight/twilight.js +1 -1
  37. package/dist/types/components/salla-file-upload/salla-file-upload.d.ts +11 -1
  38. package/dist/types/components/salla-gifting/salla-gifting.d.ts +9 -9
  39. package/dist/types/components/salla-login-modal/intefaces.d.ts +12 -0
  40. package/dist/types/components/salla-login-modal/salla-login-modal.d.ts +9 -1
  41. package/dist/types/components/salla-map/salla-map.d.ts +5 -2
  42. package/dist/types/components/salla-product-options/interfaces.d.ts +6 -1
  43. package/dist/types/components/salla-product-options/salla-product-options.d.ts +19 -11
  44. package/dist/types/components/salla-slider/salla-slider.d.ts +52 -1
  45. package/dist/types/components/salla-user-menu/salla-user-menu.d.ts +0 -1
  46. package/dist/types/components.d.ts +85 -14
  47. package/package.json +4 -4
  48. package/dist/components/arrow-right.js +0 -11
  49. package/dist/twilight/p-0110489b.system.js +0 -4
  50. package/dist/twilight/p-c142b898.entry.js +0 -30
@@ -3,10 +3,11 @@
3
3
  */
4
4
  import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
5
5
  import { e as email } from './mail.js';
6
+ import { C as CameraIcon } from './camera.js';
6
7
  import { K as KeyboardArrowRightIcon } from './keyboard_arrow_right.js';
7
- import { A as ArrowRightIcon } from './arrow-right.js';
8
8
  import { H as Helper } from './Helper.js';
9
- import { d as defineCustomElement$6 } from './salla-button2.js';
9
+ import { d as defineCustomElement$7 } from './salla-button2.js';
10
+ import { d as defineCustomElement$6 } from './salla-file-upload2.js';
10
11
  import { d as defineCustomElement$5 } from './salla-loading2.js';
11
12
  import { d as defineCustomElement$4 } from './salla-modal2.js';
12
13
  import { d as defineCustomElement$3 } from './salla-tel-input2.js';
@@ -26,6 +27,20 @@ const PhoneIcon = `<!-- Generated by IcoMoon.io -->
26
27
  </svg>
27
28
  `;
28
29
 
30
+ const ArrowRightIcon = `<!-- Generated by IcoMoon.io -->
31
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
32
+ <title>arrow-right</title>
33
+ <path d="M29.217 15.465c-0.019-0.044-0.056-0.077-0.080-0.119-0.067-0.116-0.139-0.227-0.236-0.317-0.011-0.009-0.013-0.024-0.024-0.033l-10.667-9.333c-0.553-0.484-1.396-0.429-1.881 0.125-0.484 0.555-0.428 1.396 0.127 1.881l7.996 6.997h-20.452c-0.737 0-1.333 0.597-1.333 1.333s0.596 1.333 1.333 1.333h20.452l-7.996 6.997c-0.555 0.485-0.611 1.327-0.127 1.881 0.264 0.3 0.633 0.455 1.004 0.455 0.312 0 0.625-0.109 0.877-0.331l10.667-9.333c0.011-0.009 0.015-0.024 0.024-0.033 0.097-0.091 0.169-0.201 0.236-0.317 0.024-0.041 0.060-0.075 0.080-0.119 0.073-0.163 0.116-0.343 0.116-0.533s-0.043-0.371-0.116-0.535z"></path>
34
+ </svg>
35
+ `;
36
+
37
+ var CustomFieldType;
38
+ (function (CustomFieldType) {
39
+ CustomFieldType["TEXT"] = "text";
40
+ CustomFieldType["NUMBER"] = "number";
41
+ CustomFieldType["PHOTO"] = "photo";
42
+ })(CustomFieldType || (CustomFieldType = {}));
43
+
29
44
  const sallaLoginModalCss = "";
30
45
 
31
46
  const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
@@ -51,6 +66,11 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
51
66
  this.currentTabName = 'home';
52
67
  this.regType = 'phone';
53
68
  this.translationLoaded = false;
69
+ this.dragAndDrop = salla.lang.get('common.uploader.drag_and_drop');
70
+ this.browseFromFiles = salla.lang.get('common.uploader.browse');
71
+ this.customFields = [];
72
+ this.customFieldsValues = {};
73
+ this.uploadedImage = undefined;
54
74
  this.typing = (e, submitMethod = null) => {
55
75
  const error = e.target.nextElementSibling;
56
76
  e.target.classList.remove('s-has-error');
@@ -88,6 +108,7 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
88
108
  phone: regPhone || this.loginTelInput.phone,
89
109
  country_code: countryCode,
90
110
  verified_by: this.regType,
111
+ custom_fields: this.customFieldsValues,
91
112
  };
92
113
  emailValue && (data = Object.assign(Object.assign({}, data), { email: emailValue }));
93
114
  this.verifyTab.getCode()
@@ -106,6 +127,8 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
106
127
  salla.lang.onLoaded(() => {
107
128
  this.translationLoaded = true;
108
129
  this.title = salla.lang.get('blocks.header.login');
130
+ this.dragAndDrop = salla.lang.get('common.uploader.drag_and_drop');
131
+ this.browseFromFiles = salla.lang.get('common.uploader.browse');
109
132
  this.updateTranslations();
110
133
  });
111
134
  salla.event.on('login::open', (event) => this.open(event));
@@ -119,7 +142,7 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
119
142
  * @param {CustomEvent|{details:{case:'new_customer'|'authenticated', redirect_url:string|null}}} event
120
143
  */
121
144
  onVerified(event) {
122
- var _a, _b;
145
+ var _a, _b, _c, _d;
123
146
  salla.log('verified', event);
124
147
  //there is a case when force login is activated & is new user, it will return case inside error key., so cover it.
125
148
  let verifyCase = ((_a = event.detail) === null || _a === void 0 ? void 0 : _a.data.case) || ((_b = event.detail) === null || _b === void 0 ? void 0 : _b.error.case);
@@ -128,6 +151,7 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
128
151
  return;
129
152
  }
130
153
  if (verifyCase === "new_customer") {
154
+ this.customFields = ((_d = (_c = event.detail) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.custom_fields) || [];
131
155
  return this.showTab(this.registrationTab);
132
156
  }
133
157
  if (!salla.auth.canRedirect()) {
@@ -205,13 +229,42 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
205
229
  }
206
230
  async newUserValidation() {
207
231
  const isLogByPhone = this.regType == "phone", isLogByEmail = this.regType == "email", emailValue = this.regEmail.value || (isLogByEmail && this.loginEmail.value), isEmailValid = Helper.isValidEmail(emailValue), isFirstNameValid = this.firstName.value.length > 0, isLastNameValid = this.lastName.value.length > 0, isPhoneValid = await this.regTelInput.isValid() || isLogByPhone && await this.loginTelInput.isValid(), emailValidation = (emailValue && isEmailValid) || (!emailValue && !this.isEmailRequired);
208
- if (emailValidation && isPhoneValid && isFirstNameValid && isLastNameValid)
232
+ // Custom Fields Validation
233
+ var isCustomFieldValid = true;
234
+ for (const item of this.customFieldsWrapper.children) {
235
+ if (item.tagName == "SALLA-FILE-UPLOAD") {
236
+ const fileUploader = item;
237
+ this.customFieldsValues[fileUploader.id] = fileUploader.uploadedImage;
238
+ if (fileUploader.required) {
239
+ if (!fileUploader.uploadedImage) {
240
+ isCustomFieldValid = false;
241
+ const errorMsg = salla.lang.get('common.errors.field_required', { attribute: fileUploader.title });
242
+ this.validateField(fileUploader, errorMsg);
243
+ }
244
+ }
245
+ }
246
+ if (item.tagName == "INPUT") {
247
+ const inputItem = item;
248
+ this.customFieldsValues[inputItem.id] = inputItem.value;
249
+ if (inputItem.required) {
250
+ if (inputItem.value.length == 0) {
251
+ isCustomFieldValid = false;
252
+ const errorMsg = salla.lang.get('common.errors.field_required', { attribute: inputItem.title });
253
+ this.validateField(inputItem, errorMsg);
254
+ }
255
+ }
256
+ }
257
+ }
258
+ if (emailValidation && isPhoneValid && isFirstNameValid && isLastNameValid && isCustomFieldValid)
209
259
  return;
210
260
  !isEmailValid && this.validateField(this.regEmail, this.emailErrorMsg);
211
261
  !isFirstNameValid && this.validateField(this.firstName, this.firstNameErrorMsg);
212
262
  !isLastNameValid && this.validateField(this.lastName, this.lastNameErrorMsg);
213
263
  throw ('Please insert required fields');
214
264
  }
265
+ getFilepondPlaceholder() {
266
+ return `<div class="s-login-modal-filepond-placeholder"><span class="s-login-modal-filepond-placeholder-icon">${CameraIcon}</span><p class="s-login-modal-filepond-placeholder-text">${this.dragAndDrop}</p> <span class="filepond--label-action">${this.browseFromFiles}</span></div>`;
267
+ }
215
268
  // eslint-disable-next-line @stencil/own-methods-must-be-private
216
269
  validateField(field, errorMsg) {
217
270
  field.classList.add('s-has-error');
@@ -242,7 +295,20 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
242
295
  h("a", { href: "#", onClick: () => this.showTab(this.emailTab), class: "s-login-modal-link" }, salla.lang.get('blocks.header.login_by_email')) : '', h("slot", { name: "after-login-mobile" })) : '', this.isEmailAllowed ?
243
296
  h("div", { class: this.generateTabClasses('login-email'), "data-name": "login-email", ref: tab => this.emailTab = tab }, h("slot", { name: "before-login-email" }), h("label", { class: "s-login-modal-label" }, salla.lang.get('common.elements.email')), h("form", { onSubmit: () => this.loginByEmail(event), method: "POST" }, h("input", { type: "email", ref: el => this.loginEmail = el, onKeyDown: e => this.typing(e), placeholder: "your@email.com", enterkeyhint: "next", class: "s-login-modal-input s-ltr" }), h("span", { class: "s-login-modal-error-message" }), h("salla-button", { "loader-position": 'center', width: "wide", onClick: () => this.loginByEmail(), ref: b => this.emailBtn = b }, salla.lang.get('blocks.header.enter'))), this.isMobileAllowed ?
244
297
  h("a", { href: "#", onClick: () => this.showTab(this.mobileTab), class: "s-login-modal-link" }, salla.lang.get('blocks.header.login_by_sms'))
245
- : '', h("slot", { name: "after-login-email" })) : '', h("salla-verify", { display: "inline", "support-web-auth": this.supportWebAuth ? 'true' : 'false', class: this.generateTabClasses('otp'), "data-name": "otp", ref: tab => this.verifyTab = tab, autoReload: false }, h("a", { onClick: () => this.showTab(this.regType == 'phone' ? this.mobileTab : this.emailTab), class: "s-verify-back", innerHTML: ArrowRightIcon, slot: "after-footer", href: "#" })), h("div", { "data-name": "registration", class: this.generateTabClasses('registration'), ref: tab => this.registrationTab = tab }, h("slot", { name: "before-registration" }), h("div", null, h("label", { class: "s-login-modal-label" }, salla.lang.get('blocks.header.your_name')), h("input", { type: "text", class: "s-login-modal-input", ref: el => this.firstName = el, onKeyDown: e => this.typing(e, this.newUser), placeholder: salla.lang.get('pages.profile.first_name') }), h("span", { class: "s-login-modal-error-message" })), h("div", null, h("label", { class: "s-login-modal-label" }, salla.lang.get('pages.profile.last_name')), h("input", { type: "text", class: "s-login-modal-input", ref: el => this.lastName = el, onKeyDown: e => this.typing(e, this.newUser), placeholder: salla.lang.get('pages.profile.last_name') }), h("span", { class: "s-login-modal-error-message" })), h("div", { class: this.generateRegClasses('phone') }, h("label", { class: "s-login-modal-label" }, salla.lang.get('common.elements.mobile')), h("salla-tel-input", { ref: el => this.regTelInput = el, onKeyDown: e => this.typing(e, this.newUser) })), h("div", { class: this.generateRegClasses('email') }, h("label", { class: "s-login-modal-label" }, salla.lang.get('common.elements.email')), h("input", { type: "email", ref: el => this.regEmail = el, onKeyDown: e => this.typing(e, this.newUser), placeholder: "your@email.com", class: "s-login-modal-input s-ltr" }), h("span", { class: "s-login-modal-error-message" })), h("salla-button", { "loader-position": 'center', width: "wide", onClick: () => this.newUser(), ref: b => this.regBtn = b }, salla.lang.get('blocks.header.register')), h("slot", { name: "after-registration" })))));
298
+ : '', h("slot", { name: "after-login-email" })) : '', h("salla-verify", { display: "inline", "support-web-auth": this.supportWebAuth ? 'true' : 'false', class: this.generateTabClasses('otp'), "data-name": "otp", ref: tab => this.verifyTab = tab, autoReload: false }, h("a", { onClick: () => this.showTab(this.regType == 'phone' ? this.mobileTab : this.emailTab), class: "s-verify-back", innerHTML: ArrowRightIcon, slot: "after-footer", href: "#" })), h("div", { "data-name": "registration", class: this.generateTabClasses('registration'), ref: tab => this.registrationTab = tab }, h("slot", { name: "before-registration" }), h("div", null, h("label", { class: "s-login-modal-label" }, salla.lang.get('blocks.header.your_name')), h("input", { type: "text", class: "s-login-modal-input", ref: el => this.firstName = el, onKeyDown: e => this.typing(e, this.newUser), placeholder: salla.lang.get('pages.profile.first_name') }), h("span", { class: "s-login-modal-error-message" })), h("div", null, h("label", { class: "s-login-modal-label" }, salla.lang.get('pages.profile.last_name')), h("input", { type: "text", class: "s-login-modal-input", ref: el => this.lastName = el, onKeyDown: e => this.typing(e, this.newUser), placeholder: salla.lang.get('pages.profile.last_name') }), h("span", { class: "s-login-modal-error-message" })), h("div", { class: this.generateRegClasses('phone') }, h("label", { class: "s-login-modal-label" }, salla.lang.get('common.elements.mobile')), h("salla-tel-input", { ref: el => this.regTelInput = el, onKeyDown: e => this.typing(e, this.newUser) })), h("div", { class: this.generateRegClasses('email') }, h("label", { class: "s-login-modal-label" }, salla.lang.get('common.elements.email')), h("input", { type: "email", ref: el => this.regEmail = el, onKeyDown: e => this.typing(e, this.newUser), placeholder: "your@email.com", class: "s-login-modal-input s-ltr" }), h("span", { class: "s-login-modal-error-message" })), h("div", { class: "s-login-modal-custom-fields", ref: el => this.customFieldsWrapper = el }, this.customFields.map((field) => {
299
+ if (field.type === CustomFieldType.PHOTO) {
300
+ return [
301
+ h("label", { class: "s-login-modal-label" }, field.label),
302
+ h("salla-file-upload", { "instant-upload": true, labelIdle: this.getFilepondPlaceholder(), id: `${field.id}`, title: field.label, required: field.required }),
303
+ h("span", { class: "s-login-modal-error-message" })
304
+ ];
305
+ }
306
+ return [
307
+ h("label", { class: "s-login-modal-label" }, field.label),
308
+ h("input", { type: "text", onKeyDown: e => this.typing(e, this.newUser), onInput: el => field.type == CustomFieldType.NUMBER ? salla.helpers.inputDigitsOnly(el.target) : {}, placeholder: field.description, required: field.required, title: field.label, id: `${field.id}`, class: "s-login-modal-input s-ltr" }),
309
+ h("span", { class: "s-login-modal-error-message" })
310
+ ];
311
+ })), h("salla-button", { "loader-position": 'center', width: "wide", onClick: () => this.newUser(), ref: b => this.regBtn = b }, salla.lang.get('blocks.header.register')), h("slot", { name: "after-registration" })))));
246
312
  }
247
313
  get host() { return this; }
248
314
  static get style() { return sallaLoginModalCss; }
@@ -258,13 +324,17 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
258
324
  "emailErrorMsg": [32],
259
325
  "firstNameErrorMsg": [32],
260
326
  "lastNameErrorMsg": [32],
327
+ "dragAndDrop": [32],
328
+ "browseFromFiles": [32],
329
+ "customFields": [32],
330
+ "uploadedImage": [32],
261
331
  "open": [64]
262
332
  }, [[8, "verified", "onVerified"]]]);
263
333
  function defineCustomElement$1() {
264
334
  if (typeof customElements === "undefined") {
265
335
  return;
266
336
  }
267
- const components = ["salla-login-modal", "salla-button", "salla-loading", "salla-modal", "salla-tel-input", "salla-verify"];
337
+ const components = ["salla-login-modal", "salla-button", "salla-file-upload", "salla-loading", "salla-modal", "salla-tel-input", "salla-verify"];
268
338
  components.forEach(tagName => { switch (tagName) {
269
339
  case "salla-login-modal":
270
340
  if (!customElements.get(tagName)) {
@@ -272,6 +342,11 @@ function defineCustomElement$1() {
272
342
  }
273
343
  break;
274
344
  case "salla-button":
345
+ if (!customElements.get(tagName)) {
346
+ defineCustomElement$7();
347
+ }
348
+ break;
349
+ case "salla-file-upload":
275
350
  if (!customElements.get(tagName)) {
276
351
  defineCustomElement$6();
277
352
  }
@@ -463,10 +463,12 @@ const SallaMap$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
463
463
  */
464
464
  this.searchable = false;
465
465
  /**
466
- * Sets the start location.
466
+ * Latitude coordinate, defaults to Mecca 🕋 ❤️
467
467
  */
468
- // start in mecca 🕋 ❤️
469
468
  this.lat = 21.419421;
469
+ /**
470
+ * Longitude coordinate, defaults to Mecca 🕋 ❤️
471
+ */
470
472
  this.lng = 39.82553;
471
473
  /**
472
474
  * Sets google api key value
@@ -475,7 +477,7 @@ const SallaMap$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
475
477
  /**
476
478
  * Modal Title
477
479
  */
478
- this.title = this.modalActivityTitle;
480
+ this.modalTitle = this.modalActivityTitle;
479
481
  /**
480
482
  * Sets start map zoom.
481
483
  */
@@ -639,7 +641,7 @@ const SallaMap$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
639
641
  }
640
642
  // rendering functions
641
643
  getLocationModal() {
642
- return (h("div", null, h("div", { class: "s-map-modal-title" }, this.title), h("div", { class: "s-map-modal-body" }, h("div", { class: "s-map-element", ref: el => (this.mapElement = el) }), this.readonly ? "" :
644
+ return (h("div", null, h("div", { class: "s-map-modal-title" }, this.modalTitle), h("div", { class: "s-map-modal-body" }, h("div", { class: "s-map-element", ref: el => (this.mapElement = el) }), this.readonly ? "" :
643
645
  [
644
646
  this.searchable && (h("div", { class: "s-map-search-wrapper" }, h("input", { class: "s-map-search-input", ref: el => (this.searchInput = el) }))),
645
647
  h("salla-button", { class: "s-map-my-location-button", onClick: () => {
@@ -673,7 +675,7 @@ const SallaMap$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
673
675
  "lat": [1026],
674
676
  "lng": [1026],
675
677
  "apiKey": [1025, "api-key"],
676
- "title": [1],
678
+ "modalTitle": [1, "modal-title"],
677
679
  "zoom": [1026],
678
680
  "theme": [1025],
679
681
  "modalActivityTitle": [32],
@@ -2,6 +2,7 @@
2
2
  * Crafted with ❤ by Salla
3
3
  */
4
4
  import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
5
+ import { C as CameraIcon } from './camera.js';
5
6
  import { d as defineCustomElement$4 } from './salla-conditional-fields2.js';
6
7
  import { d as defineCustomElement$3 } from './salla-datetime-picker2.js';
7
8
  import { d as defineCustomElement$2 } from './salla-file-upload2.js';
@@ -36,13 +37,6 @@ const CheckCircleIcon = `<!-- Generated by IcoMoon.io -->
36
37
  </svg>
37
38
  `;
38
39
 
39
- const CameraIcon = `<!-- Generated by IcoMoon.io -->
40
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
41
- <title>camera</title>
42
- <path d="M16 10.667c-4.044 0-7.333 3.289-7.333 7.333s3.289 7.333 7.333 7.333 7.333-3.289 7.333-7.333-3.289-7.333-7.333-7.333zM16 22.667c-2.573 0-4.667-2.093-4.667-4.667s2.093-4.667 4.667-4.667 4.667 2.093 4.667 4.667-2.093 4.667-4.667 4.667zM28 5.333h-3.287l-2.271-3.407c-0.248-0.371-0.664-0.593-1.109-0.593h-10.667c-0.445 0-0.861 0.223-1.109 0.593l-2.271 3.407h-3.287c-2.205 0-4 1.795-4 4v17.333c0 2.205 1.795 4 4 4h24c2.205 0 4-1.795 4-4v-17.333c0-2.205-1.795-4-4-4zM29.333 26.667c0 0.735-0.599 1.333-1.333 1.333h-24c-0.735 0-1.333-0.599-1.333-1.333v-17.333c0-0.735 0.599-1.333 1.333-1.333h4c0.445 0 0.861-0.223 1.109-0.593l2.272-3.407h9.239l2.271 3.407c0.248 0.371 0.664 0.593 1.109 0.593h4c0.735 0 1.333 0.599 1.333 1.333zM25.333 10.66c-0.736 0-1.333 0.604-1.333 1.34s0.597 1.333 1.333 1.333 1.333-0.597 1.333-1.333v-0.013c0-0.736-0.597-1.327-1.333-1.327z"></path>
43
- </svg>
44
- `;
45
-
46
40
  const sallaProductOptionsCss = "";
47
41
 
48
42
  const SallaProductOptions$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
@@ -60,7 +54,6 @@ const SallaProductOptions$1 = /*@__PURE__*/ proxyCustomElement(class extends HTM
60
54
  this.dateTimeSelected = createEvent(this, "dateTimeSelected", 7);
61
55
  this.dateSelected = createEvent(this, "dateSelected", 7);
62
56
  this.timeSelected = createEvent(this, "timeSelected", 7);
63
- this.optionsData = [];
64
57
  this.uploadedImage = undefined;
65
58
  this.outOfStockText = salla.lang.get("pages.products.out_of_stock");
66
59
  this.donationAmount = salla.lang.get('pages.products.donation_amount');
@@ -68,16 +61,22 @@ const SallaProductOptions$1 = /*@__PURE__*/ proxyCustomElement(class extends HTM
68
61
  * The id of the product to which the options are going to be fetched for.
69
62
  */
70
63
  this.productId = salla.config.get('page.id');
71
- if (this.options) {
72
- this.optionsData = JSON.parse(this.options);
73
- }
74
- else if (this.productId) {
75
- this.fetchProductOptions();
76
- }
77
64
  salla.lang.onLoaded(() => {
78
65
  this.outOfStockText = salla.lang.get("pages.products.out_of_stock");
79
66
  this.donationAmount = salla.lang.get('pages.products.donation_amount');
80
67
  });
68
+ if (this.options) {
69
+ try {
70
+ this.optionsData = JSON.parse(this.options);
71
+ return;
72
+ }
73
+ catch (e) {
74
+ salla.log('Bad json passed via options prop');
75
+ }
76
+ }
77
+ if (this.productId && !salla.url.is_page('cart')) {
78
+ salla.api.product.getDetails(this.productId, ['options']).then(resp => this.optionsData = resp.data.options);
79
+ }
81
80
  }
82
81
  //todo:: typo here, but I think we will drop it anyway😌
83
82
  handleMultiSelectFieldInput() {
@@ -88,14 +87,6 @@ const SallaProductOptions$1 = /*@__PURE__*/ proxyCustomElement(class extends HTM
88
87
  }
89
88
  this.itemsSelected.emit(multiSelectedItems);
90
89
  }
91
- /**
92
- * Image Selection
93
- */
94
- fetchProductOptions() {
95
- return salla.api.product.getDetails(this.productId, ['options']).then(resp => {
96
- this.optionsData = resp.data.options;
97
- });
98
- }
99
90
  getDisplayForType(option) {
100
91
  if (this[`${option.type}Option`]) {
101
92
  return this[`${option.type}Option`](option);
@@ -109,29 +100,20 @@ const SallaProductOptions$1 = /*@__PURE__*/ proxyCustomElement(class extends HTM
109
100
  salla.log(`Couldn't find options type(${option.type})😢`);
110
101
  return '';
111
102
  }
103
+ getOptionShownWhen(option) {
104
+ return option.visibility_condition
105
+ ? { "data-show-when": `options[${option.visibility_condition.option}] ${option.visibility_condition.operator} ${option.visibility_condition.value}` }
106
+ : {};
107
+ }
112
108
  render() {
113
109
  if (this.optionsData.length == 0) {
114
110
  return;
115
111
  }
116
- return (h(Host, { class: "s-product-options-wrapper" }, h("salla-conditional-fields", null, this.optionsData.map((option) => h("div", { class: "s-product-options-option-container" }, option.name == 'splitter' ?
112
+ return (h(Host, { class: "s-product-options-wrapper" }, h("salla-conditional-fields", null, this.optionsData.map((option) => h("div", Object.assign({ class: `s-product-options-option-container${option.visibility_condition ? ' hidden' : ''}` }, this.getOptionShownWhen(option)), option.name == 'splitter' ?
117
113
  this.splitterOption()
118
114
  : h("div", { class: "s-product-options-option" }, h("label", { htmlFor: 'options[' + option.id + ']', class: "s-product-options-option-label" }, h("b", null, option.name, option.required && h("span", null, " * "), " "), h("small", null, option.placeholder)), h("div", { class: "s-product-options-option-content" }, this.getDisplayForType(option))))))));
119
115
  }
120
116
  //@ts-ignore
121
- colorOption(option) {
122
- return h("fieldset", { class: "s-product-options-colors-wrapper" }, option === null || option === void 0 ? void 0 : option.details.map((value) => h("div", null, h("input", { onChange: e => this.colorSelected.emit(e), name: `color-choice-${option.id}`, id: `color-choice-${option.id}-${value.id}`, required: true, type: "radio" }), h("label", { htmlFor: `color-choice-${option.id}-${value.id}` }, h("span", { style: { "background-color": value.color } }), h("p", null, value.name)))));
123
- }
124
- //@ts-ignore
125
- dateOption(option) {
126
- //todo:: consider date-range @see https://github.com/SallaApp/theme-raed/blob/master/src/assets/js/partials/product-options.js#L8-L23
127
- return h("div", { class: "s-product-options-date-element" }, h("salla-datetime-picker", { onPicked: e => this.dateSelected.emit(e), placeholder: option.name }));
128
- }
129
- //@ts-ignore
130
- datetimeOption(option) {
131
- //todo:: consider date-range @see https://github.com/SallaApp/theme-raed/blob/master/src/assets/js/partials/product-options.js#L8-L23
132
- return h("div", { class: "s-product-options-datetime-element" }, h("salla-datetime-picker", { mode: "range", dateFormat: "Y-m-d G:i:K", enableTime: true, minDate: option.from_date_time, maxDate: option.to_date_time, placeholder: option.name, onPicked: e => this.dateTimeSelected.emit(e) }));
133
- }
134
- //@ts-ignore
135
117
  donationOption(option) {
136
118
  return h("div", { class: "s-product-options-donation-wrapper" }, h("input", { type: "text", id: "donating-amount", name: "donating_amount", class: "s-form-control", placeholder: option.placeholder, onInput: e => salla.helpers.inputDigitsOnly(e.target), onBlur: e => this.donationMoneyEntered.emit(e) }), h("span", { class: "s-product-options-donation-amount-currency" }, salla.config.currency(salla.config.get('user.currency_code')).symbol));
137
119
  }
@@ -143,6 +125,7 @@ const SallaProductOptions$1 = /*@__PURE__*/ proxyCustomElement(class extends HTM
143
125
  this.uploader.querySelector('.filepond--root').style.height = '120px';
144
126
  }, 1000);
145
127
  }
128
+ //todo:: why we need this way, use the native way!!
146
129
  //@ts-ignore
147
130
  selectThumbnail(e, value) {
148
131
  this.thumbnailSelected.emit(e);
@@ -177,21 +160,10 @@ const SallaProductOptions$1 = /*@__PURE__*/ proxyCustomElement(class extends HTM
177
160
  imageOption(option) {
178
161
  return h("salla-file-upload", { "instant-upload": true, ref: element => this.uploader = element, "data-item-id": salla.url.is_page('cart') ? option.id : '', class: { "s-product-options-image-input": true, required: option.required }, labelIdle: this.getFilepondPlaceholder(), onRemove: () => this.setUploaderHeight(), serverConfig: this.getServerConfig(salla.cart.api.getUrl('cart/option-image'), salla.url.is_page('cart') ? option.id : null) });
179
162
  }
180
- multipleOptions(option) {
181
- return h("div", { ref: element => this.multipleOptionDom = element, class: { "s-product-options-multiple-options-wrapper": true, 'required': option.required } }, option === null || option === void 0 ? void 0 : option.details.map((value) => {
182
- return h("div", null, h("input", { id: `field-${option.id}-${value.id}`, "aria-describedby": `options[${option.id}]-description`, name: `options[${option.id}]`, value: value.id, type: "checkbox", onChange: () => this.handleMultiSelectFieldInput() }), h("label", { htmlFor: `field-${option.id}-${value.id}` }, value.name));
183
- }));
184
- }
185
163
  //@ts-ignore
186
164
  numberOption(option) {
187
165
  return h("input", { placeholder: option.placeholder, name: `options[${option.id}]`, type: "text", onInput: e => salla.helpers.inputDigitsOnly(e.target), onBlur: e => this.numberOptionEntered.emit(e), class: "s-form-control" });
188
166
  }
189
- singleOption(option) {
190
- return h("div", null, h("select", { name: `options[${option.id}]`, required: option.required, class: "s-form-control" }, h("option", { value: "" }, option.placeholder), option === null || option === void 0 ? void 0 :
191
- option.details.map((op) => {
192
- return h("option", { onChange: e => this.singleSelectOptionSelected.emit(e), value: op.id }, op.name);
193
- })));
194
- }
195
167
  //@ts-ignore
196
168
  splitterOption() {
197
169
  return h("div", { class: "s-product-options-splitter" });
@@ -204,18 +176,54 @@ const SallaProductOptions$1 = /*@__PURE__*/ proxyCustomElement(class extends HTM
204
176
  textareaOption(option) {
205
177
  return h("div", { class: "s-product-options-textarea" }, h("div", { class: "mt-1" }, h("textarea", { rows: 4, name: `options[${option.id}]`, required: option.required, id: `options[${option.id}]`, placeholder: option.placeholder, onInput: (e) => this.textareaOptionEntered.emit(e), class: "s-form-control" })));
206
178
  }
179
+ /**
180
+ * ============= Date Time options =============
181
+ */
182
+ //@ts-ignore
183
+ timeOption(option) {
184
+ return h("salla-datetime-picker", { class: "s-product-options-time-element", enableTime: true, placeholder: option.name, noCalendar: true, dateFormat: "h:i K", onPicked: e => this.timeSelected.emit(e) });
185
+ }
186
+ //@ts-ignore
187
+ dateOption(option) {
188
+ //todo:: consider date-range @see https://github.com/SallaApp/theme-raed/blob/master/src/assets/js/partials/product-options.js#L8-L23
189
+ return h("div", { class: "s-product-options-date-element" }, h("salla-datetime-picker", { onPicked: e => this.dateSelected.emit(e), placeholder: option.name }));
190
+ }
191
+ //@ts-ignore
192
+ datetimeOption(option) {
193
+ //todo:: consider date-range @see https://github.com/SallaApp/theme-raed/blob/master/src/assets/js/partials/product-options.js#L8-L23
194
+ return h("div", { class: "s-product-options-datetime-element" }, h("salla-datetime-picker", { mode: "range", dateFormat: "Y-m-d G:i:K", enableTime: true, minDate: option.from_date_time, maxDate: option.to_date_time, placeholder: option.name, onPicked: e => this.dateTimeSelected.emit(e) }));
195
+ }
196
+ /**
197
+ * ============= Advanced options =============
198
+ */
199
+ getOptionDetailName(detail, outOfStock = true) {
200
+ return detail.name
201
+ + ((outOfStock && detail.is_out) ? ` - ${this.outOfStockText}` : '')
202
+ + (detail.additional_price ? ` (${salla.money(detail.additional_price)})` : '');
203
+ }
204
+ singleOption(option) {
205
+ return h("div", null, h("select", { name: `options[${option.id}]`, required: option.required, class: "s-form-control" }, h("option", { value: "" }, option.placeholder), option === null || option === void 0 ? void 0 :
206
+ option.details.map((detail) => {
207
+ return h("option", { value: detail.id, disabled: detail.is_out, selected: detail.is_selected, onChange: e => this.singleSelectOptionSelected.emit(e) }, this.getOptionDetailName(detail));
208
+ })));
209
+ }
210
+ multipleOptions(option) {
211
+ return h("div", { ref: element => this.multipleOptionDom = element, class: { "s-product-options-multiple-options-wrapper": true, 'required': option.required } }, option === null || option === void 0 ? void 0 : option.details.map((detail) => {
212
+ return h("div", null, h("input", { type: "checkbox", value: detail.id, disabled: detail.is_out, checked: detail.is_selected, name: `options[${option.id}]`, id: `field-${option.id}-${detail.id}`, onChange: () => this.handleMultiSelectFieldInput(), "aria-describedby": `options[${option.id}]-description` }), h("label", { htmlFor: `field-${option.id}-${detail.id}` }, this.getOptionDetailName(detail)));
213
+ }));
214
+ }
215
+ //@ts-ignore
216
+ colorOption(option) {
217
+ return h("fieldset", { class: "s-product-options-colors-wrapper" }, option === null || option === void 0 ? void 0 : option.details.map((detail) => h("div", null, h("input", { type: "radio", value: detail.id, disabled: detail.is_out, required: option.required, checked: detail.is_selected, name: `options[${option.id}]`, id: `color-${this.productId}-${option.id}-${detail.id}`, onChange: e => this.colorSelected.emit(e) }), h("label", { htmlFor: `color-${this.productId}-${option.id}-${detail.id}` }, h("span", { style: { "background-color": detail.color } }), h("p", null, this.getOptionDetailName(detail))))));
218
+ }
207
219
  //@ts-ignore
208
220
  thumbnailOption(option) {
209
221
  return h("div", { class: "s-product-options-thumbnails-wrapper" }, option.details.map((detail) => {
210
- return h("div", null, h("input", { required: option.required, type: "radio", id: `option_${option.id}_${detail.id}`, disabled: detail.is_out, "data-itemid": detail.id, name: `options[${option.id}]`, "data-img-id": detail.option_value, value: detail.option_value, onChange: (e) => this.selectThumbnail(e, detail.option_value) }), h("label", { htmlFor: `option_${option.id}_${detail.id}`, "data-img-id": detail.option_value, class: "go-to-slide" }, h("img", { "data-src": detail.image, src: detail.image, title: detail.name, alt: detail.name }), h("span", { innerHTML: CheckCircleIcon, class: "s-product-options-thumbnails-icon" })), h("p", null, detail.name, " "), detail.is_out ?
222
+ return h("div", null, h("input", { type: "radio", value: detail.id, "data-itemid": detail.id, disabled: detail.is_out, required: option.required, checked: detail.is_selected, name: `options[${option.id}]`, "data-img-id": detail.option_value, id: `option_${this.productId}-${option.id}_${detail.id}`, onChange: (e) => this.selectThumbnail(e, detail.option_value) }), h("label", { htmlFor: `option_${this.productId}-${option.id}_${detail.id}`, "data-img-id": detail.option_value, class: "go-to-slide" }, h("img", { "data-src": detail.image, src: detail.image, title: detail.name, alt: detail.name }), h("span", { innerHTML: CheckCircleIcon, class: "s-product-options-thumbnails-icon" })), h("p", null, this.getOptionDetailName(detail, false), " "), detail.is_out ?
211
223
  [h("small", { class: "s-product-options-thumbnails-stock-badge" }, this.outOfStockText), h("div", { class: "s-product-options-thumbnails-badge-overlay" })]
212
224
  : '');
213
225
  }));
214
226
  }
215
- //@ts-ignore
216
- timeOption(option) {
217
- return h("salla-datetime-picker", { class: "s-product-options-time-element", enableTime: true, placeholder: option.name, noCalendar: true, dateFormat: "h:i K", onPicked: e => this.timeSelected.emit(e) });
218
- }
219
227
  static get style() { return sallaProductOptionsCss; }
220
228
  }, [0, "salla-product-options", {
221
229
  "productId": [2, "product-id"],
@@ -53,6 +53,10 @@ const SallaSwiper = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
53
53
  * Vertical or Horizontal thumbs slider
54
54
  */
55
55
  this.verticalThumbs = false;
56
+ /**
57
+ * Vertical or Horizontal main slider
58
+ */
59
+ this.vertical = false;
56
60
  /**
57
61
  * Auto Height slider
58
62
  */
@@ -129,13 +133,22 @@ const SallaSwiper = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
129
133
  slidesPerView: 'auto',
130
134
  spaceBetween: 0,
131
135
  },
132
- fullscreen: {
136
+ fullwidth: {
133
137
  speed: 750,
134
138
  parallax: true,
135
139
  autoplay: {
136
140
  delay: 5000,
137
141
  },
138
142
  },
143
+ fullscreen: {
144
+ speed: 1000,
145
+ parallax: true,
146
+ direction: "vertical",
147
+ followFinger: false,
148
+ touchReleaseOnEdges: true,
149
+ lazy: true,
150
+ mousewheel: {}
151
+ },
139
152
  testimonials: {
140
153
  draggable: true,
141
154
  slidesPerView: 1,
@@ -344,11 +357,14 @@ const SallaSwiper = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
344
357
  } : false,
345
358
  breakpoints: {
346
359
  768: {
347
- direction: this.verticalThumbs ? "vertical" : "horizontal",
360
+ direction: this.vertical ? "vertical" : "horizontal",
348
361
  },
349
362
  },
350
363
  };
351
- pre_defined_config = Object.assign(Object.assign({}, pre_defined_config), (this.pre_defined_config[this.type] || {}));
364
+ this.pre_defined_config.fullscreen.mousewheel = {
365
+ releaseOnEdges: this.host.querySelectorAll('.swiper-slide').length > 1 ? false : true
366
+ },
367
+ pre_defined_config = Object.assign(Object.assign({}, pre_defined_config), (this.pre_defined_config[this.type] || {}));
352
368
  if (this.type == 'thumbs') {
353
369
  for (const slide of this.thumbsSliderWrapper.children) {
354
370
  //todo:: use `s-slider-slide`
@@ -393,7 +409,13 @@ const SallaSwiper = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
393
409
  });
394
410
  this.slider.on('reachBeginning', (slider) => this.reachBeginning.emit(slider));
395
411
  this.slider.on('reachEnd', (slider) => this.reachEnd.emit(slider));
396
- this.slider.on('slideChangeTransitionEnd', (slider) => this.slideChangeTransitionEnd.emit(slider));
412
+ this.slider.on('slideChangeTransitionEnd', (slider) => {
413
+ if (this.type == "fullscreen") {
414
+ const activeIndex = slider.activeIndex;
415
+ slider.params.mousewheel.releaseOnEdges = activeIndex === 0 || (activeIndex === slider.slides.length - 1);
416
+ }
417
+ this.slideChangeTransitionEnd.emit(slider);
418
+ });
397
419
  this.slider.on('slideChangeTransitionStart', (slider) => this.slideChangeTransitionStart.emit(slider));
398
420
  this.slider.on('slideNextTransitionEnd', (slider) => this.slideNextTransitionEnd.emit(slider));
399
421
  this.slider.on('slideNextTransitionStart', (slider) => this.slideNextTransitionStart.emit(slider));
@@ -420,7 +442,7 @@ const SallaSwiper = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
420
442
  : '', this.showControls ?
421
443
  h("div", { class: "s-slider-block__title-nav", dir: "rtl" }, h("button", { "aria-label": "Previous Slide", class: "s-slider-prev s-slider-nav-arrow" }, h("span", { class: "s-slider-button-icon", innerHTML: this.isRTL ? KeyboardArrowRightIcon : ArrowLeftIcon })), h("button", { "aria-label": "Next Slide", class: "s-slider-next s-slider-nav-arrow" }, h("span", { class: "s-slider-button-icon", innerHTML: this.isRTL ? ArrowLeftIcon : KeyboardArrowRightIcon })))
422
444
  : ''))
423
- : '', h("div", { class: "swiper s-slider-container", ref: el => this.sliderContainer = el }, h("slot", null), h("div", { class: "swiper-wrapper s-slider-swiper-wrapper", ref: el => this.sliderWrapper = el }, h("slot", { name: 'items' })), this.pagination ? h("div", { class: "swiper-pagination" }) : ''), this.type == 'thumbs' ? h("div", { class: "s-slider-thumbs" }, h("div", { class: "swiper s-slider-thumbs-container", ref: el => this.thumbsSliderContainer = el }, h("div", { class: "s-slider-swiper-wrapper swiper-wrapper", ref: el => this.thumbsSliderWrapper = el }, h("slot", { name: "thumbs" })), this.showThumbsControls ? [h("div", { class: "s-slider-button s-slider-button-prev" }, h("salla-button", { disabled: this.isRTL ? (_a = this.thumbsSlider) === null || _a === void 0 ? void 0 : _a.isEnd : (_b = this.thumbsSlider) === null || _b === void 0 ? void 0 : _b.isBeginning, shape: "icon", color: "light", onClick: () => this.isRTL ? this.thumbsSlider.slideNext() : this.thumbsSlider.slidePrev() }, h("span", { class: "s-slider-button-icon", innerHTML: salla.config.get('theme.is_rtl') ? ArrowLeftIcon : KeyboardArrowRightIcon }))), h("div", { class: "s-slider-button s-slider-button-next" }, h("salla-button", { disabled: this.isRTL ? (_c = this.thumbsSlider) === null || _c === void 0 ? void 0 : _c.isBeginning : (_d = this.thumbsSlider) === null || _d === void 0 ? void 0 : _d.isEnd, shape: "icon", color: "light", onClick: () => this.isRTL ? this.thumbsSlider.slidePrev() : this.thumbsSlider.slideNext() }, h("span", { class: "s-slider-button-icon", innerHTML: salla.config.get('theme.is_rtl') ? KeyboardArrowRightIcon : ArrowLeftIcon })))] : '')) : ''));
445
+ : '', h("div", { class: "swiper s-slider-container", ref: el => this.sliderContainer = el }, h("slot", null), h("div", { class: "swiper-wrapper s-slider-swiper-wrapper", ref: el => this.sliderWrapper = el }, h("slot", { name: 'items' })), this.pagination ? h("div", { class: "swiper-pagination" }) : ''), this.type == 'thumbs' ? h("div", { class: "s-slider-thumbs" }, h("div", { class: "swiper s-slider-thumbs-container", ref: el => this.thumbsSliderContainer = el }, h("div", { class: "s-slider-swiper-wrapper swiper-wrapper", ref: el => this.thumbsSliderWrapper = el }, h("slot", { name: "thumbs" })), this.showThumbsControls ? [h("div", { class: "s-slider-button s-slider-button-prev" }, h("salla-button", { disabled: this.isRTL && !this.verticalThumbs ? (_a = this.thumbsSlider) === null || _a === void 0 ? void 0 : _a.isEnd : (_b = this.thumbsSlider) === null || _b === void 0 ? void 0 : _b.isBeginning, shape: "icon", color: "light", onClick: () => this.isRTL && !this.verticalThumbs ? this.thumbsSlider.slideNext() : this.thumbsSlider.slidePrev() }, h("span", { class: "s-slider-button-icon", innerHTML: salla.config.get('theme.is_rtl') ? ArrowLeftIcon : KeyboardArrowRightIcon }))), h("div", { class: "s-slider-button s-slider-button-next" }, h("salla-button", { disabled: this.isRTL && !this.verticalThumbs ? (_c = this.thumbsSlider) === null || _c === void 0 ? void 0 : _c.isBeginning : (_d = this.thumbsSlider) === null || _d === void 0 ? void 0 : _d.isEnd, shape: "icon", color: "light", onClick: () => this.isRTL && !this.verticalThumbs ? this.thumbsSlider.slidePrev() : this.thumbsSlider.slideNext() }, h("span", { class: "s-slider-button-icon", innerHTML: salla.config.get('theme.is_rtl') ? KeyboardArrowRightIcon : ArrowLeftIcon })))] : '')) : ''));
424
446
  }
425
447
  componentDidLoad() {
426
448
  let itemsSlot = this.sliderWrapper.querySelector('div[slot="items"]');
@@ -445,6 +467,7 @@ const SallaSwiper = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
445
467
  "blockSubtitle": [513, "block-subtitle"],
446
468
  "displayAllUrl": [513, "display-all-url"],
447
469
  "verticalThumbs": [516, "vertical-thumbs"],
470
+ "vertical": [516],
448
471
  "autoHeight": [516, "auto-height"],
449
472
  "showControls": [516, "show-controls"],
450
473
  "controlsOuter": [516, "controls-outer"],
@@ -56,7 +56,6 @@ const SallaUserMenu$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
56
56
  this.hello = salla.lang.get("pages.checkout.hello");
57
57
  this.first_name = salla.storage.get('user.first_name') || '';
58
58
  this.last_name = salla.storage.get('user.last_name') || '';
59
- this.has_red_dot = salla.storage.get('user.notifications') || salla.storage.get('user.pending_orders');
60
59
  this.avatar = salla.storage.get('user.avatar') || salla.url.cdn('images/avatar.png');
61
60
  this.badges = {
62
61
  notifications: salla.helpers.number(salla.storage.get('user.notifications') || 0),
@@ -141,7 +140,7 @@ const SallaUserMenu$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
141
140
  salla.auth.logout();
142
141
  }
143
142
  getTheHeader() {
144
- return h("div", { class: { 's-user-menu-trigger-slot': true, 's-user-menu-red-dot': this.has_red_dot, 's-user-menu-trigger-avatar-only': this.avatarOnly }, id: 'trigger-slot', onClick: (e) => this.open(e), innerHTML: this.triggerSlot
143
+ return h("div", { class: { 's-user-menu-trigger-slot': true, 's-user-menu-red-dot': this.badges.pending_orders || this.badges.notifications, 's-user-menu-trigger-avatar-only': this.avatarOnly }, id: 'trigger-slot', onClick: (e) => this.open(e), innerHTML: this.triggerSlot
145
144
  .replace(/\{hello\}/g, this.hello)
146
145
  .replace(/\{first_name\}/g, this.first_name)
147
146
  .replace(/\{last_name\}/g, this.last_name)
@@ -187,7 +186,6 @@ const SallaUserMenu$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
187
186
  "hello": [32],
188
187
  "first_name": [32],
189
188
  "last_name": [32],
190
- "has_red_dot": [32],
191
189
  "avatar": [32],
192
190
  "badges": [32],
193
191
  "OrderUpdate": [32]