Observed since 20 Oct, 22:01 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
@0610studio/zs-ui
EXPO ZS-UI
This library was created using create-expo-module, a tool for creating native modules for Expo projects.
ZS-ui는 JavaScript만으로 구현된 Expo용 UI 컴포넌트 라이브러리입니다.
다크 모드, 테마, 타이포그래피, Alert, BottomSheet와 같은 주요 UI 요소가 포함되어 있으며, 직관적이고 일관된 사용자 인터페이스를 구현할 수 있습니다.
npx expo install @0610studio/zs-ui
사용법은 문서를 확인해주세요.
문서 사이트의 Playground에서 저장소 소스로 빌드한 예제를 바로 조작할 수 있습니다.
저장소를 받아 실제 기기에서 확인하려면 아래를 실행합니다. 이 저장소는 pnpm만 사용합니다.
pnpm install
pnpm start:ios # iOS 시뮬레이터
pnpm start:android # Android 에뮬레이터
Skia를 사용하는 ZSBorderBeam, ZSSkeleton의 shimmer 효과는 iOS·Android 전용입니다. 웹에서는 효과 없이 콘텐츠만 렌더링됩니다. ZSCalendar는 웹을 지원하지 않습니다 — 웹에서는 아무것도 렌더링하지 않고 개발 모드에서 한 번 경고합니다(웹 빌드가 깨지지는 않습니다). 그 외 컴포넌트는 웹을 포함한 세 플랫폼에서 동작합니다.
ZSCalendar가 추가되면서 react-native-gesture-handler가 필수 peer 의존성이 되었습니다. 0.20.x에서 올라온다면 설치가 필요합니다.
npx expo install react-native-gesture-handler
앱 루트를 GestureHandlerRootView로 감싸주세요. 이미 react-navigation이나 다른 제스처 기반 라이브러리를 쓰고 있다면 대부분 충족되어 있습니다.
import { GestureHandlerRootView } from 'react-native-gesture-handler';
export default function App() {
return (
<GestureHandlerRootView style={{ flex: 1 }}>
<ThemeProvider>{/* ... */}</ThemeProvider>
</GestureHandlerRootView>
);
}
ZSCalendar를 쓰지 않아도 설치는 필요합니다. 배포물이 CommonJS 번들이라 tree-shaking이 없어, 라이브러리를 import하는 순간 모듈이 평가되기 때문입니다.
| 항목 | 값 |
|---|---|
| 상태 | ✅ 성공 |
| 실행 시간 | 2026. 08. 31. 오후 04:11 |
| 전체 테스트 | 281 |
| 성공 | ✅ 281 |
| 실패 | ✅ 0 |
| 성공률 | 100.0% |
| 항목 | 커버리지 | 상태 |
|---|---|---|
| Statements | 93.0% | 🟢 |
| Branches | 88.8% | 🟡 |
| Functions | 80.6% | 🟡 |
| Lines | 93.0% | 🟢 |
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
expoEnvironment{
"local_name": "expo",
"alias": false,
"peer_metadata": null
} | 56.0.12 | development |
jestEnvironment{
"local_name": "jest",
"alias": false,
"peer_metadata": null
} | ^29 | development |
reactEnvironment{
"local_name": "react",
"alias": false,
"peer_metadata": null
} | 19.2.3 | development |
eslintEnvironment{
"local_name": "eslint",
"alias": false,
"peer_metadata": null
} | ^8.57.1 | development |
ts-jestEnvironment{
"local_name": "ts-jest",
"alias": false,
"peer_metadata": null
} | ^29.4.11 | development |
jest-expoEnvironment{
"local_name": "jest-expo",
"alias": false,
"peer_metadata": null
} | ~56.0.5 | development |
react-domEnvironment{
"local_name": "react-dom",
"alias": false,
"peer_metadata": null
} | 19.2.3 | development |
babel-jestEnvironment{
"local_name": "babel-jest",
"alias": false,
"peer_metadata": null
} | ^29 | development |
typescriptEnvironment{
"local_name": "typescript",
"alias": false,
"peer_metadata": null
} | ~6.0.3 | development |
@babel/coreEnvironment{
"local_name": "@babel/core",
"alias": false,
"peer_metadata": null
} | ^7.20.0 | development |
@types/jestEnvironment{
"local_name": "@types/jest",
"alias": false,
"peer_metadata": null
} | ^29.5.12 | development |
expo-routerEnvironment{
"local_name": "expo-router",
"alias": false,
"peer_metadata": null
} | ~56.2.11 | development |
@types/reactEnvironment{
"local_name": "@types/react",
"alias": false,
"peer_metadata": null
} | ~19.2.14 | development |
expo-linkingEnvironment{
"local_name": "expo-linking",
"alias": false,
"peer_metadata": null
} | ~56.0.14 | development |
react-nativeEnvironment{
"local_name": "react-native",
"alias": false,
"peer_metadata": null
} | 0.85.3 | development |
expo-constantsEnvironment{
"local_name": "expo-constants",
"alias": false,
"peer_metadata": null
} | ~56.0.18 | development |
react-native-svgEnvironment{
"local_name": "react-native-svg",
"alias": false,
"peer_metadata": null
} | 15.15.4 | development |
@babel/preset-reactEnvironment{
"local_name": "@babel/preset-react",
"alias": false,
"peer_metadata": null
} | ^7.29.7 | development |
@expo/metro-runtimeEnvironment{
"local_name": "@expo/metro-runtime",
"alias": false,
"peer_metadata": null
} | ~56.0.15 | development |
expo-module-scriptsEnvironment{
"local_name": "expo-module-scripts",
"alias": false,
"peer_metadata": null
} | ^56.0.3 | development |
expo-navigation-barEnvironment{
"local_name": "expo-navigation-bar",
"alias": false,
"peer_metadata": null
} | ~56.0.3 | development |
react-test-rendererEnvironment{
"local_name": "react-test-renderer",
"alias": false,
"peer_metadata": null
} | 19.2.3 | development |
react-native-screensEnvironment{
"local_name": "react-native-screens",
"alias": false,
"peer_metadata": null
} | 4.25.2 | development |
react-native-workletsEnvironment{
"local_name": "react-native-worklets",
"alias": false,
"peer_metadata": null
} | 0.8.3 | development |
react-native-reanimatedEnvironment{
"local_name": "react-native-reanimated",
"alias": false,
"peer_metadata": null
} | 4.3.1 | development |
@babel/preset-typescriptEnvironment{
"local_name": "@babel/preset-typescript",
"alias": false,
"peer_metadata": null
} | ^7.29.7 | development |
@shopify/react-native-skiaEnvironment{
"local_name": "@shopify/react-native-skia",
"alias": false,
"peer_metadata": null
} | 2.6.6 | development |
@testing-library/react-nativeEnvironment{
"local_name": "@testing-library/react-native",
"alias": false,
"peer_metadata": null
} | ^13.3.3 | development |
react-native-safe-area-contextEnvironment{
"local_name": "react-native-safe-area-context",
"alias": false,
"peer_metadata": null
} | ~5.7.0 | development |
babel-plugin-dynamic-import-nodeEnvironment{
"local_name": "babel-plugin-dynamic-import-node",
"alias": false,
"peer_metadata": null
} | ^2.3.3 | development |
@babel/plugin-transform-modules-commonjsEnvironment{
"local_name": "@babel/plugin-transform-modules-commonjs",
"alias": false,
"peer_metadata": null
} | ^7.29.7 | development |
@react-native-async-storage/async-storageEnvironment{
"local_name": "@react-native-async-storage/async-storage",
"alias": false,
"peer_metadata": null
} | 2.2.0 | development |
expoEnvironment{
"local_name": "expo",
"alias": false,
"peer_metadata": {
"optional": false
}
} | >=56.0.0 | peer |
reactEnvironment{
"local_name": "react",
"alias": false,
"peer_metadata": {
"optional": false
}
} | * | peer |
expo-routerEnvironment{
"local_name": "expo-router",
"alias": false,
"peer_metadata": {
"optional": false
}
} | * | peer |
react-nativeEnvironment{
"local_name": "react-native",
"alias": false,
"peer_metadata": {
"optional": false
}
} | >=0.85.0 | peer |
react-native-svgEnvironment{
"local_name": "react-native-svg",
"alias": false,
"peer_metadata": {
"optional": false
}
} | * | peer |
expo-navigation-barEnvironment{
"local_name": "expo-navigation-bar",
"alias": false,
"peer_metadata": {
"optional": false
}
} | >=56.0.0 | peer |
react-native-workletsEnvironment{
"local_name": "react-native-worklets",
"alias": false,
"peer_metadata": {
"optional": false
}
} | >=0.8.0 <0.9.0 | peer |
react-native-reanimatedEnvironment{
"local_name": "react-native-reanimated",
"alias": false,
"peer_metadata": {
"optional": false
}
} | >=4.3.0 <5.0.0 | peer |
@shopify/react-native-skiaEnvironment{
"local_name": "@shopify/react-native-skia",
"alias": false,
"peer_metadata": {
"optional": false
}
} | >=2.0.0 | peer |
react-native-safe-area-contextEnvironment{
"local_name": "react-native-safe-area-context",
"alias": false,
"peer_metadata": {
"optional": false
}
} | * | peer |
@react-native-async-storage/async-storageEnvironment{
"local_name": "@react-native-async-storage/async-storage",
"alias": false,
"peer_metadata": {
"optional": false
}
} | * | peer |
Source distribution
{
"shasum": "1628950e467a46ec683d400c4c6ea8f1bf4f0801",
"tarball": "https://registry.npmjs.org/@0610studio/zs-ui/-/zs-ui-0.19.3.tgz",
"fileCount": 312,
"integrity": "sha512-sHcozfhap0hq0fuQbuzFFvbRZV94/5S/02uJbyuF7ZbTXidniRDTkiJFcEnPgvMlX7z300TJJvxD/sfYFJlU8g==",
"signatures": [
{
"sig": "MEQCIF31Qjodb/VSCK5c4SHAA3piIc2i30QCmjQtpUsHFIqCAiAFqQcrVGqC5GaDG3KpYJV9BCN1+y83GSzkwKjIYhZCCA==",
"keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
}
],
"attestations": {
"url": "https://registry.npmjs.org/-/npm/v1/attestations/@0610studio%2fzs-ui@0.19.3",
"provenance": {
"predicateType": "https://slsa.dev/provenance/v1"
}
},
"unpackedSize": 758143
}Observed since 20 Oct, 22:01 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:032db8f4be741fcccf6385b500d63dd9693e54a321cf931e04f9c19b94bbab49