@thefittingroom/shop-ui 5.0.1 → 5.0.3

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 (2) hide show
  1. package/dist/index.js +352 -194
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -19102,10 +19102,10 @@ function keyframes() {
19102
19102
  };
19103
19103
  }
19104
19104
  const themeData = {
19105
- brand_font_family: "Assistant, sans-serif",
19105
+ brand_font_family: "TN web use only, Times New Roman, serif",
19106
19106
  brand_link_text_decoration: "underline",
19107
- brand_button_background_color: "#21201F",
19108
- brand_button_text_color: "#FFFFFF",
19107
+ brand_button_background_color: "#FFA273",
19108
+ brand_button_text_color: "#21201F",
19109
19109
  color_danger: "#900B09",
19110
19110
  color_fg_text: "#21201F",
19111
19111
  color_tfr_800: "#265A64",
@@ -19136,7 +19136,8 @@ const Button = reactExports.forwardRef(({
19136
19136
  background: "none",
19137
19137
  border: "none",
19138
19138
  cursor: "pointer",
19139
- textAlign: "center"
19139
+ textAlign: "center",
19140
+ fontFamily: theme.font_family
19140
19141
  },
19141
19142
  primary: {
19142
19143
  display: "block",
@@ -19147,6 +19148,7 @@ const Button = reactExports.forwardRef(({
19147
19148
  borderRadius: "25px",
19148
19149
  padding: "16px 24px",
19149
19150
  cursor: "pointer",
19151
+ fontFamily: theme.font_family,
19150
19152
  fontSize: "16px",
19151
19153
  fontWeight: "bold",
19152
19154
  textAlign: "center"
@@ -19160,9 +19162,12 @@ const Button = reactExports.forwardRef(({
19160
19162
  borderRadius: "25px",
19161
19163
  padding: "16px 24px",
19162
19164
  cursor: "pointer",
19163
- fontSize: "16px",
19164
- fontWeight: "bold",
19165
- textAlign: "center"
19165
+ fontFamily: theme.font_family,
19166
+ fontSize: "14px",
19167
+ fontWeight: "500",
19168
+ textAlign: "center",
19169
+ textTransform: "uppercase",
19170
+ letterSpacing: "0.75px"
19166
19171
  }
19167
19172
  }));
19168
19173
  return /* @__PURE__ */ jsx$1("button", { ref, css: [variantCss, css2, "", ""], ...props, children });
@@ -20726,7 +20731,7 @@ function TextT({
20726
20731
  return /* @__PURE__ */ jsx$1(Text, { ...props, children: translatedText });
20727
20732
  }
20728
20733
  const SvgArrowBack = (props) => /* @__PURE__ */ reactExports.createElement("svg", { width: 24, height: 24, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ reactExports.createElement("path", { d: "M7.825 13L13.425 18.6L12 20L4 12L12 4L13.425 5.4L7.825 11H20V13H7.825Z", fill: "#1E1E1E" }));
20729
- const AvatarBottomBackgroundUrl = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAAHCAYAAACbWWcuAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kbtLw1AUxr+makUqCnYQcchQneyiIo61CkWoEGqFVh1MbvqCJg1Jiouj4Fpw8LFYdXBx1tXBVRAEHyD+AeKk6CIlnpsUWsR44HJ/fPd8h3PPAYRGhWlWVxzQdNtMJxNiNrcqhl4RQA8GAQzIzDLmJCkF3/i6p2yKuxiv5Z/3Z/SreYsBAZE4zgzTJt4gntm0Dc77xBFWklXic+IJkxokfuS64vEb56LLAq8ZMTPpeeIIsVjsYKWDWcnUiKeJo6qmU30h67HKeYuzVqmxVp/8h+G8vrLMdTqjSGIRS5AgQkENZVRgI0a3ToqFNL0nfPwjrl8il0KuMhg5FlCFBtn1g+/g92ytwtSkVymcALpfHOdjDAjtAs2643wfO07zBAg+A1d6219tALOfpNfbWvSI1roNXFy3NWUPuNwBhp8M2ZRdKUhHKBSA9zNaUw4YugX61ry5td5x+gBkaFapG+DgEBgvUu11n3/3ds7t35zW/H4AAbNyeaZGKRsAAAAGYktHRAAAADQAefP4P6sAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfqAQYQDxGSDntlAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAABVZJREFUeNrtXNuW6yAINVn9/7+dzsO0ep6clcUR2FzMpK2+NTWKCMgGzNZaa2W11V6sWcQ2u2+mymhjSf9v21Zaa2yfyNgz+ZFBl9YP4YmHf0jfM/ieIdMZfI6sq/N/pg5t28bqTGvtv/89c9F19DE9a4vyJ7rXmbrd+dufdb5oejcak+MF9wzZ11G/4286Nv2NzqHJJuUPOv6IVu6dzj/6PyfPGfaotVb2fYfsNEe39r60XrSvZdzIf1QHjus/7g1Cp0aDxldJPqx28bgWz9x/0c6ijbNbWfNr47wavKNymMmrGXJp1RV6Ph71v7daa3k+n+X7+7tsC6Cv9gmg3eIonQnSzwwenAXYo2B3Br+492qtkENqAQeRPZEAgmefJJCXud+esTIAuvS+5NxbAboEKqmD2p/VWs1O3MiJyNoDTTa9gQVpXC54EbV9XnnzOlujIIEHoHvA10hPOJsVBY+WQOOZQEDbFwtQj8xnBf7W+SPgfGSHzgCviB23Aq7oGq4G1M+YOxIYvjpovzrmQG3ryL4efZHWWnk+n6XWWu73+wLoqy2QPhuYRMaRMkde8DU7K44c2GdnBr1ZchR8eACE5MCj9Hrf55xxJMMWlamjU22RE6sDMsoGSfzLykaMnFGUP5TmWfKNjp9dHTOjv6SHUcfPW2mBAm8UoHDBAbp2Kut0DG2uyLmi7YslOGMJnEV4jgZQsoE5Vz2h2USEPk/g0xN8ytAHzRbNpsNTMfAp4PPdQPpfypfkWx6B+7Zt5fF4lMfjsQD6ap8H0K2H15WyCJLTxJXMIUBtJnDPAHsUuKClmigQ18CU9be2Dg6wUqOuOS9RcI8cXFnyj+yPJziAOJWU51rQxSrTiKOeVXnC0YlUgsy4ihKtgrAGaGi2IUM+0P3l9npEowTouD5IplyzgTQ4pIH02QEV5NyyVrJ4QGVWJt0aEJhFRxbAsJbnRuiXkhAogBpdoYnwzVPhMotPUgDt3QC9JfMs6Xs0gG0JklpkGqGlV9hRP7CXuH99fZXbgnSrvVukzaOM0bEjCpuxZitAQDMLiBOkZTnR7AwHqI4ljFymgZtXCkRQ55ALVnDZDi3IMerH0aTth/W+qcWpnuHYSjKDRrKtsmKhFym5RLPZ1rVabAd6HxipSMgugczMKmsVRCNd8chHZI1HHksBw9E945H9kubR5Eq6ryzRYtEDTxbWE8SRdD/iQJ8h21ll5a/iW0Xf5wKJnoCQ5YpJVLZnAVCJJq168lMatSGoH3klPtFv33C+w/GMaa2tDPpqn6Hgkf+j/WfSzvVH15yVQZcyOhG+zSi1R7KKUp+Mu+daIGT0LMo/y955Djgkg46UmHv3XAIrx0Pdm0FH6PJkpLiP4nCVMRZeIXfwrWXNlqsJkWsD3LyIg5b18bPofVkJWEczYxbQgWTnND30VDB4bbn3Y1HWYKO3xH1WCb5Fh2Zcu5gB6DV5sQbwIzRoNsz70VDJz/nrINKVfXL07rbnI4ZccB29+oPKlaUv9T96Fn3btrLv+++zn5+fcr/fVwZ9tc9pklG+apwKAbjeO2feuSRwZZkjy0GWHGUr4JIy1RI40spTkQBGKeXXSI+AJHp/UqpekAAFXUOnBQEiXDCGO2DpejQAwd25RWWHy1BaPpyVrR9HPmtOA/ebyotWMdKf11qHvB05ypJse+8kIzZHcq49TjGSmbbIgcY/TvYk+Ue/DaGNZwERkbEtAFoLmCJVBWcC5Mjc0dJYDzi3+AFoX7RqEAHgaCWF9xse2hmPVkNlA9+zAPsrfD0/4gN77X7Ex6e+S9bHF+l4+77/nuW90uR2u5V/yJQ49anG7eoAAAAASUVORK5CYII=";
20734
+ const AVATAR_BOTTOM_BACKGROUND_URL = "data:image/png;base64,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";
20730
20735
  const SvgCheckCircle = (props) => /* @__PURE__ */ reactExports.createElement("svg", { width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ reactExports.createElement("g", { clipPath: "url(#clip0_4454_620)" }, /* @__PURE__ */ reactExports.createElement("path", { d: "M14.6666 7.38674V8.00007C14.6658 9.43769 14.2003 10.8365 13.3395 11.988C12.4787 13.1394 11.2688 13.9817 9.89016 14.3893C8.51154 14.797 7.03809 14.748 5.68957 14.2498C4.34104 13.7516 3.18969 12.8308 2.40723 11.6248C1.62476 10.4188 1.25311 8.99211 1.3477 7.55761C1.44229 6.12312 1.99806 4.75762 2.93211 3.66479C3.86615 2.57195 5.12844 1.81033 6.53071 1.4935C7.93298 1.17668 9.4001 1.32163 10.7133 1.90674M14.6666 2.66674L7.99992 9.34007L5.99992 7.34007", stroke: "#21201F", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round" })), /* @__PURE__ */ reactExports.createElement("defs", null, /* @__PURE__ */ reactExports.createElement("clipPath", { id: "clip0_4454_620" }, /* @__PURE__ */ reactExports.createElement("rect", { width: 16, height: 16, fill: "white" }))));
20731
20736
  const SvgChevronLeft = (props) => /* @__PURE__ */ reactExports.createElement("svg", { width: 48, height: 48, viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ reactExports.createElement("g", { opacity: 0.35 }, /* @__PURE__ */ reactExports.createElement("path", { d: "M30 36L18 24L30 12", stroke: "#1E1E1E", strokeWidth: 4, strokeLinecap: "round", strokeLinejoin: "round" })));
20732
20737
  const SvgChevronRight = (props) => /* @__PURE__ */ reactExports.createElement("svg", { width: 48, height: 48, viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props }, /* @__PURE__ */ reactExports.createElement("g", { opacity: 0.35 }, /* @__PURE__ */ reactExports.createElement("path", { d: "M18 36L30 24L18 12", stroke: "#1E1E1E", strokeWidth: 4, strokeLinecap: "round", strokeLinejoin: "round" })));
@@ -20874,7 +20879,7 @@ function SidecarModalFrame({
20874
20879
  frameContentBase: {
20875
20880
  position: "absolute",
20876
20881
  inset: "0 0 auto auto",
20877
- width: "min(1100px, 100vw)",
20882
+ width: "max(min(1100px, 100vw), 80vw)",
20878
20883
  height: "100vh",
20879
20884
  margin: 0,
20880
20885
  padding: 0,
@@ -20886,6 +20891,9 @@ function SidecarModalFrame({
20886
20891
  left: 0,
20887
20892
  width: "100vw",
20888
20893
  height: "100vh",
20894
+ margin: 0,
20895
+ padding: 0,
20896
+ border: "none",
20889
20897
  backgroundColor: "#FFFFFF"
20890
20898
  }
20891
20899
  }));
@@ -41512,93 +41520,22 @@ async function getStyleByExternalId(brandId, externalId) {
41512
41520
  recordCache[cacheKey] = record;
41513
41521
  return record;
41514
41522
  }
41523
+ const AVATAR_IMAGE_ASPECT_RATIO = 2 / 3;
41524
+ const AVATAR_DESKTOP_BOTTOM_CONTAINER_HEIGHT_PX = 100;
41515
41525
  const logger$1 = getLogger("vto-single");
41516
41526
  function VtoSingleOverlay() {
41517
- const {
41518
- t
41519
- } = useTranslation();
41520
41527
  const {
41521
41528
  brandId
41522
41529
  } = getStaticData();
41523
41530
  const userIsLoggedIn = useMainStore((state) => state.userIsLoggedIn);
41524
41531
  const userHasAvatar = useMainStore((state) => state.userHasAvatar);
41525
41532
  const userProfile = useMainStore((state) => state.userProfile);
41533
+ const deviceLayout = useMainStore((state) => state.deviceLayout);
41526
41534
  const openOverlay = useMainStore((state) => state.openOverlay);
41527
41535
  const closeOverlay = useMainStore((state) => state.closeOverlay);
41528
41536
  const [loadedProductData, setLoadedProductData] = reactExports.useState(null);
41529
41537
  const [selectedSizeLabel, setSelectedSizeLabel] = reactExports.useState(null);
41530
41538
  const [selectedColorLabel, setSelectedColorLabel] = reactExports.useState(null);
41531
- const css2 = useCss((theme) => ({
41532
- mainContainer: {
41533
- display: "flex",
41534
- height: "100%"
41535
- },
41536
- rightContainer: {
41537
- flexGrow: 1,
41538
- padding: "16px",
41539
- display: "flex",
41540
- flexDirection: "column"
41541
- },
41542
- contentContainer: {
41543
- flexGrow: 1,
41544
- display: "flex",
41545
- flexDirection: "column",
41546
- margin: "8px 0px",
41547
- padding: "16px 48px",
41548
- overflowY: "auto"
41549
- },
41550
- productNameContainer: {},
41551
- productNameText: {
41552
- fontSize: "32px"
41553
- },
41554
- priceContainer: {
41555
- marginTop: "8px"
41556
- },
41557
- priceText: {
41558
- fontSize: "18px"
41559
- },
41560
- colorContainer: {
41561
- marginTop: "16px"
41562
- },
41563
- colorLabelText: {
41564
- fontSize: "12px"
41565
- },
41566
- colorSelect: {
41567
- border: "none",
41568
- color: theme.color_fg_text,
41569
- fontFamily: theme.font_family,
41570
- fontSize: "12px"
41571
- },
41572
- sizeRecContainer: {
41573
- marginTop: "16px"
41574
- },
41575
- buttonContainer: {
41576
- marginTop: "24px"
41577
- },
41578
- descriptionContainer: {
41579
- marginTop: "32px"
41580
- },
41581
- descriptionText: {
41582
- fontSize: "12px"
41583
- },
41584
- footerContainer: {
41585
- marginLeft: "auto",
41586
- marginRight: "auto",
41587
- paddingBottom: "16px",
41588
- display: "flex",
41589
- justifyContent: "center",
41590
- alignItems: "center",
41591
- gap: "4px"
41592
- },
41593
- footerSignOutLink: {
41594
- fontSize: "10px",
41595
- color: theme.color_tfr_800
41596
- },
41597
- footerTfrIcon: {
41598
- width: "100px",
41599
- height: "24px"
41600
- }
41601
- }));
41602
41539
  reactExports.useEffect(() => {
41603
41540
  if (!userIsLoggedIn) {
41604
41541
  openOverlay(OverlayName.LANDING, {
@@ -41763,10 +41700,6 @@ function VtoSingleOverlay() {
41763
41700
  logger$1.logError("Error during logout:", error);
41764
41701
  });
41765
41702
  }, [closeOverlay, openOverlay]);
41766
- const handleColorSelectChange = reactExports.useCallback((e) => {
41767
- const newColorLabel = e.target.value || null;
41768
- setSelectedColorLabel(newColorLabel);
41769
- }, []);
41770
41703
  const handleAddToCartClick = reactExports.useCallback(async () => {
41771
41704
  try {
41772
41705
  if (!selectedSizeLabel) {
@@ -41787,35 +41720,158 @@ function VtoSingleOverlay() {
41787
41720
  if (!userIsLoggedIn || !userHasAvatar || !loadedProductData || !selectedColorSizeRecord) {
41788
41721
  return /* @__PURE__ */ jsx$1(SidecarModalFrame, { onRequestClose: closeOverlay, children: /* @__PURE__ */ jsx$1(Loading, {}) });
41789
41722
  }
41790
- return /* @__PURE__ */ jsx$1(SidecarModalFrame, { onRequestClose: closeOverlay, children: /* @__PURE__ */ jsxs("div", { css: css2.mainContainer, children: [
41791
- /* @__PURE__ */ jsx$1(VtoAvatar, { frameUrls }),
41723
+ let Layout;
41724
+ if (deviceLayout === DeviceLayout.MOBILE_PORTRAIT || deviceLayout === DeviceLayout.TABLET_PORTRAIT) {
41725
+ Layout = MobileLayout;
41726
+ } else {
41727
+ Layout = DesktopLayout;
41728
+ }
41729
+ return /* @__PURE__ */ jsx$1(SidecarModalFrame, { onRequestClose: closeOverlay, children: /* @__PURE__ */ jsx$1(Layout, { loadedProductData, selectedColorSizeRecord, availableColorLabels, selectedColorLabel, selectedSizeLabel, frameUrls, onClose: closeOverlay, onChangeColor: setSelectedColorLabel, onChangeSize: setSelectedSizeLabel, onAddToCart: handleAddToCartClick, onSignOut: handleSignOutClick }) });
41730
+ }
41731
+ function MobileLayout({
41732
+ // loadedProductData,
41733
+ // selectedColorSizeRecord,
41734
+ // availableColorLabels,
41735
+ // selectedColorLabel,
41736
+ // selectedSizeLabel,
41737
+ frameUrls
41738
+ // onClose,
41739
+ // onChangeColor,
41740
+ // onChangeSize,
41741
+ // onAddToCart,
41742
+ // onSignOut,
41743
+ }) {
41744
+ const css2 = useCss((_theme) => ({
41745
+ mainContainer: {
41746
+ width: "100%",
41747
+ height: "100%"
41748
+ }
41749
+ }));
41750
+ return /* @__PURE__ */ jsx$1("div", { css: css2.mainContainer, children: /* @__PURE__ */ jsx$1(Avatar, { frameUrls }) });
41751
+ }
41752
+ function DesktopLayout({
41753
+ loadedProductData,
41754
+ selectedColorSizeRecord,
41755
+ availableColorLabels,
41756
+ selectedColorLabel,
41757
+ selectedSizeLabel,
41758
+ frameUrls,
41759
+ onClose,
41760
+ onChangeColor,
41761
+ onChangeSize,
41762
+ onAddToCart,
41763
+ onSignOut
41764
+ }) {
41765
+ const {
41766
+ t
41767
+ } = useTranslation();
41768
+ const css2 = useCss((_theme) => ({
41769
+ mainContainer: {
41770
+ display: "flex",
41771
+ height: "100%"
41772
+ },
41773
+ rightContainer: {
41774
+ flexGrow: 1,
41775
+ padding: "16px",
41776
+ display: "flex",
41777
+ flexDirection: "column"
41778
+ },
41779
+ contentContainer: {
41780
+ flexGrow: 1,
41781
+ display: "flex",
41782
+ flexDirection: "column",
41783
+ margin: "8px 0px",
41784
+ padding: "16px 48px",
41785
+ overflowY: "auto"
41786
+ },
41787
+ productNameContainer: {},
41788
+ productNameText: {
41789
+ fontSize: "32px"
41790
+ },
41791
+ priceContainer: {
41792
+ marginTop: "8px"
41793
+ },
41794
+ priceText: {
41795
+ fontSize: "18px"
41796
+ },
41797
+ colorContainer: {
41798
+ marginTop: "16px"
41799
+ },
41800
+ sizeRecommendationContainer: {
41801
+ marginTop: "16px",
41802
+ display: "flex",
41803
+ flexDirection: "column",
41804
+ border: "1px solid rgba(33, 32, 31, 0.2)",
41805
+ padding: "32px 56px",
41806
+ justifyContent: "center",
41807
+ alignItems: "center"
41808
+ },
41809
+ recommendedSizeContainer: {
41810
+ display: "flex",
41811
+ alignItems: "center",
41812
+ gap: "6px",
41813
+ lineHeight: "normal"
41814
+ },
41815
+ recommendedSizeText: {
41816
+ fontWeight: "600"
41817
+ },
41818
+ itemFitContainer: {
41819
+ marginTop: "8px",
41820
+ lineHeight: "normal"
41821
+ },
41822
+ itemFitText: {},
41823
+ selectSizeLabelContainer: {
41824
+ lineHeight: "normal"
41825
+ },
41826
+ selectSizeLabelText: {},
41827
+ sizeSelectorContainer: {
41828
+ marginTop: "24px"
41829
+ },
41830
+ itemFitDetailsContainer: {
41831
+ marginTop: "24px",
41832
+ width: "100%"
41833
+ },
41834
+ buttonContainer: {
41835
+ marginTop: "24px"
41836
+ },
41837
+ descriptionContainer: {
41838
+ marginTop: "32px"
41839
+ }
41840
+ }));
41841
+ return /* @__PURE__ */ jsxs("div", { css: css2.mainContainer, children: [
41842
+ /* @__PURE__ */ jsx$1(Avatar, { frameUrls }),
41792
41843
  /* @__PURE__ */ jsxs("div", { css: css2.rightContainer, children: [
41793
- /* @__PURE__ */ jsx$1(ModalTitlebar, { title: t("try_it_on"), onCloseClick: closeOverlay }),
41844
+ /* @__PURE__ */ jsx$1(ModalTitlebar, { title: t("try_it_on"), onCloseClick: onClose }),
41794
41845
  /* @__PURE__ */ jsxs("div", { css: css2.contentContainer, children: [
41795
41846
  /* @__PURE__ */ jsx$1("div", { css: css2.productNameContainer, children: /* @__PURE__ */ jsx$1(Text, { variant: "brand", css: css2.productNameText, children: loadedProductData.productName }) }),
41796
41847
  /* @__PURE__ */ jsx$1("div", { css: css2.priceContainer, children: /* @__PURE__ */ jsx$1(Text, { variant: "base", css: css2.priceText, children: selectedColorSizeRecord.priceFormatted }) }),
41797
- availableColorLabels.length >= 2 && /* @__PURE__ */ jsx$1("div", { css: css2.colorContainer, children: /* @__PURE__ */ jsxs("label", { children: [
41798
- /* @__PURE__ */ jsx$1(TextT, { variant: "base", css: css2.colorLabelText, t: "vto-single.color_label" }),
41799
- /* @__PURE__ */ jsx$1("select", { value: selectedColorLabel ?? "", onChange: handleColorSelectChange, css: css2.colorSelect, children: availableColorLabels.map((colorLabel) => /* @__PURE__ */ jsx$1("option", { value: colorLabel, children: colorLabel }, colorLabel)) })
41800
- ] }) }),
41801
- /* @__PURE__ */ jsx$1("div", { css: css2.sizeRecContainer, children: /* @__PURE__ */ jsx$1(SizeRecommendation, { loadedProductData, selectedSizeLabel, onChangeSize: setSelectedSizeLabel }) }),
41802
- /* @__PURE__ */ jsx$1("div", { css: css2.buttonContainer, children: /* @__PURE__ */ jsx$1(ButtonT, { variant: "brand", t: "vto-single.add_to_cart", onClick: handleAddToCartClick }) }),
41803
- /* @__PURE__ */ jsx$1("div", { css: css2.descriptionContainer, children: /* @__PURE__ */ jsx$1(Text, { variant: "base", css: css2.descriptionText, children: /* @__PURE__ */ jsx$1("span", { dangerouslySetInnerHTML: {
41804
- __html: loadedProductData.productDescriptionHtml
41805
- } }) }) })
41848
+ /* @__PURE__ */ jsx$1("div", { css: css2.colorContainer, children: /* @__PURE__ */ jsx$1(ColorSelector, { availableColorLabels, selectedColorLabel, onChangeColor }) }),
41849
+ /* @__PURE__ */ jsxs("div", { css: css2.sizeRecommendationContainer, children: [
41850
+ /* @__PURE__ */ jsxs("div", { css: css2.recommendedSizeContainer, children: [
41851
+ /* @__PURE__ */ jsx$1(SvgInfoIcon, {}),
41852
+ /* @__PURE__ */ jsx$1(RecommendedSizeText, { loadedProductData, css: css2.recommendedSizeText })
41853
+ ] }),
41854
+ /* @__PURE__ */ jsx$1("div", { css: css2.itemFitContainer, children: /* @__PURE__ */ jsx$1(ItemFitText, { loadedProductData, css: css2.itemFitText }) }),
41855
+ /* @__PURE__ */ jsx$1("div", { css: css2.selectSizeLabelContainer, children: /* @__PURE__ */ jsx$1(TextT, { variant: "base", css: css2.selectSizeLabelText, t: "size-rec.select_size" }) }),
41856
+ /* @__PURE__ */ jsx$1("div", { css: css2.sizeSelectorContainer, children: /* @__PURE__ */ jsx$1(SizeSelector, { loadedProductData, selectedSizeLabel, onChangeSize }) }),
41857
+ /* @__PURE__ */ jsx$1("div", { css: css2.itemFitDetailsContainer, children: /* @__PURE__ */ jsx$1(ItemFitDetails, { loadedProductData, selectedSizeLabel }) })
41858
+ ] }),
41859
+ /* @__PURE__ */ jsx$1("div", { css: css2.buttonContainer, children: /* @__PURE__ */ jsx$1(AddToCartButton, { onClick: onAddToCart }) }),
41860
+ /* @__PURE__ */ jsx$1("div", { css: css2.descriptionContainer, children: /* @__PURE__ */ jsx$1(ProductDescriptionText, { loadedProductData }) })
41806
41861
  ] }),
41807
- /* @__PURE__ */ jsxs("div", { css: css2.footerContainer, children: [
41808
- /* @__PURE__ */ jsx$1(LinkT, { variant: "underline", css: css2.footerSignOutLink, onClick: handleSignOutClick, t: "vto-single.sign_out" }),
41809
- /* @__PURE__ */ jsx$1(SvgTfrName, { css: css2.footerTfrIcon })
41810
- ] })
41862
+ /* @__PURE__ */ jsx$1(Footer, { onSignOutClick: onSignOut })
41811
41863
  ] })
41812
- ] }) });
41864
+ ] });
41813
41865
  }
41814
- const AVATAR_CONTROLS_HEIGHT_PX = 100;
41815
- function VtoAvatar({
41866
+ function Avatar({
41816
41867
  frameUrls
41817
41868
  }) {
41818
- const [containerHeightPx, setContainerHeightPx] = reactExports.useState(window.innerHeight);
41869
+ const deviceLayout = useMainStore((state) => state.deviceLayout);
41870
+ const isMobileLayout = deviceLayout === DeviceLayout.MOBILE_PORTRAIT || deviceLayout === DeviceLayout.TABLET_PORTRAIT;
41871
+ const [containerSize, setContainerSize] = reactExports.useState({
41872
+ width: window.innerWidth,
41873
+ height: window.innerHeight
41874
+ });
41819
41875
  const topContainerRef = reactExports.useRef(null);
41820
41876
  const [selectedFrameIndex, setSelectedFrameIndex] = reactExports.useState(null);
41821
41877
  const css2 = useCss((theme) => ({
@@ -41848,17 +41904,17 @@ function VtoAvatar({
41848
41904
  width: "48px",
41849
41905
  height: "48px"
41850
41906
  },
41851
- controlsContainer: {
41907
+ bottomContainer: {
41852
41908
  position: "absolute",
41853
41909
  bottom: "0",
41854
- height: AVATAR_CONTROLS_HEIGHT_PX + "px",
41910
+ height: "50px",
41855
41911
  display: "flex",
41856
41912
  flexDirection: "column",
41857
41913
  alignItems: "center",
41858
41914
  justifyContent: "center",
41859
41915
  paddingBottom: "32px",
41860
41916
  backgroundColor: "#FFFFFF",
41861
- backgroundImage: `url(${AvatarBottomBackgroundUrl})`,
41917
+ backgroundImage: `url(${AVATAR_BOTTOM_BACKGROUND_URL})`,
41862
41918
  backgroundSize: "contain",
41863
41919
  backgroundRepeat: "repeat-y"
41864
41920
  },
@@ -41872,7 +41928,15 @@ function VtoAvatar({
41872
41928
  }));
41873
41929
  reactExports.useEffect(() => {
41874
41930
  const handleResize = () => {
41875
- setContainerHeightPx(topContainerRef.current?.clientHeight ?? window.innerHeight);
41931
+ const containerEl = topContainerRef.current;
41932
+ const size = containerEl ? {
41933
+ width: containerEl.clientWidth,
41934
+ height: containerEl.clientHeight
41935
+ } : {
41936
+ width: window.innerWidth,
41937
+ height: window.innerHeight
41938
+ };
41939
+ setContainerSize(size);
41876
41940
  };
41877
41941
  handleResize();
41878
41942
  window.addEventListener("resize", handleResize);
@@ -41893,8 +41957,42 @@ function VtoAvatar({
41893
41957
  }, 200);
41894
41958
  }
41895
41959
  }, [frameUrls, selectedFrameIndex]);
41896
- const imageHeightPx = containerHeightPx - AVATAR_CONTROLS_HEIGHT_PX;
41897
- const imageWidthPx = Math.floor(imageHeightPx / 1.5);
41960
+ const {
41961
+ imageSize,
41962
+ bottomContainerSize
41963
+ } = reactExports.useMemo(() => {
41964
+ let imageSize2;
41965
+ let bottomContainerSize2;
41966
+ if (isMobileLayout) {
41967
+ const imageWidthPx = containerSize.width;
41968
+ const imageHeightPx = Math.floor(imageWidthPx / AVATAR_IMAGE_ASPECT_RATIO);
41969
+ const bottomContainerHeightPx = containerSize.height - imageHeightPx;
41970
+ imageSize2 = {
41971
+ width: imageWidthPx,
41972
+ height: imageHeightPx
41973
+ };
41974
+ bottomContainerSize2 = {
41975
+ width: imageWidthPx,
41976
+ height: bottomContainerHeightPx
41977
+ };
41978
+ } else {
41979
+ const imageHeightPx = containerSize.height - AVATAR_DESKTOP_BOTTOM_CONTAINER_HEIGHT_PX;
41980
+ const imageWidthPx = Math.floor(imageHeightPx * AVATAR_IMAGE_ASPECT_RATIO);
41981
+ const bottomContainerHeightPx = AVATAR_DESKTOP_BOTTOM_CONTAINER_HEIGHT_PX;
41982
+ imageSize2 = {
41983
+ width: imageWidthPx,
41984
+ height: imageHeightPx
41985
+ };
41986
+ bottomContainerSize2 = {
41987
+ width: imageWidthPx,
41988
+ height: bottomContainerHeightPx
41989
+ };
41990
+ }
41991
+ return {
41992
+ imageSize: imageSize2,
41993
+ bottomContainerSize: bottomContainerSize2
41994
+ };
41995
+ }, [isMobileLayout, containerSize]);
41898
41996
  const rotateLeft = reactExports.useCallback(() => {
41899
41997
  setSelectedFrameIndex((prevIndex) => {
41900
41998
  if (prevIndex == null) {
@@ -41936,86 +42034,127 @@ function VtoAvatar({
41936
42034
  if (frameUrls && selectedFrameIndex != null) {
41937
42035
  contentNode = /* @__PURE__ */ jsxs(Fragment, { children: [
41938
42036
  /* @__PURE__ */ jsxs("div", { css: css2.imageContainer, style: {
41939
- width: imageWidthPx + "px",
41940
- height: imageHeightPx + "px"
42037
+ width: imageSize.width + "px",
42038
+ height: imageSize.height + "px"
41941
42039
  }, children: [
41942
42040
  /* @__PURE__ */ jsx$1("img", { src: frameUrls[selectedFrameIndex], css: css2.image, style: {
41943
- width: imageWidthPx + "px",
41944
- height: imageHeightPx + "px"
42041
+ width: imageSize.width + "px",
42042
+ height: imageSize.height + "px"
41945
42043
  }, onMouseDown: handleImageDrag }),
41946
42044
  /* @__PURE__ */ jsx$1("div", { css: css2.chevronLeftContainer, onClick: rotateLeft, children: /* @__PURE__ */ jsx$1(SvgChevronLeft, { css: css2.chevronIcon }) }),
41947
42045
  /* @__PURE__ */ jsx$1("div", { css: css2.chevronRightContainer, onClick: rotateRight, children: /* @__PURE__ */ jsx$1(SvgChevronRight, { css: css2.chevronIcon }) })
41948
42046
  ] }),
41949
- /* @__PURE__ */ jsxs("div", { css: css2.controlsContainer, style: {
41950
- width: imageWidthPx + "px"
41951
- }, children: [
42047
+ /* @__PURE__ */ jsx$1("div", { css: css2.bottomContainer, style: {
42048
+ width: bottomContainerSize.width + "px",
42049
+ height: bottomContainerSize.height + "px"
42050
+ }, children: isMobileLayout ? /* @__PURE__ */ jsx$1(Fragment, { children: " " }) : /* @__PURE__ */ jsxs(Fragment, { children: [
41952
42051
  /* @__PURE__ */ jsx$1("input", { type: "range", min: 0, max: frameUrls.length - 1, step: 1, value: selectedFrameIndex, onChange: (e) => setSelectedFrameIndex(Number(e.target.value)), css: css2.sliderInput }),
41953
42052
  /* @__PURE__ */ jsx$1(TextT, { variant: "base", t: "vto-single.slide_to_rotate", css: css2.sliderText })
41954
- ] })
42053
+ ] }) })
41955
42054
  ] });
41956
42055
  } else {
41957
42056
  contentNode = /* @__PURE__ */ jsx$1(Loading, { t: "vto-single.avatar_loading" });
41958
42057
  }
41959
42058
  return /* @__PURE__ */ jsx$1("div", { ref: topContainerRef, css: css2.topContainer, style: {
41960
- width: imageWidthPx + "px"
42059
+ width: imageSize.width + "px"
41961
42060
  }, children: contentNode });
41962
42061
  }
41963
- function SizeRecommendation({
42062
+ function ColorSelector({
42063
+ availableColorLabels,
42064
+ selectedColorLabel,
42065
+ onChangeColor
42066
+ }) {
42067
+ const css2 = useCss((theme) => ({
42068
+ colorContainer: {},
42069
+ colorLabelText: {
42070
+ fontSize: "12px"
42071
+ },
42072
+ colorSelect: {
42073
+ border: "none",
42074
+ color: theme.color_fg_text,
42075
+ fontFamily: theme.font_family,
42076
+ fontSize: "12px"
42077
+ }
42078
+ }));
42079
+ const handleColorSelectChange = reactExports.useCallback((e) => {
42080
+ const newColorLabel = e.target.value || null;
42081
+ onChangeColor(newColorLabel);
42082
+ }, []);
42083
+ if (availableColorLabels.length < 2) {
42084
+ return null;
42085
+ }
42086
+ return /* @__PURE__ */ jsx$1("div", { css: css2.colorContainer, children: /* @__PURE__ */ jsxs("label", { children: [
42087
+ /* @__PURE__ */ jsx$1(TextT, { variant: "base", css: css2.colorLabelText, t: "vto-single.color_label" }),
42088
+ /* @__PURE__ */ jsx$1("select", { value: selectedColorLabel ?? "", onChange: handleColorSelectChange, css: css2.colorSelect, children: availableColorLabels.map((colorLabel) => /* @__PURE__ */ jsx$1("option", { value: colorLabel, children: colorLabel }, colorLabel)) })
42089
+ ] }) });
42090
+ }
42091
+ function SizeSelector({
41964
42092
  loadedProductData,
41965
42093
  selectedSizeLabel,
41966
42094
  onChangeSize
41967
42095
  }) {
41968
- const {
41969
- t
41970
- } = useTranslation();
41971
42096
  const css2 = useCss((_theme) => ({
41972
- frame: {
41973
- display: "flex",
41974
- flexDirection: "column",
41975
- border: "1px solid rgba(33, 32, 31, 0.2)",
41976
- padding: "32px 56px",
41977
- justifyContent: "center",
41978
- alignItems: "center"
41979
- },
41980
- recommendedSizeContainer: {
41981
- display: "flex",
41982
- alignItems: "center",
41983
- gap: "6px",
41984
- lineHeight: "normal"
41985
- },
41986
- recommendedSizeText: {
41987
- fontWeight: "600"
41988
- },
41989
- itemFitContainer: {
41990
- marginTop: "8px",
41991
- lineHeight: "normal"
41992
- },
41993
- itemFitText: {},
41994
- selectSizeLabelContainer: {
41995
- lineHeight: "normal"
41996
- },
41997
- selectSizeLabelText: {},
41998
- sizeSelectorContainer: {
41999
- marginTop: "24px",
42097
+ container: {
42000
42098
  display: "flex",
42001
42099
  alignItems: "center",
42002
42100
  gap: "12px"
42003
42101
  },
42004
- sizeSelectorButton: {
42102
+ button: {
42005
42103
  width: "54px",
42006
42104
  height: "44px",
42007
42105
  border: "1px solid rgba(33, 32, 31, 0.2)",
42008
42106
  padding: "9px 5px"
42009
42107
  },
42010
- sizeSelectorButtonSelected: {
42108
+ selectedButton: {
42011
42109
  border: "1px solid rgb(33, 32, 31)",
42012
42110
  cursor: "default"
42013
- },
42014
- fitContainer: {
42015
- marginTop: "24px",
42111
+ }
42112
+ }));
42113
+ const sizeSelectorNodeList = reactExports.useMemo(() => loadedProductData.sizes.map((sizeRecord) => {
42114
+ const isSelected = sizeRecord.sizeLabel === selectedSizeLabel;
42115
+ return /* @__PURE__ */ jsx$1(Button, { variant: "base", css: /* @__PURE__ */ css$1({
42116
+ ...css2.button,
42117
+ ...isSelected && css2.selectedButton
42118
+ }, "", ""), onClick: () => {
42119
+ if (isSelected) {
42120
+ return;
42121
+ }
42122
+ onChangeSize(sizeRecord.sizeLabel);
42123
+ }, children: sizeRecord.sizeLabel }, sizeRecord.sizeLabel);
42124
+ }), [loadedProductData.sizes, selectedSizeLabel, onChangeSize]);
42125
+ return /* @__PURE__ */ jsx$1("div", { css: css2.container, children: sizeSelectorNodeList });
42126
+ }
42127
+ function RecommendedSizeText({
42128
+ loadedProductData,
42129
+ css: css2
42130
+ }) {
42131
+ return /* @__PURE__ */ jsx$1(TextT, { variant: "base", css: css2, t: "size-rec.recommended_size", vars: {
42132
+ size: loadedProductData.recommendedSizeLabel
42133
+ } });
42134
+ }
42135
+ function ItemFitText({
42136
+ loadedProductData,
42137
+ css: css2
42138
+ }) {
42139
+ const {
42140
+ t
42141
+ } = useTranslation();
42142
+ return /* @__PURE__ */ jsx$1(TextT, { variant: "base", css: css2, t: "size-rec.item_fit", vars: {
42143
+ fit: t(`size-rec.fitClassification.${loadedProductData.fitClassification}`) || loadedProductData.fitClassification
42144
+ } });
42145
+ }
42146
+ function ItemFitDetails({
42147
+ loadedProductData,
42148
+ selectedSizeLabel
42149
+ }) {
42150
+ const {
42151
+ t
42152
+ } = useTranslation();
42153
+ const css2 = useCss((_theme) => ({
42154
+ container: {
42016
42155
  width: "100%"
42017
42156
  },
42018
- fitLine: {
42157
+ line: {
42019
42158
  display: "flex",
42020
42159
  justifyContent: "space-between",
42021
42160
  alignItems: "center",
@@ -42024,29 +42163,17 @@ function SizeRecommendation({
42024
42163
  borderTop: "1px solid rgb(33, 32, 31)",
42025
42164
  paddingTop: "4px"
42026
42165
  },
42027
- fitFirstLine: {
42166
+ firstLine: {
42028
42167
  borderTop: "none",
42029
42168
  marginTop: "0px",
42030
42169
  paddingTop: "0px"
42031
42170
  },
42032
- fitDetail: {
42171
+ detailCell: {
42033
42172
  display: "flex",
42034
42173
  alignItems: "center",
42035
42174
  gap: "6px"
42036
42175
  }
42037
42176
  }));
42038
- const sizeSelectorNodeList = reactExports.useMemo(() => loadedProductData.sizes.map((sizeRecord) => {
42039
- const isSelected = sizeRecord.sizeLabel === selectedSizeLabel;
42040
- return /* @__PURE__ */ jsx$1(Button, { variant: "base", css: /* @__PURE__ */ css$1({
42041
- ...css2.sizeSelectorButton,
42042
- ...isSelected && css2.sizeSelectorButtonSelected
42043
- }, "", ""), onClick: () => {
42044
- if (isSelected) {
42045
- return;
42046
- }
42047
- onChangeSize(sizeRecord.sizeLabel);
42048
- }, children: sizeRecord.sizeLabel }, sizeRecord.sizeLabel);
42049
- }), [loadedProductData.sizes, selectedSizeLabel, onChangeSize]);
42050
42177
  const fitLineNodeList = reactExports.useMemo(() => {
42051
42178
  const selectedSizeRecord = loadedProductData.sizes.find((s) => s.sizeLabel === selectedSizeLabel);
42052
42179
  if (!selectedSizeRecord) {
@@ -42056,9 +42183,9 @@ function SizeRecommendation({
42056
42183
  const locationLabel = t(`size-rec.measurementLocation.${mlf.measurement_location}`) || mlf.measurement_location;
42057
42184
  const fit = mlf.fit;
42058
42185
  const fitLabel = t(`size-rec.fit.${fit}`) || fit;
42059
- return /* @__PURE__ */ jsxs("div", { css: [css2.fitLine, index === 0 && css2.fitFirstLine, "", ""], children: [
42060
- /* @__PURE__ */ jsx$1("div", { css: css2.fitDetail, children: locationLabel }),
42061
- /* @__PURE__ */ jsx$1("div", { css: css2.fitDetail, children: fit === "perfect_fit" ? /* @__PURE__ */ jsxs(Fragment, { children: [
42186
+ return /* @__PURE__ */ jsxs("div", { css: [css2.line, index === 0 && css2.firstLine, "", ""], children: [
42187
+ /* @__PURE__ */ jsx$1("div", { css: css2.detailCell, children: locationLabel }),
42188
+ /* @__PURE__ */ jsx$1("div", { css: css2.detailCell, children: fit === "perfect_fit" ? /* @__PURE__ */ jsxs(Fragment, { children: [
42062
42189
  /* @__PURE__ */ jsx$1(SvgCheckCircle, {}),
42063
42190
  " ",
42064
42191
  fitLabel
@@ -42066,19 +42193,50 @@ function SizeRecommendation({
42066
42193
  ] }, index);
42067
42194
  });
42068
42195
  }, [loadedProductData, selectedSizeLabel]);
42069
- return /* @__PURE__ */ jsxs("div", { css: css2.frame, children: [
42070
- /* @__PURE__ */ jsxs("div", { css: css2.recommendedSizeContainer, children: [
42071
- /* @__PURE__ */ jsx$1(SvgInfoIcon, {}),
42072
- /* @__PURE__ */ jsx$1(TextT, { variant: "base", css: css2.recommendedSizeText, t: "size-rec.recommended_size", vars: {
42073
- size: loadedProductData.recommendedSizeLabel
42074
- } })
42075
- ] }),
42076
- /* @__PURE__ */ jsx$1("div", { css: css2.itemFitContainer, children: /* @__PURE__ */ jsx$1(TextT, { variant: "base", css: css2.itemFitText, t: "size-rec.item_fit", vars: {
42077
- fit: t(`size-rec.fitClassification.${loadedProductData.fitClassification}`) || loadedProductData.fitClassification
42078
- } }) }),
42079
- /* @__PURE__ */ jsx$1("div", { css: css2.selectSizeLabelContainer, children: /* @__PURE__ */ jsx$1(TextT, { variant: "base", css: css2.selectSizeLabelText, t: "size-rec.select_size" }) }),
42080
- /* @__PURE__ */ jsx$1("div", { css: css2.sizeSelectorContainer, children: sizeSelectorNodeList }),
42081
- /* @__PURE__ */ jsx$1("div", { css: css2.fitContainer, children: fitLineNodeList })
42196
+ return /* @__PURE__ */ jsx$1("div", { css: css2.container, children: fitLineNodeList });
42197
+ }
42198
+ function AddToCartButton({
42199
+ onClick
42200
+ }) {
42201
+ return /* @__PURE__ */ jsx$1(ButtonT, { variant: "brand", t: "vto-single.add_to_cart", onClick });
42202
+ }
42203
+ function ProductDescriptionText({
42204
+ loadedProductData
42205
+ }) {
42206
+ const css2 = useCss((_theme) => ({
42207
+ descriptionText: {
42208
+ fontSize: "12px"
42209
+ }
42210
+ }));
42211
+ return /* @__PURE__ */ jsx$1(Text, { variant: "base", css: css2.descriptionText, children: /* @__PURE__ */ jsx$1("span", { dangerouslySetInnerHTML: {
42212
+ __html: loadedProductData.productDescriptionHtml
42213
+ } }) });
42214
+ }
42215
+ function Footer({
42216
+ onSignOutClick
42217
+ }) {
42218
+ const css2 = useCss((theme) => ({
42219
+ container: {
42220
+ marginLeft: "auto",
42221
+ marginRight: "auto",
42222
+ paddingBottom: "16px",
42223
+ display: "flex",
42224
+ justifyContent: "center",
42225
+ alignItems: "center",
42226
+ gap: "4px"
42227
+ },
42228
+ signOutLink: {
42229
+ fontSize: "10px",
42230
+ color: theme.color_tfr_800
42231
+ },
42232
+ tfrIcon: {
42233
+ width: "100px",
42234
+ height: "24px"
42235
+ }
42236
+ }));
42237
+ return /* @__PURE__ */ jsxs("div", { css: css2.container, children: [
42238
+ /* @__PURE__ */ jsx$1(LinkT, { variant: "underline", css: css2.signOutLink, onClick: onSignOutClick, t: "vto-single.sign_out" }),
42239
+ /* @__PURE__ */ jsx$1(SvgTfrName, { css: css2.tfrIcon })
42082
42240
  ] });
42083
42241
  }
42084
42242
  function useSizeRecommendation(load) {
@@ -42182,7 +42340,7 @@ function VtoButtonWidget({}) {
42182
42340
  };
42183
42341
  return /* @__PURE__ */ jsxs("button", { type: "button", onClick: openVto, css: css2.button, children: [
42184
42342
  /* @__PURE__ */ jsx$1(SvgTfrIcon, { css: css2.icon }),
42185
- /* @__PURE__ */ jsx$1(TextT, { variant: "brand", css: css2.text, t: "try_it_on" })
42343
+ /* @__PURE__ */ jsx$1(TextT, { variant: "base", css: css2.text, t: "try_it_on" })
42186
42344
  ] });
42187
42345
  }
42188
42346
  var DeviceLayout = /* @__PURE__ */ ((DeviceLayout2) => {
@@ -42378,9 +42536,9 @@ const SHARED_CONFIG = {
42378
42536
  appGooglePlayUrl: "https://play.google.com/store/apps/details?id=com.thefittingroom.marketplace"
42379
42537
  },
42380
42538
  build: {
42381
- version: `${"5.0.1"}`,
42382
- commitHash: `${"9a8d32f"}`,
42383
- date: `${"2026-01-06T23:59:47.263Z"}`
42539
+ version: `${"5.0.3"}`,
42540
+ commitHash: `${"7ef9b58"}`,
42541
+ date: `${"2026-01-07T07:58:58.896Z"}`
42384
42542
  }
42385
42543
  };
42386
42544
  const CONFIGS = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thefittingroom/shop-ui",
3
- "version": "5.0.1",
3
+ "version": "5.0.3",
4
4
  "description": "the fitting room UI library",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",