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