@landtrustinc/design-system 1.2.21 → 1.2.23

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.
package/dist/index.js CHANGED
@@ -65,6 +65,8 @@ __export(src_exports, {
65
65
  ReviewCard: () => ReviewCard_default,
66
66
  Reviews: () => Reviews_default,
67
67
  ReviewsShowcase: () => ReviewsShowcase_default,
68
+ ScrollingCarousel: () => ScrollingCarousel,
69
+ ScrollingCarouselStep: () => ScrollingCarouselStep,
68
70
  Select: () => Select,
69
71
  Spinner: () => Spinner_default2,
70
72
  StarRating: () => StarRating_default,
@@ -3716,12 +3718,12 @@ var Button = import_react6.default.forwardRef(
3716
3718
  isLoading = false,
3717
3719
  className = "",
3718
3720
  labelStyleOverrides = import_react5.css``,
3719
- icon,
3721
+ icon: icon2,
3720
3722
  ...props
3721
3723
  }, ref) => {
3722
3724
  const componentType = Component === "button" ? type : void 0;
3723
3725
  const sizeKey = `size${(0, import_lodash.upperFirst)(size)}`;
3724
- const isIconOnly = icon && !children;
3726
+ const isIconOnly = icon2 && !children;
3725
3727
  return /* @__PURE__ */ (0, import_jsx_runtime208.jsxs)(
3726
3728
  Component,
3727
3729
  {
@@ -3736,7 +3738,7 @@ var Button = import_react6.default.forwardRef(
3736
3738
  isIconOnly && size === "lg" && styles.iconOnlyLg,
3737
3739
  isIconOnly && size !== "lg" && styles.iconOnly,
3738
3740
  (isLoading || disabled) && styles.disabled,
3739
- icon && children && styles.withIcon
3741
+ icon2 && children && styles.withIcon
3740
3742
  ],
3741
3743
  ...props,
3742
3744
  onClick: (e) => {
@@ -3748,7 +3750,7 @@ var Button = import_react6.default.forwardRef(
3748
3750
  (_a = props.onClick) == null ? void 0 : _a.call(props, e);
3749
3751
  },
3750
3752
  children: [
3751
- icon,
3753
+ icon2,
3752
3754
  children && /* @__PURE__ */ (0, import_jsx_runtime208.jsx)("span", { css: [labelStyles(!isLoading), labelStyleOverrides], children }),
3753
3755
  isLoading && /* @__PURE__ */ (0, import_jsx_runtime208.jsx)(Spinner_default2, { css: spinnerStyles2(variant) })
3754
3756
  ]
@@ -5542,8 +5544,8 @@ var useWidgetContext = () => {
5542
5544
  return ctx;
5543
5545
  };
5544
5546
  var WidgetTrigger = () => {
5545
- const { expanded, toggle, triggerRef, icon, expandedIcon } = useWidgetContext();
5546
- const currentIcon = expanded ? expandedIcon : icon;
5547
+ const { expanded, toggle, triggerRef, icon: icon2, expandedIcon } = useWidgetContext();
5548
+ const currentIcon = expanded ? expandedIcon : icon2;
5547
5549
  return /* @__PURE__ */ (0, import_jsx_runtime223.jsx)(import_jsx_runtime223.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime223.jsx)(
5548
5550
  Button_default,
5549
5551
  {
@@ -5574,7 +5576,7 @@ var WidgetPanel = ({ className, style, children }) => {
5574
5576
  };
5575
5577
  var WidgetRoot = ({
5576
5578
  ariaLabel,
5577
- icon = "Plus",
5579
+ icon: icon2 = "Plus",
5578
5580
  expandedIcon = "Xmark",
5579
5581
  defaultExpanded = false,
5580
5582
  expanded,
@@ -5637,11 +5639,11 @@ var WidgetRoot = ({
5637
5639
  expanded: isExpanded,
5638
5640
  toggle,
5639
5641
  triggerRef,
5640
- icon,
5642
+ icon: icon2,
5641
5643
  expandedIcon,
5642
5644
  panelWidth: panelWidth != null ? panelWidth : 480
5643
5645
  }),
5644
- [expandedIcon, icon, isExpanded, panelWidth, toggle]
5646
+ [expandedIcon, icon2, isExpanded, panelWidth, toggle]
5645
5647
  );
5646
5648
  return /* @__PURE__ */ (0, import_jsx_runtime223.jsx)(
5647
5649
  Box_default,
@@ -7876,55 +7878,686 @@ var Navigation = ({
7876
7878
  };
7877
7879
  var Navigation_default = Navigation;
7878
7880
 
7881
+ // src/ScrollingCarousel/components/ScrollingCarouselStep.tsx
7882
+ var import_react48 = require("react");
7883
+ var import_react_intersection_observer = require("react-intersection-observer");
7884
+
7885
+ // src/ScrollingCarousel/context/CarouselContext.tsx
7886
+ var import_react46 = __toESM(require("react"));
7887
+ var CarouselContext = import_react46.default.createContext(
7888
+ null
7889
+ );
7890
+
7891
+ // src/ScrollingCarousel/ScrollingCarousel.styles.ts
7892
+ var import_react47 = require("@emotion/react");
7893
+ var carouselRoot = import_react47.css`
7894
+ position: relative;
7895
+ `;
7896
+ var carousel = import_react47.css`
7897
+ display: flex;
7898
+ overflow-y: hidden;
7899
+ overflow-x: scroll;
7900
+ scroll-snap-type: x mandatory;
7901
+ -ms-overflow-style: none;
7902
+ scrollbar-width: none;
7903
+
7904
+ &::-webkit-scrollbar {
7905
+ display: none;
7906
+ }
7907
+ `;
7908
+ var step = import_react47.css`
7909
+ scroll-snap-align: center;
7910
+ flex-basis: 100%;
7911
+ flex-shrink: 0;
7912
+
7913
+ &:last-child {
7914
+ margin-right: 0;
7915
+ }
7916
+
7917
+ @media (min-width: 768px) {
7918
+ flex-basis: 100%;
7919
+ }
7920
+ `;
7921
+ var controls = (position2) => import_react47.css`
7922
+ ${(position2 === "left-right" || position2 === "top-right") && `
7923
+ display: none;
7924
+
7925
+ @media (min-width: 768px) {
7926
+ display: block;
7927
+ }
7928
+ `}
7929
+ `;
7930
+ var iconWrapper = import_react47.css`
7931
+ display: flex;
7932
+ width: var(--spacing-7);
7933
+ height: var(--spacing-7);
7934
+ border-radius: 50%;
7935
+ background: var(--color-base-white);
7936
+ align-items: center;
7937
+ justify-content: center;
7938
+ box-shadow: var(--shadow-md);
7939
+ `;
7940
+ var button = (position2) => import_react47.css`
7941
+ background: transparent;
7942
+ border-color: transparent;
7943
+ outline: none;
7944
+ cursor: pointer;
7945
+ z-index: 15;
7946
+ position: absolute;
7947
+ opacity: 0.9;
7948
+ transition: transform 0.3s ease, opacity 0.3s ease;
7949
+
7950
+ ${position2 === "left-right" && `
7951
+ top: calc(50% - (var(--spacing-12) / 2));
7952
+ `}
7953
+
7954
+ ${position2 === "bottom" && `
7955
+ top: calc(100% + var(--spacing-4));
7956
+
7957
+ @media (min-width: 768px) {
7958
+ top: calc(100% + var(--spacing-8));
7959
+ }
7960
+ `}
7961
+
7962
+ ${position2 === "top-right" && `
7963
+ top: calc(-1 * var(--spacing-24));
7964
+ `}
7965
+
7966
+ ${position2 === "inner-bottom" && `
7967
+ bottom: calc(-1 * var(--spacing-1));
7968
+ `}
7969
+ `;
7970
+ var buttonLeft = (position2) => import_react47.css`
7971
+ ${button(position2)}
7972
+
7973
+ ${position2 === "left-right" && `
7974
+ left: 0;
7975
+ `}
7976
+
7977
+ ${position2 === "bottom" && `
7978
+ left: calc(50% - var(--spacing-14));
7979
+ `}
7980
+
7981
+ ${position2 === "top-right" && `
7982
+ right: 60px;
7983
+ padding: 0;
7984
+ `}
7985
+
7986
+ ${position2 === "inner-bottom" && `
7987
+ left: calc(50% - var(--spacing-16));
7988
+ `}
7989
+ `;
7990
+ var customButtonLeft = (position2) => import_react47.css`
7991
+ ${button(position2)}
7992
+
7993
+ ${position2 === "left-right" && `
7994
+ left: 0;
7995
+ `}
7996
+
7997
+ ${position2 === "bottom" && `
7998
+ left: calc(50% - var(--spacing-14));
7999
+ `}
8000
+
8001
+ ${position2 === "top-right" && `
8002
+ right: var(--spacing-10);
8003
+ padding: 0;
8004
+ `}
8005
+
8006
+ ${position2 === "inner-bottom" && `
8007
+ left: calc(50% - var(--spacing-16));
8008
+ `}
8009
+ `;
8010
+ var buttonRight = (position2) => import_react47.css`
8011
+ ${button(position2)}
8012
+
8013
+ ${position2 === "left-right" && `
8014
+ right: 0;
8015
+ `}
8016
+
8017
+ ${position2 === "bottom" && `
8018
+ right: calc(50% - var(--spacing-14));
8019
+ `}
8020
+
8021
+ ${position2 === "top-right" && `
8022
+ right: 0;
8023
+ padding: 0;
8024
+ `}
8025
+
8026
+ ${position2 === "inner-bottom" && `
8027
+ right: calc(50% - var(--spacing-16));
8028
+ `}
8029
+ `;
8030
+ var icon = import_react47.css`
8031
+ width: var(--spacing-3);
8032
+ height: var(--spacing-3);
8033
+ color: var(--color-base-black);
8034
+ `;
8035
+ var dots = import_react47.css`
8036
+ position: absolute;
8037
+ bottom: var(--spacing-2);
8038
+ left: 0;
8039
+ right: 0;
8040
+ z-index: 10;
8041
+ display: flex;
8042
+ align-items: center;
8043
+ justify-content: center;
8044
+ `;
8045
+ var dotsInner = import_react47.css`
8046
+ display: flex;
8047
+ overflow: hidden;
8048
+ `;
8049
+ var dot = (dotsColor) => import_react47.css`
8050
+ position: relative;
8051
+ flex-shrink: 0;
8052
+ flex-grow: 0;
8053
+ transition: transform 500ms;
8054
+ background-color: transparent;
8055
+ border: 0;
8056
+ display: flex;
8057
+ align-items: center;
8058
+ justify-content: center;
8059
+ padding: 0;
8060
+ cursor: pointer;
8061
+
8062
+ &::after {
8063
+ content: '';
8064
+ display: block;
8065
+ position: absolute;
8066
+ top: 50%;
8067
+ left: 50%;
8068
+ height: 8px;
8069
+ width: 8px;
8070
+ border-radius: 50%;
8071
+ transition: opacity 500ms, transform 500ms;
8072
+ opacity: 0.75;
8073
+ transform: translate(-50%, -50%);
8074
+
8075
+ ${dotsColor === "light" && `
8076
+ background-color: var(--color-base-white);
8077
+ `}
8078
+
8079
+ ${dotsColor === "dark" && `
8080
+ background-color: var(--color-base-black);
8081
+ `}
8082
+
8083
+ ${dotsColor === "neutral" && `
8084
+ background-color: var(--color-neutral-500);
8085
+ `}
8086
+ }
8087
+ `;
8088
+ var dotDistance2 = import_react47.css`
8089
+ &::after {
8090
+ transform: translate(-50%, -50%) scale(0.9);
8091
+ }
8092
+ `;
8093
+ var dotDistance3 = import_react47.css`
8094
+ &::after {
8095
+ transform: translate(-50%, -50%) scale(0.8);
8096
+ }
8097
+ `;
8098
+ var dotDistanceGreaterThan3 = import_react47.css`
8099
+ &::after {
8100
+ transform: translate(-50%, -50%) scale(0.7);
8101
+ }
8102
+ `;
8103
+ var dotVisible = import_react47.css`
8104
+ &::after {
8105
+ opacity: 1;
8106
+ transform: translate(-50%, -50%) scale(1.2);
8107
+ }
8108
+ `;
8109
+
8110
+ // src/ScrollingCarousel/components/ScrollingCarouselStep.tsx
8111
+ var import_jsx_runtime248 = require("@emotion/react/jsx-runtime");
8112
+ var ScrollingCarouselStep = ({
8113
+ children,
8114
+ index,
8115
+ className,
8116
+ parentId,
8117
+ onClick
8118
+ }) => {
8119
+ const context = (0, import_react48.useContext)(CarouselContext);
8120
+ if (!context) {
8121
+ throw new Error(
8122
+ "ScrollingCarouselStep must be used within ScrollingCarousel"
8123
+ );
8124
+ }
8125
+ const { carousel: carousel2, dispatch } = context;
8126
+ const [ref, inView] = (0, import_react_intersection_observer.useInView)({
8127
+ threshold: 0.75,
8128
+ root: carousel2.current
8129
+ });
8130
+ (0, import_react48.useEffect)(() => {
8131
+ if (typeof index !== "undefined") {
8132
+ dispatch({
8133
+ type: "set_child_visibility",
8134
+ payload: { index, visible: inView }
8135
+ });
8136
+ }
8137
+ }, [inView, index, dispatch]);
8138
+ const dataStep = { [`data-step-${parentId}`]: index };
8139
+ return /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(
8140
+ "div",
8141
+ {
8142
+ ref,
8143
+ css: step,
8144
+ className,
8145
+ ...dataStep,
8146
+ onClick,
8147
+ role: "group",
8148
+ "aria-roledescription": "slide",
8149
+ children
8150
+ }
8151
+ );
8152
+ };
8153
+ ScrollingCarouselStep.displayName = "ScrollingCarouselStep";
8154
+
8155
+ // src/ScrollingCarousel/ScrollingCarousel.tsx
8156
+ var import_react52 = __toESM(require("react"));
8157
+
8158
+ // src/ScrollingCarousel/hooks/useCarouselDots.ts
8159
+ var import_react49 = require("react");
8160
+
8161
+ // src/ScrollingCarousel/ScrollingCarousel.helpers.ts
8162
+ var childVisibilityReducer = (state, action) => {
8163
+ switch (action.type) {
8164
+ case "set_child_visibility": {
8165
+ const newChildVisibility = [...state.childVisibility];
8166
+ newChildVisibility[action.payload.index] = action.payload.visible;
8167
+ return {
8168
+ childVisibility: newChildVisibility
8169
+ };
8170
+ }
8171
+ default:
8172
+ return state;
8173
+ }
8174
+ };
8175
+ var calculateDotOffset = (dotIndex, visualPositionIndex, dotWidth, dotMovementNeeded) => {
8176
+ return (dotIndex + visualPositionIndex) * dotWidth - dotMovementNeeded * dotWidth;
8177
+ };
8178
+ var calculateDotDistances = (childVisibility, centerDotIndex) => {
8179
+ return childVisibility.map((_, i) => Math.abs(centerDotIndex - i));
8180
+ };
8181
+
8182
+ // src/ScrollingCarousel/hooks/useCarouselDots.ts
8183
+ var useCarouselDots = ({
8184
+ childVisibility,
8185
+ firstVisibleIndex,
8186
+ lastVisibleIndex,
8187
+ anyItemsVisible,
8188
+ numberOfDots
8189
+ }) => {
8190
+ const dotOffset = (0, import_react49.useRef)(0);
8191
+ const dotWidth = 12;
8192
+ const totalDots = childVisibility.length;
8193
+ const dotToCenterIndex = Math.round(
8194
+ (firstVisibleIndex + lastVisibleIndex) / 2
8195
+ );
8196
+ const dotMovementNeeded = Math.round(numberOfDots / 2) + 1;
8197
+ const centerDotNearStart = dotToCenterIndex < dotMovementNeeded - 1;
8198
+ const centerDotNearEnd = dotToCenterIndex > totalDots - dotMovementNeeded;
8199
+ if (anyItemsVisible) {
8200
+ if (centerDotNearStart) {
8201
+ dotOffset.current = 0;
8202
+ } else if (centerDotNearEnd) {
8203
+ dotOffset.current = dotWidth * (totalDots - numberOfDots);
8204
+ } else {
8205
+ dotOffset.current = calculateDotOffset(
8206
+ dotToCenterIndex,
8207
+ 2,
8208
+ dotWidth,
8209
+ dotMovementNeeded
8210
+ );
8211
+ }
8212
+ }
8213
+ const dotDistances = calculateDotDistances(childVisibility, dotToCenterIndex);
8214
+ return {
8215
+ dotOffset,
8216
+ dotDistances,
8217
+ dotWidth
8218
+ };
8219
+ };
8220
+
8221
+ // src/ScrollingCarousel/hooks/useCarouselNavigation.ts
8222
+ var import_react50 = require("react");
8223
+
8224
+ // src/shared/helpers.ts
8225
+ var import_seamless_scroll_polyfill = require("seamless-scroll-polyfill");
8226
+ var isSafari = () => {
8227
+ if (typeof window === "undefined")
8228
+ return false;
8229
+ return /^((?!chrome|android).)*safari/i.test(window.navigator.userAgent);
8230
+ };
8231
+ var scrollTo = (el, config, parent) => {
8232
+ setTimeout(() => {
8233
+ if (isSafari()) {
8234
+ (0, import_seamless_scroll_polyfill.elementScrollIntoView)(el, config);
8235
+ } else {
8236
+ if (parent) {
8237
+ parent.scroll({ left: el.offsetLeft, behavior: "smooth" });
8238
+ } else {
8239
+ el.scrollIntoView(config);
8240
+ }
8241
+ }
8242
+ });
8243
+ };
8244
+
8245
+ // src/ScrollingCarousel/hooks/useCarouselNavigation.ts
8246
+ var useCarouselNavigation = ({
8247
+ carousel: carousel2,
8248
+ id,
8249
+ firstItemIsVisible,
8250
+ lastItemIsVisible,
8251
+ firstVisibleIndex,
8252
+ lastVisibleIndex,
8253
+ infiniteScroll,
8254
+ childVisibilityLength
8255
+ }) => {
8256
+ const getStepEl = (0, import_react50.useCallback)(
8257
+ (index) => {
8258
+ if (carousel2.current) {
8259
+ return carousel2.current.querySelectorAll(`[data-step-${id}]`)[index] || null;
8260
+ }
8261
+ return null;
8262
+ },
8263
+ [carousel2, id]
8264
+ );
8265
+ const next = (0, import_react50.useCallback)(
8266
+ (e) => {
8267
+ e.preventDefault();
8268
+ if (lastItemIsVisible && !infiniteScroll)
8269
+ return;
8270
+ const scrollToIndex = infiniteScroll && lastVisibleIndex === childVisibilityLength - 1 ? 0 : lastVisibleIndex + 1;
8271
+ const el = getStepEl(scrollToIndex);
8272
+ if (el) {
8273
+ scrollTo(
8274
+ el,
8275
+ {
8276
+ behavior: "smooth",
8277
+ inline: "start",
8278
+ block: "nearest"
8279
+ },
8280
+ carousel2.current
8281
+ );
8282
+ }
8283
+ },
8284
+ [
8285
+ lastItemIsVisible,
8286
+ lastVisibleIndex,
8287
+ infiniteScroll,
8288
+ childVisibilityLength,
8289
+ getStepEl,
8290
+ carousel2
8291
+ ]
8292
+ );
8293
+ const back = (0, import_react50.useCallback)(
8294
+ (e) => {
8295
+ e.preventDefault();
8296
+ if (firstItemIsVisible && !infiniteScroll)
8297
+ return;
8298
+ const scrollToIndex = firstVisibleIndex === 0 && infiniteScroll ? childVisibilityLength - 1 : firstVisibleIndex - 1;
8299
+ const el = getStepEl(scrollToIndex);
8300
+ if (el) {
8301
+ scrollTo(
8302
+ el,
8303
+ {
8304
+ behavior: "smooth",
8305
+ inline: "end",
8306
+ block: "nearest"
8307
+ },
8308
+ carousel2.current
8309
+ );
8310
+ }
8311
+ },
8312
+ [
8313
+ firstItemIsVisible,
8314
+ firstVisibleIndex,
8315
+ infiniteScroll,
8316
+ childVisibilityLength,
8317
+ getStepEl,
8318
+ carousel2
8319
+ ]
8320
+ );
8321
+ const goTo = (0, import_react50.useCallback)(
8322
+ (e, i) => {
8323
+ e.preventDefault();
8324
+ const el = getStepEl(i);
8325
+ if (el) {
8326
+ scrollTo(el, {
8327
+ behavior: "smooth",
8328
+ inline: "center",
8329
+ block: "center"
8330
+ });
8331
+ }
8332
+ },
8333
+ [getStepEl]
8334
+ );
8335
+ return { next, back, goTo };
8336
+ };
8337
+
8338
+ // src/ScrollingCarousel/hooks/useCarouselVisibility.ts
8339
+ var import_react51 = require("react");
8340
+ var useCarouselVisibility = (carousel2) => {
8341
+ const [state, dispatch] = (0, import_react51.useReducer)(childVisibilityReducer, {
8342
+ childVisibility: []
8343
+ });
8344
+ const carouselContextApi = (0, import_react51.useMemo)(
8345
+ () => ({ carousel: carousel2, dispatch }),
8346
+ [carousel2]
8347
+ );
8348
+ const firstVisibleIndex = state.childVisibility.indexOf(true);
8349
+ const firstItemIsVisible = firstVisibleIndex === 0;
8350
+ const lastVisibleIndex = state.childVisibility.lastIndexOf(true);
8351
+ const lastItemIsVisible = lastVisibleIndex === state.childVisibility.length - 1;
8352
+ const anyItemsVisible = !!(firstVisibleIndex >= 0 && lastVisibleIndex >= 0);
8353
+ return {
8354
+ state,
8355
+ carouselContextApi,
8356
+ firstVisibleIndex,
8357
+ lastVisibleIndex,
8358
+ firstItemIsVisible,
8359
+ lastItemIsVisible,
8360
+ anyItemsVisible
8361
+ };
8362
+ };
8363
+
8364
+ // src/ScrollingCarousel/ScrollingCarousel.tsx
8365
+ var import_jsx_runtime249 = require("@emotion/react/jsx-runtime");
8366
+ var ScrollingCarousel = ({
8367
+ className,
8368
+ children,
8369
+ showButtons = true,
8370
+ showDots = false,
8371
+ dotsColor = "light",
8372
+ numberOfDots = 5,
8373
+ buttonsPosition = "left-right",
8374
+ customLeftButton,
8375
+ infiniteScroll = false,
8376
+ customBackIcon = null,
8377
+ customNextIcon = null,
8378
+ showNavigationOnHover = false,
8379
+ id,
8380
+ current
8381
+ }) => {
8382
+ const carousel2 = (0, import_react52.useRef)(null);
8383
+ const [isHovering, setIsHovering] = (0, import_react52.useState)(false);
8384
+ const {
8385
+ state,
8386
+ carouselContextApi,
8387
+ firstVisibleIndex,
8388
+ lastVisibleIndex,
8389
+ firstItemIsVisible,
8390
+ lastItemIsVisible,
8391
+ anyItemsVisible
8392
+ } = useCarouselVisibility(carousel2);
8393
+ const { next, back, goTo } = useCarouselNavigation({
8394
+ carousel: carousel2,
8395
+ id,
8396
+ firstItemIsVisible,
8397
+ lastItemIsVisible,
8398
+ firstVisibleIndex,
8399
+ lastVisibleIndex,
8400
+ infiniteScroll,
8401
+ childVisibilityLength: state.childVisibility.length
8402
+ });
8403
+ (0, import_react52.useEffect)(() => {
8404
+ if (carousel2.current && typeof current === "number" && current >= 0) {
8405
+ const childrenArray = Array.from(carousel2.current.children);
8406
+ const selectedItem = childrenArray[current];
8407
+ if (selectedItem) {
8408
+ const selectedItemOffset = selectedItem.offsetLeft + selectedItem.offsetWidth / 2;
8409
+ const carouselCenter = carousel2.current.offsetWidth / 2;
8410
+ const scrollLeft = selectedItemOffset - carouselCenter;
8411
+ carousel2.current.scroll({
8412
+ left: scrollLeft,
8413
+ behavior: "smooth"
8414
+ });
8415
+ }
8416
+ }
8417
+ }, [current]);
8418
+ const childrenWithIndex = import_react52.default.Children.map(
8419
+ children,
8420
+ (child, index) => import_react52.default.cloneElement(child, { index })
8421
+ );
8422
+ const { dotOffset, dotDistances, dotWidth } = useCarouselDots({
8423
+ childVisibility: state.childVisibility,
8424
+ firstVisibleIndex,
8425
+ lastVisibleIndex,
8426
+ anyItemsVisible,
8427
+ numberOfDots
8428
+ });
8429
+ const hasMultipleChildren = state.childVisibility.length > 1;
8430
+ const shouldShowNavigation = showNavigationOnHover ? isHovering : true;
8431
+ return /* @__PURE__ */ (0, import_jsx_runtime249.jsxs)(
8432
+ "div",
8433
+ {
8434
+ css: carouselRoot,
8435
+ className,
8436
+ onMouseEnter: () => setIsHovering(true),
8437
+ onMouseLeave: () => setIsHovering(false),
8438
+ children: [
8439
+ /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(
8440
+ "div",
8441
+ {
8442
+ css: carousel,
8443
+ ref: carousel2,
8444
+ "data-testid": "scrolling-carousel-carousel",
8445
+ role: "region",
8446
+ "aria-roledescription": "carousel",
8447
+ "aria-label": "Scrolling carousel",
8448
+ children: /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(CarouselContext.Provider, { value: carouselContextApi, children: childrenWithIndex })
8449
+ }
8450
+ ),
8451
+ hasMultipleChildren && shouldShowNavigation && /* @__PURE__ */ (0, import_jsx_runtime249.jsxs)("div", { css: controls(buttonsPosition), children: [
8452
+ showButtons && (!firstItemIsVisible || infiniteScroll) && /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(
8453
+ "button",
8454
+ {
8455
+ "aria-label": "Previous",
8456
+ type: "button",
8457
+ onClick: back,
8458
+ css: customLeftButton ? customButtonLeft(buttonsPosition) : buttonLeft(buttonsPosition),
8459
+ "data-testid": `scrolling-carousel-button-back-${id}`,
8460
+ children: customBackIcon ? customBackIcon : /* @__PURE__ */ (0, import_jsx_runtime249.jsx)("span", { css: iconWrapper, children: /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(Icon_default, { variant: "AngleLeft", css: icon }) })
8461
+ }
8462
+ ),
8463
+ showButtons && (!lastItemIsVisible || infiniteScroll) && /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(
8464
+ "button",
8465
+ {
8466
+ "aria-label": "Next",
8467
+ type: "button",
8468
+ onClick: next,
8469
+ css: buttonRight(buttonsPosition),
8470
+ "data-testid": `scrolling-carousel-button-next-${id}`,
8471
+ children: customNextIcon ? customNextIcon : /* @__PURE__ */ (0, import_jsx_runtime249.jsx)("span", { css: iconWrapper, children: /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(Icon_default, { variant: "AngleRight", css: icon }) })
8472
+ }
8473
+ )
8474
+ ] }),
8475
+ showDots && /* @__PURE__ */ (0, import_jsx_runtime249.jsx)("div", { css: dots, children: /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(
8476
+ "div",
8477
+ {
8478
+ css: dotsInner,
8479
+ style: { maxWidth: `${dotWidth * numberOfDots}px` },
8480
+ children: state.childVisibility.map((childVisibility, i) => {
8481
+ var _a;
8482
+ const distance = (_a = dotDistances[i]) != null ? _a : 0;
8483
+ return /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(
8484
+ "button",
8485
+ {
8486
+ type: "button",
8487
+ onClick: (e) => goTo(e, i),
8488
+ css: [
8489
+ dot(dotsColor),
8490
+ distance === 2 && dotDistance2,
8491
+ distance === 3 && dotDistance3,
8492
+ distance > 3 && dotDistanceGreaterThan3,
8493
+ childVisibility && dotVisible
8494
+ ],
8495
+ style: {
8496
+ width: `${dotWidth}px`,
8497
+ height: `${dotWidth}px`,
8498
+ transform: `translateX(-${dotOffset.current}px)`
8499
+ },
8500
+ "aria-label": `Go to slide ${i + 1}`
8501
+ },
8502
+ `step-${i + 1}`
8503
+ );
8504
+ })
8505
+ }
8506
+ ) })
8507
+ ]
8508
+ }
8509
+ );
8510
+ };
8511
+ ScrollingCarousel.displayName = "ScrollingCarousel";
8512
+
7879
8513
  // src/PackageCard/PackageCard.styles.ts
7880
- var import_react46 = require("@emotion/react");
7881
- var cardContainerStyles3 = import_react46.css`
8514
+ var import_react53 = require("@emotion/react");
8515
+ var cardContainerStyles3 = import_react53.css`
7882
8516
  color: var(--text-primary);
7883
8517
  position: relative;
7884
8518
  width: 100%;
7885
- max-width: 300px;
8519
+ height: 100%;
7886
8520
  background: white;
7887
- border-radius: var(--spacing-4);
7888
8521
  overflow: hidden;
7889
- cursor: pointer;
7890
8522
  transition: all 0.2s ease;
7891
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
7892
-
7893
- &:hover {
7894
- transform: translateY(-2px);
7895
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
7896
- }
7897
8523
  `;
7898
- var imageContainerStyles = import_react46.css`
8524
+ var imageContainerStyles = import_react53.css`
7899
8525
  position: relative;
7900
8526
  width: 100%;
7901
- height: 200px;
8527
+ height: 260px;
7902
8528
  overflow: hidden;
7903
8529
  border-radius: var(--spacing-4);
7904
8530
  `;
7905
- var imageStyles2 = import_react46.css`
8531
+ var imageStyles2 = import_react53.css`
7906
8532
  width: 100%;
7907
- height: 100%;
8533
+ height: 260px;
7908
8534
  background-size: cover;
7909
8535
  background-position: center;
7910
8536
  background-repeat: no-repeat;
7911
- border-radius: var(--spacing-4) var(--spacing-4) 0 0;
8537
+ position: relative;
8538
+ background-color: lightgray;
7912
8539
  `;
7913
- var badgeStyles2 = import_react46.css`
8540
+ var badgeTopLeftStyles = import_react53.css`
7914
8541
  position: absolute;
7915
8542
  top: var(--spacing-3);
7916
8543
  left: var(--spacing-3);
7917
8544
  z-index: 2;
7918
8545
  `;
7919
- var heartIconStyles = import_react46.css`
8546
+ var badgeBottomRightStyles = import_react53.css`
8547
+ position: absolute;
8548
+ bottom: var(--spacing-3);
8549
+ right: var(--spacing-3);
8550
+ z-index: 2;
8551
+ `;
8552
+ var heartIconStyles = import_react53.css`
7920
8553
  position: absolute;
7921
8554
  top: var(--spacing-3);
7922
8555
  right: var(--spacing-3);
7923
8556
  width: 32px;
7924
8557
  height: 32px;
7925
- background: rgba(255, 255, 255, 0.2);
7926
- backdrop-filter: blur(8px);
8558
+ background: rgba(255, 255, 255, 0.4);
7927
8559
  border-radius: 50%;
8560
+ border: 1px solid var(--border-primary);
7928
8561
  display: flex;
7929
8562
  align-items: center;
7930
8563
  justify-content: center;
@@ -7938,103 +8571,180 @@ var heartIconStyles = import_react46.css`
7938
8571
  transform: scale(1.1);
7939
8572
  }
7940
8573
  `;
7941
- var contentStyles2 = import_react46.css`
7942
- padding: var(--spacing-3);
8574
+ var contentWithBackgroundStyles = import_react53.css`
8575
+ padding: var(--spacing-2) var(--spacing-3) var(--spacing-4) var(--spacing-3);
8576
+ background-color: var(--surface-page);
8577
+ `;
8578
+ var contentWithoutBackgroundStyles = import_react53.css`
8579
+ padding-top: var(--spacing-2);
8580
+ `;
8581
+ var overlayStyles = import_react53.css`
8582
+ position: absolute;
8583
+ top: 0;
8584
+ left: 0;
8585
+ width: 100%;
8586
+ height: 100%;
8587
+ background-color: rgba(0, 0, 0, 0.6);
8588
+ z-index: 1;
8589
+ border-radius: var(--spacing-4);
8590
+ display: block;
8591
+ pointer-events: none;
7943
8592
  `;
7944
8593
 
7945
8594
  // src/PackageCard/PackageCard.tsx
7946
- var import_jsx_runtime248 = require("@emotion/react/jsx-runtime");
8595
+ var import_jsx_runtime250 = require("@emotion/react/jsx-runtime");
7947
8596
  var PackageCard = ({
7948
8597
  images,
7949
8598
  title,
7950
8599
  subtitle,
7951
8600
  startingPrice,
7952
- tripsLeft,
7953
8601
  isFavorited = false,
7954
8602
  onFavoriteClick,
7955
8603
  onClick,
7956
8604
  className,
7957
- days,
7958
- guests,
7959
- hasLodging,
8605
+ badges,
8606
+ availabilityBadges,
8607
+ id,
8608
+ hasContentBackground = false,
7960
8609
  ...rest
7961
8610
  }) => {
7962
- const mainImage = images[0] || "";
7963
- return /* @__PURE__ */ (0, import_jsx_runtime248.jsxs)(Box_default, { css: cardContainerStyles3, className, ...rest, children: [
7964
- /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(Box_default, { css: imageContainerStyles, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime248.jsxs)(Box_default, { css: [imageStyles2, { backgroundImage: `url(${mainImage})` }], children: [
7965
- tripsLeft && /* @__PURE__ */ (0, import_jsx_runtime248.jsxs)(AvailabilityBadge_default, { variant: "warning", css: badgeStyles2, children: [
7966
- tripsLeft,
7967
- " Trips Left"
7968
- ] }),
7969
- /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(
7970
- Box_default,
7971
- {
7972
- css: heartIconStyles,
7973
- onClick: (e) => {
7974
- e.stopPropagation();
7975
- onFavoriteClick == null ? void 0 : onFavoriteClick();
7976
- },
7977
- children: /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(
7978
- Icon_default,
8611
+ const carouselId = id || `package-card-${title.replace(/\s+/g, "-")}`;
8612
+ const shouldShowOverlay = availabilityBadges == null ? void 0 : availabilityBadges.some(
8613
+ (badge2) => badge2.showOverlay
8614
+ );
8615
+ return /* @__PURE__ */ (0, import_jsx_runtime250.jsxs)(
8616
+ Box_default,
8617
+ {
8618
+ css: cardContainerStyles3,
8619
+ className,
8620
+ ...rest,
8621
+ borderRadius: hasContentBackground ? "var(--spacing-4)" : "var(--spacing-4) var(--spacing-4) 0 0",
8622
+ children: [
8623
+ /* @__PURE__ */ (0, import_jsx_runtime250.jsxs)(Box_default, { css: imageContainerStyles, children: [
8624
+ availabilityBadges == null ? void 0 : availabilityBadges.map((badge2, index) => /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(
8625
+ AvailabilityBadge_default,
8626
+ {
8627
+ variant: badge2.variant,
8628
+ css: badge2.position === "bottom-right" ? badgeBottomRightStyles : badgeTopLeftStyles,
8629
+ children: badge2.text
8630
+ },
8631
+ `availability-${index}`
8632
+ )),
8633
+ shouldShowOverlay && /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(Box_default, { css: overlayStyles }),
8634
+ /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(
8635
+ ScrollingCarousel,
8636
+ {
8637
+ showDots: images.length > 1,
8638
+ showNavigationOnHover: true,
8639
+ id: carouselId,
8640
+ children: images.filter((image) => !!image).map((image, index) => /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(
8641
+ ScrollingCarouselStep,
8642
+ {
8643
+ parentId: carouselId,
8644
+ onClick,
8645
+ children: /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(
8646
+ Box_default,
8647
+ {
8648
+ css: [
8649
+ imageStyles2,
8650
+ {
8651
+ backgroundImage: `linear-gradient(181deg, rgba(0, 0, 0, 0.00) 75.32%, rgba(0, 0, 0, 0.40) 99.41%), url(${image})`
8652
+ }
8653
+ ]
8654
+ }
8655
+ )
8656
+ },
8657
+ `image-${index}`
8658
+ ))
8659
+ }
8660
+ ),
8661
+ onFavoriteClick && /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(
8662
+ Box_default,
7979
8663
  {
7980
- variant: isFavorited ? "HeartSolid" : "Heart",
7981
- size: "medium"
8664
+ css: heartIconStyles,
8665
+ onClick: (e) => {
8666
+ e.preventDefault();
8667
+ e.stopPropagation();
8668
+ onFavoriteClick == null ? void 0 : onFavoriteClick();
8669
+ },
8670
+ children: isFavorited ? /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(
8671
+ Icon_default,
8672
+ {
8673
+ variant: "HeartSolid",
8674
+ size: "small",
8675
+ fill: "var(--color-error-500)"
8676
+ }
8677
+ ) : /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(
8678
+ Icon_default,
8679
+ {
8680
+ variant: "Heart",
8681
+ size: "small",
8682
+ fill: "var(--color-base-black)"
8683
+ }
8684
+ )
7982
8685
  }
7983
8686
  )
7984
- }
7985
- )
7986
- ] }) }),
7987
- /* @__PURE__ */ (0, import_jsx_runtime248.jsxs)(Box_default, { css: contentStyles2, children: [
7988
- /* @__PURE__ */ (0, import_jsx_runtime248.jsxs)(
7989
- Box_default,
7990
- {
7991
- onClick,
7992
- display: "flex",
7993
- flexDirection: "column",
7994
- gap: "var(--spacing-1)",
7995
- mb: "var(--spacing-4)",
7996
- children: [
7997
- /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(Text_default, { size: "md", fontWeight: "bold", children: title }) }),
7998
- /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(Text_default, { size: "xs", fontWeight: "bold", children: subtitle }) }),
7999
- /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime248.jsxs)(Text_default, { size: "xs", fontWeight: "normal", children: [
8000
- "Starting Price ",
8001
- startingPrice,
8002
- " / Guest"
8003
- ] }) })
8004
- ]
8005
- }
8006
- ),
8007
- /* @__PURE__ */ (0, import_jsx_runtime248.jsxs)(Box_default, { display: "flex", gap: "var(--spacing-3)", alignItems: "center", children: [
8008
- days && /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(
8009
- IconLabel_default,
8010
- {
8011
- variant: "Calendar",
8012
- label: `${days} Day${days !== 1 ? "s" : ""}`
8013
- }
8014
- ),
8015
- guests && /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(
8016
- IconLabel_default,
8687
+ ] }),
8688
+ /* @__PURE__ */ (0, import_jsx_runtime250.jsxs)(
8689
+ Box_default,
8017
8690
  {
8018
- variant: "User",
8019
- label: `${guests} Guest${guests !== 1 ? "s" : ""}`
8691
+ css: hasContentBackground ? contentWithBackgroundStyles : contentWithoutBackgroundStyles,
8692
+ children: [
8693
+ /* @__PURE__ */ (0, import_jsx_runtime250.jsxs)(
8694
+ Box_default,
8695
+ {
8696
+ onClick,
8697
+ display: "flex",
8698
+ flexDirection: "column",
8699
+ gap: "var(--spacing-1)",
8700
+ mb: "var(--spacing-1)",
8701
+ children: [
8702
+ /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(Text_default, { size: "md", fontWeight: "bold", children: title }) }),
8703
+ /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(Text_default, { size: "sm", fontWeight: "bold", children: subtitle }) }),
8704
+ /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime250.jsxs)(Text_default, { size: "sm", fontWeight: "normal", children: [
8705
+ "Starting Price ",
8706
+ startingPrice,
8707
+ " / Guest"
8708
+ ] }) })
8709
+ ]
8710
+ }
8711
+ ),
8712
+ badges && badges.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(
8713
+ Box_default,
8714
+ {
8715
+ display: "flex",
8716
+ gap: "var(--spacing-2) var(--spacing-4)",
8717
+ alignItems: "center",
8718
+ flexWrap: "wrap",
8719
+ children: badges.map((badge2, index) => /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(
8720
+ IconLabel_default,
8721
+ {
8722
+ iconSize: badge2.iconSize || "medium",
8723
+ label: badge2.label,
8724
+ variant: badge2.variant
8725
+ },
8726
+ `badge-${badge2.variant}-${index}`
8727
+ ))
8728
+ }
8729
+ )
8730
+ ]
8020
8731
  }
8021
- ),
8022
- hasLodging && /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(IconLabel_default, { variant: "House", label: "Lodging" })
8023
- ] })
8024
- ] })
8025
- ] });
8732
+ )
8733
+ ]
8734
+ }
8735
+ );
8026
8736
  };
8027
8737
  var PackageCard_default = PackageCard;
8028
8738
 
8029
8739
  // src/PackageHeader/PackageHeader.tsx
8030
- var import_jsx_runtime249 = require("@emotion/react/jsx-runtime");
8740
+ var import_jsx_runtime251 = require("@emotion/react/jsx-runtime");
8031
8741
  var PackageHeader = ({
8032
8742
  header,
8033
8743
  subheader,
8034
8744
  features,
8035
8745
  className
8036
8746
  }) => {
8037
- return /* @__PURE__ */ (0, import_jsx_runtime249.jsxs)(
8747
+ return /* @__PURE__ */ (0, import_jsx_runtime251.jsxs)(
8038
8748
  Box_default,
8039
8749
  {
8040
8750
  display: "flex",
@@ -8043,9 +8753,9 @@ var PackageHeader = ({
8043
8753
  color: "var(--text-primary)",
8044
8754
  className,
8045
8755
  children: [
8046
- /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(Heading_default, { size: "xs", fontWeight: "bold", children: header }),
8047
- subheader && /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(Text_default, { children: subheader }),
8048
- features && /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(FeatureList_default, { items: features })
8756
+ /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(Heading_default, { size: "xs", fontWeight: "bold", children: header }),
8757
+ subheader && /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(Text_default, { children: subheader }),
8758
+ features && /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(FeatureList_default, { items: features })
8049
8759
  ]
8050
8760
  }
8051
8761
  );
@@ -8053,8 +8763,8 @@ var PackageHeader = ({
8053
8763
  var PackageHeader_default = PackageHeader;
8054
8764
 
8055
8765
  // src/ReviewCard/components/ReviewImages.styles.ts
8056
- var import_react47 = require("@emotion/react");
8057
- var imageStyles3 = import_react47.css`
8766
+ var import_react54 = require("@emotion/react");
8767
+ var imageStyles3 = import_react54.css`
8058
8768
  flex: 1;
8059
8769
  min-width: 0;
8060
8770
  max-width: 100%;
@@ -8065,13 +8775,13 @@ var imageStyles3 = import_react47.css`
8065
8775
  `;
8066
8776
 
8067
8777
  // src/ReviewCard/components/ReviewImages.tsx
8068
- var import_jsx_runtime250 = require("@emotion/react/jsx-runtime");
8778
+ var import_jsx_runtime252 = require("@emotion/react/jsx-runtime");
8069
8779
  var ReviewImages = ({ images, maxImages = 3 }) => {
8070
8780
  const displayImages = images.slice(0, maxImages);
8071
8781
  if (displayImages.length === 0) {
8072
8782
  return null;
8073
8783
  }
8074
- return /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(Box_default, { display: "flex", gap: "var(--spacing-2)", flexWrap: "wrap", children: displayImages.map((image, index) => /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(
8784
+ return /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(Box_default, { display: "flex", gap: "var(--spacing-2)", flexWrap: "wrap", children: displayImages.map((image, index) => /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(
8075
8785
  "img",
8076
8786
  {
8077
8787
  src: image,
@@ -8084,7 +8794,7 @@ var ReviewImages = ({ images, maxImages = 3 }) => {
8084
8794
  var ReviewImages_default = ReviewImages;
8085
8795
 
8086
8796
  // src/ReviewCard/components/ReviewReply.tsx
8087
- var import_jsx_runtime251 = require("@emotion/react/jsx-runtime");
8797
+ var import_jsx_runtime253 = require("@emotion/react/jsx-runtime");
8088
8798
  var ReviewReply = ({
8089
8799
  avatarSrc,
8090
8800
  name,
@@ -8093,7 +8803,7 @@ var ReviewReply = ({
8093
8803
  label,
8094
8804
  rating
8095
8805
  }) => {
8096
- return /* @__PURE__ */ (0, import_jsx_runtime251.jsxs)(
8806
+ return /* @__PURE__ */ (0, import_jsx_runtime253.jsxs)(
8097
8807
  Box_default,
8098
8808
  {
8099
8809
  backgroundColor: "var(--surface-neutral)",
@@ -8103,7 +8813,7 @@ var ReviewReply = ({
8103
8813
  flexDirection: "column",
8104
8814
  gap: "var(--spacing-3)",
8105
8815
  children: [
8106
- /* @__PURE__ */ (0, import_jsx_runtime251.jsxs)(
8816
+ /* @__PURE__ */ (0, import_jsx_runtime253.jsxs)(
8107
8817
  Box_default,
8108
8818
  {
8109
8819
  display: "flex",
@@ -8111,7 +8821,7 @@ var ReviewReply = ({
8111
8821
  justifyContent: "space-between",
8112
8822
  gap: "var(--spacing-2)",
8113
8823
  children: [
8114
- /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(
8824
+ /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(
8115
8825
  UserCard_default,
8116
8826
  {
8117
8827
  avatarSrc,
@@ -8120,11 +8830,11 @@ var ReviewReply = ({
8120
8830
  rating
8121
8831
  }
8122
8832
  ),
8123
- /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(AvailabilityBadge_default, { variant: "neutral", children: label })
8833
+ /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(AvailabilityBadge_default, { variant: "neutral", children: label })
8124
8834
  ]
8125
8835
  }
8126
8836
  ),
8127
- /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(Text_default, { children: content })
8837
+ /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(Text_default, { children: content })
8128
8838
  ]
8129
8839
  }
8130
8840
  );
@@ -8132,7 +8842,7 @@ var ReviewReply = ({
8132
8842
  var ReviewReply_default = ReviewReply;
8133
8843
 
8134
8844
  // src/ReviewCard/ReviewCard.tsx
8135
- var import_jsx_runtime252 = require("@emotion/react/jsx-runtime");
8845
+ var import_jsx_runtime254 = require("@emotion/react/jsx-runtime");
8136
8846
  var ReviewCard = ({
8137
8847
  avatarSrc,
8138
8848
  name,
@@ -8144,7 +8854,7 @@ var ReviewCard = ({
8144
8854
  replies = [],
8145
8855
  className
8146
8856
  }) => {
8147
- return /* @__PURE__ */ (0, import_jsx_runtime252.jsxs)(
8857
+ return /* @__PURE__ */ (0, import_jsx_runtime254.jsxs)(
8148
8858
  Box_default,
8149
8859
  {
8150
8860
  backgroundColor: "white",
@@ -8155,7 +8865,7 @@ var ReviewCard = ({
8155
8865
  gap: "var(--spacing-4)",
8156
8866
  className,
8157
8867
  children: [
8158
- /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(
8868
+ /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(
8159
8869
  UserCard_default,
8160
8870
  {
8161
8871
  avatarSrc,
@@ -8164,10 +8874,10 @@ var ReviewCard = ({
8164
8874
  rating
8165
8875
  }
8166
8876
  ),
8167
- availabilityBadge && /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(AvailabilityBadge_default, { variant: availabilityBadge.variant, children: availabilityBadge.text }) }),
8168
- /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(Text_default, { size: "md", children: content }),
8169
- images.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(ReviewImages_default, { images }),
8170
- replies.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(Box_default, { display: "flex", flexDirection: "column", gap: "var(--spacing-3)", children: replies.map((reply, index) => /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(
8877
+ availabilityBadge && /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(AvailabilityBadge_default, { variant: availabilityBadge.variant, children: availabilityBadge.text }) }),
8878
+ /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(Text_default, { size: "md", children: content }),
8879
+ images.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(ReviewImages_default, { images }),
8880
+ replies.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(Box_default, { display: "flex", flexDirection: "column", gap: "var(--spacing-3)", children: replies.map((reply, index) => /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(
8171
8881
  ReviewReply_default,
8172
8882
  {
8173
8883
  avatarSrc: reply.avatarSrc,
@@ -8186,12 +8896,12 @@ var ReviewCard = ({
8186
8896
  var ReviewCard_default = ReviewCard;
8187
8897
 
8188
8898
  // src/Reviews/Reviews.tsx
8189
- var import_react48 = require("@emotion/react");
8899
+ var import_react55 = require("@emotion/react");
8190
8900
 
8191
8901
  // src/Reviews/components/ReviewItem.tsx
8192
- var import_jsx_runtime253 = require("@emotion/react/jsx-runtime");
8902
+ var import_jsx_runtime255 = require("@emotion/react/jsx-runtime");
8193
8903
  var ReviewItem = ({ label, rating }) => {
8194
- return /* @__PURE__ */ (0, import_jsx_runtime253.jsxs)(
8904
+ return /* @__PURE__ */ (0, import_jsx_runtime255.jsxs)(
8195
8905
  Box_default,
8196
8906
  {
8197
8907
  display: "flex",
@@ -8199,10 +8909,10 @@ var ReviewItem = ({ label, rating }) => {
8199
8909
  alignItems: "center",
8200
8910
  width: "100%",
8201
8911
  children: [
8202
- /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(Text_default, { fontWeight: "semibold", children: label }),
8203
- /* @__PURE__ */ (0, import_jsx_runtime253.jsxs)(Box_default, { display: "flex", alignItems: "center", gap: "var(--spacing-2)", children: [
8204
- /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(Icon_default, { variant: "StarSolid", size: "large", fill: "var(--surface-action-2)" }),
8205
- /* @__PURE__ */ (0, import_jsx_runtime253.jsxs)(Text_default, { fontWeight: "semibold", children: [
8912
+ /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Text_default, { fontWeight: "semibold", children: label }),
8913
+ /* @__PURE__ */ (0, import_jsx_runtime255.jsxs)(Box_default, { display: "flex", alignItems: "center", gap: "var(--spacing-2)", children: [
8914
+ /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Icon_default, { variant: "StarSolid", size: "large", fill: "var(--surface-action-2)" }),
8915
+ /* @__PURE__ */ (0, import_jsx_runtime255.jsxs)(Text_default, { fontWeight: "semibold", children: [
8206
8916
  rating,
8207
8917
  "/5"
8208
8918
  ] })
@@ -8214,14 +8924,14 @@ var ReviewItem = ({ label, rating }) => {
8214
8924
  var ReviewItem_default = ReviewItem;
8215
8925
 
8216
8926
  // src/Reviews/Reviews.tsx
8217
- var import_jsx_runtime254 = require("@emotion/react/jsx-runtime");
8927
+ var import_jsx_runtime256 = require("@emotion/react/jsx-runtime");
8218
8928
  var Reviews = ({
8219
8929
  averageRating,
8220
8930
  totalReviews,
8221
8931
  items,
8222
8932
  className
8223
8933
  }) => {
8224
- return /* @__PURE__ */ (0, import_jsx_runtime254.jsxs)(
8934
+ return /* @__PURE__ */ (0, import_jsx_runtime256.jsxs)(
8225
8935
  Box_default,
8226
8936
  {
8227
8937
  width: "100%",
@@ -8234,7 +8944,7 @@ var Reviews = ({
8234
8944
  p: "var(--spacing-4)",
8235
8945
  className,
8236
8946
  children: [
8237
- /* @__PURE__ */ (0, import_jsx_runtime254.jsxs)(
8947
+ /* @__PURE__ */ (0, import_jsx_runtime256.jsxs)(
8238
8948
  Box_default,
8239
8949
  {
8240
8950
  display: "flex",
@@ -8242,12 +8952,12 @@ var Reviews = ({
8242
8952
  alignItems: "center",
8243
8953
  gap: "var(--spacing-2)",
8244
8954
  children: [
8245
- /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(Heading_default, { size: "sm", fontWeight: "bold", color: "text-primary", children: averageRating.toFixed(1) }),
8246
- /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(
8955
+ /* @__PURE__ */ (0, import_jsx_runtime256.jsx)(Heading_default, { size: "sm", fontWeight: "bold", color: "text-primary", children: averageRating.toFixed(1) }),
8956
+ /* @__PURE__ */ (0, import_jsx_runtime256.jsx)(
8247
8957
  StarRating_default,
8248
8958
  {
8249
8959
  rating: Math.floor(averageRating),
8250
- css: import_react48.css`
8960
+ css: import_react55.css`
8251
8961
  > svg {
8252
8962
  height: 40px;
8253
8963
  width: 40px;
@@ -8255,7 +8965,7 @@ var Reviews = ({
8255
8965
  `
8256
8966
  }
8257
8967
  ),
8258
- /* @__PURE__ */ (0, import_jsx_runtime254.jsxs)(Text_default, { size: "sm", color: "text-secondary", children: [
8968
+ /* @__PURE__ */ (0, import_jsx_runtime256.jsxs)(Text_default, { size: "sm", color: "text-secondary", children: [
8259
8969
  "Overall Rating \u2022 ",
8260
8970
  totalReviews,
8261
8971
  " Review",
@@ -8264,14 +8974,14 @@ var Reviews = ({
8264
8974
  ]
8265
8975
  }
8266
8976
  ),
8267
- /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(
8977
+ /* @__PURE__ */ (0, import_jsx_runtime256.jsx)(
8268
8978
  Box_default,
8269
8979
  {
8270
8980
  display: "flex",
8271
8981
  flexDirection: "column",
8272
8982
  gap: "var(--spacing-2)",
8273
8983
  width: "100%",
8274
- children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(ReviewItem_default, { label: item.label, rating: item.rating }, index))
8984
+ children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime256.jsx)(ReviewItem_default, { label: item.label, rating: item.rating }, index))
8275
8985
  }
8276
8986
  )
8277
8987
  ]
@@ -8281,7 +8991,7 @@ var Reviews = ({
8281
8991
  var Reviews_default = Reviews;
8282
8992
 
8283
8993
  // src/Reviews/ReviewsShowcase.tsx
8284
- var import_jsx_runtime255 = require("@emotion/react/jsx-runtime");
8994
+ var import_jsx_runtime257 = require("@emotion/react/jsx-runtime");
8285
8995
  var ReviewsShowcase = () => {
8286
8996
  const sampleData = {
8287
8997
  averageRating: 4,
@@ -8303,7 +9013,7 @@ var ReviewsShowcase = () => {
8303
9013
  { label: "Game Abundance", rating: 5 }
8304
9014
  ]
8305
9015
  };
8306
- return /* @__PURE__ */ (0, import_jsx_runtime255.jsxs)(
9016
+ return /* @__PURE__ */ (0, import_jsx_runtime257.jsxs)(
8307
9017
  Box_default,
8308
9018
  {
8309
9019
  display: "flex",
@@ -8311,24 +9021,24 @@ var ReviewsShowcase = () => {
8311
9021
  gap: "var(--spacing-8)",
8312
9022
  p: "var(--spacing-6)",
8313
9023
  children: [
8314
- /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Heading_default, { size: "lg", children: "Reviews Component Showcase" }),
8315
- /* @__PURE__ */ (0, import_jsx_runtime255.jsxs)(Box_default, { display: "flex", flexDirection: "column", gap: "var(--spacing-4)", children: [
8316
- /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Heading_default, { size: "md", children: "Default Reviews" }),
8317
- /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Box_default, { maxWidth: "400px", children: /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Reviews_default, { ...sampleData }) })
9024
+ /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(Heading_default, { size: "lg", children: "Reviews Component Showcase" }),
9025
+ /* @__PURE__ */ (0, import_jsx_runtime257.jsxs)(Box_default, { display: "flex", flexDirection: "column", gap: "var(--spacing-4)", children: [
9026
+ /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(Heading_default, { size: "md", children: "Default Reviews" }),
9027
+ /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(Box_default, { maxWidth: "400px", children: /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(Reviews_default, { ...sampleData }) })
8318
9028
  ] }),
8319
- /* @__PURE__ */ (0, import_jsx_runtime255.jsxs)(Box_default, { display: "flex", flexDirection: "column", gap: "var(--spacing-4)", children: [
8320
- /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Heading_default, { size: "md", children: "High Rating Reviews" }),
8321
- /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Box_default, { maxWidth: "400px", children: /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Reviews_default, { ...highRatingData }) })
9029
+ /* @__PURE__ */ (0, import_jsx_runtime257.jsxs)(Box_default, { display: "flex", flexDirection: "column", gap: "var(--spacing-4)", children: [
9030
+ /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(Heading_default, { size: "md", children: "High Rating Reviews" }),
9031
+ /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(Box_default, { maxWidth: "400px", children: /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(Reviews_default, { ...highRatingData }) })
8322
9032
  ] }),
8323
- /* @__PURE__ */ (0, import_jsx_runtime255.jsxs)(Box_default, { display: "flex", flexDirection: "column", gap: "var(--spacing-4)", children: [
8324
- /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Heading_default, { size: "md", children: "Mobile Layout (320px width)" }),
8325
- /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(
9033
+ /* @__PURE__ */ (0, import_jsx_runtime257.jsxs)(Box_default, { display: "flex", flexDirection: "column", gap: "var(--spacing-4)", children: [
9034
+ /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(Heading_default, { size: "md", children: "Mobile Layout (320px width)" }),
9035
+ /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(
8326
9036
  Box_default,
8327
9037
  {
8328
9038
  maxWidth: "320px",
8329
9039
  border: "1px solid var(--color-neutral-200)",
8330
9040
  p: "var(--spacing-4)",
8331
- children: /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Reviews_default, { ...sampleData })
9041
+ children: /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(Reviews_default, { ...sampleData })
8332
9042
  }
8333
9043
  )
8334
9044
  ] })
@@ -8374,6 +9084,8 @@ var ReviewsShowcase_default = ReviewsShowcase;
8374
9084
  ReviewCard,
8375
9085
  Reviews,
8376
9086
  ReviewsShowcase,
9087
+ ScrollingCarousel,
9088
+ ScrollingCarouselStep,
8377
9089
  Select,
8378
9090
  Spinner,
8379
9091
  StarRating,