dak-krds 0.1.0 → 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/README.md +153 -15
- package/dist/index.css +4057 -0
- package/dist/index.css.map +1 -0
- package/dist/index.js +7642 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7507 -9
- package/dist/index.mjs.map +1 -1
- package/package.json +54 -12
- package/dist/index.d.mts +0 -73
- package/dist/index.d.ts +0 -73
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["#style-inject:#style-inject","../src/components/badge/badge.css","../src/components/badge/badge.tsx","../src/components/button/button.css","../src/components/button/button.tsx","../src/components/card/card.css","../src/components/card/card.tsx","../src/components/checkbox/checkbox.css","../src/components/checkbox/checkbox.tsx","../src/components/input/input.css","../src/components/input/input.tsx","../src/components/select/select.css","../src/components/select/select.tsx","../src/components/switch/use-switch.ts","../src/components/switch/switch.css","../src/components/switch/switch.tsx","../src/components/textarea/textarea.css","../src/components/textarea/textarea.tsx"],"names":["styleInject","css","insertAt","head","style","Badge","variant","size","className","children","props","classNames","jsx","Button","Card","padding","Checkbox","label","error","checkboxClassNames","jsxs","Input","helperText","inputClassNames","Select","options","selectClassNames","option","useSwitch","controlledChecked","defaultChecked","onChange","internalChecked","setInternalChecked","useState","isControlled","checked","useEffect","handleChange","useCallback","event","Switch","switchClassNames","TextArea","resize","textareaClassNames"],"mappings":"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","file":"index.js","sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\".dak-badge{display:inline-flex;align-items:center;justify-content:center;border-radius:9999px;font-weight:600;white-space:nowrap}.dak-badge--primary{background-color:#dbeafe;color:#1e40af}.dak-badge--success{background-color:#d1fae5;color:#065f46}.dak-badge--warning{background-color:#fef3c7;color:#92400e}.dak-badge--error{background-color:#fee2e2;color:#991b1b}.dak-badge--info{background-color:#e0e7ff;color:#3730a3}.dak-badge--small{padding:4px 10px;font-size:12px}.dak-badge--medium{padding:6px 14px;font-size:14px}.dak-badge--large{padding:8px 18px;font-size:16px}\\n\")","import React from 'react';\nimport './badge.css';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: 'primary' | 'success' | 'warning' | 'error' | 'info';\n size?: 'small' | 'medium' | 'large';\n children: React.ReactNode;\n}\n\nexport function Badge({\n variant = 'primary',\n size = 'medium',\n className = '',\n children,\n ...props\n}: BadgeProps) {\n const classNames = [\n 'dak-badge',\n `dak-badge--${variant}`,\n `dak-badge--${size}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span className={classNames} {...props}>\n {children}\n </span>\n );\n}\n","import styleInject from '#style-inject';styleInject(\".dak-button{border:none;border-radius:8px;font-weight:600;cursor:pointer;transition:all .2s ease;font-family:inherit}.dak-button:hover{transform:translateY(-1px);box-shadow:0 4px 12px #00000026}.dak-button:active{transform:translateY(0)}.dak-button:disabled{opacity:.5;cursor:not-allowed;transform:none}.dak-button--primary{background-color:#0070f3;color:#fff}.dak-button--primary:hover{background-color:#0051cc}.dak-button--secondary{background-color:#6b7280;color:#fff}.dak-button--secondary:hover{background-color:#4b5563}.dak-button--outline{background-color:transparent;color:#0070f3;border:2px solid #0070f3}.dak-button--outline:hover{background-color:#0070f3;color:#fff}.dak-button--small{padding:8px 16px;font-size:14px}.dak-button--medium{padding:12px 24px;font-size:16px}.dak-button--large{padding:16px 32px;font-size:18px}\\n\")","import React from 'react';\nimport './button.css';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'secondary' | 'outline';\n size?: 'small' | 'medium' | 'large';\n children: React.ReactNode;\n}\n\nexport function Button({\n variant = 'primary',\n size = 'medium',\n className = '',\n children,\n ...props\n}: ButtonProps) {\n const classNames = [\n 'dak-button',\n `dak-button--${variant}`,\n `dak-button--${size}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button className={classNames} {...props}>\n {children}\n </button>\n );\n}\n","import styleInject from '#style-inject';styleInject(\".dak-card{background-color:#fff;border-radius:12px;box-sizing:border-box;width:100%}.dak-card--default{background-color:#f9fafb}.dak-card--bordered{border:2px solid #e5e7eb;background-color:#fff}.dak-card--elevated{background-color:#fff;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;transition:box-shadow .2s ease}.dak-card--elevated:hover{box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.dak-card--padding-none{padding:0}.dak-card--padding-small{padding:12px}.dak-card--padding-medium{padding:24px}.dak-card--padding-large{padding:32px}\\n\")","import React from 'react';\nimport './card.css';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'bordered' | 'elevated';\n padding?: 'none' | 'small' | 'medium' | 'large';\n children: React.ReactNode;\n}\n\nexport function Card({\n variant = 'default',\n padding = 'medium',\n className = '',\n children,\n ...props\n}: CardProps) {\n const classNames = [\n 'dak-card',\n `dak-card--${variant}`,\n `dak-card--padding-${padding}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classNames} {...props}>\n {children}\n </div>\n );\n}\n","import styleInject from '#style-inject';styleInject(\".dak-checkbox-wrapper{display:flex;flex-direction:column;gap:6px}.dak-checkbox-label-wrapper{display:flex;align-items:center;gap:10px;cursor:pointer;user-select:none}.dak-checkbox{width:20px;height:20px;border:2px solid #d1d5db;border-radius:4px;cursor:pointer;appearance:none;background-color:#fff;transition:all .2s ease;position:relative;flex-shrink:0}.dak-checkbox:hover{border-color:#0070f3}.dak-checkbox:checked{background-color:#0070f3;border-color:#0070f3}.dak-checkbox:checked:after{content:\\\"\\\";position:absolute;left:6px;top:2px;width:4px;height:9px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg)}.dak-checkbox:disabled{opacity:.5;cursor:not-allowed}.dak-checkbox:disabled:hover{border-color:#d1d5db}.dak-checkbox--error{border-color:#ef4444}.dak-checkbox--error:hover{border-color:#dc2626}.dak-checkbox-label{font-size:16px;color:#374151}.dak-checkbox-error-text{font-size:14px;color:#ef4444;padding-left:30px}\\n\")","import React from 'react';\nimport './checkbox.css';\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string;\n error?: string;\n}\n\nexport function Checkbox({\n label,\n error,\n className = '',\n ...props\n}: CheckboxProps) {\n const checkboxClassNames = [\n 'dak-checkbox',\n error && 'dak-checkbox--error',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className=\"dak-checkbox-wrapper\">\n <label className=\"dak-checkbox-label-wrapper\">\n <input\n type=\"checkbox\"\n className={checkboxClassNames}\n {...props}\n />\n {label && <span className=\"dak-checkbox-label\">{label}</span>}\n </label>\n {error && <span className=\"dak-checkbox-error-text\">{error}</span>}\n </div>\n );\n}\n","import styleInject from '#style-inject';styleInject(\".dak-input-wrapper{display:flex;flex-direction:column;gap:6px;width:100%}.dak-input-label{font-size:14px;font-weight:600;color:#374151}.dak-input{padding:12px 16px;border:2px solid #d1d5db;border-radius:8px;font-size:16px;font-family:inherit;transition:all .2s ease;width:100%;box-sizing:border-box}.dak-input:focus{outline:none;border-color:#0070f3;box-shadow:0 0 0 3px #0070f31a}.dak-input:disabled{background-color:#f3f4f6;cursor:not-allowed;opacity:.6}.dak-input--error{border-color:#ef4444}.dak-input--error:focus{border-color:#ef4444;box-shadow:0 0 0 3px #ef44441a}.dak-input-error-text{font-size:14px;color:#ef4444}.dak-input-helper-text{font-size:14px;color:#6b7280}\\n\")","import React from 'react';\nimport './input.css';\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n helperText?: string;\n}\n\nexport function Input({\n label,\n error,\n helperText,\n className = '',\n ...props\n}: InputProps) {\n const inputClassNames = [\n 'dak-input',\n error && 'dak-input--error',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className=\"dak-input-wrapper\">\n {label && <label className=\"dak-input-label\">{label}</label>}\n <input className={inputClassNames} {...props} />\n {error && <span className=\"dak-input-error-text\">{error}</span>}\n {!error && helperText && (\n <span className=\"dak-input-helper-text\">{helperText}</span>\n )}\n </div>\n );\n}\n","import styleInject from '#style-inject';styleInject(\".dak-select-wrapper{display:flex;flex-direction:column;gap:6px;width:100%}.dak-select-label{font-size:14px;font-weight:600;color:#374151}.dak-select{padding:12px 40px 12px 16px;border:2px solid #d1d5db;border-radius:8px;font-size:16px;font-family:inherit;background-color:#fff;cursor:pointer;transition:all .2s ease;width:100%;box-sizing:border-box;appearance:none;background-image:url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23374151' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\\\");background-repeat:no-repeat;background-position:right 12px center;background-size:20px}.dak-select:focus{outline:none;border-color:#0070f3;box-shadow:0 0 0 3px #0070f31a}.dak-select:disabled{background-color:#f3f4f6;cursor:not-allowed;opacity:.6}.dak-select--error{border-color:#ef4444}.dak-select--error:focus{border-color:#ef4444;box-shadow:0 0 0 3px #ef44441a}.dak-select-error-text{font-size:14px;color:#ef4444}.dak-select-helper-text{font-size:14px;color:#6b7280}\\n\")","import React from 'react';\nimport './select.css';\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface SelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n error?: string;\n helperText?: string;\n options: SelectOption[];\n}\n\nexport function Select({\n label,\n error,\n helperText,\n options,\n className = '',\n ...props\n}: SelectProps) {\n const selectClassNames = [\n 'dak-select',\n error && 'dak-select--error',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className=\"dak-select-wrapper\">\n {label && <label className=\"dak-select-label\">{label}</label>}\n <select className={selectClassNames} {...props}>\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n {error && <span className=\"dak-select-error-text\">{error}</span>}\n {!error && helperText && (\n <span className=\"dak-select-helper-text\">{helperText}</span>\n )}\n </div>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\n\ninterface UseSwitchProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport const useSwitch = ({ checked: controlledChecked, defaultChecked = false, onChange }: UseSwitchProps) => {\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : internalChecked;\n\n useEffect(() => {\n if (!isControlled && defaultChecked !== undefined) {\n setInternalChecked(defaultChecked);\n }\n }, [defaultChecked, isControlled]);\n\n const handleChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(event.target.checked);\n }\n onChange?.(event);\n }, [isControlled, onChange]);\n\n return { checked, handleChange };\n};\n","import styleInject from '#style-inject';styleInject(\".dak-switch-wrapper{display:inline-flex;align-items:center;gap:12px;cursor:pointer;user-select:none}.dak-switch-input{position:absolute;opacity:0;width:0;height:0}.dak-switch{position:relative;display:inline-block;width:48px;height:26px;background-color:#d1d5db;border-radius:9999px;transition:background-color .2s ease}.dak-switch:hover{background-color:#9ca3af}.dak-switch--checked{background-color:#0070f3}.dak-switch--checked:hover{background-color:#0051cc}.dak-switch-thumb{position:absolute;top:3px;left:3px;width:20px;height:20px;background-color:#fff;border-radius:9999px;transition:transform .2s ease;box-shadow:0 2px 4px #0003}.dak-switch--checked .dak-switch-thumb{transform:translate(22px)}.dak-switch--disabled{opacity:.5;cursor:not-allowed}.dak-switch--disabled:hover{background-color:#d1d5db}.dak-switch--checked.dak-switch--disabled:hover{background-color:#0070f3}.dak-switch-label{font-size:16px;color:#374151}\\n\")","import React from 'react';\nimport { useSwitch } from './use-switch';\nimport './switch.css';\n\nexport interface SwitchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: string;\n}\n\nexport function Switch({\n label,\n className = '',\n ...props\n}: SwitchProps) {\n const { checked, handleChange } = useSwitch(props);\n\n const switchClassNames = [\n 'dak-switch',\n checked && 'dak-switch--checked',\n props.disabled && 'dak-switch--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <label className=\"dak-switch-wrapper\">\n <input\n type=\"checkbox\"\n className=\"dak-switch-input\"\n checked={checked}\n onChange={handleChange}\n {...props}\n />\n <span className={switchClassNames}>\n <span className=\"dak-switch-thumb\" />\n </span>\n {label && <span className=\"dak-switch-label\">{label}</span>}\n </label>\n );\n}\n","import styleInject from '#style-inject';styleInject(\".dak-textarea-wrapper{display:flex;flex-direction:column;gap:6px;width:100%}.dak-textarea-label{font-size:14px;font-weight:600;color:#374151}.dak-textarea{padding:12px 16px;border:2px solid #d1d5db;border-radius:8px;font-size:16px;font-family:inherit;transition:all .2s ease;width:100%;box-sizing:border-box;min-height:100px}.dak-textarea:focus{outline:none;border-color:#0070f3;box-shadow:0 0 0 3px #0070f31a}.dak-textarea:disabled{background-color:#f3f4f6;cursor:not-allowed;opacity:.6}.dak-textarea--error{border-color:#ef4444}.dak-textarea--error:focus{border-color:#ef4444;box-shadow:0 0 0 3px #ef44441a}.dak-textarea--resize-none{resize:none}.dak-textarea--resize-vertical{resize:vertical}.dak-textarea--resize-horizontal{resize:horizontal}.dak-textarea--resize-both{resize:both}.dak-textarea-error-text{font-size:14px;color:#ef4444}.dak-textarea-helper-text{font-size:14px;color:#6b7280}\\n\")","import React from 'react';\nimport './textarea.css';\n\nexport interface TextAreaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string;\n error?: string;\n helperText?: string;\n resize?: 'none' | 'vertical' | 'horizontal' | 'both';\n}\n\nexport function TextArea({\n label,\n error,\n helperText,\n resize = 'vertical',\n className = '',\n ...props\n}: TextAreaProps) {\n const textareaClassNames = [\n 'dak-textarea',\n `dak-textarea--resize-${resize}`,\n error && 'dak-textarea--error',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className=\"dak-textarea-wrapper\">\n {label && <label className=\"dak-textarea-label\">{label}</label>}\n <textarea className={textareaClassNames} {...props} />\n {error && <span className=\"dak-textarea-error-text\">{error}</span>}\n {!error && helperText && (\n <span className=\"dak-textarea-helper-text\">{helperText}</span>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Label/Label.module.css","../src/components/Label/Label.tsx","../src/components/Accordion/Accordion.module.css","../src/components/Accordion/Accordion.tsx","../src/components/Icon/Icon.configs.ts","../src/components/Icon/Icon.utils.ts","../src/components/Icon/icon.import.ts","../src/components/Icon/Icon.tsx","../src/components/Alert/Alert.module.css","../src/components/Alert/Alert.tsx","../src/components/Badge/Badge.module.css","../src/components/Badge/Badge.tsx","../src/components/Body/Body.module.css","../src/styles/color/color.ts","../src/components/Body/Body.tsx","../src/components/Breadcrumb/useIsMobile.ts","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Spinner/Spinner.module.css","../src/components/Spinner/Spinner.tsx","../src/components/Button/Button.module.css","../src/components/Button/Button.tsx","../src/components/Checkbox/Checkbox.module.css","../src/components/Checkbox/Checkbox.tsx","../src/components/Checkbox/DakCheckBox.tsx","../src/components/Checkbox/DakCheckBoxGroup.tsx","../src/components/ChipGroup/ChipGroup.module.css","../src/components/ChipGroup/ChipGroup.tsx","../src/hooks/create-excluded-days-event.ts","../src/hooks/date-util.ts","../src/hooks/use-delay-toggle.ts","../src/hooks/use-animation-toggle.ts","../src/hooks/use-block-document-scroll.ts","../src/hooks/use-custom-event-listener.ts","../src/hooks/use-focus-in-content.ts","../src/hooks/use-handle-click-backdrop.ts","../src/components/DatePicker/hooks/useCalendar.ts","../src/components/DatePicker/components/Calendar/Calendar.module.css","../src/components/DatePicker/hooks/useSelector.ts","../src/components/DatePicker/components/Calendar/YearMonthSelector/YearMonthSelector.tsx","../src/components/DatePicker/components/Calendar/Calendar.tsx","../src/components/DatePicker/DatePicker.module.css","../src/components/DatePicker/hooks/useCalendarPosition.ts","../src/components/DatePicker/utils/dateValidation.ts","../src/components/DatePicker/hooks/useRangeValidation.ts","../src/components/DatePicker/hooks/useRangeDatePickerState.ts","../src/components/DatePicker/utils/errorPriority.ts","../src/components/DatePicker/components/RangeDatePicker/RangeDatePicker.tsx","../src/components/DatePicker/hooks/useDateValidation.ts","../src/components/DatePicker/hooks/useDatePickerState.ts","../src/components/DatePicker/components/SingleDatePicker/SingleDatePicker.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/Detail/Detail.module.css","../src/components/Detail/Detail.tsx","../src/components/Display/Display.module.css","../src/components/Display/Display.tsx","../src/assets/main-assets-path.ts","../src/components/Heading/Heading.module.css","../src/components/Heading/Heading.tsx","../src/components/ErrorPage/ErrorPage.tsx","../src/components/FileButtonUpload/FileButtonUpload.tsx","../src/components/FileUpload/DakFileUpload.tsx","../src/components/FileUpload/FileItem.tsx","../src/components/Modal/Button/Blue.tsx","../src/components/Modal/Button/Dialog.tsx","../src/components/Modal/Button/Grey.tsx","../src/components/Modal/Button/Medium.tsx","../src/components/Modal/Button/OutlinedBlue.tsx","../src/components/Modal/Button/Red.tsx","../src/components/Modal/Button/Secondary.tsx","../src/components/Modal/Button/Small.tsx","../src/components/Modal/BackDrop/Backdrop.module.css","../src/components/Modal/BackDrop/DimmedBackdrop.tsx","../src/components/Modal/BackDrop/ClearBackdrop.tsx","../src/components/Modal/BackDrop/Backdrop.tsx","../src/components/Modal/Modal.type.ts","../src/components/Modal/utils/use-focus-in-dialog.tsx","../src/components/Modal/utils/use-focus-in-modal-manager.tsx","../src/components/Modal/utils/use-esc-key-event-listener.ts","../src/components/Modal/utils/use-handle-modal-list.ts","../src/components/Modal/utils/use-modal-custom-event-listener.ts","../src/components/Modal/utils/use-add-modal-animation-style.ts","../src/components/Modal/KeyEventHandler/esc-key-event-handler.tsx","../src/components/Modal/Container/Large.tsx","../src/components/Modal/Container/Medium.tsx","../src/components/Modal/Container/Small.tsx","../src/components/Modal/Container/Dialog.tsx","../src/components/Modal/Content/Dialog.tsx","../src/components/Modal/Content/Large.tsx","../src/components/Modal/Content/Medium.tsx","../src/components/Modal/Content/Small.tsx","../src/components/Modal/Header/Dialog.tsx","../src/components/Modal/Header/Large.tsx","../src/components/Modal/Header/Medium.tsx","../src/components/Modal/Header/Small.tsx","../src/components/Modal/SmallModal.ts","../src/components/Modal/service/modal.service.ts","../src/components/Modal/Dialog.ts","../src/components/Modal/service/dialog.service.tsx","../src/components/FileUpload/use-fileupload-alert-modal.tsx","../src/components/FileUpload/FileUpload.tsx","../src/components/Link/Link.module.css","../src/components/Link/Link.tsx","../src/components/LinkButton/LinkButton.tsx","../src/components/LoadingPage/LoadingPage.tsx","../src/components/Modal/MediumModal.ts","../src/components/Modal/Button/Large.tsx","../src/components/Modal/LargeModal.ts","../src/components/Modal/contexts/modal-manager-context.tsx","../src/components/Portal/Portal.tsx","../src/components/Modal/Modal.tsx","../src/components/Modal/ModalManager.tsx","../src/components/MScrollTab/MScrollTab.tsx","../src/components/MTable/MTableItem.tsx","../src/components/MTable/MTable.tsx","../src/components/MTableGuideWrapper/MTableGuideWrapper.tsx","../src/components/Notfount/NotFountPage.tsx","../src/components/TextInput/StatusLabel.tsx","../src/components/TextInput/TextInput.tsx","../src/components/NumberInput/handleNumberChange.ts","../src/components/NumberInput/NumberInput.tsx","../src/components/Pagination/useIsMobile.ts","../src/components/Pagination/Pagination.tsx","../src/components/PhoneInput/splitPhoneNumber.ts","../src/components/PhoneInput/PhoneInput.tsx","../src/components/RadioButton/RadioButton.module.css","../src/components/RadioButton/RadioButton.tsx","../src/components/RadioButton/RadioButtonGroup.tsx","../src/components/Select/Select.module.css","../src/components/Select/Select.tsx","../src/components/StepIndicator/StepIndicator.module.css","../src/components/StepIndicator/StepIndicator.tsx","../src/components/Switch/components/switch-label.tsx","../src/components/Switch/components/switch-track.tsx","../src/components/Switch/Switch.tsx","../src/components/Tab/Tab.module.css","../src/components/Tab/Tab.tsx","../src/components/Tab/TabPanel.tsx","../src/components/Tab/Tabs.tsx","../src/components/Tag/Tag.module.css","../src/components/Tag/Tag.tsx","../src/components/TextArea/TextArea.tsx","../src/components/TimeSelector/usePopup.ts","../src/components/TimeSelector/TimeSelectorInput.tsx","../src/components/TimeSelector/TimeSelectorPopup.tsx","../src/components/TimeSelector/TimeSelector.tsx","../src/components/Title/Title.module.css","../src/components/Title/Title.tsx","../src/components/ToastBar/service/toastbar.service.tsx","../src/components/ToastBar/ToastBar.module.css","../src/components/ToastBar/ToastBar.tsx","../src/components/ToastBar/utils/use-handle-toast-bar-list.tsx","../src/components/ToastBar/utils/use-toast-bar-custom-event-listener.ts","../src/components/ToastBar/ToastBarManager.tsx","../src/components/Drawer/Drawer.tsx"],"names":["required","label","uniqueId","jsxs","jsx","title","useRef","useState","item","icons","secondary","icon","description","value","useEffect","type","disabled","option","checked","selected","DateTimeFormat","Instant","ZoneId","ZonedDateTime","LocalDateTime","convert","DateTimeFormatter","formatDate","ChronoUnit","LocalDate","TemporalAdjusters","DayOfWeek","nativeJs","daysBetween","useCallback","body","content","list","Fragment","debounce","createPortal","parsingDate","throttle","placeholder","ErrorImg","tag","React","ErrorPage","subDescription","dragActive","errors","fileItem","fileName","error","MODAL_LIST_TYPE","focusableElements","focusableList","forwardRef","DefaultDialogTypes","DefaultDialogButtonTypes","text","fileList","createContext","useContext","container","useMemo","show","tabList","el","scrollLeft","NotFountPage","useIsMobile","useId","CheckIcon","visible","meridiem","TOASTBAR_TYPE","open"],"mappings":"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","file":"index.js","sourcesContent":[".label {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 4px;\n\tmargin: 0;\n\tpadding: 0;\n\tcolor: inherit;\n}\n\n/* Size Styles - Large (h2 기준) */\n.size_l {\n\tfont-size: 1.5em;\n\tline-height: 1.3;\n}\n\n@media (min-width: 640px) {\n\t.size_l {\n\t\tfont-size: 1.25em;\n\t\tline-height: 1.3;\n\t}\n}\n\n/* Size Styles - Medium (h3 기준) */\n.size_m {\n\tfont-size: 1.063em;\n\tline-height: 1.4;\n}\n\n@media (min-width: 640px) {\n\t.size_m {\n\t\tfont-size: 1.063em;\n\t\tline-height: 1.4;\n\t}\n}\n\n/* Size Styles - Small (h4 기준) */\n.size_s {\n\tfont-size: 1em;\n\tline-height: 1.5;\n}\n\n@media (min-width: 640px) {\n\t.size_s {\n\t\tfont-size: 1em;\n\t\tline-height: 1.5;\n\t}\n}\n\n/* Size Styles - Extra Small (h5 기준) */\n.size_xs {\n\tfont-size: 0.8125em;\n\tline-height: 1.6;\n}\n\n@media (min-width: 640px) {\n\t.size_xs {\n\t\tfont-size: 0.8125em; /* 동일하게 유지 */\n\t\tline-height: 1.6;\n\t}\n}\n\n/* Weight Styles */\n.weight_regular {\n\tfont-weight: 500;\n}\n\n.weight_bold {\n\tfont-weight: 700;\n}\n\n.required {\n\tcolor: var(--krds-color-point-50);\n}\n","import type { ElementType } from 'react';\nimport * as styles from './Label.module.css';\nimport type { LabelProps } from './Label.type';\nimport { uniqueId } from 'lodash-es';\n\n/**\n *\n * - @param props - Label 컴포넌트의 속성\n * - @param id - 글자 크기\n * - @param size - 글자 크기\n * - @param weight - 글자 두께 (regular 또는 bold)\n * - @param children\n * - @param className\n * - @param required - 필수 항목 여부 ( * 표시 ) 기본 값은 false\n * - @param as - 렌더링할 HTML 요소 (기본값: 'label')\n * - @param label - label이 있는 경우 우선 표시됩니다. children보다 우선합니다.\n * - @returns\n */\nexport const Label = <E extends ElementType = 'label'>({\n id,\n size = 'm',\n weight = 'regular',\n children,\n className = '',\n required = false,\n as,\n label,\n ...props\n}: LabelProps<E>) => {\n const Component = (as || 'label') as ElementType;\n\n const uId = id || uniqueId();\n\n if (label) {\n return (\n <Component\n className={`${styles.label} ${styles[`size_${size}`]} ${styles[`weight_${weight}`]} ${className}`}\n htmlFor={uId}\n {...props}>\n {label}\n {required && <span className={styles.required}>*</span>}\n </Component>\n );\n }\n\n return (\n <Component\n className={`${styles.label} ${styles[`size_${size}`]} ${styles[`weight_${weight}`]} ${className}`}\n htmlFor={uId}\n {...props}>\n {children}\n {required && <span className={styles.required}>*</span>}\n </Component>\n );\n};\n",".accordion {\n\tborder-top: 1px solid var(--krds-color-gray-20);\n\toverflow: hidden;\n}\n\n.accordionItem {\n\twidth: 100%;\n\tborder-bottom: 1px solid var(--krds-color-gray-20);\n}\n\n.plain {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n\tpadding: 8px 0;\n\n\t.chevronContainer {\n\t\tmargin: 0 !important;\n\t}\n\n\tlabel {\n\t\tflex: 1;\n\t}\n\n\t.accordionItem {\n\t\tborder-bottom: none !important;\n\t\tborder-radius: 12px;\n\t}\n\n\t.accordionItem[data-isopen=\"true\"] {\n\t\tbackground-color: var(--krds-color-primary-5);\n\n\t\tlabel {\n\t\t\tcolor: var(--krds-color-secondary-80);\n\t\t}\n\t}\n\n\t.accordionButton:focus-visible {\n\t\toutline: 2px solid var(--krds-color-primary-50);\n\t\toutline-offset: 2px;\n\t\tborder-radius: 8px;\n\t}\n}\n\n.accordionButton {\n\twidth: 100%;\n\ttext-align: left;\n\tpadding: 24px;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tborder: none;\n\tbackground: none;\n\tcursor: pointer;\n\toutline: none;\n}\n\n.accordionButton:focus-visible {\n\tbox-shadow: 0 0 0 2px var(--krds-color-primary-50);\n\toutline: 2px solid transparent;\n\toutline-offset: 2px;\n}\n\n.accordionTitle {\n\tcursor: pointer;\n}\n\n.chevronContainer {\n\tmargin-left: 24px;\n\tflex-shrink: 0;\n}\n\n.chevronIcon {\n\ttransform: rotate(180deg);\n\ttransition: transform 0.3s ease;\n}\n\n.chevronIconOpen {\n\ttransform: rotate(0);\n}\n\n.accordionContent {\n\toverflow: hidden;\n\ttransition: max-height 0.3s ease-in-out;\n}\n\n.accordionContentInner {\n\tpadding: 24px;\n}\n\n.srOnly {\n\tposition: absolute;\n\twidth: 1px;\n\theight: 1px;\n\tpadding: 0;\n\tmargin: -1px;\n\toverflow: hidden;\n\tclip: rect(0, 0, 0, 0);\n\twhite-space: nowrap;\n\tborder: 0;\n}\n","import type React from 'react';\nimport { useRef, useState } from 'react';\nimport { Label } from '../Label';\nimport * as style from './Accordion.module.css';\nimport type {\n AccordionProps,\n ChevronIconProps,\n InternalAccordionItemProps,\n} from './Accordion.type';\n\nconst ChevronIcon: React.FC<ChevronIconProps> = ({ isOpen }) => (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n width='24'\n height='24'\n className={`${style.chevronIcon} ${isOpen ? style.chevronIconOpen : ''}`}\n aria-hidden='true'>\n <path d='M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z' fill='currentColor' />\n </svg>\n);\n\nconst AccordionItem: React.FC<InternalAccordionItemProps> = ({\n title,\n id,\n children,\n className,\n childrenClassName,\n size = 'm',\n isOpen,\n onClick,\n}) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const buttonId = `accordion-button-${typeof title === 'string' ? title.replace(/\\s+/g, '-').toLowerCase() : id}`;\n const contentId = `accordion-content-${typeof title === 'string' ? title.replace(/\\s+/g, '-').toLowerCase() : id}`;\n\n return (\n <div className={style.accordionItem} data-isopen={isOpen.toString()}>\n <button\n type='button'\n className={style.accordionButton}\n onClick={onClick}\n aria-expanded={isOpen}\n aria-controls={contentId}\n id={buttonId}>\n <Label id={buttonId} size={size} weight='bold' className={className}>\n {title}\n </Label>\n <span className={style.chevronContainer}>\n <ChevronIcon isOpen={isOpen} />\n </span>\n <span className={style.srOnly}>{isOpen ? '접기' : '펼치기'}</span>\n </button>\n <section\n ref={contentRef}\n aria-labelledby={buttonId}\n id={contentId}\n className={style.accordionContent}\n style={{\n maxHeight: isOpen ? `${contentRef.current?.scrollHeight}px` : '0px',\n }}\n inert={!isOpen ? true : undefined}>\n <div className={`${style.accordionContentInner} ${childrenClassName}`}>{children}</div>\n </section>\n </div>\n );\n};\n\nexport const Accordion: React.FC<AccordionProps> = ({\n items,\n className = '',\n variant = 'line',\n ...props\n}) => {\n const [openIndex, setOpenIndex] = useState<number | null>(null);\n\n const handleItemClick = (index: number) => {\n setOpenIndex((prevIndex) => (prevIndex === index ? null : index));\n };\n\n return (\n <div {...props} className={`${className} ${style.accordion} ${style[variant]}`}>\n {items.map((item, index) => (\n <AccordionItem\n key={\n (typeof item.title === 'string' && item.title) || item.id || `accordion-item-${index}`\n } // 더 안정적인 key 사용\n {...item}\n id={`accordion-item-${index}`}\n isOpen={openIndex === index}\n size={item.size || 'm'}\n onClick={() => handleItemClick(index)}\n className={item.className || style.accordionTitle}\n />\n ))}\n </div>\n );\n};\n","export const ICON_CONFIG = {\n multiColor: ['Annotation', 'SystemDanger', 'SystemSuccess', 'SystemWarning', 'SystemInfo'],\n stroke: ['Check', 'CheckCircle', 'RoundCheck', 'GuideCheck'],\n} as const;\n\nexport type IconCategory = keyof typeof ICON_CONFIG;\n","import type { CSSProperties } from 'react';\nimport type { IconType } from './Icon';\nimport type { IconCategory } from './Icon.configs';\nimport { ICON_CONFIG } from './Icon.configs';\n\nexport function getIconCategory(iconName: IconType): IconCategory | undefined {\n for (const [category, icons] of Object.entries(ICON_CONFIG)) {\n if ((icons as readonly IconType[]).includes(iconName)) {\n return category as IconCategory;\n }\n }\n return undefined;\n}\n\ninterface CustomCSSProperties extends CSSProperties {\n '--icon-primary'?: string;\n '--icon-secondary'?: string;\n '--icon-stroke'?: string;\n '--icon-color'?: string;\n}\n\nexport function getIconProps(\n iconName: IconType,\n color?: string,\n primary?: string,\n secondary?: string,\n): { style: CustomCSSProperties } {\n const category = getIconCategory(iconName);\n\n const style: CustomCSSProperties = {};\n\n if (category === 'multiColor') {\n style['--icon-primary'] = primary || '#256EF4';\n style['--icon-secondary'] = secondary || '#ffffff';\n }\n\n // stroke 아이콘의 경우 --icon-color 변수 사용 (CSS와 일치)\n if (category === 'stroke' && color) {\n style['--icon-color'] = color;\n }\n\n // 일반 아이콘의 경우에도 color 적용\n if (!category && color) {\n style['--icon-color'] = color;\n }\n\n return { style };\n}\n","export const icons = {};\nexport const ICON_IMPORT_CONFIG = {};\n","import type { CSSProperties } from 'react';\nimport * as styles from './Icon.module.css';\nimport type { IconProps } from './Icon.type';\nimport { getIconCategory, getIconProps } from './Icon.utils';\nimport { ICON_IMPORT_CONFIG } from './icon.import';\n\nexport type IconType = keyof typeof ICON_IMPORT_CONFIG;\ninterface CustomCSSProperties extends CSSProperties {\n '--icon-color'?: string;\n}\n\nexport const Icon = ({\n icon: iconComponent,\n size = 24,\n color,\n primary,\n secondary,\n className = '',\n fillRule = 'evenodd',\n viewBox = '0 0 24 24',\n ...props\n}: IconProps) => {\n const SvgIcon = ICON_IMPORT_CONFIG[iconComponent];\n const category = getIconCategory(iconComponent);\n const iconProps = getIconProps(iconComponent, color, primary, secondary);\n const applyColor = color || primary || secondary;\n const isMultiColor = category === 'multiColor';\n const isStroke = category === 'stroke';\n\n const iconClassName = [\n className,\n applyColor ? styles.icon : '',\n isMultiColor ? styles.multiColor : '',\n isStroke ? styles.stroke : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <SvgIcon\n fillRule={fillRule}\n width={size}\n height={size}\n viewBox={viewBox}\n className={iconClassName}\n style={\n {\n ...props.style,\n ...iconProps.style,\n ...(color ? { '--icon-color': color } : {}),\n } as CustomCSSProperties\n }\n {...props}\n />\n );\n};\n",".alertContainer {\n\tborder-radius: 12px;\n\tdisplay: flex;\n\tpadding: 1rem;\n\tgap: 8px;\n\talign-items: flex-start;\n\twidth: 720px;\n}\n\n@media screen and (max-width: 768px) {\n\t.alertContainer {\n\t\twidth: 329px;\n\t}\n}\n\n.titleRow {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n}\n\n.title {\n\tfont-weight: 700;\n\tfont-size: 17px;\n\tline-height: 26px;\n\twidth: 100%;\n}\n\n.title_danger {\n\tcolor: var(--krds-color-danger-60);\n}\n\n.title_success {\n\tcolor: var(--krds-color-success-60);\n}\n\n.title_warning {\n\tcolor: var(--krds-color-warning-60);\n}\n\n.title_information {\n\tcolor: var(--krds-color-information-60);\n}\n\n.title_secondary {\n\tcolor: var(--krds-color-secondary-80);\n}\n\n.description {\n\tfont-weight: 400;\n\tfont-size: 1.063rem;\n\tline-height: 1.625rem;\n\tcolor: var(--krds-color-gray-90);\n}\n\n.descriptionIndented {\n\tfont-weight: 400;\n\tfont-size: 1.063rem;\n\tline-height: 1.625rem;\n\tcolor: var(--krds-color-gray-90);\n}\n\n@media screen and (max-width: 768px) {\n\t.descriptionIndented {\n\t\tfont-size: 0.938rem;\n\t}\n}\n\n.danger {\n\tbackground-color: var(--krds-color-danger-5);\n\tborder: 1px solid var(--krds-color-danger-10);\n\tcolor: var(--krds-color-danger-60);\n}\n\n.warning {\n\tbackground-color: var(--krds-color-warning-5);\n\tborder: 1px solid var(--krds-color-warning-10);\n\tcolor: var(--krds-color-warning-60);\n}\n\n.success {\n\tbackground-color: var(--krds-color-success-5);\n\tborder: 1px solid var(--krds-color-success-10);\n\tcolor: var(--krds-color-success-60);\n}\n\n.information {\n\tbackground-color: var(--krds-color-information-5);\n\tborder: 1px solid var(--krds-color-information-10);\n\tcolor: var(--krds-color-information-60);\n}\n\n.secondary {\n\tbackground-color: var(--krds-color-secondary-5);\n\tborder: 1px solid var(--krds-color-secondary-10);\n\tcolor: var(--krds-color-secondary-80);\n\n\trect {\n\t\tfill: var(--krds-color-secondary-80);\n\t}\n}\n\n.content {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n\twidth: 100%;\n}\n\n.icon {\n\tmargin-top: 2px;\n}\n","import { Icon } from '../Icon';\nimport * as styles from './Alert.module.css';\nimport type { AlertProps, AlertVariant, IconName } from './Alert.type';\n\nconst VARIANT_CLASS_MAP: Record<AlertVariant, string> = {\n danger: styles.danger,\n warning: styles.warning,\n success: styles.success,\n information: styles.information,\n secondary: styles.secondary,\n};\n\nconst VARIANT_PRIMARY_COLOR_MAP: Record<AlertVariant, string> = {\n danger: '#DE3412',\n warning: '#9E6A00',\n success: '#007A4E',\n information: '#16408D',\n secondary: '#052B57',\n};\n\nconst ICON_NAME_MAP: Record<AlertVariant, IconName> = {\n danger: 'SystemDanger',\n warning: 'SystemWarning',\n success: 'SystemSuccess',\n information: 'SystemInfo',\n secondary: 'SystemInfo',\n};\n\nexport const Alert = ({ variant, icon, title, description, className, isFullWidth = true }: AlertProps) => {\n const variantClass = VARIANT_CLASS_MAP[variant];\n const iconName = ICON_NAME_MAP[icon ?? variant];\n const titleColorClass = styles[`title_${variant}`] ?? '';\n const primaryColor = VARIANT_PRIMARY_COLOR_MAP[variant];\n\n return (\n <div className={`${styles.alertContainer} ${variantClass} ${className ?? ''}`} style={isFullWidth ? {width: '100%'} : {}}>\n <div className={styles.icon}>\n <Icon icon={iconName} size={24} viewBox='0 0 24 24' primary={primaryColor} />\n </div>\n\n <div className={styles.content}>\n {title && (\n <div className={styles.titleRow}>\n <span className={`${styles.title} ${titleColorClass}`}>{title}</span>\n </div>\n )}\n {description && (\n <div className={title ? styles.descriptionIndented : styles.description}>\n {description}\n </div>\n )}\n </div>\n </div>\n );\n};\n",".badge {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: 2px 8px;\n\twidth: fit-content;\n}\n\n.normalWeight {\n\tfont-weight: 400;\n\tfont-size: 15px;\n\tline-height: 24px;\n}\n\n/* Variant + Appearance */\n.defaultStroke {\n\tbackground-color: transparent;\n\tborder: 1px solid var(--krds-color-gray-40);\n\tcolor: var(--krds-color-gray-40);\n}\n.defaultFillStrong {\n\tbackground-color: var(--krds-color-gray-10);\n\tcolor: var(--krds-color-gray-50);\n}\n.defaultFillSoft {\n\tbackground-color: var(--krds-color-gray-10);\n\tcolor: var(--krds-color-gray-50);\n}\n.primaryStroke {\n\tbackground: transparent;\n\tborder: 1px solid var(--krds-color-primary-50);\n\tcolor: var(--krds-color-primary-60);\n}\n.primaryFillStrong {\n\tbackground: var(--krds-color-primary-50);\n\tcolor: var(--krds-color-gray-0);\n}\n.primaryFillSoft {\n\tbackground: var(--krds-color-primary-5);\n\tcolor: var(--krds-color-primary-60);\n}\n.secondaryStroke {\n\tbackground: transparent;\n\tborder: 1px solid var(--krds-color-secondary-70);\n\tcolor: var(--krds-color-secondary-80);\n}\n.secondaryFillStrong {\n\tbackground: var(--krds-color-secondary-70);\n\tcolor: var(--krds-color-gray-0);\n}\n.secondaryFillSoft {\n\tbackground: var(--krds-color-secondary-5);\n\tcolor: var(--krds-color-secondary-80);\n}\n.successStroke {\n\tbackground: transparent;\n\tborder: 1px solid var(--krds-color-success-50);\n\tcolor: var(--krds-color-success-60);\n}\n.successFillStrong {\n\tbackground: var(--krds-color-success-50);\n\tcolor: var(--krds-color-gray-0);\n}\n.successFillSoft {\n\tbackground: var(--krds-color-success-5);\n\tcolor: var(--krds-color-success-60);\n}\n.warningStroke {\n\tbackground: transparent;\n\tborder: 1px solid var(--krds-color-warning-50);\n\tcolor: var(--krds-color-warning-60);\n}\n.warningFillStrong {\n\tbackground: var(--krds-color-warning-50);\n\tcolor: var(--krds-color-gray-0);\n}\n.warningFillSoft {\n\tbackground: var(--krds-color-warning-5);\n\tcolor: var(--krds-color-warning-60);\n}\n.dangerStroke {\n\tbackground: transparent;\n\tborder: 1px solid var(--krds-color-danger-50);\n\tcolor: var(--krds-color-danger-60);\n}\n.dangerFillStrong {\n\tbackground: var(--krds-color-danger-50);\n\tcolor: var(--krds-color-gray-0);\n}\n.dangerFillSoft {\n\tbackground: var(--krds-color-danger-5);\n\tcolor: var(--krds-color-danger-60);\n}\n.informationStroke {\n\tbackground: transparent;\n\tborder: 1px solid var(--krds-color-information-50);\n\tcolor: var(--krds-color-information-60);\n}\n.informationFillStrong {\n\tbackground: var(--krds-color-information-50);\n\tcolor: var(--krds-color-gray-0);\n}\n.informationFillSoft {\n\tbackground: var(--krds-color-information-5);\n\tcolor: var(--krds-color-information-60);\n}\n.pointStroke {\n\tbackground: transparent;\n\tborder: 1px solid var(--krds-color-point-50);\n\tcolor: var(--krds-color-point-60);\n}\n.pointFillStrong {\n\tbackground: var(--krds-color-point-50);\n\tcolor: var(--krds-color-gray-0);\n}\n.pointFillSoft {\n\tbackground: var(--krds-color-point-5);\n\tcolor: var(--krds-color-point-60);\n}\n\n.errorStroke {\n\tbackground: var(--krds-color-point-5);\n\tcolor: var(--krds-color-point-60);\n}\n.errorFillStrong {\n\tbackground: var(--krds-color-point-5);\n\tcolor: var(--krds-color-point-60);\n}\n.errorFillSoft {\n\tbackground: var(--krds-color-point-5);\n\tcolor: var(--krds-color-point-60);\n}\n\n/* ======================================================= */\n","import * as style from './Badge.module.css';\nimport { Label } from '../Label';\nimport type { BadgeProps } from './Badge.type';\n\nexport const Badge = ({\n label,\n variant = 'default',\n size = 's',\n appearance = 'fill-strong',\n className = '',\n width = '',\n height = '',\n radius = '4px',\n}: BadgeProps) => {\n const variantKey = `${variant}${toPascalCase(appearance)}`;\n const variantClass = style[variantKey] ?? '';\n\n return (\n <output\n className={`${style.badge} ${variantClass} ${className}`}\n style={{\n width,\n height,\n borderRadius: radius,\n }}\n aria-label={label}>\n <Label id={`badge-${label}`} size={size} className={`${style.normalWeight}`}>\n {label}\n </Label>\n </output>\n );\n};\n\nfunction toPascalCase(value: string) {\n return value\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n",".body {\n\tmargin: 0;\n}\n\n.size_1 {\n\tfont-size: 20px;\n\tline-height: 30px;\n}\n.size_2 {\n\tfont-size: 18px;\n\tline-height: 26px;\n}\n\n.weight_regular {\n\tfont-weight: 400;\n}\n.weight_semibold {\n\tfont-weight: 600;\n}\n.weight_bold {\n\tfont-weight: 700;\n}\n","// Color definitions for light and 'high-contrast' modes\nexport type ColorThemeMode = 'light' | 'high-contrast';\n\n// Define all available color variables\nexport const colors = {\n 'primary-5': {\n light: '#ecf2fe',\n 'high-contrast': '#ecf2fe',\n },\n 'primary-10': {\n light: '#d8e5fd',\n 'high-contrast': '#d8e5fd',\n },\n 'primary-20': {\n light: '#b1cefb',\n 'high-contrast': '#b1cefb',\n },\n 'primary-30': {\n light: '#86aff9',\n 'high-contrast': '#86aff9',\n },\n 'primary-40': {\n light: '#4c87f6',\n 'high-contrast': '#4c87f6',\n },\n 'primary-50': {\n light: '#256ef4',\n 'high-contrast': '#256ef4',\n },\n 'primary-60': {\n light: '#0b50d0',\n 'high-contrast': '#0b50d0',\n },\n 'primary-70': {\n light: '#083891',\n 'high-contrast': '#083891',\n },\n 'primary-80': {\n light: '#052561',\n 'high-contrast': '#052561',\n },\n 'primary-90': {\n light: '#03163a',\n 'high-contrast': '#03163a',\n },\n 'primary-95': {\n light: '#020f27',\n 'high-contrast': '#020f27',\n },\n\n 'secondary-5': {\n light: '#eef2f7',\n 'high-contrast': '#edf6f8',\n },\n 'secondary-10': {\n light: '#d6e0eb',\n 'high-contrast': '#d5ebf1',\n },\n 'secondary-20': {\n light: '#bacbde',\n 'high-contrast': '#abd8e3',\n },\n 'secondary-30': {\n light: '#90b0d5',\n 'high-contrast': '#75c0d1',\n },\n 'secondary-40': {\n light: '#6b96c7',\n 'high-contrast': '#3d9fb8',\n },\n 'secondary-50': {\n light: '#346fb2',\n 'high-contrast': '#268097',\n },\n 'secondary-60': {\n light: '#1c589c',\n 'high-contrast': '#1f687a',\n },\n 'secondary-70': {\n light: '#063a74',\n 'high-contrast': '#17505e',\n },\n 'secondary-80': {\n light: '#052b57',\n 'high-contrast': '#113b45',\n },\n 'secondary-90': {\n light: '#031f3f',\n 'high-contrast': '#0e3139',\n },\n 'secondary-95': {\n light: '#02162c',\n 'high-contrast': '#091f25',\n },\n\n 'gray-0': {\n light: '#ffffff',\n 'high-contrast': '#ffffff',\n },\n 'gray-5': {\n light: '#f4f5f6',\n 'high-contrast': '#f4f5f6',\n },\n 'gray-10': {\n light: '#e6e8ea',\n 'high-contrast': '#e6e8ea',\n },\n 'gray-20': {\n light: '#cdd1d5',\n 'high-contrast': '#cdd1d5',\n },\n 'gray-30': {\n light: '#b1b8be',\n 'high-contrast': '#b1b8be',\n },\n 'gray-40': {\n light: '#8a949e',\n 'high-contrast': '#8a949e',\n },\n 'gray-50': {\n light: '#6d7882',\n 'high-contrast': '#6d7882',\n },\n 'gray-60': {\n light: '#58616a',\n 'high-contrast': '#58616a',\n },\n 'gray-70': {\n light: '#464c53',\n 'high-contrast': '#464c53',\n },\n 'gray-80': {\n light: '#33363d',\n 'high-contrast': '#33363d',\n },\n 'gray-90': {\n light: '#1e2124',\n 'high-contrast': '#1e2124',\n },\n 'gray-95': {\n light: '#131416',\n 'high-contrast': '#131416',\n },\n 'gray-100': {\n light: '#000000',\n 'high-contrast': '#000000',\n },\n\n 'alpha-black100': {\n light: '#000000',\n 'high-contrast': '#000000',\n },\n 'alpha-black75': {\n light: '#000000bf',\n 'high-contrast': '#000000bf',\n },\n 'alpha-black50': {\n light: '#00000080',\n 'high-contrast': '#00000080',\n },\n 'alpha-black25': {\n light: '#00000040',\n 'high-contrast': '#00000040',\n },\n 'alpha-black10': {\n light: '#0000001a',\n 'high-contrast': '#0000001a',\n },\n 'alpha-black0': {\n light: '#00000000',\n 'high-contrast': '#00000000',\n },\n 'alpha-white100': {\n light: '#ffffff',\n 'high-contrast': '#ffffff',\n },\n 'alpha-white75': {\n light: '#ffffffbf',\n 'high-contrast': '#ffffffbf',\n },\n 'alpha-white50': {\n light: '#ffffff80',\n 'high-contrast': '#ffffff80',\n },\n 'alpha-white25': {\n light: '#ffffff40',\n 'high-contrast': '#ffffff40',\n },\n 'alpha-white10': {\n light: '#ffffff1a',\n 'high-contrast': '#ffffff1a',\n },\n 'alpha-white0': {\n light: '#ffffff00',\n 'high-contrast': '#ffffff00',\n },\n\n 'danger-5': {\n light: '#fdefec',\n 'high-contrast': '#fdefec',\n },\n 'danger-10': {\n light: '#fcdfd9',\n 'high-contrast': '#fcdfd9',\n },\n 'danger-20': {\n light: '#f7afa1',\n 'high-contrast': '#f7afa1',\n },\n 'danger-30': {\n light: '#f48771',\n 'high-contrast': '#f48771',\n },\n 'danger-40': {\n light: '#f05f42',\n 'high-contrast': '#f05f42',\n },\n 'danger-50': {\n light: '#de3412',\n 'high-contrast': '#de3412',\n },\n 'danger-60': {\n light: '#bd2c0f',\n 'high-contrast': '#bd2c0f',\n },\n 'danger-70': {\n light: '#8a240f',\n 'high-contrast': '#8a240f',\n },\n 'danger-80': {\n light: '#5c180a',\n 'high-contrast': '#5c180a',\n },\n 'danger-90': {\n light: '#390d05',\n 'high-contrast': '#390d05',\n },\n 'danger-95': {\n light: '#260903',\n 'high-contrast': '#260903',\n },\n\n 'information-5': {\n light: '#e7f4fe',\n 'high-contrast': '#e7f4fe',\n },\n 'information-10': {\n light: '#d3ebfd',\n 'high-contrast': '#d3ebfd',\n },\n 'information-20': {\n light: '#9ed2fa',\n 'high-contrast': '#9ed2fa',\n },\n 'information-30': {\n light: '#5fb5f7',\n 'high-contrast': '#5fb5f7',\n },\n 'information-40': {\n light: '#2098f3',\n 'high-contrast': '#2098f3',\n },\n 'information-50': {\n light: '#0b78cb',\n 'high-contrast': '#0b78cb',\n },\n 'information-60': {\n light: '#096ab3',\n 'high-contrast': '#096ab3',\n },\n 'information-70': {\n light: '#085691',\n 'high-contrast': '#085691',\n },\n 'information-80': {\n light: '#053961',\n 'high-contrast': '#053961',\n },\n 'information-90': {\n light: '#03253f',\n 'high-contrast': '#03253f',\n },\n 'information-95': {\n light: '#021a2c',\n 'high-contrast': '#021a2c',\n },\n\n 'warning-5': {\n light: '#fff3db',\n 'high-contrast': '#fff3db',\n },\n 'warning-10': {\n light: '#ffe0a3',\n 'high-contrast': '#ffe0a3',\n },\n 'warning-20': {\n light: '#ffc95c',\n 'high-contrast': '#ffc95c',\n },\n 'warning-30': {\n light: '#ffb114',\n 'high-contrast': '#ffb114',\n },\n 'warning-40': {\n light: '#c78500',\n 'high-contrast': '#c78500',\n },\n 'warning-50': {\n light: '#9e6a00',\n 'high-contrast': '#9e6a00',\n },\n 'warning-60': {\n light: '#8a5c00',\n 'high-contrast': '#8a5c00',\n },\n 'warning-70': {\n light: '#614100',\n 'high-contrast': '#614100',\n },\n 'warning-80': {\n light: '#422c00',\n 'high-contrast': '#422c00',\n },\n 'warning-90': {\n light: '#2e1f00',\n 'high-contrast': '#2e1f00',\n },\n 'warning-95': {\n light: '#241800',\n 'high-contrast': '#241800',\n },\n\n 'success-5': {\n light: '#eaf6ec',\n 'high-contrast': '#eaf6ec',\n },\n 'success-10': {\n light: '#d8eedd',\n 'high-contrast': '#d8eedd',\n },\n 'success-20': {\n light: '#a9dab4',\n 'high-contrast': '#a9dab4',\n },\n 'success-30': {\n light: '#7ec88e',\n 'high-contrast': '#7ec88e',\n },\n 'success-40': {\n light: '#3fa654',\n 'high-contrast': '#3fa654',\n },\n 'success-50': {\n light: '#228738',\n 'high-contrast': '#228738',\n },\n 'success-60': {\n light: '#267337',\n 'high-contrast': '#267337',\n },\n 'success-70': {\n light: '#285d33',\n 'high-contrast': '#285d33',\n },\n 'success-80': {\n light: '#1f4727',\n 'high-contrast': '#1f4727',\n },\n 'success-90': {\n light: '#122b18',\n 'high-contrast': '#122b18',\n },\n 'success-95': {\n light: '#0e2012',\n 'high-contrast': '#0e2012',\n },\n\n 'point-5': {\n light: '#fbeff0',\n 'high-contrast': '#fbeff0',\n },\n 'point-10': {\n light: '#f5d6d9',\n 'high-contrast': '#f5d6d9',\n },\n 'point-20': {\n light: '#ebadb2',\n 'high-contrast': '#ebadb2',\n },\n 'point-30': {\n light: '#e0858c',\n 'high-contrast': '#e0858c',\n },\n 'point-40': {\n light: '#d65c66',\n 'high-contrast': '#d65c66',\n },\n 'point-50': {\n light: '#d63d4a',\n 'high-contrast': '#d63d4a',\n },\n 'point-60': {\n light: '#ab2b36',\n 'high-contrast': '#ab2b36',\n },\n 'point-70': {\n light: '#7a1f26',\n 'high-contrast': '#7a1f26',\n },\n 'point-80': {\n light: '#521419',\n 'high-contrast': '#521419',\n },\n 'point-90': {\n light: '#310c0f',\n 'high-contrast': '#310c0f',\n },\n 'point-95': {\n light: '#21080a',\n 'high-contrast': '#21080a',\n },\n\n 'graphic-10': {\n light: '#e5ecf9',\n 'high-contrast': '#e5ecf9',\n },\n 'graphic-30': {\n light: '#98acc5',\n 'high-contrast': '#98acc5',\n },\n 'graphic-50': {\n light: '#61758f',\n 'high-contrast': '#61758f',\n },\n 'graphic-70': {\n light: '#39506c',\n 'high-contrast': '#39506c',\n },\n 'graphic-90': {\n light: '#223a58',\n 'high-contrast': '#223a58',\n },\n};\n\n// Helper function to get color by mode\nexport const getColor = (\n colorName: keyof typeof colors,\n mode: ColorThemeMode = 'light',\n): string => {\n return colors[colorName][mode];\n};\n\n// Helper to get all colors for a specified mode\nexport const getThemeColors = (\n mode: ColorThemeMode = 'light',\n): Record<string, string> => {\n const themeColors: Record<string, string> = {};\n\n Object.entries(colors).forEach(([colorName, modeValues]) => {\n themeColors[colorName] = modeValues[mode];\n });\n\n return themeColors;\n};\n","import * as styles from './Body.module.css';\nimport * as React from 'react';\nimport { colors, getColor } from '../../styles/color/color';\nimport type { BodyProps } from './Body.type';\n\n/**\n * Body 컴포넌트 😸\n * 본문 텍스트 렌더링 dak-t1, dak-t2 스타일을 적용합니다.\n *\n * - @param props - Body 컴포넌트의 props\n * - @param size - 본문 텍스트의 크기 (1 또는 2)\n * - @param weight - 본문 텍스트의 두께 ('regular', 'semibold', 'bold')\n * - @param color - 본문 텍스트의 색상\n * - @param children - 렌더링할 텍스트 또는 노드\n * - @param className - 추가로 적용할 클래스 이름\n * - @param label - 본문 텍스트의 레이블\n */\n\nexport function Body<E extends React.ElementType = 'p'>({\n size = 1,\n weight = 'regular',\n color = 'gray-90',\n children,\n label,\n className = '',\n ...props\n}: BodyProps<E>) {\n let colorStyle: React.CSSProperties = {};\n if (color in colors) {\n colorStyle.color = getColor(color as keyof typeof colors);\n } else {\n colorStyle.color = color;\n }\n\n return (\n <p\n className={`${styles.body} ${styles[`size_${size}`]} ${styles[`weight_${weight}`]} ${className}`.trim()}\n style={colorStyle}\n {...props}>\n {children ? children : label}\n </p>\n );\n}\n","import { useEffect, useState } from 'react';\n\nconst useIsMobile = (breakpoint = 768) => {\n const [isMobile, setIsMobile] = useState(false);\n\n useEffect(() => {\n const update = () => setIsMobile(window.innerWidth <= breakpoint);\n update();\n window.addEventListener('resize', update);\n return () => window.removeEventListener('resize', update);\n }, [breakpoint]);\n\n return isMobile;\n};\n\nexport default useIsMobile;\n","import * as style from './Breadcrumb.module.css';\nimport type React from 'react';\nimport { Icon } from '../Icon';\nimport { Label } from '../Label';\nimport type { BreadcrumbProps } from './Breadcrumb.type';\nimport useIsMobile from './useIsMobile';\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({ items, onItemClick }) => {\n const isMobile = useIsMobile();\n\n return (\n <nav aria-label='브레드크럼'>\n <ol className={style.list}>\n {items.map((item, index) => (\n <li key={item.label} className={style.item}>\n {index > 0 && <Icon icon='ArrowRight' size={20} viewBox='0 0 20 20' />}\n <Label\n id={item.label}\n onClick={() => {\n onItemClick?.(item.value);\n item.onClick?.();\n }}\n color='gray-90'\n size='xs'\n className={style.label}\n tabIndex={0}>\n {index === 0 && <Icon icon='Home' size={20} viewBox='0 0 20 20' />}\n <span title={item.label}>\n {isMobile && item.label.length > 4 ? `${item.label.slice(0, 4)}...` : item.label}\n </span>\n </Label>\n </li>\n ))}\n </ol>\n </nav>\n );\n};\n",".spinner {\n\tdisplay: inline-flex;\n\tjustify-content: center;\n\talign-items: center;\n}\n\n.svg {\n\tanimation: spin 1s linear infinite;\n}\n\n.circle {\n\topacity: 0.25;\n}\n\n.path {\n\topacity: 0.75;\n}\n\n.s {\n\twidth: 1.25rem;\n\theight: 1.25rem;\n}\n\n.m {\n\twidth: 2rem;\n\theight: 2rem;\n}\n\n.l {\n\twidth: 3rem;\n\theight: 3rem;\n}\n\n@keyframes spin {\n\tto {\n\t\ttransform: rotate(360deg);\n\t}\n}\n","import * as style from './Spinner.module.css';\nimport type { SpinnerProps } from './Spinner.type.ts';\n\nexport const Spinner = ({ size = 'm', className = '' }: SpinnerProps) => {\n const sizeClass = style[size] ?? '';\n const spinnerClass = `${style.spinner} ${sizeClass} ${className}`.trim();\n\n return (\n <div className={spinnerClass} role='status' aria-hidden='true'>\n <svg className={style.svg} viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <circle className={style.circle} cx='12' cy='12' r='9' stroke='#CDD1D5' strokeWidth='2' />\n <path\n className={style.path}\n fill='#256EF4'\n d='M12 2a10 10 0 0110 10 10 10 0 01-5 8.66l-1-1.73a8 8 0 004-6.93 8 8 0 00-8-8V2z'\n />\n </svg>\n </div>\n );\n};\n",".button {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tgap: 0.25rem;\n\tletter-spacing: -0.02em;\n\ttransition: all 0.2s;\n\toutline: none;\n\tborder: none;\n\tcursor: pointer;\n\tuser-select: none;\n\tfont-family: inherit;\n\twhite-space: nowrap;\n}\n.button:focus {\n\toutline: none;\n\tbox-shadow:\n\t\t0 0 0 2px var(--krds-color-gray-0),\n\t\t0 0 0 4px var(--krds-color-primary-40);\n}\n.button span {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tvertical-align: middle;\n}\n.icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tvertical-align: middle;\n}\n.content {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tvertical-align: middle;\n}\n.custom {\n\tbackground: var(--btn-bg, var(--krds-color-primary-50));\n\tcolor: var(--btn-color, var(--krds-color-gray-0));\n}\n.custom:hover:not(.disabled) {\n\tbackground: var(--btn-bg, var(--krds-color-primary-60));\n\topacity: 0.8;\n}\n.custom:active:not(.disabled) {\n\tbackground: var(--btn-bg, var(--krds-color-primary-70));\n}\n.primary {\n\tbackground: var(--krds-color-primary-50);\n\tcolor: var(--krds-color-gray-0);\n}\n.primary:hover:not(.disabled) {\n\tbackground: var(--krds-color-primary-60);\n}\n.primary:active:not(.disabled) {\n\tbackground: var(--krds-color-primary-70);\n}\n.secondary {\n\tbackground: var(--krds-color-primary-5);\n\tcolor: var(--krds-color-primary-60);\n\tborder: 1px solid var(--krds-color-primary-50);\n}\n.secondary:hover:not(.disabled) {\n\tbackground: var(--krds-color-primary-10);\n}\n.secondary:active:not(.disabled) {\n\tbackground: var(--krds-color-primary-20);\n}\n.teriary {\n\tbackground: var(--krds-color-gray-0);\n\tcolor: var(--krds-color-gray-90);\n\tborder: 1px solid var(--krds-color-gray-60);\n}\n.teriary:hover:not(.disabled) {\n\tbackground: var(--krds-color-gray-5);\n}\n.teriary:active:not(.disabled) {\n\tbackground: var(--krds-color-gray-10);\n}\n.text {\n\tbackground: transparent;\n\tcolor: var(--krds-color-gray-90);\n}\n.text:hover:not(.disabled) {\n\tcolor: var(--krds-color-primary-50);\n}\n.text:active:not(.disabled) {\n\tcolor: var(--krds-color-primary-60);\n}\n.gray {\n\tbackground: var(--krds-color-gray-10);\n\tcolor: var(--krds-color-gray-90);\n}\n.gray:hover:not(.disabled) {\n\tbackground: var(--krds-color-gray-20);\n}\n.gray:active:not(.disabled) {\n\tbackground: var(--krds-color-gray-30);\n}\n.danger {\n\tbackground: var(--krds-color-danger-50);\n\tcolor: var(--krds-color-gray-0);\n}\n.danger:hover:not(.disabled) {\n\tbackground: var(--krds-color-danger-60);\n}\n.danger:active:not(.disabled) {\n\tbackground: var(--krds-color-danger-70);\n}\n.danger-secondary {\n\tbackground: var(--krds-color-gray-0);\n\tcolor: var(--krds-color-danger-60);\n\tborder: 1px solid var(--krds-color-danger-50);\n}\n.danger-secondary:hover:not(.disabled) {\n\tbackground: var(--krds-color-danger-5);\n}\n.danger-secondary:active:not(.disabled) {\n\tbackground: var(--krds-color-danger-10);\n}\n.black {\n\tbackground: var(--krds-color-graphic-70);\n\tcolor: var(--krds-color-gray-0);\n}\n.black:hover:not(.disabled) {\n\tbackground: var(--krds-color-graphic-90);\n}\n.black:active:not(.disabled) {\n\tbackground: var(--krds-color-gray-90);\n}\n\n.success {\n\tbackground: var(--krds-color-success-40);\n\tcolor: var(--krds-color-gray-0);\n}\n.success:hover:not(.disabled) {\n\tbackground: var(--krds-color-success-50);\n}\n.success:active:not(.disabled) {\n\tbackground: var(--krds-color-success-60);\n}\n.success-secondary {\n\tbackground: var(--krds-color-success-5);\n\tcolor: var(--krds-color-success-50);\n\tborder: 1px solid var(--krds-color-success-50);\n}\n.success-secondary:hover:not(.disabled) {\n\tbackground: var(--krds-color-success-10);\n}\n.success-secondary:active:not(.disabled) {\n\tbackground: var(--krds-color-success-20);\n}\n.warning {\n\tbackground: var(--krds-color-warning-20);\n\tcolor: var(--krds-color-gray-90);\n}\n.warning:hover:not(.disabled) {\n\tbackground: var(--krds-color-warning-30);\n}\n.warning:active:not(.disabled) {\n\tbackground: var(--krds-color-warning-40);\n}\n.outline {\n\tbackground: var(--krds-color-gray-0);\n\tcolor: var(--krds-color-gray-90);\n\tborder: 1px solid var(--btn-border-color, var(--krds-color-gray-80));\n}\n.outline:hover:not(.disabled) {\n\tbackground: var(--krds-color-gray-10);\n}\n.outline:active:not(.disabled) {\n\tbackground: var(--krds-color-gray-20);\n}\n.transparent {\n\tbackground: transparent;\n\tcolor: var(--krds-color-primary-50);\n}\n.transparent:hover:not(.disabled) {\n\tcolor: var(--krds-color-primary-30);\n}\n.transparent:active:not(.disabled) {\n\tcolor: var(--krds-color-primary-40);\n}\n\n.disabled {\n\tcursor: not-allowed;\n\tbackground: var(--krds-color-gray-20);\n\tcolor: var(--krds-color-gray-50);\n\tpointer-events: none;\n\tborder: 1px solid transparent;\n}\n\n/* Size */\n.xs {\n\tfont-size: 0.9375rem;\n\tline-height: 1.5rem;\n\tpadding: 0 0.625rem;\n\twidth: 3.75rem;\n\theight: 2rem;\n}\n.s {\n\tfont-size: 0.9375rem;\n\tline-height: 1.5rem;\n\tpadding: 0 0.75rem;\n\twidth: 4rem;\n\theight: 2.5rem;\n}\n.m {\n\tfont-size: 1.0625rem;\n\tline-height: 1.625rem;\n\tpadding: 0 1rem;\n\twidth: 4.875rem;\n\theight: 3rem;\n}\n.l {\n\tfont-size: 1.1875rem;\n\tline-height: 1.875rem;\n\tpadding: 0 1.25rem;\n\twidth: 5.625rem;\n\theight: 3.5rem;\n}\n.xl {\n\tfont-size: 1.1875rem;\n\tline-height: 1.875rem;\n\tpadding: 0 1.5rem;\n\twidth: 6.125rem;\n\theight: 4rem;\n}\n","import type React from 'react';\nimport type { MouseEvent } from 'react';\nimport { Spinner } from '../Spinner';\nimport * as styles from './Button.module.css';\nimport type { ButtonProps } from './Button.type';\n\nexport function Button({\n type = 'button',\n label = '',\n variant = 'primary',\n onClick = () => {},\n disabled = false,\n className = '',\n width = '100%',\n height,\n rounded = '6px',\n padding,\n icon,\n iconPosition = 'left',\n iconClassName = '',\n size = 'm',\n children,\n loading = false,\n loadingText,\n spinnerSize,\n color,\n borderColor,\n useIcon,\n ...props\n}: ButtonProps) {\n const shouldUseIcon = useIcon ?? (!!icon && !loading);\n const hasText = !!(children || label || loadingText);\n\n // 로딩 중이거나 disabled일 때 비활성화\n const isDisabled = disabled || loading;\n\n const variantClass = styles[variant] || '';\n const sizeClass = styles[size] || '';\n const disabledClass = isDisabled ? styles.disabled : '';\n const buttonClass =\n `${styles.button} ${variantClass} ${sizeClass} ${disabledClass} ${className}`.trim();\n\n // 로딩 중일 때 클릭 방지\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (loading || disabled) {\n event.preventDefault();\n return;\n }\n onClick?.(event);\n };\n\n // 표시할 텍스트 결정\n const displayText = loading && loadingText ? loadingText : children || label;\n\n return (\n <button\n type={type}\n role='button'\n onClick={handleClick}\n disabled={isDisabled}\n aria-disabled={isDisabled}\n aria-busy={loading}\n tabIndex={isDisabled ? -1 : 0}\n style={\n {\n width,\n borderRadius: rounded,\n height,\n padding,\n '--btn-bg': color,\n '--btn-color': '#fff',\n '--btn-border-color': borderColor,\n } as React.CSSProperties\n }\n className={buttonClass}\n {...props}>\n {/* 로딩 스피너 (항상 왼쪽에 표시) */}\n {loading && (\n <span className={styles.icon}>\n <Spinner size='s' />\n </span>\n )}\n\n {/* 아이콘 왼쪽 (로딩 중이 아닐 때만) */}\n {shouldUseIcon && iconPosition === 'left' && (\n <span className={iconClassName || styles.icon}>{icon}</span>\n )}\n\n {/* 텍스트 있을 때만 출력 */}\n {hasText && <span className={styles.content}>{displayText}</span>}\n\n {/* 아이콘 오른쪽 (로딩 중이 아닐 때만) */}\n {shouldUseIcon && iconPosition === 'right' && (\n <span className={iconClassName || styles.icon}>{icon}</span>\n )}\n </button>\n );\n}\n",".checkboxContainer {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 0.5rem;\n\tcursor: pointer;\n\n\t/*아웃라인 크기*/\n\tpadding: 4px;\n}\n\n.checkboxBox {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tbox-sizing: border-box;\n\tborder: 1px solid var(--krds-color-gray-60);\n\tborder-radius: 4px;\n\tposition: relative;\n\ttransition: all 0.3s ease;\n\tflex-shrink: 0;\n}\n\n.checkbox_m {\n\twidth: 1.25rem;\n\theight: 1.25rem;\n\tfont-size: 1.063rem;\n}\n\n.checkbox_l {\n\twidth: 1.5rem;\n\theight: 1.5rem;\n\tfont-size: 1.188rem;\n}\n\n.on {\n\tbackground-color: var(--checkbox-bg, var(--krds-color-primary-50));\n\tborder-color: var(--checkbox-border, var(--krds-color-primary-50));\n\tcolor: var(--checkbox-icon, var(--krds-color-gray-0));\n\t/* background-color: var(--krds-color-primary-50);\n\tborder-color: var(--krds-color-primary-50);\n\tcolor: var(--krds-color-gray-0); */\n}\n\n.off {\n\tbackground-color: var(--krds-color-gray-0);\n\tborder-color: var(--krds-color-gray-60);\n}\n\n.disabled {\n\tbackground-color: var(--krds-color-gray-20);\n\tborder-color: var(--krds-color-gray-30);\n\tcolor: var(--krds-color-gray-40);\n\tcursor: not-allowed;\n}\n\n.srOnly {\n\tposition: absolute;\n\twidth: 1px;\n\theight: 1px;\n\tpadding: 0;\n\tmargin: -1px;\n\toverflow: hidden;\n\tclip: rect(0, 0, 0, 0);\n\twhite-space: nowrap;\n\tborder: 0;\n}\n\n/* 실제 input을 시각적으로 숨기되 포커스 가능하게 */\n.checkboxInput {\n\tposition: absolute;\n\twidth: 1px;\n\theight: 1px;\n\tpadding: 0;\n\tmargin: -1px;\n\toverflow: hidden;\n\tclip: rect(0, 0, 0, 0);\n\twhite-space: nowrap;\n\tborder: 0;\n}\n\n/* input 포커스 시 시각적 박스에 표시 */\n.checkboxInput:focus-visible + .checkboxBox {\n\tbox-shadow: 0 0 0 2px white, 0 0 0 4px var(--krds-color-primary-50);\n\t/*outline: 2px solid var(--krds-color-primary-50);*/\n\t/*outline-offset: 2px;*/\n}\n\n/* 라벨 스타일 */\n.checkboxLabel {\n\tcursor: pointer;\n\ttransition: color 0.3s ease;\n\tfont-weight: 400;\n\tcolor: var(--krds-color-gray-90);\n}\n\n.label_m {\n\tfont-size: 15px;\n\tline-height: 24px;\n}\n\n.label_l {\n\tfont-size: 17px;\n\tline-height: 26px;\n}\n\n.group {\n\tdisplay: flex;\n}\n\n.groupHorizontal {\n\tflex-direction: row;\n\tgap: 20px;\n}\n\n.groupVertical {\n\tflex-direction: column;\n\tgap: 20px;\n}\n\n.label {\n\tcursor: pointer;\n\ttransition: color 0.3s ease;\n\tfont-weight: 400;\n\tcolor: var(--krds-color-gray-90);\n}\n\n.labelDisabled {\n\tcursor: not-allowed;\n\tcolor: var(--krds-color-gray-50);\n}\n","import type React from 'react';\nimport * as styles from './Checkbox.module.css';\nimport type { CheckboxGroupProps, CheckboxProps } from './Checkbox.type';\n\n// ✅ 체크 아이콘 컴포넌트 (status === 'on'일 때 표시)\nconst CheckIcon = () => (\n // biome-ignore lint/a11y/noSvgWithoutTitle: <explanation>\n <svg viewBox='0 0 24 24' fill='none'>\n <path\n d='M20 6L9 17L4 12'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </svg>\n);\n\n/**\n * ✅ 단일 Checkbox 컴포넌트\n * - 커스텀 체크박스 렌더링 (실제 input + 시각적 span)\n * - 키보드 접근성 지원 (기본 checkbox 동작)\n * - 상태: 'on' | 'off'\n */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n id,\n status,\n onChange,\n label,\n disabled = false,\n size = 'm',\n accentColor,\n labelClassName,\n title,\n}) => {\n // 클릭 또는 키보드로 상태 토글\n const handleChange = () => {\n if (!disabled) {\n const nextStatus = status === 'on' ? 'off' : 'on';\n onChange(nextStatus);\n }\n };\n\n // 상태에 따라 스타일 클래스 적용\n const stateClass = disabled ? styles.disabled : styles[status];\n\n return (\n <label className={styles.checkboxContainer} htmlFor={id}>\n {/* 실제 input 요소 (접근성/폼 제출용) */}\n <input\n type='checkbox'\n id={id}\n title={title || label || id}\n checked={status === 'on'}\n onChange={handleChange}\n disabled={disabled}\n className={styles.checkboxInput}\n tabIndex={0}\n />\n {/* 시각적 박스 영역 */}\n <span\n className={`${styles.checkboxBox} ${styles[`checkbox_${size}`]} ${stateClass}`}\n aria-hidden='true'\n style={\n status === 'on' && accentColor\n ? ({\n '--checkbox-bg': accentColor,\n '--checkbox-border': accentColor,\n '--checkbox-icon': '#fff',\n } as React.CSSProperties)\n : undefined\n }>\n {/* 체크 상태일 때만 아이콘 표시 */}\n {status === 'on' && <CheckIcon />}\n </span>\n\n {/* 라벨이 있는 경우 렌더링 */}\n {label && (\n <span\n className={`${styles.checkboxLabel} ${styles[`label_${size}`]} ${disabled ? styles.labelDisabled : ''} ${labelClassName ?? ''}`}>\n {label}\n </span>\n )}\n </label>\n );\n};\n\n/**\n * ✅ CheckboxGroup 컴포넌트\n * - 여러 Checkbox 항목을 배열로 렌더링\n * - 선택된 값 배열(values)을 관리함\n * - 'labelKey', 'valueKey'를 통해 옵션 키를 지정 가능\n * - 방향은 수평(horizontal) 또는 수직(vertical)\n */\nexport const CheckboxGroup: React.FC<CheckboxGroupProps> = ({\n id,\n options,\n values,\n onChange,\n disabled = false,\n size = 'm',\n labelKey = 'label',\n valueKey = 'value',\n direction = 'horizontal',\n className,\n}) => {\n // 체크 상태 토글 핸들러\n const handleToggle = (value: string) => {\n if (disabled) return;\n\n const nextValues = values.includes(value)\n ? values.filter((v) => v !== value)\n : [...values, value];\n\n onChange(nextValues);\n };\n\n return (\n <div\n className={`${styles.group} ${\n direction === 'vertical' ? styles.groupVertical : styles.groupHorizontal\n } ${className}`}>\n {/* 각 옵션을 Checkbox로 렌더링 */}\n {options.map((option) => (\n <Checkbox\n key={option[valueKey]}\n id={`${id || 'checkbox-group'}-${option[valueKey]}`}\n status={values.includes(option[valueKey]) ? 'on' : 'off'}\n onChange={() => handleToggle(option[valueKey])}\n label={option[labelKey]}\n disabled={disabled}\n size={size}\n />\n ))}\n </div>\n );\n};\n","import { ChangeEvent, KeyboardEvent } from 'react';\nimport * as styles from './DakCheckBox.module.css';\nimport { DakCheckBoxProps } from './DakCheckBox.type';\n\nexport const DakCheckBox = ({\n id,\n label,\n checked = false,\n disabled = false,\n size = 'default',\n width = '100%',\n onChange,\n}: DakCheckBoxProps) => {\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.checked);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && !disabled) {\n e.preventDefault();\n onChange?.(!checked);\n }\n };\n\n // label이 없으면 span만 렌더\n const box = (\n <span\n className={`\n ${styles.checkboxBox} \n ${checked ? styles.checked : ''} \n ${disabled ? styles.disabled : ''} \n ${size === 'large' ? styles.large : ''}\n `}\n />\n );\n\n if (!label) {\n return (\n <div className={styles.checkboxWrapper}>\n <input\n type='checkbox'\n id={id}\n className={styles.checkboxInput}\n checked={checked}\n disabled={disabled}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n aria-checked={checked}\n tabIndex={0}\n />\n <span\n className={`\n ${styles.checkboxBox} \n ${checked ? styles.checked : ''} \n ${disabled ? styles.disabled : ''} \n ${size === 'large' ? styles.large : ''}\n ${!disabled ? styles.clickable : ''}\n `}\n />\n </div>\n );\n }\n\n return (\n <div className={styles.checkboxWrapper} style={{ width }}>\n <input\n type='checkbox'\n id={id}\n className={styles.checkboxInput}\n checked={checked}\n disabled={disabled}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n aria-checked={checked}\n tabIndex={0}\n />\n <label htmlFor={id} className={styles.checkboxLabel}>\n {box}\n <span className={disabled ? styles.disabledLabel : ''}>{label}</span>\n </label>\n </div>\n );\n};\n","import { DakCheckBox } from './DakCheckBox';\nimport * as styles from './DakCheckBoxGroup.module.css';\nimport { DakCheckBoxGroupProps } from './DakCheckBoxGroup.type';\n\nexport const DakCheckBoxGroup = ({\n options,\n value,\n onChange,\n valueKey = 'value',\n labelKey = 'label',\n size = 'default',\n direction = 'horizontal',\n width = 'auto',\n disabled = false,\n name,\n}: DakCheckBoxGroupProps) => {\n const handleChange = (optionValue: string) => {\n if (disabled) return;\n let newValue: string[];\n if (value.includes(optionValue)) {\n newValue = value.filter((v) => v !== optionValue);\n } else {\n newValue = [...value, optionValue];\n }\n onChange(newValue);\n };\n\n return (\n <fieldset\n className={`${styles.checkboxGroup} ${direction === 'vertical' ? styles.vertical : styles.horizontal}`}\n disabled={disabled}>\n <legend className={styles.visuallyHidden}>{name || 'Checkbox Group'}</legend>\n {options.map((option) => (\n <DakCheckBox\n key={option[valueKey]}\n id={`${name || 'checkbox'}-${option[valueKey]}`}\n label={option[labelKey]}\n checked={value.includes(option[valueKey])}\n disabled={disabled}\n size={size}\n width={width}\n onChange={() => handleChange(option[valueKey])}\n />\n ))}\n </fieldset>\n );\n};\n",".chipGroup {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: 16px;\n\twidth: 100%;\n}\n\n.formChip {\n\tdisplay: inline-block;\n}\n\n.radio {\n\tdisplay: none;\n}\n\n.outline {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: 0.25rem;\n\tborder: 1px solid var(--krds-color-gray-30);\n\tborder-radius: 6px;\n\tfont-weight: 400;\n\tcursor: pointer;\n\tbackground-color: var(--krds-color-gray-0);\n\tcolor: var(--krds-color-gray-90);\n\ttransition: 0.2s ease;\n\twidth: auto; /* 글자 길이만큼 자동 조절 */\n\tpadding: 8px 10px; /* 기본 패딩 (height prop이 없을 때) */\n\tbox-sizing: border-box;\n}\n\n.checked {\n\tborder-color: var(--krds-color-primary-50);\n\tbackground-color: #e6f0ff;\n\tcolor: var(--krds-color-primary-60);\n}\n\n.disabled {\n\tborder-color: var(--krds-color-gray-30);\n\tbackground-color: var(--krds-color-gray-20);\n\tcolor: var(--krds-color-gray-50);\n\tcursor: not-allowed;\n}\n\n.checkIcon {\n\twidth: 1.25rem;\n\theight: 1.25rem;\n\tflex-shrink: 0;\n}\n\n/* size modifiers - height prop이 제공되지 않았을 때만 적용 */\n.l .outline:not([style*=\"height\"]) {\n\tfont-size: 15px;\n\tline-height: 24px;\n\tpadding: 12px 15px;\n}\n\n.m .outline:not([style*=\"height\"]) {\n\tfont-size: 14px;\n\tline-height: 24px;\n\tpadding: 10px 11px;\n}\n\n.s .outline:not([style*=\"height\"]) {\n\tfont-size: 13px;\n\tline-height: 24px;\n\tpadding: 7px 9px;\n}\n","import * as style from './ChipGroup.module.css';\nimport { uniqueId } from 'lodash-es';\nimport type { KeyboardEvent } from 'react';\nimport { Icon } from '../Icon';\nimport { Label } from '../Label';\nimport type { ChipGroupProps, ChipProps } from './ChipGroup.type';\n\nexport const Chip = ({\n id = `chip-${uniqueId()}`,\n label,\n checked = false,\n disabled = false,\n size = 'm',\n onChange,\n type = 'single',\n height,\n}: ChipProps) => {\n let iconName: 'ChipChecked' | 'ChipUnchecked' | 'ChipDisabled' | null = null;\n\n if (type === 'multi' && disabled) {\n iconName = 'ChipDisabled';\n } else if (checked) {\n iconName = 'ChipChecked';\n } else if (type === 'multi' && !checked) {\n iconName = 'ChipUnchecked';\n }\n\n const handleClick = () => {\n if (!disabled) {\n const newChecked = type === 'single' ? true : !checked;\n if (onChange) {\n onChange(newChecked);\n }\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleClick();\n }\n };\n\n const wrapperClass = [style.formChip, style[size]].join(' ');\n const labelClass = [style.outline, checked && style.checked, disabled && style.disabled]\n .filter(Boolean)\n .join(' ');\n\n const labelStyle = height ? { height: `${height}px`, padding: '8px 10px' } : {};\n\n return (\n <div className={wrapperClass}>\n <input\n type={type === 'multi' ? 'checkbox' : 'radio'}\n className={style.radio}\n id={id}\n checked={checked}\n disabled={disabled}\n readOnly\n />\n <Label\n as='label'\n id={id}\n role={type}\n aria-checked={checked}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={`${labelClass}`}\n style={labelStyle}>\n {iconName && (\n <Icon icon={iconName} size={16} className={style.checkIcon} aria-hidden='true' />\n )}\n {label}\n </Label>\n </div>\n );\n};\n\nexport const ChipGroup = ({\n options,\n selected,\n onChange,\n type = 'multi',\n size = 'm',\n disabled = false,\n labelKey = 'label',\n valueKey = 'value',\n className = '',\n height,\n}: ChipGroupProps) => {\n const chipGroupClass = [style.chipGroup, className].filter(Boolean).join(' ');\n\n return (\n <div className={chipGroupClass}>\n {options.map((item) => {\n const label = item[labelKey];\n const value = item[valueKey];\n const isChecked = selected.includes(value);\n\n return (\n <Chip\n key={value}\n id={`chip-${value}`}\n label={label}\n checked={isChecked}\n onChange={(checked) => onChange(value, checked, label)}\n type={type}\n size={size}\n disabled={disabled}\n height={height}\n />\n );\n })}\n </div>\n );\n};\n","import { ScheduleEvent } from 'src/components';\n\n/**\n * 특정 요일과 날짜를 제외한 연속 이벤트 생성 함수\n *\n * 이 함수는 지정된 기간 동안의 연속 이벤트를 생성하되,\n * 특정 요일이나 날짜를 제외하여 여러 개의 분할된 이벤트로 만듭니다.\n *\n * @example\n * // 월요일만 제외\n * createExcludedDaysEvent('event1', '업무', '2025-08-01', '2025-08-31', {\n * excludeDaysOfWeek: [1], // 월요일 제외\n * backgroundColor: '#007bff'\n * });\n *\n * // 주말과 특정 공휴일 제외\n * createExcludedDaysEvent('event2', '근무일', '2025-08-01', '2025-08-31', {\n * excludeDaysOfWeek: [0, 6], // 일요일, 토요일 제외\n * excludeDates: ['2025-08-15'], // 광복절 제외\n * backgroundColor: '#28a745'\n * });\n */\nexport const createExcludedDaysEvent = (\n /**\n * 이벤트의 고유 식별자\n * 생성되는 각 분할 이벤트는 \"{id}-0\", \"{id}-1\" 형태로 ID가 생성됩니다.\n *\n * @example 'summer-event' → 'summer-event-0', 'summer-event-1', ...\n */\n id: string,\n\n /**\n * 이벤트의 제목 (달력에 표시될 텍스트)\n * 모든 분할된 이벤트에 동일하게 적용됩니다.\n *\n * @example '여름 휴가 기간', '프로젝트 진행 기간'\n */\n title: string,\n\n /**\n * 이벤트 시작 날짜\n * ISO 8601 형식의 날짜 문자열 (YYYY-MM-DD)\n *\n * @example '2025-08-01', '2025-12-25'\n */\n startDate: string,\n\n /**\n * 이벤트 종료 날짜 (포함)\n * ISO 8601 형식의 날짜 문자열 (YYYY-MM-DD)\n * 이 날짜까지 포함하여 이벤트가 생성됩니다.\n *\n * @example '2025-08-31' → 8월 31일까지 포함\n */\n endDate: string,\n\n /**\n * 이벤트 생성 옵션 객체\n */\n options: {\n /**\n * 이벤트 배경색\n * CSS 색상 값 (hex, rgb, rgba, 색상명 등)\n *\n * @example '#007bff', 'rgb(255, 0, 0)', 'blue'\n */\n backgroundColor?: string;\n\n /**\n * 이벤트 테두리색\n * CSS 색상 값 (hex, rgb, rgba, 색상명 등)\n * 설정하지 않으면 backgroundColor와 동일하게 적용됩니다.\n *\n * @example '#0056b3', 'rgba(0, 0, 0, 0.3)'\n */\n borderColor?: string;\n\n /**\n * 이벤트 텍스트 색상\n * CSS 색상 값 (hex, rgb, rgba, 색상명 등)\n * 배경색과 대비되는 색상을 선택하여 가독성을 높이세요.\n *\n * @example '#ffffff' (흰색), '#000000' (검은색)\n */\n textColor?: string;\n\n /**\n * 이벤트의 모서리 둥글기\n * CSS border-radius 값\n *\n * @example\n * '8px' - 기본 둥근 모서리\n * '50%' - 완전한 원형 (pill 형태)\n * '0px' - 각진 모서리\n * '4px 8px' - 비대칭 둥글기\n */\n borderRadius?: string;\n\n /**\n * 제외할 요일들의 배열\n * 숫자로 요일을 지정합니다.\n * 0 = 일요일, 1 = 월요일, 2 = 화요일, 3 = 수요일,\n * 4 = 목요일, 5 = 금요일, 6 = 토요일\n *\n * @example\n * [1] - 월요일만 제외\n * [0, 6] - 주말(일요일, 토요일) 제외\n * [1, 3, 5] - 월요일, 수요일, 금요일 제외\n * [] - 요일 제외 없음\n */\n excludeDaysOfWeek?: number[];\n\n /**\n * 제외할 특정 날짜들의 배열\n * ISO 8601 형식의 날짜 문자열 배열 (YYYY-MM-DD)\n * 공휴일, 휴가일, 특별한 날 등을 제외할 때 사용합니다.\n *\n * @example\n * ['2025-08-15'] - 광복절만 제외\n * ['2025-12-25', '2025-01-01'] - 크리스마스, 신정 제외\n * ['2025-08-10', '2025-08-20', '2025-08-30'] - 여러 특정 날짜 제외\n * [] - 특정 날짜 제외 없음\n */\n excludeDates?: string[];\n } = {},\n) => {\n const events: ScheduleEvent[] = [];\n const start = new Date(startDate);\n const end = new Date(endDate);\n\n const excludeDaysSet = new Set(options.excludeDaysOfWeek || []);\n const excludeDatesSet = new Set(options.excludeDates || []);\n\n let segmentStart: Date | null = null;\n let segmentId = 0;\n const current = new Date(start);\n\n while (current <= end) {\n const currentDateString = current.toISOString().split('T')[0];\n const currentDayOfWeek = current.getDay();\n\n // 제외해야 할 날짜인지 확인\n const shouldExclude =\n excludeDaysSet.has(currentDayOfWeek) || excludeDatesSet.has(currentDateString);\n\n if (!shouldExclude) {\n // 포함되는 날짜\n if (!segmentStart) {\n segmentStart = new Date(current);\n }\n } else {\n // 제외되는 날짜\n if (segmentStart) {\n const segmentEnd = new Date(current);\n events.push({\n id: `${id}-${segmentId++}`,\n title,\n start: segmentStart.toISOString().split('T')[0],\n end: segmentEnd.toISOString().split('T')[0],\n allDay: true,\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n textColor: options.textColor,\n borderRadius: options.borderRadius,\n });\n segmentStart = null;\n }\n }\n\n current.setDate(current.getDate() + 1);\n }\n\n // 마지막 세그먼트 처리\n if (segmentStart) {\n const segmentEnd = new Date(end);\n segmentEnd.setDate(segmentEnd.getDate() + 1);\n events.push({\n id: `${id}-${segmentId++}`,\n title,\n start: segmentStart.toISOString().split('T')[0],\n end: segmentEnd.toISOString().split('T')[0],\n allDay: true,\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n textColor: options.textColor,\n borderRadius: options.borderRadius,\n });\n }\n\n return events;\n};\n","import {\n ChronoUnit,\n DateTimeFormatter,\n DayOfWeek,\n Instant,\n LocalDate,\n LocalDateTime,\n TemporalAdjusters,\n ZoneId,\n ZonedDateTime,\n convert,\n nativeJs,\n} from '@js-joda/core';\n\nexport enum DateTimeFormat {\n YearMonthDays = 'yyyy-MM-dd',\n YearMonthDays2 = 'yyyy. MM. dd',\n YearMonthDaysDot = 'yyyy.MM.dd',\n YearMonthDaysKo = 'yyyy년 MM월 dd일',\n YearMonthDayWithNoSlash = 'yyyyMMdd',\n Full = 'yyyy-MM-dd HH:mm:ss',\n FullWithOutSec = 'yyyy-MM-dd HH:mm',\n FullWithAMPM = 'yyyy-MM-dd a hh:mm',\n Year = 'yyyy',\n MonthDays = 'MM.dd',\n MonthDays2 = 'MM-dd',\n Days = 'dd',\n Time = 'HH:mm',\n TimeWithAMPM = 'hh:mm',\n TimeSec = 'HH:mm:ss',\n YearMonth = 'yyyy. MM',\n YearMonth2 = 'yyyy-MM',\n}\n\nconst regNoExpFront = /^[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1])$/;\nconst validateRegNoExpFront = (number: string) => {\n return regNoExpFront.test(number);\n};\n\nconst regNoExpBack = /^[0-9][0-9]{6}$/;\nconst validateRegNoExpBack = (number: string) => {\n return regNoExpBack.test(number);\n};\n\n/**\n * Date 객체를 ZonedDateTime 으로 변환한다.\n * @param date Date 객체\n * @returns ZonedDateTime\n */\nexport const convertDateToZonedDateTime = (date: Date) => {\n const instant = Instant.ofEpochMilli(date.getTime());\n const zoneId = ZoneId.systemDefault();\n return ZonedDateTime.ofInstant(instant, zoneId);\n};\n\n/**\n * ZonedDateTime => 한국 시간으로 변경\n */\nexport const parseZoneDateTimeToLocalFullTime = (date: string, locale = 'ko-KR') => {\n const ldt = LocalDateTime.parse(date);\n const jsDate = convert(ldt).toDate();\n\n return jsDate.toLocaleDateString(locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n};\n\n/**\n * ZoneDateTime Parse With System default\n * @param date string 또는 Date, string 은 날짜 형식이 포함되어야 한다.\n */\nexport const parseZoneDateTime = (date?: string | Date) => {\n const time = date\n ? typeof date === 'string'\n ? new Date(date.replace('[UTC]', '')).toISOString()\n : date.toISOString()\n : new Date().toISOString();\n\n return ZonedDateTime.parse(time)\n .withZoneSameInstant(ZoneId.systemDefault())\n .withFixedOffsetZone();\n};\n\n/**\n * 입력한 시간을 정해진 포맷과 함께 반환한다. (기본값은 현재시간)\n * @param date\n * @param format DateTimeFormat enum type 에서 선택 또는 string 으로 직접 작성. 기본값은 yyyy-MM-dd\n * @example dateNowWithFormat() // 2021-03-01\n * dateNowWithFormat(DateTimeFormat.full) // 2021-03-01 09:00:00\n */\nexport const dateWithFormat = (date?: string | Date, format?: DateTimeFormat | string) => {\n return parseZoneDateTime(date ? date : new Date().toISOString()).format(\n DateTimeFormatter.ofPattern(format ? format : DateTimeFormat.YearMonthDays),\n );\n};\n\nexport const dateWithFormatDot = (date?: string | Date, format?: DateTimeFormat | string) => {\n return parseZoneDateTime(date ? date : new Date().toISOString()).format(\n DateTimeFormatter.ofPattern(format ? format : DateTimeFormat.YearMonthDaysDot),\n );\n};\n\n/**\n *\n * @param date\n * @param format\n * @returns hh:mm\n */\nexport const timeWithFormat = (date?: string | Date) => {\n const selectedDay = parseZoneDateTime(date ? date : new Date().toISOString());\n const hours = selectedDay.hour() % 12 ? selectedDay.hour() % 12 : 12;\n const minutes = selectedDay.minute() < 10 ? `0${selectedDay.minute()}` : selectedDay.minute();\n const ampm = selectedDay.hour() >= 12 ? 'PM' : 'AM';\n const formatDate = `${hours}:${minutes} ${ampm}`;\n\n return formatDate;\n};\n\n/**\n * 기준시간과 대상시간을 입력 받아 해당 날짜와의 차이를 구한다.\n * @param standard 기준이 될 시간\n * @param target 대상이 될 시간\n * @param unit 값을 반환 할 기준 (일, 월, 시간..) 기본값은 DAYS\n * @example daysBetweenTwoDate('2021-02-01', '2021-01-31') // 1\n * daysBetweenTwoDate('2021-01-30', '2021-03-15', ChronoUnit.MONTHS) // -1\n */\n\nexport const daysBetweenTwoDate = (\n standard: string | Date,\n target: string | Date,\n unit = ChronoUnit.DAYS,\n) => {\n const st = parseZoneDateTime(standard);\n const tg = parseZoneDateTime(target);\n\n return tg.until(st, unit);\n};\n\n/**\n * 대상 날짜 월 의 시작과 끝을 ZonedDateTime 형식으로 반환한다.\n * @param date\n *\n */\nexport const getFirstDayAndLastDayOfMonth = (date: string) => {\n return {\n firstDay: parseZoneDateTime(date),\n lastDay: parseZoneDateTime(\n LocalDate.parse(date).with(TemporalAdjusters.lastDayOfMonth()).toString(),\n ),\n };\n};\n\n/**\n * standard 날짜의 월이 target 의 월과 같은지 확인\n * @param standard 기준 날짜\n * @param target 대상 날짜\n * @returns boolean\n */\nexport const isBetweenUntilMonth = (standard: string | Date, target: string | Date) => {\n const st = parseZoneDateTime(standard);\n const tg = parseZoneDateTime(target);\n\n return st.monthValue() === tg.monthValue() && st.year() === tg.year();\n};\n\n/**\n * date 값이 속한 주의 시작일, 끝일을 반환\n * @param date 기준 날짜\n * @param startDayOfWeek 주의 시작 요일 (기본값: 일요일)\n */\nexport const getFirstAndLastDayOfWeek = (\n date: ZonedDateTime,\n startDayOfWeek: DayOfWeek = DayOfWeek.SUNDAY,\n) => {\n const firstDate = date.with(TemporalAdjusters.previousOrSame(startDayOfWeek));\n const lastDate = date.with(TemporalAdjusters.nextOrSame(startDayOfWeek.plus(6)));\n\n return {\n firstDate,\n lastDate,\n };\n};\n\nexport const regNoToDatePickerFormat = (regNo: string) => {\n const RegCodes = ['18', '19', '19', '20', '20', '19', '19', '20', '20', '18'];\n\n const frontRegNo = regNo.split('-')[0];\n const backRegNo = regNo.split('-')[1];\n\n if (!validateRegNoExpFront(frontRegNo) || !validateRegNoExpBack(backRegNo)) {\n return '';\n }\n const century = RegCodes[Number.parseInt(backRegNo[0], 10)];\n const yyyy = century + frontRegNo.substring(0, 2);\n const mm = frontRegNo.substring(2, 4);\n const dd = frontRegNo.substring(4, 6);\n\n return `${yyyy}-${mm}-${dd}`;\n};\n\nexport const regNoToBirthDateWithFormat = (\n regNo: string,\n format: DateTimeFormat | string = DateTimeFormat.YearMonthDays,\n) => {\n const date = regNoToDatePickerFormat(regNo);\n return LocalDate.parse(date).format(DateTimeFormatter.ofPattern(format));\n};\n\nexport const birthDateFormat = (birthDate: string) => {\n const yyyy = birthDate.substring(0, 4);\n const mm = birthDate.substring(4, 6);\n const dd = birthDate.substring(6, 8);\n return `${yyyy}-${mm}-${dd}`;\n};\n\nexport const parseStringToLocalDate = (date?: string, format?: DateTimeFormat | string) => {\n if (!date) return LocalDate.now();\n return LocalDate.parse(date, DateTimeFormatter.ofPattern(format ?? DateTimeFormat.YearMonthDays));\n};\n\nexport const numberToHHMMSS = (secs: number) => {\n const hours = Math.floor(secs / 3600);\n const minutes = Math.floor(secs / 60) % 60;\n const seconds = secs % 60;\n\n return [hours, minutes, seconds]\n .map((v) => (v < 10 ? `0${v}` : v))\n .filter((v, i) => v !== '00' || i > 0)\n .join(':');\n};\n\n/**\n * Tablet Safari 대응 임시 util\n */\n\nexport const parseZoneDateTimeTablet = (date?: string | Date) => {\n const time = date\n ? typeof date === 'string'\n ? new Date(date.replace(/-/g, '/'))\n : date\n : new Date();\n\n return ZonedDateTime.from(nativeJs(time))\n .withZoneSameInstant(ZoneId.systemDefault())\n .withFixedOffsetZone();\n};\n\nexport const daysBetweenTwoDateTablet = (\n standard: string | Date,\n target: string | Date,\n unit = ChronoUnit.DAYS,\n) => {\n const st = parseZoneDateTimeTablet(standard);\n const tg = parseZoneDateTimeTablet(target);\n\n return tg.until(st, unit);\n};\n\nexport const dateWithFormatTablet = (date?: string | Date, format?: DateTimeFormat | string) => {\n return parseZoneDateTimeTablet(date ? date.toString().replace(/-/g, '/') : new Date()).format(\n DateTimeFormatter.ofPattern(format ? format : DateTimeFormat.YearMonthDays),\n );\n};\n\nexport const dateWithFormatWithoutConvert = (date: string, format: string) => {\n return ZonedDateTime.from(nativeJs(new Date(date))).format(DateTimeFormatter.ofPattern(format));\n};\n\nexport const parseStringToLocalDateTime = (date: string, format: DateTimeFormat | string) => {\n const formatter = DateTimeFormatter.ofPattern(format);\n return LocalDateTime.parse(date, formatter);\n};\n\nexport const parseStringToZonedDateTime = (date: string, format: DateTimeFormat | string) => {\n return parseStringToLocalDateTime(date, format)\n .atZone(ZoneId.systemDefault())\n .withFixedOffsetZone();\n};\n\n/** 타임존이 systemDefault로 세팅된 ZonedDateTime parser */\nexport const parseZonedDateTime = (zonedDateTimeString: string) =>\n ZonedDateTime.parse(zonedDateTimeString)\n .withZoneSameInstant(ZoneId.systemDefault())\n .withFixedOffsetZone();\n\n/** 타임존이 systemDefault로 세팅된 현재 시간의 ZonedDateTime */\nexport const getZonedDateTimeNow = () =>\n ZonedDateTime.now().withZoneSameInstant(ZoneId.systemDefault()).withFixedOffsetZone();\n\n/**\n * 1달 후 > return 28, 29, 30, 31 | 1년후 > return 364, 365 2달, 2년, 등등 일수 계산하여 리턴\n * @param day number // 1개월 후, 2개월 후, 1년 뒤, 2년 뒤 처럼 되었을 경우 앞 숫자 1,2,3....\n * @param period string // month, year\n */\nexport const getCalculateTheNumberOfDays = (day: number, period: string) => {\n if (!day) {\n return 0;\n }\n const now = new Date();\n const today = LocalDate.of(now.getFullYear(), now.getMonth() + 1, now.getDate());\n\n //month\n if (period === 'month') {\n const oneMonthLater = today.plus(day, ChronoUnit.MONTHS);\n const daysBetween = today.until(oneMonthLater, ChronoUnit.DAYS);\n return daysBetween;\n }\n\n //year\n const oneYearLater = today.plus(day, ChronoUnit.YEARS);\n const daysBetween = today.until(oneYearLater, ChronoUnit.DAYS);\n return daysBetween;\n};\n","import { useCallback, useRef } from 'react';\n\ninterface UseDelayToggle {\n onShow: VoidFunction;\n onHide: VoidFunction;\n /* css transiton duration\n * ms 단위로 입력해주세요\n */\n transitionDuration?: number;\n openDelay?: number;\n closeDelay?: number;\n}\n\nexport const useDelayToggle = ({\n transitionDuration = 1500,\n openDelay = 0,\n closeDelay = 0,\n onShow,\n onHide,\n}: UseDelayToggle) => {\n const enterTimeout = useRef<number | undefined>(undefined);\n const exitTimeout = useRef<number | undefined>(undefined);\n\n const delayedShow = useCallback(() => {\n if (exitTimeout.current) {\n clearTimeout(exitTimeout.current);\n exitTimeout.current = undefined;\n }\n\n enterTimeout.current = window.setTimeout(onShow, openDelay);\n }, [onShow, openDelay]);\n\n const delayedHide = useCallback(() => {\n if (enterTimeout.current) {\n clearTimeout(enterTimeout.current);\n enterTimeout.current = undefined;\n }\n\n exitTimeout.current = window.setTimeout(onHide, closeDelay + transitionDuration);\n }, [onHide, closeDelay, transitionDuration]);\n\n return { delayedShow, delayedHide };\n};\n","import { useCallback, useState } from 'react';\n\nimport { useDelayToggle } from './use-delay-toggle';\n\ninterface UseAnimationToggleProps {\n transitionDuration: number;\n onShow?: VoidFunction;\n onHide?: VoidFunction;\n openDelay?: number;\n closeDelay?: number;\n}\n\nexport const useAnimationToggle = ({\n transitionDuration,\n onShow: _onShow,\n onHide: _onHide,\n openDelay,\n closeDelay,\n}: UseAnimationToggleProps) => {\n const [isMounted, setIsMounted] = useState<boolean>(false);\n const [isTrigger, setIsTrigger] = useState<number>(0);\n\n const onShowCallback = useCallback(() => {\n if (_onShow) _onShow();\n setIsTrigger(100);\n }, [_onShow]);\n\n const onHideCallback = useCallback(() => {\n if (_onHide) _onHide();\n setIsMounted(false);\n }, [_onHide]);\n\n const { delayedShow, delayedHide } = useDelayToggle({\n transitionDuration,\n onShow: onShowCallback,\n onHide: onHideCallback,\n openDelay,\n closeDelay,\n });\n\n const onShow = useCallback(() => {\n setIsMounted(true);\n delayedShow();\n }, [delayedShow]);\n\n const onHide = useCallback(() => {\n setIsTrigger(0);\n delayedHide();\n }, [delayedHide]);\n\n return { mounted: isMounted, trigger: isTrigger, onShow, onHide };\n};\n","import { useEffect } from 'react';\n\nexport const useBlockDocumentScroll = (trigger: boolean) => {\n useEffect(() => {\n if (trigger) {\n document.body.style.overflow = 'hidden';\n return;\n }\n\n document.body.style.overflow = 'initial';\n }, [trigger]);\n};\n","import { useEffect } from 'react';\n\nexport const customEventService = {\n dispatch: <T extends string, V = void>(event: T, body?: CustomEventInit<V>) => {\n const customEvent = new CustomEvent(event, body);\n document.dispatchEvent(customEvent);\n },\n\n subscribe: <T extends string>(event: T, listener: EventListener) => {\n document.addEventListener(event, listener);\n },\n\n unSubscribe: <T extends string>(event: T, listener: EventListener) => {\n document.removeEventListener(event, listener);\n },\n};\n\ninterface UseCustomEventListenerProps<T extends string, P = void> {\n eventType: T;\n handler: (e: P) => void;\n depths?: unknown[];\n}\n\nexport const useCustomEventListener = <T extends string, P = void>({\n eventType,\n handler,\n depths = [],\n}: UseCustomEventListenerProps<T, P>) => {\n useEffect(() => {\n const cb = (event: Event) => {\n const eventData = event as CustomEvent<P>;\n return handler(eventData.detail);\n };\n customEventService.subscribe<T>(eventType, cb);\n return () => customEventService.unSubscribe<T>(eventType, cb);\n }, [eventType, handler, ...depths]);\n};\n","import { useCallback, useEffect, useRef } from 'react';\n\ninterface UseFocusInContentProps {\n id?: string;\n}\n\nconst focusableElements =\n 'button:not(:disabled), [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\n/**\n * 접근성 측면에서의 포커스 관리를 위한 Hook\n * id에 해당하는 content 내에서만 포커스 움직임\n *\n * - content 그 자체에 focus\n * - content내에서 focus 유지\n * 해당 기능을 위해 content내에 tabIndex 값 할당X\n * - content가 unmount 되었을때 마지막으로 focus된 el로 다시 focus\n */\nexport const useFocusInContent = ({ id }: UseFocusInContentProps) => {\n const lastFocusedElement = useRef<HTMLElement | null>(null);\n\n const handleKeydown = (e: KeyboardEvent) => {\n if (!id) return;\n\n const portals = document.getElementsByClassName('portal-wrap');\n const contentEl = Array.from(portals ?? []).find(\n (portal) => portal.getAttribute('data-id') === id,\n );\n\n if (!contentEl) return;\n\n // tab키 입력할 때 마다 focusable element 탐색을 위해\n const focusableList = contentEl.querySelectorAll(focusableElements);\n const firstElement = focusableList[0];\n const lastElement = focusableList[focusableList.length - 1];\n const isTabPressed = e.key === 'Tab';\n\n if (!isTabPressed) return;\n\n if (e.shiftKey) {\n if (document.activeElement === firstElement) {\n if (lastElement instanceof HTMLElement) lastElement.focus();\n e.preventDefault();\n return;\n }\n }\n\n if (document.activeElement === lastElement) {\n if (firstElement instanceof HTMLElement) firstElement.focus();\n\n e.preventDefault();\n }\n };\n\n const addEventForFocus = useCallback(() => {\n if (!id) return;\n\n const contentEl = document.getElementById(id);\n\n if (!contentEl) return;\n\n const forceFocusList = contentEl.querySelectorAll('[data-focus=\"true\"]');\n\n setFocusInContent(contentEl, forceFocusList);\n }, [id]);\n\n useEffect(() => {\n if (!id) return;\n\n if (!lastFocusedElement.current) {\n if (document.activeElement instanceof HTMLElement) {\n lastFocusedElement.current = document.activeElement;\n }\n }\n\n addEventForFocus();\n document.addEventListener('keydown', handleKeydown);\n\n return () => {\n document.removeEventListener('keydown', handleKeydown);\n\n if (lastFocusedElement.current instanceof HTMLElement) {\n lastFocusedElement.current.focus();\n }\n };\n }, [id, addEventForFocus]);\n};\n\nconst checkElementIsFocused = (el: Element) => {\n const { activeElement } = document;\n\n // focusable element가 없다면 body에 focus가 되므로 false\n if (activeElement === document.body) return false;\n if (activeElement === el) return true;\n\n return false;\n};\n\n// data-focus 속성을 가지고 있는 요소들이 content에 속하고 focusable 하다면\n// 해당 list 요소들에 순차적으로 focus하고 아니라면 modal에 focus를 준다.\nconst setFocusInContent = (content: HTMLElement, list: NodeListOf<Element>) => {\n for (const item of Array.from(list)) {\n if (item instanceof HTMLElement) item.focus();\n\n const isFocused = checkElementIsFocused(item);\n\n if (isFocused) return;\n }\n\n // data-focus를 가지고 있는 nodeList가 전부 focusable하지 않을 경우\n if (!content.contains(document.activeElement)) {\n content.setAttribute('tabIndex', '0');\n content.focus();\n }\n};\n","import { type MouseEvent, useRef, useState } from 'react';\n\n// TODO: 스토리 설명 추가하기\n/** modal 내부가 아닌 backdrop을 클릭해야만 모달이 닫히도록 함 (고객 요구사항) */\nexport const useHandleClickBackdrop = (onClickBackdrop: () => void) => {\n const [isClickBackdrop, setIsClickBackdrop] = useState(false);\n const backdropRef = useRef<HTMLDivElement>(null);\n\n const handleMouseDown = (e: MouseEvent) => {\n setIsClickBackdrop(e.target === backdropRef?.current);\n };\n\n const handleMouseUp = () => {\n if (!isClickBackdrop) return;\n onClickBackdrop();\n };\n\n return {\n backdropRef,\n handleMouseDown,\n handleMouseUp,\n };\n};\n","import { DayOfWeek, LocalDate, TemporalAdjusters } from '@js-joda/core';\nimport { useEffect, useState } from 'react';\nimport { getFirstDayAndLastDayOfMonth } from 'src/hooks';\nimport type { DayInfo } from '../DatePicker.type';\n\n/**\n * @Datepicker 캘린더 커스텀 훅 😸\n * 오늘, 현재 날짜, 이전/다음 달로 이동, 년도/월 변경, 날짜 정보 생성 및 클래스 이름 반환\n * 날짜 범위 정보 생성 및 반환\n */\n\nexport const useCalendar = ({\n selectedDate,\n type,\n selectedRange,\n minDate,\n maxDate,\n minYear,\n maxYear,\n}: {\n selectedDate?: LocalDate | null;\n type?: 'single' | 'range';\n selectedRange?: [LocalDate | null, LocalDate | null];\n minDate?: LocalDate | null;\n maxDate?: LocalDate | null;\n minYear?: number;\n maxYear?: number;\n}) => {\n const today = LocalDate.now();\n const [currentDate, setCurrentDate] = useState(selectedDate || today);\n\n useEffect(() => {\n if (selectedDate) {\n setCurrentDate(selectedDate);\n }\n }, [selectedDate]);\n\n const goToPrevMonth = () => {\n setCurrentDate(currentDate.minusMonths(1));\n };\n\n const goToNextMonth = () => {\n setCurrentDate(currentDate.plusMonths(1));\n };\n\n const goToYear = (year: number) => {\n setCurrentDate(currentDate.withYear(year));\n };\n\n const goToMonth = (month: number) => {\n setCurrentDate(currentDate.withMonth(month));\n };\n\n const getRangeInfo = (\n date: LocalDate,\n range?: [LocalDate | null, LocalDate | null],\n calendarType?: 'single' | 'range',\n ) => {\n const defaultInfo = {\n isRangeStart: false,\n isRangeEnd: false,\n isRangeMiddle: false,\n isRangeStartOnly: false,\n isRangeSingle: false,\n };\n\n if (calendarType !== 'range' || !range) {\n return defaultInfo;\n }\n\n const [start, end] = range;\n\n if (start && end && date.equals(start) && date.equals(end)) {\n return { ...defaultInfo, isRangeSingle: true };\n }\n\n if (start && end && date.equals(start)) {\n return { ...defaultInfo, isRangeStart: true };\n }\n\n if (start && end && date.equals(end)) {\n return { ...defaultInfo, isRangeEnd: true };\n }\n\n if (start && end && date.isAfter(start) && date.isBefore(end)) {\n return { ...defaultInfo, isRangeMiddle: true };\n }\n\n if (start && date.equals(start)) {\n return { ...defaultInfo, isRangeStartOnly: true };\n }\n\n return defaultInfo;\n };\n\n const generateDays = () => {\n const { firstDay, lastDay } = getFirstDayAndLastDayOfMonth(currentDate.toString());\n\n const firstOfMonth = LocalDate.of(firstDay.year(), firstDay.monthValue(), 1);\n const lastOfMonth = LocalDate.of(lastDay.year(), lastDay.monthValue(), lastDay.dayOfMonth());\n\n const startOfCalendar = firstOfMonth.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY));\n const endOfCalendar = lastOfMonth.with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY));\n\n const days = [];\n let current = startOfCalendar;\n\n while (!current.isAfter(endOfCalendar)) {\n const minDateCheck = minDate && current.isBefore(minDate);\n const maxDateCheck = maxDate && current.isAfter(maxDate);\n const minYearCheck = minYear !== undefined && current.year() < minYear;\n const maxYearCheck = maxYear !== undefined && current.year() > maxYear;\n const isDisabled = Boolean(minDateCheck || maxDateCheck || minYearCheck || maxYearCheck);\n\n days.push({\n date: current,\n isCurrentMonth: current.monthValue() === currentDate.monthValue(),\n isToday: current.equals(today),\n isSelected: selectedDate ? current.equals(selectedDate) : false,\n isDisabled,\n ...getRangeInfo(current, selectedRange, type),\n });\n current = current.plusDays(1);\n }\n return days;\n };\n\n const getDayClassName = (dayInfo: DayInfo, index: number, totalDays: number) => {\n const classNames = ['day'];\n\n const isFirstWeek = index < 7;\n const isLastWeek = index >= totalDays - 7;\n const isLeftmost = index % 7 === 0;\n const isRightmost = index % 7 === 6;\n\n if (!dayInfo.isCurrentMonth) {\n classNames.push('dayOutOfMonth');\n }\n\n if (dayInfo.isToday) {\n classNames.push('dayToday');\n }\n if (dayInfo.isSelected) {\n classNames.push('daySelected');\n }\n if (dayInfo.isDisabled) {\n classNames.push('dayDisabled');\n }\n\n if (type === 'range') {\n const rangeClassMap: { [key: string]: string } = {\n isRangeSingle: 'rangeSingle',\n isRangeStart: 'rangeStart',\n isRangeEnd: 'rangeEnd',\n isRangeMiddle: 'rangeMiddle',\n isRangeStartOnly: 'rangeStartOnly',\n };\n for (const key of Object.keys(rangeClassMap)) {\n if (dayInfo[key as keyof DayInfo]) {\n classNames.push(rangeClassMap[key]);\n if (key === 'isRangeStart') {\n if (isFirstWeek) classNames.push('rangeStartFirstWeek');\n if (isLastWeek) classNames.push('rangeStartLastWeek');\n }\n if (key === 'isRangeEnd') {\n if (isFirstWeek) classNames.push('rangeEndFirstWeek');\n if (isLastWeek) classNames.push('rangeEndLastWeek');\n }\n if (key === 'isRangeMiddle') {\n if (isFirstWeek) classNames.push('rangeMiddleFirstWeek');\n if (isLastWeek) classNames.push('rangeMiddleLastWeek');\n if (isLeftmost) classNames.push('rangeMiddleLeftmost');\n if (isRightmost) classNames.push('rangeMiddleRightmost');\n }\n break;\n }\n }\n }\n\n return classNames;\n };\n\n const getRangeTextColor = (dayInfo: DayInfo) => {\n if (type === 'range') {\n if (\n dayInfo.isRangeStart ||\n dayInfo.isRangeEnd ||\n dayInfo.isRangeStartOnly ||\n dayInfo.isRangeSingle\n ) {\n return 'var(--krds-color-gray-0)';\n }\n }\n\n if (dayInfo.isSelected) {\n return 'var(--krds-color-gray-0)';\n }\n\n return dayInfo.isCurrentMonth ? 'var(--krds-color-gray-90)' : 'var(--krds-color-gray-40)';\n };\n\n return {\n today,\n currentDate,\n goToPrevMonth,\n goToNextMonth,\n goToYear,\n goToMonth,\n generateDays,\n getDayClassName,\n getRangeTextColor,\n };\n};\n",".calendar {\n\tborder-radius: 0.75rem;\n\tbackground-color: var(--krds-color-secondary-5);\n\tborder: 1px solid var(--krds-color-gray-20);\n\tfont-family: inherit;\n\twidth: 328px;\n\theight: fit-content;\n\tpadding-top: 16px;\n}\n\n.headerContainer {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tpadding: 3px 24px;\n\theight: 56px;\n\tgap: 16px;\n}\n\n.headerContainer > div {\n\ttext-align: center;\n}\n.header {\n\tdisplay: flex;\n\twidth: 32px;\n\theight: 32px;\n\tjustify-content: center;\n\talign-items: center;\n\tborder-radius: 100%;\n\tbackground-color: var(--krds-color-gray-0);\n\tborder: 1px solid var(--krds-color-gray-20);\n}\n.header:hover {\n\tbackground-color: var(--krds-color-gray-10);\n\tborder-color: var(--krds-color-gray-30);\n\tcursor: pointer;\n}\n.header:focus {\n\toutline: none;\n\tbox-shadow:\n\t\t0 0 0 2px var(--krds-color-gray-0),\n\t\t0 0 0 4px var(--krds-color-primary-40);\n}\n\n.calendarBody {\n\tdisplay: grid;\n\tgrid-template-rows: auto 1fr;\n\tpadding: 16px 0;\n\tgap: 16px;\n\twidth: 328px;\n}\n\n.weekdaysContainer {\n\tdisplay: grid;\n\tgrid-template-columns: repeat(7, 1fr);\n\tgap: 4px;\n\ttext-align: center;\n\tcolor: var(--krds-color-gray-90);\n\tfont-weight: 400;\n\tfont-size: 15px;\n\tline-height: 24px;\n\tpadding: 0 12px;\n\theight: 24px;\n}\n\n.daysContainer {\n\tdisplay: grid;\n\tgrid-template-columns: repeat(7, 1fr);\n\tpadding: 0 12px;\n\tgap: 4px;\n}\n\n.day {\n\tdisplay: flex;\n\twidth: 40px;\n\theight: 40px;\n\tjustify-content: center;\n\talign-items: center;\n\tpadding: 0.5rem;\n\tborder: none;\n\tborder-radius: 50%;\n\tbackground: var(--krds-color-secondary-5);\n\tcolor: var(--krds-color-gray-80);\n\tcursor: pointer;\n\ttransition: all 0.2s ease;\n\tposition: relative;\n\tfont-size: 17px;\n\tline-height: 26px;\n\tfont-weight: 400;\n\tfont-family: \"pretendard GOV\";\n}\n.day:hover {\n\tbackground: var(--krds-color-secondary-10);\n\tcolor: var(--krds-color-gray-90);\n}\n.day:focus {\n\toutline: none;\n\tbox-shadow:\n\t\t0 0 0 2px var(--krds-color-gray-0),\n\t\t0 0 0 4px var(--krds-color-primary-40);\n}\n\n.dayToday::after {\n\tcontent: \"\";\n\tposition: absolute;\n\tbottom: 3px;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n\twidth: 4px;\n\theight: 4px;\n\tbackground-color: var(--krds-color-danger-50);\n\tborder-radius: 50%;\n}\n\n.daySelected {\n\tbackground: var(--krds-color-secondary-70);\n\tcolor: var(--krds-color-gray-0);\n}\n.dayDisabled {\n\tcolor: var(--krds-color-gray-20);\n\tbackground-color: transparent;\n\tcursor: default;\n\tpointer-events: none;\n\topacity: 0.2;\n}\n\n.calendarFooter {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tpadding: 16px 24px;\n\tborder-bottom-left-radius: 0.75rem;\n\tborder-bottom-right-radius: 0.75rem;\n\tbackground-color: var(--krds-color-gray-0);\n\tborder-top: 1px solid var(--krds-color-gray-20);\n\n\theight: 72px;\n\tbox-sizing: border-box;\n}\n.footerButton {\n\tdisplay: inline-flex;\n\tgap: 0.5rem;\n}\n\n.rangeStart {\n\tbackground: var(--krds-color-secondary-70);\n\tcolor: var(--krds-color-gray-0);\n\tborder-radius: 50% 0 0 50%;\n\tposition: relative;\n\tbox-shadow: 5px 0 0 var(--krds-color-gray-0);\n}\n\n.rangeEnd {\n\tbackground: var(--krds-color-secondary-70);\n\tcolor: var(--krds-color-gray-0);\n\tborder-radius: 0 50% 50% 0;\n\tposition: relative;\n\tbox-shadow: -5px 0 0 var(--krds-color-gray-0);\n}\n\n.rangeMiddle {\n\tbackground: var(--krds-color-gray-0);\n\tcolor: var(--krds-color-gray-90);\n\tborder-radius: 0;\n\tposition: relative;\n\tbox-shadow:\n\t\t-5px 0 0 var(--krds-color-gray-0),\n\t\t5px 0 0 var(--krds-color-gray-0);\n}\n\n.rangeStartOnly {\n\tbackground: var(--krds-color-secondary-70);\n\tcolor: var(--krds-color-gray-0);\n\tborder-radius: 50%;\n\tposition: relative;\n}\n\n.rangeSingle {\n\tbackground: var(--krds-color-secondary-70);\n\tcolor: var(--krds-color-gray-0);\n\tborder-radius: 50%;\n\tposition: relative;\n}\n\n.dayOutOfMonth {\n\tcolor: var(--krds-color-gray-90);\n\topacity: 0.7;\n}\n\n/* 호버 효과 */\n.day:hover:not(.rangeStart):not(.rangeEnd):not(.rangeMiddle) {\n\tbackground: var(--krds-color-primary-10);\n\topacity: 0.8;\n}\n\n/* Range 날짜들의 호버 효과 */\n.rangeStart:hover,\n.rangeEnd:hover,\n.rangeStartOnly:hover,\n.rangeSingle:hover {\n\tbackground: var(--krds-color-secondary-80);\n}\n\n.rangeMiddle:hover {\n\tbackground: var(--krds-color-primary-5);\n}\n\n.rangeStartFirstWeek {\n\tborder-top-left-radius: 50%;\n\tborder-top-right-radius: 0;\n}\n\n.rangeStartLastWeek {\n\tborder-bottom-left-radius: 50%;\n\tborder-bottom-right-radius: 0;\n}\n\n.rangeEndFirstWeek {\n\tborder-top-left-radius: 0;\n\tborder-top-right-radius: 50%;\n}\n\n.rangeEndLastWeek {\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 50%;\n}\n\n.rangeMiddleLeftmost {\n\tborder-top-left-radius: 50%;\n\tborder-bottom-left-radius: 50%;\n}\n\n.rangeMiddleRightmost {\n\tborder-top-right-radius: 50%;\n\tborder-bottom-right-radius: 50%;\n}\n","import type React from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport type { LocalDate } from '@js-joda/core';\n\nexport function useYearMonthSelector({\n currentDate,\n minYear = 2000,\n maxYear = 2030,\n onYearChange,\n onMonthChange,\n}: {\n currentDate: LocalDate;\n minYear?: number;\n maxYear?: number;\n onYearChange: (year: number) => void;\n onMonthChange: (month: number) => void;\n}) {\n const [isYearOpen, setIsYearOpen] = useState(false);\n const [isMonthOpen, setIsMonthOpen] = useState(false);\n const [yearDropdownOpenClass, setYearDropdownOpenClass] = useState(false);\n const [monthDropdownOpenClass, setMonthDropdownOpenClass] = useState(false);\n\n const yearDropdownRef = useRef<HTMLDivElement>(null);\n const monthDropdownRef = useRef<HTMLDivElement>(null);\n const yearSelectorRef = useRef<HTMLDivElement>(null);\n const monthSelectorRef = useRef<HTMLDivElement>(null);\n\n // 년도/월 옵션\n const years = Array.from({ length: maxYear - minYear + 1 }, (_, i) => minYear + i);\n const months = Array.from({ length: 12 }, (_, i) => i + 1);\n\n const scrollToSelected = (\n dropdownRef: React.RefObject<HTMLDivElement | null>,\n selectedValue: number,\n items: number[],\n ) => {\n if (dropdownRef.current) {\n const selectedIndex = items.indexOf(selectedValue);\n const itemHeight = 32;\n const dropdownHeight = dropdownRef.current.clientHeight;\n const scrollTop = selectedIndex * itemHeight - dropdownHeight / 2 + itemHeight / 2;\n\n dropdownRef.current.style.scrollBehavior = 'auto';\n dropdownRef.current.scrollTop = Math.max(0, scrollTop);\n }\n };\n\n useEffect(() => {\n if (isYearOpen) {\n setYearDropdownOpenClass(false);\n setTimeout(() => setYearDropdownOpenClass(true), 20);\n setTimeout(() => scrollToSelected(yearDropdownRef, currentDate.year(), years), 0);\n } else {\n setYearDropdownOpenClass(false);\n }\n }, [isYearOpen, currentDate, years]);\n\n useEffect(() => {\n if (isMonthOpen) {\n setMonthDropdownOpenClass(false);\n setTimeout(() => setMonthDropdownOpenClass(true), 20);\n setTimeout(() => scrollToSelected(monthDropdownRef, currentDate.monthValue(), months), 0);\n } else {\n setMonthDropdownOpenClass(false);\n }\n }, [isMonthOpen, currentDate, months]);\n\n useEffect(() => {\n if (!isYearOpen && !isMonthOpen) return;\n function handleClickOutside(e: MouseEvent) {\n if (\n isYearOpen &&\n yearSelectorRef.current &&\n !yearSelectorRef.current.contains(e.target as Node)\n ) {\n setIsYearOpen(false);\n }\n if (\n isMonthOpen &&\n monthSelectorRef.current &&\n !monthSelectorRef.current.contains(e.target as Node)\n ) {\n setIsMonthOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isYearOpen, isMonthOpen]);\n\n const handleYearSelect = (year: number) => {\n onYearChange(year);\n setIsYearOpen(false);\n };\n\n const handleMonthSelect = (month: number) => {\n onMonthChange(month);\n setIsMonthOpen(false);\n };\n\n const handleYearToggle = () => {\n setIsYearOpen(!isYearOpen);\n setIsMonthOpen(false);\n };\n\n const handleMonthToggle = () => {\n setIsMonthOpen(!isMonthOpen);\n setIsYearOpen(false);\n };\n\n return {\n isYearOpen,\n isMonthOpen,\n yearDropdownOpenClass,\n monthDropdownOpenClass,\n\n yearDropdownRef,\n monthDropdownRef,\n yearSelectorRef,\n monthSelectorRef,\n\n years,\n months,\n\n handleYearSelect,\n handleMonthSelect,\n handleYearToggle,\n handleMonthToggle,\n };\n}\n","import { useYearMonthSelector } from '../../../hooks/useSelector';\nimport { Icon } from '../../../../index';\nimport * as styles from './YearMonthSelector.module.css';\nimport type { LocalDate } from '@js-joda/core';\n\ninterface YearMonthSelectorProps {\n currentDate: LocalDate;\n minYear?: number;\n maxYear?: number;\n onYearChange: (year: number) => void;\n onMonthChange: (month: number) => void;\n}\n\nexport function YearMonthSelector({\n currentDate,\n minYear = 2000,\n maxYear = 2030,\n onYearChange,\n onMonthChange,\n}: YearMonthSelectorProps) {\n const {\n isYearOpen,\n isMonthOpen,\n yearDropdownOpenClass,\n monthDropdownOpenClass,\n yearDropdownRef,\n monthDropdownRef,\n yearSelectorRef,\n monthSelectorRef,\n years,\n months,\n handleYearSelect,\n handleMonthSelect,\n handleYearToggle,\n handleMonthToggle,\n } = useYearMonthSelector({\n currentDate,\n minYear,\n maxYear,\n onYearChange,\n onMonthChange,\n });\n\n return (\n <div className={styles.container}>\n {/* 년도 */}\n <div className={styles.selector} ref={yearSelectorRef}>\n <button type={'button'} className={styles.selectorButton} onClick={handleYearToggle}>\n <span>{currentDate.year()}년</span>\n <Icon\n icon={isYearOpen ? 'ArrowDropUp' : 'ArrowDropDown'}\n color='var(--krds-color-gray-90)'\n size={20}\n />\n </button>\n {isYearOpen && (\n <div\n ref={yearDropdownRef}\n className={`${styles.dropdown} ${yearDropdownOpenClass ? styles.open : ''}`}>\n {years.map((year) => (\n <button\n type={'button'}\n key={year}\n className={`${styles.option} ${year === currentDate.year() ? styles.selected : ''}`}\n onClick={() => handleYearSelect(year)}>\n {year}년\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* 월 */}\n <div className={styles.selector} ref={monthSelectorRef}>\n <button type={'button'} className={styles.selectorButton} onClick={handleMonthToggle}>\n <span>{currentDate.monthValue()}월</span>\n <Icon\n icon={isMonthOpen ? 'ArrowDropUp' : 'ArrowDropDown'}\n color='var(--krds-color-gray-90)'\n size={20}\n />\n </button>\n {isMonthOpen && (\n <div\n ref={monthDropdownRef}\n className={`${styles.dropdown} ${monthDropdownOpenClass ? styles.open : ''}`}>\n {months.map((month) => (\n <button\n type={'button'}\n key={month}\n className={`${styles.option} ${month === currentDate.monthValue() ? styles.selected : ''}`}\n onClick={() => handleMonthSelect(month)}>\n {month}월\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useCalendar } from '../../hooks/useCalendar';\nimport { Button, Icon } from '../../../index';\nimport * as styles from './Calendar.module.css';\nimport type { CalendarProps } from './Calendar.type';\nimport { YearMonthSelector } from './YearMonthSelector/YearMonthSelector';\n\nexport function Calendar({\n type = 'single',\n selectedDate,\n onDateSelect = () => {},\n selectedRange,\n onConfirm = () => {},\n onCancel = () => {},\n minYear,\n maxYear,\n minDate,\n maxDate,\n className = '',\n buttonsDisabled,\n ...props\n}: CalendarProps) {\n const {\n today,\n currentDate,\n goToPrevMonth,\n goToNextMonth,\n goToYear,\n goToMonth,\n generateDays,\n getDayClassName,\n getRangeTextColor,\n } = useCalendar({\n selectedDate: type === 'single' ? selectedDate : selectedRange?.[0] || undefined,\n type,\n selectedRange,\n minDate,\n maxDate,\n minYear,\n maxYear,\n });\n\n const days = generateDays();\n\n return (\n <div className={`${className} ${styles.calendar}`} {...props}>\n {/* 헤더 */}\n <div className={styles.headerContainer}>\n <button type={'button'} className={styles.header} onClick={goToPrevMonth}>\n <Icon size={20} viewBox='0 0 20 20' icon='ArrowLeft' />\n </button>\n <div>\n <YearMonthSelector\n currentDate={currentDate}\n minYear={minYear}\n maxYear={maxYear}\n onYearChange={goToYear}\n onMonthChange={goToMonth}\n />\n </div>\n <button type={'button'} className={styles.header} onClick={goToNextMonth}>\n <Icon size={20} viewBox='0 0 20 20' icon='ArrowRight' />\n </button>\n </div>\n\n <div className={styles.calendarBody}>\n <div className={styles.weekdaysContainer}>\n {['일', '월', '화', '수', '목', '금', '토'].map((day) => (\n <div key={day}>{day}</div>\n ))}\n </div>\n <div className={styles.daysContainer}>\n {days.map((dayInfo, index) => {\n const classNames = getDayClassName(dayInfo, index, days.length);\n\n return (\n <button\n type={'button'}\n key={dayInfo.date.toString()}\n onClick={() => !dayInfo.isDisabled && onDateSelect(dayInfo.date)}\n className={classNames.map((name) => styles[name]).join(' ')}\n style={{\n color: getRangeTextColor(dayInfo),\n }}>\n {dayInfo.date.dayOfMonth()}\n </button>\n );\n })}\n </div>\n </div>\n {buttonsDisabled ? (\n <></>\n ) : (\n <div className={styles.calendarFooter}>\n <Button\n size='xs'\n variant='text'\n label='오늘'\n onClick={() => onDateSelect(today)}\n style={{ minWidth: '5px', borderRadius: '8px' }}\n />\n <div className={styles.footerButton}>\n <Button size='s' label='취소' variant='teriary' onClick={onCancel} />\n <Button size='s' label='선택' onClick={onConfirm} />\n </div>\n </div>\n )}\n </div>\n );\n}\n",".datePicker {\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.titleWrapper {\n\tgap: 0.25rem;\n\talign-items: center;\n\twidth: fit-content;\n\tline-height: 24px;\n\tflex-shrink: 0;\n}\n\n.horizontal {\n\tflex-direction: row;\n\talign-items: flex-start;\n\twhite-space: nowrap;\n}\n\n.wrapper {\n\tgap: 0.25rem;\n\tjustify-content: center;\n\talign-items: center;\n\twidth: 100%;\n\ttransition: all 0.2s ease;\n word-break: keep-all;\n}\n\n.iconButton {\n\tbackground: none;\n\tborder: none;\n\tcursor: pointer;\n\tpadding: 0;\n\ttransition: all 0.2s ease;\n\twidth: calc(var(--input-height, 56px) * 0.4);\n\theight: calc(var(--input-height, 56px) * 0.4);\n\tmin-width: 20px;\n\tmin-height: 20px;\n\tmax-width: 32px;\n\tmax-height: 32px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 50%;\n\tz-index: 1;\n}\n\n.iconButton:hover {\n\tbackground-color: var(--krds-color-gray-10);\n\topacity: 0.9;\n}\n.iconButton:focus {\n\toutline: none;\n\tbox-shadow: 0 0 0 2px var(--krds-color-primary-50);\n}\n\n.iconButton:disabled {\n\tcursor: default;\n\tbackground-color: var(--krds-color-gray-20);\n\topacity: 0.5;\n}\n\n.icon {\n\tdisplay: block;\n}\n\n.calendarDropdown {\n\tposition: absolute;\n\tright: 0;\n\tz-index: 10;\n\topacity: 0;\n\ttransform: translateY(-5px);\n\ttransition: all 0.2s ease;\n\tpointer-events: none;\n\tdisplay: none;\n}\n.calendarDropdown.open {\n\tdisplay: block;\n\topacity: 1;\n\tpointer-events: auto;\n}\n\n.calendarDropdown.bottom {\n\ttop: 100%;\n\ttransform: translateY(-5px);\n}\n\n.calendarDropdown.bottom.open {\n\ttransform: translateY(0);\n}\n\n.calendarDropdown.top {\n\tbottom: 100%;\n\ttransform: translateY(5px);\n}\n\n.calendarDropdown.top.open {\n\ttransform: translateY(0);\n}\n\n.rangeInputContainer {\n\tdisplay: flex;\n\tgap: 8px;\n\tflex: 1;\n\talign-items: flex-start;\n\tposition: relative;\n}\n.rangeInput {\n\tflex: 1;\n}\n\n.rangeSeparator {\n\tcolor: var(--krds-color-gray-60);\n\tfont-weight: 500;\n\tflex-shrink: 0;\n\theight: var(--input-height, 56px);\n\tdisplay: flex;\n\talign-items: center;\n}\n","import type { RefObject } from 'react';\nimport { useState } from 'react';\n\n\n/**\n * @Datepicker 여유 높이별 calendar position 😸\n * input 하단 여유 높이와 상단 여유 높이를 비교하여 calendar의 위치를 결정\n */\nexport const useCalendarPosition = (inputRef: RefObject<HTMLInputElement | null>) => {\n const [position, setPosition] = useState<'top' | 'bottom'>('bottom');\n\n const calPosition = () => {\n if (!inputRef.current) return;\n\n const inputRect = inputRef.current.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const calendarHeight = 400;\n\n const spaceBelow = viewportHeight - inputRect.bottom;\n const spaceAbove = inputRect.top;\n\n if (spaceBelow >= calendarHeight || spaceBelow > spaceAbove) {\n setPosition('bottom');\n return 'bottom';\n } else {\n setPosition('top');\n return 'top';\n }\n };\n\n return { position, calPosition };\n};\n","// utils/dateValidation.ts\nimport { DateTimeFormatter, LocalDate } from '@js-joda/core';\n\nexport interface ValidationResult {\n isValid: boolean;\n errorMessage: string;\n}\n\nexport const createDateValidator = (\n formatMinDate?: LocalDate | null,\n formatMaxDate?: LocalDate | null,\n minYear?: number,\n maxYear?: number,\n) => {\n return (date: LocalDate | null): ValidationResult => {\n if (!date) {\n return { isValid: false, errorMessage: 'yyyy-MM-dd 형식으로 입력해주세요.' };\n }\n\n if (minYear && date.year() < minYear) {\n return { isValid: false, errorMessage: `${minYear}년 이후의 날짜를 입력해주세요.` };\n }\n\n if (maxYear && date.year() > maxYear) {\n return { isValid: false, errorMessage: `${maxYear}년 이전의 날짜를 입력해주세요.` };\n }\n\n if (formatMinDate && date.isBefore(formatMinDate)) {\n const minDateStr = formatMinDate.format(DateTimeFormatter.ofPattern('yyyy-MM-dd'));\n const maxDateStr = formatMaxDate\n ? formatMaxDate.format(DateTimeFormatter.ofPattern('yyyy-MM-dd'))\n : '현재';\n return {\n isValid: false,\n errorMessage: `${minDateStr}${formatMaxDate ? `~${maxDateStr}` : ' 이후'} 기간내를 선택하세요.`,\n };\n }\n\n if (formatMaxDate && date.isAfter(formatMaxDate)) {\n const minDateStr = formatMinDate\n ? formatMinDate.format(DateTimeFormatter.ofPattern('yyyy-MM-dd'))\n : '과거';\n const maxDateStr = formatMaxDate.format(DateTimeFormatter.ofPattern('yyyy-MM-dd'));\n return {\n isValid: false,\n errorMessage: `${formatMinDate ? `${minDateStr}~` : ''}${maxDateStr} 이전 기간내를 선택하세요.`,\n };\n }\n\n return { isValid: true, errorMessage: '' };\n };\n};\n\nexport const validateDateFormat = (val: string): boolean => {\n const datePattern = /^\\d{4}-\\d{2}-\\d{2}$/;\n return datePattern.test(val);\n};\n\nexport const parseDate = (val: string): LocalDate | null => {\n if (!val.trim()) {\n return null;\n }\n try {\n return LocalDate.parse(val);\n } catch {\n return null;\n }\n};\n\nexport const formatDate = (date: LocalDate): string => {\n return date.format(DateTimeFormatter.ofPattern('yyyy-MM-dd'));\n};\n","// hooks/useRangeDateValidation.ts\nimport type { LocalDate } from '@js-joda/core';\nimport { debounce } from 'lodash-es';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n createDateValidator,\n formatDate,\n parseDate,\n validateDateFormat,\n} from '../utils/dateValidation';\n\nexport const useRangeValidation = (\n formatMinDate?: LocalDate | null,\n formatMaxDate?: LocalDate | null,\n minYear?: number,\n maxYear?: number,\n selectedRange?: [LocalDate | null, LocalDate | null],\n onChange?: (range: string[]) => void,\n) => {\n const startDebounceRef = useRef<ReturnType<typeof debounce> | null>(null);\n const endDebounceRef = useRef<ReturnType<typeof debounce> | null>(null);\n\n const [isStartValidInput, setIsStartValidInput] = useState<boolean>(true);\n const [isEndValidInput, setIsEndValidInput] = useState<boolean>(true);\n const [startErrorMessage, setStartErrorMessage] = useState<string>('');\n const [endErrorMessage, setEndErrorMessage] = useState<string>('');\n\n const validateDate = useCallback(\n (date: LocalDate | null) => {\n const validator = createDateValidator(formatMinDate, formatMaxDate, minYear, maxYear);\n return validator(date);\n },\n [formatMinDate, formatMaxDate, minYear, maxYear],\n );\n\n const validateRangeDate = useCallback(\n (date: LocalDate, isStart: boolean) => {\n const baseValidation = validateDate(date);\n if (!baseValidation.isValid) return baseValidation;\n\n const [start, end] = selectedRange || [null, null];\n\n if (isStart && end && date.isAfter(end)) {\n return { isValid: false, errorMessage: '시작일은 종료일보다 이전이어야 합니다.' };\n }\n\n if (!isStart && start && date.isBefore(start)) {\n return { isValid: false, errorMessage: '종료일은 시작일보다 이후여야 합니다.' };\n }\n\n return { isValid: true, errorMessage: '' };\n },\n [validateDate, selectedRange],\n );\n\n useEffect(() => {\n startDebounceRef.current = debounce((val: string) => {\n if (!val.trim()) {\n setIsStartValidInput(true);\n setStartErrorMessage('');\n const [, end] = selectedRange || [null, null];\n onChange?.(['', end ? formatDate(end) : '']);\n return;\n }\n\n if (!validateDateFormat(val)) {\n setIsStartValidInput(false);\n setStartErrorMessage('yyyy-MM-dd 형식으로 입력해주세요.');\n return;\n }\n\n const parsedDate = parseDate(val);\n if (!parsedDate) {\n setIsStartValidInput(false);\n setStartErrorMessage('유효한 날짜를 입력해주세요.');\n return;\n }\n\n const validation = validateRangeDate(parsedDate, true);\n setIsStartValidInput(validation.isValid);\n setStartErrorMessage(validation.errorMessage);\n\n if (validation.isValid) {\n const [, end] = selectedRange || [null, null];\n onChange?.([formatDate(parsedDate), end ? formatDate(end) : '']);\n }\n }, 500);\n }, [validateRangeDate, selectedRange, onChange]);\n\n useEffect(() => {\n endDebounceRef.current = debounce((val: string) => {\n if (!val.trim()) {\n setIsEndValidInput(true);\n setEndErrorMessage('');\n const [start] = selectedRange || [null, null];\n onChange?.([start ? formatDate(start) : '', '']);\n return;\n }\n\n if (!validateDateFormat(val)) {\n setIsEndValidInput(false);\n setEndErrorMessage('yyyy-MM-dd 형식으로 입력해주세요.');\n return;\n }\n\n const parsedDate = parseDate(val);\n if (!parsedDate) {\n setIsEndValidInput(false);\n setEndErrorMessage('유효한 날짜를 입력해주세요.');\n return;\n }\n\n const validation = validateRangeDate(parsedDate, false);\n setIsEndValidInput(validation.isValid);\n setEndErrorMessage(validation.errorMessage);\n\n if (validation.isValid) {\n const [start] = selectedRange || [null, null];\n onChange?.([start ? formatDate(start) : '', formatDate(parsedDate)]);\n }\n }, 500);\n }, [validateRangeDate, selectedRange, onChange]);\n\n const resetStart = useCallback(() => {\n setIsStartValidInput(true);\n setStartErrorMessage('');\n }, []);\n\n const resetEnd = useCallback(() => {\n setIsEndValidInput(true);\n setEndErrorMessage('');\n }, []);\n\n const resetAll = useCallback(() => {\n setIsStartValidInput(true);\n setIsEndValidInput(true);\n setStartErrorMessage('');\n setEndErrorMessage('');\n }, []);\n\n return {\n startDebounceRef,\n endDebounceRef,\n isStartValidInput,\n isEndValidInput,\n startErrorMessage,\n endErrorMessage,\n validateStartInput: (value: string) => startDebounceRef.current?.(value),\n validateEndInput: (value: string) => endDebounceRef.current?.(value),\n resetStart,\n resetEnd,\n resetAll,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { useRangeValidation } from './useRangeValidation';\nimport { DateTimeFormatter, LocalDate } from '@js-joda/core';\n\n/**\n * @Datepicker 기간 설정 커스텀 훅 😸\n * 기간을 선택하고, 입력값을 관리하며, 날짜 형식 변환을 처리\n */\nconst convertType = (\n value?: LocalDate[] | string[] | null,\n): [LocalDate | null, LocalDate | null] => {\n if (!value || value.length === 0) return [null, null];\n\n if (typeof value[0] === 'string') {\n const stringArray = value as string[];\n try {\n const start = stringArray[0] ? LocalDate.parse(stringArray[0]) : null;\n const end = stringArray[1] ? LocalDate.parse(stringArray[1]) : null;\n return [start, end];\n } catch {\n return [null, null];\n }\n } else {\n const dateArray = value as LocalDate[];\n return [dateArray[0] || null, dateArray[1] || null];\n }\n};\n\nconst parsingDate = (val: string | null | undefined): LocalDate | null => {\n if (!val || !val.trim()) {\n return null;\n }\n try {\n return LocalDate.parse(val);\n } catch {\n return null;\n }\n};\n\nexport const useRangeDatePickerState = (\n initialValue?: LocalDate[] | string[] | null,\n minDate?: LocalDate | string | null,\n maxDate?: LocalDate | string | null,\n minYear?: number,\n maxYear?: number,\n onChange?: (range: string[]) => void,\n) => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [selectedRange, setSelectedRange] = useState<[LocalDate | null, LocalDate | null]>(\n convertType(initialValue),\n );\n const [currentStep, setCurrentStep] = useState<'start' | 'end'>('start');\n\n const [startInputValue, setStartInputValue] = useState(\n selectedRange[0] ? selectedRange[0].format(DateTimeFormatter.ofPattern('yyyy-MM-dd')) : '',\n );\n const [endInputValue, setEndInputValue] = useState(\n selectedRange[1] ? selectedRange[1].format(DateTimeFormatter.ofPattern('yyyy-MM-dd')) : '',\n );\n\n useEffect(() => {\n const range = convertType(initialValue);\n setSelectedRange(range);\n setStartInputValue(range[0] ? range[0].format(DateTimeFormatter.ofPattern('yyyy-MM-dd')) : '');\n setEndInputValue(range[1] ? range[1].format(DateTimeFormatter.ofPattern('yyyy-MM-dd')) : '');\n }, [initialValue]);\n\n const formatMinDate = minDate\n ? typeof minDate === 'string'\n ? parsingDate(minDate)\n : minDate\n : null;\n const formatMaxDate = maxDate\n ? typeof maxDate === 'string'\n ? parsingDate(maxDate)\n : maxDate\n : null;\n\n const handleValidate = useCallback(\n (validRange: string[]) => {\n const [startStr, endStr] = validRange;\n const newStart = startStr ? parsingDate(startStr) : null;\n const newEnd = endStr ? parsingDate(endStr) : null;\n\n setSelectedRange([newStart, newEnd]);\n onChange?.(validRange);\n },\n [onChange],\n );\n\n const {\n isStartValidInput,\n isEndValidInput,\n startErrorMessage,\n endErrorMessage,\n validateStartInput,\n validateEndInput,\n resetStart,\n resetEnd,\n resetAll,\n } = useRangeValidation(\n formatMinDate,\n formatMaxDate,\n minYear,\n maxYear,\n selectedRange,\n handleValidate,\n );\n\n const handleStartInputChange = (value: string) => {\n setStartInputValue(value);\n validateStartInput(value);\n };\n\n const handleEndInputChange = (value: string) => {\n setEndInputValue(value);\n validateEndInput(value);\n };\n\n const handleDateClick = (date: LocalDate) => {\n const [start, end] = selectedRange;\n\n if (start && end) {\n const formattedDate = date.format(DateTimeFormatter.ofPattern('yyyy-MM-dd'));\n setSelectedRange([date, null]);\n setStartInputValue(formattedDate);\n setEndInputValue('');\n setCurrentStep('end');\n onChange?.([formattedDate, '']);\n resetAll();\n return;\n }\n\n if (currentStep === 'start') {\n // 시작일 단계\n const formattedDate = date.format(DateTimeFormatter.ofPattern('yyyy-MM-dd'));\n setSelectedRange([date, null]);\n setStartInputValue(formattedDate);\n setEndInputValue('');\n setCurrentStep('end');\n onChange?.([formattedDate, '']);\n resetStart();\n } else {\n const [startDate] = selectedRange;\n if (startDate) {\n if (date.isBefore(startDate)) {\n const formattedDate = date.format(DateTimeFormatter.ofPattern('yyyy-MM-dd'));\n setSelectedRange([date, null]);\n setStartInputValue(formattedDate);\n setEndInputValue('');\n setCurrentStep('end');\n onChange?.([formattedDate, '']);\n resetAll();\n } else {\n const startFormatted = startDate.format(DateTimeFormatter.ofPattern('yyyy-MM-dd'));\n const endFormatted = date.format(DateTimeFormatter.ofPattern('yyyy-MM-dd'));\n setSelectedRange([startDate, date]);\n setEndInputValue(endFormatted);\n onChange?.([startFormatted, endFormatted]);\n resetEnd();\n }\n }\n }\n };\n\n const handleConfirm = (onConfirm: (range: string[]) => void) => {\n const [start, end] = selectedRange;\n if (start && end) {\n const rangeStrings = [\n start.format(DateTimeFormatter.ofPattern('yyyy-MM-dd')),\n end.format(DateTimeFormatter.ofPattern('yyyy-MM-dd')),\n ];\n onConfirm(rangeStrings);\n setIsOpen(false);\n setCurrentStep('start');\n resetAll();\n }\n };\n\n const handleCancel = () => {\n setSelectedRange([null, null]);\n setStartInputValue('');\n setEndInputValue('');\n setIsOpen(false);\n setCurrentStep('start');\n onChange?.(['', '']);\n resetAll();\n };\n\n return {\n selectedRange,\n startInputValue,\n endInputValue,\n formatMinDate,\n formatMaxDate,\n isOpen,\n currentStep,\n setIsOpen,\n handleDateClick,\n handleConfirm,\n handleCancel,\n handleStartInputChange,\n handleEndInputChange,\n isStartValidInput,\n isEndValidInput,\n startErrorMessage,\n endErrorMessage,\n };\n};\n","export function getErrorPriority(\n startValid: boolean,\n startMsg: string,\n endValid: boolean,\n endMsg: string,\n) {\n if (!startValid && startMsg.includes('형식')) return { type: 'start', message: startMsg };\n if (!endValid && endMsg.includes('형식')) return { type: 'end', message: endMsg };\n\n if (!startValid && startMsg.includes('이전')) return { type: 'start', message: startMsg };\n if (!endValid && endMsg.includes('이후')) return { type: 'end', message: endMsg };\n\n if (!startValid && startMsg) return { type: 'start', message: startMsg };\n if (!endValid && endMsg) return { type: 'end', message: endMsg };\n\n return { type: null, message: '' };\n}\n","import type React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Icon, Label, TextInput } from '../../../index';\nimport * as styles from '../../DatePicker.module.css';\nimport type { RangeDatePickerProps } from '../../DatePicker.type';\nimport { useCalendarPosition } from '../../hooks/useCalendarPosition';\nimport { useRangeDatePickerState } from '../../hooks/useRangeDatePickerState';\nimport { getErrorPriority } from '../../utils/errorPriority';\nimport { Calendar } from '../Calendar/Calendar';\n\nconst throttle = (callback: () => void, time: number) => {\n let throttleId: ReturnType<typeof setTimeout> | null = null;\n return () => {\n if (throttleId) return;\n throttleId = setTimeout(() => {\n callback();\n throttleId = null;\n }, time);\n };\n};\n\nexport function RangeDatePicker({\n id = '',\n label,\n minYear = 1900,\n maxYear,\n minDate,\n maxDate,\n width = '100%',\n height = '56px',\n disabled = false,\n className = '',\n value,\n onChange = () => {},\n isRequired = false,\n useMessage = false,\n titlePosition = 'vertical',\n titleClassName = '',\n gap = titlePosition === 'horizontal' ? '5%' : '10px',\n usePortal = false,\n portalGap = 5,\n isValid,\n scrollableElementId = 'main-content',\n}: RangeDatePickerProps) {\n const rangeDateId = `${id}`;\n const inputRef = useRef<HTMLInputElement>(null);\n const endInputRef = useRef<HTMLInputElement>(null);\n const calendarRef = useRef<HTMLDivElement>(null);\n const { position, calPosition } = useCalendarPosition(inputRef);\n const rootElement = document.getElementById('app');\n\n const {\n selectedRange,\n startInputValue,\n endInputValue,\n formatMinDate,\n formatMaxDate,\n isOpen,\n setIsOpen,\n handleDateClick,\n handleConfirm,\n handleCancel,\n handleStartInputChange,\n handleEndInputChange,\n isStartValidInput,\n isEndValidInput,\n startErrorMessage,\n endErrorMessage,\n } = useRangeDatePickerState(value, minDate, maxDate, minYear, maxYear, onChange);\n\n const handleToggle = () => {\n if (!isOpen) {\n calPosition();\n }\n setIsOpen(!isOpen);\n };\n\n const errorPriority = getErrorPriority(\n isStartValidInput,\n startErrorMessage,\n isEndValidInput,\n endErrorMessage,\n );\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n inputRef.current &&\n !inputRef.current.contains(event.target as Node) &&\n calendarRef.current &&\n !calendarRef.current.contains(event.target as Node)\n ) {\n if (isOpen) {\n handleCancel();\n }\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen, handleCancel]);\n\n useEffect(() => {\n if (!usePortal) return;\n\n if (calendarRef.current) calendarRef.current.style.transition = 'none';\n const positioning = () => {\n if (calendarRef.current && endInputRef.current && usePortal) {\n const inputRect = endInputRef.current.getBoundingClientRect();\n const calendarWidth =\n calendarRef.current.firstElementChild?.getBoundingClientRect()?.width ?? 328;\n if (calendarWidth <= 0) return;\n const diff = Math.abs(calendarWidth - inputRect.width);\n const left = inputRect.left + (calendarWidth > inputRect.width ? -1 : 1) * diff;\n\n calendarRef.current.style.left = `${left}px`;\n calendarRef.current.style.position = 'fixed';\n calendarRef.current.style.zIndex = '30';\n calendarRef.current.style.width = 'fit-content';\n\n if (calPosition() === 'top') {\n calendarRef.current.style.bottom = `${window.innerHeight - inputRect.top + portalGap}px`;\n calendarRef.current.style.top = 'auto';\n } else {\n calendarRef.current.style.top = `${inputRect.bottom + portalGap}px`;\n calendarRef.current.style.bottom = 'auto';\n }\n }\n };\n\n const throttledPositioning = throttle(positioning, 10);\n\n positioning();\n\n const scrollableElement = scrollableElementId\n ? document.getElementById(scrollableElementId)\n : window;\n\n window.addEventListener('resize', throttledPositioning);\n scrollableElement?.addEventListener('scroll', throttledPositioning);\n return () => {\n window.removeEventListener('resize', throttledPositioning);\n scrollableElement?.removeEventListener('scroll', throttledPositioning);\n };\n }, [isOpen, usePortal]);\n\n const wrapperStyle = {\n width,\n gap,\n '--input-height': height,\n } as React.CSSProperties;\n\n const calendarContent = (\n <div\n ref={calendarRef}\n className={`${styles.calendarDropdown} ${styles[position]} ${isOpen ? styles.open : ''}`}>\n <Calendar\n type='range'\n selectedRange={selectedRange}\n onDateSelect={handleDateClick}\n onConfirm={() => handleConfirm(onChange)}\n onCancel={() => handleCancel()}\n minYear={minYear}\n maxYear={maxYear}\n minDate={formatMinDate}\n maxDate={formatMaxDate}\n />\n </div>\n );\n\n return (\n <div\n className={`${styles.datePicker} ${titlePosition === 'horizontal' ? styles.horizontal : ''} ${className}`}\n style={wrapperStyle}>\n {label && (\n <div className={`${styles.titleWrapper} `}>\n <Label\n size='s'\n id={`${rangeDateId}`}\n className={titleClassName}\n required={isRequired}\n style={{ fontWeight: 400 }}>\n {label}\n </Label>\n </div>\n )}\n\n <div className={styles.rangeInputContainer}>\n <TextInput\n ref={inputRef}\n type='text'\n titleAttr={'시작일'}\n id={`${rangeDateId}`}\n value={startInputValue}\n isValid={isValid === false ? false : isStartValidInput}\n error={useMessage && errorPriority.type === 'start' ? errorPriority.message : undefined}\n onChange={(e) => handleStartInputChange(e.target.value)}\n placeholder='시작일'\n disabled={disabled}\n className={styles.rangeInput}\n style={{ height }}\n gap={0}\n />\n <span className={styles.rangeSeparator}>~</span>\n\n <TextInput\n type='text'\n ref={endInputRef}\n titleAttr={'종료일'}\n id={`${rangeDateId}-end`}\n value={endInputValue}\n isValid={isValid === false ? false : isEndValidInput}\n error={useMessage && errorPriority.type === 'end' ? errorPriority.message : undefined}\n onChange={(e) => handleEndInputChange(e.target.value)}\n placeholder='종료일'\n disabled={disabled}\n className={styles.rangeInput}\n useIcon={true}\n icon={\n <button\n type='button'\n title={'캘린더 열기'}\n onClick={handleToggle}\n className={styles.iconButton}\n disabled={disabled}>\n <Icon icon='Calendar' className={styles.icon} />\n </button>\n }\n iconPosition='right'\n clickableIcon={true}\n style={{ height, position: 'relative' }}\n gap={0}\n />\n {usePortal && rootElement ? createPortal(calendarContent, rootElement) : calendarContent}\n </div>\n </div>\n );\n}\n","// hooks/useDateValidation.ts\nimport type { LocalDate } from '@js-joda/core';\nimport { debounce } from 'lodash-es';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n createDateValidator,\n formatDate,\n parseDate,\n validateDateFormat,\n} from '../utils/dateValidation';\n\nexport const useDateValidation = (\n formatMinDate?: LocalDate | null,\n formatMaxDate?: LocalDate | null,\n minYear?: number,\n maxYear?: number,\n onChange?: (date: string) => void,\n) => {\n const [isValidInput, setIsValidInput] = useState<boolean>(true);\n const [errorMessage, setErrorMessage] = useState<string>('');\n const debounceRef = useRef<ReturnType<typeof debounce> | null>(null);\n\n const validateDate = useCallback(\n (date: LocalDate | null) => {\n const validator = createDateValidator(formatMinDate, formatMaxDate, minYear, maxYear);\n return validator(date);\n },\n [formatMinDate, formatMaxDate, minYear, maxYear],\n );\n\n useEffect(() => {\n debounceRef.current = debounce((val: string) => {\n if (!val.trim()) {\n setIsValidInput(true);\n setErrorMessage('');\n onChange?.('');\n return;\n }\n\n if (!validateDateFormat(val)) {\n setIsValidInput(false);\n setErrorMessage('yyyy-MM-dd 형식으로 입력해주세요.');\n return;\n }\n\n const parsedDate = parseDate(val);\n if (!parsedDate) {\n setIsValidInput(false);\n setErrorMessage('유효한 날짜를 입력해주세요.');\n return;\n }\n\n const validation = validateDate(parsedDate);\n setIsValidInput(validation.isValid);\n setErrorMessage(validation.errorMessage);\n\n if (validation.isValid) {\n onChange?.(formatDate(parsedDate));\n }\n }, 500);\n\n return () => {\n debounceRef.current?.cancel();\n };\n }, [validateDate, onChange]);\n\n const reset = useCallback(() => {\n setIsValidInput(true);\n setErrorMessage('');\n }, []);\n\n return {\n isValidInput,\n errorMessage,\n validateInput: (value: string) => debounceRef.current?.(value),\n reset,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { useDateValidation } from './useDateValidation';\nimport { DateTimeFormatter, LocalDate } from '@js-joda/core';\n\n/**\n * @Datepicker 상태를 관리하는 커스텀 훅 😸\n * 날짜를 선택하고, 입력값을 관리하며, 날짜 형식 변환을 처리\n */\nconst parsingDate = (val: string | null | undefined): LocalDate | null => {\n if (!val || !val.trim()) {\n return null;\n }\n try {\n return LocalDate.parse(val);\n } catch {\n return null;\n }\n};\n\nexport const useDatePickerState = (\n initialValue?: LocalDate | string | null,\n minDate?: LocalDate | string | null,\n maxDate?: LocalDate | string | null,\n minYear?: number,\n maxYear?: number,\n onChange?: (date: string) => void,\n) => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [selectedDate, setSelectedDate] = useState<LocalDate | null>(() => {\n if (typeof initialValue === 'string') {\n if (!initialValue.trim()) {\n return null;\n }\n try {\n return LocalDate.parse(initialValue);\n } catch {\n return null;\n }\n }\n return initialValue ?? null;\n });\n const [inputValue, setInputValue] = useState(\n selectedDate ? selectedDate.format(DateTimeFormatter.ofPattern('yyyy-MM-dd')) : '',\n );\n\n useEffect(() => {\n if (typeof initialValue === 'string') {\n if (!initialValue.trim()) {\n setSelectedDate(null);\n setInputValue('');\n }\n try {\n setSelectedDate(LocalDate.parse(initialValue));\n setInputValue(initialValue);\n } catch {\n setSelectedDate(null);\n setInputValue('');\n }\n }\n }, [initialValue]);\n\n const formatMinDate = minDate\n ? typeof minDate === 'string'\n ? parsingDate(minDate)\n : minDate\n : null;\n const formatMaxDate = maxDate\n ? typeof maxDate === 'string'\n ? parsingDate(maxDate)\n : maxDate\n : null;\n\n const handleValidate = useCallback(\n (validDate: string) => {\n const parsedDate = parsingDate(validDate);\n setSelectedDate(parsedDate);\n onChange?.(validDate);\n },\n [onChange],\n );\n\n const { isValidInput, errorMessage, validateInput, reset } = useDateValidation(\n formatMinDate,\n formatMaxDate,\n minYear,\n maxYear,\n handleValidate,\n );\n\n const handleDateClick = (date: LocalDate) => {\n const formattedDate = date.format(DateTimeFormatter.ofPattern('yyyy-MM-dd'));\n setInputValue(formattedDate);\n setSelectedDate(date);\n onChange?.(formattedDate);\n reset();\n };\n\n const handleInputChange = (value: string) => {\n setInputValue(value);\n validateInput(value);\n };\n\n const handleConfirm = (onConfirm: (date: string) => void) => {\n if (selectedDate) {\n const formattedDate = selectedDate.format(DateTimeFormatter.ofPattern('yyyy-MM-dd'));\n onConfirm(formattedDate);\n reset();\n } else {\n try {\n const parsedDate = parsingDate(inputValue);\n if (parsedDate) {\n setSelectedDate(parsedDate);\n onConfirm(parsedDate.format(DateTimeFormatter.ofPattern('yyyy-MM-dd')));\n reset();\n }\n } catch {\n // 날짜 오류 시 아무 작업 x\n }\n }\n setIsOpen(false);\n };\n\n const handleCancel = () => {\n setInputValue('');\n setSelectedDate(null);\n setIsOpen(false);\n onChange?.('');\n reset();\n };\n\n const getCurrentSelectedDate = () => {\n try {\n return parsingDate(inputValue);\n } catch {\n return selectedDate;\n }\n };\n\n return {\n selectedDate,\n formatMinDate,\n formatMaxDate,\n inputValue,\n currentSelectedDate: getCurrentSelectedDate(),\n isOpen,\n setIsOpen,\n handleDateClick,\n handleConfirm,\n handleCancel,\n handleInputChange,\n isValidInput,\n errorMessage,\n };\n};\n","import { useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Icon, TextInput } from '../../../index';\nimport * as styles from '../../DatePicker.module.css';\nimport type { SingleDatePickerProps } from '../../DatePicker.type';\nimport { useCalendarPosition } from '../../hooks/useCalendarPosition';\nimport { useDatePickerState } from '../../hooks/useDatePickerState';\nimport { Calendar } from '../Calendar/Calendar';\n\nconst throttle = (callback: () => void, time: number) => {\n let throttleId: ReturnType<typeof setTimeout> | null = null;\n return () => {\n if (throttleId) return;\n throttleId = setTimeout(() => {\n callback();\n throttleId = null;\n }, time);\n };\n};\n\nexport function SingleDatePicker({\n id = '',\n label,\n inputTitle,\n minYear,\n maxYear,\n minDate,\n maxDate,\n width = '100%',\n height = '56px',\n placeholder = '날짜를 선택하세요',\n disabled = false,\n className = '',\n value,\n onChange = () => {},\n isRequired = false,\n useMessage = false,\n titlePosition,\n gap,\n usePortal = false,\n portalGap = 5,\n isValid,\n scrollableElementId,\n}: SingleDatePickerProps) {\n const singleDateId = `${id}`;\n const inputRef = useRef<HTMLInputElement>(null);\n const calendarRef = useRef<HTMLDivElement>(null);\n const { position, calPosition } = useCalendarPosition(inputRef);\n\n const {\n selectedDate,\n formatMinDate,\n formatMaxDate,\n currentSelectedDate,\n inputValue,\n isOpen,\n setIsOpen,\n handleDateClick,\n handleConfirm,\n handleCancel,\n handleInputChange,\n isValidInput,\n errorMessage,\n } = useDatePickerState(value, minDate, maxDate, minYear, maxYear, onChange);\n\n const rootElement = document.getElementById('app');\n\n const handleToggle = () => {\n if (!isOpen) {\n calPosition();\n }\n setIsOpen(!isOpen);\n };\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n inputRef.current &&\n !inputRef.current.contains(event.target as Node) &&\n calendarRef.current &&\n !calendarRef.current.contains(event.target as Node)\n ) {\n if (isOpen) {\n handleCancel();\n }\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen, handleCancel]);\n\n useEffect(() => {\n if (!usePortal) return;\n const positioning = () => {\n if (calendarRef.current && inputRef.current && usePortal) {\n const inputRect = inputRef.current.getBoundingClientRect();\n const calendarWidth =\n calendarRef.current.firstElementChild?.getBoundingClientRect()?.width ?? 328;\n const diff = Math.abs(calendarWidth - inputRect.width);\n const left = inputRect.left + (calendarWidth > inputRect.width ? -1 : 1) * diff;\n\n calendarRef.current.style.left = `${left}px`;\n calendarRef.current.style.position = 'fixed';\n calendarRef.current.style.zIndex = '2600';\n calendarRef.current.style.width = 'fit-content';\n\n if (calPosition() === 'top') {\n calendarRef.current.style.bottom = `${window.innerHeight - inputRect.top + portalGap}px`;\n calendarRef.current.style.top = 'auto';\n } else {\n calendarRef.current.style.top = `${inputRect.bottom + portalGap}px`;\n calendarRef.current.style.bottom = 'auto';\n }\n }\n };\n\n const throttledPositioning = throttle(positioning, 10);\n\n positioning();\n\n const scrollableElement = scrollableElementId\n ? document.getElementById(scrollableElementId)\n : window;\n window.addEventListener('resize', throttledPositioning);\n scrollableElement?.addEventListener('scroll', throttledPositioning);\n return () => {\n window.removeEventListener('resize', throttledPositioning);\n scrollableElement?.removeEventListener('scroll', throttledPositioning);\n };\n }, [isOpen, usePortal]);\n\n return (\n <div style={{ width, height }} className={className}>\n <div className={`${className} ${styles.wrapper}`}>\n <div style={{ position: 'relative', flex: 1 }}>\n <TextInput\n ref={inputRef}\n type='text'\n title={label}\n isRequired={isRequired}\n titlePosition={titlePosition}\n gap={gap}\n id={singleDateId}\n value={inputValue}\n titleAttr={inputTitle || label || '날짜'}\n isValid={isValid === false ? false : isValidInput}\n error={useMessage ? errorMessage : undefined}\n onChange={(e) => handleInputChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n useIcon={true}\n icon={\n <button\n title={'캘린더 열기'}\n type='button'\n onClick={handleToggle}\n className={styles.iconButton}\n disabled={disabled}>\n <Icon icon='Calendar' className={styles.icon} />\n </button>\n }\n iconPosition='right'\n clickableIcon={true}\n style={{ height, width: '100%' }}\n />\n {!usePortal && (\n <div\n ref={calendarRef}\n className={`${styles.calendarDropdown} ${styles[position]} ${isOpen ? styles.open : ''}`}>\n <Calendar\n type='single'\n selectedDate={currentSelectedDate || selectedDate}\n onDateSelect={handleDateClick}\n onConfirm={() => handleConfirm(onChange)}\n onCancel={() => handleCancel()}\n minYear={minYear}\n maxYear={maxYear}\n minDate={formatMinDate}\n maxDate={formatMaxDate}\n />\n </div>\n )}\n {isOpen &&\n usePortal &&\n rootElement &&\n createPortal(\n <div ref={calendarRef} className={`${styles.calendarDropdown} ${styles.open}`}>\n <Calendar\n type='single'\n selectedDate={currentSelectedDate || selectedDate}\n onDateSelect={handleDateClick}\n onConfirm={() => handleConfirm(onChange)}\n onCancel={() => handleCancel()}\n minYear={minYear}\n maxYear={maxYear}\n minDate={formatMinDate}\n maxDate={formatMaxDate}\n />\n </div>,\n rootElement,\n )}\n </div>\n </div>\n </div>\n );\n}\n","import { RangeDatePicker } from './components/RangeDatePicker/RangeDatePicker';\nimport { SingleDatePicker } from './components/SingleDatePicker/SingleDatePicker';\nimport type { DatePickerProps } from './DatePicker.type';\n\nexport function DatePicker(props: DatePickerProps) {\n if (props.type === 'range') {\n return <RangeDatePicker {...props} onChange={props.onChange} isValid={props.isValid} />;\n } else {\n return <SingleDatePicker {...props} onChange={props.onChange} isValid={props.isValid} />;\n }\n}\n",".detail {\n\tmargin: 0;\n}\n\n.size_l {\n\tfont-size: 1.125rem;\n}\n\n.size_m {\n\tfont-size: 1rem;\n}\n\n.size_s {\n\tfont-size: 0.875rem;\n}\n\n.weight_regular {\n\tfont-weight: 400;\n}\n\n.weight_bold {\n\tfont-weight: 700;\n}\n","import * as React from 'react';\nimport { colors, getColor } from 'src/styles/color/color';\nimport * as styles from './Detail.module.css';\nimport type { DetailProps } from './Detail.type';\n\n/**\n * Detail 컴포넌트 😸\n * 상세 정보를 렌더링하는 컴포넌트\n *\n * @param props - Detail 컴포넌트의 props\n * @param size - 텍스트 크기 (l, m, s)\n * @param weight - 텍스트 두께 (regular, bold)\n * @param children - 렌더링할 내용\n * @param className - 추가로 적용할 클래스 이름\n */\n\nexport function Detail<E extends React.ElementType = 'span'>({\n size = 'm',\n weight = 'regular',\n color = 'gray-90',\n children,\n className = '',\n ...props\n}: DetailProps<E>) {\n let colorStyle: React.CSSProperties = {};\n if (color in colors) {\n colorStyle.color = getColor(color as keyof typeof colors);\n } else {\n colorStyle.color = color;\n }\n return (\n <span\n className={`${styles.detail} ${styles[`size_${size}`]} ${styles[`weight_${weight}`]} ${className}`.trim()}\n style={colorStyle}\n {...props}>\n {children}\n </span>\n );\n}\n",".display {\n\tmargin: 0;\n}\n\n.size_l {\n\tfont-size: 3.75rem;\n}\n\n.size_m {\n\tfont-size: 2.75rem;\n}\n\n.size_s {\n\tfont-size: 2.25rem;\n}\n\n.weight_bold {\n\tfont-weight: 700;\n}\n\n@media (max-width: 600px) {\n\t.size_l {\n\t\tfont-size: 2.75rem;\n\t}\n\t.size_m {\n\t\tfont-size: 2rem;\n\t}\n\t.size_s {\n\t\tfont-size: 1.75rem;\n\t}\n}\n","import * as React from 'react';\nimport { colors, getColor } from 'src/styles/color/color';\nimport * as styles from './Display.module.css';\nimport type { DisplayProps } from './Display.type';\n\n/**\n * Display 컴포넌트 😸\n * 제목(헤딩) 텍스트\n *\n * @param props - Display 컴포넌트의 props\n * @param size - 제목 텍스트의 크기 (예: 's', 'm', 'l')\n * @param color - 제목 텍스트의 색상\n * @param children - 렌더링할 텍스트 또는 노드\n * @param className - 추가로 적용할 클래스 이름\n */\nexport function Display<E extends React.ElementType = 'h1'>({\n size = 'm',\n children,\n color = 'gray-90',\n className = '',\n ...props\n}: DisplayProps<E>) {\n const sizeClass = styles[`size_${size}`];\n const weightClass = styles.weight_bold;\n const displayClass = styles.display;\n\n let colorStyle: React.CSSProperties = {};\n if (color in colors) {\n colorStyle.color = getColor(color as keyof typeof colors);\n } else {\n colorStyle.color = color;\n }\n\n return (\n <h1\n className={`${displayClass} ${sizeClass} ${weightClass} ${className}`.trim()}\n style={colorStyle}\n {...props}>\n {children}\n </h1>\n );\n}\n","import ErrorImg from './images/error_img.png';\n\nexport const MainImagePath = {\n ErrorImg,\n};\n",".heading {\n\tmargin: 0;\n\tfont-weight: 700;\n}\n\n.h1 {\n\tfont-size: 40px;\n\tline-height: 60px;\n}\n.h2 {\n\tfont-size: 32px;\n\tline-height: 48px;\n}\n.h3 {\n\tfont-size: 24px;\n\tline-height: 36px;\n}\n.h4 {\n\tfont-size: 20px;\n\tline-height: 30px;\n}\n.h5 {\n\tfont-size: 16px;\n\tline-height: 26px;\n}\n\n@media (max-width: 600px) {\n\t.h1 {\n\t\tfont-size: 32px;\n\t\tline-height: 48px;\n\t}\n\t.h2 {\n\t\tfont-size: 24px;\n\t\tline-height: 36px;\n\t}\n\t.h3 {\n\t\tfont-size: 22px;\n\t\tline-height: 34px;\n\t}\n\t.h4 {\n\t\tfont-size: 19px;\n\t\tline-height: 30px;\n\t}\n\t.h5 {\n\t\tfont-size: 17px;\n\t\tline-height: 26px;\n\t}\n}\n","import * as styles from './Heading.module.css';\nimport * as React from 'react';\nimport { colors, getColor } from '../../styles/color/color';\nimport type { HeadingProps } from './Heading.type';\n\n/**\n * Heading 컴포넌트 😸🐖\n * 제목(헤딩) 텍스트\n *\n * @param props - Heading 컴포넌트의 props\n * @param size - 헤딩의 레벨(h1~h6), 기본값 1\n * @param color - 헤딩 텍스트의 색상\n * @param children - 렌더링할 텍스트 또는 React 노드\n * @param className - 추가로 적용할 클래스 이름\n */\n\nexport function Heading({\n size = 1,\n color = 'gray-90',\n children,\n className = '',\n ...props\n}: HeadingProps) {\n const tag = `h${size}`;\n\n const colorStyle: React.CSSProperties = {};\n if (color in colors) {\n colorStyle.color = getColor(color as keyof typeof colors);\n } else {\n colorStyle.color = color;\n }\n\n return React.createElement(\n tag,\n {\n className: `${styles.heading} ${styles[`h${size}`]} ${className}`.trim(),\n style: colorStyle,\n ...props,\n },\n children,\n );\n}\n","import { MainImagePath } from 'src/assets/main-assets-path';\nimport { Body } from '../Body';\nimport { Button } from '../Button';\nimport { Heading } from '../Heading';\nimport * as styles from './ErrorPage.module.css';\nimport { ErrorPageProps } from './ErrorPage.type';\n\nexport function ErrorPage({ onClick }: ErrorPageProps) {\n return (\n <div className={styles.ErrorPage}>\n <div>\n <img src={MainImagePath.ErrorImg} alt='에러이미지' width={180} />\n </div>\n <div className={styles.ErrorPageContent}>\n <Heading size={3}>시스템 오류가 발생했습니다. (500)</Heading>\n <Body>\n 요청하신 작업을 처리하는 중 시스템에 문제가 발생했습니다.\n <br /> 잠시 후 다시 시도해 주세요. 문제가 지속되면 시스템 관리자에게 문의해 주세요.\n </Body>\n </div>\n <div>\n <Button\n label='이전 페이지'\n variant='teriary'\n height='64px'\n width='170px'\n onClick={onClick}\n />\n </div>\n </div>\n );\n}\n","import { type ChangeEvent, useEffect, useRef, useState } from 'react';\nimport { Button } from '../Button';\nimport { Icon } from '../Icon';\nimport * as styles from './FileButtonUpload.module.css';\nimport type { FileButtonUploadProps } from './FileButtonUpload.type';\n\nexport const FileButtonUpload = ({\n label = '파일 선택',\n variant = 'secondary',\n accept = 'image/png,image/jpg,image/webp',\n maxSizeMB = 1,\n value = [],\n initialFileName,\n onChange,\n subDescription = [],\n maxFiles = 1,\n useIcon = false,\n}: FileButtonUploadProps) => {\n const [initialFile, setInitialFile] = useState<string | null>(initialFileName ?? null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n setInitialFile(initialFileName ?? null);\n }, [initialFileName]);\n\n const handleFileClick = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = (e: ChangeEvent<HTMLInputElement>) => {\n setInitialFile(null);\n const files = e.target.files;\n if (!files) return;\n\n const newFiles = Array.from(files).filter((file) => file.size <= maxSizeMB * 1024 * 1024);\n const totalFiles = maxFiles === 1 ? newFiles : [...value, ...newFiles].slice(0, maxFiles);\n\n onChange(totalFiles);\n e.target.value = '';\n };\n\n const handleRemove = (index: number) => {\n const updatedFiles = [...value];\n updatedFiles.splice(index, 1);\n onChange(updatedFiles);\n };\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.uploadButtonWrapper}>\n <Button\n label={label}\n variant={variant}\n width='96px'\n height='40px'\n rounded='6px'\n type='button'\n useIcon={useIcon}\n icon={<Icon icon={'Upload'} size={16} color={'var(--krds-color-primary-60)'} />}\n onClick={handleFileClick}\n />\n <input\n ref={fileInputRef}\n type='file'\n accept={accept}\n className={styles.hiddenInput}\n onChange={handleFileChange}\n multiple={maxFiles > 1}\n />\n\n {/* 파일 없을 경우에만 텍스트 표시 */}\n {value.length === 0 && (!initialFileName || !initialFile) && (\n <span className='text-dak-gray-70 text-dak-t2'>선택된 파일 없음</span>\n )}\n </div>\n\n {/* 서브 설명 */}\n {subDescription && subDescription.length > 0 && (\n <div className={styles.descriptionWrapper}>\n <Icon icon='SystemInfo' size={22} viewBox='0 0 22 22' />\n <div className={styles.descriptionList}>\n {subDescription.slice(0, 4).map((desc, idx) => (\n <p key={idx} className={styles.description}>\n {desc}\n </p>\n ))}\n </div>\n </div>\n )}\n\n {/* 파일이 있을 경우만 리스트 표시 */}\n {value.length > 0 && (\n <ul className={styles.fileList}>\n {value.map((file, index) => (\n <li key={index} className={styles.fileItem}>\n <span className='text-dak-t2'>\n {file.name} ({((file?.size ?? 0) / 1024 / 1024).toFixed(1)}MB)\n </span>\n <button\n type='button'\n onClick={() => handleRemove(index)}\n aria-label={`${file.name} 파일 삭제`}\n title={`${file.name} 파일 삭제`}\n className={styles.deleteButton}>\n <Icon icon='DeleteIcon' size={14} viewBox='0 0 14 14' />\n </button>\n </li>\n ))}\n </ul>\n )}\n {value?.length <= 0 && initialFile && (\n <ul className={styles.fileList}>\n <li className={styles.fileItem}>\n <span className='text-dak-t2'>{initialFile}</span>\n <button\n type='button'\n onClick={() => setInitialFile(null)}\n aria-label={`${initialFile} 파일 삭제`}\n title={`${initialFile} 파일 삭제`}\n className={styles.deleteButton}>\n <Icon icon='DeleteIcon' size={14} viewBox='0 0 14 14' />\n </button>\n </li>\n </ul>\n )}\n </div>\n );\n};\n","/** biome-ignore-all lint/a11y/useKeyWithClickEvents: <explanation> */\n/** biome-ignore-all lint/suspicious/noArrayIndexKey: <explanation> */\n/** biome-ignore-all lint/a11y/noStaticElementInteractions: <explanation> */\nimport { ChangeEvent, DragEvent, useCallback, useRef, useState } from 'react';\nimport { Button } from '../Button';\nimport { Icon } from '../Icon';\nimport { Label } from '../Label';\nimport * as styles from './DakFileUpload.module.css';\nimport { DakFileItem, DakFileUploadProps, FileValidationResult } from './DakFileUpload.type';\n\n\nexport const DakFileUpload = ({\n value = [],\n onChange,\n accept,\n maxFiles = 10, // 기본값 10개로 설정\n maxSize = 10 * 1024 * 1024, // 기본 10MB\n maxTotalSize,\n multiple = true,\n disabled = false,\n placeholder = '파일을 드래그하거나 클릭하여 업로드하세요',\n showPreview = true,\n showFileSize = true,\n usePreview = false,\n enableDownload = false,\n onServerFileDownload,\n onError,\n className,\n}: DakFileUploadProps) => {\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [dragActive, setDragActive] = useState(false);\n const [errors, setErrors] = useState<string[]>([]);\n\n // 파일 크기를 읽기 쉬운 형태로 변환\n const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i))?.toFixed(2)) + ' ' + sizes[i];\n };\n\n // 파일 확장자 검증\n const validateFileType = (file: File): boolean => {\n if (!accept) return true;\n\n const acceptedTypes = accept.split(',').map((type) => type.trim());\n\n return acceptedTypes.some((acceptedType) => {\n if (acceptedType.startsWith('.')) {\n // 확장자로 검증\n return file.name.toLowerCase().endsWith(acceptedType.toLowerCase());\n } else if (acceptedType.includes('*')) {\n // MIME 타입 패턴으로 검증 (예: image/*)\n const [mainType] = acceptedType.split('/');\n const [fileMainType] = file.type.split('/');\n return mainType === fileMainType;\n } else {\n // 정확한 MIME 타입으로 검증\n return file.type === acceptedType;\n }\n });\n };\n\n // 파일 유효성 검증\n const validateFiles = (files: File[]): FileValidationResult => {\n const errors: string[] = [];\n const currentFileCount = value.length;\n\n // 파일 개수 검증\n if (maxFiles && currentFileCount + files.length > maxFiles) {\n errors.push(`최대 ${maxFiles}개의 파일만 업로드 가능합니다.`);\n }\n\n // 각 파일 검증\n files.forEach((file) => {\n // 파일 크기 검증\n if (file.size > maxSize) {\n errors.push(`${file.name}: 파일 크기가 ${formatFileSize(maxSize)}를 초과합니다.`);\n }\n\n // 파일 타입 검증\n if (!validateFileType(file)) {\n errors.push(`${file.name}: 지원하지 않는 파일 형식입니다.`);\n }\n });\n\n // 전체 파일 크기 검증\n if (maxTotalSize) {\n const currentTotalSize = value.reduce((total, item) => total + item.size, 0);\n const newTotalSize = files.reduce((total, file) => total + file.size, 0);\n\n if (currentTotalSize + newTotalSize > maxTotalSize) {\n errors.push(`전체 파일 크기가 ${formatFileSize(maxTotalSize)}를 초과합니다.`);\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n };\n\n // File을 FileItem으로 변환\n const fileToFileItem = (file: File): DakFileItem => ({\n id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n name: file.name,\n size: file.size,\n type: 'local',\n file,\n });\n\n // 파일 추가 처리\n const handleFiles = useCallback(\n (files: FileList | null) => {\n if (!files || disabled) return;\n\n const fileArray = Array.from(files);\n const validation = validateFiles(fileArray);\n\n if (!validation.valid) {\n setErrors(validation.errors);\n onError?.(validation.errors);\n return;\n }\n\n setErrors([]);\n const newFileItems = fileArray.map(fileToFileItem);\n const updatedFiles = [...value, ...newFileItems];\n\n onChange(updatedFiles);\n },\n [value, onChange, disabled, maxFiles, maxSize, maxTotalSize, accept, onError],\n );\n\n // 파일 선택 처리\n const handleFileSelect = (event: ChangeEvent<HTMLInputElement>) => {\n handleFiles(event.target.files);\n // input 값 리셋 (같은 파일 재선택 가능하도록)\n if (event.target) {\n event.target.value = '';\n }\n };\n\n // 드래그 이벤트 처리\n const handleDrag = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n\n if (e.type === 'dragenter' || e.type === 'dragover') {\n setDragActive(true);\n } else if (e.type === 'dragleave') {\n setDragActive(false);\n }\n };\n\n const handleDrop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\n\n if (disabled) return;\n\n handleFiles(e.dataTransfer.files);\n };\n\n // 파일 삭제\n const handleRemoveFile = (fileId: string) => {\n const updatedFiles = value.filter((file) => file.id !== fileId);\n onChange(updatedFiles);\n setErrors([]); // 파일 제거 시 에러 초기화\n };\n\n // 파일 다운로드\n const handleFileDownload = (fileItem: DakFileItem) => {\n if (fileItem.type === 'server') {\n onServerFileDownload?.(fileItem.fileId!, fileItem.name);\n } else if (fileItem.file) {\n // 로컬 파일 다운로드\n const url = URL.createObjectURL(fileItem.file);\n const a = document.createElement('a');\n a.href = url;\n a.download = fileItem.name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n };\n\n // 업로드 영역 클릭\n const handleUploadAreaClick = () => {\n if (!disabled) {\n fileInputRef.current?.click();\n }\n };\n\n // 이미지 파일 여부 확인\n const isImageFile = (fileName: string): boolean => {\n const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'];\n const extension = fileName.toLowerCase().substring(fileName.lastIndexOf('.'));\n return imageExtensions.includes(extension);\n };\n\n // 이미지 미리보기 URL 생성\n const getPreviewUrl = (fileItem: DakFileItem): string | null => {\n if (fileItem.type === 'local' && fileItem.file && isImageFile(fileItem.name)) {\n return URL.createObjectURL(fileItem.file);\n }\n return null;\n };\n\n return (\n <div className={`${styles.container} ${className || ''}`}>\n {/* 파일 업로드 영역 */}\n <div\n className={`${styles.uploadArea} ${\n dragActive ? styles.dragActive : ''\n } ${disabled ? styles.disabled : ''}`}\n onDragEnter={handleDrag}\n onDragLeave={handleDrag}\n onDragOver={handleDrag}\n onDrop={handleDrop}\n onClick={handleUploadAreaClick}>\n <Label id={`file-upload-info`} size='s' color='gray-60' className={styles.infoLabel}>\n 첨부할 파일을 여기에 끌어다 놓거나, 파일 선택 버튼을 직접 선택해주세요.\n </Label>\n <div className={styles.uploadText}>{placeholder}</div>\n <div>\n <Button\n label={'파일선택'}\n variant='secondary'\n size='s'\n width={'96px'}\n icon={<Icon icon='Upload' size={24} color='#0B50D0' />}\n />\n </div>\n </div>\n\n {/* 숨겨진 파일 input */}\n <input\n ref={fileInputRef}\n type='file'\n className={styles.hiddenInput}\n accept={accept}\n multiple={multiple}\n onChange={handleFileSelect}\n disabled={disabled}\n />\n\n {/* 파일 카운터 */}\n {value.length > 0 && (\n <div className={styles.fileCounter}>\n <span className={styles.fileCount}>{value.length}개</span>/<span>{maxFiles}개</span>\n </div>\n )}\n\n {/* 에러 메시지 */}\n {errors.length > 0 && (\n <div className={styles.errors}>\n {errors.map((error, index) => (\n <div key={index} className={styles.error}>\n {error}\n </div>\n ))}\n </div>\n )}\n\n {/* 파일 목록 */}\n {value.length > 0 && (\n <div className={styles.fileList}>\n {value.map((fileItem) => {\n const previewUrl = showPreview ? getPreviewUrl(fileItem) : null;\n\n return (\n <div key={fileItem.id} className={styles.fileItem}>\n <div className={styles.filePreview}>\n {/* 미리보기 이미지 */}\n {usePreview && previewUrl && (\n <img\n src={previewUrl}\n alt={fileItem.name}\n className={styles.preview}\n onLoad={() => {\n if (fileItem.type === 'local' && previewUrl.startsWith('blob:')) {\n // URL.revokeObjectURL(previewUrl); // 필요시 메모리 정리\n }\n }}\n />\n )}\n\n {/* 파일 정보 */}\n <div className={styles.fileInfo}>\n <div\n className={`${styles.fileName} ${enableDownload ? styles.downloadable : ''}`}\n onClick={enableDownload ? () => handleFileDownload(fileItem) : undefined}\n title={enableDownload ? '클릭하여 다운로드' : undefined}>\n {fileItem.name}\n </div>\n {showFileSize && (\n <div className={styles.fileSize}>({formatFileSize(fileItem.size)})</div>\n )}\n </div>\n </div>\n\n {/* 파일 액션 */}\n <Button\n variant='text'\n label='삭제'\n height='auto'\n icon={<Icon icon='DeleteIcon' size={16} viewBox='0 0 16 16' />}\n iconPosition='right'\n className={styles.deleteButton}\n disabled={disabled}\n onClick={() => handleRemoveFile(fileItem.id)}\n width='fit-content'\n />\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","import type { FC } from 'react';\nimport { Button } from '../Button';\nimport { Icon } from '../Icon';\nimport { Label } from '../Label';\nimport { Spinner } from '../Spinner';\nimport * as styles from './FileItem.module.css';\nimport type { FileItemProps } from './FileItem.type';\n\nexport const FileItem: FC<FileItemProps> = ({\n name,\n size = 0,\n status,\n showDownload,\n className,\n maxWidth,\n onDownload,\n onRemove,\n}) => {\n const rawSizeMB = size / (1024 * 1024);\n const fileSizeMB = Number.isInteger(rawSizeMB)\n ? rawSizeMB.toFixed(0)\n : Number(rawSizeMB ?? 0).toFixed(2);\n\n const isReadOnly = !status && showDownload;\n\n return (\n <div className={`${styles.fileItem} ${className}`} style={{ maxWidth }}>\n <div className={styles.fileItemHeader}>\n <Label id={`file-name-${name}`} size='s' className={styles.fileNameLabel}>\n {name} ({fileSizeMB}MB)\n </Label>\n\n {status === 'uploading' && <Spinner />}\n\n {isReadOnly && (\n <div className={styles.buttonGroup}>\n {showDownload && (\n <Button\n label='다운로드'\n variant='text'\n useIcon\n iconPosition='right'\n icon={<Icon icon='Download' size={20} viewBox='0 0 24 24' />}\n className={styles.viewButton}\n onClick={onDownload}\n />\n )}\n </div>\n )}\n\n {status === 'success' && (\n <Button\n variant='text'\n label='삭제'\n height='auto'\n useIcon\n icon={<Icon icon='DeleteIcon' size={16} viewBox='0 0 16 16' />}\n iconPosition='right'\n className={styles.deleteButton}\n onClick={onRemove}\n width='fit-content'\n />\n )}\n </div>\n </div>\n );\n};\n","import type { ButtonHTMLAttributes } from 'react';\nimport { Button } from 'src/design-index';\n\nexport const BlueButton = ({\n children,\n onClick,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) => {\n return (\n <Button\n {...props}\n label='확인'\n width='78px'\n onClick={onClick ? () => onClick({} as any) : undefined}>\n {children}\n </Button>\n );\n};\n","import type { PropsWithChildren } from 'react';\nimport * as styles from './Button.module.css';\n\nexport const DialogModalButton = ({ children }: PropsWithChildren) => {\n return <div className={styles.buttonWrapDialog}>{children}</div>;\n};\n","import type { ButtonHTMLAttributes } from 'react';\nimport { Button } from '../../index';\n\nexport const GreyButton = ({\n children,\n onClick,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) => (\n <Button\n {...props}\n variant='gray'\n size='m'\n label='닫기'\n width='78px'\n onClick={onClick ? () => onClick({} as any) : undefined}>\n {children}\n </Button>\n);\n","import type { HTMLAttributes, PropsWithChildren } from 'react';\nimport * as styles from './Button.module.css';\n\nexport const MediumModalButton = ({\n children,\n className = '',\n ...props\n}: PropsWithChildren<HTMLAttributes<HTMLDivElement>>) => {\n return (\n <div {...props} className={`${className} ${styles.buttonWrap} ${styles.buttonWrapMedium}`}>\n {children}\n </div>\n );\n};\n","import type { ButtonHTMLAttributes } from 'react';\nimport { Button } from '../../index';\n\nexport const OutlinedBlueButton = ({\n children,\n onClick,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) => (\n <Button\n {...props}\n size='m'\n variant='outline'\n label='닫기'\n width='78px'\n onClick={onClick ? () => onClick({} as any) : undefined}>\n {children}\n </Button>\n);\n","import type { ButtonHTMLAttributes } from 'react';\nimport { Button } from '../../index';\n\nexport const RedButton = ({\n children,\n className = '',\n onClick,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) => {\n return (\n <Button\n {...props}\n className={className}\n variant='danger'\n label='삭제'\n width='fit-content'\n onClick={onClick ? () => onClick({} as any) : undefined}>\n {children}\n </Button>\n );\n};\n","import type { ButtonHTMLAttributes } from 'react';\nimport { Button } from '../../index';\n\nexport const SecondaryButton = ({\n children,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) => (\n <Button {...props} variant='secondary' size='s' label='닫기' width='78px' onClick={() => {}}>\n {children}\n </Button>\n);\n","import type { HTMLAttributes, PropsWithChildren } from 'react';\nimport * as styles from './Button.module.css';\n\nexport const SmallModalButton = ({\n children,\n className = '',\n ...props\n}: PropsWithChildren<HTMLAttributes<HTMLDivElement>>) => {\n return (\n <div {...props} className={`${className} ${styles.buttonWrap} ${styles.buttonWrapSmall}`}>\n {children}\n </div>\n );\n};\n",".dimmedBackdrop {\n\tposition: absolute;\n\twidth: 100vw;\n\theight: 100vh;\n\tbackground-color: rgba(0, 0, 0, 0.4);\n\tdisplay: flex;\n\topacity: 0;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.clearBackdrop {\n\tposition: absolute;\n\twidth: 100vw;\n\theight: 100vh;\n\tdisplay: flex;\n\topacity: 0;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.contentWrapper:focus {\n\toutline: none;\n}\n","import type { PropsWithChildren } from 'react';\nimport { useHandleClickBackdrop } from 'src/hooks/use-handle-click-backdrop';\nimport type { DimmedBackdropProps } from '../Modal.type';\nimport * as styles from './Backdrop.module.css';\n\nexport const DimmedBackdrop = ({\n children,\n onClickBackdrop,\n staticBackdrop,\n}: PropsWithChildren<DimmedBackdropProps>) => {\n const onClose = () => {\n const customEvent = new CustomEvent('pop');\n document.dispatchEvent(customEvent);\n };\n\n const { backdropRef, handleMouseDown, handleMouseUp } = useHandleClickBackdrop(\n onClickBackdrop ?? onClose,\n );\n\n return (\n <div\n id='backdrop'\n ref={backdropRef}\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n className={styles.dimmedBackdrop}\n style={{\n opacity: staticBackdrop ? '1' : '0',\n }}>\n <div id='modal-content' className={styles.contentWrapper}>\n {children}\n </div>\n </div>\n );\n};\n","import { PropsWithChildren } from 'react';\nimport styles from './Backdrop.module.css';\n\nexport const ClearBackdrop = ({\n children,\n staticBackdrop,\n}: PropsWithChildren<{ staticBackdrop?: boolean }>) => {\n return (\n <div\n id='backdrop'\n className={styles.clearBackdrop}\n style={{\n opacity: staticBackdrop ? '1' : '0',\n }}>\n <div id='modal-content' className={styles.contentWrapper}>\n {children}\n </div>\n </div>\n );\n};\n","import { PropsWithChildren } from 'react';\nimport { BackdropProps } from '../Modal.type';\nimport { ClearBackdrop } from './ClearBackdrop';\nimport { DimmedBackdrop } from './DimmedBackdrop';\n\nexport const Backdrop = ({\n backdropType,\n onClickBackdrop,\n children,\n staticBackdrop,\n}: PropsWithChildren<BackdropProps>) => {\n if (backdropType === 'dimmed' && onClickBackdrop) {\n return (\n <DimmedBackdrop staticBackdrop={staticBackdrop} onClickBackdrop={onClickBackdrop}>\n {children}\n </DimmedBackdrop>\n );\n }\n\n return <ClearBackdrop staticBackdrop={staticBackdrop}>{children}</ClearBackdrop>;\n};\n","import type { HTMLAttributes, ReactNode } from 'react';\n\n/**\n * keyboard event 구분을 위한 type\n * - modal의 경우 modal container에 focus\n * - dialog의 경우 primary button에 focus\n * - custom의 경우 수동으로 동작을 추가해주세요\n */\nexport enum MODAL_LIST_TYPE {\n MODAL = 'modal',\n DIALOG = 'dialog',\n CUSTOM = 'custom',\n}\n\nexport interface ModalListProps {\n type: MODAL_LIST_TYPE; // keyboard event 구분을 위한 type 추가\n id?: string;\n show?: boolean;\n contents: ReactNode;\n zIndex?: number;\n top?: string;\n onConfirm?: () => void;\n onKeydown?: (e: KeyboardEvent) => void;\n}\n\nexport interface ModalProps {\n type?: MODAL_LIST_TYPE;\n id?: string;\n show?: boolean;\n zIndex?: number;\n top?: string;\n onKeydown?: (e: KeyboardEvent) => void;\n}\n\nexport interface ModalPresenterProps {\n type: MODAL_LIST_TYPE;\n id?: string;\n show?: boolean;\n zIndex?: number;\n top?: string;\n removeInvisibleModal: () => void;\n}\n\nexport interface DialogProps {\n id?: string;\n show?: boolean;\n onConfirmCb?: () => void;\n zIndex?: number;\n}\n\nexport interface DimmedBackdropProps {\n onClickBackdrop?: () => void;\n staticBackdrop?: boolean;\n}\n\nexport interface ModalContainerProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * backdrop click, esc keyDown 에 공통된 close func 을 넘겨주고 싶을 때 사용.\n * 아무것도 넘기지 않으면 modalService.pop 실행됨.\n */\n onClose?: () => void;\n /**\n * custom backdropClick func\n */\n onClickBackdrop?: () => void;\n /**\n * custom escKeyDown func\n */\n onEscKeyDown?: () => void;\n backdropType?: BackdropType;\n staticBackdrop?: boolean;\n useClose?: boolean;\n}\n\nexport interface BackdropProps {\n backdropType: BackdropType;\n onClickBackdrop?: () => void;\n staticBackdrop?: boolean;\n}\n\nexport type BackdropType = 'dimmed' | 'clear';\n\nexport type ModalCustomService = 'push' | 'pop' | 'popAll' | 'popById';\n","import { useCallback, useEffect, useRef } from 'react';\n\ninterface UseFocusInDialogProps {\n id?: string;\n}\n\nconst focusableElements =\n 'button:not(:disabled), [href], input:not(:disabled), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\nexport const useFocusInDialog = ({ id }: UseFocusInDialogProps) => {\n const lastFocusedElement = useRef<HTMLElement | null>(null);\n\n const addEventForFocus = useCallback(() => {\n if (!id) return;\n\n const portals = document.getElementsByClassName('portal-wrap');\n const contentEl = Array.from(portals ?? []).find(\n (portal) => portal.getAttribute('data-id') === id,\n );\n\n if (!contentEl) return;\n\n const focusableList = contentEl?.querySelectorAll('button:not(:disabled)');\n const firstFocusEl = focusableList[focusableList.length - 1];\n\n if (firstFocusEl instanceof HTMLElement) firstFocusEl.focus();\n\n document.addEventListener('keydown', (e) => {\n const focusableList = contentEl.querySelectorAll(focusableElements);\n const firstElement = focusableList[0];\n const lastElement = focusableList[focusableList.length - 1];\n const isTabPressed = e.key === 'Tab';\n\n if (!isTabPressed) return;\n\n if (e.shiftKey) {\n if (document.activeElement === firstElement) {\n if (lastElement instanceof HTMLElement) lastElement.focus();\n e.preventDefault();\n return;\n }\n }\n\n if (document.activeElement === lastElement) {\n if (firstElement instanceof HTMLElement) firstElement.focus();\n\n e.preventDefault();\n }\n });\n }, [id]);\n\n useEffect(() => {\n if (!id) return;\n\n if (!lastFocusedElement.current) {\n if (document.activeElement instanceof HTMLElement) {\n lastFocusedElement.current = document.activeElement;\n }\n }\n\n addEventForFocus();\n\n return () => {\n if (lastFocusedElement.current instanceof HTMLElement) {\n lastFocusedElement.current.focus();\n }\n };\n }, [id, addEventForFocus]);\n};\n","import { useFocusInContent } from '../../../hooks';\nimport { MODAL_LIST_TYPE } from '../Modal.type';\nimport { useFocusInDialog } from './use-focus-in-dialog';\n\ninterface UseFocusInModalManagerProps {\n id?: string;\n type: MODAL_LIST_TYPE;\n}\n\nexport const useFocusInModalManager = ({ id, type }: UseFocusInModalManagerProps) => {\n // modal의 경우\n useFocusInContent({ id: type === MODAL_LIST_TYPE.MODAL ? id : undefined });\n // dialog의 경우\n useFocusInDialog({ id: type === MODAL_LIST_TYPE.DIALOG ? id : undefined });\n};\n","import { MutableRefObject, useEffect } from 'react';\n\nexport const useEscKeyEventListener = ({\n onEscKeyDown,\n ref,\n}: {\n onEscKeyDown: () => void;\n ref: MutableRefObject<HTMLDivElement | null>;\n}) => {\n useEffect(() => {\n const handleKeydown = (e: KeyboardEvent) => {\n const portals = document.getElementsByClassName('portal-wrap');\n const currentPortalId = Array.from(portals ?? [])\n .find((modal) => modal.contains(ref.current))\n ?.getAttribute('data-id');\n const activePortalId = Array.from(portals ?? [])[portals.length - 1]?.getAttribute('data-id');\n\n const isActivePortal = currentPortalId === activePortalId;\n\n if (e.key === 'Escape' && isActivePortal && !!onEscKeyDown) {\n onEscKeyDown();\n }\n };\n\n document.addEventListener('keydown', handleKeydown);\n\n return () => {\n document.removeEventListener('keydown', handleKeydown);\n };\n }, [onEscKeyDown, ref.current]);\n};\n","import { Dispatch, SetStateAction } from 'react';\nimport { ModalListProps } from '../Modal.type';\n\nexport const useHandleModalList = ({\n modalList,\n setModalList,\n}: {\n modalList: ModalListProps[];\n setModalList: Dispatch<SetStateAction<ModalListProps[]>>;\n}) => {\n const hideLatestModal = () => {\n /** show 가 true 인 것 중 가장 마지막 modalItem 의 id */\n const visibleForefrontModalId = [...modalList]\n .reverse()\n .find((modalItem) => modalItem.show)?.id;\n\n if (!visibleForefrontModalId) return;\n\n hideModalById(visibleForefrontModalId);\n };\n\n /** id 를 가진 modalItem.show 를 false 로 변경 */\n // modal close animation 실행 후 display none 처리 후 showModal 실행 시 show false인 모달 clear\n const hideModalById = (id: string) => {\n if (!modalList.length) return;\n if (!modalList.find((modal) => modal.id === id)) return;\n\n setModalList((prev) =>\n prev.map((modal) => (modal.id === id ? { ...modal, show: false } : modal)),\n );\n };\n\n const hideAllModal = () =>\n setModalList((prev) => prev.map((modal) => ({ ...modal, show: false })));\n\n return {\n hideLatestModal,\n hideModalById,\n hideAllModal,\n };\n};\n","import { type Dispatch, type SetStateAction, useEffect } from 'react';\nimport type { ModalListProps } from '../Modal.type';\nimport { useHandleModalList } from './use-handle-modal-list';\n\ninterface UseModalCustomEventListenerProps {\n modalList: ModalListProps[];\n setModalList: Dispatch<SetStateAction<ModalListProps[]>>;\n}\nexport const useModalCustomEventListener = ({\n modalList,\n setModalList,\n}: UseModalCustomEventListenerProps) => {\n const { hideLatestModal, hideModalById, hideAllModal } = useHandleModalList({\n modalList,\n setModalList,\n });\n\n const cb =\n <T>(event: Event) =>\n (handler: (e: T) => void) => {\n const eventData = event as CustomEvent<T>;\n return handler(eventData.detail);\n };\n\n const pushCb = (e: Event) =>\n cb<ModalListProps>(e)((newItem) => setModalList((prev) => prev.concat(newItem)));\n\n const popCb = (e: Event) => cb(e)(hideLatestModal);\n\n const popByIdCb = (e: Event) => cb<string>(e)(hideModalById);\n\n const popAllCb = (e: Event) => cb(e)(hideAllModal);\n\n useEffect(() => {\n document.addEventListener('push', pushCb);\n return () => document.removeEventListener('push', pushCb);\n }, [pushCb]);\n\n useEffect(() => {\n document.addEventListener('pop', popCb);\n return () => document.removeEventListener('pop', popCb);\n }, [popCb]);\n\n useEffect(() => {\n document.addEventListener('popById', popByIdCb);\n return () => document.removeEventListener('popById', popByIdCb);\n }, [popByIdCb]);\n\n useEffect(() => {\n document.addEventListener('popAll', popAllCb);\n return () => document.removeEventListener('popAll', popAllCb);\n }, [popAllCb]);\n};\n","import { useEffect, useRef } from 'react';\n\nexport const useAddModalAnimationStyle = ({\n trigger,\n id,\n top,\n}: {\n trigger: boolean;\n id?: string;\n top?: string;\n}) => {\n const ref = useRef<HTMLDivElement | null>(null);\n\n const addStyle = () => {\n const portals = document.getElementsByClassName('portal-wrap');\n const activePortal = Array.from(portals ?? []).find(\n (portal) => portal.getAttribute('data-id') === id,\n );\n\n const backdrop = activePortal?.querySelector('#backdrop') as HTMLElement;\n const content = activePortal?.querySelector('#modal-content') as HTMLElement;\n\n if (!backdrop || !content) {\n return;\n }\n\n if (top) {\n content.style.position = 'fixed';\n content.style.top = top;\n }\n\n if (trigger) {\n backdrop.style.opacity = '1';\n backdrop.style.transition = 'all 200ms ease';\n content.style.opacity = '1';\n content.style.animation = 'fadeInUp 200ms';\n return;\n }\n if (!trigger) {\n backdrop.style.opacity = '0';\n backdrop.style.transition = 'all 200ms ease';\n content.style.opacity = '0';\n content.style.animation = 'fadeOutDown 200ms';\n }\n };\n\n useEffect(addStyle, [trigger, id]);\n\n return { ref };\n};\n","import type { PropsWithChildren } from 'react';\nimport { useRef } from 'react';\n\nimport { useEscKeyEventListener } from '../utils';\n\nexport const EscKeyEventHandler = ({\n children,\n onEscKeyDown,\n}: PropsWithChildren<{ onEscKeyDown: () => void }>) => {\n const ref = useRef<HTMLDivElement | null>(null);\n\n useEscKeyEventListener({ onEscKeyDown, ref });\n\n return (\n <div id='esc-handler' ref={ref}>\n {children}\n </div>\n );\n};\n","import type { PropsWithChildren } from 'react';\nimport { forwardRef, useCallback } from 'react';\nimport { Icon } from '../../index';\nimport { Backdrop } from '../BackDrop';\nimport { EscKeyEventHandler } from '../KeyEventHandler';\nimport type { ModalContainerProps } from '../Modal.type';\nimport * as styles from './Container.module.css';\n\nexport const LargeModalContainer = forwardRef<\n HTMLDivElement,\n PropsWithChildren<ModalContainerProps>\n>(\n (\n {\n children,\n onClose: _onClose,\n onClickBackdrop: _onClickBackdrop,\n onEscKeyDown: _onEscKeyDown,\n useClose = true,\n backdropType = 'dimmed',\n staticBackdrop,\n className = '',\n ...props\n },\n ref,\n ) => {\n const onClose = () => {\n const customEvent = new CustomEvent('pop');\n document.dispatchEvent(customEvent);\n };\n const onEscKeyDown = useCallback(_onEscKeyDown ?? _onClose ?? onClose, [\n _onEscKeyDown,\n _onClose,\n onClose,\n ]);\n\n const onClickBackdrop = useCallback(_onClickBackdrop ?? _onClose ?? onClose, [\n _onClickBackdrop,\n _onClose,\n onClose,\n ]);\n\n const onClick = _onClose ?? onClose;\n\n const modal = (\n <div\n {...props}\n ref={ref}\n className={`${className} ${styles.modalContainer} ${styles.modalContainerLarge}`}>\n {children}\n {useClose && (\n <div className={`${styles.modalCloseContainer} ${styles.buttonWrapLarge}`}>\n <button\n type='button'\n className={styles.modalCloseButton}\n onClick={onClick}\n title='모달 닫기'\n aria-label='닫기'>\n <Icon icon='Close' size={20} />\n </button>\n </div>\n )}\n </div>\n );\n\n return (\n <EscKeyEventHandler onEscKeyDown={onEscKeyDown}>\n <Backdrop\n staticBackdrop={staticBackdrop}\n backdropType={backdropType}\n onClickBackdrop={onClickBackdrop}>\n {modal}\n </Backdrop>\n </EscKeyEventHandler>\n );\n },\n);\n","import type { PropsWithChildren } from 'react';\nimport { forwardRef, useCallback } from 'react';\nimport { Icon } from '../../index';\nimport { Backdrop } from '../BackDrop';\nimport { EscKeyEventHandler } from '../KeyEventHandler';\nimport type { ModalContainerProps } from '../Modal.type';\nimport * as styles from './Container.module.css';\n\nexport const MediumModalContainer = forwardRef<\n HTMLDivElement,\n PropsWithChildren<ModalContainerProps>\n>(\n (\n {\n children,\n onClose: _onClose,\n onClickBackdrop: _onClickBackdrop,\n onEscKeyDown: _onEscKeyDown,\n useClose = true,\n backdropType = 'dimmed',\n staticBackdrop,\n className = '',\n ...props\n },\n ref,\n ) => {\n const onClose = () => {\n const customEvent = new CustomEvent('pop');\n document.dispatchEvent(customEvent);\n };\n\n const onEscKeyDown = useCallback(_onEscKeyDown ?? _onClose ?? onClose, [\n _onEscKeyDown,\n _onClose,\n onClose,\n ]);\n\n const onClickBackdrop = useCallback(_onClickBackdrop ?? _onClose ?? onClose, [\n _onClickBackdrop,\n _onClose,\n onClose,\n ]);\n\n const onClick = _onClose ?? onClose;\n\n const modal = (\n <div\n {...props}\n ref={ref}\n className={`${className} ${styles.modalContainer} ${styles.modalContainerMedium}`}>\n {children}\n {useClose && (\n <div className={`${styles.modalCloseContainer} ${styles.buttonWrapMedium}`}>\n <button\n type='button'\n className={styles.modalCloseButton}\n onClick={onClick}\n title={'모달 닫기'}\n aria-label='닫기'>\n <Icon icon='Close' size={20} />\n </button>\n </div>\n )}\n </div>\n );\n\n return (\n <EscKeyEventHandler onEscKeyDown={onEscKeyDown}>\n <Backdrop\n staticBackdrop={staticBackdrop}\n backdropType={backdropType}\n onClickBackdrop={onClickBackdrop}>\n {modal}\n </Backdrop>\n </EscKeyEventHandler>\n );\n },\n);\n","import type { PropsWithChildren } from 'react';\nimport { forwardRef, useCallback } from 'react';\nimport { Icon } from '../../index';\nimport { Backdrop } from '../BackDrop';\nimport { EscKeyEventHandler } from '../KeyEventHandler';\nimport type { ModalContainerProps } from '../Modal.type';\nimport * as styles from './Container.module.css';\n\nexport const SmallModalContainer = forwardRef<\n HTMLDivElement,\n PropsWithChildren<ModalContainerProps>\n>(\n (\n {\n children,\n onClose: _onClose,\n onClickBackdrop: _onClickBackdrop,\n onEscKeyDown: _onEscKeyDown,\n useClose = true,\n backdropType = 'dimmed',\n staticBackdrop,\n className = '',\n ...props\n },\n ref,\n ) => {\n const onClose = () => {\n const customEvent = new CustomEvent('pop');\n document.dispatchEvent(customEvent);\n };\n\n const onEscKeyDown = useCallback(_onEscKeyDown ?? _onClose ?? onClose, [\n _onEscKeyDown,\n _onClose,\n onClose,\n ]);\n\n const onClickBackdrop = useCallback(_onClickBackdrop ?? _onClose ?? onClose, [\n _onClickBackdrop,\n _onClose,\n onClose,\n ]);\n const onClick = _onClose ?? onClose;\n\n const modal = (\n <div\n {...props}\n ref={ref}\n className={`${className} ${styles.modalContainer} ${styles.modalContainerSmall}`}>\n {children}\n {useClose && (\n <div className={`${styles.modalCloseContainer} ${styles.buttonWrapSmall}`}>\n <button\n type='button'\n className={styles.modalCloseButton}\n onClick={onClick}\n title='모달 닫기'\n aria-label='닫기'>\n <Icon icon='Close' size={20} />\n </button>\n </div>\n )}\n </div>\n );\n\n return (\n <EscKeyEventHandler onEscKeyDown={onEscKeyDown}>\n <Backdrop\n staticBackdrop={staticBackdrop}\n backdropType={backdropType}\n onClickBackdrop={onClickBackdrop}>\n {modal}\n </Backdrop>\n </EscKeyEventHandler>\n );\n },\n);\n","import { PropsWithChildren, forwardRef, useCallback } from 'react';\nimport { Backdrop } from '../BackDrop';\nimport { EscKeyEventHandler } from '../KeyEventHandler';\nimport { ModalContainerProps } from '../Modal.type';\nimport * as styles from './Container.module.css';\n\nexport const DialogModalContainer = forwardRef<\n HTMLDivElement,\n PropsWithChildren<ModalContainerProps>\n>(\n (\n {\n children,\n onClose: _onClose,\n onClickBackdrop: _onClickBackdrop,\n onEscKeyDown: _onEscKeyDown,\n backdropType = 'dimmed',\n className = '',\n ...props\n },\n ref,\n ) => {\n const onClose = () => {\n const customEvent = new CustomEvent('pop');\n document.dispatchEvent(customEvent);\n };\n const onEscKeyDown = useCallback(_onEscKeyDown ?? _onClose ?? onClose, [\n _onEscKeyDown,\n _onClose,\n onClose,\n ]);\n\n const onClickBackdrop = useCallback(_onClickBackdrop ?? _onClose ?? onClose, [\n _onClickBackdrop,\n _onClose,\n onClose,\n ]);\n\n return (\n <EscKeyEventHandler onEscKeyDown={onEscKeyDown}>\n <Backdrop backdropType={backdropType} onClickBackdrop={onClickBackdrop}>\n <div {...props} ref={ref} className={`${styles.modalContainerDialog} ${className}`}>\n {children}\n </div>\n </Backdrop>\n </EscKeyEventHandler>\n );\n },\n);\n","import type { PropsWithChildren } from 'react';\nimport * as styles from './Content.module.css';\n\nexport const DialogModalContent = ({ children }: PropsWithChildren) => {\n return <div className={styles.modalContentDialog}>{children}</div>;\n};\n","import type { PropsWithChildren } from 'react';\nimport * as styles from './Content.module.css';\nimport type { ModalContentProps } from './Modal.type';\n\nexport const LargeModalContent = ({\n children,\n className = '',\n contentMaxHeight,\n ...props\n}: PropsWithChildren<ModalContentProps>) => {\n return (\n <section\n className={`${className} ${styles.modalContent} ${styles.modalContentLarge}`}\n tabIndex={0}\n aria-label='모달 내용 스크롤 영역'\n {...props}>\n {children}\n </section>\n );\n};\n","import type { PropsWithChildren } from 'react';\nimport * as styles from './Content.module.css';\nimport type { ModalContentProps } from './Modal.type';\n\nexport const MediumModalContent = ({\n children,\n className = '',\n contentMaxHeight,\n ...props\n}: PropsWithChildren<ModalContentProps>) => {\n return (\n <section\n className={`${className} ${styles.modalContent} ${styles.modalContentMedium}`}\n tabIndex={0}\n aria-label='모달 내용 스크롤 영역'\n {...props}>\n {children}\n </section>\n );\n};\n","import type { PropsWithChildren } from 'react';\nimport * as styles from './Content.module.css';\nimport type { ModalContentProps } from './Modal.type';\n\nexport const SmallModalContent = ({\n children,\n className = '',\n contentMaxHeight,\n ...props\n}: PropsWithChildren<ModalContentProps>) => {\n return (\n <section\n className={`${className} ${styles.modalContent} ${styles.modalContentSmall}`}\n tabIndex={0}\n aria-label='모달 내용 스크롤 영역'\n {...props}>\n {children}\n </section>\n );\n};\n","import type { PropsWithChildren } from 'react';\nimport * as styles from './Header.module.css';\n\nexport const DialogModalHeader = ({ children }: PropsWithChildren) => {\n return <div className={styles.dialogTitle}>{children}</div>;\n};\n","import { forwardRef } from 'react';\nimport { Heading, Icon } from '../../index';\nimport * as styles from './Header.module.css';\nimport type { ModalLargeHeaderProps } from './Header.type';\n\nexport const LargeModalHeader = forwardRef<HTMLDivElement, ModalLargeHeaderProps>(\n ({ title, icon, subTitle, extra }, ref) => {\n return (\n <div className={`${styles.modalHeaderLarge} ${styles.modalHeader}`} ref={ref}>\n <Heading size={3} className={styles.modalHeaderLargeTitle}>\n {icon && (\n <span>\n <Icon icon={icon} size={24} />\n </span>\n )}\n <div>{title}</div>\n </Heading>\n\n <div className={styles.modalHeaderRight}>\n {extra && <div className={styles.modalHeaderExtra}>{extra}</div>}\n </div>\n {subTitle && <div className={styles.modalHeaderSubTitle}>{subTitle}</div>}\n </div>\n );\n },\n);\n","import * as styles from './Header.module.css';\nimport { forwardRef } from 'react';\nimport { Heading, Icon } from '../../index';\nimport type { ModalHeaderProps } from './Header.type';\n\nexport const MediumModalHeader = forwardRef<HTMLDivElement, ModalHeaderProps>(\n ({ title, onClose: _onClose, icon, extra }, ref) => {\n /* const onClose = () => {\n const customEvent = new CustomEvent('pop');\n document.dispatchEvent(customEvent);\n };\n const onClick = _onClose ?? onClose;\n */\n return (\n <div\n ref={ref}\n className={`${styles.modalHeaderMedium} ${styles.modalHeader}`}\n role='dialog'\n aria-modal='true'\n aria-labelledby='modal-title'>\n <Heading id='modal-title' size={3} className={styles.modalHeaderMediumTitle}>\n {icon && (\n <span>\n <Icon icon={icon} size={24} />\n </span>\n )}\n <div>{title}</div>\n </Heading>\n <div className={styles.modalHeaderRight}>\n {extra && <div className={styles.modalHeaderExtra}>{extra}</div>}\n\n {/* {useClose && (\n <button type='button' className={styles.modalCloseButton} onClick={onClick}>\n <Icon icon='Close' size={20} />\n </button>\n )} */}\n </div>\n </div>\n );\n },\n);\n","import { forwardRef } from 'react';\nimport { Heading, Icon } from '../../index';\nimport * as styles from './Header.module.css';\nimport type { ModalHeaderProps } from './Header.type';\n\nexport const SmallModalHeader = forwardRef<HTMLDivElement, ModalHeaderProps>(\n ({ title, onClose: _onClose, icon }, ref) => {\n /* const onClose = () => {\n const customEvent = new CustomEvent('pop');\n document.dispatchEvent(customEvent);\n };\n const onClick = _onClose ?? onClose;\n */\n return (\n <div\n ref={ref}\n className={`${styles.modalHeaderSmall} ${styles.modalHeader}`}\n role='dialog'\n aria-modal='true'\n aria-labelledby='modal-title'>\n <Heading id='modal-title' size={3} className={styles.modalHeaderSmallTitle}>\n {icon && (\n <span>\n <Icon icon={icon} size={24} />\n </span>\n )}\n {title}\n </Heading>\n {/* {useClose && (\n <button\n type='button'\n aria-label='닫기'\n className={styles.modalCloseButton}\n onClick={onClick}>\n <Icon icon='Close' size={20} />\n </button>\n )} */}\n </div>\n );\n },\n);\n","import {\n BlueButton,\n GreyButton,\n OutlinedBlueButton,\n RedButton,\n SecondaryButton,\n SmallModalButton,\n} from './Button';\nimport { SmallModalContainer } from './Container';\nimport { SmallModalContent } from './Content';\nimport { SmallModalHeader } from './Header';\n\nexport const SmallModal = Object.assign(SmallModalContainer, {\n Header: SmallModalHeader,\n Footer: SmallModalButton,\n PrimaryButton: BlueButton,\n OutlinedBlueButton: OutlinedBlueButton,\n SecondaryButton: SecondaryButton,\n DangerousButton: RedButton,\n TeriaryButton: GreyButton,\n Content: SmallModalContent,\n});\n","import type { ReactNode } from 'react';\nimport type { ModalListProps, ModalProps } from '../Modal.type';\nimport { MODAL_LIST_TYPE } from '../Modal.type';\nimport { uniqueId } from 'lodash-es';\n\nconst type = MODAL_LIST_TYPE.MODAL;\n\nexport const modalService = {\n push(contents: ReactNode, props?: ModalProps): string {\n const id = props?.id || uniqueId();\n\n const modalItem: ModalListProps = {\n type: props?.type ?? type,\n id,\n show: true,\n contents,\n onKeydown: props?.onKeydown,\n zIndex: props?.zIndex,\n top: props?.top,\n };\n\n const customEvent = new CustomEvent('push', { detail: modalItem });\n document.dispatchEvent(customEvent);\n\n return id;\n },\n\n pop() {\n const customEvent = new CustomEvent('pop');\n document.dispatchEvent(customEvent);\n },\n\n popById(id: string) {\n const customEvent = new CustomEvent('popById', { detail: id });\n document.dispatchEvent(customEvent);\n },\n\n popAll() {\n const customEvent = new CustomEvent('popAll');\n document.dispatchEvent(customEvent);\n },\n};\n","import {\n BlueButton,\n DialogModalButton,\n GreyButton,\n OutlinedBlueButton,\n RedButton,\n SecondaryButton,\n} from './Button';\nimport { DialogModalContainer } from './Container';\nimport { DialogModalContent } from './Content';\nimport { DialogModalHeader } from './Header';\n\nexport const DialogModal = Object.assign(DialogModalContainer, {\n Header: DialogModalHeader,\n Footer: DialogModalButton,\n Content: DialogModalContent,\n PrimaryButton: BlueButton,\n DangerButton: RedButton,\n OutlinedBlueButton: OutlinedBlueButton,\n SecondaryButton: SecondaryButton,\n TeriaryButton: GreyButton,\n});\n","import type { ReactNode } from 'react';\nimport { Button, Icon } from 'src/design-index';\nimport { DialogModal } from '../Dialog';\nimport type { DialogProps, ModalListProps } from '../Modal.type';\nimport { MODAL_LIST_TYPE } from '../Modal.type';\nimport * as styles from './Dialog.module.css';\nimport { modalService } from './modal.service';\nimport { uniqueId } from 'lodash-es';\n\n// 타입 정의\nexport enum DefaultDialogTypes {\n BOTH = 0,\n CONFIRM = 1,\n}\n\nexport enum DefaultDialogButtonTypes {\n PRIMARY = 'primary',\n DANGER = 'danger',\n TERTIARY = 'teriary',\n OUTLINED_BLUE = 'outlinedBlue',\n}\n\nexport interface DefaultDialogProps {\n title?: ReactNode;\n id?: string;\n zIndex?: number;\n closeButton?: boolean;\n onCloseCb?: VoidFunction;\n onConfirmCb?: VoidFunction;\n cancelLabel?: string;\n buttonType?: DefaultDialogTypes;\n confirmButtonType?: DefaultDialogButtonTypes;\n confirmLabel?: string;\n width?: string;\n height?: string;\n bodyClassName?: string;\n footerClassName?: string;\n}\n\nconst type = MODAL_LIST_TYPE.DIALOG;\n\n// 확인 버튼 렌더링 함수\nconst renderConfirmButton = (\n buttonType: DefaultDialogButtonTypes,\n label: string,\n onClick: VoidFunction,\n): ReactNode => {\n const buttonProps = { onClick, children: label };\n\n const buttonMap = {\n [DefaultDialogButtonTypes.PRIMARY]: DialogModal.PrimaryButton,\n [DefaultDialogButtonTypes.TERTIARY]: DialogModal.TeriaryButton,\n [DefaultDialogButtonTypes.OUTLINED_BLUE]: DialogModal.OutlinedBlueButton,\n [DefaultDialogButtonTypes.DANGER]: DialogModal.DangerButton,\n };\n\n const ButtonComponent = buttonMap[buttonType] || DialogModal.DangerButton;\n return <ButtonComponent {...buttonProps} />;\n};\n\n// 안전한 콜백 실행 함수\nconst safeExecuteCallback = (callback: VoidFunction | undefined, errorMessage: string): void => {\n if (!callback) return;\n\n try {\n callback();\n } catch (error) {\n console.error(errorMessage, error);\n }\n};\n\n// Dialog Service\nexport const dialogService = {\n defaultDialog(text: ReactNode, props?: DefaultDialogProps): string {\n const uid = props?.id ?? uniqueId();\n const {\n buttonType = DefaultDialogTypes.BOTH,\n confirmButtonType = DefaultDialogButtonTypes.DANGER,\n confirmLabel = '삭제',\n cancelLabel = '취소',\n zIndex,\n closeButton = false,\n footerClassName,\n onCloseCb,\n onConfirmCb,\n title,\n width = '400px',\n height = 'auto',\n bodyClassName = '',\n } = props ?? {};\n\n const handleClose = (): void => {\n safeExecuteCallback(onCloseCb, 'Error in onCloseCb:');\n dialogService.popById(uid);\n };\n\n const handleConfirm = (): void => {\n safeExecuteCallback(onConfirmCb, 'Error in onConfirmCb:');\n dialogService.popById(uid);\n };\n\n const contents = (\n <DialogModal onClose={handleClose} style={{ width, height }}>\n {/* 닫기 버튼 */}\n {closeButton && (\n <div className={styles.dialogCloseIcon}>\n <Button\n icon={<Icon icon='Close' />}\n size='xs'\n width='24px'\n variant='text'\n onClick={handleClose}\n />\n </div>\n )}\n\n {/* 다이얼로그 본문 */}\n <div\n className={`${styles.dialogBody} ${bodyClassName}`}\n style={title ? { gap: '16px' } : undefined}>\n {title && <DialogModal.Header>{title}</DialogModal.Header>}\n <DialogModal.Content>{text}</DialogModal.Content>\n </div>\n\n {/* 푸터 버튼들 */}\n <DialogModal.Footer>\n <div\n className={`${buttonType === DefaultDialogTypes.BOTH && styles.defaultDialogButton} ${footerClassName || ''}`.trim()}>\n {buttonType === DefaultDialogTypes.BOTH && (\n <DialogModal.OutlinedBlueButton onClick={handleClose}>\n {cancelLabel}\n </DialogModal.OutlinedBlueButton>\n )}\n {renderConfirmButton(confirmButtonType, confirmLabel, handleConfirm)}\n </div>\n </DialogModal.Footer>\n </DialogModal>\n );\n\n // 모달 아이템 생성 및 추가\n const dialogItem: ModalListProps = {\n type,\n id: uid,\n show: true,\n contents,\n zIndex,\n onKeydown: handleClose,\n };\n\n modalService.push(contents, dialogItem);\n return uid;\n },\n\n push(contents: ReactNode, props?: DialogProps): string {\n const id = props?.id ?? uniqueId();\n\n const dialogItem: ModalListProps = {\n type,\n id,\n show: true,\n contents,\n onKeydown: (e) => dialogUtilService.handleKeydownById(e, id, props?.onConfirmCb),\n };\n\n modalService.push(contents, dialogItem);\n return id;\n },\n\n pop(): void {\n modalService.pop();\n },\n\n popById(id: string): void {\n modalService.popById(id);\n },\n};\n\n// Dialog 유틸리티 서비스\nexport const dialogUtilService = {\n handleKeydownById(e: KeyboardEvent, dialogId: string, onKeydown?: VoidFunction): void {\n if (e.key === 'Enter') {\n if (onKeydown) {\n onKeydown();\n } else {\n dialogService.popById(dialogId);\n }\n }\n },\n};\n","import { Button } from '../Button';\nimport { SmallModal } from '../Modal/SmallModal';\nimport { modalService } from '../Modal/service';\n\nexport const useFileuploadAlertModal = () => {\n const isStorybook =\n typeof window !== 'undefined' && window.location.href.includes('localhost:6006');\n\n const showAlertModal = (\n type: 'maxFileSize' | 'maxFiles',\n payload?: { maxFiles?: number; maxSizeMB?: number },\n ) => {\n const message =\n type === 'maxFileSize'\n ? `파일 용량은 최대 ${payload?.maxSizeMB ?? '-'}MB까지 가능합니다.`\n : `최대 ${payload?.maxFiles ?? '-'}개만 업로드할 수 있습니다.`;\n\n if (isStorybook) {\n window.alert(message); // ✅ 스토리북에서는 alert로 처리\n return;\n }\n modalService.push(\n <SmallModal>\n <SmallModal.Header title='파일업로드' />\n <SmallModal.Content>{message}</SmallModal.Content>\n <SmallModal.Footer>\n <div className='flex justify-end'>\n <Button onClick={() => modalService.pop()}>확인</Button>\n </div>\n </SmallModal.Footer>\n </SmallModal>,\n );\n };\n\n return { showAlertModal };\n};\n","import type React from 'react';\nimport { useRef, useState } from 'react';\nimport { Button } from '../Button';\nimport { Icon } from '../Icon';\nimport { Label } from '../Label';\nimport { FileItem } from './FileItem';\nimport * as styles from './FileUpload.module.css';\nimport type { FileObject, FileUploadComponentProps } from './FileUpload.type';\nimport { useFileuploadAlertModal } from './use-fileupload-alert-modal';\n\nexport const FileUpload: React.FC<FileUploadComponentProps> = ({\n title,\n description,\n subDescription,\n maxFiles = 3,\n onUpload,\n onRemove,\n onChange,\n maxFileSize = 1 * 1024 * 1024, // 1MB\n accept,\n compactDisplay,\n showCountLabel = true,\n fileList,\n maxWidth = '75rem',\n}) => {\n const { showAlertModal } = useFileuploadAlertModal();\n const [files, setFiles] = useState<FileObject[]>(fileList || []);\n const [, setIsDragActive] = useState(false);\n const fileInputRef = useRef<globalThis.HTMLInputElement>(null);\n const dropZoneRef = useRef<HTMLDivElement>(null);\n\n const updateFiles = (newFiles: FileObject[]) => {\n setFiles(newFiles);\n onChange?.(newFiles);\n };\n\n const handleFiles = async (newFiles: FileList) => {\n const filesArray = Array.from(newFiles);\n // [단일 파일 업로드 처리]\n if (maxFiles === 1) {\n if (filesArray.length > 1) {\n showAlertModal('maxFiles', { maxFiles });\n return;\n }\n\n const file = filesArray[0];\n\n if (file.size >= maxFileSize) {\n const maxSizeMB = Math.floor(maxFileSize / 1024 / 1024);\n showAlertModal('maxFileSize', { maxSizeMB });\n return;\n }\n\n const newFile: FileObject = {\n file,\n name: file.name,\n size: file.size,\n status: 'uploading',\n };\n\n updateFiles([newFile]);\n\n updateFiles([\n {\n ...newFile,\n status: 'success',\n },\n ]);\n return;\n }\n\n // [다중 파일 업로드 처리]\n const totalCount = files.length + filesArray.length;\n const remainingSlots = maxFiles - files.length;\n\n let slicedFiles = filesArray;\n\n if (totalCount > maxFiles) {\n showAlertModal('maxFiles', { maxFiles });\n slicedFiles = filesArray.slice(0, remainingSlots);\n }\n\n const validFiles: FileObject[] = [];\n let oversizedCount = 0;\n\n for (const file of slicedFiles) {\n if (file.size >= maxFileSize) {\n oversizedCount++;\n continue;\n }\n validFiles.push({\n file,\n name: file.name,\n size: file.size,\n status: 'uploading',\n });\n }\n\n if (oversizedCount > 0) {\n const maxSizeMB = Math.floor(maxFileSize / 1024 / 1024);\n showAlertModal('maxFileSize', { maxSizeMB });\n }\n\n const initialFiles = [...files, ...validFiles];\n updateFiles(initialFiles);\n\n const updatedFiles = [...initialFiles];\n\n for (const fileData of validFiles) {\n await onUpload(fileData.file);\n const index = updatedFiles.findIndex((f) => f.name === fileData.name);\n if (index !== -1) {\n updatedFiles[index] = {\n ...updatedFiles[index],\n status: 'success',\n };\n }\n }\n\n updateFiles(updatedFiles);\n };\n\n const removeFile = (fileName: string) => {\n const updated = files.filter((file) => file.name !== fileName);\n updateFiles(updated);\n onRemove(fileName);\n };\n\n const handleFileInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) handleFiles(e.target.files);\n };\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setIsDragActive(false);\n handleFiles(e.dataTransfer.files);\n };\n\n return (\n <div className={styles.container} style={{ maxWidth }}>\n <h3 className={styles.title}>{title}</h3>\n {description && <p className={styles.description}>{description}</p>}\n\n {/* biome-ignore lint/a11y/useKeyWithClickEvents: <explanation> */}\n <div\n ref={dropZoneRef}\n onDragEnter={(e) => {\n e.preventDefault();\n setIsDragActive(true);\n }}\n onDragOver={(e) => e.preventDefault()}\n onDragLeave={(e) => {\n if (e.target === dropZoneRef.current) setIsDragActive(false);\n }}\n onDrop={handleDrop}\n onClick={() => fileInputRef.current?.click()}\n className={styles.dropZone}\n style={{ maxWidth }}>\n <input\n type='file'\n ref={fileInputRef}\n onChange={handleFileInput}\n title={'파일 업로드'}\n multiple\n accept={accept}\n className={styles.hiddenInput}\n />\n <Label id={`file-upload-info`} size='s' color='gray-60' className={styles.infoLabel}>\n 첨부할 파일을 여기에 끌어다 놓거나, 파일 선택 버튼을 직접 선택해주세요.\n </Label>\n {subDescription && <p className={styles.subDescription}>{subDescription}</p>}\n\n <Button\n label={compactDisplay && files.length > 0 ? '파일재선택' : '파일선택'}\n variant='secondary'\n size='s'\n width={compactDisplay && files.length > 0 ? '6.813rem' : '96px'}\n icon={<Icon icon='Upload' size={24} color='#0B50D0' />}\n />\n </div>\n\n <div className={styles.fileList} style={{ maxWidth }}>\n {showCountLabel && (\n <div className={styles.fileListHeader}>\n <Label id={`current-file-count`} size='s' className={styles.currentLabel}>\n {files.length}개\n </Label>\n <Label id={`total-file-count`} size='s' className={styles.totalLabel}>\n / {maxFiles}개\n </Label>\n </div>\n )}\n\n {compactDisplay\n ? files.length > 0 && (\n <p className={styles.compactFileLabel}>\n {files[0].name} 외 {files.length - 1}개\n </p>\n )\n : files.map((file) => (\n <FileItem\n key={`${file.name}-${file.size}-${file.status}`}\n name={file.name}\n size={file.size}\n status={file.status}\n maxWidth={maxWidth}\n onRemove={() => removeFile(file.name)}\n />\n ))}\n </div>\n </div>\n );\n};\n",".link {\n\tcolor: var(--krds-color-primary-50);\n\ttext-decoration: underline;\n\tcursor: pointer;\n\tfont-weight: 400;\n}\n\n.size_s {\n\tfont-size: 15px;\n\tline-height: 24px;\n}\n.size_m {\n\tfont-size: 17px;\n\tline-height: 26px;\n}\n.size_l {\n\tfont-size: 19px;\n\tline-height: 30px;\n}\n\n.weight_regular {\n\tfont-weight: 400;\n}\n.weight_bold {\n\tfont-weight: 700;\n}\n","import * as React from 'react';\nimport * as styles from './Link.module.css';\nimport type { LinkProps } from './Link.type';\n\n/**\n * Link 컴포넌트 😸\n * 링크(anchor) 컴포넌트\n *\n * @param props - Link 컴포넌트의 props\n * @param size - 링크 텍스트의 크기 (예: 's', 'm', 'l')\n * @param weight - 링크 텍스트의 두께 (예: 'regular', 'bold')\n * @param children - 렌더링할 텍스트 또는 노드\n * @param className - 추가로 적용할 클래스 이름\n * @param title - 링크의 title 및 aria-label 속성 값\n */\n\nexport function Link<E extends React.ElementType = 'a'>({\n size = 'm',\n weight = 'regular',\n children,\n className = '',\n title = '',\n ...props\n}: LinkProps<E>) {\n const sizeClass = styles[`size_${size}`] || '';\n const weightClass = styles[`weight_${weight}`] || '';\n const linkClass = styles.link || '';\n\n return (\n <a\n className={`${sizeClass} ${weightClass} ${linkClass} ${className}`.trim()}\n title={title}\n aria-label={title}\n {...props}>\n {children}\n </a>\n );\n}\n","import React from 'react';\nimport { Icon } from '../Icon';\nimport { Link } from '../Link';\nimport * as styles from './LinkButton.module.css';\nimport type { LinkButtonProps } from './LinkButton.type';\n\n/**\n * LinkButton 컴포넌트 😸\n * 링크\n *\n * @param props - LinkButton 컴포넌트의 props\n * @param variant - 버튼의 스타일 종류 ('default' | 'accent')\n * @param size - 버튼의 크기 ('small' | 'medium' | 'large')\n * @param children - 버튼 내부에 렌더링할 내용\n * @param className - 추가로 적용할 클래스 이름\n * @param href - 링크의 URL\n * @param title - 버튼의 title, aria-label 속성\n * @param useIcon - 아이콘 사용 여부\n * @param icon - 사용할 커스텀 아이콘\n * @param iconClassName - 아이콘에 적용할 클래스 이름\n */\n\nexport function LinkButton<E extends React.ElementType = 'a'>({\n variant = 'default',\n size = 'm',\n children,\n className = '',\n href,\n title,\n useIcon = true,\n icon,\n iconColor,\n iconClassName = '',\n ...props\n}: LinkButtonProps<E>) {\n const parsingHref = href\n ? href.startsWith('http://') || href.startsWith('https://') || href.startsWith('//')\n ? href\n : `https://${href}`\n : href;\n return (\n <Link\n className={`\n ${styles.linkButton}\n ${variant === 'accent' ? styles.linkButtonAccent : styles.linkButtonDefault}\n ${size === 's' ? styles.linkButtonSmall : size === 'l' ? styles.linkButtonLarge : styles.linkButtonMedium}\n ${className}\n `.trim()}\n href={parsingHref}\n role='link'\n title={title}\n target={\n href && (href.startsWith('http://') || href.startsWith('https://') || href.startsWith('//'))\n ? '_blank'\n : undefined\n }\n rel={\n href && (href.startsWith('http://') || href.startsWith('https://') || href.startsWith('//'))\n ? 'noopener noreferrer'\n : undefined\n }\n {...props}>\n {children}\n {useIcon &&\n (icon ? (\n icon\n ) : (\n <Icon\n icon='OpenNewWindow'\n color={iconColor || 'var(--krds-color-primary-50)'}\n className={`${styles.icon} ${iconClassName}`}\n />\n ))}\n </Link>\n );\n}\n","import { Spinner } from 'src/components';\nimport * as styles from './LoadingPage.module.css';\n\nexport function LoadingPage({ message = '페이지를 불러오는 중입니다.' }: { message?: string }) {\n return (\n <div className={styles.loadingPageContainer}>\n <Spinner size='m' />\n <span className={styles.loadingPageContent}>{message}</span>\n </div>\n );\n}\n","import {\n BlueButton,\n GreyButton,\n MediumModalButton,\n OutlinedBlueButton,\n RedButton,\n SecondaryButton,\n} from './Button';\nimport { MediumModalContainer } from './Container';\nimport { MediumModalContent } from './Content';\nimport { MediumModalHeader } from './Header';\n\nexport const MediumModal = Object.assign(MediumModalContainer, {\n Header: MediumModalHeader,\n Footer: MediumModalButton,\n PrimaryButton: BlueButton,\n OutlinedBlueButton: OutlinedBlueButton,\n SecondaryButton: SecondaryButton,\n DangerousButton: RedButton,\n TeriaryButton: GreyButton,\n Content: MediumModalContent,\n});\n","import type { HTMLAttributes, PropsWithChildren } from 'react';\nimport * as styles from './Button.module.css';\n\nexport const LargeModalButton = ({\n children,\n className = '',\n ...props\n}: PropsWithChildren<HTMLAttributes<HTMLDivElement>>) => {\n return (\n <div {...props} className={`${className} ${styles.buttonWrap} ${styles.buttonWrapLarge}`}>\n {children}\n </div>\n );\n};\n","import { BlueButton, GreyButton, OutlinedBlueButton, RedButton, SecondaryButton } from './Button';\nimport { LargeModalButton } from './Button/Large';\nimport { LargeModalContainer } from './Container';\nimport { LargeModalContent } from './Content';\nimport { LargeModalHeader } from './Header';\n\nexport const LargeModal = Object.assign(LargeModalContainer, {\n Header: LargeModalHeader,\n Footer: LargeModalButton,\n PrimaryButton: BlueButton,\n OutlinedBlueButton: OutlinedBlueButton,\n SecondaryButton: SecondaryButton,\n DangerousButton: RedButton,\n TeriaryButton: GreyButton,\n Content: LargeModalContent,\n});\n","import { createContext, useContext } from 'react';\nimport type { ModalListProps } from '../Modal.type';\n\ninterface ModalManagerContextProps {\n modalList: ModalListProps[];\n}\nexport const ModalManagerContext = createContext<ModalManagerContextProps | undefined>(undefined);\n\nexport const useModalManagerContext = () => {\n const context = useContext(ModalManagerContext);\n\n if (!context) throw new Error('ModalManagerContext is undefined');\n\n return context;\n};\n","import type { PropsWithChildren } from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { PortalProps } from './Portal.type';\n\nexport const Portal = ({ children, style, container }: PropsWithChildren<PortalProps>) => {\n const portal = useMemo(() => document.createElement('div'), []);\n\n useEffect(() => {\n Object.assign(portal.style, style);\n }, [portal, style]);\n\n useEffect(() => {\n const parent = container || document.body;\n parent.style.position = 'relative';\n\n if (parent instanceof HTMLElement) {\n parent.appendChild(portal);\n }\n\n return () => {\n if (parent.contains(portal)) {\n parent.removeChild(portal);\n }\n };\n }, [portal, container]);\n\n return createPortal(children, portal);\n};\n","import type { PropsWithChildren } from 'react';\nimport { useEffect } from 'react';\nimport { useAnimationToggle, useBlockDocumentScroll } from '../../hooks';\nimport { useAddModalAnimationStyle, useFocusInModalManager } from './utils';\nimport { Portal } from '../Portal';\nimport type { ModalPresenterProps } from './Modal.type';\n\nexport const Modal = ({\n type,\n children,\n show,\n id,\n top,\n zIndex = 2200,\n removeInvisibleModal,\n}: PropsWithChildren<ModalPresenterProps>) => {\n const { mounted, trigger, onShow, onHide } = useAnimationToggle({\n transitionDuration: 200,\n onHide: removeInvisibleModal,\n });\n\n const { ref } = useAddModalAnimationStyle({ id, trigger: !!trigger, top });\n\n useBlockDocumentScroll(trigger === 100 && mounted);\n useFocusInModalManager({ id: trigger ? id : undefined, type });\n\n useEffect(() => {\n if (show) return onShow();\n\n onHide();\n }, [show, onShow, onHide]);\n\n if (!mounted) return null;\n\n return (\n <Portal\n style={{\n position: 'fixed',\n top: 0,\n right: 0,\n left: 0,\n bottom: 0,\n zIndex,\n }}>\n <div ref={ref} id={id} className='portal-wrap' role='presentation' data-id={id}>\n {children}\n </div>\n </Portal>\n );\n};\n","import type { PropsWithChildren } from 'react';\nimport { useState } from 'react';\nimport { ModalManagerContext } from './contexts';\nimport { useModalCustomEventListener } from './utils';\nimport { Modal } from './Modal';\nimport type { ModalListProps } from './Modal.type';\n\nexport const ModalManager = ({ children }: PropsWithChildren) => {\n const [modalList, setModalList] = useState<ModalListProps[]>([]);\n const removeInvisibleModal = () => setModalList((prev) => prev.filter(({ show }) => show));\n\n useModalCustomEventListener({ modalList, setModalList });\n\n return (\n <ModalManagerContext.Provider value={{ modalList }}>\n {modalList.map((modalProps) => (\n <Modal\n key={modalProps.id}\n id={modalProps.id}\n show={modalProps.show}\n type={modalProps.type}\n zIndex={modalProps.zIndex}\n top={modalProps.top}\n removeInvisibleModal={removeInvisibleModal}>\n {modalProps.contents}\n </Modal>\n ))}\n {children}\n </ModalManagerContext.Provider>\n );\n};\n","import type {MTabScrollWrapperProps} from 'src/components';\nimport {Button, Icon, Tabs} from 'src/components';\nimport {useEffect, useMemo, useRef, useState} from 'react';\nimport * as styles from './MScrollTab.module.css';\n\nexport function MScrollTab(tabProps: MTabScrollWrapperProps) {\n const {scrollByAmount = 200, tabs: tabList, selectedIndex, autoScroll = false} = tabProps;\n const [isOverflowed, setIsOverflowed] = useState(false);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n const tabContainerRef = useRef<HTMLDivElement>(null);\n\n const tabs = useMemo(() => tabList.map(it => ({...it, content: null})), [tabList]);\n const getRender = () => {\n const content = tabList?.[selectedIndex ?? 0]?.content;\n return typeof content === 'function' ? content() : content;\n };\n\n useEffect(() => {\n const TOL = 2;\n\n const updateOverflowState = () => {\n const el = tabContainerRef.current;\n if (!el) return;\n\n const {scrollLeft, clientWidth, scrollWidth} = el;\n setIsOverflowed(scrollWidth > clientWidth + TOL);\n setCanScrollLeft(scrollLeft > TOL);\n setCanScrollRight(scrollLeft + clientWidth < scrollWidth - TOL);\n };\n\n updateOverflowState();\n\n const el = tabContainerRef.current;\n if (!el) return;\n\n el.addEventListener('scroll', updateOverflowState, {passive: true});\n window.addEventListener('resize', updateOverflowState);\n\n return () => {\n el.removeEventListener('scroll', updateOverflowState);\n window.removeEventListener('resize', updateOverflowState);\n };\n }, [tabs, selectedIndex]);\n\n const scrollLeft = () => {\n const el = tabContainerRef.current;\n if (!el) return;\n el.scrollBy({left: -scrollByAmount, behavior: 'smooth'});\n };\n const scrollRight = () => {\n const el = tabContainerRef.current;\n if (!el) return;\n el.scrollBy({left: scrollByAmount, behavior: 'smooth'});\n };\n\n const onChangeTab = (index: number) => {\n tabProps?.onChange?.(index);\n\n if (!autoScroll) return;\n const el = tabContainerRef.current;\n if (!el) return;\n const selectedTabElement = el.querySelector(`#tab-${tabList[index].id}`) as HTMLElement;\n if (selectedTabElement) {\n selectedTabElement.scrollIntoView({block: 'nearest', behavior: 'smooth', inline: 'center'});\n }\n };\n\n return (\n <>\n <div className={styles.wrapper}>\n <div ref={tabContainerRef} className={styles.scrollContainer}>\n <Tabs {...tabProps} tabs={tabs} onChange={onChangeTab}/>\n </div>\n {isOverflowed && canScrollLeft && (\n <div className={styles.overlayLeft}>\n <div className={styles.innerLeft}>\n <Button\n width=\"100%\"\n height=\"100%\"\n variant=\"transparent\"\n onClick={scrollLeft}\n className={styles.buttonLeft}\n >\n <Icon icon=\"ArrowLeft\" size={20} viewBox=\"0 0 16 16\"/>\n </Button>\n <div className={`${styles.separator}`}/>\n </div>\n <div className={styles.gradientLeft}/>\n </div>\n )}\n {isOverflowed && canScrollRight && (\n <div className={styles.overlayRight}>\n <div className={styles.gradientRight}/>\n <div className={styles.innerRight}>\n <div className={`${styles.separator}`}/>\n <Button\n width=\"100%\"\n height=\"100%\"\n variant=\"transparent\"\n onClick={scrollRight}\n className={styles.buttonRight}\n >\n <Icon icon=\"ArrowRight\" size={20} viewBox=\"0 0 16 16\"/>\n </Button>\n </div>\n </div>\n )}\n </div>\n {getRender()}\n </>\n );\n}","import * as styles from './MTable.module.css';\nimport type { MTableItemProps, TableRowData } from 'src/components';\n\nexport function MTableItem<T extends TableRowData>({\n data,\n idKey,\n labelMap,\n excludes,\n customContent,\n customLabel,\n}: MTableItemProps<T>) {\n return (\n <>\n {Object.keys(data)\n .filter((it) => Object.keys(labelMap).includes(it) && !excludes?.includes(it))\n .map((key: keyof T) => (\n <div\n key={`${data[idKey as keyof T]?.toString()}-${key.toString()}`}\n className={styles.mTableItemContent}>\n {customLabel?.[key]?.(data) ?? labelMap[key]}\n {' : '}\n {customContent?.[key]?.(data) ?? data[key]}\n </div>\n ))}\n </>\n );\n}\n","import type { MTableLabelMap, MTableProps, TableRowData } from 'src/components';\nimport { MTableItem } from 'src/components/MTable/MTableItem';\nimport * as styles from './MTable.module.css';\n\nexport function MTable<T extends TableRowData>({\n data,\n columns,\n idKey = 'id',\n title,\n excludes,\n customLabel,\n customContent,\n onRowClick,\n customRow,\n}: MTableProps<T>) {\n const labelMap: MTableLabelMap<T> = columns.reduce((acc: MTableLabelMap<T>, item) => {\n acc[item.accessorKey as keyof T] = item.header;\n return acc;\n }, {} as MTableLabelMap<T>);\n\n return (\n <div>\n {data.map((it, index) => (\n <div\n className={styles.mTableItem}\n key={it[idKey]?.toString() || `${String(idKey)}-${index}`}\n onClick={(e) => onRowClick?.(it, e)}>\n {title && <div className={styles.mTableItemTitle}>{title(it)}</div>}\n {customRow ? (\n customRow(it)\n ) : (\n <MTableItem\n data={it}\n labelMap={labelMap}\n idKey={idKey}\n excludes={excludes}\n customLabel={customLabel}\n customContent={customContent}\n />\n )}\n </div>\n ))}\n </div>\n );\n}\n","import type {MTableGuideWrapperProps} from 'src/components/MTableGuideWrapper';\nimport * as styles from './MTableGuideWrapper.module.css';\nimport {useState} from 'react';\nimport {Icon} from 'src/components';\n\nexport function MTableGuideWrapper({children}: MTableGuideWrapperProps) {\n const [show, setShow] = useState(true);\n\n return <div className={styles.wrapperContainer}>\n {children}\n {show && <div className={styles.overlay} onMouseUp={() => setShow(false)}>\n <div className={styles.icons}>\n <Icon className={styles.rightIcon} icon={'BtnShortcut'} size={16}\n color={'var(--krds-color-gray-0)'}/>\n {/*TODO: 아이콘 변경*/}\n <Icon icon={'PopoverInfo'} size={16} color={'var(--krds-color-gray-0)'}/>\n <Icon icon={'BtnShortcut'} size={16} color={'var(--krds-color-gray-0)'}/>\n </div>\n <div className={styles.description}> 좌우 스크롤로 자세한 정보를 확인해 주세요.</div>\n <div className={styles.subDescription}>이 메시지는 터치하면 사라집니다.</div>\n </div>}\n </div>;\n}\n","import { MainImagePath } from 'src/assets/main-assets-path';\nimport { Body } from '../Body';\nimport { Button } from '../Button';\nimport { Heading } from '../Heading';\nimport * as styles from './NotFountPage.module.css';\nimport { NotFountPageProps } from './NotFountPage.type';\n\nexport function NotFountPage({ onClick }: NotFountPageProps) {\n return (\n <div className={styles.NotFountPage}>\n <div>\n <img src={MainImagePath.ErrorImg} alt='에러이미지' width={180} />\n </div>\n <div className={styles.NotFountPageContent}>\n <Heading size={3}>페이지를 찾을 수 없습니다. (404)</Heading>\n <Body>\n 요청하신 페이지가 존재하지 않거나 삭제되었습니다.\n <br /> 입력한 주소가 정확한지 확인해 주세요.\n </Body>\n </div>\n <div>\n <Button\n label='이전 페이지'\n variant='teriary'\n height='64px'\n width='170px'\n onClick={onClick}\n />\n </div>\n </div>\n );\n}\n","import * as styles from './TextInput.module.css';\nimport { Icon, Label } from '../index';\n\ninterface StatusLabelProps {\n value?: string;\n disabled: boolean;\n isValid?: boolean;\n error?: string;\n info?: string;\n errorId: string;\n infoId: string;\n useCount?: boolean;\n maxLength?: number;\n charCountColor?: string;\n hasContent?: boolean;\n}\n\nexport function StatusLabel({\n value,\n disabled,\n isValid,\n error,\n info,\n errorId,\n infoId,\n useCount = false,\n maxLength,\n charCountColor = 'var(--krds-color-primary-50)',\n hasContent = false,\n}: StatusLabelProps) {\n const errorMessage = isValid === false && error;\n const charCount = value?.length || 0;\n const showCount = useCount && maxLength;\n const shouldDisplay = hasContent && (errorMessage || info || (showCount && !disabled));\n\n const containerClass = `${styles.statusContainer} ${shouldDisplay ? styles.visible : styles.hidden}`;\n\n const renderContent = () => {\n if (disabled && showCount) {\n return (\n <>\n <div className={styles.leftContent}></div>\n <div className={styles.charCountWrapper}>\n <span style={{ color: charCountColor }}>{charCount}</span>\n <span>{`/ ${maxLength}`}</span>\n </div>\n </>\n );\n }\n\n if (errorMessage) {\n return (\n <>\n <div className={styles.leftContent}>\n <Label id={errorId} size='xs' color='danger' className={styles.errorText}>\n <Icon icon='SystemDanger' size={16} primary='var(--krds-color-danger-50)' />\n {error}\n </Label>\n </div>\n {showCount && (\n <div className={styles.charCountWrapper}>\n <span style={{ color: charCountColor }}>{charCount}</span>\n <span>{`/ ${maxLength}`}</span>\n </div>\n )}\n </>\n );\n }\n\n if (info) {\n return (\n <>\n <div className={styles.leftContent}>\n <Label id={infoId} size='xs' color='gray-50' className={styles.infoText}>\n <Icon icon='SystemInfo' size={16} />\n {info}\n </Label>\n </div>\n {showCount && (\n <div className={styles.charCountWrapper}>\n <span style={{ color: charCountColor }}>{charCount}</span>\n <span>{`/ ${maxLength}`}</span>\n </div>\n )}\n </>\n );\n }\n\n if (showCount) {\n return (\n <>\n <div className={styles.leftContent}></div>\n <div className={styles.charCountWrapper}>\n <span style={{ color: charCountColor }}>{charCount}</span>\n <span>{`/ ${maxLength}`}</span>\n </div>\n </>\n );\n }\n\n return (\n <>\n <div className={styles.leftContent}></div>\n <div></div>\n </>\n );\n };\n\n return <div className={containerClass} aria-live=\"assertive\" >{renderContent()}</div>;\n}\n","import type * as React from 'react';\nimport { forwardRef, useState } from 'react';\nimport { getColor } from 'src/styles/color/color';\nimport { Icon, Label } from '../index';\nimport { StatusLabel } from './StatusLabel';\nimport * as styles from './TextInput.module.css';\nimport type { TextInputProps } from './TextInput.type';\n\nconst calculateGap = (\n title: string | undefined,\n description: string | undefined,\n titlePosition: string,\n) => {\n if (!title && !description) return '0';\n return titlePosition === 'horizontal' ? '5%' : '10px';\n};\n\nexport const TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n (\n {\n id,\n type = 'text',\n title,\n titlePosition = 'vertical',\n description,\n gap = calculateGap(title, description, titlePosition),\n isValid = true,\n isRequired = false,\n error,\n info,\n placeholder,\n width = '100%',\n height = '48px', //'40px' | '48px' | '56px'\n minHeight,\n maxHeight,\n className = '',\n titleClassName = '',\n inputClassName = '',\n value,\n setValue = () => {},\n onEnterKeyPress = () => {},\n disabled = false,\n useIcon = false,\n iconPosition = 'left',\n icon = (\n <span\n className={`${iconPosition === 'left' ? styles.inputLeftIconSvg : styles.inputRightIconSvg}`}>\n <Icon icon='Search' color={getColor('gray-40')} size={20} viewBox='0 0 20 20' />\n </span>\n ),\n clickableIcon = false,\n useDelete = false,\n deleteAction,\n titleAttr,\n ...props\n },\n ref,\n ) => {\n const [isComposing, setIsComposing] = useState<boolean>(false);\n const [showValue, setShowValue] = useState<boolean>(false);\n const showLeftIcon = useIcon && iconPosition === 'left' && type !== 'password';\n const showRightIcon = useIcon && iconPosition === 'right' && type !== 'password';\n const showPassword = useIcon && type === 'password';\n const inputType = type === 'password' && showValue ? 'text' : type;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setValue(e.target.value);\n setIsComposing(true);\n };\n\n const handleDelete = () => {\n if (deleteAction) {\n deleteAction();\n } else {\n setValue('');\n if (props.onChange) {\n const event = {\n target: { value: '' },\n } as React.ChangeEvent<HTMLInputElement>;\n props.onChange(event);\n }\n }\n };\n const handleEnterKeyPress = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!isComposing) {\n e.preventDefault();\n onEnterKeyPress();\n }\n };\n\n return (\n <div\n className={`${styles.wrapper} ${titlePosition === 'horizontal' ? styles.horizontal : ''} ${className}`}\n style={{\n width,\n gap,\n }}>\n <div>\n {title && (\n <div className={`${styles.titleWrapper} `}>\n <Label\n size='s'\n id={id}\n className={titleClassName}\n required={isRequired}\n style={{ fontWeight: 400 }}>\n {title}\n </Label>\n </div>\n )}\n {description && (\n <Label\n id='text-input-description'\n size='xs'\n style={{ color: getColor('gray-40'), fontWeight: 400 }}>\n {description}\n </Label>\n )}\n </div>\n <div className={styles.inputGroup}>\n <div style={{ position: 'relative' }}>\n {showLeftIcon && (\n <span\n className={`${styles.inputLeftIconSvg} ${clickableIcon ? styles.clickable : ''}`}>\n {icon}\n </span>\n )}\n {/* styles.inputRightDefault */}\n <input\n ref={ref}\n id={id}\n title={titleAttr}\n type={inputType}\n className={`\n ${styles.input}\n ${!isValid && !disabled ? styles.error : styles.normal}\n ${disabled ? styles.inputDisabled : ''}\n ${showLeftIcon ? styles.inputLeftIcon : ''}\n ${showRightIcon || showPassword ? styles.inputRightIcon : ''} \n ${inputClassName}\n `.trim()}\n placeholder={placeholder}\n value={value}\n disabled={disabled}\n onChange={handleChange}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleEnterKeyPress(e);\n }}\n onCompositionStart={() => setIsComposing(true)}\n onCompositionEnd={() => setIsComposing(false)}\n style={{ height, minHeight, maxHeight, width: '100%' }}\n aria-describedby={error ? `${id}-error` : `${id}-success`}\n aria-invalid={!!error}\n autoComplete='on'\n {...props}\n />\n {useDelete && !disabled && value && (\n <button\n type='button'\n className={`\n ${styles.deleteButton}\n ${showRightIcon || showPassword ? styles.deleteButtonWithIcon : styles.deleteButtonRight}\n ${value ? styles.show : ''}\n `}\n onClick={handleDelete}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') handleDelete();\n }}\n aria-label='입력값 삭제'>\n <Icon icon='DeleteIcon' size={18} viewBox='0 0 18 18' />\n </button>\n )}\n\n {showRightIcon && (\n <span\n className={`${styles.inputRightIconSvg} ${clickableIcon ? styles.clickable : ''}`}>\n {icon}\n </span>\n )}\n {showPassword && (\n <button\n type='button'\n onClick={() => setShowValue((prev) => !prev)}\n className={styles.passwordIcon}\n aria-label={showValue ? '비밀번호 숨기기' : '비밀번호 보기'}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setShowValue((prev) => !prev);\n }\n }}>\n {showValue ? (\n <Icon icon='Visibility' color='var(--krds-color-gray-50)' size={19} />\n ) : (\n <Icon icon='VisibilityOff' color='var(--krds-color-gray-50)' size={19} />\n )}\n </button>\n )}\n </div>\n <StatusLabel\n value={value}\n disabled={disabled}\n isValid={isValid}\n error={error}\n info={info}\n errorId={`${id}-error`}\n infoId={`${id}-info`}\n hasContent={!!(error || info)}\n />\n </div>\n </div>\n );\n },\n);\n","export type NumberOnChangeOptions = {\n allowDecimal?: boolean;\n decimalScale?: number;\n};\n\nexport function handleNumberChange(v: string, options: NumberOnChangeOptions): string {\n const { allowDecimal, decimalScale } = options;\n\n let raw = v.replace(/,/g, '');\n if (!allowDecimal && raw.includes('.')) return '';\n\n if (allowDecimal && decimalScale !== undefined && raw.includes('.')) {\n const [int, dec] = raw.split('.');\n raw = int + '.' + dec.slice(0, decimalScale);\n }\n\n if (/^[0-9]*\\.?[0-9]*$/.test(raw) || raw === '' || raw === '.') {\n return raw;\n }\n return '';\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { TextInput } from '../TextInput/TextInput';\nimport type { NumberInputProps } from './NumberInput.type';\nimport { handleNumberChange } from './handleNumberChange';\n\nexport function NumberInput({\n id,\n title,\n titleAttr,\n titlePosition,\n gap,\n description,\n isValid,\n error,\n placeholder,\n width = '100%',\n height = '48px', //'40px' | '48px' | '56px'\n minHeight,\n maxHeight,\n className = '',\n titleClassName = '',\n inputClassName = '',\n value,\n setValue = () => {},\n onEnterKeyPress = () => {},\n useComma = true, // 1000 -> 1,000\n defaultZero = false, // 빈 값일 때 0으로 표시\n allowDecimal = false, // 소수점 허용\n decimalScale, // 소수점 자리수\n isRequired = false,\n ...props\n}: NumberInputProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [cursorPosition, setCursorPosition] = useState<number | null>(null);\n\n const addComma = (v: string) => {\n if (!v || v === '.' || v === '-') return v;\n const [int, dec] = v.split('.');\n const withComma = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return dec !== undefined ? `${withComma}.${dec}` : withComma;\n };\n\n const displayValue =\n value === '' && defaultZero ? '0' : useComma && value ? addComma(value) : value;\n\n const handleInputChange = (v: string) => {\n const prevValue = value ?? '';\n const prevDisplayValue = useComma ? addComma(prevValue) : prevValue;\n\n const currentCursor = inputRef.current?.selectionStart ?? 0;\n const raw = handleNumberChange(v, {\n allowDecimal,\n decimalScale,\n });\n if (raw === null) {\n return;\n }\n\n setValue(raw);\n\n if (useComma) {\n const newDisplayValue = addComma(raw);\n const prevCommaCount = (prevDisplayValue.slice(0, currentCursor).match(/,/g) || []).length;\n const nextCommaCount = (newDisplayValue.slice(0, currentCursor).match(/,/g) || []).length;\n const diff = nextCommaCount - prevCommaCount;\n setCursorPosition(currentCursor + diff);\n }\n };\n\n useEffect(() => {\n if (cursorPosition !== null && inputRef.current) {\n inputRef.current.setSelectionRange(cursorPosition, cursorPosition);\n setCursorPosition(null);\n }\n }, [displayValue, cursorPosition]);\n\n return (\n <TextInput\n id={id}\n ref={inputRef}\n title={title}\n titleAttr={titleAttr}\n titlePosition={titlePosition}\n isRequired={isRequired}\n gap={gap}\n description={description}\n isValid={isValid}\n inputMode='numeric'\n pattern='[0-9]*'\n value={displayValue}\n setValue={handleInputChange}\n width={width}\n height={height}\n error={error}\n placeholder={placeholder}\n className={className}\n titleClassName={titleClassName}\n inputClassName={inputClassName}\n onEnterKeyPress={onEnterKeyPress}\n minHeight={minHeight}\n maxHeight={maxHeight}\n {...props}\n />\n );\n}\n","import { useEffect, useState } from 'react';\n\nexport const useIsMobile = (maxWidth = 768) => {\n const [isMobile, setIsMobile] = useState(false);\n\n useEffect(() => {\n const check = () => setIsMobile(window.innerWidth <= maxWidth);\n check();\n window.addEventListener('resize', check);\n return () => window.removeEventListener('resize', check);\n }, [maxWidth]);\n\n return isMobile;\n};\n","import { createContext, useContext } from 'react';\nimport { Icon } from '../Icon';\nimport * as styles from './Pagination.module.css';\nimport type { PaginationData, PaginationItemProps, PaginationProps } from './Pagination.type';\nimport { useIsMobile } from './useIsMobile';\n\nconst PaginationContext = createContext<PaginationData | null>(null);\n\nfunction PaginationMore() {\n return (\n <div className={[styles.pageItem, styles.moreButton].join(' ')}>\n <Icon icon='EllipsisHorizontal' size={24} viewBox='0 0 24 24' />\n </div>\n );\n}\n\nfunction PaginationItem({ children: label }: PaginationItemProps) {\n const context = useContext(PaginationContext);\n if (!context) return;\n const { currentPage, onChangePage } = context;\n const length = String(label).length;\n\n return (\n <button\n type='button'\n onClick={() => onChangePage(label)}\n style={{\n fontSize: `${length <= 3 ? 17 : 13}px`,\n padding: `10px ${length <= 3 ? 10 : 5}px`,\n }}\n className={[styles.pageItem, currentPage === label && styles.activePageItem].join(' ')}>\n {label}\n </button>\n );\n}\n\nexport function Pagination({ currentPage, totalPage, onChangePage }: PaginationProps) {\n const isMobile = useIsMobile();\n const pivotPage = isMobile ? 5 : 7;\n const isStart = currentPage < pivotPage || totalPage === pivotPage;\n const isEnd = !isStart && totalPage > pivotPage && currentPage > totalPage - pivotPage + 1;\n const isMiddle = totalPage > pivotPage && !isStart && !isEnd;\n\n const isDisabledPrev = currentPage <= 1;\n const isDisabledNext = currentPage >= totalPage;\n\n return (\n <PaginationContext value={{ currentPage, onChangePage }}>\n <div className={styles.paginationContainer}>\n <button\n type='button'\n className={[styles.pagePrev, isDisabledPrev && styles.disabledMoveButton].join(' ')}\n onClick={() => onChangePage(currentPage - 1)}\n disabled={isDisabledPrev}>\n <Icon\n icon='ArrowLeft'\n color={`var(--krds-color-gray-${isDisabledPrev ? '40' : '70'})`}\n size={20}\n viewBox='0 0 20 20'\n />\n <span>이전</span>\n </button>\n <div className={styles.pageContainer}>\n {isStart && (\n <>\n {Array.from({ length: Math.min(totalPage, pivotPage) }, (_, index) => (\n <PaginationItem key={`pagination-total-${index.toString()}`}>\n {index + 1}\n </PaginationItem>\n ))}\n {totalPage > pivotPage && (\n <>\n <PaginationMore />\n <PaginationItem>{totalPage}</PaginationItem>\n </>\n )}\n </>\n )}\n {isMiddle && (\n <>\n <PaginationItem>{1}</PaginationItem>\n <PaginationMore />\n {Array.from({ length: isMobile ? 3 : 5 }, (_, index) => (\n <PaginationItem\n key={`pagination-total-${(index + currentPage - (isMobile ? 2 : 3)).toString()}`}>\n {index + currentPage - (isMobile ? 1 : 2)}\n </PaginationItem>\n ))}\n <PaginationMore />\n <PaginationItem>{totalPage}</PaginationItem>\n </>\n )}\n {isEnd && (\n <>\n <PaginationItem>{1}</PaginationItem>\n <PaginationMore />\n {Array.from({ length: pivotPage }, (_, index) => (\n <PaginationItem\n key={`pagination-total-${totalPage - pivotPage + index.toString()}`}>\n {index + totalPage - pivotPage + 1}\n </PaginationItem>\n ))}\n </>\n )}\n </div>\n <button\n type='button'\n className={[styles.pageNext, isDisabledNext && styles.disabledMoveButton].join(' ')}\n onClick={() => onChangePage(currentPage + 1)}\n disabled={isDisabledNext}>\n <span>다음</span>\n <Icon\n icon='ArrowRight'\n color={`var(--krds-color-gray-${isDisabledNext ? '40' : '70'})`}\n size={20}\n viewBox='0 0 20 20'\n />\n </button>\n </div>\n </PaginationContext>\n );\n}\n","export function splitPhoneNumber(value: string | null | undefined) {\n if (!value) return ['', '', ''];\n const digitsOnly = value.replace(/\\D/g, '');\n if (digitsOnly.length === 9) {\n // 02-354-8645 (지역번호 2자리)\n return [digitsOnly.slice(0, 2), digitsOnly.slice(2, 5), digitsOnly.slice(5, 9)];\n }\n if (digitsOnly.length === 10) {\n // 02-3456-7891 || 031-234-5678 (지역번호 2~3자리)\n\n if (digitsOnly.startsWith('02')) {\n return [digitsOnly.slice(0, 2), digitsOnly.slice(2, 6), digitsOnly.slice(6, 10)];\n }\n return [digitsOnly.slice(0, 3), digitsOnly.slice(3, 6), digitsOnly.slice(6, 10)];\n }\n if (digitsOnly.length === 11) {\n //010-1234-5678\n return [digitsOnly.slice(0, 3), digitsOnly.slice(3, 7), digitsOnly.slice(7, 11)];\n }\n return [digitsOnly.slice(0, 3), digitsOnly.slice(3, 7), digitsOnly.slice(7, 11)];\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { getColor } from 'src/styles/color/color';\nimport { Label, TextInput } from '../index';\nimport * as styles from './PhoneInput.module.css';\nimport type { PhoneInputProps } from './PhoneInput.type';\nimport { splitPhoneNumber } from './splitPhoneNumber';\n\nexport function PhoneInput({\n id,\n value = '',\n setValue = () => {},\n isRequired = false,\n title,\n titlePosition,\n gap,\n description,\n width = 'fit-content',\n inputWidth,\n inputProps,\n height = '56px', //'40px' | '48px' | '56px'\n minHeight,\n maxHeight,\n titleClassName,\n className,\n ...props\n}: PhoneInputProps) {\n const inputRefs = [\n useRef<HTMLInputElement>(null),\n useRef<HTMLInputElement>(null),\n useRef<HTMLInputElement>(null),\n ];\n\n const { className: firstClassName, ...firstInputProps } = inputProps?.[0] ?? {};\n const { className: secondClassName, ...secondInputProps } = inputProps?.[1] ?? {};\n const { className: thirdClassName, ...thirdInputProps } = inputProps?.[2] ?? {};\n\n const [fields, setFields] = useState(['', '', '']);\n useEffect(() => {\n if (value !== fields.join('')) {\n setFields(splitPhoneNumber(value));\n }\n }, [value]);\n\n const handleChange = (idx: number, v: string) => {\n const num = v.replace(/\\D/g, '');\n const next = [...fields];\n\n if (idx === 0) next[0] = num.slice(0, 3);\n if (idx === 1) next[1] = num.slice(0, 4);\n if (idx === 2) next[2] = num.slice(0, 4);\n\n setFields(next);\n setValue(next.join(''));\n\n const nextRef = inputRefs[idx + 1];\n if (\n nextRef &&\n nextRef.current &&\n ((idx === 0 && next[0].length === 3) || (idx === 1 && next[1].length === 4))\n ) {\n nextRef.current.focus();\n }\n };\n\n return (\n <div\n className={`${styles.wrapper} ${titlePosition === 'horizontal' ? styles.horizontal : ''} ${className}`}\n style={{ width, gap }}>\n {(title || description) && (\n <div>\n {title && (\n <div className={`${styles.titleWrapper}`}>\n <Label\n id={`${id}-0`}\n size='s'\n className={titleClassName}\n required={isRequired}\n style={{ fontWeight: 400 }}>\n {title}\n </Label>\n </div>\n )}\n {description && (\n <Label\n id='phone-input-description'\n size='xs'\n style={{ color: getColor('gray-40'), fontWeight: 400 }}>\n {description}\n </Label>\n )}\n </div>\n )}\n\n <div className={styles.inputGroup}>\n <TextInput\n id={`${id}-0`}\n ref={inputRefs[0]}\n value={fields[0]}\n setValue={(v) => handleChange(0, v)}\n maxLength={3}\n width={inputWidth}\n height={height}\n maxHeight={maxHeight}\n minHeight={minHeight}\n inputMode='numeric'\n pattern='[0-9]*'\n useDelete={false}\n placeholder='010'\n titleAttr={`${title ?? '전화번호'} 첫자리`}\n {...props}\n {...firstInputProps}\n className={`${styles.input} ${firstClassName ?? ''}`}\n />\n <span className={styles.separator}>-</span>\n <TextInput\n id={`${id}-1`}\n titleAttr={`${title ?? '전화번호'} 중간자리`}\n ref={inputRefs[1]}\n value={fields[1]}\n setValue={(v) => handleChange(1, v)}\n maxLength={4}\n width={inputWidth}\n height={height}\n maxHeight={maxHeight}\n minHeight={minHeight}\n inputMode='numeric'\n pattern='[0-9]*'\n useDelete={false}\n placeholder='1234'\n {...props}\n {...secondInputProps}\n className={`${styles.input} ${secondClassName ?? ''}`}\n />\n <span className={styles.separator}>-</span>\n <TextInput\n id={`${id}-2`}\n titleAttr={`${title ?? '전화번호'} 끝자리`}\n ref={inputRefs[2]}\n value={fields[2]}\n setValue={(v) => handleChange(2, v)}\n maxLength={4}\n width={inputWidth}\n height={height}\n maxHeight={maxHeight}\n minHeight={minHeight}\n inputMode='numeric'\n pattern='[0-9]*'\n useDelete={false}\n placeholder='5678'\n {...props}\n {...thirdInputProps}\n className={`${styles.input} ${thirdClassName ?? ''}`}\n />\n </div>\n </div>\n );\n}\n",".radioContainer {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tcursor: pointer;\n\tflex-wrap: wrap;\n\n\t/*&:focus-within {*/\n\t/*\tborder-radius: 2px;*/\n\t/*\toutline: 2px solid var(--krds-color-primary-50);*/\n\t/*\toutline-offset: 2px;*/\n\t/*}*/\n}\n\n/* 화면이 500px 이하로 줄어들면 세로 정렬 */\n@media (max-width: 500px) {\n\t.radioContainer {\n /*flex-direction: column;*/\n\t\talign-items: flex-start;\n\t}\n}\n\n.radioOuterCircle {\n\tdisplay: inline-flex;\n\tjustify-content: center;\n\talign-items: center;\n\tborder-radius: 50%;\n\tbox-sizing: border-box;\n\tbackground-color: var(--krds-color-gray-0);\n\tborder: 1px solid var(--krds-color-gray-60);\n\ttransition: all 0.2s ease-in-out;\n}\n\n.radioInnerCircle {\n\twidth: 0.625rem;\n\theight: 0.625rem;\n\tborder-radius: 50%;\n\tbackground-color: transparent;\n\ttransition: all 0.2s ease-in-out;\n}\n\n.checked {\n\tborder: 2px solid var(--krds-color-primary-50);\n}\n\n.innerChecked {\n\tbackground-color: var(--krds-color-primary-50);\n}\n\n.unchecked {\n\tborder-color: var(--krds-color-gray-60);\n}\n\n.innerUnchecked {\n\tbackground-color: transparent;\n}\n\n.disabled {\n\tbackground-color: var(--krds-color-gray-20);\n\tborder-color: var(--krds-color-gray-40);\n\tcursor: not-allowed;\n}\n\n.innerDisabled {\n\tbackground-color: var(--krds-color-gray-40);\n}\n\n.label {\n\tcursor: pointer;\n\ttransition: color 0.3s;\n\tfont-weight: 400;\n}\n\n.labelDisabled {\n\tcursor: not-allowed;\n\tcolor: var(--krds-color-gray-50);\n}\n\n.srOnly {\n\tposition: absolute;\n\twidth: 1px;\n\theight: 1px;\n\tpadding: 0;\n\tmargin: -1px;\n\toverflow: hidden;\n\tclip: rect(0, 0, 0, 0);\n\twhite-space: nowrap;\n\tborder: 0;\n}\n\n.group {\n\tdisplay: flex;\n}\n\n.groupVertical {\n\tflex-direction: column;\n\tgap: 20px;\n}\n\n.groupHorizontal {\n\tflex-direction: row;\n\tgap: 20px;\n}\n\n.label_m {\n\tfont-size: 1.063rem;\n}\n\n.label_l {\n\tfont-size: 1.188rem;\n}\n\n.radioOuter_m {\n\twidth: 1.25rem;\n\theight: 1.25rem;\n}\n\n.radioInner_m {\n\twidth: 0.75rem;\n\theight: 0.75rem;\n}\n\n.radioOuter_l {\n\twidth: 1.5rem;\n\theight: 1.5rem;\n}\n\n.radioInner_l {\n\twidth: 0.75rem;\n\theight: 0.75rem;\n}\n","/** biome-ignore-all lint/a11y/useKeyWithClickEvents: <explanation> */\n/** biome-ignore-all lint/a11y/useSemanticElements: <explanation> */\nimport type React from 'react';\nimport { Label } from '../Label';\nimport * as styles from './RadioButton.module.css';\nimport type { RadioButtonProps } from './RadioButton.type';\nimport { uniqueId } from 'lodash-es';\n\nexport const RadioButton = ({\n id = `radio_${uniqueId()}`,\n name,\n value,\n checked, // checked가 없으면 value로 판단\n onChange,\n label,\n disabled = false,\n size = 'm',\n tabIndex = 0,\n onKeyDown,\n}: RadioButtonProps) => {\n // checked가 명시적으로 전달되지 않았으면 value를 boolean으로 변환해서 사용\n const isChecked = checked !== undefined ? checked : Boolean(value);\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!disabled && event.target.checked) {\n if (onChange) {\n onChange(value);\n }\n }\n };\n\n const handleClick = () => {\n if (!disabled) {\n if (onChange) {\n onChange(value);\n }\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (onChange) {\n onChange(value);\n }\n }\n };\n\n return (\n <div\n className={styles.radioContainer}\n // biome-ignore lint/a11y/useSemanticElements: <explanation>\n role='radio'\n aria-checked={isChecked}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : tabIndex}\n onClick={handleClick}\n onKeyDown={handleKeyDown}>\n <div\n className={`\n ${styles.radioOuterCircle} \n ${styles[`radioOuter_${size}`]}\n ${disabled ? styles.disabled : isChecked ? styles.checked : styles.unchecked}\n `\n .trim()\n .replace(/\\s+/g, ' ')}>\n <div\n className={`\n ${styles.radioInnerCircle}\n ${styles[`radioInner_${size}`]}\n ${\n disabled && isChecked\n ? styles.innerDisabled\n : isChecked\n ? styles.innerChecked\n : styles.innerUnchecked\n }\n `\n .trim()\n .replace(/\\s+/g, ' ')}\n />\n\n <input\n type='radio'\n id={id}\n name={name}\n value={String(value)}\n checked={isChecked}\n onChange={handleInputChange}\n disabled={disabled}\n className={styles.srOnly}\n tabIndex={-1}\n />\n </div>\n {label && (\n <Label\n htmlFor={id}\n size={size}\n color={disabled ? 'gray-40' : 'gray-90'}\n className={`${disabled ? styles.labelDisabled : styles.label} ${styles[`label_${size}`]}`}\n onClick={() => {\n if (onChange) {\n !disabled && onChange(value);\n }\n }}>\n {label}\n </Label>\n )}\n </div>\n );\n};\n","import { KeyboardEvent, ReactNode, useRef } from 'react';\nimport { RadioButton } from './RadioButton';\nimport * as styles from './RadioButton.module.css';\nimport { RadioButtonGroupProps } from './RadioButton.type';\nimport { uniqueId } from 'lodash-es';\n\nexport const RadioButtonGroup = ({\n name,\n options,\n selectedValue,\n onChange,\n disabled = false,\n size = 'm',\n direction = 'horizontal',\n labelKey = 'label',\n valueKey = 'value',\n}: RadioButtonGroupProps) => {\n const groupRef = useRef<HTMLDivElement>(null);\n const uid = uniqueId();\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n const currentIndex = options.findIndex((opt) => opt[valueKey] === selectedValue);\n let nextIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n event.preventDefault();\n nextIndex = currentIndex > 0 ? currentIndex - 1 : options.length - 1;\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n event.preventDefault();\n nextIndex = currentIndex < options.length - 1 ? currentIndex + 1 : 0;\n break;\n default:\n return;\n }\n\n const nextOption = options[nextIndex];\n onChange(nextOption[valueKey] as string | boolean);\n\n // 다음 라디오 버튼에 포커스\n setTimeout(() => {\n const radioContainers = groupRef.current?.querySelectorAll('[role=\"radio\"]');\n if (radioContainers) {\n (radioContainers[nextIndex] as HTMLElement)?.focus();\n }\n }, 0);\n };\n\n const safeName = `${name}-${uid}`;\n\n return (\n <div\n className={`${styles.group} ${direction === 'horizontal' ? styles.groupHorizontal : styles.groupVertical}`}\n ref={groupRef}\n role='radiogroup'\n onKeyDown={handleKeyDown}>\n {options.map((option) => {\n const rawVal = option[valueKey] as string | boolean;\n const id = `${safeName}-${String(rawVal)}`;\n const isSelected = selectedValue === rawVal;\n\n return (\n <RadioButton\n key={id}\n id={id}\n name={safeName}\n value={rawVal}\n checked={isSelected}\n onChange={onChange}\n label={option[labelKey] as ReactNode}\n disabled={disabled}\n size={size}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n />\n );\n })}\n </div>\n );\n};\n","/* 공통 */\n.selectWrapper {\n\tposition: relative;\n\tdisplay: inline-block;\n}\n\n.displayText {\n\tdisplay: inline-block;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.select {\n\tposition: relative;\n\tdisplay: flex;\n\tgap: 8px;\n}\n\n.selectContent {\n\tdisplay: flex;\n\tflex-direction: column;\n\twidth: 100%;\n}\n\n.label {\n\tcolor: var(--krds-color-gray-90);\n}\n\n.selectBox {\n\tdisplay: flex;\n\tbox-sizing: border-box !important;\n\tjustify-content: space-between;\n\talign-items: center;\n\tpadding: 0 16px;\n\tfont-size: 0.938rem;\n\tcolor: var(--krds-color-gray-90);\n\tborder-radius: 6px;\n\tcursor: pointer;\n\tline-height: 1.5;\n\tgap: 8px;\n}\n\n.selectBox > span {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 4px;\n}\n\n.value {\n\tdisplay: inline-block;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tfont-size: 1rem;\n}\n\n/* variant - 박스형 */\n.variantBox {\n\twidth: 100%;\n\tborder: 1px solid var(--krds-color-gray-60);\n\tbackground-color: var(--krds-color-gray-0);\n}\n\n/* variant - 텍스트형 */\n.variantText {\n\tborder: none;\n\tbackground-color: transparent;\n\tpadding: 0;\n}\n\n/* 정렬 방향 */\n.directionVertical {\n\tflex-direction: column;\n\talign-items: flex-start;\n}\n\n.directionHorizontal {\n\t/* flex-direction: row; */\n\talign-items: center;\n\tgap: 8px;\n\tdisplay: flex;\n\tjustify-content: space-between;\n}\n\n/* 사이즈 */\n.sizeS {\n\theight: 40px;\n}\n.sizeM {\n\theight: 48px;\n}\n.sizeL {\n\theight: 56px;\n}\n\n.valueS {\n\tfont-size: 0.938rem;\n}\n.valueM,\n.valueL {\n\tfont-size: 1.063rem;\n}\n\n.selectBox:disabled {\n\tbackground-color: var(--krds-color-gray-20);\n\tcolor: var(--krds-color-gray-40);\n\tcursor: not-allowed;\n}\n\n.placeholder {\n\tcolor: var(--krds-color-gray-40);\n}\n\n/* 상태별 */\n.default {\n\tborder-color: var(--krds-color-gray-60);\n}\n.focused {\n\tborder: 2px solid var(--krds-color-primary-50);\n\tborder-color: var(--krds-color-primary-50);\n\toutline-offset: 0;\n}\n.completed {\n\tborder-color: var(--krds-color-gray-60);\n}\n.error {\n\tborder-color: var(--krds-color-danger-50);\n\tbox-shadow: 0 0 0 2px var(--krds-color-danger-40);\n}\n.disabled {\n\tbackground-color: var(--krds-color-gray-20);\n\tcolor: var(--krds-color-gray-40);\n\tborder-color: var(--krds-color-gray-40);\n\tcursor: not-allowed;\n}\n.view {\n\tbackground-color: var(--krds-color-gray-20);\n\tcolor: var(--krds-color-gray-70);\n\tborder-color: var(--krds-color-gray-40);\n\tcursor: default;\n}\n\n/* 드롭다운 토글 버튼 (멀티셀렉트 태그 모드) */\n.dropdownToggle {\n\tbackground: transparent;\n\tborder: none;\n\tcursor: pointer;\n\tpadding: 4px;\n\tdisplay: flex;\n\talign-items: center;\n\tflex-shrink: 0;\n}\n\n.dropdownToggle:focus {\n\toutline: 2px solid var(--krds-color-primary-50);\n\toutline-offset: 2px;\n\tborder-radius: 4px;\n}\n\n/* 드롭다운 */\n.dropdownWrapper {\n\tposition: absolute;\n\ttop: 100%;\n\tmargin-top: 4px;\n\tz-index: 100;\n}\n\n.dropdown {\n\tbackground: var(--krds-color-gray-0);\n\tborder: 1px solid var(--krds-color-gray-50);\n\tborder-radius: 4px;\n\tmax-height: 240px;\n\toverflow-y: auto;\n\tbox-sizing: border-box;\n\t/* width: max-content; */\n}\n\n/* 옵션 */\n.option {\n\tmargin: 4px 8px;\n\tpadding: 10px 12px;\n\tfont-size: 0.938rem;\n\tcolor: var(--krds-color-gray-90);\n\tbackground: transparent;\n\tcursor: pointer;\n\tborder-radius: 4px;\n}\n.option:hover,\n.option.selected {\n\tbackground-color: var(--krds-color-secondary-5);\n\tfont-weight: 500;\n}\n.option.focused {\n\tbackground-color: var(--krds-color-secondary-5);\n}\n\n/* 아이콘 */\n.icon {\n\tpointer-events: none;\n}\n.iconOpen {\n\ttransform: rotate(180deg);\n}\n.value {\n\tdisplay: block; /* 또는 inline-block 가능하지만 flex:1 + min-width:0 조합이면 block 권장 */\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n","import type { CSSProperties, KeyboardEvent } from 'react';\nimport { useEffect, useId, useRef, useState } from 'react';\nimport { DakCheckBox } from '../Checkbox/DakCheckBox';\nimport { Icon } from '../Icon';\nimport { Label } from '../Label';\nimport { StatusLabel } from '../TextInput/StatusLabel';\nimport * as style from './Select.module.css';\nimport type { SelectProps } from './Select.type';\n\nexport const Select = ({\n id,\n label,\n options,\n value,\n onChange,\n placeholder,\n size = 'm',\n variant = 'box',\n disabled = false,\n width, // 고정 폭 (없으면 기본 200)\n className = '',\n state = 'default',\n valueKey = 'value',\n labelKey = 'label',\n labelFontSize = 'm',\n labelFontWeight = 'regular',\n direction = 'vertical',\n maxVisibleItems = 5, // 기본값을 5로 변경\n multiDisplaySeparator = ', ',\n multiDisplayStrategy = 'ellipsis',\n multiCountPattern = '{first} 외 {count}건',\n maxTags = 2,\n type = 'single',\n isValid = true,\n error,\n info,\n title,\n}: SelectProps) => {\n const isMulti = type === 'multi';\n\n const [isOpen, setIsOpen] = useState(false);\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const selectId = useId();\n\n const fixedWidth = width ?? 200;\n\n // maxVisibleItems를 실제 스크롤 임계값으로 사용\n const actualScrollThreshold = maxVisibleItems + 1;\n\n // 선택 값 배열화\n const selectedValues: string[] = isMulti\n ? Array.isArray(value)\n ? value\n : []\n : value\n ? [value as string]\n : [];\n\n const selectedOptions = options.filter((opt) => selectedValues.includes(opt[valueKey]));\n\n let displayText: string | undefined = placeholder;\n let shouldShowEllipsis = false;\n\n if (isMulti) {\n if (selectedOptions.length > 0) {\n if (multiDisplayStrategy === 'count' && selectedOptions.length > 1) {\n const first = selectedOptions[0][labelKey];\n const restCount = selectedOptions.length - 1;\n displayText = multiCountPattern\n .replace('{first}', first)\n .replace('{count}', String(restCount));\n } else {\n if (selectedOptions.length > actualScrollThreshold) {\n const visibleOptions = selectedOptions.slice(0, actualScrollThreshold);\n displayText = visibleOptions.map((o) => o[labelKey]).join(multiDisplaySeparator);\n shouldShowEllipsis = true;\n } else {\n displayText = selectedOptions.map((o) => o[labelKey]).join(multiDisplaySeparator);\n }\n }\n }\n } else {\n const selectedOption = options.find((opt) => opt[valueKey] === value);\n displayText = selectedOption?.[labelKey] ?? placeholder;\n }\n\n const toggleDropdown = () => {\n if (disabled || state === 'disabled' || state === 'view') return;\n setIsOpen((prev) => !prev);\n };\n\n const closeDropdown = () => {\n setIsOpen(false);\n setFocusedIndex(null);\n };\n\n const commitSingleSelection = (selectedValue: string) => {\n if (disabled || state === 'disabled' || state === 'view') return;\n (onChange as (v: string) => void)(selectedValue);\n closeDropdown();\n };\n\n const toggleMultiValue = (selectedValue: string) => {\n if (disabled || state === 'disabled' || state === 'view') return;\n const current = selectedValues;\n let next: string[];\n if (current.includes(selectedValue)) {\n next = current.filter((v) => v !== selectedValue);\n } else {\n next = [...current, selectedValue];\n }\n (onChange as (v: string[]) => void)(next);\n // 멀티셀렉트에서 선택 후 버튼에 포커스 유지\n setTimeout(() => {\n buttonRef.current?.focus();\n }, 0);\n };\n\n const handleOptionClick = (selectedValue: string) => {\n if (isMulti) {\n toggleMultiValue(selectedValue);\n } else {\n commitSingleSelection(selectedValue);\n }\n };\n\n const handleClickOutside = (event: MouseEvent) => {\n if (wrapperRef.current && !wrapperRef.current.contains(event.target as Node)) {\n closeDropdown();\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled || state === 'disabled' || state === 'view') return;\n switch (event.key) {\n case 'Enter':\n case ' ': {\n event.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(0);\n } else if (focusedIndex !== null) {\n const targetOption = options[focusedIndex];\n if (isMulti) toggleMultiValue(targetOption[valueKey]);\n else commitSingleSelection(targetOption[valueKey]);\n } else {\n // 드롭다운이 열려있고 포커스된 옵션이 없으면 닫기\n closeDropdown();\n }\n break;\n }\n case 'ArrowDown': {\n event.preventDefault();\n setIsOpen(true);\n setFocusedIndex((prev) => (prev === null || prev === options.length - 1 ? 0 : prev + 1));\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n setIsOpen(true);\n // 첫 번째 옵션에서 위로 가면 토글 버튼으로 (focusedIndex = null)\n setFocusedIndex((prev) =>\n prev === null ? options.length - 1 : prev === 0 ? null : prev - 1,\n );\n break;\n }\n case 'Escape': {\n closeDropdown();\n break;\n }\n case 'Tab': {\n if (isOpen) {\n event.preventDefault();\n // Tab 키로도 다음 옵션으로 이동 (Shift+Tab은 이전 옵션)\n if (event.shiftKey) {\n // 첫 번째 옵션에서 Shift+Tab -> 토글 버튼으로 (focusedIndex = null)\n setFocusedIndex((prev) =>\n prev === null ? options.length - 1 : prev === 0 ? null : prev - 1,\n );\n } else {\n setFocusedIndex((prev) =>\n prev === null || prev === options.length - 1 ? 0 : prev + 1,\n );\n }\n }\n break;\n }\n }\n };\n\n useEffect(() => {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // 포커스된 옵션이 보이도록 스크롤\n useEffect(() => {\n if (isOpen && focusedIndex !== null && listRef.current) {\n const focusedOption = listRef.current.querySelector(\n `#${id ?? selectId}-option-${focusedIndex}`,\n );\n if (focusedOption) {\n focusedOption.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }\n }, [focusedIndex, isOpen, id, selectId]);\n\n // 스크롤 처리: maxVisibleItems보다 많은 옵션이 있을 때 스크롤 생성 (수정된 부분)\n const optionBaseHeight = 40;\n const dynamicMaxHeight =\n options.length > actualScrollThreshold ? optionBaseHeight * actualScrollThreshold : undefined;\n\n const dropdownStyle: CSSProperties = {\n maxHeight: dynamicMaxHeight ? `${dynamicMaxHeight}px` : undefined,\n overflowY: dynamicMaxHeight ? 'auto' : undefined,\n };\n\n const sizeClass = size === 's' ? style.sizeS : size === 'l' ? style.sizeL : style.sizeM;\n // isValid가 false이고 disabled가 아닐 때 error 스타일 적용\n const effectiveState = !isValid && !disabled ? 'error' : state;\n const stateClass = style[effectiveState] ?? style.default;\n const variantClass = variant === 'text' ? style.variantText : style.variantBox;\n const directionClass =\n direction === 'horizontal' ? style.directionHorizontal : style.directionVertical;\n\n const listboxId = `${id ?? selectId}-listbox`;\n const labelId = `${id ?? selectId}-label`;\n const focusedOptionId =\n focusedIndex !== null ? `${id ?? selectId}-option-${focusedIndex}` : undefined;\n\n return (\n <div\n className={`${style.selectWrapper} ${className}`}\n ref={wrapperRef}\n style={{ width: fixedWidth }}>\n <div className={`${style.select} ${directionClass}`} style={{ width: '100%' }}>\n {label && (\n <Label\n id={labelId}\n style={{ whiteSpace: 'nowrap' }}\n htmlFor={id ?? selectId}\n size={labelFontSize}\n weight={labelFontWeight}>\n {label}\n </Label>\n )}\n <div className={style.selectContent}>\n {/* 멀티셀렉트 태그 모드: 태그를 버튼 밖에 배치하여 개별 포커스 가능하게 함 */}\n {isMulti && multiDisplayStrategy === 'tags' && selectedOptions.length > 0 ? (\n <div\n className={`${style.selectBox} ${sizeClass} ${stateClass} ${variantClass}`}\n style={{ width: '', display: 'flex', alignItems: 'center', gap: '4px' }}>\n <div\n className='flex flex-1 items-center gap-1 overflow-hidden'\n role='group'\n aria-label={`${label || '선택된 항목'}: ${selectedOptions.length}개 선택됨`}>\n {selectedOptions.slice(0, maxTags).map((opt) => (\n <span\n key={opt[valueKey]}\n className='flex items-center gap-1 rounded px-2 py-1 text-sm'\n style={{\n border: '1px solid var(--krds-color-gray-20)',\n borderRadius: '100px',\n flexShrink: 0,\n }}>\n <span>{opt[labelKey]}</span>\n <button\n type='button'\n aria-label={`${opt[labelKey]} 삭제`}\n title={`${opt[labelKey]} 삭제`}\n onClick={(e) => {\n e.stopPropagation();\n handleOptionClick(opt[valueKey]);\n }}\n style={{\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: '2px',\n display: 'flex',\n alignItems: 'center',\n borderRadius: '2px',\n }}>\n <Icon icon='DeleteIcon' size={14} viewBox='0 0 16 16' aria-hidden='true' />\n </button>\n </span>\n ))}\n {selectedOptions.length > maxTags && (\n <span className='text-gray-70 text-sm' aria-hidden='true'>\n +{selectedOptions.length - maxTags}\n </span>\n )}\n </div>\n <button\n ref={buttonRef}\n id={id ?? selectId}\n type='button'\n className={style.dropdownToggle}\n disabled={disabled || state === 'disabled'}\n onKeyDown={handleKeyDown}\n onClick={toggleDropdown}\n aria-haspopup='listbox'\n aria-expanded={isOpen}\n aria-controls={isOpen ? listboxId : undefined}\n aria-activedescendant={isOpen ? focusedOptionId : undefined}\n aria-label={`${label || '선택'} 드롭다운 ${isOpen ? '닫기' : '열기'}`}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: '4px',\n display: 'flex',\n alignItems: 'center',\n }}>\n <Icon\n icon={isOpen ? 'ArrowUp' : 'ArrowDown'}\n name={isOpen ? 'chevron-up' : 'chevron-down'}\n width={size === 's' ? 16 : 20}\n height={size === 's' ? 16 : 20}\n color='var(--krds-color-gray-80)'\n />\n </button>\n </div>\n ) : (\n <button\n ref={buttonRef}\n id={id ?? selectId}\n type='button'\n className={`${style.selectBox} ${sizeClass} ${stateClass} ${variantClass}`}\n disabled={disabled || state === 'disabled'}\n onKeyDown={handleKeyDown}\n onClick={toggleDropdown}\n aria-haspopup='listbox'\n aria-expanded={isOpen}\n aria-controls={isOpen ? listboxId : undefined}\n aria-activedescendant={isOpen ? focusedOptionId : undefined}\n aria-labelledby={label ? labelId : undefined}\n aria-label={!label ? displayText || placeholder || '선택' : undefined}\n title={label ? `${label}: ${displayText} 선택됨` : title || `${displayText} 선택됨`}\n style={{ width: '' }}>\n <span\n className={`${style.value} ${\n size === 's' ? style.valueS : size === 'm' ? style.valueM : style.valueL\n } ${!selectedValues.length ? style.placeholder : ''}`}\n title={displayText}\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n display: 'inline-block',\n }}>\n {displayText}\n {shouldShowEllipsis && (\n <span style={{ color: 'var(--krds-color-gray-60)' }}>...</span>\n )}\n </span>\n <Icon\n icon={isOpen ? 'ArrowUp' : 'ArrowDown'}\n name={isOpen ? 'chevron-up' : 'chevron-down'}\n width={size === 's' ? 16 : 20}\n height={size === 's' ? 16 : 20}\n color='var(--krds-color-gray-80)'\n />\n </button>\n )}\n <StatusLabel\n value={\n isMulti\n ? selectedOptions.map((o) => o[labelKey]).join(', ') || ''\n : selectedOptions[0]?.[labelKey] || ''\n }\n disabled={disabled || state === 'disabled'}\n isValid={isValid}\n error={error}\n info={info}\n errorId={`${id ?? selectId}-error`}\n infoId={`${id ?? selectId}-info`}\n hasContent={!!(error || info)}\n />\n </div>\n\n {isOpen && (\n <div className={style.dropdownWrapper} style={{ width: '100%' }}>\n <div\n id={listboxId}\n className={style.dropdown}\n ref={listRef}\n role='listbox'\n aria-labelledby={label ? labelId : undefined}\n aria-label={!label ? placeholder || '옵션 목록' : undefined}\n aria-multiselectable={isMulti || undefined}\n style={dropdownStyle}>\n {options.map((opt, idx) => {\n const optValue = opt[valueKey];\n const isSelected = selectedValues.includes(optValue);\n const isFocused = focusedIndex === idx;\n const optionId = `${id ?? selectId}-option-${idx}`;\n\n if (isMulti) {\n return (\n <button\n type={'button'}\n id={optionId}\n key={optValue}\n role='option'\n aria-selected={isSelected}\n tabIndex={-1}\n title={opt[labelKey]}\n style={{\n padding: '4px 8px',\n background: isFocused ? 'var(--krds-color-gray-10)' : 'transparent',\n cursor: 'pointer',\n minHeight: `${optionBaseHeight}px`,\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n }}\n onMouseEnter={() => setFocusedIndex(idx)}>\n <DakCheckBox\n id={`${id ?? selectId}-checkbox-${optValue}`}\n label={opt[labelKey]}\n checked={isSelected}\n disabled={disabled || state === 'disabled' || state === 'view'}\n size={size === 'l' ? 'large' : 'default'}\n onChange={() => handleOptionClick(optValue)}\n />\n </button>\n );\n }\n\n return (\n <button\n type='button'\n id={optionId}\n key={optValue}\n role='option'\n aria-selected={isSelected}\n tabIndex={-1}\n className={style.option}\n title={opt[labelKey]}\n style={{\n background: isFocused\n ? 'var(--krds-color-gray-10)'\n : isSelected\n ? 'var(--krds-color-primary-10)'\n : 'transparent',\n cursor: 'pointer',\n padding: '8px 12px',\n borderRadius: '4px',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n minHeight: `${optionBaseHeight}px`,\n width: 'calc(100% - 16px)',\n margin: '4px 8px',\n border: 'none',\n textAlign: 'left',\n font: 'inherit',\n boxSizing: 'border-box',\n }}\n onMouseEnter={() => setFocusedIndex(idx)}\n onClick={() => handleOptionClick(optValue)}>\n <span style={{ flex: 1 }}>{opt[labelKey]}</span>\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n",".stepList {\n\toverflow-x: auto;\n\twhite-space: nowrap;\n\tdisplay: flex;\n\talign-items: flex-start;\n\tpadding: 0;\n\tmargin: 0;\n\tlist-style: none;\n\tcounter-reset: step;\n\twidth: 100%;\n}\n\n.stepBox {\n\toverflow-x: auto;\n\twhite-space: nowrap;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center !important;\n\tgap: 24px;\n\tmargin: 0;\n\tlist-style: none;\n\tbackground-color: var(--krds-color-gray-5);\n\tborder-radius: 12px;\n\tpadding: 8px;\n\n\t.stepItem {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\talign-items: center;\n\t\tflex: 0 !important;\n\t\tbackground-color: transparent;\n\t}\n\n\t& > * {\n\t\tflex-shrink: 0;\n\t}\n\n\t.ongoing {\n\t\tcolor: var(--krds-color-primary-60);\n\t}\n\n\t.stepCircle {\n\t\tmargin: 0;\n\t}\n\n\t.stepLabelGroup {\n\t\tpadding: 0;\n\t}\n\n\tli::after {\n\t\tdisplay: none !important;\n\t}\n\n\t.stepLabel {\n\t\tdisplay: none;\n\t}\n\n\t.stepTitle {\n\t\tmargin: 0;\n\t}\n}\n\n.stepItem {\n\tposition: relative;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tflex: 1;\n\ttext-align: center;\n}\n\n.left {\n\talign-items: flex-start;\n\n\t.stepLabelGroup {\n\t\tpadding-left: 0 !important;\n\t}\n}\n\n.left:not(:last-child)::after {\n\tleft: 0 !important;\n}\n\n.stepItem:not(:last-child)::after {\n\tcontent: \"\";\n\tposition: absolute;\n\ttop: 14%;\n\tleft: 50%;\n\ttransform: translateX(0%);\n\twidth: 100%;\n\theight: 2px;\n\tbackground-color: var(--krds-color-gray-20);\n\tz-index: 0;\n}\n\n.flex-start:not(:last-child)::after {\n\tleft: 0;\n}\n\n.completed:not(:last-child)::after {\n\tbackground-color: var(--krds-color-gray-50);\n}\n\n.stepCircle {\n\tz-index: 1;\n\twidth: 24px;\n\theight: 24px;\n\tbox-sizing: border-box;\n\tborder-radius: 50%;\n\tbackground-color: var(--krds-color-gray-10);\n\tborder: 1px solid var(--krds-color-gray-20);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin-bottom: 1rem;\n}\n\n.completed .stepCircle {\n\tbackground-color: var(--krds-color-gray-50);\n\tcolor: var(--krds-color-gray-0);\n\tborder: none;\n}\n\n.ongoing .stepCircle {\n\tborder: 2px solid var(--krds-color-primary-50);\n\tbackground-color: var(--krds-color-gray-0);\n}\n\n.stepLabel {\n\tfont-size: 13px;\n\tcolor: var(--krds-color-gray-70);\n\tfont-weight: 400;\n}\n\n.stepLabelGroup {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: flex-start;\n\tpadding-left: 30px;\n}\n\n.stepTitle {\n\tfont-weight: 600;\n\tfont-size: 15px;\n\tmargin-top: 4px;\n\tcolor: var(--krds-color-gray-70);\n}\n\n.stepButton {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\twidth: 100%;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\tcursor: pointer;\n\tfont-family: inherit;\n\ttext-align: center;\n}\n\n.stepButton:focus-visible {\n\toutline: 2px solid var(--krds-color-primary-50);\n\toutline-offset: 2px;\n\tborder-radius: 4px;\n}\n\n.stepBox .stepButton {\n\tflex-direction: row;\n\tgap: 10px;\n\tpadding: 18px 24px;\n\tborder-radius: 8px;\n\ttransition: background-color 500ms ease;\n}\n\n.stepBox .ongoing .stepButton {\n\tbackground-color: #fff;\n\tpadding: 16px 24px;\n}\n","import type { FC } from 'react';\nimport React from 'react';\nimport { Icon } from '../Icon';\nimport * as styles from './StepIndicator.module.css';\nimport type { StepIndicatorProps } from './StepIndicator.type';\n\n\n// 버튼 사용 예시\n// <Button onClick={() => setStepIndex((prev) => Math.max(prev - 1, 0))}>이전</Button>;\n// <Button onClick={() => setStepIndex((prev) => Math.min(prev + 1, steps.length - 1))}>다음</Button>;\n\nconst STYLE_CONTAINER = {\n line: 'stepList',\n box: 'stepBox',\n};\n\nexport const StepIndicator: FC<StepIndicatorProps> = ({\n steps,\n currentStepIndex,\n className,\n align = 'center',\n variant = 'line',\n onClickStep,\n focusable = false,\n}) => {\n const CheckIcon = () => (\n <svg\n width='24'\n height='24'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden='true'>\n <circle cx='12' cy='12' r='12' fill='#6D7882' />\n <path\n d='M17.207 8.793a1 1 0 0 0-1.414-1.414l-5.5 5.5L8.207 10.793a1 1 0 1 0-1.414 1.414l3 3a1 1 0 0 0 1.414 0l6-6Z'\n fill='white'\n />\n </svg>\n );\n\n const OngoingIcon = () => (\n <svg\n width='24'\n height='24'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden='true'>\n <circle cx='12' cy='12' r='12' fill='#256EF4' />\n <circle cx='12' cy='12' r='10' fill='white' />\n <circle cx='12' cy='12' r='8' fill='#256EF4' />\n </svg>\n );\n\n return (\n <ol\n className={`${styles[STYLE_CONTAINER[variant]]} ${className ?? ''}`}\n aria-label='진행 단계 표시'>\n {steps.map((step, index) => {\n /**\n * 단계별 상태 계산\n * - 현재 인덱스보다 작으면 완료(completion)\n * - 같으면 진행 중(ongoing)\n * - 크면 예정 단계(before)\n */\n const status =\n index < currentStepIndex\n ? 'completion'\n : index === currentStepIndex\n ? 'ongoing'\n : 'before';\n\n const itemClass = [\n styles.stepItem,\n styles[align],\n status === 'completion' ? styles.completed : '',\n status === 'ongoing' ? styles.ongoing : '',\n // status === 'before' ? styles.before : '',\n ].join(' ');\n\n return (\n <React.Fragment key={`step-${index}`}>\n <li className={itemClass}>\n <button\n tabIndex={focusable ? 0 : -1}\n type='button'\n className={styles.stepButton}\n onClick={() => onClickStep?.(index)}\n aria-current={status === 'ongoing' ? 'step' : undefined}\n aria-disabled={status === 'before' ? 'true' : undefined}\n aria-label={`${index + 1}단계 ${status === 'completion' ? '완료' : status === 'ongoing' ? '진행 중' : '예정'}`}>\n <div className={styles.stepCircle}>\n {status === 'completion' ? (\n <CheckIcon />\n ) : status === 'ongoing' ? (\n <OngoingIcon />\n ) : (\n <span aria-hidden='true' />\n )}\n </div>\n <div className={styles.stepLabelGroup}>\n <span className={styles.stepLabel}>{`${index + 1}단계`}</span>\n <span className={styles.stepTitle}>{step.description}</span>\n </div>\n </button>\n </li>\n {index < steps.length - 1 && variant === 'box' && (\n <Icon icon={'ArrowRight'} size={20} viewBox={'0 0 20 20'} />\n )}\n </React.Fragment>\n );\n })}\n </ol>\n );\n};\n","import { Label } from '../../Label';\nimport * as style from '../Switch.module.css';\nimport type { SwitchLabelProps } from '../Switch.type';\n\nexport function SwitchLabel({\n label,\n position,\n size,\n weight,\n className,\n isClickable,\n onClick,\n disabled,\n htmlFor,\n}: SwitchLabelProps) {\n if (!label) return null;\n\n const commonProps = {\n className: `${className} ${position === 'left' ? style.labelMarginRight : style.labelMarginLeft}`,\n onClick: isClickable && !disabled ? onClick : undefined,\n style: {\n cursor: isClickable && !disabled ? 'pointer' : 'default',\n },\n };\n\n const labelContent =\n typeof label === 'string' ? (\n <Label {...commonProps} size={size} weight={weight} htmlFor={htmlFor}>\n {label}\n </Label>\n ) : (\n <label {...commonProps} htmlFor={htmlFor}>{label}</label>\n );\n\n return labelContent;\n}\n","import * as style from '../Switch.module.css';\nimport type { SwitchTrackProps } from '../Switch.type';\n\nexport function SwitchTrack({\n id,\n label,\n status,\n disabled,\n onChange,\n size,\n useIcon,\n checkedIcon,\n uncheckedIcon,\n barWidth,\n barHeight,\n thumbSize,\n inputClassName,\n}: SwitchTrackProps) {\n const trackWidth = barWidth ?? (size === 'l' ? '40px' : '32px');\n const trackHeight = barHeight ?? (size === 'l' ? '24px' : '20px');\n const thumbDiameter = thumbSize ?? (size === 'l' ? '20px' : '16px');\n const thumbLeft = status ? `calc(${trackWidth} - ${thumbDiameter} - 2px)` : '2px';\n\n const checkIconColor = disabled ? 'var(--krds-color-gray-20)' : 'var(--krds-color-primary-50)';\n\n const closeIconColor = disabled ? 'var(--krds-color-gray-20)' : 'var(--krds-color-gray-50)';\n\n return (\n <label style={{ display: 'flex', alignItems: 'center', margin: 0 }}>\n <input\n type='checkbox'\n id={id}\n title={label}\n checked={status}\n onChange={(e) => !disabled && onChange(e.target.checked)}\n disabled={disabled}\n className={`${inputClassName} ${style.srOnly}`}\n role='switch'\n aria-label={label ?? '토글 버튼'}\n aria-checked={status}\n aria-disabled={disabled}\n />\n <span\n className={style.switchTrack}\n style={{\n width: trackWidth,\n height: trackHeight,\n outline: 'none',\n }}\n tabIndex={-1}>\n <span\n className={style.switchThumb}\n style={{\n left: thumbLeft,\n width: thumbDiameter,\n height: thumbDiameter,\n }}>\n {useIcon && (\n <span\n className={status ? style.checkIcon : style.closeIcon}\n style={{\n color: status ? checkIconColor : closeIconColor,\n }}>\n {status ? checkedIcon : uncheckedIcon}\n </span>\n )}\n </span>\n </span>\n </label>\n );\n}\n","import { uniqueId } from 'lodash-es';\nimport { SwitchLabel, SwitchTrack } from './components';\nimport * as style from './Switch.module.css';\nimport type { SwitchProps } from './Switch.type';\n\n/**\n * Switch 컴포넌트 😸\n *\n * @param status 스위치 on/off 상태 (default: false)\n * @param onChange 상태 변경 시 호출되는 콜백 함수\n * @param size 스위치 크기 ('md' | 'lg', default: 'md')\n * @param label 스위치 옆에 표시할 라벨 텍스트\n * @param labelPosition 라벨 위치 ('left' | 'right', default: 'right')\n * @param disabled 비활성화 여부 (default: false)\n * @param showIcon 스위치 thumb에 아이콘 표시 여부 (default: false)\n * @param className 최상위 div에 적용할 커스텀 클래스\n * @param barWidth 스위치 바 너비 (px 단위, size에 따라 기본값 다름)\n * @param barHeight 스위치 바 높이 (px 단위, size에 따라 기본값 다름)\n * @param thumbSize 스위치 동그라미 크기 (px 단위, size에 따라 기본값 다름)\n * @param labelClassName 라벨에 적용할 커스텀 클래스\n * @param labelSize 라벨 폰트 사이즈 (default: size에 따라 's' 또는 'm')\n * @param labelWeight 라벨 폰트 두께\n * @param isClickableLabel 라벨 클릭 시 스위치 토글 여부 (default: true)\n * @param inputClassName input 요소에 적용할 커스텀 클래스 (접근성 필요할때 사용!)\n *\n */\n\nexport function Switch({\n id,\n status = false,\n onChange = () => {},\n size = 'm',\n label,\n labelPosition = 'right',\n disabled = false,\n useIcon = false,\n checkedIcon,\n uncheckedIcon,\n className = '',\n barWidth,\n barHeight,\n thumbSize,\n labelClassName,\n labelSize,\n labelWeight,\n inputClassName,\n isLabelClickable = true,\n}: SwitchProps) {\n const switchId = id || `switch-${uniqueId()}`;\n const defaultLabelSize = size === 'l' ? 'm' : 's';\n\n const handleLabelClick = () => {\n if (isLabelClickable && !disabled) {\n onChange(!status);\n }\n };\n\n return (\n <div className={className}>\n <div className={`${style.switchContainer} ${disabled ? style.disabled : ''}`}>\n {labelPosition === 'left' && (\n <SwitchLabel\n label={label}\n position='left'\n size={labelSize || defaultLabelSize}\n weight={labelWeight}\n className={labelClassName}\n isClickable={isLabelClickable}\n onClick={handleLabelClick}\n disabled={disabled}\n htmlFor={switchId}\n />\n )}\n\n <SwitchTrack\n id={switchId}\n label={typeof label === 'string' ? label : undefined}\n status={status}\n disabled={disabled}\n onChange={onChange}\n size={size}\n useIcon={useIcon}\n checkedIcon={checkedIcon}\n uncheckedIcon={uncheckedIcon}\n barWidth={barWidth}\n barHeight={barHeight}\n thumbSize={thumbSize}\n inputClassName={inputClassName}\n />\n\n {labelPosition === 'right' && (\n <SwitchLabel\n label={label}\n position='right'\n size={labelSize || defaultLabelSize}\n weight={labelWeight}\n className={labelClassName}\n isClickable={isLabelClickable}\n onClick={handleLabelClick}\n htmlFor={switchId}\n />\n )}\n </div>\n </div>\n );\n}\n",".tabsContainer {\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.tabList {\n\tdisplay: flex;\n\tjustify-content: space-between; /* 탭은 왼쪽, 버튼은 오른쪽 */\n\talign-items: center; /* 높이 정렬 */\n\tflex: 0 0 auto; /* 고정 높이 */\n\tposition: sticky;\n\ttop: 0;\n\tz-index: 10;\n\tbackground-color: var(--krds-color-gray-0);\n}\n\n.tabListInner {\n\tdisplay: flex;\n\talign-items: center;\n\tflex: 1;\n}\n\n.sideButtonContainer {\n\tdisplay: flex;\n\talign-items: center;\n\tmargin-left: auto; /* 왼쪽 탭과 최대한 떨어지게 */\n}\n\n.tabContentContainer {\n\tflex: 1 1 auto; /* 콘텐츠 영역은 남은 공간을 모두 사용 */\n\tposition: relative;\n}\n\n.tabpannelLayout {\n\twidth: 100%;\n\theight: 100%;\n}\n\n.hidden {\n\tdisplay: none;\n}\n\n.srOnly {\n\tposition: absolute;\n\twidth: 1px;\n\theight: 1px;\n\tpadding: 0;\n\tmargin: -1px;\n\toverflow: hidden;\n\tclip: rect(0, 0, 0, 0);\n\twhite-space: nowrap;\n\tborder: 0;\n}\n\n.tabButton {\n\tpadding: 12px 24px;\n\ttransition: all 0.4s ease-in-out;\n\toutline: none;\n\tborder: none;\n\tbackground: none;\n}\n\n.tabButton:hover {\n\tbackground-color: var(--krds-color-primary-5);\n}\n\n.tabButtonSelected {\n\tborder-bottom: 4px solid var(--krds-color-secondary-70);\n}\n\n.tabButtonUnselected {\n\tborder-bottom: none;\n}\n\n.tabLabel {\n\tcursor: pointer;\n\tfont-size: 1.188rem;\n\tfont-weight: 400;\n\tcolor: var(--krds-color-gray-70);\n\tline-height: 1.875rem;\n}\n\n.tabButtonSelected .tabLabel {\n\tfont-weight: 700;\n}\n\n/* Variant: underline */\n.variantUnderline {\n\tborder-bottom: 1px solid var(--krds-color-gray-40);\n}\n\n/* Variant: plain */\n.variantPlain {\n\tborder-bottom: none;\n}\n\n/* Variant: box */\n.variantBox {\n\tdisplay: flex;\n\tborder: none;\n\tgap: 0;\n}\n\n.variantBox .tabButton {\n\tborder: 1px solid var(--krds-color-gray-30);\n\tbackground-color: transparent;\n\tpadding: 0 1rem !important;\n}\n\n.variantBox .tabButton:hover:not(.tabButtonSelected) {\n\tbackground-color: var(--krds-color-secondary-5);\n}\n\n.variantBox .tabLabel {\n\tfont-size: 1.063rem;\n}\n\n.variantBox .tabButtonSelected {\n\tbackground-color: var(--krds-color-secondary-70);\n\tcolor: var(--krds-color-gray-0);\n}\n\n.variantBox .tabButtonSelected .tabLabel {\n\tcolor: var(--krds-color-gray-0);\n\tfont-weight: 600;\n}\n\n.variantBox .tabButton:first-child {\n\tborder-radius: 6px 0 0 6px !important;\n}\n\n.variantBox .tabButton:not(:first-child):not(:last-child) {\n\tborder-left: none;\n\tborder-radius: 0;\n}\n\n.variantBox .tabButton:last-child {\n\tborder-left: none;\n\tborder-radius: 0 6px 6px 0 !important;\n}\n\n/* Variant: fill */\n.variantFill {\n\tdisplay: flex;\n\tborder: none;\n\tgap: 0;\n\twidth: 100%;\n}\n\n.variantFill .tabButton {\n\tflex: 1;\n\tborder: 1px solid var(--krds-color-gray-30);\n\tborder-radius: 8px 8px 0 0;\n\tbackground-color: transparent;\n\twidth: 100%;\n\tpadding: 0 1rem !important;\n}\n\n.variantFill .tabLabel {\n\tfont-size: 1.063rem;\n}\n\n.variantFill .tabButton:hover:not(.tabButtonSelected) {\n\tbackground-color: var(--krds-color-secondary-5);\n}\n\n.variantFill .tabButtonSelected {\n\tbackground-color: var(--krds-color-secondary-70);\n\tcolor: var(--krds-color-gray-0);\n}\n\n.variantFill .tabButtonSelected .tabLabel {\n\tcolor: var(--krds-color-gray-0);\n\tfont-weight: 600;\n}\n\n.variantFill .tabButton:first-child {\n\tborder-radius: 6px 0 0 6px !important;\n}\n\n.variantFill .tabButton:not(:first-child):not(:last-child) {\n\tborder-left: none;\n\tborder-radius: 0;\n}\n\n.variantFill .tabButton:last-child {\n\tborder-left: none;\n\tborder-radius: 0 6px 6px 0 !important;\n}\n","import { Button } from '../Button';\nimport { Label } from '../Label';\nimport * as style from './Tab.module.css';\nimport type { InternalTabProps } from './Tab.type';\n\n// ▶️ 각 개별 탭을 렌더링하는 컴포넌트\nexport const Tab = ({\n label,\n isSelected,\n onClick,\n onKeyDown,\n id,\n panelId,\n disabled,\n tabIndex,\n}: InternalTabProps) => {\n return (\n <Button\n role='tab'\n aria-selected={isSelected} // 선택 여부\n aria-controls={panelId} // 연결된 패널 ID\n id={id}\n onClick={onClick}\n onKeyDown={onKeyDown}\n tabIndex={tabIndex}\n variant='text'\n width={'fit-content'} \n size='m'\n rounded='0'\n disabled={disabled}\n className={`${style.tabButton} ${\n isSelected ? style.tabButtonSelected : style.tabButtonUnselected\n }`}>\n {/* 탭 라벨 */}\n <Label id={`tab-label-${label}`} className={style.tabLabel} size='l' weight='bold'>\n {label}\n </Label>\n {isSelected && <span className={style.srOnly}>선택됨</span>}\n </Button>\n );\n};\n","import { ReactNode } from 'react';\nimport * as style from './Tab.module.css';\n\ninterface TabPanelProps {\n children: ReactNode;\n id: string;\n tabId: string;\n isSelected: boolean;\n}\n\nexport function TabPanel({ children, id, tabId, isSelected }: TabPanelProps) {\n return (\n <div\n role='tabpanel'\n id={id}\n aria-labelledby={tabId} // 연결된 탭 ID\n className={`${isSelected ? '' : style.hidden} ${style.tabpannelLayout}`} // 선택된 탭만 표시\n >\n {children}\n </div>\n );\n}\n","import { type KeyboardEvent, useState } from 'react';\nimport { Tab } from './Tab';\nimport * as style from './Tab.module.css';\nimport type { TabsProps } from './Tab.type';\nimport { TabPanel } from './TabPanel';\n\n// ▶️ 메인 Tabs 컴포넌트\nexport const Tabs = ({\n tabs,\n variant = 'underline',\n selectedIndex,\n onChange,\n width = '100%',\n tabHeight = '48px',\n gap = 0,\n sideButton,\n overflowX,\n overflowY,\n tabListPosition = 'sticky',\n}: TabsProps) => {\n // 내부에서 탭 인덱스를 관리할 상태\n const [internalIndex, setInternalIndex] = useState(0);\n\n // 제어형인지 판별\n const isControlled = selectedIndex !== undefined;\n\n // 현재 선택된 인덱스\n const currentIndex = isControlled ? selectedIndex : internalIndex;\n\n // 탭 클릭\n const handleTabChange = (index: number) => {\n if (!isControlled) {\n setInternalIndex(index);\n }\n onChange?.(index); // 외부 콜백 호출\n };\n\n // 방향키 네비게이션 핸들러\n const handleKeyDown = (event: KeyboardEvent, index: number) => {\n const enabledTabs = tabs.map((tab, idx) => ({ ...tab, idx })).filter((tab) => !tab.disabled);\n const currentEnabledIndex = enabledTabs.findIndex((tab) => tab.idx === index);\n let newIndex: number | null = null;\n\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowUp': {\n event.preventDefault();\n const prevIndex =\n currentEnabledIndex === 0 ? enabledTabs.length - 1 : currentEnabledIndex - 1;\n newIndex = enabledTabs[prevIndex].idx;\n break;\n }\n case 'ArrowRight':\n case 'ArrowDown': {\n event.preventDefault();\n const nextIndex =\n currentEnabledIndex === enabledTabs.length - 1 ? 0 : currentEnabledIndex + 1;\n newIndex = enabledTabs[nextIndex].idx;\n break;\n }\n case 'Home': {\n event.preventDefault();\n newIndex = enabledTabs[0].idx;\n break;\n }\n case 'End': {\n event.preventDefault();\n newIndex = enabledTabs[enabledTabs.length - 1].idx;\n break;\n }\n }\n\n if (newIndex !== null) {\n handleTabChange(newIndex);\n // 포커스 이동\n const tabElement = document.getElementById(`tab-${tabs[newIndex].id}`);\n tabElement?.focus();\n }\n };\n\n return (\n <div className={style.tabsContainer} style={{ width, gap }}>\n {/* 탭 리스트 영역 - 상단 고정 */}\n <div\n role='tablist'\n aria-label='탭 목록'\n style={{ height: tabHeight }}\n className={`${style.tabList} ${style[`variant${variant[0].toUpperCase()}${variant.slice(1)}`]} ${tabListPosition}`}>\n <div className={style.tabListInner}>\n {tabs.map((tab, index) => (\n <Tab\n key={tab.id}\n label={tab.label}\n isSelected={index === currentIndex}\n onClick={() => handleTabChange(index)}\n onKeyDown={(e) => handleKeyDown(e, index)}\n id={`tab-${tab.id}`}\n panelId={`panel-${tab.id}`}\n disabled={tab.disabled}\n />\n ))}\n </div>\n {sideButton && <div className={style.sideButtonContainer}>{sideButton}</div>}\n </div>\n\n {/* 탭 패널 영역 - 스크롤 가능 */}\n <div\n className={style.tabContentContainer}\n style={{\n overflowX: overflowX ?? 'hidden',\n overflowY: overflowY ?? 'auto',\n }}>\n {tabs.map((tab, index) => {\n const pannel =\n typeof tab.content === 'function' ? (\n index === currentIndex ? (\n <TabPanel\n key={tab.id}\n id={`panel-${tab.id}`}\n tabId={`tab-${tab.id}`}\n isSelected={true}>\n {typeof tab.content === 'function' ? tab.content() : tab.content}\n </TabPanel>\n ) : null\n ) : (\n <TabPanel\n key={tab.id}\n id={`panel-${tab.id}`}\n tabId={`tab-${tab.id}`}\n isSelected={index === currentIndex}>\n {tab.content}\n </TabPanel>\n );\n\n return pannel;\n })}\n </div>\n </div>\n );\n};\n",".tag {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twhite-space: nowrap;\n\tborder-radius: 9999px;\n\tbox-sizing: border-box;\n}\n\n.textSmall {\n\tfont-size: 0.813rem;\n}\n\n.textMedium {\n\tfont-size: 1.063rem;\n}\n\n.textLarge {\n\tfont-size: 1.063rem;\n}\n\n.normalWeight {\n\tfont-weight: 400 !important;\n}\n\n.text {\n\tbackground: transparent;\n\tborder: 1px solid var(--krds-color-gray-20);\n\tcolor: var(--krds-color-gray-70);\n}\n\n.removableDefault {\n\tbackground: transparent;\n\tborder: 1px solid var(--krds-color-gray-20);\n\tcolor: var(--krds-color-gray-70);\n}\n\n.removableHover {\n\tbackground-color: var(--krds-color-secondary-5);\n\tcolor: var(--krds-color-gray-70);\n}\n\n.removablePressed {\n\tbackground-color: var(--krds-color-secondary-10);\n\tcolor: var(--krds-color-gray-70);\n}\n\n.cursorPointer {\n\tcursor: pointer;\n}\n\n.cursorNotAllowed {\n\tcursor: not-allowed;\n}\n\n.cursorDefault {\n\tcursor: default;\n}\n\n.deleteButton {\n\twidth: 16px;\n\theight: 16px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: 0;\n\tbackground: none;\n\tborder: none;\n\tcursor: pointer;\n}\n\n.s {\n\theight: 24px;\n\tpadding: 6px;\n\tgap: 2px;\n}\n\n.removable {\n\tbackground-color: var(--krds-color-gray-0);\n\tborder: 1px solid var(--krds-color-gray-20);\n}\n\n.removable:hover {\n\tbackground-color: var(--krds-color-secondary-5);\n\tborder-color: var(--krds-color-secondary-5);\n}\n\n.removable:active {\n\tbackground-color: var(--krds-color-secondary-10);\n\tborder-color: var(--krds-color-secondary-10);\n}\n\n.s.text {\n\tmin-width: 43px;\n}\n\n.s.removable {\n\tmin-width: 53px;\n}\n\n.m {\n\theight: 32px;\n\tpadding: 6px 8px;\n\tgap: 2px;\n}\n\n.m.text {\n\tmin-width: 56px;\n}\n\n.m.removable {\n\tmin-width: 64px;\n}\n\n.l {\n\theight: 38px;\n\tpadding: 6px 12px;\n\tgap: 2px;\n}\n\n.l.text {\n\tmin-width: 64px;\n}\n\n.l.removable {\n\tmin-width: 72px;\n}\n","/** biome-ignore-all lint/a11y/noStaticElementInteractions: <explanation> */\n/** biome-ignore-all lint/a11y/useAriaPropsSupportedByRole: <explanation> */\nimport type React from 'react';\nimport type { KeyboardEvent, MouseEvent } from 'react';\nimport { Icon } from '../Icon';\nimport { Label } from '../Label/Label';\nimport * as style from './Tag.module.css';\nimport type { TagProps } from './Tag.type';\n\nexport const Tag: React.FC<TagProps> = ({\n label,\n size = 'm',\n variant = 'removable',\n disabled = false,\n onDelete,\n className = '',\n}) => {\n const isTextTag = variant === 'text';\n const showDelete = variant === 'removable' && !!onDelete;\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if ((event.key === 'Enter' || event.key === ' ') && !disabled) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n const handleDelete = (event: MouseEvent) => {\n if (!disabled && onDelete) onDelete(label);\n event.stopPropagation();\n };\n\n const handleDeleteKeyDown = (event: KeyboardEvent) => {\n if ((event.key === 'Enter' || event.key === ' ') && !disabled && onDelete) {\n event.preventDefault();\n event.stopPropagation();\n onDelete(label);\n }\n };\n const fontSizeClass =\n size === 's' ? style.textSmall : size === 'm' ? style.textMedium : style.textLarge;\n\n const sizeClass = style[size];\n const variantClass = isTextTag ? style.text : style.removable;\n const labelCursorClass = disabled || isTextTag ? style.cursorDefault : style.cursorPointer;\n const buttonCursorClass = disabled ? style.cursorNotAllowed : '';\n\n return (\n <div\n className={`${style.tag} ${sizeClass} ${variantClass} ${className}`}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={handleKeyDown}>\n <Label\n id={`tag-label-${label}`}\n weight='regular'\n className={`${fontSizeClass} ${style.normalWeight} ${labelCursorClass}`}\n color={disabled ? 'gray-50' : 'gray-90'}\n style={{ paddingBottom: 0 }}>\n {label}\n </Label>\n\n {showDelete && (\n <span\n className={`${style.deleteButton} ${buttonCursorClass}`}\n onClick={handleDelete}\n onKeyDown={handleDeleteKeyDown}>\n <Icon icon='DeleteIcon' size={16} viewBox='0 0 16 16' aria-label='태그 삭제' />\n </span>\n )}\n </div>\n );\n};\n","import type React from 'react';\nimport { forwardRef } from 'react';\nimport { getColor } from 'src/styles/color/color';\nimport { Label, StatusLabel } from '../index';\nimport * as styles from './TextArea.module.css';\nimport type { TextAreaProps } from './TextArea.type';\n\n/* eslint-disable no-undef */\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n (\n {\n id,\n title,\n titlePosition = 'vertical',\n gap = titlePosition === 'horizontal' ? '5%' : '10px',\n description,\n isValid = true,\n isRequired = false,\n error,\n info,\n placeholder,\n size = 'm',\n maxLength,\n width = '100%',\n height,\n minHeight,\n maxHeight,\n useCount = false,\n className = '',\n titleClassName = '',\n inputClassName = '',\n value = '',\n setValue = () => {},\n disabled = false,\n ...props\n },\n ref,\n ) => {\n const inputId = id;\n const errorId = `${inputId}-error`;\n const infoId = `${inputId}-info`;\n const checkIsValid = maxLength ? value.length <= maxLength : isValid;\n\n const sizeClass = size === 's' ? styles.sizeS : size === 'l' ? styles.sizeL : styles.sizeM;\n\n const showStatusLabel = !disabled && (error || info);\n const showCharCount = useCount && !!maxLength;\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n setValue(newValue);\n\n if (props.onChange) {\n props.onChange(e);\n }\n };\n\n return (\n <div\n className={`${styles.wrapper} ${titlePosition === 'horizontal' ? styles.horizontal : ''} ${className}`}\n style={{ width, gap }}>\n {title && (\n <Label\n size='s'\n id={inputId}\n className={titleClassName}\n required={isRequired}\n style={{ fontWeight: 400 }}>\n {title}\n </Label>\n )}\n {description && (\n <Label\n id={`${inputId}-description`}\n size='xs'\n style={{ color: getColor('gray-40'), fontWeight: 400 }}>\n {description}\n </Label>\n )}\n\n <div style={{ position: 'relative' }}>\n <textarea\n ref={ref}\n id={id}\n className={`\n ${styles.textarea} ${sizeClass} \n ${!checkIsValid && !disabled ? styles.error : styles.normal}\n ${disabled ? styles.textareaDisabled : ''}\n ${inputClassName}`}\n placeholder={placeholder}\n maxLength={maxLength}\n value={value}\n onChange={handleChange}\n style={{ height, minHeight, maxHeight }}\n disabled={disabled}\n {...props}\n />\n {(showStatusLabel || showCharCount) && (\n <StatusLabel\n value={value}\n disabled={disabled}\n isValid={checkIsValid}\n error={error}\n info={info}\n errorId={errorId}\n infoId={infoId}\n useCount={showCharCount}\n maxLength={maxLength}\n hasContent={!!(error || info || useCount)}\n />\n )}\n </div>\n </div>\n );\n },\n);\n","import { useEffect, useRef } from 'react';\n\nexport const usePopup = (setVisible: (visible: boolean) => void) => {\n const popupRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (popupRef.current && !popupRef.current.contains(e.target as Node)) {\n setVisible(false);\n }\n };\n window.addEventListener('click', handleClickOutside);\n return () => window.removeEventListener('click', handleClickOutside);\n }, []);\n\n return popupRef;\n};\n","import { useState } from 'react';\nimport { Button, Icon, Label } from 'src/components';\nimport { usePopup } from 'src/components/TimeSelector/usePopup';\nimport * as styles from './TimeSelector.module.css';\n\ninterface CustomTimeSelectorProps {\n options: string[];\n value: string;\n setValue: (value: string) => void;\n id: string;\n}\n\nexport function TimeSelectorInput({ options, value, setValue, id }: CustomTimeSelectorProps) {\n const [visible, setVisible] = useState<boolean>(false);\n const popupRef = usePopup(setVisible);\n\n return (\n <div className={styles.container} ref={popupRef}>\n <div className={styles.selector} onClick={() => setVisible((v) => !v)}>\n <Label label={value || '--'} weight={'bold'} size={'l'} id={id} />\n <div className={styles.iconWrapper}>\n <Icon icon={'ArrowDropDown'} size={20} viewBox={'0 0 16 16'} />\n </div>\n </div>\n {visible && (\n <div className={styles.popup}>\n {options.map((it) => (\n <Button\n key={it}\n variant={'text'}\n className={styles.fullWidth}\n onClick={() => {\n setValue(it);\n setVisible(false);\n }}>\n {it}\n </Button>\n ))}\n </div>\n )}\n </div>\n );\n}\n","import { useMemo, useState } from 'react';\nimport { Button, Label, TimeSelectorPopupProps } from 'src/components';\nimport * as styles from './TimeSelector.module.css';\nimport { TimeSelectorInput } from './TimeSelectorInput';\n\nexport const HOUR_OPTIONS = Array.from({ length: 24 }).map((_it, index) =>\n `${index}`.padStart(2, '0'),\n);\nexport const MINUTE_OPTIONS = Array.from({ length: 60 }).map((_it, index) =>\n `${index}`.padStart(2, '0'),\n);\n\nexport function TimeSelectorPopup({ time, onUpdateTime, setVisible }: TimeSelectorPopupProps) {\n const [hour, setHour] = useState(time?.split(':')[0] ?? '');\n const [minute, setMinute] = useState(time?.split(':')[1] ?? '');\n const meridiem = useMemo(() => (hour ? (Number(hour) >= 12 ? 'PM' : 'AM') : ''), [hour]);\n\n const onChangeMeridiem = (meridiem: string) => {\n if (meridiem === 'AM') {\n setHour((hour ? Number(hour) - 12 : '00').toString().padStart(2, '0'));\n return;\n }\n if (meridiem === 'PM') {\n setHour((hour ? Number(hour) + 12 : '12').toString().padStart(2, '0'));\n return;\n }\n };\n\n return (\n <div className={styles.popupContainer}>\n <div className={styles.timeSelectorWrapper}>\n <TimeSelectorInput\n options={HOUR_OPTIONS}\n value={hour}\n setValue={setHour}\n id={'time-selector'}\n />\n <Label label={':'} weight={'bold'} size={'l'} id={'division'} />\n <TimeSelectorInput\n options={MINUTE_OPTIONS}\n value={minute}\n setValue={setMinute}\n id={'time-selector'}\n />\n <div className={styles.meridiemWrapper}>\n <Button\n onClick={() => onChangeMeridiem('AM')}\n variant={'secondary'}\n width={44}\n height={23}\n className={meridiem === 'AM' ? styles.meridiemButton : styles.disabledMeridiemButton}\n size={'xs'}\n aria-readonly={true}\n disabled={meridiem === 'AM'}>\n AM\n </Button>\n <Button\n onClick={() => onChangeMeridiem('PM')}\n variant={'secondary'}\n className={meridiem === 'PM' ? styles.meridiemButton : styles.disabledMeridiemButton}\n width={44}\n height={23}\n size={'xs'}\n disabled={meridiem === 'PM'}>\n PM\n </Button>\n </div>\n </div>\n <div className={styles.popupFooter}>\n <Button size={'m'} variant={'outline'} width={64} onClick={() => setVisible(false)}>\n 취소\n </Button>\n <Button\n size={'m'}\n width={64}\n onClick={() => {\n onUpdateTime(hour, minute);\n setVisible(false);\n }}>\n 선택\n </Button>\n </div>\n </div>\n );\n}\n","import { useMemo, useState } from 'react';\nimport { Icon, TextInput } from 'src/components';\nimport { TimeSelectorProps } from 'src/components/TimeSelector/TimeSelector.type';\nimport { TimeSelectorPopup } from 'src/components/TimeSelector/TimeSelectorPopup';\nimport * as styles from './TimeSelector.module.css';\n\nexport function TimeSelector({\n value,\n onChange,\n height,\n useAP = false,\n placeholder = '--:-- --',\n width = '100%',\n}: TimeSelectorProps) {\n const [visible, setVisible] = useState(false);\n const timeText = useMemo(() => {\n if (value) {\n const h = value.split(':')[0];\n const m = value.split(':')[1];\n const meridiem = h ? (Number(h) >= 12 ? 'PM' : 'AM') : '--';\n return `${h}:${m} ${meridiem}`;\n }\n return placeholder;\n }, [value, placeholder]);\n\n const onUpdateTime = (h: string, m: string) => {\n const time = `${h || '--'}:${m || '--'}`;\n if (useAP) {\n const meridiem = Number(h) >= 12 ? 'PM' : 'AM';\n onChange(`${time} ${meridiem}`);\n return;\n }\n onChange(time);\n };\n\n return (\n <div className={styles.container}>\n <TextInput\n className={styles.timeInput}\n id={'time-selector'}\n width={width}\n icon={<Icon icon={'Time'} />}\n useIcon\n height={height}\n iconPosition={'right'}\n value={timeText}\n readOnly\n onFocus={() => setVisible(true)}\n />\n {visible && (\n <TimeSelectorPopup\n visible={visible}\n setVisible={setVisible}\n time={value}\n onUpdateTime={onUpdateTime}\n />\n )}\n </div>\n );\n}\n",".title {\n\tmargin: 0;\n}\n\n.size_xxl {\n\tfont-size: 2.5rem;\n}\n.size_xl {\n\tfont-size: 2.125rem;\n}\n.size_l {\n\tfont-size: 1.75rem;\n}\n.size_m {\n\tfont-size: 1.5rem;\n}\n.size_s {\n\tfont-size: 1.25rem;\n}\n.size_xs {\n\tfont-size: 1rem;\n}\n.size_1 {\n\tfont-size: 19px;\n\tline-height: 30px;\n}\n.size_2 {\n\tfont-size: 17px;\n\tline-height: 26px;\n}\n\n@media (max-width: 600px) {\n\t.size_xxl {\n\t\tfont-size: 2rem;\n\t}\n\t.size_xl {\n\t\tfont-size: 1.5rem;\n\t}\n\t.size_l {\n\t\tfont-size: 1.25rem;\n\t}\n\t.size_m {\n\t\tfont-size: 1.125rem;\n\t}\n\t.size_s {\n\t\tfont-size: 1rem;\n\t}\n\t.size_xs {\n\t\tfont-size: 0.875rem;\n\t}\n}\n","import type React from 'react';\nimport { colors, getColor } from 'src/styles/color/color';\nimport * as styles from './Title.module.css';\nimport type { TitleProps } from './Title.type';\n\n/**\n * Title 컴포넌트 😸\n * (기본값: 'h3')\n * @param props - Title 컴포넌트의 props\n * @param size - 제목의 크기 ('1' | '2' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl')\n * @param color - 제목의 색상\n * @param children - 제목 내부에 렌더링할 내용\n * @param className - 추가로 적용할 클래스 이름\n * @param weight - 폰트 굵기 ('bold' | 'semi-bold' | 'medium' | 'regular')\n */\n\nexport function Title<E extends React.ElementType = 'h3'>({\n size = 1,\n color = 'gray-90',\n children,\n className = '',\n weight = 'bold',\n ...props\n}: TitleProps<E>) {\n const titleClass = styles.title;\n const sizeClass = styles[`size_${size}`];\n const fontWeifht = `font-dak-${weight}`;\n\n const colorStyle: React.CSSProperties = {};\n if (color in colors) {\n colorStyle.color = getColor(color as keyof typeof colors);\n } else {\n colorStyle.color = color;\n }\n\n return (\n <h3\n className={`${titleClass} ${sizeClass} ${fontWeifht} ${className}`.trim()}\n style={colorStyle}\n {...props}>\n {children}\n </h3>\n );\n}\n","import { ReactNode } from 'react';\nimport { Icon } from 'src/components';\nimport { customEventService } from 'src/hooks';\nimport type { ToastBarEventListenerType, ToastBarProps } from '../ToastBar.type';\nimport { uniqueId } from 'lodash-es';\n\nconst END_OF_DAY = Date.parse('9999-12-31');\n\nexport enum TOASTBAR_TYPE {\n DANGER = 'danger',\n SUCCEED = 'succeed',\n WARNING = 'warning',\n INFO = 'info',\n}\n\ntype ToastbarOptionProps = {\n [i in TOASTBAR_TYPE]: {\n icon?: ReactNode;\n closeDelay: number;\n type: 'danger' | 'succeed' | 'warning' | 'info';\n };\n};\n\nconst TOASTBAR_OPTIONS: ToastbarOptionProps = {\n danger: {\n icon: <Icon icon='SystemDanger' size={20} primary='#DE3412' />,\n closeDelay: 3000,\n type: 'danger',\n },\n succeed: {\n icon: <Icon icon='SystemSuccess' size={20} primary='#007A4E' />,\n closeDelay: 3000,\n type: 'succeed',\n },\n warning: {\n icon: <Icon icon='SystemWarning' size={20} primary='#9E6A00' />,\n closeDelay: 3000,\n type: 'warning',\n },\n info: {\n icon: <Icon icon='SystemInfo' size={20} primary='#16408D' />,\n closeDelay: 3000,\n type: 'info',\n },\n};\n\nconst newToastBar = (\n text: ReactNode,\n type: TOASTBAR_TYPE,\n title?: string,\n id?: string,\n): ToastBarProps => {\n const uid = id ?? uniqueId('toast-bar-');\n\n const autoCloseTimestamp = TOASTBAR_OPTIONS[type].closeDelay\n ? Date.now() + TOASTBAR_OPTIONS[type].closeDelay\n : END_OF_DAY;\n\n return {\n text,\n id: uid,\n autoCloseTimestamp,\n icon: TOASTBAR_OPTIONS[type].icon,\n closeDelay: TOASTBAR_OPTIONS[type].closeDelay,\n title,\n type: TOASTBAR_OPTIONS[type].type,\n };\n};\n\nexport const toastbarService = {\n dangerMsg(text: ReactNode, title?: string, id?: string) {\n const uid = id ?? uniqueId('danger-toast-bar-');\n customEventService.dispatch<ToastBarEventListenerType, ToastBarProps>(\n '[toastbar] show dangerMsg',\n { detail: newToastBar(text, TOASTBAR_TYPE.DANGER, title, id) },\n );\n return uid;\n },\n\n succeedMsg(text: ReactNode, title?: string, id?: string) {\n const uid = id ?? uniqueId('succeed-toast-bar-');\n customEventService.dispatch<ToastBarEventListenerType, ToastBarProps>(\n '[toastbar] show succeedMsg',\n { detail: newToastBar(text, TOASTBAR_TYPE.SUCCEED, title, id) },\n );\n return uid;\n },\n\n warningMsg(text: ReactNode, title?: string, id?: string) {\n const uid = id ?? uniqueId('warning-toast-bar-');\n customEventService.dispatch<ToastBarEventListenerType, ToastBarProps>(\n '[toastbar] show warningMsg',\n { detail: newToastBar(text, TOASTBAR_TYPE.WARNING, title, id) },\n );\n return uid;\n },\n\n infoMsg(text: ReactNode, title?: string, id?: string) {\n const uid = id ?? uniqueId('info-toast-bar-');\n customEventService.dispatch<ToastBarEventListenerType, ToastBarProps>(\n '[toastbar] show infoMsg',\n { detail: newToastBar(text, TOASTBAR_TYPE.INFO, title, id) },\n );\n return uid;\n },\n\n close(id: string) {\n customEventService.dispatch<ToastBarEventListenerType, string>('[toastbar] close Toast', {\n detail: id,\n });\n },\n closeAll() {\n customEventService.dispatch<ToastBarEventListenerType, void>('[toastbar] close all toast');\n },\n};\n","/* px 단위 변환 */\n.toastBar {\n\tborder-radius: 8px;\n\tdisplay: flex;\n\tpadding: 16px;\n\tgap: 8px;\n\talign-items: flex-start;\n\twidth: 720px;\n\tmax-height: 118px;\n}\n\n.toastBar:focus {\n\toutline: 3px solid var(--krds-color-information-60);\n\toutline-offset: 2px;\n}\n\n.toastBar.danger:focus {\n\toutline-color: var(--krds-color-danger-60);\n}\n\n.toastBar.warning:focus {\n\toutline-color: var(--krds-color-warning-60);\n}\n\n.toastBar.success:focus {\n\toutline-color: var(--krds-color-success-60);\n}\n\n@media screen and (max-width: 768px) {\n\t.toastBar {\n\t\twidth: 329px;\n\t\tmax-height: 162px;\n\t}\n}\n\n.description {\n\tfont-weight: 400;\n\tfont-size: 17px;\n\tline-height: 26px;\n\tcolor: var(--krds-color-gray-90);\n}\n\n.descriptionIndented {\n\tfont-weight: 400;\n\tfont-size: 17px;\n\tline-height: 26px;\n\tcolor: var(--krds-color-gray-90);\n}\n\n@media screen and (max-width: 768px) {\n\t.descriptionIndented {\n\t\tfont-size: 15px;\n\t}\n}\n\n.titleRow {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n}\n\n.title {\n\tfont-weight: 700;\n\tfont-size: 17px;\n\tline-height: 26px;\n}\n\n.title_danger {\n\tcolor: var(--krds-color-danger-60);\n}\n\n.title_success {\n\tcolor: var(--krds-color-success-60);\n}\n\n.title_warning {\n\tcolor: var(--krds-color-warning-60);\n}\n\n.title_information {\n\tcolor: var(--krds-color-information-60);\n}\n\n.danger {\n\tbackground-color: var(--krds-color-danger-5);\n\tborder: 1px solid var(--krds-color-danger-10);\n\tcolor: var(--krds-color-danger-60);\n}\n\n.warning {\n\tbackground-color: var(--krds-color-warning-5);\n\tborder: 1px solid var(--krds-color-warning-10);\n\tcolor: var(--krds-color-warning-60);\n}\n\n.success {\n\tbackground-color: var(--krds-color-success-5);\n\tborder: 1px solid var(--krds-color-success-10);\n\tcolor: var(--krds-color-success-60);\n}\n\n.information {\n\tbackground-color: var(--krds-color-information-5);\n\tborder: 1px solid var(--krds-color-information-10);\n\tcolor: var(--krds-color-information-60);\n}\n\n.content {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n}\n\n.icon {\n\tmargin-top: 2px;\n}\n\n.toastBarWrapper {\n\tposition: fixed;\n\ttop: 50px;\n\tright: 16px;\n\tdisplay: grid;\n\tjustify-content: flex-end;\n\tflex-direction: column-reverse;\n\tgap: 10px;\n\tpointer-events: none;\n\tz-index: 2500;\n\tmin-width: 100vw;\n}\n","import { useEffect, useRef } from 'react';\nimport { useAnimationToggle } from '../../hooks/use-animation-toggle';\nimport * as styles from './ToastBar.module.css';\nimport type { ToastBarProps } from './ToastBar.type';\n\nconst TYPE_CLASS_MAP: Record<ToastBarProps['type'], string> = {\n succeed: styles.success,\n danger: styles.danger,\n warning: styles.warning,\n info: styles.information,\n};\n\nconst TYPE_LABEL_MAP: Record<ToastBarProps['type'], string> = {\n succeed: '성공',\n danger: '오류',\n warning: '경고',\n info: '정보',\n};\n\nconst TYPE_ARIA_LIVE_MAP: Record<ToastBarProps['type'], 'assertive' | 'polite'> = {\n succeed: 'polite',\n danger: 'assertive',\n warning: 'assertive',\n info: 'polite',\n};\n\nexport const ToastBar = ({\n text,\n icon,\n closeDelay,\n autoCloseTimestamp,\n style,\n id,\n title,\n type,\n}: ToastBarProps) => {\n const dissolveTimeout = useRef<ReturnType<typeof setTimeout>>(null);\n const { mounted, trigger, onShow, onHide } = useAnimationToggle({\n transitionDuration: closeDelay || 0 + 1000,\n });\n\n useEffect(() => {\n onShow();\n }, [onShow]);\n\n useEffect(() => {\n if (!dissolveTimeout.current) {\n return;\n }\n if (autoCloseTimestamp === -1) {\n onHide();\n clearTimeout(dissolveTimeout.current);\n }\n }, [autoCloseTimestamp]);\n\n useEffect(() => {\n if (closeDelay) {\n dissolveTimeout.current = setTimeout(onHide, closeDelay);\n }\n return () => {\n if (!dissolveTimeout.current) {\n return;\n }\n clearTimeout(dissolveTimeout.current);\n };\n }, [closeDelay, onHide]);\n\n if (!mounted) return null;\n\n const typeClass = TYPE_CLASS_MAP[type] ?? '';\n const titleColorClass = styles[`title_${type}`] ?? '';\n const ariaLive = TYPE_ARIA_LIVE_MAP[type];\n const typeLabel = TYPE_LABEL_MAP[type];\n\n return (\n mounted && (\n // biome-ignore lint/a11y/useAriaPropsSupportedByRole: 토스트 알림의 타입을 스크린 리더에 명확히 전달하기 위해 aria-label 필요\n <div\n id={id}\n className={`${styles.toastBar} ${typeClass}`}\n role={'alert'}\n aria-live={ariaLive}\n aria-atomic='true'\n aria-label={`${typeLabel} 알림`}\n aria-labelledby={`${typeLabel} 알림`}\n aria-describedby={title}\n tabIndex={0}\n style={{\n ...style,\n opacity: trigger,\n transform: trigger ? undefined : 'translate(0,30px)',\n }}>\n {icon && (\n <div className={styles.icon} aria-hidden='true'>\n {icon}\n </div>\n )}\n <div className={styles.content}>\n {title && (\n <div className={styles.titleRow}>\n <span className={`${styles.title} ${titleColorClass}`}>{title}</span>\n </div>\n )}\n <div className={title ? styles.descriptionIndented : styles.description}>{text}</div>\n </div>\n </div>\n )\n );\n};\n","import type { Dispatch, SetStateAction } from 'react';\nimport type { ToastBarProps } from '../ToastBar.type';\n\ninterface UseHandleToastBarListProps {\n toastbars: ToastBarProps[];\n setToastbars: Dispatch<SetStateAction<ToastBarProps[]>>;\n}\n\nexport const useHandleToastBarList = ({ toastbars, setToastbars }: UseHandleToastBarListProps) => {\n const closeByIdToastBar = (id: string) => {\n const updatedToastBar = toastbars.map((toastbar) => {\n if (toastbar.id === id) {\n return { ...toastbar, autoCloseTimestamp: -1 };\n }\n return toastbar;\n });\n\n setToastbars(toastbars.concat(updatedToastBar));\n };\n\n const closeAllToastBar = () => {\n const updatedToastBar = toastbars.map((toastbar) => {\n return { ...toastbar, autoCloseTimestamp: -1 };\n });\n\n setToastbars(updatedToastBar);\n };\n\n return {\n closeByIdToastBar,\n closeAllToastBar,\n };\n};\n","import { Dispatch, SetStateAction } from 'react';\nimport { useCustomEventListener } from '../../../hooks';\nimport { ToastBarEventListenerType, ToastBarProps } from '../ToastBar.type';\nimport { useHandleToastBarList } from './use-handle-toast-bar-list';\n\ninterface UseToastBarCustomEventListenerProps {\n toastbars: ToastBarProps[];\n setToastbars: Dispatch<SetStateAction<ToastBarProps[]>>;\n}\n\nexport const useToastBarCustomEventListener = ({\n toastbars,\n setToastbars,\n}: UseToastBarCustomEventListenerProps) => {\n const { closeByIdToastBar, closeAllToastBar } = useHandleToastBarList({\n toastbars,\n setToastbars,\n });\n\n const addCb = (newItem: ToastBarProps) => setToastbars((prev) => prev.concat(newItem));\n\n /* toastbar 이벤트감지 핸들러 **/\n useCustomEventListener<ToastBarEventListenerType, ToastBarProps>({\n eventType: '[toastbar] show dangerMsg',\n handler: addCb,\n depths: [addCb],\n });\n\n useCustomEventListener<ToastBarEventListenerType, ToastBarProps>({\n eventType: '[toastbar] show succeedMsg',\n handler: addCb,\n depths: [addCb],\n });\n\n useCustomEventListener<ToastBarEventListenerType, ToastBarProps>({\n eventType: '[toastbar] show warningMsg',\n handler: addCb,\n depths: [addCb],\n });\n\n useCustomEventListener<ToastBarEventListenerType, ToastBarProps>({\n eventType: '[toastbar] show infoMsg',\n handler: addCb,\n depths: [addCb],\n });\n\n useCustomEventListener<ToastBarEventListenerType, string>({\n eventType: '[toastbar] close Toast',\n handler: closeByIdToastBar,\n depths: [closeByIdToastBar],\n });\n\n useCustomEventListener<ToastBarEventListenerType, void>({\n eventType: '[toastbar] close all toast',\n handler: closeAllToastBar,\n depths: [closeAllToastBar],\n });\n};\n","import { useState, useRef, useEffect } from 'react';\nimport { useToastBarCustomEventListener } from './utils';\nimport { ToastBar } from './ToastBar';\nimport * as styles from './ToastBar.module.css';\nimport type { ToastBarProps } from './ToastBar.type';\n\nexport const ToastBarManager = () => {\n const [toastbars, setToastbars] = useState<ToastBarProps[]>([]);\n const previousLengthRef = useRef(toastbars.length);\n\n /* toastBar Event 들을 감지하는 훅스 **/\n useToastBarCustomEventListener({ toastbars, setToastbars });\n\n // 새 토스트가 추가되었을 때 최신 토스트에 포커스\n useEffect(() => {\n if (toastbars.length > previousLengthRef.current) {\n const latestToast = toastbars[toastbars.length - 1];\n // DOM 업데이트 후 포커스 이동\n setTimeout(() => {\n const toastElement = document.getElementById(latestToast.id);\n if (toastElement) {\n toastElement.focus();\n }\n }, 100);\n }\n previousLengthRef.current = toastbars.length;\n }, [toastbars]);\n\n return (\n <div className={styles.toastBarWrapper}>\n {toastbars.map((toastBarProps) => (\n <ToastBar\n key={toastBarProps.id}\n style={{\n transition: 'all 300ms ease',\n }}\n {...toastBarProps}\n />\n ))}\n </div>\n );\n};\n","import { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Icon } from 'src/components';\nimport type { DrawerProps } from 'src/components/Drawer/Drawer.type';\nimport * as styles from './Drawer.module.css';\n\nexport function Drawer({\n open,\n setOpen,\n position = 'bottom',\n parentId = 'app',\n children,\n title,\n className,\n}: DrawerProps) {\n const [closing, setClosing] = useState(true);\n const appContainer = document.getElementById(parentId);\n useEffect(() => {\n if (appContainer) {\n appContainer.style.maxWidth = open ? '100dvw' : 'initial';\n appContainer.style.maxHeight = open ? '100dvh' : 'initial';\n appContainer.style.overflow = open ? 'hidden' : 'initial';\n }\n setTimeout(() => setClosing(!open), 230);\n }, [open]);\n\n if (!appContainer) return null;\n return (\n <>\n {(open || !closing) &&\n createPortal(\n <div className={styles.overlay}>\n <div\n className={[styles.contentBox, className].join(' ')}\n style={{\n transition: 'all 0.3s ease-in-out',\n ...(position === 'bottom' && {\n transform: open && !closing ? 'translateY(0)' : 'translateY(100%)',\n }),\n ...(position === 'top' && {\n transform: open && !closing ? 'translateY(0)' : 'translateY(-100%)',\n }),\n ...(position === 'left' && {\n transform: open && !closing ? 'translateX(0)' : 'translateX(-100%)',\n }),\n ...(position === 'right' && {\n transform: open && !closing ? 'translateX(0)' : 'translateX(100%)',\n }),\n [position]: '-12px',\n [`padding-${position}`]: '12px',\n width: ['top', 'bottom'].includes(position) ? '100%' : 'auto',\n height: ['left', 'right'].includes(position) ? '100%' : 'auto',\n }}>\n <div className={styles.titleWrapper}>\n {title && <h2 className={styles.title}>{title}</h2>}\n <button\n type={'button'}\n onClick={() => {\n setOpen(false);\n if (appContainer) {\n appContainer.style.maxWidth = 'initial';\n appContainer.style.maxHeight = 'initial';\n appContainer.style.overflow = 'initial';\n }\n }}>\n <Icon icon='Close' size={20} />\n </button>\n </div>\n <div>{children}</div>\n </div>\n </div>,\n appContainer,\n )}\n </>\n );\n}\n"]}
|