@leechanyong/ispark-ui 0.2.0 → 0.5.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/dist/index.d.ts CHANGED
@@ -1,8 +1,16 @@
1
+ import { AllowedComponentProps } from 'vue';
2
+ import { ComponentCustomProps } from 'vue';
1
3
  import { ComponentOptionsMixin } from 'vue';
2
4
  import { ComponentProvideOptions } from 'vue';
5
+ import { DateValue } from '@internationalized/date';
3
6
  import { DefineComponent } from 'vue';
4
7
  import { PublicProps } from 'vue';
5
8
  import { Ref } from 'vue';
9
+ import { RendererElement } from 'vue';
10
+ import { RendererNode } from 'vue';
11
+ import { ShallowUnwrapRef } from 'vue';
12
+ import { VNode } from 'vue';
13
+ import { VNodeProps } from 'vue';
6
14
 
7
15
  declare const __VLS_component: DefineComponent<Props, {
8
16
  focus: () => void | undefined;
@@ -13,7 +21,7 @@ click: (event: MouseEvent) => any;
13
21
  }, string, PublicProps, Readonly<Props> & Readonly<{
14
22
  onClick?: ((event: MouseEvent) => any) | undefined;
15
23
  }>, {
16
- variant: "primary" | "secondary" | "ghost" | "danger";
24
+ variant: "primary" | "primary-dark" | "primary-line" | "secondary" | "line-secondary" | "outline" | "ghost" | "dark" | "danger" | "success" | "warning" | "info";
17
25
  size: Size;
18
26
  shape: Shape;
19
27
  as: "button" | "a";
@@ -26,6 +34,40 @@ iconOnly: boolean;
26
34
  rootEl: unknown;
27
35
  }, any>;
28
36
 
37
+ declare const __VLS_component_10: DefineComponent<Props_15, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
38
+ select: (value: string) => any;
39
+ "update:open": (value: boolean) => any;
40
+ }, string, PublicProps, Readonly<Props_15> & Readonly<{
41
+ onSelect?: ((value: string) => any) | undefined;
42
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
43
+ }>, {
44
+ title: string;
45
+ open: boolean;
46
+ side: "top" | "bottom" | "left" | "right";
47
+ sideOffset: number;
48
+ align: "start" | "center" | "end";
49
+ collisionPadding: number;
50
+ contentClass: string;
51
+ openOnHover: boolean;
52
+ hoverCloseDelay: number;
53
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
54
+
55
+ declare const __VLS_component_11: DefineComponent<Props_19, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
56
+ "update:modelValue": (value: string | string[] | undefined) => any;
57
+ change: (value: string | string[] | undefined) => any;
58
+ }, string, PublicProps, Readonly<Props_19> & Readonly<{
59
+ "onUpdate:modelValue"?: ((value: string | string[] | undefined) => any) | undefined;
60
+ onChange?: ((value: string | string[] | undefined) => any) | undefined;
61
+ }>, {
62
+ size: "sm" | "md" | "lg";
63
+ type: "single" | "multiple";
64
+ disabled: boolean;
65
+ modelValue: string | string[];
66
+ defaultValue: string | string[];
67
+ items: AccordionItemDef[];
68
+ collapsible: boolean;
69
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
70
+
29
71
  declare const __VLS_component_2: DefineComponent<Props_2, {
30
72
  focus: () => void | undefined;
31
73
  blur: () => void | undefined;
@@ -34,17 +76,23 @@ el: Ref<HTMLInputElement | undefined, HTMLInputElement | undefined>;
34
76
  search: (value: string | number) => any;
35
77
  "update:modelValue": (value: string | number) => any;
36
78
  enter: (value: string | number) => any;
79
+ clear: () => any;
37
80
  }, string, PublicProps, Readonly<Props_2> & Readonly<{
38
81
  onSearch?: ((value: string | number) => any) | undefined;
39
82
  "onUpdate:modelValue"?: ((value: string | number) => any) | undefined;
40
83
  onEnter?: ((value: string | number) => any) | undefined;
84
+ onClear?: (() => any) | undefined;
41
85
  }>, {
42
86
  size: InputSize;
43
87
  shape: "rounded" | "pill";
44
- type: "text" | "search" | "password" | "email" | "tel";
88
+ type: "text" | "search" | "password" | "email" | "tel" | "url";
45
89
  disabled: boolean;
90
+ label: string;
46
91
  desc: string;
47
92
  modelValue: string | number;
93
+ labelHidden: boolean;
94
+ error: boolean;
95
+ errorMessage: string;
48
96
  placeholder: string;
49
97
  readonly: boolean;
50
98
  required: boolean;
@@ -59,11 +107,98 @@ numberOnly: boolean;
59
107
  allowDecimal: boolean;
60
108
  allowNegative: boolean;
61
109
  decimals: number;
110
+ clearable: boolean;
111
+ showPasswordToggle: boolean;
62
112
  searchAriaLabel: string;
63
113
  }, {}, {}, {}, string, ComponentProvideOptions, false, {
64
114
  inputRef: HTMLInputElement;
65
115
  }, any>;
66
116
 
117
+ declare const __VLS_component_3: DefineComponent<Props_4, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
118
+ "update:open": (value: boolean) => any;
119
+ close: () => any;
120
+ }, string, PublicProps, Readonly<Props_4> & Readonly<{
121
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
122
+ onClose?: (() => any) | undefined;
123
+ }>, {
124
+ size: "sm" | "md" | "lg" | "xl";
125
+ title: string;
126
+ open: boolean;
127
+ showClose: boolean;
128
+ showOverlay: boolean;
129
+ showFullscreen: boolean;
130
+ closeOnOverlayClick: boolean;
131
+ closeOnEscape: boolean;
132
+ customClass: string;
133
+ maxWidth: string;
134
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
135
+
136
+ declare const __VLS_component_4: DefineComponent<Props_5, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<Props_5> & Readonly<{}>, {
137
+ title: string;
138
+ icon: string;
139
+ description: string;
140
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
141
+
142
+ declare const __VLS_component_5: DefineComponent<Props_6, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<Props_6> & Readonly<{}>, {
143
+ variant: BadgeVariant;
144
+ size: BadgeSize;
145
+ iconOnly: boolean;
146
+ colorHex: string;
147
+ bgAlpha: number;
148
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLSpanElement>;
149
+
150
+ declare const __VLS_component_6: DefineComponent<Props_7, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<Props_7> & Readonly<{}>, {
151
+ ariaLabel: string;
152
+ wrap: boolean;
153
+ gap: number | string;
154
+ direction: "row" | "column";
155
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
156
+
157
+ declare const __VLS_component_7: DefineComponent<Props_10, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
158
+ "update:modelValue": (value: boolean) => any;
159
+ change: (value: boolean) => any;
160
+ }, string, PublicProps, Readonly<Props_10> & Readonly<{
161
+ "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
162
+ onChange?: ((value: boolean) => any) | undefined;
163
+ }>, {
164
+ disabled: boolean;
165
+ label: string;
166
+ labelHidden: boolean;
167
+ id: string;
168
+ indeterminate: boolean;
169
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {
170
+ inputRef: HTMLInputElement;
171
+ }, HTMLLabelElement>;
172
+
173
+ declare const __VLS_component_8: DefineComponent<Props_11, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
174
+ "update:modelValue": (value: RadioValue) => any;
175
+ change: (value: RadioValue) => any;
176
+ }, string, PublicProps, Readonly<Props_11> & Readonly<{
177
+ "onUpdate:modelValue"?: ((value: RadioValue) => any) | undefined;
178
+ onChange?: ((value: RadioValue) => any) | undefined;
179
+ }>, {
180
+ disabled: boolean;
181
+ label: string;
182
+ labelHidden: boolean;
183
+ name: string;
184
+ id: string;
185
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLLabelElement>;
186
+
187
+ declare const __VLS_component_9: DefineComponent<Props_13, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<Props_13> & Readonly<{}>, {
188
+ content: string;
189
+ side: "top" | "right" | "bottom" | "left";
190
+ sideOffset: number;
191
+ align: "start" | "center" | "end";
192
+ contentClass: string;
193
+ fontSize: string;
194
+ delayDuration: number;
195
+ showArrow: boolean;
196
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
197
+
198
+ declare type __VLS_PrettifyLocal<T> = {
199
+ [K in keyof T]: T[K];
200
+ } & {};
201
+
67
202
  declare function __VLS_template(): {
68
203
  attrs: Partial<{}>;
69
204
  slots: {
@@ -77,9 +212,42 @@ declare function __VLS_template(): {
77
212
  rootEl: any;
78
213
  };
79
214
 
215
+ declare function __VLS_template_10(): {
216
+ attrs: Partial<{}>;
217
+ slots: {
218
+ trigger?(_: {}): any;
219
+ trigger?(_: {}): any;
220
+ };
221
+ refs: {};
222
+ rootEl: any;
223
+ };
224
+
225
+ declare function __VLS_template_11(): {
226
+ attrs: Partial<{}>;
227
+ slots: {
228
+ default?(_: {}): any;
229
+ default?(_: {}): any;
230
+ header?(_: {
231
+ item: AccordionItemDef;
232
+ }): any;
233
+ header?(_: {
234
+ item: AccordionItemDef;
235
+ }): any;
236
+ content?(_: {
237
+ item: AccordionItemDef;
238
+ }): any;
239
+ content?(_: {
240
+ item: AccordionItemDef;
241
+ }): any;
242
+ };
243
+ refs: {};
244
+ rootEl: any;
245
+ };
246
+
80
247
  declare function __VLS_template_2(): {
81
248
  attrs: Partial<{}>;
82
249
  slots: {
250
+ label?(_: {}): any;
83
251
  'icon-left'?(_: {}): any;
84
252
  'icon-right'?(_: {}): any;
85
253
  };
@@ -89,31 +257,221 @@ declare function __VLS_template_2(): {
89
257
  rootEl: any;
90
258
  };
91
259
 
260
+ declare function __VLS_template_3(): {
261
+ attrs: Partial<{}>;
262
+ slots: {
263
+ header?(_: {}): any;
264
+ default?(_: {}): any;
265
+ footer?(_: {}): any;
266
+ };
267
+ refs: {};
268
+ rootEl: any;
269
+ };
270
+
271
+ declare function __VLS_template_4(): {
272
+ attrs: Partial<{}>;
273
+ slots: {
274
+ default?(_: {}): any;
275
+ };
276
+ refs: {};
277
+ rootEl: any;
278
+ };
279
+
280
+ declare function __VLS_template_5(): {
281
+ attrs: Partial<{}>;
282
+ slots: {
283
+ 'icon-left'?(_: {}): any;
284
+ default?(_: {}): any;
285
+ 'icon-right'?(_: {}): any;
286
+ };
287
+ refs: {};
288
+ rootEl: HTMLSpanElement;
289
+ };
290
+
291
+ declare function __VLS_template_6(): {
292
+ attrs: Partial<{}>;
293
+ slots: {
294
+ default?(_: {}): any;
295
+ };
296
+ refs: {};
297
+ rootEl: HTMLDivElement;
298
+ };
299
+
300
+ declare function __VLS_template_7(): {
301
+ attrs: Partial<{}>;
302
+ slots: {
303
+ default?(_: {}): any;
304
+ };
305
+ refs: {
306
+ inputRef: HTMLInputElement;
307
+ };
308
+ rootEl: HTMLLabelElement;
309
+ };
310
+
311
+ declare function __VLS_template_8(): {
312
+ attrs: Partial<{}>;
313
+ slots: {
314
+ default?(_: {}): any;
315
+ };
316
+ refs: {};
317
+ rootEl: HTMLLabelElement;
318
+ };
319
+
320
+ declare function __VLS_template_9(): {
321
+ attrs: Partial<{}>;
322
+ slots: {
323
+ default?(_: {}): any;
324
+ content?(_: {}): any;
325
+ };
326
+ refs: {};
327
+ rootEl: any;
328
+ };
329
+
92
330
  declare type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
93
331
 
332
+ declare type __VLS_TemplateResult_10 = ReturnType<typeof __VLS_template_10>;
333
+
334
+ declare type __VLS_TemplateResult_11 = ReturnType<typeof __VLS_template_11>;
335
+
94
336
  declare type __VLS_TemplateResult_2 = ReturnType<typeof __VLS_template_2>;
95
337
 
338
+ declare type __VLS_TemplateResult_3 = ReturnType<typeof __VLS_template_3>;
339
+
340
+ declare type __VLS_TemplateResult_4 = ReturnType<typeof __VLS_template_4>;
341
+
342
+ declare type __VLS_TemplateResult_5 = ReturnType<typeof __VLS_template_5>;
343
+
344
+ declare type __VLS_TemplateResult_6 = ReturnType<typeof __VLS_template_6>;
345
+
346
+ declare type __VLS_TemplateResult_7 = ReturnType<typeof __VLS_template_7>;
347
+
348
+ declare type __VLS_TemplateResult_8 = ReturnType<typeof __VLS_template_8>;
349
+
350
+ declare type __VLS_TemplateResult_9 = ReturnType<typeof __VLS_template_9>;
351
+
96
352
  declare type __VLS_WithTemplateSlots<T, S> = T & {
97
353
  new (): {
98
354
  $slots: S;
99
355
  };
100
356
  };
101
357
 
358
+ declare type __VLS_WithTemplateSlots_10<T, S> = T & {
359
+ new (): {
360
+ $slots: S;
361
+ };
362
+ };
363
+
364
+ declare type __VLS_WithTemplateSlots_11<T, S> = T & {
365
+ new (): {
366
+ $slots: S;
367
+ };
368
+ };
369
+
102
370
  declare type __VLS_WithTemplateSlots_2<T, S> = T & {
103
371
  new (): {
104
372
  $slots: S;
105
373
  };
106
374
  };
107
375
 
376
+ declare type __VLS_WithTemplateSlots_3<T, S> = T & {
377
+ new (): {
378
+ $slots: S;
379
+ };
380
+ };
381
+
382
+ declare type __VLS_WithTemplateSlots_4<T, S> = T & {
383
+ new (): {
384
+ $slots: S;
385
+ };
386
+ };
387
+
388
+ declare type __VLS_WithTemplateSlots_5<T, S> = T & {
389
+ new (): {
390
+ $slots: S;
391
+ };
392
+ };
393
+
394
+ declare type __VLS_WithTemplateSlots_6<T, S> = T & {
395
+ new (): {
396
+ $slots: S;
397
+ };
398
+ };
399
+
400
+ declare type __VLS_WithTemplateSlots_7<T, S> = T & {
401
+ new (): {
402
+ $slots: S;
403
+ };
404
+ };
405
+
406
+ declare type __VLS_WithTemplateSlots_8<T, S> = T & {
407
+ new (): {
408
+ $slots: S;
409
+ };
410
+ };
411
+
412
+ declare type __VLS_WithTemplateSlots_9<T, S> = T & {
413
+ new (): {
414
+ $slots: S;
415
+ };
416
+ };
417
+
418
+ export declare interface AccordionItemDef {
419
+ /** 고유 식별자 — v-model 값과 매칭 */
420
+ value: string;
421
+ /** 헤더에 표시할 제목 */
422
+ title: string;
423
+ /** 펼쳤을 때 보일 내용 (텍스트). 더 복잡한 콘텐츠는 #content 슬롯 사용 */
424
+ content?: string;
425
+ /** 비활성 — 클릭/키보드 차단 */
426
+ disabled?: boolean;
427
+ }
428
+
429
+ export declare type BadgeSize = 'xs' | 'sm' | 'md' | 'lg';
430
+
431
+ export declare type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';
432
+
433
+ /** 토스트 수동 닫기 */
434
+ export declare function closeToast(id: number): void;
435
+
436
+ /** 시작일/종료일 쌍 — radix-vue DateRange와 동일 형태 */
437
+ export declare interface DateRange {
438
+ start: DateValue | undefined;
439
+ end: DateValue | undefined;
440
+ }
441
+
442
+ export declare interface DropdownMenuItemDef {
443
+ /** 메뉴 항목 레이블 */
444
+ label: string;
445
+ /** ispark-ui 아이콘 클래스 (예: 'icon-edit'). 24·16 사이즈 클래스 자동(size-16) */
446
+ icon?: string;
447
+ /** 고유 식별자 (필수) — @select 이벤트로 부모에 전달 */
448
+ value: string;
449
+ /** 위험 액션 시맨틱 (삭제 등) — 빨강 텍스트 */
450
+ color?: 'default' | 'danger';
451
+ /** 항목 비활성 */
452
+ disabled?: boolean;
453
+ }
454
+
108
455
  export declare const INPUT_SIZES: readonly ["sm", "md", "lg", "auth"];
109
456
 
110
457
  export declare type InputSize = (typeof INPUT_SIZES)[number];
111
458
 
459
+ /**
460
+ * 화면에 Toast 표시 (placement별 stack).
461
+ *
462
+ * @example
463
+ * openToast('저장되었습니다.')
464
+ * openToast({ message: '저장 완료', type: 'success' })
465
+ * openToast({ message: '에러', type: 'error', placement: 'bottom-right' })
466
+ * openToast({ message: '오래 유지', duration: 0 }) // 수동 close만
467
+ */
468
+ export declare function openToast(options: ToastOptions | string): number;
469
+
112
470
  declare interface Props {
113
471
  /**
114
472
  * 시멘틱 variant — primary(강조) / secondary(보조) / ghost(트리거) / danger(파괴)
115
473
  */
116
- variant?: 'primary' | 'secondary' | 'ghost' | 'danger';
474
+ variant?: 'primary' | 'primary-dark' | 'primary-line' | 'secondary' | 'line-secondary' | 'outline' | 'ghost' | 'dark' | 'danger' | 'success' | 'warning' | 'info';
117
475
  /**
118
476
  * 사이즈 — xs(24px) / sm(28px) / md(32px·기본) / lg(40px)
119
477
  */
@@ -152,6 +510,176 @@ declare interface Props {
152
510
  ariaLabel?: string;
153
511
  }
154
512
 
513
+ declare interface Props_10 {
514
+ modelValue: boolean;
515
+ /** 라벨 텍스트. slot도 가능. */
516
+ label?: string;
517
+ /** 시각만 숨김(SR에는 노출) */
518
+ labelHidden?: boolean;
519
+ /** 비활성 — 클릭 차단 */
520
+ disabled?: boolean;
521
+ /**
522
+ * 부분 체크(mixed) 상태. modelValue=false일 때만 시각적으로 dash 표시.
523
+ * 주로 트리/리스트의 부분 선택 헤더 체크박스에 사용 (예: UiTable 전체 선택 컬럼).
524
+ */
525
+ indeterminate?: boolean;
526
+ /** id 명시 — 미지정 시 useId() 자동 생성 (SSR 안전) */
527
+ id?: string;
528
+ }
529
+
530
+ declare interface Props_11 {
531
+ /** 그룹 공유 v-model 값. 이 라디오의 value와 일치하면 checked */
532
+ modelValue: RadioValue;
533
+ /** 이 라디오 고유 값 — 선택 시 modelValue에 이 값이 emit됨 */
534
+ value: RadioValue;
535
+ /** 같은 그룹 라디오는 동일 name 공유 (브라우저 native toggle). 미지정 시 자동 생성 */
536
+ name?: string;
537
+ /** 라벨 텍스트 (slot도 가능, slot 우선) */
538
+ label?: string;
539
+ /** 시각만 숨김(SR 노출) */
540
+ labelHidden?: boolean;
541
+ /** 비활성 */
542
+ disabled?: boolean;
543
+ /** input id 명시. 미지정 시 useId() 자동 (SSR 안전) */
544
+ id?: string;
545
+ }
546
+
547
+ declare interface Props_12 {
548
+ modelValue?: string;
549
+ placeholder?: string;
550
+ disabled?: boolean;
551
+ readonly?: boolean;
552
+ /** 초기 표시 rows. autoResize=true면 입력 따라 자동 확장 (기본 1 → autoResize로 콘텐츠 맞춤) */
553
+ rows?: number;
554
+ /** 입력에 따라 scrollHeight로 자동 높이 조절. 기본 true */
555
+ autoResize?: boolean;
556
+ maxLength?: number;
557
+ /** autoResize 한계 — N줄 초과 시 scroll. 기본 10 */
558
+ maxRows?: number;
559
+ radius?: 'sm' | 'base' | 'lg';
560
+ /** 테두리 표시 (기본 false — 외부에서 wrap 스타일 입히는 경우 대비) */
561
+ border?: boolean;
562
+ size?: 'sm' | 'md' | 'lg';
563
+ /** 브라우저 맞춤법 밑줄. 기본 true */
564
+ spellcheck?: boolean;
565
+ label?: string;
566
+ labelHidden?: boolean;
567
+ /** 필수 표시 — 라벨에 * 표기 + HTML required */
568
+ required?: boolean;
569
+ /** 에러 상태. errorMessage가 있으면 자동 true */
570
+ error?: boolean;
571
+ errorMessage?: string;
572
+ desc?: string;
573
+ /** id 명시 — 미지정 시 useId() 자동 (SSR 안전) */
574
+ id?: string;
575
+ /** maxLength 지정 시 우하단 'n / max' 카운터 표시. 기본 false */
576
+ showCounter?: boolean;
577
+ }
578
+
579
+ declare interface Props_13 {
580
+ /** 툴팁 본문 텍스트. content 슬롯 지정 시 무시 */
581
+ content?: string;
582
+ /** radix portal 콘텐츠 박스 추가 클래스 (페이지별 스타일 오버라이드) */
583
+ contentClass?: string;
584
+ /** 본문 글자 크기 (예: '11px'). 비우면 SCSS 기본($font-size-xs) */
585
+ fontSize?: string;
586
+ side?: 'top' | 'right' | 'bottom' | 'left';
587
+ sideOffset?: number;
588
+ align?: 'start' | 'center' | 'end';
589
+ /** hover 후 표시 지연 (ms). 기본 200 */
590
+ delayDuration?: number;
591
+ /** 화살표 표시 (기본 true) */
592
+ showArrow?: boolean;
593
+ }
594
+
595
+ declare interface Props_14 {
596
+ /** 현재 페이지 (1-indexed). v-model */
597
+ modelValue: number;
598
+ /** 전체 항목 수 */
599
+ totalCount: number;
600
+ /** 페이지당 항목 수. 기본 10 */
601
+ pageSize?: number;
602
+ /** 총 N{label} — 예: '개', '건', '명' */
603
+ totalLabel?: string;
604
+ /** 이전/다음 버튼 라벨 */
605
+ prevLabel?: string;
606
+ nextLabel?: string;
607
+ /** 좌측 '총 N개' 표시. 기본 true */
608
+ showTotal?: boolean;
609
+ /** 우측 'n-m / total' 표시. 기본 true */
610
+ showRange?: boolean;
611
+ /** 양 끝 처음/마지막 페이지 «/» 버튼 표시. 페이지 많은 케이스 권장. 기본 false */
612
+ showFirstLast?: boolean;
613
+ }
614
+
615
+ declare interface Props_15 {
616
+ items: DropdownMenuItemDef[];
617
+ /** 상단 비클릭 라벨 (DropdownMenuLabel) — 구역 안내용 */
618
+ title?: string;
619
+ /** 제어 모드: v-model:open */
620
+ open?: boolean;
621
+ side?: 'top' | 'bottom' | 'left' | 'right';
622
+ align?: 'start' | 'center' | 'end';
623
+ sideOffset?: number;
624
+ /** 뷰포트 경계 최소 여백 (flip 기준) */
625
+ collisionPadding?: number;
626
+ /** 트리거 hover 시 자동 오픈 */
627
+ openOnHover?: boolean;
628
+ /** hover 해제 후 닫힘 지연 ms. 너무 짧으면 trigger→content 이동 중 깜빡임 발생. 기본 300 */
629
+ hoverCloseDelay?: number;
630
+ /** 포털 콘텐츠에 추가 클래스 (글로벌 SCSS override 진입점) */
631
+ contentClass?: string;
632
+ }
633
+
634
+ declare interface Props_16 {
635
+ modelValue: string;
636
+ tabs: TabItem[];
637
+ /** 탭 크기 — sm(36px) / md(40px·기본) / lg(48px) */
638
+ size?: 'sm' | 'md' | 'lg';
639
+ /** 정렬 — left / center(기본 max-width 800px) / right / stretch(균등 분할) */
640
+ align?: 'left' | 'center' | 'right' | 'stretch';
641
+ /** role="tablist"의 aria-label */
642
+ ariaLabel?: string;
643
+ }
644
+
645
+ declare interface Props_17 {
646
+ modelValue?: DateValue;
647
+ type?: 'date' | 'datetime' | 'month';
648
+ size?: 'xs' | 'sm' | 'md' | 'lg';
649
+ disabled?: boolean;
650
+ locale?: string;
651
+ minValue?: DateValue;
652
+ maxValue?: DateValue;
653
+ /** 트리거 버튼 aria-label — 미지정 시 type 기반 기본값 ("날짜 선택" / "날짜·시간 선택" / "월 선택") */
654
+ triggerLabel?: string;
655
+ }
656
+
657
+ declare interface Props_18 {
658
+ modelValue?: DateRange;
659
+ size?: 'xs' | 'sm' | 'md' | 'lg';
660
+ disabled?: boolean;
661
+ locale?: string;
662
+ minValue?: DateValue;
663
+ maxValue?: DateValue;
664
+ }
665
+
666
+ declare interface Props_19 {
667
+ /** items 배열로 간단하게 렌더 (없으면 기본 슬롯 사용) */
668
+ items?: AccordionItemDef[];
669
+ /** single: 하나만 열림 / multiple: 여러 개 동시 열림 */
670
+ type?: 'single' | 'multiple';
671
+ /** v-model — single이면 string, multiple이면 string[] */
672
+ modelValue?: string | string[];
673
+ /** 초기 열림 상태 (uncontrolled) */
674
+ defaultValue?: string | string[];
675
+ /** single 모드에서 열린 항목 다시 클릭 시 닫을 수 있는지 */
676
+ collapsible?: boolean;
677
+ /** 전체 비활성 */
678
+ disabled?: boolean;
679
+ /** 크기 — sm / md(기본) / lg */
680
+ size?: 'sm' | 'md' | 'lg';
681
+ }
682
+
155
683
  declare interface Props_2 {
156
684
  /** v-model 양방향 바인딩 값 */
157
685
  modelValue?: string | number;
@@ -159,7 +687,27 @@ declare interface Props_2 {
159
687
  * input HTML type — `search`는 내부적으로 text + 우측 검색 아이콘 자동.
160
688
  * `number`는 사용 금지 (한글 IME 깜빡임) → `numberOnly` prop 사용.
161
689
  */
162
- type?: 'text' | 'search' | 'password' | 'email' | 'tel';
690
+ type?: 'text' | 'search' | 'password' | 'email' | 'tel' | 'url';
691
+ /**
692
+ * label 텍스트 — `<label for>` 자동 연결. label slot이 있으면 그것을 우선.
693
+ * `id` prop이 없어도 자동 생성된 id로 연결됨.
694
+ */
695
+ label?: string;
696
+ /**
697
+ * label 시각적 숨김 — DOM에는 있지만 CSS로 숨김. 스크린리더는 인지.
698
+ * search input에서 placeholder만 노출하고 싶을 때.
699
+ */
700
+ labelHidden?: boolean;
701
+ /**
702
+ * 에러 상태 — input에 빨간 테두리 + `aria-invalid="true"` 자동.
703
+ * `errorMessage`가 있으면 별도 지정 안 해도 자동 true.
704
+ */
705
+ error?: boolean;
706
+ /**
707
+ * 에러 메시지 — 비어있지 않으면 `error: true` 자동 + 빨간 텍스트로 표시.
708
+ * input의 `aria-describedby`가 이 메시지로 연결 (desc보다 우선).
709
+ */
710
+ errorMessage?: string;
163
711
  /** 입력 영역 플레이스홀더 텍스트 */
164
712
  placeholder?: string;
165
713
  /** 비활성화 — 입력 차단 + opacity 0.5 */
@@ -223,10 +771,115 @@ declare interface Props_2 {
223
771
  * 입력 즉시 초과 자릿수 제거. 예: `decimals=2` → "0.123" 입력 시 "0.12"로 자동 보정.
224
772
  */
225
773
  decimals?: number;
774
+ /**
775
+ * 입력값 삭제 버튼 — 값이 비어있지 않고 disabled/readonly 아닐 때 우측 X 표시.
776
+ * 클릭 시 값 비움 + input re-focus + `clear` 이벤트 발생.
777
+ */
778
+ clearable?: boolean;
779
+ /**
780
+ * 비밀번호 표시/숨김 토글 — `type="password"`일 때만 동작.
781
+ * 눈 아이콘 클릭으로 text↔password 전환.
782
+ */
783
+ showPasswordToggle?: boolean;
226
784
  /** 검색 버튼 aria-label (type="search"일 때만, 기본 "검색") */
227
785
  searchAriaLabel?: string;
228
786
  }
229
787
 
788
+ declare interface Props_3 {
789
+ modelValue?: string | number;
790
+ options: SelectOption[];
791
+ placeholder?: string;
792
+ label?: string;
793
+ labelHidden?: boolean;
794
+ required?: boolean;
795
+ id?: string;
796
+ disabled?: boolean;
797
+ size?: SelectSize;
798
+ shape?: 'rounded' | 'pill';
799
+ error?: boolean;
800
+ /**
801
+ * 에러 메시지 — 비어있지 않으면 `error: true` 자동 + 빨간 텍스트로 표시.
802
+ */
803
+ errorMessage?: string;
804
+ desc?: string;
805
+ }
806
+
807
+ declare interface Props_4 {
808
+ open?: boolean;
809
+ title?: string;
810
+ size?: 'sm' | 'md' | 'lg' | 'xl';
811
+ showClose?: boolean;
812
+ showOverlay?: boolean;
813
+ showFullscreen?: boolean;
814
+ closeOnOverlayClick?: boolean;
815
+ closeOnEscape?: boolean;
816
+ customClass?: string;
817
+ maxWidth?: string;
818
+ }
819
+
820
+ declare interface Props_5 {
821
+ /** 아이콘 클래스명 (예: 'icon-search') */
822
+ icon?: string;
823
+ /** 메인 텍스트 */
824
+ title?: string;
825
+ /** 보조 설명 */
826
+ description?: string;
827
+ }
828
+
829
+ declare interface Props_6 {
830
+ /** 시맨틱 variant — 도메인 특화 색은 colorHex 사용 */
831
+ variant?: BadgeVariant;
832
+ size?: BadgeSize;
833
+ /** 아이콘 only (정사각형, 텍스트 미렌더) */
834
+ iconOnly?: boolean;
835
+ /** 지정 시 variant 색상 대신 이 컬러 기반(text + bg tinted)으로 표시. 6자리/3자리 hex 지원 */
836
+ colorHex?: string;
837
+ /** 배경 투명도 (0~1). 기본 0.12 */
838
+ bgAlpha?: number;
839
+ }
840
+
841
+ declare interface Props_7 {
842
+ /** badge 사이 간격 — number는 px, string은 그대로 (예: '8px', '0.5rem'). 기본 8 */
843
+ gap?: number | string;
844
+ /** 배치 방향. 기본 'row' */
845
+ direction?: 'row' | 'column';
846
+ /** 한 줄을 넘으면 다음 줄로 wrap. 기본 true */
847
+ wrap?: boolean;
848
+ /** 그룹 라벨 (스크린리더용). 예: '상태', '카테고리' */
849
+ ariaLabel?: string;
850
+ }
851
+
852
+ declare interface Props_8 {
853
+ /** 로딩 텍스트. 빈 문자열이면 텍스트 미렌더 + aria-label='로딩 중'로 SR 안내 */
854
+ text?: string;
855
+ /** 오버레이(dim) 모드 — viewport 전체 fixed + 반투명 dim */
856
+ overlay?: boolean;
857
+ }
858
+
859
+ declare interface Props_9 {
860
+ modelValue: boolean;
861
+ /** 비활성 — 클릭/키보드 토글 차단 */
862
+ disabled?: boolean;
863
+ /** 라벨 텍스트 (label htmlFor → button id 자동 매칭) */
864
+ label?: string;
865
+ /** 라벨을 시각적으로만 숨김 (SR에는 노출) */
866
+ labelHidden?: boolean;
867
+ /** id 명시 — 미지정 시 useId() 자동 생성 (SSR 안전) */
868
+ id?: string;
869
+ }
870
+
871
+ declare type RadioValue = string | number | boolean;
872
+
873
+ export declare const SELECT_SIZES: readonly ["xs", "sm", "md", "lg", "auth"];
874
+
875
+ export declare interface SelectOption {
876
+ label: string;
877
+ value: string | number;
878
+ disabled?: boolean;
879
+ }
880
+
881
+ export declare type SelectSize = (typeof SELECT_SIZES)[number];
882
+
230
883
  export declare type Shape = (typeof SHAPES)[number];
231
884
 
232
885
  export declare const SHAPES: readonly ["rounded", "pill", "circle"];
@@ -235,8 +888,255 @@ export declare type Size = (typeof SIZES)[number];
235
888
 
236
889
  export declare const SIZES: readonly ["xs", "sm", "md", "lg"];
237
890
 
891
+ export declare interface TabItem {
892
+ /** 탭 라벨 */
893
+ label: string;
894
+ /** 고유 식별자 — v-model 값과 매칭 */
895
+ value: string;
896
+ /** 아이콘 클래스명 (예: 'icon-edit') */
897
+ icon?: string;
898
+ /** 우측 카운트 배지 (예: 미확인 개수) */
899
+ count?: number | string;
900
+ /** 비활성 — 클릭/키보드 모두 차단 */
901
+ disabled?: boolean;
902
+ }
903
+
904
+ export declare interface TableColumn {
905
+ key: string;
906
+ label: string;
907
+ width?: string;
908
+ align?: 'left' | 'center' | 'right';
909
+ headerAlign?: 'left' | 'center' | 'right';
910
+ sortable?: boolean;
911
+ sortType?: 'auto' | 'string' | 'number' | 'date';
912
+ }
913
+
914
+ /** 내부 toast 항목 — UiToast.vue 렌더용 */
915
+ export declare interface ToastItem {
916
+ id: number;
917
+ message: string;
918
+ type: ToastType;
919
+ duration: number;
920
+ placement: ToastPlacement;
921
+ }
922
+
923
+ /** openToast 호출 옵션 */
924
+ export declare interface ToastOptions {
925
+ message: string;
926
+ type?: ToastType;
927
+ /** 표시 시간(ms). 기본 2500. 0 이하면 자동 닫기 비활성 (수동 close만) */
928
+ duration?: number;
929
+ placement?: ToastPlacement;
930
+ }
931
+
932
+ /** Toast 표시 위치 — 4 placement별로 별도 stack */
933
+ export declare type ToastPlacement = 'top-center' | 'top-right' | 'bottom-center' | 'bottom-right';
934
+
935
+ /** Toast 시멘틱 타입 */
936
+ export declare type ToastType = 'success' | 'error' | 'warning' | 'info';
937
+
938
+ export declare const UiAccordion: __VLS_WithTemplateSlots_11<typeof __VLS_component_11, __VLS_TemplateResult_11["slots"]>;
939
+
940
+ export declare const UiBadge: __VLS_WithTemplateSlots_5<typeof __VLS_component_5, __VLS_TemplateResult_5["slots"]>;
941
+
942
+ export declare const UiBadgeGroup: __VLS_WithTemplateSlots_6<typeof __VLS_component_6, __VLS_TemplateResult_6["slots"]>;
943
+
238
944
  export declare const UiButton: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
239
945
 
946
+ export declare const UiCheckbox: __VLS_WithTemplateSlots_7<typeof __VLS_component_7, __VLS_TemplateResult_7["slots"]>;
947
+
948
+ export declare const UiDatePicker: DefineComponent<Props_17, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
949
+ "update:modelValue": (value: DateValue | undefined) => any;
950
+ }, string, PublicProps, Readonly<Props_17> & Readonly<{
951
+ "onUpdate:modelValue"?: ((value: DateValue | undefined) => any) | undefined;
952
+ }>, {
953
+ size: "xs" | "sm" | "md" | "lg";
954
+ type: "date" | "datetime" | "month";
955
+ disabled: boolean;
956
+ modelValue: DateValue;
957
+ locale: string;
958
+ minValue: DateValue;
959
+ maxValue: DateValue;
960
+ triggerLabel: string;
961
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {
962
+ monthCellRefs: HTMLButtonElement[];
963
+ }, HTMLDivElement>;
964
+
965
+ export declare const UiDateRangePicker: DefineComponent<Props_18, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
966
+ "update:modelValue": (value: DateRange) => any;
967
+ }, string, PublicProps, Readonly<Props_18> & Readonly<{
968
+ "onUpdate:modelValue"?: ((value: DateRange) => any) | undefined;
969
+ }>, {
970
+ size: "xs" | "sm" | "md" | "lg";
971
+ disabled: boolean;
972
+ modelValue: DateRange;
973
+ locale: string;
974
+ minValue: DateValue;
975
+ maxValue: DateValue;
976
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
977
+
978
+ export declare const UiDropdownMenu: __VLS_WithTemplateSlots_10<typeof __VLS_component_10, __VLS_TemplateResult_10["slots"]>;
979
+
980
+ export declare const UiEmpty: __VLS_WithTemplateSlots_4<typeof __VLS_component_4, __VLS_TemplateResult_4["slots"]>;
981
+
240
982
  export declare const UiInput: __VLS_WithTemplateSlots_2<typeof __VLS_component_2, __VLS_TemplateResult_2["slots"]>;
241
983
 
984
+ export declare const UiLoading: DefineComponent<Props_8, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<Props_8> & Readonly<{}>, {
985
+ text: string;
986
+ overlay: boolean;
987
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
988
+
989
+ export declare const UiModal: __VLS_WithTemplateSlots_3<typeof __VLS_component_3, __VLS_TemplateResult_3["slots"]>;
990
+
991
+ export declare const UiPagination: DefineComponent<Props_14, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
992
+ "update:modelValue": (page: number) => any;
993
+ change: (page: number) => any;
994
+ }, string, PublicProps, Readonly<Props_14> & Readonly<{
995
+ "onUpdate:modelValue"?: ((page: number) => any) | undefined;
996
+ onChange?: ((page: number) => any) | undefined;
997
+ }>, {
998
+ pageSize: number;
999
+ totalLabel: string;
1000
+ prevLabel: string;
1001
+ nextLabel: string;
1002
+ showTotal: boolean;
1003
+ showRange: boolean;
1004
+ showFirstLast: boolean;
1005
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
1006
+
1007
+ export declare const UiRadio: __VLS_WithTemplateSlots_8<typeof __VLS_component_8, __VLS_TemplateResult_8["slots"]>;
1008
+
1009
+ export declare const UiSelect: DefineComponent<Props_3, {
1010
+ focus: () => void;
1011
+ }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
1012
+ "update:modelValue": (value: string | number) => any;
1013
+ change: (value: string | number) => any;
1014
+ }, string, PublicProps, Readonly<Props_3> & Readonly<{
1015
+ "onUpdate:modelValue"?: ((value: string | number) => any) | undefined;
1016
+ onChange?: ((value: string | number) => any) | undefined;
1017
+ }>, {
1018
+ size: SelectSize;
1019
+ shape: "rounded" | "pill";
1020
+ disabled: boolean;
1021
+ label: string;
1022
+ desc: string;
1023
+ modelValue: string | number;
1024
+ labelHidden: boolean;
1025
+ error: boolean;
1026
+ errorMessage: string;
1027
+ placeholder: string;
1028
+ required: boolean;
1029
+ id: string;
1030
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
1031
+
1032
+ export declare const UiTab: DefineComponent<Props_16, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
1033
+ "update:modelValue": (value: string) => any;
1034
+ change: (value: string) => any;
1035
+ }, string, PublicProps, Readonly<Props_16> & Readonly<{
1036
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
1037
+ onChange?: ((value: string) => any) | undefined;
1038
+ }>, {
1039
+ size: "sm" | "md" | "lg";
1040
+ ariaLabel: string;
1041
+ align: "left" | "center" | "right" | "stretch";
1042
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
1043
+
1044
+ export declare const UiTable: <TRow extends Record<string, unknown> = Record<string, unknown>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
1045
+ props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
1046
+ readonly "onRow-click"?: ((row: TRow, index: number) => any) | undefined;
1047
+ } & VNodeProps & AllowedComponentProps & ComponentCustomProps, never>, "onRow-click"> & UiTableProps<TRow> & Partial<{}>> & PublicProps;
1048
+ expose(exposed: ShallowUnwrapRef< {}>): void;
1049
+ attrs: any;
1050
+ slots: Partial<Record<`header-${string}`, (_: {
1051
+ column: TableColumn;
1052
+ isSortable: boolean;
1053
+ sortOrder: "" | "desc" | "asc";
1054
+ onSort: () => void;
1055
+ }) => any>> & Partial<Record<`cell-${string}`, (_: {
1056
+ row: TRow;
1057
+ value: unknown;
1058
+ index: number;
1059
+ }) => any>> & {
1060
+ empty?(_: {}): any;
1061
+ };
1062
+ emit: (evt: "row-click", row: TRow, index: number) => void;
1063
+ }>) => VNode<RendererNode, RendererElement, {
1064
+ [key: string]: any;
1065
+ }> & {
1066
+ __ctx?: Awaited<typeof __VLS_setup>;
1067
+ };
1068
+
1069
+ declare interface UiTableProps<TRow extends Record<string, unknown> = Record<string, unknown>> {
1070
+ columns: TableColumn[];
1071
+ data: TRow[];
1072
+ stickyHeader?: boolean;
1073
+ maxHeight?: string;
1074
+ /** 빈 상태 텍스트 — UiEmpty의 title로 전달 */
1075
+ emptyText?: string;
1076
+ /** 빈 상태 아이콘 (예: 'icon-search') — UiEmpty의 icon으로 전달 */
1077
+ emptyIcon?: string;
1078
+ /** 빈 상태 보조 설명 — UiEmpty의 description으로 전달 */
1079
+ emptyDescription?: string;
1080
+ clickable?: boolean;
1081
+ /** 테이블 크기: 'md'(기본) | 'sm'(컴팩트) */
1082
+ size?: 'md' | 'sm';
1083
+ /**
1084
+ * 선택 행 강조용: `row[selectedRowKey] === selectedRowValue` 일 때 `is-selected` 적용.
1085
+ * Controlled 모드 활성화 조건: `selectedRowKey`가 truthy + `selectedRowValue !== undefined`.
1086
+ * `0`, `''`, `false` 같은 falsy 값도 정상 선택 가능 (=== 비교).
1087
+ */
1088
+ selectedRowKey?: string;
1089
+ selectedRowValue?: unknown;
1090
+ }
1091
+
1092
+ export declare const UiTextarea: DefineComponent<Props_12, {
1093
+ focus: () => void | undefined;
1094
+ blur: () => void | undefined;
1095
+ el: Ref<HTMLTextAreaElement | null, HTMLTextAreaElement | null>;
1096
+ }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
1097
+ "update:modelValue": (value: string) => any;
1098
+ }, string, PublicProps, Readonly<Props_12> & Readonly<{
1099
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
1100
+ }>, {
1101
+ size: "sm" | "md" | "lg";
1102
+ disabled: boolean;
1103
+ label: string;
1104
+ desc: string;
1105
+ modelValue: string;
1106
+ labelHidden: boolean;
1107
+ error: boolean;
1108
+ errorMessage: string;
1109
+ placeholder: string;
1110
+ readonly: boolean;
1111
+ required: boolean;
1112
+ id: string;
1113
+ maxLength: number;
1114
+ border: boolean;
1115
+ rows: number;
1116
+ autoResize: boolean;
1117
+ maxRows: number;
1118
+ radius: "sm" | "base" | "lg";
1119
+ spellcheck: boolean;
1120
+ showCounter: boolean;
1121
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {
1122
+ textareaRef: HTMLTextAreaElement;
1123
+ }, HTMLDivElement>;
1124
+
1125
+ export declare const UiToast: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
1126
+
1127
+ export declare const UiToggle: DefineComponent<Props_9, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
1128
+ "update:modelValue": (value: boolean) => any;
1129
+ change: (value: boolean) => any;
1130
+ }, string, PublicProps, Readonly<Props_9> & Readonly<{
1131
+ "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
1132
+ onChange?: ((value: boolean) => any) | undefined;
1133
+ }>, {
1134
+ disabled: boolean;
1135
+ label: string;
1136
+ labelHidden: boolean;
1137
+ id: string;
1138
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
1139
+
1140
+ export declare const UiTooltip: __VLS_WithTemplateSlots_9<typeof __VLS_component_9, __VLS_TemplateResult_9["slots"]>;
1141
+
242
1142
  export { }