diff --git a/apps/mobile/package.json b/apps/mobile/package.json index 92450823..754f483a 100644 --- a/apps/mobile/package.json +++ b/apps/mobile/package.json @@ -11,6 +11,7 @@ "web": "expo start --web" }, "dependencies": { + "@10play/tentap-editor": "^1.0.1", "@tolaria/markdown": "workspace:*", "expo": "~55.0.19", "expo-status-bar": "~55.0.5", @@ -19,7 +20,8 @@ "react-native": "0.83.6", "react-native-gesture-handler": "~2.30.1", "react-native-safe-area-context": "^5.6.2", - "react-native-svg": "^15.15.3" + "react-native-svg": "^15.15.3", + "react-native-webview": "13.16.0" }, "devDependencies": { "@types/react": "~19.2.14", diff --git a/apps/mobile/src/MobileEditorAdapter.tsx b/apps/mobile/src/MobileEditorAdapter.tsx index 2020f486..c0f80ce4 100644 --- a/apps/mobile/src/MobileEditorAdapter.tsx +++ b/apps/mobile/src/MobileEditorAdapter.tsx @@ -1,25 +1,34 @@ import { useMemo } from 'react' -import { ScrollView, Text, View } from 'react-native' +import { KeyboardAvoidingView, Platform, Text, View } from 'react-native' +import { RichText, Toolbar, useEditorBridge } from '@10play/tentap-editor' import type { MobileNote } from './mobileNoteProjection' -import { createMobileEditorDocument } from './mobileEditorDocument' +import { createMobileEditorDocument, createMobileEditorHtml } from './mobileEditorDocument' import { styles } from './styles' export function MobileEditorAdapter({ note }: { note: MobileNote }) { const document = useMemo(() => createMobileEditorDocument(note), [note]) + const initialContent = useMemo(() => createMobileEditorHtml(document), [document]) + const editor = useEditorBridge({ + avoidIosKeyboard: true, + initialContent, + }) return ( - + {note.type} / {note.id} - {document.title} - {document.blocks.map((block) => ( - - {block.text} - - ))} - + + + + + + + ) } diff --git a/apps/mobile/src/mobileEditorDocument.test.ts b/apps/mobile/src/mobileEditorDocument.test.ts index a85bb633..11ae5097 100644 --- a/apps/mobile/src/mobileEditorDocument.test.ts +++ b/apps/mobile/src/mobileEditorDocument.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { createMobileEditorDocument } from './mobileEditorDocument' +import { createMobileEditorDocument, createMobileEditorHtml } from './mobileEditorDocument' describe('mobile editor document', () => { it('strips frontmatter and title heading from the displayed editor body', () => { @@ -62,4 +62,26 @@ describe('mobile editor document', () => { }, ]) }) + + it('creates escaped HTML for TenTap initial content', () => { + const html = createMobileEditorHtml({ + title: 'Tolaria ', + blocks: [ + { + id: '0:Use TenTap', + kind: 'paragraph', + text: 'Use TenTap & keep markdown durable', + }, + { + id: '1:- Escape quotes', + kind: 'bullet', + text: 'Escape "quotes"', + }, + ], + }) + + expect(html).toBe( + '

Tolaria <mobile>

Use TenTap & keep markdown durable

', + ) + }) }) diff --git a/apps/mobile/src/mobileEditorDocument.ts b/apps/mobile/src/mobileEditorDocument.ts index 1a2762eb..066dda6f 100644 --- a/apps/mobile/src/mobileEditorDocument.ts +++ b/apps/mobile/src/mobileEditorDocument.ts @@ -25,6 +25,10 @@ export function createMobileEditorDocument(input: MobileEditorDocumentInput): Mo } } +export function createMobileEditorHtml(document: MobileEditorDocument) { + return `

${escapeHtml(document.title)}

${document.blocks.map(blockToHtml).join('')}` +} + function createBlocks(body: string, title: string) { return body .split('\n') @@ -51,3 +55,17 @@ function bulletContent(line: string) { function isTitleHeading(line: string, title: string) { return line === `# ${title}` } + +function blockToHtml(block: MobileEditorBlock) { + const text = escapeHtml(block.text) + return block.kind === 'bullet' ? `` : `

${text}

` +} + +function escapeHtml(value: string) { + return value + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, ''') +} diff --git a/apps/mobile/src/styles/editorStyles.ts b/apps/mobile/src/styles/editorStyles.ts index ed927cec..85b939b0 100644 --- a/apps/mobile/src/styles/editorStyles.ts +++ b/apps/mobile/src/styles/editorStyles.ts @@ -14,6 +14,14 @@ export const editorStyles = StyleSheet.create({ paddingHorizontal: spacing.xl, paddingBottom: 96, }, + editorAdapterContent: { + flex: 1, + width: '100%', + maxWidth: 760, + alignSelf: 'center', + paddingHorizontal: spacing.xl, + paddingBottom: 96, + }, breadcrumbRow: { marginBottom: spacing.xl, flexDirection: 'row', @@ -47,4 +55,17 @@ export const editorStyles = StyleSheet.create({ fontSize: 18, lineHeight: 28, }, + tentapEditor: { + flex: 1, + overflow: 'hidden', + }, + tentapToolbar: { + position: 'absolute', + right: 0, + bottom: 0, + left: 0, + borderTopWidth: 1, + borderTopColor: colors.border, + backgroundColor: colors.canvas, + }, }) diff --git a/docs/MOBILE_PROGRESS.md b/docs/MOBILE_PROGRESS.md index 9dcf1cc5..8431192a 100644 --- a/docs/MOBILE_PROGRESS.md +++ b/docs/MOBILE_PROGRESS.md @@ -8,7 +8,7 @@ This file is the resumable working log for Tolaria mobile. The strategy and road - Branch: `codex/mobile` - Active phase: Phase 2 - Mobile Shell -- Active slice: Add mobile editor adapter boundary for TenTap +- Active slice: Spike TenTap behind `MobileEditorAdapter` - Push policy: commit locally; do not push unless explicitly requested - Validation target: iPad/iOS simulator first @@ -46,13 +46,15 @@ This file is the resumable working log for Tolaria mobile. The strategy and road - Added a pure mobile Git remote parser that codifies the auth choice: GitHub remotes use the GitHub OAuth App path, arbitrary Git remotes use the SSH-key path. - Added a pure mobile vault configuration model that keeps vault storage app-local, distinguishes local-only vs remote-backed sync, and derives the required Git auth path from the parsed remote. - Extracted the mobile editor surface behind `MobileEditorAdapter` with a tested document projection so TenTap can replace the placeholder surface without changing shell navigation. +- Installed TenTap and Expo-compatible `react-native-webview`, then wired TenTap into `MobileEditorAdapter` with tested HTML generation from the mobile editor document projection. +- Created [ADR-0110](./adr/0110-tentap-mobile-editor-spike.md) for the TenTap mobile editor spike and its acceptance gates. ## Next Action Continue Phase 2 with the next mobile shell slice: 1. Dismiss or suppress Expo Go's first-run tools modal during simulator QA so screenshots capture the app without the overlay. -2. Install and spike TenTap behind `MobileEditorAdapter`, keeping the adapter contract intact. +2. Add markdown round-trip/save boundaries for the TenTap editor path while preserving Markdown as canonical storage. 3. Add the first native storage adapter around the vault config/repository contracts after the editor spike confirms the app shape. ## Verification Log @@ -129,6 +131,12 @@ Continue Phase 2 with the next mobile shell slice: - `pnpm --filter @tolaria/mobile typecheck` passed after editor adapter extraction. - CodeScene after editor adapter extraction: `apps/mobile/src/MobileApp.tsx`, `apps/mobile/src/MobileEditorAdapter.tsx`, `apps/mobile/src/mobileEditorDocument.ts`, and `apps/mobile/src/mobileEditorDocument.test.ts` scored `10`. - `pnpm --filter @tolaria/mobile exec expo export --platform ios --output-dir /tmp/tolaria-mobile-export` passed after editor adapter extraction. +- TenTap package check: `@10play/tentap-editor@1.0.1` requires `react`, `react-native`, and `react-native-webview`; Expo installed `react-native-webview@13.16.0`. +- `pnpm --filter @tolaria/mobile test -- src/mobileEditorDocument.test.ts` passed after TenTap wiring: 8 files / 28 tests. +- `pnpm --filter @tolaria/mobile typecheck` passed after TenTap wiring. +- CodeScene after TenTap wiring: `apps/mobile/src/MobileEditorAdapter.tsx`, `apps/mobile/src/mobileEditorDocument.ts`, `apps/mobile/src/mobileEditorDocument.test.ts`, and `apps/mobile/src/styles/editorStyles.ts` scored `10`. +- `pnpm --filter @tolaria/mobile exec expo export --platform ios --output-dir /tmp/tolaria-mobile-export` passed after TenTap wiring; iOS bundle size is now about 11 MB and includes TenTap toolbar assets. +- `pnpm --filter @tolaria/mobile exec expo start --ios --clear` launched on `iPad Pro 13-inch (M4)`; screenshot captured at `/tmp/tolaria-mobile-tentap-ipad.png`. The app rendered with the TenTap-backed editor behind Expo Go's first-run Tools modal and no red runtime error overlay appeared. ## Risks / Watch Items @@ -136,3 +144,4 @@ Continue Phase 2 with the next mobile shell slice: - Shared package extraction must not destabilize active desktop work. - Desktop alpha release currently triggers on every push to `main`; this branch is safe, but release path filters should be added before mobile work merges to `main`. - Codacy analyzes committed/pushed repository state; local edits still need local lint/test/CodeScene discipline before remote checks exist. +- TenTap's package graph currently reports a `react-dom` peer warning because its bundled web editor path depends on React DOM 18 while the native app uses React 19; simulator launch and iOS export pass, but this should be tracked during the editor spike. diff --git a/docs/adr/0110-tentap-mobile-editor-spike.md b/docs/adr/0110-tentap-mobile-editor-spike.md new file mode 100644 index 00000000..0491834d --- /dev/null +++ b/docs/adr/0110-tentap-mobile-editor-spike.md @@ -0,0 +1,58 @@ +--- +type: ADR +id: "0110" +title: "TenTap as the mobile editor spike" +status: active +date: 2026-05-04 +--- + +## Context + +Tolaria mobile needs an iPad-first editor that feels native enough for real writing while keeping Markdown files as durable source of truth. The mobile strategy already rejected direct BlockNote reuse as the default path because BlockNote's React DOM assumptions and Markdown import/export risks are a poor first bet for React Native. + +The editor is the highest-risk mobile subsystem. It must support iPad keyboard behavior, touch selection, scrolling, formatting controls, wikilinks, Markdown persistence, and future Android without turning the entire app into a WebView. + +## Decision + +Use `@10play/tentap-editor` as the first mobile editor spike, installed only in `apps/mobile` and isolated behind `MobileEditorAdapter`. + +TenTap may use a WebView internally, but that WebView is limited to the editor surface. Sidebar, note list, properties, gestures, storage, Git, auth, and app navigation remain React Native surfaces. + +`react-native-webview` is installed through Expo's compatible package selection because TenTap requires it as the native WebView bridge. + +## Consequences + +Positive: + +- The spike starts from a React Native editor package built for mobile rich-text editing. +- TenTap brings a Tiptap/ProseMirror editing core without making the whole mobile app WebView-based. +- Native toolbar and bridge APIs give a plausible path for iPad keyboard/touch workflows. +- The `MobileEditorAdapter` boundary keeps a native Markdown fallback realistic if TenTap fails. + +Negative: + +- TenTap adds a WebView and bundled editor assets to the mobile app. +- The first Expo Go validation is limited to TenTap's basic supported path; more advanced editor customization may require an Expo development build. +- TenTap currently brings a `react-dom` dependency for its bundled web editor path, which can produce package-manager peer warnings while the native app itself runs React Native. +- Markdown round-tripping, wikilinks, frontmatter exclusion, and save integration still need explicit implementation and quality gates. + +Quality gates before accepting TenTap as the long-term editor: + +- iPad typing latency has no visible lag on realistic notes. +- Long notes scroll smoothly inside the editor surface. +- Keyboard show/hide and hardware keyboard behavior do not break layout. +- Formatting toolbar behavior is discoverable and does not cover active text. +- Horizontal surface gestures do not conflict with text selection/editing. +- Frontmatter stays outside the rich editor body unless raw mode is explicitly entered. +- Markdown remains the source of truth; Tiptap JSON is not persisted as canonical document state. + +Re-evaluate this decision if: + +- TenTap fails the quality gates on iPad hardware or simulator/dev-build validation. +- The WebView editor surface causes unacceptable gesture, keyboard, or scroll conflicts. +- Markdown and wikilink round-tripping require fragile or lossy custom conversion. +- Android support proves substantially weaker than the native Markdown fallback. + +## Advice + +Keep all direct TenTap imports inside `MobileEditorAdapter` or narrowly-scoped editor modules. Do not leak TenTap types into vault repositories, navigation, note projection, or storage contracts. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a242aacd..b18cff00 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -273,12 +273,15 @@ importers: apps/mobile: dependencies: + '@10play/tentap-editor': + specifier: ^1.0.1 + version: 1.0.1(@floating-ui/dom@1.7.5)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@tolaria/markdown': specifier: workspace:* version: link:../../packages/markdown expo: specifier: ~55.0.19 - version: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-status-bar: specifier: ~55.0.5 version: 55.0.5(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) @@ -300,6 +303,9 @@ importers: react-native-svg: specifier: ^15.15.3 version: 15.15.3(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native-webview: + specifier: 13.16.0 + version: 13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) devDependencies: '@types/react': specifier: ~19.2.14 @@ -334,6 +340,14 @@ importers: packages: + '@10play/tentap-editor@1.0.1': + resolution: {integrity: sha512-tqBN0gqSxku50jk50e+rnB4DQdubRTdbgBrkMu7XE3kvHSbavCB5zJgrFjNhnU9A9dVRcBoEtZk3YJFnfDm9Ug==} + engines: {node: '>= 18.0.0'} + peerDependencies: + react: '*' + react-native: '*' + react-native-webview: '*' + '@acemir/cssom@0.9.31': resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} @@ -3063,6 +3077,11 @@ packages: peerDependencies: '@tiptap/core': 3.22.5 + '@tiptap/extension-color@3.22.5': + resolution: {integrity: sha512-4aTygOUlTFBYCvJy67SeKVdXCQw7du3Rj+N5ZutVnDnrpfzUBWsO7f+I+iDS8eMQFbWxVFLlWxGMcTbjtk1a+Q==} + peerDependencies: + '@tiptap/extension-text-style': 3.22.5 + '@tiptap/extension-document@3.22.5': resolution: {integrity: sha512-8NJERd+pCtvSuEP4C4WMGYmRRCV12ePZL7bC+QUdFlbdXg+kNZS0zZ7hh879tYA0Kidbi8rWWD1Tx+H2ezkmMw==} peerDependencies: @@ -3112,6 +3131,11 @@ packages: '@tiptap/core': 3.22.5 '@tiptap/pm': 3.22.5 + '@tiptap/extension-image@3.22.5': + resolution: {integrity: sha512-ezMzA6w6UsPesQp6fxTQojI/IkGJLmkwR/VGTimva7sudP3HdSW8k3SGBkjfvp0L2xqUrC/l4nWOchu01A/xtQ==} + peerDependencies: + '@tiptap/core': 3.22.5 + '@tiptap/extension-italic@3.19.0': resolution: {integrity: sha512-6GffxOnS/tWyCbDkirWNZITiXRta9wrCmrfa4rh+v32wfaOL1RRQNyqo9qN6Wjyl1R42Js+yXTzTTzZsOaLMYA==} peerDependencies: @@ -3175,6 +3199,11 @@ packages: peerDependencies: '@tiptap/core': 3.22.5 + '@tiptap/extension-text-style@3.22.5': + resolution: {integrity: sha512-jt63jy8YbhZJUGMxTUzeivLhowGtFp6YbCFrrmZJ7G6IHu8X8LJzO81ksz5nT5l8DKpldGwnINUfA6iE91JIAg==} + peerDependencies: + '@tiptap/core': 3.22.5 + '@tiptap/extension-text@3.19.0': resolution: {integrity: sha512-K95+SnbZy0h6hNFtfy23n8t/nOcTFEf69In9TSFVVmwn/Nwlke+IfiESAkqbt1/7sKJeegRXYO7WzFEmFl9Q/g==} peerDependencies: @@ -5420,6 +5449,9 @@ packages: lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + log-symbols@2.2.0: resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} engines: {node: '>=4'} @@ -6216,6 +6248,11 @@ packages: react-devtools-core@6.1.5: resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==} + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + react-dom@19.2.4: resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: @@ -6265,6 +6302,12 @@ packages: react: '*' react-native: '*' + react-native-webview@13.16.0: + resolution: {integrity: sha512-Nh13xKZWW35C0dbOskD7OX01nQQavOzHbCw9XoZmar4eXCo7AvrYJ0jlUfRVVIJzqINxHlpECYLdmAdFsl9xDA==} + peerDependencies: + react: '*' + react-native: '*' + react-native@0.83.6: resolution: {integrity: sha512-H513+8VzviNFXOdPnStRzX9S3/jiJGg++QZ1zd+ROyAvBEKqFqKUPHH0d82y3QyRPct5qKjdOa7J6vNehCvXYA==} engines: {node: '>= 20.19.4'} @@ -6491,6 +6534,9 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -7297,6 +7343,40 @@ packages: snapshots: + '@10play/tentap-editor@1.0.1(@floating-ui/dom@1.7.5)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/extension-blockquote': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-bold': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-code': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-code-block': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-color': 3.22.5(@tiptap/extension-text-style@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))) + '@tiptap/extension-document': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-hard-break': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-heading': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-highlight': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-horizontal-rule': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-image': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-italic': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-link': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-list': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-strike': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-text-style': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-underline': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extensions': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + '@tiptap/react': 3.19.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.0))(react@19.2.0) + '@tiptap/starter-kit': 3.22.5 + lodash: 4.18.1 + react: 19.2.0 + react-dom: 18.3.1(react@19.2.0) + react-native: 0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native-webview: 13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + transitivePeerDependencies: + - '@floating-ui/dom' + - '@types/react' + - '@types/react-dom' + '@acemir/cssom@0.9.31': {} '@adobe/css-tools@4.4.4': {} @@ -8332,7 +8412,7 @@ snapshots: '@exodus/bytes@1.14.1': {} - '@expo/cli@55.0.27(@expo/dom-webview@55.0.5)(expo-constants@55.0.15(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)))(expo-font@55.0.6(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo@55.0.19)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)': + '@expo/cli@55.0.27(@expo/dom-webview@55.0.5)(expo-constants@55.0.15(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)))(expo-font@55.0.6(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo@55.0.19)(react-dom@18.3.1(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)': dependencies: '@expo/code-signing-certificates': 0.0.6 '@expo/config': 55.0.15(typescript@5.9.3) @@ -8349,7 +8429,7 @@ snapshots: '@expo/plist': 0.5.2 '@expo/prebuild-config': 55.0.16(expo@55.0.19)(typescript@5.9.3) '@expo/require-utils': 55.0.4(typescript@5.9.3) - '@expo/router-server': 55.0.15(expo-constants@55.0.15(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)))(expo-font@55.0.6(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo-server@55.0.8)(expo@55.0.19)(react-dom@19.2.4(react@19.2.0))(react@19.2.0) + '@expo/router-server': 55.0.15(expo-constants@55.0.15(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)))(expo-font@55.0.6(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo-server@55.0.8)(expo@55.0.19)(react-dom@18.3.1(react@19.2.0))(react@19.2.0) '@expo/schema-utils': 55.0.3 '@expo/spawn-async': 1.7.2 '@expo/ws-tunnel': 1.0.6 @@ -8366,7 +8446,7 @@ snapshots: connect: 3.7.0 debug: 4.4.3 dnssd-advertise: 1.1.4 - expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-server: 55.0.8 fetch-nodeshim: 0.4.10 getenv: 2.0.0 @@ -8463,7 +8543,7 @@ snapshots: '@expo/dom-webview@55.0.5(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: - expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react: 19.2.0 react-native: 0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) @@ -8521,7 +8601,7 @@ snapshots: dependencies: '@expo/dom-webview': 55.0.5(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) anser: 1.4.10 - expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react: 19.2.0 react-native: 0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) stacktrace-parser: 0.1.11 @@ -8548,7 +8628,7 @@ snapshots: postcss: 8.5.10 resolve-from: 5.0.0 optionalDependencies: - expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) transitivePeerDependencies: - bufferutil - supports-color @@ -8604,7 +8684,7 @@ snapshots: '@expo/json-file': 10.0.13 '@react-native/normalize-colors': 0.83.6 debug: 4.4.3 - expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) resolve-from: 5.0.0 semver: 7.7.4 xml2js: 0.6.0 @@ -8622,16 +8702,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/router-server@55.0.15(expo-constants@55.0.15(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)))(expo-font@55.0.6(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo-server@55.0.8)(expo@55.0.19)(react-dom@19.2.4(react@19.2.0))(react@19.2.0)': + '@expo/router-server@55.0.15(expo-constants@55.0.15(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)))(expo-font@55.0.6(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo-server@55.0.8)(expo@55.0.19)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)': dependencies: debug: 4.4.3 - expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-constants: 55.0.15(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) expo-font: 55.0.6(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) expo-server: 55.0.8 react: 19.2.0 optionalDependencies: - react-dom: 19.2.4(react@19.2.0) + react-dom: 18.3.1(react@19.2.0) transitivePeerDependencies: - supports-color @@ -10395,6 +10475,13 @@ snapshots: '@tiptap/pm': 3.19.0 optional: true + '@tiptap/extension-bubble-menu@3.19.0(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)': + dependencies: + '@floating-ui/dom': 1.7.5 + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + optional: true + '@tiptap/extension-bullet-list@3.22.5(@tiptap/extension-list@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5))': dependencies: '@tiptap/extension-list': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) @@ -10412,6 +10499,10 @@ snapshots: dependencies: '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/extension-color@3.22.5(@tiptap/extension-text-style@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)))': + dependencies: + '@tiptap/extension-text-style': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5)) + '@tiptap/extension-document@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': dependencies: '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) @@ -10427,6 +10518,13 @@ snapshots: '@tiptap/pm': 3.19.0 optional: true + '@tiptap/extension-floating-menu@3.19.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)': + dependencies: + '@floating-ui/dom': 1.7.5 + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + optional: true + '@tiptap/extension-gapcursor@3.22.5(@tiptap/extensions@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5))': dependencies: '@tiptap/extensions': 3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) @@ -10443,6 +10541,10 @@ snapshots: dependencies: '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) + '@tiptap/extension-highlight@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/extension-horizontal-rule@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))(@tiptap/pm@3.19.0)': dependencies: '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) @@ -10453,6 +10555,10 @@ snapshots: '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) '@tiptap/pm': 3.22.5 + '@tiptap/extension-image@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/extension-italic@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) @@ -10511,6 +10617,10 @@ snapshots: dependencies: '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/extension-text-style@3.22.5(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/extension-text@3.19.0(@tiptap/core@3.19.0(@tiptap/pm@3.19.0))': dependencies: '@tiptap/core': 3.19.0(@tiptap/pm@3.19.0) @@ -10590,6 +10700,23 @@ snapshots: transitivePeerDependencies: - '@floating-ui/dom' + '@tiptap/react@3.19.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)': + dependencies: + '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) + '@tiptap/pm': 3.22.5 + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/use-sync-external-store': 0.0.6 + fast-equals: 5.4.0 + react: 19.2.0 + react-dom: 18.3.1(react@19.2.0) + use-sync-external-store: 1.6.0(react@19.2.0) + optionalDependencies: + '@tiptap/extension-bubble-menu': 3.19.0(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + '@tiptap/extension-floating-menu': 3.19.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.22.5(@tiptap/pm@3.22.5))(@tiptap/pm@3.22.5) + transitivePeerDependencies: + - '@floating-ui/dom' + '@tiptap/starter-kit@3.22.5': dependencies: '@tiptap/core': 3.22.5(@tiptap/pm@3.22.5) @@ -11334,7 +11461,7 @@ snapshots: resolve-from: 5.0.0 optionalDependencies: '@babel/runtime': 7.29.2 - expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) transitivePeerDependencies: - '@babel/core' - supports-color @@ -12146,7 +12273,7 @@ snapshots: expo-asset@55.0.16(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@expo/image-utils': 0.8.13(typescript@5.9.3) - expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) expo-constants: 55.0.15(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) react: 19.2.0 react-native: 0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) @@ -12157,26 +12284,26 @@ snapshots: expo-constants@55.0.15(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)): dependencies: '@expo/env': 2.1.1 - expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react-native: 0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) transitivePeerDependencies: - supports-color expo-file-system@55.0.17(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)): dependencies: - expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react-native: 0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) expo-font@55.0.6(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: - expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) fontfaceobserver: 2.3.0 react: 19.2.0 react-native: 0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) expo-keep-awake@55.0.7(expo@55.0.19)(react@19.2.0): dependencies: - expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo: 55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) react: 19.2.0 expo-modules-autolinking@55.0.19(typescript@5.9.3): @@ -12203,10 +12330,10 @@ snapshots: react-native: 0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) react-native-is-edge-to-edge: 1.3.1(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - expo@55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + expo@55.0.19(@babel/core@7.29.0)(@expo/dom-webview@55.0.5)(react-dom@18.3.1(react@19.2.0))(react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@babel/runtime': 7.29.2 - '@expo/cli': 55.0.27(@expo/dom-webview@55.0.5)(expo-constants@55.0.15(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)))(expo-font@55.0.6(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo@55.0.19)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + '@expo/cli': 55.0.27(@expo/dom-webview@55.0.5)(expo-constants@55.0.15(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)))(expo-font@55.0.6(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(expo@55.0.19)(react-dom@18.3.1(react@19.2.0))(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) '@expo/config': 55.0.15(typescript@5.9.3) '@expo/config-plugins': 55.0.8 '@expo/devtools': 55.0.2(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) @@ -12232,6 +12359,7 @@ snapshots: whatwg-url-minimum: 0.1.1 optionalDependencies: '@expo/dom-webview': 55.0.5(expo@55.0.19)(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native-webview: 13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) transitivePeerDependencies: - '@babel/core' - bufferutil @@ -13121,6 +13249,8 @@ snapshots: lodash.uniq@4.5.0: {} + lodash@4.18.1: {} + log-symbols@2.2.0: dependencies: chalk: 2.4.2 @@ -14329,11 +14459,11 @@ snapshots: - bufferutil - utf-8-validate - react-dom@19.2.4(react@19.2.0): + react-dom@18.3.1(react@19.2.0): dependencies: + loose-envify: 1.4.0 react: 19.2.0 - scheduler: 0.27.0 - optional: true + scheduler: 0.23.2 react-dom@19.2.4(react@19.2.4): dependencies: @@ -14394,6 +14524,13 @@ snapshots: react-native: 0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) warn-once: 0.1.1 + react-native-webview@13.16.0(react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + dependencies: + escape-string-regexp: 4.0.0 + invariant: 2.2.4 + react: 19.2.0 + react-native: 0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native@0.83.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0): dependencies: '@jest/create-cache-key-function': 29.7.0 @@ -14724,6 +14861,10 @@ snapshots: dependencies: xmlchars: 2.2.0 + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + scheduler@0.27.0: {} section-matter@1.0.0: @@ -15205,6 +15346,10 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + use-sync-external-store@1.6.0(react@19.2.0): + dependencies: + react: 19.2.0 + use-sync-external-store@1.6.0(react@19.2.4): dependencies: react: 19.2.4