├── .env ├── .env.development ├── .env.production ├── .gitignore ├── README.md ├── eslint.config.js ├── index.html ├── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── public └── favicon.ico ├── src ├── apis │ ├── comment │ │ ├── index.ts │ │ └── types.ts │ ├── favorite │ │ ├── index.ts │ │ └── types.ts │ ├── history │ │ ├── index.ts │ │ └── types.ts │ ├── illustration │ │ ├── index.ts │ │ └── types.ts │ ├── illustrator │ │ ├── index.ts │ │ └── types.ts │ ├── index.ts │ ├── label │ │ ├── index.ts │ │ └── types.ts │ ├── tool │ │ ├── index.ts │ │ └── types.ts │ ├── types.ts │ └── user │ │ ├── index.ts │ │ └── types.ts ├── app.tsx ├── assets │ ├── imgs │ │ ├── 404.png │ │ ├── 500.png │ │ ├── empty │ │ │ ├── empty1.png │ │ │ ├── empty2.png │ │ │ ├── empty3.png │ │ │ ├── empty4.png │ │ │ ├── empty5.png │ │ │ ├── empty6.png │ │ │ └── empty7.png │ │ └── upload-successfully.gif │ └── svgs │ │ ├── logo.svg │ │ ├── pagination-left.svg │ │ ├── pagination-more.svg │ │ ├── pagination-right.svg │ │ └── pixiv.svg ├── components │ ├── common │ │ ├── animated-list │ │ │ └── index.tsx │ │ ├── create-folder-modal │ │ │ └── index.tsx │ │ ├── create-illustrator-modal │ │ │ └── index.tsx │ │ ├── empty │ │ │ └── index.tsx │ │ ├── favorite-item │ │ │ └── index.tsx │ │ ├── grey-button │ │ │ └── index.tsx │ │ ├── hana-card │ │ │ └── index.tsx │ │ ├── hana-cropper │ │ │ └── index.tsx │ │ ├── hana-modal │ │ │ └── index.tsx │ │ ├── hana-viewer │ │ │ └── index.tsx │ │ ├── header │ │ │ ├── index.tsx │ │ │ ├── search-dropdown.tsx │ │ │ ├── sidebar.tsx │ │ │ └── user-dropdown.tsx │ │ ├── label-img-item │ │ │ └── index.tsx │ │ ├── label-item │ │ │ └── index.tsx │ │ ├── layout-list │ │ │ └── index.tsx │ │ ├── lazy-img │ │ │ └── index.tsx │ │ ├── loading │ │ │ └── index.tsx │ │ ├── pagination │ │ │ └── index.tsx │ │ ├── user-item │ │ │ └── index.tsx │ │ ├── virtual-list │ │ │ └── index.tsx │ │ ├── waterfall-item │ │ │ └── index.tsx │ │ └── work-item │ │ │ ├── index.tsx │ │ │ └── types.ts │ ├── explore │ │ ├── latest-list │ │ │ └── index.tsx │ │ ├── user-list │ │ │ └── index.tsx │ │ └── work-list │ │ │ └── index.tsx │ ├── followed-new │ │ └── main-list │ │ │ └── index.tsx │ ├── home │ │ ├── followed-works │ │ │ └── index.tsx │ │ ├── label-list │ │ │ └── index.tsx │ │ └── recommended-works │ │ │ └── index.tsx │ ├── illustrator │ │ ├── info-modal.tsx │ │ └── waterfall-flow.tsx │ ├── login │ │ ├── bg-slide │ │ │ └── index.tsx │ │ └── login-window │ │ │ └── index.tsx │ ├── motion │ │ ├── animated-div.tsx │ │ └── preset.ts │ ├── personal-center │ │ ├── edit-modal.tsx │ │ ├── favorites │ │ │ ├── header.tsx │ │ │ ├── sidebar.tsx │ │ │ └── work-list.tsx │ │ ├── header.tsx │ │ ├── history │ │ │ ├── history-list.tsx │ │ │ └── search-result.tsx │ │ ├── info-modal.tsx │ │ ├── label-list │ │ │ └── index.tsx │ │ ├── user-list │ │ │ └── index.tsx │ │ └── work-list │ │ │ └── index.tsx │ ├── search-result │ │ ├── label-info │ │ │ └── index.tsx │ │ ├── user-list │ │ │ └── index.tsx │ │ └── work-list │ │ │ └── index.tsx │ ├── skeleton │ │ ├── favorite-list.tsx │ │ ├── favorite-work-list.tsx │ │ ├── img-loading.tsx │ │ ├── label-list.tsx │ │ ├── user-list.tsx │ │ └── work-list.tsx │ ├── upload │ │ ├── form │ │ │ └── index.tsx │ │ ├── img-upload │ │ │ ├── draggable-img.tsx │ │ │ └── index.tsx │ │ └── success │ │ │ └── index.tsx │ └── work-detail │ │ ├── comments │ │ ├── comment.tsx │ │ ├── index.tsx │ │ └── input-window.tsx │ │ ├── user-info │ │ └── index.tsx │ │ ├── view-list │ │ └── index.tsx │ │ ├── work-info │ │ └── index.tsx │ │ └── work-slide-window │ │ └── index.tsx ├── hooks │ ├── index.ts │ ├── useAtBottom.ts │ ├── useAtTop.ts │ ├── useFloat.ts │ ├── useLoading.ts │ ├── useMap.ts │ └── useWinChange.ts ├── main.tsx ├── pages │ ├── error │ │ └── index.tsx │ ├── explore │ │ └── index.tsx │ ├── followed-new │ │ └── index.tsx │ ├── home │ │ └── index.tsx │ ├── illustrator │ │ └── index.tsx │ ├── login │ │ └── index.tsx │ ├── not-found │ │ └── index.tsx │ ├── personal-center │ │ ├── index.tsx │ │ ├── my-fans │ │ │ └── index.tsx │ │ ├── my-favorites │ │ │ └── index.tsx │ │ ├── my-follow │ │ │ └── index.tsx │ │ ├── my-history │ │ │ └── index.tsx │ │ ├── my-likes │ │ │ └── index.tsx │ │ └── my-works │ │ │ └── index.tsx │ ├── search-result │ │ └── index.tsx │ ├── upload │ │ └── index.tsx │ └── work-detail │ │ └── index.tsx ├── router │ ├── index.tsx │ └── utils │ │ ├── auth-router.tsx │ │ ├── auto-top.tsx │ │ ├── lazy-load.tsx │ │ └── personal-page.tsx ├── service │ ├── index.ts │ └── request │ │ ├── index.ts │ │ └── types.ts ├── store │ ├── index.ts │ ├── modules │ │ ├── favorites.ts │ │ ├── searchHistory.ts │ │ ├── uploadForm.ts │ │ ├── user.ts │ │ └── viewList.ts │ └── types.ts ├── styles │ └── index.css ├── utils │ ├── base64ToFile.ts │ ├── cn.ts │ ├── colorHue.ts │ ├── constants.ts │ ├── detectPixiv.ts │ ├── download.ts │ ├── index.ts │ ├── sleep.ts │ ├── tempId.ts │ └── types.ts └── vite-env.d.ts ├── tsconfig.json ├── tsconfig.node.json ├── uno.config.ts ├── vite-env.d.ts └── vite.config.ts /.env: -------------------------------------------------------------------------------- 1 | VITE_APP_TITLE=Picals 2 | VITE_PORT=3030 3 | VITE_BASE=/ -------------------------------------------------------------------------------- /.env.development: -------------------------------------------------------------------------------- 1 | VITE_BASE_URL=http://localhost:0721 -------------------------------------------------------------------------------- /.env.production: -------------------------------------------------------------------------------- 1 | VITE_BASE_URL=https://picals-api.caelum.moe -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |