@thefittingroom/shop-ui 3.0.0 → 3.1.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 (88) hide show
  1. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/ErrorModal.js +43 -0
  2. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/ErrorModal.js.map +1 -0
  3. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/FitModal.js +106 -0
  4. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/FitModal.js.map +1 -0
  5. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/ForgotPasswordModal.js +43 -0
  6. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/ForgotPasswordModal.js.map +1 -0
  7. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/LoadingAvatarModal.js +38 -0
  8. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/LoadingAvatarModal.js.map +1 -0
  9. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/LoggedOutModal.js +36 -0
  10. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/LoggedOutModal.js.map +1 -0
  11. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/ModalManager.js +107 -0
  12. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/ModalManager.js.map +1 -0
  13. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/NoAvatarModal.js +19 -0
  14. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/NoAvatarModal.js.map +1 -0
  15. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/ResetLinkModal.js +31 -0
  16. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/ResetLinkModal.js.map +1 -0
  17. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/ScanCodeModal.js +77 -0
  18. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/ScanCodeModal.js.map +1 -0
  19. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/SignInModal.js +94 -0
  20. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/SignInModal.js.map +1 -0
  21. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/SizeErrorModal.js +43 -0
  22. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/SizeErrorModal.js.map +1 -0
  23. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/TryOnModal.js +51 -0
  24. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Modals/TryOnModal.js.map +1 -0
  25. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/SizeRec.js +363 -0
  26. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/SizeRec.js.map +1 -0
  27. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Vto.js +52 -0
  28. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/Vto.js.map +1 -0
  29. package/{dist/esm/components/index.d.ts → .rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/index.js} +3 -2
  30. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/index.js.map +1 -0
  31. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/locale.js +108 -0
  32. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/locale.js.map +1 -0
  33. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/slider.js +44 -0
  34. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/slider.js.map +1 -0
  35. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/svgs.js +33 -0
  36. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/svgs.js.map +1 -0
  37. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/uiError.js +8 -0
  38. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/components/uiError.js.map +1 -0
  39. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/helpers/telephone.js +12368 -0
  40. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/helpers/telephone.js.map +1 -0
  41. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/helpers/validations.js +15 -0
  42. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/helpers/validations.js.map +1 -0
  43. package/{dist/esm/index.d.ts → .rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/index.js} +1 -1
  44. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/index.js.map +1 -0
  45. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/init.js +7 -0
  46. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/init.js.map +1 -0
  47. package/{dist/esm/styles/index.d.ts → .rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/styles/index.js} +1 -0
  48. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/styles/index.js.map +1 -0
  49. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/tfr-modal.js +77 -0
  50. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/tfr-modal.js.map +1 -0
  51. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/tfr-size-rec.js +188 -0
  52. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/tfr-size-rec.js.map +1 -0
  53. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/tfr.js +196 -0
  54. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/tfr.js.map +1 -0
  55. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/types/index.js +15 -0
  56. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/esm/types/index.js.map +1 -0
  57. package/.rollup.cache/home/runner/work/shop-sdk-ui/shop-sdk-ui/dist/tsconfig.tsbuildinfo +1 -0
  58. package/dist/esm/index.js +60 -36
  59. package/dist/esm/index.js.map +1 -1
  60. package/dist/esm/index.min.js +4 -4
  61. package/dist/esm/index.min.js.map +1 -1
  62. package/dist/tsconfig.tsbuildinfo +1 -0
  63. package/package.json +13 -12
  64. package/dist/esm/components/Modals/ErrorModal.d.ts +0 -8
  65. package/dist/esm/components/Modals/FitModal.d.ts +0 -3
  66. package/dist/esm/components/Modals/ForgotPasswordModal.d.ts +0 -3
  67. package/dist/esm/components/Modals/LoadingAvatarModal.d.ts +0 -3
  68. package/dist/esm/components/Modals/LoggedOutModal.d.ts +0 -3
  69. package/dist/esm/components/Modals/ModalManager.d.ts +0 -8
  70. package/dist/esm/components/Modals/NoAvatarModal.d.ts +0 -3
  71. package/dist/esm/components/Modals/ResetLinkModal.d.ts +0 -3
  72. package/dist/esm/components/Modals/ScanCodeModal.d.ts +0 -3
  73. package/dist/esm/components/Modals/SignInModal.d.ts +0 -3
  74. package/dist/esm/components/Modals/SizeErrorModal.d.ts +0 -3
  75. package/dist/esm/components/Modals/TryOnModal.d.ts +0 -3
  76. package/dist/esm/components/SizeRec.d.ts +0 -65
  77. package/dist/esm/components/Vto.d.ts +0 -9
  78. package/dist/esm/components/locale.d.ts +0 -41
  79. package/dist/esm/components/slider.d.ts +0 -3
  80. package/dist/esm/components/svgs.d.ts +0 -3
  81. package/dist/esm/components/uiError.d.ts +0 -6
  82. package/dist/esm/helpers/telephone.d.ts +0 -1
  83. package/dist/esm/helpers/validations.d.ts +0 -2
  84. package/dist/esm/init.d.ts +0 -12
  85. package/dist/esm/tfr-modal.d.ts +0 -21
  86. package/dist/esm/tfr-size-rec.d.ts +0 -58
  87. package/dist/esm/tfr.d.ts +0 -44
  88. package/dist/esm/types/index.d.ts +0 -150
@@ -0,0 +1,94 @@
1
+ import { L } from '../locale';
2
+ const SignInModal = (props) => {
3
+ const { email } = props;
4
+ const onSignIn = (e) => {
5
+ e.preventDefault();
6
+ const email = document.getElementById('email-input').value;
7
+ const password = document.getElementById('password-input').value;
8
+ resetValidation();
9
+ props.onSignIn(email, password, validationError);
10
+ };
11
+ const onNavForgotPassword = () => {
12
+ const email = document.getElementById('email-input').value;
13
+ props.onNavForgotPassword(email);
14
+ };
15
+ const onNavScanCode = () => {
16
+ props.onNavScanCode();
17
+ };
18
+ const onHook = () => {
19
+ var _a, _b, _c, _d;
20
+ (_a = document.getElementById('tfr-sign-in-form')) === null || _a === void 0 ? void 0 : _a.addEventListener('submit', onSignIn);
21
+ (_b = document.getElementById('tfr-sign-in')) === null || _b === void 0 ? void 0 : _b.addEventListener('click', onSignIn);
22
+ (_c = document.getElementById('tfr-forgot-password')) === null || _c === void 0 ? void 0 : _c.addEventListener('click', onNavForgotPassword);
23
+ (_d = document.getElementById('tfr-scan-code')) === null || _d === void 0 ? void 0 : _d.addEventListener('click', onNavScanCode);
24
+ };
25
+ const onUnhook = () => {
26
+ var _a, _b, _c, _d;
27
+ (_a = document.getElementById('tfr-sign-in-form')) === null || _a === void 0 ? void 0 : _a.removeEventListener('submit', onSignIn);
28
+ (_b = document.getElementById('tfr-sign-in')) === null || _b === void 0 ? void 0 : _b.removeEventListener('click', onSignIn);
29
+ (_c = document.getElementById('tfr-forgot-password')) === null || _c === void 0 ? void 0 : _c.removeEventListener('click', onNavForgotPassword);
30
+ (_d = document.getElementById('tfr-scan-code')) === null || _d === void 0 ? void 0 : _d.removeEventListener('click', onNavScanCode);
31
+ };
32
+ const resetValidation = () => {
33
+ const fieldsetElement = document.querySelectorAll('.tfr-fieldset-element');
34
+ fieldsetElement.forEach((element) => {
35
+ element.classList.remove('tfr-fieldset-err');
36
+ });
37
+ const labelElement = document.querySelectorAll('.tfr-label-element');
38
+ labelElement.forEach((element) => {
39
+ element.classList.remove('tfr-c-red');
40
+ });
41
+ const formError = document.querySelector('#tfr-form-error');
42
+ formError.classList.remove('tfr-d-block');
43
+ formError.innerHTML = '';
44
+ };
45
+ const validationError = (message) => {
46
+ const fieldsetElement = document.querySelectorAll('.tfr-fieldset-element');
47
+ fieldsetElement.forEach((element) => {
48
+ element.classList.add('tfr-fieldset-err');
49
+ });
50
+ const labelElement = document.querySelectorAll('.tfr-label-element');
51
+ labelElement.forEach((element) => {
52
+ element.classList.add('tfr-c-red');
53
+ });
54
+ const formError = document.querySelector('#tfr-form-error');
55
+ formError.innerHTML = message || 'Something went wrong';
56
+ formError.classList.add('tfr-d-block');
57
+ };
58
+ const body = () => {
59
+ return `
60
+ <form id="tfr-sign-in-form">
61
+ <div class="tfr-title-font tfr-light-22-300 tfr-mt-10">${L.SignIn}</div>
62
+
63
+ <fieldset class="tfr-fieldset-element tfr-fieldset tfr-mt-20">
64
+ <legend tfr-element="true" class="tfr-label-element tfr-body-font tfr-14-default tfr-c-black-o5">${L.EmailAddress}</legend>
65
+ <input tfr-element="true" type="email" id="email-input" value="${email || ''}" />
66
+ </fieldset>
67
+
68
+ <fieldset class="tfr-fieldset-element tfr-fieldset tfr-mt-20">
69
+ <legend tfr-element="true" class="tfr-label-element tfr-body-font tfr-14-default tfr-c-black-o5">${L.Password}</legend>
70
+ <input tfr-element="true" type="password" id="password-input" />
71
+ </fieldset>
72
+
73
+ <div tfr-element="true" class="tfr-body-font tfr-12-default tfr-c-red tfr-mt-10 tfr-d-none" id="tfr-form-error"></div>
74
+
75
+ <div class="tfr-mt-20">
76
+ <span id="tfr-forgot-password" tfr-element="true" class="tfr-body-font tfr-14-default tfr-c-black-o5 tfr-underline tfr-cursor tfr-mr-15">${L.ForgotPasswordWithSymbol}</span>
77
+ <span id="tfr-scan-code" tfr-element="true" class="tfr-body-font tfr-14-default tfr-c-black-o5 tfr-underline tfr-cursor">${L.DontHaveAcc}</span>
78
+ </div>
79
+
80
+ <button id="tfr-sign-in" tfr-element="true" class="tfr-standard-button tfr-c-brand-bg tfr-c-whitetfr-title-font tfr-medium-16-default tfr-cursor tfr-mt-30" id="sign-in-button" type="submit">
81
+ ${L.SignIn}
82
+ </button>
83
+ </form>
84
+ `;
85
+ };
86
+ return {
87
+ Hook: onHook,
88
+ Unhook: onUnhook,
89
+ Body: body,
90
+ useFullModalContent: true,
91
+ };
92
+ };
93
+ export default SignInModal;
94
+ //# sourceMappingURL=SignInModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignInModal.js","sourceRoot":"","sources":["../../../../src/components/Modals/SignInModal.ts"],"names":[],"mappings":"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","sourcesContent":["import { ModalContent, SignInModalProps } from '../../types'\nimport { L } from '../locale'\n\nconst SignInModal = (props: SignInModalProps): ModalContent => {\n const { email } = props\n\n const onSignIn = (e: Event) => {\n e.preventDefault()\n\n const email = (<HTMLInputElement>document.getElementById('email-input')).value\n const password = (<HTMLInputElement>document.getElementById('password-input')).value\n resetValidation()\n props.onSignIn(email, password, validationError)\n }\n\n const onNavForgotPassword = () => {\n const email = (<HTMLInputElement>document.getElementById('email-input')).value\n props.onNavForgotPassword(email)\n }\n\n const onNavScanCode = () => {\n props.onNavScanCode()\n }\n\n const onHook = () => {\n document.getElementById('tfr-sign-in-form')?.addEventListener('submit', onSignIn)\n document.getElementById('tfr-sign-in')?.addEventListener('click', onSignIn)\n document.getElementById('tfr-forgot-password')?.addEventListener('click', onNavForgotPassword)\n document.getElementById('tfr-scan-code')?.addEventListener('click', onNavScanCode)\n }\n\n const onUnhook = () => {\n document.getElementById('tfr-sign-in-form')?.removeEventListener('submit', onSignIn)\n document.getElementById('tfr-sign-in')?.removeEventListener('click', onSignIn)\n document.getElementById('tfr-forgot-password')?.removeEventListener('click', onNavForgotPassword)\n document.getElementById('tfr-scan-code')?.removeEventListener('click', onNavScanCode)\n }\n\n const resetValidation = () => {\n const fieldsetElement = document.querySelectorAll('.tfr-fieldset-element')\n fieldsetElement.forEach((element) => {\n element.classList.remove('tfr-fieldset-err')\n })\n\n const labelElement = document.querySelectorAll('.tfr-label-element')\n labelElement.forEach((element) => {\n element.classList.remove('tfr-c-red')\n })\n\n const formError = document.querySelector('#tfr-form-error')\n formError.classList.remove('tfr-d-block')\n formError.innerHTML = ''\n }\n\n const validationError = (message: string) => {\n const fieldsetElement = document.querySelectorAll('.tfr-fieldset-element')\n fieldsetElement.forEach((element) => {\n element.classList.add('tfr-fieldset-err')\n })\n\n const labelElement = document.querySelectorAll('.tfr-label-element')\n labelElement.forEach((element) => {\n element.classList.add('tfr-c-red')\n })\n\n const formError = document.querySelector('#tfr-form-error')\n formError.innerHTML = message || 'Something went wrong'\n formError.classList.add('tfr-d-block')\n }\n\n const body = () => {\n return `\n <form id=\"tfr-sign-in-form\">\n <div class=\"tfr-title-font tfr-light-22-300 tfr-mt-10\">${L.SignIn}</div>\n\n <fieldset class=\"tfr-fieldset-element tfr-fieldset tfr-mt-20\">\n <legend tfr-element=\"true\" class=\"tfr-label-element tfr-body-font tfr-14-default tfr-c-black-o5\">${\n L.EmailAddress\n }</legend>\n <input tfr-element=\"true\" type=\"email\" id=\"email-input\" value=\"${email || ''}\" />\n </fieldset>\n\n <fieldset class=\"tfr-fieldset-element tfr-fieldset tfr-mt-20\">\n <legend tfr-element=\"true\" class=\"tfr-label-element tfr-body-font tfr-14-default tfr-c-black-o5\">${\n L.Password\n }</legend>\n <input tfr-element=\"true\" type=\"password\" id=\"password-input\" />\n </fieldset>\n\n <div tfr-element=\"true\" class=\"tfr-body-font tfr-12-default tfr-c-red tfr-mt-10 tfr-d-none\" id=\"tfr-form-error\"></div>\n\n <div class=\"tfr-mt-20\">\n <span id=\"tfr-forgot-password\" tfr-element=\"true\" class=\"tfr-body-font tfr-14-default tfr-c-black-o5 tfr-underline tfr-cursor tfr-mr-15\">${\n L.ForgotPasswordWithSymbol\n }</span>\n <span id=\"tfr-scan-code\" tfr-element=\"true\" class=\"tfr-body-font tfr-14-default tfr-c-black-o5 tfr-underline tfr-cursor\">${\n L.DontHaveAcc\n }</span>\n </div>\n\n <button id=\"tfr-sign-in\" tfr-element=\"true\" class=\"tfr-standard-button tfr-c-brand-bg tfr-c-whitetfr-title-font tfr-medium-16-default tfr-cursor tfr-mt-30\" id=\"sign-in-button\" type=\"submit\">\n ${L.SignIn}\n </button>\n </form>\n `\n }\n\n return {\n Hook: onHook,\n Unhook: onUnhook,\n Body: body,\n useFullModalContent: true,\n }\n}\nexport default SignInModal\n"]}
@@ -0,0 +1,43 @@
1
+ import { L } from '../locale';
2
+ const SizeErrorModal = (props) => {
3
+ const onNavBack = () => {
4
+ props.onNavBack();
5
+ };
6
+ const onClose = () => {
7
+ props.onClose();
8
+ };
9
+ const Hook = () => {
10
+ var _a, _b;
11
+ (_a = document.getElementById('tfr-back')) === null || _a === void 0 ? void 0 : _a.addEventListener('click', onNavBack);
12
+ (_b = document.getElementById('tfr-close')) === null || _b === void 0 ? void 0 : _b.addEventListener('click', onClose);
13
+ };
14
+ const Unhook = () => {
15
+ var _a, _b;
16
+ (_a = document.getElementById('tfr-back')) === null || _a === void 0 ? void 0 : _a.removeEventListener('click', onNavBack);
17
+ (_b = document.getElementById('tfr-close')) === null || _b === void 0 ? void 0 : _b.removeEventListener('click', onClose);
18
+ };
19
+ const Body = () => {
20
+ var _a, _b, _c;
21
+ console.debug('rendering size error modal', props);
22
+ return `
23
+ <div class="tfr-mt-15-p tfr-mb-13-p">
24
+ <div tfr-element="true" class="tfr-title-font tfr-light-22-300 tfr-c-black">
25
+ ${L.NoSizeAvailable} ${(_a = props.sizes) === null || _a === void 0 ? void 0 : _a.recommended} ${L.OrSize} ${(_c = (_b = props.sizes) === null || _b === void 0 ? void 0 : _b.available) === null || _c === void 0 ? void 0 : _c.join(' or ')}
26
+ </div>
27
+ </div>
28
+
29
+ <div class="tfr-t-a-center">
30
+ <span id="tfr-back" tfr-element="true" class="tfr-body-font tfr-16-default tfr-c-black-o5 tfr-underline tfr-cursor tfr-mr-20">${L.ReturnToCatalogPage || 'Return to Catalog Page'}</span>
31
+ <span id="tfr-close" tfr-element="true" class="tfr-body-font tfr-16-default tfr-c-black-o5 tfr-underline tfr-cursor">${L.ReturnToProductPage || 'Return to Product Page'}</span>
32
+ </div>
33
+ `;
34
+ };
35
+ return {
36
+ Hook,
37
+ Unhook,
38
+ Body,
39
+ useFullModalContent: true,
40
+ };
41
+ };
42
+ export default SizeErrorModal;
43
+ //# sourceMappingURL=SizeErrorModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SizeErrorModal.js","sourceRoot":"","sources":["../../../../src/components/Modals/SizeErrorModal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,WAAW,CAAA;AAE7B,MAAM,cAAc,GAAG,CAAC,KAA0B,EAAgB,EAAE;IAClE,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,KAAK,CAAC,SAAS,EAAE,CAAA;IACnB,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,KAAK,CAAC,OAAO,EAAE,CAAA;IACjB,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,GAAG,EAAE;;QAChB,MAAA,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,0CAAE,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QACzE,MAAA,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,0CAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC1E,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,GAAG,EAAE;;QAClB,MAAA,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,0CAAE,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAC5E,MAAA,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,0CAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC7E,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,GAAG,EAAE;;QAChB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAA;QAClD,OAAO;;;SAGF,CAAC,CAAC,eAAe,IAAI,MAAA,KAAK,CAAC,KAAK,0CAAE,WAAW,IAAI,CAAC,CAAC,MAAM,IAAI,MAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,SAAS,0CAAE,IAAI,CAAC,MAAM,CAAC;;;;;4IAM5F,CAAC,CAAC,mBAAmB,IAAI,wBAC3B;mIAEE,CAAC,CAAC,mBAAmB,IAAI,wBAC3B;;SAEH,CAAA;IACP,CAAC,CAAA;IAED,OAAO;QACL,IAAI;QACJ,MAAM;QACN,IAAI;QACJ,mBAAmB,EAAE,IAAI;KAC1B,CAAA;AACH,CAAC,CAAA;AAED,eAAe,cAAc,CAAA","sourcesContent":["import { ModalContent, SizeErrorModalProps } from '../../types'\nimport { L } from '../locale'\n\nconst SizeErrorModal = (props: SizeErrorModalProps): ModalContent => {\n const onNavBack = () => {\n props.onNavBack()\n }\n\n const onClose = () => {\n props.onClose()\n }\n\n const Hook = () => {\n document.getElementById('tfr-back')?.addEventListener('click', onNavBack)\n document.getElementById('tfr-close')?.addEventListener('click', onClose)\n }\n\n const Unhook = () => {\n document.getElementById('tfr-back')?.removeEventListener('click', onNavBack)\n document.getElementById('tfr-close')?.removeEventListener('click', onClose)\n }\n\n const Body = () => {\n console.debug('rendering size error modal', props)\n return `\n <div class=\"tfr-mt-15-p tfr-mb-13-p\">\n <div tfr-element=\"true\" class=\"tfr-title-font tfr-light-22-300 tfr-c-black\">\n\t\t\t\t\t\t\t${L.NoSizeAvailable} ${props.sizes?.recommended} ${L.OrSize} ${props.sizes?.available?.join(' or ')}\n\t\t\t\t\t\t</div>\n </div>\n\n <div class=\"tfr-t-a-center\">\n <span id=\"tfr-back\" tfr-element=\"true\" class=\"tfr-body-font tfr-16-default tfr-c-black-o5 tfr-underline tfr-cursor tfr-mr-20\">${\n L.ReturnToCatalogPage || 'Return to Catalog Page'\n }</span>\n <span id=\"tfr-close\" tfr-element=\"true\" class=\"tfr-body-font tfr-16-default tfr-c-black-o5 tfr-underline tfr-cursor\">${\n L.ReturnToProductPage || 'Return to Product Page'\n }</span>\n </div>\n `\n }\n\n return {\n Hook,\n Unhook,\n Body,\n useFullModalContent: true,\n }\n}\n\nexport default SizeErrorModal\n"]}
@@ -0,0 +1,51 @@
1
+ import { InitImageSlider } from '../../components/slider';
2
+ const TryOnModal = (props) => {
3
+ let close = () => void 0;
4
+ const onNavBack = () => {
5
+ props.onNavBack();
6
+ };
7
+ const onClose = () => {
8
+ props.onClose();
9
+ };
10
+ const Hook = () => {
11
+ var _a, _b;
12
+ const tryOnImage = document.getElementById('tfr-tryon-image');
13
+ const onChange = (slider, imageUrl) => {
14
+ console.debug('slider change', slider, imageUrl);
15
+ tryOnImage.src = imageUrl;
16
+ };
17
+ const slider = InitImageSlider('tfr-slider', onChange);
18
+ if (Array.isArray(props.frames) && props.frames.length > 0) {
19
+ const e = slider.Load(props.frames);
20
+ if (e instanceof Error) {
21
+ console.error(e);
22
+ return;
23
+ }
24
+ close = e;
25
+ }
26
+ (_a = document.getElementById('tfr-back')) === null || _a === void 0 ? void 0 : _a.addEventListener('click', onNavBack);
27
+ (_b = document.getElementById('tfr-close')) === null || _b === void 0 ? void 0 : _b.addEventListener('click', onClose);
28
+ };
29
+ const Unhook = () => {
30
+ var _a, _b;
31
+ close();
32
+ (_a = document.getElementById('tfr-back')) === null || _a === void 0 ? void 0 : _a.removeEventListener('click', onNavBack);
33
+ (_b = document.getElementById('tfr-close')) === null || _b === void 0 ? void 0 : _b.removeEventListener('click', onClose);
34
+ };
35
+ const Body = () => {
36
+ return `
37
+ <div class="tfr-slider-wrapper">
38
+ <img id="tfr-tryon-image" src="" />
39
+ <input type="range" id="tfr-slider" />
40
+ </div>
41
+ `;
42
+ };
43
+ return {
44
+ Hook,
45
+ Unhook,
46
+ Body,
47
+ useFullModalContent: true,
48
+ };
49
+ };
50
+ export default TryOnModal;
51
+ //# sourceMappingURL=TryOnModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TryOnModal.js","sourceRoot":"","sources":["../../../../src/components/Modals/TryOnModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAGzD,MAAM,UAAU,GAAG,CAAC,KAAsB,EAAgB,EAAE;IAC1D,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;IAExB,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,KAAK,CAAC,SAAS,EAAE,CAAA;IACnB,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,KAAK,CAAC,OAAO,EAAE,CAAA;IACjB,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,GAAG,EAAE;;QAChB,MAAM,UAAU,GAAqB,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAA;QAC/E,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YACpC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YAChD,UAAU,CAAC,GAAG,GAAG,QAAQ,CAAA;QAC3B,CAAC,CAAA;QACD,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;QACtD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YACnC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAChB,OAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAe,CAAA;QACzB,CAAC;QACD,MAAA,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,0CAAE,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QACzE,MAAA,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,0CAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC1E,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,GAAG,EAAE;;QAClB,KAAK,EAAE,CAAA;QACP,MAAA,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,0CAAE,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAC5E,MAAA,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,0CAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC7E,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,OAAO;;;;;SAKF,CAAA;IACP,CAAC,CAAA;IAED,OAAO;QACL,IAAI;QACJ,MAAM;QACN,IAAI;QACJ,mBAAmB,EAAE,IAAI;KAC1B,CAAA;AACH,CAAC,CAAA;AAED,eAAe,UAAU,CAAA","sourcesContent":["import { InitImageSlider } from '../../components/slider'\nimport { ModalContent, TryOnModalProps } from '../../types'\n\nconst TryOnModal = (props: TryOnModalProps): ModalContent => {\n let close = () => void 0\n\n const onNavBack = () => {\n props.onNavBack()\n }\n\n const onClose = () => {\n props.onClose()\n }\n\n const Hook = () => {\n const tryOnImage = <HTMLImageElement>document.getElementById('tfr-tryon-image')\n const onChange = (slider, imageUrl) => {\n console.debug('slider change', slider, imageUrl)\n tryOnImage.src = imageUrl\n }\n const slider = InitImageSlider('tfr-slider', onChange)\n if (Array.isArray(props.frames) && props.frames.length > 0) {\n const e = slider.Load(props.frames)\n if (e instanceof Error) {\n console.error(e)\n return\n }\n close = e as () => void\n }\n document.getElementById('tfr-back')?.addEventListener('click', onNavBack)\n document.getElementById('tfr-close')?.addEventListener('click', onClose)\n }\n\n const Unhook = () => {\n close()\n document.getElementById('tfr-back')?.removeEventListener('click', onNavBack)\n document.getElementById('tfr-close')?.removeEventListener('click', onClose)\n }\n\n const Body = () => {\n return `\n <div class=\"tfr-slider-wrapper\">\n\t\t\t\t<img id=\"tfr-tryon-image\" src=\"\" />\n\t\t\t\t<input type=\"range\" id=\"tfr-slider\" />\n\t\t\t\t</div>\n `\n }\n\n return {\n Hook,\n Unhook,\n Body,\n useFullModalContent: true,\n }\n}\n\nexport default TryOnModal\n"]}
@@ -0,0 +1,363 @@
1
+ import { infoIcon, tfrDoor, userIcon } from './svgs';
2
+ export class SizeRecComponent {
3
+ constructor(sizeRecMainDivId, onSignInClick, onSignOutClick, onFitInfoClick, onTryOnClick) {
4
+ this.onSignInClick = onSignInClick;
5
+ this.onSignOutClick = onSignOutClick;
6
+ this.onFitInfoClick = onFitInfoClick;
7
+ this.onTryOnClick = onTryOnClick;
8
+ this._sku = '';
9
+ this._styleId = null;
10
+ this.isLoggedIn = false;
11
+ this.tfrLoggedInElements = [];
12
+ this.tfrLoggedOutElements = [];
13
+ this.tfrToggleOpenElements = [];
14
+ this.tfrToggleClosedElements = [];
15
+ this.isCollapsed = false;
16
+ this.redraw = null;
17
+ this.init(sizeRecMainDivId);
18
+ }
19
+ get sku() {
20
+ return this._sku;
21
+ }
22
+ setSku(sku) {
23
+ this._sku = sku;
24
+ }
25
+ get styleId() {
26
+ return this._styleId;
27
+ }
28
+ setStyleId(styleId) {
29
+ this._styleId = styleId;
30
+ }
31
+ setIsLoggedIn(isLoggedIn) {
32
+ this.isLoggedIn = isLoggedIn;
33
+ this.tfrSizeRecSelectContainer.style.display = 'flex';
34
+ this.tfrSizeRecSelect.style.display = 'flex';
35
+ this.tfrSizeHowItFits.style.display = 'block';
36
+ if (isLoggedIn) {
37
+ this.tfrSizeHowItFits.style.opacity = '1';
38
+ this.tfrSizeRecSelect.style.opacity = '1';
39
+ this.tfrLoggedInElements.forEach((element) => (element.style.display = 'block'));
40
+ this.tfrLoggedOutElements.forEach((element) => (element.style.display = 'none'));
41
+ this.tfrSizeRecActionLogin.style.display = 'none';
42
+ this.tfrSizeRecActionLogout.style.display = 'block';
43
+ this.tfrSizeRecTitle.style.display = 'flex';
44
+ this.isCollapsed = false;
45
+ this.tfrSizeRecTitleToggle.classList.add('tfr-chevron-up');
46
+ this.tfrSizeRecTitleToggle.classList.remove('tfr-chevron-down');
47
+ // Ensure the container is visible
48
+ this.tfrSizeRecSelectContainer.style.display = 'flex';
49
+ this.tfrSizeRecSelectContainer.style.opacity = '1';
50
+ }
51
+ else {
52
+ this.tfrSizeHowItFits.style.opacity = '0.4';
53
+ this.tfrSizeRecSelect.style.opacity = '0.4';
54
+ this.tfrLoggedInElements.forEach((element) => (element.style.display = 'none'));
55
+ this.tfrLoggedOutElements.forEach((element) => (element.style.display = 'block'));
56
+ this.tfrSizeRecActionLogin.style.display = 'block';
57
+ this.tfrSizeRecActionLogout.style.display = 'none';
58
+ this.tfrSizeRecTitle.style.display = 'flex';
59
+ this.tfrSizeRecommendationError.style.display = 'none';
60
+ this.tfrSizeRecommendationError.innerHTML = '';
61
+ this.renderSizeRecSelectLoggedOut();
62
+ }
63
+ }
64
+ setLoading(isLoading) {
65
+ if (isLoading) {
66
+ this.tfrSizeRecLoading.style.display = 'block';
67
+ this.tfrSizeRecommendationsContainer.style.display = 'none';
68
+ }
69
+ else {
70
+ this.tfrSizeRecLoading.style.display = 'none';
71
+ this.tfrSizeRecommendationsContainer.style.display = 'flex';
72
+ }
73
+ }
74
+ setGarmentLocations(locations) {
75
+ if (!locations || !locations.length) {
76
+ this.tfrSizeRecTitle.style.display = 'none';
77
+ return;
78
+ }
79
+ this.renderGarmentLocations(locations);
80
+ }
81
+ setRecommendedSize({ recommended, sizes }) {
82
+ this.renderSizeRec(recommended, sizes);
83
+ }
84
+ setError() {
85
+ this.tfrSizeRecTitle.style.display = 'none';
86
+ if (!this.isLoggedIn)
87
+ return;
88
+ this.tfrSizeRecommendationError.style.display = 'block';
89
+ this.tfrSizeRecommendationError.innerHTML = 'No recommended size found.';
90
+ }
91
+ init(sizeRecMainDivId) {
92
+ const sizeRecMainDiv = document.getElementById(sizeRecMainDivId);
93
+ if (!sizeRecMainDiv)
94
+ throw new Error('Size rec main div not found');
95
+ this.render(sizeRecMainDiv);
96
+ this.setElements();
97
+ this.bindEvents();
98
+ }
99
+ setElements() {
100
+ this.tfrSizeHowItFits = document.getElementById('tfr-size-how-it-fits');
101
+ this.tfrSizeRecTitle = document.getElementById('tfr-size-rec-title');
102
+ this.tfrInfoIcon = document.getElementById('tfr-info-icon');
103
+ this.tfrLoginToView = document.getElementById('tfr-login-to-view');
104
+ this.tfrSizeRecActionLogin = document.getElementById('tfr-size-rec-action-login');
105
+ this.tfrSizeRecActionLogout = document.getElementById('tfr-size-rec-action-logout');
106
+ this.tfrSizeRecTable = document.getElementById('tfr-size-rec-table');
107
+ this.tfrSizeRecommendationError = document.getElementById('tfr-size-recommendation-error');
108
+ this.tfrSizeRecSize = document.getElementById('tfr-size-rec-size');
109
+ this.tfrSizeRecSelect = document.getElementById('tfr-size-rec-select');
110
+ this.tfrSizeRecLoading = document.getElementById('tfr-size-rec-loading');
111
+ this.tfrSizeRecTitleToggle = document.getElementById('tfr-size-rec-title-toggle');
112
+ this.tfrSizeRecSelectContainer = document.getElementById('tfr-size-rec-select-container');
113
+ this.tfrSizeRecommendationsContainer = document.getElementById('tfr-size-recommendations-container');
114
+ this.tfrLoggedInElements = document.querySelectorAll('.tfr-logged-in');
115
+ this.tfrLoggedOutElements = document.querySelectorAll('.tfr-logged-out');
116
+ this.tfrToggleOpenElements = document.querySelectorAll('.tfr-toggle-open');
117
+ this.tfrToggleClosedElements = document.querySelectorAll('.tfr-toggle-closed');
118
+ }
119
+ bindEvents() {
120
+ this.tfrSizeRecActionLogin.addEventListener('click', this.onSignInClick);
121
+ this.tfrSizeRecActionLogout.addEventListener('click', this.onSignOutClick);
122
+ this.tfrSizeRecSelect.addEventListener('click', this.onSizeRecSelectClick.bind(this));
123
+ this.tfrSizeRecTitleToggle.addEventListener('click', this.toggletSizeRecSelectContainer.bind(this));
124
+ this.tfrInfoIcon.addEventListener('click', this.onFitInfoClick);
125
+ this.tfrLoginToView.addEventListener('click', this.onSignInClick);
126
+ const tryOnButton = document.getElementById('tfr-try-on-button');
127
+ if (!tryOnButton)
128
+ return;
129
+ tryOnButton.addEventListener('click', async () => {
130
+ // Prevent multiple clicks while loading
131
+ if (tryOnButton.classList.contains('loading')) {
132
+ return;
133
+ }
134
+ const activeButton = document.querySelector('.tfr-size-rec-select-button.active');
135
+ if (!activeButton)
136
+ return;
137
+ const selectedSizeId = Number(activeButton.getAttribute('data-size-id'));
138
+ if (Number.isNaN(selectedSizeId))
139
+ return;
140
+ // Set loading state
141
+ tryOnButton.classList.add('loading');
142
+ const originalText = tryOnButton.textContent;
143
+ tryOnButton.textContent = ' ';
144
+ tryOnButton.setAttribute('disabled', 'true');
145
+ try {
146
+ // Get all size buttons
147
+ const allSizeButtons = Array.from(document.querySelectorAll('.tfr-size-rec-select-button'));
148
+ const activeIndex = allSizeButtons.indexOf(activeButton);
149
+ if (this.styleId !== null) {
150
+ // 1. Fetch and display the VTO for the active (recommended) size
151
+ try {
152
+ await this.onTryOnClick(this.styleId, selectedSizeId, true);
153
+ }
154
+ catch (e) {
155
+ console.error(`Error trying on active size ${selectedSizeId}:`, e);
156
+ // Optionally, inform the user about the error for the primary VTO
157
+ }
158
+ // 2. Fetch VTO for the size to the left (if it exists)
159
+ if (activeIndex > 0) {
160
+ const leftButton = allSizeButtons[activeIndex - 1];
161
+ await this._preloadNeighborVTO(leftButton);
162
+ }
163
+ // 3. Fetch VTO for the size to the right (if it exists)
164
+ if (activeIndex >= 0 && activeIndex < allSizeButtons.length - 1) {
165
+ const rightButton = allSizeButtons[activeIndex + 1];
166
+ await this._preloadNeighborVTO(rightButton);
167
+ }
168
+ }
169
+ }
170
+ catch (error) {
171
+ console.error('Error during sequential try-on process:', error);
172
+ }
173
+ finally {
174
+ // Reset loading state
175
+ tryOnButton.classList.remove('loading');
176
+ tryOnButton.textContent = originalText;
177
+ tryOnButton.removeAttribute('disabled');
178
+ }
179
+ });
180
+ }
181
+ async _preloadNeighborVTO(buttonElement) {
182
+ var _a;
183
+ // this.styleId is assumed to be non-null here because the calling context (bindEvents)
184
+ // is wrapped in 'if (this.styleId !== null)'
185
+ const sizeId = Number(buttonElement.getAttribute('data-size-id'));
186
+ if (!Number.isNaN(sizeId)) {
187
+ try {
188
+ await this.onTryOnClick(this.styleId, sizeId, false);
189
+ }
190
+ catch (e) {
191
+ const buttonText = ((_a = buttonElement.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || 'N/A';
192
+ console.error(`Error pre-loading try-on for size ${sizeId} (button: ${buttonText}):`, e);
193
+ }
194
+ }
195
+ }
196
+ onSizeRecSelectClick(e) {
197
+ const target = e.target;
198
+ if (!target.classList.contains('tfr-size-rec-select-button') || target.classList.contains('tfr-disabled'))
199
+ return;
200
+ e.preventDefault();
201
+ const selectedIndex = Number(target.getAttribute('data-index'));
202
+ if (Number.isNaN(selectedIndex))
203
+ return;
204
+ const allButtons = document.querySelectorAll('.tfr-size-rec-select-button');
205
+ allButtons.forEach((button) => button.classList.remove('active'));
206
+ allButtons.item(selectedIndex).classList.add('active');
207
+ this.redraw(selectedIndex);
208
+ const selectedSizeId = Number(target.getAttribute('data-size-id'));
209
+ if (Number.isNaN(selectedSizeId))
210
+ return;
211
+ this.onTryOnClick(this.styleId, selectedSizeId, true);
212
+ }
213
+ renderSizeRec(recommended, sizes) {
214
+ this.tfrSizeRecSize.innerHTML = `&nbsp;${recommended}`;
215
+ const selectedSizeIndex = sizes.findIndex(({ size }) => size === recommended);
216
+ this.redraw = (index) => this.renderSizeRecTable(sizes, index);
217
+ this.redraw(selectedSizeIndex);
218
+ this.renderSizeRecSelect(sizes, selectedSizeIndex);
219
+ }
220
+ renderSizeRecTable(sizes, index) {
221
+ const { locations } = sizes[index];
222
+ const html = locations
223
+ .map(({ location, fit, isPerfect }) => this.renderSizeRecTableRow(location, fit, isPerfect))
224
+ .join('');
225
+ this.tfrSizeRecTable.innerHTML = html;
226
+ }
227
+ renderSizeRecSelect(sizes, index) {
228
+ const sizeNames = sizes.map(({ size }) => size);
229
+ const html = sizeNames
230
+ .map((name, i) => `<div class="tfr-size-rec-select-button ${i === index ? 'active' : ''}" data-index="${i}" data-size-id="${sizes[i].size_id}">${name}</div>`)
231
+ .join('');
232
+ this.tfrSizeRecSelect.innerHTML = html;
233
+ }
234
+ renderSizeRecSelectLoggedOut() {
235
+ const html = [
236
+ `<div class="tfr-size-rec-select-button tfr-disabled">M</div>`,
237
+ `<div class="tfr-size-rec-select-button tfr-disabled active">L</div>`,
238
+ `<div class="tfr-size-rec-select-button tfr-disabled">XL</div>`,
239
+ ].join('');
240
+ this.tfrSizeRecSelect.innerHTML = html;
241
+ }
242
+ renderSizeRecTableRow(location, fit, isPerfect = false) {
243
+ return `<div class="tfr-size-rec-table-row">
244
+ <div class="tfr-size-rec-table-cell-left">${location}</div>
245
+ <div class="tfr-size-rec-table-cell-right ${isPerfect ? 'perfect' : ''}">
246
+ ${fit}
247
+ </div>
248
+ </div>`;
249
+ }
250
+ renderGarmentLocations(locations) {
251
+ const innerHtml = locations
252
+ .map((location, index) => this.renderSizeRecTableRow(location, this.randomFit(index), true))
253
+ .join('');
254
+ const html = `<div id="tfr-logged-out-overlay-container">
255
+ <div id="tfr-logged-out-overlay">
256
+ Login to reveal how this item will fit specifically at each area of your body in different sizes
257
+ </div>
258
+ <div>
259
+ ${innerHtml}
260
+ </div>
261
+ </div>`;
262
+ this.tfrSizeRecTable.innerHTML = html;
263
+ }
264
+ randomFit(index) {
265
+ const choices = ['Slightly Tight', 'Perfect Fit', 'Perfect Fit', 'Slightly Loose', 'Perfect Fit'];
266
+ return choices[index % choices.length];
267
+ }
268
+ toggletSizeRecSelectContainer() {
269
+ if (this.isCollapsed) {
270
+ this.isCollapsed = false;
271
+ this.tfrSizeRecTitleToggle.classList.add('tfr-chevron-up');
272
+ this.tfrSizeRecTitleToggle.classList.remove('tfr-chevron-down');
273
+ this.tfrToggleOpenElements.forEach((element) => (element.style.display = 'block'));
274
+ this.tfrToggleClosedElements.forEach((element) => (element.style.display = 'none'));
275
+ }
276
+ else {
277
+ this.isCollapsed = true;
278
+ this.tfrSizeRecTitleToggle.classList.remove('tfr-chevron-up');
279
+ this.tfrSizeRecTitleToggle.classList.add('tfr-chevron-down');
280
+ this.tfrToggleOpenElements.forEach((element) => (element.style.display = 'none'));
281
+ this.tfrToggleClosedElements.forEach((element) => (element.style.display = 'block'));
282
+ }
283
+ }
284
+ render(sizeRecMainDiv) {
285
+ const body = `<div id="tfr-size-recommendations">
286
+ <div id="tfr-size-rec-loading">
287
+ <div class="lds-ellipsis">
288
+ <div></div>
289
+ <div></div>
290
+ <div></div>
291
+ <div></div>
292
+ </div>
293
+ </div>
294
+ <div id="tfr-size-recommendations-container">
295
+ <div id="tfr-size-rec-title-toggle" class="tfr-chevron-up">v</div>
296
+
297
+ <div class="tfr-logged-out">
298
+ <div class="tfr-flex tfr-gap tfr-mb-2 tfr-mobile-small-text">
299
+ <div>Uncertain&nbsp;of&nbsp;your&nbsp;size?</div>
300
+
301
+ <div class="tfr-toggle-closed">
302
+ <div class="tfr-flex tfr-items-center">
303
+ <div>Try</div>
304
+ <div class="tfr-powered-by-logo">${tfrDoor}</div>
305
+ <div class="tfr-powered-by-text-bold">The&nbsp;Fitting&nbsp;Room</div>
306
+ </div>
307
+ </div>
308
+
309
+ <div class="tfr-toggle-open">
310
+ <div id="tfr-login-to-view" class="tfr-flex tfr-items-center">
311
+ ${userIcon} Login to view
312
+ </div>
313
+ </div>
314
+ </div>
315
+ </div>
316
+
317
+ <div class="tfr-logged-in">
318
+ <div id="tfr-size-rec-title">
319
+ Recommended Size:
320
+ <div id="tfr-size-rec-size">
321
+ <div class="tfr-size-rec-login-cta">
322
+ ${userIcon} Sign up to view
323
+ </div>
324
+ </div>
325
+ </div>
326
+ </div>
327
+
328
+ <div class="tfr-toggle-open" style="width: 100%">
329
+ <div id="tfr-size-rec-select-container">
330
+ <div id="tfr-size-how-it-fits">Select size to see how it fits:</div>
331
+
332
+ <div id="tfr-size-rec-select"></div>
333
+
334
+ <div id="tfr-size-rec-subtitle">
335
+ How it fits
336
+ <span id="tfr-info-icon">${infoIcon}</span>
337
+ </div>
338
+
339
+ <div id="tfr-size-rec-table"></div>
340
+
341
+ <div id="tfr-try-on-button" class="tfr-try-on-button">Try On</div>
342
+ </div>
343
+ </div>
344
+
345
+ <div id="tfr-size-rec-action">
346
+ <div id="tfr-size-rec-action-login">Sign up or login</div>
347
+ <div id="tfr-size-rec-action-logout">Log out</div>
348
+ </div>
349
+
350
+ <div class="tfr-toggle-open">
351
+ <div class="tfr-powered-by">
352
+ <div>Powered by</div>
353
+ <div class="tfr-powered-by-logo">${tfrDoor}</div>
354
+ <div class="tfr-powered-by-text-bold">The Fitting Room</div>
355
+ </div>
356
+ </div>
357
+ </div>
358
+ </div>
359
+ <div id="tfr-size-recommendation-error"></div>`;
360
+ sizeRecMainDiv.innerHTML = body;
361
+ }
362
+ }
363
+ //# sourceMappingURL=SizeRec.js.map