{"version":3,"sources":["../src/components/containers/XProductDetails/index.tsx","../src/components/containers/XProductDetails/ProductDetailsPreview/index.tsx","../src/components/containers/XProductDetails/ProductDetailsPreview/ProductDetailsPreviewGrid.tsx","../src/components/containers/XProductDetails/ProductDetailsPreview/ProductDetailsPreviewList.tsx","../src/components/containers/XProductDetails/ProductDetailsInfo/index.tsx","../src/components/containers/XProductDetails/ProductDetailsInfo/DetailsGroup.tsx","../src/components/containers/XProductDetails/ProductDetailsInfo/DetailsWrapper.tsx","../src/components/containers/XProductDetails/ProductDetailsInfo/QuantitySelector.tsx"],"names":["React","Container","Stack","Grid","useSetRecoilState","isEqual","ProductDetailsPreviewList","images","name","env","imageComponent","useXoraiaValue","showImage","index","src","img","_","ProductDetailsPreviewGrid_default","ProductDetailsPreviewGrid","ProductDetailsPreviewList_default","ProductDetailsPreview","previewMode","previewPosition","article","ProductDetailsPreview_default","MenuItem","Rating","Select","ToggleButton","ToggleButtonGroup","Typography","DetailsGroup","title","mode","children","DetailsGroup_default","DetailsWrapper","detailsGap","textColor","textFontSize","titleColor","titleFontSize","titleFontWeight","titleLetterSpacing","nameColor","nameFontSize","nameFontFamily","DEFAULT_FONT_FAMILY","nameFontStyle","nameFontWeight","priceColor","priceFontSize","priceFontFamily","priceFontStyle","priceFontWeight","discountColor","discountFontSize","discountFontFamily","discountFontStyle","discountFontWeight","discountTextDecoration","starIconColor","SECONDARY_COLOR","starIconSize","colorPickerBorder","colorPickerSize","toggleFontFamily","toggleBgColor","toggleBorder","toggleFontSize","toggleHeight","toggleWidth","toggleRadius","toggleSpacing","toggleTextColor","toggleActiveBorder","MAIN_COLOR","toggleActiveBgColor","toggleActiveTextColor","selectFontFamily","selectFontSize","selectHeight","selectWidth","selectBorder","selectTextColor","btnFontFamily","btnFontSize","btnBgColor","btnTextColor","btnHeight","btnWidth","btnRadius","btnBorder","btnHoverBgColor","btnHoverTextColor","inputFontFamily","inputFontSize","inputContainerBgColor","inputContainerRadius","inputContainerBorder","inputHeight","inputWidth","inputBorder","inputTextColor","inputBtnSize","inputBtnRadius","inputBtnBgColor","inputBtnTextColor","inputBtnHoverBgColor","inputBtnHoverTextColor","generateBorder","generateRadius","DetailsWrapper_default","Button","Fab","TextField","AddRounded","RemoveRounded","QuantitySelector","inputMode","urlParams","onChange","cart","setCart","useCart","cartItem","e","value","isMax","old","carts","QuantitySelector_default","ProductDetailsInfo","props","detailsGroupMode","showReviews","starCountMode","opt","color","v","choice","ProductDetailsInfo_default","compareProps","prevProps","nextProps","XProductDetails","config","updateUrlParams","breakpoint","useBreakpoint","xElement","useXElement","args","error","setSelectedElement","USE_SELECTED_INDEX","valueAtBreakPoint","getValueOnBreakpoint","devProps","clickHandler","containerMode","padding","margin","_article","generateArticleData","previewSide","detailsSide","grid","generateSide","XProductDetails_default"],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { Container, Stack, Grid } from \"@mui/material\";\n\nimport { useSetRecoilState } from \"recoil\";\nimport { getValueOnBreakpoint } from \"../../../lib/getValueOnBreakpoint\";\nimport { clickHandler } from \"../../../lib/clickHandler\";\nimport { XElementConfig } from \"../../../utils/interfaces/Elements/XElement.interfaces\";\n\nimport { isEqual } from \"lodash\";\nimport { generateSide } from \"../../../lib/generateSide\";\n\nimport {\n  IXProductDetailsProps,\n  XProductDetailsProps,\n} from \"../../../utils/interfaces/containers/XProductDetails.interfaces\";\n// import { useSortable } from \"@dnd-kit/sortable\";\n// import { CSS } from \"@dnd-kit/utilities\";\nimport { useBreakpoint } from \"../../../hooks/useBreakpoint\";\nimport { TSetUrlParamsArgs, useXoraiaValue } from \"../../../hooks/useXoraia\";\nimport { TUseXElement, useXElement } from \"../../../hooks/useXElement\";\nimport { USE_SELECTED_INDEX } from \"../../../hooks/useSelectedElement\";\n// import { Grid } from \"../../core/Grid\";\nimport ProductDetailsPreview from \"./ProductDetailsPreview\";\nimport ProductDetailsInfo from \"./ProductDetailsInfo\";\nimport { generateArticleData } from \"../../../lib/generateArticleData\";\n\nconst compareProps = (prevProps: any, nextProps: any) => {\n  return isEqual(prevProps, nextProps);\n};\n\nconst XProductDetails: React.FC<XProductDetailsProps> = React.memo(\n  ({ config = {} as XElementConfig }) => {\n    const [urlParams, updateUrlParams] = React.useState<TSetUrlParamsArgs>({});\n\n    // WE TRACK THE BREAK POINTS CHANGES\n    const breakpoint = useBreakpoint();\n\n    const { env, article } = useXoraiaValue();\n\n    // WE ARE GETTING THE CURRENT ELEMENT FROM THE ATOM FAMILY\n    const { xElement } = useXElement<TUseXElement<IXProductDetailsProps>>(\n      config.index\n    );\n\n    const onChange = async (args: TSetUrlParamsArgs) => {\n      try {\n        updateUrlParams((old) => ({ ...old, ...args }));\n      } catch (error) {\n        console.error(\"UPDATE_URL =>\", error);\n      }\n    };\n\n    // GARBING THE INDEX UPDATER FOR GENERAL USAGE\n    const setSelectedElement = useSetRecoilState(USE_SELECTED_INDEX);\n\n    // IF WE DONT HAVE THIS ELEMENT CONFIGS ADDED WE DON'T SHOW IT\n    if (!xElement || Object.keys(xElement).length === 0) return null;\n\n    // WE GET ALL DEVICES PROPS AS VALUE\n    const { value } = xElement;\n\n    // WE NOW USE THE CURRENT BREAKPOINT VALUE ON THIS ELEMENT\n    const valueAtBreakPoint = getValueOnBreakpoint<IXProductDetailsProps>(\n      value as any,\n      breakpoint\n    );\n\n    const devProps = {\n      id: config.index,\n      onClick: (e: any) => clickHandler(e, setSelectedElement, config.index),\n      // ...(!xElement.childOf && dndProps),\n    };\n\n    const {\n      containerMode = \"CENTER\",\n      previewPosition = \"left\",\n      padding = {},\n      margin = {},\n    } = valueAtBreakPoint;\n\n    const _article = env !== \"prod\" ? generateArticleData(1)[0] : article;\n\n    if (!_article) return null;\n\n    const previewSide = (\n      <ProductDetailsPreview\n        {...valueAtBreakPoint}\n        article={_article}\n        urlParams={urlParams}\n      />\n    );\n\n    const detailsSide = (\n      <ProductDetailsInfo\n        {...valueAtBreakPoint}\n        article={_article}\n        urlParams={urlParams}\n        onChange={onChange}\n      />\n    );\n\n    let grid = (\n      <Grid container spacing={4} position=\"relative\">\n        {previewPosition !== \"right\" ? previewSide : detailsSide}\n        {previewPosition !== \"right\" ? detailsSide : previewSide}\n      </Grid>\n    );\n\n    if (containerMode === \"CENTER\") {\n      grid = <Container>{grid}</Container>;\n    } else if (containerMode === \"FILL\") {\n      grid = <Container maxWidth={false}>{grid}</Container>;\n    }\n\n    return (\n      <Stack\n        position=\"relative\"\n        {...(env === \"dev\" && devProps)}\n        width=\"100%\"\n        sx={{\n          margin: generateSide(\"margin\", margin),\n          padding: generateSide(\"padding\", padding),\n        }}\n      >\n        {grid}\n      </Stack>\n    );\n  },\n  compareProps\n);\n\nexport default XProductDetails;\n","import * as React from \"react\";\nimport { Grid } from \"@mui/material\";\n\nimport { IXProductDetailsProps } from \"../../../../utils/interfaces/containers/XProductDetails.interfaces\";\nimport { IArticleData } from \"../../../../utils/interfaces/common/XArticle.interfaces\";\nimport { TSetUrlParamsArgs } from \"../../../../hooks/useXoraia\";\n\n// TODO MAKE THIS SUSPENSE ON DEV\n// const ProductDetailsPreviewGrid = React.lazy(\n//   () => import(\"./ProductDetailsPreviewGrid\")\n// );\n// const ProductDetailsPreviewList = React.lazy(\n//   () => import(\"./ProductDetailsPreviewList\")\n// );\n\nimport ProductDetailsPreviewGrid from \"./ProductDetailsPreviewGrid\";\n\nimport ProductDetailsPreviewList from \"./ProductDetailsPreviewList\";\n\nconst ProductDetailsPreview: React.FC<\n  IXProductDetailsProps & {\n    article: IArticleData;\n    urlParams?: TSetUrlParamsArgs;\n  }\n> = ({ previewMode = \"grid\", previewPosition = \"left\", article }) => {\n  // TODO CHECK FOR VARIANT IMAGE HERE\n  const images = article.images ?? [];\n\n  return (\n    <Grid\n      item\n      xs={12}\n      md={previewPosition === \"top\" ? 12 : previewMode === \"list\" ? 5 : 6}\n    >\n      {previewMode === \"grid\" && (\n        <ProductDetailsPreviewGrid images={images} name={article.name} />\n      )}\n      {previewMode === \"list\" && (\n        <ProductDetailsPreviewList images={images} name={article.name} />\n      )}\n    </Grid>\n  );\n};\n\nexport default ProductDetailsPreview;\n","import * as React from \"react\";\nimport { useXoraiaValue } from \"../../../../hooks/useXoraia\";\nimport { Grid } from \"../../../core/Grid\";\n\ninterface ProductDetailsPreviewGridProps {\n  images: string[];\n  name: string;\n}\n\nconst ProductDetailsPreviewList: React.FC<\n  ProductDetailsPreviewGridProps\n> = ({images, name}) => {\n  const { env, imageComponent } = useXoraiaValue();\n\n  const showImage = (index: number) => {\n    const src = images[index];\n\n    let img: any = (\n      <img\n        key={index.toString()}\n        src={src}\n        alt={name}\n        loading=\"lazy\"\n        style={{ width: \"100%\", borderRadius: \"10px\" }}\n      />\n    );\n\n    if (imageComponent) {\n      img = imageComponent(\n        {\n          alt: name,\n          src,\n          width: \"100%\",\n          borderRadius: {\n            TopLeft: \"10px\",\n            BottomLeft: \"10px\",\n            BottomRight: \"10px\",\n            TopRight: \"10px\",\n          },\n        },\n        env ?? \"dev\",\n        {},\n        index.toString()\n      );\n    }\n\n    return img;\n  };\n\n  return (\n    <Grid columns={2} gap=\"15px\" width=\"100%\">\n      {images.map((_, i) => (\n        <div key={i.toString()}>{showImage(i)}</div>\n      ))}\n    </Grid>\n  );\n};\n\nexport default ProductDetailsPreviewList;\n","import * as React from \"react\";\nimport { useXoraiaValue } from \"../../../../hooks/useXoraia\";\nimport { Grid } from \"../../../core/Grid\";\n\ninterface ProductDetailsPreviewGridProps {\n  images: string[];\n  name: string;\n}\n\nconst ProductDetailsPreviewGrid: React.FC<ProductDetailsPreviewGridProps> = ({\n  images,\n  name,\n}) => {\n  const { env, imageComponent } = useXoraiaValue();\n\n  const showImage = (index: number) => {\n    const src = images[index];\n\n    let img: any = (\n      <img\n        key={index.toString()}\n        src={src}\n        alt={name}\n        loading=\"lazy\"\n        style={{ width: \"100%\", borderRadius: \"10px\" }}\n      />\n    );\n\n    if (imageComponent) {\n      img = imageComponent(\n        {\n          alt: name,\n          src,\n          width: \"100%\",\n          borderRadius: {\n            TopLeft: \"10px\",\n            BottomLeft: \"10px\",\n            BottomRight: \"10px\",\n            TopRight: \"10px\",\n          },\n        },\n        env ?? \"dev\",\n        {},\n        index.toString()\n      );\n    }\n\n    return img;\n  };\n\n  return (\n    <Grid columns={1} gap=\"15px\" width=\"100%\">\n      {images.map((_, i) => (\n        <div key={i.toString()}>{showImage(i)}</div>\n      ))}\n    </Grid>\n  );\n};\n\nexport default ProductDetailsPreviewGrid;\n","import * as React from \"react\";\nimport {\n  MenuItem,\n  Rating,\n  Select,\n  Stack,\n  ToggleButton,\n  ToggleButtonGroup,\n  Grid,\n  Typography,\n} from \"@mui/material\";\n\nimport { IXProductDetailsProps } from \"../../../../utils/interfaces/containers/XProductDetails.interfaces\";\n\nimport { IArticleData } from \"../../../../utils/interfaces/common/XArticle.interfaces\";\nimport DetailsGroup from \"./DetailsGroup\";\nimport DetailsWrapper from \"./DetailsWrapper\";\nimport { TSetUrlParamsArgs } from \"../../../../hooks/useXoraia\";\nimport QuantitySelector from \"./QuantitySelector\";\n\nconst ProductDetailsInfo: React.FC<\n  IXProductDetailsProps & {\n    article: IArticleData;\n\n    onChange: (args: TSetUrlParamsArgs) => Promise<void>;\n\n    urlParams?: TSetUrlParamsArgs;\n  }\n> = ({\n  previewMode = \"grid\",\n  previewPosition = \"left\",\n  article,\n  onChange,\n  urlParams = {},\n  ...props\n}) => {\n  const {\n    detailsGroupMode = \"column\",\n    // REVIEWS\n    showReviews = true,\n    starCountMode = \"full\",\n  } = props;\n\n  return (\n    <Grid\n      item\n      xs={12}\n      md={previewPosition === \"top\" ? 12 : previewMode === \"list\" ? 7 : 6}\n    >\n      <DetailsWrapper {...props}>\n        <Typography className=\"XProductDetails_Name\">{article.name}</Typography>\n        {/* // todo use currentPrice & oldPrice instead of price and discount */}\n        <Typography className=\"XProductDetails_Price\">\n          {article.price} F CFA\n          {!!article.discount && (\n            <Typography\n              className=\"XProductDetails_Discount\"\n              component=\"span\"\n              ml={1}\n            >\n              {article.discount} F CFA\n            </Typography>\n          )}\n        </Typography>\n        {showReviews && (\n          <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n            <Rating\n              className=\"XProductDetails_Rating\"\n              size=\"small\"\n              precision={0.5}\n              readOnly\n              // TODO ADD OPTION TO GET FINAL RATE\n              // AFTER REVIEW\n              value={article.initialRate}\n            />\n            {/* // todo get rate count dynamically */}\n            {starCountMode !== \"none\" && (\n              <Typography variant=\"caption\">\n                {starCountMode === \"full\" ? `(0 Notes)` : `(0)`}\n              </Typography>\n            )}\n          </Stack>\n        )}\n        <DetailsGroup title=\"DESCRIPTION\" mode={detailsGroupMode}>\n          <Typography component=\"span\">{article.description}</Typography>\n        </DetailsGroup>\n        {/* // todo calculate the final qty */}\n        <DetailsGroup title=\"QUANTITE\" mode={detailsGroupMode}>\n          <Typography component=\"span\">\n            {article.isInfinite ? \"Disponible\" : article.qty}\n          </Typography>\n        </DetailsGroup>\n        {article.options &&\n          article.options.map((opt) => {\n            const value = urlParams[opt.id] ?? opt.values[0];\n\n            return (\n              <DetailsGroup\n                key={opt.id}\n                title={opt.name.toUpperCase()}\n                mode={detailsGroupMode}\n              >\n                {opt.type === \"COLOR\" && (\n                  <ToggleButtonGroup\n                    exclusive\n                    value={value}\n                    onChange={async (_, color) =>\n                      await onChange({ [opt.id]: color })\n                    }\n                    className=\"XProductDetails_ColorPicker\"\n                  >\n                    {opt.values.map((v) => (\n                      <ToggleButton value={v} key={v}>\n                        <Stack\n                          className=\"XProductDetails_ColorPicker_Color\"\n                          bgcolor={v}\n                          width=\"100%\"\n                          height=\"100%\"\n                        />\n                      </ToggleButton>\n                    ))}\n                  </ToggleButtonGroup>\n                )}\n\n                {opt.type === \"CHOICE\" && (\n                  <ToggleButtonGroup\n                    exclusive\n                    value={value}\n                    className=\"XProductDetails_ToggleBtn\"\n                    onChange={async (_, choice) =>\n                      await onChange({ [opt.id]: choice })\n                    }\n                  >\n                    {opt.values.map((v) => (\n                      <ToggleButton value={v} key={v}>\n                        {v}\n                      </ToggleButton>\n                    ))}\n                  </ToggleButtonGroup>\n                )}\n\n                {opt.type === \"SELECT\" && (\n                  <Select\n                    value={value}\n                    size=\"small\"\n                    className=\"XProductDetails_SelectOption\"\n                    onChange={async (e) =>\n                      await onChange({ [opt.id]: e.target.value })\n                    }\n                  >\n                    {opt.values.map((v) => (\n                      <MenuItem key={v} value={v}>\n                        {v}\n                      </MenuItem>\n                    ))}\n                  </Select>\n                )}\n              </DetailsGroup>\n            );\n          })}\n        <QuantitySelector\n          {...props}\n          onChange={onChange}\n          urlParams={urlParams}\n          article={article}\n        />\n        {/* // TODO IMPLEMENT THIS WITH STREAM CHECKER */}\n        {/* <Button\n          color=\"error\"\n          startIcon={<FavoriteOutlined />}\n          sx={{ \"&:hover\": { bgcolor: \"transparent\" } }}\n        >\n          Ajouter aux favories\n        </Button> */}\n      </DetailsWrapper>\n    </Grid>\n  );\n};\n\nexport default ProductDetailsInfo;\n","import { Stack, Typography } from \"@mui/material\";\nimport React from \"react\";\n\nconst DetailsGroup: React.FC<{\n  title: string;\n  mode: \"column\" | \"row\";\n  children: React.ReactNode;\n}> = ({ title, mode, children }) => {\n  return (\n    <Stack spacing={0.5} direction={mode} pt={2}>\n      <Typography className=\"XProductDetails_Title\">{title}</Typography>\n      <Stack flex={1}>{children}</Stack>\n    </Stack>\n  );\n};\n\nexport default DetailsGroup;\n","import { Stack } from \"@mui/material\";\nimport React from \"react\";\nimport { IXProductDetailsProps } from \"../../../../utils/interfaces/containers/XProductDetails.interfaces\";\nimport { DEFAULT_FONT_FAMILY } from \"../../../../utils/constants/common/fonts\";\nimport {\n  MAIN_COLOR,\n  SECONDARY_COLOR,\n} from \"../../../../utils/constants/common/utils\";\nimport { generateBorder } from \"../../../../lib/generateBorder\";\nimport { generateRadius } from \"../../../../lib/generateRadius\";\n\nconst DetailsWrapper: React.FC<\n  IXProductDetailsProps & {\n    children?: React.ReactNode[] | React.ReactNode;\n  }\n> = ({\n  children,\n  detailsGap = \"10px\",\n  textColor = \"#000000\",\n  textFontSize = \"16px\",\n  // DETAILS TITLE\n  titleColor = \"#000000\",\n  titleFontSize = \"10px\",\n  titleFontWeight = 600,\n  titleLetterSpacing = \"1px\",\n\n  // DETAILS ARTICLE NAME\n  nameColor = \"#000000\",\n  nameFontSize = \"28px\",\n  nameFontFamily = DEFAULT_FONT_FAMILY,\n  nameFontStyle = \"normal\",\n  nameFontWeight = 600,\n\n  // DETAILS ARTICLE PRICE\n  priceColor = \"#000000\",\n  priceFontSize = \"28px\",\n  priceFontFamily = DEFAULT_FONT_FAMILY,\n  priceFontStyle = \"normal\",\n  priceFontWeight = 300,\n\n  // DETAILS ARTICLE DISCOUNT\n  discountColor = \"#777777\",\n  discountFontSize = \"24px\",\n  discountFontFamily = DEFAULT_FONT_FAMILY,\n  discountFontStyle = \"normal\",\n  discountFontWeight = 600,\n  discountTextDecoration = \"line-through\",\n\n  starIconColor = SECONDARY_COLOR,\n  starIconSize = \"20px\",\n  // COLOR_PICKER\n  // colorPickerBorderWidth = \"2px\",\n  colorPickerBorder = { width: \"2px\", color: \"#000000\" },\n  colorPickerSize = \"40px\",\n\n  // TOOGLE BTN (Tags and badges)\n  toggleFontFamily = DEFAULT_FONT_FAMILY,\n  toggleBgColor = \"#FFFFFF00\",\n  toggleBorder = { width: \"2px\", color: \"#EEEEEE\" },\n  toggleFontSize = \"16px\",\n  toggleHeight = \"50px\",\n  toggleWidth = \"80px\",\n  toggleRadius = {\n    TopLeft: \"5px\",\n    TopRight: \"5px\",\n    BottomLeft: \"5px\",\n    BottomRight: \"5px\",\n  },\n  toggleSpacing = \"10px\",\n  toggleTextColor = \"#000000\",\n  toggleActiveBorder = { width: \"2px\", color: MAIN_COLOR },\n  toggleActiveBgColor,\n  toggleActiveTextColor = MAIN_COLOR,\n\n  // SELECT\n  selectFontFamily = DEFAULT_FONT_FAMILY,\n  selectFontSize = \"16px\",\n  selectHeight = \"50px\",\n  selectWidth = \"50%\",\n  selectBorder = { width: \"1px\", color: \"#EEEEEE\" },\n  selectTextColor = \"#000000\",\n\n  // ADD CART BUTTON\n  btnFontFamily = DEFAULT_FONT_FAMILY,\n  btnFontSize = \"14px\",\n  btnBgColor = MAIN_COLOR,\n  btnTextColor = \"#FFFFFF\",\n  btnHeight = \"50px\",\n  btnWidth = \"250px\",\n  btnRadius = {\n    TopLeft: \"5px\",\n    TopRight: \"5px\",\n    BottomLeft: \"5px\",\n    BottomRight: \"5px\",\n  },\n  btnBorder,\n  btnHoverBgColor,\n  btnHoverTextColor = \"#FFFFFF\",\n\n  inputFontFamily = DEFAULT_FONT_FAMILY,\n  inputFontSize = \"14px\",\n  inputContainerBgColor,\n  inputContainerRadius = {\n    TopLeft: \"5px\",\n    TopRight: \"5px\",\n    BottomLeft: \"5px\",\n    BottomRight: \"5px\",\n  },\n  inputContainerBorder = { width: \"2px\", color: \"#EEEEEE\" },\n\n  inputHeight = \"50px\",\n  inputWidth = \"250px\",\n  inputBorder = { width: \"2px\", color: \"#FFFFFF\" },\n  inputTextColor = \"#000000\",\n\n  inputBtnSize = \"40px\",\n  inputBtnRadius = {\n    TopLeft: \"50%\",\n    TopRight: \"50%\",\n    BottomLeft: \"50%\",\n    BottomRight: \"50%\",\n  },\n  inputBtnBgColor = \"#FFFFFF\",\n  inputBtnTextColor = \"#000000\",\n  inputBtnHoverBgColor = \"#000000\",\n  inputBtnHoverTextColor = \"#FFFFFF\",\n}) => {\n  return (\n    <Stack\n      id=\"XProductDetails_DetailsSide\"\n      spacing={detailsGap}\n      alignItems=\"flex-start\"\n      sx={{\n        fontFamily: \"inherit\",\n        color: textColor,\n        fontSize: textFontSize,\n        position: \"sticky\",\n        top: 0,\n\n        \"& p\": { lineHeight: \"1.2em\" },\n\n        // TITLE\n        \"& .XProductDetails_Title\": {\n          width: \"100px\",\n          fontSize: titleFontSize,\n          fontWeight: titleFontWeight,\n          color: titleColor,\n          letterSpacing: titleLetterSpacing,\n        },\n\n        // NAME\n        \"& .XProductDetails_Name\": {\n          fontFamily: nameFontFamily,\n          fontStyle: nameFontStyle,\n          fontSize: nameFontSize,\n          fontWeight: nameFontWeight,\n          color: nameColor,\n        },\n\n        // PRICE\n        \"& .XProductDetails_Price\": {\n          fontFamily: priceFontFamily,\n          fontStyle: priceFontStyle,\n          fontSize: priceFontSize,\n          fontWeight: priceFontWeight,\n          color: priceColor,\n        },\n\n        // DISCOUNT\n        \"& .XProductDetails_Discount\": {\n          fontFamily: discountFontFamily,\n          fontStyle: discountFontStyle,\n          fontSize: discountFontSize,\n          fontWeight: discountFontWeight,\n          color: discountColor,\n          textDecoration: discountTextDecoration,\n        },\n\n        // REVIEWS\n        \"& .XProductDetails_Rating\": {\n          \"& .MuiRating-icon\": {\n            fontSize: starIconSize,\n          },\n          \"& .MuiRating-iconFilled\": {\n            color: starIconColor,\n          },\n          \"& .MuiRating-iconHover\": {\n            color: starIconColor,\n          },\n        },\n\n        // COLOR PICKER\n        \"& .XProductDetails_ColorPicker\": {\n          borderRadius: 0,\n\n          \"& .MuiToggleButton-root\": {\n            borderWidth: 0,\n            p: \"2px\",\n            bgcolor: \"transparent\",\n            width: colorPickerSize,\n            height: colorPickerSize,\n            borderRadius: \"50% !important\",\n\n            \"& .XProductDetails_ColorPicker_Color\": {\n              borderRadius: \"50%\",\n              border: \"1px solid #ddd !important\",\n            },\n\n            \"&.Mui-selected\": {\n              border: generateBorder(colorPickerBorder),\n            },\n\n            \"&:not(:first-of-type)\": {\n              ml: 1,\n            },\n          },\n        },\n\n        // TOGGLE BTN\n        \"& .MuiToggleButtonGroup-root.XProductDetails_ToggleBtn\": {\n          fontFamily: toggleFontFamily,\n          fontSize: toggleFontSize,\n          gap: toggleSpacing,\n          flexWrap: \"wrap\",\n          borderRadius: 0,\n\n          \"& .MuiToggleButton-root\": {\n            borderWidth: 0,\n            p: \"5px\",\n            bgcolor: toggleBgColor,\n            borderRadius: generateRadius(toggleRadius),\n            width: toggleWidth,\n            height: toggleHeight,\n            border: generateBorder(toggleBorder),\n            color: toggleTextColor,\n\n            \"&.Mui-selected\": {\n              border: generateBorder(toggleActiveBorder),\n              bgcolor: toggleActiveBgColor,\n              color: toggleActiveTextColor,\n            },\n          },\n        },\n\n        // SELECT OPTIONS\n        \"& .XProductDetails_SelectOption\": {\n          fontFamily: selectFontFamily,\n          fontSize: selectFontSize,\n          height: selectHeight,\n          width: selectWidth,\n          minWidth: 150,\n          border: generateBorder(selectBorder),\n          color: selectTextColor,\n\n          \"&.Mui-focused\": {\n            \"& fieldset\": { border: 0 },\n          },\n\n          \"& fieldset\": { border: 0 },\n        },\n\n        // ADD CART BTN\n        \"& .XProductDetails_AddToCart\": {\n          fontFamily: btnFontFamily,\n          bgcolor: btnBgColor,\n          color: btnTextColor,\n          fontSize: btnFontSize,\n          height: btnHeight,\n          width: btnWidth,\n          borderRadius: generateRadius(btnRadius),\n          border: generateBorder(btnBorder),\n          textTransform: \"none\",\n\n          \"&:hover\": {\n            bgcolor: btnHoverBgColor ?? btnBgColor,\n            color: btnHoverTextColor ?? btnTextColor,\n          },\n        },\n\n        // ADD CART BTN\n        // inputBtnHoverBgColor\n        // inputBtnHoverTextColor\n        \"& .XProductDetails_QtyInput\": {\n          bgcolor: inputContainerBgColor,\n          border: generateBorder(inputContainerBorder),\n          borderRadius: generateRadius(inputContainerRadius),\n          height: inputHeight,\n          width: inputWidth,\n          overflow: \"hidden\",\n\n          \"& .XProductDetails_QtyInput_Btn\": {\n            borderRadius: generateRadius(inputBtnRadius),\n            boxShadow: \"none\",\n            height: inputBtnSize,\n            width: inputBtnSize,\n            bgcolor: inputBtnBgColor,\n\n            \"&:not(.Mui-disabled)\": {\n              color: inputBtnTextColor,\n            },\n\n            \"&:hover\": {\n              bgcolor: inputBtnHoverBgColor,\n              color: inputBtnHoverTextColor,\n            },\n          },\n\n          \"& .XProductDetails_QtyInput_Field\": {\n            fontFamily: inputFontFamily,\n            fontSize: inputFontSize,\n            color: inputTextColor,\n            flex: 1,\n\n            \"& input\": {\n              textAlign: \"center\",\n            },\n\n            \"& fieldset\": {\n              border: generateBorder(inputBorder),\n            },\n          },\n        },\n      }}\n    >\n      {children}\n    </Stack>\n  );\n};\n\nexport default DetailsWrapper;\n","import * as React from \"react\";\nimport { Button, Fab, Stack, TextField } from \"@mui/material\";\nimport { AddRounded, RemoveRounded } from \"@mui/icons-material\";\n\nimport { TSetUrlParamsArgs } from \"../../../../hooks/useXoraia\";\nimport { IXProductDetailsProps } from \"../../../../utils/interfaces/containers/XProductDetails.interfaces\";\nimport { IArticleData } from \"../../../../utils/interfaces/common/XArticle.interfaces\";\nimport { useCart } from \"../../../../hooks/useCart\";\nimport { ICartItem } from \"../../../../utils/constants/dynamic/article\";\n\nconst QuantitySelector: React.FC<\n  IXProductDetailsProps & {\n    article: IArticleData;\n\n    onChange: (args: TSetUrlParamsArgs) => Promise<void>;\n\n    urlParams?: TSetUrlParamsArgs;\n  }\n> = ({\n  inputMode = \"minus_plus\",\n  detailsGap = \"10px\",\n  urlParams = {},\n  article,\n  onChange,\n}) => {\n  const { cart, setCart } = useCart();\n\n  const cartItem = cart.carts.find((e) => e.id === article.id);\n\n  let value =\n    urlParams && typeof urlParams.qty === \"number\"\n      ? urlParams.qty\n      : cartItem\n      ? cartItem.qty\n      : 0;\n\n  const isMax = article.isInfinite ? false : value >= article.qty;\n\n  if (!article.isInfinite && value > article.qty) value = article.qty;\n\n  return (\n    <Stack direction=\"row\" spacing={2} pt={detailsGap} mt={2}>\n      {inputMode === \"minus_plus\" && (\n        <Stack\n          direction=\"row\"\n          spacing={1}\n          className=\"XProductDetails_QtyInput\"\n          alignItems=\"center\"\n        >\n          <Fab\n            color=\"primary\"\n            aria-label=\"remove\"\n            className=\"XProductDetails_QtyInput_Btn\"\n            disabled={value === 0}\n            onClick={async () => {\n              await onChange({ qty: value - 1 });\n            }}\n          >\n            <RemoveRounded />\n          </Fab>\n          <TextField\n            hiddenLabel\n            type=\"number\"\n            inputProps={{\n              min: 0,\n              max: article.isInfinite ? undefined : article.qty,\n            }}\n            value={value}\n            onChange={async (e) => {\n              await onChange({ qty: parseInt(e.target.value ?? \"0\") });\n            }}\n            className=\"XProductDetails_QtyInput_Field\"\n            size=\"small\"\n            placeholder=\"1\"\n          />\n          <Fab\n            color=\"primary\"\n            aria-label=\"add\"\n            className=\"XProductDetails_QtyInput_Btn\"\n            disabled={isMax}\n            onClick={async () => {\n              await onChange({ qty: value + 1 });\n            }}\n          >\n            <AddRounded />\n          </Fab>\n        </Stack>\n      )}\n      <Button\n        className=\"XProductDetails_AddToCart\"\n        disabled={!cartItem && value === 0}\n        onClick={async () => {\n          setCart((old) => {\n            let carts: ICartItem[] = [...old.carts];\n\n            // NEW IN THE SHOPPING CART\n            if (!cartItem) {\n              carts.push({\n                ...article,\n                qty: value,\n                selectedOptions: { ...urlParams },\n              });\n            }\n\n            // EXISTING ELEMENT\n            else {\n              // IF WE SET THE QUANTITY TO 0 WE WANT TO REMOVE\n              if (value === 0) {\n                carts = carts.filter((e) => e.id !== article.id);\n              } else {\n                carts = carts.map((e) =>\n                  e.id === article.id\n                    ? {\n                        ...e,\n                        qty: value,\n                        selectedOptions: { ...urlParams },\n                      }\n                    : e\n                );\n              }\n            }\n\n            return { ...old, carts };\n          });\n        }}\n      >\n        {value === 0 && cartItem ? \"Retirer Au Panier\" : \"Ajouter Au Panier\"}\n      </Button>\n    </Stack>\n  );\n};\n\nexport default QuantitySelector;\n"]}