{"_id":"@atzentis/edu-expo","name":"@atzentis/edu-expo","dist-tags":{"latest":"0.2.0"},"versions":{"0.2.0":{"name":"@atzentis/edu-expo","version":"0.2.0","description":"Atzentis Edu Expo — native screens, biometrics, and secure storage for React Native/Expo","keywords":["atzentis","edu","expo","react-native","authentication","typescript"],"license":"MIT","author":{"name":"Atzentis","email":"dev@atzentis.com","url":"https://atzentis.com"},"homepage":"https://github.com/atzentis/atzentis-edu-sdk/tree/main/packages/expo#readme","repository":{"type":"git","url":"git+https://github.com/atzentis/atzentis-edu-sdk.git","directory":"packages/expo"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"sideEffects":false,"publishConfig":{"access":"public"},"dependencies":{"@atzentis/edu-locales":"0.2.0","@atzentis/edu-react":"0.2.0","@atzentis/edu-sdk":"0.2.0"},"peerDependencies":{"@better-auth/expo":">=1.2.0","@expo/ui":">=55.0.0","@hookform/resolvers":">=3.3.0","@tanstack/react-query":">=5.0.0","better-auth":">=1.2.0","expo-application":">=6.0.0","expo-av":">=15.0.0","expo-device":">=7.0.0","expo-file-system":">=18.0.0","expo-haptics":">=14.0.0","expo-local-authentication":">=15.0.0","expo-localization":">=16.0.0","expo-router":">=4.0.0","expo-secure-store":">=14.0.0","lucide-react-native":">=0.400.0","react":">=18.0.0","react-hook-form":">=7.45.0","react-native":">=0.76.0","react-native-reanimated":">=3.0.0"},"peerDependenciesMeta":{"@expo/ui":{"optional":true},"expo-haptics":{"optional":true},"expo-local-authentication":{"optional":true},"react-native-reanimated":{"optional":true}},"devDependencies":{"@better-auth/expo":"^1.2.0","@expo/ui":"^55.0.0","@hookform/resolvers":"^3.3.0","@tanstack/react-query":"^5.0.0","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.0.0","@testing-library/react-native":"^13.0.0","@testing-library/user-event":"^14.5.0","@types/react":"^19.0.0","better-auth":"^1.2.0","expo-application":"^6.0.0","expo-av":"^15.0.0","expo-device":"^7.0.0","expo-file-system":"^18.0.0","expo-haptics":"^14.0.0","expo-image-picker":"^16.0.0","expo-local-authentication":"^15.0.0","expo-localization":"^16.0.0","expo-router":"^4.0.0","expo-secure-store":"^14.0.0","jsdom":"^28.0.0","lucide-react-native":"^0.400.0","react":"^19.0.0","react-hook-form":"^7.45.0","react-native":"^0.76.0","tsup":"^8.3.0","typescript":"^5.7.0","vitest":"^2.1.0","@atzentis/edu-locales":"0.2.0"},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","type-check":"tsc --noEmit"},"_id":"@atzentis/edu-expo@0.2.0","bugs":{"url":"https://github.com/atzentis/atzentis-edu-sdk/issues"},"_integrity":"sha512-Zqwx2u65nrn4LOYj7+luyJptRObzUJAbwA7KIpsm1kWa0G2YwyV/xbHBc0+aQIuZAqI6AjBQ70gj+zAs9aM/hQ==","_resolved":"/tmp/affb6eb9100743eb86f8ba9dfb76325a/atzentis-edu-expo-0.2.0.tgz","_from":"file:atzentis-edu-expo-0.2.0.tgz","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-Zqwx2u65nrn4LOYj7+luyJptRObzUJAbwA7KIpsm1kWa0G2YwyV/xbHBc0+aQIuZAqI6AjBQ70gj+zAs9aM/hQ==","shasum":"7cebf1d1c05be232830e3f1dfa1bd19ebf9f8b7e","tarball":"https://registry.npmjs.org/@atzentis/edu-expo/-/edu-expo-0.2.0.tgz","fileCount":6,"unpackedSize":73747,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDJo+fa/Itd7gCxNvvxvBE3QZ3fFG65HabmmDCOrvrdYgIgPr8lFJ7/IGEtZdex5YUtay2OLMfnjHWngMeOoBAzr8o="}]},"_npmUser":{"name":"vassilibo","email":"vassilibo@outlook.com"},"directories":{},"maintainers":[{"name":"vassilibo","email":"vassilibo@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/edu-expo_0.2.0_1781141365503_0.8862561402031244"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-11T01:29:25.355Z","0.2.0":"2026-06-11T01:29:25.647Z","modified":"2026-06-11T01:29:25.926Z"},"maintainers":[{"name":"vassilibo","email":"vassilibo@outlook.com"}],"description":"Atzentis Edu Expo — native screens, biometrics, and secure storage for React Native/Expo","homepage":"https://github.com/atzentis/atzentis-edu-sdk/tree/main/packages/expo#readme","keywords":["atzentis","edu","expo","react-native","authentication","typescript"],"repository":{"type":"git","url":"git+https://github.com/atzentis/atzentis-edu-sdk.git","directory":"packages/expo"},"author":{"name":"Atzentis","email":"dev@atzentis.com","url":"https://atzentis.com"},"bugs":{"url":"https://github.com/atzentis/atzentis-edu-sdk/issues"},"license":"MIT","readme":"# @atzentis/edu-expo\n\nReact Native (Expo) components for the Atzentis Education Platform. These are\nthin native UI layers over the `@atzentis/edu-react` hooks — they consume\n`useTutor`, `useSpaces`, and `useExaminer` and render with React Native\nprimitives.\n\n## Installation\n\n```sh\nnpm install @atzentis/edu-expo @atzentis/edu-react @atzentis/edu-sdk \\\n  @tanstack/react-query react-native\n```\n\nExpo modules used by the components are peer dependencies (install the ones you\nuse): `expo-haptics`, `expo-av`, `expo-localization`, `lucide-react-native`,\n`react-native-reanimated`.\n\n## Setup\n\nWrap your app in the React Query provider and the `EduProvider` from\n`@atzentis/edu-react`, then render the native components:\n\n```tsx\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { EduProvider } from \"@atzentis/edu-react\";\nimport { TutorChatNative } from \"@atzentis/edu-expo\";\n\nconst queryClient = new QueryClient();\n\nexport default function App() {\n  return (\n    <QueryClientProvider client={queryClient}>\n      <EduProvider apiKey={process.env.EXPO_PUBLIC_EDU_KEY!} tenantId=\"acme\">\n        <TutorChatNative sessionId=\"session-123\" />\n      </EduProvider>\n    </QueryClientProvider>\n  );\n}\n```\n\n## Components\n\n### `TutorChatNative`\n\nRenders a tutor session as a native chat: a `FlatList` of messages, a text\ncomposer with haptic feedback on send, loading and error states with retry.\n\n```tsx\n<TutorChatNative sessionId=\"s1\" onClose={() => navigation.goBack()} locale=\"el\" />\n```\n\n| Prop | Type | Notes |\n|------|------|-------|\n| `sessionId` | `string` | Required. Tutor session to render. |\n| `onClose?` | `() => void` | Optional close handler. |\n| `locale?` | `string` | i18n locale for labels. |\n| `testID?` | `string` | Test/automation id. |\n\n### `SpaceViewerNative`\n\nRenders a learning space's paged content with offline caching (last-read pages\nare cached and shown when offline) and a Sidekick suggestions surface.\n\n```tsx\n<SpaceViewerNative spaceId=\"space-1\" pageIndex={0} />\n```\n\n### `ExaminerUINative`\n\nDrives a speaking-exam session: prompt display, an animated waveform during\nrecording (respects reduce-motion), audio capture via `expo-av`, and stage\nprogression. Requires microphone permission.\n\n```tsx\n<ExaminerUINative examSessionId=\"exam-1\" />\n```\n\n## Notes\n\n- All user-facing strings use i18n keys (`expo.tutor.*`, `expo.space.*`,\n  `expo.examiner.*`) resolved through `@atzentis/edu-locales`.\n- Data fetching, streaming, and polling live in `@atzentis/edu-react`; these\n  components are presentation-only.\n- TypeScript strict, zero `any`, tree-shakeable ESM build.\n","readmeFilename":"README.md","_rev":"1-e77544cc9eba1d8e41b3308b9b9e75a3"}