Files
Modrinth-plus/packages/utils/index.d.ts

247 lines
6.3 KiB
TypeScript
Raw Normal View History

Project, Search, User redesign (#1281) * New project page * fix silly icon tailwind classes * Start new versions page, add new ButtonStyled component * Pagination and finish mocking up versions page functionality * green download button * hover animation * New Modal, Avatar refactor, subpages in NavTabs * lint * Download modal * New user page + fix lint * fix ui lint * Download animation fix * Versions filter + finish project page * Improve consistency of buttons on home page * Fix ButtonStyled breaking * Fix margin on version summary * finish search, new modals, user + project page mobile * fix gallery image pages * New project header * Fix gallery tab showing improperly * Use auto direction + position for all popouts * Preliminary user page * test to see if this fixes login stuff * remove extra slash * Add version actions, move download button on versions page * Listed -> public * Shorten download modal selector height * Fix user menu open direction * Change breakpoint for header collapse * Only underline title * Tighten padding on stats a little * New nav * Make mobile breakpoint more consistent * fix header breakpoint regression * Add sign in button * Fix edit icon color * Fix margin at top of screen * Fix user bios and ad width * Fix user nav showing when there's only one type of project * Fix plural projects on user page & extract i18n * Remove ads on mobile for now * Fix overflow menu showing hidden items * NavTabs on mobile * Fix navbar z index * Search filter overhaul + negative filters * fix no-max-height * port version filters, fix following/collections, lint * hide promos * ui lint * Disable modal background animation to reduce reported motion sickness * Hide install with modrinth app button on mobile --------- Signed-off-by: Geometrically <18202329+Geometrically@users.noreply.github.com> Co-authored-by: Prospector <prospectordev@gmail.com>
2024-08-20 23:03:16 -07:00
const BASE62_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' as const;
type Base62Char = typeof BASE62_CHARS[number];
declare global {
type ModrinthId = `${Base62Char}`[];
type Environment = 'required' | 'optional' | 'unsupported' | 'unknown';
type RequestableStatus = 'approved' | 'archived' | 'unlisted' | 'private'
type ApprovedStatus = RequestableStatus | 'scheduled'
type UnapprovedStatus = 'draft' | 'processing' | 'rejected' | 'withheld'
type ProjectStatus = ApprovedStatus | UnapprovedStatus | 'unknown'
type DonationPlatform =
{ short: "patreon", name: "Patreon" }
| { short: "bmac", name: "Buy Me A Coffee" }
| { short: "paypal", name: "PayPal" }
| { short: "github", name: "GitHub Sponsors" }
| { short: "ko-fi", name: "Ko-fi" }
|
| { short: "other", name: "Other" }
type ProjectType = 'mod' | 'modpack' | 'resourcepack' | 'shader'
type MonetizationStatus = 'monetized' | 'demonetized' | 'force-demonetized'
type GameVersion = string;
type Platform = string;
type Category = string;
type CategoryOrPlatform = Category | Platform
interface DonationLink<T extends DonationPlatform> {
id: T["short"],
platform: T["name"],
url: string
}
interface GalleryImage {
url: string,
featured: boolean,
created: string,
ordering: number,
title?: string,
description?: string,
}
interface Project {
id: ModrinthId,
project_type: ProjectType,
slug: string,
title: string,
description: string,
status: ProjectStatus,
requested_status: RequestableStatus,
monetization_status: MonetizationStatus,
body: string,
icon_url?: string,
color?: number,
categories: Category[],
additional_categories: Category[],
downloads: number,
followers: number,
client_side: Environment,
server_side: Environment,
team: ModrinthId,
thread_id: ModrinthId,
issues_url?: string,
source_url?: string,
wiki_url?: string,
discord_url?: string,
donation_urls: DonationLink[],
published: string,
updated: string,
approved: string,
queued: string,
game_versions: GameVersion[],
loaders: Platform[],
versions: ModrinthId[],
gallery?: GalleryImage[]
license: {
id: string,
name, string,
url?: string,
},
}
interface SearchResult {
id: ModrinthId,
project_type: ProjectType,
slug: string,
title: string,
description: string,
monetization_status: MonetizationStatus,
icon_url?: string,
color?: number,
categories: CategoryOrPlatform[],
display_categories: CategoryOrPlatform[],
versions: GameVersion[],
latest_version: GameVersion,
downloads: number,
follows: number,
client_side: Environment,
server_side: Environment,
author: string,
date_created: string,
date_modified: string,
gallery: string[]
featured_gallery?: string[]
license: string,
}
type DependencyType = 'required' | 'optional' | 'incompatible' | 'embedded'
interface VersionDependency {
dependency_type: DependencyType,
file_name?: string,
}
interface ProjectDependency {
dependency_type: DependencyType,
project_id?: string,
}
interface FileDependency {
dependency_type: DependencyType,
file_name?: string,
}
type Dependency = VersionDependency | ProjectDependency | FileDependency
type VersionChannel = 'release' | 'beta' | 'alpha'
type VersionStatus = 'listed' | 'archived' | 'draft' | 'unlisted' | 'scheduled' | 'unknown'
type FileType = 'required-resource-pack' | 'optional-resource-pack'
interface VersionFileHash {
sha512: string,
sha1: string,
}
interface VersionFile {
hashes: VersionFileHash[],
url: string,
filename: string,
primary: boolean,
size: number,
file_type?: FileType
}
interface Version {
name: string,
version_number: string,
changelog?: string,
dependencies: Dependency[],
game_versions: GameVersion[],
version_type: VersionChannel,
loaders: Platform[],
featured: boolean,
status: VersionStatus,
id: ModrinthId,
project_id: ModrinthId,
author_id: ModrinthId,
date_published: string,
downloads: number,
files: VersionFile[],
}
interface PayoutData {
balance: number,
payout_wallet: 'paypal' | 'venmo',
payout_wallet_type: 'email' | 'phone' | 'user_handle',
payout_address: string,
}
type UserRole = 'admin' | 'moderator' | 'pyro' | 'developer'
enum UserBadge {
MIDAS = 1 << 0,
EARLY_MODPACK_ADOPTER = 1 << 1,
EARLY_RESPACK_ADOPTER = 1 << 2,
EARLY_PLUGIN_ADOPTER = 1 << 3,
ALPHA_TESTER = 1 << 4,
CONTRIBUTOR = 1 << 5,
TRANSLATOR = 1 << 6,
}
type UserBadges = number;
interface User {
username: string,
email?: string,
bio?: string,
payout_data?: PayoutData,
id: ModrinthId,
avatar_url: string,
created: string,
role: UserRole,
badges: UserBadges,
auth_providers?: string[],
email_verified?: boolean,
has_password?: boolean,
has_totp?: boolean
}
enum TeamMemberPermission {
UPLOAD_VERSION = 1 << 0,
DELETE_VERSION = 1 << 1,
EDIT_DETAILS = 1 << 2,
EDIT_BODY = 1 << 3,
MANAGE_INVITES = 1 << 4,
REMOVE_MEMBER = 1 << 5,
EDIT_MEMBER = 1 << 6,
DELETE_PROJECT = 1 << 7,
VIEW_ANALYTICS = 1 << 8,
VIEW_PAYOUTS = 1 << 9,
}
type TeamMemberPermissions = number;
interface TeamMember {
team_id: ModrinthId,
user: User,
role: string,
permissions: TeamMemberPermissions,
accepted: boolean,
payouts_split: number,
ordering: number,
}
}