Modrinth/packages/utils/index.d.ts
Geometrically 2d416d491c
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

247 lines
6.3 KiB
TypeScript

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,
}
}