@amineslab/ui 0.1.0-next.20260925131012 → 0.1.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.
Files changed (89) hide show
  1. package/dist/form-fields-B1bIqSFO.d.cts +517 -0
  2. package/dist/form-fields-B1bIqSFO.d.ts +517 -0
  3. package/dist/label-1M8BaNQZ.d.cts +573 -0
  4. package/dist/label-1M8BaNQZ.d.ts +573 -0
  5. package/dist/label-B5sC6OFk.d.cts +565 -0
  6. package/dist/label-B5sC6OFk.d.ts +565 -0
  7. package/dist/label-BALpBplm.d.cts +565 -0
  8. package/dist/label-BALpBplm.d.ts +565 -0
  9. package/dist/label-BEgWK5BT.d.cts +588 -0
  10. package/dist/label-BEgWK5BT.d.ts +588 -0
  11. package/dist/label-BOY-jYQ0.d.cts +581 -0
  12. package/dist/label-BOY-jYQ0.d.ts +581 -0
  13. package/dist/label-BPY4z_UR.d.cts +588 -0
  14. package/dist/label-BPY4z_UR.d.ts +588 -0
  15. package/dist/label-BTlFxyV0.d.cts +586 -0
  16. package/dist/label-BTlFxyV0.d.ts +586 -0
  17. package/dist/label-BoJzJasZ.d.cts +582 -0
  18. package/dist/label-BoJzJasZ.d.ts +582 -0
  19. package/dist/label-BzBMyN3M.d.cts +577 -0
  20. package/dist/label-BzBMyN3M.d.ts +577 -0
  21. package/dist/label-C25JWmwg.d.cts +575 -0
  22. package/dist/label-C25JWmwg.d.ts +575 -0
  23. package/dist/label-C39geBGu.d.cts +569 -0
  24. package/dist/label-C39geBGu.d.ts +569 -0
  25. package/dist/label-CFa7H0MJ.d.cts +581 -0
  26. package/dist/label-CFa7H0MJ.d.ts +581 -0
  27. package/dist/label-CHN6RDds.d.cts +570 -0
  28. package/dist/label-CHN6RDds.d.ts +570 -0
  29. package/dist/label-CR4YDuK3.d.cts +576 -0
  30. package/dist/label-CR4YDuK3.d.ts +576 -0
  31. package/dist/label-CVCQcIB5.d.cts +581 -0
  32. package/dist/label-CVCQcIB5.d.ts +581 -0
  33. package/dist/label-Ccb4jRcY.d.cts +588 -0
  34. package/dist/label-Ccb4jRcY.d.ts +588 -0
  35. package/dist/label-CkBy2dW7.d.cts +591 -0
  36. package/dist/label-CkBy2dW7.d.ts +591 -0
  37. package/dist/label-CpDbegkn.d.cts +555 -0
  38. package/dist/label-CpDbegkn.d.ts +555 -0
  39. package/dist/label-D1UMApWv.d.cts +598 -0
  40. package/dist/label-D1UMApWv.d.ts +598 -0
  41. package/dist/label-DGHM7QEj.d.cts +591 -0
  42. package/dist/label-DGHM7QEj.d.ts +591 -0
  43. package/dist/label-DaXK-RuI.d.cts +576 -0
  44. package/dist/label-DaXK-RuI.d.ts +576 -0
  45. package/dist/label-DbfulioI.d.cts +581 -0
  46. package/dist/label-DbfulioI.d.ts +581 -0
  47. package/dist/label-DeyDJRuK.d.cts +600 -0
  48. package/dist/label-DeyDJRuK.d.ts +600 -0
  49. package/dist/label-Dx8QsMPn.d.cts +598 -0
  50. package/dist/label-Dx8QsMPn.d.ts +598 -0
  51. package/dist/label-Dz0DrmrO.d.cts +588 -0
  52. package/dist/label-Dz0DrmrO.d.ts +588 -0
  53. package/dist/label-DziZP2VL.d.cts +590 -0
  54. package/dist/label-DziZP2VL.d.ts +590 -0
  55. package/dist/label-FFoDgC1Z.d.cts +583 -0
  56. package/dist/label-FFoDgC1Z.d.ts +583 -0
  57. package/dist/label-NUIyafzR.d.cts +588 -0
  58. package/dist/label-NUIyafzR.d.ts +588 -0
  59. package/dist/label-NwHLobGQ.d.cts +590 -0
  60. package/dist/label-NwHLobGQ.d.ts +590 -0
  61. package/dist/label-SoZfJG7i.d.cts +571 -0
  62. package/dist/label-SoZfJG7i.d.ts +571 -0
  63. package/dist/label-YrBpLATh.d.cts +570 -0
  64. package/dist/label-YrBpLATh.d.ts +570 -0
  65. package/dist/label-Z97Pco2v.d.cts +567 -0
  66. package/dist/label-Z97Pco2v.d.ts +567 -0
  67. package/dist/label-a0g6Y_Q8.d.cts +543 -0
  68. package/dist/label-a0g6Y_Q8.d.ts +543 -0
  69. package/dist/label-gpy0nv42.d.cts +598 -0
  70. package/dist/label-gpy0nv42.d.ts +598 -0
  71. package/dist/label-ixshRIuw.d.cts +569 -0
  72. package/dist/label-ixshRIuw.d.ts +569 -0
  73. package/dist/label-voR-52GX.d.cts +588 -0
  74. package/dist/label-voR-52GX.d.ts +588 -0
  75. package/dist/use-submit-guard-AFkewFH5.d.cts +600 -0
  76. package/dist/use-submit-guard-AFkewFH5.d.ts +600 -0
  77. package/dist/use-submit-guard-BhJ0rrq_.d.cts +562 -0
  78. package/dist/use-submit-guard-BhJ0rrq_.d.ts +562 -0
  79. package/dist/use-submit-guard-D-knm_JT.d.cts +600 -0
  80. package/dist/use-submit-guard-D-knm_JT.d.ts +600 -0
  81. package/dist/use-submit-guard-D1dbZ2fP.d.cts +600 -0
  82. package/dist/use-submit-guard-D1dbZ2fP.d.ts +600 -0
  83. package/dist/use-submit-guard-DAoHfwqu.d.cts +600 -0
  84. package/dist/use-submit-guard-DAoHfwqu.d.ts +600 -0
  85. package/dist/use-submit-guard-DyOToVDM.d.cts +600 -0
  86. package/dist/use-submit-guard-DyOToVDM.d.ts +600 -0
  87. package/dist/use-submit-guard-P8ekrSuw.d.cts +600 -0
  88. package/dist/use-submit-guard-P8ekrSuw.d.ts +600 -0
  89. package/package.json +1 -1
@@ -0,0 +1,581 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import { VariantProps } from 'class-variance-authority';
3
+ import * as React from 'react';
4
+ import { ReactNode, ComponentType, ExoticComponent } from 'react';
5
+ import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
6
+ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
7
+ import * as SelectPrimitive from '@radix-ui/react-select';
8
+
9
+ type FieldControlVariant = 'filled' | 'outline';
10
+ /** Shared surface contract for text fields and selection triggers. */
11
+ interface FieldControlProps {
12
+ variant?: FieldControlVariant;
13
+ /** Add an opaque theme surface beneath the elevation layer. */
14
+ background?: boolean;
15
+ /** Preserve error styling while focused or open. */
16
+ invalid?: boolean;
17
+ }
18
+ declare const fieldControlVariants: (props?: ({
19
+ background?: boolean | null | undefined;
20
+ variant?: "outline" | "filled" | null | undefined;
21
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
22
+ type FieldControlVariants = VariantProps<typeof fieldControlVariants>;
23
+
24
+ /** FileUpload와 PhotoField가 공유하는 drop surface 표현입니다. */
25
+ type FileDropzoneVariant = FieldControlVariant;
26
+ /** 레이아웃은 소유하지 않고 표면·focus·drag·invalid 상태만 제공하는 공통 variant입니다. */
27
+ declare const fileDropzoneVariants: (props?: ({
28
+ variant?: "outline" | "filled" | null | undefined;
29
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
30
+ type FileDropzoneVariants = VariantProps<typeof fileDropzoneVariants>;
31
+
32
+ /** FileInput·FileUpload·FilePicker가 공유하는 파일 모델과 검증 함수. */
33
+ type FileItem = {
34
+ kind: 'local';
35
+ file: File;
36
+ id: string;
37
+ } | {
38
+ kind: 'remote';
39
+ name: string;
40
+ url: string;
41
+ size?: number;
42
+ mimeType?: string;
43
+ id?: string;
44
+ };
45
+ type FileErrorReason = 'too-large' | 'invalid-type' | 'too-many';
46
+ interface FileError {
47
+ fileName: string;
48
+ reason: FileErrorReason;
49
+ message: string;
50
+ }
51
+ declare function getFileName(item: FileItem): string;
52
+ declare function getFileSize(item: FileItem): number | undefined;
53
+ declare function getItemKey(item: FileItem): string;
54
+ declare function formatBytes(bytes: number): string;
55
+ /** MIME type, MIME glob, 확장자를 모두 지원하는 accept 매칭. */
56
+ declare function matchesAccept(file: File, accept?: string): boolean;
57
+ declare function newLocalId(): string;
58
+ declare function isImageFile(item: FileItem): boolean;
59
+ declare function isPdfFile(item: FileItem): boolean;
60
+ interface FileConstraints {
61
+ /** MIME type 또는 확장자 목록. 예: .jpg,.png,.pdf */
62
+ accept?: string;
63
+ /** 파일당 최대 용량(MB). 생략하면 제한하지 않습니다. */
64
+ maxSize?: number;
65
+ /** 최대 파일 개수. 생략하면 multiple 설정만 적용합니다. */
66
+ maxFiles?: number;
67
+ }
68
+
69
+ declare const fileInputVariants: (props?: ({
70
+ size?: "sm" | "md" | "lg" | null | undefined;
71
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
72
+ interface FileInputProps extends FileConstraints, Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue' | 'onError'>, VariantProps<typeof fileInputVariants> {
73
+ background?: FieldControlProps['background'];
74
+ variant?: FieldControlProps['variant'];
75
+ value?: FileItem[];
76
+ defaultValue?: FileItem[];
77
+ onChange?: (files: FileItem[]) => void;
78
+ multiple?: boolean;
79
+ disabled?: boolean;
80
+ uploading?: boolean;
81
+ onError?: (errors: FileError[]) => void;
82
+ /** 파일이 없을 때 안내. 빈 문자열을 포함해 사용처 문구를 그대로 표시합니다. */
83
+ placeholder?: React.ReactNode;
84
+ /** 명시한 경우에만 오른쪽 보조 문구를 표시합니다. */
85
+ triggerLabel?: React.ReactNode;
86
+ invalid?: boolean;
87
+ id?: string;
88
+ }
89
+ /** 한 줄 폼 리듬에 맞춘 파일 선택기. DnD가 필요하면 FileUpload를 사용한다. */
90
+ declare const FileInput: React.ForwardRefExoticComponent<FileInputProps & React.RefAttributes<HTMLDivElement>>;
91
+
92
+ declare const fileDropAreaVariants: (props?: ({
93
+ variant?: "outline" | "filled" | null | undefined;
94
+ size?: "sm" | "md" | "lg" | null | undefined;
95
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
96
+ interface FileUploadProps extends FileConstraints, Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue' | 'onError'>, Omit<VariantProps<typeof fileDropAreaVariants>, 'variant'> {
97
+ variant?: FileDropzoneVariant;
98
+ background?: FieldControlProps['background'];
99
+ value?: FileItem[];
100
+ defaultValue?: FileItem[];
101
+ onChange?: (files: FileItem[]) => void;
102
+ multiple?: boolean;
103
+ /** 업로드 영역에 표시할 형식 안내. 실제 검증은 accept를 사용합니다. */
104
+ acceptLabel?: string;
105
+ disabled?: boolean;
106
+ uploading?: boolean;
107
+ onError?: (errors: FileError[]) => void;
108
+ placeholder?: React.ReactNode;
109
+ helpText?: React.ReactNode;
110
+ invalid?: boolean;
111
+ itemsClassName?: string;
112
+ itemsPlacement?: 'outside' | 'inside';
113
+ id?: string;
114
+ }
115
+ /** 클릭·키보드·드래그앤드롭과 로컬/원격 미리보기를 하나의 파일 수명주기로 묶는다. */
116
+ declare const FileUpload: React.ForwardRefExoticComponent<FileUploadProps & React.RefAttributes<HTMLDivElement>>;
117
+
118
+ /** An icon component reference, or a rendered node such as an SVG or emoji. */
119
+ type ButtonIcon = ReactNode | ComponentType<{
120
+ className?: string;
121
+ size?: number;
122
+ }> | ExoticComponent<{
123
+ className?: string;
124
+ size?: number;
125
+ }>;
126
+
127
+ /**
128
+ * 단일 날짜 선택기 · `Popover` + 트리거 `Button`(outline) + `Calendar` 조합.
129
+ * value/onChange 는 `YYYY-MM-DD` 문자열(`includeTime` 시 `YYYY-MM-DDTHH:mm`)을 주고받는다.
130
+ * controlled 컴포넌트이므로 호출부에서 상태를 관리한다 · react-hook-form 연동은
131
+ * `<FormField render={({ field }) => <DatePicker value={field.value} onChange={field.onChange} />} />`.
132
+ */
133
+ interface DatePickerProps {
134
+ /** YYYY-MM-DD 문자열 (includeTime 시 YYYY-MM-DDTHH:mm) */
135
+ value?: string;
136
+ onChange?: (value: string) => void;
137
+ placeholder?: string;
138
+ disabled?: boolean;
139
+ /** 선택 가능한 최소 날짜 (YYYY-MM-DD) */
140
+ minDate?: string;
141
+ /** 선택 가능한 최대 날짜 (YYYY-MM-DD) */
142
+ maxDate?: string;
143
+ /** 시간(HH:mm)까지 선택한다. value 형식이 YYYY-MM-DDTHH:mm 으로 바뀐다. */
144
+ includeTime?: boolean;
145
+ hourCycle?: 12 | 24;
146
+ /** 팝오버/드로어가 닫힐 때(편집 완료) 호출. 소비측이 시작↔종료 정합성 보정 등에 쓴다. */
147
+ onClose?: () => void;
148
+ /** true면 danger 상태 outline과 `aria-invalid`를 적용한다. */
149
+ invalid?: boolean;
150
+ /** 기본은 부모 면 위 alpha surface, 명시적 경계가 필요하면 outline을 선택한다. */
151
+ background?: FieldControlProps['background'];
152
+ variant?: FieldControlProps['variant'];
153
+ /** FormControl이 주입하는 설명/오류 메시지 연결 ID. 실제 트리거에 전달한다. */
154
+ 'aria-describedby'?: string;
155
+ /** 필수 입력 상태를 실제 트리거에 전달한다. */
156
+ 'aria-required'?: React.AriaAttributes['aria-required'];
157
+ /** FormControl이 주입하는 invalid 상태. `invalid`와 병합해 실제 트리거에 전달한다. */
158
+ 'aria-invalid'?: React.AriaAttributes['aria-invalid'];
159
+ /** 트리거가 포커스를 잃을 때 호출합니다. RHF touched 처리에 사용합니다. */
160
+ onBlur?: React.FocusEventHandler<HTMLButtonElement>;
161
+ className?: string;
162
+ id?: string;
163
+ }
164
+ declare const DatePicker: React.ForwardRefExoticComponent<DatePickerProps & React.RefAttributes<HTMLButtonElement>>;
165
+
166
+ /**
167
+ * 시작일/종료일을 선택하는 날짜 범위 입력기 · `Calendar`(range mode).
168
+ * 기본은 `DatePicker` 와 같은 1개월 뷰이고, `numberOfMonths={2}` 로 2개월을 좌우로 펼친다.
169
+ * value/onChange 는 `{ from, to }` (각각 `YYYY-MM-DD` 문자열, 미선택 시 빈 문자열)을 주고받는다.
170
+ * `includeTime` 시 `from`/`to` 형식이 `YYYY-MM-DDTHH:mm` 으로 바뀐다.
171
+ *
172
+ * **반응형 캡슐화** · 데스크톱은 `Popover`, 모바일은 vaul `Drawer`(content-height, multi-detent)
173
+ * 로 풀폭 캘린더를 띄운다. 사용처는 분기 없이 한 번만 쓴다.
174
+ *
175
+ * **C2 전면 전환(plan 079)**: 이미 시트 안(`useInSheetPanel`)에서 열릴 때 종전엔 인라인
176
+ * `Collapsible` 아코디언으로 펼쳤으나, 본 플랜에서 **중첩 content-height 시트**(vaul NestedRoot)로
177
+ * 띄운다. nested 전환은 `Drawer` 프리미티브 내부에서 `useInSheetPanel()` 자동 감지로 처리되므로,
178
+ * 모바일이면 시트 안/밖 무관하게 동일하게 `Drawer` 를 렌더한다(`Combobox`·`Select` 와 동일 패턴).
179
+ *
180
+ * `to >= from` 같은 기간 정합성은 컴포넌트가 강제하지 않는다 · 소비측 zod refine 책임.
181
+ */
182
+ interface DateRange {
183
+ /** YYYY-MM-DD 문자열 (includeTime 시 YYYY-MM-DDTHH:mm), 미선택 시 빈 문자열 */
184
+ from: string;
185
+ /** YYYY-MM-DD 문자열 (includeTime 시 YYYY-MM-DDTHH:mm), 미선택 시 빈 문자열 */
186
+ to: string;
187
+ }
188
+ interface DateRangePickerProps {
189
+ value: DateRange;
190
+ onChange: (range: DateRange) => void;
191
+ placeholder?: string;
192
+ disabled?: boolean;
193
+ /** 시작·종료 시간(HH:mm)까지 선택한다. value.from/to 형식이 YYYY-MM-DDTHH:mm 으로 바뀐다. */
194
+ includeTime?: boolean;
195
+ hourCycle?: 12 | 24;
196
+ /** 캘린더에 펼칠 개월 수. 기본 1(DatePicker 와 동일한 단일 뷰), 2 로 두 달을 좌우로 펼친다. */
197
+ numberOfMonths?: 1 | 2;
198
+ /**
199
+ * 트리거+팝오버 대신 **캘린더를 그 자리에 인라인**으로 렌더한다(중첩 오버레이 회피).
200
+ * 모바일 필터 시트처럼 이미 떠 있는 표면 안에서 날짜를 고를 때 사용 · 시트 위에 또
201
+ * 작은 팝오버를 띄우지 않는다(연구 권고). `className` 은 인라인 래퍼에 적용된다.
202
+ */
203
+ inline?: boolean;
204
+ /** true면 danger 상태 outline과 `aria-invalid`를 적용한다. */
205
+ invalid?: boolean;
206
+ /** 기본은 부모 면 위 alpha surface, 명시적 경계가 필요하면 outline을 선택한다. */
207
+ background?: FieldControlProps['background'];
208
+ variant?: FieldControlProps['variant'];
209
+ /** FormControl이 주입하는 설명/오류 메시지 연결 ID. 실제 트리거에 전달한다. */
210
+ 'aria-describedby'?: string;
211
+ /** 필수 입력 상태를 실제 트리거에 전달한다. */
212
+ 'aria-required'?: React.AriaAttributes['aria-required'];
213
+ /** FormControl이 주입하는 invalid 상태. `invalid`와 병합해 실제 트리거에 전달한다. */
214
+ 'aria-invalid'?: React.AriaAttributes['aria-invalid'];
215
+ /** inline 캘린더 group의 접근 가능한 이름. 트리거 모드에서는 필요하지 않다. */
216
+ 'aria-label'?: string;
217
+ /** inline 캘린더 group을 외부 제목에 연결한다. */
218
+ 'aria-labelledby'?: string;
219
+ /** 트리거가 포커스를 잃을 때 호출합니다. RHF touched 처리에 사용합니다. */
220
+ onBlur?: React.FocusEventHandler<HTMLButtonElement>;
221
+ className?: string;
222
+ id?: string;
223
+ }
224
+ declare const DateRangePicker: React.ForwardRefExoticComponent<DateRangePickerProps & React.RefAttributes<HTMLButtonElement>>;
225
+
226
+ interface TimeInputProps {
227
+ /** `'HH:mm'` 24시간 문자열 */
228
+ value?: string;
229
+ onChange?: (value: string) => void;
230
+ placeholder?: string;
231
+ /** 트리거 없이 시·분 선택을 직접 표시합니다. PC는 직접 입력, 모바일은 휠을 표시합니다. */
232
+ inline?: boolean;
233
+ /** 표시 형식. value/onChange는 항상 24시간 HH:mm입니다. */
234
+ hourCycle?: 12 | 24;
235
+ inlineLabel?: string;
236
+ inlineLabelPosition?: 'top' | 'left';
237
+ disabled?: boolean;
238
+ /** 선택 가능한 최소 시간 (`'HH:mm'`). */
239
+ minTime?: string;
240
+ /** 선택 가능한 최대 시간 (`'HH:mm'`). */
241
+ maxTime?: string;
242
+ /** 분 단위 step (1·5·10·15·30 등). 기본 1. */
243
+ step?: number;
244
+ /** 입력 또는 모바일 트리거 크기. */
245
+ size?: 'sm' | 'md' | 'lg';
246
+ /** invalid 시 destructive 보더. */
247
+ invalid?: boolean;
248
+ /** FormControl이 주입하는 설명/오류 메시지 연결 ID. 실제 트리거에 전달한다. */
249
+ 'aria-describedby'?: string;
250
+ /** 필수 입력 상태를 실제 트리거에 전달한다. */
251
+ 'aria-required'?: React.AriaAttributes['aria-required'];
252
+ /** FormControl이 주입하는 invalid 상태. `invalid`와 병합해 실제 트리거에 전달한다. */
253
+ 'aria-invalid'?: React.AriaAttributes['aria-invalid'];
254
+ /** 트리거가 포커스를 잃을 때 호출합니다. RHF touched 처리에 사용합니다. */
255
+ onBlur?: React.FocusEventHandler<HTMLInputElement | HTMLButtonElement | HTMLFieldSetElement>;
256
+ /** 기본은 부모 면 위 alpha surface, 명시적 경계가 필요하면 outline을 선택한다. */
257
+ background?: FieldControlProps['background'];
258
+ variant?: FieldControlProps['variant'];
259
+ className?: string;
260
+ id?: string;
261
+ 'aria-label'?: string;
262
+ 'aria-labelledby'?: string;
263
+ }
264
+ type TimeInputElement = HTMLInputElement | HTMLButtonElement | HTMLFieldSetElement;
265
+ /** One time field: direct masked input on desktop, wheel on mobile. */
266
+ declare const TimeInput: React.ForwardRefExoticComponent<TimeInputProps & React.RefAttributes<TimeInputElement>>;
267
+
268
+ declare const checkboxVariants: (props?: ({
269
+ size?: "sm" | "md" | "lg" | null | undefined;
270
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
271
+ interface CheckboxProps extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>, VariantProps<typeof checkboxVariants> {
272
+ label?: React.ReactNode;
273
+ indeterminate?: boolean;
274
+ }
275
+ declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLButtonElement>>;
276
+
277
+ declare const inputVariants: (props?: ({
278
+ size?: "sm" | "md" | "lg" | null | undefined;
279
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
280
+ interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>, VariantProps<typeof inputVariants> {
281
+ variant?: FieldControlProps['variant'];
282
+ /** Place an opaque theme surface below the elevation layer. Defaults to false. */
283
+ background?: FieldControlProps['background'];
284
+ invalid?: boolean;
285
+ leftSlot?: ButtonIcon;
286
+ rightSlot?: ButtonIcon;
287
+ wrapperClassName?: string;
288
+ }
289
+ interface InputFrameProps extends React.HTMLAttributes<HTMLDivElement> {
290
+ leftSlot?: React.ReactNode;
291
+ rightSlot?: React.ReactNode;
292
+ disabled?: boolean;
293
+ }
294
+ declare const InputFrame: React.ForwardRefExoticComponent<InputFrameProps & React.RefAttributes<HTMLDivElement>>;
295
+ declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
296
+
297
+ type InputSize = NonNullable<InputProps['size']>;
298
+
299
+ declare const radioItemVariants: (props?: ({
300
+ size?: "sm" | "md" | "lg" | null | undefined;
301
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
302
+ declare const RadioGroupRoot: React.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
303
+ label?: React.ReactNode;
304
+ } & React.RefAttributes<HTMLDivElement>>;
305
+ interface RadioGroupItemProps extends React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>, VariantProps<typeof radioItemVariants> {
306
+ label?: React.ReactNode;
307
+ }
308
+ declare const RadioGroupItem: React.ForwardRefExoticComponent<RadioGroupItemProps & React.RefAttributes<HTMLButtonElement>>;
309
+ declare const RadioGroup: React.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
310
+ label?: React.ReactNode;
311
+ } & React.RefAttributes<HTMLDivElement>> & {
312
+ Root: React.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
313
+ label?: React.ReactNode;
314
+ } & React.RefAttributes<HTMLDivElement>>;
315
+ Item: React.ForwardRefExoticComponent<RadioGroupItemProps & React.RefAttributes<HTMLButtonElement>>;
316
+ };
317
+ type RadioGroupProps = React.ComponentPropsWithoutRef<typeof RadioGroupRoot>;
318
+
319
+ declare const SelectGroup: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
320
+ declare const SelectValue: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
321
+ declare const selectTriggerVariants: (props?: ({
322
+ size?: "sm" | "md" | "lg" | null | undefined;
323
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
324
+ interface SelectTriggerProps extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>, VariantProps<typeof selectTriggerVariants> {
325
+ invalid?: FieldControlProps['invalid'];
326
+ background?: FieldControlProps['background'];
327
+ variant?: FieldControlProps['variant'];
328
+ required?: boolean;
329
+ }
330
+ declare const SelectTrigger: React.ForwardRefExoticComponent<SelectTriggerProps & React.RefAttributes<HTMLButtonElement>>;
331
+ declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
332
+ declare const SelectScrollDownButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
333
+ declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
334
+ declare const SelectLabel: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
335
+ declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
336
+ declare const SelectSeparator: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
337
+ interface SelectProps extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Root> {
338
+ }
339
+ declare function Select({ value: controlled, defaultValue, onValueChange, disabled, open: openProp, defaultOpen, onOpenChange, children, ...rootProps }: SelectProps): React.JSX.Element;
340
+ declare namespace Select {
341
+ var displayName: string;
342
+ }
343
+
344
+ declare const textareaVariants: (props?: ({
345
+ size?: "sm" | "md" | "lg" | null | undefined;
346
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
347
+ interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'>, VariantProps<typeof textareaVariants> {
348
+ resize?: TextareaResize;
349
+ showCount?: boolean;
350
+ footer?: React.ReactNode;
351
+ wrapperClassName?: string;
352
+ background?: FieldControlProps['background'];
353
+ variant?: FieldControlProps['variant'];
354
+ invalid?: boolean;
355
+ }
356
+ type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';
357
+ declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
358
+
359
+ interface ComboboxOption {
360
+ value: string;
361
+ label: string;
362
+ keywords?: readonly string[];
363
+ disabled?: boolean;
364
+ leading?: React.ReactNode;
365
+ }
366
+ interface ComboboxProps {
367
+ options: readonly ComboboxOption[];
368
+ value?: string;
369
+ defaultValue?: string;
370
+ onValueChange?: (value: string) => void;
371
+ placeholder?: string;
372
+ searchPlaceholder?: string;
373
+ /** Accessible name for the search input inside the list surface. */
374
+ searchLabel?: string;
375
+ emptyLabel?: string;
376
+ disabled?: boolean;
377
+ invalid?: boolean;
378
+ triggerClassName?: string;
379
+ contentClassName?: string;
380
+ align?: 'start' | 'center' | 'end';
381
+ 'aria-label'?: string;
382
+ 'aria-describedby'?: string;
383
+ 'aria-required'?: React.AriaAttributes['aria-required'];
384
+ 'aria-invalid'?: React.AriaAttributes['aria-invalid'];
385
+ /** 트리거가 포커스를 잃을 때 호출합니다. RHF touched 처리에 사용합니다. */
386
+ onBlur?: React.FocusEventHandler<HTMLButtonElement>;
387
+ background?: FieldControlProps['background'];
388
+ variant?: FieldControlProps['variant'];
389
+ id?: string;
390
+ }
391
+ /** Searchable single selection that renders as a popover on pointer-fine screens and a Drawer on mobile. */
392
+ declare const Combobox: React.ForwardRefExoticComponent<ComboboxProps & React.RefAttributes<HTMLButtonElement>>;
393
+
394
+ interface FormStackProps extends React.HTMLAttributes<HTMLDivElement> {
395
+ /** 필드 사이 간격. 기본 테마에서 sm 8px, md 16px, lg 24px입니다. */
396
+ gap?: 'sm' | 'md' | 'lg';
397
+ /** PC 열 수. 모바일에서는 항상 한 열입니다. */
398
+ columns?: 1 | 2;
399
+ }
400
+ declare const FormStack: React.ForwardRefExoticComponent<FormStackProps & React.RefAttributes<HTMLDivElement>>;
401
+ interface FormLayoutFieldProps {
402
+ label?: React.ReactNode;
403
+ htmlFor?: string;
404
+ /** 복합 컨트롤의 accessible name을 연결할 label id입니다. */
405
+ labelId?: string;
406
+ required?: boolean;
407
+ description?: React.ReactNode;
408
+ error?: React.ReactNode;
409
+ descriptionId?: string;
410
+ errorId?: string;
411
+ labelClassName?: string;
412
+ className?: string;
413
+ children: React.ReactNode;
414
+ }
415
+ /** @deprecated 새 조합에는 FormField를 사용하세요. 기존 수동 ID 연결 계약을 유지하는 호환 wrapper입니다. */
416
+ declare function FormLayoutField({ children, className, description, descriptionId, error, errorId, htmlFor, label, labelId, labelClassName, required, }: FormLayoutFieldProps): React.JSX.Element;
417
+ declare namespace FormLayoutField {
418
+ var displayName: string;
419
+ }
420
+ /** Daeium의 `Field`와 같은 의미를 명시적으로 드러내는 별칭. */
421
+ declare const FieldLayout: typeof FormLayoutField;
422
+
423
+ interface NumberInputProps extends Omit<InputProps, 'type' | 'value' | 'onChange' | 'inputMode'> {
424
+ /** 천 단위 구분 기호를 표시한다. 기본값은 true다. */
425
+ commaize?: boolean;
426
+ /** 표시 문자열 정렬. */
427
+ textAlign?: 'left' | 'right';
428
+ /** 소비자가 받는 실제 숫자 값. 빈 값은 null이다. */
429
+ value?: number | null;
430
+ onChange?: (value: number | null) => void;
431
+ }
432
+ /** 표시 문자열과 실제 number 값을 분리하는 숫자 입력. */
433
+ declare const NumberInput: React.ForwardRefExoticComponent<NumberInputProps & React.RefAttributes<HTMLInputElement>>;
434
+
435
+ interface PasswordInputProps extends Omit<InputProps, 'type'> {
436
+ showToggle?: boolean;
437
+ }
438
+ /** 비밀번호 표시 상태를 키보드·스크린리더와 함께 제공하는 입력. */
439
+ declare const PasswordInput: React.ForwardRefExoticComponent<PasswordInputProps & React.RefAttributes<HTMLInputElement>>;
440
+
441
+ interface PhoneInputProps extends Omit<InputProps, 'type' | 'value' | 'onChange' | 'inputMode'> {
442
+ value?: string;
443
+ onChange?: (value: string) => void;
444
+ onValidityChange?: (valid: boolean) => void;
445
+ }
446
+ /** 입력 중에도 캐럿 위치를 보존하는 한국 전화번호 입력. */
447
+ declare const PhoneInput: React.ForwardRefExoticComponent<PhoneInputProps & React.RefAttributes<HTMLInputElement>>;
448
+
449
+ interface ManagedFieldProps<Value> extends Omit<FormLayoutFieldProps, 'children' | 'className'> {
450
+ /** 필드 레이아웃에만 적용할 클래스. `className`은 실제 컨트롤에 전달됩니다. */
451
+ containerClassName?: string;
452
+ value?: Value;
453
+ onChange?: (value: Value) => void;
454
+ onAfterChange?: (value: Value) => void;
455
+ }
456
+ interface TextFieldProps extends ManagedFieldProps<string>, Omit<InputProps, 'value' | 'onChange' | 'size'> {
457
+ size?: InputProps['size'];
458
+ submitOnEnter?: boolean;
459
+ }
460
+ declare const TextField: React.ForwardRefExoticComponent<TextFieldProps & React.RefAttributes<HTMLInputElement>>;
461
+ interface PasswordFieldProps extends ManagedFieldProps<string>, Omit<PasswordInputProps, 'value' | 'onChange' | 'size'> {
462
+ size?: PasswordInputProps['size'];
463
+ submitOnEnter?: boolean;
464
+ }
465
+ declare const PasswordField: React.ForwardRefExoticComponent<PasswordFieldProps & React.RefAttributes<HTMLInputElement>>;
466
+ interface NumberFieldProps extends ManagedFieldProps<number | null>, Omit<NumberInputProps, 'value' | 'onChange'> {
467
+ submitOnEnter?: boolean;
468
+ }
469
+ declare const NumberField: React.ForwardRefExoticComponent<NumberFieldProps & React.RefAttributes<HTMLInputElement>>;
470
+ interface PhoneFieldProps extends ManagedFieldProps<string>, Omit<PhoneInputProps, 'value' | 'onChange'> {
471
+ submitOnEnter?: boolean;
472
+ }
473
+ declare const PhoneField: React.ForwardRefExoticComponent<PhoneFieldProps & React.RefAttributes<HTMLInputElement>>;
474
+ interface TextareaFieldProps extends ManagedFieldProps<string>, Omit<TextareaProps, 'value' | 'onChange'> {
475
+ }
476
+ declare const TextareaField: React.ForwardRefExoticComponent<TextareaFieldProps & React.RefAttributes<HTMLTextAreaElement>>;
477
+ interface CheckboxFieldProps extends ManagedFieldProps<boolean>, Omit<CheckboxProps, 'checked' | 'onCheckedChange' | 'onChange' | 'label' | 'value'> {
478
+ invalid?: boolean;
479
+ }
480
+ declare function CheckboxField({ 'aria-describedby': ariaDescribedBy, 'aria-label': ariaLabel, 'aria-invalid': ariaInvalid, className, containerClassName, description, error, htmlFor, id, invalid, label, labelClassName, onAfterChange, onChange, required, value, ...props }: CheckboxFieldProps): React.JSX.Element;
481
+ declare namespace CheckboxField {
482
+ var displayName: string;
483
+ }
484
+ interface RadioOption extends Pick<RadioGroupItemProps, 'value' | 'disabled'> {
485
+ label: React.ReactNode;
486
+ }
487
+ interface RadioGroupFieldProps extends ManagedFieldProps<string>, Omit<React.ComponentPropsWithoutRef<typeof RadioGroup>, 'value' | 'onValueChange' | 'onChange' | 'children'> {
488
+ /** 간단한 라디오 목록을 만들 때 사용합니다. `children`과 함께 쓸 수 없습니다. */
489
+ options?: RadioOption[];
490
+ /** RadioGroupItem을 직접 조합할 때 사용합니다. */
491
+ children?: React.ReactNode;
492
+ invalid?: boolean;
493
+ }
494
+ declare function RadioGroupField({ 'aria-describedby': ariaDescribedBy, 'aria-labelledby': ariaLabelledBy, 'aria-invalid': ariaInvalid, className, containerClassName, children, description, error, htmlFor: _htmlFor, id, invalid, label, labelClassName: _labelClassName, onAfterChange, onChange, options, required, value, ...props }: RadioGroupFieldProps): React.JSX.Element;
495
+ declare namespace RadioGroupField {
496
+ var displayName: string;
497
+ }
498
+ interface SelectOption {
499
+ value: string;
500
+ label: React.ReactNode;
501
+ disabled?: boolean;
502
+ }
503
+ interface SelectFieldProps extends ManagedFieldProps<string>, FieldControlProps, Omit<React.ComponentPropsWithoutRef<typeof Select>, 'value' | 'onValueChange' | 'children'> {
504
+ options: SelectOption[];
505
+ placeholder?: string;
506
+ triggerProps?: React.ComponentPropsWithoutRef<typeof SelectTrigger>;
507
+ /** 트리거에 적용할 추가 클래스. */
508
+ className?: string;
509
+ invalid?: boolean;
510
+ 'aria-describedby'?: string;
511
+ 'aria-invalid'?: React.AriaAttributes['aria-invalid'];
512
+ }
513
+ declare function SelectField({ variant, background, 'aria-describedby': ariaDescribedBy, 'aria-invalid': ariaInvalid, className, containerClassName, description, error, htmlFor: _htmlFor, invalid, label, labelClassName: _labelClassName, onAfterChange, onChange, options, placeholder, required, triggerProps, value, ...props }: SelectFieldProps): React.JSX.Element;
514
+ declare namespace SelectField {
515
+ var displayName: string;
516
+ }
517
+ /** 검색 가능한 선택 필드. Combobox가 PC Popover·모바일 Drawer 전환을 소유한다. */
518
+ interface ComboboxFieldProps extends ManagedFieldProps<string>, Omit<ComboboxProps, 'value' | 'onValueChange' | 'defaultValue' | 'invalid'> {
519
+ invalid?: boolean;
520
+ }
521
+ declare function ComboboxField({ 'aria-describedby': ariaDescribedBy, 'aria-label': ariaLabel, 'aria-invalid': ariaInvalid, containerClassName, description, error, htmlFor: _htmlFor, id, invalid, label, labelClassName, onAfterChange, onChange, required, value, ...props }: ComboboxFieldProps): React.JSX.Element;
522
+ declare namespace ComboboxField {
523
+ var displayName: string;
524
+ }
525
+ interface DateFieldProps extends ManagedFieldProps<string>, Omit<DatePickerProps, 'value' | 'onChange'> {
526
+ }
527
+ declare function DateField({ 'aria-describedby': ariaDescribedBy, 'aria-invalid': ariaInvalid, className, containerClassName, description, id, error, htmlFor, invalid, label, labelClassName, onAfterChange, onChange, required, value, ...props }: DateFieldProps): React.JSX.Element;
528
+ declare namespace DateField {
529
+ var displayName: string;
530
+ }
531
+ interface TimeFieldProps extends ManagedFieldProps<string>, Omit<TimeInputProps, 'value' | 'onChange'> {
532
+ }
533
+ declare function TimeField({ 'aria-describedby': ariaDescribedBy, 'aria-invalid': ariaInvalid, className, containerClassName, description, id, error, htmlFor, invalid, label, labelClassName, onAfterChange, onChange, required, value, ...props }: TimeFieldProps): React.JSX.Element;
534
+ declare namespace TimeField {
535
+ var displayName: string;
536
+ }
537
+ interface DateRangeFieldProps extends ManagedFieldProps<DateRange>, Omit<DateRangePickerProps, 'value' | 'onChange'> {
538
+ }
539
+ declare function DateRangeField({ 'aria-describedby': ariaDescribedBy, 'aria-invalid': ariaInvalid, className, containerClassName, description, id, error, htmlFor, invalid, label, labelClassName, onAfterChange, onChange, required, value, ...props }: DateRangeFieldProps): React.JSX.Element;
540
+ declare namespace DateRangeField {
541
+ var displayName: string;
542
+ }
543
+
544
+ /** 폼 검증 오류에서 사용자에게 보여 줄 첫 번째 메시지를 찾는다. */
545
+ declare function firstInvalidMessage(errors: unknown): string | null;
546
+ interface InvalidSubmitOptions {
547
+ /** 제품의 toast·알림 시스템을 주입한다. 생략하면 메시지를 반환하기만 한다. */
548
+ notify?: (message: string) => void;
549
+ fallback?: string;
550
+ }
551
+ /** 숨겨진/조건부 필드 때문에 조용히 실패하는 제출을 보완하는 프레임워크 독립 핸들러. */
552
+ declare function reportInvalidSubmit(errors: unknown, { fallback, notify }?: InvalidSubmitOptions): string;
553
+
554
+ interface SubmitGuardSchema {
555
+ safeParse: (value: unknown) => {
556
+ success: boolean;
557
+ };
558
+ }
559
+ interface SubmitGuardOptions {
560
+ busy?: boolean;
561
+ busyReason?: string;
562
+ incompleteReason?: string;
563
+ }
564
+ interface SubmitGuard {
565
+ canSubmit: boolean;
566
+ complete: boolean;
567
+ reason: string | null;
568
+ }
569
+ /**
570
+ * 검증 스키마와 현재 값을 연결하는 프레임워크 독립 제출 게이트.
571
+ * React Hook Form 연결은 optional subpath에서 values를 구독해 이 훅에 넘긴다.
572
+ */
573
+ declare function useSubmitGuard(values: unknown, schema: SubmitGuardSchema, { busy, busyReason, incompleteReason }?: SubmitGuardOptions): SubmitGuard;
574
+
575
+ interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {
576
+ asChild?: boolean;
577
+ }
578
+ /** Standalone label. Use Field.Label when the surrounding Field owns IDs and validation. */
579
+ declare const Label: React.ForwardRefExoticComponent<LabelProps & React.RefAttributes<HTMLLabelElement>>;
580
+
581
+ export { InputFrame as $, DateRangePicker as A, type ButtonIcon as B, type CheckboxFieldProps as C, type DateFieldProps as D, type DateRangePickerProps as E, type FileInputProps as F, type FieldControlVariant as G, type FieldControlVariants as H, type InputProps as I, FieldLayout as J, type FileDropzoneVariant as K, type LabelProps as L, type FileDropzoneVariants as M, type NumberFieldProps as N, type FileErrorReason as O, type PasswordFieldProps as P, FileInput as Q, type RadioGroupFieldProps as R, type SubmitGuardOptions as S, type TextFieldProps as T, type FileItem as U, FileUpload as V, FormLayoutField as W, type FormLayoutFieldProps as X, FormStack as Y, type FormStackProps as Z, Input as _, type ComboboxFieldProps as a, type InputSize as a0, type InvalidSubmitOptions as a1, Label as a2, NumberField as a3, NumberInput as a4, type NumberInputProps as a5, PasswordField as a6, PasswordInput as a7, type PasswordInputProps as a8, PhoneField as a9, type TextareaResize as aA, TimeField as aB, TimeInput as aC, type TimeInputElement as aD, type TimeInputProps as aE, checkboxVariants as aF, fileDropAreaVariants as aG, fieldControlVariants as aH, fileDropzoneVariants as aI, fileInputVariants as aJ, formatBytes as aK, getFileName as aL, getFileSize as aM, getItemKey as aN, inputVariants as aO, isImageFile as aP, isPdfFile as aQ, matchesAccept as aR, newLocalId as aS, radioItemVariants as aT, selectTriggerVariants as aU, textareaVariants as aV, useSubmitGuard as aW, PhoneInput as aa, type PhoneInputProps as ab, RadioGroup as ac, RadioGroupField as ad, RadioGroupItem as ae, type RadioGroupItemProps as af, type RadioGroupProps as ag, RadioGroupRoot as ah, Select as ai, SelectContent as aj, SelectField as ak, SelectGroup as al, SelectItem as am, SelectLabel as an, type SelectOption as ao, type SelectProps as ap, SelectScrollDownButton as aq, SelectScrollUpButton as ar, SelectSeparator as as, SelectTrigger as at, type SelectTriggerProps as au, SelectValue as av, TextField as aw, Textarea as ax, TextareaField as ay, type TextareaProps as az, type DateRangeFieldProps as b, type FileUploadProps as c, type PhoneFieldProps as d, type SelectFieldProps as e, type TextareaFieldProps as f, type TimeFieldProps as g, type SubmitGuardSchema as h, type SubmitGuard as i, firstInvalidMessage as j, type FileConstraints as k, type FileError as l, type FieldControlProps as m, Checkbox as n, CheckboxField as o, type CheckboxProps as p, Combobox as q, reportInvalidSubmit as r, ComboboxField as s, type ComboboxOption as t, type ComboboxProps as u, DateField as v, DatePicker as w, type DatePickerProps as x, type DateRange as y, DateRangeField as z };