From a787a27daa88fc27b853908193a88c1016568aec Mon Sep 17 00:00:00 2001 From: Till JS Date: Sun, 5 Apr 2026 19:49:57 +0200 Subject: [PATCH] feat(timeblocks): unified recurrence engine with rrule.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Core recurrence engine: - Add rrule.js dependency for RFC 5545 RRULE expansion - recurrence.ts: expandRule(), materializeRecurringBlocks(30 days), regenerateForBlock(), cleanupFutureInstances(), deleteAllInstances() - Virtual expansion: expandTemplatesVirtually() for calendar views >30 days - HabitSchedule ↔ RRULE bidirectional conversion Schema: - Dexie v4: add parentBlockId, recurrenceDate, isRecurrenceException to timeBlocks with [parentBlockId+recurrenceDate] compound index - LocalTimeBlock + TimeBlock types updated Module changes: - Todo: remove recurrenceRule from LocalTask/Task (lives on TimeBlock) - Calendar: add parentBlockId to CalendarEvent, repeat icon on EventCard - Startup: materializeRecurringBlocks(30) runs on calendar layout mount Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/mana/apps/web/package.json | 84 + apps/mana/apps/web/src/lib/data/database.ts | 609 ++++++ .../web/src/lib/data/time-blocks/index.ts | 16 + .../web/src/lib/data/time-blocks/queries.ts | 292 +++ .../src/lib/data/time-blocks/recurrence.ts | 317 +++ .../web/src/lib/data/time-blocks/types.ts | 118 + .../calendar/components/EventCard.svelte | 352 +++ .../web/src/lib/modules/calendar/types.ts | 111 + .../apps/web/src/lib/modules/todo/types.ts | 124 ++ .../src/routes/(app)/calendar/+layout.svelte | 28 + pnpm-lock.yaml | 1895 +++++++++++------ 11 files changed, 3263 insertions(+), 683 deletions(-) create mode 100644 apps/mana/apps/web/package.json create mode 100644 apps/mana/apps/web/src/lib/data/database.ts create mode 100644 apps/mana/apps/web/src/lib/data/time-blocks/index.ts create mode 100644 apps/mana/apps/web/src/lib/data/time-blocks/queries.ts create mode 100644 apps/mana/apps/web/src/lib/data/time-blocks/recurrence.ts create mode 100644 apps/mana/apps/web/src/lib/data/time-blocks/types.ts create mode 100644 apps/mana/apps/web/src/lib/modules/calendar/components/EventCard.svelte create mode 100644 apps/mana/apps/web/src/lib/modules/calendar/types.ts create mode 100644 apps/mana/apps/web/src/lib/modules/todo/types.ts create mode 100644 apps/mana/apps/web/src/routes/(app)/calendar/+layout.svelte diff --git a/apps/mana/apps/web/package.json b/apps/mana/apps/web/package.json new file mode 100644 index 000000000..be43ccbc3 --- /dev/null +++ b/apps/mana/apps/web/package.json @@ -0,0 +1,84 @@ +{ + "name": "@mana/web", + "version": "0.2.0", + "private": true, + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "format": "prettier --write .", + "lint": "prettier --check . && eslint .", + "test": "vitest", + "test:ui": "vitest --ui", + "test:e2e": "playwright test" + }, + "devDependencies": { + "@mana/shared-pwa": "workspace:*", + "@mana/shared-vite-config": "workspace:*", + "@playwright/test": "^1.51.0", + "@sveltejs/adapter-node": "^5.0.0", + "@sveltejs/kit": "^2.47.1", + "@sveltejs/vite-plugin-svelte": "^5.0.4", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.1.7", + "@types/node": "^22.10.5", + "@vite-pwa/sveltekit": "^1.1.0", + "@vitest/coverage-v8": "^4.0.14", + "@vitest/ui": "^4.0.14", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.49", + "prettier": "^3.4.2", + "prettier-plugin-svelte": "^3.3.2", + "prettier-plugin-tailwindcss": "^0.6.10", + "svelte": "^5.41.0", + "svelte-check": "^4.3.3", + "tailwindcss": "^4.1.17", + "tslib": "^2.8.1", + "typescript": "^5.9.3", + "vite": "^6.0.7", + "vitest": "^4.0.14" + }, + "dependencies": { + "@calc/shared": "workspace:*", + "@mana/credits": "workspace:^", + "@mana/feedback": "workspace:*", + "@mana/help": "workspace:*", + "@mana/local-llm": "workspace:*", + "@mana/local-store": "workspace:*", + "@mana/qr-export": "workspace:*", + "@mana/shared-auth": "workspace:*", + "@mana/shared-auth-ui": "workspace:*", + "@mana/shared-branding": "workspace:*", + "@mana/shared-config": "workspace:*", + "@mana/shared-error-tracking": "workspace:*", + "@mana/shared-i18n": "workspace:*", + "@mana/shared-icons": "workspace:*", + "@mana/shared-links": "workspace:*", + "@mana/shared-stores": "workspace:*", + "@mana/shared-tags": "workspace:*", + "@mana/shared-tailwind": "workspace:*", + "@mana/shared-theme": "workspace:*", + "@mana/shared-theme-ui": "workspace:*", + "@mana/shared-types": "workspace:*", + "@mana/shared-ui": "workspace:*", + "@mana/shared-uload": "workspace:*", + "@mana/shared-utils": "workspace:*", + "@mana/spiral-db": "workspace:*", + "@mana/subscriptions": "workspace:*", + "@mana/wallpaper-generator": "workspace:*", + "@types/suncalc": "^1.9.2", + "@zitare/content": "workspace:*", + "date-fns": "^4.1.0", + "dexie": "^4.0.11", + "marked": "^17.0.5", + "rrule": "^2.8.1", + "suncalc": "^1.9.0", + "svelte-dnd-action": "^0.9.68", + "svelte-i18n": "^4.0.0", + "svelte-sonner": "^1.0.5" + }, + "type": "module" +} diff --git a/apps/mana/apps/web/src/lib/data/database.ts b/apps/mana/apps/web/src/lib/data/database.ts new file mode 100644 index 000000000..4a111b4a0 --- /dev/null +++ b/apps/mana/apps/web/src/lib/data/database.ts @@ -0,0 +1,609 @@ +/** + * Unified Dexie Database — Single IndexedDB for all Mana apps. + * + * All collections from all app modules are registered in one database. + * Table names that collide across apps are prefixed (e.g., pictureTags, storageTags). + * + * The SYNC_APP_MAP maps each table back to its appId for sync routing. + */ + +import Dexie, { type EntityTable } from 'dexie'; +import { trackFirstContent } from '$lib/stores/funnel-tracking'; +import { fire as fireTrigger } from '$lib/triggers/registry'; +import { checkInlineSuggestion } from '$lib/triggers/inline-suggest'; + +// ─── Database ────────────────────────────────────────────── + +export const db = new Dexie('mana'); + +db.version(1).stores({ + // ─── Sync Infrastructure ─── + _pendingChanges: '++id, appId, collection, recordId, createdAt', + _syncMeta: '[appId+collection]', + + // ─── Core / Mana (appId: 'mana') ─── + userSettings: 'id, key', + dashboardConfigs: 'id', + automations: 'id, sourceApp, targetApp, enabled, [sourceApp+sourceCollection]', + + // ─── Todo (appId: 'todo') ─── + tasks: + 'id, dueDate, isCompleted, priority, order, projectId, [isCompleted+order], [projectId+order]', + todoProjects: 'id, order, isArchived, isDefault', + taskLabels: 'id, taskId, labelId', // junction to globalTags (labelId = tagId) + reminders: 'id, taskId', + boardViews: 'id, order, groupBy', + + // ─── Calendar (appId: 'calendar') ─── + calendars: 'id, isDefault, isVisible', + events: 'id, calendarId, startDate, endDate, allDay, [calendarId+startDate]', + eventTags: 'id, eventId, tagId, [eventId+tagId]', + + // ─── Contacts (appId: 'contacts') ─── + contacts: 'id, firstName, lastName, email, company, isFavorite, isArchived', + contactTags: 'id, contactId, tagId, [contactId+tagId]', + + // ─── Chat (appId: 'chat') ─── + conversations: 'id, isArchived, isPinned, spaceId, templateId', + messages: 'id, conversationId, sender, [conversationId+sender]', + chatTemplates: 'id, isDefault', + conversationTags: 'id, conversationId, tagId, [conversationId+tagId]', + + // ─── Picture (appId: 'picture') ─── + images: 'id, isFavorite, isPublic, isArchived, prompt', + boards: 'id, isPublic', + boardItems: 'id, boardId, itemType, zIndex, [boardId+zIndex]', + imageTags: 'id, imageId, tagId, [imageId+tagId]', // junction to globalTags + + // ─── Cards (appId: 'cards') ─── + cardDecks: 'id, isPublic', + cards: 'id, deckId, difficulty, nextReview, order, [deckId+order]', + deckTags: 'id, deckId, tagId, [deckId+tagId]', + + // ─── Zitare (appId: 'zitare') ─── + zitareFavorites: 'id, quoteId', + zitareLists: 'id', + zitareListTags: 'id, listId, tagId, [listId+tagId]', + + // ─── Music (appId: 'music') ─── + songs: 'id, artist, album, genre, favorite, title', + mukkePlaylists: 'id, name', + playlistSongs: 'id, playlistId, songId, sortOrder, [playlistId+sortOrder]', + mukkeProjects: 'id, title, songId', + markers: 'id, beatId, type, sortOrder', + songTags: 'id, songId, tagId, [songId+tagId]', + + // ─── Storage (appId: 'storage') ─── + files: 'id, parentFolderId, mimeType, isFavorite, isDeleted, name', + storageFolders: 'id, parentFolderId, path, depth, isFavorite, isDeleted', + fileTags: 'id, fileId, tagId, [fileId+tagId]', // junction to globalTags + + // ─── Presi (appId: 'presi') ─── + presiDecks: 'id, isPublic', + slides: 'id, deckId, order, [deckId+order]', + presiDeckTags: 'id, deckId, tagId, [deckId+tagId]', + + // ─── Inventar (appId: 'inventar') ─── + invCollections: 'id, order, templateId', + invItems: 'id, collectionId, locationId, categoryId, status, name, [collectionId+order]', + invLocations: 'id, parentId, path, depth, order', + invCategories: 'id, parentId, order', + invItemTags: 'id, itemId, tagId, [itemId+tagId]', + + // ─── Photos (appId: 'photos') ─── + albums: 'id, isAutoGenerated, name', + albumItems: 'id, albumId, mediaId, sortOrder, [albumId+sortOrder]', + photoFavorites: 'id, mediaId', + photoMediaTags: 'id, mediaId, tagId, [mediaId+tagId]', // junction to globalTags + + // ─── SkillTree (appId: 'skilltree') ─── + skills: 'id, branch, parentId, level', + activities: 'id, skillId, timestamp', + achievements: 'id, key, unlockedAt', + skillTags: 'id, skillId, tagId, [skillId+tagId]', + + // ─── CityCorners (appId: 'citycorners') ─── + cities: 'id, slug, country, name', + ccLocations: 'id, cityId, category, name', + ccFavorites: 'id, locationId', + ccLocationTags: 'id, locationId, tagId, [locationId+tagId]', + + // ─── Times (appId: 'times') ─── + timeClients: 'id, order, isArchived, shortCode', + timeProjects: 'id, clientId, isArchived, isBillable, guildId, visibility, order', + timeEntries: + 'id, projectId, clientId, date, isRunning, [date+projectId], [date+clientId], guildId, visibility', + timeTemplates: 'id, usageCount, lastUsedAt, projectId', + timeSettings: 'id', + timeAlarms: 'id, enabled, time', + timeCountdownTimers: 'id, status', + timeWorldClocks: 'id, sortOrder, timezone', + entryTags: 'id, entryId, tagId, [entryId+tagId]', + + // ─── Context (appId: 'context') ─── + contextSpaces: 'id, pinned, prefix', + documents: 'id, spaceId, type, pinned, title, [spaceId+type]', + documentTags: 'id, documentId, tagId, [documentId+tagId]', + + // ─── Questions (appId: 'questions') ─── + qCollections: 'id, sortOrder, isDefault', + questions: 'id, collectionId, status, priority, [collectionId+status]', + answers: 'id, questionId, isAccepted', + questionTags: 'id, questionId, tagId, [questionId+tagId]', + + // ─── NutriPhi (appId: 'nutriphi') ─── + meals: 'id, date, mealType, [date+mealType]', + goals: 'id', + nutriFavorites: 'id, mealType, usageCount', + mealTags: 'id, mealId, tagId, [mealId+tagId]', + + // ─── Planta (appId: 'planta') ─── + plants: 'id, isActive, healthStatus', + plantPhotos: 'id, plantId, isPrimary, [plantId+isPrimary]', + wateringSchedules: 'id, plantId, nextWateringAt', + wateringLogs: 'id, plantId, wateredAt', + plantTags: 'id, plantId, tagId, [plantId+tagId]', + + // ─── uLoad (appId: 'uload') ─── + links: 'id, shortCode, isActive, folderId, order, clickCount, [folderId+order], [isActive+order]', + uloadTags: 'id, slug, name', + uloadFolders: 'id, order', + linkTags: 'id, linkId, tagId, [linkId+tagId]', + + // ─── Calc (appId: 'calc') ─── + calculations: 'id, mode', + savedFormulas: 'id, mode, name', + + // ─── Moodlit (appId: 'moodlit') ─── + moods: 'id, name, animation, isDefault', + sequences: 'id, name', + moodTags: 'id, moodId, tagId, [moodId+tagId]', + + // ─── Memoro (appId: 'memoro') ─── + memos: 'id, processingStatus, isArchived, isPinned, language, [isArchived+createdAt]', + memories: 'id, memoId', + memoTags: 'id, memoId, tagId', // junction to globalTags + memoroSpaces: 'id, ownerId', + spaceMembers: 'id, spaceId, userId', + memoSpaces: 'id, memoId, spaceId', + + // ─── Guides (appId: 'guides') ─── + guides: 'id, category, difficulty, collectionId, tags', + sections: 'id, guideId, order', + steps: 'id, guideId, sectionId, order, [guideId+order]', + guideCollections: 'id', + runs: 'id, guideId, startedAt, completedAt', + guideTags: 'id, guideId, tagId, [guideId+tagId]', + + // ─── Playground (appId: 'playground') ─── + // No persistent data — stateless LLM playground + + // ─── Habits (appId: 'habits') ─── + habits: 'id, order, isArchived, color', + habitLogs: 'id, habitId, timestamp, [habitId+timestamp]', + + // ─── Notes (appId: 'notes') ─── + notes: 'id, isPinned, isArchived, color, title, updatedAt', + noteTags: 'id, noteId, tagId, [noteId+tagId]', + + // ─── Finance (appId: 'finance') ─── + transactions: 'id, type, categoryId, date, amount, [date+type], [categoryId+date]', + financeCategories: 'id, type, order', + budgets: 'id, categoryId, month, [month+categoryId]', + + // ─── Places (appId: 'places') ─── + places: 'id, name, category, isFavorite, isArchived, latitude, longitude', + locationLogs: 'id, placeId, timestamp, [placeId+timestamp]', + placeTags: 'id, placeId, tagId, [placeId+tagId]', + + // ─── Shared: Global Tags (appId: 'tags') ─── + globalTags: 'id, name, groupId', + tagGroups: 'id', + + // ─── Shared: Links (appId: 'links') ─── + manaLinks: 'id, sourceAppId, sourceRecordId, targetAppId, targetRecordId', +}); + +// ─── Schema Migrations ──────────────────────────────────────── +// Version 2: Habits emoji → icon field migration + +const EMOJI_TO_ICON: Record = { + '\u2615': 'coffee', + '\ud83d\udeb6': 'person-simple-walk', + '\ud83c\udfc3': 'person-simple-run', + '\ud83e\uddd8': 'person-simple-tai-chi', + '\ud83d\udca7': 'drop', + '\ud83c\udf4e': 'apple-logo', + '\ud83d\udcda': 'book-open', + '\ud83d\udcaa': 'barbell', + '\ud83d\udecc': 'bed', + '\ud83c\udfb5': 'music-note', + '\ud83d\udc8a': 'pill', + '\ud83c\udf7a': 'beer-stein', + '\ud83c\udf55': 'pizza', + '\ud83d\udeb4': 'bicycle', + '\ud83d\udcdd': 'pencil-simple', + '\ud83e\uddfc': 'tooth', + '\u2b50': 'star', + '\ud83d\ude2e\u200d\ud83d\udca8': 'wind', +}; + +db.version(2) + .stores({}) + .upgrade((tx) => { + return tx + .table('habits') + .toCollection() + .modify((habit: Record) => { + if (habit.emoji !== undefined && habit.icon === undefined) { + habit.icon = EMOJI_TO_ICON[habit.emoji as string] ?? 'star'; + delete habit.emoji; + } + }); + }); + +// ─── Version 3: Unified Time Model (timeBlocks) ───────────── +// Adds timeBlocks table, updates indexes on events/timeEntries/tasks/habitLogs, +// and migrates existing time data into timeBlocks. + +db.version(3) + .stores({ + // New tables + timeBlocks: + 'id, startDate, kind, type, sourceModule, sourceId, [sourceModule+sourceId], [type+startDate], [kind+startDate]', + timeBlockTags: 'id, blockId, tagId, [blockId+tagId]', + + // Updated indexes (timeBlockId / scheduledBlockId added) + events: 'id, calendarId, timeBlockId', + timeEntries: 'id, projectId, clientId, timeBlockId, guildId, visibility', + tasks: + 'id, dueDate, isCompleted, priority, order, projectId, scheduledBlockId, [isCompleted+order], [projectId+order]', + habitLogs: 'id, habitId, timeBlockId, [habitId+timeBlockId]', + }) + .upgrade(async (tx) => { + const timeBlocksTable = tx.table('timeBlocks'); + + // 1. Migrate calendar events → timeBlocks + const events = await tx.table('events').toArray(); + for (const event of events) { + if (!event.startDate) continue; + const blockId = crypto.randomUUID(); + await timeBlocksTable.add({ + id: blockId, + startDate: event.startDate, + endDate: event.endDate ?? null, + allDay: event.allDay ?? false, + isLive: false, + timezone: null, + recurrenceRule: event.recurrenceRule ?? null, + kind: 'scheduled', + type: 'event', + sourceModule: 'calendar', + sourceId: event.id, + linkedBlockId: null, + title: event.title ?? '', + description: event.description ?? null, + color: event.color ?? null, + icon: null, + projectId: null, + createdAt: event.createdAt ?? new Date().toISOString(), + updatedAt: event.updatedAt ?? new Date().toISOString(), + deletedAt: event.deletedAt ?? null, + }); + await tx.table('events').update(event.id, { timeBlockId: blockId }); + } + + // 2. Migrate time entries → timeBlocks + const entries = await tx.table('timeEntries').toArray(); + for (const entry of entries) { + if (!entry.date && !entry.startTime) continue; // skip entries with no date at all + const blockId = crypto.randomUUID(); + const startDate = entry.startTime ?? `${entry.date}T00:00:00.000Z`; + await timeBlocksTable.add({ + id: blockId, + startDate, + endDate: entry.endTime ?? null, + allDay: false, + isLive: entry.isRunning ?? false, + timezone: null, + recurrenceRule: null, + kind: 'logged', + type: 'timeEntry', + sourceModule: 'times', + sourceId: entry.id, + linkedBlockId: null, + title: entry.description || 'Time Entry', + description: null, + color: null, + icon: null, + projectId: entry.projectId ?? null, + createdAt: entry.createdAt ?? new Date().toISOString(), + updatedAt: entry.updatedAt ?? new Date().toISOString(), + deletedAt: entry.deletedAt ?? null, + }); + await tx.table('timeEntries').update(entry.id, { timeBlockId: blockId }); + } + + // 3. Migrate habit logs → timeBlocks + const logs = await tx.table('habitLogs').toArray(); + const habitsById = new Map>(); + const allHabits = await tx.table('habits').toArray(); + for (const h of allHabits) habitsById.set(h.id as string, h); + + for (const log of logs) { + if (!log.timestamp) continue; + const blockId = crypto.randomUUID(); + const habit = habitsById.get(log.habitId as string); + await timeBlocksTable.add({ + id: blockId, + startDate: log.timestamp, + endDate: null, + allDay: false, + isLive: false, + timezone: null, + recurrenceRule: null, + kind: 'logged', + type: 'habit', + sourceModule: 'habits', + sourceId: log.id, + linkedBlockId: null, + title: (habit?.title as string) ?? 'Habit', + description: null, + color: (habit?.color as string) ?? null, + icon: (habit?.icon as string) ?? null, + projectId: null, + createdAt: log.createdAt ?? new Date().toISOString(), + updatedAt: log.updatedAt ?? log.createdAt ?? new Date().toISOString(), + deletedAt: log.deletedAt ?? null, + }); + await tx.table('habitLogs').update(log.id, { timeBlockId: blockId }); + } + + // 4. Migrate scheduled tasks → timeBlocks + const tasks = await tx.table('tasks').toArray(); + for (const task of tasks) { + if (!task.scheduledDate) continue; + const blockId = crypto.randomUUID(); + const startISO = task.scheduledStartTime + ? `${task.scheduledDate}T${task.scheduledStartTime}:00` + : `${task.scheduledDate}T09:00:00`; + const durationMs = task.estimatedDuration ? task.estimatedDuration * 1000 : 3600000; // default 1h + const endISO = new Date(new Date(startISO).getTime() + durationMs).toISOString(); + + await timeBlocksTable.add({ + id: blockId, + startDate: startISO, + endDate: endISO, + allDay: !task.scheduledStartTime, + isLive: false, + timezone: null, + recurrenceRule: null, + kind: 'scheduled', + type: 'task', + sourceModule: 'todo', + sourceId: task.id, + linkedBlockId: null, + title: task.title ?? '', + description: null, + color: null, + icon: null, + projectId: task.projectId ?? null, + createdAt: task.createdAt ?? new Date().toISOString(), + updatedAt: task.updatedAt ?? new Date().toISOString(), + deletedAt: task.deletedAt ?? null, + }); + await tx.table('tasks').update(task.id, { scheduledBlockId: blockId }); + } + }); + +// ─── Version 4: Recurrence instance fields on timeBlocks ────── +// Adds parentBlockId, recurrenceDate, isRecurrenceException indexes. + +db.version(4).stores({ + timeBlocks: + 'id, startDate, kind, type, sourceModule, sourceId, parentBlockId, [sourceModule+sourceId], [type+startDate], [kind+startDate], [parentBlockId+recurrenceDate]', +}); + +// ─── Sync App Map ────────────────────────────────────────── +// Maps each table to its appId for sync routing. +// The SyncEngine uses this to group pending changes and push to /sync/{appId}. + +export const SYNC_APP_MAP: Record = { + mana: ['userSettings', 'dashboardConfigs', 'automations'], + todo: ['tasks', 'todoProjects', 'taskLabels', 'reminders', 'boardViews'], + calendar: ['calendars', 'events', 'eventTags'], + contacts: ['contacts', 'contactTags'], + chat: ['conversations', 'messages', 'chatTemplates', 'conversationTags'], + picture: ['images', 'boards', 'boardItems', 'imageTags'], + cards: ['cardDecks', 'cards', 'deckTags'], + zitare: ['zitareFavorites', 'zitareLists', 'zitareListTags'], + music: ['songs', 'mukkePlaylists', 'playlistSongs', 'mukkeProjects', 'markers', 'songTags'], + storage: ['files', 'storageFolders', 'fileTags'], + presi: ['presiDecks', 'slides', 'presiDeckTags'], + inventar: ['invCollections', 'invItems', 'invLocations', 'invCategories', 'invItemTags'], + photos: ['albums', 'albumItems', 'photoFavorites', 'photoMediaTags'], + skilltree: ['skills', 'activities', 'achievements', 'skillTags'], + citycorners: ['cities', 'ccLocations', 'ccFavorites', 'ccLocationTags'], + times: [ + 'timeClients', + 'timeProjects', + 'timeEntries', + 'timeTemplates', + 'timeSettings', + 'timeAlarms', + 'timeCountdownTimers', + 'timeWorldClocks', + 'entryTags', + ], + context: ['contextSpaces', 'documents', 'documentTags'], + questions: ['qCollections', 'questions', 'answers', 'questionTags'], + nutriphi: ['meals', 'goals', 'nutriFavorites', 'mealTags'], + planta: ['plants', 'plantPhotos', 'wateringSchedules', 'wateringLogs', 'plantTags'], + uload: ['links', 'uloadTags', 'uloadFolders', 'linkTags'], + calc: ['calculations', 'savedFormulas'], + moodlit: ['moods', 'sequences', 'moodTags'], + memoro: ['memos', 'memories', 'memoTags', 'memoroSpaces', 'spaceMembers', 'memoSpaces'], + guides: ['guides', 'sections', 'steps', 'guideCollections', 'runs', 'guideTags'], + habits: ['habits', 'habitLogs'], + notes: ['notes', 'noteTags'], + finance: ['transactions', 'financeCategories', 'budgets'], + places: ['places', 'locationLogs', 'placeTags'], + tags: ['globalTags', 'tagGroups'], + links: ['manaLinks'], + timeblocks: ['timeBlocks', 'timeBlockTags'], +}; + +// ─── Reverse Map: Table → AppId ──────────────────────────── +// Used by _pendingChanges to determine which appId to tag a change with. + +export const TABLE_TO_APP: Record = Object.fromEntries( + Object.entries(SYNC_APP_MAP).flatMap(([appId, tables]) => tables.map((table) => [table, appId])) +); + +// ─── Table Name Mapping (Unified ↔ Backend) ────────────────── +// The unified DB renames tables to avoid collisions (e.g., todoProjects, cardDecks). +// The backend (mana-sync) knows the original names from standalone apps. + +/** Unified table name → backend collection name (only renamed tables). */ +export const TABLE_TO_SYNC_NAME: Record = { + // todo + todoProjects: 'projects', + // chat + chatTemplates: 'templates', + // picture + // cards + cardDecks: 'decks', + // zitare + zitareFavorites: 'favorites', + zitareLists: 'lists', + // music + mukkePlaylists: 'playlists', + mukkeProjects: 'projects', + // storage + storageFolders: 'folders', + // presi + presiDecks: 'decks', + // inventar + invCollections: 'collections', + invItems: 'items', + invLocations: 'locations', + invCategories: 'categories', + // photos + photoFavorites: 'favorites', + photoMediaTags: 'photoTags', + // citycorners + ccLocations: 'locations', + ccFavorites: 'favorites', + // times + timeClients: 'clients', + timeProjects: 'projects', + timeTemplates: 'templates', + timeSettings: 'settings', + timeAlarms: 'alarms', + timeCountdownTimers: 'countdownTimers', + timeWorldClocks: 'worldClocks', + // context + contextSpaces: 'spaces', + // questions + qCollections: 'collections', + // nutriphi + nutriFavorites: 'favorites', + // memoro + memoroSpaces: 'spaces', + // uload + uloadTags: 'tags', + uloadFolders: 'folders', + // guides + guideCollections: 'collections', + // finance + financeCategories: 'categories', + // shared: tags + globalTags: 'tags', + tagGroups: 'tagGroups', + // shared: links + manaLinks: 'links', +}; + +/** Get the backend collection name for a unified table. */ +export function toSyncName(tableName: string): string { + return TABLE_TO_SYNC_NAME[tableName] ?? tableName; +} + +/** Build reverse map: for a given appId, maps backend collection name → unified table name. */ +export const SYNC_NAME_TO_TABLE: Record> = {}; +for (const [appId, tables] of Object.entries(SYNC_APP_MAP)) { + const map: Record = {}; + for (const tableName of tables) { + const syncName = toSyncName(tableName); + map[syncName] = tableName; + } + SYNC_NAME_TO_TABLE[appId] = map; +} + +/** Get the unified table name for a backend collection + appId. */ +export function fromSyncName(appId: string, syncCollection: string): string { + return SYNC_NAME_TO_TABLE[appId]?.[syncCollection] ?? syncCollection; +} + +// ─── Change Tracking via Dexie Hooks ───────────────────────── +// Automatically records pending changes for every write to sync-relevant tables. +// This means module stores (taskTable.add(), etc.) don't need manual trackChange() calls. + +let _applyingServerChanges = false; + +/** Set to true while applying server changes to prevent sync loops. */ +export function setApplyingServerChanges(v: boolean): void { + _applyingServerChanges = v; +} + +const pendingChangesTable = db.table('_pendingChanges'); + +for (const [appId, tables] of Object.entries(SYNC_APP_MAP)) { + for (const tableName of tables) { + const table = db.table(tableName); + + table.hook('creating', function (_primKey, obj) { + if (_applyingServerChanges) return; + const now = new Date().toISOString(); + pendingChangesTable.add({ + appId, + collection: tableName, + recordId: obj.id, + op: 'insert', + data: { ...obj }, + createdAt: now, + }); + trackFirstContent(appId); + fireTrigger(appId, tableName, 'insert', { ...obj }); + // Defer cross-table reads outside the Dexie hook's transaction scope + const objCopy = { ...obj }; + setTimeout(() => { + checkInlineSuggestion(appId, tableName, objCopy).then((sug) => { + if (sug) + window.dispatchEvent(new CustomEvent('mana:automation-suggest', { detail: sug })); + }); + }, 0); + }); + + table.hook('updating', function (modifications, primKey) { + if (_applyingServerChanges) return; + const now = new Date().toISOString(); + const fields: Record = {}; + for (const [key, value] of Object.entries(modifications)) { + if (key === 'id') continue; + fields[key] = { value, updatedAt: now }; + } + pendingChangesTable.add({ + appId, + collection: tableName, + recordId: primKey as string, + op: (modifications as Record).deletedAt ? 'delete' : 'update', + fields, + deletedAt: (modifications as Record).deletedAt as string | undefined, + createdAt: now, + }); + const op = (modifications as Record).deletedAt ? 'delete' : 'update'; + fireTrigger(appId, tableName, op, modifications as Record); + }); + } +} diff --git a/apps/mana/apps/web/src/lib/data/time-blocks/index.ts b/apps/mana/apps/web/src/lib/data/time-blocks/index.ts new file mode 100644 index 000000000..515387a8f --- /dev/null +++ b/apps/mana/apps/web/src/lib/data/time-blocks/index.ts @@ -0,0 +1,16 @@ +export * from './types'; +export * from './collections'; +export * from './service'; +export * from './queries'; +export * from './analytics'; +export { generateICalendar, downloadICalendar } from './ical-export'; +export { + expandRule, + habitScheduleToRRule, + rruleToHabitSchedule, + materializeRecurringBlocks, + regenerateForBlock, + cleanupFutureInstances, + deleteAllInstances, + expandTemplatesVirtually, +} from './recurrence'; diff --git a/apps/mana/apps/web/src/lib/data/time-blocks/queries.ts b/apps/mana/apps/web/src/lib/data/time-blocks/queries.ts new file mode 100644 index 000000000..ea2d87f30 --- /dev/null +++ b/apps/mana/apps/web/src/lib/data/time-blocks/queries.ts @@ -0,0 +1,292 @@ +/** + * Reactive Queries & Pure Helpers for TimeBlocks. + * + * Uses Dexie liveQuery to automatically re-render when IndexedDB changes. + * Components call these hooks at init time; no manual fetch/refresh needed. + * + * Note: useLiveQueryWithDefault takes (querier, default) — no deps array. + * For parameterized queries, use raw liveQuery from Dexie instead. + */ + +import { liveQuery } from 'dexie'; +import { useLiveQueryWithDefault } from '@mana/local-store/svelte'; +import { db } from '$lib/data/database'; +import type { + LocalTimeBlock, + TimeBlock, + TimeBlockKind, + TimeBlockType, + TimeBlockSourceModule, +} from './types'; +import { isSameDay, isWithinInterval } from 'date-fns'; + +// ─── Type Converter ────────────────────────────────────── + +export function toTimeBlock(local: LocalTimeBlock): TimeBlock { + return { + id: local.id, + startDate: local.startDate, + endDate: local.endDate ?? null, + allDay: local.allDay, + isLive: local.isLive, + timezone: local.timezone ?? null, + recurrenceRule: local.recurrenceRule ?? null, + kind: local.kind, + type: local.type, + sourceModule: local.sourceModule, + sourceId: local.sourceId, + linkedBlockId: local.linkedBlockId ?? null, + parentBlockId: local.parentBlockId ?? null, + recurrenceDate: local.recurrenceDate ?? null, + isRecurrenceException: local.isRecurrenceException ?? false, + title: local.title, + description: local.description ?? null, + color: local.color ?? null, + icon: local.icon ?? null, + projectId: local.projectId ?? null, + createdAt: local.createdAt ?? new Date().toISOString(), + updatedAt: local.updatedAt ?? new Date().toISOString(), + }; +} + +// ─── Svelte 5 Reactive Hooks ───────────────────────────── + +/** All non-deleted timeBlocks. Auto-updates on change. */ +export function useAllTimeBlocks() { + return useLiveQueryWithDefault(async () => { + const locals = await db.table('timeBlocks').toArray(); + return locals.filter((b) => !b.deletedAt).map(toTimeBlock); + }, [] as TimeBlock[]); +} + +/** + * All non-deleted timeBlocks within a date range. + * Returns a raw Dexie liveQuery observable (use with $-subscribe in Svelte). + */ +export function timeBlocksInRange$(start: string, end: string) { + return liveQuery(async () => { + const locals = await db + .table('timeBlocks') + .where('startDate') + .between(start, end, true, true) + .toArray(); + return locals.filter((b) => !b.deletedAt).map(toTimeBlock); + }); +} + +/** TimeBlock(s) for a specific source record (raw observable). */ +export function timeBlocksBySource$(sourceModule: TimeBlockSourceModule, sourceId: string) { + return liveQuery(async () => { + const locals = await db + .table('timeBlocks') + .where('[sourceModule+sourceId]') + .equals([sourceModule, sourceId]) + .toArray(); + return locals.filter((b) => !b.deletedAt).map(toTimeBlock); + }); +} + +/** The currently live/running timeBlock (if any). */ +export function useLiveTimeBlock() { + return useLiveQueryWithDefault( + async () => { + // Can't index boolean in Dexie reliably, so scan and filter + const locals = await db.table('timeBlocks').toArray(); + const active = locals.find((b) => b.isLive && !b.deletedAt); + return active ? toTimeBlock(active) : null; + }, + null as TimeBlock | null + ); +} + +// ─── Pure Helpers ───────────────────────────────────────── + +/** Convert a date string or Date to a Date. */ +function toDate(dateStr: string | Date): Date { + return typeof dateStr === 'string' ? new Date(dateStr) : dateStr; +} + +/** Get timeBlocks for a specific day. */ +export function getBlocksForDay(blocks: TimeBlock[], date: Date): TimeBlock[] { + return blocks.filter((block) => { + const blockStart = toDate(block.startDate); + const blockEnd = block.endDate ? toDate(block.endDate) : blockStart; + + if (block.allDay) { + return ( + isWithinInterval(date, { start: blockStart, end: blockEnd }) || isSameDay(date, blockStart) + ); + } + + // Point events: match day of startDate + if (!block.endDate) { + return isSameDay(date, blockStart); + } + + // Range events: any overlap with the day + const dayStart = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0); + const dayEnd = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999); + return blockStart <= dayEnd && blockEnd >= dayStart; + }); +} + +/** Get timeBlocks within a time range. */ +export function getBlocksInRange(blocks: TimeBlock[], start: Date, end: Date): TimeBlock[] { + return blocks.filter((block) => { + const blockStart = toDate(block.startDate); + const blockEnd = block.endDate ? toDate(block.endDate) : blockStart; + return blockStart <= end && blockEnd >= start; + }); +} + +/** Sort timeBlocks by start time. */ +export function sortBlocksByTime(blocks: TimeBlock[]): TimeBlock[] { + return [...blocks].sort( + (a, b) => new Date(a.startDate).getTime() - new Date(b.startDate).getTime() + ); +} + +/** Filter timeBlocks by kind. */ +export function filterBlocksByKind(blocks: TimeBlock[], kind: TimeBlockKind): TimeBlock[] { + return blocks.filter((b) => b.kind === kind); +} + +/** Filter timeBlocks by type. */ +export function filterBlocksByType(blocks: TimeBlock[], type: TimeBlockType): TimeBlock[] { + return blocks.filter((b) => b.type === type); +} + +/** Filter timeBlocks by visible types (for calendar filter toggles). */ +export function filterBlocksByVisibleTypes( + blocks: TimeBlock[], + visibleTypes: Set +): TimeBlock[] { + return blocks.filter((b) => visibleTypes.has(b.type)); +} + +/** Find overlapping timeBlocks for a given range. */ +export function findOverlaps( + blocks: TimeBlock[], + start: string, + end: string, + excludeId?: string +): TimeBlock[] { + const rangeStart = new Date(start); + const rangeEnd = new Date(end); + + return blocks.filter((block) => { + if (block.id === excludeId) return false; + if (block.allDay) return false; + + const blockStart = new Date(block.startDate); + const blockEnd = block.endDate ? new Date(block.endDate) : blockStart; + return blockStart < rangeEnd && blockEnd > rangeStart; + }); +} + +/** Get the raw wall-clock duration in seconds (derived from start/end). */ +export function getBlockDuration(block: TimeBlock): number { + if (!block.endDate) return 0; + return Math.max( + 0, + (new Date(block.endDate).getTime() - new Date(block.startDate).getTime()) / 1000 + ); +} + +/** Find free time slots on a given day. */ +export function findFreeSlots( + blocks: TimeBlock[], + date: Date, + minDurationMinutes: number = 30, + workStart: number = 8, + workEnd: number = 18 +): { start: Date; end: Date; durationMinutes: number }[] { + // Get non-allday blocks for the day, sorted by start + const dayBlocks = getBlocksForDay(blocks, date) + .filter((b) => !b.allDay && b.endDate) + .sort((a, b) => new Date(a.startDate).getTime() - new Date(b.startDate).getTime()); + + const slots: { start: Date; end: Date; durationMinutes: number }[] = []; + const dayStart = new Date(date.getFullYear(), date.getMonth(), date.getDate(), workStart, 0, 0); + const dayEnd = new Date(date.getFullYear(), date.getMonth(), date.getDate(), workEnd, 0, 0); + + let cursor = dayStart; + + for (const block of dayBlocks) { + const blockStart = new Date(block.startDate); + const blockEnd = new Date(block.endDate!); + + // Skip blocks outside working hours + if (blockEnd <= dayStart || blockStart >= dayEnd) continue; + + const effectiveStart = blockStart < dayStart ? dayStart : blockStart; + + if (cursor < effectiveStart) { + const gapMinutes = (effectiveStart.getTime() - cursor.getTime()) / 60000; + if (gapMinutes >= minDurationMinutes) { + slots.push({ + start: new Date(cursor), + end: effectiveStart, + durationMinutes: Math.round(gapMinutes), + }); + } + } + + const effectiveEnd = blockEnd > dayEnd ? dayEnd : blockEnd; + if (effectiveEnd > cursor) { + cursor = effectiveEnd; + } + } + + // Gap after last block until end of work + if (cursor < dayEnd) { + const gapMinutes = (dayEnd.getTime() - cursor.getTime()) / 60000; + if (gapMinutes >= minDurationMinutes) { + slots.push({ start: new Date(cursor), end: dayEnd, durationMinutes: Math.round(gapMinutes) }); + } + } + + return slots; +} + +/** Find the next free slot across multiple days. */ +export function findNextFreeSlot( + blocks: TimeBlock[], + minDurationMinutes: number = 60, + daysToSearch: number = 7, + workStart: number = 8, + workEnd: number = 18 +): { start: Date; end: Date; durationMinutes: number } | null { + const today = new Date(); + for (let d = 0; d < daysToSearch; d++) { + const date = new Date(today); + date.setDate(date.getDate() + d); + const slots = findFreeSlots(blocks, date, minDurationMinutes, workStart, workEnd); + if (slots.length > 0) { + // For today, skip slots that have already started + if (d === 0) { + const now = new Date(); + const validSlot = slots.find((s) => s.start >= now); + if (validSlot) return validSlot; + } else { + return slots[0]; + } + } + } + return null; +} + +/** Group timeBlocks by date string (YYYY-MM-DD). */ +export function groupBlocksByDate(blocks: TimeBlock[]): Map { + const map = new Map(); + for (const block of blocks) { + const dateKey = block.startDate.split('T')[0]; + const group = map.get(dateKey); + if (group) { + group.push(block); + } else { + map.set(dateKey, [block]); + } + } + return map; +} diff --git a/apps/mana/apps/web/src/lib/data/time-blocks/recurrence.ts b/apps/mana/apps/web/src/lib/data/time-blocks/recurrence.ts new file mode 100644 index 000000000..eec526d3d --- /dev/null +++ b/apps/mana/apps/web/src/lib/data/time-blocks/recurrence.ts @@ -0,0 +1,317 @@ +/** + * Unified Recurrence Engine — RRULE expansion + materialization. + * + * One system for all modules: Calendar events, Tasks, Habits. + * Uses rrule.js for RFC 5545 RRULE expansion. + * + * Hybrid approach: + * - Materialized: real TimeBlocks for the next 30 days (stored in DB) + * - Virtual: on-the-fly expansion for calendar views beyond 30 days + */ + +import { RRule } from 'rrule'; +import { db } from '$lib/data/database'; +import { timeBlockTable } from './collections'; +import { createBlock, deleteBlock } from './service'; +import type { LocalTimeBlock } from './types'; +import type { HabitSchedule } from '$lib/modules/habits/types'; + +// ─── RRULE Expansion ───────────────────────────────────── + +/** Expand an RRULE string to concrete dates within a range. */ +export function expandRule(rruleStr: string, dtstart: Date, rangeStart: Date, rangeEnd: Date): Date[] { + const rule = RRule.fromString(`DTSTART:${formatRRuleDate(dtstart)}\n${rruleStr}`); + return rule.between(rangeStart, rangeEnd, true); +} + +/** Format a Date for RRULE DTSTART (YYYYMMDDTHHMMSSZ). */ +function formatRRuleDate(date: Date): string { + return date.toISOString().replace(/[-:]/g, '').replace(/\.\d{3}/, ''); +} + +// ─── HabitSchedule ↔ RRULE Conversion ──────────────────── + +const DAY_MAP: Record = { + 0: 'SU', + 1: 'MO', + 2: 'TU', + 3: 'WE', + 4: 'TH', + 5: 'FR', + 6: 'SA', +}; + +const REVERSE_DAY_MAP: Record = { + SU: 0, + MO: 1, + TU: 2, + WE: 3, + TH: 4, + FR: 5, + SA: 6, +}; + +/** Convert a HabitSchedule to an RRULE string. */ +export function habitScheduleToRRule(schedule: HabitSchedule): string { + if (schedule.days.length === 7) return 'RRULE:FREQ=DAILY'; + const byDay = schedule.days.map((d) => DAY_MAP[d]).join(','); + return `RRULE:FREQ=WEEKLY;BYDAY=${byDay}`; +} + +/** Convert an RRULE string back to a HabitSchedule (best-effort). */ +export function rruleToHabitSchedule(rrule: string): HabitSchedule | null { + const clean = rrule.replace(/^RRULE:/, ''); + if (clean.includes('FREQ=DAILY')) { + return { days: [0, 1, 2, 3, 4, 5, 6] }; + } + const byDayMatch = clean.match(/BYDAY=([A-Z,]+)/); + if (!byDayMatch) return null; + const days = byDayMatch[1].split(',').map((d) => REVERSE_DAY_MAP[d]).filter((d) => d !== undefined); + return { days: days.sort() }; +} + +// ─── Materialization ───────────────────────────────────── + +/** + * Materialize recurring TimeBlocks for the next N days. + * Creates real instances in the DB for each occurrence. + * Skips existing instances and exceptions. + */ +export async function materializeRecurringBlocks(daysAhead: number = 30): Promise { + const allBlocks = await timeBlockTable.toArray(); + + // Find "template" blocks: have recurrenceRule, no parentBlockId (not instances themselves) + const templates = allBlocks.filter( + (b) => b.recurrenceRule && !b.deletedAt && !b.parentBlockId + ); + + if (templates.length === 0) return 0; + + const today = new Date(); + today.setHours(0, 0, 0, 0); + const horizon = new Date(today); + horizon.setDate(horizon.getDate() + daysAhead); + + // Build set of existing instances to avoid duplicates + const existingInstances = allBlocks.filter((b) => b.parentBlockId && !b.deletedAt); + const existingKeys = new Set( + existingInstances.map((b) => `${b.parentBlockId}|${b.recurrenceDate}`) + ); + + let created = 0; + + for (const template of templates) { + const dtstart = new Date(template.startDate); + const rruleStr = template.recurrenceRule!.replace(/^RRULE:/, ''); + let dates: Date[]; + + try { + dates = expandRule(`RRULE:${rruleStr}`, dtstart, today, horizon); + } catch { + continue; // Skip invalid rules + } + + // Calculate duration from template + const templateDurationMs = template.endDate + ? new Date(template.endDate).getTime() - new Date(template.startDate).getTime() + : 3600000; // default 1h + + // Extract time from template + const templateHours = dtstart.getHours(); + const templateMinutes = dtstart.getMinutes(); + + for (const date of dates) { + const dateStr = date.toISOString().split('T')[0]; + const key = `${template.id}|${dateStr}`; + + if (existingKeys.has(key)) continue; + + // Set time from template + const instanceStart = new Date(date); + instanceStart.setHours(templateHours, templateMinutes, 0, 0); + const instanceEnd = new Date(instanceStart.getTime() + templateDurationMs); + + await createBlock({ + startDate: instanceStart.toISOString(), + endDate: instanceEnd.toISOString(), + allDay: template.allDay, + kind: template.kind, + type: template.type, + sourceModule: template.sourceModule, + sourceId: template.sourceId, + title: template.title, + description: template.description ?? null, + color: template.color ?? null, + icon: template.icon ?? null, + projectId: template.projectId ?? null, + recurrenceRule: null, // instances don't have their own rule + }); + + // Set parentBlockId and recurrenceDate on the created block + // (createBlock doesn't support these fields directly, so update after) + const lastBlock = (await timeBlockTable.orderBy('createdAt').last())!; + await timeBlockTable.update(lastBlock.id, { + parentBlockId: template.id, + recurrenceDate: dateStr, + } as Partial); + + existingKeys.add(key); + created++; + } + } + + return created; +} + +/** + * Regenerate instances for a specific recurring block after rule change. + * Deletes future non-exception instances and re-materializes. + */ +export async function regenerateForBlock( + templateBlockId: string, + daysAhead: number = 30 +): Promise { + // Delete future non-exception instances + await cleanupFutureInstances(templateBlockId); + // Re-materialize + await materializeRecurringBlocks(daysAhead); +} + +/** + * Delete future instances of a recurring block (preserving exceptions). + */ +export async function cleanupFutureInstances(templateBlockId: string): Promise { + const today = new Date().toISOString().split('T')[0]; + const instances = await timeBlockTable + .where('parentBlockId') + .equals(templateBlockId) + .toArray(); + + for (const instance of instances) { + if (instance.deletedAt) continue; + if ((instance as Record).isRecurrenceException) continue; + if (instance.recurrenceDate && instance.recurrenceDate >= today) { + await deleteBlock(instance.id); + } + } +} + +/** + * Delete all instances of a recurring block (including exceptions). + * Used when deleting the recurring event entirely. + */ +export async function deleteAllInstances(templateBlockId: string): Promise { + const instances = await timeBlockTable + .where('parentBlockId') + .equals(templateBlockId) + .toArray(); + + for (const instance of instances) { + if (!instance.deletedAt) { + await deleteBlock(instance.id); + } + } +} + +// ─── Virtual Expansion (for calendar views >30 days) ───── + +export interface VirtualTimeBlock { + id: string; // synthetic: {parentId}__recurrence__{date} + parentBlockId: string; + recurrenceDate: string; + startDate: string; + endDate: string | null; + allDay: boolean; + isLive: false; + kind: string; + type: string; + sourceModule: string; + sourceId: string; + title: string; + description: string | null; + color: string | null; + icon: string | null; + projectId: string | null; + recurrenceRule: string | null; + linkedBlockId: null; + isVirtual: true; + createdAt: string; + updatedAt: string; +} + +/** + * Expand recurring templates into virtual blocks for a date range. + * Only generates blocks that don't already exist as materialized instances. + */ +export function expandTemplatesVirtually( + templates: LocalTimeBlock[], + existingBlocks: LocalTimeBlock[], + rangeStart: string, + rangeEnd: string +): VirtualTimeBlock[] { + const existingKeys = new Set( + existingBlocks + .filter((b) => b.parentBlockId) + .map((b) => `${b.parentBlockId}|${(b as Record).recurrenceDate}`) + ); + + const virtuals: VirtualTimeBlock[] = []; + const start = new Date(rangeStart); + const end = new Date(rangeEnd); + + for (const template of templates) { + if (!template.recurrenceRule || template.deletedAt) continue; + + const dtstart = new Date(template.startDate); + const rruleStr = template.recurrenceRule.replace(/^RRULE:/, ''); + let dates: Date[]; + + try { + dates = expandRule(`RRULE:${rruleStr}`, dtstart, start, end); + } catch { + continue; + } + + const durationMs = template.endDate + ? new Date(template.endDate).getTime() - dtstart.getTime() + : 3600000; + const templateHours = dtstart.getHours(); + const templateMinutes = dtstart.getMinutes(); + + for (const date of dates) { + const dateStr = date.toISOString().split('T')[0]; + const key = `${template.id}|${dateStr}`; + if (existingKeys.has(key)) continue; + + const instanceStart = new Date(date); + instanceStart.setHours(templateHours, templateMinutes, 0, 0); + const instanceEnd = new Date(instanceStart.getTime() + durationMs); + + virtuals.push({ + id: `${template.id}__recurrence__${dateStr}`, + parentBlockId: template.id, + recurrenceDate: dateStr, + startDate: instanceStart.toISOString(), + endDate: instanceEnd.toISOString(), + allDay: template.allDay, + isLive: false, + kind: template.kind, + type: template.type, + sourceModule: template.sourceModule, + sourceId: template.sourceId, + title: template.title, + description: template.description ?? null, + color: template.color ?? null, + icon: template.icon ?? null, + projectId: template.projectId ?? null, + recurrenceRule: template.recurrenceRule, + linkedBlockId: null, + isVirtual: true, + createdAt: template.createdAt ?? new Date().toISOString(), + updatedAt: template.updatedAt ?? new Date().toISOString(), + }); + } + } + + return virtuals; +} diff --git a/apps/mana/apps/web/src/lib/data/time-blocks/types.ts b/apps/mana/apps/web/src/lib/data/time-blocks/types.ts new file mode 100644 index 000000000..d2358387f --- /dev/null +++ b/apps/mana/apps/web/src/lib/data/time-blocks/types.ts @@ -0,0 +1,118 @@ +/** + * Unified Time Model — TimeBlock types. + * + * A TimeBlock represents any time interval across all modules. + * Domain-specific data stays on each module's tables; the TimeBlock + * owns the time dimension (start, end, recurrence, live status). + */ + +import type { BaseRecord } from '@mana/local-store'; + +// ─── Enums ─────────────────────────────────────────────── + +export type TimeBlockKind = 'scheduled' | 'logged'; + +export type TimeBlockType = 'event' | 'task' | 'habit' | 'timeEntry' | 'focus' | 'break'; + +export type TimeBlockSourceModule = 'calendar' | 'todo' | 'times' | 'habits'; + +// ─── Local Record Types (Dexie) ────────────────────────── + +export interface LocalTimeBlock extends BaseRecord { + // Time + startDate: string; // ISO — always set + endDate: string | null; // ISO — null = point-event or live timer + allDay: boolean; + isLive: boolean; // timer/tracking currently running + timezone?: string | null; + recurrenceRule?: string | null; + + // Classification + kind: TimeBlockKind; + type: TimeBlockType; + + // Link to source module + sourceModule: TimeBlockSourceModule; + sourceId: string; + linkedBlockId?: string | null; // scheduled → logged link + + // Recurrence instance fields + parentBlockId?: string | null; // ID of the recurring "template" block + recurrenceDate?: string | null; // YYYY-MM-DD this instance represents + isRecurrenceException?: boolean; // user manually edited this instance + + // Display (denormalized for calendar rendering without joins) + title: string; + description?: string | null; + color?: string | null; + icon?: string | null; + projectId?: string | null; +} + +export interface LocalTimeBlockTag extends BaseRecord { + blockId: string; + tagId: string; +} + +// ─── Domain Types (returned by queries, used by UI) ────── + +export interface TimeBlock { + id: string; + startDate: string; + endDate: string | null; + allDay: boolean; + isLive: boolean; + timezone: string | null; + recurrenceRule: string | null; + kind: TimeBlockKind; + type: TimeBlockType; + sourceModule: TimeBlockSourceModule; + sourceId: string; + linkedBlockId: string | null; + parentBlockId: string | null; + recurrenceDate: string | null; + isRecurrenceException: boolean; + title: string; + description: string | null; + color: string | null; + icon: string | null; + projectId: string | null; + createdAt: string; + updatedAt: string; +} + +// ─── Input Types ───────────────────────────────────────── + +export interface CreateTimeBlockInput { + startDate: string; + endDate?: string | null; + allDay?: boolean; + isLive?: boolean; + timezone?: string | null; + recurrenceRule?: string | null; + kind: TimeBlockKind; + type: TimeBlockType; + sourceModule: TimeBlockSourceModule; + sourceId: string; + linkedBlockId?: string | null; + title: string; + description?: string | null; + color?: string | null; + icon?: string | null; + projectId?: string | null; +} + +export interface UpdateTimeBlockInput { + startDate?: string; + endDate?: string | null; + allDay?: boolean; + isLive?: boolean; + timezone?: string | null; + recurrenceRule?: string | null; + linkedBlockId?: string | null; + title?: string; + description?: string | null; + color?: string | null; + icon?: string | null; + projectId?: string | null; +} diff --git a/apps/mana/apps/web/src/lib/modules/calendar/components/EventCard.svelte b/apps/mana/apps/web/src/lib/modules/calendar/components/EventCard.svelte new file mode 100644 index 000000000..d33aa4046 --- /dev/null +++ b/apps/mana/apps/web/src/lib/modules/calendar/components/EventCard.svelte @@ -0,0 +1,352 @@ + + +
+ {#if onResizeStart} +
+ {/if} + +
+ + {#if event.blockType === 'task'} + + {:else if event.blockType === 'timeEntry'} + + {:else if event.blockType === 'habit' && habitIconComponent} + + + + {:else if event.blockType === 'focus'} + + {/if} + + {formattedTime} + {#if event.parentBlockId} + + {/if} + {#if event.linkedBlockId} + + {/if} +
+ {event.title || (isDraft ? 'Neuer Termin' : '')} + {#if event.location} + {event.location} + {/if} + + {#if onResizeStart} +
+ {/if} +
+ + diff --git a/apps/mana/apps/web/src/lib/modules/calendar/types.ts b/apps/mana/apps/web/src/lib/modules/calendar/types.ts new file mode 100644 index 000000000..71d61fd37 --- /dev/null +++ b/apps/mana/apps/web/src/lib/modules/calendar/types.ts @@ -0,0 +1,111 @@ +/** + * Calendar module types for the unified Mana app. + * + * Time fields (startDate, endDate, allDay, recurrenceRule) live on TimeBlock. + * LocalEvent only stores calendar-domain data + a timeBlockId reference. + */ + +import type { BaseRecord } from '@mana/local-store'; +import type { TimeBlock, TimeBlockType } from '$lib/data/time-blocks/types'; + +export interface LocalCalendar extends BaseRecord { + name: string; + color: string; + isDefault: boolean; + isVisible: boolean; + timezone: string; +} + +export interface LocalEvent extends BaseRecord { + calendarId: string; + timeBlockId: string; + title: string; + description?: string | null; + location?: string | null; + color?: string | null; + reminders?: unknown | null; + tagIds?: string[]; +} + +export type CalendarViewType = 'week' | 'month' | 'agenda'; + +/** + * CalendarEvent — the UI-facing type used by all calendar components. + * Combines LocalEvent domain data with TimeBlock time data. + */ +export interface CalendarEvent { + id: string; + calendarId: string; + timeBlockId: string; + title: string; + description: string | null; + location: string | null; + startTime: string; + endTime: string; + isAllDay: boolean; + timezone: string | null; + recurrenceRule: string | null; + parentEventId: string | null; + color: string | null; + tagIds: string[]; + createdAt: string; + updatedAt: string; + // TimeBlock metadata (for universal calendar view) + blockType: TimeBlockType; + sourceModule: string; + sourceId: string; + icon: string | null; + isLive: boolean; + projectId: string | null; + linkedBlockId: string | null; + parentBlockId: string | null; + recurrenceRule: string | null; +} + +export interface Calendar { + id: string; + name: string; + color: string; + isDefault: boolean; + isVisible: boolean; + timezone: string; + createdAt: string; + updatedAt: string; +} + +/** + * Construct a CalendarEvent from a TimeBlock. + * For native calendar events, also merges LocalEvent domain data. + * For cross-module blocks (tasks, habits, time entries), uses TimeBlock display fields. + */ +export function timeBlockToCalendarEvent( + block: TimeBlock, + eventData?: LocalEvent | null +): CalendarEvent { + return { + id: eventData?.id ?? block.sourceId, + calendarId: eventData?.calendarId ?? '__external__', + timeBlockId: block.id, + title: eventData?.title ?? block.title, + description: eventData?.description ?? block.description ?? null, + location: eventData?.location ?? null, + startTime: block.startDate, + endTime: block.endDate ?? block.startDate, + isAllDay: block.allDay, + timezone: block.timezone, + recurrenceRule: block.recurrenceRule, + parentEventId: null, + color: eventData?.color ?? block.color, + tagIds: eventData?.tagIds ?? [], + createdAt: block.createdAt, + updatedAt: block.updatedAt, + blockType: block.type, + sourceModule: block.sourceModule, + sourceId: block.sourceId, + icon: block.icon, + isLive: block.isLive, + projectId: block.projectId, + linkedBlockId: block.linkedBlockId, + parentBlockId: block.parentBlockId, + }; +} diff --git a/apps/mana/apps/web/src/lib/modules/todo/types.ts b/apps/mana/apps/web/src/lib/modules/todo/types.ts new file mode 100644 index 000000000..b20bcc6a5 --- /dev/null +++ b/apps/mana/apps/web/src/lib/modules/todo/types.ts @@ -0,0 +1,124 @@ +/** + * Todo module types for the unified app. + */ + +import type { BaseRecord } from '@mana/local-store'; +import type { Tag } from '@mana/shared-tags'; + +/** @deprecated Use Tag from @mana/shared-tags. Kept for backward compatibility. */ +export type LocalLabel = Tag; + +// ─── Local Types (IndexedDB) ────────────────────────────── + +export interface Subtask { + id: string; + title: string; + isCompleted: boolean; + completedAt?: string | null; + order: number; +} + +export type TaskPriority = 'low' | 'medium' | 'high' | 'urgent'; +export type TaskStatus = 'pending' | 'in_progress' | 'completed' | 'cancelled'; + +export interface LocalTask extends BaseRecord { + title: string; + description?: string; + userId?: string; + projectId?: string | null; + priority: TaskPriority; + isCompleted: boolean; + completedAt?: string | null; + dueDate?: string | null; + scheduledBlockId?: string | null; // TimeBlock ID when task is scheduled on calendar + estimatedDuration?: number | null; + order: number; + // recurrenceRule lives on the TimeBlock (via scheduledBlockId) + subtasks?: Subtask[] | null; + metadata?: Record; +} + +export interface LocalTaskTag extends BaseRecord { + taskId: string; + tagId: string; +} + +export interface LocalReminder extends BaseRecord { + taskId: string; + userId?: string; + minutesBefore: number; + type: 'push' | 'email' | 'both'; + status: 'pending' | 'sent' | 'failed'; +} + +// ─── Board Views ──────────────────────────────────────────── + +export interface TaskMatcher { + type: 'status' | 'priority' | 'tag' | 'dueDate' | 'custom'; + value?: string | null; + taskIds?: string[]; +} + +export interface DropAction { + setCompleted?: boolean; + setPriority?: TaskPriority; +} + +export interface ViewColumn { + id: string; + name: string; + color: string; + match: TaskMatcher; + onDrop?: DropAction; +} + +export interface ViewFilter { + tagIds?: string[]; + priorities?: string[]; +} + +export interface LocalBoardView extends BaseRecord { + name: string; + icon: string; + groupBy: 'status' | 'priority' | 'dueDate' | 'tag' | 'custom'; + columns: ViewColumn[]; + filter?: ViewFilter; + layout: 'kanban' | 'grid' | 'fokus'; + order: number; +} + +export interface LocalTodoProject extends BaseRecord { + name: string; + color?: string | null; + icon?: string | null; + order: number; + isArchived?: boolean; + isDefault?: boolean; +} + +// ─── Shared Task Type ────────────────────────────────────── + +export interface Task { + id: string; + projectId?: string | null; + userId: string; + title: string; + description?: string | null; + dueDate?: string | null; + scheduledBlockId?: string | null; + estimatedDuration?: number | null; + priority: TaskPriority; + status: TaskStatus; + isCompleted: boolean; + completedAt?: string | null; + order: number; + // recurrenceRule lives on the TimeBlock (via scheduledBlockId) + subtasks?: Subtask[] | null; + metadata?: Record | null; + createdAt: string; + updatedAt: string; +} + +export type ViewType = 'inbox' | 'today' | 'upcoming' | 'label' | 'completed' | 'search'; +export type SortBy = 'dueDate' | 'priority' | 'title' | 'createdAt' | 'order'; +export type SortOrder = 'asc' | 'desc'; diff --git a/apps/mana/apps/web/src/routes/(app)/calendar/+layout.svelte b/apps/mana/apps/web/src/routes/(app)/calendar/+layout.svelte new file mode 100644 index 000000000..45e889e79 --- /dev/null +++ b/apps/mana/apps/web/src/routes/(app)/calendar/+layout.svelte @@ -0,0 +1,28 @@ + + +{@render children()} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30ad83d9f..4b8f66792 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: '@eslint/js': specifier: ^9.39.1 version: 9.39.1 - '@manacore/eslint-config': + '@mana/eslint-config': specifier: workspace:* version: link:packages/eslint-config concurrently: @@ -64,13 +64,13 @@ importers: apps/api: dependencies: - '@manacore/media-client': + '@mana/media-client': specifier: workspace:* version: link:../../services/mana-media/packages/client - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../packages/shared-hono - '@manacore/shared-storage': + '@mana/shared-storage': specifier: workspace:* version: link:../../packages/shared-storage '@mozilla/readability': @@ -110,74 +110,74 @@ importers: '@calc/shared': specifier: workspace:* version: link:../../packages/shared - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions svelte-i18n: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -240,7 +240,7 @@ importers: '@astrojs/check': specifier: ^0.9.0 version: 0.9.5(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3) - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui astro: @@ -283,7 +283,7 @@ importers: apps/calendar/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono hono: @@ -305,76 +305,76 @@ importers: '@calendar/shared': specifier: workspace:* version: link:../../packages/shared - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-links': + '@mana/shared-links': specifier: workspace:* version: link:../../../../packages/shared-links - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-splitscreen': + '@mana/shared-splitscreen': specifier: workspace:* version: link:../../../../packages/shared-splitscreen - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions '@neodrag/svelte': @@ -399,10 +399,10 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@playwright/test': @@ -480,7 +480,7 @@ importers: '@astrojs/sitemap': specifier: ^3.2.1 version: 3.7.2 - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui astro: @@ -511,7 +511,7 @@ importers: '@expo/vector-icons': specifier: ^15.0.2 version: 15.0.3(expo-font@14.0.10)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth '@react-native-async-storage/async-storage': @@ -662,7 +662,7 @@ importers: apps/cards/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono hono: @@ -675,80 +675,80 @@ importers: apps/cards/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-config': + '@mana/shared-config': specifier: workspace:* version: link:../../../../packages/shared-config - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions svelte-i18n: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -801,7 +801,7 @@ importers: '@astrojs/sitemap': specifier: ^3.2.1 version: 3.6.0 - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui astro: @@ -935,7 +935,7 @@ importers: apps/chat/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono drizzle-orm: @@ -957,67 +957,67 @@ importers: '@chat/types': specifier: workspace:* version: link:../../packages/chat-types - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions marked: @@ -1027,10 +1027,10 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-auto': @@ -1101,68 +1101,68 @@ importers: apps/citycorners/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils svelte-i18n: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -1216,7 +1216,7 @@ importers: '@astrojs/check': specifier: ^0.9.0 version: 0.9.8(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3) - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui astro: @@ -1259,10 +1259,10 @@ importers: apps/contacts/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono - '@manacore/shared-storage': + '@mana/shared-storage': specifier: workspace:* version: link:../../../../packages/shared-storage hono: @@ -1278,76 +1278,76 @@ importers: apps/contacts/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-links': + '@mana/shared-links': specifier: workspace:* version: link:../../../../packages/shared-links - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-splitscreen': + '@mana/shared-splitscreen': specifier: workspace:* version: link:../../../../packages/shared-splitscreen - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/spiral-db': + '@mana/spiral-db': specifier: workspace:^ version: link:../../../../packages/spiral-db - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions date-fns: @@ -1357,10 +1357,10 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@playwright/test': @@ -1416,7 +1416,7 @@ importers: '@expo/vector-icons': specifier: ^14.0.0 version: 14.1.0(expo-font@14.0.10)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth '@react-native-async-storage/async-storage': @@ -1546,7 +1546,7 @@ importers: apps/context/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono drizzle-orm: @@ -1565,77 +1565,77 @@ importers: apps/context/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions svelte-i18n: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -1723,7 +1723,7 @@ importers: apps/guides/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono hono: @@ -1739,71 +1739,71 @@ importers: apps/guides/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -1866,49 +1866,49 @@ importers: '@inventar/shared': specifier: workspace:* version: link:../../packages/shared - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions date-fns: @@ -1918,10 +1918,10 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -1963,7 +1963,7 @@ importers: apps/inventar/packages/shared: dependencies: - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types devDependencies: @@ -1971,7 +1971,355 @@ importers: specifier: ^5.9.3 version: 5.9.3 - apps/manacore/apps/landing: + apps/mana/apps/landing: + dependencies: + '@astrojs/react': + specifier: ^3.6.0 + version: 3.6.3(@types/node@24.10.1)(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(lightningcss@1.30.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.44.1) + '@astrojs/tailwind': + specifier: ^5.1.0 + version: 5.1.5(astro@5.18.1(@azure/storage-blob@12.31.0)(@netlify/blobs@10.7.4)(@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.3))(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.3))(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + '@iconify-json/heroicons': + specifier: ^1.2.2 + version: 1.2.3 + '@iconify-json/mdi': + specifier: ^1.2.3 + version: 1.2.3 + '@iconify-json/ph': + specifier: ^1.2.2 + version: 1.2.2 + '@iconify-json/tabler': + specifier: ^1.2.19 + version: 1.2.23 + '@mana/shared-landing-ui': + specifier: workspace:* + version: link:../../../../packages/shared-landing-ui + astro: + specifier: ^5.16.0 + version: 5.18.1(@azure/storage-blob@12.31.0)(@netlify/blobs@10.7.4)(@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.3) + astro-icon: + specifier: ^1.1.5 + version: 1.1.5 + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + devDependencies: + '@tailwindcss/typography': + specifier: ^0.5.16 + version: 0.5.19(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.3)) + '@types/react': + specifier: ^18.3.3 + version: 18.3.27 + '@types/react-dom': + specifier: ^18.3.7 + version: 18.3.7(@types/react@18.3.27) + tailwindcss: + specifier: ^3.4.0 + version: 3.4.18(tsx@4.21.0)(yaml@2.8.3) + + apps/mana/apps/mobile: + dependencies: + '@expo/vector-icons': + specifier: ^15.0.3 + version: 15.0.3(expo-font@55.0.4(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + '@mana/shared-auth': + specifier: workspace:* + version: link:../../../../packages/shared-auth + '@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.1.17)(react@19.2.0)) + '@react-navigation/bottom-tabs': + specifier: ^7.0.5 + version: 7.15.5(@react-navigation/native@7.1.33(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(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.1.17)(react@19.2.0))(react@19.2.0))(react-native-screens@4.16.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + '@react-navigation/drawer': + specifier: ^7.0.0 + version: 7.7.4(@react-navigation/native@7.1.33(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native-gesture-handler@2.28.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.7.4(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(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.1.17)(react@19.2.0))(react@19.2.0))(react-native-screens@4.16.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + '@react-navigation/native': + specifier: ^7.0.3 + version: 7.1.33(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + expo: + specifier: ~55.0.5 + version: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.7)(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.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo-constants: + specifier: ~55.0.7 + version: 55.0.7(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(typescript@5.9.3) + expo-dev-client: + specifier: ^6.0.13 + version: 6.0.18(expo@55.0.5) + expo-dev-launcher: + specifier: ^6.0.13 + version: 6.0.18(expo@55.0.5) + expo-linking: + specifier: ~55.0.7 + version: 55.0.7(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo-router: + specifier: ~55.0.5 + version: 55.0.5(5icniyqiujqmci35vezit5ovei) + expo-secure-store: + specifier: ~55.0.8 + version: 55.0.8(expo@55.0.5) + expo-status-bar: + specifier: ~55.0.4 + version: 55.0.4(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + expo-system-ui: + specifier: ~55.0.9 + 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.1.17)(react@19.2.0)) + expo-web-browser: + specifier: ~55.0.9 + version: 55.0.9(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0)) + nativewind: + specifier: ~4.2.3 + version: 4.2.3(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.7.4(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(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.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0)(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.3)) + 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.1.17)(react@19.2.0) + react-native-gesture-handler: + specifier: ~2.28.0 + version: 2.28.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + react-native-reanimated: + specifier: ~4.1.5 + version: 4.1.5(@babel/core@7.28.5)(react-native-worklets@0.7.4(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + react-native-safe-area-context: + specifier: ~5.6.0 + version: 5.6.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + react-native-screens: + specifier: ~4.16.0 + version: 4.16.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(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) + devDependencies: + '@babel/core': + specifier: ^7.20.0 + version: 7.28.5 + '@types/react': + specifier: ~19.1.0 + version: 19.1.17 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.1.17) + '@typescript-eslint/eslint-plugin': + specifier: ^7.7.0 + version: 7.18.0(@typescript-eslint/parser@7.18.0(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: ^7.7.0 + version: 7.18.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + eslint: + specifier: ^9.39.1 + version: 9.39.1(jiti@2.6.1) + eslint-config-universe: + specifier: ^12.0.1 + version: 12.1.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.2.5 + version: 3.6.2 + prettier-plugin-tailwindcss: + specifier: ^0.5.11 + version: 0.5.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.3) + typescript: + specifier: ~5.9.3 + version: 5.9.3 + + apps/mana/apps/web: + dependencies: + '@calc/shared': + specifier: workspace:* + version: link:../../../calc/packages/shared + '@mana/credits': + specifier: workspace:^ + version: link:../../../../packages/credits + '@mana/feedback': + specifier: workspace:* + version: link:../../../../packages/feedback + '@mana/help': + specifier: workspace:* + version: link:../../../../packages/help + '@mana/local-llm': + specifier: workspace:* + version: link:../../../../packages/local-llm + '@mana/local-store': + specifier: workspace:* + version: link:../../../../packages/local-store + '@mana/qr-export': + specifier: workspace:* + version: link:../../../../packages/qr-export + '@mana/shared-auth': + specifier: workspace:* + version: link:../../../../packages/shared-auth + '@mana/shared-auth-ui': + specifier: workspace:* + version: link:../../../../packages/shared-auth-ui + '@mana/shared-branding': + specifier: workspace:* + version: link:../../../../packages/shared-branding + '@mana/shared-config': + specifier: workspace:* + version: link:../../../../packages/shared-config + '@mana/shared-error-tracking': + specifier: workspace:* + version: link:../../../../packages/shared-error-tracking + '@mana/shared-i18n': + specifier: workspace:* + version: link:../../../../packages/shared-i18n + '@mana/shared-icons': + specifier: workspace:* + version: link:../../../../packages/shared-icons + '@mana/shared-links': + specifier: workspace:* + version: link:../../../../packages/shared-links + '@mana/shared-stores': + specifier: workspace:* + version: link:../../../../packages/shared-stores + '@mana/shared-tags': + specifier: workspace:* + version: link:../../../../packages/shared-tags + '@mana/shared-tailwind': + specifier: workspace:* + version: link:../../../../packages/shared-tailwind + '@mana/shared-theme': + specifier: workspace:* + version: link:../../../../packages/shared-theme + '@mana/shared-theme-ui': + specifier: workspace:* + version: link:../../../../packages/shared-theme-ui + '@mana/shared-types': + specifier: workspace:* + version: link:../../../../packages/shared-types + '@mana/shared-ui': + specifier: workspace:* + version: link:../../../../packages/shared-ui + '@mana/shared-uload': + specifier: workspace:* + version: link:../../../../packages/shared-uload + '@mana/shared-utils': + specifier: workspace:* + version: link:../../../../packages/shared-utils + '@mana/spiral-db': + specifier: workspace:* + version: link:../../../../packages/spiral-db + '@mana/subscriptions': + specifier: workspace:* + version: link:../../../../packages/subscriptions + '@mana/wallpaper-generator': + specifier: workspace:* + version: link:../../../../packages/wallpaper-generator + '@types/suncalc': + specifier: ^1.9.2 + version: 1.9.2 + '@zitare/content': + specifier: workspace:* + version: link:../../../zitare/packages/content + date-fns: + specifier: ^4.1.0 + version: 4.1.0 + dexie: + specifier: ^4.0.11 + version: 4.4.1 + marked: + specifier: ^17.0.5 + version: 17.0.5 + rrule: + specifier: ^2.8.1 + version: 2.8.1 + suncalc: + specifier: ^1.9.0 + version: 1.9.0 + svelte-dnd-action: + specifier: ^0.9.68 + version: 0.9.68(svelte@5.44.0) + svelte-i18n: + specifier: ^4.0.0 + version: 4.0.1(svelte@5.44.0) + svelte-sonner: + specifier: ^1.0.5 + version: 1.1.0(svelte@5.44.0) + devDependencies: + '@mana/shared-pwa': + specifier: workspace:* + version: link:../../../../packages/shared-pwa + '@mana/shared-vite-config': + specifier: workspace:* + version: link:../../../../packages/shared-vite-config + '@playwright/test': + specifier: ^1.51.0 + version: 1.57.0 + '@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@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + '@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@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/vite-plugin-svelte': + specifier: ^5.0.4 + version: 5.1.1(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@tailwindcss/typography': + specifier: ^0.5.19 + version: 0.5.19(tailwindcss@4.1.17) + '@tailwindcss/vite': + specifier: ^4.1.7 + version: 4.1.17(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@types/node': + specifier: ^22.10.5 + version: 22.19.1 + '@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@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.44.0)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.4.0(@types/babel__core@7.20.5))(workbox-window@7.4.0) + '@vitest/coverage-v8': + specifier: ^4.0.14 + version: 4.0.14(vitest@4.1.2) + '@vitest/ui': + specifier: ^4.0.14 + version: 4.0.14(vitest@4.1.2) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.22(postcss@8.5.8) + postcss: + specifier: ^8.4.49 + version: 8.5.8 + prettier: + specifier: ^3.4.2 + version: 3.6.2 + prettier-plugin-svelte: + specifier: ^3.3.2 + version: 3.4.0(prettier@3.6.2)(svelte@5.44.0) + prettier-plugin-tailwindcss: + specifier: ^0.6.10 + 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) + 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.17 + version: 4.1.17 + tslib: + specifier: ^2.8.1 + version: 2.8.1 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vite: + specifier: ^6.0.7 + version: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: + specifier: ^4.0.14 + version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@22.19.1)(@vitest/ui@4.0.14)(jsdom@29.0.1(@noble/hashes@2.0.1))(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + + apps/mana/apps/landing: dependencies: '@astrojs/react': specifier: ^3.6.0 @@ -1991,7 +2339,7 @@ importers: '@iconify-json/tabler': specifier: ^1.2.19 version: 1.2.23 - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui astro: @@ -2020,12 +2368,12 @@ importers: specifier: ^3.4.0 version: 3.4.18(tsx@4.21.0)(yaml@2.8.3) - apps/manacore/apps/mobile: + apps/mana/apps/mobile: dependencies: '@expo/vector-icons': specifier: ^15.0.3 version: 15.0.3(expo-font@55.0.4(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth '@react-native-async-storage/async-storage': @@ -2132,87 +2480,87 @@ importers: specifier: ~5.9.3 version: 5.9.3 - apps/manacore/apps/web: + apps/mana/apps/web: dependencies: '@calc/shared': specifier: workspace:* version: link:../../../calc/packages/shared - '@manacore/credits': + '@mana/credits': specifier: workspace:^ version: link:../../../../packages/credits - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-llm': + '@mana/local-llm': specifier: workspace:* version: link:../../../../packages/local-llm - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/qr-export': + '@mana/qr-export': specifier: workspace:* version: link:../../../../packages/qr-export - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-config': + '@mana/shared-config': specifier: workspace:* version: link:../../../../packages/shared-config - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-links': + '@mana/shared-links': specifier: workspace:* version: link:../../../../packages/shared-links - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-uload': + '@mana/shared-uload': specifier: workspace:* version: link:../../../../packages/shared-uload - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/spiral-db': + '@mana/spiral-db': specifier: workspace:* version: link:../../../../packages/spiral-db - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions - '@manacore/wallpaper-generator': + '@mana/wallpaper-generator': specifier: workspace:* version: link:../../../../packages/wallpaper-generator '@types/suncalc': @@ -2243,10 +2591,10 @@ importers: specifier: ^1.0.5 version: 1.1.0(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@playwright/test': @@ -2324,43 +2672,43 @@ importers: apps/manavoxel/apps/web: dependencies: - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils '@manavoxel/shared': @@ -2373,10 +2721,10 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -2568,40 +2916,40 @@ importers: apps/matrix/apps/web: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui '@matrix-org/matrix-sdk-crypto-wasm': @@ -2623,7 +2971,7 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa '@sveltejs/adapter-node': @@ -3012,7 +3360,7 @@ importers: apps/memoro/apps/server: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono '@supabase/supabase-js': @@ -3043,61 +3391,61 @@ importers: apps/memoro/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions date-fns: @@ -3113,10 +3461,10 @@ importers: specifier: ^4.1.12 version: 4.3.6 devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -3166,7 +3514,7 @@ importers: '@astrojs/check': specifier: ^0.9.0 version: 0.9.5(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3) - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui astro: @@ -3231,22 +3579,22 @@ importers: apps/moodlit/apps/web-archived: dependencies: - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui svelte-sonner: @@ -3291,7 +3639,7 @@ importers: '@astrojs/sitemap': specifier: ^3.3.0 version: 3.6.0 - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui astro: @@ -3303,10 +3651,10 @@ importers: apps/mukke/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono - '@manacore/shared-storage': + '@mana/shared-storage': specifier: workspace:* version: link:../../../../packages/shared-storage hono: @@ -3319,67 +3667,67 @@ importers: apps/mukke/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:^ version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-splitscreen': + '@mana/shared-splitscreen': specifier: workspace:^ version: link:../../../../packages/shared-splitscreen - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils '@mukke/shared': @@ -3401,10 +3749,10 @@ importers: specifier: ^7.8.0 version: 7.12.1 devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -3472,7 +3820,7 @@ importers: '@astrojs/sitemap': specifier: ^3.2.1 version: 3.6.0 - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui astro: @@ -3525,22 +3873,22 @@ importers: apps/news/apps/web-archived: dependencies: - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui svelte-sonner: @@ -3586,7 +3934,7 @@ importers: '@astrojs/check': specifier: ^0.9.0 version: 0.9.5(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3) - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui astro: @@ -3629,7 +3977,7 @@ importers: apps/nutriphi/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono hono: @@ -3642,61 +3990,61 @@ importers: apps/nutriphi/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions '@nutriphi/shared': @@ -3709,10 +4057,10 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -3784,70 +4132,70 @@ importers: apps/photos/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-splitscreen': + '@mana/shared-splitscreen': specifier: workspace:* version: link:../../../../packages/shared-splitscreen - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions '@photos/shared': @@ -3860,10 +4208,10 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -3945,7 +4293,7 @@ importers: '@astrojs/check': specifier: ^0.9.0 version: 0.9.5(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3) - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui '@picture/design-tokens': @@ -4003,10 +4351,10 @@ importers: '@expo/vector-icons': specifier: ^15.0.2 version: 15.0.3(expo-font@55.0.4(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-logger': + '@mana/shared-logger': specifier: workspace:* version: link:../../../../packages/shared-logger '@picture/design-tokens': @@ -4169,10 +4517,10 @@ importers: apps/picture/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono - '@manacore/shared-storage': + '@mana/shared-storage': specifier: workspace:* version: link:../../../../packages/shared-storage hono: @@ -4185,67 +4533,67 @@ importers: apps/picture/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions '@picture/design-tokens': @@ -4267,10 +4615,10 @@ importers: '@eslint/js': specifier: ^9.36.0 version: 9.39.1 - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -4392,10 +4740,10 @@ importers: apps/planta/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono - '@manacore/shared-storage': + '@mana/shared-storage': specifier: workspace:* version: link:../../../../packages/shared-storage drizzle-orm: @@ -4414,64 +4762,64 @@ importers: apps/planta/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils '@planta/shared': @@ -4481,10 +4829,10 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-auto': @@ -4550,7 +4898,7 @@ importers: '@astrojs/sitemap': specifier: ^3.2.1 version: 3.6.0 - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui astro: @@ -4572,7 +4920,7 @@ importers: apps/presi/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono drizzle-orm: @@ -4594,64 +4942,64 @@ importers: apps/presi/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions '@presi/shared': @@ -4661,10 +5009,10 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -4720,7 +5068,7 @@ importers: apps/questions/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono hono: @@ -4733,67 +5081,67 @@ importers: apps/questions/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils date-fns: @@ -4803,10 +5151,10 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -4860,49 +5208,49 @@ importers: apps/skilltree/apps/web-archived: dependencies: - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:^ version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils svelte-i18n: @@ -4912,10 +5260,10 @@ importers: specifier: ^11.0.0 version: 11.1.0 devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -4968,10 +5316,10 @@ importers: apps/storage/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono - '@manacore/shared-storage': + '@mana/shared-storage': specifier: workspace:* version: link:../../../../packages/shared-storage hono: @@ -4984,77 +5332,77 @@ importers: apps/storage/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions svelte-i18n: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -5123,49 +5471,49 @@ importers: apps/times/apps/web-archived: dependencies: - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions '@times/shared': @@ -5178,10 +5526,10 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -5223,7 +5571,7 @@ importers: apps/times/packages/shared: dependencies: - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types devDependencies: @@ -5242,7 +5590,7 @@ importers: '@astrojs/check': specifier: ^0.9.0 version: 0.9.5(prettier-plugin-astro@0.14.1)(prettier@3.6.2)(typescript@5.9.3) - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui astro: @@ -5285,7 +5633,7 @@ importers: apps/todo/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono drizzle-orm: @@ -5316,79 +5664,79 @@ importers: apps/todo/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-links': + '@mana/shared-links': specifier: workspace:* version: link:../../../../packages/shared-links - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-splitscreen': + '@mana/shared-splitscreen': specifier: workspace:* version: link:../../../../packages/shared-splitscreen - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/spiral-db': + '@mana/spiral-db': specifier: workspace:* version: link:../../../../packages/spiral-db - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions '@todo/shared': @@ -5404,10 +5752,10 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@playwright/test': @@ -5464,7 +5812,7 @@ importers: apps/todo/packages/shared: dependencies: - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../../../packages/shared-types devDependencies: @@ -5594,7 +5942,7 @@ importers: apps/traces/apps/server-archived: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono drizzle-orm: @@ -5633,7 +5981,7 @@ importers: '@astrojs/tailwind': specifier: ^6.0.2 version: 6.0.2(astro@5.18.1(@azure/storage-blob@12.31.0)(@netlify/blobs@10.7.4)(@types/node@22.19.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.3))(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.3))(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3)) - '@manacore/shared-landing-ui': + '@mana/shared-landing-ui': specifier: workspace:* version: link:../../../../packages/shared-landing-ui astro: @@ -5652,7 +6000,7 @@ importers: apps/uload/apps/server: dependencies: - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono drizzle-orm: @@ -5677,28 +6025,28 @@ importers: apps/uload/apps/web-archived: dependencies: - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-uload': + '@mana/shared-uload': specifier: workspace:* version: link:../../../../packages/shared-uload lucide-svelte: @@ -5711,7 +6059,7 @@ importers: specifier: ^1.0.5 version: 1.1.0(svelte@5.44.0) devDependencies: - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -5789,70 +6137,70 @@ importers: apps/zitare/apps/web-archived: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-api-client': + '@mana/shared-api-client': specifier: workspace:* version: link:../../../../packages/shared-api-client - '@manacore/shared-app-onboarding': + '@mana/shared-app-onboarding': specifier: workspace:* version: link:../../../../packages/shared-app-onboarding - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-stores': + '@mana/shared-auth-stores': specifier: workspace:* version: link:../../../../packages/shared-auth-stores - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-profile-ui': + '@mana/shared-profile-ui': specifier: workspace:* version: link:../../../../packages/shared-profile-ui - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/spiral-db': + '@mana/spiral-db': specifier: workspace:^ version: link:../../../../packages/spiral-db - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions '@zitare/content': @@ -5862,10 +6210,10 @@ importers: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -5930,7 +6278,7 @@ importers: '@google/genai': specifier: ^1.14.0 version: 1.47.0 - '@manacore/shared-hono': + '@mana/shared-hono': specifier: workspace:* version: link:../../../../packages/shared-hono hono: @@ -5949,65 +6297,65 @@ importers: games/arcade/apps/web: dependencies: - '@manacore/feedback': + '@mana/feedback': specifier: workspace:* version: link:../../../../packages/feedback - '@manacore/help': + '@mana/help': specifier: workspace:* version: link:../../../../packages/help - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../../../../packages/local-store - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../../../../packages/shared-auth - '@manacore/shared-auth-ui': + '@mana/shared-auth-ui': specifier: workspace:* version: link:../../../../packages/shared-auth-ui - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../../../../packages/shared-branding - '@manacore/shared-error-tracking': + '@mana/shared-error-tracking': specifier: workspace:* version: link:../../../../packages/shared-error-tracking - '@manacore/shared-i18n': + '@mana/shared-i18n': specifier: workspace:* version: link:../../../../packages/shared-i18n - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../../../../packages/shared-icons - '@manacore/shared-stores': + '@mana/shared-stores': specifier: workspace:* version: link:../../../../packages/shared-stores - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../../../../packages/shared-tags - '@manacore/shared-tailwind': + '@mana/shared-tailwind': specifier: workspace:* version: link:../../../../packages/shared-tailwind - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../../../../packages/shared-theme - '@manacore/shared-theme-ui': + '@mana/shared-theme-ui': specifier: workspace:* version: link:../../../../packages/shared-theme-ui - '@manacore/shared-ui': + '@mana/shared-ui': specifier: workspace:* version: link:../../../../packages/shared-ui - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../../../../packages/shared-utils - '@manacore/subscriptions': + '@mana/subscriptions': specifier: workspace:* version: link:../../../../packages/subscriptions svelte-i18n: specifier: ^4.0.1 version: 4.0.1(svelte@5.44.0) devDependencies: - '@manacore/shared-pwa': + '@mana/shared-pwa': specifier: workspace:* version: link:../../../../packages/shared-pwa - '@manacore/shared-vite-config': + '@mana/shared-vite-config': specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': @@ -6227,7 +6575,7 @@ importers: packages/qr-export: dependencies: - '@manacore/wallpaper-generator': + '@mana/wallpaper-generator': specifier: workspace:* version: link:../wallpaper-generator jsqr: @@ -6261,7 +6609,7 @@ importers: packages/shared-api-client: dependencies: - '@manacore/shared-utils': + '@mana/shared-utils': specifier: workspace:* version: link:../shared-utils devDependencies: @@ -6271,7 +6619,7 @@ importers: packages/shared-app-onboarding: dependencies: - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../shared-theme devDependencies: @@ -6287,7 +6635,7 @@ importers: packages/shared-auth: dependencies: - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../shared-types '@simplewebauthn/browser': @@ -6306,10 +6654,10 @@ importers: packages/shared-auth-stores: dependencies: - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../shared-auth - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../shared-types devDependencies: @@ -6325,13 +6673,13 @@ importers: packages/shared-auth-ui: dependencies: - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../shared-auth - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../shared-branding - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../shared-icons '@zxcvbn-ts/core': @@ -6434,7 +6782,7 @@ importers: packages/shared-hono: dependencies: - '@manacore/shared-logger': + '@mana/shared-logger': specifier: workspace:* version: link:../shared-logger drizzle-orm: @@ -6500,10 +6848,10 @@ importers: packages/shared-links: dependencies: - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../local-store - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../shared-branding devDependencies: @@ -6614,13 +6962,13 @@ importers: packages/shared-stores: dependencies: - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../local-store - '@manacore/shared-auth': + '@mana/shared-auth': specifier: workspace:* version: link:../shared-auth - '@manacore/shared-tags': + '@mana/shared-tags': specifier: workspace:* version: link:../shared-tags devDependencies: @@ -6667,10 +7015,10 @@ importers: packages/shared-theme-ui: dependencies: - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../shared-icons - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../shared-theme devDependencies: @@ -6691,16 +7039,16 @@ importers: packages/shared-ui: dependencies: - '@manacore/shared-branding': + '@mana/shared-branding': specifier: workspace:* version: link:../shared-branding - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../shared-icons - '@manacore/shared-theme': + '@mana/shared-theme': specifier: workspace:* version: link:../shared-theme - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../shared-types d3-force: @@ -6752,10 +7100,10 @@ importers: packages/shared-uload: dependencies: - '@manacore/local-store': + '@mana/local-store': specifier: workspace:* version: link:../local-store - '@manacore/shared-icons': + '@mana/shared-icons': specifier: workspace:* version: link:../shared-icons devDependencies: @@ -6796,7 +7144,7 @@ importers: packages/spiral-db: dependencies: - '@manacore/wallpaper-generator': + '@mana/wallpaper-generator': specifier: workspace:* version: link:../wallpaper-generator pako: @@ -6977,7 +7325,7 @@ importers: services/mana-landing-builder: dependencies: - '@manacore/shared-types': + '@mana/shared-types': specifier: workspace:* version: link:../../packages/shared-types '@nestjs/common': @@ -7064,7 +7412,7 @@ importers: specifier: ^0.33.0 version: 0.33.5 devDependencies: - '@manacore/shared-drizzle-config': + '@mana/shared-drizzle-config': specifier: workspace:* version: link:../../../../packages/shared-drizzle-config '@types/mime-types': @@ -23635,6 +23983,16 @@ snapshots: transitivePeerDependencies: - ts-node + '@astrojs/tailwind@5.1.5(astro@5.18.1(@azure/storage-blob@12.31.0)(@netlify/blobs@10.7.4)(@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.3))(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.3))(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3))': + dependencies: + astro: 5.18.1(@azure/storage-blob@12.31.0)(@netlify/blobs@10.7.4)(@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.3) + autoprefixer: 10.4.22(postcss@8.5.8) + postcss: 8.5.8 + postcss-load-config: 4.0.2(postcss@8.5.8)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + tailwindcss: 3.4.18(tsx@4.21.0)(yaml@2.8.3) + transitivePeerDependencies: + - ts-node + '@astrojs/tailwind@6.0.2(astro@5.16.0(@azure/storage-blob@12.31.0)(@netlify/blobs@10.7.4)(@types/node@20.19.25)(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.3))(tailwindcss@3.4.18(tsx@4.21.0)(yaml@2.8.3))(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.9.3))': dependencies: astro: 5.16.0(@azure/storage-blob@12.31.0)(@netlify/blobs@10.7.4)(@types/node@20.19.25)(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.3) @@ -26472,6 +26830,7 @@ snapshots: - supports-color - typescript - utf-8-validate + optional: true '@expo/code-signing-certificates@0.0.5': dependencies: @@ -26644,6 +27003,7 @@ snapshots: optionalDependencies: react: 19.2.4 react-native: 0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4) + optional: true '@expo/dom-webview@55.0.3(expo@54.0.25)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.1.0))(react@19.1.0)': dependencies: @@ -26669,6 +27029,7 @@ snapshots: expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.7)(expo-router@55.0.5)(react-dom@19.2.4(react@19.2.4))(react-native-webview@13.12.2(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react: 19.2.4 react-native: 0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4) + optional: true '@expo/env@2.0.7': dependencies: @@ -26785,6 +27146,7 @@ snapshots: react: 19.2.4 react-native: 0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4) stacktrace-parser: 0.1.11 + optional: true '@expo/log-box@55.0.8(@expo/dom-webview@55.0.3)(expo@54.0.25)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.1.0))(react@19.1.0)': dependencies: @@ -26943,7 +27305,7 @@ snapshots: postcss: 8.4.49 resolve-from: 5.0.0 optionalDependencies: - expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.7)(expo-router@55.0.5)(react-dom@19.2.4(react@19.2.4))(react-native-webview@13.12.2(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.7)(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) transitivePeerDependencies: - bufferutil - supports-color @@ -27136,7 +27498,7 @@ snapshots: '@expo/json-file': 10.0.12 '@react-native/normalize-colors': 0.83.4 debug: 4.4.3 - expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.7)(expo-router@55.0.5)(react-dom@19.2.4(react@19.2.4))(react-native-webview@13.12.2(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.7)(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) resolve-from: 5.0.0 semver: 7.7.3 xml2js: 0.6.0 @@ -27211,6 +27573,7 @@ snapshots: react-dom: 19.2.4(react@19.2.4) transitivePeerDependencies: - supports-color + optional: true '@expo/schema-utils@0.1.7': {} @@ -27272,6 +27635,7 @@ snapshots: expo-font: 55.0.4(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) react: 19.2.4 react-native: 0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4) + optional: true '@expo/ws-tunnel@1.0.6': {} @@ -29744,7 +30108,8 @@ snapshots: '@react-native/assets-registry@0.83.2': {} - '@react-native/assets-registry@0.84.1': {} + '@react-native/assets-registry@0.84.1': + optional: true '@react-native/babel-plugin-codegen@0.81.5(@babel/core@7.28.5)': dependencies: @@ -29901,6 +30266,7 @@ snapshots: nullthrows: 1.1.1 tinyglobby: 0.2.15 yargs: 17.7.2 + optional: true '@react-native/community-cli-plugin@0.81.4': dependencies: @@ -29957,6 +30323,7 @@ snapshots: - bufferutil - supports-color - utf-8-validate + optional: true '@react-native/debugger-frontend@0.81.4': {} @@ -29964,7 +30331,8 @@ snapshots: '@react-native/debugger-frontend@0.83.2': {} - '@react-native/debugger-frontend@0.84.1': {} + '@react-native/debugger-frontend@0.84.1': + optional: true '@react-native/debugger-shell@0.83.2': dependencies: @@ -29978,6 +30346,7 @@ snapshots: fb-dotslash: 0.5.8 transitivePeerDependencies: - supports-color + optional: true '@react-native/dev-middleware@0.81.4': dependencies: @@ -30052,6 +30421,7 @@ snapshots: - bufferutil - supports-color - utf-8-validate + optional: true '@react-native/gradle-plugin@0.81.4': {} @@ -30059,7 +30429,8 @@ snapshots: '@react-native/gradle-plugin@0.83.2': {} - '@react-native/gradle-plugin@0.84.1': {} + '@react-native/gradle-plugin@0.84.1': + optional: true '@react-native/js-polyfills@0.81.4': {} @@ -30067,7 +30438,8 @@ snapshots: '@react-native/js-polyfills@0.83.2': {} - '@react-native/js-polyfills@0.84.1': {} + '@react-native/js-polyfills@0.84.1': + optional: true '@react-native/normalize-colors@0.74.89': {} @@ -30079,7 +30451,8 @@ snapshots: '@react-native/normalize-colors@0.83.4': {} - '@react-native/normalize-colors@0.84.1': {} + '@react-native/normalize-colors@0.84.1': + optional: true '@react-native/virtualized-lists@0.81.4(@types/react@19.2.14)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.1.0))(react@19.1.0)': dependencies: @@ -30134,6 +30507,7 @@ snapshots: react-native: 0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4) optionalDependencies: '@types/react': 19.2.14 + optional: true '@react-navigation/bottom-tabs@7.15.5(@react-navigation/native@7.1.33(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.7.0(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.1.0))(react@19.1.0))(react-native-screens@4.24.0(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.1.0))(react@19.1.0)': dependencies: @@ -30336,6 +30710,22 @@ snapshots: - '@react-native-masked-view/masked-view' optional: true + '@react-navigation/drawer@7.7.4(@react-navigation/native@7.1.33(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native-gesture-handler@2.28.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.7.4(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(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.1.17)(react@19.2.0))(react@19.2.0))(react-native-screens@4.16.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0)': + dependencies: + '@react-navigation/elements': 2.8.3(@react-navigation/native@7.1.33(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(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.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + '@react-navigation/native': 7.1.33(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + color: 4.2.3 + react: 19.2.0 + react-native: 0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0) + react-native-drawer-layout: 4.2.0(react-native-gesture-handler@2.28.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.7.4(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + react-native-gesture-handler: 2.28.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + react-native-reanimated: 4.1.5(@babel/core@7.28.5)(react-native-worklets@0.7.4(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(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.1.17)(react@19.2.0))(react@19.2.0) + react-native-screens: 4.16.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + use-latest-callback: 0.2.6(react@19.2.0) + transitivePeerDependencies: + - '@react-native-masked-view/masked-view' + '@react-navigation/drawer@7.7.4(@react-navigation/native@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))(react-native-gesture-handler@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@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-screens@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@0.83.2(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: '@react-navigation/elements': 2.8.3(@react-navigation/native@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))(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) @@ -30400,7 +30790,6 @@ snapshots: react-native-safe-area-context: 5.6.2(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) use-latest-callback: 0.2.6(react@19.2.0) use-sync-external-store: 1.6.0(react@19.2.0) - optional: true '@react-navigation/elements@2.8.3(@react-navigation/native@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))(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)': dependencies: @@ -33544,6 +33933,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitest/coverage-v8@4.0.14(vitest@4.1.2)': + dependencies: + '@bcoe/v8-coverage': 1.0.2 + '@vitest/utils': 4.0.14 + ast-v8-to-istanbul: 0.3.8 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.2.0 + magicast: 0.5.1 + obug: 2.1.1 + std-env: 3.10.0 + tinyrainbow: 3.1.0 + vitest: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@22.19.1)(@vitest/ui@4.0.14)(jsdom@29.0.1(@noble/hashes@2.0.1))(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + transitivePeerDependencies: + - supports-color + '@vitest/expect@1.6.1': dependencies: '@vitest/spy': 1.6.1 @@ -33690,6 +34096,14 @@ snapshots: optionalDependencies: 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.3) + '@vitest/mocker@4.1.2(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + dependencies: + '@vitest/spy': 4.1.2 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + '@vitest/mocker@4.1.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.2 @@ -33847,6 +34261,17 @@ snapshots: tinyrainbow: 3.0.3 vitest: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@22.19.1)(@vitest/ui@4.0.14)(jiti@2.6.1)(jsdom@29.0.1(@noble/hashes@2.0.1))(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + '@vitest/ui@4.0.14(vitest@4.1.2)': + dependencies: + '@vitest/utils': 4.0.14 + fflate: 0.8.2 + flatted: 3.3.3 + pathe: 2.0.3 + sirv: 3.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.1.0 + vitest: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@22.19.1)(@vitest/ui@4.0.14)(jsdom@29.0.1(@noble/hashes@2.0.1))(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/utils@1.6.1': dependencies: diff-sequences: 29.6.3 @@ -35143,7 +35568,7 @@ snapshots: resolve-from: 5.0.0 optionalDependencies: '@babel/runtime': 7.29.2 - expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.7)(expo-router@55.0.5)(react-dom@19.2.4(react@19.2.4))(react-native-webview@13.12.2(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.7)(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.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0)(typescript@5.3.3) transitivePeerDependencies: - '@babel/core' - supports-color @@ -36891,7 +37316,7 @@ snapshots: '@typescript-eslint/eslint-plugin': 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': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.1(jiti@2.6.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@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)))(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-expo: 1.0.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.1(jiti@2.6.1)) @@ -36908,7 +37333,7 @@ snapshots: '@typescript-eslint/eslint-plugin': 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': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.1(jiti@2.6.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@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)))(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-expo: 1.0.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.1(jiti@2.6.1)) @@ -36925,7 +37350,7 @@ snapshots: '@typescript-eslint/eslint-plugin': 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) eslint: 9.39.1(jiti@2.6.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-expo: 0.1.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.1(jiti@2.6.1)) @@ -37069,7 +37494,22 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3 + eslint: 9.39.1(jiti@2.6.1) + get-tsconfig: 4.13.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.15 + unrs-resolver: 1.11.1 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@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)))(eslint@9.39.1(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 @@ -37114,25 +37554,25 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@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)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: '@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) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@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)))(eslint@9.39.1(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -37291,7 +37731,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -37320,7 +37760,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@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)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -37945,6 +38385,7 @@ snapshots: transitivePeerDependencies: - supports-color - typescript + optional: true expo-audio@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): dependencies: @@ -38067,6 +38508,7 @@ snapshots: transitivePeerDependencies: - supports-color - typescript + optional: true expo-dev-client@55.0.19(expo@55.0.5)(typescript@5.9.3): dependencies: @@ -38162,6 +38604,7 @@ snapshots: dependencies: expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.7)(expo-router@55.0.5)(react-dom@19.2.4(react@19.2.4))(react-native-webview@13.12.2(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react-native: 0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4) + optional: true expo-font@14.0.10(expo@54.0.25)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.1.0))(react@19.1.0): dependencies: @@ -38197,6 +38640,7 @@ snapshots: fontfaceobserver: 2.3.0 react: 19.2.4 react-native: 0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4) + optional: true expo-glass-effect@55.0.8(expo@54.0.25)(react-native@0.81.4(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.1.0))(react@19.1.0): dependencies: @@ -38293,6 +38737,7 @@ snapshots: dependencies: expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.7)(expo-router@55.0.5)(react-dom@19.2.4(react@19.2.4))(react-native-webview@13.12.2(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react: 19.2.4 + optional: true expo-linear-gradient@15.0.7(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0): dependencies: @@ -38484,6 +38929,7 @@ snapshots: invariant: 2.2.4 react: 19.2.4 react-native: 0.84.1(@babel/core@7.28.5)(@types/react@19.2.14)(react@19.2.4) + optional: true expo-notifications@55.0.12(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): dependencies: @@ -38599,6 +39045,56 @@ snapshots: - expo-font - supports-color + expo-router@55.0.5(5icniyqiujqmci35vezit5ovei): + dependencies: + '@expo/log-box': 55.0.8(@expo/dom-webview@55.0.3)(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + '@expo/metro-runtime': 55.0.7(@expo/dom-webview@55.0.3)(expo@55.0.5)(react-dom@19.2.0(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + '@expo/schema-utils': 55.0.2 + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.17)(react@19.2.0) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@react-navigation/bottom-tabs': 7.15.5(@react-navigation/native@7.1.33(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(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.1.17)(react@19.2.0))(react@19.2.0))(react-native-screens@4.16.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + '@react-navigation/native': 7.1.33(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + '@react-navigation/native-stack': 7.14.4(@react-navigation/native@7.1.33(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(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.1.17)(react@19.2.0))(react@19.2.0))(react-native-screens@4.16.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + client-only: 0.0.1 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + expo: 55.0.5(@babel/core@7.28.5)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@55.0.7)(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.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo-constants: 55.0.7(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(typescript@5.9.3) + expo-glass-effect: 55.0.8(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + expo-image: 55.0.6(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.1.17)(react@19.2.0))(react@19.2.0) + expo-linking: 55.0.7(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo-server: 55.0.6 + expo-symbols: 55.0.5(expo-font@55.0.4)(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + fast-deep-equal: 3.1.3 + invariant: 2.2.4 + nanoid: 3.3.11 + query-string: 7.1.3 + react: 19.2.0 + react-fast-compare: 3.2.2 + react-native: 0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0) + react-native-is-edge-to-edge: 1.2.1(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(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.1.17)(react@19.2.0))(react@19.2.0) + react-native-screens: 4.16.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + semver: 7.6.3 + server-only: 0.0.1 + sf-symbols-typescript: 2.2.0 + shallowequal: 1.1.0 + use-latest-callback: 0.2.6(react@19.2.0) + vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + optionalDependencies: + '@react-navigation/drawer': 7.7.4(@react-navigation/native@7.1.33(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native-gesture-handler@2.28.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.7.4(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(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.1.17)(react@19.2.0))(react@19.2.0))(react-native-screens@4.16.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + '@testing-library/react-native': 13.3.3(jest@30.3.0(@types/node@24.10.1)(esbuild-register@3.6.0(esbuild@0.27.5))(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react-test-renderer@19.1.0(react@19.2.0))(react@19.2.0) + react-dom: 19.2.0(react@19.2.0) + react-native-gesture-handler: 2.28.0(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + react-native-reanimated: 4.1.5(@babel/core@7.28.5)(react-native-worklets@0.7.4(@babel/core@7.28.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) + react-native-web: 0.21.2(encoding@0.1.13)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + transitivePeerDependencies: + - '@react-native-masked-view/masked-view' + - '@types/react' + - '@types/react-dom' + - expo-font + - supports-color + expo-router@55.0.5(alplmueeiabdlyo62r6crpdhli): dependencies: '@expo/log-box': 55.0.8(@expo/dom-webview@55.0.3)(expo@55.0.5)(react-native@0.83.2(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.2.0))(react@19.2.0) @@ -39377,6 +39873,7 @@ snapshots: - supports-color - typescript - utf-8-validate + optional: true exponential-backoff@3.1.3: {} @@ -40219,7 +40716,8 @@ snapshots: hermes-compiler@0.14.1: {} - hermes-compiler@250829098.0.9: {} + hermes-compiler@250829098.0.9: + optional: true hermes-estree@0.29.1: {} @@ -45416,6 +45914,7 @@ snapshots: - bufferutil - supports-color - utf-8-validate + optional: true react-refresh@0.14.2: {} @@ -48532,6 +49031,36 @@ snapshots: transitivePeerDependencies: - msw + vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@22.19.1)(@vitest/ui@4.0.14)(jsdom@29.0.1(@noble/hashes@2.0.1))(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + '@vitest/expect': 4.1.2 + '@vitest/mocker': 4.1.2(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.2 + '@vitest/runner': 4.1.2 + '@vitest/snapshot': 4.1.2 + '@vitest/spy': 4.1.2 + '@vitest/utils': 4.1.2 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 4.0.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.1.0 + vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + '@types/node': 22.19.1 + '@vitest/ui': 4.0.14(vitest@4.1.2) + jsdom: 29.0.1(@noble/hashes@2.0.1) + transitivePeerDependencies: + - msw + vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(jsdom@29.0.1(@noble/hashes@2.0.1))(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.2