@landtrustinc/design-system 1.2.20 → 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
  ]
@@ -4295,7 +4297,7 @@ var markdownContentStyles = import_react10.css`
4295
4297
  border-left: 3px solid var(--border-primary);
4296
4298
  margin: var(--spacing-4) 0;
4297
4299
  padding-left: var(--spacing-4);
4298
- color: var(--text-secondary);
4300
+ color: var(--text-primary);
4299
4301
  font-style: italic;
4300
4302
  line-height: 1.6;
4301
4303
  }
@@ -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,
@@ -5926,8 +5928,10 @@ var ChatWidget = ({
5926
5928
  const messagesChanged = messages.length !== previousMessagesLength.current;
5927
5929
  previousMessagesLength.current = messages.length;
5928
5930
  if (messagesChanged || isThinking) {
5929
- el.scrollTo({ top: el.scrollHeight, behavior: "smooth" });
5930
- savedScrollPosition.current = el.scrollHeight;
5931
+ requestAnimationFrame(() => {
5932
+ el.scrollTo({ top: el.scrollHeight, behavior: "smooth" });
5933
+ savedScrollPosition.current = el.scrollHeight;
5934
+ });
5931
5935
  }
5932
5936
  }, [messages, isThinking, isExpanded]);
5933
5937
  const messagesToRender = messages.length === 0 ? emptyState : messages;
@@ -7874,55 +7878,686 @@ var Navigation = ({
7874
7878
  };
7875
7879
  var Navigation_default = Navigation;
7876
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
+
7877
8513
  // src/PackageCard/PackageCard.styles.ts
7878
- var import_react46 = require("@emotion/react");
7879
- var cardContainerStyles3 = import_react46.css`
8514
+ var import_react53 = require("@emotion/react");
8515
+ var cardContainerStyles3 = import_react53.css`
7880
8516
  color: var(--text-primary);
7881
8517
  position: relative;
7882
8518
  width: 100%;
7883
- max-width: 300px;
8519
+ height: 100%;
7884
8520
  background: white;
7885
- border-radius: var(--spacing-4);
7886
8521
  overflow: hidden;
7887
- cursor: pointer;
7888
8522
  transition: all 0.2s ease;
7889
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
7890
-
7891
- &:hover {
7892
- transform: translateY(-2px);
7893
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
7894
- }
7895
8523
  `;
7896
- var imageContainerStyles = import_react46.css`
8524
+ var imageContainerStyles = import_react53.css`
7897
8525
  position: relative;
7898
8526
  width: 100%;
7899
- height: 200px;
8527
+ height: 260px;
7900
8528
  overflow: hidden;
7901
8529
  border-radius: var(--spacing-4);
7902
8530
  `;
7903
- var imageStyles2 = import_react46.css`
8531
+ var imageStyles2 = import_react53.css`
7904
8532
  width: 100%;
7905
- height: 100%;
8533
+ height: 260px;
7906
8534
  background-size: cover;
7907
8535
  background-position: center;
7908
8536
  background-repeat: no-repeat;
7909
- border-radius: var(--spacing-4) var(--spacing-4) 0 0;
8537
+ position: relative;
8538
+ background-color: lightgray;
7910
8539
  `;
7911
- var badgeStyles2 = import_react46.css`
8540
+ var badgeTopLeftStyles = import_react53.css`
7912
8541
  position: absolute;
7913
8542
  top: var(--spacing-3);
7914
8543
  left: var(--spacing-3);
7915
8544
  z-index: 2;
7916
8545
  `;
7917
- 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`
7918
8553
  position: absolute;
7919
8554
  top: var(--spacing-3);
7920
8555
  right: var(--spacing-3);
7921
8556
  width: 32px;
7922
8557
  height: 32px;
7923
- background: rgba(255, 255, 255, 0.2);
7924
- backdrop-filter: blur(8px);
8558
+ background: rgba(255, 255, 255, 0.4);
7925
8559
  border-radius: 50%;
8560
+ border: 1px solid var(--border-primary);
7926
8561
  display: flex;
7927
8562
  align-items: center;
7928
8563
  justify-content: center;
@@ -7936,103 +8571,180 @@ var heartIconStyles = import_react46.css`
7936
8571
  transform: scale(1.1);
7937
8572
  }
7938
8573
  `;
7939
- var contentStyles2 = import_react46.css`
7940
- 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;
7941
8592
  `;
7942
8593
 
7943
8594
  // src/PackageCard/PackageCard.tsx
7944
- var import_jsx_runtime248 = require("@emotion/react/jsx-runtime");
8595
+ var import_jsx_runtime250 = require("@emotion/react/jsx-runtime");
7945
8596
  var PackageCard = ({
7946
8597
  images,
7947
8598
  title,
7948
8599
  subtitle,
7949
8600
  startingPrice,
7950
- tripsLeft,
7951
8601
  isFavorited = false,
7952
8602
  onFavoriteClick,
7953
8603
  onClick,
7954
8604
  className,
7955
- days,
7956
- guests,
7957
- hasLodging,
8605
+ badges,
8606
+ availabilityBadges,
8607
+ id,
8608
+ hasContentBackground = false,
7958
8609
  ...rest
7959
8610
  }) => {
7960
- const mainImage = images[0] || "";
7961
- return /* @__PURE__ */ (0, import_jsx_runtime248.jsxs)(Box_default, { css: cardContainerStyles3, className, ...rest, children: [
7962
- /* @__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: [
7963
- tripsLeft && /* @__PURE__ */ (0, import_jsx_runtime248.jsxs)(AvailabilityBadge_default, { variant: "warning", css: badgeStyles2, children: [
7964
- tripsLeft,
7965
- " Trips Left"
7966
- ] }),
7967
- /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(
7968
- Box_default,
7969
- {
7970
- css: heartIconStyles,
7971
- onClick: (e) => {
7972
- e.stopPropagation();
7973
- onFavoriteClick == null ? void 0 : onFavoriteClick();
7974
- },
7975
- children: /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(
7976
- 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,
7977
8663
  {
7978
- variant: isFavorited ? "HeartSolid" : "Heart",
7979
- 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
+ )
7980
8685
  }
7981
8686
  )
7982
- }
7983
- )
7984
- ] }) }),
7985
- /* @__PURE__ */ (0, import_jsx_runtime248.jsxs)(Box_default, { css: contentStyles2, children: [
7986
- /* @__PURE__ */ (0, import_jsx_runtime248.jsxs)(
7987
- Box_default,
7988
- {
7989
- onClick,
7990
- display: "flex",
7991
- flexDirection: "column",
7992
- gap: "var(--spacing-1)",
7993
- mb: "var(--spacing-4)",
7994
- children: [
7995
- /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(Text_default, { size: "md", fontWeight: "bold", children: title }) }),
7996
- /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(Text_default, { size: "xs", fontWeight: "bold", children: subtitle }) }),
7997
- /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime248.jsxs)(Text_default, { size: "xs", fontWeight: "normal", children: [
7998
- "Starting Price ",
7999
- startingPrice,
8000
- " / Guest"
8001
- ] }) })
8002
- ]
8003
- }
8004
- ),
8005
- /* @__PURE__ */ (0, import_jsx_runtime248.jsxs)(Box_default, { display: "flex", gap: "var(--spacing-3)", alignItems: "center", children: [
8006
- days && /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(
8007
- IconLabel_default,
8008
- {
8009
- variant: "Calendar",
8010
- label: `${days} Day${days !== 1 ? "s" : ""}`
8011
- }
8012
- ),
8013
- guests && /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(
8014
- IconLabel_default,
8687
+ ] }),
8688
+ /* @__PURE__ */ (0, import_jsx_runtime250.jsxs)(
8689
+ Box_default,
8015
8690
  {
8016
- variant: "User",
8017
- 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
+ ]
8018
8731
  }
8019
- ),
8020
- hasLodging && /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(IconLabel_default, { variant: "House", label: "Lodging" })
8021
- ] })
8022
- ] })
8023
- ] });
8732
+ )
8733
+ ]
8734
+ }
8735
+ );
8024
8736
  };
8025
8737
  var PackageCard_default = PackageCard;
8026
8738
 
8027
8739
  // src/PackageHeader/PackageHeader.tsx
8028
- var import_jsx_runtime249 = require("@emotion/react/jsx-runtime");
8740
+ var import_jsx_runtime251 = require("@emotion/react/jsx-runtime");
8029
8741
  var PackageHeader = ({
8030
8742
  header,
8031
8743
  subheader,
8032
8744
  features,
8033
8745
  className
8034
8746
  }) => {
8035
- return /* @__PURE__ */ (0, import_jsx_runtime249.jsxs)(
8747
+ return /* @__PURE__ */ (0, import_jsx_runtime251.jsxs)(
8036
8748
  Box_default,
8037
8749
  {
8038
8750
  display: "flex",
@@ -8041,9 +8753,9 @@ var PackageHeader = ({
8041
8753
  color: "var(--text-primary)",
8042
8754
  className,
8043
8755
  children: [
8044
- /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(Heading_default, { size: "xs", fontWeight: "bold", children: header }),
8045
- subheader && /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(Text_default, { children: subheader }),
8046
- 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 })
8047
8759
  ]
8048
8760
  }
8049
8761
  );
@@ -8051,8 +8763,8 @@ var PackageHeader = ({
8051
8763
  var PackageHeader_default = PackageHeader;
8052
8764
 
8053
8765
  // src/ReviewCard/components/ReviewImages.styles.ts
8054
- var import_react47 = require("@emotion/react");
8055
- var imageStyles3 = import_react47.css`
8766
+ var import_react54 = require("@emotion/react");
8767
+ var imageStyles3 = import_react54.css`
8056
8768
  flex: 1;
8057
8769
  min-width: 0;
8058
8770
  max-width: 100%;
@@ -8063,13 +8775,13 @@ var imageStyles3 = import_react47.css`
8063
8775
  `;
8064
8776
 
8065
8777
  // src/ReviewCard/components/ReviewImages.tsx
8066
- var import_jsx_runtime250 = require("@emotion/react/jsx-runtime");
8778
+ var import_jsx_runtime252 = require("@emotion/react/jsx-runtime");
8067
8779
  var ReviewImages = ({ images, maxImages = 3 }) => {
8068
8780
  const displayImages = images.slice(0, maxImages);
8069
8781
  if (displayImages.length === 0) {
8070
8782
  return null;
8071
8783
  }
8072
- 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)(
8073
8785
  "img",
8074
8786
  {
8075
8787
  src: image,
@@ -8082,7 +8794,7 @@ var ReviewImages = ({ images, maxImages = 3 }) => {
8082
8794
  var ReviewImages_default = ReviewImages;
8083
8795
 
8084
8796
  // src/ReviewCard/components/ReviewReply.tsx
8085
- var import_jsx_runtime251 = require("@emotion/react/jsx-runtime");
8797
+ var import_jsx_runtime253 = require("@emotion/react/jsx-runtime");
8086
8798
  var ReviewReply = ({
8087
8799
  avatarSrc,
8088
8800
  name,
@@ -8091,7 +8803,7 @@ var ReviewReply = ({
8091
8803
  label,
8092
8804
  rating
8093
8805
  }) => {
8094
- return /* @__PURE__ */ (0, import_jsx_runtime251.jsxs)(
8806
+ return /* @__PURE__ */ (0, import_jsx_runtime253.jsxs)(
8095
8807
  Box_default,
8096
8808
  {
8097
8809
  backgroundColor: "var(--surface-neutral)",
@@ -8101,7 +8813,7 @@ var ReviewReply = ({
8101
8813
  flexDirection: "column",
8102
8814
  gap: "var(--spacing-3)",
8103
8815
  children: [
8104
- /* @__PURE__ */ (0, import_jsx_runtime251.jsxs)(
8816
+ /* @__PURE__ */ (0, import_jsx_runtime253.jsxs)(
8105
8817
  Box_default,
8106
8818
  {
8107
8819
  display: "flex",
@@ -8109,7 +8821,7 @@ var ReviewReply = ({
8109
8821
  justifyContent: "space-between",
8110
8822
  gap: "var(--spacing-2)",
8111
8823
  children: [
8112
- /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(
8824
+ /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(
8113
8825
  UserCard_default,
8114
8826
  {
8115
8827
  avatarSrc,
@@ -8118,11 +8830,11 @@ var ReviewReply = ({
8118
8830
  rating
8119
8831
  }
8120
8832
  ),
8121
- /* @__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 })
8122
8834
  ]
8123
8835
  }
8124
8836
  ),
8125
- /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(Text_default, { children: content })
8837
+ /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(Text_default, { children: content })
8126
8838
  ]
8127
8839
  }
8128
8840
  );
@@ -8130,7 +8842,7 @@ var ReviewReply = ({
8130
8842
  var ReviewReply_default = ReviewReply;
8131
8843
 
8132
8844
  // src/ReviewCard/ReviewCard.tsx
8133
- var import_jsx_runtime252 = require("@emotion/react/jsx-runtime");
8845
+ var import_jsx_runtime254 = require("@emotion/react/jsx-runtime");
8134
8846
  var ReviewCard = ({
8135
8847
  avatarSrc,
8136
8848
  name,
@@ -8142,7 +8854,7 @@ var ReviewCard = ({
8142
8854
  replies = [],
8143
8855
  className
8144
8856
  }) => {
8145
- return /* @__PURE__ */ (0, import_jsx_runtime252.jsxs)(
8857
+ return /* @__PURE__ */ (0, import_jsx_runtime254.jsxs)(
8146
8858
  Box_default,
8147
8859
  {
8148
8860
  backgroundColor: "white",
@@ -8153,7 +8865,7 @@ var ReviewCard = ({
8153
8865
  gap: "var(--spacing-4)",
8154
8866
  className,
8155
8867
  children: [
8156
- /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(
8868
+ /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(
8157
8869
  UserCard_default,
8158
8870
  {
8159
8871
  avatarSrc,
@@ -8162,10 +8874,10 @@ var ReviewCard = ({
8162
8874
  rating
8163
8875
  }
8164
8876
  ),
8165
- availabilityBadge && /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(AvailabilityBadge_default, { variant: availabilityBadge.variant, children: availabilityBadge.text }) }),
8166
- /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(Text_default, { size: "md", children: content }),
8167
- images.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(ReviewImages_default, { images }),
8168
- 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)(
8169
8881
  ReviewReply_default,
8170
8882
  {
8171
8883
  avatarSrc: reply.avatarSrc,
@@ -8184,12 +8896,12 @@ var ReviewCard = ({
8184
8896
  var ReviewCard_default = ReviewCard;
8185
8897
 
8186
8898
  // src/Reviews/Reviews.tsx
8187
- var import_react48 = require("@emotion/react");
8899
+ var import_react55 = require("@emotion/react");
8188
8900
 
8189
8901
  // src/Reviews/components/ReviewItem.tsx
8190
- var import_jsx_runtime253 = require("@emotion/react/jsx-runtime");
8902
+ var import_jsx_runtime255 = require("@emotion/react/jsx-runtime");
8191
8903
  var ReviewItem = ({ label, rating }) => {
8192
- return /* @__PURE__ */ (0, import_jsx_runtime253.jsxs)(
8904
+ return /* @__PURE__ */ (0, import_jsx_runtime255.jsxs)(
8193
8905
  Box_default,
8194
8906
  {
8195
8907
  display: "flex",
@@ -8197,10 +8909,10 @@ var ReviewItem = ({ label, rating }) => {
8197
8909
  alignItems: "center",
8198
8910
  width: "100%",
8199
8911
  children: [
8200
- /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(Text_default, { fontWeight: "semibold", children: label }),
8201
- /* @__PURE__ */ (0, import_jsx_runtime253.jsxs)(Box_default, { display: "flex", alignItems: "center", gap: "var(--spacing-2)", children: [
8202
- /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(Icon_default, { variant: "StarSolid", size: "large", fill: "var(--surface-action-2)" }),
8203
- /* @__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: [
8204
8916
  rating,
8205
8917
  "/5"
8206
8918
  ] })
@@ -8212,14 +8924,14 @@ var ReviewItem = ({ label, rating }) => {
8212
8924
  var ReviewItem_default = ReviewItem;
8213
8925
 
8214
8926
  // src/Reviews/Reviews.tsx
8215
- var import_jsx_runtime254 = require("@emotion/react/jsx-runtime");
8927
+ var import_jsx_runtime256 = require("@emotion/react/jsx-runtime");
8216
8928
  var Reviews = ({
8217
8929
  averageRating,
8218
8930
  totalReviews,
8219
8931
  items,
8220
8932
  className
8221
8933
  }) => {
8222
- return /* @__PURE__ */ (0, import_jsx_runtime254.jsxs)(
8934
+ return /* @__PURE__ */ (0, import_jsx_runtime256.jsxs)(
8223
8935
  Box_default,
8224
8936
  {
8225
8937
  width: "100%",
@@ -8232,7 +8944,7 @@ var Reviews = ({
8232
8944
  p: "var(--spacing-4)",
8233
8945
  className,
8234
8946
  children: [
8235
- /* @__PURE__ */ (0, import_jsx_runtime254.jsxs)(
8947
+ /* @__PURE__ */ (0, import_jsx_runtime256.jsxs)(
8236
8948
  Box_default,
8237
8949
  {
8238
8950
  display: "flex",
@@ -8240,12 +8952,12 @@ var Reviews = ({
8240
8952
  alignItems: "center",
8241
8953
  gap: "var(--spacing-2)",
8242
8954
  children: [
8243
- /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(Heading_default, { size: "sm", fontWeight: "bold", color: "text-primary", children: averageRating.toFixed(1) }),
8244
- /* @__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)(
8245
8957
  StarRating_default,
8246
8958
  {
8247
8959
  rating: Math.floor(averageRating),
8248
- css: import_react48.css`
8960
+ css: import_react55.css`
8249
8961
  > svg {
8250
8962
  height: 40px;
8251
8963
  width: 40px;
@@ -8253,7 +8965,7 @@ var Reviews = ({
8253
8965
  `
8254
8966
  }
8255
8967
  ),
8256
- /* @__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: [
8257
8969
  "Overall Rating \u2022 ",
8258
8970
  totalReviews,
8259
8971
  " Review",
@@ -8262,14 +8974,14 @@ var Reviews = ({
8262
8974
  ]
8263
8975
  }
8264
8976
  ),
8265
- /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(
8977
+ /* @__PURE__ */ (0, import_jsx_runtime256.jsx)(
8266
8978
  Box_default,
8267
8979
  {
8268
8980
  display: "flex",
8269
8981
  flexDirection: "column",
8270
8982
  gap: "var(--spacing-2)",
8271
8983
  width: "100%",
8272
- 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))
8273
8985
  }
8274
8986
  )
8275
8987
  ]
@@ -8279,7 +8991,7 @@ var Reviews = ({
8279
8991
  var Reviews_default = Reviews;
8280
8992
 
8281
8993
  // src/Reviews/ReviewsShowcase.tsx
8282
- var import_jsx_runtime255 = require("@emotion/react/jsx-runtime");
8994
+ var import_jsx_runtime257 = require("@emotion/react/jsx-runtime");
8283
8995
  var ReviewsShowcase = () => {
8284
8996
  const sampleData = {
8285
8997
  averageRating: 4,
@@ -8301,7 +9013,7 @@ var ReviewsShowcase = () => {
8301
9013
  { label: "Game Abundance", rating: 5 }
8302
9014
  ]
8303
9015
  };
8304
- return /* @__PURE__ */ (0, import_jsx_runtime255.jsxs)(
9016
+ return /* @__PURE__ */ (0, import_jsx_runtime257.jsxs)(
8305
9017
  Box_default,
8306
9018
  {
8307
9019
  display: "flex",
@@ -8309,24 +9021,24 @@ var ReviewsShowcase = () => {
8309
9021
  gap: "var(--spacing-8)",
8310
9022
  p: "var(--spacing-6)",
8311
9023
  children: [
8312
- /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Heading_default, { size: "lg", children: "Reviews Component Showcase" }),
8313
- /* @__PURE__ */ (0, import_jsx_runtime255.jsxs)(Box_default, { display: "flex", flexDirection: "column", gap: "var(--spacing-4)", children: [
8314
- /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Heading_default, { size: "md", children: "Default Reviews" }),
8315
- /* @__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 }) })
8316
9028
  ] }),
8317
- /* @__PURE__ */ (0, import_jsx_runtime255.jsxs)(Box_default, { display: "flex", flexDirection: "column", gap: "var(--spacing-4)", children: [
8318
- /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Heading_default, { size: "md", children: "High Rating Reviews" }),
8319
- /* @__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 }) })
8320
9032
  ] }),
8321
- /* @__PURE__ */ (0, import_jsx_runtime255.jsxs)(Box_default, { display: "flex", flexDirection: "column", gap: "var(--spacing-4)", children: [
8322
- /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Heading_default, { size: "md", children: "Mobile Layout (320px width)" }),
8323
- /* @__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)(
8324
9036
  Box_default,
8325
9037
  {
8326
9038
  maxWidth: "320px",
8327
9039
  border: "1px solid var(--color-neutral-200)",
8328
9040
  p: "var(--spacing-4)",
8329
- children: /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(Reviews_default, { ...sampleData })
9041
+ children: /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(Reviews_default, { ...sampleData })
8330
9042
  }
8331
9043
  )
8332
9044
  ] })
@@ -8372,6 +9084,8 @@ var ReviewsShowcase_default = ReviewsShowcase;
8372
9084
  ReviewCard,
8373
9085
  Reviews,
8374
9086
  ReviewsShowcase,
9087
+ ScrollingCarousel,
9088
+ ScrollingCarouselStep,
8375
9089
  Select,
8376
9090
  Spinner,
8377
9091
  StarRating,