@riosst100/pwa-marketplace 2.7.7 → 2.7.9

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 (27) hide show
  1. package/i18n/en_US.json +4 -2
  2. package/i18n/id_ID.json +2 -0
  3. package/package.json +1 -1
  4. package/src/components/FavoriteSeller/AddToListButton/addToListButton.js +4 -2
  5. package/src/components/LinkToOtherStores/index.js +3 -3
  6. package/src/components/Seller/StoreLocationCard.js +29 -0
  7. package/src/components/SellerDetail/sellerDetail.js +53 -68
  8. package/src/components/SellerInformation/sellerInformation.js +28 -22
  9. package/src/components/SellerMegaMenu/sellerMegaMenu.js +27 -22
  10. package/src/components/SellerProducts/productContent.js +7 -6
  11. package/src/components/SellerReview/sellerReview.js +161 -123
  12. package/src/components/commons/Rating/index.js +34 -0
  13. package/src/overwrites/venia-ui/lib/components/AccountMenu/accountMenu.js +1 -1
  14. package/src/overwrites/venia-ui/lib/components/Breadcrumbs/breadcrumbs.module.css +2 -2
  15. package/src/overwrites/venia-ui/lib/components/CartPage/PriceSummary/priceSummary.module.css +6 -0
  16. package/src/overwrites/venia-ui/lib/components/CartPage/ProductListing/product.js +1 -1
  17. package/src/overwrites/venia-ui/lib/components/CartPage/ProductListingBySeller/productListingBySeller.js +12 -4
  18. package/src/overwrites/venia-ui/lib/components/CartPage/ProductListingBySeller/productListingBySeller.module.css +18 -0
  19. package/src/overwrites/venia-ui/lib/components/Header/header.js +4 -4
  20. package/src/overwrites/venia-ui/lib/components/Header/header.module.css +173 -0
  21. package/src/overwrites/venia-ui/lib/components/Main/main.module.css +1 -1
  22. package/src/overwrites/venia-ui/lib/components/MegaMenu/submenu.module.css +1 -1
  23. package/src/overwrites/venia-ui/lib/components/ProductFullDetail/CustomAttributes/customAttributes.js +1 -1
  24. package/src/overwrites/venia-ui/lib/components/ProductFullDetail/productFullDetail.js +117 -70
  25. package/src/overwrites/venia-ui/lib/components/ProductFullDetail/productFullDetail.module.css +37 -0
  26. package/src/overwrites/venia-ui/lib/components/ProductImageCarousel/carousel.module.css +2 -1
  27. package/src/talons/FavoriteSeller/AddToListButton/useAddToFavoriteListButton.js +4 -1
@@ -0,0 +1,173 @@
1
+ .root {
2
+ composes: auto-cols-fr from global;
3
+ composes: bg-header from global;
4
+ composes: border-b from global;
5
+ composes: border-subtle from global;
6
+ composes: grid from global;
7
+ composes: h-auto from global;
8
+ composes: justify-center from global;
9
+ composes: px-4 from global;
10
+ composes: top-0 from global;
11
+ composes: sticky from global;
12
+ composes: w-full from global;
13
+ composes: z-header from global;
14
+
15
+ composes: lg_px-8 from global;
16
+ }
17
+
18
+ .switchers {
19
+ composes: auto-cols-max from global;
20
+ composes: grid from global;
21
+ composes: grid-flow-col from global;
22
+ composes: justify-end from global;
23
+ /* composes: max-w-site from global; */
24
+ composes: mx-auto from global;
25
+ composes: relative from global;
26
+ composes: w-full from global;
27
+ composes: z-menu from global;
28
+ }
29
+
30
+ .switchersContainer {
31
+ composes: bg-gray-100 from global;
32
+ composes: hidden from global;
33
+ composes: px-8 from global;
34
+ composes: w-full from global;
35
+ }
36
+
37
+ /* Large screen styles */
38
+ .switchersContainer {
39
+ composes: sm_block from global;
40
+ }
41
+
42
+ .open {
43
+ composes: root;
44
+ }
45
+
46
+ .closed {
47
+ composes: root;
48
+ }
49
+
50
+ .toolbar {
51
+ composes: border-0 from global;
52
+ composes: content-center from global;
53
+ composes: gap-x-4 from global;
54
+ composes: grid from global;
55
+ composes: grid-cols-3 from global;
56
+ composes: grid-rows-header from global;
57
+ composes: h-14 from global;
58
+ composes: items-center from global;
59
+ composes: justify-self-center from global;
60
+ composes: max-w-site from global;
61
+ composes: w-full from global;
62
+ composes: z-header from global;
63
+
64
+ composes: lg_h-20 from global;
65
+ composes: lg_gap-x-8 from global;
66
+ composes: lg_grid-cols-12 from global;
67
+ }
68
+
69
+ .logo {
70
+ height: var(--height);
71
+ width: var(--width);
72
+ }
73
+
74
+ .primaryActions {
75
+ composes: col-start-1 from global;
76
+ composes: grid from global;
77
+ composes: grid-flow-col from global;
78
+ composes: justify-self-start from global;
79
+ composes: row-start-1 from global;
80
+ composes: self-center from global;
81
+ }
82
+
83
+ .logoContainer {
84
+ composes: col-start-2 from global;
85
+ composes: justify-self-center from global;
86
+
87
+ composes: lg_col-end-3 from global;
88
+ composes: lg_col-start-1 from global;
89
+ composes: lg_justify-self-start from global;
90
+ composes: lg_mr-8 from global;
91
+ composes: lg_row-start-1 from global;
92
+ }
93
+
94
+ .secondaryActions {
95
+ composes: col-start-3 from global;
96
+ composes: grid from global;
97
+ composes: grid-flow-col from global;
98
+ composes: items-center from global;
99
+ composes: justify-items-end from global;
100
+ composes: justify-self-end from global;
101
+ composes: w-max from global;
102
+
103
+ composes: lg_col-end-13 from global;
104
+ composes: lg_col-start-10 from global;
105
+ composes: lg_gap-x-4 from global;
106
+ }
107
+
108
+ .searchFallback {
109
+ composes: flex from global;
110
+ composes: justify-center from global;
111
+ composes: mb-2 from global;
112
+ composes: px-4 from global;
113
+ }
114
+
115
+ .input {
116
+ composes: input from '../TextInput/textInput.module.css';
117
+
118
+ @apply max-w-sm;
119
+ }
120
+
121
+ .loader,
122
+ .loaderBefore,
123
+ .loaderAfter {
124
+ --dot-size: 2em;
125
+ --dot-font-size: 6px;
126
+ --dot-shadow-offset: calc(-1 * var(--dot-size) + var(--dot-font-size));
127
+
128
+ composes: rounded-full from global;
129
+ width: var(--dot-size);
130
+ height: var(--dot-size);
131
+ animation: pulse 1.8s infinite ease-in-out;
132
+ animation-fill-mode: both;
133
+ }
134
+
135
+ .loader {
136
+ composes: mb-0 from global;
137
+ composes: mx-auto from global;
138
+ composes: relative from global;
139
+ composes: text-subtle from global;
140
+ font-size: var(--dot-font-size);
141
+ margin-top: var(--dot-shadow-offset);
142
+ transform: translateZ(0);
143
+ animation-delay: -0.16s;
144
+ }
145
+
146
+ .loaderBefore,
147
+ .loaderAfter {
148
+ composes: content-empty from global;
149
+ composes: absolute from global;
150
+ composes: top-0 from global;
151
+ }
152
+
153
+ .loaderBefore {
154
+ composes: left-[-3.5em] from global;
155
+ composes: text-gray-100 from global;
156
+ animation-delay: -0.32s;
157
+ }
158
+
159
+ .loaderAfter {
160
+ composes: left-[3.5em] from global;
161
+ composes: text-gray-600 from global;
162
+ }
163
+
164
+ @keyframes pulse {
165
+ 0%,
166
+ 80%,
167
+ 100% {
168
+ box-shadow: 0 var(--dot-size) 0 -1.3em;
169
+ }
170
+ 40% {
171
+ box-shadow: 0 var(--dot-size) 0 0;
172
+ }
173
+ }
@@ -11,7 +11,7 @@
11
11
 
12
12
  .page {
13
13
  composes: md_max-w-screen-md from global;
14
- composes: lg_max-w-[1210px] from global;
14
+ composes: lg_max-w-[1300px] from global;
15
15
  composes: mx-auto from global;
16
16
  composes: my-0 from global;
17
17
  composes: px-[15px] from global;
@@ -11,7 +11,7 @@
11
11
 
12
12
  .submenuContainer {
13
13
  composes: w-full from global;
14
- composes: max-w-[1210px] from global;
14
+ composes: max-w-[1300px] from global;
15
15
  composes: mx-[auto] from global;
16
16
  composes: gap-[15px] from global;
17
17
  composes: max-h-[50vh] from global;
@@ -24,7 +24,7 @@ const CustomAttributes = props => {
24
24
  const attributeContent = (
25
25
  <li
26
26
  key={currentAttribute.attribute_metadata.uid}
27
- className={cn(classes.listItem, '!text-[14px] py-1')}
27
+ className={cn(classes.listItem, '!text-[14px] py-2')}
28
28
  >
29
29
  <AttributeType
30
30
  showLabels={showLabels}
@@ -3,6 +3,7 @@ import { FormattedMessage, useIntl } from 'react-intl';
3
3
  import { arrayOf, bool, number, shape, string } from 'prop-types';
4
4
  import { Form } from 'informed';
5
5
  import { Info } from 'react-feather';
6
+ import { useToasts } from '@magento/peregrine/lib';
6
7
 
7
8
  import Price from '@magento/venia-ui/lib/components/Price';
8
9
  import { useProductFullDetail } from '@magento/peregrine/lib/talons/ProductFullDetail/useProductFullDetail';
@@ -22,7 +23,7 @@ import cn from 'classnames';
22
23
  import Tabs from '@riosst100/pwa-marketplace/src/components/commons/Tabs';
23
24
  import ProductReviews from './components/productReview';
24
25
  import RichText from '@magento/venia-ui/lib/components/RichText';
25
- import { Star1, Verify, Sms, Message, Shop } from 'iconsax-react';
26
+ import { Star1, Verify, Sms, Message, Shop, ArrowUp2 } from 'iconsax-react';
26
27
  import { Link } from "react-router-dom";
27
28
  import Divider from '@riosst100/pwa-marketplace/src/components/Divider';
28
29
 
@@ -86,7 +87,7 @@ const ProductFullDetail = props => {
86
87
  const {
87
88
  breadcrumbCategoryId,
88
89
  errorMessage,
89
- handleAddToCart,
90
+ handleAddToCart: originalHandleAddToCart,
90
91
  handleSelectionChange,
91
92
  isOutOfStock,
92
93
  isEverythingOutOfStock,
@@ -100,7 +101,9 @@ const ProductFullDetail = props => {
100
101
  wishlistButtonProps,
101
102
  sellerDetails
102
103
  } = talonProps;
103
-
104
+
105
+ const [, { addToast }] = useToasts();
106
+
104
107
  const { formatMessage } = useIntl();
105
108
 
106
109
  const classes = useStyle(defaultClasses, props.classes);
@@ -216,12 +219,11 @@ const ProductFullDetail = props => {
216
219
  );
217
220
  // Error message for screen reader
218
221
  const cartActionContent = isSupportedProductType ? (
219
- <section className={cn(classes.actButton, 'flex gap-x-[20px] px-[12px] py-0')}>
222
+ <section className={cn(classes.actButton, 'justify-between flex gap-x-[20px] px-[15px] py-0')}>
220
223
  <RFQ
221
224
  disabled={isAddToCartDisabled}
222
- classes={{ rfqButton: classes.rfqButton }}
225
+ classes={{ rfqButton: cn(classes.rfqButton, "w-full") }}
223
226
  />
224
-
225
227
  <Button
226
228
  data-cy="ProductFullDetail-addToCartButton"
227
229
  disabled={isAddToCartDisabled}
@@ -237,7 +239,7 @@ const ProductFullDetail = props => {
237
239
  }
238
240
  classes={{
239
241
  rootClass: '!px-0 !py-3',
240
- content: 'normal-case font-medium text-[14px]'
242
+ content: 'w-full normal-case font-medium text-[14px]'
241
243
  }}
242
244
  priority="high"
243
245
  type="submit"
@@ -291,9 +293,9 @@ const ProductFullDetail = props => {
291
293
  </div>
292
294
  );
293
295
 
294
- const ProductMoreInfo = ({ className }) => (
296
+ const ProductMoreInfo = () => (
295
297
  <>
296
- <div className={cn(contentContainerClass, className)}>
298
+ <div className={cn(contentContainerClass, classes.contentContainerTabOverride)}>
297
299
  <CustomAttributes
298
300
  customAttributes={customAttributesDetails.list}
299
301
  classes={{ list: classes.customAttributesList }}
@@ -385,11 +387,14 @@ const ProductFullDetail = props => {
385
387
  return attr.entered_attribute_value?.value || "";
386
388
  };
387
389
 
388
-
389
390
  const setNameValue = getAttributeValue(customAttributesDetails, "card_set", true);
390
- const conditionValue = getAttributeValue(customAttributesDetails, "card_condition");
391
-
392
- const ExpandableSection = ({ children, maxHeight = 280 }) => {
391
+ const cardNameValue = getAttributeValue(customAttributesDetails, "card_name", true);
392
+ const cardNumberValue = getAttributeValue(customAttributesDetails, "card_number", true);
393
+ const rarityValue = getAttributeValue(customAttributesDetails, "card_rarity", true);
394
+ const featureValue = getAttributeValue(customAttributesDetails, "card_feature", true);
395
+ const conditionValue = getAttributeValue(customAttributesDetails, "card_condition", true);
396
+ const foilValue = getAttributeValue(customAttributesDetails, "card_foil", true);
397
+ const ExpandableSection = ({ children, maxHeight = 480 }) => {
393
398
  const [expanded, setExpanded] = useState(false);
394
399
  const [showButton, setShowButton] = useState(false);
395
400
  const contentRef = useRef(null);
@@ -417,50 +422,54 @@ const ProductFullDetail = props => {
417
422
  const isDesktop = typeof window !== "undefined" && window.innerWidth >= 769;
418
423
 
419
424
  return (
420
- <div className="relative">
421
- <div
422
- ref={contentRef}
423
- style={{
424
- maxHeight:
425
- isDesktop && showButton && !expanded
426
- ? `${maxHeight}px`
427
- : "none",
428
- overflow: "hidden",
429
- transition: "max-height 0.3s ease"
430
- }}
431
- >
432
- {children}
433
- </div>
434
-
435
- {isDesktop && !expanded && showButton && (
436
- <div className="absolute bottom-0 left-0 w-full h-16 bg-gradient-to-t to-transparent pointer-events-none" />
437
- )}
425
+ <>
426
+ <div className="relative">
427
+ <div
428
+ ref={contentRef}
429
+ style={{
430
+ maxHeight:
431
+ isDesktop && showButton && !expanded
432
+ ? `${maxHeight}px`
433
+ : "none",
434
+ overflow: "hidden",
435
+ transition: "max-height 0.3s ease"
436
+ }}
437
+ >
438
+ {children}
439
+ </div>
438
440
 
441
+ {isDesktop && !expanded && showButton && (
442
+ <div className={cn("absolute bottom-0 left-0 w-full h-16 bg-gradient-to-t to-transparent pointer-events-none", classes.productDetailsMaxContent)}/>
443
+ )}
444
+ </div>
439
445
  {isDesktop && showButton && (
440
446
  <button
441
447
  type="button"
442
448
  onClick={() => setExpanded(!expanded)}
443
- className="mt-2 text-blue-600 font-medium underline focus:outline-none"
449
+ className="mt-0 text-[14px] text-blue-600 font-medium underline focus:outline-none"
444
450
  >
445
- {expanded ? "Show Less" : "Read More"}
451
+ {expanded ? "Show Less" : "Read More"} <ArrowUp2 size="14" style={{
452
+ "display": "inline-block",
453
+ "marginLeft": "5px"
454
+ }} className={cn(expanded ? 'rotate-0 ' : 'rotate-180', 'transition-all stroke-current')} variant="Outline" />
446
455
  </button>
447
456
  )}
448
- </div>
457
+ </>
449
458
  );
450
459
  };
451
460
 
452
461
  const dataTabs =
453
462
  [
463
+ {
464
+ id: 'product-more-info',
465
+ title: 'Product Information',
466
+ content: <ProductMoreInfo />
467
+ },
454
468
  {
455
469
  id: 'product-detail',
456
- title: 'Description',
470
+ title: 'Product Description',
457
471
  content: <ProductDescription />
458
472
  },
459
- // {
460
- // id: 'product-more-info',
461
- // title: 'Details',
462
- // content: <ProductMoreInfo />
463
- // },
464
473
  {
465
474
  id: 'product-tnc',
466
475
  title: 'Term & Conditions',
@@ -527,6 +536,39 @@ const ProductFullDetail = props => {
527
536
  </div>
528
537
  ) : null;
529
538
 
539
+ const handleAddToCart = async (...args) => {
540
+ try {
541
+ await originalHandleAddToCart(...args);
542
+ addToast({
543
+ type: 'success',
544
+ message: formatMessage({
545
+ id: 'productFullDetail.addToCartSuccess',
546
+ defaultMessage: 'Product successfully added to cart!'
547
+ })
548
+ });
549
+ } catch (e) {
550
+ addToast({
551
+ type: 'error',
552
+ message: formatMessage({
553
+ id: 'productFullDetail.addToCartError',
554
+ defaultMessage: 'Failed to add product to cart.'
555
+ })
556
+ });
557
+ }
558
+ };
559
+
560
+ useEffect(() => {
561
+ const toastRoot = document.getElementById('toast-root');
562
+ if (toastRoot) {
563
+ toastRoot.classList.add('toast-center-bottom');
564
+ }
565
+ return () => {
566
+ if (toastRoot) {
567
+ toastRoot.classList.remove('toast-center-bottom');
568
+ }
569
+ };
570
+ }, []);
571
+
530
572
  return (
531
573
  <Fragment>
532
574
  {breadcrumbs}
@@ -551,32 +593,42 @@ const ProductFullDetail = props => {
551
593
  aria-live="polite"
552
594
  className={cn(
553
595
  classes.productName,
554
- '!font-medium leading-[normal] mb-4 line-clamp-2 !text-[1.5rem]'
596
+ '!font-medium leading-[1] mb-1.5 line-clamp-2 !text-[1.5rem]'
555
597
  )}
556
598
  data-cy="ProductFullDetail-productName"
557
599
  >
558
600
  {productDetails.name}
559
601
  </h1>
560
- {setNameValue && (
561
- <div className="text-gray-400 text-sm mb-2">{setNameValue}</div>
562
- )}
563
602
  </div>
564
- <section className="bottom_right-container block sm_flex md_flex lg_flex xl_flex 2xl_flex gap-[7px]">
565
- <section className='right_left-container'>
566
- <ExpandableSection maxHeight={280}>
567
- <div
568
- className={cn(
569
- 'product_short_description',
570
- 'mb-xs',
603
+ <section className="bottom_right-container justify-center gap-x-6 block sm_flex md_flex lg_flex xl_flex 2xl_flex gap-[7px]">
604
+ <section className='right_left-container w-full'>
605
+ <ExpandableSection>
606
+ <div className="text-sm leading-6 leading-[2.5rem]">
607
+ {setNameValue && (
608
+ <p><strong>Set Name:</strong> {setNameValue}</p>
609
+ )}
610
+ {cardNameValue && (
611
+ <p><strong>Card Name:</strong> {cardNameValue}</p>
612
+ )}
613
+ {cardNumberValue && (
614
+ <p><strong>Card Number:</strong> {cardNumberValue}</p>
615
+ )}
616
+ {rarityValue && (
617
+ <p><strong>Rarity:</strong> {rarityValue}</p>
618
+ )}
619
+ {featureValue && (
620
+ <p><strong>Feature:</strong> {featureValue}</p>
621
+ )}
622
+ {conditionValue && (
623
+ <p><strong>Condition:</strong> {conditionValue}</p>
624
+ )}
625
+ {foilValue && (
626
+ <p><strong>Foil/Non Foil:</strong> {foilValue}</p>
571
627
  )}
572
- >
573
- <p className="font-bold text-[15px] mb-3">Product Details</p>
574
- {shortDescription}
575
- <ProductMoreInfo className="!mt-0 lg:!mt-0 !p-0" />
576
628
  </div>
577
629
  </ExpandableSection>
578
630
  </section>
579
- <section className='right_right-container'>
631
+ <section className='right_right-container w-full'>
580
632
  <div className={cn('product_purchase-section', 'border border-[lightgray] rounded-[10px] mb-[15px]')}>
581
633
  <div
582
634
  className={cn(
@@ -584,13 +636,8 @@ const ProductFullDetail = props => {
584
636
  'flex justify-between flex-wrap gap-y-5'
585
637
  )}
586
638
  >
587
- <div className='flex flex-col gap-y-3 pl-[1rem] pt-[1.5rem]'>
588
- <div className='flex flex-col gap-y-3'>
589
- {conditionValue && (
590
- <div className="text-gray-600 text-sm mb-1">
591
- {conditionValue}
592
- </div>
593
- )}
639
+ <div className='flex flex-col gap-y-2 pl-[1rem] pt-[1rem]'>
640
+ <div className='flex flex-col gap-y-1'>
594
641
  <p
595
642
  data-cy="ProductFullDetail-productPrice"
596
643
  className={cn(
@@ -613,7 +660,7 @@ const ProductFullDetail = props => {
613
660
  <div className='flex flex-col xs_items-center md_items-start gap-[6px] relative'>
614
661
  <div className="gap-x-[10px] gap-y-1 flex xs_flex-col md_flex-row xs_items-center md_items-start relative">
615
662
  <Link to={"/seller/"+sellerDetails.url_key} class="flex items-center justify-center gap-[5px] py-1 relative bg-white">
616
- <div class="flex items-center justify-center gap-[10px] relative">
663
+ <div class="flex items-center justify-center gap-[5px] relative">
617
664
  <p>Sold by</p>
618
665
  <div class="relative xs_hidden lg_flex w-fit font-medium text-[#f76b1c] text-[14px] tracking-[0] leading-[20px] whitespace-nowrap">
619
666
  {sellerDetails ? sellerDetails.name : ''}
@@ -633,7 +680,7 @@ const ProductFullDetail = props => {
633
680
  { options &&
634
681
  <section className={classes.options}>{options}</section>
635
682
  }
636
- <section className={cn(classes.quantity, 'py-xs !border-none')}>
683
+ <section className={cn(classes.quantity, 'pb-[20px] pt-[10px] !border-none')}>
637
684
  <div className='product_group-actions flex gap-x-[18px] gap-y-4 pl-[1rem] items-center mt-2 lg_mt-0 mb-6 lg_mb-0'>
638
685
  <QuantityStepper
639
686
  min={1}
@@ -657,9 +704,12 @@ const ProductFullDetail = props => {
657
704
  </div>
658
705
  </section>
659
706
  </div>
707
+ <div className={cn('product_otherlink-section', 'border border-[lightgray] rounded-[10px] mb-[15px]')}>
708
+ <LinkToOtherStores productDetails={productDetails} />
709
+ </div>
660
710
  <section>
661
711
  <div
662
- className="text-center pt-3 pb-3 cursor-pointer border border-[lightgray] rounded-[10px] mb-[15px]"
712
+ className="text-center pt-3 pb-3 cursor-pointer border border-[lightgray] rounded-[10px]"
663
713
  onClick={() => {
664
714
  const section = document.getElementById("cross-seller-section");
665
715
  if (section) {
@@ -667,7 +717,7 @@ const ProductFullDetail = props => {
667
717
  }
668
718
  }}
669
719
  >
670
- <span className="font-bold underline">
720
+ <span className="font-bold underline text-[14px]">
671
721
  View {totalListings} Other Listings
672
722
  </span>
673
723
  <p className="text-sm text-gray-600">
@@ -675,9 +725,6 @@ const ProductFullDetail = props => {
675
725
  </p>
676
726
  </div>
677
727
  </section>
678
- <div className={cn('product_otherlink-section', 'border border-[lightgray] rounded-[10px]')}>
679
- <LinkToOtherStores productDetails={productDetails} />
680
- </div>
681
728
  </section>
682
729
  </section>
683
730
  </section>
@@ -4,6 +4,15 @@
4
4
  composes: lg_items-start from global;
5
5
  composes: gap-x-10 from global;
6
6
  }
7
+ .productDetailsMaxContent{
8
+ background: linear-gradient(0deg,#fff 20px,#fff0);
9
+ position: absolute;
10
+ bottom: 0;
11
+ left: 0;
12
+ width: 100%;
13
+ height: 30%;
14
+ content: "";
15
+ }
7
16
  .rfqButton {
8
17
  padding: 10px 0px;
9
18
  }
@@ -12,6 +21,9 @@
12
21
  }
13
22
  .customAttributesList {
14
23
  padding-left: 0 !important;
24
+ column-count: 2;
25
+ column-gap: 2rem;
26
+ list-style: none;
15
27
  }
16
28
  .contentContainerTabOverride {
17
29
  max-width: none !important;
@@ -48,6 +60,12 @@
48
60
  grid-area: title; */
49
61
  }
50
62
 
63
+ .productDetailTabs {
64
+ border-bottom: 1px solid #d3d3d3;
65
+ padding-bottom: 10px;
66
+ margin-bottom: 15px;
67
+ }
68
+
51
69
  .productName {
52
70
  composes: font-medium from global;
53
71
  composes: text-colorDefault from global;
@@ -236,4 +254,23 @@
236
254
  .leftContainer {
237
255
  composes: max-w-[100%] from global;
238
256
  }
257
+ }
258
+
259
+ /* productFullDetail.module.css */
260
+ :global(#toast-root).toast-center-bottom {
261
+ position: fixed !important;
262
+ left: 50% !important;
263
+ bottom: 2rem !important;
264
+ right: auto !important;
265
+ top: auto !important;
266
+ transform: translateX(-50%) !important;
267
+ z-index: 9999 !important;
268
+ margin: 0 !important;
269
+ max-width: 90vw !important;
270
+ min-width: 320px !important;
271
+ width: auto !important;
272
+ display: flex !important;
273
+ flex-direction: column !important;
274
+ align-items: center !important;
275
+ justify-content: flex-end !important;
239
276
  }
@@ -22,6 +22,7 @@
22
22
  }
23
23
 
24
24
  .imageContainer {
25
+ composes: h-full from global;
25
26
  composes: w-full from global;
26
27
  grid-area: 1 / 1 / 2 / 4;
27
28
  }
@@ -37,7 +38,7 @@
37
38
  }
38
39
 
39
40
  .carouselContainer {
40
- composes: flex items-center justify-center p-4 bg-[#f7f7f8] rounded-md max-h-[660px] from global;
41
+ composes: flex items-center justify-center p-4 bg-[#f7f7f8] rounded-md h-[540px] max-h-[540px] from global;
41
42
  }
42
43
 
43
44
  .currentImage_placeholder {
@@ -142,7 +142,10 @@ export const useAddToFavoriteListButton = props => {
142
142
 
143
143
  return {
144
144
  buttonProps,
145
- buttonText: props.buttonText && props.buttonText(isSelected),
145
+ buttonText:
146
+ typeof props.buttonText === 'function'
147
+ ? props.buttonText(isSelected)
148
+ : props.buttonText,
146
149
  // customerFavoriteSellers,
147
150
  errorToastProps,
148
151
  handleClick,