@t3q-ui/design-system 0.0.0-stage → 1.56.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.
@@ -0,0 +1,4427 @@
1
+ 'use strict';
2
+
3
+ var clsx = require('clsx');
4
+ var tailwindMerge = require('tailwind-merge');
5
+ var classVarianceAuthority = require('class-variance-authority');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+ var React12 = require('react');
8
+ var LottieImport = require('react-lottie');
9
+ var reactSlot = require('@radix-ui/react-slot');
10
+ var TooltipPrimitive = require('@radix-ui/react-tooltip');
11
+ var ToggleGroupPrimitive = require('@radix-ui/react-toggle-group');
12
+ var CheckboxPrimitive = require('@radix-ui/react-checkbox');
13
+ var DialogPrimitive = require('@radix-ui/react-dialog');
14
+ var lucide = require('lucide-react');
15
+ var SeparatorPrimitive = require('@radix-ui/react-separator');
16
+ var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
17
+ var reactHookForm = require('react-hook-form');
18
+ var TabsPrimitive = require('@radix-ui/react-tabs');
19
+ var agGridCommunity = require('ag-grid-community');
20
+ var agGridReact = require('ag-grid-react');
21
+
22
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
23
+
24
+ function _interopNamespace(e) {
25
+ if (e && e.__esModule) return e;
26
+ var n = Object.create(null);
27
+ if (e) {
28
+ Object.keys(e).forEach(function (k) {
29
+ if (k !== 'default') {
30
+ var d = Object.getOwnPropertyDescriptor(e, k);
31
+ Object.defineProperty(n, k, d.get ? d : {
32
+ enumerable: true,
33
+ get: function () { return e[k]; }
34
+ });
35
+ }
36
+ });
37
+ }
38
+ n.default = e;
39
+ return Object.freeze(n);
40
+ }
41
+
42
+ var React12__namespace = /*#__PURE__*/_interopNamespace(React12);
43
+ var LottieImport__default = /*#__PURE__*/_interopDefault(LottieImport);
44
+ var TooltipPrimitive__namespace = /*#__PURE__*/_interopNamespace(TooltipPrimitive);
45
+ var ToggleGroupPrimitive__namespace = /*#__PURE__*/_interopNamespace(ToggleGroupPrimitive);
46
+ var CheckboxPrimitive__namespace = /*#__PURE__*/_interopNamespace(CheckboxPrimitive);
47
+ var DialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(DialogPrimitive);
48
+ var lucide__namespace = /*#__PURE__*/_interopNamespace(lucide);
49
+ var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrimitive);
50
+ var DropdownMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(DropdownMenuPrimitive);
51
+ var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
52
+
53
+ function cn(...inputs) {
54
+ return twMerge(clsx.clsx(inputs));
55
+ }
56
+ var fontSize = [
57
+ "h1",
58
+ "h2",
59
+ "h3",
60
+ "h4",
61
+ "h5",
62
+ "h6",
63
+ "base-semibold",
64
+ "base-medium",
65
+ "base-regular",
66
+ "large-medium",
67
+ "large-semibold",
68
+ "small-bold-h",
69
+ "small-medium-h",
70
+ "small-regular-h",
71
+ "small-bold",
72
+ "small-medium",
73
+ "small-regular",
74
+ "xsmall-bold",
75
+ "xsmall-medium",
76
+ "xsmall-regular"
77
+ ];
78
+ var borderRadius = ["none", "xsmall", "small", "medium", "large", "xlarge", "full"];
79
+ var twMerge = tailwindMerge.extendTailwindMerge({
80
+ extend: {
81
+ classGroups: {
82
+ "font-size": fontSize.map((item) => "text-" + item),
83
+ "border-radius": borderRadius.map((item) => "rounded-" + item)
84
+ }
85
+ }
86
+ });
87
+
88
+ // src/utils/sanitizeUserText.ts
89
+ function sanitizeUserText(node) {
90
+ if (typeof node === "string") return node.replace(/[\r\n]+/g, " ");
91
+ if (Array.isArray(node)) return node.map(sanitizeUserText);
92
+ return node;
93
+ }
94
+ var alertVariants = classVarianceAuthority.cva(
95
+ "relative w-full rounded-medium p-[16px] grid has-[>svg]:grid-cols-[24px_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-[8px] gap-y-[8px] items-start [&>svg]:size-[20px] [&>svg]:text-current [&>svg]:m-[2px]",
96
+ {
97
+ variants: {
98
+ variant: {
99
+ primary: "[&>svg]:text-sys-alert-primary-icon text-sys-alert-primary-text bg-sys-alert-primary-background",
100
+ info: "[&>svg]:text-sys-alert-info-icon text-sys-alert-info-text bg-sys-alert-info-background",
101
+ success: "[&>svg]:text-sys-alert-success-icon text-sys-alert-success-text bg-sys-alert-success-background",
102
+ warning: "[&>svg]:text-sys-alert-warning-icon text-sys-alert-warning-text bg-sys-alert-warning-background",
103
+ danger: "[&>svg]:text-sys-alert-danger-icon text-sys-alert-danger-text bg-sys-alert-danger-background"
104
+ }
105
+ },
106
+ defaultVariants: {
107
+ variant: "primary"
108
+ }
109
+ }
110
+ );
111
+ function Alert({
112
+ className,
113
+ variant,
114
+ ...props
115
+ }) {
116
+ return /* @__PURE__ */ jsxRuntime.jsx(
117
+ "div",
118
+ {
119
+ "data-slot": "alert",
120
+ role: "alert",
121
+ className: cn(alertVariants({ variant }), className),
122
+ ...props
123
+ }
124
+ );
125
+ }
126
+ function AlertTitle({ className, children, ...props }) {
127
+ return /* @__PURE__ */ jsxRuntime.jsx(
128
+ "div",
129
+ {
130
+ "data-slot": "alert-title",
131
+ className: cn("text-h5 col-start-2 line-clamp-1 whitespace-pre", className),
132
+ ...props,
133
+ children: sanitizeUserText(children)
134
+ }
135
+ );
136
+ }
137
+ function AlertDescription({ className, children, ...props }) {
138
+ return /* @__PURE__ */ jsxRuntime.jsx(
139
+ "div",
140
+ {
141
+ "data-slot": "alert-description",
142
+ className: cn("text-base-medium col-start-2 whitespace-pre-wrap", className),
143
+ ...props,
144
+ children: sanitizeUserText(children)
145
+ }
146
+ );
147
+ }
148
+ function AlertActions({ className, ...props }) {
149
+ return /* @__PURE__ */ jsxRuntime.jsx(
150
+ "div",
151
+ {
152
+ "data-slot": "alert-actions",
153
+ className: cn(
154
+ "col-start-2 mt-[4px] flex flex-wrap items-center gap-[8px]",
155
+ "[&>button]:px-0 [&>button]:text-current [&>button]:underline [&>button:hover]:text-current [&>button:active]:text-current",
156
+ className
157
+ ),
158
+ ...props
159
+ }
160
+ );
161
+ }
162
+
163
+ // src/components/spinner/spinner.json
164
+ var spinner_default = {
165
+ v: "5.9.0",
166
+ fr: 30,
167
+ ip: 0,
168
+ op: 31,
169
+ w: 500,
170
+ h: 500,
171
+ nm: "\uCEF4\uD3EC\uC9C0\uC158 1",
172
+ ddd: 0,
173
+ assets: [],
174
+ layers: [
175
+ {
176
+ ddd: 0,
177
+ ind: 1,
178
+ ty: 4,
179
+ nm: "\uBAA8\uC591 \uB808\uC774\uC5B4 9",
180
+ sr: 1,
181
+ ks: {
182
+ o: {
183
+ a: 1,
184
+ k: [
185
+ {
186
+ i: { x: [0.667], y: [1] },
187
+ o: { x: [0.333], y: [0] },
188
+ t: 15,
189
+ s: [100]
190
+ },
191
+ { i: { x: [0.667], y: [1] }, o: { x: [0.333], y: [0] }, t: 18, s: [0] },
192
+ {
193
+ i: { x: [0.667], y: [1] },
194
+ o: { x: [0.333], y: [0] },
195
+ t: 26.5,
196
+ s: [0]
197
+ },
198
+ { t: 30, s: [100] }
199
+ ],
200
+ ix: 11
201
+ },
202
+ r: { a: 0, k: 0, ix: 10 },
203
+ p: { a: 0, k: [335.637, 338.637, 0], ix: 2, l: 2 },
204
+ a: { a: 0, k: [-137.363, -106.363, 0], ix: 1, l: 2 },
205
+ s: {
206
+ a: 1,
207
+ k: [
208
+ {
209
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
210
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
211
+ t: 15,
212
+ s: [100, 100, 100]
213
+ },
214
+ {
215
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
216
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
217
+ t: 18,
218
+ s: [0, 0, 100]
219
+ },
220
+ {
221
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
222
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
223
+ t: 26.5,
224
+ s: [0, 0, 100]
225
+ },
226
+ { t: 30, s: [100, 100, 100] }
227
+ ],
228
+ ix: 6,
229
+ l: 2
230
+ }
231
+ },
232
+ ao: 0,
233
+ shapes: [
234
+ {
235
+ ty: "gr",
236
+ it: [
237
+ {
238
+ ty: "rc",
239
+ d: 1,
240
+ s: { a: 0, k: [71.273, 71.273], ix: 2 },
241
+ p: { a: 0, k: [0, 0], ix: 3 },
242
+ r: { a: 0, k: 12, ix: 4 },
243
+ nm: "\uC0AC\uAC01\uD615 \uD328\uC2A4 1",
244
+ mn: "ADBE Vector Shape - Rect",
245
+ hd: false
246
+ },
247
+ {
248
+ ty: "fl",
249
+ c: { a: 0, k: [1, 1, 1, 1], ix: 4 },
250
+ o: { a: 0, k: 100, ix: 5 },
251
+ r: 1,
252
+ bm: 0,
253
+ nm: "\uCE60 1",
254
+ mn: "ADBE Vector Graphic - Fill",
255
+ hd: false
256
+ },
257
+ {
258
+ ty: "tr",
259
+ p: { a: 0, k: [-137.363, -106.363], ix: 2 },
260
+ a: { a: 0, k: [0, 0], ix: 1 },
261
+ s: { a: 0, k: [100, 100], ix: 3 },
262
+ r: { a: 0, k: 0, ix: 6 },
263
+ o: { a: 0, k: 100, ix: 7 },
264
+ sk: { a: 0, k: 0, ix: 4 },
265
+ sa: { a: 0, k: 0, ix: 5 },
266
+ nm: "\uBCC0\uD615"
267
+ }
268
+ ],
269
+ nm: "\uC0AC\uAC01\uD615 1",
270
+ np: 3,
271
+ cix: 2,
272
+ bm: 0,
273
+ ix: 1,
274
+ mn: "ADBE Vector Group",
275
+ hd: false
276
+ }
277
+ ],
278
+ ip: 0,
279
+ op: 900,
280
+ st: 0,
281
+ bm: 0
282
+ },
283
+ {
284
+ ddd: 0,
285
+ ind: 2,
286
+ ty: 4,
287
+ nm: "\uBAA8\uC591 \uB808\uC774\uC5B4 8",
288
+ sr: 1,
289
+ ks: {
290
+ o: {
291
+ a: 1,
292
+ k: [
293
+ {
294
+ i: { x: [0.667], y: [1] },
295
+ o: { x: [0.333], y: [0] },
296
+ t: 16.5,
297
+ s: [100]
298
+ },
299
+ { t: 19.5, s: [0] }
300
+ ],
301
+ ix: 11
302
+ },
303
+ r: { a: 0, k: 0, ix: 10 },
304
+ p: { a: 0, k: [246.637, 338.637, 0], ix: 2, l: 2 },
305
+ a: { a: 0, k: [-137.363, -106.363, 0], ix: 1, l: 2 },
306
+ s: {
307
+ a: 1,
308
+ k: [
309
+ {
310
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
311
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
312
+ t: 3,
313
+ s: [0, 0, 100]
314
+ },
315
+ {
316
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
317
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
318
+ t: 6,
319
+ s: [100, 100, 100]
320
+ },
321
+ {
322
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
323
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
324
+ t: 16.5,
325
+ s: [100, 100, 100]
326
+ },
327
+ { t: 19.5, s: [0, 0, 100] }
328
+ ],
329
+ ix: 6,
330
+ l: 2
331
+ }
332
+ },
333
+ ao: 0,
334
+ shapes: [
335
+ {
336
+ ty: "gr",
337
+ it: [
338
+ {
339
+ ty: "rc",
340
+ d: 1,
341
+ s: { a: 0, k: [71.273, 71.273], ix: 2 },
342
+ p: { a: 0, k: [0, 0], ix: 3 },
343
+ r: { a: 0, k: 12, ix: 4 },
344
+ nm: "\uC0AC\uAC01\uD615 \uD328\uC2A4 1",
345
+ mn: "ADBE Vector Shape - Rect",
346
+ hd: false
347
+ },
348
+ {
349
+ ty: "fl",
350
+ c: { a: 0, k: [1, 1, 1, 1], ix: 4 },
351
+ o: { a: 0, k: 100, ix: 5 },
352
+ r: 1,
353
+ bm: 0,
354
+ nm: "\uCE60 1",
355
+ mn: "ADBE Vector Graphic - Fill",
356
+ hd: false
357
+ },
358
+ {
359
+ ty: "tr",
360
+ p: { a: 0, k: [-137.363, -106.363], ix: 2 },
361
+ a: { a: 0, k: [0, 0], ix: 1 },
362
+ s: { a: 0, k: [100, 100], ix: 3 },
363
+ r: { a: 0, k: 0, ix: 6 },
364
+ o: { a: 0, k: 100, ix: 7 },
365
+ sk: { a: 0, k: 0, ix: 4 },
366
+ sa: { a: 0, k: 0, ix: 5 },
367
+ nm: "\uBCC0\uD615"
368
+ }
369
+ ],
370
+ nm: "\uC0AC\uAC01\uD615 1",
371
+ np: 3,
372
+ cix: 2,
373
+ bm: 0,
374
+ ix: 1,
375
+ mn: "ADBE Vector Group",
376
+ hd: false
377
+ }
378
+ ],
379
+ ip: 0,
380
+ op: 900,
381
+ st: 0,
382
+ bm: 0
383
+ },
384
+ {
385
+ ddd: 0,
386
+ ind: 3,
387
+ ty: 4,
388
+ nm: "\uBAA8\uC591 \uB808\uC774\uC5B4 7",
389
+ sr: 1,
390
+ ks: {
391
+ o: { a: 0, k: 100, ix: 11 },
392
+ r: { a: 0, k: 0, ix: 10 },
393
+ p: { a: 0, k: [157.637, 338.637, 0], ix: 2, l: 2 },
394
+ a: { a: 0, k: [-137.363, -106.363, 0], ix: 1, l: 2 },
395
+ s: {
396
+ a: 1,
397
+ k: [
398
+ {
399
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
400
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
401
+ t: 4.5,
402
+ s: [0, 0, 100]
403
+ },
404
+ {
405
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
406
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
407
+ t: 7.5,
408
+ s: [100, 100, 100]
409
+ },
410
+ {
411
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
412
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
413
+ t: 22.5,
414
+ s: [100, 100, 100]
415
+ },
416
+ { t: 25.5, s: [0, 0, 100] }
417
+ ],
418
+ ix: 6,
419
+ l: 2
420
+ }
421
+ },
422
+ ao: 0,
423
+ shapes: [
424
+ {
425
+ ty: "gr",
426
+ it: [
427
+ {
428
+ ty: "rc",
429
+ d: 1,
430
+ s: { a: 0, k: [71.273, 71.273], ix: 2 },
431
+ p: { a: 0, k: [0, 0], ix: 3 },
432
+ r: { a: 0, k: 12, ix: 4 },
433
+ nm: "\uC0AC\uAC01\uD615 \uD328\uC2A4 1",
434
+ mn: "ADBE Vector Shape - Rect",
435
+ hd: false
436
+ },
437
+ {
438
+ ty: "fl",
439
+ c: { a: 0, k: [1, 1, 1, 1], ix: 4 },
440
+ o: { a: 0, k: 100, ix: 5 },
441
+ r: 1,
442
+ bm: 0,
443
+ nm: "\uCE60 1",
444
+ mn: "ADBE Vector Graphic - Fill",
445
+ hd: false
446
+ },
447
+ {
448
+ ty: "tr",
449
+ p: { a: 0, k: [-137.363, -106.363], ix: 2 },
450
+ a: { a: 0, k: [0, 0], ix: 1 },
451
+ s: { a: 0, k: [100, 100], ix: 3 },
452
+ r: { a: 0, k: 0, ix: 6 },
453
+ o: { a: 0, k: 100, ix: 7 },
454
+ sk: { a: 0, k: 0, ix: 4 },
455
+ sa: { a: 0, k: 0, ix: 5 },
456
+ nm: "\uBCC0\uD615"
457
+ }
458
+ ],
459
+ nm: "\uC0AC\uAC01\uD615 1",
460
+ np: 3,
461
+ cix: 2,
462
+ bm: 0,
463
+ ix: 1,
464
+ mn: "ADBE Vector Group",
465
+ hd: false
466
+ }
467
+ ],
468
+ ip: 0,
469
+ op: 900,
470
+ st: 0,
471
+ bm: 0
472
+ },
473
+ {
474
+ ddd: 0,
475
+ ind: 4,
476
+ ty: 4,
477
+ nm: "\uBAA8\uC591 \uB808\uC774\uC5B4 6",
478
+ sr: 1,
479
+ ks: {
480
+ o: { a: 0, k: 100, ix: 11 },
481
+ r: { a: 0, k: 0, ix: 10 },
482
+ p: { a: 0, k: [335.637, 252.637, 0], ix: 2, l: 2 },
483
+ a: { a: 0, k: [-137.363, -106.363, 0], ix: 1, l: 2 },
484
+ s: {
485
+ a: 1,
486
+ k: [
487
+ {
488
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
489
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
490
+ t: 9,
491
+ s: [100, 100, 100]
492
+ },
493
+ {
494
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
495
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
496
+ t: 12,
497
+ s: [0, 0, 100]
498
+ },
499
+ {
500
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
501
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
502
+ t: 25,
503
+ s: [0, 0, 100]
504
+ },
505
+ { t: 28, s: [100, 100, 100] }
506
+ ],
507
+ ix: 6,
508
+ l: 2
509
+ }
510
+ },
511
+ ao: 0,
512
+ shapes: [
513
+ {
514
+ ty: "gr",
515
+ it: [
516
+ {
517
+ ty: "rc",
518
+ d: 1,
519
+ s: { a: 0, k: [71.273, 71.273], ix: 2 },
520
+ p: { a: 0, k: [0, 0], ix: 3 },
521
+ r: { a: 0, k: 12, ix: 4 },
522
+ nm: "\uC0AC\uAC01\uD615 \uD328\uC2A4 1",
523
+ mn: "ADBE Vector Shape - Rect",
524
+ hd: false
525
+ },
526
+ {
527
+ ty: "fl",
528
+ c: { a: 0, k: [1, 1, 1, 1], ix: 4 },
529
+ o: { a: 0, k: 100, ix: 5 },
530
+ r: 1,
531
+ bm: 0,
532
+ nm: "\uCE60 1",
533
+ mn: "ADBE Vector Graphic - Fill",
534
+ hd: false
535
+ },
536
+ {
537
+ ty: "tr",
538
+ p: { a: 0, k: [-137.363, -106.363], ix: 2 },
539
+ a: { a: 0, k: [0, 0], ix: 1 },
540
+ s: { a: 0, k: [100, 100], ix: 3 },
541
+ r: { a: 0, k: 0, ix: 6 },
542
+ o: { a: 0, k: 100, ix: 7 },
543
+ sk: { a: 0, k: 0, ix: 4 },
544
+ sa: { a: 0, k: 0, ix: 5 },
545
+ nm: "\uBCC0\uD615"
546
+ }
547
+ ],
548
+ nm: "\uC0AC\uAC01\uD615 1",
549
+ np: 3,
550
+ cix: 2,
551
+ bm: 0,
552
+ ix: 1,
553
+ mn: "ADBE Vector Group",
554
+ hd: false
555
+ }
556
+ ],
557
+ ip: 0,
558
+ op: 900,
559
+ st: 0,
560
+ bm: 0
561
+ },
562
+ {
563
+ ddd: 0,
564
+ ind: 5,
565
+ ty: 4,
566
+ nm: "\uBAA8\uC591 \uB808\uC774\uC5B4 5",
567
+ sr: 1,
568
+ ks: {
569
+ o: {
570
+ a: 1,
571
+ k: [
572
+ {
573
+ i: { x: [0.833], y: [0.833] },
574
+ o: { x: [0.167], y: [0.167] },
575
+ t: 0,
576
+ s: [100]
577
+ },
578
+ {
579
+ i: { x: [0.833], y: [0.833] },
580
+ o: { x: [0.167], y: [0.167] },
581
+ t: 15,
582
+ s: [0]
583
+ },
584
+ { t: 30, s: [100] }
585
+ ],
586
+ ix: 11
587
+ },
588
+ r: { a: 0, k: 0, ix: 10 },
589
+ p: { a: 0, k: [246.637, 252.637, 0], ix: 2, l: 2 },
590
+ a: { a: 0, k: [-137.363, -106.363, 0], ix: 1, l: 2 },
591
+ s: { a: 0, k: [100, 100, 100], ix: 6, l: 2 }
592
+ },
593
+ ao: 0,
594
+ shapes: [
595
+ {
596
+ ty: "gr",
597
+ it: [
598
+ {
599
+ ty: "rc",
600
+ d: 1,
601
+ s: { a: 0, k: [71.273, 71.273], ix: 2 },
602
+ p: { a: 0, k: [0, 0], ix: 3 },
603
+ r: { a: 0, k: 12, ix: 4 },
604
+ nm: "\uC0AC\uAC01\uD615 \uD328\uC2A4 1",
605
+ mn: "ADBE Vector Shape - Rect",
606
+ hd: false
607
+ },
608
+ {
609
+ ty: "fl",
610
+ c: { a: 0, k: [1, 1, 1, 1], ix: 4 },
611
+ o: { a: 0, k: 100, ix: 5 },
612
+ r: 1,
613
+ bm: 0,
614
+ nm: "\uCE60 1",
615
+ mn: "ADBE Vector Graphic - Fill",
616
+ hd: false
617
+ },
618
+ {
619
+ ty: "tr",
620
+ p: { a: 0, k: [-137.363, -106.363], ix: 2 },
621
+ a: { a: 0, k: [0, 0], ix: 1 },
622
+ s: { a: 0, k: [100, 100], ix: 3 },
623
+ r: { a: 0, k: 0, ix: 6 },
624
+ o: { a: 0, k: 100, ix: 7 },
625
+ sk: { a: 0, k: 0, ix: 4 },
626
+ sa: { a: 0, k: 0, ix: 5 },
627
+ nm: "\uBCC0\uD615"
628
+ }
629
+ ],
630
+ nm: "\uC0AC\uAC01\uD615 1",
631
+ np: 3,
632
+ cix: 2,
633
+ bm: 0,
634
+ ix: 1,
635
+ mn: "ADBE Vector Group",
636
+ hd: false
637
+ }
638
+ ],
639
+ ip: 0,
640
+ op: 900,
641
+ st: 0,
642
+ bm: 0
643
+ },
644
+ {
645
+ ddd: 0,
646
+ ind: 6,
647
+ ty: 4,
648
+ nm: "\uBAA8\uC591 \uB808\uC774\uC5B4 4",
649
+ sr: 1,
650
+ ks: {
651
+ o: {
652
+ a: 1,
653
+ k: [
654
+ {
655
+ i: { x: [0.667], y: [1] },
656
+ o: { x: [0.333], y: [0] },
657
+ t: 7.5,
658
+ s: [0]
659
+ },
660
+ { t: 15, s: [100] }
661
+ ],
662
+ ix: 11
663
+ },
664
+ r: { a: 0, k: 0, ix: 10 },
665
+ p: { a: 0, k: [157.637, 252.637, 0], ix: 2, l: 2 },
666
+ a: { a: 0, k: [-137.363, -106.363, 0], ix: 1, l: 2 },
667
+ s: {
668
+ a: 1,
669
+ k: [
670
+ {
671
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
672
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
673
+ t: 10.5,
674
+ s: [0, 0, 100]
675
+ },
676
+ {
677
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
678
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
679
+ t: 13.5,
680
+ s: [100, 100, 100]
681
+ },
682
+ {
683
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
684
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
685
+ t: 24,
686
+ s: [100, 100, 100]
687
+ },
688
+ { t: 27, s: [0, 0, 100] }
689
+ ],
690
+ ix: 6,
691
+ l: 2
692
+ }
693
+ },
694
+ ao: 0,
695
+ shapes: [
696
+ {
697
+ ty: "gr",
698
+ it: [
699
+ {
700
+ ty: "rc",
701
+ d: 1,
702
+ s: { a: 0, k: [71.273, 71.273], ix: 2 },
703
+ p: { a: 0, k: [0, 0], ix: 3 },
704
+ r: { a: 0, k: 12, ix: 4 },
705
+ nm: "\uC0AC\uAC01\uD615 \uD328\uC2A4 1",
706
+ mn: "ADBE Vector Shape - Rect",
707
+ hd: false
708
+ },
709
+ {
710
+ ty: "fl",
711
+ c: { a: 0, k: [1, 1, 1, 1], ix: 4 },
712
+ o: { a: 0, k: 100, ix: 5 },
713
+ r: 1,
714
+ bm: 0,
715
+ nm: "\uCE60 1",
716
+ mn: "ADBE Vector Graphic - Fill",
717
+ hd: false
718
+ },
719
+ {
720
+ ty: "tr",
721
+ p: { a: 0, k: [-137.363, -106.363], ix: 2 },
722
+ a: { a: 0, k: [0, 0], ix: 1 },
723
+ s: { a: 0, k: [100, 100], ix: 3 },
724
+ r: { a: 0, k: 0, ix: 6 },
725
+ o: { a: 0, k: 100, ix: 7 },
726
+ sk: { a: 0, k: 0, ix: 4 },
727
+ sa: { a: 0, k: 0, ix: 5 },
728
+ nm: "\uBCC0\uD615"
729
+ }
730
+ ],
731
+ nm: "\uC0AC\uAC01\uD615 1",
732
+ np: 3,
733
+ cix: 2,
734
+ bm: 0,
735
+ ix: 1,
736
+ mn: "ADBE Vector Group",
737
+ hd: false
738
+ }
739
+ ],
740
+ ip: 0,
741
+ op: 900,
742
+ st: 0,
743
+ bm: 0
744
+ },
745
+ {
746
+ ddd: 0,
747
+ ind: 7,
748
+ ty: 4,
749
+ nm: "\uBAA8\uC591 \uB808\uC774\uC5B4 3",
750
+ sr: 1,
751
+ ks: {
752
+ o: { a: 0, k: 100, ix: 11 },
753
+ r: { a: 0, k: 0, ix: 10 },
754
+ p: { a: 0, k: [335.637, 165.637, 0], ix: 2, l: 2 },
755
+ a: { a: 0, k: [-137.363, -106.363, 0], ix: 1, l: 2 },
756
+ s: {
757
+ a: 1,
758
+ k: [
759
+ {
760
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
761
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
762
+ t: 7.5,
763
+ s: [100, 100, 100]
764
+ },
765
+ {
766
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
767
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
768
+ t: 10.5,
769
+ s: [0, 0, 100]
770
+ },
771
+ {
772
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
773
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
774
+ t: 19,
775
+ s: [0, 0, 100]
776
+ },
777
+ { t: 22, s: [100, 100, 100] }
778
+ ],
779
+ ix: 6,
780
+ l: 2
781
+ }
782
+ },
783
+ ao: 0,
784
+ shapes: [
785
+ {
786
+ ty: "gr",
787
+ it: [
788
+ {
789
+ ty: "rc",
790
+ d: 1,
791
+ s: { a: 0, k: [71.273, 71.273], ix: 2 },
792
+ p: { a: 0, k: [0, 0], ix: 3 },
793
+ r: { a: 0, k: 12, ix: 4 },
794
+ nm: "\uC0AC\uAC01\uD615 \uD328\uC2A4 1",
795
+ mn: "ADBE Vector Shape - Rect",
796
+ hd: false
797
+ },
798
+ {
799
+ ty: "fl",
800
+ c: { a: 0, k: [1, 1, 1, 1], ix: 4 },
801
+ o: { a: 0, k: 100, ix: 5 },
802
+ r: 1,
803
+ bm: 0,
804
+ nm: "\uCE60 1",
805
+ mn: "ADBE Vector Graphic - Fill",
806
+ hd: false
807
+ },
808
+ {
809
+ ty: "tr",
810
+ p: { a: 0, k: [-137.363, -106.363], ix: 2 },
811
+ a: { a: 0, k: [0, 0], ix: 1 },
812
+ s: { a: 0, k: [100, 100], ix: 3 },
813
+ r: { a: 0, k: 0, ix: 6 },
814
+ o: { a: 0, k: 100, ix: 7 },
815
+ sk: { a: 0, k: 0, ix: 4 },
816
+ sa: { a: 0, k: 0, ix: 5 },
817
+ nm: "\uBCC0\uD615"
818
+ }
819
+ ],
820
+ nm: "\uC0AC\uAC01\uD615 1",
821
+ np: 3,
822
+ cix: 2,
823
+ bm: 0,
824
+ ix: 1,
825
+ mn: "ADBE Vector Group",
826
+ hd: false
827
+ }
828
+ ],
829
+ ip: 0,
830
+ op: 900,
831
+ st: 0,
832
+ bm: 0
833
+ },
834
+ {
835
+ ddd: 0,
836
+ ind: 8,
837
+ ty: 4,
838
+ nm: "\uBAA8\uC591 \uB808\uC774\uC5B4 2",
839
+ sr: 1,
840
+ ks: {
841
+ o: { a: 0, k: 100, ix: 11 },
842
+ r: { a: 0, k: 0, ix: 10 },
843
+ p: { a: 0, k: [246.637, 165.637, 0], ix: 2, l: 2 },
844
+ a: { a: 0, k: [-137.363, -106.363, 0], ix: 1, l: 2 },
845
+ s: {
846
+ a: 1,
847
+ k: [
848
+ {
849
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
850
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
851
+ t: 2,
852
+ s: [100, 100, 100]
853
+ },
854
+ {
855
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
856
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
857
+ t: 5,
858
+ s: [0, 0, 100]
859
+ },
860
+ {
861
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
862
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
863
+ t: 17.5,
864
+ s: [0, 0, 100]
865
+ },
866
+ { t: 20.5, s: [100, 100, 100] }
867
+ ],
868
+ ix: 6,
869
+ l: 2
870
+ }
871
+ },
872
+ ao: 0,
873
+ shapes: [
874
+ {
875
+ ty: "gr",
876
+ it: [
877
+ {
878
+ ty: "rc",
879
+ d: 1,
880
+ s: { a: 0, k: [71.273, 71.273], ix: 2 },
881
+ p: { a: 0, k: [0, 0], ix: 3 },
882
+ r: { a: 0, k: 12, ix: 4 },
883
+ nm: "\uC0AC\uAC01\uD615 \uD328\uC2A4 1",
884
+ mn: "ADBE Vector Shape - Rect",
885
+ hd: false
886
+ },
887
+ {
888
+ ty: "fl",
889
+ c: { a: 0, k: [1, 1, 1, 1], ix: 4 },
890
+ o: { a: 0, k: 100, ix: 5 },
891
+ r: 1,
892
+ bm: 0,
893
+ nm: "\uCE60 1",
894
+ mn: "ADBE Vector Graphic - Fill",
895
+ hd: false
896
+ },
897
+ {
898
+ ty: "tr",
899
+ p: { a: 0, k: [-137.363, -106.363], ix: 2 },
900
+ a: { a: 0, k: [0, 0], ix: 1 },
901
+ s: { a: 0, k: [100, 100], ix: 3 },
902
+ r: { a: 0, k: 0, ix: 6 },
903
+ o: { a: 0, k: 100, ix: 7 },
904
+ sk: { a: 0, k: 0, ix: 4 },
905
+ sa: { a: 0, k: 0, ix: 5 },
906
+ nm: "\uBCC0\uD615"
907
+ }
908
+ ],
909
+ nm: "\uC0AC\uAC01\uD615 1",
910
+ np: 3,
911
+ cix: 2,
912
+ bm: 0,
913
+ ix: 1,
914
+ mn: "ADBE Vector Group",
915
+ hd: false
916
+ }
917
+ ],
918
+ ip: 0,
919
+ op: 900,
920
+ st: 0,
921
+ bm: 0
922
+ },
923
+ {
924
+ ddd: 0,
925
+ ind: 9,
926
+ ty: 4,
927
+ nm: "\uBAA8\uC591 \uB808\uC774\uC5B4 1",
928
+ sr: 1,
929
+ ks: {
930
+ o: {
931
+ a: 1,
932
+ k: [
933
+ {
934
+ i: { x: [0.667], y: [1] },
935
+ o: { x: [0.333], y: [0] },
936
+ t: 0,
937
+ s: [100]
938
+ },
939
+ {
940
+ i: { x: [0.667], y: [1] },
941
+ o: { x: [0.333], y: [0] },
942
+ t: 7.5,
943
+ s: [0]
944
+ },
945
+ { t: 15, s: [100] }
946
+ ],
947
+ ix: 11
948
+ },
949
+ r: { a: 0, k: 0, ix: 10 },
950
+ p: { a: 0, k: [157.637, 165.637, 0], ix: 2, l: 2 },
951
+ a: { a: 0, k: [-137.363, -106.363, 0], ix: 1, l: 2 },
952
+ s: {
953
+ a: 1,
954
+ k: [
955
+ {
956
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
957
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
958
+ t: 0,
959
+ s: [100, 100, 100]
960
+ },
961
+ {
962
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
963
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
964
+ t: 3,
965
+ s: [0, 0, 100]
966
+ },
967
+ {
968
+ i: { x: [0.667, 0.667, 0.667], y: [1, 1, 1] },
969
+ o: { x: [0.333, 0.333, 0.333], y: [0, 0, 0] },
970
+ t: 11.5,
971
+ s: [0, 0, 100]
972
+ },
973
+ { t: 15, s: [100, 100, 100] }
974
+ ],
975
+ ix: 6,
976
+ l: 2
977
+ }
978
+ },
979
+ ao: 0,
980
+ shapes: [
981
+ {
982
+ ty: "gr",
983
+ it: [
984
+ {
985
+ ty: "rc",
986
+ d: 1,
987
+ s: { a: 0, k: [71.273, 71.273], ix: 2 },
988
+ p: { a: 0, k: [0, 0], ix: 3 },
989
+ r: { a: 0, k: 12, ix: 4 },
990
+ nm: "\uC0AC\uAC01\uD615 \uD328\uC2A4 1",
991
+ mn: "ADBE Vector Shape - Rect",
992
+ hd: false
993
+ },
994
+ {
995
+ ty: "fl",
996
+ c: { a: 0, k: [1, 1, 1, 1], ix: 4 },
997
+ o: { a: 0, k: 100, ix: 5 },
998
+ r: 1,
999
+ bm: 0,
1000
+ nm: "\uCE60 1",
1001
+ mn: "ADBE Vector Graphic - Fill",
1002
+ hd: false
1003
+ },
1004
+ {
1005
+ ty: "tr",
1006
+ p: { a: 0, k: [-137.363, -106.363], ix: 2 },
1007
+ a: { a: 0, k: [0, 0], ix: 1 },
1008
+ s: { a: 0, k: [100, 100], ix: 3 },
1009
+ r: { a: 0, k: 0, ix: 6 },
1010
+ o: { a: 0, k: 100, ix: 7 },
1011
+ sk: { a: 0, k: 0, ix: 4 },
1012
+ sa: { a: 0, k: 0, ix: 5 },
1013
+ nm: "\uBCC0\uD615"
1014
+ }
1015
+ ],
1016
+ nm: "\uC0AC\uAC01\uD615 1",
1017
+ np: 3,
1018
+ cix: 2,
1019
+ bm: 0,
1020
+ ix: 1,
1021
+ mn: "ADBE Vector Group",
1022
+ hd: false
1023
+ }
1024
+ ],
1025
+ ip: 0,
1026
+ op: 900,
1027
+ st: 0,
1028
+ bm: 0
1029
+ }
1030
+ ],
1031
+ markers: []
1032
+ };
1033
+ var Lottie = LottieImport__default.default.default ?? LottieImport__default.default;
1034
+ var sizeVariants = {
1035
+ small: 16,
1036
+ medium: 24,
1037
+ large: 48,
1038
+ xlarge: 96
1039
+ };
1040
+ var dotSizeVariants = {
1041
+ small: "w-[8px] h-[8px]",
1042
+ medium: "w-[12px] h-[12px]",
1043
+ large: "w-[24px] h-[24px]",
1044
+ xlarge: "w-[48px] h-[48px]"
1045
+ };
1046
+ var spinnerVariants = classVarianceAuthority.cva("tds-spinner [&_path]:fill-current", {
1047
+ variants: {
1048
+ variant: {
1049
+ auto: "text-sys-background",
1050
+ primary: "text-primary30",
1051
+ primaryBold: "text-primary40",
1052
+ secondary: "text-secondary60",
1053
+ secondaryBold: "text-sys-text-main",
1054
+ danger: "text-danger30",
1055
+ dangerBold: "text-danger40",
1056
+ warning: "text-warning30",
1057
+ warningBold: "text-warning40",
1058
+ info: "text-info30",
1059
+ infoBold: "text-info40",
1060
+ successBadgeText: "text-sys-badge-success-text",
1061
+ /** 부모의 글자색을 그대로 — Badge 처럼 색이 이미 정해진 곳 안에서 */
1062
+ current: "text-current"
1063
+ }
1064
+ },
1065
+ defaultVariants: {
1066
+ variant: "primary"
1067
+ }
1068
+ });
1069
+ function Spinner({
1070
+ size = "medium",
1071
+ variant,
1072
+ shape = "spinner",
1073
+ ...props
1074
+ }) {
1075
+ const lottieWrapperRef = React12.useRef(null);
1076
+ React12.useEffect(() => {
1077
+ lottieWrapperRef.current?.querySelector("[tabindex]")?.setAttribute("tabindex", "-1");
1078
+ });
1079
+ if (shape === "dot") {
1080
+ const px = sizeVariants[size];
1081
+ return /* @__PURE__ */ jsxRuntime.jsx(
1082
+ "div",
1083
+ {
1084
+ ...props,
1085
+ className: cn(
1086
+ spinnerVariants({ variant }),
1087
+ "inline-flex items-center justify-center",
1088
+ props.className
1089
+ ),
1090
+ style: { width: px, height: px, ...props.style },
1091
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1092
+ "span",
1093
+ {
1094
+ "aria-hidden": true,
1095
+ className: cn("rounded-full bg-current animate-pulse", dotSizeVariants[size])
1096
+ }
1097
+ )
1098
+ }
1099
+ );
1100
+ }
1101
+ return /* @__PURE__ */ jsxRuntime.jsx(
1102
+ "div",
1103
+ {
1104
+ ...props,
1105
+ ref: lottieWrapperRef,
1106
+ className: cn(spinnerVariants({ variant }), props.className),
1107
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1108
+ Lottie,
1109
+ {
1110
+ height: sizeVariants[size],
1111
+ width: sizeVariants[size],
1112
+ ariaRole: "presentation",
1113
+ ariaLabel: "",
1114
+ isClickToPauseDisabled: true,
1115
+ isPaused: false,
1116
+ options: {
1117
+ loop: true,
1118
+ autoplay: true,
1119
+ animationData: spinner_default,
1120
+ rendererSettings: {
1121
+ preserveAspectRatio: "xMidYMid slice"
1122
+ // 여백 없이 꽉 차게 설정
1123
+ }
1124
+ }
1125
+ }
1126
+ )
1127
+ }
1128
+ );
1129
+ }
1130
+ var buttonLoadingVariants = {
1131
+ primaryBold: "auto",
1132
+ primary: "primary",
1133
+ primaryLink: "primaryBold",
1134
+ dangerBold: "auto",
1135
+ danger: "danger",
1136
+ dangerLink: "dangerBold",
1137
+ secondaryBold: "auto",
1138
+ secondary: "secondary",
1139
+ secondaryLink: "secondaryBold",
1140
+ warningBold: "secondaryBold",
1141
+ warning: "warningBold",
1142
+ warningLink: "warningBold",
1143
+ primaryOutline: "primary",
1144
+ secondaryOutline: "secondaryBold",
1145
+ dangerOutline: "danger",
1146
+ warningOutline: "warningBold"
1147
+ };
1148
+ var defaultButtonVariants = {
1149
+ variant: "primary",
1150
+ shape: "normal",
1151
+ spacing: "normal",
1152
+ weight: "bold",
1153
+ loading: false
1154
+ };
1155
+ var buttonWeightVariants = {
1156
+ regular: "font-normal",
1157
+ // 400 (Tailwind 표준 유틸, DS 토큰값과 동일)
1158
+ medium: "font-medium",
1159
+ // 500
1160
+ semibold: "font-semibold",
1161
+ // 600
1162
+ bold: "font-bold"
1163
+ // 700
1164
+ };
1165
+ var buttonVariants = classVarianceAuthority.cva(
1166
+ "flex flex-row items-center justify-center whitespace-nowrap leading-[0] transition-colors hover:cursor-pointer disabled:pointer-events-none text-[14px]",
1167
+ {
1168
+ variants: {
1169
+ variant: {
1170
+ primary: "bg-sys-button-primary-subtle-background text-sys-button-primary-subtle-text hover:bg-sys-button-primary-subtle-background-hover active:bg-sys-button-primary-subtle-background-press",
1171
+ primaryBold: "bg-sys-button-primary-background text-sys-button-primary-text hover:bg-sys-button-primary-background-hover active:bg-sys-button-primary-background-press",
1172
+ primaryLink: "text-sys-button-primary-link-text hover:text-sys-button-primary-link-text-hover hover:underline active:text-sys-button-primary-link-text-press",
1173
+ danger: "bg-sys-button-danger-subtle-background text-sys-button-danger-subtle-text hover:bg-sys-button-danger-subtle-background-hover active:bg-sys-button-danger-subtle-background-press",
1174
+ dangerBold: "bg-sys-button-danger-background text-sys-button-danger-text hover:bg-sys-button-danger-background-hover active:bg-sys-button-danger-background-press",
1175
+ dangerLink: "text-sys-button-danger-link-text hover:text-sys-button-danger-link-text-hover hover:underline active:text-sys-button-danger-link-text-press",
1176
+ secondary: "bg-sys-button-secondary-subtle-background text-sys-button-secondary-subtle-text hover:bg-sys-button-secondary-subtle-background-hover active:bg-sys-button-secondary-subtle-background-press",
1177
+ secondaryBold: "bg-sys-button-secondary-background text-sys-button-secondary-text hover:bg-sys-button-secondary-background-hover active:bg-sys-button-secondary-background-press",
1178
+ secondaryLink: "text-sys-button-secondary-link-text hover:text-sys-button-secondary-link-text-hover hover:underline active:text-sys-button-secondary-link-text-press",
1179
+ warning: "bg-sys-button-warning-subtle-background text-sys-button-warning-subtle-text hover:bg-sys-button-warning-subtle-background-hover active:bg-sys-button-warning-subtle-background-press",
1180
+ warningBold: "bg-sys-button-warning-background text-sys-button-warning-text hover:bg-sys-button-warning-background-hover active:bg-sys-button-warning-background-press",
1181
+ warningLink: "text-sys-button-warning-link-text hover:text-sys-button-warning-link-text-hover hover:underline active:text-sys-button-warning-link-text-press",
1182
+ primaryOutline: "border border-sys-button-primary-outline-border text-sys-button-primary-outline-text hover:bg-sys-button-primary-outline-background-hover active:bg-sys-button-primary-outline-background-press",
1183
+ secondaryOutline: "border border-sys-button-secondary-outline-border text-sys-button-secondary-outline-text hover:bg-sys-button-secondary-outline-background-hover active:bg-sys-button-secondary-outline-background-press",
1184
+ dangerOutline: "border border-sys-button-danger-outline-border text-sys-button-danger-outline-text hover:bg-sys-button-danger-outline-background-hover active:bg-sys-button-danger-outline-background-press",
1185
+ warningOutline: "border border-sys-button-warning-outline-border text-sys-button-warning-outline-text hover:bg-sys-button-warning-outline-background-hover active:bg-sys-button-warning-outline-background-press"
1186
+ },
1187
+ spacing: {
1188
+ normal: "p-[6px] max-h-[36px]",
1189
+ compact: "p-[2px] max-h-[28px]"
1190
+ },
1191
+ shape: {
1192
+ normal: "rounded-small",
1193
+ rounded: "rounded-full"
1194
+ },
1195
+ weight: buttonWeightVariants,
1196
+ loading: {
1197
+ true: "relative pointer-events-none text-transparent",
1198
+ false: "disabled:text-sys-button-disabled-text disabled:bg-sys-button-disabled-background"
1199
+ }
1200
+ },
1201
+ compoundVariants: [
1202
+ {
1203
+ variant: "primaryOutline",
1204
+ loading: false,
1205
+ className: "disabled:border-sys-button-disabled-outline"
1206
+ },
1207
+ {
1208
+ variant: "secondaryOutline",
1209
+ loading: false,
1210
+ className: "disabled:border-sys-button-disabled-outline"
1211
+ },
1212
+ {
1213
+ variant: "dangerOutline",
1214
+ loading: false,
1215
+ className: "disabled:border-sys-button-disabled-outline"
1216
+ },
1217
+ {
1218
+ variant: "warningOutline",
1219
+ loading: false,
1220
+ className: "disabled:border-sys-button-disabled-outline"
1221
+ }
1222
+ ],
1223
+ defaultVariants: defaultButtonVariants
1224
+ }
1225
+ );
1226
+ var Button = React12__namespace.forwardRef(
1227
+ ({
1228
+ className,
1229
+ variant,
1230
+ shape,
1231
+ spacing,
1232
+ weight,
1233
+ asChild = false,
1234
+ loading,
1235
+ type,
1236
+ children,
1237
+ ...props
1238
+ }, ref) => {
1239
+ const Comp = asChild ? reactSlot.Slot : "button";
1240
+ const resolvedWeightClass = buttonWeightVariants[weight ?? defaultButtonVariants.weight];
1241
+ const processedChildren = React12__namespace.useMemo(() => {
1242
+ const flatten = (nodes) => React12__namespace.Children.toArray(nodes).flatMap(
1243
+ (child) => React12__namespace.isValidElement(child) && child.type === React12__namespace.Fragment ? flatten(child.props.children) : [child]
1244
+ );
1245
+ const childrenArray = flatten(children);
1246
+ const result = [];
1247
+ let textBuffer = [];
1248
+ const flushTextBuffer = () => {
1249
+ if (textBuffer.length > 0) {
1250
+ const combinedText = textBuffer.join("");
1251
+ result.push(
1252
+ /* @__PURE__ */ jsxRuntime.jsx(
1253
+ "span",
1254
+ {
1255
+ className: "box-border flex items-center justify-center px-[4px] h-[24px] shrink-0",
1256
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex flex-col justify-center leading-[0] shrink-0 text-[14px]", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-[14px] leading-[24px]", resolvedWeightClass), children: combinedText }) })
1257
+ },
1258
+ `text-${result.length}`
1259
+ )
1260
+ );
1261
+ textBuffer = [];
1262
+ }
1263
+ };
1264
+ childrenArray.forEach((child) => {
1265
+ if (typeof child === "string" || typeof child === "number") {
1266
+ textBuffer.push(String(child));
1267
+ } else {
1268
+ flushTextBuffer();
1269
+ result.push(child);
1270
+ }
1271
+ });
1272
+ flushTextBuffer();
1273
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center justify-center shrink-0", children: result });
1274
+ }, [children, resolvedWeightClass]);
1275
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1276
+ Comp,
1277
+ {
1278
+ type: asChild ? type : type ?? "button",
1279
+ className: cn(buttonVariants({ variant, shape, spacing, weight, loading }), className),
1280
+ ref,
1281
+ ...props,
1282
+ children: [
1283
+ loading && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-1/2 top-1/2 aspect-square -translate-x-1/2 -translate-y-1/2", children: /* @__PURE__ */ jsxRuntime.jsx(
1284
+ Spinner,
1285
+ {
1286
+ variant: buttonLoadingVariants[variant ?? defaultButtonVariants["variant"]],
1287
+ size: "medium"
1288
+ }
1289
+ ) }),
1290
+ /* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slottable, { children: asChild ? children : processedChildren })
1291
+ ]
1292
+ }
1293
+ );
1294
+ }
1295
+ );
1296
+ Button.displayName = "Button";
1297
+ var stackVariant = classVarianceAuthority.cva("flex", {
1298
+ variants: {
1299
+ direction: {
1300
+ row: "flex-row",
1301
+ "row-reverse": "flex-row-reverse",
1302
+ column: "flex-col",
1303
+ "column-reverse": "flex-col-reverse"
1304
+ },
1305
+ justifyContent: {
1306
+ center: "justify-center",
1307
+ end: "justify-end",
1308
+ start: "justify-start",
1309
+ "flex-start": "justify-start",
1310
+ "flex-end": "justify-end",
1311
+ "space-around": "justify-around",
1312
+ "space-between": "justify-between",
1313
+ "space-evenly": "justify-evenly",
1314
+ stretch: "justify-stretch",
1315
+ normal: ""
1316
+ // Basic keywords
1317
+ },
1318
+ alignItems: {
1319
+ center: "items-center",
1320
+ end: "items-end",
1321
+ start: "items-start",
1322
+ "flex-start": "items-start",
1323
+ "flex-end": "items-end",
1324
+ stretch: "items-stretch",
1325
+ normal: ""
1326
+ // Basic keywords
1327
+ }
1328
+ },
1329
+ defaultVariants: {
1330
+ direction: "row",
1331
+ justifyContent: "normal",
1332
+ alignItems: "normal"
1333
+ }
1334
+ });
1335
+ var Stack = React12.forwardRef(
1336
+ ({ direction = "row", spacing, justifyContent, alignItems, children, ...props }, ref) => {
1337
+ return /* @__PURE__ */ jsxRuntime.jsx(
1338
+ "div",
1339
+ {
1340
+ ref,
1341
+ ...props,
1342
+ className: cn(stackVariant({ direction, justifyContent, alignItems }), props.className),
1343
+ style: {
1344
+ gap: Number(spacing) ? `${spacing}px` : `${spacing}`,
1345
+ ...props.style
1346
+ },
1347
+ children
1348
+ }
1349
+ );
1350
+ }
1351
+ );
1352
+ Stack.displayName = "Stack";
1353
+ var BADGE_OUTLINE_ACCENT = {
1354
+ primary: { border: "border-primary30", icon: "text-primary30" },
1355
+ secondary: { border: "border-secondary50", icon: "text-secondary50" },
1356
+ success: { border: "border-success30", icon: "text-success30" },
1357
+ danger: { border: "border-danger30", icon: "text-danger30" },
1358
+ warning: { border: "border-warning40", icon: "text-warning40" },
1359
+ info: { border: "border-info40", icon: "text-info40" },
1360
+ etc: { border: "border-etc30", icon: "text-etc30" }
1361
+ };
1362
+ var badgeVariants = classVarianceAuthority.cva(
1363
+ // whitespace-nowrap: 좁은 표 칸에서 "최고 성능" 뱃지가 세로로 한 글자씩 쪼개져 심판 "vertical badge" 감점 (2026-10-19 15차 D1)
1364
+ // [&>svg]: 상태 뱃지의 아이콘은 자식으로 바로 넣는다(`<Badge variant='success'><CheckCircle />완료</Badge>`) — lucide 기본 24px 가 20px 뱃지를 넘지 않게 16px 로(2026-10-30)
1365
+ "inline-flex items-center justify-center whitespace-nowrap px-[2px] py-[2px] leading-none transition-colors overflow-clip [&>svg]:size-[16px] [&>svg]:shrink-0",
1366
+ {
1367
+ variants: {
1368
+ /** small(기본): 20px·12px — 상태·건수·탭·개수 뱃지 모두 이 크기. medium: 24px·14px — 특별히 크게 보여야 할 때만 */
1369
+ size: {
1370
+ small: "min-h-[20px] min-w-[20px] text-small-bold",
1371
+ medium: "min-h-[24px] min-w-[24px] text-h6"
1372
+ },
1373
+ variant: {
1374
+ primary: "bg-sys-badge-primary-background text-sys-badge-primary-text",
1375
+ primaryBold: "bg-primary30 text-secondary10",
1376
+ secondary: "bg-sys-badge-secondary-background text-sys-badge-secondary-text",
1377
+ secondaryBold: "bg-secondary60 text-secondary10",
1378
+ danger: "bg-sys-badge-danger-background text-sys-badge-danger-text",
1379
+ dangerBold: "bg-danger30 text-secondary10",
1380
+ warning: "bg-sys-badge-warning-background text-sys-badge-warning-text",
1381
+ warningBold: "bg-warning30 text-grayscale80",
1382
+ success: "bg-sys-badge-success-background text-sys-badge-success-text",
1383
+ successBold: "bg-success30 text-secondary10",
1384
+ info: "bg-sys-badge-info-background text-sys-badge-info-text",
1385
+ infoBold: "bg-info30 text-grayscale80",
1386
+ etc: "bg-sys-badge-etc-background text-sys-badge-etc-text",
1387
+ etcBold: "bg-etc30 text-secondary10"
1388
+ },
1389
+ rounded: {
1390
+ default: "rounded-xsmall",
1391
+ full: "rounded-full"
1392
+ },
1393
+ /** tint(기본): 연한 채움. outline: 흰 바탕 + 1px accent 테두리(subtle 변형에만 — 2026-10-17 이슈 47 6차, 상태 뱃지용) */
1394
+ appearance: {
1395
+ tint: "",
1396
+ outline: ""
1397
+ }
1398
+ },
1399
+ // outline × subtle 7색: 테두리는 {hue}30, 밝은 색(warning·info)은 40, secondary 는 50 — 흰 바탕에서 선이 보이는 가장 연한 단계.
1400
+ // 1px 테두리만큼 py 를 1px 줄여 높이 20px 유지. bold 변형은 appearance 를 무시한다(채움 그대로)
1401
+ compoundVariants: Object.keys(BADGE_OUTLINE_ACCENT).map((tone) => ({
1402
+ appearance: "outline",
1403
+ variant: tone,
1404
+ class: `bg-sys-background border py-[1px] ${BADGE_OUTLINE_ACCENT[tone].border}`
1405
+ })),
1406
+ defaultVariants: {
1407
+ variant: "primary",
1408
+ // 기본 4px(rounded-xsmall) — 라운드 한 계열: 뱃지·태그 4 · 칩·버튼·입력 6 · 표 8. pill 은 호출자가 rounded='full' 로만 (2026-10-18 10차 ②)
1409
+ rounded: "default",
1410
+ appearance: "tint",
1411
+ size: "small"
1412
+ }
1413
+ }
1414
+ );
1415
+ function Badge({ className, variant, rounded, appearance, size, children, ...props }) {
1416
+ const wrappedChildren = React12__namespace.Children.map(children, (child) => {
1417
+ if (typeof child === "string" || typeof child === "number") {
1418
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-[3px]", children: child });
1419
+ }
1420
+ return child;
1421
+ });
1422
+ return /* @__PURE__ */ jsxRuntime.jsx(
1423
+ "div",
1424
+ {
1425
+ className: cn(badgeVariants({ variant, rounded, appearance, size }), className),
1426
+ ...props,
1427
+ children: wrappedChildren
1428
+ }
1429
+ );
1430
+ }
1431
+ var TooltipProvider = TooltipPrimitive__namespace.Provider;
1432
+ var Tooltip = TooltipPrimitive__namespace.Root;
1433
+ var TooltipTrigger = React12__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Trigger, { type: "button", ref, className: cn(className), ...props }));
1434
+ TooltipTrigger.displayName = TooltipPrimitive__namespace.Trigger.displayName;
1435
+ var TooltipContent = React12__namespace.forwardRef(({ className, sideOffset = 4, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
1436
+ TooltipPrimitive__namespace.Content,
1437
+ {
1438
+ ref,
1439
+ sideOffset,
1440
+ className: cn(
1441
+ "z-[var(--root-z-index)] overflow-hidden rounded-small bg-secondary70 px-[6px] py-[4px] text-small-regular text-sys-background whitespace-pre-wrap break-keep wrap-break-word animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]",
1442
+ className
1443
+ ),
1444
+ ...props,
1445
+ children: sanitizeUserText(children)
1446
+ }
1447
+ ) }));
1448
+ TooltipContent.displayName = TooltipPrimitive__namespace.Content.displayName;
1449
+ var ToggleGroupContext = React12__namespace.createContext({
1450
+ variant: "default",
1451
+ spacing: false
1452
+ });
1453
+ function ToggleGroup({
1454
+ type = "single",
1455
+ variant = "default",
1456
+ spacing = false,
1457
+ className,
1458
+ ...props
1459
+ }) {
1460
+ const rootClass = variant === "outline" && !spacing ? "inline-flex rounded-small border border-secondary30 divide-x divide-secondary30" : "flex flex-wrap gap-1";
1461
+ return /* @__PURE__ */ jsxRuntime.jsx(ToggleGroupContext.Provider, { value: { variant, spacing }, children: /* @__PURE__ */ jsxRuntime.jsx(
1462
+ ToggleGroupPrimitive__namespace.Root,
1463
+ {
1464
+ ...{ type, ...props },
1465
+ "data-slot": "toggle-group",
1466
+ className: cn(rootClass, className)
1467
+ }
1468
+ ) });
1469
+ }
1470
+ function ToggleGroupItem({
1471
+ value,
1472
+ count,
1473
+ countVariant = "secondary",
1474
+ children,
1475
+ className,
1476
+ ...props
1477
+ }) {
1478
+ const { variant, spacing } = React12__namespace.useContext(ToggleGroupContext);
1479
+ const shapeClass = variant === "outline" && !spacing ? "rounded-none first:rounded-l-small last:rounded-r-small" : variant === "outline" && spacing ? "rounded-small border border-secondary30" : "rounded-small";
1480
+ const focusClass = variant === "outline" && !spacing ? "focus-visible:relative focus-visible:z-10 focus-visible:outline-[2px] focus-visible:outline-sys-focus-ring-main focus-visible:outline-offset-[2px]" : "focus-visible:outline-[2px] focus-visible:outline-sys-focus-ring-main focus-visible:outline-offset-[1px]";
1481
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1482
+ ToggleGroupPrimitive__namespace.Item,
1483
+ {
1484
+ value,
1485
+ "data-slot": "toggle-group-item",
1486
+ className: cn(
1487
+ // whitespace-nowrap: 좁은 자리에서 항목 라벨이 한 글자씩 줄바꿈되지 않게 (2026-10-16 홀드아웃 6 schedule-list 지적)
1488
+ "inline-flex items-center justify-center gap-[4px] px-[12px] h-[32px] whitespace-nowrap",
1489
+ "text-base-medium leading-none transition-colors",
1490
+ "text-sys-text-subtler hover:bg-secondary-o10 hover:text-sys-text-main",
1491
+ "data-[state=on]:bg-primary-o10 data-[state=on]:hover:bg-primary-o20 data-[state=on]:text-sys-text-main",
1492
+ "disabled:pointer-events-none disabled:opacity-50",
1493
+ focusClass,
1494
+ shapeClass,
1495
+ className
1496
+ ),
1497
+ ...props,
1498
+ children: [
1499
+ children,
1500
+ count !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(Badge, { "data-slot": "toggle-group-count", size: "small", rounded: "full", variant: countVariant, children: count })
1501
+ ]
1502
+ }
1503
+ );
1504
+ }
1505
+ var iconButtonVariants = classVarianceAuthority.cva(
1506
+ "inline-flex items-center justify-center h-fit whitespace-nowrap text-h6 transition-colors hover:cursor-pointer disabled:pointer-events-none disabled:text-sys-button-disabled-text disabled:bg-sys-button-disabled-background",
1507
+ {
1508
+ variants: {
1509
+ variant: {
1510
+ primary: "bg-sys-button-primary-subtle-background text-sys-button-primary-subtle-text hover:bg-sys-button-primary-subtle-background-hover active:bg-sys-button-primary-subtle-background-press",
1511
+ primaryBold: "bg-sys-button-primary-background text-sys-button-primary-text hover:bg-sys-button-primary-background-hover active:bg-sys-button-primary-background-press",
1512
+ primaryLink: "text-sys-button-primary-link-text hover:text-sys-button-primary-link-text-hover active:text-sys-button-primary-link-text-press",
1513
+ danger: "bg-sys-button-danger-subtle-background text-sys-button-danger-subtle-text hover:bg-sys-button-danger-subtle-background-hover active:bg-sys-button-danger-subtle-background-press",
1514
+ dangerBold: "bg-sys-button-danger-background text-sys-button-danger-text hover:bg-sys-button-danger-background-hover active:bg-sys-button-danger-background-press",
1515
+ dangerLink: "text-sys-button-danger-link-text hover:text-sys-button-danger-link-text-hover active:text-sys-button-danger-link-text-press",
1516
+ secondary: "bg-sys-button-secondary-subtle-background text-sys-button-secondary-subtle-text hover:bg-sys-button-secondary-subtle-background-hover active:bg-sys-button-secondary-subtle-background-press",
1517
+ secondaryBold: "bg-sys-button-secondary-background text-sys-button-secondary-text hover:bg-sys-button-secondary-background-hover active:bg-sys-button-secondary-background-press",
1518
+ secondaryLink: "text-sys-button-secondary-link-text hover:text-sys-button-secondary-link-text-hover active:text-sys-button-secondary-link-text-press",
1519
+ warning: "bg-sys-button-warning-subtle-background text-sys-button-warning-subtle-text hover:bg-sys-button-warning-subtle-background-hover active:bg-sys-button-warning-subtle-background-press",
1520
+ warningBold: "bg-sys-button-warning-background text-sys-button-warning-text hover:bg-sys-button-warning-background-hover active:bg-sys-button-warning-background-press",
1521
+ warningLink: "text-sys-button-warning-link-text hover:text-sys-button-warning-link-text-hover active:text-sys-button-warning-link-text-press",
1522
+ outline: "border border-secondary30 text-sys-text-subtler text-base-medium"
1523
+ },
1524
+ spacing: {
1525
+ normal: "p-[6px]",
1526
+ compact: "p-[2px] max-h-[28px] max-w-[28px]"
1527
+ },
1528
+ shape: {
1529
+ normal: "rounded-small",
1530
+ rounded: "rounded-full"
1531
+ }
1532
+ },
1533
+ defaultVariants: {
1534
+ variant: "primary",
1535
+ shape: "normal",
1536
+ spacing: "normal"
1537
+ }
1538
+ }
1539
+ );
1540
+ var IconButton = React12__namespace.forwardRef(
1541
+ ({ className, variant, shape, spacing, asChild = false, type, ...props }, ref) => {
1542
+ const Comp = asChild ? reactSlot.Slot : "button";
1543
+ return /* @__PURE__ */ jsxRuntime.jsx(
1544
+ Comp,
1545
+ {
1546
+ className: cn(iconButtonVariants({ variant, shape, spacing }), className),
1547
+ ref,
1548
+ type: asChild ? type : type ?? "button",
1549
+ ...props
1550
+ }
1551
+ );
1552
+ }
1553
+ );
1554
+ IconButton.displayName = "IconButton";
1555
+ function Card({ className, ...props }) {
1556
+ return /* @__PURE__ */ jsxRuntime.jsx(
1557
+ "div",
1558
+ {
1559
+ "data-slot": "card",
1560
+ className: cn(
1561
+ "rounded-medium shadow-gray-small bg-sys-background flex flex-col border border-sys-divider-subtle",
1562
+ className
1563
+ ),
1564
+ ...props
1565
+ }
1566
+ );
1567
+ }
1568
+ function CardHeader({ className, ...props }) {
1569
+ return /* @__PURE__ */ jsxRuntime.jsx(
1570
+ "div",
1571
+ {
1572
+ "data-slot": "card-header",
1573
+ className: cn("flex flex-col px-[16px] gap-[8px]", className),
1574
+ ...props
1575
+ }
1576
+ );
1577
+ }
1578
+ function CardTitle({ className, children, ...props }) {
1579
+ return /* @__PURE__ */ jsxRuntime.jsx(
1580
+ "div",
1581
+ {
1582
+ "data-slot": "card-title",
1583
+ className: cn("text-sys-text-main text-h5 whitespace-pre-wrap", className),
1584
+ ...props,
1585
+ children: sanitizeUserText(children)
1586
+ }
1587
+ );
1588
+ }
1589
+ function CardDescription({ className, children, ...props }) {
1590
+ return /* @__PURE__ */ jsxRuntime.jsx(
1591
+ "div",
1592
+ {
1593
+ "data-slot": "card-description",
1594
+ className: cn("text-sys-text-subtler text-small-regular-h whitespace-pre-wrap", className),
1595
+ ...props,
1596
+ children: sanitizeUserText(children)
1597
+ }
1598
+ );
1599
+ }
1600
+ function CardContent({ className, ...props }) {
1601
+ return /* @__PURE__ */ jsxRuntime.jsx(
1602
+ "div",
1603
+ {
1604
+ "data-slot": "card-content",
1605
+ className: cn("px-[16px] text-sys-text-subtler text-small-regular-h", className),
1606
+ ...props
1607
+ }
1608
+ );
1609
+ }
1610
+ function CardFooter({ className, ...props }) {
1611
+ return /* @__PURE__ */ jsxRuntime.jsx(
1612
+ "div",
1613
+ {
1614
+ "data-slot": "card-footer",
1615
+ className: cn(
1616
+ "flex items-center px-[16px] text-sys-text-subtle text-small-medium",
1617
+ className
1618
+ ),
1619
+ ...props
1620
+ }
1621
+ );
1622
+ }
1623
+ function CardThumbnail({ className, ...props }) {
1624
+ return /* @__PURE__ */ jsxRuntime.jsx(
1625
+ "div",
1626
+ {
1627
+ "data-slot": "card-thumbnail",
1628
+ className: cn("rounded-t-medium overflow-hidden", className),
1629
+ ...props
1630
+ }
1631
+ );
1632
+ }
1633
+ var defaultVariants = {
1634
+ size: "medium"
1635
+ };
1636
+ var checkboxVariants = classVarianceAuthority.cva(
1637
+ "peer shrink-0 rounded-xsmall bg-sys-background border-[2px] border-sys-divider-main hover:bg-secondary-o10 focus-visible:outline-[2px] focus-visible:outline-sys-focus-ring-main focus-visible:outline-offset-[1px] disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary30 data-[state=checked]:border-primary30 data-[state=checked]:hover:bg-primary40 data-[state=checked]:hover:border-primary40",
1638
+ {
1639
+ variants: {
1640
+ size: {
1641
+ small: "w-[12px] h-[12px]",
1642
+ medium: "w-[16px] h-[16px]",
1643
+ large: "w-[24px] h-[24px]"
1644
+ }
1645
+ },
1646
+ defaultVariants
1647
+ }
1648
+ );
1649
+ var Checkbox = React12__namespace.forwardRef(
1650
+ ({ className, size = defaultVariants.size, indeterminate = false, ...props }, ref) => {
1651
+ return /* @__PURE__ */ jsxRuntime.jsx(
1652
+ CheckboxPrimitive__namespace.Root,
1653
+ {
1654
+ ref,
1655
+ className: cn(checkboxVariants({ size }), className),
1656
+ ...props,
1657
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1658
+ CheckboxPrimitive__namespace.Indicator,
1659
+ {
1660
+ className: cn("flex items-center justify-center text-current"),
1661
+ children: indeterminate ? /* @__PURE__ */ jsxRuntime.jsx(IndeterminateIcon, { size }) : /* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { size })
1662
+ }
1663
+ )
1664
+ }
1665
+ );
1666
+ }
1667
+ );
1668
+ Checkbox.displayName = CheckboxPrimitive__namespace.Root.displayName;
1669
+ function CheckIcon({ size }) {
1670
+ if (!size) return null;
1671
+ switch (size) {
1672
+ case "small":
1673
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "8", height: "6", viewBox: "0 0 8 6", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxRuntime.jsx(
1674
+ "path",
1675
+ {
1676
+ fillRule: "evenodd",
1677
+ clipRule: "evenodd",
1678
+ d: "M7.22148 0.621289C7.51437 0.914182 7.51437 1.38906 7.22148 1.68195L3.43693 5.4665C3.43528 5.46817 3.43363 5.46984 3.43197 5.47151C3.28494 5.61853 3.09206 5.69175 2.89936 5.69117C2.70817 5.69061 2.51714 5.61739 2.37126 5.47151C2.3696 5.46984 2.36794 5.46817 2.3663 5.4665L0.780317 3.88052C0.487423 3.58762 0.487423 3.11275 0.780317 2.81986C1.07321 2.52696 1.54808 2.52696 1.84098 2.81986L2.90161 3.88049L6.16082 0.621289C6.45371 0.328396 6.92858 0.328396 7.22148 0.621289Z",
1679
+ fill: "var(--color-sys-background)"
1680
+ }
1681
+ ) });
1682
+ case "medium":
1683
+ return /* @__PURE__ */ jsxRuntime.jsx(
1684
+ "svg",
1685
+ {
1686
+ width: "10",
1687
+ height: "8",
1688
+ viewBox: "0 0 10 8",
1689
+ fill: "none",
1690
+ xmlns: "http://www.w3.org/2000/svg",
1691
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1692
+ "path",
1693
+ {
1694
+ fillRule: "evenodd",
1695
+ clipRule: "evenodd",
1696
+ d: "M9.2953 0.828385C9.68583 1.21891 9.68583 1.85207 9.2953 2.2426L4.24923 7.28867C4.24704 7.2909 4.24484 7.29313 4.24262 7.29534C4.04812 7.48985 3.79342 7.58748 3.53848 7.58823C3.28155 7.589 3.02438 7.49137 2.82835 7.29534C2.82614 7.29313 2.82394 7.29092 2.82176 7.28869L0.707088 5.17402C0.316564 4.7835 0.316564 4.15033 0.707088 3.75981C1.09761 3.36928 1.73078 3.36928 2.1213 3.75981L3.53549 5.17399L7.88109 0.828385C8.27161 0.437861 8.90478 0.437861 9.2953 0.828385Z",
1697
+ fill: "var(--color-sys-background)"
1698
+ }
1699
+ )
1700
+ }
1701
+ );
1702
+ case "large":
1703
+ return /* @__PURE__ */ jsxRuntime.jsx(
1704
+ "svg",
1705
+ {
1706
+ width: "14",
1707
+ height: "12",
1708
+ viewBox: "0 0 14 12",
1709
+ fill: "none",
1710
+ xmlns: "http://www.w3.org/2000/svg",
1711
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1712
+ "path",
1713
+ {
1714
+ fillRule: "evenodd",
1715
+ clipRule: "evenodd",
1716
+ d: "M13.4431 1.24258C14.0289 1.82836 14.0289 2.77811 13.4431 3.3639L5.87394 10.933C5.87066 10.9364 5.86737 10.9397 5.86406 10.943C5.57001 11.2371 5.18425 11.3835 4.79885 11.3823C4.41645 11.3812 4.03441 11.2348 3.74264 10.943C3.73934 10.9397 3.73606 10.9364 3.7328 10.9331L0.560755 7.76103C-0.025032 7.17525 -0.025032 6.2255 0.560755 5.63971C1.14654 5.05393 2.09629 5.05393 2.68207 5.63971L4.80335 7.76099L11.3218 1.24258C11.9075 0.656792 12.8573 0.656791 13.4431 1.24258Z",
1717
+ fill: "var(--color-sys-background)"
1718
+ }
1719
+ )
1720
+ }
1721
+ );
1722
+ }
1723
+ }
1724
+ function IndeterminateIcon({ size }) {
1725
+ if (!size) return null;
1726
+ switch (size) {
1727
+ case "small":
1728
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "8", height: "2", viewBox: "0 0 8 2", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxRuntime.jsx(
1729
+ "path",
1730
+ {
1731
+ fillRule: "evenodd",
1732
+ clipRule: "evenodd",
1733
+ d: "M0.25 1C0.25 0.585786 0.585787 0.25 1 0.25H7C7.41421 0.25 7.75 0.585786 7.75 1C7.75 1.41421 7.41421 1.75 7 1.75H1C0.585786 1.75 0.25 1.41421 0.25 1Z",
1734
+ fill: "var(--color-sys-background)"
1735
+ }
1736
+ ) });
1737
+ case "medium":
1738
+ return /* @__PURE__ */ jsxRuntime.jsx(
1739
+ "svg",
1740
+ {
1741
+ width: "10",
1742
+ height: "2",
1743
+ viewBox: "0 0 10 2",
1744
+ fill: "none",
1745
+ xmlns: "http://www.w3.org/2000/svg",
1746
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1747
+ "path",
1748
+ {
1749
+ fillRule: "evenodd",
1750
+ clipRule: "evenodd",
1751
+ d: "M0 1C0 0.447715 0.447715 0 1 0H9C9.55229 0 10 0.447715 10 1C10 1.55228 9.55228 2 9 2H1C0.447715 2 0 1.55228 0 1Z",
1752
+ fill: "var(--color-sys-background)"
1753
+ }
1754
+ )
1755
+ }
1756
+ );
1757
+ case "large":
1758
+ return /* @__PURE__ */ jsxRuntime.jsx(
1759
+ "svg",
1760
+ {
1761
+ width: "16",
1762
+ height: "4",
1763
+ viewBox: "0 0 16 4",
1764
+ fill: "none",
1765
+ xmlns: "http://www.w3.org/2000/svg",
1766
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1767
+ "path",
1768
+ {
1769
+ fillRule: "evenodd",
1770
+ clipRule: "evenodd",
1771
+ d: "M0.5 2C0.5 1.17157 1.17157 0.5 2 0.5H14C14.8284 0.5 15.5 1.17157 15.5 2C15.5 2.82843 14.8284 3.5 14 3.5H2C1.17157 3.5 0.5 2.82843 0.5 2Z",
1772
+ fill: "var(--color-sys-background)"
1773
+ }
1774
+ )
1775
+ }
1776
+ );
1777
+ }
1778
+ }
1779
+ function useRestoreFocusToOpener({
1780
+ onOpenAutoFocus,
1781
+ onCloseAutoFocus
1782
+ }) {
1783
+ const openerRef = React12.useRef(null);
1784
+ const handleOpenAutoFocus = React12.useCallback(
1785
+ (event) => {
1786
+ openerRef.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;
1787
+ onOpenAutoFocus?.(event);
1788
+ },
1789
+ [onOpenAutoFocus]
1790
+ );
1791
+ const handleCloseAutoFocus = React12.useCallback(
1792
+ (event) => {
1793
+ onCloseAutoFocus?.(event);
1794
+ if (event.defaultPrevented) return;
1795
+ const opener = openerRef.current;
1796
+ if (!opener || opener === document.body || !opener.isConnected) return;
1797
+ event.preventDefault();
1798
+ opener.focus({ preventScroll: true });
1799
+ },
1800
+ [onCloseAutoFocus]
1801
+ );
1802
+ return { onOpenAutoFocus: handleOpenAutoFocus, onCloseAutoFocus: handleCloseAutoFocus };
1803
+ }
1804
+ var Dialog = DialogPrimitive__namespace.Root;
1805
+ var DialogTrigger = DialogPrimitive__namespace.Trigger;
1806
+ var DialogPortal = DialogPrimitive__namespace.Portal;
1807
+ var DialogClose = DialogPrimitive__namespace.Close;
1808
+ var DialogOverlay = React12__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1809
+ DialogPrimitive__namespace.Overlay,
1810
+ {
1811
+ ...props,
1812
+ ref,
1813
+ className: cn(
1814
+ "fixed inset-0 z-[var(--root-z-index)] bg-sys-blanket",
1815
+ "data-[state=open]:animate-[fade-in_0ms_ease-out,zoom-in_0ms_ease-out]",
1816
+ "data-[state=closed]:animate-[fade-out_0ms_ease-in,zoom-out_0ms_ease-in]",
1817
+ className
1818
+ )
1819
+ }
1820
+ ));
1821
+ DialogOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
1822
+ var dialogContentVariants = classVarianceAuthority.cva(null, {
1823
+ variants: {
1824
+ width: {
1825
+ small: "w-[400px]",
1826
+ medium: "w-[600px]",
1827
+ large: "w-[800px]",
1828
+ xlarge: "w-[1000px]"
1829
+ }
1830
+ },
1831
+ defaultVariants: {
1832
+ width: "small"
1833
+ }
1834
+ });
1835
+ var DialogContent = React12__namespace.forwardRef(
1836
+ ({
1837
+ children,
1838
+ className,
1839
+ width,
1840
+ overlayClassName,
1841
+ hideCloseButton,
1842
+ onOpenAutoFocus,
1843
+ onCloseAutoFocus,
1844
+ ...props
1845
+ }, ref) => {
1846
+ const focusHandlers = useRestoreFocusToOpener({ onOpenAutoFocus, onCloseAutoFocus });
1847
+ return /* @__PURE__ */ jsxRuntime.jsxs(DialogPortal, { children: [
1848
+ /* @__PURE__ */ jsxRuntime.jsx(DialogOverlay, { className: overlayClassName }),
1849
+ /* @__PURE__ */ jsxRuntime.jsxs(
1850
+ DialogPrimitive__namespace.Content,
1851
+ {
1852
+ ref,
1853
+ ...focusHandlers,
1854
+ className: cn(
1855
+ "fixed left-[50%] top-[50%] z-[var(--root-z-index)] translate-x-[-50%] translate-y-[-50%] w-full max-w-[70vw]",
1856
+ "flex flex-col gap-[16px] rounded-medium bg-sys-background p-[32px] shadow-gray-medium duration-200",
1857
+ "data-[state=open]:animate-[fade-in_0ms_ease-out,zoom-in_0ms_ease-out]",
1858
+ "data-[state=closed]:animate-[fade-out_0ms_ease-in,zoom-out_0ms_ease-in]",
1859
+ dialogContentVariants({ width }),
1860
+ className
1861
+ ),
1862
+ ...props,
1863
+ children: [
1864
+ children,
1865
+ !hideCloseButton && /* @__PURE__ */ jsxRuntime.jsx(
1866
+ IconButton,
1867
+ {
1868
+ asChild: true,
1869
+ variant: "secondaryLink",
1870
+ className: cn("absolute right-[32px] top-[32px]"),
1871
+ children: /* @__PURE__ */ jsxRuntime.jsxs(DialogPrimitive__namespace.Close, { children: [
1872
+ /* @__PURE__ */ jsxRuntime.jsx(lucide.X, {}),
1873
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only a11y", children: "Close" })
1874
+ ] })
1875
+ }
1876
+ )
1877
+ ]
1878
+ }
1879
+ )
1880
+ ] });
1881
+ }
1882
+ );
1883
+ DialogContent.displayName = DialogPrimitive__namespace.Content.displayName;
1884
+ var DialogHeader = (props) => /* @__PURE__ */ jsxRuntime.jsx(
1885
+ "div",
1886
+ {
1887
+ ...props,
1888
+ className: cn("flex flex-col gap-[16px] text-center sm:text-left", props.className)
1889
+ }
1890
+ );
1891
+ DialogHeader.displayName = "DialogHeader";
1892
+ var DialogFooter = (props) => /* @__PURE__ */ jsxRuntime.jsx(
1893
+ "div",
1894
+ {
1895
+ ...props,
1896
+ className: cn("flex flex-col-reverse gap-[8px] sm:flex-row sm:justify-end", props.className)
1897
+ }
1898
+ );
1899
+ DialogFooter.displayName = "DialogFooter";
1900
+ var variantToIcon = {
1901
+ normal: null,
1902
+ success: /* @__PURE__ */ jsxRuntime.jsx(lucide.CircleCheck, { className: "text-success30" }),
1903
+ info: /* @__PURE__ */ jsxRuntime.jsx(lucide.Info, { className: "text-sys-text-subtler" }),
1904
+ warning: /* @__PURE__ */ jsxRuntime.jsx(lucide.TriangleAlert, { className: "text-critical30" }),
1905
+ danger: /* @__PURE__ */ jsxRuntime.jsx(lucide.CircleX, { className: "text-danger30" })
1906
+ };
1907
+ var DialogTitle = React12__namespace.forwardRef(({ variant, children, ...props }, ref) => {
1908
+ if (variant) {
1909
+ return /* @__PURE__ */ jsxRuntime.jsxs(Stack, { spacing: 8, children: [
1910
+ variantToIcon[variant],
1911
+ /* @__PURE__ */ jsxRuntime.jsx(
1912
+ DialogPrimitive__namespace.Title,
1913
+ {
1914
+ ...props,
1915
+ ref,
1916
+ className: cn("text-h4 text-sys-text-main whitespace-pre-wrap", props.className),
1917
+ children: sanitizeUserText(children)
1918
+ }
1919
+ )
1920
+ ] });
1921
+ } else {
1922
+ return /* @__PURE__ */ jsxRuntime.jsx(
1923
+ DialogPrimitive__namespace.Title,
1924
+ {
1925
+ ...props,
1926
+ ref,
1927
+ className: cn("text-h4 text-sys-text-main whitespace-pre-wrap", props.className),
1928
+ children: sanitizeUserText(children)
1929
+ }
1930
+ );
1931
+ }
1932
+ });
1933
+ DialogTitle.displayName = DialogPrimitive__namespace.Title.displayName;
1934
+ var DialogDescription = React12__namespace.forwardRef(({ children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1935
+ DialogPrimitive__namespace.Description,
1936
+ {
1937
+ ...props,
1938
+ ref,
1939
+ className: cn("text-base-regular text-sys-text-main whitespace-pre-wrap", props.className),
1940
+ children: sanitizeUserText(children)
1941
+ }
1942
+ ));
1943
+ DialogDescription.displayName = DialogPrimitive__namespace.Description.displayName;
1944
+ var Separator = React12__namespace.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1945
+ SeparatorPrimitive__namespace.Root,
1946
+ {
1947
+ ref,
1948
+ decorative,
1949
+ orientation,
1950
+ className: cn(
1951
+ "shrink-0 bg-sys-divider-subtle",
1952
+ orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
1953
+ className
1954
+ ),
1955
+ ...props
1956
+ }
1957
+ ));
1958
+ Separator.displayName = SeparatorPrimitive__namespace.Root.displayName;
1959
+ var DrawerModalContext = React12__namespace.createContext(true);
1960
+ var Drawer = ({ modal = true, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(DrawerModalContext.Provider, { value: modal, children: /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Root, { modal, ...props }) });
1961
+ Drawer.displayName = "Drawer";
1962
+ var DrawerTrigger = DialogPrimitive__namespace.Trigger;
1963
+ var DrawerClose = DialogPrimitive__namespace.Close;
1964
+ var DrawerPortal = DialogPrimitive__namespace.Portal;
1965
+ var DrawerOverlay = React12__namespace.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1966
+ DialogPrimitive__namespace.Overlay,
1967
+ {
1968
+ ...props,
1969
+ className: cn(
1970
+ "fixed inset-0 z-[var(--root-z-index)] bg-sys-blanket",
1971
+ "data-[state=open]:animate-fade-in",
1972
+ "data-[state=closed]:animate-fade-out",
1973
+ props.className
1974
+ ),
1975
+ ref
1976
+ }
1977
+ ));
1978
+ DrawerOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
1979
+ var sheetVariants = classVarianceAuthority.cva(
1980
+ "fixed z-[var(--root-z-index)] flex flex-col overflow-hidden bg-sys-background shadow-gray-medium",
1981
+ {
1982
+ variants: {
1983
+ side: {
1984
+ top: [
1985
+ "inset-x-0 top-0 bottom-auto",
1986
+ "data-[state=open]:animate-slide-in-from-top",
1987
+ "data-[state=closed]:animate-slide-out-to-top"
1988
+ ],
1989
+ bottom: [
1990
+ "inset-x-0 bottom-0 top-auto",
1991
+ "data-[state=open]:animate-slide-in-from-bottom",
1992
+ "data-[state=closed]:animate-slide-out-to-bottom"
1993
+ ],
1994
+ left: [
1995
+ "inset-y-0 left-0 right-auto h-full",
1996
+ "data-[state=open]:animate-slide-in-from-left",
1997
+ "data-[state=closed]:animate-slide-out-to-left"
1998
+ ],
1999
+ right: [
2000
+ "inset-y-0 right-0 left-auto h-full",
2001
+ "data-[state=open]:animate-slide-in-from-right",
2002
+ "data-[state=closed]:animate-slide-out-to-right"
2003
+ ]
2004
+ },
2005
+ size: {
2006
+ small: "w-[360px] max-w-[70vw]",
2007
+ medium: "w-[480px] max-w-[70vw]",
2008
+ large: "w-[720px] max-w-[70vw]",
2009
+ xLarge: "w-[1080px] max-w-[70vw]"
2010
+ }
2011
+ },
2012
+ defaultVariants: {
2013
+ side: "right",
2014
+ size: "large"
2015
+ }
2016
+ }
2017
+ );
2018
+ var DrawerContent = React12__namespace.forwardRef(
2019
+ ({ side, size, children, onOpenAutoFocus, onCloseAutoFocus, onInteractOutside, ...props }, ref) => {
2020
+ const focusHandlers = useRestoreFocusToOpener({ onOpenAutoFocus, onCloseAutoFocus });
2021
+ const modal = React12__namespace.useContext(DrawerModalContext);
2022
+ return /* @__PURE__ */ jsxRuntime.jsxs(DrawerPortal, { children: [
2023
+ modal ? /* @__PURE__ */ jsxRuntime.jsx(DrawerOverlay, {}) : null,
2024
+ /* @__PURE__ */ jsxRuntime.jsxs(
2025
+ DialogPrimitive__namespace.Content,
2026
+ {
2027
+ ...props,
2028
+ ...focusHandlers,
2029
+ onInteractOutside: (e) => {
2030
+ onInteractOutside?.(e);
2031
+ if (!modal && !e.defaultPrevented) e.preventDefault();
2032
+ },
2033
+ ref,
2034
+ className: cn(
2035
+ sheetVariants({ side, size }),
2036
+ !modal && "border-l border-sys-border-subtle shadow-none",
2037
+ props.className
2038
+ ),
2039
+ children: [
2040
+ /* @__PURE__ */ jsxRuntime.jsxs(
2041
+ DialogPrimitive__namespace.Close,
2042
+ {
2043
+ className: cn("absolute right-[24px] top-[24px] disabled:pointer-events-none"),
2044
+ children: [
2045
+ /* @__PURE__ */ jsxRuntime.jsx(lucide.X, { size: 24 }),
2046
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only a11y", children: "Close" })
2047
+ ]
2048
+ }
2049
+ ),
2050
+ children
2051
+ ]
2052
+ }
2053
+ )
2054
+ ] });
2055
+ }
2056
+ );
2057
+ DrawerContent.displayName = DialogPrimitive__namespace.Content.displayName;
2058
+ var DrawerHeader = ({ ...props }) => /* @__PURE__ */ jsxRuntime.jsx("div", { ...props, className: cn("flex flex-col gap-[8px] text-left p-[24px]", props.className) });
2059
+ DrawerHeader.displayName = "DrawerHeader";
2060
+ var DrawerBody = ({ ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
2061
+ "div",
2062
+ {
2063
+ tabIndex: 0,
2064
+ ...props,
2065
+ className: cn(
2066
+ "flex-1 min-h-0 overflow-y-auto scrollbar-gutter-stable",
2067
+ // DrawerContent 가 overflow-hidden 이라 바깥 outline 은 잘린다 → 안쪽 링
2068
+ "outline-none focus-visible:ring-[2px] focus-visible:ring-inset focus-visible:ring-sys-focus-ring-main",
2069
+ props.className
2070
+ )
2071
+ }
2072
+ );
2073
+ DrawerBody.displayName = "DrawerBody";
2074
+ var DrawerFooter = ({ ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
2075
+ "div",
2076
+ {
2077
+ ...props,
2078
+ className: cn("flex gap-[8px] justify-end mt-[16px] px-[24px] pb-[26px]", props.className)
2079
+ }
2080
+ );
2081
+ DrawerFooter.displayName = "DrawerFooter";
2082
+ var DrawerTitle = React12__namespace.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
2083
+ DialogPrimitive__namespace.Title,
2084
+ {
2085
+ ref,
2086
+ ...props,
2087
+ className: cn("text-h4 text-sys-text-main", props.className)
2088
+ }
2089
+ ));
2090
+ DrawerTitle.displayName = DialogPrimitive__namespace.Title.displayName;
2091
+ var DrawerDescription = React12__namespace.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
2092
+ DialogPrimitive__namespace.Description,
2093
+ {
2094
+ ref,
2095
+ ...props,
2096
+ className: cn("text-base-regular text-sys-text-main", props.className)
2097
+ }
2098
+ ));
2099
+ DrawerDescription.displayName = DialogPrimitive__namespace.Description.displayName;
2100
+ function DropdownMenu({ ...props }) {
2101
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Root, { "data-slot": "dropdown-menu", ...props });
2102
+ }
2103
+ function DropdownMenuPortal({
2104
+ ...props
2105
+ }) {
2106
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Portal, { "data-slot": "dropdown-menu-portal", ...props });
2107
+ }
2108
+ function DropdownMenuTrigger({
2109
+ ...props
2110
+ }) {
2111
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
2112
+ }
2113
+ function DropdownMenuContent({
2114
+ className,
2115
+ sideOffset = 4,
2116
+ ...props
2117
+ }) {
2118
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
2119
+ DropdownMenuPrimitive__namespace.Content,
2120
+ {
2121
+ "data-slot": "dropdown-menu-content",
2122
+ sideOffset,
2123
+ className: cn(
2124
+ "bg-sys-background text-base-regular",
2125
+ "overflow-x-hidden overflow-y-auto shadow-gray-small rounded-xsmall p-[4px] border border-sys-divider-subtler",
2126
+ "max-h-(--radix-dropdown-menu-content-available-height) ",
2127
+ "min-w-[200px] origin-(--radix-dropdown-menu-content-transform-origin)",
2128
+ "data-[state=open]:animate-[fade-in_150ms_ease-out,zoom-in_150ms_ease-out]",
2129
+ "data-[state=closed]:animate-[fade-out_150ms_ease-in,zoom-out_150ms_ease-in]",
2130
+ "data-[side=top]:animate-[slide-in-bottom_150ms_ease-out]",
2131
+ "data-[side=bottom]:animate-[slide-in-top_150ms_ease-out]",
2132
+ "data-[side=left]:animate-[slide-in-right_150ms_ease-out]",
2133
+ "data-[side=right]:animate-[slide-in-left_150ms_ease-out]",
2134
+ className
2135
+ ),
2136
+ ...props
2137
+ }
2138
+ ) });
2139
+ }
2140
+ function DropdownMenuGroup({ ...props }) {
2141
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Group, { "data-slot": "dropdown-menu-group", ...props });
2142
+ }
2143
+ function DropdownMenuItem({
2144
+ className,
2145
+ variant = "default",
2146
+ keepOpen = false,
2147
+ onSelect,
2148
+ ...props
2149
+ }) {
2150
+ const handleSelect = React12__namespace.useCallback(
2151
+ (event) => {
2152
+ onSelect?.(event);
2153
+ if (keepOpen) event.preventDefault();
2154
+ },
2155
+ [onSelect, keepOpen]
2156
+ );
2157
+ return /* @__PURE__ */ jsxRuntime.jsx(
2158
+ DropdownMenuPrimitive__namespace.Item,
2159
+ {
2160
+ "data-slot": "dropdown-menu-item",
2161
+ "data-variant": variant,
2162
+ onSelect: handleSelect,
2163
+ className: cn(
2164
+ "relative flex cursor-default items-center gap-[12px] rounded-xsmall p-[6px] text-base-regular outline-hidden select-none",
2165
+ "data-[variant=danger]:text-danger30",
2166
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-[20px]",
2167
+ "focus:bg-secondary-o10",
2168
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2169
+ className
2170
+ ),
2171
+ ...props
2172
+ }
2173
+ );
2174
+ }
2175
+ function DropdownMenuSeparator({
2176
+ className,
2177
+ ...props
2178
+ }) {
2179
+ return /* @__PURE__ */ jsxRuntime.jsx(
2180
+ DropdownMenuPrimitive__namespace.Separator,
2181
+ {
2182
+ "data-slot": "dropdown-menu-separator",
2183
+ className: cn("bg-sys-divider-subtle -mx-[1px] my-[1px] h-[1px]", className),
2184
+ ...props
2185
+ }
2186
+ );
2187
+ }
2188
+ function DropdownMenuSub({ ...props }) {
2189
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Sub, { "data-slot": "dropdown-menu-sub", ...props });
2190
+ }
2191
+ function DropdownMenuSubTrigger({
2192
+ className,
2193
+ children,
2194
+ ...props
2195
+ }) {
2196
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2197
+ DropdownMenuPrimitive__namespace.SubTrigger,
2198
+ {
2199
+ "data-slot": "dropdown-menu-sub-trigger",
2200
+ className: cn(
2201
+ "relative flex cursor-default items-center gap-[12px] rounded-xsmall p-[6px] text-base-regular outline-hidden select-none",
2202
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-[20px]",
2203
+ "focus:bg-secondary-o10",
2204
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2205
+ className
2206
+ ),
2207
+ ...props,
2208
+ children: [
2209
+ children,
2210
+ /* @__PURE__ */ jsxRuntime.jsx(lucide.ChevronRightIcon, { className: "ml-auto size-[20px]" })
2211
+ ]
2212
+ }
2213
+ );
2214
+ }
2215
+ function DropdownMenuSubContent({
2216
+ className,
2217
+ ...props
2218
+ }) {
2219
+ return /* @__PURE__ */ jsxRuntime.jsx(
2220
+ DropdownMenuPrimitive__namespace.SubContent,
2221
+ {
2222
+ "data-slot": "dropdown-menu-sub-content",
2223
+ className: cn(
2224
+ "bg-sys-background text-base-regular",
2225
+ "overflow-x-hidden overflow-y-auto z-[var(--root-z-index)] shadow-gray-small rounded-xsmall p-[4px] border border-sys-divider-subtler",
2226
+ "max-h-(--radix-dropdown-menu-content-available-height) ",
2227
+ "min-w-[200px] origin-(--radix-dropdown-menu-content-transform-origin)",
2228
+ "data-[state=open]:animate-[fade-in_150ms_ease-out,zoom-in_150ms_ease-out]",
2229
+ "data-[state=closed]:animate-[fade-out_150ms_ease-in,zoom-out_150ms_ease-in]",
2230
+ "data-[side=top]:animate-[slide-in-bottom_150ms_ease-out]",
2231
+ "data-[side=bottom]:animate-[slide-in-top_150ms_ease-out]",
2232
+ "data-[side=left]:animate-[slide-in-right_150ms_ease-out]",
2233
+ "data-[side=right]:animate-[slide-in-left_150ms_ease-out]",
2234
+ className
2235
+ ),
2236
+ ...props
2237
+ }
2238
+ );
2239
+ }
2240
+ var Form = reactHookForm.FormProvider;
2241
+ var FormFieldContext = React12__namespace.createContext({});
2242
+ var FormField = ({
2243
+ ...props
2244
+ }) => {
2245
+ return /* @__PURE__ */ jsxRuntime.jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsxRuntime.jsx(reactHookForm.Controller, { ...props }) });
2246
+ };
2247
+ var useFormField = () => {
2248
+ const fieldContext = React12__namespace.useContext(FormFieldContext);
2249
+ const itemContext = React12__namespace.useContext(FormItemContext);
2250
+ const { getFieldState, formState } = reactHookForm.useFormContext();
2251
+ const fieldState = getFieldState(fieldContext.name, formState);
2252
+ if (!fieldContext) {
2253
+ throw new Error("useFormField should be used within <FormField>");
2254
+ }
2255
+ const { id } = itemContext;
2256
+ return {
2257
+ id,
2258
+ name: fieldContext.name,
2259
+ formItemId: `${id}-form-item`,
2260
+ formDescriptionId: `${id}-form-item-description`,
2261
+ formMessageId: `${id}-form-item-message`,
2262
+ ...fieldState
2263
+ };
2264
+ };
2265
+ var FormItemContext = React12__namespace.createContext({});
2266
+ var FormItem = React12__namespace.forwardRef(
2267
+ ({ className, ...props }, ref) => {
2268
+ const id = React12__namespace.useId();
2269
+ return /* @__PURE__ */ jsxRuntime.jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("space-y-[4px]", className), ...props }) });
2270
+ }
2271
+ );
2272
+ FormItem.displayName = "FormItem";
2273
+ var FormLabel = React12__namespace.forwardRef(({ className, required, ...props }, ref) => {
2274
+ const { error, formItemId } = useFormField();
2275
+ if (required) {
2276
+ return /* @__PURE__ */ jsxRuntime.jsxs(Stack, { direction: "row", justifyContent: "start", children: [
2277
+ /* @__PURE__ */ jsxRuntime.jsx(
2278
+ "label",
2279
+ {
2280
+ ref,
2281
+ className: cn(
2282
+ error && "text-destructive",
2283
+ "inline-block text-sys-text-subtle text-base-medium",
2284
+ className
2285
+ ),
2286
+ htmlFor: formItemId,
2287
+ ...props
2288
+ }
2289
+ ),
2290
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base-medium text-danger30", children: "*" })
2291
+ ] });
2292
+ }
2293
+ return /* @__PURE__ */ jsxRuntime.jsx(
2294
+ "label",
2295
+ {
2296
+ ref,
2297
+ className: cn(
2298
+ error && "text-destructive",
2299
+ "inline-block text-sys-text-subtle text-base-medium",
2300
+ className
2301
+ ),
2302
+ htmlFor: formItemId,
2303
+ ...props
2304
+ }
2305
+ );
2306
+ });
2307
+ FormLabel.displayName = "FormLabel";
2308
+ var FormControlContext = React12__namespace.createContext(null);
2309
+ var useFormControlContext = () => React12__namespace.useContext(FormControlContext);
2310
+ var formControlVariants = classVarianceAuthority.cva("", {
2311
+ variants: {
2312
+ maxWidth: {
2313
+ default: "max-w-[var(--max-w-form-control)]",
2314
+ narrow: "max-w-[var(--max-w-form-control-narrow)]",
2315
+ full: ""
2316
+ }
2317
+ },
2318
+ defaultVariants: {
2319
+ maxWidth: "default"
2320
+ }
2321
+ });
2322
+ var FormControl = React12__namespace.forwardRef(({ className, maxWidth, ...props }, ref) => {
2323
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
2324
+ const isInvalid = !!error;
2325
+ return /* @__PURE__ */ jsxRuntime.jsx(FormControlContext.Provider, { value: { isInvalid }, children: /* @__PURE__ */ jsxRuntime.jsx(
2326
+ reactSlot.Slot,
2327
+ {
2328
+ ref,
2329
+ id: formItemId,
2330
+ className: cn(formControlVariants({ maxWidth }), className),
2331
+ "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
2332
+ "aria-invalid": isInvalid,
2333
+ ...props
2334
+ }
2335
+ ) });
2336
+ });
2337
+ FormControl.displayName = "FormControl";
2338
+ var FormDescription = React12__namespace.forwardRef(
2339
+ ({ className, icon = true, ...props }, ref) => {
2340
+ const { formDescriptionId, error } = useFormField();
2341
+ if (error) return null;
2342
+ return /* @__PURE__ */ jsxRuntime.jsxs(Stack, { spacing: 5, className: "pt-[2px]", children: [
2343
+ icon ? /* @__PURE__ */ jsxRuntime.jsx(lucide.Info, { size: 16, "aria-hidden": true, className: "text-sys-text-subtle" }) : null,
2344
+ /* @__PURE__ */ jsxRuntime.jsx(
2345
+ "p",
2346
+ {
2347
+ ref,
2348
+ id: formDescriptionId,
2349
+ className: cn("text-small-regular text-sys-text-subtle", className),
2350
+ ...props
2351
+ }
2352
+ )
2353
+ ] });
2354
+ }
2355
+ );
2356
+ FormDescription.displayName = "FormDescription";
2357
+ var FormMessage = React12__namespace.forwardRef(({ className, children, ...props }, ref) => {
2358
+ const { error, formMessageId } = useFormField();
2359
+ const body = error ? String(error?.message ?? "") : children;
2360
+ if (!body) {
2361
+ return null;
2362
+ }
2363
+ return /* @__PURE__ */ jsxRuntime.jsxs(Stack, { spacing: 5, className: "pt-[2px]", children: [
2364
+ /* @__PURE__ */ jsxRuntime.jsx(lucide.TriangleAlert, { size: 16, className: "text-danger30" }),
2365
+ /* @__PURE__ */ jsxRuntime.jsx(
2366
+ "p",
2367
+ {
2368
+ ref,
2369
+ id: formMessageId,
2370
+ className: cn("text-small-regular text-danger30", className),
2371
+ ...props,
2372
+ children: body
2373
+ }
2374
+ )
2375
+ ] });
2376
+ });
2377
+ FormMessage.displayName = "FormMessage";
2378
+ var FormValidMessage = React12__namespace.forwardRef(({ className, children, ...props }, ref) => {
2379
+ if (!children) {
2380
+ return null;
2381
+ }
2382
+ return /* @__PURE__ */ jsxRuntime.jsxs(Stack, { spacing: 5, className: "pt-[2px]", children: [
2383
+ /* @__PURE__ */ jsxRuntime.jsx(lucide.Check, { size: 16, className: "text-success30" }),
2384
+ /* @__PURE__ */ jsxRuntime.jsx("p", { ref, className: cn("text-small-regular text-success30", className), ...props, children })
2385
+ ] });
2386
+ });
2387
+ FormValidMessage.displayName = "FormValidMessage";
2388
+ var FormHeader = React12__namespace.forwardRef(
2389
+ ({ className, title, description, children, ...props }, ref) => {
2390
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2391
+ "div",
2392
+ {
2393
+ ref,
2394
+ className: cn("flex flex-col gap-[2px] items-start w-full", className),
2395
+ ...props,
2396
+ children: [
2397
+ title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-h4 text-sys-text-main w-full", children: title }),
2398
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base-regular text-sys-text-main", children: description }),
2399
+ children
2400
+ ]
2401
+ }
2402
+ );
2403
+ }
2404
+ );
2405
+ FormHeader.displayName = "FormHeader";
2406
+ var FormSectionLevelContext = React12__namespace.createContext(3);
2407
+ var FormSection = React12__namespace.forwardRef(
2408
+ ({ className, title, level, children, ...props }, ref) => {
2409
+ const contextLevel = React12__namespace.useContext(FormSectionLevelContext);
2410
+ const Heading = (level ?? contextLevel) === 2 ? "h2" : "h3";
2411
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2412
+ "div",
2413
+ {
2414
+ ref,
2415
+ className: cn(
2416
+ // 섹션 사이 간격 48px 를 구분선 위아래 24px 씩으로 나눈다 (2026-10-13: 앞 섹션의 설명 글줄이 선에 붙어 있었다)
2417
+ // 필드 사이 16(한 묶음 안) — 섹션 사이 48(pt-24+pb-24)과 구분되는 단계. 2026-10-17 8차 D2
2418
+ "flex flex-col gap-[16px] w-full pt-[24px]",
2419
+ // 부모 컨테이너 안에서 자기가 첫 자식이면 (= FormHeader 같은 형제가 앞에 없으면)
2420
+ // 16px 의 상단 여백만 둔다 (컨테이너 상단 과공백 방지). FormHeader 가 앞에 있으면 :first-child 가 아니므로 pt-[24px] + 선.
2421
+ "first:pt-[16px]",
2422
+ // 마지막 섹션 아래에는 여백이 없다 (푸터 버튼 줄이 자기 간격을 가진다)
2423
+ "[&:not(:last-child)]:pb-[24px]",
2424
+ // 섹션 사이에 연한 가로 구분선 (2026-10-12 블라인드 평가: 구획이 없으면 "제목뿐" 으로 읽혔다). 첫 섹션 위에는 없다
2425
+ "[&:not(:first-child)]:border-t [&:not(:first-child)]:border-sys-divider-subtle",
2426
+ className
2427
+ ),
2428
+ ...props,
2429
+ children: [
2430
+ title && /* @__PURE__ */ jsxRuntime.jsx(Heading, { className: "text-h4 text-sys-text-main w-full", children: title }),
2431
+ children
2432
+ ]
2433
+ }
2434
+ );
2435
+ }
2436
+ );
2437
+ FormSection.displayName = "FormSection";
2438
+ var formFooterVariants = classVarianceAuthority.cva("flex flex-col justify-end overflow-clip pt-[48px] w-full", {
2439
+ variants: {
2440
+ align: {
2441
+ start: "items-start",
2442
+ end: "items-end",
2443
+ center: "items-center",
2444
+ stretch: "items-stretch"
2445
+ }
2446
+ },
2447
+ defaultVariants: {
2448
+ align: "end"
2449
+ }
2450
+ });
2451
+ var FormFooter = React12__namespace.forwardRef(
2452
+ ({ className, align, children, ...props }, ref) => {
2453
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(formFooterVariants({ align }), className), ...props, children });
2454
+ }
2455
+ );
2456
+ FormFooter.displayName = "FormFooter";
2457
+ function isValidIconComponent(componentName) {
2458
+ return componentName in lucide__namespace.icons;
2459
+ }
2460
+ var isForwardRef = (v) => typeof v === "object" && v !== null && v.$$typeof === /* @__PURE__ */ Symbol.for("react.forward_ref");
2461
+ var ALIASES = Object.fromEntries(
2462
+ Object.entries(lucide__namespace).filter(
2463
+ ([name, v]) => name !== "Icon" && !(name in lucide__namespace.icons) && isForwardRef(v)
2464
+ )
2465
+ );
2466
+ var kebabToPascal = (str) => str.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join("");
2467
+ function LucideIcon({ iconComponentName, size = 16, ...props }) {
2468
+ if (!iconComponentName) return null;
2469
+ const componentName = kebabToPascal(iconComponentName);
2470
+ const Icon = isValidIconComponent(componentName) ? lucide__namespace.icons[componentName] : ALIASES[componentName];
2471
+ if (!Icon) return null;
2472
+ return /* @__PURE__ */ jsxRuntime.jsx(Icon, { size, ...props });
2473
+ }
2474
+ var EmptyBoxIllustration = React12__namespace.forwardRef(
2475
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
2476
+ "svg",
2477
+ {
2478
+ ref,
2479
+ width: "110",
2480
+ height: "81",
2481
+ viewBox: "0 0 110 81",
2482
+ fill: "none",
2483
+ "aria-hidden": "true",
2484
+ focusable: "false",
2485
+ className: cn("shrink-0 text-sys-text-subtler", className),
2486
+ ...props,
2487
+ children: [
2488
+ /* @__PURE__ */ jsxRuntime.jsx(
2489
+ "path",
2490
+ {
2491
+ d: "M1.55091 22.2887C0.694367 20.8214 1.37735 19.6318 3.0764 19.6318H39.8091C41.5081 19.6318 43.5799 20.8214 44.4364 22.2887L55 40.3852H12.1145L1.55091 22.2887Z",
2492
+ className: "fill-primary10"
2493
+ }
2494
+ ),
2495
+ /* @__PURE__ */ jsxRuntime.jsx(
2496
+ "path",
2497
+ {
2498
+ d: "M39.4248 7.0527C29.698 8.46843 22.5682 14.7206 23.4998 21.0174C24.1651 25.5135 28.761 28.815 34.8759 29.8212C38.8785 35.0171 44.6939 37.349 42.0205 34.1458C40.8408 32.7322 40.7157 31.3203 41.1314 30.0456C41.6829 29.9991 42.2394 29.9376 42.7994 29.8561C52.5264 28.4404 59.6562 22.1873 58.7243 15.8905C57.7923 9.59377 49.1517 5.63697 39.4248 7.0527Z",
2499
+ className: "fill-current"
2500
+ }
2501
+ ),
2502
+ /* @__PURE__ */ jsxRuntime.jsx(
2503
+ "ellipse",
2504
+ {
2505
+ cx: "1.60448",
2506
+ cy: "1.58788",
2507
+ rx: "1.60448",
2508
+ ry: "1.58788",
2509
+ transform: "matrix(-0.989573 0.144031 0.14639 0.989227 49.8203 15.77)",
2510
+ className: "fill-sys-background"
2511
+ }
2512
+ ),
2513
+ /* @__PURE__ */ jsxRuntime.jsx(
2514
+ "ellipse",
2515
+ {
2516
+ cx: "1.60448",
2517
+ cy: "1.58788",
2518
+ rx: "1.60448",
2519
+ ry: "1.58788",
2520
+ transform: "matrix(-0.989573 0.144031 0.14639 0.989227 42.8682 16.769)",
2521
+ className: "fill-sys-background"
2522
+ }
2523
+ ),
2524
+ /* @__PURE__ */ jsxRuntime.jsx(
2525
+ "ellipse",
2526
+ {
2527
+ cx: "1.60448",
2528
+ cy: "1.58788",
2529
+ rx: "1.60448",
2530
+ ry: "1.58788",
2531
+ transform: "matrix(-0.989573 0.144031 0.14639 0.989227 35.916 17.7686)",
2532
+ className: "fill-sys-background"
2533
+ }
2534
+ ),
2535
+ /* @__PURE__ */ jsxRuntime.jsx(
2536
+ "path",
2537
+ {
2538
+ d: "M12.1143 40.2407H54.9997V80.5002H18.2671C14.869 80.5002 12.1143 77.7455 12.1143 74.3474V40.2407Z",
2539
+ className: "fill-sys-background"
2540
+ }
2541
+ ),
2542
+ /* @__PURE__ */ jsxRuntime.jsx(
2543
+ "path",
2544
+ {
2545
+ d: "M12.1143 40.2407H54.9997V80.5002H18.2671C14.869 80.5002 12.1143 77.7455 12.1143 74.3474V40.2407Z",
2546
+ className: "fill-primary20 opacity-16"
2547
+ }
2548
+ ),
2549
+ /* @__PURE__ */ jsxRuntime.jsx(
2550
+ "path",
2551
+ {
2552
+ d: "M108.449 22.2882C109.306 20.8209 108.623 19.6313 106.924 19.6313H70.1909C68.4919 19.6313 66.4201 20.8209 65.5636 22.2882L55 40.3847H97.8855L108.449 22.2882Z",
2553
+ className: "fill-primary20"
2554
+ }
2555
+ ),
2556
+ /* @__PURE__ */ jsxRuntime.jsx(
2557
+ "path",
2558
+ {
2559
+ d: "M55 40.2407H97.8855V74.3474C97.8855 77.7455 95.1308 80.5002 91.7327 80.5002H55V40.2407Z",
2560
+ className: "fill-primary20 opacity-50"
2561
+ }
2562
+ )
2563
+ ]
2564
+ }
2565
+ )
2566
+ );
2567
+ EmptyBoxIllustration.displayName = "EmptyBoxIllustration";
2568
+ var TabsContext = React12__namespace.createContext({
2569
+ variant: "box",
2570
+ size: "medium"
2571
+ });
2572
+ function Tabs({
2573
+ className,
2574
+ variant = "box",
2575
+ size = "medium",
2576
+ ...props
2577
+ }) {
2578
+ return /* @__PURE__ */ jsxRuntime.jsx(TabsContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsxRuntime.jsx(TabsPrimitive__namespace.Root, { "data-slot": "tabs", className: cn("flex flex-col", className), ...props }) });
2579
+ }
2580
+ var tabListVariants = classVarianceAuthority.cva("text-sys-text-subtle inline-flex w-fit items-center justify-center", {
2581
+ variants: {
2582
+ variant: {
2583
+ underline: "border-b-[1px] border-sys-divider-subtler w-full justify-start",
2584
+ box: "bg-secondary-o20 p-[4px] rounded-medium"
2585
+ },
2586
+ size: {
2587
+ medium: "text-base-medium",
2588
+ large: "text-large-medium"
2589
+ }
2590
+ },
2591
+ defaultVariants: {
2592
+ variant: "box",
2593
+ size: "medium"
2594
+ }
2595
+ });
2596
+ function TabsList({
2597
+ className,
2598
+ variant: variantProp,
2599
+ size: sizeProp,
2600
+ ...props
2601
+ }) {
2602
+ const context = React12__namespace.useContext(TabsContext);
2603
+ const variant = variantProp ?? context.variant;
2604
+ const size = sizeProp ?? context.size;
2605
+ const value = React12__namespace.useMemo(() => ({ variant, size }), [variant, size]);
2606
+ return /* @__PURE__ */ jsxRuntime.jsx(TabsContext.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(
2607
+ TabsPrimitive__namespace.List,
2608
+ {
2609
+ "data-slot": "tabs-list",
2610
+ className: cn(tabListVariants({ variant, size }), className),
2611
+ ...props
2612
+ }
2613
+ ) });
2614
+ }
2615
+ var tabTriggerVariants = classVarianceAuthority.cva("", {
2616
+ variants: {
2617
+ variant: {
2618
+ underline: 'flex-none relative data-[state=active]:font-semibold data-[state=active]:text-primary40 data-[state=active]:after:content-[""] data-[state=active]:after:absolute data-[state=active]:after:bottom-[-1px] data-[state=active]:after:h-[2px] data-[state=active]:after:bg-primary30',
2619
+ box: "text-small-bold data-[state=active]:bg-sys-background data-[state=active]:text-sys-text-main px-[16px] py-[6px]"
2620
+ },
2621
+ size: {
2622
+ medium: "",
2623
+ large: ""
2624
+ }
2625
+ },
2626
+ compoundVariants: [
2627
+ {
2628
+ variant: "underline",
2629
+ size: "medium",
2630
+ class: "px-[12px] py-[6px] data-[state=active]:after:left-[10px] data-[state=active]:after:right-[10px]"
2631
+ },
2632
+ {
2633
+ variant: "underline",
2634
+ size: "large",
2635
+ class: "px-[16px] py-[10px] data-[state=active]:after:left-[12px] data-[state=active]:after:right-[12px]"
2636
+ }
2637
+ ],
2638
+ defaultVariants: {
2639
+ variant: "box",
2640
+ size: "medium"
2641
+ }
2642
+ });
2643
+ function TabsTrigger({ className, ...props }) {
2644
+ const { variant, size } = React12__namespace.useContext(TabsContext);
2645
+ return /* @__PURE__ */ jsxRuntime.jsx(
2646
+ TabsPrimitive__namespace.Trigger,
2647
+ {
2648
+ "data-slot": "tabs-trigger",
2649
+ className: cn(
2650
+ "inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center rounded-xsmall whitespace-nowrap transition-[color,box-shadow]",
2651
+ "focus-visible:outline-sys-focus-ring-main focus-visible:outline-[2px]",
2652
+ "disabled:pointer-events-none disabled:opacity-50",
2653
+ tabTriggerVariants({ variant, size }),
2654
+ className
2655
+ ),
2656
+ ...props
2657
+ }
2658
+ );
2659
+ }
2660
+ function TabsContent({ className, ...props }) {
2661
+ return /* @__PURE__ */ jsxRuntime.jsx(
2662
+ TabsPrimitive__namespace.Content,
2663
+ {
2664
+ "data-slot": "tabs-content",
2665
+ className: cn("flex-1 outline-none", className),
2666
+ ...props
2667
+ }
2668
+ );
2669
+ }
2670
+ var PageHeaderContext = React12.createContext(void 0);
2671
+ function PageHeaderProvider({ children }) {
2672
+ const [pageHeader, setPageHeaderState] = React12.useState({});
2673
+ const setPageHeader = React12.useCallback((state) => {
2674
+ setPageHeaderState((prev) => typeof state === "function" ? state(prev) : state);
2675
+ }, []);
2676
+ const resetPageHeader = React12.useCallback(() => {
2677
+ setPageHeaderState({});
2678
+ }, []);
2679
+ const value = React12.useMemo(
2680
+ () => ({ pageHeader, setPageHeader, resetPageHeader }),
2681
+ [pageHeader, resetPageHeader, setPageHeader]
2682
+ );
2683
+ return /* @__PURE__ */ jsxRuntime.jsx(PageHeaderContext.Provider, { value, children });
2684
+ }
2685
+ function usePageHeader() {
2686
+ const context = React12.useContext(PageHeaderContext);
2687
+ if (context === void 0) {
2688
+ throw new Error("usePageHeader must be used within a PageHeaderProvider");
2689
+ }
2690
+ return context;
2691
+ }
2692
+ function PageHeaderTabs({ tabs, activeTab, onTabChange }) {
2693
+ const value = React12.useMemo(() => {
2694
+ const selected = tabs.find((tab) => {
2695
+ const values = [tab.value, ...tab.matchValues ?? []];
2696
+ return values.includes(activeTab ?? "");
2697
+ });
2698
+ return selected?.value ?? tabs[0]?.value;
2699
+ }, [activeTab, tabs]);
2700
+ if (tabs.length === 0) return null;
2701
+ return /* @__PURE__ */ jsxRuntime.jsx(
2702
+ Tabs,
2703
+ {
2704
+ value,
2705
+ onValueChange: (nextValue) => {
2706
+ const nextTab = tabs.find((tab) => tab.value === nextValue);
2707
+ if (!nextTab) return;
2708
+ onTabChange?.(nextValue, nextTab);
2709
+ },
2710
+ variant: "underline",
2711
+ size: "large",
2712
+ className: "-mb-px flex-1 min-w-[360px] overflow-x-auto overflow-y-hidden",
2713
+ children: /* @__PURE__ */ jsxRuntime.jsx(TabsList, { className: "ml-0", children: tabs.map((tab) => /* @__PURE__ */ jsxRuntime.jsxs(
2714
+ TabsTrigger,
2715
+ {
2716
+ value: tab.value,
2717
+ disabled: tab.disabled,
2718
+ "aria-controls": void 0,
2719
+ className: cn("gap-[4px]", "disabled:text-sys-text-disabled disabled:opacity-100"),
2720
+ children: [
2721
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: tab.label }),
2722
+ tab.badge ? /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "primary", children: tab.badge }) : null
2723
+ ]
2724
+ },
2725
+ tab.value
2726
+ )) })
2727
+ }
2728
+ );
2729
+ }
2730
+ function PageHeader({
2731
+ breadcrumb,
2732
+ title,
2733
+ fallbackTitle,
2734
+ description,
2735
+ status,
2736
+ meta,
2737
+ actions,
2738
+ titleRight,
2739
+ bottomLeft,
2740
+ bottomRight,
2741
+ tabs = [],
2742
+ activeTab,
2743
+ onTabChange,
2744
+ compact = false,
2745
+ contentMaxWidth
2746
+ }) {
2747
+ const hasTabs = tabs.length > 0;
2748
+ const contentStyle = contentMaxWidth ? { maxWidth: contentMaxWidth } : void 0;
2749
+ const hasTabsRow = hasTabs;
2750
+ const hasTitleControls = Boolean(titleRight) || Boolean(actions);
2751
+ const hasControlsRow = Boolean(bottomLeft) || Boolean(bottomRight);
2752
+ const hasBottomDivider = Boolean(bottomLeft) && Boolean(bottomRight);
2753
+ const displayTitle = title || fallbackTitle || "";
2754
+ return /* @__PURE__ */ jsxRuntime.jsx(TooltipProvider, { children: compact ? /* @__PURE__ */ jsxRuntime.jsx("header", { className: "@container w-full shrink-0 border-b border-sys-divider-subtler bg-sys-background bg-[image:var(--color-page-header-bg)] px-[24px] pt-[16px] pb-[24px]", children: /* @__PURE__ */ jsxRuntime.jsxs(
2755
+ "div",
2756
+ {
2757
+ className: "mx-auto flex w-full items-center justify-between gap-[12px]",
2758
+ style: contentStyle,
2759
+ children: [
2760
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-[12px]", children: [
2761
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "whitespace-pre overflow-hidden text-ellipsis text-h3 text-sys-text-main", children: displayTitle }),
2762
+ status ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center", children: status }) : null
2763
+ ] }),
2764
+ titleRight || actions ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-[8px]", children: [
2765
+ titleRight,
2766
+ actions
2767
+ ] }) : null
2768
+ ]
2769
+ }
2770
+ ) }) : (
2771
+ // 바탕은 시안 그라데이션(토큰 --color-page-header-bg, 배경 이미지), 경계는 아래 1px 구분선 하나 — 2026-10-30 사용자 결정으로 그라데이션 복원(구분선 유지)
2772
+ /* @__PURE__ */ jsxRuntime.jsx(
2773
+ "header",
2774
+ {
2775
+ className: cn(
2776
+ // 양옆 24: 띠(배경)는 화면 끝까지인데 내용·표가 64 안쪽이라 심판이 "header band is wider than the table" — 2026-10-18 10차 ①
2777
+ // 띠 끝 선은 탭이 있어도 header 가 전체 폭으로 그린다(탭 줄에만 그리면 양끝에서 선이 끊겨 "ends abruptly behind the tabs")
2778
+ "@container w-full shrink-0 bg-sys-background bg-[image:var(--color-page-header-bg)] px-[24px] pt-[24px]",
2779
+ "border-b border-sys-divider-subtler"
2780
+ ),
2781
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto flex w-full flex-col items-start gap-[16px]", style: contentStyle, children: [
2782
+ breadcrumb ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full", children: breadcrumb }) : null,
2783
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full flex-col items-start", children: [
2784
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full flex-col items-start gap-[8px] pb-[24px]", children: [
2785
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full flex-wrap items-center gap-x-[12px] gap-y-[8px]", children: [
2786
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-[240px] flex-1 items-center gap-[12px]", children: [
2787
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "whitespace-pre-wrap text-h3 text-sys-text-main", children: displayTitle }),
2788
+ status ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center", children: status }) : null
2789
+ ] }),
2790
+ hasTitleControls ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-auto flex shrink-0 items-center gap-[8px]", children: [
2791
+ titleRight,
2792
+ actions
2793
+ ] }) : null
2794
+ ] }),
2795
+ meta ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full", children: meta }) : null,
2796
+ description ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex w-full items-start pb-[8px] pt-[4px]", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "line-clamp-2 break-keep whitespace-pre-wrap text-base-regular text-sys-text-subtle wrap-break-word", children: description }) }) : null
2797
+ ] }),
2798
+ hasControlsRow ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full flex-wrap items-start gap-[12px] pb-[24px]", children: [
2799
+ bottomLeft ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center gap-[8px]", children: bottomLeft }) : null,
2800
+ hasBottomDivider ? /* @__PURE__ */ jsxRuntime.jsx(
2801
+ Separator,
2802
+ {
2803
+ "aria-hidden": true,
2804
+ orientation: "vertical",
2805
+ className: "h-[24px] self-start mt-[6px]"
2806
+ }
2807
+ ) : null,
2808
+ bottomRight ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-auto items-center justify-end gap-[12px]", children: bottomRight }) : null
2809
+ ] }) : null,
2810
+ hasTabsRow ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex w-full items-end justify-between gap-[12px] min-h-[52px]", children: /* @__PURE__ */ jsxRuntime.jsx(PageHeaderTabs, { tabs, activeTab, onTabChange }) }) : null
2811
+ ] })
2812
+ ] })
2813
+ }
2814
+ )
2815
+ ) });
2816
+ }
2817
+ function Pagination({
2818
+ total,
2819
+ rowsPerPage,
2820
+ page,
2821
+ onChange,
2822
+ count = 5,
2823
+ disabled = false,
2824
+ showLabel = false,
2825
+ ...rest
2826
+ }) {
2827
+ const countOfAllPages = total > 0 && rowsPerPage > 0 ? Math.ceil(total / rowsPerPage) : 0;
2828
+ const [pageStartIdx, setPageStartIdx] = React12__namespace.useState(1);
2829
+ const [pageEndIdx, setPageEndIdx] = React12__namespace.useState(count);
2830
+ const handleGoToFirst = React12__namespace.useCallback(() => {
2831
+ setPageStartIdx(1);
2832
+ setPageEndIdx(count);
2833
+ onChange(1);
2834
+ }, [onChange, count]);
2835
+ const handleGoToPrev = React12__namespace.useCallback(() => {
2836
+ if (page === 1) {
2837
+ return;
2838
+ }
2839
+ if (page === pageStartIdx) {
2840
+ setPageStartIdx((prev) => prev - 1);
2841
+ setPageEndIdx((prev) => prev - 1);
2842
+ }
2843
+ onChange(page - 1);
2844
+ }, [onChange, page, pageStartIdx]);
2845
+ const handleGoToNext = React12__namespace.useCallback(() => {
2846
+ if (page === countOfAllPages) {
2847
+ return;
2848
+ }
2849
+ if (page === pageEndIdx) {
2850
+ setPageStartIdx((prev) => prev + 1);
2851
+ setPageEndIdx((prev) => prev + 1);
2852
+ }
2853
+ onChange(page + 1);
2854
+ }, [countOfAllPages, onChange, page, pageEndIdx]);
2855
+ const handleGoToEnd = React12__namespace.useCallback(() => {
2856
+ setPageStartIdx(countOfAllPages - (count - 1));
2857
+ setPageEndIdx(countOfAllPages);
2858
+ onChange(countOfAllPages);
2859
+ }, [countOfAllPages, onChange, count]);
2860
+ React12__namespace.useEffect(() => {
2861
+ if (page < pageStartIdx || page > pageEndIdx) {
2862
+ const currentBlock = Math.ceil(page / count);
2863
+ const newStart = (currentBlock - 1) * count + 1;
2864
+ setPageStartIdx(newStart);
2865
+ setPageEndIdx(newStart + count - 1);
2866
+ }
2867
+ }, [count, page, pageStartIdx, pageEndIdx]);
2868
+ const label = React12__namespace.useMemo(() => {
2869
+ const n = total.toLocaleString();
2870
+ const start = total === 0 ? 0 : (page - 1) * rowsPerPage + 1;
2871
+ const end = total === 0 ? 0 : Math.min(page * rowsPerPage, total);
2872
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2873
+ "\uC804\uCCB4 ",
2874
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-large-medium text-sys-text-main tabular-nums", children: n }),
2875
+ "\uAC1C \uC911",
2876
+ " ",
2877
+ start,
2878
+ " - ",
2879
+ end,
2880
+ "\uBC88\uC9F8"
2881
+ ] });
2882
+ }, [total, page, rowsPerPage]);
2883
+ return /* @__PURE__ */ jsxRuntime.jsxs(PaginationWrapper, { className: "relative justify-center", ...rest, children: [
2884
+ showLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-0 text-base-regular text-sys-text-subtle", children: label }),
2885
+ /* @__PURE__ */ jsxRuntime.jsxs(PaginationContent, { children: [
2886
+ /* @__PURE__ */ jsxRuntime.jsx(PaginationItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
2887
+ PaginationFirst,
2888
+ {
2889
+ href: "#",
2890
+ onClick: handleGoToFirst,
2891
+ disabled: page === 1 || total === 0 || disabled
2892
+ }
2893
+ ) }),
2894
+ /* @__PURE__ */ jsxRuntime.jsx(PaginationItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
2895
+ PaginationPrevious,
2896
+ {
2897
+ href: "#",
2898
+ onClick: handleGoToPrev,
2899
+ disabled: page === 1 || total === 0 || disabled
2900
+ }
2901
+ ) }),
2902
+ Array(countOfAllPages).fill("").map((_, idx) => {
2903
+ if (idx >= pageStartIdx - 1 && idx <= pageEndIdx - 1) {
2904
+ return /* @__PURE__ */ jsxRuntime.jsx(PaginationItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
2905
+ PaginationLink,
2906
+ {
2907
+ href: "#",
2908
+ isActive: page === idx + 1,
2909
+ disabled,
2910
+ onClick: () => {
2911
+ onChange(idx + 1);
2912
+ },
2913
+ children: idx + 1
2914
+ }
2915
+ ) }, idx + 1);
2916
+ }
2917
+ }),
2918
+ /* @__PURE__ */ jsxRuntime.jsx(PaginationItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
2919
+ PaginationNext,
2920
+ {
2921
+ href: "#",
2922
+ onClick: handleGoToNext,
2923
+ disabled: page === countOfAllPages || total === 0 || disabled
2924
+ }
2925
+ ) }),
2926
+ /* @__PURE__ */ jsxRuntime.jsx(PaginationItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
2927
+ PaginationLast,
2928
+ {
2929
+ href: "#",
2930
+ onClick: handleGoToEnd,
2931
+ disabled: page === countOfAllPages || total === 0 || disabled
2932
+ }
2933
+ ) })
2934
+ ] })
2935
+ ] });
2936
+ }
2937
+ function PaginationWrapper({ className, ...props }) {
2938
+ return /* @__PURE__ */ jsxRuntime.jsx(
2939
+ "nav",
2940
+ {
2941
+ role: "navigation",
2942
+ "aria-label": "pagination",
2943
+ "data-slot": "pagination",
2944
+ className: cn("mx-auto flex w-full items-center justify-center", className),
2945
+ style: { paddingTop: "16px" },
2946
+ ...props
2947
+ }
2948
+ );
2949
+ }
2950
+ function PaginationContent({ className, ...props }) {
2951
+ return /* @__PURE__ */ jsxRuntime.jsx(
2952
+ "ul",
2953
+ {
2954
+ "data-slot": "pagination-content",
2955
+ className: cn("flex flex-row items-center gap-[4px]", className),
2956
+ ...props
2957
+ }
2958
+ );
2959
+ }
2960
+ function PaginationItem({ className, ...props }) {
2961
+ return /* @__PURE__ */ jsxRuntime.jsx("li", { "data-slot": "pagination-item", className: cn("flex", className), ...props });
2962
+ }
2963
+ var paginationLinkVariants = classVarianceAuthority.cva(
2964
+ "inline-flex min-w-[28px] h-[28px] p-[2px] flex-col justify-center items-center gap-[4px] text-base-semibold shrink-0 cursor-pointer transition-colors",
2965
+ {
2966
+ variants: {
2967
+ variant: {
2968
+ true: "text-primary50 bg-primary10 rounded-xsmall",
2969
+ false: "text-sys-text-subtle hover:bg-secondary-o10 active:bg-secondary-o20 hover:rounded-xsmall active:rounded-xsmall"
2970
+ },
2971
+ disabled: {
2972
+ true: "text-sys-text-disabled pointer-events-none cursor-auto",
2973
+ false: ""
2974
+ }
2975
+ },
2976
+ defaultVariants: {
2977
+ variant: false,
2978
+ disabled: false
2979
+ }
2980
+ }
2981
+ );
2982
+ function PaginationLink({
2983
+ className,
2984
+ isActive,
2985
+ disabled,
2986
+ children,
2987
+ onClick,
2988
+ href,
2989
+ ...props
2990
+ }) {
2991
+ const wrappedChildren = React12__namespace.Children.map(children, (child) => {
2992
+ if (typeof child === "string" || typeof child === "number") {
2993
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center justify-center", children: child });
2994
+ }
2995
+ return child;
2996
+ });
2997
+ const handleClick = React12__namespace.useCallback(
2998
+ (e) => {
2999
+ e.preventDefault();
3000
+ onClick?.(e);
3001
+ },
3002
+ [onClick]
3003
+ );
3004
+ const buttonLike = !href ? {
3005
+ role: "button",
3006
+ tabIndex: disabled ? -1 : 0,
3007
+ "aria-disabled": disabled || void 0,
3008
+ onKeyDown: (e) => {
3009
+ if (e.key === "Enter" || e.key === " ") {
3010
+ e.preventDefault();
3011
+ onClick?.(e);
3012
+ }
3013
+ }
3014
+ } : {};
3015
+ return /* @__PURE__ */ jsxRuntime.jsx(
3016
+ "a",
3017
+ {
3018
+ href,
3019
+ "aria-current": isActive ? "page" : void 0,
3020
+ "data-slot": "pagination-link",
3021
+ "data-active": isActive,
3022
+ className: cn(paginationLinkVariants({ variant: isActive, disabled }), className),
3023
+ ...buttonLike,
3024
+ ...props,
3025
+ onClick: handleClick,
3026
+ children: wrappedChildren
3027
+ }
3028
+ );
3029
+ }
3030
+ function PaginationFirst({ className, ...props }) {
3031
+ return /* @__PURE__ */ jsxRuntime.jsx(PaginationLink, { "aria-label": "\uCCAB \uD398\uC774\uC9C0", className: cn(className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx(lucide.ChevronsLeft, {}) });
3032
+ }
3033
+ function PaginationPrevious({ className, ...props }) {
3034
+ return /* @__PURE__ */ jsxRuntime.jsx(PaginationLink, { "aria-label": "\uC774\uC804", className: cn(className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx(lucide.ChevronLeft, {}) });
3035
+ }
3036
+ function PaginationLast({ className, ...props }) {
3037
+ return /* @__PURE__ */ jsxRuntime.jsx(PaginationLink, { "aria-label": "\uB9C8\uC9C0\uB9C9 \uD398\uC774\uC9C0", className: cn(className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx(lucide.ChevronsRight, {}) });
3038
+ }
3039
+ function PaginationNext({ className, ...props }) {
3040
+ return /* @__PURE__ */ jsxRuntime.jsx(PaginationLink, { "aria-label": "\uB2E4\uC74C", className: cn(className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx(lucide.ChevronRight, {}) });
3041
+ }
3042
+ var getPaginationRange = (total, page, limit) => {
3043
+ if (total === 0) return { start: 0, end: 0 };
3044
+ const start = (page - 1) * limit + 1;
3045
+ const end = Math.min(page * limit, total);
3046
+ return { start, end };
3047
+ };
3048
+ function Panel({
3049
+ title,
3050
+ description,
3051
+ level = 2,
3052
+ titleRight,
3053
+ note,
3054
+ footer,
3055
+ padding = "medium",
3056
+ className,
3057
+ children,
3058
+ ...props
3059
+ }) {
3060
+ const id = React12__namespace.useId();
3061
+ const hasTitle = title != null;
3062
+ const Heading = level === 3 ? "h3" : "h2";
3063
+ const Root9 = hasTitle ? "section" : "div";
3064
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3065
+ Root9,
3066
+ {
3067
+ "aria-labelledby": hasTitle ? id : void 0,
3068
+ "data-slot": "panel",
3069
+ className: cn(
3070
+ "flex min-w-0 flex-col rounded-medium border border-sys-divider-subtle bg-sys-background",
3071
+ padding === "large" ? "gap-[16px] p-[24px]" : "gap-[12px] p-[16px]",
3072
+ className
3073
+ ),
3074
+ ...props,
3075
+ children: [
3076
+ hasTitle || titleRight ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-[8px]", children: [
3077
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-col gap-[4px]", children: [
3078
+ hasTitle ? /* @__PURE__ */ jsxRuntime.jsx(Heading, { id, className: "text-h5 text-sys-text-main", children: title }) : null,
3079
+ description != null ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "break-keep text-small-regular text-sys-text-subtle wrap-break-word", children: description }) : null
3080
+ ] }),
3081
+ hasTitle && titleRight != null ? (
3082
+ // 제목 첫 줄(text-h5 16px × 1.5 = 24px) 높이 안에서 세로 가운데 — 32px 버튼이 윗변에 붙어 글자가 제목보다 4~7px 아래로 처졌다
3083
+ // (2026-10-30 홀드아웃 17 세트 2, Opus "'전체 보기' links sit slightly below their card titles"). 더 큰 요소는 위아래로 고르게 넘친다
3084
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-[24px] shrink-0 items-center", children: titleRight })
3085
+ ) : titleRight
3086
+ ] }) : null,
3087
+ children,
3088
+ note != null || footer != null ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-[8px]", children: [
3089
+ note != null ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "break-keep text-small-regular text-sys-text-subtle wrap-break-word", children: note }) : null,
3090
+ footer != null ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end gap-[8px]", children: footer }) : null
3091
+ ] }) : null
3092
+ ]
3093
+ }
3094
+ );
3095
+ }
3096
+ var Table = React12__namespace.forwardRef(
3097
+ ({ className, ...props }, ref) => (
3098
+ // 둥근 테두리 상자(AgGridTable 과 같은 8px·같은 선). overflow-auto 라 내용이 라운드로 잘린다 (2026-10-17 이슈 47 4차)
3099
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full overflow-auto rounded-medium border border-sys-divider-subtle", children: /* @__PURE__ */ jsxRuntime.jsx(
3100
+ "table",
3101
+ {
3102
+ ref,
3103
+ className: cn("w-full table-fixed border-collapse border-spacing-0 border-0", className),
3104
+ ...props
3105
+ }
3106
+ ) })
3107
+ )
3108
+ );
3109
+ var tableHeaderVariant = classVarianceAuthority.cva(
3110
+ // 헤더: 아주 연한 바탕(sys-table-header-background = o10) + 아래 1px 선(행 선과 같은 토큰). 양끝 라운드는 바깥 상자가 맡는다.
3111
+ // 선은 th 에 — border-separate(ParameterTable)에서도 그려지도록 (2026-10-17 이슈 47 4차)
3112
+ "[&_tr]:border-none [&_tr:hover]:bg-transparent [&_tr:active]:bg-transparent [&_th]:bg-sys-table-header-background [&_th]:border-b [&_th]:border-sys-divider-subtle [&_th]:text-sys-text-subtle [&_th]:text-h6",
3113
+ {
3114
+ variants: {
3115
+ spacing: {
3116
+ compact: "[&_th]:px-[12px] [&_th]:py-[2px]",
3117
+ normal: "[&_th]:px-[12px] [&_th]:py-[8px]"
3118
+ }
3119
+ },
3120
+ defaultVariants: {
3121
+ spacing: "normal"
3122
+ }
3123
+ }
3124
+ );
3125
+ var TableHeader = React12__namespace.forwardRef(
3126
+ ({ className, spacing, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("thead", { ref, className: cn(tableHeaderVariant({ spacing }), className), ...props })
3127
+ );
3128
+ var tableBodyVariant = classVarianceAuthority.cva(null, {
3129
+ variants: {
3130
+ spacing: {
3131
+ normal: "[&_td]:h-[50px]",
3132
+ compact: "[&_td]:h-[36px]"
3133
+ }
3134
+ },
3135
+ defaultVariants: {
3136
+ spacing: "normal"
3137
+ }
3138
+ });
3139
+ var TableBody = React12__namespace.forwardRef(
3140
+ ({ className, spacing, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("tbody", { ref, className: cn(tableBodyVariant({ spacing }), className), ...props })
3141
+ );
3142
+ var TablePagination = React12__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
3143
+ "div",
3144
+ {
3145
+ ref,
3146
+ className: cn("mt-[38px] flex items-center justify-center", className),
3147
+ ...props
3148
+ }
3149
+ ));
3150
+ var TableRow = React12__namespace.forwardRef(
3151
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
3152
+ "tr",
3153
+ {
3154
+ ref,
3155
+ className: cn(
3156
+ // 행 선은 헤더·바깥 테두리와 같은 토큰, 마지막 행은 바깥 테두리와 겹치지 않게 선 없음
3157
+ "border-b border-sys-divider-subtle border-solid last:border-b-0 hover:bg-sys-table-hover active:bg-sys-table-press data-[state=selected]:bg-sys-table-select",
3158
+ className
3159
+ ),
3160
+ ...props
3161
+ }
3162
+ )
3163
+ );
3164
+ var NUMBER_COLUMN_CLASS = "w-[140px] whitespace-nowrap";
3165
+ var tableHeadVariant = classVarianceAuthority.cva(null, {
3166
+ variants: {
3167
+ align: {
3168
+ left: "text-left",
3169
+ center: "text-center",
3170
+ right: `text-right ${NUMBER_COLUMN_CLASS}`
3171
+ }
3172
+ },
3173
+ defaultVariants: {
3174
+ align: "left"
3175
+ }
3176
+ });
3177
+ var TableHead = React12__namespace.forwardRef(
3178
+ ({ className, align, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
3179
+ "th",
3180
+ {
3181
+ ref,
3182
+ className: cn(tableHeadVariant({ align: alignFromClassName(align, className) }), className),
3183
+ ...props
3184
+ }
3185
+ )
3186
+ );
3187
+ var tableCellMasterVariant = classVarianceAuthority.cva("align-middle px-[12px]", {
3188
+ variants: {
3189
+ align: {
3190
+ left: "",
3191
+ center: "[&>_.c-wrap-main]:justify-center",
3192
+ // 머리글 없는 표는 첫 행이 열 폭을 정하므로 셀에도 숫자 열 폭을 준다
3193
+ right: `[&>_.c-wrap-main]:justify-end ${NUMBER_COLUMN_CLASS}`
3194
+ }
3195
+ },
3196
+ defaultVariants: {
3197
+ align: "left"
3198
+ }
3199
+ });
3200
+ function alignFromClassName(align, className) {
3201
+ if (align) return align;
3202
+ if (/(^|\s)text-right(\s|$)/.test(className ?? "")) return "right";
3203
+ if (/(^|\s)text-center(\s|$)/.test(className ?? "")) return "center";
3204
+ return void 0;
3205
+ }
3206
+ var TableCell = React12__namespace.forwardRef(
3207
+ ({ className, children, desc, customElement, align, ...props }, ref) => {
3208
+ return /* @__PURE__ */ jsxRuntime.jsx(
3209
+ "td",
3210
+ {
3211
+ ref,
3212
+ className: cn(
3213
+ tableCellMasterVariant({ align: alignFromClassName(align, className) }),
3214
+ className
3215
+ ),
3216
+ ...props,
3217
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "c-wrap-main flex gap-[12px] items-center w-full h-full text-base-regular text-sys-text-main", children: [
3218
+ customElement && customElement,
3219
+ React12__namespace.isValidElement(children) ? desc ? (
3220
+ // 엘리먼트 자식(Badge 등)도 desc 를 아래에 함께 보여준다
3221
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
3222
+ children,
3223
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "c-text-overflow text-small-regular text-sys-text-subtler", children: desc })
3224
+ ] })
3225
+ ) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
3226
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "c-text-overflow text-base-regular text-sys-text-main", children }),
3227
+ desc && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "c-text-overflow text-small-regular text-sys-text-subtler", children: desc })
3228
+ ] })
3229
+ ] })
3230
+ }
3231
+ );
3232
+ }
3233
+ );
3234
+ function SortIcon({ direction = "asc" }) {
3235
+ const activeColor = "var(--color-secondary60)";
3236
+ const inactiveColor = "var(--color-secondary30)";
3237
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "22", height: "24", viewBox: "0 0 22 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: direction ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3238
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M11 5L6 10H16L11 5Z", fill: direction === "asc" ? activeColor : inactiveColor }),
3239
+ /* @__PURE__ */ jsxRuntime.jsx(
3240
+ "path",
3241
+ {
3242
+ d: "M11 19L16 14L6 14L11 19Z",
3243
+ fill: direction === "asc" ? inactiveColor : activeColor
3244
+ }
3245
+ )
3246
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3247
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M11 5L6 10H16L11 5Z", fill: inactiveColor }),
3248
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M11 19L16 14L6 14L11 19Z", fill: inactiveColor })
3249
+ ] }) });
3250
+ }
3251
+ Table.displayName = "Table";
3252
+ TableHeader.displayName = "TableHeader";
3253
+ TableBody.displayName = "TableBody";
3254
+ TablePagination.displayName = "TablePagination";
3255
+ TableRow.displayName = "TableRow";
3256
+ TableHead.displayName = "TableHead";
3257
+ TableCell.displayName = "TableCell";
3258
+ function Skeleton({ className, ...props }) {
3259
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("animate-pulse rounded-md bg-secondary20", className), ...props });
3260
+ }
3261
+ function seededWidth(row, col, min, max) {
3262
+ const hash = (row * 31 + col * 17 + 7) * 2654435761 >>> 0;
3263
+ return min + hash % (max - min + 1);
3264
+ }
3265
+ function buildColumns(columnDefs, selectionColumnWidth) {
3266
+ const cols = [];
3267
+ if (selectionColumnWidth != null) {
3268
+ cols.push({ width: selectionColumnWidth });
3269
+ }
3270
+ for (const def of columnDefs) {
3271
+ cols.push({
3272
+ width: def.width,
3273
+ flex: def.flex,
3274
+ minWidth: def.minWidth
3275
+ });
3276
+ }
3277
+ return cols;
3278
+ }
3279
+ function getColStyle(col) {
3280
+ if (col.width != null) {
3281
+ return { width: col.width, flexShrink: 0 };
3282
+ }
3283
+ if (col.flex != null) {
3284
+ return { flex: col.flex, minWidth: col.minWidth };
3285
+ }
3286
+ return { flex: 1 };
3287
+ }
3288
+ function TableSkeleton({
3289
+ columnDefs = [],
3290
+ rowLength = 3,
3291
+ rowHeight = 50,
3292
+ headerHeight = 40,
3293
+ selectionColumnWidth
3294
+ }) {
3295
+ const displayRowLength = rowLength && rowLength > 0 ? rowLength : 5;
3296
+ const columns = buildColumns(columnDefs, selectionColumnWidth);
3297
+ return /* @__PURE__ */ jsxRuntime.jsxs(Stack, { direction: "column", className: "w-full", children: [
3298
+ /* @__PURE__ */ jsxRuntime.jsx(
3299
+ "div",
3300
+ {
3301
+ className: "flex items-center bg-sys-table-header-background border-b border-sys-divider-subtler rounded-[6px]",
3302
+ style: { height: headerHeight + 1, paddingLeft: 10, paddingRight: 10 },
3303
+ children: columns.map((col, colIndex) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center px-[6px]", style: getColStyle(col), children: /* @__PURE__ */ jsxRuntime.jsx(
3304
+ Skeleton,
3305
+ {
3306
+ className: "h-[12px] rounded-[3px] !bg-grayscale-s20",
3307
+ style: { width: `${seededWidth(0, colIndex, 40, 70)}%` }
3308
+ }
3309
+ ) }, colIndex))
3310
+ }
3311
+ ),
3312
+ Array.from({ length: displayRowLength }).map((_, rowIndex) => /* @__PURE__ */ jsxRuntime.jsx(
3313
+ "div",
3314
+ {
3315
+ className: cn(
3316
+ "flex items-center",
3317
+ rowIndex < displayRowLength - 1 && "border-b border-sys-divider-subtler"
3318
+ ),
3319
+ style: { height: rowHeight, paddingLeft: 10, paddingRight: 10 },
3320
+ children: columns.map((col, colIndex) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center px-[6px]", style: getColStyle(col), children: /* @__PURE__ */ jsxRuntime.jsx(
3321
+ Skeleton,
3322
+ {
3323
+ className: "h-[14px] rounded-[3px]",
3324
+ style: { width: `${seededWidth(rowIndex + 1, colIndex, 40, 80)}%` }
3325
+ }
3326
+ ) }, colIndex))
3327
+ },
3328
+ rowIndex
3329
+ ))
3330
+ ] });
3331
+ }
3332
+ var AgGridContext = React12.createContext({
3333
+ containerHeight: 0,
3334
+ isEmpty: false,
3335
+ tableProps: {},
3336
+ ref: null
3337
+ });
3338
+ function AgGridContextProvider({
3339
+ children,
3340
+ value
3341
+ }) {
3342
+ return /* @__PURE__ */ jsxRuntime.jsx(AgGridContext.Provider, { value, children });
3343
+ }
3344
+
3345
+ // src/components/agGridTable/localeText.ts
3346
+ var AG_GRID_LOCALE_KR = {
3347
+ // Set Filter
3348
+ selectAll: "(\uC804\uCCB4 \uC120\uD0DD)",
3349
+ selectAllSearchResults: "(\uAC80\uC0C9 \uACB0\uACFC \uBAA8\uB450 \uC120\uD0DD)",
3350
+ addCurrentSelectionToFilter: "\uD604\uC7AC \uC120\uD0DD\uC744 \uD544\uD130\uC5D0 \uCD94\uAC00",
3351
+ searchOoo: "\uAC80\uC0C9...",
3352
+ blanks: "(\uBE48\uCE78)",
3353
+ noMatches: "\uC77C\uCE58\uD558\uB294 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4",
3354
+ // Number Filter & Text Filter
3355
+ filterOoo: "\uD544\uD130...",
3356
+ equals: "\uAC19\uC74C",
3357
+ notEqual: "\uAC19\uC9C0 \uC54A\uC74C",
3358
+ blank: "\uBE48\uCE78",
3359
+ notBlank: "\uBE44\uC5B4 \uC788\uC9C0 \uC54A\uC74C",
3360
+ empty: "\uC120\uD0DD\uD558\uC138\uC694",
3361
+ // Number Filter
3362
+ lessThan: "\uBCF4\uB2E4 \uC791\uC74C",
3363
+ greaterThan: "\uBCF4\uB2E4 \uD07C",
3364
+ lessThanOrEqual: "\uC774\uD558",
3365
+ greaterThanOrEqual: "\uC774\uC0C1",
3366
+ inRange: "\uC0AC\uC774",
3367
+ inRangeStart: "\uBD80\uD130",
3368
+ inRangeEnd: "\uAE4C\uC9C0",
3369
+ // Text Filter
3370
+ contains: "\uD3EC\uD568",
3371
+ notContains: "\uD3EC\uD568\uD558\uC9C0 \uC54A\uC74C",
3372
+ startsWith: "\uC2DC\uC791",
3373
+ endsWith: "\uB05D",
3374
+ // Date Filter
3375
+ dateFormatOoo: "yyyy-mm-dd",
3376
+ before: "\uC774\uC804",
3377
+ after: "\uC774\uD6C4",
3378
+ // Filter Conditions
3379
+ andCondition: "AND",
3380
+ orCondition: "OR",
3381
+ // Filter Buttons
3382
+ applyFilter: "\uC801\uC6A9",
3383
+ resetFilter: "\uC7AC\uC124\uC815",
3384
+ clearFilter: "\uC9C0\uC6B0\uAE30",
3385
+ cancelFilter: "\uCDE8\uC18C",
3386
+ // Filter Titles
3387
+ textFilter: "\uD14D\uC2A4\uD2B8 \uD544\uD130",
3388
+ numberFilter: "\uC22B\uC790 \uD544\uD130",
3389
+ dateFilter: "\uB0A0\uC9DC \uD544\uD130",
3390
+ setFilter: "\uC138\uD2B8 \uD544\uD130",
3391
+ // Group Column Filter
3392
+ groupFilterSelect: "\uD544\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694:",
3393
+ // Advanced Filter
3394
+ advancedFilterContains: "\uD3EC\uD568",
3395
+ advancedFilterNotContains: "\uD3EC\uD568\uD558\uC9C0 \uC54A\uC74C",
3396
+ advancedFilterTextEquals: "\uAC19\uC74C",
3397
+ advancedFilterTextNotEqual: "\uAC19\uC9C0 \uC54A\uC74C",
3398
+ advancedFilterStartsWith: "\uC2DC\uC791\uC774",
3399
+ advancedFilterEndsWith: "\uB05D\uC774",
3400
+ advancedFilterBlank: "\uBE44\uC5B4 \uC788\uC74C",
3401
+ advancedFilterNotBlank: "\uBE44\uC5B4 \uC788\uC9C0 \uC54A\uC74C",
3402
+ advancedFilterEquals: "=",
3403
+ advancedFilterNotEqual: "!=",
3404
+ advancedFilterGreaterThan: ">",
3405
+ advancedFilterGreaterThanOrEqual: ">=",
3406
+ advancedFilterLessThan: "<",
3407
+ advancedFilterLessThanOrEqual: "<=",
3408
+ advancedFilterTrue: "\uCC38\uC784",
3409
+ advancedFilterFalse: "\uAC70\uC9D3\uC784",
3410
+ advancedFilterAnd: "AND",
3411
+ advancedFilterOr: "OR",
3412
+ advancedFilterApply: "\uC801\uC6A9",
3413
+ advancedFilterBuilder: "\uC0DD\uC131\uAE30",
3414
+ advancedFilterValidationMissingColumn: "\uC5F4\uC774 \uB204\uB77D\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
3415
+ advancedFilterValidationMissingOption: "\uC635\uC158\uC774 \uB204\uB77D\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
3416
+ advancedFilterValidationMissingValue: "\uAC12\uC774 \uB204\uB77D\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
3417
+ advancedFilterValidationInvalidColumn: "\uC5F4\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4",
3418
+ advancedFilterValidationInvalidOption: "\uC635\uC158\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4",
3419
+ advancedFilterValidationMissingQuote: "\uAC12\uC5D0 \uB05D\uB098\uB294 \uC778\uC6A9\uBD80\uD638\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4",
3420
+ advancedFilterValidationNotANumber: "\uAC12\uC774 \uC22B\uC790\uAC00 \uC544\uB2D9\uB2C8\uB2E4",
3421
+ advancedFilterValidationInvalidDate: "\uAC12\uC774 \uC720\uD6A8\uD55C \uB0A0\uC9DC\uAC00 \uC544\uB2D9\uB2C8\uB2E4",
3422
+ advancedFilterValidationMissingCondition: "\uC870\uAC74\uC774 \uB204\uB77D\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
3423
+ advancedFilterValidationJoinOperatorMismatch: "\uC870\uAC74 \uB0B4\uC758 \uC5F0\uACB0 \uC5F0\uC0B0\uC790\uB294 \uB3D9\uC77C\uD574\uC57C \uD569\uB2C8\uB2E4",
3424
+ advancedFilterValidationInvalidJoinOperator: "\uC5F0\uACB0 \uC5F0\uC0B0\uC790\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4",
3425
+ advancedFilterValidationMissingEndBracket: "\uB05D \uAD04\uD638\uAC00 \uB204\uB77D\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
3426
+ advancedFilterValidationExtraEndBracket: "\uC885\uACB0 \uAD04\uD638\uAC00 \uB108\uBB34 \uB9CE\uC2B5\uB2C8\uB2E4",
3427
+ advancedFilterValidationMessage: "\uC2DD\uC5D0 \uC624\uB958\uAC00 \uC788\uC2B5\uB2C8\uB2E4. ${variable} - ${variable}.",
3428
+ advancedFilterValidationMessageAtEnd: "\uC2DD\uC5D0 \uC624\uB958\uAC00 \uC788\uC2B5\uB2C8\uB2E4. ${variable} \uC2DD\uC758 \uB05D\uC5D0 \uC788\uC2B5\uB2C8\uB2E4.",
3429
+ advancedFilterBuilderTitle: "\uACE0\uAE09 \uD544\uD130",
3430
+ advancedFilterBuilderApply: "\uC801\uC6A9",
3431
+ advancedFilterBuilderCancel: "\uCDE8\uC18C",
3432
+ advancedFilterBuilderAddButtonTooltip: "\uD544\uD130 \uB610\uB294 \uADF8\uB8F9 \uCD94\uAC00",
3433
+ advancedFilterBuilderRemoveButtonTooltip: "\uC81C\uAC70",
3434
+ advancedFilterBuilderMoveUpButtonTooltip: "\uC704\uB85C \uC774\uB3D9",
3435
+ advancedFilterBuilderMoveDownButtonTooltip: "\uC544\uB798\uB85C \uC774\uB3D9",
3436
+ advancedFilterBuilderAddJoin: "\uADF8\uB8F9 \uCD94\uAC00",
3437
+ advancedFilterBuilderAddCondition: "\uD544\uD130 \uCD94\uAC00",
3438
+ advancedFilterBuilderSelectColumn: "\uC5F4 \uC120\uD0DD",
3439
+ advancedFilterBuilderSelectOption: "\uC635\uC158 \uC120\uD0DD",
3440
+ advancedFilterBuilderEnterValue: "\uAC12\uC744 \uC785\uB825\uD558\uC138\uC694...",
3441
+ advancedFilterBuilderValidationAlreadyApplied: "\uD604\uC7AC \uD544\uD130\uAC00 \uC774\uBBF8 \uC801\uC6A9\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",
3442
+ advancedFilterBuilderValidationIncomplete: "\uBAA8\uB4E0 \uC870\uAC74\uC774 \uC644\uB8CC\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.",
3443
+ advancedFilterBuilderValidationSelectColumn: "\uC5F4\uC744 \uC120\uD0DD\uD574\uC57C \uD569\uB2C8\uB2E4.",
3444
+ advancedFilterBuilderValidationSelectOption: "\uC635\uC158\uC744 \uC120\uD0DD\uD574\uC57C \uD569\uB2C8\uB2E4.",
3445
+ advancedFilterBuilderValidationEnterValue: "\uAC12\uC744 \uC785\uB825\uD574\uC57C \uD569\uB2C8\uB2E4.",
3446
+ // Side Bar
3447
+ columns: "\uC5F4",
3448
+ filters: "\uD544\uD130",
3449
+ // columns tool panel
3450
+ pivotMode: "\uD53C\uBC97 \uBAA8\uB4DC",
3451
+ groups: "\uD589 \uADF8\uB8F9",
3452
+ rowGroupColumnsEmptyMessage: "\uC5EC\uAE30\uB85C \uB4DC\uB798\uADF8\uD558\uC5EC \uD589 \uADF8\uB8F9 \uC124\uC815",
3453
+ values: "\uAC12",
3454
+ valueColumnsEmptyMessage: "\uC5EC\uAE30\uB85C \uB4DC\uB798\uADF8\uD558\uC5EC \uC9D1\uACC4",
3455
+ pivots: "\uC5F4 \uB808\uC774\uBE14",
3456
+ pivotColumnsEmptyMessage: "\uC5EC\uAE30\uB85C \uB4DC\uB798\uADF8\uD558\uC5EC \uC5F4 \uB808\uC774\uBE14 \uC124\uC815",
3457
+ // Header of the Default Group Column
3458
+ group: "\uADF8\uB8F9",
3459
+ // Row Drag
3460
+ rowDragRow: "\uD589",
3461
+ rowDragRows: "\uD589\uB4E4",
3462
+ // Other
3463
+ loadingOoo: "\uB85C\uB529 \uC911...",
3464
+ loadingError: "\uC624\uB958",
3465
+ noRowsToShow: "\uD45C\uC2DC\uD560 \uD589\uC774 \uC5C6\uC2B5\uB2C8\uB2E4",
3466
+ enabled: "\uC0AC\uC6A9 \uC911",
3467
+ // Menu
3468
+ pinColumn: "\uC5F4 \uACE0\uC815",
3469
+ pinLeft: "\uC67C\uCABD\uC5D0 \uACE0\uC815",
3470
+ pinRight: "\uC624\uB978\uCABD\uC5D0 \uACE0\uC815",
3471
+ noPin: "\uACE0\uC815 \uC5C6\uC74C",
3472
+ valueAggregation: "\uAC12 \uC9D1\uACC4",
3473
+ noAggregation: "\uC5C6\uC74C",
3474
+ autosizeThisColumn: "\uC774 \uC5F4 \uC790\uB3D9 \uD06C\uAE30 \uC870\uC815",
3475
+ autosizeAllColumns: "\uBAA8\uB4E0 \uC5F4 \uC790\uB3D9 \uD06C\uAE30 \uC870\uC815",
3476
+ groupBy: "\uADF8\uB8F9\uD654 \uAE30\uC900",
3477
+ ungroupBy: "\uADF8\uB8F9 \uD574\uC81C \uAE30\uC900",
3478
+ ungroupAll: "\uBAA8\uB4E0 \uADF8\uB8F9 \uD574\uC81C",
3479
+ addToValues: "${variable} \uAC12\uC744 \uCD94\uAC00",
3480
+ removeFromValues: "${variable} \uAC12\uC744 \uC81C\uAC70",
3481
+ addToLabels: "${variable} \uB808\uC774\uBE14\uC5D0 \uCD94\uAC00",
3482
+ removeFromLabels: "${variable} \uB808\uC774\uBE14\uC5D0\uC11C \uC81C\uAC70",
3483
+ resetColumns: "\uC5F4 \uC7AC\uC124\uC815",
3484
+ expandAll: "\uBAA8\uB4E0 \uD589 \uADF8\uB8F9 \uD655\uC7A5",
3485
+ collapseAll: "\uBAA8\uB4E0 \uD589 \uADF8\uB8F9 \uB2EB\uAE30",
3486
+ copy: "\uBCF5\uC0AC",
3487
+ ctrlC: "Ctrl+C",
3488
+ ctrlX: "Ctrl+X",
3489
+ copyWithHeaders: "\uBA38\uB9AC\uAE00\uACFC \uD568\uAED8 \uBCF5\uC0AC",
3490
+ copyWithGroupHeaders: "\uADF8\uB8F9 \uBA38\uB9AC\uAE00\uACFC \uD568\uAED8 \uBCF5\uC0AC",
3491
+ cut: "\uC798\uB77C\uB0B4\uAE30",
3492
+ paste: "\uBD99\uC5EC\uB123\uAE30",
3493
+ ctrlV: "Ctrl+V",
3494
+ export: "\uB0B4\uBCF4\uB0B4\uAE30",
3495
+ csvExport: "CSV \uB0B4\uBCF4\uB0B4\uAE30",
3496
+ excelExport: "Excel \uB0B4\uBCF4\uB0B4\uAE30",
3497
+ columnFilter: "\uC5F4 \uD544\uD130",
3498
+ columnChooser: "\uC5F4 \uC120\uD0DD",
3499
+ chooseColumns: "\uC5F4 \uC120\uD0DD",
3500
+ sortAscending: "\uC624\uB984\uCC28\uC21C \uC815\uB82C",
3501
+ sortDescending: "\uB0B4\uB9BC\uCC28\uC21C \uC815\uB82C",
3502
+ sortUnSort: "\uC815\uB82C \uD574\uC81C",
3503
+ // Enterprise Menu Aggregation and Status Bar
3504
+ sum: "\uD569\uACC4",
3505
+ first: "\uCCAB \uBC88\uC9F8",
3506
+ last: "\uB9C8\uC9C0\uB9C9",
3507
+ min: "\uCD5C\uC18C",
3508
+ max: "\uCD5C\uB300",
3509
+ none: "\uC5C6\uC74C",
3510
+ count: "\uAC1C\uC218",
3511
+ avg: "\uD3C9\uADE0",
3512
+ filteredRows: "\uD544\uD130\uB41C \uD589",
3513
+ selectedRows: "\uC120\uD0DD\uB41C \uD589",
3514
+ totalRows: "\uCD1D \uD589 \uC218",
3515
+ totalAndFilteredRows: "\uD589",
3516
+ more: "\uB354 \uBCF4\uAE30",
3517
+ to: "\uC5D0\uC11C",
3518
+ of: "\uC758",
3519
+ page: "\uD398\uC774\uC9C0",
3520
+ pageLastRowUnknown: "?",
3521
+ nextPage: "\uB2E4\uC74C \uD398\uC774\uC9C0",
3522
+ lastPage: "\uB9C8\uC9C0\uB9C9 \uD398\uC774\uC9C0",
3523
+ firstPage: "\uCCAB \uD398\uC774\uC9C0",
3524
+ previousPage: "\uC774\uC804 \uD398\uC774\uC9C0",
3525
+ pageSizeSelectorLabel: "\uD398\uC774\uC9C0 \uD06C\uAE30:",
3526
+ footerTotal: "\uCD1D\uACC4",
3527
+ statusBarLastRowUnknown: "?",
3528
+ // Pivoting
3529
+ pivotColumnGroupTotals: "\uCD1D\uD569\uACC4",
3530
+ // Enterprise Menu (Charts)
3531
+ pivotChartAndPivotMode: "\uD53C\uBC97 \uCC28\uD2B8 & \uD53C\uBC97 \uBAA8\uB4DC",
3532
+ pivotChart: "\uD53C\uBC97 \uCC28\uD2B8",
3533
+ chartRange: "\uCC28\uD2B8 \uBC94\uC704",
3534
+ columnChart: "\uCEEC\uB7FC",
3535
+ groupedColumn: "\uADF8\uB8F9\uD654",
3536
+ stackedColumn: "\uC2A4\uD0DD",
3537
+ normalizedColumn: "100% \uC2A4\uD0DD",
3538
+ barChart: "\uB9C9\uB300",
3539
+ groupedBar: "\uADF8\uB8F9\uD654",
3540
+ stackedBar: "\uC2A4\uD0DD",
3541
+ normalizedBar: "100% \uC2A4\uD0DD",
3542
+ pieChart: "\uD30C\uC774",
3543
+ pie: "\uD30C\uC774",
3544
+ donut: "\uB3C4\uB11B",
3545
+ lineChart: "\u2018\uAEBE\uC740\uC120\uD615\u2019",
3546
+ stackedLine: "\u2018\uB204\uC801\u2019",
3547
+ normalizedLine: "\u2018100% \uB204\uC801\u2019",
3548
+ xyChart: "X Y (\uC0B0\uC810\uB3C4)",
3549
+ scatter: "\uC0B0\uC810\uB3C4",
3550
+ bubble: "\uBC84\uBE14",
3551
+ areaChart: "\uC601\uC5ED",
3552
+ area: "\uC601\uC5ED",
3553
+ stackedArea: "\uC2A4\uD0DD \uC601\uC5ED",
3554
+ normalizedArea: "100% \uC2A4\uD0DD \uC601\uC5ED",
3555
+ histogramChart: "\uD788\uC2A4\uD1A0\uADF8\uB7A8",
3556
+ polarChart: "\uD3F4\uB77C",
3557
+ radarLine: "\uB808\uC774\uB354 \uB77C\uC778",
3558
+ radarArea: "\uB808\uC774\uB354 \uC601\uC5ED",
3559
+ nightingale: "\uB098\uC774\uD305\uAC8C\uC77C",
3560
+ radialColumn: "\uBC29\uC0AC\uD615 \uCEEC\uB7FC",
3561
+ radialBar: "\uBC29\uC0AC\uD615 \uB9C9\uB300",
3562
+ statisticalChart: "\uD1B5\uACC4",
3563
+ boxPlot: "\uC0C1\uC790 \uADF8\uB9BC",
3564
+ rangeBar: "\uBC94\uC704 \uB9C9\uB300",
3565
+ rangeArea: "\uBC94\uC704 \uC601\uC5ED",
3566
+ hierarchicalChart: "\uACC4\uCE35\uC801",
3567
+ treemap: "\uD2B8\uB9AC\uB9F5",
3568
+ sunburst: "\uC120\uBC84\uC2A4\uD2B8",
3569
+ specializedChart: "\uD2B9\uC218",
3570
+ waterfall: "\uD3ED\uD3EC",
3571
+ heatmap: "\uD788\uD2B8\uB9F5",
3572
+ combinationChart: "\uBCF5\uD569",
3573
+ columnLineCombo: "\uCEEC\uB7FC & \uB77C\uC778",
3574
+ AreaColumnCombo: "\uC601\uC5ED & \uCEEC\uB7FC",
3575
+ // Charts
3576
+ pivotChartTitle: "\uD53C\uBC97 \uCC28\uD2B8",
3577
+ rangeChartTitle: "\uBC94\uC704 \uCC28\uD2B8",
3578
+ settings: "\uCC28\uD2B8",
3579
+ data: "\uC124\uC815",
3580
+ format: "\uB9DE\uCDA4 \uC124\uC815",
3581
+ categories: "\uCE74\uD14C\uACE0\uB9AC",
3582
+ defaultCategory: "(\uC5C6\uC74C)",
3583
+ series: "\uC2DC\uB9AC\uC988",
3584
+ switchCategorySeries: "\uCE74\uD14C\uACE0\uB9AC / \uC2DC\uB9AC\uC988 \uC804\uD658",
3585
+ categoryValues: "\uCE74\uD14C\uACE0\uB9AC \uAC12",
3586
+ seriesLabels: "\uC2DC\uB9AC\uC988 \uB77C\uBCA8",
3587
+ aggregate: "\uD569\uC0B0",
3588
+ xyValues: "X Y \uAC12\uB4E4",
3589
+ paired: "\uC30D \uBAA8\uB4DC",
3590
+ axis: "\uCD95",
3591
+ xAxis: "\uC218\uD3C9 \uCD95",
3592
+ yAxis: "\uC218\uC9C1 \uCD95",
3593
+ polarAxis: "\uD3F4\uB77C \uCD95",
3594
+ radiusAxis: "\uBC18\uACBD \uCD95",
3595
+ navigator: "\uB124\uBE44\uAC8C\uC774\uD130",
3596
+ zoom: "\uC90C",
3597
+ animation: "\uC560\uB2C8\uBA54\uC774\uC158",
3598
+ crosshair: "\uD06C\uB85C\uC2A4\uD5E4\uC5B4",
3599
+ color: "\uC0C9\uC0C1",
3600
+ thickness: "\uB450\uAED8",
3601
+ preferredLength: "\uC120\uD638 \uAE38\uC774",
3602
+ xType: "X \uC720\uD615",
3603
+ axisType: "\uCD95 \uC720\uD615",
3604
+ automatic: "\uC790\uB3D9",
3605
+ category: "\uCE74\uD14C\uACE0\uB9AC",
3606
+ number: "\uC22B\uC790",
3607
+ time: "\uC2DC\uAC04",
3608
+ timeFormat: "\uC2DC\uAC04 \uD615\uC2DD",
3609
+ autoRotate: "\uC790\uB3D9 \uD68C\uC804",
3610
+ labelRotation: "\uD68C\uC804",
3611
+ circle: "\uC6D0",
3612
+ polygon: "\uB2E4\uAC01\uD615",
3613
+ square: "\uC0AC\uAC01\uD615",
3614
+ cross: "\uC2ED\uC790",
3615
+ diamond: "\uB2E4\uC774\uC544\uBAAC\uB4DC",
3616
+ plus: "\uD50C\uB7EC\uC2A4",
3617
+ triangle: "\uC0BC\uAC01\uD615",
3618
+ heart: "\uD558\uD2B8",
3619
+ orientation: "\uBC29\uD5A5",
3620
+ fixed: "\uACE0\uC815",
3621
+ parallel: "\uBCD1\uB82C",
3622
+ perpendicular: "\uC218\uC9C1",
3623
+ radiusAxisPosition: "\uC704\uCE58",
3624
+ ticks: "\uD2F1",
3625
+ gridLines: "\uACA9\uC790 \uB77C\uC778",
3626
+ width: "\uB108\uBE44",
3627
+ height: "\uB192\uC774",
3628
+ length: "\uAE38\uC774",
3629
+ padding: "\uD328\uB529",
3630
+ spacing: "\uAC04\uACA9",
3631
+ chartStyle: "\uCC28\uD2B8 \uC2A4\uD0C0\uC77C",
3632
+ title: "\uC81C\uBAA9",
3633
+ chartTitles: "\uC81C\uBAA9\uB4E4",
3634
+ chartTitle: "\uCC28\uD2B8 \uC81C\uBAA9",
3635
+ chartSubtitle: "\uBD80\uC81C\uBAA9",
3636
+ horizontalAxisTitle: "\uC218\uD3C9 \uCD95 \uC81C\uBAA9",
3637
+ verticalAxisTitle: "\uC218\uC9C1 \uCD95 \uC81C\uBAA9",
3638
+ polarAxisTitle: "\uD3F4\uB77C \uCD95 \uC81C\uBAA9",
3639
+ titlePlaceholder: "\uCC28\uD2B8 \uC81C\uBAA9",
3640
+ background: "\uBC30\uACBD",
3641
+ font: "\uAE00\uAF34",
3642
+ weight: "\uAD75\uAE30",
3643
+ top: "\uC704",
3644
+ right: "\uC624\uB978\uCABD",
3645
+ bottom: "\uC544\uB798",
3646
+ left: "\uC67C\uCABD",
3647
+ labels: "\uB77C\uBCA8",
3648
+ calloutLabels: "\uCF5C\uC544\uC6C3 \uB77C\uBCA8",
3649
+ sectorLabels: "\uC139\uD130 \uB77C\uBCA8",
3650
+ positionRatio: "\uC704\uCE58 \uBE44\uC728",
3651
+ size: "\uD06C\uAE30",
3652
+ shape: "\uD615\uD0DC",
3653
+ minSize: "\uCD5C\uC18C \uD06C\uAE30",
3654
+ maxSize: "\uCD5C\uB300 \uD06C\uAE30",
3655
+ legend: "\uBC94\uB840",
3656
+ position: "\uC704\uCE58",
3657
+ markerSize: "\uB9C8\uCEE4 \uD06C\uAE30",
3658
+ markerStroke: "\uB9C8\uCEE4 \uC2A4\uD2B8\uB85C\uD06C",
3659
+ markerPadding: "\uB9C8\uCEE4 \uD328\uB529",
3660
+ itemSpacing: "\uC544\uC774\uD15C \uAC04\uACA9",
3661
+ itemPaddingX: "\uC544\uC774\uD15C \uD328\uB529 X",
3662
+ itemPaddingY: "\uC544\uC774\uD15C \uD328\uB529 Y",
3663
+ layoutHorizontalSpacing: "\uC218\uD3C9 \uAC04\uACA9",
3664
+ layoutVerticalSpacing: "\uC218\uC9C1 \uAC04\uACA9",
3665
+ strokeWidth: "\uC2A4\uD2B8\uB85C\uD06C \uB450\uAED8",
3666
+ offset: "\uC624\uD504\uC14B",
3667
+ offsets: "\uC624\uD504\uC14B\uB4E4",
3668
+ tooltips: "\uD234\uD301",
3669
+ callout: "\uCF5C\uC544\uC6C3",
3670
+ markers: "\uB9C8\uCEE4",
3671
+ shadow: "\uADF8\uB9BC\uC790",
3672
+ blur: "\uBE14\uB7EC",
3673
+ xOffset: "X \uC624\uD504\uC14B",
3674
+ yOffset: "Y \uC624\uD504\uC14B",
3675
+ lineWidth: "\uB77C\uC778 \uB108\uBE44",
3676
+ lineDash: "\uB77C\uC778 \uB300\uC2DC",
3677
+ lineDashOffset: "\uB300\uC2DC \uC624\uD504\uC14B",
3678
+ scrollingZoom: "\uC2A4\uD06C\uB864",
3679
+ scrollingStep: "\uC2A4\uD06C\uB864 \uC2A4\uD15D",
3680
+ selectingZoom: "\uC120\uD0DD",
3681
+ durationMillis: "\uC9C0\uC18D \uC2DC\uAC04 (ms)",
3682
+ crosshairLabel: "\uB77C\uBCA8",
3683
+ crosshairSnap: "\uB178\uB4DC\uC5D0 \uC2A4\uB0C5",
3684
+ normal: "\uBCF4\uD1B5",
3685
+ bold: "\uAD75\uAC8C",
3686
+ italic: "\uAE30\uC6B8\uC784\uAF34",
3687
+ boldItalic: "\uAD75\uAC8C \uAE30\uC6B8\uC784\uAF34",
3688
+ predefined: "\uC0AC\uC804 \uC815\uC758\uB41C",
3689
+ fillOpacity: "\uCC44\uC6B0\uAE30 \uBD88\uD22C\uBA85\uB3C4",
3690
+ strokeColor: "\uB77C\uC778 \uC0C9\uC0C1",
3691
+ strokeOpacity: "\uB77C\uC778 \uBD88\uD22C\uBA85\uB3C4",
3692
+ miniChart: "\uBBF8\uB2C8 \uCC28\uD2B8",
3693
+ histogramBinCount: "\uBE48 \uC218",
3694
+ connectorLine: "\uC5F0\uACB0 \uB77C\uC778",
3695
+ seriesItems: "\uC2DC\uB9AC\uC988 \uD56D\uBAA9",
3696
+ seriesItemType: "\uD56D\uBAA9 \uC720\uD615",
3697
+ seriesItemPositive: "\uC591\uC218",
3698
+ seriesItemNegative: "\uC74C\uC218",
3699
+ seriesItemLabels: "\uD56D\uBAA9 \uB77C\uBCA8",
3700
+ columnGroup: "\uC5F4",
3701
+ barGroup: "\uB9C9\uB300",
3702
+ pieGroup: "\uD30C\uC774",
3703
+ lineGroup: "\uB77C\uC778",
3704
+ scatterGroup: "X Y (\uC0B0\uC810\uB3C4)",
3705
+ areaGroup: "\uBA74\uC801",
3706
+ polarGroup: "\uD3F4\uB77C",
3707
+ statisticalGroup: "\uD1B5\uACC4",
3708
+ hierarchicalGroup: "\uACC4\uCE35",
3709
+ specializedGroup: "\uC804\uBB38",
3710
+ combinationGroup: "\uACB0\uD569",
3711
+ groupedColumnTooltip: "\uADF8\uB8F9\uD654",
3712
+ stackedColumnTooltip: "\uC2A4\uD0DD",
3713
+ normalizedColumnTooltip: "100% \uC2A4\uD0DD",
3714
+ groupedBarTooltip: "\uADF8\uB8F9\uD654",
3715
+ stackedBarTooltip: "\uC2A4\uD0DD",
3716
+ normalizedBarTooltip: "100% \uC2A4\uD0DD",
3717
+ pieTooltip: "\uD30C\uC774",
3718
+ donutTooltip: "\uB3C4\uB11B",
3719
+ lineTooltip: "\uB77C\uC778",
3720
+ stackedLineTooltip: "\uC2A4\uD0DD",
3721
+ normalizedLineTooltip: "100% \uC2A4\uD0DD",
3722
+ groupedAreaTooltip: "\uBA74\uC801",
3723
+ stackedAreaTooltip: "\uC2A4\uD0DD",
3724
+ normalizedAreaTooltip: "100% \uC2A4\uD0DD",
3725
+ scatterTooltip: "\uC0B0\uC810\uB3C4",
3726
+ bubbleTooltip: "\uBC84\uBE14",
3727
+ histogramTooltip: "\uD788\uC2A4\uD1A0\uADF8\uB7A8",
3728
+ radialColumnTooltip: "\uBC18\uACBD \uC5F4",
3729
+ radialBarTooltip: "\uBC18\uACBD \uB9C9\uB300",
3730
+ radarLineTooltip: "\uB808\uC774\uB354 \uB77C\uC778",
3731
+ radarAreaTooltip: "\uB808\uC774\uB354 \uBA74\uC801",
3732
+ nightingaleTooltip: "\uB098\uC774\uD305\uAC8C\uC77C",
3733
+ rangeBarTooltip: "\uBC94\uC704 \uB9C9\uB300",
3734
+ rangeAreaTooltip: "\uBC94\uC704 \uBA74\uC801",
3735
+ boxPlotTooltip: "\uBC15\uC2A4 \uD50C\uB86F",
3736
+ treemapTooltip: "\uD2B8\uB9AC\uB9F5",
3737
+ sunburstTooltip: "\uC120\uBC84\uC2A4\uD2B8",
3738
+ waterfallTooltip: "\uD3ED\uD3EC",
3739
+ heatmapTooltip: "\uD788\uD2B8\uB9F5",
3740
+ columnLineComboTooltip: "\uC5F4 & \uB77C\uC778",
3741
+ areaColumnComboTooltip: "\uBA74\uC801 & \uC5F4",
3742
+ customComboTooltip: "\uC0AC\uC6A9\uC790 \uC815\uC758 \uACB0\uD569",
3743
+ innerRadius: "\uB0B4\uBD80 \uBC18\uACBD",
3744
+ startAngle: "\uC2DC\uC791 \uAC01\uB3C4",
3745
+ endAngle: "\uB05D \uAC01\uB3C4",
3746
+ reverseDirection: "\uBC18\uB300 \uBC29\uD5A5",
3747
+ groupPadding: "\uADF8\uB8F9 \uD328\uB529",
3748
+ seriesPadding: "\uC2DC\uB9AC\uC988 \uD328\uB529",
3749
+ tile: "\uD0C0\uC77C",
3750
+ whisker: "\uC218\uC5FC",
3751
+ cap: "\uBAA8\uC790",
3752
+ capLengthRatio: "\uAE38\uC774 \uBE44\uC728",
3753
+ labelPlacement: "\uB77C\uBCA8 \uBC30\uCE58",
3754
+ inside: "\uB0B4\uBD80",
3755
+ outside: "\uC678\uBD80",
3756
+ noDataToChart: "\uCC28\uD2B8\uD654 \uD560 \uC218 \uC788\uB294 \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
3757
+ pivotChartRequiresPivotMode: "\uD53C\uBC97 \uCC28\uD2B8\uB294 \uD53C\uBC97 \uBAA8\uB4DC\uAC00 \uD65C\uC131\uD654 \uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.",
3758
+ chartSettingsToolbarTooltip: "\uBA54\uB274",
3759
+ chartLinkToolbarTooltip: "\uADF8\uB9AC\uB4DC\uC5D0 \uB9C1\uD06C\uB428",
3760
+ chartUnlinkToolbarTooltip: "\uADF8\uB9AC\uB4DC\uC5D0\uC11C \uB9C1\uD06C \uD574\uC81C\uB428",
3761
+ chartDownloadToolbarTooltip: "\uCC28\uD2B8 \uB2E4\uC6B4\uB85C\uB4DC",
3762
+ chartMenuToolbarTooltip: "\uBA54\uB274",
3763
+ chartEdit: "\uCC28\uD2B8 \uD3B8\uC9D1",
3764
+ chartAdvancedSettings: "\uACE0\uAE09 \uC124\uC815",
3765
+ chartLink: "\uADF8\uB9AC\uB4DC\uC5D0 \uB9C1\uD06C",
3766
+ chartUnlink: "\uADF8\uB9AC\uB4DC\uC5D0\uC11C \uB9C1\uD06C \uD574\uC81C",
3767
+ chartDownload: "\uCC28\uD2B8 \uB2E4\uC6B4\uB85C\uB4DC",
3768
+ histogramFrequency: "\uBE48\uB3C4",
3769
+ seriesChartType: "\uC2DC\uB9AC\uC988 \uCC28\uD2B8 \uC720\uD615",
3770
+ seriesType: "\uC2DC\uB9AC\uC988 \uC720\uD615",
3771
+ secondaryAxis: "\uBCF4\uC870 \uCD95",
3772
+ seriesAdd: "\uC2DC\uB9AC\uC988 \uCD94\uAC00",
3773
+ categoryAdd: "\uCE74\uD14C\uACE0\uB9AC \uCD94\uAC00",
3774
+ bar: "\uB9C9\uB300",
3775
+ column: "\uC5F4",
3776
+ histogram: "\uD788\uC2A4\uD1A0\uADF8\uB7A8",
3777
+ advancedSettings: "\uACE0\uAE09 \uC124\uC815",
3778
+ direction: "\uBC29\uD5A5",
3779
+ horizontal: "\uC218\uD3C9",
3780
+ vertical: "\uC218\uC9C1",
3781
+ seriesGroupType: "\uADF8\uB8F9 \uC720\uD615",
3782
+ groupedSeriesGroupType: "\uADF8\uB8F9\uD654",
3783
+ stackedSeriesGroupType: "\uC2A4\uD0DD",
3784
+ normalizedSeriesGroupType: "100% \uC2A4\uD0DD",
3785
+ legendEnabled: "\uD65C\uC131\uD654\uB428",
3786
+ invalidColor: "\uC0C9\uC0C1 \uAC12\uC774 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4",
3787
+ groupedColumnFull: "\uADF8\uB8F9\uD654\uB41C \uC5F4",
3788
+ stackedColumnFull: "\uC2A4\uD0DD\uB41C \uC5F4",
3789
+ normalizedColumnFull: "100% \uC2A4\uD0DD\uB41C \uC5F4",
3790
+ groupedBarFull: "\uADF8\uB8F9\uD654\uB41C \uB9C9\uB300",
3791
+ stackedBarFull: "\uC2A4\uD0DD\uB41C \uB9C9\uB300",
3792
+ normalizedBarFull: "100% \uC2A4\uD0DD\uB41C \uB9C9\uB300",
3793
+ stackedAreaFull: "\uC2A4\uD0DD\uB41C \uBA74\uC801",
3794
+ normalizedAreaFull: "100% \uC2A4\uD0DD\uB41C \uBA74\uC801",
3795
+ customCombo: "\uC0AC\uC6A9\uC790 \uC815\uC758 \uACB0\uD569",
3796
+ funnel: "\uAE54\uB54C\uAE30",
3797
+ coneFunnel: "\uC6D0\uBFD4 \uAE54\uB54C\uAE30",
3798
+ pyramid: "\uD53C\uB77C\uBBF8\uB4DC",
3799
+ funnelGroup: "\uAE54\uB54C\uAE30",
3800
+ funnelTooltip: "\uAE54\uB54C\uAE30",
3801
+ coneFunnelTooltip: "\uC6D0\uBFD4 \uAE54\uB54C\uAE30",
3802
+ pyramidTooltip: "\uD53C\uB77C\uBBF8\uB4DC",
3803
+ dropOff: "\uC774\uD0C8",
3804
+ stageLabels: "\uB2E8\uACC4 \uB808\uC774\uBE14",
3805
+ reverse: "\uC5ED\uBC29\uD5A5",
3806
+ // ARIA
3807
+ ariaAdvancedFilterBuilderItem: "${variable}. \uB808\uBCA8 ${variable}. \uD3B8\uC9D1\uD558\uB824\uBA74 ENTER\uB97C \uB204\uB974\uC138\uC694",
3808
+ ariaAdvancedFilterBuilderItemValidation: "${variable}. \uB808\uBCA8 ${variable}. ${variable} \uD3B8\uC9D1\uD558\uB824\uBA74 ENTER\uB97C \uB204\uB974\uC138\uC694",
3809
+ ariaAdvancedFilterBuilderList: "\uACE0\uAE09 \uD544\uD130 \uBE4C\uB354 \uBAA9\uB85D",
3810
+ ariaAdvancedFilterBuilderFilterItem: "\uD544\uD130 \uC870\uAC74",
3811
+ ariaAdvancedFilterBuilderGroupItem: "\uD544\uD130 \uADF8\uB8F9",
3812
+ ariaAdvancedFilterBuilderColumn: "\uC5F4",
3813
+ ariaAdvancedFilterBuilderOption: "\uC635\uC158",
3814
+ ariaAdvancedFilterBuilderValueP: "\uAC12",
3815
+ ariaAdvancedFilterBuilderJoinOperator: "\uC870\uD569 \uC5F0\uC0B0\uC790",
3816
+ ariaAdvancedFilterInput: "\uACE0\uAE09 \uD544\uD130 \uC785\uB825",
3817
+ ariaChecked: "\uC120\uD0DD\uB428",
3818
+ ariaColumn: "\uC5F4",
3819
+ ariaColumnGroup: "\uC5F4 \uADF8\uB8F9",
3820
+ ariaColumnFiltered: "\uC5F4 \uD544\uD130\uB9C1\uB428",
3821
+ ariaColumnSelectAll: "\uBAA8\uB4E0 \uC5F4 \uAC00\uC2DC\uC131 \uC804\uD658",
3822
+ ariaDateFilterInput: "\uB0A0\uC9DC \uD544\uD130 \uC785\uB825",
3823
+ ariaDefaultListName: "\uBAA9\uB85D",
3824
+ ariaFilterColumnsInput: "\uC5F4 \uD544\uD130 \uC785\uB825",
3825
+ ariaFilterFromValue: "\uAC12\uC5D0\uC11C \uD544\uD130",
3826
+ ariaFilterInput: "\uD544\uD130 \uC785\uB825",
3827
+ ariaFilterList: "\uD544\uD130 \uBAA9\uB85D",
3828
+ ariaFilterToValue: "\uAC12\uAE4C\uC9C0 \uD544\uD130",
3829
+ ariaFilterValue: "\uD544\uD130 \uAC12",
3830
+ ariaFilterMenuOpen: "\uD544\uD130 \uBA54\uB274 \uC5F4\uAE30",
3831
+ ariaFilteringOperator: "\uD544\uD130\uB9C1 \uC5F0\uC0B0\uC790",
3832
+ ariaHidden: "\uC228\uAE40",
3833
+ ariaIndeterminate: "\uBD88\uD655\uC815",
3834
+ ariaInputEditor: "\uC785\uB825 \uC5D0\uB514\uD130",
3835
+ ariaMenuColumn: "\uC5F4 \uBA54\uB274\uB97C \uC5F4\uB824\uBA74 ALT \uC544\uB798\uB97C \uB204\uB974\uC138\uC694",
3836
+ ariaFilterColumn: "\uD544\uD130\uB97C \uC5F4\uB824\uBA74 CTRL ENTER\uB97C \uB204\uB974\uC138\uC694",
3837
+ ariaRowDeselect: "\uC774 \uD589\uC744 \uC120\uD0DD \uD574\uC81C\uD558\uB824\uBA74 SPACE\uB97C \uB204\uB974\uC138\uC694",
3838
+ ariaHeaderSelection: "\uD5E4\uB354 \uC120\uD0DD\uC774 \uC788\uB294 \uC5F4",
3839
+ ariaSelectAllCells: "\uC2A4\uD398\uC774\uC2A4\uBC14\uB97C \uB20C\uB7EC \uBAA8\uB4E0 \uC140 \uC120\uD0DD",
3840
+ ariaRowSelectAll: "\uBAA8\uB4E0 \uD589 \uC120\uD0DD \uC804\uD658\uC744 \uC704\uD574 SPACE\uB97C \uB204\uB974\uC138\uC694",
3841
+ ariaRowToggleSelection: "\uD589 \uC120\uD0DD\uC744 \uC804\uD658\uD558\uB824\uBA74 SPACE\uB97C \uB204\uB974\uC138\uC694",
3842
+ ariaRowSelect: "\uC774 \uD589\uC744 \uC120\uD0DD\uD558\uB824\uBA74 SPACE\uB97C \uB204\uB974\uC138\uC694",
3843
+ ariaRowSelectionDisabled: "\uC774 \uD589\uC758 \uD589 \uC120\uD0DD\uC774 \uBE44\uD65C\uC131\uD654\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
3844
+ ariaSearch: "\uAC80\uC0C9",
3845
+ ariaSortableColumn: "\uC815\uB82C\uD558\uB824\uBA74 ENTER\uB97C \uB204\uB974\uC138\uC694",
3846
+ ariaToggleVisibility: "\uAC00\uC2DC\uC131\uC744 \uC804\uD658\uD558\uB824\uBA74 SPACE\uB97C \uB204\uB974\uC138\uC694",
3847
+ ariaToggleCellValue: "\uC140 \uAC12\uC744 \uC804\uD658\uD558\uB824\uBA74 SPACE\uB97C \uB204\uB974\uC138\uC694",
3848
+ ariaUnchecked: "\uC120\uD0DD \uD574\uC81C\uB428",
3849
+ ariaVisible: "\uBCF4\uC774\uB294",
3850
+ ariaSearchFilterValues: "\uD544\uD130 \uAC12 \uAC80\uC0C9",
3851
+ ariaPageSizeSelectorLabel: "\uD398\uC774\uC9C0 \uD06C\uAE30",
3852
+ ariaChartMenuClose: "\uCC28\uD2B8 \uD3B8\uC9D1 \uBA54\uB274 \uB2EB\uAE30",
3853
+ ariaChartSelected: "\uC120\uD0DD\uB428",
3854
+ ariaSkeletonCellLoadingFailed: "\uD589 \uB85C\uB4DC \uC2E4\uD328",
3855
+ ariaSkeletonCellLoading: "\uD589 \uB370\uC774\uD130 \uB85C\uB4DC \uC911",
3856
+ // ARIA Labels for Drop Zones
3857
+ ariaRowGroupDropZonePanelLabel: "\uD589 \uADF8\uB8F9",
3858
+ ariaValuesDropZonePanelLabel: "\uAC12",
3859
+ ariaPivotDropZonePanelLabel: "\uC5F4 \uB808\uC774\uBE14",
3860
+ ariaDropZoneColumnComponentDescription: "\uC81C\uAC70\uD558\uB824\uBA74 DELETE\uB97C \uB204\uB974\uC138\uC694",
3861
+ ariaDropZoneColumnValueItemDescription: "\uC9D1\uACC4 \uC720\uD615\uC744 \uBCC0\uACBD\uD558\uB824\uBA74 ENTER\uB97C \uB204\uB974\uC138\uC694",
3862
+ ariaDropZoneColumnGroupItemDescription: "\uC815\uB82C\uD558\uB824\uBA74 ENTER\uB97C \uB204\uB974\uC138\uC694",
3863
+ // used for aggregate drop zone, format: {aggregation}{ariaDropZoneColumnComponentAggFuncSeparator}{column name}
3864
+ ariaDropZoneColumnComponentAggFuncSeparator: " \uC758 ",
3865
+ ariaDropZoneColumnComponentSortAscending: "\uC624\uB984\uCC28\uC21C",
3866
+ ariaDropZoneColumnComponentSortDescending: "\uB0B4\uB9BC\uCC28\uC21C",
3867
+ ariaLabelDialog: "\uB300\uD654\uC0C1\uC790",
3868
+ ariaLabelColumnMenu: "\uCEEC\uB7FC \uBA54\uB274",
3869
+ ariaLabelColumnFilter: "\uCEEC\uB7FC \uD544\uD130",
3870
+ ariaLabelCellEditor: "\uC140 \uD3B8\uC9D1\uAE30",
3871
+ ariaLabelSelectField: "\uD544\uB4DC \uC120\uD0DD",
3872
+ ariaLabelLoadingContextMenu: "\uB85C\uB4DC \uC911\uC778 \uCEE8\uD14D\uC2A4\uD2B8 \uBA54\uB274",
3873
+ // aria labels for rich select
3874
+ ariaLabelRichSelectField: "\uB9AC\uCE58 \uC120\uD0DD \uD544\uB4DC",
3875
+ ariaLabelRichSelectToggleSelection: "\uC120\uD0DD\uC744 \uD1A0\uAE00\uD558\uB824\uBA74 SPACE\uB97C \uB204\uB974\uC138\uC694",
3876
+ ariaLabelRichSelectDeselectAllItems: "\uBAA8\uB4E0 \uD56D\uBAA9 \uC120\uD0DD \uD574\uC81C\uB97C \uC704\uD574 DELETE\uB97C \uB204\uB974\uC138\uC694",
3877
+ ariaLabelRichSelectDeleteSelection: "\uD56D\uBAA9 \uC120\uD0DD \uD574\uC81C\uB97C \uC704\uD574 DELETE\uB97C \uB204\uB974\uC138\uC694",
3878
+ ariaLabelTooltip: "\uD234\uD301",
3879
+ ariaLabelContextMenu: "\uCEE8\uD14D\uC2A4\uD2B8 \uBA54\uB274",
3880
+ ariaLabelSubMenu: "\uD558\uC704 \uBA54\uB274",
3881
+ ariaLabelAggregationFunction: "\uC9D1\uACC4 \uD568\uC218",
3882
+ ariaLabelAdvancedFilterAutocomplete: "\uACE0\uAE09 \uD544\uD130 \uC790\uB3D9 \uC644\uC131",
3883
+ ariaLabelAdvancedFilterBuilderAddField: "\uACE0\uAE09 \uD544\uD130 \uBE4C\uB354 \uD544\uB4DC \uCD94\uAC00",
3884
+ ariaLabelAdvancedFilterBuilderColumnSelectField: "\uACE0\uAE09 \uD544\uD130 \uBE4C\uB354 \uCE7C\uB7FC \uC120\uD0DD \uD544\uB4DC",
3885
+ ariaLabelAdvancedFilterBuilderOptionSelectField: "\uACE0\uAE09 \uD544\uD130 \uBE4C\uB354 \uC635\uC158 \uC120\uD0DD \uD544\uB4DC",
3886
+ ariaLabelAdvancedFilterBuilderJoinSelectField: "\uACE0\uAE09 \uD544\uD130 \uBE4C\uB354 \uC870\uC778 \uC5F0\uC0B0\uC790 \uC120\uD0DD \uD544\uB4DC",
3887
+ // ARIA Labels for the Side Bar
3888
+ ariaColumnPanelList: "\uC5F4 \uBAA9\uB85D",
3889
+ ariaFilterPanelList: "\uD544\uD130 \uBAA9\uB85D",
3890
+ // Number Format (Status Bar, Pagination Panel)
3891
+ thousandSeparator: ",",
3892
+ decimalSeparator: ".",
3893
+ // Data types
3894
+ true: "True",
3895
+ false: "False",
3896
+ invalidDate: "\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uB0A0\uC9DC",
3897
+ invalidNumber: "\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uC22B\uC790",
3898
+ january: "1\uC6D4",
3899
+ february: "2\uC6D4",
3900
+ march: "3\uC6D4",
3901
+ april: "4\uC6D4",
3902
+ may: "5\uC6D4",
3903
+ june: "6\uC6D4",
3904
+ july: "7\uC6D4",
3905
+ august: "8\uC6D4",
3906
+ september: "9\uC6D4",
3907
+ october: "10\uC6D4",
3908
+ november: "11\uC6D4",
3909
+ december: "12\uC6D4",
3910
+ // Time formats
3911
+ timeFormatSlashesDDMMYYYY: "DD/MM/YYYY",
3912
+ timeFormatSlashesMMDDYYYY: "MM/DD/YYYY",
3913
+ timeFormatSlashesDDMMYY: "DD/MM/YY",
3914
+ timeFormatSlashesMMDDYY: "MM/DD/YY",
3915
+ timeFormatDotsDDMYY: "DD.MM.YY",
3916
+ timeFormatDotsMDDYY: "M.DD.YY",
3917
+ timeFormatDashesYYYYMMDD: "YYYY-MM-DD",
3918
+ timeFormatSpacesDDMMMMYYYY: "DD MMMM YYYY",
3919
+ timeFormatHHMMSS: "HH:MM:SS",
3920
+ timeFormatHHMMSSAmPm: "HH:MM:SS \uC624\uC804/\uC624\uD6C4"
3921
+ };
3922
+
3923
+ // src/components/agGridTable/helpers.ts/getSortedColumnState.ts
3924
+ function getSortedColumnState(event, defaultSort) {
3925
+ const columnStateCol = event.api.getColumnState().find((s) => s.sort != null);
3926
+ if (!columnStateCol) return { value: defaultSort || "" };
3927
+ return {
3928
+ ...columnStateCol,
3929
+ value: columnStateCol?.sort === "asc" ? `-${columnStateCol.colId}` : columnStateCol?.colId
3930
+ };
3931
+ }
3932
+ agGridCommunity.ModuleRegistry.registerModules([agGridCommunity.AllCommunityModule, agGridCommunity.ClientSideRowModelModule]);
3933
+ var init = {
3934
+ containerStyle: {
3935
+ height: 300
3936
+ },
3937
+ rowHeight: 50,
3938
+ headerHeight: 40
3939
+ };
3940
+ var defaultAgGridTheme = agGridCommunity.themeQuartz.withParams({
3941
+ fontFamily: "var(--font-sans)",
3942
+ headerFontFamily: "var(--font-sans)",
3943
+ cellFontFamily: "var(--font-sans)",
3944
+ headerFontSize: "var(--text-h6)",
3945
+ headerFontWeight: "var(--text-h6--font-weight)",
3946
+ backgroundColor: "var(--color-sys-background)",
3947
+ foregroundColor: "var(--color-sys-foreground)",
3948
+ headerBackgroundColor: "var(--color-sys-table-header-background)",
3949
+ headerTextColor: "var(--color-sys-table-header-text)",
3950
+ borderColor: "var(--color-sys-table-row-border)",
3951
+ rowHoverColor: "var(--color-sys-table-hover)",
3952
+ selectedRowBackgroundColor: "var(--color-sys-table-select)",
3953
+ rowBorder: "solid 1px var(--color-sys-table-row-border)",
3954
+ columnBorder: false,
3955
+ headerColumnBorder: false,
3956
+ spacing: 8
3957
+ });
3958
+ function sanitizeAgGridClassName(className, theme) {
3959
+ if (!className || theme === "legacy") return className;
3960
+ return className.split(/\s+/).filter((token) => token && !token.startsWith("ag-theme-")).join(" ");
3961
+ }
3962
+ var AgGridTable = React12.forwardRef(function AgGridTable2({ containerStyle, noRowsOverlayComponentContainerStyle, ...tableProps }, ref) {
3963
+ const isEmpty = React12.useMemo(() => {
3964
+ return tableProps.rowData?.length === 0;
3965
+ }, [tableProps.rowData]);
3966
+ const containerHeight = React12.useMemo(() => {
3967
+ try {
3968
+ if (tableProps.noRowsOverlayComponent && isEmpty) {
3969
+ return noRowsOverlayComponentContainerStyle?.height || init.containerStyle.height;
3970
+ } else if (tableProps.domLayout === "autoHeight") {
3971
+ return "auto";
3972
+ } else {
3973
+ return containerStyle?.height || init.containerStyle.height;
3974
+ }
3975
+ } catch {
3976
+ return init.containerStyle.height;
3977
+ }
3978
+ }, [containerStyle, isEmpty, noRowsOverlayComponentContainerStyle, tableProps]);
3979
+ const contextValue = React12.useMemo(
3980
+ () => ({
3981
+ containerHeight,
3982
+ containerStyle,
3983
+ isEmpty,
3984
+ tableProps,
3985
+ ref
3986
+ }),
3987
+ [containerHeight, containerStyle, isEmpty, tableProps, ref]
3988
+ );
3989
+ if (tableProps.loading) {
3990
+ return /* @__PURE__ */ jsxRuntime.jsx(
3991
+ TableSkeleton,
3992
+ {
3993
+ columnDefs: tableProps.columnDefs,
3994
+ rowLength: tableProps.rowData?.length,
3995
+ rowHeight: tableProps.rowHeight ?? init.rowHeight,
3996
+ headerHeight: tableProps.headerHeight ?? init.headerHeight,
3997
+ selectionColumnWidth: tableProps.rowSelection ? tableProps.selectionColumnDef?.width ?? 42 : void 0
3998
+ }
3999
+ );
4000
+ }
4001
+ return /* @__PURE__ */ jsxRuntime.jsx(AgGridContextProvider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(AgGridContainer, { children: /* @__PURE__ */ jsxRuntime.jsx(AgGridContent, {}) }) });
4002
+ });
4003
+ function AgGridContent() {
4004
+ const { isEmpty, tableProps, ref } = React12.useContext(AgGridContext);
4005
+ const className = sanitizeAgGridClassName(tableProps.className, tableProps.theme);
4006
+ const theme = tableProps.theme ?? defaultAgGridTheme;
4007
+ const {
4008
+ defaultColDef: userDefaultColDef,
4009
+ columnTypes: userColumnTypes,
4010
+ onCellKeyDown,
4011
+ onRowClicked,
4012
+ ...restTableProps
4013
+ } = tableProps;
4014
+ const handleCellKeyDown = (e) => {
4015
+ onCellKeyDown?.(e);
4016
+ const keyEvent = e.event;
4017
+ if (!onRowClicked || keyEvent?.key !== "Enter") return;
4018
+ const target = keyEvent.target;
4019
+ if (!target?.matches(".ag-cell, .ag-full-width-row")) return;
4020
+ onRowClicked({ ...e, type: "rowClicked" });
4021
+ };
4022
+ const mergedDefaultColDef = {
4023
+ ...userDefaultColDef,
4024
+ cellStyle: {
4025
+ display: "flex",
4026
+ alignItems: "center",
4027
+ ...userDefaultColDef?.cellStyle
4028
+ }
4029
+ };
4030
+ const mergedColumnTypes = React12.useMemo(
4031
+ () => ({
4032
+ primary: { cellClass: "ag-cell-primary" },
4033
+ number: { headerClass: "ag-right-aligned-header", cellClass: "ag-right-aligned-cell" },
4034
+ ...userColumnTypes
4035
+ }),
4036
+ [userColumnTypes]
4037
+ );
4038
+ const columnDefs = React12.useMemo(
4039
+ () => withTypeClasses(
4040
+ withHeaderMinWidth(
4041
+ withSortIconOffset(
4042
+ withExplicitSortIcons(withNumberColumnWidth(withFlexFill(restTableProps.columnDefs)))
4043
+ )
4044
+ ),
4045
+ mergedColumnTypes
4046
+ ),
4047
+ [restTableProps.columnDefs, mergedColumnTypes]
4048
+ );
4049
+ if (tableProps.noRowsOverlayComponent && isEmpty) {
4050
+ return /* @__PURE__ */ jsxRuntime.jsx(
4051
+ agGridReact.AgGridReact,
4052
+ {
4053
+ headerHeight: init.headerHeight,
4054
+ defaultColDef: mergedDefaultColDef,
4055
+ columnTypes: mergedColumnTypes,
4056
+ ref,
4057
+ ...restTableProps,
4058
+ columnDefs,
4059
+ onRowClicked,
4060
+ onCellKeyDown: handleCellKeyDown,
4061
+ theme,
4062
+ className,
4063
+ domLayout: "normal"
4064
+ }
4065
+ );
4066
+ }
4067
+ return /* @__PURE__ */ jsxRuntime.jsx(
4068
+ agGridReact.AgGridReact,
4069
+ {
4070
+ headerHeight: init.headerHeight,
4071
+ rowHeight: init.rowHeight,
4072
+ defaultColDef: mergedDefaultColDef,
4073
+ columnTypes: mergedColumnTypes,
4074
+ ref,
4075
+ animateRows: false,
4076
+ localeText: AG_GRID_LOCALE_KR,
4077
+ ...restTableProps,
4078
+ columnDefs,
4079
+ onRowClicked,
4080
+ onCellKeyDown: handleCellKeyDown,
4081
+ theme,
4082
+ className,
4083
+ rowClass: `${onRowClicked ? "ag-row-clickable" : ""} ${tableProps.rowClass || ""}`,
4084
+ selectionColumnDef: {
4085
+ ...tableProps.selectionColumnDef,
4086
+ headerComponent: tableProps.selectionColumnDef?.headerComponent ?? HeaderCheckboxRenderer,
4087
+ cellRenderer: tableProps.selectionColumnDef?.cellRenderer ?? RowCheckboxRenderer,
4088
+ cellClass: cn(
4089
+ "[&_.ag-selection-checkbox]:!hidden",
4090
+ tableProps.selectionColumnDef?.cellClass,
4091
+ "!flex items-center"
4092
+ ),
4093
+ headerClass: cn("[&_.ag-checkbox]:!hidden", tableProps.selectionColumnDef?.headerClass)
4094
+ }
4095
+ }
4096
+ );
4097
+ }
4098
+ function AgGridContainer({ children }) {
4099
+ const { containerHeight, containerStyle, isEmpty } = React12.useContext(AgGridContext);
4100
+ return /* @__PURE__ */ jsxRuntime.jsx(
4101
+ "div",
4102
+ {
4103
+ className: cn(
4104
+ "ag-grid-container",
4105
+ "w-full h-[100px]",
4106
+ !isEmpty ? "ag-grid-container-auto-height-nonEmpty" : ""
4107
+ ),
4108
+ "data-is-empty": isEmpty ? "true" : "false",
4109
+ style: {
4110
+ width: "100%",
4111
+ "--ag-font-family": "var(--font-sans)",
4112
+ height: containerHeight,
4113
+ ...containerStyle
4114
+ },
4115
+ children
4116
+ }
4117
+ );
4118
+ }
4119
+ function HeaderCheckboxRenderer(props) {
4120
+ const [selectedCount, setSelectedCount] = React12.useState(props.api.getSelectedRows().length);
4121
+ const totalCount = props.api.getDisplayedRowCount();
4122
+ React12.useEffect(() => {
4123
+ const handler = () => setSelectedCount(props.api.getSelectedRows().length);
4124
+ props.api.addEventListener("selectionChanged", handler);
4125
+ return () => props.api.removeEventListener("selectionChanged", handler);
4126
+ }, [props.api]);
4127
+ const indeterminate = totalCount > 0 && selectedCount > 0 && selectedCount < totalCount;
4128
+ const handleChange = (newChecked) => {
4129
+ if (indeterminate) {
4130
+ props.api.selectAll("filtered");
4131
+ return;
4132
+ }
4133
+ if (newChecked) {
4134
+ props.api.selectAll();
4135
+ } else {
4136
+ props.api.deselectAll();
4137
+ }
4138
+ };
4139
+ return /* @__PURE__ */ jsxRuntime.jsx(
4140
+ Checkbox,
4141
+ {
4142
+ checked: selectedCount > 0,
4143
+ onCheckedChange: handleChange,
4144
+ indeterminate,
4145
+ "aria-label": "\uC804\uCCB4 \uD589 \uC120\uD0DD"
4146
+ }
4147
+ );
4148
+ }
4149
+ function RowCheckboxRenderer(params) {
4150
+ const [checked, setChecked] = React12.useState(!!params.node.isSelected());
4151
+ React12.useEffect(() => {
4152
+ const handler = () => setChecked(!!params.node.isSelected());
4153
+ params.api.addEventListener("selectionChanged", handler);
4154
+ return () => params.api.removeEventListener("selectionChanged", handler);
4155
+ }, [params.api, params.node]);
4156
+ return /* @__PURE__ */ jsxRuntime.jsx(
4157
+ Checkbox,
4158
+ {
4159
+ checked,
4160
+ onCheckedChange: (v) => params.node.setSelected(!!v),
4161
+ "aria-label": `${(params.node.rowIndex ?? 0) + 1}\uD589 \uC120\uD0DD`
4162
+ }
4163
+ );
4164
+ }
4165
+ function withExplicitSortIcons(defs) {
4166
+ if (!Array.isArray(defs)) return defs;
4167
+ return defs.map((d) => {
4168
+ if (d && typeof d === "object" && Array.isArray(d.children))
4169
+ return { ...d, children: withExplicitSortIcons(d.children) };
4170
+ if (d && typeof d === "object" && d.sortable === true && d.unSortIcon === void 0)
4171
+ return { ...d, unSortIcon: true };
4172
+ return d;
4173
+ });
4174
+ }
4175
+ var SORT_ICON_OFFSET_CLASS = "ag-cell-sort-offset";
4176
+ function withSortIconOffset(defs) {
4177
+ if (!Array.isArray(defs)) return defs;
4178
+ return defs.map((d) => {
4179
+ if (!d || typeof d !== "object") return d;
4180
+ if (Array.isArray(d.children)) return { ...d, children: withSortIconOffset(d.children) };
4181
+ if (!columnTypesOf(d).includes("number") || d.sortable !== true || d.unSortIcon !== true)
4182
+ return d;
4183
+ const cellClass = d.cellClass == null ? SORT_ICON_OFFSET_CLASS : mergeTypeClass(d.cellClass, [SORT_ICON_OFFSET_CLASS]);
4184
+ return cellClass === d.cellClass ? d : { ...d, cellClass };
4185
+ });
4186
+ }
4187
+ function estimateHeaderTextWidth(label) {
4188
+ let w = 0;
4189
+ for (const ch of label)
4190
+ w += /[\u1100-\u11FF\u3000-\u303F\u3130-\u318F\u4E00-\u9FFF\uAC00-\uD7AF\uFF00-\uFFEF]/.test(ch) ? 14 : 8;
4191
+ return w;
4192
+ }
4193
+ var HEADER_CELL_PADDING = 32;
4194
+ var HEADER_SORT_ICON = 24;
4195
+ var splitClasses = (v) => (Array.isArray(v) ? v : v.split(/\s+/)).filter(Boolean);
4196
+ function mergeTypeClass(own, fromTypes) {
4197
+ if (fromTypes.length === 0 || typeof own === "function") return own;
4198
+ if (own == null) return own;
4199
+ const list = splitClasses(own);
4200
+ const merged = [...list, ...fromTypes.filter((c) => !list.includes(c))];
4201
+ if (merged.length === list.length) return own;
4202
+ return Array.isArray(own) ? merged : merged.join(" ");
4203
+ }
4204
+ var isFlex = (d) => typeof d.flex === "number" && d.flex > 0;
4205
+ function withFlexFill(defs) {
4206
+ if (!Array.isArray(defs)) return defs;
4207
+ const visibleFlex = [];
4208
+ const collect = (list) => {
4209
+ for (const d of list) {
4210
+ if (!d || typeof d !== "object") continue;
4211
+ if (Array.isArray(d.children)) collect(d.children);
4212
+ else if (!d.hide && isFlex(d)) visibleFlex.push(d);
4213
+ }
4214
+ };
4215
+ collect(defs);
4216
+ if (visibleFlex.length === 0 || visibleFlex.some((d) => d.maxWidth == null)) return defs;
4217
+ const strip = (list) => list.map((d) => {
4218
+ if (!d || typeof d !== "object") return d;
4219
+ const c = d;
4220
+ if (Array.isArray(c.children)) return { ...c, children: strip(c.children) };
4221
+ if (c.hide || !isFlex(c)) return d;
4222
+ const rest = { ...c };
4223
+ delete rest.maxWidth;
4224
+ return rest;
4225
+ });
4226
+ return strip(defs);
4227
+ }
4228
+ var columnTypesOf = (d) => Array.isArray(d.type) ? d.type : typeof d.type === "string" ? [d.type] : [];
4229
+ var NUMBER_COLUMN_WIDTH = 140;
4230
+ function withNumberColumnWidth(defs) {
4231
+ if (!Array.isArray(defs)) return defs;
4232
+ return defs.map((d) => {
4233
+ if (!d || typeof d !== "object") return d;
4234
+ if (Array.isArray(d.children)) return { ...d, children: withNumberColumnWidth(d.children) };
4235
+ if (!columnTypesOf(d).includes("number")) return d;
4236
+ if (d.width != null || d.flex != null || d.minWidth != null || d.maxWidth != null) return d;
4237
+ return { ...d, width: NUMBER_COLUMN_WIDTH };
4238
+ });
4239
+ }
4240
+ function withTypeClasses(defs, columnTypes) {
4241
+ if (!Array.isArray(defs)) return defs;
4242
+ return defs.map((d) => {
4243
+ if (!d || typeof d !== "object") return d;
4244
+ if (Array.isArray(d.children))
4245
+ return { ...d, children: withTypeClasses(d.children, columnTypes) };
4246
+ const types = columnTypesOf(d);
4247
+ if (types.length === 0) return d;
4248
+ const collect = (key) => types.flatMap((t) => {
4249
+ const v = columnTypes[t]?.[key];
4250
+ return typeof v === "string" || Array.isArray(v) ? splitClasses(v) : [];
4251
+ });
4252
+ const cellClass = mergeTypeClass(d.cellClass, collect("cellClass"));
4253
+ const headerClass = mergeTypeClass(d.headerClass, collect("headerClass"));
4254
+ if (cellClass === d.cellClass && headerClass === d.headerClass) return d;
4255
+ return {
4256
+ ...d,
4257
+ ...cellClass !== d.cellClass ? { cellClass } : {},
4258
+ ...headerClass !== d.headerClass ? { headerClass } : {}
4259
+ };
4260
+ });
4261
+ }
4262
+ function withHeaderMinWidth(defs) {
4263
+ if (!Array.isArray(defs)) return defs;
4264
+ return defs.map((d) => {
4265
+ if (!d || typeof d !== "object") return d;
4266
+ if (Array.isArray(d.children)) return { ...d, children: withHeaderMinWidth(d.children) };
4267
+ if (typeof d.headerName !== "string" || d.headerName === "" || d.flex != null || d.wrapHeaderText)
4268
+ return d;
4269
+ let need = estimateHeaderTextWidth(d.headerName) + HEADER_CELL_PADDING + (d.sortable ? HEADER_SORT_ICON : 0);
4270
+ if (typeof d.maxWidth === "number") need = Math.min(need, d.maxWidth);
4271
+ const minWidth = Math.max(typeof d.minWidth === "number" ? d.minWidth : 0, need);
4272
+ const raiseWidth = typeof d.width === "number" && d.width < minWidth;
4273
+ if (minWidth === d.minWidth && !raiseWidth) return d;
4274
+ return { ...d, minWidth, ...raiseWidth ? { width: minWidth } : {} };
4275
+ });
4276
+ }
4277
+ function getByPath(data, path) {
4278
+ return path.split(".").reduce((o, k) => o == null ? void 0 : o[k], data);
4279
+ }
4280
+ function TwoLineCellRenderer(params) {
4281
+ const primary = params.valueFormatted ?? params.value;
4282
+ const secondary = params.secondaryField ? getByPath(params.data, params.secondaryField) : void 0;
4283
+ const hasSecondary = secondary !== void 0 && secondary !== null && secondary !== "";
4284
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full min-w-0 flex-col", children: [
4285
+ /* @__PURE__ */ jsxRuntime.jsx("span", { "data-slot": "cell-primary", className: "block truncate leading-[20px]", children: primary }),
4286
+ hasSecondary ? (
4287
+ // 보조 줄은 subtle(#4d5365): 12px 회색이 subtler 면 "small gray text" 로 읽힌다(13차 라벨 색과 같은 결정). 굵기는 주 열(semibold)을 따라가지 않게 regular
4288
+ /* @__PURE__ */ jsxRuntime.jsx(
4289
+ "span",
4290
+ {
4291
+ "data-slot": "cell-secondary",
4292
+ className: cn(
4293
+ "mt-[2px] block truncate text-small-regular text-sys-text-subtle",
4294
+ params.secondaryClassName
4295
+ ),
4296
+ children: String(secondary)
4297
+ }
4298
+ )
4299
+ ) : null
4300
+ ] });
4301
+ }
4302
+
4303
+ exports.AG_GRID_LOCALE_KR = AG_GRID_LOCALE_KR;
4304
+ exports.AgGridContext = AgGridContext;
4305
+ exports.AgGridTable = AgGridTable;
4306
+ exports.Alert = Alert;
4307
+ exports.AlertActions = AlertActions;
4308
+ exports.AlertDescription = AlertDescription;
4309
+ exports.AlertTitle = AlertTitle;
4310
+ exports.BADGE_OUTLINE_ACCENT = BADGE_OUTLINE_ACCENT;
4311
+ exports.Badge = Badge;
4312
+ exports.Button = Button;
4313
+ exports.Card = Card;
4314
+ exports.CardContent = CardContent;
4315
+ exports.CardDescription = CardDescription;
4316
+ exports.CardFooter = CardFooter;
4317
+ exports.CardHeader = CardHeader;
4318
+ exports.CardThumbnail = CardThumbnail;
4319
+ exports.CardTitle = CardTitle;
4320
+ exports.Checkbox = Checkbox;
4321
+ exports.Dialog = Dialog;
4322
+ exports.DialogClose = DialogClose;
4323
+ exports.DialogContent = DialogContent;
4324
+ exports.DialogDescription = DialogDescription;
4325
+ exports.DialogFooter = DialogFooter;
4326
+ exports.DialogHeader = DialogHeader;
4327
+ exports.DialogOverlay = DialogOverlay;
4328
+ exports.DialogPortal = DialogPortal;
4329
+ exports.DialogTitle = DialogTitle;
4330
+ exports.DialogTrigger = DialogTrigger;
4331
+ exports.Drawer = Drawer;
4332
+ exports.DrawerBody = DrawerBody;
4333
+ exports.DrawerClose = DrawerClose;
4334
+ exports.DrawerContent = DrawerContent;
4335
+ exports.DrawerDescription = DrawerDescription;
4336
+ exports.DrawerFooter = DrawerFooter;
4337
+ exports.DrawerHeader = DrawerHeader;
4338
+ exports.DrawerOverlay = DrawerOverlay;
4339
+ exports.DrawerPortal = DrawerPortal;
4340
+ exports.DrawerTitle = DrawerTitle;
4341
+ exports.DrawerTrigger = DrawerTrigger;
4342
+ exports.DropdownMenu = DropdownMenu;
4343
+ exports.DropdownMenuContent = DropdownMenuContent;
4344
+ exports.DropdownMenuGroup = DropdownMenuGroup;
4345
+ exports.DropdownMenuItem = DropdownMenuItem;
4346
+ exports.DropdownMenuPortal = DropdownMenuPortal;
4347
+ exports.DropdownMenuSeparator = DropdownMenuSeparator;
4348
+ exports.DropdownMenuSub = DropdownMenuSub;
4349
+ exports.DropdownMenuSubContent = DropdownMenuSubContent;
4350
+ exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
4351
+ exports.DropdownMenuTrigger = DropdownMenuTrigger;
4352
+ exports.EmptyBoxIllustration = EmptyBoxIllustration;
4353
+ exports.Form = Form;
4354
+ exports.FormControl = FormControl;
4355
+ exports.FormDescription = FormDescription;
4356
+ exports.FormField = FormField;
4357
+ exports.FormFooter = FormFooter;
4358
+ exports.FormHeader = FormHeader;
4359
+ exports.FormItem = FormItem;
4360
+ exports.FormLabel = FormLabel;
4361
+ exports.FormMessage = FormMessage;
4362
+ exports.FormSection = FormSection;
4363
+ exports.FormSectionLevelContext = FormSectionLevelContext;
4364
+ exports.FormValidMessage = FormValidMessage;
4365
+ exports.HeaderCheckboxRenderer = HeaderCheckboxRenderer;
4366
+ exports.IconButton = IconButton;
4367
+ exports.LucideIcon = LucideIcon;
4368
+ exports.NUMBER_COLUMN_CLASS = NUMBER_COLUMN_CLASS;
4369
+ exports.NUMBER_COLUMN_WIDTH = NUMBER_COLUMN_WIDTH;
4370
+ exports.PageHeader = PageHeader;
4371
+ exports.PageHeaderProvider = PageHeaderProvider;
4372
+ exports.Pagination = Pagination;
4373
+ exports.PaginationContent = PaginationContent;
4374
+ exports.PaginationFirst = PaginationFirst;
4375
+ exports.PaginationItem = PaginationItem;
4376
+ exports.PaginationLast = PaginationLast;
4377
+ exports.PaginationLink = PaginationLink;
4378
+ exports.PaginationNext = PaginationNext;
4379
+ exports.PaginationPrevious = PaginationPrevious;
4380
+ exports.PaginationWrapper = PaginationWrapper;
4381
+ exports.Panel = Panel;
4382
+ exports.RowCheckboxRenderer = RowCheckboxRenderer;
4383
+ exports.SORT_ICON_OFFSET_CLASS = SORT_ICON_OFFSET_CLASS;
4384
+ exports.Separator = Separator;
4385
+ exports.Skeleton = Skeleton;
4386
+ exports.SortIcon = SortIcon;
4387
+ exports.Spinner = Spinner;
4388
+ exports.Stack = Stack;
4389
+ exports.Table = Table;
4390
+ exports.TableBody = TableBody;
4391
+ exports.TableCell = TableCell;
4392
+ exports.TableHead = TableHead;
4393
+ exports.TableHeader = TableHeader;
4394
+ exports.TablePagination = TablePagination;
4395
+ exports.TableRow = TableRow;
4396
+ exports.TableSkeleton = TableSkeleton;
4397
+ exports.Tabs = Tabs;
4398
+ exports.TabsContent = TabsContent;
4399
+ exports.TabsList = TabsList;
4400
+ exports.TabsTrigger = TabsTrigger;
4401
+ exports.ToggleGroup = ToggleGroup;
4402
+ exports.ToggleGroupItem = ToggleGroupItem;
4403
+ exports.Tooltip = Tooltip;
4404
+ exports.TooltipContent = TooltipContent;
4405
+ exports.TooltipProvider = TooltipProvider;
4406
+ exports.TooltipTrigger = TooltipTrigger;
4407
+ exports.TwoLineCellRenderer = TwoLineCellRenderer;
4408
+ exports.alignFromClassName = alignFromClassName;
4409
+ exports.badgeVariants = badgeVariants;
4410
+ exports.buttonVariants = buttonVariants;
4411
+ exports.cn = cn;
4412
+ exports.estimateHeaderTextWidth = estimateHeaderTextWidth;
4413
+ exports.getPaginationRange = getPaginationRange;
4414
+ exports.getSortedColumnState = getSortedColumnState;
4415
+ exports.sanitizeUserText = sanitizeUserText;
4416
+ exports.useFormControlContext = useFormControlContext;
4417
+ exports.useFormField = useFormField;
4418
+ exports.usePageHeader = usePageHeader;
4419
+ exports.useRestoreFocusToOpener = useRestoreFocusToOpener;
4420
+ exports.withExplicitSortIcons = withExplicitSortIcons;
4421
+ exports.withFlexFill = withFlexFill;
4422
+ exports.withHeaderMinWidth = withHeaderMinWidth;
4423
+ exports.withNumberColumnWidth = withNumberColumnWidth;
4424
+ exports.withSortIconOffset = withSortIconOffset;
4425
+ exports.withTypeClasses = withTypeClasses;
4426
+ //# sourceMappingURL=chunk-MHAO45AL.cjs.map
4427
+ //# sourceMappingURL=chunk-MHAO45AL.cjs.map