favesalon-embed 1.0.23 → 1.0.25

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/favesalon-embed/activate-form.entry.js +1 -1
  2. package/dist/favesalon-embed/buy-giftcard-form.entry.js +169 -19
  3. package/dist/favesalon-embed/buy-giftcard-verification.entry.js +1 -1
  4. package/dist/favesalon-embed/change-password-form.entry.js +1 -1
  5. package/dist/favesalon-embed/chat-box.entry.js +1 -1
  6. package/dist/favesalon-embed/chat-button.entry.js +1 -1
  7. package/dist/favesalon-embed/chat-form.entry.js +1 -1
  8. package/dist/favesalon-embed/chat-messages.entry.js +1 -1
  9. package/dist/favesalon-embed/chat-rooms.entry.js +1 -1
  10. package/dist/favesalon-embed/login-form.entry.js +1 -1
  11. package/dist/favesalon-embed/register-form.entry.js +1 -1
  12. package/dist/favesalon-embed/reset-password-form.entry.js +1 -1
  13. package/dist/favesalon-embed/salon-info.entry.js +1 -1
  14. package/dist/favesalon-embed/salon-latest-reviews.entry.js +1 -1
  15. package/dist/favesalon-embed/salon-latest-styles.entry.js +1 -1
  16. package/dist/favesalon-embed/salon-locations.entry.js +1 -1
  17. package/dist/favesalon-embed/salon-lookbook.entry.js +1 -1
  18. package/dist/favesalon-embed/salon-reviews.entry.js +1 -1
  19. package/dist/favesalon-embed/salon-schedules.entry.js +1 -1
  20. package/dist/favesalon-embed/salon-services.entry.js +1 -1
  21. package/dist/favesalon-embed/salon-stylists.entry.js +1 -1
  22. package/dist/favesalon-embed/services-2993bf2a.js +24157 -0
  23. package/dist/favesalon-embed/services-54b63d13.js +24157 -0
  24. package/dist/favesalon-embed/services-97ad3e3d.js +24157 -0
  25. package/dist/favesalon-embed/{services-415497f0.js → services-a7506d8c.js} +13 -9
  26. package/dist/favesalon-embed/{services-42acb174.js → services-cb90384e.js} +11 -8
  27. package/dist/favesalon-embed/style-detail.entry.js +1 -1
  28. package/dist/favesalon-embed/wizard-existing-user.entry.js +1 -1
  29. package/dist/favesalon-embed/wizard-new-user.entry.js +1 -1
  30. package/dist/types/components/buy-giftcard-form/buy-giftcard-form.d.ts +2 -0
  31. package/dist/types/services/services.d.ts +5 -13
  32. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
- import { H as HttpService, g as get_1 } from './services-42acb174.js';
2
+ import { H as HttpService, g as get_1 } from './services-2993bf2a.js';
3
3
  import { C as Colors } from './colors-ea36347a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
@@ -1,6 +1,6 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
2
  import { I as Inputmask } from './inputmask-afacb9e0.js';
3
- import { _ as _root, i as isSymbol_1, a as isObject_1, H as HttpService, d as dayjs_min, b as dateFormat, g as get_1, s as shortDateFormat, c as getSalonImage, e as getSalonAddress } from './services-42acb174.js';
3
+ import { _ as _root, i as isSymbol_1, a as isObject_1, d as dayjs_min, b as dateFormat, c as dateTimeFormatAmPm, H as HttpService, g as get_1, s as shortDateFormat, e as getSalonImage, f as getSalonAddress } from './services-2993bf2a.js';
4
4
  import { c as createCommonjsModule, g as getDefaultExportFromCjs } from './_commonjsHelpers-9bc404fc.js';
5
5
  import { C as Colors } from './colors-ea36347a.js';
6
6
 
@@ -363,6 +363,7 @@ const customStyles = {
363
363
  const BuyGiftcardForm = class {
364
364
  constructor(hostRef) {
365
365
  registerInstance(this, hostRef);
366
+ this.trackingEvents = [];
366
367
  this.onClickDeliveryDone = () => {
367
368
  const targetElement = document.getElementById('page--gift-card-style');
368
369
  targetElement && targetElement.scrollIntoView();
@@ -417,6 +418,20 @@ const BuyGiftcardForm = class {
417
418
  if (this.customAmount || this.selectedAmount) {
418
419
  if (this.recipientFirstName && this.recipientLastName) {
419
420
  if (this.selectedStyleId) {
421
+ this.trackingEvents = this.trackingEvents.concat([{
422
+ type: 'on_submit_gift_card_info',
423
+ data: {
424
+ giftCardInfo: {
425
+ customAmount: this.customAmount,
426
+ selectedAmount: this.selectedAmount,
427
+ selectedStyle: this.selectedStyleId,
428
+ recipientFirstName: this.recipientFirstName,
429
+ recipientLastName: this.recipientLastName,
430
+ recipientMessage: this.recipientMessage || '',
431
+ deliveryDate: this.deliveryDate ? dayjs_min(this.deliveryDate).format(dateFormat) : dayjs_min().format(dateFormat),
432
+ },
433
+ },
434
+ }]);
420
435
  this.step = FormStep.PaymentInfo;
421
436
  setTimeout(() => this.initMagensaPayment(), 350);
422
437
  }
@@ -432,6 +447,14 @@ const BuyGiftcardForm = class {
432
447
  this.errorMessage = 'Please select Gift card amount';
433
448
  }
434
449
  }
450
+ if (this.errorMessage) {
451
+ this.trackingEvents = this.trackingEvents.concat([{
452
+ type: 'on_submit_gift_card_info',
453
+ data: {
454
+ error: this.errorMessage,
455
+ },
456
+ }]);
457
+ }
435
458
  };
436
459
  this.salonId = undefined;
437
460
  this.teConnect = undefined;
@@ -465,23 +488,76 @@ const BuyGiftcardForm = class {
465
488
  this.fetchMagensaCredentials(),
466
489
  ];
467
490
  await Promise.all(promises);
491
+ this.trackingEvents = this.trackingEvents.concat([{
492
+ type: 'init',
493
+ data: {
494
+ sourse: 'Favesalon components',
495
+ },
496
+ }]);
468
497
  this.isLoading = false;
469
498
  }
499
+ async saveTrackingData() {
500
+ try {
501
+ const accessToken = this.userInfo && this.userInfo.accessToken;
502
+ if (accessToken) {
503
+ const fakeId = dayjs_min().valueOf();
504
+ const data = {
505
+ salonId: this.salonInfo.id,
506
+ createdDate: dayjs_min().format(dateTimeFormatAmPm),
507
+ data: this.trackingEvents,
508
+ ...this.userInfo.id ? { userId: this.userInfo.id } : {},
509
+ };
510
+ const dataBlob = new Blob([JSON.stringify(data)], { type: 'application/json' });
511
+ const fileBlob = new File([dataBlob], `gift-card--salon-${this.salonInfo.id}--${fakeId}.json`);
512
+ const fileUrl = await HttpService().uploadFile(fileBlob, accessToken);
513
+ const errorEvent = this.trackingEvents.find(evt => evt.type === 'on_submit_error') || {};
514
+ await HttpService().log({
515
+ type: 'Gift Card: Create',
516
+ salon_id: this.salonInfo.id,
517
+ data: JSON.stringify({
518
+ title: `[Component] Online gift card in ${this.salonInfo.businessName}`,
519
+ options: { fileUrl },
520
+ error: get_1(errorEvent, 'data.error', ''),
521
+ }),
522
+ }, accessToken);
523
+ }
524
+ }
525
+ catch (e) { }
526
+ }
527
+ ;
470
528
  async fetchMagensaCredentials() {
471
529
  try {
472
530
  this.magensaCredentials = await HttpService().fetchMagensaCredentials(Number(this.salonId));
531
+ this.trackingEvents = this.trackingEvents.concat([{
532
+ type: 'fetch_magensa_credentials',
533
+ data: {
534
+ magensaCredentials: this.magensaCredentials,
535
+ },
536
+ }]);
473
537
  }
474
538
  catch (e) { }
475
539
  }
476
540
  async fetchSalonInfo() {
477
541
  try {
478
542
  this.salonInfo = await HttpService().fetchSalonInfo(Number(this.salonId));
543
+ this.trackingEvents = this.trackingEvents.concat([{
544
+ type: 'fetch_salon_info',
545
+ data: {
546
+ salonInfo: this.salonInfo,
547
+ },
548
+ }]);
479
549
  }
480
550
  catch (e) { }
481
551
  }
482
552
  async fetchGiftCardSettings() {
483
553
  try {
484
554
  this.giftCardSettings = await HttpService().fetchGiftCardSettings(Number(this.salonId));
555
+ this.trackingEvents = this.trackingEvents.concat([{
556
+ type: 'fetch_gift_card_settings',
557
+ data: {
558
+ giftCardSettings: this.giftCardSettings,
559
+ },
560
+ }]);
485
561
  }
486
562
  catch (e) { }
487
563
  }
@@ -545,7 +621,7 @@ const BuyGiftcardForm = class {
545
621
  top: '50%',
546
622
  fontSize: '18px',
547
623
  transform: 'translate(0, -50%)',
548
- } }, "$"), h("input", { type: "number", placeholder: "Enter a number", min: 1, value: this.customAmount, onInput: (evt) => {
624
+ } }, "$"), h("input", { min: 1, type: "number", placeholder: "Enter a number", autoComplete: "new-password", value: this.customAmount, onInput: (evt) => {
549
625
  this.selectedAmount = null;
550
626
  this.customAmount = evt.target.value;
551
627
  }, style: {
@@ -562,7 +638,7 @@ const BuyGiftcardForm = class {
562
638
  borderTop: `1px solid ${Colors.Gray03}`,
563
639
  marginTop: '24px',
564
640
  paddingTop: '16px',
565
- } }, h("div", { style: { fontSize: '18px' } }, "Recipient name"), h("div", { style: { display: 'flex', alignItems: 'center', marginTop: '12px' } }, h("div", { style: { width: '48%' } }, h("input", { placeholder: "First name", type: "text", value: this.recipientFirstName, onInput: (evt) => {
641
+ } }, h("div", { style: { fontSize: '18px' } }, "Recipient name"), h("div", { style: { display: 'flex', alignItems: 'center', marginTop: '12px' } }, h("div", { style: { width: '48%' } }, h("input", { type: "text", placeholder: "First name", autoComplete: "new-password", value: this.recipientFirstName, onInput: (evt) => {
566
642
  this.recipientFirstName = evt.target.value.trim();
567
643
  }, style: {
568
644
  border: `1px solid ${Colors.Gray03}`,
@@ -574,7 +650,7 @@ const BuyGiftcardForm = class {
574
650
  width: '100%',
575
651
  fontSize: '18px',
576
652
  fontWeight: '600',
577
- } })), h("div", { style: { width: '48%', marginLeft: '4%' } }, h("input", { placeholder: "Last name", type: "text", value: this.recipientLastName, onInput: (evt) => {
653
+ } })), h("div", { style: { width: '48%', marginLeft: '4%' } }, h("input", { type: "text", placeholder: "Last name", autoComplete: "new-password", value: this.recipientLastName, onInput: (evt) => {
578
654
  this.recipientLastName = evt.target.value.trim();
579
655
  }, style: {
580
656
  border: `1px solid ${Colors.Gray03}`,
@@ -647,7 +723,7 @@ const BuyGiftcardForm = class {
647
723
  display: 'flex',
648
724
  alignItems: 'center',
649
725
  marginTop: '24px',
650
- } }, h("div", { style: { width: '48%' } }, h("input", { type: "text", ref: el => this.deliveryInput = el, placeholder: isDeliveryEmail ? 'Enter email' : 'Enter phone', onInput: (evt) => this.onChangeEmail(evt.target.value.trim()), style: {
726
+ } }, h("div", { style: { width: '48%' } }, h("input", { type: "text", autoComplete: "new-password", ref: el => this.deliveryInput = el, placeholder: isDeliveryEmail ? 'Enter email' : 'Enter phone', onInput: (evt) => this.onChangeEmail(evt.target.value.trim()), style: {
651
727
  border: `1px solid ${Colors.Gray03}`,
652
728
  backgroundColor: Colors.White,
653
729
  color: Colors.TextColor,
@@ -657,7 +733,7 @@ const BuyGiftcardForm = class {
657
733
  width: '100%',
658
734
  fontSize: '18px',
659
735
  fontWeight: '600',
660
- } })), h("div", { style: { width: '48%', marginLeft: '4%', position: 'relative' } }, h("input", { type: "text", ref: el => this.deliveryReenterInput = el, placeholder: isDeliveryEmail ? 'Re-enter email' : 'Re-enter phone', onInput: (evt) => this.onChangeConfirmEmail(evt.target.value.trim()), style: {
736
+ } })), h("div", { style: { width: '48%', marginLeft: '4%', position: 'relative' } }, h("input", { type: "text", autoComplete: "new-password", ref: el => this.deliveryReenterInput = el, placeholder: isDeliveryEmail ? 'Re-enter email' : 'Re-enter phone', onInput: (evt) => this.onChangeConfirmEmail(evt.target.value.trim()), style: {
661
737
  border: `1px solid ${Colors.Gray03}`,
662
738
  backgroundColor: Colors.White,
663
739
  color: Colors.TextColor,
@@ -760,7 +836,7 @@ const BuyGiftcardForm = class {
760
836
  alignItems: 'center',
761
837
  justifyContent: 'center',
762
838
  paddingTop: '6px',
763
- } }, h("icon-date", null)), h("input", { class: "fs-input--date", type: "date", placeholder: "Today", min: dayjs_min().format(dateFormat), onInput: (evt) => {
839
+ } }, h("icon-date", null)), h("input", { type: "date", class: "fs-input--date", placeholder: "Today", autoComplete: "new-password", min: dayjs_min().format(dateFormat), onInput: (evt) => {
764
840
  this.deliveryDate = evt.target.value.trim();
765
841
  }, style: {
766
842
  position: 'absolute',
@@ -807,18 +883,38 @@ const BuyGiftcardForm = class {
807
883
  try {
808
884
  const { error, token } = await this.teConnect.createPayment();
809
885
  if (!error && token) {
886
+ this.trackingEvents = this.trackingEvents.concat([{
887
+ type: 'on_create_card_token',
888
+ data: {
889
+ token,
890
+ },
891
+ }]);
810
892
  return Promise.resolve({ token });
811
893
  }
894
+ this.trackingEvents = this.trackingEvents.concat([{
895
+ type: 'on_create_card_token',
896
+ data: {
897
+ error,
898
+ },
899
+ }]);
812
900
  return Promise.reject({ message: error });
813
901
  }
814
- catch (res) {
815
- return Promise.reject({ message: res.error || 'Something went wrong when processing your card' });
902
+ catch (response) {
903
+ const errorMessage = response.error || 'Something went wrong when processing your card';
904
+ this.trackingEvents = this.trackingEvents.concat([{
905
+ type: 'on_create_card_token',
906
+ data: {
907
+ error: errorMessage,
908
+ response,
909
+ },
910
+ }]);
911
+ return Promise.reject({ message: errorMessage });
816
912
  }
817
913
  }
818
914
  async processCardToken(Token) {
819
915
  const defaultErrorMessage = 'Something went wrong when creating payment transaction';
820
916
  try {
821
- const { MPPGv4WSFault, TransactionOutput } = await HttpService().magensaProcessToken(Number(this.salonId), {
917
+ const { MPPGv4WSFault, CustomerTransactionID, TransactionOutput } = await HttpService().magensaProcessToken(Number(this.salonId), {
822
918
  raw_data: [{
823
919
  Token,
824
920
  TransactionInput: {
@@ -828,16 +924,34 @@ const BuyGiftcardForm = class {
828
924
  },
829
925
  }],
830
926
  });
831
- if (!MPPGv4WSFault && TransactionOutput && TransactionOutput.TransactionID) {
832
- return Promise.resolve({ transactionID: TransactionOutput.TransactionID });
927
+ if (!MPPGv4WSFault) {
928
+ this.trackingEvents = this.trackingEvents.concat([{
929
+ type: 'process_magensa_token_success',
930
+ data: {
931
+ transactionID: CustomerTransactionID,
932
+ },
933
+ }]);
934
+ return Promise.resolve({ transactionID: CustomerTransactionID });
833
935
  }
834
936
  let message = MPPGv4WSFault && MPPGv4WSFault.FaultReason;
835
937
  if (!message && TransactionOutput && TransactionOutput.TransactionMessage) {
836
938
  message = TransactionOutput.TransactionMessage;
837
939
  }
940
+ this.trackingEvents = this.trackingEvents.concat([{
941
+ type: 'process_magensa_token_error',
942
+ data: {
943
+ error: message || defaultErrorMessage,
944
+ },
945
+ }]);
838
946
  return Promise.reject({ message: message || defaultErrorMessage });
839
947
  }
840
948
  catch (res) {
949
+ this.trackingEvents = this.trackingEvents.concat([{
950
+ type: 'process_magensa_token_error',
951
+ data: {
952
+ error: res.error || defaultErrorMessage,
953
+ },
954
+ }]);
841
955
  return Promise.reject({ message: res.error || defaultErrorMessage });
842
956
  }
843
957
  }
@@ -854,7 +968,7 @@ const BuyGiftcardForm = class {
854
968
  ? ((giftCardStyles || []).find(style => style.id === this.selectedStyleId) || {}).imageUrl : '';
855
969
  const recipientUserEmail = (this.recipientEmail || '').indexOf('@') > -1 ? this.recipientEmail : '';
856
970
  const recipientUserPhone = (this.recipientEmail || '').indexOf('@') === -1 ? this.recipientEmail : '';
857
- const response = await HttpService().onBuyGiftCard(this.salonInfo.id, {
971
+ const giftCardData = {
858
972
  source: '',
859
973
  amount: this.customAmount || this.selectedAmount || '',
860
974
  gift_card_style: selectedGiftCardStyle || '',
@@ -876,21 +990,57 @@ const BuyGiftcardForm = class {
876
990
  type: 'magensa',
877
991
  magensa_transaction_id: transactionID,
878
992
  },
879
- });
993
+ };
994
+ this.trackingEvents = this.trackingEvents.concat([{
995
+ type: 'on_submit_gift_card',
996
+ data: {
997
+ giftCardData,
998
+ },
999
+ }]);
1000
+ const response = await HttpService().onBuyGiftCard(this.salonInfo.id, giftCardData);
880
1001
  const { status, message } = (response.data || {});
881
1002
  if (status === true) {
1003
+ this.trackingEvents = this.trackingEvents.concat([{
1004
+ type: 'on_submit_succeed',
1005
+ data: {
1006
+ response,
1007
+ },
1008
+ }]);
1009
+ await this.saveTrackingData();
882
1010
  this.step = FormStep.PaymentSucceed;
883
1011
  }
884
1012
  else {
885
1013
  this.errorMessage = message || `Something went wrong when sending your gift card`;
1014
+ this.trackingEvents = this.trackingEvents.concat([{
1015
+ type: 'on_submit_error',
1016
+ data: {
1017
+ error: this.errorMessage,
1018
+ response,
1019
+ },
1020
+ }]);
1021
+ await this.saveTrackingData();
886
1022
  }
887
1023
  }
888
1024
  else {
889
1025
  this.errorMessage = `Something went wrong with your credit card`;
1026
+ this.trackingEvents = this.trackingEvents.concat([{
1027
+ type: 'on_submit_error',
1028
+ data: {
1029
+ error: 'No card token',
1030
+ },
1031
+ }]);
1032
+ await this.saveTrackingData();
890
1033
  }
891
1034
  }
892
1035
  catch (error) {
893
1036
  this.errorMessage = error.message || (error.error && error.error.message) || get_1(error, 'response.data.message') || `Something went wrong when sending your gift card`;
1037
+ this.trackingEvents = this.trackingEvents.concat([{
1038
+ type: 'on_submit_error',
1039
+ data: {
1040
+ error: this.errorMessage,
1041
+ },
1042
+ }]);
1043
+ await this.saveTrackingData();
894
1044
  }
895
1045
  }
896
1046
  this.isSubmitting = false;
@@ -908,7 +1058,10 @@ const BuyGiftcardForm = class {
908
1058
  fontSize: '18px',
909
1059
  fontWeight: '700',
910
1060
  marginLeft: '6px',
911
- } }, this.deliveryDate ? dayjs_min(this.deliveryDate).format(shortDateFormat) : 'Today')), h("div", { style: { fontSize: '18px', marginTop: '24px' } }, "Payment"), h("div", { style: { marginTop: '8px', marginLeft: '-6px' } }, h("credit-card-types", null)), h("div", { id: "buy-giftcard--payment", style: { height: '300px', maxWidth: '400px', marginTop: '24px' } }), h("div", { class: "fs--form--actions" }, h("button", { type: "button", disabled: this.isSubmitting, style: {
1061
+ } }, this.deliveryDate ? dayjs_min(this.deliveryDate).format(shortDateFormat) : 'Today')), h("div", { style: { fontSize: '18px', marginTop: '24px' } }, "Payment"), h("div", { style: { marginTop: '8px', marginLeft: '-6px' } }, h("credit-card-types", null)), h("div", { id: "buy-giftcard--payment", style: { height: '300px', maxWidth: '400px', marginTop: '24px' } }), h("div", { class: "fs--form--actions" }, this.errorMessage && (h("div", { style: {
1062
+ color: Colors.Red03,
1063
+ marginBottom: '16px',
1064
+ } }, this.errorMessage)), h("button", { type: "button", disabled: this.isSubmitting, style: {
912
1065
  border: `1px solid ${Colors.Secondary}`,
913
1066
  backgroundColor: Colors.Secondary,
914
1067
  color: Colors.White,
@@ -925,10 +1078,7 @@ const BuyGiftcardForm = class {
925
1078
  borderColor: Colors.Gray03,
926
1079
  backgroundColor: Colors.Gray03,
927
1080
  } : {},
928
- }, onClick: () => this.onSubmitPaymentForm() }, this.isSubmitting ? 'Processing...' : 'Submit', " ", this.isSubmitting && (h("span", { style: { marginLeft: '4px' } }, h("icon-loading", null)))), this.errorMessage && (h("div", { style: {
929
- color: Colors.Red03,
930
- marginTop: '16px',
931
- } }, this.errorMessage)))));
1081
+ }, onClick: () => this.onSubmitPaymentForm() }, this.isSubmitting ? 'Processing...' : 'Submit', " ", this.isSubmitting && (h("span", { style: { marginLeft: '4px' } }, h("icon-loading", null)))))));
932
1082
  }
933
1083
  renderSalonInfo() {
934
1084
  const salonImageUrl = getSalonImage(this.salonInfo);
@@ -2,7 +2,7 @@ import { r as registerInstance, h } from './index-888e99e3.js';
2
2
  import { I as Inputmask } from './inputmask-afacb9e0.js';
3
3
  import { f as formatPhoneNumber } from './utils-359c37f7.js';
4
4
  import { C as Colors } from './colors-ea36347a.js';
5
- import { H as HttpService } from './services-42acb174.js';
5
+ import { H as HttpService } from './services-2993bf2a.js';
6
6
  import './_commonjsHelpers-9bc404fc.js';
7
7
 
8
8
  const buyGiftcardVerificationCss = ".buy-giftcard--verification *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}";
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
- import { H as HttpService, g as get_1 } from './services-42acb174.js';
2
+ import { H as HttpService, g as get_1 } from './services-2993bf2a.js';
3
3
  import { C as Colors } from './colors-ea36347a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
@@ -1,6 +1,6 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
2
  import { C as Colors } from './colors-ea36347a.js';
3
- import { H as HttpService } from './services-42acb174.js';
3
+ import { H as HttpService } from './services-2993bf2a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
6
6
  const indexCss = ".chat-widget,.chat-widget--sidebar,.chat-widget--content{display:flex;height:100%;width:100%}.chat-widget{font-size:16px;position:relative;font-family:'Roboto', sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chat-widget--sidebar,.chat-widget--content{background-color:#fff;border:1px solid #EFEFEF;position:absolute;inset:0;flex-direction:column}.chat-widget .chat-widget--sidebar{z-index:10}.chat-widget .chat-widget--content{z-index:5}.chat-widget.has-chat-room .chat-widget--content{z-index:10}.chat-widget--content-header{background-color:#001529;border-bottom:1px solid #EFEFEF;display:flex;align-items:center;justify-content:space-between;padding:16px}.chat-widget--content-title{font-size:20px;font-weight:600;line-height:1;margin:0}.chat-widget--content-close{border:1px solid #fff;cursor:pointer;display:block;position:absolute;z-index:1000;top:50%;right:0;width:30px;height:30px;transform:translate(0, -50%);-moz-border-radius:30px;-webkit-border-radius:30px;border-radius:30px;background-size:contain;background-repeat:no-repeat;background-position:center center;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAAAXNSR0IArs4c6QAAA3hJREFUaAXlm8+K00Acx7MiCIJH/yw+gA9g25O49SL4AO3Bp1jw5NvktC+wF88qevK4BU97EmzxUBCEolK/n5gp3W6TTJPfpNPNF37MNsl85/vN/DaTmU6PknC4K+pniqeKJ3k8UnkvDxXJzzy+q/yaxxeVHxW/FNHjgRSeKt4rFoplzaAuHHDBGR2eS9G54reirsmienDCTRt7xwsp+KAoEmt9nLaGitZxrBbPFNaGfPloGw2t4JVamSt8xYW6Dg1oCYo3Yv+rCGViV160oMkcd8SYKnYV1Nb1aEOjCe6L5ZOiLfF120EjWhuBu3YIZt1NQmujnk5F4MgOpURzLfAwOBSTmzp3fpDxuI/pabxpqOoz2r2HLAb0GMbZKlNV5/Hg9XJypguryA7lPF5KMdTZQzHjqxNPhWhzIuAruOl1eNqKEx1tSh5rfbxdw7mOxCq4qS68ZTjKS1YVvilu559vWvFHhh4rZrdyZ69Vmpgdj8fJbDZLJpNJ0uv1cnr/gjrUhQMuI+ANjyuwftQ0bbL6Erp0mM/ny8Fg4M3LtdRxgMtKl3jwmIHVxYXChFy94/Rmpa/pTbNUhstKV+4Rr8lLQ9KlUvJKLyG8yvQ2s9SBy1Jb7jV5a0yapfF6apaZLjLLcWtd4sNrmJUMHyM+1xibTjH82Zh01TNlhsrOhdKTe00uAzZQmN6+KW+sDa/JD2PSVQ873m29yf+1Q9VDzfEYlHi1G5LKBBWZbtEsHbFwb1oYDwr1ZiF/2bnCSg1OBE/pfr9/bWx26UxJL3ONPISOLKUvQza0LZUxSKyjpdTGa/vDEr25rddbMM0Q3O6Lx3rqFvU+x6UrRKQY7tyrZecmD9FODy8uLizTmilwNj0kraNcAJhOp5aGVwsAGD5VmJBrWWbJSgWT9zrzWepQF47RaGSiKfeGx6Szi3gzmX/HHbihwBser4B9UJYpFBNX4R6vTn3VQnez0SymnrHQMsRYGTr1dSk34ljRqS/EMd2pLQ8YBp3a1PLfcqCpo8gtHkZFHKkTX6fs3MY0blKnth66rKCnU0VRGu37ONrQaA4eZDFtWAu2fXj9zjFkxTBOo8F7t926gTp/83Kyzzcy2kZD6xiqxTYnHLRFm3vHiRSwNSjkz3hoIzo8lCKWUlg/YtGs7tObunDAZfpDLbfEI15zsEIY3U/x/gHHc/G1zltnAgAAAABJRU5ErkJggg==')}@media (min-width: 992px){.chat-widget--sidebar,.chat-widget--content{position:static;width:auto;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.chat-widget--sidebar{min-width:320px;max-width:320px;margin-right:24px}.chat-widget--content{flex-grow:1;flex-shrink:1}.chat-rooms--search,.chat-widget--content-header{-moz-border-radius:8px 8px 0 0;-webkit-border-radius:8px 8px 0 0;border-radius:8px 8px 0 0}}";
@@ -1,6 +1,6 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
2
  import { C as Colors } from './colors-ea36347a.js';
3
- import { H as HttpService } from './services-42acb174.js';
3
+ import { H as HttpService } from './services-2993bf2a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
6
6
  const indexCss = "@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap'); chat-button{display:block;position:relative}.chat-button--indicator{cursor:pointer;position:absolute;inset:0}.chat-button--counter{background-color:rgb(240, 90, 97);border:1px solid rgb(255, 255, 255);position:absolute;right:6px;top:0px;height:8px;width:8px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.chat-box{font-family:'Roboto', sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-moz-border-radius:8px 8px 0px 0px;-webkit-border-radius:8px 8px 0px 0px;border-radius:8px 8px 0px 0px;-moz-box-shadow:rgba(0, 0, 0, 0.25) 0px 0px 24px;-webkit-box-shadow:rgba(0, 0, 0, 0.25) 0px 0px 24px;box-shadow:rgba(0, 0, 0, 0.25) 0px 0px 24px;background-color:#fff;display:flex;flex-direction:column;position:fixed;right:1px;bottom:0px;z-index:20000;font-size:16px;text-align:left;color:#141414;width:80vw;height:480px;max-height:80vh}.chat-box--header{display:flex;justify-content:space-between;padding:16px;position:relative;-moz-border-radius:8px 8px 0px 0px;-webkit-border-radius:8px 8px 0px 0px;border-radius:8px 8px 0px 0px}.chat-box--title{color:#fff;font-size:24px;font-weight:600;line-height:1;display:flex;align-items:center;justify-content:space-between;margin:0}.chat-box--close:hover{opacity:0.85}.chat-box--close{cursor:pointer;display:block;position:absolute;z-index:1000;top:50%;right:0;width:40px;height:40px;transform:translate(0, -50%);background-size:contain;background-repeat:no-repeat;background-position:center center;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAAAXNSR0IArs4c6QAAA3hJREFUaAXlm8+K00Acx7MiCIJH/yw+gA9g25O49SL4AO3Bp1jw5NvktC+wF88qevK4BU97EmzxUBCEolK/n5gp3W6TTJPfpNPNF37MNsl85/vN/DaTmU6PknC4K+pniqeKJ3k8UnkvDxXJzzy+q/yaxxeVHxW/FNHjgRSeKt4rFoplzaAuHHDBGR2eS9G54reirsmienDCTRt7xwsp+KAoEmt9nLaGitZxrBbPFNaGfPloGw2t4JVamSt8xYW6Dg1oCYo3Yv+rCGViV160oMkcd8SYKnYV1Nb1aEOjCe6L5ZOiLfF120EjWhuBu3YIZt1NQmujnk5F4MgOpURzLfAwOBSTmzp3fpDxuI/pabxpqOoz2r2HLAb0GMbZKlNV5/Hg9XJypguryA7lPF5KMdTZQzHjqxNPhWhzIuAruOl1eNqKEx1tSh5rfbxdw7mOxCq4qS68ZTjKS1YVvilu559vWvFHhh4rZrdyZ69Vmpgdj8fJbDZLJpNJ0uv1cnr/gjrUhQMuI+ANjyuwftQ0bbL6Erp0mM/ny8Fg4M3LtdRxgMtKl3jwmIHVxYXChFy94/Rmpa/pTbNUhstKV+4Rr8lLQ9KlUvJKLyG8yvQ2s9SBy1Jb7jV5a0yapfF6apaZLjLLcWtd4sNrmJUMHyM+1xibTjH82Zh01TNlhsrOhdKTe00uAzZQmN6+KW+sDa/JD2PSVQ873m29yf+1Q9VDzfEYlHi1G5LKBBWZbtEsHbFwb1oYDwr1ZiF/2bnCSg1OBE/pfr9/bWx26UxJL3ONPISOLKUvQza0LZUxSKyjpdTGa/vDEr25rddbMM0Q3O6Lx3rqFvU+x6UrRKQY7tyrZecmD9FODy8uLizTmilwNj0kraNcAJhOp5aGVwsAGD5VmJBrWWbJSgWT9zrzWepQF47RaGSiKfeGx6Szi3gzmX/HHbihwBser4B9UJYpFBNX4R6vTn3VQnez0SymnrHQMsRYGTr1dSk34ljRqS/EMd2pLQ8YBp3a1PLfcqCpo8gtHkZFHKkTX6fs3MY0blKnth66rKCnU0VRGu37ONrQaA4eZDFtWAu2fXj9zjFkxTBOo8F7t926gTp/83Kyzzcy2kZD6xiqxTYnHLRFm3vHiRSwNSjkz3hoIzo8lCKWUlg/YtGs7tObunDAZfpDLbfEI15zsEIY3U/x/gHHc/G1zltnAgAAAABJRU5ErkJggg==')}.chat-box--help{font-family:'Roboto', sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:fixed;right:16px;bottom:80px;z-index:20000}.chat-box--help-icon{background-color:rgba(0, 21, 41, 1);cursor:pointer;color:#fff;height:50px;width:50px;display:flex;align-items:center;justify-content:center;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px}.chat-box--help-icon:hover{background-color:rgba(0, 21, 41, 0.85)}.chat-box--help-icon svg{height:30px;width:30px}.chat-box--help-close:hover{opacity:0.85}.chat-box--help-close{cursor:pointer;display:block;position:absolute;z-index:1000;top:6px;right:6px;width:24px;height:24px;background-size:contain;background-repeat:no-repeat;background-position:center center;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAAAXNSR0IArs4c6QAAA3hJREFUaAXlm8+K00Acx7MiCIJH/yw+gA9g25O49SL4AO3Bp1jw5NvktC+wF88qevK4BU97EmzxUBCEolK/n5gp3W6TTJPfpNPNF37MNsl85/vN/DaTmU6PknC4K+pniqeKJ3k8UnkvDxXJzzy+q/yaxxeVHxW/FNHjgRSeKt4rFoplzaAuHHDBGR2eS9G54reirsmienDCTRt7xwsp+KAoEmt9nLaGitZxrBbPFNaGfPloGw2t4JVamSt8xYW6Dg1oCYo3Yv+rCGViV160oMkcd8SYKnYV1Nb1aEOjCe6L5ZOiLfF120EjWhuBu3YIZt1NQmujnk5F4MgOpURzLfAwOBSTmzp3fpDxuI/pabxpqOoz2r2HLAb0GMbZKlNV5/Hg9XJypguryA7lPF5KMdTZQzHjqxNPhWhzIuAruOl1eNqKEx1tSh5rfbxdw7mOxCq4qS68ZTjKS1YVvilu559vWvFHhh4rZrdyZ69Vmpgdj8fJbDZLJpNJ0uv1cnr/gjrUhQMuI+ANjyuwftQ0bbL6Erp0mM/ny8Fg4M3LtdRxgMtKl3jwmIHVxYXChFy94/Rmpa/pTbNUhstKV+4Rr8lLQ9KlUvJKLyG8yvQ2s9SBy1Jb7jV5a0yapfF6apaZLjLLcWtd4sNrmJUMHyM+1xibTjH82Zh01TNlhsrOhdKTe00uAzZQmN6+KW+sDa/JD2PSVQ873m29yf+1Q9VDzfEYlHi1G5LKBBWZbtEsHbFwb1oYDwr1ZiF/2bnCSg1OBE/pfr9/bWx26UxJL3ONPISOLKUvQza0LZUxSKyjpdTGa/vDEr25rddbMM0Q3O6Lx3rqFvU+x6UrRKQY7tyrZecmD9FODy8uLizTmilwNj0kraNcAJhOp5aGVwsAGD5VmJBrWWbJSgWT9zrzWepQF47RaGSiKfeGx6Szi3gzmX/HHbihwBser4B9UJYpFBNX4R6vTn3VQnez0SymnrHQMsRYGTr1dSk34ljRqS/EMd2pLQ8YBp3a1PLfcqCpo8gtHkZFHKkTX6fs3MY0blKnth66rKCnU0VRGu37ONrQaA4eZDFtWAu2fXj9zjFkxTBOo8F7t926gTp/83Kyzzcy2kZD6xiqxTYnHLRFm3vHiRSwNSjkz3hoIzo8lCKWUlg/YtGs7tObunDAZfpDLbfEI15zsEIY3U/x/gHHc/G1zltnAgAAAABJRU5ErkJggg==')}.chat-box--help-content-wrapper{background-color:#fff;border:1px solid #f5f5f5;width:200px;padding:20px;position:absolute;bottom:100%;right:-8px;margin-bottom:16px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;-moz-box-shadow:rgba(0, 0, 0, 0.15) 0px 0px 24px;-webkit-box-shadow:rgba(0, 0, 0, 0.15) 0px 0px 24px;box-shadow:rgba(0, 0, 0, 0.15) 0px 0px 24px}.chat-box--help-content{cursor:pointer;display:flex;align-items:center}.chat-box--help-content:hover{opacity:0.85}.chat-box--help-content:before{content:' ';position:absolute;top:100%;right:22px;border-style:solid;border-width:10px;border-color:#f5f5f5 transparent transparent transparent}.chat-box--help-content:after{content:' ';position:absolute;margin-top:-1px;top:100%;right:22px;border-style:solid;border-width:10px;border-color:#fff transparent transparent transparent}.chat-box--help-avatar{margin-right:16px;height:48px;min-width:48px;max-width:48px;overflow:hidden;-moz-border-radius:48px;-webkit-border-radius:48px;border-radius:48px}.chat-box--help-avatar img{height:100%;width:100%;object-fit:cover}.chat-box--help-text{color:#141414;font-size:16px;line-height:1.3;text-align:left}@media (min-width: 768px){.chat-box{border:1px solid #fff;height:480px;max-height:90vh;width:560px}.chat-box--header{-moz-border-radius:8px 8px 0px 0px;-webkit-border-radius:8px 8px 0px 0px;border-radius:8px 8px 0px 0px}.chat-box--help{bottom:96px}}@media (min-width: 1024px){.chat-box--help{bottom:24px}}";
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
- import { d as dayjs_min, H as HttpService } from './services-42acb174.js';
2
+ import { d as dayjs_min, H as HttpService } from './services-2993bf2a.js';
3
3
  import { c as createCommonjsModule, a as commonjsGlobal } from './_commonjsHelpers-9bc404fc.js';
4
4
  import './colors-ea36347a.js';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
- import { d as dayjs_min, H as HttpService, t as timeFormatAmPm } from './services-42acb174.js';
2
+ import { d as dayjs_min, H as HttpService, t as timeFormatAmPm } from './services-2993bf2a.js';
3
3
  import { l as lodash } from './lodash-b4fe554a.js';
4
4
  import { C as Colors } from './colors-ea36347a.js';
5
5
  import { r as relativeTime } from './relativeTime-15477f02.js';
@@ -1,7 +1,7 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
2
  import { l as lodash } from './lodash-b4fe554a.js';
3
3
  import { C as Colors } from './colors-ea36347a.js';
4
- import { H as HttpService } from './services-42acb174.js';
4
+ import { H as HttpService } from './services-2993bf2a.js';
5
5
  import { f as formatPhoneNumber } from './utils-359c37f7.js';
6
6
  import './_commonjsHelpers-9bc404fc.js';
7
7
 
@@ -1,6 +1,6 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
2
  import { C as Colors } from './colors-ea36347a.js';
3
- import { H as HttpService } from './services-42acb174.js';
3
+ import { H as HttpService } from './services-2993bf2a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
6
6
  const loginFormCss = ".form--user-login .form--login-label{cursor:pointer;display:block;margin-top:0;margin-bottom:6px}.form--user-login input,.form--user-login button{border:1px solid #cecece;box-sizing:border-box;display:inline-block;width:100%;padding:4px 11px;height:44px;-moz-transition:all 0.3s;-webkit-transition:all 0.3s;transition:all 0.3s;-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px}.form--user-login button{background-color:#001529;border:1px solid #001529;color:#fff;cursor:pointer;height:44px}.form--user-login button:disabled{background-color:#cecece;border:1px solid #cecece;color:#212121}";
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
- import { H as HttpService, g as get_1 } from './services-42acb174.js';
2
+ import { H as HttpService, g as get_1 } from './services-2993bf2a.js';
3
3
  import { C as Colors } from './colors-ea36347a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
- import { H as HttpService, g as get_1 } from './services-42acb174.js';
2
+ import { H as HttpService, g as get_1 } from './services-2993bf2a.js';
3
3
  import { C as Colors } from './colors-ea36347a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
- import { H as HttpService } from './services-42acb174.js';
2
+ import { H as HttpService } from './services-2993bf2a.js';
3
3
  import './_commonjsHelpers-9bc404fc.js';
4
4
  import './colors-ea36347a.js';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
- import { H as HttpService, d as dayjs_min, f as shortDateYearFormat } from './services-42acb174.js';
2
+ import { H as HttpService, d as dayjs_min, h as shortDateYearFormat } from './services-2993bf2a.js';
3
3
  import { C as Colors } from './colors-ea36347a.js';
4
4
  import { g as getRatingText } from './utils-359c37f7.js';
5
5
  import './_commonjsHelpers-9bc404fc.js';
@@ -1,6 +1,6 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
2
  import { C as Colors } from './colors-ea36347a.js';
3
- import { H as HttpService, j as isVideoMedia } from './services-42acb174.js';
3
+ import { H as HttpService, k as isVideoMedia } from './services-2993bf2a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
6
6
  const indexCss = "salon-latest-styles .view--salon-styles--item{width:120px;height:120px}@media (min-width: 1024px){salon-latest-styles .view--salon-styles--item{width:200px;height:200px}}";
@@ -1,7 +1,7 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
2
  import { a as formatWebsiteUrl, b as formatFullAddress } from './utils-359c37f7.js';
3
3
  import { C as Colors } from './colors-ea36347a.js';
4
- import { H as HttpService } from './services-42acb174.js';
4
+ import { H as HttpService } from './services-2993bf2a.js';
5
5
  import './_commonjsHelpers-9bc404fc.js';
6
6
 
7
7
  const indexCss = "@media (min-width: 768px){salon-locations .salon-contact--links{overflow:hidden;margin-left:-32px}salon-locations .salon-contact--links-item{float:left;display:flex;flex-direction:row;align-items:center;font-size:16px;min-width:300px;padding-left:32px}salon-locations .salon-contact--links-item:nth-child(2n+1){clear:left}salon-locations .salon-contact--links-item+.salon-contact--links-item{margin-top:8px}}";
@@ -1,6 +1,6 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
2
  import { C as Colors } from './colors-ea36347a.js';
3
- import { H as HttpService } from './services-42acb174.js';
3
+ import { H as HttpService } from './services-2993bf2a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
6
6
  const indexCss = "@media (max-width: 768px){salon-lookbook .view-header{display:block !important}salon-lookbook .salon-loobook--serch-result{margin-bottom:16px}salon-lookbook .salon-loobook--filter-wrapper>label,salon-lookbook .salon-loobook--sort-wrapper>label{display:none !important}}";
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
- import { H as HttpService, d as dayjs_min, f as shortDateYearFormat } from './services-42acb174.js';
2
+ import { H as HttpService, d as dayjs_min, h as shortDateYearFormat } from './services-2993bf2a.js';
3
3
  import { C as Colors } from './colors-ea36347a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
- import { H as HttpService, B as BusinessHourStatus } from './services-42acb174.js';
2
+ import { H as HttpService, B as BusinessHourStatus } from './services-2993bf2a.js';
3
3
  import { C as Colors } from './colors-ea36347a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
- import { H as HttpService, h as sortBy_1 } from './services-42acb174.js';
2
+ import { H as HttpService, j as sortBy_1 } from './services-2993bf2a.js';
3
3
  import { C as Colors } from './colors-ea36347a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
@@ -1,6 +1,6 @@
1
1
  import { r as registerInstance, h } from './index-888e99e3.js';
2
2
  import { C as Colors } from './colors-ea36347a.js';
3
- import { H as HttpService } from './services-42acb174.js';
3
+ import { H as HttpService } from './services-2993bf2a.js';
4
4
  import './_commonjsHelpers-9bc404fc.js';
5
5
 
6
6
  const indexCss = ".view--salon-stylists{overflow:hidden;margin-left:-12px;margin-top:-12px}.view--salon-stylists .salon-stylist{float:left;padding-left:12px;padding-top:12px;width:50%}.view--salon-stylists .salon-stylist--avatar{height:180px}@media (min-width: 576px){.view--salon-stylists .salon-stylist{width:33.33%;max-width:240px}}@media (min-width: 768px){.view--salon-stylists{margin-left:-24px;margin-top:-24px}.view--salon-stylists .salon-stylist{padding-left:24px;padding-top:24px;width:264px;max-width:none}.view--salon-stylists .salon-stylist--avatar{height:240px}}";