@serifpersia/dango 3.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +258 -0
- package/client/dist/assets/AnimeCard-B5A20jAI.js +1 -0
- package/client/dist/assets/AnimeInfo-0huPAq0O.js +1 -0
- package/client/dist/assets/AnimeInfo-BFWtHlPC.css +1 -0
- package/client/dist/assets/AnimeInfoPage-Dqr5QH6R.js +2 -0
- package/client/dist/assets/AnimeMetaDetails-BPvv5xIl.js +1 -0
- package/client/dist/assets/AnimeMetaDetails-BwNQnRCd.css +1 -0
- package/client/dist/assets/Asmr-B6ZiqkmU.js +2 -0
- package/client/dist/assets/Asmr-Cq2ua6Zk.css +1 -0
- package/client/dist/assets/Asmr.module-ChUXDZKx.js +1 -0
- package/client/dist/assets/AsmrResetProgressModal-Cqsoo3XC.js +1 -0
- package/client/dist/assets/AvSyncCalibrator-C1_iBSyL.css +1 -0
- package/client/dist/assets/AvSyncCalibrator-C8ZoIwMY.js +10 -0
- package/client/dist/assets/ErrorMessage-CXoRbrLN.css +1 -0
- package/client/dist/assets/ErrorMessage-z4f4WGgP.js +1 -0
- package/client/dist/assets/Home-DtRtTuI9.css +1 -0
- package/client/dist/assets/Home-thJhPfs1.js +1 -0
- package/client/dist/assets/Insights-DKtoVe6L.css +1 -0
- package/client/dist/assets/Insights-ZlgPrzGD.js +1 -0
- package/client/dist/assets/LibraryListPage-CCiee-Ot.js +1 -0
- package/client/dist/assets/ListeningList-ctAz_6Zi.js +1 -0
- package/client/dist/assets/Manga-BI9WMTx5.js +1 -0
- package/client/dist/assets/Manga-Dp_-l1Pw.css +1 -0
- package/client/dist/assets/Manga.module-BcfOdsNP.js +1 -0
- package/client/dist/assets/MangaInfoPage-DcrEr7Sk.js +1 -0
- package/client/dist/assets/MangaReadPage-SYg63m48.js +1 -0
- package/client/dist/assets/MangaResetProgressModal-DX-1PS4h.js +1 -0
- package/client/dist/assets/Map-CXFqXmsZ.css +1 -0
- package/client/dist/assets/Map-Dj51g5zL.js +1 -0
- package/client/dist/assets/Mature-DJmUUtlF.css +1 -0
- package/client/dist/assets/Mature-Dqh_9SA3.js +1 -0
- package/client/dist/assets/MediaCard-Be1ST9oj.js +1 -0
- package/client/dist/assets/MediaCard-DB6Yjgky.css +1 -0
- package/client/dist/assets/Music-BGH_0voi.css +1 -0
- package/client/dist/assets/Music-zsPwT8_5.js +1 -0
- package/client/dist/assets/OptionListMenu-Drc_vybW.js +1 -0
- package/client/dist/assets/Player-B036Ic3m.css +1 -0
- package/client/dist/assets/Player-BEtAYps2.js +56 -0
- package/client/dist/assets/PlayerRedirect-D70t8VUW.js +1 -0
- package/client/dist/assets/PlayerSettings-Bj6SsmQ2.css +1 -0
- package/client/dist/assets/PlayerSettings-Cwoji-P7.js +1 -0
- package/client/dist/assets/QueueOptionsButton-B6BMq66e.js +1 -0
- package/client/dist/assets/QueueOptionsButton-CM15uQn8.css +1 -0
- package/client/dist/assets/QueueRail-BUYEjdaq.css +1 -0
- package/client/dist/assets/QueueRail-VxpUDBSm.js +1 -0
- package/client/dist/assets/Radio-B2Q_Egj7.js +1 -0
- package/client/dist/assets/Radio-CCHNFN7R.css +1 -0
- package/client/dist/assets/Radio.module-DGSZLpKM.js +1 -0
- package/client/dist/assets/ReadingList-O0QPwXu7.js +1 -0
- package/client/dist/assets/ResetProgressModal-CR_ovLAu.js +1 -0
- package/client/dist/assets/Search-C8e2nlDD.js +1 -0
- package/client/dist/assets/Search-Cs45oAwI.css +1 -0
- package/client/dist/assets/Search.module-CMEai-B-.js +1 -0
- package/client/dist/assets/Settings-AuFxQcJF.css +1 -0
- package/client/dist/assets/Settings-BgPWBl2V.js +21 -0
- package/client/dist/assets/SkeletonGrid-CtHKKMLj.js +1 -0
- package/client/dist/assets/SkeletonGrid-DhPYefXr.css +1 -0
- package/client/dist/assets/SynopsisText-BcpwT5iw.js +1 -0
- package/client/dist/assets/SynopsisText-CYv2W3yR.css +1 -0
- package/client/dist/assets/Trackers-Bfoiyuzy.js +2 -0
- package/client/dist/assets/Trackers-D5XBOCDp.css +1 -0
- package/client/dist/assets/Tv-Ca0fCdko.js +3 -0
- package/client/dist/assets/Tv-CuEl3Iol.css +1 -0
- package/client/dist/assets/TvInfo-Bu36xJyO.css +1 -0
- package/client/dist/assets/TvInfo-D_scgw_h.js +1 -0
- package/client/dist/assets/TvPopup-YTI7dEbJ.js +1 -0
- package/client/dist/assets/TvSearch-CxU33UOf.js +1 -0
- package/client/dist/assets/TvWatchlist-B4X1fWEH.js +1 -0
- package/client/dist/assets/VirtualKeyboard-6ZNTym4R.js +1 -0
- package/client/dist/assets/VirtualKeyboard-KIPc5ZGH.css +1 -0
- package/client/dist/assets/Watchlist-BiDEU0iV.css +1 -0
- package/client/dist/assets/Watchlist-P6YMZUdF.js +1 -0
- package/client/dist/assets/Watchlist.module-XGtVQr1d.js +1 -0
- package/client/dist/assets/hls-BOLXTnjL.js +42 -0
- package/client/dist/assets/hls-C4cG9wQw.js +1 -0
- package/client/dist/assets/index-BOKlZEHq.js +30354 -0
- package/client/dist/assets/index-CUm1meqr.css +1 -0
- package/client/dist/assets/index-IZgh1beL.js +178 -0
- package/client/dist/assets/useAnimeInfoData-DeuwDSnI.js +1 -0
- package/client/dist/assets/useAsmr-CbMVRjmV.js +1 -0
- package/client/dist/assets/useAsmrPopup-D91Q3CBg.js +1 -0
- package/client/dist/assets/useIsMobile-Dm_b6Ob3.js +1 -0
- package/client/dist/assets/useMangaLibrary-BPvFb1lU.js +1 -0
- package/client/dist/assets/useMangaPopup-BOL2mQJs.js +1 -0
- package/client/dist/assets/useMatureConsent-CT7-KfzG.js +1 -0
- package/client/dist/assets/useProviders-BsRGONMA.js +1 -0
- package/client/dist/assets/useTv-D37MfTHA.js +1 -0
- package/client/dist/assets/useTvLibrary-Cwxgy_Bg.js +1 -0
- package/client/dist/assets/vendor-core-8R2fFbyN.js +1 -0
- package/client/dist/assets/vendor-icons-CDMuNDeL.js +1 -0
- package/client/dist/assets/vendor-query-BXRECSI6.js +1 -0
- package/client/dist/assets/vendor-ui-CUDCvRS_.js +1 -0
- package/client/dist/av-sync-test.mp4 +0 -0
- package/client/dist/favicon.ico +0 -0
- package/client/dist/index.html +46 -0
- package/client/dist/logo-mochi.png +0 -0
- package/client/dist/logo-sakura.png +0 -0
- package/client/dist/logo.png +0 -0
- package/client/dist/placeholder.svg +4 -0
- package/client/dist/robots.txt +3 -0
- package/orchestrator.js +534 -0
- package/package.json +85 -0
- package/server/dist/app-auth.js +177 -0
- package/server/dist/config.js +175 -0
- package/server/dist/controllers/asmr-library.controller.js +288 -0
- package/server/dist/controllers/auth.controller.js +225 -0
- package/server/dist/controllers/data.controller.js +766 -0
- package/server/dist/controllers/insights.controller.js +198 -0
- package/server/dist/controllers/manga-library.controller.js +296 -0
- package/server/dist/controllers/music.controller.js +698 -0
- package/server/dist/controllers/proxy.controller.js +820 -0
- package/server/dist/controllers/settings.controller.js +609 -0
- package/server/dist/controllers/tv-library.controller.js +310 -0
- package/server/dist/controllers/watchlist.controller.js +1015 -0
- package/server/dist/db.js +145 -0
- package/server/dist/discord-gateway.js +391 -0
- package/server/dist/discord-rpc.js +427 -0
- package/server/dist/github-sync.js +512 -0
- package/server/dist/google.js +748 -0
- package/server/dist/lib/anilist.js +1549 -0
- package/server/dist/lib/anischedule.js +194 -0
- package/server/dist/lib/discord-roles-sync.service.js +130 -0
- package/server/dist/lib/ipc.js +24 -0
- package/server/dist/lib/kitsu.js +544 -0
- package/server/dist/lib/mal.js +934 -0
- package/server/dist/lib/migration.js +329 -0
- package/server/dist/lib/offline-db.js +401 -0
- package/server/dist/lib/temp-ids.js +3 -0
- package/server/dist/lib/tmdb.js +72 -0
- package/server/dist/lib/tracker/anilist-tracker.js +245 -0
- package/server/dist/lib/tracker/sync.service.js +496 -0
- package/server/dist/lib/ytmusic.js +125 -0
- package/server/dist/logger.js +16 -0
- package/server/dist/providers/manga/manga.types.js +7 -0
- package/server/dist/providers/provider.interface.js +1 -0
- package/server/dist/providers/remote-loader.js +574 -0
- package/server/dist/providers/remote-types.js +117 -0
- package/server/dist/providers/title-matching.js +225 -0
- package/server/dist/providers/tv.types.js +1 -0
- package/server/dist/rclone.js +120 -0
- package/server/dist/repositories/asmr.repository.js +123 -0
- package/server/dist/repositories/insights.repository.js +85 -0
- package/server/dist/repositories/library.repository.js +108 -0
- package/server/dist/repositories/mal-cache.repository.js +55 -0
- package/server/dist/repositories/manga.repository.js +138 -0
- package/server/dist/repositories/notifications.repository.js +41 -0
- package/server/dist/repositories/queue.repository.js +61 -0
- package/server/dist/repositories/settings.repository.js +12 -0
- package/server/dist/repositories/shows-meta.repository.js +42 -0
- package/server/dist/repositories/temp-show-ids.repository.js +51 -0
- package/server/dist/repositories/tv.repository.js +151 -0
- package/server/dist/repositories/watched-episodes.repository.js +52 -0
- package/server/dist/repositories/watchlist.repository.js +71 -0
- package/server/dist/request-logger.js +16 -0
- package/server/dist/routes/asmr-library.routes.js +23 -0
- package/server/dist/routes/asmr.routes.js +81 -0
- package/server/dist/routes/auth.routes.js +25 -0
- package/server/dist/routes/data.routes.js +47 -0
- package/server/dist/routes/discord-gateway.routes.js +51 -0
- package/server/dist/routes/insights.routes.js +34 -0
- package/server/dist/routes/lan-auth.routes.js +46 -0
- package/server/dist/routes/manga-library.routes.js +23 -0
- package/server/dist/routes/manga.routes.js +141 -0
- package/server/dist/routes/music.routes.js +20 -0
- package/server/dist/routes/providers.routes.js +17 -0
- package/server/dist/routes/proxy.routes.js +12 -0
- package/server/dist/routes/radio.routes.js +138 -0
- package/server/dist/routes/settings.routes.js +24 -0
- package/server/dist/routes/tracker.routes.js +164 -0
- package/server/dist/routes/translate.routes.js +88 -0
- package/server/dist/routes/tv-library.routes.js +23 -0
- package/server/dist/routes/tv.routes.js +629 -0
- package/server/dist/routes/watchlist.routes.js +341 -0
- package/server/dist/scripts/backfill-episode-duration.js +42 -0
- package/server/dist/server.js +529 -0
- package/server/dist/shipped-defaults.js +7 -0
- package/server/dist/sync-config.js +23 -0
- package/server/dist/sync-payload.js +91 -0
- package/server/dist/sync.js +1128 -0
- package/server/dist/utils/cache.utils.js +25 -0
- package/server/dist/utils/cookie.utils.js +13 -0
- package/server/dist/utils/db-utils.js +9 -0
- package/server/dist/utils/env.utils.js +77 -0
- package/server/dist/utils/http.utils.js +70 -0
- package/server/dist/utils/machine-id.js +40 -0
- package/server/dist/utils/megaplay.utils.js +41 -0
- package/server/dist/utils/request-context.js +2 -0
- package/server/dist/utils/security.utils.js +94 -0
- package/server/package.json +44 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 serifpersia
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="client/public/logo.png" alt="dango logo" width="400"/>
|
|
4
|
+
|
|
5
|
+
_A local-first anime web app focused on performance, privacy, and personal library tracking._
|
|
6
|
+
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+

|
|
9
|
+
[](https://github.com/serifpersia/dango)
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
[](https://dango-users-badge.ramiserifpersia.workers.dev/?view=status)
|
|
14
|
+
|
|
15
|
+

|
|
16
|
+
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
**dango** is a lightweight, self-hosted Node.js application built for querying anime metadata, managing personal watchlists, and logging viewing progress through a fast local interface.
|
|
22
|
+
|
|
23
|
+
## Highlights
|
|
24
|
+
|
|
25
|
+
- **Hardware Efficient:** Engineered with a minimal footprint to run effortlessly on low-spec hardware, SBCs, and mobile environments.
|
|
26
|
+
- **Metadata & Discovery:** Browse trending titles, search catalog entries, and view release schedules locally.
|
|
27
|
+
- **Multi-Provider Playback:** Switch seamlessly between multiple third-party streaming providers directly within the player interface.
|
|
28
|
+
- **Watchlist Tracking:** Categorize titles (Watching, Completed, Plan to Watch) with fine-grained progress states.
|
|
29
|
+
- **Library Insights:** Built-in dashboard tracking viewing habits, personal stats, and completion ratios.
|
|
30
|
+
- **Trackers & Sync:** Bi-directional AniList sync and one-way MyAnimeList list imports.
|
|
31
|
+
- **Expanded Media Hub:** Dedicated interfaces for Manga, ASMR, Youtube Music, Internet Radio and TV/Movies.
|
|
32
|
+
- **LAN Security:** Optional LAN authentication with password enforcement for multi-device local network deployments.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Installation
|
|
37
|
+
|
|
38
|
+
### Prerequisites
|
|
39
|
+
|
|
40
|
+
| Requirement | Supported Version | Notes |
|
|
41
|
+
| :---------- | :--------------------- | :-------------------------------------------------------- |
|
|
42
|
+
| **Node.js** | `>= 22.12.0` | Required runtime ([Download](https://nodejs.org/)) |
|
|
43
|
+
| **npm** | Bundled with Node | Global install (`npm install -g @serifpersia/dango`) |
|
|
44
|
+
| **pnpm** | `11` (`npm i -g pnpm`) | Only needed for source development (`run.bat` / `run.sh`) |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
### Quick Install (CLI)
|
|
49
|
+
|
|
50
|
+
Install the global CLI binary via npm:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm install -g @serifpersia/dango
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Launch the interface from anywhere:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
dango
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
> [!IMPORTANT]
|
|
63
|
+
> Once the server initializes, navigate to `http://localhost:3000` in your browser. The background process runs locally until terminated (`Ctrl + C or q key press as well as window X button closing action`).
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
### Release Zip (no install)
|
|
68
|
+
|
|
69
|
+
No `npm install` needed — dependencies ship inside the zip, client is prebuilt:
|
|
70
|
+
|
|
71
|
+
1. Download and extract `dango.zip` from [Releases](https://github.com/serifpersia/dango/releases).
|
|
72
|
+
2. Install Node.js 22.12+ (`node --version` to check).
|
|
73
|
+
3. Launch using `run.bat` (Windows) or `./run.sh` (Linux/macOS), then open `http://localhost:3000`.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
### Android Installation
|
|
78
|
+
|
|
79
|
+
<details>
|
|
80
|
+
<summary><b>Option 1: Termux Environment</b></summary>
|
|
81
|
+
|
|
82
|
+
<br>
|
|
83
|
+
|
|
84
|
+
Run standard dango via Termux:
|
|
85
|
+
|
|
86
|
+
1. Install **[Termux](https://termux.dev/)** (obtain via [F-Droid](https://f-droid.org/en/packages/com.termux/)).
|
|
87
|
+
2. Update base dependencies:
|
|
88
|
+
```bash
|
|
89
|
+
pkg update
|
|
90
|
+
```
|
|
91
|
+
```bash
|
|
92
|
+
pkg upgrade -y
|
|
93
|
+
```
|
|
94
|
+
3. Install Node.js:
|
|
95
|
+
```bash
|
|
96
|
+
pkg install nodejs -y
|
|
97
|
+
```
|
|
98
|
+
4. Install and run dango:
|
|
99
|
+
```bash
|
|
100
|
+
npm install -g @serifpersia/dango
|
|
101
|
+
dango
|
|
102
|
+
```
|
|
103
|
+
5. Open your mobile browser at `http://localhost:3000`.
|
|
104
|
+
|
|
105
|
+
</details>
|
|
106
|
+
|
|
107
|
+
<details>
|
|
108
|
+
<summary><b>Option 2: Standalone APK</b></summary>
|
|
109
|
+
|
|
110
|
+
<br>
|
|
111
|
+
|
|
112
|
+
A standalone bundle packaging Node.js, dango, and a local WebView container.
|
|
113
|
+
|
|
114
|
+
1. Grab the latest `.apk` from [Releases](https://github.com/serifpersia/dango/releases).
|
|
115
|
+
2. Install the APK (allow _Install from Unknown Sources_ when prompted).
|
|
116
|
+
3. Open the app. Core runtimes auto-provision on first launch.
|
|
117
|
+
|
|
118
|
+
**Compiling from Source:**
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
cd android-app
|
|
122
|
+
python fetch-termux-node.py
|
|
123
|
+
|
|
124
|
+
# Windows
|
|
125
|
+
build-debug.bat
|
|
126
|
+
|
|
127
|
+
# Linux / macOS
|
|
128
|
+
chmod +x build-debug.sh && ./build-debug.sh
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
_Build requirements: Python 3, JDK 17+, Android SDK (Platform 36, Build-Tools 36.0.0)._
|
|
132
|
+
|
|
133
|
+
</details>
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Manual Setup (Development)
|
|
138
|
+
|
|
139
|
+
The project is structured as a **pnpm workspace** (`client` and `server`) managed by a unified lockfile. You need Node.js 22.12+ and pnpm 11 (`npm install -g pnpm`).
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# Clone the repository
|
|
143
|
+
git clone https://github.com/serifpersia/dango.git
|
|
144
|
+
cd dango
|
|
145
|
+
|
|
146
|
+
# Install dependencies (root + workspaces)
|
|
147
|
+
pnpm install
|
|
148
|
+
|
|
149
|
+
# Compile workspaces (Vite frontend + tsc backend)
|
|
150
|
+
pnpm run build
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Run via interactive environment scripts:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# Linux / macOS
|
|
157
|
+
chmod +x run.sh && ./run.sh
|
|
158
|
+
|
|
159
|
+
# Windows
|
|
160
|
+
run.bat
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Command Reference
|
|
164
|
+
|
|
165
|
+
| Command | Action |
|
|
166
|
+
| :----------------------------------- | :----------------------------------------- |
|
|
167
|
+
| `dango` | Start the installed client daemon |
|
|
168
|
+
| `dango --version` | Display current installed version |
|
|
169
|
+
| `pnpm run dev` | Start full dev stack via `orchestrator.js` |
|
|
170
|
+
| `pnpm --filter dango-client run dev` | Run Vite frontend independently |
|
|
171
|
+
| `pnpm --filter dango-server run dev` | Run backend via `tsx watch` |
|
|
172
|
+
| `pnpm -r run lint` | Run ESLint passes across all packages |
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Storage & Persistence
|
|
177
|
+
|
|
178
|
+
dango stores SQLite databases, cached indices, and credentials in the OS application data registry rather than the global `node_modules` path:
|
|
179
|
+
|
|
180
|
+
| Platform | Default Path |
|
|
181
|
+
| :---------- | :----------------------------------------------- |
|
|
182
|
+
| **Windows** | `%APPDATA%\dango` |
|
|
183
|
+
| **macOS** | `~/Library/Application Support/dango` |
|
|
184
|
+
| **Linux** | `$XDG_DATA_HOME/dango` or `~/.local/share/dango` |
|
|
185
|
+
|
|
186
|
+
> [!IMPORTANT]
|
|
187
|
+
> Legacy installs will automatically migrate `.env` variables and SQLite records from older `server/` structures into the proper user directory on launch.
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Data Synchronization
|
|
192
|
+
|
|
193
|
+
dango is **local-first**: primary application state lives in your local SQLite store. Cloud syncing creates point-in-time JSON snapshots to maintain seamless backups across multiple installations.
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
Sync Priority Engine:
|
|
197
|
+
[1] GitHub Sync ──(fallback)──> [2] Google Drive ──(fallback)──> [3] Rclone
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### 1. GitHub Sync
|
|
201
|
+
|
|
202
|
+
1. Open **Settings → Synchronization**.
|
|
203
|
+
2. Click **Sign in with GitHub**.
|
|
204
|
+
3. Authorize via the OAuth device code flow.
|
|
205
|
+
|
|
206
|
+
dango creates a private repository named `dango-sync-data` to read/write JSON snapshots (`sync.json` for production, `sync.dev.json` for development).
|
|
207
|
+
|
|
208
|
+
### 2. Google Drive
|
|
209
|
+
|
|
210
|
+
1. Open **Settings → Synchronization**.
|
|
211
|
+
2. Click **Sign in with Google** and authorize permissions.
|
|
212
|
+
|
|
213
|
+
Data writes directly to a sandbox `appDataFolder` on your personal Drive. To clear backups, revoke app permissions under Google Drive's _Manage Apps_ menu.
|
|
214
|
+
|
|
215
|
+
> [!IMPORTANT]
|
|
216
|
+
> Advanced users can supply their own custom Github and Google OAuth Client ID & Secret in settings.
|
|
217
|
+
|
|
218
|
+
### 3. Rclone (Third-Party Remotes)
|
|
219
|
+
|
|
220
|
+
Used as a manual fallback for services like Mega, Dropbox, or custom WebDAV:
|
|
221
|
+
|
|
222
|
+
1. Ensure `rclone` is installed and mapped to your system `PATH`.
|
|
223
|
+
2. Configure your desired target via `rclone config`.
|
|
224
|
+
3. Pick your configured remote profile inside **Settings → Synchronization**.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Tracker Integrations
|
|
229
|
+
|
|
230
|
+
### AniList
|
|
231
|
+
|
|
232
|
+
Bidirectional sync is fully supported:
|
|
233
|
+
|
|
234
|
+
- Go to **Trackers** in the navigation panel.
|
|
235
|
+
- Select **Sync Now**.
|
|
236
|
+
- Local episode progress updates remotely; external catalog updates merge safely into your local database without overwriting uncommitted states.
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Community
|
|
241
|
+
|
|
242
|
+
Need help configuring your setup, troubleshooting builds, discussing feature requests or simply just chat about anime?
|
|
243
|
+
|
|
244
|
+
<div align="left">
|
|
245
|
+
|
|
246
|
+
[](https://discord.gg/2FTSPXCsvn)
|
|
247
|
+
|
|
248
|
+
</div>
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Disclaimer & Legal
|
|
253
|
+
|
|
254
|
+
dango is an open-source, local-first web app. It does not host or distribute unauthorized media or copyrighted video assets. Users are solely responsible for ensuring their usage aligns with relevant local laws and digital copyright regulations.
|
|
255
|
+
|
|
256
|
+
## License
|
|
257
|
+
|
|
258
|
+
Distributed under the terms of the [MIT License](LICENSE).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{T as P,d as I,A as T,u as s,S as B,L as M,N as C}from"./vendor-core-8R2fFbyN.js";import{I as o}from"./vendor-icons-CDMuNDeL.js";import{u as D}from"./useAnimeInfoData-DeuwDSnI.js";import{d as z,s as R,e as A}from"./index-IZgh1beL.js";import{Q as x}from"./QueueOptionsButton-B6BMq66e.js";import{p as t,a as _,m as $,M as L}from"./MediaCard-Be1ST9oj.js";const k=({showId:e,anchorRect:l,onMouseEnter:m,onMouseLeave:h,onRequestClose:N})=>{const{showMeta:a,loadingMeta:r,inWatchlist:u,toggleWatchlist:f}=D(e),{titlePreference:n}=z(),d=P(()=>a?.name?n==="name"?a.name:n==="nativeName"?a.names?.native||a.name:n==="englishName"&&a.names?.english||a.name:"",[a,n]),[g,b]=I(!1),p=T(!1),y=()=>{p.current=!0,m()},w=()=>{p.current=!1,!g&&h()},c=i=>{b(i),!i&&!p.current&&h()};return s(_,{anchorRect:l,onMouseEnter:y,onMouseLeave:w,onRequestClose:N,children:r?s("div",{className:t.loading,children:[s("div",{className:t.spinner}),s("span",{children:"Fetching details..."})]}):a?s(B,{children:[s("div",{className:t.header,children:s("div",{className:t.title,children:d})}),s("div",{className:t.body,children:[s("div",{className:t.metaRow,children:[a.score&&s("div",{className:t.metaItem,children:[s(o,{name:"star",className:t.scoreIcon,size:14}),s("span",{children:a.score})]}),a.status&&s("div",{className:t.metaItem,children:[s(o,{name:"tv",size:14}),s("span",{children:a.status})]})]}),s("div",{className:t.synopsis,children:a.description?R(a.description):"No synopsis available."}),s("div",{className:t.details,children:[a.nextEpisodeAirDate&&s("div",{className:t.detailItem,children:[s("strong",{children:"Aired:"})," ",a.nextEpisodeAirDate]}),Array.isArray(a.genres)&&a.genres.length>0&&s("div",{className:t.genres,children:a.genres.filter(Boolean).slice(0,4).map(i=>{const E=typeof i=="string"?i:i?.name;return s("span",{className:t.genre,children:E},E)})})]})]}),s("div",{className:t.footer,children:[s("div",{className:t.primaryAction,children:s(M,{to:`/watch/${a?.id||e}`,className:t.watchBtn,children:[s(o,{name:"play",size:14}),"Watch now"]})}),s("div",{className:t.secondaryActions,children:[s("button",{className:`${t.watchlistBtn} ${u?t.active:""}`,onClick:i=>{i.preventDefault(),i.stopPropagation(),f()},children:[u?s(o,{name:"check",size:12}):s(o,{name:"plus",size:12}),s("span",{children:u?"Remove":"Watchlist"})]}),s(x,{showId:e,showName:a.name||a.names?.romaji,showThumbnail:a.thumbnail,nativeName:a.names?.native,englishName:a.names?.english,showType:a.type,className:t.watchlistBtn,activeClassName:t.active,align:"left",onMenuOpenChange:c}),s(M,{to:`/anime/${a?.id||e}`,className:t.detailsBtn,children:"Read more"})]})]})]}):s("div",{className:t.loading,children:"Failed to load info."})})},q=C(({anime:e,continueWatching:l=!1,onRemove:m,config:h,layout:N="vertical"})=>{const a=e.currentTime||0,r=e.duration||0,u=a>5&&r>5&&a<r*.95,f=a>0&&(r<=5||a>=r*.95),n=e.episodeNumber,d=l?{pathname:n?`/watch/${e._id}/${n}`:`/watch/${e._id}`,state:{name:e.name,thumbnail:e.thumbnail,nativeName:e.nativeName,englishName:e.englishName,type:e.type}}:n?`/watch/${e._id}/${n}`:`/anime/${e._id}`,g=(()=>{if(typeof d=="string")return d.startsWith("/watch/");const c=d.pathname;return typeof c=="string"&&c.startsWith("/watch/")})(),b=l&&n?`EP ${n}`:e.watchedCount!==void 0&&e.watchedCount>0?`EP ${e.watchedCount}`:null,p=[e.airTime,e.aired===!1&&e.nextEpisodeAirDate?`· ${e.nextEpisodeAirDate.split(",")[0]}`:""].filter(Boolean).join(" "),y=e.isAdult||e.rating==="R+"||e.rating==="Rx"||e.rating?.includes("17+"),w=s(B,{children:[(e.availableEpisodesDetail?.sub||e.availableEpisodes?.sub)&&s("div",{className:$.metaItem,children:[s(o,{name:"closed-captioning",size:10}),e.availableEpisodesDetail?.sub?.length??e.availableEpisodes?.sub]}),(e.availableEpisodesDetail?.dub||e.availableEpisodes?.dub)&&s("div",{className:$.metaItem,children:[s(o,{name:"microphone",size:10}),e.availableEpisodesDetail?.dub?.length??e.availableEpisodes?.dub]})]});return s(L,{item:{id:e.id||e.showId||e._id,title:e.name,nativeName:e.nativeName,englishName:e.englishName,thumbnail:e.thumbnail,typeBadge:e.type||"TV",chapterBadge:b,airMeta:p||void 0,isAdult:y,notAired:e.aired===!1},linkTo:d,hoverIcon:g?"play":"info",progress:u?{percent:a/r*100,label:`${A(a)} / ${A(r)}`}:f?{percent:100,label:"Watched"}:void 0,showProgress:l,metaRow:w,display:h,layout:N,onRemove:m,showRemoveButton:h?.elements?.poster?.removeButton??(l&&!!m),showInfoButton:!l,enrichedId:e._id,renderPopup:(c,v)=>s(k,{showId:e._id,anchorRect:c,onMouseEnter:v.onMouseEnter,onMouseLeave:v.onMouseLeave,onRequestClose:v.close})})});export{q as A};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as C,a as I,d as S,h as p,T,u as e}from"./vendor-core-8R2fFbyN.js";import{I as s}from"./vendor-icons-CDMuNDeL.js";import{u as b}from"./useAnimeInfoData-DeuwDSnI.js";import{d as B,f as d,s as w,M,B as u}from"./index-IZgh1beL.js";import{u as x}from"./useMatureConsent-CT7-KfzG.js";import{A}from"./AnimeMetaDetails-BPvv5xIl.js";import{S as D}from"./SynopsisText-BcpwT5iw.js";import{Q as G}from"./QueueOptionsButton-B6BMq66e.js";import"./vendor-query-BXRECSI6.js";import"./useIsMobile-Dm_b6Ob3.js";import"./vendor-ui-CUDCvRS_.js";const P="_container_1287q_1",W="_heroSection_1287q_11",O="_bannerContainer_1287q_17",$="_banner_1287q_17",U="_bannerOverlay_1287q_37",j="_heroContent_1287q_49",z="_posterContainer_1287q_62",V="_floatIn_1287q_1",Q="_poster_1287q_62",E="_infoGlass_1287q_86",H="_slideUpIn_1287q_1",F="_title_1287q_100",J="_quickMeta_1287q_109",K="_metaItem_1287q_117",L="_iconStar_1287q_126",R="_iconTv_1287q_129",X="_iconType_1287q_132",Y="_iconClock_1287q_135",Z="_genres_1287q_139",ee="_genre_1287q_139",ne="_synopsisSection_1287q_165",te="_sectionTitleSmall_1287q_170",se="_description_1287q_178",ae="_actions_1287q_186",ie="_watchBtn_1287q_192",oe="_watchlistBtn_1287q_214",le="_active_1287q_234",ce="_detailsSection_1287q_241",re="_detailsToggleBtn_1287q_247",de="_expandedContent_1287q_270",_e="_fadeIn_1287q_1",me="_detailsGridContainer_1287q_274",he="_detailItem_1287q_284",pe="_airingValue_1287q_303",ue="_loadingDetails_1287q_308",ve="_spinner_1287q_317",ge="_spin_1287q_317",ke="_heroSkeleton_1287q_332",qe="_skeletonBanner_1287q_336",fe="_skeletonPoster_1287q_337",Ne="_skeletonTitle_1287q_338",ye="_skeletonMeta_1287q_339",Ce="_skeletonDesc_1287q_340",Ie="_skeletonActions_1287q_341",Se="_skeletonContent_1287q_374",Te="_skeletonInfo_1287q_388",n={container:P,heroSection:W,bannerContainer:O,banner:$,bannerOverlay:U,heroContent:j,posterContainer:z,floatIn:V,poster:Q,infoGlass:E,slideUpIn:H,title:F,quickMeta:J,metaItem:K,iconStar:L,iconTv:R,iconType:X,iconClock:Y,genres:Z,genre:ee,synopsisSection:ne,sectionTitleSmall:te,description:se,actions:ae,watchBtn:ie,watchlistBtn:oe,active:le,detailsSection:ce,detailsToggleBtn:re,expandedContent:de,fadeIn:_e,detailsGridContainer:me,detailItem:he,airingValue:pe,loadingDetails:ue,spinner:ve,spin:ge,heroSkeleton:ke,skeletonBanner:qe,skeletonPoster:fe,skeletonTitle:Ne,skeletonMeta:ye,skeletonDesc:Ce,skeletonActions:Ie,"skeleton-wave":"_skeleton-wave_1287q_1",skeletonContent:Se,skeletonInfo:Te};function $e(){const{id:a}=C(),i=I(),{titlePreference:l}=B(),[o,v]=S(!1),{showMeta:t,loadingMeta:g,toggleWatchlist:k,inWatchlist:c}=b(a),{hasConsent:q,grant:f}=x();p(()=>{a&&t?.id&&t.id!==a&&i(`/anime/${t.id}`,{replace:!0})},[a,t,i]),p(()=>{document.title=t?.name?`${t.name} - dango`:"Anime - dango"},[t?.name]);const N=()=>t?.name?l==="name"?t.name:l==="nativeName"?t.names?.native||t.name:l==="englishName"&&t.names?.english||t.name:"",y=()=>{a&&i(`/watch/${a}`)},_=T(()=>t?.bannerImage?d(t.bannerImage):t?.thumbnail?d(t.thumbnail,1200,450):"",[t?.bannerImage,t?.thumbnail]);if(g||!t?.name)return e("div",{className:n.container,children:e("div",{className:n.heroSkeleton,children:[e("div",{className:n.skeletonBanner}),e("div",{className:n.skeletonContent,children:[e("div",{className:n.skeletonPoster}),e("div",{className:n.skeletonInfo,children:[e("div",{className:n.skeletonTitle}),e("div",{className:n.skeletonMeta}),e("div",{className:n.skeletonDesc}),e("div",{className:n.skeletonActions})]})]})]})});const m=t.isAdult===!0&&!q;return e("div",{className:n.container,style:m?{filter:"blur(14px)",pointerEvents:"none",userSelect:"none"}:void 0,children:[e("div",{className:n.heroSection,children:[e("div",{className:n.bannerContainer,children:[e("div",{className:n.banner,style:_?{backgroundImage:`url(${_})`}:void 0}),e("div",{className:n.bannerOverlay})]}),e("div",{className:n.heroContent,children:[e("div",{className:n.posterContainer,children:e("img",{src:d(t.thumbnail||"",320,480),alt:t.name,className:n.poster,decoding:"async"})}),e("div",{className:n.infoGlass,children:[e("div",{className:n.topInfo,children:[e("h1",{className:n.title,children:N()}),e("div",{className:n.quickMeta,children:[t.score&&e("div",{className:n.metaItem,children:[e(s,{name:"star",className:n.iconStar}),e("span",{children:t.score})]}),t.status&&e("div",{className:n.metaItem,children:[e(s,{name:"tv",className:n.iconTv}),e("span",{children:t.status})]}),t.type&&e("div",{className:n.metaItem,children:[e(s,{name:"layer-group",className:n.iconType}),e("span",{children:t.type})]})]}),Array.isArray(t.genres)&&t.genres.length>0&&e("div",{className:n.genres,children:t.genres.filter(Boolean).slice(0,5).map(r=>{const h=typeof r=="string"?r:r?.name;return e("span",{className:n.genre,children:h},h)})})]}),e("div",{className:n.synopsisSection,children:[e("h2",{className:n.sectionTitleSmall,children:"Synopsis"}),e(D,{text:w(t.description),emptyText:"No description available."})]}),e("div",{className:n.actions,children:[e("button",{className:n.watchBtn,onClick:y,children:[e(s,{name:"play",size:14}),"Start Watching"]}),e("button",{className:`${n.watchlistBtn} ${c?n.active:""}`,onClick:k,children:[c?e(s,{name:"check",size:14}):e(s,{name:"plus",size:14}),c?"In Watchlist":"Add to Watchlist"]}),e(G,{showId:a,showName:t.name||t.names?.romaji,showThumbnail:t.thumbnail,nativeName:t.names?.native,englishName:t.names?.english,showType:t.type,className:n.watchlistBtn,activeClassName:n.active})]})]})]})]}),e("div",{className:n.detailsSection,children:[e("button",{className:n.detailsToggleBtn,onClick:()=>{v(!o)},children:[o?e(s,{name:"chevron-up"}):e(s,{name:"chevron-down"}),o?"Hide Details":"Show Details"]}),o&&e("div",{className:n.expandedContent,children:e(A,{showMeta:t,styles:n})})]}),m&&e(M,{isOpen:!0,title:"Content Warning",onClose:()=>i("/"),children:e("div",{style:{padding:"1rem",textAlign:"center"},children:[e("p",{children:"This title contains mature content intended for adult audiences."}),e("p",{children:["By proceeding, you confirm that you are ",e("strong",{children:"18 years of age or older"})," (or the age of majority in your jurisdiction) and wish to view this content."]}),e("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[e(u,{variant:"secondary",onClick:()=>i("/"),children:"Go Back"}),e(u,{onClick:f,children:"I'm 18+, Continue"})]})]})})]})}export{$e as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._container_1287q_1{max-width:var(--max-width);margin:0 auto;padding:0;min-height:100vh;background:var(--bg-main);overflow-x:hidden}._heroSection_1287q_11{position:relative;width:100%;padding-bottom:var(--space-12)}._bannerContainer_1287q_17{position:absolute;top:0;left:0;right:0;height:500px;overflow:hidden;z-index:0}._banner_1287q_17{width:100%;height:100%;background-size:cover;background-position:center 20%;filter:brightness(.3) saturate(1.1);transform:scale(1.05);transition:transform var(--transition-slow)}._bannerOverlay_1287q_37{position:absolute;inset:0;background:linear-gradient(to bottom,rgba(5,5,5,.4) 0%,rgba(5,5,5,.7) 40%,var(--bg-main) 100%);box-shadow:inset 0 -100px 100px -20px var(--bg-main)}._heroContent_1287q_49{position:relative;z-index:1;display:grid;grid-template-columns:320px 1fr;gap:var(--space-10);max-width:1200px;margin:0 auto;padding:var(--space-16) var(--space-6) 0;align-items:flex-start}._posterContainer_1287q_62{position:sticky;top:120px;border-radius:var(--radius-lg);overflow:hidden;box-shadow:0 20px 50px #00000080;transform:translateY(0);animation:_floatIn_1287q_1 .8s var(--ease-spring);border:1px solid var(--border-secondary)}._poster_1287q_62{width:100%;display:block;object-fit:cover;aspect-ratio:2 / 3;transition:transform var(--transition-base)}._posterContainer_1287q_62:hover ._poster_1287q_62{transform:scale(1.05)}._infoGlass_1287q_86{background:var(--glass-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid var(--glass-border);border-radius:var(--radius-xl);padding:var(--space-8);box-shadow:var(--glass-shadow);animation:_slideUpIn_1287q_1 .8s var(--ease-smooth);display:flex;flex-direction:column;gap:var(--space-8)}._title_1287q_100{font-size:clamp(1.5rem,4vw,2.5rem);font-weight:800;color:var(--text-primary);line-height:1.1;margin:0 0 var(--space-4);letter-spacing:-.02em}._quickMeta_1287q_109{display:flex;flex-wrap:wrap;gap:var(--space-6);align-items:center;margin-bottom:var(--space-2)}._metaItem_1287q_117{display:flex;align-items:center;gap:var(--space-2);color:var(--text-secondary);font-size:var(--font-size-sm);font-weight:500}._iconStar_1287q_126{color:var(--accent-lighter)}._iconTv_1287q_129{color:var(--accent)}._iconType_1287q_132{color:var(--color-success)}._iconClock_1287q_135{color:#60a5fa}._genres_1287q_139{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-4)}._genre_1287q_139{background:#ffffff0d;padding:.4rem 1rem;border-radius:var(--radius-full);font-size:var(--font-size-sm);color:var(--text-secondary);border:1px solid var(--border-primary);transition:all var(--transition-fast);font-weight:500}._genre_1287q_139:hover{background:var(--accent);border-color:var(--accent);color:var(--accent-text);transform:translateY(-2px)}._synopsisSection_1287q_165{border-top:1px solid var(--border-primary);padding-top:var(--space-6)}._sectionTitleSmall_1287q_170{font-size:var(--font-size-sm);text-transform:uppercase;letter-spacing:.1em;color:var(--text-tertiary);margin-bottom:var(--space-3)}._description_1287q_178{font-size:var(--font-size-base);color:var(--text-secondary);line-height:1.7;max-width:800px}._actions_1287q_186{display:flex;gap:var(--space-4);margin-top:auto}._watchBtn_1287q_192{display:inline-flex;align-items:center;gap:var(--space-3);background:linear-gradient(135deg,var(--accent) 0%,var(--accent-dark) 100%);color:var(--accent-text);padding:.8rem 1.8rem;border-radius:var(--radius-md);font-weight:600;font-size:var(--font-size-sm);border:none;cursor:pointer;transition:all var(--transition-base);box-shadow:0 4px 15px var(--accent-glow)}._watchBtn_1287q_192:hover{transform:translateY(-2px);box-shadow:0 8px 25px var(--accent-glow);opacity:.95}._watchlistBtn_1287q_214{display:inline-flex;align-items:center;gap:var(--space-3);background:#ffffff0d;color:var(--text-primary);border:1px solid var(--border-secondary);padding:.8rem 1.8rem;border-radius:var(--radius-md);font-weight:600;font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-base)}._watchlistBtn_1287q_214:hover{background:#ffffff1a;border-color:var(--text-secondary)}._watchlistBtn_1287q_214._active_1287q_234{background:color-mix(in srgb,var(--color-success) 10%,transparent);border-color:var(--color-success);color:var(--color-success)}._detailsSection_1287q_241{max-width:1200px;margin:0 auto var(--space-16);padding:0 var(--space-6)}._detailsToggleBtn_1287q_247{display:flex;align-items:center;justify-content:center;gap:var(--space-3);width:100%;padding:var(--space-4);background:var(--bg-secondary);color:var(--text-secondary);border:1px solid var(--border-primary);border-radius:var(--radius-lg);font-weight:600;cursor:pointer;transition:all var(--transition-base);margin-bottom:var(--space-6)}._detailsToggleBtn_1287q_247:hover{background:var(--bg-tertiary);color:var(--text-primary);border-color:var(--border-secondary)}._expandedContent_1287q_270{animation:_fadeIn_1287q_1 .5s var(--ease-smooth)}._detailsGridContainer_1287q_274{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--space-6);padding:var(--space-8);background:var(--bg-secondary);border-radius:var(--radius-xl);border:1px solid var(--border-primary)}._detailItem_1287q_284{display:flex;flex-direction:column;gap:var(--space-1)}._detailItem_1287q_284 strong{font-size:.7rem;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.1em}._detailItem_1287q_284 span{font-size:var(--font-size-sm);color:var(--text-primary);font-weight:500}._airingValue_1287q_303{color:var(--accent-light)!important}._loadingDetails_1287q_308{display:flex;flex-direction:column;align-items:center;gap:var(--space-4);padding:var(--space-12);color:var(--text-tertiary)}._spinner_1287q_317{width:30px;height:30px;border:3px solid rgba(255,255,255,.1);border-top-color:var(--accent);border-radius:50%;animation:_spin_1287q_317 .8s linear infinite}@keyframes _spin_1287q_317{to{transform:rotate(360deg)}}._heroSkeleton_1287q_332{width:100%}._skeletonBanner_1287q_336,._skeletonPoster_1287q_337,._skeletonTitle_1287q_338,._skeletonMeta_1287q_339,._skeletonDesc_1287q_340,._skeletonActions_1287q_341{position:relative;overflow:hidden;background:var(--bg-tertiary)}._skeletonBanner_1287q_336:after,._skeletonPoster_1287q_337:after,._skeletonTitle_1287q_338:after,._skeletonMeta_1287q_339:after,._skeletonDesc_1287q_340:after,._skeletonActions_1287q_341:after{content:"";position:absolute;inset:0;transform:translate(-100%);background-image:linear-gradient(90deg,#fff0 0,#ffffff0d 20%,#ffffff1f 60%,#fff0);animation:_skeleton-wave_1287q_1 1.8s infinite ease-in-out}._skeletonBanner_1287q_336{height:400px}._skeletonContent_1287q_374{max-width:1200px;margin:-100px auto 0;padding:0 var(--space-6);display:grid;grid-template-columns:320px 1fr;gap:var(--space-10)}._skeletonPoster_1287q_337{height:480px;border-radius:var(--radius-lg)}._skeletonInfo_1287q_388{background:var(--bg-secondary);border-radius:var(--radius-xl);padding:var(--space-8);display:flex;flex-direction:column;gap:var(--space-6)}._skeletonTitle_1287q_338{height:40px;width:60%;border-radius:var(--radius-sm)}._skeletonMeta_1287q_339{height:24px;width:40%;border-radius:var(--radius-sm)}._skeletonDesc_1287q_340{height:160px;width:100%;border-radius:var(--radius-sm)}._skeletonActions_1287q_341{height:50px;width:50%;border-radius:var(--radius-sm)}@keyframes _floatIn_1287q_1{0%{opacity:0;transform:translateY(30px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes _slideUpIn_1287q_1{0%{opacity:0;transform:translateY(50px)}to{opacity:1;transform:translateY(0)}}@keyframes _fadeIn_1287q_1{0%{opacity:0}to{opacity:1}}@media(max-width:1024px){._heroContent_1287q_49{grid-template-columns:1fr;padding-top:var(--space-12)}._posterContainer_1287q_62{width:220px;margin:0 auto;position:relative;top:0}._infoGlass_1287q_86{margin-top:-40px;padding-top:var(--space-12);text-align:center}._quickMeta_1287q_109,._genres_1287q_139{justify-content:center}._actions_1287q_186{flex-direction:column}._watchBtn_1287q_192,._watchlistBtn_1287q_214{width:100%;justify-content:center}._skeletonContent_1287q_374{grid-template-columns:1fr}._skeletonPoster_1287q_337{width:220px;height:330px;margin:0 auto}}@media(max-width:768px){._heroSection_1287q_11{padding-bottom:var(--space-8)}._heroContent_1287q_49{grid-template-columns:1fr;gap:var(--space-6);padding:var(--space-12) var(--space-4) 0}._posterContainer_1287q_62{position:relative;top:0;max-width:240px;margin:0 auto;margin-bottom:var(--space-4);animation:none}._infoGlass_1287q_86{padding:var(--space-6);animation:none}}@media(max-width:480px){._infoGlass_1287q_86{padding:var(--space-6);animation:none}._title_1287q_100{font-size:1.5rem}._quickMeta_1287q_109{gap:var(--space-3)}._metaItem_1287q_117 span{font-size:.75rem}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AnimeInfo-0huPAq0O.js","assets/vendor-core-8R2fFbyN.js","assets/vendor-icons-CDMuNDeL.js","assets/useAnimeInfoData-DeuwDSnI.js","assets/vendor-query-BXRECSI6.js","assets/index-IZgh1beL.js","assets/index-CUm1meqr.css","assets/QueueOptionsButton-B6BMq66e.js","assets/vendor-ui-CUDCvRS_.js","assets/QueueOptionsButton-CM15uQn8.css","assets/useMatureConsent-CT7-KfzG.js","assets/AnimeMetaDetails-BPvv5xIl.js","assets/AnimeMetaDetails-BwNQnRCd.css","assets/SynopsisText-BcpwT5iw.js","assets/useIsMobile-Dm_b6Ob3.js","assets/SynopsisText-CYv2W3yR.css","assets/AnimeInfo-BFWtHlPC.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{Y as r,_ as t}from"./index-IZgh1beL.js";import{u as o,P as e,z as i}from"./vendor-core-8R2fFbyN.js";import"./vendor-query-BXRECSI6.js";import"./vendor-icons-CDMuNDeL.js";const a=i(()=>t(()=>import("./AnimeInfo-0huPAq0O.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])));function p(){return o(e,{fallback:o(r,{}),children:o(a,{})})}export{p as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as a}from"./vendor-core-8R2fFbyN.js";const s={JP:"Japan",KR:"Korea",CN:"China",CH:"China"},l=n=>{if(typeof n=="number"&&Number.isFinite(n))return n;if(typeof n=="string"&&n.trim()!==""){const t=Number(n);if(Number.isFinite(t))return t}return null},m=n=>l(n?.year)!==null&&l(n?.month)!==null&&l(n?.date)!==null,u=n=>{const t=l(n?.year);if(t===null)return null;const e=l(n?.month),r=l(n?.date);return e!==null&&r!==null?new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric",timeZone:"UTC"}).format(new Date(Date.UTC(t,e,r))):e!==null?new Intl.DateTimeFormat("en-US",{month:"short",year:"numeric",timeZone:"UTC"}).format(new Date(Date.UTC(t,e,1))):String(t)},c=(n,t,e)=>{const r=u(n),i=m(t)?u(t):null;return r&&i?`${r} - ${i}`:r&&e?.toLowerCase()==="releasing"?`${r} - TBA`:r||i},d=n=>{const t=[n.availableEpisodesDetail?.sub?.length,n.availableEpisodesDetail?.dub?.length,n.availableEpisodesDetail?.raw?.length].filter(o=>typeof o=="number"),e=[n.availableEpisodes?.sub,n.availableEpisodes?.dub,n.availableEpisodes?.raw].map(l).filter(o=>o!==null),r=Math.max(0,...t,...e),i=l(n.episodeCount);return r>0&&i!==null?`${r}/${i}`:r>0?String(r):i!==null?String(i):null},f=n=>{const t=l(n.score);if(t!==null)return String(t);const e=l(n.averageScore??n.stats?.averageScore);return e!==null?(e/10).toFixed(1):null},p=n=>n?s[n]||n:null,g=n=>n&&[n.quarter||n.season||n.title,n.year].filter(Boolean).join(" ")||null,C=n=>n?.length?n.map(t=>typeof t=="string"?t:t.name).filter(Boolean).join(", "):null,b=n=>n?[["Status",n.status],["Score",f(n)],["Type",n.type],["Country",p(n.country)],["Season",g(n.season)],["Rating",n.rating],["Studios",C(n.studios)],["Aired",c(n.airedStart,n.airedEnd,n.status)],["Episodes",d(n)]].filter(e=>typeof e[1]=="string"&&e[1].trim()!=="").map(([e,r])=>({label:e,value:r})):[],S="_detailsGridContainer_1kd9p_1",y="_detailItem_1kd9p_7",D={detailsGridContainer:S,detailItem:y};function v({showMeta:n,styles:t}){const e=t??D,r=b(n);return a("div",{className:e.detailsGridContainer,children:r.map(i=>a("div",{className:e.detailItem,children:[a("strong",{children:i.label}),a("span",{children:i.value})]},i.label))})}export{v as A};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._detailsGridContainer_1kd9p_1{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--space-4)}._detailItem_1kd9p_7{display:flex;flex-direction:column;gap:var(--space-1)}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{T as We,u as e,A as _,d as h,h as C,a as Ke,g as $e,q as W,S as O,$ as qe,n as ft,o as bt}from"./vendor-core-8R2fFbyN.js";import{I as y}from"./vendor-icons-CDMuNDeL.js";import{u as vt}from"./vendor-query-BXRECSI6.js";import{e as me,B as he,M as xe,R,z as oe,U as yt,T as Ve}from"./index-IZgh1beL.js";import{M as kt}from"./MediaCard-Be1ST9oj.js";import{c as Ge,a as Qe,d as wt,e as Ze,f as Xe,g as Nt,h as Ct,i as St,j as Tt,k as ze,l as Re}from"./useAsmr-CbMVRjmV.js";import{a as t}from"./Asmr.module-ChUXDZKx.js";import{u as At,A as Mt}from"./useAsmrPopup-D91Q3CBg.js";import{l as xt}from"./hls-C4cG9wQw.js";import"./vendor-ui-CUDCvRS_.js";import"./useIsMobile-Dm_b6Ob3.js";const Bt=({work:s,onClose:o,onPlay:k,t:v})=>{const{data:c,isLoading:d}=Ge(s.id||null),f=Qe(s),{data:A}=wt(f||void 0),{toggle:w,bookmarkedIds:T}=Ze(),{data:I}=Xe(f||void 0),L=f?T.has(f):!!A?.inLibrary,S=We(()=>(c?.description||s.description||"").split(`
|
|
2
|
+
`).map(l=>{const m=l.indexOf(":");return m===-1?null:{label:l.slice(0,m),value:l.slice(m+1).trim()}}).filter(l=>!!l&&!!l.value),[c?.description,s.description]),g=c?.tracks||[],N=We(()=>{const l=I?.progress??[];return l.length>0?l.reduce((m,u)=>m.updatedAt>=u.updatedAt?m:u):null},[I]),M=N&&N.trackIndex<g.length?N.trackIndex:null;return e("div",{className:t.detailOverlay,onClick:o,children:e("div",{className:t.detailModal,onClick:l=>l.stopPropagation(),children:[e("button",{className:t.detailClose,onClick:o,"aria-label":"Close",children:e(y,{name:"times"})}),e("div",{className:t.detailHeader,children:[s.thumbnail?e("img",{className:t.detailCover,src:s.thumbnail,alt:s.name,decoding:"async"}):e("div",{className:`${t.detailCover} ${t.thumbPlaceholder}`}),e("div",{className:t.detailInfo,children:[e("h2",{className:t.detailTitle,children:v?v(s.name):s.name}),e("p",{className:t.detailRj,children:s.id}),S.map(l=>l.label==="Tags"?e("p",{className:t.metaRow,children:[e("span",{className:t.metaLabel,children:"Tags"}),e("span",{className:t.tagChips,children:l.value.split(", ").map(m=>e("span",{className:t.tagChip,children:m},m))})]},l.label):e("p",{className:t.metaRow,children:[e("span",{className:t.metaLabel,children:l.label}),l.value]},l.label))]})]}),e("div",{className:t.tracksSection,children:[e("h3",{className:t.tracksHeading,children:d?"Loading tracks…":`Tracks (${g.length})`}),!d&&(g.length>0?e("ul",{className:t.trackList,children:g.map((l,m)=>e("li",{children:e("button",{className:t.trackRow,onClick:()=>k(s,g,m),children:[e(y,{name:"play",className:t.trackIcon}),e("span",{className:t.trackLabel,children:l.resolutionStr}),e("span",{className:t.trackType,children:l.hls?"HLS":"MP3"})]})},l.link))}):e("p",{className:t.noTracks,children:"No audio streams available for this work."}))]}),e("div",{className:t.detailActions,children:[!d&&g.length>0&&e("button",{className:t.playAllBtn,onClick:()=>k(s,g,0),children:[e(y,{name:"play"})," Play from start"]}),!d&&M!==null&&N&&e("button",{className:t.playAllBtn,onClick:()=>k(s,g,M),children:[e(y,{name:"history"})," Resume track ",M+1," ·"," ",me(N.currentTime),N.duration>0?` / ${me(N.duration)}`:""]}),f&&e("button",{className:t.playAllBtn,onClick:()=>w({rjCode:f,title:s.name,thumbnail:s.thumbnail||"",isAdult:!!s.isAdult}),"aria-pressed":L,children:[e(y,{name:L?"check":"plus"})," ",L?"In listening list":"Add to listening list"]})]})]})})},Lt=({title:s,images:o,chapters:k,tracks:v,trackIndex:c,expanded:d,isAdult:f,rjCode:A,t:w,onTrackChange:T,onExpandedChange:I,onClose:L})=>{const S=_(null),g=_(null),[N,M]=h(!1),[l,m]=h(0),[u,P]=h(0),[p,U]=h(0),[B,Y]=h(!0),[D,j]=h(0),[ae,ie]=h(new Set),[q,ne]=h(!1),[pe,$]=h(!0),re=_("");re.current||(re.current=typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():`asmr-${Date.now()}-${Math.random().toString(36).slice(2)}`);const[F,Ne]=h(()=>{const a=parseFloat(localStorage.getItem("asmrVolume")||"");return Number.isFinite(a)?a:1}),ge=_(F);C(()=>{ge.current=F},[F]);const fe=Ke(),V=$e.useMemo(()=>A?Nt(A):"",[A]),Ce=Ct(),ce=St(),{data:Se}=Xe(V||void 0),[Be,be]=h(!1),[H,Le]=h(0),[Pe,G]=h(!1),ve=_(""),J=_(null),K=_(0),Q=_(0),de=_(0),Z=v[c],X=Z?.link,Te=Z?.hls,n=Z?.resolutionStr||"",i=o.length>0,x=`${V}:${c}`,se=$e.useMemo(()=>(Se?.progress??[]).find(r=>r.trackIndex===c)??null,[Se,c]),ee=_({workId:"",trackIndex:0,trackLabel:""});ee.current={workId:V,trackIndex:c,trackLabel:n};const le=W((a,r,b,E=!1)=>{!a.workId||!b||b<10||!E&&Math.abs(r-K.current)<5||(K.current=r,Ce.mutate({workId:a.workId,trackIndex:a.trackIndex,trackLabel:a.trackLabel,currentTime:Math.floor(r),duration:Math.floor(b),title:s,thumbnail:o[0]||"",rjCode:a.workId,isAdult:f?1:0}))},[Ce,s,o,f]),z=W((a=!1)=>{J.current&&(clearTimeout(J.current),J.current=null),le(ee.current,Q.current,de.current,a)},[le]),ye=_(z);ye.current=z;const Ee=_(le);Ee.current=le;const ue=W(()=>{g.current&&(g.current.destroy(),g.current=null)},[]);C(()=>{const a=S.current;if(!a||!X)return;const r={workId:V,trackIndex:c,trackLabel:n},b=()=>{J.current&&(clearTimeout(J.current),J.current=null),Ee.current(r,Q.current,de.current,!0)};if(m(0),P(0),U(0),M(!1),Q.current=0,de.current=0,K.current=0,ue(),Te){let E=!1;return(async()=>{const te=await xt();if(!E)if(te&&te.isSupported()){const we=new te({enableWorker:!0});g.current=we,we.loadSource(X),we.attachMedia(a),a.play().catch(()=>M(!1))}else a.src=X,a.load(),a.volume=ge.current,a.play().catch(()=>M(!1))})(),()=>{E=!0,ue(),a.removeAttribute("src"),b()}}else a.src=X;return a.load(),a.volume=ge.current,a.play().catch(()=>M(!1)),()=>{ue(),a.removeAttribute("src"),b()}},[X,Te,ue,V,c,n]),C(()=>()=>ue(),[ue]),C(()=>{const a=()=>{document.visibilityState==="hidden"&&ye.current()},r=()=>ye.current();return document.addEventListener("visibilitychange",a),window.addEventListener("pagehide",r),()=>{document.removeEventListener("visibilitychange",a),window.removeEventListener("pagehide",r)}},[]),C(()=>{if(!se||ve.current===x||!(u>0))return;const a=se.currentTime||0,r=se.duration||u;a>=10&&r-a>=15&&Q.current<a?(ve.current=x,Le(a),be(!0)):ve.current=x},[se,u,x]),C(()=>{const a=S.current;a&&(a.volume=F)},[F]),C(()=>{if(d)return document.body.classList.add("asmr-player-open"),()=>document.body.classList.remove("asmr-player-open")},[d]),C(()=>{j(0)},[o]),C(()=>{d&&$(!0)},[d]),C(()=>{q&&$(!0)},[q]);const Ae=W(a=>{if(!s||v.length===0)return;const r=v[c],b=r?`${r.resolutionStr} (${c+1}/${v.length})`:"",E=S.current,te=E?E.currentTime:0,we=E&&E.duration||0,gt=o[0]||"";fetch("/api/discord/asmr",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:s,trackLabel:b,isPlaying:a,thumbnail:gt,thumbnails:o,currentTime:te,duration:we,isAdult:!!f,rjCode:A||"",sessionId:re.current})}).catch(()=>{}),fetch("/api/discord/heartbeat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:re.current})}).catch(()=>{})},[s,v,c,o,f,A]);C(()=>{Ae(N)},[Ae,N,c,s,d]),C(()=>{if(!N)return;const a=window.setInterval(()=>Ae(!0),15e3);return()=>window.clearInterval(a)},[N,Ae]),C(()=>{const a=re.current,r=()=>{if(!a)return;const te=JSON.stringify({sessionId:a});navigator.sendBeacon?(navigator.sendBeacon("/api/discord/clear",new Blob([te],{type:"application/json"})),navigator.sendBeacon("/api/discord/heartbeat",new Blob([JSON.stringify({sessionId:a,bye:!0})],{type:"application/json"}))):(fetch("/api/discord/clear",{method:"POST",headers:{"Content-Type":"application/json"},body:te,keepalive:!0}).catch(()=>{}),fetch("/api/discord/heartbeat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:a,bye:!0}),keepalive:!0}).catch(()=>{}))},b=()=>r(),E=()=>{document.visibilityState==="hidden"&&r()};return window.addEventListener("pagehide",b),window.addEventListener("beforeunload",b),document.addEventListener("visibilitychange",E),()=>{window.removeEventListener("pagehide",b),window.removeEventListener("beforeunload",b),document.removeEventListener("visibilitychange",E),r()}},[]);const Me=W(a=>{ie(r=>{if(r.has(a))return r;const b=new Set(r);return b.add(a),b})},[]),tt=W((a,r)=>{a&&a.complete&&a.naturalWidth>0&&Me(r)},[Me]);C(()=>{if(!d)return;const a=r=>{if(r.key==="Escape"){q?ne(!1):I(!1);return}!B||o.length<2||(r.key==="ArrowLeft"&&j(b=>Math.max(0,b-1)),r.key==="ArrowRight"&&j(b=>Math.min(o.length-1,b+1)))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[d,B,o.length,q,I]);const at=()=>{const a=S.current;a&&(a.paused?a.play().catch(()=>{}):a.pause())},nt=a=>{const r=S.current;if(!r||!u)return;const b=parseFloat(a.target.value);r.currentTime=b,m(b)},rt=()=>{z(!0),c<v.length-1?T(c+1):G(!0)},st=a=>{const r=a.currentTarget.currentTime;Q.current=r,m(r),J.current&&clearTimeout(J.current),J.current=setTimeout(()=>ye.current(),5e3)},lt=()=>{M(!1),ye.current()},ot=a=>{const r=a.currentTarget.duration;de.current=Number.isFinite(r)?r:0,P(a.currentTarget.duration)},it=W(()=>{const a=S.current;a&&H>0&&(a.currentTime=H,Q.current=H,a.play().catch(()=>{})),be(!1)},[H]),je=W(()=>{be(!1)},[]),ct=W(()=>{V&&ce.mutate({rjCode:V,title:s,thumbnail:o[0]||"",status:"Completed",isAdult:!!f,silent:!0}),G(!1),L(),fe("/")},[V,ce,s,o,f,L,fe]),dt=k.reduce((a,r,b)=>l>=r.time?b:a,-1),ut=a=>{const r=S.current;r&&(r.currentTime=a,m(a))},_e=a=>{const r=S.current;if(!r)return;const b=Number.isFinite(r.currentTime)?r.currentTime:l,E=Math.max(0,Math.min(u||1/0,b+a));r.currentTime=E,m(E),$(!0)},Oe=u?Math.min(100,l/u*100):0,mt=u?Math.min(100,Math.max(Oe,p/u*100)):0,ht=e(O,{children:[e("div",{className:t.playerButtons,children:[e("button",{className:t.playerBtn,onClick:()=>T(Math.max(0,c-1)),disabled:c===0,"aria-label":"Previous track",children:e(y,{name:"step-backward"})}),e("button",{className:`${t.playerBtn} ${t.seekBtn}`,onClick:()=>_e(-10),"aria-label":"Seek back 10 seconds",title:"Back 10s",children:[e(y,{name:"undo"}),e("span",{className:t.seekBtnLabel,children:"10"})]}),e("button",{className:`${t.playerBtn} ${t.playBtn}`,onClick:at,"aria-label":N?"Pause":"Play",children:N?e(y,{name:"pause"}):e(y,{name:"play"})}),e("button",{className:`${t.playerBtn} ${t.seekBtn}`,onClick:()=>_e(10),"aria-label":"Seek forward 10 seconds",title:"Forward 10s",children:[e(y,{name:"redo"}),e("span",{className:t.seekBtnLabel,children:"10"})]}),e("button",{className:t.playerBtn,onClick:()=>T(Math.min(v.length-1,c+1)),disabled:c>=v.length-1,"aria-label":"Next track",children:e(y,{name:"step-forward"})})]}),e("div",{className:t.seekRow,children:[e("span",{className:t.timeLabel,children:me(l)}),e("input",{className:t.seekBar,type:"range",min:0,max:u||0,step:.1,value:Math.min(l,u||0),onChange:nt,style:{"--played-percent":`${Oe}%`,"--buffered-percent":`${mt}%`},"aria-label":"Seek"}),e("span",{className:t.timeLabel,children:me(u)})]})]}),Fe=e(O,{children:[e("button",{className:`${t.playerBtn} ${t.playerToggle}`,onClick:()=>I(!d),"aria-label":d?"Minimize player":"Expand player",title:d?"Minimize to browse":"Expand",children:d?e(y,{name:"chevron-down"}):e(y,{name:"chevron-up"})}),e("div",{className:t.playerInfo,children:[e("p",{className:t.playerTitle,title:s,children:w?w(s):s}),e("p",{className:t.playerTrack,children:[Z?.resolutionStr||"",v.length>1?` (${c+1}/${v.length})`:""]})]}),e("div",{className:t.playerControls,children:ht}),e("div",{className:t.playerRight,children:[F===0?e(y,{name:"volume-mute",className:t.volumeIcon}):F<.5?e(y,{name:"volume-down",className:t.volumeIcon}):e(y,{name:"volume-up",className:t.volumeIcon}),e("input",{className:t.volumeBar,type:"range",min:0,max:1,step:.01,value:F,onChange:a=>{const r=parseFloat(a.target.value);Ne(r),localStorage.setItem("asmrVolume",String(r))},style:{"--volume-percent":`${F*100}%`},"aria-label":"Volume"})]}),e("div",{className:t.playerActions,children:[d&&i&&e("button",{className:t.playerBtn,onClick:()=>Y(a=>!a),"aria-label":B?"Hide images":"Show images",title:B?"Hide images":"Show images",children:B?e(y,{name:"eye-slash"}):e(y,{name:"image"})}),d&&k.length>0&&e("button",{className:`${t.playerBtn} ${q?t.playerBtnActive:""}`,onClick:()=>ne(a=>!a),"aria-label":q?"Hide bookmarks":"Show bookmarks",title:"Timestamps",children:e(y,{name:"list-ol"})}),e("button",{className:t.playerBtn,onClick:L,"aria-label":"Close player",children:e(y,{name:"times"})})]})]}),He=e("audio",{ref:S,preload:"metadata",onPlay:()=>M(!0),onPause:lt,onTimeUpdate:st,onLoadedMetadata:ot,onProgress:a=>{const r=a.currentTarget;r.buffered.length>0&&U(r.buffered.end(r.buffered.length-1))},onEnded:rt}),Ue=e(xe,{isOpen:Be,onClose:je,title:"Resume Listening",children:e("div",{style:{padding:"1rem",textAlign:"center"},children:[e("p",{children:["You were at ",e("strong",{children:me(H)}),Z?.resolutionStr?` in ${Z.resolutionStr}`:""]}),e("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[e(he,{variant:"secondary",onClick:je,children:"Start from Beginning"}),e(he,{onClick:it,children:"Resume"})]})]})}),De=e(xe,{isOpen:Pe,onClose:()=>G(!1),title:"Finished!",children:e("div",{style:{padding:"1rem",textAlign:"center"},children:[e(y,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),e("p",{style:{fontSize:"1.1rem",fontWeight:600},children:w?w(s):s}),e("p",{style:{color:"var(--text-secondary)"},children:"You finished this work!"}),e("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[e(he,{variant:"secondary",onClick:()=>G(!1),children:"Close"}),e(he,{onClick:ct,children:"Mark Completed & Back to Home"})]})]})});if(!d)return qe(e(O,{children:[He,e("div",{className:t.playerBar,children:Fe}),Ue,De]}),document.body);const ke=Math.min(D,Math.max(0,o.length-1)),Je=o[ke],pt=B&&i&&!!Je&&!ae.has(Je);return qe(e(O,{children:[He,Ue,De,e("div",{className:`${t.npOverlay} ${pe?"":t.npOverlayControlsHidden}`,children:[e("div",{className:`${t.npStage} ${!B||!i?t.npStageBlank:""}`,onClick:()=>$(a=>!a),children:B&&i&&e(O,{children:[e("div",{className:t.sliderViewport,children:[e("div",{className:t.sliderTrack,style:{transform:`translateX(-${ke*100}%)`},children:o.map(a=>e("div",{className:t.slide,children:e("img",{ref:r=>tt(r,a),src:a,alt:`${w?w(s):s} — work image`,loading:"lazy",decoding:"async",draggable:!1,onLoad:()=>Me(a),onError:()=>Me(a),className:`${t.slideImg} ${ae.has(a)?t.slideImgLoaded:""}`})},a))}),pt&&e("span",{className:t.slideSpinner,"aria-label":"Loading image"})]}),o.length>1&&e(O,{children:[e("button",{className:`${t.npArrow} ${t.npArrowLeft}`,onClick:a=>{a.stopPropagation(),j(r=>Math.max(0,r-1)),$(!0)},disabled:ke===0,"aria-label":"Previous image",children:e(y,{name:"chevron-left"})}),e("button",{className:`${t.npArrow} ${t.npArrowRight}`,onClick:a=>{a.stopPropagation(),j(r=>Math.min(o.length-1,r+1)),$(!0)},disabled:ke===o.length-1,"aria-label":"Next image",children:e(y,{name:"chevron-right"})}),e("span",{className:t.npImageCount,onClick:a=>a.stopPropagation(),children:[ke+1," / ",o.length]})]})]})}),e("div",{className:`${t.playerBar} ${t.playerBarDocked} ${pe?"":t.playerBarDockedHidden}`,onClick:a=>a.stopPropagation(),children:[Fe,q&&e(O,{children:[e("div",{className:t.npBackdrop,onClick:()=>ne(!1)}),e("div",{className:t.chapterPanel,children:k.map((a,r)=>e("button",{className:`${t.chapterRow} ${r===dt?t.chapterRowActive:""}`,title:w?w(a.label):a.label,onClick:()=>{ut(a.time),ne(!1)},children:[e("span",{className:t.chapterRowTime,children:me(a.time)}),e("span",{className:t.chapterRowLabel,title:w?w(a.label):a.label,children:w?w(a.label):a.label})]},`${a.time}-${r}`))})]})]})]})]}),document.body)},Pt="https://github.com/serifpersia/dango/releases/latest/download/dango-extension.zip",Rt=s=>{try{return JSON.parse(s.detail)}catch{return null}},It=({isOpen:s,onClose:o,onSuccess:k})=>{const[v,c]=h(1),[d,f]=h(typeof navigator<"u"?navigator.userAgent:""),[A,w]=h(""),[T,I]=h(!1),[L,S]=h(!1),g=_(null),N=typeof navigator<"u"?navigator.userAgent:"",M=/android/i.test(N),l=/firefox|fxios/i.test(N)&&!M,m=!l&&!M&&/chrome|chromium|edg|brave/i.test(N),u=l||m;C(()=>{s&&(c(1),f(typeof navigator<"u"?navigator.userAgent:""),w(""),I(!1),S(!1))},[s]),C(()=>()=>{g.current&&(window.removeEventListener("dango:jasmr-cookie",g.current),g.current=null)},[]);const P=async()=>{localStorage.setItem("jasmr_ua",d),window.open("https://japaneseasmr.com","_blank","noopener,noreferrer"),c(2)},p=()=>{if(L)return;S(!0);const B=window.setTimeout(()=>{S(!1),g.current&&(window.removeEventListener("dango:jasmr-cookie",g.current),g.current=null),oe.error("Helper not detected — install it via about:debugging first.")},3e3),Y=D=>{window.clearTimeout(B),window.removeEventListener("dango:jasmr-cookie",Y),g.current=null,S(!1);const j=Rt(D);if(j?.ok&&j.cookie)w(j.cookie),oe.success("Cookie extracted from helper!");else if(j?.error==="NO_COOKIE"){const ae=j.debug?.stores?.length??0,ie=j.debug?.names??[];oe.error(`Helper found no cf_clearance (checked ${ae} stores, saw: ${ie.join(", ")||"none"}) — solve the challenge on the JapaneseASMR tab first.`)}else oe.error("Helper request failed — try again.")};g.current=Y,window.addEventListener("dango:jasmr-cookie",Y),window.dispatchEvent(new CustomEvent("dango:get-jasmr-cookie"))},U=async()=>{if(!A.trim()){oe.error("Please enter the cf_clearance cookie");return}I(!0);try{localStorage.setItem("jasmr_cookie",A.trim()),oe.success("Cookie updated successfully!"),k?.(),o()}catch{oe.error("Failed to save cookie")}finally{I(!1)}};return e(xe,{isOpen:s,onClose:o,title:"JapaneseASMR Verification Required",children:e("div",{className:R.container,children:v===1?e(O,{children:[e("p",{children:["JapaneseASMR is protected by a Cloudflare challenge. Solve it once in your browser and paste the ",e("strong",{children:"cf_clearance"})," cookie so the app can load the site for you."]}),e("div",{className:R.field,children:[e("label",{children:"Your User-Agent (must match the browser you solve the challenge with):"}),e("textarea",{value:d,onChange:B=>f(B.target.value),rows:3,className:R.textarea})]}),e("div",{className:R.actions,children:[e("button",{className:R.secondaryButton,onClick:o,children:"Cancel"}),e("button",{className:R.button,onClick:P,children:"Start Verification (Opens JapaneseASMR)"})]})]}):e(O,{children:[e("p",{children:["1. Solve the challenge on the ",e("strong",{children:"JapaneseASMR tab"})," (keep that tab open).",e("br",{}),"2. Copy the ",e("strong",{children:"cf_clearance"})," cookie value using one of these:",e("br",{}),e("br",{}),e("strong",{children:"Chrome / Edge — DevTools:"})," press ",e("code",{children:"F12"})," →"," ",e("strong",{children:"Application"})," → ",e("strong",{children:"Cookies"})," →"," ",e("code",{children:"https://japaneseasmr.com"}),". Find ",e("strong",{children:"cf_clearance"}),", double-click its ",e("strong",{children:"Value"})," to select it, then copy.",e("br",{}),e("br",{}),e("strong",{children:"Firefox — Storage Inspector:"})," press ",e("code",{children:"F12"})," →"," ",e("strong",{children:"Storage"})," → ",e("strong",{children:"Cookies"})," →"," ",e("code",{children:"https://japaneseasmr.com"}),". Find ",e("strong",{children:"cf_clearance"}),", right-click the value → ",e("strong",{children:"Copy Value"}),".",e("br",{}),e("br",{}),e("strong",{children:"Either browser — extension:"})," open"," ",e("strong",{children:"Cookie Manager"})," while on the JapaneseASMR tab, find"," ",e("strong",{children:"cf_clearance"}),", and copy its value (or use the extension's export).",e("br",{}),e("br",{}),"3. Paste it below. Copy ",e("strong",{children:"only the value"})," — remove any"," ",e("code",{children:"cf_clearance="})," prefix or quotes if they were included."]}),u&&e("div",{className:R.hint,children:[e("strong",{children:"Dango helper (one-time setup):"})," ",l?e(O,{children:["type ",e("code",{children:"about:debugging"})," in the address bar →"," ",e("strong",{children:"This Firefox"})," → ",e("strong",{children:"Load Temporary Add-on"})," ","→ open the ",e("code",{children:"dango-extension/firefox"})," folder and pick"," ",e("code",{children:"manifest.json"}),". (Temporary helpers unload when Firefox closes — repeat after a restart.)"]}):e(O,{children:["type ",e("code",{children:"chrome://extensions"})," in the address bar → enable"," ",e("strong",{children:"Developer mode"})," → ",e("strong",{children:"Load unpacked"})," → open the ",e("code",{children:"dango-extension/chrome"})," folder. (Unpacked helpers show a developer-mode notice — expected.)"]})," ","Use this link to download the extension and extract it:"," ",e("a",{href:Pt,target:"_blank",rel:"noreferrer",className:R.link,children:"dango-extension.zip"}),". Then click Extract below and the field fills itself.",e("div",{className:R.actions,children:e("button",{className:R.button,onClick:p,disabled:L,type:"button",children:L?"Extracting…":"Extract cookie from helper"})})]}),e("div",{className:R.field,children:[e("label",{children:"cf_clearance cookie value:"}),e("input",{type:"text",value:A,onChange:B=>w(B.target.value),placeholder:"e.g. xxxxxxxx.xxxxxxxx.xxxxxxx-xxxxxxx",className:R.input})]}),e("div",{className:R.actions,children:[e("button",{className:R.secondaryButton,onClick:o,children:"Cancel"}),e("button",{className:R.secondaryButton,onClick:()=>c(1),children:"Back"}),e("button",{className:R.button,onClick:U,disabled:T,children:T?"Saving...":"Submit"})]})]})})})},et="asmrTranslateCache",$t=10080*60*1e3;function Et(){try{const s=localStorage.getItem(et);if(!s)return new Map;const o=JSON.parse(s);return new Map(Object.entries(o))}catch{return new Map}}function jt(s){try{const o={};for(const[k,v]of s)o[k]=v;localStorage.setItem(et,JSON.stringify(o))}catch{}}function Ye(s){return/[\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FAF]/.test(s)}async function _t(s){const o=s.map(d=>d.trim()).filter(Boolean);if(o.length===0)return new Map;const k=await fetch("/api/translate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({texts:o,source:"ja",target:"en"})});if(!k.ok)throw new Error(`translate ${k.status}`);const v=await k.json(),c=new Map;for(const[d,f]of Object.entries(v.translations||{}))c.set(d,f);for(const d of o)c.has(d)||c.set(d,d);return c}function Ot(s,o){const[k,v]=h(new Map),[c,d]=h(!1),f=_(null),A=s.join("");return C(()=>{const T=A?A.split(""):[];if(!o||T.length===0){v(new Map),d(!1);return}const I=Array.from(new Set(T.map(l=>l.trim()).filter(Boolean).filter(Ye)));if(I.length===0){v(new Map);return}f.current||(f.current=Et());const L=Date.now(),S=new Map,g=[];for(const l of I){const m=f.current.get(l);m&&L-m.ts<$t?S.set(l,m.t):g.push(l)}if(g.length===0){v(S);return}let N=!1;d(!0);const M=[];for(let l=0;l<g.length;l+=15)M.push(g.slice(l,l+15));return(async()=>{const l=new Map;for(const u of M){try{const P=await _t(u);for(const[p,U]of P)l.set(p,U)}catch{}await new Promise(P=>setTimeout(P,120))}if(N)return;if(f.current){for(const[u,P]of l)f.current.set(u,{t:P,ts:Date.now()});jt(f.current)}const m=new Map([...S,...l]);v(m),d(!1)})(),()=>{N=!0}},[o,A]),{t:T=>!o||!T||!Ye(T)?T:k.get(T.trim())||T,map:k,isTranslating:c}}const Ft=[{label:"Date",options:[{value:"latest",label:"Latest"},{value:"oldest",label:"Oldest"}]},{label:"Title",options:[{value:"title_asc",label:"A → Z"},{value:"title_desc",label:"Z → A"}]},{label:"Popular (Views)",options:[{value:"popular_recent",label:"Recent"},{value:"popular_week",label:"Week"},{value:"popular_month",label:"Month"},{value:"popular_6_months",label:"6 Months"},{value:"popular_year",label:"Year"},{value:"popular",label:"All Time"}]},{label:"Most Commented",options:[{value:"comments_week",label:"Week"},{value:"comments_month",label:"Month"},{value:"comments_year",label:"Year"},{value:"comments",label:"All Time"}]},{label:"Other",options:[{value:"random",label:"Random"}]}],Ht=[{value:"",label:"All"},{value:"sfw",label:"SFW / 全年齢"},{value:"r-15",label:"R-15"},{value:"r-18",label:"NSFW / R18"},{value:"yuri",label:"Yuri / Girls love / 百合"},{value:"otokonoko",label:"Otoko no ko / 男の娘"},{value:"futanari",label:"Futanari / フタナリ"},{value:"r-18g",label:"R-18G / グロ"}],Ut=[{value:"sfw",label:"SFW / 全年齢"}],Ie="agreedToViewMature",Xt=()=>{const{rj:s}=ft(),o=Ke(),[k,v]=bt(),[c,d]=h(()=>localStorage.getItem(Ie)==="true"),[f,A]=h(!1),[w,T]=h(()=>k.get("q")||""),[I,L]=h(()=>k.get("q")||""),[S,g]=h("latest"),[N,M]=h("sfw"),[l,m]=h(1),[u,P]=h(null),[p,U]=h(null),[B,Y]=h(!0),[D,j]=h(()=>localStorage.getItem("asmrTranslateEN")==="true"),[ae,ie]=h(!1),q=vt(),{toggle:ne,bookmarkedIds:pe}=Ze(),{popup:$,openPopup:re,scheduleClose:F,cancelClose:Ne,closePopup:ge}=At();C(()=>yt("jasmr",()=>ie(!0)),[]),C(()=>{localStorage.setItem("asmrTranslateEN",String(D))},[D]),C(()=>{const n=()=>d(localStorage.getItem(Ie)==="true");return window.addEventListener("focus",n),window.addEventListener("storage",n),()=>{window.removeEventListener("focus",n),window.removeEventListener("storage",n)}},[]);const fe=c,V=fe?N:"sfw",Ce=fe?Ht:Ut,{data:ce,isLoading:Se,isError:Be,isFetching:be}=Tt(I,l,S,V),H=$e.useMemo(()=>ce?.shows??[],[ce?.shows]),Le=ce?.hasNext??!1;C(()=>{if(!s){u&&!p&&P(null);return}const n=s.toUpperCase();if(p&&(p.work.id?.toUpperCase()===n||p.work._id?.toUpperCase()===n)){u&&P(null);return}const i=H.find(x=>(x.id||x._id)?.toUpperCase()===n);i?(!u||(u.id||u._id)!==(i.id||i._id))&&P(i):(!u||(u.id||u._id)?.toUpperCase()!==n)&&P({_id:n,id:n,name:n})},[s,H,p,u]);const Pe=W(()=>{o("/asmr")},[o]);C(()=>{!s&&p&&U(null)},[s,p]);const{data:G}=Ge(p&&p.work.id||null),ve=p?[p.work.thumbnail,...G?.images||[]].filter(Boolean):[],J=[...H.map(n=>n.name),u?.name||"",p?.work.name||"",...G?.chapters?.map(n=>n.label)||[]].filter(Boolean),{t:K}=Ot(J,D);C(()=>{const n=p?p.work.name:u?u.name:s?s.toUpperCase():"",i=n?D?K(n):n:"",x=i?`${i} - dango`:"dango";document.title=x;try{window.history.replaceState(window.history.state,x,window.location.href)}catch{}},[u,p,s,D,K]);const Q=n=>{n.preventDefault(),L(w),m(1);const i=new URLSearchParams(k);w.trim()?i.set("q",w.trim()):i.delete("q"),i.delete("page"),v(i,{replace:!0})};C(()=>{const n=k.get("q")||"";T(i=>i===n?i:n),L(i=>i===n?i:n),m(1)},[k]);const de=n=>{n.target.checked&&!c&&A(!0)},Z=()=>{localStorage.setItem(Ie,"true"),d(!0),A(!1),m(1)},X=()=>{A(!1)},Te=W((n,i,x)=>{P(null),Y(!0),U({work:n,tracks:i,index:x})},[]);return e("div",{className:`${t.page} ${p?t.pageWithPlayer:""}`,children:[!(p&&B)&&e(O,{children:[e("header",{className:t.header,children:[e("h1",{className:t.pageTitle,children:[e(y,{name:"headphones"})," ASMR"]}),e("form",{className:t.searchForm,onSubmit:Q,children:[e("input",{className:t.searchInput,type:"text",value:w,onChange:n=>T(n.target.value),placeholder:"Search works, circles, CV… (-word excludes)","aria-label":"Search ASMR works"}),e("button",{className:t.searchBtn,type:"submit","aria-label":"Search",children:e(y,{name:"search"})})]})]}),e("div",{className:t.filterBar,children:[e("label",{className:t.filterLabel,htmlFor:"asmr-sort",children:"Sort"}),e("select",{id:"asmr-sort",className:t.sortSelect,value:S,onChange:n=>{g(n.target.value),m(1)},children:Ft.map(n=>e("optgroup",{label:n.label,children:n.options.map(i=>e("option",{value:i.value,children:i.label},i.value))},n.label))}),e("label",{className:t.filterLabel,htmlFor:"asmr-rating",children:"Type"}),e("select",{id:"asmr-rating",className:t.sortSelect,value:N,onChange:n=>{M(n.target.value),m(1)},children:Ce.map(n=>e("option",{value:n.value,children:n.label},n.value))}),e("div",{className:t.filterTogglesGroup,children:[e("div",{className:t.translateToggleWrap,children:[e("span",{className:t.filterLabel,children:"JP"}),e(Ve,{id:"asmr-translate-toggle",isChecked:D,onChange:n=>j(n.target.checked)}),e("span",{className:t.filterLabel,children:"EN"})]}),!c&&e("div",{className:t.matureToggleWrap,children:[e("label",{className:t.matureLabel,htmlFor:"asmr-mature-toggle",children:"Mature"}),e(Ve,{id:"asmr-mature-toggle",isChecked:!1,onChange:de})]})]})]}),Be?e("p",{className:t.statusMsg,children:"Failed to load works. Please try again."}):Se&&H.length===0?e("div",{className:t.grid,"aria-hidden":!0,children:Array.from({length:12}).map((n,i)=>e("div",{className:t.skeletonCard,children:[e("div",{className:`${t.skeletonThumb} ${t.shimmer}`}),e("div",{className:`${t.skeletonLine} ${t.shimmer}`,style:{width:"88%"}}),e("div",{className:`${t.skeletonLine} ${t.shimmer}`,style:{width:"55%"}})]},i))}):H.length===0?e("p",{className:t.statusMsg,children:"No works found."}):e(O,{children:[e("div",{className:`${t.grid} ${be?t.fetching:""}`,children:H.map(n=>{const i=D?{...n,name:K(n.name)}:n,x=Qe(n),se=ze(x),ee=pe.has(se),le=`/asmr/${encodeURIComponent(x)}`;return e("div",{className:t.asmrCardWrap,children:[e(kt,{item:{id:se,title:i.name,thumbnail:n.thumbnail||"",typeBadge:x||void 0,isAdult:Re(n)},linkTo:le,hoverIcon:"info",layout:"horizontal",showInfoButton:!0,display:{elements:{poster:{typeBadge:!0,chapterBadge:!1,adultBadge:!0},info:{title:!0,mobileBadges:!0,progress:!1,meta:!1}}},onOpenDetails:z=>re(z,{rjCode:x,title:i.name,thumbnail:n.thumbnail||"",isAdult:Re(n),rating:n.rating,listenTarget:le}),onPopupHoverIntent:z=>z?Ne():F(),rawThumbnail:!0}),e("button",{className:`${t.bookmarkBtn} ${ee?t.bookmarked:""}`,onClick:z=>{z.preventDefault(),z.stopPropagation(),ne({rjCode:x,title:n.name,thumbnail:n.thumbnail||"",isAdult:Re(n)})},title:ee?"Remove from listening list":"Add to listening list","aria-label":ee?"Remove from listening list":"Add to listening list","aria-pressed":ee,children:e(y,{name:ee?"check":"plus",size:12})})]},n._id||n.id)})}),e("nav",{className:t.pagination,children:[e("button",{className:t.pageBtn,disabled:l<=1,onClick:()=>m(n=>Math.max(1,n-1)),children:"Previous"}),e("span",{className:t.pageIndicator,children:["Page ",l]}),e("button",{className:t.pageBtn,disabled:!Le,onClick:()=>m(n=>n+1),children:"Next"})]})]})]}),u&&e(Bt,{work:u,onClose:Pe,onPlay:Te,t:K}),$&&e(Mt,{data:$.data,anchorRect:$.rect,bookmarked:pe.has(ze($.data.rjCode)),onToggleBookmark:()=>ne({rjCode:$.data.rjCode,title:$.data.title,thumbnail:$.data.thumbnail||"",isAdult:$.data.isAdult}),onMouseEnter:Ne,onMouseLeave:F,onRequestClose:ge}),ae&&e(It,{isOpen:ae,onClose:()=>ie(!1),onSuccess:()=>{q.invalidateQueries({queryKey:["asmrBrowse"]}),q.invalidateQueries({queryKey:["asmrWork"]})}}),f&&e(xe,{isOpen:f,title:"Content Warning",onClose:X,children:e("div",{style:{padding:"var(--space-4)",textAlign:"center"},children:[e("p",{children:"This section contains mature content intended for adult audiences."}),e("p",{children:["By proceeding, you confirm that you are ",e("strong",{children:"18 years of age or older"})," (or the age of majority in your jurisdiction) and wish to view this content."]}),e("p",{style:{fontSize:"var(--font-size-xs)",color:"var(--text-secondary)",marginTop:"var(--space-4)"},children:["You can reset this preference at any time in the ",e("strong",{children:"Settings"})," page."]}),e("div",{style:{marginTop:"var(--space-4)",display:"flex",gap:"var(--space-2-5)",justifyContent:"center"},children:[e(he,{variant:"secondary",onClick:X,children:"Go Back"}),e(he,{onClick:Z,children:"I'm 18+, Continue"})]})]})}),p&&e(Lt,{title:p.work.name,images:ve,chapters:G?.chapters||[],tracks:p.tracks,trackIndex:p.index,expanded:B,isAdult:!!p.work.isAdult,rjCode:p.work.id||p.work._id,t:K,onTrackChange:n=>U(i=>i&&{...i,index:n}),onExpandedChange:Y,onClose:()=>{U(null),Y(!0),s&&o("/asmr")}})]})};export{Xt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._page_aacjp_1{max-width:var(--layout-asmr-max-width);margin:0 auto;padding:var(--space-6) var(--space-4);min-height:calc(100vh - var(--layout-page-offset))}._pageWithPlayer_aacjp_8{padding-bottom:var(--layout-page-offset)}._header_aacjp_12{display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap;margin-bottom:var(--space-5)}._pageTitle_aacjp_20{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-xl);margin:0;color:var(--text-primary)}._searchForm_aacjp_29{display:flex;flex:1;min-width:var(--size-220);max-width:var(--size-480);border:var(--space-px) solid var(--border-primary);border-radius:var(--radius-md);background:var(--bg-secondary);overflow:hidden}._searchForm_aacjp_29:focus-within{border-color:var(--accent)}._searchInput_aacjp_44{flex:1;min-width:0;padding:var(--space-2-5) var(--space-3);border:none;background:transparent;color:var(--text-primary);font-size:var(--font-size-sm);outline:none}._searchBtn_aacjp_55{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--size-44);border:none;border-left:var(--space-px) solid var(--border-primary);background:var(--accent);color:var(--accent-text);cursor:pointer}._sortSelect_aacjp_68{padding:var(--space-2-5) var(--space-3);border:var(--space-px) solid var(--border-primary);border-radius:var(--radius-md);background:var(--bg-secondary);color:var(--text-primary);font-size:var(--font-size-sm);cursor:pointer}._grid_aacjp_78{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--size-250),1fr));gap:var(--space-4);transition:opacity var(--transition-fast)}._fetching_aacjp_85{opacity:.45;pointer-events:none}._card_aacjp_90{display:flex;flex-direction:column;text-align:left;padding:0;border:none;background:none;cursor:pointer;color:inherit}._thumbWrap_aacjp_101{position:relative;aspect-ratio:4 / 3;border-radius:var(--radius-lg);overflow:hidden;background:var(--bg-tertiary);transition:transform var(--transition-fast) var(--ease-smooth),box-shadow var(--transition-fast) var(--ease-smooth)}._card_aacjp_90:hover ._thumbWrap_aacjp_101{transform:translateY(calc(var(--space-1) * -1));box-shadow:var(--shadow-lg)}._thumb_aacjp_101{width:100%;height:100%;object-fit:cover;display:block}._thumbPlaceholder_aacjp_124{display:flex;align-items:center;justify-content:center;color:var(--text-tertiary);font-size:var(--font-size-sm)}._adultBadge_aacjp_132{position:absolute;top:var(--space-2);right:var(--space-2);padding:var(--space-2px) var(--space-2);border-radius:var(--radius-full);background:var(--color-danger-bg);color:var(--text-primary);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold)}._cardTitle_aacjp_144{margin:var(--space-2) 0 var(--space-2px);font-size:var(--font-size-sm);color:var(--text-primary);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}._cardMeta_aacjp_154{margin:0;font-size:var(--font-size-xs);color:var(--text-tertiary)}._asmrCardWrap_aacjp_160{position:relative;min-width:0}._bookmarkBtn_aacjp_165{position:absolute;top:var(--space-2);right:var(--space-2);width:28px;height:28px;border-radius:50%;background-color:#0009;color:#fff;border:1px solid rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;transition:opacity .15s ease,background-color .15s ease,transform .15s ease;z-index:20}._asmrCardWrap_aacjp_160:hover ._bookmarkBtn_aacjp_165,._asmrCardWrap_aacjp_160:focus-within ._bookmarkBtn_aacjp_165,._bookmarkBtn_aacjp_165._bookmarked_aacjp_189{opacity:1}._bookmarkBtn_aacjp_165:hover{background-color:var(--accent);border-color:var(--accent);color:var(--accent-text);transform:scale(1.08)}._bookmarkBtn_aacjp_165._bookmarked_aacjp_189{background-color:var(--accent);border-color:var(--accent);color:var(--accent-text)}._popupCover_aacjp_206{display:block;width:100%;aspect-ratio:16 / 9;object-fit:cover;border-radius:var(--radius-md);margin-bottom:var(--space-3);background:var(--bg-tertiary)}@media(hover:none),(pointer:coarse){._bookmarkBtn_aacjp_165{opacity:1}}@media(max-width:768px){._popupCover_aacjp_206{aspect-ratio:3 / 4;max-height:38vh}}._statusMsg_aacjp_229{text-align:center;color:var(--text-secondary);padding:var(--space-8) 0}._skeletonCard_aacjp_237{display:flex;flex-direction:column}._skeletonThumb_aacjp_242{aspect-ratio:4 / 3;border-radius:var(--radius-lg);background:var(--bg-tertiary)}._skeletonLine_aacjp_248{height:var(--space-3);border-radius:var(--radius-xs);margin-top:var(--space-2);background:var(--bg-tertiary)}._shimmer_aacjp_255{position:relative;overflow:hidden}._shimmer_aacjp_255:after{content:"";position:absolute;inset:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,var(--shimmer-highlight),transparent);animation:_skeleton-wave_aacjp_1 var(--duration-shimmer) infinite}._pagination_aacjp_269{display:flex;align-items:center;justify-content:center;gap:var(--space-4);margin-top:var(--space-6)}._pageBtn_aacjp_277{padding:var(--space-2) var(--space-5);border:var(--space-px) solid var(--border-primary);border-radius:var(--radius-md);background:var(--bg-elevated);color:var(--text-primary);cursor:pointer}._pageBtn_aacjp_277:disabled{opacity:.4;cursor:not-allowed}._pageIndicator_aacjp_291{color:var(--text-secondary);font-size:var(--font-size-sm)}._matureToggleWrap_aacjp_296{display:flex;align-items:center;gap:var(--space-2);margin-left:auto}._matureLabel_aacjp_303{font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);color:var(--text-secondary)}._translateToggleWrap_aacjp_309{display:flex;align-items:center;gap:var(--space-2);margin-left:auto}._filterTogglesGroup_aacjp_316{display:flex;align-items:center;gap:var(--space-4);margin-left:auto}._filterTogglesGroup_aacjp_316 ._translateToggleWrap_aacjp_309,._filterTogglesGroup_aacjp_316 ._matureToggleWrap_aacjp_296{margin-left:0}._filterBar_aacjp_328{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-4)}._filterLabel_aacjp_335{font-size:var(--font-size-sm);color:var(--text-secondary)}._detailOverlay_aacjp_340{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center;background:var(--bg-overlay-heavy);-webkit-backdrop-filter:blur(var(--blur-sm));backdrop-filter:blur(var(--blur-sm));padding:var(--space-4)}._detailModal_aacjp_352{position:relative;width:min(var(--size-720),100%);max-height:85vh;overflow-y:auto;border-radius:var(--radius-xl);border:var(--space-px) solid var(--border-secondary);background:var(--bg-elevated);box-shadow:var(--glass-shadow);padding:var(--space-5)}._detailClose_aacjp_364{position:absolute;top:var(--space-3);right:var(--space-3);display:flex;align-items:center;justify-content:center;width:var(--size-34);height:var(--size-34);border:none;border-radius:var(--radius-full);background:var(--bg-tertiary);color:var(--text-primary);cursor:pointer}._detailHeader_aacjp_380{display:flex;flex-direction:column;gap:var(--space-4)}._detailCover_aacjp_386{width:100%;aspect-ratio:16 / 9;object-fit:cover;border-radius:var(--radius-lg);flex-shrink:0;background:var(--bg-tertiary)}._detailInfo_aacjp_395{min-width:0}._detailTitle_aacjp_399{margin:0 0 var(--space-2);font-size:var(--font-size-lg);color:var(--text-primary);line-height:1.35}._detailRj_aacjp_406{margin:0 0 var(--space-3);font-size:var(--font-size-xs);color:var(--text-tertiary)}._metaRow_aacjp_412{margin:0 0 4px;font-size:var(--font-size-sm);color:var(--text-secondary)}._metaLabel_aacjp_418{display:inline-block;min-width:var(--space-16);color:var(--text-tertiary)}._tagChips_aacjp_424{display:inline-flex;flex-wrap:wrap;gap:var(--space-1)}._tagChip_aacjp_424{padding:var(--space-2px) var(--space-2);border-radius:var(--radius-full);background:var(--bg-tertiary);color:var(--text-secondary);font-size:var(--font-size-xs)}._npOverlay_aacjp_440{position:fixed;inset:0;z-index:var(--z-overlay);display:flex;flex-direction:column;background:var(--bg-dark);overflow:hidden;overscroll-behavior:contain}body.asmr-player-open{overflow:hidden}._playerBarDocked_aacjp_455{position:static;transform:translateY(0);max-height:var(--size-240);overflow:visible;transition:transform var(--transition-emphasized),max-height var(--transition-emphasized),opacity var(--transition-base),padding var(--transition-base),border-width var(--transition-base);will-change:transform,max-height,opacity}._playerBarDockedHidden_aacjp_469{max-height:0!important;opacity:0;transform:translateY(18%);padding-top:0!important;padding-bottom:0!important;border-width:0!important;pointer-events:none;overflow:hidden!important}._npOverlayControlsHidden_aacjp_480 ._npArrow_aacjp_480,._npOverlayControlsHidden_aacjp_480 ._npImageCount_aacjp_481{opacity:0;pointer-events:none;transform:translateY(-50%) scale(.96);transition:opacity var(--transition-base),transform var(--transition-emphasized)}._npOverlayControlsHidden_aacjp_480 ._npStage_aacjp_490{cursor:pointer}._npStage_aacjp_490{position:relative;flex:1;min-height:0;display:flex;align-items:center;justify-content:center;background:var(--bg-black);transition:padding var(--transition-emphasized)}._npStage_aacjp_490,._sliderViewport_aacjp_506,._slide_aacjp_506,._slideImg_aacjp_508{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;outline:none;-webkit-user-select:none;user-select:none}._npStage_aacjp_490:focus,._sliderViewport_aacjp_506:focus,._slide_aacjp_506:focus,._slideImg_aacjp_508:focus{outline:none!important;box-shadow:none!important}._slideImg_aacjp_508::-moz-focus-inner{border:0}._npStageBlank_aacjp_527{background:var(--bg-dark)}._npStageImg_aacjp_531{max-width:min(92vw,var(--size-900));max-height:100%;object-fit:contain;-webkit-user-select:none;user-select:none}._sliderViewport_aacjp_506{position:absolute;inset:0;overflow:hidden}._sliderTrack_aacjp_546{display:flex;height:100%;transition:transform var(--transition-normal);will-change:transform}._slide_aacjp_506{flex:0 0 100%;height:100%;display:flex;align-items:center;justify-content:center;padding:var(--space-5) var(--size-84);box-sizing:border-box;transition:padding var(--transition-emphasized)}._slideImg_aacjp_508{max-width:100%;max-height:100%;object-fit:contain;-webkit-user-select:none;user-select:none;opacity:0;transform:scale(.985);-webkit-tap-highlight-color:transparent;outline:none;transition:opacity var(--transition-base),transform var(--transition-emphasized),max-height var(--transition-emphasized)}._slideImgLoaded_aacjp_579{opacity:1;transform:none}._slideSpinner_aacjp_584{position:absolute;left:50%;top:50%;width:var(--size-44);height:var(--size-44);margin:calc(var(--size-22) * -1) 0 0 calc(var(--size-22) * -1);border-radius:var(--radius-full);border:var(--space-2px) solid var(--border-strong);border-top-color:var(--text-primary);animation:_spin_aacjp_1 var(--duration-spin) linear infinite;pointer-events:none}@keyframes _spin_aacjp_1{to{transform:rotate(360deg)}}._npArrow_aacjp_480{position:absolute;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:var(--size-48);height:var(--size-48);border:var(--space-px) solid var(--border-strong);border-radius:var(--radius-full);background:var(--bg-scrim);-webkit-backdrop-filter:blur(var(--blur-md));backdrop-filter:blur(var(--blur-md));box-shadow:var(--shadow-scrim);color:var(--text-primary);cursor:pointer;transition:background var(--transition-fast),opacity var(--transition-fast)}._npArrow_aacjp_480:hover:not(:disabled){background:var(--bg-scrim-strong)}._npArrow_aacjp_480:disabled{opacity:.25;cursor:not-allowed}._npArrowLeft_aacjp_634{left:var(--space-5)}._npArrowRight_aacjp_638{right:var(--space-5)}._npImageCount_aacjp_481{position:absolute;top:calc(var(--space-4) + var(--space-16));right:var(--space-4);padding:var(--space-2px) var(--space-2-5);border-radius:var(--radius-full);background:var(--bg-overlay-strong);color:var(--text-secondary);font-size:var(--font-size-xs);font-variant-numeric:tabular-nums;z-index:var(--z-base)}._chapterPanel_aacjp_655{position:absolute;bottom:calc(100% + var(--space-2-5));right:var(--space-5);width:min(var(--size-440),calc(100vw - var(--space-8)));max-height:min(46vh,var(--size-420));overflow-y:auto;background:var(--bg-elevated);border:var(--space-px) solid var(--border-secondary);border-radius:var(--radius-lg);box-shadow:var(--shadow-panel);padding:var(--space-1-5);z-index:var(--z-dropdown)}._chapterRow_aacjp_670{display:flex;align-items:baseline;gap:var(--space-3);width:100%;text-align:left;padding:var(--space-2) var(--space-3);border:none;border-radius:var(--radius-md);background:transparent;color:var(--text-primary);cursor:pointer;font-size:var(--font-size-sm)}._chapterRow_aacjp_670:hover{background:var(--bg-tertiary)}._chapterRowActive_aacjp_689{background:var(--bg-selected)}._chapterRowTime_aacjp_693{flex-shrink:0;color:var(--text-tertiary);font-variant-numeric:tabular-nums}._chapterRowActive_aacjp_689 ._chapterRowTime_aacjp_693{color:var(--accent);font-weight:var(--font-weight-semibold)}._chapterRowLabel_aacjp_704{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._npBackdrop_aacjp_710{position:fixed;inset:0;z-index:-1}._playerBtn_aacjp_716._playerBtnActive_aacjp_716{color:var(--accent);background:color-mix(in srgb,var(--accent) 20%,transparent);box-shadow:0 0 10px var(--accent-glow)}._tracksSection_aacjp_722{margin-top:var(--space-5)}._tracksHeading_aacjp_726{font-size:var(--font-size-base);color:var(--text-primary);margin:0 0 var(--space-2)}._trackList_aacjp_732{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-1-5)}._trackRow_aacjp_741{display:flex;align-items:center;gap:var(--space-3);width:100%;padding:var(--space-2) var(--space-3);border:var(--space-px) solid var(--border-secondary);border-radius:var(--radius-md);background:var(--bg-secondary);color:var(--text-primary);cursor:pointer;font-size:var(--font-size-sm)}._trackRow_aacjp_741:hover{border-color:var(--accent)}._trackIcon_aacjp_759{color:var(--accent);flex-shrink:0}._trackLabel_aacjp_764{flex:1;text-align:left}._trackType_aacjp_769{font-size:var(--font-size-xs);color:var(--text-tertiary)}._noTracks_aacjp_774{color:var(--text-secondary);font-size:var(--font-size-sm)}._playAllBtn_aacjp_779{display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-2-5) var(--space-5);border:none;border-radius:var(--radius-md);background:var(--accent);color:var(--accent-text);font-size:var(--font-size-base);cursor:pointer}._detailActions_aacjp_792{display:flex;flex-wrap:wrap;gap:var(--space-3);margin-top:var(--space-5)}._playerBar_aacjp_455{position:fixed;left:0;right:0;bottom:0;z-index:var(--z-overlay);display:flex;align-items:center;gap:var(--space-4);padding:var(--space-2-5) var(--space-5);padding-bottom:calc(var(--space-2-5) + env(safe-area-inset-bottom,0px));background:var(--glass-bg);border-top:var(--space-px) solid var(--glass-border);-webkit-backdrop-filter:blur(var(--blur-lg));backdrop-filter:blur(var(--blur-lg))}._playerActions_aacjp_815{display:flex;align-items:center;gap:var(--space-2)}._playerInfo_aacjp_821{min-width:0;width:var(--size-240)}._playerTitle_aacjp_826{margin:0;font-size:var(--font-size-sm);color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._playerTrack_aacjp_835{margin:var(--space-2px) 0 0;font-size:var(--font-size-xs);color:var(--text-tertiary)}._playerControls_aacjp_841{display:flex;align-items:center;gap:var(--space-3);flex:1}._seekRow_aacjp_848{display:flex;align-items:center;gap:var(--space-3);flex:1;min-width:0}._playerButtons_aacjp_856{display:flex;align-items:center;gap:var(--space-2)}._playerBtn_aacjp_716{display:flex;align-items:center;justify-content:center;width:var(--size-36);height:var(--size-36);border:none;border-radius:var(--radius-full);background:transparent;color:var(--text-primary);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast),transform var(--transition-quick),opacity var(--transition-fast)}._playerBtn_aacjp_716:disabled{opacity:.35;cursor:not-allowed}@media(hover:hover)and (pointer:fine){._playerBtn_aacjp_716:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary)}._seekBtn_aacjp_891:hover:not(:disabled){background:var(--bg-hover-strong);color:var(--accent)}._seekBtn_aacjp_891:hover ._seekBtnLabel_aacjp_896{background:var(--accent);color:var(--accent-text)}._playBtn_aacjp_901:hover:not(:disabled){background:var(--accent-light);color:var(--accent-text);box-shadow:0 0 12px var(--accent-glow)}}._playerBtn_aacjp_716:active:not(:disabled){transform:scale(.94);transition:transform var(--transition-quick),background var(--transition-quick)}._playBtn_aacjp_901{background:var(--accent);color:var(--accent-text);width:var(--size-42);height:var(--size-42)}._playBtn_aacjp_901:disabled{opacity:1}._seekBtn_aacjp_891{position:relative;font-size:var(--font-size-sm);color:var(--text-primary)}._seekBtnLabel_aacjp_896{position:absolute;bottom:var(--space-px);left:50%;transform:translate(-50%);font-size:var(--font-size-2xs);font-weight:var(--font-weight-bold);line-height:1;letter-spacing:-.02em;background:var(--bg-overlay);color:var(--text-primary);padding:var(--space-px) var(--space-2px);border-radius:var(--radius-sm);pointer-events:none}._seekBar_aacjp_948,._volumeBar_aacjp_949{-webkit-appearance:none;appearance:none;height:var(--size-18);background:transparent;cursor:pointer}._seekBar_aacjp_948::-webkit-slider-runnable-track,._volumeBar_aacjp_949::-webkit-slider-runnable-track{width:100%;height:var(--space-1);border-radius:var(--space-1)}._seekBar_aacjp_948::-webkit-slider-runnable-track{background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--played-percent, 0%),var(--track-buffered) var(--played-percent, 0%),var(--track-buffered) var(--buffered-percent, 0%),var(--track-bg) var(--buffered-percent, 0%),var(--track-bg) 100%)}._volumeBar_aacjp_949::-webkit-slider-runnable-track{background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--volume-percent, 100%),var(--track-bg) var(--volume-percent, 100%),var(--track-bg) 100%)}._seekBar_aacjp_948::-moz-range-track{width:100%;height:var(--space-1);border-radius:var(--space-1);background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--played-percent, 0%),var(--track-buffered) var(--played-percent, 0%),var(--track-buffered) var(--buffered-percent, 0%),var(--track-bg) var(--buffered-percent, 0%),var(--track-bg) 100%)}._volumeBar_aacjp_949::-moz-range-track{width:100%;height:var(--space-1);border-radius:var(--space-1);background:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--volume-percent, 100%),var(--track-bg) var(--volume-percent, 100%),var(--track-bg) 100%)}._seekBar_aacjp_948::-webkit-slider-thumb,._volumeBar_aacjp_949::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;height:var(--space-3);width:var(--space-3);border-radius:var(--radius-full);background:var(--text-primary);margin-top:calc(var(--space-1) * -1);box-shadow:var(--shadow-thumb)}._seekBar_aacjp_948::-moz-range-thumb,._volumeBar_aacjp_949::-moz-range-thumb{height:var(--space-3);width:var(--space-3);border:none;border-radius:var(--radius-full);background:var(--text-primary);box-shadow:var(--shadow-thumb)}._seekBar_aacjp_948{flex:1;min-width:0}._timeLabel_aacjp_1041{font-size:var(--font-size-xs);color:var(--text-secondary);font-variant-numeric:tabular-nums}._playerRight_aacjp_1047{display:flex;align-items:center;gap:var(--space-2)}._volumeIcon_aacjp_1053{color:var(--text-secondary)}._volumeBar_aacjp_949{width:var(--size-90)}@media(max-width:768px){._detailHeader_aacjp_380{flex-direction:column}._detailCover_aacjp_386{width:100%}._filterBar_aacjp_328{flex-wrap:wrap}._filterBar_aacjp_328 ._sortSelect_aacjp_68{flex:1 1 var(--size-140);min-width:0}._pageWithPlayer_aacjp_8{padding-bottom:var(--layout-player-mobile)}._playerBar_aacjp_455{display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"toggle info actions" "controls controls controls" "volume volume volume";align-items:center;column-gap:var(--space-2);row-gap:var(--space-2px);padding:var(--space-2) var(--space-3);padding-bottom:calc(var(--space-2) + env(safe-area-inset-bottom,0px))}._playerToggle_aacjp_1097{grid-area:toggle}._playerInfo_aacjp_821{grid-area:info;width:auto}._playerActions_aacjp_815{grid-area:actions;margin-right:calc(var(--space-1-5) * -1)}._playerControls_aacjp_841{grid-area:controls;gap:var(--space-2);min-width:0;justify-content:center}._playerRight_aacjp_1047{grid-area:volume;width:100%}._volumeBar_aacjp_949{flex:1;width:auto;height:var(--space-6)}._slide_aacjp_506{padding:0 var(--size-52)}._npArrow_aacjp_480{width:var(--size-42);height:var(--size-42);opacity:.85}._npArrowLeft_aacjp_634{left:var(--space-2)}._npArrowRight_aacjp_638{right:var(--space-2)}._npImageCount_aacjp_481{top:calc(var(--space-3) + env(safe-area-inset-top,0px));right:var(--space-3)}._chapterPanel_aacjp_655{right:var(--space-3);max-height:55vh}}@media(max-width:768px)and (orientation:portrait){._npStage_aacjp_490{height:100%}._sliderViewport_aacjp_506{inset:0}._slide_aacjp_506{padding:0}._npOverlay_aacjp_440:not(._npOverlayControlsHidden_aacjp_480) ._slide_aacjp_506{padding-bottom:var(--space-2-5)}._npOverlay_aacjp_440:not(._npOverlayControlsHidden_aacjp_480) ._slideImg_aacjp_508{max-height:calc(100% - var(--space-2-5))}._slideImg_aacjp_508{width:auto;height:auto;max-width:100%;max-height:100%;object-fit:contain;object-position:center}._playerBar_aacjp_455{grid-template-areas:"toggle info actions" "controls controls controls" "volume volume volume";row-gap:var(--space-2-5);padding:var(--space-2-5) var(--space-3);padding-bottom:calc(var(--space-2-5) + env(safe-area-inset-bottom,0px))}._playerControls_aacjp_841{flex-direction:column;align-items:center;gap:var(--space-2);width:100%}._playerButtons_aacjp_856{justify-content:center;width:100%;gap:var(--space-1-5)}._seekRow_aacjp_848{width:100%;justify-content:center}._seekRow_aacjp_848 ._seekBar_aacjp_948{flex:1}._playerRight_aacjp_1047{justify-content:center;width:100%}._playerRight_aacjp_1047 ._volumeBar_aacjp_949{flex:1;width:100%;max-width:var(--size-320)}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const a="_page_aacjp_1",e="_pageWithPlayer_aacjp_8",t="_header_aacjp_12",c="_pageTitle_aacjp_20",_="_searchForm_aacjp_29",o="_searchInput_aacjp_44",p="_searchBtn_aacjp_55",r="_sortSelect_aacjp_68",n="_grid_aacjp_78",l="_fetching_aacjp_85",s="_thumbPlaceholder_aacjp_124",i="_asmrCardWrap_aacjp_160",d="_bookmarkBtn_aacjp_165",j="_bookmarked_aacjp_189",g="_popupCover_aacjp_206",k="_statusMsg_aacjp_229",y="_skeletonCard_aacjp_237",m="_skeletonThumb_aacjp_242",h="_skeletonLine_aacjp_248",B="_shimmer_aacjp_255",T="_pagination_aacjp_269",u="_pageBtn_aacjp_277",b="_pageIndicator_aacjp_291",w="_matureToggleWrap_aacjp_296",L="_matureLabel_aacjp_303",C="_translateToggleWrap_aacjp_309",R="_filterTogglesGroup_aacjp_316",v="_filterBar_aacjp_328",I="_filterLabel_aacjp_335",A="_detailOverlay_aacjp_340",f="_detailModal_aacjp_352",S="_detailClose_aacjp_364",H="_detailHeader_aacjp_380",W="_detailCover_aacjp_386",O="_detailInfo_aacjp_395",P="_detailTitle_aacjp_399",D="_detailRj_aacjp_406",M="_metaRow_aacjp_412",F="_metaLabel_aacjp_418",G="_tagChips_aacjp_424",V="_tagChip_aacjp_424",x="_npOverlay_aacjp_440",q="_playerBarDocked_aacjp_455",z="_playerBarDockedHidden_aacjp_469",E="_npOverlayControlsHidden_aacjp_480",J="_npArrow_aacjp_480",K="_npImageCount_aacjp_481",N="_npStage_aacjp_490",Q="_sliderViewport_aacjp_506",U="_slide_aacjp_506",X="_slideImg_aacjp_508",Y="_npStageBlank_aacjp_527",Z="_sliderTrack_aacjp_546",$="_slideImgLoaded_aacjp_579",aa="_slideSpinner_aacjp_584",ea="_npArrowLeft_aacjp_634",ta="_npArrowRight_aacjp_638",ca="_chapterPanel_aacjp_655",_a="_chapterRow_aacjp_670",oa="_chapterRowActive_aacjp_689",pa="_chapterRowTime_aacjp_693",ra="_chapterRowLabel_aacjp_704",na="_npBackdrop_aacjp_710",la="_playerBtn_aacjp_716",sa="_playerBtnActive_aacjp_716",ia="_tracksSection_aacjp_722",da="_tracksHeading_aacjp_726",ja="_trackList_aacjp_732",ga="_trackRow_aacjp_741",ka="_trackIcon_aacjp_759",ya="_trackLabel_aacjp_764",ma="_trackType_aacjp_769",ha="_noTracks_aacjp_774",Ba="_playAllBtn_aacjp_779",Ta="_detailActions_aacjp_792",ua="_playerBar_aacjp_455",ba="_playerActions_aacjp_815",wa="_playerInfo_aacjp_821",La="_playerTitle_aacjp_826",Ca="_playerTrack_aacjp_835",Ra="_playerControls_aacjp_841",va="_seekRow_aacjp_848",Ia="_playerButtons_aacjp_856",Aa="_seekBtn_aacjp_891",fa="_seekBtnLabel_aacjp_896",Sa="_playBtn_aacjp_901",Ha="_seekBar_aacjp_948",Wa="_volumeBar_aacjp_949",Oa="_timeLabel_aacjp_1041",Pa="_playerRight_aacjp_1047",Da="_volumeIcon_aacjp_1053",Ma="_playerToggle_aacjp_1097",Fa={page:a,pageWithPlayer:e,header:t,pageTitle:c,searchForm:_,searchInput:o,searchBtn:p,sortSelect:r,grid:n,fetching:l,thumbPlaceholder:s,asmrCardWrap:i,bookmarkBtn:d,bookmarked:j,popupCover:g,statusMsg:k,skeletonCard:y,skeletonThumb:m,skeletonLine:h,shimmer:B,pagination:T,pageBtn:u,pageIndicator:b,matureToggleWrap:w,matureLabel:L,translateToggleWrap:C,filterTogglesGroup:R,filterBar:v,filterLabel:I,detailOverlay:A,detailModal:f,detailClose:S,detailHeader:H,detailCover:W,detailInfo:O,detailTitle:P,detailRj:D,metaRow:M,metaLabel:F,tagChips:G,tagChip:V,npOverlay:x,playerBarDocked:q,playerBarDockedHidden:z,npOverlayControlsHidden:E,npArrow:J,npImageCount:K,npStage:N,sliderViewport:Q,slide:U,slideImg:X,npStageBlank:Y,sliderTrack:Z,slideImgLoaded:$,slideSpinner:aa,npArrowLeft:ea,npArrowRight:ta,chapterPanel:ca,chapterRow:_a,chapterRowActive:oa,chapterRowTime:pa,chapterRowLabel:ra,npBackdrop:na,playerBtn:la,playerBtnActive:sa,tracksSection:ia,tracksHeading:da,trackList:ja,trackRow:ga,trackIcon:ka,trackLabel:ya,trackType:ma,noTracks:ha,playAllBtn:Ba,detailActions:Ta,playerBar:ua,playerActions:ba,playerInfo:wa,playerTitle:La,playerTrack:Ca,playerControls:Ra,seekRow:va,playerButtons:Ia,seekBtn:Aa,seekBtnLabel:fa,playBtn:Sa,seekBar:Ha,volumeBar:Wa,timeLabel:Oa,playerRight:Pa,volumeIcon:Da,playerToggle:Ma};export{Fa as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as a,u as l}from"./vendor-core-8R2fFbyN.js";import{R as i}from"./ResetProgressModal-CR_ovLAu.js";import{s as f,n as R}from"./useAsmr-CbMVRjmV.js";const A=({workId:e,title:m,onClose:o})=>{const[r,s]=a(!1),t=f(),n=R();return l(i,{isOpen:!!e,itemName:m,progressKind:"listening",listLabel:"my listening list",alsoRemove:r,onAlsoRemoveChange:s,onClose:()=>{s(!1),o()},onConfirm:()=>{e&&(t.mutate({workId:e}),r&&n.mutate(e),s(!1),o())}})};export{A};
|