@bestow-ui/react 1.8.0 → 2.0.0
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 +5 -6
- package/dist/{chunk-MP5VSIWQ.js → chunk-BDQ5IJIS.js} +2 -2
- package/dist/chunk-BDQ5IJIS.js.map +1 -0
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +50 -27
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +45 -38
- package/dist/index.d.ts +45 -38
- package/dist/shared.js +1 -1
- package/dist/shared.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-MP5VSIWQ.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme/contract.css.ts","../src/theme/createTheme.ts","../src/components/AddressInput/addressProviders.ts","../src/utils/date.ts","../src/components/DateRangePicker/presets.ts","../src/utils/focusField.ts","../src/components/Skeleton/Skeleton.tsx","../src/utils/cx.ts","../src/components/Skeleton/Skeleton.css.ts","../src/styles/visuallyHidden.css.ts","../src/components/Input/Input.css.ts"],"sourcesContent":["import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nexport var systemThemeClass = 'tkagtb2';\nexport var themeClass = {light:'tkagtb0',dark:'tkagtb1'};\nexport var vars = {space:{'0':'var(--bestow-space-0)','1':'var(--bestow-space-1)','2':'var(--bestow-space-2)','3':'var(--bestow-space-3)','4':'var(--bestow-space-4)','5':'var(--bestow-space-5)','6':'var(--bestow-space-6)','8':'var(--bestow-space-8)','10':'var(--bestow-space-10)','12':'var(--bestow-space-12)','16':'var(--bestow-space-16)'},radius:{none:'var(--bestow-radius-none)',sm:'var(--bestow-radius-sm)',md:'var(--bestow-radius-md)',lg:'var(--bestow-radius-lg)',xl:'var(--bestow-radius-xl)',full:'var(--bestow-radius-full)'},font:{family:{sans:'var(--bestow-font-family-sans)',mono:'var(--bestow-font-family-mono)'},size:{xs:'var(--bestow-font-size-xs)',sm:'var(--bestow-font-size-sm)',md:'var(--bestow-font-size-md)',lg:'var(--bestow-font-size-lg)',xl:'var(--bestow-font-size-xl)','2xl':'var(--bestow-font-size-2xl)','3xl':'var(--bestow-font-size-3xl)','4xl':'var(--bestow-font-size-4xl)'},weight:{regular:'var(--bestow-font-weight-regular)',medium:'var(--bestow-font-weight-medium)',semibold:'var(--bestow-font-weight-semibold)',bold:'var(--bestow-font-weight-bold)'},lineHeight:{tight:'var(--bestow-font-line-height-tight)',normal:'var(--bestow-font-line-height-normal)',relaxed:'var(--bestow-font-line-height-relaxed)'}},duration:{fast:'var(--bestow-duration-fast)',normal:'var(--bestow-duration-normal)',slow:'var(--bestow-duration-slow)'},zIndex:{overlay:'var(--bestow-z-index-overlay)',modal:'var(--bestow-z-index-modal)',dropdown:'var(--bestow-z-index-dropdown)',toast:'var(--bestow-z-index-toast)',tooltip:'var(--bestow-z-index-tooltip)'},color:{bg:{'default':'var(--bestow-color-bg-default)',subtle:'var(--bestow-color-bg-subtle)',muted:'var(--bestow-color-bg-muted)',inverse:'var(--bestow-color-bg-inverse)',overlay:'var(--bestow-color-bg-overlay)'},fg:{'default':'var(--bestow-color-fg-default)',muted:'var(--bestow-color-fg-muted)',subtle:'var(--bestow-color-fg-subtle)',inverse:'var(--bestow-color-fg-inverse)'},border:{'default':'var(--bestow-color-border-default)',strong:'var(--bestow-color-border-strong)',focus:'var(--bestow-color-border-focus)',input:'var(--bestow-color-border-input)',inputHover:'var(--bestow-color-border-input-hover)',control:'var(--bestow-color-border-control)'},primary:{solid:'var(--bestow-color-primary-solid)',solidHover:'var(--bestow-color-primary-solid-hover)',contrast:'var(--bestow-color-primary-contrast)',subtle:'var(--bestow-color-primary-subtle)',subtleHover:'var(--bestow-color-primary-subtle-hover)',text:'var(--bestow-color-primary-text)'},neutral:{solid:'var(--bestow-color-neutral-solid)',solidHover:'var(--bestow-color-neutral-solid-hover)',contrast:'var(--bestow-color-neutral-contrast)',subtle:'var(--bestow-color-neutral-subtle)',subtleHover:'var(--bestow-color-neutral-subtle-hover)',text:'var(--bestow-color-neutral-text)'},danger:{solid:'var(--bestow-color-danger-solid)',solidHover:'var(--bestow-color-danger-solid-hover)',contrast:'var(--bestow-color-danger-contrast)',subtle:'var(--bestow-color-danger-subtle)',subtleHover:'var(--bestow-color-danger-subtle-hover)',text:'var(--bestow-color-danger-text)'},success:{solid:'var(--bestow-color-success-solid)',solidHover:'var(--bestow-color-success-solid-hover)',contrast:'var(--bestow-color-success-contrast)',subtle:'var(--bestow-color-success-subtle)',subtleHover:'var(--bestow-color-success-subtle-hover)',text:'var(--bestow-color-success-text)'},warning:{solid:'var(--bestow-color-warning-solid)',solidHover:'var(--bestow-color-warning-solid-hover)',contrast:'var(--bestow-color-warning-contrast)',subtle:'var(--bestow-color-warning-subtle)',subtleHover:'var(--bestow-color-warning-subtle-hover)',text:'var(--bestow-color-warning-text)'},info:{solid:'var(--bestow-color-info-solid)',solidHover:'var(--bestow-color-info-solid-hover)',contrast:'var(--bestow-color-info-contrast)',subtle:'var(--bestow-color-info-subtle)',subtleHover:'var(--bestow-color-info-subtle-hover)',text:'var(--bestow-color-info-text)'}},shadow:{sm:'var(--bestow-shadow-sm)',md:'var(--bestow-shadow-md)',lg:'var(--bestow-shadow-lg)'}};","import { assignInlineVars } from '@vanilla-extract/dynamic';\nimport { vars, type ThemeName, type ThemeTokens } from './contract.css';\n\nexport type DeepPartial<T> = { [K in keyof T]?: T[K] extends string ? string : DeepPartial<T[K]> };\n\nexport type ThemeOverrides = DeepPartial<ThemeTokens>;\n\n/** createTheme 에 넘기는 입력. common 은 라이트·다크 공통, light/dark 는 모드별 값 (common 보다 우선). */\nexport interface ThemeInput {\n common?: ThemeOverrides;\n light?: ThemeOverrides;\n dark?: ThemeOverrides;\n}\n\n/** createTheme 의 결과. ThemeProvider 의 overrides 로 넘긴다. */\nexport interface BestowTheme {\n readonly light: ThemeOverrides;\n readonly dark: ThemeOverrides;\n}\n\ntype Tree = { [key: string]: string | Tree };\n\nfunction deepMerge(target: Tree, source: Tree | undefined): Tree {\n if (!source) return target;\n const out: Tree = { ...target };\n for (const [key, value] of Object.entries(source)) {\n if (value === undefined) continue;\n const prev = out[key];\n out[key] = typeof value === 'object' && typeof prev === 'object' ? deepMerge(prev, value) : value;\n }\n return out;\n}\n\n/**\n * 브랜드 테마를 만든다. 여러 입력을 넘기면 순서대로 깊게 병합한다 (뒤가 우선).\n *\n * @example\n * const brand = createTheme(\n * createIntentColors('primary', '#7c3aed'),\n * { common: { radius: { md: '6px' }, font: { family: { sans: 'Inter, sans-serif' } } } },\n * );\n * <ThemeProvider theme=\"dark\" overrides={brand}>…</ThemeProvider>\n */\nexport function createTheme(...inputs: ThemeInput[]): BestowTheme {\n let light: Tree = {};\n let dark: Tree = {};\n for (const input of inputs) {\n light = deepMerge(deepMerge(light, input.common as Tree), input.light as Tree);\n dark = deepMerge(deepMerge(dark, input.common as Tree), input.dark as Tree);\n }\n return Object.freeze({ light, dark }) as BestowTheme;\n}\n\n/** 두 테마를 병합한다 (b 가 우선). 중첩 ThemeProvider 가 바깥 테마를 이어받을 때 쓴다. */\nexport function mergeThemes(a: BestowTheme | undefined, b: BestowTheme | undefined): BestowTheme | undefined {\n if (!a) return b;\n if (!b) return a;\n return createTheme(a, b);\n}\n\n/** 부분 토큰을 { 'var(--bestow-…)': 값 } 으로 펼친다. 알 수 없는 키는 무시한다. */\nfunction flatten(partial: Tree, contract: Tree, out: Record<string, string>) {\n for (const [key, value] of Object.entries(partial)) {\n const target = contract[key];\n if (target === undefined) continue;\n if (typeof target === 'string' && typeof value === 'string') out[target] = value;\n else if (typeof target === 'object' && typeof value === 'object') flatten(value, target, out);\n }\n return out;\n}\n\n/** 현재 모드의 오버라이드를 인라인 style 로 바꾼다. */\nexport function themeToStyle(theme: BestowTheme | undefined, mode: ThemeName): Record<string, string> | undefined {\n if (!theme) return undefined;\n const map = flatten(theme[mode] as Tree, vars as unknown as Tree, {});\n return Object.keys(map).length ? assignInlineVars(map) : undefined;\n}\n","import { composeExtraAddress } from '@bestow-ui/korean-utils';\n\n/** 주소 검색 결과 */\nexport interface AddressSearchResult {\n /** 우편번호 (5자리 국가기초구역번호) */\n zonecode: string;\n /** 기본 주소 (도로명 또는 지번) */\n address: string;\n /** 참고 항목 (도로명 주소일 때 법정동·건물명, 예: \" (역삼동, 래미안아파트)\") */\n extraAddress?: string;\n}\n\n/**\n * 주소 검색 공급자. container 안에 검색 화면을 그리고, 사용자가 고르면 onSelect 를 부른다.\n * 정리 함수를 돌려주면 검색 창이 닫힐 때 부른다. 다른 주소 서비스(행정안전부 도로명주소 API 등)로 바꿔 끼울 수 있다.\n */\nexport type AddressProvider = (\n container: HTMLElement,\n onSelect: (result: AddressSearchResult) => void,\n) => void | (() => void) | Promise<void | (() => void)>;\n\n// 참고 항목 함수는 @bestow-ui/korean-utils 로 옮겼다(1.6) — 예전 import 경로도 되게 다시 export\nexport { composeExtraAddress };\n\n// 카카오 우편번호 서비스 (https://postcode.map.kakao.com/guide)\nconst KAKAO_POSTCODE_SRC = 'https://t1.kakaocdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js';\n\ninterface KakaoPostcodeData {\n zonecode: string;\n userSelectedType: 'R' | 'J';\n roadAddress: string;\n jibunAddress: string;\n autoJibunAddress?: string;\n bname: string;\n buildingName: string;\n apartment: 'Y' | 'N';\n}\n\ntype PostcodeConstructor = new (options: {\n oncomplete: (data: KakaoPostcodeData) => void;\n width?: string | number;\n height?: string | number;\n}) => { embed: (element: HTMLElement) => void };\n\ninterface PostcodeWindow {\n kakao?: { Postcode?: PostcodeConstructor };\n daum?: { Postcode?: PostcodeConstructor };\n}\n\nlet loading: Promise<PostcodeConstructor> | null = null;\n\nfunction loadKakaoPostcode(): Promise<PostcodeConstructor> {\n const w = window as unknown as PostcodeWindow;\n const existing = w.kakao?.Postcode ?? w.daum?.Postcode;\n if (existing) return Promise.resolve(existing);\n loading ??= new Promise<PostcodeConstructor>((resolve, reject) => {\n const fail = (message: string) => {\n loading = null; // 다음에 다시 시도할 수 있게\n reject(new Error(message));\n };\n const script = document.createElement('script');\n script.src = KAKAO_POSTCODE_SRC;\n script.async = true;\n script.onload = () => {\n const ctor = w.kakao?.Postcode ?? w.daum?.Postcode;\n if (ctor) return resolve(ctor);\n fail('우편번호 서비스를 찾지 못했어요');\n };\n script.onerror = () => fail('우편번호 서비스를 불러오지 못했어요');\n document.head.appendChild(script);\n });\n return loading;\n}\n\n/**\n * 기본 공급자: 카카오(다음) 우편번호 서비스. 처음 쓸 때 스크립트를 불러오므로 코어 번들 크기에 영향이 없다.\n * 사용 조건은 서비스 가이드를 따른다.\n */\nexport const kakaoPostcodeProvider: AddressProvider = async (container, onSelect) => {\n const Postcode = await loadKakaoPostcode();\n new Postcode({\n width: '100%',\n height: '100%',\n oncomplete: (data) => {\n const address =\n data.userSelectedType === 'R' ? data.roadAddress : data.jibunAddress || data.autoJibunAddress || '';\n onSelect({ zonecode: data.zonecode, address, extraAddress: composeExtraAddress(data) });\n },\n }).embed(container);\n};\n","// 날짜 계산 유틸. 값은 시간대 문제가 없도록 'YYYY-MM-DD' 문자열로 다루고, 계산할 때만 로컬 Date 로 바꾼다.\n\nconst pad = (n: number) => String(n).padStart(2, '0');\n\n/** Date → 'YYYY-MM-DD' (로컬 기준) */\nexport function toISODate(date: Date): string {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n}\n\n/** 'YYYY-MM-DD' → Date (로컬 자정). 형식이 틀리거나 없는 날짜(2월 30일 등)면 null */\nexport function parseISODate(value: string | null | undefined): Date | null {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value ?? '');\n if (!m) return null;\n const [y, mo, d] = [Number(m[1]), Number(m[2]), Number(m[3])];\n const date = new Date(y, mo - 1, d);\n return date.getFullYear() === y && date.getMonth() === mo - 1 && date.getDate() === d ? date : null;\n}\n\nexport function addDays(date: Date, days: number): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n}\n\n/** 달을 옮긴다. 옮긴 달에 같은 날이 없으면 그 달의 마지막 날 (1월 31일 + 1달 → 2월 28/29일) */\nexport function addMonths(date: Date, months: number): Date {\n const target = new Date(date.getFullYear(), date.getMonth() + months, 1);\n const lastDay = new Date(target.getFullYear(), target.getMonth() + 1, 0).getDate();\n return new Date(target.getFullYear(), target.getMonth(), Math.min(date.getDate(), lastDay));\n}\n\nexport function isSameDay(a: Date | null, b: Date | null): boolean {\n return !!a && !!b && toISODate(a) === toISODate(b);\n}\n\nexport function isSameMonth(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\n/** 날짜만 비교 (-1, 0, 1) */\nexport function compareDays(a: Date, b: Date): number {\n const x = toISODate(a);\n const y = toISODate(b);\n return x < y ? -1 : x > y ? 1 : 0;\n}\n\n/** 일요일부터 시작하는 달력의 주 목록 (앞뒤 달 날짜 포함, 항상 6주) */\nexport function getCalendarWeeks(year: number, month: number): Date[][] {\n const first = new Date(year, month, 1);\n const start = addDays(first, -first.getDay());\n return Array.from({ length: 6 }, (_, week) => Array.from({ length: 7 }, (_, day) => addDays(start, week * 7 + day)));\n}\n","import { addDays, addMonths, parseISODate, toISODate } from '../../utils/date';\n\nexport interface DateRange {\n /** 시작일 'YYYY-MM-DD' (없으면 '') */\n start: string;\n /** 종료일 'YYYY-MM-DD' (없으면 '') */\n end: string;\n}\n\n/** 빠른 선택 — 오늘에서 거슬러 올라간 기간. `days: 0` 은 오늘 하루 */\nexport interface DateRangePreset {\n label: string;\n days?: number;\n months?: number;\n}\n\n/** 조회 화면에서 흔한 빠른 선택(오늘·1주일·1개월·3개월). 그대로 넘기거나 골라 쓴다 */\nexport const dateRangePresets: DateRangePreset[] = [\n { label: '오늘', days: 0 },\n { label: '1주일', days: 7 },\n { label: '1개월', months: 1 },\n { label: '3개월', months: 3 },\n];\n\n/** 빠른 선택이 가리키는 기간 (오늘 'YYYY-MM-DD' 기준) */\nexport function presetRange(preset: DateRangePreset, today: string): DateRange {\n const end = parseISODate(today);\n if (!end) return { start: '', end: '' };\n const start = preset.months !== undefined ? addMonths(end, -preset.months) : addDays(end, -(preset.days ?? 0));\n return { start: toISODate(start), end: today };\n}\n","const FOCUSABLE =\n 'input:not([type=\"hidden\"]):not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), a[href], [tabindex]:not([tabindex=\"-1\"])';\n\n/** 화면에 보이고 보조기술에서 숨기지 않은, Tab 으로 갈 수 있는 요소 */\nfunction isUsable(element: Element): element is HTMLElement {\n return (\n element instanceof HTMLElement &&\n element.matches(FOCUSABLE) &&\n element.tabIndex >= 0 &&\n !element.closest('[aria-hidden=\"true\"], [inert], [hidden]')\n );\n}\n\nfunction firstUsableIn(container: Element | null): HTMLElement | null {\n if (!container) return null;\n // 라디오·세그먼트처럼 하나를 고르는 묶음은 지금 선택된 항목으로 간다\n const checked = Array.from(container.querySelectorAll(':checked, [aria-checked=\"true\"]')).find(isUsable);\n return checked ?? Array.from(container.querySelectorAll(FOCUSABLE)).find(isUsable) ?? null;\n}\n\n/**\n * 폼 칸으로 포커스를 옮긴다(오류 요약의 링크, 제출 실패 뒤 등). `target` 은 칸의 id 나 요소.\n * id 가 포커스할 수 없는 요소를 가리켜도 알맞은 곳을 찾는다 — RadioGroup·AgreementGroup 처럼 묶음이면 선택된(없으면 첫) 항목,\n * FileUpload 처럼 숨긴 input 이면 같은 묶음(role=\"group\")의 버튼. 옮겼으면 true.\n */\nexport function focusField(target: string | HTMLElement | null | undefined): boolean {\n const element = typeof target === 'string' ? document.getElementById(target) : (target ?? null);\n if (!element) return false;\n const destination =\n (isUsable(element) ? element : null) ??\n firstUsableIn(element) ??\n firstUsableIn(element.closest('[role=\"group\"], [role=\"radiogroup\"], fieldset'));\n if (!destination) return false;\n destination.focus();\n return document.activeElement === destination;\n}\n","import { assignInlineVars } from '@vanilla-extract/dynamic';\nimport { forwardRef, type HTMLAttributes } from 'react';\nimport { cx } from '../../utils/cx';\nimport * as styles from './Skeleton.css';\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLSpanElement> {\n /** 모양. text 는 글자 높이(1em), circle 은 width 를 지름으로 쓴다 */\n variant?: 'text' | 'rect' | 'circle';\n /** 너비. 숫자는 px (기본: text·rect 100%, circle 40px) */\n width?: number | string;\n /** 높이. 숫자는 px (기본: text 1em, rect 100px, circle 은 width 와 같음) */\n height?: number | string;\n /** text 에서 여러 줄을 그린다. 마지막 줄은 60% 너비 */\n lines?: number;\n}\n\nconst toCss = (value: number | string) => (typeof value === 'number' ? `${value}px` : value);\n\n/**\n * 콘텐츠를 불러오는 동안 자리를 표시한다. 장식용이라 스크린리더에서 숨긴다 —\n * 로딩 중인 영역(감싸는 요소)에 `aria-busy=\"true\"` 를 붙여 상태를 알린다.\n */\nexport const Skeleton = /* @__PURE__ */ forwardRef<HTMLSpanElement, SkeletonProps>(function Skeleton(\n { variant = 'text', width, height, lines = 1, className, style, ...rest },\n ref,\n) {\n const w = toCss(width ?? (variant === 'circle' ? 40 : '100%'));\n const h = toCss(height ?? (variant === 'circle' ? w : variant === 'rect' ? 100 : '1em'));\n\n if (variant === 'text' && lines > 1) {\n return (\n <span\n ref={ref}\n aria-hidden\n className={cx(styles.lines, className)}\n style={{ ...assignInlineVars({ [styles.width]: w }), ...style }}\n {...rest}\n >\n {Array.from({ length: lines }, (_, i) => (\n <span\n key={i}\n className={styles.skeleton({ variant })}\n style={assignInlineVars({ [styles.width]: i === lines - 1 ? '60%' : '100%', [styles.height]: h })}\n />\n ))}\n </span>\n );\n }\n\n return (\n <span\n ref={ref}\n aria-hidden\n className={cx(styles.skeleton({ variant }), className)}\n style={{ ...assignInlineVars({ [styles.width]: w, [styles.height]: h }), ...style }}\n {...rest}\n />\n );\n});\n","export function cx(...classNames: Array<string | false | null | undefined>): string {\n return classNames.filter(Boolean).join(' ');\n}\n","import 'src/styles/animations.css.ts.vanilla.css?source=#H4sIAAAAAAAAA51T3WqDMBS-9ynOjaBsGYlV27qbPsbuRhqjDdVEYjZahu8-plspGjPtXeB8-f4453Dm10LTmrfwTkrdHLcYw5cHUGhV9w8A1VAmzDUD_OoBdB6AUeMRGUadd5gSkllCMk-IHYSR2yGA0VS2hdJ1NjwraniAEuw_A4p3fggtoxUP8Ms-Df_J5CZL8I2MhA7HG3cFq0VmG3sku9VxvKLjB9tc0FsydmFL9xYwWrGAYOzDE0RxcwmnPuwfsUs8dYhrZX56xTkvnVq_uE16h7SKbcdiR8rOpVYfMkeNaoURSmbQZ5yeoRWL7sFWzd1Y88RFeTK2Q_-bfFIdIKRpLi6IMqZ0LpRETEnDpUEDyhVzPye5gthiy5WSLtuhvq6lexMlN2z3DVsBqiZDBQAA';\nimport 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Skeleton/Skeleton.css.ts.vanilla.css?source=Ll8xczhkYXRkMiB7CiAgZGlzcGxheTogYmxvY2s7CiAgZmxleC1zaHJpbms6IDA7CiAgd2lkdGg6IHZhcigtLV8xczhkYXRkMCk7CiAgaGVpZ2h0OiB2YXIoLS1fMXM4ZGF0ZDEpOwogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJlc3Rvdy1jb2xvci1uZXV0cmFsLXN1YnRsZSk7CiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCAyNSUsIHZhcigtLWJlc3Rvdy1jb2xvci1uZXV0cmFsLXN1YnRsZS1ob3ZlcikgNTAlLCB0cmFuc3BhcmVudCA3NSUpOwogIGJhY2tncm91bmQtc2l6ZTogMjAwJSAxMDAlOwogIGFuaW1hdGlvbjogXzFncnBiNzA3IDEuNnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Cn0KLl8xczhkYXRkMyB7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYmVzdG93LXJhZGl1cy1zbSk7Cn0KLl8xczhkYXRkNCB7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYmVzdG93LXJhZGl1cy1tZCk7Cn0KLl8xczhkYXRkNSB7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYmVzdG93LXJhZGl1cy1mdWxsKTsKfQouXzFzOGRhdGQ2IHsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgZ2FwOiB2YXIoLS1iZXN0b3ctc3BhY2UtMik7CiAgd2lkdGg6IHZhcigtLV8xczhkYXRkMCk7Cn0KQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsKICAuXzFzOGRhdGQyIHsKICAgIGFuaW1hdGlvbjogbm9uZTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CiAgfQp9';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var height = 'var(--_1s8datd1)';\nexport var lines = '_1s8datd6';\nexport var skeleton = /* @__PURE__ */ _7a468({defaultClassName:'_1s8datd2',variantClassNames:{variant:{text:'_1s8datd3',rect:'_1s8datd4',circle:'_1s8datd5'}},defaultVariants:{variant:'text'},compoundVariants:[]});\nexport var width = 'var(--_1s8datd0)';","import 'src/styles/visuallyHidden.css.ts.vanilla.css?source=Ll8xa2R0YncxMCB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHdpZHRoOiAxcHg7CiAgaGVpZ2h0OiAxcHg7CiAgcGFkZGluZzogMDsKICBtYXJnaW46IC0xcHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBjbGlwOiByZWN0KDAsIDAsIDAsIDApOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgYm9yZGVyOiAwOwp9';\nexport var visuallyHidden = '_1kdtbw10';","import 'src/theme/contract.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-2ZXW-cOBSG7_MrrOSmkSDCfM1Ab3arVVfaVatVI-29AXuCCngETDPpqv99BczAfBwfzHa7ykqu0kQZvz7Yr-0TP5y4lrIlf90QYtsJb1r5bDdblnLbiYnz9vpjGhN_uwca3JiswQYvJtQFW_yY0BBsCWLiOmBLGBMXHsA6Jh78HOrExIfDUTcmPjxuGsYkvHxUzbJ819iVrPilP4emprx26NBUZtceHZqKDeDSoW1fAD4d2sSuKGISRVF00S5k1dqClXnxYjesamJy-0fNW15lrM7In6zOWVLwW4tMn1rEZtttwe3mpWl5aZF3RV59_sDSx_7397JqLTK02bvcIrc_d2ry-Av5VbZPeUo-cnlrkduPspXkkVUN-f3TrUW6p9sNr3OhHGApKxmT2994-65medWQD7LqQu3yvqlfD4s8vu8-tj_xza5gtUU-8KqQFhkV1-Gb_Cu3901MnIdVUPNSoeiWzHlYY5Ju6ai6uV--B-oiEfpVfMAU7iBBFN6gQEfqdxpX9aBnnm-eWrsePOyOhaMUlTzLd2VMAkTT8DJPZJHFJERUg2IFKYq84vbTIGu774NLuLCSdckGs3BhzQu2593aPazOpdmuZm0uK1uwpnum65QNLDg-zHWUkqaQz132uRR8tfMq43tbfuF1wV5iQr0LD46KUmb9hDwKt2e13GbyueokLixp5TCTyyWd2mXR5tuY0MsFTWUhazvZ2BkXbFe0MbkT_T9Y1eyStuCdaC0iwWBRuWs73-8EFZ4IYE1efeF100VyqRu4Eawazas3CXvjWOTw9eAH90APcToNZVwxjdCPAidYwZpxqmEY8lUIi6ZpqF2Tdcbrk4FlnLscindQNm0tq01M7liWBEmmFgqZ7pqY3HlJKAQUcFvnJatf7EYWeTddNwh8nswJ7afO9pjc0cx3szUiT2XV1v3OU09_DH20k3PhayjHUWQJDwVH9C3ft9hoK75ra1aMLni-x3zoFJwJx-cr99FRruPCGHo8P6qzca4cR8EjnnIs8sEF5eQyVm26zXUwIUvd0IX2zKlufHoS0ZSmarWOBcfAowNcuMKdE45DEN2pQeSH-StH2uzSlDfNaAAN1o4HHa4z4XQWwjDwfESuY8EYevTAEZnAol6ehVSkHMpXR_3xLKgm98zqKq82owsiiLgDZYQz4fT8aLVyoF1zlJ-4oDw3Y-jRBSESMC2dK0-2gvBSyIWj_uBC5PqOA2WOvBJyPilOqvmM2Gt1tsAQdDYXnsjmE2EvVmfB5oll3Y_upkvodk_c7f7qD6oT3kOduruv0zFNTyjXvdZgr-5K7Aw9PKgbde_f3ny7eWg_s02bOAZBDYIaBDUIahDUIKhBUIOgBkENghoENQhqENQg6H-DoNQgqEFQg6AGQQ2CGgQdEImGdE2hv8mnCIqB4xHwlNfhMwTFYFaJoOE8girjniCokgZPEVRJgkKPpC8RVMm9_xRBQydywJm-RgTtVzKILEIptYjrh_2dJISWE2ZSMICLBjheSb3EF5Cfl5A6y3vnPs3ipM7F_BJS-2m6QWCR6dv1nQ_DVjgC9bEIB6eUM3ptIDvM0YssEq6H_6rNBIIt1B3eSuegK1IWMMif1wi6_SQ93yI0Wlkk8tUeweAL9YdNugDhdcgFg9b7O0FYJIlwIZe-B4SHreAHFqHBuksuaptgMgYDwD5doLJIM8-HNslrQeUFORtg5wUJ-xSmgWytBdMBwtLOoZ8yuVoYcMORB97GI9M-sJrJw1Mkdw2SGyQ3SG6Q3CC5QXJTFTZVYVMVNlVhUxU2VWFTFTZV4R9cFf6pu2Uy8mZbc8Hr5riV0yde8phkrP5839PpGaoqYRXBVQRYMWTFoBXDVgxcMXRF4RXFVxRgUYRFIRbFWBxkcZSdh9n_Ac7-cKDVQVotqJ3FWi2w1UFbHbjVw1stwNVEXD3I1cVcHdBdgLoLYHcR7moArxbyakCvDvbOg68W-s7Drw7-4gA81aRRBJ4uOBgETxdyHIMnoF4EwofaNI7CSGywPo3i8ESlOBBj9qir1AugeA6Lp0r1AjBejMbL4HgWj7HqhyYxYyWQOYie6iCzGD0RqSZIT8irg9LI9llUvdYEbLR-PQfdyMyU2L0UvBeh9xx8I5VsPRxHatkzgD5Vsxcg-mJIX4bps6COVLU10R2pa8_B_FTZXoDzmkA_VbeXIf0s1GMVbk3Ox2rcc-g_Vbl14X8Z_i94AYC_AliU7xfWu9EXBWCmX1DzVr0r-Deq3qo3Ct9f9ybk2823vwE1-y5GkUsAAA';\nimport 'src/components/Input/Input.css.ts.vanilla.css?source=#H4sIAAAAAAAAA7VV227bMAx9z1foZUAzVIHT21r1U4ZiYCzZJipLhkQnaYv9-yDZzqwsdZwCQx4CUIc8h-Ixtfq1fmru37dVxj4WjEn0jYY3wdBoNIoXWu2fF4yBxtJwJFV7wXJlSLkQLqERbAvuivON8mR33DeQK36zDKcb66Rygq2bPfNWo0yhudXW8Q7E0TQtXU8ApCqg1bQcVeYOJLb-SEEX5LXskJC_ls62RnblxEmK8lA-5HwOLFIgOTAeCa0Rg6SIS1Nl6yBgeAGeltdsY_fcVyDtbgoXhbTOByWk9vS8-L1YHYYlKrtVThhLVz8lEHCJHjZayZdrVqDS0isSQ4x9X8bhjiWevofRLHhkmJqIJ2dNGQaSKCts3nq-Q6rQXEQbE_vxDjckWBZ_wULnM8c6umtBswWN8mWeEAmmDI0Fr06WO9XkTMlnOSYnuUo_17nurltSMrGUscRBa7tTMoRtAznSm2DZ6iERtY48lcKyIsFub5q4DhqQEk3Juy0xsQIKa4h7fD_GHOLc1-kt3CSEd9lswtsvEt6mhI-zCe9mEtZHc75LN-2wYncoqRJsnWXfEvh9hAeUYOsArNHwHpw9j6R3mQfp_emwhI01Kk66pa6jIfDXQ6JbaA04ZWi0CNFUyiEN3Y4CY5lCNBpyVVktlYuaJ_eobzek1fKoxsHoH595dQR_mHyywj_3lUPz2l_FxXp-nCeQ6FTevQC51W1tpp7FdVr-8TIjPHVGmGfwHrjrvfEvtDvhtZLYdgmxuerThNExN9bVoC95LEd9QOyjBlei6b8v7gkcCdavl7MbOjyIadHNqGg_7vM3tff_q_FTbsrPfBRHvf0BVu1kSJoJAAA';\nimport { createRuntimeFn as _7a468 } from '@vanilla-extract/recipes/createRuntimeFn';\nexport var adornment = '_19p5zvh6';\nexport var field = '_19p5zvh7';\nexport var fieldFullWidth = '_19p5zvh8';\nexport var helperText = /* @__PURE__ */ _7a468({defaultClassName:'_19p5zvhb',variantClassNames:{error:{true:'_19p5zvhc'}},defaultVariants:{},compoundVariants:[]});\nexport var input = '_19p5zvh5';\nexport var label = '_19p5zvh9';\nexport var requiredMark = '_19p5zvha';\nexport var root = /* @__PURE__ */ _7a468({defaultClassName:'_19p5zvh0',variantClassNames:{size:{sm:'_19p5zvh1',md:'_19p5zvh2',lg:'_19p5zvh3'},fullWidth:{true:'_19p5zvh4'}},defaultVariants:{size:'md'},compoundVariants:[]});"],"mappings":"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","names":["input","_","assignInlineVars","Skeleton","width","height","lines","assignInlineVars","_7a468"]}
|