{"version":3,"file":"CouponModule.Do1kdVGR.mjs","names":["useRef","useState","useContext","useContext","containerStyle","wrapperStyle","wrapperStyleByBreakpoint","iconColorByTheme","descriptionStyle","Default","createContext","useRef","useContext","useRef","createContext","createContext","useState","useMemo","useContext","initialState","useRef","useCallback","createContext","Root","forwardRef","useRef","useContext","forwardRef","isObject","getPrototype","objectTag","getPrototype","hasOwnProperty","hasOwnProperty","isObject","hasOwnProperty","isObject","isObject","baseSetToString","isObject","getPrototype","arrayBufferTag","boolTag","dateTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","mapTag","numberTag","stringTag","regexpTag","setTag","symbolTag","getTag","mapTag","getTag","setTag","CLONE_DEEP_FLAG","CLONE_SYMBOLS_FLAG","isObject","getTag","Default","forwardRef","useContext","containerStyle","createContext","useContext","forwardRef","useRef","useMemo","useState","containerStyle","Default","wrapperResetStyle","wrapperStyle","wrapperStyleByBreakpoint","forwardRef","containerStyle","useRef","useMemo","useState","forwardRef","Default","createContext","Root","forwardRef","useMemo","getDisplayCount","useRef","Fragment","useRef","forwardRef","containerStyle","createContext","useContext","useContext","useRef","useCallback","isFunction","formatProducts","useMemo","useCurrentUser","containerStyle","Default","useRef","useMemo","containerStyle","COUPON_CONTROLS","createContext","forwardRef","useCallback","containerStyle","useContext","forwardRef","forwardRef","containerStyle","forwardRef","containerStyle","containerStyleByLayout","forwardRef","forwardRef","sortCouponsByDiscountValueAscending","useMemo","useState","useCurrentUser","useMemo","useRef","useState","Fragment","COUPON_CONTROLS"],"sources":["https:/asset.29cm.co.kr/contents/framer/components/@shared/SWRErrorBoundary/SWRErrorBoundary.js","https:/asset.29cm.co.kr/contents/framer/components/systems/Button/Button.constants.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/providers/ThemeProvider/ThemeProvider.hooks.js","https:/asset.29cm.co.kr/contents/framer/hooks/useTheme.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/providers/BreakpointProvider/BreakpointProvider.hooks.js","https:/asset.29cm.co.kr/contents/framer/hooks/useBreakpoint.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/ErrorFallback/ErrorFallback.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/NoContent/NoContent.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/IntersectionProvider/IntersectionProvider.js","https:/asset.29cm.co.kr/contents/framer/hooks/events/useTrackViewComponentEvent.js","https:/asset.29cm.co.kr/contents/framer/hooks/events/useTrackClickComponentEvent.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/EventTrackingProvider/EventTrackingProvider.hooks.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/EventTrackingProvider/EventTrackingProvider.js","https:/asset.29cm.co.kr/contents/framer/hooks/fetchers/useCategoryNewBuyerCoupon.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/providers/SegmentProvider/SegmentProvider.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/SectionLayout/SectionLayout.js","https:/asset.29cm.co.kr/contents/framer/styles/breakpoint.js","https:/asset.29cm.co.kr/contents/framer/libs/property-controls/breakpoint.js","https:/asset.29cm.co.kr/contents/framer/libs/property-controls/component-id.js","https:/asset.29cm.co.kr/contents/framer/libs/property-controls/segment.js","https:/asset.29cm.co.kr/contents/framer/styles/theme.js","https:/asset.29cm.co.kr/contents/framer/libs/property-controls/theme.js","https:/asset.29cm.co.kr/contents/framer/components/modules/query-store/query.store.js","https:/asset.29cm.co.kr/contents/framer/hooks/useInViewport.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/EventTrigger/Root.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/EventTrigger/Root.hooks.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/EventTrigger/Target.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/EventTrigger/index.js","https:/asset.29cm.co.kr/contents/framer/components/modules/module-store/module.store.js","https:/asset.29cm.co.kr/contents/framer/components/modules/hooks.js","https:/asset.29cm.co.kr/contents/framer/components/modules/types.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_defineProperty.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_baseAssignValue.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_assignMergeValue.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_createBaseFor.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_baseFor.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_cloneBuffer.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_cloneArrayBuffer.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_cloneTypedArray.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_copyArray.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_baseCreate.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_getPrototype.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_initCloneObject.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/isArrayLikeObject.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/isPlainObject.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_safeGet.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_assignValue.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_copyObject.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_nativeKeysIn.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_baseKeysIn.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/keysIn.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/toPlainObject.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_baseMergeDeep.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_baseMerge.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/identity.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_apply.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_overRest.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/constant.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_baseSetToString.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_shortOut.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_setToString.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_baseRest.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_isIterateeCall.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_createAssigner.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/merge.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_arrayEach.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_baseAssign.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_baseAssignIn.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_copySymbols.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_getSymbolsIn.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_copySymbolsIn.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_getAllKeysIn.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_initCloneArray.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_cloneDataView.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_cloneRegExp.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_cloneSymbol.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_initCloneByTag.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_baseIsMap.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/isMap.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_baseIsSet.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/isSet.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/_baseClone.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/cloneDeep.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Products/Root.utils.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/layouts/Grid.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Products/Root.hooks.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/ArrowIcon/ArrowIcon.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Products/HorizontalScrollContext.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Products/HorizontalList.js","https:/asset.29cm.co.kr/contents/framer/utils/fromEntries.js","https:/asset.29cm.co.kr/contents/framer/utils/createSlices.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/ProductCardSkeleton/ProductCardSkeleton.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Products/useHorizontalVirtualItem.js","https:/asset.29cm.co.kr/contents/framer/utils/isLast.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/noop.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Products/Item.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Products/PeekColumnDivider.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Products/VerticalList.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Products/Root.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/Lazy/Lazy.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Products/Card.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Products/index.js","https:/asset.29cm.co.kr/contents/framer/utils/hideParentElement.js","https:/asset.29cm.co.kr/contents/framer/utils/spacing.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsElementProvider/ProductsElementProvider.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsModule.constants.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsModule.types.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/IntersectionProvider/IntersectionProvider.hooks.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsElementProvider/ProductsElementProvider.hooks.js","https:/asset.29cm.co.kr/contents/framer/node_modules/swr/infinite/dist/index.js","https:/asset.29cm.co.kr/contents/framer/apis/keyword-collections/KeywordCollectionApiService.js","https:/asset.29cm.co.kr/contents/framer/types/models/sort.js","https:/asset.29cm.co.kr/contents/framer/apis/best/BestApiService.js","https:/asset.29cm.co.kr/contents/framer/apis/display-bff/DisplayBffApiService.js","https:/asset.29cm.co.kr/contents/framer/apis/display-bff/DisplayBffApiService.types.js","https:/asset.29cm.co.kr/contents/framer/apis/recommend/RecommendApiService.js","https:/asset.29cm.co.kr/contents/framer/components/modules/mock.js","https:/asset.29cm.co.kr/contents/framer/components/modules/utils/key.js","https:/asset.29cm.co.kr/contents/framer/node_modules/lodash-es/last.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsModule.hooks.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsElement/ProductsElement.hooks.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsElement/PaginationElement/ExpandButtonElement/ExpandButtonElement.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsElement/PaginationElement/VerticalPaginationElement/VerticalPaginationElement.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsElement/PaginationElement/PaginationElement.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsElement/ProductsElement.utils.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsElement/ProductsElement.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/LinkedProductsModule/LinkedProductsModule.js","https:/asset.29cm.co.kr/contents/framer/libs/property-controls/helpers.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/CouponModule.types.js","https:/asset.29cm.co.kr/contents/framer/components/modules/controls.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsModule.controls.js","https:/asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsModule.js","https:/framerusercontent.com/modules/m3WciOarwtFjChbrrQMz/UgKfY5LLfEJhNhGuri0i/ProductsModule.js","https:/asset.29cm.co.kr/contents/framer/libs/property-controls/coupon.js","https:/asset.29cm.co.kr/contents/framer/utils/object.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/Coupon/Root.constants.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/Coupon/Root.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/Coupon/Root.hooks.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/Coupon/Description.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/Coupon/Divider.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/Coupon/Button.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/Coupon/Summary.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/Coupon/Title.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/Coupon/index.js","https:/asset.29cm.co.kr/contents/framer/hooks/fetchers/useFetchCouponsDownloadStatus.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/CouponModule.utils.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/CouponModule.hooks.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/NoticesElement/NoticesElement.utils.js","https:/asset.29cm.co.kr/contents/framer/libs/property-controls/coupon-notices.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/NoticesElement/NoticesElement.js","https:/asset.29cm.co.kr/contents/framer/node_modules/date-fns/locale/ko/_lib/formatDistance.js","https:/asset.29cm.co.kr/contents/framer/node_modules/date-fns/locale/ko/_lib/formatLong.js","https:/asset.29cm.co.kr/contents/framer/node_modules/date-fns/locale/ko/_lib/formatRelative.js","https:/asset.29cm.co.kr/contents/framer/node_modules/date-fns/locale/ko/_lib/localize.js","https:/asset.29cm.co.kr/contents/framer/node_modules/date-fns/locale/ko/_lib/match.js","https:/asset.29cm.co.kr/contents/framer/node_modules/date-fns/locale/ko.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/CouponElement/CouponElement.utils.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/CouponElement/CouponElement.hooks.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/CouponElement/CouponElement.validate.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/CouponElement/CouponElement.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/LinkedCouponModule/LinkedCouponModule.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/CouponModule.controls.js","https:/asset.29cm.co.kr/contents/framer/apis/collection/CollectionApiService.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/AutoCouponModule/AutoCouponModule.hooks.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/AutoCouponModule/AutoCouponModule.js","https:/asset.29cm.co.kr/contents/framer/components/modules/CouponModule/CouponModule.js","https:/framerusercontent.com/modules/v2w1uRsZPJslVNIRLCeW/PgjboXO18lboOdhFrAoz/CouponModule.js"],"sourcesContent":["import { jsx } from \"react/jsx-runtime\";\nimport { useRef, useState } from \"react\";\nimport { SWRConfig } from \"../../../node_modules/swr/core/dist/index.js\";\nconst SWRErrorBoundary = ({\n  children,\n  fallback,\n  errorRetryCount = 1,\n  errorRetryInterval = 5 * 1e3\n}) => {\n  const exhaustedKeys = useRef(/* @__PURE__ */ new Set());\n  const [isError, setIsError] = useState(false);\n  const retry = () => setIsError(false);\n  return /* @__PURE__ */ jsx(SWRConfig, { value: {\n    /**\n     * NOTE(임규민): retry count 를 모두 소진했을 경우에만 fallback 이 보여져야 하기 때문에, config 의 기본 옵션 대신 override callback 을 사용합니다.\n     * @see {@link https://swr.vercel.app/ko/docs/error-handling#error-retry}\n     */\n    onErrorRetry: (_error, key, _config, revalidate, {\n      retryCount\n    }) => {\n      if (retryCount > errorRetryCount) {\n        return;\n      }\n      if (retryCount >= errorRetryCount) {\n        exhaustedKeys.current.add(key);\n      }\n      setTimeout(() => {\n        revalidate({\n          retryCount\n        });\n      }, errorRetryInterval);\n    },\n    onError: (_error, key) => {\n      if (!exhaustedKeys.current.has(key)) {\n        return;\n      }\n      exhaustedKeys.current.delete(key);\n      setIsError(true);\n    }\n  }, children: isError ? fallback == null ? void 0 : fallback(retry) : children });\n};\nexport {\n  SWRErrorBoundary\n};\n","import \"react/jsx-runtime\";\nimport { download } from \"../../@shared/Icon/assets/download.js\";\nimport { plus } from \"../../@shared/Icon/assets/plus.js\";\nimport { chevronRight } from \"../../@shared/Icon/assets/chevronRight.js\";\nimport { chevronDown } from \"../../@shared/Icon/assets/chevronDown.js\";\nimport { heart } from \"../../@shared/Icon/assets/heart.js\";\nimport { bell } from \"../../@shared/Icon/assets/bell.js\";\nimport { gift } from \"../../@shared/Icon/assets/gift.js\";\nimport { share } from \"../../@shared/Icon/assets/share.js\";\nimport { scrap } from \"../../@shared/Icon/assets/scrap.js\";\nimport { lock } from \"../../@shared/Icon/assets/lock.js\";\nimport { lockOff } from \"../../@shared/Icon/assets/lockOff.js\";\nconst prefixIconAssets = {\n  scrap,\n  lock,\n  lockOff,\n  heart,\n  bell,\n  gift,\n  share\n};\nconst postfixIconAssets = {\n  plus,\n  chevronRight,\n  download,\n  chevronDown,\n  share\n};\nconst PREFIX_ICON_OPTIONS = Object.keys(prefixIconAssets);\nconst POSTFIX_ICON_OPTIONS = Object.keys(postfixIconAssets);\nexport {\n  POSTFIX_ICON_OPTIONS,\n  PREFIX_ICON_OPTIONS,\n  postfixIconAssets,\n  prefixIconAssets\n};\n","import { useContext } from \"react\";\nimport { ThemeContext } from \"./ThemeProvider.js\";\nconst useThemeContext = () => {\n  return useContext(ThemeContext);\n};\nexport {\n  useThemeContext\n};\n","import \"../components/@shared/providers/ThemeProvider/ThemeProvider.js\";\nimport { useThemeContext } from \"../components/@shared/providers/ThemeProvider/ThemeProvider.hooks.js\";\nconst useTheme = () => {\n  const {\n    theme\n  } = useThemeContext();\n  return theme;\n};\nexport {\n  useTheme\n};\n","import { useContext } from \"react\";\nimport { BreakpointContext } from \"./BreakpointProvider.js\";\nconst useBreakpointContext = () => {\n  return useContext(BreakpointContext);\n};\nexport {\n  useBreakpointContext\n};\n","import \"../components/@shared/providers/BreakpointProvider/BreakpointProvider.js\";\nimport { useBreakpointContext } from \"../components/@shared/providers/BreakpointProvider/BreakpointProvider.hooks.js\";\nconst useBreakpoint = () => {\n  const {\n    breakpoint\n  } = useBreakpointContext();\n  return breakpoint;\n};\nexport {\n  useBreakpoint\n};\n","import { jsx, jsxs } from \"react/jsx-runtime\";\nimport { Icon } from \"../Icon/Icon.js\";\nimport \"react\";\nimport \"../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../config/index.js\";\nimport \"../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../apis/user/UserApiService.js\";\nimport \"../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../hooks/stores/content/content.store.js\";\nimport \"../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../hooks/stores/toast/toast.store.js\";\nimport { useTheme } from \"../../../hooks/useTheme.js\";\nimport { useBreakpoint } from \"../../../hooks/useBreakpoint.js\";\nimport \"../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react-dom\";\nimport \"../../systems/Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../hooks/useFeatureFlag.js\";\nimport \"../../../utils/redirectLogin.js\";\nimport \"../../../utils/event-properties/source.js\";\nimport { Button as Default } from \"../Button/Button.js\";\nimport { typography } from \"../../../styles/typography.js\";\nconst ErrorFallback = ({\n  iconType,\n  iconSize = 40,\n  title,\n  descriptions,\n  buttonText,\n  buttonPrefixIcon,\n  buttonPostfixIcon,\n  onButtonClick\n}) => {\n  const breakpoint = useBreakpoint();\n  const theme = useTheme();\n  const errorFallbackDescriptions = typeof descriptions === \"string\" ? [descriptions] : descriptions;\n  return /* @__PURE__ */ jsx(\"div\", { style: {\n    ...containerStyle,\n    ...containerStyleByBreakpoint[breakpoint]\n  }, children: /* @__PURE__ */ jsxs(\"div\", { style: {\n    ...wrapperStyle,\n    ...wrapperStyleByTheme[theme],\n    ...wrapperStyleByBreakpoint[breakpoint]\n  }, children: [\n    /* @__PURE__ */ jsx(Icon, { type: iconType, size: iconSize, weight: \"light\", color: iconColorByTheme[theme] }),\n    /* @__PURE__ */ jsxs(\"div\", { style: detailLayout, children: [\n      /* @__PURE__ */ jsx(\"span\", { style: {\n        ...titleStyle,\n        ...titleStyleByTheme[theme]\n      }, children: title }),\n      /* @__PURE__ */ jsx(\"div\", { style: {\n        ...descriptionStyle,\n        ...descriptionStyleByTheme[theme]\n      }, children: errorFallbackDescriptions.map((description, index) => (\n        // eslint-disable-next-line react/no-array-index-key\n        /* @__PURE__ */ jsx(\"span\", { children: description }, index)\n      )) })\n    ] }),\n    /* @__PURE__ */ jsx(Default, { ...toIconProps(buttonPrefixIcon, buttonPostfixIcon), variant: \"custom\", size: \"xSmall\", backgroundColor: buttonColorByTheme[theme].backgroundColor, color: buttonColorByTheme[theme].color, onClick: onButtonClick, children: buttonText })\n  ] }) });\n};\nconst toIconProps = (prefixIcon, postfixIcon) => {\n  if (!postfixIcon) {\n    return {\n      prefixIcon\n    };\n  }\n  return {\n    postfixIcon\n  };\n};\nconst containerStyle = {\n  width: \"100%\",\n  paddingBottom: 16\n};\nconst containerStyleByBreakpoint = {\n  desktop: {\n    paddingLeft: 0,\n    paddingRight: 0\n  },\n  tablet: {\n    paddingLeft: 16,\n    paddingRight: 16\n  },\n  mobile: {\n    paddingLeft: 16,\n    paddingRight: 16\n  }\n};\nconst wrapperStyle = {\n  width: \"100%\",\n  maxWidth: 1080,\n  display: \"flex\",\n  flexDirection: \"column\",\n  justifyContent: \"center\",\n  alignItems: \"center\",\n  gap: 8,\n  borderRadius: \"6px\"\n};\nconst wrapperStyleByTheme = {\n  light: {\n    backgroundColor: \"#F4F4F4\"\n  },\n  dark: {\n    backgroundColor: \"#19191A\"\n  }\n};\nconst wrapperStyleByBreakpoint = {\n  desktop: {\n    padding: \"40px 16px\"\n  },\n  tablet: {\n    padding: \"24px 16px\"\n  },\n  mobile: {\n    padding: \"24px 16px\"\n  }\n};\nconst iconColorByTheme = {\n  light: \"#000000\",\n  dark: \"#FFFFFF\"\n};\nconst buttonColorByTheme = {\n  light: {\n    backgroundColor: \"#ffffff\",\n    color: \"#000000\"\n  },\n  dark: {\n    backgroundColor: \"#474747\",\n    color: \"#FFFFFF\"\n  }\n};\nconst detailLayout = {\n  display: \"flex\",\n  flexDirection: \"column\",\n  alignItems: \"center\",\n  gap: \"4px\",\n  textAlign: \"center\",\n  paddingBottom: \"8px\"\n};\nconst titleStyle = {\n  ...typography(18, 500)\n};\nconst titleStyleByTheme = {\n  light: {\n    color: \"#000000\"\n  },\n  dark: {\n    color: \"#FFFFFF\"\n  }\n};\nconst descriptionStyle = {\n  display: \"flex\",\n  flexDirection: \"column\",\n  whiteSpace: \"pre-wrap\",\n  ...typography(14, 400)\n};\nconst descriptionStyleByTheme = {\n  light: {\n    color: \"#474747\"\n  },\n  dark: {\n    color: \"#A0A0A0\"\n  }\n};\nexport {\n  ErrorFallback\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { ErrorFallback } from \"../../../@shared/ErrorFallback/ErrorFallback.js\";\nconst NoContent = ({\n  onClick\n}) => {\n  return /* @__PURE__ */ jsx(ErrorFallback, { iconType: \"clock\", iconSize: 40, title: \"서비스 지연 중\", descriptions: `현재 접속량이 많아 서비스가 지연되고 있습니다.\n잠시 후 ‘새로고침’ 해주세요.`, buttonText: \"새로고침\", buttonPrefixIcon: \"redo\", onButtonClick: onClick });\n};\nexport {\n  NoContent\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { useInView } from \"framer-motion\";\nimport { createContext, useRef } from \"react\";\nconst IntersectionContext = createContext({\n  isInView: false\n});\nconst IntersectionProvider = ({\n  children,\n  ...rest\n}) => {\n  const ref = useRef(null);\n  const isInView = useInView(ref, rest);\n  return /* @__PURE__ */ jsx(IntersectionContext.Provider, { value: {\n    isInView\n  }, children: /* @__PURE__ */ jsx(\"div\", { ref, style: {\n    width: \"100%\"\n  }, children }) });\n};\nexport {\n  IntersectionContext,\n  IntersectionProvider\n};\n","import { useAnalytics } from \"../analytics/useAnalytics.js\";\nimport { createContentEventProperties } from \"../../utils/event-properties/content.js\";\nimport \"../../utils/event-properties/source.js\";\nimport \"framer\";\nimport \"react\";\nconst useTrackViewComponentEvent = () => {\n  const {\n    trackAmplitude,\n    trackFirebase\n  } = useAnalytics();\n  const trackViewComponentEvent = (component, extra = {}) => {\n    const properties = {\n      ...createContentEventProperties(),\n      component,\n      ...extra\n    };\n    trackAmplitude(\"view_component_content\", properties);\n    trackFirebase(\"view_component_content\", properties);\n  };\n  return {\n    trackViewComponentEvent\n  };\n};\nexport {\n  useTrackViewComponentEvent\n};\n","import { useAnalytics } from \"../analytics/useAnalytics.js\";\nimport { createContentEventProperties } from \"../../utils/event-properties/content.js\";\nimport \"../../utils/event-properties/source.js\";\nimport \"framer\";\nimport \"react\";\nconst useTrackClickComponentEvent = () => {\n  const {\n    trackAmplitude,\n    trackFirebase\n  } = useAnalytics();\n  const trackClickComponentEvent = (component, extra = {}) => {\n    const properties = {\n      ...createContentEventProperties(),\n      component,\n      ...extra\n    };\n    trackAmplitude(\"click_component_content\", properties);\n    trackFirebase(\"click_component_content\", properties);\n  };\n  return {\n    trackClickComponentEvent\n  };\n};\nexport {\n  useTrackClickComponentEvent\n};\n","import { useContext, useRef, useEffect } from \"react\";\nimport { useInView } from \"framer-motion\";\nimport { useTrackViewComponentEvent } from \"../../../../hooks/events/useTrackViewComponentEvent.js\";\nimport { EventTrackingContext } from \"./EventTrackingProvider.js\";\nimport { useTrackClickComponentEvent } from \"../../../../hooks/events/useTrackClickComponentEvent.js\";\nimport { definedOnly } from \"../../../../utils/definedOnly.js\";\nimport { map } from \"../../../../utils/map.js\";\nconst useEventTrackingContext = () => {\n  const context = useContext(EventTrackingContext);\n  return context;\n};\nconst FALLBACK_COMPONENT_ID = \"unknown_section\";\nconst useComponentId = () => {\n  const {\n    componentId\n  } = useEventTrackingContext();\n  return componentId || FALLBACK_COMPONENT_ID;\n};\nconst useTrackEvent = () => {\n  const componentId = useComponentId();\n  const {\n    trackClickComponentEvent\n  } = useTrackClickComponentEvent();\n  const trackEvent = (extra) => {\n    const properties = map(definedOnly(extra), String);\n    trackClickComponentEvent(componentId, properties);\n  };\n  return {\n    trackEvent\n  };\n};\nconst useTrackViewEvent = (componentId) => {\n  const {\n    trackViewComponentEvent\n  } = useTrackViewComponentEvent();\n  const ref = useRef(null);\n  const isInView = useInView(ref, {\n    amount: 0.5\n  });\n  useEffect(() => {\n    if (!isInView) {\n      return;\n    }\n    trackViewComponentEvent(componentId);\n  }, [componentId, isInView]);\n  return ref;\n};\nexport {\n  FALLBACK_COMPONENT_ID,\n  useComponentId,\n  useEventTrackingContext,\n  useTrackEvent,\n  useTrackViewEvent\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { createContext } from \"react\";\nimport { useTrackViewEvent } from \"./EventTrackingProvider.hooks.js\";\nconst EventTrackingContext = createContext({\n  componentId: \"\"\n});\nconst EventTrackingProvider = ({\n  children,\n  componentId\n}) => {\n  const ref = useTrackViewEvent(componentId);\n  return /* @__PURE__ */ jsx(EventTrackingContext.Provider, { value: {\n    componentId\n  }, children: /* @__PURE__ */ jsx(\"div\", { ref, style: {\n    width: \"100%\"\n  }, children }) });\n};\nexport {\n  EventTrackingContext,\n  EventTrackingProvider\n};\n","import useSWR from \"../../node_modules/swr/core/dist/index.js\";\nimport { categoryFirstOrderApi } from \"../../apis/user-segment/CategoryFirstOrderApiService.js\";\nconst CATEGORY_COUPON_FIRST_ORDER_SEGMENT_FETCHER_KEY = \"category-coupon-first-order-segment\";\nconst useCategoryNewBuyerCoupon = (couponId) => {\n  return useSWR(couponId ? [CATEGORY_COUPON_FIRST_ORDER_SEGMENT_FETCHER_KEY, couponId] : null, () => categoryFirstOrderApi.getCategoryCouponFirstOrderSegment(Number(couponId)));\n};\nexport {\n  useCategoryNewBuyerCoupon\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { createContext, useState, useMemo, useContext } from \"react\";\nimport { useCurrentUser } from \"../../../../hooks/code-overrides/useCurrentUser.js\";\nimport { useUserFirstOrderSegment } from \"../../../../hooks/code-overrides/useUserTargetSegment.js\";\nimport { useCategoryNewBuyerCoupon } from \"../../../../hooks/fetchers/useCategoryNewBuyerCoupon.js\";\nimport \"../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport { useCategoryNewBuyerProduct } from \"../../../../hooks/fetchers/useCategoryNewBuyerProduct.js\";\nimport \"../../../../config/index.js\";\nimport \"../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../../apis/user/UserApiService.js\";\nimport \"../../../../apis/preuser/PreuserApiService.js\";\nimport { useIsMounted } from \"../../../../hooks/useIsMounted.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { isCanvas } from \"../../../../utils/framer/isCanvas.js\";\nimport { isFramerPreview } from \"../../../../utils/framer/isFramerPreview.js\";\nconst SegmentContext = createContext(void 0);\nconst SegmentProvider = ({\n  children,\n  segment = []\n}) => {\n  var _a, _b, _c, _d;\n  const groupId = (_b = (_a = segment.filter((seg) => seg.type === \"categoryNewBuyerProduct\")) == null ? void 0 : _a[0]) == null ? void 0 : _b.groupId;\n  const couponId = (_d = (_c = segment.filter((seg) => seg.type === \"categoryNewBuyerCoupon\")) == null ? void 0 : _c[0]) == null ? void 0 : _d.couponId;\n  const [currentSegments] = useState(segment);\n  const isSegmentConfigured = currentSegments.length > 0 && currentSegments.every((seg) => seg.type !== \"\");\n  const isMounted = useIsMounted(isSegmentConfigured);\n  const {\n    logged,\n    gender: userGender\n  } = useCurrentUser();\n  const {\n    data: userSegmentData,\n    isLoading: isUserSegmentLoading\n  } = useUserFirstOrderSegment(logged);\n  const {\n    data: categoryNewBuyerProductData,\n    isLoading: isCategoryNewBuyerProductLoading\n  } = useCategoryNewBuyerProduct(logged && groupId ? groupId : void 0);\n  const {\n    data: categoryNewBuyerCouponData,\n    isLoading: isCategoryNewBuyerCouponLoading\n  } = useCategoryNewBuyerCoupon(logged && couponId ? couponId : void 0);\n  const segmentValues = useMemo(() => {\n    var _a2, _b2, _c2;\n    const isLogin = logged;\n    const guest = !logged;\n    const isNewBuyer = ((_a2 = userSegmentData == null ? void 0 : userSegmentData.data) == null ? void 0 : _a2.isFirstOrder) ?? false;\n    const isCategoryNewBuyerProduct = ((_b2 = categoryNewBuyerProductData == null ? void 0 : categoryNewBuyerProductData.data) == null ? void 0 : _b2.isOrderable) ?? false;\n    const isCategoryNewBuyerCoupon = ((_c2 = categoryNewBuyerCouponData == null ? void 0 : categoryNewBuyerCouponData.data) == null ? void 0 : _c2.isOrderable) ?? false;\n    const isEditing = isCanvas() || isFramerPreview();\n    const isLoadingBySegment = {\n      newBuyer: isUserSegmentLoading,\n      categoryNewBuyerProduct: isCategoryNewBuyerProductLoading,\n      categoryNewBuyerCoupon: isCategoryNewBuyerCouponLoading\n    };\n    const isPending = () => {\n      if (!isSegmentConfigured) {\n        return false;\n      }\n      if (!isMounted) {\n        return true;\n      }\n      if (isEditing) {\n        return false;\n      }\n      return currentSegments.some((seg) => isLoadingBySegment[seg.type] ?? false);\n    };\n    const isVisible = () => {\n      if (!isSegmentConfigured) {\n        return true;\n      }\n      return currentSegments.every((seg) => {\n        switch (seg.type) {\n          case \"login\":\n            return isLogin;\n          case \"guest\":\n            return guest;\n          case \"newBuyer\":\n            return !logged ? true : isNewBuyer;\n          case \"categoryNewBuyerProduct\":\n            return !logged ? true : isCategoryNewBuyerProduct;\n          case \"categoryNewBuyerCoupon\":\n            return !logged ? true : isCategoryNewBuyerCoupon;\n          case \"gender\": {\n            if (!seg.gender) {\n              return false;\n            }\n            return !logged ? true : userGender !== null && userGender === seg.gender;\n          }\n          default:\n            return false;\n        }\n      });\n    };\n    return {\n      loading: isUserSegmentLoading || isCategoryNewBuyerProductLoading || isCategoryNewBuyerCouponLoading,\n      isPending: isPending(),\n      isLogin,\n      guest,\n      isNewBuyer,\n      isCategoryNewBuyerProduct,\n      isCategoryNewBuyerCoupon,\n      isVisible: isEditing || isVisible()\n    };\n  }, [isSegmentConfigured, isMounted, logged, userGender, userSegmentData, isUserSegmentLoading, currentSegments, categoryNewBuyerProductData, categoryNewBuyerCouponData, isCategoryNewBuyerProductLoading, isCategoryNewBuyerCouponLoading]);\n  return /* @__PURE__ */ jsx(SegmentContext.Provider, { value: {\n    ...segmentValues,\n    segments: currentSegments\n  }, children });\n};\nconst useSegment = () => {\n  const context = useContext(SegmentContext);\n  if (context === void 0) {\n    throw new Error(\"useSegment must be used within a SegmentProvider\");\n  }\n  return context;\n};\nexport {\n  SegmentProvider,\n  useSegment\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { BreakpointProvider } from \"../../../@shared/providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"react\";\nimport { ThemeProvider } from \"../../../@shared/providers/ThemeProvider/ThemeProvider.js\";\nimport { IntersectionProvider } from \"../IntersectionProvider/IntersectionProvider.js\";\nimport \"framer-motion\";\nimport \"../../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport { SWRConfig } from \"../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../../config/index.js\";\nimport \"../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../../apis/user/UserApiService.js\";\nimport \"../../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { EventTrackingProvider } from \"../EventTrackingProvider/EventTrackingProvider.js\";\nimport { SegmentProvider } from \"../../../@shared/providers/SegmentProvider/SegmentProvider.js\";\nconst SectionLayout = ({\n  children,\n  theme = \"light\",\n  breakpoint = \"mobile\",\n  componentId,\n  intersectionOptions,\n  segment\n}) => {\n  return /* @__PURE__ */ jsx(ThemeProvider, { theme, children: /* @__PURE__ */ jsx(BreakpointProvider, { breakpoint, children: /* @__PURE__ */ jsx(IntersectionProvider, { once: true, margin: \"200px 0px\", ...intersectionOptions, children: /* @__PURE__ */ jsx(EventTrackingProvider, { componentId, children: /* @__PURE__ */ jsx(SWRConfig, { value: {\n    revalidateIfStale: false,\n    revalidateOnFocus: false,\n    revalidateOnReconnect: false,\n    errorRetryCount: 1\n  }, children: /* @__PURE__ */ jsx(SegmentProvider, { segment, children }) }) }) }) }) });\n};\nexport {\n  SectionLayout\n};\n","var Breakpoint = /* @__PURE__ */ ((Breakpoint2) => {\n  Breakpoint2[\"DESKTOP\"] = \"desktop\";\n  Breakpoint2[\"TABLET\"] = \"tablet\";\n  Breakpoint2[\"MOBILE\"] = \"mobile\";\n  return Breakpoint2;\n})(Breakpoint || {});\nexport {\n  Breakpoint\n};\n","import { ControlType } from \"framer\";\nimport { Breakpoint } from \"../../styles/breakpoint.js\";\nconst BREAKPOINT_CONTROLS = {\n  breakpoint: {\n    type: ControlType.Enum,\n    title: \"분기점\",\n    options: [Breakpoint.DESKTOP, Breakpoint.TABLET, Breakpoint.MOBILE],\n    optionTitles: [\"PC\", \"Tablet\", \"Mobile\"],\n    displaySegmentedControl: true\n  }\n};\nexport {\n  BREAKPOINT_CONTROLS\n};\n","import { ControlType } from \"framer\";\nconst COMPONENT_ID_PROPS = {\n  componentId: {\n    type: ControlType.String,\n    title: \"컴포넌트 ID\",\n    description: \"이벤트 수집 시에 모듈을 구분하기 위한 값\\nex. 29welcoming\",\n    defaultValue: \"\"\n  }\n};\nexport {\n  COMPONENT_ID_PROPS\n};\n","import { ControlType } from \"framer\";\nconst SEGMENT_CONTROLS = {\n  segment: {\n    title: \"세그먼트\",\n    type: ControlType.Array,\n    description: \"설정한 세그먼트 조건에 따라 노출/미노출이 됩니다.\",\n    control: {\n      type: ControlType.Object,\n      controls: {\n        type: {\n          type: ControlType.Enum,\n          title: \"타입\",\n          options: [\"login\", \"guest\", \"newBuyer\", \"categoryNewBuyerProduct\", \"categoryNewBuyerCoupon\", \"gender\"],\n          optionTitles: [\"로그인\", \"미로그인\", \"생애 첫구매\", \"카테고리 첫구매 상품\", \"카테고리 첫구매 쿠폰\", \"성별\"],\n          defaultValue: \"\"\n        },\n        groupId: {\n          hidden: ({\n            type\n          }) => type !== \"categoryNewBuyerProduct\",\n          type: ControlType.String,\n          title: \"그룹 ID\",\n          defaultValue: \"\"\n        },\n        couponId: {\n          hidden: ({\n            type\n          }) => type !== \"categoryNewBuyerCoupon\",\n          type: ControlType.String,\n          title: \"쿠폰 ID\",\n          defaultValue: \"\"\n        },\n        gender: {\n          hidden: ({\n            type\n          }) => type !== \"gender\",\n          type: ControlType.Enum,\n          title: \"성별\",\n          description: \"선택한 성별의 유저에게만 노출됩니다. 미로그인 유저에게는 항상 노출됩니다.\",\n          options: [\"M\", \"F\"],\n          optionTitles: [\"남성\", \"여성\"],\n          defaultValue: \"F\"\n        }\n      }\n    }\n  }\n};\nexport {\n  SEGMENT_CONTROLS\n};\n","var Theme = /* @__PURE__ */ ((Theme2) => {\n  Theme2[\"LIGHT\"] = \"light\";\n  Theme2[\"DARK\"] = \"dark\";\n  return Theme2;\n})(Theme || {});\nexport {\n  Theme\n};\n","import { ControlType } from \"framer\";\nimport { Theme } from \"../../styles/theme.js\";\nconst THEME_CONTROLS = {\n  theme: {\n    type: ControlType.Enum,\n    title: \"테마\",\n    description: \"Light 테마는 일부 스타일이 미적용되어 있을 수 있습니다.\",\n    options: [Theme.LIGHT, Theme.DARK],\n    optionTitles: [\"Light\", \"Dark\"],\n    defaultValue: Theme.LIGHT,\n    displaySegmentedControl: true\n  }\n};\nexport {\n  THEME_CONTROLS\n};\n","import { create } from \"../../../node_modules/zustand/esm/index.js\";\nconst initialState = {\n  queries: {}\n};\nconst useQueryStore = create((set) => ({\n  ...initialState,\n  dispatchSetQuery: (key, query) => set((prev) => ({\n    queries: {\n      ...prev.queries,\n      [key]: query\n    }\n  }))\n}));\nexport {\n  useQueryStore\n};\n","import { useRef, useCallback } from \"react\";\nimport { useUpdatedRef } from \"./useUpdatedRef.js\";\nimport { useWindowEventListener } from \"./useWindowEventListener.js\";\nconst useInViewport = (callback) => {\n  const ref = useRef(null);\n  const prevIsInViewport = useRef(false);\n  const updatedCallback = useUpdatedRef(callback);\n  const handleScroll = useCallback(() => {\n    if (ref.current === null) {\n      return;\n    }\n    const isInViewport = getIsInViewport(ref.current);\n    if (isInViewport !== prevIsInViewport.current) {\n      updatedCallback.current(isInViewport);\n    }\n    prevIsInViewport.current = isInViewport;\n  }, []);\n  useWindowEventListener(\"scroll\", handleScroll);\n  return ref;\n};\nconst getIsInViewport = (element) => {\n  const {\n    offsetHeight\n  } = element;\n  const top = getAbsoluteOffsetTop(element);\n  const bottom = top + offsetHeight;\n  const isElementInViewport = window.scrollY <= top && bottom <= window.scrollY + window.innerHeight;\n  const isViewportInElement = top <= window.scrollY && window.scrollY + window.innerHeight <= bottom;\n  return isViewportInElement || isElementInViewport;\n};\nconst getAbsoluteOffsetTop = (element) => {\n  return Math.round(element.getBoundingClientRect().top + window.scrollY);\n};\nexport {\n  useInViewport\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { createContext, forwardRef, useRef } from \"react\";\nimport { useInViewport } from \"../../../hooks/useInViewport.js\";\nimport \"../../../hooks/stores/content/content.store.js\";\nimport \"../../../utils/event-properties/source.js\";\nimport \"framer\";\nimport { mergeRefs } from \"../../../utils/react/mergeRefs.js\";\nconst EventTriggerContext = createContext({\n  isViewportEntered: () => false,\n  canTriggerFallbackImpression: () => false,\n  setCanTriggerFallbackImpression: () => {\n  },\n  types: [],\n  onImpression: void 0\n});\nconst Root = forwardRef(({\n  children,\n  className,\n  style,\n  types,\n  onImpression\n}, ref) => {\n  const isViewportEntered = useRef(false);\n  const canTriggerFallbackImpression = useRef(true);\n  const observeViewport = types.includes(\"impression\");\n  const handleViewportEnter = () => {\n    if (canTriggerFallbackImpression.current) {\n      onImpression == null ? void 0 : onImpression();\n    }\n    isViewportEntered.current = true;\n    canTriggerFallbackImpression.current = false;\n  };\n  const handleViewportLeave = () => {\n    isViewportEntered.current = false;\n    canTriggerFallbackImpression.current = true;\n  };\n  const containerRef = useInViewport((isInViewport) => {\n    if (!observeViewport) {\n      return;\n    }\n    if (isInViewport) {\n      handleViewportEnter();\n    } else {\n      handleViewportLeave();\n    }\n  });\n  return /* @__PURE__ */ jsx(EventTriggerContext.Provider, { value: {\n    isViewportEntered: () => isViewportEntered.current,\n    canTriggerFallbackImpression: () => canTriggerFallbackImpression.current,\n    setCanTriggerFallbackImpression: (next) => canTriggerFallbackImpression.current = next,\n    types,\n    onImpression\n  }, children: /* @__PURE__ */ jsx(\"div\", { ref: mergeRefs([containerRef, ref]), className, style: {\n    width: \"100%\",\n    ...style\n  }, children }) });\n});\nexport {\n  EventTriggerContext,\n  Root\n};\n","import { useContext } from \"react\";\nimport { EventTriggerContext } from \"./Root.js\";\nconst useEventTriggerContext = () => useContext(EventTriggerContext);\nexport {\n  useEventTriggerContext\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { useEventTriggerContext } from \"./Root.hooks.js\";\nconst Target = forwardRef(({\n  children,\n  onClick,\n  ...rest\n}, ref) => {\n  const {\n    isViewportEntered,\n    canTriggerFallbackImpression,\n    setCanTriggerFallbackImpression,\n    types,\n    onImpression\n  } = useEventTriggerContext();\n  const handleClick = (e) => {\n    onClick == null ? void 0 : onClick(e);\n    const shouldTriggerFallbackImpression = types.includes(\"impression\") && !isViewportEntered() && canTriggerFallbackImpression();\n    if (shouldTriggerFallbackImpression) {\n      onImpression == null ? void 0 : onImpression();\n      setCanTriggerFallbackImpression(false);\n    }\n  };\n  return /* @__PURE__ */ jsx(\"div\", { ref, ...rest, onClick: handleClick, children });\n});\nexport {\n  Target\n};\n","import { Root } from \"./Root.js\";\nimport { Target } from \"./Target.js\";\nconst EventTrigger = {\n  Root,\n  Target\n};\nexport {\n  EventTrigger\n};\n","import { create } from \"../../../node_modules/zustand/esm/index.js\";\nimport { subscribeWithSelector } from \"../../../node_modules/zustand/esm/middleware.js\";\nconst initialState = {\n  rootModules: {}\n};\nconst useModuleStore = create(subscribeWithSelector((set) => ({\n  ...initialState,\n  dispatchSetRootModule: (key, module) => set((prev) => ({\n    rootModules: {\n      ...prev.rootModules,\n      [key]: module\n    }\n  }))\n})));\nexport {\n  useModuleStore\n};\n","import { useEffect } from \"react\";\nimport { useComponentId } from \"../systems/curations/EventTrackingProvider/EventTrackingProvider.hooks.js\";\nimport \"../systems/curations/EventTrackingProvider/EventTrackingProvider.js\";\nimport { useTrackSnowplowEvent } from \"../../hooks/snowplow/useTrackSnowplowEvent.js\";\nimport { useModuleStore } from \"./module-store/module.store.js\";\nimport { shallow as shallow$1 } from \"../../node_modules/zustand/esm/shallow.js\";\nimport { useSegment } from \"../@shared/providers/SegmentProvider/SegmentProvider.js\";\nconst useRootComponentId = (query) => {\n  const componentId = useComponentId();\n  const root = useModuleStore((state) => state.rootModules[(query == null ? void 0 : query.rootOutput) ?? \"\"], shallow$1);\n  return (root == null ? void 0 : root.componentId) || componentId;\n};\nconst useSetRootModule = (query, output) => {\n  const componentId = useComponentId();\n  const segment = useSegment();\n  const dispatchSetRootModule = useModuleStore((state) => state.dispatchSetRootModule);\n  const {\n    isRoot = false\n  } = query ?? {};\n  useEffect(() => {\n    if (!isRoot) {\n      return;\n    }\n    if (!output) {\n      return;\n    }\n    dispatchSetRootModule(output, {\n      componentId,\n      segment: segment.segments\n    });\n  }, [isRoot, output, componentId, segment]);\n};\nconst useTrackClickButtonEvent = (query) => {\n  const trackSnowplowEvent = useTrackSnowplowEvent();\n  const componentId = useRootComponentId(query);\n  const trackClickButtonEvent = ({\n    type,\n    layoutPosition = -1,\n    name = \"\"\n  }) => {\n    trackSnowplowEvent(\"click_button\", {\n      // TODO(임규민): section_name, position 프로퍼티에 할당한 약속된 임의 값 수정\n      section_name: componentId,\n      section_title: componentId,\n      position: -1,\n      layout_position: layoutPosition,\n      button_id: type,\n      button_name: name\n    });\n  };\n  return trackClickButtonEvent;\n};\nconst useTrackImpressionContentEvent = () => {\n  const trackSnowplowEvent = useTrackSnowplowEvent();\n  const componentId = useComponentId();\n  const trackImpressionContentEvent = () => {\n    trackSnowplowEvent(\"impression_content\", {\n      // TODO(임규민): section_name, position, layout_position 프로퍼티에 할당한 약속된 임의 값 수정\n      section_name: componentId,\n      section_title: componentId,\n      position: -1,\n      layout_position: -1\n    });\n  };\n  return trackImpressionContentEvent;\n};\nexport {\n  useRootComponentId,\n  useSetRootModule,\n  useTrackClickButtonEvent,\n  useTrackImpressionContentEvent\n};\n","var QueryType = /* @__PURE__ */ ((QueryType2) => {\n  QueryType2[\"Product\"] = \"product\";\n  QueryType2[\"KeywordCollection\"] = \"keyword-collection\";\n  QueryType2[\"KeywordCollections\"] = \"keyword-collections\";\n  QueryType2[\"BrandCuration\"] = \"brand-curation\";\n  QueryType2[\"Recommendation\"] = \"recommendation\";\n  QueryType2[\"Ranking\"] = \"ranking\";\n  QueryType2[\"CouponCollection\"] = \"coupon-collection\";\n  QueryType2[\"RaffleGroup\"] = \"raffle-group\";\n  QueryType2[\"Coupon\"] = \"coupon\";\n  QueryType2[\"Preuser\"] = \"preuser\";\n  QueryType2[\"CustomCategory\"] = \"custom-category\";\n  QueryType2[\"Moloco\"] = \"moloco\";\n  return QueryType2;\n})(QueryType || {});\nvar RankingType = /* @__PURE__ */ ((RankingType2) => {\n  RankingType2[\"Popularity\"] = \"POPULARITY\";\n  RankingType2[\"Trending\"] = \"TRENDING\";\n  return RankingType2;\n})(RankingType || {});\nvar PopularityPeriodType = /* @__PURE__ */ ((PopularityPeriodType2) => {\n  PopularityPeriodType2[\"Realtime\"] = \"REALTIME\";\n  PopularityPeriodType2[\"Hourly\"] = \"HOURLY\";\n  PopularityPeriodType2[\"Daily\"] = \"DAILY\";\n  return PopularityPeriodType2;\n})(PopularityPeriodType || {});\nvar TrendingPeriodType = /* @__PURE__ */ ((TrendingPeriodType2) => {\n  TrendingPeriodType2[\"Hourly\"] = \"HOURLY\";\n  return TrendingPeriodType2;\n})(TrendingPeriodType || {});\nvar CategoryType = /* @__PURE__ */ ((CategoryType2) => {\n  CategoryType2[CategoryType2[\"Large\"] = 0] = \"Large\";\n  CategoryType2[CategoryType2[\"Middle\"] = 1] = \"Middle\";\n  return CategoryType2;\n})(CategoryType || {});\nexport {\n  CategoryType,\n  PopularityPeriodType,\n  QueryType,\n  RankingType,\n  TrendingPeriodType\n};\n","import getNative from \"./_getNative.js\";\nvar defineProperty = function() {\n  try {\n    var func = getNative(Object, \"defineProperty\");\n    func({}, \"\", {});\n    return func;\n  } catch (e) {\n  }\n}();\nexport {\n  defineProperty as default\n};\n","import defineProperty from \"./_defineProperty.js\";\nfunction baseAssignValue(object, key, value) {\n  if (key == \"__proto__\" && defineProperty) {\n    defineProperty(object, key, {\n      \"configurable\": true,\n      \"enumerable\": true,\n      \"value\": value,\n      \"writable\": true\n    });\n  } else {\n    object[key] = value;\n  }\n}\nexport {\n  baseAssignValue as default\n};\n","import baseAssignValue from \"./_baseAssignValue.js\";\nimport eq from \"./eq.js\";\nfunction assignMergeValue(object, key, value) {\n  if (value !== void 0 && !eq(object[key], value) || value === void 0 && !(key in object)) {\n    baseAssignValue(object, key, value);\n  }\n}\nexport {\n  assignMergeValue as default\n};\n","function createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length;\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\nexport {\n  createBaseFor as default\n};\n","import createBaseFor from \"./_createBaseFor.js\";\nvar baseFor = createBaseFor();\nexport {\n  baseFor as default\n};\n","import root from \"./_root.js\";\nvar freeExports = typeof exports == \"object\" && exports && !exports.nodeType && exports;\nvar freeModule = freeExports && typeof module == \"object\" && module && !module.nodeType && module;\nvar moduleExports = freeModule && freeModule.exports === freeExports;\nvar Buffer = moduleExports ? root.Buffer : void 0, allocUnsafe = Buffer ? Buffer.allocUnsafe : void 0;\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n  buffer.copy(result);\n  return result;\n}\nexport {\n  cloneBuffer as default\n};\n","import Uint8Array from \"./_Uint8Array.js\";\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\nexport {\n  cloneArrayBuffer as default\n};\n","import cloneArrayBuffer from \"./_cloneArrayBuffer.js\";\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\nexport {\n  cloneTypedArray as default\n};\n","function copyArray(source, array) {\n  var index = -1, length = source.length;\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\nexport {\n  copyArray as default\n};\n","import isObject from \"./isObject.js\";\nvar objectCreate = Object.create;\nvar baseCreate = /* @__PURE__ */ function() {\n  function object() {\n  }\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object();\n    object.prototype = void 0;\n    return result;\n  };\n}();\nexport {\n  baseCreate as default\n};\n","import overArg from \"./_overArg.js\";\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\nconst getPrototype$1 = getPrototype;\nexport {\n  getPrototype$1 as default\n};\n","import baseCreate from \"./_baseCreate.js\";\nimport getPrototype from \"./_getPrototype.js\";\nimport isPrototype from \"./_isPrototype.js\";\nfunction initCloneObject(object) {\n  return typeof object.constructor == \"function\" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};\n}\nexport {\n  initCloneObject as default\n};\n","import isArrayLike from \"./isArrayLike.js\";\nimport isObjectLike from \"./isObjectLike.js\";\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\nexport {\n  isArrayLikeObject as default\n};\n","import baseGetTag from \"./_baseGetTag.js\";\nimport getPrototype from \"./_getPrototype.js\";\nimport isObjectLike from \"./isObjectLike.js\";\nvar objectTag = \"[object Object]\";\nvar funcProto = Function.prototype, objectProto = Object.prototype;\nvar funcToString = funcProto.toString;\nvar hasOwnProperty = objectProto.hasOwnProperty;\nvar objectCtorString = funcToString.call(Object);\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n  return typeof Ctor == \"function\" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;\n}\nexport {\n  isPlainObject as default\n};\n","function safeGet(object, key) {\n  if (key === \"constructor\" && typeof object[key] === \"function\") {\n    return;\n  }\n  if (key == \"__proto__\") {\n    return;\n  }\n  return object[key];\n}\nexport {\n  safeGet as default\n};\n","import baseAssignValue from \"./_baseAssignValue.js\";\nimport eq from \"./eq.js\";\nvar objectProto = Object.prototype;\nvar hasOwnProperty = objectProto.hasOwnProperty;\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) {\n    baseAssignValue(object, key, value);\n  }\n}\nexport {\n  assignValue as default\n};\n","import assignValue from \"./_assignValue.js\";\nimport baseAssignValue from \"./_baseAssignValue.js\";\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n  var index = -1, length = props.length;\n  while (++index < length) {\n    var key = props[index];\n    var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;\n    if (newValue === void 0) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\nexport {\n  copyObject as default\n};\n","function nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nexport {\n  nativeKeysIn as default\n};\n","import isObject from \"./isObject.js\";\nimport isPrototype from \"./_isPrototype.js\";\nimport nativeKeysIn from \"./_nativeKeysIn.js\";\nvar objectProto = Object.prototype;\nvar hasOwnProperty = objectProto.hasOwnProperty;\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object), result = [];\n  for (var key in object) {\n    if (!(key == \"constructor\" && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nexport {\n  baseKeysIn as default\n};\n","import arrayLikeKeys from \"./_arrayLikeKeys.js\";\nimport baseKeysIn from \"./_baseKeysIn.js\";\nimport isArrayLike from \"./isArrayLike.js\";\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\nexport {\n  keysIn as default\n};\n","import copyObject from \"./_copyObject.js\";\nimport keysIn from \"./keysIn.js\";\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\nexport {\n  toPlainObject as default\n};\n","import assignMergeValue from \"./_assignMergeValue.js\";\nimport cloneBuffer from \"./_cloneBuffer.js\";\nimport cloneTypedArray from \"./_cloneTypedArray.js\";\nimport copyArray from \"./_copyArray.js\";\nimport initCloneObject from \"./_initCloneObject.js\";\nimport isArguments from \"./isArguments.js\";\nimport isArray from \"./isArray.js\";\nimport isArrayLikeObject from \"./isArrayLikeObject.js\";\nimport isBuffer from \"./isBuffer.js\";\nimport isFunction from \"./isFunction.js\";\nimport isObject from \"./isObject.js\";\nimport isPlainObject from \"./isPlainObject.js\";\nimport isTypedArray from \"./isTypedArray.js\";\nimport safeGet from \"./_safeGet.js\";\nimport toPlainObject from \"./toPlainObject.js\";\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue);\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer ? customizer(objValue, srcValue, key + \"\", object, source, stack) : void 0;\n  var isCommon = newValue === void 0;\n  if (isCommon) {\n    var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      } else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      } else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      } else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      } else {\n        newValue = [];\n      }\n    } else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      } else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    } else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack[\"delete\"](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\nexport {\n  baseMergeDeep as default\n};\n","import Stack from \"./_Stack.js\";\nimport assignMergeValue from \"./_assignMergeValue.js\";\nimport baseFor from \"./_baseFor.js\";\nimport baseMergeDeep from \"./_baseMergeDeep.js\";\nimport isObject from \"./isObject.js\";\nimport keysIn from \"./keysIn.js\";\nimport safeGet from \"./_safeGet.js\";\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack());\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    } else {\n      var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + \"\", object, source, stack) : void 0;\n      if (newValue === void 0) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\nexport {\n  baseMerge as default\n};\n","function identity(value) {\n  return value;\n}\nexport {\n  identity as default\n};\n","function apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0:\n      return func.call(thisArg);\n    case 1:\n      return func.call(thisArg, args[0]);\n    case 2:\n      return func.call(thisArg, args[0], args[1]);\n    case 3:\n      return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\nexport {\n  apply as default\n};\n","import apply from \"./_apply.js\";\nvar nativeMax = Math.max;\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === void 0 ? func.length - 1 : start, 0);\n  return function() {\n    var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array(length);\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\nexport {\n  overRest as default\n};\n","function constant(value) {\n  return function() {\n    return value;\n  };\n}\nexport {\n  constant as default\n};\n","import constant from \"./constant.js\";\nimport defineProperty from \"./_defineProperty.js\";\nimport identity from \"./identity.js\";\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, \"toString\", {\n    \"configurable\": true,\n    \"enumerable\": false,\n    \"value\": constant(string),\n    \"writable\": true\n  });\n};\nconst baseSetToString$1 = baseSetToString;\nexport {\n  baseSetToString$1 as default\n};\n","var HOT_COUNT = 800, HOT_SPAN = 16;\nvar nativeNow = Date.now;\nfunction shortOut(func) {\n  var count = 0, lastCalled = 0;\n  return function() {\n    var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(void 0, arguments);\n  };\n}\nexport {\n  shortOut as default\n};\n","import baseSetToString from \"./_baseSetToString.js\";\nimport shortOut from \"./_shortOut.js\";\nvar setToString = shortOut(baseSetToString);\nexport {\n  setToString as default\n};\n","import identity from \"./identity.js\";\nimport overRest from \"./_overRest.js\";\nimport setToString from \"./_setToString.js\";\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + \"\");\n}\nexport {\n  baseRest as default\n};\n","import eq from \"./eq.js\";\nimport isArrayLike from \"./isArrayLike.js\";\nimport isIndex from \"./_isIndex.js\";\nimport isObject from \"./isObject.js\";\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == \"number\" ? isArrayLike(object) && isIndex(index, object.length) : type == \"string\" && index in object) {\n    return eq(object[index], value);\n  }\n  return false;\n}\nexport {\n  isIterateeCall as default\n};\n","import baseRest from \"./_baseRest.js\";\nimport isIterateeCall from \"./_isIterateeCall.js\";\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;\n    customizer = assigner.length > 3 && typeof customizer == \"function\" ? (length--, customizer) : void 0;\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? void 0 : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\nexport {\n  createAssigner as default\n};\n","import baseMerge from \"./_baseMerge.js\";\nimport createAssigner from \"./_createAssigner.js\";\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\nexport {\n  merge as default\n};\n","function arrayEach(array, iteratee) {\n  var index = -1, length = array == null ? 0 : array.length;\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\nexport {\n  arrayEach as default\n};\n","import copyObject from \"./_copyObject.js\";\nimport keys from \"./keys.js\";\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\nexport {\n  baseAssign as default\n};\n","import copyObject from \"./_copyObject.js\";\nimport keysIn from \"./keysIn.js\";\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\nexport {\n  baseAssignIn as default\n};\n","import copyObject from \"./_copyObject.js\";\nimport getSymbols from \"./_getSymbols.js\";\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\nexport {\n  copySymbols as default\n};\n","import arrayPush from \"./_arrayPush.js\";\nimport getPrototype from \"./_getPrototype.js\";\nimport getSymbols from \"./_getSymbols.js\";\nimport stubArray from \"./stubArray.js\";\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\nexport {\n  getSymbolsIn as default\n};\n","import copyObject from \"./_copyObject.js\";\nimport getSymbolsIn from \"./_getSymbolsIn.js\";\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\nexport {\n  copySymbolsIn as default\n};\n","import baseGetAllKeys from \"./_baseGetAllKeys.js\";\nimport getSymbolsIn from \"./_getSymbolsIn.js\";\nimport keysIn from \"./keysIn.js\";\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\nexport {\n  getAllKeysIn as default\n};\n","var objectProto = Object.prototype;\nvar hasOwnProperty = objectProto.hasOwnProperty;\nfunction initCloneArray(array) {\n  var length = array.length, result = new array.constructor(length);\n  if (length && typeof array[0] == \"string\" && hasOwnProperty.call(array, \"index\")) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\nexport {\n  initCloneArray as default\n};\n","import cloneArrayBuffer from \"./_cloneArrayBuffer.js\";\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\nexport {\n  cloneDataView as default\n};\n","var reFlags = /\\w*$/;\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\nexport {\n  cloneRegExp as default\n};\n","import Symbol$1 from \"./_Symbol.js\";\nvar symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\nexport {\n  cloneSymbol as default\n};\n","import cloneArrayBuffer from \"./_cloneArrayBuffer.js\";\nimport cloneDataView from \"./_cloneDataView.js\";\nimport cloneRegExp from \"./_cloneRegExp.js\";\nimport cloneSymbol from \"./_cloneSymbol.js\";\nimport cloneTypedArray from \"./_cloneTypedArray.js\";\nvar boolTag = \"[object Boolean]\", dateTag = \"[object Date]\", mapTag = \"[object Map]\", numberTag = \"[object Number]\", regexpTag = \"[object RegExp]\", setTag = \"[object Set]\", stringTag = \"[object String]\", symbolTag = \"[object Symbol]\";\nvar arrayBufferTag = \"[object ArrayBuffer]\", dataViewTag = \"[object DataView]\", float32Tag = \"[object Float32Array]\", float64Tag = \"[object Float64Array]\", int8Tag = \"[object Int8Array]\", int16Tag = \"[object Int16Array]\", int32Tag = \"[object Int32Array]\", uint8Tag = \"[object Uint8Array]\", uint8ClampedTag = \"[object Uint8ClampedArray]\", uint16Tag = \"[object Uint16Array]\", uint32Tag = \"[object Uint32Array]\";\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n    case float32Tag:\n    case float64Tag:\n    case int8Tag:\n    case int16Tag:\n    case int32Tag:\n    case uint8Tag:\n    case uint8ClampedTag:\n    case uint16Tag:\n    case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n    case mapTag:\n      return new Ctor();\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n    case regexpTag:\n      return cloneRegExp(object);\n    case setTag:\n      return new Ctor();\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\nexport {\n  initCloneByTag as default\n};\n","import getTag from \"./_getTag.js\";\nimport isObjectLike from \"./isObjectLike.js\";\nvar mapTag = \"[object Map]\";\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\nexport {\n  baseIsMap as default\n};\n","import baseIsMap from \"./_baseIsMap.js\";\nimport baseUnary from \"./_baseUnary.js\";\nimport nodeUtil from \"./_nodeUtil.js\";\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\nexport {\n  isMap as default\n};\n","import getTag from \"./_getTag.js\";\nimport isObjectLike from \"./isObjectLike.js\";\nvar setTag = \"[object Set]\";\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\nexport {\n  baseIsSet as default\n};\n","import baseIsSet from \"./_baseIsSet.js\";\nimport baseUnary from \"./_baseUnary.js\";\nimport nodeUtil from \"./_nodeUtil.js\";\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\nexport {\n  isSet as default\n};\n","import Stack from \"./_Stack.js\";\nimport arrayEach from \"./_arrayEach.js\";\nimport assignValue from \"./_assignValue.js\";\nimport baseAssign from \"./_baseAssign.js\";\nimport baseAssignIn from \"./_baseAssignIn.js\";\nimport cloneBuffer from \"./_cloneBuffer.js\";\nimport copyArray from \"./_copyArray.js\";\nimport copySymbols from \"./_copySymbols.js\";\nimport copySymbolsIn from \"./_copySymbolsIn.js\";\nimport getAllKeys from \"./_getAllKeys.js\";\nimport getAllKeysIn from \"./_getAllKeysIn.js\";\nimport getTag from \"./_getTag.js\";\nimport initCloneArray from \"./_initCloneArray.js\";\nimport initCloneByTag from \"./_initCloneByTag.js\";\nimport initCloneObject from \"./_initCloneObject.js\";\nimport isArray from \"./isArray.js\";\nimport isBuffer from \"./isBuffer.js\";\nimport isMap from \"./isMap.js\";\nimport isObject from \"./isObject.js\";\nimport isSet from \"./isSet.js\";\nimport keys from \"./keys.js\";\nimport keysIn from \"./keysIn.js\";\nvar CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4;\nvar argsTag = \"[object Arguments]\", arrayTag = \"[object Array]\", boolTag = \"[object Boolean]\", dateTag = \"[object Date]\", errorTag = \"[object Error]\", funcTag = \"[object Function]\", genTag = \"[object GeneratorFunction]\", mapTag = \"[object Map]\", numberTag = \"[object Number]\", objectTag = \"[object Object]\", regexpTag = \"[object RegExp]\", setTag = \"[object Set]\", stringTag = \"[object String]\", symbolTag = \"[object Symbol]\", weakMapTag = \"[object WeakMap]\";\nvar arrayBufferTag = \"[object ArrayBuffer]\", dataViewTag = \"[object DataView]\", float32Tag = \"[object Float32Array]\", float64Tag = \"[object Float64Array]\", int8Tag = \"[object Int8Array]\", int16Tag = \"[object Int16Array]\", int32Tag = \"[object Int32Array]\", uint8Tag = \"[object Uint8Array]\", uint8ClampedTag = \"[object Uint8ClampedArray]\", uint16Tag = \"[object Uint16Array]\", uint32Tag = \"[object Uint32Array]\";\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG;\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== void 0) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value), isFunc = tag == funcTag || tag == genTag;\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || isFunc && !object) {\n      result = isFlat || isFunc ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  stack || (stack = new Stack());\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key2) {\n      result.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack));\n    });\n  }\n  var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys;\n  var props = isArr ? void 0 : keysFunc(value);\n  arrayEach(props || value, function(subValue, key2) {\n    if (props) {\n      key2 = subValue;\n      subValue = value[key2];\n    }\n    assignValue(result, key2, baseClone(subValue, bitmask, customizer, key2, value, stack));\n  });\n  return result;\n}\nexport {\n  baseClone as default\n};\n","import baseClone from \"./_baseClone.js\";\nvar CLONE_DEEP_FLAG = 1, CLONE_SYMBOLS_FLAG = 4;\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\nexport {\n  cloneDeep as default\n};\n","import { entries } from \"../../../../utils/entries.js\";\nimport merge from \"../../../../node_modules/lodash-es/merge.js\";\nimport cloneDeep from \"../../../../node_modules/lodash-es/cloneDeep.js\";\nconst DEFAULT_ROW_GAP_BY_BREAKPOINT = {\n  desktop: 24,\n  tablet: 16,\n  mobile: 16\n};\nconst withDefaultRowGap = (options, breakpoint) => {\n  var _a;\n  return {\n    ...options,\n    row: {\n      ...options.row,\n      gap: ((_a = options.row) == null ? void 0 : _a.gap) ?? DEFAULT_ROW_GAP_BY_BREAKPOINT[breakpoint]\n    }\n  };\n};\nconst createOptionTemplate = (options) => {\n  const {\n    base,\n    mobile = {},\n    tablet = {},\n    desktop = {}\n  } = options;\n  return Object.fromEntries(entries({\n    mobile,\n    tablet,\n    desktop\n  }).map(([key, value]) => [key, merge(cloneDeep(base), value)]));\n};\nconst getResponsiveWidth = (gap, column = 1, inset = 0) => {\n  return `calc((100% - ${gap * Math.max(column - 1, 1) + inset}px) / ${column})`;\n};\nconst HORIZONTAL_CARD_TOTAL_WIDTH_RATIO = 0.82;\nconst getResponsiveWidthWithProductPeekInset = (gap, column = 1) => {\n  const gapTotal = gap * Math.max(column - 1, 1);\n  const horizontalPaddingTotal = 32;\n  return `calc(((100% + ${horizontalPaddingTotal}px) * ${HORIZONTAL_CARD_TOTAL_WIDTH_RATIO} - ${gapTotal}px) / ${column})`;\n};\nconst BAR_PEEK_COLUMN_WIDTH_RATIO = 0.77;\nconst getBarPeekColumnWidth = (horizontalPaddingPx = 0) => {\n  if (horizontalPaddingPx > 0) {\n    return `calc((100% + ${horizontalPaddingPx * 2}px) * ${BAR_PEEK_COLUMN_WIDTH_RATIO})`;\n  }\n  return `calc(100% * ${BAR_PEEK_COLUMN_WIDTH_RATIO})`;\n};\nconst getHorizontalBarColumnWidth = (layout, breakpoint, horizontalPaddingPx) => {\n  const {\n    columnGap,\n    columnDisplayCount,\n    columnDivider,\n    hasRank\n  } = layout;\n  if (columnDisplayCount === 1 && breakpoint !== \"desktop\") {\n    return getBarPeekColumnWidth(horizontalPaddingPx);\n  }\n  const rankInset = breakpoint === \"mobile\" ? hasRank ? 53 : 4 : breakpoint === \"tablet\" ? hasRank ? 60 : 20 : 0;\n  if (columnDivider) {\n    return getResponsiveWidth(0, columnDisplayCount, rankInset + 21);\n  }\n  return getResponsiveWidth(columnGap, columnDisplayCount, rankInset);\n};\nexport {\n  BAR_PEEK_COLUMN_WIDTH_RATIO,\n  DEFAULT_ROW_GAP_BY_BREAKPOINT,\n  createOptionTemplate,\n  getBarPeekColumnWidth,\n  getHorizontalBarColumnWidth,\n  getResponsiveWidth,\n  getResponsiveWidthWithProductPeekInset,\n  withDefaultRowGap\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nconst Grid = ({\n  as,\n  children,\n  style,\n  row,\n  column,\n  ...rest\n}, ref) => {\n  const Element = as ?? \"div\";\n  return /* @__PURE__ */ jsx(Element, { ...rest, ref, style: {\n    display: \"grid\",\n    rowGap: row == null ? void 0 : row.gap,\n    columnGap: column == null ? void 0 : column.gap,\n    gridAutoRows: row == null ? void 0 : row.width,\n    gridAutoColumns: column == null ? void 0 : column.width,\n    ...(column == null ? void 0 : column.count) !== void 0 ? verticalGridStyle(column.count, column.minWidth ?? 0) : void 0,\n    ...(row == null ? void 0 : row.count) !== void 0 ? horizontalGridStyle(row.count, row.minWidth ?? 0) : void 0,\n    ...style\n  }, children });\n};\nconst toPixel = (value) => {\n  if (typeof value === \"number\") {\n    return `${value}px`;\n  }\n  return value.includes(\"px\") ? value : `${value}px`;\n};\nconst verticalGridStyle = (count, minWidth) => ({\n  // NOTE(임규민): minmax 를 사용하지 않으면 특정 웹뷰 환경에서 크기가 맞지 않는 문제가 있음.\n  gridTemplateColumns: `repeat(${count === \"auto\" ? \"auto-fill\" : count}, minmax(${toPixel(minWidth)}, 1fr))`,\n  gridAutoFlow: \"row\"\n});\nconst horizontalGridStyle = (count, minWidth) => ({\n  // NOTE(임규민): minmax 를 사용하지 않으면 특정 웹뷰 환경에서 크기가 맞지 않는 문제가 있음.\n  gridTemplateRows: `repeat(${count === \"auto\" ? \"auto-fill\" : count}, minmax(${toPixel(minWidth)}, auto))`,\n  gridAutoRows: \"min-content\",\n  gridAutoFlow: \"column\"\n});\nconst Default = forwardRef(Grid);\nexport {\n  Default as Grid\n};\n","import { useContext } from \"react\";\nimport { ProductsContext } from \"./Root.js\";\nconst useProductsContext = () => {\n  const context = useContext(ProductsContext);\n  if (!context) {\n    throw new Error(\"useProductsContext should be used within Root\");\n  }\n  return context;\n};\nexport {\n  useProductsContext\n};\n","import { jsx } from \"react/jsx-runtime\";\nconst ArrowIcon = ({\n  color,\n  size,\n  style,\n  ...rest\n}) => {\n  const svgHeight = size ?? 30;\n  const svgWidth = svgHeight * 12 / 30;\n  return /* @__PURE__ */ jsx(\"div\", { ...rest, style: {\n    ...containerStyle,\n    ...size && {\n      width: size,\n      height: size\n    },\n    ...style\n  }, children: /* @__PURE__ */ jsx(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: svgWidth, height: svgHeight, viewBox: \"0 0 12 30\", fill: \"none\", children: /* @__PURE__ */ jsx(\"path\", { d: \"M1 1L11 15L1 29\", stroke: color, strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }) }) });\n};\nconst containerStyle = {\n  width: 50,\n  height: 50,\n  display: \"flex\",\n  alignItems: \"center\",\n  justifyContent: \"center\"\n};\nexport {\n  ArrowIcon\n};\n","import { createContext, useContext } from \"react\";\nconst HorizontalScrollContext = createContext(null);\nconst useHorizontalScrollContext = () => useContext(HorizontalScrollContext);\nexport {\n  HorizontalScrollContext,\n  useHorizontalScrollContext\n};\n","import { jsx, jsxs } from \"react/jsx-runtime\";\nimport { forwardRef, useRef, useMemo, useState, useEffect } from \"react\";\nimport { Grid as Default } from \"../../../@shared/layouts/Grid.js\";\nimport { ProductCardType } from \"../../../@shared/ProductCard/ProductCard.types.js\";\nimport \"../../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../../config/index.js\";\nimport \"../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../../apis/user/UserApiService.js\";\nimport \"../../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../../hooks/stores/toast/toast.store.js\";\nimport { useTheme } from \"../../../../hooks/useTheme.js\";\nimport { useBreakpoint } from \"../../../../hooks/useBreakpoint.js\";\nimport \"../../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react-dom\";\nimport \"../../Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../../hooks/useFeatureFlag.js\";\nimport \"../../../../utils/redirectLogin.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { mergeRefs } from \"../../../../utils/react/mergeRefs.js\";\nimport { useProductsContext } from \"./Root.hooks.js\";\nimport { ArrowIcon } from \"../ArrowIcon/ArrowIcon.js\";\nimport { HorizontalScrollContext } from \"./HorizontalScrollContext.js\";\nconst NAVIGATOR_SIZE = 50;\nconst HorizontalList = forwardRef(({\n  style,\n  listStyle,\n  children,\n  options,\n  pagination = false,\n  padding,\n  navigatorOffset,\n  virtualize = false\n}, ref) => {\n  const breakpoint = useBreakpoint();\n  const theme = useTheme();\n  const {\n    pending,\n    initialHasNext\n  } = useProductsContext();\n  const gridRef = useRef(null);\n  const isScrolling = useRef(false);\n  const {\n    card,\n    row,\n    column,\n    navigator,\n    columnDivider\n  } = options;\n  const {\n    type = ProductCardType.CARD\n  } = card ?? {};\n  const scrollContextValue = useMemo(() => ({\n    scrollRef: gridRef,\n    virtualize\n  }), [virtualize]);\n  const [hasPrevious, setHasPrevious] = useState(false);\n  const [hasNext, setHasNext] = useState(initialHasNext);\n  const inset = (column == null ? void 0 : column.gap) ?? 0;\n  const isBarType = type === ProductCardType.BAR;\n  const applyScrollSnap = isBarType && breakpoint !== \"desktop\";\n  const shouldRenderNavigator = pagination && navigator;\n  const scrollTo = (direction) => {\n    if (isScrolling.current || pending) {\n      return;\n    }\n    const container = gridRef.current;\n    if (container === null) {\n      return;\n    }\n    const position = getScrollPosition(container, inset, direction);\n    const hasRemainingNextOffset = position < Math.ceil(container.scrollWidth - container.clientWidth);\n    const hasRemainingPrevOffset = position > 0;\n    setHasNext(hasRemainingNextOffset || initialHasNext);\n    setHasPrevious(hasRemainingPrevOffset);\n    isScrolling.current = true;\n    container.scroll({\n      behavior: \"smooth\",\n      left: position\n    });\n    setTimeout(() => {\n      isScrolling.current = false;\n    }, 700);\n  };\n  const handlePreviousClick = () => {\n    if (hasPrevious) {\n      scrollTo(\"previous\");\n    }\n  };\n  const handleNextClick = () => {\n    if (hasNext) {\n      scrollTo(\"next\");\n    }\n  };\n  useEffect(() => {\n    const container = gridRef.current;\n    if (container === null || pending || !navigator) {\n      return;\n    }\n    const measure = () => {\n      const maxScrollLeft = container.scrollWidth - container.clientWidth;\n      const hasMoreRight = Math.ceil(container.scrollLeft) < Math.ceil(maxScrollLeft);\n      setHasNext(hasMoreRight || initialHasNext);\n      setHasPrevious(container.scrollLeft > 0);\n    };\n    measure();\n    const observer = new ResizeObserver(measure);\n    observer.observe(container);\n    return () => observer.disconnect();\n  }, [pending, initialHasNext, navigator]);\n  return /* @__PURE__ */ jsx(HorizontalScrollContext.Provider, { value: scrollContextValue, children: /* @__PURE__ */ jsxs(\"div\", { style: {\n    ...containerStyle,\n    ...style\n  }, children: [\n    shouldRenderNavigator ? /* @__PURE__ */ jsx(ArrowIcon, { style: {\n      ...baseNavigatorStyle,\n      ...leftNavigatorStyle,\n      ...navigatorOffset !== void 0 && {\n        left: `-${navigatorOffset}px`\n      }\n    }, color: hasPrevious ? iconColorByTheme[theme] : disabledIconColorByTheme[theme], onClick: handlePreviousClick }) : null,\n    /* @__PURE__ */ jsx(Default, { ref: mergeRefs([ref, gridRef]), style: {\n      ...wrapperResetStyle,\n      ...wrapperStyle,\n      ...wrapperStyleByBreakpoint[breakpoint],\n      overflowX: navigator ? \"hidden\" : \"scroll\",\n      overflowY: \"hidden\",\n      scrollSnapType: applyScrollSnap ? \"x mandatory\" : \"none\",\n      WebkitScrollSnapType: applyScrollSnap ? \"x mandatory\" : \"none\",\n      ...padding ? {\n        padding: `${padding.top ?? 0}px ${padding.right ?? 0}px ${padding.bottom ?? 0}px ${padding.left ?? 0}px`,\n        scrollPaddingLeft: padding.left ?? 0,\n        scrollPaddingRight: padding.right ?? 0\n      } : void 0,\n      ...listStyle,\n      ...columnDivider && (column == null ? void 0 : column.width) ? {\n        gridAutoColumns: `${column.width} 21px`\n      } : void 0\n    }, row, column, children }),\n    shouldRenderNavigator ? /* @__PURE__ */ jsx(ArrowIcon, { style: {\n      ...baseNavigatorStyle,\n      ...rightNavigatorStyle,\n      ...navigatorOffset !== void 0 && {\n        right: `-${navigatorOffset}px`\n      }\n    }, color: hasNext ? iconColorByTheme[theme] : disabledIconColorByTheme[theme], onClick: handleNextClick }) : null\n  ] }) });\n});\nconst getScrollPosition = (container, inset, direction) => {\n  const offset = container.clientWidth + inset;\n  return Math.ceil(container.scrollLeft + (direction === \"previous\" ? -offset : offset));\n};\nconst containerStyle = {\n  position: \"relative\",\n  width: \"100%\"\n};\nconst iconColorByTheme = {\n  light: \"#000\",\n  dark: \"#fff\"\n};\nconst disabledIconColorByTheme = {\n  light: \"#a0a0a0\",\n  dark: \"#474747\"\n};\nconst baseNavigatorStyle = {\n  position: \"absolute\",\n  top: \"50%\",\n  cursor: \"pointer\"\n};\nconst leftNavigatorStyle = {\n  left: `-${NAVIGATOR_SIZE}px`,\n  transform: \"translateY(-50%) rotate(180deg)\"\n};\nconst rightNavigatorStyle = {\n  right: `-${NAVIGATOR_SIZE}px`,\n  transform: \"translateY(-50%)\"\n};\nconst wrapperResetStyle = {\n  padding: 0,\n  margin: 0\n};\nconst wrapperStyle = {\n  padding: \"0 20px\",\n  msOverflowStyle: \"none\",\n  scrollbarWidth: \"none\"\n};\nconst wrapperStyleByBreakpoint = {\n  mobile: {\n    padding: \"0 16px\",\n    scrollPaddingLeft: 16,\n    scrollPaddingRight: 16\n  },\n  tablet: {\n    padding: \"0 16px\",\n    scrollPaddingLeft: 16,\n    scrollPaddingRight: 16\n  },\n  desktop: {\n    padding: 0\n  }\n};\nexport {\n  HorizontalList\n};\n","const fromEntries = (entries) => {\n  return Object.fromEntries(entries);\n};\nexport {\n  fromEntries\n};\n","import { fromEntries } from \"./fromEntries.js\";\nimport { entries } from \"./entries.js\";\nimport merge from \"../node_modules/lodash-es/merge.js\";\nimport cloneDeep from \"../node_modules/lodash-es/cloneDeep.js\";\nconst mergeBase = (base = {}, source = {}) => {\n  return merge(cloneDeep(base), source);\n};\nconst createSlices = (slices) => {\n  const {\n    base,\n    ...rest\n  } = slices;\n  return fromEntries(entries(rest).map(([name, slice]) => [name, mergeBase(base, slice)]));\n};\nexport {\n  createSlices\n};\n","import { jsxs, jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { ProductCardType } from \"../ProductCard/ProductCard.types.js\";\nimport { Skeleton } from \"../Skeleton/Skeleton.js\";\nimport { createSlices } from \"../../../utils/createSlices.js\";\nconst ProductCardSkeleton = forwardRef(({\n  style,\n  type = ProductCardType.CARD,\n  theme = \"light\",\n  size = \"medium\",\n  hasName = true,\n  hasBrandName = true,\n  /**\n   * ProductCard 와 prop 을 공유하지만 스켈레톤에서는 뱃지를 그리지 않습니다.\n   *\n   * 뱃지 플레이스홀더가 있으면 가로 스크롤 목록에서 카드가 순차적으로 로드될 때\n   * 뱃지 영역만큼 높이가 출렁여 목록 전체가 덜컹거리기 때문입니다.\n   *\n   * 값을 rest 에 남겨두면 DOM 속성으로 새어나가므로 여기서 걷어냅니다.\n   */\n  hasBadges: _hasBadges,\n  ...rest\n}, ref) => {\n  const styles = stylesByType[type][size];\n  return /* @__PURE__ */ jsxs(\"div\", { ref, ...rest, style: {\n    ...containerStyle,\n    ...styles == null ? void 0 : styles.container,\n    ...style\n  }, children: [\n    /* @__PURE__ */ jsx(Skeleton, { style: {\n      ...styles == null ? void 0 : styles.image,\n      ...baseStyleByTheme[theme],\n      borderRadius: 2\n    } }),\n    /* @__PURE__ */ jsxs(\"div\", { style: summaryStyle, children: [\n      hasBrandName ? /* @__PURE__ */ jsx(Skeleton, { style: {\n        ...styles == null ? void 0 : styles.brandName,\n        ...baseStyleByTheme[theme],\n        borderRadius: 6\n      } }) : null,\n      hasName ? /* @__PURE__ */ jsx(Skeleton, { style: {\n        ...styles == null ? void 0 : styles.name,\n        ...baseStyleByTheme[theme],\n        borderRadius: 6\n      } }) : null,\n      /* @__PURE__ */ jsx(Skeleton, { style: {\n        ...styles == null ? void 0 : styles.price,\n        ...baseStyleByTheme[theme],\n        borderRadius: 6\n      } })\n    ] })\n  ] });\n});\nconst baseStyleByTheme = {\n  light: {\n    backgroundColor: \"#dee2e6\"\n  },\n  dark: {\n    backgroundColor: \"#27272a\"\n  }\n};\nconst containerStyle = {\n  display: \"flex\",\n  gap: \"10px\",\n  width: \"100%\",\n  margin: \"0 auto\"\n};\nconst summaryStyle = {\n  flex: \"1\",\n  display: \"flex\",\n  flexDirection: \"column\"\n};\nconst barStyles = createSlices({\n  base: {\n    container: {\n      flexDirection: \"row\",\n      alignItems: \"center\",\n      gap: 8\n    },\n    brandName: {\n      width: \"60%\",\n      height: 11\n    },\n    name: {\n      width: \"80%\",\n      height: 13,\n      marginTop: 5\n    },\n    price: {\n      width: \"50%\",\n      height: 16,\n      marginTop: 5\n    },\n    badge: {\n      width: \"20%\",\n      height: 16,\n      marginTop: 6\n    }\n  },\n  small: {\n    image: {\n      width: 56,\n      height: 56\n    }\n  },\n  medium: {\n    image: {\n      width: 80,\n      height: 80\n    }\n  }\n});\nconst cardStyles = createSlices({\n  base: {\n    container: {\n      flexDirection: \"column\",\n      gap: 10\n    },\n    image: {\n      width: \"100%\",\n      aspectRatio: \"1 / 1\"\n    },\n    brandName: {\n      width: \"60%\",\n      height: 16.31\n    },\n    name: {\n      width: \"80%\",\n      height: 16.31,\n      marginTop: 4\n    },\n    price: {\n      width: \"50%\",\n      height: 15.2,\n      marginTop: 4\n    },\n    badge: {\n      width: \"20%\",\n      height: 13,\n      marginTop: 4\n    }\n  },\n  small: {},\n  medium: {}\n});\nconst cardDetailedStyles = createSlices({\n  base: {\n    container: {\n      flexDirection: \"column\",\n      gap: 14\n    },\n    image: {\n      width: \"100%\",\n      aspectRatio: \"1 / 1\"\n    },\n    brandName: {\n      width: \"60%\",\n      height: 16.31\n    },\n    name: {\n      width: \"80%\",\n      height: 19.59,\n      marginTop: 4\n    },\n    price: {\n      width: \"50%\",\n      height: 22.41,\n      marginTop: 6\n    },\n    badge: {\n      width: \"20%\",\n      height: 16,\n      marginTop: 6\n    }\n  },\n  small: {},\n  medium: {}\n});\nconst stylesByType = {\n  [ProductCardType.BAR]: barStyles,\n  [ProductCardType.CARD]: cardStyles,\n  [ProductCardType.CARD_DETAILED]: cardDetailedStyles\n};\nexport {\n  ProductCardSkeleton\n};\n","import { useRef, useMemo, useState, useEffect } from \"react\";\nimport { useInView } from \"framer-motion\";\nimport { useHorizontalScrollContext } from \"./HorizontalScrollContext.js\";\nimport { useProductsContext } from \"./Root.hooks.js\";\nconst HORIZONTAL_VIRTUAL_ROOT_MARGIN = \"800px 0px\";\nconst IN_VIEW_HIDE_DELAY_MS = 200;\nconst isProductsListAppend = (prev, next) => prev !== null && next.length > prev.length && next.startsWith(`${prev},`);\nconst useHorizontalVirtualItem = ({\n  isPaginationSentinel,\n  onLastItemView\n}) => {\n  const horizontalScroll = useHorizontalScrollContext();\n  const {\n    products,\n    pending\n  } = useProductsContext();\n  const itemRef = useRef(null);\n  const onLastItemViewRef = useRef(onLastItemView);\n  const wasInScrollViewRef = useRef(false);\n  const lastFetchedAtProductCountRef = useRef(0);\n  const hideInViewTimerRef = useRef();\n  const prevProductsSignatureRef = useRef(null);\n  onLastItemViewRef.current = onLastItemView;\n  const virtualize = (horizontalScroll == null ? void 0 : horizontalScroll.virtualize) === true;\n  const productsSignature = useMemo(() => products.map((product) => product.productId).join(\",\"), [products]);\n  const isInScrollView = useInView(itemRef, {\n    root: horizontalScroll == null ? void 0 : horizontalScroll.scrollRef,\n    margin: HORIZONTAL_VIRTUAL_ROOT_MARGIN,\n    amount: 0\n  });\n  const [stableInView, setStableInView] = useState(false);\n  useEffect(() => {\n    if (isInScrollView) {\n      if (hideInViewTimerRef.current) {\n        clearTimeout(hideInViewTimerRef.current);\n        hideInViewTimerRef.current = void 0;\n      }\n      setStableInView(true);\n      return;\n    }\n    hideInViewTimerRef.current = setTimeout(() => {\n      setStableInView(false);\n      hideInViewTimerRef.current = void 0;\n    }, IN_VIEW_HIDE_DELAY_MS);\n    return () => {\n      if (hideInViewTimerRef.current) {\n        clearTimeout(hideInViewTimerRef.current);\n        hideInViewTimerRef.current = void 0;\n      }\n    };\n  }, [isInScrollView]);\n  const [holdFullRender, setHoldFullRender] = useState(true);\n  useEffect(() => {\n    const prev = prevProductsSignatureRef.current;\n    prevProductsSignatureRef.current = productsSignature;\n    if (isProductsListAppend(prev, productsSignature)) {\n      return;\n    }\n    if (prev !== null) {\n      setStableInView(false);\n    }\n    setHoldFullRender(true);\n    const frameId = requestAnimationFrame(() => setHoldFullRender(false));\n    return () => cancelAnimationFrame(frameId);\n  }, [productsSignature]);\n  useEffect(() => {\n    if (!virtualize || !isPaginationSentinel) {\n      return;\n    }\n    if (!isInScrollView) {\n      wasInScrollViewRef.current = false;\n      return;\n    }\n    const justEntered = !wasInScrollViewRef.current;\n    const sentinelAdvanced = lastFetchedAtProductCountRef.current !== products.length;\n    wasInScrollViewRef.current = true;\n    if (!justEntered && !sentinelAdvanced) {\n      return;\n    }\n    lastFetchedAtProductCountRef.current = products.length;\n    onLastItemViewRef.current();\n  }, [virtualize, isPaginationSentinel, isInScrollView, products.length]);\n  return {\n    itemRef,\n    showProductCard: !virtualize || pending || holdFullRender || stableInView\n  };\n};\nexport {\n  HORIZONTAL_VIRTUAL_ROOT_MARGIN,\n  useHorizontalVirtualItem\n};\n","const isLast = (list, index) => list.length - 1 === index;\nexport {\n  isLast\n};\n","function noop() {\n}\nexport {\n  noop as default\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { Intersection } from \"../../../@shared/Intersection/Intersection.js\";\nimport \"react-dom\";\nimport \"../../../@shared/Icon/Icon.js\";\nimport { ProductCardSkeleton } from \"../../../@shared/ProductCardSkeleton/ProductCardSkeleton.js\";\nimport \"react\";\nimport \"../../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../../config/index.js\";\nimport \"../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../../apis/user/UserApiService.js\";\nimport \"../../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../../hooks/stores/toast/toast.store.js\";\nimport { useTheme } from \"../../../../hooks/useTheme.js\";\nimport \"../../../@shared/providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"../../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"../../Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../../hooks/useFeatureFlag.js\";\nimport \"../../../../utils/redirectLogin.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { useProductsContext } from \"./Root.hooks.js\";\nimport { useHorizontalScrollContext } from \"./HorizontalScrollContext.js\";\nimport { HORIZONTAL_VIRTUAL_ROOT_MARGIN, useHorizontalVirtualItem } from \"./useHorizontalVirtualItem.js\";\nimport { isLast } from \"../../../../utils/isLast.js\";\nimport noop from \"../../../../node_modules/lodash-es/noop.js\";\nconst Item = ({\n  children,\n  index,\n  onLastItemView = noop\n}) => {\n  const {\n    products,\n    initialHasNext\n  } = useProductsContext();\n  const horizontalScroll = useHorizontalScrollContext();\n  const isPaginationSentinel = isLast(products, index) && initialHasNext;\n  if ((horizontalScroll == null ? void 0 : horizontalScroll.virtualize) !== true) {\n    return /* @__PURE__ */ jsx(ItemWithoutVirtualization, { isPaginationSentinel, onLastItemView, children });\n  }\n  return /* @__PURE__ */ jsx(VirtualizedItem, { isPaginationSentinel, onLastItemView, children });\n};\nconst ItemWithoutVirtualization = ({\n  children,\n  isPaginationSentinel,\n  onLastItemView\n}) => {\n  if (isPaginationSentinel) {\n    return /* @__PURE__ */ jsx(Intersection, { style: itemStyle, margin: HORIZONTAL_VIRTUAL_ROOT_MARGIN, onView: onLastItemView, children });\n  }\n  return /* @__PURE__ */ jsx(\"div\", { style: itemStyle, children });\n};\nconst VirtualizedItem = ({\n  children,\n  isPaginationSentinel,\n  onLastItemView\n}) => {\n  const theme = useTheme();\n  const {\n    card,\n    cardStyle\n  } = useProductsContext();\n  const {\n    itemRef,\n    showProductCard\n  } = useHorizontalVirtualItem({\n    isPaginationSentinel,\n    onLastItemView\n  });\n  return /* @__PURE__ */ jsx(\"div\", { ref: itemRef, style: itemStyle, children: showProductCard ? children : /* @__PURE__ */ jsx(\"div\", { style: offscreenSlotStyle, \"aria-hidden\": true, children: /* @__PURE__ */ jsx(ProductCardSkeleton, { theme, ...card, style: cardStyle }) }) });\n};\nconst itemStyle = {\n  scrollSnapAlign: \"start\",\n  boxSizing: \"border-box\"\n};\nconst offscreenSlotStyle = {\n  visibility: \"hidden\",\n  pointerEvents: \"none\",\n  width: \"100%\"\n};\nexport {\n  Item\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport \"react\";\nimport \"../../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../../config/index.js\";\nimport \"../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../../apis/user/UserApiService.js\";\nimport \"../../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../../hooks/stores/toast/toast.store.js\";\nimport { useTheme } from \"../../../../hooks/useTheme.js\";\nimport \"../../../@shared/providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"../../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react-dom\";\nimport \"../../Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../../hooks/useFeatureFlag.js\";\nimport \"../../../../utils/redirectLogin.js\";\nimport \"../../../../utils/event-properties/source.js\";\nconst PeekColumnDivider = ({\n  rowSpan\n}) => {\n  const theme = useTheme();\n  return /* @__PURE__ */ jsx(\"div\", { \"aria-hidden\": true, style: {\n    ...gutterStyle,\n    gridRow: `1 / span ${rowSpan}`\n  }, children: /* @__PURE__ */ jsx(\"div\", { style: {\n    ...lineStyle,\n    backgroundColor: dividerColorByTheme[theme]\n  } }) });\n};\nconst gutterStyle = {\n  display: \"flex\",\n  alignItems: \"stretch\",\n  alignSelf: \"stretch\",\n  boxSizing: \"border-box\",\n  paddingLeft: 6,\n  paddingRight: 14\n};\nconst lineStyle = {\n  width: 1,\n  minWidth: 1,\n  alignSelf: \"stretch\",\n  flexShrink: 0\n};\nconst dividerColorByTheme = {\n  light: \"rgba(0, 0, 0, 0.06)\",\n  dark: \"rgba(255, 255, 255, 0.08)\"\n};\nexport {\n  PeekColumnDivider\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { Grid as Default } from \"../../../@shared/layouts/Grid.js\";\nimport { useBreakpoint } from \"../../../../hooks/useBreakpoint.js\";\nimport { ComponentName } from \"../../../../styles/ComponentName.js\";\nimport { createWithStyle } from \"../../../../styles/createWithStyle.js\";\nimport { css } from \"../../../../styles/css.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { isCanvas } from \"../../../../utils/framer/isCanvas.js\";\nimport \"framer\";\nimport { ProductCardType } from \"../../../@shared/ProductCard/ProductCard.types.js\";\nconst {\n  classNames,\n  withStyle\n} = createWithStyle(ComponentName.ProductsVerticalList, {\n  container: css`\n    &[data-card-type='card'],\n    &[data-card-type='card-detailed'] {\n      @media (max-width: 614px) {\n        grid-template-columns: repeat(2, minmax(100px, 1fr)) !important;\n      }\n    }\n\n    &[data-card-type='bar'] {\n      @media (max-width: 614px) {\n        grid-template-columns: repeat(1, minmax(100px, 1fr)) !important;\n      }\n    }\n  `\n});\nconst VerticalList = withStyle(forwardRef(({\n  style,\n  children,\n  options,\n  padding\n}, ref) => {\n  const breakpoint = useBreakpoint();\n  const {\n    row,\n    column,\n    card\n  } = options;\n  const {\n    type = ProductCardType.CARD\n  } = card ?? {};\n  const isAutoColumn = (column == null ? void 0 : column.count) === \"auto\";\n  const shouldApplyCanvasStyle = isAutoColumn && isCanvas() && breakpoint === \"mobile\";\n  return /* @__PURE__ */ jsx(Default, { ref, className: isAutoColumn ? classNames.container : void 0, style: {\n    ...wrapperResetStyle,\n    ...wrapperStyleByBreakpoint[breakpoint],\n    ...shouldApplyCanvasStyle ? wrapperMobileCanvasStyle[type] : void 0,\n    ...padding ? {\n      padding: `${padding.top ?? 0}px ${padding.right ?? 0}px ${padding.bottom ?? 0}px ${padding.left ?? 0}px`\n    } : void 0,\n    ...style\n  }, row, column, \"data-card-type\": type, children });\n}));\nconst wrapperResetStyle = {\n  padding: 0,\n  margin: 0\n};\nconst wrapperMobileCanvasStyle = {\n  [ProductCardType.CARD]: {\n    gridTemplateColumns: \"repeat(2, minmax(100px, 1fr))\"\n  },\n  [ProductCardType.CARD_DETAILED]: {\n    gridTemplateColumns: \"repeat(2, minmax(100px, 1fr))\"\n  },\n  [ProductCardType.BAR]: {\n    gridTemplateColumns: \"repeat(1, minmax(100px, 1fr))\"\n  }\n};\nconst wrapperStyleByBreakpoint = {\n  mobile: {\n    padding: \"0 16px\"\n  },\n  tablet: {\n    padding: \"0 16px\"\n  },\n  desktop: {\n    padding: 0\n  }\n};\nexport {\n  VerticalList\n};\n","import { jsx, jsxs } from \"react/jsx-runtime\";\nimport { createContext, forwardRef, useMemo, useRef, useEffect, Fragment } from \"react\";\nimport { useProductGroupHeart } from \"../../../../hooks/product/useProductGroupHeart.js\";\nimport \"../../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../../config/index.js\";\nimport \"../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../../apis/user/UserApiService.js\";\nimport \"../../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../../hooks/stores/toast/toast.store.js\";\nimport \"../../../@shared/providers/ThemeProvider/ThemeProvider.js\";\nimport { useBreakpoint } from \"../../../../hooks/useBreakpoint.js\";\nimport \"../../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react-dom\";\nimport \"../../Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../../hooks/useFeatureFlag.js\";\nimport \"../../../../utils/redirectLogin.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { withDefaultRowGap } from \"./Root.utils.js\";\nimport { HorizontalList } from \"./HorizontalList.js\";\nimport { Item } from \"./Item.js\";\nimport { PeekColumnDivider } from \"./PeekColumnDivider.js\";\nimport { VerticalList } from \"./VerticalList.js\";\nimport { PRODUCTS_PER_REQUEST } from \"../../Products/Products.js\";\nconst ProductsContext = createContext(null);\nconst Root = forwardRef(({\n  style,\n  listStyle,\n  cardStyle,\n  padding,\n  navigatorOffset,\n  children,\n  products: _products,\n  loading = false,\n  options: responsiveOptions,\n  hasNext: initialHasNext = false,\n  onLastItemView\n}, ref) => {\n  var _a;\n  const breakpoint = useBreakpoint();\n  const {\n    isHeartOn,\n    handleHeartOn,\n    handleHeartOff\n  } = useProductGroupHeart();\n  const options = useMemo(() => withDefaultRowGap(responsiveOptions[breakpoint], breakpoint), [responsiveOptions, breakpoint]);\n  const {\n    direction = \"horizontal\",\n    card = {},\n    row,\n    column,\n    columnDivider = false,\n    navigator = false\n  } = options;\n  const rowCount = (row == null ? void 0 : row.count) === \"auto\" ? 0 : (row == null ? void 0 : row.count) ?? 0;\n  const columnCount = (column == null ? void 0 : column.count) === \"auto\" ? 0 : (column == null ? void 0 : column.count) ?? 0;\n  const displayCount = getDisplayCount(options);\n  const products = slice(_products, rowCount * columnCount);\n  const isInitialLoading = loading && products.length === 0;\n  const pending = isInitialLoading;\n  const meetsVirtualizeThreshold = direction === \"horizontal\" && !navigator && !isInitialLoading && !pending && products.length > displayCount + (rowCount > 0 ? rowCount : 0);\n  const virtualizeLatchRef = useRef(false);\n  const prevHeadProductIdRef = useRef(void 0);\n  const headProductId = (_a = products[0]) == null ? void 0 : _a.productId;\n  if (meetsVirtualizeThreshold) {\n    virtualizeLatchRef.current = true;\n  }\n  useEffect(() => {\n    if (prevHeadProductIdRef.current !== void 0 && headProductId !== prevHeadProductIdRef.current) {\n      virtualizeLatchRef.current = false;\n    }\n    prevHeadProductIdRef.current = headProductId;\n  }, [headProductId]);\n  useEffect(() => {\n    if (isInitialLoading) {\n      virtualizeLatchRef.current = false;\n    }\n  }, [isInitialLoading]);\n  const shouldVirtualizeHorizontal = meetsVirtualizeThreshold || virtualizeLatchRef.current && direction === \"horizontal\" && !navigator && !isInitialLoading && !pending;\n  const pagination = displayCount < products.length || initialHasNext;\n  const List = direction === \"horizontal\" ? HorizontalList : VerticalList;\n  const handleLastItemView = () => {\n    if (isInitialLoading) {\n      return;\n    }\n    onLastItemView == null ? void 0 : onLastItemView();\n  };\n  return /* @__PURE__ */ jsx(ProductsContext.Provider, { value: {\n    card,\n    cardStyle,\n    products,\n    pending,\n    loading,\n    initialHasNext,\n    isHeartOn,\n    onHeartOn: handleHeartOn,\n    onHeartOff: handleHeartOff\n  }, children: /* @__PURE__ */ jsxs(List, { ref, style, listStyle, options, pagination, padding, navigatorOffset, ...direction === \"horizontal\" ? {\n    virtualize: shouldVirtualizeHorizontal\n  } : {}, children: [\n    products.map((product, index) => /* @__PURE__ */ jsxs(Fragment, { children: [\n      /* @__PURE__ */ jsx(Item, { index, onLastItemView: handleLastItemView, children: children({\n        index,\n        product,\n        pending\n      }) }),\n      shouldRenderPeekColumnDivider({\n        columnDivider,\n        direction,\n        rowCount,\n        index,\n        productsLength: products.length\n      }) ? /* @__PURE__ */ jsx(PeekColumnDivider, { rowSpan: rowCount }, `peek-column-divider-${product.productId}`) : null\n    ] }, product.productId)),\n    pending ? Array.from({\n      length: displayCount\n    }, (_, index) => /* @__PURE__ */ jsx(Item, { index, children: children({\n      index,\n      pending\n    }) }, index)) : null\n  ] }) });\n});\nconst getDisplayCount = (options) => {\n  const {\n    direction,\n    column,\n    row\n  } = options;\n  const {\n    displayCount: columnDisplayCount = 0,\n    count: columnCount = 0\n  } = column ?? {};\n  const {\n    displayCount: rowDisplayCount = 0,\n    count: rowCount = 0\n  } = row ?? {};\n  const isAutoRow = rowCount === \"auto\";\n  const isAutoColumn = columnCount === \"auto\";\n  if (direction === \"horizontal\") {\n    return columnDisplayCount * (isAutoRow ? 0 : rowCount);\n  }\n  if (direction === \"vertical\" && isAutoColumn) {\n    return PRODUCTS_PER_REQUEST;\n  }\n  return rowDisplayCount * (isAutoColumn ? 0 : columnCount);\n};\nconst slice = (list, count) => {\n  return count > 0 ? list.slice(0, count) : list;\n};\nconst shouldRenderPeekColumnDivider = ({\n  columnDivider,\n  direction,\n  rowCount,\n  index,\n  productsLength\n}) => {\n  if (!columnDivider || direction !== \"horizontal\" || rowCount <= 0) {\n    return false;\n  }\n  const isEndOfColumn = (index + 1) % rowCount === 0;\n  const hasNextColumn = index + 1 < productsLength;\n  return isEndOfColumn && hasNextColumn;\n};\nexport {\n  ProductsContext,\n  Root\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { useInView } from \"framer-motion\";\nimport { forwardRef, useRef } from \"react\";\nimport { mergeRefs } from \"../../../utils/react/mergeRefs.js\";\nconst Lazy = ({\n  as,\n  children,\n  fallback,\n  margin,\n  ...rest\n}, ref) => {\n  const elementRef = useRef(null);\n  const isIntersecting = useInView(elementRef, {\n    margin,\n    once: true\n  });\n  const Component = as ?? \"div\";\n  if (!isIntersecting) {\n    return /* @__PURE__ */ jsx(Component, { ref: mergeRefs([ref, elementRef]), ...rest, children: fallback });\n  }\n  return /* @__PURE__ */ jsx(Component, { ref: mergeRefs([ref, elementRef]), ...rest, children });\n};\nconst Default = forwardRef(Lazy);\nexport {\n  Default as Lazy\n};\n","import { jsx, jsxs } from \"react/jsx-runtime\";\nimport { ProductCard } from \"../../../@shared/ProductCard/ProductCard.js\";\nimport { useProductsContext } from \"./Root.hooks.js\";\nimport { ProductCardSkeleton } from \"../../../@shared/ProductCardSkeleton/ProductCardSkeleton.js\";\nimport \"react\";\nimport \"../../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../../config/index.js\";\nimport \"../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../../apis/user/UserApiService.js\";\nimport \"../../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../../hooks/stores/toast/toast.store.js\";\nimport { useTheme } from \"../../../../hooks/useTheme.js\";\nimport \"../../../@shared/providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"../../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react-dom\";\nimport \"../../Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../../hooks/useFeatureFlag.js\";\nimport \"../../../../utils/redirectLogin.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { Lazy as Default } from \"../../../@shared/Lazy/Lazy.js\";\nimport { typography } from \"../../../../styles/typography.js\";\nimport { ProductCardType } from \"../../../@shared/ProductCard/ProductCard.types.js\";\nconst Card = ({\n  index,\n  componentName,\n  eventProperties,\n  variant,\n  showLazyFallback = true,\n  ...rest\n}) => {\n  const theme = useTheme();\n  const {\n    products,\n    card,\n    cardStyle: sharedCardStyle,\n    pending,\n    isHeartOn,\n    onHeartOn,\n    onHeartOff\n  } = useProductsContext();\n  const product = products[index];\n  const style = sharedCardStyle || rest.style ? {\n    ...sharedCardStyle,\n    ...rest.style\n  } : void 0;\n  const isBarType = card.type === ProductCardType.BAR;\n  const isCardType = card.type === ProductCardType.CARD || card.type === ProductCardType.CARD_DETAILED;\n  const hideBarTypeRank = !isBarType || !card.hasRank;\n  const hideCardTypeRank = !isCardType || !card.hasRank;\n  const position = index + 1;\n  if (pending || !product) {\n    return /* @__PURE__ */ jsx(ProductRank, { hidden: hideBarTypeRank, position, children: /* @__PURE__ */ jsx(ProductCardSkeleton, { theme, ...card, style }) });\n  }\n  return /* @__PURE__ */ jsx(Default, { margin: \"0px 200px\", fallback: showLazyFallback ? /* @__PURE__ */ jsx(ProductRank, { hidden: hideBarTypeRank, position, children: /* @__PURE__ */ jsx(ProductCardSkeleton, { theme, ...card, style }) }) : null, children: /* @__PURE__ */ jsx(ProductRank, { hidden: hideBarTypeRank, position, children: /* @__PURE__ */ jsx(ProductCard, { ...rest, ...card, style, hasRank: !hideCardTypeRank, theme, product, positionNo: position, variant, isHeartOn: isHeartOn(product.productId), onHeartOn, onHeartOff, eventProperties: {\n    product,\n    isProductGroup: true,\n    componentName,\n    positionNo: position,\n    ...eventProperties\n  } }) }) });\n};\nconst ProductRank = ({\n  children,\n  hidden = false,\n  position\n}) => {\n  const theme = useTheme();\n  if (hidden) {\n    return children;\n  }\n  return /* @__PURE__ */ jsxs(\"div\", { style: containerStyle, children: [\n    /* @__PURE__ */ jsx(\"div\", { style: rankAreaStyle, children: /* @__PURE__ */ jsx(\"div\", { style: {\n      ...typography(16, 700),\n      ...rankTextStyleByTheme[theme]\n    }, children: position }) }),\n    children\n  ] });\n};\nconst containerStyle = {\n  display: \"flex\",\n  alignItems: \"center\",\n  gap: \"8px\"\n};\nconst rankAreaStyle = {\n  minWidth: 20,\n  height: \"100%\",\n  display: \"flex\",\n  alignItems: \"center\",\n  justifyContent: \"center\"\n};\nconst rankTextStyleByTheme = {\n  light: {\n    color: \"#000\"\n  },\n  dark: {\n    color: \"#fff\"\n  }\n};\nexport {\n  Card\n};\n","import { Root } from \"./Root.js\";\nimport { Card } from \"./Card.js\";\nconst Products = {\n  Root,\n  Card\n};\nexport {\n  Products\n};\n","const hideClosestParentByFramerName = (currentElement, framerName, isVisible) => {\n  if (!currentElement) {\n    return null;\n  }\n  const targetName = framerName || \"segmentWrapper\";\n  const parentElement = currentElement.closest(`[data-framer-name=\"${targetName}\"]`);\n  if (parentElement) {\n    parentElement.style.display = isVisible ? parentElement.style.display === \"none\" ? \"\" : parentElement.style.display : \"none\";\n  }\n  return parentElement;\n};\nexport {\n  hideClosestParentByFramerName\n};\n","const getPaddingStyle = (value) => {\n  return value.isMixed ? `${value.paddingTop}px ${value.paddingRight}px ${value.paddingBottom}px ${value.paddingLeft}px` : `${value.padding}px`;\n};\nconst getPadding = (value) => {\n  return {\n    top: value.isMixed ? value.paddingTop : value.padding,\n    right: value.isMixed ? value.paddingRight : value.padding,\n    bottom: value.isMixed ? value.paddingBottom : value.padding,\n    left: value.isMixed ? value.paddingLeft : value.padding\n  };\n};\nexport {\n  getPadding,\n  getPaddingStyle\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { createContext } from \"react\";\nimport \"../../../systems/Countdown/Countdown.js\";\nimport \"react-dom\";\nimport \"../../../systems/Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../systems/Expandable/Expandable.js\";\nimport \"../../../systems/FixedScrollProgressBar/FixedScrollProgressBar.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../../hooks/stores/toast/toast.store.js\";\nimport \"../../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../../config/index.js\";\nimport \"../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../../apis/user/UserApiService.js\";\nimport \"../../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../systems/ShareButtonWithReferralEvent/ShareButtonWithReferralEvent.js\";\nimport \"../../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../@shared/providers/ThemeProvider/ThemeProvider.js\";\nimport \"../../../@shared/providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"../../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../../hooks/useFeatureFlag.js\";\nimport \"../../../../utils/redirectLogin.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport \"../../../../constants/snowplow/snowplowSchema.js\";\nimport { PRODUCTS_PER_REQUEST } from \"../../../systems/Products/Products.js\";\nimport \"../../../systems/ResponsiveSplitView/ResponsiveSplitView.js\";\nimport \"../../../systems/ResponsiveSplitViewOverlayButton/ResponsiveSplitViewOverlayButton.js\";\nimport \"../../../systems/RollingNumber/RollingNumber.js\";\nimport \"../../../systems/TabBar/TabBar.js\";\nimport \"../../../systems/TimeProgressBar/TimeProgressBar.js\";\nimport \"../../../systems/ViewportContainer/ViewportContainer.js\";\nimport \"../../../systems/TabBarV2/TabBarV2.js\";\nimport \"../../../systems/TabBarV3/TabBarV3.js\";\nimport \"../../../systems/TabBarV4/TabBarV4.js\";\nconst ProductsElementContext = createContext({\n  query: void 0,\n  size: PRODUCTS_PER_REQUEST\n});\nconst ProductsElementProvider = ({\n  children,\n  query,\n  size\n}) => {\n  return /* @__PURE__ */ jsx(ProductsElementContext.Provider, { value: {\n    query,\n    size\n  }, children });\n};\nexport {\n  ProductsElementContext,\n  ProductsElementProvider\n};\n","const PRODUCTS_PER_REQUEST = 30;\nexport {\n  PRODUCTS_PER_REQUEST\n};\n","var ScrollDirection = /* @__PURE__ */ ((ScrollDirection2) => {\n  ScrollDirection2[\"Vertical\"] = \"vertical\";\n  ScrollDirection2[\"Horizontal\"] = \"horizontal\";\n  return ScrollDirection2;\n})(ScrollDirection || {});\nvar ProductsModuleInputType = /* @__PURE__ */ ((ProductsModuleInputType2) => {\n  ProductsModuleInputType2[ProductsModuleInputType2[\"Linked\"] = 0] = \"Linked\";\n  ProductsModuleInputType2[ProductsModuleInputType2[\"Manual\"] = 1] = \"Manual\";\n  ProductsModuleInputType2[ProductsModuleInputType2[\"Preuser\"] = 2] = \"Preuser\";\n  return ProductsModuleInputType2;\n})(ProductsModuleInputType || {});\nvar PaginationType = /* @__PURE__ */ ((PaginationType2) => {\n  PaginationType2[PaginationType2[\"Default\"] = 0] = \"Default\";\n  PaginationType2[PaginationType2[\"ExpandButton\"] = 1] = \"ExpandButton\";\n  PaginationType2[PaginationType2[\"None\"] = 2] = \"None\";\n  return PaginationType2;\n})(PaginationType || {});\nexport {\n  PaginationType,\n  ProductsModuleInputType,\n  ScrollDirection\n};\n","import { useContext } from \"react\";\nimport { IntersectionContext } from \"./IntersectionProvider.js\";\nconst useIntersectionContext = () => {\n  return useContext(IntersectionContext);\n};\nexport {\n  useIntersectionContext\n};\n","import { useContext } from \"react\";\nimport { ProductsElementContext } from \"./ProductsElementProvider.js\";\nconst useProductsElementContext = () => {\n  return useContext(ProductsElementContext);\n};\nexport {\n  useProductsElementContext\n};\n","import { useRef, useCallback } from \"react\";\nimport useSWR from \"../../core/dist/index.js\";\nimport { withMiddleware, SWRGlobalState, cache, INFINITE_PREFIX, createCacheHelper, isUndefined, useIsomorphicLayoutEffect, serialize, UNDEFINED, isFunction } from \"../../_internal/dist/index.js\";\nimport { s as shimExports } from \"../../../use-sync-external-store/shim/index.js\";\nconst getFirstPageKey = (getKey) => {\n  return serialize(getKey ? getKey(0, null) : null)[0];\n};\nconst EMPTY_PROMISE = Promise.resolve();\nconst infinite = (useSWRNext) => (getKey, fn, config) => {\n  const didMountRef = useRef(false);\n  const { cache: cache$1, initialSize = 1, revalidateAll = false, persistSize = false, revalidateFirstPage = true, revalidateOnMount = false, parallel = false } = config;\n  const [, , , PRELOAD] = SWRGlobalState.get(cache);\n  let infiniteKey;\n  try {\n    infiniteKey = getFirstPageKey(getKey);\n    if (infiniteKey)\n      infiniteKey = INFINITE_PREFIX + infiniteKey;\n  } catch (err) {\n  }\n  const [get, set, subscribeCache] = createCacheHelper(cache$1, infiniteKey);\n  const getSnapshot = useCallback(() => {\n    const size = isUndefined(get()._l) ? initialSize : get()._l;\n    return size;\n  }, [\n    cache$1,\n    infiniteKey,\n    initialSize\n  ]);\n  shimExports.useSyncExternalStore(useCallback(\n    (callback) => {\n      if (infiniteKey)\n        return subscribeCache(infiniteKey, () => {\n          callback();\n        });\n      return () => {\n      };\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      cache$1,\n      infiniteKey\n    ]\n  ), getSnapshot, getSnapshot);\n  const resolvePageSize = useCallback(() => {\n    const cachedPageSize = get()._l;\n    return isUndefined(cachedPageSize) ? initialSize : cachedPageSize;\n  }, [\n    infiniteKey,\n    initialSize\n  ]);\n  const lastPageSizeRef = useRef(resolvePageSize());\n  useIsomorphicLayoutEffect(() => {\n    if (!didMountRef.current) {\n      didMountRef.current = true;\n      return;\n    }\n    if (infiniteKey) {\n      set({\n        _l: persistSize ? lastPageSizeRef.current : resolvePageSize()\n      });\n    }\n  }, [\n    infiniteKey,\n    cache$1\n  ]);\n  const shouldRevalidateOnMount = revalidateOnMount && !didMountRef.current;\n  const swr = useSWRNext(infiniteKey, async (key) => {\n    const forceRevalidateAll = get()._i;\n    const data = [];\n    const pageSize = resolvePageSize();\n    const [getCache] = createCacheHelper(cache$1, key);\n    const cacheData = getCache().data;\n    const revalidators = [];\n    let previousPageData = null;\n    for (let i = 0; i < pageSize; ++i) {\n      const [pageKey, pageArg] = serialize(getKey(i, parallel ? null : previousPageData));\n      if (!pageKey) {\n        break;\n      }\n      const [getSWRCache, setSWRCache] = createCacheHelper(cache$1, pageKey);\n      let pageData = getSWRCache().data;\n      const shouldFetchPage = revalidateAll || forceRevalidateAll || isUndefined(pageData) || revalidateFirstPage && !i && !isUndefined(cacheData) || shouldRevalidateOnMount || cacheData && !isUndefined(cacheData[i]) && !config.compare(cacheData[i], pageData);\n      if (fn && shouldFetchPage) {\n        const revalidate = async () => {\n          const hasPreloadedRequest = pageKey in PRELOAD;\n          if (!hasPreloadedRequest) {\n            pageData = await fn(pageArg);\n          } else {\n            const req = PRELOAD[pageKey];\n            delete PRELOAD[pageKey];\n            pageData = await req;\n          }\n          setSWRCache({\n            data: pageData,\n            _k: pageArg\n          });\n          data[i] = pageData;\n        };\n        if (parallel) {\n          revalidators.push(revalidate);\n        } else {\n          await revalidate();\n        }\n      } else {\n        data[i] = pageData;\n      }\n      if (!parallel) {\n        previousPageData = pageData;\n      }\n    }\n    if (parallel) {\n      await Promise.all(revalidators.map((r) => r()));\n    }\n    set({\n      _i: UNDEFINED\n    });\n    return data;\n  }, config);\n  const mutate = useCallback(\n    // eslint-disable-next-line func-names\n    function(data, opts) {\n      const options = typeof opts === \"boolean\" ? {\n        revalidate: opts\n      } : opts || {};\n      const shouldRevalidate = options.revalidate !== false;\n      if (!infiniteKey)\n        return EMPTY_PROMISE;\n      if (shouldRevalidate) {\n        if (!isUndefined(data)) {\n          set({\n            _i: false\n          });\n        } else {\n          set({\n            _i: true\n          });\n        }\n      }\n      return arguments.length ? swr.mutate(data, {\n        ...options,\n        revalidate: shouldRevalidate\n      }) : swr.mutate();\n    },\n    // swr.mutate is always the same reference\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      infiniteKey,\n      cache$1\n    ]\n  );\n  const setSize = useCallback(\n    (arg) => {\n      if (!infiniteKey)\n        return EMPTY_PROMISE;\n      const [, changeSize] = createCacheHelper(cache$1, infiniteKey);\n      let size;\n      if (isFunction(arg)) {\n        size = arg(resolvePageSize());\n      } else if (typeof arg == \"number\") {\n        size = arg;\n      }\n      if (typeof size != \"number\")\n        return EMPTY_PROMISE;\n      changeSize({\n        _l: size\n      });\n      lastPageSizeRef.current = size;\n      const data = [];\n      const [getInfiniteCache] = createCacheHelper(cache$1, infiniteKey);\n      let previousPageData = null;\n      for (let i = 0; i < size; ++i) {\n        const [pageKey] = serialize(getKey(i, previousPageData));\n        const [getCache] = createCacheHelper(cache$1, pageKey);\n        const pageData = pageKey ? getCache().data : UNDEFINED;\n        if (isUndefined(pageData)) {\n          return mutate(getInfiniteCache().data);\n        }\n        data.push(pageData);\n        previousPageData = pageData;\n      }\n      return mutate(data);\n    },\n    // exclude getKey from the dependencies, which isn't allowed to change during the lifecycle\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      infiniteKey,\n      cache$1,\n      mutate,\n      resolvePageSize\n    ]\n  );\n  return {\n    size: resolvePageSize(),\n    setSize,\n    mutate,\n    get data() {\n      return swr.data;\n    },\n    get error() {\n      return swr.error;\n    },\n    get isValidating() {\n      return swr.isValidating;\n    },\n    get isLoading() {\n      return swr.isLoading;\n    }\n  };\n};\nconst useSWRInfinite = withMiddleware(useSWR, infinite);\nexport {\n  useSWRInfinite as default,\n  infinite\n};\n","import { APIService } from \"../APIService.js\";\nimport { throwFailError } from \"../@middlewares/throwFailError.js\";\nimport { env } from \"../../config/index.js\";\nclass KeywordCollectionApiService extends APIService {\n  constructor() {\n    super();\n    this.setMiddleware(throwFailError);\n  }\n  async getKeywordCollection(collectionId) {\n    return this.get(`${env.api.content}/api/v4/framers/proxy/content-api/api/v5/keyword-collections/${collectionId}`);\n  }\n  async getCollectionProducts({\n    collectionId,\n    productGroupId,\n    sort,\n    page,\n    size\n  }) {\n    return this.get(`${env.api.content}/api/v4/framers/proxy/content-api/api/v5/keyword-collections/${collectionId}/product-groups/${productGroupId}/products`, {\n      sort,\n      page,\n      size\n    }).then((data) => ({\n      ...data.data,\n      resultList: data.data.resultList.map((product) => {\n        var _a;\n        return {\n          frontBrand: {\n            frontBrandId: product.frontBrand.id,\n            nameKor: product.frontBrand.nameKor,\n            nameEng: product.frontBrand.nameEng\n          },\n          productId: product.productId,\n          productName: product.productName,\n          subjectDescriptions: product.subjectDescriptions,\n          imageUrl: product.imageUrl,\n          consumerPrice: product.consumerPrice,\n          lastSalePrice: product.lastSalePrice,\n          lastSalePercent: product.lastSalePercent,\n          heartCount: product.heartCount,\n          heartOn: product.heartOn,\n          reviewCount: product.reviewCount,\n          reviewAveragePoint: product.reviewAveragePoint,\n          isCoupon: product.saleInfo.coupon,\n          isFreeShipping: product.freeShipping,\n          isNew: product.newProperty,\n          isSoldOut: product.soldOut,\n          frontCategories: (_a = product.frontCategories) == null ? void 0 : _a.map((category) => ({\n            largeCategoryCode: category.largeCode ?? 0,\n            largeCategoryName: category.largeName ?? \"\",\n            mediumCategoryCode: category.mediumCode ?? 0,\n            mediumCategoryName: category.mediumName ?? \"\",\n            smallCategoryCode: category.smallCode ?? 0,\n            smallCategoryName: category.smallName ?? \"\"\n          }))\n        };\n      })\n    }));\n  }\n}\nconst keywordCollectionApi = new KeywordCollectionApiService();\nexport {\n  keywordCollectionApi\n};\n","var SortType = /* @__PURE__ */ ((SortType2) => {\n  SortType2[\"FEATURED\"] = \"FEATURED\";\n  SortType2[\"BEST\"] = \"BEST\";\n  SortType2[\"NEW\"] = \"NEW\";\n  SortType2[\"REVIEW_DESC\"] = \"REVIEW_DESC\";\n  SortType2[\"PRICE_DESC\"] = \"PRICE_DESC\";\n  SortType2[\"PRICE_ASC\"] = \"PRICE_ASC\";\n  SortType2[\"DISCOUNT_DESC\"] = \"DISCOUNT_DESC\";\n  SortType2[\"LIKE_DESC\"] = \"LIKE_DESC\";\n  SortType2[\"ORDER_DESC\"] = \"ORDER_DESC\";\n  return SortType2;\n})(SortType || {});\nexport {\n  SortType\n};\n","import { APIService } from \"../APIService.js\";\nimport { throwFailError } from \"../@middlewares/throwFailError.js\";\nimport { env } from \"../../config/index.js\";\nclass BestApiService extends APIService {\n  constructor() {\n    super();\n    this.setBaseUrl(env.api.search);\n    this.setMiddleware(throwFailError);\n  }\n  async getRankedProducts(payload) {\n    return this.post(`/api/v5/best`, payload).then((data) => ({\n      products: formatBestProducts(data.data.products),\n      totalCount: data.data.totalCount\n    }));\n  }\n  async getPLPFacetGroup(payload) {\n    return this.post(`/api/v5/plp/facet-group`, payload);\n  }\n}\nconst bestApi = new BestApiService();\nconst formatBestProducts = (products) => products.map((product) => {\n  var _a;\n  return {\n    ...product,\n    frontBrand: {\n      frontBrandId: product.frontBrandNo,\n      nameKor: product.frontBrandNameKor,\n      nameEng: product.frontBrandNameEng\n    },\n    productId: product.itemNo,\n    productName: product.itemName,\n    isCoupon: product.saleInfoV2.isCoupon,\n    heartOn: true,\n    frontCategories: (_a = product.frontCategoryInfo) == null ? void 0 : _a.map((category) => ({\n      largeCategoryCode: category.categoryLargeCode,\n      largeCategoryName: category.categoryLargeName,\n      mediumCategoryCode: category.categoryMediumCode,\n      mediumCategoryName: category.categoryMediumName,\n      smallCategoryCode: category.categorySmallCode,\n      smallCategoryName: category.categorySmallName\n    }))\n  };\n});\nexport {\n  bestApi\n};\n","import { throwFailError } from \"../@middlewares/throwFailError.js\";\nimport { APIService } from \"../APIService.js\";\nimport { env } from \"../../config/index.js\";\nclass DisplayBffApiService extends APIService {\n  constructor() {\n    super();\n    this.setBaseUrl(env.api.displayBff);\n    this.setMiddleware(throwFailError);\n  }\n  async getFacetGroup(payload) {\n    return this.post(`/api/v1/listing/facet-group`, {\n      keyword: payload.keyword,\n      pageType: payload.pageType ?? \"CONTENT_COLLECTION_RECOMMEND\",\n      facets: payload.facets\n    }, {\n      credentials: \"include\"\n    });\n  }\n  async getListingItems(payload) {\n    return this.post(`/api/v1/listing/items`, payload);\n  }\n  async getItems(payload) {\n    return this.post(`/api/v1/framer/listing/promoted-items`, payload, {\n      credentials: \"include\"\n    });\n  }\n}\nconst displayBffApi = new DisplayBffApiService();\nexport {\n  displayBffApi\n};\n","var DisplayBffSortType = /* @__PURE__ */ ((DisplayBffSortType2) => {\n  DisplayBffSortType2[\"Recommended\"] = \"RECOMMENDED\";\n  DisplayBffSortType2[\"Newest\"] = \"NEWEST\";\n  DisplayBffSortType2[\"MostReviewed\"] = \"MOST_REVIEWED\";\n  DisplayBffSortType2[\"LowestPrice\"] = \"LOWEST_PRICE\";\n  DisplayBffSortType2[\"HighestPrice\"] = \"HIGHEST_PRICE\";\n  DisplayBffSortType2[\"HighestDiscount\"] = \"HIGHEST_DISCOUNT\";\n  DisplayBffSortType2[\"MostLiked\"] = \"MOST_LIKED\";\n  DisplayBffSortType2[\"MostSold\"] = \"MOST_SOLD\";\n  DisplayBffSortType2[\"MostReserved\"] = \"MOST_RESERVED\";\n  DisplayBffSortType2[\"UpcomingPerformance\"] = \"UPCOMING_PERFORMANCE\";\n  return DisplayBffSortType2;\n})(DisplayBffSortType || {});\nexport {\n  DisplayBffSortType\n};\n","import { APIService } from \"../APIService.js\";\nimport { throwFailError } from \"../@middlewares/throwFailError.js\";\nimport { env } from \"../../config/index.js\";\nclass RecommendApiService extends APIService {\n  constructor() {\n    super();\n    this.setBaseUrl(env.api.content);\n    this.setMiddleware(throwFailError);\n  }\n  async getPersonalizedProducts(productGroupId, limit) {\n    return this.get(`/api/v4/framers/proxy/content-api/api/v4/product-groups/${productGroupId}/for-you-products`, {\n      limit\n    }, {\n      credentials: \"include\"\n    }).then((data) => ({\n      ...data,\n      data: {\n        ...data.data,\n        productList: formatProducts(data.data.productList)\n      }\n    }));\n  }\n  /**\n   * @param query.tagIds 콤마 구분 기획전 태그 ID (예: `\"3515,3516\"`)\n   * @param query.categoryCodes 콤마 구분 전시 대카 코드 (예: `\"268100100,268200100\"`). 빈 문자열이면 전체\n   */\n  async getRecommendedProductsByTagId(query) {\n    return this.get(\"/api/v4/framers/proxy/content-api/api/v5/recommendation/personalize/products\", {\n      limit: query.limit,\n      tagIds: query.tagIds,\n      // content-api OpenAPI: categoryCodes integer[] → 쿼리는 콤마 구분 문자열\n      categoryCodes: query.categoryCodes ?? \"\"\n    }, {\n      credentials: \"include\"\n    }).then((data) => ({\n      ...data,\n      data: {\n        ...data.data,\n        products: formatCollectionProduct2Product(data.data.products)\n      }\n    }));\n  }\n}\nconst recommendApi = new RecommendApiService();\nconst formatCollectionProduct2Product = (products) => products.map((product) => {\n  var _a;\n  return {\n    frontBrand: {\n      frontBrandId: product.frontBrand.id,\n      nameKor: product.frontBrand.nameKor,\n      nameEng: product.frontBrand.nameEng\n    },\n    productId: product.productId,\n    productName: product.productName,\n    subjectDescriptions: product.subjectDescriptions,\n    imageUrl: product.imageUrl,\n    consumerPrice: product.consumerPrice,\n    lastSalePrice: product.lastSalePrice,\n    lastSalePercent: product.lastSalePercent,\n    heartCount: product.heartCount,\n    heartOn: product.heartOn,\n    reviewCount: product.reviewCount,\n    reviewAveragePoint: product.reviewAveragePoint,\n    isCoupon: product.saleInfo.coupon,\n    isFreeShipping: product.freeShipping,\n    isNew: product.newProperty,\n    isSoldOut: product.soldOut,\n    frontCategories: (_a = product.frontCategories) == null ? void 0 : _a.map((category) => ({\n      largeCategoryCode: category.largeCode ?? 0,\n      largeCategoryName: category.largeName ?? \"\",\n      mediumCategoryCode: category.mediumCode ?? 0,\n      mediumCategoryName: category.mediumName ?? \"\",\n      smallCategoryCode: category.smallCode ?? 0,\n      smallCategoryName: category.smallName ?? \"\"\n    }))\n  };\n});\nconst formatProducts = (products) => products.map((product) => ({\n  frontBrand: {\n    frontBrandId: product.frontBrandId,\n    nameKor: product.frontBrandNameKor,\n    nameEng: product.frontBrandNameEng\n  },\n  productId: product.productId,\n  productName: product.productName,\n  subjectDescriptions: product.subjectDescriptions,\n  imageUrl: product.imageUrl,\n  consumerPrice: product.consumerPrice,\n  lastSalePrice: product.lastSalePrice,\n  lastSalePercent: product.lastSalePercent,\n  heartCount: product.heartCount,\n  heartOn: product.heartOn,\n  reviewCount: product.reviewCount,\n  reviewAveragePoint: product.reviewAveragePoint,\n  isCoupon: product.searchSale.coupon,\n  isFreeShipping: product.freeShipping,\n  isNew: product.newProperty,\n  isSoldOut: product.soldOut,\n  frontCategoryInfo: product.searchFrontCategoryList\n}));\nexport {\n  formatCollectionProduct2Product,\n  recommendApi\n};\n","const MOCK_PRODUCTS = [{\n  consumerPrice: 155e3,\n  imageUrl: \"/item/202502/11efe8378fbdcae28f0ab7d30031e3c9.jpg\",\n  heartCount: 2789,\n  reviewCount: 118,\n  lastSalePercent: 15,\n  lastSalePrice: 132525,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [\"[25SS]\"],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 1942207,\n  productName: \"보레알리스 2 NM2DR04A_BLK\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 269100100,\n    largeCategoryName: \"여성가방\",\n    mediumCategoryCode: 269106100,\n    mediumCategoryName: \"백팩\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 273100100,\n    largeCategoryName: \"남성가방\",\n    mediumCategoryCode: 273104100,\n    mediumCategoryName: \"백팩\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 273100100,\n    largeCategoryName: \"남성가방\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 269100100,\n    largeCategoryName: \"여성가방\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 169e3,\n  imageUrl: \"/item/202411/11efa7ab6d5d1ecf9316592337ae1aca.jpg\",\n  heartCount: 22,\n  reviewCount: 0,\n  lastSalePercent: 44,\n  lastSalePrice: 94640,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 0,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2389405,\n  productName: \"듀얼 백팩 NM2DQ06K_LBE\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 273100100,\n    largeCategoryName: \"남성가방\",\n    mediumCategoryCode: 273104100,\n    mediumCategoryName: \"백팩\",\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 159e3,\n  imageUrl: \"/item/202411/11efa7a8eb30739b9d18ef45b4791ed5.jpg\",\n  heartCount: 3926,\n  reviewCount: 476,\n  lastSalePercent: 10,\n  lastSalePrice: 143100,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 4.9,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 1634106,\n  productName: \"빅 샷 NM2DQ50A_BLK\",\n  isCoupon: false,\n  frontCategories: [{\n    largeCategoryCode: 273100100,\n    largeCategoryName: \"남성가방\",\n    mediumCategoryCode: 273104100,\n    mediumCategoryName: \"백팩\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 273100100,\n    largeCategoryName: \"남성가방\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 368e3,\n  imageUrl: \"/item/202501/11efc9657db7ebf58521852ca60f84fe.jpg\",\n  heartCount: 3710,\n  reviewCount: 200,\n  lastSalePercent: 0,\n  lastSalePrice: 368e3,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [\"[25SS]\"],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2714814,\n  productName: \"여성 노벨티 눕시 RDS 다운 자켓 NJ1DR80J_BLK\",\n  isCoupon: false,\n  frontCategories: [{\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 268102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 268102117,\n    smallCategoryName: \"숏패딩\"\n  }, {\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 268102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 149e3,\n  imageUrl: \"/item/202502/11efe1c52098184b8521d58f5330e571.jpg\",\n  heartCount: 169,\n  reviewCount: 2,\n  lastSalePercent: 15,\n  lastSalePrice: 127395,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2715548,\n  productName: \"보레알리스 2 NM2DQ52E_JBK\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 273100100,\n    largeCategoryName: \"남성가방\",\n    mediumCategoryCode: 273104100,\n    mediumCategoryName: \"백팩\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 273100100,\n    largeCategoryName: \"남성가방\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 109e3,\n  imageUrl: \"/item/202411/11efa7a909f8dae393166bd9acde4a3d.jpg\",\n  heartCount: 5482,\n  reviewCount: 403,\n  lastSalePercent: 15,\n  lastSalePrice: 93195,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 1744341,\n  productName: \"미니샷 NM2DQ53A_BLK\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 273100100,\n    largeCategoryName: \"남성가방\",\n    mediumCategoryCode: 273104100,\n    mediumCategoryName: \"백팩\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 273100100,\n    largeCategoryName: \"남성가방\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 398e3,\n  imageUrl: \"/item/202502/11efe1c50372b3098521eff5f021c0b7.jpg\",\n  heartCount: 4450,\n  reviewCount: 500,\n  lastSalePercent: 0,\n  lastSalePrice: 398e3,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2158524,\n  productName: \"노벨티 눕시 RDS 다운 자켓 NJ1DQ51J_BLK\",\n  isCoupon: false,\n  frontCategories: [{\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 272102104,\n    smallCategoryName: \"숏패딩\"\n  }, {\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 268116100,\n    mediumCategoryName: \"EXCLUSIVE\",\n    smallCategoryCode: 268116103,\n    smallCategoryName: \"아우터\"\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272111100,\n    mediumCategoryName: \"EXCLUSIVE\",\n    smallCategoryCode: 272111103,\n    smallCategoryName: \"아우터\"\n  }, {\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 268116100,\n    mediumCategoryName: \"EXCLUSIVE\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272111100,\n    mediumCategoryName: \"EXCLUSIVE\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 199e3,\n  imageUrl: \"/item/202502/11efe9a806bbc08c8f0af1b717708006.jpg\",\n  heartCount: 1893,\n  reviewCount: 94,\n  lastSalePercent: 5,\n  lastSalePrice: 189050,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [\"[25SS]\"],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2326012,\n  productName: \"눕시 온볼 베스트 NV3NR50A_BLK\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 272102106,\n    smallCategoryName: \"베스트\"\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 269e3,\n  imageUrl: \"/item/202412/11efb924aca3ec8ead1bbdf9e249e357.jpg\",\n  heartCount: 172,\n  reviewCount: 20,\n  lastSalePercent: 0,\n  lastSalePrice: 269e3,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2987892,\n  productName: \"남성 1996 에코 눕시 베스트 NV1DQ55A_BLK\",\n  isCoupon: false,\n  frontCategories: [{\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 268102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 268102117,\n    smallCategoryName: \"숏패딩\"\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 272102104,\n    smallCategoryName: \"숏패딩\"\n  }]\n}, {\n  consumerPrice: 398e3,\n  imageUrl: \"/item/202501/11efd3c8584dfacb85218560bb0f3ad4.jpg\",\n  heartCount: 4982,\n  reviewCount: 369,\n  lastSalePercent: 0,\n  lastSalePrice: 398e3,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [\"[25SS]\"],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2276799,\n  productName: \"노벨티 눕시 다운 자켓 (RDS) NJ1DR50K_RBK\",\n  isCoupon: false,\n  frontCategories: [{\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 272102104,\n    smallCategoryName: \"숏패딩\"\n  }, {\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 268102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 268102117,\n    smallCategoryName: \"숏패딩\"\n  }, {\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 268116100,\n    mediumCategoryName: \"EXCLUSIVE\",\n    smallCategoryCode: 268116103,\n    smallCategoryName: \"아우터\"\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272111100,\n    mediumCategoryName: \"EXCLUSIVE\",\n    smallCategoryCode: 272111103,\n    smallCategoryName: \"아우터\"\n  }, {\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 268116100,\n    mediumCategoryName: \"EXCLUSIVE\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272111100,\n    mediumCategoryName: \"EXCLUSIVE\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 268102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 178e3,\n  imageUrl: \"/item/202411/11efa7d791842b119d18ff2e784a1000.jpg\",\n  heartCount: 216,\n  reviewCount: 3,\n  lastSalePercent: 34,\n  lastSalePrice: 118370,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2885368,\n  productName: \"밴든 자켓 NJ3BQ53K_GRY\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 272102129,\n    smallCategoryName: \"바람막이\"\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 178e3,\n  imageUrl: \"/item/202411/11efa7d93984c9559d1821d6fcb2b98b.jpg\",\n  heartCount: 274,\n  reviewCount: 2,\n  lastSalePercent: 34,\n  lastSalePrice: 118370,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2901769,\n  productName: \"밴든 자켓 NJ3BQ53L_BBR\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 272102104,\n    smallCategoryName: \"숏패딩\"\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 165e3,\n  imageUrl: \"/item/202411/11efa7ba136c129b9d18835acf182eb2.jpg\",\n  heartCount: 378,\n  reviewCount: 12,\n  lastSalePercent: 36,\n  lastSalePrice: 105600,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2652594,\n  productName: \"어센드 엘티 25 NM2SQ11A_BLK\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 273100100,\n    largeCategoryName: \"남성가방\",\n    mediumCategoryCode: 273104100,\n    mediumCategoryName: \"백팩\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 273100100,\n    largeCategoryName: \"남성가방\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 179e3,\n  imageUrl: \"/item/202412/11efc64ed7874620ad1be9f7ff63eea8.jpg\",\n  heartCount: 98,\n  reviewCount: 7,\n  lastSalePercent: 15,\n  lastSalePrice: 153045,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [\"[25SS]\"],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 3005503,\n  productName: \"슈퍼팩 투 NM2DR01J_BLK\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 269100100,\n    largeCategoryName: \"여성가방\",\n    mediumCategoryCode: 269106100,\n    mediumCategoryName: \"백팩\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 273100100,\n    largeCategoryName: \"남성가방\",\n    mediumCategoryCode: 273104100,\n    mediumCategoryName: \"백팩\",\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 149e3,\n  imageUrl: \"/item/202411/11efa7e13b9316619316a5c4947fa678.jpg\",\n  heartCount: 774,\n  reviewCount: 35,\n  lastSalePercent: 41,\n  lastSalePrice: 88655,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2949339,\n  productName: \"여성 스트링 EX 부띠 NS99Q57J_RBK\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 270100100,\n    largeCategoryName: \"여성신발\",\n    mediumCategoryCode: 270103100,\n    mediumCategoryName: \"부츠\",\n    smallCategoryCode: 270103101,\n    smallCategoryName: \"앵클 부츠\"\n  }]\n}, {\n  consumerPrice: 269e3,\n  imageUrl: \"/item/202411/11efad615d9f79558521b5ff60f4e8a3.jpg\",\n  heartCount: 640,\n  reviewCount: 6,\n  lastSalePercent: 44,\n  lastSalePrice: 151050,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2923736,\n  productName: \"여성 써밋 히트라인 자켓 NJ3NQ82A_BLK\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 268102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 268102118,\n    smallCategoryName: \"경량패딩\"\n  }]\n}, {\n  consumerPrice: 178e3,\n  imageUrl: \"/item/202411/11efa7d9f79a488d9316d7182d8c60f0.jpg\",\n  heartCount: 905,\n  reviewCount: 7,\n  lastSalePercent: 24,\n  lastSalePrice: 135280,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 4.5,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2906821,\n  productName: \"여성 에센셜 라이트 브이모션 자켓 NJ3NQ80J_CRE\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 268102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 268102118,\n    smallCategoryName: \"경량패딩\"\n  }]\n}, {\n  consumerPrice: 418e3,\n  imageUrl: \"/item/202411/11efad4449d5bb7f8521a9c74e484920.jpg\",\n  heartCount: 971,\n  reviewCount: 28,\n  lastSalePercent: 15,\n  lastSalePrice: 357390,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2969341,\n  productName: \"여성 노벨티 눕시 미드 다운 자켓 (RDS) NJ1DQ94J_BLK\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 268100100,\n    largeCategoryName: \"여성의류\",\n    mediumCategoryCode: 268102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 268102117,\n    smallCategoryName: \"숏패딩\"\n  }]\n}, {\n  consumerPrice: 89e3,\n  imageUrl: \"/item/202411/11efa7abf5e841e39d18072019049ade.jpg\",\n  heartCount: 3355,\n  reviewCount: 175,\n  lastSalePercent: 15,\n  lastSalePrice: 76095,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2417483,\n  productName: \"보레알리스 미니 팩 NM2DQ55A_BLK\",\n  isCoupon: true,\n  frontCategories: [{\n    largeCategoryCode: 269100100,\n    largeCategoryName: \"여성가방\",\n    mediumCategoryCode: 269106100,\n    mediumCategoryName: \"백팩\",\n    smallCategoryCode: 100100100\n  }, {\n    largeCategoryCode: 269100100,\n    largeCategoryName: \"여성가방\",\n    mediumCategoryCode: 100100100,\n    smallCategoryCode: 100100100\n  }]\n}, {\n  consumerPrice: 399e3,\n  imageUrl: \"/item/202411/11efa5991c716fa3afbc4f7994967cf8.jpg\",\n  heartCount: 807,\n  reviewCount: 30,\n  lastSalePercent: 30,\n  lastSalePrice: 279300,\n  isSoldOut: false,\n  isFreeShipping: true,\n  isNew: false,\n  reviewAveragePoint: 5,\n  heartOn: true,\n  subjectDescriptions: [\"[29CM 단독]\"],\n  frontBrand: {\n    frontBrandId: 7789,\n    nameKor: \"노스페이스\",\n    nameEng: \"THE NORTH FACE\"\n  },\n  productId: 2916253,\n  productName: \"써밋 마테호른 RDS 다운 자켓 NJ1DQ90A_RBK\",\n  isCoupon: false,\n  frontCategories: [{\n    largeCategoryCode: 272100100,\n    largeCategoryName: \"남성의류\",\n    mediumCategoryCode: 272102100,\n    mediumCategoryName: \"아우터\",\n    smallCategoryCode: 272102104,\n    smallCategoryName: \"숏패딩\"\n  }]\n}];\nconst createMockProductList = (productIdList) => productIdList.map((productId, index) => ({\n  ...MOCK_PRODUCTS[index % MOCK_PRODUCTS.length],\n  productId\n  // 입력된 ID로 덮어쓰기\n}));\nconst createMockCollection = (collectionId, index) => ({\n  collectionId,\n  title: `원브랜드데이 ${index + 1}일차`,\n  description: \"오늘이 마지막! 전에 없던 강력한 혜택을 붙잡아요\",\n  displayStartAt: \"2026-01-21T00:00:00.000+09:00\",\n  displayEndAt: \"2026-01-21T23:59:59.999+09:00\",\n  couponId: 3e5 + index,\n  coverImageUrl: \"https://img.29cm.co.kr/next-brand/2025/08/29/4c2abdbffea0465ab184c13a12e07d31_20250829132052.jpg\",\n  productGroupList: [{\n    collectionProductGroupId: collectionId * 100 + 1,\n    title: \"BEST\",\n    sort: \"BEST\"\n  }, {\n    collectionProductGroupId: collectionId * 100 + 2,\n    title: \"아우터\",\n    sort: \"BEST\"\n  }, {\n    collectionProductGroupId: collectionId * 100 + 3,\n    title: \"상의\",\n    sort: \"BEST\"\n  }, {\n    collectionProductGroupId: collectionId * 100 + 4,\n    title: \"하의\",\n    sort: \"BEST\"\n  }, {\n    collectionProductGroupId: collectionId * 100 + 5,\n    title: \"원피스\",\n    sort: \"BEST\"\n  }, {\n    collectionProductGroupId: collectionId * 100 + 6,\n    title: \"가방/잡화\",\n    sort: \"BEST\"\n  }]\n});\nexport {\n  MOCK_PRODUCTS,\n  createMockCollection,\n  createMockProductList\n};\n","import { QueryType } from \"../types.js\";\nconst createKey = (query) => {\n  var _a;\n  return ((_a = query == null ? void 0 : query.keys) == null ? void 0 : _a.join(\"-\")) ?? void 0;\n};\nconst MOLOCO_SHARED_KEY = \"moloco-shared\";\nconst getMolocoCacheQuery = (query) => {\n  if (query.type !== QueryType.Moloco) {\n    return query;\n  }\n  const molocoQuery = query;\n  return {\n    type: molocoQuery.type,\n    tagId: molocoQuery.tagId,\n    inventoryId: molocoQuery.inventoryId,\n    pageId: molocoQuery.pageId\n    // facetName은 의도적으로 제외\n    // 이유: 모든 탭 데이터가 이미 API에서 반환되므로\n    //       탭마다 다른 cache를 만들 필요가 없음\n  };\n};\nconst createMolocoKey = (query) => {\n  return [MOLOCO_SHARED_KEY, getMolocoCacheQuery(query)];\n};\nexport {\n  createKey,\n  createMolocoKey,\n  getMolocoCacheQuery\n};\n","function last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : void 0;\n}\nexport {\n  last as default\n};\n","import { useMemo } from \"react\";\nimport useSWR from \"../../../node_modules/swr/core/dist/index.js\";\nimport useSWRInfinite from \"../../../node_modules/swr/infinite/dist/index.js\";\nimport { keywordCollectionApi } from \"../../../apis/keyword-collections/KeywordCollectionApiService.js\";\nimport { SortType } from \"../../../types/models/sort.js\";\nimport { bestApi } from \"../../../apis/best/BestApiService.js\";\nimport { displayBffApi } from \"../../../apis/display-bff/DisplayBffApiService.js\";\nimport { DisplayBffSortType } from \"../../../apis/display-bff/DisplayBffApiService.types.js\";\nimport { framerApi } from \"../../../apis/framer/FramerApiService.js\";\nimport { preuserApi } from \"../../../apis/preuser/PreuserApiService.js\";\nimport { recommendApi } from \"../../../apis/recommend/RecommendApiService.js\";\nimport \"../../../hooks/stores/content/content.store.js\";\nimport \"../../../utils/event-properties/source.js\";\nimport { isCanvas } from \"../../../utils/framer/isCanvas.js\";\nimport { isFramerPreview } from \"../../../utils/framer/isFramerPreview.js\";\nimport { splitToNumberArray } from \"../../../utils/splitToNumberArray.js\";\nimport { MOCK_PRODUCTS } from \"../mock.js\";\nimport { QueryType, RankingType } from \"../types.js\";\nimport { createMolocoKey } from \"../utils/key.js\";\nimport last from \"../../../node_modules/lodash-es/last.js\";\nconst BRAND_CURATION_PRODUCTS_MAX_SIZE = 60;\nconst RECOMMENDATION_PRODUCTS_MAX_SIZE = 60;\nconst RANKING_PRODUCTS_PER_REQUEST = 24;\nconst RANKING_PRODUCTS_MAX_SIZE = 99;\nconst RANKING_PRODUCTS_DEFAULT_AGE = 30;\nconst isRankingProductsQuery = (query) => query.type === QueryType.Ranking || query.type === QueryType.CustomCategory;\nconst getRankingFetchPageSize = (pageIndex) => {\n  const remaining = RANKING_PRODUCTS_MAX_SIZE - pageIndex * RANKING_PRODUCTS_PER_REQUEST;\n  return Math.max(Math.min(RANKING_PRODUCTS_PER_REQUEST, remaining), 0);\n};\nconst getRankingProductsHasNext = (pageIndex) => (pageIndex + 1) * RANKING_PRODUCTS_PER_REQUEST < RANKING_PRODUCTS_MAX_SIZE;\nconst getInitialPaginationOptions = (size) => ({\n  page: 1,\n  size\n});\nconst useMolocoProductsQuery = (options) => {\n  const {\n    enabled: _enabled = true,\n    query\n  } = options;\n  const enabled = _enabled && query !== void 0;\n  const cacheKey = enabled && query ? createMolocoKey(query) : null;\n  const {\n    data,\n    isLoading,\n    ...rest\n  } = useSWR(cacheKey, () => fetchMolocoItems(query));\n  const products = useMemo(() => (data == null ? void 0 : data.products) ?? [], [data]);\n  return {\n    isLoading: isLoading || !enabled,\n    products,\n    hasNext: false,\n    page: 1,\n    fetchNextPage: () => {\n    },\n    ...rest\n  };\n};\nconst useProductsQuery = (options) => {\n  const {\n    enabled: _enabled = true,\n    query,\n    size: _size,\n    userSegment\n  } = options;\n  const enabled = _enabled && query !== void 0;\n  const {\n    isLoading,\n    isValidating,\n    data,\n    size,\n    setSize,\n    ...rest\n  } = useSWRInfinite(getKey(query, getInitialPaginationOptions(_size), enabled), ({\n    key\n  }) => queryProducts(key.query, userSegment, key.pagination), {\n    keepPreviousData: true,\n    revalidateFirstPage: false\n  });\n  const products = useMemo(() => {\n    const fetchedProducts = (data == null ? void 0 : data.flatMap((item) => item.products)) ?? [];\n    if (query !== void 0 && isRankingProductsQuery(query)) {\n      return fetchedProducts.slice(0, RANKING_PRODUCTS_MAX_SIZE);\n    }\n    return fetchedProducts;\n  }, [data, query]);\n  const {\n    hasNext = false\n  } = last(data) ?? {};\n  const fetchNextPage = () => {\n    if (!hasNext || isValidating) {\n      return;\n    }\n    setSize((prev) => prev + 1);\n  };\n  return {\n    isLoading: isLoading || !enabled,\n    isValidating,\n    products,\n    hasNext,\n    page: size,\n    fetchNextPage,\n    ...rest\n  };\n};\nconst fetchProducts = async (query, options) => {\n  if (!query.productIds) {\n    return {\n      hasNext: false,\n      products: []\n    };\n  }\n  const {\n    page,\n    size\n  } = options;\n  const offset = page * size;\n  const productIds = splitToNumberArray(query.productIds);\n  const skipped = productIds.slice(offset, productIds.length);\n  const took = skipped.slice(0, size);\n  const hasNext = skipped.length > took.length;\n  const products = await framerApi.getFramerProductListV2(took);\n  return {\n    hasNext,\n    products\n  };\n};\nconst fetchKeywordCollectionProducts = async (query, options) => {\n  var _a, _b;\n  if (!query.keywordCollectionId) {\n    return {\n      hasNext: false,\n      products: []\n    };\n  }\n  const keywordCollectionId = Number(query.keywordCollectionId);\n  const {\n    hasNext,\n    resultList\n  } = await keywordCollectionApi.getCollectionProducts({\n    collectionId: keywordCollectionId,\n    productGroupId: ((_a = query.selectedProductGroup) == null ? void 0 : _a.id) ?? await fetchFirstProductGroupId(keywordCollectionId),\n    sort: ((_b = query.selectedProductGroup) == null ? void 0 : _b.sort) ?? SortType.FEATURED,\n    ...options\n  });\n  return {\n    hasNext,\n    products: resultList\n  };\n};\nconst fetchFirstProductGroupId = async (keywordCollectionId) => {\n  const {\n    data\n  } = await keywordCollectionApi.getKeywordCollection(keywordCollectionId);\n  const [{\n    productGroupId\n  }] = data.productGroups;\n  return productGroupId;\n};\nconst fetchBrandCurationProducts = async (query, options) => {\n  if (!query.brandId) {\n    return {\n      hasNext: false,\n      products: []\n    };\n  }\n  const tagIds = splitToNumberArray(query.brandCurationTagIds);\n  const {\n    products\n  } = await bestApi.getRankedProducts({\n    facetGroupInput: {\n      brandFacetInputs: [{\n        frontBrandNo: query.brandId\n      }],\n      rankingFacetInput: {\n        type: \"POPULARITY\"\n      },\n      periodFacetInput: {\n        type: \"HOURLY\",\n        order: \"DESC\"\n      },\n      stockFacetInputs: [{\n        type: \"IN_STOCK\"\n      }],\n      tagFacetInputs: tagIds.map((tagId) => ({\n        tagId\n      }))\n    },\n    pagination: options\n  });\n  const hasNext = options.page * options.size < BRAND_CURATION_PRODUCTS_MAX_SIZE;\n  return {\n    hasNext,\n    products\n  };\n};\nconst fetchRecommendationProducts = async (query) => {\n  if (!query.recommendationTagIds) {\n    return {\n      hasNext: false,\n      products: []\n    };\n  }\n  if (isCanvas() || isFramerPreview()) {\n    return {\n      hasNext: false,\n      products: MOCK_PRODUCTS\n    };\n  }\n  const tagIds = splitToNumberArray(query.recommendationTagIds).join(\",\");\n  const {\n    data\n  } = await recommendApi.getRecommendedProductsByTagId({\n    limit: RECOMMENDATION_PRODUCTS_MAX_SIZE,\n    tagIds: tagIds || void 0\n  });\n  return {\n    // NOTE(임규민): 개인화 추천 API 는 페이지네이션을 지원하지 않으므로 hasNext 를 false 로 둔다.\n    hasNext: false,\n    products: data.products\n  };\n};\nconst fetchRankingProducts = async (query, userSegment, options) => {\n  if (!query.rankingTagIds) {\n    return {\n      hasNext: false,\n      products: []\n    };\n  }\n  const isTrending = query.rankingType === RankingType.Trending;\n  const hasLargeCategoryId = query.largeCategoryId !== void 0;\n  const hasMiddleCategoryId = query.middleCategoryId !== void 0;\n  const tagIds = splitToNumberArray(query.rankingTagIds);\n  const pageSize = getRankingFetchPageSize(options.page);\n  if (pageSize <= 0) {\n    return {\n      hasNext: false,\n      products: []\n    };\n  }\n  const {\n    products\n  } = await bestApi.getRankedProducts({\n    facetGroupInput: {\n      categoryFacetInputs: hasLargeCategoryId ? [{\n        largeId: query.largeCategoryId,\n        ...hasMiddleCategoryId ? {\n          middleId: query.middleCategoryId\n        } : void 0\n      }] : [],\n      tagFacetInputs: tagIds.map((tagId) => ({\n        tagId\n      })),\n      rankingFacetInput: {\n        type: query.rankingType\n      },\n      periodFacetInput: {\n        type: isTrending ? query.trendingPeriodType : query.popularityPeriodType,\n        order: \"DESC\"\n      }\n    },\n    userSegment: {\n      gender: userSegment.gender ?? \"F\",\n      age: RANKING_PRODUCTS_DEFAULT_AGE\n    },\n    pagination: {\n      ...options,\n      page: options.page,\n      size: pageSize\n    }\n  });\n  return {\n    hasNext: getRankingProductsHasNext(options.page),\n    products\n  };\n};\nconst fetchCouponCollectionProducts = async (query, options) => {\n  var _a;\n  if (!query.couponCollectionId) {\n    return {\n      hasNext: false,\n      products: []\n    };\n  }\n  const {\n    data\n  } = await displayBffApi.getListingItems({\n    pageType: \"COUPON\",\n    sortType: DisplayBffSortType.Recommended,\n    facets: {\n      couponFacetInputs: [{\n        couponId: ((_a = query.coupon) == null ? void 0 : _a.couponId) ?? 0\n      }]\n    },\n    pageRequest: {\n      page: options.page + 1,\n      size: options.size\n    }\n  });\n  return {\n    hasNext: data.pagination.hasNext,\n    products: data.list.map((item) => ({\n      frontBrand: {\n        frontBrandId: item.itemInfo.brandId,\n        nameKor: item.itemInfo.brandName,\n        nameEng: \"\"\n      },\n      productId: item.itemId,\n      productName: item.itemInfo.productName,\n      subjectDescriptions: [],\n      imageUrl: item.itemInfo.thumbnailUrl,\n      consumerPrice: item.itemInfo.originalPrice,\n      lastSalePrice: item.itemInfo.displayPrice,\n      lastSalePercent: item.itemInfo.saleRate,\n      heartCount: item.itemInfo.likeCount,\n      heartOn: item.itemInfo.isLiked,\n      reviewAveragePoint: item.itemInfo.reviewScore,\n      reviewCount: item.itemInfo.reviewCount,\n      isCoupon: false,\n      isFreeShipping: false,\n      isNew: false,\n      isSoldOut: item.itemInfo.isSoldOut,\n      frontCategories: item.itemInfo.extraInfo.categories.map((category) => ({\n        largeCategoryCode: category.largeCategoryCode ?? 0,\n        mediumCategoryCode: category.mediumCategoryCode ?? 0,\n        smallCategoryCode: category.smallCategoryCode ?? 0\n      }))\n    }))\n  };\n};\nconst fetchPreuserProducts = async (query) => {\n  if (!query.preuserIds) {\n    return {\n      hasNext: false,\n      products: []\n    };\n  }\n  const preuserIds = splitToNumberArray(query.preuserIds);\n  const {\n    products\n  } = await preuserApi.getPreuser(preuserIds);\n  return {\n    hasNext: false,\n    products\n  };\n};\nconst fetchMolocoItems = async (query) => {\n  if (!query.tagId) {\n    return {\n      hasNext: false,\n      products: []\n    };\n  }\n  if (isCanvas() || isFramerPreview()) {\n    const MOCK_TABS = [\"추천\", \"신상품\", \"베스트\"];\n    const allProducts2 = MOCK_TABS.flatMap((tabName) => MOCK_PRODUCTS.map((product) => ({\n      ...product,\n      molocoTab: tabName\n    })));\n    return {\n      hasNext: false,\n      products: allProducts2\n    };\n  }\n  const {\n    categories\n  } = query;\n  const tabs = categories == null ? void 0 : categories.map((category) => ({\n    name: category.categoryName.trim(),\n    categoryCodes: splitToNumberArray(category.categoryId)\n  })).filter((tab) => tab.name.length > 0 && tab.categoryCodes.length > 0);\n  const {\n    data\n  } = await displayBffApi.getItems({\n    tagIds: [Number(query.tagId)],\n    inventoryId: query.inventoryId || \"\",\n    pageId: query.pageId || \"\",\n    tabs\n  });\n  const allProducts = data.tabs.flatMap((tab) => tab.items.map((item) => ({\n    // 기본 상품 정보 매핑\n    frontBrand: {\n      frontBrandId: item.itemInfo.brandId,\n      nameKor: item.itemInfo.brandName,\n      nameEng: \"\"\n    },\n    productId: item.itemId,\n    productName: item.itemInfo.productName,\n    subjectDescriptions: [],\n    imageUrl: item.itemInfo.thumbnailUrl,\n    consumerPrice: item.itemInfo.originalPrice,\n    lastSalePrice: item.itemInfo.displayPrice,\n    lastSalePercent: item.itemInfo.saleRate,\n    heartCount: item.itemInfo.likeCount,\n    heartOn: item.itemInfo.isLiked,\n    reviewAveragePoint: item.itemInfo.reviewScore,\n    reviewCount: item.itemInfo.reviewCount,\n    isCoupon: false,\n    isFreeShipping: false,\n    isNew: false,\n    isSoldOut: item.itemInfo.isSoldOut,\n    frontCategories: item.itemInfo.extraInfo.categories.map((cat) => ({\n      largeCategoryCode: cat.largeCategoryCode,\n      mediumCategoryCode: cat.mediumCategoryCode,\n      smallCategoryCode: cat.smallCategoryCode\n    })),\n    // 메타데이터: 이 상품이 어느 탭(facet)에서 온 것인지 표시\n    // 응답 탭명을 사용해 TagsModule의 facetName과 일치시킨다.\n    molocoTab: tab.text,\n    // Moloco 트래커 이벤트 데이터 (impression/onClick)\n    itemEvent: item.itemEvent\n  })));\n  return {\n    hasNext: false,\n    products: allProducts\n  };\n};\nconst fetchRankingCategoryProducts = async (query, options) => {\n  var _a;\n  const categoryIds = (_a = query.categoryIds) == null ? void 0 : _a.map((category) => ({\n    largeId: Number(category.largeCategoryId),\n    ...category.middleCategoryId ? {\n      middleId: Number(category.middleCategoryId)\n    } : void 0\n  }));\n  const hasLargeCategoryId = categoryIds == null ? void 0 : categoryIds.some((category) => category.largeId !== void 0);\n  const tagIds = query.recommendationTagIds ? splitToNumberArray(query.recommendationTagIds) : [];\n  const pageSize = getRankingFetchPageSize(options.page);\n  if (pageSize <= 0) {\n    return {\n      hasNext: false,\n      products: []\n    };\n  }\n  const {\n    products\n  } = await bestApi.getRankedProducts({\n    facetGroupInput: {\n      categoryFacetInputs: hasLargeCategoryId ? categoryIds : [],\n      tagFacetInputs: tagIds.length > 0 ? tagIds.map((tagId) => ({\n        tagId\n      })) : void 0,\n      rankingFacetInput: {\n        type: query.rankingType\n      },\n      periodFacetInput: {\n        type: query.popularityPeriodType,\n        order: \"DESC\"\n      }\n    },\n    userSegment: {\n      gender: query.gender === \"all\" ? void 0 : query.gender,\n      age: query.age === \"all\" ? void 0 : Number(query.age)\n    },\n    pagination: {\n      ...options,\n      page: options.page,\n      size: pageSize\n    }\n  });\n  return {\n    hasNext: getRankingProductsHasNext(options.page),\n    products\n  };\n};\nconst queryProducts = (query, userSegment, options) => {\n  switch (query.type) {\n    case QueryType.Product:\n      return fetchProducts(query, options);\n    case QueryType.KeywordCollection:\n      return fetchKeywordCollectionProducts(query, options);\n    case QueryType.BrandCuration:\n      return fetchBrandCurationProducts(query, options);\n    case QueryType.Recommendation:\n      return fetchRecommendationProducts(query);\n    case QueryType.Ranking:\n      return fetchRankingProducts(query, userSegment, options);\n    case QueryType.CouponCollection:\n      return fetchCouponCollectionProducts(query, options);\n    case QueryType.Preuser:\n      return fetchPreuserProducts(query);\n    case QueryType.CustomCategory:\n      return fetchRankingCategoryProducts(query, options);\n    case QueryType.Moloco:\n      return fetchMolocoItems(query);\n    default:\n      return {\n        hasNext: false,\n        products: []\n      };\n  }\n};\nconst getKey = (query, options, enabled) => (pageIndex) => {\n  if (!enabled || query === void 0) {\n    return null;\n  }\n  if (isRankingProductsQuery(query)) {\n    const pageSize = getRankingFetchPageSize(pageIndex);\n    if (pageSize <= 0) {\n      return null;\n    }\n    return {\n      key: {\n        query,\n        pagination: {\n          page: pageIndex,\n          size: pageSize\n        }\n      }\n    };\n  }\n  return {\n    key: {\n      query,\n      // 전체 query 사용\n      pagination: {\n        ...options,\n        page: pageIndex\n      }\n    }\n  };\n};\nexport {\n  useMolocoProductsQuery,\n  useProductsQuery\n};\n","import { useSegment } from \"../../../@shared/providers/SegmentProvider/SegmentProvider.js\";\nimport { QueryType } from \"../../types.js\";\nimport \"../../../systems/curations/IntersectionProvider/IntersectionProvider.js\";\nimport { useIntersectionContext } from \"../../../systems/curations/IntersectionProvider/IntersectionProvider.hooks.js\";\nimport \"react\";\nimport \"../../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport { useCurrentUser } from \"../../../../hooks/useCurrentUser.js\";\nimport \"framer\";\nimport \"../../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../../config/index.js\";\nimport \"../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../../apis/user/UserApiService.js\";\nimport \"../../../../apis/preuser/PreuserApiService.js\";\nimport \"../../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../../hooks/stores/toast/toast.store.js\";\nimport \"../../../@shared/providers/ThemeProvider/ThemeProvider.js\";\nimport \"../../../@shared/providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"../../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react/jsx-runtime\";\nimport \"react-dom\";\nimport \"../../../systems/Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../../hooks/useFeatureFlag.js\";\nimport \"../../../../utils/redirectLogin.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { useSendProductIds } from \"../../../../hooks/product/useSendProductIds.js\";\nimport \"../../../../constants/snowplow/snowplowSchema.js\";\nimport \"../ProductsElementProvider/ProductsElementProvider.js\";\nimport { useProductsElementContext } from \"../ProductsElementProvider/ProductsElementProvider.hooks.js\";\nimport { useMolocoProductsQuery, useProductsQuery } from \"../ProductsModule.hooks.js\";\nconst useProducts = () => {\n  const user = useCurrentUser();\n  const {\n    isInView\n  } = useIntersectionContext();\n  const {\n    query,\n    size\n  } = useProductsElementContext();\n  const {\n    isVisible\n  } = useSegment();\n  const isMoloco = (query == null ? void 0 : query.type) === QueryType.Moloco;\n  const molocoOptions = {\n    query,\n    size,\n    userSegment: user,\n    enabled: isMoloco && isInView && isVisible\n  };\n  const infiniteOptions = {\n    query,\n    size,\n    userSegment: user,\n    enabled: !isMoloco && isInView && isVisible\n  };\n  const molocoResult = useMolocoProductsQuery(molocoOptions);\n  const infiniteResult = useProductsQuery(infiniteOptions);\n  return isMoloco ? molocoResult : infiniteResult;\n};\nconst useSendProductsElementIds = (query) => {\n  useSendProductIds(getProductIds(query));\n};\nconst getProductIds = (query) => {\n  if (!query) {\n    return \"\";\n  }\n  switch (query.type) {\n    case QueryType.Product:\n      return query.productIds;\n    default:\n      return \"\";\n  }\n};\nexport {\n  useProducts,\n  useSendProductsElementIds\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { Button as Default } from \"../../../../../@shared/Button/Button.js\";\nimport { useProducts } from \"../../ProductsElement.hooks.js\";\nimport \"react\";\nimport \"../../../../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../../../../config/index.js\";\nimport \"../../../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../../../../apis/user/UserApiService.js\";\nimport \"../../../../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../../../../hooks/stores/toast/toast.store.js\";\nimport { useTheme } from \"../../../../../../hooks/useTheme.js\";\nimport \"../../../../../@shared/providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"../../../../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react-dom\";\nimport \"../../../../../systems/Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../../../../hooks/useFeatureFlag.js\";\nimport \"../../../../../../utils/redirectLogin.js\";\nimport \"../../../../../../utils/event-properties/source.js\";\nconst ExpandButtonElement = ({\n  pagination,\n  style,\n  ...rest\n}) => {\n  const theme = useTheme();\n  const {\n    page,\n    fetchNextPage,\n    hasNext\n  } = useProducts();\n  const {\n    button,\n    gap\n  } = pagination;\n  const text = button.texts[page - 1];\n  if (text === void 0 || !hasNext) {\n    return null;\n  }\n  return /* @__PURE__ */ jsx(\"div\", { ...rest, style: {\n    ...containerStyle,\n    marginTop: gap,\n    ...style\n  }, children: /* @__PURE__ */ jsx(Default, { ...button, theme, onClick: fetchNextPage, children: text }) });\n};\nconst containerStyle = {\n  display: \"flex\",\n  justifyContent: \"center\",\n  width: \"100%\"\n};\nexport {\n  ExpandButtonElement\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { PaginationType } from \"../../../ProductsModule.types.js\";\nimport { ExpandButtonElement } from \"../ExpandButtonElement/ExpandButtonElement.js\";\nconst VerticalPaginationElement = ({\n  pagination,\n  ...rest\n}) => {\n  if (pagination !== void 0) {\n    switch (pagination.type) {\n      case PaginationType.Default:\n        return null;\n      case PaginationType.ExpandButton:\n        return /* @__PURE__ */ jsx(ExpandButtonElement, { ...rest, pagination });\n      case PaginationType.None:\n        return null;\n    }\n  }\n  return null;\n};\nexport {\n  VerticalPaginationElement\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { ScrollDirection } from \"../../ProductsModule.types.js\";\nimport { VerticalPaginationElement } from \"./VerticalPaginationElement/VerticalPaginationElement.js\";\nconst PaginationElement = ({\n  layout,\n  ...rest\n}) => {\n  switch (layout.direction) {\n    case ScrollDirection.Vertical:\n      return /* @__PURE__ */ jsx(VerticalPaginationElement, { ...rest, pagination: layout.verticalPagination });\n    default:\n      return null;\n  }\n};\nexport {\n  PaginationElement\n};\n","import \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { isCanvas } from \"../../../../utils/framer/isCanvas.js\";\nimport \"framer\";\nimport \"react\";\nimport { ScrollDirection, PaginationType } from \"../ProductsModule.types.js\";\nimport { PRODUCTS_PER_REQUEST } from \"../ProductsModule.constants.js\";\nconst getScrollMargin = (layout) => {\n  switch (layout.direction) {\n    case ScrollDirection.Vertical:\n      return layout.scrollMargin;\n    case ScrollDirection.Horizontal:\n      return 0;\n  }\n};\nconst isElementCrossed = (element, upper = 0) => {\n  const top = (element == null ? void 0 : element.getBoundingClientRect().top) ?? 0;\n  return top - upper <= 0;\n};\nconst initializeScroll = (element, layout) => {\n  setTimeout(() => {\n    if (layout.direction === ScrollDirection.Vertical && isElementCrossed(element, getScrollMargin(layout))) {\n      element == null ? void 0 : element.scrollIntoView({\n        block: \"start\",\n        inline: \"nearest\"\n      });\n    }\n    if (layout.direction === ScrollDirection.Horizontal) {\n      element == null ? void 0 : element.scrollTo({\n        left: 0\n      });\n    }\n  });\n};\nconst isExpandable = (pagination, page) => {\n  return pagination.button.texts[page - 1] !== void 0;\n};\nconst getDisplayCount = (layout, page) => {\n  if (layout.direction === ScrollDirection.Vertical && layout.verticalPagination !== void 0) {\n    switch (layout.verticalPagination.type) {\n      case PaginationType.ExpandButton:\n        return isExpandable(layout.verticalPagination, page) ? layout.verticalPagination.rowDisplayCount * layout.columnCount * page : void 0;\n      case PaginationType.None:\n        return layout.verticalPagination.rowDisplayCount * layout.columnCount * page;\n      default:\n        return void 0;\n    }\n  }\n};\nconst canFetchOnLastItemView = (layout, page) => {\n  if (isCanvas()) {\n    return false;\n  }\n  if (layout.direction === ScrollDirection.Vertical && layout.verticalPagination !== void 0) {\n    switch (layout.verticalPagination.type) {\n      case PaginationType.Default:\n        return true;\n      case PaginationType.ExpandButton:\n        return !isExpandable(layout.verticalPagination, page);\n      case PaginationType.None:\n        return false;\n      default:\n        return true;\n    }\n  }\n  return true;\n};\nconst getRequestSize = (layout) => {\n  if (layout.direction === ScrollDirection.Horizontal || layout.isResponsive) {\n    return PRODUCTS_PER_REQUEST;\n  }\n  if (layout.verticalPagination.type === PaginationType.Default || layout.verticalPagination.type === PaginationType.None) {\n    return PRODUCTS_PER_REQUEST;\n  }\n  return layout.verticalPagination.rowDisplayCount * layout.columnCount;\n};\nexport {\n  canFetchOnLastItemView,\n  getDisplayCount,\n  getRequestSize,\n  getScrollMargin,\n  initializeScroll\n};\n","import { jsx, jsxs } from \"react/jsx-runtime\";\nimport { useRef, useMemo, useEffect } from \"react\";\nimport { EventTrigger } from \"../../../@shared/EventTrigger/index.js\";\nimport { ProductCardType } from \"../../../@shared/ProductCard/ProductCard.types.js\";\nimport { useSegment } from \"../../../@shared/providers/SegmentProvider/SegmentProvider.js\";\nimport { useRootComponentId } from \"../../hooks.js\";\nimport { QueryType } from \"../../types.js\";\nimport { Products } from \"../../../systems/curations/Products/index.js\";\nimport { createOptionTemplate, getResponsiveWidth, getHorizontalBarColumnWidth, getResponsiveWidthWithProductPeekInset } from \"../../../systems/curations/Products/Root.utils.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { isCanvas } from \"../../../../utils/framer/isCanvas.js\";\nimport \"framer\";\nimport { hideClosestParentByFramerName } from \"../../../../utils/hideParentElement.js\";\nimport { getPadding } from \"../../../../utils/spacing.js\";\nimport { ProductsElementProvider } from \"../ProductsElementProvider/ProductsElementProvider.js\";\nimport { PRODUCTS_PER_REQUEST } from \"../ProductsModule.constants.js\";\nimport { ScrollDirection } from \"../ProductsModule.types.js\";\nimport { PaginationElement } from \"./PaginationElement/PaginationElement.js\";\nimport { useProducts, useSendProductsElementIds } from \"./ProductsElement.hooks.js\";\nimport { getDisplayCount, initializeScroll, getScrollMargin, canFetchOnLastItemView, getRequestSize } from \"./ProductsElement.utils.js\";\nconst ProductsElementInner = ({\n  query,\n  layout\n}) => {\n  const componentId = useRootComponentId(query);\n  const ref = useRef(null);\n  const {\n    isLoading,\n    hasNext,\n    products: _products,\n    page,\n    fetchNextPage\n  } = useProducts();\n  const {\n    isVisible\n  } = useSegment();\n  useSendProductsElementIds(query);\n  const totalProductsLength = _products.length;\n  const loading = isLoading && totalProductsLength === 0 || isCanvas() && totalProductsLength === 0;\n  const displayCount = getDisplayCount(layout, page);\n  const products = useMemo(() => {\n    const filteredProducts = (query == null ? void 0 : query.type) === QueryType.Moloco && query.facetName ? _products.filter((p) => p.molocoTab === query.facetName) : _products;\n    return filteredProducts.slice(0, displayCount).slice(0, isCanvas() ? PRODUCTS_PER_REQUEST : void 0);\n  }, [_products, query, displayCount]);\n  useEffect(() => {\n    initializeScroll(ref.current, layout);\n    window == null ? void 0 : window.dispatchEvent(new Event(\"layout-done\"));\n  }, [query]);\n  useEffect(() => {\n    if (ref.current) {\n      hideClosestParentByFramerName(ref.current, \"광고\", isVisible);\n    }\n  }, [isVisible]);\n  const padding = getPadding(layout);\n  const hasScroll = layout.direction === ScrollDirection.Horizontal && layout.hasScroll;\n  const variant = (query == null ? void 0 : query.type) === QueryType.Preuser ? \"preuser\" : \"default\";\n  if (!isVisible) {\n    window == null ? void 0 : window.dispatchEvent(new Event(\"layout-done\"));\n    return /* @__PURE__ */ jsx(\"div\", { ref });\n  }\n  return /* @__PURE__ */ jsxs(\"div\", { ref, style: {\n    ...containerStyle,\n    paddingTop: padding.top,\n    paddingBottom: padding.bottom,\n    scrollMarginTop: getScrollMargin(layout)\n  }, children: [\n    /* @__PURE__ */ jsx(Products.Root, { loading, cardStyle, padding: {\n      right: padding.right,\n      left: padding.left\n    }, listStyle: hasScroll ? {\n      msOverflowStyle: \"initial\",\n      scrollbarWidth: \"initial\",\n      paddingBottom: \"16px\"\n    } : void 0, options: createOptions(layout), products, hasNext, onLastItemView: canFetchOnLastItemView(layout, page) ? fetchNextPage : void 0, children: ({\n      index\n    }) => /* @__PURE__ */ jsx(EventTrigger.Target, { children: /* @__PURE__ */ jsx(Products.Card, { index, componentName: componentId, variant, eventProperties: {\n      tagValue: query == null ? void 0 : query.facetName\n    } }) }) }),\n    /* @__PURE__ */ jsx(PaginationElement, { style: {\n      paddingLeft: padding.left,\n      paddingRight: padding.right\n    }, layout })\n  ] });\n};\nconst ProductsElement = (props) => {\n  return /* @__PURE__ */ jsx(ProductsElementProvider, { query: props.query, size: getRequestSize(props.layout), children: /* @__PURE__ */ jsx(ProductsElementInner, { ...props }) });\n};\nconst containerStyle = {\n  width: \"100%\",\n  display: \"flex\",\n  flexDirection: \"column\"\n};\nconst cardStyle = {\n  paddingBottom: 0\n};\nconst createOptions = (layout) => {\n  switch (layout.direction) {\n    case ScrollDirection.Vertical:\n      return createVerticalOptions(layout);\n    case ScrollDirection.Horizontal:\n      return createHorizontalOptions(layout);\n  }\n};\nconst createVerticalOptions = (layout) => {\n  switch (layout.cardType) {\n    case ProductCardType.CARD:\n    case ProductCardType.CARD_DETAILED:\n      return createOptionTemplate({\n        base: {\n          direction: layout.direction,\n          card: {\n            type: layout.cardType,\n            size: layout.size,\n            hasRank: layout.hasRank,\n            hasName: layout.hasName,\n            hasBrandName: layout.hasBrandName,\n            hasBadges: layout.hasBadges,\n            hasHeart: layout.hasHeart,\n            hasPriceUnit: false\n          },\n          column: {\n            gap: layout.columnGap,\n            width: layout.isResponsive ? void 0 : getResponsiveWidth(layout.columnGap, layout.columnCount),\n            minWidth: layout.isResponsive ? 185 : 0,\n            count: layout.isResponsive ? \"auto\" : layout.columnCount\n          },\n          row: {\n            displayCount: getDisplayCount(layout, 1),\n            gap: layout.rowGap\n          }\n        }\n      });\n    case ProductCardType.BAR:\n      return createOptionTemplate({\n        base: {\n          direction: layout.direction,\n          card: {\n            type: layout.cardType,\n            size: layout.size,\n            hasRank: layout.hasRank,\n            hasName: layout.hasName,\n            hasBrandName: layout.hasBrandName,\n            hasBadges: layout.hasBadges,\n            hasHeart: layout.hasHeart,\n            hasPriceUnit: false\n          },\n          column: {\n            gap: layout.columnGap,\n            width: layout.isResponsive ? void 0 : getResponsiveWidth(layout.columnGap, layout.columnCount),\n            minWidth: layout.isResponsive ? 300 + (layout.hasRank ? 40 : 0) : 0,\n            count: layout.isResponsive ? \"auto\" : layout.columnCount\n          },\n          row: {\n            displayCount: getDisplayCount(layout, 1),\n            gap: layout.rowGap\n          }\n        }\n      });\n  }\n};\nconst createHorizontalOptions = (layout) => {\n  switch (layout.cardType) {\n    case ProductCardType.CARD:\n    case ProductCardType.CARD_DETAILED:\n      return createOptionTemplate({\n        base: {\n          direction: layout.direction,\n          card: {\n            type: layout.cardType,\n            size: layout.size,\n            hasRank: layout.hasRank,\n            hasName: layout.hasName,\n            hasBrandName: layout.hasBrandName,\n            hasBadges: layout.hasBadges,\n            hasHeart: layout.hasHeart,\n            hasPriceUnit: false\n          },\n          column: {\n            gap: layout.columnGap,\n            displayCount: layout.columnDisplayCount,\n            width: getResponsiveWidthWithProductPeekInset(layout.columnGap, layout.columnDisplayCount)\n          },\n          row: {\n            gap: layout.rowGap,\n            count: layout.rowCount\n          }\n        },\n        desktop: {\n          navigator: true,\n          column: {\n            width: getResponsiveWidth(layout.columnGap, layout.columnDisplayCount)\n          }\n        }\n      });\n    case ProductCardType.BAR: {\n      const {\n        left,\n        right\n      } = getPadding(layout);\n      const horizontalPaddingPx = Math.max(left, right);\n      return createOptionTemplate({\n        base: {\n          direction: layout.direction,\n          ...layout.columnDivider ? {\n            columnDivider: true\n          } : {},\n          card: {\n            type: layout.cardType,\n            size: layout.size,\n            hasRank: layout.hasRank,\n            hasName: layout.hasName,\n            hasBrandName: layout.hasBrandName,\n            hasBadges: layout.hasBadges,\n            hasHeart: layout.hasHeart,\n            hasPriceUnit: false\n          },\n          column: {\n            gap: layout.columnDivider ? 0 : layout.columnGap,\n            displayCount: layout.columnDisplayCount\n          },\n          row: {\n            gap: layout.rowGap,\n            count: layout.rowCount\n          }\n        },\n        mobile: {\n          column: {\n            width: getHorizontalBarColumnWidth(layout, \"mobile\", horizontalPaddingPx)\n          }\n        },\n        tablet: {\n          column: {\n            width: getHorizontalBarColumnWidth(layout, \"tablet\", horizontalPaddingPx)\n          }\n        },\n        desktop: {\n          navigator: true,\n          column: {\n            width: getHorizontalBarColumnWidth(layout, \"desktop\", horizontalPaddingPx)\n          }\n        }\n      });\n    }\n  }\n};\nexport {\n  ProductsElement,\n  ProductsElementInner\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { useQueryStore } from \"../../query-store/query.store.js\";\nimport { ProductsElement } from \"../ProductsElement/ProductsElement.js\";\nimport { createKey } from \"../../utils/key.js\";\nconst LinkedProductsModule = ({\n  value,\n  layout\n}) => {\n  const query = useQueryStore((state) => state.queries[value]);\n  return /* @__PURE__ */ jsx(ProductsElement, { query, layout }, createKey(query));\n};\nexport {\n  LinkedProductsModule\n};\n","import { ControlType } from \"framer\";\nimport { entries } from \"../../utils/entries.js\";\nconst combineObjectPropertyControls = (...controls) => {\n  return controls.flatMap(entries).reduce((prev, curr) => {\n    const [key, incoming] = curr;\n    const copied = {\n      ...prev\n    };\n    const existing = copied[key] ?? {};\n    if (existing.type === ControlType.Enum && incoming.type === ControlType.Enum) {\n      copied[key] = mergeEnumControlDescription(existing, incoming);\n      return prev = copied;\n    }\n    return prev = {\n      ...prev,\n      [key]: incoming\n    };\n  }, {});\n};\nconst mergeEnumControlDescription = (existing, incoming) => {\n  return {\n    ...existing,\n    options: [...existing.options, ...incoming.options],\n    optionTitles: [...existing.optionTitles ?? [], ...incoming.optionTitles ?? []]\n  };\n};\nexport {\n  combineObjectPropertyControls\n};\n","var CouponModuleInputType = /* @__PURE__ */ ((CouponModuleInputType2) => {\n  CouponModuleInputType2[CouponModuleInputType2[\"Linked\"] = 0] = \"Linked\";\n  CouponModuleInputType2[CouponModuleInputType2[\"Manual\"] = 1] = \"Manual\";\n  CouponModuleInputType2[CouponModuleInputType2[\"Auto\"] = 2] = \"Auto\";\n  return CouponModuleInputType2;\n})(CouponModuleInputType || {});\nvar CouponUpdateType = /* @__PURE__ */ ((CouponUpdateType2) => {\n  CouponUpdateType2[CouponUpdateType2[\"NORMAL\"] = 0] = \"NORMAL\";\n  CouponUpdateType2[CouponUpdateType2[\"DAILY\"] = 1] = \"DAILY\";\n  return CouponUpdateType2;\n})(CouponUpdateType || {});\nexport {\n  CouponModuleInputType,\n  CouponUpdateType\n};\n","import { ControlType } from \"framer\";\nimport { CouponType } from \"../../types/models/coupon.js\";\nimport { CouponUpdateType } from \"./CouponModule/CouponModule.types.js\";\nimport { QueryType, RankingType, PopularityPeriodType, TrendingPeriodType, CategoryType } from \"./types.js\";\nconst PRODUCT_CONTROLS = {\n  type: {\n    type: ControlType.Enum,\n    title: \"유형\",\n    options: [QueryType.Product],\n    optionTitles: [\"상품\"]\n  },\n  productIds: {\n    hidden: ({\n      type\n    }) => type !== QueryType.Product,\n    type: ControlType.String,\n    title: \"상품 ID\",\n    description: \"복수 입력 시 콤마(,)로 구분\",\n    defaultValue: \"\"\n  }\n};\nconst KEYWORD_COLLECTION_CONTROLS = {\n  type: {\n    type: ControlType.Enum,\n    title: \"유형\",\n    options: [QueryType.KeywordCollection],\n    optionTitles: [\"키워드 컬렉션\"]\n  },\n  keywordCollectionId: {\n    hidden: ({\n      type\n    }) => type !== QueryType.KeywordCollection,\n    type: ControlType.String,\n    title: \"키워드 컬렉션 ID\",\n    description: \"단수만 입력\",\n    defaultValue: \"\"\n  }\n};\nconst KEYWORD_COLLECTIONS_CONTROLS = {\n  type: {\n    type: ControlType.Enum,\n    title: \"유형\",\n    options: [QueryType.KeywordCollections],\n    optionTitles: [\"다중 키워드 컬렉션\"]\n  },\n  keywordCollectionIds: {\n    hidden: ({\n      type\n    }) => type !== QueryType.KeywordCollections,\n    type: ControlType.String,\n    title: \"키워드 컬렉션 ID\",\n    description: \"복수 입력 시 콤마(,)로 구분\",\n    defaultValue: \"\",\n    placeholder: \"11628,11629,11630\"\n  }\n};\nconst BRAND_CURATION_CONTROLS = {\n  type: {\n    type: ControlType.Enum,\n    title: \"유형\",\n    options: [QueryType.BrandCuration],\n    optionTitles: [\"브랜드 큐레이션\"]\n  },\n  brandGroupIds: {\n    hidden: ({\n      type\n    }) => type !== QueryType.BrandCuration,\n    type: ControlType.String,\n    title: \"브랜드 그룹 ID\",\n    description: \"복수 입력 시 콤마(,)로 구분\",\n    defaultValue: \"\"\n  },\n  brandSize: {\n    hidden: ({\n      type\n    }) => type !== QueryType.BrandCuration,\n    type: ControlType.Number,\n    title: \"개수\",\n    description: \"최대 500개, 미입력 시 최대 개수로 노출\",\n    unit: \"개\",\n    defaultValue: 20,\n    min: 0,\n    displayStepper: true\n  },\n  brandCurationTagIds: {\n    hidden: ({\n      type\n    }) => type !== QueryType.BrandCuration,\n    type: ControlType.String,\n    title: \"태그 ID\",\n    description: \"태그 아이디 입력 시 매핑된 상품만 노출\\n복수 입력 시 콤마(,)로 구분\",\n    defaultValue: \"\"\n  }\n};\nconst RECOMMENDATION_CONTROLS = {\n  type: {\n    type: ControlType.Enum,\n    title: \"유형\",\n    options: [QueryType.Recommendation],\n    optionTitles: [\"개인화 추천\"]\n  },\n  recommendationTagIds: {\n    hidden: ({\n      type\n    }) => type !== QueryType.Recommendation,\n    type: ControlType.String,\n    title: \"태그 ID\",\n    description: \"태그 아이디 입력 시 매핑된 상품만 노출\\n복수 입력 시 콤마(,)로 구분\",\n    defaultValue: \"\"\n  }\n};\nconst RANKING_CONTROLS = {\n  type: {\n    type: ControlType.Enum,\n    title: \"유형\",\n    options: [QueryType.Ranking],\n    optionTitles: [\"랭킹\"]\n  },\n  rankingType: {\n    hidden: ({\n      type\n    }) => type !== QueryType.Ranking,\n    type: ControlType.Enum,\n    title: \"랭킹 유형\",\n    options: [RankingType.Popularity, RankingType.Trending],\n    optionTitles: [\"인기\", \"급상승\"]\n  },\n  popularityPeriodType: {\n    hidden: ({\n      type,\n      rankingType\n    }) => type !== QueryType.Ranking || rankingType !== RankingType.Popularity,\n    type: ControlType.Enum,\n    title: \"기간\",\n    options: [PopularityPeriodType.Realtime, PopularityPeriodType.Hourly, PopularityPeriodType.Daily],\n    optionTitles: [\"실시간\", \"시간별\", \"일별\"]\n  },\n  trendingPeriodType: {\n    hidden: ({\n      type,\n      rankingType\n    }) => type !== QueryType.Ranking || rankingType !== RankingType.Trending,\n    type: ControlType.Enum,\n    title: \"기간\",\n    options: [TrendingPeriodType.Hourly],\n    optionTitles: [\"시간별\"]\n  },\n  rankingTagIds: {\n    hidden: ({\n      type\n    }) => type !== QueryType.Ranking,\n    type: ControlType.String,\n    title: \"태그 ID\",\n    description: \"태그 아이디 입력 시 매핑된 상품만 노출\\n복수 입력 시 콤마(,)로 구분\",\n    defaultValue: \"\"\n  },\n  categoryType: {\n    hidden: ({\n      type\n    }) => type !== QueryType.Ranking,\n    type: ControlType.Enum,\n    title: \"카테고리 유형\",\n    options: [CategoryType.Large, CategoryType.Middle],\n    optionTitles: [\"대카테고리\", \"중카테고리\"],\n    defaultValue: CategoryType.Large\n  },\n  excludeLargeCategoryIds: {\n    hidden: ({\n      type\n    }) => type !== QueryType.Ranking,\n    title: \"제외 대카테고리 ID\",\n    type: ControlType.String,\n    description: \"패싯에서 제외 시킬 대카테고리 ID 입력\\n복수 입력 시 콤마(,)로 구분\",\n    defaultValue: \"\",\n    placeholder: \"268100100,269100100,272100100,273100100\"\n  },\n  excludeMiddleCategoryIds: {\n    hidden: ({\n      type\n    }) => type !== QueryType.Ranking,\n    type: ControlType.String,\n    title: \"제외 중카테고리 ID\",\n    description: \"패싯에서 제외 시킬 중카테고리 ID 입력\\n복수 입력 시 콤마(,)로 구분\",\n    defaultValue: \"\",\n    placeholder: \"268103100,268106100,268104100,268117100\"\n  }\n};\nconst COUPON_COLLECTION_CONTROLS = {\n  type: {\n    type: ControlType.Enum,\n    title: \"유형\",\n    options: [QueryType.CouponCollection],\n    optionTitles: [\"타임 세일 브랜드\"]\n  },\n  brandSaleGroupId: {\n    hidden: ({\n      type\n    }) => type !== QueryType.CouponCollection,\n    type: ControlType.String,\n    title: \"타임 세일 브랜드 ID\",\n    description: \"단수만 입력\",\n    defaultValue: \"\"\n  }\n};\nconst RAFFLE_GROUP_CONTROLS = {\n  type: {\n    type: ControlType.Enum,\n    title: \"유형\",\n    options: [QueryType.RaffleGroup],\n    optionTitles: [\"래플 그룹\"]\n  },\n  raffleGroupId: {\n    hidden: ({\n      type\n    }) => type !== QueryType.RaffleGroup,\n    type: ControlType.String,\n    title: \"래플 그룹 ID\"\n  }\n};\nconst COUPON_CONTROLS = {\n  type: {\n    type: ControlType.Enum,\n    title: \"유형\",\n    options: [QueryType.Coupon],\n    optionTitles: [\"쿠폰\"]\n  },\n  couponType: {\n    type: ControlType.Enum,\n    title: \"쿠폰 유형\",\n    description: \"랜덤 쿠폰은 쿠폰 번호 없이 당일에 발급 가능한 쿠폰이 발급됩니다.\",\n    options: [CouponType.NORMAL, CouponType.LIMITED, CouponType.RANDOM],\n    optionTitles: [\"일반\", \"선착순\", \"랜덤\"]\n  },\n  couponUpdateType: {\n    hidden: (props) => props.couponType === CouponType.RANDOM,\n    type: ControlType.Enum,\n    title: \"쿠폰 갱신 유형\",\n    options: [CouponUpdateType.NORMAL, CouponUpdateType.DAILY],\n    optionTitles: [\"고정\", \"일자별\"]\n  },\n  couponIds: {\n    hidden: (props) => props.couponType !== CouponType.RANDOM && props.couponUpdateType !== CouponUpdateType.NORMAL,\n    type: ControlType.String,\n    title: \"쿠폰 ID\",\n    description: \"복수 입력 시 콤마(,)로 구분\\n랜덤 쿠폰은 유의사항 문구 자동생성을 위해 첫 회차에 해당하는 쿠폰번호 목록을 입력해 주세요.\"\n  },\n  dailyCouponOptions: {\n    hidden: (props) => props.couponType === CouponType.RANDOM || props.couponUpdateType !== CouponUpdateType.DAILY,\n    type: ControlType.Array,\n    title: \"갱신 일자\",\n    control: {\n      type: ControlType.Object,\n      controls: {\n        dailyCouponIds: {\n          type: ControlType.Array,\n          title: \"쿠폰 번호 목록\",\n          description: \"일자별 쿠폰 번호 목록을 입력합니다.\\n하나의 쿠폰 번호 목록당 하나의 날짜에 연결됩니다.\",\n          control: {\n            type: ControlType.String,\n            title: \"쿠폰 번호 목록\"\n          }\n        },\n        updateSchedule: {\n          type: ControlType.Object,\n          title: \"갱신 기간\",\n          controls: {\n            startAt: {\n              type: ControlType.Date,\n              title: \"시작일\"\n            },\n            endAt: {\n              type: ControlType.Date,\n              title: \"종료일\"\n            }\n          }\n        },\n        updateAt: {\n          type: ControlType.Object,\n          title: \"갱신 주기\",\n          description: \"ex) 10시 0분 0초 입력 -> 매일 오전 10시에 쿠폰번호 갱신\",\n          controls: {\n            hours: {\n              type: ControlType.Number,\n              title: \"시\",\n              defaultValue: 0,\n              min: 0,\n              max: 23,\n              unit: \"시\",\n              step: 1,\n              displayStepper: true\n            },\n            minutes: {\n              type: ControlType.Number,\n              title: \"분\",\n              defaultValue: 0,\n              min: 0,\n              max: 59,\n              unit: \"분\",\n              step: 1,\n              displayStepper: true\n            },\n            seconds: {\n              type: ControlType.Number,\n              title: \"초\",\n              defaultValue: 0,\n              min: 0,\n              max: 59,\n              unit: \"초\",\n              step: 1,\n              displayStepper: true\n            }\n          }\n        }\n      }\n    }\n  }\n};\nconst PREUSER_CONTROLS = {\n  type: {\n    type: ControlType.Enum,\n    title: \"유형\",\n    options: [QueryType.Preuser],\n    optionTitles: [\"체험단\"]\n  },\n  preuserIds: {\n    type: ControlType.String,\n    hidden: ({\n      type\n    }) => type !== QueryType.Preuser,\n    title: \"체험단 ID\",\n    description: \"복수 입력 시 콤마(,)로 구분\",\n    defaultValue: \"\"\n  }\n};\nconst QUERY_CONTROL = {\n  type: ControlType.Object,\n  title: \"질의\",\n  controls: {}\n};\nconst CUSTOM_CATEGORY_CONTROLS = {\n  type: {\n    type: ControlType.Enum,\n    title: \"질의 유형\",\n    options: [QueryType.CustomCategory],\n    optionTitles: [\"카테고리\"]\n  },\n  categoryIds: {\n    hidden: ({\n      type\n    }) => type !== QueryType.CustomCategory,\n    type: ControlType.String,\n    title: \"카테고리 ID\",\n    description: \"복수개의 카테고리를 mix 하여 커스텀 카테고리 입력 시 콤마(,)로 구분\",\n    defaultValue: \"\"\n  }\n};\nconst MOLOCO_CONTROL = {\n  type: {\n    type: ControlType.Enum,\n    title: \"유형\",\n    options: [QueryType.Moloco],\n    optionTitles: [\"몰로코\"]\n  },\n  tagId: {\n    hidden: ({\n      type\n    }) => type !== QueryType.Moloco,\n    type: ControlType.String,\n    title: \"태그 ID\"\n  },\n  inventoryId: {\n    hidden: ({\n      type\n    }) => type !== QueryType.Moloco,\n    type: ControlType.String,\n    title: \"인벤토리 ID\",\n    description: \"몰로코와 협의된 값 ex) campaign_29week\"\n  },\n  pageId: {\n    hidden: ({\n      type\n    }) => type !== QueryType.Moloco,\n    type: ControlType.String,\n    title: \"페이지 ID\",\n    description: \"해당 모듈이 노출될 이구위크 페이지 이름, 임의값으로 정해서 전달주시면 됩니다. *페이지당 1개의 고유 pageId 필요\"\n  },\n  categories: {\n    hidden: ({\n      type\n    }) => type !== QueryType.Moloco,\n    type: ControlType.Array,\n    title: \"카테고리\",\n    description: \"카테고리를 입력하면 기존 몰로코 데이터에서 해당 카테고리 데이터만 노출됩니다\",\n    control: {\n      type: ControlType.Object,\n      controls: {\n        categoryId: {\n          type: ControlType.String,\n          title: \"카테고리 ID\"\n        },\n        categoryName: {\n          type: ControlType.String,\n          title: \"카테고리 이름\"\n        }\n      }\n    }\n  }\n};\nexport {\n  BRAND_CURATION_CONTROLS,\n  COUPON_COLLECTION_CONTROLS,\n  COUPON_CONTROLS,\n  CUSTOM_CATEGORY_CONTROLS,\n  KEYWORD_COLLECTIONS_CONTROLS,\n  KEYWORD_COLLECTION_CONTROLS,\n  MOLOCO_CONTROL,\n  PREUSER_CONTROLS,\n  PRODUCT_CONTROLS,\n  QUERY_CONTROL,\n  RAFFLE_GROUP_CONTROLS,\n  RANKING_CONTROLS,\n  RECOMMENDATION_CONTROLS\n};\n","import { combineObjectPropertyControls } from \"../../../libs/property-controls/helpers.js\";\nimport { QUERY_CONTROL, PREUSER_CONTROLS, RANKING_CONTROLS, RECOMMENDATION_CONTROLS, KEYWORD_COLLECTION_CONTROLS, PRODUCT_CONTROLS } from \"../controls.js\";\nconst MANUAL_PRODUCTS_MODULE_QUERY = {\n  ...QUERY_CONTROL,\n  controls: combineObjectPropertyControls(PRODUCT_CONTROLS, KEYWORD_COLLECTION_CONTROLS, RECOMMENDATION_CONTROLS, RANKING_CONTROLS, PREUSER_CONTROLS)\n};\nexport {\n  MANUAL_PRODUCTS_MODULE_QUERY\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { addPropertyControls, ControlType } from \"framer\";\nimport { ButtonVariant, ButtonSize } from \"../../@shared/Button/Button.types.js\";\nimport { ProductCardType } from \"../../@shared/ProductCard/ProductCard.types.js\";\nimport { SWRErrorBoundary } from \"../../@shared/SWRErrorBoundary/SWRErrorBoundary.js\";\nimport { PREFIX_ICON_OPTIONS, POSTFIX_ICON_OPTIONS } from \"../../systems/Button/Button.constants.js\";\nimport { NoContent } from \"../../systems/curations/NoContent/NoContent.js\";\nimport { SectionLayout } from \"../../systems/curations/SectionLayout/SectionLayout.js\";\nimport { BREAKPOINT_CONTROLS } from \"../../../libs/property-controls/breakpoint.js\";\nimport { COMPONENT_ID_PROPS } from \"../../../libs/property-controls/component-id.js\";\nimport { SEGMENT_CONTROLS } from \"../../../libs/property-controls/segment.js\";\nimport { THEME_CONTROLS } from \"../../../libs/property-controls/theme.js\";\nimport { LinkedProductsModule } from \"./LinkedProductsModule/LinkedProductsModule.js\";\nimport { ProductsElement } from \"./ProductsElement/ProductsElement.js\";\nimport { MANUAL_PRODUCTS_MODULE_QUERY } from \"./ProductsModule.controls.js\";\nimport { ProductsModuleInputType, ScrollDirection, PaginationType } from \"./ProductsModule.types.js\";\nconst ProductsModuleInner = ({\n  input,\n  layout\n}) => {\n  switch (input.type) {\n    case ProductsModuleInputType.Linked:\n      return /* @__PURE__ */ jsx(LinkedProductsModule, { value: input.value, layout });\n    case ProductsModuleInputType.Manual:\n      return /* @__PURE__ */ jsx(ProductsElement, { query: input.query, layout });\n    default:\n      return null;\n  }\n};\nconst ProductsModule = ({\n  theme,\n  breakpoint,\n  componentId,\n  segment,\n  ...rest\n}) => {\n  return /* @__PURE__ */ jsx(SectionLayout, { theme, breakpoint, componentId, segment, children: /* @__PURE__ */ jsx(SWRErrorBoundary, { fallback: (retry) => /* @__PURE__ */ jsx(NoContent, { onClick: retry }), children: /* @__PURE__ */ jsx(ProductsModuleInner, { ...rest }) }) });\n};\naddPropertyControls(ProductsModule, {\n  ...BREAKPOINT_CONTROLS,\n  ...THEME_CONTROLS,\n  ...SEGMENT_CONTROLS,\n  ...COMPONENT_ID_PROPS,\n  input: {\n    type: ControlType.Object,\n    title: \"입력 값\",\n    controls: {\n      type: {\n        type: ControlType.Enum,\n        title: \"유형\",\n        options: [ProductsModuleInputType.Linked, ProductsModuleInputType.Manual],\n        optionTitles: [\"연결\", \"수동\"]\n      },\n      value: {\n        hidden: ({\n          type\n        }) => type !== ProductsModuleInputType.Linked,\n        type: ControlType.String,\n        title: \"출력 값\",\n        defaultValue: \"\"\n      },\n      query: {\n        hidden: ({\n          type\n        }) => type !== ProductsModuleInputType.Manual,\n        ...MANUAL_PRODUCTS_MODULE_QUERY\n      }\n    }\n  },\n  layout: {\n    type: ControlType.Object,\n    title: \"레이아웃\",\n    controls: {\n      direction: {\n        type: ControlType.Enum,\n        title: \"스크롤 방향\",\n        options: [\"horizontal\", \"vertical\"],\n        optionTitles: [\"수평\", \"수직\"]\n      },\n      cardType: {\n        type: ControlType.Enum,\n        title: \"카드 유형\",\n        options: [ProductCardType.CARD, ProductCardType.CARD_DETAILED, ProductCardType.BAR],\n        optionTitles: [\"compact-card\", \"card\", \"horizontal-card\"]\n      },\n      size: {\n        hidden: ({\n          cardType\n        }) => cardType === ProductCardType.CARD || cardType === ProductCardType.CARD_DETAILED,\n        type: ControlType.Enum,\n        title: \"크기\",\n        options: [\"small\", \"medium\"],\n        optionTitles: [\"small\", \"medium\"],\n        defaultValue: \"medium\"\n      },\n      hasRank: {\n        type: ControlType.Boolean,\n        title: \"순위 노출\",\n        defaultValue: false\n      },\n      hasName: {\n        type: ControlType.Boolean,\n        title: \"상품명 노출\",\n        defaultValue: true\n      },\n      hasBrandName: {\n        type: ControlType.Boolean,\n        title: \"브랜드명 노출\",\n        defaultValue: true\n      },\n      hasBadges: {\n        type: ControlType.Boolean,\n        title: \"뱃지 노출\",\n        defaultValue: true\n      },\n      hasHeart: {\n        type: ControlType.Boolean,\n        title: \"좋아요 노출\",\n        defaultValue: true\n      },\n      // 수평\n      rowCount: {\n        hidden: ({\n          direction\n        }) => direction !== ScrollDirection.Horizontal,\n        type: ControlType.Number,\n        title: \"행 개수\",\n        unit: \"개\",\n        defaultValue: 2,\n        min: 1,\n        max: 10\n      },\n      columnDisplayCount: {\n        hidden: ({\n          direction\n        }) => direction !== ScrollDirection.Horizontal,\n        type: ControlType.Number,\n        title: \"노출 열 개수\",\n        unit: \"개\",\n        description: \"뷰포트에 노출될 열 개수를 설정할 수 있습니다.\",\n        defaultValue: 3,\n        min: 1,\n        max: 6\n      },\n      hasScroll: {\n        hidden: ({\n          direction\n        }) => direction !== ScrollDirection.Horizontal,\n        type: ControlType.Boolean,\n        title: \"스크롤 노출\",\n        defaultValue: false\n      },\n      // 수직\n      isResponsive: {\n        hidden: ({\n          direction\n        }) => direction !== ScrollDirection.Vertical,\n        type: ControlType.Boolean,\n        title: \"반응형\",\n        defaultValue: false\n      },\n      columnCount: {\n        hidden: ({\n          direction,\n          isResponsive\n        }) => direction !== ScrollDirection.Vertical || isResponsive === true,\n        type: ControlType.Number,\n        title: \"열 개수\",\n        unit: \"개\",\n        defaultValue: 2,\n        min: 1,\n        max: 6\n      },\n      scrollMargin: {\n        hidden: ({\n          direction\n        }) => direction !== ScrollDirection.Vertical,\n        type: ControlType.Number,\n        title: \"스크롤 마진\",\n        description: \"자동 스크롤 이동 시 위치 보정 값을 설정할 수 있습니다.\",\n        unit: \"px\",\n        defaultValue: 0\n      },\n      verticalPagination: {\n        hidden: ({\n          direction\n        }) => direction !== ScrollDirection.Vertical,\n        type: ControlType.Object,\n        title: \"페이지네이션\",\n        controls: {\n          type: {\n            type: ControlType.Enum,\n            title: \"유형\",\n            options: [PaginationType.Default, PaginationType.ExpandButton, PaginationType.None],\n            optionTitles: [\"기본\", \"더보기 버튼\", \"없음\"]\n          },\n          gap: {\n            hidden: ({\n              type\n            }) => type !== PaginationType.ExpandButton,\n            type: ControlType.Number,\n            title: \"간격\",\n            description: \"상품 UI 와 페이징 UI 간의 간격을 설정할 수 있습니다.\",\n            unit: \"px\",\n            defaultValue: 16,\n            min: 0,\n            max: 50\n          },\n          rowDisplayCount: {\n            hidden: ({\n              type\n            }) => type === PaginationType.Default,\n            type: ControlType.Number,\n            title: \"노출 행 개수\",\n            description: \"(더보기 마다)노출할 행 개수를 설정할 수 있습니다.\",\n            unit: \"개\",\n            min: 1,\n            max: 10,\n            defaultValue: 4\n          },\n          button: {\n            hidden: ({\n              type\n            }) => type !== PaginationType.ExpandButton,\n            type: ControlType.Object,\n            title: \"버튼\",\n            controls: {\n              variant: {\n                type: ControlType.Enum,\n                title: \"변형\",\n                options: [ButtonVariant.PRIMARY, ButtonVariant.SECONDARY, ButtonVariant.TERTIARY],\n                optionTitles: [\"primary\", \"secondary\", \"tertiary\"]\n              },\n              size: {\n                type: ControlType.Enum,\n                title: \"크기\",\n                options: [ButtonSize.LARGE, ButtonSize.MEDIUM, ButtonSize.SMALL],\n                optionTitles: [\"large\", \"medium\", \"small\"],\n                defaultValue: ButtonSize.MEDIUM\n              },\n              fill: {\n                type: ControlType.Boolean,\n                title: \"채우기\",\n                defaultValue: false\n              },\n              prefixIcon: {\n                hidden: ({\n                  postfixIcon\n                }) => Boolean(postfixIcon),\n                type: ControlType.Enum,\n                title: \"좌측 아이콘\",\n                options: [void 0, ...PREFIX_ICON_OPTIONS],\n                optionTitles: [\"선택 안 함\", ...PREFIX_ICON_OPTIONS]\n              },\n              postfixIcon: {\n                hidden: ({\n                  prefixIcon\n                }) => Boolean(prefixIcon),\n                type: ControlType.Enum,\n                title: \"우측 아이콘\",\n                options: [void 0, ...POSTFIX_ICON_OPTIONS],\n                optionTitles: [\"선택 안 함\", ...POSTFIX_ICON_OPTIONS]\n              },\n              fillIcon: {\n                type: ControlType.Boolean,\n                title: \"아이콘 채우기\",\n                defaultValue: false\n              },\n              texts: {\n                type: ControlType.Array,\n                title: \"버튼 타이틀\",\n                defaultValue: [\"첫 번째 버튼\", \"두 번째 버튼\"],\n                control: {\n                  type: ControlType.String\n                }\n              }\n            }\n          }\n        }\n      },\n      // 공통\n      rowGap: {\n        type: ControlType.Number,\n        title: \"행 간격\",\n        unit: \"px\",\n        defaultValue: 16,\n        min: 0,\n        max: 50\n      },\n      columnGap: {\n        type: ControlType.Number,\n        title: \"열 간격\",\n        unit: \"px\",\n        defaultValue: 6,\n        min: 0,\n        max: 50\n      },\n      padding: {\n        type: ControlType.FusedNumber,\n        title: \"패딩\",\n        defaultValue: 0,\n        toggleKey: \"isMixed\",\n        toggleTitles: [\"All\", \"Individual\"],\n        valueKeys: [\"paddingTop\", \"paddingRight\", \"paddingBottom\", \"paddingLeft\"],\n        valueLabels: [\"T\", \"R\", \"B\", \"L\"],\n        min: 0\n      }\n    }\n  }\n});\nexport {\n  ProductsModule\n};\n","import{ProductsModule}from\"https://asset.29cm.co.kr/contents/framer/components/modules/ProductsModule/ProductsModule.js\";ProductsModule.displayName=\"[조립형]Products\";export default ProductsModule;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ProductsModule\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ProductsModule.map","import { ControlType } from \"framer\";\nimport { DiscountType, KindType } from \"../../types/models/coupon.js\";\nconst COUPON_LAYOUT_RESPONSIVE = \"responsive\";\nvar CouponColorType = /* @__PURE__ */ ((CouponColorType2) => {\n  CouponColorType2[\"DEFAULT\"] = \"default\";\n  CouponColorType2[\"SOLID\"] = \"solid\";\n  CouponColorType2[\"GRADIENT\"] = \"gradient\";\n  return CouponColorType2;\n})(CouponColorType || {});\nconst COUPON_CONTROLS = {\n  couponLayout: {\n    type: ControlType.Enum,\n    title: \"쿠폰 레이아웃\",\n    options: [\"detail\", \"compact\", COUPON_LAYOUT_RESPONSIVE],\n    optionTitles: [\"기본\", \"컴팩트\", \"반응형\"],\n    defaultValue: \"detail\"\n  },\n  backgroundColor: {\n    type: ControlType.Object,\n    title: \"쿠폰 배경색\",\n    controls: {\n      colorType: {\n        type: ControlType.Enum,\n        title: \"유형\",\n        optionTitles: [\"기본\", \"단색\", \"그라디언트\"],\n        options: [\n          \"default\",\n          \"solid\",\n          \"gradient\"\n          /* GRADIENT */\n        ]\n      },\n      color: {\n        type: ControlType.Color,\n        title: \"단색\",\n        optional: true,\n        hidden: ({\n          colorType\n        }) => colorType !== \"solid\"\n        /* SOLID */\n      },\n      gradient: {\n        type: ControlType.Object,\n        title: \"그라디언트\",\n        controls: {\n          stops: {\n            type: ControlType.Array,\n            title: \"색상 및 정지점들\",\n            control: {\n              type: ControlType.Object,\n              title: \"색상 및 정지점\",\n              controls: {\n                color: {\n                  type: ControlType.Color,\n                  title: \"색상\",\n                  optional: true\n                },\n                offsetPercent: {\n                  type: ControlType.Number,\n                  title: \"정지점\",\n                  unit: \"%\",\n                  min: 0,\n                  max: 100,\n                  defaultValue: 0,\n                  step: 1,\n                  displayStepper: true\n                }\n              }\n            }\n          },\n          degree: {\n            type: ControlType.Number,\n            title: \"각도\",\n            unit: \"deg\",\n            defaultValue: 0,\n            step: 1,\n            displayStepper: true\n          }\n        },\n        hidden: ({\n          colorType\n        }) => colorType !== \"gradient\"\n        /* GRADIENT */\n      }\n    }\n  }\n};\nconst COUPON_THEME_TYPE = {\n  DEFAULT: \"default\",\n  LIGHT: \"light\",\n  DARK: \"dark\"\n};\nconst COUPON_THEME_CONTROLS = {\n  couponTheme: {\n    type: ControlType.Enum,\n    title: \"쿠폰 테마\",\n    description: \"쿠폰 영역에 별도 테마를 적용합니다. 기본은 섹션 테마를 따릅니다.\",\n    options: [COUPON_THEME_TYPE.DEFAULT, COUPON_THEME_TYPE.LIGHT, COUPON_THEME_TYPE.DARK],\n    optionTitles: [\"기본 (테마 동일)\", \"Light\", \"Dark\"],\n    defaultValue: COUPON_THEME_TYPE.DEFAULT\n  }\n};\nconst DEFAULT_COUPON_NAME_VISIBILITY = {\n  discountValue: true,\n  brandName: true,\n  applicationType: true,\n  couponCount: false\n};\nconst DEFAULT_COUPON_MODULE_NAME_VISIBILITY = {\n  discountValue: true,\n  brandName: false,\n  applicationType: true,\n  couponCount: true\n};\nconst COUPON_MODULE_NAME_VISIBILITY_CONTROLS = {\n  couponNameVisibility: {\n    type: ControlType.Object,\n    title: \"쿠폰명 노출 옵션\",\n    controls: {\n      discountValue: {\n        type: ControlType.Boolean,\n        title: \"할인값\",\n        description: \"쿠폰명에 할인 수치(예: 10%, 3,000원)를 노출합니다.\",\n        defaultValue: true\n      },\n      applicationType: {\n        type: ControlType.Boolean,\n        title: \"적용방식\",\n        description: \"쿠폰명에 적용 대상을 노출합니다. (예: 상품, 장바구니)\",\n        defaultValue: true\n      },\n      couponCount: {\n        type: ControlType.Boolean,\n        title: \"쿠폰 개수\",\n        description: \"복수 발급 쿠폰일 때 쿠폰 장수(예: 2장)를 노출합니다.\",\n        defaultValue: true\n      }\n    }\n  }\n};\nconst COUPON_NAME_FIXED_TEXT = \"쿠폰\";\nconst getCouponDiscountValueText = (coupon) => {\n  if (coupon.discountType === DiscountType.FIXED_PRICE) {\n    return `${coupon.discountValue.toLocaleString(\"ko-KR\")}원`;\n  }\n  return `${coupon.discountValue}%`;\n};\nconst getCouponApplicationTypeText = (couponKindType) => {\n  if (couponKindType === KindType.PRODUCT) {\n    return \"상품\";\n  }\n  if (couponKindType === KindType.CART) {\n    return \"장바구니\";\n  }\n  return \"\";\n};\nconst getCouponCountText = (personMaxIssueCount) => (personMaxIssueCount ?? 0) > 1 ? `${personMaxIssueCount}장` : \"\";\nconst composeCouponName = ({\n  discountValue = \"\",\n  brandName = \"\",\n  applicationType = \"\",\n  couponCount = \"\",\n  visibility\n}) => {\n  return [visibility.discountValue ? discountValue : \"\", visibility.brandName ? brandName : \"\", visibility.applicationType ? applicationType : \"\", COUPON_NAME_FIXED_TEXT, visibility.couponCount ? couponCount : \"\"].filter(Boolean).join(\" \");\n};\nconst composeCouponNameFromCoupon = ({\n  coupon,\n  brandName = \"\",\n  visibility\n}) => composeCouponName({\n  discountValue: getCouponDiscountValueText(coupon),\n  brandName,\n  applicationType: getCouponApplicationTypeText(coupon.couponKindType),\n  couponCount: getCouponCountText(coupon.personMaxIssueCount),\n  visibility\n});\nconst resolveCouponTheme = (couponTheme) => couponTheme === COUPON_THEME_TYPE.DEFAULT ? void 0 : couponTheme;\nconst resolveCouponLayout = (couponLayout, breakpoint) => {\n  if (!couponLayout || couponLayout === COUPON_LAYOUT_RESPONSIVE) {\n    return breakpoint === \"mobile\" ? \"compact\" : \"detail\";\n  }\n  return couponLayout;\n};\nconst toBackgroundColor = (backgroundColor) => {\n  const {\n    colorType,\n    color,\n    gradient\n  } = backgroundColor;\n  const backgroundColorByType = {\n    [\n      \"default\"\n      /* DEFAULT */\n    ]: void 0,\n    [\n      \"solid\"\n      /* SOLID */\n    ]: color,\n    [\n      \"gradient\"\n      /* GRADIENT */\n    ]: gradient\n  };\n  return backgroundColorByType[colorType];\n};\nexport {\n  COUPON_CONTROLS,\n  COUPON_LAYOUT_RESPONSIVE,\n  COUPON_MODULE_NAME_VISIBILITY_CONTROLS,\n  COUPON_NAME_FIXED_TEXT,\n  COUPON_THEME_CONTROLS,\n  COUPON_THEME_TYPE,\n  CouponColorType,\n  DEFAULT_COUPON_MODULE_NAME_VISIBILITY,\n  DEFAULT_COUPON_NAME_VISIBILITY,\n  composeCouponName,\n  composeCouponNameFromCoupon,\n  getCouponApplicationTypeText,\n  getCouponCountText,\n  getCouponDiscountValueText,\n  resolveCouponLayout,\n  resolveCouponTheme,\n  toBackgroundColor\n};\n","const pick = (obj, keys) => {\n  const picked = {};\n  keys.forEach((key) => {\n    picked[key] = obj[key];\n  });\n  return picked;\n};\nconst isObject = (object) => {\n  return typeof object === \"object\" && object !== null && !Array.isArray(object);\n};\nexport {\n  isObject,\n  pick\n};\n","const variantByType = {\n  neutral: {\n    background: {\n      light: \"#dee2e6\",\n      dark: \"#27272a\"\n    },\n    primary: {\n      light: \"#000\",\n      dark: \"#fff\"\n    },\n    secondary: {\n      light: \"#474747\",\n      dark: \"#a0a0a0\"\n    },\n    tertiary: {\n      light: \"rgba(0, 0, 0, 0.5)\",\n      dark: \"rgba(255, 255, 255, 0.5)\"\n    },\n    border: \"rgba(255, 255, 255, 0.13)\"\n  },\n  accent: {\n    // NOTE(임규민): 기본 key color, 외부에서 커스터마이즈가 가능한 값입니다.\n    background: {\n      light: \"#ff4800\",\n      dark: \"#ff4800\"\n    },\n    primary: {\n      light: \"#000\",\n      dark: \"#fff\"\n    },\n    secondary: {\n      light: \"#000\",\n      dark: \"#fff\"\n    },\n    tertiary: {\n      light: \"rgba(0, 0, 0, 0.73)\",\n      dark: \"#fff\"\n    },\n    border: \"rgba(255, 255, 255, 0.5)\"\n  },\n  disabled: {\n    background: {\n      light: \"#dee2e6\",\n      dark: \"#27272a\"\n    },\n    primary: {\n      light: \"#474747\",\n      dark: \"#a0a0a0\"\n    },\n    secondary: {\n      light: \"#474747\",\n      dark: \"#a0a0a0\"\n    },\n    tertiary: {\n      light: \"rgba(0, 0, 0, 0.5)\",\n      dark: \"rgba(255, 255, 255, 0.5)\"\n    },\n    border: \"rgba(255, 255, 255, 0.13)\"\n  }\n};\nconst variantByStatus = {\n  upcoming: variantByType.neutral,\n  downloadable: variantByType.accent,\n  redownloadable: variantByType.accent,\n  downloaded: variantByType.neutral,\n  expired: variantByType.disabled,\n  disabled: variantByType.disabled,\n  issuanceLimitedReached: variantByType.disabled\n};\nexport {\n  variantByStatus,\n  variantByType\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { createContext, forwardRef, useCallback } from \"react\";\nimport { isObject } from \"../../../utils/object.js\";\nimport { Skeleton } from \"../Skeleton/Skeleton.js\";\nimport { variantByStatus } from \"./Root.constants.js\";\nconst CouponContext = createContext(null);\nconst Root = forwardRef(({\n  children,\n  style,\n  theme = \"light\",\n  loading = false,\n  status = \"downloadable\",\n  layout = \"detail\",\n  backgroundColor: _backgroundColor,\n  ...rest\n}, ref) => {\n  const variant = variantByStatus[status];\n  const backgroundColor = status === \"downloadable\" || status === \"redownloadable\" ? _backgroundColor ?? variant.background : variant.background;\n  const getBackground = useCallback(() => {\n    if (!isObject(backgroundColor)) {\n      return backgroundColor;\n    }\n    if (\"stops\" in backgroundColor) {\n      return getLinearGradient(backgroundColor);\n    }\n    return backgroundColor[theme];\n  }, [backgroundColor, theme]);\n  return /* @__PURE__ */ jsx(CouponContext.Provider, { value: {\n    status,\n    variant,\n    layout\n  }, children: /* @__PURE__ */ jsx(\"div\", { ref, style: {\n    ...containerStyle,\n    ...style\n  }, ...rest, children: loading ? /* @__PURE__ */ jsx(Skeleton, { style: {\n    ...skeletonStyle,\n    ...skeletonStyleByTheme[theme],\n    ...skeletonStyleByLayout[layout]\n  } }) : /* @__PURE__ */ jsx(\"div\", { style: {\n    ...wrapperStyle,\n    background: getBackground(),\n    ...wrapperStyleByLayout[layout],\n    ...layout === \"compact\" ? compactWrapperStyleByStatus[status] : {}\n  }, children }) }) });\n});\nconst getLinearGradient = (linearGradient) => {\n  const {\n    stops,\n    degree\n  } = linearGradient;\n  const gradient = [...stops].sort((x, y) => x.offsetPercent - y.offsetPercent).map((stop) => `${stop.color} ${stop.offsetPercent}%`).join(\", \");\n  return `linear-gradient(${degree}deg, ${gradient})`;\n};\nconst containerStyle = {\n  width: \"100%\"\n};\nconst wrapperStyle = {\n  position: \"relative\",\n  width: \"100%\",\n  display: \"flex\",\n  borderRadius: 4,\n  overflow: \"hidden\"\n};\nconst wrapperStyleByLayout = {\n  compact: {\n    height: 44,\n    WebkitMaskImage: `url('data:image/svg+xml;utf8,<svg width=\"7\" height=\"14\" viewBox=\"0 0 7 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 7C7 10.866 3.866 14 0 14C0 9.18 0 4.822 0 0C3.866 0 7 3.134 7 7Z\" fill=\"white\"/></svg>'), linear-gradient(#fff,#fff)`,\n    maskImage: `url('data:image/svg+xml;utf8,<svg width=\"7\" height=\"14\" viewBox=\"0 0 7 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 7C7 10.866 3.866 14 0 14C0 9.18 0 4.822 0 0C3.866 0 7 3.134 7 7Z\" fill=\"white\"/></svg>'), linear-gradient(#fff,#fff)`,\n    WebkitMaskComposite: \"exclude\",\n    maskComposite: \"exclude\",\n    WebkitMaskPosition: \"0 50%\",\n    maskPosition: \"0 50%\",\n    WebkitMaskSize: \"7px 14px, auto\",\n    maskSize: \"7px 14px, auto\",\n    WebkitMaskRepeat: \"no-repeat\",\n    maskRepeat: \"no-repeat\"\n  },\n  detail: {\n    height: 64,\n    WebkitMaskImage: `url('data:image/svg+xml;utf8,<svg width=\"7\" height=\"14\" viewBox=\"0 0 7 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 7C7 10.866 3.866 14 0 14C0 9.18 0 4.822 0 0C3.866 0 7 3.134 7 7Z\" fill=\"white\"/></svg>'), linear-gradient(#fff,#fff)`,\n    maskImage: `url('data:image/svg+xml;utf8,<svg width=\"7\" height=\"14\" viewBox=\"0 0 7 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 7C7 10.866 3.866 14 0 14C0 9.18 0 4.822 0 0C3.866 0 7 3.134 7 7Z\" fill=\"white\"/></svg>'), linear-gradient(#fff,#fff)`,\n    WebkitMaskComposite: \"exclude\",\n    maskComposite: \"exclude\",\n    WebkitMaskPosition: \"0 50%\",\n    maskPosition: \"0 50%\",\n    WebkitMaskSize: \"7px 14px, auto\",\n    maskSize: \"7px 14px, auto\",\n    WebkitMaskRepeat: \"no-repeat\",\n    maskRepeat: \"no-repeat\"\n  }\n};\nconst compactWrapperStyleByStatus = {\n  upcoming: {\n    cursor: \"not-allowed\"\n  },\n  downloadable: {\n    cursor: \"pointer\"\n  },\n  redownloadable: {\n    cursor: \"pointer\"\n  },\n  downloaded: {\n    cursor: \"pointer\"\n  },\n  expired: {\n    cursor: \"not-allowed\"\n  },\n  disabled: {\n    cursor: \"not-allowed\"\n  },\n  issuanceLimitedReached: {\n    cursor: \"not-allowed\"\n  }\n};\nconst skeletonStyle = {\n  width: \"100%\",\n  borderRadius: 4\n};\nconst skeletonStyleByTheme = {\n  light: {\n    backgroundColor: \"#dee2e6\"\n  },\n  dark: {\n    backgroundColor: \"#27272a\"\n  }\n};\nconst skeletonStyleByLayout = {\n  compact: {\n    height: 44\n  },\n  detail: {\n    height: 64\n  }\n};\nexport {\n  CouponContext,\n  Root\n};\n","import { useContext } from \"react\";\nimport { CouponContext } from \"./Root.js\";\nconst useCouponContext = () => {\n  const context = useContext(CouponContext);\n  if (!context) {\n    throw new Error(\"useCouponContext should be used with in Root\");\n  }\n  return context;\n};\nexport {\n  useCouponContext\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport \"../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../config/index.js\";\nimport \"../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../apis/user/UserApiService.js\";\nimport \"../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../hooks/stores/content/content.store.js\";\nimport \"../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../hooks/stores/toast/toast.store.js\";\nimport { useTheme } from \"../../../hooks/useTheme.js\";\nimport \"../providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react-dom\";\nimport \"../../systems/Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../hooks/useFeatureFlag.js\";\nimport \"../../../utils/redirectLogin.js\";\nimport \"../../../utils/event-properties/source.js\";\nimport { typography } from \"../../../styles/typography.js\";\nimport { useCouponContext } from \"./Root.hooks.js\";\nconst Description = forwardRef(({\n  children,\n  style,\n  ...rest\n}, ref) => {\n  const {\n    variant,\n    layout\n  } = useCouponContext();\n  const theme = useTheme();\n  if (layout === \"compact\") {\n    return null;\n  }\n  return /* @__PURE__ */ jsx(\"div\", { ref, ...rest, style: {\n    ...typography(11, 500, 1.36),\n    color: variant.tertiary[theme],\n    ...style\n  }, children });\n});\nexport {\n  Description\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport \"../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../config/index.js\";\nimport \"../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../apis/user/UserApiService.js\";\nimport \"../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../hooks/stores/content/content.store.js\";\nimport \"../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../hooks/stores/toast/toast.store.js\";\nimport { useTheme } from \"../../../hooks/useTheme.js\";\nimport \"../providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react-dom\";\nimport \"../../systems/Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../hooks/useFeatureFlag.js\";\nimport \"../../../utils/redirectLogin.js\";\nimport \"../../../utils/event-properties/source.js\";\nimport { useCouponContext } from \"./Root.hooks.js\";\nconst Divider = forwardRef(({\n  children,\n  style,\n  ...rest\n}, ref) => {\n  const theme = useTheme();\n  const {\n    layout\n  } = useCouponContext();\n  if (layout === \"compact\") {\n    return null;\n  }\n  return /* @__PURE__ */ jsx(\"div\", { ref, ...rest, style: {\n    ...containerStyle,\n    ...containerStyleByTheme[theme],\n    ...style\n  }, children });\n});\nconst containerStyle = {\n  zIndex: 1,\n  height: \"100%\",\n  borderLeftWidth: \"1px\",\n  borderLeftStyle: \"dashed\",\n  opacity: 0.2\n};\nconst containerStyleByTheme = {\n  light: {\n    borderColor: \"#000\"\n  },\n  dark: {\n    borderColor: \"#fff\"\n  }\n};\nexport {\n  Divider\n};\n","import { jsxs, jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport \"../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../config/index.js\";\nimport \"../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../apis/user/UserApiService.js\";\nimport \"../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../hooks/stores/content/content.store.js\";\nimport \"../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../hooks/stores/toast/toast.store.js\";\nimport { useTheme } from \"../../../hooks/useTheme.js\";\nimport \"../providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react-dom\";\nimport \"../../systems/Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../hooks/useFeatureFlag.js\";\nimport \"../../../utils/redirectLogin.js\";\nimport \"../../../utils/event-properties/source.js\";\nimport { typography } from \"../../../styles/typography.js\";\nimport { playHaptic } from \"../../../utils/playHaptic.js\";\nimport { Icon } from \"../Icon/Icon.js\";\nimport { useCouponContext } from \"./Root.hooks.js\";\nconst Button = forwardRef(({\n  style,\n  onClick,\n  ...rest\n}, ref) => {\n  const {\n    variant,\n    status,\n    layout\n  } = useCouponContext();\n  const theme = useTheme();\n  const {\n    icon,\n    text\n  } = contentByStatus[status];\n  const shouldRenderIcon = layout === \"detail\" || status === \"downloadable\" || status === \"redownloadable\" || status === \"downloaded\";\n  const getIconSize = () => {\n    if (layout === \"detail\") {\n      return 24;\n    }\n    if (layout === \"compact\") {\n      return 14;\n    }\n    return 16;\n  };\n  const getIconType = () => {\n    if (layout === \"compact\" && icon === \"download\") {\n      return \"downloadSlim\";\n    }\n    return icon;\n  };\n  const handleClick = (e) => {\n    if (status === \"upcoming\" || status === \"expired\") {\n      return;\n    }\n    playHaptic(\"rigid\");\n    onClick == null ? void 0 : onClick(e);\n  };\n  return /* @__PURE__ */ jsxs(\"div\", { ref, ...rest, style: {\n    ...containerStyle,\n    ...containerStyleByLayout[layout],\n    ...style,\n    ...containerStyleByStatus[status]\n  }, onClick: handleClick, children: [\n    shouldRenderIcon ? /* @__PURE__ */ jsx(Icon, { type: getIconType(), weight: layout === \"detail\" ? \"light\" : \"regular\", size: getIconSize(), color: variant.secondary[theme] }) : null,\n    /* @__PURE__ */ jsx(\"div\", { style: {\n      ...textStyleByLayout[layout],\n      color: variant.secondary[theme]\n    }, children: text })\n  ] });\n});\nconst contentByStatus = {\n  upcoming: {\n    icon: \"clock\",\n    text: \"발행예정\"\n  },\n  downloadable: {\n    icon: \"download\",\n    text: \"쿠폰받기\"\n  },\n  redownloadable: {\n    icon: \"download\",\n    text: \"다시 받기\"\n  },\n  downloaded: {\n    icon: \"check\",\n    text: \"받기완료\"\n  },\n  expired: {\n    icon: \"close\",\n    text: \"기간만료\"\n  },\n  disabled: {\n    icon: \"close\",\n    text: \"사용불가\"\n  },\n  issuanceLimitedReached: {\n    icon: \"close\",\n    text: \"받기마감\"\n  }\n};\nconst containerStyle = {\n  zIndex: 1,\n  height: \"100%\",\n  display: \"flex\",\n  alignItems: \"center\",\n  justifyContent: \"center\",\n  gap: 4\n};\nconst containerStyleByLayout = {\n  compact: {\n    paddingRight: 16,\n    flexShrink: 0\n  },\n  detail: {\n    aspectRatio: \"1 / 1\",\n    flexDirection: \"column\"\n  }\n};\nconst textStyleByLayout = {\n  compact: typography(12, 500),\n  detail: typography(10, 500, 1.2)\n};\nconst containerStyleByStatus = {\n  upcoming: {\n    cursor: \"not-allowed\"\n  },\n  downloadable: {\n    cursor: \"pointer\"\n  },\n  redownloadable: {\n    cursor: \"pointer\"\n  },\n  downloaded: {\n    cursor: \"pointer\"\n  },\n  expired: {\n    cursor: \"not-allowed\"\n  },\n  disabled: {\n    cursor: \"not-allowed\"\n  },\n  issuanceLimitedReached: {\n    cursor: \"not-allowed\"\n  }\n};\nexport {\n  Button\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { useCouponContext } from \"./Root.hooks.js\";\nconst Summary = forwardRef(({\n  children,\n  style,\n  ...rest\n}, ref) => {\n  const {\n    layout\n  } = useCouponContext();\n  return /* @__PURE__ */ jsx(\"div\", { ref, ...rest, style: {\n    ...containerStyle,\n    ...containerStyleByLayout[layout],\n    ...style\n  }, children });\n});\nconst containerStyle = {\n  zIndex: 1,\n  flex: 1,\n  height: \"100%\",\n  display: \"flex\",\n  flexDirection: \"column\",\n  justifyContent: \"center\",\n  gap: 2\n};\nconst containerStyleByLayout = {\n  compact: {\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    gap: 12,\n    padding: \"0px 0px 0px 18px\"\n  },\n  detail: {\n    gap: 1,\n    padding: \"0px 8px 0px 26px\"\n  }\n};\nexport {\n  Summary\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport \"../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../config/index.js\";\nimport \"../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../apis/user/UserApiService.js\";\nimport \"../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../hooks/stores/content/content.store.js\";\nimport \"../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../hooks/stores/toast/toast.store.js\";\nimport { useTheme } from \"../../../hooks/useTheme.js\";\nimport \"../providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react-dom\";\nimport \"../../systems/Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../hooks/useFeatureFlag.js\";\nimport \"../../../utils/redirectLogin.js\";\nimport \"../../../utils/event-properties/source.js\";\nimport { typography } from \"../../../styles/typography.js\";\nimport { useCouponContext } from \"./Root.hooks.js\";\nconst Title = forwardRef(({\n  children,\n  style,\n  ...rest\n}, ref) => {\n  const {\n    variant,\n    layout\n  } = useCouponContext();\n  const theme = useTheme();\n  return /* @__PURE__ */ jsx(\"div\", { ref, ...rest, style: {\n    ...styleByLayout[layout],\n    color: variant.primary[theme],\n    ...style\n  }, children });\n});\nconst styleByLayout = {\n  compact: {\n    flex: \"1 0 0\",\n    overflow: \"hidden\",\n    textOverflow: \"ellipsis\",\n    whiteSpace: \"nowrap\",\n    ...typography(14, 500, 1.4)\n  },\n  detail: {\n    ...typography(14, 600)\n  }\n};\nexport {\n  Title\n};\n","import { Description } from \"./Description.js\";\nimport { Divider } from \"./Divider.js\";\nimport { Root } from \"./Root.js\";\nimport { Button } from \"./Button.js\";\nimport { Summary } from \"./Summary.js\";\nimport { Title } from \"./Title.js\";\nconst Coupon = {\n  Root,\n  Summary,\n  Title,\n  Description,\n  Divider,\n  Button\n};\nexport {\n  Coupon\n};\n","import useSWR from \"../../node_modules/swr/core/dist/index.js\";\nimport { couponApi } from \"../../apis/coupon/CouponApiService.js\";\nconst COUPONS_DOWNLOAD_STATUS_FETCHER_KEY = \"@coupon/coupons-download-status\";\nconst useFetchCouponsDownloadStatus = (couponIds, userNo, enabled = true) => {\n  const canFetch = couponIds.length > 0 && Boolean(userNo) && enabled;\n  const {\n    isLoading,\n    data,\n    ...rest\n  } = useSWR(canFetch ? [COUPONS_DOWNLOAD_STATUS_FETCHER_KEY, ...couponIds] : null, () => couponApi.getCouponsDownloadStatus(couponIds, Number(userNo)), {\n    revalidateIfStale: true\n  });\n  return {\n    isLoading: isLoading || !canFetch,\n    statuses: data ?? [],\n    ...rest\n  };\n};\nexport {\n  useFetchCouponsDownloadStatus\n};\n","const formatToCoupon = (coupon) => {\n  if (!coupon) {\n    return void 0;\n  }\n  return {\n    ...coupon,\n    id: coupon.couponId\n  };\n};\nexport {\n  formatToCoupon\n};\n","import { QueryType } from \"../types.js\";\nimport useSWR from \"../../../node_modules/swr/core/dist/index.js\";\nimport { couponApi } from \"../../../apis/coupon/CouponApiService.js\";\nimport { formatToCoupon } from \"./CouponModule.utils.js\";\nconst COUPONS_FETCHER_KEY = \"@coupon/coupons\";\nconst useCouponsQuery = ({\n  query,\n  couponIds,\n  enabled = true\n}) => {\n  const canFetch = couponIds.length > 0 && enabled && query !== void 0;\n  const {\n    data\n  } = useSWR(canFetch ? [COUPONS_FETCHER_KEY, couponIds] : null, () => queryCoupons(couponIds, query));\n  return {\n    coupons: (data == null ? void 0 : data.coupons) ?? []\n  };\n};\nconst fetchCoupons = async (couponIds) => {\n  const {\n    data\n  } = await couponApi.getCoupons(couponIds);\n  return {\n    coupons: data\n  };\n};\nconst fetchCouponCollectionCoupon = (query) => {\n  const coupon = formatToCoupon(query.coupon);\n  return {\n    coupons: coupon ? [coupon] : []\n  };\n};\nconst fetchKeywordCollectionCoupon = async (query) => {\n  if (!query.couponId) {\n    return {\n      coupons: []\n    };\n  }\n  const {\n    data\n  } = await couponApi.getCoupons([query.couponId]);\n  return {\n    coupons: data\n  };\n};\nconst queryCoupons = (couponIds, query) => {\n  if (query === void 0) {\n    return {\n      coupons: []\n    };\n  }\n  switch (query.type) {\n    case QueryType.Coupon:\n      return fetchCoupons(couponIds);\n    case QueryType.CouponCollection:\n      return fetchCouponCollectionCoupon(query);\n    case QueryType.KeywordCollection:\n      return fetchKeywordCollectionCoupon(query);\n    default:\n      return {\n        coupons: []\n      };\n  }\n};\nexport {\n  useCouponsQuery\n};\n","import { CouponType, DiscountType, AvailableDayType } from \"../../../../types/models/coupon.js\";\nimport { deduplicate } from \"../../../../utils/deduplicate.js\";\nimport head from \"../../../../node_modules/lodash-es/head.js\";\nimport { parseISO } from \"../../../../node_modules/date-fns/parseISO.js\";\nimport { formatDate as format } from \"../../../../node_modules/date-fns/format.js\";\nconst DATE_FORMAT = \"yyyy.MM.dd HH:mm\";\nconst HOURS_IN_DAY = 24;\nconst getCouponNotices = (couponType, coupons) => {\n  const coupon = head(coupons);\n  if (!coupon) {\n    return [];\n  }\n  const formattedAvailablePeriod = formatAvailablePeriod(coupon);\n  const formattedMaxDiscountPrice = formatMaxDiscountPrice(couponType, sortCouponsByDiscountValueAscending(coupons));\n  const maxIssueCountNotice = createMaxIssueCountNotice(coupon.personMaxIssueCount);\n  if (couponType === CouponType.RANDOM) {\n    return getRandomCouponNotices(formattedAvailablePeriod, formattedMaxDiscountPrice);\n  }\n  if (coupon.discountType === DiscountType.FIXED_RATE) {\n    return getRateCouponNotices(formattedAvailablePeriod, formattedMaxDiscountPrice, maxIssueCountNotice);\n  }\n  return getAmountCouponNotices(formattedAvailablePeriod, formattedMaxDiscountPrice, maxIssueCountNotice);\n};\nconst createMaxIssueCountNotice = (maxIssueCount) => {\n  if (!maxIssueCount) {\n    return \"\";\n  }\n  const hasMaxIssueCount = maxIssueCount > 0;\n  if (!hasMaxIssueCount) {\n    return \"쿠폰은 이벤트 기간 중복 발급 가능합니다.\";\n  }\n  return `쿠폰은 이벤트 기간 동안 하나의 ID 당 ${maxIssueCount}회 발급 및 사용 가능합니다.`;\n};\nconst formatMaxDiscountPrice = (couponType, coupons) => {\n  const hasMaxDiscountPrice = coupons.some((coupon2) => coupon2.maxDiscountPrice > 0);\n  if (!hasMaxDiscountPrice) {\n    return \"제한 없음\";\n  }\n  const [coupon] = coupons;\n  if (couponType === CouponType.RANDOM) {\n    return formatRandomCouponMaxDiscountPrice(coupons);\n  }\n  if (coupon.discountType === DiscountType.FIXED_PRICE) {\n    return formatAmountCouponMaxDiscountPrice(coupons);\n  }\n  return formatRateCouponMaxDiscountPrice(coupons);\n};\nconst formatRateCouponMaxDiscountPrice = (coupons) => {\n  return `${composeWithUnit(getMaxDiscountPrice(coupons), \"원\")}`;\n};\nconst formatAmountCouponMaxDiscountPrice = (coupons) => {\n  const uniquified = uniquifyCouponsByMinPayAmount(coupons);\n  const formatted = uniquified.reduce((acc, curr) => {\n    const {\n      maxDiscountPrice,\n      minPayAmount\n    } = curr;\n    acc.push(`${composeWithUnit(minPayAmount, \"원\")} 이상 구매 시 ${composeWithUnit(maxDiscountPrice, \"원\")} 할인`);\n    return acc;\n  }, []);\n  return formatted.join(\", \");\n};\nconst formatRandomCouponMaxDiscountPrice = (coupons) => {\n  const uniquified = uniquifyCouponsByDiscountValue(coupons);\n  const formatted = uniquified.reduce((acc, curr) => {\n    const {\n      discountType,\n      discountValue,\n      maxDiscountPrice\n    } = curr;\n    acc.push(`${composeWithUnitByType(discountType, discountValue)} 쿠폰 ${composeWithUnit(maxDiscountPrice, \"원\")} 할인`);\n    return acc;\n  }, []);\n  return formatted.join(\", \");\n};\nconst formatAvailablePeriod = (coupon) => {\n  if (coupon.useAvailableDayType === AvailableDayType.DAY) {\n    return `쿠폰 발급 후 ${coupon.couponUseAfterDay * HOURS_IN_DAY}시간 이내`;\n  }\n  if (coupon.useAvailableDayType === AvailableDayType.RANGE) {\n    const availableStartAt = parseISO(coupon.couponUseStartAt);\n    const availableEndAt = parseISO(coupon.couponUseEndAt);\n    return `${format(availableStartAt, DATE_FORMAT)} - ${format(availableEndAt, DATE_FORMAT)}`;\n  }\n  return \"없음\";\n};\nconst uniquifyCouponsByDiscountValue = (coupons) => {\n  return deduplicate(coupons, (x, y) => x.discountValue === y.discountValue && x.maxDiscountPrice === y.maxDiscountPrice);\n};\nconst uniquifyCouponsByMinPayAmount = (coupons) => {\n  return deduplicate(coupons, (x, y) => x.minPayAmount === y.minPayAmount && x.maxDiscountPrice === y.maxDiscountPrice);\n};\nconst sortCouponsByDiscountValueAscending = (coupons) => {\n  return [...coupons].sort((x, y) => x.discountValue - y.discountValue);\n};\nconst getMaxDiscountPrice = (coupons) => {\n  return Math.max(...coupons.map((coupon) => coupon.maxDiscountPrice));\n};\nconst RANDOM_COUPON_PERIOD_CUTOFF = new Date(2026, 1, 18, 10, 0, 0);\nconst getRandomCouponUseablePeriod = (now = /* @__PURE__ */ new Date()) => {\n  if (now >= RANDOM_COUPON_PERIOD_CUTOFF) {\n    return \"발급일 기준 당일 23:59 까지\";\n  }\n  return \"발급일 기준 익일 09:59 까지\";\n};\nconst getRandomCouponNotices = (_availablePeriod, maxDiscountPrice) => [`쿠폰 사용 기간 : ${getRandomCouponUseablePeriod()}`, `쿠폰 최대 할인 금액 : ${maxDiscountPrice}`, `다운로드한 쿠폰은 'MY PAGE > 사용 가능 쿠폰'에서 확인 가능합니다.`, `쿠폰을 사용한 이력이 있는 경우 쿠폰은 보이지 않습니다.`, `쿠폰 소멸, 발급 중단, 사용 완료된 쿠폰은 구매 취소 시 별도 재발급이 불가합니다.`, `브랜드 정책에 따라 일부 상품 쿠폰 적용이 불가할 수 있습니다.`];\nconst getRateCouponNotices = (availablePeriod, maxDiscountPrice, maxIssueCountNotice) => [`쿠폰 사용 기간 : ${availablePeriod}`, `쿠폰 최대 할인 금액 : ${maxDiscountPrice}`, maxIssueCountNotice, `다운로드한 쿠폰은 'MY PAGE > 사용 가능 쿠폰'에서 확인 가능합니다.`, `해당 쿠폰은 이벤트 참여 상품 대상으로만 적용 가능합니다.`, `쿠폰 적용 가능 상품은 수시로 변경되며, 일부 품목에 한하여 쿠폰 적용이 제한될 수 있습니다.`, `브랜드 재고 사정에 따라 품절이나 환불 안내를 받게 될 수 있습니다.`];\nconst getAmountCouponNotices = (availablePeriod, maxDiscountPrice, maxIssueCountNotice) => {\n  return [`쿠폰 사용 기간 : ${availablePeriod}`, `쿠폰 최대 할인 금액 : ${maxDiscountPrice}`, maxIssueCountNotice, `다운로드한 쿠폰은 'MY PAGE > 사용 가능 쿠폰'에서 확인 가능합니다.`, `해당 쿠폰은 이벤트 참여 상품 대상으로만 적용 가능합니다.`, `쿠폰 적용 가능 상품은 수시로 변경되며, 일부 품목에 한하여 쿠폰 적용이 제한될 수 있습니다.`, `브랜드 재고 사정에 따라 품절이나 환불 안내를 받게 될 수 있습니다.`];\n};\nconst composeWithUnitByType = (discountType, discountValue) => {\n  switch (discountType) {\n    case DiscountType.FIXED_RATE:\n      return composeWithUnit(discountValue, \"%\");\n    case DiscountType.FIXED_PRICE:\n      return composeWithUnit(discountValue, \"원\");\n  }\n};\nconst composeWithUnit = (discountValue, unit) => {\n  return `${discountValue.toLocaleString(\"ko-KR\")}${unit}`;\n};\nexport {\n  composeWithUnit,\n  composeWithUnitByType,\n  getCouponNotices,\n  getRandomCouponUseablePeriod\n};\n","import { ControlType } from \"framer\";\nconst COUPON_NOTICE_THEME_TYPE = {\n  DEFAULT: \"default\",\n  LIGHT: \"light\",\n  DARK: \"dark\"\n};\nconst COUPON_NOTICES_CONTROLS = {\n  mainNotices: {\n    type: ControlType.Array,\n    title: \"메인 유의사항\",\n    description: \"상시 노출되는 유의사항으로, 최대 두 줄 입력이 가능합니다.\",\n    control: {\n      type: ControlType.String\n    },\n    maxCount: 2\n  },\n  hasAdditionalNotices: {\n    type: ControlType.Boolean,\n    title: \"추가 유의사항 노출\",\n    enabledTitle: \"노출\",\n    disabledTitle: \"미노출\",\n    defaultValue: false\n  },\n  additionalNotices: {\n    hidden: ({\n      hasAdditionalNotices\n    }) => hasAdditionalNotices === false,\n    type: ControlType.Array,\n    title: \"추가 유의사항\",\n    description: \"더보기 클릭 시 노출되는 추가 유의사항입니다.\",\n    control: {\n      type: ControlType.String\n    }\n  },\n  noticeTheme: {\n    type: ControlType.Enum,\n    title: \"유의사항 테마\",\n    description: \"기본은 쿠폰 테마를 따르며, Light/Dark로 유의사항만 별도 설정할 수 있습니다.\",\n    options: [COUPON_NOTICE_THEME_TYPE.DEFAULT, COUPON_NOTICE_THEME_TYPE.LIGHT, COUPON_NOTICE_THEME_TYPE.DARK],\n    optionTitles: [\"기본 (쿠폰 테마 동일)\", \"Light\", \"Dark\"],\n    defaultValue: COUPON_NOTICE_THEME_TYPE.DEFAULT\n  }\n};\nconst resolveCouponNoticeTheme = (noticeTheme, couponTheme) => noticeTheme === void 0 || noticeTheme === COUPON_NOTICE_THEME_TYPE.DEFAULT ? couponTheme : noticeTheme;\nexport {\n  COUPON_NOTICES_CONTROLS,\n  COUPON_NOTICE_THEME_TYPE,\n  resolveCouponNoticeTheme\n};\n","import { jsxs, jsx } from \"react/jsx-runtime\";\nimport { useMemo } from \"react\";\nimport { FoldableList } from \"../../../@shared/FoldableList/index.js\";\nimport \"../../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../../config/index.js\";\nimport \"../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../../apis/user/UserApiService.js\";\nimport \"../../../../apis/preuser/PreuserApiService.js\";\nimport \"framer\";\nimport \"../../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../../hooks/stores/toast/toast.store.js\";\nimport { useTheme } from \"../../../../hooks/useTheme.js\";\nimport \"../../../@shared/providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"../../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react-dom\";\nimport \"../../../systems/Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../../hooks/useFeatureFlag.js\";\nimport \"../../../../utils/redirectLogin.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { typography } from \"../../../../styles/typography.js\";\nimport { getCouponNotices } from \"./NoticesElement.utils.js\";\nimport { resolveCouponNoticeTheme } from \"../../../../libs/property-controls/coupon-notices.js\";\nimport { filterMap } from \"../../../../utils/filterMap.js\";\nconst NoticesElement = ({\n  couponType,\n  coupons,\n  mainNotices,\n  hasAdditionalNotices,\n  additionalNotices,\n  noticeTheme\n}) => {\n  const theme = useTheme();\n  const resolvedNoticeTheme = resolveCouponNoticeTheme(noticeTheme, theme);\n  const uniqueMainNotices = [...new Set(mainNotices)];\n  const mergedAdditionalNotices = useMemo(() => [...getCouponNotices(couponType, coupons), ...additionalNotices], [couponType, coupons, additionalNotices]);\n  const uniqueAdditionalNotices = [...new Set(mergedAdditionalNotices)];\n  const hasMainNotices = mainNotices.length > 0;\n  const hasNotices = hasMainNotices || hasAdditionalNotices;\n  if (!hasNotices) {\n    return null;\n  }\n  return /* @__PURE__ */ jsxs(\"div\", { style: noticesLayout, children: [\n    hasMainNotices ? /* @__PURE__ */ jsx(\"div\", { style: mainNoticesStyle, children: uniqueMainNotices.map((notice) => /* @__PURE__ */ jsxs(\"div\", { style: {\n      ...typography(12, 400),\n      ...mainNoticeStyleByTheme[resolvedNoticeTheme]\n    }, children: [\n      \"*\",\n      notice\n    ] }, notice)) }) : null,\n    hasAdditionalNotices ? /* @__PURE__ */ jsxs(FoldableList.Root, { theme: resolvedNoticeTheme, children: [\n      /* @__PURE__ */ jsx(FoldableList.Trigger, { style: {\n        gap: 2\n      }, textStyle: typography(12, 400), icons: {\n        initial: \"chevronDown\",\n        active: \"chevronUp\",\n        size: 12\n      }, children: \"유의사항\" }),\n      /* @__PURE__ */ jsx(FoldableList.Content, { children: filterMap(uniqueAdditionalNotices, (notice) => notice !== \"\", (notice) => /* @__PURE__ */ jsx(FoldableList.Item, { children: notice }, notice)) })\n    ] }) : null\n  ] });\n};\nconst noticesLayout = {\n  display: \"flex\",\n  flexDirection: \"column\",\n  gap: \"12px\",\n  marginTop: \"8px\"\n};\nconst mainNoticesStyle = {\n  width: \"100%\",\n  display: \"flex\",\n  flexDirection: \"column\"\n};\nconst mainNoticeStyleByTheme = {\n  light: {\n    color: \"#474747\"\n  },\n  dark: {\n    color: \"#a0a0a0\"\n  }\n};\nexport {\n  NoticesElement\n};\n","const formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: \"1초 미만\",\n    other: \"{{count}}초 미만\"\n  },\n  xSeconds: {\n    one: \"1초\",\n    other: \"{{count}}초\"\n  },\n  halfAMinute: \"30초\",\n  lessThanXMinutes: {\n    one: \"1분 미만\",\n    other: \"{{count}}분 미만\"\n  },\n  xMinutes: {\n    one: \"1분\",\n    other: \"{{count}}분\"\n  },\n  aboutXHours: {\n    one: \"약 1시간\",\n    other: \"약 {{count}}시간\"\n  },\n  xHours: {\n    one: \"1시간\",\n    other: \"{{count}}시간\"\n  },\n  xDays: {\n    one: \"1일\",\n    other: \"{{count}}일\"\n  },\n  aboutXWeeks: {\n    one: \"약 1주\",\n    other: \"약 {{count}}주\"\n  },\n  xWeeks: {\n    one: \"1주\",\n    other: \"{{count}}주\"\n  },\n  aboutXMonths: {\n    one: \"약 1개월\",\n    other: \"약 {{count}}개월\"\n  },\n  xMonths: {\n    one: \"1개월\",\n    other: \"{{count}}개월\"\n  },\n  aboutXYears: {\n    one: \"약 1년\",\n    other: \"약 {{count}}년\"\n  },\n  xYears: {\n    one: \"1년\",\n    other: \"{{count}}년\"\n  },\n  overXYears: {\n    one: \"1년 이상\",\n    other: \"{{count}}년 이상\"\n  },\n  almostXYears: {\n    one: \"거의 1년\",\n    other: \"거의 {{count}}년\"\n  }\n};\nconst formatDistance = (token, count, options) => {\n  let result;\n  const tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === \"string\") {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace(\"{{count}}\", count.toString());\n  }\n  if (options == null ? void 0 : options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return result + \" 후\";\n    } else {\n      return result + \" 전\";\n    }\n  }\n  return result;\n};\nexport {\n  formatDistance\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\nconst dateFormats = {\n  full: \"y년 M월 d일 EEEE\",\n  long: \"y년 M월 d일\",\n  medium: \"y.MM.dd\",\n  short: \"y.MM.dd\"\n};\nconst timeFormats = {\n  full: \"a H시 mm분 ss초 zzzz\",\n  long: \"a H:mm:ss z\",\n  medium: \"HH:mm:ss\",\n  short: \"HH:mm\"\n};\nconst dateTimeFormats = {\n  full: \"{{date}} {{time}}\",\n  long: \"{{date}} {{time}}\",\n  medium: \"{{date}} {{time}}\",\n  short: \"{{date}} {{time}}\"\n};\nconst formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: \"full\"\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: \"full\"\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: \"full\"\n  })\n};\nexport {\n  formatLong\n};\n","const formatRelativeLocale = {\n  lastWeek: \"'지난' eeee p\",\n  yesterday: \"'어제' p\",\n  today: \"'오늘' p\",\n  tomorrow: \"'내일' p\",\n  nextWeek: \"'다음' eeee p\",\n  other: \"P\"\n};\nconst formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token];\nexport {\n  formatRelative\n};\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\nconst eraValues = {\n  narrow: [\"BC\", \"AD\"],\n  abbreviated: [\"BC\", \"AD\"],\n  wide: [\"기원전\", \"서기\"]\n};\nconst quarterValues = {\n  narrow: [\"1\", \"2\", \"3\", \"4\"],\n  abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n  wide: [\"1분기\", \"2분기\", \"3분기\", \"4분기\"]\n};\nconst monthValues = {\n  narrow: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\n  abbreviated: [\n    \"1월\",\n    \"2월\",\n    \"3월\",\n    \"4월\",\n    \"5월\",\n    \"6월\",\n    \"7월\",\n    \"8월\",\n    \"9월\",\n    \"10월\",\n    \"11월\",\n    \"12월\"\n  ],\n  wide: [\n    \"1월\",\n    \"2월\",\n    \"3월\",\n    \"4월\",\n    \"5월\",\n    \"6월\",\n    \"7월\",\n    \"8월\",\n    \"9월\",\n    \"10월\",\n    \"11월\",\n    \"12월\"\n  ]\n};\nconst dayValues = {\n  narrow: [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"],\n  short: [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"],\n  abbreviated: [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"],\n  wide: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\"]\n};\nconst dayPeriodValues = {\n  narrow: {\n    am: \"오전\",\n    pm: \"오후\",\n    midnight: \"자정\",\n    noon: \"정오\",\n    morning: \"아침\",\n    afternoon: \"오후\",\n    evening: \"저녁\",\n    night: \"밤\"\n  },\n  abbreviated: {\n    am: \"오전\",\n    pm: \"오후\",\n    midnight: \"자정\",\n    noon: \"정오\",\n    morning: \"아침\",\n    afternoon: \"오후\",\n    evening: \"저녁\",\n    night: \"밤\"\n  },\n  wide: {\n    am: \"오전\",\n    pm: \"오후\",\n    midnight: \"자정\",\n    noon: \"정오\",\n    morning: \"아침\",\n    afternoon: \"오후\",\n    evening: \"저녁\",\n    night: \"밤\"\n  }\n};\nconst formattingDayPeriodValues = {\n  narrow: {\n    am: \"오전\",\n    pm: \"오후\",\n    midnight: \"자정\",\n    noon: \"정오\",\n    morning: \"아침\",\n    afternoon: \"오후\",\n    evening: \"저녁\",\n    night: \"밤\"\n  },\n  abbreviated: {\n    am: \"오전\",\n    pm: \"오후\",\n    midnight: \"자정\",\n    noon: \"정오\",\n    morning: \"아침\",\n    afternoon: \"오후\",\n    evening: \"저녁\",\n    night: \"밤\"\n  },\n  wide: {\n    am: \"오전\",\n    pm: \"오후\",\n    midnight: \"자정\",\n    noon: \"정오\",\n    morning: \"아침\",\n    afternoon: \"오후\",\n    evening: \"저녁\",\n    night: \"밤\"\n  }\n};\nconst ordinalNumber = (dirtyNumber, options) => {\n  const number = Number(dirtyNumber);\n  const unit = String(options == null ? void 0 : options.unit);\n  switch (unit) {\n    case \"minute\":\n    case \"second\":\n      return String(number);\n    case \"date\":\n      return number + \"일\";\n    default:\n      return number + \"번째\";\n  }\n};\nconst localize = {\n  ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: \"wide\"\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: \"wide\",\n    argumentCallback: (quarter) => quarter - 1\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: \"wide\"\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: \"wide\"\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: \"wide\",\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: \"wide\"\n  })\n};\nexport {\n  localize\n};\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\nconst matchOrdinalNumberPattern = /^(\\d+)(일|번째)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\nconst matchEraPatterns = {\n  narrow: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(기원전|서기)/i\n};\nconst parseEraPatterns = {\n  any: [/^(bc|기원전)/i, /^(ad|서기)/i]\n};\nconst matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234]사?분기/i\n};\nconst parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nconst matchMonthPatterns = {\n  narrow: /^(1[012]|[123456789])/,\n  abbreviated: /^(1[012]|[123456789])월/i,\n  wide: /^(1[012]|[123456789])월/i\n};\nconst parseMonthPatterns = {\n  any: [\n    /^1월?$/,\n    /^2/,\n    /^3/,\n    /^4/,\n    /^5/,\n    /^6/,\n    /^7/,\n    /^8/,\n    /^9/,\n    /^10/,\n    /^11/,\n    /^12/\n  ]\n};\nconst matchDayPatterns = {\n  narrow: /^[일월화수목금토]/,\n  short: /^[일월화수목금토]/,\n  abbreviated: /^[일월화수목금토]/,\n  wide: /^[일월화수목금토]요일/\n};\nconst parseDayPatterns = {\n  any: [/^일/, /^월/, /^화/, /^수/, /^목/, /^금/, /^토/]\n};\nconst matchDayPeriodPatterns = {\n  any: /^(am|pm|오전|오후|자정|정오|아침|저녁|밤)/i\n};\nconst parseDayPeriodPatterns = {\n  any: {\n    am: /^(am|오전)/i,\n    pm: /^(pm|오후)/i,\n    midnight: /^자정/i,\n    noon: /^정오/i,\n    morning: /^아침/i,\n    afternoon: /^오후/i,\n    evening: /^저녁/i,\n    night: /^밤/i\n  }\n};\nconst match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: (value) => parseInt(value, 10)\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: \"any\"\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: \"any\",\n    valueCallback: (index) => index + 1\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: \"any\"\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: \"any\"\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: \"any\",\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: \"any\"\n  })\n};\nexport {\n  match\n};\n","import { formatDistance } from \"./ko/_lib/formatDistance.js\";\nimport { formatLong } from \"./ko/_lib/formatLong.js\";\nimport { formatRelative } from \"./ko/_lib/formatRelative.js\";\nimport { localize } from \"./ko/_lib/localize.js\";\nimport { match } from \"./ko/_lib/match.js\";\nconst ko = {\n  code: \"ko\",\n  formatDistance,\n  formatLong,\n  formatRelative,\n  localize,\n  match,\n  options: {\n    weekStartsOn: 0,\n    firstWeekContainsDate: 1\n  }\n};\nexport {\n  ko as default,\n  ko\n};\n","import { jsxs, jsx } from \"react/jsx-runtime\";\nimport { Countdown } from \"../../../systems/Countdown/Countdown.js\";\nimport \"react-dom\";\nimport \"react\";\nimport \"../../../systems/Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../systems/Expandable/Expandable.js\";\nimport \"../../../systems/FixedScrollProgressBar/FixedScrollProgressBar.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../../hooks/stores/toast/toast.store.js\";\nimport \"../../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport \"../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../../config/index.js\";\nimport \"../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../../apis/user/UserApiService.js\";\nimport \"../../../../apis/preuser/PreuserApiService.js\";\nimport { isCanvas } from \"../../../../utils/framer/isCanvas.js\";\nimport \"framer\";\nimport \"../../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../systems/ShareButtonWithReferralEvent/ShareButtonWithReferralEvent.js\";\nimport \"../../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../@shared/providers/ThemeProvider/ThemeProvider.js\";\nimport \"../../../@shared/providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"../../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../../hooks/useFeatureFlag.js\";\nimport \"../../../../utils/redirectLogin.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { createKRTimeZoneDate } from \"../../../../utils/createUTCDate.js\";\nimport \"../../../../constants/snowplow/snowplowSchema.js\";\nimport \"../../../systems/Products/Products.js\";\nimport \"../../../systems/ResponsiveSplitView/ResponsiveSplitView.js\";\nimport \"../../../systems/ResponsiveSplitViewOverlayButton/ResponsiveSplitViewOverlayButton.js\";\nimport \"../../../systems/RollingNumber/RollingNumber.js\";\nimport \"../../../systems/TabBar/TabBar.js\";\nimport \"../../../systems/TimeProgressBar/TimeProgressBar.js\";\nimport \"../../../systems/ViewportContainer/ViewportContainer.js\";\nimport \"../../../systems/TabBarV2/TabBarV2.js\";\nimport \"../../../systems/TabBarV3/TabBarV3.js\";\nimport \"../../../systems/TabBarV4/TabBarV4.js\";\nimport { typography } from \"../../../../styles/typography.js\";\nimport { DiscountType, KindType, CouponType, AvailableDayType } from \"../../../../types/models/coupon.js\";\nimport { RandomDiscountValue } from \"../../../systems/RandomDiscountValue/RandomDiscountValue.js\";\nimport { QueryType } from \"../../types.js\";\nimport { isAbove } from \"../../../../utils/date.js\";\nimport { composeCouponNameFromCoupon } from \"../../../../libs/property-controls/coupon.js\";\nimport head from \"../../../../node_modules/lodash-es/head.js\";\nimport { isBefore } from \"../../../../node_modules/date-fns/isBefore.js\";\nimport { isAfter } from \"../../../../node_modules/date-fns/isAfter.js\";\nimport { formatDate as format } from \"../../../../node_modules/date-fns/format.js\";\nimport { isWithinInterval } from \"../../../../node_modules/date-fns/isWithinInterval.js\";\nimport { differenceInCalendarDays } from \"../../../../node_modules/date-fns/differenceInCalendarDays.js\";\nimport { ko } from \"../../../../node_modules/date-fns/locale/ko.js\";\nconst getCouponUseEndAt = (coupon) => {\n  if (coupon.useAvailableDayType === AvailableDayType.RANGE) {\n    return createKRTimeZoneDate(coupon.couponUseEndAt);\n  }\n  return void 0;\n};\nconst getCouponStatus = (coupon, logged, query, statuses) => {\n  var _a;\n  if (!coupon) {\n    return \"downloadable\";\n  }\n  if (isCanvas()) {\n    return \"downloadable\";\n  }\n  if (query.type === QueryType.Coupon && query.couponType === CouponType.RANDOM) {\n    return \"downloadable\";\n  }\n  const now = createKRTimeZoneDate();\n  const issueStartAt = createKRTimeZoneDate(coupon.couponIssueStartAt);\n  const issueEndAt = createKRTimeZoneDate(coupon.couponIssueEndAt);\n  const useEndAt = getCouponUseEndAt(coupon);\n  const isUpcoming = isBefore(now, issueStartAt);\n  const isEnd = isAfter(now, issueEndAt);\n  const isExpired = useEndAt !== void 0 && isAfter(now, useEndAt);\n  if (isUpcoming) {\n    return \"upcoming\";\n  }\n  if (isExpired || isEnd) {\n    return \"expired\";\n  }\n  if (!logged) {\n    return \"downloadable\";\n  }\n  const status = (_a = statuses.find((_status) => _status.couponId === coupon.id)) == null ? void 0 : _a.couponDownloadStatus;\n  switch (status) {\n    case \"NOT_ISSUED\":\n    case \"UPCOMING\":\n      return \"upcoming\";\n    case \"DOWNLOADABLE\":\n      return \"downloadable\";\n    case \"ISSUANCE_LIMIT_REACHED\":\n      return \"issuanceLimitedReached\";\n    case \"EXPIRED\":\n      return \"expired\";\n    case \"DOWNLOADED\":\n    case \"CLAIMED\":\n      return \"downloaded\";\n    case \"DISABLED\":\n      return \"disabled\";\n    default:\n      return \"downloadable\";\n  }\n};\nconst getCouponFallbackDescription = (coupons) => {\n  const discountValues = coupons.map((coupon) => coupon.discountValue);\n  const {\n    discountType = DiscountType.FIXED_RATE,\n    couponKindType = KindType.CART\n  } = head(coupons) ?? {};\n  const minDiscountValue = Math.min(...discountValues).toLocaleString(\"ko-KR\");\n  const maxDiscountValue = Math.max(...discountValues).toLocaleString(\"ko-KR\");\n  const unit = unitByDiscountType[discountType];\n  return `${minDiscountValue}${unit}~${maxDiscountValue}${unit} ${textByCouponKindType[couponKindType]} 쿠폰 랜덤 지급`;\n};\nconst unitByDiscountType = {\n  [DiscountType.FIXED_RATE]: \"%\",\n  [DiscountType.FIXED_PRICE]: \"원\"\n};\nconst textByCouponKindType = {\n  [KindType.CART]: \"장바구니\",\n  [KindType.PRODUCT]: \"상품\"\n};\nconst getUpcomingText = (issueStartAt) => {\n  const hour = format(issueStartAt, \"H\", {\n    locale: ko\n  });\n  const minute = format(issueStartAt, \"m\", {\n    locale: ko\n  });\n  const timeText = minute === \"0\" ? `${hour}시` : `${hour}시 ${minute}분`;\n  return `${format(issueStartAt, \"M월 d일(EEE)\", {\n    locale: ko\n  })} ${timeText} 발행 예정`;\n};\nconst getDescriptionByStatus = (coupon) => {\n  const issueStartAt = createKRTimeZoneDate(coupon.couponIssueStartAt);\n  const issueEndAt = createKRTimeZoneDate(coupon.couponIssueEndAt);\n  const useEndAt = getCouponUseEndAt(coupon);\n  return {\n    upcoming: getUpcomingText(issueStartAt),\n    redownloadable: /* @__PURE__ */ jsxs(\"div\", { style: descriptionStyle, children: [\n      /* @__PURE__ */ jsx(Countdown, { targetDateString: format(issueEndAt, \"yyyy-MM-dd\"), targetTimeString: format(issueEndAt, \"HH:mm:ss\"), dateDisplayFormat: \"D일\", timeDisplayFormat: \"H시간 m분 s초\", fontSize: 12, color: \"inherit\", style: typography(12, 400) }),\n      \"남음\"\n    ] }),\n    downloadable: /* @__PURE__ */ jsxs(\"div\", { style: descriptionStyle, children: [\n      /* @__PURE__ */ jsx(Countdown, { targetDateString: format(issueEndAt, \"yyyy-MM-dd\"), targetTimeString: format(issueEndAt, \"HH:mm:ss\"), dateDisplayFormat: \"D일\", timeDisplayFormat: \"H시간 m분 s초\", fontSize: 12, color: \"inherit\", style: typography(12, 400) }),\n      \"남음\"\n    ] }),\n    downloaded: useEndAt ? /* @__PURE__ */ jsxs(\"div\", { style: descriptionStyle, children: [\n      /* @__PURE__ */ jsx(Countdown, { targetDateString: format(useEndAt, \"yyyy-MM-dd\"), targetTimeString: format(useEndAt, \"HH:mm:ss\"), dateDisplayFormat: \"D일\", timeDisplayFormat: \"H시간 m분 s초\", fontSize: 12, color: \"inherit\", style: typography(12, 400) }),\n      \"남음\"\n    ] }) : null,\n    expired: \"쿠폰 사용 기간이 종료되었어요\",\n    disabled: \"사용할 수 없는 쿠폰입니다\",\n    issuanceLimitedReached: \"쿠폰이 모두 소진되었어요\"\n  };\n};\nconst descriptionStyle = {\n  display: \"flex\",\n  alignItems: \"center\",\n  gap: 3,\n  color: \"inherit\"\n};\nconst markAsDownloaded = (statuses, couponIds) => {\n  return statuses.map((status) => ({\n    ...status,\n    couponDownloadStatus: status.couponDownloadStatus === \"DOWNLOADABLE\" && couponIds.includes(status.couponId) ? \"DOWNLOADED\" : status.couponDownloadStatus\n  }));\n};\nconst getCouponCollectionCouponName = (query, visibility) => {\n  const coupon = query.coupon;\n  const frontBrand = query.frontBrand;\n  if (!coupon) {\n    return \"\";\n  }\n  return composeCouponNameFromCoupon({\n    coupon,\n    brandName: (frontBrand == null ? void 0 : frontBrand.nameKor) ?? \"\",\n    visibility\n  });\n};\nconst getRandomCouponName = (coupons) => {\n  var _a;\n  const sortByDiscountValue = sortCouponsByDiscountValueAscending(coupons);\n  const couponDiscountValues = sortByDiscountValue.map((coupon) => coupon.discountValue);\n  return /* @__PURE__ */ jsxs(\"div\", { style: {\n    display: \"flex\",\n    alignItems: \"center\",\n    gap: 6\n  }, children: [\n    /* @__PURE__ */ jsx(\"div\", { children: /* @__PURE__ */ jsx(RandomDiscountValue, { discountType: ((_a = head(coupons)) == null ? void 0 : _a.discountType) ?? DiscountType.FIXED_RATE, discountValues: couponDiscountValues }) }),\n    /* @__PURE__ */ jsx(\"span\", { children: \"쿠폰\" })\n  ] });\n};\nconst getGeneralCouponName = (coupons, visibility) => {\n  const topCoupon = coupons.reduce((maxCoupon, currentCoupon) => currentCoupon.discountValue > maxCoupon.discountValue ? currentCoupon : maxCoupon);\n  const couponName = composeCouponNameFromCoupon({\n    coupon: topCoupon,\n    visibility\n  });\n  if (coupons.length === 1) {\n    return couponName;\n  }\n  return `${couponName} 외 ${coupons.length - 1}장`;\n};\nconst getCouponNameByCouponType = (coupons, query, visibility) => {\n  switch (query.couponType) {\n    case CouponType.RANDOM:\n      return getRandomCouponName(coupons);\n    case CouponType.LIMITED:\n    case CouponType.NORMAL:\n      return getGeneralCouponName(coupons, visibility);\n  }\n};\nconst getCouponName = (coupons, query, visibility) => {\n  if (coupons.length === 0) {\n    return \"\";\n  }\n  switch (query.type) {\n    case QueryType.CouponCollection:\n      return getCouponCollectionCouponName(query, visibility);\n    case QueryType.KeywordCollection:\n      return getGeneralCouponName(coupons, visibility);\n    case QueryType.Coupon:\n      return getCouponNameByCouponType(coupons, query, visibility);\n  }\n};\nconst sortCouponsByDiscountValueAscending = (coupons) => {\n  return [...coupons].sort((x, y) => x.discountValue - y.discountValue);\n};\nconst findCurrentSchedule = (schedule) => {\n  const now = createKRTimeZoneDate();\n  const scheduleIndex = schedule.findIndex((item, index) => {\n    const {\n      shouldUpdateAt\n    } = item;\n    const next = schedule[index + 1];\n    const hasNext = next !== void 0;\n    const isFirst = index === 0 && isAbove(shouldUpdateAt, now);\n    const isWithin = hasNext && isWithinInterval(now, {\n      start: shouldUpdateAt,\n      end: next.shouldUpdateAt\n    });\n    const isLast = !hasNext && isAbove(now, shouldUpdateAt);\n    return isFirst || isWithin || isLast;\n  });\n  return schedule[scheduleIndex];\n};\nconst toSchedule = (options) => sortScheduleAscending(toCouponSchedule(options));\nconst sortScheduleAscending = (schedule) => {\n  return [...schedule].sort((x, y) => x.shouldUpdateAt.getTime() - y.shouldUpdateAt.getTime());\n};\nconst toCouponSchedule = (options) => {\n  return options.flatMap((option) => {\n    const {\n      dailyCouponIds,\n      updateSchedule,\n      updateAt\n    } = option;\n    const {\n      startAt,\n      endAt\n    } = updateSchedule;\n    if (!startAt || !endAt) {\n      return [];\n    }\n    const diff = differenceInCalendarDays(endAt, startAt);\n    return Array.from({\n      length: diff + 1\n    }, (_, index) => {\n      const {\n        hours,\n        minutes,\n        seconds\n      } = updateAt;\n      const date = createKRTimeZoneDate(startAt);\n      date.setDate(date.getDate() + index);\n      date.setHours(hours, minutes, seconds);\n      return {\n        shouldUpdateAt: date,\n        couponIdList: dailyCouponIds[index]\n      };\n    });\n  });\n};\nexport {\n  findCurrentSchedule,\n  getCouponFallbackDescription,\n  getCouponName,\n  getCouponStatus,\n  getDescriptionByStatus,\n  markAsDownloaded,\n  toSchedule\n};\n","import { toCouponNos } from \"../../../../hooks/useDownloadCoupons.js\";\nimport { CouponUpdateType } from \"../CouponModule.types.js\";\nimport { CouponType } from \"../../../../types/models/coupon.js\";\nimport { shallowUnique } from \"../../../../utils/unique.js\";\nimport { useState, useEffect } from \"react\";\nimport { useVisibilityAwareInterval } from \"../../../../hooks/useVisibilityAwareInterval.js\";\nimport { QueryType } from \"../../types.js\";\nimport { findCurrentSchedule, toSchedule } from \"./CouponElement.utils.js\";\nconst MS_IN_SECOND = 1e3;\nconst DEFAULT_COUPON_ITEM_ENTRY = {\n  couponIds: [],\n  updateType: CouponUpdateType.NORMAL,\n  couponType: CouponType.NORMAL\n};\nconst useCouponIds = ({\n  query\n}) => {\n  const [couponItemEntry, setCouponItemEntry] = useState(getCouponItemEntry({\n    query\n  }) ?? DEFAULT_COUPON_ITEM_ENTRY);\n  useVisibilityAwareInterval(() => {\n    if (couponItemEntry.updateType === CouponUpdateType.NORMAL) {\n      return;\n    }\n    const currentSchedule = findCurrentSchedule(couponItemEntry.schedules ?? []);\n    setCouponItemEntry((prev) => ({\n      ...prev,\n      couponIds: shallowUnique(toCouponNos((currentSchedule == null ? void 0 : currentSchedule.couponIdList) ?? \"\"))\n    }));\n  }, MS_IN_SECOND);\n  useEffect(() => {\n    setCouponItemEntry(getCouponItemEntry({\n      query\n    }) ?? DEFAULT_COUPON_ITEM_ENTRY);\n  }, [query]);\n  return {\n    couponIds: couponItemEntry.couponIds,\n    couponType: couponItemEntry.couponType\n  };\n};\nconst getCouponCollectionCouponItemEntry = ({\n  coupon\n}) => {\n  return {\n    couponIds: coupon ? [coupon.couponId] : [],\n    updateType: CouponUpdateType.NORMAL,\n    couponType: CouponType.NORMAL\n  };\n};\nconst getKeywordCollectionCouponItemEntry = ({\n  couponId\n}) => {\n  return {\n    couponIds: couponId ? [couponId] : [],\n    updateType: CouponUpdateType.NORMAL,\n    couponType: CouponType.NORMAL\n  };\n};\nconst getRandomCouponItemEntry = (query) => {\n  const {\n    couponType,\n    couponIds = \"\"\n  } = query;\n  return {\n    couponIds: shallowUnique(toCouponNos(couponIds)),\n    updateType: CouponUpdateType.NORMAL,\n    couponType\n  };\n};\nconst getNormalCouponItemEntry = (query) => {\n  const {\n    couponType,\n    couponIds = \"\",\n    couponUpdateType\n  } = query;\n  return {\n    couponIds: shallowUnique(toCouponNos(couponIds)),\n    updateType: couponUpdateType,\n    couponType\n  };\n};\nconst getDailyCouponItemEntry = (query) => {\n  const {\n    couponType,\n    dailyCouponOptions = [],\n    couponUpdateType\n  } = query;\n  const schedules = toSchedule(dailyCouponOptions);\n  const currentSchedule = findCurrentSchedule(schedules);\n  return {\n    couponIds: shallowUnique(toCouponNos((currentSchedule == null ? void 0 : currentSchedule.couponIdList) ?? \"\")),\n    updateType: couponUpdateType,\n    couponType,\n    schedules\n  };\n};\nconst getGeneralCouponItemEntry = (query) => {\n  switch (query.couponUpdateType) {\n    case CouponUpdateType.NORMAL:\n      return getNormalCouponItemEntry(query);\n    case CouponUpdateType.DAILY:\n      return getDailyCouponItemEntry(query);\n    default:\n      return null;\n  }\n};\nconst getCouponItemEntryByCouponType = (query) => {\n  switch (query.couponType) {\n    case CouponType.RANDOM:\n      return getRandomCouponItemEntry(query);\n    case CouponType.LIMITED:\n    case CouponType.NORMAL:\n      return getGeneralCouponItemEntry(query);\n    default:\n      return null;\n  }\n};\nconst getCouponItemEntry = ({\n  query\n}) => {\n  if (query === void 0) {\n    return null;\n  }\n  switch (query.type) {\n    case QueryType.CouponCollection:\n      return getCouponCollectionCouponItemEntry(query);\n    case QueryType.KeywordCollection:\n      return getKeywordCollectionCouponItemEntry(query);\n    case QueryType.Coupon:\n      return getCouponItemEntryByCouponType(query);\n    default:\n      return null;\n  }\n};\nexport {\n  useCouponIds\n};\n","import { CouponType } from \"../../../../types/models/coupon.js\";\nimport { QueryType } from \"../../types.js\";\nimport { CouponUpdateType } from \"../CouponModule.types.js\";\nimport { toSchedule } from \"./CouponElement.utils.js\";\nimport { filterMap } from \"../../../../utils/filterMap.js\";\nconst validateCoupon = ({\n  query,\n  enabled\n}) => {\n  if (!enabled) {\n    return {\n      isValid: true\n    };\n  }\n  return validateCouponByQuery(query);\n};\nconst validateDailyUpdateCoupon = (query) => {\n  const schedule = toSchedule(query.dailyCouponOptions ?? []);\n  const isValid = schedule.every(({\n    couponIdList\n  }) => couponIdList !== void 0);\n  const errorMessage = isValid ? void 0 : `[관리자용 메시지] 일자별 쿠폰이 모두 입력되어 있는지 확인해주세요.\n${filterMap(schedule, ({\n    couponIdList\n  }) => couponIdList === void 0, ({\n    shouldUpdateAt\n  }) => {\n    return `[${shouldUpdateAt.toLocaleDateString()}] 쿠폰이 없습니다.`;\n  }).join(\"\\n\")}`;\n  return {\n    isValid,\n    errorMessage\n  };\n};\nconst validateCouponQuery = (query) => {\n  if (query.couponType === CouponType.RANDOM) {\n    return {\n      isValid: true\n    };\n  }\n  switch (query.couponUpdateType) {\n    case CouponUpdateType.DAILY:\n      return validateDailyUpdateCoupon(query);\n    default:\n      return {\n        isValid: true\n      };\n  }\n};\nconst validateCouponByQuery = (query) => {\n  if (query === void 0) {\n    return {\n      isValid: false,\n      errorMessage: \"쿠폰 쿼리가 없습니다.\"\n    };\n  }\n  switch (query.type) {\n    case QueryType.Coupon:\n      return validateCouponQuery(query);\n    default:\n      return {\n        isValid: true\n      };\n  }\n};\nexport {\n  validateCoupon\n};\n","import { jsx, jsxs, Fragment } from \"react/jsx-runtime\";\nimport { useMemo, useRef, useState, useEffect } from \"react\";\nimport { Coupon } from \"../../../@shared/Coupon/index.js\";\nimport { EventTrigger } from \"../../../@shared/EventTrigger/index.js\";\nimport { useSegment } from \"../../../@shared/providers/SegmentProvider/SegmentProvider.js\";\nimport { useRootComponentId, useSetRootModule } from \"../../hooks.js\";\nimport { useQueryStore } from \"../../query-store/query.store.js\";\nimport { QueryType } from \"../../types.js\";\nimport \"../../../systems/curations/IntersectionProvider/IntersectionProvider.js\";\nimport { useIntersectionContext } from \"../../../systems/curations/IntersectionProvider/IntersectionProvider.hooks.js\";\nimport \"../../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport { useCurrentUser } from \"../../../../hooks/useCurrentUser.js\";\nimport { isCanvas } from \"../../../../utils/framer/isCanvas.js\";\nimport \"framer\";\nimport \"../../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../apis/user-segment/CategoryFirstOrderApiService.js\";\nimport \"../../../../config/index.js\";\nimport \"../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../apis/highlight-products/HighlightProductsApiService.js\";\nimport \"../../../../apis/brand-mix/BrandMixApiService.js\";\nimport \"../../../../apis/one-brand-days/OneBrandDaysApiService.js\";\nimport \"../../../../apis/taste-sharing/TasteSharingApiService.js\";\nimport \"../../../../apis/user/UserApiService.js\";\nimport \"../../../../apis/preuser/PreuserApiService.js\";\nimport \"../../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../../hooks/stores/toast/toast.store.js\";\nimport { useTheme } from \"../../../../hooks/useTheme.js\";\nimport { useBreakpoint } from \"../../../../hooks/useBreakpoint.js\";\nimport \"../../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react-dom\";\nimport \"../../../systems/Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../../hooks/useFeatureFlag.js\";\nimport \"../../../../utils/redirectLogin.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { useFetchCouponsDownloadStatus } from \"../../../../hooks/fetchers/useFetchCouponsDownloadStatus.js\";\nimport { useTrackSnowplowEvent } from \"../../../../hooks/snowplow/useTrackSnowplowEvent.js\";\nimport { useDownloadCoupons } from \"../../../../hooks/useDownloadCoupons.js\";\nimport { resolveCouponLayout, DEFAULT_COUPON_MODULE_NAME_VISIBILITY, toBackgroundColor } from \"../../../../libs/property-controls/coupon.js\";\nimport { CouponType } from \"../../../../types/models/coupon.js\";\nimport { hideClosestParentByFramerName } from \"../../../../utils/hideParentElement.js\";\nimport { getPaddingStyle } from \"../../../../utils/spacing.js\";\nimport { useCouponsQuery } from \"../CouponModule.hooks.js\";\nimport { NoticesElement } from \"../NoticesElement/NoticesElement.js\";\nimport { useCouponIds } from \"./CouponElement.hooks.js\";\nimport { getCouponName, getCouponStatus, getCouponFallbackDescription, getDescriptionByStatus } from \"./CouponElement.utils.js\";\nimport { validateCoupon } from \"./CouponElement.validate.js\";\nimport head from \"../../../../node_modules/lodash-es/head.js\";\nconst CouponElement = ({\n  loading = false,\n  query: _query,\n  output,\n  layout\n}) => {\n  const {\n    logged,\n    userNo\n  } = useCurrentUser();\n  const breakpoint = useBreakpoint();\n  const trackSnowplowEvent = useTrackSnowplowEvent();\n  const dispatchSetQuery = useQueryStore((state) => state.dispatchSetQuery);\n  const theme = useTheme();\n  const {\n    isInView\n  } = useIntersectionContext();\n  const query = useMemo(() => attachAdditionalQuery(_query, output), [_query, output]);\n  const {\n    isVisible,\n    loading: isSegmentLoading\n  } = useSegment();\n  const canFetchBySegment = !isSegmentLoading && isVisible;\n  const rootRef = useRef(null);\n  const componentId = useRootComponentId(query);\n  const {\n    couponIds,\n    couponType\n  } = useCouponIds({\n    query\n  });\n  const isFramer = isCanvas();\n  const {\n    isValid,\n    errorMessage\n  } = validateCoupon({\n    query,\n    enabled: isFramer\n  });\n  const {\n    coupons\n  } = useCouponsQuery({\n    query,\n    couponIds,\n    enabled: isInView && canFetchBySegment\n  });\n  const headCoupon = head(coupons);\n  const hasCoupon = headCoupon !== void 0;\n  const isUnlimitedCoupon = (headCoupon == null ? void 0 : headCoupon.personMaxIssueCount) === 0;\n  const [isUnlimitedCouponDownloaded, setIsUnlimitedCouponDownloaded] = useState(false);\n  const [isCouponDownloaded, setIsCouponDownloaded] = useState(false);\n  const isRandomCoupon = (query == null ? void 0 : query.type) === QueryType.Coupon && (query == null ? void 0 : query.couponType) === CouponType.RANDOM;\n  const enabledFetchCouponDownloadStatus = isInView && !isRandomCoupon && canFetchBySegment;\n  const {\n    statuses,\n    isLoading\n  } = useFetchCouponsDownloadStatus(couponIds, userNo, enabledFetchCouponDownloadStatus);\n  const handleCouponDownloadSuccess = () => {\n    if (!headCoupon) {\n      return;\n    }\n    trackSnowplowEvent(\"click_button\", {\n      section_name: componentId,\n      section_title: componentId,\n      position: -1,\n      button_id: \"coupondownload\",\n      coupon_no: headCoupon.id,\n      button_name: headCoupon.couponName,\n      layout_position: -1\n      // TODO(미티켓): filter_gender (F | M) — 브랜드데이 조립형 모듈의 쿼리 설계가 확정되면\n      // 티켓 발행 후 이벤트 적재를 연결합니다. 필터 미사용 시 필드 자체를 보내지 않습니다.\n    });\n    if (isRandomCoupon) {\n      return;\n    }\n    if (isUnlimitedCoupon) {\n      setIsUnlimitedCouponDownloaded(true);\n      return;\n    }\n    setIsCouponDownloaded(true);\n  };\n  const {\n    validate,\n    download\n  } = useDownloadCoupons(couponType, headCoupon == null ? void 0 : headCoupon.discountType, handleCouponDownloadSuccess);\n  const shouldRender = query && hasCoupon && (!loading || !isLoading || !logged);\n  const paddingStyle = getPaddingStyle(layout);\n  useEffect(() => {\n    window == null ? void 0 : window.dispatchEvent(new CustomEvent(\"layout-done\"));\n    if (!query) {\n      return;\n    }\n    if (!output) {\n      return;\n    }\n    dispatchSetQuery(output, query);\n  }, [output, query]);\n  useSetRootModule(query, output);\n  const shouldRenderError = !isValid && isFramer;\n  useEffect(() => {\n    if (rootRef.current) {\n      hideClosestParentByFramerName(rootRef.current, \"카테고리첫구매쿠폰\", isVisible);\n    }\n  }, [isVisible]);\n  useEffect(() => {\n    setIsUnlimitedCouponDownloaded(false);\n  }, [headCoupon == null ? void 0 : headCoupon.id]);\n  const resolvedCouponLayout = resolveCouponLayout(layout.couponLayout, breakpoint);\n  if (!isVisible) {\n    window == null ? void 0 : window.dispatchEvent(new CustomEvent(\"layout-done\"));\n    return /* @__PURE__ */ jsx(\"div\", { ref: rootRef });\n  }\n  if (!shouldRender) {\n    return /* @__PURE__ */ jsxs(Fragment, { children: [\n      /* @__PURE__ */ jsx(Coupon.Root, { ref: rootRef, style: {\n        padding: paddingStyle\n      }, loading: true, theme, layout: resolvedCouponLayout }),\n      shouldRenderError ? /* @__PURE__ */ jsx(\"div\", { style: errorMessageStyle, children: errorMessage ?? \"쿠폰 상태가 올바르지 않습니다.\" }) : null\n    ] });\n  }\n  const couponDownloadItems = coupons.map((coupon) => ({\n    couponId: coupon.id,\n    quantity: Math.max(coupon.personMaxIssueCount ?? 1, 1)\n  }));\n  const handleClick = () => {\n    if (!validate()) {\n      return;\n    }\n    download(couponDownloadItems, true);\n  };\n  const handleImpression = () => {\n    trackSnowplowEvent(\"impression_content\", {\n      section_name: componentId,\n      section_title: componentId,\n      position: -1,\n      layout_position: -1,\n      layout_id: `coupondown_${headCoupon.id}`\n    });\n  };\n  const couponName = getCouponName(coupons, query, layout.couponNameVisibility ?? DEFAULT_COUPON_MODULE_NAME_VISIBILITY);\n  const status = getCouponStatus(headCoupon, logged, query, statuses);\n  const resolvedStatus = isCouponDownloaded ? \"downloaded\" : isUnlimitedCoupon && isUnlimitedCouponDownloaded ? \"redownloadable\" : status;\n  const description = isRandomCoupon ? getCouponFallbackDescription(coupons) : getDescriptionByStatus(headCoupon)[resolvedStatus];\n  const {\n    backgroundColor,\n    ...rest\n  } = layout;\n  return /* @__PURE__ */ jsxs(EventTrigger.Root, { ref: rootRef, style: {\n    padding: paddingStyle\n  }, types: [\"impression\"], onImpression: handleImpression, children: [\n    /* @__PURE__ */ jsxs(Coupon.Root, { theme, backgroundColor: toBackgroundColor(backgroundColor), status: resolvedStatus, layout: resolvedCouponLayout, children: [\n      /* @__PURE__ */ jsxs(Coupon.Summary, { children: [\n        /* @__PURE__ */ jsx(Coupon.Title, { children: couponName }),\n        /* @__PURE__ */ jsx(Coupon.Description, { children: description })\n      ] }),\n      /* @__PURE__ */ jsx(Coupon.Divider, {}),\n      /* @__PURE__ */ jsx(EventTrigger.Target, { style: {\n        aspectRatio: resolvedCouponLayout === \"detail\" ? \"1 / 1\" : void 0\n      }, children: /* @__PURE__ */ jsx(Coupon.Button, { onClick: handleClick }) })\n    ] }),\n    /* @__PURE__ */ jsx(NoticesElement, { couponType, coupons, ...rest }),\n    shouldRenderError ? /* @__PURE__ */ jsx(\"div\", { style: errorMessageStyle, children: errorMessage ?? \"쿠폰 상태가 올바르지 않습니다.\" }) : null\n  ] });\n};\nconst errorMessageStyle = {\n  background: \"white\",\n  border: \"0.7px solid #00000066\",\n  borderRadius: \"2px\",\n  padding: \"8px\",\n  whiteSpace: \"pre-line\"\n};\nconst attachAdditionalQuery = (query, output) => {\n  return query ? {\n    ...query,\n    isRoot: query.rootOutput === void 0,\n    rootOutput: query.rootOutput || output\n  } : void 0;\n};\nexport {\n  CouponElement\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { useQueryStore } from \"../../query-store/query.store.js\";\nimport { CouponElement } from \"../CouponElement/CouponElement.js\";\nimport { createKey } from \"../../utils/key.js\";\nconst LinkedCouponModule = ({\n  value,\n  output,\n  layout\n}) => {\n  const query = useQueryStore((state) => state.queries[value]);\n  return /* @__PURE__ */ jsx(CouponElement, { query, output, layout }, createKey(query));\n};\nexport {\n  LinkedCouponModule\n};\n","import { combineObjectPropertyControls } from \"../../../libs/property-controls/helpers.js\";\nimport { QUERY_CONTROL, COUPON_CONTROLS, KEYWORD_COLLECTIONS_CONTROLS, KEYWORD_COLLECTION_CONTROLS } from \"../controls.js\";\nconst MANUAL_COUPON_MODULE_QUERY = {\n  ...QUERY_CONTROL,\n  controls: combineObjectPropertyControls(COUPON_CONTROLS)\n};\nconst AUTO_COUPON_MODULE_QUERY = {\n  ...QUERY_CONTROL,\n  controls: combineObjectPropertyControls(KEYWORD_COLLECTION_CONTROLS, KEYWORD_COLLECTIONS_CONTROLS)\n};\nexport {\n  AUTO_COUPON_MODULE_QUERY,\n  MANUAL_COUPON_MODULE_QUERY\n};\n","import { APIService } from \"../APIService.js\";\nimport { throwFailError } from \"../@middlewares/throwFailError.js\";\nimport { environments, env } from \"../../config/index.js\";\nconst DEFAULT_COLLECTION_PRODUCTS_SIZE = 20;\nclass CollectionApiService extends APIService {\n  constructor() {\n    super();\n    this.setMiddleware(throwFailError);\n  }\n  async getCollection(collectionId, needShuffle, isDevMode) {\n    const baseUrl = isDevMode ? environments.development.api.content : env.api.content;\n    return this.get(`${baseUrl}/api/v4/framers/collections/${collectionId}/product-group-preview?productShuffleEnabled=${String(needShuffle)}`);\n  }\n  async getCollections(collectionIds) {\n    return this.get(`${env.api.content}/api/v4/framers/proxy/content-api/api/v4/collections`, {\n      collectionIds: collectionIds.join(\",\")\n    });\n  }\n  async getCollectionProducts({\n    collectionId,\n    productGroupId,\n    sort,\n    isDevMode\n  }) {\n    const baseUrl = isDevMode ? environments.development.api.content : env.api.content;\n    return this.get(`${baseUrl}/api/v4/framers/proxy/content-api/api/v5/keyword-collections/${collectionId}/product-groups/${productGroupId}/products`, {\n      sort,\n      page: 0,\n      size: DEFAULT_COLLECTION_PRODUCTS_SIZE\n    }).then((data) => formatProducts(data.data.resultList));\n  }\n}\nconst formatProducts = (products) => products.map((product) => {\n  var _a;\n  return {\n    frontBrand: {\n      frontBrandId: product.frontBrand.id,\n      nameKor: product.frontBrand.nameKor,\n      nameEng: product.frontBrand.nameEng\n    },\n    productId: product.productId,\n    productName: product.productName,\n    subjectDescriptions: product.subjectDescriptions,\n    imageUrl: product.imageUrl,\n    consumerPrice: product.consumerPrice,\n    lastSalePrice: product.lastSalePrice,\n    lastSalePercent: product.lastSalePercent,\n    heartCount: product.heartCount,\n    heartOn: product.heartOn,\n    reviewCount: product.reviewCount,\n    reviewAveragePoint: product.reviewAveragePoint,\n    isCoupon: product.saleInfo.coupon,\n    isFreeShipping: product.freeShipping,\n    isNew: product.newProperty,\n    isSoldOut: product.soldOut,\n    frontCategories: (_a = product.frontCategories) == null ? void 0 : _a.map((category) => ({\n      largeCategoryCode: category.largeCode ?? 0,\n      largeCategoryName: category.largeName ?? \"\",\n      mediumCategoryCode: category.mediumCode ?? 0,\n      mediumCategoryName: category.mediumName ?? \"\",\n      smallCategoryCode: category.smallCode ?? 0,\n      smallCategoryName: category.smallName ?? \"\"\n    }))\n  };\n});\nconst collectionApi = new CollectionApiService();\nexport {\n  collectionApi\n};\n","import useSWR from \"../../../../node_modules/swr/core/dist/index.js\";\nimport { collectionApi } from \"../../../../apis/collection/CollectionApiService.js\";\nimport { keywordCollectionApi } from \"../../../../apis/keyword-collections/KeywordCollectionApiService.js\";\nimport { QueryType } from \"../../types.js\";\nimport { orderByDateAsc, getCurrentScheduleIndex } from \"../../../../utils/date.js\";\nimport { splitToNumberArray } from \"../../../../utils/splitToNumberArray.js\";\nconst COUPON_ID_FETCHER_KEY = \"coupon-module/coupon-id\";\nconst useCouponIdQuery = (options) => {\n  const {\n    enabled: _enabled = true,\n    query\n  } = options;\n  const enabled = _enabled && query !== void 0;\n  const {\n    data,\n    isLoading,\n    ...rest\n  } = useSWR(enabled ? [COUPON_ID_FETCHER_KEY, query] : null, () => queryCouponId(query));\n  return {\n    isLoading: isLoading || !enabled,\n    query: data,\n    ...rest\n  };\n};\nconst fetchKeywordCollectionCouponId = async (query) => {\n  if (!query.keywordCollectionId) {\n    return query;\n  }\n  const {\n    data\n  } = await keywordCollectionApi.getKeywordCollection(Number(query.keywordCollectionId));\n  const {\n    title,\n    description,\n    displayEndAt,\n    productGroups,\n    couponId\n  } = data;\n  const [firstProductGroup] = productGroups;\n  return {\n    ...query,\n    title,\n    description: description ?? void 0,\n    displayEndAt: displayEndAt ?? void 0,\n    couponId: couponId ?? void 0,\n    productGroups,\n    selectedProductGroup: {\n      id: firstProductGroup.productGroupId,\n      sort: firstProductGroup.sort,\n      index: 0\n    }\n  };\n};\nconst fetchKeywordCollectionsCouponId = async (query) => {\n  if (!query.keywordCollectionIds) {\n    return query;\n  }\n  const {\n    data\n  } = await collectionApi.getCollections(splitToNumberArray(query.keywordCollectionIds));\n  const collections = orderByDateAsc(data, (x) => x.displayStartAt);\n  const currentIndex = getCurrentScheduleIndex(collections, (current) => current.displayStartAt, (_, next) => next == null ? void 0 : next.displayStartAt);\n  const collection = collections[currentIndex ?? 0];\n  if (!collection) {\n    return query;\n  }\n  const {\n    collectionId,\n    title,\n    description,\n    displayEndAt,\n    productGroupList,\n    couponId\n  } = collection;\n  const [firstProductGroup] = productGroupList;\n  return {\n    type: QueryType.KeywordCollection,\n    keywordCollectionId: `${collectionId}`,\n    title,\n    description: description ?? void 0,\n    displayEndAt: displayEndAt ?? void 0,\n    couponId: couponId ?? void 0,\n    productGroups: productGroupList.map((group) => ({\n      productGroupId: group.collectionProductGroupId,\n      title: group.title,\n      sort: group.sort\n    })),\n    selectedProductGroup: {\n      id: firstProductGroup.collectionProductGroupId,\n      sort: firstProductGroup.sort,\n      index: 0\n    }\n  };\n};\nconst queryCouponId = (query) => {\n  if (!query) {\n    return;\n  }\n  switch (query.type) {\n    case QueryType.KeywordCollection:\n      return fetchKeywordCollectionCouponId(query);\n    case QueryType.KeywordCollections:\n      return fetchKeywordCollectionsCouponId(query);\n    default:\n      return query;\n  }\n};\nexport {\n  useCouponIdQuery\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { useSegment } from \"../../../@shared/providers/SegmentProvider/SegmentProvider.js\";\nimport \"../../../systems/curations/IntersectionProvider/IntersectionProvider.js\";\nimport { useIntersectionContext } from \"../../../systems/curations/IntersectionProvider/IntersectionProvider.hooks.js\";\nimport { useCouponIdQuery } from \"./AutoCouponModule.hooks.js\";\nimport { CouponElement } from \"../CouponElement/CouponElement.js\";\nconst AutoCouponModule = ({\n  query: _query,\n  output,\n  layout\n}) => {\n  const {\n    isInView\n  } = useIntersectionContext();\n  const {\n    isVisible,\n    loading: isSegmentLoading\n  } = useSegment();\n  const canFetchBySegment = !isSegmentLoading && isVisible;\n  const {\n    isLoading,\n    query\n  } = useCouponIdQuery({\n    query: _query,\n    enabled: isInView && canFetchBySegment\n  });\n  return /* @__PURE__ */ jsx(CouponElement, { loading: isLoading, query, output, layout });\n};\nexport {\n  AutoCouponModule\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { addPropertyControls, ControlType } from \"framer\";\nimport { COUPON_CONTROLS, COUPON_MODULE_NAME_VISIBILITY_CONTROLS } from \"../../../libs/property-controls/coupon.js\";\nimport { THEME_CONTROLS } from \"../../../libs/property-controls/theme.js\";\nimport { SEGMENT_CONTROLS } from \"../../../libs/property-controls/segment.js\";\nimport { CouponModuleInputType } from \"./CouponModule.types.js\";\nimport { LinkedCouponModule } from \"./LinkedCouponModule/LinkedCouponModule.js\";\nimport { COUPON_NOTICES_CONTROLS } from \"../../../libs/property-controls/coupon-notices.js\";\nimport { COMPONENT_ID_PROPS } from \"../../../libs/property-controls/component-id.js\";\nimport { SectionLayout } from \"../../systems/curations/SectionLayout/SectionLayout.js\";\nimport { MANUAL_COUPON_MODULE_QUERY, AUTO_COUPON_MODULE_QUERY } from \"./CouponModule.controls.js\";\nimport { AutoCouponModule } from \"./AutoCouponModule/AutoCouponModule.js\";\nimport { CouponElement } from \"./CouponElement/CouponElement.js\";\nconst CouponModuleInner = ({\n  input,\n  output,\n  layout\n}) => {\n  switch (input.type) {\n    case CouponModuleInputType.Linked:\n      return /* @__PURE__ */ jsx(LinkedCouponModule, { value: input.value, output, layout });\n    case CouponModuleInputType.Auto:\n      return /* @__PURE__ */ jsx(AutoCouponModule, { query: input.autoQuery, output, layout });\n    case CouponModuleInputType.Manual:\n      return /* @__PURE__ */ jsx(CouponElement, { query: input.query, output, layout });\n    default:\n      return null;\n  }\n};\nconst CouponModule = ({\n  theme,\n  componentId,\n  segment,\n  ...rest\n}) => {\n  return /* @__PURE__ */ jsx(SectionLayout, { componentId, theme, segment, children: /* @__PURE__ */ jsx(CouponModuleInner, { ...rest }) });\n};\naddPropertyControls(CouponModule, {\n  ...THEME_CONTROLS,\n  ...SEGMENT_CONTROLS,\n  componentId: {\n    hidden: ({\n      input\n    }) => (input == null ? void 0 : input.type) === CouponModuleInputType.Linked,\n    ...COMPONENT_ID_PROPS.componentId\n  },\n  input: {\n    type: ControlType.Object,\n    title: \"입력 값\",\n    controls: {\n      type: {\n        type: ControlType.Enum,\n        title: \"유형\",\n        options: [CouponModuleInputType.Manual, CouponModuleInputType.Linked, CouponModuleInputType.Auto],\n        optionTitles: [\"수동\", \"연결\", \"자동\"],\n        defaultValue: CouponModuleInputType.Manual\n      },\n      value: {\n        hidden: ({\n          type\n        }) => type !== CouponModuleInputType.Linked,\n        type: ControlType.String,\n        title: \"출력 값\",\n        defaultValue: \"\"\n      },\n      query: {\n        hidden: ({\n          type\n        }) => type !== CouponModuleInputType.Manual,\n        ...MANUAL_COUPON_MODULE_QUERY\n      },\n      autoQuery: {\n        hidden: ({\n          type\n        }) => type !== CouponModuleInputType.Auto,\n        ...AUTO_COUPON_MODULE_QUERY\n      }\n    }\n  },\n  output: {\n    type: ControlType.String,\n    title: \"출력 값\",\n    defaultValue: \"\"\n  },\n  layout: {\n    type: ControlType.Object,\n    title: \"레이아웃\",\n    controls: {\n      ...COUPON_CONTROLS,\n      ...COUPON_MODULE_NAME_VISIBILITY_CONTROLS,\n      ...COUPON_NOTICES_CONTROLS,\n      padding: {\n        type: ControlType.FusedNumber,\n        title: \"패딩\",\n        defaultValue: 0,\n        toggleKey: \"isMixed\",\n        toggleTitles: [\"All\", \"Individual\"],\n        valueKeys: [\"paddingTop\", \"paddingRight\", \"paddingBottom\", \"paddingLeft\"],\n        valueLabels: [\"T\", \"R\", \"B\", \"L\"],\n        min: 0\n      }\n    }\n  }\n});\nexport {\n  CouponModule\n};\n","import{CouponModule}from\"https://asset.29cm.co.kr/contents/framer/components/modules/CouponModule/CouponModule.js\";CouponModule.displayName=\"[조립형]Coupon\";export default CouponModule;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CouponModule\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CouponModule.map"],"x_google_ignoreList":[31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,94,109,118,150,151,152,153,154,155],"mappings":"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L,IAAK,CACH,QAEA,WAAY,CACV,GAAG,EACH,KAAM,CACR,CACF,CACF,CACF,4BCzgB0F,KAChD,KACsC,KACsC,IACxG,IACiE,IACX,KACA,IACrD,IAC2D,IAClB,IACc,IAClC,IACyB,IAC0B,IACZ,IAClB,IACS,IACD,IACjB,IACM,IACM,IACF,IACF,IACc,IAChB,KACY,KACU,IACR,IAC1C,IACR,IACmC,IAC/B,IACoD,IAC9B,KACD,IACU,KAC6B,KACzB,KACK,KACyC,KAClB,EAC/E,OAAoB,CACxB,IAAM,EAAOC,GAAe,EACtB,CACJ,YACE,GAAuB,EACrB,CACJ,QACA,QACE,GAA0B,EACxB,CACJ,aACE,GAAW,EACT,EAAY,GAA+B,OAAU,EAAU,OAC/D,EAAgB,CACpB,QACA,OACA,YAAa,EACb,QAAS,GAAY,GAAY,CACnC,EACM,EAAkB,CACtB,QACA,OACA,YAAa,EACb,QAAS,CAAC,GAAY,GAAY,CACpC,EACM,EAAe,GAAuB,CAAa,EACnD,EAAiB,GAAiB,CAAe,EACvD,OAAO,EAAW,EAAe,CACnC,EACM,GAA6B,GAAU,CAC3C,GAAkB,GAAc,CAAK,CAAC,CACxC,EACM,GAAiB,GAAU,CAC/B,GAAI,CAAC,EACH,MAAO,GAET,OAAQ,EAAM,KAAd,CACE,KAAK,EAAU,QACb,OAAO,EAAM,WACf,QACE,MAAO,EACX,CACF,wBCpFuC,KACoC,KACf,IAC9C,IACuE,IACX,IACZ,IACc,IAClC,IACyB,IAC0B,IACZ,IAClB,IACS,IACD,IACjB,IACM,IAC7C,IACiE,IACd,IACF,IACF,IACc,IAChB,KACE,KACoB,IACR,IACxD,IACyC,IACrC,IAC0D,IAC9B,KACD,IACU,EACrD,IAAuB,CAC3B,aACA,QACA,GAAG,KACC,CACJ,IAAM,EAAQ,GAAS,EACjB,CACJ,OACA,gBACA,WACE,GAAY,EACV,CACJ,SACA,OACE,EACE,EAAO,EAAO,MAAM,EAAO,GAIjC,OAHI,IAAS,IAAK,IAAK,CAAC,EACf,KAEc,EAAI,MAAO,CAAE,GAAG,EAAM,MAAO,CAClD,GAAGC,GACH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"}