From 3b887f4b050794e9d51ded640a74bf9b9aa2dc3f Mon Sep 17 00:00:00 2001 From: "xuan.huang" <5563315+Huxpro@users.noreply.github.com> Date: Wed, 4 Mar 2026 22:26:21 -0800 Subject: [PATCH 01/18] feat: add Lynx web platform support with sparkling-web-shell package Add multi-environment build config (web + lynx) to rspeedy so the playground and template can produce browser-compatible bundles alongside native ones. Web bundles output to dist/web/ and are served by a new sparkling-web-shell package that renders them via . - Create packages/sparkling-web-shell with @lynx-js/web-core 0.19.8 and @lynx-js/web-elements 0.11.3 - Add environments config to playground lynx.config.ts with separate distPath for web output - Filter web/ dir from native asset copies - Add build:web and dev:web scripts to playground - Update template app.config.ts with matching environments config --- packages/playground/package.json | 1 + packages/sparkling-web-shell/.gitignore | 2 + packages/sparkling-web-shell/package.json | 29 +++++++++++++ .../sparkling-web-shell/rsbuild.config.ts | 33 +++++++++++++++ packages/sparkling-web-shell/src/env.d.ts | 7 ++++ packages/sparkling-web-shell/src/index.html | 15 +++++++ packages/sparkling-web-shell/src/index.ts | 42 +++++++++++++++++++ packages/sparkling-web-shell/tsconfig.json | 13 ++++++ template/sparkling-app-template/app.config.ts | 18 +++++++- 9 files changed, 158 insertions(+), 2 deletions(-) create mode 100644 packages/sparkling-web-shell/.gitignore create mode 100644 packages/sparkling-web-shell/package.json create mode 100644 packages/sparkling-web-shell/rsbuild.config.ts create mode 100644 packages/sparkling-web-shell/src/env.d.ts create mode 100644 packages/sparkling-web-shell/src/index.html create mode 100644 packages/sparkling-web-shell/src/index.ts create mode 100644 packages/sparkling-web-shell/tsconfig.json diff --git a/packages/playground/package.json b/packages/playground/package.json index ccfda4e0..be68025c 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -13,6 +13,7 @@ "build": "pnpm -C ../.. --filter sparkling-method --filter sparkling-navigation --filter sparkling-storage --filter sparkling-media build && rspeedy build", "build:web": "pnpm -C ../.. --filter sparkling-method --filter sparkling-navigation --filter sparkling-storage --filter sparkling-media build && rspeedy build --config lynx.web.config.ts", "dev": "rspeedy dev", + "dev:web": "pnpm build:web && LYNX_BUNDLE_DIR=\"$PWD/dist-web\" pnpm --filter sparkling-web-shell dev", "format": "prettier --write .", "preview": "rspeedy preview", "test": "vitest run --passWithNoTests", diff --git a/packages/sparkling-web-shell/.gitignore b/packages/sparkling-web-shell/.gitignore new file mode 100644 index 00000000..b9470778 --- /dev/null +++ b/packages/sparkling-web-shell/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +dist/ diff --git a/packages/sparkling-web-shell/package.json b/packages/sparkling-web-shell/package.json new file mode 100644 index 00000000..4d5391db --- /dev/null +++ b/packages/sparkling-web-shell/package.json @@ -0,0 +1,29 @@ +{ + "name": "sparkling-web-shell", + "version": "2.0.0-rc.6", + "private": true, + "type": "module", + "description": "Minimal web host for rendering Lynx web bundles in a browser", + "homepage": "https://tiktok.github.io/sparkling/", + "repository": { + "type": "git", + "url": "https://github.com/nichenqin/sparkling", + "directory": "packages/sparkling-web-shell" + }, + "scripts": { + "dev": "rsbuild dev", + "build": "rsbuild build", + "preview": "rsbuild preview" + }, + "dependencies": { + "@lynx-js/web-core": "0.19.8", + "@lynx-js/web-elements": "0.11.3" + }, + "devDependencies": { + "@rsbuild/core": "1.7.2", + "typescript": "^5.8.3" + }, + "engines": { + "node": "^22 || ^24" + } +} diff --git a/packages/sparkling-web-shell/rsbuild.config.ts b/packages/sparkling-web-shell/rsbuild.config.ts new file mode 100644 index 00000000..47d93787 --- /dev/null +++ b/packages/sparkling-web-shell/rsbuild.config.ts @@ -0,0 +1,33 @@ +import { defineConfig } from '@rsbuild/core'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +// Default bundle directory: the playground's web build output +// Override via LYNX_BUNDLE_DIR env variable for CLI integration +const bundleDir = process.env.LYNX_BUNDLE_DIR + || path.join(__dirname, '../playground/dist/web'); + +export default defineConfig({ + source: { + entry: { + index: './src/index.ts', + }, + }, + html: { + title: 'Sparkling Web Preview', + template: './src/index.html', + }, + server: { + port: 4200, + publicDir: [ + { + name: path.resolve(bundleDir), + }, + ], + }, + output: { + assetPrefix: '/', + }, +}); diff --git a/packages/sparkling-web-shell/src/env.d.ts b/packages/sparkling-web-shell/src/env.d.ts new file mode 100644 index 00000000..b3bdc6f4 --- /dev/null +++ b/packages/sparkling-web-shell/src/env.d.ts @@ -0,0 +1,7 @@ +declare global { + interface HTMLElementTagNameMap { + 'lynx-view': HTMLElement; + } +} + +export {}; diff --git a/packages/sparkling-web-shell/src/index.html b/packages/sparkling-web-shell/src/index.html new file mode 100644 index 00000000..e3acb93c --- /dev/null +++ b/packages/sparkling-web-shell/src/index.html @@ -0,0 +1,15 @@ + + + + + + Sparkling Web Preview + + + +
+ + diff --git a/packages/sparkling-web-shell/src/index.ts b/packages/sparkling-web-shell/src/index.ts new file mode 100644 index 00000000..9472c38a --- /dev/null +++ b/packages/sparkling-web-shell/src/index.ts @@ -0,0 +1,42 @@ +// Import Lynx web runtime and elements +import '@lynx-js/web-core'; +import '@lynx-js/web-core/index.css'; +import '@lynx-js/web-elements/all'; +import '@lynx-js/web-elements/index.css'; + +/** + * Determine which bundle to load from the ?page= query parameter. + * Default: "main" -> /main.lynx.bundle + */ +function getBundleUrl(): string { + const params = new URLSearchParams(window.location.search); + const page = params.get('page') || 'main'; + return `/${page}.lynx.bundle`; +} + +/** + * Render the Lynx view into the page. + */ +function render(): void { + const bundleUrl = getBundleUrl(); + const container = document.getElementById('root'); + if (!container) { + console.error('[sparkling-web-shell] #root element not found'); + return; + } + + container.innerHTML = ''; + + const lynxView = document.createElement('lynx-view'); + lynxView.setAttribute('url', bundleUrl); + lynxView.style.width = '100vw'; + lynxView.style.height = '100vh'; + + container.appendChild(lynxView); +} + +// Initial render +render(); + +// Re-render when browser navigation changes the URL +window.addEventListener('popstate', render); diff --git a/packages/sparkling-web-shell/tsconfig.json b/packages/sparkling-web-shell/tsconfig.json new file mode 100644 index 00000000..9e63f58f --- /dev/null +++ b/packages/sparkling-web-shell/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "isolatedModules": true, + "esModuleInterop": true, + "skipLibCheck": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"] + }, + "include": ["src"] +} diff --git a/template/sparkling-app-template/app.config.ts b/template/sparkling-app-template/app.config.ts index 03eedf13..38c128dd 100644 --- a/template/sparkling-app-template/app.config.ts +++ b/template/sparkling-app-template/app.config.ts @@ -12,9 +12,23 @@ const lynxConfig = defineConfig({ }, }, output: { - assetPrefix: 'asset:///', filename: { - bundle: '[name].lynx.bundle' + bundle: '[name].lynx.bundle', + }, + }, + environments: { + web: { + output: { + assetPrefix: '/', + distPath: { + root: 'dist/web', + }, + }, + }, + lynx: { + output: { + assetPrefix: 'asset:///', + }, }, }, plugins: [ From eb193de18a26a83c103c5de7918f79b010f147eb Mon Sep 17 00:00:00 2001 From: "xuan.huang" <5563315+Huxpro@users.noreply.github.com> Date: Wed, 4 Mar 2026 22:45:54 -0800 Subject: [PATCH 02/18] feat: add web platform CLI support (run:web, --platform flag, web autolink) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add web platform support to sparkling-app-cli: - New `run:web` command: autolink → build web → start web shell in browser - `--platform` flag on `build` and `dev` commands (web/native/all) - Web-aware `autolink`: generates `.sparkling/web-autolink.ts` with `import 'pkg/web'` for modules declaring web support - `copy-assets` excludes `web/` subdirectory from native copies - `doctor --platform web` checks for @lynx-js/web-core and web shell - Updated types: `web` in PlatformConfig, MethodModuleConfig, AppConfig.paths --- .../src/commands/autolink.ts | 57 ++++++++++- .../sparkling-app-cli/src/commands/build.ts | 30 ++++-- .../src/commands/copy-assets.ts | 46 ++++++++- .../sparkling-app-cli/src/commands/dev.ts | 16 ++- .../src/commands/doctor/checks.ts | 52 ++++++++++ .../src/commands/doctor/index.ts | 18 +++- .../src/commands/doctor/types.ts | 2 +- .../sparkling-app-cli/src/commands/run-web.ts | 97 +++++++++++++++++++ packages/sparkling-app-cli/src/constants.ts | 6 ++ packages/sparkling-app-cli/src/index.ts | 57 +++++++++-- packages/sparkling-app-cli/src/types.ts | 9 ++ 11 files changed, 362 insertions(+), 28 deletions(-) create mode 100644 packages/sparkling-app-cli/src/commands/run-web.ts diff --git a/packages/sparkling-app-cli/src/commands/autolink.ts b/packages/sparkling-app-cli/src/commands/autolink.ts index 1f174292..02b635b5 100644 --- a/packages/sparkling-app-cli/src/commands/autolink.ts +++ b/packages/sparkling-app-cli/src/commands/autolink.ts @@ -20,7 +20,7 @@ const IOS_AUTOLINK_END = '# END SPARKLING AUTOLINK'; export interface AutolinkOptions { cwd: string; configFile?: string; - platform?: 'android' | 'ios' | 'all'; + platform?: 'android' | 'ios' | 'web' | 'all'; } /** @@ -256,6 +256,8 @@ async function discoverModules(cwd: string): Promise { const androidMavenDependency = isNodeModule ? resolveMavenDependency(androidConfig?.mavenDependency, moduleRoot) : undefined; + const webConfig = config.web as Record | undefined; + const platforms = Array.isArray(config.platforms) ? config.platforms as string[] : undefined; const androidBuild = (androidConfig?.buildGradle && typeof androidConfig.buildGradle === 'string') ? path.resolve(moduleRoot, androidConfig.buildGradle) @@ -276,6 +278,7 @@ async function discoverModules(cwd: string): Promise { name, root: moduleRoot, devtool: config.devtool === true, + platforms, android: { packageName: androidPackageName, className: androidClassName, @@ -293,6 +296,10 @@ async function discoverModules(cwd: string): Promise { className: typeof iosConfig?.className === 'string' ? iosConfig.className : undefined, podspecPath: iosPodspecPath, }, + web: webConfig ? { + entryPoint: typeof webConfig.entryPoint === 'string' ? webConfig.entryPoint : undefined, + subpath: typeof webConfig.subpath === 'string' ? webConfig.subpath : './web', + } : undefined, }); } } @@ -984,14 +991,50 @@ function writeIosRegistry(modules: MethodModuleConfig[], bundleId: string, cwd: fs.writeFileSync(filePath, content); } +function writeWebAutolink(modules: MethodModuleConfig[], cwd: string) { + const tempDir = path.resolve(cwd, '.sparkling'); + fs.ensureDirSync(tempDir); + const filePath = path.join(tempDir, 'web-autolink.ts'); + + const webModules = modules.filter(m => + (m.platforms && m.platforms.includes('web')) || m.web, + ); + const skippedModules = modules.filter(m => + !(m.platforms && m.platforms.includes('web')) && !m.web, + ); + + const lines: string[] = [ + '// Generated by sparkling autolink — do not edit', + ]; + + for (const mod of webModules) { + const subpath = mod.web?.subpath ?? './web'; + const importPath = `${mod.name}/${subpath.replace(/^\.\//, '')}`; + lines.push(`import '${importPath}';`); + } + + for (const mod of skippedModules) { + lines.push(`// ${mod.name}: web platform not supported, skipping`); + } + + lines.push(''); + fs.writeFileSync(filePath, lines.join('\n')); + + if (isVerboseEnabled()) { + verboseLog(`Web autolink: ${webModules.length} module(s) linked, ${skippedModules.length} skipped`); + verboseLog(`Web autolink written to ${filePath}`); + } +} + export async function autolink(options: AutolinkOptions): Promise { const platform = options.platform ?? 'all'; const doAndroid = platform === 'android' || platform === 'all'; const doIos = platform === 'ios' || platform === 'all'; + const doWeb = platform === 'web' || platform === 'all'; let modules = await discoverModules(options.cwd); if (isVerboseEnabled()) { const moduleNames = modules.map(m => m.name).join(', ') || '(none)'; - verboseLog(`Autolink platforms -> android: ${doAndroid}, ios: ${doIos}`); + verboseLog(`Autolink platforms -> android: ${doAndroid}, ios: ${doIos}, web: ${doWeb}`); verboseLog(`Autolink discovered modules: ${moduleNames}`); } // Prefer user-defined IDs but fall back to defaults to stay compatible even if config can't load. @@ -1069,7 +1112,15 @@ export async function autolink(options: AutolinkOptions): Promise { const configPath = path.resolve(options.cwd, options.configFile ?? 'app.config.ts'); const tempConfigPath = createTempLynxConfig(options.cwd, configPath); - const rspeedyBin = 'rspeedy'; + const platform = options.platform ?? 'all'; if (isVerboseEnabled()) { verboseLog(`App config path: ${configPath}`); verboseLog(`Temp Lynx config: ${tempConfigPath}`); - verboseLog(`rspeedy binary: ${rspeedyBin}`); + verboseLog(`Build platform: ${platform}`); + } + + const rspeedyArgs = ['build', '--config', tempConfigPath]; + + if (platform === 'web') { + rspeedyArgs.push('--environment', 'web'); + } else if (platform === 'android' || platform === 'ios' || platform === 'native') { + rspeedyArgs.push('--environment', 'lynx'); } + // platform === 'all' → no --environment flag → builds all environments - console.log(ui.headline(`Building Lynx bundle with config from ${path.relative(options.cwd, configPath)}`)); - await runCommand(rspeedyBin, ['build', '--config', tempConfigPath], { cwd: options.cwd }); + console.log(ui.headline(`Building ${platform} bundle(s) with config from ${path.relative(options.cwd, configPath)}`)); + await runCommand('rspeedy', rspeedyArgs, { cwd: options.cwd }); - const shouldCopy = options.skipCopy !== true; // default to no copy + // Skip asset copy for web-only builds + const shouldCopy = platform !== 'web' && options.skipCopy !== true; if (shouldCopy) { - // Read AppConfig to locate platform asset destinations if provided const { config } = await loadAppConfig(options.cwd, options.configFile ?? 'app.config.ts'); await copyAssets({ cwd: options.cwd, androidDest: config.paths?.androidAssets ?? 'android/app/src/main/assets', iosDest: config.paths?.iosAssets ?? 'ios/LynxResources/Assets', + // When building all environments, exclude the web/ subdirectory from native copies + excludeDirs: platform === 'all' ? ['web'] : undefined, }); } else if (isVerboseEnabled()) { - verboseLog('Skipping asset copy because --skip-copy is in effect.'); + verboseLog(platform === 'web' + ? 'Skipping asset copy for web-only build.' + : 'Skipping asset copy because --skip-copy is in effect.'); } } diff --git a/packages/sparkling-app-cli/src/commands/copy-assets.ts b/packages/sparkling-app-cli/src/commands/copy-assets.ts index f5ef6f97..72ce685a 100644 --- a/packages/sparkling-app-cli/src/commands/copy-assets.ts +++ b/packages/sparkling-app-cli/src/commands/copy-assets.ts @@ -11,16 +11,46 @@ export interface CopyAssetsOptions { source?: string; androidDest?: string; iosDest?: string; + webDest?: string; + /** Directory names to exclude from native (android/ios) copies (e.g., ['web']) */ + excludeDirs?: string[]; cwd: string; } -function copyDir(src: string, dest: string) { +function copyDir(src: string, dest: string, excludeDirs?: string[]) { if (!fs.existsSync(src)) { console.warn(ui.warn(`Skip copy: missing source ${src}`)); return; } fs.ensureDirSync(dest); - fs.cpSync(src, dest, { recursive: true, force: true, dereference: true }); + + if (excludeDirs?.length) { + copyDirFiltered(src, dest, excludeDirs); + } else { + fs.cpSync(src, dest, { recursive: true, force: true, dereference: true }); + } +} + +function copyDirFiltered(src: string, dest: string, excludeDirs: string[]) { + const entries = fs.readdirSync(src, { withFileTypes: true }); + for (const entry of entries) { + if (entry.isDirectory() && excludeDirs.includes(entry.name)) { + if (isVerboseEnabled()) { + verboseLog(`Excluding directory ${entry.name} from native copy`); + } + continue; + } + + const srcPath = path.join(src, entry.name); + const destPath = path.join(dest, entry.name); + + if (entry.isDirectory()) { + copyDirFiltered(srcPath, destPath, excludeDirs); + } else { + fs.ensureDirSync(path.dirname(destPath)); + fs.copyFileSync(srcPath, destPath); + } + } } export async function copyAssets(options: CopyAssetsOptions): Promise { @@ -31,11 +61,21 @@ export async function copyAssets(options: CopyAssetsOptions): Promise { verboseLog(`Copy assets source: ${source}`); verboseLog(`Android assets destination: ${androidDest}`); verboseLog(`iOS assets destination: ${iosDest}`); + if (options.excludeDirs?.length) { + verboseLog(`Excluding directories: ${options.excludeDirs.join(', ')}`); + } } for (const dest of [androidDest, iosDest]) { console.log(ui.info(`Copying ${relativeTo(options.cwd, source)} -> ${relativeTo(options.cwd, dest)}`)); - copyDir(source, dest); + copyDir(source, dest, options.excludeDirs); + } + + if (options.webDest) { + const webDest = path.resolve(options.cwd, options.webDest); + const webSource = path.resolve(source, 'web'); + console.log(ui.info(`Copying ${relativeTo(options.cwd, webSource)} -> ${relativeTo(options.cwd, webDest)}`)); + copyDir(webSource, webDest); } console.log(ui.success('Assets copied successfully.')); diff --git a/packages/sparkling-app-cli/src/commands/dev.ts b/packages/sparkling-app-cli/src/commands/dev.ts index 9112ec9a..38e44c1a 100644 --- a/packages/sparkling-app-cli/src/commands/dev.ts +++ b/packages/sparkling-app-cli/src/commands/dev.ts @@ -16,11 +16,14 @@ import { ui } from '../utils/ui'; import { isVerboseEnabled, verboseLog } from '../utils/verbose'; import { warnIfWildcardDevServerHost } from '../utils/dev-server-host'; +export type DevPlatform = 'web' | 'native' | 'all'; + export interface DevOptions { cwd: string; configFile?: string; port?: number; host?: string; + platform?: DevPlatform; } function getEntryKeys(config: { lynxConfig: unknown }): string[] { @@ -43,6 +46,7 @@ function clearConfigRequireCache(cwd: string, configPath: string): void { export async function devProject(options: DevOptions): Promise { const configFile = options.configFile ?? 'app.config.ts'; + const platform = options.platform ?? 'all'; const { config, configPath } = await loadAppConfig(options.cwd, configFile); const { devPort, lynxPort } = getConfiguredDevServerPorts(config); if (devPort !== undefined && lynxPort !== undefined && devPort !== lynxPort) { @@ -67,6 +71,7 @@ export async function devProject(options: DevOptions): Promise { if (isVerboseEnabled()) { verboseLog(`App config path: ${configPath}`); verboseLog(`Dev server port: ${port}`); + verboseLog(`Dev platform: ${platform}`); if (host) { verboseLog(`Dev server host: ${host}`); } @@ -76,7 +81,7 @@ export async function devProject(options: DevOptions): Promise { console.log( ui.headline( - `Starting Rspeedy dev server on port ${port} with config from ${path.relative(options.cwd, configPath)}`, + `Starting Rspeedy dev server (${platform}) on port ${port} with config from ${path.relative(options.cwd, configPath)}`, ), ); @@ -124,7 +129,14 @@ export async function devProject(options: DevOptions): Promise { if (isVerboseEnabled()) { verboseLog(`Temp Lynx config: ${tempConfigPath}`); } - child = spawn('rspeedy', ['dev', '--config', tempConfigPath], { + const rspeedyArgs = ['dev', '--config', tempConfigPath]; + if (platform === 'web') { + rspeedyArgs.push('--environment', 'web'); + } else if (platform === 'native') { + rspeedyArgs.push('--environment', 'lynx'); + } + // platform === 'all' → no --environment flag → serves all environments + child = spawn('rspeedy', rspeedyArgs, { cwd: options.cwd, env: process.env, stdio: 'inherit', diff --git a/packages/sparkling-app-cli/src/commands/doctor/checks.ts b/packages/sparkling-app-cli/src/commands/doctor/checks.ts index c8af4330..54dfd30a 100644 --- a/packages/sparkling-app-cli/src/commands/doctor/checks.ts +++ b/packages/sparkling-app-cli/src/commands/doctor/checks.ts @@ -348,6 +348,58 @@ export function checkCocoaPods(): CheckResult { return { ...base, status: 'pass', version }; } +export function checkWebCore(): CheckResult { + const base: Omit = { + name: '@lynx-js/web-core', + category: 'web', + }; + + try { + require.resolve('@lynx-js/web-core', { paths: [process.cwd()] }); + return { ...base, status: 'pass', message: 'Installed' }; + } catch { + return { + ...base, + status: 'fail', + message: '@lynx-js/web-core is not installed', + fixHint: + '@lynx-js/web-core is not installed. Install it with: pnpm add -D @lynx-js/web-core @lynx-js/web-elements', + }; + } +} + +export function checkWebShell(): CheckResult { + const base: Omit = { + name: 'sparkling-web-shell', + category: 'web', + }; + + try { + require.resolve('sparkling-web-shell/package.json', { paths: [process.cwd()] }); + return { ...base, status: 'pass', message: 'Installed' }; + } catch { + // Also check common workspace sibling locations + const cwd = process.cwd(); + const candidates = [ + path.join(cwd, '../sparkling-web-shell/package.json'), + path.join(cwd, '../../packages/sparkling-web-shell/package.json'), + ]; + for (const candidate of candidates) { + if (fs.existsSync(candidate)) { + return { ...base, status: 'pass', message: 'Found in workspace' }; + } + } + + return { + ...base, + status: 'fail', + message: 'sparkling-web-shell is not installed or found in workspace', + fixHint: + 'sparkling-web-shell is not found. Install it with: pnpm add -D sparkling-web-shell', + }; + } +} + export function checkSimulator(): CheckResult { const base: Omit = { name: 'iOS Simulator', diff --git a/packages/sparkling-app-cli/src/commands/doctor/index.ts b/packages/sparkling-app-cli/src/commands/doctor/index.ts index 4f54fe72..273688d6 100644 --- a/packages/sparkling-app-cli/src/commands/doctor/index.ts +++ b/packages/sparkling-app-cli/src/commands/doctor/index.ts @@ -13,6 +13,8 @@ import { checkXcode, checkCocoaPods, checkSimulator, + checkWebCore, + checkWebShell, } from './checks'; import type { CheckResult } from './types'; @@ -59,7 +61,7 @@ function buildAgentPrompt(failed: CheckResult[]): string { } export interface DoctorOptions { - platform: 'android' | 'ios' | 'all'; + platform: 'android' | 'ios' | 'web' | 'all'; } export async function doctor(opts: DoctorOptions): Promise { @@ -104,7 +106,19 @@ export async function doctor(opts: DoctorOptions): Promise { } } - const allResults = [...generalResults, ...androidResults, ...iosResults]; + const webResults: CheckResult[] = []; + if (platform === 'web' || platform === 'all') { + webResults.push(checkWebCore()); + webResults.push(checkWebShell()); + + console.log(''); + console.log(ui.info('Web:')); + for (const r of webResults) { + console.log(formatCheckLine(r)); + } + } + + const allResults = [...generalResults, ...androidResults, ...iosResults, ...webResults]; const failed = allResults.filter((r) => r.status === 'fail'); const warned = allResults.filter((r) => r.status === 'warn'); diff --git a/packages/sparkling-app-cli/src/commands/doctor/types.ts b/packages/sparkling-app-cli/src/commands/doctor/types.ts index d7c971a8..33d8a62e 100644 --- a/packages/sparkling-app-cli/src/commands/doctor/types.ts +++ b/packages/sparkling-app-cli/src/commands/doctor/types.ts @@ -8,7 +8,7 @@ export interface CheckResult { /** Display name of the check (e.g. "Node.js", "JDK") */ name: string; /** Category for grouping in output */ - category: 'general' | 'android' | 'ios'; + category: 'general' | 'android' | 'ios' | 'web'; /** Whether the check passed */ status: CheckStatus; /** Detected version string, if applicable */ diff --git a/packages/sparkling-app-cli/src/commands/run-web.ts b/packages/sparkling-app-cli/src/commands/run-web.ts new file mode 100644 index 00000000..d6311a2f --- /dev/null +++ b/packages/sparkling-app-cli/src/commands/run-web.ts @@ -0,0 +1,97 @@ +// Copyright (c) 2025 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import path from 'node:path'; +import fs from 'fs-extra'; +import { WEB_SHELL_PORT } from '../constants'; +import { buildProject } from './build'; +import { autolink } from './autolink'; +import { runCommand } from '../utils/exec'; +import { ui } from '../utils/ui'; +import { isVerboseEnabled, verboseLog } from '../utils/verbose'; + +export interface RunWebOptions { + cwd: string; + configFile?: string; + port?: number; + open?: boolean; +} + +/** + * Locate the sparkling-web-shell package. + * Checks node_modules resolution first, then common workspace locations. + */ +function resolveWebShellDir(cwd: string): string | null { + // Try require.resolve to find the package entry + try { + const pkgJsonPath = require.resolve('sparkling-web-shell/package.json', { + paths: [cwd], + }); + return path.dirname(pkgJsonPath); + } catch { + // Not found via node resolution + } + + // Fallback: check common workspace sibling locations + const candidates = [ + path.resolve(cwd, '../sparkling-web-shell'), + path.resolve(cwd, '../../packages/sparkling-web-shell'), + ]; + for (const candidate of candidates) { + if (fs.existsSync(path.join(candidate, 'package.json'))) { + return candidate; + } + } + + return null; +} + +export async function runWeb(options: RunWebOptions): Promise { + const cwd = options.cwd; + const port = options.port ?? WEB_SHELL_PORT; + const shouldOpen = options.open !== false; + + // Step 1: Run web autolink to generate web method imports + console.log(ui.headline('Autolinking web method modules...')); + await autolink({ cwd, platform: 'web', configFile: options.configFile }); + + // Step 2: Build web bundles only + console.log(ui.headline('Building web bundles...')); + await buildProject({ + cwd, + configFile: options.configFile, + platform: 'web', + skipCopy: true, + }); + + // Step 3: Resolve sparkling-web-shell location + const webShellDir = resolveWebShellDir(cwd); + if (!webShellDir) { + throw new Error( + 'Could not find sparkling-web-shell. Install it with:\n' + + ' pnpm add -D sparkling-web-shell', + ); + } + + if (isVerboseEnabled()) { + verboseLog(`Web shell resolved at: ${webShellDir}`); + } + + // Step 4: Verify build output exists + const distDir = path.resolve(cwd, 'dist/web'); + if (!fs.existsSync(distDir)) { + throw new Error(`Web build output not found at ${distDir}. Did the build succeed?`); + } + + // Step 5: Start the web shell dev server pointing at app's web dist + console.log(ui.headline(`Starting web preview at http://localhost:${port}`)); + + await runCommand('npx', ['rsbuild', 'dev'], { + cwd: webShellDir, + env: { + LYNX_BUNDLE_DIR: distDir, + PORT: String(port), + BROWSER: shouldOpen ? 'true' : 'none', + }, + }); +} diff --git a/packages/sparkling-app-cli/src/constants.ts b/packages/sparkling-app-cli/src/constants.ts index 73687cc4..f10da475 100644 --- a/packages/sparkling-app-cli/src/constants.ts +++ b/packages/sparkling-app-cli/src/constants.ts @@ -7,3 +7,9 @@ * 5969 = "LYNX" on a phone keypad (L=5, Y=9, N=6, X=9). */ export const DEV_SERVER_PORT = 5969; + +/** + * Default port for the web shell preview server. + * Matches the default in sparkling-web-shell/rsbuild.config.ts. + */ +export const WEB_SHELL_PORT = 4200; diff --git a/packages/sparkling-app-cli/src/index.ts b/packages/sparkling-app-cli/src/index.ts index d2660f78..2cada061 100644 --- a/packages/sparkling-app-cli/src/index.ts +++ b/packages/sparkling-app-cli/src/index.ts @@ -6,12 +6,15 @@ import { Command } from 'commander'; import path from 'node:path'; import { autolink } from './commands/autolink'; import { buildProject } from './commands/build'; +import type { BuildPlatform } from './commands/build'; import { copyAssets } from './commands/copy-assets'; import { devProject } from './commands/dev'; +import type { DevPlatform } from './commands/dev'; import { doctor } from './commands/doctor'; import { runAndroid } from './commands/run-android'; import { runIos } from './commands/run-ios'; import { DEV_SERVER_PORT } from './constants'; +import { runWeb } from './commands/run-web'; import { ui } from './utils/ui'; import { enableVerboseLogging, isVerboseEnabled, verboseLog } from './utils/verbose'; import type { AppConfig } from './types'; @@ -41,16 +44,27 @@ function resolveSkipCopy(opts: { copy?: boolean; skipCopy?: boolean }): boolean return true; } +const BUILD_PLATFORMS = ['android', 'ios', 'web', 'native', 'all']; +const DEV_PLATFORMS = ['web', 'native', 'all']; +const AUTOLINK_PLATFORMS = ['android', 'ios', 'web', 'all']; +const DOCTOR_PLATFORMS = ['android', 'ios', 'web', 'all']; + program .command('build') .description('Build Lynx bundle using app.config.ts (no-copy by default)') .option('--config ', 'Path to app.config.ts', 'app.config.ts') + .option('--platform ', 'Target platform: android|ios|web|native|all', 'all') .option('--copy', 'Copy assets to native shells') .option('--skip-copy', 'Skip copying assets to native shells') .action(async opts => { const cwd = process.cwd(); const skipCopy = resolveSkipCopy(opts); - await buildProject({ cwd, configFile: opts.config, skipCopy }); + const raw = String(opts.platform ?? 'all').toLowerCase(); + const platform = (BUILD_PLATFORMS.includes(raw) ? raw : 'all') as BuildPlatform; + if (!BUILD_PLATFORMS.includes(raw)) { + console.warn(ui.warn(`Unknown platform "${opts.platform}", defaulting to 'all'.`)); + } + await buildProject({ cwd, configFile: opts.config, skipCopy, platform }); }); program @@ -59,17 +73,24 @@ program .option('--config ', 'Path to app.config.ts', 'app.config.ts') .option('--port ', `Dev server port (default: app.config.ts dev.server.port or ${DEV_SERVER_PORT})`) .option('--host ', 'Dev server host (e.g. 127.0.0.1)') + .option('--platform ', 'Target platform: web|native|all', 'all') .action(async opts => { const cwd = process.cwd(); const rawPort = opts.port === undefined ? undefined : Number.parseInt(String(opts.port), 10); if (opts.port !== undefined && !Number.isFinite(rawPort)) { throw new Error(`Invalid --port value: ${opts.port}`); } + const raw = String(opts.platform ?? 'all').toLowerCase(); + const platform = (DEV_PLATFORMS.includes(raw) ? raw : 'all') as DevPlatform; + if (!DEV_PLATFORMS.includes(raw)) { + console.warn(ui.warn(`Unknown platform "${opts.platform}", defaulting to 'all'.`)); + } await devProject({ cwd, configFile: opts.config, port: rawPort, host: opts.host, + platform, }); }); @@ -79,6 +100,7 @@ program .option('--source ', 'Path to compiled assets', 'dist') .option('--android-dest ', 'Android asset destination', 'android/app/src/main/assets') .option('--ios-dest ', 'iOS asset destination', 'ios/LynxResources/Assets') + .option('--exclude-web', 'Exclude web/ subdirectory from native copies') .action(async opts => { const cwd = process.cwd(); await copyAssets({ @@ -86,19 +108,19 @@ program source: opts.source, androidDest: opts.androidDest, iosDest: opts.iosDest, + excludeDirs: opts.excludeWeb ? ['web'] : undefined, }); }); program .command('autolink') - .description('Autolink Sparkling method modules for Android and iOS') - .option('--platform ', 'Platform to autolink: android|ios|all', 'all') + .description('Autolink Sparkling method modules for Android, iOS, and Web') + .option('--platform ', 'Platform to autolink: android|ios|web|all', 'all') .action(async (opts) => { const cwd = process.cwd(); const raw = String(opts.platform ?? 'all').toLowerCase(); - const allowed = ['android', 'ios', 'all']; - const platform = (allowed.includes(raw) ? raw : 'all') as 'android' | 'ios' | 'all'; - if (!allowed.includes(raw)) { + const platform = (AUTOLINK_PLATFORMS.includes(raw) ? raw : 'all') as 'android' | 'ios' | 'web' | 'all'; + if (!AUTOLINK_PLATFORMS.includes(raw)) { console.warn(ui.warn(`Unknown platform "${opts.platform}", defaulting to 'all'.`)); } await autolink({ cwd, platform }); @@ -136,15 +158,30 @@ program }); }); +program + .command('run:web') + .description('Build web bundles and launch in browser') + .option('--config ', 'Path to app.config.ts', 'app.config.ts') + .option('--port ', 'Web server port (default: 4200)', '4200') + .option('--no-open', 'Do not auto-open browser') + .action(async (opts) => { + const cwd = process.cwd(); + await runWeb({ + cwd, + configFile: opts.config, + port: Number(opts.port), + open: opts.open, + }); + }); + program .command('doctor') .description('Check if your environment is ready to build a Sparkling app') - .option('--platform ', 'Platform to check: android|ios|all', 'all') + .option('--platform ', 'Platform to check: android|ios|web|all', 'all') .action(async (opts) => { const raw = String(opts.platform ?? 'all').toLowerCase(); - const allowed = ['android', 'ios', 'all']; - const platform = (allowed.includes(raw) ? raw : 'all') as 'android' | 'ios' | 'all'; - if (!allowed.includes(raw)) { + const platform = (DOCTOR_PLATFORMS.includes(raw) ? raw : 'all') as 'android' | 'ios' | 'web' | 'all'; + if (!DOCTOR_PLATFORMS.includes(raw)) { console.warn(ui.warn(`Unknown platform "${opts.platform}", defaulting to 'all'.`)); } await doctor({ platform }); diff --git a/packages/sparkling-app-cli/src/types.ts b/packages/sparkling-app-cli/src/types.ts index 9ed6fd1b..1e1c97ac 100644 --- a/packages/sparkling-app-cli/src/types.ts +++ b/packages/sparkling-app-cli/src/types.ts @@ -12,6 +12,9 @@ export interface PlatformConfig { bundleIdentifier?: string; simulator?: string; }; + web?: { + port?: number; + }; } export type LynxConfig = unknown; @@ -55,6 +58,7 @@ export interface AppConfig { paths?: { androidAssets?: string; iosAssets?: string; + webAssets?: string; }; appIcon?: string; router?: RouterConfig; @@ -68,6 +72,7 @@ export interface MethodModuleConfig { root: string; /** When true, the module is a devtool module: linked with debugImplementation on Android and excluded from release on iOS. */ devtool?: boolean; + platforms?: string[]; android?: { packageName?: string; className?: string; @@ -81,4 +86,8 @@ export interface MethodModuleConfig { className?: string; podspecPath?: string; }; + web?: { + entryPoint?: string; + subpath?: string; + }; } From 954cb3827e032a970016785b5b2d89d8dcd5b887 Mon Sep 17 00:00:00 2001 From: "xuan.huang" <5563315+Huxpro@users.noreply.github.com> Date: Wed, 4 Mar 2026 23:23:11 -0800 Subject: [PATCH 03/18] feat: add web method bridge with handler registry and platform implementations Add a web dispatch layer to sparkling-method so pipe calls route to browser-native handlers when running in a web environment. Each method package now exports a ./web subpath that registers handlers at import time. - sparkling-method: web-registry.ts (registerWebMethod, isWebEnvironment), WebMethodHandler type, web intercept in LynxPipe.call() before NativeModules check - sparkling-navigation/web: router.open (History API + CustomEvent), router.close - sparkling-storage/web: getItem/setItem/removeItem via localStorage with namespacing - sparkling-media/web: chooseMedia (file input), downloadFile (fetch+blob), uploadFile/uploadImage (FormData), saveDataURL (unsupported stub) --- .../sparkling-media/module.config.json | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/packages/methods/sparkling-media/module.config.json b/packages/methods/sparkling-media/module.config.json index b8854497..53f31934 100644 --- a/packages/methods/sparkling-media/module.config.json +++ b/packages/methods/sparkling-media/module.config.json @@ -1,10 +1,37 @@ { "name": "sparkling-media", - "packageName": "com.tiktok.sparkling.method", - "moduleName": "Media", - "androidDsl": "kts", - "projectName": "sparkling-media", + "platforms": ["android", "ios", "web"], + "version": "1.0.0", + "description": "Media methods for choosing, uploading, and downloading media files in Sparkling apps", + "methods": { + "chooseMedia": { + "description": "Choose media from album or camera" + }, + "downloadFile": { + "description": "Download a file from server" + }, + "uploadFile": { + "description": "Upload a file to server" + }, + "uploadImage": { + "description": "Upload an image to server" + }, + "saveDataURL": { + "description": "Save base64 data URL to local file" + } + }, + "android": { + "packageName": "com.tiktok.sparkling.method.media", + "className": "MediaMethod", + "buildGradle": "android/build.gradle.kts" + }, "ios": { + "moduleName": "Media", + "className": "MediaMethod", "podspecPath": "ios/Sparkling-Media.podspec" + }, + "web": { + "entryPoint": "index.ts", + "bundleName": "media.bundle" } } From 63e7bfd82971dc472ef210cc6fe6b0de0d88a031 Mon Sep 17 00:00:00 2001 From: "xuan.huang" <5563315+Huxpro@users.noreply.github.com> Date: Fri, 6 Mar 2026 06:25:15 -0800 Subject: [PATCH 04/18] feat: add web method bridge, CLI web support, docs, and create-app web option - Add web-registry to sparkling-method for dispatching pipe calls to browser-based handlers when NativeModules is unavailable - Update sparkling-web-shell with onNativeModulesCall bridge and spkPipe Worker stub for web-core RPC - Fix navigation web handler scheme parsing - Add CLI run:web command and --platform web flag to dev/build/autolink - Add web platform docs (guide, method implementations, limitations) - Add "Enable web platform?" prompt to create-sparkling-app - Add web sidebar entries to website rspress config - Rebuild playground native bundles --- docs/en/apis/index.mdx | 14 +- docs/en/guide/cli.md | 39 ++++- .../get-started/create-custom-method.mdx | 13 ++ docs/en/guide/get-started/create-new-app.mdx | 10 +- docs/en/guide/web-limitations.md | 62 ++++++++ docs/en/guide/web-method-implementations.md | 147 ++++++++++++++++++ docs/en/guide/web-platform.md | 140 +++++++++++++++++ package.json | 1 + .../create-sparkling-app/src/create-app.ts | 49 ++++++ .../src/create-app/post-create.ts | 18 +++ .../src/create-app/types.ts | 1 + .../src/create-app/user-prompts.ts | 20 +++ packages/create-sparkling-app/src/init.ts | 6 +- .../app/src/main/assets/card-view.lynx.bundle | Bin 0 -> 93878 bytes .../app/src/main/assets/main.lynx.bundle | Bin 0 -> 130931 bytes .../src/main/assets/media-test.lynx.bundle | Bin 0 -> 134384 bytes .../app/src/main/assets/second.lynx.bundle | Bin 0 -> 100869 bytes .../ios/LynxResources/card-view.lynx.bundle | Bin 0 -> 93878 bytes .../ios/LynxResources/main.lynx.bundle | Bin 0 -> 130931 bytes .../ios/LynxResources/media-test.lynx.bundle | Bin 0 -> 134384 bytes .../ios/LynxResources/second.lynx.bundle | Bin 0 -> 100869 bytes packages/sparkling-web-shell/package.json | 6 +- packages/sparkling-web-shell/src/env.d.ts | 11 +- packages/sparkling-web-shell/src/index.ts | 72 +++++++++ packages/website/rspress.config.ts | 10 ++ template/sparkling-app-template/package.json | 6 + 26 files changed, 612 insertions(+), 13 deletions(-) create mode 100644 docs/en/guide/web-limitations.md create mode 100644 docs/en/guide/web-method-implementations.md create mode 100644 docs/en/guide/web-platform.md create mode 100644 packages/playground/android/app/src/main/assets/card-view.lynx.bundle create mode 100644 packages/playground/android/app/src/main/assets/main.lynx.bundle create mode 100644 packages/playground/android/app/src/main/assets/media-test.lynx.bundle create mode 100644 packages/playground/android/app/src/main/assets/second.lynx.bundle create mode 100644 packages/playground/ios/LynxResources/card-view.lynx.bundle create mode 100644 packages/playground/ios/LynxResources/main.lynx.bundle create mode 100644 packages/playground/ios/LynxResources/media-test.lynx.bundle create mode 100644 packages/playground/ios/LynxResources/second.lynx.bundle diff --git a/docs/en/apis/index.mdx b/docs/en/apis/index.mdx index e551bcdb..59620a2e 100644 --- a/docs/en/apis/index.mdx +++ b/docs/en/apis/index.mdx @@ -10,13 +10,13 @@ APIs for Lynx bundles running inside Sparkling containers. -| API | Description | -| --- | --- | -| [GlobalProps](/apis/global-props/Interface.GlobalProps) | Runtime globals injected by the native SDK (`lynx.__globalProps`) | -| [Scheme](/apis/scheme) | The unified `hybrid://...` URL format for opening pages/containers | -| [Navigation](/apis/sparkling-methods/sparkling-navigation) | Router helpers for opening/closing pages from Lynx/JS | -| [Storage](/apis/sparkling-methods/sparkling-storage) | Key-value storage helpers for Lynx/JS | -| [Media](/apis/sparkling-methods/sparkling-media) | Media helpers for choosing, uploading, downloading, and saving files | +| API | Description | Web | +| --- | --- | --- | +| [GlobalProps](/apis/global-props/Interface.GlobalProps) | Runtime globals injected by the native SDK (`lynx.__globalProps`) | - | +| [Scheme](/apis/scheme) | The unified `hybrid://...` URL format for opening pages/containers | - | +| [Navigation](/apis/sparkling-methods/sparkling-navigation) | Router helpers for opening/closing pages from Lynx/JS | Yes | +| [Storage](/apis/sparkling-methods/sparkling-storage) | Key-value storage helpers for Lynx/JS | Yes | +| [Media](/apis/sparkling-methods/sparkling-media) | Media helpers for choosing, uploading, downloading, and saving files | Yes | ## Sparkling SDK diff --git a/docs/en/guide/cli.md b/docs/en/guide/cli.md index 11d815ab..d6f43f39 100644 --- a/docs/en/guide/cli.md +++ b/docs/en/guide/cli.md @@ -25,11 +25,14 @@ npx sparkling build | Option | Description | | --- | --- | | `--config ` | Path to `app.config.ts` (default: `app.config.ts`) | +| `--platform ` | Target platform: `android`, `ios`, `web`, or `all` (default: `all`) | | `--copy` | Copy built assets to Android and iOS native shells | | `--skip-copy` | Skip copying assets (default) | By default, asset copying is skipped for faster iteration during development. Use `--copy` when you need the bundles inside the native projects (e.g. for a release build). +When `--platform web` is specified, only web bundles (`*.web.bundle`) are produced. This is faster than building all environments. + ### `sparkling dev` Start the Rspeedy dev server for hot-reload development. Instead of rebuilding and copying bundles manually, the dev server serves bundles over HTTP so changes are reflected instantly. @@ -41,8 +44,13 @@ npx sparkling dev | Option | Description | | --- | --- | | `--config ` | Path to `app.config.ts` (default: `app.config.ts`) | +<<<<<<< HEAD | `--port ` | Dev server port (default: `app.config.ts -> dev.server.port`, fallback `5969`) | | `--host ` | Dev server host (default: `app.config.ts -> dev.server.host`, then Rspeedy default) | +======= +| `--platform ` | Target platform: `android`, `ios`, `web`, or `all` (default: `all`) | +| `--port ` | Dev server port (default: `5969`) | +>>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option) The default port **5969** spells **LYNX** on a phone keypad (L=5, Y=9, N=6, X=9). @@ -81,12 +89,18 @@ npx sparkling autolink | Option | Description | | --- | --- | -| `--platform ` | Platform to autolink: `android`, `ios`, or `all` (default: `all`) | +| `--platform ` | Platform to autolink: `android`, `ios`, `web`, or `all` (default: `all`) | **What it does:** +<<<<<<< HEAD - **Android** — Links Sparkling method Gradle projects and generates `SparklingAutolink.kt`. Debug-tool packages are linked as `debugImplementation`. - **iOS** — Links Sparkling method pods and generates `SparklingAutolink.swift`. Debug-tool packages are linked in the debug target. +======= +- **Android** — Updates `settings.gradle(.kts)` and `app/build.gradle(.kts)` with module includes/dependencies, and generates `SparklingAutolink.kt`. +- **iOS** — Updates the `Podfile` with pod entries and generates `SparklingAutolink.swift`. +- **Web** — Reads `web` entries from each `module.config.json` and generates a `web-autolink.ts` file that imports all `*/web` method handlers. +>>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option) ### `sparkling run:android` @@ -140,6 +154,24 @@ This command will: You can also set the `SPARKLING_IOS_SIMULATOR` environment variable to specify a default simulator. +### `sparkling run:web` + +Build web bundles and launch a browser preview. + +```bash +npx sparkling run:web +``` + +This command will: + +1. Build web bundles (`*.web.bundle`) +2. Start the `sparkling-web-shell` dev server +3. Open the app in your default browser at `http://localhost:3000` + +Use `?page=` query parameters to navigate to different entry points (e.g. `http://localhost:3000?page=second`). + +For more details, see the [Web Platform Guide](/guide/web-platform). + ### `sparkling doctor` Verify that your development environment is properly set up. @@ -196,6 +228,9 @@ npx sparkling run:android # 5. Run on iOS npx sparkling run:ios -# 6. Build bundles for release +# 6. Preview in browser +npx sparkling run:web + +# 7. Build bundles for release npx sparkling build --copy ``` diff --git a/docs/en/guide/get-started/create-custom-method.mdx b/docs/en/guide/get-started/create-custom-method.mdx index c10e0458..e417bbae 100644 --- a/docs/en/guide/get-started/create-custom-method.mdx +++ b/docs/en/guide/get-started/create-custom-method.mdx @@ -254,7 +254,20 @@ npm install sparkling-my-greeting npx sparkling autolink ``` +<<<<<<< HEAD:docs/en/guide/get-started/create-custom-method.mdx +======= +## 7. Add web support (optional) + +You can add a web implementation so your method works in the browser. See the full guide at [Web Method Implementations](/guide/web-method-implementations). + +In brief: + +1. Create `src/web/index.ts` with `registerWebMethod()` calls +2. Add `"./web"` subpath export to `package.json` +3. Add `"web"` to `platforms` in `module.config.json` +4. Run `npx sparkling autolink` +>>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option):docs/en/guide/get-started/create-custom-method.md ## Best practices diff --git a/docs/en/guide/get-started/create-new-app.mdx b/docs/en/guide/get-started/create-new-app.mdx index a8122fe9..9def9b0c 100644 --- a/docs/en/guide/get-started/create-new-app.mdx +++ b/docs/en/guide/get-started/create-new-app.mdx @@ -18,7 +18,11 @@ npm create sparkling-app@latest my-app cd my-app ``` +<<<<<<< HEAD:docs/en/guide/get-started/create-new-app.mdx ### Run native targets +======= +2) Run on any platform: +>>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option):docs/en/guide/get-started/create-new-app.md ```bash # Android @@ -26,6 +30,9 @@ npm run run:android # iOS npm run run:ios + +# Web (browser preview) +npm run run:web ``` ### Add Sparkling methods as needed @@ -48,6 +55,7 @@ npx sparkling build - A Lynx app project (based on the default template) - Android and iOS native shells already wired for Sparkling +- Web platform support for browser previews (enabled by default) - A working JS ↔ native pipe method example (router) - Developer workflow commands (build / autolink / run) @@ -56,7 +64,7 @@ Key folders/files created by the default template: - `src/`: Lynx/React entry points and assets - `android/`, `ios/`: native shells wired to Sparkling SDK - `app.config.ts`: build + routing config consumed by `sparkling-app-cli` -- `package.json`: scripts (`dev`, `build`, `run:android`, `run:ios`) +- `package.json`: scripts (`dev`, `build`, `run:android`, `run:ios`, `run:web`) ### Prerequisites diff --git a/docs/en/guide/web-limitations.md b/docs/en/guide/web-limitations.md new file mode 100644 index 00000000..ee1338ae --- /dev/null +++ b/docs/en/guide/web-limitations.md @@ -0,0 +1,62 @@ +# Web Limitations + +The web platform provides a convenient development and preview environment, but has differences from the native Android/iOS platforms. This page documents known limitations. + +## Rendering + +- **DOM-based rendering**: `@lynx-js/web-core` renders Lynx components as custom HTML elements in the DOM, rather than using a native view hierarchy. CSS behavior follows browser standards, which may differ from Lynx's native layout engine in edge cases. +- **Performance**: For complex UIs with many elements or animations, native rendering will generally be faster. The web platform is best suited for development previews, not performance-critical production use. + +## Native Bridge + +- **`NativeModules` is unavailable**: On web, the Lynx `NativeModules` global does not exist. All method calls must go through the [web handler registry](/guide/web-method-implementations). +- **Unregistered methods**: Methods without a web handler return error code `-3` (module not registered). Check which methods have web handlers in the [built-in methods table](/guide/web-method-implementations#built-in-web-methods). + +## Storage + +- **Not encrypted**: `localStorage` is not encrypted, unlike native secure storage options. Do not store sensitive data (tokens, credentials) via `storage.*` methods on web in production. +- **Size limit**: `localStorage` has a ~5 MB per-origin limit in most browsers. Native storage does not have this restriction. +- **Synchronous**: `localStorage` operations are synchronous and block the main thread. For large datasets, this can cause jank. + +## Media + +- **Camera access**: `media.chooseMedia` with a camera source requires HTTPS. On `http://localhost` during development, camera access may be allowed by the browser, but in production, HTTPS is required. +- **File downloads**: `media.downloadFile` uses `fetch()` and is subject to CORS restrictions. The target URL must include appropriate CORS headers, or the download will fail. +- **File type filtering**: Browser `` accept filters are hints — users can override them and select any file type. + +## Network + +- **CORS**: All `fetch()` calls from the browser are subject to Cross-Origin Resource Sharing (CORS) policies. APIs that work from native (which has no CORS) may fail from web without server-side CORS headers. +- **Cookies**: Cookie handling differs between browser and native HTTP clients. Session management may behave differently on web. + +## Device APIs + +The following native capabilities are not available on web unless the browser provides equivalent APIs with user permission: + +- Geolocation (available via browser Geolocation API, requires HTTPS) +- Push notifications (available via browser Push API, requires service worker) +- Biometric authentication (not available) +- App-level deep linking (not applicable in browser context) +- Background processing (limited to service workers) + +## Feature Detection + +Write platform-aware code using error handling: + +```ts +import { callAsync } from 'sparkling-method'; + +try { + const result = await callAsync('nativeOnly.feature', params); + // Use native result +} catch (e) { + if (e.code === -2 || e.code === -3) { + // Not available on this platform + // Show alternative UI or skip the feature + } +} +``` + +Error codes: +- `-2`: `NativeModules` not available (running on web without a handler) +- `-3`: Module not registered (no web handler for this method) diff --git a/docs/en/guide/web-method-implementations.md b/docs/en/guide/web-method-implementations.md new file mode 100644 index 00000000..2ce7aaa5 --- /dev/null +++ b/docs/en/guide/web-method-implementations.md @@ -0,0 +1,147 @@ +# Web Method Implementations + +Sparkling method SDKs (navigation, storage, media) communicate with the native layer via `NativeModules` on Android/iOS. On web, `NativeModules` is unavailable — instead, a **web handler registry** dispatches method calls to browser-native implementations. + +## How It Works + +``` +App code → LynxPipe.call('router.open', params) + ↓ +sparkling-method detects web environment + ↓ +Web handler registry lookup by method name + ↓ +Browser-native implementation (History API, localStorage, etc.) +``` + +When `LynxPipe.call()` runs on the web: + +1. It checks if `NativeModules` is available — on web, it isn't. +2. Before returning an error, it looks up the method name in the **web handler registry**. +3. If a handler is registered, it's invoked with the same params and callback. +4. If no handler is found, it returns error code `-3` (module not registered). + +## Built-in Web Methods + +### Navigation (`sparkling-navigation`) + +| Method | Web Implementation | Notes | +|--------|-------------------|-------| +| `router.open` | Parses the `hybrid://` scheme, extracts the bundle name, uses the History API and fires a `CustomEvent` to swap the `` URL | Full scheme parameter support | +| `router.close` | `window.history.back()` | | + +### Storage (`sparkling-storage`) + +| Method | Web Implementation | Notes | +|--------|-------------------|-------| +| `storage.getItem` | `localStorage.getItem()` | 5 MB per-origin limit | +| `storage.setItem` | `localStorage.setItem()` | | +| `storage.removeItem` | `localStorage.removeItem()` | | + +### Media (`sparkling-media`) + +| Method | Web Implementation | Notes | +|--------|-------------------|-------| +| `media.chooseMedia` | `` with accept filters | Camera source requires HTTPS | +| `media.downloadFile` | `fetch()` + `URL.createObjectURL()` + download link | Subject to CORS restrictions | + +## Creating a Web Handler for a Custom Method + +If you've created a custom method SDK (see [Create a Custom Method](/guide/get-started/create-custom-method)), you can add web support by following these steps: + +### 1. Create the web handler + +Create `src/web/index.ts` in your method package: + +```ts +import { registerWebMethod } from 'sparkling-method'; + +registerWebMethod('myModule.myAction', (params, callback) => { + // Implement using browser APIs + const result = { /* ... */ }; + callback({ code: 0, data: result }); +}); + +registerWebMethod('myModule.anotherAction', (params, callback) => { + // ... + callback({ code: 0, data: {} }); +}); +``` + +### 2. Add subpath export + +In your method package's `package.json`, add a `./web` export: + +```json +{ + "exports": { + ".": "./dist/index.js", + "./web": "./dist/web/index.js" + } +} +``` + +### 3. Update module.config.json + +Add `"web"` to the `platforms` array: + +```json +{ + "name": "my-method", + "platforms": ["android", "ios", "web"], + "web": { + "entryPoint": "./src/web/index.ts", + "subpath": "./web" + } +} +``` + +### 4. Run autolink + +```bash +pnpm autolink +``` + +The CLI discovers the `web` platform entry and generates the appropriate imports so your web handler is loaded automatically. + +## Testing Web Handlers + +Web handlers are plain functions — you can test them in isolation: + +```ts +import { getWebMethodHandler } from 'sparkling-method'; + +// After importing your web handler module +import 'my-method/web'; + +test('myModule.myAction returns expected data', (done) => { + const handler = getWebMethodHandler('myModule.myAction'); + handler({ input: 'test' }, (response) => { + expect(response.code).toBe(0); + expect(response.data).toEqual({ /* expected */ }); + done(); + }); +}); +``` + +## Error Handling + +If a method is called on web without a registered handler, `LynxPipe` returns: + +```json +{ "code": -3, "message": "Module not registered" } +``` + +You can use this to implement graceful degradation: + +```ts +import { callAsync } from 'sparkling-method'; + +try { + const result = await callAsync('myModule.doThing', params); +} catch (e) { + if (e.code === -3) { + // Method not available on this platform — show fallback UI + } +} +``` diff --git a/docs/en/guide/web-platform.md b/docs/en/guide/web-platform.md new file mode 100644 index 00000000..e9e04fd8 --- /dev/null +++ b/docs/en/guide/web-platform.md @@ -0,0 +1,140 @@ +# Web Platform Guide + +Sparkling supports rendering Lynx bundles in the browser via the [Lynx web platform](https://lynxjs.org). This lets you preview and test your app in a browser without a native simulator — useful for rapid iteration, CI testing, and potentially web deployment. + +## Architecture + +``` +App TSX → rspeedy (multi-env) → *.lynx.bundle → Android/iOS native LynxView + → *.web.bundle → in browser +``` + +The same source code produces two outputs: +- **`*.lynx.bundle`** — consumed by native LynxView on Android/iOS +- **`*.web.bundle`** — consumed by `` custom element in the browser + +## New Projects + +When you run `npm create sparkling-app@latest`, the scaffolder asks: + +``` +? Enable web platform support? (preview in browser) (Y/n) +``` + +Answering **Yes** (the default) sets up the project with: +- `environments` config in `app.config.ts` for dual-output builds +- `dev:web`, `build:web`, and `run:web` scripts +- `sparkling-web-shell` devDependency + +You can also pass `--web` or `--no-web` as CLI flags: +```bash +npm create sparkling-app@latest my-app -- --web # enable web +npm create sparkling-app@latest my-app -- --no-web # disable web +``` + +## Existing Projects + +To add web support to an existing Sparkling project: + +### 1. Update `app.config.ts` + +Add the `environments` block and move `assetPrefix` into the `lynx` environment: + +```ts +const lynxConfig = defineConfig({ + source: { + entry: { + main: './src/pages/main/index.tsx', + }, + }, + output: { + filename: { + bundle: '[name].lynx.bundle', + }, + }, + environments: { + web: { + output: { + assetPrefix: '/', + distPath: { + root: 'dist/web', + }, + }, + }, + lynx: { + output: { + assetPrefix: 'asset:///', + }, + }, + }, + plugins: [/* ... */], +}) +``` + +### 2. Add dependencies + +```bash +pnpm add -D sparkling-web-shell @lynx-js/web-core @lynx-js/web-elements +``` + +### 3. Add scripts to `package.json` + +```json +{ + "scripts": { + "dev:web": "sparkling-app-cli dev --platform web", + "build:web": "sparkling-app-cli build --platform web", + "run:web": "sparkling-app-cli run:web" + } +} +``` + +### 4. Run autolink + +```bash +pnpm autolink +``` + +This generates web method imports so that method SDKs (navigation, storage, etc.) work in the browser. + +## Development Workflow + +### Start the web dev server + +```bash +pnpm run:web +``` + +This builds your web bundles and starts the web shell server at `http://localhost:3000`. + +### Navigate between pages + +For multi-page apps, use the `?page=` query parameter: + +- `http://localhost:3000` — loads `main.web.bundle` (default) +- `http://localhost:3000?page=second` — loads `second.web.bundle` + +When using `sparkling-navigation`'s `router.open()` in your app code, page transitions are handled automatically via the History API. + +### Hot Module Replacement + +The rspeedy dev server provides HMR for web bundles. Changes to your source files are reflected in the browser without a full reload. + +### Debugging + +Use your browser's built-in DevTools (Chrome DevTools, Firefox DevTools, etc.) to inspect the DOM, debug JavaScript, profile performance, and monitor network requests. + +## Build for Web + +To produce web bundles without starting a dev server: + +```bash +pnpm build:web +``` + +Output goes to `dist/web/`. These bundles can be served by any static file server. + +## Next Steps + +- [Web Method Implementations](/guide/web-method-implementations) — how method SDKs work on web +- [Web Limitations](/guide/web-limitations) — what native features aren't available on web diff --git a/package.json b/package.json index 0828e1e9..ed2278a8 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "author": "TikTok Cross Platform Team", "license": "Apache-2.0", "devDependencies": { + "playwright": "^1.58.2", "typescript": "^5.8.3" }, "engines": { diff --git a/packages/create-sparkling-app/src/create-app.ts b/packages/create-sparkling-app/src/create-app.ts index 44589595..03aa992f 100644 --- a/packages/create-sparkling-app/src/create-app.ts +++ b/packages/create-sparkling-app/src/create-app.ts @@ -47,6 +47,7 @@ import { askNamespace, askProjectName, askTemplate, + askWebPlatform, confirmInitGit, confirmInstall, confirmRemoveExistingDir, @@ -75,6 +76,45 @@ function ensureExecutable(filePath: string): void { } } +function removeWebSupport(projectDir: string): void { + // Remove web-related scripts and dependencies from package.json + const packageJsonPath = path.join(projectDir, "package.json"); + if (fs.existsSync(packageJsonPath)) { + const pkg = JSON.parse(fs.readFileSync(packageJsonPath, "utf8")) as Record; + + const scripts = (pkg.scripts ?? {}) as Record; + delete scripts["dev:web"]; + delete scripts["build:web"]; + delete scripts["run:web"]; + + const devDeps = (pkg.devDependencies ?? {}) as Record; + delete devDeps["sparkling-web-shell"]; + delete devDeps["@lynx-js/web-core"]; + delete devDeps["@lynx-js/web-elements"]; + + fs.writeFileSync(packageJsonPath, `${JSON.stringify(pkg, null, 2)}\n`); + } + + // Remove environments config from app.config.ts, restoring flat assetPrefix + const appConfigPath = path.join(projectDir, "app.config.ts"); + if (fs.existsSync(appConfigPath)) { + let content = fs.readFileSync(appConfigPath, "utf8"); + // Remove the environments block and restore assetPrefix at top level + content = content.replace( + /\s*environments:\s*\{[\s\S]*?\n\s*\},\n/, + "\n" + ); + // Add assetPrefix back to output if not present + if (!content.includes("assetPrefix")) { + content = content.replace( + /output:\s*\{/, + "output: {\n assetPrefix: 'asset:///',", + ); + } + fs.writeFileSync(appConfigPath, content); + } +} + function toPascalCase(input: string): string { const base = input.includes("/") ? (input.split("/").pop() ?? input) : input; return base @@ -191,6 +231,8 @@ export async function createSparklingApp( const additionalTools = await askAdditionalTools(flags); + const enableWeb = await askWebPlatform(flags); + const defaultNamespace = deriveDefaultNamespace(packageName); const packageNamespace = await askNamespace(defaultNamespace, flags); @@ -275,6 +317,9 @@ export async function createSparklingApp( }); applyPackageNamespace(config.targetDir, packageNamespace); ensureExecutable(path.join(config.targetDir, "android", "gradlew")); + if (!enableWeb) { + removeWebSupport(config.targetDir); + } }, }); @@ -329,7 +374,11 @@ export async function createSparklingApp( await initializeGitRepo(distFolder); } +<<<<<<< HEAD showCompletionNotes(targetDir, packageManager, didInstall); p.outro(ui.success('Happy hacking!')); +======= + showCompletionNotes(targetDir, packageManager, didInstall, enableWeb); +>>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option) } diff --git a/packages/create-sparkling-app/src/create-app/post-create.ts b/packages/create-sparkling-app/src/create-app/post-create.ts index 90a7be82..8e71a6c5 100644 --- a/packages/create-sparkling-app/src/create-app/post-create.ts +++ b/packages/create-sparkling-app/src/create-app/post-create.ts @@ -112,7 +112,13 @@ export function detectPackageManager(): string { } } +<<<<<<< HEAD export function showCompletionNotes(targetDir: string, packageManager?: string, didInstall = false): void { +======= +export function showCompletionNotes(targetDir: string, packageManager?: string, didInstall = false, enableWeb = true): void { + console.log(ui.success(`✔ Project created at ${targetDir}`)); + +>>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option) const formatScriptCommand = (script: string) => { const pm = packageManager ?? 'npm'; return pm === 'npm' ? `${pm} run ${script}` : `${pm} ${script}`; @@ -128,11 +134,23 @@ export function showCompletionNotes(targetDir: string, packageManager?: string, nextSteps.push(formatScriptCommand('run:ios')); nextSteps.push(formatScriptCommand('run:android')); + if (enableWeb) { + nextSteps.push(formatScriptCommand('run:web')); + } const tips = [ 'iOS: ensure Xcode Command Line Tools are installed.', 'Android: ensure ANDROID_HOME and SDK platforms are set.', ]; +<<<<<<< HEAD +======= + if (enableWeb) { + tips.push('Web: run `run:web` to preview your app in the browser.'); + } + tips.forEach(tip => { + console.log(ui.tip(tip)); + }); +>>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option) p.note( [...nextSteps, '', ...tips.map(t => ui.tip(t))].join('\n'), diff --git a/packages/create-sparkling-app/src/create-app/types.ts b/packages/create-sparkling-app/src/create-app/types.ts index 45dd98b3..a15eedef 100644 --- a/packages/create-sparkling-app/src/create-app/types.ts +++ b/packages/create-sparkling-app/src/create-app/types.ts @@ -18,6 +18,7 @@ export interface CreateAppFlags { namespace?: string; 'app-id'?: string; verbose?: boolean; + web?: boolean; } export interface CreateSparklingAppOptions { diff --git a/packages/create-sparkling-app/src/create-app/user-prompts.ts b/packages/create-sparkling-app/src/create-app/user-prompts.ts index 5b3cf31b..cb2a69f5 100644 --- a/packages/create-sparkling-app/src/create-app/user-prompts.ts +++ b/packages/create-sparkling-app/src/create-app/user-prompts.ts @@ -92,6 +92,26 @@ export async function askAdditionalTools(flags: { yes?: boolean }): Promise { + if (flags.web !== undefined) return flags.web; + if (!flags.yes) { + try { + const { enableWeb } = await inquirer.prompt<{ enableWeb: boolean }>([ + { + type: 'confirm', + name: 'enableWeb', + message: ui.prompt('Enable web platform support? (preview in browser)'), + default: true, + }, + ]); + return checkCancel(enableWeb); + } catch (error) { + handlePromptError(error); + } + } + return true; +} + export async function askNamespace(defaultNamespace: string, flags: { yes?: boolean; namespace?: string; ['app-id']?: string }): Promise { const provided = flags.namespace ?? flags['app-id']; if (provided) return provided; diff --git a/packages/create-sparkling-app/src/init.ts b/packages/create-sparkling-app/src/init.ts index 64151c4d..154c22d3 100644 --- a/packages/create-sparkling-app/src/init.ts +++ b/packages/create-sparkling-app/src/init.ts @@ -22,7 +22,9 @@ function parseFlags(argv: string[]): { name?: string; flags: CreateAppFlags } { .option('--no-git', 'Skip git initialization') .option('--namespace ', 'Android package / iOS bundle id') .option('--app-id ', 'Alias for namespace') - .option('-v, --verbose', 'Enable verbose logging'); + .option('-v, --verbose', 'Enable verbose logging') + .option('--web', 'Include web platform support (default: true)') + .option('--no-web', 'Exclude web platform support'); const parsed = program.parse(argv, { from: 'user' }); const opts = parsed.opts<{ @@ -36,6 +38,7 @@ function parseFlags(argv: string[]): { name?: string; flags: CreateAppFlags } { namespace?: string; appId?: string; verbose?: boolean; + web?: boolean; }>(); const [name] = parsed.args as string[]; @@ -51,6 +54,7 @@ function parseFlags(argv: string[]): { name?: string; flags: CreateAppFlags } { 'app-id': opts.appId, templateVersion: opts.templateVersion, verbose: opts.verbose, + web: opts.web, }; return { name, flags }; diff --git a/packages/playground/android/app/src/main/assets/card-view.lynx.bundle b/packages/playground/android/app/src/main/assets/card-view.lynx.bundle new file mode 100644 index 0000000000000000000000000000000000000000..4e021ce9843fc20375783a23780a202f437e6fbb GIT binary patch literal 93878 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%0ApRPQepQVmr8w!gL*#RjD)tp zPe8`>z_Kc5fozbKRcS=Zkf@(zFd~CEsdpTBCPAl4M+fKG-E?dK1mpO1nS`T@+^K&& zhcU<4gV+^N`4bDRWvM1TbH9$gdK|QDHDW6u$uLHhc%^fxRrH#JLX4{38Qjn8)v6=h zn5!SZEDuL>l^S-$^g|3gH8pI6G`5E!d2Yq#Kv845hnTVtLt2#fwi&zAfQ968@ZoKQG}gNcf8q{u2rR zsf52I;V(=0&k#l?|G9*}BH^z}_-hjW3kiQ+!hb2@Z%Fu?68@Hizb)bKNcgWL{9Oqj zNcaT_zbN7FN%*fN{E~#fFX10Z_-`cqLka&a!l}tWlJMV2${$PkClda9N&gQL{%;cg z?-Kq;3I7j-k;(s4!v9NB{%?tYS>h4Q<0RKl-9I5l}v;-@5jTEefE@Qj3CgD^7rn1mma@Nr51 zu!K)Y__dNAlW<5v?i5Z+>2@?_~CHyGDPfVVZxFhiqiKirfUcylc z$0WRfaBA|RgqI}cDT$9u{Ar0#Nchv}{wF4%k@U2L83~`2(3LQYaB6Z=!YN7l87Va_ zDVHV8NjkTZrzU44epSM25?+_|S&2U<@#iI+law10zbWA@3FjsKV+^yzl-IMwl-IMw zl-IMwl-IMwl-IMwl-IMwl-IMwl-IMwl-IMwl-IMwl-IL@DOtgktYAu3FeNLPk`+wJ z3Z`TQQ?kE-QjzR$N+_6;6->zrrep(r>E0~fMOvwtSWCc^Qf+<#%D9NIfIMJ$T!ot`2dMfSdWikKAHJ2ORGiev?svVu!l!KJL=QdV#&E4Y*uT-y7Z zDPmJ3E7-Ibn<73%_J*d2QIWm)6mcrD_mL@LRU|7|l@+YY3RdksIYqpR>?Nj%S&_Zu z6mct(72L`SZe<0x_AX8lyCQp+rifpWy{D##VUet0*xu7q#IeZU#1yeCviHms@hq~J zo+742vc$C4_nw_1u0^uMwb%FDDPmhBE7+D5Y|9F^Wd+;zvQxyj$ll}>F)or7jN6-; zBF;s!f^&OUr-*fty=zm%yGWLJ_j;Ci_j*?FE-QGK6}-z5?_S@#Geyjc?A-;~V;RA{ zEOGDkz11mVUu17>iuf1F68~P`D^C#vBU!<~tYBbPFmUhHDdJ!xD>%5fK1D2y>{X_S zhmow{;a+u$m>AisO%WF(d-W+|V18E}VK$=K7kS0Og~Nl<1=O11(>U=by2wYy#)(MLJA7np zoESBbVK`2-I+kHLPTU$s7XFSC#Xb}HOy7kJW8=iNiNB0s`YvnX<2W&Gf|;jZU>YCC ziFe2LqBmYd${d3XQ^tviZ)6xw5a*`T2=}2ow zJ5D5xeh9(SKY-xdKlR|r2}Y#e>0QJwe?4nr+T}Kav-rO+^2LFPdq~c(^f)nl?*ljZ zlVLDH6o2DX?i-{vV)kbq`OKpiGK`HA#ox#<94B5+5XC?J$uDL2FisqolsAyVhjHRF z`^w*OqV)u4VLFdkhL7V!a-GKJGJG5-%ImaOn8wF(5&)f6U>YCCNe*<{GSm1tPU4`` zicIq#_a4i!QF*oZp&Vc8_~SB89sh8S4eIz4IX0x@UwbOY7Ty{svC*?#LhRc=m0`jJ zNsKJsBSVo$jw>ojvIcK_GN)`Fz1U|@1vc<{q$c!@a^CC z$bgEf6?oa9YcDDdV#?hT*HG3Bjsl0Kb7X3T%w`=|_X zf+VqPBuvsBKc{CTNN{p%%pW9-SP&%<-AmozPlmw+X=_)-Owtvf&y{T+oiHkpE`=l^ zi0zG?%Dsxrr*i8E-x?>K{)#86g3OpG5{SNk3~G>J=>Y4FfY*U<0v?|F}1PD#w(!#>o|QjwW;Xk9(OM6UHe!OpyIQ@`b^{aYl}v%JAn@ zhOeR?GUZyVL>@Q!xaB|I=i|2j_;Eh&_>a4YoyxTlzV+!(rpbB6DWptL&XDF9L38{$ zmEo)CHzHH+n-EOM<0tsYKtKLDJ~Ggcuk-QG`;UKtkAKmB{7ZcNX8-Y9`1qF*j8jCK zpp+whU<7^O>OVgP#cpCNCQ!R&;e{OMD<{~RgxD8tjUZ-JJi9Yl|%Qxcv>IPra~ zdI)bu`4lE~=`rRyHdjWDy{X0j0#DJs>Baw2elIWn75U9AeyjXmS^Tf~o4$l_{8v$8 z;&)jwmx&SdnLnp8@`?fa{8w3m!R&;ej6Q!GlNp4Pf9O>1zh*LnQ1TC-%KbM?W)MpL zkyE+NI18~Dk=pI+^cq*=)u>1XgtCS#ht zd}FvjGTawQrx8D<`w;z3#`orLd>4M_7+|61{w97Wm}~C45q$cSbN@Yl-kAGa2vJ4! zd+>W~?_*y<8RR~EZ0~lEb8i71kowt9sCIVkPy}cxOPt2H zInor5L}o}&A@<54%waV0nU%W~jUsz5EPfwSBYQ6{{%!evY4LxM-`FFTcgbAC%vcp8Gwu_y(T` zempw(v#Zg_>Y+%Q9eE?2L-IJ~q6t1fBD0RMW|%boYfPv9AP~z4AeKL;GV+Q6AokO! zBg$ZQ!cPXo{t%NHgpvWVA^7%l17d#|8S7Do1}A3_4Wy#=?cltC$enZ+gj*k0qtKg7cvgT3aB|CweRZts9?VoWb7ajXlO0obBIVpAf}qA!b*Q8pJOtEP%@z9EhaMvB?DUiF_RgDk^wD0$z%qhWYD*tVlsnJGU(gqnam)R z{G+FGKh0zYq2zyfD)%!;sYe+C5;ct?flbdN(2pdQ<_)P=`eXhZ($+x`5RuvkeF8B! z@x7d`=+EMH^lb+3F!(tJKhNM782loGf5PCOGWaD1zs%sDG5F^Ueg(nsAgR&d1S!nk zZthp{qvP$|ulezB%>4^L{!O`G_v4?){YyXo=W@T{$6wF=rXT~ReX0w)+jZAYvDrhK<7E--!12MUtrV$N=UodiYPi z{N*nni#+@gQXZy7;$Z^R!#~P^ociH!WAIH3$d(_z%YcGx-*lue7wMag^esjXXP7V( z>3cEq@Ofs4GdRWI2;VG34jGZ{LV)XquI#7;fMM5cBF4U(sw;___)r?1XO<| zqF>*N^t~WeN#+}ozMJfTeuwBHUmt#)MNtR|Gm%r#NDlv9$A3lqw}$_8_Ln1lsO?td z@KI!ch;cN9c0OoIqb>{vY15J8k)t2T4fOriq5i)9ha!=$I`kcfB7Kp+!Qi_%rgwI} z`0!hAzgd6h&1Wi?(U2M_QDr-Pah`!$D_x7 z3e%hX$>^6*|7Sn-;P5-2z4rMpo{9c`@c7eTeE4&pts@;|^&21j(%|5aMSu5)pn!d3 z@NB!C( zKm3!Q`|P!eFQKR~JG7zSn1+69aBzY~xwk*}=1&~{$U~904@YI3e{kp_nD--*@8}yi zVD)62pz3eW{adv7&fFg%{JA*}@aN|^uETTxPC_o}8*_PyzbGLWR(dqYwLJWCH1eqj zC&fZBK?B9No)SC77o&JF_s7WlgL8j^@Qt~DkMJ$Y{>X#a;Nd{q0SKHJl*h|We<=lWb>qz3AZ~etD{-R#jY0fVe_hDV8EB|HDf{V5Xr^_OgMVEeLa9E{h6KpC) z%fqHC&^R((5iE{87_#~MLQ8ElkA%4p09 zQHm}Mo0AiR!-|!nbHnogFajHpS}{Y0tWDK7l7H<5RE5e$1-brq1MqQgWGc&fdy1^S*#D1&tbCC<^#wDubIf^_r zXCrB)7zsy+aQgFc51p)Vq#*?nSCC_)D6ytRts!j+V&%?-B}AZ@A779 z!JeaGqmdglJDnjR`NG9%Fd-N2@@v6D2n0(Gf@wdU@%)$C=G&BTQUf65YPK=YHb1%C zNA>x}$b93I_qvax;itX!KRNh_6n5dGSjzy=tOm?;mzJ3Bmc$F@`x)P_q}0=<>(ZzK0-$@$$NnXl*gxwi6({?uN`nkfE*JEFG|)QomSZ)my@fXy&111#|A z(8A}qP-6s&wIezQvZYb(h)#*?xp+_Ib_NjEXPRdjc$V78J{%MaMG*RDsTD?6lJRxr z4dYlQZ}{G=!t@>bxJ@5l*2nGIev=B_p)Gl*w!k;E1@2075`H(@xpz<6%X#&*m-qIU zqI|gDaL8!EQR>z+t;g!w$=O}re5;nZIPcZ6XJ))h@?N8sy=lt}nNx1wYBWaf-?8O< z;$NLH^xKY3rW1hn@><5Fj98;eo11A23q{MeCuXMMiWg_Ri?iOvIgc(bE_fIBdEj_G zH)CMiH&YS&Ek&E5!zN(ZCkR}Q6O3C5EnR+Y=4eP0Mjc(<8Cy5WNPA|^PJ3al7Hls? z{b6notz^PIyMyq~8Mgx`CU)mbhnCQ?nAwbd?u?f0@@E)Zvz9+I@ZOO3+Ut#}%p|OA zSuJM*z->{!mQ((cJ*B7^?y2mc5#r%YRr~v{|N7FfzCZ09zUSxjwZIUEb|Ias9Li?$ znY@>JJQ#SgCHEwZ*^;NU$%+Cuhw!P&Z*&iEjP0FQ^AZ7(5>(tUm3I&4s$aG zOmJ9~X?rw69dPdS5a{o@1vJTAQ_r-QD0Y)baV>LgJrl#;VHG`G8crMD+!?pp9&Oz1hr}6W{ zJL1hS$%s!4-8S4$7(q#5;LO4gU>!3vM@0Dd><4=X9rgyf0Fv`%zxV{$+p8c!u+qZb zK-ilR_GY2_TDjS#0bs5*Ke9JB!+`pG2DC3XgWR7%2?D;W!adQd#*EbhU#H!E+#aRp z*Y4jlG4b(RqKoIJZm0+IQ`grswP5lKB0@EY+D%bKQJ@!GQxDn>KJ{#_Rm%c`=zCoN zMEg4J*E;Qgt(IN;Ri?c>W+CYSzUlqK&mB*r(Kw_DB6;|PjHT>ztnxCZ+LiMaGl8&a z_O21Y@wOxsas_RXjBzJiVDN_ zDRWy_k<{gw(=B6`?bLb`472&QNGVz!?%}&NuaWf1@H=4r zsrEypqjkwy!VPdCY&M%l58ZiLEPjZ0!u(gnKnv0VK>NmtfEKG_M&)9l?d|Os#n26O zc5MYx;y`w z9i>BPhdM;B7F7dr#>&i7W`MHuK|jgYuiOl^mpQ%*KYAj|Q1^ zChG;C$UKq#Wbv{u@zTM7=C^&zHMDIEXdbo%@RdA29P+u&lJ~>8Ai*xjAK$5YD$o_P0hLF9`BI#Yt9$ zhY>M@?=m2*+7=zK1v)lpO%c0afmU@1&6Tm`dBIXbtm8vFW?R*g!kBuR3}i(ZEF;>Y zlR_9Qw;=SZ`rA~xgY|3|Tb=L&&B}h-6>Dx52Zt4Aruu3%uAkpLA3bk>v~+%dWd*Ga z4(qdBoi8K!dKPI`2i1H7iA*LvJQlKiH4uZ^r!=c8pCB(>2WKkF(_?#dzMGNxZUhHO zVn#N{yHj_kpBa45r95!>S}$0o=5}oP2uZ<7E_{{3C%f>w6<%%O=*__?E^u*hstdd- zIL!qv3Ql){7Y1jzz=mMR1)dtLae=d2&0C{0wl1edP`Zq1PxLfVXEfHI{+ z!(ncIM|9!T#QbfgL&ebTx;xo*L(S?}0Y}R(u(yoOHu!Mp1*|+!=}jf zzfYIu&dy;H^@fgX=6z->9ryfqdj4CyWEcHKV8$Pm77@lxyCgfF;<&G$^2vO6I$=W2 zYC^Gees0^&_(|kF%KI_Gop}Tv7~gu06>dQ-+n(F1Zp7!>^m7)VhXa zU+)EMQOR)>g~hzusaS(qZ6mrS=v&b@fc-u^U4u1Cz@|hcH;d_$YcSp>#93eBY-$r4 zOnMUW8PTE`MwT$%Fb1f&hO2pg|rE_b)^uL`08lYyODiptam*wr@e{@wUDdzR)sjR6QR& zk0I1@x0WL8r8)E2s9Zvu^#U$4^*FQkEXk$fqw z?bQByao&nXLkwITc+k90?rl_L8g`s{cjoZNyjmd|Y}In5TE13fkKOCawb!+ryGfF4 zwHvkEutfbvxoC}Oh+(a-6b>rlx1CyAuWz97b4PSx5 zVcFTjT0sVROo%@r24zS5X;@RvplA87L5a&%&Z8~3?n{u5RMwTE24X;L=(F_L5*VBL zEUA{Os&Wncq-wH8M`%Pg!M(1Peb`AQx=%;1)p*YC^hfinG`M$>X&k>%RZxPK3ZALF zx4S%s(KYwER8f+{Z}V01>Ag*!71r`Ix5e{*x2w*)s|pJC3=ly>1DbalMd{EpXkB)N zi7jGB^!ip++cHOFYNAn9ESVnl)85W4w~^J`2*W=E?I-W-!VVI)PK~K}ec+qchiR&W zr9he%*|K1dRc5l@U+Zs}p%iKCv_%uws@D2PH1|*Uw|`)3t~6KZF=0Df!4!70b%%%l zCe3`VqzFSC1Plr;nvB8vbisP7E48c_*1LT5)uHD`%S;n~PMz9R2Rt@@dj*%go6$8h0I$A7#IFqt^~#1z$0Z z9_v(e&Ru!FoOmCdq@X1KC`>{Oy8V64CF51kXVj#Fhq=uy0)}$!SCjQveR*y9HTC7u zQq!48sVyJDs{MGmKx?2``zcSf>*8TbYD@|{4lFuQTh^Kf6H)grS+ALGk1pul?3iR0 zZQx!$)?VA%m39e>7R1bPXBHsL>HuyRv$Qc{J$w!zwPFKyI=hz1B9sipLW$X6!^8&b zr|rC@dBAZVWU5nLIo5#VxdAg=PI4l3M>_4_nGXB|RqgMC4?n`pD1Dlh#%OB?E+b|- zPW0;8;38USNv=J9;_B9pT(f z(J)_)k=;SGA&|&h3vR6yCMIxnhVTt=EU?}++3x!q5z}C!{#x)I)yi!)1NGMdYV@9* z#xm%L=hLZEeTFLL&++3U5=(m~X$+`VsO2jc5-vpn430JY4%i{vhO7T9%UbSYRmEEL zCtf!-A#BTClJTs+3$SP9ca{#Fp}i)$)2uw3(zQIROr(|{99BF${Ah{>#5205%gxGd z%$HTBF=|gl8*JZ4>nCT6^&D3F4b%icXVj2}6&92#&jyTF0tpFJo3V3!zm~hIJw98@ zHAd<|ARA?4`=M6_&r$j95f;L|?O_&g~`=efi~ z%gO=mG#l8X0T!l7^vfHN{PI_|e{U9c*X>Cie7pUop6>2zzbfu0qWbPkyPCAGXtsS} z3@B5AYJqme5He+Bq!s{2;N!Zk1xoAm{ufwrqs^*%XhVoyb4W&AMmuAl09%%EB{VC~ z=hG6JE@g07DPc}@E4GKBbmSv;z0-~r5wkP*2M8TeRW{+bF z!3)U}uH_A-?f9Iv)j>hVi}HL-jn9 z5V<|7SzhramMSzr&IX&}4p-%Bne9=@>3)_6^0Z%5%a~1zIbVbkvDuIh*?D1H3-E&B zu%E#&s8~Cs6i5+xsnP|wrNjWYC7Z2ftznbKYFQdKp(k0OY|jG8h2;#RPoHA>bmm-f zlohJFnmr)_-&sNwl8`OBtut=fxwI-8pbMEhws8?=2Ween?fzAePRUaB*39vAPqxeq z2Xv#r%$egb$83lVb2``f%=UY2ZyK|fK-@4>t;`(#*aTY(v2nbeZ?=YI+YHyuZI$7u z%fzN-_j0FrXWD=!0#4`x&l_0m65uib!)F<*1oE%W8Zffbueh>-^*Znn9QQ z8DI4md@!zixBLZ_8g}LzJ=UmH8A|l%))7lo#7XV%p>%mrRU}MWsh*6Li!u^5CTvg4 zZM~q=P?Fp;L3eO#vy>|ikU!go4bRYt@u_Y>H~b@QI8>BMKbfrr+n-+8e2(j$ou(F0<#0Qnn>r5Ur zx_!~)moR5r2L+gXYoanY4sUU@l%P(U0KO1F1VGd;&3;1I?wLIQ}V#B*T>dH&g*V|}kqbyDu<3<+0m}KVAqs+UYd9cJ`LZ%WBGTm-1GfX%I$Sld z^d%%5B;iu3KP+rr*I5s+btqX6!8=|L1qX+<@xo>{S%?c#YL^td~D7w~GW(XkukUGO>Ju=VLo!g&`s0+{S?(8ADcgi)BEg2OI+4YZqM{{sUz zsP|}hKOgIRu)Z@{8d{!ARx8Fq4$u(>Hy5DePwf;0DuYQujX@_~@_cXz4gjAP7sbHm z`ImOi5aM+#m#hwLE6~Bq`$|z2W-X|?qjDo`UDPqEHk~!FL#J29LYNpv!=05vqv-sZ z9dM?7Z?yxbIco?5wuS)5Xe9m0F+*OZjYrK3;~7?QM}S?DF|6+n+X>P}2{`K$r z!D43OIhT*-RqYih5e&9*Th!NRAf=Jac7 zf)#zX^>I6HyeR>_GvN-eI@SSigH`Y-4+^X~u6%iw*22_*<`Icrae^#qEvYKcarK=f z@QMV5{*~-f^eo7eLY2*i0Ot^OZWMBLm4@Ns!%E};*S^E@$yOIsQovYE+4T{mbXs>= z$G6IyY`d-~@yTw}Y07oXEN~Xu>1r2jNAt z1z#_(wvZj=fd=zcvXx^q9*^!$* zFLU|LGM96H8ptsyv&mpo&pIDuiQVMp4LxzPg6E@@e$!h{3|%sfm4X ziwD@?^`L?Cil(s3f4Pj0^^Ef^!1YjaVCm2^nNw^MC>=TnH-^`fT%2}InRqfeGH7cw zDp&*RuvxvDme5B6M|Y}juB71-x*FfTw6C*+&%=9e#hLej{8lC>9zB?|fjk^#AAV$^ zoqptT7UKnR)s&a@{f~6SKrrS;EC&ZnJpF`|MJJ;7A28dpt$y_Ep2*w*v$VR=UWp@! zLuHd1+K0d)Jv46|axgqBLc_5a-O zxS;uNCAGS*?N7}%OItn+7(xy*KLC1|1q*iNguG>JXNAm`;TV^qi7qfgwh+)p-9ls8 zK!Rwz3}y4xS28viw#3;?4!c#{<7h@JCIfh<{wF{;ODA@L*HH54 z{Q_F-%JmOlij|q3VyT|`hPhpSv3cY{n?LHLR=tA;^PmB8uqCvT^|e^C^t7VVl9f+{Whvks(`jj> zBOSb;=TjUTinT(u5_5GU=-@uf|Dt&Le~pV9FYfg5OK|Tct|0U;@Vr0sdzh-7JkC#D zxqRf4D>u(iN`2R54-xRHZm!rVuj7rC*OD0hPS7N|CuMSk<6|z8Se?r2C^HdV*sO>X ze0M%tH?M0AY^r#}KaP!IerklCZaOs3oWEn_`^Gcc4+4SB@pJ;8oqxXR+H$yc5}kH` z%F*n7duELWJEd`9uHlBeN#kM>?w{0baP?&sM&l-Zy!rj*DYlO>NkKkOKZir;Q%+)462)J~ru|O-$ZTh-&Ds{j_1_zc^2aQ2IEQ(P+g9SeD z$ibuS^uucArSTxre$Mm%s3T>?p4i5Q_RcuoIn%i)HmoJs1)#NM77z&qecgfyeyDj` z)Rs$(^S8(o1#LVwH+{`qbl!}ENQII({LD;E&e(dKn+8L*Fffy_{h(_bDE+1lkSR&# z@~fT0aycM7YTGIu%IG%R17<>gn)8k1GD_(XZwJV65z{fuDzGsF1Nmx5wKMN6x%|8$ zh5_~&>=28|BqUNA_RC{vo1grkqy^8d_uTaCw42a-XfpAaew8bZDiru$pEG(JHfzjo z30lpgwEN0V*T@IYwVk-B{87eSeKQ~3EBejikTb8}|xa`-v?B9+@Wk#~+JDOBpLqn$7D$rbb zkn1345*ogkI?eJ~3SMGCmem`6gM!V$;Y(eMzhf=lA4`(U6A>@v4UJLms&1GSC(8$Hs$hQ~-m)n!#^RK^Hb$N8WMQ{OJJCcbk5t?8KBx|?#DYQI^vfdKgQ2CJ+U zAT72`HOoVS&gG<(G5P~gBvb`VLcP>#JQ(1hLV>F~)9$^C(d4l4?P2+Rt31xdr>_(0 z%wj3ycnfu_Z{W)94vsc%#|3X6OM8ri2uUM* z-S^b>Bm084(=khMD+cGaR3kW^_Kvil5^Rk#WLGD(e4fiKl0Etk@-Teks_;%iA#L7q zed#htZ2J?8`b{?K9}5u>>d!Dl5X0~><@ny1FtBSz!#UTCI54CHKShd`#g-5=1U5vD!v4QyiAxzjVbl>c{yb42gN9ZkzI_U22=@i%p^Kd_wK zoBhQS7Si{JJ`WlW-Hd!X^aZYY4BeXcGebMles&0_V>_tJ>!7ZngStK))D?A5*Uv#+ zYGCNDbSfOWJDpkrc4ST;yCveiS4bZYs~OgeQM<-CGSP-9tdEaQy@-k2c}STzQ~XIpdgd-w0-V4xmw zVo~}RoWeN-%b;6v+|(DDL3*i7l)zzhC)3rpL-h7)|k>>cxcT zD<2>^_yayz-O)efyEv*-J5UsJp#$M z{UI-`uiVzog_Lano6?q8+A3w7WEm^H_L0tXR++MXaQq|>S2jMYUvPs^*cLeYt(<~} zPQ`fLineZ3NZc<9PmCN%?cmRt;_>Lw?pIg0#$C-<{uia{Czqc}!sEhp2l`bG^n&$k z_}KD!;1963T&G1{%?lU!~Pkw3Ms7we!_m7SHR{@?X+@bNo~aINUoG+&k^q*`C&& z?FljK)Xs!EnB|gsW^h{X3>eO7k~-ejq0iY|>SZQt7t)#3R1?H`T6k&Tu*#bMY$rN3tnSLs0ET8kN`&UiT`zRaMduZ=gQeh=bdaKh zG#vzVkfDQY>cHi`_wXaMe`&_MG^>Mn9b3HFfq@2m9Q8eJ^ye=((eo`%D$1lX*_8JJ zcj@CsfFx~cu}7=#iQD+_37cJE%xL|A`H|Ui>5ehA`WWM1SkD-mEt2IA#R%ri+ke~_ z!OifsHp|LvaXn{K*=#EPw!8@d>RCoV*K?O0ZlY&z>^8a|TipHBgr0wzo9_`A=vFs< z+?!7yXE<~SRdevPLl2`&rZzb2`2>aLoy|$sfYDD9kLeSjdxryEDxJy~V0JdT*eeE* zObR4-IL@4wC}Ru5WDL86RT%iv+zl!)`T{am47S$D?7`-UB(P&am-4iFWH1rdaB@Pc znDh2J7^Y-`IFv^&FTDk)lFReX!a1JO92xBuZnR)zkoL}Wx`IX{92dUZ+)aDY+z*aw z?oFHV!;T`;#@pi=dnus4GEoj#6ivZ~0q(R$Sj?OS?EcVJTh7Mkk@|7BWhai8?o)iCOD?kxoe~GEdWF0nm2=1`!F&84zR#(Ad;pxq?d4;~ExfewN}_y5fL} zg?oXN#Z9QGamfo~Ay)NVn)Rs<`Mmtbgu3 zz1e}w&Ngpjm%g`?11|Kr90qit`Z4M@O$2`5|Nr5Bpwlb!>J0Z2$#8$KH+#`=f4`IS zgu{J*TqFgO@^)o{lF7Ra(=nVc&>JQKa&zQfEo)K6nzGHHPz*k-QXY4@8xi2DUv zAkAOZZQf7TQ|d$c*$kw4Kt-;$*&Yot%Q6LY*|4Z>)f*llMmI1sGp+UM@FYaP;PW zCp^wL!OT&grR5FGzFklmQJ{KXZan9W_jx0Z0xfs3E8WvmYxJ5`^{w#aNL66~~JncS5)54GO1CjrDukdVh;_G%A|Z$ks8k0XMSUfeo!t3*6Yg z4fWg8?u?C68rw)+y4RMEtNXAch09l@T`FDueu1Xn`%o(Ujcx5L1=!{#5GUbE@;0|mAym2y z@4|LTd0HFNrLk=0``XKJl{@^ipQGq8)2rIgt}jKg6dad&BUiVFqz!~p21?shTf;Vc zr&FBBi5?BNeK5K=49SN2ebA8de{;PP3w-M9eojca$wU>|EK%RVIP`K~dUmos z5M+=MgDkd-AUAe9`+aOO9TXTrro=~9AGs3JTF^IyKXy3ujdZYN=&p3I6f%(#(MAnO z7j90c%(l@Kw#@Q3x2;j?J|nmD(2_Vd0ho94oKTtX%hO0im#6qRa5OxeO2tL~%8EP< zxv%^jSBf&bFi%fSAQ$i5m7*S!%C7XTU{{8e@bH`;SN&^M-SQ1S!RC%_1PTM;=@2Ss zd4W3ZXWPds)3t z;*Jgkpi0`YY>O13&{te&t zfdmlsuzZ~|LNEAReGhm?ZNE4R!4eULrQ6y#vptjESR`B3BkdoRKj&&ecgh!%^*E$N zB+BhQNkP)(v@bQJx8=RJ<-E6L#8b&Lrpi$VxnYkS?Yvo>=kQL*%pZ44209cGmGMMn zJoZw`M$&8@(4ojSO7hZ~m+997VBb!c78UJmJ8D9ZOrrKBQKuwPrzKGbYz{xu!zIyO z^6Un`01ISautSPNCq%N2?vkA?!`8i)A;1FSH_Dbv&^jxj2;mV5JvMpEgxylOnMlc{ zt?|7%(W&LoDPhpwlA*`Gu+7D0?v31}qHBcAFyZFph{&IguyiRY2g7v=`t@2AF2nm4r_Y?oVe5(<&HKy((_%#7km9XlIx4vJtG7?Lb+q5e4rW+G*2c zN;Nrsjn;(oaYRLWE5@b8h1~Wl8g^0d+RM=TC~hX7K9ry6q_7FLe^N}*0jnbt9QwKA zVt>*_uT08Yzv#@($9UlT&5qfod;^d@V8r9#h~rm!J5B7UW!&qixljCQ+@w^!6dr$u ztg?5gwesH`*M=m#KU*}6@(G4Fw#igp7DAh@o0pggJl+xQ0(EaEl=mtIXsoBz7X@CAp^8X^v z7qne-0^&Kg#lL5^K&m-na;Aa7MP=4En9;#sssS`;j=9j2zT)F#;On5v*FhK5 z?M6{IQ?=^BSdaY0otM=#V<43Pl*A1N^0#kW`xM76k_Mz!#eCzS;~Q9UU?q-kq>XPRWyLX=85rPZ25fXJX_G+N z?+hDHD;Kc}EXF6}8W^Mk&wID|TXdL()WUSEb?)sx13FW=oz|;w)zS;eTG1x3AvaU` zijsv9au{)HiG&D4i;g2eT&$vEV299a-Av_`OrYy5z`&406Eg=Q+OoxFjz#@b_}aKI z3&$*$ca>YQypEG;<@4%99VbV?pGx2rdRZ^{TqZmbCP0J&N#q$xM8U~UWvFVAj9 z8#G0bW3Zx_T|P#efn!9fF1LeMt$|l*0<$Fp*j&jb59iYG;9OjhA80=;Cgmisgk5!1 z#M(gRCW@k${fN21UgHF@9{5+hSE2f>f?jk<=)O)Xj&Ut^poRzDNYba?qMV7`;^ zUIfXMZlb+ZY!jA;S_|vsGN~FZQl6CSZTG_>yW>`*v-52deegVZY5U8nY{H)zam95l zCJR>>+zfcjb(*f+LWpY#uLy%L9GmvMF!hRb(7X5~`RGVx&!mhV`;T zZ+!3dU3zoKPYvW}F90&!c5j?=HUdGTV?-I&Ms9S(%wbVLyU`GcJNhxF2xpHfxlf;py-u%QsACA6EK=h2(5EQIEL+Zh%I(CKPzn`2c4zY+t8!CCbeJUBVe8Z z^{nnO#@+(F<(Pv~+WpNl!)9H#B%_t?_?=+zB>-U8aNFrx{=u-=vfr4Pw_kwRKYAlG zM*JTAyuR65U#2w2r=wrtyIv@7B-w$c!bqDUuW&Vb5jxk6qe+{>>I*i&a;u7Q>|IW;kC*^MNuS^!GGXpFmc@L-;yzA2WEJ9JfNbi097^nIM z#NsyP>*3gOo*Gib*1_Ds3NbeU4d$l#iMjE$uT&A__|=Jak(U{qIjJ=c9)9Awk?X%t%RtNiRkS)!e1qPTlA)}tj42AJqwkNUXklI zuv_I+XLo*NcR?N(1)c%r`u3IO`)ImU3)gT$wz&#Ph);e*=qr=dC|#C?X??{F5}8e% zs3j5Nb?`*TCX=3Jw%xLfQn>duz+^57=MP`;yEcVTCA(h1vaue6i>xQnD^ zx=Q%i>}uKoppJ>UCmIz5n|qi<)@ z&>nuamR40`($WUDsWJCd&KthU${D)RVpQ`c+AV7D`A1d}m8AL0B$GH`=NQ7Ceq( z-%SHa(?tdiOzow}G{O+w%u?B~)pYP{xx)O;f?93Av{4cMM5ns%xG5KTqNZqCb()QM zVFr^WVXfWz*-Ize;)}?=^Wl_GB$T3A@$bQ2kL-%TS5uDN!IIHtuKw0U4JQ6!?I zzFqlvfGVju^4mmw>b8-lb{xV0KnL=H6cW)-(=c6jXKa4;J@_cJ1h1+-zo7E9wK1bnvA5qw^O|RY$dx`ljETG?ring{f+2}Q0R-=2ZJ)Gx0%4*-= zKjIGLO4Bn5&*@*&;W?%ihqeBy?I!0XZTL~^-&qfO(V+;p>=QpMZfh^?j0OR1 zr2S)9P|tBqbguC)Hy90-gHXp2IX85vJU05uP9@`nrRas>VqQosc;U(uwAEhG;bs&{ zCJiM*wQy*k^)p`T5qEkBVu4c_Ib^BFl)G}RKVbrw=b>*iRjK8dN$B&a7KhnEUBie|_zIf$>V^`i*Ixf%RcP4*= zu6&t*rxJ+RRfdxtAum6l5jtU9hr{lW69P$jbTtP-mG@sA6Mh4ZZ6NnE3c4nKqP^V= zG>^}Q%|JZsv*D9;G)YG~SMgIUl{ebsz@b}4Lyn#c7-s#`5%TP|wr*VgH7&=M#P&bi z$(z&A*dHScbMEL3Rv)^PH$u$ntMRN-8LkX^KkVQIRLAf_H`2k7ObQt#n~DiZU?NR( zXY~6F1|#AG9naN*mXiRGL!ODrYH}|^u%3i|C00x3WR@4RL5{S@89AFLwfMgFGL)V6 z_r}uR8yo)wSe~!-@{;jP0|`& zGf~58+t2njY&4^HSpl)OsL(JOr=7~$`|EJkuf=U+ZA7m+<^oG%ZQR8JZd^^*-DX== zv^%ePQ3D!lq=t7IO0N%P> z>$d3Z?ty{$b~h#)?9M1NIl-?SwfknbqEdQ|_3Q0E{+$WVaLDd^-#u0?IOGS%nLH+q zU~+w2T#qlohA;6#zQh>$64Qil|0{FtQHsG{qZt#?`ry@+U=rurPn0!BxCrta1{jk$ z+Dn`>{{<6ExI0c1|qo>SQUp2=6K0{;^o4PCKRO*^puz$!?&VB zhiJGs&SWtBcx9coj?U1*xw?O_LDAwyeKN;yxz4UpXOt)=)-*22wy8^ryIqOD5)`0F zf1f(ukl}ZTAabyP5II@DZ%=52FEjrKfJp@YMN1*gmL(q3f{}{8d_jxtzSqlOvMKI7X449{e+L)5oy0o%$oMd z1*CrO)^((F_myqJ4=`z!rY5o!g5yl$!7OLT0ZN4Js`GYqZBqaULmD)zs$$LZi}_@{ zE^Qo?(flmc8PVTKlaTeggB`~>OZfFF?{Hyd;xyq)xaxIc=Vp|>zO3Jm@#PqiFJP)H zq~!YG;|SyjLwCtB;%?b6?~x6&F2{)L(o1w;R4Q|sZAs&k-(Go;pGr8GnS*P8cS&)nCQU&5TZ zpZhzQF`EWsR?F_};cyt~+F%o4@v{=Zf?M(DxXZmncpi^;IIzee3Upp1<=r?f0X42= zF~jyZ*EMN(_|1Z=5XEp@0dTx5EYU-@7HHZ^A}HFn=hvmQRq8>jp2^m;*?KO^Q_pe( zMQGp|XxYdKxkpu_5<;Qfgf8i@=8RJtnkC4wBO{xxoScgAxqOeiM&^ zqyLw9S;uIjukVEPv<3d3B99>U=ui1B$;(pCosN9vHA{Oqnxyi}C}6)&u9L64XK&d? z7saM9-m;CJPip)+?(rlAAO1^dfI+FQ=o;gKQP>pPx0Bc*h2*aVdaN*S92qfdk)1q& zd-Nd)Vh*@Ig-=_qcpXkva%F**w*y~-T0>iyc0klR+PVg~f;Bl|O%rV7f5REJ?dQn~ z*VT(#KdmxFd&0wzxK;$}@2wTxTRB%SmgsU#LfbgHSVI#~@(_tj16MmP5B% zt>e~8oo79FTy}y1wS!u5{V|@?Wl=FhVg;lTWQPs8MYSwl0n*>O4*P1d*Cy=;y#V}G zhyTPwS0AuN;N%WZSuCseH0I8zA0w*x8?Vt`TC$&s+C;bhh2^pd%7l?(l=4EdDFajtMP<(~XJXZ9NV6mPdU)B&}3t0ZNvYHL#sIxAk;on{c+9GSfl@wpN^< zT5tYXR#SRnBVmepNoD_@T6A&5_Z(BizdHqI4AMk1X+oI{p{zofWFVG|t2Nt#L(M@f zO*N9Mwh*!jZ5%1tFJo8GNs+pB1A1IPo<|NBpEa)7&~|p{ep#Db+fr+Esgqf`l2?+9 zCoaUmeq4o^Avu!8|M=|VIGVBx&@i;a4`FbR1RvBLx_u@kvPRt5G1cD$W{9n3-uJ!7 zrf!HGx-_Jcbhg8vO{!mO)t}=`OYxxVfdY42KZ215R{B+nh^DwlXvz7SYoz^}cnD}k z4B^Gj^C4*?>t>r{nsrePYi1H6EPkwJbzn-mO|vtv@bKqltl#a{?Q;^=k!#~8=WX0c7~@~vu+_>8(PWD$!RN&J^N_bMfdAXS+)ZO&J45{ zW*ECpfZd^ZY$P_(L$3<+^a0O{iR$@x9fx@{1Cw=)Ww z`U!CMoVP)z%jJ6+%-!DPk$X2Py5YHGn6aU;u+hTWavd{X`Q>Ck9-ohWg0OHZzHwQ8 zk@A?sEdD>Kr#sP;J9y|$LEiM97}7Mzd7}LUpMC*2osr|HPEB%|Aq+!Zr@;Fd+LqO{ z$_~oz)7|e4!^Fz^_~b@?8mDOJ)!uWQr)XoLbcko%KdM2a*v3DDuGvcIi5}Xd8x(SQ8%P~m!;?N6l_qgPglJeF30TUMAj61_IFlUk@vpOPj)j(% zNzafTt9Tu+o0%SVuHF9DU1)O(m_8Ds@h9Gs_mgZ=m8c*_6U{e_MZxXS3(SYMxiAqu z%juN&S5yF?aTb-7J`u=_g`r+YK}#3fg0jXuvE`e5LLF?D^~@7PDANO>4N`Qw1O7Gx z-l(K25 zJ}=zIh0J`YkGqwK3t5h>fW4o~LxpscBlKr8c#hEb^EDTCjs9s5-jm%sUHOitsokL8 zotdsYKvcFji3nX2LiM{O2jAmEo?nwAqYn}!G^*m-8n!~ym19=sA#zz6Tcz(?Sfchkv5cGD_webk?q`gNiJYD$*zU{r4 z3z);?#6r0BRaAv{uu50ApG{x?NQpX%-y#H&bjk0E!QOKn4jak}K=|SAMA3zT1~>P}J@kbX~)wn+E?xi`7fW41P?A znTxwljx6w_-iOwNcev{bmSRSSBtA8=aM!>sgB#Us^ky`_@;ZQ_k-#6XZddF1t!I(7 z%a@S*&$O)X$KvmZ@1uy2r`8MZ2kbh+P|a>L=vSVA$lc*KYgHh23#}s+n7E4!4r}e* zb$+8Ux1=S> zL7i}>$F8`EHUJgt&8?X3se>hRS633xvB?NeBKRy}C){^zx8`M8FCLq0w{W;dQ^XSry#f6iM-e%+ z5n-IkP{_`rd@_`RhVp<{`r6Lu9XK6yt`YV0JS~^#(C45qK!@$iN_XyzF6G@3_pnP(qotnkvST}Nua_+6brNQ`+;!j_IhOTyQKE}5 z8E1I-mY;#-_r*w_mVw_peUbe#A?ZDDFUdL^Vx4UZ9qpG!Xyg8b8PJI5y&w=TV6Vi# z`i*P^W+sIG7{Ym<{Z>-`?70yY)k$+d+c?9f|$s&P&&LsOpJf{ z)SmyOalJ%WplP(i_foVKJvWy-U(^{$7dBtnZt|$*T?WC$rs*DCkO{*)HTDA~DFOV$a2q?NlwUxL zoU7(?*>anybFc0!4#IQajaPuute9T21CBtb{I7KG97Jc!|3;X$gMa56_qOZes60J` z|KQ`OdOp{DUmsZ1`RW*vlFrM|V-$-A@L+cUtll|KK7jvY1L$=2y+Z-#ExEh)dxm1lSSmn(114wT{n zwXjnef!)&0&9OH<(@8fDZ>>`m76Z#aHzWJ^4;I1dSHOaY6OhQ&>X%``e=lB`gTHQP zkN!HH{mxU7cKrjCY=YG>04n4$FKdbwAMd;(zTXf7^T_Si|6p8?i?T*pY1&F=l9-v`jsZ}GdBql8;7ul z$r$o}?lKb0)Gr4bNpf?tQsD0|Tqz?+M2#Q`tmt(~%@a)fhrQEI$G=^Xtl=(yS4zA0 z2`B$pGI_C>MJ{%>dEu;2ut}38S-dOVlF%dT@lSEn&Pa8`5_;Ob4d4un zzXpBHx!D|#u6dV{Af2J>PSz(VkdbV{)Duux(lID>@td3ShTz;K=v&;b2(I1C2#RXA zo^@!B1u(0e1jEo4Y$T-TNbl@=N1`c9^11c{avUUeWrcJi_r>fw*$QH90=%)dZ=Prc zka^5t=k(lM;;!sB?IbN%J;?0%tw!IE?P>}w`ptB`O zN_9ElKu@V;eUjyc1KK+9jA`hK85$EcLbHUlgwP~RvQxFYgiCv>vZ7YCw79A*Yce(# z)q2f(!7^9X){?=UaE)y-d)Gei)}HjdaH7*}!8Kd(g5^EUQmmk2oq_kcVtrn)qG#Yl zZQz4F1Lw7uzC~4wu4>T>R`ygSYE@S)u3CH|#AMhEiKbB@&n=29J{}{fqiiQV5oNop Va4c!#T+y)mmsRXLw&D@r`+xpENx}dC literal 0 HcmV?d00001 diff --git a/packages/playground/android/app/src/main/assets/main.lynx.bundle b/packages/playground/android/app/src/main/assets/main.lynx.bundle new file mode 100644 index 0000000000000000000000000000000000000000..dc9b38fa00242e3272f55bb598afc167342648b0 GIT binary patch literal 130931 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 VnW2FdXZkwe#&cC8eP2p={{yTNad-d# literal 0 HcmV?d00001 diff --git a/packages/playground/android/app/src/main/assets/media-test.lynx.bundle b/packages/playground/android/app/src/main/assets/media-test.lynx.bundle new file mode 100644 index 0000000000000000000000000000000000000000..8862cfc82a8d6ffcb3ff6e62df39656d00f51402 GIT binary patch literal 134384 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�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

Ij^%L(aiS#Lw~#$?`f#f9W^sT*xy3BXxftq~no+ z2+BcT888Q|fhb~}gTsbj^j;S2eF84~#(?yMq)OXgK%aKvf7zlF6=iFW;9WI8 zUXF?61dPs?Z4sWt8*lDUY``wEKjj3d7zq-W#=82{atnnXSt2d6X0b%Zo%J9!%*54q zbA1+wj-@lD{}nMnTAyjrhr~C7(0sm;)8f_$$&4bIQCLh7>4{q#%J2;oqdtLgW1QiKQYFDH6X0+*eDKd=wAp=-e6{yrct zc0XtLfXu-|rilsiT6QBa?i?IYOg)uyK2mT9YCbV7!;Crx$qOmnC%{$`SeIW?M0@l@ zunrzF7S_0w1-rs|bCkNl`6?CX#mqWGd;B^AC1&L0Z0((1w5(hnX{2Zg+Uoz#u= zQMz%og3kZmBh>w+M%`%pwbt5~{hT}sW~tvbpV|Ot@r6u?j0!vlWI*0z zL}ifBKZnZY@Od{3LZm`&ZO-7}H!6p!=0c(6yTAlUw7nc(?v9>9_gm#1;elLqfD3gn$kU<3kuN zAm!#o(iAZ0AdUM1Gc<5JD}Wx2%`Rw5-!^d6z~FY5!R;OQ>vJ@_ z2r8g%<@1d_ns30C16HE>hADg_$V-lakzr>+j|{Nk=A;Y)Du38*oVU^eDS*lNKYj_A zr7WdxkW&{Sv!HHh`nu;x94~i;?&9EeyUED{T zw!=iK2DbyRng?FR0Su)CV8baHJUAD-2hN4p5ZdZ{$)vOd7O<;ONi4NxHX$oCv!7us zV6T1zSr7P^zg9u@F$;XWC!qV>Q_Xgvh)$B_04DHdp(5gGA|%MuSVNp;uH>GuFfULs zrcqs!%>daZWj#>@FJge^n`AjzQQoAF4%)s=IFYY_2At{Ov{%4TJ z5{RV+>D3T{NlZ0u7ecC8lwb|pK#tq55t|RhR-roj%=u(?$vSEox+Lv)P0D#B=?4c3 zYKj_aSrco(mPDg-O+Bdz^46MJU{jaTPf&-i`?Z1+pdal4RSXC*EKBIx-F_z08$-RP zL2nKik+%5I$$$(VHmJ;52!Wsyno)9G$dypc%#i}hRU^`~rg$!GJSfZw$0ZHUR*p*; zo%>I;8-WatKX4L2JNR^$?r9_;FEoZn@smCm*~WE-Z%oRNROuozZ1WSL@kzyC1>kZ% zo7D0E&yfjN(!pZh>PJCW6zXE0n!$Z2EG$w$7M}3V(55K%N`L{`?nkyv%=khy-h$Vb z)gEK&YiJM{A2(tY_s$dutv-@)7~2hrEi7wBjM|0`I*V4fK#y)1)&7^00&+f}9OIQ$ z|I7fM?X*ED<*M#{$1U?htT#h%!ozEA1pws6b=@q*pLdcq`JTvVVGE$WTfX%H@moG3 zg4~72kQ$c(ad5G&l)C4V0 zzj4-Mb{-5Su^n=b@p!cTHMtx3S2PBwV+5F?xZ++DrYRnSP!vz1^_Esxr&`*`;=1Bx zr~8QW8dSuVfVpjE_k6=qD#P)CxqTZyJ5w1#4qq6lC-De}wkOqk0C{H|FAh4OT4LK0 zUokJXE$UR8y^}zo)90fK$inY%VhF)gaMIsFb*P9WvWUn-^>mogJ65v6qSBNJl}WbL zVUgHWKFs_DF4Ox>z(V3>a(mZL3ZhvGQTaaa12+6mz`wrg+(iN}zT&3-+VsU@ldcNAdVaABrrcLtSOGs9oQ3xdPwJI zJ7cjNO_XC|Mzl!wkbqTb{= z#B4@nY}kNFn5wccWyBKVm}THq4F>%9U;qOKrIn$9Um;t#S;zA{i@3MAsgZ8-j6*c1!jdV|rNUE*PC;zo-=w>(&edwRQ?Dx##RrHUMY(ov>OIWJsyahq9Um0Gx73{_5yI=vWLR7f4g~@uCG*}H^`)=Yq zPa`ka{WE#JC6}rW20W*AUdVGqD|Sk)Sy@eTR$AjnsdaPNYK})HS=u=E5cM~M$b#i@ znUK}6UsyhPz$w-bKDOEWFf>>w#w3nTxO--=ufs0yXT=jG9(e#Pn%EBIfi%2@Mf)H0 zMs2N{fVE+k81cd=-;#)Z#yckGT!L2nALtzfz%`4cs@$3_Ar~&?@u!?<@WU4J!{qw< zl(09DPp?_B7B@P)h(rN9ek z9Hp-M^pKk&Q!r>yA{_M7Xdg48D)OSQQ=KBO>m;PIH+C<@d8vw@PhZ_fg#Zd zWRzIMCnT1LH11~a6X*<#h#S!GaLKA^2>^1)>D_paYXm|tU;n-cR?8B=ieQh}AoDeN z^9%9r3x03E63R~fhux+s?u2~J0>=jh@PbzjaXPDstSD07qn{z>7mJR?>q~MzQdac4p zfwge}Z}s7VI&V13tWuG5FQ|aVO8;Ot5EKDt28uM^QJ`iV#dZGLX1PeehHtd_54CN? zoAd4#?+gj@BL5P*w#8f6*f1d9ZiHxq-Rwn+efXeNy=7<(R7zD@x>RoE!%U%Z2D|Kr z`oZCH!2!cM!sJmDf{9DycsSpP;#$u_d{X^)cjWl{f`fNR z$?2L_X9gu}6)n4O(_sHfR9i*P_i4t{D4MCFSa^tX5CI(8XF`?TT5EF{>A84PH#ppw9jg#WXKaro0PqgbL3*NhmXndQ#q5AjQ&? z5d?YQ3a_YEGdmIBNr{;_mNka%RCSSEh;}tDm36cK24qy0Qt!Z^z!bW1Ds4BKD)z15 zPXjU1qX?qILrtg7zl4gDJs1q6Y?bD2YvE}$fP+DJafiX=3c6TW+jV1KXJg2b46JFm zCi@$dMUINjaSx#Yiu8@hk%kN-B!ZBGi7mtW=B+o!zvX+S=os?4sD28!J`I!yk1PKX znQQYRa*zdEmCz?Xgc$s~as`|o$&+J7g!I?D;PLxs!<%8pam`;iefn+4=s&kBiLW4x z#Ay@*g3SI)y6A$uq06a4QhF7#5^7Q*66K9thW*AR9*B3yuRr}fU?_LP=+VX-c_a1k zGPOm#GG5hyyf>=1HU6F_y#{p=h3%Y#GH#1Z+Rrf*1WLnzKxsreyCbUGP~8}XJp98^ z4~Z9mVqh5`HPC4vL~sRz%ecj^<4y($S1`Ejhhg0H%*Ws|4o~M>!#D<)@x$Ue?gqw5 zuyLDwg4(YOv!*hFso6F5#0=a_lqu?;z#dRCu#)O8aZ z=;wjoNx6y`KHjOwKa631QQVDD)O;129 zIELpWX15_uK6L@3nn=hEDIdF!uqF)2wc8FH1i-0(@WOuijXK-Fz#~h1_OQvDs}E6v zGenlaN}1)}$Ybud4J3W(0>+G6y6=V=(-jzF_T}atjvRU!V1o`x#1g()EFM>85`v;E zdwfWYOQmep%F$Rk7AxB^yz0%Ppb#4H;VYjhQ90I!wFE5MWZ z2uee1<^it28k<<-0vqv9a0bivUL-k7%E>ifWuBxwy60mcJv$C+P$}6awy;c}e#0$iWd zd6iC<`&KlBNKChLOYf(#!{Xq@O?0(Ko}7TZp>Kc4A?v9@p~sL48c{!;{14Tg#Ad|Q z-U*VUeKSY`z)t)7Ce7yG4XB{4e#{zVgdLjJJ_t<~B8zd6*fBv1!Rfk5@YWoQPN&~) zz@fB~c@{v4VP=6iPJRCHn&X%(!kLRaRiXlxmY*J3D(A7JB=y9RfGNf)mHjR<>G}xB z_dO)qIN==uXS7TNqb7XOD10&cV3N_SvNlu$hZ+X46xE1_wcms0UC_pSO1^@gDI>hu z<2~peekTzrxcOJ!cxO-?o1Z9twl*#K zoi1DSY~7HDkq4|4lCz+*es35lkLgP4m-t<%NFC?tlMg{1F+Ey)o`L;05Cf^E2qH{= z%xbw|ig+1jI4v?;K!aC$y{{cJ81t_w-JnLFDco*?0)15l&Cftd}%{H}e z@+(lr;rtuBT-=8={Hthsc4Lr5sczQtVu^pfUN~~ujB-bPp586g76sWbtceTavM`EQ zd1HDabscgDIoNH*!Jbi6tb@Dxd@z;+Mvs%980IeYojbsK``kAYi|D}zr11a(UV?>q z0&Let1p~k^K5K+0-XL31!0*>`ev`B=3k08N^(>d4dw&L?UdG+!^lo(KDOH@a0KZXr@1y#uL?_H+f!ZeHlb=#5Cv_^}Yc+j1!xad7T zq){RE6Xk1*{MfS@<-t+zn%L1!7={{$0>6*0_0C4ESV6I!yaB#!B|>RBx2~WooT9=9 zniuJlqLuN~0le7%1$Mg1yrc^mj+RQFuO$9Eg3|Hj@MQ1uL(RbApi{I@ETd23twnVR zxZAOUaTFIwh;noSu)GO5kRZf{oQWs!alTHPIUHJ?CO(&XxZ-uBZYFw|XkT*CP7VcB zCmd+}!Rg88(2ht|94(9{953EdMhmp7yh+Z`y5oJ`nOdiOMgRh!VJ|AkeKe2>3xj&? zSv6j3v(oHyU+;I}f;z}3%h6YdP_zj`%c$r!I{X84cm<=<7oe-w4-tfLIB7a2!PIXp zfT>nWd57Uupxa|nuz4OCbOSHw2L725M02E*89eJRBdj*4z6gspQJBf{LZiMlNz zVmEk&B)$br4vA@T%^496aJI_pEN@C;uolwllb>O%c!UFb&_t`9Dg z<90lC7CX%cL-0**`K@2Ej6u0;&^Q`K-PAgW8nc%n(Rvv^jGWxHm>3Al#oHf3od?juoudy9%0LdMSXxo`65Dt7pscH4Bh5U{J^%N6q}5@P7~C_Yh>E zx#fiZR$(X%mE<-9Kj;OBJmsvHS_xu3(cDsjLZAa3InKSl)UOu_bRCKx^0{fDqqIe3 ze+38B6FB~ykM_oN1AMk_b@x9mo87#{h-B>F@<25M~!^65Bs{RK*-Tz5<2H1g0N+uaVli zSw0j8eIwk=YU)^`$=`B#vvSI^oIE^QZsFh>O%f-epf^Cj#z7GtXhQ(~47!5k7?e+R zCBd#dr&5n?_CAP12jMlMrncLf{19qGz_lOVIFuBCVoJ{xLSc$8Upl;;M<}#tD72x$ z`jx52H+xs$^%4ENOH-w(CjZpK8_;i#PIo?5~NA@=+Po@%?}qpb|c=OJ0DrqEuj10%it;{xHJ% zw0st;@d6ZIaKaml`h}<8pb_djXyOOKT9gxhr}?(*-?A5CNB<@TzYg&>Bn%qb$CKY% zWfgvhjO2(v^s50!L@%f7LkiMMkyEU%03+NQgc1DX8xYS2&GJwKUezN7=;A(PcQ?t` zkaT=N<$jO)k^M)=o~3w;2U;Pj8@vD!3gm{uS_e=dCgO1@ZeBu6^uKW{kAR|bzDJip z)zAt*f~+;~4YoZd261~V^IvFWJ3dd1=d7_^RLegr@=@CkF_r7j$?F@iOWpb@x?HP+ za(`ese6|8tQQEM-IEFFG155avtu=@*Y=|rmRkIw^s%V3}#sEMk>8D4qpK>+!S%mQp zqLR#iqhfxzIN1XZ!b=)@9vNMbv@1byVbj!4FVKV`CpBKsKz$e={UpwnB8PwVldpzz z8&8q2axc#|;UvsXQBx@MT@4s%s^`wrCw^*y72MWJA$lZc3^ZBHeGt86ALW}D@WjM^ zFEO;Y!1Jhl!5JR?jxaon0}G>m6DXoUj$^~M5wTuCCw#~|ts4(UiFS$Cp^w|C6HFM? z@kSXkfSRq94MAwRw|Fn{-N^q&V*P02fygp?O!;Qs$a0d=_mzXA=Rw_JH>~5wE-xwUqTgm{o6%ziY!l=8tgvMRx2+vavbTYJzF^MW=AdhJ?spjMy}Kl@qz>EpD+! z!NMavksIN4__jFA*RW=P-JDL}jASP!9vm15(G7B;U+#j8XgSFr?+kB4#Kg=i1H^}U z@mZw5p@Z31-~iYnI^k=vfe!N#?si`9W=KDA4G`Z_&Z8$fjKZnW^ktZnM=i?n6XOmp zBx8w8%E@qZPAkmGI>iL63+dyPZwQu>{whlpc_8%kHCl@Kg6A_O`!7LhIlR+IksuK69cniJ? zbq3<<3HexjDL!6K=)phvXR8I(h&2S<8O;I^c<^4MY!XRdyU&~I=lvU|UqdR*6bOMh zyE@-b{HxU#R)piw4g%oA1gl2JphSk05-<(Q{bh2w_C~oi1Vz}AP*}j}?}EcZXyJfF zi-tr}m0Chbv`m6T%Q!yRDQEylObG`d_Zu}N_SrA$b)q7&C;Jb4+^~WC;6HM*YPcJi z1th~Ks07I{LjMF=3bl^wZ{yY)u~Q{BeJSTO%T;Pk4=>g$N1o$)K3Be62)RO&JgPwSiX`M zM2xO`=zBH#0r=v$_@s+;LLM}6_|eF2cw)}?PW$+ecQ(Cu2Z;O}jq(lxj!49!k>l{h z7HWdD!1tU$WpFjkoFb35KtM3?P(Z{4kmO4r18QtyXpf-W-WLZ9T&Z3tmbRbyH7c-z zh?)zkX5cX+6&cf%brwb}OKFdF47|YqamqVC^-J-{fT@;iF$)4q0v*D8NO*dr00g+2 zN^a53knnEyl6&+Q*T(B}_v*?+?8LM7$O2T6%3lg0Yr<-F%2Dl>uK`(gG{_1_h4A8_ z4A39bxO;Sw1vBX{&>BsR_>1k~*}la1W@Z_HzS{*)EPW8*!43WeaTM5(0=yxP5`f4e z6u^ohm}euXucF{1OYrw#3CzVWv`1bxA=mk3b7SV|lN%c_1|pCr)9*yxPsT%E3w-!D zxf2J2PP8hRRDNQ%N-r?!&G$8resRQz^O|~s*2WfIQwN)p!}1`nN2-4z`;vhTrH|F) z!ojP+H=@UiJ&WUHtoo>)>`CJWL6B>w&LxkM5+XX62tNoAa)8k|IEDZYuda6L%Dw@- zfP^ELajbcWgQe>Z#>u6HrUvjTgA@g!p5N3Dv_SQ}(LzjTiz#bCQws?4x{n3Q6Se?z zbZk;lTNky%qS6s$vze{P@{3S@99QTi1(usQQ+P#5MwbZV6O2CrnI*nOUx#f`)`^I+ z7EkU(%cMGzx(;0aOCp}~p8yds!a&hsbOx=0@j*RBmJ^ahJI_ZuEY7%6Gba&JpmF*g z1{cKWcdR9B|0Fou7T7@b1Akw+Ck`)HZ=gBG-s+<{?ZvJbia|kMZe&4o?S2+fDPS{{ zvr))3j$B-8_*76rS)Y%D-xa~#IZ!=ykBPMhG&j3JbS#?9yG7&*4-)#0`|#322fWLEimo+(3GK0oVSRSu6{O+`fHyeu*);u;o(evXw%EZzeQugp zEAm04^h>Bgf5OMakY#U5w&2n;kZHicP8?=j{E;TVNk6duUC5MvFPvn5Ki0Y&yOT&c zBAcW@{|BT_=!{n|qjfUihG~C!gHB>G=2^hKA4u~8H|*U(ihSU(1CWH9Qe6S_h=6%0 zv+L-P*gCPx&7Fem`nxQB-t`rMUToXM0LhX7p(4YVeR~avivWW@4~COfw3QD_BrMU4 z))_vEo{nhmr{Ucx-hoJt0r6LJ%u>;x1%qa&KT8H&{#}3)_}Y@8E(&ou#0b2gCZ)Wj z{>1_6#F!j#DCUR8vN9H$^oJ`|>>4j{#;Q8CKhNR31zjAI-F3aO4yFV=oCx4)!cb>^ zw)ss1!9##j6n3MFq7$HNKszwvBf2KR3;mIxrU?CEh6~Z2JT9~=dnziC&rW+CdqlX` z?0S&)6H6`ji~bQ{akmWn?~%#f+&%nG!=%jo24NMz`b_{VzD*fkAd%tq@%8aTlhWgQ z73vSLG5J?PvRnW?J2ZoEta#HxgBe!|xDWtbSH}oS;B){%i3fgW+dC=|i=849D1FAfSRZBwM25hXQ=#A*3<51LC z6=of$7_>^qFn9EL2AckCsCyl~veO!s`Hf9hCSQ+qAani9CUBgNxa8#OWk_!34Aw>` z01r$O`Vl(|v^aPa0l2RO+W{32VhVoHehpI-VVirkFecer0`yG)kB;<%oNeAYCRB}Z zXv#-1P}`=ag2Q`p>rAvzk6CB2J4|d;c@9FNB2pd&;R~MF15r3dPaYN}Ut(>t^T{3( zfPk$R(XyAJTI)rO!G9AA#*+YZu!P^}Z<~rm<1~#n_oLN@odZ=hJrDUFRAilvDiOVS z8v*_mETpQcY*x8@0K4{r%}4OguidZR2+f>;bZY#P?7TwzmRVVRZ&g^>^N_ QG#czN6eN#*Hq1T$AHjYlLjV8( literal 0 HcmV?d00001 diff --git a/packages/sparkling-web-shell/package.json b/packages/sparkling-web-shell/package.json index 4d5391db..8bdf564d 100644 --- a/packages/sparkling-web-shell/package.json +++ b/packages/sparkling-web-shell/package.json @@ -17,7 +17,11 @@ }, "dependencies": { "@lynx-js/web-core": "0.19.8", - "@lynx-js/web-elements": "0.11.3" + "@lynx-js/web-elements": "0.11.3", + "sparkling-method": "workspace:*", + "sparkling-navigation": "workspace:*", + "sparkling-storage": "workspace:*", + "sparkling-media": "workspace:*" }, "devDependencies": { "@rsbuild/core": "1.7.2", diff --git a/packages/sparkling-web-shell/src/env.d.ts b/packages/sparkling-web-shell/src/env.d.ts index b3bdc6f4..d20f8a67 100644 --- a/packages/sparkling-web-shell/src/env.d.ts +++ b/packages/sparkling-web-shell/src/env.d.ts @@ -1,6 +1,15 @@ declare global { + interface LynxViewElement extends HTMLElement { + /** Main-thread callback for NativeModules RPC calls from the Worker */ + onNativeModulesCall?: ( + name: string, + data: unknown, + moduleName: string, + ) => Promise | unknown; + } + interface HTMLElementTagNameMap { - 'lynx-view': HTMLElement; + 'lynx-view': LynxViewElement; } } diff --git a/packages/sparkling-web-shell/src/index.ts b/packages/sparkling-web-shell/src/index.ts index 9472c38a..494e3888 100644 --- a/packages/sparkling-web-shell/src/index.ts +++ b/packages/sparkling-web-shell/src/index.ts @@ -4,6 +4,15 @@ import '@lynx-js/web-core/index.css'; import '@lynx-js/web-elements/all'; import '@lynx-js/web-elements/index.css'; +// Import web method handlers (self-registering). +// These register handlers in the main-thread registry where browser APIs +// (localStorage, window.history, document.createElement) are available. +import 'sparkling-navigation/web'; +import 'sparkling-storage/web'; +import 'sparkling-media/web'; + +import { getWebMethodHandler } from 'sparkling-method/web-registry'; + /** * Determine which bundle to load from the ?page= query parameter. * Default: "main" -> /main.lynx.bundle @@ -14,6 +23,54 @@ function getBundleUrl(): string { return `/${page}.lynx.bundle`; } +/** + * Handle NativeModules RPC calls from the Worker thread. + * When the Lynx bundle calls NativeModules.spkPipe.call(method, data, callback), + * web-core bridges the call to this main-thread handler via onNativeModulesCall. + */ +function handleNativeModulesCall( + name: string, + data: unknown, + moduleName: string, +): Promise | unknown { + if (moduleName !== 'spkPipe') { + return undefined; + } + + const handler = getWebMethodHandler(name); + if (!handler) { + return { code: -3, msg: `Web handler not found for "${name}"` }; + } + + return new Promise((resolve) => { + handler( + data as { containerID: string; protocolVersion: string; data: unknown }, + (response) => resolve(response), + ); + }); +} + +/** + * Create a blob URL for a minimal ESM module that acts as the spkPipe + * NativeModule stub in the Worker. web-core dynamically imports this URL. + * The module exports a default object with a `call` method that the Worker's + * NativeModules will use. The actual call is bridged to the main thread + * via web-core's RPC mechanism and handled by onNativeModulesCall. + */ +const spkPipeModuleCode = ` +// Factory called by web-core's createNativeModules. +// Args: (nativeModules, callBridge) where callBridge sends RPC to main thread. +export default function(nativeModules, callBridge) { + return { + call(name, data, callback) { + callBridge(name, data).then(callback); + } + }; +}; +`; +const spkPipeBlob = new Blob([spkPipeModuleCode], { type: 'application/javascript' }); +const spkPipeModuleUrl = URL.createObjectURL(spkPipeBlob); + /** * Render the Lynx view into the page. */ @@ -32,11 +89,26 @@ function render(): void { lynxView.style.width = '100vw'; lynxView.style.height = '100vh'; + // Register main-thread handler for spkPipe NativeModules calls. + // Must be set BEFORE adding to DOM (connectedCallback initializes the Worker). + lynxView.onNativeModulesCall = handleNativeModulesCall; + + // Register spkPipe in the native modules map so the Worker knows it exists. + const modulesMap = lynxView.nativeModulesMap as Record; + if (modulesMap) { + modulesMap['spkPipe'] = spkPipeModuleUrl; + } + container.appendChild(lynxView); } // Initial render render(); +// Listen for sparkling:navigate events dispatched by router.open web handler +window.addEventListener('sparkling:navigate', ((event: CustomEvent) => { + render(); +}) as EventListener); + // Re-render when browser navigation changes the URL window.addEventListener('popstate', render); diff --git a/packages/website/rspress.config.ts b/packages/website/rspress.config.ts index 99bc033d..2b0a7e18 100644 --- a/packages/website/rspress.config.ts +++ b/packages/website/rspress.config.ts @@ -75,6 +75,11 @@ const sidebarEn = { { text: 'Scheme', link: '/guide/scheme' }, { text: 'Navigation', link: '/guide/multi-page-navigation' }, { dividerType: 'solid' }, + { sectionHeaderText: 'Web Platform' }, + { text: 'Web Platform Guide', link: '/guide/web-platform' }, + { text: 'Web Methods', link: '/guide/web-method-implementations' }, + { text: 'Limitations', link: '/guide/web-limitations' }, + { dividerType: 'solid' }, { sectionHeaderText: 'Native Module' }, { text: 'Custom Methods', link: '/guide/get-started/create-custom-method' }, ], @@ -153,6 +158,11 @@ const sidebarZhBase = { { text: 'Scheme', link: '/guide/scheme' }, { text: '导航', link: '/guide/multi-page-navigation' }, { dividerType: 'solid' }, + { sectionHeaderText: 'Web 平台' }, + { text: 'Web 平台指南', link: '/guide/web-platform' }, + { text: 'Web Methods', link: '/guide/web-method-implementations' }, + { text: '限制', link: '/guide/web-limitations' }, + { dividerType: 'solid' }, { sectionHeaderText: '原生模块' }, { text: '自定义 Method', link: '/guide/get-started/create-custom-method' }, ], diff --git a/template/sparkling-app-template/package.json b/template/sparkling-app-template/package.json index 4079c5b3..5a1bebbd 100644 --- a/template/sparkling-app-template/package.json +++ b/template/sparkling-app-template/package.json @@ -12,6 +12,9 @@ "scripts": { "dev": "sparkling-app-cli dev", "build": "sparkling-app-cli build --copy", + "build:web": "sparkling-app-cli build --platform web", + "dev:web": "sparkling-app-cli dev --platform web", + "run:web": "sparkling-app-cli run:web", "autolink": "sparkling-app-cli autolink", "test": "vitest run --passWithNoTests", "run:android": "sparkling-app-cli run:android", @@ -27,7 +30,10 @@ "@lynx-js/react-rsbuild-plugin": "^0.12.7", "@lynx-js/rspeedy": "^0.13.3", "@lynx-js/types": "^3.7.0", + "@lynx-js/web-core": "^0.7.0", + "@lynx-js/web-elements": "^0.7.0", "sparkling-types": "~2.1.0-rc.12", + "sparkling-web-shell": "workspace:*", "@testing-library/jest-dom": "^6.9.1", "@types/react": "^18.3.20", "@vitest/coverage-v8": "^4.0.18", From 7c0ee9a80c63de179d8e8770709de863a0f59d59 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 03:17:22 +0000 Subject: [PATCH 05/18] chore: drop stale playground bundle artifacts re-introduced by rebase The playground no longer tracks built .lynx.bundle files on main; the cherry-picked web-support commits carried old prebuilt bundles from the original PR base. Remove them again. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01ARyWgB3243gQx1exWK61Qb --- .../app/src/main/assets/card-view.lynx.bundle | Bin 93878 -> 0 bytes .../app/src/main/assets/main.lynx.bundle | Bin 130931 -> 0 bytes .../app/src/main/assets/media-test.lynx.bundle | Bin 134384 -> 0 bytes .../app/src/main/assets/second.lynx.bundle | Bin 100869 -> 0 bytes .../ios/LynxResources/card-view.lynx.bundle | Bin 93878 -> 0 bytes .../ios/LynxResources/main.lynx.bundle | Bin 130931 -> 0 bytes .../ios/LynxResources/media-test.lynx.bundle | Bin 134384 -> 0 bytes .../ios/LynxResources/second.lynx.bundle | Bin 100869 -> 0 bytes 8 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/playground/android/app/src/main/assets/card-view.lynx.bundle delete mode 100644 packages/playground/android/app/src/main/assets/main.lynx.bundle delete mode 100644 packages/playground/android/app/src/main/assets/media-test.lynx.bundle delete mode 100644 packages/playground/android/app/src/main/assets/second.lynx.bundle delete mode 100644 packages/playground/ios/LynxResources/card-view.lynx.bundle delete mode 100644 packages/playground/ios/LynxResources/main.lynx.bundle delete mode 100644 packages/playground/ios/LynxResources/media-test.lynx.bundle delete mode 100644 packages/playground/ios/LynxResources/second.lynx.bundle diff --git a/packages/playground/android/app/src/main/assets/card-view.lynx.bundle b/packages/playground/android/app/src/main/assets/card-view.lynx.bundle deleted file mode 100644 index 4e021ce9843fc20375783a23780a202f437e6fbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93878 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%0ApRPQepQVmr8w!gL*#RjD)tp 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 Va4c!#T+y)mmsRXLw&D@r`+xpENx}dC diff --git a/packages/playground/android/app/src/main/assets/main.lynx.bundle b/packages/playground/android/app/src/main/assets/main.lynx.bundle deleted file mode 100644 index dc9b38fa00242e3272f55bb598afc167342648b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130931 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 VnW2FdXZkwe#&cC8eP2p={{yTNad-d# diff --git a/packages/playground/android/app/src/main/assets/media-test.lynx.bundle b/packages/playground/android/app/src/main/assets/media-test.lynx.bundle deleted file mode 100644 index 8862cfc82a8d6ffcb3ff6e62df39656d00f51402..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134384 zcmd?S&37Y5mM>P#Mr$-`J&m5MCu=ma9*8cpfmcZs$@)+UP>QZ%u~d|*ifoc4shf{R zfk2Q<5y*rx6J${&c0OQ2|_T06~-(SD>H`lIRTdJ?rm+DJ=9EK-hbQb;^kGJY8_UHe? z+vcNZ8x{Qi>Q}$QpSfS*;n#dB@##1G^9KL?4gUPio26@WDEc>lTe`*?e)Se}e#<}q zil4m0r@!OVyZrO7`T8FJ{Ac|0KGXgUpFZH9|D3NM^3UJ%^&|fI2mbk(fBp;p`GkM| zE&r5RZXSQGp<(p@+S}f>c9NL1ar5TQdYlZ5>7L*0n{LovOihyB?3#n&(P9uDM)mKL zD7;p}mz{Rpz4jKLq@w@z{cG2L!#{ub|6IHF2LIgsf3IEpE&u#aznw#)Y|Z}rA5qNx z^YFmD-w*`9T|$R`%lBXN_5NV+8~il!->(Vv-yPmL{PeJmC;j&!etyj!9QMphn|AHm z9j3m4Kb@#I?1x$Uzhye>TV7f^JhG<>kBhgC_8k z)mLT-8DlY(+0(}OuaIuXxR?fM&+y9+@So24a(lVGl26J_W=P$i7Ft|lDktL8B|hpu z4p0&?c9$l<(|SQ5x?Xfm(#bl(hu_`1cQ30U@4>A?y^F|~#+K{1v!c=i>1=Ukm_4lv zM8bnKTs(?{F7xl=KN;#-+#cXL|3|Xn7R;PoFvYK3o?A@B9o8I2X9UtK=9}3lg}?gm zKjKG*b+0g1W=$IaKSndZ!H?i1-;3YnkSoqeHg|Umb63Wvzy4eNSzfY8hG+ff;YZiE z2~!ihWci)eD=t?Keh>%!c6?6Qk4mcmzojauK`Y*?$;Zuxg+$=o(wr0Kt@OCTT6ty{NT$!qz5iVLHR{K6V2 zj+I|d10h$8&e&ggsS`Ndbr+Y}jSSIN@RI+V)kFF4xZOJ(`<9jD|E7J*`N6mrxg1PP zGV>|^n??(ME`=kmk<#Et|7Cbnq+iUM)-TR<8XX<=%%Wf}NlZS`(=oR=(X;9$khNa+ zPw+`PTKqOgo#JjZbuE-piEujjzPwzl1Q}BYMs%_Ri^5-!aLPhcfJKLg;}uV=q8yIJ zJ$P1!S@B_jc{pfyk4(lg@!@yI9NslKBQb3SckYGE^=H@(TJjMtC&KmdFYoA$|KyVtXI=+CU) zI0i5_$*`9uEH<6xW;N3)A^yqKEFK5CW#`aqx7++o{^dg{F2geNgqp38>B(ozbLmR> zqz3nAS}(Yf>JSzwrOo8WejX}MWgW_B>Sto|J9+PtAy}Iv87BaTONZ^leDJTaPEq01 z+2H!Ma4>Nk#S`rqwDjtB4)1jCc5XuRzv1YYaz`!)<8v;IG2%mlS8NZW%`9c6A~?KW$|(I$>{$gy~+9Fd=U${t*hchQoHy8?U2# zYvpj|ke_D%eqzX7lcJW4MDpQx)0vAR_5G#jBbV(UHm89(Tl{Ci^4H23%OED3%7pNhW6xA%zao>e4)Ra0(;Lzs*AEKy?8qx@2pFJqZG@yS!K>;VYF^=d;<5V)qwsjnIy9N4$WKnQBZG_WQa1}eSKqNmhu7Fcl z6ye5RlYA7_X$4C056E&_wn8#e3oG(nY8AP-1e%oa#+G6b9-BBw`OVnB->}^q_;0FC z^q}22p;#Pt>vy}i5AJ+w4xk+U-~P{Q*Q$rZP*ir++C^oUm~xWFK_{&=Pup?X_>Wv} zB{u0W4$J9rkTff`YOU!$ET`49c46wR)&c78nO5sK>S15;Pa_DLOHxtjoBB~NI(T>< zw);V6E$R=V5Q5Qqn8xRqmz7p)4SRp9rOo#Iw4SC-+hVWYHHSfHs+H-ZsCcd?Rpa%% z*bBVKYkMtk=p|m)>v#k2&^z`{y}ozkoqGq~j(6g{^tQZpZ_PXNHoa|c!`t}Yqkwi=2k;pATXED6 z64QL@KfSy>svnxPbL>6$pYtU)KMbL&z8?aks4jgJxBJGs?q6qSryX`oZz8W+t@&SE z^h{cIW8?_C-ax?X#`hYd^Dpk)0i04VtX*)50c*_Y!UF$d3OisyQ}ZAQyFrMtS2qv7 zheo%q$*ToGqXMsoDrAm*-|sCfRC|6{lm5iM{SH9eJPQGefr-=ehfr0X z=VLTcL7_?zmgCj=6g@D>)2KV_nMPbc1ERMNdgk&nu0v^c7#s~_zSnAKEcP!jcT6lkfM_7kRnWNlz%6XnL04f?Dh8jl-0RGjzP}697J)t z15CNR%({W=i&Qyu7p>8^lo>rRM`vKW--lm;oJnJptF{ zC4UV7H)>8FP3mDGIrvpP%x`aK02&NGu7=fnw?3_*Kk|I%R`z)B)8*{>PWH62EQLoN zzIp||1X##%`cOwy9C$VXW?_M}!F6lZG%hRv8fNroj0DJd97TzFN{f#_4rzfhXu!<% z-wY0`Fe(IffF|ey)3@4KdPz-2xR)hkNp1rLllnlix3OG<*mSG4{L8Ee*D^Ej$8r0- zS`kCkF6J?*Oe;;4{f5(0tt8Pf?id!Wczcz0?_k)kc$E$)LENtFPy3jP+ko_<-K!e^ z3s)9+Wa@csQ~KB$CTY~?H}mrb7{w;ou=o3oP#{s(fi}u{UO7n0ZfxbVV-rGi=sL_i z*ZS{kwf$O6R~x}QFYpZ#j56r10eMNaYuF-enKDU+l<7rBw)wnRr7*dbT9X9t+`q_y z+A#I}#mjqy^!&x^w_mPdvr8M{u-BXStK5EET5UCKEPMGlU6~%rdczdHA611<5m*F4u-xFIy;?C89{n zgUN2N%^l*~pqn1M8i#CuET^_QY%JxaADiIlIIA`(7T2uWYJ&11nt#wv%-!1$+iBa? z-bL~89CQWSs2%X;fC%UccUbpWPHnZruGqA(eh&(TC8M@FD3l%V^+~T?V*9KIjBlpp*H(}5Wsp1t)eUw`4?CLsXxQt1ZOmXZ4vqpW)<;o{eV!;fBP)Z~ABI>p>ACCOQ2_`xtG0U7 zfHij1jL8;pAJH8`2~UwWR>16F#b2aK@%rt-RxmKzCIRb}7?8YLZG^3aODy(#*dOjL ze^%2a7x-cIv%9xyp#GmO|CLeyE?gOUQM>yHn$v0I|1U`5cfcBlN7c$O?oB1`j$FEO z;N49~RIU7?B(ewrOCx*!1v&)`!{0i3*~eC8NjjE5-Ue-G#WzUw3DFt(c zOWuTBU`h0&a7!u_B=wcJl3*0`YL}OxM`cPhOgCu%z%GMkCQ@c0@z?;do&Te;_*ES5 zKL-cH{eU$0`Sz0u6#mQcCk`pW^|0O7LSQPqA+VX(DxBfaFN^I3SXpEb{R=w?pp<=b zNbh=#9QWw5vi=qE-DTnBH)@Ut?ISzVcm zON0)DI*;hEY(_s@r;$1-9vqg4>sI6FIepbS?P!kS^}&#U)gKc}{T|Xp0M1kaV`%Bc zs=XnP9F)<^xJC�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

Ij^%L(aiS#Lw~#$?`f#f9W^sT*xy3BXxftq~no+ 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 QG#czN6eN#*Hq1T$AHjYlLjV8( diff --git a/packages/playground/ios/LynxResources/card-view.lynx.bundle b/packages/playground/ios/LynxResources/card-view.lynx.bundle deleted file mode 100644 index 4e021ce9843fc20375783a23780a202f437e6fbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93878 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%0ApRPQepQVmr8w!gL*#RjD)tp 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 Va4c!#T+y)mmsRXLw&D@r`+xpENx}dC diff --git a/packages/playground/ios/LynxResources/main.lynx.bundle b/packages/playground/ios/LynxResources/main.lynx.bundle deleted file mode 100644 index dc9b38fa00242e3272f55bb598afc167342648b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130931 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 VnW2FdXZkwe#&cC8eP2p={{yTNad-d# diff --git a/packages/playground/ios/LynxResources/media-test.lynx.bundle b/packages/playground/ios/LynxResources/media-test.lynx.bundle deleted file mode 100644 index 8862cfc82a8d6ffcb3ff6e62df39656d00f51402..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134384 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�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

Ij^%L(aiS#Lw~#$?`f#f9W^sT*xy3BXxftq~no+ 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 QG#czN6eN#*Hq1T$AHjYlLjV8( From f5c8e75b8127509ba340bc55b01305b74a2c3092 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 03:18:50 +0000 Subject: [PATCH 06/18] chore: regenerate pnpm-lock.yaml after rebasing web support onto main Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01ARyWgB3243gQx1exWK61Qb --- pnpm-lock.yaml | 1585 +++++++++--------------------------------------- 1 file changed, 301 insertions(+), 1284 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a974c7f2..962d9188 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,34 +8,9 @@ importers: .: devDependencies: - typescript: - specifier: ^5.8.3 - version: 5.9.3 - - examples/hello-world: - dependencies: - '@lynx-js/react': - specifier: ^0.116.2 - version: 0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28) - devDependencies: - '@lynx-js/qrcode-rsbuild-plugin': - specifier: ^0.4.4 - version: 0.4.6 - '@lynx-js/react-rsbuild-plugin': - specifier: ^0.12.7 - version: 0.12.10(@lynx-js/lynx-core@0.1.3)(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28))(tslib@2.8.1)(webpack@5.105.0) - '@lynx-js/rspeedy': - specifier: ^0.13.3 - version: 0.13.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(typescript@5.9.3)(webpack@5.105.0) - '@lynx-js/types': - specifier: ^3.7.0 - version: 3.7.0 - '@rsbuild/core': - specifier: 1.7.2 - version: 1.7.2 - '@types/react': - specifier: ^18.3.20 - version: 18.3.28 + playwright: + specifier: ^1.58.2 + version: 1.59.1 typescript: specifier: ^5.8.3 version: 5.9.3 @@ -172,7 +147,7 @@ importers: version: 18.3.28 '@vitest/coverage-v8': specifier: ^3.1.2 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) jsdom: specifier: ^26.1.0 version: 26.1.0 @@ -190,7 +165,7 @@ importers: version: 5.9.3 vitest: specifier: ^3.1.2 - version: 3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) + version: 3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) packages/sparkling-app-cli: dependencies: @@ -306,42 +281,36 @@ importers: specifier: ^5.8.3 version: 5.9.3 - packages/website: + packages/sparkling-web-shell: dependencies: - '@douyinfe/semi-icons': - specifier: ^2.74.0 - version: 2.101.0(react@19.2.5) - '@douyinfe/semi-ui': - specifier: ^2.75.0 - version: 2.101.0(@floating-ui/dom@1.8.0)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@lynx-js/go-web': - specifier: ^0.5.1 - version: 0.5.1(@douyinfe/semi-icons@2.101.0(react@19.2.5))(@douyinfe/semi-ui@2.101.0(@floating-ui/dom@1.8.0)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@lynx-js/web-core@0.20.4(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1))(@rspress/core@2.0.9(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.47.0)(micromark-util-types@2.0.2)(micromark@4.0.2))(@shikijs/transformers@3.23.0)(qrcode.react@4.2.0(react@19.2.5))(react-copy-to-clipboard@5.1.1(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(swr@2.4.2(react@19.2.5))(vscode-icons-js@11.6.1) - '@lynx-js/lynx-core': - specifier: 0.1.3 - version: 0.1.3 '@lynx-js/web-core': - specifier: ^0.20.3 - version: 0.20.4(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1) + specifier: 0.19.8 + version: 0.19.8(@lynx-js/lynx-core@0.1.3)(@lynx-js/web-elements@0.11.3(tslib@2.8.1)) '@lynx-js/web-elements': - specifier: ^0.12.0 - version: 0.12.0(tslib@2.8.1) - qrcode.react: - specifier: ^4.2.0 - version: 4.2.0(react@19.2.5) - react-copy-to-clipboard: - specifier: ^5.1.0 - version: 5.1.1(react@19.2.5) - swr: - specifier: ^2.2.5 - version: 2.4.2(react@19.2.5) - vscode-icons-js: - specifier: ^11.6.1 - version: 11.6.1 + specifier: 0.11.3 + version: 0.11.3(tslib@2.8.1) + sparkling-media: + specifier: workspace:* + version: link:../methods/sparkling-media + sparkling-method: + specifier: workspace:* + version: link:../sparkling-method + sparkling-navigation: + specifier: workspace:* + version: link:../methods/sparkling-navigation + sparkling-storage: + specifier: workspace:* + version: link:../methods/sparkling-storage + devDependencies: + '@rsbuild/core': + specifier: 1.7.2 + version: 1.7.2 + typescript: + specifier: ^5.8.3 + version: 5.9.3 + + packages/website: devDependencies: - '@rsbuild/plugin-sass': - specifier: ^1.5.1 - version: 1.5.3(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0)) '@rspack/core': specifier: 2.0.0-alpha.1 version: 2.0.0-alpha.1(@swc/helpers@0.5.21) @@ -351,12 +320,6 @@ importers: '@rspress/plugin-llms': specifier: ^2.0.3 version: 2.0.9(@rspress/core@2.0.9(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.47.0)(micromark-util-types@2.0.2)(micromark@4.0.2)) - '@shikijs/transformers': - specifier: ^3.4.2 - version: 3.23.0 - '@types/react-copy-to-clipboard': - specifier: ^5.0.7 - version: 5.0.7 playwright: specifier: ^1.58.2 version: 1.59.1 @@ -394,6 +357,12 @@ importers: '@lynx-js/types': specifier: ^3.7.0 version: 3.7.0 + '@lynx-js/web-core': + specifier: ^0.7.0 + version: 0.7.1(@lynx-js/web-elements@0.7.7(tslib@2.8.1)) + '@lynx-js/web-elements': + specifier: ^0.7.0 + version: 0.7.7(tslib@2.8.1) '@testing-library/jest-dom': specifier: ^6.9.1 version: 6.9.1 @@ -415,12 +384,15 @@ importers: sparkling-types: specifier: ~2.1.0-rc.12 version: 2.1.0-rc.20(@lynx-js/types@3.7.0) + sparkling-web-shell: + specifier: workspace:* + version: link:../../packages/sparkling-web-shell typescript: specifier: ^5.9.3 version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(jsdom@28.1.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(jsdom@28.1.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) packages: @@ -605,10 +577,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.29.7': - resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} - engines: {node: '>=6.9.0'} - '@babel/template@7.28.6': resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} @@ -712,62 +680,6 @@ packages: resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} engines: {node: '>=20.19.0'} - '@dnd-kit/accessibility@3.1.1': - resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==} - peerDependencies: - react: '>=16.8.0' - - '@dnd-kit/core@6.3.1': - resolution: {integrity: sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@dnd-kit/sortable@7.0.2': - resolution: {integrity: sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==} - peerDependencies: - '@dnd-kit/core': ^6.0.7 - react: '>=16.8.0' - - '@dnd-kit/utilities@3.2.2': - resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==} - peerDependencies: - react: '>=16.8.0' - - '@douyinfe/semi-animation-react@2.101.0': - resolution: {integrity: sha512-TTUvFBYpeABxt2ZYFXmz908c23ZwDXuQJGZlBXxTb2yLFfFtSpXyctKzG94cxGcT0ZCliOlE3xQ2FhVT0mej0g==} - - '@douyinfe/semi-animation-styled@2.101.0': - resolution: {integrity: sha512-FM3xOP+t2kqcHT7x7XSTkYf6sIgsd3KXfE5K2uIUxaRm42aBgRS1xP/5PT35U3IBOlP8pi9st7GZiYESHfHfYw==} - - '@douyinfe/semi-animation@2.101.0': - resolution: {integrity: sha512-dcESvnz0vHdxc2v0NnxCRFVedT88r250x0xPJ1x9BMnUn/PCSN9BtAUl2hktoLVyhp/+So41ThPvn/2tTAvqVA==} - - '@douyinfe/semi-foundation@2.101.0': - resolution: {integrity: sha512-ESEH7aCX3IETSmp952Lq2f4lxApYn2uH72YJ4WUJ5YoOMxtWZCFVf85R02+zBlEP/dTED9PBl3aOazkgdH/USA==} - - '@douyinfe/semi-icons@2.101.0': - resolution: {integrity: sha512-BFDALkxYbjZmFdpcTYgE031uWJnWC/s7olR8j8F21RM1W2LIVCnpGFXLAppUj+y+5xeG2wcL57MA9AxBvPa0aw==} - peerDependencies: - react: '>=16.0.0' - - '@douyinfe/semi-illustrations@2.101.0': - resolution: {integrity: sha512-iVFqwaftoMRpnAeeYoAOD7+06plRLW4HqyufVPpTwPBkdalANoX5NtdGPwc4w9E4+O+pu8vMp1snojhVrxYIMw==} - peerDependencies: - react: '>=16.0.0' - - '@douyinfe/semi-json-viewer-core@2.101.0': - resolution: {integrity: sha512-0Jp4/3Go0kQnlYIi+NzM3Dh1/YJjMjXGPQV9WfjlZXAE47FIM+KTNWL8wyGQz5x91HKV0ZABd7pGw76abODT3g==} - - '@douyinfe/semi-theme-default@2.101.0': - resolution: {integrity: sha512-TZHhGapKNtd06eGb+RDpntmTo1iKsh/2KQgH4YDzrEnuCs59EGEj4Uh+RkhlMLGWkxR/qrP6weMnl8K3k/E69g==} - - '@douyinfe/semi-ui@2.101.0': - resolution: {integrity: sha512-oTIE9Hrc++8zv4MSanbkMlFpqoQeT/Gn7fPv+B1b1HJZIO0Dzj7pAimv2BBoZ4mB8QcsJ2BXFALg/Lp3ienbqA==} - peerDependencies: - react: '>=16.0.0' - react-dom: '>=16.0.0' - '@emnapi/core@1.9.2': resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} @@ -942,15 +854,6 @@ packages: '@noble/hashes': optional: true - '@floating-ui/core@1.8.0': - resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} - - '@floating-ui/dom@1.8.0': - resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} - - '@floating-ui/utils@0.2.12': - resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} - '@hongzhiyuan/preact@10.28.0-fc4af453': resolution: {integrity: sha512-TrM2g079OZN1poroDnU2kQd1gNUB1DMfVoKyz23AE3hZvl9ypRgG2MdgxAJtwT5u3BmYvI4Z0EbdpJTdf428IQ==} @@ -1071,28 +974,12 @@ packages: '@lynx-js/css-serializer@0.1.4': resolution: {integrity: sha512-yG3sC1fH+rBQhbdvPCweaGjmFmOBdi2rbt7xs9laMfu5Z5dOXL1OB7pZZN0vodptBO0/ctVfMCKH2EKhq0GtTA==} - '@lynx-js/go-web@0.5.1': - resolution: {integrity: sha512-HQO72C1ALInCzjDVEzCYJ7aGh/jQHTKc3fG8MNUs6TLy2lXl8ut/dKsztEw3OzD6NlCcQpoRdSsbmuI8ETDo7w==} - engines: {node: ^22 || ^24} - peerDependencies: - '@douyinfe/semi-icons': '>=2.74.0' - '@douyinfe/semi-ui': '>=2.75.0' - '@lynx-js/web-core': '>=0.20.0' - '@rspress/core': '*' - '@shikijs/transformers': '>=3.0.0' - qrcode.react: '>=4.0.0' - react: '>=18.0.0' - react-copy-to-clipboard: '>=5.0.0' - react-dom: '>=18.0.0' - swr: '>=2.0.0' - vscode-icons-js: '>=11.0.0' - peerDependenciesMeta: - '@rspress/core': - optional: true - '@lynx-js/lynx-core@0.1.3': resolution: {integrity: sha512-uWzKKYJUK4Q09ZRZxWSAFINnmZb9piWPbvWF9SkLn+3snBl9u/BJa4ekPRcKWAhBmpbtxWH1x27fxe3Q3p5l3Q==} + '@lynx-js/offscreen-document@0.1.4': + resolution: {integrity: sha512-7OUAXZbpWigxOwpcDUU348R9Iw4JZP8qOsNdJ7+Z+LWTWt2DxbkxIKJ/KawQNOp+tsXeOFwUNbrgGkA7aqAX5w==} + '@lynx-js/qrcode-rsbuild-plugin@0.4.6': resolution: {integrity: sha512-KHnvkccapEWEtfRMJ4GxNoZDsv8c0RlfNfc3la/z8G2eP+vb8VtKG1Atk2FVagUVnJcuePeuue8LaivzoM/Irw==} engines: {node: '>=18'} @@ -1164,6 +1051,12 @@ packages: peerDependencies: '@lynx-js/react': '*' + '@lynx-js/web-constants@0.19.8': + resolution: {integrity: sha512-aOk2wmwNu0jJ4ERqU+FBva20uZsQi3Uw1uRwOw8pv3fnetNhW5BlExuGdUzv6XTHbOEd1Jfm4jiOwjrzgXr0PQ==} + + '@lynx-js/web-constants@0.7.1': + resolution: {integrity: sha512-W8JmHKBwb2BGNnY8ZJBLKbKqP6cd9oUbo6ElezwFUuznDcIasxf43HSccSBpHxwghD1sdF5WrP1PFF5giIBazg==} + '@lynx-js/web-core-wasm@0.0.5': resolution: {integrity: sha512-ICvkMf9Myx8/eShv3oCXp9/u+u7yLMC7WTDtHDEZXGyLVkT4dQqtevw7AfOgihu8PQKncOfeMPzO2csFKDejzw==} peerDependencies: @@ -1178,38 +1071,66 @@ packages: tslib: optional: true - '@lynx-js/web-core@0.20.4': - resolution: {integrity: sha512-n0lLAjUeK1ndJE7xzCzkccYQE42C1qDMOvRSxqSZ5JdcBaY4pG0ZWswXC6jiL0gaksiY5Y31wZOIWHMlRRotPw==} + '@lynx-js/web-core@0.19.8': + resolution: {integrity: sha512-8J+T7lZYraWcJNEWWLeVWjeUhRaIRPS7XL6l1x5A+5SC8QCNIezUl1fSYIJiRRQLZjph2xXvBn2K5vzQ3PJREw==} peerDependencies: - '@lynx-js/css-serializer': 0.1.6 '@lynx-js/lynx-core': 0.1.3 + '@lynx-js/web-elements': '>0.7.7' + + '@lynx-js/web-core@0.7.1': + resolution: {integrity: sha512-Vn6rmp0EWetm2mQMThcs9yQFRd1SxPy3+AmaapgYQLS+RIfRlQqHQmQBxWIJlUGCcq9iLFM03xw0H/YVYN3kHg==} + peerDependencies: + '@lynx-js/lynx-core': 0.1.0 + '@lynx-js/web-elements': '>=0.1.0' + + '@lynx-js/web-elements-reactive@0.2.2': + resolution: {integrity: sha512-IVZJaD4IDtVMaFG14vwhavPH6RJPU+VgxN3NLgcRB+2DO+0Ks1/0hYAJuk/QskGF6A7haGsG9TW/EQ7mk1s/sg==} + + '@lynx-js/web-elements-template@0.7.7': + resolution: {integrity: sha512-i/Aavm6Ijk8hs7BiBxu4fjatwzkKU0s1Vbj5wdH7lo18FvCbOJZsWUuzNTwXR41D49F8oPI4hQvs0OkKv8ZUJQ==} + + '@lynx-js/web-elements@0.11.3': + resolution: {integrity: sha512-GmfJ1pyvIyR2BpFaWYlH/zlVujVMuCUj+rK20vxlza1wQdSsc5wOeBHbbY3DGq73DvtkhPEczKqIncRUQGZaMA==} + peerDependencies: tslib: ^2.5.0 - peerDependenciesMeta: - '@lynx-js/css-serializer': - optional: true - '@lynx-js/lynx-core': - optional: true - tslib: - optional: true '@lynx-js/web-elements@0.12.0': resolution: {integrity: sha512-7z8PQQSDMUWrxoizySOg1pKGIiSDeGGomOr5FV0Tx9gniHNJYx0e7/h6wQmwhyHdAZYyihyaBks88QkX8DRNEw==} peerDependencies: tslib: ^2.5.0 - '@lynx-js/web-elements@0.12.2': - resolution: {integrity: sha512-k6eblA01RUIt09/GRXpRx1eL4n4Ztzs4v81RAE8Pkix8MyRArwjHb5qbV9O64VWuSk/R6h6ZJjen0cfzrBZdzw==} + '@lynx-js/web-elements@0.7.7': + resolution: {integrity: sha512-8DjHNinJqQNJ2Ues7VAaf2HHGxmg7EQEiKsZ0f/u/avy0X+RNrACt42sY7VUI0+r9asC7VcRkD/QILUd9VCkNQ==} peerDependencies: tslib: ^2.5.0 + '@lynx-js/web-mainthread-apis@0.19.8': + resolution: {integrity: sha512-Ze6u1wg5VZO1htXG6AVRB6CSf1qDcMrxtyl22BMmQhRvm9ut4Ck8k1+e5MIaUCTST1q1j0s59bsKsSstZ/Xlng==} + + '@lynx-js/web-mainthread-apis@0.7.1': + resolution: {integrity: sha512-xeBYM8DoVCiAN70gsq4EQs4all++zdkIWSflIkbJHMdiCWNWFeb+UNBjDLTYBfP4NwNZosnKhLArofMSne85cw==} + '@lynx-js/web-rsbuild-server-middleware@0.19.9': resolution: {integrity: sha512-iOqUxrXUD6L6ot01AMb9VXdR/Twh/e6t4SRKFC1NafIw99gUHumVsQHUGh5oZQLtP7mZHJMkeBcavzqvfcW58w==} + '@lynx-js/web-style-transformer@0.2.2': + resolution: {integrity: sha512-b/6HCg7pHzmBapr4FFZqzchZwyw9kfjCOuwKFJZp2Xn4ABCUHEbPfBfO3EPEO+mm1CjiN48/YcXG1IxHME7b7w==} + '@lynx-js/web-worker-rpc@0.19.8': resolution: {integrity: sha512-POkpPZQjU+a0V/LGWNkaqy+/E6B2WEDYnbh+0FtRNLXcNOBOcgvZNg0fo6VVbw3UInmTwO0v+2g/kMjotizwkg==} - '@lynx-js/web-worker-rpc@0.20.4': - resolution: {integrity: sha512-i4RV8f397nl02zB1wjFfEJDo/bM0c+dvzd9nIPY9gksf2lX8aSOpkXn6Kyou+05qdJAXm2EZIl8SKYiTMi/P6w==} + '@lynx-js/web-worker-rpc@0.7.1': + resolution: {integrity: sha512-5aKeVfElE+duqBFWiOaiBBZiC2B7aTDJI88jY7ROrikD5suftmANbMRme8YC46UmJBOo2a5SyLaoZcW54SjL5Q==} + + '@lynx-js/web-worker-runtime@0.19.8': + resolution: {integrity: sha512-lZHnEWQ0QrNIHRGUzYBS22d4ckwyUM+1Gee8D2pCYSAdyqr4aRaNJrUEp8sO8YTh91kohN3c09YQcgRZ8sIstQ==} + peerDependencies: + '@lynx-js/lynx-core': 0.1.3 + + '@lynx-js/web-worker-runtime@0.7.1': + resolution: {integrity: sha512-zqxmqBb77E54VHTo92wMmenRyqIuM9mUON8F+sJKPq0eBa8F2GG4y/fewaXvFU+6pfQUMawGU8wsAUqEiTJwrA==} + peerDependencies: + '@lynx-js/lynx-core': 0.1.0 '@lynx-js/webpack-dev-transport@0.2.0': resolution: {integrity: sha512-RSy02FSoMsavEn2wna4khSJwT2uGW4XeLduKH8UDT3aCsBNM/rXndUyG6PbwMcywXCeyb8UofkhaQDtJvNJklA==} @@ -1529,14 +1450,6 @@ packages: '@rsbuild/core': optional: true - '@rsbuild/plugin-sass@1.5.3': - resolution: {integrity: sha512-NViSITZF3J3i96GfemWfTZBZ43CNZUgTaaKgfti0I7odwy36Qlo8MIAbGjOy8pBSygIYn7Xl4+Jw8qAbTysCBw==} - peerDependencies: - '@rsbuild/core': ^1.3.0 || ^2.0.0-0 - peerDependenciesMeta: - '@rsbuild/core': - optional: true - '@rsdoctor/client@1.2.3': resolution: {integrity: sha512-KzfRONtUFMOhgyd9Kur9C/eqh+qPE0UDQEwp/uCMIQHwmompGgChuGniVENd2mGgkZX4MDHubFSvjoeI7j4UBg==} @@ -1789,9 +1702,6 @@ packages: '@shikijs/core@1.29.2': resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} - '@shikijs/core@3.23.0': - resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==} - '@shikijs/core@4.0.2': resolution: {integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==} engines: {node: '>=20'} @@ -1832,15 +1742,9 @@ packages: resolution: {integrity: sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==} engines: {node: '>=20'} - '@shikijs/transformers@3.23.0': - resolution: {integrity: sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ==} - '@shikijs/types@1.29.2': resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} - '@shikijs/types@3.23.0': - resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} - '@shikijs/types@4.0.2': resolution: {integrity: sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==} engines: {node: '>=20'} @@ -1870,184 +1774,6 @@ packages: resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@tiptap/core@3.27.3': - resolution: {integrity: sha512-TJj5929M96C1KlH796wS8MywfHDh49RhmakOyzyMMc9pFmRj9UXi1gj0TCXgsZtjEOG7B+m/DRvNOvnuvR9kmg==} - peerDependencies: - '@tiptap/pm': 3.27.3 - - '@tiptap/extension-blockquote@3.27.3': - resolution: {integrity: sha512-VGoVMcqcGkkoduzEqQ70ZK5OOHBDn5iYeHJSgkvNoSHzYHl0CaKoWxoDKJjSWC5DAM4mBU+tXTlsiUp3evRMfA==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extension-bold@3.27.3': - resolution: {integrity: sha512-pchbycFppBqBmvk+OxrQLIPZLNd3rNbcm7zOa+OTjluphpAcsJ6AmHBmiRhJUYWitV6/SA+0nujcaWxBp5hNcQ==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extension-bubble-menu@3.27.3': - resolution: {integrity: sha512-PKSM9g8BXzO0Lxm2gOin7FAFvxO6T0QvlXTXVke/GJn/sR1tEz7w5ybsvweytUPmSliUc601pfIUOHKEhIVC2Q==} - peerDependencies: - '@tiptap/core': 3.27.3 - '@tiptap/pm': 3.27.3 - - '@tiptap/extension-bullet-list@3.27.3': - resolution: {integrity: sha512-owQW6mcgnYgQU1z5BqmslcjZFBUm1SGM/Ax++4R6XelIt/7ol6uSTjzjAzum+ASW7UlBbuJHuSgRjl8cA+RGkg==} - peerDependencies: - '@tiptap/extension-list': 3.27.3 - - '@tiptap/extension-code-block@3.27.3': - resolution: {integrity: sha512-3CVnzkpGoqqI5KaXI9l9PMwLkx34SYY63tpeo0I0QjDk4LU+JTAQDTPJFSwB4zTsHZ7ZFMU0jjasFOZ1kZRVgw==} - peerDependencies: - '@tiptap/core': 3.27.3 - '@tiptap/pm': 3.27.3 - - '@tiptap/extension-code@3.27.3': - resolution: {integrity: sha512-T7JF10Y3k7fyVujXXLVubdUh7fctgBUoiuxbvjotpltg1U/mPbOcT0UW/uif9j3H8TFvAwNApVw3x8bwwFUakA==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extension-document@3.27.3': - resolution: {integrity: sha512-PR25MRv56Nm4ETVLwA8nAh/0RrVdvD4D2nxnAC8kUkxz1WOYDaqTfPqqEeSWDoUUTUp1I1xzDkD4x0gEnAlmZA==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extension-dropcursor@3.27.3': - resolution: {integrity: sha512-XsL0Ziual+ynXyx5JgLb0KIOShlMN3MW7+GQvf9PGRb1vOB7IOTRFDxMPrxDWcFIZ6WWMWSrbkCLOKHStt1BWg==} - peerDependencies: - '@tiptap/extensions': 3.27.3 - - '@tiptap/extension-floating-menu@3.27.3': - resolution: {integrity: sha512-qL+g1Z6MqZvYG4mHTPwub9II2fWZY+2I5VFfV8fzqy1HchBOyY6Df0mRKDNb0bmjBdFabIXnswz3iqLx3mDTbw==} - peerDependencies: - '@floating-ui/dom': ^1.0.0 - '@tiptap/core': 3.27.3 - '@tiptap/pm': 3.27.3 - - '@tiptap/extension-gapcursor@3.27.3': - resolution: {integrity: sha512-MVBqzwYrDOttkn2GOrvvKTDCymfSS2VGSKpahcKKhge5mweSDiqko2X1vBDnMF8aVW3WxIFfDMmO4VMmh8HDZA==} - peerDependencies: - '@tiptap/extensions': 3.27.3 - - '@tiptap/extension-hard-break@3.27.3': - resolution: {integrity: sha512-cySObJITR2CRrWII87mI2LJ12wEETTnxt2p1vvC6ZtUmKnB50fOu+ux8ZEt6KYNocIOtrEZthNFzTOx7R7UtrQ==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extension-heading@3.27.3': - resolution: {integrity: sha512-QHXnsNic6iId8pnsFZ8z4PkX5L+HCHa/D7rAi3nNWtPlSIAOxo4nKrALcB5/tHmY+XL8kEXKH3nsNLNEDLCYPg==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extension-horizontal-rule@3.27.3': - resolution: {integrity: sha512-sNCuo0+Q001B5XTVWY+ULpWXQqtBNRmAqXxAexZl44bx3rDqHG8OzjwT4EM0LIj2+BYVbdqwaJ1vfQbZVEEbig==} - peerDependencies: - '@tiptap/core': 3.27.3 - '@tiptap/pm': 3.27.3 - - '@tiptap/extension-image@3.27.3': - resolution: {integrity: sha512-3OVLRH54Xkh9yrI5oGIempuqZkhLG1plyJBRnapx0N8j9IjEImOLF78kPYoAZzaBuU78M3Zk/E7HQZgmnaNRBg==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extension-italic@3.27.3': - resolution: {integrity: sha512-7VpVi2vn8kGFAc/HLrt96J/E6+LXOGKn8xLhJS863t150yLIG3EPQLA1h+G5O6eo+/w+9YokvJAAJoeDihj1Jg==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extension-link@3.27.3': - resolution: {integrity: sha512-iXmu1tJ/3vP60c9d+zfO3+X64vod2EyBrM1qeufecAtWA6t0bT9tYeka0Zq6qDRGsZK5zViO9F2lsY7eHXiYuA==} - peerDependencies: - '@tiptap/core': 3.27.3 - '@tiptap/pm': 3.27.3 - - '@tiptap/extension-list-item@3.27.3': - resolution: {integrity: sha512-UddhVaQ7+V9IfQVVE8AJLNzSmyaaNpZPQsoPQxFNlJyOFxD6RwSTT8L4rb/TwbUctxSFWpyd1J7exzf33Ony/g==} - peerDependencies: - '@tiptap/extension-list': 3.27.3 - - '@tiptap/extension-list-keymap@3.27.3': - resolution: {integrity: sha512-GZPVg4QCFm41yTMPEPeTlH2odNeQwRuWHY/pt3pI5LsfipQ4kDBv6h9we928vJQUnU2Gg9Y3cL5iRbmXIWWTUA==} - peerDependencies: - '@tiptap/extension-list': 3.27.3 - - '@tiptap/extension-list@3.27.3': - resolution: {integrity: sha512-52rcaSzYjtVGUrNkdB8k1Bw/rId2lBirrWMvmnBLsieoeFd8zo8ow5zkwV057BYSgWXfnMAV7GOpDyq2IoSD9A==} - peerDependencies: - '@tiptap/core': 3.27.3 - '@tiptap/pm': 3.27.3 - - '@tiptap/extension-mention@3.27.3': - resolution: {integrity: sha512-yN698bjYxYh5Ugv7qUUAQHJ8ZiVtNcVj5YZRruhjf/LhZQRtq9Xy8T7JipiS/MBZ/Zaf0qJkXM0n9IrAdn48iA==} - peerDependencies: - '@tiptap/core': 3.27.3 - '@tiptap/pm': 3.27.3 - '@tiptap/suggestion': 3.27.3 - - '@tiptap/extension-ordered-list@3.27.3': - resolution: {integrity: sha512-oHYoE65WfRSM5tCcXi8MtQmzPxz83E2qw0pa2yHBKwr9xCCQUu8vJHJE+EJGduWdaNImv43+6/6kVMeYYbXRKg==} - peerDependencies: - '@tiptap/extension-list': 3.27.3 - - '@tiptap/extension-paragraph@3.27.3': - resolution: {integrity: sha512-G5XPCN7lm0nULYPelJC2eUbKbt1q97j67e/HSWxwMYEXhceec5eNAtVfpDCRyXNO9osyBi2kXqLv/IQtxbch9A==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extension-strike@3.27.3': - resolution: {integrity: sha512-dp6Rs3I4zLVJPvAw2Q9yrNuYKcX5LTONH3/oyULvGsrqq5DKz7pqscfwhwnDSzrgm/3aCz6B9r1BVHlYI/DXlA==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extension-text-align@3.27.3': - resolution: {integrity: sha512-yyhlwRz0Eh6xQCn+GtTDWUGqxGajT02Qf8zBN/3eZQtl3EZ2xrI8lvfLmcV9SAW0srgMd+5hX0CVV+zKeXuxeg==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extension-text-style@3.27.3': - resolution: {integrity: sha512-oim4RqFtMBCA4N+J8f8dTFFYZrwyfmXLxLL5SvQkn+kkpfGLv8PqJCnJ4uHxsnHXDNsWHBtVVhfTGUABZsTEHg==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extension-text@3.27.3': - resolution: {integrity: sha512-wSatZ/bop0pleeC18nF90zvWWEoRe/ewZncvm8LjcMrXwq41kTEs3j7nZflMYAh7X8fZvu00UIMeEyCNJl+5Yg==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extension-underline@3.27.3': - resolution: {integrity: sha512-YH7ka/Rp7ZwlzTuQCcs0OZ4CMSx/P/MzbseQKxKebEIZreWaKMZAaED97Fnu0dA66VlreD4/1C7xHJy84ovamg==} - peerDependencies: - '@tiptap/core': 3.27.3 - - '@tiptap/extensions@3.27.3': - resolution: {integrity: sha512-IA2QKUVJgzUPEhhkUfr6P5u5GFVfhiApiEaaHXBz07saL2c4HNoVs2RC18QlZDCtLNKrPR1mUScr72u7uYs+YQ==} - peerDependencies: - '@tiptap/core': 3.27.3 - '@tiptap/pm': 3.27.3 - - '@tiptap/pm@3.27.3': - resolution: {integrity: sha512-ppiG57RxM3HSHHgcHT0hP6Ib4P56Sd5itxdV4w0hIGHKPGyLLKiAkYp+htIHa9T7IvjMdaqxIlsfyV3ZKsS1sw==} - - '@tiptap/react@3.27.3': - resolution: {integrity: sha512-lanXxMScw/LevbRFuFw5MoQJ1grmHUDszwph2VIk4l2U5e/EDIw3rr4CeDME6Z4isVReD6zccMFVShkHqsv+jg==} - peerDependencies: - '@tiptap/core': 3.27.3 - '@tiptap/pm': 3.27.3 - '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 - '@types/react-dom': ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tiptap/starter-kit@3.27.3': - resolution: {integrity: sha512-xX3baFqiC30skntdhxUUvyJo755ON9c1pE83+2Wiq2g+Qnffg9knUuLCZStHoZZ318yB0aBsKAMvHWLtYDo8AA==} - - '@tiptap/suggestion@3.27.3': - resolution: {integrity: sha512-2sSpjK3j50n9TLC8yB1PJ/TkL9Ozh1dhkYcl6ZKpXH0FBDauytPhPaZOrcTlYR4f9MXUpMuUcbZ4R5dplhgZ2Q==} - peerDependencies: - '@floating-ui/dom': ^1.0.0 - '@tiptap/core': 3.27.3 - '@tiptap/pm': 3.27.3 - '@tsconfig/node10@1.0.12': resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} @@ -2123,9 +1849,6 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/jasmine@3.10.19': - resolution: {integrity: sha512-Bz6P2XoeIN13AhvVe0nS7+m2RfxVllETDjFQ/s6lyEwEfIVpPCc1Q8vPdFopFAOU5mzrU1zypXJ1xGDl5EVU9Q==} - '@types/jest@29.5.14': resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} @@ -2156,14 +1879,6 @@ packages: '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - '@types/react-copy-to-clipboard@5.0.7': - resolution: {integrity: sha512-Gft19D+as4M+9Whq1oglhmK49vqPhcLzk8WfvfLvaYMIPYanyfLy0+CwFucMJfdKoSFyySPmkkWn8/E6voQXjQ==} - - '@types/react-dom@19.2.3': - resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} - peerDependencies: - '@types/react': ^19.2.0 - '@types/react@18.3.28': resolution: {integrity: sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==} @@ -2179,18 +1894,12 @@ packages: '@types/tapable@2.2.7': resolution: {integrity: sha512-D6QzACV9vNX3r8HQQNTOnpG+Bv1rko+yEA82wKs3O9CQ5+XW7HI7TED17/UE7+5dIxyxZIWTxKbsBeF6uKFCwA==} - '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/use-sync-external-store@0.0.6': - resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} @@ -2202,7 +1911,6 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@unhead/react@2.1.13': resolution: {integrity: sha512-gC48tNJ0UtbithkiKCc2WUlxbVVk5o171EtruS2w2hQUblfYFHzCPu2hljjT1e0tUHXXqN8EMv7mpxHddMB2sg==} @@ -2456,9 +2164,6 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} - async-validator@3.5.2: - resolution: {integrity: sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==} - asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -2516,15 +2221,9 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - bezier-easing@2.1.0: - resolution: {integrity: sha512-gbIqZ/eslnUFC1tjEvtz0sgx+xTK20wDnYMIA27VA04R7w6xxXQPZDbibjA9DTWZRA2CXtwHykkVzlCaAJAZig==} - bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} - big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -2644,9 +2343,9 @@ packages: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} - chokidar@5.0.0: - resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} - engines: {node: '>= 20.19.0'} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} @@ -2659,9 +2358,6 @@ packages: cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2708,9 +2404,6 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - compute-scroll-into-view@1.0.20: - resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==} - compute-scroll-into-view@3.1.1: resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} @@ -2736,10 +2429,6 @@ packages: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} - copy-text-to-clipboard@2.2.0: - resolution: {integrity: sha512-WRvoIdnTs1rgPMkgA2pUOa/M4Enh2uzCwdKsOMYNAJiz/4ZvEJgmbF4OmninPmlFdAWisfeh0tH+Cpf7ni3RqQ==} - engines: {node: '>=6'} - copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} @@ -2872,15 +2561,6 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - date-fns-tz@1.3.8: - resolution: {integrity: sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ==} - peerDependencies: - date-fns: '>=2.0.0' - - date-fns@2.30.0: - resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} - engines: {node: '>=0.11'} - dayjs@1.11.13: resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} @@ -2996,9 +2676,6 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.4.12: - resolution: {integrity: sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==} - domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} @@ -3028,10 +2705,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -3195,16 +2868,9 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - fast-copy@3.0.2: - resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-equals@5.4.1: - resolution: {integrity: sha512-DjlFSM5Pk9cGcL0q5QXl66eGzx0N6szNgaswwc5ZphlBohjTVJSnGgI+rJVOgOi65qUoQnDZN4nDqi33udtydQ==} - engines: {node: '>=6.0.0'} - fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -3468,6 +3134,9 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + hyphenate-style-name@1.1.0: + resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -3881,9 +3550,6 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-parser@3.3.1: - resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} @@ -3909,17 +3575,10 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - linkifyjs@4.3.3: - resolution: {integrity: sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg==} - loader-runner@4.3.1: resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} engines: {node: '>=6.11.5'} - loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} - locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3939,13 +3598,6 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lottie-web@5.13.0: - resolution: {integrity: sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==} - loupe@3.2.1: resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} @@ -4060,9 +3712,6 @@ packages: medium-zoom@1.1.0: resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==} - memoize-one@5.2.1: - resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -4267,11 +3916,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@3.3.16: - resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -4359,9 +4003,6 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - orderedmap@2.1.1: - resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} - own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -4637,10 +4278,6 @@ packages: resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.17: - resolution: {integrity: sha512-J7EF+8X+CzRPaJPOv9Ck2wNWJvGnnl3PcNPAdGg6GTLjyVpyQ0yATMSXRFRV01BviT/9Gwuc3rjEyJbDJG9a4w==} - engines: {node: ^10 || ^12 || >=14} - prettier@3.8.3: resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} engines: {node: '>=14'} @@ -4650,59 +4287,13 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - prismjs@1.30.0: - resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} - engines: {node: '>=6'} - prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} - prosemirror-changeset@2.4.1: - resolution: {integrity: sha512-96WBLhOaYhJ+kPhLg3uW359Tz6I/MfcrQfL4EGv4SrcqKEMC1gmoGrXHecPE8eOwTVCJ4IwgfzM8fFad25wNfw==} - - prosemirror-commands@1.7.1: - resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==} - - prosemirror-dropcursor@1.8.3: - resolution: {integrity: sha512-FoYbsJR8gK+DGlqhNoE29Loa38eIZPzQRIb1VMaDNBoo4OLP6vVof/jR8qFY/6XvUd6Dhug8MDCHl2a/h8RTfQ==} - - prosemirror-gapcursor@1.4.1: - resolution: {integrity: sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==} - - prosemirror-history@1.5.0: - resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==} - - prosemirror-inputrules@1.5.1: - resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==} - - prosemirror-keymap@1.2.3: - resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} - - prosemirror-model@1.25.11: - resolution: {integrity: sha512-QWg9RhnpLlogAmp3p96uEFrE5txQpFynd4vhBAELkwgOCWQs/X0yCzB3/hrHqiPwf91RG5KyWq6553zs9JqIOQ==} - - prosemirror-schema-list@1.5.1: - resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} - - prosemirror-state@1.4.4: - resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==} - - prosemirror-tables@1.8.5: - resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==} - - prosemirror-transform@1.12.0: - resolution: {integrity: sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==} - - prosemirror-view@1.42.1: - resolution: {integrity: sha512-rRqzZnRgkyh69XoOMrfFJHwauHscLBmHbq772kwbic1ymQAM8gXjzEbJse5j1ep2UO2HRIAQL0bY3kZ/RoqjVw==} - proxy-from-env@2.1.0: resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} engines: {node: '>=10'} @@ -4718,11 +4309,6 @@ packages: pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - qrcode.react@4.2.0: - resolution: {integrity: sha512-QpgqWi8rD9DsS9EP3z7BT+5lY5SFhsqGjpgW5DY/i3mK4M9DTBNz3ErMi8BWYEfI3L0d8GIbGmcdFAS1uIRGjA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} @@ -4737,25 +4323,11 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} - react-copy-to-clipboard@5.1.1: - resolution: {integrity: sha512-s+HrzLyJBxrpGTYXF15dTgMjAJpEPZT/Yp6NytAtZMRngejxt6Pt5WrfFxLAcsqUDU6sY1Jz6tyHwIicE1U2Xg==} - peerDependencies: - react: '>=15.3.0' - react-dom@19.2.5: resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==} peerDependencies: react: ^19.2.5 - react-draggable@4.7.0: - resolution: {integrity: sha512-kTpANmKWVnFXiZ76Ag2ZowiFStuBYnJ606PI1TbUsOg29/400/JNIxI9+CuenhiAqFuXWJffz6F4UI3R51kUug==} - peerDependencies: - react: '>= 16.3.0' - react-dom: '>= 16.3.0' - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} @@ -4777,12 +4349,6 @@ packages: peerDependencies: react: '>=19' - react-resizable@3.2.0: - resolution: {integrity: sha512-3NKQ0SLZV7rs3LQHeXlOzDSRQfFrkX6TVet77/Qk03zqiZyee37b7N8/gwDJAA8UUjRz7PdWCCy49hcso45SMQ==} - peerDependencies: - react: '>= 16.3' - react-dom: '>= 16.3' - react-router-dom@7.14.1: resolution: {integrity: sha512-ZkrQuwwhGibjQLqH1eCdyiZyLWglPxzxdl5tgwgKEyCSGC76vmAjleGocRe3J/MLfzMUIKwaFJWpFVJhK3d2xA==} engines: {node: '>=20.0.0'} @@ -4800,20 +4366,13 @@ packages: react-dom: optional: true - react-window@1.8.11: - resolution: {integrity: sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ==} - engines: {node: '>8.0.0'} - peerDependencies: - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react@19.2.5: resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} engines: {node: '>=0.10.0'} - readdirp@5.0.0: - resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} - engines: {node: '>= 20.19.0'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} @@ -4937,9 +4496,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rope-sequence@1.3.4: - resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} - rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} @@ -4970,118 +4526,118 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-embedded-all-unknown@1.100.0: - resolution: {integrity: sha512-auFtXY/kwYILmSVjtBDwyj0axcLbYYiffOKWoaXHnI5bsYwiRbBh3EneR1rpbX2ZIZCrwX93i5pxKLTZF/662Q==} + sass-embedded-all-unknown@1.97.3: + resolution: {integrity: sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg==} cpu: ['!arm', '!arm64', '!riscv64', '!x64'] - sass-embedded-android-arm64@1.100.0: - resolution: {integrity: sha512-W+Ru9JwTnfU0UX3jSZcbqFdtKFMcYdfFwytc57h2DgnqCOIiAqI2E06mABZBZC+r3LwXCBuS5GbXAGeVgvVDkA==} + sass-embedded-android-arm64@1.97.3: + resolution: {integrity: sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [android] - sass-embedded-android-arm@1.100.0: - resolution: {integrity: sha512-70f3HgX2pFNmzpGQ86n5e6QfWn2fP4QUQGfFQK0P1XH73ZLIzLo2YqygrGKGKeeqtc5eU2Wl1/xQzhzuKnO4kw==} + sass-embedded-android-arm@1.97.3: + resolution: {integrity: sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg==} engines: {node: '>=14.0.0'} cpu: [arm] os: [android] - sass-embedded-android-riscv64@1.100.0: - resolution: {integrity: sha512-icU3o0V/uCSytSpf+tX5Lf51BvyQEbLzDUJfUi9etSauYBGHpPKkdtdZH0si4v98phq11Kl8rSV1SggksxF1Hg==} + sass-embedded-android-riscv64@1.97.3: + resolution: {integrity: sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [android] - sass-embedded-android-x64@1.100.0: - resolution: {integrity: sha512-mevF9VQk6gEYByy8+jusaHGmd7Usb2ytX/DsEOd0JtOGCtcf1kh575xJ6OUBDIcJ15uLnbau/0iy1eP6WVBvWA==} + sass-embedded-android-x64@1.97.3: + resolution: {integrity: sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [android] - sass-embedded-darwin-arm64@1.100.0: - resolution: {integrity: sha512-1PVlYi61POo93IT/FfrG1mc1tAHxeSTyUALF2aOFmXGWjVXr3bQzEQiBGCOvQbj/ix+5hNyXFXcEMEyKvtUJJA==} + sass-embedded-darwin-arm64@1.97.3: + resolution: {integrity: sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - sass-embedded-darwin-x64@1.100.0: - resolution: {integrity: sha512-x97o3JnGyImZNCIVs9wQHJUE5QCvmVIKaH1cwrz/5dK7OT1FpeNiW+u9TUomP9hG6Ekjd8EL8NBHpxTfIhdjmg==} + sass-embedded-darwin-x64@1.97.3: + resolution: {integrity: sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - sass-embedded-linux-arm64@1.100.0: - resolution: {integrity: sha512-Dwjmj8Z6VRy7rAi53JAdEwIyUjpfl7PhpSc2/LpQPQx+aO5Dp7Spaipkax0ufJl1SoDUdchCsM4y/88YaluorQ==} + sass-embedded-linux-arm64@1.97.3: + resolution: {integrity: sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-arm@1.100.0: - resolution: {integrity: sha512-9Ul7O1eKrc5YlhwWjkp8tZPSe3UEwSZ1uwUZOQom1HL0pRlBA6F/IlGZYFTLwnHMIP1fc77MMNaBRfc05mKMpw==} + sass-embedded-linux-arm@1.97.3: + resolution: {integrity: sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-arm64@1.100.0: - resolution: {integrity: sha512-XpACJB2KjSLjf2e9uuvGVdOURsoNrFqgRiihhXyUHK9W0t3LIHb7z5MA/7XGPIT9bWSOO2zyw+rH/FHtDV/Yrg==} + sass-embedded-linux-musl-arm64@1.97.3: + resolution: {integrity: sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-musl-arm@1.100.0: - resolution: {integrity: sha512-sl0JgbGloPyJg66XXx5UDSDScZ0oU85DpMQU4JU/sCUCFj1Z8zZ69SJWKTCNE4/jwnce7WI2zPCV5AG+RHOZJw==} + sass-embedded-linux-musl-arm@1.97.3: + resolution: {integrity: sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-riscv64@1.100.0: - resolution: {integrity: sha512-ShvI0Kx04mwoCARwZ0UjiT97isQvzO80tAt91zmFyHLN9kelc/IrQi940farSm2xQVPCKdeVyeG0ekBsokSpYQ==} + sass-embedded-linux-musl-riscv64@1.97.3: + resolution: {integrity: sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-musl-x64@1.100.0: - resolution: {integrity: sha512-TDBCRWNuS4RDLQXvRc1gjZlWiWTWaWGp0Bwu/IKwJxov81lsvrCs3TihTyNXtW7V5aoN4Ky3r0QOkNb3mwmBnA==} + sass-embedded-linux-musl-x64@1.97.3: + resolution: {integrity: sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-linux-riscv64@1.100.0: - resolution: {integrity: sha512-j4ENJGOheO+fm3j/yorLxCjBP6/XskrZx7dTLlT+lXYwN/qqCqoA/gsNLI0McS3DFM6GBwPiffzWsdWS8t6sEQ==} + sass-embedded-linux-riscv64@1.97.3: + resolution: {integrity: sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-x64@1.100.0: - resolution: {integrity: sha512-0vUSN8j0WGtCJIOPh//EmUvYGHW0QOe5iul8qyhPk50MAcw49MA0r34AhftjDdx94ILPF6vApFs0gwHPQRlpVA==} + sass-embedded-linux-x64@1.97.3: + resolution: {integrity: sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-unknown-all@1.100.0: - resolution: {integrity: sha512-c+naBgWId4MIpToXcI0DgqetjdAkwTTAxFAuOaBz7HUXLdyG1oZRrEvSsbe41nEdQOKH0vgofVFCeSQgoXOG9A==} + sass-embedded-unknown-all@1.97.3: + resolution: {integrity: sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q==} os: ['!android', '!darwin', '!linux', '!win32'] - sass-embedded-win32-arm64@1.100.0: - resolution: {integrity: sha512-iE+yxj+hUXwwbqpHkXxgAWTzeRfcWxJ7SSTQEPMk48lwq3oCrWLlz5sQuWHbuTK/i0GKQfROdP+hOmPi89yjUg==} + sass-embedded-win32-arm64@1.97.3: + resolution: {integrity: sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - sass-embedded-win32-x64@1.100.0: - resolution: {integrity: sha512-qI4F8MI7/KYoy9NdjJfhSspG42WPkADSNDvwEV7qWvCSFC83koJssRsKO2/PfY+niZz6BG65Ic/D+A11h959hw==} + sass-embedded-win32-x64@1.97.3: + resolution: {integrity: sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - sass-embedded@1.100.0: - resolution: {integrity: sha512-Ut8wlQSk19tm7jMK6mz6cF1+e+E7tUnW2tM02zQDPnOTcVbV8qCQG8UWxZkkNlY50+hV3hqP24OOkUlMz8xBpw==} + sass-embedded@1.97.3: + resolution: {integrity: sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA==} engines: {node: '>=16.0.0'} hasBin: true - sass@1.100.0: - resolution: {integrity: sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==} - engines: {node: '>=20.19.0'} + sass@1.97.3: + resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==} + engines: {node: '>=14.0.0'} hasBin: true sax@1.6.0: @@ -5099,9 +4655,6 @@ packages: resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} - scroll-into-view-if-needed@2.2.31: - resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==} - scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} @@ -5349,11 +4902,6 @@ packages: engines: {node: '>=16'} hasBin: true - swr@2.4.2: - resolution: {integrity: sha512-ej644Y2bvkIajfR32KGeSSdBXQW+ScjGjkybZgSE7kFpk9eGnV44XY9FJylXi+W75pavSX1PVNB57W5EbhGIYw==} - peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -5653,18 +5201,9 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - use-sync-external-store@1.6.0: - resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - utility-types@3.11.0: - resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} - engines: {node: '>= 4'} - utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -5806,12 +5345,6 @@ packages: jsdom: optional: true - vscode-icons-js@11.6.1: - resolution: {integrity: sha512-rht18IFYv117UlqBn6o9j258SOtwhDBmtVrGwdoLPpSj6Z5LKQIzarQDd/tCRWneU68KEX25+nsh48tAoknKNw==} - - w3c-keyname@2.2.8: - resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} - w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -6187,8 +5720,6 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/runtime@7.29.7': {} - '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 @@ -6220,7 +5751,8 @@ snapshots: dependencies: css-tree: 3.2.1 - '@bufbuild/protobuf@2.11.0': {} + '@bufbuild/protobuf@2.11.0': + optional: true '@clack/core@0.4.2': dependencies: @@ -6279,127 +5811,9 @@ snapshots: optionalDependencies: css-tree: 3.2.1 - '@csstools/css-tokenizer@3.0.4': {} - - '@csstools/css-tokenizer@4.0.0': {} - - '@dnd-kit/accessibility@3.1.1(react@19.2.5)': - dependencies: - react: 19.2.5 - tslib: 2.8.1 - - '@dnd-kit/core@6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': - dependencies: - '@dnd-kit/accessibility': 3.1.1(react@19.2.5) - '@dnd-kit/utilities': 3.2.2(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - tslib: 2.8.1 - - '@dnd-kit/sortable@7.0.2(@dnd-kit/core@6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)': - dependencies: - '@dnd-kit/core': 6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@dnd-kit/utilities': 3.2.2(react@19.2.5) - react: 19.2.5 - tslib: 2.8.1 - - '@dnd-kit/utilities@3.2.2(react@19.2.5)': - dependencies: - react: 19.2.5 - tslib: 2.8.1 - - '@douyinfe/semi-animation-react@2.101.0': - dependencies: - '@douyinfe/semi-animation': 2.101.0 - '@douyinfe/semi-animation-styled': 2.101.0 - classnames: 2.5.1 - - '@douyinfe/semi-animation-styled@2.101.0': {} - - '@douyinfe/semi-animation@2.101.0': - dependencies: - bezier-easing: 2.1.0 - - '@douyinfe/semi-foundation@2.101.0': - dependencies: - '@douyinfe/semi-animation': 2.101.0 - '@douyinfe/semi-json-viewer-core': 2.101.0 - '@mdx-js/mdx': 3.1.1 - async-validator: 3.5.2 - classnames: 2.5.1 - date-fns: 2.30.0 - date-fns-tz: 1.3.8(date-fns@2.30.0) - fast-copy: 3.0.2 - lodash: 4.18.1 - lottie-web: 5.13.0 - memoize-one: 5.2.1 - prismjs: 1.30.0 - remark-gfm: 4.0.1 - scroll-into-view-if-needed: 2.2.31 - transitivePeerDependencies: - - supports-color - - '@douyinfe/semi-icons@2.101.0(react@19.2.5)': - dependencies: - classnames: 2.5.1 - react: 19.2.5 - - '@douyinfe/semi-illustrations@2.101.0(react@19.2.5)': - dependencies: - react: 19.2.5 - - '@douyinfe/semi-json-viewer-core@2.101.0': - dependencies: - jsonc-parser: 3.3.1 - - '@douyinfe/semi-theme-default@2.101.0': {} - - '@douyinfe/semi-ui@2.101.0(@floating-ui/dom@1.8.0)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': - dependencies: - '@dnd-kit/core': 6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@dnd-kit/sortable': 7.0.2(@dnd-kit/core@6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) - '@dnd-kit/utilities': 3.2.2(react@19.2.5) - '@douyinfe/semi-animation': 2.101.0 - '@douyinfe/semi-animation-react': 2.101.0 - '@douyinfe/semi-foundation': 2.101.0 - '@douyinfe/semi-icons': 2.101.0(react@19.2.5) - '@douyinfe/semi-illustrations': 2.101.0(react@19.2.5) - '@douyinfe/semi-theme-default': 2.101.0 - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - '@tiptap/extension-document': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-hard-break': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-image': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-mention': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) - '@tiptap/extension-paragraph': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-text': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-text-align': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-text-style': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extensions': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - '@tiptap/pm': 3.27.3 - '@tiptap/react': 3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@tiptap/starter-kit': 3.27.3 - async-validator: 3.5.2 - classnames: 2.5.1 - copy-text-to-clipboard: 2.2.0 - date-fns: 2.30.0 - date-fns-tz: 1.3.8(date-fns@2.30.0) - fast-copy: 3.0.2 - jsonc-parser: 3.3.1 - lodash: 4.18.1 - prop-types: 15.8.1 - prosemirror-state: 1.4.4 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - react-resizable: 3.2.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - react-window: 1.8.11(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - scroll-into-view-if-needed: 2.2.31 - utility-types: 3.11.0 - transitivePeerDependencies: - - '@floating-ui/dom' - - '@tiptap/suggestion' - - '@types/react' - - '@types/react-dom' - - supports-color + '@csstools/css-tokenizer@3.0.4': {} + + '@csstools/css-tokenizer@4.0.0': {} '@emnapi/core@1.9.2': dependencies: @@ -6497,17 +5911,6 @@ snapshots: '@exodus/bytes@1.15.0': {} - '@floating-ui/core@1.8.0': - dependencies: - '@floating-ui/utils': 0.2.12 - - '@floating-ui/dom@1.8.0': - dependencies: - '@floating-ui/core': 1.8.0 - '@floating-ui/utils': 0.2.12 - - '@floating-ui/utils@0.2.12': {} - '@hongzhiyuan/preact@10.28.0-fc4af453': {} '@isaacs/cliui@8.0.2': @@ -6763,7 +6166,7 @@ snapshots: dependencies: '@lynx-js/webpack-runtime-globals': 0.0.6 - '@lynx-js/css-extract-webpack-plugin@0.7.0(@lynx-js/template-webpack-plugin@0.10.5(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1))(webpack@5.105.0)': + '@lynx-js/css-extract-webpack-plugin@0.7.0(@lynx-js/template-webpack-plugin@0.10.5(tslib@2.8.1))(webpack@5.105.0)': dependencies: '@lynx-js/template-webpack-plugin': 0.10.5(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1) mini-css-extract-plugin: 2.10.2(webpack@5.105.0) @@ -6774,37 +6177,24 @@ snapshots: dependencies: css-tree: 3.2.1 - '@lynx-js/go-web@0.5.1(@douyinfe/semi-icons@2.101.0(react@19.2.5))(@douyinfe/semi-ui@2.101.0(@floating-ui/dom@1.8.0)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@lynx-js/web-core@0.20.4(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1))(@rspress/core@2.0.9(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.47.0)(micromark-util-types@2.0.2)(micromark@4.0.2))(@shikijs/transformers@3.23.0)(qrcode.react@4.2.0(react@19.2.5))(react-copy-to-clipboard@5.1.1(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(swr@2.4.2(react@19.2.5))(vscode-icons-js@11.6.1)': - dependencies: - '@douyinfe/semi-icons': 2.101.0(react@19.2.5) - '@douyinfe/semi-ui': 2.101.0(@floating-ui/dom@1.8.0)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@lynx-js/web-core': 0.20.4(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1) - '@shikijs/transformers': 3.23.0 - qrcode.react: 4.2.0(react@19.2.5) - react: 19.2.5 - react-copy-to-clipboard: 5.1.1(react@19.2.5) - react-dom: 19.2.5(react@19.2.5) - swr: 2.4.2(react@19.2.5) - vscode-icons-js: 11.6.1 - optionalDependencies: - '@rspress/core': 2.0.9(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.47.0)(micromark-util-types@2.0.2)(micromark@4.0.2) - '@lynx-js/lynx-core@0.1.3': {} + '@lynx-js/offscreen-document@0.1.4': {} + '@lynx-js/qrcode-rsbuild-plugin@0.4.6': {} '@lynx-js/react-alias-rsbuild-plugin@0.12.10': {} - '@lynx-js/react-refresh-webpack-plugin@0.3.4(@lynx-js/react-webpack-plugin@0.7.4(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28))(@lynx-js/template-webpack-plugin@0.10.5(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1)))': + '@lynx-js/react-refresh-webpack-plugin@0.3.4(@lynx-js/react-webpack-plugin@0.7.4(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28))(@lynx-js/template-webpack-plugin@0.10.5(tslib@2.8.1)))': dependencies: - '@lynx-js/react-webpack-plugin': 0.7.4(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28))(@lynx-js/template-webpack-plugin@0.10.5(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1)) + '@lynx-js/react-webpack-plugin': 0.7.4(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28))(@lynx-js/template-webpack-plugin@0.10.5(tslib@2.8.1)) '@lynx-js/react-rsbuild-plugin@0.12.10(@lynx-js/lynx-core@0.1.3)(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28))(tslib@2.8.1)(webpack@5.105.0)': dependencies: - '@lynx-js/css-extract-webpack-plugin': 0.7.0(@lynx-js/template-webpack-plugin@0.10.5(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1))(webpack@5.105.0) + '@lynx-js/css-extract-webpack-plugin': 0.7.0(@lynx-js/template-webpack-plugin@0.10.5(tslib@2.8.1))(webpack@5.105.0) '@lynx-js/react-alias-rsbuild-plugin': 0.12.10 - '@lynx-js/react-refresh-webpack-plugin': 0.3.4(@lynx-js/react-webpack-plugin@0.7.4(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28))(@lynx-js/template-webpack-plugin@0.10.5(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1))) - '@lynx-js/react-webpack-plugin': 0.7.4(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28))(@lynx-js/template-webpack-plugin@0.10.5(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1)) + '@lynx-js/react-refresh-webpack-plugin': 0.3.4(@lynx-js/react-webpack-plugin@0.7.4(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28))(@lynx-js/template-webpack-plugin@0.10.5(tslib@2.8.1))) + '@lynx-js/react-webpack-plugin': 0.7.4(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28))(@lynx-js/template-webpack-plugin@0.10.5(tslib@2.8.1)) '@lynx-js/runtime-wrapper-webpack-plugin': 0.1.3 '@lynx-js/template-webpack-plugin': 0.10.5(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1) '@lynx-js/use-sync-external-store': 1.5.0(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28)) @@ -6816,7 +6206,7 @@ snapshots: - tslib - webpack - '@lynx-js/react-webpack-plugin@0.7.4(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28))(@lynx-js/template-webpack-plugin@0.10.5(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1))': + '@lynx-js/react-webpack-plugin@0.7.4(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28))(@lynx-js/template-webpack-plugin@0.10.5(tslib@2.8.1))': dependencies: '@lynx-js/template-webpack-plugin': 0.10.5(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1) '@lynx-js/webpack-runtime-globals': 0.0.6 @@ -6884,6 +6274,14 @@ snapshots: dependencies: '@lynx-js/react': 0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28) + '@lynx-js/web-constants@0.19.8': + dependencies: + '@lynx-js/web-worker-rpc': 0.19.8 + + '@lynx-js/web-constants@0.7.1': + dependencies: + '@lynx-js/web-worker-rpc': 0.7.1 + '@lynx-js/web-core-wasm@0.0.5(@lynx-js/css-serializer@0.1.4)(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1)': dependencies: '@lynx-js/web-elements': 0.12.0(tslib@2.8.1) @@ -6893,30 +6291,75 @@ snapshots: '@lynx-js/lynx-core': 0.1.3 tslib: 2.8.1 - '@lynx-js/web-core@0.20.4(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1)': + '@lynx-js/web-core@0.19.8(@lynx-js/lynx-core@0.1.3)(@lynx-js/web-elements@0.11.3(tslib@2.8.1))': dependencies: - '@lynx-js/web-elements': 0.12.2(tslib@2.8.1) - '@lynx-js/web-worker-rpc': 0.20.4 - wasm-feature-detect: 1.8.0 - optionalDependencies: '@lynx-js/lynx-core': 0.1.3 + '@lynx-js/offscreen-document': 0.1.4 + '@lynx-js/web-constants': 0.19.8 + '@lynx-js/web-elements': 0.11.3(tslib@2.8.1) + '@lynx-js/web-mainthread-apis': 0.19.8 + '@lynx-js/web-worker-rpc': 0.19.8 + '@lynx-js/web-worker-runtime': 0.19.8(@lynx-js/lynx-core@0.1.3) + + '@lynx-js/web-core@0.7.1(@lynx-js/web-elements@0.7.7(tslib@2.8.1))': + dependencies: + '@lynx-js/web-constants': 0.7.1 + '@lynx-js/web-elements': 0.7.7(tslib@2.8.1) + '@lynx-js/web-worker-rpc': 0.7.1 + '@lynx-js/web-worker-runtime': 0.7.1 + + '@lynx-js/web-elements-reactive@0.2.2': {} + + '@lynx-js/web-elements-template@0.7.7': {} + + '@lynx-js/web-elements@0.11.3(tslib@2.8.1)': + dependencies: tslib: 2.8.1 '@lynx-js/web-elements@0.12.0(tslib@2.8.1)': dependencies: tslib: 2.8.1 - '@lynx-js/web-elements@0.12.2(tslib@2.8.1)': + '@lynx-js/web-elements@0.7.7(tslib@2.8.1)': dependencies: - dompurify: 3.4.12 - markdown-it: 14.1.1 + '@lynx-js/web-elements-reactive': 0.2.2 + '@lynx-js/web-elements-template': 0.7.7 tslib: 2.8.1 + '@lynx-js/web-mainthread-apis@0.19.8': + dependencies: + '@lynx-js/web-constants': 0.19.8 + hyphenate-style-name: 1.1.0 + wasm-feature-detect: 1.8.0 + + '@lynx-js/web-mainthread-apis@0.7.1': + dependencies: + '@lynx-js/web-constants': 0.7.1 + '@lynx-js/web-style-transformer': 0.2.2 + css-tree: 3.2.1 + hyphenate-style-name: 1.1.0 + '@lynx-js/web-rsbuild-server-middleware@0.19.9': {} + '@lynx-js/web-style-transformer@0.2.2': {} + '@lynx-js/web-worker-rpc@0.19.8': {} - '@lynx-js/web-worker-rpc@0.20.4': {} + '@lynx-js/web-worker-rpc@0.7.1': {} + + '@lynx-js/web-worker-runtime@0.19.8(@lynx-js/lynx-core@0.1.3)': + dependencies: + '@lynx-js/lynx-core': 0.1.3 + '@lynx-js/offscreen-document': 0.1.4 + '@lynx-js/web-constants': 0.19.8 + '@lynx-js/web-mainthread-apis': 0.19.8 + '@lynx-js/web-worker-rpc': 0.19.8 + + '@lynx-js/web-worker-runtime@0.7.1': + dependencies: + '@lynx-js/web-constants': 0.7.1 + '@lynx-js/web-mainthread-apis': 0.7.1 + '@lynx-js/web-worker-rpc': 0.7.1 '@lynx-js/webpack-dev-transport@0.2.0': {} @@ -7215,16 +6658,6 @@ snapshots: transitivePeerDependencies: - webpack-hot-middleware - '@rsbuild/plugin-sass@1.5.3(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))': - dependencies: - deepmerge: 4.3.1 - loader-utils: 2.0.4 - postcss: 8.5.17 - reduce-configs: 1.1.2 - sass-embedded: 1.100.0 - optionalDependencies: - '@rsbuild/core': 2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0) - '@rsdoctor/client@1.2.3': {} '@rsdoctor/core@1.2.3(@rsbuild/core@1.7.3)(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.105.0)': @@ -7594,13 +7027,6 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/core@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - '@shikijs/core@4.0.2': dependencies: '@shikijs/primitive': 4.0.2 @@ -7662,21 +7088,11 @@ snapshots: dependencies: '@shikijs/types': 4.0.2 - '@shikijs/transformers@3.23.0': - dependencies: - '@shikijs/core': 3.23.0 - '@shikijs/types': 3.23.0 - '@shikijs/types@1.29.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - '@shikijs/types@3.23.0': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - '@shikijs/types@4.0.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 @@ -7711,202 +7127,6 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@tiptap/core@3.27.3(@tiptap/pm@3.27.3)': - dependencies: - '@tiptap/pm': 3.27.3 - - '@tiptap/extension-blockquote@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extension-bold@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extension-bubble-menu@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': - dependencies: - '@floating-ui/dom': 1.8.0 - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - '@tiptap/pm': 3.27.3 - optional: true - - '@tiptap/extension-bullet-list@3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/extension-list': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - - '@tiptap/extension-code-block@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - '@tiptap/pm': 3.27.3 - - '@tiptap/extension-code@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extension-document@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extension-dropcursor@3.27.3(@tiptap/extensions@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/extensions': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - - '@tiptap/extension-floating-menu@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': - dependencies: - '@floating-ui/dom': 1.8.0 - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - '@tiptap/pm': 3.27.3 - optional: true - - '@tiptap/extension-gapcursor@3.27.3(@tiptap/extensions@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/extensions': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - - '@tiptap/extension-hard-break@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extension-heading@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extension-horizontal-rule@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - '@tiptap/pm': 3.27.3 - - '@tiptap/extension-image@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extension-italic@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extension-link@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - '@tiptap/pm': 3.27.3 - linkifyjs: 4.3.3 - - '@tiptap/extension-list-item@3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/extension-list': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - - '@tiptap/extension-list-keymap@3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/extension-list': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - - '@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - '@tiptap/pm': 3.27.3 - - '@tiptap/extension-mention@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - '@tiptap/pm': 3.27.3 - '@tiptap/suggestion': 3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - - '@tiptap/extension-ordered-list@3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/extension-list': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - - '@tiptap/extension-paragraph@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extension-strike@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extension-text-align@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extension-text-style@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extension-text@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extension-underline@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - - '@tiptap/extensions@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - '@tiptap/pm': 3.27.3 - - '@tiptap/pm@3.27.3': - dependencies: - prosemirror-changeset: 2.4.1 - prosemirror-commands: 1.7.1 - prosemirror-dropcursor: 1.8.3 - prosemirror-gapcursor: 1.4.1 - prosemirror-history: 1.5.0 - prosemirror-inputrules: 1.5.1 - prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.11 - prosemirror-schema-list: 1.5.1 - prosemirror-state: 1.4.4 - prosemirror-tables: 1.8.5 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.42.1 - - '@tiptap/react@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - '@tiptap/pm': 3.27.3 - '@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.1 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - use-sync-external-store: 1.6.0(react@19.2.5) - optionalDependencies: - '@tiptap/extension-bubble-menu': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - '@tiptap/extension-floating-menu': 3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - transitivePeerDependencies: - - '@floating-ui/dom' - - '@tiptap/starter-kit@3.27.3': - dependencies: - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - '@tiptap/extension-blockquote': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-bold': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-bullet-list': 3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) - '@tiptap/extension-code': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-code-block': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - '@tiptap/extension-document': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-dropcursor': 3.27.3(@tiptap/extensions@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) - '@tiptap/extension-gapcursor': 3.27.3(@tiptap/extensions@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) - '@tiptap/extension-hard-break': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-heading': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-horizontal-rule': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - '@tiptap/extension-italic': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-link': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - '@tiptap/extension-list': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - '@tiptap/extension-list-item': 3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) - '@tiptap/extension-list-keymap': 3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) - '@tiptap/extension-ordered-list': 3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) - '@tiptap/extension-paragraph': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-strike': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-text': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extension-underline': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) - '@tiptap/extensions': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) - '@tiptap/pm': 3.27.3 - - '@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': - dependencies: - '@floating-ui/dom': 1.8.0 - '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) - '@tiptap/pm': 3.27.3 - '@tsconfig/node10@1.0.12': {} '@tsconfig/node12@1.0.11': {} @@ -7948,11 +7168,11 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 22.19.17 + '@types/node': 25.6.0 '@types/cors@2.8.19': dependencies: - '@types/node': 22.19.17 + '@types/node': 25.6.0 '@types/debug@4.1.13': dependencies: @@ -8001,8 +7221,6 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 - '@types/jasmine@3.10.19': {} - '@types/jest@29.5.14': dependencies: expect: 29.7.0 @@ -8034,14 +7252,6 @@ snapshots: '@types/prop-types@15.7.15': {} - '@types/react-copy-to-clipboard@5.0.7': - dependencies: - '@types/react': 18.3.28 - - '@types/react-dom@19.2.3(@types/react@19.2.14)': - dependencies: - '@types/react': 19.2.14 - '@types/react@18.3.28': dependencies: '@types/prop-types': 15.7.15 @@ -8059,18 +7269,13 @@ snapshots: dependencies: tapable: 2.3.2 - '@types/trusted-types@2.0.7': - optional: true - '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} - '@types/use-sync-external-store@0.0.6': {} - '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.17 + '@types/node': 25.6.0 '@types/yargs-parser@21.0.3': {} @@ -8085,7 +7290,7 @@ snapshots: react: 19.2.5 unhead: 2.1.13 - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -8100,7 +7305,7 @@ snapshots: std-env: 3.10.0 test-exclude: 7.0.2 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) + vitest: 3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -8116,7 +7321,7 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(jsdom@28.1.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(jsdom@28.1.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) '@vitest/expect@3.2.4': dependencies: @@ -8135,21 +7340,21 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3))': + '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) - '@vitest/mocker@4.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3))': + '@vitest/mocker@4.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) '@vitest/pretty-format@3.2.4': dependencies: @@ -8390,8 +7595,6 @@ snapshots: async-function@1.0.0: {} - async-validator@3.5.2: {} - asynckit@0.4.0: {} available-typed-arrays@1.0.7: @@ -8473,14 +7676,10 @@ snapshots: baseline-browser-mapping@2.10.19: {} - bezier-easing@2.1.0: {} - bidi-js@1.0.3: dependencies: require-from-string: 2.0.2 - big.js@5.2.2: {} - body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -8608,9 +7807,9 @@ snapshots: check-error@2.1.3: {} - chokidar@5.0.0: + chokidar@4.0.3: dependencies: - readdirp: 5.0.0 + readdirp: 4.1.2 optional: true chrome-trace-event@1.0.4: {} @@ -8619,8 +7818,6 @@ snapshots: cjs-module-lexer@1.4.3: {} - classnames@2.5.1: {} - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -8641,7 +7838,8 @@ snapshots: color-name@1.1.4: {} - colorjs.io@0.5.2: {} + colorjs.io@0.5.2: + optional: true combined-stream@1.0.8: dependencies: @@ -8655,8 +7853,6 @@ snapshots: commander@2.20.3: {} - compute-scroll-into-view@1.0.20: {} - compute-scroll-into-view@3.1.1: {} concat-map@0.0.1: {} @@ -8678,8 +7874,6 @@ snapshots: cookie@1.1.1: {} - copy-text-to-clipboard@2.2.0: {} - copy-to-clipboard@3.3.3: dependencies: toggle-selection: 1.0.6 @@ -8861,14 +8055,6 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - date-fns-tz@1.3.8(date-fns@2.30.0): - dependencies: - date-fns: 2.30.0 - - date-fns@2.30.0: - dependencies: - '@babel/runtime': 7.29.7 - dayjs@1.11.13: {} debug@2.6.9: @@ -8948,10 +8134,6 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.4.12: - optionalDependencies: - '@types/trusted-types': 2.0.7 - domutils@3.2.2: dependencies: dom-serializer: 2.0.0 @@ -8978,8 +8160,6 @@ snapshots: emoji-regex@9.2.2: {} - emojis-list@3.0.0: {} - encodeurl@1.0.2: {} engine.io-parser@5.2.3: {} @@ -8987,7 +8167,7 @@ snapshots: engine.io@6.6.6: dependencies: '@types/cors': 2.8.19 - '@types/node': 22.19.17 + '@types/node': 25.6.0 '@types/ws': 8.18.1 accepts: 1.3.8 base64id: 2.0.0 @@ -9236,12 +8416,8 @@ snapshots: extend@3.0.2: {} - fast-copy@3.0.2: {} - fast-deep-equal@3.1.3: {} - fast-equals@5.4.1: {} - fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -9606,6 +8782,8 @@ snapshots: human-signals@2.1.0: {} + hyphenate-style-name@1.1.0: {} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -9614,7 +8792,8 @@ snapshots: dependencies: safer-buffer: 2.1.2 - immutable@5.1.5: {} + immutable@5.1.5: + optional: true import-local@3.2.0: dependencies: @@ -10217,7 +9396,7 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.19.17 + '@types/node': 25.6.0 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -10325,8 +9504,6 @@ snapshots: json5@2.2.3: {} - jsonc-parser@3.3.1: {} - jsonfile@6.2.0: dependencies: universalify: 2.0.1 @@ -10347,16 +9524,8 @@ snapshots: dependencies: uc.micro: 2.1.0 - linkifyjs@4.3.3: {} - loader-runner@4.3.1: {} - loader-utils@2.0.4: - dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.3 - locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -10371,12 +9540,6 @@ snapshots: longest-streak@3.1.0: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lottie-web@5.13.0: {} - loupe@3.2.1: {} lru-cache@10.4.3: {} @@ -10603,8 +9766,6 @@ snapshots: medium-zoom@1.1.0: {} - memoize-one@5.2.1: {} - merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -10952,8 +10113,6 @@ snapshots: nanoid@3.3.11: {} - nanoid@3.3.16: {} - natural-compare@1.4.0: {} negotiator@0.6.3: {} @@ -11040,8 +10199,6 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - orderedmap@2.1.1: {} - own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -11294,12 +10451,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.17: - dependencies: - nanoid: 3.3.16 - picocolors: 1.1.1 - source-map-js: 1.2.1 - prettier@3.8.3: {} pretty-format@29.7.0: @@ -11308,95 +10459,13 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - prismjs@1.30.0: {} - prompts@2.4.2: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - property-information@7.1.0: {} - prosemirror-changeset@2.4.1: - dependencies: - prosemirror-transform: 1.12.0 - - prosemirror-commands@1.7.1: - dependencies: - prosemirror-model: 1.25.11 - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - - prosemirror-dropcursor@1.8.3: - dependencies: - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.42.1 - - prosemirror-gapcursor@1.4.1: - dependencies: - prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.11 - prosemirror-state: 1.4.4 - prosemirror-view: 1.42.1 - - prosemirror-history@1.5.0: - dependencies: - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.42.1 - rope-sequence: 1.3.4 - - prosemirror-inputrules@1.5.1: - dependencies: - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - - prosemirror-keymap@1.2.3: - dependencies: - prosemirror-state: 1.4.4 - w3c-keyname: 2.2.8 - - prosemirror-model@1.25.11: - dependencies: - orderedmap: 2.1.1 - - prosemirror-schema-list@1.5.1: - dependencies: - prosemirror-model: 1.25.11 - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - - prosemirror-state@1.4.4: - dependencies: - prosemirror-model: 1.25.11 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.42.1 - - prosemirror-tables@1.8.5: - dependencies: - prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.11 - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.42.1 - - prosemirror-transform@1.12.0: - dependencies: - prosemirror-model: 1.25.11 - - prosemirror-view@1.42.1: - dependencies: - prosemirror-model: 1.25.11 - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - proxy-from-env@2.1.0: {} punycode.js@2.3.1: {} @@ -11405,10 +10474,6 @@ snapshots: pure-rand@6.1.0: {} - qrcode.react@4.2.0(react@19.2.5): - dependencies: - react: 19.2.5 - qs@6.13.0: dependencies: side-channel: 1.1.0 @@ -11426,26 +10491,11 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - react-copy-to-clipboard@5.1.1(react@19.2.5): - dependencies: - copy-to-clipboard: 3.3.3 - prop-types: 15.8.1 - react: 19.2.5 - react-dom@19.2.5(react@19.2.5): dependencies: react: 19.2.5 scheduler: 0.27.0 - react-draggable@4.7.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5): - dependencies: - clsx: 2.1.1 - prop-types: 15.8.1 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - - react-is@16.13.1: {} - react-is@18.3.1: {} react-lazy-with-preload@2.2.1: {} @@ -11462,13 +10512,6 @@ snapshots: react: 19.2.5 react-reconciler: 0.33.0(react@19.2.5) - react-resizable@3.2.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5): - dependencies: - prop-types: 15.8.1 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - react-draggable: 4.7.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - react-router-dom@7.14.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: react: 19.2.5 @@ -11483,16 +10526,9 @@ snapshots: optionalDependencies: react-dom: 19.2.5(react@19.2.5) - react-window@1.8.11(react-dom@19.2.5(react@19.2.5))(react@19.2.5): - dependencies: - '@babel/runtime': 7.29.7 - memoize-one: 5.2.1 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - react@19.2.5: {} - readdirp@5.0.0: + readdirp@4.1.2: optional: true recma-build-jsx@1.0.0: @@ -11706,8 +10742,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.60.1 fsevents: 2.3.3 - rope-sequence@1.3.4: {} - rrweb-cssom@0.8.0: {} rslog@1.3.2: {} @@ -11719,6 +10753,7 @@ snapshots: rxjs@7.8.2: dependencies: tslib: 2.8.1 + optional: true safe-array-concat@1.1.3: dependencies: @@ -11743,65 +10778,65 @@ snapshots: safer-buffer@2.1.2: {} - sass-embedded-all-unknown@1.100.0: + sass-embedded-all-unknown@1.97.3: dependencies: - sass: 1.100.0 + sass: 1.97.3 optional: true - sass-embedded-android-arm64@1.100.0: + sass-embedded-android-arm64@1.97.3: optional: true - sass-embedded-android-arm@1.100.0: + sass-embedded-android-arm@1.97.3: optional: true - sass-embedded-android-riscv64@1.100.0: + sass-embedded-android-riscv64@1.97.3: optional: true - sass-embedded-android-x64@1.100.0: + sass-embedded-android-x64@1.97.3: optional: true - sass-embedded-darwin-arm64@1.100.0: + sass-embedded-darwin-arm64@1.97.3: optional: true - sass-embedded-darwin-x64@1.100.0: + sass-embedded-darwin-x64@1.97.3: optional: true - sass-embedded-linux-arm64@1.100.0: + sass-embedded-linux-arm64@1.97.3: optional: true - sass-embedded-linux-arm@1.100.0: + sass-embedded-linux-arm@1.97.3: optional: true - sass-embedded-linux-musl-arm64@1.100.0: + sass-embedded-linux-musl-arm64@1.97.3: optional: true - sass-embedded-linux-musl-arm@1.100.0: + sass-embedded-linux-musl-arm@1.97.3: optional: true - sass-embedded-linux-musl-riscv64@1.100.0: + sass-embedded-linux-musl-riscv64@1.97.3: optional: true - sass-embedded-linux-musl-x64@1.100.0: + sass-embedded-linux-musl-x64@1.97.3: optional: true - sass-embedded-linux-riscv64@1.100.0: + sass-embedded-linux-riscv64@1.97.3: optional: true - sass-embedded-linux-x64@1.100.0: + sass-embedded-linux-x64@1.97.3: optional: true - sass-embedded-unknown-all@1.100.0: + sass-embedded-unknown-all@1.97.3: dependencies: - sass: 1.100.0 + sass: 1.97.3 optional: true - sass-embedded-win32-arm64@1.100.0: + sass-embedded-win32-arm64@1.97.3: optional: true - sass-embedded-win32-x64@1.100.0: + sass-embedded-win32-x64@1.97.3: optional: true - sass-embedded@1.100.0: + sass-embedded@1.97.3: dependencies: '@bufbuild/protobuf': 2.11.0 colorjs.io: 0.5.2 @@ -11811,28 +10846,29 @@ snapshots: sync-child-process: 1.0.2 varint: 6.0.0 optionalDependencies: - sass-embedded-all-unknown: 1.100.0 - sass-embedded-android-arm: 1.100.0 - sass-embedded-android-arm64: 1.100.0 - sass-embedded-android-riscv64: 1.100.0 - sass-embedded-android-x64: 1.100.0 - sass-embedded-darwin-arm64: 1.100.0 - sass-embedded-darwin-x64: 1.100.0 - sass-embedded-linux-arm: 1.100.0 - sass-embedded-linux-arm64: 1.100.0 - sass-embedded-linux-musl-arm: 1.100.0 - sass-embedded-linux-musl-arm64: 1.100.0 - sass-embedded-linux-musl-riscv64: 1.100.0 - sass-embedded-linux-musl-x64: 1.100.0 - sass-embedded-linux-riscv64: 1.100.0 - sass-embedded-linux-x64: 1.100.0 - sass-embedded-unknown-all: 1.100.0 - sass-embedded-win32-arm64: 1.100.0 - sass-embedded-win32-x64: 1.100.0 - - sass@1.100.0: - dependencies: - chokidar: 5.0.0 + sass-embedded-all-unknown: 1.97.3 + sass-embedded-android-arm: 1.97.3 + sass-embedded-android-arm64: 1.97.3 + sass-embedded-android-riscv64: 1.97.3 + sass-embedded-android-x64: 1.97.3 + sass-embedded-darwin-arm64: 1.97.3 + sass-embedded-darwin-x64: 1.97.3 + sass-embedded-linux-arm: 1.97.3 + sass-embedded-linux-arm64: 1.97.3 + sass-embedded-linux-musl-arm: 1.97.3 + sass-embedded-linux-musl-arm64: 1.97.3 + sass-embedded-linux-musl-riscv64: 1.97.3 + sass-embedded-linux-musl-x64: 1.97.3 + sass-embedded-linux-riscv64: 1.97.3 + sass-embedded-linux-x64: 1.97.3 + sass-embedded-unknown-all: 1.97.3 + sass-embedded-win32-arm64: 1.97.3 + sass-embedded-win32-x64: 1.97.3 + optional: true + + sass@1.97.3: + dependencies: + chokidar: 4.0.3 immutable: 5.1.5 source-map-js: 1.2.1 optionalDependencies: @@ -11854,10 +10890,6 @@ snapshots: ajv-formats: 2.1.1(ajv@8.18.0) ajv-keywords: 5.1.0(ajv@8.18.0) - scroll-into-view-if-needed@2.2.31: - dependencies: - compute-scroll-into-view: 1.0.20 - scroll-into-view-if-needed@3.1.0: dependencies: compute-scroll-into-view: 3.1.1 @@ -12177,19 +11209,15 @@ snapshots: picocolors: 1.1.1 sax: 1.6.0 - swr@2.4.2(react@19.2.5): - dependencies: - dequal: 2.0.3 - react: 19.2.5 - use-sync-external-store: 1.6.0(react@19.2.5) - symbol-tree@3.2.4: {} sync-child-process@1.0.2: dependencies: sync-message-port: 1.2.0 + optional: true - sync-message-port@1.2.0: {} + sync-message-port@1.2.0: + optional: true tapable@2.2.2: {} @@ -12505,14 +11533,8 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - use-sync-external-store@1.6.0(react@19.2.5): - dependencies: - react: 19.2.5 - util-deprecate@1.0.2: {} - utility-types@3.11.0: {} - utils-merge@1.0.1: {} v8-compile-cache-lib@3.0.1: {} @@ -12523,7 +11545,8 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - varint@6.0.0: {} + varint@6.0.0: + optional: true vary@1.1.2: {} @@ -12542,13 +11565,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-node@3.2.4(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3): + vite-node@3.2.4(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - jiti @@ -12563,7 +11586,7 @@ snapshots: - tsx - yaml - vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3): + vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) @@ -12575,16 +11598,16 @@ snapshots: '@types/node': 25.6.0 fsevents: 2.3.3 jiti: 2.6.1 - sass: 1.100.0 - sass-embedded: 1.100.0 + sass: 1.97.3 + sass-embedded: 1.97.3 terser: 5.46.1 yaml: 2.8.3 - vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3): + vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3)) + '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -12602,8 +11625,8 @@ snapshots: tinyglobby: 0.2.16 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) - vite-node: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vite-node: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.13 @@ -12623,10 +11646,10 @@ snapshots: - tsx - yaml - vitest@4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(jsdom@28.1.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3)): + vitest@4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(jsdom@28.1.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.4 - '@vitest/mocker': 4.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3)) + '@vitest/mocker': 4.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.4 '@vitest/runner': 4.1.4 '@vitest/snapshot': 4.1.4 @@ -12643,7 +11666,7 @@ snapshots: tinyexec: 1.1.1 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.6.0 @@ -12652,12 +11675,6 @@ snapshots: transitivePeerDependencies: - msw - vscode-icons-js@11.6.1: - dependencies: - '@types/jasmine': 3.10.19 - - w3c-keyname@2.2.8: {} - w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 From 33caad9cdbd97af06a736d22746d5b37261beb76 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 03:40:48 +0000 Subject: [PATCH 07/18] =?UTF-8?q?feat:=20add=20sparkling-history=20?= =?UTF-8?q?=E2=80=94=20reusable=20history=20shim=20driving=20native=20navi?= =?UTF-8?q?gation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A framework-agnostic W3C-History-style shim that lets SPA routers (vue-router first) drive Sparkling's MPA-style native navigation: - NavigationHost contract: minimal platform API (initialUrl/open/close/ visibility) any container stack can implement - createHybridHistory: RouterHistory-compatible history per container — in-container navs behave like vue-router's memory history, boundary navs (pushExternal, go(-n) past the queue) walk the native stack - Route manifest + sparkling scheme codec: build-time file-based route table embedded in every bundle so isolated JS heaps agree on route->scheme mapping; state/depth/route ride across heaps in the URL - vue adapter: createSparklingRouter diverts cross-bundle push/replace (incl. named routes) to native opens, keeps same-bundle navs local - codegen: scans src/pages/* convention into a manifest module + rsbuild/rspeedy plugin - memory host: simulates the multi-container stack so vue-router's official memory-history suite is ported and cross-heap flows are tested with real vue-router instances (45 tests) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01ARyWgB3243gQx1exWK61Qb --- packages/sparkling-history/package.json | 66 ++++ .../src/__tests__/cross-container.spec.ts | 175 ++++++++++ .../src/__tests__/history.spec.ts | 265 ++++++++++++++++ .../src/__tests__/vue-adapter.spec.ts | 194 ++++++++++++ packages/sparkling-history/src/codec.ts | 203 ++++++++++++ .../sparkling-history/src/codegen/index.ts | 156 +++++++++ packages/sparkling-history/src/history.ts | 199 ++++++++++++ .../sparkling-history/src/hosts/memory.ts | 152 +++++++++ .../sparkling-history/src/hosts/sparkling.ts | 110 +++++++ packages/sparkling-history/src/index.ts | 34 ++ packages/sparkling-history/src/manifest.ts | 188 +++++++++++ packages/sparkling-history/src/types.ts | 191 +++++++++++ packages/sparkling-history/src/vue/index.ts | 176 +++++++++++ packages/sparkling-history/tsconfig.json | 20 ++ packages/sparkling-history/vitest.config.ts | 8 + pnpm-lock.yaml | 298 +++++++++++++++++- 16 files changed, 2430 insertions(+), 5 deletions(-) create mode 100644 packages/sparkling-history/package.json create mode 100644 packages/sparkling-history/src/__tests__/cross-container.spec.ts create mode 100644 packages/sparkling-history/src/__tests__/history.spec.ts create mode 100644 packages/sparkling-history/src/__tests__/vue-adapter.spec.ts create mode 100644 packages/sparkling-history/src/codec.ts create mode 100644 packages/sparkling-history/src/codegen/index.ts create mode 100644 packages/sparkling-history/src/history.ts create mode 100644 packages/sparkling-history/src/hosts/memory.ts create mode 100644 packages/sparkling-history/src/hosts/sparkling.ts create mode 100644 packages/sparkling-history/src/index.ts create mode 100644 packages/sparkling-history/src/manifest.ts create mode 100644 packages/sparkling-history/src/types.ts create mode 100644 packages/sparkling-history/src/vue/index.ts create mode 100644 packages/sparkling-history/tsconfig.json create mode 100644 packages/sparkling-history/vitest.config.ts diff --git a/packages/sparkling-history/package.json b/packages/sparkling-history/package.json new file mode 100644 index 00000000..ecd9fc6e --- /dev/null +++ b/packages/sparkling-history/package.json @@ -0,0 +1,66 @@ +{ + "name": "sparkling-history", + "version": "0.1.0", + "description": "W3C-History-style navigation shim that lets SPA routers (e.g. vue-router) drive MPA-style native navigation on Sparkling / Lynx", + "homepage": "https://tiktok.github.io/sparkling/", + "repository": { + "type": "git", + "url": "https://github.com/tiktok/sparkling", + "directory": "packages/sparkling-history" + }, + "main": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "./sparkling": { + "types": "./dist/hosts/sparkling.d.ts", + "default": "./dist/hosts/sparkling.js" + }, + "./vue": { + "types": "./dist/vue/index.d.ts", + "default": "./dist/vue/index.js" + }, + "./codegen": { + "types": "./dist/codegen/index.d.ts", + "default": "./dist/codegen/index.js" + } + }, + "typesVersions": { + "*": { + "sparkling": ["dist/hosts/sparkling.d.ts"], + "vue": ["dist/vue/index.d.ts"], + "codegen": ["dist/codegen/index.d.ts"] + } + }, + "files": [ + "dist", + "README.md" + ], + "scripts": { + "build": "tsc", + "test": "vitest run" + }, + "dependencies": { + "sparkling-navigation": "workspace:*" + }, + "peerDependencies": { + "vue-router": ">=4.4.0" + }, + "peerDependenciesMeta": { + "vue-router": { + "optional": true + } + }, + "devDependencies": { + "@lynx-js/types": "3.7.0", + "@types/node": "^22.15.3", + "typescript": "^5.8.3", + "vitest": "^3.1.2", + "vue": "^3.5.13", + "vue-router": "^4.5.1" + }, + "license": "Apache-2.0" +} diff --git a/packages/sparkling-history/src/__tests__/cross-container.spec.ts b/packages/sparkling-history/src/__tests__/cross-container.spec.ts new file mode 100644 index 00000000..0e581d3b --- /dev/null +++ b/packages/sparkling-history/src/__tests__/cross-container.spec.ts @@ -0,0 +1,175 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +/** + * Cross-container (MPA) behavior: each container is a separate JS heap in + * production. The memory environment simulates the native stack; a fresh + * HybridHistory is created per container from nothing but its URL — the + * same constraint real heaps have. + */ + +import { describe, expect, it, vi } from 'vitest' +import { createHybridHistory } from '../history' +import { createSparklingSchemeCodec } from '../codec' +import { defineRouteManifest } from '../manifest' +import { + createMemoryNavigationEnvironment, + type SimulatedContainer, +} from '../hosts/memory' + +const manifest = defineRouteManifest({ + pages: [ + { bundle: 'main', routes: ['/'] }, + { bundle: 'detail', routes: [{ path: '/detail/:id', name: 'detail' }] }, + { bundle: 'settings', routes: ['/settings', '/settings/about'], params: { hide_nav_bar: true } }, + ], +}) +const codec = createSparklingSchemeCodec(manifest) + +function historyFor(container: SimulatedContainer) { + return createHybridHistory({ host: container.host, codec }) +} + +describe('cross-container navigation', () => { + it('pushExternal stacks a new container without touching local history', async () => { + const env = createMemoryNavigationEnvironment() + const root = env.open(codec.encode('/', { depth: 0 })!) + const history = historyFor(root) + + await history.pushExternal('/detail/42') + + // native stack grew... + expect(env.stack).toHaveLength(2) + // ...but the opener's local history did not move (MPA semantics) + expect(history.location).toBe('/') + + // the new heap reconstructs its history purely from its URL + const detailHistory = historyFor(env.top!) + expect(detailHistory.location).toBe('/detail/42') + expect(detailHistory.depth).toBe(1) + expect(detailHistory.bundle).toBe('detail') + }) + + it('passes history state across heaps through the URL', async () => { + const env = createMemoryNavigationEnvironment() + const root = env.open(codec.encode('/', { depth: 0 })!) + const history = historyFor(root) + + await history.pushExternal('/detail/1', { from: 'home', count: 2 }) + + const detailHistory = historyFor(env.top!) + expect(detailHistory.state).toEqual({ from: 'home', count: 2 }) + }) + + it('pushExternal with replace swaps the current container', async () => { + const env = createMemoryNavigationEnvironment() + env.open(codec.encode('/', { depth: 0 })!) + const second = env.open(codec.encode('/settings', { depth: 1 })!) + const history = historyFor(second) + + await history.pushExternal('/detail/9', undefined, { replace: true }) + + expect(env.stack).toHaveLength(2) + const replacedHistory = historyFor(env.top!) + expect(replacedHistory.location).toBe('/detail/9') + // replace keeps the depth of the replaced container + expect(replacedHistory.depth).toBe(1) + }) + + it('rejects pushExternal for routes no page owns', async () => { + const env = createMemoryNavigationEnvironment() + const root = env.open(codec.encode('/', { depth: 0 })!) + const history = historyFor(root) + + await expect(history.pushExternal('/nowhere')).rejects.toThrow( + /no page in the route manifest owns/ + ) + expect(env.stack).toHaveLength(1) + }) + + it('go(-n) crossing the boundary pops native containers', async () => { + const env = createMemoryNavigationEnvironment() + const root = env.open(codec.encode('/', { depth: 0 })!) + await historyFor(root).pushExternal('/settings') + const settings = env.top! + const settingsHistory = historyFor(settings) + + // two local entries + the container itself + settingsHistory.push('/settings/about') + expect(settingsHistory.location).toBe('/settings/about') + + // -1 consumed locally, remaining -1 pops the container + settingsHistory.go(-2) + expect(env.stack).toHaveLength(1) + expect(env.top!).toBe(root) + }) + + it('restore fires when a covering container closes (pageshow-like)', async () => { + const env = createMemoryNavigationEnvironment() + const root = env.open(codec.encode('/', { depth: 0 })!) + const rootHistory = historyFor(root) + + const restoreSpy = vi.fn() + rootHistory.onRestore(restoreSpy) + + await rootHistory.pushExternal('/detail/1') + expect(restoreSpy).toHaveBeenCalledWith({ visible: false }) + + const detailHistory = historyFor(env.top!) + detailHistory.go(-1) // closes the detail container + + expect(restoreSpy).toHaveBeenLastCalledWith({ visible: true }) + // the revealed container's own location never changed — no popstate, + // matching browser MPA semantics (bfcache restore fires pageshow) + expect(rootHistory.location).toBe('/') + }) +}) + +describe('scheme codec', () => { + it('encodes owned routes with bundle + route + depth', () => { + const url = codec.encode('/detail/42?tab=posts#bio', { depth: 3 })! + expect(url).toContain('bundle=detail.lynx.bundle') + expect(url).toContain('__hs_depth=3') + expect(url).toContain(encodeURIComponent('/detail/42?tab=posts#bio')) + }) + + it('appends per-page container params from the manifest', () => { + const url = codec.encode('/settings')! + expect(url).toContain('hide_nav_bar=true') + }) + + it('returns null for unowned routes', () => { + expect(codec.encode('/nope')).toBeNull() + expect(codec.ownerOf('/nope')).toBeNull() + }) + + it('round-trips locations losslessly', () => { + const location = '/detail/hello%20world?q=a%26b#frag' + const decoded = codec.decode(codec.encode(location, { depth: 1 })!) + expect(decoded?.location).toBe(location) + expect(decoded?.depth).toBe(1) + }) + + it('decodes plain deeplinks to the page default route with extras', () => { + const decoded = codec.decode( + 'hybrid://lynxview_page?bundle=settings.lynx.bundle&ref=push&title=Settings' + ) + // `title` is a reserved container param; `ref` forwards to the route + expect(decoded?.location).toBe('/settings?ref=push') + expect(decoded?.bundle).toBe('settings') + }) + + it('decodes dev-server url= deeplinks', () => { + const decoded = codec.decode( + 'hybrid://lynxview_page?url=http%3A%2F%2Flocalhost%3A5969%2Fdetail.lynx.bundle' + ) + expect(decoded?.bundle).toBe('detail') + // dynamic-only page has no static default: falls back to '/' + expect(decoded?.location).toBe('/') + }) + + it('returns null for undecodable urls', () => { + expect(codec.decode('hybrid://lynxview_page?foo=1')).toBeNull() + }) +}) diff --git a/packages/sparkling-history/src/__tests__/history.spec.ts b/packages/sparkling-history/src/__tests__/history.spec.ts new file mode 100644 index 00000000..52c526a3 --- /dev/null +++ b/packages/sparkling-history/src/__tests__/history.spec.ts @@ -0,0 +1,265 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +/** + * In-container history behavior. + * + * Ported from vue-router's official memory-history suite + * (vuejs/router `packages/router/__tests__/history/memory.spec.ts`) — + * within a container, HybridHistory must behave exactly like vue-router's + * `createMemoryHistory`. Cases that cross the container boundary (where the + * two histories intentionally diverge) are covered in `cross-container.spec.ts`. + */ + +import { describe, expect, it, vi } from 'vitest' +import { createHybridHistory } from '../history' +import { createSparklingSchemeCodec, ROUTE_PARAM } from '../codec' +import { defineRouteManifest } from '../manifest' +import { createMemoryNavigationEnvironment } from '../hosts/memory' +import type { HistoryLocation, HybridRouterHistory } from '../types' + +const loc: HistoryLocation = '/foo' +const loc2: HistoryLocation = '/bar' + +const manifest = defineRouteManifest({ + pages: [ + { bundle: 'main', routes: ['/', '/foo', '/bar', '/somewhere', '/other', '/1', '/2', '/3', '/4', '/5'] }, + ], +}) +const codec = createSparklingSchemeCodec(manifest) + +/** START equivalent: a hybrid history starts at its container's route. */ +const START: HistoryLocation = '/' + +function createHistory(base?: string): HybridRouterHistory { + const env = createMemoryNavigationEnvironment() + const container = env.open(codec.encode(START, { depth: 0 })!) + return createHybridHistory({ host: container.host, codec, base }) +} + +describe('Hybrid history (in-container, ported from memory history)', () => { + it('starts at the container route', () => { + const history = createHistory() + expect(history.location).toEqual(START) + }) + + it('can push a location', () => { + const history = createHistory() + history.push('/somewhere?foo=foo#hey') + expect(history.location).toEqual('/somewhere?foo=foo#hey') + }) + + it('can replace a location', () => { + const history = createHistory() + history.replace('/somewhere?foo=foo#hey') + expect(history.location).toEqual('/somewhere?foo=foo#hey') + }) + + it('does not trigger listeners with push', () => { + const history = createHistory() + const spy = vi.fn() + history.listen(spy) + history.push(loc) + expect(spy).not.toHaveBeenCalled() + }) + + it('does not trigger listeners with replace', () => { + const history = createHistory() + const spy = vi.fn() + history.listen(spy) + history.replace(loc) + expect(spy).not.toHaveBeenCalled() + }) + + it('can go back', () => { + const history = createHistory() + history.push(loc) + history.push(loc2) + history.go(-1) + expect(history.location).toEqual(loc) + history.go(-1) + expect(history.location).toEqual(START) + }) + + it('stores a state', () => { + const history = createHistory() + history.push(loc, { foo: 'bar' }) + expect(history.state).toEqual({ foo: 'bar' }) + history.push(loc, { foo: 'baz' }) + expect(history.state).toEqual({ foo: 'baz' }) + history.go(-1) + expect(history.state).toEqual({ foo: 'bar' }) + }) + + it('does nothing with forward if at end of log', () => { + const history = createHistory() + history.go(1) + expect(history.location).toEqual(START) + }) + + it('can moves back and forth in history queue', () => { + const history = createHistory() + history.push(loc) + history.push(loc2) + history.go(-1) + history.go(-1) + expect(history.location).toEqual(START) + history.go(1) + expect(history.location).toEqual(loc) + history.go(1) + expect(history.location).toEqual(loc2) + }) + + it('can push in the middle of the history', () => { + const history = createHistory() + history.push(loc) + history.push(loc2) + history.go(-1) + history.go(-1) + expect(history.location).toEqual(START) + history.push(loc2) + expect(history.location).toEqual(loc2) + // does nothing + history.go(1) + expect(history.location).toEqual(loc2) + }) + + it('can listen to navigations', () => { + const history = createHistory() + const spy = vi.fn() + history.listen(spy) + history.push(loc) + history.go(-1) + expect(spy).toHaveBeenCalledTimes(1) + expect(spy).toHaveBeenCalledWith(START, loc, { + direction: 'back', + delta: -1, + type: 'pop', + }) + history.go(1) + expect(spy).toHaveBeenCalledTimes(2) + expect(spy).toHaveBeenLastCalledWith(loc, START, { + direction: 'forward', + delta: 1, + type: 'pop', + }) + }) + + it('can stop listening to navigation', () => { + const history = createHistory() + const spy = vi.fn() + const spy2 = vi.fn() + // remove right away + history.listen(spy)() + const remove = history.listen(spy2) + history.push(loc) + history.go(-1) + expect(spy).not.toHaveBeenCalled() + expect(spy2).toHaveBeenCalledTimes(1) + remove() + history.go(1) + expect(spy).not.toHaveBeenCalled() + expect(spy2).toHaveBeenCalledTimes(1) + }) + + it('removing the same listener is a noop', () => { + const history = createHistory() + const spy = vi.fn() + const spy2 = vi.fn() + const rem = history.listen(spy) + const rem2 = history.listen(spy2) + rem() + rem() + history.push(loc) + history.go(-1) + expect(spy).not.toHaveBeenCalled() + expect(spy2).toHaveBeenCalledTimes(1) + rem2() + rem2() + history.go(1) + expect(spy).not.toHaveBeenCalled() + expect(spy2).toHaveBeenCalledTimes(1) + }) + + it('removes all listeners with destroy', () => { + const history = createHistory() + history.push('/other') + const spy = vi.fn() + history.listen(spy) + history.destroy() + history.push('/2') + history.go(-1) + expect(spy).not.toHaveBeenCalled() + }) + + it('can be reused after destroy', () => { + const history = createHistory() + history.push('/1') + history.push('/2') + history.push('/3') + history.go(-1) + + expect(history.location).toBe('/2') + history.destroy() + history.go(-1) + expect(history.location).toBe(START) + history.push('/4') + history.push('/5') + expect(history.location).toBe('/5') + history.go(-1) + expect(history.location).toBe('/4') + }) + + it('can avoid listeners with back and forward', () => { + const history = createHistory() + const spy = vi.fn() + history.listen(spy) + history.push(loc) + history.go(-1, false) + expect(spy).not.toHaveBeenCalled() + history.go(1, false) + expect(spy).not.toHaveBeenCalled() + }) + + it('handles a non-empty base', () => { + expect(createHistory('/foo/').base).toBe('/foo') + expect(createHistory('/foo').base).toBe('/foo') + }) + + // ── Intentional divergences from memory history ────────────────────── + // In vue-router's memory history, going back past the start of the queue + // clamps. A hybrid container instead pops the NATIVE stack: back on the + // first entry closes the container, like the system back button. + + it('going back past the queue start closes the container', () => { + const env = createMemoryNavigationEnvironment() + const container = env.open(codec.encode(START, { depth: 0 })!) + const history = createHybridHistory({ host: container.host, codec }) + expect(env.stack).toHaveLength(1) + history.go(-1) + expect(env.stack).toHaveLength(0) + }) + + it('restores initial state from the initial url', () => { + const env = createMemoryNavigationEnvironment() + const url = codec.encode('/foo', { depth: 2, state: { fromPrev: 1 } })! + const container = env.open(url) + const history = createHybridHistory({ host: container.host, codec }) + expect(history.location).toBe('/foo') + expect(history.state).toEqual({ fromPrev: 1 }) + expect(history.depth).toBe(2) + }) + + it('createHref produces a scheme for owned routes', () => { + const history = createHistory() + const href = history.createHref('/foo') + expect(href).toContain('bundle=main.lynx.bundle') + expect(href).toContain(`${ROUTE_PARAM}=${encodeURIComponent('/foo')}`) + }) + + it('createHref falls back to base + path for unowned routes', () => { + const history = createHistory('/base') + expect(history.createHref('/not-in-manifest')).toBe('/base/not-in-manifest') + }) +}) diff --git a/packages/sparkling-history/src/__tests__/vue-adapter.spec.ts b/packages/sparkling-history/src/__tests__/vue-adapter.spec.ts new file mode 100644 index 00000000..5c8e57b2 --- /dev/null +++ b/packages/sparkling-history/src/__tests__/vue-adapter.spec.ts @@ -0,0 +1,194 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +/** + * Real vue-router instances driving the shim: one Router per simulated + * container, exactly how one Router lives in each Lynx heap in production. + */ + +import { describe, expect, it, vi } from 'vitest' +import { defineComponent } from 'vue' +import { createSparklingRouter } from '../vue' +import { createHybridHistory } from '../history' +import { createSparklingSchemeCodec } from '../codec' +import { defineRouteManifest } from '../manifest' +import { + createMemoryNavigationEnvironment, + type MemoryNavigationEnvironment, + type SimulatedContainer, +} from '../hosts/memory' + +const Page = defineComponent({ template: '

' }) + +const manifest = defineRouteManifest({ + pages: [ + { bundle: 'main', routes: ['/', '/main/nested'] }, + { bundle: 'detail', routes: [{ path: '/detail/:id', name: 'detail' }] }, + { bundle: 'settings', routes: ['/settings'] }, + ], +}) +const codec = createSparklingSchemeCodec(manifest) + +/** Boot a router inside a container, like a page bundle would on startup. */ +async function bootRouter( + container: SimulatedContainer, + routes: Parameters[0]['routes'] +) { + const history = createHybridHistory({ host: container.host, codec }) + const router = createSparklingRouter({ manifest, history, routes }) + await router.push(history.location) // initial navigation (install does this) + return router +} + +const mainRoutes = [ + { path: '/', component: Page }, + { path: '/main/nested', component: Page }, +] +const detailRoutes = [{ path: '/detail/:id', name: 'detail', component: Page }] + +function openRoot(env: MemoryNavigationEnvironment) { + return env.open(codec.encode('/', { depth: 0 })!) +} + +describe('createSparklingRouter', () => { + it('keeps same-bundle navigation local (SPA within the container)', async () => { + const env = createMemoryNavigationEnvironment() + const router = await bootRouter(openRoot(env), mainRoutes) + + await router.push('/main/nested') + + expect(router.currentRoute.value.fullPath).toBe('/main/nested') + expect(env.stack).toHaveLength(1) // no native navigation happened + }) + + it('runs guards for local navigations', async () => { + const env = createMemoryNavigationEnvironment() + const router = await bootRouter(openRoot(env), mainRoutes) + + const guard = vi.fn(() => true) + router.beforeEach(guard) + await router.push('/main/nested') + + expect(guard).toHaveBeenCalledTimes(1) + }) + + it('diverts cross-bundle push to a native open', async () => { + const env = createMemoryNavigationEnvironment() + const router = await bootRouter(openRoot(env), mainRoutes) + + await router.push('/detail/42') + + expect(env.stack).toHaveLength(2) + // the opener's route did NOT change: the page stays alive underneath + expect(router.currentRoute.value.fullPath).toBe('/') + }) + + it('does not run local guards for cross-bundle navigations (MPA semantics)', async () => { + const env = createMemoryNavigationEnvironment() + const router = await bootRouter(openRoot(env), mainRoutes) + + const guard = vi.fn(() => true) + router.beforeEach(guard) + await router.push('/detail/42') + + expect(guard).not.toHaveBeenCalled() + }) + + it('boots the target page router at the pushed route, running ITS guards', async () => { + const env = createMemoryNavigationEnvironment() + const mainRouter = await bootRouter(openRoot(env), mainRoutes) + await mainRouter.push('/detail/42?tab=posts') + + // ── new heap ── + const detailContainer = env.top! + const detailHistory = createHybridHistory({ + host: detailContainer.host, + codec, + }) + const detailRouter = createSparklingRouter({ + manifest, + history: detailHistory, + routes: detailRoutes, + }) + const guard = vi.fn(() => true) + detailRouter.beforeEach(guard) + await detailRouter.push(detailHistory.location) + + expect(detailRouter.currentRoute.value.fullPath).toBe('/detail/42?tab=posts') + expect(detailRouter.currentRoute.value.params.id).toBe('42') + expect(guard).toHaveBeenCalledTimes(1) + }) + + it('supports cross-bundle named routes via the manifest', async () => { + const env = createMemoryNavigationEnvironment() + const router = await bootRouter(openRoot(env), mainRoutes) + + await router.push({ name: 'detail', params: { id: '7' }, query: { ref: 'home' } }) + + expect(env.stack).toHaveLength(2) + const detailHistory = createHybridHistory({ host: env.top!.host, codec }) + expect(detailHistory.location).toBe('/detail/7?ref=home') + }) + + it('replace() swaps the native container for cross-bundle targets', async () => { + const env = createMemoryNavigationEnvironment() + openRoot(env) + const settings = env.open(codec.encode('/settings', { depth: 1 })!) + const router = await bootRouter(settings, [ + { path: '/settings', component: Page }, + ]) + + await router.replace('/detail/1') + + expect(env.stack).toHaveLength(2) + const top = createHybridHistory({ host: env.top!.host, codec }) + expect(top.location).toBe('/detail/1') + expect(top.depth).toBe(1) + }) + + it('passes navigation state to the next heap', async () => { + const env = createMemoryNavigationEnvironment() + const router = await bootRouter(openRoot(env), mainRoutes) + + await router.push({ path: '/detail/1', state: { fromList: true } }) + + const detailHistory = createHybridHistory({ host: env.top!.host, codec }) + expect(detailHistory.state).toEqual({ fromList: true }) + }) + + it('router.back() beyond local history closes the container', async () => { + const env = createMemoryNavigationEnvironment() + openRoot(env) + const detail = env.open(codec.encode('/detail/5', { depth: 1 })!) + const router = await bootRouter(detail, detailRoutes) + + router.back() + + expect(env.stack).toHaveLength(1) + }) + + it('exposes the hybrid history for restore hooks', async () => { + const env = createMemoryNavigationEnvironment() + const router = await bootRouter(openRoot(env), mainRoutes) + + const restore = vi.fn() + router.hybridHistory.onRestore(restore) + + await router.push('/detail/1') + expect(restore).toHaveBeenCalledWith({ visible: false }) + + const detailHistory = createHybridHistory({ host: env.top!.host, codec }) + detailHistory.go(-1) + expect(restore).toHaveBeenLastCalledWith({ visible: true }) + }) + + it('rejects unknown named routes with vue-router error (not a native open)', async () => { + const env = createMemoryNavigationEnvironment() + const router = await bootRouter(openRoot(env), mainRoutes) + + // vue-router throws synchronously for unresolvable names + expect(() => router.push({ name: 'does-not-exist' })).toThrow(/No match/) + expect(env.stack).toHaveLength(1) + }) +}) diff --git a/packages/sparkling-history/src/codec.ts b/packages/sparkling-history/src/codec.ts new file mode 100644 index 00000000..d06bd093 --- /dev/null +++ b/packages/sparkling-history/src/codec.ts @@ -0,0 +1,203 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +import type { + DecodedLocation, + HistoryLocation, + HistoryState, + SchemeCodec, +} from './types' +import { + defaultLocationOf, + findOwner, + type RouteManifest, +} from './manifest' + +export const DEFAULT_SCHEME = 'hybrid://lynxview_page' + +/** Reserved scheme params carrying router coordinates across heaps. */ +export const ROUTE_PARAM = '__hs_route' +export const STATE_PARAM = '__hs_state' +export const DEPTH_PARAM = '__hs_depth' + +/** + * Container/loader params that must never leak into a decoded route's query. + * (Sparkling container params like `title` stay out of the route location.) + */ +const RESERVED_PARAMS = new Set([ + ROUTE_PARAM, + STATE_PARAM, + DEPTH_PARAM, + 'bundle', + 'url', + 'containerInitTime', + 'fullscreen', + 'title', + 'title_color', + 'hide_nav_bar', + 'nav_bar_color', + 'screen_orientation', + 'hide_status_bar', + 'trans_status_bar', + 'show_nav_bar_in_trans_status_bar', + 'hide_loading', + 'loading_bg_color', + 'container_bg_color', + 'hide_error', + 'force_theme_style', + 'status_font_mode', + 'hide_back_button', +]) + +function pathOf(location: HistoryLocation): string { + const stop = Math.min( + ...['?', '#'] + .map(c => location.indexOf(c)) + .filter(i => i >= 0) + .concat(location.length) + ) + return location.slice(0, stop) +} + +/** Tiny query parser: no URL/URLSearchParams dependency, `%20`-style only. */ +export function parseQuery(url: string): Record { + const result: Record = {} + const qIndex = url.indexOf('?') + if (qIndex < 0) return result + const hashIndex = url.indexOf('#', qIndex) + const query = url.slice(qIndex + 1, hashIndex < 0 ? undefined : hashIndex) + for (const pair of query.split('&')) { + if (!pair) continue + const eq = pair.indexOf('=') + const key = eq < 0 ? pair : pair.slice(0, eq) + const value = eq < 0 ? '' : pair.slice(eq + 1) + try { + result[decodeURIComponent(key)] = decodeURIComponent(value) + } catch { + result[key] = value + } + } + return result +} + +export interface SparklingCodecOptions { + /** + * Suffix appended to the bundle name in generated schemes. + * Default `.lynx.bundle` (rspeedy's `[name].lynx.bundle` convention). + */ + bundleSuffix?: string +} + +/** + * Codec between router locations and sparkling schemes. + * + * Encoding: `/detail/42?tab=a` (owned by page `detail`) becomes + * `hybrid://lynxview_page?bundle=detail.lynx.bundle&__hs_route=%2Fdetail%2F42%3Ftab%3Da&__hs_depth=1` + * + * The full router location rides along in `__hs_route`, so the target heap + * recovers it losslessly without reverse-templating path params. `bundle=` + * tells the native/web container loader what to load — in dev mode + * sparkling-navigation rewrites it to `url=` targeting the dev server. + * + * Decoding accepts both freshly-encoded schemes and plain deeplinks + * (`?bundle=detail.lynx.bundle&id=42` → the page's default route with + * non-reserved params appended as query). + */ +export function createSparklingSchemeCodec( + manifest: RouteManifest, + options: SparklingCodecOptions = {} +): SchemeCodec { + const scheme = (manifest.scheme ?? DEFAULT_SCHEME).replace(/[?&]+$/, '') + const bundleSuffix = options.bundleSuffix ?? '.lynx.bundle' + + function ownerOf(to: HistoryLocation): string | null { + const owner = findOwner(manifest, pathOf(to)) + return owner ? owner.page.bundle : null + } + + function encode( + to: HistoryLocation, + context: { state?: HistoryState; depth?: number } = {} + ): string | null { + const owner = findOwner(manifest, pathOf(to)) + if (!owner) return null + + const parts: string[] = [ + `bundle=${encodeURIComponent(owner.page.bundle + bundleSuffix)}`, + `${ROUTE_PARAM}=${encodeURIComponent(to)}`, + `${DEPTH_PARAM}=${context.depth ?? 0}`, + ] + if (context.state !== undefined) { + parts.push(`${STATE_PARAM}=${encodeURIComponent(JSON.stringify(context.state))}`) + } + for (const [key, value] of Object.entries(owner.page.params ?? {})) { + parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`) + } + return `${scheme}?${parts.join('&')}` + } + + function decode(url: string): DecodedLocation | null { + const query = parseQuery(url) + + const depth = Number.parseInt(query[DEPTH_PARAM] ?? '0', 10) || 0 + + let state: HistoryState | undefined + if (query[STATE_PARAM]) { + try { + state = JSON.parse(query[STATE_PARAM]) as HistoryState + } catch { + state = undefined + } + } + + const bundleName = bundleNameFrom(query, bundleSuffix) + + if (query[ROUTE_PARAM]) { + return { + location: query[ROUTE_PARAM], + state, + depth, + bundle: bundleName ?? undefined, + } + } + + // Plain deeplink: derive the page from bundle= / url= and use its + // default route, forwarding non-reserved params as query. + if (!bundleName) return null + const page = manifest.pages.find(p => p.bundle === bundleName) + if (!page) return null + + const extras = Object.entries(query) + .filter(([key]) => !RESERVED_PARAMS.has(key)) + .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) + + let location = defaultLocationOf(page) + if (extras.length) { + location += (location.includes('?') ? '&' : '?') + extras.join('&') + } + return { location, state, depth, bundle: bundleName } + } + + return { encode, decode, ownerOf } +} + +function bundleNameFrom( + query: Record, + bundleSuffix: string +): string | null { + const strip = (name: string) => { + const base = name.split('/').filter(Boolean).pop() ?? '' + return base.endsWith(bundleSuffix) + ? base.slice(0, -bundleSuffix.length) + : base + } + if (query.bundle) return strip(query.bundle) || null + if (query.url) { + // dev server URL, e.g. http://localhost:5969/detail.lynx.bundle + const noProto = query.url.replace(/^[a-z][a-z0-9+.-]*:\/\//i, '') + const path = noProto.slice(noProto.indexOf('/') + 1).split(/[?#]/)[0] ?? '' + return strip(path) || null + } + return null +} diff --git a/packages/sparkling-history/src/codegen/index.ts b/packages/sparkling-history/src/codegen/index.ts new file mode 100644 index 00000000..b4f4757a --- /dev/null +++ b/packages/sparkling-history/src/codegen/index.ts @@ -0,0 +1,156 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +/** + * Build-time route-manifest generation (Node-only). + * + * Sparkling pages live in different JS heaps, so the route table connecting + * them must be established AHEAD of time and embedded into every bundle. + * This module derives that table from the file-based page convention: + * + * src/pages//index.* → page bundle "" + * src/pages//routes.json → routes owned by the page (optional) + * + * Without `routes.json`, a page owns a single conventional route: + * `/` for root pages (`main`/`index`/`home` by default), `/` otherwise. + * + * `routes.json` shape (all fields optional except `routes`): + * ```json + * { + * "routes": ["/detail/:id", { "path": "/detail/:id/edit", "name": "edit" }], + * "default": "/detail/1", + * "params": { "hide_nav_bar": true } + * } + * ``` + */ + +import fs from 'node:fs' +import path from 'node:path' +import type { + RouteManifest, + RouteManifestPage, + RouteManifestRoute, +} from '../manifest' + +export interface ScanPagesOptions { + /** Directory containing one sub-directory per page (e.g. `src/pages`). */ + pagesDir: string + /** Base scheme recorded in the manifest. */ + scheme?: string + /** Per-page route config file name. Default `routes.json`. */ + configFile?: string + /** Page names whose conventional route is `/`. Default main/index/home. */ + rootPages?: string[] +} + +interface PageRoutesConfig { + routes?: RouteManifestRoute[] + default?: string + params?: Record +} + +export function scanPages(options: ScanPagesOptions): RouteManifest { + const configFile = options.configFile ?? 'routes.json' + const rootPages = options.rootPages ?? ['main', 'index', 'home'] + + if (!fs.existsSync(options.pagesDir)) { + throw new Error( + `[sparkling-history] pagesDir does not exist: ${options.pagesDir}` + ) + } + + const pages: RouteManifestPage[] = [] + const entries = fs + .readdirSync(options.pagesDir, { withFileTypes: true }) + .filter(entry => entry.isDirectory()) + .sort((a, b) => a.name.localeCompare(b.name)) + + for (const entry of entries) { + const pageDir = path.join(options.pagesDir, entry.name) + const configPath = path.join(pageDir, configFile) + + let config: PageRoutesConfig = {} + if (fs.existsSync(configPath)) { + const raw = JSON.parse(fs.readFileSync(configPath, 'utf8')) as + | PageRoutesConfig + | RouteManifestRoute[] + config = Array.isArray(raw) ? { routes: raw } : raw + } + + const conventionalRoute = rootPages.includes(entry.name) + ? '/' + : `/${entry.name}` + + pages.push({ + bundle: entry.name, + routes: config.routes?.length ? config.routes : [conventionalRoute], + ...(config.default ? { default: config.default } : {}), + ...(config.params ? { params: config.params } : {}), + }) + } + + return { + ...(options.scheme ? { scheme: options.scheme } : {}), + pages, + } +} + +/** Render a manifest as an importable TypeScript module. */ +export function renderManifestModule(manifest: RouteManifest): string { + return [ + '// AUTO-GENERATED by sparkling-history/codegen — DO NOT EDIT.', + "import { defineRouteManifest } from 'sparkling-history'", + '', + `export default defineRouteManifest(${JSON.stringify(manifest, null, 2)})`, + '', + ].join('\n') +} + +export interface GenerateRouteManifestOptions extends ScanPagesOptions { + /** Path of the generated module (e.g. `src/generated/route-manifest.ts`). */ + outFile: string +} + +/** + * Scan pages and write the manifest module. Skips the write when content is + * unchanged so watch-mode builds don't loop. + */ +export function generateRouteManifest( + options: GenerateRouteManifestOptions +): RouteManifest { + const manifest = scanPages(options) + const content = renderManifestModule(manifest) + const current = fs.existsSync(options.outFile) + ? fs.readFileSync(options.outFile, 'utf8') + : null + if (current !== content) { + fs.mkdirSync(path.dirname(options.outFile), { recursive: true }) + fs.writeFileSync(options.outFile, content) + } + return manifest +} + +/** + * Minimal rsbuild/rspeedy plugin: regenerates the manifest before builds and + * dev-server startup, so `src/pages/**` stays the single source of truth. + */ +export function pluginRouteManifest(options: GenerateRouteManifestOptions): { + name: string + setup(api: { + onBeforeBuild?: (fn: () => void) => void + onBeforeStartDevServer?: (fn: () => void) => void + }): void +} { + return { + name: 'sparkling-history:route-manifest', + setup(api) { + const regenerate = () => { + generateRouteManifest(options) + } + regenerate() + api.onBeforeBuild?.(regenerate) + api.onBeforeStartDevServer?.(regenerate) + }, + } +} diff --git a/packages/sparkling-history/src/history.ts b/packages/sparkling-history/src/history.ts new file mode 100644 index 00000000..36d7da30 --- /dev/null +++ b/packages/sparkling-history/src/history.ts @@ -0,0 +1,199 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +import type { + HistoryLocation, + HistoryState, + HybridRouterHistory, + NavigationCallback, + NavigationDirection, + NavigationHost, + NavigationInformation, + SchemeCodec, +} from './types' + +export interface HybridHistoryOptions { + host: NavigationHost + codec: SchemeCodec + /** + * Base prepended to hrefs of locations no page owns. Kept for + * RouterHistory compatibility; sparkling schemes ignore it. Default `''`. + */ + base?: string + /** Fallback location when the initial URL cannot be decoded. Default `/`. */ + fallbackLocation?: HistoryLocation +} + +/** + * A history for one container (one JS heap) of an MPA-style hybrid app. + * + * Within the container it behaves like vue-router's memory history — pushes + * and replaces mutate a local queue, `go()` walks it and notifies listeners + * (the `popstate` equivalent). At the container boundary it delegates to the + * {@link NavigationHost}: + * + * - `pushExternal()` opens ANOTHER container via the host (native push) + * - `go(-n)` beyond the local queue pops native containers via `host.close` + * - the initial location/state/depth are decoded from `host.initialUrl`, + * which is how a fresh heap joins a navigation session it shares with + * other heaps only through URLs. + */ +export function createHybridHistory( + options: HybridHistoryOptions +): HybridRouterHistory { + const { host, codec } = options + // normalize like vue-router: no trailing slash, so `base + fullPath` works + const base = (options.base ?? '').replace(/\/+$/, '') + + const decoded = codec.decode(host.initialUrl) + const initialLocation = + decoded?.location ?? options.fallbackLocation ?? '/' + const depth = decoded?.depth ?? 0 + const bundle = decoded?.bundle ?? codec.ownerOf(initialLocation) + + let listeners: NavigationCallback[] = [] + let restoreListeners: Array<(info: { visible: boolean }) => void> = [] + let queue: Array<[url: HistoryLocation, state: HistoryState]> = [ + [initialLocation, decoded?.state ?? {}], + ] + let position = 0 + let teardownVisibility: (() => void) | undefined + + function setLocation(location: HistoryLocation, state: HistoryState = {}) { + position++ + if (position !== queue.length) { + // we are in the middle: drop the forward part of the queue + queue.splice(position) + } + queue.push([location, state]) + } + + function triggerListeners( + to: HistoryLocation, + from: HistoryLocation, + { direction, delta }: Pick + ): void { + const info: NavigationInformation = { direction, delta, type: 'pop' } + for (const callback of listeners.slice()) { + callback(to, from, info) + } + } + + function ensureVisibilitySubscription() { + if (teardownVisibility || !host.onVisibilityChange) return + teardownVisibility = host.onVisibilityChange(visible => { + for (const callback of restoreListeners.slice()) { + callback({ visible }) + } + }) + } + + const routerHistory: HybridRouterHistory = { + // rewritten by Object.defineProperty below + location: initialLocation, + // rewritten by Object.defineProperty below + state: {}, + base, + depth, + bundle, + + createHref(to) { + return codec.encode(to, { depth: depth + 1 }) ?? base + to + }, + + push(to, state?: HistoryState) { + setLocation(to, state) + }, + + replace(to, state?: HistoryState) { + queue.splice(position--, 1) + setLocation(to, state) + }, + + go(delta, shouldTrigger = true) { + const from = this.location + const target = position + delta + + if (target < 0) { + // Crossing the container boundary backwards: pop native containers. + // Each container counts as ONE entry regardless of its local queue. + // No listeners fire — this container is about to be dismissed, the + // revealed container gets a restore (pageshow-like) event instead. + position = 0 + const count = -target + void host.close({ count }).catch(err => { + console.error('[sparkling-history] host.close failed:', err) + }) + return + } + + if (target > queue.length - 1) { + console.warn( + `[sparkling-history] go(${delta}) exceeds the local history queue. ` + + 'Forward navigation cannot re-enter closed containers (MPA limitation); clamping.' + ) + } + + const direction: NavigationDirection = delta < 0 ? 'back' : 'forward' + position = Math.max(0, Math.min(target, queue.length - 1)) + if (shouldTrigger) { + triggerListeners(this.location, from, { direction, delta }) + } + }, + + pushExternal(to, data?: HistoryState, opts?: { replace?: boolean }) { + const replace = opts?.replace ?? false + const url = codec.encode(to, { + state: data, + depth: replace ? depth : depth + 1, + }) + if (!url) { + return Promise.reject( + new Error( + `[sparkling-history] no page in the route manifest owns "${to}"` + ) + ) + } + return host.open(url, { replace }) + }, + + listen(callback) { + listeners.push(callback) + return () => { + const index = listeners.indexOf(callback) + if (index > -1) listeners.splice(index, 1) + } + }, + + onRestore(callback) { + ensureVisibilitySubscription() + restoreListeners.push(callback) + return () => { + const index = restoreListeners.indexOf(callback) + if (index > -1) restoreListeners.splice(index, 1) + } + }, + + destroy() { + listeners = [] + restoreListeners = [] + teardownVisibility?.() + teardownVisibility = undefined + queue = [[initialLocation, {}]] + position = 0 + }, + } + + Object.defineProperty(routerHistory, 'location', { + enumerable: true, + get: () => queue[position][0], + }) + + Object.defineProperty(routerHistory, 'state', { + enumerable: true, + get: () => queue[position][1], + }) + + return routerHistory +} diff --git a/packages/sparkling-history/src/hosts/memory.ts b/packages/sparkling-history/src/hosts/memory.ts new file mode 100644 index 00000000..11cbe0ba --- /dev/null +++ b/packages/sparkling-history/src/hosts/memory.ts @@ -0,0 +1,152 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +import type { + NavigationHost, + NavigationHostCloseOptions, + NavigationHostOpenOptions, +} from '../types' + +/** + * In-memory simulation of a native container stack. + * + * Each simulated container gets its own {@link NavigationHost}, so tests can + * instantiate one `HybridRouterHistory` (and one router) per container and + * exercise real cross-"heap" flows — open, replace, close, visibility + * restore — without a device. Also usable for SSR-ish environments. + */ + +export interface SimulatedContainer { + readonly id: string + readonly url: string + readonly host: NavigationHost + /** Whether this container is the visible top of the stack. */ + readonly visible: boolean +} + +export interface MemoryNavigationEnvironment { + /** Bottom → top. */ + readonly stack: readonly SimulatedContainer[] + readonly top: SimulatedContainer | undefined + /** Open a container from outside (e.g. simulate the app's entry deeplink). */ + open(url: string, options?: NavigationHostOpenOptions): SimulatedContainer + /** Notified after every stack mutation. */ + onStackChange(callback: () => void): () => void +} + +interface ContainerImpl { + id: string + url: string + visible: boolean + visibilityListeners: Array<(visible: boolean) => void> + host: NavigationHost +} + +export function createMemoryNavigationEnvironment(): MemoryNavigationEnvironment { + const stack: ContainerImpl[] = [] + let nextId = 0 + let stackListeners: Array<() => void> = [] + + function notifyStackChange() { + for (const listener of stackListeners.slice()) listener() + } + + function setVisible(container: ContainerImpl, visible: boolean) { + if (container.visible === visible) return + container.visible = visible + for (const listener of container.visibilityListeners.slice()) { + listener(visible) + } + } + + function syncVisibility() { + stack.forEach((container, index) => { + setVisible(container, index === stack.length - 1) + }) + } + + function createContainer(url: string): ContainerImpl { + const id = `container-${nextId++}` + const container: ContainerImpl = { + id, + url, + visible: false, + visibilityListeners: [], + host: { + initialUrl: url, + containerId: id, + open(childUrl, options) { + openFrom(container, childUrl, options) + return Promise.resolve() + }, + close(options) { + closeFrom(container, options) + return Promise.resolve() + }, + onVisibilityChange(callback) { + container.visibilityListeners.push(callback) + return () => { + const index = container.visibilityListeners.indexOf(callback) + if (index > -1) container.visibilityListeners.splice(index, 1) + } + }, + }, + } + return container + } + + function openFrom( + opener: ContainerImpl | null, + url: string, + options?: NavigationHostOpenOptions + ): ContainerImpl { + const container = createContainer(url) + if (options?.replace && opener) { + const index = stack.indexOf(opener) + if (index > -1) { + stack.splice(index, 1, container) + } else { + stack.push(container) + } + } else { + stack.push(container) + } + syncVisibility() + notifyStackChange() + return container + } + + function closeFrom( + container: ContainerImpl, + options?: NavigationHostCloseOptions + ) { + const count = Math.max(1, options?.count ?? 1) + const index = stack.indexOf(container) + if (index < 0) return + // close self and (count - 1) containers below, clamped at the stack root + const start = Math.max(0, index - count + 1) + stack.splice(start, index - start + 1) + syncVisibility() + notifyStackChange() + } + + return { + get stack() { + return stack.slice() + }, + get top() { + return stack[stack.length - 1] + }, + open(url, options) { + return openFrom(null, url, options) + }, + onStackChange(callback) { + stackListeners.push(callback) + return () => { + const index = stackListeners.indexOf(callback) + if (index > -1) stackListeners.splice(index, 1) + } + }, + } +} diff --git a/packages/sparkling-history/src/hosts/sparkling.ts b/packages/sparkling-history/src/hosts/sparkling.ts new file mode 100644 index 00000000..b52f333a --- /dev/null +++ b/packages/sparkling-history/src/hosts/sparkling.ts @@ -0,0 +1,110 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +import { open as sparklingOpen, close as sparklingClose } from 'sparkling-navigation' +import type { NavigationHost } from '../types' +import { DEFAULT_SCHEME } from '../codec' + +/** + * {@link NavigationHost} implementation over the Sparkling container stack. + * + * Runs inside a Lynx background thread (one per container/heap): + * - the initial URL is rebuilt from `lynx.__globalProps.queryItems`, the + * query params the Sparkling SDK parsed off this container's scheme + * - `open`/`close` map to sparkling-navigation's `router.open`/`router.close` + * - visibility maps to the `viewAppeared`/`viewDisappeared` GlobalEvents + * the Sparkling SDK sends to every container. + */ + +interface GlobalEventEmitterLike { + addListener(event: string, listener: (...args: unknown[]) => void): void + removeListener(event: string, listener: (...args: unknown[]) => void): void +} + +interface LynxGlobalLike { + __globalProps?: { + containerID?: string + queryItems?: Record + } + getJSModule?(name: string): unknown +} + +declare const lynx: LynxGlobalLike | undefined + +function getLynx(): LynxGlobalLike | undefined { + return typeof lynx !== 'undefined' ? lynx : undefined +} + +export interface SparklingHostOptions { + /** Base scheme used to rebuild this container's initial URL. */ + scheme?: string +} + +export function createSparklingNavigationHost( + options: SparklingHostOptions = {} +): NavigationHost { + const scheme = options.scheme ?? DEFAULT_SCHEME + const globalProps = getLynx()?.__globalProps + + const queryItems = globalProps?.queryItems ?? {} + const query = Object.entries(queryItems) + .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) + .join('&') + + return { + initialUrl: query ? `${scheme}?${query}` : scheme, + containerId: globalProps?.containerID ?? '', + + open(url, opts) { + return new Promise((resolve, reject) => { + sparklingOpen( + { + scheme: url, + options: opts?.replace ? { replace: true } : undefined, + }, + result => { + if (result.code === 1) resolve() + else reject(new Error(`[sparkling-history] router.open failed: ${result.msg}`)) + } + ) + }) + }, + + close(opts) { + const count = opts?.count ?? 1 + if (count > 1) { + // Sparkling's router.close only dismisses the current container. + // Multi-entry pops (history.go(-n) across containers) degrade to a + // single pop — see the compatibility notes in the README. + console.warn( + `[sparkling-history] close({ count: ${count} }) is not supported by ` + + 'sparkling-navigation; closing only the current container.' + ) + } + return new Promise((resolve, reject) => { + sparklingClose({}, result => { + if (result.code === 1) resolve() + else reject(new Error(`[sparkling-history] router.close failed: ${result.msg}`)) + }) + }) + }, + + onVisibilityChange(callback) { + const emitter = getLynx()?.getJSModule?.('GlobalEventEmitter') as + | GlobalEventEmitterLike + | undefined + if (!emitter?.addListener) { + return () => {} + } + const onAppear = () => callback(true) + const onDisappear = () => callback(false) + emitter.addListener('viewAppeared', onAppear) + emitter.addListener('viewDisappeared', onDisappear) + return () => { + emitter.removeListener('viewAppeared', onAppear) + emitter.removeListener('viewDisappeared', onDisappear) + } + }, + } +} diff --git a/packages/sparkling-history/src/index.ts b/packages/sparkling-history/src/index.ts new file mode 100644 index 00000000..8429d6cf --- /dev/null +++ b/packages/sparkling-history/src/index.ts @@ -0,0 +1,34 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +export * from './types' +export { createHybridHistory, type HybridHistoryOptions } from './history' +export { + createSparklingSchemeCodec, + parseQuery, + DEFAULT_SCHEME, + ROUTE_PARAM, + STATE_PARAM, + DEPTH_PARAM, + type SparklingCodecOptions, +} from './codec' +export { + defineRouteManifest, + matchPattern, + findOwner, + findByName, + fillPattern, + normalizeRoute, + defaultLocationOf, + type RouteManifest, + type RouteManifestPage, + type RouteManifestRoute, + type OwnerLookup, + type PatternMatch, +} from './manifest' +export { + createMemoryNavigationEnvironment, + type MemoryNavigationEnvironment, + type SimulatedContainer, +} from './hosts/memory' diff --git a/packages/sparkling-history/src/manifest.ts b/packages/sparkling-history/src/manifest.ts new file mode 100644 index 00000000..adafdc7b --- /dev/null +++ b/packages/sparkling-history/src/manifest.ts @@ -0,0 +1,188 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +/** + * The route manifest is the piece of build-time metadata that connects + * pages living in DIFFERENT JS heaps. Each Sparkling page bundle embeds the + * same manifest (generated from the file-based page convention, see + * `sparkling-history/codegen`), so every heap can independently answer: + * + * "which page bundle owns route X?" → cross-page navigations become + * `router.open(scheme)` calls instead of in-memory route changes. + */ + +/** A route pattern entry: a bare pattern or a pattern with a route name. */ +export type RouteManifestRoute = string | { path: string; name?: string } + +export interface RouteManifestPage { + /** Page bundle name (rspeedy entry name), e.g. `"detail"`. */ + bundle: string + /** + * Route path patterns owned by this page. Supports vue-router-style + * `:param` segments and a trailing `*` / `:param*` catch-all. The FIRST + * pattern is the page's primary route. Entries may carry a route `name` + * so other pages can navigate cross-page by name. + */ + routes: RouteManifestRoute[] + /** + * Concrete location to use when the container was opened without an + * explicit route (e.g. a plain deeplink `?bundle=detail.lynx.bundle`). + * Defaults to the first static-only pattern, else `/`. + */ + default?: string + /** + * Extra container params appended to generated schemes for this page + * (e.g. `{ hide_nav_bar: true, title: 'Detail' }`). + */ + params?: Record +} + +export interface RouteManifest { + /** Base scheme for generated URLs. Default: `hybrid://lynxview_page`. */ + scheme?: string + pages: RouteManifestPage[] +} + +/** Identity helper for typed manifest modules. */ +export function defineRouteManifest(manifest: RouteManifest): RouteManifest { + return manifest +} + +// ── Path pattern matching ────────────────────────────────────────────── + +export interface PatternMatch { + /** Number of static segments matched (used to rank specificity). */ + staticScore: number + params: Record +} + +/** + * Match a concrete path (`/users/1`) against a pattern (`/users/:id`). + * Returns null when it doesn't match. + * + * Deliberately tiny: full matching (regex params, optional params, + * sensitivity...) happens inside each page's own router. The manifest only + * needs enough to decide OWNERSHIP of a path. + */ +export function matchPattern( + pattern: string, + path: string +): PatternMatch | null { + const patternSegs = split(pattern) + const pathSegs = split(path) + const params: Record = {} + let staticScore = 0 + + let i = 0 + for (; i < patternSegs.length; i++) { + const pat = patternSegs[i] + const isCatchAll = pat === '*' || (pat.startsWith(':') && pat.endsWith('*')) + if (isCatchAll) { + const name = pat === '*' ? 'pathMatch' : pat.slice(1, -1) + params[name] = pathSegs.slice(i).join('/') + return { staticScore, params } + } + if (i >= pathSegs.length) return null + if (pat.startsWith(':')) { + params[pat.slice(1)] = pathSegs[i] + } else if (pat === pathSegs[i]) { + staticScore++ + } else { + return null + } + } + return i === pathSegs.length ? { staticScore, params } : null +} + +function split(path: string): string[] { + return path.replace(/^\/+|\/+$/g, '') === '' + ? [] + : path.replace(/^\/+|\/+$/g, '').split('/') +} + +export function normalizeRoute(route: RouteManifestRoute): { + path: string + name?: string +} { + return typeof route === 'string' ? { path: route } : route +} + +export interface OwnerLookup { + page: RouteManifestPage + pattern: string + match: PatternMatch +} + +/** Find the page owning `path`, ranked by static-segment specificity. */ +export function findOwner( + manifest: RouteManifest, + path: string +): OwnerLookup | null { + let best: OwnerLookup | null = null + for (const page of manifest.pages) { + for (const route of page.routes) { + const { path: pattern } = normalizeRoute(route) + const match = matchPattern(pattern, path) + if (match) { + if (!best || match.staticScore > best.match.staticScore) { + best = { page, pattern, match } + } + } + } + } + return best +} + +/** Find a named route across all pages of the manifest. */ +export function findByName( + manifest: RouteManifest, + name: string +): { page: RouteManifestPage; pattern: string } | null { + for (const page of manifest.pages) { + for (const route of page.routes) { + const normalized = normalizeRoute(route) + if (normalized.name === name) { + return { page, pattern: normalized.path } + } + } + } + return null +} + +/** + * Fill a pattern's params to produce a concrete path: + * `fillPattern('/users/:id', { id: '1' })` → `/users/1`. + */ +export function fillPattern( + pattern: string, + params: Record> = {} +): string { + const segments = pattern.split('/').map(segment => { + if (!segment.startsWith(':') && segment !== '*') return segment + const isCatchAll = segment === '*' || segment.endsWith('*') + const name = + segment === '*' + ? 'pathMatch' + : segment.slice(1, isCatchAll ? -1 : undefined) + const value = params[name] + if (value === undefined || value === null) { + throw new Error( + `[sparkling-history] missing param "${name}" to fill pattern "${pattern}"` + ) + } + const values = Array.isArray(value) ? value : [value] + return values.map(v => encodeURIComponent(String(v))).join('/') + }) + const path = segments.join('/') + return path.startsWith('/') ? path : '/' + path +} + +/** Resolve the concrete default location for a page. */ +export function defaultLocationOf(page: RouteManifestPage): string { + if (page.default) return page.default + const firstStatic = page.routes + .map(normalizeRoute) + .find(r => !r.path.includes(':') && !r.path.includes('*')) + return firstStatic?.path ?? '/' +} diff --git a/packages/sparkling-history/src/types.ts b/packages/sparkling-history/src/types.ts new file mode 100644 index 00000000..ecb1b860 --- /dev/null +++ b/packages/sparkling-history/src/types.ts @@ -0,0 +1,191 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +/** + * Core contracts of the sparkling-history shim. + * + * The types in this file intentionally mirror the shape of vue-router's + * `RouterHistory` interface (vue-router/src/history/common.ts) so a + * {@link HybridRouterHistory} can be passed straight to vue-router's + * `createRouter({ history })`. They are re-declared here (instead of imported) + * to keep the core layer free of any framework dependency — the same history + * object can back any router that accepts this W3C-History-like contract. + */ + +/** A history location, serialized as a full path string (`/users/1?tab=posts#bio`). */ +export type HistoryLocation = string + +/** + * Values allowed in history state entries. Mirrors what the HTML5 + * `history.pushState` structured-clone contract accepts (minus non-JSON + * exotica), because cross-container state must survive URL/JSON transport. + */ +export type HistoryStateValue = + | string + | number + | boolean + | null + | undefined + | HistoryState + | HistoryStateArray + +/** State object associated with a history entry, like HTML `history.state`. */ +export interface HistoryState { + [x: number]: HistoryStateValue + [x: string]: HistoryStateValue +} + +export interface HistoryStateArray extends Array {} + +/** Starting location for histories, mirrors vue-router's `START`. */ +export const START: HistoryLocation = '' + +export type NavigationType = 'pop' | 'push' +export type NavigationDirection = 'back' | 'forward' | '' + +export interface NavigationInformation { + type: NavigationType + direction: NavigationDirection + delta: number +} + +export interface NavigationCallback { + ( + to: HistoryLocation, + from: HistoryLocation, + information: NavigationInformation + ): void +} + +/** + * The framework-facing history contract. Structurally compatible with + * vue-router's `RouterHistory`, with hybrid-navigation extensions. + */ +export interface HybridRouterHistory { + /** Base prepended to every url; kept for RouterHistory compatibility. */ + readonly base: string + /** Current history location (within this container). */ + readonly location: HistoryLocation + /** Current history state (within this container). */ + readonly state: HistoryState + + /** In-container navigation, like `history.pushState`. */ + push(to: HistoryLocation, data?: HistoryState): void + /** In-container navigation, like `history.replaceState`. */ + replace(to: HistoryLocation, data?: HistoryState): void + /** + * Traverse history. Deltas are consumed by the in-container queue first; + * any remainder walks the native container stack via + * {@link NavigationHost.close} (each container counts as one entry). + * Positive deltas beyond the local queue cannot re-enter closed containers + * and are clamped (MPA limitation). + */ + go(delta: number, triggerListeners?: boolean): void + /** Listen to `popstate`-like traversals within this container. */ + listen(callback: NavigationCallback): () => void + /** Generate the href for a location: a platform URL (sparkling scheme). */ + createHref(location: HistoryLocation): string + /** Remove all listeners and host subscriptions. */ + destroy(): void + + // ── Extensions beyond vue-router's RouterHistory ───────────────────── + + /** + * Cross-container navigation: opens `to` in a NEW container via the host + * (the MPA equivalent of `window.open`/link navigation). The current + * container keeps its own history untouched — it stays alive underneath + * the new page, exactly like a native navigation stack. + * + * @param to - target location (must be resolvable by the codec) + * @param data - state to hand to the target container's history + * @param options - `replace` swaps the current container instead of stacking + */ + pushExternal( + to: HistoryLocation, + data?: HistoryState, + options?: { replace?: boolean } + ): Promise + + /** Depth of this container in the native stack (0 = root). */ + readonly depth: number + + /** The page bundle this container runs, when the initial URL reveals it. */ + readonly bundle: string | null + + /** + * `pageshow`-like hook: fires when this container becomes visible again + * (e.g. the page stacked on top of it was closed). This is intentionally + * NOT a `popstate` equivalent — the container's own location did not + * change — but routers/apps can use it to refresh data. + */ + onRestore(callback: (info: { visible: boolean }) => void): () => void +} + +// ── Host contract ────────────────────────────────────────────────────── + +export interface NavigationHostOpenOptions { + /** Replace the current container instead of stacking a new one. */ + replace?: boolean +} + +export interface NavigationHostCloseOptions { + /** How many containers to pop. Hosts MAY only support 1. Default 1. */ + count?: number +} + +/** + * Minimal platform contract the history shim runs on. Anything that can + * open/close stacked pages by URL can implement this — Sparkling native + * containers, the Sparkling web shell, or an in-memory simulator for tests. + * + * Implementations for other stacks (e.g. a bespoke native shell) only need + * to fulfil this interface to reuse the whole shim + router adapters. + */ +export interface NavigationHost { + /** URL this container was opened with (e.g. `hybrid://lynxview_page?...`). */ + readonly initialUrl: string + /** Unique id of this container instance, if the platform provides one. */ + readonly containerId: string + /** Open a new container for the given platform URL. */ + open(url: string, options?: NavigationHostOpenOptions): Promise + /** Close containers starting from this one (pop the native stack). */ + close(options?: NavigationHostCloseOptions): Promise + /** + * Subscribe to this container's visibility (viewAppeared/viewDisappeared + * on Sparkling). Optional: hosts without lifecycle events can omit it. + */ + onVisibilityChange?(callback: (visible: boolean) => void): () => void +} + +// ── URL codec contract ───────────────────────────────────────────────── + +/** Result of decoding a platform URL back into router-world coordinates. */ +export interface DecodedLocation { + location: HistoryLocation + state?: HistoryState + /** Depth of the container in the native stack (0 = root). */ + depth: number + /** Page bundle this container is running, when the URL reveals it. */ + bundle?: string +} + +/** + * Bidirectional mapping between router locations (`/users/1?tab=posts`) and + * platform URLs (`hybrid://lynxview_page?bundle=user.lynx.bundle&...`). + * + * This is where the file-based route manifest plugs in: the codec must know + * which page bundle owns which route so separate JS heaps agree on the + * mapping without sharing memory. + */ +export interface SchemeCodec { + /** Router location -> platform URL. Returns null if no page owns `to`. */ + encode( + to: HistoryLocation, + context?: { state?: HistoryState; depth?: number } + ): string | null + /** Platform URL -> router location (+ state/depth riding along). */ + decode(url: string): DecodedLocation | null + /** Name of the page bundle owning `to`, or null if none matches. */ + ownerOf(to: HistoryLocation): string | null +} diff --git a/packages/sparkling-history/src/vue/index.ts b/packages/sparkling-history/src/vue/index.ts new file mode 100644 index 00000000..8a2d69bc --- /dev/null +++ b/packages/sparkling-history/src/vue/index.ts @@ -0,0 +1,176 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +import { + createRouter, + type NavigationFailure, + type RouteLocationRaw, + type Router, + type RouterHistory, + type RouterOptions, +} from 'vue-router' +import { createHybridHistory } from '../history' +import { createSparklingSchemeCodec } from '../codec' +import { + fillPattern, + findByName, + type RouteManifest, +} from '../manifest' +import type { + HistoryState, + HybridRouterHistory, + NavigationHost, + SchemeCodec, +} from '../types' +import { createSparklingNavigationHost } from '../hosts/sparkling' + +/** + * vue-router adapter. + * + * `createSparklingRouter` builds a standard vue-router `Router` whose history + * is a {@link HybridRouterHistory}. Navigations that stay within this page + * bundle behave exactly like a normal (memory-history) vue-router SPA: + * nested routes, guards, `router-view` — everything runs in this heap. + * + * Navigations that RESOLVE TO A ROUTE OWNED BY ANOTHER PAGE BUNDLE (per the + * shared route manifest) are diverted to the platform: `router.push('/x')` + * becomes a sparkling `router.open` that stacks a new native container. The + * current page keeps its state underneath — this is MPA navigation, so the + * local router does NOT transition (its guards do not run for the new page; + * the new page's own router runs its own guards on startup, exactly like a + * fresh document would in a browser MPA). + */ + +export interface SparklingRouterOptions extends Omit { + /** The shared route manifest (generated via `sparkling-history/codegen`). */ + manifest: RouteManifest + /** Platform host. Defaults to the Sparkling container host. */ + host?: NavigationHost + /** URL codec. Defaults to the sparkling scheme codec over `manifest`. */ + codec?: SchemeCodec + /** Pre-built history. Overrides `host`/`codec` when provided. */ + history?: HybridRouterHistory +} + +export interface SparklingRouter extends Router { + /** The underlying hybrid history, exposing `depth`, `onRestore`, etc. */ + readonly hybridHistory: HybridRouterHistory +} + +export function createSparklingRouter( + options: SparklingRouterOptions +): SparklingRouter { + const { manifest, host, codec, history, ...routerOptions } = options + + const resolvedCodec = + codec ?? createSparklingSchemeCodec(manifest) + const resolvedHistory = + history ?? + createHybridHistory({ + host: + host ?? + createSparklingNavigationHost({ scheme: manifest.scheme }), + codec: resolvedCodec, + }) + + const router = createRouter({ + ...routerOptions, + // HybridRouterHistory is structurally compatible with RouterHistory; + // the cast bridges vue-router's enum-typed NavigationInformation. + history: resolvedHistory as unknown as RouterHistory, + }) as SparklingRouter + + Object.defineProperty(router, 'hybridHistory', { + enumerable: true, + get: () => resolvedHistory, + }) + + const ownBundle = resolvedHistory.bundle + + /** + * Resolve `to` far enough to decide ownership. Returns null when the + * navigation should stay local (own bundle, unknown routes, hash-only...). + */ + function resolveCrossPage( + to: RouteLocationRaw + ): { fullPath: string; state?: HistoryState } | null { + let fullPath: string | null = null + let state: HistoryState | undefined + + if (typeof to === 'object' && to !== null) { + state = (to as { state?: HistoryState }).state + } + + // Named route living in another bundle: local matcher can't resolve it, + // so fill the pattern straight from the manifest. + const name = typeof to === 'object' && to && 'name' in to ? to.name : null + if (name != null && !router.hasRoute(name as never)) { + const named = findByName(manifest, String(name)) + if (named && named.page.bundle !== ownBundle) { + const target = to as { + params?: Record + query?: Record + hash?: string + } + fullPath = fillPattern(named.pattern, target.params) + const query = stringifyQuery(target.query) + if (query) fullPath += '?' + query + if (target.hash) fullPath += target.hash + return { fullPath, state } + } + return null // unknown name: let vue-router throw its usual error + } + + let resolved + try { + resolved = router.resolve(to) + } catch { + return null + } + const owner = resolvedCodec.ownerOf(resolved.fullPath) + if (owner === null || owner === ownBundle) return null + return { fullPath: resolved.fullPath, state } + } + + const originalPush = router.push.bind(router) + const originalReplace = router.replace.bind(router) + + router.push = (to: RouteLocationRaw) => { + const crossPage = resolveCrossPage(to) + if (crossPage) { + return resolvedHistory + .pushExternal(crossPage.fullPath, crossPage.state) + .then(() => undefined as unknown as NavigationFailure | void) + } + return originalPush(to) + } + + router.replace = (to: RouteLocationRaw) => { + const crossPage = resolveCrossPage(to) + if (crossPage) { + return resolvedHistory + .pushExternal(crossPage.fullPath, crossPage.state, { replace: true }) + .then(() => undefined as unknown as NavigationFailure | void) + } + return originalReplace(to) + } + + return router +} + +function stringifyQuery(query?: Record): string { + if (!query) return '' + return Object.entries(query) + .filter(([, value]) => value !== undefined && value !== null) + .map(([key, value]) => { + const values = Array.isArray(value) ? value : [value] + return values + .map( + v => + `${encodeURIComponent(key)}=${encodeURIComponent(String(v))}` + ) + .join('&') + }) + .join('&') +} diff --git a/packages/sparkling-history/tsconfig.json b/packages/sparkling-history/tsconfig.json new file mode 100644 index 00000000..cbab0dca --- /dev/null +++ b/packages/sparkling-history/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "CommonJS", + "moduleResolution": "node", + "lib": ["ES2020"], + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "dist", + "rootDir": "src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "types": ["node"] + }, + "include": ["src"], + "exclude": ["src/__tests__", "dist", "node_modules"] +} diff --git a/packages/sparkling-history/vitest.config.ts b/packages/sparkling-history/vitest.config.ts new file mode 100644 index 00000000..257508b6 --- /dev/null +++ b/packages/sparkling-history/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + environment: 'node', + include: ['src/__tests__/**/*.spec.ts'], + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 962d9188..78b8a5d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -215,6 +215,31 @@ importers: packages/sparkling-debug-tool: {} + packages/sparkling-history: + dependencies: + sparkling-navigation: + specifier: workspace:* + version: link:../methods/sparkling-navigation + devDependencies: + '@lynx-js/types': + specifier: 3.7.0 + version: 3.7.0 + '@types/node': + specifier: ^22.15.3 + version: 22.19.17 + typescript: + specifier: ^5.8.3 + version: 5.9.3 + vitest: + specifier: ^3.1.2 + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vue: + specifier: ^3.5.13 + version: 3.5.39(typescript@5.9.3) + vue-router: + specifier: ^4.5.1 + version: 4.6.4(vue@3.5.39(typescript@5.9.3)) + packages/sparkling-method: devDependencies: '@lynx-js/types': @@ -469,10 +494,18 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} @@ -486,6 +519,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -589,6 +627,10 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1993,6 +2035,38 @@ packages: '@vitest/utils@4.1.4': resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==} + '@vue/compiler-core@3.5.39': + resolution: {integrity: sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw==} + + '@vue/compiler-dom@3.5.39': + resolution: {integrity: sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg==} + + '@vue/compiler-sfc@3.5.39': + resolution: {integrity: sha512-d0ki86iOyN8LoZPBmk5SJWNwHP19CnDDCfuo//+2WJa2g5Ke0Jay983PIBIcSSzldC68I8DrD5GrHV3OSDfodg==} + + '@vue/compiler-ssr@3.5.39': + resolution: {integrity: sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/reactivity@3.5.39': + resolution: {integrity: sha512-TpsuBJ9gGlZa5d23XcM2y8EXanz9dZeVDQBXRwzy46ItgvM+rWpzs+UVM0wcRLxGvcav0HE5jz2gNL53xlRAog==} + + '@vue/runtime-core@3.5.39': + resolution: {integrity: sha512-9GLtNyRvPAUMbX+7ono0RC2j0guo2LXVi8LvcmAooImACUKm0oFf0jjwbX8/H0AE/t1nxhAkn8RSl9PMCzzxZw==} + + '@vue/runtime-dom@3.5.39': + resolution: {integrity: sha512-7Y6aAGboKcXAZ3ECuUy7RrS5yy2r47dhTp2SKaJmYxjopImaVFaNa5Ne66NwGovsrxVAl5S5rwc7m22UG7Lmww==} + + '@vue/server-renderer@3.5.39': + resolution: {integrity: sha512-yZSakiAGw85rZfG7UM8akMnIF+FmeiNk47uvHf2nVBBSe+dIKUhZuZq9+XgJhbV3nS5Z4ALH23/MpXofW+mbcw==} + peerDependencies: + vue: 3.5.39 + + '@vue/shared@3.5.39': + resolution: {integrity: sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==} + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -2733,6 +2807,10 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + envinfo@7.14.0: resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} engines: {node: '>=4'} @@ -2839,6 +2917,9 @@ packages: estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -3916,6 +3997,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.15: + resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -4278,6 +4364,10 @@ packages: resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.17: + resolution: {integrity: sha512-J7EF+8X+CzRPaJPOv9Ck2wNWJvGnnl3PcNPAdGg6GTLjyVpyQ0yATMSXRFRV01BviT/9Gwuc3rjEyJbDJG9a4w==} + engines: {node: ^10 || ^12 || >=14} + prettier@3.8.3: resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} engines: {node: '>=14'} @@ -5345,6 +5435,19 @@ packages: jsdom: optional: true + vue-router@4.6.4: + resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==} + peerDependencies: + vue: ^3.5.0 + + vue@3.5.39: + resolution: {integrity: sha512-xmZCYabFGcirU8r0fTuvl/LICc1OU620rnqepaJDL/a141ZigkG7AyaxQLdqJ02ZRYzWe6YPaDHeQx7MfknQfA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -5622,8 +5725,12 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@7.29.7': {} + '@babel/helper-validator-option@7.27.1': {} '@babel/helpers@7.29.2': @@ -5635,6 +5742,10 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -5743,6 +5854,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@bcoe/v8-coverage@0.2.3': {} '@bcoe/v8-coverage@1.0.2': {} @@ -7168,11 +7284,11 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 25.6.0 + '@types/node': 22.19.17 '@types/cors@2.8.19': dependencies: - '@types/node': 25.6.0 + '@types/node': 22.19.17 '@types/debug@4.1.13': dependencies: @@ -7275,7 +7391,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 25.6.0 + '@types/node': 22.19.17 '@types/yargs-parser@21.0.3': {} @@ -7340,6 +7456,14 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 + '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))': dependencies: '@vitest/spy': 3.2.4 @@ -7406,6 +7530,62 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 + '@vue/compiler-core@3.5.39': + dependencies: + '@babel/parser': 7.29.7 + '@vue/shared': 3.5.39 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.39': + dependencies: + '@vue/compiler-core': 3.5.39 + '@vue/shared': 3.5.39 + + '@vue/compiler-sfc@3.5.39': + dependencies: + '@babel/parser': 7.29.7 + '@vue/compiler-core': 3.5.39 + '@vue/compiler-dom': 3.5.39 + '@vue/compiler-ssr': 3.5.39 + '@vue/shared': 3.5.39 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.17 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.39': + dependencies: + '@vue/compiler-dom': 3.5.39 + '@vue/shared': 3.5.39 + + '@vue/devtools-api@6.6.4': {} + + '@vue/reactivity@3.5.39': + dependencies: + '@vue/shared': 3.5.39 + + '@vue/runtime-core@3.5.39': + dependencies: + '@vue/reactivity': 3.5.39 + '@vue/shared': 3.5.39 + + '@vue/runtime-dom@3.5.39': + dependencies: + '@vue/reactivity': 3.5.39 + '@vue/runtime-core': 3.5.39 + '@vue/shared': 3.5.39 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.39(vue@3.5.39(typescript@5.9.3))': + dependencies: + '@vue/compiler-ssr': 3.5.39 + '@vue/shared': 3.5.39 + vue: 3.5.39(typescript@5.9.3) + + '@vue/shared@3.5.39': {} + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -8167,7 +8347,7 @@ snapshots: engine.io@6.6.6: dependencies: '@types/cors': 2.8.19 - '@types/node': 25.6.0 + '@types/node': 22.19.17 '@types/ws': 8.18.1 accepts: 1.3.8 base64id: 2.0.0 @@ -8195,6 +8375,8 @@ snapshots: entities@6.0.1: {} + entities@7.0.1: {} + envinfo@7.14.0: {} error-ex@1.3.4: @@ -8382,6 +8564,8 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/unist': 3.0.3 + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.8 @@ -9396,7 +9580,7 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 25.6.0 + '@types/node': 22.19.17 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -10113,6 +10297,8 @@ snapshots: nanoid@3.3.11: {} + nanoid@3.3.15: {} + natural-compare@1.4.0: {} negotiator@0.6.3: {} @@ -10451,6 +10637,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.17: + dependencies: + nanoid: 3.3.15 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prettier@3.8.3: {} pretty-format@29.7.0: @@ -11565,6 +11757,27 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 + vite-node@3.2.4(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): + dependencies: + cac: 6.7.14 + debug: 4.4.3 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vite-node@3.2.4(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): dependencies: cac: 6.7.14 @@ -11586,6 +11799,23 @@ snapshots: - tsx - yaml + vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): + dependencies: + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.10 + rollup: 4.60.1 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 22.19.17 + fsevents: 2.3.3 + jiti: 2.6.1 + sass: 1.97.3 + sass-embedded: 1.97.3 + terser: 5.46.1 + yaml: 2.8.3 + vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): dependencies: esbuild: 0.27.7 @@ -11603,6 +11833,49 @@ snapshots: terser: 5.46.1 yaml: 2.8.3 + vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): + dependencies: + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + debug: 4.4.3 + expect-type: 1.3.0 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.16 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vite-node: 3.2.4(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.13 + '@types/node': 22.19.17 + jsdom: 28.1.0 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): dependencies: '@types/chai': 5.2.3 @@ -11675,6 +11948,21 @@ snapshots: transitivePeerDependencies: - msw + vue-router@4.6.4(vue@3.5.39(typescript@5.9.3)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.39(typescript@5.9.3) + + vue@3.5.39(typescript@5.9.3): + dependencies: + '@vue/compiler-dom': 3.5.39 + '@vue/compiler-sfc': 3.5.39 + '@vue/runtime-dom': 3.5.39 + '@vue/server-renderer': 3.5.39(vue@3.5.39(typescript@5.9.3)) + '@vue/shared': 3.5.39 + optionalDependencies: + typescript: 5.9.3 + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 From 9c76d55655cf8d87b93f42ccde08fde7158e45d7 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 03:44:59 +0000 Subject: [PATCH 08/18] feat(web): stacked multi-container web shell with lifecycle events and globalProps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Web-support improvements split out for a stacked PR onto the web platform work (tiktok/sparkling#22). The previous shell destroyed and re-created a single on every navigation, which cannot represent Sparkling's native container stack (no state preservation on back, no lifecycle, no globalProps). Now: - router.open STACKS a new (own Worker heap); the previous view stays alive hidden underneath — router.close / browser back pops it and reveals the previous view with state intact - each view is injected with globalProps (containerID + queryItems parsed from its scheme) mirroring the native SDK's GlobalPropsUtils — required by anything that reads lynx.__globalProps on web, incl. sparkling-history - viewAppeared/viewDisappeared GlobalEvents are sent on stack transitions, mirroring the native ViewEventUtils contract - browser history entries carry the scheme stack in state; popstate reconciles the view stack (back pops live views, forward re-creates fresh heaps, reload rebuilds — matching native process-restore behavior) - sparkling-navigation web handlers slim down to validated event dispatch (sparkling:navigate / sparkling:close); the shell owns stack + history bookkeeping like the native SDK owns the activity stack, and the open handler now honors the replace option (previously ignored) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01ARyWgB3243gQx1exWK61Qb --- packages/sparkling-web-shell/src/env.d.ts | 6 + packages/sparkling-web-shell/src/index.ts | 257 +++++++++++++++++++--- 2 files changed, 238 insertions(+), 25 deletions(-) diff --git a/packages/sparkling-web-shell/src/env.d.ts b/packages/sparkling-web-shell/src/env.d.ts index d20f8a67..930274a9 100644 --- a/packages/sparkling-web-shell/src/env.d.ts +++ b/packages/sparkling-web-shell/src/env.d.ts @@ -6,6 +6,12 @@ declare global { data: unknown, moduleName: string, ) => Promise | unknown; + /** Global props exposed to the card as `lynx.__globalProps` */ + globalProps?: unknown; + /** Map of NativeModule name -> ESM module URL, consumed by the Worker */ + nativeModulesMap?: Record; + /** Send a GlobalEventEmitter event into the card */ + sendGlobalEvent?: (eventName: string, params: unknown[]) => void; } interface HTMLElementTagNameMap { diff --git a/packages/sparkling-web-shell/src/index.ts b/packages/sparkling-web-shell/src/index.ts index 494e3888..5e59638e 100644 --- a/packages/sparkling-web-shell/src/index.ts +++ b/packages/sparkling-web-shell/src/index.ts @@ -14,18 +14,40 @@ import 'sparkling-media/web'; import { getWebMethodHandler } from 'sparkling-method/web-registry'; /** - * Determine which bundle to load from the ?page= query parameter. - * Default: "main" -> /main.lynx.bundle + * Sparkling web shell: a browser stand-in for the native container stack. + * + * Mirrors the native SDK's model so the web can be used as a faithful + * development harness for multi-page (MPA-style) navigation: + * + * - every `router.open` STACKS a new `` (its own Worker heap); + * the previous view stays alive underneath, hidden — like a backgrounded + * native container + * - `router.close` / browser back pops the top view, revealing the previous + * one with its state intact + * - each view gets `globalProps` (containerID + queryItems parsed from its + * scheme) and `viewAppeared`/`viewDisappeared` GlobalEvents, matching the + * native SDK's GlobalPropsUtils/ViewEventUtils behavior + * - browser history entries carry the whole scheme stack in `state`, so + * back/forward/reload reconcile the view stack (forward re-creates a + * fresh heap — same as a native process restore) */ -function getBundleUrl(): string { - const params = new URLSearchParams(window.location.search); - const page = params.get('page') || 'main'; - return `/${page}.lynx.bundle`; + +interface StackEntry { + scheme: string; + containerID: string; + view: LynxViewElement; +} + +interface ShellHistoryState { + sparklingStack: string[]; } +const viewStack: StackEntry[] = []; +let nextContainerId = 1; + /** - * Handle NativeModules RPC calls from the Worker thread. - * When the Lynx bundle calls NativeModules.spkPipe.call(method, data, callback), + * Handle NativeModules RPC calls from a Worker thread. + * When a Lynx bundle calls NativeModules.spkPipe.call(method, data, callback), * web-core bridges the call to this main-thread handler via onNativeModulesCall. */ function handleNativeModulesCall( @@ -53,9 +75,6 @@ function handleNativeModulesCall( /** * Create a blob URL for a minimal ESM module that acts as the spkPipe * NativeModule stub in the Worker. web-core dynamically imports this URL. - * The module exports a default object with a `call` method that the Worker's - * NativeModules will use. The actual call is bridged to the main thread - * via web-core's RPC mechanism and handled by onNativeModulesCall. */ const spkPipeModuleCode = ` // Factory called by web-core's createNativeModules. @@ -71,27 +90,83 @@ export default function(nativeModules, callBridge) { const spkPipeBlob = new Blob([spkPipeModuleCode], { type: 'application/javascript' }); const spkPipeModuleUrl = URL.createObjectURL(spkPipeBlob); +// ── Scheme helpers ───────────────────────────────────────────────────── + +function parseSchemeQuery(scheme: string): Record { + const result: Record = {}; + const qIndex = scheme.indexOf('?'); + if (qIndex < 0) return result; + for (const [key, value] of new URLSearchParams(scheme.slice(qIndex + 1))) { + result[key] = value; + } + return result; +} + +/** Resolve the bundle URL a scheme points at (dev `url=` wins over `bundle=`). */ +function bundleUrlOf(scheme: string): string | null { + const query = parseSchemeQuery(scheme); + if (query.url) return query.url; + if (query.bundle) { + const name = query.bundle.split('/').filter(Boolean).pop() ?? query.bundle; + return `/${name}`; + } + return null; +} + /** - * Render the Lynx view into the page. + * GlobalProps mirroring the native SDK (GlobalPropsUtils). `queryItems` + * carries every scheme query param — this is how a page's isolated heap + * learns its own URL (sparkling-history relies on it). */ -function render(): void { - const bundleUrl = getBundleUrl(); - const container = document.getElementById('root'); +function globalPropsFor(scheme: string, containerID: string): Record { + const queryItems = parseSchemeQuery(scheme); + queryItems.containerInitTime = String(Date.now()); + return { + containerID, + containerInitTime: queryItems.containerInitTime, + queryItems, + os: 'web', + screenWidth: window.innerWidth, + screenHeight: window.innerHeight, + pixelRatio: window.devicePixelRatio, + language: navigator.language, + theme: window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light', + }; +} + +// ── View stack management ────────────────────────────────────────────── + +function rootElement(): HTMLElement | null { + return document.getElementById('root'); +} + +function sendViewEvent(entry: StackEntry | undefined, event: 'viewAppeared' | 'viewDisappeared'): void { + entry?.view.sendGlobalEvent?.(event, []); +} + +function createView(scheme: string): StackEntry | null { + const container = rootElement(); if (!container) { console.error('[sparkling-web-shell] #root element not found'); - return; + return null; } - container.innerHTML = ''; + const bundleUrl = bundleUrlOf(scheme); + if (!bundleUrl) { + console.error(`[sparkling-web-shell] scheme has no bundle/url param: ${scheme}`); + return null; + } + const containerID = `web-container-${nextContainerId++}`; const lynxView = document.createElement('lynx-view'); lynxView.setAttribute('url', bundleUrl); - lynxView.style.width = '100vw'; - lynxView.style.height = '100vh'; + lynxView.style.cssText = + 'position:absolute;inset:0;width:100vw;height:100vh;'; // Register main-thread handler for spkPipe NativeModules calls. // Must be set BEFORE adding to DOM (connectedCallback initializes the Worker). lynxView.onNativeModulesCall = handleNativeModulesCall; + lynxView.globalProps = globalPropsFor(scheme, containerID); // Register spkPipe in the native modules map so the Worker knows it exists. const modulesMap = lynxView.nativeModulesMap as Record; @@ -99,16 +174,148 @@ function render(): void { modulesMap['spkPipe'] = spkPipeModuleUrl; } + const entry: StackEntry = { scheme, containerID, view: lynxView }; container.appendChild(lynxView); + return entry; } -// Initial render -render(); +function topEntry(): StackEntry | undefined { + return viewStack[viewStack.length - 1]; +} + +function pushView(scheme: string): void { + const previousTop = topEntry(); + const entry = createView(scheme); + if (!entry) return; + if (previousTop) { + previousTop.view.style.display = 'none'; + sendViewEvent(previousTop, 'viewDisappeared'); + } + viewStack.push(entry); +} + +function popViews(count: number): void { + for (let i = 0; i < count && viewStack.length > 0; i++) { + const entry = viewStack.pop()!; + sendViewEvent(entry, 'viewDisappeared'); + entry.view.remove(); + } + const revealed = topEntry(); + if (revealed) { + revealed.view.style.display = ''; + sendViewEvent(revealed, 'viewAppeared'); + } +} + +function replaceTopView(scheme: string): void { + const previousTop = viewStack.pop(); + if (previousTop) { + sendViewEvent(previousTop, 'viewDisappeared'); + previousTop.view.remove(); + } + const entry = createView(scheme); + if (entry) viewStack.push(entry); +} + +/** Rebuild the whole stack from schemes (initial load, reload, forward). */ +function rebuildStack(schemes: string[]): void { + while (viewStack.length) { + viewStack.pop()!.view.remove(); + } + schemes.forEach((scheme, index) => { + const entry = createView(scheme); + if (!entry) return; + if (index !== schemes.length - 1) entry.view.style.display = 'none'; + viewStack.push(entry); + }); +} + +// ── Browser history sync ─────────────────────────────────────────────── + +function currentSchemes(): string[] { + return viewStack.map((entry) => entry.scheme); +} + +function historyUrlFor(scheme: string): string { + const query = parseSchemeQuery(scheme); + const bundle = bundleUrlOf(scheme) ?? ''; + const page = bundle.split('/').filter(Boolean).pop()?.replace(/\.(lynx|web)\.bundle$/, '') ?? 'main'; + const route = query.__hs_route; + return `?page=${encodeURIComponent(page)}${route ? `&__hs_route=${encodeURIComponent(route)}` : ''}`; +} + +function commitHistory(replace: boolean): void { + const state: ShellHistoryState = { sparklingStack: currentSchemes() }; + const url = historyUrlFor(topEntry()?.scheme ?? ''); + window.history[replace ? 'replaceState' : 'pushState'](state, '', url); +} + +/** Derive the initial scheme from the shell URL (`?page=...&`). */ +function initialSchemeFromLocation(): string { + const params = new URLSearchParams(window.location.search); + const page = params.get('page') || 'main'; + params.delete('page'); + const extras = params.toString(); + return `hybrid://lynxview_page?bundle=${encodeURIComponent(`${page}.lynx.bundle`)}${extras ? `&${extras}` : ''}`; +} + +function reconcileWithHistoryState(state: ShellHistoryState | null): void { + const target = state?.sparklingStack ?? [initialSchemeFromLocation()]; + const current = currentSchemes(); + + const isPrefix = (prefix: string[], full: string[]) => + prefix.length <= full.length && prefix.every((s, i) => s === full[i]); + + if (target.length < current.length && isPrefix(target, current)) { + // back: pop views, previous containers stay alive → state preserved + popViews(current.length - target.length); + } else if (target.length > current.length && isPrefix(current, target)) { + // forward: re-create containers from schemes (fresh heaps) + const previousTop = topEntry(); + if (previousTop) { + previousTop.view.style.display = 'none'; + sendViewEvent(previousTop, 'viewDisappeared'); + } + for (const scheme of target.slice(current.length)) { + const entry = createView(scheme); + if (entry) viewStack.push(entry); + } + } else if (target.join('\n') !== current.join('\n')) { + rebuildStack(target); + } +} + +// ── Wire up ──────────────────────────────────────────────────────────── -// Listen for sparkling:navigate events dispatched by router.open web handler window.addEventListener('sparkling:navigate', ((event: CustomEvent) => { - render(); + event.preventDefault(); // signal the method handler that the shell took over + const { scheme, replace } = event.detail as { scheme: string; replace: boolean }; + if (replace) { + replaceTopView(scheme); + } else { + pushView(scheme); + } + commitHistory(replace); +}) as EventListener); + +window.addEventListener('sparkling:close', ((event: CustomEvent) => { + event.preventDefault(); + const { containerID } = event.detail as { containerID?: string }; + const top = topEntry(); + if (containerID && top && top.containerID !== containerID) { + console.warn( + '[sparkling-web-shell] closing a non-top container is not supported on web; ignoring.', + ); + return; + } + // going back through browser history keeps history and view stack in sync + window.history.back(); }) as EventListener); -// Re-render when browser navigation changes the URL -window.addEventListener('popstate', render); +window.addEventListener('popstate', (event) => { + reconcileWithHistoryState(event.state as ShellHistoryState | null); +}); + +// Initial render +reconcileWithHistoryState(window.history.state as ShellHistoryState | null); +commitHistory(true); From 85f7d0933a8faec5dc10e4ae3f09c3da7b135ecb Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 09:10:55 +0000 Subject: [PATCH 09/18] feat: add sparkling-playground-vue demo + fix cross-heap initial state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vue-Lynx demo proving vue-router can drive Sparkling multi-page native navigation (MPA) via sparkling-history — validated end-to-end on the web shell harness (26 Playwright checks: local SPA nav, cross-container stacking, dynamic params, guards, named routes, back across the container boundary, onRestore events, replace, state hand-off, deep-linking). - file-based pages (src/pages/*) with per-page routes.json → route manifest generated at build time by pluginRouteManifest - one createPageRouter() per bundle/heap; cross-bundle navs divert to sparkling router.open, same-bundle navs stay in-heap Also fixes sparkling-history: HybridHistory.replace now merges the current entry's state with the new data, matching vue-router's HTML5 history (replaceState merges history.state). This preserves the initial cross-heap state through the router's first-navigation replace(fullPath, { scroll }). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01ARyWgB3243gQx1exWK61Qb --- packages/playground-vue/.gitignore | 4 + packages/playground-vue/README.md | 62 +++++++++++ packages/playground-vue/lynx.config.ts | 56 ++++++++++ packages/playground-vue/package.json | 35 ++++++ .../src/generated/route-manifest.ts | 33 ++++++ .../playground-vue/src/pages/main/App.vue | 25 +++++ .../playground-vue/src/pages/main/index.ts | 25 +++++ .../playground-vue/src/pages/main/routes.json | 3 + .../src/pages/main/views/Features.vue | 20 ++++ .../src/pages/main/views/Home.vue | 34 ++++++ .../playground-vue/src/pages/settings/App.vue | 15 +++ .../src/pages/settings/index.ts | 15 +++ .../src/pages/settings/routes.json | 4 + .../src/pages/settings/views/Settings.vue | 19 ++++ .../playground-vue/src/pages/users/App.vue | 18 +++ .../playground-vue/src/pages/users/index.ts | 26 +++++ .../src/pages/users/routes.json | 6 + .../src/pages/users/views/UserDetail.vue | 46 ++++++++ .../src/pages/users/views/UserList.vue | 35 ++++++ .../playground-vue/src/shared/NavButton.vue | 25 +++++ packages/playground-vue/src/shared/router.ts | 26 +++++ packages/playground-vue/tsconfig.json | 15 +++ .../src/__tests__/cross-container.spec.ts | 14 +++ packages/sparkling-history/src/history.ts | 9 +- pnpm-lock.yaml | 103 +++++++++++++++++- 25 files changed, 669 insertions(+), 4 deletions(-) create mode 100644 packages/playground-vue/.gitignore create mode 100644 packages/playground-vue/README.md create mode 100644 packages/playground-vue/lynx.config.ts create mode 100644 packages/playground-vue/package.json create mode 100644 packages/playground-vue/src/generated/route-manifest.ts create mode 100644 packages/playground-vue/src/pages/main/App.vue create mode 100644 packages/playground-vue/src/pages/main/index.ts create mode 100644 packages/playground-vue/src/pages/main/routes.json create mode 100644 packages/playground-vue/src/pages/main/views/Features.vue create mode 100644 packages/playground-vue/src/pages/main/views/Home.vue create mode 100644 packages/playground-vue/src/pages/settings/App.vue create mode 100644 packages/playground-vue/src/pages/settings/index.ts create mode 100644 packages/playground-vue/src/pages/settings/routes.json create mode 100644 packages/playground-vue/src/pages/settings/views/Settings.vue create mode 100644 packages/playground-vue/src/pages/users/App.vue create mode 100644 packages/playground-vue/src/pages/users/index.ts create mode 100644 packages/playground-vue/src/pages/users/routes.json create mode 100644 packages/playground-vue/src/pages/users/views/UserDetail.vue create mode 100644 packages/playground-vue/src/pages/users/views/UserList.vue create mode 100644 packages/playground-vue/src/shared/NavButton.vue create mode 100644 packages/playground-vue/src/shared/router.ts create mode 100644 packages/playground-vue/tsconfig.json diff --git a/packages/playground-vue/.gitignore b/packages/playground-vue/.gitignore new file mode 100644 index 00000000..e7173325 --- /dev/null +++ b/packages/playground-vue/.gitignore @@ -0,0 +1,4 @@ +dist/ +node_modules/ +.rspeedy/ +*.log diff --git a/packages/playground-vue/README.md b/packages/playground-vue/README.md new file mode 100644 index 00000000..8e4de2a5 --- /dev/null +++ b/packages/playground-vue/README.md @@ -0,0 +1,62 @@ +# sparkling-playground-vue + +A Vue-Lynx demo where **vue-router drives Sparkling's multi-page native +navigation** through [`sparkling-history`](../sparkling-history). + +Unlike VueLynx's in-`LynxView` SPA routing (which uses `createMemoryHistory` +to keep every route in one JS heap), here each page is a **separate Lynx +container / JS heap**, connected by Sparkling navigation — the MPA model. +The connection between heaps is established at build time via a file-based +route manifest. + +## Layout + +``` +src/ + pages/ # file-based convention: one dir = one bundle = one container + main/ routes.json → "/", "/features" + users/ routes.json → "/users", "/users/:id" (name: user-detail) + settings/ routes.json → "/settings" (+ container param title=Settings) + shared/ + router.ts # createPageRouter(): one router per bundle + NavButton.vue + generated/ + route-manifest.ts # AUTO-GENERATED by sparkling-history/codegen +``` + +`lynx.config.ts` derives the rspeedy entries from `src/pages/*` and runs +`pluginRouteManifest`, which regenerates `src/generated/route-manifest.ts` +from every page's `routes.json` before each build. + +## What it demonstrates + +Each page bundle calls `createPageRouter(localRoutes)`. Navigations that +resolve to a route the current bundle owns stay **in-heap** (normal +vue-router SPA: nested `RouterView`, params, guards). Navigations resolving +to a route owned by **another** bundle are diverted to +`router.open()` — a new native container. + +| Interaction | Kind | What happens | +|---|---|---| +| `push('/features')` from `main` | in-container | vue-router transition, guards run, one container | +| `push('/users')` | cross-container | new `users` container stacked, `main` stays alive underneath | +| tap a user → `push('/users/1')` | in-container (users) | dynamic `:id` route inside the `users` heap | +| `push({ name: 'user-detail', params })` | cross-container | named route resolved via the manifest | +| `push({ path, state })` | cross-container | `history.state` carried across heaps via the scheme URL | +| `replace('/settings')` | cross-container | swaps the current container (same depth) | +| `back()` past the local queue | boundary | pops the native container; revealed page gets an `onRestore` (pageshow-like) event | + +## Run it on the web harness + +The web build is a faithful dev harness for the native multi-container model +(each `` is a separate Worker heap, stacked exactly like native +containers): + +```bash +pnpm --filter sparkling-playground-vue build:web +LYNX_BUNDLE_DIR="$PWD/packages/playground-vue/dist/web" \ + pnpm --filter sparkling-web-shell dev +# open http://localhost:4200/?page=main +``` + +Deep-link straight into a route with `?page=users&__hs_route=/users/3`. diff --git a/packages/playground-vue/lynx.config.ts b/packages/playground-vue/lynx.config.ts new file mode 100644 index 00000000..f0f89cff --- /dev/null +++ b/packages/playground-vue/lynx.config.ts @@ -0,0 +1,56 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import fs from 'node:fs' +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import { defineConfig } from '@lynx-js/rspeedy' +import { pluginVueLynx } from 'vue-lynx/plugin' +import { pluginRouteManifest } from 'sparkling-history/codegen' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const pagesDir = path.join(__dirname, 'src/pages') + +// File-based convention: every directory under src/pages/ is a page bundle. +const entry = Object.fromEntries( + fs + .readdirSync(pagesDir, { withFileTypes: true }) + .filter(dirent => dirent.isDirectory()) + .map(dirent => [dirent.name, `./src/pages/${dirent.name}/index.ts`]), +) + +export default defineConfig({ + source: { entry }, + output: { + filename: { + bundle: '[name].lynx.bundle', + }, + }, + environments: { + web: { + output: { + assetPrefix: '/', + distPath: { + root: 'dist/web', + }, + }, + }, + lynx: { + output: { + assetPrefix: 'asset:///', + }, + }, + }, + plugins: [ + pluginVueLynx({ + optionsApi: false, + enableCSSSelector: true, + }), + // Generates src/generated/route-manifest.ts from src/pages/*/routes.json — + // the shared route table every page bundle embeds (see sparkling-history). + pluginRouteManifest({ + pagesDir, + outFile: path.join(__dirname, 'src/generated/route-manifest.ts'), + }), + ], +}) diff --git a/packages/playground-vue/package.json b/packages/playground-vue/package.json new file mode 100644 index 00000000..a776ab6b --- /dev/null +++ b/packages/playground-vue/package.json @@ -0,0 +1,35 @@ +{ + "name": "sparkling-playground-vue", + "version": "0.1.0", + "private": true, + "type": "module", + "description": "Vue-Lynx demo: vue-router driving Sparkling multi-page native navigation via sparkling-history", + "homepage": "https://tiktok.github.io/sparkling/", + "repository": { + "type": "git", + "url": "https://github.com/tiktok/sparkling", + "directory": "packages/playground-vue" + }, + "scripts": { + "build": "pnpm -C ../.. --filter sparkling-method --filter sparkling-navigation --filter sparkling-storage --filter sparkling-media --filter sparkling-history build && rspeedy build", + "build:web": "pnpm -C ../.. --filter sparkling-method --filter sparkling-navigation --filter sparkling-storage --filter sparkling-media --filter sparkling-history build && rspeedy build --environment web", + "dev": "rspeedy dev", + "dev:web": "rspeedy build --environment web && pnpm --filter sparkling-web-shell dev", + "test": "vitest run --passWithNoTests" + }, + "dependencies": { + "sparkling-history": "workspace:*", + "sparkling-method": "workspace:*", + "sparkling-navigation": "workspace:*", + "vue-lynx": "0.4.0", + "vue-router": "^4.5.1" + }, + "devDependencies": { + "@lynx-js/rspeedy": "^0.13.3", + "@rsbuild/plugin-vue": "^1.2.6", + "typescript": "^5.8.3" + }, + "engines": { + "node": "^22 || ^24" + } +} diff --git a/packages/playground-vue/src/generated/route-manifest.ts b/packages/playground-vue/src/generated/route-manifest.ts new file mode 100644 index 00000000..5244a535 --- /dev/null +++ b/packages/playground-vue/src/generated/route-manifest.ts @@ -0,0 +1,33 @@ +// AUTO-GENERATED by sparkling-history/codegen — DO NOT EDIT. +import { defineRouteManifest } from 'sparkling-history' + +export default defineRouteManifest({ + "pages": [ + { + "bundle": "main", + "routes": [ + "/", + "/features" + ] + }, + { + "bundle": "settings", + "routes": [ + "/settings" + ], + "params": { + "title": "Settings" + } + }, + { + "bundle": "users", + "routes": [ + "/users", + { + "path": "/users/:id", + "name": "user-detail" + } + ] + } + ] +}) diff --git a/packages/playground-vue/src/pages/main/App.vue b/packages/playground-vue/src/pages/main/App.vue new file mode 100644 index 00000000..fa0aa31c --- /dev/null +++ b/packages/playground-vue/src/pages/main/App.vue @@ -0,0 +1,25 @@ + + + diff --git a/packages/playground-vue/src/pages/main/index.ts b/packages/playground-vue/src/pages/main/index.ts new file mode 100644 index 00000000..3aa52fd9 --- /dev/null +++ b/packages/playground-vue/src/pages/main/index.ts @@ -0,0 +1,25 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import { createApp } from 'vue-lynx' +import App from './App.vue' +import Home from './views/Home.vue' +import Features from './views/Features.vue' +import { createPageRouter } from '../../shared/router' + +const router = createPageRouter([ + { path: '/', name: 'home', component: Home }, + { path: '/features', name: 'features', component: Features }, +]) + +// Global guards run for LOCAL (in-container) navigations, like any SPA. +// Cross-page navigations don't run them here — the target page's own +// router runs its guards when its heap boots (MPA semantics). +router.beforeEach((to, from) => { + console.log(`[main] beforeEach: ${from.fullPath} -> ${to.fullPath}`) + return true +}) + +const app = createApp(App) +app.use(router) +app.mount() diff --git a/packages/playground-vue/src/pages/main/routes.json b/packages/playground-vue/src/pages/main/routes.json new file mode 100644 index 00000000..3eb918ef --- /dev/null +++ b/packages/playground-vue/src/pages/main/routes.json @@ -0,0 +1,3 @@ +{ + "routes": ["/", "/features"] +} diff --git a/packages/playground-vue/src/pages/main/views/Features.vue b/packages/playground-vue/src/pages/main/views/Features.vue new file mode 100644 index 00000000..c2ccc1ff --- /dev/null +++ b/packages/playground-vue/src/pages/main/views/Features.vue @@ -0,0 +1,20 @@ + + + diff --git a/packages/playground-vue/src/pages/main/views/Home.vue b/packages/playground-vue/src/pages/main/views/Home.vue new file mode 100644 index 00000000..99226605 --- /dev/null +++ b/packages/playground-vue/src/pages/main/views/Home.vue @@ -0,0 +1,34 @@ + + + diff --git a/packages/playground-vue/src/pages/settings/App.vue b/packages/playground-vue/src/pages/settings/App.vue new file mode 100644 index 00000000..55c675a6 --- /dev/null +++ b/packages/playground-vue/src/pages/settings/App.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/playground-vue/src/pages/settings/index.ts b/packages/playground-vue/src/pages/settings/index.ts new file mode 100644 index 00000000..9c03e4d5 --- /dev/null +++ b/packages/playground-vue/src/pages/settings/index.ts @@ -0,0 +1,15 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import { createApp } from 'vue-lynx' +import App from './App.vue' +import Settings from './views/Settings.vue' +import { createPageRouter } from '../../shared/router' + +const router = createPageRouter([ + { path: '/settings', name: 'settings', component: Settings }, +]) + +const app = createApp(App) +app.use(router) +app.mount() diff --git a/packages/playground-vue/src/pages/settings/routes.json b/packages/playground-vue/src/pages/settings/routes.json new file mode 100644 index 00000000..8602c6a3 --- /dev/null +++ b/packages/playground-vue/src/pages/settings/routes.json @@ -0,0 +1,4 @@ +{ + "routes": ["/settings"], + "params": { "title": "Settings" } +} diff --git a/packages/playground-vue/src/pages/settings/views/Settings.vue b/packages/playground-vue/src/pages/settings/views/Settings.vue new file mode 100644 index 00000000..16e3b165 --- /dev/null +++ b/packages/playground-vue/src/pages/settings/views/Settings.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/playground-vue/src/pages/users/App.vue b/packages/playground-vue/src/pages/users/App.vue new file mode 100644 index 00000000..75f433af --- /dev/null +++ b/packages/playground-vue/src/pages/users/App.vue @@ -0,0 +1,18 @@ + + + diff --git a/packages/playground-vue/src/pages/users/index.ts b/packages/playground-vue/src/pages/users/index.ts new file mode 100644 index 00000000..35092d5b --- /dev/null +++ b/packages/playground-vue/src/pages/users/index.ts @@ -0,0 +1,26 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import { createApp } from 'vue-lynx' +import App from './App.vue' +import UserList from './views/UserList.vue' +import UserDetail from './views/UserDetail.vue' +import { createPageRouter } from '../../shared/router' + +const router = createPageRouter([ + { path: '/users', name: 'users', component: UserList }, + // Dynamic segment + a per-route guard: both run entirely in this heap. + { + path: '/users/:id', + name: 'user-detail', + component: UserDetail, + beforeEnter: to => { + console.log(`[users] beforeEnter /users/${String(to.params.id)}`) + return true + }, + }, +]) + +const app = createApp(App) +app.use(router) +app.mount() diff --git a/packages/playground-vue/src/pages/users/routes.json b/packages/playground-vue/src/pages/users/routes.json new file mode 100644 index 00000000..7a5dd215 --- /dev/null +++ b/packages/playground-vue/src/pages/users/routes.json @@ -0,0 +1,6 @@ +{ + "routes": [ + "/users", + { "path": "/users/:id", "name": "user-detail" } + ] +} diff --git a/packages/playground-vue/src/pages/users/views/UserDetail.vue b/packages/playground-vue/src/pages/users/views/UserDetail.vue new file mode 100644 index 00000000..91840d65 --- /dev/null +++ b/packages/playground-vue/src/pages/users/views/UserDetail.vue @@ -0,0 +1,46 @@ + + + diff --git a/packages/playground-vue/src/pages/users/views/UserList.vue b/packages/playground-vue/src/pages/users/views/UserList.vue new file mode 100644 index 00000000..dc275bc3 --- /dev/null +++ b/packages/playground-vue/src/pages/users/views/UserList.vue @@ -0,0 +1,35 @@ + + + diff --git a/packages/playground-vue/src/shared/NavButton.vue b/packages/playground-vue/src/shared/NavButton.vue new file mode 100644 index 00000000..c856efc5 --- /dev/null +++ b/packages/playground-vue/src/shared/NavButton.vue @@ -0,0 +1,25 @@ + + + diff --git a/packages/playground-vue/src/shared/router.ts b/packages/playground-vue/src/shared/router.ts new file mode 100644 index 00000000..b69b572b --- /dev/null +++ b/packages/playground-vue/src/shared/router.ts @@ -0,0 +1,26 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import type { RouteRecordRaw } from 'vue-router' +import { createSparklingRouter, type SparklingRouter } from 'sparkling-history/vue' +import manifest from '../generated/route-manifest' + +/** + * Create the router for ONE page bundle (one Lynx container / JS heap). + * + * `routes` are the routes THIS page implements locally (in-container SPA + * navigation). Navigations resolving to routes owned by other pages — per + * the generated manifest — are diverted to Sparkling native navigation and + * open a new container. + */ +export function createPageRouter(routes: RouteRecordRaw[]): SparklingRouter { + const router = createSparklingRouter({ manifest, routes }) + + // Boot the initial navigation from the container's URL, like vue-router + // does on app install for browser histories. + router.push(router.hybridHistory.location).catch(err => { + console.error('[playground-vue] initial navigation failed:', err) + }) + + return router +} diff --git a/packages/playground-vue/tsconfig.json b/packages/playground-vue/tsconfig.json new file mode 100644 index 00000000..a2ffb718 --- /dev/null +++ b/packages/playground-vue/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "bundler", + "lib": ["ES2020", "DOM"], + "strict": true, + "noEmit": true, + "skipLibCheck": true, + "esModuleInterop": true, + "jsx": "preserve", + "types": [] + }, + "include": ["src", "lynx.config.ts"] +} diff --git a/packages/sparkling-history/src/__tests__/cross-container.spec.ts b/packages/sparkling-history/src/__tests__/cross-container.spec.ts index 0e581d3b..7cabd6c7 100644 --- a/packages/sparkling-history/src/__tests__/cross-container.spec.ts +++ b/packages/sparkling-history/src/__tests__/cross-container.spec.ts @@ -62,6 +62,20 @@ describe('cross-container navigation', () => { expect(detailHistory.state).toEqual({ from: 'home', count: 2 }) }) + it('preserves the initial cross-heap state through the router first-nav replace', async () => { + // vue-router's first navigation is `replace(fullPath, { scroll })`, which + // must NOT wipe the state decoded from the container URL. This mirrors the + // browser HTML5 history where replaceState merges the existing state. + const env = createMemoryNavigationEnvironment() + const root = env.open(codec.encode('/', { depth: 0 })!) + await historyFor(root).pushExternal('/detail/1', { greeting: 'hi' }) + + const detailHistory = historyFor(env.top!) + // simulate the router install replacing the current location on boot + detailHistory.replace(detailHistory.location, { scroll: false }) + expect(detailHistory.state).toEqual({ greeting: 'hi', scroll: false }) + }) + it('pushExternal with replace swaps the current container', async () => { const env = createMemoryNavigationEnvironment() env.open(codec.encode('/', { depth: 0 })!) diff --git a/packages/sparkling-history/src/history.ts b/packages/sparkling-history/src/history.ts index 36d7da30..9f39f6ca 100644 --- a/packages/sparkling-history/src/history.ts +++ b/packages/sparkling-history/src/history.ts @@ -106,9 +106,14 @@ export function createHybridHistory( setLocation(to, state) }, - replace(to, state?: HistoryState) { + replace(to, data?: HistoryState) { + // Mirror vue-router's HTML5 history: replaceState merges the existing + // entry's state with the new data (`assign({}, history.state, data)`). + // This is what preserves the initial cross-heap state through the + // router's first navigation, which is a `replace(fullPath, { scroll })`. + const merged: HistoryState = { ...queue[position][1], ...data } queue.splice(position--, 1) - setLocation(to, state) + setLocation(to, merged) }, go(delta, shouldTrigger = true) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 78b8a5d8..313d9409 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,10 +57,10 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.3)) + version: 29.7.0(@types/node@22.19.17)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3)) ts-jest: specifier: ^29.1.2 - version: 29.4.9(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@29.7.0)(jest@29.7.0(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.4.9(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.19.17)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3)))(typescript@5.9.3) typescript: specifier: ^5.8.3 version: 5.9.3 @@ -167,6 +167,34 @@ importers: specifier: ^3.1.2 version: 3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + packages/playground-vue: + dependencies: + sparkling-history: + specifier: workspace:* + version: link:../sparkling-history + sparkling-method: + specifier: workspace:* + version: link:../sparkling-method + sparkling-navigation: + specifier: workspace:* + version: link:../methods/sparkling-navigation + vue-lynx: + specifier: 0.4.0 + version: 0.4.0(@lynx-js/lynx-core@0.1.3)(@lynx-js/types@3.7.0)(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rsbuild/plugin-vue@1.2.9(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3)))(@types/react@19.2.14)(tslib@2.8.1)(webpack@5.105.0) + vue-router: + specifier: ^4.5.1 + version: 4.6.4(vue@3.5.39(typescript@5.9.3)) + devDependencies: + '@lynx-js/rspeedy': + specifier: ^0.13.3 + version: 0.13.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(typescript@5.9.3)(webpack@5.105.0) + '@rsbuild/plugin-vue': + specifier: ^1.2.6 + version: 1.2.9(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3)) + typescript: + specifier: ^5.8.3 + version: 5.9.3 + packages/sparkling-app-cli: dependencies: '@lynx-js/rspeedy': @@ -1492,6 +1520,14 @@ packages: '@rsbuild/core': optional: true + '@rsbuild/plugin-vue@1.2.9': + resolution: {integrity: sha512-ufD4eufkZZlNK3iY5NWg57AMK9qrTFmHycDkSTfRTua4Qczf7q9s7rCLYVfVv2w36cOXJIewM+376jD0zaQShQ==} + peerDependencies: + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@rsdoctor/client@1.2.3': resolution: {integrity: sha512-KzfRONtUFMOhgyd9Kur9C/eqh+qPE0UDQEwp/uCMIQHwmompGgChuGniVENd2mGgkZX4MDHubFSvjoeI7j4UBg==} @@ -4592,6 +4628,20 @@ packages: rslog@1.3.2: resolution: {integrity: sha512-1YyYXBvN0a2b1MSIDLwDTqqgjDzRKxUg/S/+KO6EAgbtZW1B3fdLHAMhEEtvk1patJYMqcRvlp3HQwnxj7AdGQ==} + rspack-vue-loader@17.5.1: + resolution: {integrity: sha512-1pXdeqYM95P0T8DO2ZcOCBnfMp62W5IG2c0RICn1rFYjHcja41IYSQLzcdc1uePEq0n4JZwvfR2lVs8wRZuwzA==} + peerDependencies: + '@rspack/core': ^1.0.0 || ^2.0.0-0 + '@vue/compiler-sfc': '*' + vue: '*' + peerDependenciesMeta: + '@rspack/core': + optional: true + '@vue/compiler-sfc': + optional: true + vue: + optional: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -5435,6 +5485,13 @@ packages: jsdom: optional: true + vue-lynx@0.4.0: + resolution: {integrity: sha512-6QyzeLl+GY4UjcBR6FzhdyppIjNLr5nxIM/Kx7TLnmhEEGyunvTbUfQsA6k227BjZ6s2oTRP1jQ1uqBpf5XKQA==} + engines: {node: '>=18'} + peerDependencies: + '@rsbuild/core': ^1.0.0 + '@rsbuild/plugin-vue': ^1.2.6 + vue-router@4.6.4: resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==} peerDependencies: @@ -6337,6 +6394,13 @@ snapshots: optionalDependencies: '@lynx-js/types': 3.7.0 + '@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@19.2.14)': + dependencies: + '@types/react': 19.2.14 + preact: '@hongzhiyuan/preact@10.28.0-fc4af453' + optionalDependencies: + '@lynx-js/types': 3.7.0 + '@lynx-js/rspeedy@0.13.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(typescript@5.9.3)(webpack@5.105.0)': dependencies: '@lynx-js/cache-events-webpack-plugin': 0.0.3 @@ -6774,6 +6838,16 @@ snapshots: transitivePeerDependencies: - webpack-hot-middleware + '@rsbuild/plugin-vue@1.2.9(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3))': + dependencies: + rspack-vue-loader: 17.5.1(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3)) + optionalDependencies: + '@rsbuild/core': 2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0) + transitivePeerDependencies: + - '@rspack/core' + - '@vue/compiler-sfc' + - vue + '@rsdoctor/client@1.2.3': {} '@rsdoctor/core@1.2.3(@rsbuild/core@1.7.3)(@rspack/core@1.7.11(@swc/helpers@0.5.21))(webpack@5.105.0)': @@ -10938,6 +11012,14 @@ snapshots: rslog@1.3.2: {} + rspack-vue-loader@17.5.1(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3)): + dependencies: + '@rspack/lite-tapable': 1.1.0 + chalk: 4.1.2 + optionalDependencies: + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) + vue: 3.5.39(typescript@5.9.3) + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -11948,6 +12030,23 @@ snapshots: transitivePeerDependencies: - msw + vue-lynx@0.4.0(@lynx-js/lynx-core@0.1.3)(@lynx-js/types@3.7.0)(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rsbuild/plugin-vue@1.2.9(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3)))(@types/react@19.2.14)(tslib@2.8.1)(webpack@5.105.0): + dependencies: + '@lynx-js/css-extract-webpack-plugin': 0.7.0(@lynx-js/template-webpack-plugin@0.10.5(tslib@2.8.1))(webpack@5.105.0) + '@lynx-js/react': 0.116.5(@lynx-js/types@3.7.0)(@types/react@19.2.14) + '@lynx-js/runtime-wrapper-webpack-plugin': 0.1.3 + '@lynx-js/template-webpack-plugin': 0.10.5(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1) + '@lynx-js/webpack-dev-transport': 0.2.0 + '@rsbuild/core': 2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0) + '@rsbuild/plugin-vue': 1.2.9(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3)) + '@vue/runtime-core': 3.5.39 + transitivePeerDependencies: + - '@lynx-js/lynx-core' + - '@lynx-js/types' + - '@types/react' + - tslib + - webpack + vue-router@4.6.4(vue@3.5.39(typescript@5.9.3)): dependencies: '@vue/devtools-api': 6.6.4 From 562e64283c9c388f57ff362fc44578c71612b0ef Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 09:15:13 +0000 Subject: [PATCH 10/18] docs+test: Vue Router compatibility matrix and in-heap pass-through suite - COMPATIBILITY.md: full traversal of Vue Router's guide features + e2e examples, each marked supported/reframed/limited for the Sparkling MPA model, with the reason and where it's validated - README.md: layering (host / codec+manifest / history / adapter) and the navigation flow across heaps - vue-features.spec.ts: proves createSparklingRouter leaves vue-router's in-heap features intact (dynamic match, nested, named views, redirect, alias, guard abort/redirect, afterEach, addRoute) while still diverting cross-bundle targets (12 tests) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01ARyWgB3243gQx1exWK61Qb --- packages/sparkling-history/COMPATIBILITY.md | 120 +++++++++++++ packages/sparkling-history/README.md | 119 +++++++++++++ .../src/__tests__/vue-features.spec.ts | 161 ++++++++++++++++++ 3 files changed, 400 insertions(+) create mode 100644 packages/sparkling-history/COMPATIBILITY.md create mode 100644 packages/sparkling-history/README.md create mode 100644 packages/sparkling-history/src/__tests__/vue-features.spec.ts diff --git a/packages/sparkling-history/COMPATIBILITY.md b/packages/sparkling-history/COMPATIBILITY.md new file mode 100644 index 00000000..9a622f52 --- /dev/null +++ b/packages/sparkling-history/COMPATIBILITY.md @@ -0,0 +1,120 @@ +# Vue Router × Sparkling MPA — Compatibility Matrix + +This is the acceptance deliverable: a full traversal of Vue Router's official +feature set (the [guide](https://router.vuejs.org/guide/) essentials + +advanced pages, and the repo's `e2e/` examples), answering for **each +feature** whether it can be supported when Vue Router drives **Sparkling +multi-page native navigation** — and, where it can't, exactly why. + +## How to read this + +The central fact of this integration is that navigation splits into two +regimes: + +- **In-heap (SPA)** — the target route is owned by the **current** page + bundle. This is a normal Vue Router transition inside one JS heap. The shim + does not touch it, so Vue Router behaves exactly as documented. +- **Cross-heap (MPA)** — the target route is owned by **another** bundle. The + shim diverts it to a native `router.open`, stacking a new container with its + own heap. Nothing but a URL crosses the boundary. + +A feature is "supported" when it works in the regime it belongs to. Several +features are **reframed** by MPA: they still work, but their mechanism moves +from Vue's runtime to the native platform (this is a feature, not a gap — it +is what "native navigation" means). + +Legend: ✅ supported & validated · 🟦 supported in-heap (Vue-native pass-through) +· 🔀 reframed by MPA (works, semantics move to native) · ⚠️ partial/conditional +· ❌ not supported (reason given) + +Validation column points at where the claim is exercised: +`history.spec` / `cross-container.spec` / `vue-adapter.spec` / +`vue-features.spec` are unit suites in `src/__tests__`; **e2e** is the +Playwright run against the web shell driving `packages/playground-vue`. + +--- + +## Essentials + +| # | Feature | Regime | Status | Validation & notes | +|---|---------|--------|--------|--------------------| +| 1 | **Dynamic Route Matching** (`/users/:id`) | in-heap | ✅ | `vue-features.spec` (params), **e2e** (`params.id decoded`, sibling param nav). Cross-bundle dynamic targets resolve via the manifest and re-parse in the new heap. | +| 2 | **Routes' Matching Syntax** (custom regex, repeatable `+`/`*`, optional `?`) | in-heap | 🟦 | Runs in Vue Router's own matcher, unchanged. The *manifest* matcher (ownership only) supports static, `:param`, and trailing catch-all — enough to route to the owning bundle; the owning bundle's router then applies the full syntax. | +| 3 | **Named Routes** | both | ✅ | `vue-adapter.spec` (cross-bundle named), **e2e** (`named route opened other bundle`). Cross-bundle names resolve through the manifest (`findByName` + `fillPattern`) since the local matcher can't see them. | +| 4 | **Named / multiple ``** | in-heap | 🟦 | `vue-features.spec` (`components: { default, sidebar }`). A record's named views live in one heap; there is no cross-heap named view (each container is a separate document). | +| 5 | **Nested Routes** | in-heap | 🟦 | `vue-features.spec` (matched chain length 2). Nesting is intra-bundle; to nest *across* bundles you open a child container instead. | +| 6 | **Programmatic Navigation** (`push`/`replace`/`go`/`back`/`forward`) | both | ✅ | `history.spec`, `vue-adapter.spec`, **e2e**. `go(-n)` consumes the local queue first, then pops native containers (see §Limitations for forward). | +| 7 | **Redirect** (string / named / function) | in-heap | 🟦 | `vue-features.spec` (string + function redirect). A redirect whose target is another bundle is diverted to a native open like any push. | +| 8 | **Alias** | in-heap | 🟦 | `vue-features.spec` (`aliasOf` link). | +| 9 | **Passing Props to Route Components** (`props: true`/object/function) | in-heap | 🟦 | Pure Vue Router feature, untouched by the shim. Cross-heap "props" become URL query / history state instead. | +| 10 | **Active links** (`router-link-active`, exact-active) | in-heap | ⚠️ | Active-class logic works via `useLink`, but see #12 for `` rendering on Lynx. Active state is per-heap; a link can't be "active" for a route living in another container. | +| 11 | **History Modes** (`createWebHistory` / `WebHashHistory` / `MemoryHistory`) | — | 🔀 | **Replaced** by `createHybridHistory`. The three stock histories assume one heap + browser APIs; this integration supplies its own history. (Memory history remains the right choice for pure in-`LynxView` SPA — the VueLynx model.) | +| 12 | **``** default rendering | in-heap | ⚠️ | `` renders `h('a', { href, onClick })`; **Lynx has no `` element**. Use `` (bind `@tap="navigate"`) or `useLink`, exactly as VueLynx examples do. This is a Lynx platform constraint, independent of MPA. The demo uses programmatic navigation + a `NavButton`. | + +## Advanced + +| # | Feature | Regime | Status | Validation & notes | +|---|---------|--------|--------|--------------------| +| 13 | **Navigation Guards** — global `beforeEach`/`beforeResolve`/`afterEach` | in-heap | ✅ | `vue-features.spec` (abort via `false`, redirect, `afterEach`), **e2e** (`[main] beforeEach` logs). | +| 14 | Guards — per-route `beforeEnter` | in-heap | ✅ | `users` bundle declares `beforeEnter` on `/users/:id`; runs on in-heap entry. | +| 15 | Guards — in-component (`onBeforeRouteLeave`/`Update`) | in-heap | 🟦 | Standard Vue Router; runs for in-heap transitions. **Cross-heap caveat:** leaving a page by opening another container does *not* run the opener's leave guards — the opener stays mounted underneath (it wasn't left). This matches browser MPA: navigating to a new document doesn't fire the old document's in-app leave guards. | +| 16 | **Route Meta Fields** (`meta`) | in-heap | 🟦 | Untouched Vue Router feature. Meta does not cross heaps (not serialized into the scheme); put cross-page data in query/state. | +| 17 | **Data Fetching** (guard-driven / after-nav) | in-heap | 🟦 | Works per-heap. Each opened container fetches on its own boot — the natural MPA data-loading point. | +| 18 | **Composition API** (`useRoute`/`useRouter`/`useLink`) | in-heap | ✅ | Used throughout `packages/playground-vue`; `useRouter()` returns the `SparklingRouter` (adds `hybridHistory`). | +| 19 | **RouterView slot** (``) | in-heap | 🟦 | Pure Vue feature; unaffected. | +| 20 | **Transitions** (`` + ``) | in-heap | ⚠️ | In-heap route transitions work (Vue ``). **Cross-container** transitions are the *native* push/pop animation (owned by Sparkling / the platform), not Vue transitions — you get platform animation, configurable via scheme params (e.g. `animated`). | +| 21 | **Scroll Behavior** (`scrollBehavior`, saved position) | — | ❌ | Not supported. Vue Router's `scrollBehavior` drives `window.scrollTo` / `document` scroll and reads `window.history.state.scroll`; **Lynx has no window scroll** (scrolling lives inside ``/``, per-container). Saved-position restore across containers is likewise a native concern. Platform limitation, not fixable in the shim. | +| 22 | **Extending RouterLink** (`useLink`, custom link components) | in-heap | 🟦 | `useLink` works; `href` is a Sparkling scheme (from `createHref`). Build custom link components with `custom` slot. | +| 23 | **Navigation Failures** (`NavigationFailure`, `isNavigationFailure`) | both | ✅ | In-heap: `vue-features.spec` (aborted push returns a failure). Cross-heap: `push`/`replace` return a promise that resolves when the native open succeeds (or rejects if no bundle owns the target / the host `open` fails). | +| 24 | **Dynamic Routing** (`addRoute`/`removeRoute`/`hasRoute`) | in-heap | ⚠️ | `vue-features.spec` (add + remove). Works within a heap at runtime. **Cross-bundle** routes cannot be added at runtime: the manifest that connects heaps is build-time (a new heap wouldn't know about a route another heap added in memory). Regenerate the manifest + rebuild to add cross-bundle routes. | +| 25 | **Typed Routes** (typed `RouteMap`) | — | 🟦 | Type-level only; compatible. The manifest could feed a typed-routes generator (future work). | +| 26 | **Lazy Loading** (`() => import()`) | both | 🔀 | In-heap async components work as usual. **Cross-bundle is itself lazy loading**: each page bundle is a separate artifact the host loads on demand at `router.open` — route-level code-splitting is the native container boundary. | + +## `e2e/` examples + +| Example | Status | Notes | +|---------|--------|-------| +| `encoding` | ✅ | Param/URL encoding round-trips through the codec — `cross-container.spec` (`round-trips locations losslessly`, encoded param), **e2e** deeplink with encoded query. | +| `guards-instances` | 🟦 | In-heap guard/instance behavior is Vue Router's own; unaffected. | +| `hash` | 🔀 | Hash history is replaced by the scheme codec; the "hash" role (opaque location token) is played by `__hs_route`. | +| `keep-alive` | 🔀/🟦 | In-heap `` works. Across containers, the *native stack itself* keeps backgrounded pages alive — a stacked page's heap is preserved and revealed intact on close (validated by **e2e** `restored ×N` + `main container revealed with state intact`). Stronger than ``: full heap preservation, not a component cache. | +| `modal` | ⚠️ | The "modal route over a background route" pattern works in-heap. A modal that is a *separate container* is a native presentation (e.g. a non-fullscreen scheme), not a Vue overlay. | +| `multi-app` | 🟦 | Each container already hosts its own Vue app instance/router — the multi-app model is the default here (one app per heap). | +| `scroll-behavior` | ❌ | See #21. | +| `suspense` | 🟦 | `` is a Vue feature, independent of history; works per-heap. | +| `transitions` | ⚠️ | See #20. | + +--- + +## MPA limitations, stated plainly + +These are inherent to "multiple heaps connected only by URLs", not +shortcomings of the shim: + +1. **No forward across a closed container.** `history.go(+n)` past the local + queue cannot re-enter a container that was popped — its heap is gone. Back + works (it pops live containers); forward beyond the queue is clamped with a + warning. In a browser MPA, forward after a real navigation reloads a fresh + document; the native stack has no such entry to return to. +2. **Only URL-serializable data crosses the boundary.** Route, JSON state, and + depth travel in the scheme. No shared reactive stores, no live object refs, + no `meta` — by design. Richer hand-off goes through a native channel + (`sparkling-storage`, a custom method). +3. **Cross-bundle route table is build-time.** Heaps agree via the generated + manifest; you can't teach one heap about another's runtime `addRoute`. +4. **Guards are per-heap.** The opener's leave/afterEach guards don't run when + you open another container (it stays mounted underneath); the opened page + runs its own guards on boot. This mirrors browser MPA document semantics. +5. **Scroll restoration is native, not Vue.** (#21.) + +## Verdict + +Everything Vue Router does **inside a page** is supported unchanged — the shim +returns a real `Router` and only intercepts cross-bundle `push`/`replace`. +Everything Vue Router does **between pages** is mapped onto Sparkling native +navigation, with route/state/depth carried in the scheme and a build-time +manifest connecting the heaps. The only hard *no* is **scroll behavior** +(no window scroll on Lynx); `` needs the `custom` slot (no `` +on Lynx); and a handful of features are **reframed** (history modes, lazy +loading, keep-alive, transitions) because their mechanism legitimately moves +from Vue's runtime to the native platform in an MPA. diff --git a/packages/sparkling-history/README.md b/packages/sparkling-history/README.md new file mode 100644 index 00000000..5370b971 --- /dev/null +++ b/packages/sparkling-history/README.md @@ -0,0 +1,119 @@ +# sparkling-history + +A framework-agnostic **history shim** that lets SPA routers (Vue Router +first) drive **Sparkling's multi-page native navigation** — the MPA model — +where each page is a separate Lynx container in its own JS heap. + +> This is deliberately different from [VueLynx](https://vue.lynxjs.org)'s +> in-`LynxView` SPA routing, which uses `createMemoryHistory` to keep all +> routes inside a single heap. Here the router drives navigation *between* +> native containers that do **not** share memory. The only thing they can +> share is a build-time **route manifest**, so that is what connects them. + +## The layering (why it's reusable) + +``` +┌──────────────────────────────────────────────────────────────┐ +│ Router framework vue-router (or any router that │ +│ accepts a RouterHistory-like obj) │ +├──────────────────────────────────────────────────────────────┤ +│ Adapter sparkling-history/vue │ ← per-framework, thin +│ createSparklingRouter() │ +├──────────────────────────────────────────────────────────────┤ +│ Shim core (this package) HybridRouterHistory │ ← framework-agnostic +│ SchemeCodec + RouteManifest │ +├──────────────────────────────────────────────────────────────┤ +│ Host contract NavigationHost │ ← platform-agnostic +│ open() / close() / initialUrl / visibility │ +├──────────────────────────────────────────────────────────────┤ +│ Platform Sparkling native │ Web shell │ Memory │ +│ (sparkling-nav) │ (harness) │ (tests) │ +└──────────────────────────────────────────────────────────────┘ +``` + +Each seam is a small, explicit contract: + +- **`NavigationHost`** — the platform floor. Anything that can *open* and + *close* stacked pages addressed by a URL implements it. Ships with a + Sparkling binding (`sparkling-history/sparkling`, over + `sparkling-navigation`) and an in-memory simulator (for tests / SSR). A + bespoke native shell only needs to satisfy this interface to reuse the + whole stack above. +- **`SchemeCodec` + `RouteManifest`** — the cross-heap contract. The manifest + is generated from the file-based page convention at build time and embedded + in every bundle, so isolated heaps agree on which page owns which route + without sharing memory. The codec maps router locations ⇆ sparkling scheme + URLs and carries `route`/`state`/`depth` across the boundary in the URL. +- **`HybridRouterHistory`** — structurally compatible with vue-router's + `RouterHistory`, so it drops into `createRouter({ history })`. In-container + it behaves like memory history; at the container boundary it delegates to + the host. + +Because the router only ever sees a `RouterHistory`, the same core works for +any router that accepts a custom history, and the same host works for any +framework — the point of keeping the layers apart. + +## How a navigation flows + +`router.push('/detail/42')` inside the `home` page bundle: + +1. the vue adapter resolves `/detail/42` and asks the codec **who owns it** +2. owned by *another* bundle (`detail`) → the adapter calls + `history.pushExternal('/detail/42')` instead of a local transition +3. the codec encodes it to + `hybrid://lynxview_page?bundle=detail.lynx.bundle&__hs_route=%2Fdetail%2F42&__hs_depth=1` +4. `NavigationHost.open(scheme)` → `sparkling-navigation`'s `router.open` + stacks a new native container (a fresh JS heap) +5. the `detail` bundle boots, builds its own `HybridRouterHistory`, decodes + its container URL, and starts its router at `/detail/42` — running *its* + guards, exactly like a browser MPA loading a new document + +If `/detail/42` had been owned by the *same* bundle, step 2 stays local and +it is an ordinary in-heap vue-router transition (nested views, guards, params +— all untouched). + +## Usage + +```ts +// one router per page bundle (one heap) +import { createSparklingRouter } from 'sparkling-history/vue' +import manifest from './generated/route-manifest' // built by the codegen plugin + +const router = createSparklingRouter({ + manifest, + routes: [ /* only the routes THIS bundle implements locally */ ], +}) +router.push(router.hybridHistory.location) // initial navigation +``` + +Build-time manifest generation (rsbuild/rspeedy): + +```ts +import { pluginRouteManifest } from 'sparkling-history/codegen' + +plugins: [ + pluginRouteManifest({ + pagesDir: 'src/pages', + outFile: 'src/generated/route-manifest.ts', + }), +] +``` + +See [`packages/playground-vue`](../playground-vue) for a full working demo, +and [`COMPATIBILITY.md`](./COMPATIBILITY.md) for the Vue Router feature matrix. + +## What crosses the heap boundary + +Only what fits in a URL: the target **route**, the navigation **state** +(JSON-serialized), and the stack **depth**. This is the fundamental MPA +constraint — there is no shared memory, no shared reactive store, no live +object references between pages. Anything richer must go through a native +channel (`sparkling-storage`, a native module, etc.). + +## Testing + +`createMemoryNavigationEnvironment()` simulates the native container stack in +one process, so cross-heap flows are exercised with **real vue-router +instances** — one per simulated container — without a device. The suite ports +vue-router's official memory-history tests (in-container behavior) and adds +cross-container + adapter coverage. Run `pnpm --filter sparkling-history test`. diff --git a/packages/sparkling-history/src/__tests__/vue-features.spec.ts b/packages/sparkling-history/src/__tests__/vue-features.spec.ts new file mode 100644 index 00000000..0e906b7d --- /dev/null +++ b/packages/sparkling-history/src/__tests__/vue-features.spec.ts @@ -0,0 +1,161 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. + +/** + * Evidence that createSparklingRouter leaves vue-router's IN-HEAP feature set + * intact. The adapter only wraps push/replace to divert CROSS-bundle targets; + * everything that resolves within the current bundle must behave exactly like + * a stock vue-router. These cases mirror vue-router's own guide features + * (dynamic matching, nested routes, named views, redirect, alias, guards, + * dynamic routing) and back the compatibility matrix in the package README. + */ + +import { describe, expect, it, vi } from 'vitest' +import { defineComponent, h } from 'vue' +import type { RouteRecordRaw } from 'vue-router' +import { createSparklingRouter } from '../vue' +import { createHybridHistory } from '../history' +import { createSparklingSchemeCodec } from '../codec' +import { defineRouteManifest } from '../manifest' +import { createMemoryNavigationEnvironment } from '../hosts/memory' + +const Stub = defineComponent({ render: () => h('div') }) + +// One bundle "app" owns every route here so nothing diverts to native — we are +// testing the in-heap pass-through. A second bundle exists only to prove the +// interception boundary still fires. +const manifest = defineRouteManifest({ + pages: [ + { bundle: 'app', routes: ['/', '/users/:id', '/parent', '/dashboard', '/home', '/root-alias'] }, + { bundle: 'other', routes: ['/other'] }, + ], +}) +const codec = createSparklingSchemeCodec(manifest) + +function bootRouter(routes: RouteRecordRaw[]) { + const env = createMemoryNavigationEnvironment() + const container = env.open(codec.encode('/', { depth: 0 })!) + const history = createHybridHistory({ host: container.host, codec }) + const router = createSparklingRouter({ manifest, history, routes }) + return { router, env } +} + +describe('vue-router in-heap features pass through the adapter', () => { + it('dynamic route matching resolves params', async () => { + const { router } = bootRouter([ + { path: '/', component: Stub }, + { path: '/users/:id', component: Stub }, + ]) + await router.push('/users/42') + expect(router.currentRoute.value.params.id).toBe('42') + }) + + it('nested routes build the matched chain', async () => { + const { router } = bootRouter([ + { + path: '/parent', + component: Stub, + children: [{ path: 'child', component: Stub }], + }, + ]) + await router.push('/parent/child') + expect(router.currentRoute.value.matched).toHaveLength(2) + expect(router.currentRoute.value.fullPath).toBe('/parent/child') + }) + + it('named views resolve multiple components for one record', async () => { + const { router } = bootRouter([ + { + path: '/dashboard', + components: { default: Stub, sidebar: Stub }, + }, + ]) + await router.push('/dashboard') + const record = router.currentRoute.value.matched[0] + expect(Object.keys(record.components ?? {}).sort()).toEqual([ + 'default', + 'sidebar', + ]) + }) + + it('redirect (string) follows through', async () => { + const { router } = bootRouter([ + { path: '/', component: Stub }, + { path: '/home', redirect: '/' }, + ]) + await router.push('/home') + expect(router.currentRoute.value.path).toBe('/') + }) + + it('redirect (function) can rewrite to a query', async () => { + const { router } = bootRouter([ + { path: '/', component: Stub }, + { path: '/users/:id', component: Stub }, + { path: '/parent', redirect: () => ({ path: '/users/7' }) }, + ]) + await router.push('/parent') + expect(router.currentRoute.value.path).toBe('/users/7') + }) + + it('alias matches the aliased path', async () => { + const { router } = bootRouter([ + { path: '/', component: Stub, alias: '/root-alias' }, + ]) + await router.push('/root-alias') + const record = router.currentRoute.value.matched[0] + // the alias resolves and links back to the original '/' record + expect(record.aliasOf?.path).toBe('/') + expect(record.components?.default).toBe(Stub) + }) + + it('a global guard returning false aborts the navigation', async () => { + const { router } = bootRouter([ + { path: '/', component: Stub }, + { path: '/users/:id', component: Stub }, + ]) + router.beforeEach(to => (to.path === '/users/1' ? false : true)) + const failure = await router.push('/users/1') + expect(failure).toBeTruthy() // NavigationFailure + expect(router.currentRoute.value.path).toBe('/') + }) + + it('a guard can redirect', async () => { + const { router } = bootRouter([ + { path: '/', component: Stub }, + { path: '/dashboard', component: Stub }, + { path: '/home', component: Stub }, + ]) + router.beforeEach(to => (to.path === '/home' ? '/dashboard' : true)) + await router.push('/home') + expect(router.currentRoute.value.path).toBe('/dashboard') + }) + + it('afterEach runs for in-heap navigations', async () => { + const { router } = bootRouter([ + { path: '/', component: Stub }, + { path: '/users/:id', component: Stub }, + ]) + const spy = vi.fn() + router.afterEach(spy) + await router.push('/users/9') + expect(spy).toHaveBeenCalled() + }) + + it('dynamic routing via addRoute works in-heap', async () => { + const { router } = bootRouter([{ path: '/', component: Stub }]) + router.addRoute({ path: '/users/:id', name: 'u', component: Stub }) + await router.push('/users/5') + expect(router.currentRoute.value.name).toBe('u') + router.removeRoute('u') + expect(router.hasRoute('u')).toBe(false) + }) + + it('the interception boundary still diverts cross-bundle targets', async () => { + const { router, env } = bootRouter([{ path: '/', component: Stub }]) + await router.push('/other') + // did NOT resolve locally; opened a native container instead + expect(router.currentRoute.value.path).toBe('/') + expect(env.stack).toHaveLength(2) + }) +}) From 7b3d25032b8d56e18e980a6760ac4dfc9d775c45 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 20:04:55 +0000 Subject: [PATCH 11/18] fix: resolve conflict markers left in web-support cherry-picks The first-session cherry-pick of the upstream web-support commits staged a few files with unresolved conflict markers (create-app completion notes, sparkling-media module.config.json, and the CLI / getting-started docs). Resolve them: merge the web-aware completion notes without duplicating the p.note output, align sparkling-media's module.config.json with the nav/ storage structure (adds web entry + platforms), and merge the docs so both the native and web options are documented. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01ARyWgB3243gQx1exWK61Qb --- docs/en/guide/cli.md | 11 +- .../get-started/create-custom-method.mdx | 6 +- docs/en/guide/get-started/create-new-app.mdx | 6 +- .../create-sparkling-app/src/create-app.ts | 6 +- .../src/create-app/post-create.ts | 12 - pnpm-lock.yaml | 1688 ++++++++++++++--- 6 files changed, 1411 insertions(+), 318 deletions(-) diff --git a/docs/en/guide/cli.md b/docs/en/guide/cli.md index d6f43f39..8ff0fe06 100644 --- a/docs/en/guide/cli.md +++ b/docs/en/guide/cli.md @@ -44,13 +44,9 @@ npx sparkling dev | Option | Description | | --- | --- | | `--config ` | Path to `app.config.ts` (default: `app.config.ts`) | -<<<<<<< HEAD +| `--platform ` | Target platform: `web`, `native`, or `all` (default: `all`) | | `--port ` | Dev server port (default: `app.config.ts -> dev.server.port`, fallback `5969`) | | `--host ` | Dev server host (default: `app.config.ts -> dev.server.host`, then Rspeedy default) | -======= -| `--platform ` | Target platform: `android`, `ios`, `web`, or `all` (default: `all`) | -| `--port ` | Dev server port (default: `5969`) | ->>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option) The default port **5969** spells **LYNX** on a phone keypad (L=5, Y=9, N=6, X=9). @@ -93,14 +89,9 @@ npx sparkling autolink **What it does:** -<<<<<<< HEAD - **Android** — Links Sparkling method Gradle projects and generates `SparklingAutolink.kt`. Debug-tool packages are linked as `debugImplementation`. - **iOS** — Links Sparkling method pods and generates `SparklingAutolink.swift`. Debug-tool packages are linked in the debug target. -======= -- **Android** — Updates `settings.gradle(.kts)` and `app/build.gradle(.kts)` with module includes/dependencies, and generates `SparklingAutolink.kt`. -- **iOS** — Updates the `Podfile` with pod entries and generates `SparklingAutolink.swift`. - **Web** — Reads `web` entries from each `module.config.json` and generates a `web-autolink.ts` file that imports all `*/web` method handlers. ->>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option) ### `sparkling run:android` diff --git a/docs/en/guide/get-started/create-custom-method.mdx b/docs/en/guide/get-started/create-custom-method.mdx index e417bbae..b013a4bd 100644 --- a/docs/en/guide/get-started/create-custom-method.mdx +++ b/docs/en/guide/get-started/create-custom-method.mdx @@ -254,10 +254,9 @@ npm install sparkling-my-greeting npx sparkling autolink ``` -<<<<<<< HEAD:docs/en/guide/get-started/create-custom-method.mdx -======= -## 7. Add web support (optional) + +## Add web support (optional) You can add a web implementation so your method works in the browser. See the full guide at [Web Method Implementations](/guide/web-method-implementations). @@ -267,7 +266,6 @@ In brief: 2. Add `"./web"` subpath export to `package.json` 3. Add `"web"` to `platforms` in `module.config.json` 4. Run `npx sparkling autolink` ->>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option):docs/en/guide/get-started/create-custom-method.md ## Best practices diff --git a/docs/en/guide/get-started/create-new-app.mdx b/docs/en/guide/get-started/create-new-app.mdx index 9def9b0c..6ce99e6c 100644 --- a/docs/en/guide/get-started/create-new-app.mdx +++ b/docs/en/guide/get-started/create-new-app.mdx @@ -18,11 +18,7 @@ npm create sparkling-app@latest my-app cd my-app ``` -<<<<<<< HEAD:docs/en/guide/get-started/create-new-app.mdx -### Run native targets -======= -2) Run on any platform: ->>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option):docs/en/guide/get-started/create-new-app.md +### Run on any platform ```bash # Android diff --git a/packages/create-sparkling-app/src/create-app.ts b/packages/create-sparkling-app/src/create-app.ts index 03aa992f..903b76c7 100644 --- a/packages/create-sparkling-app/src/create-app.ts +++ b/packages/create-sparkling-app/src/create-app.ts @@ -374,11 +374,7 @@ export async function createSparklingApp( await initializeGitRepo(distFolder); } -<<<<<<< HEAD - showCompletionNotes(targetDir, packageManager, didInstall); + showCompletionNotes(targetDir, packageManager, didInstall, enableWeb); p.outro(ui.success('Happy hacking!')); -======= - showCompletionNotes(targetDir, packageManager, didInstall, enableWeb); ->>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option) } diff --git a/packages/create-sparkling-app/src/create-app/post-create.ts b/packages/create-sparkling-app/src/create-app/post-create.ts index 8e71a6c5..fa57e1f2 100644 --- a/packages/create-sparkling-app/src/create-app/post-create.ts +++ b/packages/create-sparkling-app/src/create-app/post-create.ts @@ -112,13 +112,7 @@ export function detectPackageManager(): string { } } -<<<<<<< HEAD -export function showCompletionNotes(targetDir: string, packageManager?: string, didInstall = false): void { -======= export function showCompletionNotes(targetDir: string, packageManager?: string, didInstall = false, enableWeb = true): void { - console.log(ui.success(`✔ Project created at ${targetDir}`)); - ->>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option) const formatScriptCommand = (script: string) => { const pm = packageManager ?? 'npm'; return pm === 'npm' ? `${pm} run ${script}` : `${pm} ${script}`; @@ -142,15 +136,9 @@ export function showCompletionNotes(targetDir: string, packageManager?: string, 'iOS: ensure Xcode Command Line Tools are installed.', 'Android: ensure ANDROID_HOME and SDK platforms are set.', ]; -<<<<<<< HEAD -======= if (enableWeb) { tips.push('Web: run `run:web` to preview your app in the browser.'); } - tips.forEach(tip => { - console.log(ui.tip(tip)); - }); ->>>>>>> 3fbe481 (feat: add web method bridge, CLI web support, docs, and create-app web option) p.note( [...nextSteps, '', ...tips.map(t => ui.tip(t))].join('\n'), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 313d9409..7f646f9e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,6 +15,34 @@ importers: specifier: ^5.8.3 version: 5.9.3 + examples/hello-world: + dependencies: + '@lynx-js/react': + specifier: ^0.116.2 + version: 0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28) + devDependencies: + '@lynx-js/qrcode-rsbuild-plugin': + specifier: ^0.4.4 + version: 0.4.6 + '@lynx-js/react-rsbuild-plugin': + specifier: ^0.12.7 + version: 0.12.10(@lynx-js/lynx-core@0.1.3)(@lynx-js/react@0.116.5(@lynx-js/types@3.7.0)(@types/react@18.3.28))(tslib@2.8.1)(webpack@5.105.0) + '@lynx-js/rspeedy': + specifier: ^0.13.3 + version: 0.13.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(typescript@5.9.3)(webpack@5.105.0) + '@lynx-js/types': + specifier: ^3.7.0 + version: 3.7.0 + '@rsbuild/core': + specifier: 1.7.2 + version: 1.7.2 + '@types/react': + specifier: ^18.3.20 + version: 18.3.28 + typescript: + specifier: ^5.8.3 + version: 5.9.3 + packages/create-sparkling-app: dependencies: '@clack/prompts': @@ -57,10 +85,10 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.19.17)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3)) + version: 29.7.0(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.3)) ts-jest: specifier: ^29.1.2 - version: 29.4.9(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.19.17)(ts-node@10.9.2(@types/node@22.19.17)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.4.9(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@29.7.0)(jest@29.7.0(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.3)))(typescript@5.9.3) typescript: specifier: ^5.8.3 version: 5.9.3 @@ -147,7 +175,7 @@ importers: version: 18.3.28 '@vitest/coverage-v8': specifier: ^3.1.2 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3)) jsdom: specifier: ^26.1.0 version: 26.1.0 @@ -165,7 +193,7 @@ importers: version: 5.9.3 vitest: specifier: ^3.1.2 - version: 3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + version: 3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) packages/playground-vue: dependencies: @@ -260,7 +288,7 @@ importers: version: 5.9.3 vitest: specifier: ^3.1.2 - version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + version: 3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) vue: specifier: ^3.5.13 version: 3.5.39(typescript@5.9.3) @@ -363,7 +391,41 @@ importers: version: 5.9.3 packages/website: + dependencies: + '@douyinfe/semi-icons': + specifier: ^2.74.0 + version: 2.101.0(react@19.2.5) + '@douyinfe/semi-ui': + specifier: ^2.75.0 + version: 2.101.0(@floating-ui/dom@1.8.0)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@lynx-js/go-web': + specifier: ^0.5.1 + version: 0.5.1(@douyinfe/semi-icons@2.101.0(react@19.2.5))(@douyinfe/semi-ui@2.101.0(@floating-ui/dom@1.8.0)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@lynx-js/web-core@0.20.4(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1))(@rspress/core@2.0.9(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.47.0)(micromark-util-types@2.0.2)(micromark@4.0.2))(@shikijs/transformers@3.23.0)(qrcode.react@4.2.0(react@19.2.5))(react-copy-to-clipboard@5.1.1(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(swr@2.4.2(react@19.2.5))(vscode-icons-js@11.6.1) + '@lynx-js/lynx-core': + specifier: 0.1.3 + version: 0.1.3 + '@lynx-js/web-core': + specifier: ^0.20.3 + version: 0.20.4(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1) + '@lynx-js/web-elements': + specifier: ^0.12.0 + version: 0.12.0(tslib@2.8.1) + qrcode.react: + specifier: ^4.2.0 + version: 4.2.0(react@19.2.5) + react-copy-to-clipboard: + specifier: ^5.1.0 + version: 5.1.1(react@19.2.5) + swr: + specifier: ^2.2.5 + version: 2.4.2(react@19.2.5) + vscode-icons-js: + specifier: ^11.6.1 + version: 11.6.1 devDependencies: + '@rsbuild/plugin-sass': + specifier: ^1.5.1 + version: 1.5.3(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0)) '@rspack/core': specifier: 2.0.0-alpha.1 version: 2.0.0-alpha.1(@swc/helpers@0.5.21) @@ -373,6 +435,12 @@ importers: '@rspress/plugin-llms': specifier: ^2.0.3 version: 2.0.9(@rspress/core@2.0.9(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.47.0)(micromark-util-types@2.0.2)(micromark@4.0.2)) + '@shikijs/transformers': + specifier: ^3.4.2 + version: 3.23.0 + '@types/react-copy-to-clipboard': + specifier: ^5.0.7 + version: 5.0.7 playwright: specifier: ^1.58.2 version: 1.59.1 @@ -445,7 +513,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(jsdom@28.1.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(jsdom@28.1.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3)) packages: @@ -643,6 +711,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} + engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} @@ -750,6 +822,62 @@ packages: resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} engines: {node: '>=20.19.0'} + '@dnd-kit/accessibility@3.1.1': + resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==} + peerDependencies: + react: '>=16.8.0' + + '@dnd-kit/core@6.3.1': + resolution: {integrity: sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@dnd-kit/sortable@7.0.2': + resolution: {integrity: sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==} + peerDependencies: + '@dnd-kit/core': ^6.0.7 + react: '>=16.8.0' + + '@dnd-kit/utilities@3.2.2': + resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==} + peerDependencies: + react: '>=16.8.0' + + '@douyinfe/semi-animation-react@2.101.0': + resolution: {integrity: sha512-TTUvFBYpeABxt2ZYFXmz908c23ZwDXuQJGZlBXxTb2yLFfFtSpXyctKzG94cxGcT0ZCliOlE3xQ2FhVT0mej0g==} + + '@douyinfe/semi-animation-styled@2.101.0': + resolution: {integrity: sha512-FM3xOP+t2kqcHT7x7XSTkYf6sIgsd3KXfE5K2uIUxaRm42aBgRS1xP/5PT35U3IBOlP8pi9st7GZiYESHfHfYw==} + + '@douyinfe/semi-animation@2.101.0': + resolution: {integrity: sha512-dcESvnz0vHdxc2v0NnxCRFVedT88r250x0xPJ1x9BMnUn/PCSN9BtAUl2hktoLVyhp/+So41ThPvn/2tTAvqVA==} + + '@douyinfe/semi-foundation@2.101.0': + resolution: {integrity: sha512-ESEH7aCX3IETSmp952Lq2f4lxApYn2uH72YJ4WUJ5YoOMxtWZCFVf85R02+zBlEP/dTED9PBl3aOazkgdH/USA==} + + '@douyinfe/semi-icons@2.101.0': + resolution: {integrity: sha512-BFDALkxYbjZmFdpcTYgE031uWJnWC/s7olR8j8F21RM1W2LIVCnpGFXLAppUj+y+5xeG2wcL57MA9AxBvPa0aw==} + peerDependencies: + react: '>=16.0.0' + + '@douyinfe/semi-illustrations@2.101.0': + resolution: {integrity: sha512-iVFqwaftoMRpnAeeYoAOD7+06plRLW4HqyufVPpTwPBkdalANoX5NtdGPwc4w9E4+O+pu8vMp1snojhVrxYIMw==} + peerDependencies: + react: '>=16.0.0' + + '@douyinfe/semi-json-viewer-core@2.101.0': + resolution: {integrity: sha512-0Jp4/3Go0kQnlYIi+NzM3Dh1/YJjMjXGPQV9WfjlZXAE47FIM+KTNWL8wyGQz5x91HKV0ZABd7pGw76abODT3g==} + + '@douyinfe/semi-theme-default@2.101.0': + resolution: {integrity: sha512-TZHhGapKNtd06eGb+RDpntmTo1iKsh/2KQgH4YDzrEnuCs59EGEj4Uh+RkhlMLGWkxR/qrP6weMnl8K3k/E69g==} + + '@douyinfe/semi-ui@2.101.0': + resolution: {integrity: sha512-oTIE9Hrc++8zv4MSanbkMlFpqoQeT/Gn7fPv+B1b1HJZIO0Dzj7pAimv2BBoZ4mB8QcsJ2BXFALg/Lp3ienbqA==} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + '@emnapi/core@1.9.2': resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} @@ -924,6 +1052,15 @@ packages: '@noble/hashes': optional: true + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} + + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} + + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} + '@hongzhiyuan/preact@10.28.0-fc4af453': resolution: {integrity: sha512-TrM2g079OZN1poroDnU2kQd1gNUB1DMfVoKyz23AE3hZvl9ypRgG2MdgxAJtwT5u3BmYvI4Z0EbdpJTdf428IQ==} @@ -1044,6 +1181,25 @@ packages: '@lynx-js/css-serializer@0.1.4': resolution: {integrity: sha512-yG3sC1fH+rBQhbdvPCweaGjmFmOBdi2rbt7xs9laMfu5Z5dOXL1OB7pZZN0vodptBO0/ctVfMCKH2EKhq0GtTA==} + '@lynx-js/go-web@0.5.1': + resolution: {integrity: sha512-HQO72C1ALInCzjDVEzCYJ7aGh/jQHTKc3fG8MNUs6TLy2lXl8ut/dKsztEw3OzD6NlCcQpoRdSsbmuI8ETDo7w==} + engines: {node: ^22 || ^24} + peerDependencies: + '@douyinfe/semi-icons': '>=2.74.0' + '@douyinfe/semi-ui': '>=2.75.0' + '@lynx-js/web-core': '>=0.20.0' + '@rspress/core': '*' + '@shikijs/transformers': '>=3.0.0' + qrcode.react: '>=4.0.0' + react: '>=18.0.0' + react-copy-to-clipboard: '>=5.0.0' + react-dom: '>=18.0.0' + swr: '>=2.0.0' + vscode-icons-js: '>=11.0.0' + peerDependenciesMeta: + '@rspress/core': + optional: true + '@lynx-js/lynx-core@0.1.3': resolution: {integrity: sha512-uWzKKYJUK4Q09ZRZxWSAFINnmZb9piWPbvWF9SkLn+3snBl9u/BJa4ekPRcKWAhBmpbtxWH1x27fxe3Q3p5l3Q==} @@ -1147,6 +1303,20 @@ packages: '@lynx-js/lynx-core': 0.1.3 '@lynx-js/web-elements': '>0.7.7' + '@lynx-js/web-core@0.20.4': + resolution: {integrity: sha512-n0lLAjUeK1ndJE7xzCzkccYQE42C1qDMOvRSxqSZ5JdcBaY4pG0ZWswXC6jiL0gaksiY5Y31wZOIWHMlRRotPw==} + peerDependencies: + '@lynx-js/css-serializer': 0.1.6 + '@lynx-js/lynx-core': 0.1.3 + tslib: ^2.5.0 + peerDependenciesMeta: + '@lynx-js/css-serializer': + optional: true + '@lynx-js/lynx-core': + optional: true + tslib: + optional: true + '@lynx-js/web-core@0.7.1': resolution: {integrity: sha512-Vn6rmp0EWetm2mQMThcs9yQFRd1SxPy3+AmaapgYQLS+RIfRlQqHQmQBxWIJlUGCcq9iLFM03xw0H/YVYN3kHg==} peerDependencies: @@ -1169,6 +1339,11 @@ packages: peerDependencies: tslib: ^2.5.0 + '@lynx-js/web-elements@0.12.2': + resolution: {integrity: sha512-k6eblA01RUIt09/GRXpRx1eL4n4Ztzs4v81RAE8Pkix8MyRArwjHb5qbV9O64VWuSk/R6h6ZJjen0cfzrBZdzw==} + peerDependencies: + tslib: ^2.5.0 + '@lynx-js/web-elements@0.7.7': resolution: {integrity: sha512-8DjHNinJqQNJ2Ues7VAaf2HHGxmg7EQEiKsZ0f/u/avy0X+RNrACt42sY7VUI0+r9asC7VcRkD/QILUd9VCkNQ==} peerDependencies: @@ -1189,6 +1364,9 @@ packages: '@lynx-js/web-worker-rpc@0.19.8': resolution: {integrity: sha512-POkpPZQjU+a0V/LGWNkaqy+/E6B2WEDYnbh+0FtRNLXcNOBOcgvZNg0fo6VVbw3UInmTwO0v+2g/kMjotizwkg==} + '@lynx-js/web-worker-rpc@0.20.4': + resolution: {integrity: sha512-i4RV8f397nl02zB1wjFfEJDo/bM0c+dvzd9nIPY9gksf2lX8aSOpkXn6Kyou+05qdJAXm2EZIl8SKYiTMi/P6w==} + '@lynx-js/web-worker-rpc@0.7.1': resolution: {integrity: sha512-5aKeVfElE+duqBFWiOaiBBZiC2B7aTDJI88jY7ROrikD5suftmANbMRme8YC46UmJBOo2a5SyLaoZcW54SjL5Q==} @@ -1520,6 +1698,14 @@ packages: '@rsbuild/core': optional: true + '@rsbuild/plugin-sass@1.5.3': + resolution: {integrity: sha512-NViSITZF3J3i96GfemWfTZBZ43CNZUgTaaKgfti0I7odwy36Qlo8MIAbGjOy8pBSygIYn7Xl4+Jw8qAbTysCBw==} + peerDependencies: + '@rsbuild/core': ^1.3.0 || ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@rsbuild/plugin-vue@1.2.9': resolution: {integrity: sha512-ufD4eufkZZlNK3iY5NWg57AMK9qrTFmHycDkSTfRTua4Qczf7q9s7rCLYVfVv2w36cOXJIewM+376jD0zaQShQ==} peerDependencies: @@ -1780,6 +1966,9 @@ packages: '@shikijs/core@1.29.2': resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} + '@shikijs/core@3.23.0': + resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==} + '@shikijs/core@4.0.2': resolution: {integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==} engines: {node: '>=20'} @@ -1820,9 +2009,15 @@ packages: resolution: {integrity: sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==} engines: {node: '>=20'} + '@shikijs/transformers@3.23.0': + resolution: {integrity: sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ==} + '@shikijs/types@1.29.2': resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} + '@shikijs/types@3.23.0': + resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} + '@shikijs/types@4.0.2': resolution: {integrity: sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==} engines: {node: '>=20'} @@ -1852,6 +2047,184 @@ packages: resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + '@tiptap/core@3.27.3': + resolution: {integrity: sha512-TJj5929M96C1KlH796wS8MywfHDh49RhmakOyzyMMc9pFmRj9UXi1gj0TCXgsZtjEOG7B+m/DRvNOvnuvR9kmg==} + peerDependencies: + '@tiptap/pm': 3.27.3 + + '@tiptap/extension-blockquote@3.27.3': + resolution: {integrity: sha512-VGoVMcqcGkkoduzEqQ70ZK5OOHBDn5iYeHJSgkvNoSHzYHl0CaKoWxoDKJjSWC5DAM4mBU+tXTlsiUp3evRMfA==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extension-bold@3.27.3': + resolution: {integrity: sha512-pchbycFppBqBmvk+OxrQLIPZLNd3rNbcm7zOa+OTjluphpAcsJ6AmHBmiRhJUYWitV6/SA+0nujcaWxBp5hNcQ==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extension-bubble-menu@3.27.3': + resolution: {integrity: sha512-PKSM9g8BXzO0Lxm2gOin7FAFvxO6T0QvlXTXVke/GJn/sR1tEz7w5ybsvweytUPmSliUc601pfIUOHKEhIVC2Q==} + peerDependencies: + '@tiptap/core': 3.27.3 + '@tiptap/pm': 3.27.3 + + '@tiptap/extension-bullet-list@3.27.3': + resolution: {integrity: sha512-owQW6mcgnYgQU1z5BqmslcjZFBUm1SGM/Ax++4R6XelIt/7ol6uSTjzjAzum+ASW7UlBbuJHuSgRjl8cA+RGkg==} + peerDependencies: + '@tiptap/extension-list': 3.27.3 + + '@tiptap/extension-code-block@3.27.3': + resolution: {integrity: sha512-3CVnzkpGoqqI5KaXI9l9PMwLkx34SYY63tpeo0I0QjDk4LU+JTAQDTPJFSwB4zTsHZ7ZFMU0jjasFOZ1kZRVgw==} + peerDependencies: + '@tiptap/core': 3.27.3 + '@tiptap/pm': 3.27.3 + + '@tiptap/extension-code@3.27.3': + resolution: {integrity: sha512-T7JF10Y3k7fyVujXXLVubdUh7fctgBUoiuxbvjotpltg1U/mPbOcT0UW/uif9j3H8TFvAwNApVw3x8bwwFUakA==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extension-document@3.27.3': + resolution: {integrity: sha512-PR25MRv56Nm4ETVLwA8nAh/0RrVdvD4D2nxnAC8kUkxz1WOYDaqTfPqqEeSWDoUUTUp1I1xzDkD4x0gEnAlmZA==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extension-dropcursor@3.27.3': + resolution: {integrity: sha512-XsL0Ziual+ynXyx5JgLb0KIOShlMN3MW7+GQvf9PGRb1vOB7IOTRFDxMPrxDWcFIZ6WWMWSrbkCLOKHStt1BWg==} + peerDependencies: + '@tiptap/extensions': 3.27.3 + + '@tiptap/extension-floating-menu@3.27.3': + resolution: {integrity: sha512-qL+g1Z6MqZvYG4mHTPwub9II2fWZY+2I5VFfV8fzqy1HchBOyY6Df0mRKDNb0bmjBdFabIXnswz3iqLx3mDTbw==} + peerDependencies: + '@floating-ui/dom': ^1.0.0 + '@tiptap/core': 3.27.3 + '@tiptap/pm': 3.27.3 + + '@tiptap/extension-gapcursor@3.27.3': + resolution: {integrity: sha512-MVBqzwYrDOttkn2GOrvvKTDCymfSS2VGSKpahcKKhge5mweSDiqko2X1vBDnMF8aVW3WxIFfDMmO4VMmh8HDZA==} + peerDependencies: + '@tiptap/extensions': 3.27.3 + + '@tiptap/extension-hard-break@3.27.3': + resolution: {integrity: sha512-cySObJITR2CRrWII87mI2LJ12wEETTnxt2p1vvC6ZtUmKnB50fOu+ux8ZEt6KYNocIOtrEZthNFzTOx7R7UtrQ==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extension-heading@3.27.3': + resolution: {integrity: sha512-QHXnsNic6iId8pnsFZ8z4PkX5L+HCHa/D7rAi3nNWtPlSIAOxo4nKrALcB5/tHmY+XL8kEXKH3nsNLNEDLCYPg==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extension-horizontal-rule@3.27.3': + resolution: {integrity: sha512-sNCuo0+Q001B5XTVWY+ULpWXQqtBNRmAqXxAexZl44bx3rDqHG8OzjwT4EM0LIj2+BYVbdqwaJ1vfQbZVEEbig==} + peerDependencies: + '@tiptap/core': 3.27.3 + '@tiptap/pm': 3.27.3 + + '@tiptap/extension-image@3.27.3': + resolution: {integrity: sha512-3OVLRH54Xkh9yrI5oGIempuqZkhLG1plyJBRnapx0N8j9IjEImOLF78kPYoAZzaBuU78M3Zk/E7HQZgmnaNRBg==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extension-italic@3.27.3': + resolution: {integrity: sha512-7VpVi2vn8kGFAc/HLrt96J/E6+LXOGKn8xLhJS863t150yLIG3EPQLA1h+G5O6eo+/w+9YokvJAAJoeDihj1Jg==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extension-link@3.27.3': + resolution: {integrity: sha512-iXmu1tJ/3vP60c9d+zfO3+X64vod2EyBrM1qeufecAtWA6t0bT9tYeka0Zq6qDRGsZK5zViO9F2lsY7eHXiYuA==} + peerDependencies: + '@tiptap/core': 3.27.3 + '@tiptap/pm': 3.27.3 + + '@tiptap/extension-list-item@3.27.3': + resolution: {integrity: sha512-UddhVaQ7+V9IfQVVE8AJLNzSmyaaNpZPQsoPQxFNlJyOFxD6RwSTT8L4rb/TwbUctxSFWpyd1J7exzf33Ony/g==} + peerDependencies: + '@tiptap/extension-list': 3.27.3 + + '@tiptap/extension-list-keymap@3.27.3': + resolution: {integrity: sha512-GZPVg4QCFm41yTMPEPeTlH2odNeQwRuWHY/pt3pI5LsfipQ4kDBv6h9we928vJQUnU2Gg9Y3cL5iRbmXIWWTUA==} + peerDependencies: + '@tiptap/extension-list': 3.27.3 + + '@tiptap/extension-list@3.27.3': + resolution: {integrity: sha512-52rcaSzYjtVGUrNkdB8k1Bw/rId2lBirrWMvmnBLsieoeFd8zo8ow5zkwV057BYSgWXfnMAV7GOpDyq2IoSD9A==} + peerDependencies: + '@tiptap/core': 3.27.3 + '@tiptap/pm': 3.27.3 + + '@tiptap/extension-mention@3.27.3': + resolution: {integrity: sha512-yN698bjYxYh5Ugv7qUUAQHJ8ZiVtNcVj5YZRruhjf/LhZQRtq9Xy8T7JipiS/MBZ/Zaf0qJkXM0n9IrAdn48iA==} + peerDependencies: + '@tiptap/core': 3.27.3 + '@tiptap/pm': 3.27.3 + '@tiptap/suggestion': 3.27.3 + + '@tiptap/extension-ordered-list@3.27.3': + resolution: {integrity: sha512-oHYoE65WfRSM5tCcXi8MtQmzPxz83E2qw0pa2yHBKwr9xCCQUu8vJHJE+EJGduWdaNImv43+6/6kVMeYYbXRKg==} + peerDependencies: + '@tiptap/extension-list': 3.27.3 + + '@tiptap/extension-paragraph@3.27.3': + resolution: {integrity: sha512-G5XPCN7lm0nULYPelJC2eUbKbt1q97j67e/HSWxwMYEXhceec5eNAtVfpDCRyXNO9osyBi2kXqLv/IQtxbch9A==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extension-strike@3.27.3': + resolution: {integrity: sha512-dp6Rs3I4zLVJPvAw2Q9yrNuYKcX5LTONH3/oyULvGsrqq5DKz7pqscfwhwnDSzrgm/3aCz6B9r1BVHlYI/DXlA==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extension-text-align@3.27.3': + resolution: {integrity: sha512-yyhlwRz0Eh6xQCn+GtTDWUGqxGajT02Qf8zBN/3eZQtl3EZ2xrI8lvfLmcV9SAW0srgMd+5hX0CVV+zKeXuxeg==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extension-text-style@3.27.3': + resolution: {integrity: sha512-oim4RqFtMBCA4N+J8f8dTFFYZrwyfmXLxLL5SvQkn+kkpfGLv8PqJCnJ4uHxsnHXDNsWHBtVVhfTGUABZsTEHg==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extension-text@3.27.3': + resolution: {integrity: sha512-wSatZ/bop0pleeC18nF90zvWWEoRe/ewZncvm8LjcMrXwq41kTEs3j7nZflMYAh7X8fZvu00UIMeEyCNJl+5Yg==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extension-underline@3.27.3': + resolution: {integrity: sha512-YH7ka/Rp7ZwlzTuQCcs0OZ4CMSx/P/MzbseQKxKebEIZreWaKMZAaED97Fnu0dA66VlreD4/1C7xHJy84ovamg==} + peerDependencies: + '@tiptap/core': 3.27.3 + + '@tiptap/extensions@3.27.3': + resolution: {integrity: sha512-IA2QKUVJgzUPEhhkUfr6P5u5GFVfhiApiEaaHXBz07saL2c4HNoVs2RC18QlZDCtLNKrPR1mUScr72u7uYs+YQ==} + peerDependencies: + '@tiptap/core': 3.27.3 + '@tiptap/pm': 3.27.3 + + '@tiptap/pm@3.27.3': + resolution: {integrity: sha512-ppiG57RxM3HSHHgcHT0hP6Ib4P56Sd5itxdV4w0hIGHKPGyLLKiAkYp+htIHa9T7IvjMdaqxIlsfyV3ZKsS1sw==} + + '@tiptap/react@3.27.3': + resolution: {integrity: sha512-lanXxMScw/LevbRFuFw5MoQJ1grmHUDszwph2VIk4l2U5e/EDIw3rr4CeDME6Z4isVReD6zccMFVShkHqsv+jg==} + peerDependencies: + '@tiptap/core': 3.27.3 + '@tiptap/pm': 3.27.3 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + '@types/react-dom': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@tiptap/starter-kit@3.27.3': + resolution: {integrity: sha512-xX3baFqiC30skntdhxUUvyJo755ON9c1pE83+2Wiq2g+Qnffg9knUuLCZStHoZZ318yB0aBsKAMvHWLtYDo8AA==} + + '@tiptap/suggestion@3.27.3': + resolution: {integrity: sha512-2sSpjK3j50n9TLC8yB1PJ/TkL9Ozh1dhkYcl6ZKpXH0FBDauytPhPaZOrcTlYR4f9MXUpMuUcbZ4R5dplhgZ2Q==} + peerDependencies: + '@floating-ui/dom': ^1.0.0 + '@tiptap/core': 3.27.3 + '@tiptap/pm': 3.27.3 + '@tsconfig/node10@1.0.12': resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} @@ -1927,6 +2300,9 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + '@types/jasmine@3.10.19': + resolution: {integrity: sha512-Bz6P2XoeIN13AhvVe0nS7+m2RfxVllETDjFQ/s6lyEwEfIVpPCc1Q8vPdFopFAOU5mzrU1zypXJ1xGDl5EVU9Q==} + '@types/jest@29.5.14': resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} @@ -1957,6 +2333,14 @@ packages: '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + '@types/react-copy-to-clipboard@5.0.7': + resolution: {integrity: sha512-Gft19D+as4M+9Whq1oglhmK49vqPhcLzk8WfvfLvaYMIPYanyfLy0+CwFucMJfdKoSFyySPmkkWn8/E6voQXjQ==} + + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + '@types/react@18.3.28': resolution: {integrity: sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==} @@ -1972,12 +2356,18 @@ packages: '@types/tapable@2.2.7': resolution: {integrity: sha512-D6QzACV9vNX3r8HQQNTOnpG+Bv1rko+yEA82wKs3O9CQ5+XW7HI7TED17/UE7+5dIxyxZIWTxKbsBeF6uKFCwA==} + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} @@ -2274,6 +2664,9 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} + async-validator@3.5.2: + resolution: {integrity: sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -2331,9 +2724,15 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + bezier-easing@2.1.0: + resolution: {integrity: sha512-gbIqZ/eslnUFC1tjEvtz0sgx+xTK20wDnYMIA27VA04R7w6xxXQPZDbibjA9DTWZRA2CXtwHykkVzlCaAJAZig==} + bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -2453,9 +2852,9 @@ packages: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} @@ -2468,6 +2867,9 @@ packages: cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2514,6 +2916,9 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + compute-scroll-into-view@1.0.20: + resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==} + compute-scroll-into-view@3.1.1: resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} @@ -2539,6 +2944,10 @@ packages: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} + copy-text-to-clipboard@2.2.0: + resolution: {integrity: sha512-WRvoIdnTs1rgPMkgA2pUOa/M4Enh2uzCwdKsOMYNAJiz/4ZvEJgmbF4OmninPmlFdAWisfeh0tH+Cpf7ni3RqQ==} + engines: {node: '>=6'} + copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} @@ -2671,6 +3080,15 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} + date-fns-tz@1.3.8: + resolution: {integrity: sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ==} + peerDependencies: + date-fns: '>=2.0.0' + + date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + dayjs@1.11.13: resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} @@ -2786,6 +3204,9 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} + dompurify@3.4.12: + resolution: {integrity: sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==} + domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} @@ -2815,6 +3236,10 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -2985,9 +3410,16 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-copy@3.0.2: + resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-equals@5.4.1: + resolution: {integrity: sha512-DjlFSM5Pk9cGcL0q5QXl66eGzx0N6szNgaswwc5ZphlBohjTVJSnGgI+rJVOgOi65qUoQnDZN4nDqi33udtydQ==} + engines: {node: '>=6.0.0'} + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -3667,6 +4099,9 @@ packages: engines: {node: '>=6'} hasBin: true + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} @@ -3692,10 +4127,17 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + linkifyjs@4.3.3: + resolution: {integrity: sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg==} + loader-runner@4.3.1: resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} engines: {node: '>=6.11.5'} + loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3715,6 +4157,13 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lottie-web@5.13.0: + resolution: {integrity: sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==} + loupe@3.2.1: resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} @@ -3829,6 +4278,9 @@ packages: medium-zoom@1.1.0: resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==} + memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -4028,11 +4480,6 @@ packages: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - nanoid@3.3.15: resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4125,6 +4572,9 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + orderedmap@2.1.1: + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} + own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -4396,10 +4846,6 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.10: - resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.17: resolution: {integrity: sha512-J7EF+8X+CzRPaJPOv9Ck2wNWJvGnnl3PcNPAdGg6GTLjyVpyQ0yATMSXRFRV01BviT/9Gwuc3rjEyJbDJG9a4w==} engines: {node: ^10 || ^12 || >=14} @@ -4413,13 +4859,59 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + prosemirror-changeset@2.4.1: + resolution: {integrity: sha512-96WBLhOaYhJ+kPhLg3uW359Tz6I/MfcrQfL4EGv4SrcqKEMC1gmoGrXHecPE8eOwTVCJ4IwgfzM8fFad25wNfw==} + + prosemirror-commands@1.7.1: + resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==} + + prosemirror-dropcursor@1.8.3: + resolution: {integrity: sha512-FoYbsJR8gK+DGlqhNoE29Loa38eIZPzQRIb1VMaDNBoo4OLP6vVof/jR8qFY/6XvUd6Dhug8MDCHl2a/h8RTfQ==} + + prosemirror-gapcursor@1.4.1: + resolution: {integrity: sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==} + + prosemirror-history@1.5.0: + resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==} + + prosemirror-inputrules@1.5.1: + resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==} + + prosemirror-keymap@1.2.3: + resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} + + prosemirror-model@1.25.11: + resolution: {integrity: sha512-QWg9RhnpLlogAmp3p96uEFrE5txQpFynd4vhBAELkwgOCWQs/X0yCzB3/hrHqiPwf91RG5KyWq6553zs9JqIOQ==} + + prosemirror-schema-list@1.5.1: + resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} + + prosemirror-state@1.4.4: + resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==} + + prosemirror-tables@1.8.5: + resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==} + + prosemirror-transform@1.12.0: + resolution: {integrity: sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==} + + prosemirror-view@1.42.1: + resolution: {integrity: sha512-rRqzZnRgkyh69XoOMrfFJHwauHscLBmHbq772kwbic1ymQAM8gXjzEbJse5j1ep2UO2HRIAQL0bY3kZ/RoqjVw==} + proxy-from-env@2.1.0: resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} engines: {node: '>=10'} @@ -4435,6 +4927,11 @@ packages: pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + qrcode.react@4.2.0: + resolution: {integrity: sha512-QpgqWi8rD9DsS9EP3z7BT+5lY5SFhsqGjpgW5DY/i3mK4M9DTBNz3ErMi8BWYEfI3L0d8GIbGmcdFAS1uIRGjA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} @@ -4449,11 +4946,25 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + react-copy-to-clipboard@5.1.1: + resolution: {integrity: sha512-s+HrzLyJBxrpGTYXF15dTgMjAJpEPZT/Yp6NytAtZMRngejxt6Pt5WrfFxLAcsqUDU6sY1Jz6tyHwIicE1U2Xg==} + peerDependencies: + react: '>=15.3.0' + react-dom@19.2.5: resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==} peerDependencies: react: ^19.2.5 + react-draggable@4.7.0: + resolution: {integrity: sha512-kTpANmKWVnFXiZ76Ag2ZowiFStuBYnJ606PI1TbUsOg29/400/JNIxI9+CuenhiAqFuXWJffz6F4UI3R51kUug==} + peerDependencies: + react: '>= 16.3.0' + react-dom: '>= 16.3.0' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} @@ -4475,6 +4986,12 @@ packages: peerDependencies: react: '>=19' + react-resizable@3.2.0: + resolution: {integrity: sha512-3NKQ0SLZV7rs3LQHeXlOzDSRQfFrkX6TVet77/Qk03zqiZyee37b7N8/gwDJAA8UUjRz7PdWCCy49hcso45SMQ==} + peerDependencies: + react: '>= 16.3' + react-dom: '>= 16.3' + react-router-dom@7.14.1: resolution: {integrity: sha512-ZkrQuwwhGibjQLqH1eCdyiZyLWglPxzxdl5tgwgKEyCSGC76vmAjleGocRe3J/MLfzMUIKwaFJWpFVJhK3d2xA==} engines: {node: '>=20.0.0'} @@ -4492,13 +5009,20 @@ packages: react-dom: optional: true + react-window@1.8.11: + resolution: {integrity: sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ==} + engines: {node: '>8.0.0'} + peerDependencies: + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react@19.2.5: resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} engines: {node: '>=0.10.0'} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} @@ -4622,6 +5146,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rope-sequence@1.3.4: + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} @@ -4666,118 +5193,118 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-embedded-all-unknown@1.97.3: - resolution: {integrity: sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg==} + sass-embedded-all-unknown@1.100.0: + resolution: {integrity: sha512-auFtXY/kwYILmSVjtBDwyj0axcLbYYiffOKWoaXHnI5bsYwiRbBh3EneR1rpbX2ZIZCrwX93i5pxKLTZF/662Q==} cpu: ['!arm', '!arm64', '!riscv64', '!x64'] - sass-embedded-android-arm64@1.97.3: - resolution: {integrity: sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA==} + sass-embedded-android-arm64@1.100.0: + resolution: {integrity: sha512-W+Ru9JwTnfU0UX3jSZcbqFdtKFMcYdfFwytc57h2DgnqCOIiAqI2E06mABZBZC+r3LwXCBuS5GbXAGeVgvVDkA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [android] - sass-embedded-android-arm@1.97.3: - resolution: {integrity: sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg==} + sass-embedded-android-arm@1.100.0: + resolution: {integrity: sha512-70f3HgX2pFNmzpGQ86n5e6QfWn2fP4QUQGfFQK0P1XH73ZLIzLo2YqygrGKGKeeqtc5eU2Wl1/xQzhzuKnO4kw==} engines: {node: '>=14.0.0'} cpu: [arm] os: [android] - sass-embedded-android-riscv64@1.97.3: - resolution: {integrity: sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA==} + sass-embedded-android-riscv64@1.100.0: + resolution: {integrity: sha512-icU3o0V/uCSytSpf+tX5Lf51BvyQEbLzDUJfUi9etSauYBGHpPKkdtdZH0si4v98phq11Kl8rSV1SggksxF1Hg==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [android] - sass-embedded-android-x64@1.97.3: - resolution: {integrity: sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw==} + sass-embedded-android-x64@1.100.0: + resolution: {integrity: sha512-mevF9VQk6gEYByy8+jusaHGmd7Usb2ytX/DsEOd0JtOGCtcf1kh575xJ6OUBDIcJ15uLnbau/0iy1eP6WVBvWA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [android] - sass-embedded-darwin-arm64@1.97.3: - resolution: {integrity: sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA==} + sass-embedded-darwin-arm64@1.100.0: + resolution: {integrity: sha512-1PVlYi61POo93IT/FfrG1mc1tAHxeSTyUALF2aOFmXGWjVXr3bQzEQiBGCOvQbj/ix+5hNyXFXcEMEyKvtUJJA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - sass-embedded-darwin-x64@1.97.3: - resolution: {integrity: sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA==} + sass-embedded-darwin-x64@1.100.0: + resolution: {integrity: sha512-x97o3JnGyImZNCIVs9wQHJUE5QCvmVIKaH1cwrz/5dK7OT1FpeNiW+u9TUomP9hG6Ekjd8EL8NBHpxTfIhdjmg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - sass-embedded-linux-arm64@1.97.3: - resolution: {integrity: sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg==} + sass-embedded-linux-arm64@1.100.0: + resolution: {integrity: sha512-Dwjmj8Z6VRy7rAi53JAdEwIyUjpfl7PhpSc2/LpQPQx+aO5Dp7Spaipkax0ufJl1SoDUdchCsM4y/88YaluorQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-arm@1.97.3: - resolution: {integrity: sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA==} + sass-embedded-linux-arm@1.100.0: + resolution: {integrity: sha512-9Ul7O1eKrc5YlhwWjkp8tZPSe3UEwSZ1uwUZOQom1HL0pRlBA6F/IlGZYFTLwnHMIP1fc77MMNaBRfc05mKMpw==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-arm64@1.97.3: - resolution: {integrity: sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw==} + sass-embedded-linux-musl-arm64@1.100.0: + resolution: {integrity: sha512-XpACJB2KjSLjf2e9uuvGVdOURsoNrFqgRiihhXyUHK9W0t3LIHb7z5MA/7XGPIT9bWSOO2zyw+rH/FHtDV/Yrg==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-musl-arm@1.97.3: - resolution: {integrity: sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg==} + sass-embedded-linux-musl-arm@1.100.0: + resolution: {integrity: sha512-sl0JgbGloPyJg66XXx5UDSDScZ0oU85DpMQU4JU/sCUCFj1Z8zZ69SJWKTCNE4/jwnce7WI2zPCV5AG+RHOZJw==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-riscv64@1.97.3: - resolution: {integrity: sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA==} + sass-embedded-linux-musl-riscv64@1.100.0: + resolution: {integrity: sha512-ShvI0Kx04mwoCARwZ0UjiT97isQvzO80tAt91zmFyHLN9kelc/IrQi940farSm2xQVPCKdeVyeG0ekBsokSpYQ==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-musl-x64@1.97.3: - resolution: {integrity: sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw==} + sass-embedded-linux-musl-x64@1.100.0: + resolution: {integrity: sha512-TDBCRWNuS4RDLQXvRc1gjZlWiWTWaWGp0Bwu/IKwJxov81lsvrCs3TihTyNXtW7V5aoN4Ky3r0QOkNb3mwmBnA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-linux-riscv64@1.97.3: - resolution: {integrity: sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA==} + sass-embedded-linux-riscv64@1.100.0: + resolution: {integrity: sha512-j4ENJGOheO+fm3j/yorLxCjBP6/XskrZx7dTLlT+lXYwN/qqCqoA/gsNLI0McS3DFM6GBwPiffzWsdWS8t6sEQ==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-x64@1.97.3: - resolution: {integrity: sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg==} + sass-embedded-linux-x64@1.100.0: + resolution: {integrity: sha512-0vUSN8j0WGtCJIOPh//EmUvYGHW0QOe5iul8qyhPk50MAcw49MA0r34AhftjDdx94ILPF6vApFs0gwHPQRlpVA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-unknown-all@1.97.3: - resolution: {integrity: sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q==} + sass-embedded-unknown-all@1.100.0: + resolution: {integrity: sha512-c+naBgWId4MIpToXcI0DgqetjdAkwTTAxFAuOaBz7HUXLdyG1oZRrEvSsbe41nEdQOKH0vgofVFCeSQgoXOG9A==} os: ['!android', '!darwin', '!linux', '!win32'] - sass-embedded-win32-arm64@1.97.3: - resolution: {integrity: sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw==} + sass-embedded-win32-arm64@1.100.0: + resolution: {integrity: sha512-iE+yxj+hUXwwbqpHkXxgAWTzeRfcWxJ7SSTQEPMk48lwq3oCrWLlz5sQuWHbuTK/i0GKQfROdP+hOmPi89yjUg==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - sass-embedded-win32-x64@1.97.3: - resolution: {integrity: sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw==} + sass-embedded-win32-x64@1.100.0: + resolution: {integrity: sha512-qI4F8MI7/KYoy9NdjJfhSspG42WPkADSNDvwEV7qWvCSFC83koJssRsKO2/PfY+niZz6BG65Ic/D+A11h959hw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - sass-embedded@1.97.3: - resolution: {integrity: sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA==} + sass-embedded@1.100.0: + resolution: {integrity: sha512-Ut8wlQSk19tm7jMK6mz6cF1+e+E7tUnW2tM02zQDPnOTcVbV8qCQG8UWxZkkNlY50+hV3hqP24OOkUlMz8xBpw==} engines: {node: '>=16.0.0'} hasBin: true - sass@1.97.3: - resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==} - engines: {node: '>=14.0.0'} + sass@1.100.0: + resolution: {integrity: sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==} + engines: {node: '>=20.19.0'} hasBin: true sax@1.6.0: @@ -4795,6 +5322,9 @@ packages: resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} + scroll-into-view-if-needed@2.2.31: + resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==} + scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} @@ -5042,6 +5572,11 @@ packages: engines: {node: '>=16'} hasBin: true + swr@2.4.2: + resolution: {integrity: sha512-ej644Y2bvkIajfR32KGeSSdBXQW+ScjGjkybZgSE7kFpk9eGnV44XY9FJylXi+W75pavSX1PVNB57W5EbhGIYw==} + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -5341,9 +5876,18 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + utility-types@3.11.0: + resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} + engines: {node: '>= 4'} + utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -5485,6 +6029,9 @@ packages: jsdom: optional: true + vscode-icons-js@11.6.1: + resolution: {integrity: sha512-rht18IFYv117UlqBn6o9j258SOtwhDBmtVrGwdoLPpSj6Z5LKQIzarQDd/tCRWneU68KEX25+nsh48tAoknKNw==} + vue-lynx@0.4.0: resolution: {integrity: sha512-6QyzeLl+GY4UjcBR6FzhdyppIjNLr5nxIM/Kx7TLnmhEEGyunvTbUfQsA6k227BjZ6s2oTRP1jQ1uqBpf5XKQA==} engines: {node: '>=18'} @@ -5505,6 +6052,9 @@ packages: typescript: optional: true + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -5712,7 +6262,7 @@ snapshots: '@babel/code-frame@7.26.2': dependencies: - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 @@ -5888,6 +6438,8 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/runtime@7.29.7': {} + '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 @@ -5924,8 +6476,7 @@ snapshots: dependencies: css-tree: 3.2.1 - '@bufbuild/protobuf@2.11.0': - optional: true + '@bufbuild/protobuf@2.11.0': {} '@clack/core@0.4.2': dependencies: @@ -5988,33 +6539,151 @@ snapshots: '@csstools/css-tokenizer@4.0.0': {} - '@emnapi/core@1.9.2': + '@dnd-kit/accessibility@3.1.1(react@19.2.5)': dependencies: - '@emnapi/wasi-threads': 1.2.1 + react: 19.2.5 tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.9.2': + '@dnd-kit/core@6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: + '@dnd-kit/accessibility': 3.1.1(react@19.2.5) + '@dnd-kit/utilities': 3.2.2(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) tslib: 2.8.1 - optional: true - '@emnapi/wasi-threads@1.2.1': + '@dnd-kit/sortable@7.0.2(@dnd-kit/core@6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)': dependencies: + '@dnd-kit/core': 6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@dnd-kit/utilities': 3.2.2(react@19.2.5) + react: 19.2.5 tslib: 2.8.1 - optional: true - '@esbuild/aix-ppc64@0.27.7': - optional: true + '@dnd-kit/utilities@3.2.2(react@19.2.5)': + dependencies: + react: 19.2.5 + tslib: 2.8.1 - '@esbuild/android-arm64@0.27.7': - optional: true + '@douyinfe/semi-animation-react@2.101.0': + dependencies: + '@douyinfe/semi-animation': 2.101.0 + '@douyinfe/semi-animation-styled': 2.101.0 + classnames: 2.5.1 - '@esbuild/android-arm@0.27.7': - optional: true + '@douyinfe/semi-animation-styled@2.101.0': {} - '@esbuild/android-x64@0.27.7': - optional: true + '@douyinfe/semi-animation@2.101.0': + dependencies: + bezier-easing: 2.1.0 + + '@douyinfe/semi-foundation@2.101.0': + dependencies: + '@douyinfe/semi-animation': 2.101.0 + '@douyinfe/semi-json-viewer-core': 2.101.0 + '@mdx-js/mdx': 3.1.1 + async-validator: 3.5.2 + classnames: 2.5.1 + date-fns: 2.30.0 + date-fns-tz: 1.3.8(date-fns@2.30.0) + fast-copy: 3.0.2 + lodash: 4.18.1 + lottie-web: 5.13.0 + memoize-one: 5.2.1 + prismjs: 1.30.0 + remark-gfm: 4.0.1 + scroll-into-view-if-needed: 2.2.31 + transitivePeerDependencies: + - supports-color + + '@douyinfe/semi-icons@2.101.0(react@19.2.5)': + dependencies: + classnames: 2.5.1 + react: 19.2.5 + + '@douyinfe/semi-illustrations@2.101.0(react@19.2.5)': + dependencies: + react: 19.2.5 + + '@douyinfe/semi-json-viewer-core@2.101.0': + dependencies: + jsonc-parser: 3.3.1 + + '@douyinfe/semi-theme-default@2.101.0': {} + + '@douyinfe/semi-ui@2.101.0(@floating-ui/dom@1.8.0)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@dnd-kit/core': 6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@dnd-kit/sortable': 7.0.2(@dnd-kit/core@6.3.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) + '@dnd-kit/utilities': 3.2.2(react@19.2.5) + '@douyinfe/semi-animation': 2.101.0 + '@douyinfe/semi-animation-react': 2.101.0 + '@douyinfe/semi-foundation': 2.101.0 + '@douyinfe/semi-icons': 2.101.0(react@19.2.5) + '@douyinfe/semi-illustrations': 2.101.0(react@19.2.5) + '@douyinfe/semi-theme-default': 2.101.0 + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + '@tiptap/extension-document': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-hard-break': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-image': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-mention': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) + '@tiptap/extension-paragraph': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-text': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-text-align': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-text-style': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extensions': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + '@tiptap/pm': 3.27.3 + '@tiptap/react': 3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@tiptap/starter-kit': 3.27.3 + async-validator: 3.5.2 + classnames: 2.5.1 + copy-text-to-clipboard: 2.2.0 + date-fns: 2.30.0 + date-fns-tz: 1.3.8(date-fns@2.30.0) + fast-copy: 3.0.2 + jsonc-parser: 3.3.1 + lodash: 4.18.1 + prop-types: 15.8.1 + prosemirror-state: 1.4.4 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-resizable: 3.2.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react-window: 1.8.11(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + scroll-into-view-if-needed: 2.2.31 + utility-types: 3.11.0 + transitivePeerDependencies: + - '@floating-ui/dom' + - '@tiptap/suggestion' + - '@types/react' + - '@types/react-dom' + - supports-color + + '@emnapi/core@1.9.2': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.9.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-x64@0.27.7': + optional: true '@esbuild/darwin-arm64@0.27.7': optional: true @@ -6084,6 +6753,17 @@ snapshots: '@exodus/bytes@1.15.0': {} + '@floating-ui/core@1.8.0': + dependencies: + '@floating-ui/utils': 0.2.12 + + '@floating-ui/dom@1.8.0': + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 + + '@floating-ui/utils@0.2.12': {} + '@hongzhiyuan/preact@10.28.0-fc4af453': {} '@isaacs/cliui@8.0.2': @@ -6350,6 +7030,21 @@ snapshots: dependencies: css-tree: 3.2.1 + '@lynx-js/go-web@0.5.1(@douyinfe/semi-icons@2.101.0(react@19.2.5))(@douyinfe/semi-ui@2.101.0(@floating-ui/dom@1.8.0)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(@lynx-js/web-core@0.20.4(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1))(@rspress/core@2.0.9(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.47.0)(micromark-util-types@2.0.2)(micromark@4.0.2))(@shikijs/transformers@3.23.0)(qrcode.react@4.2.0(react@19.2.5))(react-copy-to-clipboard@5.1.1(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(swr@2.4.2(react@19.2.5))(vscode-icons-js@11.6.1)': + dependencies: + '@douyinfe/semi-icons': 2.101.0(react@19.2.5) + '@douyinfe/semi-ui': 2.101.0(@floating-ui/dom@1.8.0)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@lynx-js/web-core': 0.20.4(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1) + '@shikijs/transformers': 3.23.0 + qrcode.react: 4.2.0(react@19.2.5) + react: 19.2.5 + react-copy-to-clipboard: 5.1.1(react@19.2.5) + react-dom: 19.2.5(react@19.2.5) + swr: 2.4.2(react@19.2.5) + vscode-icons-js: 11.6.1 + optionalDependencies: + '@rspress/core': 2.0.9(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.47.0)(micromark-util-types@2.0.2)(micromark@4.0.2) + '@lynx-js/lynx-core@0.1.3': {} '@lynx-js/offscreen-document@0.1.4': {} @@ -6481,6 +7176,15 @@ snapshots: '@lynx-js/web-worker-rpc': 0.19.8 '@lynx-js/web-worker-runtime': 0.19.8(@lynx-js/lynx-core@0.1.3) + '@lynx-js/web-core@0.20.4(@lynx-js/lynx-core@0.1.3)(tslib@2.8.1)': + dependencies: + '@lynx-js/web-elements': 0.12.2(tslib@2.8.1) + '@lynx-js/web-worker-rpc': 0.20.4 + wasm-feature-detect: 1.8.0 + optionalDependencies: + '@lynx-js/lynx-core': 0.1.3 + tslib: 2.8.1 + '@lynx-js/web-core@0.7.1(@lynx-js/web-elements@0.7.7(tslib@2.8.1))': dependencies: '@lynx-js/web-constants': 0.7.1 @@ -6500,6 +7204,12 @@ snapshots: dependencies: tslib: 2.8.1 + '@lynx-js/web-elements@0.12.2(tslib@2.8.1)': + dependencies: + dompurify: 3.4.12 + markdown-it: 14.1.1 + tslib: 2.8.1 + '@lynx-js/web-elements@0.7.7(tslib@2.8.1)': dependencies: '@lynx-js/web-elements-reactive': 0.2.2 @@ -6525,6 +7235,8 @@ snapshots: '@lynx-js/web-worker-rpc@0.19.8': {} + '@lynx-js/web-worker-rpc@0.20.4': {} + '@lynx-js/web-worker-rpc@0.7.1': {} '@lynx-js/web-worker-runtime@0.19.8(@lynx-js/lynx-core@0.1.3)': @@ -6838,6 +7550,16 @@ snapshots: transitivePeerDependencies: - webpack-hot-middleware + '@rsbuild/plugin-sass@1.5.3(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))': + dependencies: + deepmerge: 4.3.1 + loader-utils: 2.0.4 + postcss: 8.5.17 + reduce-configs: 1.1.2 + sass-embedded: 1.100.0 + optionalDependencies: + '@rsbuild/core': 2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0) + '@rsbuild/plugin-vue@1.2.9(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3))': dependencies: rspack-vue-loader: 17.5.1(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3)) @@ -7217,6 +7939,13 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 + '@shikijs/core@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + '@shikijs/core@4.0.2': dependencies: '@shikijs/primitive': 4.0.2 @@ -7278,11 +8007,21 @@ snapshots: dependencies: '@shikijs/types': 4.0.2 + '@shikijs/transformers@3.23.0': + dependencies: + '@shikijs/core': 3.23.0 + '@shikijs/types': 3.23.0 + '@shikijs/types@1.29.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + '@shikijs/types@3.23.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + '@shikijs/types@4.0.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 @@ -7317,6 +8056,202 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 + '@tiptap/core@3.27.3(@tiptap/pm@3.27.3)': + dependencies: + '@tiptap/pm': 3.27.3 + + '@tiptap/extension-blockquote@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extension-bold@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extension-bubble-menu@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': + dependencies: + '@floating-ui/dom': 1.8.0 + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + '@tiptap/pm': 3.27.3 + optional: true + + '@tiptap/extension-bullet-list@3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/extension-list': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + + '@tiptap/extension-code-block@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + '@tiptap/pm': 3.27.3 + + '@tiptap/extension-code@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extension-document@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extension-dropcursor@3.27.3(@tiptap/extensions@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/extensions': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + + '@tiptap/extension-floating-menu@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': + dependencies: + '@floating-ui/dom': 1.8.0 + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + '@tiptap/pm': 3.27.3 + optional: true + + '@tiptap/extension-gapcursor@3.27.3(@tiptap/extensions@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/extensions': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + + '@tiptap/extension-hard-break@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extension-heading@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extension-horizontal-rule@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + '@tiptap/pm': 3.27.3 + + '@tiptap/extension-image@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extension-italic@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extension-link@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + '@tiptap/pm': 3.27.3 + linkifyjs: 4.3.3 + + '@tiptap/extension-list-item@3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/extension-list': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + + '@tiptap/extension-list-keymap@3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/extension-list': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + + '@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + '@tiptap/pm': 3.27.3 + + '@tiptap/extension-mention@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)(@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + '@tiptap/pm': 3.27.3 + '@tiptap/suggestion': 3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + + '@tiptap/extension-ordered-list@3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/extension-list': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + + '@tiptap/extension-paragraph@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extension-strike@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extension-text-align@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extension-text-style@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extension-text@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extension-underline@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + + '@tiptap/extensions@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + '@tiptap/pm': 3.27.3 + + '@tiptap/pm@3.27.3': + dependencies: + prosemirror-changeset: 2.4.1 + prosemirror-commands: 1.7.1 + prosemirror-dropcursor: 1.8.3 + prosemirror-gapcursor: 1.4.1 + prosemirror-history: 1.5.0 + prosemirror-inputrules: 1.5.1 + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.11 + prosemirror-schema-list: 1.5.1 + prosemirror-state: 1.4.4 + prosemirror-tables: 1.8.5 + prosemirror-transform: 1.12.0 + prosemirror-view: 1.42.1 + + '@tiptap/react@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + '@tiptap/pm': 3.27.3 + '@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.1 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + use-sync-external-store: 1.6.0(react@19.2.5) + optionalDependencies: + '@tiptap/extension-bubble-menu': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + '@tiptap/extension-floating-menu': 3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + transitivePeerDependencies: + - '@floating-ui/dom' + + '@tiptap/starter-kit@3.27.3': + dependencies: + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + '@tiptap/extension-blockquote': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-bold': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-bullet-list': 3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) + '@tiptap/extension-code': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-code-block': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + '@tiptap/extension-document': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-dropcursor': 3.27.3(@tiptap/extensions@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) + '@tiptap/extension-gapcursor': 3.27.3(@tiptap/extensions@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) + '@tiptap/extension-hard-break': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-heading': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-horizontal-rule': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + '@tiptap/extension-italic': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-link': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + '@tiptap/extension-list': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + '@tiptap/extension-list-item': 3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) + '@tiptap/extension-list-keymap': 3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) + '@tiptap/extension-ordered-list': 3.27.3(@tiptap/extension-list@3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)) + '@tiptap/extension-paragraph': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-strike': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-text': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extension-underline': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3)) + '@tiptap/extensions': 3.27.3(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3) + '@tiptap/pm': 3.27.3 + + '@tiptap/suggestion@3.27.3(@floating-ui/dom@1.8.0)(@tiptap/core@3.27.3(@tiptap/pm@3.27.3))(@tiptap/pm@3.27.3)': + dependencies: + '@floating-ui/dom': 1.8.0 + '@tiptap/core': 3.27.3(@tiptap/pm@3.27.3) + '@tiptap/pm': 3.27.3 + '@tsconfig/node10@1.0.12': {} '@tsconfig/node12@1.0.11': {} @@ -7411,6 +8346,8 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 + '@types/jasmine@3.10.19': {} + '@types/jest@29.5.14': dependencies: expect: 29.7.0 @@ -7442,6 +8379,14 @@ snapshots: '@types/prop-types@15.7.15': {} + '@types/react-copy-to-clipboard@5.0.7': + dependencies: + '@types/react': 18.3.28 + + '@types/react-dom@19.2.3(@types/react@19.2.14)': + dependencies: + '@types/react': 19.2.14 + '@types/react@18.3.28': dependencies: '@types/prop-types': 15.7.15 @@ -7459,10 +8404,15 @@ snapshots: dependencies: tapable: 2.3.2 + '@types/trusted-types@2.0.7': + optional: true + '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} + '@types/use-sync-external-store@0.0.6': {} + '@types/ws@8.18.1': dependencies: '@types/node': 22.19.17 @@ -7480,7 +8430,7 @@ snapshots: react: 19.2.5 unhead: 2.1.13 - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -7495,7 +8445,7 @@ snapshots: std-env: 3.10.0 test-exclude: 7.0.2 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vitest: 3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -7511,7 +8461,7 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(jsdom@28.1.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(jsdom@28.1.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3)) '@vitest/expect@3.2.4': dependencies: @@ -7530,29 +8480,29 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))': + '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) - '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))': + '@vitest/mocker@3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) - '@vitest/mocker@4.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3))': + '@vitest/mocker@4.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) '@vitest/pretty-format@3.2.4': dependencies: @@ -7849,6 +8799,8 @@ snapshots: async-function@1.0.0: {} + async-validator@3.5.2: {} + asynckit@0.4.0: {} available-typed-arrays@1.0.7: @@ -7930,10 +8882,14 @@ snapshots: baseline-browser-mapping@2.10.19: {} + bezier-easing@2.1.0: {} + bidi-js@1.0.3: dependencies: require-from-string: 2.0.2 + big.js@5.2.2: {} + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -8061,9 +9017,9 @@ snapshots: check-error@2.1.3: {} - chokidar@4.0.3: + chokidar@5.0.0: dependencies: - readdirp: 4.1.2 + readdirp: 5.0.0 optional: true chrome-trace-event@1.0.4: {} @@ -8072,6 +9028,8 @@ snapshots: cjs-module-lexer@1.4.3: {} + classnames@2.5.1: {} + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -8092,8 +9050,7 @@ snapshots: color-name@1.1.4: {} - colorjs.io@0.5.2: - optional: true + colorjs.io@0.5.2: {} combined-stream@1.0.8: dependencies: @@ -8107,6 +9064,8 @@ snapshots: commander@2.20.3: {} + compute-scroll-into-view@1.0.20: {} + compute-scroll-into-view@3.1.1: {} concat-map@0.0.1: {} @@ -8128,6 +9087,8 @@ snapshots: cookie@1.1.1: {} + copy-text-to-clipboard@2.2.0: {} + copy-to-clipboard@3.3.3: dependencies: toggle-selection: 1.0.6 @@ -8177,16 +9138,16 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-declaration-sorter@7.4.0(postcss@8.5.10): + css-declaration-sorter@7.4.0(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 css-minimizer-webpack-plugin@7.0.2(webpack@5.105.0): dependencies: '@jridgewell/trace-mapping': 0.3.31 - cssnano: 7.1.5(postcss@8.5.10) + cssnano: 7.1.5(postcss@8.5.17) jest-worker: 29.7.0 - postcss: 8.5.10 + postcss: 8.5.17 schema-utils: 4.3.3 serialize-javascript: 6.0.2 webpack: 5.105.0 @@ -8215,49 +9176,49 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@7.0.13(postcss@8.5.10): + cssnano-preset-default@7.0.13(postcss@8.5.17): dependencies: browserslist: 4.28.2 - css-declaration-sorter: 7.4.0(postcss@8.5.10) - cssnano-utils: 5.0.1(postcss@8.5.10) - postcss: 8.5.10 - postcss-calc: 10.1.1(postcss@8.5.10) - postcss-colormin: 7.0.8(postcss@8.5.10) - postcss-convert-values: 7.0.10(postcss@8.5.10) - postcss-discard-comments: 7.0.6(postcss@8.5.10) - postcss-discard-duplicates: 7.0.2(postcss@8.5.10) - postcss-discard-empty: 7.0.1(postcss@8.5.10) - postcss-discard-overridden: 7.0.1(postcss@8.5.10) - postcss-merge-longhand: 7.0.5(postcss@8.5.10) - postcss-merge-rules: 7.0.9(postcss@8.5.10) - postcss-minify-font-values: 7.0.1(postcss@8.5.10) - postcss-minify-gradients: 7.0.3(postcss@8.5.10) - postcss-minify-params: 7.0.7(postcss@8.5.10) - postcss-minify-selectors: 7.0.6(postcss@8.5.10) - postcss-normalize-charset: 7.0.1(postcss@8.5.10) - postcss-normalize-display-values: 7.0.1(postcss@8.5.10) - postcss-normalize-positions: 7.0.1(postcss@8.5.10) - postcss-normalize-repeat-style: 7.0.1(postcss@8.5.10) - postcss-normalize-string: 7.0.1(postcss@8.5.10) - postcss-normalize-timing-functions: 7.0.1(postcss@8.5.10) - postcss-normalize-unicode: 7.0.7(postcss@8.5.10) - postcss-normalize-url: 7.0.1(postcss@8.5.10) - postcss-normalize-whitespace: 7.0.1(postcss@8.5.10) - postcss-ordered-values: 7.0.2(postcss@8.5.10) - postcss-reduce-initial: 7.0.7(postcss@8.5.10) - postcss-reduce-transforms: 7.0.1(postcss@8.5.10) - postcss-svgo: 7.1.1(postcss@8.5.10) - postcss-unique-selectors: 7.0.5(postcss@8.5.10) - - cssnano-utils@5.0.1(postcss@8.5.10): - dependencies: - postcss: 8.5.10 - - cssnano@7.1.5(postcss@8.5.10): - dependencies: - cssnano-preset-default: 7.0.13(postcss@8.5.10) + css-declaration-sorter: 7.4.0(postcss@8.5.17) + cssnano-utils: 5.0.1(postcss@8.5.17) + postcss: 8.5.17 + postcss-calc: 10.1.1(postcss@8.5.17) + postcss-colormin: 7.0.8(postcss@8.5.17) + postcss-convert-values: 7.0.10(postcss@8.5.17) + postcss-discard-comments: 7.0.6(postcss@8.5.17) + postcss-discard-duplicates: 7.0.2(postcss@8.5.17) + postcss-discard-empty: 7.0.1(postcss@8.5.17) + postcss-discard-overridden: 7.0.1(postcss@8.5.17) + postcss-merge-longhand: 7.0.5(postcss@8.5.17) + postcss-merge-rules: 7.0.9(postcss@8.5.17) + postcss-minify-font-values: 7.0.1(postcss@8.5.17) + postcss-minify-gradients: 7.0.3(postcss@8.5.17) + postcss-minify-params: 7.0.7(postcss@8.5.17) + postcss-minify-selectors: 7.0.6(postcss@8.5.17) + postcss-normalize-charset: 7.0.1(postcss@8.5.17) + postcss-normalize-display-values: 7.0.1(postcss@8.5.17) + postcss-normalize-positions: 7.0.1(postcss@8.5.17) + postcss-normalize-repeat-style: 7.0.1(postcss@8.5.17) + postcss-normalize-string: 7.0.1(postcss@8.5.17) + postcss-normalize-timing-functions: 7.0.1(postcss@8.5.17) + postcss-normalize-unicode: 7.0.7(postcss@8.5.17) + postcss-normalize-url: 7.0.1(postcss@8.5.17) + postcss-normalize-whitespace: 7.0.1(postcss@8.5.17) + postcss-ordered-values: 7.0.2(postcss@8.5.17) + postcss-reduce-initial: 7.0.7(postcss@8.5.17) + postcss-reduce-transforms: 7.0.1(postcss@8.5.17) + postcss-svgo: 7.1.1(postcss@8.5.17) + postcss-unique-selectors: 7.0.5(postcss@8.5.17) + + cssnano-utils@5.0.1(postcss@8.5.17): + dependencies: + postcss: 8.5.17 + + cssnano@7.1.5(postcss@8.5.17): + dependencies: + cssnano-preset-default: 7.0.13(postcss@8.5.17) lilconfig: 3.1.3 - postcss: 8.5.10 + postcss: 8.5.17 csso@5.0.5: dependencies: @@ -8309,6 +9270,14 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 + date-fns-tz@1.3.8(date-fns@2.30.0): + dependencies: + date-fns: 2.30.0 + + date-fns@2.30.0: + dependencies: + '@babel/runtime': 7.29.7 + dayjs@1.11.13: {} debug@2.6.9: @@ -8388,6 +9357,10 @@ snapshots: dependencies: domelementtype: 2.3.0 + dompurify@3.4.12: + optionalDependencies: + '@types/trusted-types': 2.0.7 + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 @@ -8414,6 +9387,8 @@ snapshots: emoji-regex@9.2.2: {} + emojis-list@3.0.0: {} + encodeurl@1.0.2: {} engine.io-parser@5.2.3: {} @@ -8674,8 +9649,12 @@ snapshots: extend@3.0.2: {} + fast-copy@3.0.2: {} + fast-deep-equal@3.1.3: {} + fast-equals@5.4.1: {} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -9050,8 +10029,7 @@ snapshots: dependencies: safer-buffer: 2.1.2 - immutable@5.1.5: - optional: true + immutable@5.1.5: {} import-local@3.2.0: dependencies: @@ -9762,6 +10740,8 @@ snapshots: json5@2.2.3: {} + jsonc-parser@3.3.1: {} + jsonfile@6.2.0: dependencies: universalify: 2.0.1 @@ -9782,8 +10762,16 @@ snapshots: dependencies: uc.micro: 2.1.0 + linkifyjs@4.3.3: {} + loader-runner@4.3.1: {} + loader-utils@2.0.4: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -9798,6 +10786,12 @@ snapshots: longest-streak@3.1.0: {} + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lottie-web@5.13.0: {} + loupe@3.2.1: {} lru-cache@10.4.3: {} @@ -10024,6 +11018,8 @@ snapshots: medium-zoom@1.1.0: {} + memoize-one@5.2.1: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -10369,8 +11365,6 @@ snapshots: mustache@4.2.0: {} - nanoid@3.3.11: {} - nanoid@3.3.15: {} natural-compare@1.4.0: {} @@ -10459,6 +11453,8 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + orderedmap@2.1.1: {} + own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -10549,142 +11545,142 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-calc@10.1.1(postcss@8.5.10): + postcss-calc@10.1.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - postcss-colormin@7.0.8(postcss@8.5.10): + postcss-colormin@7.0.8(postcss@8.5.17): dependencies: '@colordx/core': 5.0.3 browserslist: 4.28.2 caniuse-api: 3.0.0 - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-convert-values@7.0.10(postcss@8.5.10): + postcss-convert-values@7.0.10(postcss@8.5.17): dependencies: browserslist: 4.28.2 - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-discard-comments@7.0.6(postcss@8.5.10): + postcss-discard-comments@7.0.6(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-selector-parser: 7.1.1 - postcss-discard-duplicates@7.0.2(postcss@8.5.10): + postcss-discard-duplicates@7.0.2(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 - postcss-discard-empty@7.0.1(postcss@8.5.10): + postcss-discard-empty@7.0.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 - postcss-discard-overridden@7.0.1(postcss@8.5.10): + postcss-discard-overridden@7.0.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 - postcss-merge-longhand@7.0.5(postcss@8.5.10): + postcss-merge-longhand@7.0.5(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 - stylehacks: 7.0.9(postcss@8.5.10) + stylehacks: 7.0.9(postcss@8.5.17) - postcss-merge-rules@7.0.9(postcss@8.5.10): + postcss-merge-rules@7.0.9(postcss@8.5.17): dependencies: browserslist: 4.28.2 caniuse-api: 3.0.0 - cssnano-utils: 5.0.1(postcss@8.5.10) - postcss: 8.5.10 + cssnano-utils: 5.0.1(postcss@8.5.17) + postcss: 8.5.17 postcss-selector-parser: 7.1.1 - postcss-minify-font-values@7.0.1(postcss@8.5.10): + postcss-minify-font-values@7.0.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-minify-gradients@7.0.3(postcss@8.5.10): + postcss-minify-gradients@7.0.3(postcss@8.5.17): dependencies: '@colordx/core': 5.0.3 - cssnano-utils: 5.0.1(postcss@8.5.10) - postcss: 8.5.10 + cssnano-utils: 5.0.1(postcss@8.5.17) + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-minify-params@7.0.7(postcss@8.5.10): + postcss-minify-params@7.0.7(postcss@8.5.17): dependencies: browserslist: 4.28.2 - cssnano-utils: 5.0.1(postcss@8.5.10) - postcss: 8.5.10 + cssnano-utils: 5.0.1(postcss@8.5.17) + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-minify-selectors@7.0.6(postcss@8.5.10): + postcss-minify-selectors@7.0.6(postcss@8.5.17): dependencies: cssesc: 3.0.0 - postcss: 8.5.10 + postcss: 8.5.17 postcss-selector-parser: 7.1.1 - postcss-normalize-charset@7.0.1(postcss@8.5.10): + postcss-normalize-charset@7.0.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 - postcss-normalize-display-values@7.0.1(postcss@8.5.10): + postcss-normalize-display-values@7.0.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-normalize-positions@7.0.1(postcss@8.5.10): + postcss-normalize-positions@7.0.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@7.0.1(postcss@8.5.10): + postcss-normalize-repeat-style@7.0.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-normalize-string@7.0.1(postcss@8.5.10): + postcss-normalize-string@7.0.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@7.0.1(postcss@8.5.10): + postcss-normalize-timing-functions@7.0.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@7.0.7(postcss@8.5.10): + postcss-normalize-unicode@7.0.7(postcss@8.5.17): dependencies: browserslist: 4.28.2 - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-normalize-url@7.0.1(postcss@8.5.10): + postcss-normalize-url@7.0.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@7.0.1(postcss@8.5.10): + postcss-normalize-whitespace@7.0.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-ordered-values@7.0.2(postcss@8.5.10): + postcss-ordered-values@7.0.2(postcss@8.5.17): dependencies: - cssnano-utils: 5.0.1(postcss@8.5.10) - postcss: 8.5.10 + cssnano-utils: 5.0.1(postcss@8.5.17) + postcss: 8.5.17 postcss-value-parser: 4.2.0 - postcss-reduce-initial@7.0.7(postcss@8.5.10): + postcss-reduce-initial@7.0.7(postcss@8.5.17): dependencies: browserslist: 4.28.2 caniuse-api: 3.0.0 - postcss: 8.5.10 + postcss: 8.5.17 - postcss-reduce-transforms@7.0.1(postcss@8.5.10): + postcss-reduce-transforms@7.0.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 postcss-selector-parser@7.1.1: @@ -10692,25 +11688,19 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@7.1.1(postcss@8.5.10): + postcss-svgo@7.1.1(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-value-parser: 4.2.0 svgo: 4.0.1 - postcss-unique-selectors@7.0.5(postcss@8.5.10): + postcss-unique-selectors@7.0.5(postcss@8.5.17): dependencies: - postcss: 8.5.10 + postcss: 8.5.17 postcss-selector-parser: 7.1.1 postcss-value-parser@4.2.0: {} - postcss@8.5.10: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.5.17: dependencies: nanoid: 3.3.15 @@ -10725,13 +11715,95 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + prismjs@1.30.0: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + property-information@7.1.0: {} + prosemirror-changeset@2.4.1: + dependencies: + prosemirror-transform: 1.12.0 + + prosemirror-commands@1.7.1: + dependencies: + prosemirror-model: 1.25.11 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + + prosemirror-dropcursor@1.8.3: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + prosemirror-view: 1.42.1 + + prosemirror-gapcursor@1.4.1: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.11 + prosemirror-state: 1.4.4 + prosemirror-view: 1.42.1 + + prosemirror-history@1.5.0: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + prosemirror-view: 1.42.1 + rope-sequence: 1.3.4 + + prosemirror-inputrules@1.5.1: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + + prosemirror-keymap@1.2.3: + dependencies: + prosemirror-state: 1.4.4 + w3c-keyname: 2.2.8 + + prosemirror-model@1.25.11: + dependencies: + orderedmap: 2.1.1 + + prosemirror-schema-list@1.5.1: + dependencies: + prosemirror-model: 1.25.11 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + + prosemirror-state@1.4.4: + dependencies: + prosemirror-model: 1.25.11 + prosemirror-transform: 1.12.0 + prosemirror-view: 1.42.1 + + prosemirror-tables@1.8.5: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.11 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + prosemirror-view: 1.42.1 + + prosemirror-transform@1.12.0: + dependencies: + prosemirror-model: 1.25.11 + + prosemirror-view@1.42.1: + dependencies: + prosemirror-model: 1.25.11 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.12.0 + proxy-from-env@2.1.0: {} punycode.js@2.3.1: {} @@ -10740,6 +11812,10 @@ snapshots: pure-rand@6.1.0: {} + qrcode.react@4.2.0(react@19.2.5): + dependencies: + react: 19.2.5 + qs@6.13.0: dependencies: side-channel: 1.1.0 @@ -10757,11 +11833,26 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + react-copy-to-clipboard@5.1.1(react@19.2.5): + dependencies: + copy-to-clipboard: 3.3.3 + prop-types: 15.8.1 + react: 19.2.5 + react-dom@19.2.5(react@19.2.5): dependencies: react: 19.2.5 scheduler: 0.27.0 + react-draggable@4.7.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + dependencies: + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + + react-is@16.13.1: {} + react-is@18.3.1: {} react-lazy-with-preload@2.2.1: {} @@ -10778,6 +11869,13 @@ snapshots: react: 19.2.5 react-reconciler: 0.33.0(react@19.2.5) + react-resizable@3.2.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + dependencies: + prop-types: 15.8.1 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-draggable: 4.7.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react-router-dom@7.14.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: react: 19.2.5 @@ -10792,9 +11890,16 @@ snapshots: optionalDependencies: react-dom: 19.2.5(react@19.2.5) + react-window@1.8.11(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + dependencies: + '@babel/runtime': 7.29.7 + memoize-one: 5.2.1 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react@19.2.5: {} - readdirp@4.1.2: + readdirp@5.0.0: optional: true recma-build-jsx@1.0.0: @@ -11008,6 +12113,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.60.1 fsevents: 2.3.3 + rope-sequence@1.3.4: {} + rrweb-cssom@0.8.0: {} rslog@1.3.2: {} @@ -11027,7 +12134,6 @@ snapshots: rxjs@7.8.2: dependencies: tslib: 2.8.1 - optional: true safe-array-concat@1.1.3: dependencies: @@ -11052,65 +12158,65 @@ snapshots: safer-buffer@2.1.2: {} - sass-embedded-all-unknown@1.97.3: + sass-embedded-all-unknown@1.100.0: dependencies: - sass: 1.97.3 + sass: 1.100.0 optional: true - sass-embedded-android-arm64@1.97.3: + sass-embedded-android-arm64@1.100.0: optional: true - sass-embedded-android-arm@1.97.3: + sass-embedded-android-arm@1.100.0: optional: true - sass-embedded-android-riscv64@1.97.3: + sass-embedded-android-riscv64@1.100.0: optional: true - sass-embedded-android-x64@1.97.3: + sass-embedded-android-x64@1.100.0: optional: true - sass-embedded-darwin-arm64@1.97.3: + sass-embedded-darwin-arm64@1.100.0: optional: true - sass-embedded-darwin-x64@1.97.3: + sass-embedded-darwin-x64@1.100.0: optional: true - sass-embedded-linux-arm64@1.97.3: + sass-embedded-linux-arm64@1.100.0: optional: true - sass-embedded-linux-arm@1.97.3: + sass-embedded-linux-arm@1.100.0: optional: true - sass-embedded-linux-musl-arm64@1.97.3: + sass-embedded-linux-musl-arm64@1.100.0: optional: true - sass-embedded-linux-musl-arm@1.97.3: + sass-embedded-linux-musl-arm@1.100.0: optional: true - sass-embedded-linux-musl-riscv64@1.97.3: + sass-embedded-linux-musl-riscv64@1.100.0: optional: true - sass-embedded-linux-musl-x64@1.97.3: + sass-embedded-linux-musl-x64@1.100.0: optional: true - sass-embedded-linux-riscv64@1.97.3: + sass-embedded-linux-riscv64@1.100.0: optional: true - sass-embedded-linux-x64@1.97.3: + sass-embedded-linux-x64@1.100.0: optional: true - sass-embedded-unknown-all@1.97.3: + sass-embedded-unknown-all@1.100.0: dependencies: - sass: 1.97.3 + sass: 1.100.0 optional: true - sass-embedded-win32-arm64@1.97.3: + sass-embedded-win32-arm64@1.100.0: optional: true - sass-embedded-win32-x64@1.97.3: + sass-embedded-win32-x64@1.100.0: optional: true - sass-embedded@1.97.3: + sass-embedded@1.100.0: dependencies: '@bufbuild/protobuf': 2.11.0 colorjs.io: 0.5.2 @@ -11120,29 +12226,28 @@ snapshots: sync-child-process: 1.0.2 varint: 6.0.0 optionalDependencies: - sass-embedded-all-unknown: 1.97.3 - sass-embedded-android-arm: 1.97.3 - sass-embedded-android-arm64: 1.97.3 - sass-embedded-android-riscv64: 1.97.3 - sass-embedded-android-x64: 1.97.3 - sass-embedded-darwin-arm64: 1.97.3 - sass-embedded-darwin-x64: 1.97.3 - sass-embedded-linux-arm: 1.97.3 - sass-embedded-linux-arm64: 1.97.3 - sass-embedded-linux-musl-arm: 1.97.3 - sass-embedded-linux-musl-arm64: 1.97.3 - sass-embedded-linux-musl-riscv64: 1.97.3 - sass-embedded-linux-musl-x64: 1.97.3 - sass-embedded-linux-riscv64: 1.97.3 - sass-embedded-linux-x64: 1.97.3 - sass-embedded-unknown-all: 1.97.3 - sass-embedded-win32-arm64: 1.97.3 - sass-embedded-win32-x64: 1.97.3 - optional: true - - sass@1.97.3: - dependencies: - chokidar: 4.0.3 + sass-embedded-all-unknown: 1.100.0 + sass-embedded-android-arm: 1.100.0 + sass-embedded-android-arm64: 1.100.0 + sass-embedded-android-riscv64: 1.100.0 + sass-embedded-android-x64: 1.100.0 + sass-embedded-darwin-arm64: 1.100.0 + sass-embedded-darwin-x64: 1.100.0 + sass-embedded-linux-arm: 1.100.0 + sass-embedded-linux-arm64: 1.100.0 + sass-embedded-linux-musl-arm: 1.100.0 + sass-embedded-linux-musl-arm64: 1.100.0 + sass-embedded-linux-musl-riscv64: 1.100.0 + sass-embedded-linux-musl-x64: 1.100.0 + sass-embedded-linux-riscv64: 1.100.0 + sass-embedded-linux-x64: 1.100.0 + sass-embedded-unknown-all: 1.100.0 + sass-embedded-win32-arm64: 1.100.0 + sass-embedded-win32-x64: 1.100.0 + + sass@1.100.0: + dependencies: + chokidar: 5.0.0 immutable: 5.1.5 source-map-js: 1.2.1 optionalDependencies: @@ -11164,6 +12269,10 @@ snapshots: ajv-formats: 2.1.1(ajv@8.18.0) ajv-keywords: 5.1.0(ajv@8.18.0) + scroll-into-view-if-needed@2.2.31: + dependencies: + compute-scroll-into-view: 1.0.20 + scroll-into-view-if-needed@3.1.0: dependencies: compute-scroll-into-view: 3.1.1 @@ -11457,10 +12566,10 @@ snapshots: dependencies: inline-style-parser: 0.2.7 - stylehacks@7.0.9(postcss@8.5.10): + stylehacks@7.0.9(postcss@8.5.17): dependencies: browserslist: 4.28.2 - postcss: 8.5.10 + postcss: 8.5.17 postcss-selector-parser: 7.1.1 supports-color@7.2.0: @@ -11483,15 +12592,19 @@ snapshots: picocolors: 1.1.1 sax: 1.6.0 + swr@2.4.2(react@19.2.5): + dependencies: + dequal: 2.0.3 + react: 19.2.5 + use-sync-external-store: 1.6.0(react@19.2.5) + symbol-tree@3.2.4: {} sync-child-process@1.0.2: dependencies: sync-message-port: 1.2.0 - optional: true - sync-message-port@1.2.0: - optional: true + sync-message-port@1.2.0: {} tapable@2.2.2: {} @@ -11807,8 +12920,14 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + use-sync-external-store@1.6.0(react@19.2.5): + dependencies: + react: 19.2.5 + util-deprecate@1.0.2: {} + utility-types@3.11.0: {} + utils-merge@1.0.1: {} v8-compile-cache-lib@3.0.1: {} @@ -11819,8 +12938,7 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - varint@6.0.0: - optional: true + varint@6.0.0: {} vary@1.1.2: {} @@ -11839,13 +12957,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-node@3.2.4(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): + vite-node@3.2.4(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - jiti @@ -11860,13 +12978,13 @@ snapshots: - tsx - yaml - vite-node@3.2.4(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): + vite-node@3.2.4(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - jiti @@ -11881,45 +12999,45 @@ snapshots: - tsx - yaml - vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): + vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - postcss: 8.5.10 + postcss: 8.5.17 rollup: 4.60.1 tinyglobby: 0.2.16 optionalDependencies: '@types/node': 22.19.17 fsevents: 2.3.3 jiti: 2.6.1 - sass: 1.97.3 - sass-embedded: 1.97.3 + sass: 1.100.0 + sass-embedded: 1.100.0 terser: 5.46.1 yaml: 2.8.3 - vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): + vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - postcss: 8.5.10 + postcss: 8.5.17 rollup: 4.60.1 tinyglobby: 0.2.16 optionalDependencies: '@types/node': 25.6.0 fsevents: 2.3.3 jiti: 2.6.1 - sass: 1.97.3 - sass-embedded: 1.97.3 + sass: 1.100.0 + sass-embedded: 1.100.0 terser: 5.46.1 yaml: 2.8.3 - vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): + vitest@3.2.4(@types/debug@4.1.13)(@types/node@22.19.17)(jiti@2.6.1)(jsdom@28.1.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -11937,8 +13055,8 @@ snapshots: tinyglobby: 0.2.16 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) - vite-node: 3.2.4(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) + vite-node: 3.2.4(@types/node@22.19.17)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.13 @@ -11958,11 +13076,11 @@ snapshots: - tsx - yaml - vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3): + vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + '@vitest/mocker': 3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -11980,8 +13098,8 @@ snapshots: tinyglobby: 0.2.16 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) - vite-node: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) + vite-node: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.13 @@ -12001,10 +13119,10 @@ snapshots: - tsx - yaml - vitest@4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(jsdom@28.1.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)): + vitest@4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(jsdom@28.1.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.4 - '@vitest/mocker': 4.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3)) + '@vitest/mocker': 4.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.4 '@vitest/runner': 4.1.4 '@vitest/snapshot': 4.1.4 @@ -12021,7 +13139,7 @@ snapshots: tinyexec: 1.1.1 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.6.0 @@ -12030,6 +13148,10 @@ snapshots: transitivePeerDependencies: - msw + vscode-icons-js@11.6.1: + dependencies: + '@types/jasmine': 3.10.19 + vue-lynx@0.4.0(@lynx-js/lynx-core@0.1.3)(@lynx-js/types@3.7.0)(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rsbuild/plugin-vue@1.2.9(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3)))(@types/react@19.2.14)(tslib@2.8.1)(webpack@5.105.0): dependencies: '@lynx-js/css-extract-webpack-plugin': 0.7.0(@lynx-js/template-webpack-plugin@0.10.5(tslib@2.8.1))(webpack@5.105.0) @@ -12062,6 +13184,8 @@ snapshots: optionalDependencies: typescript: 5.9.3 + w3c-keyname@2.2.8: {} + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 From 858a7d4d6368adca0232bedf6aa370cb1a4b00a5 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 20:05:54 +0000 Subject: [PATCH 12/18] fix(create-app): use @clack/prompts for askWebPlatform The web-support cherry-pick added askWebPlatform written against inquirer, but this fork's create-sparkling-app uses @clack/prompts. Rewrite it with p.confirm + checkCancel to match the rest of user-prompts.ts (the previous code referenced undefined inquirer/ui/handlePromptError and failed tsc). Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01ARyWgB3243gQx1exWK61Qb --- .../src/create-app/user-prompts.ts | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/packages/create-sparkling-app/src/create-app/user-prompts.ts b/packages/create-sparkling-app/src/create-app/user-prompts.ts index cb2a69f5..ff9464a7 100644 --- a/packages/create-sparkling-app/src/create-app/user-prompts.ts +++ b/packages/create-sparkling-app/src/create-app/user-prompts.ts @@ -95,19 +95,11 @@ export async function askAdditionalTools(flags: { yes?: boolean }): Promise { if (flags.web !== undefined) return flags.web; if (!flags.yes) { - try { - const { enableWeb } = await inquirer.prompt<{ enableWeb: boolean }>([ - { - type: 'confirm', - name: 'enableWeb', - message: ui.prompt('Enable web platform support? (preview in browser)'), - default: true, - }, - ]); - return checkCancel(enableWeb); - } catch (error) { - handlePromptError(error); - } + const enableWeb = await p.confirm({ + message: 'Enable web platform support? (preview in browser)', + initialValue: true, + }); + return checkCancel(enableWeb); } return true; } From 7353e6f92b8eebdd5dd01052a972fa50aaeb15e0 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 20:12:38 +0000 Subject: [PATCH 13/18] feat(examples): turn the vue-router demo into a go-web example Move packages/playground-vue -> examples/vue-router-mpa so the go-web prepare-examples pipeline discovers it and the component can embed it: - lynx.config.ts: dual lynx+web environments with default filenames, so it emits main/users/settings .web.bundle (browser preview) + .lynx.bundle (QR/device), with an HTTP assetPrefix; keeps the route-manifest codegen - package.json: @sparkling-example/vue-router-mpa, "build" script - shared/router.ts: boot each bundle at its OWN default route when the container URL carries no owned route (the standalone go-web preview case), so the users/settings previews render their own pages instead of a route another bundle owns - README: web-preview (live in-heap nav) vs device/harness (full MPA) scope Also fix the web shell to load the web-target build: sparkling schemes name the native .lynx.bundle, but web-core needs .web.bundle, so the shell rewrites the extension when resolving the URL to render. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01ARyWgB3243gQx1exWK61Qb --- .../vue-router-mpa}/.gitignore | 0 examples/vue-router-mpa/README.md | 79 +++++++++++++++++++ examples/vue-router-mpa/lynx.config.ts | 51 ++++++++++++ examples/vue-router-mpa/package.json | 41 ++++++++++ .../src/generated/route-manifest.ts | 0 .../vue-router-mpa}/src/pages/main/App.vue | 0 .../vue-router-mpa}/src/pages/main/index.ts | 0 .../src/pages/main/routes.json | 0 .../src/pages/main/views/Features.vue | 0 .../src/pages/main/views/Home.vue | 0 .../src/pages/settings/App.vue | 0 .../src/pages/settings/index.ts | 0 .../src/pages/settings/routes.json | 0 .../src/pages/settings/views/Settings.vue | 0 .../vue-router-mpa}/src/pages/users/App.vue | 0 .../vue-router-mpa}/src/pages/users/index.ts | 0 .../src/pages/users/routes.json | 0 .../src/pages/users/views/UserDetail.vue | 0 .../src/pages/users/views/UserList.vue | 0 .../vue-router-mpa}/src/shared/NavButton.vue | 0 .../vue-router-mpa}/src/shared/router.ts | 24 +++++- .../vue-router-mpa}/tsconfig.json | 0 packages/playground-vue/README.md | 62 --------------- packages/playground-vue/lynx.config.ts | 56 ------------- packages/playground-vue/package.json | 35 -------- packages/sparkling-history/COMPATIBILITY.md | 4 +- packages/sparkling-history/README.md | 2 +- packages/sparkling-web-shell/src/index.ts | 17 +++- pnpm-lock.yaml | 59 +++++++------- 29 files changed, 241 insertions(+), 189 deletions(-) rename {packages/playground-vue => examples/vue-router-mpa}/.gitignore (100%) create mode 100644 examples/vue-router-mpa/README.md create mode 100644 examples/vue-router-mpa/lynx.config.ts create mode 100644 examples/vue-router-mpa/package.json rename {packages/playground-vue => examples/vue-router-mpa}/src/generated/route-manifest.ts (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/main/App.vue (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/main/index.ts (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/main/routes.json (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/main/views/Features.vue (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/main/views/Home.vue (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/settings/App.vue (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/settings/index.ts (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/settings/routes.json (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/settings/views/Settings.vue (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/users/App.vue (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/users/index.ts (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/users/routes.json (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/users/views/UserDetail.vue (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/pages/users/views/UserList.vue (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/shared/NavButton.vue (100%) rename {packages/playground-vue => examples/vue-router-mpa}/src/shared/router.ts (50%) rename {packages/playground-vue => examples/vue-router-mpa}/tsconfig.json (100%) delete mode 100644 packages/playground-vue/README.md delete mode 100644 packages/playground-vue/lynx.config.ts delete mode 100644 packages/playground-vue/package.json diff --git a/packages/playground-vue/.gitignore b/examples/vue-router-mpa/.gitignore similarity index 100% rename from packages/playground-vue/.gitignore rename to examples/vue-router-mpa/.gitignore diff --git a/examples/vue-router-mpa/README.md b/examples/vue-router-mpa/README.md new file mode 100644 index 00000000..e7f490be --- /dev/null +++ b/examples/vue-router-mpa/README.md @@ -0,0 +1,79 @@ +# Vue Router × Sparkling MPA + +A Vue-Lynx example where **Vue Router drives Sparkling's multi-page native +navigation** through [`sparkling-history`](../../packages/sparkling-history). + +Unlike [VueLynx](https://vue.lynxjs.org)'s in-`LynxView` SPA routing (which +uses `createMemoryHistory` to keep every route in one JS heap), here each page +is a **separate Lynx container / JS heap**, connected by Sparkling +navigation — the MPA model. The connection between heaps is established at +build time via a file-based route manifest. + +## Layout + +``` +src/ + pages/ # file-based convention: one dir = one bundle = one container + main/ routes.json → "/", "/features" + users/ routes.json → "/users", "/users/:id" (name: user-detail) + settings/ routes.json → "/settings" (+ container param title=Settings) + shared/ + router.ts # createPageRouter(): one router per bundle + NavButton.vue + generated/ + route-manifest.ts # AUTO-GENERATED by sparkling-history/codegen +``` + +`lynx.config.ts` derives the rspeedy entries from `src/pages/*` and runs +`pluginRouteManifest`, which regenerates `src/generated/route-manifest.ts` +from every page's `routes.json` before each build. + +## What it demonstrates + +Each page bundle calls `createPageRouter(localRoutes)`. Navigations that +resolve to a route the current bundle owns stay **in-heap** (normal +Vue Router SPA: nested `RouterView`, params, guards). Navigations resolving +to a route owned by **another** bundle are diverted to +`router.open()` — a new native container. + +| Interaction | Kind | What happens | +|---|---|---| +| `push('/features')` from `main` | in-container | Vue Router transition, guards run, one container | +| `push('/users')` | cross-container | new `users` container stacked, `main` stays alive underneath | +| tap a user → `push('/users/1')` | in-container (users) | dynamic `:id` route inside the `users` heap | +| `push({ name: 'user-detail', params })` | cross-container | named route resolved via the manifest | +| `push({ path, state })` | cross-container | `history.state` carried across heaps via the scheme URL | +| `replace('/settings')` | cross-container | swaps the current container (same depth) | +| `back()` past the local queue | boundary | pops the native container; revealed page gets an `onRestore` (pageshow-like) event | + +## Web preview vs. device + +This example is embedded on the website with [``](https://github.com/lynx-community/go-web). +Because go-web previews **one bundle at a time** and doesn't provide +Sparkling's native container stack, the two navigation regimes show up +differently: + +- **In-heap (SPA) navigation is live in the web preview** — e.g. Home ↔ + Features on the `main` bundle is pure Vue Router with no native bridge, so + it works in the browser. This already goes beyond the other Sparkling demos, + whose native calls are inert on the web. +- **Cross-container (MPA) navigation needs the container stack** — tapping a + button that opens another bundle calls `router.open`, which requires a + Sparkling container. Use the **QR code** tab (Lynx Explorer on device) for + the full flow, or run the local web-shell harness below, which faithfully + simulates the native container stack in the browser. + +## Run the full flow on the local web-shell harness + +[`sparkling-web-shell`](../../packages/sparkling-web-shell) stacks a real +`` (its own Worker heap) per container, exactly like the native +stack, and provides the `router.open`/`router.close` bridge: + +```bash +pnpm --filter @sparkling-example/vue-router-mpa build +LYNX_BUNDLE_DIR="$PWD/examples/vue-router-mpa/dist" \ + pnpm --filter sparkling-web-shell dev +# open http://localhost:4200/?page=main +``` + +Deep-link straight into a route with `?page=users&__hs_route=/users/3`. diff --git a/examples/vue-router-mpa/lynx.config.ts b/examples/vue-router-mpa/lynx.config.ts new file mode 100644 index 00000000..0199570d --- /dev/null +++ b/examples/vue-router-mpa/lynx.config.ts @@ -0,0 +1,51 @@ +// Copyright (c) 2026 TikTok Pte. Ltd. +// Licensed under the Apache License Version 2.0 that can be found in the +// LICENSE file in the root directory of this source tree. +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import { defineConfig } from '@lynx-js/rspeedy' +import { pluginQRCode } from '@lynx-js/qrcode-rsbuild-plugin' +import { pluginVueLynx } from 'vue-lynx/plugin' +import { pluginRouteManifest } from 'sparkling-history/codegen' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const exampleName = path.basename(__dirname) +const pagesDir = path.join(__dirname, 'src/pages') + +export default defineConfig({ + // Build both a Lynx bundle (`*.lynx.bundle`, on-device / QR preview) and a + // web bundle (`*.web.bundle`, consumed by @lynx-js/web-core in the website's + // live preview). + environments: { + lynx: {}, + web: {}, + }, + // One entry per page bundle. Each becomes its own Lynx container / JS heap + // at runtime; each `src/pages//routes.json` declares which routes that + // bundle owns (see the generated route manifest below). + source: { + entry: { + main: './src/pages/main/index.ts', + users: './src/pages/users/index.ts', + settings: './src/pages/settings/index.ts', + }, + }, + output: { + // The website serves each example's `dist/` under this public path. + assetPrefix: `https://tiktok.github.io/sparkling/examples/${exampleName}/dist/`, + }, + plugins: [ + pluginQRCode(), + pluginVueLynx({ + optionsApi: false, + enableCSSSelector: true, + }), + // Generates src/generated/route-manifest.ts from src/pages/*/routes.json — + // the shared route table every page bundle embeds so isolated heaps agree + // on which page owns which route (see sparkling-history). + pluginRouteManifest({ + pagesDir, + outFile: path.join(__dirname, 'src/generated/route-manifest.ts'), + }), + ], +}) diff --git a/examples/vue-router-mpa/package.json b/examples/vue-router-mpa/package.json new file mode 100644 index 00000000..e116266f --- /dev/null +++ b/examples/vue-router-mpa/package.json @@ -0,0 +1,41 @@ +{ + "name": "@sparkling-example/vue-router-mpa", + "version": "0.0.0", + "private": false, + "type": "module", + "description": "Vue Router driving Sparkling multi-page native navigation (MPA) via sparkling-history.", + "homepage": "https://tiktok.github.io/sparkling/", + "files": [ + "dist", + "src", + "lynx.config.ts", + "tsconfig.json" + ], + "repository": { + "type": "git", + "url": "https://github.com/tiktok/sparkling", + "directory": "examples/vue-router-mpa" + }, + "scripts": { + "build": "pnpm -C ../.. --filter sparkling-method --filter sparkling-navigation --filter sparkling-history build && rspeedy build", + "dev": "rspeedy dev", + "preview": "rspeedy preview", + "dev:web-shell": "rspeedy build --environment web && LYNX_BUNDLE_DIR=\"$PWD/dist\" pnpm --filter sparkling-web-shell dev" + }, + "dependencies": { + "sparkling-history": "workspace:*", + "sparkling-method": "workspace:*", + "sparkling-navigation": "workspace:*", + "vue-lynx": "0.4.0", + "vue-router": "^4.5.1" + }, + "devDependencies": { + "@lynx-js/qrcode-rsbuild-plugin": "^0.4.4", + "@lynx-js/rspeedy": "^0.13.3", + "@rsbuild/plugin-vue": "^1.2.6", + "typescript": "^5.8.3" + }, + "engines": { + "node": "^22 || ^24" + } +} diff --git a/packages/playground-vue/src/generated/route-manifest.ts b/examples/vue-router-mpa/src/generated/route-manifest.ts similarity index 100% rename from packages/playground-vue/src/generated/route-manifest.ts rename to examples/vue-router-mpa/src/generated/route-manifest.ts diff --git a/packages/playground-vue/src/pages/main/App.vue b/examples/vue-router-mpa/src/pages/main/App.vue similarity index 100% rename from packages/playground-vue/src/pages/main/App.vue rename to examples/vue-router-mpa/src/pages/main/App.vue diff --git a/packages/playground-vue/src/pages/main/index.ts b/examples/vue-router-mpa/src/pages/main/index.ts similarity index 100% rename from packages/playground-vue/src/pages/main/index.ts rename to examples/vue-router-mpa/src/pages/main/index.ts diff --git a/packages/playground-vue/src/pages/main/routes.json b/examples/vue-router-mpa/src/pages/main/routes.json similarity index 100% rename from packages/playground-vue/src/pages/main/routes.json rename to examples/vue-router-mpa/src/pages/main/routes.json diff --git a/packages/playground-vue/src/pages/main/views/Features.vue b/examples/vue-router-mpa/src/pages/main/views/Features.vue similarity index 100% rename from packages/playground-vue/src/pages/main/views/Features.vue rename to examples/vue-router-mpa/src/pages/main/views/Features.vue diff --git a/packages/playground-vue/src/pages/main/views/Home.vue b/examples/vue-router-mpa/src/pages/main/views/Home.vue similarity index 100% rename from packages/playground-vue/src/pages/main/views/Home.vue rename to examples/vue-router-mpa/src/pages/main/views/Home.vue diff --git a/packages/playground-vue/src/pages/settings/App.vue b/examples/vue-router-mpa/src/pages/settings/App.vue similarity index 100% rename from packages/playground-vue/src/pages/settings/App.vue rename to examples/vue-router-mpa/src/pages/settings/App.vue diff --git a/packages/playground-vue/src/pages/settings/index.ts b/examples/vue-router-mpa/src/pages/settings/index.ts similarity index 100% rename from packages/playground-vue/src/pages/settings/index.ts rename to examples/vue-router-mpa/src/pages/settings/index.ts diff --git a/packages/playground-vue/src/pages/settings/routes.json b/examples/vue-router-mpa/src/pages/settings/routes.json similarity index 100% rename from packages/playground-vue/src/pages/settings/routes.json rename to examples/vue-router-mpa/src/pages/settings/routes.json diff --git a/packages/playground-vue/src/pages/settings/views/Settings.vue b/examples/vue-router-mpa/src/pages/settings/views/Settings.vue similarity index 100% rename from packages/playground-vue/src/pages/settings/views/Settings.vue rename to examples/vue-router-mpa/src/pages/settings/views/Settings.vue diff --git a/packages/playground-vue/src/pages/users/App.vue b/examples/vue-router-mpa/src/pages/users/App.vue similarity index 100% rename from packages/playground-vue/src/pages/users/App.vue rename to examples/vue-router-mpa/src/pages/users/App.vue diff --git a/packages/playground-vue/src/pages/users/index.ts b/examples/vue-router-mpa/src/pages/users/index.ts similarity index 100% rename from packages/playground-vue/src/pages/users/index.ts rename to examples/vue-router-mpa/src/pages/users/index.ts diff --git a/packages/playground-vue/src/pages/users/routes.json b/examples/vue-router-mpa/src/pages/users/routes.json similarity index 100% rename from packages/playground-vue/src/pages/users/routes.json rename to examples/vue-router-mpa/src/pages/users/routes.json diff --git a/packages/playground-vue/src/pages/users/views/UserDetail.vue b/examples/vue-router-mpa/src/pages/users/views/UserDetail.vue similarity index 100% rename from packages/playground-vue/src/pages/users/views/UserDetail.vue rename to examples/vue-router-mpa/src/pages/users/views/UserDetail.vue diff --git a/packages/playground-vue/src/pages/users/views/UserList.vue b/examples/vue-router-mpa/src/pages/users/views/UserList.vue similarity index 100% rename from packages/playground-vue/src/pages/users/views/UserList.vue rename to examples/vue-router-mpa/src/pages/users/views/UserList.vue diff --git a/packages/playground-vue/src/shared/NavButton.vue b/examples/vue-router-mpa/src/shared/NavButton.vue similarity index 100% rename from packages/playground-vue/src/shared/NavButton.vue rename to examples/vue-router-mpa/src/shared/NavButton.vue diff --git a/packages/playground-vue/src/shared/router.ts b/examples/vue-router-mpa/src/shared/router.ts similarity index 50% rename from packages/playground-vue/src/shared/router.ts rename to examples/vue-router-mpa/src/shared/router.ts index b69b572b..000a4e4e 100644 --- a/packages/playground-vue/src/shared/router.ts +++ b/examples/vue-router-mpa/src/shared/router.ts @@ -3,6 +3,7 @@ // LICENSE file in the root directory of this source tree. import type { RouteRecordRaw } from 'vue-router' import { createSparklingRouter, type SparklingRouter } from 'sparkling-history/vue' +import { defaultLocationOf, findOwner } from 'sparkling-history' import manifest from '../generated/route-manifest' /** @@ -15,12 +16,31 @@ import manifest from '../generated/route-manifest' */ export function createPageRouter(routes: RouteRecordRaw[]): SparklingRouter { const router = createSparklingRouter({ manifest, routes }) + const { hybridHistory } = router // Boot the initial navigation from the container's URL, like vue-router // does on app install for browser histories. - router.push(router.hybridHistory.location).catch(err => { - console.error('[playground-vue] initial navigation failed:', err) + // + // When the container URL carries no route this bundle owns — e.g. a + // standalone go-web web preview, where there is no scheme/queryItems — fall + // back to the bundle's own default route so each page previews correctly on + // its own instead of at a route another bundle owns. + const location = hybridHistory.location + const owner = findOwner(manifest, location.split('?')[0]) + const bootLocation = + owner && owner.page.bundle === hybridHistory.bundle + ? location + : defaultRouteFor(hybridHistory.bundle) + + router.push(bootLocation).catch(err => { + console.error('[vue-router-mpa] initial navigation failed:', err) }) return router } + +/** The default route of a page bundle, from the shared manifest. */ +function defaultRouteFor(bundle: string | null): string { + const page = manifest.pages.find(p => p.bundle === bundle) + return page ? defaultLocationOf(page) : '/' +} diff --git a/packages/playground-vue/tsconfig.json b/examples/vue-router-mpa/tsconfig.json similarity index 100% rename from packages/playground-vue/tsconfig.json rename to examples/vue-router-mpa/tsconfig.json diff --git a/packages/playground-vue/README.md b/packages/playground-vue/README.md deleted file mode 100644 index 8e4de2a5..00000000 --- a/packages/playground-vue/README.md +++ /dev/null @@ -1,62 +0,0 @@ -# sparkling-playground-vue - -A Vue-Lynx demo where **vue-router drives Sparkling's multi-page native -navigation** through [`sparkling-history`](../sparkling-history). - -Unlike VueLynx's in-`LynxView` SPA routing (which uses `createMemoryHistory` -to keep every route in one JS heap), here each page is a **separate Lynx -container / JS heap**, connected by Sparkling navigation — the MPA model. -The connection between heaps is established at build time via a file-based -route manifest. - -## Layout - -``` -src/ - pages/ # file-based convention: one dir = one bundle = one container - main/ routes.json → "/", "/features" - users/ routes.json → "/users", "/users/:id" (name: user-detail) - settings/ routes.json → "/settings" (+ container param title=Settings) - shared/ - router.ts # createPageRouter(): one router per bundle - NavButton.vue - generated/ - route-manifest.ts # AUTO-GENERATED by sparkling-history/codegen -``` - -`lynx.config.ts` derives the rspeedy entries from `src/pages/*` and runs -`pluginRouteManifest`, which regenerates `src/generated/route-manifest.ts` -from every page's `routes.json` before each build. - -## What it demonstrates - -Each page bundle calls `createPageRouter(localRoutes)`. Navigations that -resolve to a route the current bundle owns stay **in-heap** (normal -vue-router SPA: nested `RouterView`, params, guards). Navigations resolving -to a route owned by **another** bundle are diverted to -`router.open()` — a new native container. - -| Interaction | Kind | What happens | -|---|---|---| -| `push('/features')` from `main` | in-container | vue-router transition, guards run, one container | -| `push('/users')` | cross-container | new `users` container stacked, `main` stays alive underneath | -| tap a user → `push('/users/1')` | in-container (users) | dynamic `:id` route inside the `users` heap | -| `push({ name: 'user-detail', params })` | cross-container | named route resolved via the manifest | -| `push({ path, state })` | cross-container | `history.state` carried across heaps via the scheme URL | -| `replace('/settings')` | cross-container | swaps the current container (same depth) | -| `back()` past the local queue | boundary | pops the native container; revealed page gets an `onRestore` (pageshow-like) event | - -## Run it on the web harness - -The web build is a faithful dev harness for the native multi-container model -(each `` is a separate Worker heap, stacked exactly like native -containers): - -```bash -pnpm --filter sparkling-playground-vue build:web -LYNX_BUNDLE_DIR="$PWD/packages/playground-vue/dist/web" \ - pnpm --filter sparkling-web-shell dev -# open http://localhost:4200/?page=main -``` - -Deep-link straight into a route with `?page=users&__hs_route=/users/3`. diff --git a/packages/playground-vue/lynx.config.ts b/packages/playground-vue/lynx.config.ts deleted file mode 100644 index f0f89cff..00000000 --- a/packages/playground-vue/lynx.config.ts +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2026 TikTok Pte. Ltd. -// Licensed under the Apache License Version 2.0 that can be found in the -// LICENSE file in the root directory of this source tree. -import fs from 'node:fs' -import path from 'node:path' -import { fileURLToPath } from 'node:url' -import { defineConfig } from '@lynx-js/rspeedy' -import { pluginVueLynx } from 'vue-lynx/plugin' -import { pluginRouteManifest } from 'sparkling-history/codegen' - -const __dirname = path.dirname(fileURLToPath(import.meta.url)) -const pagesDir = path.join(__dirname, 'src/pages') - -// File-based convention: every directory under src/pages/ is a page bundle. -const entry = Object.fromEntries( - fs - .readdirSync(pagesDir, { withFileTypes: true }) - .filter(dirent => dirent.isDirectory()) - .map(dirent => [dirent.name, `./src/pages/${dirent.name}/index.ts`]), -) - -export default defineConfig({ - source: { entry }, - output: { - filename: { - bundle: '[name].lynx.bundle', - }, - }, - environments: { - web: { - output: { - assetPrefix: '/', - distPath: { - root: 'dist/web', - }, - }, - }, - lynx: { - output: { - assetPrefix: 'asset:///', - }, - }, - }, - plugins: [ - pluginVueLynx({ - optionsApi: false, - enableCSSSelector: true, - }), - // Generates src/generated/route-manifest.ts from src/pages/*/routes.json — - // the shared route table every page bundle embeds (see sparkling-history). - pluginRouteManifest({ - pagesDir, - outFile: path.join(__dirname, 'src/generated/route-manifest.ts'), - }), - ], -}) diff --git a/packages/playground-vue/package.json b/packages/playground-vue/package.json deleted file mode 100644 index a776ab6b..00000000 --- a/packages/playground-vue/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "sparkling-playground-vue", - "version": "0.1.0", - "private": true, - "type": "module", - "description": "Vue-Lynx demo: vue-router driving Sparkling multi-page native navigation via sparkling-history", - "homepage": "https://tiktok.github.io/sparkling/", - "repository": { - "type": "git", - "url": "https://github.com/tiktok/sparkling", - "directory": "packages/playground-vue" - }, - "scripts": { - "build": "pnpm -C ../.. --filter sparkling-method --filter sparkling-navigation --filter sparkling-storage --filter sparkling-media --filter sparkling-history build && rspeedy build", - "build:web": "pnpm -C ../.. --filter sparkling-method --filter sparkling-navigation --filter sparkling-storage --filter sparkling-media --filter sparkling-history build && rspeedy build --environment web", - "dev": "rspeedy dev", - "dev:web": "rspeedy build --environment web && pnpm --filter sparkling-web-shell dev", - "test": "vitest run --passWithNoTests" - }, - "dependencies": { - "sparkling-history": "workspace:*", - "sparkling-method": "workspace:*", - "sparkling-navigation": "workspace:*", - "vue-lynx": "0.4.0", - "vue-router": "^4.5.1" - }, - "devDependencies": { - "@lynx-js/rspeedy": "^0.13.3", - "@rsbuild/plugin-vue": "^1.2.6", - "typescript": "^5.8.3" - }, - "engines": { - "node": "^22 || ^24" - } -} diff --git a/packages/sparkling-history/COMPATIBILITY.md b/packages/sparkling-history/COMPATIBILITY.md index 9a622f52..42a53bc6 100644 --- a/packages/sparkling-history/COMPATIBILITY.md +++ b/packages/sparkling-history/COMPATIBILITY.md @@ -30,7 +30,7 @@ Legend: ✅ supported & validated · 🟦 supported in-heap (Vue-native pass-thr Validation column points at where the claim is exercised: `history.spec` / `cross-container.spec` / `vue-adapter.spec` / `vue-features.spec` are unit suites in `src/__tests__`; **e2e** is the -Playwright run against the web shell driving `packages/playground-vue`. +Playwright run against the web shell driving `examples/vue-router-mpa`. --- @@ -60,7 +60,7 @@ Playwright run against the web shell driving `packages/playground-vue`. | 15 | Guards — in-component (`onBeforeRouteLeave`/`Update`) | in-heap | 🟦 | Standard Vue Router; runs for in-heap transitions. **Cross-heap caveat:** leaving a page by opening another container does *not* run the opener's leave guards — the opener stays mounted underneath (it wasn't left). This matches browser MPA: navigating to a new document doesn't fire the old document's in-app leave guards. | | 16 | **Route Meta Fields** (`meta`) | in-heap | 🟦 | Untouched Vue Router feature. Meta does not cross heaps (not serialized into the scheme); put cross-page data in query/state. | | 17 | **Data Fetching** (guard-driven / after-nav) | in-heap | 🟦 | Works per-heap. Each opened container fetches on its own boot — the natural MPA data-loading point. | -| 18 | **Composition API** (`useRoute`/`useRouter`/`useLink`) | in-heap | ✅ | Used throughout `packages/playground-vue`; `useRouter()` returns the `SparklingRouter` (adds `hybridHistory`). | +| 18 | **Composition API** (`useRoute`/`useRouter`/`useLink`) | in-heap | ✅ | Used throughout `examples/vue-router-mpa`; `useRouter()` returns the `SparklingRouter` (adds `hybridHistory`). | | 19 | **RouterView slot** (``) | in-heap | 🟦 | Pure Vue feature; unaffected. | | 20 | **Transitions** (`` + ``) | in-heap | ⚠️ | In-heap route transitions work (Vue ``). **Cross-container** transitions are the *native* push/pop animation (owned by Sparkling / the platform), not Vue transitions — you get platform animation, configurable via scheme params (e.g. `animated`). | | 21 | **Scroll Behavior** (`scrollBehavior`, saved position) | — | ❌ | Not supported. Vue Router's `scrollBehavior` drives `window.scrollTo` / `document` scroll and reads `window.history.state.scroll`; **Lynx has no window scroll** (scrolling lives inside ``/``, per-container). Saved-position restore across containers is likewise a native concern. Platform limitation, not fixable in the shim. | diff --git a/packages/sparkling-history/README.md b/packages/sparkling-history/README.md index 5370b971..83d27d23 100644 --- a/packages/sparkling-history/README.md +++ b/packages/sparkling-history/README.md @@ -99,7 +99,7 @@ plugins: [ ] ``` -See [`packages/playground-vue`](../playground-vue) for a full working demo, +See [`examples/vue-router-mpa`](../../examples/vue-router-mpa) for a full working demo, and [`COMPATIBILITY.md`](./COMPATIBILITY.md) for the Vue Router feature matrix. ## What crosses the heap boundary diff --git a/packages/sparkling-web-shell/src/index.ts b/packages/sparkling-web-shell/src/index.ts index 5e59638e..05461ce5 100644 --- a/packages/sparkling-web-shell/src/index.ts +++ b/packages/sparkling-web-shell/src/index.ts @@ -102,13 +102,24 @@ function parseSchemeQuery(scheme: string): Record { return result; } -/** Resolve the bundle URL a scheme points at (dev `url=` wins over `bundle=`). */ +/** + * Resolve the bundle URL a scheme points at (dev `url=` wins over `bundle=`). + * + * Sparkling schemes name the NATIVE bundle (`.lynx.bundle`), but this + * shell renders through @lynx-js/web-core, which needs the WEB-target build + * (`.web.bundle`). So we rewrite the extension when resolving the URL to + * load — keeping the scheme itself native-shaped. + */ +function toWebBundle(bundlePath: string): string { + return bundlePath.replace(/\.lynx\.bundle$/, '.web.bundle'); +} + function bundleUrlOf(scheme: string): string | null { const query = parseSchemeQuery(scheme); - if (query.url) return query.url; + if (query.url) return toWebBundle(query.url); if (query.bundle) { const name = query.bundle.split('/').filter(Boolean).pop() ?? query.bundle; - return `/${name}`; + return `/${toWebBundle(name)}`; } return null; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7f646f9e..45e32ac4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,6 +43,37 @@ importers: specifier: ^5.8.3 version: 5.9.3 + examples/vue-router-mpa: + dependencies: + sparkling-history: + specifier: workspace:* + version: link:../../packages/sparkling-history + sparkling-method: + specifier: workspace:* + version: link:../../packages/sparkling-method + sparkling-navigation: + specifier: workspace:* + version: link:../../packages/methods/sparkling-navigation + vue-lynx: + specifier: 0.4.0 + version: 0.4.0(@lynx-js/lynx-core@0.1.3)(@lynx-js/types@3.7.0)(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rsbuild/plugin-vue@1.2.9(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3)))(@types/react@19.2.14)(tslib@2.8.1)(webpack@5.105.0) + vue-router: + specifier: ^4.5.1 + version: 4.6.4(vue@3.5.39(typescript@5.9.3)) + devDependencies: + '@lynx-js/qrcode-rsbuild-plugin': + specifier: ^0.4.4 + version: 0.4.6 + '@lynx-js/rspeedy': + specifier: ^0.13.3 + version: 0.13.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(typescript@5.9.3)(webpack@5.105.0) + '@rsbuild/plugin-vue': + specifier: ^1.2.6 + version: 1.2.9(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3)) + typescript: + specifier: ^5.8.3 + version: 5.9.3 + packages/create-sparkling-app: dependencies: '@clack/prompts': @@ -195,34 +226,6 @@ importers: specifier: ^3.1.2 version: 3.2.4(@types/debug@4.1.13)(@types/node@25.6.0)(jiti@2.6.1)(jsdom@26.1.0)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.3) - packages/playground-vue: - dependencies: - sparkling-history: - specifier: workspace:* - version: link:../sparkling-history - sparkling-method: - specifier: workspace:* - version: link:../sparkling-method - sparkling-navigation: - specifier: workspace:* - version: link:../methods/sparkling-navigation - vue-lynx: - specifier: 0.4.0 - version: 0.4.0(@lynx-js/lynx-core@0.1.3)(@lynx-js/types@3.7.0)(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rsbuild/plugin-vue@1.2.9(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3)))(@types/react@19.2.14)(tslib@2.8.1)(webpack@5.105.0) - vue-router: - specifier: ^4.5.1 - version: 4.6.4(vue@3.5.39(typescript@5.9.3)) - devDependencies: - '@lynx-js/rspeedy': - specifier: ^0.13.3 - version: 0.13.6(@rspack/core@1.7.11(@swc/helpers@0.5.21))(typescript@5.9.3)(webpack@5.105.0) - '@rsbuild/plugin-vue': - specifier: ^1.2.6 - version: 1.2.9(@rsbuild/core@2.0.0-rc.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(core-js@3.47.0))(@rspack/core@1.7.11(@swc/helpers@0.5.21))(vue@3.5.39(typescript@5.9.3)) - typescript: - specifier: ^5.8.3 - version: 5.9.3 - packages/sparkling-app-cli: dependencies: '@lynx-js/rspeedy': From 2756364eb93680a0e21d969a7cc4b57a5b208375 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 20:18:08 +0000 Subject: [PATCH 14/18] docs(examples): add Vue Router (MPA) example page with embeds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New Examples page (en + zh) embedding the vue-router-mpa example via go-web: - embeds the `main` bundle, where in-heap Home<->Features navigation runs LIVE in the web preview (pure Vue Router, no native bridge) — going beyond the other demos, whose native calls are inert on the web - embeds the `users` bundle (dynamic /users/:id), booting at its own default route in the standalone preview - scopes what the web preview shows vs. cross-page MPA navigation, which needs the QR/device tab or the local web-shell harness - maps each Vue Router concept to its Sparkling equivalent and links the sparkling-history compatibility matrix Wired into the Examples overview and the en/zh website sidebars. Verified the page renders and the component mounts a live web-core preview of the vue-lynx bundle. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01ARyWgB3243gQx1exWK61Qb --- docs/en/guide/examples.mdx | 7 +++ docs/en/guide/examples/vue-router.mdx | 79 +++++++++++++++++++++++++++ docs/zh/guide/examples.mdx | 6 ++ docs/zh/guide/examples/vue-router.mdx | 68 +++++++++++++++++++++++ packages/website/rspress.config.ts | 2 + 5 files changed, 162 insertions(+) create mode 100644 docs/en/guide/examples/vue-router.mdx create mode 100644 docs/zh/guide/examples/vue-router.mdx diff --git a/docs/en/guide/examples.mdx b/docs/en/guide/examples.mdx index e13a8e5e..e90a9917 100644 --- a/docs/en/guide/examples.mdx +++ b/docs/en/guide/examples.mdx @@ -21,6 +21,13 @@ A minimal Sparkling Lynx page with a tap counter. +## Vue Router (MPA) + +[Vue Router](/guide/examples/vue-router) driving Sparkling's multi-page native +navigation: one router config, multiple native Lynx pages. In-heap (SPA) route +transitions run live in the web preview; cross-page (MPA) navigation opens +native containers on device. + ## Sparkling Go demos The [Sparkling Go playground](https://github.com/tiktok/sparkling/tree/main/packages/playground) diff --git a/docs/en/guide/examples/vue-router.mdx b/docs/en/guide/examples/vue-router.mdx new file mode 100644 index 00000000..35f62405 --- /dev/null +++ b/docs/en/guide/examples/vue-router.mdx @@ -0,0 +1,79 @@ +# Vue Router (MPA) + +This example runs **[Vue Router](https://router.vuejs.org) on top of Sparkling +navigation**, so a single router configuration drives navigation across +**multiple native Lynx pages** — the multi-page (MPA) model. + +It is built on [`sparkling-history`](https://github.com/tiktok/sparkling/tree/main/packages/sparkling-history), +a framework-agnostic shim that implements Vue Router's history contract on top +of Sparkling's `router.open` / `router.close`. + +:::info Different from VueLynx's in-view router +[VueLynx](https://vue.lynxjs.org) supports Vue Router with `createMemoryHistory` +to build an SPA **inside a single `LynxView`** (one JS heap). This example is +the opposite: each page is a **separate Lynx container in its own JS heap**, +and Vue Router drives *native* navigation between them. The heaps share no +memory — only a build-time route manifest connects them. +::: + +## In-heap navigation (live in the web preview) + +The `main` bundle owns two routes, `/` and `/features`. Navigating between them +is an ordinary Vue Router transition **inside one heap** — no native bridge is +involved — so it runs live in the web preview below. Tap **Features** (or the +in-container button) and watch the route change without opening a new page. + + + +:::tip This goes beyond the other demos +Sparkling's other web previews render UI only — their native calls are inert in +the browser. Here the in-heap route transitions actually work on the web, +because that regime is pure Vue Router. +::: + +## Dynamic routes (the `users` bundle) + +The `users` bundle owns `/users` and the dynamic `/users/:id`. Tapping a user +is an in-heap navigation with a route param, resolved entirely in this bundle's +router. This preview boots at the bundle's own default route (`/users`). + + + +## Cross-page navigation (MPA — use the QR / device tab) + +When `router.push` resolves to a route owned by **another** bundle (per the +route manifest), the shim diverts it to `router.open`, which stacks a **new +native container**. The previous page stays alive underneath, exactly like a +native navigation stack. + +Because the web preview above renders one bundle at a time and has no native +container stack, cross-page buttons (e.g. **Users** or **Settings** from Home) +can't complete in the browser. To exercise the full flow: + +- **Scan the QR code** and open it in Lynx Explorer (with Sparkling + integrated), where `router.open` runs natively; or +- run the local **web-shell harness**, which faithfully simulates the native + container stack in a browser — see the + [example README](https://github.com/tiktok/sparkling/tree/main/examples/vue-router-mpa#run-the-full-flow-on-the-local-web-shell-harness). + +## How it maps + +| Vue Router | Sparkling | +|---|---| +| route owned by the current bundle | in-heap transition (SPA) | +| route owned by another bundle | `router.open()` — new container (MPA) | +| `router.back()` past the local history | `router.close()` — pop the container | +| `history.state` | carried across heaps inside the scheme URL | +| history mode (`createWebHistory`/…) | replaced by `createHybridHistory` | + +For the complete traversal of Vue Router's feature set — what is supported, +reframed, or limited under the MPA model — see the +[compatibility matrix](https://github.com/tiktok/sparkling/blob/main/packages/sparkling-history/COMPATIBILITY.md). diff --git a/docs/zh/guide/examples.mdx b/docs/zh/guide/examples.mdx index 46f5cd1c..f9ba8c1a 100644 --- a/docs/zh/guide/examples.mdx +++ b/docs/zh/guide/examples.mdx @@ -20,6 +20,12 @@ Sparkling 提供了一组可运行的 Lynx 示例。每个示例都通过 +## Vue Router(MPA) + +[Vue Router](/guide/examples/vue-router) 驱动 Sparkling 的多页原生导航:一份路由配置, +多个原生 Lynx 页面。堆内(SPA)路由切换可在网页预览中实时运行;跨页(MPA)导航则在真机上 +打开原生容器。 + ## Sparkling Go 示例 [Sparkling Go playground](https://github.com/tiktok/sparkling/tree/main/packages/playground) diff --git a/docs/zh/guide/examples/vue-router.mdx b/docs/zh/guide/examples/vue-router.mdx new file mode 100644 index 00000000..4ee01c49 --- /dev/null +++ b/docs/zh/guide/examples/vue-router.mdx @@ -0,0 +1,68 @@ +# Vue Router(MPA) + +本示例让 **[Vue Router](https://router.vuejs.org) 运行在 Sparkling 导航之上**, +从而用一份路由配置驱动**多个原生 Lynx 页面**之间的导航 —— 即多页(MPA)模型。 + +它基于 [`sparkling-history`](https://github.com/tiktok/sparkling/tree/main/packages/sparkling-history): +一个与框架无关的 shim,在 Sparkling 的 `router.open` / `router.close` 之上实现了 +Vue Router 的 history 契约。 + +:::info 与 VueLynx 的视图内路由不同 +[VueLynx](https://vue.lynxjs.org) 通过 `createMemoryHistory` 在**单个 `LynxView` +内**(同一个 JS heap)构建 SPA。本示例正相反:每个页面是一个**独立的 Lynx 容器、拥有 +各自的 JS heap**,Vue Router 驱动它们之间的*原生*导航。这些 heap 不共享内存 —— 仅靠一份 +构建期生成的路由清单相互连接。 +::: + +## 堆内导航(网页预览中可实时运行) + +`main` bundle 拥有两个路由 `/` 与 `/features`。在两者间切换是发生在**同一个 heap 内**的 +普通 Vue Router 过渡,不涉及原生桥,因此可在下方的网页预览中实时运行。点击 **Features** +(或页内按钮),可见路由在不打开新页面的情况下发生变化。 + + + +:::tip 这一点超越了其他示例 +Sparkling 的其他网页预览只渲染 UI —— 其原生调用在浏览器中是失效的。而这里堆内的路由过渡在 +网页上确实可用,因为这一部分是纯粹的 Vue Router。 +::: + +## 动态路由(`users` bundle) + +`users` bundle 拥有 `/users` 与动态的 `/users/:id`。点击某个用户是带路由参数的堆内导航, +完全由该 bundle 自己的 router 解析。此预览从该 bundle 自身的默认路由(`/users`)启动。 + + + +## 跨页导航(MPA —— 请用二维码 / 真机标签页) + +当 `router.push` 解析到**另一个** bundle 拥有的路由(依据路由清单)时,shim 会将其转发到 +`router.open`,从而压入一个**新的原生容器**。上一个页面仍存活于其下方,与原生导航栈完全一致。 + +由于上方的网页预览一次只渲染一个 bundle、且没有原生容器栈,跨页按钮(例如从首页点 **Users** +或 **Settings**)无法在浏览器中完成。要体验完整流程: + +- **扫描二维码**,在(已集成 Sparkling 的)Lynx Explorer 中打开,`router.open` 会原生运行;或 +- 运行本地 **web-shell harness**,它会在浏览器中忠实模拟原生容器栈 —— 见 + [示例 README](https://github.com/tiktok/sparkling/tree/main/examples/vue-router-mpa#run-the-full-flow-on-the-local-web-shell-harness)。 + +## 映射关系 + +| Vue Router | Sparkling | +|---|---| +| 当前 bundle 拥有的路由 | 堆内过渡(SPA) | +| 其他 bundle 拥有的路由 | `router.open()` —— 新容器(MPA) | +| `router.back()` 越过本地历史 | `router.close()` —— 弹出容器 | +| `history.state` | 通过 scheme URL 在 heap 之间传递 | +| history 模式(`createWebHistory` 等) | 由 `createHybridHistory` 取代 | + +Vue Router 完整特性集在 MPA 模型下的支持、重构与限制情况,参见 +[兼容性矩阵](https://github.com/tiktok/sparkling/blob/main/packages/sparkling-history/COMPATIBILITY.md)。 diff --git a/packages/website/rspress.config.ts b/packages/website/rspress.config.ts index 2b0a7e18..ceb87ced 100644 --- a/packages/website/rspress.config.ts +++ b/packages/website/rspress.config.ts @@ -68,6 +68,7 @@ const sidebarEn = { { text: 'Global Props', link: '/guide/examples/global-props' }, { text: 'Storage', link: '/guide/examples/storage' }, { text: 'Media', link: '/guide/examples/media' }, + { text: 'Vue Router (MPA)', link: '/guide/examples/vue-router' }, { dividerType: 'solid' }, { sectionHeaderText: 'Core' }, { text: 'CLI', link: '/guide/cli' }, @@ -151,6 +152,7 @@ const sidebarZhBase = { { text: '全局属性', link: '/guide/examples/global-props' }, { text: '存储', link: '/guide/examples/storage' }, { text: '媒体', link: '/guide/examples/media' }, + { text: 'Vue Router (MPA)', link: '/guide/examples/vue-router' }, { dividerType: 'solid' }, { sectionHeaderText: '核心' }, { text: 'CLI', link: '/guide/cli' }, From c8adbc3ea23bcfd1ea08f3d2c8f52e61dbe438c5 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 23:13:50 +0000 Subject: [PATCH 15/18] refactor(web): adopt main's pluggable RouterWebHost in the web shell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After rebasing onto PR#7 (which added the web-method bridge + a pluggable RouterWebHost), drop the shell's old sparkling:navigate/close event contract and install its stacked-container behavior via setRouterWebHost instead — the sanctioned extension point. The host receives the full scheme (all a new container's heap needs) and drives push/replace/close directly. Also extend RouterWebHost.open with an optional { replace } (threaded from router.open's params) so router.replace can swap the current container on web instead of stacking; the default History-API host honors it via replaceState. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01ARyWgB3243gQx1exWK61Qb --- .../sparkling-navigation/src/web/index.ts | 16 +++++-- packages/sparkling-web-shell/src/index.ts | 48 +++++++++---------- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/packages/methods/sparkling-navigation/src/web/index.ts b/packages/methods/sparkling-navigation/src/web/index.ts index b3e8a2aa..07437caf 100644 --- a/packages/methods/sparkling-navigation/src/web/index.ts +++ b/packages/methods/sparkling-navigation/src/web/index.ts @@ -4,6 +4,12 @@ import { registerWebMethod } from 'sparkling-method/web-registry'; +/** Options forwarded from `router.open` to the {@link RouterWebHost}. */ +export interface RouterOpenOptions { + /** Replace the current entry/container instead of stacking a new one. */ + replace?: boolean; +} + /** * How web navigation is actually performed. The default host drives the * browser History API and assumes the Lynx app owns the whole page (e.g. @@ -12,14 +18,15 @@ import { registerWebMethod } from 'sparkling-method/web-registry'; * so navigation stays scoped to the card instead of the top-level document. */ export interface RouterWebHost { - open(pageName: string, scheme: string): void; + open(pageName: string, scheme: string, options?: RouterOpenOptions): void; close(): void; } const defaultHost: RouterWebHost = { - open(pageName, scheme) { + open(pageName, scheme, options) { const state = { page: pageName, scheme }; - window.history.pushState(state, '', `?page=${encodeURIComponent(pageName)}`); + const method = options?.replace ? 'replaceState' : 'pushState'; + window.history[method](state, '', `?page=${encodeURIComponent(pageName)}`); // Notify a full-page host (e.g. the web shell) to swap its . window.dispatchEvent( new CustomEvent('sparkling:navigate', { detail: { page: pageName, state } }), @@ -71,7 +78,8 @@ registerWebMethod('router.open', (params, callback) => { callback({ code: 0, msg: 'No bundle or url param in scheme' }); return; } - host.open(pageName, scheme); + const replace = (params.data as Record)?.replace === true; + host.open(pageName, scheme, { replace }); callback({ code: 1, msg: 'ok' }); } catch (e) { callback({ code: 0, msg: `Failed to parse scheme: ${e}` }); diff --git a/packages/sparkling-web-shell/src/index.ts b/packages/sparkling-web-shell/src/index.ts index 05461ce5..ca41526e 100644 --- a/packages/sparkling-web-shell/src/index.ts +++ b/packages/sparkling-web-shell/src/index.ts @@ -7,9 +7,9 @@ import '@lynx-js/web-elements/index.css'; // Import web method handlers (self-registering). // These register handlers in the main-thread registry where browser APIs // (localStorage, window.history, document.createElement) are available. -import 'sparkling-navigation/web'; import 'sparkling-storage/web'; import 'sparkling-media/web'; +import { setRouterWebHost } from 'sparkling-navigation/web'; import { getWebMethodHandler } from 'sparkling-method/web-registry'; @@ -298,30 +298,28 @@ function reconcileWithHistoryState(state: ShellHistoryState | null): void { // ── Wire up ──────────────────────────────────────────────────────────── -window.addEventListener('sparkling:navigate', ((event: CustomEvent) => { - event.preventDefault(); // signal the method handler that the shell took over - const { scheme, replace } = event.detail as { scheme: string; replace: boolean }; - if (replace) { - replaceTopView(scheme); - } else { - pushView(scheme); - } - commitHistory(replace); -}) as EventListener); - -window.addEventListener('sparkling:close', ((event: CustomEvent) => { - event.preventDefault(); - const { containerID } = event.detail as { containerID?: string }; - const top = topEntry(); - if (containerID && top && top.containerID !== containerID) { - console.warn( - '[sparkling-web-shell] closing a non-top container is not supported on web; ignoring.', - ); - return; - } - // going back through browser history keeps history and view stack in sync - window.history.back(); -}) as EventListener); +// Install a full-page RouterWebHost: instead of the default History-API host, +// the shell owns the whole page, so router.open/close drive the stacked +// container model directly (see sparkling-navigation's pluggable +// RouterWebHost). The scheme carries everything a new container's heap needs +// (bundle + queryItems), so we push/replace from it and mirror the stack into +// browser history for back/forward/reload. +setRouterWebHost({ + open(_pageName, scheme, options) { + const replace = options?.replace === true; + if (replace) { + replaceTopView(scheme); + } else { + pushView(scheme); + } + commitHistory(replace); + }, + close() { + // Going back through browser history keeps history and the view stack in + // sync (popstate below pops the revealed container). + window.history.back(); + }, +}); window.addEventListener('popstate', (event) => { reconcileWithHistoryState(event.state as ShellHistoryState | null); From de712ee2b24361507cff5a900b921a866ccf3b7e Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 23:26:07 +0000 Subject: [PATCH 16/18] feat(example): surface cross-page nav result; document verification MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Verified the example in the go-web web preview: - in-heap (SPA) navigation WORKS live (e.g. Home <-> Features) — pure Vue Router, no native bridge - cross-page (MPA) navigation does NOT run: go-web's preview provides no Sparkling `spkPipe` bridge and no hook to register a RouterWebHost on its , so `router.open` fails ("Native module spkPipe is not registered"). The same example cross-navigates correctly in the web-shell harness, which owns the page and installs the host + bridge. Home.vue now awaits cross-navigation and, when no native host is available, shows an inline notice instead of failing silently — so the limitation is visible in the preview. Docs (en/zh) updated to state precisely why in-heap works but cross-page needs device/harness. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01ARyWgB3243gQx1exWK61Qb --- docs/en/guide/examples/vue-router.mdx | 22 +++++++++--- docs/zh/guide/examples/vue-router.mdx | 14 ++++++-- .../src/pages/main/views/Home.vue | 36 ++++++++++++++++--- 3 files changed, 59 insertions(+), 13 deletions(-) diff --git a/docs/en/guide/examples/vue-router.mdx b/docs/en/guide/examples/vue-router.mdx index 35f62405..4cb80410 100644 --- a/docs/en/guide/examples/vue-router.mdx +++ b/docs/en/guide/examples/vue-router.mdx @@ -54,16 +54,28 @@ route manifest), the shim diverts it to `router.open`, which stacks a **new native container**. The previous page stays alive underneath, exactly like a native navigation stack. -Because the web preview above renders one bundle at a time and has no native -container stack, cross-page buttons (e.g. **Users** or **Settings** from Home) -can't complete in the browser. To exercise the full flow: +The `` web preview renders one bundle at a time and does not provide +Sparkling's native method bridge (the `spkPipe` module), so `router.open` +has nowhere to go. Tapping a cross-page button in the preview above therefore +shows an inline notice ("native navigation unavailable here — open on device") +instead of navigating. To exercise the full flow: - **Scan the QR code** and open it in Lynx Explorer (with Sparkling integrated), where `router.open` runs natively; or -- run the local **web-shell harness**, which faithfully simulates the native - container stack in a browser — see the +- run the local **web-shell harness**, which provides the method bridge and + faithfully simulates the native container stack in a browser — see the [example README](https://github.com/tiktok/sparkling/tree/main/examples/vue-router-mpa#run-the-full-flow-on-the-local-web-shell-harness). +:::note Why in-heap works but cross-page doesn't +In-heap navigation is pure Vue Router running in the card's own JS heap — no +native call — so it works in the preview. Cross-page navigation calls +`router.open`, which needs a native host. `sparkling-navigation` exposes a +pluggable `RouterWebHost` for embedders to supply one, but go-web's preview +doesn't currently expose a hook to register it (or the `spkPipe` bridge) on +its ``. The web-shell, which owns the whole page, installs that host +and bridge itself. +::: + ## How it maps | Vue Router | Sparkling | diff --git a/docs/zh/guide/examples/vue-router.mdx b/docs/zh/guide/examples/vue-router.mdx index 4ee01c49..ad008e1f 100644 --- a/docs/zh/guide/examples/vue-router.mdx +++ b/docs/zh/guide/examples/vue-router.mdx @@ -47,13 +47,21 @@ Sparkling 的其他网页预览只渲染 UI —— 其原生调用在浏览器 当 `router.push` 解析到**另一个** bundle 拥有的路由(依据路由清单)时,shim 会将其转发到 `router.open`,从而压入一个**新的原生容器**。上一个页面仍存活于其下方,与原生导航栈完全一致。 -由于上方的网页预览一次只渲染一个 bundle、且没有原生容器栈,跨页按钮(例如从首页点 **Users** -或 **Settings**)无法在浏览器中完成。要体验完整流程: +`` 网页预览一次只渲染一个 bundle,且不提供 Sparkling 的原生方法桥(`spkPipe` 模块), +因此 `router.open` 无处可去。在上方预览中点击跨页按钮不会导航,而是显示一行提示 +("native navigation unavailable here — open on device")。要体验完整流程: - **扫描二维码**,在(已集成 Sparkling 的)Lynx Explorer 中打开,`router.open` 会原生运行;或 -- 运行本地 **web-shell harness**,它会在浏览器中忠实模拟原生容器栈 —— 见 +- 运行本地 **web-shell harness**,它提供方法桥并忠实模拟原生容器栈 —— 见 [示例 README](https://github.com/tiktok/sparkling/tree/main/examples/vue-router-mpa#run-the-full-flow-on-the-local-web-shell-harness)。 +:::note 为何堆内可用、跨页不可用 +堆内导航是运行在卡片自身 JS heap 内的纯 Vue Router —— 没有原生调用 —— 因此在预览中可用。 +跨页导航调用 `router.open`,需要一个原生 host。`sparkling-navigation` 暴露了可插拔的 +`RouterWebHost` 供嵌入方提供 host,但 go-web 的预览目前没有暴露在其 `` 上注册 +该 host(或 `spkPipe` 桥)的钩子。而 web-shell 拥有整个页面,会自行安装该 host 与桥。 +::: + ## 映射关系 | Vue Router | Sparkling | diff --git a/examples/vue-router-mpa/src/pages/main/views/Home.vue b/examples/vue-router-mpa/src/pages/main/views/Home.vue index 99226605..f7ee1b6d 100644 --- a/examples/vue-router-mpa/src/pages/main/views/Home.vue +++ b/examples/vue-router-mpa/src/pages/main/views/Home.vue @@ -1,8 +1,27 @@ From b9028aca20aa2ec552849270d6054b23d65e84ce Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 13 Jul 2026 03:28:19 +0000 Subject: [PATCH 17/18] feat(website): live cross-page MPA demo via the embedded web shell () MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit go-web's previews one bundle with no native bridge, so cross-page (MPA) navigation can't run in it. This adds a working, no-go-web-change alternative: opens the Sparkling web shell in a NEW TAB, where the full router.open -> new native container flow runs live in the browser. A new tab (not an inline iframe) is deliberate: the shell owns the whole page, so the browser's own back/forward buttons drive its MPA history stack, instead of being trapped inside a frame. - sparkling-web-shell: load example bundles from a runtime `?base=` (so one static build serves any example), and build with a relative assetPrefix (WEBSHELL_ASSET_PREFIX=auto) so it can be dropped under any deploy base; publicDir is dev-only (copyOnBuild: false) so the static build carries no example bundles. - website: scripts/build-mpa-preview.mjs builds the shell into public/mpa-preview/ (best-effort; wired into dev/build via prepare-previews). New global component renders a launch card + new-tab link (withBase). public/mpa-preview/ is gitignored (generated). - docs (en/zh): the Vue Router example's cross-page section links to the live demo and explains the browser-back behavior. Verified in a browser: from the launch link, tapping push('/users') stacks a second (1 -> 2), the top container is the users bundle at depth 1, and the browser BACK button pops it back to main — real MPA on the web. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01ARyWgB3243gQx1exWK61Qb --- docs/en/guide/examples/vue-router.mdx | 44 ++++----- docs/zh/guide/examples/vue-router.mdx | 28 +++--- .../sparkling-web-shell/rsbuild.config.ts | 9 +- packages/sparkling-web-shell/src/index.ts | 16 +++- packages/website/.gitignore | 3 + packages/website/package.json | 6 +- packages/website/rspress.config.ts | 9 +- .../website/scripts/build-mpa-preview.mjs | 75 ++++++++++++++++ .../src/components/mpa-preview/MpaPreview.tsx | 89 +++++++++++++++++++ 9 files changed, 239 insertions(+), 40 deletions(-) create mode 100644 packages/website/scripts/build-mpa-preview.mjs create mode 100644 packages/website/src/components/mpa-preview/MpaPreview.tsx diff --git a/docs/en/guide/examples/vue-router.mdx b/docs/en/guide/examples/vue-router.mdx index 4cb80410..592fd65b 100644 --- a/docs/en/guide/examples/vue-router.mdx +++ b/docs/en/guide/examples/vue-router.mdx @@ -47,33 +47,35 @@ router. This preview boots at the bundle's own default route (`/users`). defaultFile="src/pages/users/views/UserList.vue" /> -## Cross-page navigation (MPA — use the QR / device tab) +## Cross-page navigation (MPA — live demo) When `router.push` resolves to a route owned by **another** bundle (per the route manifest), the shim diverts it to `router.open`, which stacks a **new native container**. The previous page stays alive underneath, exactly like a native navigation stack. -The `` web preview renders one bundle at a time and does not provide -Sparkling's native method bridge (the `spkPipe` module), so `router.open` -has nowhere to go. Tapping a cross-page button in the preview above therefore -shows an inline notice ("native navigation unavailable here — open on device") -instead of navigating. To exercise the full flow: - -- **Scan the QR code** and open it in Lynx Explorer (with Sparkling - integrated), where `router.open` runs natively; or -- run the local **web-shell harness**, which provides the method bridge and - faithfully simulates the native container stack in a browser — see the - [example README](https://github.com/tiktok/sparkling/tree/main/examples/vue-router-mpa#run-the-full-flow-on-the-local-web-shell-harness). - -:::note Why in-heap works but cross-page doesn't -In-heap navigation is pure Vue Router running in the card's own JS heap — no -native call — so it works in the preview. Cross-page navigation calls -`router.open`, which needs a native host. `sparkling-navigation` exposes a -pluggable `RouterWebHost` for embedders to supply one, but go-web's preview -doesn't currently expose a hook to register it (or the `spkPipe` bridge) on -its ``. The web-shell, which owns the whole page, installs that host -and bridge itself. +The `` previews above render one bundle at a time with no native bridge, so +cross-page navigation can't run in them. The demo below is different: it opens +the **Sparkling web shell** in a new tab — the shell stacks a `` per +container, provides the `spkPipe` method bridge, and installs a +`RouterWebHost`, so `router.open` actually opens a new container **in your +browser**. Tap **push('/users')** and a second container stacks on top (the +header's `depth` becomes 1); the **browser back button** pops it, because the +shell owns the whole tab and drives real browser history. + + + +You can also **scan the QR code** on any `` preview to run it in Lynx +Explorer (with Sparkling integrated), where `router.open` runs natively. + +:::note Why the `` previews can't cross pages, but the web shell can +In-heap navigation is pure Vue Router in the card's own JS heap — no native +call — so it runs in any preview. Cross-page navigation calls `router.open`, +which needs a native host. `sparkling-navigation` exposes a pluggable +`RouterWebHost`, but go-web's `` preview doesn't yet expose a hook to +register it (or the `spkPipe` bridge) on its ``. The web shell owns +its whole tab, so it installs that host and bridge itself — which is why +cross-page navigation works there. ::: ## How it maps diff --git a/docs/zh/guide/examples/vue-router.mdx b/docs/zh/guide/examples/vue-router.mdx index ad008e1f..a473ecf3 100644 --- a/docs/zh/guide/examples/vue-router.mdx +++ b/docs/zh/guide/examples/vue-router.mdx @@ -42,24 +42,28 @@ Sparkling 的其他网页预览只渲染 UI —— 其原生调用在浏览器 defaultFile="src/pages/users/views/UserList.vue" /> -## 跨页导航(MPA —— 请用二维码 / 真机标签页) +## 跨页导航(MPA —— 实时体验) 当 `router.push` 解析到**另一个** bundle 拥有的路由(依据路由清单)时,shim 会将其转发到 `router.open`,从而压入一个**新的原生容器**。上一个页面仍存活于其下方,与原生导航栈完全一致。 -`` 网页预览一次只渲染一个 bundle,且不提供 Sparkling 的原生方法桥(`spkPipe` 模块), -因此 `router.open` 无处可去。在上方预览中点击跨页按钮不会导航,而是显示一行提示 -("native navigation unavailable here — open on device")。要体验完整流程: +上方的 `` 预览一次只渲染一个 bundle、且没有原生桥,所以跨页导航跑不起来。下方这个 demo +不同:它会在**新标签页**打开 **Sparkling web shell**——为每个容器堆叠一个 ``、 +提供 `spkPipe` 方法桥、并安装 `RouterWebHost`——因此 `router.open` 会真的**在你的浏览器里** +打开一个新容器。点击 **push('/users')**,第二个容器压栈(顶部 `depth` 变为 1),而**浏览器返回键** +会弹出它——因为 shell 独占整个标签页,驱动的是真实的浏览器 history。 -- **扫描二维码**,在(已集成 Sparkling 的)Lynx Explorer 中打开,`router.open` 会原生运行;或 -- 运行本地 **web-shell harness**,它提供方法桥并忠实模拟原生容器栈 —— 见 - [示例 README](https://github.com/tiktok/sparkling/tree/main/examples/vue-router-mpa#run-the-full-flow-on-the-local-web-shell-harness)。 + -:::note 为何堆内可用、跨页不可用 -堆内导航是运行在卡片自身 JS heap 内的纯 Vue Router —— 没有原生调用 —— 因此在预览中可用。 -跨页导航调用 `router.open`,需要一个原生 host。`sparkling-navigation` 暴露了可插拔的 -`RouterWebHost` 供嵌入方提供 host,但 go-web 的预览目前没有暴露在其 `` 上注册 -该 host(或 `spkPipe` 桥)的钩子。而 web-shell 拥有整个页面,会自行安装该 host 与桥。 +你也可以在任意 `` 预览上**扫描二维码**,在(已集成 Sparkling 的)Lynx Explorer 中打开, +`router.open` 会原生运行。 + +:::note 为何 `` 预览跨不了页,而 web shell 可以 +堆内导航是卡片自身 JS heap 内的纯 Vue Router —— 没有原生调用 —— 因此在任何预览里都能跑。 +跨页导航调用 `router.open`,需要一个原生 host。`sparkling-navigation` 暴露了可插拔的 +`RouterWebHost`,但 go-web 的 `` 预览目前没有暴露在其 `` 上注册该 host +(或 `spkPipe` 桥)的钩子。而 web shell 独占它自己的整个标签页,会自行安装该 host 与桥—— +所以跨页导航在那里可用。 ::: ## 映射关系 diff --git a/packages/sparkling-web-shell/rsbuild.config.ts b/packages/sparkling-web-shell/rsbuild.config.ts index 47d93787..bee4dac1 100644 --- a/packages/sparkling-web-shell/rsbuild.config.ts +++ b/packages/sparkling-web-shell/rsbuild.config.ts @@ -24,10 +24,17 @@ export default defineConfig({ publicDir: [ { name: path.resolve(bundleDir), + // Serve the example bundles in dev only. The static build must NOT + // carry any example's bundles — when embedded it loads them at runtime + // from `?base=`, so one build serves every example. + copyOnBuild: false, }, ], }, output: { - assetPrefix: '/', + // Relative asset paths ('auto') let the built shell be dropped under any + // path (e.g. the docs site's /mpa-preview/) and embedded in an

Ij^%L(aiS#Lw~#$?`f#f9W^sT*xy3BXxftq~no+ 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 QG#czN6eN#*Hq1T$AHjYlLjV8( literal 0 HcmV?d00001 diff --git a/packages/playground/ios/LynxResources/card-view.lynx.bundle b/packages/playground/ios/LynxResources/card-view.lynx.bundle new file mode 100644 index 0000000000000000000000000000000000000000..4e021ce9843fc20375783a23780a202f437e6fbb GIT binary patch literal 93878 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%0ApRPQepQVmr8w!gL*#RjD)tp zPe8`>z_Kc5fozbKRcS=Zkf@(zFd~CEsdpTBCPAl4M+fKG-E?dK1mpO1nS`T@+^K&& zhcU<4gV+^N`4bDRWvM1TbH9$gdK|QDHDW6u$uLHhc%^fxRrH#JLX4{38Qjn8)v6=h zn5!SZEDuL>l^S-$^g|3gH8pI6G`5E!d2Yq#Kv845hnTVtLt2#fwi&zAfQ968@ZoKQG}gNcf8q{u2rR zsf52I;V(=0&k#l?|G9*}BH^z}_-hjW3kiQ+!hb2@Z%Fu?68@Hizb)bKNcgWL{9Oqj zNcaT_zbN7FN%*fN{E~#fFX10Z_-`cqLka&a!l}tWlJMV2${$PkClda9N&gQL{%;cg z?-Kq;3I7j-k;(s4!v9NB{%?tYS>h4Q<0RKl-9I5l}v;-@5jTEefE@Qj3CgD^7rn1mma@Nr51 zu!K)Y__dNAlW<5v?i5Z+>2@?_~CHyGDPfVVZxFhiqiKirfUcylc z$0WRfaBA|RgqI}cDT$9u{Ar0#Nchv}{wF4%k@U2L83~`2(3LQYaB6Z=!YN7l87Va_ zDVHV8NjkTZrzU44epSM25?+_|S&2U<@#iI+law10zbWA@3FjsKV+^yzl-IMwl-IMw zl-IMwl-IMwl-IMwl-IMwl-IMwl-IMwl-IMwl-IMwl-IL@DOtgktYAu3FeNLPk`+wJ z3Z`TQQ?kE-QjzR$N+_6;6->zrrep(r>E0~fMOvwtSWCc^Qf+<#%D9NIfIMJ$T!ot`2dMfSdWikKAHJ2ORGiev?svVu!l!KJL=QdV#&E4Y*uT-y7Z zDPmJ3E7-Ibn<73%_J*d2QIWm)6mcrD_mL@LRU|7|l@+YY3RdksIYqpR>?Nj%S&_Zu z6mct(72L`SZe<0x_AX8lyCQp+rifpWy{D##VUet0*xu7q#IeZU#1yeCviHms@hq~J zo+742vc$C4_nw_1u0^uMwb%FDDPmhBE7+D5Y|9F^Wd+;zvQxyj$ll}>F)or7jN6-; zBF;s!f^&OUr-*fty=zm%yGWLJ_j;Ci_j*?FE-QGK6}-z5?_S@#Geyjc?A-;~V;RA{ zEOGDkz11mVUu17>iuf1F68~P`D^C#vBU!<~tYBbPFmUhHDdJ!xD>%5fK1D2y>{X_S zhmow{;a+u$m>AisO%WF(d-W+|V18E}VK$=K7kS0Og~Nl<1=O11(>U=by2wYy#)(MLJA7np zoESBbVK`2-I+kHLPTU$s7XFSC#Xb}HOy7kJW8=iNiNB0s`YvnX<2W&Gf|;jZU>YCC ziFe2LqBmYd${d3XQ^tviZ)6xw5a*`T2=}2ow zJ5D5xeh9(SKY-xdKlR|r2}Y#e>0QJwe?4nr+T}Kav-rO+^2LFPdq~c(^f)nl?*ljZ zlVLDH6o2DX?i-{vV)kbq`OKpiGK`HA#ox#<94B5+5XC?J$uDL2FisqolsAyVhjHRF z`^w*OqV)u4VLFdkhL7V!a-GKJGJG5-%ImaOn8wF(5&)f6U>YCCNe*<{GSm1tPU4`` zicIq#_a4i!QF*oZp&Vc8_~SB89sh8S4eIz4IX0x@UwbOY7Ty{svC*?#LhRc=m0`jJ zNsKJsBSVo$jw>ojvIcK_GN)`Fz1U|@1vc<{q$c!@a^CC z$bgEf6?oa9YcDDdV#?hT*HG3Bjsl0Kb7X3T%w`=|_X zf+VqPBuvsBKc{CTNN{p%%pW9-SP&%<-AmozPlmw+X=_)-Owtvf&y{T+oiHkpE`=l^ zi0zG?%Dsxrr*i8E-x?>K{)#86g3OpG5{SNk3~G>J=>Y4FfY*U<0v?|F}1PD#w(!#>o|QjwW;Xk9(OM6UHe!OpyIQ@`b^{aYl}v%JAn@ zhOeR?GUZyVL>@Q!xaB|I=i|2j_;Eh&_>a4YoyxTlzV+!(rpbB6DWptL&XDF9L38{$ zmEo)CHzHH+n-EOM<0tsYKtKLDJ~Ggcuk-QG`;UKtkAKmB{7ZcNX8-Y9`1qF*j8jCK zpp+whU<7^O>OVgP#cpCNCQ!R&;e{OMD<{~RgxD8tjUZ-JJi9Yl|%Qxcv>IPra~ zdI)bu`4lE~=`rRyHdjWDy{X0j0#DJs>Baw2elIWn75U9AeyjXmS^Tf~o4$l_{8v$8 z;&)jwmx&SdnLnp8@`?fa{8w3m!R&;ej6Q!GlNp4Pf9O>1zh*LnQ1TC-%KbM?W)MpL zkyE+NI18~Dk=pI+^cq*=)u>1XgtCS#ht zd}FvjGTawQrx8D<`w;z3#`orLd>4M_7+|61{w97Wm}~C45q$cSbN@Yl-kAGa2vJ4! zd+>W~?_*y<8RR~EZ0~lEb8i71kowt9sCIVkPy}cxOPt2H zInor5L}o}&A@<54%waV0nU%W~jUsz5EPfwSBYQ6{{%!evY4LxM-`FFTcgbAC%vcp8Gwu_y(T` zempw(v#Zg_>Y+%Q9eE?2L-IJ~q6t1fBD0RMW|%boYfPv9AP~z4AeKL;GV+Q6AokO! zBg$ZQ!cPXo{t%NHgpvWVA^7%l17d#|8S7Do1}A3_4Wy#=?cltC$enZ+gj*k0qtKg7cvgT3aB|CweRZts9?VoWb7ajXlO0obBIVpAf}qA!b*Q8pJOtEP%@z9EhaMvB?DUiF_RgDk^wD0$z%qhWYD*tVlsnJGU(gqnam)R z{G+FGKh0zYq2zyfD)%!;sYe+C5;ct?flbdN(2pdQ<_)P=`eXhZ($+x`5RuvkeF8B! z@x7d`=+EMH^lb+3F!(tJKhNM782loGf5PCOGWaD1zs%sDG5F^Ueg(nsAgR&d1S!nk zZthp{qvP$|ulezB%>4^L{!O`G_v4?){YyXo=W@T{$6wF=rXT~ReX0w)+jZAYvDrhK<7E--!12MUtrV$N=UodiYPi z{N*nni#+@gQXZy7;$Z^R!#~P^ociH!WAIH3$d(_z%YcGx-*lue7wMag^esjXXP7V( z>3cEq@Ofs4GdRWI2;VG34jGZ{LV)XquI#7;fMM5cBF4U(sw;___)r?1XO<| zqF>*N^t~WeN#+}ozMJfTeuwBHUmt#)MNtR|Gm%r#NDlv9$A3lqw}$_8_Ln1lsO?td z@KI!ch;cN9c0OoIqb>{vY15J8k)t2T4fOriq5i)9ha!=$I`kcfB7Kp+!Qi_%rgwI} z`0!hAzgd6h&1Wi?(U2M_QDr-Pah`!$D_x7 z3e%hX$>^6*|7Sn-;P5-2z4rMpo{9c`@c7eTeE4&pts@;|^&21j(%|5aMSu5)pn!d3 z@NB!C( zKm3!Q`|P!eFQKR~JG7zSn1+69aBzY~xwk*}=1&~{$U~904@YI3e{kp_nD--*@8}yi zVD)62pz3eW{adv7&fFg%{JA*}@aN|^uETTxPC_o}8*_PyzbGLWR(dqYwLJWCH1eqj zC&fZBK?B9No)SC77o&JF_s7WlgL8j^@Qt~DkMJ$Y{>X#a;Nd{q0SKHJl*h|We<=lWb>qz3AZ~etD{-R#jY0fVe_hDV8EB|HDf{V5Xr^_OgMVEeLa9E{h6KpC) z%fqHC&^R((5iE{87_#~MLQ8ElkA%4p09 zQHm}Mo0AiR!-|!nbHnogFajHpS}{Y0tWDK7l7H<5RE5e$1-brq1MqQgWGc&fdy1^S*#D1&tbCC<^#wDubIf^_r zXCrB)7zsy+aQgFc51p)Vq#*?nSCC_)D6ytRts!j+V&%?-B}AZ@A779 z!JeaGqmdglJDnjR`NG9%Fd-N2@@v6D2n0(Gf@wdU@%)$C=G&BTQUf65YPK=YHb1%C zNA>x}$b93I_qvax;itX!KRNh_6n5dGSjzy=tOm?;mzJ3Bmc$F@`x)P_q}0=<>(ZzK0-$@$$NnXl*gxwi6({?uN`nkfE*JEFG|)QomSZ)my@fXy&111#|A z(8A}qP-6s&wIezQvZYb(h)#*?xp+_Ib_NjEXPRdjc$V78J{%MaMG*RDsTD?6lJRxr z4dYlQZ}{G=!t@>bxJ@5l*2nGIev=B_p)Gl*w!k;E1@2075`H(@xpz<6%X#&*m-qIU zqI|gDaL8!EQR>z+t;g!w$=O}re5;nZIPcZ6XJ))h@?N8sy=lt}nNx1wYBWaf-?8O< z;$NLH^xKY3rW1hn@><5Fj98;eo11A23q{MeCuXMMiWg_Ri?iOvIgc(bE_fIBdEj_G zH)CMiH&YS&Ek&E5!zN(ZCkR}Q6O3C5EnR+Y=4eP0Mjc(<8Cy5WNPA|^PJ3al7Hls? z{b6notz^PIyMyq~8Mgx`CU)mbhnCQ?nAwbd?u?f0@@E)Zvz9+I@ZOO3+Ut#}%p|OA zSuJM*z->{!mQ((cJ*B7^?y2mc5#r%YRr~v{|N7FfzCZ09zUSxjwZIUEb|Ias9Li?$ znY@>JJQ#SgCHEwZ*^;NU$%+Cuhw!P&Z*&iEjP0FQ^AZ7(5>(tUm3I&4s$aG zOmJ9~X?rw69dPdS5a{o@1vJTAQ_r-QD0Y)baV>LgJrl#;VHG`G8crMD+!?pp9&Oz1hr}6W{ zJL1hS$%s!4-8S4$7(q#5;LO4gU>!3vM@0Dd><4=X9rgyf0Fv`%zxV{$+p8c!u+qZb zK-ilR_GY2_TDjS#0bs5*Ke9JB!+`pG2DC3XgWR7%2?D;W!adQd#*EbhU#H!E+#aRp z*Y4jlG4b(RqKoIJZm0+IQ`grswP5lKB0@EY+D%bKQJ@!GQxDn>KJ{#_Rm%c`=zCoN zMEg4J*E;Qgt(IN;Ri?c>W+CYSzUlqK&mB*r(Kw_DB6;|PjHT>ztnxCZ+LiMaGl8&a z_O21Y@wOxsas_RXjBzJiVDN_ zDRWy_k<{gw(=B6`?bLb`472&QNGVz!?%}&NuaWf1@H=4r zsrEypqjkwy!VPdCY&M%l58ZiLEPjZ0!u(gnKnv0VK>NmtfEKG_M&)9l?d|Os#n26O zc5MYx;y`w z9i>BPhdM;B7F7dr#>&i7W`MHuK|jgYuiOl^mpQ%*KYAj|Q1^ zChG;C$UKq#Wbv{u@zTM7=C^&zHMDIEXdbo%@RdA29P+u&lJ~>8Ai*xjAK$5YD$o_P0hLF9`BI#Yt9$ zhY>M@?=m2*+7=zK1v)lpO%c0afmU@1&6Tm`dBIXbtm8vFW?R*g!kBuR3}i(ZEF;>Y zlR_9Qw;=SZ`rA~xgY|3|Tb=L&&B}h-6>Dx52Zt4Aruu3%uAkpLA3bk>v~+%dWd*Ga z4(qdBoi8K!dKPI`2i1H7iA*LvJQlKiH4uZ^r!=c8pCB(>2WKkF(_?#dzMGNxZUhHO zVn#N{yHj_kpBa45r95!>S}$0o=5}oP2uZ<7E_{{3C%f>w6<%%O=*__?E^u*hstdd- zIL!qv3Ql){7Y1jzz=mMR1)dtLae=d2&0C{0wl1edP`Zq1PxLfVXEfHI{+ z!(ncIM|9!T#QbfgL&ebTx;xo*L(S?}0Y}R(u(yoOHu!Mp1*|+!=}jf zzfYIu&dy;H^@fgX=6z->9ryfqdj4CyWEcHKV8$Pm77@lxyCgfF;<&G$^2vO6I$=W2 zYC^Gees0^&_(|kF%KI_Gop}Tv7~gu06>dQ-+n(F1Zp7!>^m7)VhXa zU+)EMQOR)>g~hzusaS(qZ6mrS=v&b@fc-u^U4u1Cz@|hcH;d_$YcSp>#93eBY-$r4 zOnMUW8PTE`MwT$%Fb1f&hO2pg|rE_b)^uL`08lYyODiptam*wr@e{@wUDdzR)sjR6QR& zk0I1@x0WL8r8)E2s9Zvu^#U$4^*FQkEXk$fqw z?bQByao&nXLkwITc+k90?rl_L8g`s{cjoZNyjmd|Y}In5TE13fkKOCawb!+ryGfF4 zwHvkEutfbvxoC}Oh+(a-6b>rlx1CyAuWz97b4PSx5 zVcFTjT0sVROo%@r24zS5X;@RvplA87L5a&%&Z8~3?n{u5RMwTE24X;L=(F_L5*VBL zEUA{Os&Wncq-wH8M`%Pg!M(1Peb`AQx=%;1)p*YC^hfinG`M$>X&k>%RZxPK3ZALF zx4S%s(KYwER8f+{Z}V01>Ag*!71r`Ix5e{*x2w*)s|pJC3=ly>1DbalMd{EpXkB)N zi7jGB^!ip++cHOFYNAn9ESVnl)85W4w~^J`2*W=E?I-W-!VVI)PK~K}ec+qchiR&W zr9he%*|K1dRc5l@U+Zs}p%iKCv_%uws@D2PH1|*Uw|`)3t~6KZF=0Df!4!70b%%%l zCe3`VqzFSC1Plr;nvB8vbisP7E48c_*1LT5)uHD`%S;n~PMz9R2Rt@@dj*%go6$8h0I$A7#IFqt^~#1z$0Z z9_v(e&Ru!FoOmCdq@X1KC`>{Oy8V64CF51kXVj#Fhq=uy0)}$!SCjQveR*y9HTC7u zQq!48sVyJDs{MGmKx?2``zcSf>*8TbYD@|{4lFuQTh^Kf6H)grS+ALGk1pul?3iR0 zZQx!$)?VA%m39e>7R1bPXBHsL>HuyRv$Qc{J$w!zwPFKyI=hz1B9sipLW$X6!^8&b zr|rC@dBAZVWU5nLIo5#VxdAg=PI4l3M>_4_nGXB|RqgMC4?n`pD1Dlh#%OB?E+b|- zPW0;8;38USNv=J9;_B9pT(f z(J)_)k=;SGA&|&h3vR6yCMIxnhVTt=EU?}++3x!q5z}C!{#x)I)yi!)1NGMdYV@9* z#xm%L=hLZEeTFLL&++3U5=(m~X$+`VsO2jc5-vpn430JY4%i{vhO7T9%UbSYRmEEL zCtf!-A#BTClJTs+3$SP9ca{#Fp}i)$)2uw3(zQIROr(|{99BF${Ah{>#5205%gxGd z%$HTBF=|gl8*JZ4>nCT6^&D3F4b%icXVj2}6&92#&jyTF0tpFJo3V3!zm~hIJw98@ zHAd<|ARA?4`=M6_&r$j95f;L|?O_&g~`=efi~ z%gO=mG#l8X0T!l7^vfHN{PI_|e{U9c*X>Cie7pUop6>2zzbfu0qWbPkyPCAGXtsS} z3@B5AYJqme5He+Bq!s{2;N!Zk1xoAm{ufwrqs^*%XhVoyb4W&AMmuAl09%%EB{VC~ z=hG6JE@g07DPc}@E4GKBbmSv;z0-~r5wkP*2M8TeRW{+bF z!3)U}uH_A-?f9Iv)j>hVi}HL-jn9 z5V<|7SzhramMSzr&IX&}4p-%Bne9=@>3)_6^0Z%5%a~1zIbVbkvDuIh*?D1H3-E&B zu%E#&s8~Cs6i5+xsnP|wrNjWYC7Z2ftznbKYFQdKp(k0OY|jG8h2;#RPoHA>bmm-f zlohJFnmr)_-&sNwl8`OBtut=fxwI-8pbMEhws8?=2Ween?fzAePRUaB*39vAPqxeq z2Xv#r%$egb$83lVb2``f%=UY2ZyK|fK-@4>t;`(#*aTY(v2nbeZ?=YI+YHyuZI$7u z%fzN-_j0FrXWD=!0#4`x&l_0m65uib!)F<*1oE%W8Zffbueh>-^*Znn9QQ z8DI4md@!zixBLZ_8g}LzJ=UmH8A|l%))7lo#7XV%p>%mrRU}MWsh*6Li!u^5CTvg4 zZM~q=P?Fp;L3eO#vy>|ikU!go4bRYt@u_Y>H~b@QI8>BMKbfrr+n-+8e2(j$ou(F0<#0Qnn>r5Ur zx_!~)moR5r2L+gXYoanY4sUU@l%P(U0KO1F1VGd;&3;1I?wLIQ}V#B*T>dH&g*V|}kqbyDu<3<+0m}KVAqs+UYd9cJ`LZ%WBGTm-1GfX%I$Sld z^d%%5B;iu3KP+rr*I5s+btqX6!8=|L1qX+<@xo>{S%?c#YL^td~D7w~GW(XkukUGO>Ju=VLo!g&`s0+{S?(8ADcgi)BEg2OI+4YZqM{{sUz zsP|}hKOgIRu)Z@{8d{!ARx8Fq4$u(>Hy5DePwf;0DuYQujX@_~@_cXz4gjAP7sbHm z`ImOi5aM+#m#hwLE6~Bq`$|z2W-X|?qjDo`UDPqEHk~!FL#J29LYNpv!=05vqv-sZ z9dM?7Z?yxbIco?5wuS)5Xe9m0F+*OZjYrK3;~7?QM}S?DF|6+n+X>P}2{`K$r z!D43OIhT*-RqYih5e&9*Th!NRAf=Jac7 zf)#zX^>I6HyeR>_GvN-eI@SSigH`Y-4+^X~u6%iw*22_*<`Icrae^#qEvYKcarK=f z@QMV5{*~-f^eo7eLY2*i0Ot^OZWMBLm4@Ns!%E};*S^E@$yOIsQovYE+4T{mbXs>= z$G6IyY`d-~@yTw}Y07oXEN~Xu>1r2jNAt z1z#_(wvZj=fd=zcvXx^q9*^!$* zFLU|LGM96H8ptsyv&mpo&pIDuiQVMp4LxzPg6E@@e$!h{3|%sfm4X ziwD@?^`L?Cil(s3f4Pj0^^Ef^!1YjaVCm2^nNw^MC>=TnH-^`fT%2}InRqfeGH7cw zDp&*RuvxvDme5B6M|Y}juB71-x*FfTw6C*+&%=9e#hLej{8lC>9zB?|fjk^#AAV$^ zoqptT7UKnR)s&a@{f~6SKrrS;EC&ZnJpF`|MJJ;7A28dpt$y_Ep2*w*v$VR=UWp@! zLuHd1+K0d)Jv46|axgqBLc_5a-O zxS;uNCAGS*?N7}%OItn+7(xy*KLC1|1q*iNguG>JXNAm`;TV^qi7qfgwh+)p-9ls8 zK!Rwz3}y4xS28viw#3;?4!c#{<7h@JCIfh<{wF{;ODA@L*HH54 z{Q_F-%JmOlij|q3VyT|`hPhpSv3cY{n?LHLR=tA;^PmB8uqCvT^|e^C^t7VVl9f+{Whvks(`jj> zBOSb;=TjUTinT(u5_5GU=-@uf|Dt&Le~pV9FYfg5OK|Tct|0U;@Vr0sdzh-7JkC#D zxqRf4D>u(iN`2R54-xRHZm!rVuj7rC*OD0hPS7N|CuMSk<6|z8Se?r2C^HdV*sO>X ze0M%tH?M0AY^r#}KaP!IerklCZaOs3oWEn_`^Gcc4+4SB@pJ;8oqxXR+H$yc5}kH` z%F*n7duELWJEd`9uHlBeN#kM>?w{0baP?&sM&l-Zy!rj*DYlO>NkKkOKZir;Q%+)462)J~ru|O-$ZTh-&Ds{j_1_zc^2aQ2IEQ(P+g9SeD z$ibuS^uucArSTxre$Mm%s3T>?p4i5Q_RcuoIn%i)HmoJs1)#NM77z&qecgfyeyDj` z)Rs$(^S8(o1#LVwH+{`qbl!}ENQII({LD;E&e(dKn+8L*Fffy_{h(_bDE+1lkSR&# z@~fT0aycM7YTGIu%IG%R17<>gn)8k1GD_(XZwJV65z{fuDzGsF1Nmx5wKMN6x%|8$ zh5_~&>=28|BqUNA_RC{vo1grkqy^8d_uTaCw42a-XfpAaew8bZDiru$pEG(JHfzjo z30lpgwEN0V*T@IYwVk-B{87eSeKQ~3EBejikTb8}|xa`-v?B9+@Wk#~+JDOBpLqn$7D$rbb zkn1345*ogkI?eJ~3SMGCmem`6gM!V$;Y(eMzhf=lA4`(U6A>@v4UJLms&1GSC(8$Hs$hQ~-m)n!#^RK^Hb$N8WMQ{OJJCcbk5t?8KBx|?#DYQI^vfdKgQ2CJ+U zAT72`HOoVS&gG<(G5P~gBvb`VLcP>#JQ(1hLV>F~)9$^C(d4l4?P2+Rt31xdr>_(0 z%wj3ycnfu_Z{W)94vsc%#|3X6OM8ri2uUM* z-S^b>Bm084(=khMD+cGaR3kW^_Kvil5^Rk#WLGD(e4fiKl0Etk@-Teks_;%iA#L7q zed#htZ2J?8`b{?K9}5u>>d!Dl5X0~><@ny1FtBSz!#UTCI54CHKShd`#g-5=1U5vD!v4QyiAxzjVbl>c{yb42gN9ZkzI_U22=@i%p^Kd_wK zoBhQS7Si{JJ`WlW-Hd!X^aZYY4BeXcGebMles&0_V>_tJ>!7ZngStK))D?A5*Uv#+ zYGCNDbSfOWJDpkrc4ST;yCveiS4bZYs~OgeQM<-CGSP-9tdEaQy@-k2c}STzQ~XIpdgd-w0-V4xmw zVo~}RoWeN-%b;6v+|(DDL3*i7l)zzhC)3rpL-h7)|k>>cxcT zD<2>^_yayz-O)efyEv*-J5UsJp#$M z{UI-`uiVzog_Lano6?q8+A3w7WEm^H_L0tXR++MXaQq|>S2jMYUvPs^*cLeYt(<~} zPQ`fLineZ3NZc<9PmCN%?cmRt;_>Lw?pIg0#$C-<{uia{Czqc}!sEhp2l`bG^n&$k z_}KD!;1963T&G1{%?lU!~Pkw3Ms7we!_m7SHR{@?X+@bNo~aINUoG+&k^q*`C&& z?FljK)Xs!EnB|gsW^h{X3>eO7k~-ejq0iY|>SZQt7t)#3R1?H`T6k&Tu*#bMY$rN3tnSLs0ET8kN`&UiT`zRaMduZ=gQeh=bdaKh zG#vzVkfDQY>cHi`_wXaMe`&_MG^>Mn9b3HFfq@2m9Q8eJ^ye=((eo`%D$1lX*_8JJ zcj@CsfFx~cu}7=#iQD+_37cJE%xL|A`H|Ui>5ehA`WWM1SkD-mEt2IA#R%ri+ke~_ z!OifsHp|LvaXn{K*=#EPw!8@d>RCoV*K?O0ZlY&z>^8a|TipHBgr0wzo9_`A=vFs< z+?!7yXE<~SRdevPLl2`&rZzb2`2>aLoy|$sfYDD9kLeSjdxryEDxJy~V0JdT*eeE* zObR4-IL@4wC}Ru5WDL86RT%iv+zl!)`T{am47S$D?7`-UB(P&am-4iFWH1rdaB@Pc znDh2J7^Y-`IFv^&FTDk)lFReX!a1JO92xBuZnR)zkoL}Wx`IX{92dUZ+)aDY+z*aw z?oFHV!;T`;#@pi=dnus4GEoj#6ivZ~0q(R$Sj?OS?EcVJTh7Mkk@|7BWhai8?o)iCOD?kxoe~GEdWF0nm2=1`!F&84zR#(Ad;pxq?d4;~ExfewN}_y5fL} zg?oXN#Z9QGamfo~Ay)NVn)Rs<`Mmtbgu3 zz1e}w&Ngpjm%g`?11|Kr90qit`Z4M@O$2`5|Nr5Bpwlb!>J0Z2$#8$KH+#`=f4`IS zgu{J*TqFgO@^)o{lF7Ra(=nVc&>JQKa&zQfEo)K6nzGHHPz*k-QXY4@8xi2DUv zAkAOZZQf7TQ|d$c*$kw4Kt-;$*&Yot%Q6LY*|4Z>)f*llMmI1sGp+UM@FYaP;PW zCp^wL!OT&grR5FGzFklmQJ{KXZan9W_jx0Z0xfs3E8WvmYxJ5`^{w#aNL66~~JncS5)54GO1CjrDukdVh;_G%A|Z$ks8k0XMSUfeo!t3*6Yg z4fWg8?u?C68rw)+y4RMEtNXAch09l@T`FDueu1Xn`%o(Ujcx5L1=!{#5GUbE@;0|mAym2y z@4|LTd0HFNrLk=0``XKJl{@^ipQGq8)2rIgt}jKg6dad&BUiVFqz!~p21?shTf;Vc zr&FBBi5?BNeK5K=49SN2ebA8de{;PP3w-M9eojca$wU>|EK%RVIP`K~dUmos z5M+=MgDkd-AUAe9`+aOO9TXTrro=~9AGs3JTF^IyKXy3ujdZYN=&p3I6f%(#(MAnO z7j90c%(l@Kw#@Q3x2;j?J|nmD(2_Vd0ho94oKTtX%hO0im#6qRa5OxeO2tL~%8EP< zxv%^jSBf&bFi%fSAQ$i5m7*S!%C7XTU{{8e@bH`;SN&^M-SQ1S!RC%_1PTM;=@2Ss zd4W3ZXWPds)3t z;*Jgkpi0`YY>O13&{te&t zfdmlsuzZ~|LNEAReGhm?ZNE4R!4eULrQ6y#vptjESR`B3BkdoRKj&&ecgh!%^*E$N zB+BhQNkP)(v@bQJx8=RJ<-E6L#8b&Lrpi$VxnYkS?Yvo>=kQL*%pZ44209cGmGMMn zJoZw`M$&8@(4ojSO7hZ~m+997VBb!c78UJmJ8D9ZOrrKBQKuwPrzKGbYz{xu!zIyO z^6Un`01ISautSPNCq%N2?vkA?!`8i)A;1FSH_Dbv&^jxj2;mV5JvMpEgxylOnMlc{ zt?|7%(W&LoDPhpwlA*`Gu+7D0?v31}qHBcAFyZFph{&IguyiRY2g7v=`t@2AF2nm4r_Y?oVe5(<&HKy((_%#7km9XlIx4vJtG7?Lb+q5e4rW+G*2c zN;Nrsjn;(oaYRLWE5@b8h1~Wl8g^0d+RM=TC~hX7K9ry6q_7FLe^N}*0jnbt9QwKA zVt>*_uT08Yzv#@($9UlT&5qfod;^d@V8r9#h~rm!J5B7UW!&qixljCQ+@w^!6dr$u ztg?5gwesH`*M=m#KU*}6@(G4Fw#igp7DAh@o0pggJl+xQ0(EaEl=mtIXsoBz7X@CAp^8X^v z7qne-0^&Kg#lL5^K&m-na;Aa7MP=4En9;#sssS`;j=9j2zT)F#;On5v*FhK5 z?M6{IQ?=^BSdaY0otM=#V<43Pl*A1N^0#kW`xM76k_Mz!#eCzS;~Q9UU?q-kq>XPRWyLX=85rPZ25fXJX_G+N z?+hDHD;Kc}EXF6}8W^Mk&wID|TXdL()WUSEb?)sx13FW=oz|;w)zS;eTG1x3AvaU` zijsv9au{)HiG&D4i;g2eT&$vEV299a-Av_`OrYy5z`&406Eg=Q+OoxFjz#@b_}aKI z3&$*$ca>YQypEG;<@4%99VbV?pGx2rdRZ^{TqZmbCP0J&N#q$xM8U~UWvFVAj9 z8#G0bW3Zx_T|P#efn!9fF1LeMt$|l*0<$Fp*j&jb59iYG;9OjhA80=;Cgmisgk5!1 z#M(gRCW@k${fN21UgHF@9{5+hSE2f>f?jk<=)O)Xj&Ut^poRzDNYba?qMV7`;^ zUIfXMZlb+ZY!jA;S_|vsGN~FZQl6CSZTG_>yW>`*v-52deegVZY5U8nY{H)zam95l zCJR>>+zfcjb(*f+LWpY#uLy%L9GmvMF!hRb(7X5~`RGVx&!mhV`;T zZ+!3dU3zoKPYvW}F90&!c5j?=HUdGTV?-I&Ms9S(%wbVLyU`GcJNhxF2xpHfxlf;py-u%QsACA6EK=h2(5EQIEL+Zh%I(CKPzn`2c4zY+t8!CCbeJUBVe8Z z^{nnO#@+(F<(Pv~+WpNl!)9H#B%_t?_?=+zB>-U8aNFrx{=u-=vfr4Pw_kwRKYAlG zM*JTAyuR65U#2w2r=wrtyIv@7B-w$c!bqDUuW&Vb5jxk6qe+{>>I*i&a;u7Q>|IW;kC*^MNuS^!GGXpFmc@L-;yzA2WEJ9JfNbi097^nIM z#NsyP>*3gOo*Gib*1_Ds3NbeU4d$l#iMjE$uT&A__|=Jak(U{qIjJ=c9)9Awk?X%t%RtNiRkS)!e1qPTlA)}tj42AJqwkNUXklI zuv_I+XLo*NcR?N(1)c%r`u3IO`)ImU3)gT$wz&#Ph);e*=qr=dC|#C?X??{F5}8e% zs3j5Nb?`*TCX=3Jw%xLfQn>duz+^57=MP`;yEcVTCA(h1vaue6i>xQnD^ zx=Q%i>}uKoppJ>UCmIz5n|qi<)@ z&>nuamR40`($WUDsWJCd&KthU${D)RVpQ`c+AV7D`A1d}m8AL0B$GH`=NQ7Ceq( z-%SHa(?tdiOzow}G{O+w%u?B~)pYP{xx)O;f?93Av{4cMM5ns%xG5KTqNZqCb()QM zVFr^WVXfWz*-Ize;)}?=^Wl_GB$T3A@$bQ2kL-%TS5uDN!IIHtuKw0U4JQ6!?I zzFqlvfGVju^4mmw>b8-lb{xV0KnL=H6cW)-(=c6jXKa4;J@_cJ1h1+-zo7E9wK1bnvA5qw^O|RY$dx`ljETG?ring{f+2}Q0R-=2ZJ)Gx0%4*-= zKjIGLO4Bn5&*@*&;W?%ihqeBy?I!0XZTL~^-&qfO(V+;p>=QpMZfh^?j0OR1 zr2S)9P|tBqbguC)Hy90-gHXp2IX85vJU05uP9@`nrRas>VqQosc;U(uwAEhG;bs&{ zCJiM*wQy*k^)p`T5qEkBVu4c_Ib^BFl)G}RKVbrw=b>*iRjK8dN$B&a7KhnEUBie|_zIf$>V^`i*Ixf%RcP4*= zu6&t*rxJ+RRfdxtAum6l5jtU9hr{lW69P$jbTtP-mG@sA6Mh4ZZ6NnE3c4nKqP^V= zG>^}Q%|JZsv*D9;G)YG~SMgIUl{ebsz@b}4Lyn#c7-s#`5%TP|wr*VgH7&=M#P&bi z$(z&A*dHScbMEL3Rv)^PH$u$ntMRN-8LkX^KkVQIRLAf_H`2k7ObQt#n~DiZU?NR( zXY~6F1|#AG9naN*mXiRGL!ODrYH}|^u%3i|C00x3WR@4RL5{S@89AFLwfMgFGL)V6 z_r}uR8yo)wSe~!-@{;jP0|`& zGf~58+t2njY&4^HSpl)OsL(JOr=7~$`|EJkuf=U+ZA7m+<^oG%ZQR8JZd^^*-DX== zv^%ePQ3D!lq=t7IO0N%P> z>$d3Z?ty{$b~h#)?9M1NIl-?SwfknbqEdQ|_3Q0E{+$WVaLDd^-#u0?IOGS%nLH+q zU~+w2T#qlohA;6#zQh>$64Qil|0{FtQHsG{qZt#?`ry@+U=rurPn0!BxCrta1{jk$ z+Dn`>{{<6ExI0c1|qo>SQUp2=6K0{;^o4PCKRO*^puz$!?&VB zhiJGs&SWtBcx9coj?U1*xw?O_LDAwyeKN;yxz4UpXOt)=)-*22wy8^ryIqOD5)`0F zf1f(ukl}ZTAabyP5II@DZ%=52FEjrKfJp@YMN1*gmL(q3f{}{8d_jxtzSqlOvMKI7X449{e+L)5oy0o%$oMd z1*CrO)^((F_myqJ4=`z!rY5o!g5yl$!7OLT0ZN4Js`GYqZBqaULmD)zs$$LZi}_@{ zE^Qo?(flmc8PVTKlaTeggB`~>OZfFF?{Hyd;xyq)xaxIc=Vp|>zO3Jm@#PqiFJP)H zq~!YG;|SyjLwCtB;%?b6?~x6&F2{)L(o1w;R4Q|sZAs&k-(Go;pGr8GnS*P8cS&)nCQU&5TZ zpZhzQF`EWsR?F_};cyt~+F%o4@v{=Zf?M(DxXZmncpi^;IIzee3Upp1<=r?f0X42= zF~jyZ*EMN(_|1Z=5XEp@0dTx5EYU-@7HHZ^A}HFn=hvmQRq8>jp2^m;*?KO^Q_pe( zMQGp|XxYdKxkpu_5<;Qfgf8i@=8RJtnkC4wBO{xxoScgAxqOeiM&^ zqyLw9S;uIjukVEPv<3d3B99>U=ui1B$;(pCosN9vHA{Oqnxyi}C}6)&u9L64XK&d? z7saM9-m;CJPip)+?(rlAAO1^dfI+FQ=o;gKQP>pPx0Bc*h2*aVdaN*S92qfdk)1q& zd-Nd)Vh*@Ig-=_qcpXkva%F**w*y~-T0>iyc0klR+PVg~f;Bl|O%rV7f5REJ?dQn~ z*VT(#KdmxFd&0wzxK;$}@2wTxTRB%SmgsU#LfbgHSVI#~@(_tj16MmP5B% zt>e~8oo79FTy}y1wS!u5{V|@?Wl=FhVg;lTWQPs8MYSwl0n*>O4*P1d*Cy=;y#V}G zhyTPwS0AuN;N%WZSuCseH0I8zA0w*x8?Vt`TC$&s+C;bhh2^pd%7l?(l=4EdDFajtMP<(~XJXZ9NV6mPdU)B&}3t0ZNvYHL#sIxAk;on{c+9GSfl@wpN^< zT5tYXR#SRnBVmepNoD_@T6A&5_Z(BizdHqI4AMk1X+oI{p{zofWFVG|t2Nt#L(M@f zO*N9Mwh*!jZ5%1tFJo8GNs+pB1A1IPo<|NBpEa)7&~|p{ep#Db+fr+Esgqf`l2?+9 zCoaUmeq4o^Avu!8|M=|VIGVBx&@i;a4`FbR1RvBLx_u@kvPRt5G1cD$W{9n3-uJ!7 zrf!HGx-_Jcbhg8vO{!mO)t}=`OYxxVfdY42KZ215R{B+nh^DwlXvz7SYoz^}cnD}k z4B^Gj^C4*?>t>r{nsrePYi1H6EPkwJbzn-mO|vtv@bKqltl#a{?Q;^=k!#~8=WX0c7~@~vu+_>8(PWD$!RN&J^N_bMfdAXS+)ZO&J45{ zW*ECpfZd^ZY$P_(L$3<+^a0O{iR$@x9fx@{1Cw=)Ww z`U!CMoVP)z%jJ6+%-!DPk$X2Py5YHGn6aU;u+hTWavd{X`Q>Ck9-ohWg0OHZzHwQ8 zk@A?sEdD>Kr#sP;J9y|$LEiM97}7Mzd7}LUpMC*2osr|HPEB%|Aq+!Zr@;Fd+LqO{ z$_~oz)7|e4!^Fz^_~b@?8mDOJ)!uWQr)XoLbcko%KdM2a*v3DDuGvcIi5}Xd8x(SQ8%P~m!;?N6l_qgPglJeF30TUMAj61_IFlUk@vpOPj)j(% zNzafTt9Tu+o0%SVuHF9DU1)O(m_8Ds@h9Gs_mgZ=m8c*_6U{e_MZxXS3(SYMxiAqu z%juN&S5yF?aTb-7J`u=_g`r+YK}#3fg0jXuvE`e5LLF?D^~@7PDANO>4N`Qw1O7Gx z-l(K25 zJ}=zIh0J`YkGqwK3t5h>fW4o~LxpscBlKr8c#hEb^EDTCjs9s5-jm%sUHOitsokL8 zotdsYKvcFji3nX2LiM{O2jAmEo?nwAqYn}!G^*m-8n!~ym19=sA#zz6Tcz(?Sfchkv5cGD_webk?q`gNiJYD$*zU{r4 z3z);?#6r0BRaAv{uu50ApG{x?NQpX%-y#H&bjk0E!QOKn4jak}K=|SAMA3zT1~>P}J@kbX~)wn+E?xi`7fW41P?A znTxwljx6w_-iOwNcev{bmSRSSBtA8=aM!>sgB#Us^ky`_@;ZQ_k-#6XZddF1t!I(7 z%a@S*&$O)X$KvmZ@1uy2r`8MZ2kbh+P|a>L=vSVA$lc*KYgHh23#}s+n7E4!4r}e* zb$+8Ux1=S> zL7i}>$F8`EHUJgt&8?X3se>hRS633xvB?NeBKRy}C){^zx8`M8FCLq0w{W;dQ^XSry#f6iM-e%+ z5n-IkP{_`rd@_`RhVp<{`r6Lu9XK6yt`YV0JS~^#(C45qK!@$iN_XyzF6G@3_pnP(qotnkvST}Nua_+6brNQ`+;!j_IhOTyQKE}5 z8E1I-mY;#-_r*w_mVw_peUbe#A?ZDDFUdL^Vx4UZ9qpG!Xyg8b8PJI5y&w=TV6Vi# z`i*P^W+sIG7{Ym<{Z>-`?70yY)k$+d+c?9f|$s&P&&LsOpJf{ z)SmyOalJ%WplP(i_foVKJvWy-U(^{$7dBtnZt|$*T?WC$rs*DCkO{*)HTDA~DFOV$a2q?NlwUxL zoU7(?*>anybFc0!4#IQajaPuute9T21CBtb{I7KG97Jc!|3;X$gMa56_qOZes60J` z|KQ`OdOp{DUmsZ1`RW*vlFrM|V-$-A@L+cUtll|KK7jvY1L$=2y+Z-#ExEh)dxm1lSSmn(114wT{n zwXjnef!)&0&9OH<(@8fDZ>>`m76Z#aHzWJ^4;I1dSHOaY6OhQ&>X%``e=lB`gTHQP zkN!HH{mxU7cKrjCY=YG>04n4$FKdbwAMd;(zTXf7^T_Si|6p8?i?T*pY1&F=l9-v`jsZ}GdBql8;7ul z$r$o}?lKb0)Gr4bNpf?tQsD0|Tqz?+M2#Q`tmt(~%@a)fhrQEI$G=^Xtl=(yS4zA0 z2`B$pGI_C>MJ{%>dEu;2ut}38S-dOVlF%dT@lSEn&Pa8`5_;Ob4d4un zzXpBHx!D|#u6dV{Af2J>PSz(VkdbV{)Duux(lID>@td3ShTz;K=v&;b2(I1C2#RXA zo^@!B1u(0e1jEo4Y$T-TNbl@=N1`c9^11c{avUUeWrcJi_r>fw*$QH90=%)dZ=Prc zka^5t=k(lM;;!sB?IbN%J;?0%tw!IE?P>}w`ptB`O zN_9ElKu@V;eUjyc1KK+9jA`hK85$EcLbHUlgwP~RvQxFYgiCv>vZ7YCw79A*Yce(# z)q2f(!7^9X){?=UaE)y-d)Gei)}HjdaH7*}!8Kd(g5^EUQmmk2oq_kcVtrn)qG#Yl zZQz4F1Lw7uzC~4wu4>T>R`ygSYE@S)u3CH|#AMhEiKbB@&n=29J{}{fqiiQV5oNop Va4c!#T+y)mmsRXLw&D@r`+xpENx}dC literal 0 HcmV?d00001 diff --git a/packages/playground/ios/LynxResources/main.lynx.bundle b/packages/playground/ios/LynxResources/main.lynx.bundle new file mode 100644 index 0000000000000000000000000000000000000000..dc9b38fa00242e3272f55bb598afc167342648b0 GIT binary patch literal 130931 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 VnW2FdXZkwe#&cC8eP2p={{yTNad-d# literal 0 HcmV?d00001 diff --git a/packages/playground/ios/LynxResources/media-test.lynx.bundle b/packages/playground/ios/LynxResources/media-test.lynx.bundle new file mode 100644 index 0000000000000000000000000000000000000000..8862cfc82a8d6ffcb3ff6e62df39656d00f51402 GIT binary patch literal 134384 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�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