@krds.ui/react 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +16 -0
- package/README.md +86 -2
- package/dist/img/component/icon/head_ico_font_sample.svg +3 -0
- package/dist/img/component/icon/head_ico_font_sample_white.svg +3 -0
- package/dist/img/component/icon/ico_all.svg +3 -0
- package/dist/img/component/icon/ico_angle.svg +3 -0
- package/dist/img/component/icon/ico_angle_disabled.svg +3 -0
- package/dist/img/component/icon/ico_angle_disabled_inverse.svg +3 -0
- package/dist/img/component/icon/ico_angle_inverse.svg +3 -0
- package/dist/img/component/icon/ico_arrow_dropdown.svg +3 -0
- package/dist/img/component/icon/ico_blog.svg +6 -0
- package/dist/img/component/icon/ico_bread_home.svg +3 -0
- package/dist/img/component/icon/ico_calendar.svg +3 -0
- package/dist/img/component/icon/ico_call.svg +3 -0
- package/dist/img/component/icon/ico_checkbox.svg +5 -0
- package/dist/img/component/icon/ico_checkbox_checked.svg +5 -0
- package/dist/img/component/icon/ico_close.svg +3 -0
- package/dist/img/component/icon/ico_complete_fill.svg +4 -0
- package/dist/img/component/icon/ico_delete.svg +3 -0
- package/dist/img/component/icon/ico_delete_fill.svg +4 -0
- package/dist/img/component/icon/ico_download.svg +3 -0
- package/dist/img/component/icon/ico_ellipsis.svg +3 -0
- package/dist/img/component/icon/ico_email.svg +3 -0
- package/dist/img/component/icon/ico_error_fill.svg +4 -0
- package/dist/img/component/icon/ico_expand.svg +3 -0
- package/dist/img/component/icon/ico_facebook.svg +3 -0
- package/dist/img/component/icon/ico_faq.svg +3 -0
- package/dist/img/component/icon/ico_file.svg +3 -0
- package/dist/img/component/icon/ico_file_figma.svg +13 -0
- package/dist/img/component/icon/ico_file_html.svg +13 -0
- package/dist/img/component/icon/ico_file_hwp.svg +13 -0
- package/dist/img/component/icon/ico_file_pdf.svg +13 -0
- package/dist/img/component/icon/ico_file_sketch.svg +13 -0
- package/dist/img/component/icon/ico_file_xd.svg +16 -0
- package/dist/img/component/icon/ico_filter.svg +5 -0
- package/dist/img/component/icon/ico_flag.svg +29 -0
- package/dist/img/component/icon/ico_flow_arrow.svg +3 -0
- package/dist/img/component/icon/ico_foldable.svg +3 -0
- package/dist/img/component/icon/ico_global.svg +3 -0
- package/dist/img/component/icon/ico_go.svg +3 -0
- package/dist/img/component/icon/ico_go_top.svg +5 -0
- package/dist/img/component/icon/ico_help.svg +4 -0
- package/dist/img/component/icon/ico_help_fill.svg +4 -0
- package/dist/img/component/icon/ico_information.svg +5 -0
- package/dist/img/component/icon/ico_information_fill.svg +4 -0
- package/dist/img/component/icon/ico_information_fill_high_contrast.svg +5 -0
- package/dist/img/component/icon/ico_instagram.svg +3 -0
- package/dist/img/component/icon/ico_join.svg +3 -0
- package/dist/img/component/icon/ico_like.svg +3 -0
- package/dist/img/component/icon/ico_login.svg +3 -0
- package/dist/img/component/icon/ico_login_certify_go.svg +4 -0
- package/dist/img/component/icon/ico_login_certify_type_01.svg +3 -0
- package/dist/img/component/icon/ico_login_certify_type_02.svg +3 -0
- package/dist/img/component/icon/ico_login_certify_type_03.svg +3 -0
- package/dist/img/component/icon/ico_login_certify_type_04.svg +5 -0
- package/dist/img/component/icon/ico_login_certify_type_05.svg +3 -0
- package/dist/img/component/icon/ico_login_certify_type_06.svg +3 -0
- package/dist/img/component/icon/ico_logo_krds.svg +10 -0
- package/dist/img/component/icon/ico_logo_krds_high_contrast.svg +10 -0
- package/dist/img/component/icon/ico_logout.svg +3 -0
- package/dist/img/component/icon/ico_more.svg +3 -0
- package/dist/img/component/icon/ico_my.svg +3 -0
- package/dist/img/component/icon/ico_notice_fill.svg +5 -0
- package/dist/img/component/icon/ico_notice_fill_blue.svg +5 -0
- package/dist/img/component/icon/ico_notice_fill_high_contrast.svg +5 -0
- package/dist/img/component/icon/ico_plus.svg +3 -0
- package/dist/img/component/icon/ico_print.svg +3 -0
- package/dist/img/component/icon/ico_pw_visible_off.svg +3 -0
- package/dist/img/component/icon/ico_pw_visible_on.svg +5 -0
- package/dist/img/component/icon/ico_reset.svg +3 -0
- package/dist/img/component/icon/ico_sch.svg +3 -0
- package/dist/img/component/icon/ico_sch_plus.svg +3 -0
- package/dist/img/component/icon/ico_scrap.svg +3 -0
- package/dist/img/component/icon/ico_setting.svg +3 -0
- package/dist/img/component/icon/ico_share.svg +3 -0
- package/dist/img/component/icon/ico_sns_x.svg +3 -0
- package/dist/img/component/icon/ico_step_done.svg +3 -0
- package/dist/img/component/icon/ico_success_fill.svg +4 -0
- package/dist/img/component/icon/ico_swiper_play.svg +3 -0
- package/dist/img/component/icon/ico_swiper_stop.svg +3 -0
- package/dist/img/component/icon/ico_switch_off.svg +6 -0
- package/dist/img/component/icon/ico_switch_on.svg +5 -0
- package/dist/img/component/icon/ico_tooltip.svg +3 -0
- package/dist/img/component/icon/ico_upload.svg +3 -0
- package/dist/img/component/icon/ico_urgent_badge_danger.svg +5 -0
- package/dist/img/component/icon/ico_urgent_badge_info.svg +7 -0
- package/dist/img/component/icon/ico_urgent_badge_ok.svg +5 -0
- package/dist/img/component/icon/ico_view_mode.svg +3 -0
- package/dist/img/component/icon/ico_warning_fill.svg +9 -0
- package/dist/img/component/icon/ico_youtube.svg +3 -0
- package/dist/index.css +1 -0
- package/dist/index.js +5211 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +2561 -0
- package/package.json +103 -3
- package/style.d.ts +5 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_Fragment","_Fragment","_Fragment","_Fragment","Slot","_Fragment","MainMenu","_Fragment","_Fragment","_Fragment","_Fragment","_Fragment","React","classNames","classes","result","cls","key","value","nested","useUncontrolled","uncontrolledValue","setUncontrolledValue","useState","defaultValue","finalValue","payload","val","onChange","AccordionContext","createContext","useAccordionContext","context","useContext","AccordionItemContext","useAccordionItemContext","AccordionItem","forwardRef","props","isExpanded","expandedValues","itemId","useId","itemClasses","className","itemContextValue","AccordionHeader","itemValue","headerId","panelId","buttonClasses","handleClick","onToggle","onClick","handleKeyDown","event","AccordionPanel","AccordionRoot","setExpandedValues","handleToggle","useCallback","isCurrentlyExpanded","allowMultiple","newExpandedValues","accordionClasses","variant","contextValue","Accordion","Badge","variantColorClass","color","size","rounded","BadgeWrapper","Breadcrumb","ariaLabel","items","isLast","index","liClassName","item","ButtonComponent","restProps","Component","as","typeProp","disabled","Button","Calendar","_className","rest","internalIsOpen","setInternalIsOpen","isOpen","defaultIsOpen","onOpenChange","internalValue","setInternalValue","internalStartDate","setInternalStartDate","startDate","defaultStartDate","onRangeChange","newStartDate","internalEndDate","setInternalEndDate","endDate","defaultEndDate","newEndDate","parseDate","dateString","parts","year","month","day","formatDate","date","getCurrentYearMonth","today","mode","selectedDate","currentYearMonth","setCurrentYearMonth","newYearMonth","yearDropdownOpen","setYearDropdownOpen","monthDropdownOpen","setMonthDropdownOpen","clickCount","setClickCount","startTd","setStartTd","calendarWrapRef","useRef","availableYears","useMemo","currentYear","i","availableMonths","calendarDates","firstDay","lastDay","firstDayOfWeek","daysInMonth","dates","prevMonth","prevYear","prevMonthLastDay","disabledDates","eventDates","dayOfWeek","isToday","remainingCells","nextMonth","nextYear","handleOpenCalendar","readOnly","handleCloseCalendar","handlePrevMonth","newMonth","newYear","onYearChange","onMonthChange","handleNextMonth","handleYearSelect","yearItem","prev","handleMonthSelect","monthItem","handleDateClick","currentDate","handleTodayClick","todayString","onTodayClick","handleConfirm","onConfirm","handleCancel","onCancel","handleInputChange","newValue","parsedDate","handleStartDateChange","handleEndDateChange","isDateInPeriod","isSelected","isStart","isEnd","startParts","endParts","useEffect","handleClickOutside","inputId","label","startPlaceholder","startTitle","endPlaceholder","endTitle","openButtonLabel","position","prevButtonLabel","yearSelectLabel","monthSelectLabel","nextButtonLabel","dateIndex","weekIndex","dayIndex","cellClasses","isPeriod","todayButtonText","cancelButtonText","confirmButtonText","Checkbox","_checked","setChecked","checked","handleChange","generatedId","id","checkboxClasses","children","description","CheckboxChip","isFocused","setIsFocused","CheckboxGroup","column","CoachMark","isVisible","handleSkip","handlePrevious","handleNext","showPreviousButton","currentStep","title","totalSteps","ContextualHelp","containerRef","popoverRef","buttonRef","contentsRef","setIsOpen","open","defaultOpen","containerClasses","alignment","handleClose","adjustPopoverPosition","isMobile","tooltipAction","rootStyles","contentsPaddingX","offsetLeft","width","focusFirstFocusableElement","focusableElements","container","visibleFocusables","htmlElement","el","handleResize","ref","CriticalAlerts","alerts","CriticalAlertItem","alert","variantText","message","href","linkText","CriticalAlert","DateInput","_value","setValue","isCalendarOpen","defaultIsCalendarOpen","onCalendarOpenChange","isDateSelected","isError","error","isSuccess","success","isInformation","information","renderHintMessage","hint","calendarPosition","Disclosure","contentId","setIsExpanded","expanded","defaultExpanded","buttonText","Spinner","spinnerElement","FileUpload","_files","files","setFiles","onFilesChange","isDragActive","setIsDragActive","fileInputId","fileInputRef","formatFileSize","bytes","k","sizes","getFileExtension","filename","validateFile","file","maxFileSize","acceptedFileTypes","extension","processFiles","newFiles","availableSlots","maxFiles","filesToProcess","selectedFiles","validation","fileItem","onFileUpload","handleFileSelect","handleDragOver","handleDragLeave","handleDrop","handleFileDelete","onFileDelete","fileId","handleAllFilesDelete","onAllFilesDelete","renderFileStatus","renderFileActions","allowDelete","Fragment","uploadText","type","Identifier","logoAlt","text","FooterQuickLinks","quickLinks","link","FooterLogoComponent","logoContent","logo","logoElement","FooterMainContent","address","contacts","contact","links","socialLinks","target","defaultLinkTarget","rel","socialLink","getDefaultSocialLabel","iconClass","getDefaultSocialIconClass","FooterBottom","finalIdentifier","identifier","identifierText","bottomLinks","copyright","hideIdentifier","platform","Footer","hideQuickLinks","DropdownRoot","setOpen","dropdownRef","buttonClassName","DropdownTopSection","DropdownList","DropdownItem","isActive","DropdownBottomSection","Dropdown","Portal","portalContainer","setPortalContainer","useLayoutEffect","enabled","targetContainer","containerClassName","createPortal","DEFAULT_SEARCH_PLACEHOLDER","DEFAULT_SEARCH_SR","DEFAULT_CLOSE_LABEL","fallbackKey","provided","fallback","toDomId","MobileTriggerButton","buttonProps","createFocusTrap","focusable","trap","first","last","active","ensureBackdrop","backdrop","owns","breakpoint","MainMenu","mobileNavId","mobile","mobileTriggerContainer","desktopNavRef","mobileNavRef","mobileBodyRef","mainListRefs","subListRefs","mainTriggerRefs","mobilePanelRefs","depth4Refs","depth4TriggerRefs","desktopEntries","desktop","mobileEntries","desktopActiveMain","setDesktopActiveMain","desktopActiveSub","setDesktopActiveSub","isMobileOpen","setIsMobileOpen","mobileActiveMain","setMobileActiveMain","openDepth3","setOpenDepth3","openDepth4","setOpenDepth4","searchQuery","setSearchQuery","mobileMenuPhase","setMobileMenuPhase","previousMobileOpenRef","mobileTransitionTimeoutRef","isMobileOpenRef","backdropInfoRef","useImperativeHandle","desktopItemMap","map","entry","activeDesktopItem","shouldShowBackdrop","closeDesktopMenu","handleBackdropClick","handler","nav","info","body","registerMainListRef","node","registerSubListRef","composite","mainKey","subKey","registerMainTriggerRef","registerPanelRef","registerDepth4Ref","registerDepth4TriggerRef","mainList","subList","handleDesktopMainClick","dropdown","firstIndex","section","firstSubKey","handleDesktopSubClick","desktopMainKeys","handleMainKeyDown","focusByIndex","idx","activeTrigger","targetPanel","bodyRef","openingTimeout","handleTransitionEnd","e","gnbWrap","navId","openGnb","closingTimeout","onMobileMenuOpen","onMobileMenuClose","handleMobileOpen","handleMobileClose","handleMobileBackdropClick","mobileTriggerContent","mobileTrigger","isValidElement","cloneElement","mobileTriggerNode","isMobileMenuVisible","shouldApplyMobileOpenClasses","handleMobileMainClick","firstPanel","panelKey","panelNode","mobilePanelsFlat","panel","panelIndex","currentKey","scrollTop","ownerKey","toggleDepth3","openDepth4Panel","wrap","closeDepth4Panel","trigger","current","handleSearchSubmit","trimmed","renderDesktopLeafList","hasDescription","leafKey","parentKey","content","renderDesktopBanner","banner","renderDesktopSubMenu","sectionEntry","renderDesktopSubLink","renderDesktopMainItem","triggerProps","toggleId","sectionEntries","sectionIndex","renderMobileDepth3Item","depth3Key","depth4","depth4Entries","depth4Index","renderMobilePanelItem","depth3","child","childIndex","renderMobilePanel","panelDomId","itemIndex","renderMobileMainItem","renderUtilityItem","desktopMenuContent","mobileMenuContent","util","service","desktopPortalId","mobilePortalId","MainMenuWithStatic","Slot$1","HeaderContext","useHeaderContext","MyGovContext","useMyGovContext","DEFAULT_HEADER_ID","DEFAULT_MOBILE_TRIGGER_PORTAL_ID","DEFAULT_DESKTOP_MENU_PORTAL_ID","DEFAULT_MOBILE_MENU_PORTAL_ID","HeaderComponent","openDropdownId","setOpenDropdownId","resolvedTriggerPortalId","mobileMenuTriggerPortalId","setDropdown","dropdownId","closeDropdowns","handleDocumentClick","handleKeyUp","lastScrollY","handleScroll","containerOffsetTop","scrollY","scrollDown","scrollUp","desktopMenuPortalId","mobileMenuPortalId","Container","Utilities","Children","UtilityItem","displayName","UtilityDropdown","dropdownProps","handleOpenChange","nextOpen","resolvedButtonText","itemClassName","dropdownClassName","Branding","logoHref","onLogoClick","logoAltText","Navi","mobileTriggerPortalId","NaviButtonSearch","NaviButtonLogin","anchorProps","NaviButtonJoin","NaviButtonLogout","myGovContext","MyGov","restButtonProps","name","remainingTime","remainingTimeLabel","onExtendTime","extendTimeLabel","_key","itemLabel","buttonItemProps","Header","HeaderMainMenu","mobileTriggerProps","allMenuButtonLabel","fallbackTrigger","triggerNode","TextList","jsx","TextListItem","number","HelpPanelContext","useHelpPanelContext","HelpPanel","openState","setOpenState","helpPanelRef","lastFocusedElementRef","previousIsOpenRef","childArray","triggerElements","panelChildren","elementType","HelpPanelTrigger","close","toggle","helpPanel","nextIsOpen","helpPanelClasses","HelpPanelContent","contentClasses","srOnlyTitle","HelpSection","sectionClasses","HelpLinkList","listClasses","iconPosition","HelpPanelClose","HelpRelatedService","serviceClasses","HelpServiceGroup","groupClasses","HelpTutorialTitle","titleClasses","HelpCoachProcess","processClasses","HelpCoachTask","isCurrent","expandText","steps","step","HelpPanelAction","actionClasses","HelpContentArea","areaClasses","InPageNavigation","activeSection","setActiveSection","hasAction","actionText","infoText","hasItems","calculateHeaderHeight","applyScroll","headerHeight","scrollContainer","scrollContainerRef","containerElement","containerRect","relativeTop","handleNavigationClick","updateActiveSection","isWindow","containerHeight","scrollHeight","topHeight","scrollBottom","sectionElements","firstSectionTop","newActiveSection","sectionHeight","sectionTop","caption","onActionClick","setRef","useMergeRefs","refs","refValue","LanguageSwitcherContext","useLanguageSwitcherContext","ctx","LanguageSwitcherRoot","currentValue","setCurrentValue","_ref","itemRefs","closeOnClickOutside","options","Trigger","currentLabel","opt","Menu","menuRef","menu","wrapper","menuRect","windowWidth","LanguageSwitcher","handleSelect","external","handleFocus","Link","linkClasses","preserveColorOnHover","linkTextClasses","underline","linkTarget","linkRel","linkTitle","Icon","icon","Masthead","ModalContext","ModalTitleContext","useModalContext","Slot","ModalRoot","_open","closeOnEsc","closeOnOverlayClick","usePortal","ModalTrigger","asChild","ModalOverlay","ModalContent","sectionId","generatedTitleId","titleId","setTitleId","titleContext","labelledBy","contentRef","dialogRef","contentNode","setContentNode","isInitialized","openTimeoutRef","focusTimeoutRef","getFocusableElements","ariaHidden","setInitialFocus","firstFocusable","handleContentMount","observer","frame","handleDialogMount","lastFocusable","activeElement","previousFocused","wasScrollLocked","wrapElement","wasInert","dialog","handleOverlayClick","clickedElement","rootClasses","ModalCloseIconButton","ModalHeader","ModalTitle","ModalDescription","ModalBody","hasScroll","setHasScroll","handleBodyMount","isScrollable","descriptionId","ModalFooter","ModalClose","Modal","Pagination","page","setPage","currentPage","defaultPage","clamp","totalPages","startPages","boundaryCount","endPages","siblingsStart","siblingCount","siblingsEnd","p","normalized","set","it","a","b","finalItems","curr","next","handlePrev","handlePage","isPrevDisabled","isNextDisabled","prevLabel","nextLabel","RadioGroupContext","Radio","radioClasses","radioGroup","autoId","isInGroup","groupValue","groupName","groupOnChange","uniqueName","defaultChecked","RadioChip","radioChipClasses","RadioGroup","DEFAULT_LABELS","ResizeItem","scale","Resize","currentScale","setCurrentScale","handleScaleChange","root","zoomValue","handleReset","scales","buttonContent","bottomContent","resetText","labels","Select","selectId","selectClasses","option","SideNavigationRoot","SideNavigationTitle","SideNavigationMenu","SideNavigationItem","SideNavigationSubItem","SideNavigationToggle","SideNavigationSubMenu","SideNavigationLink","SideNavigationPopupToggle","button","popupSubmenu","SideNavigationPopup","popupRef","popupElement","handleFocusOut","relatedTarget","toggleButton","SideNavigationPopupTitle","SideNavigationPopupMenu","SideNavigation","SkipLink","targetId","StepIndicator","getStepStatus","stepList","status","stepKey","currentStepText","pageTitle","StructuredList","StructuredListItem","StructuredListHeader","StructuredListBadge","StructuredListBody","StructuredListContent","StructuredListTitle","StructuredListDescription","StructuredListMeta","StructuredListAction","StructuredListFooter","StructuredListTag","StructuredListButtons","TableRoot","wrapperClasses","scroll","mobScroll","TableCaption","TableColgroup","TableCol","TableThead","TableTbody","TableTFoot","TableTr","TableTh","TableTd","Table","TabContext","useTabContext","Tab","triggerRefs","triggerOrder","_activeValue","setActiveValue","onValueChange","element","v","TabList","tabClasses","TabTrigger","triggerIndex","setTriggerIndex","activeValue","handleRef","registerTrigger","totalTriggers","newIndex","targetValue","tabId","TabContent","TabPanel","panelClassName","Tag","tagClassName","_variant","linkProps","spanProps","onDelete","deleteDisabled","TagWrap","wrapClassName","Textarea","textareaId","currentLength","shouldShowCount","showCount","maxLength","textareaClasses","countTotal","TextInput","showPassword","setShowPassword","internalType","setInternalType","shouldShowPasswordToggle","showPasswordToggle","shouldShowClearButton","showClearButton","hasButtons","inputWrapperClasses","handleClear","handlePasswordToggle","ToggleSwitch","providedId","internalChecked","handleCheckedChange","handleBlur","Tooltip","setPosition","triggerRef","calculatePosition","tooltipHeight","tooltipWidth","itemTop","itemLeft","itemRight","itemHeight","itemWidth","halfWindowWidth","halfWindowHeight","tooltipTop","tooltipLeft","isTop","isBottom","isLeft","isRight","mobileSmall","showTooltip","hideTooltip","handleEscape","handleMouseEnter","childElement","handleMouseLeave","mergedRef","TutorialPanelContext","useTutorialPanelContext","TutorialPanelRoot","internalActiveTab","setInternalActiveTab","activeTab","defaultActiveTab","onTabChange","helpWrapRef","expandButtonRef","collapseButtonRef","lastFocusedButtonRef","intersectionObserverRef","getWindowSize","setupPadding","topBannerHeight","defaultPadding","hiddenBannerPadding","expandButton","expandBox","collapseButton","applyPadding","padding","observeMastHead","topBanner","helpWrap","innerContainer","newIsOpen","TutorialPanelTrigger","renderIcon","iconName","TutorialPanelContainer","TutorialPanelTabs","TutorialPanelTabPanel","TutorialPanelHelpContent","helpContent","relatedServices","linkIndex","serviceIndex","TutorialPanelTutorialContent","stepItem","stepIndex","onTutorialStop","stopButtonText","TutorialPanelClose","TutorialPanel"],"sources":["../src/utils/classNames.ts","../src/hooks/use-uncontrolled.ts","../src/components/Accordion/AccordionContext.tsx","../src/components/Accordion/AccordionItemContext.tsx","../src/components/Accordion/AccordionItem.tsx","../src/components/Accordion/AccordionHeader.tsx","../src/components/Accordion/AccordionPanel.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Badge/Badge.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Button/Button.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/CoachMark/CoachMark.tsx","../src/components/ContextualHelp/ContextualHelp.tsx","../src/components/CriticalAlert/CriticalAlert.tsx","../src/components/DateInput/DateInput.tsx","../src/components/Disclosure/Disclosure.tsx","../src/components/Spinner/Spinner.tsx","../src/components/FileUpload/FileUpload.tsx","../src/components/Identifier/Identifier.tsx","../src/components/Footer/Footer.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Portal/Portal.tsx","../src/components/MainMenu/MainMenu.tsx","../src/components/Header/Header.tsx","../src/components/TextList/TextList.tsx","../src/components/HelpPanel/HelpPanel.tsx","../src/components/InPageNavigation/InPageNavigation.tsx","../src/hooks/use-merge-refs.ts","../src/components/LanguageSwitcher/LanguageSwitcher.tsx","../src/components/Link/Link.tsx","../src/components/Masthead/Masthead.tsx","../src/components/Modal/ModalContext.tsx","../src/components/Modal/Modal.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Radio/Radio.tsx","../src/components/Resize/Resize.tsx","../src/components/Select/Select.tsx","../src/components/SideNavigation/SideNavigation.tsx","../src/components/SkipLink/SkipLink.tsx","../src/components/StepIndicator/StepIndicator.tsx","../src/components/StructuredList/StructuredList.tsx","../src/components/Table/Table.tsx","../src/components/Tab/Tab.tsx","../src/components/Tag/Tag.tsx","../src/components/Textarea/Textarea.tsx","../src/components/TextInput/TextInput.tsx","../src/components/ToggleSwitch/ToggleSwitch.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/TutorialPanel/TutorialPanel.tsx"],"sourcesContent":["type ClassValue = string | number | boolean | undefined | null | ClassRecord | ClassValue[]\n\ninterface ClassRecord {\n [key: string]: boolean | undefined | null\n}\n\nexport function classNames(...classes: ClassValue[]): string {\n const result: string[] = []\n\n for (const cls of classes) {\n if (!cls) continue\n\n if (typeof cls === 'string' || typeof cls === 'number') {\n result.push(String(cls))\n } else if (typeof cls === 'object' && !Array.isArray(cls)) {\n for (const [key, value] of Object.entries(cls)) {\n if (value) {\n result.push(key)\n }\n }\n } else if (Array.isArray(cls)) {\n const nested = classNames(...cls)\n if (nested) {\n result.push(nested)\n }\n }\n }\n\n return result.join(' ')\n}\n","import { useState } from 'react'\n\nexport interface UseUncontrolledOptions<T> {\n /**\n * 제어 상태에서 사용할 값\n * Value when component is in controlled mode\n */\n value?: T\n\n /**\n * 비제어 상태일 때 사용할 초기 값\n * Initial value when component is in uncontrolled mode\n */\n defaultValue?: T\n\n /**\n * value와 defaultValue가 제공되지 않았을 때 사용할 최종 기본 값\n * Fallback value when both `value` and `defaultValue` are undefined\n */\n finalValue?: T\n\n /**\n * 제어 상태일 때 호출되는 변경 핸들러\n * Change handler used in controlled mode\n */\n onChange?: (value: T, ...payload: any[]) => void\n}\n\nexport type UseUncontrolledReturnValue<T> = [\n /**\n * 현재 값\n * Current value (from `value` if controlled, internal state if uncontrolled)\n */\n T,\n\n /**\n * 값을 업데이트하는 함수\n * Function to update the value (calls `onChange` or updates internal state)\n */\n (value: T, ...payload: any[]) => void,\n\n /**\n * 현재 상태가 제어 상태인지 여부\n * Whether the component is in controlled mode (`true`) or uncontrolled (`false`)\n */\n boolean\n]\n\n/**\n * 제어 상태와 비제어 상태를 모두 지원하는 커스텀 훅\n * Custom hook that supports both controlled and uncontrolled usage\n */\nexport function useUncontrolled<T>({\n value,\n defaultValue,\n finalValue,\n onChange = () => {}\n}: UseUncontrolledOptions<T>): UseUncontrolledReturnValue<T> {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue !== undefined ? defaultValue : finalValue)\n\n const handleUncontrolledChange = (val: T, ...payload: any[]) => {\n setUncontrolledValue(val)\n onChange?.(val, ...payload)\n }\n\n // 제어 상태인 경우: 외부 value와 onChange를 그대로 사용\n // Controlled mode: use external `value` and `onChange` directly\n if (value !== undefined) {\n return [value as T, onChange, true]\n }\n\n // 비제어 상태인 경우: 내부 상태를 사용하여 값 관리\n // Uncontrolled mode: use internal state\n return [uncontrolledValue as T, handleUncontrolledChange, false]\n}\n","import { createContext, useContext } from 'react'\nimport { AccordionContextValue } from './Accordion.types'\n\nexport const AccordionContext = createContext<AccordionContextValue | null>(null)\n\nexport const useAccordionContext = () => {\n const context = useContext(AccordionContext)\n if (!context) {\n throw new Error('Accordion 하위 컴포넌트는 Accordion 컴포넌트 내부에서 사용되어야 합니다.')\n }\n return context\n}\n","import { createContext, useContext } from 'react'\n\nexport interface AccordionItemContextValue {\n /** 아이템 값 */\n value: string\n /** 열림 상태 */\n isExpanded: boolean\n /** 아이템 고유 식별자 */\n itemId: string\n}\n\nexport const AccordionItemContext = createContext<AccordionItemContextValue | null>(null)\n\nexport const useAccordionItemContext = () => {\n const context = useContext(AccordionItemContext)\n if (!context) {\n throw new Error('AccordionHeader와 AccordionPanel은 AccordionItem 컴포넌트 내부에서 사용되어야 합니다.')\n }\n return context\n}\n","import { classNames } from '@/utils'\nimport { forwardRef, useId } from 'react'\nimport { useAccordionContext } from './AccordionContext'\nimport { AccordionItemContext } from './AccordionItemContext'\n\nimport { AccordionItemProps } from './Accordion.types'\n\n/**\n * KRDS AccordionItem Component ( Pattern)\n * @param value 아이템 값 (고유 식별자)\n * @param children 자식 컴포넌트들 (Header와 Panel)\n */\nconst AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(({ value, children, className = '', ...props }, ref) => {\n const { expandedValues } = useAccordionContext()\n const isExpanded = expandedValues.includes(value)\n const itemId = useId()\n\n const itemClasses = classNames('accordion-item', isExpanded && 'active', className)\n\n const itemContextValue = {\n value,\n isExpanded,\n itemId\n }\n\n return (\n <AccordionItemContext.Provider value={itemContextValue}>\n <div className={itemClasses} ref={ref} {...props}>\n {children}\n </div>\n </AccordionItemContext.Provider>\n )\n})\n\nAccordionItem.displayName = 'AccordionItem'\n\nexport default AccordionItem\n","import { classNames } from '@/utils'\nimport { forwardRef } from 'react'\nimport { useAccordionContext } from './AccordionContext'\nimport { useAccordionItemContext } from './AccordionItemContext'\n\nimport { AccordionHeaderProps } from './Accordion.types'\n\n/**\n * KRDS AccordionHeader Component\n * @param children 헤더 제목\n * @param onClick 커스텀 클릭 핸들러\n */\nconst AccordionHeader = forwardRef<HTMLHeadingElement, AccordionHeaderProps>(({ children, onClick, className = '', ...props }, ref) => {\n const { onToggle } = useAccordionContext()\n const { value: itemValue, isExpanded, itemId } = useAccordionItemContext()\n const headerId = `accordion-header-${itemId}`\n const panelId = `accordion-panel-${itemId}`\n\n const buttonClasses = classNames('btn-accordion', isExpanded && 'active')\n\n const handleClick = () => {\n onToggle(itemValue)\n onClick?.()\n }\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n handleClick()\n }\n }\n\n return (\n <h5 className={classNames('accordion-header', className)} ref={ref} {...props}>\n <button\n type=\"button\"\n id={headerId}\n className={buttonClasses}\n aria-expanded={isExpanded}\n aria-controls={panelId}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {children}\n </button>\n </h5>\n )\n})\n\nAccordionHeader.displayName = 'AccordionHeader'\n\nexport default AccordionHeader\n","import { classNames } from '@/utils'\nimport { forwardRef } from 'react'\n\nimport { AccordionPanelProps } from './Accordion.types'\nimport { useAccordionItemContext } from './AccordionItemContext'\n\n/**\n * KRDS AccordionPanel Component\n * @param children 패널 내용\n */\nconst AccordionPanel = forwardRef<HTMLDivElement, AccordionPanelProps>(({ children, className = '', ...props }, ref) => {\n const { itemId } = useAccordionItemContext()\n const headerId = `accordion-header-${itemId}`\n const panelId = `accordion-panel-${itemId}`\n\n return (\n <div id={panelId} aria-labelledby={headerId} className={classNames('accordion-collapse', className)} ref={ref} {...props}>\n <div className=\"accordion-body\">{children}</div>\n </div>\n )\n})\n\nAccordionPanel.displayName = 'AccordionPanel'\n\nexport default AccordionPanel\n","import { classNames } from '@/utils'\nimport { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { forwardRef, useCallback } from 'react'\nimport { AccordionContext } from './AccordionContext'\nimport AccordionItem from './AccordionItem'\nimport AccordionHeader from './AccordionHeader'\nimport AccordionPanel from './AccordionPanel'\nimport { AccordionProps } from './Accordion.types'\n\n/**\n * KRDS Accordion Component ( Pattern)\n * @param variant 아코디언 스타일 변형 ('default' | 'line')\n * @param allowMultiple 다중 선택 허용 여부\n * @param value 열린 아이템 값 배열 (제어 상태)\n * @param onChange 열린 아이템 변경 핸들러\n * @param defaultValue 초기 열린 아이템 값 배열 (비제어 상태)\n * @param children 자식 컴포넌트들\n */\nconst AccordionRoot = forwardRef<HTMLDivElement, AccordionProps>(\n ({ variant = 'default', allowMultiple = true, value, onChange, defaultValue = [], children, className = '', ...props }, ref) => {\n const [expandedValues, setExpandedValues] = useUncontrolled<string[]>({\n value,\n defaultValue,\n finalValue: [],\n onChange\n })\n\n const handleToggle = useCallback(\n (itemValue: string) => {\n const isCurrentlyExpanded = expandedValues.includes(itemValue)\n\n if (allowMultiple) {\n const newExpandedValues = isCurrentlyExpanded ? expandedValues.filter(val => val !== itemValue) : [...expandedValues, itemValue]\n setExpandedValues(newExpandedValues)\n } else {\n const newExpandedValues = isCurrentlyExpanded ? [] : [itemValue]\n setExpandedValues(newExpandedValues)\n }\n },\n [expandedValues, allowMultiple, setExpandedValues]\n )\n\n const accordionClasses = classNames('krds-accordion', variant === 'line' && 'type-line', className)\n\n const contextValue = {\n expandedValues,\n onToggle: handleToggle,\n variant\n }\n\n return (\n <AccordionContext.Provider value={contextValue}>\n <div className={accordionClasses} ref={ref} {...props}>\n {children}\n </div>\n </AccordionContext.Provider>\n )\n }\n)\n\nAccordionRoot.displayName = 'AccordionRoot'\n\nconst Accordion = Object.assign(AccordionRoot, {\n Root: AccordionRoot,\n Item: AccordionItem,\n Header: AccordionHeader,\n Panel: AccordionPanel\n})\n\nAccordion.displayName = 'Accordion'\n\nexport default Accordion\n","import { classNames } from '@/utils'\nimport { forwardRef } from 'react'\nimport { BadgeProps, BadgeWrapperProps } from './Badge.types'\n\n/**\n * KRDS Badge 컴포넌트\n * @param variant 배지 종류 ('outline' | 'filled' | 'light')\n * @param color 배지 색상 ('primary' | 'secondary' | 'gray' | 'point' | 'danger' | 'warning' | 'success' | 'information' | 'disabled')\n * @param size 배지 크기 ('small' | 'medium' | 'large')\n * @param rounded 배지 모양 원형 여부\n * @param children 배지 내용\n * @param className 추가 커스텀 클래스\n */\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n ({ variant = 'outline', color = 'primary', size = 'medium', rounded = false, children, className, ...props }, ref) => {\n const variantColorClass = variant === 'outline' ? `outline-${color}` : variant === 'filled' ? `bg-${color}` : `bg-light-${color}`\n\n return (\n <span ref={ref} className={classNames('krds-badge', size, variantColorClass, rounded && 'number', className)} {...props}>\n {children}\n </span>\n )\n }\n)\n\nBadge.displayName = 'Badge'\n\n/**\n * KRDS Badge Wrapper 컴포넌트\n * @param children 배지 컴포넌트들\n * @param className 추가 커스텀 클래스\n */\nexport const BadgeWrapper = forwardRef<HTMLDivElement, BadgeWrapperProps>(({ children, className, ...props }, ref) => {\n return (\n <div ref={ref} className={classNames('krds-badge-wrap', className)} {...props}>\n {children}\n </div>\n )\n})\n\nBadgeWrapper.displayName = 'BadgeWrapper'\n","import { classNames } from '@/utils'\nimport React from 'react'\nimport { BreadcrumbProps } from './Breadcrumb.types'\n\n/**\n * KRDS Breadcrumb Component\n * @param items 브레드크럼 아이템 목록 ('home' | 'link' | 'disabled')\n * @param className 추가 클래스명\n * @param ariaLabel 접근성 레이블\n */\nexport const Breadcrumb = React.forwardRef<HTMLElement, BreadcrumbProps>(({ items, className, ariaLabel = '현재 경로', ...props }, ref) => {\n return (\n <nav ref={ref} className={classNames('krds-breadcrumb-wrap', className)} aria-label={ariaLabel} {...props}>\n <ol className=\"breadcrumb\" role=\"list\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1\n const liClassName = classNames(index === 0 && 'home')\n return (\n <li key={index} className={liClassName || undefined}>\n <a\n href={item.disabled ? undefined : item.href}\n className={classNames('txt')}\n onClick={item.disabled ? e => e.preventDefault() : undefined}\n aria-current={isLast ? 'page' : undefined}\n aria-disabled={item.disabled ? 'true' : undefined}\n >\n {item.text}\n </a>\n </li>\n )\n })}\n </ol>\n </nav>\n )\n})\n\nBreadcrumb.displayName = 'Breadcrumb'\n","import { classNames } from '@/utils'\nimport React, { ComponentPropsWithRef, ElementType, forwardRef } from 'react'\nimport { ButtonProps } from './Button.types'\n\ntype PolymorphicRef<T extends ElementType> = ComponentPropsWithRef<T>['ref']\n\ntype PolymorphicButtonComponent = <T extends ElementType = 'button'>(\n props: ButtonProps<T> & { ref?: PolymorphicRef<T> }\n) => React.ReactElement | null\n\n/**\n * KRDS Button Component\n * @param variant button variant ('primary' | 'secondary' | 'tertiary' | 'text' | 'icon')\n * @param size button size ('xsmall' | 'small' | 'medium' | 'large' | 'xlarge')\n * @param className custom class name\n */\nconst ButtonImplementation = <T extends ElementType = 'button'>(\n { as, children, variant = 'primary', size = 'large', className = '', role = 'button', disabled = false, ...restProps }: ButtonProps<T>,\n ref: PolymorphicRef<T>\n) => {\n const Component = as || 'button'\n const typeProp = restProps.type || (Component === 'button' ? 'button' : undefined)\n\n const buttonClasses = classNames('krds-btn', variant, size, disabled && 'disabled', className)\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n if (!disabled) {\n ;(event.currentTarget as HTMLButtonElement).click()\n }\n }\n }\n\n return (\n <Component\n ref={ref}\n className={buttonClasses}\n disabled={disabled}\n aria-disabled={Component !== 'button' ? disabled : undefined}\n onKeyDown={handleKeyDown}\n role={role}\n type={typeProp}\n {...restProps}\n >\n {children}\n </Component>\n )\n}\n\nconst ButtonComponent = forwardRef(ButtonImplementation as any)\nButtonComponent.displayName = 'Button'\nconst Button = ButtonComponent as PolymorphicButtonComponent\n\nexport default Button\n","import { useState, useRef, useEffect, forwardRef, useMemo, useCallback } from 'react'\nimport { CalendarProps, CalendarDate } from './Calendar.types'\nimport { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { classNames } from '@/utils'\n\n/**\n * KRDS Calendar Component\n * @param mode 달력 모드 ('single' | 'range')\n * @param position 달력 위치 ('top' | 'bottom')\n * @param value 현재 선택된 날짜 (단일 선택)\n * @param defaultValue 기본 선택된 날짜 (단일 선택)\n * @param startDate 범위 선택 시작 날짜\n * @param endDate 범위 선택 종료 날짜\n * @param defaultStartDate 기본 범위 선택 시작 날짜\n * @param defaultEndDate 기본 범위 선택 종료 날짜\n * @param disabledDates 비활성화할 날짜 배열\n * @param eventDates 이벤트가 있는 날짜 배열\n * @param isOpen 달력 열림 상태\n * @param defaultIsOpen 기본 달력 열림 상태\n * @param label 입력 필드 레이블\n * @param placeholder 입력 필드 placeholder\n * @param disabled 비활성화 여부\n * @param readOnly 읽기 전용 여부\n */\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n (\n {\n mode = 'single',\n position = 'bottom',\n value,\n defaultValue = '',\n startDate,\n endDate,\n defaultStartDate = '',\n defaultEndDate = '',\n disabledDates = [],\n eventDates = [],\n isOpen,\n defaultIsOpen = false,\n onOpenChange,\n onChange,\n onRangeChange,\n onYearChange,\n onMonthChange,\n onTodayClick,\n onConfirm,\n onCancel,\n label = '기간선택',\n inputId = 'cal',\n placeholder = 'YYYY.MM.DD',\n startPlaceholder = '시작날짜',\n endPlaceholder = '종료날짜',\n startTitle = '시작날짜 입력',\n endTitle = '종료날짜 입력',\n openButtonLabel = '달력 열기',\n prevButtonLabel = '이전 달',\n nextButtonLabel = '다음 달',\n yearSelectLabel = '연도 선택',\n monthSelectLabel = '월 선택',\n todayButtonText = '오늘',\n cancelButtonText = '취소',\n confirmButtonText = '확인',\n disabled = false,\n readOnly = false,\n className: _className,\n ...rest\n },\n ref\n ) => {\n const [internalIsOpen, setInternalIsOpen] = useUncontrolled({\n value: isOpen,\n defaultValue: defaultIsOpen,\n finalValue: false,\n onChange: onOpenChange\n })\n\n const [internalValue, setInternalValue] = useUncontrolled({\n value,\n defaultValue,\n finalValue: '',\n onChange\n })\n\n const [internalStartDate, setInternalStartDate] = useUncontrolled({\n value: startDate,\n defaultValue: defaultStartDate,\n finalValue: '',\n onChange: newStartDate => {\n if (onRangeChange) {\n onRangeChange(newStartDate, internalEndDate)\n }\n }\n })\n\n const [internalEndDate, setInternalEndDate] = useUncontrolled({\n value: endDate,\n defaultValue: defaultEndDate,\n finalValue: '',\n onChange: newEndDate => {\n if (onRangeChange) {\n onRangeChange(internalStartDate, newEndDate)\n }\n }\n })\n\n const parseDate = useCallback((dateString: string): Date | null => {\n if (!dateString) return null\n const parts = dateString.split('.')\n if (parts.length !== 3) return null\n\n const year = parseInt(parts[0])\n const month = parseInt(parts[1])\n const day = parseInt(parts[2])\n\n if (isNaN(year) || isNaN(month) || isNaN(day)) return null\n if (month < 1 || month > 12) return null\n if (day < 1 || day > 31) return null\n\n return new Date(year, month - 1, day)\n }, [])\n\n const formatDate = (date: Date): string => {\n return `${date.getFullYear()}.${(date.getMonth() + 1).toString().padStart(2, '0')}.${date.getDate().toString().padStart(2, '0')}`\n }\n\n const getCurrentYearMonth = useCallback((): { year: number; month: number } => {\n const today = new Date()\n\n if (mode === 'single' && internalValue) {\n const selectedDate = parseDate(internalValue)\n if (selectedDate) {\n return {\n year: selectedDate.getFullYear(),\n month: selectedDate.getMonth() + 1\n }\n }\n } else if (mode === 'range' && internalStartDate) {\n const selectedDate = parseDate(internalStartDate)\n if (selectedDate) {\n return {\n year: selectedDate.getFullYear(),\n month: selectedDate.getMonth() + 1\n }\n }\n }\n\n return {\n year: today.getFullYear(),\n month: today.getMonth() + 1\n }\n }, [mode, internalValue, internalStartDate, parseDate])\n\n const [currentYearMonth, setCurrentYearMonth] = useState(getCurrentYearMonth)\n\n useEffect(() => {\n const newYearMonth = getCurrentYearMonth()\n setCurrentYearMonth(newYearMonth)\n }, [internalValue, internalStartDate, mode, getCurrentYearMonth])\n\n const [yearDropdownOpen, setYearDropdownOpen] = useState(false)\n const [monthDropdownOpen, setMonthDropdownOpen] = useState(false)\n\n const [clickCount, setClickCount] = useState(0)\n const [startTd, setStartTd] = useState<CalendarDate | null>(null)\n\n const calendarWrapRef = useRef<HTMLDivElement>(null)\n\n const availableYears = useMemo(() => {\n const currentYear = new Date().getFullYear()\n return Array.from({ length: 101 }, (_, i) => {\n const year = currentYear - 50 + i\n return {\n value: year,\n label: `${year}년`,\n isActive: year === currentYearMonth.year,\n isDisabled: false\n }\n })\n }, [currentYearMonth.year])\n\n const availableMonths = useMemo(() => {\n return Array.from({ length: 12 }, (_, i) => {\n const month = i + 1\n return {\n value: month,\n label: `${month.toString().padStart(2, '0')}월`,\n isActive: month === currentYearMonth.month,\n isDisabled: false\n }\n })\n }, [currentYearMonth.month])\n\n const calendarDates = useMemo((): CalendarDate[] => {\n const { year, month } = currentYearMonth\n const today = new Date()\n const firstDay = new Date(year, month - 1, 1)\n const lastDay = new Date(year, month, 0)\n const firstDayOfWeek = firstDay.getDay()\n const daysInMonth = lastDay.getDate()\n\n const dates: CalendarDate[] = []\n\n const prevMonth = month === 1 ? 12 : month - 1\n const prevYear = month === 1 ? year - 1 : year\n const prevMonthLastDay = new Date(prevYear, prevMonth, 0).getDate()\n\n for (let i = firstDayOfWeek - 1; i >= 0; i--) {\n const day = prevMonthLastDay - i\n const dateString = `${prevYear}.${prevMonth.toString().padStart(2, '0')}.${day.toString().padStart(2, '0')}`\n\n dates.push({\n year: prevYear,\n month: prevMonth,\n day,\n isOld: true,\n isDayOff: (firstDayOfWeek - 1 - i) % 7 === 0, // Sunday\n isDisabled: disabledDates.includes(dateString),\n hasEvent: eventDates.includes(dateString)\n })\n }\n\n for (let day = 1; day <= daysInMonth; day++) {\n const date = new Date(year, month - 1, day)\n const dayOfWeek = date.getDay()\n const dateString = `${year}.${month.toString().padStart(2, '0')}.${day.toString().padStart(2, '0')}`\n const isToday = year === today.getFullYear() && month === today.getMonth() + 1 && day === today.getDate()\n\n dates.push({\n year,\n month,\n day,\n isToday,\n isDayOff: dayOfWeek === 0, // Sunday\n isDisabled: disabledDates.includes(dateString),\n hasEvent: eventDates.includes(dateString)\n })\n }\n\n const remainingCells = 42 - dates.length\n const nextMonth = month === 12 ? 1 : month + 1\n const nextYear = month === 12 ? year + 1 : year\n\n for (let day = 1; day <= remainingCells; day++) {\n const dateString = `${nextYear}.${nextMonth.toString().padStart(2, '0')}.${day.toString().padStart(2, '0')}`\n\n dates.push({\n year: nextYear,\n month: nextMonth,\n day,\n isNew: true,\n isDayOff: dates.length % 7 === 0,\n isDisabled: disabledDates.includes(dateString),\n hasEvent: eventDates.includes(dateString)\n })\n }\n\n return dates\n }, [currentYearMonth, disabledDates, eventDates])\n\n const handleOpenCalendar = () => {\n if (disabled || readOnly) return\n setInternalIsOpen(true)\n\n setTimeout(() => {\n calendarWrapRef.current?.focus()\n }, 50)\n }\n\n const handleCloseCalendar = useCallback(() => {\n setInternalIsOpen(false)\n setYearDropdownOpen(false)\n setMonthDropdownOpen(false)\n }, [setInternalIsOpen])\n\n const handlePrevMonth = () => {\n const newMonth = currentYearMonth.month === 1 ? 12 : currentYearMonth.month - 1\n const newYear = currentYearMonth.month === 1 ? currentYearMonth.year - 1 : currentYearMonth.year\n\n setCurrentYearMonth({ year: newYear, month: newMonth })\n onYearChange?.(newYear)\n onMonthChange?.(newMonth)\n }\n\n const handleNextMonth = () => {\n const newMonth = currentYearMonth.month === 12 ? 1 : currentYearMonth.month + 1\n const newYear = currentYearMonth.month === 12 ? currentYearMonth.year + 1 : currentYearMonth.year\n\n setCurrentYearMonth({ year: newYear, month: newMonth })\n onYearChange?.(newYear)\n onMonthChange?.(newMonth)\n }\n\n const handleYearSelect = (yearItem: { value: number; label: string; isDisabled?: boolean }) => {\n if (yearItem.isDisabled) return\n\n setCurrentYearMonth(prev => ({ ...prev, year: yearItem.value }))\n setYearDropdownOpen(false)\n onYearChange?.(yearItem.value)\n }\n\n const handleMonthSelect = (monthItem: { value: number; label: string; isDisabled?: boolean }) => {\n if (monthItem.isDisabled) return\n\n setCurrentYearMonth(prev => ({ ...prev, month: monthItem.value }))\n setMonthDropdownOpen(false)\n onMonthChange?.(monthItem.value)\n }\n\n const handleDateClick = (date: CalendarDate) => {\n if (date.isDisabled || date.isOld || date.isNew) return\n\n const dateString = `${date.year}.${date.month.toString().padStart(2, '0')}.${date.day.toString().padStart(2, '0')}`\n\n if (mode === 'single') {\n setInternalValue(dateString)\n } else {\n const currentDate = new Date(date.year, date.month - 1, date.day)\n\n if (startTd) {\n const startDate = new Date(startTd.year, startTd.month - 1, startTd.day)\n if (currentDate < startDate) {\n setInternalStartDate(dateString)\n setInternalEndDate('')\n setStartTd(date)\n return\n }\n }\n\n setClickCount(clickCount + 1)\n\n if (clickCount % 2 === 0) {\n setInternalStartDate(dateString)\n setInternalEndDate('')\n setStartTd(date)\n } else {\n setInternalEndDate(dateString)\n setStartTd(null)\n }\n }\n }\n\n const handleTodayClick = () => {\n const today = new Date()\n const todayString = formatDate(today)\n\n if (mode === 'single') {\n setInternalValue(todayString)\n } else {\n setInternalStartDate(todayString)\n setInternalEndDate(todayString)\n }\n\n setCurrentYearMonth({\n year: today.getFullYear(),\n month: today.getMonth() + 1\n })\n setClickCount(0)\n setStartTd(null)\n\n onTodayClick?.()\n }\n\n const handleConfirm = () => {\n handleCloseCalendar()\n onConfirm?.()\n }\n\n const handleCancel = () => {\n handleCloseCalendar()\n onCancel?.()\n }\n\n const handleInputChange = (newValue: string) => {\n setInternalValue(newValue)\n\n const parsedDate = parseDate(newValue)\n if (parsedDate) {\n setCurrentYearMonth({\n year: parsedDate.getFullYear(),\n month: parsedDate.getMonth() + 1\n })\n }\n }\n\n const handleStartDateChange = (newValue: string) => {\n setInternalStartDate(newValue)\n\n const parsedDate = parseDate(newValue)\n if (parsedDate) {\n setCurrentYearMonth({\n year: parsedDate.getFullYear(),\n month: parsedDate.getMonth() + 1\n })\n }\n }\n\n const handleEndDateChange = (newValue: string) => {\n setInternalEndDate(newValue)\n\n const parsedDate = parseDate(newValue)\n if (parsedDate) {\n setCurrentYearMonth({\n year: parsedDate.getFullYear(),\n month: parsedDate.getMonth() + 1\n })\n }\n }\n\n const isDateInPeriod = (date: CalendarDate): { isPeriod: boolean; isStart: boolean; isEnd: boolean } => {\n if (mode === 'single') {\n const isSelected =\n internalValue === `${date.year}.${date.month.toString().padStart(2, '0')}.${date.day.toString().padStart(2, '0')}`\n return { isPeriod: isSelected, isStart: isSelected, isEnd: isSelected }\n } else {\n const dateString = `${date.year}.${date.month.toString().padStart(2, '0')}.${date.day.toString().padStart(2, '0')}`\n const isStart = internalStartDate === dateString\n const isEnd = internalEndDate === dateString\n\n if (!internalEndDate) {\n return { isPeriod: isStart, isStart, isEnd: isEnd }\n }\n\n const currentDate = new Date(date.year, date.month - 1, date.day)\n const startParts = internalStartDate.split('.').map(Number)\n const endParts = internalEndDate.split('.').map(Number)\n const startDate = new Date(startParts[0], startParts[1] - 1, startParts[2])\n const endDate = new Date(endParts[0], endParts[1] - 1, endParts[2])\n\n const isPeriod = currentDate >= startDate && currentDate <= endDate\n\n return { isPeriod: isPeriod, isStart, isEnd }\n }\n }\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (!internalIsOpen) return\n\n const target = event.target as Element\n if (!target.closest('.calendar-conts')) {\n handleCloseCalendar()\n }\n }\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && internalIsOpen) {\n handleCloseCalendar()\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n document.addEventListener('click', handleClickOutside)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n document.removeEventListener('click', handleClickOutside)\n }\n }, [internalIsOpen])\n\n return (\n <div className=\"form-group\" ref={ref} {...rest}>\n <div className=\"form-tit\">\n <label htmlFor={inputId}>{label}</label>\n </div>\n <div className=\"form-conts calendar-conts\">\n <div className=\"calendar-input\">\n {mode === 'single' ? (\n <input\n type=\"text\"\n className=\"krds-input datepicker cal\"\n placeholder={placeholder}\n id={inputId}\n value={internalValue}\n onChange={e => handleInputChange(e.target.value)}\n disabled={disabled}\n readOnly={readOnly}\n />\n ) : (\n <ul className=\"input-group range set\">\n <li>\n <input\n type=\"text\"\n className=\"krds-input datepicker\"\n placeholder={startPlaceholder}\n title={startTitle}\n value={internalStartDate}\n onChange={e => handleStartDateChange(e.target.value)}\n disabled={disabled}\n readOnly={readOnly}\n />\n </li>\n <li className=\"mark\">-</li>\n <li>\n <input\n type=\"text\"\n className=\"krds-input datepicker\"\n placeholder={endPlaceholder}\n title={endTitle}\n value={internalEndDate}\n onChange={e => handleEndDateChange(e.target.value)}\n disabled={disabled}\n readOnly={readOnly}\n />\n </li>\n </ul>\n )}\n <button\n type=\"button\"\n className=\"krds-btn medium icon form-btn-datepicker\"\n onClick={handleOpenCalendar}\n aria-expanded={internalIsOpen}\n disabled={disabled}\n >\n <span className=\"sr-only\">{openButtonLabel}</span>\n <i className=\"svg-icon ico-calendar\"></i>\n </button>\n </div>\n\n <div className={classNames('krds-calendar-area', { active: internalIsOpen })}>\n <div\n className={classNames('calendar-wrap', position, { single: mode === 'single' })}\n aria-label=\"달력\"\n tabIndex={0}\n ref={calendarWrapRef}\n >\n <div className=\"calendar-head\">\n <button type=\"button\" className=\"btn-cal-move prev\" onClick={handlePrevMonth}>\n <span className=\"sr-only\">{prevButtonLabel}</span>\n </button>\n\n <div className=\"calendar-switch-wrap\">\n <div className=\"calendar-drop-down\">\n <button\n type=\"button\"\n className=\"btn-cal-switch year\"\n aria-label={yearSelectLabel}\n onClick={() => {\n setYearDropdownOpen(!yearDropdownOpen)\n setMonthDropdownOpen(false)\n }}\n aria-expanded={yearDropdownOpen}\n >\n {currentYearMonth.year}년\n </button>\n <div\n className={classNames('calendar-select calendar-year-wrap', {\n active: yearDropdownOpen\n })}\n >\n <ul className=\"sel year\" role=\"listbox\">\n {availableYears.map(yearItem => (\n <li key={yearItem.value} role=\"none\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={yearItem.value === currentYearMonth.year}\n className={classNames({\n active: yearItem.value === currentYearMonth.year\n })}\n onClick={() => handleYearSelect(yearItem)}\n disabled={yearItem.isDisabled}\n >\n {yearItem.label}\n </button>\n </li>\n ))}\n </ul>\n </div>\n </div>\n\n <div className=\"calendar-drop-down\">\n <button\n type=\"button\"\n className=\"btn-cal-switch month\"\n aria-label={monthSelectLabel}\n onClick={() => {\n setMonthDropdownOpen(!monthDropdownOpen)\n setYearDropdownOpen(false)\n }}\n aria-expanded={monthDropdownOpen}\n >\n {currentYearMonth.month.toString().padStart(2, '0')}월\n </button>\n <div\n className={classNames('calendar-select calendar-mon-wrap', {\n active: monthDropdownOpen\n })}\n >\n <ul className=\"sel month\" role=\"listbox\">\n {availableMonths.map(monthItem => (\n <li key={monthItem.value} role=\"none\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={monthItem.value === currentYearMonth.month}\n className={classNames({\n active: monthItem.value === currentYearMonth.month\n })}\n onClick={() => handleMonthSelect(monthItem)}\n disabled={monthItem.isDisabled}\n >\n {monthItem.label}\n </button>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n\n <button type=\"button\" className=\"btn-cal-move next\" onClick={handleNextMonth}>\n <span className=\"sr-only\">{nextButtonLabel}</span>\n </button>\n </div>\n\n <div className=\"calendar-body\">\n <div className=\"calendar-table-wrap\">\n <table className=\"calendar-tbl\">\n <caption>\n {currentYearMonth.year}년 {currentYearMonth.month}월\n </caption>\n <thead>\n <tr>\n <th>일</th>\n <th>월</th>\n <th>화</th>\n <th>수</th>\n <th>목</th>\n <th>금</th>\n <th>토</th>\n </tr>\n </thead>\n <tbody>\n {Array.from({ length: 6 }, (_, weekIndex) => (\n <tr key={weekIndex}>\n {Array.from({ length: 7 }, (_, dayIndex) => {\n const dateIndex = weekIndex * 7 + dayIndex\n const date = calendarDates[dateIndex]\n\n if (!date) return <td key={dayIndex}></td>\n\n const { isPeriod, isStart, isEnd } = isDateInPeriod(date)\n\n const cellClasses = classNames({\n old: date.isOld,\n new: date.isNew,\n today: date.isToday,\n disabled: date.isDisabled,\n 'day-off': date.isDayOff,\n 'day-event': date.hasEvent,\n period: isPeriod,\n start: isStart,\n end: isEnd\n })\n\n return (\n <td\n key={dayIndex}\n className={cellClasses}\n data-date={`${date.year}.${date.month.toString().padStart(2, '0')}.${date.day.toString().padStart(2, '0')}`}\n >\n <button\n type=\"button\"\n className=\"btn-set-date\"\n onClick={() => handleDateClick(date)}\n disabled={date.isDisabled || date.isOld || date.isNew}\n aria-pressed={isPeriod}\n aria-label={date.hasEvent ? `${date.day} 일정있음` : date.isToday ? `${date.day} 오늘` : undefined}\n >\n <span>{date.day}</span>\n </button>\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n\n <div className=\"calendar-footer\">\n <div className=\"calendar-btn-wrap\">\n <button type=\"button\" className=\"krds-btn small text\" onClick={handleTodayClick}>\n {todayButtonText}\n </button>\n <button type=\"button\" className=\"krds-btn small tertiary\" onClick={handleCancel}>\n {cancelButtonText}\n </button>\n <button type=\"button\" className=\"krds-btn small primary\" onClick={handleConfirm}>\n {confirmButtonText}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n }\n)\n\nCalendar.displayName = 'Calendar'\n","import { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { classNames } from '@/utils'\nimport React, { forwardRef, useId, useState } from 'react'\nimport { CheckboxChipProps, CheckboxGroupProps, CheckboxProps } from './Checkbox.types'\n\n/**\n * KRDS Checkbox Component\n * @param size 체크박스 크기 ('medium' | 'large')\n * @param checked 체크박스 선택 상태\n * @param disabled 체크박스 비활성화 상태\n * @param label 체크박스 레이블 텍스트\n * @param description 추가 설명 텍스트\n * @param className 사용자 정의 클래스명\n */\nconst Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n { id, name, defaultValue, checked, disabled = false, size = 'medium', children, description, onChange, className, label, ...props },\n ref\n ) => {\n const [_checked, setChecked] = useUncontrolled<boolean>({\n value: checked,\n // 기본값이 없으면 undefined로 시작해 처음 체크할 때 비제어 → 제어 입력 경고가 난다\n defaultValue: defaultValue ?? false,\n onChange: (value: boolean) => {\n if (onChange) {\n const syntheticEvent = {\n target: { checked: value }\n } as React.ChangeEvent<HTMLInputElement>\n onChange(syntheticEvent)\n }\n }\n })\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setChecked(e.target.checked)\n }\n\n // id를 주지 않아도 레이블이 연결되도록 (원본은 id가 없으면 레이블이 연결되지 않았음)\n const generatedId = useId()\n const inputId = id ?? generatedId\n\n const checkboxClasses = classNames('krds-form-check', size, className)\n\n return (\n <div className={checkboxClasses}>\n <input\n type=\"checkbox\"\n id={inputId}\n name={name}\n checked={_checked}\n disabled={disabled}\n onChange={handleChange}\n ref={ref}\n {...props}\n />\n {/* 이름은 연결된 레이블에서 온다 (원본은 aria-label={label || '레이블'}로 children 레이블을 '레이블'로 덮었음) */}\n <label htmlFor={inputId}>{children || label}</label>\n {description && (\n <div className=\"krds-form-check-cnt\">\n <p className=\"krds-form-check-p\">{description}</p>\n </div>\n )}\n </div>\n )\n }\n)\n\nCheckbox.displayName = 'Checkbox'\n\n/**\n * KRDS CheckboxChip Component\n * @param size 체크박스 칩 크기 ('small' | 'medium' | 'large')\n * @param checked 체크박스 선택 상태\n * @param disabled 체크박스 비활성화 상태\n * @param className 사용자 정의 클래스명\n */\nconst CheckboxChip = forwardRef<HTMLInputElement, CheckboxChipProps>(\n ({ id, name, defaultValue, checked, disabled = false, size = 'medium', children, onChange, className, ...props }, ref) => {\n const [isFocused, setIsFocused] = useState(false)\n\n const checkboxClasses = classNames('krds-form-chip', size, isFocused && 'focus', className)\n\n // id를 주지 않아도 레이블이 연결되도록 (원본은 id가 없으면 레이블이 연결되지 않았음)\n const generatedId = useId()\n const inputId = id ?? generatedId\n\n const [_checked, setChecked] = useUncontrolled<boolean>({\n value: checked,\n defaultValue: (defaultValue as unknown as boolean | undefined) ?? false,\n onChange: (value: boolean) => {\n if (onChange) {\n const syntheticEvent = {\n target: { checked: value }\n } as React.ChangeEvent<HTMLInputElement>\n onChange(syntheticEvent)\n }\n }\n })\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setChecked(e.target.checked)\n }\n\n const handleFocus = () => {\n setIsFocused(true)\n }\n\n const handleBlur = () => {\n setIsFocused(false)\n }\n\n return (\n <div className={checkboxClasses}>\n <input\n type=\"checkbox\"\n className=\"checkbox\"\n id={inputId}\n name={name}\n checked={_checked}\n disabled={disabled}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n ref={ref}\n {...props}\n />\n <label className=\"krds-form-chip-outline\" htmlFor={inputId}>\n {children}\n </label>\n </div>\n )\n }\n)\n\nCheckboxChip.displayName = 'CheckboxChip'\n\n/**\n * KRDS CheckboxGroup Component\n * @param column 레이아웃 방향 (true: 세로, false: 가로)\n * @param className 사용자 정의 클래스명\n */\nconst CheckboxGroup: React.FC<CheckboxGroupProps> = ({ children, column = false, className }) => {\n return <div className={classNames('krds-check-area', column && 'chk-column', className)}>{children}</div>\n}\n\nCheckboxGroup.displayName = 'CheckboxGroup'\n\nexport { Checkbox, CheckboxChip, CheckboxGroup }\n","import { classNames } from '@/utils'\nimport { forwardRef } from 'react'\nimport Button from '../Button'\nimport { CoachMarkProps } from './CoachMark.types'\n\n/**\n * KRDS CoachMark Component\n * @param title 코치 마크 제목\n * @param description 코치 마크 설명\n * @param currentStep 현재 단계\n * @param totalSteps 총 단계 수\n * @param onSkip 그만보기 버튼 클릭 핸들러\n * @param onPrevious 이전으로 버튼 클릭 핸들러\n * @param onNext 다음으로 버튼 클릭 핸들러\n * @param children 코치 마크 내용\n * @param isVisible 코치 마크 표시 여부\n */\nconst CoachMark = forwardRef<HTMLDivElement, CoachMarkProps>(\n (\n {\n title = '1단계 : 코치 마크',\n description = '1단계 코치 마크 내용입니다.',\n currentStep = 1,\n totalSteps = 4,\n onSkip,\n onPrevious,\n onNext,\n children,\n isVisible = true,\n className = '',\n ...restProps\n },\n ref\n ) => {\n if (!isVisible) {\n return null\n }\n\n const handleSkip = () => {\n onSkip?.()\n }\n\n const handlePrevious = () => {\n onPrevious?.()\n }\n\n const handleNext = () => {\n onNext?.()\n }\n\n const showPreviousButton = currentStep > 1\n\n return (\n <div ref={ref} className={classNames('txt-box bg-white krds-coach-mark', className)} {...restProps}>\n <div className=\"coach-balloon\">\n <h5 className=\"sr-only\">따라하기 가이드</h5>\n <h6 className=\"coach-tit\">{title}</h6>\n <p className=\"desc\">{description}</p>\n <div className=\"coach-controls\">\n <div className=\"num\">\n <span className=\"sr-only\">현재 단계</span>\n <strong>{currentStep}</strong>\n <span className=\"sr-only\">총 단계</span>\n <span>{totalSteps}</span>\n </div>\n <div className=\"btn-wrap\">\n <Button variant=\"text\" size=\"small\" onClick={handleSkip}>\n 그만보기\n </Button>\n {showPreviousButton && (\n <Button variant=\"text\" size=\"small\" onClick={handlePrevious}>\n 이전으로\n </Button>\n )}\n <Button variant=\"tertiary\" size=\"small\" onClick={handleNext}>\n 다음으로\n </Button>\n </div>\n </div>\n </div>\n\n <div>{children}</div>\n </div>\n )\n }\n)\n\nCoachMark.displayName = 'CoachMark'\n\nexport default CoachMark\n","import { classNames } from '@/utils'\nimport { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { forwardRef, useEffect, useRef } from 'react'\n\nimport { ContextualHelpProps } from './ContextualHelp.types'\nimport Button from '../Button'\n\n/**\n * KRDS ContextualHelp Component\n * @param label 도움말 라벨 텍스트\n * @param title 팝오버 제목\n * @param children 팝오버 내용\n * @param position 팝오버 위치 ('top' | 'bottom')\n * @param alignment 팝오버 정렬 ('left' | 'center' | 'right')\n * @param open 팝오버 열림/닫힘 상태\n * @param defaultOpen 기본 팝오버 열림/닫힘 상태\n * @param onOpenChange 팝오버 상태 변경 핸들러\n * @param className 사용자 정의 클래스명\n */\nexport const ContextualHelp = forwardRef<HTMLDivElement, ContextualHelpProps>(\n ({ label, title, children, position = 'top', alignment = 'left', open, defaultOpen = false, onOpenChange, className, ...props }, ref) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const popoverRef = useRef<HTMLDivElement>(null)\n const buttonRef = useRef<HTMLButtonElement>(null)\n const contentsRef = useRef<HTMLDivElement>(null)\n\n const [isOpen, setIsOpen] = useUncontrolled({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange\n })\n\n const containerClasses = classNames('krds-contextual-help', position, alignment, className)\n\n const handleToggle = () => {\n setIsOpen(!isOpen)\n }\n\n const handleClose = () => {\n setIsOpen(false)\n buttonRef.current?.focus()\n }\n\n const adjustPopoverPosition = () => {\n if (!isOpen || !popoverRef.current || !containerRef.current) return\n\n const isMobile = window.innerWidth <= 768\n const tooltipAction = containerRef.current.querySelector('.tooltip-action') as HTMLElement\n\n if (isMobile && tooltipAction) {\n const rootStyles = getComputedStyle(document.querySelector(':root')!)\n const contentsPaddingX = parseInt(rootStyles.getPropertyValue('--krds-contents-padding-x')?.replace('px', '') || '20')\n const tooltipActionRect = tooltipAction.getBoundingClientRect()\n const offsetLeft = tooltipActionRect.left - contentsPaddingX\n const width = document.body.clientWidth - contentsPaddingX * 2\n\n popoverRef.current.style.left = `-${offsetLeft}px`\n popoverRef.current.style.width = `${width}px`\n } else {\n popoverRef.current.style.left = ''\n popoverRef.current.style.right = ''\n popoverRef.current.style.width = ''\n }\n }\n\n const focusFirstFocusableElement = (container: HTMLElement) => {\n const focusableSelectors = [\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'a[href]:not([tabindex=\"-1\"])',\n '[tabindex]:not([tabindex=\"-1\"]):not([disabled])',\n '[contenteditable=\"true\"]'\n ].join(', ')\n\n const focusableElements = container.querySelectorAll(focusableSelectors)\n\n const visibleFocusables = Array.from(focusableElements).filter((el: Element) => {\n const htmlElement = el as HTMLElement\n return htmlElement.offsetParent !== null && getComputedStyle(htmlElement).visibility !== 'hidden'\n })\n\n if (visibleFocusables.length > 0) {\n ;(visibleFocusables[0] as HTMLElement).focus()\n } else {\n const closeButton = popoverRef.current?.querySelector('.tooltip-close') as HTMLButtonElement\n closeButton?.focus()\n }\n }\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n handleClose()\n }\n }\n\n const handleResize = () => {\n adjustPopoverPosition()\n }\n\n if (isOpen) {\n adjustPopoverPosition()\n\n requestAnimationFrame(() => {\n if (contentsRef.current) {\n focusFirstFocusableElement(contentsRef.current)\n }\n })\n\n document.addEventListener('click', handleClickOutside)\n document.addEventListener('keydown', handleKeyDown)\n window.addEventListener('resize', handleResize)\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n document.removeEventListener('click', handleClickOutside)\n window.removeEventListener('resize', handleResize)\n }\n }\n }, [isOpen])\n\n return (\n <div ref={ref || containerRef} className={containerClasses} {...props}>\n {label && <p className=\"tooltip-txt\">{label}</p>}\n <div className=\"tooltip-action\">\n <Button ref={buttonRef} variant=\"icon\" size=\"medium\" className=\"tooltip-btn\" onClick={handleToggle} aria-expanded={isOpen}>\n <span className=\"sr-only\">도움말</span>\n <i className=\"svg-icon ico-tooltip\" />\n </Button>\n <div ref={popoverRef} className={classNames('tooltip-popover', isOpen && 'show')} role=\"tooltip\">\n <h4 className=\"tooltip-title\">{title}</h4>\n <div ref={contentsRef} className=\"tooltip-contents\">\n {children}\n </div>\n <Button variant=\"icon\" size=\"xsmall\" className=\"tooltip-close\" onClick={handleClose} aria-label=\"닫기\">\n <span className=\"sr-only\">닫기</span>\n <i className=\"svg-icon ico-modal-close\" />\n </Button>\n </div>\n </div>\n </div>\n )\n }\n)\n\nContextualHelp.displayName = 'ContextualHelp'\n","import { classNames } from '@/utils'\nimport { forwardRef } from 'react'\nimport Button from '../Button/Button'\nimport { CriticalAlertItemProps, CriticalAlertsProps } from './CriticalAlert.types'\n\n/**\n * KRDS Critical Alert Component\n * @param alerts alert 목록\n * @param className custom class name\n */\nexport const CriticalAlerts = forwardRef<HTMLDivElement, CriticalAlertsProps>(({ alerts, className, ...props }, ref) => {\n return (\n <div ref={ref} className={classNames('main-urgent-wrap', className)} {...props}>\n <ul className=\"krds-critical-alerts\">\n {alerts.map((alert, index) => (\n <CriticalAlertItem key={index} {...alert} />\n ))}\n </ul>\n </div>\n )\n})\n\nCriticalAlerts.displayName = 'CriticalAlerts'\n\nconst CriticalAlertItem = ({ variant, message, href, linkText = '자세히 보기' }: CriticalAlertItemProps) => {\n const variantText = {\n danger: '긴급',\n ok: '안전',\n info: '안내'\n }[variant]\n\n return (\n <li>\n <div className=\"critical-ban\">\n <span className={classNames('critical-badge', variant)}>{variantText}</span>\n <p className=\"critical-txt\">{message}</p>\n {href && (\n <Button as=\"a\" href={href} variant=\"link\" size=\"medium\" className=\"basic\">\n <span className=\"m-hide\">{linkText}</span>\n <i className=\"svg-icon ico-angle right\"></i>\n </Button>\n )}\n </div>\n </li>\n )\n}\n\nexport const CriticalAlert = CriticalAlerts\n","import { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { classNames } from '@/utils'\nimport { forwardRef, useId, useState, useRef, useEffect, useMemo } from 'react'\nimport { DateInputProps } from './DateInput.types'\nimport { CalendarDate } from '../Calendar/Calendar.types'\n\n/**\n * KRDS DateInput Component\n * @param value 제어 상태일 때 입력된 값\n * @param defaultValue 비제어 상태일 때의 초기 값\n * @param onChange 입력 값이 변경될 때 호출되는 콜백\n * @param label 레이블\n * @param hint 도움말 텍스트\n * @param error 에러 메시지\n * @param success 성공 메시지\n * @param information 정보 메시지\n * @param size 입력 필드 크기 ('small' | 'medium' | 'large')\n * @param isCalendarOpen 달력 열림 상태\n * @param calendarPosition 달력 위치 ('top' | 'bottom')\n * @param disabledDates 비활성화할 날짜 배열\n * @param eventDates 이벤트가 있는 날짜 배열\n * @param disabled disabled 상태\n * @param readOnly readOnly 상태\n */\nconst DateInput = forwardRef<HTMLInputElement, DateInputProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n label,\n hint,\n error,\n success,\n information,\n size = 'large',\n isCalendarOpen,\n defaultIsCalendarOpen = false,\n onCalendarOpenChange,\n calendarPosition = 'bottom',\n disabledDates = [],\n eventDates = [],\n onYearChange,\n onMonthChange,\n onTodayClick,\n onConfirm,\n onCancel,\n openButtonLabel = '달력 열기',\n prevButtonLabel = '이전 달',\n nextButtonLabel = '다음 달',\n yearSelectLabel = '연도 선택',\n monthSelectLabel = '월 선택',\n todayButtonText = '오늘',\n cancelButtonText = '취소',\n confirmButtonText = '확인',\n disabled = false,\n readOnly = false,\n className = '',\n id,\n placeholder = 'YYYY.MM.DD',\n ...props\n },\n ref\n ) => {\n const generatedId = useId()\n const inputId = id || generatedId\n\n const [_value, setValue] = useUncontrolled<string>({\n value,\n defaultValue,\n onChange,\n finalValue: ''\n })\n\n const [internalIsOpen, setInternalIsOpen] = useUncontrolled({\n value: isCalendarOpen,\n defaultValue: defaultIsCalendarOpen,\n finalValue: false,\n onChange: onCalendarOpenChange\n })\n\n const parseDate = (dateString: string): Date | null => {\n if (!dateString) return null\n const parts = dateString.split('.')\n if (parts.length !== 3) return null\n\n const year = parseInt(parts[0])\n const month = parseInt(parts[1])\n const day = parseInt(parts[2])\n\n if (isNaN(year) || isNaN(month) || isNaN(day)) return null\n if (month < 1 || month > 12) return null\n if (day < 1 || day > 31) return null\n\n return new Date(year, month - 1, day)\n }\n\n const formatDate = (date: Date): string => {\n return `${date.getFullYear()}.${(date.getMonth() + 1).toString().padStart(2, '0')}.${date.getDate().toString().padStart(2, '0')}`\n }\n\n const getCurrentYearMonth = (): { year: number; month: number } => {\n const today = new Date()\n\n if (_value) {\n const selectedDate = parseDate(_value)\n if (selectedDate) {\n return {\n year: selectedDate.getFullYear(),\n month: selectedDate.getMonth() + 1\n }\n }\n }\n\n return {\n year: today.getFullYear(),\n month: today.getMonth() + 1\n }\n }\n\n const [currentYearMonth, setCurrentYearMonth] = useState(getCurrentYearMonth)\n\n useEffect(() => {\n const newYearMonth = getCurrentYearMonth()\n setCurrentYearMonth(newYearMonth)\n }, [_value])\n\n const [yearDropdownOpen, setYearDropdownOpen] = useState(false)\n const [monthDropdownOpen, setMonthDropdownOpen] = useState(false)\n\n const calendarWrapRef = useRef<HTMLDivElement>(null)\n\n const availableYears = useMemo(() => {\n const currentYear = new Date().getFullYear()\n return Array.from({ length: 101 }, (_, i) => {\n const year = currentYear - 50 + i\n return {\n value: year,\n label: `${year}년`,\n isActive: year === currentYearMonth.year,\n isDisabled: false\n }\n })\n }, [currentYearMonth.year])\n\n const availableMonths = useMemo(() => {\n return Array.from({ length: 12 }, (_, i) => {\n const month = i + 1\n return {\n value: month,\n label: `${month.toString().padStart(2, '0')}월`,\n isActive: month === currentYearMonth.month,\n isDisabled: false\n }\n })\n }, [currentYearMonth.month])\n\n const calendarDates = useMemo((): CalendarDate[] => {\n const { year, month } = currentYearMonth\n const today = new Date()\n const firstDay = new Date(year, month - 1, 1)\n const lastDay = new Date(year, month, 0)\n const firstDayOfWeek = firstDay.getDay()\n const daysInMonth = lastDay.getDate()\n\n const dates: CalendarDate[] = []\n\n const prevMonth = month === 1 ? 12 : month - 1\n const prevYear = month === 1 ? year - 1 : year\n const prevMonthLastDay = new Date(prevYear, prevMonth, 0).getDate()\n\n for (let i = firstDayOfWeek - 1; i >= 0; i--) {\n const day = prevMonthLastDay - i\n const dateString = `${prevYear}.${prevMonth.toString().padStart(2, '0')}.${day.toString().padStart(2, '0')}`\n\n dates.push({\n year: prevYear,\n month: prevMonth,\n day,\n isOld: true,\n isDayOff: (firstDayOfWeek - 1 - i) % 7 === 0, // Sunday\n isDisabled: disabledDates.includes(dateString),\n hasEvent: eventDates.includes(dateString)\n })\n }\n\n for (let day = 1; day <= daysInMonth; day++) {\n const date = new Date(year, month - 1, day)\n const dayOfWeek = date.getDay()\n const dateString = `${year}.${month.toString().padStart(2, '0')}.${day.toString().padStart(2, '0')}`\n const isToday = year === today.getFullYear() && month === today.getMonth() + 1 && day === today.getDate()\n\n dates.push({\n year,\n month,\n day,\n isToday,\n isDayOff: dayOfWeek === 0, // Sunday\n isDisabled: disabledDates.includes(dateString),\n hasEvent: eventDates.includes(dateString)\n })\n }\n\n const remainingCells = 42 - dates.length // 6 weeks * 7 days\n const nextMonth = month === 12 ? 1 : month + 1\n const nextYear = month === 12 ? year + 1 : year\n\n for (let day = 1; day <= remainingCells; day++) {\n const dateString = `${nextYear}.${nextMonth.toString().padStart(2, '0')}.${day.toString().padStart(2, '0')}`\n\n dates.push({\n year: nextYear,\n month: nextMonth,\n day,\n isNew: true,\n isDayOff: dates.length % 7 === 0, // Sunday\n isDisabled: disabledDates.includes(dateString),\n hasEvent: eventDates.includes(dateString)\n })\n }\n\n return dates\n }, [currentYearMonth, disabledDates, eventDates])\n\n const handleOpenCalendar = () => {\n if (disabled || readOnly) return\n setInternalIsOpen(true)\n\n setTimeout(() => {\n calendarWrapRef.current?.focus()\n }, 50)\n }\n\n const handleCloseCalendar = () => {\n setInternalIsOpen(false)\n setYearDropdownOpen(false)\n setMonthDropdownOpen(false)\n }\n\n const handlePrevMonth = () => {\n const newMonth = currentYearMonth.month === 1 ? 12 : currentYearMonth.month - 1\n const newYear = currentYearMonth.month === 1 ? currentYearMonth.year - 1 : currentYearMonth.year\n\n setCurrentYearMonth({ year: newYear, month: newMonth })\n onYearChange?.(newYear)\n onMonthChange?.(newMonth)\n }\n\n const handleNextMonth = () => {\n const newMonth = currentYearMonth.month === 12 ? 1 : currentYearMonth.month + 1\n const newYear = currentYearMonth.month === 12 ? currentYearMonth.year + 1 : currentYearMonth.year\n\n setCurrentYearMonth({ year: newYear, month: newMonth })\n onYearChange?.(newYear)\n onMonthChange?.(newMonth)\n }\n\n const handleYearSelect = (yearItem: { value: number; label: string; isDisabled?: boolean }) => {\n if (yearItem.isDisabled) return\n\n setCurrentYearMonth(prev => ({ ...prev, year: yearItem.value }))\n setYearDropdownOpen(false)\n onYearChange?.(yearItem.value)\n }\n\n const handleMonthSelect = (monthItem: { value: number; label: string; isDisabled?: boolean }) => {\n if (monthItem.isDisabled) return\n\n setCurrentYearMonth(prev => ({ ...prev, month: monthItem.value }))\n setMonthDropdownOpen(false)\n onMonthChange?.(monthItem.value)\n }\n\n const handleDateClick = (date: CalendarDate) => {\n if (date.isDisabled || date.isOld || date.isNew) return\n\n const dateString = `${date.year}.${date.month.toString().padStart(2, '0')}.${date.day.toString().padStart(2, '0')}`\n setValue(dateString)\n }\n\n const handleTodayClick = () => {\n const today = new Date()\n const todayString = formatDate(today)\n\n setValue(todayString)\n setCurrentYearMonth({\n year: today.getFullYear(),\n month: today.getMonth() + 1\n })\n\n onTodayClick?.()\n }\n\n const handleConfirm = () => {\n handleCloseCalendar()\n onConfirm?.()\n }\n\n const handleCancel = () => {\n handleCloseCalendar()\n onCancel?.()\n }\n\n const handleInputChange = (newValue: string) => {\n setValue(newValue)\n\n const parsedDate = parseDate(newValue)\n if (parsedDate) {\n setCurrentYearMonth({\n year: parsedDate.getFullYear(),\n month: parsedDate.getMonth() + 1\n })\n }\n }\n\n const isDateSelected = (date: CalendarDate): boolean => {\n const dateString = `${date.year}.${date.month.toString().padStart(2, '0')}.${date.day.toString().padStart(2, '0')}`\n return _value === dateString\n }\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (!internalIsOpen) return\n\n const target = event.target as Element\n if (!target.closest('.calendar-conts')) {\n handleCloseCalendar()\n }\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && internalIsOpen) {\n handleCloseCalendar()\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n document.addEventListener('click', handleClickOutside)\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n document.removeEventListener('click', handleClickOutside)\n }\n }, [internalIsOpen])\n\n const isError = Boolean(error)\n const isSuccess = Boolean(success) && !isError\n const isInformation = Boolean(information) && !isError && !isSuccess\n\n const containerClasses = classNames(\n 'form-group',\n isError && 'is-error',\n isSuccess && 'is-success',\n isInformation && 'is-information',\n className\n )\n\n const renderHintMessage = () => {\n if (isError) {\n return <p className=\"form-hint-invalid\">{error}</p>\n }\n if (isSuccess) {\n return <p className=\"form-hint-success\">{success}</p>\n }\n if (isInformation) {\n return <p className=\"form-hint-information\">{information}</p>\n }\n if (hint) {\n return <p className=\"form-hint\">{hint}</p>\n }\n return null\n }\n\n return (\n <div className={containerClasses}>\n {label && (\n <div className=\"form-tit\">\n <label htmlFor={inputId}>{label}</label>\n </div>\n )}\n\n <div className=\"form-conts\">\n <div className=\"form-conts calendar-conts\">\n <div className=\"calendar-input\">\n <input\n ref={ref}\n type=\"text\"\n className={classNames('krds-input datepicker cal', size)}\n placeholder={placeholder}\n id={inputId}\n value={_value}\n onChange={e => handleInputChange(e.target.value)}\n disabled={disabled}\n readOnly={readOnly}\n {...props}\n />\n <button\n type=\"button\"\n className=\"krds-btn medium icon form-btn-datepicker\"\n onClick={handleOpenCalendar}\n aria-expanded={internalIsOpen}\n disabled={disabled}\n >\n <span className=\"sr-only\">{openButtonLabel}</span>\n <i className=\"svg-icon ico-calendar\"></i>\n </button>\n </div>\n\n <div className={classNames('krds-calendar-area', { active: internalIsOpen })}>\n <div className={classNames('calendar-wrap', calendarPosition)} aria-label=\"달력\" tabIndex={0} ref={calendarWrapRef}>\n <div className=\"calendar-head\">\n <button type=\"button\" className=\"btn-cal-move prev\" onClick={handlePrevMonth}>\n <span className=\"sr-only\">{prevButtonLabel}</span>\n </button>\n\n <div className=\"calendar-switch-wrap\">\n <div className=\"calendar-drop-down\">\n <button\n type=\"button\"\n className=\"btn-cal-switch year\"\n aria-label={yearSelectLabel}\n onClick={() => {\n setYearDropdownOpen(!yearDropdownOpen)\n setMonthDropdownOpen(false)\n }}\n aria-expanded={yearDropdownOpen}\n >\n {currentYearMonth.year}년\n </button>\n <div\n className={classNames('calendar-select calendar-year-wrap', {\n active: yearDropdownOpen\n })}\n >\n <ul className=\"sel year\" role=\"listbox\">\n {availableYears.map(yearItem => (\n <li key={yearItem.value} role=\"none\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={yearItem.value === currentYearMonth.year}\n className={classNames({\n active: yearItem.value === currentYearMonth.year\n })}\n onClick={() => handleYearSelect(yearItem)}\n disabled={yearItem.isDisabled}\n >\n {yearItem.label}\n </button>\n </li>\n ))}\n </ul>\n </div>\n </div>\n\n <div className=\"calendar-drop-down\">\n <button\n type=\"button\"\n className=\"btn-cal-switch month\"\n aria-label={monthSelectLabel}\n onClick={() => {\n setMonthDropdownOpen(!monthDropdownOpen)\n setYearDropdownOpen(false)\n }}\n aria-expanded={monthDropdownOpen}\n >\n {currentYearMonth.month.toString().padStart(2, '0')}월\n </button>\n <div\n className={classNames('calendar-select calendar-mon-wrap', {\n active: monthDropdownOpen\n })}\n >\n <ul className=\"sel month\" role=\"listbox\">\n {availableMonths.map(monthItem => (\n <li key={monthItem.value} role=\"none\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={monthItem.value === currentYearMonth.month}\n className={classNames({\n active: monthItem.value === currentYearMonth.month\n })}\n onClick={() => handleMonthSelect(monthItem)}\n disabled={monthItem.isDisabled}\n >\n {monthItem.label}\n </button>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n\n <button type=\"button\" className=\"btn-cal-move next\" onClick={handleNextMonth}>\n <span className=\"sr-only\">{nextButtonLabel}</span>\n </button>\n </div>\n\n <div className=\"calendar-body\">\n <div className=\"calendar-table-wrap\">\n <table className=\"calendar-tbl\">\n <caption>\n {currentYearMonth.year}년 {currentYearMonth.month}월\n </caption>\n <thead>\n <tr>\n <th>일</th>\n <th>월</th>\n <th>화</th>\n <th>수</th>\n <th>목</th>\n <th>금</th>\n <th>토</th>\n </tr>\n </thead>\n <tbody>\n {Array.from({ length: 6 }, (_, weekIndex) => (\n <tr key={weekIndex}>\n {Array.from({ length: 7 }, (_, dayIndex) => {\n const dateIndex = weekIndex * 7 + dayIndex\n const date = calendarDates[dateIndex]\n\n if (!date) return <td key={dayIndex}></td>\n\n const isSelected = isDateSelected(date)\n\n const cellClasses = classNames({\n old: date.isOld,\n new: date.isNew,\n today: date.isToday,\n disabled: date.isDisabled,\n 'day-off': date.isDayOff,\n 'day-event': date.hasEvent,\n period: isSelected,\n start: isSelected,\n end: isSelected\n })\n\n return (\n <td\n key={dayIndex}\n className={cellClasses}\n data-date={`${date.year}.${date.month.toString().padStart(2, '0')}.${date.day.toString().padStart(2, '0')}`}\n >\n <button\n type=\"button\"\n className=\"btn-set-date\"\n onClick={() => handleDateClick(date)}\n disabled={date.isDisabled || date.isOld || date.isNew}\n aria-pressed={isSelected}\n aria-label={date.hasEvent ? `${date.day} 일정있음` : date.isToday ? `${date.day} 오늘` : undefined}\n >\n <span>{date.day}</span>\n </button>\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n\n <div className=\"calendar-footer\">\n <div className=\"calendar-btn-wrap\">\n <button type=\"button\" className=\"krds-btn small text\" onClick={handleTodayClick}>\n {todayButtonText}\n </button>\n <button type=\"button\" className=\"krds-btn small tertiary\" onClick={handleCancel}>\n {cancelButtonText}\n </button>\n <button type=\"button\" className=\"krds-btn small primary\" onClick={handleConfirm}>\n {confirmButtonText}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {renderHintMessage()}\n </div>\n )\n }\n)\n\nDateInput.displayName = 'DateInput'\n\nexport { DateInput }\n","import { forwardRef, useId } from 'react'\nimport { classNames } from '@/utils'\nimport { useUncontrolled } from '@/hooks/use-uncontrolled'\n\nimport { DisclosureProps } from './Disclosure.types'\n\n/**\n * KRDS Disclosure Component\n * @param buttonText 토글 버튼 텍스트\n * @param children 확장 가능한 콘텐츠\n * @param defaultExpanded 초기 확장 상태\n * @param expanded 제어된 확장 상태\n * @param onToggle 확장 상태 변경 콜백\n * @param className 커스텀 클래스명\n */\nexport const Disclosure = forwardRef<HTMLDivElement, DisclosureProps>(\n ({ buttonText, children, defaultExpanded = false, expanded, onToggle, className, ...props }, ref) => {\n const contentId = 'disclosure-content-' + useId()\n\n const [isExpanded, setIsExpanded] = useUncontrolled<boolean>({\n value: expanded,\n defaultValue: defaultExpanded,\n finalValue: false,\n onChange: onToggle\n })\n\n const handleToggle = () => {\n setIsExpanded(!isExpanded)\n }\n\n return (\n <div ref={ref} className={classNames('krds-disclosure', isExpanded && 'active', className)} {...props}>\n <button type=\"button\" className=\"btn-conts-expand\" aria-expanded={isExpanded} aria-controls={contentId} onClick={handleToggle}>\n {buttonText}\n </button>\n <div id={contentId} className=\"expand-wrap\">\n <div className=\"expand-in\">{children}</div>\n </div>\n </div>\n )\n }\n)\n\nDisclosure.displayName = 'Disclosure'\n","import { classNames } from '@/utils'\nimport React from 'react'\nimport type { SpinnerProps } from './Spinner.types'\n\n/**\n * KRDS Spinner 컴포넌트\n * @param label 스피너 옆에 표시할 텍스트\n * @param className 추가 커스텀 클래스\n * @param children input 등 자식 요소가 있을 경우 form-spinner 래퍼로 감쌈\n */\nconst Spinner: React.FC<SpinnerProps> = ({ label, className, children }) => {\n const spinnerElement = (\n <div className={classNames('krds-spinner', className)} role=\"status\">\n <span className=\"sr-only\">로딩 중</span>\n {label}\n </div>\n )\n\n if (children) {\n return (\n <div className=\"form-spinner\">\n {children}\n {spinnerElement}\n </div>\n )\n }\n\n return spinnerElement\n}\n\nexport default Spinner\n","import Button from '@/components/Button'\nimport Spinner from '@/components/Spinner'\nimport { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { classNames } from '@/utils'\nimport React, { forwardRef, useCallback, useId, useRef, useState } from 'react'\nimport { FileItem, FileUploadProps } from './FileUpload.types'\n\n/**\n * KRDS FileUpload Component\n * @param title 타이틀 영역 제목\n * @param description 컨텐츠 영역 설명\n * @param uploadText 업로드 영역 안내 텍스트\n * @param maxFiles 최대 파일 개수\n * @param maxFileSize 최대 파일 크기 (bytes)\n * @param acceptedFileTypes 허용된 파일 확장자 배열\n * @param files 파일 목록\n * @param onFilesChange 파일 목록 변경 핸들러\n * @param onFileUpload 파일 업로드 핸들러\n * @param onFileDelete 파일 삭제 핸들러\n * @param onAllFilesDelete 전체 파일 삭제 핸들러\n * @param disabled 비활성화 상태\n * @param allowDelete 파일 삭제 허용 여부\n * @param className 커스텀 클래스명\n */\nconst FileUpload = forwardRef<HTMLDivElement, FileUploadProps>(\n (\n {\n title,\n description,\n uploadText = '첨부할 파일을 여기에 끌어다 놓거나, 파일 선택 버튼을 눌러 파일을 직접 선택해주세요.',\n maxFiles = 10,\n maxFileSize = 20 * 1024 * 1024,\n acceptedFileTypes,\n files: _files,\n onFilesChange,\n onFileUpload,\n onFileDelete,\n onAllFilesDelete,\n disabled = false,\n allowDelete = true,\n className = '',\n children,\n ...restProps\n },\n ref\n ) => {\n const [files, setFiles] = useUncontrolled<FileItem[]>({\n value: _files,\n defaultValue: [],\n onChange: onFilesChange,\n finalValue: []\n })\n const [isDragActive, setIsDragActive] = useState(false)\n const fileInputId = useId()\n const fileInputRef = useRef<HTMLInputElement | null>(null)\n\n const formatFileSize = useCallback((bytes: number): string => {\n if (bytes === 0) return '0B'\n const k = 1024\n const sizes = ['B', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + sizes[i]\n }, [])\n\n const getFileExtension = useCallback((filename: string): string => {\n return filename.split('.').pop()?.toLowerCase() || ''\n }, [])\n\n const validateFile = useCallback(\n (file: File): { isValid: boolean; errorMessage?: string } => {\n if (file.size > maxFileSize) {\n return {\n isValid: false,\n errorMessage: `등록 가능한 파일 용량을 초과하였습니다.\\n${formatFileSize(maxFileSize)} 미만의 파일만 등록할 수 있습니다.`\n }\n }\n\n if (acceptedFileTypes?.length) {\n const extension = getFileExtension(file.name)\n if (!acceptedFileTypes.includes(extension)) {\n return {\n isValid: false,\n errorMessage: `지원하지 않는 파일 형식입니다.\\n${acceptedFileTypes.join(', ')} 형식만 업로드 가능합니다.`\n }\n }\n }\n\n return { isValid: true }\n },\n [maxFileSize, acceptedFileTypes, formatFileSize, getFileExtension]\n )\n\n const processFiles = useCallback(\n async (selectedFiles: FileList) => {\n const newFiles: FileItem[] = []\n const availableSlots = maxFiles - files.length\n const filesToProcess = Math.min(selectedFiles.length, availableSlots)\n\n for (let i = 0; i < filesToProcess; i++) {\n const file = selectedFiles[i]\n const validation = validateFile(file)\n\n const fileItem: FileItem = {\n id: `${Date.now()}-${i}`,\n name: file.name,\n size: file.size,\n type: getFileExtension(file.name),\n status: validation.isValid ? 'ready' : 'error',\n errorMessage: validation.errorMessage\n }\n\n newFiles.push(fileItem)\n\n if (validation.isValid && onFileUpload) {\n try {\n fileItem.status = 'uploading'\n await onFileUpload(file)\n fileItem.status = 'completed'\n } catch {\n fileItem.status = 'error'\n fileItem.errorMessage = '파일 업로드에 실패했습니다.'\n }\n }\n }\n\n if (newFiles.length > 0) {\n setFiles([...files, ...newFiles])\n }\n },\n [files, maxFiles, validateFile, getFileExtension, onFileUpload, setFiles]\n )\n\n const handleFileSelect = useCallback(\n (selectedFiles: FileList | null) => {\n if (selectedFiles?.length) {\n processFiles(selectedFiles)\n }\n },\n [processFiles]\n )\n\n const handleInputChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n handleFileSelect(event.target.files)\n event.target.value = ''\n },\n [handleFileSelect]\n )\n\n const handleDragOver = useCallback(\n (event: React.DragEvent) => {\n event.preventDefault()\n if (!disabled) {\n setIsDragActive(true)\n }\n },\n [disabled]\n )\n\n const handleDragLeave = useCallback((event: React.DragEvent) => {\n event.preventDefault()\n setIsDragActive(false)\n }, [])\n\n const handleDrop = useCallback(\n (event: React.DragEvent) => {\n event.preventDefault()\n setIsDragActive(false)\n if (!disabled) {\n handleFileSelect(event.dataTransfer.files)\n }\n },\n [disabled, handleFileSelect]\n )\n\n const handleFileDelete = useCallback(\n (fileId: string) => {\n if (onFileDelete) {\n onFileDelete(fileId)\n } else {\n onFilesChange?.(files.filter(file => file.id !== fileId))\n }\n },\n [files, onFileDelete, onFilesChange]\n )\n\n const handleAllFilesDelete = useCallback(() => {\n if (onAllFilesDelete) {\n onAllFilesDelete()\n } else {\n onFilesChange?.([])\n }\n }, [onAllFilesDelete, onFilesChange])\n\n const renderFileStatus = (file: FileItem) => {\n switch (file.status) {\n case 'uploading':\n return (\n <span role=\"status\">\n <Spinner />\n <span className=\"sr-only\">업로드 중</span>\n </span>\n )\n case 'completed':\n return (\n <span className=\"ico-invalid complete\">\n <em className=\"sr-only\">업로드 완료</em>\n </span>\n )\n default:\n return null\n }\n }\n\n const renderFileActions = (file: FileItem) => {\n if (file.status === 'uploading') return null\n\n if (!allowDelete) return null\n\n if (file.onDownload || file.onPreview) {\n return (\n <>\n {file.onDownload && (\n <Button variant=\"text\" size=\"medium\" onClick={file.onDownload} disabled={disabled}>\n 다운로드 <i className=\"svg-icon ico-down\"></i>\n </Button>\n )}\n {file.onPreview && (\n <Button variant=\"text\" size=\"medium\" onClick={file.onPreview} disabled={disabled}>\n 바로보기 <i className=\"svg-icon ico-angle right\"></i>\n </Button>\n )}\n {file.deletable !== false && (\n <Button variant=\"text\" size=\"medium\" onClick={() => handleFileDelete(file.id)} disabled={disabled}>\n 삭제 <i className=\"svg-icon ico-delete-fill\"></i>\n </Button>\n )}\n </>\n )\n }\n\n if (file.deletable === false) return null\n\n return (\n <Button variant=\"text\" size=\"medium\" onClick={() => handleFileDelete(file.id)} disabled={disabled}>\n 삭제 <i className=\"svg-icon ico-delete-fill\"></i>\n </Button>\n )\n }\n\n return (\n <div ref={ref} className={classNames('krds-file-upload line', className)} {...restProps}>\n {(title || description || children) && (\n <div className=\"file-head\">\n {title && <h3 className=\"tit\">{title}</h3>}\n {description && (\n <div>\n <p>{description}</p>\n </div>\n )}\n {children}\n </div>\n )}\n\n <div\n className={classNames('file-upload', isDragActive && 'active')}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <p className=\"txt\">{uploadText}</p>\n <div className=\"file-upload-btn-wrap\">\n <input\n type=\"file\"\n name=\"myFile\"\n id={fileInputId}\n hidden\n multiple\n accept={acceptedFileTypes?.map(type => `.${type}`).join(',')}\n onChange={handleInputChange}\n disabled={disabled}\n ref={fileInputRef}\n />\n <label htmlFor={fileInputId}>\n <Button\n variant=\"primary\"\n size=\"medium\"\n disabled={disabled}\n onClick={() => {\n fileInputRef.current?.click()\n }}\n >\n <i className=\"svg-icon ico-upload\"></i>파일선택\n </Button>\n </label>\n </div>\n </div>\n\n {files.length > 0 && (\n <div className=\"file-list\">\n <div className=\"total\">\n <span className=\"current\">{files.length}개</span> / {maxFiles}개\n </div>\n <ul className=\"upload-list\">\n {files.map(file => (\n <li key={file.id} className={classNames(file.status === 'error' && 'is-error')}>\n <div className={classNames('file-info', (file.onDownload || file.onPreview) && 'm-column')}>\n <div className=\"file-name\">\n {file.name} [{file.type}, {formatFileSize(file.size)}]\n </div>\n <div className=\"btn-wrap\">\n {renderFileStatus(file)}\n {renderFileActions(file)}\n </div>\n </div>\n {file.status === 'error' && file.errorMessage && <p className=\"file-hint-invalid\">{file.errorMessage}</p>}\n </li>\n ))}\n </ul>\n {files.length > 1 && allowDelete && (\n <div className=\"upload-delete-btn\">\n <Button variant=\"tertiary\" size=\"xsmall\" onClick={handleAllFilesDelete} disabled={disabled}>\n 전체 파일 삭제<i className=\"svg-icon ico-angle right\"></i>\n </Button>\n </div>\n )}\n </div>\n )}\n </div>\n )\n }\n)\n\nFileUpload.displayName = 'FileUpload'\n\nexport default FileUpload\n","import { forwardRef } from 'react'\nimport { classNames } from '@/utils'\nimport { IdentifierProps } from './Identifier.types'\n\n/**\n * KRDS Identifier 컴포넌트\n * @param logoAlt 로고 alt 텍스트\n * @param text 식별자 텍스트\n * @param className 추가 커스텀 클래스\n */\nexport const Identifier = forwardRef<HTMLDivElement, IdentifierProps>(\n ({ text = '이 누리집은 보건복지부 산하기관 누리집입니다.', logoAlt = 'KRDS - Korea Design System', className, ...props }, ref) => {\n return (\n <div ref={ref} aria-label=\"운영기관 식별자\" className={classNames('krds-identifier', className)} {...props}>\n <span className=\"logo\">\n <span className=\"sr-only\">{logoAlt}</span>\n </span>\n <span className=\"ban-txt\">{text}</span>\n </div>\n )\n }\n)\n\nIdentifier.displayName = 'Identifier'\n","import { classNames } from '@/utils'\nimport { forwardRef } from 'react'\nimport Button from '../Button'\nimport { Identifier } from '../Identifier'\nimport { FooterBottomProps, FooterLogo, FooterMainContentProps, FooterProps, FooterQuickLink } from './Footer.types'\n\nexport const FooterQuickLinks = ({ quickLinks }: { quickLinks?: FooterQuickLink[] }) => {\n if (!quickLinks || quickLinks.length === 0) return null\n\n return (\n <div className=\"foot-quick\">\n <div className=\"inner\">\n {quickLinks.map((link, index) => (\n <button key={index} type=\"button\" className=\"link\" title={`${link.title} 레이어`} onClick={link.onClick}>\n {link.title}\n </button>\n ))}\n </div>\n </div>\n )\n}\n\nexport const FooterLogoComponent = ({ logo }: { logo?: FooterLogo }) => {\n const logoContent = logo?.src ? (\n <img\n src={logo.src}\n alt={logo.alt}\n width={logo.width}\n height={logo.height}\n style={{ width: '100%', height: '100%', objectFit: 'contain' }}\n />\n ) : (\n <span className=\"sr-only\">{logo?.alt || 'KRDS - Korea Design System'}</span>\n )\n\n const logoElement = <div className=\"f-logo\">{logoContent}</div>\n\n if (logo?.href) {\n return (\n <a href={logo.href} target={logo.target} rel={logo.target === '_blank' ? 'noopener noreferrer' : undefined}>\n {logoElement}\n </a>\n )\n }\n\n return logoElement\n}\n\nexport const FooterMainContent = ({ logo, address, contacts, links, socialLinks, defaultLinkTarget = '_self' }: FooterMainContentProps) => {\n return (\n <>\n <FooterLogoComponent logo={logo} />\n\n <div className=\"f-cnt\">\n {(address || contacts) && (\n <div className=\"f-info\">\n {address && <p className=\"info-addr\">{address}</p>}\n {contacts && contacts.length > 0 && (\n <ul className=\"info-cs\">\n {contacts.map((contact, index) => (\n <li key={index}>\n <strong className=\"strong\">{contact.title}</strong>\n <span className=\"span\">{contact.description}</span>\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n\n {(links || socialLinks) && (\n <div className=\"f-link\">\n {links && links.length > 0 && (\n <div className=\"link-go\">\n {links.map((link, index) => {\n const target = link.target || defaultLinkTarget\n const rel = link.rel || (target === '_blank' ? 'noopener noreferrer' : undefined)\n\n return (\n <Button key={index} as=\"a\" href={link.href} target={target} rel={rel} variant=\"text\" size=\"medium\">\n {link.text} <i className=\"svg-icon ico-angle right\"></i>\n </Button>\n )\n })}\n </div>\n )}\n\n {socialLinks && socialLinks.length > 0 && (\n <div className=\"link-sns\">\n {socialLinks.map((socialLink, index) => {\n const target = socialLink.target || defaultLinkTarget || '_blank'\n const rel = socialLink.rel || (target === '_blank' ? 'noopener noreferrer' : undefined)\n const label = socialLink.label || getDefaultSocialLabel(socialLink.platform)\n const iconClass = getDefaultSocialIconClass(socialLink.platform)\n\n return (\n <a\n key={index}\n href={socialLink.href}\n target={target}\n rel={rel}\n className=\"krds-btn xlarge icon border\"\n title={target === '_blank' ? '새 창 열기' : undefined}\n >\n <span className=\"sr-only\">{label}</span>\n <i className={`svg-icon ${iconClass}`}></i>\n </a>\n )\n })}\n </div>\n )}\n </div>\n )}\n </div>\n </>\n )\n}\n\nexport const FooterBottom = ({\n bottomLinks,\n copyright = '© 2023 National Health Insurance Service. All rights reserved.',\n identifierText = '이 누리집은 보건복지부 산하기관 누리집입니다.',\n identifier,\n defaultLinkTarget = '_self',\n hideIdentifier = false\n}: FooterBottomProps) => {\n const finalIdentifier = identifier || { text: identifierText }\n\n return (\n <div className=\"f-btm\">\n <div className=\"f-btm-text\">\n {bottomLinks && bottomLinks.length > 0 && (\n <div className=\"f-menu\">\n {bottomLinks.map((link, index) => {\n const target = link.target || defaultLinkTarget\n const rel = link.rel || (target === '_blank' ? 'noopener noreferrer' : undefined)\n\n return (\n <a key={index} href={link.href} target={target} rel={rel} className={classNames(link.isHighlighted && 'point')}>\n {link.text}\n </a>\n )\n })}\n </div>\n )}\n <p className=\"f-copy\">{copyright}</p>\n </div>\n\n {!hideIdentifier && <Identifier text={finalIdentifier.text} logoAlt={finalIdentifier.logo?.alt || 'KRDS - Korea Design System'} />}\n </div>\n )\n}\n\nconst getDefaultSocialLabel = (platform: string) => {\n switch (platform.toLowerCase()) {\n case 'instagram':\n return '인스타그램'\n case 'youtube':\n return '유튜브'\n case 'x':\n return 'X'\n case 'twitter':\n return '트위터'\n case 'facebook':\n return '페이스북'\n case 'blog':\n return '블로그'\n default:\n return platform\n }\n}\n\nconst getDefaultSocialIconClass = (platform: string) => {\n switch (platform.toLowerCase()) {\n case 'instagram':\n return 'ico-instagram'\n case 'youtube':\n return 'ico-youtube'\n case 'x':\n case 'twitter':\n return 'ico-sns-x'\n case 'facebook':\n return 'ico-facebook'\n case 'blog':\n return 'ico-blog'\n default:\n return ''\n }\n}\n\n/**\n * KRDS Footer Component\n * @param quickLinks 퀵 링크 목록\n * @param address 주소\n * @param contacts 연락처 목록\n * @param logo 메인 로고 설정\n * @param links 링크 목록\n * @param socialLinks 소셜 미디어 링크 목록\n * @param bottomLinks 하단 링크 목록\n * @param copyright 저작권 텍스트\n * @param identifierText 식별자 텍스트 (하위 호환성)\n * @param identifier 식별자 설정 (identifierText보다 우선)\n * @param defaultLinkTarget 모든 링크의 기본 타겟 설정\n * @param hideQuickLinks 퀵 링크 섹션 숨김 여부\n * @param hideIdentifier 식별자 섹션 숨김 여부\n */\nexport const Footer = forwardRef<HTMLElement, FooterProps>(\n (\n {\n quickLinks,\n address,\n contacts,\n logo,\n links,\n socialLinks,\n bottomLinks,\n copyright,\n identifierText,\n identifier,\n defaultLinkTarget,\n hideQuickLinks = false,\n hideIdentifier = false,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <footer ref={ref} id=\"krds-footer\" className={classNames(className)} {...props}>\n {!hideQuickLinks && <FooterQuickLinks quickLinks={quickLinks} />}\n\n <div className=\"inner\">\n <FooterMainContent\n logo={logo}\n address={address}\n contacts={contacts}\n links={links}\n socialLinks={socialLinks}\n defaultLinkTarget={defaultLinkTarget}\n />\n\n <FooterBottom\n bottomLinks={bottomLinks}\n copyright={copyright}\n identifierText={identifierText}\n identifier={identifier}\n defaultLinkTarget={defaultLinkTarget}\n hideIdentifier={hideIdentifier}\n />\n </div>\n </footer>\n )\n }\n)\n\nFooter.displayName = 'Footer'\n\nexport default Footer\n","import React, { forwardRef, useRef, useEffect, HTMLAttributes, ButtonHTMLAttributes } from 'react'\nimport { classNames } from '@/utils'\nimport { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { DropdownItemProps, DropdownProps } from './Dropdown.types'\n\n/**\n * KRDS Dropdown Component\n * @param isOpen 드롭다운 열림 상태 (controlled)\n * @param defaultOpen 기본 드롭다운 열림 상태 (uncontrolled)\n * @param onOpenChange 드롭다운 상태 변경 시 호출되는 콜백 함수\n * @param buttonText 드롭다운 버튼 텍스트 또는 콘텐츠\n * @param buttonClassName 드롭다운 버튼 클래스명\n * @param children 드롭다운 메뉴 콘텐츠\n * @param showBottomSection 드롭다운 하단 영역 표시 여부\n * @param bottomContent 드롭다운 하단 영역 콘텐츠\n * @param className 사용자 정의 클래스명\n */\nconst DropdownRoot = forwardRef<HTMLButtonElement, DropdownProps>(\n (\n {\n isOpen,\n defaultOpen = false,\n onOpenChange,\n buttonText,\n buttonClassName = 'krds-btn small text drop-btn',\n children,\n className,\n ...rest\n },\n ref\n ) => {\n const [open, setOpen] = useUncontrolled({\n value: isOpen,\n defaultValue: defaultOpen,\n finalValue: false,\n onChange: onOpenChange\n })\n\n const dropdownRef = useRef<HTMLDivElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const handleToggle = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setOpen(!open)\n }\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setOpen(false)\n }\n }\n\n if (open) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [open, setOpen])\n\n return (\n <div ref={containerRef} className={classNames('krds-drop-wrap', open && 'active', className)}>\n <button\n type=\"button\"\n className={buttonClassName}\n onClick={handleToggle}\n aria-expanded={open}\n ref={ref}\n {...(rest as ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {buttonText}\n </button>\n\n <div className=\"drop-menu\" style={{ display: open ? 'block' : 'none' }} ref={dropdownRef}>\n <div className=\"drop-in\">{children}</div>\n </div>\n </div>\n )\n }\n)\n\nDropdownRoot.displayName = 'Dropdown'\n\nconst DropdownTopSection = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ children, className, ...props }, ref) => {\n return (\n <div ref={ref} className={classNames('drop-top', className)} {...props}>\n {children}\n </div>\n )\n})\n\nDropdownTopSection.displayName = 'DropdownTopSection'\n\nconst DropdownList = forwardRef<HTMLUListElement, HTMLAttributes<HTMLUListElement>>(({ children, className, ...props }, ref) => {\n return (\n <ul ref={ref} className={classNames('drop-list', className)} {...props}>\n {children}\n </ul>\n )\n})\n\nDropdownList.displayName = 'DropdownList'\n\nconst DropdownItem = forwardRef<HTMLButtonElement, DropdownItemProps>(({ children, className, isActive, ...props }, ref) => {\n return (\n <li>\n <button ref={ref} type=\"button\" className={classNames('item-link', className)} {...props}>\n {children}\n\n {isActive && <span className=\"sr-only\">선택됨</span>}\n </button>\n </li>\n )\n})\n\nDropdownItem.displayName = 'DropdownItem'\n\nconst DropdownBottomSection = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ children, className, ...props }, ref) => {\n return (\n <div ref={ref} className={classNames('drop-bottom', className)} {...props}>\n {children}\n </div>\n )\n})\n\nDropdownBottomSection.displayName = 'DropdownBottomSection'\n\nconst Dropdown = Object.assign(DropdownRoot, {\n Item: DropdownItem,\n List: DropdownList,\n TopSection: DropdownTopSection,\n BottomSection: DropdownBottomSection\n})\n\nexport { Dropdown }\n","import React, { useLayoutEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { PortalProps } from './Portal.types'\n\nexport const Portal: React.FC<PortalProps> = ({ children, enabled = true, container, containerClassName }) => {\n const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null)\n\n useLayoutEffect(() => {\n if (!enabled) return\n\n let targetContainer: HTMLElement | null = null\n\n if (!container) {\n targetContainer = document.body\n } else if (typeof container === 'string') {\n targetContainer = document.getElementById(container)\n\n if (!targetContainer) {\n targetContainer = document.createElement('div')\n targetContainer.id = container\n if (containerClassName) {\n targetContainer.className = containerClassName\n }\n document.body.appendChild(targetContainer)\n }\n } else if (container instanceof HTMLElement) {\n targetContainer = container\n }\n\n setPortalContainer(targetContainer)\n\n return () => {\n if (targetContainer && typeof container === 'string' && targetContainer.children.length === 0 && targetContainer.id === container) {\n try {\n document.body.removeChild(targetContainer)\n } catch {\n // ignore\n }\n }\n }\n }, [enabled, container, containerClassName])\n\n if (!enabled) {\n return <>{children}</>\n }\n\n if (!portalContainer) {\n return null\n }\n\n return createPortal(children, portalContainer)\n}\n\nPortal.displayName = 'Portal'\n","import { Portal } from '@/components/Portal'\nimport { classNames } from '@/utils'\nimport React, {\n forwardRef,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState\n} from 'react'\nimport type {\n DesktopBanner,\n DesktopLeafItem,\n DesktopMainDropdown,\n DesktopMainItem,\n DesktopMainLink,\n DesktopSubLink,\n DesktopSubMenu,\n MainMenuProps,\n MobileDepth3Item,\n MobileDepth4,\n MobileLinkItem,\n MobileMainItem,\n MobilePanelDepth3,\n MobilePanel,\n MobilePanelItem,\n MobilePanelLink,\n MobileTriggerProps\n} from './MainMenu.types'\n\nconst DEFAULT_SEARCH_PLACEHOLDER = '찾고자 하는 메뉴명을 입력해 주세요'\nconst DEFAULT_SEARCH_SR = '검색'\nconst DEFAULT_CLOSE_LABEL = '전체메뉴 닫기'\n\nconst fallbackKey = (provided: string | undefined, fallback: string) => (provided && provided.trim().length > 0 ? provided : fallback)\n\nconst toDomId = (key: string) => key.replace(/[^a-zA-Z0-9_-]/g, '_')\n\ntype MobileMenuPhase = 'idle' | 'pre-opening' | 'opening' | 'open' | 'closing'\n\nconst MobileTriggerButton = forwardRef<HTMLButtonElement, MobileTriggerProps>(\n ({ label, children, className, onClick, ...buttonProps }, ref) => (\n <button\n type=\"button\"\n className={classNames('btn-navi all', className)}\n onClick={onClick}\n ref={ref}\n aria-controls=\"mobile-nav\"\n {...buttonProps}\n >\n {children ?? label}\n </button>\n )\n)\n\nMobileTriggerButton.displayName = 'MainMenuMobileTrigger'\n\nconst createFocusTrap = (trap: HTMLElement) => {\n const focusable = trap.querySelectorAll<HTMLElement>('a, button, [tabindex=\"0\"], input, textarea, select')\n if (!focusable.length) return () => {}\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return\n const active = trap.ownerDocument.activeElement\n\n if (event.shiftKey) {\n if (active === first) {\n event.preventDefault()\n last.focus()\n }\n } else if (active === last) {\n event.preventDefault()\n first.focus()\n }\n }\n\n trap.addEventListener('keydown', handleKeyDown)\n return () => trap.removeEventListener('keydown', handleKeyDown)\n}\n\nconst ensureBackdrop = () => {\n let backdrop = document.querySelector<HTMLElement>('.gnb-backdrop')\n let owns = false\n\n if (!backdrop) {\n backdrop = document.createElement('div')\n backdrop.className = 'gnb-backdrop'\n document.body.appendChild(backdrop)\n owns = true\n }\n\n return { backdrop, owns }\n}\n\nconst breakpoint = 1024\n\nconst MainMenu = forwardRef<HTMLElement, MainMenuProps>((props, ref) => {\n const { desktop, mobile, mobileTrigger, onMobileMenuOpen, onMobileMenuClose, desktopPortalId, mobilePortalId } = props\n const mobileNavId = mobile.id?.trim() ? mobile.id : 'mobile-nav'\n const mobileTriggerContainer = 'mobileTriggerPortalId' in props ? props.mobileTriggerPortalId : props.mobileTriggerContainerElement\n const desktopNavRef = useRef<HTMLElement | null>(null)\n const mobileNavRef = useRef<HTMLDivElement | null>(null)\n const mobileBodyRef = useRef<HTMLDivElement | null>(null)\n\n const mainListRefs = useRef<Record<string, HTMLDivElement | null>>({})\n const subListRefs = useRef<Record<string, HTMLDivElement | null>>({})\n const mainTriggerRefs = useRef<Record<string, HTMLElement | null>>({})\n const mobilePanelRefs = useRef<Record<string, HTMLDivElement | null>>({})\n const depth4Refs = useRef<Record<string, HTMLDivElement | null>>({})\n const depth4TriggerRefs = useRef<Record<string, HTMLElement | null>>({})\n\n const desktopEntries = useMemo(\n () =>\n desktop.items.map((item, index) => ({\n item,\n key: fallbackKey((item as DesktopMainDropdown | DesktopMainLink).id, `desktop-main-${index}`),\n index\n })),\n [desktop.items]\n )\n\n const mobileEntries = useMemo(\n () =>\n mobile.body.mainItems.map((item, index) => ({\n item,\n key: fallbackKey(item.id, `mobile-main-${index}`),\n index\n })),\n [mobile.body.mainItems]\n )\n\n const [desktopActiveMain, setDesktopActiveMain] = useState<string | null>(null)\n const [desktopActiveSub, setDesktopActiveSub] = useState<Record<string, string | null>>({})\n const [isMobileOpen, setIsMobileOpen] = useState(false)\n const [mobileActiveMain, setMobileActiveMain] = useState<string | null>(mobileEntries[0]?.key ?? null)\n const [openDepth3, setOpenDepth3] = useState<Record<string, boolean>>({})\n const [openDepth4, setOpenDepth4] = useState<string | null>(null)\n const [searchQuery, setSearchQuery] = useState('')\n const [mobileMenuPhase, setMobileMenuPhase] = useState<MobileMenuPhase>('idle')\n const previousMobileOpenRef = useRef(isMobileOpen)\n const mobileTransitionTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const isMobileOpenRef = useRef(isMobileOpen)\n\n const backdropInfoRef = useRef<{ backdrop: HTMLElement; owns: boolean } | null>(null)\n\n useImperativeHandle(ref, () => desktopNavRef.current as HTMLElement, [])\n\n useEffect(() => {\n if (!mobileEntries.length) {\n setMobileActiveMain(null)\n } else {\n setMobileActiveMain(prev => prev ?? mobileEntries[0].key)\n }\n }, [mobileEntries])\n\n const desktopItemMap = useMemo(() => {\n const map = new Map<string, DesktopMainItem>()\n desktopEntries.forEach(entry => map.set(entry.key, entry.item))\n return map\n }, [desktopEntries])\n\n const activeDesktopItem = desktopActiveMain ? desktopItemMap.get(desktopActiveMain) : null\n const shouldShowBackdrop = Boolean(\n activeDesktopItem && activeDesktopItem.type === 'dropdown' && !(activeDesktopItem as DesktopMainDropdown).isDropdownTrigger\n )\n\n const closeDesktopMenu = useCallback(() => {\n setDesktopActiveMain(null)\n }, [])\n\n useEffect(() => {\n const { backdrop, owns } = ensureBackdrop()\n backdropInfoRef.current = { backdrop, owns }\n\n const handleBackdropClick = () => closeDesktopMenu()\n backdrop.addEventListener('click', handleBackdropClick)\n\n return () => {\n backdrop.removeEventListener('click', handleBackdropClick)\n if (owns && backdrop.parentElement === document.body) {\n document.body.removeChild(backdrop)\n }\n }\n }, [closeDesktopMenu])\n\n useEffect(() => {\n const handler = (event: MouseEvent) => {\n const nav = desktopNavRef.current\n if (!nav) return\n const target = event.target as Node\n if (!nav.contains(target)) {\n closeDesktopMenu()\n }\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [closeDesktopMenu])\n\n useEffect(() => {\n const handler = (event: KeyboardEvent) => {\n if (event.code === 'Escape') {\n closeDesktopMenu()\n setIsMobileOpen(false)\n }\n }\n document.addEventListener('keyup', handler)\n return () => document.removeEventListener('keyup', handler)\n }, [closeDesktopMenu])\n\n useEffect(() => {\n isMobileOpenRef.current = isMobileOpen\n }, [isMobileOpen])\n\n useEffect(() => {\n const info = backdropInfoRef.current\n if (!info) return\n const { backdrop } = info\n const body = document.body\n\n if (shouldShowBackdrop) {\n backdrop.classList.add('active')\n body.classList.add('is-gnb-web')\n if (body.scrollHeight > window.innerHeight) {\n body.classList.add('hasScrollY')\n }\n } else {\n backdrop.classList.remove('active')\n body.classList.remove('is-gnb-web')\n body.classList.remove('hasScrollY')\n }\n }, [shouldShowBackdrop])\n\n const registerMainListRef = useCallback((key: string, node: HTMLDivElement | null) => {\n if (node) {\n mainListRefs.current[key] = node\n } else {\n delete mainListRefs.current[key]\n }\n }, [])\n\n const registerSubListRef = useCallback((mainKey: string, subKey: string, node: HTMLDivElement | null) => {\n const composite = `${mainKey}__${subKey}`\n if (node) {\n subListRefs.current[composite] = node\n } else {\n delete subListRefs.current[composite]\n }\n }, [])\n\n const registerMainTriggerRef = useCallback((key: string, node: HTMLElement | null) => {\n if (node) {\n mainTriggerRefs.current[key] = node\n } else {\n delete mainTriggerRefs.current[key]\n }\n }, [])\n\n const registerPanelRef = useCallback((key: string, node: HTMLDivElement | null) => {\n if (node) {\n mobilePanelRefs.current[key] = node\n } else {\n delete mobilePanelRefs.current[key]\n }\n }, [])\n\n const registerDepth4Ref = useCallback((key: string, node: HTMLDivElement | null) => {\n if (node) {\n depth4Refs.current[key] = node\n } else {\n delete depth4Refs.current[key]\n }\n }, [])\n\n const registerDepth4TriggerRef = useCallback((key: string, node: HTMLElement | null) => {\n if (node) {\n depth4TriggerRefs.current[key] = node\n } else {\n delete depth4TriggerRefs.current[key]\n }\n }, [])\n\n useLayoutEffect(() => {\n if (!desktopActiveMain) return\n const mainList = mainListRefs.current[desktopActiveMain]\n if (!mainList) return\n const subKey = desktopActiveSub[desktopActiveMain]\n if (!subKey) {\n mainList.style.minHeight = ''\n return\n }\n const composite = `${desktopActiveMain}__${subKey}`\n const subList = subListRefs.current[composite]\n if (!subList) return\n mainList.style.minHeight = subList.scrollHeight ? `${subList.scrollHeight}px` : ''\n }, [desktopActiveMain, desktopActiveSub])\n\n useEffect(() => {\n if (desktopActiveMain) return\n Object.values(mainListRefs.current).forEach(node => {\n if (node) node.style.minHeight = ''\n })\n }, [desktopActiveMain])\n\n const handleDesktopMainClick = useCallback(\n (entry: { item: DesktopMainItem; key: string }) => {\n const { item, key } = entry\n if (item.type === 'link') return\n\n if (desktopActiveMain === key) {\n closeDesktopMenu()\n return\n }\n\n const dropdown = item as DesktopMainDropdown\n const firstIndex = dropdown.sections.findIndex(section => section.type === 'menu')\n const firstSubKey =\n firstIndex >= 0 ? fallbackKey((dropdown.sections[firstIndex] as DesktopSubMenu).id, `${key}-section-${firstIndex}`) : null\n\n setDesktopActiveMain(key)\n setDesktopActiveSub(prev => ({ ...prev, [key]: firstSubKey }))\n },\n [closeDesktopMenu, desktopActiveMain]\n )\n\n const handleDesktopSubClick = useCallback((mainKey: string, subKey: string) => {\n setDesktopActiveSub(prev => ({ ...prev, [mainKey]: subKey }))\n }, [])\n\n const desktopMainKeys = useMemo(() => desktopEntries.map(entry => entry.key), [desktopEntries])\n\n const handleMainKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLElement>, index: number) => {\n const focusByIndex = (idx: number) => {\n const key = desktopMainKeys[(idx + desktopMainKeys.length) % desktopMainKeys.length]\n const trigger = mainTriggerRefs.current[key]\n trigger?.focus()\n }\n\n switch (event.key) {\n case 'Home':\n event.preventDefault()\n focusByIndex(0)\n break\n case 'End':\n event.preventDefault()\n focusByIndex(desktopMainKeys.length - 1)\n break\n case 'ArrowRight':\n case 'ArrowDown':\n event.preventDefault()\n focusByIndex(index + 1)\n break\n case 'ArrowLeft':\n case 'ArrowUp':\n event.preventDefault()\n focusByIndex(index - 1)\n break\n default:\n break\n }\n },\n [desktopMainKeys]\n )\n\n useEffect(() => {\n const nav = mobileNavRef.current\n if (!nav) return\n\n if (mobileTransitionTimeoutRef.current) {\n clearTimeout(mobileTransitionTimeoutRef.current)\n mobileTransitionTimeoutRef.current = null\n }\n\n if (isMobileOpen) {\n setMobileMenuPhase(prev => {\n if (prev === 'open' || prev === 'opening') return prev\n return 'pre-opening'\n })\n\n const activeTrigger = nav.querySelector('.gnb-main-trigger.active')\n if (activeTrigger && mobileBodyRef.current) {\n const id = activeTrigger.getAttribute('aria-controls')\n if (id) {\n const targetPanel = document.getElementById(id)\n if (targetPanel && mobileBodyRef.current) {\n const bodyRef = mobileBodyRef.current\n bodyRef.style.scrollBehavior = 'auto'\n bodyRef.scrollTop = targetPanel.offsetTop\n requestAnimationFrame(() => {\n bodyRef.style.scrollBehavior = ''\n })\n }\n }\n }\n\n const openingTimeout = setTimeout(() => {\n if (!isMobileOpenRef.current) return\n setMobileMenuPhase(prev => (prev === 'open' ? prev : 'opening'))\n document.body.classList.add('is-gnb-mobile')\n\n const handleTransitionEnd = (e: TransitionEvent) => {\n if (e.target !== nav) return\n if (!isMobileOpenRef.current) {\n nav.removeEventListener('transitionend', handleTransitionEnd)\n return\n }\n setMobileMenuPhase('open')\n const gnbWrap = nav.querySelector('.gnb-wrap')\n if (gnbWrap instanceof HTMLElement) {\n gnbWrap.setAttribute('tabindex', '0')\n gnbWrap.focus()\n }\n nav.removeEventListener('transitionend', handleTransitionEnd)\n\n document.querySelector('#krds-header .header-in')?.setAttribute('inert', '')\n document.getElementById('container')?.setAttribute('inert', '')\n document.getElementById('footer')?.setAttribute('inert', '')\n }\n\n nav.addEventListener('transitionend', handleTransitionEnd)\n }, 100)\n\n mobileTransitionTimeoutRef.current = openingTimeout\n } else {\n setMobileMenuPhase(prev => (prev === 'idle' ? prev : 'closing'))\n\n document.querySelector('#krds-header .header-in')?.removeAttribute('inert')\n document.getElementById('container')?.removeAttribute('inert')\n document.getElementById('footer')?.removeAttribute('inert')\n\n const handleTransitionEnd = (e: TransitionEvent) => {\n if (e.target !== nav) return\n if (isMobileOpenRef.current) {\n nav.removeEventListener('transitionend', handleTransitionEnd)\n return\n }\n setMobileMenuPhase('idle')\n const navId = nav.getAttribute('id')\n const openGnb = navId ? document.querySelector(`[aria-controls=${navId}]`) : null\n if (openGnb instanceof HTMLElement) {\n openGnb.focus()\n }\n nav.removeAttribute('tabindex')\n nav.removeEventListener('transitionend', handleTransitionEnd)\n }\n\n nav.addEventListener('transitionend', handleTransitionEnd)\n\n const closingTimeout = setTimeout(() => {\n document.body.classList.remove('is-gnb-mobile')\n }, 400)\n\n mobileTransitionTimeoutRef.current = closingTimeout\n }\n\n return () => {\n if (mobileTransitionTimeoutRef.current) {\n clearTimeout(mobileTransitionTimeoutRef.current)\n mobileTransitionTimeoutRef.current = null\n }\n }\n }, [isMobileOpen])\n\n useEffect(() => {\n const wasOpen = previousMobileOpenRef.current\n if (wasOpen !== isMobileOpen) {\n if (isMobileOpen) {\n onMobileMenuOpen?.()\n } else {\n onMobileMenuClose?.()\n }\n previousMobileOpenRef.current = isMobileOpen\n }\n }, [isMobileOpen, onMobileMenuClose, onMobileMenuOpen])\n\n useEffect(() => {\n return () => {\n if (previousMobileOpenRef.current) {\n onMobileMenuClose?.()\n }\n }\n }, [onMobileMenuClose])\n\n useEffect(() => {\n if (!isMobileOpen) return\n const nav = mobileNavRef.current\n if (!nav) return\n const cleanup = createFocusTrap(nav)\n return cleanup\n }, [isMobileOpen])\n\n const handleMobileOpen = useCallback(() => {\n setMobileMenuPhase(prev => {\n if (prev === 'open' || prev === 'opening') return prev\n return 'pre-opening'\n })\n setIsMobileOpen(true)\n }, [])\n\n const handleMobileClose = useCallback(() => {\n setMobileMenuPhase(prev => (prev === 'idle' ? prev : 'closing'))\n setIsMobileOpen(false)\n setOpenDepth4(null)\n }, [])\n\n const handleMobileBackdropClick = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement\n const gnbWrap = mobileNavRef.current?.querySelector('.gnb-wrap')\n if (gnbWrap && !gnbWrap.contains(target)) {\n if (gnbWrap instanceof HTMLElement) {\n gnbWrap.focus()\n }\n }\n }, [])\n\n const mobileTriggerContent = useMemo(() => {\n if (mobileTrigger && isValidElement(mobileTrigger)) {\n return cloneElement(mobileTrigger, {\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => {\n if (typeof mobileTrigger.props.onClick === 'function') {\n mobileTrigger.props.onClick(event)\n }\n if (!event.defaultPrevented) {\n handleMobileOpen()\n }\n },\n 'aria-controls': mobileTrigger.props['aria-controls'] ?? mobileNavId\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any)\n }\n\n return <MobileTriggerButton onClick={handleMobileOpen} aria-controls={mobileNavId} />\n }, [mobileTrigger, handleMobileOpen, mobileNavId])\n\n const mobileTriggerNode = useMemo(\n () => <Portal container={mobileTriggerContainer}>{mobileTriggerContent}</Portal>,\n [mobileTriggerContainer, mobileTriggerContent]\n )\n\n const isMobileMenuVisible = mobileMenuPhase !== 'idle'\n const shouldApplyMobileOpenClasses = mobileMenuPhase === 'opening' || mobileMenuPhase === 'open'\n\n const handleMobileMainClick = useCallback((event: React.MouseEvent<HTMLAnchorElement>, entry: { item: MobileMainItem; key: string }) => {\n event.preventDefault()\n const { item, key } = entry\n setMobileActiveMain(key)\n const firstPanel = item.panels[0]\n if (!firstPanel) return\n const panelKey = fallbackKey(firstPanel.id, `${key}-panel-0`)\n const panelNode = mobilePanelRefs.current[panelKey]\n const body = mobileBodyRef.current\n if (panelNode && body) {\n body.scrollTo({ top: panelNode.offsetTop, left: 0, behavior: 'smooth' })\n }\n }, [])\n\n const mobilePanelsFlat = useMemo(\n () =>\n mobileEntries.flatMap(entry =>\n entry.item.panels.map((panel, panelIndex) => ({\n panel,\n panelKey: fallbackKey(panel.id, `${entry.key}-panel-${panelIndex}`),\n ownerKey: entry.key\n }))\n ),\n [mobileEntries]\n )\n\n useEffect(() => {\n const body = mobileBodyRef.current\n if (!body) return\n\n const handler = () => {\n let currentKey: string | null = null\n const scrollTop = body.scrollTop\n\n for (const { panelKey, ownerKey } of mobilePanelsFlat) {\n const node = mobilePanelRefs.current[panelKey]\n if (!node) continue\n if (scrollTop >= node.offsetTop - 10) {\n currentKey = ownerKey\n }\n }\n\n if (currentKey) {\n setMobileActiveMain(currentKey)\n }\n }\n\n body.addEventListener('scroll', handler)\n return () => body.removeEventListener('scroll', handler)\n }, [mobilePanelsFlat])\n\n useEffect(() => {\n const handleResize = () => {\n if (window.innerWidth >= breakpoint) {\n setIsMobileOpen(false)\n }\n }\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [])\n\n const toggleDepth3 = useCallback((key: string) => {\n setOpenDepth3(prev => ({ ...prev, [key]: !prev[key] }))\n }, [])\n\n const openDepth4Panel = useCallback((event: React.MouseEvent<HTMLElement>, _item: MobileDepth4, key: string) => {\n event.preventDefault()\n setOpenDepth4(key)\n const wrap = depth4Refs.current[key]\n if (wrap) {\n wrap.style.display = 'block'\n requestAnimationFrame(() => {\n wrap.classList.add('is-open')\n const prevButton = wrap.querySelector<HTMLButtonElement>('.trigger-prev')\n prevButton?.focus()\n })\n }\n depth4TriggerRefs.current[key] = event.currentTarget as HTMLElement\n }, [])\n\n const closeDepth4Panel = useCallback((key: string) => {\n const wrap = depth4Refs.current[key]\n const trigger = depth4TriggerRefs.current[key]\n if (wrap) {\n wrap.classList.remove('is-open')\n setTimeout(() => {\n wrap.style.display = ''\n trigger?.focus()\n }, 250)\n }\n setOpenDepth4(current => (current === key ? null : current))\n }, [])\n\n const handleSearchSubmit = useCallback(\n (event: React.FormEvent) => {\n event.preventDefault()\n const trimmed = searchQuery.trim()\n if (!trimmed) return\n mobile.header?.search?.onSearch?.(trimmed)\n },\n [mobile.header?.search, searchQuery]\n )\n\n const renderDesktopLeafList = (items: DesktopLeafItem[], parentKey: string) => {\n const hasDescription = items.some(item => item.description)\n\n return (\n <ul className={classNames(hasDescription && 'type-description')}>\n {items.map((item, index) => {\n const leafKey = fallbackKey(item.id, `${parentKey}-leaf-${index}`)\n const content =\n item.href && !item.asButton ? (\n <a\n href={item.href || '#'}\n target={item.isExternal ? '_blank' : undefined}\n title={item.isExternal ? '새 창 열림' : undefined}\n onClick={item.onClick}\n >\n {item.label}\n {item.isExternal && <i className=\"svg-icon ico-go\" />}\n </a>\n ) : (\n <button type=\"button\" onClick={item.onClick}>\n {item.label}\n </button>\n )\n\n if (item.description) {\n return (\n <li key={leafKey}>\n <h3 className=\"tit\">{content}</h3>\n <p className=\"txt\">{item.description}</p>\n </li>\n )\n }\n\n return <li key={leafKey}>{content}</li>\n })}\n </ul>\n )\n }\n\n const renderDesktopBanner = (banner?: DesktopBanner) => {\n if (!banner) return null\n return (\n <div className=\"gnb-sub-banner\">\n {banner.badgeText && <span className=\"krds-badge bg-secondary\">{banner.badgeText}</span>}\n {banner.children}\n <button type=\"button\" className=\"krds-btn medium text\" onClick={banner.onButtonClick}>\n {banner.buttonText} <i className=\"svg-icon ico-angle right\" />\n </button>\n </div>\n )\n }\n\n const renderDesktopSubMenu = (mainKey: string, sectionEntry: { section: DesktopSubMenu; key: string }) => {\n const { section, key: subKey } = sectionEntry\n const isActive = desktopActiveSub[mainKey] === subKey\n const panelId = toDomId(`gnb-sub-${subKey}`)\n\n return (\n <li key={subKey}>\n <button\n type=\"button\"\n className={classNames('gnb-sub-trigger', isActive && 'active')}\n data-trigger=\"gnb\"\n aria-expanded={isActive ? 'true' : 'false'}\n aria-controls={panelId}\n onClick={() => handleDesktopSubClick(mainKey, subKey)}\n >\n {section.label}\n </button>\n <div\n className={classNames('gnb-sub-list', section.layout && section.layout !== 'default' && section.layout, isActive && 'active')}\n id={panelId}\n ref={node => registerSubListRef(mainKey, subKey, node)}\n >\n <div className=\"gnb-sub-content\">\n <h2 className=\"sub-title\">\n <span>{section.label}</span>\n {section.quickLinkHref && (\n <a\n href={section.quickLinkHref || '#'}\n className=\"krds-btn link basic small\"\n target={section.quickLinkExternal ? '_blank' : undefined}\n title={section.quickLinkExternal ? '새 창 열림' : undefined}\n >\n <span className=\"underline\">{section.quickLinkLabel ?? '바로가기'}</span>\n <i className=\"svg-icon ico-angle right\" />\n </a>\n )}\n </h2>\n {renderDesktopLeafList(section.items, subKey)}\n </div>\n {renderDesktopBanner(section.banner)}\n </div>\n </li>\n )\n }\n\n const renderDesktopSubLink = (sectionEntry: { section: DesktopSubLink; key: string }) => {\n const { section, key } = sectionEntry\n return (\n <li key={key}>\n <a\n href={section.href || '#'}\n className=\"gnb-sub-trigger is-link\"\n data-trigger=\"gnb\"\n target={section.isExternal ? '_blank' : undefined}\n title={section.isExternal ? '새 창 열림' : undefined}\n onClick={section.onClick}\n >\n {section.label}\n </a>\n </li>\n )\n }\n\n const renderDesktopMainItem = (entry: { item: DesktopMainItem; key: string; index: number }) => {\n const { item, key: mainKey, index } = entry\n\n if (item.type === 'link') {\n const link = item as DesktopMainLink\n const triggerProps = {\n 'data-trigger': 'gnb' as const,\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => handleMainKeyDown(event, index),\n ref: (node: HTMLElement | null) => registerMainTriggerRef(mainKey, node)\n }\n\n if (link.renderAsButton || !link.href) {\n return (\n <li key={mainKey}>\n <button type=\"button\" className=\"gnb-main-trigger is-link\" onClick={link.onClick} {...triggerProps}>\n {link.label}\n </button>\n </li>\n )\n }\n\n return (\n <li key={mainKey}>\n <a\n href={link.href || '#'}\n className=\"gnb-main-trigger is-link\"\n target={link.isExternal ? '_blank' : undefined}\n title={link.isExternal ? '새 창 열림' : undefined}\n onClick={link.onClick}\n {...triggerProps}\n >\n {link.label}\n </a>\n </li>\n )\n }\n\n const dropdown = item as DesktopMainDropdown\n const isActive = desktopActiveMain === mainKey\n const toggleId = toDomId(`gnb-main-${mainKey}`)\n\n const sectionEntries = dropdown.sections.map((section, sectionIndex) => ({\n section,\n key: fallbackKey((section as DesktopSubMenu | DesktopSubLink).id, `${mainKey}-section-${sectionIndex}`),\n index: sectionIndex\n }))\n\n return (\n <li key={mainKey}>\n <button\n type=\"button\"\n className={classNames('gnb-main-trigger', dropdown.isDropdownTrigger && 'is-dropdown', isActive && 'active')}\n data-trigger=\"gnb\"\n aria-haspopup=\"true\"\n aria-expanded={isActive ? 'true' : 'false'}\n aria-controls={toggleId}\n onClick={() => handleDesktopMainClick({ item, key: mainKey })}\n onKeyDown={event => handleMainKeyDown(event, index)}\n ref={node => registerMainTriggerRef(mainKey, node)}\n >\n {dropdown.label}\n </button>\n <div className={classNames('gnb-toggle-wrap', isActive && 'is-open')} id={toggleId}>\n <div\n className={classNames('gnb-main-list', dropdown.mainListClassName)}\n data-has-submenu={sectionEntries.some(section => section.section.type === 'menu') ? 'true' : 'false'}\n ref={node => registerMainListRef(mainKey, node)}\n >\n <ul>\n {sectionEntries.map(sectionEntry =>\n sectionEntry.section.type === 'menu'\n ? renderDesktopSubMenu(mainKey, {\n section: sectionEntry.section as DesktopSubMenu,\n key: sectionEntry.key\n })\n : renderDesktopSubLink({\n section: sectionEntry.section as DesktopSubLink,\n key: sectionEntry.key\n })\n )}\n </ul>\n </div>\n </div>\n </li>\n )\n }\n\n const renderMobileDepth3Item = (entry: { item: MobileDepth3Item; key: string; index: number }) => {\n const { item, key: depth3Key } = entry\n\n if (item.type === 'link') {\n return (\n <li key={depth3Key}>\n <a href={item.href || '#'} className=\"depth3-trigger\">\n {item.label}\n </a>\n </li>\n )\n }\n\n const depth4 = item as MobileDepth4\n const isOpen = openDepth4 === depth3Key\n const depth4Entries = depth4.items.map((link, depth4Index) => ({\n link,\n key: fallbackKey(link.id, `${depth3Key}-depth4-${depth4Index}`)\n }))\n\n return (\n <li key={depth3Key}>\n <a\n href=\"#\"\n className={classNames('depth3-trigger', 'has-depth4', isOpen && 'active')}\n onClick={event => openDepth4Panel(event, depth4, depth3Key)}\n ref={node => registerDepth4TriggerRef(depth3Key, node)}\n >\n {depth4.label}\n </a>\n <div\n className={classNames('depth4-wrap', isOpen && 'is-open')}\n style={{ display: isOpen ? 'block' : undefined }}\n ref={node => registerDepth4Ref(depth3Key, node)}\n >\n <div className=\"depth4-head\">\n <button type=\"button\" className=\"krds-btn icon trigger-prev\" onClick={() => closeDepth4Panel(depth3Key)}>\n <span className=\"sr-only\">이전화면</span>\n <i className=\"svg-icon ico-angle left\" />\n </button>\n <button type=\"button\" className=\"krds-btn icon trigger-close\" onClick={() => closeDepth4Panel(depth3Key)}>\n <span className=\"sr-only\">{DEFAULT_CLOSE_LABEL}</span>\n <i className=\"svg-icon ico-popup-close\" />\n </button>\n </div>\n <div className=\"depth4-body\">\n <h4 className=\"sub-title\">{depth4.title}</h4>\n <ul className=\"depth4-ul\">\n {depth4Entries.map(entry => (\n <li key={entry.key}>\n <a\n href={entry.link.href || '#'}\n target={entry.link.isExternal ? '_blank' : undefined}\n title={entry.link.isExternal ? '새 창 열림' : undefined}\n >\n {entry.link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </li>\n )\n }\n\n const renderMobilePanelItem = (entry: { item: MobilePanelItem; key: string; index: number }) => {\n const { item, key } = entry\n\n if (item.type === 'link') {\n const link = item as MobilePanelLink\n return (\n <li key={key}>\n <a href={link.href || '#'} className=\"gnb-sub-trigger\">\n {link.label}\n </a>\n </li>\n )\n }\n\n const depth3 = item as MobilePanelDepth3\n const depth3Key = key\n const isOpen = openDepth3[depth3Key] ?? false\n\n return (\n <li key={depth3Key}>\n <a\n href=\"#\"\n className={classNames('gnb-sub-trigger', 'has-depth3', isOpen && 'active')}\n onClick={event => {\n event.preventDefault()\n toggleDepth3(depth3Key)\n }}\n >\n {depth3.label}\n </a>\n <div className={classNames('depth3-wrap', isOpen && 'is-open')}>\n <ul>\n {depth3.items.map((child, childIndex) =>\n renderMobileDepth3Item({\n item: child,\n key: fallbackKey(child.id, `${depth3Key}-child-${childIndex}`),\n index: childIndex\n })\n )}\n </ul>\n </div>\n </li>\n )\n }\n\n const renderMobilePanel = (entry: { panel: MobilePanel; key: string; index: number }) => {\n const { panel, key: panelKey } = entry\n const panelDomId = toDomId(panelKey)\n\n return (\n <div className=\"gnb-sub-list\" id={panelDomId} key={panelKey} ref={node => registerPanelRef(panelKey, node)}>\n <h2 className=\"sub-title\">{panel.label}</h2>\n <ul>\n {panel.items.map((item, itemIndex) =>\n renderMobilePanelItem({\n item,\n key: fallbackKey((item as MobilePanelLink | MobilePanelDepth3).id, `${panelKey}-item-${itemIndex}`),\n index: itemIndex\n })\n )}\n </ul>\n </div>\n )\n }\n\n const renderMobileMainItem = (entry: { item: MobileMainItem; key: string; index: number }) => {\n const { item, key: mainKey } = entry\n const firstPanel = item.panels[0]\n const firstPanelKey = firstPanel ? fallbackKey(firstPanel.id, `${mainKey}-panel-0`) : mainKey\n const href = `#${toDomId(firstPanelKey)}`\n\n return (\n <li key={mainKey}>\n <a\n href={href}\n className={classNames('gnb-main-trigger', mobileActiveMain === mainKey && 'active')}\n onClick={event => handleMobileMainClick(event, entry)}\n >\n {item.label}\n </a>\n </li>\n )\n }\n\n const renderUtilityItem = (item: MobileLinkItem | { id?: string; label: string; href?: string; onClick?: () => void }, index: number) => {\n const key = fallbackKey(item.id as string | undefined, `utility-${index}`)\n if ('href' in item && item.href) {\n return (\n <li key={key}>\n <a href={item.href || '#'} className=\"krds-btn xsmall text\" onClick={item.onClick}>\n {item.label}\n </a>\n </li>\n )\n }\n return (\n <li key={key}>\n <button type=\"button\" className=\"krds-btn xsmall text\" onClick={item.onClick}>\n {item.label}\n </button>\n </li>\n )\n }\n\n const desktopMenuContent = (\n <nav className=\"krds-main-menu\" ref={desktopNavRef}>\n <div className=\"inner\">\n <ul className=\"gnb-menu\">{desktopEntries.map(renderDesktopMainItem)}</ul>\n </div>\n </nav>\n )\n\n const mobileMenuContent = (\n <div\n id={mobileNavId}\n className={classNames(\n 'krds-main-menu-mobile',\n shouldApplyMobileOpenClasses && 'is-backdrop',\n shouldApplyMobileOpenClasses && 'is-open'\n )}\n style={{ display: isMobileMenuVisible ? 'block' : 'none' }}\n ref={mobileNavRef}\n onClick={handleMobileBackdropClick}\n >\n <div className=\"gnb-wrap\">\n <div className=\"gnb-header\">\n {mobile.header?.utilities && mobile.header.utilities.length > 0 && (\n <div className=\"gnb-utils\">\n <ul className=\"utility-list\">{mobile.header.utilities.map((util, index) => renderUtilityItem(util, index))}</ul>\n </div>\n )}\n\n {mobile.header?.login && (\n <div className=\"gnb-login\">\n {mobile.header.login.isLoggedIn ? (\n <>\n {mobile.header.login.userName && <span className=\"user\">{mobile.header.login.userName}</span>}\n <button type=\"button\" className=\"krds-btn large text\" onClick={mobile.header.login.onLogout}>\n <i className=\"svg-icon ico-logout\" />\n {mobile.header.login.logoutText ?? '로그아웃'}\n </button>\n </>\n ) : (\n <button type=\"button\" className=\"krds-btn large text\" onClick={mobile.header.login.onLogin}>\n <i className=\"svg-icon ico-log\" />\n {mobile.header.login.loginText ?? '로그인을 해주세요'}\n </button>\n )}\n </div>\n )}\n\n {mobile.header?.services && mobile.header.services.length > 0 && (\n <div className=\"gnb-service-menu\">\n {mobile.header.services.map((service, index) => {\n const key = fallbackKey(service.id, `service-${index}`)\n return (\n <a key={key} href={service.href || '#'} className=\"link\" onClick={service.onClick}>\n {service.label}\n </a>\n )\n })}\n </div>\n )}\n\n {mobile.header?.search && (\n <form className=\"sch-input\" onSubmit={handleSearchSubmit}>\n <input\n type=\"text\"\n className=\"krds-input\"\n value={searchQuery}\n onChange={event => setSearchQuery(event.target.value)}\n placeholder={mobile.header.search.placeholder ?? DEFAULT_SEARCH_PLACEHOLDER}\n title=\"찾고자 하는 메뉴명 입력\"\n />\n <button type=\"submit\" className=\"krds-btn medium icon ico-search\">\n <span className=\"sr-only\">{DEFAULT_SEARCH_SR}</span>\n <i className=\"svg-icon ico-sch\" />\n </button>\n </form>\n )}\n </div>\n\n <div className=\"gnb-body\" ref={mobileBodyRef}>\n <div className=\"gnb-menu\">\n <div className=\"menu-wrap\">\n <ul>{mobileEntries.map(renderMobileMainItem)}</ul>\n </div>\n <div className=\"submenu-wrap\">\n {mobileEntries.flatMap(entry =>\n entry.item.panels.map((panel, panelIndex) =>\n renderMobilePanel({\n panel,\n key: fallbackKey(panel.id, `${entry.key}-panel-${panelIndex}`),\n index: panelIndex\n })\n )\n )}\n </div>\n </div>\n\n {mobile.bottomLinks && mobile.bottomLinks.length > 0 && (\n <div className=\"gnb-bottom\">\n {mobile.bottomLinks.map((link, index) => (\n <a\n key={fallbackKey(link.id, `bottom-${index}`)}\n href={link.href || '#'}\n className=\"krds-btn small text\"\n target={link.isExternal ? '_blank' : undefined}\n title={link.isExternal ? '새 창 열림' : undefined}\n onClick={link.onClick}\n >\n {link.label}\n <i className={`svg-icon ${link.isExternal ? 'ico-go' : 'ico-angle right'}`} />\n </a>\n ))}\n </div>\n )}\n </div>\n\n <button type=\"button\" className=\"krds-btn medium icon\" id=\"close-nav\" onClick={handleMobileClose}>\n <span className=\"sr-only\">{DEFAULT_CLOSE_LABEL}</span>\n <i className=\"svg-icon ico-popup-close\" />\n </button>\n </div>\n </div>\n )\n\n return (\n <>\n {mobileTriggerNode}\n {desktopPortalId ? <Portal container={desktopPortalId}>{desktopMenuContent}</Portal> : desktopMenuContent}\n {mobilePortalId ? <Portal container={mobilePortalId}>{mobileMenuContent}</Portal> : mobileMenuContent}\n </>\n )\n})\n\nMainMenu.displayName = 'MainMenu'\n\nconst MainMenuWithStatic = MainMenu as typeof MainMenu & {\n MobileTrigger: typeof MobileTriggerButton\n}\n\nMainMenuWithStatic.MobileTrigger = MobileTriggerButton\n\nexport default MainMenuWithStatic\n","import { Dropdown } from '@/components/Dropdown'\nimport MainMenu from '@/components/MainMenu/MainMenu'\nimport type { MobileTriggerProps } from '@/components/MainMenu/MainMenu.types'\nimport { classNames } from '@/utils'\nimport {\n Children,\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useState\n} from 'react'\nimport type { ButtonHTMLAttributes, ComponentPropsWithoutRef, ReactNode, Ref } from 'react'\nimport type {\n HeaderBrandingProps,\n HeaderComponentSubmodules,\n HeaderContextType,\n HeaderMainMenuProps,\n HeaderMyGovProps,\n HeaderNaviButtonJoinProps,\n HeaderNaviButtonLoginProps,\n HeaderNaviButtonLogoutProps,\n HeaderNaviButtonSearchProps,\n HeaderNaviProps,\n HeaderProps,\n HeaderUtilitiesProps,\n HeaderUtilityDropdownProps,\n HeaderUtilityProps\n} from './Header.types'\n\nconst Slot = forwardRef<any, { children?: ReactNode } & Record<string, unknown>>(({ children, ...props }, ref) => {\n if (isValidElement(children)) {\n return cloneElement(children, {\n ...props,\n ...(children as any)?.props,\n ref\n })\n }\n return null\n})\nSlot.displayName = 'HeaderSlot'\n\nconst HeaderContext = createContext<HeaderContextType | null>(null)\n\nconst useHeaderContext = () => {\n const context = useContext(HeaderContext)\n if (!context) {\n throw new Error('Header compound components must be used within Header')\n }\n return context\n}\n\nconst MyGovContext = createContext<{\n close: () => void\n} | null>(null)\n\nconst useMyGovContext = () => useContext(MyGovContext)\n\nconst DEFAULT_HEADER_ID = 'krds-header'\nconst DEFAULT_MOBILE_TRIGGER_PORTAL_ID = 'krds-header-mobile-trigger'\nconst DEFAULT_DESKTOP_MENU_PORTAL_ID = 'krds-header-in'\nconst DEFAULT_MOBILE_MENU_PORTAL_ID = 'krds-header'\n\nconst HeaderComponent = forwardRef<HTMLElement, HeaderProps>((props, ref) => {\n const {\n children,\n id,\n className,\n mobileMenuTriggerPortalId,\n desktopMenuPortalId = DEFAULT_DESKTOP_MENU_PORTAL_ID,\n mobileMenuPortalId = DEFAULT_MOBILE_MENU_PORTAL_ID,\n ...restProps\n } = props\n\n const headerId = id ?? DEFAULT_HEADER_ID\n\n const [openDropdownId, setOpenDropdownId] = useState<string | null>(null)\n\n const resolvedTriggerPortalId = mobileMenuTriggerPortalId ?? DEFAULT_MOBILE_TRIGGER_PORTAL_ID\n\n const setDropdown = useCallback((dropdownId: string | null) => {\n setOpenDropdownId(dropdownId)\n }, [])\n\n const closeDropdowns = useCallback(() => {\n setDropdown(null)\n }, [setDropdown])\n\n useEffect(() => {\n const handleDocumentClick = (event: MouseEvent) => {\n const target = event.target as Element | null\n if (!target?.closest(`#${headerId} .krds-drop-wrap`)) {\n closeDropdowns()\n }\n }\n\n document.addEventListener('click', handleDocumentClick)\n return () => document.removeEventListener('click', handleDocumentClick)\n }, [closeDropdowns, headerId])\n\n useEffect(() => {\n const handleKeyUp = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n closeDropdowns()\n }\n }\n\n document.addEventListener('keyup', handleKeyUp)\n return () => document.removeEventListener('keyup', handleKeyUp)\n }, [closeDropdowns])\n\n useEffect(() => {\n let lastScrollY = window.scrollY\n\n const handleScroll = () => {\n const wrap = document.querySelector('#wrap')\n const container = document.querySelector('#container') as HTMLElement | null\n if (!wrap || !container) return\n\n const containerOffsetTop = container.offsetTop\n const scrollY = window.scrollY\n const scrollDown = scrollY > lastScrollY\n const scrollUp = scrollY < lastScrollY\n\n if (scrollY > containerOffsetTop + 50 && scrollDown) {\n wrap.classList.add('scroll-down')\n wrap.classList.remove('scroll-up')\n } else if (scrollY > containerOffsetTop + 50 && scrollUp) {\n wrap.classList.add('scroll-up')\n wrap.classList.remove('scroll-down')\n } else {\n wrap.classList.remove('scroll-down', 'scroll-up')\n }\n\n lastScrollY = scrollY\n }\n\n window.addEventListener('scroll', handleScroll, { passive: true })\n return () => window.removeEventListener('scroll', handleScroll)\n }, [])\n\n const contextValue = useMemo<HeaderContextType>(\n () => ({\n openDropdownId,\n setDropdown,\n closeDropdowns,\n mobileTriggerPortalId: resolvedTriggerPortalId,\n desktopMenuPortalId,\n mobileMenuPortalId\n }),\n [openDropdownId, setDropdown, closeDropdowns, resolvedTriggerPortalId, desktopMenuPortalId, mobileMenuPortalId]\n )\n\n return (\n <HeaderContext.Provider value={contextValue}>\n <header ref={ref} id={headerId} className={className} {...restProps}>\n <div id={desktopMenuPortalId} className=\"header-in\">\n {children}\n </div>\n </header>\n </HeaderContext.Provider>\n )\n})\n\nconst Container = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(({ children, className, ...props }, ref) => (\n <div ref={ref} className={classNames('header-container', className)} {...props}>\n <div className=\"inner\">{children}</div>\n </div>\n))\n\nconst Utilities = ({ children, className, ...props }: HeaderUtilitiesProps) => {\n const items = Children.map(children, child => {\n if (!isValidElement(child)) {\n return <UtilityItem>{child}</UtilityItem>\n }\n\n const displayName = (child.type as { displayName?: string }).displayName\n if (displayName === UtilityItem.displayName || displayName === UtilityDropdown.displayName) {\n return child\n }\n\n return <UtilityItem>{child}</UtilityItem>\n })\n\n return (\n <div className={classNames('header-utility', className)} {...props}>\n <ul className=\"utility-list\">{items}</ul>\n </div>\n )\n}\n\nconst UtilityItem = forwardRef<HTMLLIElement, HeaderUtilityProps>(({ className, children, ...props }, ref) => {\n return (\n <li ref={ref} className={className} {...props}>\n {children}\n </li>\n )\n})\n\nconst UtilityDropdown = ({\n id,\n label,\n buttonText,\n children,\n dropdownClassName,\n itemClassName,\n buttonClassName,\n ...dropdownProps\n}: HeaderUtilityDropdownProps) => {\n const generatedId = useId()\n const dropdownId = id ?? `utility-${generatedId}`\n const { openDropdownId, setDropdown, closeDropdowns } = useHeaderContext()\n const isOpen = openDropdownId === dropdownId\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (nextOpen) {\n setDropdown(dropdownId)\n } else {\n closeDropdowns()\n }\n },\n [closeDropdowns, dropdownId, setDropdown]\n )\n\n const resolvedButtonText = buttonText ?? (\n <>\n {label}\n <i className=\"svg-icon ico-toggle\"></i>\n </>\n )\n\n return (\n <UtilityItem className={itemClassName}>\n <Dropdown\n {...dropdownProps}\n buttonText={resolvedButtonText}\n buttonClassName={classNames('krds-btn small text drop-btn', buttonClassName)}\n className={classNames(dropdownClassName)}\n isOpen={isOpen}\n onOpenChange={handleOpenChange}\n >\n {children}\n </Dropdown>\n </UtilityItem>\n )\n}\n\nconst Branding = ({\n logoHref = '#',\n onLogoClick,\n logoAltText = 'KRDS - Korea Design System',\n children,\n className,\n ...props\n}: HeaderBrandingProps) => (\n <div className={classNames('header-branding', className)} {...props}>\n <h2 className=\"logo\">\n {logoHref ? (\n <a href={logoHref} onClick={onLogoClick}>\n <span className=\"sr-only\">{logoAltText}</span>\n </a>\n ) : (\n <button type=\"button\" onClick={onLogoClick}>\n <span className=\"sr-only\">{logoAltText}</span>\n </button>\n )}\n </h2>\n {children}\n </div>\n)\n\nconst Navi = ({ children, className, ...props }: HeaderNaviProps) => {\n const { mobileTriggerPortalId } = useHeaderContext()\n return (\n <div className={classNames('header-actions', className)} {...props}>\n {children}\n <div id={mobileTriggerPortalId} className=\"header-mobile-trigger\" data-mobile-trigger=\"true\" />\n </div>\n )\n}\n\nconst NaviButtonSearch = forwardRef<HTMLButtonElement, HeaderNaviButtonSearchProps>(\n ({ label = '통합검색', title = '통합검색 레이어', className, type = 'button', ...props }, ref) => (\n <button type={type} className={classNames('btn-navi sch', className)} title={title} ref={ref} {...props}>\n {label}\n </button>\n )\n)\n\nconst NaviButtonLogin = forwardRef<HTMLAnchorElement | HTMLButtonElement, HeaderNaviButtonLoginProps>((props, ref) => {\n if ('href' in props && props.href) {\n const { href, label = '로그인', className, ...anchorProps } = props\n return (\n <a href={href} className={classNames('btn-navi login', className)} ref={ref as Ref<HTMLAnchorElement>} {...anchorProps}>\n {label}\n </a>\n )\n }\n\n const { label = '로그인', className, type = 'button', ...buttonProps } = props\n return (\n <button\n type={type as ButtonHTMLAttributes<HTMLButtonElement>['type']}\n className={classNames('btn-navi login', className)}\n ref={ref as Ref<HTMLButtonElement>}\n {...(buttonProps as ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {label}\n </button>\n )\n})\n\nconst NaviButtonJoin = forwardRef<HTMLButtonElement, HeaderNaviButtonJoinProps>(\n ({ label = '회원가입', className, type = 'button', ...props }, ref) => (\n <button type={type} className={classNames('btn-navi join', className)} ref={ref} {...props}>\n {label}\n </button>\n )\n)\n\nconst NaviButtonLogout = forwardRef<HTMLButtonElement, HeaderNaviButtonLogoutProps>(\n ({ children = '로그아웃', className, onClick, type = 'button', ...props }, ref) => {\n const myGovContext = useMyGovContext()\n const handleClick: React.MouseEventHandler<HTMLButtonElement> = event => {\n onClick?.(event)\n if (!event.defaultPrevented) {\n myGovContext?.close()\n }\n }\n\n return (\n <button type={type} className={classNames('krds-btn medium text', className)} ref={ref} onClick={handleClick} {...props}>\n {children}\n </button>\n )\n }\n)\n\nconst MyGov = forwardRef<HTMLButtonElement, HeaderMyGovProps>(\n (\n {\n label = '나의 GOV',\n name,\n remainingTime,\n remainingTimeLabel = '로그아웃까지 남은 시간',\n extendTimeLabel = '시간 연장',\n onExtendTime,\n items,\n className,\n buttonClassName,\n dropdownId,\n ...buttonProps\n },\n ref\n ) => {\n const generatedId = useId()\n const id = dropdownId ?? `my-gov-${generatedId}`\n const { openDropdownId, setDropdown, closeDropdowns } = useHeaderContext()\n const isOpen = openDropdownId === id\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (nextOpen) {\n setDropdown(id)\n } else {\n closeDropdowns()\n }\n },\n [closeDropdowns, id, setDropdown]\n )\n\n const contextValue = useMemo(\n () => ({\n close: closeDropdowns\n }),\n [closeDropdowns]\n )\n\n const { onClick, ...restButtonProps } = buttonProps\n void onClick\n\n return (\n <MyGovContext.Provider value={contextValue}>\n <Dropdown\n ref={ref}\n isOpen={isOpen}\n onOpenChange={handleOpenChange}\n className={classNames('my-drop', className)}\n buttonText={label}\n buttonClassName={classNames('btn-navi my drop-btn', buttonClassName, isOpen && 'active')}\n {...restButtonProps}\n >\n <Dropdown.TopSection>\n <p className=\"my-name\">{name}</p>\n {remainingTime && (\n <dl className=\"my-time\">\n <dt>{remainingTimeLabel}</dt>\n <dd>\n <span className=\"time\">{remainingTime}</span>\n {onExtendTime && (\n <button type=\"button\" className=\"krds-btn medium text\" onClick={onExtendTime}>\n {extendTimeLabel}\n </button>\n )}\n </dd>\n </dl>\n )}\n </Dropdown.TopSection>\n\n {items && items.length > 0 && (\n <Dropdown.List>\n {items.map((item, index) => {\n if (item.href) {\n const { key: _key, label: itemLabel, className: itemClassName, onClick, href, ...anchorProps } = item\n\n const handleClick: React.MouseEventHandler<HTMLAnchorElement> = event => {\n onClick?.(event)\n if (!event.defaultPrevented) {\n closeDropdowns()\n }\n }\n\n return (\n <li key={item.key ?? index}>\n <a href={href} className={classNames('item-link', itemClassName)} onClick={handleClick} {...anchorProps}>\n {itemLabel}\n </a>\n </li>\n )\n }\n\n const { key: _key, label: itemLabel, className: itemClassName, onClick, type = 'button', ...buttonItemProps } = item\n\n const handleClick: React.MouseEventHandler<HTMLButtonElement> = event => {\n ;(onClick as React.MouseEventHandler<HTMLButtonElement>)?.(event)\n if (!event.defaultPrevented) {\n closeDropdowns()\n }\n }\n\n return (\n <li key={item.key ?? index}>\n <button\n type={type as ButtonHTMLAttributes<HTMLButtonElement>['type']}\n className={classNames('item-link', itemClassName)}\n onClick={handleClick}\n {...(buttonItemProps as ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {itemLabel}\n </button>\n </li>\n )\n })}\n </Dropdown.List>\n )}\n\n <Dropdown.BottomSection>\n <Header.NaviButton.Logout onClick={() => console.log('logout')} />\n </Dropdown.BottomSection>\n </Dropdown>\n </MyGovContext.Provider>\n )\n }\n)\n\nconst HeaderMainMenu = forwardRef<HTMLElement, HeaderMainMenuProps>(\n ({ mobileTrigger, mobileTriggerProps, allMenuButtonLabel = '전체메뉴', ...rest }, ref) => {\n const { mobileTriggerPortalId, desktopMenuPortalId, mobileMenuPortalId } = useHeaderContext()\n\n const triggerProps: MobileTriggerProps = {\n ...mobileTriggerProps,\n label: mobileTriggerProps?.label ?? allMenuButtonLabel\n }\n\n const fallbackTrigger = <MainMenu.MobileTrigger {...triggerProps} />\n const triggerNode = mobileTrigger ?? fallbackTrigger\n\n return (\n <MainMenu\n ref={ref}\n {...rest}\n mobileTrigger={triggerNode}\n mobileTriggerPortalId={mobileTriggerPortalId}\n desktopPortalId={desktopMenuPortalId}\n mobilePortalId={mobileMenuPortalId}\n />\n )\n }\n)\n\nHeaderComponent.displayName = 'Header'\nContainer.displayName = 'Header.Container'\nUtilities.displayName = 'Header.Utilities'\nUtilityItem.displayName = 'Header.Utility'\nUtilityDropdown.displayName = 'Header.UtilityDropdown'\nBranding.displayName = 'Header.Branding'\nNavi.displayName = 'Header.Navi'\nNaviButtonSearch.displayName = 'Header.NaviButton.Search'\nNaviButtonLogin.displayName = 'Header.NaviButton.Login'\nNaviButtonJoin.displayName = 'Header.NaviButton.Join'\nNaviButtonLogout.displayName = 'Header.NaviButton.Logout'\nMyGov.displayName = 'Header.NaviButton.MyGov'\nHeaderMainMenu.displayName = 'Header.MainMenu'\n\nconst Header = HeaderComponent as typeof HeaderComponent & HeaderComponentSubmodules\n\nHeader.Container = Container\nHeader.Utilities = Utilities\nHeader.Utility = Object.assign(UtilityItem, {\n Dropdown: UtilityDropdown,\n DropdownItem: Dropdown.Item\n})\nHeader.Branding = Branding\nHeader.Navi = Navi\nHeader.NaviButton = {\n Search: NaviButtonSearch,\n Login: NaviButtonLogin,\n Join: NaviButtonJoin,\n MyGov,\n Logout: NaviButtonLogout\n}\nHeader.MainMenu = HeaderMainMenu\n\nexport { Header }\n","import { classNames } from '@/utils'\nimport { forwardRef } from 'react'\nimport { TextListItemProps, TextListProps } from './TextList.types'\n\n/**\n * KRDS TextList Component\n * @param type 텍스트 목록 타입 ('decimal' | 'dash' | 'hollow' | 'ordered')\n * @param children 자식 요소\n * @param className 커스텀 클래스명\n */\nexport const TextList = forwardRef<HTMLUListElement | HTMLOListElement, TextListProps>(\n ({ type = 'decimal', children, className, ...props }, ref) => {\n const isOrdered = type === 'ordered'\n\n if (isOrdered) {\n return (\n <ol ref={ref as React.Ref<HTMLOListElement>} className={classNames('krds-info-list', type, className)} {...props}>\n {children}\n </ol>\n )\n }\n\n return (\n <ul ref={ref as React.Ref<HTMLUListElement>} className={classNames('krds-info-list', type, className)} {...props}>\n {children}\n </ul>\n )\n }\n)\n\nTextList.displayName = 'TextList'\n\n/**\n * KRDS TextListItem Component\n * @param children 자식 요소\n * @param className 커스텀 클래스명\n * @param number 번호 (ordered 타입에서 사용)\n */\nexport const TextListItem = forwardRef<HTMLLIElement, TextListItemProps>(({ children, className, number, ...props }, ref) => {\n return (\n <li ref={ref} className={className} {...props}>\n {number && <span className=\"num\">{number}</span>}\n {children}\n </li>\n )\n})\n\nTextListItem.displayName = 'TextListItem'\n","import Button from '@/components/Button'\nimport { Disclosure } from '@/components/Disclosure'\nimport { TextList, TextListItem } from '@/components/TextList'\nimport { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { classNames } from '@/utils'\nimport React, { createContext, forwardRef, useCallback, useContext, useEffect, useId, useMemo, useRef } from 'react'\nimport {\n HelpLinkListProps,\n HelpPanelCloseProps,\n HelpPanelContentProps,\n HelpPanelContextValue,\n HelpPanelProps,\n HelpPanelTriggerProps,\n HelpSectionProps\n} from './HelpPanel.types'\n\nconst HelpPanelContext = createContext<HelpPanelContextValue | null>(null)\n\nconst useHelpPanelContext = () => useContext(HelpPanelContext)\n\n/**\n * KRDS HelpPanel Component\n * @param isOpen 도움말 패널 열림 상태\n * @param defaultOpen 비제어 상태에서 사용할 초기 열림 상태\n * @param onOpenChange 도움말 패널 열림/닫힘 상태 변경 핸들러\n * @param className 사용자 정의 클래스명\n */\nconst HelpPanel = forwardRef<HTMLDivElement, HelpPanelProps>(\n ({ isOpen, defaultOpen = false, onOpenChange, children, className, ...props }, ref) => {\n const [openState, setOpenState] = useUncontrolled<boolean>({\n value: isOpen,\n defaultValue: defaultOpen,\n onChange: onOpenChange\n })\n\n const helpPanelRef = useRef<HTMLDivElement | null>(null)\n const lastFocusedElementRef = useRef<HTMLElement | null>(null)\n const previousIsOpenRef = useRef<boolean>(Boolean(openState))\n const panelId = useId()\n\n const childArray = React.Children.toArray(children)\n const triggerElements: React.ReactNode[] = []\n const panelChildren = childArray.filter(child => {\n if (!React.isValidElement(child)) {\n return true\n }\n\n const elementType = child.type as { displayName?: string; name?: string }\n const displayName =\n typeof elementType === 'function' || typeof elementType === 'object' ? (elementType.displayName ?? elementType.name) : undefined\n\n if (elementType === HelpPanelTrigger || displayName === 'HelpPanelTrigger') {\n triggerElements.push(child)\n return false\n }\n\n return true\n })\n\n const setOpen = useCallback(\n (nextOpen: boolean) => {\n if (nextOpen) {\n lastFocusedElementRef.current = document.activeElement as HTMLElement | null\n }\n setOpenState(nextOpen)\n },\n [setOpenState]\n )\n\n const open = useCallback(() => setOpen(true), [setOpen])\n const close = useCallback(() => setOpen(false), [setOpen])\n const toggle = useCallback(() => setOpen(!openState), [openState, setOpen])\n\n useEffect(() => {\n const helpPanel = helpPanelRef.current\n if (!helpPanel) {\n return\n }\n\n const nextIsOpen = Boolean(openState)\n\n if (nextIsOpen && !previousIsOpenRef.current) {\n if (!lastFocusedElementRef.current) {\n lastFocusedElementRef.current = document.activeElement as HTMLElement | null\n }\n\n const focusableElements = helpPanel.querySelectorAll('a, button, [tabindex=\"0\"], input, textarea, select')\n if (focusableElements.length > 0) {\n ;(focusableElements[0] as HTMLElement).focus()\n }\n }\n\n if (!nextIsOpen && previousIsOpenRef.current) {\n lastFocusedElementRef.current?.focus?.()\n lastFocusedElementRef.current = null\n }\n\n previousIsOpenRef.current = nextIsOpen\n }, [openState])\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Escape') {\n close()\n }\n }\n\n const contextValue = useMemo<HelpPanelContextValue>(\n () => ({\n isOpen: Boolean(openState),\n open,\n close,\n toggle,\n setOpen,\n panelId,\n lastFocusedElementRef\n }),\n [openState, open, close, toggle, setOpen, panelId]\n )\n\n const helpPanelClasses = classNames('krds-help-panel', className, contextValue.isOpen && 'expand')\n\n return (\n <HelpPanelContext.Provider value={contextValue}>\n {triggerElements}\n <div\n ref={node => {\n helpPanelRef.current = node\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n }}\n id={panelId}\n className={helpPanelClasses}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <div className=\"help-panel-wrap\">\n <div className=\"help-conts-area\">{panelChildren}</div>\n </div>\n </div>\n </HelpPanelContext.Provider>\n )\n }\n)\n\nHelpPanel.displayName = 'HelpPanel'\n\n/**\n * KRDS HelpPanelTrigger Component\n * @param children 트리거 버튼 텍스트\n * @param className 사용자 정의 클래스명\n */\nconst HelpPanelTrigger = forwardRef<HTMLButtonElement, HelpPanelTriggerProps>(\n ({ children = '도움말', className, onClick, ...props }, ref) => {\n const context = useHelpPanelContext()\n const buttonClasses = classNames('btn-help-panel', 'expand', 'btn-help-exec', className)\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n\n if (!event.defaultPrevented) {\n context?.open()\n }\n }\n\n return (\n <Button\n size=\"small\"\n variant=\"tertiary\"\n className={buttonClasses}\n ref={ref}\n onClick={handleClick}\n aria-expanded={context?.isOpen ?? false}\n aria-controls={context?.panelId}\n {...props}\n >\n <i className=\"svg-icon ico-fold\"></i>\n {children}\n </Button>\n )\n }\n)\n\nHelpPanelTrigger.displayName = 'HelpPanelTrigger'\n\n/**\n * KRDS HelpPanelContent Component\n * @param children 도움말 패널 내용\n * @param srOnlyTitle 스크린 리더 전용 제목\n * @param className 사용자 정의 클래스명\n */\nconst HelpPanelContent = forwardRef<HTMLDivElement, HelpPanelContentProps>(({ children, srOnlyTitle, className, ...props }, ref) => {\n const contentClasses = classNames('help-conts-area-inner', className)\n\n return (\n <div className={contentClasses} ref={ref} {...props}>\n {srOnlyTitle && <h3 className=\"sr-only\">{srOnlyTitle}</h3>}\n {children}\n </div>\n )\n})\n\nHelpPanelContent.displayName = 'HelpPanelContent'\n\n/**\n * KRDS HelpSection Component\n * @param title 섹션 제목\n * @param description 섹션 설명\n * @param children 섹션 내용\n * @param className 사용자 정의 클래스명\n */\nconst HelpSection = forwardRef<HTMLDivElement, HelpSectionProps>(({ title, description, children, className, ...props }, ref) => {\n const sectionClasses = classNames('conts-area', 'help-conts', className)\n\n return (\n <div className={sectionClasses} ref={ref} {...props}>\n <div className=\"conts-wrap\">\n <h4 className=\"help-title\">\n {title}\n <span className=\"krds-btn medium icon\">\n <span className=\"sr-only\">도움말</span>\n <i className=\"svg-icon ico-help\"></i>\n </span>\n </h4>\n {description && (\n <div className=\"conts-desc\">\n <p>{description}</p>\n </div>\n )}\n {children}\n </div>\n </div>\n )\n})\n\nHelpSection.displayName = 'HelpSection'\n\n/**\n * KRDS HelpLinkList Component\n * @param links 링크 목록\n * @param iconPosition 아이콘 위치 ('left' | 'right')\n * @param className 사용자 정의 클래스명\n */\nconst HelpLinkList = forwardRef<HTMLUListElement, HelpLinkListProps>(({ links, iconPosition = 'right', className, ...props }, ref) => {\n const listClasses = classNames('link-list', className)\n\n return (\n <ul className={listClasses} ref={ref} {...props}>\n {links.map((link, index) => (\n <li key={index}>\n <Button\n as=\"a\"\n size=\"xsmall\"\n variant=\"link\"\n href={link.href}\n target={link.target}\n title={link.target === '_blank' ? '새 창 열림' : undefined}\n className=\"basic\"\n >\n {iconPosition === 'left' && link.icon && <i className={`svg-icon ${link.icon}`}></i>}\n {link.text}\n {iconPosition === 'right' && <i className={`svg-icon ${link.icon || 'ico-go'}`}></i>}\n </Button>\n </li>\n ))}\n </ul>\n )\n})\n\nHelpLinkList.displayName = 'HelpLinkList'\n\n/**\n * KRDS HelpPanelClose Component\n * @param children 닫기 버튼 텍스트\n * @param className 사용자 정의 클래스명\n */\nconst HelpPanelClose = forwardRef<HTMLButtonElement, HelpPanelCloseProps>(\n ({ children = '접어두기', className, onClick, ...props }, ref) => {\n const context = useHelpPanelContext()\n const buttonClasses = classNames('btn-help-panel', 'fold', className)\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n\n if (!event.defaultPrevented) {\n context?.close()\n }\n }\n\n return (\n <Button\n size=\"small\"\n variant=\"tertiary\"\n className={buttonClasses}\n ref={ref}\n onClick={handleClick}\n aria-controls={context?.panelId}\n {...props}\n >\n <span className=\"sr-only\">도움말</span>\n {children}\n <i className=\"svg-icon ico-fold right\"></i>\n </Button>\n )\n }\n)\n\nHelpPanelClose.displayName = 'HelpPanelClose'\n\n/**\n * KRDS HelpRelatedService Component\n * @param children 관련 서비스 그룹들\n * @param className 사용자 정의 클래스명\n */\nconst HelpRelatedService = forwardRef<HTMLDivElement, { children?: React.ReactNode; className?: string }>(\n ({ children, className, ...props }, ref) => {\n const serviceClasses = classNames('conts-area', 'related-service', className)\n\n return (\n <div className={serviceClasses} ref={ref} {...props}>\n {children}\n </div>\n )\n }\n)\n\nHelpRelatedService.displayName = 'HelpRelatedService'\n\n/**\n * KRDS HelpServiceGroup Component\n * @param title 서비스 그룹 제목\n * @param children 서비스 그룹 내용\n * @param className 사용자 정의 클래스명\n */\nconst HelpServiceGroup = forwardRef<HTMLDivElement, { title: string; children?: React.ReactNode; className?: string }>(\n ({ title, children, className, ...props }, ref) => {\n const groupClasses = classNames('conts-wrap', className)\n\n return (\n <div className={groupClasses} ref={ref} {...props}>\n <h4 className=\"help-title\">{title}</h4>\n {children}\n </div>\n )\n }\n)\n\nHelpServiceGroup.displayName = 'HelpServiceGroup'\n\n/**\n * KRDS HelpTutorialTitle Component\n * @param title 따라하기 제목\n * @param href 이전으로 돌아가기 링크\n * @param className 사용자 정의 클래스명\n */\nconst HelpTutorialTitle = forwardRef<HTMLHeadingElement, { title: string; href?: string; className?: string }>(\n ({ title, href, className, ...props }, ref) => {\n const titleClasses = classNames('help-title', className)\n\n return (\n <h4 className={titleClasses} ref={ref} {...props}>\n {href ? (\n <a href={href} title=\"이전으로 돌아가기\">\n {title}\n </a>\n ) : (\n title\n )}\n </h4>\n )\n }\n)\n\nHelpTutorialTitle.displayName = 'HelpTutorialTitle'\n\n/**\n * KRDS HelpCoachProcess Component\n * @param children 코치 태스크들\n * @param className 사용자 정의 클래스명\n */\nconst HelpCoachProcess = forwardRef<HTMLUListElement, { children?: React.ReactNode; className?: string }>(\n ({ children, className, ...props }, ref) => {\n const processClasses = classNames('coach-help-process', className)\n\n return (\n <ul className={processClasses} ref={ref} {...props}>\n {children}\n </ul>\n )\n }\n)\n\nHelpCoachProcess.displayName = 'HelpCoachProcess'\n\n/**\n * KRDS HelpCoachTask Component\n * @param title 태스크 제목\n * @param isCurrent 현재 태스크 여부\n * @param expandText 펼치기 버튼 텍스트\n * @param steps 단계 목록\n * @param className 사용자 정의 클래스명\n */\nconst HelpCoachTask = forwardRef<\n HTMLLIElement,\n {\n title: string\n isCurrent?: boolean\n expandText: string\n steps: string[]\n className?: string\n }\n>(({ title, isCurrent = false, expandText, steps, className, ...props }, ref) => {\n const titleClasses = classNames('tit', isCurrent && 'current')\n\n return (\n <li className={className} ref={ref} {...props}>\n <h4 className={titleClasses}>{title}</h4>\n <Disclosure buttonText={expandText} className=\"conts-expand-area\">\n <TextList type=\"decimal\">\n {steps.map((step, index) => (\n <TextListItem key={index}>{step}</TextListItem>\n ))}\n </TextList>\n </Disclosure>\n </li>\n )\n})\n\nHelpCoachTask.displayName = 'HelpCoachTask'\n\n/**\n * KRDS HelpPanelAction Component\n * @param children 액션 버튼들\n * @param className 사용자 정의 클래스명\n */\nconst HelpPanelAction = forwardRef<HTMLDivElement, { children?: React.ReactNode; className?: string }>(\n ({ children, className, ...props }, ref) => {\n const actionClasses = classNames('help-panel-action', className)\n\n return (\n <div className={actionClasses} ref={ref} {...props}>\n {children}\n </div>\n )\n }\n)\n\nHelpPanelAction.displayName = 'HelpPanelAction'\n\n/**\n * KRDS HelpContentArea Component\n * @param children 컨텐츠 영역 내용\n * @param className 사용자 정의 클래스명\n */\nconst HelpContentArea = forwardRef<HTMLDivElement, { children?: React.ReactNode; className?: string }>(\n ({ children, className, ...props }, ref) => {\n const areaClasses = classNames('conts-area', className)\n\n return (\n <div className={areaClasses} ref={ref} {...props}>\n {children}\n </div>\n )\n }\n)\n\nHelpContentArea.displayName = 'HelpContentArea'\n\nexport {\n HelpCoachProcess,\n HelpCoachTask,\n HelpContentArea,\n HelpLinkList,\n HelpPanel,\n HelpPanelAction,\n HelpPanelClose,\n HelpPanelContent,\n HelpPanelTrigger,\n HelpRelatedService,\n HelpSection,\n HelpServiceGroup,\n HelpTutorialTitle,\n useHelpPanelContext\n}\n","import Button from '@/components/Button'\nimport { classNames } from '@/utils'\nimport { forwardRef, useEffect, useState } from 'react'\nimport { InPageNavigationProps } from './InPageNavigation.types'\n\n/**\n * KRDS InPageNavigation Component\n * @param caption 페이지 구성 설명 텍스트\n * @param title 페이지 제목\n * @param items 네비게이션 아이템 목록\n * @param actionText 액션 버튼 텍스트\n * @param onActionClick 액션 버튼 클릭 핸들러\n * @param infoText 추가 정보 텍스트 (HTML 태그 지원)\n * @param scrollDown 스크롤 시 상단 위치 조정 여부\n * @param scrollContainerRef 스크롤 컨테이너 참조\n */\nexport const InPageNavigation = forwardRef<HTMLDivElement, InPageNavigationProps>(\n (\n {\n caption = '이 페이지의 구성',\n title,\n items = [],\n actionText,\n onActionClick,\n infoText,\n scrollDown = false,\n className,\n scrollContainerRef,\n ...props\n },\n ref\n ) => {\n const [activeSection, setActiveSection] = useState<string>('')\n\n const hasAction = actionText || infoText\n const hasItems = items.length > 0\n\n const calculateHeaderHeight = () => {\n const headerTop = document.querySelector('#krds-masthead')?.clientHeight || 0\n const headerInner = document.querySelector('#krds-header .header-in')?.clientHeight || 0\n return headerTop + headerInner\n }\n\n const applyScroll = (target: Element, event: React.MouseEvent | React.KeyboardEvent) => {\n event.preventDefault()\n const headerHeight = calculateHeaderHeight()\n\n const scrollContainer = scrollContainerRef?.current ?? window\n const isWindow = scrollContainer === window\n\n if (isWindow) {\n const targetRect = target.getBoundingClientRect()\n const scrollTop = targetRect.top + window.scrollY - headerHeight\n\n window.scrollTo({\n left: 0,\n top: scrollTop,\n behavior: 'smooth'\n })\n } else {\n const containerElement = scrollContainer as Element\n const containerRect = containerElement.getBoundingClientRect()\n const targetRect = target.getBoundingClientRect()\n const relativeTop = targetRect.top - containerRect.top\n const scrollTop = containerElement.scrollTop + relativeTop - headerHeight\n\n containerElement.scrollTo({\n left: 0,\n top: scrollTop,\n behavior: 'smooth'\n })\n }\n\n if ('key' in event && (event.key === 'Enter' || event.key === ' ')) {\n const focusable = target.querySelector('.sec-tit')\n if (focusable) {\n ;(focusable as HTMLElement).setAttribute('tabindex', '-1')\n ;(focusable as HTMLElement).focus({ preventScroll: true })\n }\n }\n }\n\n const handleNavigationClick = (href: string, event: React.MouseEvent | React.KeyboardEvent) => {\n const target = document.querySelector(href)\n if (target) {\n applyScroll(target, event)\n }\n }\n\n const handleKeyDown = (href: string, event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n handleNavigationClick(href, event)\n }\n }\n\n const updateActiveSection = () => {\n if (!hasItems) return\n\n const scrollContainer = scrollContainerRef?.current ?? window\n const isWindow = scrollContainer === window\n\n const scrollTop = isWindow ? window.scrollY : (scrollContainer as Element).scrollTop\n const containerHeight = isWindow ? window.innerHeight : (scrollContainer as Element).clientHeight\n const scrollHeight = isWindow ? document.body.scrollHeight : (scrollContainer as Element).scrollHeight\n\n const topHeight = Math.ceil(containerHeight / 5)\n const scrollBottom = scrollTop + containerHeight\n\n const sectionElements = items.map(item => document.querySelector(item.href)).filter(Boolean) as HTMLElement[]\n\n if (sectionElements.length === 0) return\n\n const firstSection = sectionElements[0]\n const firstSectionTop = firstSection.offsetTop\n\n let newActiveSection = ''\n\n if (scrollBottom >= scrollHeight) {\n newActiveSection = items[items.length - 1]?.href || ''\n } else if (scrollTop <= firstSectionTop) {\n newActiveSection = items[0]?.href || ''\n } else {\n for (let i = sectionElements.length - 1; i >= 0; i--) {\n const section = sectionElements[i]\n const sectionHeight = section.offsetHeight\n const sectionTop = section.offsetTop - topHeight\n\n if (scrollTop > sectionTop && scrollTop <= sectionTop + sectionHeight) {\n newActiveSection = items[i]?.href || ''\n break\n }\n }\n }\n\n if (newActiveSection !== activeSection) {\n setActiveSection(newActiveSection)\n }\n }\n\n useEffect(() => {\n if (!hasItems) return\n\n updateActiveSection()\n\n const handleScroll = () => {\n updateActiveSection()\n }\n\n const scrollContainer = scrollContainerRef?.current ?? window\n\n scrollContainer.addEventListener('scroll', handleScroll, { passive: true })\n\n return () => {\n scrollContainer.removeEventListener('scroll', handleScroll)\n }\n }, [hasItems, items, activeSection])\n\n const Wrapper = ({ children }: { children: React.ReactNode }) => {\n return scrollDown ? <div className=\"scroll-down\">{children}</div> : <>{children}</>\n }\n\n return (\n <Wrapper>\n <div ref={ref} className=\"krds-in-page-navigation-type\">\n <div className={classNames('krds-in-page-navigation-area', className)} {...props}>\n <div className=\"in-page-navigation-header\">\n <p className=\"quick-caption\">{caption}</p>\n {title && <p className=\"quick-title\">{title}</p>}\n </div>\n\n {hasItems && (\n <nav className=\"in-page-navigation-list\">\n <ul>\n {items.map((item, index) => (\n <li key={index}>\n <a\n href={item.href}\n className={classNames((item.active || activeSection === item.href) && 'active')}\n onClick={e => handleNavigationClick(item.href, e)}\n onKeyDown={e => handleKeyDown(item.href, e)}\n tabIndex={0}\n >\n {item.label}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n )}\n\n {hasAction && (\n <div className=\"in-page-navigation-action\">\n {actionText && (\n <Button className=\"krds-btn medium\" onClick={onActionClick}>\n {actionText}\n </Button>\n )}\n {infoText && <p className=\"quick-info\">{infoText}</p>}\n </div>\n )}\n </div>\n </div>\n </Wrapper>\n )\n }\n)\n\nInPageNavigation.displayName = 'InPageNavigation'\n","import type { MutableRefObject, RefCallback, Ref } from 'react'\nimport { useMemo } from 'react'\n\ntype PossibleRef<T> = Ref<T> | undefined\n\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n ref(value)\n } else if (ref !== null && ref !== undefined) {\n ;(ref as MutableRefObject<T>).current = value\n }\n}\n\nexport function useMergeRefs<T>(...refs: Array<PossibleRef<T>>): RefCallback<T> | null {\n return useMemo(() => {\n if (refs.every(ref => ref === null)) {\n return null\n }\n\n return (refValue: T) => {\n for (const ref of refs) {\n setRef<T>(ref, refValue)\n }\n }\n }, [refs])\n}\n","import React, { createContext, useCallback, useContext, useEffect, useRef, forwardRef, useMemo } from 'react'\nimport { classNames } from '@/utils'\nimport Button from '../Button/Button'\nimport { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport type {\n LanguageSwitcherProps,\n LanguageSwitcherMenuProps,\n LanguageSwitcherCurrentProps,\n LanguageSwitcherOptionListProps,\n LanguageSwitcherOptionItemProps,\n LanguageSwitcherContextValue\n} from './LanguageSwitcher.types'\nimport { useMergeRefs } from '@/hooks/use-merge-refs'\n\nconst LanguageSwitcherContext = createContext<LanguageSwitcherContextValue | null>(null)\n\nfunction useLanguageSwitcherContext() {\n const ctx = useContext(LanguageSwitcherContext)\n if (!ctx) throw new Error('LanguageSwitcher.* must be used within <LanguageSwitcher>')\n return ctx\n}\n\nexport const LanguageSwitcherRoot = forwardRef<HTMLDivElement, LanguageSwitcherProps>(\n (\n {\n value,\n defaultValue,\n options = [],\n onChange,\n open,\n defaultOpen,\n onOpenChange,\n closeOnClickOutside = true,\n children,\n className,\n ...props\n },\n ref\n ) => {\n const [currentValue, setCurrentValue] = useUncontrolled({\n value,\n defaultValue,\n onChange,\n finalValue: ''\n })\n\n const [isOpen, setIsOpen] = useUncontrolled({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange\n })\n\n const dropdownRef = useRef<HTMLDivElement>(null)\n const buttonRef = useRef<HTMLButtonElement>(null)\n const _ref = useMergeRefs(ref, dropdownRef)\n const itemRefs = useRef<Map<string, HTMLAnchorElement | null>>(new Map())\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n setIsOpen(false)\n console.log(buttonRef.current)\n buttonRef.current?.focus()\n }\n },\n [isOpen, setIsOpen]\n )\n\n useEffect(() => {\n if (!closeOnClickOutside) return\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node) && isOpen) {\n setIsOpen(false)\n }\n }\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [isOpen, setIsOpen, closeOnClickOutside])\n\n const containerClasses = classNames('krds-drop-wrap', 'krds-language', className)\n\n const contextValue = useMemo(\n () => ({\n value: currentValue,\n onChange: setCurrentValue,\n options,\n open: isOpen,\n setOpen: setIsOpen,\n buttonRef,\n itemRefs\n }),\n [currentValue, setCurrentValue, options, isOpen, setIsOpen, buttonRef]\n )\n\n return (\n <LanguageSwitcherContext.Provider value={contextValue}>\n <div ref={_ref} className={containerClasses} onKeyDown={handleKeyDown} {...props}>\n {children}\n </div>\n </LanguageSwitcherContext.Provider>\n )\n }\n)\n\nconst Trigger = forwardRef<HTMLButtonElement, { label?: string; className?: string }>(({ label = 'Language', className }, ref) => {\n const { open, setOpen, value, options, buttonRef } = useLanguageSwitcherContext()\n const currentLabel = options.find(opt => opt.value === value)?.label || value || label\n const _ref = useMergeRefs(ref, buttonRef)\n\n return (\n <Button\n ref={_ref}\n variant=\"text\"\n size=\"small\"\n onClick={() => setOpen(!open)}\n aria-expanded={open}\n aria-controls=\"language-dropdown\"\n aria-haspopup=\"listbox\"\n className={classNames('drop-btn', open && 'active', className)}\n >\n <i className=\"svg-icon ico-global\"></i>\n {/* 원본은 aria-label={label}('Language')로 보이는 현재 언어를 이름에서 뺐다. 화면 글자가 이름에 들어가도록 숨긴 글자로 앞에 붙인다 */}\n <span className=\"sr-only\">{label} </span>\n {' ' + currentLabel + ' '}\n <i className=\"svg-icon ico-angle\"></i>\n </Button>\n )\n})\n\nconst Menu = forwardRef<HTMLDivElement, LanguageSwitcherMenuProps>(({ className, children }, ref) => {\n const { open } = useLanguageSwitcherContext()\n const menuRef = useRef<HTMLDivElement>(null)\n const _ref = useMergeRefs(ref, menuRef)\n\n useEffect(() => {\n if (open && menuRef.current) {\n // 위치 조정 로직 (원본 JavaScript와 동일)\n const menu = menuRef.current\n const wrapper = menu.closest('.krds-drop-wrap') as HTMLElement\n if (wrapper) {\n // 기존 위치 클래스 제거\n wrapper.classList.remove('drop-left', 'drop-right')\n\n // 메뉴 위치 계산\n const menuRect = menu.getBoundingClientRect()\n const windowWidth = window.innerWidth\n\n if (menuRect.left < 0) {\n wrapper.classList.add('drop-left')\n } else if (windowWidth < menuRect.left + menuRect.width) {\n wrapper.classList.add('drop-right')\n }\n }\n }\n }, [open])\n\n return (\n <div\n ref={_ref}\n className={classNames('drop-menu', className)}\n style={{ display: open ? 'block' : 'none' }}\n role=\"listbox\"\n id=\"language-dropdown\"\n >\n <div className=\"drop-in\">{children}</div>\n </div>\n )\n})\n\nconst Current = ({ label, className }: LanguageSwitcherCurrentProps) => {\n const { value, options } = useLanguageSwitcherContext()\n const currentLabel = options.find(opt => opt.value === value)?.label || value\n\n return (\n <div className=\"drop-top\">\n <p className={classNames('current-laguage', className)}>\n <span>{label}</span>\n <strong>{currentLabel}</strong>\n </p>\n </div>\n )\n}\n\nconst OptionList = ({ className, ...props }: LanguageSwitcherOptionListProps) => {\n const { options } = useLanguageSwitcherContext()\n return (\n <ul className={classNames('drop-list', className)} role=\"list\" {...props}>\n {options.map(opt => (\n <LanguageSwitcher.OptionItem key={opt.value} {...opt} />\n ))}\n </ul>\n )\n}\n\nconst OptionItem = ({ value, label, href, external, className, ...props }: LanguageSwitcherOptionItemProps) => {\n const { value: currentValue, onChange, setOpen, itemRefs } = useLanguageSwitcherContext()\n const isActive = currentValue === value\n\n const handleSelect = (e: React.MouseEvent) => {\n if (!href && !external) {\n e.preventDefault()\n }\n onChange(value, { value, label, href, external })\n setOpen(false)\n }\n\n const handleFocus = (e: React.FocusEvent) => {\n e.preventDefault()\n itemRefs.current?.forEach(el => {\n el?.style.removeProperty('position')\n el?.style.removeProperty('z-index')\n })\n itemRefs.current?.get(value)?.style.setProperty('position', 'relative')\n itemRefs.current?.get(value)?.style.setProperty('z-index', '1')\n }\n\n return (\n <li role=\"listitem\" {...props}>\n <a\n ref={el => {\n if (el) {\n itemRefs.current?.set(value, el)\n } else {\n itemRefs.current?.delete(value)\n }\n }}\n href={href || '#'}\n className={classNames('item-link', isActive && 'active', className)}\n onClick={handleSelect}\n onFocus={handleFocus}\n role=\"option\"\n aria-selected={isActive}\n lang={value}\n {...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n >\n {label}\n {external && <i className=\"svg-icon ico-go\"></i>}\n </a>\n </li>\n )\n}\n\nconst LanguageSwitcher = Object.assign(LanguageSwitcherRoot, {\n Root: LanguageSwitcherRoot,\n Trigger,\n Menu,\n Current,\n OptionList,\n OptionItem\n})\n\nLanguageSwitcher.displayName = 'LanguageSwitcher'\n\nexport { LanguageSwitcher }\n","import { forwardRef } from 'react'\nimport { classNames } from '@/utils'\nimport { LinkProps } from './Link.types'\n\n/**\n * KRDS Link 컴포넌트\n * @param variant 링크 스타일 타입 ('default' | 'basic')\n * @param underline 밑줄 표시 여부 ('always' | 'hover' | 'none')\n * @param preserveColorOnHover hover 시 컬러 유지 여부\n * @param icon 외부 링크 아이콘 또는 커스텀 아이콘\n * @param external 외부 링크 여부\n * @param size 링크 크기 ('xsmall' | 'small' | 'medium' | 'large' | 'xlarge')\n * @param disabled 비활성화 여부\n * @param children 링크 텍스트 내용\n * @param className 사용자 정의 클래스명\n */\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n variant = 'default',\n underline = 'always',\n preserveColorOnHover = false,\n icon,\n external = false,\n size = 'large',\n disabled = false,\n children,\n className,\n href,\n target,\n rel,\n onClick,\n ...props\n },\n ref\n ) => {\n const linkClasses = classNames(\n 'krds-btn',\n 'link',\n size,\n variant === 'basic' && 'basic',\n preserveColorOnHover && 'pure',\n disabled && 'disabled',\n className\n )\n\n const linkTextClasses = {\n always: 'underline',\n hover: 'underline hidden-underline',\n none: ''\n }[underline]\n\n const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n event.preventDefault()\n return\n }\n onClick?.(event)\n }\n\n const linkTarget = external ? '_blank' : target\n const linkRel = external ? 'noopener noreferrer' : rel\n const linkTitle = external && !props.title ? '새 창 열림' : props.title\n\n const Icon = icon ? icon : external ? <i className=\"svg-icon ico-go\" /> : null\n return (\n <a\n ref={ref}\n className={linkClasses}\n href={disabled ? undefined : href}\n target={linkTarget}\n rel={linkRel}\n title={linkTitle}\n onClick={handleClick}\n tabIndex={disabled ? -1 : undefined}\n aria-disabled={disabled}\n {...props}\n >\n <span className={linkTextClasses}>{children}</span>\n {Icon}\n </a>\n )\n }\n)\n\nLink.displayName = 'Link'\n","import { forwardRef } from 'react'\nimport { MastheadProps } from './Masthead.types'\n\n/**\n * KRDS Masthead Component\n * @param text 배너 텍스트\n * @param className 커스텀 클래스명\n */\nexport const Masthead = forwardRef<HTMLDivElement, MastheadProps>(({ text, className, ...props }, ref) => {\n return (\n <div id=\"krds-masthead\" ref={ref} className={className} {...props}>\n <div className=\"toggle-wrap\">\n <div className=\"toggle-head\">\n <div className=\"inner\">\n <span className=\"nuri-txt\">{text}</span>\n </div>\n </div>\n </div>\n </div>\n )\n})\n\nMasthead.displayName = 'Masthead'\n","import React from 'react'\n\ninterface ModalContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n size: 'sm' | 'md' | 'lg'\n variant: 'default' | 'full' | 'bottom-sheet'\n closeOnEsc: boolean\n closeOnOverlayClick: boolean\n usePortal: boolean\n portalContainer?: string | HTMLElement\n}\n\nexport const ModalContext = React.createContext<ModalContextValue | null>(null)\n\n/** Modal.Content의 대화상자 이름: Modal.Title이 렌더되면 자기 id를 알려 aria-labelledby로 연결된다 */\ninterface ModalTitleContextValue {\n generatedTitleId: string\n setTitleId: (id: string | undefined) => void\n}\n\nexport const ModalTitleContext = React.createContext<ModalTitleContextValue | null>(null)\n\nexport const useModalContext = () => {\n const ctx = React.useContext(ModalContext)\n if (!ctx) throw new Error('Modal compound components must be used within <Modal.Root>')\n return ctx\n}\n","import { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { classNames } from '@/utils'\nimport React, { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport Button from '../Button'\nimport { Portal } from '../Portal/Portal'\nimport {\n ModalBodyProps,\n ModalCloseProps,\n ModalContentProps,\n ModalFooterProps,\n ModalHeaderProps,\n ModalOverlayProps,\n ModalRootProps,\n ModalTriggerProps\n} from './Modal.types'\nimport { ModalContext, ModalTitleContext, useModalContext } from './ModalContext'\n\nconst Slot = React.forwardRef<any, { children?: React.ReactNode } & any>(({ children, ...props }, ref) => {\n if (React.isValidElement(children)) {\n return React.cloneElement(children, {\n ...props,\n ...(children as any)?.props,\n ref\n })\n }\n return null\n})\nSlot.displayName = 'Slot'\n\n/**\n * KRDS Modal Component\n * @param variant 모달 유형 ('default' | 'bottom-sheet')\n * @param size 모달 크기 ('sm' | 'md' | 'lg')\n * @param open 열림 상태 (제어)\n * @param defaultOpen 초기 열림 상태 (비제어)\n * @param onOpenChange 열림 상태 변경 핸들러\n */\nconst ModalRoot = ({\n children,\n size = 'lg',\n variant = 'default',\n open,\n defaultOpen = false,\n onOpenChange,\n closeOnEsc = false,\n closeOnOverlayClick = false,\n usePortal = false,\n portalContainer\n}: ModalRootProps) => {\n const [_open, setOpen] = useUncontrolled({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange\n })\n\n const contextValue = useMemo(\n () => ({\n open: _open,\n setOpen,\n size,\n variant,\n closeOnEsc,\n closeOnOverlayClick,\n usePortal,\n portalContainer\n }),\n [_open, setOpen, size, variant, closeOnEsc, closeOnOverlayClick, usePortal, portalContainer]\n )\n\n return <ModalContext.Provider value={contextValue}>{children}</ModalContext.Provider>\n}\n\nModalRoot.displayName = 'ModalRoot'\n\nconst ModalTrigger = forwardRef<HTMLButtonElement, ModalTriggerProps>(({ onClick, asChild = false, children, ...props }, ref) => {\n const { setOpen } = useModalContext()\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n setOpen(true)\n },\n [onClick, setOpen]\n )\n\n if (asChild) {\n return (\n <Slot onClick={handleClick} {...props} ref={ref}>\n {children}\n </Slot>\n )\n }\n\n return (\n <button type=\"button\" onClick={handleClick} {...props} ref={ref}>\n {children}\n </button>\n )\n})\nModalTrigger.displayName = 'ModalTrigger'\n\nconst ModalOverlay = forwardRef<HTMLDivElement, ModalOverlayProps>(({ className = '', ...props }, ref) => {\n const { open } = useModalContext()\n\n return <div className={classNames('modal-back', open && 'in', className)} {...props} ref={ref} />\n})\nModalOverlay.displayName = 'ModalOverlay'\nconst ModalContent = forwardRef<HTMLDivElement, ModalContentProps>(({ className = '', children, id, role = 'dialog', ...props }, ref) => {\n const { open, setOpen, size, variant, closeOnEsc, closeOnOverlayClick, usePortal, portalContainer } = useModalContext()\n\n const generatedId = useId()\n const sectionId = id || `krds-modal-${generatedId}`\n\n // 대화상자 이름: 렌더된 Modal.Title을 aria-labelledby로 연결 (원본은 연결하지 않아 대화상자에 이름이 없었음)\n const generatedTitleId = useId()\n const [titleId, setTitleId] = useState<string>()\n const titleContext = useMemo(() => ({ generatedTitleId, setTitleId }), [generatedTitleId])\n const labelledBy = props['aria-labelledby'] ?? titleId\n\n const contentRef = useRef<HTMLDivElement | null>(null)\n const dialogRef = useRef<HTMLDivElement | null>(null)\n const [contentNode, setContentNode] = useState<HTMLDivElement | null>(null)\n const focusableElements = useRef<HTMLElement[]>([])\n const isInitialized = useRef(false)\n const openTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const focusTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const getFocusableElements = useCallback(() => {\n if (!contentRef.current) return []\n\n const focusableSelector = [\n 'a[href]',\n 'button:not([disabled])',\n 'textarea:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n 'iframe',\n 'object',\n 'embed',\n 'area[href]',\n 'audio[controls]',\n 'video[controls]'\n ].join(', ')\n\n return Array.from(contentRef.current.querySelectorAll<HTMLElement>(focusableSelector)).filter(el => {\n const ariaHidden = el.getAttribute('aria-hidden')\n const hiddenByAttr = el.hasAttribute('disabled') || ariaHidden === 'true'\n return !hiddenByAttr\n })\n }, [])\n\n const setInitialFocus = useCallback(() => {\n if (isInitialized.current) return\n\n const focusable = getFocusableElements()\n focusableElements.current = focusable\n isInitialized.current = true\n\n focusTimeoutRef.current = setTimeout(() => {\n const firstFocusable = focusable[0]\n if (firstFocusable) {\n firstFocusable.focus()\n }\n }, 200)\n }, [getFocusableElements])\n\n const handleContentMount = useCallback(\n (node: HTMLDivElement | null) => {\n if (ref) {\n if (typeof ref === 'function') {\n ref(node)\n } else {\n ref.current = node\n }\n }\n contentRef.current = node\n\n setContentNode(node)\n },\n [ref]\n )\n\n // React 18은 ref 콜백의 반환 함수를 호출하지 않으므로 effect에서 구독과 예약 작업을 정리한다.\n useEffect(() => {\n if (!contentNode || !open) return\n\n const observer = new MutationObserver(() => {\n setInitialFocus()\n observer.disconnect()\n })\n observer.observe(contentNode, {\n attributes: true,\n attributeFilter: ['tabindex'],\n subtree: true,\n childList: true\n })\n const frame = requestAnimationFrame(setInitialFocus)\n\n return () => {\n observer.disconnect()\n cancelAnimationFrame(frame)\n if (focusTimeoutRef.current !== null) {\n clearTimeout(focusTimeoutRef.current)\n focusTimeoutRef.current = null\n }\n focusableElements.current = []\n isInitialized.current = false\n }\n }, [contentNode, open, setInitialFocus])\n\n const handleDialogMount = useCallback((node: HTMLDivElement | null) => {\n dialogRef.current = node\n }, [])\n\n useEffect(() => {\n return () => {\n focusableElements.current = []\n isInitialized.current = false\n if (openTimeoutRef.current) {\n clearTimeout(openTimeoutRef.current)\n }\n if (focusTimeoutRef.current) {\n clearTimeout(focusTimeoutRef.current)\n }\n }\n }, [])\n\n useEffect(() => {\n if (!open) {\n focusableElements.current = []\n isInitialized.current = false\n if (openTimeoutRef.current) {\n clearTimeout(openTimeoutRef.current)\n }\n if (focusTimeoutRef.current) {\n clearTimeout(focusTimeoutRef.current)\n }\n return\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.key === 'Escape' || e.key === 'Esc') && closeOnEsc) {\n setOpen(false)\n return\n }\n\n if (e.key === 'Tab') {\n const focusable = focusableElements.current\n\n if (focusable.length === 0) {\n e.preventDefault()\n return\n }\n\n const firstFocusable = focusable[0]\n const lastFocusable = focusable[focusable.length - 1]\n const activeElement = document.activeElement as HTMLElement\n\n if (e.shiftKey && activeElement === firstFocusable) {\n e.preventDefault()\n lastFocusable.focus()\n } else if (!e.shiftKey && activeElement === lastFocusable) {\n e.preventDefault()\n firstFocusable.focus()\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown, true)\n return () => {\n document.removeEventListener('keydown', handleKeyDown, true)\n }\n }, [open, closeOnEsc, setOpen])\n\n useEffect(() => {\n if (!open) return\n\n const previousFocused = document.activeElement as HTMLElement | null\n const wasScrollLocked = document.body.classList.contains('scroll-no')\n const wrapElement = document.getElementById('wrap')\n const wasInert = wrapElement?.hasAttribute('inert')\n document.body.classList.add('scroll-no')\n wrapElement?.setAttribute('inert', '')\n\n const dialog = dialogRef.current\n openTimeoutRef.current = setTimeout(() => {\n dialogRef.current?.classList.add('in')\n }, 150)\n\n return () => {\n if (openTimeoutRef.current !== null) {\n clearTimeout(openTimeoutRef.current)\n openTimeoutRef.current = null\n }\n dialog?.classList.remove('in')\n if (!wasScrollLocked) document.body.classList.remove('scroll-no')\n if (!wasInert) wrapElement?.removeAttribute('inert')\n previousFocused?.focus()\n }\n }, [open])\n\n const handleOverlayClick = useCallback(\n (e: React.MouseEvent) => {\n const clickedElement = e.target as HTMLElement\n if (contentRef.current?.contains(clickedElement)) {\n return\n }\n\n if (closeOnOverlayClick) {\n setOpen(false)\n } else {\n focusableElements.current[0]?.focus()\n }\n },\n [setOpen, closeOnOverlayClick]\n )\n\n const rootClasses = classNames('krds-modal shown', open && 'in', className)\n\n return (\n <Portal enabled={usePortal} container={portalContainer}>\n <section\n id={sectionId}\n aria-modal=\"true\"\n role={role}\n className={rootClasses}\n data-type={variant === 'default' ? undefined : variant}\n onClick={handleOverlayClick}\n {...props}\n aria-labelledby={labelledBy}\n >\n <div\n className={classNames('modal-dialog', size === 'sm' && 'modal-sm', size === 'md' && 'modal-md', size === 'lg' && 'modal-lg')}\n ref={handleDialogMount}\n >\n <div className=\"modal-content\" ref={handleContentMount}>\n <ModalTitleContext.Provider value={titleContext}>{children}</ModalTitleContext.Provider>\n <ModalCloseIconButton />\n </div>\n </div>\n <ModalOverlay />\n </section>\n </Portal>\n )\n})\n\nModalContent.displayName = 'ModalContent'\n\nconst ModalHeader = forwardRef<HTMLDivElement, ModalHeaderProps>(({ children, title, titleId, className = '', ...props }, ref) => {\n const id = titleId\n return (\n <div className={classNames('modal-header', className)} {...props} ref={ref}>\n {title ? <ModalTitle id={id}>{title}</ModalTitle> : children}\n </div>\n )\n})\nModalHeader.displayName = 'ModalHeader'\n\nconst ModalTitle = forwardRef<HTMLHeadingElement, React.ComponentProps<'h2'>>(({ className = '', id, ...props }, ref) => {\n const titleContext = React.useContext(ModalTitleContext)\n const titleId = id ?? titleContext?.generatedTitleId\n // 렌더되는 동안 대화상자(Modal.Content)의 이름으로 연결\n useEffect(() => {\n titleContext?.setTitleId(titleId)\n return () => titleContext?.setTitleId(undefined)\n }, [titleContext, titleId])\n return <h2 id={titleId} className={classNames('modal-title', className)} {...props} ref={ref} />\n})\nModalTitle.displayName = 'ModalTitle'\n\nconst ModalDescription = forwardRef<HTMLParagraphElement, React.ComponentProps<'p'>>(({ className = '', ...props }, ref) => {\n return <p className={classNames('text-sm text-muted-foreground', className)} {...props} ref={ref} />\n})\nModalDescription.displayName = 'ModalDescription'\n\nconst ModalBody = forwardRef<HTMLDivElement, ModalBodyProps>(({ children, className = '', descriptionId, ...props }, ref) => {\n const [hasScroll, setHasScroll] = useState(false)\n\n const bodyRef = useRef<HTMLDivElement | null>(null)\n\n const handleBodyMount = useCallback(\n (node: HTMLDivElement | null) => {\n if (ref) {\n if (typeof ref === 'function') {\n ref(node)\n } else {\n ref.current = node\n }\n }\n bodyRef.current = node\n\n if (node) {\n const isScrollable = node.scrollHeight > node.clientHeight\n setHasScroll(isScrollable)\n }\n },\n [ref]\n )\n\n return (\n <div\n className={classNames('modal-conts', className)}\n id={descriptionId}\n ref={handleBodyMount}\n {...(hasScroll && { tabIndex: 0 })}\n {...props}\n >\n <div className=\"conts-area\">{children}</div>\n </div>\n )\n})\nModalBody.displayName = 'ModalBody'\n\nconst ModalFooter = forwardRef<HTMLDivElement, ModalFooterProps>(({ children, className = '', ...props }, ref) => {\n return (\n <div className={classNames('modal-btn', 'btn-wrap', className)} {...props} ref={ref}>\n {children}\n </div>\n )\n})\nModalFooter.displayName = 'ModalFooter'\n\nconst ModalCloseIconButton = () => {\n const { setOpen } = useModalContext()\n\n return (\n <Button variant=\"icon\" type=\"button\" size=\"medium\" className={classNames('btn-close')} onClick={() => setOpen(false)}>\n <span className=\"sr-only\">모달 닫기</span>\n <i className=\"svg-icon ico-popup-close\" />\n </Button>\n )\n}\n\nconst ModalClose = forwardRef<HTMLButtonElement, ModalCloseProps>(({ onClick, className, children, asChild = false, ...props }, ref) => {\n const { setOpen } = useModalContext()\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n setOpen(false)\n },\n [onClick, setOpen]\n )\n\n const Component = asChild ? Slot : 'button'\n\n return (\n <Component ref={asChild ? (ref as any) : ref} className={className} onClick={handleClick} {...props}>\n {children}\n </Component>\n )\n})\n\nconst Modal = Object.assign(ModalRoot, {\n Root: ModalRoot,\n Trigger: ModalTrigger,\n Content: ModalContent,\n Header: ModalHeader,\n Title: ModalTitle,\n Description: ModalDescription,\n Body: ModalBody,\n Footer: ModalFooter,\n Close: ModalClose\n})\n\nModal.displayName = 'Modal'\n\nexport default Modal\n","import { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { classNames } from '@/utils'\nimport React, { forwardRef } from 'react'\nimport { PaginationItem, PaginationProps } from './Pagination.types'\n\n/**\n * KRDS Pagination Component\n * @param totalPages 전체 페이지 수\n * @param currentPage 현재 페이지 (제어)\n * @param defaultPage 초기 페이지 (비제어)\n * @param onChange 페이지 변경 핸들러\n * @param prevLabel 이전 버튼 레이블\n * @param nextLabel 다음 버튼 레이블\n * @param boundaryCount 경계 영역에 표시할 페이지 수 (0-3)\n * @param siblingCount 현재 주변 표시 페이지 수 (0-3)\n * @param disabled 비활성 상태\n * @param className 커스텀 클래스명\n */\nconst Pagination: React.FC<PaginationProps> = forwardRef<HTMLDivElement, PaginationProps>(\n (\n {\n totalPages,\n currentPage,\n defaultPage = 1,\n onChange,\n prevLabel = '이전',\n nextLabel = '다음',\n boundaryCount = 1,\n siblingCount = 1,\n disabled = false,\n className = '',\n ...props\n },\n ref\n ) => {\n const [page, setPage] = useUncontrolled<number>({\n value: currentPage,\n defaultValue: defaultPage,\n finalValue: 1,\n onChange: onChange as (v: number) => void\n })\n\n const clamp = (val: number) => Math.max(1, Math.min(totalPages, val))\n\n const createItems = (): PaginationItem[] => {\n if (totalPages <= 0) return []\n\n const startPages = Array.from({ length: Math.min(boundaryCount, totalPages) }, (_, i) => i + 1)\n const endPages = Array.from({ length: Math.min(boundaryCount, totalPages) }, (_, i) => totalPages - i).reverse()\n\n const siblingsStart = Math.max(Math.min(page - siblingCount, totalPages - boundaryCount - siblingCount * 2 - 1), boundaryCount + 2)\n const siblingsEnd = Math.min(\n Math.max(page + siblingCount, boundaryCount + siblingCount * 2 + 2),\n endPages.length > 0 ? endPages[0] - 2 : totalPages - 1\n )\n\n const items: PaginationItem[] = []\n\n items.push(...startPages)\n\n if (siblingsStart > boundaryCount + 2) {\n items.push('dots')\n } else if (boundaryCount + 1 < totalPages - boundaryCount) {\n items.push(boundaryCount + 1)\n }\n\n for (let i = siblingsStart; i <= siblingsEnd; i += 1) {\n if (i >= 1 && i <= totalPages) items.push(i)\n }\n\n if (siblingsEnd < totalPages - boundaryCount - 1) {\n items.push('dots')\n } else if (totalPages - boundaryCount > boundaryCount) {\n items.push(totalPages - boundaryCount)\n }\n\n for (const p of endPages) {\n if (!items.includes(p)) items.push(p)\n }\n\n const normalized: PaginationItem[] = []\n const set = new Set<string>()\n for (const it of items) {\n const key = String(it)\n if (!set.has(key)) {\n set.add(key)\n normalized.push(it)\n }\n }\n normalized.sort((a, b) => {\n if (a === 'dots' || b === 'dots') return 0\n return (a as number) - (b as number)\n })\n\n const finalItems: PaginationItem[] = []\n for (let i = 0; i < normalized.length; i++) {\n const curr = normalized[i]\n finalItems.push(curr)\n if (typeof curr === 'number' && i < normalized.length - 1) {\n const next = normalized[i + 1]\n if (typeof next === 'number' && next - curr > 1) {\n finalItems.push('dots')\n }\n }\n }\n\n return finalItems\n }\n\n const items = createItems()\n\n const handlePrev = () => {\n if (disabled) return\n const next = clamp(page - 1)\n if (next !== page) setPage(next)\n }\n\n const handleNext = () => {\n if (disabled) return\n const next = clamp(page + 1)\n if (next !== page) setPage(next)\n }\n\n const handlePage = (p: number) => () => {\n if (disabled) return\n if (p !== page) setPage(p)\n }\n\n const isPrevDisabled = disabled || page <= 1\n const isNextDisabled = disabled || page >= totalPages\n\n return (\n <div className={classNames('krds-pagination', className)} ref={ref} {...props}>\n <span\n className={classNames('page-navi prev', isPrevDisabled && 'disabled')}\n aria-disabled={isPrevDisabled}\n role=\"button\"\n tabIndex={isPrevDisabled ? -1 : 0}\n onClick={!isPrevDisabled ? handlePrev : undefined}\n >\n {prevLabel}\n </span>\n\n <div className=\"page-links\">\n {items.map((it, idx) => {\n if (it === 'dots') {\n return <span key={`dots-${idx}`} className=\"page-link link-dot\" aria-hidden />\n }\n const isActive = it === page\n return (\n <a\n key={it}\n className={classNames('page-link', isActive && 'active')}\n aria-current={isActive ? 'page' : undefined}\n onClick={handlePage(it)}\n href=\"#\"\n >\n {isActive ? (\n <>\n <span className=\"sr-only\">현재페이지 </span>\n {it}\n </>\n ) : (\n it\n )}\n </a>\n )\n })}\n </div>\n\n <a\n className={classNames('page-navi next', isNextDisabled && 'disabled')}\n aria-disabled={isNextDisabled}\n role=\"button\"\n tabIndex={isNextDisabled ? -1 : 0}\n onClick={!isNextDisabled ? handleNext : undefined}\n href=\"#\"\n >\n {nextLabel}\n </a>\n </div>\n )\n }\n)\n\nPagination.displayName = 'Pagination'\n\nexport default Pagination\n","import { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { classNames } from '@/utils'\nimport React, { createContext, forwardRef, useContext, useId, useMemo, useState } from 'react'\nimport { RadioChipProps, RadioGroupContextType, RadioGroupProps, RadioProps } from './Radio.types'\n\nconst RadioGroupContext = createContext<RadioGroupContextType | undefined>(undefined)\n\n/**\n * KRDS Radio 컴포넌트\n * @param value 라디오 버튼의 값 (RadioGroup 내에서 사용)\n * @param checked 선택 상태 (controlled mode)\n * @param defaultChecked 초기 선택 상태 (uncontrolled mode)\n * @param disabled 비활성화 여부\n * @param size 라디오 버튼 크기 ('medium' | 'large')\n * @param description 부가적인 설명 텍스트\n * @param onChange 값 변경 시 호출되는 콜백\n * @param className 추가 커스텀 클래스\n */\nconst Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n { id, name, defaultChecked, checked, disabled = false, size = 'medium', children, description, onChange, className, value, ...props },\n ref\n ) => {\n const radioClasses = classNames('krds-form-check', size, className)\n\n const radioGroup = useContext(RadioGroupContext)\n\n // 렌더할 때마다 Math.random()으로 만들면 서버 렌더링과 브라우저의 id가 달라지므로 useId\n const generatedId = useId()\n const autoId = id ?? generatedId\n\n const isInGroup = !!radioGroup\n const groupValue = radioGroup?.value\n const groupName = radioGroup?.name\n const groupOnChange = radioGroup?.onChange\n\n const uniqueName = useMemo(() => {\n if (isInGroup) return groupName\n if (name) return name\n return `radio-${autoId}`\n }, [isInGroup, groupName, name, autoId])\n\n const isChecked = isInGroup ? groupValue === value : checked\n\n const [_checked, setChecked] = useUncontrolled<boolean>({\n value: isChecked,\n defaultValue: defaultChecked,\n onChange: (value: boolean) => {\n if (onChange) {\n const syntheticEvent = {\n target: { checked: value }\n } as React.ChangeEvent<HTMLInputElement>\n onChange(syntheticEvent)\n }\n }\n })\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (isInGroup && value !== undefined) {\n if (typeof value === 'string') {\n groupOnChange?.(value)\n }\n } else {\n setChecked(e.target.checked)\n }\n }\n\n return (\n <div className={radioClasses}>\n <input\n type=\"radio\"\n id={autoId}\n name={uniqueName}\n checked={_checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n onChange={handleChange}\n ref={ref}\n {...props}\n />\n <label htmlFor={autoId}>{children}</label>\n {description && (\n <div className=\"krds-form-check-cnt\">\n <p className=\"krds-form-check-p\">{description}</p>\n </div>\n )}\n </div>\n )\n }\n)\n\nRadio.displayName = 'Radio'\n\n/**\n * KRDS RadioChip 컴포넌트\n * @param value 라디오 칩의 값 (RadioGroup 내에서 사용)\n * @param checked 선택 상태 (controlled mode)\n * @param defaultChecked 초기 선택 상태 (uncontrolled mode)\n * @param disabled 비활성화 여부\n * @param size 라디오 칩 크기 ('small' | 'medium' | 'large')\n * @param onChange 값 변경 시 호출되는 콜백\n * @param className 추가 커스텀 클래스\n */\nconst RadioChip = forwardRef<HTMLInputElement, RadioChipProps>(\n ({ id, name, defaultChecked, checked, disabled = false, size = 'medium', children, onChange, className, value, ...props }, ref) => {\n const [isFocused, setIsFocused] = useState(false)\n\n const radioChipClasses = classNames('krds-form-chip', size, isFocused && 'focus', className)\n\n const radioGroup = useContext(RadioGroupContext)\n\n // 렌더할 때마다 Math.random()으로 만들면 서버 렌더링과 브라우저의 id가 달라지므로 useId\n const generatedId = useId()\n const autoId = id ?? generatedId\n\n const isInGroup = !!radioGroup\n const groupValue = radioGroup?.value\n const groupName = radioGroup?.name\n const groupOnChange = radioGroup?.onChange\n\n const uniqueName = useMemo(() => {\n if (isInGroup) return groupName\n if (name) return name\n return `radio-chip-${autoId}`\n }, [isInGroup, groupName, name, autoId])\n\n const isChecked = isInGroup ? groupValue === value : checked\n\n const [_checked, setChecked] = useUncontrolled<boolean>({\n value: isChecked,\n defaultValue: defaultChecked,\n onChange: (value: boolean) => {\n if (onChange) {\n const syntheticEvent = {\n target: { checked: value }\n } as React.ChangeEvent<HTMLInputElement>\n onChange(syntheticEvent)\n }\n }\n })\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (isInGroup && value !== undefined) {\n if (typeof value === 'string') {\n groupOnChange?.(value)\n }\n } else {\n setChecked(e.target.checked)\n }\n }\n\n const handleFocus = () => {\n setIsFocused(true)\n }\n\n const handleBlur = () => {\n setIsFocused(false)\n }\n\n return (\n <div className={radioChipClasses}>\n <input\n type=\"radio\"\n className=\"radio\"\n id={autoId}\n name={uniqueName}\n checked={_checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n ref={ref}\n {...props}\n />\n <label className=\"krds-form-chip-outline\" htmlFor={autoId}>\n {children}\n </label>\n </div>\n )\n }\n)\n\nRadioChip.displayName = 'RadioChip'\n\n/**\n * KRDS RadioGroup 컴포넌트\n * @param value 라디오 그룹의 값 (controlled mode)\n * @param defaultValue 초기 값 (uncontrolled mode)\n * @param onChange 값 변경 시 호출되는 콜백\n * @param name 라디오 그룹의 이름\n * @param children Radio 또는 RadioChip 컴포넌트들\n * @param className 추가 커스텀 클래스\n * @param column 세로 배치 여부\n */\nconst RadioGroup: React.FC<RadioGroupProps> = ({ value, defaultValue, onChange, name, children, className, column = false }) => {\n const [currentValue, handleChange] = useUncontrolled({\n value,\n defaultValue,\n onChange\n })\n\n const contextValue: RadioGroupContextType = {\n value: currentValue,\n onChange: handleChange,\n name\n }\n\n const groupClasses = classNames('krds-check-area', column && 'chk-column', className)\n\n return (\n <RadioGroupContext.Provider value={contextValue}>\n <div className={groupClasses}>{children}</div>\n </RadioGroupContext.Provider>\n )\n}\n\nRadioGroup.displayName = 'RadioGroup'\n\nexport { Radio, RadioChip, RadioGroup }\n","import React, { forwardRef } from 'react'\nimport { classNames } from '@/utils'\nimport { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { Dropdown } from '../Dropdown'\nimport { ResizeProps, ResizeScale, ResizeItemProps } from './Resize.types'\n\nconst DEFAULT_LABELS = {\n sm: '작게',\n md: '보통',\n lg: '조금 크게',\n xlg: '크게',\n xxlg: '가장크게'\n}\n\nconst ResizeItem: React.FC<ResizeItemProps> = ({ scale, label, isActive, onClick }) => {\n const handleClick = () => {\n onClick(scale)\n }\n\n return (\n <Dropdown.Item className={classNames(scale, isActive && 'active')} data-adjust-scale={scale} isActive={isActive} onClick={handleClick}>\n {label}\n </Dropdown.Item>\n )\n}\n\n/**\n * KRDS Resize Component\n * @param value 현재 선택된 크기 ('sm' | 'md' | 'lg' | 'xlg' | 'xxlg')\n * @param defaultValue 기본 선택된 크기\n * @param onChange 크기 변경 시 호출되는 콜백 함수\n * @param buttonText 드롭다운 버튼 텍스트\n * @param resetText 초기화 버튼 텍스트\n * @param labels 각 크기 옵션의 라벨\n * @param className 사용자 정의 클래스명\n */\nexport const Resize = forwardRef<HTMLButtonElement, ResizeProps>(\n (\n { value, defaultValue = 'md', onChange, buttonText = '화면크기', resetText = '초기화', labels = DEFAULT_LABELS, className, ...rest },\n ref\n ) => {\n const [currentScale, setCurrentScale] = useUncontrolled({\n value,\n defaultValue,\n finalValue: 'md' as ResizeScale,\n onChange\n })\n\n const handleScaleChange = (scale: ResizeScale) => {\n setCurrentScale(scale)\n\n const root = document.querySelector(':root') as HTMLElement\n if (root) {\n const rootStyles = getComputedStyle(root)\n let zoomValue = ''\n\n switch (scale) {\n case 'sm':\n zoomValue = rootStyles.getPropertyValue('--krds-zoom-small').trim()\n break\n case 'md':\n zoomValue = rootStyles.getPropertyValue('--krds-zoom-medium').trim()\n break\n case 'lg':\n zoomValue = rootStyles.getPropertyValue('--krds-zoom-large').trim()\n break\n case 'xlg':\n zoomValue = rootStyles.getPropertyValue('--krds-zoom-xlarge').trim()\n break\n case 'xxlg':\n zoomValue = rootStyles.getPropertyValue('--krds-zoom-xxlarge').trim()\n break\n }\n\n if (zoomValue) {\n document.body.style.zoom = zoomValue\n }\n }\n\n onChange?.(scale)\n }\n\n const handleReset = () => {\n handleScaleChange('md')\n }\n\n const scales: ResizeScale[] = ['sm', 'md', 'lg', 'xlg', 'xxlg']\n\n const buttonContent = (\n <>\n {buttonText} <i className=\"svg-icon ico-toggle\"></i>\n </>\n )\n\n const bottomContent = (\n <button type=\"button\" className=\"krds-btn medium text\" data-adjust-scale=\"md\" onClick={handleReset}>\n <i className=\"svg-icon ico-reset\"></i> {resetText}\n </button>\n )\n\n return (\n <Dropdown buttonText={buttonContent} className={classNames('krds-resize', className)} ref={ref} {...rest}>\n <Dropdown.List>\n {scales.map(scale => (\n <ResizeItem key={scale} scale={scale} label={labels[scale]} isActive={currentScale === scale} onClick={handleScaleChange} />\n ))}\n </Dropdown.List>\n <Dropdown.BottomSection>{bottomContent}</Dropdown.BottomSection>\n </Dropdown>\n )\n }\n)\n\nResize.displayName = 'Resize'\n","import { classNames } from '@/utils'\nimport React, { forwardRef, useId } from 'react'\nimport { SelectProps } from './Select.types'\nimport { useUncontrolled } from '@/hooks/use-uncontrolled'\n\nconst Select: React.FC<SelectProps> = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n options,\n label,\n hint,\n error,\n size = 'large',\n variant = 'default',\n disabled = false,\n className = '',\n ...props\n },\n ref\n ) => {\n const [_value, setValue] = useUncontrolled({\n value,\n defaultValue,\n onChange\n })\n\n // id를 주지 않아도 레이블이 연결되도록 (원본은 id가 없으면 레이블이 연결되지 않았음)\n const generatedId = useId()\n const selectId = props.id ?? generatedId\n\n const selectClasses = classNames(\n variant === 'sorting' ? 'krds-form-select-sort' : 'krds-form-select',\n size,\n error && 'is-error',\n disabled && 'disabled',\n className\n )\n\n if (variant === 'sorting') {\n return (\n <select\n className={selectClasses}\n disabled={disabled}\n value={_value}\n onChange={e => setValue(e.target.value)}\n title=\"선택\"\n {...props}\n ref={ref}\n >\n {options.map(option => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n )\n }\n\n return (\n <div className=\"form-group\">\n {label && (\n <div className=\"form-tit\">\n <label htmlFor={selectId}>{label}</label>\n </div>\n )}\n <div className=\"form-conts\">\n <select\n className={selectClasses}\n disabled={disabled}\n value={_value}\n onChange={e => setValue(e.target.value)}\n {...props}\n id={selectId}\n ref={ref}\n >\n {options.map(option => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n {hint && !error && <p className=\"form-hint\">{hint}</p>}\n {error && <p className=\"form-hint-invalid\">{error}</p>}\n </div>\n )\n }\n)\n\nSelect.displayName = 'Select'\n\nexport default Select\n","import { classNames } from '@/utils'\nimport { forwardRef, useEffect, useRef } from 'react'\nimport {\n SideNavigationItemProps,\n SideNavigationLinkProps,\n SideNavigationMenuProps,\n SideNavigationPopupMenuProps,\n SideNavigationPopupProps,\n SideNavigationPopupTitleProps,\n SideNavigationPopupToggleProps,\n SideNavigationProps,\n SideNavigationSubItemProps,\n SideNavigationSubMenuProps,\n SideNavigationTitleProps,\n SideNavigationToggleProps\n} from './SideNavigation.types'\nimport { useMergeRefs } from '@/hooks/use-merge-refs'\n\n/**\n * KRDS SideNavigation Root Component\n * @param children 자식 컴포넌트들\n * @param className 추가 CSS 클래스\n */\nconst SideNavigationRoot = forwardRef<HTMLElement, SideNavigationProps>(({ children, className, ...props }, ref) => {\n return (\n <nav className={classNames('krds-side-navigation', className)} ref={ref} {...props}>\n {children}\n </nav>\n )\n})\n\nSideNavigationRoot.displayName = 'SideNavigation'\n\n/**\n * KRDS SideNavigation Title Component\n * @param children 제목 텍스트\n * @param className 추가 CSS 클래스\n */\nconst SideNavigationTitle = forwardRef<HTMLHeadingElement, SideNavigationTitleProps>(({ children, className, ...props }, ref) => {\n return (\n <h2 className={classNames('lnb-tit', className)} ref={ref} {...props}>\n {children}\n </h2>\n )\n})\n\nSideNavigationTitle.displayName = 'SideNavigation.Title'\n\n/**\n * KRDS SideNavigation Menu Component\n * @param children 메뉴 아이템들\n * @param className 추가 CSS 클래스\n */\nconst SideNavigationMenu = forwardRef<HTMLUListElement, SideNavigationMenuProps>(({ children, className, ...props }, ref) => {\n return (\n <ul className={classNames('lnb-list', className)} role=\"menubar\" ref={ref} {...props}>\n {children}\n </ul>\n )\n})\n\nSideNavigationMenu.displayName = 'SideNavigation.Menu'\n\n/**\n * KRDS SideNavigation Item Component (2depth)\n * @param children 자식 요소들\n * @param active 활성화 상태 (서브메뉴 표시용)\n * @param className 추가 CSS 클래스\n */\nconst SideNavigationItem = forwardRef<HTMLLIElement, SideNavigationItemProps>(({ children, active, className, ...props }, ref) => {\n return (\n <li className={classNames('lnb-item', active && 'active', className)} role=\"none\" ref={ref} {...props}>\n {children}\n </li>\n )\n})\n\nSideNavigationItem.displayName = 'SideNavigation.Item'\n\n/**\n * KRDS SideNavigation SubItem Component (3depth)\n * @param children 자식 요소들\n * @param active 활성화 상태\n * @param className 추가 CSS 클래스\n */\nconst SideNavigationSubItem = forwardRef<HTMLLIElement, SideNavigationSubItemProps>(({ children, active, className, ...props }, ref) => {\n return (\n <li className={classNames('lnb-subitem', active && 'active', className)} role=\"none\" ref={ref} {...props}>\n {children}\n </li>\n )\n})\n\nSideNavigationSubItem.displayName = 'SideNavigation.SubItem'\n\n/**\n * KRDS SideNavigation Toggle Button Component\n * @param children 버튼 텍스트\n * @param active 활성화 상태\n * @param expanded 확장된 상태\n * @param onClick 클릭 핸들러\n * @param className 추가 CSS 클래스\n */\nconst SideNavigationToggle = forwardRef<HTMLButtonElement, SideNavigationToggleProps>(\n ({ children, active, expanded, onClick, className, ...props }, ref) => {\n return (\n <button\n type=\"button\"\n className={classNames('lnb-btn', 'lnb-toggle', active && 'active', className)}\n role=\"menuitem\"\n aria-expanded={expanded}\n onClick={onClick}\n ref={ref}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\n\nSideNavigationToggle.displayName = 'SideNavigation.Toggle'\n\n/**\n * KRDS SideNavigation SubMenu Component\n * @param children 서브메뉴 아이템들\n * @param id 메뉴 ID\n * @param className 추가 CSS 클래스\n */\nconst SideNavigationSubMenu = forwardRef<HTMLDivElement, SideNavigationSubMenuProps>(({ children, id, className, ...props }, ref) => {\n return (\n <div className={classNames('lnb-submenu', className)} ref={ref} {...props}>\n <ul id={id} role=\"menu\">\n {children}\n </ul>\n </div>\n )\n})\n\nSideNavigationSubMenu.displayName = 'SideNavigation.SubMenu'\n\n/**\n * KRDS SideNavigation Link Component\n * @param children 링크 텍스트\n * @param href 링크 URL\n * @param current 현재 페이지 여부\n * @param onClick 클릭 핸들러\n * @param className 추가 CSS 클래스\n */\nconst SideNavigationLink = forwardRef<HTMLAnchorElement, SideNavigationLinkProps>(\n ({ children, href = '#', current, onClick, className, ...props }, ref) => {\n return (\n <a\n href={href}\n className={classNames('lnb-btn', 'lnb-link', className)}\n role=\"menuitem\"\n aria-current={current ? 'page' : undefined}\n onClick={onClick}\n ref={ref}\n {...props}\n >\n {children}\n </a>\n )\n }\n)\n\nSideNavigationLink.displayName = 'SideNavigation.Link'\n\n/**\n * KRDS SideNavigation Popup Toggle Component\n * @param children 버튼 텍스트\n * @param expanded 확장된 상태\n * @param onClick 클릭 핸들러\n * @param className 추가 CSS 클래스\n */\nconst SideNavigationPopupToggle = forwardRef<HTMLButtonElement, SideNavigationPopupToggleProps>(\n ({ children, expanded, onClick, className, ...props }, ref) => {\n const buttonRef = useRef<HTMLButtonElement>(null)\n const _ref = useMergeRefs(ref, buttonRef)\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n const button = event.currentTarget\n const popupSubmenu = button.nextElementSibling as HTMLElement\n\n if (popupSubmenu && popupSubmenu.classList.contains('lnb-submenu-lv2')) {\n popupSubmenu.classList.add('active')\n button.setAttribute('aria-expanded', 'true')\n\n const handleTransitionEnd = () => {\n const firstButton = popupSubmenu.querySelector('.lnb-btn-tit') as HTMLButtonElement\n firstButton?.focus()\n popupSubmenu.removeEventListener('transitionend', handleTransitionEnd)\n }\n\n popupSubmenu.addEventListener('transitionend', handleTransitionEnd)\n }\n\n onClick?.(event)\n }\n\n return (\n <button\n type=\"button\"\n className={classNames('lnb-btn', 'lnb-toggle-popup', className)}\n role=\"menuitem\"\n aria-expanded={expanded}\n aria-haspopup=\"true\"\n onClick={handleClick}\n ref={_ref}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\n\nSideNavigationPopupToggle.displayName = 'SideNavigation.PopupToggle'\n\n/**\n * KRDS SideNavigation Popup Component\n * @param children 팝업 내용\n * @param active 활성화 상태\n * @param id 메뉴 ID\n * @param className 추가 CSS 클래스\n */\nconst SideNavigationPopup = forwardRef<HTMLDivElement, SideNavigationPopupProps>(({ children, active, id, className, ...props }, ref) => {\n const popupRef = useRef<HTMLDivElement>(null)\n const _ref = useMergeRefs(ref, popupRef)\n\n useEffect(() => {\n const popupElement = popupRef.current\n if (!popupElement) return\n\n const handleFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as HTMLElement\n\n // 포커스가 서브메뉴 밖으로 나갔는지 확인\n if (!popupElement.contains(relatedTarget)) {\n popupElement.classList.remove('active')\n\n // 이전에 클릭된 토글 버튼 찾기\n const toggleButton = popupElement.previousElementSibling as HTMLButtonElement\n if (toggleButton && toggleButton.classList.contains('lnb-toggle-popup')) {\n toggleButton.setAttribute('aria-expanded', 'false')\n\n const handleTransitionEnd = () => {\n toggleButton.focus()\n popupElement.removeEventListener('transitionend', handleTransitionEnd)\n }\n\n popupElement.addEventListener('transitionend', handleTransitionEnd)\n }\n }\n }\n\n popupElement.addEventListener('focusout', handleFocusOut)\n\n return () => {\n popupElement.removeEventListener('focusout', handleFocusOut)\n }\n }, [])\n\n return (\n <div className={classNames('lnb-submenu-lv2', active && 'active', className)} id={id} role=\"menu\" ref={_ref} {...props}>\n {children}\n </div>\n )\n})\n\nSideNavigationPopup.displayName = 'SideNavigation.Popup'\n\n/**\n * KRDS SideNavigation Popup Title Component\n * @param children 제목 텍스트\n * @param onClick 클릭 핸들러\n * @param className 추가 CSS 클래스\n */\nconst SideNavigationPopupTitle = forwardRef<HTMLButtonElement, SideNavigationPopupTitleProps>(\n ({ children, onClick, className, ...props }, ref) => {\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n const button = event.currentTarget\n const popupSubmenu = button.closest('.lnb-submenu-lv2') as HTMLElement\n\n if (popupSubmenu) {\n popupSubmenu.classList.remove('active')\n\n const toggleButton = popupSubmenu.previousElementSibling as HTMLButtonElement\n if (toggleButton && toggleButton.classList.contains('lnb-toggle-popup')) {\n toggleButton.setAttribute('aria-expanded', 'false')\n toggleButton.focus()\n }\n }\n\n onClick?.(event)\n }\n\n return (\n <button type=\"button\" className={classNames('lnb-btn-tit', className)} onClick={handleClick} ref={ref} {...props}>\n {children}\n </button>\n )\n }\n)\n\nSideNavigationPopupTitle.displayName = 'SideNavigation.PopupTitle'\n\n/**\n * KRDS SideNavigation Popup Menu Component (4depth)\n * @param children 4depth 메뉴 아이템들\n * @param className 추가 CSS 클래스\n */\nconst SideNavigationPopupMenu = forwardRef<HTMLUListElement, SideNavigationPopupMenuProps>(({ children, className, ...props }, ref) => {\n return (\n <ul className={className} ref={ref} {...props}>\n {children}\n </ul>\n )\n})\n\nSideNavigationPopupMenu.displayName = 'SideNavigation.PopupMenu'\n\nconst SideNavigation = Object.assign(SideNavigationRoot, {\n Title: SideNavigationTitle,\n Menu: SideNavigationMenu,\n Item: SideNavigationItem,\n SubItem: SideNavigationSubItem,\n Toggle: SideNavigationToggle,\n SubMenu: SideNavigationSubMenu,\n Link: SideNavigationLink,\n PopupToggle: SideNavigationPopupToggle,\n Popup: SideNavigationPopup,\n PopupTitle: SideNavigationPopupTitle,\n PopupMenu: SideNavigationPopupMenu\n})\n\nexport { SideNavigation }\n","import React from 'react'\nimport { SkipLinkProps } from './SkipLink.types'\n\n/**\n * KRDS SkipLink 컴포넌트\n * @param targetId 이동할 대상 요소 ID\n * @param children 링크 텍스트 내용\n * @param className 사용자 정의 클래스명\n */\nexport const SkipLink = React.forwardRef<HTMLDivElement, SkipLinkProps>(\n ({ targetId = 'breadcrumb', children = '본문 바로가기', className, ...props }, ref) => {\n return (\n <div id=\"krds-skip-link\" ref={ref} className={className} {...props}>\n <a href={`#${targetId}`}>{children}</a>\n </div>\n )\n }\n)\n\nSkipLink.displayName = 'SkipLink'\n\nexport default SkipLink\n","import { classNames } from '@/utils'\nimport { forwardRef } from 'react'\nimport { StepIndicatorProps } from './StepIndicator.types'\n\n/**\n * KRDS StepIndicator Component\n * @param steps 단계 목록\n * @param currentStep 현재 활성 단계 인덱스 (0부터 시작, 기본값 -1)\n * @param currentStepText 스크린 리더용 현재 단계 텍스트\n * @param pageTitle 페이지 타이틀 텍스트\n */\nexport const StepIndicator = forwardRef<HTMLOListElement, StepIndicatorProps>(\n ({ steps, currentStep = -1, currentStepText = '현재단계', pageTitle, className, ...props }, ref) => {\n const getStepStatus = (index: number): 'default' | 'done' | 'active' => {\n if (index < currentStep) return 'done'\n if (index === currentStep) return 'active'\n return 'default'\n }\n\n const stepList = (\n <ol ref={ref} className={classNames('krds-step-wrap', className)} {...props}>\n {steps.map((step, index) => {\n const status = getStepStatus(index)\n const isActive = status === 'active'\n const stepKey = step.id || `step-${index}`\n\n return (\n <li key={stepKey} className={status !== 'default' ? status : undefined}>\n <span>\n {isActive && <em className=\"sr-only\">{currentStepText}</em>}\n <i className=\"step\">{step.step}</i>\n <span className=\"step-tit\">{step.title}</span>\n </span>\n </li>\n )\n })}\n </ol>\n )\n\n if (pageTitle) {\n return (\n <div className=\"page-title-wrap between\">\n <h2 className=\"h-tit\">{pageTitle}</h2>\n {stepList}\n </div>\n )\n }\n\n return stepList\n }\n)\n\nStepIndicator.displayName = 'StepIndicator'\n","import { classNames } from '@/utils'\nimport { forwardRef } from 'react'\nimport { Badge } from '../Badge'\nimport Button from '../Button'\nimport {\n StructuredListActionProps,\n StructuredListBadgeProps,\n StructuredListBodyProps,\n StructuredListButtonsProps,\n StructuredListContentProps,\n StructuredListDescriptionProps,\n StructuredListFooterProps,\n StructuredListHeaderProps,\n StructuredListItemProps,\n StructuredListMetaProps,\n StructuredListProps,\n StructuredListTagProps,\n StructuredListTitleProps\n} from './StructuredList.types'\n\n/**\n * KRDS StructuredList Component\n * @param children 구조화 목록 아이템들\n * @param className 사용자 정의 클래스명\n */\nexport const StructuredList = forwardRef<HTMLUListElement, StructuredListProps>(({ children, className, ...props }, ref) => {\n const listClasses = classNames('krds-structured-list', 'type-full', className)\n return (\n <ul ref={ref} className={listClasses} {...props}>\n {children}\n </ul>\n )\n})\n\nStructuredList.displayName = 'StructuredList'\n\n/**\n * KRDS StructuredListItem Component\n * @param children 구조화 목록 아이템 내용\n * @param className 사용자 정의 클래스명\n */\nexport const StructuredListItem = forwardRef<HTMLLIElement, StructuredListItemProps>(({ children, className, ...props }, ref) => {\n const itemClasses = classNames('structured-item', className)\n return (\n <li ref={ref} className={itemClasses} {...props}>\n <div className=\"in\">{children}</div>\n </li>\n )\n})\n\nStructuredListItem.displayName = 'StructuredListItem'\n\n/**\n * KRDS StructuredListHeader Component\n * @param children 헤더 내용\n * @param className 사용자 정의 클래스명\n */\nexport function StructuredListHeader({ children, className }: StructuredListHeaderProps) {\n return <div className={classNames('card-top', className)}>{children}</div>\n}\n\n/**\n * KRDS StructuredListBadge Component\n * @param children 뱃지 텍스트\n * @param variant 뱃지 종류 ('filled' | 'light')\n * @param color 뱃지 색상 ('primary' | 'success' | 'secondary')\n * @param className 사용자 정의 클래스명\n */\nexport function StructuredListBadge({ children, variant = 'light', color = 'primary', className }: StructuredListBadgeProps) {\n return (\n <Badge variant={variant} color={color} className={className}>\n {children}\n </Badge>\n )\n}\n\n/**\n * KRDS StructuredListBody Component\n * @param children 본문 내용\n * @param className 사용자 정의 클래스명\n */\nexport function StructuredListBody({ children, className }: StructuredListBodyProps) {\n return <div className={classNames('card-body', className)}>{children}</div>\n}\n\n/**\n * KRDS StructuredListContent Component\n * @param children 내용 요소들\n * @param href 링크 URL\n * @param className 사용자 정의 클래스명\n */\nexport function StructuredListContent({ children, href, className }: StructuredListContentProps) {\n const contentClasses = classNames('c-text', className)\n\n if (href) {\n return (\n <a href={href} className={contentClasses}>\n {children}\n </a>\n )\n }\n\n return <div className={contentClasses}>{children}</div>\n}\n\n/**\n * KRDS StructuredListTitle Component\n * @param children 제목 텍스트\n * @param className 사용자 정의 클래스명\n */\nexport function StructuredListTitle({ children, className }: StructuredListTitleProps) {\n return (\n <p className={classNames('c-tit', className)}>\n <span className=\"span\">{children}</span>\n </p>\n )\n}\n\n/**\n * KRDS StructuredListDescription Component\n * @param children 설명 텍스트\n * @param className 사용자 정의 클래스명\n */\nexport function StructuredListDescription({ children, className }: StructuredListDescriptionProps) {\n return <p className={classNames('c-txt', className)}>{children}</p>\n}\n\n/**\n * KRDS StructuredListMeta Component\n * @param label 메타 레이블\n * @param children 메타 값\n * @param className 사용자 정의 클래스명\n */\nexport function StructuredListMeta({ label, children, className }: StructuredListMetaProps) {\n return (\n <p className={classNames('c-date', className)}>\n {label && <strong className=\"key\">{label}</strong>}\n <span className=\"value\">{children}</span>\n </p>\n )\n}\n\n/**\n * KRDS StructuredListAction Component\n * @param children 액션 텍스트\n * @param onClick 클릭 핸들러\n * @param href 링크 URL\n * @param variant 버튼 종류 ('primary' | 'secondary' | 'text')\n * @param title 버튼 제목\n * @param className 사용자 정의 클래스명\n */\nexport function StructuredListAction({ children, onClick, href, variant = 'secondary', title, className }: StructuredListActionProps) {\n return (\n <div className={classNames('c-btn', className)}>\n {href ? (\n <Button as=\"a\" href={href} variant={variant} title={title}>\n {children}\n </Button>\n ) : (\n <Button variant={variant} onClick={onClick} title={title}>\n {children}\n </Button>\n )}\n </div>\n )\n}\n\n/**\n * KRDS StructuredListFooter Component\n * @param children 푸터 내용\n * @param className 사용자 정의 클래스명\n */\nexport function StructuredListFooter({ children, className }: StructuredListFooterProps) {\n return <div className={classNames('card-btm', className)}>{children}</div>\n}\n\n/**\n * KRDS StructuredListTag Component\n * @param children 태그 텍스트\n * @param className 사용자 정의 클래스명\n */\nexport function StructuredListTag({ children, className }: StructuredListTagProps) {\n return <span className={classNames('tag', className)}>{children}</span>\n}\n\n/**\n * KRDS StructuredListButtons Component\n * @param children 버튼 요소들\n * @param className 사용자 정의 클래스명\n */\nexport function StructuredListButtons({ children, className }: StructuredListButtonsProps) {\n return <div className={classNames('card-btn', className)}>{children}</div>\n}\n","import { classNames } from '@/utils'\nimport { forwardRef } from 'react'\nimport {\n TableCaptionProps,\n TableColgroupProps,\n TableColProps,\n TableProps,\n TableTbodyProps,\n TableTdProps,\n TableTFootProps,\n TableTheadProps,\n TableThProps,\n TableTrProps\n} from './Table.types'\n\n/**\n * KRDS Table Component\n * @param scroll enables horizontal scroll\n * @param mobScroll enables mobile scroll\n */\nconst TableRoot = forwardRef<HTMLTableElement, TableProps>(({ scroll, mobScroll, className, children, ...props }, ref) => {\n const wrapperClasses = classNames('krds-table-wrap', scroll && 'scroll', mobScroll && 'mob-scroll', className)\n\n return (\n <div className={wrapperClasses}>\n <table ref={ref} className=\"tbl col data\" {...props}>\n {children}\n </table>\n </div>\n )\n})\n\nTableRoot.displayName = 'Table'\n\n/**\n * KRDS Table Caption Component\n */\nconst TableCaption = forwardRef<HTMLElement, TableCaptionProps>(({ children, ...props }, ref) => {\n return (\n <caption ref={ref} {...props}>\n {children}\n </caption>\n )\n})\n\nTableCaption.displayName = 'Table.Caption'\n\n/**\n * KRDS Table Colgroup Component\n */\nconst TableColgroup = forwardRef<HTMLTableColElement, TableColgroupProps>(({ children, ...props }, ref) => {\n return (\n <colgroup ref={ref} {...props}>\n {children}\n </colgroup>\n )\n})\n\nTableColgroup.displayName = 'Table.Colgroup'\n\n/**\n * KRDS Table Col Component\n */\nconst TableCol = forwardRef<HTMLTableColElement, TableColProps>(({ width, ...props }, ref) => {\n return <col ref={ref} style={{ width }} {...props} />\n})\n\nTableCol.displayName = 'Table.Col'\n\n/**\n * KRDS Table Thead Component\n */\nconst TableThead = forwardRef<HTMLTableSectionElement, TableTheadProps>(({ children, className, ...props }, ref) => {\n return (\n <thead ref={ref} className={className} {...props}>\n {children}\n </thead>\n )\n})\n\nTableThead.displayName = 'Table.Thead'\n\n/**\n * KRDS Table Tbody Component\n */\nconst TableTbody = forwardRef<HTMLTableSectionElement, TableTbodyProps>(({ children, className, ...props }, ref) => {\n return (\n <tbody ref={ref} className={className} {...props}>\n {children}\n </tbody>\n )\n})\n\nTableTbody.displayName = 'Table.Tbody'\n\n/**\n * KRDS Table TFoot Component\n */\nconst TableTFoot = forwardRef<HTMLTableSectionElement, TableTFootProps>(({ children, ...props }, ref) => {\n return (\n <tfoot ref={ref} {...props}>\n {children}\n </tfoot>\n )\n})\n\nTableTFoot.displayName = 'Table.TFoot'\n\n/**\n * KRDS Table Tr Component\n */\nconst TableTr = forwardRef<HTMLTableRowElement, TableTrProps>(({ children, ...props }, ref) => {\n return (\n <tr ref={ref} {...props}>\n {children}\n </tr>\n )\n})\n\nTableTr.displayName = 'Table.Tr'\n\n/**\n * KRDS Table Th Component\n */\nconst TableTh = forwardRef<HTMLTableCellElement, TableThProps>(({ className, children, ...props }, ref) => {\n return (\n <th ref={ref} className={className} {...props}>\n {children}\n </th>\n )\n})\n\nTableTh.displayName = 'Table.Th'\n\n/**\n * KRDS Table Td Component\n */\nconst TableTd = forwardRef<HTMLTableCellElement, TableTdProps>(({ className, children, ...props }, ref) => {\n return (\n <td ref={ref} className={className} {...props}>\n {children}\n </td>\n )\n})\n\nTableTd.displayName = 'Table.Td'\n\nexport const Table = Object.assign(TableRoot, {\n Caption: TableCaption,\n Colgroup: TableColgroup,\n Col: TableCol,\n Thead: TableThead,\n Tbody: TableTbody,\n TFoot: TableTFoot,\n Tr: TableTr,\n Th: TableTh,\n Td: TableTd\n})\n","import React, { forwardRef, useCallback, useRef, createContext, useContext, useState } from 'react'\nimport { classNames } from '@/utils'\nimport { useUncontrolled } from '@/hooks/use-uncontrolled'\n\nimport { TabProps, TabListProps, TabTriggerProps, TabPanelProps, TabContextValue, TabContentProps } from './Tab.types'\n\nconst TabContext = createContext<TabContextValue | null>(null)\n\nconst useTabContext = () => {\n const context = useContext(TabContext)\n if (!context) {\n throw new Error('Tab compound components must be used within a Tab component')\n }\n return context\n}\n\n/**\n * KRDS Tab Root Component\n * @param value 활성 탭 값 (제어 모드)\n * @param defaultValue 기본 활성 탭 값 (비제어 모드)\n * @param onValueChange 탭 변경 콜백\n * @param variant 탭 변형 ('line' | 'fill')\n * @param size 탭 크기 ('normal' | 'full')\n * @param children 자식 컴포넌트\n * @param className 커스텀 클래스명\n */\nexport const Tab = forwardRef<HTMLDivElement, TabProps>(\n ({ value, defaultValue, onValueChange, variant = 'line', size = 'full', children, className, ...props }, ref) => {\n const triggerRefs = useRef<Map<string, HTMLButtonElement | null>>(new Map())\n const triggerOrder = useRef<string[]>([])\n\n const [_activeValue, setActiveValue] = useUncontrolled({\n value,\n defaultValue,\n onChange: onValueChange,\n finalValue: ''\n })\n\n const registerTrigger = useCallback((element: HTMLButtonElement | null, value: string) => {\n if (element) {\n if (!triggerRefs.current.has(value)) {\n triggerOrder.current.push(value)\n }\n triggerRefs.current.set(value, element)\n } else {\n triggerRefs.current.delete(value)\n triggerOrder.current = triggerOrder.current.filter(v => v !== value)\n }\n\n return triggerOrder.current.indexOf(value)\n }, [])\n\n const contextValue: TabContextValue = {\n activeValue: _activeValue,\n onValueChange: setActiveValue,\n variant,\n size,\n registerTrigger,\n triggerOrder,\n triggerRefs\n }\n\n return (\n <TabContext.Provider value={contextValue}>\n <div ref={ref} className={classNames('krds-tab-area', className)} {...props}>\n {children}\n </div>\n </TabContext.Provider>\n )\n }\n)\n\n/**\n * KRDS TabList Component\n * @param children 자식 컴포넌트 (TabTrigger들)\n * @param className 커스텀 클래스명\n */\nexport const TabList = forwardRef<HTMLUListElement, TabListProps>(({ children, className, ...props }, ref) => {\n const { variant, size } = useTabContext()\n\n const tabClasses = classNames('tab', variant, size === 'full' && 'full')\n\n return (\n <div className={tabClasses}>\n <ul ref={ref} role=\"tablist\" className={className} {...props}>\n {children}\n </ul>\n </div>\n )\n})\n\n/**\n * KRDS TabTrigger Component\n * @param value 탭 값\n * @param children 자식 컴포넌트\n * @param className 커스텀 클래스명\n */\nexport const TabTrigger = forwardRef<HTMLButtonElement, TabTriggerProps>(({ value, children, className, disabled, ...props }, ref) => {\n const { activeValue, onValueChange, registerTrigger, triggerOrder, triggerRefs } = useTabContext()\n\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const [triggerIndex, setTriggerIndex] = useState(-1)\n\n const isActive = activeValue === value\n\n const handleRef = useCallback(\n (element: HTMLButtonElement | null) => {\n buttonRef.current = element\n const index = registerTrigger(element, value)\n setTriggerIndex(index)\n\n if (typeof ref === 'function') {\n ref(element)\n } else if (ref) {\n ref.current = element\n }\n },\n [value, registerTrigger, ref]\n )\n\n const handleClick = useCallback(() => {\n if (disabled) return\n onValueChange?.(value)\n }, [value, onValueChange, disabled])\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (triggerIndex === -1) return\n\n const totalTriggers = triggerOrder.current?.length || 0\n let newIndex: number | null = null\n\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault()\n newIndex = triggerIndex + 1 >= totalTriggers ? 0 : triggerIndex + 1\n break\n case 'ArrowLeft':\n event.preventDefault()\n newIndex = triggerIndex - 1 < 0 ? totalTriggers - 1 : triggerIndex - 1\n break\n case 'Home':\n event.preventDefault()\n newIndex = 0\n break\n case 'End':\n event.preventDefault()\n newIndex = totalTriggers - 1\n break\n }\n\n if (newIndex !== null && newIndex !== triggerIndex) {\n const targetValue = triggerOrder.current?.[newIndex] || ''\n const targetElement = triggerRefs.current?.get(targetValue)\n targetElement?.focus()\n }\n },\n [triggerIndex, triggerOrder, triggerRefs]\n )\n\n const tabId = `tab_${value}`\n const panelId = `panel_${value}`\n\n return (\n <li role=\"presentation\" className={classNames('tab-item', isActive && 'active')}>\n <button\n role=\"tab\"\n id={tabId}\n ref={handleRef}\n aria-selected={isActive}\n aria-controls={panelId}\n type=\"button\"\n className={classNames('btn-tab', className)}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n {...props}\n >\n {children}\n {isActive && <i className=\"sr-only\">선택됨</i>}\n </button>\n </li>\n )\n})\n\nexport const TabContent = forwardRef<HTMLDivElement, TabContentProps>(({ children, className, ...props }, ref) => {\n return (\n <div ref={ref} className={classNames('tab-conts-wrap', className)} {...props}>\n {children}\n </div>\n )\n})\n\n/**\n * KRDS TabPanel Component\n * @param value 탭 값\n * @param children 자식 컴포넌트\n * @param className 커스텀 클래스명\n */\nexport const TabPanel = forwardRef<HTMLElement, TabPanelProps>(({ value, children, className, ...props }, ref) => {\n const { activeValue } = useTabContext()\n const isActive = activeValue === value\n\n const tabId = `tab_${value}`\n const panelId = `panel_${value}`\n\n const panelClassName = classNames('tab-conts', isActive && 'active', className)\n\n return (\n <section ref={ref} id={panelId} role=\"tabpanel\" aria-labelledby={tabId} className={panelClassName} {...props}>\n {children}\n </section>\n )\n})\n\nTab.displayName = 'Tab'\nTabList.displayName = 'TabList'\nTabTrigger.displayName = 'TabTrigger'\nTabPanel.displayName = 'TabPanel'\n","import { classNames } from '@/utils'\nimport React, { forwardRef } from 'react'\nimport { TagProps, TagWrapProps } from './Tag.types'\n\n/**\n * KRDS Tag Component\n * @param variant tag type ('deletable' | 'link')\n * @param onDelete delete button click handler\n * @param deleteDisabled delete button disabled state\n * @param className custom class name\n */\nexport const Tag = forwardRef<HTMLSpanElement | HTMLAnchorElement, TagProps>(({ children, className, ...props }, ref) => {\n const tagClassName = classNames('krds-btn-tag', props.variant === 'link' && 'link', className)\n\n if (props.variant === 'link') {\n const { variant: _variant, ...linkProps } = props\n return (\n <a ref={ref as React.Ref<HTMLAnchorElement>} className={tagClassName} {...linkProps}>\n {children}\n </a>\n )\n }\n\n const { variant: _variant, onDelete, deleteDisabled, ...spanProps } = props\n\n return (\n <span ref={ref as React.Ref<HTMLSpanElement>} className={tagClassName} {...spanProps}>\n {children}\n {onDelete && (\n <button type=\"button\" className=\"btn-delete\" onClick={onDelete} disabled={deleteDisabled}>\n <span className=\"sr-only\">삭제</span>\n </button>\n )}\n </span>\n )\n})\n\nTag.displayName = 'Tag'\n\n/**\n * KRDS TagWrap Component\n * @param size tag group size ('small' | 'medium' | 'large')\n * @param className custom class name\n */\nexport const TagWrap = forwardRef<HTMLDivElement, TagWrapProps>(({ children, size = 'medium', className, ...props }, ref) => {\n const wrapClassName = classNames('krds-tag-wrap', size, className)\n\n return (\n <div ref={ref} className={wrapClassName} {...props}>\n {children}\n </div>\n )\n})\n\nTagWrap.displayName = 'TagWrap'\n","import { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { classNames } from '@/utils'\nimport React, { forwardRef, useId, useMemo } from 'react'\nimport { TextareaProps } from './Textarea.types'\n\n/**\n * KRDS Textarea Component\n * @param value 제어 상태일 때 입력된 값\n * @param defaultValue 비제어 상태일 때의 초기 값\n * @param onChange 입력 값이 변경될 때 호출되는 콜백\n * @param label 레이블\n * @param countTotal 글자수 총합 표시값\n * @param maxLength 최대 글자수\n * @param showCount 글자수 카운터 표시 여부\n * @param disabled disabled 상태\n * @param readOnly readOnly 상태\n * @param className custom class name\n */\nconst Textarea: React.FC<TextareaProps> = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n label,\n maxLength,\n showCount = true,\n countTotal = 100,\n disabled = false,\n readOnly = false,\n className = '',\n id,\n ...props\n },\n ref\n ) => {\n const generatedId = useId()\n const textareaId = id || generatedId\n\n const [_value, setValue] = useUncontrolled<string>({\n value,\n defaultValue,\n onChange\n })\n\n const currentLength = useMemo(() => {\n return _value ? _value.length : 0\n }, [_value])\n\n const shouldShowCount = showCount || Boolean(maxLength)\n\n const textareaClasses = classNames('krds-input', className)\n\n const containerClasses = classNames('form-group')\n\n return (\n <div className={containerClasses}>\n {label && (\n <div className=\"form-tit\">\n <label htmlFor={textareaId}>{label}</label>\n </div>\n )}\n\n <div className=\"form-conts\">\n <div className=\"textarea-wrap\">\n <textarea\n ref={ref}\n id={textareaId}\n className={textareaClasses}\n value={_value}\n onChange={e => setValue(e.target.value)}\n disabled={disabled}\n readOnly={readOnly}\n maxLength={maxLength}\n {...props}\n />\n\n {shouldShowCount && (\n <p className=\"textarea-count\">\n <span className=\"count-now\">{currentLength}</span>\n <span className=\"count-total\">/{maxLength ?? countTotal}</span>\n </p>\n )}\n </div>\n </div>\n </div>\n )\n }\n)\n\nTextarea.displayName = 'Textarea'\n\nexport default Textarea\n","import { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { classNames } from '@/utils'\nimport { forwardRef, useId, useState, useEffect } from 'react'\nimport { TextInputProps } from './TextInput.types'\nimport Button from '../Button'\n\n/**\n * KRDS TextInput Component\n * @param value 제어 상태일 때 입력된 값\n * @param defaultValue 비제어 상태일 때의 초기 값\n * @param onChange 입력 값이 변경될 때 호출되는 콜백\n * @param label 레이블\n * @param hint 도움말 텍스트\n * @param error 에러 메시지\n * @param success 성공 메시지\n * @param information 정보 메시지\n * @param size 입력 필드 크기 ('small' | 'medium' | 'large' | 'xlarge')\n * @param showPasswordToggle 비밀번호 보기/숨기기 버튼 표시 여부\n * @param showClearButton 삭제 버튼 표시 여부\n * @param type 입력 필드 타입\n * @param disabled disabled 상태\n * @param readOnly readOnly 상태\n * @param className custom class name\n */\nconst TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n label,\n hint,\n error,\n success,\n information,\n size = 'large',\n showPasswordToggle = false,\n showClearButton = false,\n type = 'text',\n disabled = false,\n readOnly = false,\n className = '',\n id,\n ...props\n },\n ref\n ) => {\n const generatedId = useId()\n const inputId = id || generatedId\n\n const [_value, setValue] = useUncontrolled<string>({\n value,\n defaultValue,\n onChange,\n finalValue: ''\n })\n\n const [showPassword, setShowPassword] = useState(false)\n const [internalType, setInternalType] = useState(type)\n\n useEffect(() => {\n if (type === 'password') {\n setInternalType(showPassword ? 'text' : 'password')\n } else {\n setInternalType(type)\n }\n }, [type, showPassword])\n\n const isError = Boolean(error)\n const isSuccess = Boolean(success) && !isError\n const isInformation = Boolean(information) && !isError && !isSuccess\n\n const shouldShowPasswordToggle = showPasswordToggle && type === 'password'\n const shouldShowClearButton = showClearButton && _value && !disabled && !readOnly\n const hasButtons = shouldShowPasswordToggle || shouldShowClearButton\n\n const containerClasses = classNames(\n 'form-group',\n isError && 'is-error',\n isSuccess && 'is-success',\n isInformation && 'is-information',\n className\n )\n\n const inputWrapperClasses = classNames('form-conts', hasButtons && 'btn-ico-wrap')\n\n const handleClear = () => {\n setValue('')\n }\n\n const handlePasswordToggle = () => {\n setShowPassword(prev => !prev)\n }\n\n const renderHintMessage = () => {\n if (isError) {\n return <p className=\"form-hint-invalid\">{error}</p>\n }\n if (isSuccess) {\n return <p className=\"form-hint-success\">{success}</p>\n }\n if (isInformation) {\n return <p className=\"form-hint-information\">{information}</p>\n }\n if (hint) {\n return <p className=\"form-hint\">{hint}</p>\n }\n return null\n }\n\n return (\n <div className={containerClasses}>\n {label && (\n <div className=\"form-tit\">\n <label htmlFor={inputId}>{label}</label>\n </div>\n )}\n\n <div className={inputWrapperClasses} {...(shouldShowClearButton && { 'data-delete': 'true' })}>\n <input\n ref={ref}\n id={inputId}\n type={internalType}\n className={classNames('krds-input', size)}\n value={_value}\n onChange={e => setValue(e.target.value)}\n disabled={disabled}\n readOnly={readOnly}\n {...props}\n />\n\n {hasButtons && (\n <div className=\"btn-group\">\n {shouldShowClearButton && (\n <Button variant=\"icon\" size=\"medium\" className=\"pure btn-delete-input\" onClick={handleClear}>\n <span className=\"sr-only\">내용 삭제</span>\n <i className=\"svg-icon ico-delete-fill\" />\n </Button>\n )}\n\n {shouldShowPasswordToggle && (\n <Button variant=\"icon\" size=\"medium\" onClick={handlePasswordToggle}>\n <span className=\"sr-only\">{showPassword ? '입력한 비밀번호 가리기' : '입력한 비밀번호 보기'}</span>\n <i\n className={classNames(\n 'svg-icon ico-pw-visible',\n showPassword && 'ico-pw-visible-on',\n !showPassword && 'ico-pw-visible'\n )}\n />\n </Button>\n )}\n </div>\n )}\n </div>\n\n {renderHintMessage()}\n </div>\n )\n }\n)\n\nTextInput.displayName = 'TextInput'\n\nexport default TextInput\n","import { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { classNames } from '@/utils'\nimport React, { forwardRef, useId, useState } from 'react'\nimport { ToggleSwitchProps } from './ToggleSwitch.types'\n\n/**\n * KRDS ToggleSwitch Component\n * @param size 토글 스위치 크기 ('medium' | 'large')\n * @param label 토글 스위치 라벨 텍스트\n * @param checked 체크 상태 (제어된 컴포넌트)\n * @param defaultChecked 기본 체크 상태 (비제어 컴포넌트)\n * @param onChange 값 변경 핸들러\n * @param className 추가 CSS 클래스명\n */\nexport const ToggleSwitch = forwardRef<HTMLInputElement, ToggleSwitchProps>(\n ({ size = 'large', label, checked, defaultChecked = false, onChange, className, id: providedId, disabled, ...rest }, ref) => {\n const autoId = useId()\n const id = providedId || autoId\n\n const [isFocused, setIsFocused] = useState(false)\n\n const [internalChecked, handleCheckedChange] = useUncontrolled({\n value: checked,\n defaultValue: defaultChecked,\n finalValue: false,\n onChange: (value, event) => {\n if (!disabled) {\n onChange?.(value, event as React.ChangeEvent<HTMLInputElement>)\n }\n }\n })\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) {\n return\n }\n handleCheckedChange(event.target.checked, event)\n }\n\n const handleFocus = () => {\n setIsFocused(true)\n }\n\n const handleBlur = () => {\n setIsFocused(false)\n }\n\n const containerClasses = classNames(\n 'krds-form-toggle-switch',\n size === 'medium' && 'medium',\n size === 'large' && 'large',\n isFocused && 'focus',\n className\n )\n\n return (\n <div className={containerClasses}>\n <input\n ref={ref}\n type=\"checkbox\"\n id={id}\n checked={internalChecked}\n disabled={disabled}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...rest}\n />\n <label htmlFor={id}>\n <span className=\"switch-toggle\">\n <i></i>\n </span>\n {label}\n </label>\n </div>\n )\n }\n)\n\nToggleSwitch.displayName = 'ToggleSwitch'\n","import React, { useRef, useState, useEffect, forwardRef, cloneElement, isValidElement, useId } from 'react'\nimport { classNames } from '@/utils'\nimport { TooltipProps } from './Tooltip.types'\n\n/**\n * KRDS Tooltip Component\n * @param text 툴팁에 표시될 텍스트\n * @param variant 툴팁 방향 ('vertical' | 'horizontal' | 'box')\n * @param className 추가 클래스명\n */\nconst Tooltip = forwardRef<HTMLElement, TooltipProps>(({ children, text, variant = 'vertical', className }, ref) => {\n const [isOpen, setIsOpen] = useState(false)\n const [position, setPosition] = useState({\n top: 0,\n left: 0,\n isTop: false,\n isBottom: false,\n isLeft: false,\n isRight: false,\n isMobileSmall: false\n })\n const triggerRef = useRef<HTMLElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const contentId = `tooltip-popover-${useId()}`\n\n const calculatePosition = React.useCallback(() => {\n if (!triggerRef.current || !contentRef.current) return\n\n const tooltipGap = 12\n const { clientHeight: tooltipHeight, clientWidth: tooltipWidth } = contentRef.current\n const {\n top: itemTop,\n left: itemLeft,\n right: itemRight,\n height: itemHeight,\n width: itemWidth\n } = triggerRef.current.getBoundingClientRect()\n const halfWindowWidth = window.innerWidth / 2\n const halfWindowHeight = window.innerHeight / 2\n\n let tooltipTop: number\n let tooltipLeft: number\n let isTop = false\n let isBottom = false\n let isLeft = false\n let isRight = false\n\n const isMobile = window.innerWidth <= 768\n const isVertical = isMobile || variant === 'box' || variant === 'vertical'\n\n if (isVertical) {\n if (itemTop + itemHeight > halfWindowHeight) {\n tooltipTop = itemTop - tooltipHeight - tooltipGap\n isTop = true\n } else {\n tooltipTop = itemTop + itemHeight + tooltipGap\n isBottom = true\n }\n if (itemLeft + itemWidth > halfWindowWidth) {\n tooltipLeft = itemRight - tooltipWidth\n isRight = true\n if (window.innerWidth - (itemLeft + itemWidth) > tooltipWidth / 2) {\n tooltipLeft = itemLeft + (itemWidth - tooltipWidth) / 2\n isRight = false\n }\n } else {\n tooltipLeft = itemLeft + (itemWidth - tooltipWidth) / 2\n if (tooltipLeft < 0) {\n tooltipLeft = itemLeft\n isLeft = true\n }\n }\n } else {\n tooltipTop = itemTop + (itemHeight - tooltipHeight) / 2\n if (itemLeft + itemWidth > halfWindowWidth) {\n tooltipLeft = itemLeft - tooltipWidth - tooltipGap\n isRight = true\n } else {\n tooltipLeft = itemRight + tooltipGap\n }\n }\n\n const mobileSmall = window.innerWidth <= 420\n if (mobileSmall) {\n tooltipLeft = window.innerWidth / 2\n }\n\n setPosition({\n top: tooltipTop,\n left: tooltipLeft,\n isTop,\n isBottom,\n isLeft,\n isRight,\n isMobileSmall: mobileSmall\n })\n }, [variant])\n\n const showTooltip = () => {\n setIsOpen(true)\n }\n\n const hideTooltip = () => {\n setIsOpen(false)\n setPosition({\n top: 0,\n left: 0,\n isTop: false,\n isBottom: false,\n isLeft: false,\n isRight: false,\n isMobileSmall: false\n })\n }\n\n useEffect(() => {\n if (isOpen) {\n calculatePosition()\n }\n }, [isOpen, calculatePosition])\n\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' || event.key === 'Esc') {\n hideTooltip()\n }\n }\n\n const handleScroll = () => {\n hideTooltip()\n }\n\n const handleResize = () => {\n hideTooltip()\n }\n\n document.addEventListener('keydown', handleEscape)\n window.addEventListener('scroll', handleScroll)\n window.addEventListener('resize', handleResize)\n\n return () => {\n document.removeEventListener('keydown', handleEscape)\n window.removeEventListener('scroll', handleScroll)\n window.removeEventListener('resize', handleResize)\n }\n }, [])\n\n const handleMouseEnter = (event: React.MouseEvent<HTMLElement>) => {\n showTooltip()\n if (isValidElement(children)) {\n const childElement = children as React.ReactElement<{\n onMouseEnter?: (event: React.MouseEvent<HTMLElement>) => void\n }>\n if (childElement.props.onMouseEnter) {\n childElement.props.onMouseEnter(event)\n }\n }\n }\n\n const handleMouseLeave = (event: React.MouseEvent<HTMLElement>) => {\n hideTooltip()\n if (isValidElement(children)) {\n const childElement = children as React.ReactElement<{\n onMouseLeave?: (event: React.MouseEvent<HTMLElement>) => void\n }>\n if (childElement.props.onMouseLeave) {\n childElement.props.onMouseLeave(event)\n }\n }\n }\n\n const handleFocus = (event: React.FocusEvent<HTMLElement>) => {\n showTooltip()\n if (isValidElement(children)) {\n const childElement = children as React.ReactElement<{\n onFocus?: (event: React.FocusEvent<HTMLElement>) => void\n }>\n if (childElement.props.onFocus) {\n childElement.props.onFocus(event)\n }\n }\n }\n\n const handleBlur = (event: React.FocusEvent<HTMLElement>) => {\n hideTooltip()\n if (isValidElement(children)) {\n const childElement = children as React.ReactElement<{\n onBlur?: (event: React.FocusEvent<HTMLElement>) => void\n }>\n if (childElement.props.onBlur) {\n childElement.props.onBlur(event)\n }\n }\n }\n\n const mergedRef = (node: HTMLElement | null) => {\n if (triggerRef) {\n ;(triggerRef as React.MutableRefObject<HTMLElement | null>).current = node\n }\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n }\n\n if (isValidElement(children)) {\n const childElement = children as React.ReactElement<{\n className?: string\n onMouseEnter?: (event: React.MouseEvent<HTMLElement>) => void\n onMouseLeave?: (event: React.MouseEvent<HTMLElement>) => void\n onFocus?: (event: React.FocusEvent<HTMLElement>) => void\n onBlur?: (event: React.FocusEvent<HTMLElement>) => void\n }>\n\n return (\n <>\n {cloneElement(childElement, {\n // @ts-expect-error - valid ref\n ref: mergedRef,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onFocus: handleFocus,\n onBlur: handleBlur,\n className: classNames('krds-tooltip', className, childElement.props.className),\n 'data-tooltip': text,\n 'aria-describedby': contentId\n })}\n <div\n ref={contentRef}\n id={contentId}\n className={classNames(\n 'krds-tooltip-popover',\n variant === 'box' && 'tooltip-box',\n variant === 'vertical' && 'tooltip-vertical',\n isOpen && 'active',\n position.isTop && 'top',\n position.isBottom && 'bottom',\n position.isLeft && 'left',\n position.isRight && 'right'\n )}\n style={{\n ...(isOpen && {\n top: `${position.top}px`,\n left: position.isMobileSmall ? '50%' : `${position.left}px`,\n transform: position.isMobileSmall ? 'translateX(-50%)' : undefined\n })\n }}\n role=\"tooltip\"\n aria-hidden={!isOpen}\n >\n {text}\n </div>\n </>\n )\n }\n\n return (\n <>\n <button\n ref={mergedRef}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onFocus={handleFocus}\n onBlur={handleBlur}\n className={classNames('krds-tooltip', className)}\n data-tooltip={text}\n aria-describedby={contentId}\n type=\"button\"\n >\n {children}\n </button>\n <div\n ref={contentRef}\n id={contentId}\n className={classNames(\n 'krds-tooltip-popover',\n variant === 'box' && 'tooltip-box',\n variant === 'vertical' && 'tooltip-vertical',\n isOpen && 'active',\n position.isTop && 'top',\n position.isBottom && 'bottom',\n position.isLeft && 'left',\n position.isRight && 'right'\n )}\n style={{\n ...(isOpen && {\n top: `${position.top}px`,\n left: position.isMobileSmall ? '50%' : `${position.left}px`,\n transform: position.isMobileSmall ? 'translateX(-50%)' : undefined\n })\n }}\n role=\"tooltip\"\n aria-hidden={!isOpen}\n >\n {text}\n </div>\n </>\n )\n})\n\nTooltip.displayName = 'Tooltip'\n\nexport default Tooltip\n","import { useUncontrolled } from '@/hooks/use-uncontrolled'\nimport { classNames } from '@/utils'\nimport { createContext, forwardRef, HTMLAttributes, useCallback, useContext, useEffect, useRef } from 'react'\nimport Button from '../Button/Button'\nimport { Disclosure } from '../Disclosure'\nimport { Tab, TabContent, TabList, TabPanel, TabTrigger } from '../Tab'\nimport {\n TutorialPanelCloseProps,\n TutorialPanelContainerProps,\n TutorialPanelContextValue,\n TutorialPanelHelpContentProps,\n TutorialPanelRootProps,\n TutorialPanelTabContentProps,\n TutorialPanelTriggerProps,\n TutorialPanelTutorialContentProps\n} from './TutorialPanel.types'\n\nconst TutorialPanelContext = createContext<TutorialPanelContextValue | null>(null)\n\nconst useTutorialPanelContext = () => {\n const context = useContext(TutorialPanelContext)\n if (!context) {\n throw new Error('TutorialPanel 컴포넌트들은 TutorialPanel.Root 내부에서 사용해야 합니다.')\n }\n return context\n}\n\n/**\n * KRDS TutorialPanel Root Component\n * @param isOpen 패널 열림/닫힘 상태\n * @param onOpenChange 패널 열림/닫힘 핸들러\n * @param activeTab 활성 탭 ('help' | 'tutorial') (controlled에서만 사용)\n * @param defaultActiveTab 활성 탭 ('help' | 'tutorial') (uncontrolled에서 사용)\n * @param onTabChange 탭 변경 핸들러\n */\nconst TutorialPanelRoot = forwardRef<HTMLDivElement, TutorialPanelRootProps>(\n ({ isOpen, onOpenChange, activeTab, defaultActiveTab, onTabChange, children, className, ...props }, ref) => {\n const [internalIsOpen, setInternalIsOpen] = useUncontrolled({\n value: isOpen,\n defaultValue: false,\n onChange: onOpenChange,\n finalValue: false\n })\n\n const [internalActiveTab, setInternalActiveTab] = useUncontrolled({\n value: activeTab,\n defaultValue: defaultActiveTab,\n onChange: onTabChange,\n finalValue: 'help' as 'help' | 'tutorial'\n })\n\n const helpWrapRef = useRef<HTMLDivElement>(null)\n const expandButtonRef = useRef<HTMLButtonElement>(null)\n const collapseButtonRef = useRef<HTMLButtonElement>(null)\n const lastFocusedButtonRef = useRef<HTMLElement | null>(null)\n const intersectionObserverRef = useRef<IntersectionObserver | null>(null)\n\n const getWindowSize = useCallback(() => {\n return window.innerWidth <= 1023 ? 'mob' : 'pc'\n }, [])\n\n const setupPadding = useCallback(() => {\n const topBannerHeight = document.querySelector('#krds-masthead')?.clientHeight || 0\n const headerHeight = document.querySelector('#krds-header .header-in')?.clientHeight || 0\n const defaultPadding = topBannerHeight + headerHeight\n const hiddenBannerPadding = headerHeight\n\n const expandButton = expandButtonRef.current\n const expandBox = helpWrapRef.current\n const collapseButton = collapseButtonRef.current\n\n if (!expandButton || !expandBox || !collapseButton) return\n\n const applyPadding = (padding: string) => {\n expandButton.style.marginTop = padding\n if (getWindowSize() === 'pc') {\n expandBox.style.paddingTop = padding\n collapseButton.style.marginTop = padding\n } else {\n expandBox.removeAttribute('style')\n collapseButton.removeAttribute('style')\n }\n }\n\n if (document.body.classList.contains('bn-hidden')) {\n if (document.querySelector('#wrap')?.classList.contains('scroll-down')) {\n applyPadding('0')\n } else {\n applyPadding(`${hiddenBannerPadding}px`)\n }\n } else {\n applyPadding(`${defaultPadding}px`)\n }\n }, [getWindowSize])\n\n const observeMastHead = useCallback(() => {\n const topBanner = document.querySelector('#krds-masthead')\n if (!topBanner) return\n\n const body = document.body\n intersectionObserverRef.current = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n body.classList.toggle('bn-hidden', !entry.isIntersecting)\n setupPadding()\n })\n },\n { root: null, threshold: 0 }\n )\n intersectionObserverRef.current.observe(topBanner)\n }, [setupPadding])\n\n const handleToggle = useCallback(\n (newIsOpen: boolean) => {\n const helpWrap = helpWrapRef.current\n const innerContainer = document.querySelector('#container > .inner')\n\n if (newIsOpen) {\n if (getWindowSize() === 'mob') {\n document.body.classList.add('scroll-no')\n }\n\n if (helpWrap) {\n helpWrap.setAttribute('tabindex', '0')\n setTimeout(() => {\n helpWrap.focus()\n }, 50)\n }\n\n const expandButtons = document.querySelectorAll('.btn-help-exec')\n expandButtons.forEach(btn => {\n btn.setAttribute('aria-expanded', 'true')\n })\n\n if (innerContainer?.classList.contains('help-panel-flexible')) {\n innerContainer.classList.add('help-panel-expanded')\n }\n } else {\n if (getWindowSize() === 'mob') {\n document.body.classList.remove('scroll-no')\n }\n\n if (helpWrap) {\n helpWrap.removeAttribute('tabindex')\n }\n\n if (lastFocusedButtonRef.current) {\n lastFocusedButtonRef.current.focus()\n } else {\n expandButtonRef.current?.focus()\n }\n\n const expandButtons = document.querySelectorAll('.btn-help-exec')\n expandButtons.forEach(btn => {\n btn.setAttribute('aria-expanded', 'false')\n })\n\n if (innerContainer?.classList.contains('help-panel-flexible')) {\n innerContainer.classList.remove('help-panel-expanded')\n }\n }\n\n setInternalIsOpen(newIsOpen)\n },\n [getWindowSize, setInternalIsOpen]\n )\n\n const contextValue: TutorialPanelContextValue = {\n isOpen: internalIsOpen,\n onOpenChange: handleToggle,\n activeTab: internalActiveTab,\n onTabChange: setInternalActiveTab\n }\n\n useEffect(() => {\n setupPadding()\n observeMastHead()\n\n const handleResize = () => {\n setupPadding()\n if (getWindowSize() === 'mob' && internalIsOpen) {\n document.body.classList.add('scroll-no')\n } else {\n document.body.classList.remove('scroll-no')\n }\n }\n\n window.addEventListener('resize', handleResize)\n\n if (expandButtonRef.current) {\n expandButtonRef.current.setAttribute('aria-expanded', internalIsOpen ? 'true' : 'false')\n }\n\n return () => {\n window.removeEventListener('resize', handleResize)\n if (intersectionObserverRef.current) {\n intersectionObserverRef.current.disconnect()\n }\n document.body.classList.remove('scroll-no')\n }\n }, [setupPadding, observeMastHead, internalIsOpen, getWindowSize])\n\n return (\n <TutorialPanelContext.Provider value={contextValue}>\n <div id=\"container\" ref={ref} className={classNames('inner help-panel-flexible', className)} {...props}>\n {children}\n </div>\n </TutorialPanelContext.Provider>\n )\n }\n)\n\n/**\n * KRDS TutorialPanel Trigger Component\n * @param children 버튼 내용\n */\nconst TutorialPanelTrigger = forwardRef<HTMLButtonElement, TutorialPanelTriggerProps>(\n ({ children = '도움말', className, onClick, ...props }, ref) => {\n const { isOpen, onOpenChange } = useTutorialPanelContext()\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onOpenChange(!isOpen)\n onClick?.(event)\n }\n\n const renderIcon = (iconName: string) => {\n return <i className={`svg-icon ${iconName}`}></i>\n }\n\n return (\n <Button\n ref={ref}\n size=\"small\"\n variant=\"tertiary\"\n className={classNames('btn-help-panel expand btn-help-exec', className)}\n onClick={handleClick}\n aria-expanded={isOpen}\n aria-label={typeof children === 'string' ? children : '도움말'}\n {...props}\n >\n {renderIcon('ico-fold')} {children}\n </Button>\n )\n }\n)\n\n/**\n * KRDS TutorialPanel Container Component\n */\nconst TutorialPanelContainer = forwardRef<HTMLDivElement, TutorialPanelContainerProps>(({ children, className, ...props }, ref) => {\n const { isOpen } = useTutorialPanelContext()\n\n return (\n <div ref={ref} className={classNames('krds-help-panel', isOpen && 'expand', className)} {...props}>\n <div className=\"help-panel-wrap\">\n <div className=\"help-conts-area\">{children}</div>\n </div>\n </div>\n )\n})\n\n/**\n * KRDS TutorialPanel Tabs Component\n * 탭 네비게이션과 컨텐츠를 관리합니다\n */\nconst TutorialPanelTabs = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ children, className, id, role }, ref) => {\n const { activeTab, onTabChange } = useTutorialPanelContext()\n\n return (\n <Tab\n ref={ref}\n value={activeTab}\n onValueChange={value => onTabChange(value as 'help' | 'tutorial')}\n variant=\"line\"\n size=\"normal\"\n className={classNames('layer', className)}\n id={id}\n role={role}\n >\n <TabList>\n <TabTrigger value=\"help\">도움</TabTrigger>\n <TabTrigger value=\"tutorial\">따라하기</TabTrigger>\n </TabList>\n\n <TabContent>{children}</TabContent>\n </Tab>\n )\n})\n\n/**\n * KRDS TutorialPanel TabPanel Component\n * @param value 탭 값 ('help' | 'tutorial')\n * @param children 탭 내용\n */\nconst TutorialPanelTabPanel = forwardRef<HTMLElement, TutorialPanelTabContentProps>(({ value, children, className, ...props }, ref) => {\n return (\n <TabPanel ref={ref} value={value} className={className} {...props}>\n <h3 className=\"sr-only\">{value === 'help' ? '도움' : '따라하기'}</h3>\n {children}\n </TabPanel>\n )\n})\n\n/**\n * KRDS TutorialPanel Help Content Component\n * @param helpContent 도움말 내용\n * @param relatedServices 관련 서비스 내용\n */\nconst TutorialPanelHelpContent = forwardRef<HTMLDivElement, TutorialPanelHelpContentProps>(\n ({ helpContent, relatedServices = [], className, ...props }, ref) => {\n const renderIcon = (iconName: string) => {\n return <i className={`svg-icon ${iconName}`}></i>\n }\n\n return (\n <div ref={ref} className={classNames('help-conts-area-inner', className)} {...props}>\n {helpContent && (\n <div className=\"conts-area help-conts\">\n <div className=\"conts-wrap\">\n <h4 className=\"help-title\">\n {helpContent.title}\n <span className=\"krds-btn medium icon\">\n <span className=\"sr-only\">도움말</span>\n {renderIcon('ico-help')}\n </span>\n </h4>\n {helpContent.description && <div className=\"conts-desc\">{helpContent.description}</div>}\n {helpContent.links && helpContent.links.length > 0 && (\n <ul className=\"link-list\">\n {helpContent.links.map((link, index) => (\n <li key={index}>\n <Button\n as=\"a\"\n href={link.href}\n target={link.external ? '_blank' : undefined}\n title={link.external ? '새 창 열림' : undefined}\n size=\"xsmall\"\n variant=\"link\"\n className=\"basic\"\n >\n {link.icon && link.iconPosition === 'left' && renderIcon(link.icon)}\n {link.label}\n {link.icon && link.iconPosition !== 'left' && renderIcon(link.icon)}\n {!link.icon && (link.external ? renderIcon('ico-go') : renderIcon('ico-angle right'))}\n </Button>\n </li>\n ))}\n </ul>\n )}\n </div>\n </div>\n )}\n\n {relatedServices.length > 0 && (\n <div className=\"conts-area related-service\">\n {relatedServices.map((service, serviceIndex) => (\n <div key={serviceIndex} className=\"conts-wrap\">\n <h4 className=\"help-title\">{service.title}</h4>\n {service.description && <div className=\"conts-desc\">{service.description}</div>}\n {service.links && service.links.length > 0 && (\n <ul className=\"link-list\">\n {service.links.map((link, linkIndex) => (\n <li key={linkIndex}>\n <Button\n as=\"a\"\n href={link.href}\n target={link.external ? '_blank' : undefined}\n title={link.external ? '새 창 열림' : undefined}\n size=\"xsmall\"\n variant=\"link\"\n className=\"basic\"\n >\n {link.icon && link.iconPosition === 'left' && renderIcon(link.icon)}\n {link.label}\n {link.icon && link.iconPosition !== 'left' && renderIcon(link.icon)}\n {!link.icon && (link.external ? renderIcon('ico-go') : renderIcon('ico-angle right'))}\n </Button>\n </li>\n ))}\n </ul>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n )\n }\n)\n\n/**\n * KRDS TutorialPanel Tutorial Content Component\n * @param title 튜토리얼 제목\n * @param steps 튜토리얼 단계들\n * @param onTutorialStop 튜토리얼 종료 핸들러\n * @param stopButtonText 종료 버튼 텍스트\n */\nconst TutorialPanelTutorialContent = forwardRef<HTMLDivElement, TutorialPanelTutorialContentProps>(\n ({ title, steps = [], onTutorialStop, stopButtonText = '그만 따라하기', className, ...props }, ref) => {\n return (\n <div ref={ref} className={classNames('help-conts-area-inner', className)} {...props}>\n <div className=\"conts-area\">\n {title && (\n <h4 className=\"help-title\">\n <a href=\"#\" title=\"이전으로 돌아가기\">\n {title}\n </a>\n </h4>\n )}\n {steps.length > 0 && (\n <ul className=\"coach-help-process\">\n {steps.map((step, index) => (\n <li key={index}>\n <h4 className={classNames('tit', step.current && 'current')}>{step.title}</h4>\n {step.steps && step.steps.length > 0 && (\n <Disclosure buttonText={`전체 ${step.steps.length}단계`} className=\"conts-expand-area\">\n <ul className=\"krds-info-list decimal\">\n {step.steps.map((stepItem, stepIndex) => (\n <li key={stepIndex}>{stepItem}</li>\n ))}\n </ul>\n </Disclosure>\n )}\n {step.content && <div className=\"step-content\">{step.content}</div>}\n </li>\n ))}\n </ul>\n )}\n </div>\n\n <div className=\"help-panel-action\">\n <Button size=\"medium\" variant=\"secondary\" className=\"coach-btn-stop\" onClick={onTutorialStop}>\n {stopButtonText}\n </Button>\n </div>\n </div>\n )\n }\n)\n\n/**\n * KRDS TutorialPanel Close Component\n * @param children 버튼 내용\n */\nconst TutorialPanelClose = forwardRef<HTMLButtonElement, TutorialPanelCloseProps>(({ children, className, onClick, ...props }, ref) => {\n const { onOpenChange } = useTutorialPanelContext()\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onOpenChange(false)\n onClick?.(event)\n }\n\n const renderIcon = (iconName: string) => {\n return <i className={`svg-icon ${iconName}`}></i>\n }\n\n return (\n <Button\n ref={ref}\n size=\"small\"\n variant=\"tertiary\"\n className={classNames('btn-help-panel fold', className)}\n onClick={handleClick}\n {...props}\n >\n {children || (\n <>\n <span className=\"sr-only\">도움말</span> 접어두기 {renderIcon('ico-fold right')}\n </>\n )}\n </Button>\n )\n})\n\nTutorialPanelRoot.displayName = 'TutorialPanel.Root'\nTutorialPanelTrigger.displayName = 'TutorialPanel.Trigger'\nTutorialPanelContainer.displayName = 'TutorialPanel.Container'\nTutorialPanelTabs.displayName = 'TutorialPanel.Tabs'\nTutorialPanelTabPanel.displayName = 'TutorialPanel.TabPanel'\nTutorialPanelHelpContent.displayName = 'TutorialPanel.HelpContent'\nTutorialPanelTutorialContent.displayName = 'TutorialPanel.TutorialContent'\nTutorialPanelClose.displayName = 'TutorialPanel.Close'\n\nexport const TutorialPanel = Object.assign(TutorialPanelRoot, {\n Root: TutorialPanelRoot,\n Trigger: TutorialPanelTrigger,\n Container: TutorialPanelContainer,\n Tabs: TutorialPanelTabs,\n TabPanel: TutorialPanelTabPanel,\n HelpContent: TutorialPanelHelpContent,\n TutorialContent: TutorialPanelTutorialContent,\n Close: TutorialPanelClose\n})\n\nexport default TutorialPanel\n"],"mappings":"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"}
|