@hua-labs/ui 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +891 -213
- package/dist/ComponentLayout-BxCenSAm.d.mts +73 -0
- package/dist/advanced/dashboard.d.ts +7 -0
- package/dist/advanced/dashboard.d.ts.map +1 -0
- package/dist/advanced/motion.d.ts +2 -0
- package/dist/advanced/motion.d.ts.map +1 -0
- package/dist/advanced-dashboard.d.mts +4 -0
- package/dist/advanced-dashboard.js +2 -0
- package/dist/advanced-dashboard.js.map +1 -0
- package/dist/advanced-dashboard.mjs +2 -0
- package/dist/advanced-dashboard.mjs.map +1 -0
- package/dist/advanced-motion.d.mts +93 -0
- package/dist/advanced-motion.js +2 -0
- package/dist/advanced-motion.js.map +1 -0
- package/dist/advanced-motion.mjs +2 -0
- package/dist/advanced-motion.mjs.map +1 -0
- package/dist/advanced.d.mts +734 -0
- package/dist/advanced.d.ts +17 -0
- package/dist/advanced.d.ts.map +1 -0
- package/dist/advanced.js +2 -0
- package/dist/advanced.js.map +1 -0
- package/dist/advanced.mjs +2 -0
- package/dist/advanced.mjs.map +1 -0
- package/dist/chunk-627HOIRV.mjs +2 -0
- package/dist/chunk-627HOIRV.mjs.map +1 -0
- package/dist/chunk-ACEKLG37.mjs +2 -0
- package/dist/chunk-ACEKLG37.mjs.map +1 -0
- package/dist/chunk-E5PN4LUS.mjs +2 -0
- package/dist/chunk-E5PN4LUS.mjs.map +1 -0
- package/dist/chunk-KHEJZ3U4.mjs +2 -0
- package/dist/chunk-KHEJZ3U4.mjs.map +1 -0
- package/dist/chunk-MXGXBG63.mjs +2 -0
- package/dist/chunk-MXGXBG63.mjs.map +1 -0
- package/dist/chunk-QXBMXCML.mjs +2 -0
- package/dist/chunk-QXBMXCML.mjs.map +1 -0
- package/dist/chunk-R5KCFRYV.mjs +2 -0
- package/dist/chunk-R5KCFRYV.mjs.map +1 -0
- package/dist/chunk-UGSYQDR4.mjs +2 -0
- package/dist/chunk-UGSYQDR4.mjs.map +1 -0
- package/dist/chunk-UUHAXGMO.mjs +2 -0
- package/dist/chunk-UUHAXGMO.mjs.map +1 -0
- package/dist/chunk-ZFS4B5QT.mjs +2 -0
- package/dist/chunk-ZFS4B5QT.mjs.map +1 -0
- package/dist/components/Accordion.d.ts +109 -1
- package/dist/components/Accordion.d.ts.map +1 -1
- package/dist/components/Action.d.ts +68 -0
- package/dist/components/Action.d.ts.map +1 -0
- package/dist/components/ActionToolbar.d.ts +65 -0
- package/dist/components/ActionToolbar.d.ts.map +1 -0
- package/dist/components/Alert.d.ts +49 -0
- package/dist/components/Alert.d.ts.map +1 -1
- package/dist/components/Autocomplete.d.ts +88 -0
- package/dist/components/Autocomplete.d.ts.map +1 -0
- package/dist/components/Avatar.d.ts +71 -1
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Badge.d.ts +32 -2
- package/dist/components/Badge.d.ts.map +1 -1
- package/dist/components/Bookmark.d.ts +49 -0
- package/dist/components/Bookmark.d.ts.map +1 -0
- package/dist/components/BottomSheet.d.ts +91 -1
- package/dist/components/BottomSheet.d.ts.map +1 -1
- package/dist/components/Breadcrumb.d.ts +73 -14
- package/dist/components/Breadcrumb.d.ts.map +1 -1
- package/dist/components/Button.d.ts +82 -7
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Card.d.ts +122 -5
- package/dist/components/Card.d.ts.map +1 -1
- package/dist/components/ChatMessage.d.ts +67 -1
- package/dist/components/ChatMessage.d.ts.map +1 -1
- package/dist/components/Checkbox.d.ts +48 -2
- package/dist/components/Checkbox.d.ts.map +1 -1
- package/dist/components/Command.d.ts +82 -1
- package/dist/components/Command.d.ts.map +1 -1
- package/dist/components/ComponentLayout.d.ts +72 -0
- package/dist/components/ComponentLayout.d.ts.map +1 -0
- package/dist/components/ConfirmModal.d.ts +66 -1
- package/dist/components/ConfirmModal.d.ts.map +1 -1
- package/dist/components/Container.d.ts +39 -0
- package/dist/components/Container.d.ts.map +1 -1
- package/dist/components/ContextMenu.d.ts +51 -1
- package/dist/components/ContextMenu.d.ts.map +1 -1
- package/dist/components/DatePicker.d.ts +62 -0
- package/dist/components/DatePicker.d.ts.map +1 -0
- package/dist/components/Divider.d.ts +13 -3
- package/dist/components/Divider.d.ts.map +1 -1
- package/dist/components/Drawer.d.ts +103 -1
- package/dist/components/Drawer.d.ts.map +1 -1
- package/dist/components/Dropdown.d.ts +51 -1
- package/dist/components/Dropdown.d.ts.map +1 -1
- package/dist/components/EmotionAnalysis.d.ts +59 -1
- package/dist/components/EmotionAnalysis.d.ts.map +1 -1
- package/dist/components/EmotionButton.d.ts +35 -1
- package/dist/components/EmotionButton.d.ts.map +1 -1
- package/dist/components/EmotionMeter.d.ts +38 -2
- package/dist/components/EmotionMeter.d.ts.map +1 -1
- package/dist/components/EmotionSelector.d.ts +51 -1
- package/dist/components/EmotionSelector.d.ts.map +1 -1
- package/dist/components/FeatureCard.d.ts +61 -0
- package/dist/components/FeatureCard.d.ts.map +1 -0
- package/dist/components/Form.d.ts +114 -0
- package/dist/components/Form.d.ts.map +1 -0
- package/dist/components/Grid.d.ts +42 -1
- package/dist/components/Grid.d.ts.map +1 -1
- package/dist/components/HeroSection.d.ts +77 -0
- package/dist/components/HeroSection.d.ts.map +1 -0
- package/dist/components/Icon/Icon.d.ts +159 -0
- package/dist/components/Icon/Icon.d.ts.map +1 -0
- package/dist/components/Icon/IconProvider.d.ts +94 -0
- package/dist/components/Icon/IconProvider.d.ts.map +1 -0
- package/dist/components/Icon/icon-store.d.ts +21 -0
- package/dist/components/Icon/icon-store.d.ts.map +1 -0
- package/dist/components/Icon/index.d.ts +10 -0
- package/dist/components/Icon/index.d.ts.map +1 -0
- package/dist/components/InfoCard.d.ts +48 -0
- package/dist/components/InfoCard.d.ts.map +1 -0
- package/dist/components/Input.d.ts +40 -8
- package/dist/components/Input.d.ts.map +1 -1
- package/dist/components/Label.d.ts +50 -0
- package/dist/components/Label.d.ts.map +1 -0
- package/dist/components/LanguageToggle.d.ts +41 -1
- package/dist/components/LanguageToggle.d.ts.map +1 -1
- package/dist/components/Link.d.ts +52 -0
- package/dist/components/Link.d.ts.map +1 -0
- package/dist/components/LoadingSpinner.d.ts +44 -5
- package/dist/components/LoadingSpinner.d.ts.map +1 -1
- package/dist/components/Menu.d.ts +92 -1
- package/dist/components/Menu.d.ts.map +1 -1
- package/dist/components/Modal.d.ts +67 -5
- package/dist/components/Modal.d.ts.map +1 -1
- package/dist/components/Navigation.d.ts +72 -0
- package/dist/components/Navigation.d.ts.map +1 -0
- package/dist/components/PageNavigation.d.ts +48 -0
- package/dist/components/PageNavigation.d.ts.map +1 -0
- package/dist/components/PageTransition.d.ts +44 -1
- package/dist/components/PageTransition.d.ts.map +1 -1
- package/dist/components/Pagination.d.ts +52 -1
- package/dist/components/Pagination.d.ts.map +1 -1
- package/dist/components/Panel.d.ts +99 -0
- package/dist/components/Panel.d.ts.map +1 -0
- package/dist/components/Popover.d.ts +46 -1
- package/dist/components/Popover.d.ts.map +1 -1
- package/dist/components/Progress.d.ts +52 -3
- package/dist/components/Progress.d.ts.map +1 -1
- package/dist/components/Radio.d.ts +44 -2
- package/dist/components/Radio.d.ts.map +1 -1
- package/dist/components/ScrollArea.d.ts +53 -1
- package/dist/components/ScrollArea.d.ts.map +1 -1
- package/dist/components/ScrollIndicator.d.ts +43 -1
- package/dist/components/ScrollIndicator.d.ts.map +1 -1
- package/dist/components/ScrollProgress.d.ts +37 -0
- package/dist/components/ScrollProgress.d.ts.map +1 -1
- package/dist/components/ScrollToTop.d.ts +48 -11
- package/dist/components/ScrollToTop.d.ts.map +1 -1
- package/dist/components/SectionHeader.d.ts +42 -0
- package/dist/components/SectionHeader.d.ts.map +1 -0
- package/dist/components/Select.d.ts +59 -2
- package/dist/components/Select.d.ts.map +1 -1
- package/dist/components/Skeleton.d.ts +44 -1
- package/dist/components/Skeleton.d.ts.map +1 -1
- package/dist/components/Slider.d.ts +75 -0
- package/dist/components/Slider.d.ts.map +1 -0
- package/dist/components/Stack.d.ts +42 -1
- package/dist/components/Stack.d.ts.map +1 -1
- package/dist/components/StatsPanel.d.ts +72 -0
- package/dist/components/StatsPanel.d.ts.map +1 -0
- package/dist/components/Switch.d.ts +48 -2
- package/dist/components/Switch.d.ts.map +1 -1
- package/dist/components/Table.d.ts +206 -0
- package/dist/components/Table.d.ts.map +1 -0
- package/dist/components/Tabs.d.ts +123 -10
- package/dist/components/Tabs.d.ts.map +1 -1
- package/dist/components/Textarea.d.ts +48 -2
- package/dist/components/Textarea.d.ts.map +1 -1
- package/dist/components/ThemeProvider.d.ts +67 -2
- package/dist/components/ThemeProvider.d.ts.map +1 -1
- package/dist/components/ThemeToggle.d.ts +44 -0
- package/dist/components/ThemeToggle.d.ts.map +1 -1
- package/dist/components/Toast.d.ts +75 -1
- package/dist/components/Toast.d.ts.map +1 -1
- package/dist/components/Toggle.d.ts +62 -0
- package/dist/components/Toggle.d.ts.map +1 -0
- package/dist/components/Tooltip.d.ts +48 -1
- package/dist/components/Tooltip.d.ts.map +1 -1
- package/dist/components/Upload.d.ts +87 -0
- package/dist/components/Upload.d.ts.map +1 -0
- package/dist/components/advanced/AdvancedPageTransition.d.ts +25 -0
- package/dist/components/advanced/AdvancedPageTransition.d.ts.map +1 -0
- package/dist/components/advanced/index.d.ts +4 -0
- package/dist/components/advanced/index.d.ts.map +1 -0
- package/dist/components/advanced/usePageTransition.d.ts +33 -0
- package/dist/components/advanced/usePageTransition.d.ts.map +1 -0
- package/dist/components/advanced/usePageTransitionManager.d.ts +44 -0
- package/dist/components/advanced/usePageTransitionManager.d.ts.map +1 -0
- package/dist/components/dashboard/ActivityFeed.d.ts +87 -0
- package/dist/components/dashboard/ActivityFeed.d.ts.map +1 -0
- package/dist/components/dashboard/BarChart.d.ts +82 -0
- package/dist/components/dashboard/BarChart.d.ts.map +1 -0
- package/dist/components/dashboard/DashboardGrid.d.ts +44 -0
- package/dist/components/dashboard/DashboardGrid.d.ts.map +1 -0
- package/dist/components/dashboard/DashboardSidebar.d.ts +105 -0
- package/dist/components/dashboard/DashboardSidebar.d.ts.map +1 -0
- package/dist/components/dashboard/DashboardToolbar.d.ts +120 -0
- package/dist/components/dashboard/DashboardToolbar.d.ts.map +1 -0
- package/dist/components/dashboard/EmptyState.d.ts +61 -0
- package/dist/components/dashboard/EmptyState.d.ts.map +1 -0
- package/dist/components/dashboard/MembershipBadge.d.ts +45 -0
- package/dist/components/dashboard/MembershipBadge.d.ts.map +1 -0
- package/dist/components/dashboard/MerchantList.d.ts +98 -0
- package/dist/components/dashboard/MerchantList.d.ts.map +1 -0
- package/dist/components/dashboard/MetricCard.d.ts +75 -0
- package/dist/components/dashboard/MetricCard.d.ts.map +1 -0
- package/dist/components/dashboard/MiniBarChart.d.ts +60 -0
- package/dist/components/dashboard/MiniBarChart.d.ts.map +1 -0
- package/dist/components/dashboard/NotificationCard.d.ts +89 -0
- package/dist/components/dashboard/NotificationCard.d.ts.map +1 -0
- package/dist/components/dashboard/ProfileCard.d.ts +82 -0
- package/dist/components/dashboard/ProfileCard.d.ts.map +1 -0
- package/dist/components/dashboard/ProgressCard.d.ts +71 -0
- package/dist/components/dashboard/ProgressCard.d.ts.map +1 -0
- package/dist/components/dashboard/QuickActionCard.d.ts +63 -0
- package/dist/components/dashboard/QuickActionCard.d.ts.map +1 -0
- package/dist/components/dashboard/RoutingBreakdownCard.d.ts +88 -0
- package/dist/components/dashboard/RoutingBreakdownCard.d.ts.map +1 -0
- package/dist/components/dashboard/SettlementTimeline.d.ts +90 -0
- package/dist/components/dashboard/SettlementTimeline.d.ts.map +1 -0
- package/dist/components/dashboard/StatCard.d.ts +70 -0
- package/dist/components/dashboard/StatCard.d.ts.map +1 -0
- package/dist/components/dashboard/SummaryCard.d.ts +73 -0
- package/dist/components/dashboard/SummaryCard.d.ts.map +1 -0
- package/dist/components/dashboard/TransactionDetailDrawer.d.ts +183 -0
- package/dist/components/dashboard/TransactionDetailDrawer.d.ts.map +1 -0
- package/dist/components/dashboard/TransactionsTable.d.ts +137 -0
- package/dist/components/dashboard/TransactionsTable.d.ts.map +1 -0
- package/dist/components/dashboard/TrendChart.d.ts +75 -0
- package/dist/components/dashboard/TrendChart.d.ts.map +1 -0
- package/dist/components/dashboard/index.d.ts +41 -0
- package/dist/components/dashboard/index.d.ts.map +1 -0
- package/dist/components/scrollbar/scrollbar.d.ts +12 -0
- package/dist/components/scrollbar/scrollbar.d.ts.map +1 -0
- package/dist/dashboard-QMssHf5j.d.mts +1801 -0
- package/dist/feedback.d.mts +103 -0
- package/dist/feedback.d.ts +21 -0
- package/dist/feedback.d.ts.map +1 -0
- package/dist/feedback.js +2 -0
- package/dist/feedback.js.map +1 -0
- package/dist/feedback.mjs +2 -0
- package/dist/feedback.mjs.map +1 -0
- package/dist/form.d.mts +803 -0
- package/dist/form.d.ts +42 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +2 -0
- package/dist/form.js.map +1 -0
- package/dist/form.mjs +2 -0
- package/dist/form.mjs.map +1 -0
- package/dist/hooks/useScrollToggle.d.ts +12 -0
- package/dist/hooks/useScrollToggle.d.ts.map +1 -0
- package/dist/icons-DoSGIez_.d.mts +135 -0
- package/dist/index.d.mts +3770 -0
- package/dist/index.d.ts +76 -38
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -49
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +37 -0
- package/dist/index.mjs.map +1 -0
- package/dist/lib/icon-aliases.d.ts +24 -0
- package/dist/lib/icon-aliases.d.ts.map +1 -0
- package/dist/lib/icon-names.d.ts +47 -0
- package/dist/lib/icon-names.d.ts.map +1 -0
- package/dist/lib/icon-providers.d.ts +559 -0
- package/dist/lib/icon-providers.d.ts.map +1 -0
- package/dist/lib/icons.d.ts +113 -24
- package/dist/lib/icons.d.ts.map +1 -1
- package/dist/lib/phosphor-icons.d.ts +6 -0
- package/dist/lib/phosphor-icons.d.ts.map +1 -0
- package/dist/lib/styles/colors.d.ts +131 -0
- package/dist/lib/styles/colors.d.ts.map +1 -0
- package/dist/lib/styles/index.d.ts +8 -0
- package/dist/lib/styles/index.d.ts.map +1 -0
- package/dist/lib/styles/utils.d.ts +87 -0
- package/dist/lib/styles/utils.d.ts.map +1 -0
- package/dist/lib/styles/variants.d.ts +79 -0
- package/dist/lib/styles/variants.d.ts.map +1 -0
- package/dist/lib/types/common.d.ts +80 -0
- package/dist/lib/types/common.d.ts.map +1 -0
- package/dist/lib/types/index.d.ts +6 -0
- package/dist/lib/types/index.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +73 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/navigation.d.mts +105 -0
- package/dist/navigation.d.ts +22 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +2 -0
- package/dist/navigation.js.map +1 -0
- package/dist/navigation.mjs +2 -0
- package/dist/navigation.mjs.map +1 -0
- package/package.json +85 -19
- package/src/styles/toast.css +23 -0
- package/dist/components/Accordion.js +0 -84
- package/dist/components/Alert.js +0 -61
- package/dist/components/Avatar.js +0 -18
- package/dist/components/Badge.js +0 -15
- package/dist/components/BottomSheet.js +0 -96
- package/dist/components/Breadcrumb.js +0 -47
- package/dist/components/Button.js +0 -23
- package/dist/components/Card.js +0 -18
- package/dist/components/ChatMessage.js +0 -59
- package/dist/components/Checkbox.js +0 -30
- package/dist/components/Command.js +0 -119
- package/dist/components/ConfirmModal.js +0 -53
- package/dist/components/Container.js +0 -23
- package/dist/components/ContextMenu.js +0 -110
- package/dist/components/Divider.js +0 -39
- package/dist/components/Drawer.js +0 -79
- package/dist/components/Dropdown.js +0 -174
- package/dist/components/EmotionAnalysis.js +0 -40
- package/dist/components/EmotionButton.js +0 -16
- package/dist/components/EmotionMeter.js +0 -21
- package/dist/components/EmotionSelector.js +0 -46
- package/dist/components/Grid.js +0 -44
- package/dist/components/Icon.d.ts +0 -26
- package/dist/components/Icon.d.ts.map +0 -1
- package/dist/components/Icon.js +0 -48
- package/dist/components/Input.js +0 -25
- package/dist/components/LanguageToggle.js +0 -61
- package/dist/components/LoadingSpinner.js +0 -37
- package/dist/components/Menu.js +0 -122
- package/dist/components/Modal.js +0 -62
- package/dist/components/PageTransition.js +0 -39
- package/dist/components/Pagination.js +0 -87
- package/dist/components/Popover.js +0 -159
- package/dist/components/Progress.js +0 -51
- package/dist/components/Radio.js +0 -29
- package/dist/components/ScrollArea.js +0 -42
- package/dist/components/ScrollIndicator.js +0 -60
- package/dist/components/ScrollProgress.js +0 -39
- package/dist/components/ScrollToTop.js +0 -46
- package/dist/components/Select.js +0 -29
- package/dist/components/Skeleton.js +0 -71
- package/dist/components/Stack.js +0 -34
- package/dist/components/Switch.js +0 -29
- package/dist/components/Tabs.js +0 -117
- package/dist/components/Textarea.js +0 -31
- package/dist/components/ThemeProvider.js +0 -76
- package/dist/components/ThemeToggle.js +0 -49
- package/dist/components/Toast.js +0 -138
- package/dist/components/Tooltip.js +0 -102
- package/dist/lib/icons.js +0 -321
- package/dist/lib/utils.js +0 -5
package/README.md
CHANGED
|
@@ -1,35 +1,24 @@
|
|
|
1
|
-
# @hua-labs/ui
|
|
1
|
+
# @hua-labs/ui
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
HUA Labs - Modern React UI Component Library
|
|
4
4
|
|
|
5
|
-
Beautiful, accessible, and customizable components for React applications.
|
|
5
|
+
Beautiful, accessible, and customizable components for React applications with TypeScript support.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
> **문서**: [아키텍처 문서](./docs/ARCHITECTURE.md) | [개발 가이드](./docs/DEVELOPMENT_GUIDE.md) | [패키지 구조](./docs/PACKAGE_STRUCTURE.md)
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
- **기본 UI**: Accordion, BottomSheet, Drawer, ConfirmModal, ScrollArea, Icon, Breadcrumb
|
|
11
|
-
- **테마**: ThemeProvider, ThemeToggle
|
|
12
|
-
- **스크롤**: ScrollToTop, ScrollIndicator, ScrollProgress
|
|
13
|
-
- **전환**: PageTransition
|
|
14
|
-
- **감정**: ChatMessage, EmotionAnalysis, EmotionSelector
|
|
9
|
+
## Features
|
|
15
10
|
|
|
16
|
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
11
|
+
- 70+ production-ready components
|
|
12
|
+
- Modular entry points for bundle optimization
|
|
13
|
+
- Full TypeScript support
|
|
14
|
+
- Dark mode support
|
|
15
|
+
- Accessible (ARIA attributes, keyboard navigation)
|
|
16
|
+
- Responsive design
|
|
17
|
+
- Tree-shaking friendly
|
|
18
|
+
- Zero external dependencies (except React)
|
|
19
|
+
- Tailwind CSS based styling
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
- ARIA 속성 지원
|
|
23
|
-
- 키보드 네비게이션
|
|
24
|
-
- 스크린 리더 호환
|
|
25
|
-
|
|
26
|
-
### 📱 **반응형 디자인**
|
|
27
|
-
- 모든 디바이스에서 완벽한 경험
|
|
28
|
-
- 모바일 우선 설계
|
|
29
|
-
|
|
30
|
-
## 🚀 시작하기
|
|
31
|
-
|
|
32
|
-
### 설치
|
|
21
|
+
## Installation
|
|
33
22
|
|
|
34
23
|
```bash
|
|
35
24
|
npm install @hua-labs/ui
|
|
@@ -39,288 +28,962 @@ yarn add @hua-labs/ui
|
|
|
39
28
|
pnpm add @hua-labs/ui
|
|
40
29
|
```
|
|
41
30
|
|
|
42
|
-
###
|
|
31
|
+
### Peer Dependencies
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Required
|
|
35
|
+
npm install react react-dom
|
|
36
|
+
|
|
37
|
+
# Optional (for Phosphor Icons support)
|
|
38
|
+
npm install @phosphor-icons/react
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 엔트리 포인트
|
|
42
|
+
|
|
43
|
+
HUA UI는 **Core**, **Form**, **Advanced** 엔트리로 나뉩니다. 필요한 컴포넌트만 선택적으로 import하여 번들 크기를 최적화할 수 있습니다.
|
|
44
|
+
|
|
45
|
+
| Entry | Path | 설명 |
|
|
46
|
+
|-------|------|------|
|
|
47
|
+
| Core | `@hua-labs/ui` | 버튼/레이아웃/데이터 표시 등 기본 컴포넌트와 유틸 (대부분의 일반적인 앱 개발 가능) |
|
|
48
|
+
| Form | `@hua-labs/ui/form` | 모든 폼 컴포넌트 (Input, Select, DatePicker, Upload, Autocomplete 등) |
|
|
49
|
+
| Navigation | `@hua-labs/ui/navigation` | 대규모 앱 구조에 필요한 네비게이션 (PageNavigation, PageTransition) |
|
|
50
|
+
| Feedback | `@hua-labs/ui/feedback` | 글로벌 상태 관리가 필요한 Toast (ToastProvider, useToast) |
|
|
51
|
+
| Advanced (all) | `@hua-labs/ui/advanced` | 대시보드 위젯 + 고급 모션 전체 |
|
|
52
|
+
| Dashboard widgets | `@hua-labs/ui/advanced/dashboard` | StatCard, TransactionsTable, TrendChart 등 데이터 위젯 |
|
|
53
|
+
| Motion/Experimental | `@hua-labs/ui/advanced/motion` | AdvancedPageTransition 등 모션/실험 기능 |
|
|
43
54
|
|
|
44
55
|
```tsx
|
|
45
|
-
|
|
56
|
+
// Core 컴포넌트 (가장 자주 사용되는 컴포넌트들)
|
|
57
|
+
import { Button, Card, Table, Badge, Alert, Modal, Drawer } from '@hua-labs/ui';
|
|
46
58
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
// Form 컴포넌트만 (번들 최적화)
|
|
60
|
+
import { Input, Select, DatePicker, Form } from '@hua-labs/ui/form';
|
|
61
|
+
|
|
62
|
+
// Navigation 컴포넌트 (대규모 앱에서만 필요)
|
|
63
|
+
import { PageNavigation, PageTransition } from '@hua-labs/ui/navigation';
|
|
64
|
+
|
|
65
|
+
// Feedback 컴포넌트 (Toast - 글로벌 상태 관리)
|
|
66
|
+
import { ToastProvider, useToast } from '@hua-labs/ui/feedback';
|
|
67
|
+
import '@hua-labs/ui/styles/toast.css';
|
|
68
|
+
|
|
69
|
+
// Advanced 전체
|
|
70
|
+
import { StatCard, DashboardSidebar } from '@hua-labs/ui/advanced';
|
|
71
|
+
|
|
72
|
+
// 필요한 영역만 선택적으로
|
|
73
|
+
import { TransactionsTable } from '@hua-labs/ui/advanced/dashboard';
|
|
74
|
+
import { AdvancedPageTransition } from '@hua-labs/ui/advanced/motion';
|
|
61
75
|
```
|
|
62
76
|
|
|
63
|
-
|
|
77
|
+
**참고**: 서브패키지 분리 분석 문서는 [`docs/SUBPACKAGE_ANALYSIS.md`](./docs/SUBPACKAGE_ANALYSIS.md)를 참고하세요.
|
|
78
|
+
|
|
79
|
+
## Bundle Optimization
|
|
64
80
|
|
|
65
|
-
|
|
81
|
+
HUA UI는 모듈 단위 번들링과 tree-shaking을 지원합니다. 필요한 컴포넌트만 선택적으로 import하여 번들 크기를 최적화할 수 있습니다.
|
|
82
|
+
|
|
83
|
+
### 번들 최적화 전략
|
|
84
|
+
|
|
85
|
+
- **Core**: 가장 자주 사용하는 80% 컴포넌트 포함 (대부분의 일반적인 앱 개발 가능)
|
|
86
|
+
- **Form / Navigation / Feedback**: 필요한 경우에만 선택적으로 import
|
|
87
|
+
- **Advanced / Dashboard / Motion**: 대규모 앱에서만 사용하는 특수 컴포넌트
|
|
88
|
+
|
|
89
|
+
### 사용 예시
|
|
90
|
+
|
|
91
|
+
#### Next.js (Turbopack)
|
|
66
92
|
|
|
67
93
|
```tsx
|
|
68
|
-
|
|
94
|
+
// 권장: 필요한 서브패키지만 import (tree-shaking 자동 적용)
|
|
95
|
+
import { Input, Select, DatePicker } from '@hua-labs/ui/form';
|
|
96
|
+
import { PageTransition } from '@hua-labs/ui/navigation';
|
|
97
|
+
import { ToastProvider, useToast } from '@hua-labs/ui/feedback';
|
|
69
98
|
|
|
70
|
-
|
|
71
|
-
<AccordionItem value="item-1">
|
|
72
|
-
<AccordionTrigger>첫 번째 항목</AccordionTrigger>
|
|
73
|
-
<AccordionContent>첫 번째 항목의 내용</AccordionContent>
|
|
74
|
-
</AccordionItem>
|
|
75
|
-
<AccordionItem value="item-2">
|
|
76
|
-
<AccordionTrigger>두 번째 항목</AccordionTrigger>
|
|
77
|
-
<AccordionContent>두 번째 항목의 내용</AccordionContent>
|
|
78
|
-
</AccordionItem>
|
|
79
|
-
</Accordion>
|
|
99
|
+
// Core 전체를 불러오지 않으므로 번들 크기 최적화
|
|
80
100
|
```
|
|
81
101
|
|
|
82
|
-
|
|
102
|
+
#### Vite / Webpack
|
|
83
103
|
|
|
84
104
|
```tsx
|
|
85
|
-
|
|
105
|
+
// 권장: 서브패키지 사용
|
|
106
|
+
import { Input } from '@hua-labs/ui/form';
|
|
107
|
+
import { PageTransition } from '@hua-labs/ui/navigation';
|
|
108
|
+
|
|
109
|
+
// 비권장: Core에서 모든 컴포넌트 import (번들 크기 증가)
|
|
110
|
+
import { Input, PageTransition, ToastProvider } from '@hua-labs/ui';
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Tree-shaking
|
|
114
|
+
|
|
115
|
+
모든 엔트리 포인트는 ESM 형식으로 제공되며, 최신 번들러(Next.js Turbopack, Vite, Webpack 5+)에서 tree-shaking이 자동으로 적용됩니다.
|
|
116
|
+
|
|
117
|
+
**최적화 팁**:
|
|
118
|
+
- 필요한 컴포넌트만 import
|
|
119
|
+
- 서브패키지 활용 (Form, Navigation, Feedback)
|
|
120
|
+
- Advanced 컴포넌트는 실제로 사용할 때만 import
|
|
121
|
+
|
|
122
|
+
**참고**: Core에서도 모든 컴포넌트를 import할 수 있습니다 (하위 호환성). 서브패키지는 번들 크기 최적화를 위한 선택사항입니다. Next.js + Turbopack 환경에서 tree-shaking이 자동 적용됩니다.
|
|
123
|
+
|
|
124
|
+
## Quick Start
|
|
125
|
+
|
|
126
|
+
```tsx
|
|
127
|
+
import { Button, Input, Card, ThemeProvider } from '@hua-labs/ui';
|
|
86
128
|
|
|
87
129
|
function App() {
|
|
88
130
|
return (
|
|
89
131
|
<ThemeProvider>
|
|
90
132
|
<div>
|
|
91
|
-
<
|
|
92
|
-
|
|
133
|
+
<Button>Click me</Button>
|
|
134
|
+
<Input placeholder="Enter text" />
|
|
135
|
+
<Card>
|
|
136
|
+
<CardHeader>
|
|
137
|
+
<CardTitle>Card Title</CardTitle>
|
|
138
|
+
</CardHeader>
|
|
139
|
+
<CardContent>
|
|
140
|
+
Card content
|
|
141
|
+
</CardContent>
|
|
142
|
+
</Card>
|
|
93
143
|
</div>
|
|
94
144
|
</ThemeProvider>
|
|
95
145
|
);
|
|
96
146
|
}
|
|
97
147
|
```
|
|
98
148
|
|
|
99
|
-
###
|
|
149
|
+
### CSS 스타일 import (Toast 컴포넌트 사용 시)
|
|
150
|
+
|
|
151
|
+
Toast 컴포넌트의 애니메이션을 사용하려면 CSS 파일을 import해야 합니다:
|
|
152
|
+
|
|
153
|
+
```css
|
|
154
|
+
/* globals.css 또는 메인 CSS 파일에 추가 */
|
|
155
|
+
@import '@hua-labs/ui/styles/toast.css';
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
또는 JavaScript/TypeScript에서:
|
|
100
159
|
|
|
101
160
|
```tsx
|
|
102
|
-
|
|
161
|
+
// app/layout.tsx 또는 _app.tsx
|
|
162
|
+
import '@hua-labs/ui/styles/toast.css';
|
|
163
|
+
```
|
|
103
164
|
|
|
104
|
-
|
|
105
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
165
|
+
## Core Components
|
|
106
166
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
167
|
+
### Basic UI
|
|
168
|
+
|
|
169
|
+
#### Button
|
|
170
|
+
|
|
171
|
+
```tsx
|
|
172
|
+
import { Button } from '@hua-labs/ui';
|
|
173
|
+
|
|
174
|
+
<Button>Default</Button>
|
|
175
|
+
<Button variant="outline">Outline</Button>
|
|
176
|
+
<Button variant="ghost">Ghost</Button>
|
|
177
|
+
<Button variant="destructive">Destructive</Button>
|
|
178
|
+
<Button variant="gradient">Gradient</Button>
|
|
179
|
+
<Button variant="neon">Neon</Button>
|
|
180
|
+
<Button variant="glass">Glass</Button>
|
|
181
|
+
<Button size="sm">Small</Button>
|
|
182
|
+
<Button size="md">Medium</Button>
|
|
183
|
+
<Button size="lg">Large</Button>
|
|
184
|
+
<Button loading>Loading</Button>
|
|
185
|
+
<Button disabled>Disabled</Button>
|
|
186
|
+
<Button fullWidth>Full Width</Button>
|
|
119
187
|
```
|
|
120
188
|
|
|
121
|
-
|
|
189
|
+
#### Action
|
|
122
190
|
|
|
123
|
-
|
|
191
|
+
Advanced button component with additional effects and styles.
|
|
124
192
|
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
193
|
+
```tsx
|
|
194
|
+
import { Action } from '@hua-labs/ui';
|
|
195
|
+
|
|
196
|
+
<Action actionType="primary">Primary Action</Action>
|
|
197
|
+
<Action actionType="secondary">Secondary Action</Action>
|
|
198
|
+
<Action actionType="magical">Magical</Action>
|
|
199
|
+
<Action actionType="cyberpunk">Cyberpunk</Action>
|
|
200
|
+
<Action feedback="ripple">Ripple Effect</Action>
|
|
201
|
+
<Action feedback="particle">Particle Effect</Action>
|
|
202
|
+
<Action particleEffect rippleEffect>Multiple Effects</Action>
|
|
203
|
+
```
|
|
133
204
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
205
|
+
#### Input
|
|
206
|
+
|
|
207
|
+
```tsx
|
|
208
|
+
import { Input } from '@hua-labs/ui';
|
|
209
|
+
|
|
210
|
+
<Input placeholder="Enter text" />
|
|
211
|
+
<Input type="password" />
|
|
212
|
+
<Input disabled />
|
|
213
|
+
<Input error="Error message" />
|
|
138
214
|
```
|
|
139
215
|
|
|
140
|
-
|
|
216
|
+
#### Icon
|
|
141
217
|
|
|
142
|
-
|
|
218
|
+
```tsx
|
|
219
|
+
import { Icon } from '@hua-labs/ui';
|
|
143
220
|
|
|
144
|
-
|
|
145
|
-
|
|
221
|
+
<Icon name="heart" />
|
|
222
|
+
<Icon name="star" size="lg" />
|
|
223
|
+
<Icon name="user" className="text-blue-500" />
|
|
146
224
|
```
|
|
147
225
|
|
|
148
|
-
|
|
226
|
+
Supports Lucide React icons and optional Phosphor Icons.
|
|
149
227
|
|
|
150
|
-
|
|
151
|
-
|
|
228
|
+
#### Avatar
|
|
229
|
+
|
|
230
|
+
```tsx
|
|
231
|
+
import { Avatar, AvatarImage, AvatarFallback } from '@hua-labs/ui';
|
|
232
|
+
|
|
233
|
+
<Avatar>
|
|
234
|
+
<AvatarImage src="/avatar.jpg" alt="User" />
|
|
235
|
+
<AvatarFallback>JD</AvatarFallback>
|
|
236
|
+
</Avatar>
|
|
152
237
|
```
|
|
153
238
|
|
|
154
|
-
###
|
|
239
|
+
### Layout Components
|
|
155
240
|
|
|
156
|
-
|
|
157
|
-
|
|
241
|
+
#### Card
|
|
242
|
+
|
|
243
|
+
```tsx
|
|
244
|
+
import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from '@hua-labs/ui';
|
|
245
|
+
|
|
246
|
+
<Card>
|
|
247
|
+
<CardHeader>
|
|
248
|
+
<CardTitle>Card Title</CardTitle>
|
|
249
|
+
<CardDescription>Card description</CardDescription>
|
|
250
|
+
</CardHeader>
|
|
251
|
+
<CardContent>
|
|
252
|
+
Card content
|
|
253
|
+
</CardContent>
|
|
254
|
+
<CardFooter>
|
|
255
|
+
Footer content
|
|
256
|
+
</CardFooter>
|
|
257
|
+
</Card>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
#### Panel
|
|
261
|
+
|
|
262
|
+
Advanced card component with more styling options.
|
|
263
|
+
|
|
264
|
+
```tsx
|
|
265
|
+
import { Panel } from '@hua-labs/ui';
|
|
266
|
+
|
|
267
|
+
<Panel style="elevated" padding="large">
|
|
268
|
+
Elevated panel
|
|
269
|
+
</Panel>
|
|
270
|
+
<Panel style="outline" padding="medium">
|
|
271
|
+
Outline panel
|
|
272
|
+
</Panel>
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
#### Container
|
|
276
|
+
|
|
277
|
+
```tsx
|
|
278
|
+
import { Container } from '@hua-labs/ui';
|
|
279
|
+
|
|
280
|
+
<Container size="sm">Small container</Container>
|
|
281
|
+
<Container size="md">Medium container</Container>
|
|
282
|
+
<Container size="lg">Large container</Container>
|
|
283
|
+
<Container size="xl">Extra large container</Container>
|
|
158
284
|
```
|
|
159
285
|
|
|
160
|
-
|
|
286
|
+
#### Grid
|
|
161
287
|
|
|
162
|
-
|
|
288
|
+
```tsx
|
|
289
|
+
import { Grid } from '@hua-labs/ui';
|
|
163
290
|
|
|
164
|
-
|
|
291
|
+
<Grid cols={3} gap={4}>
|
|
292
|
+
<div>Item 1</div>
|
|
293
|
+
<div>Item 2</div>
|
|
294
|
+
<div>Item 3</div>
|
|
295
|
+
</Grid>
|
|
296
|
+
```
|
|
165
297
|
|
|
166
|
-
|
|
167
|
-
2. **Feature branch** 생성 (`git checkout -b feature/amazing-feature`)
|
|
168
|
-
3. **Commit** 변경사항 (`git commit -m 'Add amazing feature'`)
|
|
169
|
-
4. **Push** 브랜치 (`git push origin feature/amazing-feature`)
|
|
170
|
-
5. **Pull Request** 생성
|
|
298
|
+
#### Stack
|
|
171
299
|
|
|
172
|
-
|
|
300
|
+
```tsx
|
|
301
|
+
import { Stack } from '@hua-labs/ui';
|
|
173
302
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
303
|
+
<Stack direction="vertical" gap={4}>
|
|
304
|
+
<div>Item 1</div>
|
|
305
|
+
<div>Item 2</div>
|
|
306
|
+
</Stack>
|
|
307
|
+
```
|
|
177
308
|
|
|
178
|
-
|
|
309
|
+
### Navigation Components
|
|
179
310
|
|
|
180
|
-
|
|
311
|
+
#### Navigation
|
|
181
312
|
|
|
182
|
-
|
|
313
|
+
```tsx
|
|
314
|
+
import { Navigation, NavigationList, NavigationItem, NavigationContent } from '@hua-labs/ui';
|
|
315
|
+
|
|
316
|
+
<Navigation defaultValue="tab1">
|
|
317
|
+
<NavigationList>
|
|
318
|
+
<NavigationItem value="tab1">Tab 1</NavigationItem>
|
|
319
|
+
<NavigationItem value="tab2">Tab 2</NavigationItem>
|
|
320
|
+
</NavigationList>
|
|
321
|
+
<NavigationContent value="tab1">Tab 1 content</NavigationContent>
|
|
322
|
+
<NavigationContent value="tab2">Tab 2 content</NavigationContent>
|
|
323
|
+
</Navigation>
|
|
324
|
+
```
|
|
183
325
|
|
|
184
|
-
|
|
326
|
+
#### Tabs
|
|
185
327
|
|
|
186
|
-
|
|
328
|
+
```tsx
|
|
329
|
+
import { Tabs, TabsList, TabsTrigger, TabsContent } from '@hua-labs/ui';
|
|
330
|
+
|
|
331
|
+
<Tabs defaultValue="tab1">
|
|
332
|
+
<TabsList>
|
|
333
|
+
<TabsTrigger value="tab1">Tab 1</TabsTrigger>
|
|
334
|
+
<TabsTrigger value="tab2">Tab 2</TabsTrigger>
|
|
335
|
+
</TabsList>
|
|
336
|
+
<TabsContent value="tab1">Tab 1 content</TabsContent>
|
|
337
|
+
<TabsContent value="tab2">Tab 2 content</TabsContent>
|
|
338
|
+
</Tabs>
|
|
339
|
+
```
|
|
187
340
|
|
|
188
|
-
|
|
341
|
+
#### Breadcrumb
|
|
189
342
|
|
|
190
|
-
|
|
343
|
+
```tsx
|
|
344
|
+
import { Breadcrumb, BreadcrumbItem } from '@hua-labs/ui';
|
|
191
345
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
346
|
+
<Breadcrumb>
|
|
347
|
+
<BreadcrumbItem href="/">Home</BreadcrumbItem>
|
|
348
|
+
<BreadcrumbItem href="/products">Products</BreadcrumbItem>
|
|
349
|
+
<BreadcrumbItem>Current</BreadcrumbItem>
|
|
350
|
+
</Breadcrumb>
|
|
351
|
+
```
|
|
198
352
|
|
|
199
|
-
|
|
200
|
-
- Automatic theme detection
|
|
201
|
-
- Manual theme switching
|
|
202
|
-
- Consistent design system
|
|
353
|
+
#### Pagination
|
|
203
354
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
355
|
+
```tsx
|
|
356
|
+
import { Pagination, PaginationWithInfo } from '@hua-labs/ui';
|
|
357
|
+
|
|
358
|
+
<Pagination
|
|
359
|
+
currentPage={1}
|
|
360
|
+
totalPages={10}
|
|
361
|
+
onPageChange={(page) => console.log(page)}
|
|
362
|
+
/>
|
|
363
|
+
|
|
364
|
+
<PaginationWithInfo
|
|
365
|
+
currentPage={1}
|
|
366
|
+
totalPages={10}
|
|
367
|
+
totalItems={100}
|
|
368
|
+
itemsPerPage={10}
|
|
369
|
+
onPageChange={(page) => console.log(page)}
|
|
370
|
+
/>
|
|
371
|
+
```
|
|
208
372
|
|
|
209
|
-
###
|
|
210
|
-
- Perfect experience on all devices
|
|
211
|
-
- Mobile-first design
|
|
373
|
+
### Form Components
|
|
212
374
|
|
|
213
|
-
|
|
375
|
+
#### Form
|
|
214
376
|
|
|
215
|
-
|
|
377
|
+
```tsx
|
|
378
|
+
import { Form, FormField, FormGroup } from '@hua-labs/ui';
|
|
379
|
+
|
|
380
|
+
<Form onSubmit={handleSubmit}>
|
|
381
|
+
<FormGroup>
|
|
382
|
+
<FormField label="Name" required>
|
|
383
|
+
<Input name="name" />
|
|
384
|
+
</FormField>
|
|
385
|
+
<FormField label="Email" required>
|
|
386
|
+
<Input type="email" name="email" />
|
|
387
|
+
</FormField>
|
|
388
|
+
</FormGroup>
|
|
389
|
+
</Form>
|
|
390
|
+
```
|
|
216
391
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
392
|
+
#### Select
|
|
393
|
+
|
|
394
|
+
```tsx
|
|
395
|
+
import { Select, SelectOption } from '@hua-labs/ui';
|
|
396
|
+
|
|
397
|
+
<Select value={value} onValueChange={setValue}>
|
|
398
|
+
<SelectOption value="option1">Option 1</SelectOption>
|
|
399
|
+
<SelectOption value="option2">Option 2</SelectOption>
|
|
400
|
+
</Select>
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
#### Checkbox
|
|
404
|
+
|
|
405
|
+
```tsx
|
|
406
|
+
import { Checkbox } from '@hua-labs/ui';
|
|
407
|
+
|
|
408
|
+
<Checkbox checked={checked} onCheckedChange={setChecked}>
|
|
409
|
+
Accept terms
|
|
410
|
+
</Checkbox>
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
#### Radio
|
|
414
|
+
|
|
415
|
+
```tsx
|
|
416
|
+
import { Radio } from '@hua-labs/ui';
|
|
417
|
+
|
|
418
|
+
<Radio value="option1" checked={value === "option1"} onChange={handleChange}>
|
|
419
|
+
Option 1
|
|
420
|
+
</Radio>
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
#### Switch
|
|
424
|
+
|
|
425
|
+
```tsx
|
|
426
|
+
import { Switch } from '@hua-labs/ui';
|
|
427
|
+
|
|
428
|
+
<Switch checked={enabled} onCheckedChange={setEnabled} />
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
#### Textarea
|
|
432
|
+
|
|
433
|
+
```tsx
|
|
434
|
+
import { Textarea } from '@hua-labs/ui';
|
|
435
|
+
|
|
436
|
+
<Textarea placeholder="Enter text" rows={4} />
|
|
223
437
|
```
|
|
224
438
|
|
|
225
|
-
|
|
439
|
+
#### Slider
|
|
226
440
|
|
|
227
441
|
```tsx
|
|
228
|
-
import {
|
|
442
|
+
import { Slider } from '@hua-labs/ui';
|
|
443
|
+
|
|
444
|
+
<Slider
|
|
445
|
+
value={value}
|
|
446
|
+
onValueChange={setValue}
|
|
447
|
+
min={0}
|
|
448
|
+
max={100}
|
|
449
|
+
step={1}
|
|
450
|
+
/>
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
### Feedback Components
|
|
454
|
+
|
|
455
|
+
#### Alert
|
|
456
|
+
|
|
457
|
+
```tsx
|
|
458
|
+
import { Alert, AlertSuccess, AlertWarning, AlertError, AlertInfo } from '@hua-labs/ui';
|
|
459
|
+
|
|
460
|
+
<Alert>Default alert</Alert>
|
|
461
|
+
<AlertSuccess>Success message</AlertSuccess>
|
|
462
|
+
<AlertWarning>Warning message</AlertWarning>
|
|
463
|
+
<AlertError>Error message</AlertError>
|
|
464
|
+
<AlertInfo>Info message</AlertInfo>
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
#### Toast
|
|
468
|
+
|
|
469
|
+
```tsx
|
|
470
|
+
import { ToastProvider, useToast } from '@hua-labs/ui';
|
|
229
471
|
|
|
230
472
|
function App() {
|
|
231
473
|
return (
|
|
232
|
-
<
|
|
233
|
-
<
|
|
234
|
-
|
|
235
|
-
<AccordionTrigger>Accordion Title</AccordionTrigger>
|
|
236
|
-
<AccordionContent>
|
|
237
|
-
Accordion content here.
|
|
238
|
-
</AccordionContent>
|
|
239
|
-
</AccordionItem>
|
|
240
|
-
</Accordion>
|
|
241
|
-
</ThemeProvider>
|
|
474
|
+
<ToastProvider>
|
|
475
|
+
<YourApp />
|
|
476
|
+
</ToastProvider>
|
|
242
477
|
);
|
|
243
478
|
}
|
|
479
|
+
|
|
480
|
+
function Component() {
|
|
481
|
+
const { addToast } = useToast();
|
|
482
|
+
|
|
483
|
+
const handleClick = () => {
|
|
484
|
+
addToast({
|
|
485
|
+
title: "Success",
|
|
486
|
+
description: "Operation completed",
|
|
487
|
+
variant: "success"
|
|
488
|
+
});
|
|
489
|
+
};
|
|
490
|
+
|
|
491
|
+
return <Button onClick={handleClick}>Show Toast</Button>;
|
|
492
|
+
}
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
#### LoadingSpinner
|
|
496
|
+
|
|
497
|
+
```tsx
|
|
498
|
+
import { LoadingSpinner } from '@hua-labs/ui';
|
|
499
|
+
|
|
500
|
+
<LoadingSpinner />
|
|
501
|
+
<LoadingSpinner size="sm" />
|
|
502
|
+
<LoadingSpinner size="lg" />
|
|
503
|
+
<LoadingSpinner color="primary" />
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
#### Tooltip
|
|
507
|
+
|
|
508
|
+
```tsx
|
|
509
|
+
import { Tooltip, TooltipLight, TooltipDark } from '@hua-labs/ui';
|
|
510
|
+
|
|
511
|
+
<Tooltip content="Tooltip text">
|
|
512
|
+
<Button>Hover me</Button>
|
|
513
|
+
</Tooltip>
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
### Overlay Components
|
|
517
|
+
|
|
518
|
+
#### Modal
|
|
519
|
+
|
|
520
|
+
```tsx
|
|
521
|
+
import { Modal } from '@hua-labs/ui';
|
|
522
|
+
|
|
523
|
+
<Modal isOpen={isOpen} onClose={() => setIsOpen(false)}>
|
|
524
|
+
<div className="p-6">
|
|
525
|
+
<h2>Modal Title</h2>
|
|
526
|
+
<p>Modal content</p>
|
|
527
|
+
</div>
|
|
528
|
+
</Modal>
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
#### ConfirmModal
|
|
532
|
+
|
|
533
|
+
```tsx
|
|
534
|
+
import { ConfirmModal } from '@hua-labs/ui';
|
|
535
|
+
|
|
536
|
+
<ConfirmModal
|
|
537
|
+
isOpen={isOpen}
|
|
538
|
+
onClose={() => setIsOpen(false)}
|
|
539
|
+
onConfirm={handleConfirm}
|
|
540
|
+
title="Confirm Action"
|
|
541
|
+
description="Are you sure you want to proceed?"
|
|
542
|
+
/>
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
#### Drawer
|
|
546
|
+
|
|
547
|
+
```tsx
|
|
548
|
+
import { Drawer, DrawerHeader, DrawerContent, DrawerFooter } from '@hua-labs/ui';
|
|
549
|
+
|
|
550
|
+
<Drawer isOpen={isOpen} onClose={() => setIsOpen(false)}>
|
|
551
|
+
<DrawerHeader>Drawer Title</DrawerHeader>
|
|
552
|
+
<DrawerContent>
|
|
553
|
+
Drawer content
|
|
554
|
+
</DrawerContent>
|
|
555
|
+
<DrawerFooter>
|
|
556
|
+
Footer actions
|
|
557
|
+
</DrawerFooter>
|
|
558
|
+
</Drawer>
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
#### BottomSheet
|
|
562
|
+
|
|
563
|
+
```tsx
|
|
564
|
+
import { BottomSheet } from '@hua-labs/ui';
|
|
565
|
+
|
|
566
|
+
<BottomSheet isOpen={isOpen} onClose={() => setIsOpen(false)}>
|
|
567
|
+
<div className="p-6">
|
|
568
|
+
<h2>Bottom Sheet Title</h2>
|
|
569
|
+
<p>Bottom sheet content</p>
|
|
570
|
+
</div>
|
|
571
|
+
</BottomSheet>
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
#### Popover
|
|
575
|
+
|
|
576
|
+
```tsx
|
|
577
|
+
import { Popover, PopoverTrigger, PopoverContent } from '@hua-labs/ui';
|
|
578
|
+
|
|
579
|
+
<Popover>
|
|
580
|
+
<PopoverTrigger>
|
|
581
|
+
<Button>Open Popover</Button>
|
|
582
|
+
</PopoverTrigger>
|
|
583
|
+
<PopoverContent>
|
|
584
|
+
Popover content
|
|
585
|
+
</PopoverContent>
|
|
586
|
+
</Popover>
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
#### Dropdown
|
|
590
|
+
|
|
591
|
+
```tsx
|
|
592
|
+
import { Dropdown, DropdownMenu, DropdownItem, DropdownSeparator, DropdownLabel, DropdownGroup } from '@hua-labs/ui';
|
|
593
|
+
|
|
594
|
+
<Dropdown>
|
|
595
|
+
<DropdownMenu>
|
|
596
|
+
<DropdownLabel>My Account</DropdownLabel>
|
|
597
|
+
<DropdownSeparator />
|
|
598
|
+
<DropdownGroup>
|
|
599
|
+
<DropdownItem>Profile</DropdownItem>
|
|
600
|
+
<DropdownItem>Settings</DropdownItem>
|
|
601
|
+
</DropdownGroup>
|
|
602
|
+
<DropdownSeparator />
|
|
603
|
+
<DropdownItem>Logout</DropdownItem>
|
|
604
|
+
</DropdownMenu>
|
|
605
|
+
</Dropdown>
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
### Data Display Components
|
|
609
|
+
|
|
610
|
+
#### Table
|
|
611
|
+
|
|
612
|
+
```tsx
|
|
613
|
+
import { Table, TableHeader, TableBody, TableHead, TableRow, TableCell, TableCaption } from '@hua-labs/ui';
|
|
614
|
+
|
|
615
|
+
<Table>
|
|
616
|
+
<TableCaption>Table caption</TableCaption>
|
|
617
|
+
<TableHeader>
|
|
618
|
+
<TableRow>
|
|
619
|
+
<TableHead>Name</TableHead>
|
|
620
|
+
<TableHead>Email</TableHead>
|
|
621
|
+
</TableRow>
|
|
622
|
+
</TableHeader>
|
|
623
|
+
<TableBody>
|
|
624
|
+
<TableRow>
|
|
625
|
+
<TableCell>John Doe</TableCell>
|
|
626
|
+
<TableCell>john@example.com</TableCell>
|
|
627
|
+
</TableRow>
|
|
628
|
+
</TableBody>
|
|
629
|
+
</Table>
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
#### Badge
|
|
633
|
+
|
|
634
|
+
```tsx
|
|
635
|
+
import { Badge } from '@hua-labs/ui';
|
|
636
|
+
|
|
637
|
+
<Badge>Default</Badge>
|
|
638
|
+
<Badge variant="success">Success</Badge>
|
|
639
|
+
<Badge variant="warning">Warning</Badge>
|
|
640
|
+
<Badge variant="error">Error</Badge>
|
|
641
|
+
<Badge variant="info">Info</Badge>
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
#### Progress
|
|
645
|
+
|
|
646
|
+
```tsx
|
|
647
|
+
import { Progress, ProgressSuccess, ProgressWarning, ProgressError, ProgressInfo } from '@hua-labs/ui';
|
|
648
|
+
|
|
649
|
+
<Progress value={50} />
|
|
650
|
+
<ProgressSuccess value={75} />
|
|
651
|
+
<ProgressWarning value={50} />
|
|
652
|
+
<ProgressError value={25} />
|
|
653
|
+
<ProgressInfo value={60} />
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
#### Skeleton
|
|
657
|
+
|
|
658
|
+
```tsx
|
|
659
|
+
import { Skeleton, SkeletonText, SkeletonCircle, SkeletonCard, SkeletonAvatar } from '@hua-labs/ui';
|
|
660
|
+
|
|
661
|
+
<Skeleton className="h-4 w-full" />
|
|
662
|
+
<SkeletonText lines={3} />
|
|
663
|
+
<SkeletonCircle size={40} />
|
|
664
|
+
<SkeletonCard />
|
|
665
|
+
<SkeletonAvatar />
|
|
244
666
|
```
|
|
245
667
|
|
|
246
|
-
|
|
668
|
+
### Interactive Components
|
|
247
669
|
|
|
248
|
-
|
|
670
|
+
#### Accordion
|
|
249
671
|
|
|
250
672
|
```tsx
|
|
251
673
|
import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from '@hua-labs/ui';
|
|
252
674
|
|
|
253
675
|
<Accordion type="single" collapsible>
|
|
254
676
|
<AccordionItem value="item-1">
|
|
255
|
-
<AccordionTrigger>
|
|
256
|
-
<AccordionContent>
|
|
677
|
+
<AccordionTrigger>Item 1</AccordionTrigger>
|
|
678
|
+
<AccordionContent>Content 1</AccordionContent>
|
|
257
679
|
</AccordionItem>
|
|
258
680
|
<AccordionItem value="item-2">
|
|
259
|
-
<AccordionTrigger>
|
|
260
|
-
<AccordionContent>
|
|
681
|
+
<AccordionTrigger>Item 2</AccordionTrigger>
|
|
682
|
+
<AccordionContent>Content 2</AccordionContent>
|
|
261
683
|
</AccordionItem>
|
|
262
684
|
</Accordion>
|
|
263
685
|
```
|
|
264
686
|
|
|
265
|
-
|
|
687
|
+
#### Menu
|
|
688
|
+
|
|
689
|
+
```tsx
|
|
690
|
+
import { Menu, MenuItem, MenuSeparator, MenuLabel, MenuHorizontal, MenuVertical } from '@hua-labs/ui';
|
|
691
|
+
|
|
692
|
+
<Menu>
|
|
693
|
+
<MenuItem>Item 1</MenuItem>
|
|
694
|
+
<MenuItem>Item 2</MenuItem>
|
|
695
|
+
<MenuSeparator />
|
|
696
|
+
<MenuLabel>Label</MenuLabel>
|
|
697
|
+
<MenuItem>Item 3</MenuItem>
|
|
698
|
+
</Menu>
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
#### Command
|
|
702
|
+
|
|
703
|
+
```tsx
|
|
704
|
+
import { Command, CommandInput, CommandList, CommandItem, CommandGroup, CommandEmpty } from '@hua-labs/ui';
|
|
705
|
+
|
|
706
|
+
<Command>
|
|
707
|
+
<CommandInput placeholder="Search..." />
|
|
708
|
+
<CommandList>
|
|
709
|
+
<CommandEmpty>No results found.</CommandEmpty>
|
|
710
|
+
<CommandGroup heading="Suggestions">
|
|
711
|
+
<CommandItem>Calendar</CommandItem>
|
|
712
|
+
<CommandItem>Search Emoji</CommandItem>
|
|
713
|
+
</CommandGroup>
|
|
714
|
+
</CommandList>
|
|
715
|
+
</Command>
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
### Scroll Components
|
|
719
|
+
|
|
720
|
+
#### ScrollToTop
|
|
721
|
+
|
|
722
|
+
```tsx
|
|
723
|
+
import { ScrollToTop } from '@hua-labs/ui';
|
|
724
|
+
|
|
725
|
+
<ScrollToTop
|
|
726
|
+
className="fixed bottom-6 right-6"
|
|
727
|
+
threshold={150}
|
|
728
|
+
/>
|
|
729
|
+
```
|
|
730
|
+
|
|
731
|
+
#### ScrollProgress
|
|
266
732
|
|
|
267
733
|
```tsx
|
|
268
|
-
import {
|
|
734
|
+
import { ScrollProgress } from '@hua-labs/ui';
|
|
735
|
+
|
|
736
|
+
<ScrollProgress />
|
|
737
|
+
```
|
|
738
|
+
|
|
739
|
+
#### ScrollIndicator
|
|
740
|
+
|
|
741
|
+
```tsx
|
|
742
|
+
import { ScrollIndicator } from '@hua-labs/ui';
|
|
743
|
+
|
|
744
|
+
<ScrollIndicator />
|
|
745
|
+
```
|
|
746
|
+
|
|
747
|
+
#### ScrollArea
|
|
748
|
+
|
|
749
|
+
```tsx
|
|
750
|
+
import { ScrollArea } from '@hua-labs/ui';
|
|
751
|
+
|
|
752
|
+
<ScrollArea className="h-72">
|
|
753
|
+
<div>Scrollable content</div>
|
|
754
|
+
</ScrollArea>
|
|
755
|
+
```
|
|
756
|
+
|
|
757
|
+
### Theme Components
|
|
758
|
+
|
|
759
|
+
#### ThemeProvider
|
|
760
|
+
|
|
761
|
+
```tsx
|
|
762
|
+
import { ThemeProvider } from '@hua-labs/ui';
|
|
269
763
|
|
|
270
764
|
function App() {
|
|
271
765
|
return (
|
|
272
|
-
<ThemeProvider
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
766
|
+
<ThemeProvider
|
|
767
|
+
attribute="class"
|
|
768
|
+
defaultTheme="system"
|
|
769
|
+
enableSystem
|
|
770
|
+
>
|
|
771
|
+
<YourApp />
|
|
277
772
|
</ThemeProvider>
|
|
278
773
|
);
|
|
279
774
|
}
|
|
280
775
|
```
|
|
281
776
|
|
|
282
|
-
|
|
777
|
+
#### ThemeToggle
|
|
283
778
|
|
|
284
779
|
```tsx
|
|
285
|
-
import {
|
|
780
|
+
import { ThemeToggle } from '@hua-labs/ui';
|
|
286
781
|
|
|
287
|
-
|
|
288
|
-
|
|
782
|
+
<ThemeToggle />
|
|
783
|
+
```
|
|
289
784
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
)
|
|
301
|
-
|
|
785
|
+
### Specialized Components
|
|
786
|
+
|
|
787
|
+
#### ChatMessage
|
|
788
|
+
|
|
789
|
+
```tsx
|
|
790
|
+
import { ChatMessage } from '@hua-labs/ui';
|
|
791
|
+
|
|
792
|
+
<ChatMessage
|
|
793
|
+
message="Hello, world!"
|
|
794
|
+
sender="user"
|
|
795
|
+
timestamp={new Date()}
|
|
796
|
+
/>
|
|
302
797
|
```
|
|
303
798
|
|
|
304
|
-
|
|
799
|
+
#### EmotionAnalysis
|
|
305
800
|
|
|
306
|
-
|
|
801
|
+
```tsx
|
|
802
|
+
import { EmotionAnalysis } from '@hua-labs/ui';
|
|
307
803
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
--hua-background: #ffffff;
|
|
314
|
-
--hua-foreground: #0f172a;
|
|
315
|
-
}
|
|
804
|
+
<EmotionAnalysis
|
|
805
|
+
emotions={['joy', 'sadness', 'anger']}
|
|
806
|
+
intensity={[0.8, 0.3, 0.2]}
|
|
807
|
+
/>
|
|
808
|
+
```
|
|
316
809
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
}
|
|
810
|
+
#### EmotionSelector
|
|
811
|
+
|
|
812
|
+
```tsx
|
|
813
|
+
import { EmotionSelector } from '@hua-labs/ui';
|
|
814
|
+
|
|
815
|
+
<EmotionSelector
|
|
816
|
+
value={selectedEmotion}
|
|
817
|
+
onValueChange={setSelectedEmotion}
|
|
818
|
+
/>
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
#### InfoCard
|
|
822
|
+
|
|
823
|
+
```tsx
|
|
824
|
+
import { InfoCard } from '@hua-labs/ui';
|
|
825
|
+
|
|
826
|
+
<InfoCard
|
|
827
|
+
title="Information"
|
|
828
|
+
description="This is an info card"
|
|
829
|
+
variant="info"
|
|
830
|
+
/>
|
|
831
|
+
```
|
|
832
|
+
|
|
833
|
+
#### FeatureCard
|
|
834
|
+
|
|
835
|
+
```tsx
|
|
836
|
+
import { FeatureCard } from '@hua-labs/ui';
|
|
837
|
+
|
|
838
|
+
<FeatureCard
|
|
839
|
+
title="Feature"
|
|
840
|
+
description="Feature description"
|
|
841
|
+
icon={<Icon name="star" />}
|
|
842
|
+
/>
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
### Dashboard Components
|
|
846
|
+
|
|
847
|
+
Dashboard components are available from the advanced export:
|
|
848
|
+
|
|
849
|
+
```tsx
|
|
850
|
+
import {
|
|
851
|
+
StatCard,
|
|
852
|
+
QuickActionCard,
|
|
853
|
+
DashboardGrid,
|
|
854
|
+
ActivityFeed,
|
|
855
|
+
ProfileCard,
|
|
856
|
+
MembershipBadge,
|
|
857
|
+
MiniBarChart,
|
|
858
|
+
SummaryCard,
|
|
859
|
+
NotificationCard,
|
|
860
|
+
MetricCard,
|
|
861
|
+
ProgressCard
|
|
862
|
+
} from '@hua-labs/ui';
|
|
863
|
+
```
|
|
864
|
+
|
|
865
|
+
Or import from the dashboard subpath:
|
|
866
|
+
|
|
867
|
+
```tsx
|
|
868
|
+
import * from '@hua-labs/ui/advanced/dashboard';
|
|
869
|
+
```
|
|
870
|
+
|
|
871
|
+
### Advanced Page Transitions
|
|
872
|
+
|
|
873
|
+
Advanced page transition components are available from the advanced export:
|
|
874
|
+
|
|
875
|
+
```tsx
|
|
876
|
+
import {
|
|
877
|
+
AdvancedPageTransition,
|
|
878
|
+
usePageTransition,
|
|
879
|
+
usePageTransitionManager
|
|
880
|
+
} from '@hua-labs/ui/advanced';
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
## Utilities
|
|
884
|
+
|
|
885
|
+
### merge
|
|
886
|
+
|
|
887
|
+
Smart class merging utility that resolves duplicate Tailwind classes.
|
|
888
|
+
|
|
889
|
+
```tsx
|
|
890
|
+
import { merge } from '@hua-labs/ui';
|
|
891
|
+
|
|
892
|
+
const className = merge("px-2 py-1", "px-4"); // "py-1 px-4"
|
|
893
|
+
const className2 = merge("text-red-500", "text-blue-500"); // "text-blue-500"
|
|
894
|
+
```
|
|
895
|
+
|
|
896
|
+
### mergeIf
|
|
897
|
+
|
|
898
|
+
Conditional class merging.
|
|
899
|
+
|
|
900
|
+
```tsx
|
|
901
|
+
import { mergeIf } from '@hua-labs/ui';
|
|
902
|
+
|
|
903
|
+
const className = mergeIf(isActive, "bg-blue-500", "bg-gray-200");
|
|
904
|
+
const className2 = mergeIf(isLoading, "opacity-50 cursor-not-allowed");
|
|
905
|
+
```
|
|
906
|
+
|
|
907
|
+
### mergeMap
|
|
908
|
+
|
|
909
|
+
Object-based conditional class merging.
|
|
910
|
+
|
|
911
|
+
```tsx
|
|
912
|
+
import { mergeMap } from '@hua-labs/ui';
|
|
913
|
+
|
|
914
|
+
const className = mergeMap({
|
|
915
|
+
"bg-blue-500": isPrimary,
|
|
916
|
+
"bg-gray-500": !isPrimary,
|
|
917
|
+
"text-white": true,
|
|
918
|
+
"opacity-50": isDisabled
|
|
919
|
+
});
|
|
920
|
+
```
|
|
921
|
+
|
|
922
|
+
### cn
|
|
923
|
+
|
|
924
|
+
Alias for `merge` (for compatibility with shadcn/ui).
|
|
925
|
+
|
|
926
|
+
```tsx
|
|
927
|
+
import { cn } from '@hua-labs/ui';
|
|
928
|
+
|
|
929
|
+
const className = cn("px-2", "py-1");
|
|
930
|
+
```
|
|
931
|
+
|
|
932
|
+
### formatRelativeTime
|
|
933
|
+
|
|
934
|
+
Format a date as relative time (e.g., "방금 전", "5분 전", "2시간 전", "3일 전"). Returns absolute date for dates older than 7 days.
|
|
935
|
+
|
|
936
|
+
```tsx
|
|
937
|
+
import { formatRelativeTime } from '@hua-labs/ui';
|
|
938
|
+
|
|
939
|
+
formatRelativeTime(new Date()) // "방금 전"
|
|
940
|
+
formatRelativeTime(new Date(Date.now() - 5 * 60000)) // "5분 전"
|
|
941
|
+
formatRelativeTime(new Date(Date.now() - 2 * 3600000)) // "2시간 전"
|
|
942
|
+
formatRelativeTime(new Date(Date.now() - 3 * 86400000)) // "3일 전"
|
|
943
|
+
formatRelativeTime(new Date("2024-01-01")) // "2024. 1. 1." (7일 이상 경과)
|
|
944
|
+
```
|
|
945
|
+
|
|
946
|
+
## Icon Support
|
|
947
|
+
|
|
948
|
+
The Icon component supports multiple icon libraries:
|
|
949
|
+
|
|
950
|
+
- Lucide React (default, included)
|
|
951
|
+
- Phosphor Icons (optional, requires `@phosphor-icons/react`)
|
|
952
|
+
|
|
953
|
+
```tsx
|
|
954
|
+
import { Icon } from '@hua-labs/ui';
|
|
955
|
+
|
|
956
|
+
// Lucide icons (default)
|
|
957
|
+
<Icon name="heart" />
|
|
958
|
+
<Icon name="star" />
|
|
959
|
+
|
|
960
|
+
// Phosphor icons (if installed)
|
|
961
|
+
<Icon name="heart" provider="phosphor" />
|
|
321
962
|
```
|
|
322
963
|
|
|
323
|
-
##
|
|
964
|
+
## Exports
|
|
965
|
+
|
|
966
|
+
### Main Export
|
|
967
|
+
|
|
968
|
+
```tsx
|
|
969
|
+
import { Button, Input, Card } from '@hua-labs/ui';
|
|
970
|
+
```
|
|
971
|
+
|
|
972
|
+
### Advanced Exports
|
|
973
|
+
|
|
974
|
+
```tsx
|
|
975
|
+
import * from '@hua-labs/ui/advanced';
|
|
976
|
+
import * from '@hua-labs/ui/advanced/dashboard';
|
|
977
|
+
import * from '@hua-labs/ui/advanced/motion';
|
|
978
|
+
```
|
|
979
|
+
|
|
980
|
+
### Style Exports
|
|
981
|
+
|
|
982
|
+
```tsx
|
|
983
|
+
import '@hua-labs/ui/styles/toast.css';
|
|
984
|
+
```
|
|
985
|
+
|
|
986
|
+
## Development
|
|
324
987
|
|
|
325
988
|
### Build
|
|
326
989
|
|
|
@@ -340,24 +1003,39 @@ pnpm dev
|
|
|
340
1003
|
pnpm type-check
|
|
341
1004
|
```
|
|
342
1005
|
|
|
343
|
-
|
|
1006
|
+
### Lint
|
|
1007
|
+
|
|
1008
|
+
```bash
|
|
1009
|
+
pnpm lint
|
|
1010
|
+
```
|
|
1011
|
+
|
|
1012
|
+
### Test
|
|
1013
|
+
|
|
1014
|
+
```bash
|
|
1015
|
+
pnpm test
|
|
1016
|
+
```
|
|
1017
|
+
|
|
1018
|
+
## Requirements
|
|
344
1019
|
|
|
345
|
-
|
|
1020
|
+
- React >= 16.8.0
|
|
1021
|
+
- React DOM >= 16.8.0
|
|
1022
|
+
- Tailwind CSS (for styling)
|
|
1023
|
+
- Optional: @phosphor-icons/react (for Phosphor icon support)
|
|
346
1024
|
|
|
347
|
-
##
|
|
1025
|
+
## License
|
|
348
1026
|
|
|
349
|
-
|
|
350
|
-
2. **Create** feature branch (`git checkout -b feature/amazing-feature`)
|
|
351
|
-
3. **Commit** changes (`git commit -m 'Add amazing feature'`)
|
|
352
|
-
4. **Push** branch (`git push origin feature/amazing-feature`)
|
|
353
|
-
5. **Create** Pull Request
|
|
1027
|
+
MIT License
|
|
354
1028
|
|
|
355
|
-
##
|
|
1029
|
+
## 문서
|
|
356
1030
|
|
|
357
|
-
- [
|
|
358
|
-
- [
|
|
359
|
-
- [
|
|
1031
|
+
- [아키텍처 문서](./docs/ARCHITECTURE.md) - 전체 아키텍처 및 설계 원칙
|
|
1032
|
+
- [패키지 구조](./docs/PACKAGE_STRUCTURE.md) - 디렉토리 구조 및 파일 조직
|
|
1033
|
+
- [개발 가이드](./docs/DEVELOPMENT_GUIDE.md) - 컴포넌트 추가 및 개발 가이드
|
|
1034
|
+
- [모노레포/멀티레포 호환성](./docs/MONOREPO_COMPATIBILITY.md) - 모노레포 및 멀티레포 환경 호환성
|
|
1035
|
+
- [서브패키지 분석](./docs/SUBPACKAGE_ANALYSIS.md) - 서브패키지 분리 전략
|
|
1036
|
+
- [아이콘 시스템](./docs/ICON_SYSTEM.md) - 아이콘 시스템 가이드
|
|
1037
|
+
- [개선 사항](./docs/IMPROVEMENTS_2025-12-06.md) - 개선 이력
|
|
360
1038
|
|
|
361
|
-
|
|
1039
|
+
## Repository
|
|
362
1040
|
|
|
363
|
-
|
|
1041
|
+
https://github.com/HUA-Labs/HUA-Labs-public
|