@designbasekorea/ui-native 0.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.
Files changed (237) hide show
  1. package/README.md +152 -0
  2. package/dist/components/Alert/Alert.d.ts +29 -0
  3. package/dist/components/Alert/Alert.d.ts.map +1 -0
  4. package/dist/components/Alert/Alert.js +44 -0
  5. package/dist/components/Alert/Alert.js.map +1 -0
  6. package/dist/components/Alert/index.d.ts +3 -0
  7. package/dist/components/Alert/index.d.ts.map +1 -0
  8. package/dist/components/Alert/index.js +2 -0
  9. package/dist/components/Alert/index.js.map +1 -0
  10. package/dist/components/Avatar/Avatar.d.ts +28 -0
  11. package/dist/components/Avatar/Avatar.d.ts.map +1 -0
  12. package/dist/components/Avatar/Avatar.js +73 -0
  13. package/dist/components/Avatar/Avatar.js.map +1 -0
  14. package/dist/components/Avatar/index.d.ts +3 -0
  15. package/dist/components/Avatar/index.d.ts.map +1 -0
  16. package/dist/components/Avatar/index.js +2 -0
  17. package/dist/components/Avatar/index.js.map +1 -0
  18. package/dist/components/Badge/Badge.d.ts +28 -0
  19. package/dist/components/Badge/Badge.d.ts.map +1 -0
  20. package/dist/components/Badge/Badge.js +52 -0
  21. package/dist/components/Badge/Badge.js.map +1 -0
  22. package/dist/components/Badge/index.d.ts +3 -0
  23. package/dist/components/Badge/index.d.ts.map +1 -0
  24. package/dist/components/Badge/index.js +2 -0
  25. package/dist/components/Badge/index.js.map +1 -0
  26. package/dist/components/BottomNavigation/BottomNavigation.d.ts +30 -0
  27. package/dist/components/BottomNavigation/BottomNavigation.d.ts.map +1 -0
  28. package/dist/components/BottomNavigation/BottomNavigation.js +48 -0
  29. package/dist/components/BottomNavigation/BottomNavigation.js.map +1 -0
  30. package/dist/components/BottomNavigation/index.d.ts +3 -0
  31. package/dist/components/BottomNavigation/index.d.ts.map +1 -0
  32. package/dist/components/BottomNavigation/index.js +2 -0
  33. package/dist/components/BottomNavigation/index.js.map +1 -0
  34. package/dist/components/BottomSheet/BottomSheet.d.ts +26 -0
  35. package/dist/components/BottomSheet/BottomSheet.d.ts.map +1 -0
  36. package/dist/components/BottomSheet/BottomSheet.js +75 -0
  37. package/dist/components/BottomSheet/BottomSheet.js.map +1 -0
  38. package/dist/components/BottomSheet/index.d.ts +3 -0
  39. package/dist/components/BottomSheet/index.d.ts.map +1 -0
  40. package/dist/components/BottomSheet/index.js +2 -0
  41. package/dist/components/BottomSheet/index.js.map +1 -0
  42. package/dist/components/Button/Button.d.ts +53 -0
  43. package/dist/components/Button/Button.d.ts.map +1 -0
  44. package/dist/components/Button/Button.js +129 -0
  45. package/dist/components/Button/Button.js.map +1 -0
  46. package/dist/components/Button/index.d.ts +3 -0
  47. package/dist/components/Button/index.d.ts.map +1 -0
  48. package/dist/components/Button/index.js +2 -0
  49. package/dist/components/Button/index.js.map +1 -0
  50. package/dist/components/Card/Card.d.ts +36 -0
  51. package/dist/components/Card/Card.d.ts.map +1 -0
  52. package/dist/components/Card/Card.js +61 -0
  53. package/dist/components/Card/Card.js.map +1 -0
  54. package/dist/components/Card/index.d.ts +3 -0
  55. package/dist/components/Card/index.d.ts.map +1 -0
  56. package/dist/components/Card/index.js +2 -0
  57. package/dist/components/Card/index.js.map +1 -0
  58. package/dist/components/Checkbox/Checkbox.d.ts +26 -0
  59. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  60. package/dist/components/Checkbox/Checkbox.js +57 -0
  61. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  62. package/dist/components/Checkbox/index.d.ts +3 -0
  63. package/dist/components/Checkbox/index.d.ts.map +1 -0
  64. package/dist/components/Checkbox/index.js +2 -0
  65. package/dist/components/Checkbox/index.js.map +1 -0
  66. package/dist/components/Chip/Chip.d.ts +29 -0
  67. package/dist/components/Chip/Chip.d.ts.map +1 -0
  68. package/dist/components/Chip/Chip.js +54 -0
  69. package/dist/components/Chip/Chip.js.map +1 -0
  70. package/dist/components/Chip/index.d.ts +3 -0
  71. package/dist/components/Chip/index.d.ts.map +1 -0
  72. package/dist/components/Chip/index.js +2 -0
  73. package/dist/components/Chip/index.js.map +1 -0
  74. package/dist/components/Divider/Divider.d.ts +22 -0
  75. package/dist/components/Divider/Divider.d.ts.map +1 -0
  76. package/dist/components/Divider/Divider.js +16 -0
  77. package/dist/components/Divider/Divider.js.map +1 -0
  78. package/dist/components/Divider/index.d.ts +3 -0
  79. package/dist/components/Divider/index.d.ts.map +1 -0
  80. package/dist/components/Divider/index.js +2 -0
  81. package/dist/components/Divider/index.js.map +1 -0
  82. package/dist/components/Input/Input.d.ts +33 -0
  83. package/dist/components/Input/Input.d.ts.map +1 -0
  84. package/dist/components/Input/Input.js +98 -0
  85. package/dist/components/Input/Input.js.map +1 -0
  86. package/dist/components/Input/index.d.ts +3 -0
  87. package/dist/components/Input/index.d.ts.map +1 -0
  88. package/dist/components/Input/index.js +2 -0
  89. package/dist/components/Input/index.js.map +1 -0
  90. package/dist/components/Modal/Modal.d.ts +28 -0
  91. package/dist/components/Modal/Modal.d.ts.map +1 -0
  92. package/dist/components/Modal/Modal.js +46 -0
  93. package/dist/components/Modal/Modal.js.map +1 -0
  94. package/dist/components/Modal/index.d.ts +3 -0
  95. package/dist/components/Modal/index.d.ts.map +1 -0
  96. package/dist/components/Modal/index.js +2 -0
  97. package/dist/components/Modal/index.js.map +1 -0
  98. package/dist/components/Navbar/Navbar.d.ts +50 -0
  99. package/dist/components/Navbar/Navbar.d.ts.map +1 -0
  100. package/dist/components/Navbar/Navbar.js +125 -0
  101. package/dist/components/Navbar/Navbar.js.map +1 -0
  102. package/dist/components/Navbar/index.d.ts +3 -0
  103. package/dist/components/Navbar/index.d.ts.map +1 -0
  104. package/dist/components/Navbar/index.js +2 -0
  105. package/dist/components/Navbar/index.js.map +1 -0
  106. package/dist/components/ProgressBar/ProgressBar.d.ts +27 -0
  107. package/dist/components/ProgressBar/ProgressBar.d.ts.map +1 -0
  108. package/dist/components/ProgressBar/ProgressBar.js +55 -0
  109. package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
  110. package/dist/components/ProgressBar/index.d.ts +3 -0
  111. package/dist/components/ProgressBar/index.d.ts.map +1 -0
  112. package/dist/components/ProgressBar/index.js +2 -0
  113. package/dist/components/ProgressBar/index.js.map +1 -0
  114. package/dist/components/Radio/Radio.d.ts +30 -0
  115. package/dist/components/Radio/Radio.d.ts.map +1 -0
  116. package/dist/components/Radio/Radio.js +56 -0
  117. package/dist/components/Radio/Radio.js.map +1 -0
  118. package/dist/components/Radio/index.d.ts +3 -0
  119. package/dist/components/Radio/index.d.ts.map +1 -0
  120. package/dist/components/Radio/index.js +2 -0
  121. package/dist/components/Radio/index.js.map +1 -0
  122. package/dist/components/SearchBar/SearchBar.d.ts +29 -0
  123. package/dist/components/SearchBar/SearchBar.d.ts.map +1 -0
  124. package/dist/components/SearchBar/SearchBar.js +64 -0
  125. package/dist/components/SearchBar/SearchBar.js.map +1 -0
  126. package/dist/components/SearchBar/index.d.ts +3 -0
  127. package/dist/components/SearchBar/index.d.ts.map +1 -0
  128. package/dist/components/SearchBar/index.js +2 -0
  129. package/dist/components/SearchBar/index.js.map +1 -0
  130. package/dist/components/Skeleton/Skeleton.d.ts +22 -0
  131. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -0
  132. package/dist/components/Skeleton/Skeleton.js +46 -0
  133. package/dist/components/Skeleton/Skeleton.js.map +1 -0
  134. package/dist/components/Skeleton/index.d.ts +3 -0
  135. package/dist/components/Skeleton/index.d.ts.map +1 -0
  136. package/dist/components/Skeleton/index.js +2 -0
  137. package/dist/components/Skeleton/index.js.map +1 -0
  138. package/dist/components/Spinner/Spinner.d.ts +23 -0
  139. package/dist/components/Spinner/Spinner.d.ts.map +1 -0
  140. package/dist/components/Spinner/Spinner.js +19 -0
  141. package/dist/components/Spinner/Spinner.js.map +1 -0
  142. package/dist/components/Spinner/index.d.ts +3 -0
  143. package/dist/components/Spinner/index.d.ts.map +1 -0
  144. package/dist/components/Spinner/index.js +2 -0
  145. package/dist/components/Spinner/index.js.map +1 -0
  146. package/dist/components/Tabs/Tabs.d.ts +30 -0
  147. package/dist/components/Tabs/Tabs.d.ts.map +1 -0
  148. package/dist/components/Tabs/Tabs.js +73 -0
  149. package/dist/components/Tabs/Tabs.js.map +1 -0
  150. package/dist/components/Tabs/index.d.ts +3 -0
  151. package/dist/components/Tabs/index.d.ts.map +1 -0
  152. package/dist/components/Tabs/index.js +2 -0
  153. package/dist/components/Tabs/index.js.map +1 -0
  154. package/dist/components/Toast/Toast.d.ts +30 -0
  155. package/dist/components/Toast/Toast.d.ts.map +1 -0
  156. package/dist/components/Toast/Toast.js +84 -0
  157. package/dist/components/Toast/Toast.js.map +1 -0
  158. package/dist/components/Toast/index.d.ts +3 -0
  159. package/dist/components/Toast/index.d.ts.map +1 -0
  160. package/dist/components/Toast/index.js +2 -0
  161. package/dist/components/Toast/index.js.map +1 -0
  162. package/dist/components/Toggle/Toggle.d.ts +26 -0
  163. package/dist/components/Toggle/Toggle.d.ts.map +1 -0
  164. package/dist/components/Toggle/Toggle.js +75 -0
  165. package/dist/components/Toggle/Toggle.js.map +1 -0
  166. package/dist/components/Toggle/index.d.ts +3 -0
  167. package/dist/components/Toggle/index.d.ts.map +1 -0
  168. package/dist/components/Toggle/index.js +2 -0
  169. package/dist/components/Toggle/index.js.map +1 -0
  170. package/dist/index.d.ts +61 -0
  171. package/dist/index.d.ts.map +1 -0
  172. package/dist/index.js +43 -0
  173. package/dist/index.js.map +1 -0
  174. package/dist/theme/ThemeProvider.d.ts +35 -0
  175. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  176. package/dist/theme/ThemeProvider.js +45 -0
  177. package/dist/theme/ThemeProvider.js.map +1 -0
  178. package/dist/theme/index.d.ts +6 -0
  179. package/dist/theme/index.d.ts.map +1 -0
  180. package/dist/theme/index.js +4 -0
  181. package/dist/theme/index.js.map +1 -0
  182. package/dist/theme/tokens.d.ts +55 -0
  183. package/dist/theme/tokens.d.ts.map +1 -0
  184. package/dist/theme/tokens.js +172 -0
  185. package/dist/theme/tokens.js.map +1 -0
  186. package/dist/theme/useTheme.d.ts +25 -0
  187. package/dist/theme/useTheme.d.ts.map +1 -0
  188. package/dist/theme/useTheme.js +33 -0
  189. package/dist/theme/useTheme.js.map +1 -0
  190. package/package.json +58 -0
  191. package/src/components/Alert/Alert.tsx +105 -0
  192. package/src/components/Alert/index.ts +2 -0
  193. package/src/components/Avatar/Avatar.tsx +122 -0
  194. package/src/components/Avatar/index.ts +2 -0
  195. package/src/components/Badge/Badge.tsx +100 -0
  196. package/src/components/Badge/index.ts +2 -0
  197. package/src/components/BottomNavigation/BottomNavigation.tsx +104 -0
  198. package/src/components/BottomNavigation/index.ts +2 -0
  199. package/src/components/BottomSheet/BottomSheet.tsx +127 -0
  200. package/src/components/BottomSheet/index.ts +2 -0
  201. package/src/components/Button/Button.tsx +255 -0
  202. package/src/components/Button/index.ts +2 -0
  203. package/src/components/Card/Card.tsx +147 -0
  204. package/src/components/Card/index.ts +2 -0
  205. package/src/components/Checkbox/Checkbox.tsx +95 -0
  206. package/src/components/Checkbox/index.ts +2 -0
  207. package/src/components/Chip/Chip.tsx +108 -0
  208. package/src/components/Chip/index.ts +2 -0
  209. package/src/components/Divider/Divider.tsx +41 -0
  210. package/src/components/Divider/index.ts +2 -0
  211. package/src/components/Input/Input.tsx +199 -0
  212. package/src/components/Input/index.ts +2 -0
  213. package/src/components/Modal/Modal.tsx +117 -0
  214. package/src/components/Modal/index.ts +2 -0
  215. package/src/components/Navbar/Navbar.tsx +278 -0
  216. package/src/components/Navbar/index.ts +2 -0
  217. package/src/components/ProgressBar/ProgressBar.tsx +99 -0
  218. package/src/components/ProgressBar/index.ts +2 -0
  219. package/src/components/Radio/Radio.tsx +103 -0
  220. package/src/components/Radio/index.ts +2 -0
  221. package/src/components/SearchBar/SearchBar.tsx +115 -0
  222. package/src/components/SearchBar/index.ts +2 -0
  223. package/src/components/Skeleton/Skeleton.tsx +74 -0
  224. package/src/components/Skeleton/index.ts +2 -0
  225. package/src/components/Spinner/Spinner.tsx +58 -0
  226. package/src/components/Spinner/index.ts +2 -0
  227. package/src/components/Tabs/Tabs.tsx +124 -0
  228. package/src/components/Tabs/index.ts +2 -0
  229. package/src/components/Toast/Toast.tsx +128 -0
  230. package/src/components/Toast/index.ts +2 -0
  231. package/src/components/Toggle/Toggle.tsx +109 -0
  232. package/src/components/Toggle/index.ts +2 -0
  233. package/src/index.ts +87 -0
  234. package/src/theme/ThemeProvider.tsx +96 -0
  235. package/src/theme/index.ts +5 -0
  236. package/src/theme/tokens.ts +225 -0
  237. package/src/theme/useTheme.ts +37 -0
package/README.md ADDED
@@ -0,0 +1,152 @@
1
+ # @designbasekorea/ui-native
2
+
3
+ Designbase React Native UI 컴포넌트 라이브러리 — 앱 개발에 최적화된 네이티브 컴포넌트
4
+
5
+ ## 📦 설치
6
+
7
+ ```bash
8
+ npm install @designbasekorea/ui-native
9
+ ```
10
+
11
+ ### Peer Dependencies
12
+ ```bash
13
+ npm install react react-native
14
+ ```
15
+
16
+ ## 🚀 시작하기
17
+
18
+ 앱 루트에 `ThemeProvider`를 감싸주세요:
19
+
20
+ ```tsx
21
+ import { ThemeProvider } from '@designbasekorea/ui-native';
22
+
23
+ export default function App() {
24
+ return (
25
+ <ThemeProvider theme="auto">
26
+ <MyApp />
27
+ </ThemeProvider>
28
+ );
29
+ }
30
+ ```
31
+
32
+ ## 📋 사용 가능한 컴포넌트
33
+
34
+ ### 🎨 테마 시스템
35
+ | Export | 설명 |
36
+ |--------|------|
37
+ | `ThemeProvider` | Context 기반 테마 (light/dark/auto) |
38
+ | `useTheme()` | 현재 테마 토큰 접근 훅 |
39
+ | `lightTheme` / `darkTheme` | 기본 테마 토큰 |
40
+
41
+ ### 🧩 컴포넌트 (10개)
42
+ | 컴포넌트 | 설명 | 주요 Props |
43
+ |----------|------|-----------|
44
+ | **Button** | 버튼 | variant, size, loading, icon |
45
+ | **Input** | 텍스트 입력 | label, error, helperText, icon |
46
+ | **Card** | 카드 | variant, image, title, footer |
47
+ | **Badge** | 배지 | variant, type(dot/number/text) |
48
+ | **Avatar** | 아바타 | src, initials, status |
49
+ | **Chip** | 칩/태그 | deletable, selected, variant |
50
+ | **Divider** | 구분선 | orientation, thickness |
51
+ | **Spinner** | 로딩 | size, color, label |
52
+ | **Toggle** | 스위치 | isSelected, size |
53
+ | **Alert** | 알림 | variant, closable, action |
54
+
55
+ ## 💡 사용 예시
56
+
57
+ ```tsx
58
+ import {
59
+ Button,
60
+ Input,
61
+ Card,
62
+ Badge,
63
+ Avatar,
64
+ Toggle,
65
+ Alert,
66
+ useTheme,
67
+ } from '@designbasekorea/ui-native';
68
+ import { CheckIcon } from '@designbasekorea/icons';
69
+
70
+ function ProfileScreen() {
71
+ const { theme, isDark, toggleTheme } = useTheme();
72
+
73
+ return (
74
+ <View style={{ flex: 1, padding: theme.spacing.m, backgroundColor: theme.colors.bg.primary }}>
75
+ <Avatar src="https://..." size="xl" status="online" />
76
+
77
+ <Input
78
+ label="이름"
79
+ placeholder="이름을 입력하세요"
80
+ size="m"
81
+ />
82
+
83
+ <Card
84
+ title="프로필 설정"
85
+ subtitle="개인 정보를 관리하세요"
86
+ variant="outlined"
87
+ >
88
+ <Toggle size="m" onChange={toggleTheme}>
89
+ 다크모드
90
+ </Toggle>
91
+ </Card>
92
+
93
+ <Button
94
+ variant="primary"
95
+ size="m"
96
+ startIcon={<CheckIcon size={16} color="#fff" />}
97
+ onPress={() => {}}
98
+ >
99
+ 저장
100
+ </Button>
101
+
102
+ <Alert
103
+ variant="success"
104
+ message="프로필이 저장되었습니다."
105
+ closable
106
+ />
107
+ </View>
108
+ );
109
+ }
110
+ ```
111
+
112
+ ## 🎨 테마 커스텀
113
+
114
+ ```tsx
115
+ <ThemeProvider
116
+ theme="light"
117
+ lightThemeOverride={{
118
+ colors: {
119
+ brand: {
120
+ primary: '#FF6B6B', // 커스텀 브랜드 컬러
121
+ },
122
+ },
123
+ }}
124
+ >
125
+ <App />
126
+ </ThemeProvider>
127
+ ```
128
+
129
+ ## 📁 구조
130
+
131
+ ```
132
+ packages/ui-native/
133
+ ├── src/
134
+ │ ├── theme/
135
+ │ │ ├── tokens.ts ← 디자인 토큰 (Light/Dark)
136
+ │ │ ├── ThemeProvider.tsx ← Context 기반 테마
137
+ │ │ └── useTheme.ts ← 테마 접근 훅
138
+ │ ├── components/
139
+ │ │ ├── Button/
140
+ │ │ ├── Input/
141
+ │ │ ├── Card/
142
+ │ │ ├── Badge/
143
+ │ │ ├── Avatar/
144
+ │ │ ├── Chip/
145
+ │ │ ├── Divider/
146
+ │ │ ├── Spinner/
147
+ │ │ ├── Toggle/
148
+ │ │ └── Alert/
149
+ │ └── index.ts ← 메인 엔트리 포인트
150
+ ├── package.json
151
+ └── tsconfig.json
152
+ ```
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Alert 컴포넌트 (React Native)
3
+ *
4
+ * 스타일링 토큰 경로:
5
+ * - 색상: theme.color.aliases.feedback.{success|warning|error|info}.{fg|bg}
6
+ * - 텍스트: theme.color.aliases.text.{primary|tertiary}
7
+ * - 라운드: theme.border.semantic.radius.m
8
+ * - 패딩: theme.spacing.aliases.padding.m
9
+ * - 폰트: theme.typography.foundation.fontSize.{xs|s}
10
+ *
11
+ * 원본: packages/ui/src/components/Alert/Alert.tsx
12
+ */
13
+ import React from 'react';
14
+ import { type ViewStyle } from 'react-native';
15
+ export type AlertVariant = 'success' | 'warning' | 'error' | 'info';
16
+ export interface AlertProps {
17
+ variant?: AlertVariant;
18
+ title?: string;
19
+ message: string;
20
+ icon?: React.ReactNode;
21
+ closable?: boolean;
22
+ onClose?: () => void;
23
+ actionLabel?: string;
24
+ onAction?: () => void;
25
+ style?: ViewStyle;
26
+ }
27
+ export declare const Alert: React.FC<AlertProps>;
28
+ export default Alert;
29
+ //# sourceMappingURL=Alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../src/components/Alert/Alert.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGjF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpE,MAAM,WAAW,UAAU;IACvB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;CACrB;AAMD,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAsDtC,CAAC;AAeF,eAAe,KAAK,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { View, Text, Pressable, StyleSheet } from 'react-native';
3
+ import { useTheme } from '../../theme/useTheme';
4
+ const VARIANT_ICONS = {
5
+ success: '✓', warning: '⚠', error: '✕', info: 'ℹ',
6
+ };
7
+ export const Alert = ({ variant = 'info', title, message, icon, closable = false, onClose, actionLabel, onAction, style, }) => {
8
+ const { theme } = useTheme();
9
+ // ─── 토큰에서 가져오기 ───
10
+ const feedback = theme.color.aliases?.feedback ?? {};
11
+ const text = theme.color.aliases?.text ?? {};
12
+ const padding = theme.spacing.aliases?.padding ?? {};
13
+ const fontSize = theme.typography.foundation?.fontSize ?? {};
14
+ const borderRadius = theme.border.semantic?.radius?.m ?? 8;
15
+ const gap = theme.spacing.aliases?.gap ?? {};
16
+ const variantMap = {
17
+ success: 'success', warning: 'warning', error: 'error', info: 'info',
18
+ };
19
+ const feedbackKey = variantMap[variant];
20
+ const bgColor = feedback[feedbackKey]?.bg ?? '#EDF9FF';
21
+ const fgColor = feedback[feedbackKey]?.fg ?? '#0683FF';
22
+ return (_jsx(View, { style: [
23
+ styles.container,
24
+ {
25
+ backgroundColor: bgColor, borderRadius,
26
+ borderLeftWidth: 4, borderLeftColor: fgColor,
27
+ padding: padding.m ?? 12,
28
+ },
29
+ style,
30
+ ], accessibilityRole: "alert", children: _jsxs(View, { style: [styles.content, { gap: gap.m ?? 12 }], children: [_jsx(View, { style: styles.iconContainer, children: icon || _jsx(Text, { style: [styles.defaultIcon, { color: fgColor }], children: VARIANT_ICONS[variant] }) }), _jsxs(View, { style: [styles.textContainer, { gap: gap.xxs ?? 2 }], children: [title && _jsx(Text, { style: [styles.title, { color: fgColor, fontSize: fontSize.s ?? 14 }], children: title }), _jsx(Text, { style: [styles.message, { color: text.primary ?? '#17191A', fontSize: fontSize.s ?? 14 }], children: message }), actionLabel && onAction && (_jsx(Pressable, { onPress: onAction, style: { marginTop: padding.xxs ?? 2 }, children: _jsx(Text, { style: { color: fgColor, fontSize: fontSize.xs ?? 12, fontWeight: '600' }, children: actionLabel }) }))] }), closable && (_jsx(Pressable, { onPress: onClose, hitSlop: 8, accessibilityRole: "button", accessibilityLabel: "\uB2EB\uAE30", style: styles.closeButton, children: _jsx(Text, { style: { fontSize: fontSize.s ?? 14, color: text.tertiary ?? '#757B80' }, children: "\u2715" }) }))] }) }));
31
+ };
32
+ Alert.displayName = 'Alert';
33
+ const styles = StyleSheet.create({
34
+ container: { width: '100%' },
35
+ content: { flexDirection: 'row', alignItems: 'flex-start' },
36
+ iconContainer: { marginTop: 2 },
37
+ defaultIcon: { fontSize: 16, fontWeight: '700' },
38
+ textContainer: { flex: 1 },
39
+ title: { fontWeight: '600' },
40
+ message: { lineHeight: 20 },
41
+ closeButton: { padding: 2 },
42
+ });
43
+ export default Alert;
44
+ //# sourceMappingURL=Alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.js","sourceRoot":"","sources":["../../../src/components/Alert/Alert.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { Alert } from './Alert';
2
+ export type { AlertProps, AlertVariant } from './Alert';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Alert } from './Alert';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Avatar 컴포넌트 (React Native)
3
+ *
4
+ * 스타일링 토큰 경로:
5
+ * - 사이즈: theme.size.semantic.avatar.{xs|s|m|l|xl|2xl}
6
+ * - 색상: theme.color.aliases.{surface|text|feedback}.*
7
+ * - 폰트: theme.typography.foundation.fontSize.*
8
+ *
9
+ * 원본: packages/ui/src/components/Avatar/Avatar.tsx
10
+ */
11
+ import React from 'react';
12
+ import { type ViewStyle } from 'react-native';
13
+ export type AvatarSize = 'xs' | 's' | 'm' | 'l' | 'xl' | '2xl';
14
+ export type AvatarStatus = 'online' | 'offline' | 'away' | 'busy';
15
+ export interface AvatarProps {
16
+ src?: string;
17
+ alt?: string;
18
+ initials?: string;
19
+ icon?: React.ReactNode;
20
+ size?: AvatarSize;
21
+ status?: AvatarStatus;
22
+ onPress?: () => void;
23
+ disabled?: boolean;
24
+ style?: ViewStyle;
25
+ }
26
+ export declare const Avatar: React.FC<AvatarProps>;
27
+ export default Avatar;
28
+ //# sourceMappingURL=Avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,EACuC,KAAK,SAAS,EAC3D,MAAM,cAAc,CAAC;AAGtB,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC;AAC/D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAElE,MAAM,WAAW,WAAW;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACrB;AAgBD,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAiExC,CAAC;AAUF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Avatar 컴포넌트 (React Native)
4
+ *
5
+ * 스타일링 토큰 경로:
6
+ * - 사이즈: theme.size.semantic.avatar.{xs|s|m|l|xl|2xl}
7
+ * - 색상: theme.color.aliases.{surface|text|feedback}.*
8
+ * - 폰트: theme.typography.foundation.fontSize.*
9
+ *
10
+ * 원본: packages/ui/src/components/Avatar/Avatar.tsx
11
+ */
12
+ import { useState } from 'react';
13
+ import { View, Image, Text, Pressable, StyleSheet, } from 'react-native';
14
+ import { useTheme } from '../../theme/useTheme';
15
+ const INITIALS_COLORS = [
16
+ { bg: '#E3F2FD', text: '#1976D2' }, { bg: '#F3E5F5', text: '#7B1FA2' },
17
+ { bg: '#E8F5E8', text: '#388E3C' }, { bg: '#FFF3E0', text: '#F57C00' },
18
+ { bg: '#FCE4EC', text: '#C2185B' }, { bg: '#E0F2F1', text: '#00796B' },
19
+ { bg: '#FFF8E1', text: '#F9A825' }, { bg: '#F1F8E9', text: '#689F38' },
20
+ { bg: '#E8EAF6', text: '#3F51B5' }, { bg: '#FFEBEE', text: '#D32F2F' },
21
+ ];
22
+ function getColorForText(text) {
23
+ let hash = 0;
24
+ for (let i = 0; i < text.length; i++)
25
+ hash = text.charCodeAt(i) + ((hash << 5) - hash);
26
+ return INITIALS_COLORS[Math.abs(hash) % INITIALS_COLORS.length];
27
+ }
28
+ export const Avatar = ({ src, alt, initials, icon, size = 'm', status, onPress, disabled = false, style, }) => {
29
+ const { theme } = useTheme();
30
+ const [imageError, setImageError] = useState(false);
31
+ // ─── 토큰에서 가져오기 ───
32
+ const avatarSizeTokens = theme.size.semantic?.avatar ?? {};
33
+ const aliases = theme.color.aliases ?? {};
34
+ const feedback = aliases.feedback ?? {};
35
+ const disabledOpacity = theme.opacity.foundation?.[40] ?? 0.4;
36
+ const avatarSize = avatarSizeTokens[size] ?? { xs: 16, s: 20, m: 24, l: 32, xl: 40, '2xl': 48 }[size];
37
+ const fontSizeMap = { xs: 8, s: 10, m: 12, l: 16, xl: 20, '2xl': 26 };
38
+ const statusSizeMap = { xs: 6, s: 8, m: 10, l: 12, xl: 14, '2xl': 16 };
39
+ const statusColors = {
40
+ online: feedback.success?.fg ?? '#16A34A',
41
+ offline: aliases.text?.tertiary ?? '#757B80',
42
+ away: feedback.warning?.fg ?? '#D1B400',
43
+ busy: feedback.error?.fg ?? '#DC2626',
44
+ };
45
+ const shouldShowImage = src && !imageError;
46
+ const shouldShowInitials = !shouldShowImage && initials;
47
+ const initialsColor = shouldShowInitials ? getColorForText(initials) : null;
48
+ const content = (_jsxs(View, { style: [
49
+ styles.container,
50
+ {
51
+ width: avatarSize, height: avatarSize, borderRadius: avatarSize / 2,
52
+ backgroundColor: shouldShowInitials ? initialsColor?.bg : (aliases.surface?.['layer-2'] ?? '#E8EEF2'),
53
+ },
54
+ disabled && { opacity: disabledOpacity }, style,
55
+ ], accessibilityRole: "image", accessibilityLabel: alt || initials || '아바타', children: [shouldShowImage && (_jsx(Image, { source: { uri: src }, style: [styles.image, { width: avatarSize, height: avatarSize, borderRadius: avatarSize / 2 }], onError: () => setImageError(true) })), shouldShowInitials && (_jsx(Text, { style: { fontSize: fontSizeMap[size], color: initialsColor?.text, fontWeight: '600' }, children: initials.charAt(0).toUpperCase() })), !shouldShowImage && !shouldShowInitials && icon, status && (_jsx(View, { style: [styles.status, {
56
+ width: statusSizeMap[size], height: statusSizeMap[size],
57
+ borderRadius: statusSizeMap[size] / 2,
58
+ backgroundColor: statusColors[status],
59
+ borderColor: aliases.surface?.base ?? '#FFFFFF', borderWidth: 2,
60
+ }] }))] }));
61
+ if (onPress) {
62
+ return (_jsx(Pressable, { onPress: onPress, disabled: disabled, accessibilityRole: "button", style: ({ pressed }) => pressed ? { opacity: 0.7 } : undefined, children: content }));
63
+ }
64
+ return content;
65
+ };
66
+ Avatar.displayName = 'Avatar';
67
+ const styles = StyleSheet.create({
68
+ container: { alignItems: 'center', justifyContent: 'center', overflow: 'hidden' },
69
+ image: { position: 'absolute' },
70
+ status: { position: 'absolute', bottom: 0, right: 0 },
71
+ });
72
+ export default Avatar;
73
+ //# sourceMappingURL=Avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { Avatar } from './Avatar';
2
+ export type { AvatarProps, AvatarSize, AvatarStatus } from './Avatar';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Avatar } from './Avatar';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Badge 컴포넌트 (React Native)
3
+ *
4
+ * 스타일링 토큰 경로:
5
+ * - 색상: theme.color.aliases.{brand|feedback}.*, theme.color.aliases.text.*
6
+ * - 폰트: theme.typography.foundation.fontSize.{xs|s}
7
+ * - 간격: theme.spacing.aliases.padding.{xxs|xs|s}
8
+ *
9
+ * 원본: packages/ui/src/components/Badge/Badge.tsx
10
+ */
11
+ import React from 'react';
12
+ import { type ViewStyle } from 'react-native';
13
+ export type BadgeSize = 's' | 'm' | 'l';
14
+ export type BadgeVariant = 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'danger';
15
+ export type BadgeType = 'dot' | 'number' | 'text' | 'outlined';
16
+ export interface BadgeProps {
17
+ children?: React.ReactNode;
18
+ size?: BadgeSize;
19
+ variant?: BadgeVariant;
20
+ type?: BadgeType;
21
+ count?: number;
22
+ maxCount?: number;
23
+ disabled?: boolean;
24
+ style?: ViewStyle;
25
+ }
26
+ export declare const Badge: React.FC<BadgeProps>;
27
+ export default Badge;
28
+ //# sourceMappingURL=Badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/Badge.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGtE,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACxC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC/F,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAE/D,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CA4DtC,CAAC;AASF,eAAe,KAAK,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { View, Text, StyleSheet } from 'react-native';
3
+ import { useTheme } from '../../theme/useTheme';
4
+ export const Badge = ({ children, size = 'm', variant = 'primary', type = 'text', count, maxCount = 99, disabled = false, style, }) => {
5
+ const { theme } = useTheme();
6
+ const aliases = theme.color.aliases ?? {};
7
+ const feedback = aliases.feedback ?? {};
8
+ const padding = theme.spacing.aliases?.padding ?? {};
9
+ const fontSize = theme.typography.foundation?.fontSize ?? {};
10
+ const disabledOpacity = theme.opacity.foundation?.[40] ?? 0.4;
11
+ const sizeConfig = {
12
+ s: { minWidth: 16, height: 16, fontSize: fontSize.xs ?? 12 - 2, paddingH: padding.xxs ?? 2, dotSize: 6 },
13
+ m: { minWidth: 20, height: 20, fontSize: fontSize.xs ?? 12 - 1, paddingH: padding.xs ?? 4, dotSize: 8 },
14
+ l: { minWidth: 24, height: 24, fontSize: fontSize.xs ?? 12, paddingH: padding.s ?? 8, dotSize: 10 },
15
+ }[size];
16
+ const variantColors = {
17
+ primary: { bg: aliases.brand?.primary ?? '#006FFF', text: '#FFFFFF' },
18
+ secondary: { bg: aliases.surface?.['layer-2'] ?? '#E8EEF2', text: aliases.text?.secondary ?? '#464A4D' },
19
+ info: { bg: feedback.info?.bg ?? '#EDF9FF', text: feedback.info?.fg ?? '#0683FF' },
20
+ success: { bg: feedback.success?.bg ?? '#F0FDF5', text: feedback.success?.fg ?? '#16A34A' },
21
+ warning: { bg: feedback.warning?.bg ?? '#FFFFE7', text: feedback.warning?.fg ?? '#D1B400' },
22
+ danger: { bg: feedback.error?.bg ?? '#FEF2F2', text: feedback.error?.fg ?? '#DC2626' },
23
+ }[variant];
24
+ if (type === 'dot') {
25
+ return (_jsx(View, { style: [
26
+ { width: sizeConfig.dotSize, height: sizeConfig.dotSize, borderRadius: sizeConfig.dotSize / 2, backgroundColor: variantColors.bg },
27
+ disabled && { opacity: disabledOpacity }, style,
28
+ ] }));
29
+ }
30
+ const displayContent = type === 'number' && count !== undefined
31
+ ? (count > maxCount ? `${maxCount}+` : String(count))
32
+ : children;
33
+ const isOutlined = type === 'outlined';
34
+ return (_jsx(View, { style: [
35
+ styles.badge,
36
+ {
37
+ minWidth: sizeConfig.minWidth, height: sizeConfig.height,
38
+ borderRadius: sizeConfig.height / 2, paddingHorizontal: sizeConfig.paddingH,
39
+ backgroundColor: isOutlined ? 'transparent' : variantColors.bg,
40
+ borderWidth: isOutlined ? 1 : 0,
41
+ borderColor: isOutlined ? variantColors.bg : undefined,
42
+ },
43
+ disabled && { opacity: disabledOpacity }, style,
44
+ ], accessibilityRole: "text", children: typeof displayContent === 'string' || typeof displayContent === 'number' ? (_jsx(Text, { style: [styles.text, { fontSize: sizeConfig.fontSize, color: isOutlined ? variantColors.bg : variantColors.text }], children: displayContent })) : displayContent }));
45
+ };
46
+ Badge.displayName = 'Badge';
47
+ const styles = StyleSheet.create({
48
+ badge: { alignItems: 'center', justifyContent: 'center', alignSelf: 'flex-start' },
49
+ text: { fontWeight: '600', textAlign: 'center' },
50
+ });
51
+ export default Badge;
52
+ //# sourceMappingURL=Badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../../src/components/Badge/Badge.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { Badge } from './Badge';
2
+ export type { BadgeProps, BadgeSize, BadgeVariant, BadgeType } from './Badge';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Badge } from './Badge';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Badge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * BottomNavigation 컴포넌트 (React Native)
3
+ *
4
+ * 스타일링 토큰 경로:
5
+ * - 배경: theme.color.aliases.surface.base
6
+ * - 보더: theme.color.aliases.border.base
7
+ * - 활성: theme.color.aliases.brand.primary
8
+ * - 비활성: theme.color.aliases.text.tertiary
9
+ * - 폰트: theme.typography.foundation.fontSize.xs
10
+ * - 그림자: theme.shadow.foundation.m
11
+ */
12
+ import React from 'react';
13
+ import { type ViewStyle } from 'react-native';
14
+ export interface BottomNavItem {
15
+ key: string;
16
+ label: string;
17
+ icon: React.ReactNode;
18
+ activeIcon?: React.ReactNode;
19
+ badge?: number;
20
+ }
21
+ export interface BottomNavigationProps {
22
+ items: BottomNavItem[];
23
+ activeKey: string;
24
+ onChange: (key: string) => void;
25
+ showLabels?: boolean;
26
+ style?: ViewStyle;
27
+ }
28
+ export declare const BottomNavigation: React.FC<BottomNavigationProps>;
29
+ export default BottomNavigation;
30
+ //# sourceMappingURL=BottomNavigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BottomNavigation.d.ts","sourceRoot":"","sources":["../../../src/components/BottomNavigation/BottomNavigation.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGjF,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IAClC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA4D5D,CAAC;AAWF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { View, Text, Pressable, StyleSheet } from 'react-native';
3
+ import { useTheme } from '../../theme/useTheme';
4
+ export const BottomNavigation = ({ items, activeKey, onChange, showLabels = true, style, }) => {
5
+ const { theme } = useTheme();
6
+ const surface = theme.color.aliases?.surface ?? {};
7
+ const brand = theme.color.aliases?.brand ?? {};
8
+ const textColors = theme.color.aliases?.text ?? {};
9
+ const borders = theme.color.aliases?.border ?? {};
10
+ const fontSize = theme.typography.foundation?.fontSize ?? {};
11
+ const shadow = theme.shadow.foundation ?? {};
12
+ const padding = theme.spacing.aliases?.padding ?? {};
13
+ const toShadowStyle = (s) => s ? {
14
+ shadowColor: s.shadowColor ?? '#000',
15
+ shadowOffset: { width: s.shadowOffsetX ?? 0, height: -(s.shadowOffsetY ?? 4) },
16
+ shadowOpacity: s.shadowOpacity ?? 0.1,
17
+ shadowRadius: s.shadowRadius ?? 6,
18
+ elevation: s.elevation ?? 8,
19
+ } : {};
20
+ return (_jsx(View, { style: [
21
+ styles.container,
22
+ {
23
+ backgroundColor: surface.base ?? '#FFFFFF',
24
+ borderTopColor: borders.base ?? '#E8EEF2',
25
+ paddingBottom: padding.xs ?? 4,
26
+ ...toShadowStyle(shadow.m),
27
+ },
28
+ style,
29
+ ], children: items.map((item) => {
30
+ const isActive = activeKey === item.key;
31
+ const activeColor = brand.primary ?? '#006FFF';
32
+ const inactiveColor = textColors.tertiary ?? '#757B80';
33
+ return (_jsxs(Pressable, { onPress: () => onChange(item.key), accessibilityRole: "tab", accessibilityState: { selected: isActive }, style: [styles.item, { paddingTop: padding.s ?? 8 }], children: [_jsxs(View, { children: [isActive ? (item.activeIcon ?? item.icon) : item.icon, item.badge !== undefined && item.badge > 0 && (_jsx(View, { style: [styles.badge, { backgroundColor: theme.color.aliases?.feedback?.error?.fg ?? '#DC2626' }], children: _jsx(Text, { style: styles.badgeText, children: item.badge > 99 ? '99+' : item.badge }) }))] }), showLabels && (_jsx(Text, { style: {
34
+ fontSize: fontSize.xs ?? 12 - 2,
35
+ color: isActive ? activeColor : inactiveColor,
36
+ fontWeight: isActive ? '600' : '400', marginTop: 2,
37
+ }, children: item.label }))] }, item.key));
38
+ }) }));
39
+ };
40
+ BottomNavigation.displayName = 'BottomNavigation';
41
+ const styles = StyleSheet.create({
42
+ container: { flexDirection: 'row', borderTopWidth: 1 },
43
+ item: { flex: 1, alignItems: 'center', justifyContent: 'center' },
44
+ badge: { position: 'absolute', top: -4, right: -8, minWidth: 16, height: 16, borderRadius: 8, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 3 },
45
+ badgeText: { color: '#FFFFFF', fontSize: 9, fontWeight: '700' },
46
+ });
47
+ export default BottomNavigation;
48
+ //# sourceMappingURL=BottomNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BottomNavigation.js","sourceRoot":"","sources":["../../../src/components/BottomNavigation/BottomNavigation.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { BottomNavigation } from './BottomNavigation';
2
+ export type { BottomNavigationProps, BottomNavItem } from './BottomNavigation';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/BottomNavigation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { BottomNavigation } from './BottomNavigation';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/BottomNavigation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}