@bichon/ds 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,1939 @@
1
+ 'use strict';
2
+
3
+ var react = require('@emotion/react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var react$1 = require('react');
6
+ var styled8 = require('@emotion/styled');
7
+ var isPropValid = require('@emotion/is-prop-valid');
8
+ var RadixAvatar = require('@radix-ui/react-avatar');
9
+ var RadixProgress = require('@radix-ui/react-progress');
10
+ var TextareaAutosize = require('react-textarea-autosize');
11
+ var ToastPrimitive = require('@radix-ui/react-toast');
12
+ var DialogPrimitive = require('@radix-ui/react-dialog');
13
+ var lucideReact = require('lucide-react');
14
+ var CheckboxPrimitive = require('@radix-ui/react-checkbox');
15
+ var RadioGroupPrimitive = require('@radix-ui/react-radio-group');
16
+ var DropdownMenu2 = require('@radix-ui/react-dropdown-menu');
17
+ var TooltipPrimitive2 = require('@radix-ui/react-tooltip');
18
+
19
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
20
+
21
+ function _interopNamespace(e) {
22
+ if (e && e.__esModule) return e;
23
+ var n = Object.create(null);
24
+ if (e) {
25
+ Object.keys(e).forEach(function (k) {
26
+ if (k !== 'default') {
27
+ var d = Object.getOwnPropertyDescriptor(e, k);
28
+ Object.defineProperty(n, k, d.get ? d : {
29
+ enumerable: true,
30
+ get: function () { return e[k]; }
31
+ });
32
+ }
33
+ });
34
+ }
35
+ n.default = e;
36
+ return Object.freeze(n);
37
+ }
38
+
39
+ var styled8__default = /*#__PURE__*/_interopDefault(styled8);
40
+ var isPropValid__default = /*#__PURE__*/_interopDefault(isPropValid);
41
+ var RadixAvatar__namespace = /*#__PURE__*/_interopNamespace(RadixAvatar);
42
+ var RadixProgress__namespace = /*#__PURE__*/_interopNamespace(RadixProgress);
43
+ var TextareaAutosize__default = /*#__PURE__*/_interopDefault(TextareaAutosize);
44
+ var ToastPrimitive__namespace = /*#__PURE__*/_interopNamespace(ToastPrimitive);
45
+ var DialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(DialogPrimitive);
46
+ var CheckboxPrimitive__namespace = /*#__PURE__*/_interopNamespace(CheckboxPrimitive);
47
+ var RadioGroupPrimitive__namespace = /*#__PURE__*/_interopNamespace(RadioGroupPrimitive);
48
+ var DropdownMenu2__namespace = /*#__PURE__*/_interopNamespace(DropdownMenu2);
49
+ var TooltipPrimitive2__namespace = /*#__PURE__*/_interopNamespace(TooltipPrimitive2);
50
+
51
+ // src/BichonThemeProvider.tsx
52
+
53
+ // src/tokens/colors.ts
54
+ var basicColor = {
55
+ blue: {
56
+ 100: "#EAF3FF",
57
+ 300: "#ABCDFF",
58
+ 500: "#2C81FC",
59
+ 700: "#0C52B8",
60
+ 900: "#002F74"
61
+ },
62
+ grey: {
63
+ 50: "#FAFAFC",
64
+ 100: "#F1F1F4",
65
+ 200: "#E3E4E8",
66
+ 300: "#B5B9C4",
67
+ 400: "#949AA8",
68
+ 500: "#6E7687",
69
+ 600: "#596070",
70
+ 700: "#4B505D",
71
+ 800: "#3F434D",
72
+ 900: "#25262C"
73
+ },
74
+ black: "#25262C",
75
+ white: "#FFFFFF",
76
+ black30: "rgba(37, 38, 44, 0.3)",
77
+ // black 30% opacity
78
+ red: {
79
+ 100: "#FFECEE",
80
+ 500: "#F04452",
81
+ 700: "#AC202B"
82
+ }
83
+ };
84
+ var colors = {
85
+ basic: basicColor,
86
+ // Semantic Colors
87
+ none: "transparent",
88
+ // Chart
89
+ chartBlack: basicColor.grey[900],
90
+ chartRed: basicColor.red[500],
91
+ chartOrange: "#F98A00",
92
+ chartYellow: "#EDB100",
93
+ chartGreen: "#31A96B",
94
+ chartBlue: basicColor.blue[500],
95
+ chartPurple: "#8B4EDD",
96
+ chartPink: "#F05C96",
97
+ // Font
98
+ textPrimary: basicColor.grey[900],
99
+ textSecondary: basicColor.grey[600],
100
+ textTertiary: basicColor.grey[500],
101
+ textDisabled: basicColor.grey[300],
102
+ textPlaceholder: basicColor.grey[300],
103
+ // Line
104
+ lineLight: basicColor.grey[100],
105
+ lineDefault: basicColor.grey[200],
106
+ lineAccent: basicColor.blue[500],
107
+ lineWarning: basicColor.red[500],
108
+ // Background
109
+ bgWhite: basicColor.white,
110
+ bgLightGrey: basicColor.grey[50],
111
+ bgMediumGrey: basicColor.grey[100],
112
+ bgDarkGrey: basicColor.grey[800],
113
+ bgBlack: basicColor.grey[900],
114
+ bgAccent: basicColor.blue[500],
115
+ bgAccentDark: basicColor.blue[700],
116
+ bgAccentSubtle: basicColor.blue[100],
117
+ bgWarning: basicColor.red[500],
118
+ bgWarningDark: basicColor.red[700],
119
+ bgWarningSubtle: basicColor.red[100],
120
+ // Status
121
+ textAccent: basicColor.blue[500],
122
+ textWarning: basicColor.red[500]
123
+ };
124
+
125
+ // src/tokens/typography.ts
126
+ var fontSize = {
127
+ xs: "12px",
128
+ sm: "13px",
129
+ base: "14px",
130
+ md: "15px",
131
+ lg: "16px",
132
+ xl: "18px",
133
+ "2xl": "20px",
134
+ "3xl": "24px",
135
+ "4xl": "32px"
136
+ };
137
+ var fontWeight = {
138
+ regular: 400,
139
+ medium: 500,
140
+ semibold: 600
141
+ };
142
+ var lineHeight = {
143
+ xs: "18px",
144
+ sm: "19.5px",
145
+ base: "21px",
146
+ md: "22.5px",
147
+ lg: "24px",
148
+ xl: "27px",
149
+ "2xl": "29px",
150
+ "3xl": "32px",
151
+ "4xl": "42px"
152
+ };
153
+ var letterSpacing = {
154
+ tight: "-0.02em",
155
+ normal: "0em"
156
+ };
157
+ var typography = {
158
+ // Headings
159
+ heading4xl: {
160
+ fontSize: fontSize["4xl"],
161
+ lineHeight: lineHeight["4xl"],
162
+ fontWeight: fontWeight.semibold,
163
+ letterSpacing: letterSpacing.tight
164
+ },
165
+ heading3xl: {
166
+ fontSize: fontSize["3xl"],
167
+ lineHeight: lineHeight["3xl"],
168
+ fontWeight: fontWeight.semibold,
169
+ letterSpacing: letterSpacing.tight
170
+ },
171
+ heading2xl: {
172
+ fontSize: fontSize["2xl"],
173
+ lineHeight: lineHeight["2xl"],
174
+ fontWeight: fontWeight.semibold,
175
+ letterSpacing: letterSpacing.tight
176
+ },
177
+ headingXl: {
178
+ fontSize: fontSize.xl,
179
+ lineHeight: lineHeight.xl,
180
+ fontWeight: fontWeight.semibold,
181
+ letterSpacing: letterSpacing.tight
182
+ },
183
+ headingLg: {
184
+ fontSize: fontSize.lg,
185
+ lineHeight: lineHeight.lg,
186
+ fontWeight: fontWeight.semibold,
187
+ letterSpacing: letterSpacing.tight
188
+ },
189
+ headingBase: {
190
+ fontSize: fontSize.base,
191
+ lineHeight: lineHeight.base,
192
+ fontWeight: fontWeight.semibold,
193
+ letterSpacing: letterSpacing.tight
194
+ },
195
+ // Body Text - Medium
196
+ bodyXlMedium: {
197
+ fontSize: fontSize.xl,
198
+ lineHeight: lineHeight.xl,
199
+ fontWeight: fontWeight.medium,
200
+ letterSpacing: letterSpacing.tight
201
+ },
202
+ bodyLgMedium: {
203
+ fontSize: fontSize.lg,
204
+ lineHeight: lineHeight.lg,
205
+ fontWeight: fontWeight.medium,
206
+ letterSpacing: letterSpacing.tight
207
+ },
208
+ bodyMdMedium: {
209
+ fontSize: fontSize.md,
210
+ lineHeight: lineHeight.md,
211
+ fontWeight: fontWeight.medium,
212
+ letterSpacing: letterSpacing.tight
213
+ },
214
+ bodyBaseMedium: {
215
+ fontSize: fontSize.base,
216
+ lineHeight: lineHeight.base,
217
+ fontWeight: fontWeight.medium,
218
+ letterSpacing: letterSpacing.tight
219
+ },
220
+ bodySmMedium: {
221
+ fontSize: fontSize.sm,
222
+ lineHeight: lineHeight.sm,
223
+ fontWeight: fontWeight.medium,
224
+ letterSpacing: letterSpacing.tight
225
+ },
226
+ bodyXsMedium: {
227
+ fontSize: fontSize.xs,
228
+ lineHeight: lineHeight.xs,
229
+ fontWeight: fontWeight.medium,
230
+ letterSpacing: letterSpacing.tight
231
+ },
232
+ // Body Text - Regular
233
+ bodyLgRegular: {
234
+ fontSize: fontSize.lg,
235
+ lineHeight: lineHeight.lg,
236
+ fontWeight: fontWeight.regular,
237
+ letterSpacing: letterSpacing.tight
238
+ },
239
+ bodyMdRegular: {
240
+ fontSize: fontSize.md,
241
+ lineHeight: lineHeight.md,
242
+ fontWeight: fontWeight.regular,
243
+ letterSpacing: letterSpacing.tight
244
+ },
245
+ bodyBaseRegular: {
246
+ fontSize: fontSize.base,
247
+ lineHeight: lineHeight.base,
248
+ fontWeight: fontWeight.regular,
249
+ letterSpacing: letterSpacing.tight
250
+ },
251
+ bodySmRegular: {
252
+ fontSize: fontSize.sm,
253
+ lineHeight: lineHeight.sm,
254
+ fontWeight: fontWeight.regular,
255
+ letterSpacing: letterSpacing.tight
256
+ },
257
+ bodyXsRegular: {
258
+ fontSize: fontSize.xs,
259
+ lineHeight: lineHeight.xs,
260
+ fontWeight: fontWeight.regular,
261
+ letterSpacing: letterSpacing.tight
262
+ }
263
+ };
264
+
265
+ // src/tokens/spacing.ts
266
+ var spacing = {
267
+ 0: "0px",
268
+ 1: "4px",
269
+ 2: "8px",
270
+ 3: "12px",
271
+ 4: "16px",
272
+ 5: "20px",
273
+ 6: "24px",
274
+ 8: "32px",
275
+ 10: "40px",
276
+ 12: "48px",
277
+ 16: "64px",
278
+ 20: "80px",
279
+ 24: "96px"
280
+ };
281
+ var semanticSpacing = {
282
+ xs: spacing[1],
283
+ sm: spacing[2],
284
+ md: spacing[3],
285
+ lg: spacing[4],
286
+ xl: spacing[5],
287
+ "2xl": spacing[6],
288
+ "3xl": spacing[8]
289
+ };
290
+ var componentSize = {
291
+ cardWidth: "286px",
292
+ cardContainerWidth: "334px",
293
+ modalWidth: "400px",
294
+ inputHeight: {
295
+ small: "32px",
296
+ medium: "40px",
297
+ large: "48px"
298
+ }
299
+ };
300
+
301
+ // src/tokens/radius.ts
302
+ var radius = {
303
+ none: "0px",
304
+ xs: "2px",
305
+ sm: "4px",
306
+ md: "6px",
307
+ lg: "8px",
308
+ xl: "10px",
309
+ "2xl": "12px",
310
+ "3xl": "20px",
311
+ full: "9999px"
312
+ };
313
+
314
+ // src/tokens/shadows.ts
315
+ var shadows = {
316
+ none: "none",
317
+ sm: "0px 1px 2px 0px rgba(0, 27, 55, 0.08)",
318
+ base: "0px 2px 4px 0px rgba(0, 27, 55, 0.10)",
319
+ md: "0px 4px 8px 0px rgba(0, 27, 55, 0.12)",
320
+ lg: "0px 8px 16px 0px rgba(0, 27, 55, 0.15)",
321
+ xl: "0px 12px 24px 0px rgba(0, 27, 55, 0.18)",
322
+ modal: "0px 4px 12px 0px rgba(0, 27, 55, 0.15)"
323
+ };
324
+
325
+ // src/assets/fonts/woff2/Pretendard-Thin.woff2
326
+ var Pretendard_Thin_default = "./Pretendard-Thin-7QVSFVOF.woff2";
327
+
328
+ // src/assets/fonts/woff2/Pretendard-ExtraLight.woff2
329
+ var Pretendard_ExtraLight_default = "./Pretendard-ExtraLight-W2EFW6U4.woff2";
330
+
331
+ // src/assets/fonts/woff2/Pretendard-Light.woff2
332
+ var Pretendard_Light_default = "./Pretendard-Light-44S62PI7.woff2";
333
+
334
+ // src/assets/fonts/woff2/Pretendard-Regular.woff2
335
+ var Pretendard_Regular_default = "./Pretendard-Regular-CGOPAG2E.woff2";
336
+
337
+ // src/assets/fonts/woff2/Pretendard-Medium.woff2
338
+ var Pretendard_Medium_default = "./Pretendard-Medium-CLYKZXFO.woff2";
339
+
340
+ // src/assets/fonts/woff2/Pretendard-SemiBold.woff2
341
+ var Pretendard_SemiBold_default = "./Pretendard-SemiBold-Z6RJ4TYK.woff2";
342
+
343
+ // src/assets/fonts/woff2/Pretendard-Bold.woff2
344
+ var Pretendard_Bold_default = "./Pretendard-Bold-4AHBL5CN.woff2";
345
+
346
+ // src/assets/fonts/woff2/Pretendard-ExtraBold.woff2
347
+ var Pretendard_ExtraBold_default = "./Pretendard-ExtraBold-3U7HNRI4.woff2";
348
+
349
+ // src/assets/fonts/woff2/Pretendard-Black.woff2
350
+ var Pretendard_Black_default = "./Pretendard-Black-JLVK6ESK.woff2";
351
+
352
+ // src/styles/globalStyles.ts
353
+ var globalStyles = react.css`
354
+ @font-face {
355
+ font-family: 'Pretendard';
356
+ src: url(${Pretendard_Thin_default}) format('woff2');
357
+ font-weight: 100;
358
+ font-display: swap;
359
+ }
360
+
361
+ @font-face {
362
+ font-family: 'Pretendard';
363
+ src: url(${Pretendard_ExtraLight_default}) format('woff2');
364
+ font-weight: 200;
365
+ font-display: swap;
366
+ }
367
+
368
+ @font-face {
369
+ font-family: 'Pretendard';
370
+ src: url(${Pretendard_Light_default}) format('woff2');
371
+ font-weight: 300;
372
+ font-display: swap;
373
+ }
374
+
375
+ @font-face {
376
+ font-family: 'Pretendard';
377
+ src: url(${Pretendard_Regular_default}) format('woff2');
378
+ font-weight: 400;
379
+ font-display: swap;
380
+ }
381
+
382
+ @font-face {
383
+ font-family: 'Pretendard';
384
+ src: url(${Pretendard_Medium_default}) format('woff2');
385
+ font-weight: 500;
386
+ font-display: swap;
387
+ }
388
+
389
+ @font-face {
390
+ font-family: 'Pretendard';
391
+ src: url(${Pretendard_SemiBold_default}) format('woff2');
392
+ font-weight: 600;
393
+ font-display: swap;
394
+ }
395
+
396
+ @font-face {
397
+ font-family: 'Pretendard';
398
+ src: url(${Pretendard_Bold_default}) format('woff2');
399
+ font-weight: 700;
400
+ font-display: swap;
401
+ }
402
+
403
+ @font-face {
404
+ font-family: 'Pretendard';
405
+ src: url(${Pretendard_ExtraBold_default}) format('woff2');
406
+ font-weight: 800;
407
+ font-display: swap;
408
+ }
409
+
410
+ @font-face {
411
+ font-family: 'Pretendard';
412
+ src: url(${Pretendard_Black_default}) format('woff2');
413
+ font-weight: 900;
414
+ font-display: swap;
415
+ }
416
+
417
+ :root {
418
+ font-synthesis: none;
419
+ text-rendering: optimizeLegibility;
420
+ -webkit-font-smoothing: antialiased;
421
+ -moz-osx-font-smoothing: grayscale;
422
+ }
423
+
424
+ * {
425
+ font-family:
426
+ 'Pretendard',
427
+ -apple-system,
428
+ BlinkMacSystemFont,
429
+ system-ui,
430
+ Roboto,
431
+ 'Helvetica Neue',
432
+ 'Segoe UI',
433
+ 'Apple SD Gothic Neo',
434
+ 'Noto Sans KR',
435
+ 'Malgun Gothic',
436
+ 'Apple Color Emoji',
437
+ 'Segoe UI Emoji',
438
+ 'Segoe UI Symbol',
439
+ sans-serif;
440
+ box-sizing: border-box;
441
+ margin: 0;
442
+ padding: 0;
443
+ }
444
+
445
+ html,
446
+ body {
447
+ -webkit-font-smoothing: antialiased;
448
+ -moz-osx-font-smoothing: grayscale;
449
+ }
450
+
451
+ button {
452
+ font-family: inherit;
453
+ border: 0;
454
+ outline: none;
455
+ }
456
+
457
+ input,
458
+ textarea {
459
+ outline: none;
460
+ }
461
+
462
+ textarea {
463
+ resize: none;
464
+ }
465
+
466
+ h1,
467
+ h2,
468
+ h3,
469
+ h4,
470
+ h5,
471
+ h6,
472
+ p {
473
+ margin: 0;
474
+ }
475
+
476
+ a {
477
+ text-decoration: none;
478
+ color: inherit;
479
+ }
480
+ `;
481
+ var theme = {
482
+ colors,
483
+ typography,
484
+ spacing,
485
+ radius,
486
+ shadows
487
+ };
488
+ function BichonThemeProvider({ children }) {
489
+ return /* @__PURE__ */ jsxRuntime.jsxs(react.ThemeProvider, { theme, children: [
490
+ /* @__PURE__ */ jsxRuntime.jsx(react.Global, { styles: globalStyles }),
491
+ children
492
+ ] });
493
+ }
494
+ var sizeStyles = {
495
+ large: {
496
+ width: "40px",
497
+ height: "40px"
498
+ },
499
+ medium: {
500
+ width: "32px",
501
+ height: "32px"
502
+ },
503
+ small: {
504
+ width: "24px",
505
+ height: "24px"
506
+ }
507
+ };
508
+ var propFilter = (prop) => !["$size"].includes(prop) && isPropValid__default.default(prop);
509
+ var StyledAvatarRoot = styled8__default.default(RadixAvatar__namespace.Root, {
510
+ shouldForwardProp: propFilter
511
+ })`
512
+ display: inline-flex;
513
+ align-items: center;
514
+ justify-content: center;
515
+ vertical-align: middle;
516
+ overflow: hidden;
517
+ user-select: none;
518
+ width: ${({ $size }) => sizeStyles[$size].width};
519
+ height: ${({ $size }) => sizeStyles[$size].height};
520
+ border-radius: 50%;
521
+ border: 1px solid ${({ theme: theme2 }) => theme2.colors.lineDefault};
522
+ background-color: ${({ theme: theme2 }) => theme2.colors.bgWhite};
523
+ `;
524
+ var StyledAvatarImage = styled8__default.default(RadixAvatar__namespace.Image)`
525
+ width: 100%;
526
+ height: 100%;
527
+ object-fit: cover;
528
+ border-radius: inherit;
529
+ `;
530
+ var StyledAvatarFallback = styled8__default.default(RadixAvatar__namespace.Fallback)`
531
+ width: 100%;
532
+ height: 100%;
533
+ display: flex;
534
+ align-items: center;
535
+ justify-content: center;
536
+ background-color: ${({ theme: theme2 }) => theme2.colors.bgLightGrey};
537
+ color: ${({ theme: theme2 }) => theme2.colors.textTertiary};
538
+ font-size: 14px;
539
+ font-weight: 500;
540
+ line-height: 1;
541
+ text-transform: uppercase;
542
+ `;
543
+ var AvatarFallbackIcon = ({ size = 32 }) => {
544
+ return /* @__PURE__ */ jsxRuntime.jsxs(
545
+ "svg",
546
+ {
547
+ width: size,
548
+ height: size,
549
+ viewBox: "0 0 32 32",
550
+ fill: "none",
551
+ xmlns: "http://www.w3.org/2000/svg",
552
+ children: [
553
+ /* @__PURE__ */ jsxRuntime.jsxs(
554
+ "mask",
555
+ {
556
+ id: "mask0_156_7568",
557
+ style: { maskType: "alpha" },
558
+ maskUnits: "userSpaceOnUse",
559
+ x: "5",
560
+ y: "8",
561
+ width: "22",
562
+ height: "35",
563
+ children: [
564
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "16", cy: "14", r: "6", fill: "#6E7687" }),
565
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "16", cy: "32", r: "11", fill: "#6E7687" })
566
+ ]
567
+ }
568
+ ),
569
+ /* @__PURE__ */ jsxRuntime.jsx("g", { mask: "url(#mask0_156_7568)", children: /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "16", cy: "16", r: "16", fill: "#B5B9C4" }) })
570
+ ]
571
+ }
572
+ );
573
+ };
574
+ var Avatar = react$1.forwardRef(
575
+ ({ size = "medium", src, alt, fallback, ...props }, ref) => {
576
+ const sizeMap = {
577
+ large: 40,
578
+ medium: 32,
579
+ small: 24
580
+ };
581
+ const iconSize = sizeMap[size];
582
+ return /* @__PURE__ */ jsxRuntime.jsxs(StyledAvatarRoot, { ref, $size: size, ...props, children: [
583
+ src && /* @__PURE__ */ jsxRuntime.jsx(StyledAvatarImage, { src, alt }),
584
+ /* @__PURE__ */ jsxRuntime.jsx(StyledAvatarFallback, { children: fallback || /* @__PURE__ */ jsxRuntime.jsx(AvatarFallbackIcon, { size: iconSize }) })
585
+ ] });
586
+ }
587
+ );
588
+ Avatar.displayName = "Avatar";
589
+ var sizeStyles2 = {
590
+ large: {
591
+ padding: "3.5px 12px",
592
+ typography: "bodyBaseMedium"
593
+ // md14 (14px)
594
+ },
595
+ medium: {
596
+ padding: "2px 10px",
597
+ typography: "bodySmMedium"
598
+ // md13 (13px)
599
+ },
600
+ small: {
601
+ padding: "1px 8px",
602
+ typography: "bodyXsMedium"
603
+ // md12 (12px)
604
+ }
605
+ };
606
+ var propFilter2 = (prop) => !["$variant", "$size"].includes(prop) && isPropValid__default.default(prop);
607
+ var StyledBadge = styled8__default.default("span", {
608
+ shouldForwardProp: propFilter2
609
+ })`
610
+ display: inline-flex;
611
+ justify-content: center;
612
+ align-items: center;
613
+ width: fit-content;
614
+ height: fit-content;
615
+ border-radius: 999px;
616
+ white-space: nowrap;
617
+
618
+ ${({ $size, theme: theme2 }) => {
619
+ const spec = sizeStyles2[$size];
620
+ const typo = theme2.typography[spec.typography];
621
+ return `
622
+ font-size: ${typo.fontSize};
623
+ line-height: ${typo.lineHeight};
624
+ font-weight: ${typo.fontWeight};
625
+ letter-spacing: ${typo.letterSpacing};
626
+ padding: ${spec.padding};
627
+ `;
628
+ }}
629
+
630
+ ${({ $variant, theme: theme2 }) => {
631
+ if ($variant === "active") {
632
+ return `
633
+ background-color: ${theme2.colors.bgAccentSubtle};
634
+ color: ${theme2.colors.bgAccent};
635
+ `;
636
+ }
637
+ if ($variant === "neutral") {
638
+ return `
639
+ background-color: ${theme2.colors.bgMediumGrey};
640
+ color: ${theme2.colors.textSecondary};
641
+ `;
642
+ }
643
+ if ($variant === "warning") {
644
+ return `
645
+ background-color: ${theme2.colors.bgWarningSubtle};
646
+ color: ${theme2.colors.textWarning};
647
+ `;
648
+ }
649
+ return "";
650
+ }}
651
+ `;
652
+ var Badge = react$1.forwardRef(
653
+ ({
654
+ variant = "neutral",
655
+ size = "medium",
656
+ children,
657
+ ...props
658
+ }, ref) => {
659
+ return /* @__PURE__ */ jsxRuntime.jsx(
660
+ StyledBadge,
661
+ {
662
+ ref,
663
+ $variant: variant,
664
+ $size: size,
665
+ ...props,
666
+ children
667
+ }
668
+ );
669
+ }
670
+ );
671
+ Badge.displayName = "Badge";
672
+ var sizeStyles3 = {
673
+ large: {
674
+ height: "8px"
675
+ },
676
+ medium: {
677
+ height: "5px"
678
+ },
679
+ small: {
680
+ height: "2px"
681
+ }
682
+ };
683
+ var propFilter3 = (prop) => !["$size", "$width"].includes(prop) && isPropValid__default.default(prop);
684
+ var StyledProgressRoot = styled8__default.default(RadixProgress__namespace.Root, {
685
+ shouldForwardProp: propFilter3
686
+ })`
687
+ position: relative;
688
+ overflow: hidden;
689
+ background-color: ${({ theme: theme2 }) => theme2.colors.bgMediumGrey};
690
+ border-radius: 999px;
691
+ width: ${({ $width }) => $width ? typeof $width === "number" ? `${$width}px` : $width : "100%"};
692
+ height: ${({ $size }) => sizeStyles3[$size].height};
693
+
694
+ /* Indeterminate animation support */
695
+ &[data-state='indeterminate'] {
696
+ animation: progress-indeterminate 1.5s ease-in-out infinite;
697
+ }
698
+
699
+ @keyframes progress-indeterminate {
700
+ 0% {
701
+ transform: translateX(-100%);
702
+ }
703
+ 100% {
704
+ transform: translateX(100%);
705
+ }
706
+ }
707
+ `;
708
+ var StyledProgressIndicator = styled8__default.default(RadixProgress__namespace.Indicator)`
709
+ background-color: ${({ theme: theme2 }) => theme2.colors.bgAccent};
710
+ width: 100%;
711
+ height: 100%;
712
+ transition: transform 0.3s cubic-bezier(0.65, 0, 0.35, 1);
713
+ `;
714
+ var Progress = react$1.forwardRef(
715
+ ({ size = "medium", value, width = "100%", duration, ...props }, ref) => {
716
+ return /* @__PURE__ */ jsxRuntime.jsx(
717
+ StyledProgressRoot,
718
+ {
719
+ ref,
720
+ value,
721
+ $size: size,
722
+ $width: width,
723
+ style: {
724
+ ...duration && { "--progress-duration": duration }
725
+ },
726
+ ...props,
727
+ children: /* @__PURE__ */ jsxRuntime.jsx(
728
+ StyledProgressIndicator,
729
+ {
730
+ style: {
731
+ transform: `translateX(-${100 - (value ?? 0)}%)`
732
+ }
733
+ }
734
+ )
735
+ }
736
+ );
737
+ }
738
+ );
739
+ Progress.displayName = "Progress";
740
+ var sizeStyles4 = {
741
+ filled: {
742
+ large: {
743
+ borderRadius: "xl",
744
+ typography: "bodyLgMedium",
745
+ padding: "12px 16px"
746
+ },
747
+ medium: {
748
+ borderRadius: "lg",
749
+ typography: "bodyMdMedium",
750
+ padding: "8.5px 16px"
751
+ },
752
+ small: {
753
+ borderRadius: "lg",
754
+ typography: "bodyBaseMedium",
755
+ padding: "5.5px 12px"
756
+ }
757
+ },
758
+ warning: {
759
+ large: {
760
+ borderRadius: "xl",
761
+ typography: "bodyLgMedium",
762
+ padding: "12px 16px"
763
+ },
764
+ medium: {
765
+ borderRadius: "lg",
766
+ typography: "bodyMdMedium",
767
+ padding: "8.5px 16px"
768
+ },
769
+ small: {
770
+ borderRadius: "lg",
771
+ typography: "bodyBaseMedium",
772
+ padding: "5.5px 12px"
773
+ }
774
+ },
775
+ outlined: {
776
+ large: {
777
+ borderRadius: "xl",
778
+ typography: "bodyLgMedium",
779
+ padding: "12px 16px"
780
+ },
781
+ medium: {
782
+ borderRadius: "lg",
783
+ typography: "bodyMdMedium",
784
+ padding: "8.5px 16px"
785
+ },
786
+ small: {
787
+ borderRadius: "lg",
788
+ typography: "bodyBaseMedium",
789
+ padding: "5.5px 12px"
790
+ }
791
+ },
792
+ text: {
793
+ large: {
794
+ borderRadius: "xl",
795
+ typography: "bodyLgMedium",
796
+ padding: "12px 8px"
797
+ },
798
+ medium: {
799
+ borderRadius: "lg",
800
+ typography: "bodyMdMedium",
801
+ padding: "8.5px 8px"
802
+ },
803
+ small: {
804
+ borderRadius: "lg",
805
+ typography: "bodyBaseMedium",
806
+ padding: "8px 6px"
807
+ }
808
+ }
809
+ };
810
+ var propFilter4 = (prop) => !["$variant", "$size", "$width"].includes(prop) && isPropValid__default.default(prop);
811
+ var StyledButton = styled8__default.default("button", {
812
+ shouldForwardProp: propFilter4
813
+ })`
814
+ display: inline-flex;
815
+ justify-content: center;
816
+ align-items: center;
817
+ gap: ${({ theme: theme2 }) => theme2.spacing[2]};
818
+ width: ${({ $width }) => $width ? typeof $width === "number" ? `${$width}px` : $width : "fit-content"};
819
+ height: fit-content;
820
+
821
+ border: none;
822
+ outline: none;
823
+ text-align: center;
824
+ cursor: pointer;
825
+ white-space: nowrap;
826
+
827
+ transition: background-color 0.2s ease, color 0.2s ease,
828
+ border-color 0.2s ease, opacity 0.2s ease;
829
+
830
+ ${({ $variant, $size, theme: theme2 }) => {
831
+ const spec = sizeStyles4[$variant][$size];
832
+ const borderRadius = "borderRadius" in spec ? theme2.radius[spec.borderRadius] : "";
833
+ const typo = theme2.typography[spec.typography];
834
+ return `
835
+ font-size: ${typo.fontSize};
836
+ line-height: ${typo.lineHeight};
837
+ font-weight: ${typo.fontWeight};
838
+ letter-spacing: ${typo.letterSpacing};
839
+ padding: ${spec.padding};
840
+ ${borderRadius ? `border-radius: ${borderRadius};` : ""}
841
+ `;
842
+ }}
843
+
844
+ ${({ $variant, theme: theme2 }) => {
845
+ if ($variant === "filled") {
846
+ return `
847
+ background-color: ${theme2.colors.bgAccent};
848
+ color: ${theme2.colors.bgWhite};
849
+
850
+ /* Pressed & Hovered \uB3D9\uC77C \uCC98\uB9AC */
851
+ &:hover:not(:disabled),
852
+ &:active:not(:disabled) {
853
+ background-color: ${theme2.colors.bgAccentDark};
854
+ color: ${theme2.colors.bgWhite};
855
+ }
856
+ `;
857
+ }
858
+ if ($variant === "warning") {
859
+ return `
860
+ background-color: ${theme2.colors.bgWarning};
861
+ color: ${theme2.colors.bgWhite};
862
+
863
+ &:hover:not(:disabled),
864
+ &:active:not(:disabled) {
865
+ background-color: ${theme2.colors.bgWarningDark};
866
+ color: ${theme2.colors.bgWhite};
867
+ }
868
+ `;
869
+ }
870
+ if ($variant === "outlined") {
871
+ return `
872
+ background-color: ${theme2.colors.bgWhite};
873
+ border: 1px solid ${theme2.colors.lineDefault};
874
+ color: ${theme2.colors.textPrimary};
875
+
876
+ /* Pressed & Hovered: bg-medium-gray */
877
+ &:hover:not(:disabled),
878
+ &:active:not(:disabled) {
879
+ background-color: ${theme2.colors.bgMediumGrey};
880
+ border: 1px solid ${theme2.colors.lineDefault};
881
+ color: ${theme2.colors.textPrimary};
882
+ }
883
+ `;
884
+ }
885
+ return `
886
+ background-color: transparent;
887
+ color: ${theme2.colors.textPrimary};
888
+
889
+ &:hover:not(:disabled),
890
+ &:active:not(:disabled) {
891
+ background-color: ${theme2.colors.bgMediumGrey};
892
+ color: ${theme2.colors.textPrimary};
893
+ }
894
+ `;
895
+ }}
896
+
897
+ /* Disabled 공통 처리 (opacity 50%) */
898
+ &:disabled {
899
+ opacity: 0.5;
900
+ cursor: not-allowed;
901
+ }
902
+ `;
903
+ var Button = react$1.forwardRef(
904
+ ({
905
+ variant = "filled",
906
+ size = "medium",
907
+ width,
908
+ children,
909
+ type = "button",
910
+ ...props
911
+ }, ref) => {
912
+ return /* @__PURE__ */ jsxRuntime.jsx(
913
+ StyledButton,
914
+ {
915
+ ref,
916
+ $variant: variant,
917
+ $size: size,
918
+ $width: width,
919
+ type,
920
+ ...props,
921
+ children
922
+ }
923
+ );
924
+ }
925
+ );
926
+ Button.displayName = "Button";
927
+ var StyledFlex = styled8__default.default.div`
928
+ display: flex;
929
+ flex-direction: ${({ direction }) => direction || "row"};
930
+ justify-content: ${({ justify }) => justify || "flex-start"};
931
+ align-items: ${({ alignItems }) => alignItems || "stretch"};
932
+ gap: ${({ gap }) => typeof gap === "number" ? `${gap}px` : gap || "0"};
933
+ width: ${({ width }) => typeof width === "number" ? `${width}px` : width || "auto"};
934
+ height: ${({ height }) => typeof height === "number" ? `${height}px` : height || "auto"};
935
+ padding: ${({ padding }) => padding || "0"};
936
+ `;
937
+ var Flex = react$1.forwardRef(
938
+ ({ children, ...props }, ref) => {
939
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledFlex, { ref, ...props, children });
940
+ }
941
+ );
942
+ Flex.displayName = "Flex";
943
+ var StyledTextFieldInput = styled8__default.default.input`
944
+ width: 100%;
945
+ padding: 12.5px 16px;
946
+ border: 1px solid
947
+ ${({ theme: theme2, $variant }) => {
948
+ if ($variant === "focus") return theme2.colors.lineAccent;
949
+ if ($variant === "warning") return theme2.colors.lineWarning;
950
+ return theme2.colors.lineDefault;
951
+ }};
952
+ border-radius: ${({ theme: theme2 }) => theme2.radius.xl};
953
+ background: ${({ theme: theme2 }) => theme2.colors.bgWhite};
954
+ color: ${({ theme: theme2 }) => theme2.colors.textPrimary};
955
+ font-size: ${({ theme: theme2 }) => theme2.typography.bodyLgRegular.fontSize};
956
+ line-height: ${({ theme: theme2 }) => theme2.typography.bodyLgRegular.lineHeight};
957
+ font-weight: ${({ theme: theme2 }) => theme2.typography.bodyLgRegular.fontWeight};
958
+ letter-spacing: ${({ theme: theme2 }) => theme2.typography.bodyLgRegular.letterSpacing};
959
+ opacity: ${({ $variant }) => $variant === "disabled" ? 0.5 : 1};
960
+
961
+ &::placeholder {
962
+ color: ${({ theme: theme2 }) => theme2.colors.textDisabled};
963
+ }
964
+
965
+ &:focus {
966
+ outline: none;
967
+ border-color: ${({ theme: theme2, $variant }) => {
968
+ if ($variant === "warning") return theme2.colors.lineWarning;
969
+ return theme2.colors.lineAccent;
970
+ }};
971
+ }
972
+
973
+ &:disabled {
974
+ cursor: not-allowed;
975
+ opacity: 0.5;
976
+ }
977
+ `;
978
+ var StyledTextFieldTextarea = styled8__default.default(TextareaAutosize__default.default, {
979
+ shouldForwardProp: (prop) => isPropValid__default.default(prop) || prop === "minRows" || prop === "maxRows"
980
+ })`
981
+ width: 100%;
982
+ padding: 12.5px 16px;
983
+ border: 1px solid
984
+ ${({ theme: theme2, $variant }) => {
985
+ if ($variant === "focus") return theme2.colors.lineAccent;
986
+ if ($variant === "warning") return theme2.colors.lineWarning;
987
+ return theme2.colors.lineDefault;
988
+ }};
989
+ border-radius: ${({ theme: theme2 }) => theme2.radius.xl};
990
+ background: ${({ theme: theme2 }) => theme2.colors.bgWhite};
991
+ color: ${({ theme: theme2 }) => theme2.colors.textPrimary};
992
+ font-size: ${({ theme: theme2 }) => theme2.typography.bodyLgRegular.fontSize};
993
+ line-height: ${({ theme: theme2 }) => theme2.typography.bodyLgRegular.lineHeight};
994
+ font-weight: ${({ theme: theme2 }) => theme2.typography.bodyLgRegular.fontWeight};
995
+ letter-spacing: ${({ theme: theme2 }) => theme2.typography.bodyLgRegular.letterSpacing};
996
+ opacity: ${({ $variant }) => $variant === "disabled" ? 0.5 : 1};
997
+ resize: none;
998
+ font-family: inherit;
999
+
1000
+ &::placeholder {
1001
+ color: ${({ theme: theme2 }) => theme2.colors.textDisabled};
1002
+ }
1003
+
1004
+ &:focus {
1005
+ outline: none;
1006
+ border-color: ${({ theme: theme2, $variant }) => {
1007
+ if ($variant === "warning") return theme2.colors.lineWarning;
1008
+ return theme2.colors.lineAccent;
1009
+ }};
1010
+ }
1011
+
1012
+ &:disabled {
1013
+ cursor: not-allowed;
1014
+ opacity: 0.5;
1015
+ }
1016
+ `;
1017
+ var StyledHelperText = styled8__default.default.div`
1018
+ font-size: ${({ theme: theme2 }) => theme2.typography.bodyXsRegular.fontSize};
1019
+ line-height: ${({ theme: theme2 }) => theme2.typography.bodyXsRegular.lineHeight};
1020
+ margin-top: 6px;
1021
+ color: ${({ theme: theme2, $variant }) => {
1022
+ if ($variant === "warning") return theme2.colors.textWarning;
1023
+ return theme2.colors.textTertiary;
1024
+ }};
1025
+ opacity: ${({ $variant }) => $variant === "disabled" ? 0.5 : 1};
1026
+ `;
1027
+ var TextField = react$1.forwardRef(
1028
+ ({
1029
+ multiline = false,
1030
+ variant = "default",
1031
+ width = "375px",
1032
+ minRows = 2,
1033
+ maxRows,
1034
+ helperText,
1035
+ showHelperText,
1036
+ disabled,
1037
+ ...props
1038
+ }, ref) => {
1039
+ const effectiveVariant = react$1.useMemo(() => {
1040
+ if (disabled) return "disabled";
1041
+ return variant;
1042
+ }, [disabled, variant]);
1043
+ const shouldShowHelperText = react$1.useMemo(() => {
1044
+ if (showHelperText === false) return false;
1045
+ return Boolean(helperText);
1046
+ }, [showHelperText, helperText]);
1047
+ const inputProps = react$1.useMemo(() => {
1048
+ const baseProps = {
1049
+ ...props,
1050
+ $variant: effectiveVariant,
1051
+ $width: "100%",
1052
+ $multiline: multiline,
1053
+ disabled: effectiveVariant === "disabled" || disabled
1054
+ };
1055
+ if (multiline) {
1056
+ return {
1057
+ ...baseProps,
1058
+ minRows,
1059
+ maxRows
1060
+ };
1061
+ }
1062
+ return baseProps;
1063
+ }, [props, effectiveVariant, multiline, minRows, maxRows, disabled]);
1064
+ return /* @__PURE__ */ jsxRuntime.jsxs(Flex, { direction: "column", width, children: [
1065
+ multiline ? /* @__PURE__ */ jsxRuntime.jsx(
1066
+ StyledTextFieldTextarea,
1067
+ {
1068
+ ref,
1069
+ ...inputProps
1070
+ }
1071
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
1072
+ StyledTextFieldInput,
1073
+ {
1074
+ ref,
1075
+ ...inputProps
1076
+ }
1077
+ ),
1078
+ shouldShowHelperText && /* @__PURE__ */ jsxRuntime.jsx(StyledHelperText, { $variant: effectiveVariant, children: helperText })
1079
+ ] });
1080
+ }
1081
+ );
1082
+ TextField.displayName = "TextField";
1083
+ var StyledToastViewport = styled8__default.default(ToastPrimitive__namespace.Viewport)`
1084
+ position: fixed;
1085
+ ${({ $position, $viewportOffset }) => $position === "top" ? `top: ${$viewportOffset}px;` : `bottom: ${$viewportOffset}px;`}
1086
+ left: 50%;
1087
+ transform: translateX(-50%);
1088
+ display: flex;
1089
+ flex-direction: column;
1090
+ gap: ${({ theme: theme2 }) => theme2.spacing[2]};
1091
+ width: max-content;
1092
+ max-width: 90vw;
1093
+ z-index: 9999;
1094
+ `;
1095
+ var StyledToastRoot = styled8__default.default(ToastPrimitive__namespace.Root)`
1096
+ background-color: ${({ theme: theme2 }) => theme2.colors.bgDarkGrey};
1097
+ color: ${({ theme: theme2 }) => theme2.colors.bgWhite};
1098
+ border-radius: ${({ theme: theme2 }) => theme2.radius.lg};
1099
+ padding: ${({ theme: theme2 }) => `${theme2.spacing[3]} ${theme2.spacing[4]}`};
1100
+ box-shadow: ${({ theme: theme2 }) => theme2.shadows.lg};
1101
+
1102
+ &[data-state='open'] {
1103
+ animation: slideIn 200ms ease-out;
1104
+ }
1105
+
1106
+ &[data-state='closed'] {
1107
+ animation: slideOut 200ms ease-in;
1108
+ }
1109
+
1110
+ @keyframes slideIn {
1111
+ from {
1112
+ transform: translateY(${({ $position }) => $position === "top" ? "-100%" : "100%"});
1113
+ opacity: 0;
1114
+ }
1115
+ to {
1116
+ transform: translateY(0);
1117
+ opacity: 1;
1118
+ }
1119
+ }
1120
+
1121
+ @keyframes slideOut {
1122
+ from {
1123
+ transform: translateY(0);
1124
+ opacity: 1;
1125
+ }
1126
+ to {
1127
+ transform: translateY(${({ $position }) => $position === "top" ? "-100%" : "100%"});
1128
+ opacity: 0;
1129
+ }
1130
+ }
1131
+ `;
1132
+ var StyledToastDescription = styled8__default.default(ToastPrimitive__namespace.Description)`
1133
+ font-size: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.fontSize};
1134
+ line-height: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.lineHeight};
1135
+ font-weight: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.fontWeight};
1136
+ `;
1137
+ var ToastContext = react$1.createContext(null);
1138
+ function ToastProvider({
1139
+ children,
1140
+ position: defaultPosition = "bottom",
1141
+ viewportOffset = 20,
1142
+ ...props
1143
+ }) {
1144
+ const [open, setOpen] = react$1.useState(false);
1145
+ const [content, setContent] = react$1.useState("");
1146
+ const [duration, setDuration] = react$1.useState(3e3);
1147
+ const [position, setPosition] = react$1.useState(defaultPosition);
1148
+ return /* @__PURE__ */ jsxRuntime.jsx(
1149
+ ToastContext.Provider,
1150
+ {
1151
+ value: {
1152
+ open,
1153
+ setOpen,
1154
+ content,
1155
+ setContent,
1156
+ duration,
1157
+ setDuration,
1158
+ position,
1159
+ setPosition
1160
+ },
1161
+ children: /* @__PURE__ */ jsxRuntime.jsxs(ToastPrimitive__namespace.Provider, { swipeDirection: "down", ...props, children: [
1162
+ children,
1163
+ /* @__PURE__ */ jsxRuntime.jsx(StyledToastRoot, { open, onOpenChange: setOpen, duration, $position: position, children: /* @__PURE__ */ jsxRuntime.jsx(StyledToastDescription, { children: content }) }),
1164
+ /* @__PURE__ */ jsxRuntime.jsx(StyledToastViewport, { $position: position, $viewportOffset: viewportOffset })
1165
+ ] })
1166
+ }
1167
+ );
1168
+ }
1169
+ function useToast() {
1170
+ const context = react$1.useContext(ToastContext);
1171
+ if (!context) {
1172
+ throw new Error("useToast must be used within ToastProvider");
1173
+ }
1174
+ const showToast = (message, options) => {
1175
+ context.setContent(message);
1176
+ if (options?.duration) context.setDuration(options.duration);
1177
+ if (options?.position) context.setPosition(options.position);
1178
+ context.setOpen(true);
1179
+ };
1180
+ return { showToast };
1181
+ }
1182
+ var StyledOverlay = styled8__default.default(DialogPrimitive__namespace.Overlay)`
1183
+ background-color: ${({ theme: theme2 }) => theme2.colors.basic.black30};
1184
+ position: fixed;
1185
+ inset: 0;
1186
+ z-index: 9998;
1187
+
1188
+ &[data-state='open'] {
1189
+ animation: fadeIn 200ms ease-out;
1190
+ }
1191
+
1192
+ &[data-state='closed'] {
1193
+ animation: fadeOut 200ms ease-in;
1194
+ }
1195
+
1196
+ @keyframes fadeIn {
1197
+ from { opacity: 0; }
1198
+ to { opacity: 1; }
1199
+ }
1200
+
1201
+ @keyframes fadeOut {
1202
+ from { opacity: 1; }
1203
+ to { opacity: 0; }
1204
+ }
1205
+ `;
1206
+ var StyledContent = styled8__default.default(DialogPrimitive__namespace.Content)`
1207
+ background-color: ${({ theme: theme2 }) => theme2.colors.bgWhite};
1208
+ border-radius: ${({ theme: theme2 }) => theme2.radius["2xl"]};
1209
+ box-shadow: ${({ theme: theme2 }) => theme2.shadows.modal};
1210
+ position: fixed;
1211
+ top: 50%;
1212
+ left: 50%;
1213
+ transform: translate(-50%, -50%);
1214
+ width: 90vw;
1215
+ max-width: 400px;
1216
+ max-height: 85vh;
1217
+ padding: ${({ theme: theme2 }) => theme2.spacing[6]};
1218
+ z-index: 9999;
1219
+
1220
+ &[data-state='open'] {
1221
+ animation: contentShow 200ms ease-out;
1222
+ }
1223
+
1224
+ @keyframes contentShow {
1225
+ from {
1226
+ opacity: 0;
1227
+ transform: translate(-50%, -48%) scale(0.96);
1228
+ }
1229
+ to {
1230
+ opacity: 1;
1231
+ transform: translate(-50%, -50%) scale(1);
1232
+ }
1233
+ }
1234
+
1235
+ &:focus {
1236
+ outline: none;
1237
+ }
1238
+ `;
1239
+ var StyledHeader = styled8__default.default.div`
1240
+ display: flex;
1241
+ justify-content: space-between;
1242
+ align-items: flex-start;
1243
+ margin-bottom: ${({ theme: theme2 }) => theme2.spacing[4]};
1244
+ `;
1245
+ var StyledTitle = styled8__default.default(DialogPrimitive__namespace.Title)`
1246
+ font-size: ${({ theme: theme2 }) => theme2.typography.headingXl.fontSize};
1247
+ line-height: ${({ theme: theme2 }) => theme2.typography.headingXl.lineHeight};
1248
+ font-weight: ${({ theme: theme2 }) => theme2.typography.headingXl.fontWeight};
1249
+ color: ${({ theme: theme2 }) => theme2.colors.textPrimary};
1250
+ margin: 0;
1251
+ `;
1252
+ var StyledCloseButton = styled8__default.default.button`
1253
+ background: transparent;
1254
+ border: none;
1255
+ cursor: pointer;
1256
+ padding: 0;
1257
+ display: flex;
1258
+ align-items: center;
1259
+ justify-content: center;
1260
+ color: ${({ theme: theme2 }) => theme2.colors.textSecondary};
1261
+ transition: color 0.2s ease;
1262
+
1263
+ &:hover {
1264
+ color: ${({ theme: theme2 }) => theme2.colors.textPrimary};
1265
+ }
1266
+ `;
1267
+ var StyledBody = styled8__default.default.div`
1268
+ font-size: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.fontSize};
1269
+ line-height: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.lineHeight};
1270
+ color: ${({ theme: theme2 }) => theme2.colors.textSecondary};
1271
+ margin-bottom: ${({ theme: theme2 }) => theme2.spacing[6]};
1272
+ `;
1273
+ var StyledFooter = styled8__default.default.div`
1274
+ display: flex;
1275
+ gap: ${({ theme: theme2 }) => theme2.spacing[2]};
1276
+ justify-content: flex-end;
1277
+ `;
1278
+ function DialogRoot({ isOpen, onClose, children }) {
1279
+ return /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Root, { open: isOpen, onOpenChange: (open) => !open && onClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(DialogPrimitive__namespace.Portal, { children: [
1280
+ /* @__PURE__ */ jsxRuntime.jsx(StyledOverlay, {}),
1281
+ /* @__PURE__ */ jsxRuntime.jsx(StyledContent, { children })
1282
+ ] }) });
1283
+ }
1284
+ function DialogTitle({ children }) {
1285
+ const theme2 = react.useTheme();
1286
+ return /* @__PURE__ */ jsxRuntime.jsxs(StyledHeader, { children: [
1287
+ /* @__PURE__ */ jsxRuntime.jsx(StyledTitle, { children }),
1288
+ /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Close, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(StyledCloseButton, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { size: 24, color: theme2.colors.textSecondary }) }) })
1289
+ ] });
1290
+ }
1291
+ function DialogContent({ children }) {
1292
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledBody, { children });
1293
+ }
1294
+ function DialogFooter({ children }) {
1295
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledFooter, { children });
1296
+ }
1297
+ var Dialog = DialogRoot;
1298
+ Dialog.Title = DialogTitle;
1299
+ Dialog.Content = DialogContent;
1300
+ Dialog.Footer = DialogFooter;
1301
+ var StyledChatBubble = styled8__default.default.div`
1302
+ padding: ${({ theme: theme2 }) => `${theme2.spacing[3]} ${theme2.spacing[4]}`};
1303
+ border-radius: ${({ theme: theme2 }) => theme2.radius.xl};
1304
+ max-width: 70%;
1305
+ width: fit-content;
1306
+ word-wrap: break-word;
1307
+
1308
+ font-size: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.fontSize};
1309
+ line-height: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.lineHeight};
1310
+ font-weight: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.fontWeight};
1311
+
1312
+ ${({ $variant, theme: theme2 }) => {
1313
+ if ($variant === "user") {
1314
+ return `
1315
+ background-color: ${theme2.colors.bgAccent};
1316
+ color: ${theme2.colors.bgWhite};
1317
+ align-self: flex-end;
1318
+ border-bottom-right-radius: ${theme2.radius.sm};
1319
+ `;
1320
+ }
1321
+ return `
1322
+ background-color: ${theme2.colors.bgMediumGrey};
1323
+ color: ${theme2.colors.textPrimary};
1324
+ align-self: flex-start;
1325
+ border-bottom-left-radius: ${theme2.radius.sm};
1326
+ `;
1327
+ }}
1328
+ `;
1329
+ function ChatBubble({ variant = "assistant", children }) {
1330
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledChatBubble, { $variant: variant, children });
1331
+ }
1332
+ var ICON_BUTTON_PADDING = {
1333
+ large: "12px",
1334
+ medium: "10px",
1335
+ small: "8px"
1336
+ };
1337
+ var iconButtonSizeStyles = {
1338
+ filled: {
1339
+ large: {
1340
+ ...sizeStyles4.filled.large,
1341
+ padding: `${ICON_BUTTON_PADDING.large} ${ICON_BUTTON_PADDING.large}`
1342
+ },
1343
+ medium: {
1344
+ ...sizeStyles4.filled.medium,
1345
+ padding: `${ICON_BUTTON_PADDING.medium} ${ICON_BUTTON_PADDING.medium}`
1346
+ },
1347
+ small: {
1348
+ ...sizeStyles4.filled.small,
1349
+ padding: `${ICON_BUTTON_PADDING.small} ${ICON_BUTTON_PADDING.small}`
1350
+ }
1351
+ },
1352
+ warning: {
1353
+ large: {
1354
+ ...sizeStyles4.warning.large,
1355
+ padding: `${ICON_BUTTON_PADDING.large} ${ICON_BUTTON_PADDING.large}`
1356
+ },
1357
+ medium: {
1358
+ ...sizeStyles4.warning.medium,
1359
+ padding: `${ICON_BUTTON_PADDING.medium} ${ICON_BUTTON_PADDING.medium}`
1360
+ },
1361
+ small: {
1362
+ ...sizeStyles4.warning.small,
1363
+ padding: `${ICON_BUTTON_PADDING.small} ${ICON_BUTTON_PADDING.small}`
1364
+ }
1365
+ },
1366
+ outlined: {
1367
+ large: {
1368
+ ...sizeStyles4.outlined.large,
1369
+ padding: `${ICON_BUTTON_PADDING.large} ${ICON_BUTTON_PADDING.large}`
1370
+ },
1371
+ medium: {
1372
+ ...sizeStyles4.outlined.medium,
1373
+ padding: `${ICON_BUTTON_PADDING.medium} ${ICON_BUTTON_PADDING.medium}`
1374
+ },
1375
+ small: {
1376
+ ...sizeStyles4.outlined.small,
1377
+ padding: `${ICON_BUTTON_PADDING.small} ${ICON_BUTTON_PADDING.small}`
1378
+ }
1379
+ },
1380
+ text: {
1381
+ large: {
1382
+ ...sizeStyles4.text.large,
1383
+ padding: `${ICON_BUTTON_PADDING.large} ${ICON_BUTTON_PADDING.large}`
1384
+ },
1385
+ medium: {
1386
+ ...sizeStyles4.text.medium,
1387
+ padding: `${ICON_BUTTON_PADDING.medium} ${ICON_BUTTON_PADDING.medium}`
1388
+ },
1389
+ small: {
1390
+ ...sizeStyles4.text.small,
1391
+ padding: `${ICON_BUTTON_PADDING.small} ${ICON_BUTTON_PADDING.small}`
1392
+ }
1393
+ }
1394
+ };
1395
+ var propFilter5 = (prop) => !["$variant", "$size"].includes(prop) && isPropValid__default.default(prop);
1396
+ var StyledIconButton = styled8__default.default("button", {
1397
+ shouldForwardProp: propFilter5
1398
+ })`
1399
+ display: inline-flex;
1400
+ justify-content: center;
1401
+ align-items: center;
1402
+ gap: 0;
1403
+ width: fit-content;
1404
+ height: fit-content;
1405
+
1406
+ /* 기본 초기화 */
1407
+ border: none;
1408
+ outline: none;
1409
+ text-align: center;
1410
+ cursor: pointer;
1411
+ white-space: nowrap;
1412
+
1413
+ /* 애니메이션 */
1414
+ transition:
1415
+ background-color 0.2s ease,
1416
+ color 0.2s ease,
1417
+ border-color 0.2s ease,
1418
+ opacity 0.2s ease;
1419
+
1420
+ /* 사이즈 & 타이포그래피 (Button과 동일, padding만 변환) */
1421
+ ${({ $variant, $size, theme: theme2 }) => {
1422
+ const spec = iconButtonSizeStyles[$variant][$size];
1423
+ const borderRadius = "borderRadius" in spec ? theme2.radius[spec.borderRadius] : "";
1424
+ const typo = theme2.typography[spec.typography];
1425
+ return `
1426
+ font-size: ${typo.fontSize};
1427
+ line-height: ${typo.lineHeight};
1428
+ font-weight: ${typo.fontWeight};
1429
+ letter-spacing: ${typo.letterSpacing};
1430
+ padding: ${spec.padding};
1431
+ ${borderRadius ? `border-radius: ${borderRadius};` : ""}
1432
+ `;
1433
+ }}
1434
+
1435
+ /* 색상 Variants (Button과 동일) */
1436
+ ${({ $variant, theme: theme2 }) => {
1437
+ if ($variant === "filled") {
1438
+ return `
1439
+ background-color: ${theme2.colors.bgAccent};
1440
+ color: ${theme2.colors.bgWhite};
1441
+
1442
+ &:hover:not(:disabled),
1443
+ &:active:not(:disabled) {
1444
+ background-color: ${theme2.colors.bgAccentDark};
1445
+ color: ${theme2.colors.bgWhite};
1446
+ }
1447
+ `;
1448
+ }
1449
+ if ($variant === "warning") {
1450
+ return `
1451
+ background-color: ${theme2.colors.bgWarning};
1452
+ color: ${theme2.colors.bgWhite};
1453
+
1454
+ &:hover:not(:disabled),
1455
+ &:active:not(:disabled) {
1456
+ background-color: ${theme2.colors.bgWarningDark};
1457
+ color: ${theme2.colors.bgWhite};
1458
+ }
1459
+ `;
1460
+ }
1461
+ if ($variant === "outlined") {
1462
+ return `
1463
+ background-color: ${theme2.colors.bgWhite};
1464
+ border: 1px solid ${theme2.colors.lineDefault};
1465
+ color: ${theme2.colors.textPrimary};
1466
+
1467
+ /* Pressed & Hovered: bg-medium-gray */
1468
+ &:hover:not(:disabled),
1469
+ &:active:not(:disabled) {
1470
+ background-color: ${theme2.colors.bgMediumGrey};
1471
+ border: 1px solid ${theme2.colors.lineDefault};
1472
+ color: ${theme2.colors.textPrimary};
1473
+ }
1474
+ `;
1475
+ }
1476
+ return `
1477
+ background-color: transparent;
1478
+ color: ${theme2.colors.textPrimary};
1479
+
1480
+ &:hover:not(:disabled),
1481
+ &:active:not(:disabled) {
1482
+ background-color: ${theme2.colors.bgMediumGrey};
1483
+ color: ${theme2.colors.textPrimary};
1484
+ }
1485
+ `;
1486
+ }}
1487
+
1488
+ /* Disabled 공통 처리 */
1489
+ &:disabled {
1490
+ opacity: 0.5;
1491
+ cursor: not-allowed;
1492
+ }
1493
+ `;
1494
+ var IconButton = react$1.forwardRef(
1495
+ ({ variant = "filled", size = "medium", children, type = "button", ...props }, ref) => {
1496
+ return /* @__PURE__ */ jsxRuntime.jsx(
1497
+ StyledIconButton,
1498
+ {
1499
+ ref,
1500
+ $variant: variant,
1501
+ $size: size,
1502
+ type,
1503
+ ...props,
1504
+ children
1505
+ }
1506
+ );
1507
+ }
1508
+ );
1509
+ IconButton.displayName = "IconButton";
1510
+ var PaginationContainer = styled8__default.default.div`
1511
+ display: flex;
1512
+ align-items: center;
1513
+ gap: ${({ theme: theme2 }) => theme2.spacing[1]};
1514
+ `;
1515
+ var PaginationPages = styled8__default.default.div`
1516
+ display: flex;
1517
+ align-items: center;
1518
+ gap: 0;
1519
+ `;
1520
+ var StyledPaginationButton = styled8__default.default("button", {
1521
+ shouldForwardProp: (prop) => prop !== "$active" && isPropValid__default.default(prop)
1522
+ })`
1523
+ display: inline-flex;
1524
+ align-items: center;
1525
+ justify-content: center;
1526
+ min-width: 0;
1527
+ padding: 8.5px;
1528
+ border: none;
1529
+ border-radius: ${({ theme: theme2 }) => theme2.radius.lg};
1530
+ background-color: ${({ theme: theme2, $active }) => $active ? theme2.colors.bgMediumGrey : "transparent"};
1531
+ cursor: pointer;
1532
+ transition:
1533
+ background-color 0.2s ease,
1534
+ color 0.2s ease;
1535
+
1536
+ .pagination-button-inner {
1537
+ display: inline-flex;
1538
+ align-items: center;
1539
+ justify-content: center;
1540
+ width: 23px;
1541
+ height: 23px;
1542
+ font-size: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.fontSize};
1543
+ line-height: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.lineHeight};
1544
+ font-weight: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.fontWeight};
1545
+ color: ${({ theme: theme2, $active }) => $active ? theme2.colors.textPrimary : theme2.colors.textTertiary};
1546
+ }
1547
+
1548
+ &:hover:not(:disabled) {
1549
+ background-color: ${({ theme: theme2, $active }) => $active ? theme2.colors.bgMediumGrey : theme2.colors.bgLightGrey};
1550
+ }
1551
+
1552
+ &:disabled {
1553
+ opacity: 0.5;
1554
+ cursor: not-allowed;
1555
+ pointer-events: none;
1556
+ }
1557
+ `;
1558
+ var DOTS = "...";
1559
+ var range = (start, end) => {
1560
+ const length = end - start + 1;
1561
+ return Array.from({ length }, (_, idx) => idx + start);
1562
+ };
1563
+ function Pagination({
1564
+ currentPage,
1565
+ totalPage,
1566
+ onPageChange,
1567
+ siblingCount = 1
1568
+ }) {
1569
+ const paginationRange = react$1.useMemo(() => {
1570
+ if (totalPage <= 1) return [];
1571
+ const totalPageNumbers = siblingCount + 5;
1572
+ if (totalPageNumbers >= totalPage) {
1573
+ return range(1, totalPage);
1574
+ }
1575
+ const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);
1576
+ const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPage);
1577
+ const shouldShowLeftDots = leftSiblingIndex > 2;
1578
+ const shouldShowRightDots = rightSiblingIndex < totalPage - 2;
1579
+ const firstPageIndex = 1;
1580
+ const lastPageIndex = totalPage;
1581
+ if (!shouldShowLeftDots && shouldShowRightDots) {
1582
+ const leftItemCount = 3 + 2 * siblingCount;
1583
+ const leftRange = range(1, leftItemCount);
1584
+ return [...leftRange, DOTS, totalPage];
1585
+ }
1586
+ if (shouldShowLeftDots && !shouldShowRightDots) {
1587
+ const rightItemCount = 3 + 2 * siblingCount;
1588
+ const rightRange = range(totalPage - rightItemCount + 1, totalPage);
1589
+ return [firstPageIndex, DOTS, ...rightRange];
1590
+ }
1591
+ if (shouldShowLeftDots && shouldShowRightDots) {
1592
+ const middleRange = range(leftSiblingIndex, rightSiblingIndex);
1593
+ return [firstPageIndex, DOTS, ...middleRange, DOTS, lastPageIndex];
1594
+ }
1595
+ return [];
1596
+ }, [totalPage, currentPage, siblingCount]);
1597
+ const handlePrevPage = () => {
1598
+ if (currentPage > 1) {
1599
+ onPageChange(currentPage - 1);
1600
+ }
1601
+ };
1602
+ const handleNextPage = () => {
1603
+ if (currentPage < totalPage) {
1604
+ onPageChange(currentPage + 1);
1605
+ }
1606
+ };
1607
+ if (currentPage === 0 || paginationRange.length < 2) {
1608
+ return null;
1609
+ }
1610
+ return /* @__PURE__ */ jsxRuntime.jsxs(PaginationContainer, { children: [
1611
+ /* @__PURE__ */ jsxRuntime.jsx(
1612
+ IconButton,
1613
+ {
1614
+ type: "button",
1615
+ variant: "text",
1616
+ size: "small",
1617
+ onClick: handlePrevPage,
1618
+ disabled: currentPage === 1,
1619
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { size: 24 })
1620
+ }
1621
+ ),
1622
+ /* @__PURE__ */ jsxRuntime.jsx(PaginationPages, { children: paginationRange.map((pageNumber, index) => {
1623
+ if (pageNumber === DOTS) {
1624
+ return /* @__PURE__ */ jsxRuntime.jsx(
1625
+ IconButton,
1626
+ {
1627
+ type: "button",
1628
+ variant: "text",
1629
+ size: "small",
1630
+ disabled: true,
1631
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Ellipsis, { size: 24, strokeWidth: 1.5 })
1632
+ },
1633
+ `dots-${index}`
1634
+ );
1635
+ }
1636
+ const isCurrent = pageNumber === currentPage;
1637
+ return /* @__PURE__ */ jsxRuntime.jsx(
1638
+ StyledPaginationButton,
1639
+ {
1640
+ type: "button",
1641
+ $active: isCurrent,
1642
+ onClick: () => onPageChange(pageNumber),
1643
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "pagination-button-inner", children: pageNumber })
1644
+ },
1645
+ pageNumber
1646
+ );
1647
+ }) }),
1648
+ /* @__PURE__ */ jsxRuntime.jsx(
1649
+ IconButton,
1650
+ {
1651
+ type: "button",
1652
+ variant: "text",
1653
+ size: "small",
1654
+ onClick: handleNextPage,
1655
+ disabled: currentPage === totalPage,
1656
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { size: 24 })
1657
+ }
1658
+ )
1659
+ ] });
1660
+ }
1661
+ var StyledCheckbox = styled8__default.default(CheckboxPrimitive__namespace.Root)`
1662
+ width: 20px;
1663
+ height: 20px;
1664
+ border-radius: ${({ theme: theme2 }) => theme2.radius.sm};
1665
+ border: 1px solid ${({ theme: theme2 }) => theme2.colors.lineDefault};
1666
+ background-color: ${({ theme: theme2 }) => theme2.colors.bgWhite};
1667
+ display: flex;
1668
+ align-items: center;
1669
+ justify-content: center;
1670
+ cursor: pointer;
1671
+ transition: all 0.2s ease;
1672
+
1673
+ &:hover {
1674
+ border-color: ${({ theme: theme2 }) => theme2.colors.lineAccent};
1675
+ }
1676
+
1677
+ &[data-state='checked'] {
1678
+ background-color: ${({ theme: theme2 }) => theme2.colors.bgAccent};
1679
+ border-color: ${({ theme: theme2 }) => theme2.colors.bgAccent};
1680
+ }
1681
+
1682
+ &:disabled {
1683
+ opacity: 0.5;
1684
+ cursor: not-allowed;
1685
+ }
1686
+ `;
1687
+ var StyledIndicator = styled8__default.default(CheckboxPrimitive__namespace.Indicator)`
1688
+ color: ${({ theme: theme2 }) => theme2.colors.bgWhite};
1689
+ display: flex;
1690
+ align-items: center;
1691
+ justify-content: center;
1692
+ `;
1693
+ var CheckboxContainer = styled8__default.default.div`
1694
+ display: flex;
1695
+ align-items: center;
1696
+ gap: ${({ theme: theme2 }) => theme2.spacing[2]};
1697
+ `;
1698
+ var Label = styled8__default.default.label`
1699
+ font-size: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.fontSize};
1700
+ line-height: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.lineHeight};
1701
+ color: ${({ theme: theme2, $disabled }) => $disabled ? theme2.colors.textDisabled : theme2.colors.textPrimary};
1702
+ cursor: ${({ $disabled }) => $disabled ? "not-allowed" : "pointer"};
1703
+ user-select: none;
1704
+ `;
1705
+ var Checkbox = react$1.forwardRef(({ label, disabled, id, ...props }, ref) => {
1706
+ const checkboxId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
1707
+ return /* @__PURE__ */ jsxRuntime.jsxs(CheckboxContainer, { children: [
1708
+ /* @__PURE__ */ jsxRuntime.jsx(StyledCheckbox, { ref, id: checkboxId, disabled, ...props, children: /* @__PURE__ */ jsxRuntime.jsx(StyledIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { size: 16, strokeWidth: 3 }) }) }),
1709
+ label && /* @__PURE__ */ jsxRuntime.jsx(Label, { htmlFor: checkboxId, $disabled: disabled, children: label })
1710
+ ] });
1711
+ });
1712
+ Checkbox.displayName = "Checkbox";
1713
+ var StyledRadioGroup = styled8__default.default(RadioGroupPrimitive__namespace.Root)`
1714
+ display: flex;
1715
+ flex-direction: column;
1716
+ gap: ${({ theme: theme2 }) => theme2.spacing[2]};
1717
+ `;
1718
+ var RadioItem = styled8__default.default.div`
1719
+ display: flex;
1720
+ align-items: center;
1721
+ gap: ${({ theme: theme2 }) => theme2.spacing[2]};
1722
+ `;
1723
+ var StyledRadioButton = styled8__default.default(RadioGroupPrimitive__namespace.Item)`
1724
+ width: 20px;
1725
+ height: 20px;
1726
+ border-radius: ${({ theme: theme2 }) => theme2.radius.full};
1727
+ border: 1px solid ${({ theme: theme2 }) => theme2.colors.lineDefault};
1728
+ background-color: ${({ theme: theme2 }) => theme2.colors.bgWhite};
1729
+ display: flex;
1730
+ align-items: center;
1731
+ justify-content: center;
1732
+ cursor: pointer;
1733
+ transition: all 0.2s ease;
1734
+
1735
+ &:hover {
1736
+ border-color: ${({ theme: theme2 }) => theme2.colors.lineAccent};
1737
+ }
1738
+
1739
+ &[data-state='checked'] {
1740
+ border-color: ${({ theme: theme2 }) => theme2.colors.bgAccent};
1741
+ }
1742
+
1743
+ &:disabled {
1744
+ opacity: 0.5;
1745
+ cursor: not-allowed;
1746
+ }
1747
+ `;
1748
+ var StyledIndicator2 = styled8__default.default(RadioGroupPrimitive__namespace.Indicator)`
1749
+ width: 10px;
1750
+ height: 10px;
1751
+ border-radius: ${({ theme: theme2 }) => theme2.radius.full};
1752
+ background-color: ${({ theme: theme2 }) => theme2.colors.bgAccent};
1753
+ `;
1754
+ var Label2 = styled8__default.default.label`
1755
+ font-size: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.fontSize};
1756
+ line-height: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.lineHeight};
1757
+ color: ${({ theme: theme2, $disabled }) => $disabled ? theme2.colors.textDisabled : theme2.colors.textPrimary};
1758
+ cursor: ${({ $disabled }) => $disabled ? "not-allowed" : "pointer"};
1759
+ user-select: none;
1760
+ `;
1761
+ var RadioButton = react$1.forwardRef(({ options, ...props }, ref) => {
1762
+ return /* @__PURE__ */ jsxRuntime.jsx(StyledRadioGroup, { ref, ...props, children: options.map((option) => {
1763
+ const radioId = `radio-${option.value}`;
1764
+ return /* @__PURE__ */ jsxRuntime.jsxs(RadioItem, { children: [
1765
+ /* @__PURE__ */ jsxRuntime.jsx(
1766
+ StyledRadioButton,
1767
+ {
1768
+ value: option.value,
1769
+ id: radioId,
1770
+ disabled: option.disabled,
1771
+ children: /* @__PURE__ */ jsxRuntime.jsx(StyledIndicator2, {})
1772
+ }
1773
+ ),
1774
+ /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: radioId, $disabled: option.disabled, children: option.label })
1775
+ ] }, option.value);
1776
+ }) });
1777
+ });
1778
+ RadioButton.displayName = "RadioButton";
1779
+ var StyledMenuContent = styled8__default.default(DropdownMenu2__namespace.Content)`
1780
+ min-width: 200px;
1781
+ background-color: ${({ theme: theme2 }) => theme2.colors.bgWhite};
1782
+ border-radius: ${({ theme: theme2 }) => theme2.radius.lg};
1783
+ padding: ${({ theme: theme2 }) => theme2.spacing[1]};
1784
+ box-shadow: ${({ theme: theme2 }) => theme2.shadows.lg};
1785
+ z-index: 9999;
1786
+
1787
+ &[data-state='open'] {
1788
+ animation: fadeIn 200ms ease-out;
1789
+ }
1790
+
1791
+ @keyframes fadeIn {
1792
+ from {
1793
+ opacity: 0;
1794
+ transform: translateY(-4px);
1795
+ }
1796
+ to {
1797
+ opacity: 1;
1798
+ transform: translateY(0);
1799
+ }
1800
+ }
1801
+ `;
1802
+ var StyledMenuItem = styled8__default.default(DropdownMenu2__namespace.Item)`
1803
+ display: flex;
1804
+ align-items: center;
1805
+ justify-content: space-between;
1806
+ padding: ${({ theme: theme2 }) => `${theme2.spacing[2]} ${theme2.spacing[3]}`};
1807
+ border-radius: ${({ theme: theme2 }) => theme2.radius.md};
1808
+ font-size: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.fontSize};
1809
+ line-height: ${({ theme: theme2 }) => theme2.typography.bodyBaseMedium.lineHeight};
1810
+ color: ${({ theme: theme2 }) => theme2.colors.textPrimary};
1811
+ cursor: pointer;
1812
+ outline: none;
1813
+ user-select: none;
1814
+ width: ${({ $width }) => $width ? typeof $width === "number" ? `${$width}px` : $width : "auto"};
1815
+
1816
+ &:hover,
1817
+ &:focus {
1818
+ background-color: ${({ theme: theme2 }) => theme2.colors.bgMediumGrey};
1819
+ }
1820
+
1821
+ &[data-disabled] {
1822
+ color: ${({ theme: theme2 }) => theme2.colors.textDisabled};
1823
+ pointer-events: none;
1824
+ }
1825
+ `;
1826
+ var MenuItemLeft = styled8__default.default.div`
1827
+ display: flex;
1828
+ align-items: center;
1829
+ gap: ${({ theme: theme2 }) => theme2.spacing[2]};
1830
+ `;
1831
+ var MenuItemText = styled8__default.default.span``;
1832
+ var MenuLeadingIcon = styled8__default.default.span`
1833
+ display: flex;
1834
+ align-items: center;
1835
+ justify-content: center;
1836
+ width: 20px;
1837
+ height: 20px;
1838
+ `;
1839
+ var MenuTrailingIcon = styled8__default.default.span`
1840
+ display: flex;
1841
+ align-items: center;
1842
+ justify-content: center;
1843
+ width: 16px;
1844
+ height: 16px;
1845
+ color: ${({ theme: theme2 }) => theme2.colors.textTertiary};
1846
+ `;
1847
+ var Menu = DropdownMenu2__namespace.Root;
1848
+ var MenuTrigger = react$1.forwardRef(({ children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu2__namespace.Trigger, { ref, ...props, asChild: true, children }));
1849
+ MenuTrigger.displayName = "MenuTrigger";
1850
+ var MenuContent = react$1.forwardRef(({ children, sideOffset = 5, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu2__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(StyledMenuContent, { ref, sideOffset, ...props, children }) }));
1851
+ MenuContent.displayName = "MenuContent";
1852
+ var MenuItem = react$1.forwardRef(
1853
+ ({ leadingIcon, trailingIcon, width, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(StyledMenuItem, { ref, $width: width, ...props, children: [
1854
+ /* @__PURE__ */ jsxRuntime.jsxs(MenuItemLeft, { children: [
1855
+ leadingIcon && /* @__PURE__ */ jsxRuntime.jsx(MenuLeadingIcon, { children: leadingIcon }),
1856
+ /* @__PURE__ */ jsxRuntime.jsx(MenuItemText, { children })
1857
+ ] }),
1858
+ trailingIcon && /* @__PURE__ */ jsxRuntime.jsx(MenuTrailingIcon, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { size: 16 }) })
1859
+ ] })
1860
+ );
1861
+ MenuItem.displayName = "MenuItem";
1862
+ var StyledTooltipContent = styled8__default.default(TooltipPrimitive2__namespace.Content)`
1863
+ background-color: ${({ theme: theme2 }) => theme2.colors.bgDarkGrey};
1864
+ color: ${({ theme: theme2 }) => theme2.colors.bgWhite};
1865
+ border-radius: ${({ theme: theme2 }) => theme2.radius.md};
1866
+ padding: ${({ theme: theme2 }) => `${theme2.spacing[1]} ${theme2.spacing[2]}`};
1867
+ font-size: ${({ theme: theme2 }) => theme2.typography.bodyXsMedium.fontSize};
1868
+ line-height: ${({ theme: theme2 }) => theme2.typography.bodyXsMedium.lineHeight};
1869
+ box-shadow: ${({ theme: theme2 }) => theme2.shadows.base};
1870
+ z-index: 9999;
1871
+ max-width: 300px;
1872
+
1873
+ &[data-state='delayed-open'] {
1874
+ animation: fadeIn 200ms ease-out;
1875
+ }
1876
+
1877
+ @keyframes fadeIn {
1878
+ from {
1879
+ opacity: 0;
1880
+ transform: translateY(-2px);
1881
+ }
1882
+ to {
1883
+ opacity: 1;
1884
+ transform: translateY(0);
1885
+ }
1886
+ }
1887
+ `;
1888
+ var StyledArrow = styled8__default.default(TooltipPrimitive2__namespace.Arrow)`
1889
+ fill: ${({ theme: theme2 }) => theme2.colors.bgDarkGrey};
1890
+ `;
1891
+ var TooltipProvider = react$1.forwardRef(
1892
+ ({ children, delayDuration = 300, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive2__namespace.Provider, { delayDuration, ...props, children })
1893
+ );
1894
+ TooltipProvider.displayName = "TooltipProvider";
1895
+ var Tooltip = TooltipPrimitive2__namespace.Root;
1896
+ var TooltipTrigger = react$1.forwardRef(({ children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive2__namespace.Trigger, { ref, ...props, asChild: true, children }));
1897
+ TooltipTrigger.displayName = "TooltipTrigger";
1898
+ var TooltipContent = react$1.forwardRef(
1899
+ ({ children, sideOffset = 5, showArrow = true, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive2__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(StyledTooltipContent, { ref, sideOffset, ...props, children: [
1900
+ children,
1901
+ showArrow && /* @__PURE__ */ jsxRuntime.jsx(StyledArrow, {})
1902
+ ] }) })
1903
+ );
1904
+ TooltipContent.displayName = "TooltipContent";
1905
+
1906
+ exports.Avatar = Avatar;
1907
+ exports.Badge = Badge;
1908
+ exports.BichonThemeProvider = BichonThemeProvider;
1909
+ exports.Button = Button;
1910
+ exports.ChatBubble = ChatBubble;
1911
+ exports.Checkbox = Checkbox;
1912
+ exports.Dialog = Dialog;
1913
+ exports.Flex = Flex;
1914
+ exports.IconButton = IconButton;
1915
+ exports.Menu = Menu;
1916
+ exports.MenuContent = MenuContent;
1917
+ exports.MenuItem = MenuItem;
1918
+ exports.MenuTrigger = MenuTrigger;
1919
+ exports.Pagination = Pagination;
1920
+ exports.Progress = Progress;
1921
+ exports.RadioButton = RadioButton;
1922
+ exports.TextField = TextField;
1923
+ exports.ToastProvider = ToastProvider;
1924
+ exports.Tooltip = Tooltip;
1925
+ exports.TooltipContent = TooltipContent;
1926
+ exports.TooltipProvider = TooltipProvider;
1927
+ exports.TooltipTrigger = TooltipTrigger;
1928
+ exports.colors = colors;
1929
+ exports.componentSize = componentSize;
1930
+ exports.fontSize = fontSize;
1931
+ exports.fontWeight = fontWeight;
1932
+ exports.letterSpacing = letterSpacing;
1933
+ exports.lineHeight = lineHeight;
1934
+ exports.radius = radius;
1935
+ exports.semanticSpacing = semanticSpacing;
1936
+ exports.shadows = shadows;
1937
+ exports.spacing = spacing;
1938
+ exports.typography = typography;
1939
+ exports.useToast = useToast;