@hua-labs/ui 1.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.
Files changed (153) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +363 -0
  3. package/dist/components/Accordion.d.ts +39 -0
  4. package/dist/components/Accordion.d.ts.map +1 -0
  5. package/dist/components/Accordion.js +84 -0
  6. package/dist/components/Alert.d.ts +17 -0
  7. package/dist/components/Alert.d.ts.map +1 -0
  8. package/dist/components/Alert.js +61 -0
  9. package/dist/components/Avatar.d.ts +13 -0
  10. package/dist/components/Avatar.d.ts.map +1 -0
  11. package/dist/components/Avatar.js +18 -0
  12. package/dist/components/Badge.d.ts +7 -0
  13. package/dist/components/Badge.d.ts.map +1 -0
  14. package/dist/components/Badge.js +15 -0
  15. package/dist/components/BottomSheet.d.ts +29 -0
  16. package/dist/components/BottomSheet.d.ts.map +1 -0
  17. package/dist/components/BottomSheet.js +96 -0
  18. package/dist/components/Breadcrumb.d.ts +27 -0
  19. package/dist/components/Breadcrumb.d.ts.map +1 -0
  20. package/dist/components/Breadcrumb.js +47 -0
  21. package/dist/components/Button.d.ts +9 -0
  22. package/dist/components/Button.d.ts.map +1 -0
  23. package/dist/components/Button.js +23 -0
  24. package/dist/components/Card.d.ts +21 -0
  25. package/dist/components/Card.d.ts.map +1 -0
  26. package/dist/components/Card.js +18 -0
  27. package/dist/components/ChatMessage.d.ts +35 -0
  28. package/dist/components/ChatMessage.d.ts.map +1 -0
  29. package/dist/components/ChatMessage.js +59 -0
  30. package/dist/components/Checkbox.d.ts +12 -0
  31. package/dist/components/Checkbox.d.ts.map +1 -0
  32. package/dist/components/Checkbox.js +30 -0
  33. package/dist/components/Command.d.ts +36 -0
  34. package/dist/components/Command.d.ts.map +1 -0
  35. package/dist/components/Command.js +119 -0
  36. package/dist/components/ConfirmModal.d.ts +26 -0
  37. package/dist/components/ConfirmModal.d.ts.map +1 -0
  38. package/dist/components/ConfirmModal.js +53 -0
  39. package/dist/components/Container.d.ts +10 -0
  40. package/dist/components/Container.d.ts.map +1 -0
  41. package/dist/components/Container.js +23 -0
  42. package/dist/components/ContextMenu.d.ts +26 -0
  43. package/dist/components/ContextMenu.d.ts.map +1 -0
  44. package/dist/components/ContextMenu.js +110 -0
  45. package/dist/components/Divider.d.ts +11 -0
  46. package/dist/components/Divider.d.ts.map +1 -0
  47. package/dist/components/Divider.js +39 -0
  48. package/dist/components/Drawer.d.ts +32 -0
  49. package/dist/components/Drawer.d.ts.map +1 -0
  50. package/dist/components/Drawer.js +79 -0
  51. package/dist/components/Dropdown.d.ts +28 -0
  52. package/dist/components/Dropdown.d.ts.map +1 -0
  53. package/dist/components/Dropdown.js +174 -0
  54. package/dist/components/EmotionAnalysis.d.ts +25 -0
  55. package/dist/components/EmotionAnalysis.d.ts.map +1 -0
  56. package/dist/components/EmotionAnalysis.js +40 -0
  57. package/dist/components/EmotionButton.d.ts +9 -0
  58. package/dist/components/EmotionButton.d.ts.map +1 -0
  59. package/dist/components/EmotionButton.js +16 -0
  60. package/dist/components/EmotionMeter.d.ts +10 -0
  61. package/dist/components/EmotionMeter.d.ts.map +1 -0
  62. package/dist/components/EmotionMeter.js +21 -0
  63. package/dist/components/EmotionSelector.d.ts +20 -0
  64. package/dist/components/EmotionSelector.d.ts.map +1 -0
  65. package/dist/components/EmotionSelector.js +46 -0
  66. package/dist/components/Grid.d.ts +11 -0
  67. package/dist/components/Grid.d.ts.map +1 -0
  68. package/dist/components/Grid.js +44 -0
  69. package/dist/components/Icon.d.ts +26 -0
  70. package/dist/components/Icon.d.ts.map +1 -0
  71. package/dist/components/Icon.js +48 -0
  72. package/dist/components/Input.d.ts +12 -0
  73. package/dist/components/Input.d.ts.map +1 -0
  74. package/dist/components/Input.js +25 -0
  75. package/dist/components/LanguageToggle.d.ts +17 -0
  76. package/dist/components/LanguageToggle.d.ts.map +1 -0
  77. package/dist/components/LanguageToggle.js +61 -0
  78. package/dist/components/LoadingSpinner.d.ts +10 -0
  79. package/dist/components/LoadingSpinner.d.ts.map +1 -0
  80. package/dist/components/LoadingSpinner.js +37 -0
  81. package/dist/components/Menu.d.ts +29 -0
  82. package/dist/components/Menu.d.ts.map +1 -0
  83. package/dist/components/Menu.js +122 -0
  84. package/dist/components/Modal.d.ts +15 -0
  85. package/dist/components/Modal.d.ts.map +1 -0
  86. package/dist/components/Modal.js +62 -0
  87. package/dist/components/PageTransition.d.ts +18 -0
  88. package/dist/components/PageTransition.d.ts.map +1 -0
  89. package/dist/components/PageTransition.js +39 -0
  90. package/dist/components/Pagination.d.ts +21 -0
  91. package/dist/components/Pagination.d.ts.map +1 -0
  92. package/dist/components/Pagination.js +87 -0
  93. package/dist/components/Popover.d.ts +16 -0
  94. package/dist/components/Popover.d.ts.map +1 -0
  95. package/dist/components/Popover.js +159 -0
  96. package/dist/components/Progress.d.ts +23 -0
  97. package/dist/components/Progress.d.ts.map +1 -0
  98. package/dist/components/Progress.js +51 -0
  99. package/dist/components/Radio.d.ts +12 -0
  100. package/dist/components/Radio.d.ts.map +1 -0
  101. package/dist/components/Radio.js +29 -0
  102. package/dist/components/ScrollArea.d.ts +16 -0
  103. package/dist/components/ScrollArea.d.ts.map +1 -0
  104. package/dist/components/ScrollArea.js +42 -0
  105. package/dist/components/ScrollIndicator.d.ts +17 -0
  106. package/dist/components/ScrollIndicator.d.ts.map +1 -0
  107. package/dist/components/ScrollIndicator.js +60 -0
  108. package/dist/components/ScrollProgress.d.ts +12 -0
  109. package/dist/components/ScrollProgress.d.ts.map +1 -0
  110. package/dist/components/ScrollProgress.js +39 -0
  111. package/dist/components/ScrollToTop.d.ts +15 -0
  112. package/dist/components/ScrollToTop.d.ts.map +1 -0
  113. package/dist/components/ScrollToTop.js +46 -0
  114. package/dist/components/Select.d.ts +17 -0
  115. package/dist/components/Select.d.ts.map +1 -0
  116. package/dist/components/Select.js +29 -0
  117. package/dist/components/Skeleton.d.ts +19 -0
  118. package/dist/components/Skeleton.d.ts.map +1 -0
  119. package/dist/components/Skeleton.js +71 -0
  120. package/dist/components/Stack.d.ts +11 -0
  121. package/dist/components/Stack.d.ts.map +1 -0
  122. package/dist/components/Stack.js +34 -0
  123. package/dist/components/Switch.d.ts +12 -0
  124. package/dist/components/Switch.d.ts.map +1 -0
  125. package/dist/components/Switch.js +29 -0
  126. package/dist/components/Tabs.d.ts +36 -0
  127. package/dist/components/Tabs.d.ts.map +1 -0
  128. package/dist/components/Tabs.js +117 -0
  129. package/dist/components/Textarea.d.ts +11 -0
  130. package/dist/components/Textarea.d.ts.map +1 -0
  131. package/dist/components/Textarea.js +31 -0
  132. package/dist/components/ThemeProvider.d.ts +19 -0
  133. package/dist/components/ThemeProvider.d.ts.map +1 -0
  134. package/dist/components/ThemeProvider.js +76 -0
  135. package/dist/components/ThemeToggle.d.ts +14 -0
  136. package/dist/components/ThemeToggle.d.ts.map +1 -0
  137. package/dist/components/ThemeToggle.js +49 -0
  138. package/dist/components/Toast.d.ts +32 -0
  139. package/dist/components/Toast.d.ts.map +1 -0
  140. package/dist/components/Toast.js +138 -0
  141. package/dist/components/Tooltip.d.ts +14 -0
  142. package/dist/components/Tooltip.d.ts.map +1 -0
  143. package/dist/components/Tooltip.js +102 -0
  144. package/dist/index.d.ts +50 -0
  145. package/dist/index.d.ts.map +1 -0
  146. package/dist/index.js +49 -0
  147. package/dist/lib/icons.d.ts +43 -0
  148. package/dist/lib/icons.d.ts.map +1 -0
  149. package/dist/lib/icons.js +321 -0
  150. package/dist/lib/utils.d.ts +3 -0
  151. package/dist/lib/utils.d.ts.map +1 -0
  152. package/dist/lib/utils.js +5 -0
  153. package/package.json +67 -0
@@ -0,0 +1,138 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { createContext, useContext, useState, useCallback } from "react";
5
+ import { cn } from "../lib/utils";
6
+ // Toast Context 생성
7
+ const ToastContext = createContext(undefined);
8
+ // Toast Hook
9
+ export function useToast() {
10
+ const context = useContext(ToastContext);
11
+ if (!context) {
12
+ throw new Error("useToast must be used within a ToastProvider");
13
+ }
14
+ return context;
15
+ }
16
+ // Toast Provider
17
+ export function ToastProvider({ children, maxToasts = 5, position = "top-right" }) {
18
+ const [toasts, setToasts] = useState([]);
19
+ const removeToast = useCallback((id) => {
20
+ setToasts(prev => prev.filter(toast => toast.id !== id));
21
+ }, []);
22
+ const addToast = useCallback((toast) => {
23
+ const id = Math.random().toString(36).substr(2, 9);
24
+ const newToast = { ...toast, id };
25
+ setToasts(prev => {
26
+ const updatedToasts = [...prev, newToast];
27
+ return updatedToasts.slice(-maxToasts); // 최대 개수 제한
28
+ });
29
+ // 자동 제거
30
+ if (toast.duration !== 0) {
31
+ setTimeout(() => {
32
+ removeToast(id);
33
+ }, toast.duration || 5000);
34
+ }
35
+ }, [maxToasts, removeToast]);
36
+ const clearToasts = useCallback(() => {
37
+ setToasts([]);
38
+ }, []);
39
+ return (_jsxs(ToastContext.Provider, { value: { toasts, addToast, removeToast, clearToasts }, children: [children, _jsx(ToastContainer, { toasts: toasts, removeToast: removeToast, position: position })] }));
40
+ }
41
+ // Toast Container
42
+ function ToastContainer({ toasts, removeToast, position }) {
43
+ const positionClasses = {
44
+ "top-right": "top-4 right-4",
45
+ "top-left": "top-4 left-4",
46
+ "bottom-right": "bottom-4 right-4",
47
+ "bottom-left": "bottom-4 left-4",
48
+ "top-center": "top-4 left-1/2 transform -translate-x-1/2",
49
+ "bottom-center": "bottom-4 left-1/2 transform -translate-x-1/2"
50
+ };
51
+ if (toasts.length === 0)
52
+ return null;
53
+ return (_jsx("div", { className: cn("fixed z-50 space-y-3 max-w-sm", // 12px 간격
54
+ positionClasses[position]), children: toasts.map((toast) => (_jsx(ToastItem, { toast: toast, onRemove: removeToast }, toast.id))) }));
55
+ }
56
+ // Toast Item
57
+ function ToastItem({ toast, onRemove }) {
58
+ const [isVisible, setIsVisible] = useState(false);
59
+ React.useEffect(() => {
60
+ setIsVisible(true);
61
+ }, []);
62
+ const handleRemove = () => {
63
+ setIsVisible(false);
64
+ setTimeout(() => onRemove(toast.id), 300);
65
+ };
66
+ const getToastStyles = (type) => {
67
+ switch (type) {
68
+ case "success":
69
+ return "bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800 text-green-800 dark:text-green-200";
70
+ case "error":
71
+ return "bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800 text-red-800 dark:text-red-200";
72
+ case "warning":
73
+ return "bg-yellow-50 dark:bg-yellow-900/20 border-yellow-200 dark:border-yellow-800 text-yellow-800 dark:text-yellow-200";
74
+ case "info":
75
+ return "bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800 text-blue-800 dark:text-blue-200";
76
+ }
77
+ };
78
+ const getIconStyles = (type) => {
79
+ switch (type) {
80
+ case "success":
81
+ return "text-green-500 dark:text-green-400";
82
+ case "error":
83
+ return "text-red-500 dark:text-red-400";
84
+ case "warning":
85
+ return "text-yellow-500 dark:text-yellow-400";
86
+ case "info":
87
+ return "text-blue-500 dark:text-blue-400";
88
+ }
89
+ };
90
+ const getToastIcon = (type) => {
91
+ switch (type) {
92
+ case "success":
93
+ return (_jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }));
94
+ case "error":
95
+ return (_jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }));
96
+ case "warning":
97
+ return (_jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z" }) }));
98
+ case "info":
99
+ return (_jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }));
100
+ }
101
+ };
102
+ return (_jsxs("div", { className: cn("flex items-start p-4 rounded-xl border shadow-lg backdrop-blur-sm transition-all duration-300 transform", getToastStyles(toast.type), isVisible
103
+ ? "translate-x-0 opacity-100 scale-100"
104
+ : "translate-x-full opacity-0 scale-95"), style: {
105
+ animation: "slideInRight 0.3s cubic-bezier(0.16, 1, 0.3, 1)"
106
+ }, children: [_jsxs("div", { className: cn("flex-shrink-0 mr-3", getIconStyles(toast.type)), children: [" ", getToastIcon(toast.type)] }), _jsxs("div", { className: "flex-1 min-w-0", children: [toast.title && (_jsxs("h4", { className: "text-sm font-semibold mb-1", children: [" ", toast.title] })), _jsx("p", { className: "text-sm leading-relaxed", children: toast.message }), toast.action && (_jsx("button", { onClick: toast.action.onClick, className: "mt-3 text-sm font-medium underline hover:no-underline transition-all duration-200" // 12px 여백
107
+ , children: toast.action.label }))] }), _jsxs("div", { className: "flex-shrink-0 ml-4", children: [" ", _jsx("button", { onClick: handleRemove, className: cn("inline-flex rounded-md p-1.5 focus:outline-none focus:ring-2 focus:ring-offset-2 transition-all duration-200 hover:bg-black/5 dark:hover:bg-white/5", getIconStyles(toast.type)), "aria-label": "\uB2EB\uAE30", children: _jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })] }), _jsx("style", { dangerouslySetInnerHTML: {
108
+ __html: `
109
+ @keyframes slideInRight {
110
+ from {
111
+ transform: translateX(100%) scale(0.95);
112
+ opacity: 0;
113
+ }
114
+ to {
115
+ transform: translateX(0) scale(1);
116
+ opacity: 1;
117
+ }
118
+ }
119
+ `
120
+ } })] }));
121
+ }
122
+ // 편의 함수들
123
+ export const showToast = (toast) => {
124
+ // 이 함수는 ToastProvider 내부에서만 사용 가능
125
+ console.warn("showToast is deprecated. Use useToast hook instead.");
126
+ };
127
+ export const showSuccessToast = (message, title, duration) => {
128
+ console.warn("showSuccessToast is deprecated. Use useToast hook instead.");
129
+ };
130
+ export const showErrorToast = (message, title, duration) => {
131
+ console.warn("showErrorToast is deprecated. Use useToast hook instead.");
132
+ };
133
+ export const showWarningToast = (message, title, duration) => {
134
+ console.warn("showWarningToast is deprecated. Use useToast hook instead.");
135
+ };
136
+ export const showInfoToast = (message, title, duration) => {
137
+ console.warn("showInfoToast is deprecated. Use useToast hook instead.");
138
+ };
@@ -0,0 +1,14 @@
1
+ import * as React from "react";
2
+ export interface TooltipProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ content: string;
4
+ children: React.ReactNode;
5
+ position?: "top" | "bottom" | "left" | "right";
6
+ variant?: "default" | "light" | "dark";
7
+ delay?: number;
8
+ disabled?: boolean;
9
+ }
10
+ declare const Tooltip: React.ForwardRefExoticComponent<TooltipProps & React.RefAttributes<HTMLDivElement>>;
11
+ export declare const TooltipLight: React.ForwardRefExoticComponent<Omit<TooltipProps, "variant"> & React.RefAttributes<HTMLDivElement>>;
12
+ export declare const TooltipDark: React.ForwardRefExoticComponent<Omit<TooltipProps, "variant"> & React.RefAttributes<HTMLDivElement>>;
13
+ export { Tooltip };
14
+ //# sourceMappingURL=Tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../src/components/Tooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;IAC9C,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,QAAA,MAAM,OAAO,qFA8IZ,CAAA;AAID,eAAO,MAAM,YAAY,sGAIxB,CAAA;AAGD,eAAO,MAAM,WAAW,sGAIvB,CAAA;AAGD,OAAO,EAAE,OAAO,EAAE,CAAA"}
@@ -0,0 +1,102 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "../lib/utils";
5
+ const Tooltip = React.forwardRef(({ className, content, children, position = "top", variant = "default", delay = 300, disabled = false, ...props }, ref) => {
6
+ const [isVisible, setIsVisible] = React.useState(false);
7
+ const [coords, setCoords] = React.useState({ x: 0, y: 0 });
8
+ const timeoutRef = React.useRef(undefined);
9
+ const tooltipRef = React.useRef(null);
10
+ const showTooltip = (e) => {
11
+ if (disabled)
12
+ return;
13
+ const rect = e.currentTarget.getBoundingClientRect();
14
+ const tooltipRect = tooltipRef.current?.getBoundingClientRect();
15
+ let x = 0;
16
+ let y = 0;
17
+ switch (position) {
18
+ case "top":
19
+ x = rect.left + rect.width / 2;
20
+ y = rect.top - 8; // 8px 간격
21
+ break;
22
+ case "bottom":
23
+ x = rect.left + rect.width / 2;
24
+ y = rect.bottom + 8; // 8px 간격
25
+ break;
26
+ case "left":
27
+ x = rect.left - 8; // 8px 간격
28
+ y = rect.top + rect.height / 2;
29
+ break;
30
+ case "right":
31
+ x = rect.right + 8; // 8px 간격
32
+ y = rect.top + rect.height / 2;
33
+ break;
34
+ }
35
+ setCoords({ x, y });
36
+ timeoutRef.current = setTimeout(() => {
37
+ setIsVisible(true);
38
+ }, delay);
39
+ };
40
+ const hideTooltip = () => {
41
+ if (timeoutRef.current) {
42
+ clearTimeout(timeoutRef.current);
43
+ }
44
+ setIsVisible(false);
45
+ };
46
+ React.useEffect(() => {
47
+ return () => {
48
+ if (timeoutRef.current) {
49
+ clearTimeout(timeoutRef.current);
50
+ }
51
+ };
52
+ }, []);
53
+ const getVariantClasses = () => {
54
+ switch (variant) {
55
+ case "light":
56
+ return "bg-white text-gray-900 border border-gray-200 shadow-lg";
57
+ case "dark":
58
+ return "bg-gray-900 text-white shadow-lg";
59
+ default:
60
+ return "bg-gray-800 text-white shadow-lg";
61
+ }
62
+ };
63
+ const getPositionClasses = () => {
64
+ switch (position) {
65
+ case "top":
66
+ return "bottom-full left-1/2 -translate-x-1/2 mb-2"; // 8px 간격
67
+ case "bottom":
68
+ return "top-full left-1/2 -translate-x-1/2 mt-2"; // 8px 간격
69
+ case "left":
70
+ return "right-full top-1/2 -translate-y-1/2 mr-2"; // 8px 간격
71
+ case "right":
72
+ return "left-full top-1/2 -translate-y-1/2 ml-2"; // 8px 간격
73
+ default:
74
+ return "bottom-full left-1/2 -translate-x-1/2 mb-2";
75
+ }
76
+ };
77
+ const getArrowClasses = () => {
78
+ switch (position) {
79
+ case "top":
80
+ return "top-full left-1/2 -translate-x-1/2 border-t-gray-800 dark:border-t-gray-800";
81
+ case "bottom":
82
+ return "bottom-full left-1/2 -translate-x-1/2 border-b-gray-800 dark:border-b-gray-800";
83
+ case "left":
84
+ return "left-full top-1/2 -translate-y-1/2 border-l-gray-800 dark:border-l-gray-800";
85
+ case "right":
86
+ return "right-full top-1/2 -translate-y-1/2 border-r-gray-800 dark:border-r-gray-800";
87
+ default:
88
+ return "top-full left-1/2 -translate-x-1/2 border-t-gray-800 dark:border-t-gray-800";
89
+ }
90
+ };
91
+ return (_jsxs("div", { ref: ref, className: cn("relative inline-block", className), onMouseEnter: showTooltip, onMouseLeave: hideTooltip, ...props, children: [children, isVisible && (_jsxs("div", { ref: tooltipRef, className: cn("absolute z-50 px-3 py-2 text-sm rounded-lg whitespace-nowrap pointer-events-none", // 12px, 8px 패딩
92
+ getVariantClasses(), getPositionClasses()), style: {
93
+ transform: `translate(${coords.x}px, ${coords.y}px)`
94
+ }, children: [content, _jsx("div", { className: cn("absolute w-0 h-0 border-4 border-transparent", getArrowClasses()) })] }))] }));
95
+ });
96
+ Tooltip.displayName = "Tooltip";
97
+ // 편의 컴포넌트들
98
+ export const TooltipLight = React.forwardRef(({ className, ...props }, ref) => (_jsx(Tooltip, { ref: ref, variant: "light", className: className, ...props })));
99
+ TooltipLight.displayName = "TooltipLight";
100
+ export const TooltipDark = React.forwardRef(({ className, ...props }, ref) => (_jsx(Tooltip, { ref: ref, variant: "dark", className: className, ...props })));
101
+ TooltipDark.displayName = "TooltipDark";
102
+ export { Tooltip };
@@ -0,0 +1,50 @@
1
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from './components/Accordion';
2
+ export { Alert, AlertSuccess, AlertWarning, AlertError, AlertInfo } from './components/Alert';
3
+ export { Avatar, AvatarImage, AvatarFallback } from './components/Avatar';
4
+ export { Badge } from './components/Badge';
5
+ export { BottomSheet } from './components/BottomSheet';
6
+ export { Breadcrumb } from './components/Breadcrumb';
7
+ export { Button } from './components/Button';
8
+ export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } from './components/Card';
9
+ export { ChatMessage } from './components/ChatMessage';
10
+ export { Checkbox } from './components/Checkbox';
11
+ export { ConfirmModal } from './components/ConfirmModal';
12
+ export { Container } from './components/Container';
13
+ export { Divider } from './components/Divider';
14
+ export { Dropdown, DropdownItem, DropdownSeparator, DropdownLabel, DropdownMenu, DropdownGroup } from './components/Dropdown';
15
+ export { Drawer } from './components/Drawer';
16
+ export { Menu, MenuItem, MenuSeparator, MenuLabel, MenuHorizontal, MenuVertical, MenuCompact } from './components/Menu';
17
+ export { ContextMenu, ContextMenuItem, ContextMenuSeparator, ContextMenuLabel, ContextMenuGroup } from './components/ContextMenu';
18
+ export { Command, CommandInput, CommandList, CommandItem, CommandGroup, CommandSeparator, CommandEmpty, CommandDialog } from './components/Command';
19
+ export { EmotionAnalysis } from './components/EmotionAnalysis';
20
+ export { EmotionButton } from './components/EmotionButton';
21
+ export { EmotionMeter } from './components/EmotionMeter';
22
+ export { EmotionSelector } from './components/EmotionSelector';
23
+ export { Grid } from './components/Grid';
24
+ export { Icon } from './components/Icon';
25
+ export { iconCategories, emotionIcons, statusIcons } from './lib/icons';
26
+ export { Input } from './components/Input';
27
+ export { LanguageToggle } from './components/LanguageToggle';
28
+ export { LoadingSpinner } from './components/LoadingSpinner';
29
+ export { Modal } from './components/Modal';
30
+ export { PageTransition } from './components/PageTransition';
31
+ export { Progress, ProgressSuccess, ProgressWarning, ProgressError, ProgressInfo, ProgressCard, ProgressGroup } from './components/Progress';
32
+ export { Pagination, PaginationOutlined, PaginationMinimal, PaginationWithInfo } from './components/Pagination';
33
+ export { Popover, PopoverTrigger, PopoverContent } from './components/Popover';
34
+ export { Radio } from './components/Radio';
35
+ export { ScrollArea } from './components/ScrollArea';
36
+ export { ScrollIndicator } from './components/ScrollIndicator';
37
+ export { ScrollProgress } from './components/ScrollProgress';
38
+ export { ScrollToTop } from './components/ScrollToTop';
39
+ export { Select, SelectOption } from './components/Select';
40
+ export { Skeleton, SkeletonText, SkeletonCircle, SkeletonRectangle, SkeletonRounded, SkeletonCard, SkeletonAvatar, SkeletonList, SkeletonTable } from './components/Skeleton';
41
+ export { Stack } from './components/Stack';
42
+ export { Switch } from './components/Switch';
43
+ export { Tabs, TabsList, TabsTrigger, TabsContent, TabsPills, TabsUnderline, TabsCards } from './components/Tabs';
44
+ export { Textarea } from './components/Textarea';
45
+ export { ThemeProvider } from './components/ThemeProvider';
46
+ export { ThemeToggle } from './components/ThemeToggle';
47
+ export { Tooltip, TooltipLight, TooltipDark } from './components/Tooltip';
48
+ export { ToastProvider, useToast } from './components/Toast';
49
+ export type { Toast } from './components/Toast';
50
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,49 @@
1
+ // UI Components
2
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from './components/Accordion';
3
+ export { Alert, AlertSuccess, AlertWarning, AlertError, AlertInfo } from './components/Alert';
4
+ export { Avatar, AvatarImage, AvatarFallback } from './components/Avatar';
5
+ export { Badge } from './components/Badge';
6
+ export { BottomSheet } from './components/BottomSheet';
7
+ export { Breadcrumb } from './components/Breadcrumb';
8
+ export { Button } from './components/Button';
9
+ export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } from './components/Card';
10
+ export { ChatMessage } from './components/ChatMessage';
11
+ export { Checkbox } from './components/Checkbox';
12
+ export { ConfirmModal } from './components/ConfirmModal';
13
+ export { Container } from './components/Container';
14
+ export { Divider } from './components/Divider';
15
+ export { Dropdown, DropdownItem, DropdownSeparator, DropdownLabel, DropdownMenu, DropdownGroup } from './components/Dropdown';
16
+ export { Drawer } from './components/Drawer';
17
+ export { Menu, MenuItem, MenuSeparator, MenuLabel, MenuHorizontal, MenuVertical, MenuCompact } from './components/Menu';
18
+ export { ContextMenu, ContextMenuItem, ContextMenuSeparator, ContextMenuLabel, ContextMenuGroup } from './components/ContextMenu';
19
+ export { Command, CommandInput, CommandList, CommandItem, CommandGroup, CommandSeparator, CommandEmpty, CommandDialog } from './components/Command';
20
+ export { EmotionAnalysis } from './components/EmotionAnalysis';
21
+ export { EmotionButton } from './components/EmotionButton';
22
+ export { EmotionMeter } from './components/EmotionMeter';
23
+ export { EmotionSelector } from './components/EmotionSelector';
24
+ export { Grid } from './components/Grid';
25
+ export { Icon } from './components/Icon';
26
+ export { iconCategories, emotionIcons, statusIcons } from './lib/icons';
27
+ export { Input } from './components/Input';
28
+ export { LanguageToggle } from './components/LanguageToggle';
29
+ export { LoadingSpinner } from './components/LoadingSpinner';
30
+ export { Modal } from './components/Modal';
31
+ export { PageTransition } from './components/PageTransition';
32
+ export { Progress, ProgressSuccess, ProgressWarning, ProgressError, ProgressInfo, ProgressCard, ProgressGroup } from './components/Progress';
33
+ export { Pagination, PaginationOutlined, PaginationMinimal, PaginationWithInfo } from './components/Pagination';
34
+ export { Popover, PopoverTrigger, PopoverContent } from './components/Popover';
35
+ export { Radio } from './components/Radio';
36
+ export { ScrollArea } from './components/ScrollArea';
37
+ export { ScrollIndicator } from './components/ScrollIndicator';
38
+ export { ScrollProgress } from './components/ScrollProgress';
39
+ export { ScrollToTop } from './components/ScrollToTop';
40
+ export { Select, SelectOption } from './components/Select';
41
+ export { Skeleton, SkeletonText, SkeletonCircle, SkeletonRectangle, SkeletonRounded, SkeletonCard, SkeletonAvatar, SkeletonList, SkeletonTable } from './components/Skeleton';
42
+ export { Stack } from './components/Stack';
43
+ export { Switch } from './components/Switch';
44
+ export { Tabs, TabsList, TabsTrigger, TabsContent, TabsPills, TabsUnderline, TabsCards } from './components/Tabs';
45
+ export { Textarea } from './components/Textarea';
46
+ export { ThemeProvider } from './components/ThemeProvider';
47
+ export { ThemeToggle } from './components/ThemeToggle';
48
+ export { Tooltip, TooltipLight, TooltipDark } from './components/Tooltip';
49
+ export { ToastProvider, useToast } from './components/Toast';
@@ -0,0 +1,43 @@
1
+ import { LucideIcon } from 'lucide-react';
2
+ export declare const icons: Record<string, LucideIcon>;
3
+ export type IconName = keyof typeof icons;
4
+ export declare const iconCategories: {
5
+ readonly navigation: readonly ["home", "menu", "close", "search", "settings", "user", "bell", "map", "mapPin", "navigation", "compass", "globe", "flag", "sidebar"];
6
+ readonly actions: readonly ["edit", "delete", "add", "remove", "check", "share", "download", "upload", "save", "undo", "redo", "copy", "scissors", "mousePointer", "toggleLeft"];
7
+ readonly communication: readonly ["message", "phone", "mail", "send", "reply", "forward", "messageSquare", "phoneCall", "mailOpen"];
8
+ readonly media: readonly ["play", "pause", "skipBack", "skipForward", "volume", "mute", "music", "video", "image", "camera", "mic", "headphones"];
9
+ readonly emotions: readonly ["smile", "frown", "meh", "laugh", "angry"];
10
+ readonly feedback: readonly ["thumbsUp", "thumbsDown", "success", "error", "warning", "info", "heart", "star", "bookmark"];
11
+ readonly data: readonly ["chart", "pieChart", "trendingUp", "trendingDown", "activity", "database", "barChart", "lineChart"];
12
+ readonly status: readonly ["loader", "refresh", "lock", "unlock", "eye", "eyeOff", "shield", "battery", "wifi"];
13
+ readonly weather: readonly ["sun", "moon", "cloud", "rain", "cloudSnow", "cloudLightning", "wind", "thermometer"];
14
+ readonly finance: readonly ["creditCard", "dollarSign", "euro", "poundSterling", "bitcoin", "shoppingCart", "wallet", "calculator"];
15
+ readonly business: readonly ["briefcase", "building", "users", "userPlus", "userCheck", "userCog"];
16
+ readonly files: readonly ["fileText", "fileImage", "fileVideo", "folder", "fileCheck", "bookOpen"];
17
+ readonly social: readonly ["facebook", "twitter", "instagram", "linkedin", "youtube", "github", "slack"];
18
+ readonly mobile: readonly ["smartphone", "tablet", "monitor", "laptop", "bluetooth", "signal", "fullscreen"];
19
+ readonly editing: readonly ["type", "bold", "italic", "underline", "alignLeft", "alignCenter", "list", "listOrdered", "palette", "layers", "square"];
20
+ readonly time: readonly ["clock", "timer", "calendar", "calendarDays", "calendarCheck", "calendarClock"];
21
+ };
22
+ export declare const emotionIcons: {
23
+ readonly happy: "smile";
24
+ readonly sad: "frown";
25
+ readonly neutral: "meh";
26
+ readonly excited: "laugh";
27
+ readonly angry: "angry";
28
+ readonly love: "heart";
29
+ readonly like: "thumbsUp";
30
+ readonly dislike: "thumbsDown";
31
+ };
32
+ export declare const statusIcons: {
33
+ readonly loading: "loader";
34
+ readonly success: "success";
35
+ readonly error: "error";
36
+ readonly warning: "warning";
37
+ readonly info: "info";
38
+ readonly locked: "lock";
39
+ readonly unlocked: "unlock";
40
+ readonly visible: "eye";
41
+ readonly hidden: "eyeOff";
42
+ };
43
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/lib/icons.ts"],"names":[],"mappings":"AAAA,OAAO,EA6RL,UAAU,EAYX,MAAM,cAAc,CAAA;AAGrB,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAwQ5C,CAAA;AAGD,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,KAAK,CAAA;AAGzC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;CAiBjB,CAAA;AAGV,eAAO,MAAM,YAAY;;;;;;;;;CASf,CAAA;AAGV,eAAO,MAAM,WAAW;;;;;;;;;;CAUd,CAAA"}