this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

init

EGOIST 0be62e27

+1095
+34
.gitignore
··· 1 + # dependencies (bun install) 2 + node_modules 3 + 4 + # output 5 + out 6 + dist 7 + *.tgz 8 + 9 + # code coverage 10 + coverage 11 + *.lcov 12 + 13 + # logs 14 + logs 15 + _.log 16 + report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 17 + 18 + # dotenv environment variable files 19 + .env 20 + .env.development.local 21 + .env.test.local 22 + .env.production.local 23 + .env.local 24 + 25 + # caches 26 + .eslintcache 27 + .cache 28 + *.tsbuildinfo 29 + 30 + # IntelliJ based IDEs 31 + .idea 32 + 33 + # Finder (MacOS) folder config 34 + .DS_Store
+15
README.md
··· 1 + # anime 2 + 3 + To install dependencies: 4 + 5 + ```bash 6 + bun install 7 + ``` 8 + 9 + To run: 10 + 11 + ```bash 12 + bun run 13 + ``` 14 + 15 + This project was created using `bun init` in bun v1.2.8. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.
+389
anime-data.ts
··· 1 + type Data = { 2 + [key: string]: { title: string; score: number }[]; 3 + }; 4 + 5 + const data: Data = { 6 + "2006": [ 7 + { title: "死亡笔记", score: 8.4 }, 8 + { title: "银魂", score: 8.7 }, 9 + { title: "寒蝉鸣泣之时", score: 8 }, 10 + { title: "Code Geass 反叛的鲁路修", score: 8.3 }, 11 + { title: "欢迎加入NHK!", score: 8.2 }, 12 + { title: "Fate/stay night", score: 7.1 }, 13 + { title: "凉宫春日的忧郁", score: 8.2 }, 14 + { title: "零之使魔", score: 7 }, 15 + { title: "黑礁", score: 7.8 }, 16 + { title: "Kanon", score: 7.7 }, 17 + { title: "娜娜", score: 8 }, 18 + { title: "×××HOLiC", score: 7.8 }, 19 + { title: "家庭教师HITMAN REBORN!", score: 7.5 }, 20 + { title: "樱兰高校男公关部", score: 7.6 }, 21 + { title: "蜂蜜与四叶草II", score: 8.5 }, 22 + ], 23 + "2007": [ 24 + { title: "幸运星", score: 8.3 }, 25 + { title: "CLANNAD", score: 8.3 }, 26 + { title: "天元突破 红莲螺岩", score: 8.6 }, 27 + { title: "旋风管家", score: 7.4 }, 28 + { title: "火影忍者疾风传", score: 7.6 }, 29 + { title: "悠久之翼", score: 7.9 }, 30 + { title: "赌博默示录", score: 7.9 }, 31 + { title: "永生之酒", score: 8.2 }, 32 + { title: "机动战士高达00", score: 7.6 }, 33 + { title: "再见绝望先生", score: 7.8 }, 34 + { title: "日在校园", score: 6.3 }, 35 + { title: "南家三姐妹", score: 7.6 }, 36 + { title: "DARKER THAN BLACK -黑之契约者-", score: 8 }, 37 + { title: "濑户的花嫁", score: 7.4 }, 38 + { title: "电脑线圈", score: 8.1 }, 39 + { title: "物怪", score: 8.2 }, 40 + { title: "向阳素描", score: 7.5 }, 41 + { title: "零之使魔 双月骑士", score: 6.9 }, 42 + { title: "sola", score: 7.2 }, 43 + ], 44 + "2008": [ 45 + { title: "出包王女", score: 6.9 }, 46 + { title: "龙与虎", score: 8 }, 47 + { title: "魔法禁书目录", score: 6.8 }, 48 + { title: "狼与香辛料", score: 7.8 }, 49 + { title: "夏目友人帐", score: 8 }, 50 + { title: "真实之泪", score: 7.5 }, 51 + { title: "神薙", score: 7.1 }, 52 + { title: "我的狐仙女友", score: 6.1 }, 53 + { title: "噬魂师", score: 7.4 }, 54 + { title: "黑执事", score: 7 }, 55 + { title: "俗・再见绝望先生", score: 7.8 }, 56 + { title: "鹡鸰女神", score: 6.2 }, 57 + { title: "强袭魔女", score: 7.1 }, 58 + ], 59 + "2009": [ 60 + { title: "轻音少女", score: 8.2 }, 61 + { title: "钢之炼金术师 FULLMETAL ALCHEMIST", score: 8.8 }, 62 + { title: "化物语", score: 8.4 }, 63 + { title: "凉宫春日的忧郁 2009", score: 8 }, 64 + { title: "某科学的超电磁炮", score: 7.5 }, 65 + { title: "学生会的一己之见", score: 7.4 }, 66 + { title: "天降之物", score: 7.3 }, 67 + { title: "天才麻将少女", score: 7.5 }, 68 + { title: "白色相簿", score: 7.3 }, 69 + { title: "妖精的尾巴", score: 7.4 }, 70 + { title: "好想告诉你", score: 7.6 }, 71 + ], 72 + "2010": [ 73 + { title: "吊带袜天使", score: 8 }, 74 + { title: "四叠半神话大系", score: 8.6 }, 75 + { title: "妄想学生会", score: 7.5 }, 76 + { title: "缘之空", score: 6.6 }, 77 + { title: "笨蛋,测验,召唤兽", score: 7.4 }, 78 + { title: "天使的心跳!", score: 7.5 }, 79 + { title: "无头骑士异闻录", score: 7.9 }, 80 + { title: "只有神知道的世界", score: 7.2 }, 81 + { title: "圣诞之吻SS", score: 7.3 }, 82 + { title: "我的妹妹哪有这么可爱!", score: 7.1 }, 83 + { title: "更多 出包王女", score: 7.2 }, 84 + { title: "女仆咖啡厅", score: 7.8 }, 85 + { title: "亲吻姐姐", score: 6.7 }, 86 + { title: "迷糊餐厅", score: 7.5 }, 87 + { title: "学园默示录 HIGHSCHOOL OF THE DEAD", score: 6.7 }, 88 + { title: "荒川爆笑团", score: 7.5 }, 89 + { title: "天降之物f", score: 7.3 }, 90 + { title: "爆漫王。", score: 8 }, 91 + { title: "会长是女仆大人!", score: 6.9 }, 92 + { title: "圣痕炼金士", score: 6 }, 93 + { title: "空之音", score: 6.8 }, 94 + ], 95 + "2011": [ 96 + { title: "命运石之门", score: 8.8 }, 97 + { title: "日常", score: 8.5 }, 98 + { title: "Fate/Zero", score: 8.1 }, 99 + { title: "魔法少女小圆", score: 8.6 }, 100 + { title: "回转企鹅罐", score: 8 }, 101 + { title: "银魂'", score: 8.7 }, 102 + { title: "摇曳百合", score: 7.6 }, 103 + { title: "我们仍未知道那天所看见的花的名字。", score: 7.6 }, 104 + { title: "罪恶王冠", score: 6.5 }, 105 + { title: "花开伊吕波", score: 7.5 }, 106 + { title: "偶像大师", score: 8.3 }, 107 + { title: "GOSICK", score: 7.3 }, 108 + { title: "我的朋友很少", score: 6.8 }, 109 + { title: "猎人", score: 8.2 }, 110 + { title: "未来日记", score: 7.2 }, 111 + { title: "电波女与青春男", score: 7.1 }, 112 + { title: "这个是僵尸吗?", score: 6.8 }, 113 + { title: "赌博默示录 破戒录篇", score: 7.8 }, 114 + { title: "迷茫管家与懦弱的我", score: 6.6 }, 115 + { title: "纯白交响曲", score: 6.5 }, 116 + { title: "神的记事本", score: 6.7 }, 117 + { title: "BLOOD-C", score: 6 }, 118 + { title: "丹特丽安的书架", score: 7.1 }, 119 + ], 120 + "2012": [ 121 + { title: "冰菓", score: 8.2 }, 122 + { title: "JOJO的奇妙冒险", score: 7.8 }, 123 + { title: "男子高中生的日常", score: 7.9 }, 124 + { title: "中二病也要谈恋爱!", score: 7.4 }, 125 + { title: "来自新世界", score: 8.2 }, 126 + { title: "伪物语", score: 7.8 }, 127 + { title: "Another", score: 7 }, 128 + { title: "樱花庄的宠物女孩", score: 7.4 }, 129 + { title: "心理测量者", score: 7.9 }, 130 + { title: "出包王女Darkness", score: 7.4 }, 131 + { title: "恶魔高校 D×D", score: 6.9 }, 132 + { title: "刀剑神域", score: 7.3 }, 133 + { title: "人类衰退之后", score: 7.9 }, 134 + { title: "Little Busters!", score: 7.1 }, 135 + { title: "潜行吧!奈亚子", score: 7 }, 136 + { title: "邻座的怪同学", score: 7.2 }, 137 + { title: "猫物语(黑)", score: 7.7 }, 138 + { title: "少女与战车", score: 7.6 }, 139 + { title: "心灵链环", score: 7.4 }, 140 + { title: "TARI TARI", score: 7.3 }, 141 + { title: "谜样女友X", score: 7 }, 142 + { title: "就算是哥哥只要有爱就没问题对吧", score: 5.9 }, 143 + { title: "散华礼弥", score: 6.8 }, 144 + ], 145 + "2013": [ 146 + { title: "进击的巨人", score: 8.2 }, 147 + { title: "斩服少女", score: 8.1 }, 148 + { title: "我的青春恋爱物语果然有问题", score: 7.5 }, 149 + { title: "悠哉日常大王", score: 8 }, 150 + { title: "玉子市场", score: 7.2 }, 151 + { title: "向山进发", score: 7.1 }, 152 + { title: "约会大作战", score: 6.6 }, 153 + { title: "噬血狂袭", score: 6.6 }, 154 + { title: "来自风平浪静的明天", score: 7.5 }, 155 + { title: "我的妹妹哪有这么可爱。", score: 6.9 }, 156 + { title: "瑞克和莫蒂 第一季", score: 8.4 }, 157 + { title: "我不受欢迎,怎么想都是你们的错!", score: 6.9 }, 158 + { title: "境界的彼方", score: 6.8 }, 159 + { title: "我的脑内选项正在全力妨碍学园恋爱喜剧", score: 6.6 }, 160 + { title: "Fate/kaleid liner 魔法少女☆伊莉雅", score: 6.9 }, 161 + { title: "GJ部", score: 6.9 }, 162 + { title: "弹丸论破 希望学园与绝望高中生", score: 6.6 }, 163 + { title: "黄金拼图", score: 7.3 }, 164 + { title: "Love Live!", score: 7.2 }, 165 + { title: "我女友与青梅竹马的惨烈修罗场", score: 6.4 }, 166 + { title: "我的朋友很少NEXT", score: 6.7 }, 167 + ], 168 + "2014": [ 169 + { title: "白箱", score: 8.7 }, 170 + { title: "四月是你的谎言", score: 8 }, 171 + { title: "Fate/stay night [Unlimited Blade Works]", score: 7.5 }, 172 + { title: "游戏人生", score: 7.7 }, 173 + { title: "乒乓", score: 8.7 }, 174 + { title: "甘城光辉游乐园", score: 7 }, 175 + { title: "寄生兽 生命的准则", score: 8 }, 176 + { title: "伪恋", score: 7.1 }, 177 + { title: "月刊少女野崎君", score: 7.8 }, 178 + { title: "请问您今天要来点兔子吗?", score: 7.3 }, 179 + { title: "斩·赤红之瞳!", score: 6.6 }, 180 + { title: "太空丹迪", score: 8 }, 181 + { title: "妄想学生会*", score: 7.6 }, 182 + { title: "东京喰种", score: 6.7 }, 183 + { title: "凭物语", score: 7.5 }, 184 + { title: "灰色的果实", score: 7.1 }, 185 + { title: "花物语", score: 7.3 }, 186 + { title: "农林", score: 6.6 }, 187 + { title: "魔法科高校的劣等生", score: 5.8 }, 188 + { title: "野良神", score: 7.1 }, 189 + ], 190 + "2015": [ 191 + { title: "路人女主的养成方法", score: 7.2 }, 192 + { title: "暗杀教室", score: 7.3 }, 193 + { title: "一拳超人", score: 8 }, 194 + { title: "新妹魔王的契约者", score: 5.8 }, 195 + { title: "夏洛特", score: 6.3 }, 196 + { title: "OVERLORD", score: 6.9 }, 197 + { title: "监狱学园", score: 7.3 }, 198 + { title: "可塑性记忆", score: 7 }, 199 + { title: "悠哉日常大王 Repeat", score: 8 }, 200 + { title: "在地下城寻求邂逅是否搞错了什么", score: 6.8 }, 201 + { title: "干物妹!小埋", score: 6.8 }, 202 + { title: "吹响!悠风号", score: 8.3 }, 203 + { title: "伪恋:", score: 7 }, 204 + { title: "终物语", score: 7.8 }, 205 + { title: "旋转少女", score: 7.4 }, 206 + { title: "落第骑士英雄谭", score: 6.5 }, 207 + { title: "没有黄段子存在的无聊世界", score: 6.1 }, 208 + { title: "请问您今天要来点兔子吗??", score: 7.5 }, 209 + { title: "银魂°", score: 8.2 }, 210 + ], 211 + "2016": [ 212 + { title: "为美好的世界献上祝福!", score: 7.6 }, 213 + { title: "3月的狮子", score: 8.3 }, 214 + { title: "ReLIFE", score: 7.7 }, 215 + { title: "齐木楠雄的灾难", score: 7.7 }, 216 + { title: "Re:从零开始的异世界生活", score: 7.4 }, 217 + { title: "只有我不存在的城市", score: 7.7 }, 218 + { title: "灵能百分百", score: 7.8 }, 219 + { title: "灰与幻想的格林姆迦尔", score: 7.5 }, 220 + { title: "这个美术社大有问题!", score: 7.3 }, 221 + { title: "轻拍翻转小魔女", score: 7.5 }, 222 + { title: "飞翔的魔女", score: 7.5 }, 223 + { title: "NEW GAME!", score: 7.4 }, 224 + { title: "在下坂本,有何贵干?", score: 6.5 }, 225 + { title: "昭和元禄落语心中", score: 8.2 }, 226 + { title: "无彩限的怪灵世界", score: 6.2 }, 227 + { title: "线上游戏的老婆不可能是女生?", score: 6 }, 228 + { title: "亚人", score: 7.3 }, 229 + { title: "甲铁城的卡巴内利", score: 5.9 }, 230 + { title: "剑风传奇", score: 6.8 }, 231 + ], 232 + "2017": [ 233 + { title: "为美好的世界献上祝福! 第二季", score: 7.7 }, 234 + { title: "少女终末旅行", score: 8.1 }, 235 + { title: "来自深渊", score: 8.2 }, 236 + { title: "小林家的龙女仆", score: 7.4 }, 237 + { title: "进击的巨人 第二季", score: 8.1 }, 238 + { title: "狂赌之渊", score: 7 }, 239 + { title: "末日时在做什么?有没有空?可以来拯救吗?", score: 7.6 }, 240 + { title: "路人女主的养成方法 ♭", score: 7.3 }, 241 + { title: "月色真美", score: 7.9 }, 242 + { title: "重启咲良田", score: 7.9 }, 243 + { title: "BanG Dream!", score: 6.4 }, 244 + { title: "幼女战记", score: 7.2 }, 245 + { title: "小魔女学园", score: 7.7 }, 246 + { title: "3月的狮子 第二季", score: 8.8 }, 247 + { title: "Just Because!", score: 7.3 }, 248 + { title: "埃罗芒阿老师", score: 6.6 }, 249 + { title: "人渣的本愿", score: 6.6 }, 250 + { title: "珈百璃的堕落", score: 7.1 }, 251 + { title: "笨女孩", score: 6.6 }, 252 + { title: "黑色五叶草", score: 6.5 }, 253 + { title: "如果有妹妹就好了。", score: 6.6 }, 254 + { title: "徒然喜欢你", score: 7.1 }, 255 + { title: "终物语(下)", score: 8.1 }, 256 + { title: "不正经的魔术讲师与禁忌教典", score: 6.2 }, 257 + ], 258 + "2018": [ 259 + { title: "摇曳露营△", score: 8.2 }, 260 + { title: "碧蓝之海", score: 7.8 }, 261 + { title: "赛马娘 Pretty Derby", score: 7 }, 262 + { title: "紫罗兰永恒花园", score: 7.5 }, 263 + { title: "JOJO的奇妙冒险 黄金之风", score: 8 }, 264 + { title: "强风吹拂", score: 8.3 }, 265 + { title: "少女☆歌剧 Revue Starlight", score: 7.9 }, 266 + { title: "擅长捉弄的高木同学", score: 7.5 }, 267 + { title: "佐贺偶像是传奇", score: 7.8 }, 268 + { title: "比宇宙更远的地方", score: 8.2 }, 269 + { title: "青春笨蛋少年不做兔女郎学姐的梦", score: 7.4 }, 270 + { title: "哥布林杀手", score: 6.7 }, 271 + { title: "终将成为你", score: 7.8 }, 272 + { title: "DARLING in the FRANXX", score: 6.2 }, 273 + { title: "来玩游戏吧", score: 7.6 }, 274 + { title: "邪神与厨二病少女", score: 7 }, 275 + { title: "恋如雨止", score: 7.5 }, 276 + { title: "关于我转生变成史莱姆这档事", score: 6.6 }, 277 + { title: "黄金神威", score: 7.5 }, 278 + ], 279 + "2019": [ 280 + { title: "冰海战记", score: 8.3 }, 281 + { title: "辉夜大小姐想让我告白~天才们的恋爱头脑战~", score: 7.8 }, 282 + { title: "街角魔族", score: 7.5 }, 283 + { title: "鬼灭之刃", score: 7.3 }, 284 + { title: "炎炎消防队", score: 6.5 }, 285 + { title: "女高中生的无所事事", score: 7.6 }, 286 + { title: "慎重勇者 ~这个勇者明明超强却过分慎重~", score: 6.9 }, 287 + { title: "天使降临到了我身边!", score: 7.3 }, 288 + { title: "不吉波普不笑", score: 7.3 }, 289 + { title: "笨拙之极的上野", score: 6.5 }, 290 + { title: "五等分的新娘", score: 6 }, 291 + { title: "约定的梦幻岛", score: 7.6 }, 292 + { title: "只要可爱即使是变态你也会喜欢我吧?", score: 6.1 }, 293 + { title: "Fate/Grand Order -绝对魔兽战线巴比伦尼亚-", score: 6.8 }, 294 + { title: "家有女友", score: 6.3 }, 295 + { title: "君主·埃尔梅罗二世事件簿 魔眼收集列车 Grace note", score: 6.7 }, 296 + { title: "石纪元", score: 7.2 }, 297 + ], 298 + "2020": [ 299 + { title: "异种族风俗娘评鉴指南", score: 7.7 }, 300 + { title: "魔女之旅", score: 7.1 }, 301 + { title: "进击的巨人 最终季", score: 7.7 }, 302 + { title: "安达与岛村", score: 7.3 }, 303 + { title: "异度侵入", score: 7.5 }, 304 + { title: "别对映像研出手!", score: 8.1 }, 305 + { title: "咒术回战", score: 7.1 }, 306 + { title: "总之就是非常可爱", score: 6.3 }, 307 + { title: "隐瞒之事", score: 7.7 }, 308 + { title: "虚构推理", score: 6.3 }, 309 + { title: "恋爱小行星", score: 6.9 }, 310 + { title: "你与我最后的战场,亦或是世界起始的圣战", score: 5.5 }, 311 + { title: "邪神与厨二病少女’", score: 7.3 }, 312 + { title: "转生成为了只有乙女游戏破灭Flag的邪恶大小姐", score: 6.5 }, 313 + { title: "在魔王城说晚安", score: 7 }, 314 + { title: "租借女友", score: 5.8 }, 315 + ], 316 + "2021": [ 317 + { title: "86 -不存在的战区-", score: 7.6 }, 318 + { title: "无职转生~", score: 7.9 }, 319 + { title: "回复术士的重来人生", score: 6.2 }, 320 + { title: "奇巧计程车", score: 8.5 }, 321 + { title: "打了300年的史莱姆,不知不觉就练到了满级", score: 6.3 }, 322 + { title: "漂流少年", score: 7.8 }, 323 + { title: "佐贺偶像是传奇 复仇", score: 7.8 }, 324 + { title: "悠哉日常大王 Nonstop", score: 8.2 }, 325 + { title: "堀与宫村", score: 6.8 }, 326 + { title: "派遣战斗员!", score: 6.3 }, 327 + { title: "古见同学有交流障碍症", score: 7 }, 328 + { title: "奇蛋物语", score: 6.8 }, 329 + { title: "我们的重制人生", score: 6.4 }, 330 + { title: "看得见的女孩", score: 6.8 }, 331 + { title: "异世界迷宫黑心企业", score: 6.7 }, 332 + { title: "女神宿舍的宿管君。", score: 5.8 }, 333 + ], 334 + "2022": [ 335 + { title: "孤独摇滚!", score: 8.4 }, 336 + { title: "莉可丽丝", score: 6.3 }, 337 + { title: "想要成为影之实力者!", score: 7.1 }, 338 + { title: "夏日重现", score: 7.5 }, 339 + { title: "异世界舅舅", score: 7.6 }, 340 + { title: "更衣人偶坠入爱河", score: 7.2 }, 341 + { title: "彻夜之歌", score: 7.4 }, 342 + { title: "测不准的阿波连同学", score: 6.4 }, 343 + { title: "JOJO的奇妙冒险 石之海", score: 7.3 }, 344 + { title: "间谍过家家", score: 7.2 }, 345 + { title: "不道德公会", score: 7.1 }, 346 + { title: "链锯人", score: 6.9 }, 347 + { title: "明日同学的水手服", score: 7.5 }, 348 + { title: "契约之吻", score: 6.9 }, 349 + { title: "相合之物", score: 7.8 }, 350 + { title: "来自深渊 烈日的黄金乡", score: 8.3 }, 351 + { title: "向山进发 Next Summit", score: 8 }, 352 + ], 353 + "2023": [ 354 + { title: "葬送的芙莉莲", score: 8.5 }, 355 + { title: "药屋少女的呢喃", score: 7.5 }, 356 + { title: "BanG Dream! It's MyGO!!!!!", score: 8.1 }, 357 + { title: "我心里危险的东西", score: 7.8 }, 358 + { title: "超超超超超喜欢你的100个女朋友", score: 7.3 }, 359 + { title: "别当欧尼酱了!", score: 7.6 }, 360 + { title: "为美好的世界献上爆焰!", score: 7 }, 361 + { title: "跃动青春", score: 7.7 }, 362 + { title: "宝可梦 地平线", score: 7.5 }, 363 + { title: "香格里拉·弗陇提亚~屎作猎人向神作发起挑战~", score: 6.4 }, 364 + { title: "无神世界的神明活动", score: 6.8 }, 365 + { title: "【我推的孩子】", score: 7.4 }, 366 + { title: "天国大魔境", score: 7.8 }, 367 + { title: "异世界悠闲农家", score: 6.4 }, 368 + ], 369 + "2024": [ 370 + { title: "败犬女主太多了!", score: 8 }, 371 + { title: "GIRLS BAND CRY", score: 7.6 }, 372 + { title: "胆大党", score: 7.5 }, 373 + { title: "义妹生活", score: 7.3 }, 374 + { title: "迷宫饭", score: 7.8 }, 375 + { title: "我独自升级", score: 6.5 }, 376 + { title: "小市民系列", score: 6.1 }, 377 + { title: "梦想成为魔法少女", score: 7 }, 378 + { title: "青之箱", score: 6.8 }, 379 + { title: "2.5次元的诱惑", score: 6.7 }, 380 + { title: "地。 ―关于地球的运动―", score: 6.2 }, 381 + { title: "失忆投捕", score: 7.9 }, 382 + { title: "不时轻声地以俄语遮羞的邻座艾莉同学", score: 5.6 }, 383 + { title: "悲喜渔生", score: 7.3 }, 384 + { title: "亚托莉 -我挚爱的时光-", score: 6.3 }, 385 + { title: "缘结甘神家", score: 5.9 }, 386 + ], 387 + }; 388 + 389 + export default data;
+400
bun.lock
··· 1 + { 2 + "lockfileVersion": 1, 3 + "workspaces": { 4 + "": { 5 + "name": "anime", 6 + "dependencies": { 7 + "cheerio": "^1.0.0", 8 + "react": "^19.1.0", 9 + "react-dom": "^19.1.0", 10 + }, 11 + "devDependencies": { 12 + "@tailwindcss/vite": "^4.1.7", 13 + "@types/bun": "latest", 14 + "@types/react": "^19.1.6", 15 + "@types/react-dom": "^19.1.5", 16 + "@vitejs/plugin-react": "^4.5.0", 17 + "modern-screenshot": "^4.6.0", 18 + "sonner": "^2.0.3", 19 + "tailwindcss": "^4.1.7", 20 + "vite": "^6.3.5", 21 + }, 22 + "peerDependencies": { 23 + "typescript": "^5", 24 + }, 25 + }, 26 + }, 27 + "packages": { 28 + "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], 29 + 30 + "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], 31 + 32 + "@babel/compat-data": ["@babel/compat-data@7.27.3", "", {}, "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw=="], 33 + 34 + "@babel/core": ["@babel/core@7.27.3", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", "@babel/helpers": "^7.27.3", "@babel/parser": "^7.27.3", "@babel/template": "^7.27.2", "@babel/traverse": "^7.27.3", "@babel/types": "^7.27.3", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-hyrN8ivxfvJ4i0fIJuV4EOlV0WDMz5Ui4StRTgVaAvWeiRCilXgwVvxJKtFQ3TKtHgJscB2YiXKGNJuVwhQMtA=="], 35 + 36 + "@babel/generator": ["@babel/generator@7.27.3", "", { "dependencies": { "@babel/parser": "^7.27.3", "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q=="], 37 + 38 + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], 39 + 40 + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], 41 + 42 + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.27.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.27.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg=="], 43 + 44 + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], 45 + 46 + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], 47 + 48 + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], 49 + 50 + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], 51 + 52 + "@babel/helpers": ["@babel/helpers@7.27.3", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.27.3" } }, "sha512-h/eKy9agOya1IGuLaZ9tEUgz+uIRXcbtOhRtUyyMf8JFmn1iT13vnl/IGVWSkdOCG/pC57U4S1jnAabAavTMwg=="], 53 + 54 + "@babel/parser": ["@babel/parser@7.27.3", "", { "dependencies": { "@babel/types": "^7.27.3" }, "bin": "./bin/babel-parser.js" }, "sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw=="], 55 + 56 + "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], 57 + 58 + "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], 59 + 60 + "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], 61 + 62 + "@babel/traverse": ["@babel/traverse@7.27.3", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.3", "@babel/parser": "^7.27.3", "@babel/template": "^7.27.2", "@babel/types": "^7.27.3", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ=="], 63 + 64 + "@babel/types": ["@babel/types@7.27.3", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw=="], 65 + 66 + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA=="], 67 + 68 + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.5", "", { "os": "android", "cpu": "arm" }, "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA=="], 69 + 70 + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.5", "", { "os": "android", "cpu": "arm64" }, "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg=="], 71 + 72 + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.5", "", { "os": "android", "cpu": "x64" }, "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw=="], 73 + 74 + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ=="], 75 + 76 + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ=="], 77 + 78 + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw=="], 79 + 80 + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw=="], 81 + 82 + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.5", "", { "os": "linux", "cpu": "arm" }, "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw=="], 83 + 84 + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg=="], 85 + 86 + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA=="], 87 + 88 + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg=="], 89 + 90 + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg=="], 91 + 92 + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ=="], 93 + 94 + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA=="], 95 + 96 + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ=="], 97 + 98 + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.5", "", { "os": "linux", "cpu": "x64" }, "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw=="], 99 + 100 + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.5", "", { "os": "none", "cpu": "arm64" }, "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw=="], 101 + 102 + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.5", "", { "os": "none", "cpu": "x64" }, "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ=="], 103 + 104 + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.5", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw=="], 105 + 106 + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg=="], 107 + 108 + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA=="], 109 + 110 + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw=="], 111 + 112 + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ=="], 113 + 114 + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.5", "", { "os": "win32", "cpu": "x64" }, "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g=="], 115 + 116 + "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], 117 + 118 + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], 119 + 120 + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], 121 + 122 + "@jridgewell/set-array": ["@jridgewell/set-array@1.2.1", "", {}, "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="], 123 + 124 + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], 125 + 126 + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], 127 + 128 + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.9", "", {}, "sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w=="], 129 + 130 + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.41.1", "", { "os": "android", "cpu": "arm" }, "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw=="], 131 + 132 + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.41.1", "", { "os": "android", "cpu": "arm64" }, "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA=="], 133 + 134 + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.41.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w=="], 135 + 136 + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.41.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg=="], 137 + 138 + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.41.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg=="], 139 + 140 + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.41.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA=="], 141 + 142 + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.41.1", "", { "os": "linux", "cpu": "arm" }, "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg=="], 143 + 144 + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.41.1", "", { "os": "linux", "cpu": "arm" }, "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA=="], 145 + 146 + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.41.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA=="], 147 + 148 + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.41.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg=="], 149 + 150 + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.41.1", "", { "os": "linux", "cpu": "none" }, "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw=="], 151 + 152 + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.41.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A=="], 153 + 154 + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.41.1", "", { "os": "linux", "cpu": "none" }, "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw=="], 155 + 156 + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.41.1", "", { "os": "linux", "cpu": "none" }, "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw=="], 157 + 158 + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.41.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g=="], 159 + 160 + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.41.1", "", { "os": "linux", "cpu": "x64" }, "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A=="], 161 + 162 + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.41.1", "", { "os": "linux", "cpu": "x64" }, "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ=="], 163 + 164 + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.41.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ=="], 165 + 166 + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.41.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg=="], 167 + 168 + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.41.1", "", { "os": "win32", "cpu": "x64" }, "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw=="], 169 + 170 + "@tailwindcss/node": ["@tailwindcss/node@4.1.7", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "lightningcss": "1.30.1", "magic-string": "^0.30.17", "source-map-js": "^1.2.1", "tailwindcss": "4.1.7" } }, "sha512-9rsOpdY9idRI2NH6CL4wORFY0+Q6fnx9XP9Ju+iq/0wJwGD5IByIgFmwVbyy4ymuyprj8Qh4ErxMKTUL4uNh3g=="], 171 + 172 + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.7", "", { "dependencies": { "detect-libc": "^2.0.4", "tar": "^7.4.3" }, "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.7", "@tailwindcss/oxide-darwin-arm64": "4.1.7", "@tailwindcss/oxide-darwin-x64": "4.1.7", "@tailwindcss/oxide-freebsd-x64": "4.1.7", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.7", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.7", "@tailwindcss/oxide-linux-arm64-musl": "4.1.7", "@tailwindcss/oxide-linux-x64-gnu": "4.1.7", "@tailwindcss/oxide-linux-x64-musl": "4.1.7", "@tailwindcss/oxide-wasm32-wasi": "4.1.7", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.7", "@tailwindcss/oxide-win32-x64-msvc": "4.1.7" } }, "sha512-5SF95Ctm9DFiUyjUPnDGkoKItPX/k+xifcQhcqX5RA85m50jw1pT/KzjdvlqxRja45Y52nR4MR9fD1JYd7f8NQ=="], 173 + 174 + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.7", "", { "os": "android", "cpu": "arm64" }, "sha512-IWA410JZ8fF7kACus6BrUwY2Z1t1hm0+ZWNEzykKmMNM09wQooOcN/VXr0p/WJdtHZ90PvJf2AIBS/Ceqx1emg=="], 175 + 176 + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-81jUw9To7fimGGkuJ2W5h3/oGonTOZKZ8C2ghm/TTxbwvfSiFSDPd6/A/KE2N7Jp4mv3Ps9OFqg2fEKgZFfsvg=="], 177 + 178 + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-q77rWjEyGHV4PdDBtrzO0tgBBPlQWKY7wZK0cUok/HaGgbNKecegNxCGikuPJn5wFAlIywC3v+WMBt0PEBtwGw=="], 179 + 180 + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.7", "", { "os": "freebsd", "cpu": "x64" }, "sha512-RfmdbbK6G6ptgF4qqbzoxmH+PKfP4KSVs7SRlTwcbRgBwezJkAO3Qta/7gDy10Q2DcUVkKxFLXUQO6J3CRvBGw=="], 181 + 182 + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.7", "", { "os": "linux", "cpu": "arm" }, "sha512-OZqsGvpwOa13lVd1z6JVwQXadEobmesxQ4AxhrwRiPuE04quvZHWn/LnihMg7/XkN+dTioXp/VMu/p6A5eZP3g=="], 183 + 184 + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-voMvBTnJSfKecJxGkoeAyW/2XRToLZ227LxswLAwKY7YslG/Xkw9/tJNH+3IVh5bdYzYE7DfiaPbRkSHFxY1xA=="], 185 + 186 + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-PjGuNNmJeKHnP58M7XyjJyla8LPo+RmwHQpBI+W/OxqrwojyuCQ+GUtygu7jUqTEexejZHr/z3nBc/gTiXBj4A=="], 187 + 188 + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.7", "", { "os": "linux", "cpu": "x64" }, "sha512-HMs+Va+ZR3gC3mLZE00gXxtBo3JoSQxtu9lobbZd+DmfkIxR54NO7Z+UQNPsa0P/ITn1TevtFxXTpsRU7qEvWg=="], 189 + 190 + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.7", "", { "os": "linux", "cpu": "x64" }, "sha512-MHZ6jyNlutdHH8rd+YTdr3QbXrHXqwIhHw9e7yXEBcQdluGwhpQY2Eku8UZK6ReLaWtQ4gijIv5QoM5eE+qlsA=="], 191 + 192 + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.7", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@emnapi/wasi-threads": "^1.0.2", "@napi-rs/wasm-runtime": "^0.2.9", "@tybys/wasm-util": "^0.9.0", "tslib": "^2.8.0" }, "cpu": "none" }, "sha512-ANaSKt74ZRzE2TvJmUcbFQ8zS201cIPxUDm5qez5rLEwWkie2SkGtA4P+GPTj+u8N6JbPrC8MtY8RmJA35Oo+A=="], 193 + 194 + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-HUiSiXQ9gLJBAPCMVRk2RT1ZrBjto7WvqsPBwUrNK2BcdSxMnk19h4pjZjI7zgPhDxlAbJSumTC4ljeA9y0tEw=="], 195 + 196 + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.7", "", { "os": "win32", "cpu": "x64" }, "sha512-rYHGmvoHiLJ8hWucSfSOEmdCBIGZIq7SpkPRSqLsH2Ab2YUNgKeAPT1Fi2cx3+hnYOrAb0jp9cRyode3bBW4mQ=="], 197 + 198 + "@tailwindcss/vite": ["@tailwindcss/vite@4.1.7", "", { "dependencies": { "@tailwindcss/node": "4.1.7", "@tailwindcss/oxide": "4.1.7", "tailwindcss": "4.1.7" }, "peerDependencies": { "vite": "^5.2.0 || ^6" } }, "sha512-tYa2fO3zDe41I7WqijyVbRd8oWT0aEID1Eokz5hMT6wShLIHj3yvwj9XbfuloHP9glZ6H+aG2AN/+ZrxJ1Y5RQ=="], 199 + 200 + "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], 201 + 202 + "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], 203 + 204 + "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], 205 + 206 + "@types/babel__traverse": ["@types/babel__traverse@7.20.7", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng=="], 207 + 208 + "@types/bun": ["@types/bun@1.2.14", "", { "dependencies": { "bun-types": "1.2.14" } }, "sha512-VsFZKs8oKHzI7zwvECiAJ5oSorWndIWEVhfbYqZd4HI/45kzW7PN2Rr5biAzvGvRuNmYLSANY+H59ubHq8xw7Q=="], 209 + 210 + "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], 211 + 212 + "@types/node": ["@types/node@22.15.23", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw=="], 213 + 214 + "@types/react": ["@types/react@19.1.6", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q=="], 215 + 216 + "@types/react-dom": ["@types/react-dom@19.1.5", "", { "peerDependencies": { "@types/react": "^19.0.0" } }, "sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg=="], 217 + 218 + "@vitejs/plugin-react": ["@vitejs/plugin-react@4.5.0", "", { "dependencies": { "@babel/core": "^7.26.10", "@babel/plugin-transform-react-jsx-self": "^7.25.9", "@babel/plugin-transform-react-jsx-source": "^7.25.9", "@rolldown/pluginutils": "1.0.0-beta.9", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" } }, "sha512-JuLWaEqypaJmOJPLWwO335Ig6jSgC1FTONCWAxnqcQthLTK/Yc9aH6hr9z/87xciejbQcnP3GnA1FWUSWeXaeg=="], 219 + 220 + "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], 221 + 222 + "browserslist": ["browserslist@4.24.5", "", { "dependencies": { "caniuse-lite": "^1.0.30001716", "electron-to-chromium": "^1.5.149", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw=="], 223 + 224 + "bun-types": ["bun-types@1.2.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-Kuh4Ub28ucMRWeiUUWMHsT9Wcbr4H3kLIO72RZZElSDxSu7vpetRvxIUDUaW6QtaIeixIpm7OXtNnZPf82EzwA=="], 225 + 226 + "caniuse-lite": ["caniuse-lite@1.0.30001718", "", {}, "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw=="], 227 + 228 + "cheerio": ["cheerio@1.0.0", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.1.0", "encoding-sniffer": "^0.2.0", "htmlparser2": "^9.1.0", "parse5": "^7.1.2", "parse5-htmlparser2-tree-adapter": "^7.0.0", "parse5-parser-stream": "^7.1.2", "undici": "^6.19.5", "whatwg-mimetype": "^4.0.0" } }, "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww=="], 229 + 230 + "cheerio-select": ["cheerio-select@2.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", "css-what": "^6.1.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" } }, "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g=="], 231 + 232 + "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], 233 + 234 + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], 235 + 236 + "css-select": ["css-select@5.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg=="], 237 + 238 + "css-what": ["css-what@6.1.0", "", {}, "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="], 239 + 240 + "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], 241 + 242 + "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], 243 + 244 + "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], 245 + 246 + "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], 247 + 248 + "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], 249 + 250 + "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], 251 + 252 + "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], 253 + 254 + "electron-to-chromium": ["electron-to-chromium@1.5.159", "", {}, "sha512-CEvHptWAMV5p6GJ0Lq8aheyvVbfzVrv5mmidu1D3pidoVNkB3tTBsTMVtPJ+rzRK5oV229mCLz9Zj/hNvU8GBA=="], 255 + 256 + "encoding-sniffer": ["encoding-sniffer@0.2.0", "", { "dependencies": { "iconv-lite": "^0.6.3", "whatwg-encoding": "^3.1.1" } }, "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg=="], 257 + 258 + "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="], 259 + 260 + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], 261 + 262 + "esbuild": ["esbuild@0.25.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.5", "@esbuild/android-arm": "0.25.5", "@esbuild/android-arm64": "0.25.5", "@esbuild/android-x64": "0.25.5", "@esbuild/darwin-arm64": "0.25.5", "@esbuild/darwin-x64": "0.25.5", "@esbuild/freebsd-arm64": "0.25.5", "@esbuild/freebsd-x64": "0.25.5", "@esbuild/linux-arm": "0.25.5", "@esbuild/linux-arm64": "0.25.5", "@esbuild/linux-ia32": "0.25.5", "@esbuild/linux-loong64": "0.25.5", "@esbuild/linux-mips64el": "0.25.5", "@esbuild/linux-ppc64": "0.25.5", "@esbuild/linux-riscv64": "0.25.5", "@esbuild/linux-s390x": "0.25.5", "@esbuild/linux-x64": "0.25.5", "@esbuild/netbsd-arm64": "0.25.5", "@esbuild/netbsd-x64": "0.25.5", "@esbuild/openbsd-arm64": "0.25.5", "@esbuild/openbsd-x64": "0.25.5", "@esbuild/sunos-x64": "0.25.5", "@esbuild/win32-arm64": "0.25.5", "@esbuild/win32-ia32": "0.25.5", "@esbuild/win32-x64": "0.25.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ=="], 263 + 264 + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], 265 + 266 + "fdir": ["fdir@6.4.5", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw=="], 267 + 268 + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], 269 + 270 + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], 271 + 272 + "globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], 273 + 274 + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], 275 + 276 + "htmlparser2": ["htmlparser2@9.1.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.1.0", "entities": "^4.5.0" } }, "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ=="], 277 + 278 + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], 279 + 280 + "jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], 281 + 282 + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], 283 + 284 + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], 285 + 286 + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], 287 + 288 + "lightningcss": ["lightningcss@1.30.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.30.1", "lightningcss-darwin-x64": "1.30.1", "lightningcss-freebsd-x64": "1.30.1", "lightningcss-linux-arm-gnueabihf": "1.30.1", "lightningcss-linux-arm64-gnu": "1.30.1", "lightningcss-linux-arm64-musl": "1.30.1", "lightningcss-linux-x64-gnu": "1.30.1", "lightningcss-linux-x64-musl": "1.30.1", "lightningcss-win32-arm64-msvc": "1.30.1", "lightningcss-win32-x64-msvc": "1.30.1" } }, "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg=="], 289 + 290 + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ=="], 291 + 292 + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA=="], 293 + 294 + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig=="], 295 + 296 + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.1", "", { "os": "linux", "cpu": "arm" }, "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q=="], 297 + 298 + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw=="], 299 + 300 + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ=="], 301 + 302 + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw=="], 303 + 304 + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ=="], 305 + 306 + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA=="], 307 + 308 + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.1", "", { "os": "win32", "cpu": "x64" }, "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg=="], 309 + 310 + "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], 311 + 312 + "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], 313 + 314 + "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], 315 + 316 + "minizlib": ["minizlib@3.0.2", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA=="], 317 + 318 + "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], 319 + 320 + "modern-screenshot": ["modern-screenshot@4.6.0", "", {}, "sha512-L7osQAWpJiWY1ST1elhLRSGD5i7og5uoICqiXs38whAjWtIayp3cBMJmyML4iyJcBhRfHOyciq1g1Ft5G0QvSg=="], 321 + 322 + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], 323 + 324 + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], 325 + 326 + "node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="], 327 + 328 + "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], 329 + 330 + "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], 331 + 332 + "parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@7.1.0", "", { "dependencies": { "domhandler": "^5.0.3", "parse5": "^7.0.0" } }, "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g=="], 333 + 334 + "parse5-parser-stream": ["parse5-parser-stream@7.1.2", "", { "dependencies": { "parse5": "^7.0.0" } }, "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow=="], 335 + 336 + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], 337 + 338 + "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], 339 + 340 + "postcss": ["postcss@8.5.3", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="], 341 + 342 + "react": ["react@19.1.0", "", {}, "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg=="], 343 + 344 + "react-dom": ["react-dom@19.1.0", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.0" } }, "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g=="], 345 + 346 + "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], 347 + 348 + "rollup": ["rollup@4.41.1", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.41.1", "@rollup/rollup-android-arm64": "4.41.1", "@rollup/rollup-darwin-arm64": "4.41.1", "@rollup/rollup-darwin-x64": "4.41.1", "@rollup/rollup-freebsd-arm64": "4.41.1", "@rollup/rollup-freebsd-x64": "4.41.1", "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", "@rollup/rollup-linux-arm-musleabihf": "4.41.1", "@rollup/rollup-linux-arm64-gnu": "4.41.1", "@rollup/rollup-linux-arm64-musl": "4.41.1", "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", "@rollup/rollup-linux-riscv64-gnu": "4.41.1", "@rollup/rollup-linux-riscv64-musl": "4.41.1", "@rollup/rollup-linux-s390x-gnu": "4.41.1", "@rollup/rollup-linux-x64-gnu": "4.41.1", "@rollup/rollup-linux-x64-musl": "4.41.1", "@rollup/rollup-win32-arm64-msvc": "4.41.1", "@rollup/rollup-win32-ia32-msvc": "4.41.1", "@rollup/rollup-win32-x64-msvc": "4.41.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw=="], 349 + 350 + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], 351 + 352 + "scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="], 353 + 354 + "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], 355 + 356 + "sonner": ["sonner@2.0.3", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA=="], 357 + 358 + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], 359 + 360 + "tailwindcss": ["tailwindcss@4.1.7", "", {}, "sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg=="], 361 + 362 + "tapable": ["tapable@2.2.2", "", {}, "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg=="], 363 + 364 + "tar": ["tar@7.4.3", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.0.1", "mkdirp": "^3.0.1", "yallist": "^5.0.0" } }, "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw=="], 365 + 366 + "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], 367 + 368 + "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], 369 + 370 + "undici": ["undici@6.21.3", "", {}, "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw=="], 371 + 372 + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], 373 + 374 + "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], 375 + 376 + "vite": ["vite@6.3.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="], 377 + 378 + "whatwg-encoding": ["whatwg-encoding@3.1.1", "", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ=="], 379 + 380 + "whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], 381 + 382 + "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], 383 + 384 + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.4.3", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.2", "tslib": "^2.4.0" }, "bundled": true }, "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g=="], 385 + 386 + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.4.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ=="], 387 + 388 + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA=="], 389 + 390 + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.10", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.9.0" }, "bundled": true }, "sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ=="], 391 + 392 + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.9.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw=="], 393 + 394 + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], 395 + 396 + "lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], 397 + 398 + "parse5/entities": ["entities@6.0.0", "", {}, "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw=="], 399 + } 400 + }
+13
index.html
··· 1 + <!DOCTYPE html> 2 + <html> 3 + <head> 4 + <meta charset="UTF-8"> 5 + <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 + <title>动画世代</title> 7 + <link rel="stylesheet" href="/src/index.css"> 8 + </head> 9 + <body> 10 + <div id="app"></div> 11 + <script type="module" src="/src/main.tsx"></script> 12 + </body> 13 + </html>
+28
package.json
··· 1 + { 2 + "name": "anime", 3 + "private": true, 4 + "type": "module", 5 + "scripts": { 6 + "build": "vite build", 7 + "dev": "vite dev" 8 + }, 9 + "devDependencies": { 10 + "@tailwindcss/vite": "^4.1.7", 11 + "@types/bun": "latest", 12 + "@types/react": "^19.1.6", 13 + "@types/react-dom": "^19.1.5", 14 + "@vitejs/plugin-react": "^4.5.0", 15 + "modern-screenshot": "^4.6.0", 16 + "sonner": "^2.0.3", 17 + "tailwindcss": "^4.1.7", 18 + "vite": "^6.3.5" 19 + }, 20 + "peerDependencies": { 21 + "typescript": "^5" 22 + }, 23 + "dependencies": { 24 + "cheerio": "^1.0.0", 25 + "react": "^19.1.0", 26 + "react-dom": "^19.1.0" 27 + } 28 + }
+27
run.ts
··· 1 + import { load } from "cheerio"; 2 + import fs from "fs"; 3 + 4 + // 2004 to 2024 5 + const years = Array.from({ length: 2024 - 2004 + 1 }, (_, i) => 2004 + i); 6 + 7 + type Item = { 8 + title: string; 9 + score: number; 10 + }; 11 + const result: Record<string, Item[]> = {}; 12 + for (const year of years) { 13 + console.log(`正在获取 ${year} 年的数据`); 14 + const url = `https://bgm.tv/anime/browser/tv/airtime/${year}?sort=trends`; 15 + const response = await fetch(url); 16 + const html = await response.text(); 17 + const $ = load(html); 18 + const items: Item[] = []; 19 + $(".item").each((_, el) => { 20 + const title = $(el).find("h3 .l").text().trim(); 21 + const score = Number($(el).find(".rateInfo .fade").text().trim()); 22 + items.push({ title, score }); 23 + }); 24 + result[year] = items; 25 + } 26 + 27 + fs.writeFileSync("anime.json", JSON.stringify(result, null, 2));
+138
src/app.tsx
··· 1 + import { useRef, useState } from "react"; 2 + import animeData from "../anime-data"; 3 + import { domToBlob } from "modern-screenshot"; 4 + import { toast } from "sonner"; 5 + 6 + export const App = () => { 7 + const [selectedAnime, setSelectedAnime] = useState<string[]>([]); 8 + 9 + const wrapper = useRef<HTMLDivElement>(null); 10 + 11 + const copyImage = async () => { 12 + if (!wrapper.current) return; 13 + 14 + const blob = await domToBlob(wrapper.current, { 15 + scale: 2, 16 + filter(el) { 17 + if (el instanceof HTMLElement && el.classList.contains("remove")) { 18 + return false; 19 + } 20 + return true; 21 + }, 22 + }); 23 + await navigator.clipboard.write([new ClipboardItem({ [blob.type]: blob })]); 24 + }; 25 + 26 + return ( 27 + <> 28 + <div className="flex flex-col gap-4 pb-10"> 29 + <div className="p-4 flex flex-col md:items-center "> 30 + <div className="flex flex-col border border-b-0 w-fit" ref={wrapper}> 31 + <div className="border-b justify-between p-2 text-lg font-bold flex"> 32 + <h1> 33 + 动画世代<span className="remove"> - 点击选择你看过的动画</span> 34 + </h1> 35 + <span className="shrink-0 whitespace-nowrap"> 36 + 我看过 {selectedAnime.length}/ 37 + { 38 + Object.values(animeData).flatMap((year) => { 39 + return year.map((item) => item.title).slice(0, 12); 40 + }).length 41 + }{" "} 42 + 部动画 43 + </span> 44 + </div> 45 + {Object.keys(animeData).map((year) => { 46 + const items = animeData[year] || []; 47 + return ( 48 + <div key={year} className="flex border-b"> 49 + <div className="bg-red-500 shrink-0 text-white flex items-center font-bold justify-center p-1 size-16 md:size-20 border-black"> 50 + {year} 51 + </div> 52 + <div className="flex shrink-0"> 53 + {items.slice(0, 12).map((item) => { 54 + const isSelected = selectedAnime.includes(item.title); 55 + return ( 56 + <button 57 + key={item.title} 58 + className={`size-16 md:size-20 border-l break-all text-center shrink-0 inline-flex items-center p-1 overflow-hidden justify-center cursor-pointer text-sm ${ 59 + isSelected ? "bg-green-500" : "hover:bg-zinc-100" 60 + }`} 61 + title={item.title} 62 + onClick={() => { 63 + setSelectedAnime((prev) => { 64 + if (isSelected) { 65 + return prev.filter( 66 + (title) => title !== item.title 67 + ); 68 + } 69 + return [...prev, item.title]; 70 + }); 71 + }} 72 + > 73 + <span className="leading-tight w-full line-clamp-3"> 74 + {item.title} 75 + </span> 76 + </button> 77 + ); 78 + })} 79 + </div> 80 + </div> 81 + ); 82 + })} 83 + </div> 84 + </div> 85 + 86 + <div className="flex gap-2 justify-center"> 87 + <button 88 + type="button" 89 + className="border rounded-md px-4 py-2 inline-flex" 90 + onClick={() => { 91 + setSelectedAnime( 92 + Object.values(animeData).flatMap((year) => { 93 + return year.map((item) => item.title).slice(0, 12); 94 + }) 95 + ); 96 + }} 97 + > 98 + 全选 99 + </button> 100 + 101 + <button 102 + type="button" 103 + className="border rounded-md px-4 py-2 inline-flex" 104 + onClick={() => { 105 + toast.promise(copyImage(), { 106 + success: "复制成功", 107 + loading: "复制中", 108 + error: "复制失败", 109 + }); 110 + }} 111 + > 112 + 复制图片 113 + </button> 114 + </div> 115 + 116 + <div className="mt-2 text-center"> 117 + 历年关注最多的动画,数据来自 bgm.tv,由 118 + <a 119 + href="https://x.com/localhost_4173" 120 + target="_blank" 121 + className="underline" 122 + > 123 + 低空飞行 124 + </a> 125 + 制作 126 + </div> 127 + 128 + <div className="text-center"> 129 + 作者的其它产品:{" "} 130 + <a href="https://chatwise.app" target="_blank" className="underline"> 131 + ChatWise 132 + </a> 133 + , 一个优雅的 AI 聊天客户端 134 + </div> 135 + </div> 136 + </> 137 + ); 138 + };
+5
src/index.css
··· 1 + @import "tailwindcss"; 2 + 3 + button { 4 + @apply cursor-pointer; 5 + }
+11
src/main.tsx
··· 1 + import React from "react"; 2 + import ReactDOM from "react-dom/client"; 3 + import { App } from "./app"; 4 + import { Toaster } from "sonner"; 5 + 6 + ReactDOM.createRoot(document.getElementById("app")!).render( 7 + <React.StrictMode> 8 + <App /> 9 + <Toaster /> 10 + </React.StrictMode> 11 + );
+28
tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + // Environment setup & latest features 4 + "lib": ["ESNext", "DOM"], 5 + "target": "ESNext", 6 + "module": "ESNext", 7 + "moduleDetection": "force", 8 + "jsx": "react-jsx", 9 + "allowJs": true, 10 + 11 + // Bundler mode 12 + "moduleResolution": "bundler", 13 + "allowImportingTsExtensions": true, 14 + "verbatimModuleSyntax": true, 15 + "noEmit": true, 16 + 17 + // Best practices 18 + "strict": true, 19 + "skipLibCheck": true, 20 + "noFallthroughCasesInSwitch": true, 21 + "noUncheckedIndexedAccess": true, 22 + 23 + // Some stricter flags (disabled by default) 24 + "noUnusedLocals": false, 25 + "noUnusedParameters": false, 26 + "noPropertyAccessFromIndexSignature": false 27 + } 28 + }
+7
vite.config.ts
··· 1 + import { defineConfig } from "vite"; 2 + import react from "@vitejs/plugin-react"; 3 + import tailwindcss from "@tailwindcss/vite"; 4 + 5 + export default defineConfig({ 6 + plugins: [tailwindcss(), react()], 7 + });