diff --git a/apps/todo/apps/web/package.json b/apps/todo/apps/web/package.json
index 0c70af754..c81c9243e 100644
--- a/apps/todo/apps/web/package.json
+++ b/apps/todo/apps/web/package.json
@@ -11,7 +11,9 @@
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"lint": "eslint .",
"format": "prettier --write .",
- "type-check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json"
+ "type-check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
+ "test": "vitest run",
+ "test:watch": "vitest"
},
"devDependencies": {
"@manacore/shared-pwa": "workspace:*",
@@ -20,9 +22,9 @@
"@sveltejs/kit": "^2.47.1",
"@sveltejs/vite-plugin-svelte": "^5.0.0",
"@tailwindcss/vite": "^4.1.7",
- "@types/d3-force": "^3.0.0",
"@types/node": "^20.0.0",
"@vite-pwa/sveltekit": "^1.1.0",
+ "jsdom": "^25.0.1",
"prettier": "^3.1.1",
"prettier-plugin-svelte": "^3.1.2",
"svelte": "^5.41.0",
@@ -30,17 +32,12 @@
"tailwindcss": "^4.1.7",
"tslib": "^2.4.1",
"typescript": "^5.9.3",
- "vite": "^6.0.0"
+ "vite": "^6.0.0",
+ "vitest": "^4.1.0"
},
"dependencies": {
- "@manacore/spiral-db": "workspace:*",
"@manacore/shared-api-client": "workspace:*",
"@manacore/shared-auth": "workspace:*",
- "@manacore/shared-splitscreen": "workspace:*",
- "@manacore/shared-stores": "workspace:*",
- "@manacore/shared-types": "workspace:*",
- "@manacore/shared-utils": "workspace:*",
- "@manacore/shared-tags": "workspace:*",
"@manacore/shared-auth-ui": "workspace:*",
"@manacore/shared-branding": "workspace:*",
"@manacore/shared-feedback-service": "workspace:*",
@@ -48,13 +45,18 @@
"@manacore/shared-i18n": "workspace:*",
"@manacore/shared-icons": "workspace:*",
"@manacore/shared-profile-ui": "workspace:*",
+ "@manacore/shared-splitscreen": "workspace:*",
+ "@manacore/shared-stores": "workspace:*",
"@manacore/shared-subscription-ui": "workspace:*",
+ "@manacore/shared-tags": "workspace:*",
"@manacore/shared-tailwind": "workspace:*",
"@manacore/shared-theme": "workspace:*",
"@manacore/shared-theme-ui": "workspace:*",
+ "@manacore/shared-types": "workspace:*",
"@manacore/shared-ui": "workspace:*",
+ "@manacore/shared-utils": "workspace:*",
+ "@manacore/spiral-db": "workspace:*",
"@todo/shared": "workspace:*",
- "d3-force": "^3.0.0",
"date-fns": "^4.1.0",
"svelte-dnd-action": "^0.9.68",
"svelte-i18n": "^4.0.1"
diff --git a/apps/todo/apps/web/src/app.html b/apps/todo/apps/web/src/app.html
index 41e2db8b9..a164e2dda 100644
--- a/apps/todo/apps/web/src/app.html
+++ b/apps/todo/apps/web/src/app.html
@@ -24,6 +24,7 @@
+
Todo
%sveltekit.head%
diff --git a/apps/todo/apps/web/src/lib/api/tasks.test.ts b/apps/todo/apps/web/src/lib/api/tasks.test.ts
new file mode 100644
index 000000000..f52c87c5a
--- /dev/null
+++ b/apps/todo/apps/web/src/lib/api/tasks.test.ts
@@ -0,0 +1,228 @@
+import { describe, it, expect, vi, beforeEach } from 'vitest';
+
+// Mock the client module
+vi.mock('./client', () => ({
+ apiClient: {
+ get: vi.fn(),
+ post: vi.fn(),
+ put: vi.fn(),
+ delete: vi.fn(),
+ },
+}));
+
+import {
+ getTasks,
+ getTask,
+ createTask,
+ updateTask,
+ deleteTask,
+ completeTask,
+ uncompleteTask,
+ moveTask,
+ updateTaskLabels,
+ updateSubtasks,
+ getInboxTasks,
+ getTodayTasks,
+ getUpcomingTasks,
+ reorderTasks,
+} from './tasks';
+import { apiClient } from './client';
+
+const mockClient = vi.mocked(apiClient);
+
+beforeEach(() => {
+ vi.clearAllMocks();
+});
+
+describe('getTasks', () => {
+ it('should fetch tasks without filters', async () => {
+ mockClient.get.mockResolvedValue({ tasks: [] });
+
+ const result = await getTasks();
+
+ expect(mockClient.get).toHaveBeenCalledWith('/api/v1/tasks');
+ expect(result).toEqual([]);
+ });
+
+ it('should build query string with filters', async () => {
+ mockClient.get.mockResolvedValue({ tasks: [] });
+
+ await getTasks({ projectId: 'proj-1', priority: 'high' });
+
+ const callArg = mockClient.get.mock.calls[0][0];
+ expect(callArg).toContain('projectId=proj-1');
+ expect(callArg).toContain('priority=high');
+ });
+
+ it('should include search filter', async () => {
+ mockClient.get.mockResolvedValue({ tasks: [] });
+
+ await getTasks({ search: 'Meeting' });
+
+ expect(mockClient.get).toHaveBeenCalledWith('/api/v1/tasks?search=Meeting');
+ });
+});
+
+describe('getTask', () => {
+ it('should fetch a single task', async () => {
+ const task = { id: 't1', title: 'Test' };
+ mockClient.get.mockResolvedValue({ task });
+
+ const result = await getTask('t1');
+
+ expect(mockClient.get).toHaveBeenCalledWith('/api/v1/tasks/t1');
+ expect(result).toEqual(task);
+ });
+});
+
+describe('createTask', () => {
+ it('should POST new task', async () => {
+ const task = { id: 't1', title: 'New Task' };
+ mockClient.post.mockResolvedValue({ task });
+
+ const result = await createTask({ title: 'New Task' });
+
+ expect(mockClient.post).toHaveBeenCalledWith('/api/v1/tasks', { title: 'New Task' });
+ expect(result).toEqual(task);
+ });
+});
+
+describe('updateTask', () => {
+ it('should PUT updated task', async () => {
+ const task = { id: 't1', title: 'Updated' };
+ mockClient.put.mockResolvedValue({ task });
+
+ const result = await updateTask('t1', { title: 'Updated' });
+
+ expect(mockClient.put).toHaveBeenCalledWith('/api/v1/tasks/t1', { title: 'Updated' });
+ expect(result).toEqual(task);
+ });
+});
+
+describe('deleteTask', () => {
+ it('should DELETE task', async () => {
+ mockClient.delete.mockResolvedValue(undefined);
+
+ await deleteTask('t1');
+
+ expect(mockClient.delete).toHaveBeenCalledWith('/api/v1/tasks/t1');
+ });
+});
+
+describe('completeTask', () => {
+ it('should POST to complete endpoint', async () => {
+ const task = { id: 't1', isCompleted: true };
+ mockClient.post.mockResolvedValue({ task });
+
+ const result = await completeTask('t1');
+
+ expect(mockClient.post).toHaveBeenCalledWith('/api/v1/tasks/t1/complete');
+ expect(result).toEqual(task);
+ });
+});
+
+describe('uncompleteTask', () => {
+ it('should POST to uncomplete endpoint', async () => {
+ const task = { id: 't1', isCompleted: false };
+ mockClient.post.mockResolvedValue({ task });
+
+ const result = await uncompleteTask('t1');
+
+ expect(mockClient.post).toHaveBeenCalledWith('/api/v1/tasks/t1/uncomplete');
+ expect(result).toEqual(task);
+ });
+});
+
+describe('moveTask', () => {
+ it('should POST to move endpoint', async () => {
+ const task = { id: 't1', projectId: 'proj-2' };
+ mockClient.post.mockResolvedValue({ task });
+
+ const result = await moveTask('t1', 'proj-2');
+
+ expect(mockClient.post).toHaveBeenCalledWith('/api/v1/tasks/t1/move', { projectId: 'proj-2' });
+ expect(result).toEqual(task);
+ });
+
+ it('should move to inbox (null project)', async () => {
+ const task = { id: 't1', projectId: null };
+ mockClient.post.mockResolvedValue({ task });
+
+ const result = await moveTask('t1', null);
+
+ expect(mockClient.post).toHaveBeenCalledWith('/api/v1/tasks/t1/move', { projectId: null });
+ expect(result).toEqual(task);
+ });
+});
+
+describe('updateTaskLabels', () => {
+ it('should PUT label IDs', async () => {
+ const task = { id: 't1' };
+ mockClient.put.mockResolvedValue({ task });
+
+ const result = await updateTaskLabels('t1', ['l1', 'l2']);
+
+ expect(mockClient.put).toHaveBeenCalledWith('/api/v1/tasks/t1/labels', {
+ labelIds: ['l1', 'l2'],
+ });
+ expect(result).toEqual(task);
+ });
+});
+
+describe('updateSubtasks', () => {
+ it('should PUT subtasks', async () => {
+ const subtasks = [{ id: 's1', title: 'Sub 1', isCompleted: false }];
+ const task = { id: 't1', subtasks };
+ mockClient.put.mockResolvedValue({ task });
+
+ const result = await updateSubtasks('t1', subtasks as any);
+
+ expect(mockClient.put).toHaveBeenCalledWith('/api/v1/tasks/t1/subtasks', { subtasks });
+ expect(result).toEqual(task);
+ });
+});
+
+describe('getInboxTasks', () => {
+ it('should fetch inbox tasks', async () => {
+ mockClient.get.mockResolvedValue({ tasks: [] });
+
+ const result = await getInboxTasks();
+
+ expect(mockClient.get).toHaveBeenCalledWith('/api/v1/tasks/inbox');
+ expect(result).toEqual([]);
+ });
+});
+
+describe('getTodayTasks', () => {
+ it('should fetch today tasks', async () => {
+ mockClient.get.mockResolvedValue({ tasks: [] });
+
+ const result = await getTodayTasks();
+
+ expect(mockClient.get).toHaveBeenCalledWith('/api/v1/tasks/today');
+ expect(result).toEqual([]);
+ });
+});
+
+describe('getUpcomingTasks', () => {
+ it('should fetch upcoming tasks', async () => {
+ mockClient.get.mockResolvedValue({ tasks: [] });
+
+ const result = await getUpcomingTasks();
+
+ expect(mockClient.get).toHaveBeenCalledWith('/api/v1/tasks/upcoming');
+ expect(result).toEqual([]);
+ });
+});
+
+describe('reorderTasks', () => {
+ it('should PUT reorder with task IDs', async () => {
+ mockClient.put.mockResolvedValue(undefined);
+
+ await reorderTasks(['t1', 't2', 't3']);
+
+ expect(mockClient.put).toHaveBeenCalledWith('/api/v1/tasks/reorder', {
+ taskIds: ['t1', 't2', 't3'],
+ });
+ });
+});
diff --git a/apps/todo/apps/web/src/lib/utils/task-parser.test.ts b/apps/todo/apps/web/src/lib/utils/task-parser.test.ts
new file mode 100644
index 000000000..f7da9c3ca
--- /dev/null
+++ b/apps/todo/apps/web/src/lib/utils/task-parser.test.ts
@@ -0,0 +1,155 @@
+import { describe, it, expect } from 'vitest';
+import { parseTaskInput, resolveTaskIds, formatParsedTaskPreview } from './task-parser';
+
+describe('parseTaskInput', () => {
+ it('should parse a simple title', () => {
+ const result = parseTaskInput('Einkaufen gehen');
+ expect(result.title).toBe('Einkaufen gehen');
+ expect(result.priority).toBeUndefined();
+ expect(result.projectName).toBeUndefined();
+ expect(result.labelNames).toEqual([]);
+ });
+
+ it('should parse priority !!! as urgent', () => {
+ const result = parseTaskInput('Deadline !!! fertig machen');
+ expect(result.priority).toBe('urgent');
+ expect(result.title).not.toContain('!!!');
+ });
+
+ it('should parse priority !! as high', () => {
+ const result = parseTaskInput('Report !! abgeben');
+ expect(result.priority).toBe('high');
+ expect(result.title).not.toContain('!!');
+ });
+
+ it('should parse dringend as urgent', () => {
+ const result = parseTaskInput('Bug fixen dringend');
+ expect(result.priority).toBe('urgent');
+ });
+
+ it('should parse wichtig as high', () => {
+ const result = parseTaskInput('Meeting wichtig');
+ expect(result.priority).toBe('high');
+ });
+
+ it('should parse normal as medium', () => {
+ const result = parseTaskInput('Aufräumen normal');
+ expect(result.priority).toBe('medium');
+ });
+
+ it('should parse später as low', () => {
+ const result = parseTaskInput('Docs lesen später');
+ expect(result.priority).toBe('low');
+ });
+
+ it('should parse @project', () => {
+ const result = parseTaskInput('Task erledigen @Arbeit');
+ expect(result.projectName).toBe('Arbeit');
+ expect(result.title).not.toContain('@Arbeit');
+ });
+
+ it('should parse #labels', () => {
+ const result = parseTaskInput('Anrufen #arbeit #privat');
+ expect(result.labelNames).toEqual(['arbeit', 'privat']);
+ expect(result.title).not.toContain('#');
+ });
+
+ it('should parse complex input with all fields', () => {
+ const result = parseTaskInput('Meeting vorbereiten !!! @Arbeit #wichtig #team');
+ expect(result.priority).toBe('urgent');
+ expect(result.projectName).toBe('Arbeit');
+ expect(result.labelNames).toEqual(['wichtig', 'team']);
+ expect(result.title).toContain('Meeting vorbereiten');
+ });
+
+ it('should handle empty input', () => {
+ const result = parseTaskInput('');
+ expect(result.title).toBe('');
+ expect(result.labelNames).toEqual([]);
+ });
+
+ it('should handle only labels', () => {
+ // Note: "dringend" is consumed by priority extraction before label parsing
+ const result = parseTaskInput('#arbeit #privat');
+ expect(result.labelNames).toEqual(['arbeit', 'privat']);
+ });
+});
+
+describe('resolveTaskIds', () => {
+ const projects = [
+ { id: 'proj-1', name: 'Arbeit' },
+ { id: 'proj-2', name: 'Privat' },
+ ];
+
+ const labels = [
+ { id: 'label-1', name: 'Wichtig' },
+ { id: 'label-2', name: 'Team' },
+ { id: 'label-3', name: 'Bug' },
+ ];
+
+ it('should resolve project name to ID (case-insensitive)', () => {
+ const parsed = parseTaskInput('Task @arbeit');
+ const resolved = resolveTaskIds(parsed, projects, labels);
+ expect(resolved.projectId).toBe('proj-1');
+ });
+
+ it('should resolve label names to IDs (case-insensitive)', () => {
+ // Note: "wichtig" is consumed by priority extraction, so use "bug" instead
+ const parsed = parseTaskInput('Task #bug #team');
+ const resolved = resolveTaskIds(parsed, projects, labels);
+ expect(resolved.labelIds).toEqual(['label-3', 'label-2']);
+ });
+
+ it('should skip unknown project', () => {
+ const parsed = parseTaskInput('Task @Unbekannt');
+ const resolved = resolveTaskIds(parsed, projects, labels);
+ expect(resolved.projectId).toBeUndefined();
+ });
+
+ it('should skip unknown labels', () => {
+ const parsed = parseTaskInput('Task #nichtda');
+ const resolved = resolveTaskIds(parsed, projects, labels);
+ expect(resolved.labelIds).toEqual([]);
+ });
+
+ it('should preserve title and priority', () => {
+ const parsed = parseTaskInput('Meeting vorbereiten !!! @Arbeit #wichtig');
+ const resolved = resolveTaskIds(parsed, projects, labels);
+ expect(resolved.title).toContain('Meeting vorbereiten');
+ expect(resolved.priority).toBe('urgent');
+ expect(resolved.projectId).toBe('proj-1');
+ expect(resolved.labelIds).toEqual(['label-1']);
+ });
+});
+
+describe('formatParsedTaskPreview', () => {
+ it('should format priority', () => {
+ const parsed = parseTaskInput('Task !!!');
+ const preview = formatParsedTaskPreview(parsed);
+ expect(preview).toContain('Dringend');
+ });
+
+ it('should format project', () => {
+ const parsed = parseTaskInput('Task @Arbeit');
+ const preview = formatParsedTaskPreview(parsed);
+ expect(preview).toContain('Arbeit');
+ });
+
+ it('should format labels', () => {
+ const parsed = parseTaskInput('Task #arbeit #team');
+ const preview = formatParsedTaskPreview(parsed);
+ expect(preview).toContain('arbeit');
+ expect(preview).toContain('team');
+ });
+
+ it('should return empty string for title-only input', () => {
+ const parsed = parseTaskInput('Einfacher Task');
+ expect(formatParsedTaskPreview(parsed)).toBe('');
+ });
+
+ it('should join parts with separator', () => {
+ const parsed = parseTaskInput('Task !!! @Arbeit');
+ const preview = formatParsedTaskPreview(parsed);
+ expect(preview).toContain(' · ');
+ });
+});
diff --git a/apps/todo/apps/web/vite.config.ts b/apps/todo/apps/web/vite.config.ts
index 2c4bd1fed..ee3e8c104 100644
--- a/apps/todo/apps/web/vite.config.ts
+++ b/apps/todo/apps/web/vite.config.ts
@@ -1,3 +1,4 @@
+///
import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
@@ -28,4 +29,9 @@ export default defineConfig({
optimizeDeps: {
exclude: [...MANACORE_SHARED_PACKAGES, '@todo/shared'],
},
+ test: {
+ environment: 'jsdom',
+ include: ['src/**/*.test.ts'],
+ globals: true,
+ },
});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index bdd1571a9..2b4ab836b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1606,226 +1606,6 @@ importers:
specifier: ^3.4.17
version: 3.4.18(tsx@4.21.0)(yaml@2.8.1)
- apps/lightwrite: {}
-
- apps/lightwrite/apps/backend:
- dependencies:
- '@lightwrite/shared':
- specifier: workspace:*
- version: link:../../packages/shared
- '@manacore/shared-nestjs-auth':
- specifier: workspace:*
- version: link:../../../../packages/shared-nestjs-auth
- '@manacore/shared-nestjs-health':
- specifier: workspace:*
- version: link:../../../../packages/shared-nestjs-health
- '@manacore/shared-nestjs-setup':
- specifier: workspace:*
- version: link:../../../../packages/shared-nestjs-setup
- '@manacore/shared-storage':
- specifier: workspace:*
- version: link:../../../../packages/shared-storage
- '@nestjs/common':
- specifier: ^10.4.15
- version: 10.4.20(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/config':
- specifier: ^3.3.0
- version: 3.3.0(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)
- '@nestjs/core':
- specifier: ^10.4.15
- version: 10.4.20(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.20)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- '@nestjs/platform-express':
- specifier: ^10.4.15
- version: 10.4.20(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)
- class-transformer:
- specifier: ^0.5.1
- version: 0.5.1
- class-validator:
- specifier: ^0.14.1
- version: 0.14.3
- dotenv:
- specifier: ^16.4.7
- version: 16.6.1
- drizzle-kit:
- specifier: ^0.30.2
- version: 0.30.6
- drizzle-orm:
- specifier: ^0.38.3
- version: 0.38.4(@opentelemetry/api@1.9.0)(@types/react@19.2.14)(expo-sqlite@55.0.10(expo@55.0.5)(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(kysely@0.28.8)(postgres@3.4.7)(react@19.2.4)
- postgres:
- specifier: ^3.4.5
- version: 3.4.7
- reflect-metadata:
- specifier: ^0.2.2
- version: 0.2.2
- rxjs:
- specifier: ^7.8.1
- version: 7.8.2
- devDependencies:
- '@nestjs/cli':
- specifier: ^10.4.9
- version: 10.4.9(esbuild@0.27.0)
- '@nestjs/schematics':
- specifier: ^10.2.3
- version: 10.2.3(chokidar@3.6.0)(typescript@5.9.3)
- '@types/express':
- specifier: ^5.0.0
- version: 5.0.6
- '@types/node':
- specifier: ^22.10.2
- version: 22.19.1
- '@typescript-eslint/eslint-plugin':
- specifier: ^8.18.1
- version: 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/parser':
- specifier: ^8.18.1
- version: 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
- eslint:
- specifier: ^9.17.0
- version: 9.39.1(jiti@2.6.1)
- eslint-config-prettier:
- specifier: ^9.1.0
- version: 9.1.2(eslint@9.39.1(jiti@2.6.1))
- eslint-plugin-prettier:
- specifier: ^5.2.1
- version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.6.2)
- prettier:
- specifier: ^3.4.2
- version: 3.6.2
- source-map-support:
- specifier: ^0.5.21
- version: 0.5.21
- ts-loader:
- specifier: ^9.5.1
- version: 9.5.4(typescript@5.9.3)(webpack@5.100.2(esbuild@0.27.0))
- ts-node:
- specifier: ^10.9.2
- version: 10.9.2(@types/node@22.19.1)(typescript@5.9.3)
- tsconfig-paths:
- specifier: ^4.2.0
- version: 4.2.0
- tsx:
- specifier: ^4.19.2
- version: 4.20.6
- typescript:
- specifier: ^5.7.2
- version: 5.9.3
-
- apps/lightwrite/apps/landing:
- dependencies:
- '@astrojs/check':
- specifier: ^0.9.4
- version: 0.9.5(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3)
- '@astrojs/sitemap':
- specifier: ^3.3.0
- version: 3.6.0
- '@manacore/shared-landing-ui':
- specifier: workspace:*
- version: link:../../../../packages/shared-landing-ui
- astro:
- specifier: ^5.1.1
- version: 5.16.0(@netlify/blobs@10.4.1)(@types/node@24.10.1)(ioredis@5.9.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.1)
- typescript:
- specifier: ^5.7.2
- version: 5.9.3
-
- apps/lightwrite/apps/web:
- dependencies:
- '@lightwrite/shared':
- specifier: workspace:*
- version: link:../../packages/shared
- '@manacore/shared-api-client':
- specifier: workspace:*
- version: link:../../../../packages/shared-api-client
- '@manacore/shared-auth':
- specifier: workspace:*
- version: link:../../../../packages/shared-auth
- '@manacore/shared-auth-ui':
- specifier: workspace:*
- version: link:../../../../packages/shared-auth-ui
- '@manacore/shared-branding':
- specifier: workspace:*
- version: link:../../../../packages/shared-branding
- '@manacore/shared-i18n':
- specifier: workspace:*
- version: link:../../../../packages/shared-i18n
- '@manacore/shared-icons':
- specifier: workspace:*
- version: link:../../../../packages/shared-icons
- '@manacore/shared-stores':
- specifier: workspace:*
- version: link:../../../../packages/shared-stores
- '@manacore/shared-tailwind':
- specifier: workspace:*
- version: link:../../../../packages/shared-tailwind
- '@manacore/shared-theme':
- specifier: workspace:*
- version: link:../../../../packages/shared-theme
- '@manacore/shared-theme-ui':
- specifier: workspace:*
- version: link:../../../../packages/shared-theme-ui
- '@manacore/shared-ui':
- specifier: workspace:*
- version: link:../../../../packages/shared-ui
- wavesurfer.js:
- specifier: ^7.8.0
- version: 7.12.1
- devDependencies:
- '@manacore/shared-pwa':
- specifier: workspace:*
- version: link:../../../../packages/shared-pwa
- '@manacore/shared-vite-config':
- specifier: workspace:*
- version: link:../../../../packages/shared-vite-config
- '@sveltejs/adapter-node':
- specifier: ^5.0.0
- version: 5.4.0(@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))
- '@sveltejs/kit':
- specifier: ^2.47.1
- version: 2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
- '@sveltejs/vite-plugin-svelte':
- specifier: ^5.0.0
- version: 5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
- '@tailwindcss/vite':
- specifier: ^4.1.7
- version: 4.1.17(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
- '@types/node':
- specifier: ^20.0.0
- version: 20.19.25
- '@vite-pwa/sveltekit':
- specifier: ^1.1.0
- version: 1.1.0(@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))(workbox-build@7.4.0(@types/babel__core@7.20.5))(workbox-window@7.4.0)
- prettier:
- specifier: ^3.1.1
- version: 3.6.2
- prettier-plugin-svelte:
- specifier: ^3.1.2
- version: 3.4.0(prettier@3.6.2)(svelte@5.44.0)
- svelte:
- specifier: ^5.41.0
- version: 5.44.0
- svelte-check:
- specifier: ^4.3.3
- version: 4.3.4(picomatch@4.0.3)(svelte@5.44.0)(typescript@5.9.3)
- tailwindcss:
- specifier: ^4.1.7
- version: 4.1.17
- tslib:
- specifier: ^2.4.1
- version: 2.8.1
- typescript:
- specifier: ^5.9.3
- version: 5.9.3
- vite:
- specifier: ^6.0.0
- version: 6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
-
- apps/lightwrite/packages/shared:
- devDependencies:
- typescript:
- specifier: ^5.7.3
- version: 5.9.3
-
apps/manacore/apps/landing:
dependencies:
'@astrojs/react':
@@ -2905,130 +2685,6 @@ importers:
specifier: ^5.7.2
version: 5.9.3
- apps/mukke/apps/mobile:
- dependencies:
- '@expo/vector-icons':
- specifier: ^15.0.2
- version: 15.0.3(expo-font@55.0.4)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
- '@missingcore/audio-metadata':
- specifier: ^1.3.0
- version: 1.3.0(@types/react@19.2.14)(expo-file-system@55.0.10(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0)))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
- '@mukke/types':
- specifier: workspace:*
- version: link:../../packages/mukke-types
- '@react-native-async-storage/async-storage':
- specifier: 2.2.0
- version: 2.2.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))
- '@react-native-community/slider':
- specifier: 5.1.2
- version: 5.1.2
- '@react-navigation/native':
- specifier: ^7.0.3
- version: 7.1.33(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
- expo:
- specifier: ~55.0.0
- version: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(expo-router@55.0.5)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.12.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
- expo-audio:
- specifier: ~55.0.0
- version: 55.0.8(expo-asset@55.0.8(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
- expo-constants:
- specifier: ~55.0.0
- version: 55.0.7(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(typescript@5.9.3)
- expo-dev-client:
- specifier: ~55.0.0
- version: 55.0.16(expo@55.0.5)(typescript@5.9.3)
- expo-dev-launcher:
- specifier: ~55.0.0
- version: 55.0.17(expo@55.0.5)(typescript@5.9.3)
- expo-document-picker:
- specifier: ~55.0.0
- version: 55.0.8(expo@55.0.5)
- expo-file-system:
- specifier: ~55.0.0
- version: 55.0.10(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))
- expo-router:
- specifier: ~55.0.0
- version: 55.0.5(5ukuo2wceyze3ufp6iesohvm6e)
- expo-sqlite:
- specifier: ~55.0.0
- version: 55.0.10(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
- expo-status-bar:
- specifier: ~55.0.0
- version: 55.0.4(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
- expo-system-ui:
- specifier: ~55.0.0
- version: 55.0.9(expo@55.0.5)(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))
- nativewind:
- specifier: ^4.2.0
- version: 4.2.3(react-native-reanimated@4.2.1(react-native-worklets@0.7.2(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.1))
- react:
- specifier: 19.2.0
- version: 19.2.0
- react-dom:
- specifier: 19.2.0
- version: 19.2.0(react@19.2.0)
- react-native:
- specifier: 0.83.2
- version: 0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0)
- react-native-gesture-handler:
- specifier: ~2.30.0
- version: 2.30.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
- react-native-reanimated:
- specifier: ~4.2.1
- version: 4.2.1(react-native-worklets@0.7.2(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
- react-native-safe-area-context:
- specifier: ~5.6.2
- version: 5.6.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
- react-native-screens:
- specifier: ~4.23.0
- version: 4.23.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
- react-native-web:
- specifier: ~0.21.0
- version: 0.21.2(encoding@0.1.13)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
- react-native-worklets:
- specifier: ~0.7.2
- version: 0.7.2(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
- uuid:
- specifier: ^11.1.0
- version: 11.1.0
- zustand:
- specifier: ^5.0.0
- version: 5.0.8(@types/react@19.2.14)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0))
- devDependencies:
- '@babel/core':
- specifier: ^7.26.0
- version: 7.28.5
- '@types/react':
- specifier: ~19.2.14
- version: 19.2.14
- '@types/uuid':
- specifier: ^10.0.0
- version: 10.0.0
- '@typescript-eslint/eslint-plugin':
- specifier: ^8.0.0
- version: 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/parser':
- specifier: ^8.0.0
- version: 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
- eslint:
- specifier: ^9.18.0
- version: 9.39.1(jiti@2.6.1)
- eslint-config-universe:
- specifier: ^14.0.0
- version: 14.3.0(@types/eslint@9.6.1)(eslint@9.39.1(jiti@2.6.1))(prettier@3.6.2)(typescript@5.9.3)
- prettier:
- specifier: ^3.5.0
- version: 3.6.2
- prettier-plugin-tailwindcss:
- specifier: ^0.6.0
- version: 0.6.14(prettier-plugin-astro@0.14.1)(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.44.0))(prettier@3.6.2)
- tailwindcss:
- specifier: ^3.4.0
- version: 3.4.18(tsx@4.21.0)(yaml@2.8.1)
- typescript:
- specifier: ~5.9.2
- version: 5.9.3
-
apps/mukke/apps/web:
dependencies:
'@manacore/shared-api-client':
@@ -3120,8 +2776,6 @@ importers:
specifier: ^6.0.0
version: 6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
- apps/mukke/packages/mukke-types: {}
-
apps/mukke/packages/shared:
devDependencies:
typescript:
@@ -5503,9 +5157,6 @@ importers:
'@todo/shared':
specifier: workspace:*
version: link:../../packages/shared
- d3-force:
- specifier: ^3.0.0
- version: 3.0.0
date-fns:
specifier: ^4.1.0
version: 4.1.0
@@ -5534,15 +5185,15 @@ importers:
'@tailwindcss/vite':
specifier: ^4.1.7
version: 4.1.17(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
- '@types/d3-force':
- specifier: ^3.0.0
- version: 3.0.10
'@types/node':
specifier: ^20.0.0
version: 20.19.25
'@vite-pwa/sveltekit':
specifier: ^1.1.0
version: 1.1.0(@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))(workbox-build@7.4.0(@types/babel__core@7.20.5))(workbox-window@7.4.0)
+ jsdom:
+ specifier: ^25.0.1
+ version: 25.0.1
prettier:
specifier: ^3.1.1
version: 3.6.2
@@ -5567,6 +5218,9 @@ importers:
vite:
specifier: ^6.0.0
version: 6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)
+ vitest:
+ specifier: ^4.1.0
+ version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@20.19.25)(jsdom@25.0.1)(vite@6.4.1(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))
apps/todo/packages/shared:
dependencies:
@@ -12066,27 +11720,6 @@ packages:
'@microsoft/tsdoc@0.16.0':
resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==}
- '@missingcore/audio-metadata@1.3.0':
- resolution: {integrity: sha512-Yl+Tv4GUisCEZSVqZYDiM5Gm182g3IfFx5XJydjtsTyMlJ+408InHFfh+yLkfiMNcvpcbt2a3dQyFMWaABBEeg==}
- engines: {node: '>=18'}
- peerDependencies:
- '@dr.pogodin/react-native-fs': '>=2.22.0'
- '@types/react': '>=18.2.0'
- expo-file-system: '>=17.0.0'
- react: '>=18.2.0'
- react-native: '>=0.74.0'
- peerDependenciesMeta:
- '@dr.pogodin/react-native-fs':
- optional: true
- '@types/react':
- optional: true
- expo-file-system:
- optional: true
- react:
- optional: true
- react-native:
- optional: true
-
'@mixmark-io/domino@2.2.0':
resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==}
@@ -13029,9 +12662,6 @@ packages:
'@react-native-community/slider@5.0.1':
resolution: {integrity: sha512-K3JRWkIW4wQ79YJ6+BPZzp1SamoikxfPRw7Yw4B4PElEQmqZFrmH9M5LxvIo460/3QSrZF/wCgi3qizJt7g/iw==}
- '@react-native-community/slider@5.1.2':
- resolution: {integrity: sha512-UV/MjCyCtSjS5BQDrrGIMmCXm309xEG6XbR0Dj65kzTraJSVDxSjQS2uBUXgX+5SZUOCzCxzv3OufOZBdtQY4w==}
-
'@react-native-google-signin/google-signin@14.0.2':
resolution: {integrity: sha512-L23SBl30VGVjxdX3jb9PZJHuuitsSU/aMGWCNQqSx69PrUqGcP2gkcUeOsK6VPFadPbjh+4ml+0UoAEzZGA3dQ==}
peerDependencies:
@@ -18431,11 +18061,6 @@ packages:
peerDependencies:
expo: '*'
- expo-dev-client@55.0.16:
- resolution: {integrity: sha512-PbbzWcmvm0Cqp5Y33hLxAX5ewsyph32e8UQL6gwz5iL8KL7JSi/Zbnotr+3cCeEUpLmRBF9pAigm6evAod7PIg==}
- peerDependencies:
- expo: '*'
-
expo-dev-client@6.0.18:
resolution: {integrity: sha512-8QKWvhsoZpMkecAMlmWoRHnaTNiPS3aO7E42spZOMjyiaNRJMHZsnB8W2b63dt3Yg3oLyskLAoI8IOmnqVX8vA==}
peerDependencies:
@@ -18451,11 +18076,6 @@ packages:
peerDependencies:
expo: '*'
- expo-dev-launcher@55.0.17:
- resolution: {integrity: sha512-ZiEPC6lYpWk5WDWAyHnBqSjCf2Mq/QBuuYxtKeV0s9FWzGCFDxB39W2oH2UmDve9PosnC3zCloX99IoJCdJmAw==}
- peerDependencies:
- expo: '*'
-
expo-dev-launcher@6.0.18:
resolution: {integrity: sha512-JTtcIfNvHO9PTdRJLmHs+7HJILXXZjF95jxgzu6hsJrgsTg/AZDtEsIt/qa6ctEYQTqrLdsLDgDhiXVel3AoQA==}
peerDependencies:
@@ -18476,16 +18096,6 @@ packages:
peerDependencies:
expo: '*'
- expo-dev-menu-interface@55.0.1:
- resolution: {integrity: sha512-FkNtwq1q6NmYoy28pj+ZLuHmirJgc039pQbJ167MZJIaprLcMN1yy67qA7xBHK+FNJ8AN8kGCtMTPByg5UC72A==}
- peerDependencies:
- expo: '*'
-
- expo-dev-menu@55.0.14:
- resolution: {integrity: sha512-1YgtX6ejSTxIX4P6A+zWnP4ZKbikO+j8dd1ebpSacyHfdnF7kAKXf2nwUjlTBvmbd2zFtofSs7VHQJAIRpWsvA==}
- peerDependencies:
- expo: '*'
-
expo-dev-menu@6.0.25:
resolution: {integrity: sha512-K2m4z/I+CPWbMtHlDzU68lHaQs52De0v5gbsjAmA5ig8FrYh4MKZvPxSVANaiKENzgmtglu8qaFh7ua9Gt2TfA==}
peerDependencies:
@@ -18639,9 +18249,6 @@ packages:
expo-json-utils@0.15.0:
resolution: {integrity: sha512-duRT6oGl80IDzH2LD2yEFWNwGIC2WkozsB6HF3cDYNoNNdUvFk6uN3YiwsTsqVM/D0z6LEAQ01/SlYvN+Fw0JQ==}
- expo-json-utils@55.0.0:
- resolution: {integrity: sha512-aupt/o5PDAb8dXDCb0JcRdkqnTLxe/F+La7jrnyd/sXlYFfRgBJLFOa1SqVFXm1E/Xam1SE/yw6eAb+DGY7Arg==}
-
expo-keep-awake@14.0.3:
resolution: {integrity: sha512-6Jh94G6NvTZfuLnm2vwIpKe3GdOiVBuISl7FI8GqN0/9UOg9E0WXXp5cDcfAG8bn80RfgLJS8P7EPUGTZyOvhg==}
peerDependencies:
@@ -18711,11 +18318,6 @@ packages:
peerDependencies:
expo: '*'
- expo-manifests@55.0.9:
- resolution: {integrity: sha512-i82j3X4hbxYDe6kxUw4u8WfvbvTj2w+9BD9WKuL0mFRy+MjvdzdyaqAjEViWCKo/alquP/hTApDTQBb3UmWhkg==}
- peerDependencies:
- expo: '*'
-
expo-media-library@18.2.0:
resolution: {integrity: sha512-aIYLIqmU8LFWrQcfZdwg9f/iWm0wC8uhZ7HiUiTnrigtxf417cVvNokX9afXpIOKBHAHRjVIbcs1nN8KZDE2Fw==}
peerDependencies:
@@ -19005,11 +18607,6 @@ packages:
peerDependencies:
expo: '*'
- expo-updates-interface@55.1.3:
- resolution: {integrity: sha512-UVVIiZqymQZJL+o/jh65kXOI97xdkbqBJJM0LMabaPMNLFnc6/WvOMOzmQs7SPyKb8+0PeBaFd7tj5DzF6JeQg==}
- peerDependencies:
- expo: '*'
-
expo-updates@29.0.13:
resolution: {integrity: sha512-tf/yex7U7betbIyDNwaSyDWDxMQVgmJ5qyghGEDlHP0052CPKUvbNEdtdf4DNCpsL3uxn8+71A4O4NxQdJEFuA==}
hasBin: true
@@ -19187,9 +18784,6 @@ packages:
fast-safe-stringify@2.1.1:
resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
- fast-text-encoding@1.0.6:
- resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==}
-
fast-uri@3.1.0:
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
@@ -32584,15 +32178,6 @@ snapshots:
'@microsoft/tsdoc@0.16.0': {}
- '@missingcore/audio-metadata@1.3.0(@types/react@19.2.14)(expo-file-system@55.0.10(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0)))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)':
- dependencies:
- fast-text-encoding: 1.0.6
- optionalDependencies:
- '@types/react': 19.2.14
- expo-file-system: 55.0.10(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))
- react: 19.2.0
- react-native: 0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0)
-
'@mixmark-io/domino@2.2.0': {}
'@mozilla/readability@0.6.0': {}
@@ -34828,8 +34413,6 @@ snapshots:
'@react-native-community/slider@5.0.1': {}
- '@react-native-community/slider@5.1.2': {}
-
'@react-native-google-signin/google-signin@14.0.2(expo@54.0.13)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)':
dependencies:
react: 19.1.0
@@ -40575,7 +40158,8 @@ snapshots:
dependencies:
possible-typed-array-names: 1.1.0
- await-lock@2.2.2: {}
+ await-lock@2.2.2:
+ optional: true
aws-sign2@0.7.0: {}
@@ -44117,18 +43701,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- expo-dev-client@55.0.16(expo@55.0.5)(typescript@5.9.3):
- dependencies:
- expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(expo-router@55.0.5)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.12.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
- expo-dev-launcher: 55.0.17(expo@55.0.5)(typescript@5.9.3)
- expo-dev-menu: 55.0.14(expo@55.0.5)
- expo-dev-menu-interface: 55.0.1(expo@55.0.5)
- expo-manifests: 55.0.9(expo@55.0.5)(typescript@5.9.3)
- expo-updates-interface: 55.1.3(expo@55.0.5)
- transitivePeerDependencies:
- - supports-color
- - typescript
-
expo-dev-client@6.0.18(expo@54.0.13):
dependencies:
expo: 54.0.13(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native-webview@13.12.2(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -44181,16 +43753,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- expo-dev-launcher@55.0.17(expo@55.0.5)(typescript@5.9.3):
- dependencies:
- '@expo/schema-utils': 55.0.2
- expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(expo-router@55.0.5)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.12.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
- expo-dev-menu: 55.0.14(expo@55.0.5)
- expo-manifests: 55.0.9(expo@55.0.5)(typescript@5.9.3)
- transitivePeerDependencies:
- - supports-color
- - typescript
-
expo-dev-launcher@6.0.18(expo@54.0.13):
dependencies:
expo: 54.0.13(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native-webview@13.12.2(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -44227,15 +43789,6 @@ snapshots:
dependencies:
expo: 54.0.25(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native-webview@13.12.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
- expo-dev-menu-interface@55.0.1(expo@55.0.5):
- dependencies:
- expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(expo-router@55.0.5)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.12.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
-
- expo-dev-menu@55.0.14(expo@55.0.5):
- dependencies:
- expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(expo-router@55.0.5)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.12.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
- expo-dev-menu-interface: 55.0.1(expo@55.0.5)
-
expo-dev-menu@6.0.25(expo@52.0.47):
dependencies:
expo: 52.0.47(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(encoding@0.1.13)(react-native-webview@13.12.2(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1))(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)
@@ -44555,8 +44108,6 @@ snapshots:
expo-json-utils@0.15.0: {}
- expo-json-utils@55.0.0: {}
-
expo-keep-awake@14.0.3(expo@52.0.47)(react@18.3.1):
dependencies:
expo: 52.0.47(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(encoding@0.1.13)(react-native-webview@13.12.2(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1))(react-native@0.76.7(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.3.27)(encoding@0.1.13)(react@18.3.1))(react@18.3.1)
@@ -44771,15 +44322,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- expo-manifests@55.0.9(expo@55.0.5)(typescript@5.9.3):
- dependencies:
- '@expo/config': 55.0.8(typescript@5.9.3)
- expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(expo-router@55.0.5)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.12.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
- expo-json-utils: 55.0.0
- transitivePeerDependencies:
- - supports-color
- - typescript
-
expo-media-library@18.2.0(expo@54.0.12)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)):
dependencies:
expo: 54.0.12(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native-webview@13.12.2(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
@@ -45430,13 +44972,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- expo-sqlite@55.0.10(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0):
- dependencies:
- await-lock: 2.2.2
- expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(expo-router@55.0.5)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.12.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
- react: 19.2.0
- react-native: 0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0)
-
expo-sqlite@55.0.10(expo@55.0.5)(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4):
dependencies:
await-lock: 2.2.2
@@ -45648,10 +45183,6 @@ snapshots:
dependencies:
expo: 54.0.25(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(expo-router@6.0.15)(react-native-webview@13.12.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0)
- expo-updates-interface@55.1.3(expo@55.0.5):
- dependencies:
- expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@6.1.2)(expo-router@55.0.5)(react-dom@19.2.0(react@19.2.0))(react-native-webview@13.12.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
-
expo-updates@29.0.13(expo@54.0.13)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0):
dependencies:
'@expo/code-signing-certificates': 0.0.5
@@ -46293,8 +45824,6 @@ snapshots:
fast-safe-stringify@2.1.1: {}
- fast-text-encoding@1.0.6: {}
-
fast-uri@3.1.0: {}
fast-xml-parser@4.5.3:
@@ -51308,20 +50837,6 @@ snapshots:
- react-native-svg
- supports-color
- nativewind@4.2.3(react-native-reanimated@4.2.1(react-native-worklets@0.7.2(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.1)):
- dependencies:
- comment-json: 4.4.1
- debug: 4.4.3
- react-native-css-interop: 0.2.3(react-native-reanimated@4.2.1(react-native-worklets@0.7.2(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.1))
- tailwindcss: 3.4.18(tsx@4.21.0)(yaml@2.8.1)
- transitivePeerDependencies:
- - react
- - react-native
- - react-native-reanimated
- - react-native-safe-area-context
- - react-native-svg
- - supports-color
-
natural-compare@1.4.0: {}
negotiator@0.6.3: {}
@@ -52517,23 +52032,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- react-native-css-interop@0.2.3(react-native-reanimated@4.2.1(react-native-worklets@0.7.2(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.6.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.1)):
- dependencies:
- '@babel/helper-module-imports': 7.27.1
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
- debug: 4.4.3
- lightningcss: 1.27.0
- react: 19.2.0
- react-native: 0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0)
- react-native-reanimated: 4.2.1(react-native-worklets@0.7.2(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
- semver: 7.7.3
- tailwindcss: 3.4.18(tsx@4.21.0)(yaml@2.8.1)
- optionalDependencies:
- react-native-safe-area-context: 5.6.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)
- transitivePeerDependencies:
- - supports-color
-
react-native-draggable-flatlist@4.0.3(@babel/core@7.28.5)(react-native-gesture-handler@2.28.0(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.5(patch_hash=ja2p6dcgbdai4kr2slklwsqegq)(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0)):
dependencies:
'@babel/preset-typescript': 7.28.5(@babel/core@7.28.5)
@@ -58213,12 +57711,6 @@ snapshots:
react: 18.3.1
use-sync-external-store: 1.6.0(react@18.3.1)
- zustand@5.0.8(@types/react@19.2.14)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)):
- optionalDependencies:
- '@types/react': 19.2.14
- react: 19.2.0
- use-sync-external-store: 1.6.0(react@19.2.0)
-
zustand@5.0.8(@types/react@19.2.7)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0)):
optionalDependencies:
'@types/react': 19.2.7