{"version":3,"file":"TagsModule.DqOLFV24.mjs","names":["createContext","Root","forwardRef","useRef","useState","containerStyle","useContext","List","forwardRef","useState","containerStyle","Panel","forwardRef","containerStyle","createContext","forwardRef","useContext","Fragment","useState","forwardRef","C","useCallback","useMemo","p","forwardRef","forwardRef","forwardRef","Fragment","useMemo","useRef","useMemo","__esmMin","ne","init_npm_react_18_3_1","x","oe","pe","le","de","window","init_ssg_sandbox_shims","J","init_jsx_runtime","init_npm_react_dom_18_3_1","ce","_e","useTransform","motion","useMotionValueEvent","useMotionTemplate","useMotionValue","clamp","animate","init_framer_motion_DhsWWWsN","init_framer_B6PCHH0A","withCSS","ControlType","addPropertyControls","init_component_id","COMPONENT_ID_PROPS","init_TasteSharingApiService","init_createUTCDate","mergeRefs","init_useCurrentUser","init_index_esm","toDate","init_redirectLogin","init_addDays","init_shallow","addMonths","useCurrentUser","init_index_esm2017","init_splitToNumberArray","init_UserApiService","init_Dialog_module_css","init_function","init_parseISO","init_useFeatureFlag","init_dist$1","splitToNumberArray","init_BreakpointProvider","init_PreuserApiService","init_content_store","playHaptic","init_addMonths","init_source","shallow$1","addDays","init_bottom_sheet_store","isFunction","init_dialog_store","APIService","init_dist","buildFormatLongFn","init_tailwind_variants","init_js_cookie","format","init_OneBrandDaysApiService","p$1","constructFrom","env","throwFailError","init_throwFailError","buildMatchFn","init_CategoryFirstOrderApiService","init_snowplow","m","init_config","init_toast_store","buildMatchPatternFn","init_HighlightProductsApiService","init_dist$2","buildLocalizeFn","init_APIService","init_jsx_runtime$1","environments","parseISO","init_DialogContainer_emitter","init_global_layout_store","init_ThemeProvider","init_format","init_BrandMixApiService","g","addLeadingZeros","Skeleton","init_playHaptic","useSWR","init_Skeleton","createKRTimeZoneDate","useSegment","RankingType","useTrackClickButtonEvent","init_breakpoint$1","init_SectionLayout","SectionLayout","init_BestApiService","init_useBreakpoint","useTheme","getPadding","useQueryStore","useBreakpoint","init_spacing","init_KeywordCollectionApiService","keywordCollectionApi","CategoryType","bestApi","init_SegmentProvider","init_hooks","BREAKPOINT_CONTROLS","init_SWRErrorBoundary","Breakpoint","init_useTheme","init_breakpoint","useIntersectionContext","init_IntersectionProvider_hooks","init_IntersectionProvider","init_controls","SEGMENT_CONTROLS","THEME_CONTROLS","init_key","KEYWORD_COLLECTIONS_CONTROLS","KEYWORD_COLLECTION_CONTROLS","RECOMMENDATION_CONTROLS","RANKING_CONTROLS","init_types","QueryType","BRAND_CURATION_CONTROLS","QUERY_CONTROL","init_segment","PRODUCT_CONTROLS","init_query_store","createKey","COUPON_COLLECTION_CONTROLS","combineObjectPropertyControls","SWRErrorBoundary","init_theme","init_helpers","useSetRootModule","init_EventTrigger","EventTrigger","orderByDateAsc","isAbove","getCurrentScheduleIndex","init_isWithinInterval","init_date","isWithinInterval","TagsModuleInputType","init_TagsModule_types","\"Linked\"","\"Manual\"","\"Auto\"","TagsModuleInputType2","closest","init_closest","array","curr","target","prev","getRestScrollWidth","init_getRestScrollWidth","element","scrollWidth","offsetWidth","DraggableTabsContext","Root$1","containerStyle$3","init_Root","B","rest","refs","listRef","firstValue","currentValue","setCurrentValue","defaultValue","value","listX","focusTo","item","incoming","threshold","finalX","dragPaddingLeft","smooth","move","onValueChange","next","context","style","useDraggableTabsContext","init_Root_hooks","COMPONENT_NAME","INITIAL_DAMPING","css","List$1","containerStyle$2","listStyle","init_List","constraints","setConstraints","updateConstraints","newLeft","getChildrenPositions","handleDragEnd","destinationX","velocity","damping","closestX","container","resizeObserver","ref","dragPaddingRight","Panel$1","init_Panel","children","Trigger","containerStyle$1","init_Trigger","isCurrent","register","handleClick","onClick","DraggableTabs","init_DraggableTabs","TagsContext","Root","sidePaddingByBreakpoint","init_Root$1","breakpoint","sidePadding","useTagsContext","init_Root_hooks$1","LIST_GAP","SKELETONS_PER_PENDING","FADE_WIDTH","List","useListOverflowed","useListXProgress","Default","containerStyle","init_List$1","pending","loading","list","overflowed","xProgress","fadeWidth","maskImage","index","setOverflowed","enabled","latest","a","s","init_Tag_styles","C$1","init_useTag","e","c","k","C","P","init_ToggleTag","s2","t","o","r","m$1","f","i","n","g2","j","d","p","TagSkeleton","baseStyleByTheme","init_TagSkeleton","theme","Item","init_Item","Panels","init_Panels","Panel","init_Panel$1","Tags","init_Tags","TagsElement","attachAdditionalQuery","init_TagsElement","_inputs","dispatchSetQuery","state","inputs","output","currentInput","currentIndex","trackClickButtonEvent","handleValueChange","input","padding","layout","isVisible","values","BrandCurationApiService","brandCurationApi","init_BrandCurationApiService","BrandSaleApiService","brandSaleApi","init_BrandSaleApiService","brandSaleGroupId","brandSaleId","brandSaleCouponId","DEFAULT_COLLECTION_PRODUCTS_SIZE","CollectionApiService","formatProducts","collectionApi","init_CollectionApiService","baseUrl","isDevMode","collectionId","needShuffle","collectionIds","productGroupId","data","products","product","category","formatDistanceLocale","formatDistance","init_formatDistance","result","tokenValue","token","count","options","formatLong","init_formatLong","formatRelativeLocale","formatRelative","init_formatRelative","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","localize","init_localize","number","dirtyNumber","quarter","match","init_match","ko","init_ko","formatSchedule","init_TimeSaleCollectionTags_utils","schedule","str","CATEGORY_MIN_PRODUCT_COUNT","mergeByLargeCategories","concatMiddleCategories","filterByOverMinProductCount","orderByGender","getOppositeGender","isGenderCategoryMatches","isGenderProductGroupMatches","reshapeCategoryFacetValues","init_facet","map","excludeCategories","excludeMiddleCategoryIds","categories","oppositeGender","gender","matcher","y","categoryType","SEPARATOR","reservedWords","getProductGroupType","init_KeywordCollectionTags_utils","includedReservedWordProductGroup","productGroupList","group","firstReservedWord","subDays","date","amount","init_subDays","subMonths","init_subMonths","sub","duration","dateWithoutDays","months","years","days","weeks","mstoSub","seconds","minutes","hours","init_sub","formatISO","_date","representation","tzOffset","dateDelimiter","timeDelimiter","day","month","offset","absoluteOffset","hourOffset","minuteOffset","hour","minute","second","separator","time","init_formatISO","DATE_PREFIX","removeDatePrefix","reshapeProductGroups","init_TimeSaleCollection_utils","nextGroup","startAt","endAt","displayEndAt","getCurrentBrandSaleIndex","getCalendarTagName","init_CalendarTags_utils","now","brandSaleList","hasNext","start","brandSale","end","isWithin","isLast","displayStartAt","GENDER_PREFIX","GENDER_SEPARATOR","reshapeProductGroupsByGender","getKeywordCollectionTagsResult","getCouponCollectionTagsResult","init_TagsModule_utils","groups","title","query","type","productGroups","userSegment","brandSales","TAGS_FETCHER_KEY","useTagsQuery","fetchKeywordCollectionTags","fetchKeywordCollectionsTags","fetchBrandCurationTags","fetchRankingTags","fetchCouponCollectionTags","queryTags","init_TagsModule_hooks","_enabled","hasTags","isLoading","description","collections","current","collection","firstProductGroup","couponId","brandGroupIds","brand","tagIds","categoryProperties","allCategory","AutoTagsModule","init_AutoTagsModule","user","isInView","tags","useReportOutputFailure","OutputFailure","init_OutputFailure","dispatchSetFailure","retryRef","onRetry","hasRetry","AUTO_TAGS_MODULE_QUERY","MANUAL_TAGS_MODULE_QUERY","init_TagsModule_controls","getKeywordCollectionTags","getCouponCollectionTags","getRankingTags","getTags","init_LinkedTagsModule_utils","childCategories","LinkedTagsModule","init_LinkedTagsModule","upstreamRetry","TagsModuleInner","TagsModule","init_TagsModule","retry","TagsModule_default","init_TagsModule$1"],"sources":["https:/asset.29cm.co.kr/contents/framer/components/modules/TagsModule/TagsModule.types.js","https:/asset.29cm.co.kr/contents/framer/utils/closest.js","https:/asset.29cm.co.kr/contents/framer/utils/getRestScrollWidth.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/DraggableTabs/Root.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/DraggableTabs/Root.hooks.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/DraggableTabs/List.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/DraggableTabs/Panel.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/DraggableTabs/Trigger.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/DraggableTabs/index.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Tags/Root.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Tags/Root.hooks.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Tags/List.js","https:/asset.29cm.co.kr/contents/framer/node_modules/@29cm/ruler-ui/dist/components/Tag/Tag.styles.js","https:/asset.29cm.co.kr/contents/framer/node_modules/@29cm/ruler-ui/dist/components/Tag/useTag.js","https:/asset.29cm.co.kr/contents/framer/node_modules/@29cm/ruler-ui/dist/components/Tag/ToggleTag/ToggleTag.js","https:/asset.29cm.co.kr/contents/framer/components/@shared/TagSkeleton/TagSkeleton.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Tags/Item.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Tags/Panels.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Tags/Panel.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/Tags/index.js","https:/asset.29cm.co.kr/contents/framer/components/modules/TagsModule/TagsElement/TagsElement.js","https:/asset.29cm.co.kr/contents/framer/apis/brand-curation/BrandCurationApiService.js","https:/asset.29cm.co.kr/contents/framer/apis/brand-sale/BrandSaleApiService.js","https:/asset.29cm.co.kr/contents/framer/apis/collection/CollectionApiService.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/systems/curations/KeywordCollectionV2/TimeSaleCollectionTags/TimeSaleCollectionTags.utils.js","https:/asset.29cm.co.kr/contents/framer/components/modules/utils/facet.js","https:/asset.29cm.co.kr/contents/framer/components/systems/KeywordCollection/KeywordCollectionTags/KeywordCollectionTags.utils.js","https:/asset.29cm.co.kr/contents/framer/node_modules/date-fns/subDays.js","https:/asset.29cm.co.kr/contents/framer/node_modules/date-fns/subMonths.js","https:/asset.29cm.co.kr/contents/framer/node_modules/date-fns/sub.js","https:/asset.29cm.co.kr/contents/framer/node_modules/date-fns/formatISO.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/KeywordCollectionV2/TimeSaleCollection.utils.js","https:/asset.29cm.co.kr/contents/framer/components/systems/curations/CouponCollection/CalendarTags/CalendarTags.utils.js","https:/asset.29cm.co.kr/contents/framer/components/modules/TagsModule/TagsModule.utils.js","https:/asset.29cm.co.kr/contents/framer/components/modules/TagsModule/TagsModule.hooks.js","https:/asset.29cm.co.kr/contents/framer/components/modules/TagsModule/AutoTagsModule/AutoTagsModule.js","https:/asset.29cm.co.kr/contents/framer/components/modules/query-store/OutputFailure.js","https:/asset.29cm.co.kr/contents/framer/components/modules/TagsModule/TagsModule.controls.js","https:/asset.29cm.co.kr/contents/framer/components/modules/TagsModule/LinkedTagsModule/LinkedTagsModule.utils.js","https:/asset.29cm.co.kr/contents/framer/components/modules/TagsModule/LinkedTagsModule/LinkedTagsModule.js","https:/asset.29cm.co.kr/contents/framer/components/modules/TagsModule/TagsModule.js","https:/framerusercontent.com/modules/LcoSbbUQzAWYrkTx3Hyi/yfr8qKY2xRRK7cInEyBA/TagsModule.js"],"sourcesContent":["var TagsModuleInputType = /* @__PURE__ */ ((TagsModuleInputType2) => {\n  TagsModuleInputType2[TagsModuleInputType2[\"Linked\"] = 0] = \"Linked\";\n  TagsModuleInputType2[TagsModuleInputType2[\"Manual\"] = 1] = \"Manual\";\n  TagsModuleInputType2[TagsModuleInputType2[\"Auto\"] = 2] = \"Auto\";\n  return TagsModuleInputType2;\n})(TagsModuleInputType || {});\nexport {\n  TagsModuleInputType\n};\n","const closest = (array, target) => {\n  return array.reduce((prev, curr) => Math.abs(curr - target) < Math.abs(prev - target) ? curr : prev, 0);\n};\nexport {\n  closest\n};\n","const getRestScrollWidth = (element) => {\n  const {\n    scrollWidth = 0,\n    offsetWidth = 0\n  } = element ?? {};\n  return scrollWidth - offsetWidth;\n};\nexport {\n  getRestScrollWidth\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { useMotionValue, clamp, animate } from \"framer-motion\";\nimport { createContext, forwardRef, useRef, useState, useLayoutEffect, useEffect } from \"react\";\nimport { getRestScrollWidth } from \"../../../utils/getRestScrollWidth.js\";\nconst DraggableTabsContext = createContext(null);\nconst Root = forwardRef(({\n  children,\n  style,\n  defaultValue,\n  value,\n  dragPaddingLeft = 0,\n  dragPaddingRight = 0,\n  onValueChange,\n  ...rest\n}, ref) => {\n  const refs = useRef(/* @__PURE__ */ new Map());\n  const listRef = useRef(null);\n  const [firstValue] = refs.current.keys();\n  const [currentValue, setCurrentValue] = useState(defaultValue ?? value ?? firstValue);\n  const listX = useMotionValue(0);\n  const focusTo = (incoming, smooth = true) => {\n    const item = refs.current.get(incoming);\n    if (item === void 0) {\n      return;\n    }\n    const threshold = getRestScrollWidth(listRef.current);\n    const finalX = -clamp(0, threshold, item.offsetLeft - dragPaddingLeft);\n    if (smooth) {\n      animate(listX, finalX, {\n        type: \"spring\",\n        stiffness: 400,\n        damping: 50\n      });\n    } else {\n      listX.set(finalX);\n    }\n  };\n  const move = (next) => {\n    onValueChange == null ? void 0 : onValueChange(next);\n    setCurrentValue(next);\n    focusTo(next);\n  };\n  useLayoutEffect(() => {\n    if (defaultValue) {\n      focusTo(defaultValue, false);\n    }\n  }, []);\n  useEffect(() => {\n    if (value) {\n      move(value);\n    }\n  }, [value]);\n  const context = {\n    refs,\n    listRef,\n    currentValue,\n    listX,\n    dragPaddingLeft,\n    dragPaddingRight,\n    move\n  };\n  return /* @__PURE__ */ jsx(DraggableTabsContext.Provider, { value: context, children: /* @__PURE__ */ jsx(\"div\", { ref, ...rest, style: {\n    ...style,\n    ...containerStyle\n  }, children }) });\n});\nconst containerStyle = {\n  display: \"flex\",\n  flexDirection: \"column\"\n};\nexport {\n  DraggableTabsContext,\n  Root\n};\n","import { useContext } from \"react\";\nimport { DraggableTabsContext } from \"./Root.js\";\nconst useDraggableTabsContext = () => {\n  const context = useContext(DraggableTabsContext);\n  if (!context) {\n    throw new Error(\"useDraggableTabsContext should be used within Root\");\n  }\n  return context;\n};\nexport {\n  useDraggableTabsContext\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { forwardRef, useState, useLayoutEffect, useEffect } from \"react\";\nimport { withCSS } from \"framer\";\nimport { motion, clamp, animate } from \"framer-motion\";\nimport { closest } from \"../../../utils/closest.js\";\nimport { getRestScrollWidth } from \"../../../utils/getRestScrollWidth.js\";\nimport { mergeRefs } from \"../../../utils/react/mergeRefs.js\";\nimport { useDraggableTabsContext } from \"./Root.hooks.js\";\nconst COMPONENT_NAME = \"tabs-list\";\nconst INITIAL_DAMPING = 0.4;\nconst css = [`\n    .${COMPONENT_NAME}-container::-webkit-scrollbar {\n      display: none;\n    }\n  `];\nconst List = withCSS(forwardRef(({\n  children,\n  style,\n  gap = 0,\n  damping = INITIAL_DAMPING,\n  ...rest\n}, ref) => {\n  const {\n    listRef,\n    refs,\n    listX,\n    dragPaddingLeft,\n    dragPaddingRight\n  } = useDraggableTabsContext();\n  const [constraints, setConstraints] = useState({\n    left: 0,\n    right: 0\n  });\n  const updateConstraints = () => {\n    if (!listRef.current) {\n      return;\n    }\n    const maxScroll = getRestScrollWidth(listRef.current);\n    const newLeft = -maxScroll;\n    setConstraints((prev) => {\n      if (prev.left === newLeft) {\n        return prev;\n      }\n      return {\n        left: newLeft,\n        right: 0\n      };\n    });\n  };\n  const getChildrenPositions = () => {\n    return Array.from(refs.current.values()).map((element) => element.offsetLeft);\n  };\n  const handleDragEnd = (_, {\n    velocity\n  }) => {\n    const destinationX = listX.get() + velocity.x * damping;\n    const closestX = closest(getChildrenPositions(), -destinationX);\n    const threshold = getRestScrollWidth(listRef.current);\n    const finalX = -clamp(0, threshold, closestX - dragPaddingLeft);\n    animate(listX, finalX, {\n      type: \"spring\",\n      stiffness: 200,\n      damping: 50\n    });\n  };\n  useLayoutEffect(() => {\n    updateConstraints();\n  }, []);\n  useEffect(() => {\n    const container = listRef.current;\n    if (!container) {\n      return;\n    }\n    const resizeObserver = new ResizeObserver(() => {\n      updateConstraints();\n    });\n    resizeObserver.observe(container);\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, []);\n  return /* @__PURE__ */ jsx(\"div\", { ref: mergeRefs([ref, listRef]), className: `${COMPONENT_NAME}-container`, style: {\n    ...containerStyle,\n    ...style\n  }, ...rest, children: /* @__PURE__ */ jsx(motion.div, { style: {\n    ...listStyle,\n    x: listX,\n    gap,\n    paddingLeft: dragPaddingLeft,\n    paddingRight: dragPaddingRight\n  }, drag: \"x\", dragElastic: 0.1, dragConstraints: constraints, dragPropagation: false, onDragEnd: handleDragEnd, whileDrag: {\n    pointerEvents: \"none\"\n  }, children }) });\n}), css);\nconst containerStyle = {\n  position: \"relative\",\n  zIndex: 8,\n  width: \"100%\",\n  overflow: \"hidden\",\n  msOverflowStyle: \"none\",\n  scrollbarWidth: \"none\",\n  cursor: \"grab\"\n};\nconst listStyle = {\n  display: \"inline-flex\",\n  minWidth: \"100%\"\n};\nexport {\n  List\n};\n","import { useDraggableTabsContext } from \"./Root.hooks.js\";\nconst Panel = ({\n  children,\n  value\n}) => {\n  const {\n    currentValue\n  } = useDraggableTabsContext();\n  const isCurrent = value === currentValue;\n  return isCurrent ? children : null;\n};\nexport {\n  Panel\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { useDraggableTabsContext } from \"./Root.hooks.js\";\nimport { mergeRefs } from \"../../../utils/react/mergeRefs.js\";\nimport { isFunction } from \"../../../utils/function.js\";\nimport { playHaptic } from \"../../../utils/playHaptic.js\";\nconst Trigger = forwardRef(({\n  children,\n  style,\n  value,\n  onClick,\n  ...rest\n}, ref) => {\n  const {\n    refs,\n    currentValue,\n    move\n  } = useDraggableTabsContext();\n  const isCurrent = value === currentValue;\n  const register = (incoming) => (element) => {\n    refs.current.set(incoming, element);\n  };\n  const handleClick = (e) => {\n    onClick == null ? void 0 : onClick(e);\n    move(value);\n    playHaptic(\"rigid\");\n  };\n  return /* @__PURE__ */ jsx(\"div\", { ref: mergeRefs([ref, register(value)]), style: {\n    ...containerStyle,\n    ...style\n  }, ...rest, onClick: handleClick, children: isFunction(children) ? children(isCurrent) : children });\n});\nconst containerStyle = {\n  position: \"relative\",\n  display: \"flex\",\n  flex: \"0 0 auto\",\n  alignItems: \"center\",\n  justifyContent: \"center\",\n  cursor: \"pointer\",\n  scrollSnapAlign: \"start\"\n};\nexport {\n  Trigger\n};\n","import { List } from \"./List.js\";\nimport { Panel } from \"./Panel.js\";\nimport { Root } from \"./Root.js\";\nimport { Trigger } from \"./Trigger.js\";\nconst DraggableTabs = {\n  Root,\n  List,\n  Trigger,\n  Panel\n};\nexport {\n  DraggableTabs\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { createContext, forwardRef } from \"react\";\nimport { DraggableTabs } from \"../../../@shared/DraggableTabs/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 \"../../../../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/vite-plugin-node-polyfills/shims/buffer/dist/index.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 { Breakpoint } from \"../../../../styles/breakpoint.js\";\nconst TagsContext = createContext(null);\nconst Root = forwardRef(({\n  children,\n  loading = false,\n  defaultValue,\n  value,\n  dragPaddingLeft,\n  dragPaddingRight,\n  onValueChange\n}, ref) => {\n  const breakpoint = useBreakpoint();\n  const sidePadding = sidePaddingByBreakpoint[breakpoint];\n  return /* @__PURE__ */ jsx(TagsContext.Provider, { value: {\n    loading\n  }, children: /* @__PURE__ */ jsx(DraggableTabs.Root, { ref, defaultValue, value, dragPaddingLeft: dragPaddingLeft ?? sidePadding, dragPaddingRight: dragPaddingRight ?? sidePadding, onValueChange, children }) });\n});\nconst sidePaddingByBreakpoint = {\n  [Breakpoint.DESKTOP]: 0,\n  [Breakpoint.TABLET]: 16,\n  [Breakpoint.MOBILE]: 16\n};\nexport {\n  Root,\n  TagsContext\n};\n","import { useContext } from \"react\";\nimport { TagsContext } from \"./Root.js\";\nconst useTagsContext = () => {\n  const context = useContext(TagsContext);\n  if (!context) {\n    throw new Error(\"useTagsContext should be used within Root\");\n  }\n  return context;\n};\nexport {\n  useTagsContext\n};\n","import { jsx, jsxs } from \"react/jsx-runtime\";\nimport { forwardRef, Fragment, useState, useEffect } from \"react\";\nimport { useTransform, useMotionTemplate, motion, useMotionValue, useMotionValueEvent } from \"framer-motion\";\nimport { DraggableTabs } from \"../../../@shared/DraggableTabs/index.js\";\nimport { useDraggableTabsContext } from \"../../../@shared/DraggableTabs/Root.hooks.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 \"../../../../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/vite-plugin-node-polyfills/shims/buffer/dist/index.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 \"../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../../hooks/useFeatureFlag.js\";\nimport \"../../../../utils/redirectLogin.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { Breakpoint } from \"../../../../styles/breakpoint.js\";\nimport { getRestScrollWidth } from \"../../../../utils/getRestScrollWidth.js\";\nimport { useTagsContext } from \"./Root.hooks.js\";\nconst LIST_GAP = 4;\nconst SKELETONS_PER_PENDING = 3;\nconst FADE_WIDTH = 60;\nconst List = ({\n  style,\n  children,\n  list\n}, ref) => {\n  const breakpoint = useBreakpoint();\n  const {\n    loading\n  } = useTagsContext();\n  const pending = loading && list.length === 0;\n  const overflowed = useListOverflowed(!pending && breakpoint !== Breakpoint.MOBILE);\n  const xProgress = useListXProgress();\n  const fadeWidth = useTransform(xProgress, [0.95, 1], [FADE_WIDTH, 0]);\n  const maskImage = useMotionTemplate`linear-gradient(to right, black 0%, black calc(100% - ${fadeWidth}px), transparent 100%)`;\n  return /* @__PURE__ */ jsx(\n    motion.div,\n    {\n      style: {\n        ...containerStyle,\n        maskImage: overflowed ? maskImage : \"none\",\n        WebkitMaskImage: overflowed ? maskImage : \"none\",\n        ...style\n      },\n      children: /* @__PURE__ */ jsxs(DraggableTabs.List, { ref, gap: LIST_GAP, children: [\n        list.map((item, index) => (\n          // eslint-disable-next-line react/no-array-index-key\n          /* @__PURE__ */ jsx(Fragment, { children: children({\n            index,\n            pending,\n            item\n          }) }, index)\n        )),\n        pending ? Array.from({\n          length: SKELETONS_PER_PENDING\n        }).map((_, index) => (\n          // eslint-disable-next-line react/no-array-index-key\n          /* @__PURE__ */ jsx(Fragment, { children: children({\n            index,\n            pending\n          }) }, index)\n        )) : null\n      ] })\n    }\n  );\n};\nconst useListOverflowed = (enabled) => {\n  const {\n    listRef\n  } = useDraggableTabsContext();\n  const [overflowed, setOverflowed] = useState(false);\n  useEffect(() => {\n    const container = listRef.current;\n    if (container === null || !enabled) {\n      setOverflowed(false);\n      return;\n    }\n    setOverflowed(container.scrollWidth > container.clientWidth);\n  }, [listRef, enabled]);\n  return overflowed;\n};\nconst useListXProgress = () => {\n  const {\n    listX,\n    listRef\n  } = useDraggableTabsContext();\n  const xProgress = useMotionValue(0);\n  useMotionValueEvent(listX, \"change\", (latest) => {\n    xProgress.set(-latest / getRestScrollWidth(listRef.current));\n  });\n  return xProgress;\n};\nconst Default = forwardRef(List);\nconst containerStyle = {\n  position: \"relative\",\n  width: \"100%\",\n  marginBottom: 16,\n  overflow: \"hidden\"\n};\nexport {\n  Default as List\n};\n","import { tv as g } from \"../../packages/configs/tailwind-variants/index.js\";\nconst a = g({\n  base: \"focus-visible:outline focus-visible:outline-1 focus-visible:outline-interactive focus-visible:outline-offset-1\"\n}), s = g({\n  slots: {\n    // radius 는 size variant 가 전담한다 — 커스텀 radius 토큰은 twMerge 그룹 밖이라 base 에 두면\n    // small 의 `rounded-8` 과 나란히 남아 CSS 순서로 결정돼 버린다.\n    base: [a(), \"inline-flex h-32 cursor-pointer items-center justify-center whitespace-nowrap px-10\"],\n    label: \"text-m\"\n  },\n  variants: {\n    // Figma 는 선택된 칩만 medium(500) 이고 나머지는 regular(400) 다.\n    active: {\n      true: { label: \"text-m-medium\" },\n      false: {}\n    },\n    /**\n     * 칩 표면 표현 (Figma toggleTag `surfaceStyle`).\n     * `filled` 은 배경을 칠하고 `outlined` 는 테두리를 두른다 — 굵기만 여기서, 색은 compoundVariants 에서 정한다.\n     *\n     * Figma 는 테두리를 칩 안쪽에 겹쳐 그려(strokeAlign INSIDE) `filled` 와 `outlined` 의 폭이 같다.\n     * CSS `border` 는 패딩 바깥에 더해지므로 `outlined` 만 좌우 패딩을 테두리 굵기(1px)만큼 줄여\n     * 폭을 맞춘다 — compoundVariants 의 outlined 패딩 행 참고.\n     */\n    surfaceStyle: {\n      filled: {},\n      outlined: { base: \"border\" }\n    },\n    /**\n     * 칩 크기 (Figma toggleTag `size`). medium 은 base 가 그대로 담당하고 small 만 덮어쓴다 —\n     * base 의 치수를 variant 로 옮기면 `pr-8`(FilterTag) · `pr-[27px]`(RemovableTag) 처럼\n     * 자식 slots 가 지정한 패딩보다 부모 variant 가 나중에 적용돼 우측 패딩이 사라진다.\n     */\n    size: {\n      medium: { base: \"rounded-[10px]\" },\n      small: { base: \"h-28 rounded-8 px-8\" }\n    },\n    /** 라벨 앞 아이콘 유무 (Figma toggleTag `prefixItem`). `prefix` 로 계산하는 내부 축이다. */\n    hasPrefix: {\n      true: { base: \"gap-4\" },\n      false: {}\n    },\n    /**\n     * hover 는 전부 `[@media(hover:hover)and(pointer:fine)]` 안에 둔다 — 터치 기기는 탭한 요소에\n     * `:hover` 를 걸어두고 다른 곳을 탭할 때까지 유지해서, 고른 칩에 hover 배경이 눌어붙는다.\n     * `Button.style.ts` 와 같은 방식이다.\n     *\n     * **`active:` 는 맨 것과 접두사 붙은 것을 쌍으로 둔다.** Tailwind 는 arbitrary variant 를 기본\n     * variant 뒤에 출력해서, 접두사 붙은 hover 규칙이 맨 `active:` 규칙보다 뒤에 온다. 둘의 specificity 가\n     * `(0,2,0)` 로 같아 마우스로 누르는 동안 hover 색이 pressed 색을 덮는다. 접두사 붙은 `active:` 를 함께\n     * 두면 그것이 hover 뒤로 가 pressed 가 이기고(기본 정렬이 hover → focus → active 라 같은 접두사 안에서는\n     * 항상 이 순서다), 맨 `active:` 는 터치 기기 몫으로 남는다. 한쪽만 지우면 둘 중 한 기기에서 pressed 가 사라진다.\n     *\n     * modifier 가 다르면 twMerge 가 같은 그룹으로 안 묶는다. **소비처가 `className` 으로 hover · pressed 색을\n     * 덮으려면 두 형태를 다 넘겨야 한다** — `hover:bg-foo` 만 넘기면 접두사 붙은 규칙이 뒤에 남아 마우스에서는\n     * 기본 색이 이기고, `active:bg-foo` 만 넘겨도 마찬가지다.\n     */\n    theme: {\n      light: {\n        label: \"active:text-primary-pressed [@media(hover:hover)and(pointer:fine)]:active:text-primary-pressed [@media(hover:hover)and(pointer:fine)]:hover:text-primary-hover\"\n      },\n      dark: {}\n    },\n    disabled: {\n      true: {\n        base: \"cursor-not-allowed bg-disabled [&_*]:cursor-not-allowed\",\n        label: \"text-disabled active:text-disabled [@media(hover:hover)and(pointer:fine)]:active:text-disabled [@media(hover:hover)and(pointer:fine)]:hover:text-disabled\",\n        icon: \"text-disabled\"\n      }\n    }\n  },\n  compoundVariants: [\n    {\n      surfaceStyle: \"filled\",\n      active: true,\n      disabled: false,\n      theme: \"light\",\n      class: {\n        base: \"bg-primary text-on-color active:bg-primary-pressed [@media(hover:hover)and(pointer:fine)]:active:bg-primary-pressed [@media(hover:hover)and(pointer:fine)]:hover:bg-primary-hover\",\n        label: \"text-on-color active:text-on-white-pressed [@media(hover:hover)and(pointer:fine)]:active:text-on-white-pressed [@media(hover:hover)and(pointer:fine)]:hover:text-on-white-hover\"\n      }\n    },\n    {\n      surfaceStyle: \"filled\",\n      active: true,\n      disabled: false,\n      theme: \"dark\",\n      // NOTE:(김홍동) framer-ruler 전용 — 기획전 모듈 시안 dark 값(fill/selected · text/on-color)이 이 브랜치 토큰에 없어 임의값.\n      // 배경 #FFFFFF 89% · hover·pressed 96%, 글자 #0C0C0C 는 hover·pressed 에도 고정이다.\n      class: {\n        base: \"bg-[#ffffffe3] text-[#0c0c0c] active:bg-[#fffffff5] [@media(hover:hover)and(pointer:fine)]:active:bg-[#fffffff5] [@media(hover:hover)and(pointer:fine)]:hover:bg-[#fffffff5]\",\n        label: \"text-[#0c0c0c]\"\n      }\n    },\n    {\n      surfaceStyle: \"filled\",\n      active: false,\n      disabled: false,\n      theme: \"light\",\n      class: {\n        base: \"bg-tertiary text-secondary\",\n        label: \"text-secondary active:text-secondary-pressed [@media(hover:hover)and(pointer:fine)]:active:text-secondary-pressed [@media(hover:hover)and(pointer:fine)]:hover:text-secondary-hover\"\n      }\n    },\n    {\n      surfaceStyle: \"filled\",\n      active: false,\n      disabled: false,\n      theme: \"dark\",\n      // NOTE:(김홍동) framer-ruler 전용 — 시안 dark 값(fill/tertiary #1C1C1C · text/secondary #ADADAD)이 이 브랜치 토큰에 없어 임의값.\n      class: {\n        base: \"bg-[#1c1c1c] text-[#adadad]\",\n        label: \"text-[#adadad]\"\n      }\n    },\n    // outlined 의 hover·pressed 배경은 light 에만 있다 — 기획전 모듈 시안의 dark 는 테두리·글자 색만 정의한다.\n    // outlined 도 hover·pressed 에는 배경이 깔린다. 배경이 없는 건 default·focus 뿐이라 따로 둔다.\n    {\n      surfaceStyle: \"outlined\",\n      disabled: false,\n      theme: \"light\",\n      class: {\n        base: \"active:bg-silent-pressed [@media(hover:hover)and(pointer:fine)]:active:bg-silent-pressed [@media(hover:hover)and(pointer:fine)]:hover:bg-silent-hover\"\n      }\n    },\n    {\n      surfaceStyle: \"outlined\",\n      active: false,\n      disabled: false,\n      theme: \"light\",\n      class: {\n        base: \"border-line text-secondary\",\n        label: \"text-secondary active:text-secondary-pressed [@media(hover:hover)and(pointer:fine)]:active:text-secondary-pressed [@media(hover:hover)and(pointer:fine)]:hover:text-secondary-hover\"\n      }\n    },\n    {\n      surfaceStyle: \"outlined\",\n      active: true,\n      disabled: false,\n      theme: \"light\",\n      class: {\n        base: \"border-line-selected text-primary\",\n        label: \"text-primary\"\n      }\n    },\n    // NOTE:(김홍동) framer-ruler 전용 — 시안 dark 값 중 border/line(#313131) · text/primary(#F4F4F4) 만 같은 값의 클래스가 있고,\n    // line-selected-subtle(#FFFFFF 68%) · text/secondary(#ADADAD) 는 이 브랜치 토큰에 없어 임의값.\n    // dark disabled 는 시안 미정의(\"미선택 · disabled 는 바뀌지 않았다\") — filled·outlined 모두 light 값을 그대로 쓴다.\n    {\n      surfaceStyle: \"outlined\",\n      active: false,\n      disabled: false,\n      theme: \"dark\",\n      class: {\n        base: \"border-line-dark text-[#adadad]\",\n        label: \"text-[#adadad]\"\n      }\n    },\n    {\n      surfaceStyle: \"outlined\",\n      active: true,\n      disabled: false,\n      theme: \"dark\",\n      class: {\n        base: \"border-[#ffffffad] text-gray-900-dark\",\n        label: \"text-gray-900-dark\"\n      }\n    },\n    {\n      surfaceStyle: \"outlined\",\n      disabled: true,\n      class: { base: \"border-line-disabled\" }\n    },\n    // outlined 는 테두리 1px 만큼 패딩을 줄여 filled 와 폭을 맞춘다 (Figma 는 테두리를 안쪽에 겹쳐 그린다).\n    // `pl`·`pr` 을 건드리는 모든 행보다 먼저 와야 한다 — twMerge 는 뒤에 온 `px` 로 앞의 `pl`·`pr` 을 지운다.\n    // 같은 이유로 `FilterTag`(`pr-8`) · `RemovableTag`(`pr-[27px]`) 에 `surfaceStyle` 을 열 때는\n    // 우측 패딩도 outlined 행으로 함께 내려야 한다. 지금은 둘 다 Omit 해서 이 행에 닿지 않는다.\n    { surfaceStyle: \"outlined\", size: \"medium\", class: { base: \"px-[9px]\" } },\n    { surfaceStyle: \"outlined\", size: \"small\", class: { base: \"px-[7px]\" } },\n    // 아이콘이 붙는 왼쪽만 좁아진다 (Figma: medium 10→5, small 8→4).\n    { size: \"medium\", hasPrefix: true, class: { base: \"pl-[5px]\" } },\n    { size: \"small\", hasPrefix: true, class: { base: \"pl-4\" } },\n    { surfaceStyle: \"outlined\", size: \"medium\", hasPrefix: true, class: { base: \"pl-4\" } },\n    { surfaceStyle: \"outlined\", size: \"small\", hasPrefix: true, class: { base: \"pl-[3px]\" } }\n  ],\n  defaultVariants: {\n    disabled: false,\n    surfaceStyle: \"filled\",\n    size: \"medium\",\n    hasPrefix: false\n  }\n});\nexport {\n  a as baseFocusVisible,\n  s as baseTag\n};\n","import { cn as p } from \"../../packages/configs/tailwind-variants/index.js\";\nimport { useCallback, useMemo } from \"react\";\nconst C = (a) => {\n  const { disabled: s, onClick: e, className: c, bgClass: o } = a, l = useCallback(() => {\n    !s && e && e();\n  }, [s, e]), n = useMemo(() => p(s ? \"\" : o, c), [s, o, c]);\n  return {\n    handleClick: l,\n    className: n\n  };\n};\nexport {\n  C as useTag\n};\n","import { j as m } from \"../../../node_modules/.pnpm/react@18.3.0/node_modules/react/jsx-runtime.js\";\nimport { tv as g } from \"../../../packages/configs/tailwind-variants/index.js\";\nimport { forwardRef } from \"react\";\nimport { baseTag as s } from \"../Tag.styles.js\";\nimport { useTag as C$1 } from \"../useTag.js\";\nconst k = g({\n  extend: s,\n  slots: {\n    // 아이콘 자체 높이가 없어 svg 가 접히므로 슬롯 크기를 직계 자식까지 전파한다.\n    icon: \"inline-flex shrink-0 items-center justify-center [&>*]:size-full\"\n  },\n  variants: {\n    // Figma prefixItem 은 medium 24 · small 22 다. 한쪽을 slots 에 두고 다른 쪽만 덮으면\n    // 두 클래스가 나란히 남을 수 있으니 양쪽 다 variant 로 명시한다.\n    size: {\n      medium: { icon: \"size-24\" },\n      small: { icon: \"size-22\" }\n    }\n  }\n}), C = (s2) => s2 != null && s2 !== false && s2 !== \"\", P = forwardRef(\n  ({\n    className: s2,\n    active: a = false,\n    theme: t = \"light\",\n    surfaceStyle: o = \"filled\",\n    size: r = \"medium\",\n    disabled: e,\n    onClick: m$1,\n    children: c,\n    bgClass: f,\n    prefix: i,\n    ...u\n  }, p) => {\n    const n = C(i), { base: g2, label: x, icon: h } = k({ active: a, theme: t, surfaceStyle: o, size: r, disabled: e, hasPrefix: n }), { handleClick: j, className: d } = C$1({ disabled: e, onClick: m$1, bgClass: f, className: s2 });\n    return /* @__PURE__ */ m.jsxs(\n      \"button\",\n      {\n        \"aria-pressed\": a,\n        ...u,\n        ref: p,\n        className: g2({ className: d }),\n        onClick: j,\n        disabled: e,\n        children: [\n          n ? /* @__PURE__ */ m.jsx(\"span\", { className: h(), children: i }) : null,\n          /* @__PURE__ */ m.jsx(\"span\", { className: x(), children: c })\n        ]\n      }\n    );\n  }\n);\nexport {\n  P as ToggleTag\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { Skeleton } from \"../Skeleton/Skeleton.js\";\nconst TagSkeleton = forwardRef(({\n  theme = \"light\"\n}, ref) => {\n  return /* @__PURE__ */ jsx(Skeleton, { ref, style: {\n    width: 73,\n    height: \"32px\",\n    borderRadius: 10,\n    ...baseStyleByTheme[theme]\n  } });\n});\nconst baseStyleByTheme = {\n  light: {\n    backgroundColor: \"#dee2e6\"\n  },\n  dark: {\n    backgroundColor: \"#27272a\"\n  }\n};\nexport {\n  TagSkeleton\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { DraggableTabs } from \"../../../@shared/DraggableTabs/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 \"../../../../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/vite-plugin-node-polyfills/shims/buffer/dist/index.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 { ToggleTag as P } from \"../../../../node_modules/@29cm/ruler-ui/dist/components/Tag/ToggleTag/ToggleTag.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { useTagsContext } from \"./Root.hooks.js\";\nimport { TagSkeleton } from \"../../../@shared/TagSkeleton/TagSkeleton.js\";\nconst Item = forwardRef(({\n  children,\n  value,\n  onClick\n}, ref) => {\n  const {\n    loading\n  } = useTagsContext();\n  const theme = useTheme();\n  if (loading) {\n    return /* @__PURE__ */ jsx(TagSkeleton, { theme });\n  }\n  return /* @__PURE__ */ jsx(DraggableTabs.Trigger, { ref, value, onClick, children: (active) => /* @__PURE__ */ jsx(P, { active, theme, className: \"whitespace-nowrap\", children }) });\n});\nexport {\n  Item\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { Fragment } from \"react\";\nimport { useTagsContext } from \"./Root.hooks.js\";\nconst Panels = ({\n  children,\n  list\n}) => {\n  const {\n    loading\n  } = useTagsContext();\n  const pending = loading && list.length === 0;\n  if (pending) {\n    return children({\n      index: 0,\n      pending\n    });\n  }\n  return list.map((item, index) => (\n    // eslint-disable-next-line react/no-array-index-key\n    /* @__PURE__ */ jsx(Fragment, { children: children({\n      index,\n      pending,\n      item\n    }) }, index)\n  ));\n};\nexport {\n  Panels\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { DraggableTabs } from \"../../../@shared/DraggableTabs/index.js\";\nimport { useTagsContext } from \"./Root.hooks.js\";\nconst Panel = ({\n  children,\n  value\n}) => {\n  const {\n    loading\n  } = useTagsContext();\n  if (loading) {\n    return children;\n  }\n  return /* @__PURE__ */ jsx(DraggableTabs.Panel, { value, children });\n};\nexport {\n  Panel\n};\n","import { Root } from \"./Root.js\";\nimport { List as Default } from \"./List.js\";\nimport { Item } from \"./Item.js\";\nimport { Panels } from \"./Panels.js\";\nimport { Panel } from \"./Panel.js\";\nconst Tags = {\n  Root,\n  List: Default,\n  Item,\n  Panels,\n  Panel\n};\nexport {\n  Tags\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { useMemo, useEffect } from \"react\";\nimport { useQueryStore } from \"../../query-store/query.store.js\";\nimport { Tags } from \"../../../systems/curations/Tags/index.js\";\nimport { useTrackClickButtonEvent, useSetRootModule } from \"../../hooks.js\";\nimport { EventTrigger } from \"../../../@shared/EventTrigger/index.js\";\nimport { getPadding } from \"../../../../utils/spacing.js\";\nimport { useSegment } from \"../../../@shared/providers/SegmentProvider/SegmentProvider.js\";\nconst TagsElement = ({\n  loading = false,\n  currentIndex = 0,\n  inputs: _inputs,\n  output,\n  layout\n}) => {\n  const dispatchSetQuery = useQueryStore((state) => state.dispatchSetQuery);\n  const inputs = useMemo(() => attachAdditionalQuery(_inputs, output), [_inputs, output]);\n  const currentInput = inputs[currentIndex];\n  const {\n    isVisible\n  } = useSegment();\n  const trackClickButtonEvent = useTrackClickButtonEvent(currentInput == null ? void 0 : currentInput.query);\n  const handleClick = (index, name = \"\") => () => {\n    trackClickButtonEvent({\n      type: \"tag\",\n      layoutPosition: index + 1,\n      name\n    });\n  };\n  const handleValueChange = (value) => {\n    if (!output) {\n      return;\n    }\n    const index = Number(value);\n    const input = inputs[index];\n    dispatchSetQuery(output, input.query);\n  };\n  useEffect(() => {\n    window == null ? void 0 : window.dispatchEvent(new CustomEvent(\"layout-done\"));\n    if (!currentInput) {\n      return;\n    }\n    if (!output) {\n      return;\n    }\n    dispatchSetQuery(output, currentInput.query);\n  }, [output, currentInput]);\n  useSetRootModule(currentInput == null ? void 0 : currentInput.query, output);\n  const padding = getPadding(layout);\n  if (!loading && inputs.length === 0 || !isVisible) {\n    window == null ? void 0 : window.dispatchEvent(new CustomEvent(\"layout-done\"));\n    return null;\n  }\n  return /* @__PURE__ */ jsx(Tags.Root, { loading, defaultValue: 0, value: currentIndex, dragPaddingLeft: padding.left, dragPaddingRight: padding.right, onValueChange: handleValueChange, children: /* @__PURE__ */ jsx(Tags.List, { style: {\n    margin: 0,\n    paddingTop: padding.top,\n    paddingBottom: padding.bottom,\n    lineHeight: 0\n  }, list: inputs, children: ({\n    item,\n    index\n  }) => /* @__PURE__ */ jsx(EventTrigger.Target, { onClick: handleClick(index, item == null ? void 0 : item.label), children: /* @__PURE__ */ jsx(Tags.Item, { value: index, children: item == null ? void 0 : item.label }) }) }) });\n};\nconst attachAdditionalQuery = (values, output) => {\n  return values.map((value, index) => ({\n    ...value,\n    query: {\n      ...value.query,\n      facetName: value.label,\n      keys: [...value.query.keys ?? [], `tags-${index}`],\n      isRoot: value.query.rootOutput === void 0,\n      rootOutput: value.query.rootOutput || output\n    }\n  }));\n};\nexport {\n  TagsElement\n};\n","import { env } from \"../../config/index.js\";\nimport { throwFailError } from \"../@middlewares/throwFailError.js\";\nimport { APIService } from \"../APIService.js\";\nclass BrandCurationApiService extends APIService {\n  constructor() {\n    super();\n    this.setMiddleware(throwFailError);\n  }\n  async getFavoriteBrands({\n    size,\n    brandGroupIds\n  }) {\n    return this.get(`${env.api.content}/api/v4/framers/proxy/content-api/api/v5/brand-curations/favorite`, {\n      size,\n      brandGroupIds\n    });\n  }\n}\nconst brandCurationApi = new BrandCurationApiService();\nexport {\n  brandCurationApi\n};\n","import { throwFailError } from \"../@middlewares/throwFailError.js\";\nimport { APIService } from \"../APIService.js\";\nimport { env } from \"../../config/index.js\";\nclass BrandSaleApiService extends APIService {\n  constructor() {\n    super();\n    this.setBaseUrl(env.api.content);\n    this.setMiddleware(throwFailError);\n  }\n  // NOTE: (김홍동) 구 이굿입점회(BrandTimeSale) 신 이굿입점회(CouponCollection)에서 사용되는 api로 brandSaleList를 받아옵니다.\n  // brandSaleList은 그룹별로 어떤 brandSaleId이 있는지 확인할 수 있습니다. 이굿입점회에서는 그룹별 시작 날짜를 가져와 탭을 그리는데 사용됩니다.\n  getBrandSaleGroup(brandSaleGroupId) {\n    return this.get(`/api/v4/framers/proxy/content-api/api/v4/brand-sale-groups/${brandSaleGroupId}`);\n  }\n  // NOTE: (김홍동) 구 이굿입점회(BrandTimeSale) 신 이굿입점회(CouponCollection)에서 사용되는 api로 brandSaleCouponList를 받아옵니다.\n  // brandSaleCouponList에서는 쿠폰의 정보, 브랜드의 정보를 알 수 있습니다.\n  getBrandSales(brandSaleId) {\n    return this.get(`/api/v4/framers/proxy/content-api/api/v4/brand-sales/${brandSaleId}`);\n  }\n  // NOTE: (김홍동) 구 이굿입점회(CouponCollection)에서 사용되는 api로 상품리스트를 받아옵니다. 페이지네이션을 제공하지 않습니다.\n  getBrandSaleCouponDetail(brandSaleCouponId, size) {\n    return this.get(`/api/v4/framers/proxy/content-api/api/v4/brand-sale-coupons/${brandSaleCouponId}`, {\n      size\n    });\n  }\n}\nconst brandSaleApi = new BrandSaleApiService();\nexport {\n  brandSaleApi\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","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 { createKRTimeZoneDate } from \"../../../../../utils/createUTCDate.js\";\nimport { compareAsc } from \"../../../../../node_modules/date-fns/compareAsc.js\";\nimport { parseISO } from \"../../../../../node_modules/date-fns/parseISO.js\";\nimport { formatDate as format } from \"../../../../../node_modules/date-fns/format.js\";\nimport { ko } from \"../../../../../node_modules/date-fns/locale/ko.js\";\nimport { isWithinInterval } from \"../../../../../node_modules/date-fns/isWithinInterval.js\";\nimport { isBefore } from \"../../../../../node_modules/date-fns/isBefore.js\";\nconst orderByDateAsc = (list) => list.sort((groupA, groupB) => compareAsc(groupA.startAt, groupB.startAt));\nconst formatSchedule = (str) => {\n  const schedule = parseISO(str);\n  return format(schedule, \"M. d EEEEE\", {\n    locale: ko\n  });\n};\nconst formatTimeSaleDateTag = (str) => {\n  const schedule = parseISO(str);\n  return format(schedule, \"M. d EEEEE\", {\n    locale: ko\n  });\n};\nconst getCurrentScheduleIndex = (list) => {\n  const now = createKRTimeZoneDate();\n  const currentIndex = list.findIndex((group, index) => {\n    const nextGroup = list[index + 1];\n    const start = parseISO(group.startAt);\n    const end = parseISO(group.endAt);\n    const isWithin = end ? isWithinInterval(now, {\n      start,\n      end\n    }) : false;\n    const isUpcoming = isBefore(now, start);\n    const isLast = nextGroup === void 0;\n    return isWithin || isUpcoming || isLast;\n  });\n  return currentIndex === -1 ? void 0 : currentIndex;\n};\nexport {\n  formatSchedule,\n  formatTimeSaleDateTag,\n  getCurrentScheduleIndex,\n  orderByDateAsc\n};\n","import { CategoryType } from \"../types.js\";\nconst CATEGORY_MIN_PRODUCT_COUNT = 12;\nconst mergeByLargeCategories = (values, excludeCategories) => {\n  const map = values.reduce(\n    (prev, curr) => {\n      const {\n        count = 0,\n        children = []\n      } = prev[curr.largeId] ?? {};\n      if (excludeCategories.largeIds.includes(curr.largeId)) {\n        return prev;\n      }\n      return {\n        ...prev,\n        [curr.largeId]: {\n          id: curr.largeId,\n          name: curr.largeName,\n          count: count + curr.count,\n          children: concatMiddleCategories(children, curr, excludeCategories.middleIds)\n        }\n      };\n    },\n    // 중복 카테고리를 솎아내기 쉽도록 카테고리 id 가 key 인 객체로 정의한다.\n    {}\n  );\n  return Object.values(map);\n};\nconst concatMiddleCategories = (categories, value, excludeMiddleCategoryIds) => {\n  if (!value.middleId || !value.middleName || excludeMiddleCategoryIds.includes(value.middleId)) {\n    return categories;\n  }\n  const has = categories.findIndex((category) => category.id === value.middleId) !== -1;\n  return has ? categories : [...categories, {\n    id: value.middleId,\n    name: value.middleName,\n    parentId: value.largeId\n  }];\n};\nconst filterByOverMinProductCount = (values) => {\n  return values.filter(({\n    count = 0\n  }) => count >= CATEGORY_MIN_PRODUCT_COUNT);\n};\nconst orderByGender = (values, matcher, gender) => {\n  const oppositeGender = getOppositeGender(gender);\n  return [...values].sort((x, y) => (\n    // 현재 성별을 우선적으로 검사하여 해당되는 카테고리를 앞으로 보낸다.\n    matcher(y, gender) - matcher(x, gender) || // 현재 성별과 반대되는 성별을 기준으로 검사하여 해당되는 카테고리를 뒤로 보낸다.\n    matcher(x, oppositeGender) - matcher(y, oppositeGender)\n  ));\n};\nconst getOppositeGender = (gender) => {\n  return gender === \"F\" ? \"M\" : \"F\";\n};\nconst isGenderCategoryMatches = (value, gender) => {\n  return Number(value.name.includes(gender === \"F\" ? \"여성\" : \"남성\"));\n};\nconst isGenderProductGroupMatches = (value, gender) => {\n  return Number(value.gender === gender);\n};\nconst reshapeCategoryFacetValues = (values, options) => {\n  const {\n    categoryType,\n    gender,\n    excludeCategories\n  } = options;\n  const categories = orderByGender(filterByOverMinProductCount(mergeByLargeCategories(values, excludeCategories)), isGenderCategoryMatches, gender);\n  switch (categoryType) {\n    case CategoryType.Large:\n      return categories;\n    case CategoryType.Middle:\n      return categories.flatMap((category) => category.children ?? []);\n  }\n};\nexport {\n  filterByOverMinProductCount,\n  isGenderCategoryMatches,\n  isGenderProductGroupMatches,\n  mergeByLargeCategories,\n  orderByGender,\n  reshapeCategoryFacetValues\n};\n","import { createKRTimeZoneDate } from \"../../../../utils/createUTCDate.js\";\nimport { isAbove } from \"../../../../utils/date.js\";\nimport { isBefore } from \"../../../../node_modules/date-fns/isBefore.js\";\nimport { isWithinInterval } from \"../../../../node_modules/date-fns/isWithinInterval.js\";\nimport { formatDate as format } from \"../../../../node_modules/date-fns/format.js\";\nimport { ko } from \"../../../../node_modules/date-fns/locale/ko.js\";\nconst SEPARATOR = \"@\";\nconst reservedWords = [\"DATE\", \"GENDER\"];\nconst getProductGroupType = (productGroupList) => {\n  const includedReservedWordProductGroup = productGroupList.find((group) => group.title.includes(SEPARATOR));\n  if (includedReservedWordProductGroup === void 0) {\n    return \"KEYWORD\";\n  }\n  const firstReservedWord = includedReservedWordProductGroup.title.split(SEPARATOR)[0];\n  if (!reservedWords.includes(firstReservedWord)) {\n    return \"KEYWORD\";\n  }\n  return firstReservedWord;\n};\nconst reshapeProductGroupList = (productGroupList, productGroupType, gender) => {\n  if (productGroupType === \"DATE\") {\n    return reshapeDateProductGroupList(productGroupList);\n  }\n  if (productGroupType === \"GENDER\") {\n    return reshapeGenderProductGroupList(productGroupList, gender);\n  }\n  return productGroupList;\n};\nconst findInitialProductGroupId = (collectionProductGroup, reshapedProductGroupList, productGroupType) => {\n  if (collectionProductGroup.length === 0) {\n    return void 0;\n  }\n  if (productGroupType === \"DATE\") {\n    const currentProductGroupList = findCurrentProductGroupListByDate(collectionProductGroup);\n    return currentProductGroupList.productGroupId;\n  }\n  return reshapedProductGroupList[0].productGroupId;\n};\nconst reshapeDateProductGroupList = (productGroupList) => productGroupList.map((group) => ({\n  ...group,\n  title: formatTitle(group.title, \"DATE\")\n}));\nconst reshapeGenderProductGroupList = (productGroupList, gender) => {\n  const genderProductGroup = productGroupList.reduce((acc, cur) => {\n    const isCommonGroup = !cur.title.includes(SEPARATOR);\n    if (isCommonGroup) {\n      return {\n        ...acc,\n        common: [...acc.common, cur]\n      };\n    }\n    const isNotAllowedReservedWord = cur.title.split(SEPARATOR)[0] !== \"GENDER\";\n    if (isNotAllowedReservedWord) {\n      return {\n        ...acc,\n        notAllowed: [...acc.notAllowed, cur]\n      };\n    }\n    const groupGender = cur.title.split(SEPARATOR)[1].split(\":\")[0];\n    const formattedTitleGroup = {\n      ...cur,\n      title: formatTitle(cur.title, \"GENDER\")\n    };\n    switch (groupGender) {\n      case \"F\":\n        return {\n          ...acc,\n          female: [...acc.female, formattedTitleGroup]\n        };\n      case \"M\":\n        return {\n          ...acc,\n          male: [...acc.male, formattedTitleGroup]\n        };\n      default:\n        return {\n          ...acc,\n          notAllowed: [...acc.notAllowed, cur]\n        };\n    }\n  }, {\n    male: [],\n    female: [],\n    common: [],\n    notAllowed: []\n  });\n  if (!gender || gender === \"F\") {\n    return [...genderProductGroup.female, ...genderProductGroup.common, ...genderProductGroup.male, ...genderProductGroup.notAllowed];\n  }\n  return [...genderProductGroup.male, ...genderProductGroup.common, ...genderProductGroup.female, ...genderProductGroup.notAllowed];\n};\nconst findCurrentProductGroupIndex = (productGroupList) => {\n  const now = createKRTimeZoneDate();\n  return productGroupList.findIndex((group, index) => {\n    const standardDate = new Date(group.title.split(\"@\")[1]);\n    const nextGroupList = productGroupList[index + 1];\n    const nextDate = nextGroupList ? new Date(nextGroupList.title.split(\"@\")[1]) : null;\n    const isFirstProductGroupList = index === 0;\n    const isLastProductGroupList = nextDate === null;\n    const isBeforeStart = isFirstProductGroupList && isBefore(now, standardDate);\n    const isLast = isLastProductGroupList && isAbove(now, standardDate);\n    const isWithin = !isLastProductGroupList && isWithinInterval(now, {\n      start: standardDate,\n      end: nextDate\n    });\n    return isBeforeStart || isLast || isWithin;\n  });\n};\nconst findCurrentProductGroupListByDate = (productGroupList) => {\n  const currentIndex = findCurrentProductGroupIndex(productGroupList);\n  return productGroupList[currentIndex ?? 0];\n};\nconst formatTitle = (title, reservedWord) => {\n  if (!reservedWord) {\n    return title;\n  }\n  const [, needToFormatTitle] = title.split(SEPARATOR);\n  switch (reservedWord) {\n    case \"DATE\":\n      return format(new Date(needToFormatTitle), \"M. d EEEEE\", {\n        locale: ko\n      });\n    case \"GENDER\":\n      return needToFormatTitle.split(\":\")[1];\n    default:\n      return title;\n  }\n};\nexport {\n  findCurrentProductGroupIndex,\n  findInitialProductGroupId,\n  getProductGroupType,\n  reshapeProductGroupList\n};\n","import { addDays } from \"./addDays.js\";\nfunction subDays(date, amount) {\n  return addDays(date, -amount);\n}\nexport {\n  subDays as default,\n  subDays\n};\n","import { addMonths } from \"./addMonths.js\";\nfunction subMonths(date, amount) {\n  return addMonths(date, -amount);\n}\nexport {\n  subMonths as default,\n  subMonths\n};\n","import { subDays } from \"./subDays.js\";\nimport { subMonths } from \"./subMonths.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nfunction sub(date, duration) {\n  const {\n    years = 0,\n    months = 0,\n    weeks = 0,\n    days = 0,\n    hours = 0,\n    minutes = 0,\n    seconds = 0\n  } = duration;\n  const dateWithoutMonths = subMonths(date, months + years * 12);\n  const dateWithoutDays = subDays(dateWithoutMonths, days + weeks * 7);\n  const minutestoSub = minutes + hours * 60;\n  const secondstoSub = seconds + minutestoSub * 60;\n  const mstoSub = secondstoSub * 1e3;\n  const finalDate = constructFrom(date, dateWithoutDays.getTime() - mstoSub);\n  return finalDate;\n}\nexport {\n  sub as default,\n  sub\n};\n","import { toDate } from \"./toDate.js\";\nimport { addLeadingZeros } from \"./_lib/addLeadingZeros.js\";\nfunction formatISO(date, options) {\n  const _date = toDate(date);\n  if (isNaN(_date.getTime())) {\n    throw new RangeError(\"Invalid time value\");\n  }\n  const format = (options == null ? void 0 : options.format) ?? \"extended\";\n  const representation = (options == null ? void 0 : options.representation) ?? \"complete\";\n  let result = \"\";\n  let tzOffset = \"\";\n  const dateDelimiter = format === \"extended\" ? \"-\" : \"\";\n  const timeDelimiter = format === \"extended\" ? \":\" : \"\";\n  if (representation !== \"time\") {\n    const day = addLeadingZeros(_date.getDate(), 2);\n    const month = addLeadingZeros(_date.getMonth() + 1, 2);\n    const year = addLeadingZeros(_date.getFullYear(), 4);\n    result = `${year}${dateDelimiter}${month}${dateDelimiter}${day}`;\n  }\n  if (representation !== \"date\") {\n    const offset = _date.getTimezoneOffset();\n    if (offset !== 0) {\n      const absoluteOffset = Math.abs(offset);\n      const hourOffset = addLeadingZeros(Math.trunc(absoluteOffset / 60), 2);\n      const minuteOffset = addLeadingZeros(absoluteOffset % 60, 2);\n      const sign = offset < 0 ? \"+\" : \"-\";\n      tzOffset = `${sign}${hourOffset}:${minuteOffset}`;\n    } else {\n      tzOffset = \"Z\";\n    }\n    const hour = addLeadingZeros(_date.getHours(), 2);\n    const minute = addLeadingZeros(_date.getMinutes(), 2);\n    const second = addLeadingZeros(_date.getSeconds(), 2);\n    const separator = result === \"\" ? \"\" : \"T\";\n    const time = [hour, minute, second].join(timeDelimiter);\n    result = `${result}${separator}${time}${tzOffset}`;\n  }\n  return result;\n}\nexport {\n  formatISO as default,\n  formatISO\n};\n","import { createKRTimeZoneDate } from \"../../../../utils/createUTCDate.js\";\nimport { sub } from \"../../../../node_modules/date-fns/sub.js\";\nimport { formatISO } from \"../../../../node_modules/date-fns/formatISO.js\";\nimport { formatSchedule } from \"./TimeSaleCollectionTags/TimeSaleCollectionTags.utils.js\";\nconst DATE_PREFIX = \"DATE@\";\nconst removeDatePrefix = (str) => str.replace(DATE_PREFIX, \"\").trim();\nconst reshapeProductGroups = (list, displayEndAt) => list.map((item, index) => {\n  const nextGroup = list[index + 1];\n  const startAt = formatISO(createKRTimeZoneDate(removeDatePrefix(item.title)));\n  const endAt = nextGroup ? (\n    // NOTE: (한지원) 상품 그룹 응답에서 종료일을 명확히 알 수 없으므로, 다음 스케줄의 1초 전 시간을 종료일로 설정합니다.\n    formatISO(sub(createKRTimeZoneDate(removeDatePrefix(nextGroup.title)), {\n      seconds: 1\n    }))\n  ) : displayEndAt;\n  return {\n    ...item,\n    title: formatSchedule(startAt),\n    startAt,\n    endAt\n  };\n});\nexport {\n  removeDatePrefix,\n  reshapeProductGroups\n};\n","import { createKRTimeZoneDate } from \"../../../../../utils/createUTCDate.js\";\nimport { isAbove } from \"../../../../../utils/date.js\";\nimport { ko } from \"../../../../../node_modules/date-fns/locale/ko.js\";\nimport { isWithinInterval } from \"../../../../../node_modules/date-fns/isWithinInterval.js\";\nimport { formatDate as format } from \"../../../../../node_modules/date-fns/format.js\";\nconst getCurrentBrandSaleIndex = (brandSaleList) => {\n  const now = createKRTimeZoneDate();\n  const currentIndex = brandSaleList.findIndex((brandSale, index) => {\n    const nextInterval = brandSaleList[index + 1];\n    const hasNext = nextInterval !== void 0;\n    const start = new Date(brandSale.displayStartAt);\n    const end = new Date(brandSale.displayEndAt);\n    const isWithin = hasNext && isWithinInterval(now, {\n      start,\n      end\n    });\n    const isLast = !hasNext && isAbove(now, start);\n    return isWithin || isLast;\n  });\n  return currentIndex === -1 ? void 0 : currentIndex;\n};\nconst getCalendarTagName = ({\n  displayStartAt\n}) => {\n  return format(displayStartAt, \"M. d eeeee\", {\n    locale: ko\n  });\n};\nexport {\n  getCalendarTagName,\n  getCurrentBrandSaleIndex\n};\n","import { getProductGroupType } from \"../../systems/KeywordCollection/KeywordCollectionTags/KeywordCollectionTags.utils.js\";\nimport { reshapeProductGroups } from \"../../systems/curations/KeywordCollectionV2/TimeSaleCollection.utils.js\";\nimport { orderByDateAsc, getCurrentScheduleIndex } from \"../../../utils/date.js\";\nimport { getCalendarTagName, getCurrentBrandSaleIndex } from \"../../systems/curations/CouponCollection/CalendarTags/CalendarTags.utils.js\";\nimport { orderByGender, isGenderProductGroupMatches } from \"../utils/facet.js\";\nconst GENDER_PREFIX = \"GENDER@\";\nconst GENDER_SEPARATOR = \":\";\nconst reshapeProductGroupsByGender = (groups) => groups.map((group) => {\n  const [gender, title] = group.title.replace(GENDER_PREFIX, \"\").trim().split(GENDER_SEPARATOR);\n  return {\n    ...group,\n    title: group.title.includes(GENDER_PREFIX) ? title : group.title,\n    gender\n  };\n});\nconst getKeywordCollectionTagsResult = (query, userSegment) => {\n  const {\n    displayEndAt,\n    productGroups = []\n  } = query;\n  const type = getProductGroupType(productGroups);\n  if (type === \"DATE\") {\n    const groups = orderByDateAsc(reshapeProductGroups(productGroups, displayEndAt ?? \"\"), (x) => x.startAt);\n    const currentIndex = getCurrentScheduleIndex(groups, (x) => x.startAt, (x) => x.endAt);\n    return {\n      values: groups.map((group, index) => ({\n        label: group.title,\n        query: {\n          ...query,\n          selectedProductGroup: {\n            id: group.productGroupId,\n            index,\n            sort: group.sort,\n            startAt: group.startAt,\n            endAt: group.endAt\n          }\n        }\n      })),\n      currentIndex\n    };\n  }\n  if (type === \"GENDER\") {\n    const gender = userSegment.gender ?? \"F\";\n    const groups = orderByGender(reshapeProductGroupsByGender(productGroups), isGenderProductGroupMatches, gender);\n    return {\n      values: groups.map((group, index) => ({\n        label: group.title,\n        query: {\n          ...query,\n          selectedProductGroup: {\n            id: group.productGroupId,\n            sort: group.sort,\n            index\n          }\n        }\n      }))\n    };\n  }\n  return {\n    values: productGroups.map((group, index) => ({\n      label: group.title,\n      query: {\n        ...query,\n        selectedProductGroup: {\n          id: group.productGroupId,\n          index,\n          sort: group.sort\n        }\n      }\n    }))\n  };\n};\nconst getCouponCollectionTagsResult = (query) => {\n  const {\n    brandSales = []\n  } = query;\n  const values = brandSales.map((brandSale, index) => ({\n    label: getCalendarTagName(brandSale),\n    query: {\n      ...query,\n      brandSaleId: brandSale.brandSaleId,\n      index,\n      displayStartAt: brandSale.displayStartAt,\n      displayEndAt: brandSale.displayEndAt\n    }\n  }));\n  const currentIndex = getCurrentBrandSaleIndex(brandSales);\n  return {\n    values,\n    currentIndex\n  };\n};\nexport {\n  getCouponCollectionTagsResult,\n  getKeywordCollectionTagsResult,\n  reshapeProductGroupsByGender\n};\n","import useSWR from \"../../../node_modules/swr/core/dist/index.js\";\nimport { bestApi } from \"../../../apis/best/BestApiService.js\";\nimport { brandCurationApi } from \"../../../apis/brand-curation/BrandCurationApiService.js\";\nimport { brandSaleApi } from \"../../../apis/brand-sale/BrandSaleApiService.js\";\nimport { collectionApi } from \"../../../apis/collection/CollectionApiService.js\";\nimport { keywordCollectionApi } from \"../../../apis/keyword-collections/KeywordCollectionApiService.js\";\nimport { formatSchedule } from \"../../systems/curations/KeywordCollectionV2/TimeSaleCollectionTags/TimeSaleCollectionTags.utils.js\";\nimport { orderByDateAsc, getCurrentScheduleIndex } from \"../../../utils/date.js\";\nimport { splitToNumberArray } from \"../../../utils/splitToNumberArray.js\";\nimport { QueryType, CategoryType, RankingType } from \"../types.js\";\nimport { reshapeCategoryFacetValues } from \"../utils/facet.js\";\nimport { getKeywordCollectionTagsResult, getCouponCollectionTagsResult } from \"./TagsModule.utils.js\";\nconst TAGS_FETCHER_KEY = \"tags-module/tags\";\nconst useTagsQuery = (options) => {\n  const {\n    enabled: _enabled = true,\n    query,\n    userSegment\n  } = options;\n  const enabled = _enabled && query !== void 0;\n  const {\n    data,\n    isLoading,\n    ...rest\n  } = useSWR(enabled ? [TAGS_FETCHER_KEY, query] : null, () => queryTags(query, userSegment));\n  const {\n    values = [],\n    currentIndex\n  } = data ?? {};\n  const hasTags = values.length > 0;\n  return {\n    isLoading: isLoading || !enabled || !hasTags,\n    tags: values,\n    currentIndex,\n    ...rest\n  };\n};\nconst fetchKeywordCollectionTags = async (query, userSegment) => {\n  if (!query.keywordCollectionId) {\n    return {\n      values: []\n    };\n  }\n  const {\n    data\n  } = await keywordCollectionApi.getKeywordCollection(Number(query.keywordCollectionId));\n  const {\n    title,\n    description,\n    displayEndAt,\n    productGroups\n  } = data;\n  return getKeywordCollectionTagsResult({\n    ...query,\n    title,\n    description: description ?? void 0,\n    displayEndAt: displayEndAt ?? void 0,\n    couponId: data.couponId ?? void 0,\n    productGroups\n  }, userSegment);\n};\nconst fetchKeywordCollectionsTags = async (query) => {\n  if (!query.keywordCollectionIds) {\n    return {\n      values: []\n    };\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  return {\n    values: collections.map((collection) => {\n      const {\n        collectionId,\n        title,\n        description,\n        displayStartAt,\n        displayEndAt,\n        productGroupList,\n        couponId\n      } = collection;\n      const [firstProductGroup] = productGroupList;\n      return {\n        label: formatSchedule(displayStartAt),\n        query: {\n          // NOTE(임규민): 다중 키워드 컬렉션의 개별 요소는 결국 키워드 컬렉션이므로, 연결되는 모듈에서 KeywordCollectionQuery 로 식별되도록 한다.\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      };\n    }),\n    currentIndex\n  };\n};\nconst fetchBrandCurationTags = async (query) => {\n  if (!query.brandGroupIds) {\n    return {\n      values: []\n    };\n  }\n  const brandGroupIds = splitToNumberArray(query.brandGroupIds).join(\",\");\n  const {\n    data\n  } = await brandCurationApi.getFavoriteBrands({\n    size: query.brandSize,\n    brandGroupIds\n  });\n  const values = data.frontBrands.map((brand) => ({\n    label: brand.nameKor,\n    query: {\n      ...query,\n      brandId: brand.frontBrandId\n    }\n  }));\n  return {\n    values\n  };\n};\nconst fetchRankingTags = async (query, userSegment) => {\n  if (!query.rankingTagIds) {\n    return {\n      values: []\n    };\n  }\n  const tagIds = splitToNumberArray(query.rankingTagIds);\n  const {\n    data\n  } = await bestApi.getPLPFacetGroup({\n    facetGroupInput: {\n      tagFacetInputs: tagIds.map((tagId) => ({\n        tagId\n      }))\n    }\n  });\n  const gender = userSegment.gender ?? \"F\";\n  const categories = reshapeCategoryFacetValues(data.categoryFacet.values, {\n    categoryType: query.categoryType,\n    gender,\n    excludeCategories: {\n      largeIds: splitToNumberArray(query.excludeLargeCategoryIds),\n      middleIds: splitToNumberArray(query.excludeMiddleCategoryIds)\n    }\n  });\n  const inputs = categories.map((category) => {\n    const categoryProperties = {\n      [CategoryType.Large]: {\n        largeCategoryId: category.id\n      },\n      [CategoryType.Middle]: {\n        largeCategoryId: category.parentId,\n        middleCategoryId: category.id\n      }\n    };\n    return {\n      label: category.name,\n      query: {\n        ...query,\n        ...categoryProperties[query.categoryType],\n        childCategories: category.children ?? []\n      }\n    };\n  });\n  const allCategory = {\n    label: \"전체\",\n    query\n  };\n  const isTrending = query.rankingType === RankingType.Trending;\n  return {\n    values: isTrending ? [allCategory, ...inputs] : inputs\n  };\n};\nconst fetchCouponCollectionTags = async (query) => {\n  if (!query.brandSaleGroupId) {\n    return {\n      values: []\n    };\n  }\n  const {\n    data\n  } = await brandSaleApi.getBrandSaleGroup(Number(query.brandSaleGroupId));\n  const {\n    title,\n    description,\n    brandSaleList\n  } = data;\n  return getCouponCollectionTagsResult({\n    ...query,\n    title,\n    description: description ?? void 0,\n    brandSales: brandSaleList\n  });\n};\nconst queryTags = (query, userSegment) => {\n  if (!query) {\n    return {\n      values: []\n    };\n  }\n  switch (query.type) {\n    case QueryType.KeywordCollection:\n      return fetchKeywordCollectionTags(query, userSegment);\n    case QueryType.KeywordCollections:\n      return fetchKeywordCollectionsTags(query);\n    case QueryType.BrandCuration:\n      return fetchBrandCurationTags(query);\n    case QueryType.Ranking:\n      return fetchRankingTags(query, userSegment);\n    case QueryType.CouponCollection:\n      return fetchCouponCollectionTags(query);\n    default:\n      return {\n        values: []\n      };\n  }\n};\nexport {\n  useTagsQuery\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 \"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 \"../../../../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/vite-plugin-node-polyfills/shims/buffer/dist/index.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-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 { TagsElement } from \"../TagsElement/TagsElement.js\";\nimport { useTagsQuery } from \"../TagsModule.hooks.js\";\nconst AutoTagsModule = ({\n  query,\n  output,\n  layout\n}) => {\n  const {\n    isInView\n  } = useIntersectionContext();\n  const {\n    isVisible\n  } = useSegment();\n  const user = useCurrentUser();\n  const {\n    isLoading,\n    tags,\n    currentIndex\n  } = useTagsQuery({\n    query,\n    userSegment: user,\n    enabled: isInView && isVisible\n  });\n  return /* @__PURE__ */ jsx(TagsElement, { loading: isLoading, currentIndex, inputs: tags, output, layout });\n};\nexport {\n  AutoTagsModule\n};\n","import { useRef, useEffect } from \"react\";\nimport { useQueryStore } from \"./query.store.js\";\nconst useReportOutputFailure = (output, onRetry) => {\n  const dispatchSetFailure = useQueryStore((state) => state.dispatchSetFailure);\n  const retryRef = useRef(onRetry);\n  retryRef.current = onRetry;\n  const hasRetry = onRetry !== void 0;\n  useEffect(() => {\n    if (!output || !hasRetry) {\n      return;\n    }\n    dispatchSetFailure(output, () => {\n      var _a;\n      return (_a = retryRef.current) == null ? void 0 : _a.call(retryRef);\n    });\n    return () => dispatchSetFailure(output, void 0);\n  }, [output, hasRetry, dispatchSetFailure]);\n};\nconst OutputFailure = ({\n  output,\n  onRetry\n}) => {\n  useReportOutputFailure(output, onRetry);\n  return null;\n};\nexport {\n  OutputFailure,\n  useReportOutputFailure\n};\n","import { combineObjectPropertyControls } from \"../../../libs/property-controls/helpers.js\";\nimport { QUERY_CONTROL, COUPON_COLLECTION_CONTROLS, RANKING_CONTROLS, BRAND_CURATION_CONTROLS, KEYWORD_COLLECTIONS_CONTROLS, KEYWORD_COLLECTION_CONTROLS, RECOMMENDATION_CONTROLS, PRODUCT_CONTROLS } from \"../controls.js\";\nconst AUTO_TAGS_MODULE_QUERY = {\n  ...QUERY_CONTROL,\n  controls: combineObjectPropertyControls(KEYWORD_COLLECTION_CONTROLS, KEYWORD_COLLECTIONS_CONTROLS, BRAND_CURATION_CONTROLS, RANKING_CONTROLS, COUPON_COLLECTION_CONTROLS)\n};\nconst MANUAL_TAGS_MODULE_QUERY = {\n  ...QUERY_CONTROL,\n  controls: combineObjectPropertyControls(PRODUCT_CONTROLS, RECOMMENDATION_CONTROLS)\n};\nexport {\n  AUTO_TAGS_MODULE_QUERY,\n  MANUAL_TAGS_MODULE_QUERY\n};\n","import { QueryType } from \"../../types.js\";\nimport { getKeywordCollectionTagsResult, getCouponCollectionTagsResult } from \"../TagsModule.utils.js\";\nconst getKeywordCollectionTags = (query, userSegment) => {\n  if (query.productGroups === void 0) {\n    return {\n      values: []\n    };\n  }\n  return getKeywordCollectionTagsResult(query, userSegment);\n};\nconst getCouponCollectionTags = (query) => {\n  if (query.brandSales === void 0) {\n    return {\n      values: []\n    };\n  }\n  return getCouponCollectionTagsResult(query);\n};\nconst getRankingTags = (query) => {\n  if (query.childCategories === void 0) {\n    return {\n      values: []\n    };\n  }\n  const {\n    childCategories\n  } = query;\n  const inputs = childCategories.map((category) => ({\n    label: category.name,\n    query: {\n      ...query,\n      middleCategoryId: category.id\n    }\n  }));\n  const allCategory = {\n    label: \"전체\",\n    query\n  };\n  return {\n    values: [allCategory, ...inputs]\n  };\n};\nconst getTags = (query, userSegment) => {\n  if (!query) {\n    return {\n      values: []\n    };\n  }\n  switch (query.type) {\n    case QueryType.KeywordCollection:\n      return getKeywordCollectionTags(query, userSegment);\n    case QueryType.CouponCollection:\n      return getCouponCollectionTags(query);\n    case QueryType.Ranking:\n      return getRankingTags(query);\n    default:\n      return {\n        values: []\n      };\n  }\n};\nexport {\n  getTags\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { useQueryStore } from \"../../query-store/query.store.js\";\nimport { TagsElement } from \"../TagsElement/TagsElement.js\";\nimport { useMemo, useEffect } from \"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 \"../../../../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/vite-plugin-node-polyfills/shims/buffer/dist/index.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-dom\";\nimport \"../../../systems/Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport { shallow as shallow$1 } from \"../../../../node_modules/zustand/esm/shallow.js\";\nimport \"../../../../hooks/useFeatureFlag.js\";\nimport \"../../../../utils/redirectLogin.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { getTags } from \"./LinkedTagsModule.utils.js\";\nimport { createKey } from \"../../utils/key.js\";\nimport { useReportOutputFailure } from \"../../query-store/OutputFailure.js\";\nconst LinkedTagsModule = ({\n  value,\n  output,\n  layout\n}) => {\n  const user = useCurrentUser();\n  const [query, dispatchSetQuery, upstreamRetry] = useQueryStore((state) => [state.queries[value], state.dispatchSetQuery, state.failures[value]], shallow$1);\n  useReportOutputFailure(output, query ? void 0 : upstreamRetry);\n  const {\n    values,\n    currentIndex\n  } = useMemo(() => getTags(query, user), [query, user]);\n  useEffect(() => {\n    if (values.length > 0 || !query) {\n      return;\n    }\n    dispatchSetQuery(output, query);\n  }, [query, values.length]);\n  return /* @__PURE__ */ jsx(TagsElement, { inputs: values, output, currentIndex, layout }, createKey(query));\n};\nexport {\n  LinkedTagsModule\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { addPropertyControls, ControlType } from \"framer\";\nimport { TagsModuleInputType } from \"./TagsModule.types.js\";\nimport { AutoTagsModule } from \"./AutoTagsModule/AutoTagsModule.js\";\nimport { SectionLayout } from \"../../systems/curations/SectionLayout/SectionLayout.js\";\nimport { SWRErrorBoundary } from \"../../@shared/SWRErrorBoundary/SWRErrorBoundary.js\";\nimport { OutputFailure } from \"../query-store/OutputFailure.js\";\nimport { BREAKPOINT_CONTROLS } from \"../../../libs/property-controls/breakpoint.js\";\nimport { THEME_CONTROLS } from \"../../../libs/property-controls/theme.js\";\nimport { COMPONENT_ID_PROPS } from \"../../../libs/property-controls/component-id.js\";\nimport { TagsElement } from \"./TagsElement/TagsElement.js\";\nimport { MANUAL_TAGS_MODULE_QUERY, AUTO_TAGS_MODULE_QUERY } from \"./TagsModule.controls.js\";\nimport { LinkedTagsModule } from \"./LinkedTagsModule/LinkedTagsModule.js\";\nimport { SEGMENT_CONTROLS } from \"../../../libs/property-controls/segment.js\";\nconst TagsModuleInner = ({\n  input,\n  output,\n  layout\n}) => {\n  switch (input.type) {\n    case TagsModuleInputType.Linked:\n      return /* @__PURE__ */ jsx(LinkedTagsModule, { value: input.value, output, layout });\n    case TagsModuleInputType.Auto:\n      return /* @__PURE__ */ jsx(AutoTagsModule, { query: input.query, output, layout });\n    case TagsModuleInputType.Manual:\n      return /* @__PURE__ */ jsx(TagsElement, { inputs: input.values, output, layout });\n    default:\n      return null;\n  }\n};\nconst TagsModule = ({\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(OutputFailure, { output: rest.output, onRetry: retry }), children: /* @__PURE__ */ jsx(TagsModuleInner, { ...rest }) }) });\n};\naddPropertyControls(TagsModule, {\n  ...BREAKPOINT_CONTROLS,\n  ...THEME_CONTROLS,\n  ...SEGMENT_CONTROLS,\n  componentId: {\n    hidden: ({\n      input\n    }) => (input == null ? void 0 : input.type) === TagsModuleInputType.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: [TagsModuleInputType.Linked, TagsModuleInputType.Auto, TagsModuleInputType.Manual],\n        optionTitles: [\"연결\", \"자동\", \"수동\"]\n      },\n      value: {\n        hidden: ({\n          type\n        }) => type !== TagsModuleInputType.Linked,\n        type: ControlType.String,\n        title: \"출력 값\",\n        defaultValue: \"\"\n      },\n      values: {\n        hidden: ({\n          type\n        }) => type !== TagsModuleInputType.Manual,\n        type: ControlType.Array,\n        title: \"입력 값 목록\",\n        control: {\n          type: ControlType.Object,\n          title: \"입력 값\",\n          controls: {\n            label: {\n              type: ControlType.String,\n              title: \"이름\",\n              defaultValue: \"텍스트\"\n            },\n            query: MANUAL_TAGS_MODULE_QUERY\n          }\n        },\n        defaultValue: [{\n          label: \"텍스트\"\n        }]\n      },\n      query: {\n        hidden: ({\n          type\n        }) => type !== TagsModuleInputType.Auto,\n        ...AUTO_TAGS_MODULE_QUERY\n      }\n    }\n  },\n  output: {\n    type: ControlType.String,\n    title: \"출력 값\"\n  },\n  layout: {\n    type: ControlType.Object,\n    title: \"레이아웃\",\n    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  TagsModule\n};\n","import{TagsModule}from\"https://asset.29cm.co.kr/contents/framer/components/modules/TagsModule/TagsModule.js\";TagsModule.displayName=\"[조립형]Tags\";export default TagsModule;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TagsModule\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./TagsModule.map"],"ignoreList":[12,13,14,24,25,26,27,28,29,33,34,35,36],"mappings":"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"}