import type { Labrinth } from '@modrinth/api-client' import type { UseQueryReturnType } from '@tanstack/vue-query' import type { ComputedRef, Reactive, Ref } from 'vue' import { createContext } from '.' /** * Computed version with additional display properties */ export interface ComputedVersion extends Labrinth.Versions.v3.Version { displayUrlEnding: string primaryFile: Labrinth.Versions.v3.Version['files'][number] | null author: Labrinth.Projects.v3.TeamMember | null } /** * Authenticated user info for permission checks */ export interface AuthUser { id: string username: string role: string avatar_url?: string } /** * Context for the new project page system */ export interface NewProjectPageContext { // Core project data project: Ref // Async loaded data with loading states organization: Reactive> members: Reactive> versions: Reactive> dependencies: Reactive> thread: Reactive> // Current authenticated user's membership (null if not a member) currentMember: ComputedRef // Auth user for permission checks authUser: Ref // Link generation functions for cross-platform compatibility createUserLink: (user: Labrinth.Users.v3.User) => string createOrgLink: (org: Labrinth.Organizations.v3.Organization) => string createVersionLink: (version: ComputedVersion) => string // Refresh functions refreshProject: () => Promise refreshVersions: () => Promise refreshMembers: () => Promise refreshThread: () => Promise // Project base path for navigation basePath: Ref } export const [injectNewProjectPageContext, provideNewProjectPageContext] = createContext('root', 'newProjectPageContext')