@solapi/ui-kit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -0
- package/dist/GlobalMfa-F9T2HvGA.cjs +1 -0
- package/dist/GlobalMfa-a9UddAbl.js +2176 -0
- package/dist/components/AuthFlow/AuthFlowGoogleOtpForm.d.ts +11 -0
- package/dist/components/AuthFlow/AuthFlowPasswordForm.d.ts +15 -0
- package/dist/components/AuthFlow/AuthFlowQueueItem.d.ts +6 -0
- package/dist/components/AuthFlow/AuthFlowSelfCert.d.ts +16 -0
- package/dist/components/AuthFlow/AuthFlowSimpleCert.d.ts +15 -0
- package/dist/components/AuthFlow/AuthFlowSmsForm.d.ts +33 -0
- package/dist/components/AuthFlow/AuthFlowTimer.d.ts +16 -0
- package/dist/components/AuthFlow/index.d.ts +6 -0
- package/dist/components/Confirm/Confirm.d.ts +3 -0
- package/dist/components/DatePicker/DatePicker.d.ts +21 -0
- package/dist/components/DatePicker/DateTimeField.d.ts +16 -0
- package/dist/components/DatePicker/MonthCalendar.d.ts +19 -0
- package/dist/components/DatePicker/TimeSelector.d.ts +13 -0
- package/dist/components/DatePicker/index.d.ts +4 -0
- package/dist/components/GlobalMfa/GlobalMfa.d.ts +3 -0
- package/dist/components/ListFilter/FilterChip.d.ts +21 -0
- package/dist/components/ListFilter/FilterPanelContent.d.ts +9 -0
- package/dist/components/ListFilter/ListFilter.d.ts +37 -0
- package/dist/components/ListFilter/NumberConditionSelect.d.ts +6 -0
- package/dist/components/ListFilter/SelectOptionButtons.d.ts +9 -0
- package/dist/components/ListFilter/index.d.ts +2 -0
- package/dist/components/Menu/Menu.d.ts +43 -0
- package/dist/components/Menu/index.d.ts +2 -0
- package/dist/components/Mfa/MfaEmail.d.ts +17 -0
- package/dist/components/Mfa/MfaMultiCert.d.ts +23 -0
- package/dist/components/Mfa/MfaPasswordNumPad.d.ts +11 -0
- package/dist/components/Mfa/MfaQueueItem.d.ts +7 -0
- package/dist/components/Mfa/MfaSelfCert.d.ts +20 -0
- package/dist/components/Mfa/MfaSms.d.ts +28 -0
- package/dist/components/Mfa/index.d.ts +4 -0
- package/dist/components/MiniTabs/MiniTabs.d.ts +28 -0
- package/dist/components/MiniTabs/index.d.ts +2 -0
- package/dist/components/Modal/Modal.d.ts +9 -0
- package/dist/components/Snackbar/Snackbar.d.ts +9 -0
- package/dist/components/Tabs/Tabs.d.ts +22 -0
- package/dist/components/Tabs/index.d.ts +1 -0
- package/dist/components/TextInput/TextInput.d.ts +30 -0
- package/dist/components/TextInput/index.d.ts +2 -0
- package/dist/components/common/Box.d.ts +27 -0
- package/dist/components/common/Button.d.ts +22 -0
- package/dist/components/common/Collapse.d.ts +19 -0
- package/dist/components/common/Divider.d.ts +15 -0
- package/dist/components/common/Grid.d.ts +51 -0
- package/dist/components/common/IconButton.d.ts +20 -0
- package/dist/components/common/Info.d.ts +10 -0
- package/dist/components/common/Paper.d.ts +19 -0
- package/dist/components/common/Popover.d.ts +20 -0
- package/dist/components/common/Stack.d.ts +17 -0
- package/dist/components/common/Typography.d.ts +20 -0
- package/dist/components/common/index.d.ts +15 -0
- package/dist/export/GlobalUIProvider.d.ts +20 -0
- package/dist/export/UIHost.d.ts +1 -0
- package/dist/export/UIProvider.d.ts +42 -0
- package/dist/export/index.d.ts +13 -0
- package/dist/federation/componentLoader.d.ts +8 -0
- package/dist/federation/hookLoader.d.ts +8 -0
- package/dist/federation/index.d.ts +4 -0
- package/dist/federation/providerLoader.d.ts +11 -0
- package/dist/federation/safeImport.d.ts +14 -0
- package/dist/federation.cjs +1 -0
- package/dist/federation.js +132 -0
- package/dist/hooks/useConfirm.d.ts +7 -0
- package/dist/hooks/useEnhancedMutation.d.ts +8 -0
- package/dist/hooks/useLingeringValue.d.ts +7 -0
- package/dist/hooks/useModal.d.ts +7 -0
- package/dist/hooks/useSnackbar.d.ts +12 -0
- package/dist/index-BpqgYc0Q.cjs +5 -0
- package/dist/index-DV20NPKR.js +18341 -0
- package/dist/index.cjs +1 -0
- package/dist/index.js +43 -0
- package/dist/lib/createMutationConfig.d.ts +62 -0
- package/dist/lib/phoneUtils.d.ts +1 -0
- package/dist/lib/typeDetector.d.ts +59 -0
- package/dist/stores/createConfirmStore.d.ts +24 -0
- package/dist/stores/createModalStore.d.ts +37 -0
- package/dist/stores/createSnackbarStore.d.ts +20 -0
- package/dist/stores/requestQueueStore.d.ts +41 -0
- package/dist/theme/ThemeProvider.d.ts +29 -0
- package/dist/theme/index.d.ts +8 -0
- package/dist/theme/tokens.d.ts +17 -0
- package/dist/theme/types.d.ts +126 -0
- package/dist/theme/utils.d.ts +52 -0
- package/dist/ui-kit.css +1 -0
- package/dist/utils/scrollLock.d.ts +6 -0
- package/dist/utils/supportAdapter.d.ts +22 -0
- package/package.json +66 -0
package/README.md
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# @solapi/ui-kit
|
|
2
|
+
|
|
3
|
+
Solapi 공용 UI 컴포넌트 라이브러리.
|
|
4
|
+
**Module Federation**(CDN) 우선 로드, CDN 장애 시 **npm 패키지**로 자동 fallback하는 구조입니다.
|
|
5
|
+
|
|
6
|
+
## 설치
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install @solapi/ui-kit
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Quick Start (Federation + npm Fallback)
|
|
13
|
+
|
|
14
|
+
### 1. Remote 등록
|
|
15
|
+
|
|
16
|
+
```js
|
|
17
|
+
// vite.remotes.config.js
|
|
18
|
+
const remoteApps = {
|
|
19
|
+
'@solapi-frontend/ui-kit': '/ui-kit/stable/assets/remote.entry.js'
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### 2. GlobalUIProvider 감싸기
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
// src/RemoteEntry.tsx
|
|
27
|
+
import { createSafeProviderLoader } from '@solapi/ui-kit/federation'
|
|
28
|
+
|
|
29
|
+
const UI_KIT_PROVIDER = async () => {
|
|
30
|
+
try {
|
|
31
|
+
return await import('@solapi-frontend/ui-kit/provider')
|
|
32
|
+
} catch {
|
|
33
|
+
return await import('@solapi/ui-kit')
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const GlobalUIProvider = createSafeProviderLoader<{
|
|
38
|
+
children?: React.ReactNode
|
|
39
|
+
portalContainer?: () => HTMLElement | null
|
|
40
|
+
}>(
|
|
41
|
+
UI_KIT_PROVIDER,
|
|
42
|
+
'GlobalUIProvider',
|
|
43
|
+
{ warningMessage: 'UI Kit CDN을 로드할 수 없습니다. npm 패키지로 대체되었습니다.' }
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
export default function RemoteEntry() {
|
|
47
|
+
return (
|
|
48
|
+
<GlobalUIProvider portalContainer={() => document.getElementById('root')}>
|
|
49
|
+
{/* 앱 컨텐츠 */}
|
|
50
|
+
</GlobalUIProvider>
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 3. 컴포넌트 로더 정의
|
|
56
|
+
|
|
57
|
+
```tsx
|
|
58
|
+
// src/uiKit/safeCompLoader.tsx
|
|
59
|
+
import { createSafeComponentLoader } from '@solapi/ui-kit/federation'
|
|
60
|
+
|
|
61
|
+
const UI_KIT_COMP = async () => {
|
|
62
|
+
try {
|
|
63
|
+
return await import('@solapi-frontend/ui-kit/components')
|
|
64
|
+
} catch {
|
|
65
|
+
return await import('@solapi/ui-kit')
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export const Tabs = createSafeComponentLoader(UI_KIT_COMP, 'Tabs')
|
|
70
|
+
export const TextInput = createSafeComponentLoader(UI_KIT_COMP, 'TextInput')
|
|
71
|
+
export const Button = createSafeComponentLoader(UI_KIT_COMP, 'Button')
|
|
72
|
+
export const Box = createSafeComponentLoader(UI_KIT_COMP, 'Box')
|
|
73
|
+
// ... 필요한 컴포넌트 추가
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 4. Hook 로더 정의
|
|
77
|
+
|
|
78
|
+
```ts
|
|
79
|
+
// src/uiKit/safeHookLoader.ts
|
|
80
|
+
import { createSafeHookLoader } from '@solapi/ui-kit/federation'
|
|
81
|
+
|
|
82
|
+
const UI_KIT_HOOKS = async () => {
|
|
83
|
+
try {
|
|
84
|
+
return await import('@solapi-frontend/ui-kit/hooks')
|
|
85
|
+
} catch {
|
|
86
|
+
return await import('@solapi/ui-kit')
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export const useSnackbar = createSafeHookLoader(UI_KIT_HOOKS, 'useSnackbar', {
|
|
91
|
+
success: msg => console.log(`[snackbar] ${msg}`),
|
|
92
|
+
error: msg => console.error(`[snackbar] ${msg}`),
|
|
93
|
+
warning: msg => console.warn(`[snackbar] ${msg}`),
|
|
94
|
+
info: msg => console.info(`[snackbar] ${msg}`)
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
export const useModal = createSafeHookLoader(UI_KIT_HOOKS, 'useModal', {
|
|
98
|
+
modals: [],
|
|
99
|
+
openModal: async () => false,
|
|
100
|
+
closeModal: () => {},
|
|
101
|
+
closeAllModals: () => {}
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
export const useConfirm = createSafeHookLoader(UI_KIT_HOOKS, 'useConfirm', {
|
|
105
|
+
confirms: [],
|
|
106
|
+
confirm: ({ message }) => Promise.resolve(window.confirm(message)),
|
|
107
|
+
alert: ({ message }) => { window.alert(message); return Promise.resolve(true) },
|
|
108
|
+
close: () => {}
|
|
109
|
+
})
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 5. 사용
|
|
113
|
+
|
|
114
|
+
```tsx
|
|
115
|
+
import { Tabs, TextInput, Button, Box } from 'uiKit/safeCompLoader'
|
|
116
|
+
import { useSnackbar, useConfirm } from 'uiKit/safeHookLoader'
|
|
117
|
+
|
|
118
|
+
function MyPage() {
|
|
119
|
+
const snackbar = useSnackbar()
|
|
120
|
+
const { confirm } = useConfirm()
|
|
121
|
+
|
|
122
|
+
const handleSave = async () => {
|
|
123
|
+
const ok = await confirm({ title: '저장', message: '저장하시겠습니까?' })
|
|
124
|
+
if (ok) snackbar.success('저장되었습니다!')
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return (
|
|
128
|
+
<Box padding={16}>
|
|
129
|
+
<Tabs
|
|
130
|
+
items={[{ label: 'Tab 1', value: '1' }, { label: 'Tab 2', value: '2' }]}
|
|
131
|
+
value={tabValue}
|
|
132
|
+
onChange={setTabValue}
|
|
133
|
+
/>
|
|
134
|
+
<TextInput label="이름" placeholder="이름을 입력하세요" />
|
|
135
|
+
<Button onClick={handleSave}>저장</Button>
|
|
136
|
+
</Box>
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
> Federation이 정상이면 CDN에서 로드 (번들 크기 0), 장애 시 npm 패키지에서 자동 로드됩니다.
|
|
142
|
+
|
|
143
|
+
## 문서
|
|
144
|
+
|
|
145
|
+
| 문서 | 설명 |
|
|
146
|
+
|------|------|
|
|
147
|
+
| [시작하기](docs/getting-started.md) | 설치, 개발, 빌드 |
|
|
148
|
+
| [아키텍처](docs/architecture.md) | 패키지/모듈/프로젝트 구조, Provider 계층 |
|
|
149
|
+
| [사용 가이드](docs/usage-guide.md) | Federation + npm Fallback 상세 가이드, 마이그레이션 |
|
|
150
|
+
| [Federation API](docs/federation-api.md) | createSafeProviderLoader, createSafeComponentLoader, createSafeHookLoader |
|
|
151
|
+
| [GlobalUIProvider](docs/global-ui-provider.md) | Props, Portal, MFA, 로컬 개발 설정 |
|
|
152
|
+
| [컴포넌트 추가](docs/contributing.md) | 새 UI 컴포넌트/Hook 추가 가이드 |
|
|
153
|
+
| [안티패턴](docs/anti-patterns.md) | 흔한 실수와 올바른 대안 |
|