import { CATEGORIES, FETCH_POSTS_ORDER_FIELDS, USER_ROLES, ViewFlagBehavior } from '@/consts' import type { ReactNode } from 'react' export type Category = typeof CATEGORIES[number] export type FetchPostsOrder = `${ FetchPostsOrderField }:${ 'asc' | 'desc' }` export type FetchPostsOrderField = typeof FETCH_POSTS_ORDER_FIELDS[number] export type FetchPostsParams = { url: string title: string tags: string match: 'all' | 'any' originalCreatedFrom: string originalCreatedTo: string createdFrom: string createdTo: string updatedFrom: string updatedTo: string page: number limit: number order: FetchPostsOrder } export type Menu = MenuItem[] export type MenuItem = { name: string to: string base?: string subMenu: SubMenuItem[] } export type NicoTag = Tag & { category: 'nico' linkedTags: Tag[] } export type Post = { id: number url: string title: string thumbnail: string thumbnailBase: string tags: Tag[] viewed: boolean related: Post[] originalCreatedFrom: string | null originalCreatedBefore: string | null createdAt: string updatedAt: string } export type PostTagChange = { post: Post tag: Tag user?: User changeType: 'add' | 'remove' timestamp: string } export type SubMenuItem = | { component: ReactNode visible: boolean } | { name: string to: string visible?: boolean } export type Tag = { id: number name: string category: Category postCount: number hasWiki: boolean children?: Tag[] matchedAlias?: string | null } export type User = { id: number name: string | null inheritanceCode: string role: UserRole } export type ViewFlagBehavior = typeof ViewFlagBehavior[keyof typeof ViewFlagBehavior] export type WikiPage = { id: number title: string createdUserId: number updatedUserId: number createdAt: string updatedAt: string body: string revisionId: number pred: number | null succ: number | null } export type WikiPageChange = { revisionId: number pred: number | null succ: null wikiPage: Pick user: Pick kind: 'content' | 'redirect' message: string | null timestamp: string } export type WikiPageDiff = { wikiPageId: number title: string olderRevisionId: number | null newerRevisionId: number diff: WikiPageDiffDiff[] } export type WikiPageDiffDiff = { type: 'context' | 'added' | 'removed' content: string } export type UserRole = typeof USER_ROLES[number]