[READ-ONLY] Mirror of https://github.com/flo-bit/youtube-party-dj. democratic youtube player, everyone can vote and add songs, uni project, made with uix
0

Configure Feed

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

light-/darkmode button

updated the light-/darkmode button which now toggles between light-/darkmode without interferences

+5593 -58
+5 -5
common/client.tsx
··· 31 31 <button onclick={() => { 32 32 showSearch.val = false; 33 33 34 - }} id="queueiconframeclient" class="absolute bottom-2 right-2 w-20 h-20 bg-white/5 border border-white/10 rounded-full flex items-center justify-center backdrop-blur-md"> 34 + }} id="queueiconframeclient" class="absolute bottom-2 right-2 w-20 h-20 bg-white dark:bg-white/5 border border-black dark:border-white/10 rounded-full flex items-center justify-center backdrop-blur-md"> 35 35 36 - <svg id="queueiconclient" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" class="size-14 stroke-white"> 36 + <svg id="queueiconclient" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" class="size-14 stroke-black dark:stroke-white"> 37 37 <path stroke-linecap="round" stroke-linejoin="round" d="M3.75 12h16.5m-16.5 3.75h16.5M3.75 19.5h16.5M5.625 4.5h12.75a1.875 1.875 0 0 1 0 3.75H5.625a1.875 1.875 0 0 1 0-3.75Z" /> 38 38 </svg> 39 39 </button>, ··· 45 45 if (input) { 46 46 input.focus(); 47 47 } 48 - }} id="plusiconframeclient" class="absolute bottom-2 right-2 w-20 h-20 bg-white/5 border border-white/10 rounded-full flex items-center justify-center backdrop-blur-md"> 48 + }} id="plusiconframeclient" class="absolute bottom-2 right-2 w-20 h-20 bg-white dark:bg-white/5 border border-black dark:border-white/10 rounded-full flex items-center justify-center backdrop-blur-md"> 49 49 50 - <svg id="plusiconclient" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" class="size-16 stroke-white"> 50 + <svg id="plusiconclient" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" class="size-16 stroke-black dark:stroke-white"> 51 51 <path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15" /> 52 52 </svg> 53 53 </button>); ··· 66 66 67 67 68 68 </div> 69 - <div class="px-4 py-4 border-t border-white/20 mx-0 overflow-y-scroll flex-grow"> 69 + <div class="px-4 py-4 border-t border-black border-white/20 mx-0 overflow-y-scroll flex-grow"> 70 70 {toggle(showSearch, <Queue items={searchResults} type={'search'} code={code} />, <Queue items={session.queue} type={'client'} code={code} />)} 71 71 72 72 </div>
+2 -2
common/components/NowPlaying.tsx
··· 2 2 3 3 export function NowPlaying({item} : Readonly<{item:Item}>) 4 4 { 5 - return <div class="queueframe w-full rounded-xl bg-white/5 border border-white/10 h-20 overflow-hidden mb-2"> 6 - <div class="queueitem text-white flex items-left h-full"> 5 + return <div class="queueframe w-full rounded-xl bg-white dark:bg-white/5 border border-black dark:border-white/10 h-20 overflow-hidden mb-2"> 6 + <div class="queueitem dark:text-white tex-black flex items-left h-full"> 7 7 <img src={item.thumbnail} class="h-20 w-32 object-cover" alt=" " /> 8 8 <div class="flex flex-1 flex-grow justify-between"> 9 9 <div class="pl-4 justify-center flex flex-col h-full">
+1 -1
common/components/QR.tsx
··· 26 26 }); 27 27 28 28 return ( 29 - <div id="qr" class="aspect-square w-3/4 md:w-full border border-white/10 rounded-xl z-10 overflow-hidden bg-white p-4"> 29 + <div id="qr" class="aspect-square w-3/4 md:w-full border dark:border-white/10 border-black rounded-xl z-10 overflow-hidden bg-white p-4"> 30 30 <div id="qr-text" class="w-full h-full flex items-center justify-center text-white"> 31 31 {qrCode} 32 32 </div>
+4 -4
common/components/QRCodeOverlay.tsx
··· 8 8 <div> 9 9 <button onclick={() => { 10 10 showQR.val = true; 11 - }} id="showQRcode" class="absolute md:hidden bottom-2 left-2 w-20 h-20 bg-white/5 border border-white/10 rounded-xl flex items-center justify-center backdrop-blur-md"> 12 - <svg id="qricon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="size-18 stroke-white"> 11 + }} id="showQRcode" class="absolute md:hidden bottom-2 left-2 w-20 h-20 bg-white dark:bg-white/5 border border-black dark:border-white/10 rounded-xl flex items-center justify-center backdrop-blur-md"> 12 + <svg id="qricon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="size-18 stroke-black dark:stroke-white"> 13 13 <path stroke-linecap="round" stroke-linejoin="round" d="M3.75 4.875c0-.621.504-1.125 1.125-1.125h4.5c.621 0 1.125.504 1.125 1.125v4.5c0 .621-.504 1.125-1.125 1.125h-4.5A1.125 1.125 0 0 1 3.75 9.375v-4.5ZM3.75 14.625c0-.621.504-1.125 1.125-1.125h4.5c.621 0 1.125.504 1.125 1.125v4.5c0 .621-.504 1.125-1.125 1.125h-4.5a1.125 1.125 0 0 1-1.125-1.125v-4.5ZM13.5 4.875c0-.621.504-1.125 1.125-1.125h4.5c.621 0 1.125.504 1.125 1.125v4.5c0 .621-.504 1.125-1.125 1.125h-4.5A1.125 1.125 0 0 1 13.5 9.375v-4.5Z" /> 14 14 <path stroke-linecap="round" stroke-linejoin="round" d="M6.75 6.75h.75v.75h-.75v-.75ZM6.75 16.5h.75v.75h-.75v-.75ZM16.5 6.75h.75v.75h-.75v-.75ZM13.5 13.5h.75v.75h-.75v-.75ZM13.5 19.5h.75v.75h-.75v-.75ZM19.5 13.5h.75v.75h-.75v-.75ZM19.5 19.5h.75v.75h-.75v-.75ZM16.5 16.5h.75v.75h-.75v-.75Z" /> 15 15 </svg> 16 16 </button> 17 17 18 - <div style={{ display: showQR }} class="absolute inset-0 flex md:hidden z-20 bg-white/5 rounded-xl border border-white/10 backdrop-blur-md items-center justify-center"> 18 + <div style={{ display: showQR }} class="absolute inset-0 flex md:hidden z-20 bg-white dark:bg-white/5 rounded-xl border dark:border-white/10 border-black backdrop-blur-md items-center justify-center"> 19 19 <button id="qrButton" class="absolute inset-0 h-full w-full" onclick={() => { 20 20 showQR.val = false; 21 21 }}></button> 22 22 23 23 <QRCode code={code} /> 24 24 25 - <button id="qrCloseButton" class="absolute top-2 right-2 stroke-white" onclick={() => { 25 + <button id="qrCloseButton" class="absolute top-2 right-2 dark:stroke-white stroke-black" onclick={() => { 26 26 showQR.val = false; 27 27 }}> 28 28 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" class="size-8">
+5 -5
common/components/QueueItem.tsx
··· 81 81 82 82 session?.$.queue.val.push(item); 83 83 }} 84 - class="queueframe bg-white/5 border border-white/10 rounded-full w-10 h-10 flex items-center justify-center" 84 + class="queueframe bg-white dark:bg-white/5 border border-black dark:border-white/10 rounded-full w-10 h-10 flex items-center justify-center" 85 85 > 86 86 <svg 87 87 xmlns="http://www.w3.org/2000/svg" 88 88 fill="none" 89 89 viewBox="0 0 24 24" 90 90 stroke-width="1.5" 91 - class="size-6 stroke-white queueicon2" 91 + class="size-6 dark:stroke-white stroke-black queueicon2" 92 92 > 93 93 <path 94 94 stroke-linecap="round" ··· 104 104 105 105 106 106 return ( 107 - <div class="queueframe w-full rounded-xl bg-white/5 border border-white/10 h-20 overflow-hidden mb-2"> 108 - <div class="queueitem text-white flex items-left h-full"> 107 + <div class="queueframe w-full rounded-xl bg-white dark:bg-white/5 border border-black dark:border-white/10 h-20 overflow-hidden mb-2"> 108 + <div class="queueitem text-black dark:text-white flex items-left h-full"> 109 109 <img src={item.thumbnail} class="h-20 w-32 object-cover" alt=" " /> 110 110 <div class="flex flex-1 flex-grow justify-between"> 111 111 <div class="pl-4 justify-center flex flex-col h-full"> 112 112 <p class="line-clamp-2 font-bold text-md leading-6">{item.title} </p> 113 113 <p class="text-xs">{item.duration} minutes</p> 114 114 </div> 115 - <div class="queueicon2 flex h-full justify-center items-center px-2 stroke-white"> 115 + <div class="queueicon2 flex h-full justify-center items-center px-2 dark:stroke-white stroke-black"> 116 116 {getAction()} 117 117 </div> 118 118 </div>
+2 -2
common/components/VideoPlayer.tsx
··· 72 72 }) 73 73 74 74 return ( 75 - <div id="playerframe" class="relative aspect-video bg-white/5 border border-white/10 w-full overflow-hidden object-cover rounded-xl"> 75 + <div id="playerframe" class="relative aspect-video bg-white dark:bg-white/5 border border-black dark:border-white/10 w-full overflow-hidden object-cover rounded-xl"> 76 76 <div 77 77 id="player" 78 - class="w-full h-full flex items-center justify-center text-white font-semibold" 78 + class="w-full h-full flex items-center justify-center dark:text-white text-black font-semibold" 79 79 > 80 80 {text} 81 81 </div>
+4 -4
common/page.tsx
··· 14 14 const current = always(() => { 15 15 if(session.currentlyPlaying) { 16 16 return <div class="px-4 mx-0"> 17 - <div class="text-red-500 font-semibold text-sm mb-2">currently playing</div> 17 + <div class="text-blue-500 dark:text-red-500 font-semibold text-sm mb-2">currently playing</div> 18 18 <NowPlaying item={session.currentlyPlaying.$} /> 19 19 </div> 20 20 } else { ··· 27 27 <div class="mx-auto grid md:grid-cols-2 h-screen"> 28 28 <div class="h-screen hidden md:flex items-center flex-col justify-center p-8"> 29 29 <QRCode code={code} /> 30 - <div id="qrtext2" class="text-white text-3xl font-semibold mt-4">Party code: <span>{code}</span></div> 30 + <div id="qrtext2" class="text-black dark:text-white text-3xl font-semibold mt-4">Party code: <span>{code}</span></div> 31 31 </div> 32 32 <div 33 33 id="playerqueuebg" 34 - class="flex flex-col overflow-y-hidden h-screen bg-white/5 border border-white/10 rounded-xl" 34 + class="flex flex-col overflow-y-hidden h-screen bg-white dark:bg-white/5 border border-black dark:border-white/10 rounded-xl" 35 35 > 36 36 <div class="flex px-8 mx-0 mt-8 mb-4"> 37 37 {/* @ts-ignore - uix doesn't support types? */} ··· 43 43 44 44 {current} 45 45 <div id="playerqueueborder" 46 - class="px-4 py-4 border-t border-white/20 mx-0 overflow-y-scroll flex-grow"> 46 + class="px-4 py-4 border-t border-black border-white/20 mx-0 overflow-y-scroll flex-grow"> 47 47 <Queue items={session.queue} type={'player'} code={code} /> 48 48 </div> 49 49 </div>
+16 -35
frontend/entrypoint.css
··· 1 1 /* 2 - ! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com 2 + ! tailwindcss v3.4.4 | MIT License | https://tailwindcss.com 3 3 */ 4 4 5 5 /* ··· 852 852 display: block; 853 853 } 854 854 855 - .inline { 856 - display: inline; 857 - } 858 - 859 855 .flex { 860 856 display: flex; 861 857 } ··· 1136 1132 padding: 3rem; 1137 1133 } 1138 1134 1135 + .p-2 { 1136 + padding: 0.5rem; 1137 + } 1138 + 1139 1139 .p-4 { 1140 1140 padding: 1rem; 1141 1141 } 1142 1142 1143 1143 .p-8 { 1144 1144 padding: 2rem; 1145 - } 1146 - 1147 - .p-2 { 1148 - padding: 0.5rem; 1149 1145 } 1150 1146 1151 1147 .px-1 { ··· 1281 1277 color: rgb(0 0 0 / var(--tw-text-opacity)); 1282 1278 } 1283 1279 1284 - .text-red-500 { 1280 + .text-blue-500 { 1285 1281 --tw-text-opacity: 1; 1286 - color: rgb(239 68 68 / var(--tw-text-opacity)); 1282 + color: rgb(59 130 246 / var(--tw-text-opacity)); 1287 1283 } 1288 1284 1289 1285 .text-rose-200 { ··· 1327 1323 --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity)); 1328 1324 } 1329 1325 1330 - .ring-white\/10 { 1331 - --tw-ring-color: rgb(255 255 255 / 0.1); 1332 - } 1333 - 1334 1326 .filter { 1335 1327 filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); 1336 1328 } ··· 1361 1353 color: rgb(0 0 0 / var(--tw-text-opacity)); 1362 1354 } 1363 1355 1364 - .placeholder\:text-gray-400::-moz-placeholder { 1365 - --tw-text-opacity: 1; 1366 - color: rgb(156 163 175 / var(--tw-text-opacity)); 1367 - } 1368 - 1369 - .placeholder\:text-gray-400::placeholder { 1370 - --tw-text-opacity: 1; 1371 - color: rgb(156 163 175 / var(--tw-text-opacity)); 1372 - } 1373 - 1374 - .placeholder\:text-gray-600::-moz-placeholder { 1375 - --tw-text-opacity: 1; 1376 - color: rgb(75 85 99 / var(--tw-text-opacity)); 1377 - } 1378 - 1379 - .placeholder\:text-gray-600::placeholder { 1380 - --tw-text-opacity: 1; 1381 - color: rgb(75 85 99 / var(--tw-text-opacity)); 1382 - } 1383 - 1384 1356 .hover\:bg-rose-600:hover { 1385 1357 --tw-bg-opacity: 1; 1386 1358 background-color: rgb(225 29 72 / var(--tw-bg-opacity)); ··· 1414 1386 display: none; 1415 1387 } 1416 1388 1389 + .dark\:border-white\/10:is(.dark *) { 1390 + border-color: rgb(255 255 255 / 0.1); 1391 + } 1392 + 1417 1393 .dark\:border-white\/20:is(.dark *) { 1418 1394 border-color: rgb(255 255 255 / 0.2); 1419 1395 } ··· 1424 1400 1425 1401 .dark\:stroke-white:is(.dark *) { 1426 1402 stroke: #fff; 1403 + } 1404 + 1405 + .dark\:text-red-500:is(.dark *) { 1406 + --tw-text-opacity: 1; 1407 + color: rgb(239 68 68 / var(--tw-text-opacity)); 1427 1408 } 1428 1409 1429 1410 .dark\:text-white:is(.dark *) {
+10
youtube-party-dj-yunus-light-darkmodebutton/.devcontainer/Dockerfile
··· 1 + ARG VARIANT=ubuntu-20.04 2 + FROM mcr.microsoft.com/vscode/devcontainers/base:0-${VARIANT} 3 + USER vscode 4 + 5 + RUN curl -s https://gist.githubusercontent.com/LukeChannings/09d53f5c364391042186518c8598b85e/raw/ac8cd8c675b985edd4b3e16df63ffef14d1f0e24/deno_install.sh | sh 6 + RUN export DENO_INSTALL=/home/vscode/.deno 7 + RUN export PATH=${DENO_INSTALL}/bin:${PATH} 8 + RUN /home/vscode/.deno/bin/deno install --import-map https://dev.cdn.unyt.org/importmap.json -Ar -n uix https://dev.cdn.unyt.org/uix/run.ts 9 + RUN echo "export DENO_INSTALL=/home/vscode/.deno" >> ~/.bashrc 10 + RUN echo "export PATH=\${DENO_INSTALL}/bin:\${PATH}" >> ~/.bashrc
+18
youtube-party-dj-yunus-light-darkmodebutton/.devcontainer/devcontainer.json
··· 1 + { 2 + "name": "Deno", 3 + "dockerFile": "Dockerfile", 4 + "customizations": { 5 + "vscode": { 6 + "settings": { 7 + "terminal.integrated.shell.linux": "/bin/bash" 8 + }, 9 + "extensions": ["denoland.vscode-deno"] 10 + } 11 + }, 12 + "forwardPorts": [80, 8080], 13 + "remoteUser": "vscode", 14 + "remoteEnv": { 15 + "PATH": "${containerEnv:PATH}:/home/vscode/.deno", 16 + "ENDPOINT": "@${localEnv:UserName}${localEnv:USER}.uix-base-project" 17 + } 18 + }
+1
youtube-party-dj-yunus-light-darkmodebutton/.env.sample
··· 1 + YOUTUBE_API_KEY=AIzaSyAaUznrqSXyPq-P_FxmELKpBvOQu67MogA
+6
youtube-party-dj-yunus-light-darkmodebutton/.gitignore
··· 1 + deno.lock 2 + .datex-cache 3 + node_modules 4 + .deno_lsp 5 + .env 6 + .DS_Store
+16
youtube-party-dj-yunus-light-darkmodebutton/.vscode/launch.json
··· 1 + { 2 + "version": "0.2.0", 3 + "configurations": [ 4 + { 5 + "request": "launch", 6 + "name": "Launch Endpoint", 7 + "type": "node", 8 + "cwd": "${workspaceFolder}", 9 + "runtimeExecutable": "/home/vscode/.deno/bin/uix", 10 + "attachSimplePort": 9229, 11 + "args": [ 12 + ], 13 + "console": "integratedTerminal" 14 + } 15 + ] 16 + }
+3
youtube-party-dj-yunus-light-darkmodebutton/.vscode/settings.json
··· 1 + { 2 + "deno.enable": true, 3 + }
+7
youtube-party-dj-yunus-light-darkmodebutton/LICENSE
··· 1 + Copyright 2024 - youtube party dj team 2 + 3 + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 + 5 + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 + 7 + THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+55
youtube-party-dj-yunus-light-darkmodebutton/README.md
··· 1 + # youtube party dj 2 + 3 + play a youtube queue on one device and other devices can add songs to the queue, as well as vote on songs. highest voted song plays next. wip. 4 + 5 + Made with [UIX](https://uix.unyt.org/). 6 + 7 + ## demo 8 + 9 + short demo video (left player, right a client) 10 + 11 + 12 + https://github.com/flo-bit/youtube-party-dj/assets/45694132/ac43fc09-d47f-4611-9991-0aa098f1105a 13 + 14 + 15 + ## development 16 + 17 + 1. clone the repository 18 + 19 + ```bash 20 + git clone https://github.com/flo-bit/youtube-party-dj.git 21 + ``` 22 + 23 + 2. install [deno](https://docs.deno.com/runtime/manual/getting_started/installation) 24 + 25 + 3. install uix 26 + 27 + ```bash 28 + deno install --import-map https://cdn.unyt.org/uix/importmap.json -Aq -n uix https://cdn.unyt.org/uix/run.ts 29 + ``` 30 + 31 + 4. install [node.js and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) if you haven't already 32 + 33 + 5. install node modules, run this in the root directory of the project: 34 + 35 + ```bash 36 + npm install 37 + ``` 38 + 39 + 6. get a youtube api key and add a `.env` file in the root directory of the project with the following content: 40 + 41 + ```env 42 + YOUTUBE_API_KEY=<your api key> 43 + ``` 44 + 45 + 7. run development server, run this in the root directory of the project: 46 + 47 + ```bash 48 + npm run dev 49 + ``` 50 + 51 + 8. open the browser and navigate to `http://localhost` 52 + 53 + ## license 54 + 55 + mit
+2
youtube-party-dj-yunus-light-darkmodebutton/app.dx
··· 1 + name: "Youtube Party DJ", 2 + description: "A democratic way to play music videos from Youtube at a party",
+42
youtube-party-dj-yunus-light-darkmodebutton/backend/data.tsx
··· 1 + import { Innertube } from "https://deno.land/x/youtubei@v10.0.0-deno/deno.ts"; 2 + 3 + const youtube = await Innertube.create(); 4 + 5 + export async function search(q: string) { 6 + try { 7 + 8 + const result = await youtube.search(q, {type: 'video', sort_by: 'relevance'}) 9 + 10 + // filter out videos without duration (live?), then get first 10 videos 11 + // @ts-ignore - no type for duration 12 + const videos = result.videos.filter((item) => item.duration?.seconds).slice(0, 10); 13 + 14 + return videos.map((item) => { 15 + return { 16 + title: item.title.text ?? 'Untitled', 17 + // @ts-ignore - no type for thumbnails 18 + thumbnail: item.thumbnails?.[0].url, 19 + // @ts-ignore - no type for id 20 + id: item.id, 21 + likes: $$(new Set<string>()), 22 + added: Date.now(), 23 + // @ts-ignore - no type for duration 24 + duration: item.duration?.text ?? '-', 25 + }; 26 + }); 27 + } catch (error) { 28 + console.error(error); 29 + return []; 30 + } 31 + } 32 + 33 + // effect(() => { 34 + // // sort by likes, then by time added 35 + // sampleQueue.sort((a, b) => { 36 + // if (a.likes > b.likes) return -1; 37 + // if (a.likes < b.likes) return 1; 38 + // if (a.added > b.added) return 1; 39 + // if (a.added < b.added) return -1; 40 + // return 0; 41 + // }); 42 + // });
+16
youtube-party-dj-yunus-light-darkmodebutton/backend/entrypoint.ts
··· 1 + /** 2 + * Backend entrypoint: 3 + * This module provides a default export that defines the UI that is returned from the backend 4 + * when a page is visited 5 + */ 6 + import { provideRedirect } from "uix/html/entrypoint-providers.tsx" 7 + 8 + import "../common/theme.tsx" 9 + 10 + export default { 11 + // show backend (hybrid) rendered page on /backend 12 + //'/backend': import("../common/page.tsx"), 13 + 14 + // redirect / to /backend 15 + //'/': provideRedirect("/backend") 16 + }
+125
youtube-party-dj-yunus-light-darkmodebutton/backend/sessions.ts
··· 1 + import { Context } from "uix/routing/context.ts"; 2 + import { ObjectRef } from "unyt_core/runtime/pointers.ts"; 3 + 4 + export type Item = { 5 + title: string; 6 + thumbnail: string; 7 + duration: string; 8 + id: string; 9 + likes: ObjectRef<Set<string>>; 10 + liked?: boolean; 11 + added: number; 12 + }; 13 + 14 + export interface SessionData { 15 + code: string; 16 + hostId: string; 17 + clientIds: Set<string>; 18 + queue: ObjectRef<Item[]>; 19 + currentlyPlaying: ObjectRef<Item | null>; 20 + }; 21 + 22 + // map of session codes to session data 23 + export const sessions = eternalVar('sessions-50') ?? $$(new Map<string, ObjectRef<SessionData>>()); 24 + 25 + export const getAndRemoveNextVideoFromSession = (code: string) => { 26 + const session = sessions.get(code); 27 + console.log(session); 28 + if (!session) { 29 + return; 30 + } 31 + console.log(session.queue); 32 + const video = session.queue.shift(); 33 + if (video) { 34 + session.currentlyPlaying = video; 35 + } 36 + return video; 37 + } 38 + 39 + export const getSessionWithCode = (code: string) => { 40 + return sessions.get(code); 41 + } 42 + 43 + export const getSessionUserHosts = async () => { 44 + const user = await getUserId(); 45 + for (const [_code, session] of sessions.entries()) { 46 + if (session.hostId === user.userId) { 47 + return session; 48 + } 49 + } 50 + 51 + // create new 52 + const session = await createSession(user.userId); 53 + 54 + return session; 55 + } 56 + 57 + export const addClientToSession = async (code: string) => { 58 + const client = await getUserId(); 59 + const session = sessions.get(code); 60 + if (!session) { 61 + return; 62 + } 63 + session.clientIds.add(client.userId); 64 + 65 + console.log(session); 66 + 67 + return session; 68 + } 69 + 70 + export const toggleLike = async (code: string, videoId: string) => { 71 + console.log(code, videoId); 72 + try { 73 + const user = await getUserId(); 74 + 75 + const session = sessions.get(code); 76 + console.log(session); 77 + if (!session) { 78 + return; 79 + } 80 + const video = session.queue.find((video) => video.id == videoId); 81 + console.log(video); 82 + if (!video) { 83 + return; 84 + } 85 + if (video.likes.has(user.userId)) { 86 + console.log('deleting like'); 87 + video.likes.delete(user.userId); 88 + } else { 89 + console.log('adding like'); 90 + video.likes.add(user.userId); 91 + } 92 + return video; 93 + } catch (error) { 94 + console.error(error); 95 + } 96 + } 97 + 98 + const getUserId = async () => { 99 + const privateData = (await Context.getPrivateData(datex.meta)) as { userId: string }; 100 + if (!privateData.userId) { 101 + privateData.userId = crypto.randomUUID() 102 + } 103 + return privateData; 104 + } 105 + 106 + const createSession = (userId: string) => { 107 + // create random code that is not already in use 108 + let code = null; 109 + 110 + // check if the code is already in use 111 + while (!code || sessions.get(code)) { 112 + // generate a random 4 character code consisting of uppercase letters and numbers 113 + code = Array.from({ length: 4 }, () => Math.floor(Math.random() * 36).toString(36).toUpperCase()).join(''); 114 + } 115 + const session = { 116 + code, 117 + hostId: userId, 118 + clientIds: new Set() as Set<string>, 119 + queue: $$([] as Item[]), 120 + currentlyPlaying: $$(null as Item | null), 121 + }; 122 + sessions.set(code, $$(session)); 123 + 124 + return session; 125 + }
+83
youtube-party-dj-yunus-light-darkmodebutton/common/client.tsx
··· 1 + import { Queue } from "./components/Queue.tsx"; 2 + import QRCodeOverlay from "./components/QRCodeOverlay.tsx"; 3 + import SearchBar from "./components/SearchBar.tsx"; 4 + import { search } from "backend/data.tsx"; 5 + import { addClientToSession, getSessionWithCode, Item } from "backend/sessions.ts"; 6 + import { Context } from "uix/routing/context.ts"; 7 + import ToggleThemeButton from "./components/ToggleThemeButton.tsx"; 8 + 9 + export default async function App(ctx: Context) { 10 + const code = (ctx.urlPattern?.pathname.groups[0] ?? "XXXX"); 11 + 12 + const session = await addClientToSession(code); 13 + 14 + if(!session) { 15 + return; 16 + } 17 + 18 + const searchResults: Item[] = $$([]); 19 + 20 + const showSearch = $$(false); 21 + 22 + const onSearch = async (value: string) => { 23 + showSearch.val = true; 24 + 25 + searchResults.splice(0, searchResults.length); 26 + searchResults.push(...await search(value)); 27 + }; 28 + 29 + const renderToggle = () => { 30 + return toggle(showSearch, 31 + <button onclick={() => { 32 + showSearch.val = false; 33 + 34 + }} id="queueiconframeclient" class="absolute bottom-2 right-2 w-20 h-20 bg-white dark:bg-white/5 border border-black dark:border-white/10 rounded-full flex items-center justify-center backdrop-blur-md"> 35 + 36 + <svg id="queueiconclient" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" class="size-14 stroke-black dark:stroke-white"> 37 + <path stroke-linecap="round" stroke-linejoin="round" d="M3.75 12h16.5m-16.5 3.75h16.5M3.75 19.5h16.5M5.625 4.5h12.75a1.875 1.875 0 0 1 0 3.75H5.625a1.875 1.875 0 0 1 0-3.75Z" /> 38 + </svg> 39 + </button>, 40 + <button onclick={() => { 41 + showSearch.val = true; 42 + 43 + // set focus to search bar 44 + const input = document.querySelector('input'); 45 + if (input) { 46 + input.focus(); 47 + } 48 + }} id="plusiconframeclient" class="absolute bottom-2 right-2 w-20 h-20 bg-white dark:bg-white/5 border border-black dark:border-white/10 rounded-full flex items-center justify-center backdrop-blur-md"> 49 + 50 + <svg id="plusiconclient" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" class="size-16 stroke-black dark:stroke-white"> 51 + <path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15" /> 52 + </svg> 53 + </button>); 54 + } 55 + 56 + return ( 57 + <main> 58 + <div 59 + class="flex flex-col overflow-y-hidden h-screen rounded-xl mx-auto max-w-2xl" 60 + > 61 + <div class="flex px-4 my-4 "> 62 + <SearchBar onSearch={onSearch} /> 63 + <div class="ml-2 flex items-center justify-center"> 64 + <ToggleThemeButton/> 65 + </div> 66 + 67 + 68 + </div> 69 + <div class="px-4 py-4 border-t border-black border-white/20 mx-0 overflow-y-scroll flex-grow"> 70 + {toggle(showSearch, <Queue items={searchResults} type={'search'} code={code} />, <Queue items={session.queue} type={'client'} code={code} />)} 71 + 72 + </div> 73 + 74 + {renderToggle()} 75 + 76 + <QRCodeOverlay code={code} /> 77 + 78 + 79 + </div> 80 + 81 + </main> 82 + ); 83 + }
+16
youtube-party-dj-yunus-light-darkmodebutton/common/components/NowPlaying.tsx
··· 1 + import { Item } from "backend/data.tsx" 2 + 3 + export function NowPlaying({item} : Readonly<{item:Item}>) 4 + { 5 + return <div class="queueframe w-full rounded-xl bg-white dark:bg-white/5 border border-black dark:border-white/10 h-20 overflow-hidden mb-2"> 6 + <div class="queueitem dark:text-white tex-black flex items-left h-full"> 7 + <img src={item.thumbnail} class="h-20 w-32 object-cover" alt=" " /> 8 + <div class="flex flex-1 flex-grow justify-between"> 9 + <div class="pl-4 justify-center flex flex-col h-full"> 10 + <p class="line-clamp-2 font-bold text-md leading-6">{item.title} </p> 11 + <p class="text-xs">{item.duration} minutes</p> 12 + </div> 13 + </div> 14 + </div> 15 + </div> 16 + }
+35
youtube-party-dj-yunus-light-darkmodebutton/common/components/QR.tsx
··· 1 + import { Pointer } from "unyt_core/runtime/pointers.ts"; 2 + 3 + export default function QRCode({ code }: { code: Pointer<string> & string}) { 4 + const qrCode = always(() => { 5 + if (code == "XXXX") { 6 + const text = "Loading QR Code "; 7 + const loadingText = $$(text); 8 + 9 + let i = 0; 10 + setInterval(() => { 11 + loadingText.val += "."; 12 + if (i < 3) { 13 + i++; 14 + } else { 15 + i = 0; 16 + loadingText.val = text; 17 + } 18 + }, 500); 19 + 20 + return <span style={{color: "black"}}>{loadingText}</span>; 21 + } else { 22 + const qrCodeSrc = `https://api.qrserver.com/v1/create-qr-code/?data=${encodeURIComponent([new URL(window.location.href).origin, "/client/", code].join(""))}&format=svg` 23 + 24 + return <img class="h-full" src={qrCodeSrc} alt="QR code" />; 25 + } 26 + }); 27 + 28 + return ( 29 + <div id="qr" class="aspect-square w-3/4 md:w-full border dark:border-white/10 border-black rounded-xl z-10 overflow-hidden bg-white p-4"> 30 + <div id="qr-text" class="w-full h-full flex items-center justify-center text-white"> 31 + {qrCode} 32 + </div> 33 + </div> 34 + ); 35 + }
+34
youtube-party-dj-yunus-light-darkmodebutton/common/components/QRCodeOverlay.tsx
··· 1 + import { Pointer } from "unyt_core/runtime/pointers.ts"; 2 + import QRCode from "./QR.tsx"; 3 + 4 + export default function QRCodeOverlay({code}: {code: Pointer<string> & string}) { 5 + const showQR = $$(false); 6 + 7 + return ( 8 + <div> 9 + <button onclick={() => { 10 + showQR.val = true; 11 + }} id="showQRcode" class="absolute md:hidden bottom-2 left-2 w-20 h-20 bg-white dark:bg-white/5 border border-black dark:border-white/10 rounded-xl flex items-center justify-center backdrop-blur-md"> 12 + <svg id="qricon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="size-18 stroke-black dark:stroke-white"> 13 + <path stroke-linecap="round" stroke-linejoin="round" d="M3.75 4.875c0-.621.504-1.125 1.125-1.125h4.5c.621 0 1.125.504 1.125 1.125v4.5c0 .621-.504 1.125-1.125 1.125h-4.5A1.125 1.125 0 0 1 3.75 9.375v-4.5ZM3.75 14.625c0-.621.504-1.125 1.125-1.125h4.5c.621 0 1.125.504 1.125 1.125v4.5c0 .621-.504 1.125-1.125 1.125h-4.5a1.125 1.125 0 0 1-1.125-1.125v-4.5ZM13.5 4.875c0-.621.504-1.125 1.125-1.125h4.5c.621 0 1.125.504 1.125 1.125v4.5c0 .621-.504 1.125-1.125 1.125h-4.5A1.125 1.125 0 0 1 13.5 9.375v-4.5Z" /> 14 + <path stroke-linecap="round" stroke-linejoin="round" d="M6.75 6.75h.75v.75h-.75v-.75ZM6.75 16.5h.75v.75h-.75v-.75ZM16.5 6.75h.75v.75h-.75v-.75ZM13.5 13.5h.75v.75h-.75v-.75ZM13.5 19.5h.75v.75h-.75v-.75ZM19.5 13.5h.75v.75h-.75v-.75ZM19.5 19.5h.75v.75h-.75v-.75ZM16.5 16.5h.75v.75h-.75v-.75Z" /> 15 + </svg> 16 + </button> 17 + 18 + <div style={{ display: showQR }} class="absolute inset-0 flex md:hidden z-20 bg-white dark:bg-white/5 rounded-xl border dark:border-white/10 border-black backdrop-blur-md items-center justify-center"> 19 + <button id="qrButton" class="absolute inset-0 h-full w-full" onclick={() => { 20 + showQR.val = false; 21 + }}></button> 22 + 23 + <QRCode code={code} /> 24 + 25 + <button id="qrCloseButton" class="absolute top-2 right-2 dark:stroke-white stroke-black" onclick={() => { 26 + showQR.val = false; 27 + }}> 28 + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" class="size-8"> 29 + <path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12" /> 30 + </svg> 31 + </button> 32 + </div> 33 + </div>); 34 + }
+15
youtube-party-dj-yunus-light-darkmodebutton/common/components/Queue.tsx
··· 1 + import { QueueItem } from "./QueueItem.tsx"; 2 + import { Item } from "backend/sessions.ts"; 3 + 4 + export type QueueType = 'player' | 'client' | 'search'; 5 + 6 + 7 + export function Queue({ items, type, code }: Readonly<{ items: Item[], type: QueueType, code: string }>) { 8 + return <div class="space-y-4">{ 9 + // @ts-ignore - uix stuff that doesn't work with types 10 + items.$.map((item: Item) => { 11 + // @ts-ignore - uix stuff that doesn't work with types 12 + return <QueueItem item={item.$} type={type} code={code}></QueueItem> 13 + })} 14 + </div> 15 + }
+122
youtube-party-dj-yunus-light-darkmodebutton/common/components/QueueItem.tsx
··· 1 + import { ObjectRef } from "unyt_core/runtime/pointers.ts"; 2 + import { QueueType } from "./Queue.tsx"; 3 + import { getSessionWithCode, Item, toggleLike } from "backend/sessions.ts"; 4 + import { currentTheme } from ".//ToggleThemeButton.tsx"; 5 + import { toggleTheme } from "./ToggleThemeButton.tsx"; 6 + 7 + const theme = currentTheme; 8 + export function QueueItem({ 9 + item, 10 + type, 11 + code 12 + }: Readonly<{ item: ObjectRef<Item>; type: QueueType, code: string }>) { 13 + const liked = $$(false); 14 + function getAction() { 15 + if (type === "player") { 16 + return ( 17 + <> 18 + <div class="font-semibold">{item.likes.val.size}</div> 19 + <svg 20 + xmlns="http://www.w3.org/2000/svg" 21 + viewBox="0 0 24 24" 22 + fill="currentColor" 23 + class="size-6 ml-1" 24 + > 25 + <path d="m11.645 20.91-.007-.003-.022-.012a15.247 15.247 0 0 1-.383-.218 25.18 25.18 0 0 1-4.244-3.17C4.688 15.36 2.25 12.174 2.25 8.25 2.25 5.322 4.714 3 7.688 3A5.5 5.5 0 0 1 12 5.052 5.5 5.5 0 0 1 16.313 3c2.973 0 5.437 2.322 5.437 5.25 0 3.925-2.438 7.111-4.739 9.256a25.175 25.175 0 0 1-4.244 3.17 15.247 15.247 0 0 1-.383.219l-.022.012-.007.004-.003.001a.752.752 0 0 1-.704 0l-.003-.001Z" /> 26 + </svg> 27 + </> 28 + ); 29 + } else if (type === "client") { 30 + return ( 31 + <> 32 + <div class="font-semibold">{item.likes.val.size}</div> 33 + <button 34 + onclick={async () => { 35 + const newitem = await toggleLike(code, item.id); 36 + console.log("liked", newitem); 37 + }} 38 + > 39 + {toggle( 40 + liked, 41 + <svg 42 + xmlns="http://www.w3.org/2000/svg" 43 + viewBox="0 0 24 24" 44 + fill="currentColor" 45 + class="size-6 ml-1" 46 + > 47 + <path d="m11.645 20.91-.007-.003-.022-.012a15.247 15.247 0 0 1-.383-.218 25.18 25.18 0 0 1-4.244-3.17C4.688 15.36 2.25 12.174 2.25 8.25 2.25 5.322 4.714 3 7.688 3A5.5 5.5 0 0 1 12 5.052 5.5 5.5 0 0 1 16.313 3c2.973 0 5.437 2.322 5.437 5.25 0 3.925-2.438 7.111-4.739 9.256a25.175 25.175 0 0 1-4.244 3.17 15.247 15.247 0 0 1-.383.219l-.022.012-.007.004-.003.001a.752.752 0 0 1-.704 0l-.003-.001Z" /> 48 + </svg>, 49 + <svg 50 + xmlns="http://www.w3.org/2000/svg" 51 + fill="none" 52 + viewBox="0 0 24 24" 53 + stroke-width="1.5" 54 + class="size-6 ml-1" 55 + > 56 + <path 57 + stroke-linecap="round" 58 + stroke-linejoin="round" 59 + d="M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12Z" 60 + /> 61 + </svg> 62 + )} 63 + </button> 64 + </> 65 + ); 66 + } else if (type === "search") { 67 + return ( 68 + <button 69 + onclick={async () => { 70 + 71 + const session = await getSessionWithCode(code); 72 + // check if session is null 73 + if (!session) { 74 + return; 75 + } 76 + 77 + // check if queue already contains the video 78 + if (session.queue.some((v) => v.id == item.id)) { 79 + return; 80 + } 81 + 82 + session?.$.queue.val.push(item); 83 + }} 84 + class="queueframe bg-white dark:bg-white/5 border border-black dark:border-white/10 rounded-full w-10 h-10 flex items-center justify-center" 85 + > 86 + <svg 87 + xmlns="http://www.w3.org/2000/svg" 88 + fill="none" 89 + viewBox="0 0 24 24" 90 + stroke-width="1.5" 91 + class="size-6 dark:stroke-white stroke-black queueicon2" 92 + > 93 + <path 94 + stroke-linecap="round" 95 + stroke-linejoin="round" 96 + d="M12 4.5v15m7.5-7.5h-15" 97 + /> 98 + </svg> 99 + </button> 100 + ); 101 + } 102 + } 103 + 104 + 105 + 106 + return ( 107 + <div class="queueframe w-full rounded-xl bg-white dark:bg-white/5 border border-black dark:border-white/10 h-20 overflow-hidden mb-2"> 108 + <div class="queueitem text-black dark:text-white flex items-left h-full"> 109 + <img src={item.thumbnail} class="h-20 w-32 object-cover" alt=" " /> 110 + <div class="flex flex-1 flex-grow justify-between"> 111 + <div class="pl-4 justify-center flex flex-col h-full"> 112 + <p class="line-clamp-2 font-bold text-md leading-6">{item.title} </p> 113 + <p class="text-xs">{item.duration} minutes</p> 114 + </div> 115 + <div class="queueicon2 flex h-full justify-center items-center px-2 dark:stroke-white stroke-black"> 116 + {getAction()} 117 + </div> 118 + </div> 119 + </div> 120 + </div>) 121 + }; 122 +
+40
youtube-party-dj-yunus-light-darkmodebutton/common/components/SearchBar.tsx
··· 1 + import { toggleTheme } from "./ToggleThemeButton.tsx"; 2 + const results = [ 3 + { 4 + cover: "https://img.youtube.com/vi/3JZ_D3ELwOQ/0.jpg", 5 + song: "Shape of You", 6 + artist: "Ed Sheeran", 7 + length: "4:24" 8 + }, 9 + { 10 + cover: "https://img.youtube.com/vi/2Vv-BfVoq4g/0.jpg", 11 + song: "Perfect", 12 + artist: "Ed Sheeran", 13 + length: "4:40" 14 + } 15 + ]; 16 + 17 + export default function SearchBar({ onSearch }: { onSearch: (value: string) => void }) { 18 + const value = $$(''); 19 + 20 + return ( 21 + <div class="relative flex items-center w-full"> 22 + <input type="text" value={value} onkeypress={(event) => { 23 + if (event.key === 'Enter') { 24 + onSearch(value); 25 + } 26 + }} name="search" id="search" class="block w-full font-semibold rounded-xl border-0 outline-none py-4 pr-14 dark:text-white text-black bg-white ring-black dark:bg-white/5 shadow-sm ring-1 ring-inset dark:ring-white/10 placeholder:text-black dark:placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-red-600 text-xl sm:leading-6" /> 27 + <div class="absolute inset-y-0 right-0 flex py-1.5 pr-1.5"> 28 + <button id="searchbutton" class="inline-flex items-center px-1 stroke-black dark:stroke-white" onclick={() => { 29 + onSearch(value); 30 + }}> 31 + <div id="iconframe" class="w-10 h-10 flex justify-center items-center"> 32 + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" class="size-8 active:size-6"> 33 + <path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" /> 34 + </svg> 35 + </div> 36 + </button> 37 + </div> 38 + </div> 39 + ); 40 + }
+249
youtube-party-dj-yunus-light-darkmodebutton/common/components/ToggleThemeButton.tsx
··· 1 + 2 + let darkMode = false; 3 + 4 + export function toggleTheme(){ 5 + darkMode = !darkMode 6 + if(darkMode) { 7 + document.body.classList.add('dark'); 8 + } else { 9 + document.body.classList.remove('dark'); 10 + } 11 + localStorage.setItem('theme', darkMode ? 'dark' : 'light'); 12 + 13 + const qricon = document.getElementById('qricon'); 14 + const qrButton = document.getElementById('qrButton'); 15 + const qrCloseButton = document.getElementById('qrCloseButton'); 16 + const qr = document.getElementById('qr'); 17 + const qrtext = document.getElementById('qrtext'); 18 + const qrtext2 = document.getElementById('qrtext2'); 19 + const player = document.getElementById('player'); 20 + const playerframe = document.getElementById('playerframe'); 21 + const plusicon = document.getElementById('plusicon'); 22 + const plusiconclient = document.getElementById('plusiconclient'); 23 + const plusiconframeclient = document.getElementById('plusiconframeclient'); 24 + const showQRButton = document.getElementById('showQRcode') 25 + const queueItemFrames = document.querySelectorAll('.queueframe'); 26 + const queueItems = document.querySelectorAll('.queueitem'); 27 + const queueIcons = document.querySelectorAll('.queueicon'); 28 + const queueIcon2s = document.querySelectorAll(".queueicon2"); 29 + const toggleThemeButton = document.getElementById('togglethemebutton'); 30 + const playerqueueborder = document.getElementById("playerqueueborder"); 31 + const playerqueuebg = document.getElementById("playerqueuebg"); 32 + const queueiconframeclient = document.getElementById("queueiconframeclient"); 33 + const queueiconclient = document.getElementById("queueiconclient"); 34 + 35 + 36 + if (!darkMode) { 37 + document.documentElement.setAttribute('data-theme', 'light'); 38 + document.body.style.backgroundColor = "white"; 39 + 40 + if(toggleThemeButton){ 41 + toggleThemeButton.classList.remove('border-white/20'); 42 + toggleThemeButton.classList.add('border-black'); 43 + } 44 + if(qrButton){ 45 + qrButton.classList.remove('bg-white/5', 'border-white/10'); 46 + qrButton.classList.add('bg-white', 'border-black'); 47 + } 48 + if(playerqueuebg){ 49 + playerqueuebg.classList.remove('bg-white/5', 'border-white/10'); 50 + playerqueuebg.classList.add('green', 'border-black'); 51 + } 52 + if(playerqueueborder){ 53 + playerqueueborder.classList.remove('border-white/20'); 54 + playerqueueborder.classList.add('border-black'); 55 + } 56 + if(qricon){ 57 + qricon.classList.remove('stroke-white'); 58 + qricon.classList.add('stroke-black'); 59 + } 60 + if(qrCloseButton){ 61 + qrCloseButton.classList.remove('stroke-white'); 62 + qrCloseButton.classList.add('stroke-black'); 63 + } 64 + if(qr){ 65 + qr.classList.remove('border-white/10'); 66 + qr.classList.add('border-black'); 67 + } 68 + if(qrtext){ 69 + qrtext.classList.remove('text-white'); 70 + qrtext.classList.add('text-black'); 71 + } 72 + if(showQRButton){ 73 + showQRButton.classList.remove('bg-white/5', 'border-white/10'); 74 + showQRButton.classList.add('bg-white', 'border-black'); 75 + } 76 + if(playerframe){ 77 + playerframe.classList.remove('bg-white/5', 'border-white/10'); 78 + playerframe.classList.add('bg-white', 'border-black', "backdrop-blur"); 79 + } 80 + if(player){ 81 + player.classList.remove('text-white'); 82 + player.classList.add("text-black"); 83 + } 84 + if(qrtext){ 85 + qrtext.classList.remove('text-white'); 86 + qrtext.classList.add('text-black'); 87 + } 88 + if(qrtext2){ 89 + qrtext2.classList.remove('text-white'); 90 + qrtext2.classList.add('text-black'); 91 + } 92 + queueItems.forEach(item => { 93 + item.classList.remove('text-white'); 94 + item.classList.add('text-black'); 95 + }); 96 + 97 + queueItemFrames.forEach(frame => { 98 + frame.classList.remove('bg-white/5', 'border-white/10'); 99 + frame.classList.add('bg-white', 'border-black'); 100 + }); 101 + 102 + queueIcons.forEach(icon => { 103 + icon.classList.remove('stroke-white'); 104 + icon.classList.add('stroke-black'); 105 + }); 106 + 107 + queueIcon2s.forEach(icon => { 108 + icon.classList.remove('stroke-white'); 109 + icon.classList.add('stroke-black'); 110 + }); 111 + 112 + if(plusicon){ 113 + plusicon.classList.remove('stroke-white'); 114 + plusicon.classList.add("stroke-black"); 115 + } 116 + if(plusiconclient){ 117 + plusiconclient.classList.remove('stroke-white'); 118 + plusiconclient.classList.add("stroke-black"); 119 + } 120 + if(plusiconframeclient){ 121 + plusiconframeclient.classList.remove('bg-white/5', 'border-white/10'); 122 + plusiconframeclient.classList.add('bg-white', 'border-black',"backdrop-blur"); 123 + } 124 + if(queueiconframeclient){ 125 + queueiconframeclient.classList.remove('bg-white/5', 'border-white/10'); 126 + queueiconframeclient.classList.add('bg-white', 'border-black'); 127 + } 128 + if(queueiconclient){ 129 + queueiconclient.classList.remove('stroke-white'); 130 + queueiconclient.classList.add("stroke-black"); 131 + } 132 + 133 + 134 + } else { 135 + document.body.style.backgroundColor = "#1a191f"; 136 + 137 + if(toggleThemeButton){ 138 + toggleThemeButton.classList.add('border-white/20'); 139 + toggleThemeButton.classList.remove('border-black'); 140 + } 141 + if(qrButton){ 142 + qrButton.classList.add('bg-white/5', 'border-white/10'); 143 + qrButton.classList.remove('bg-white', 'border-black'); 144 + } 145 + if(qricon){ 146 + qricon.classList.add('stroke-white'); 147 + qricon.classList.remove('stroke-black'); 148 + } 149 + if(qrCloseButton){ 150 + qrCloseButton.classList.add('stroke-white'); 151 + qrCloseButton.classList.remove('stroke-black'); 152 + } 153 + if(qr){ 154 + qr.classList.add('bg-white', 'border-white/10'); 155 + qr.classList.remove('bg-black', 'border-black'); 156 + } 157 + if(qrtext){ 158 + qrtext.classList.remove('text-black'); 159 + qrtext.classList.add('text-white'); 160 + } 161 + if(playerframe){ 162 + playerframe.classList.add('bg-white/5', 'border-white/10'); 163 + playerframe.classList.remove('bg-white', 'border-black'); 164 + } 165 + if(player){ 166 + player.classList.add('text-white'); 167 + player.classList.remove("text-black"); 168 + } 169 + if(playerqueueborder){ 170 + playerqueueborder.classList.add('border-white/20'); 171 + playerqueueborder.classList.remove('border-black'); 172 + } 173 + if(playerqueuebg){ 174 + playerqueuebg.classList.add('bg-white/5', 'border-white/10'); 175 + playerqueuebg.classList.remove('green', 'border-black'); 176 + } 177 + if(qrtext){ 178 + qrtext.classList.add('text-white'); 179 + qrtext.classList.remove('text-black'); 180 + } 181 + if(qrtext2){ 182 + qrtext2.classList.add('text-white'); 183 + qrtext2.classList.remove('text-black'); 184 + } 185 + 186 + if(showQRButton){ 187 + showQRButton.classList.add('bg-white/5', 'border-white/10', "backdrop-blur"); 188 + showQRButton.classList.remove('bg-white', 'border-black'); 189 + } 190 + queueItems.forEach(item => { 191 + item.classList.add( 'text-white'); 192 + item.classList.remove( 'text-black'); 193 + }); 194 + 195 + queueIcons.forEach(icon => { 196 + icon.classList.add('stroke-white'); 197 + icon.classList.remove('stroke-black'); 198 + }); 199 + queueItemFrames.forEach(frame => { 200 + frame.classList.add('bg-white/5', 'border-white/10'); 201 + frame.classList.remove('bg-white', 'border-black'); 202 + }); 203 + 204 + queueIcon2s.forEach(icon => { 205 + icon.classList.add('stroke-white'); 206 + icon.classList.remove('stroke-black'); 207 + }); 208 + if(plusicon){ 209 + plusicon.classList.add('stroke-white'); 210 + plusicon.classList.remove("stroke-black"); 211 + } 212 + if(plusiconclient){ 213 + plusiconclient.classList.add('stroke-white'); 214 + plusiconclient.classList.remove("stroke-black"); 215 + } 216 + if(plusiconframeclient){ 217 + plusiconframeclient.classList.add('bg-white/5', 'border-white/10'); 218 + plusiconframeclient.classList.remove('bg-white', 'border-black'); 219 + } 220 + if(queueiconclient){ 221 + queueiconclient.classList.add('stroke-white'); 222 + queueiconclient.classList.remove("stroke-black"); 223 + } 224 + if(queueiconframeclient){ 225 + queueiconframeclient.classList.add('bg-white/5', 'border-white/10'); 226 + queueiconframeclient.classList.remove('bg-white', 'border-black'); 227 + } 228 + 229 + } 230 + }; 231 + 232 + // Load the saved theme on initial load 233 + export default function ToggleThemeButton(){ 234 + toggleTheme(); 235 + 236 + return ( 237 + <div> 238 + <button onclick={toggleTheme} class="cursor-pointer border-black dark:border-white/20"> 239 + <div class="flex items-center justify-center w-10"> 240 + <img class="rounded-lg size-8 active:size-6 hidden dark:block" src="./darkSunNew.png" alt="Dark Sun" /> 241 + <img class="rounded-lg size-8 active:size-6 p-2 block dark:hidden" src="./lightMoon-cropped.svg" alt="Light Moon" /> 242 + </div> 243 + </button> 244 + </div> 245 + ) 246 + }; 247 + 248 + 249 +
+136
youtube-party-dj-yunus-light-darkmodebutton/common/components/VideoPlayer.tsx
··· 1 + import { getAndRemoveNextVideoFromSession, Item } from "backend/sessions.ts"; 2 + 3 + export default function VideoPlayer({ queue, code }: Readonly<{ queue: Item[], code: string }>) { 4 + // @ts-ignore - YouTube API 5 + let player; 6 + 7 + async function playNext() { 8 + // @ts-ignore - YouTube API 9 + if ( 10 + (!player || player.getPlayerState() !== YT.PlayerState.PLAYING) 11 + ) { 12 + const video = await getAndRemoveNextVideoFromSession(code.val); 13 + if (video) { 14 + play(video.id); 15 + } 16 + } 17 + } 18 + 19 + function play(videoId: string) { 20 + // @ts-ignore - YouTube API 21 + if (player) { 22 + player.loadVideoById(videoId); 23 + } else { 24 + // @ts-ignore - YouTube API 25 + player = new window.YT.Player("player", { 26 + height: "315", 27 + width: "560", 28 + videoId: videoId, 29 + events: { 30 + onStateChange: onStateChange, 31 + }, 32 + playerVars: { 33 + autoplay: 1, 34 + color: "white", 35 + controls: 0, 36 + disablekb: 1, 37 + iv_load_policy: 3, 38 + modestbranding: 1, 39 + rel: 0, 40 + showinfo: 0, 41 + }, 42 + }); 43 + } 44 + } 45 + 46 + // @ts-ignore - YouTube API 47 + function onStateChange(event) { 48 + // @ts-ignore - YouTube API 49 + if (event.data === window.YT.PlayerState.ENDED) { 50 + setTimeout(() => { 51 + playNext(); 52 + }, 200); 53 + } 54 + } 55 + 56 + function onYouTubeIframeAPIReady() { 57 + playNext(); 58 + } 59 + 60 + const tag = document.createElement("script"); 61 + tag.src = "https://www.youtube.com/iframe_api"; 62 + document.body.appendChild(tag); 63 + 64 + // @ts-ignore - YouTube API 65 + globalThis.onYouTubeIframeAPIReady = onYouTubeIframeAPIReady; 66 + 67 + const text = always(() => { 68 + if (queue.length === 0) { 69 + return "Add a video to the queue!"; 70 + } 71 + return "Loading video..."; 72 + }) 73 + 74 + return ( 75 + <div id="playerframe" class="relative aspect-video bg-white dark:bg-white/5 border border-black dark:border-white/10 w-full overflow-hidden object-cover rounded-xl"> 76 + <div 77 + id="player" 78 + class="w-full h-full flex items-center justify-center dark:text-white text-black font-semibold" 79 + > 80 + {text} 81 + </div> 82 + </div> 83 + ); 84 + } 85 + 86 + 87 + /* 88 + let ytplayer; 89 + let spotplayer; 90 + const script = document.createElement("script"); 91 + script.src = "https://sdk.scdn.co/spotify-player.js"; 92 + script.async = true; 93 + document.body.appendChild(script); 94 + function play2(id: string, type: string) { 95 + if (type === "youtube") { 96 + if (ytplayer) { 97 + player.loadVideoById(id); 98 + } else { 99 + player = new window.YT.Player("ytplayer", { 100 + height: "315", 101 + width: "560", 102 + videoId: id, 103 + events: { 104 + onStateChange: onStateChange, 105 + }, 106 + playerVars: { 107 + autoplay: 1, 108 + color: "white", 109 + controls: 0, 110 + disablekb: 1, 111 + iv_load_policy: 3, 112 + modestbranding: 1, 113 + rel: 0, 114 + showinfo: 0, 115 + }, 116 + }); 117 + } 118 + } else if (type === "spotify") { 119 + if (spotplayer) { 120 + fetch(`https://api.spotify.com/v1/me/player/play`, { 121 + method: "PUT", 122 + body: JSON.stringify({ uris: [`spotify:track:${id}`] }), 123 + headers: { 124 + "Content-Type": "application/json", 125 + Authorization: `Bearer ${accessToken}`, 126 + }, 127 + }) else { 128 + player = new Spotify.Player({ 129 + name: 'Web Playback SDK', 130 + getOAuthToken: cb => { cb(accessToken); }, 131 + volume: 0.5 132 + }) 133 + }}; 134 + } 135 + } 136 + */
youtube-party-dj-yunus-light-darkmodebutton/common/components/darkSunNew.png

This is a binary file and will not be displayed.

+1
youtube-party-dj-yunus-light-darkmodebutton/common/components/lightMoon-cropped.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" enable-background="new 0 0 512 512" id="Layer_1" version="1.1" xml:space="preserve" viewBox="131.41 131.41 249.17 249.17"><path d="M349.852,343.15c-49.875,49.916-131.083,49.916-181,0c-49.916-49.918-49.916-131.125,0-181.021 c13.209-13.187,29.312-23.25,47.832-29.812c5.834-2.042,12.293-0.562,16.625,3.792c4.376,4.375,5.855,10.833,3.793,16.625 c-12.542,35.375-4,73.666,22.25,99.917c26.209,26.228,64.5,34.75,99.916,22.25c5.792-2.062,12.271-0.582,16.625,3.793 c4.376,4.332,5.834,10.812,3.771,16.625C373.143,313.838,363.06,329.941,349.852,343.15z M191.477,184.754 c-37.438,37.438-37.438,98.354,0,135.771c40,40.021,108.125,36.416,143-8.168c-35.959,2.25-71.375-10.729-97.75-37.084 c-26.375-26.354-39.333-61.771-37.084-97.729C196.769,179.796,194.039,182.192,191.477,184.754z" fill="#1D1D1B"/></svg>
+55
youtube-party-dj-yunus-light-darkmodebutton/common/home.tsx
··· 1 + export default function App() { 2 + return ( 3 + <main class="w-screen h-screen relative text-white"> 4 + <div class="absolute w-full bg-[#1f1f26] py-8 px-12"> 5 + <img src="./rsc/logo_white.svg" alt="Logo" class="h-12"></img> 6 + </div> 7 + <div class="w-full h-full md:flex md:flex-row pt-32"> 8 + <div class="md:h-full w-full md:w-1/2 flex flex-col place-content-center place-items-center gap-6 p-12"> 9 + <h1 10 + class="w-full font-semibold text-rose-200 leading-tight" 11 + style="font-size: 3em;" 12 + > 13 + Like YouTube<br></br>but 14 + <span class="text-rose-500 font-bold"> with friends.</span> 15 + </h1> 16 + <div class="w-full"> 17 + <p class="max-w-[34rem] text-rose-200 text-lg"> 18 + Take the hassle out of starting a watch party. Just let your 19 + friends vote for the next song and have your party run on 20 + autopilot. 21 + </p> 22 + </div> 23 + <div class="min-w-full"> 24 + <a href="/player" rel="noopener noreferrer"> 25 + <button class="bg-rose-500 hover:bg-rose-600 w-fit text-white font-medium gap-2 rounded-full font-lg py-3 px-6 flex items-center"> 26 + <svg 27 + xmlns="http://www.w3.org/2000/svg" 28 + viewBox="0 0 24 24" 29 + fill="currentColor" 30 + class="size-6" 31 + > 32 + <path 33 + fill-rule="evenodd" 34 + d="M4.5 5.653c0-1.427 1.529-2.33 2.779-1.643l11.54 6.347c1.295.712 1.295 2.573 0 3.286L7.28 19.99c-1.25.687-2.779-.217-2.779-1.643V5.653Z" 35 + clip-rule="evenodd" 36 + /> 37 + </svg> 38 + Get started 39 + </button> 40 + </a> 41 + </div> 42 + </div> 43 + <div class="md:h-full w-full md:w-1/2 flex items-center justify-center pt-12 md:pt-0"> 44 + <div class="absolute w-80 h-80 bg-rose-300 rounded-full z-[-5]"></div> 45 + <img 46 + class="w-56 border-4 border-rose-500 rounded-lg flex justify-center rotate-6" 47 + /* TO-DO: Change mockup once final client user interface is ready */ 48 + src="https://play-lh.googleusercontent.com/bI-pgtsjIayXCf_MwFghKtzytEwXyu9_-41TtbtzHavQOXU3CxAwGQCreZ_V_Co8Y3OB=w5120-h2880-rw" 49 + alt="Screenshot of YouTube Party DJ" 50 + ></img> 51 + </div> 52 + </div> 53 + </main> 54 + ); 55 + }
+54
youtube-party-dj-yunus-light-darkmodebutton/common/page.tsx
··· 1 + import QRCode from "./components/QR.tsx"; 2 + import VideoPlayer from "./components/VideoPlayer.tsx"; 3 + import { Queue } from "./components/Queue.tsx"; 4 + import QRCodeOverlay from "./components/QRCodeOverlay.tsx"; 5 + import { Item, getSessionUserHosts } from "backend/sessions.ts"; 6 + import { NowPlaying } from "common/components/NowPlaying.tsx"; 7 + import ToggleThemeButton from "./components/ToggleThemeButton.tsx"; 8 + 9 + export default async function App() { 10 + const session = await getSessionUserHosts() 11 + 12 + const code = $$(session.code as string); 13 + 14 + const current = always(() => { 15 + if(session.currentlyPlaying) { 16 + return <div class="px-4 mx-0"> 17 + <div class="text-blue-500 dark:text-red-500 font-semibold text-sm mb-2">currently playing</div> 18 + <NowPlaying item={session.currentlyPlaying.$} /> 19 + </div> 20 + } else { 21 + return null; 22 + } 23 + }) 24 + 25 + return ( 26 + <main class="w-screen h-screen relative"> 27 + <div class="mx-auto grid md:grid-cols-2 h-screen"> 28 + <div class="h-screen hidden md:flex items-center flex-col justify-center p-8"> 29 + <QRCode code={code} /> 30 + <div id="qrtext2" class="text-black dark:text-white text-3xl font-semibold mt-4">Party code: <span>{code}</span></div> 31 + </div> 32 + <div 33 + id="playerqueuebg" 34 + class="flex flex-col overflow-y-hidden h-screen bg-white dark:bg-white/5 border border-black dark:border-white/10 rounded-xl" 35 + > 36 + <div class="flex px-8 mx-0 mt-8 mb-4"> 37 + {/* @ts-ignore - uix doesn't support types? */} 38 + <VideoPlayer queue={session.queue} code={code} /> 39 + </div> 40 + <div class="flex items-center justify-end mr-12 h-10 mb-4"> 41 + <ToggleThemeButton/> 42 + </div> 43 + 44 + {current} 45 + <div id="playerqueueborder" 46 + class="px-4 py-4 border-t border-black border-white/20 mx-0 overflow-y-scroll flex-grow"> 47 + <Queue items={session.queue} type={'player'} code={code} /> 48 + </div> 49 + </div> 50 + </div> 51 + 52 + <QRCodeOverlay code={code} /> 53 + </main>); 54 + }
+11
youtube-party-dj-yunus-light-darkmodebutton/common/rsc/icon.svg
··· 1 + <svg width="29" height="28" viewBox="0 0 29 28" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 2 + <rect y="9" width="28" height="19" rx="5" fill="#F43F5E"/> 3 + <path d="M18 18.5L11.25 22.3971L11.25 14.6029L18 18.5Z" fill="white"/> 4 + <rect x="12.3947" width="19.8041" height="18.8435" transform="rotate(37.2075 12.3947 0)" fill="url(#pattern0_1_50)"/> 5 + <defs> 6 + <pattern id="pattern0_1_50" patternContentUnits="objectBoundingBox" width="1" height="1"> 7 + <use xlink:href="#image0_1_50" transform="matrix(0.00213339 0 0 0.00224215 -0.0216149 0)"/> 8 + </pattern> 9 + <image id="image0_1_50" width="489" height="446" xlink:href="data:image/png;base64,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"/> 10 + </defs> 11 + </svg>
+12
youtube-party-dj-yunus-light-darkmodebutton/common/rsc/logo.svg
··· 1 + <svg width="108" height="28" viewBox="0 0 108 28" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 2 + <path d="M33.92 23V18.92L32.036 14H33.692L34.964 17.804H34.508L35.744 14H37.4L35.54 18.92V23H33.92ZM39.8191 23.156C39.3911 23.156 39.0191 23.064 38.7031 22.88C38.3911 22.692 38.1491 22.432 37.9771 22.1C37.8051 21.768 37.7191 21.38 37.7191 20.936V18.464C37.7191 18.02 37.8051 17.632 37.9771 17.3C38.1491 16.964 38.3911 16.704 38.7031 16.52C39.0191 16.336 39.3911 16.244 39.8191 16.244C40.4631 16.244 40.9731 16.448 41.3491 16.856C41.7291 17.26 41.9191 17.796 41.9191 18.464V20.936C41.9191 21.6 41.7291 22.136 41.3491 22.544C40.9731 22.952 40.4631 23.156 39.8191 23.156ZM39.8191 21.656C40.0111 21.656 40.1591 21.602 40.2631 21.494C40.3671 21.382 40.4191 21.236 40.4191 21.056V18.344C40.4191 18.164 40.3671 18.02 40.2631 17.912C40.1591 17.8 40.0111 17.744 39.8191 17.744C39.6271 17.744 39.4791 17.8 39.3751 17.912C39.2711 18.02 39.2191 18.164 39.2191 18.344V21.056C39.2191 21.236 39.2711 21.382 39.3751 21.494C39.4791 21.602 39.6271 21.656 39.8191 21.656ZM44.6617 23.156C44.4017 23.156 44.1497 23.098 43.9057 22.982C43.6657 22.866 43.4677 22.658 43.3117 22.358C43.1557 22.054 43.0777 21.62 43.0777 21.056V16.4H44.5777V21.056C44.5777 21.236 44.6297 21.382 44.7337 21.494C44.8377 21.602 44.9857 21.656 45.1777 21.656C45.3697 21.656 45.5177 21.602 45.6217 21.494C45.7257 21.382 45.7777 21.236 45.7777 21.056V16.4H47.2777V23H45.7777V21.992L46.0417 22.34C45.9177 22.596 45.7397 22.796 45.5077 22.94C45.2797 23.084 44.9977 23.156 44.6617 23.156ZM49.4244 23V15.62H48.1044V14H52.3644V15.62H51.0444V23H49.4244ZM54.482 23.156C54.222 23.156 53.97 23.098 53.726 22.982C53.486 22.866 53.288 22.658 53.132 22.358C52.976 22.054 52.898 21.62 52.898 21.056V16.4H54.398V21.056C54.398 21.236 54.45 21.382 54.554 21.494C54.658 21.602 54.806 21.656 54.998 21.656C55.19 21.656 55.338 21.602 55.442 21.494C55.546 21.382 55.598 21.236 55.598 21.056V16.4H57.098V23H55.598V21.992L55.862 22.34C55.738 22.596 55.56 22.796 55.328 22.94C55.1 23.084 54.818 23.156 54.482 23.156ZM61.1287 23.156C60.7927 23.156 60.5107 23.084 60.2827 22.94C60.0547 22.796 59.8767 22.596 59.7487 22.34L60.0127 21.992V23H58.5127V14H60.0127V17.408L59.7487 17.06C59.8767 16.8 60.0547 16.6 60.2827 16.46C60.5107 16.316 60.7927 16.244 61.1287 16.244C61.3887 16.244 61.6387 16.302 61.8787 16.418C62.1227 16.53 62.3227 16.738 62.4787 17.042C62.6347 17.346 62.7127 17.78 62.7127 18.344V21.056C62.7127 21.62 62.6347 22.054 62.4787 22.358C62.3227 22.658 62.1227 22.866 61.8787 22.982C61.6387 23.098 61.3887 23.156 61.1287 23.156ZM60.6127 21.656C60.8047 21.656 60.9527 21.602 61.0567 21.494C61.1607 21.382 61.2127 21.236 61.2127 21.056V18.344C61.2127 18.164 61.1607 18.02 61.0567 17.912C60.9527 17.8 60.8047 17.744 60.6127 17.744C60.4207 17.744 60.2727 17.8 60.1687 17.912C60.0647 18.02 60.0127 18.164 60.0127 18.344V21.056C60.0127 21.236 60.0647 21.382 60.1687 21.494C60.2727 21.602 60.4207 21.656 60.6127 21.656ZM65.9168 23.156C65.4888 23.156 65.1168 23.064 64.8008 22.88C64.4888 22.692 64.2468 22.432 64.0748 22.1C63.9028 21.768 63.8168 21.38 63.8168 20.936V18.464C63.8168 18.02 63.9028 17.632 64.0748 17.3C64.2468 16.964 64.4888 16.704 64.8008 16.52C65.1168 16.336 65.4888 16.244 65.9168 16.244C66.5608 16.244 67.0708 16.448 67.4468 16.856C67.8268 17.26 68.0168 17.796 68.0168 18.464V20.084H65.1248V18.704H66.5168V18.344C66.5168 18.164 66.4648 18.02 66.3608 17.912C66.2568 17.8 66.1088 17.744 65.9168 17.744C65.7248 17.744 65.5768 17.8 65.4728 17.912C65.3688 18.02 65.3168 18.164 65.3168 18.344V21.056C65.3168 21.236 65.3688 21.382 65.4728 21.494C65.5768 21.602 65.7248 21.656 65.9168 21.656C66.1088 21.656 66.2568 21.602 66.3608 21.494C66.4648 21.382 66.5168 21.236 66.5168 21.056V20.816H68.0168V20.936C68.0168 21.6 67.8268 22.136 67.4468 22.544C67.0708 22.952 66.5608 23.156 65.9168 23.156ZM72.2627 23V14H74.4827C75.1627 14 75.7027 14.204 76.1027 14.612C76.5027 15.016 76.7027 15.552 76.7027 16.22V17.42C76.7027 18.084 76.5027 18.62 76.1027 19.028C75.7027 19.436 75.1627 19.64 74.4827 19.64H73.8827V23H72.2627ZM73.8827 18.02H74.4827C74.6747 18.02 74.8227 17.966 74.9267 17.858C75.0307 17.746 75.0827 17.6 75.0827 17.42V16.22C75.0827 16.04 75.0307 15.896 74.9267 15.788C74.8227 15.676 74.6747 15.62 74.4827 15.62H73.8827V18.02ZM78.9103 23.156C78.3703 23.156 77.9583 22.988 77.6743 22.652C77.3943 22.312 77.2543 21.882 77.2543 21.362C77.2543 21.062 77.2983 20.808 77.3863 20.6C77.4743 20.392 77.5903 20.218 77.7343 20.078C77.8823 19.934 78.0463 19.812 78.2263 19.712C78.4303 19.596 78.6403 19.5 78.8563 19.424C79.0723 19.344 79.2723 19.266 79.4563 19.19C79.6403 19.11 79.7883 19.014 79.9003 18.902C80.0163 18.79 80.0742 18.644 80.0742 18.464V18.344C80.0742 18.164 80.0223 18.02 79.9183 17.912C79.8143 17.8 79.6663 17.744 79.4743 17.744C79.2823 17.744 79.1343 17.8 79.0303 17.912C78.9263 18.02 78.8743 18.164 78.8743 18.344V18.704H77.3743V18.464C77.3743 17.796 77.5643 17.26 77.9443 16.856C78.3243 16.448 78.8343 16.244 79.4743 16.244C79.9023 16.244 80.2723 16.336 80.5843 16.52C80.9003 16.704 81.1443 16.964 81.3163 17.3C81.4883 17.632 81.5743 18.02 81.5743 18.464V23H80.0742V21.968L80.3383 22.304C80.2143 22.58 80.0283 22.792 79.7803 22.94C79.5363 23.084 79.2463 23.156 78.9103 23.156ZM79.4023 21.776C79.5703 21.776 79.7243 21.726 79.8643 21.626C80.0043 21.526 80.0742 21.348 80.0742 21.092V20.168C79.9703 20.26 79.8423 20.332 79.6903 20.384C79.5383 20.432 79.3823 20.496 79.2223 20.576C79.0623 20.652 78.9443 20.738 78.8683 20.834C78.7923 20.926 78.7543 21.04 78.7543 21.176C78.7543 21.332 78.8083 21.472 78.9163 21.596C79.0243 21.716 79.1863 21.776 79.4023 21.776ZM82.8994 23V16.4H84.3994V17.48L84.1234 17.156C84.2554 16.872 84.4414 16.662 84.6814 16.526C84.9214 16.386 85.1994 16.316 85.5154 16.316H85.8154V17.816H84.9994C84.8074 17.816 84.6594 17.86 84.5554 17.948C84.4514 18.032 84.3994 18.164 84.3994 18.344V23H82.8994ZM88.9805 23.084C88.3405 23.084 87.8305 22.9 87.4505 22.532C87.0705 22.164 86.8805 21.648 86.8805 20.984V17.78H85.8005V16.4H86.8805V14.84H88.3805V16.4H89.6405V17.78H88.3805V20.984C88.3805 21.164 88.4325 21.31 88.5365 21.422C88.6405 21.53 88.7885 21.584 88.9805 21.584H89.6405V23.084H88.9805ZM91.1381 25.16L91.7141 23L89.9021 16.4H91.5341L92.6501 21.14H92.3261L93.3941 16.4H95.0261L92.6501 25.16H91.1381ZM98.7705 23V14H100.991C101.671 14 102.211 14.204 102.611 14.612C103.011 15.016 103.211 15.552 103.211 16.22V20.78C103.211 21.444 103.011 21.98 102.611 22.388C102.211 22.796 101.671 23 100.991 23H98.7705ZM100.391 21.38H100.991C101.183 21.38 101.331 21.326 101.435 21.218C101.539 21.106 101.591 20.96 101.591 20.78V16.22C101.591 16.04 101.539 15.896 101.435 15.788C101.331 15.676 101.183 15.62 100.991 15.62H100.391V21.38ZM104.014 23.084V21.464H104.83C105.022 21.464 105.17 21.41 105.274 21.302C105.378 21.19 105.43 21.044 105.43 20.864V14H107.05V20.864C107.05 21.528 106.85 22.064 106.45 22.472C106.05 22.88 105.51 23.084 104.83 23.084H104.014Z" fill="black"/> 3 + <rect y="9" width="28" height="19" rx="5" fill="#F43F5E"/> 4 + <path d="M18 18.5L11.25 22.3971L11.25 14.6029L18 18.5Z" fill="white"/> 5 + <rect x="12.3947" width="19.8041" height="18.8435" transform="rotate(37.2075 12.3947 0)" fill="url(#pattern0_1_43)"/> 6 + <defs> 7 + <pattern id="pattern0_1_43" patternContentUnits="objectBoundingBox" width="1" height="1"> 8 + <use xlink:href="#image0_1_43" transform="matrix(0.00213339 0 0 0.00224215 -0.0216149 0)"/> 9 + </pattern> 10 + <image id="image0_1_43" width="489" height="446" xlink:href="data:image/png;base64,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"/> 11 + </defs> 12 + </svg>
+12
youtube-party-dj-yunus-light-darkmodebutton/common/rsc/logo_white.svg
··· 1 + <svg width="108" height="28" viewBox="0 0 108 28" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 2 + <path d="M33.92 23V18.92L32.036 14H33.692L34.964 17.804H34.508L35.744 14H37.4L35.54 18.92V23H33.92ZM39.8191 23.156C39.3911 23.156 39.0191 23.064 38.7031 22.88C38.3911 22.692 38.1491 22.432 37.9771 22.1C37.8051 21.768 37.7191 21.38 37.7191 20.936V18.464C37.7191 18.02 37.8051 17.632 37.9771 17.3C38.1491 16.964 38.3911 16.704 38.7031 16.52C39.0191 16.336 39.3911 16.244 39.8191 16.244C40.4631 16.244 40.9731 16.448 41.3491 16.856C41.7291 17.26 41.9191 17.796 41.9191 18.464V20.936C41.9191 21.6 41.7291 22.136 41.3491 22.544C40.9731 22.952 40.4631 23.156 39.8191 23.156ZM39.8191 21.656C40.0111 21.656 40.1591 21.602 40.2631 21.494C40.3671 21.382 40.4191 21.236 40.4191 21.056V18.344C40.4191 18.164 40.3671 18.02 40.2631 17.912C40.1591 17.8 40.0111 17.744 39.8191 17.744C39.6271 17.744 39.4791 17.8 39.3751 17.912C39.2711 18.02 39.2191 18.164 39.2191 18.344V21.056C39.2191 21.236 39.2711 21.382 39.3751 21.494C39.4791 21.602 39.6271 21.656 39.8191 21.656ZM44.6617 23.156C44.4017 23.156 44.1497 23.098 43.9057 22.982C43.6657 22.866 43.4677 22.658 43.3117 22.358C43.1557 22.054 43.0777 21.62 43.0777 21.056V16.4H44.5777V21.056C44.5777 21.236 44.6297 21.382 44.7337 21.494C44.8377 21.602 44.9857 21.656 45.1777 21.656C45.3697 21.656 45.5177 21.602 45.6217 21.494C45.7257 21.382 45.7777 21.236 45.7777 21.056V16.4H47.2777V23H45.7777V21.992L46.0417 22.34C45.9177 22.596 45.7397 22.796 45.5077 22.94C45.2797 23.084 44.9977 23.156 44.6617 23.156ZM49.4244 23V15.62H48.1044V14H52.3644V15.62H51.0444V23H49.4244ZM54.482 23.156C54.222 23.156 53.97 23.098 53.726 22.982C53.486 22.866 53.288 22.658 53.132 22.358C52.976 22.054 52.898 21.62 52.898 21.056V16.4H54.398V21.056C54.398 21.236 54.45 21.382 54.554 21.494C54.658 21.602 54.806 21.656 54.998 21.656C55.19 21.656 55.338 21.602 55.442 21.494C55.546 21.382 55.598 21.236 55.598 21.056V16.4H57.098V23H55.598V21.992L55.862 22.34C55.738 22.596 55.56 22.796 55.328 22.94C55.1 23.084 54.818 23.156 54.482 23.156ZM61.1287 23.156C60.7927 23.156 60.5107 23.084 60.2827 22.94C60.0547 22.796 59.8767 22.596 59.7487 22.34L60.0127 21.992V23H58.5127V14H60.0127V17.408L59.7487 17.06C59.8767 16.8 60.0547 16.6 60.2827 16.46C60.5107 16.316 60.7927 16.244 61.1287 16.244C61.3887 16.244 61.6387 16.302 61.8787 16.418C62.1227 16.53 62.3227 16.738 62.4787 17.042C62.6347 17.346 62.7127 17.78 62.7127 18.344V21.056C62.7127 21.62 62.6347 22.054 62.4787 22.358C62.3227 22.658 62.1227 22.866 61.8787 22.982C61.6387 23.098 61.3887 23.156 61.1287 23.156ZM60.6127 21.656C60.8047 21.656 60.9527 21.602 61.0567 21.494C61.1607 21.382 61.2127 21.236 61.2127 21.056V18.344C61.2127 18.164 61.1607 18.02 61.0567 17.912C60.9527 17.8 60.8047 17.744 60.6127 17.744C60.4207 17.744 60.2727 17.8 60.1687 17.912C60.0647 18.02 60.0127 18.164 60.0127 18.344V21.056C60.0127 21.236 60.0647 21.382 60.1687 21.494C60.2727 21.602 60.4207 21.656 60.6127 21.656ZM65.9168 23.156C65.4888 23.156 65.1168 23.064 64.8008 22.88C64.4888 22.692 64.2468 22.432 64.0748 22.1C63.9028 21.768 63.8168 21.38 63.8168 20.936V18.464C63.8168 18.02 63.9028 17.632 64.0748 17.3C64.2468 16.964 64.4888 16.704 64.8008 16.52C65.1168 16.336 65.4888 16.244 65.9168 16.244C66.5608 16.244 67.0708 16.448 67.4468 16.856C67.8268 17.26 68.0168 17.796 68.0168 18.464V20.084H65.1248V18.704H66.5168V18.344C66.5168 18.164 66.4648 18.02 66.3608 17.912C66.2568 17.8 66.1088 17.744 65.9168 17.744C65.7248 17.744 65.5768 17.8 65.4728 17.912C65.3688 18.02 65.3168 18.164 65.3168 18.344V21.056C65.3168 21.236 65.3688 21.382 65.4728 21.494C65.5768 21.602 65.7248 21.656 65.9168 21.656C66.1088 21.656 66.2568 21.602 66.3608 21.494C66.4648 21.382 66.5168 21.236 66.5168 21.056V20.816H68.0168V20.936C68.0168 21.6 67.8268 22.136 67.4468 22.544C67.0708 22.952 66.5608 23.156 65.9168 23.156ZM72.2627 23V14H74.4827C75.1627 14 75.7027 14.204 76.1027 14.612C76.5027 15.016 76.7027 15.552 76.7027 16.22V17.42C76.7027 18.084 76.5027 18.62 76.1027 19.028C75.7027 19.436 75.1627 19.64 74.4827 19.64H73.8827V23H72.2627ZM73.8827 18.02H74.4827C74.6747 18.02 74.8227 17.966 74.9267 17.858C75.0307 17.746 75.0827 17.6 75.0827 17.42V16.22C75.0827 16.04 75.0307 15.896 74.9267 15.788C74.8227 15.676 74.6747 15.62 74.4827 15.62H73.8827V18.02ZM78.9103 23.156C78.3703 23.156 77.9583 22.988 77.6743 22.652C77.3943 22.312 77.2543 21.882 77.2543 21.362C77.2543 21.062 77.2983 20.808 77.3863 20.6C77.4743 20.392 77.5903 20.218 77.7343 20.078C77.8823 19.934 78.0463 19.812 78.2263 19.712C78.4303 19.596 78.6403 19.5 78.8563 19.424C79.0723 19.344 79.2723 19.266 79.4563 19.19C79.6403 19.11 79.7883 19.014 79.9003 18.902C80.0163 18.79 80.0742 18.644 80.0742 18.464V18.344C80.0742 18.164 80.0223 18.02 79.9183 17.912C79.8143 17.8 79.6663 17.744 79.4743 17.744C79.2823 17.744 79.1343 17.8 79.0303 17.912C78.9263 18.02 78.8743 18.164 78.8743 18.344V18.704H77.3743V18.464C77.3743 17.796 77.5643 17.26 77.9443 16.856C78.3243 16.448 78.8343 16.244 79.4743 16.244C79.9023 16.244 80.2723 16.336 80.5843 16.52C80.9003 16.704 81.1443 16.964 81.3163 17.3C81.4883 17.632 81.5743 18.02 81.5743 18.464V23H80.0742V21.968L80.3383 22.304C80.2143 22.58 80.0283 22.792 79.7803 22.94C79.5363 23.084 79.2463 23.156 78.9103 23.156ZM79.4023 21.776C79.5703 21.776 79.7243 21.726 79.8643 21.626C80.0043 21.526 80.0742 21.348 80.0742 21.092V20.168C79.9703 20.26 79.8423 20.332 79.6903 20.384C79.5383 20.432 79.3823 20.496 79.2223 20.576C79.0623 20.652 78.9443 20.738 78.8683 20.834C78.7923 20.926 78.7543 21.04 78.7543 21.176C78.7543 21.332 78.8083 21.472 78.9163 21.596C79.0243 21.716 79.1863 21.776 79.4023 21.776ZM82.8994 23V16.4H84.3994V17.48L84.1234 17.156C84.2554 16.872 84.4414 16.662 84.6814 16.526C84.9214 16.386 85.1994 16.316 85.5154 16.316H85.8154V17.816H84.9994C84.8074 17.816 84.6594 17.86 84.5554 17.948C84.4514 18.032 84.3994 18.164 84.3994 18.344V23H82.8994ZM88.9805 23.084C88.3405 23.084 87.8305 22.9 87.4505 22.532C87.0705 22.164 86.8805 21.648 86.8805 20.984V17.78H85.8005V16.4H86.8805V14.84H88.3805V16.4H89.6405V17.78H88.3805V20.984C88.3805 21.164 88.4325 21.31 88.5365 21.422C88.6405 21.53 88.7885 21.584 88.9805 21.584H89.6405V23.084H88.9805ZM91.1381 25.16L91.7141 23L89.9021 16.4H91.5341L92.6501 21.14H92.3261L93.3941 16.4H95.0261L92.6501 25.16H91.1381ZM98.7705 23V14H100.991C101.671 14 102.211 14.204 102.611 14.612C103.011 15.016 103.211 15.552 103.211 16.22V20.78C103.211 21.444 103.011 21.98 102.611 22.388C102.211 22.796 101.671 23 100.991 23H98.7705ZM100.391 21.38H100.991C101.183 21.38 101.331 21.326 101.435 21.218C101.539 21.106 101.591 20.96 101.591 20.78V16.22C101.591 16.04 101.539 15.896 101.435 15.788C101.331 15.676 101.183 15.62 100.991 15.62H100.391V21.38ZM104.014 23.084V21.464H104.83C105.022 21.464 105.17 21.41 105.274 21.302C105.378 21.19 105.43 21.044 105.43 20.864V14H107.05V20.864C107.05 21.528 106.85 22.064 106.45 22.472C106.05 22.88 105.51 23.084 104.83 23.084H104.014Z" fill="white"/> 3 + <rect y="9" width="28" height="19" rx="5" fill="#F43F5E"/> 4 + <path d="M18 18.5L11.25 22.3971L11.25 14.6029L18 18.5Z" fill="white"/> 5 + <rect x="12.3933" width="20.7559" height="18.84" transform="rotate(37.21 12.3933 0)" fill="url(#pattern0_1_65)"/> 6 + <defs> 7 + <pattern id="pattern0_1_65" patternContentUnits="objectBoundingBox" width="1" height="1"> 8 + <use xlink:href="#image0_1_65" transform="matrix(0.00204499 0 0 0.00225295 0 -0.00240892)"/> 9 + </pattern> 10 + <image id="image0_1_65" width="489" height="446" xlink:href="data:image/png;base64,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"/> 11 + </defs> 12 + </svg>
+20
youtube-party-dj-yunus-light-darkmodebutton/common/theme.tsx
··· 1 + import { UIX } from "uix"; 2 + 3 + // register a new theme 4 + UIX.Theme.registerTheme({ 5 + name: 'no-more-css-theme', 6 + mode: undefined, 7 + values: { 8 + 'bg': 'white', 9 + 'text': 'black' 10 + }, 11 + stylesheets: [], 12 + onActivate() { 13 + console.log('Theme activated!'); 14 + }, 15 + onDeactivate() { 16 + console.log('Theme deactivated!'); 17 + } 18 + }) 19 + 20 + UIX.Theme.useThemes("no-more-css-theme")
+12
youtube-party-dj-yunus-light-darkmodebutton/deno.json
··· 1 + { 2 + "_publicImportMap": "./importmap.json", 3 + "importMap": "./.datex-cache\\importmap.lock.json", 4 + "compilerOptions": { 5 + "jsx": "react-jsx", 6 + "jsxImportSource": "uix", 7 + "lib": [ 8 + "deno.window", 9 + "dom" 10 + ] 11 + } 12 + }
+1467
youtube-party-dj-yunus-light-darkmodebutton/frontend/entrypoint.css
··· 1 + /* 2 + ! tailwindcss v3.4.4 | MIT License | https://tailwindcss.com 3 + */ 4 + 5 + /* 6 + 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 7 + 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) 8 + */ 9 + 10 + *, 11 + ::before, 12 + ::after { 13 + box-sizing: border-box; 14 + /* 1 */ 15 + border-width: 0; 16 + /* 2 */ 17 + border-style: solid; 18 + /* 2 */ 19 + border-color: #e5e7eb; 20 + /* 2 */ 21 + } 22 + 23 + ::before, 24 + ::after { 25 + --tw-content: ''; 26 + } 27 + 28 + /* 29 + 1. Use a consistent sensible line-height in all browsers. 30 + 2. Prevent adjustments of font size after orientation changes in iOS. 31 + 3. Use a more readable tab size. 32 + 4. Use the user's configured `sans` font-family by default. 33 + 5. Use the user's configured `sans` font-feature-settings by default. 34 + 6. Use the user's configured `sans` font-variation-settings by default. 35 + 7. Disable tap highlights on iOS 36 + */ 37 + 38 + html, 39 + :host { 40 + line-height: 1.5; 41 + /* 1 */ 42 + -webkit-text-size-adjust: 100%; 43 + /* 2 */ 44 + -moz-tab-size: 4; 45 + /* 3 */ 46 + -o-tab-size: 4; 47 + tab-size: 4; 48 + /* 3 */ 49 + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 50 + /* 4 */ 51 + font-feature-settings: normal; 52 + /* 5 */ 53 + font-variation-settings: normal; 54 + /* 6 */ 55 + -webkit-tap-highlight-color: transparent; 56 + /* 7 */ 57 + } 58 + 59 + /* 60 + 1. Remove the margin in all browsers. 61 + 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. 62 + */ 63 + 64 + body { 65 + margin: 0; 66 + /* 1 */ 67 + line-height: inherit; 68 + /* 2 */ 69 + } 70 + 71 + /* 72 + 1. Add the correct height in Firefox. 73 + 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 74 + 3. Ensure horizontal rules are visible by default. 75 + */ 76 + 77 + hr { 78 + height: 0; 79 + /* 1 */ 80 + color: inherit; 81 + /* 2 */ 82 + border-top-width: 1px; 83 + /* 3 */ 84 + } 85 + 86 + /* 87 + Add the correct text decoration in Chrome, Edge, and Safari. 88 + */ 89 + 90 + abbr:where([title]) { 91 + -webkit-text-decoration: underline dotted; 92 + text-decoration: underline dotted; 93 + } 94 + 95 + /* 96 + Remove the default font size and weight for headings. 97 + */ 98 + 99 + h1, 100 + h2, 101 + h3, 102 + h4, 103 + h5, 104 + h6 { 105 + font-size: inherit; 106 + font-weight: inherit; 107 + } 108 + 109 + /* 110 + Reset links to optimize for opt-in styling instead of opt-out. 111 + */ 112 + 113 + a { 114 + color: inherit; 115 + text-decoration: inherit; 116 + } 117 + 118 + /* 119 + Add the correct font weight in Edge and Safari. 120 + */ 121 + 122 + b, 123 + strong { 124 + font-weight: bolder; 125 + } 126 + 127 + /* 128 + 1. Use the user's configured `mono` font-family by default. 129 + 2. Use the user's configured `mono` font-feature-settings by default. 130 + 3. Use the user's configured `mono` font-variation-settings by default. 131 + 4. Correct the odd `em` font sizing in all browsers. 132 + */ 133 + 134 + code, 135 + kbd, 136 + samp, 137 + pre { 138 + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 139 + /* 1 */ 140 + font-feature-settings: normal; 141 + /* 2 */ 142 + font-variation-settings: normal; 143 + /* 3 */ 144 + font-size: 1em; 145 + /* 4 */ 146 + } 147 + 148 + /* 149 + Add the correct font size in all browsers. 150 + */ 151 + 152 + small { 153 + font-size: 80%; 154 + } 155 + 156 + /* 157 + Prevent `sub` and `sup` elements from affecting the line height in all browsers. 158 + */ 159 + 160 + sub, 161 + sup { 162 + font-size: 75%; 163 + line-height: 0; 164 + position: relative; 165 + vertical-align: baseline; 166 + } 167 + 168 + sub { 169 + bottom: -0.25em; 170 + } 171 + 172 + sup { 173 + top: -0.5em; 174 + } 175 + 176 + /* 177 + 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 178 + 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 179 + 3. Remove gaps between table borders by default. 180 + */ 181 + 182 + table { 183 + text-indent: 0; 184 + /* 1 */ 185 + border-color: inherit; 186 + /* 2 */ 187 + border-collapse: collapse; 188 + /* 3 */ 189 + } 190 + 191 + /* 192 + 1. Change the font styles in all browsers. 193 + 2. Remove the margin in Firefox and Safari. 194 + 3. Remove default padding in all browsers. 195 + */ 196 + 197 + button, 198 + input, 199 + optgroup, 200 + select, 201 + textarea { 202 + font-family: inherit; 203 + /* 1 */ 204 + font-feature-settings: inherit; 205 + /* 1 */ 206 + font-variation-settings: inherit; 207 + /* 1 */ 208 + font-size: 100%; 209 + /* 1 */ 210 + font-weight: inherit; 211 + /* 1 */ 212 + line-height: inherit; 213 + /* 1 */ 214 + letter-spacing: inherit; 215 + /* 1 */ 216 + color: inherit; 217 + /* 1 */ 218 + margin: 0; 219 + /* 2 */ 220 + padding: 0; 221 + /* 3 */ 222 + } 223 + 224 + /* 225 + Remove the inheritance of text transform in Edge and Firefox. 226 + */ 227 + 228 + button, 229 + select { 230 + text-transform: none; 231 + } 232 + 233 + /* 234 + 1. Correct the inability to style clickable types in iOS and Safari. 235 + 2. Remove default button styles. 236 + */ 237 + 238 + button, 239 + input:where([type='button']), 240 + input:where([type='reset']), 241 + input:where([type='submit']) { 242 + -webkit-appearance: button; 243 + /* 1 */ 244 + background-color: transparent; 245 + /* 2 */ 246 + background-image: none; 247 + /* 2 */ 248 + } 249 + 250 + /* 251 + Use the modern Firefox focus style for all focusable elements. 252 + */ 253 + 254 + :-moz-focusring { 255 + outline: auto; 256 + } 257 + 258 + /* 259 + Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) 260 + */ 261 + 262 + :-moz-ui-invalid { 263 + box-shadow: none; 264 + } 265 + 266 + /* 267 + Add the correct vertical alignment in Chrome and Firefox. 268 + */ 269 + 270 + progress { 271 + vertical-align: baseline; 272 + } 273 + 274 + /* 275 + Correct the cursor style of increment and decrement buttons in Safari. 276 + */ 277 + 278 + ::-webkit-inner-spin-button, 279 + ::-webkit-outer-spin-button { 280 + height: auto; 281 + } 282 + 283 + /* 284 + 1. Correct the odd appearance in Chrome and Safari. 285 + 2. Correct the outline style in Safari. 286 + */ 287 + 288 + [type='search'] { 289 + -webkit-appearance: textfield; 290 + /* 1 */ 291 + outline-offset: -2px; 292 + /* 2 */ 293 + } 294 + 295 + /* 296 + Remove the inner padding in Chrome and Safari on macOS. 297 + */ 298 + 299 + ::-webkit-search-decoration { 300 + -webkit-appearance: none; 301 + } 302 + 303 + /* 304 + 1. Correct the inability to style clickable types in iOS and Safari. 305 + 2. Change font properties to `inherit` in Safari. 306 + */ 307 + 308 + ::-webkit-file-upload-button { 309 + -webkit-appearance: button; 310 + /* 1 */ 311 + font: inherit; 312 + /* 2 */ 313 + } 314 + 315 + /* 316 + Add the correct display in Chrome and Safari. 317 + */ 318 + 319 + summary { 320 + display: list-item; 321 + } 322 + 323 + /* 324 + Removes the default spacing and border for appropriate elements. 325 + */ 326 + 327 + blockquote, 328 + dl, 329 + dd, 330 + h1, 331 + h2, 332 + h3, 333 + h4, 334 + h5, 335 + h6, 336 + hr, 337 + figure, 338 + p, 339 + pre { 340 + margin: 0; 341 + } 342 + 343 + fieldset { 344 + margin: 0; 345 + padding: 0; 346 + } 347 + 348 + legend { 349 + padding: 0; 350 + } 351 + 352 + ol, 353 + ul, 354 + menu { 355 + list-style: none; 356 + margin: 0; 357 + padding: 0; 358 + } 359 + 360 + /* 361 + Reset default styling for dialogs. 362 + */ 363 + 364 + dialog { 365 + padding: 0; 366 + } 367 + 368 + /* 369 + Prevent resizing textareas horizontally by default. 370 + */ 371 + 372 + textarea { 373 + resize: vertical; 374 + } 375 + 376 + /* 377 + 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 378 + 2. Set the default placeholder color to the user's configured gray 400 color. 379 + */ 380 + 381 + input::-moz-placeholder, textarea::-moz-placeholder { 382 + opacity: 1; 383 + /* 1 */ 384 + color: #9ca3af; 385 + /* 2 */ 386 + } 387 + 388 + input::placeholder, 389 + textarea::placeholder { 390 + opacity: 1; 391 + /* 1 */ 392 + color: #9ca3af; 393 + /* 2 */ 394 + } 395 + 396 + /* 397 + Set the default cursor for buttons. 398 + */ 399 + 400 + button, 401 + [role="button"] { 402 + cursor: pointer; 403 + } 404 + 405 + /* 406 + Make sure disabled buttons don't get the pointer cursor. 407 + */ 408 + 409 + :disabled { 410 + cursor: default; 411 + } 412 + 413 + /* 414 + 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 415 + 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) 416 + This can trigger a poorly considered lint error in some tools but is included by design. 417 + */ 418 + 419 + img, 420 + svg, 421 + video, 422 + canvas, 423 + audio, 424 + iframe, 425 + embed, 426 + object { 427 + display: block; 428 + /* 1 */ 429 + vertical-align: middle; 430 + /* 2 */ 431 + } 432 + 433 + /* 434 + Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) 435 + */ 436 + 437 + img, 438 + video { 439 + max-width: 100%; 440 + height: auto; 441 + } 442 + 443 + /* Make elements with the HTML hidden attribute stay hidden by default */ 444 + 445 + [hidden] { 446 + display: none; 447 + } 448 + 449 + [type='text'],input:where(:not([type])),[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select { 450 + -webkit-appearance: none; 451 + -moz-appearance: none; 452 + appearance: none; 453 + background-color: #fff; 454 + border-color: #6b7280; 455 + border-width: 1px; 456 + border-radius: 0px; 457 + padding-top: 0.5rem; 458 + padding-right: 0.75rem; 459 + padding-bottom: 0.5rem; 460 + padding-left: 0.75rem; 461 + font-size: 1rem; 462 + line-height: 1.5rem; 463 + --tw-shadow: 0 0 #0000; 464 + } 465 + 466 + [type='text']:focus, input:where(:not([type])):focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus { 467 + outline: 2px solid transparent; 468 + outline-offset: 2px; 469 + --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); 470 + --tw-ring-offset-width: 0px; 471 + --tw-ring-offset-color: #fff; 472 + --tw-ring-color: #2563eb; 473 + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); 474 + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); 475 + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); 476 + border-color: #2563eb; 477 + } 478 + 479 + input::-moz-placeholder, textarea::-moz-placeholder { 480 + color: #6b7280; 481 + opacity: 1; 482 + } 483 + 484 + input::placeholder,textarea::placeholder { 485 + color: #6b7280; 486 + opacity: 1; 487 + } 488 + 489 + ::-webkit-datetime-edit-fields-wrapper { 490 + padding: 0; 491 + } 492 + 493 + ::-webkit-date-and-time-value { 494 + min-height: 1.5em; 495 + text-align: inherit; 496 + } 497 + 498 + ::-webkit-datetime-edit { 499 + display: inline-flex; 500 + } 501 + 502 + ::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field { 503 + padding-top: 0; 504 + padding-bottom: 0; 505 + } 506 + 507 + select { 508 + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e"); 509 + background-position: right 0.5rem center; 510 + background-repeat: no-repeat; 511 + background-size: 1.5em 1.5em; 512 + padding-right: 2.5rem; 513 + -webkit-print-color-adjust: exact; 514 + print-color-adjust: exact; 515 + } 516 + 517 + [multiple],[size]:where(select:not([size="1"])) { 518 + background-image: initial; 519 + background-position: initial; 520 + background-repeat: unset; 521 + background-size: initial; 522 + padding-right: 0.75rem; 523 + -webkit-print-color-adjust: unset; 524 + print-color-adjust: unset; 525 + } 526 + 527 + [type='checkbox'],[type='radio'] { 528 + -webkit-appearance: none; 529 + -moz-appearance: none; 530 + appearance: none; 531 + padding: 0; 532 + -webkit-print-color-adjust: exact; 533 + print-color-adjust: exact; 534 + display: inline-block; 535 + vertical-align: middle; 536 + background-origin: border-box; 537 + -webkit-user-select: none; 538 + -moz-user-select: none; 539 + user-select: none; 540 + flex-shrink: 0; 541 + height: 1rem; 542 + width: 1rem; 543 + color: #2563eb; 544 + background-color: #fff; 545 + border-color: #6b7280; 546 + border-width: 1px; 547 + --tw-shadow: 0 0 #0000; 548 + } 549 + 550 + [type='checkbox'] { 551 + border-radius: 0px; 552 + } 553 + 554 + [type='radio'] { 555 + border-radius: 100%; 556 + } 557 + 558 + [type='checkbox']:focus,[type='radio']:focus { 559 + outline: 2px solid transparent; 560 + outline-offset: 2px; 561 + --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); 562 + --tw-ring-offset-width: 2px; 563 + --tw-ring-offset-color: #fff; 564 + --tw-ring-color: #2563eb; 565 + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); 566 + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); 567 + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); 568 + } 569 + 570 + [type='checkbox']:checked,[type='radio']:checked { 571 + border-color: transparent; 572 + background-color: currentColor; 573 + background-size: 100% 100%; 574 + background-position: center; 575 + background-repeat: no-repeat; 576 + } 577 + 578 + [type='checkbox']:checked { 579 + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e"); 580 + } 581 + 582 + @media (forced-colors: active) { 583 + [type='checkbox']:checked { 584 + -webkit-appearance: auto; 585 + -moz-appearance: auto; 586 + appearance: auto; 587 + } 588 + } 589 + 590 + [type='radio']:checked { 591 + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e"); 592 + } 593 + 594 + @media (forced-colors: active) { 595 + [type='radio']:checked { 596 + -webkit-appearance: auto; 597 + -moz-appearance: auto; 598 + appearance: auto; 599 + } 600 + } 601 + 602 + [type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus { 603 + border-color: transparent; 604 + background-color: currentColor; 605 + } 606 + 607 + [type='checkbox']:indeterminate { 608 + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e"); 609 + border-color: transparent; 610 + background-color: currentColor; 611 + background-size: 100% 100%; 612 + background-position: center; 613 + background-repeat: no-repeat; 614 + } 615 + 616 + @media (forced-colors: active) { 617 + [type='checkbox']:indeterminate { 618 + -webkit-appearance: auto; 619 + -moz-appearance: auto; 620 + appearance: auto; 621 + } 622 + } 623 + 624 + [type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus { 625 + border-color: transparent; 626 + background-color: currentColor; 627 + } 628 + 629 + [type='file'] { 630 + background: unset; 631 + border-color: inherit; 632 + border-width: 0; 633 + border-radius: 0; 634 + padding: 0; 635 + font-size: unset; 636 + line-height: inherit; 637 + } 638 + 639 + [type='file']:focus { 640 + outline: 1px solid ButtonText; 641 + outline: 1px auto -webkit-focus-ring-color; 642 + } 643 + 644 + *, ::before, ::after { 645 + --tw-border-spacing-x: 0; 646 + --tw-border-spacing-y: 0; 647 + --tw-translate-x: 0; 648 + --tw-translate-y: 0; 649 + --tw-rotate: 0; 650 + --tw-skew-x: 0; 651 + --tw-skew-y: 0; 652 + --tw-scale-x: 1; 653 + --tw-scale-y: 1; 654 + --tw-pan-x: ; 655 + --tw-pan-y: ; 656 + --tw-pinch-zoom: ; 657 + --tw-scroll-snap-strictness: proximity; 658 + --tw-gradient-from-position: ; 659 + --tw-gradient-via-position: ; 660 + --tw-gradient-to-position: ; 661 + --tw-ordinal: ; 662 + --tw-slashed-zero: ; 663 + --tw-numeric-figure: ; 664 + --tw-numeric-spacing: ; 665 + --tw-numeric-fraction: ; 666 + --tw-ring-inset: ; 667 + --tw-ring-offset-width: 0px; 668 + --tw-ring-offset-color: #fff; 669 + --tw-ring-color: rgb(59 130 246 / 0.5); 670 + --tw-ring-offset-shadow: 0 0 #0000; 671 + --tw-ring-shadow: 0 0 #0000; 672 + --tw-shadow: 0 0 #0000; 673 + --tw-shadow-colored: 0 0 #0000; 674 + --tw-blur: ; 675 + --tw-brightness: ; 676 + --tw-contrast: ; 677 + --tw-grayscale: ; 678 + --tw-hue-rotate: ; 679 + --tw-invert: ; 680 + --tw-saturate: ; 681 + --tw-sepia: ; 682 + --tw-drop-shadow: ; 683 + --tw-backdrop-blur: ; 684 + --tw-backdrop-brightness: ; 685 + --tw-backdrop-contrast: ; 686 + --tw-backdrop-grayscale: ; 687 + --tw-backdrop-hue-rotate: ; 688 + --tw-backdrop-invert: ; 689 + --tw-backdrop-opacity: ; 690 + --tw-backdrop-saturate: ; 691 + --tw-backdrop-sepia: ; 692 + --tw-contain-size: ; 693 + --tw-contain-layout: ; 694 + --tw-contain-paint: ; 695 + --tw-contain-style: ; 696 + } 697 + 698 + ::backdrop { 699 + --tw-border-spacing-x: 0; 700 + --tw-border-spacing-y: 0; 701 + --tw-translate-x: 0; 702 + --tw-translate-y: 0; 703 + --tw-rotate: 0; 704 + --tw-skew-x: 0; 705 + --tw-skew-y: 0; 706 + --tw-scale-x: 1; 707 + --tw-scale-y: 1; 708 + --tw-pan-x: ; 709 + --tw-pan-y: ; 710 + --tw-pinch-zoom: ; 711 + --tw-scroll-snap-strictness: proximity; 712 + --tw-gradient-from-position: ; 713 + --tw-gradient-via-position: ; 714 + --tw-gradient-to-position: ; 715 + --tw-ordinal: ; 716 + --tw-slashed-zero: ; 717 + --tw-numeric-figure: ; 718 + --tw-numeric-spacing: ; 719 + --tw-numeric-fraction: ; 720 + --tw-ring-inset: ; 721 + --tw-ring-offset-width: 0px; 722 + --tw-ring-offset-color: #fff; 723 + --tw-ring-color: rgb(59 130 246 / 0.5); 724 + --tw-ring-offset-shadow: 0 0 #0000; 725 + --tw-ring-shadow: 0 0 #0000; 726 + --tw-shadow: 0 0 #0000; 727 + --tw-shadow-colored: 0 0 #0000; 728 + --tw-blur: ; 729 + --tw-brightness: ; 730 + --tw-contrast: ; 731 + --tw-grayscale: ; 732 + --tw-hue-rotate: ; 733 + --tw-invert: ; 734 + --tw-saturate: ; 735 + --tw-sepia: ; 736 + --tw-drop-shadow: ; 737 + --tw-backdrop-blur: ; 738 + --tw-backdrop-brightness: ; 739 + --tw-backdrop-contrast: ; 740 + --tw-backdrop-grayscale: ; 741 + --tw-backdrop-hue-rotate: ; 742 + --tw-backdrop-invert: ; 743 + --tw-backdrop-opacity: ; 744 + --tw-backdrop-saturate: ; 745 + --tw-backdrop-sepia: ; 746 + --tw-contain-size: ; 747 + --tw-contain-layout: ; 748 + --tw-contain-paint: ; 749 + --tw-contain-style: ; 750 + } 751 + 752 + .absolute { 753 + position: absolute; 754 + } 755 + 756 + .relative { 757 + position: relative; 758 + } 759 + 760 + .inset-0 { 761 + inset: 0px; 762 + } 763 + 764 + .inset-y-0 { 765 + top: 0px; 766 + bottom: 0px; 767 + } 768 + 769 + .bottom-2 { 770 + bottom: 0.5rem; 771 + } 772 + 773 + .left-2 { 774 + left: 0.5rem; 775 + } 776 + 777 + .right-0 { 778 + right: 0px; 779 + } 780 + 781 + .right-2 { 782 + right: 0.5rem; 783 + } 784 + 785 + .top-2 { 786 + top: 0.5rem; 787 + } 788 + 789 + .z-10 { 790 + z-index: 10; 791 + } 792 + 793 + .z-20 { 794 + z-index: 20; 795 + } 796 + 797 + .z-\[-5\] { 798 + z-index: -5; 799 + } 800 + 801 + .mx-0 { 802 + margin-left: 0px; 803 + margin-right: 0px; 804 + } 805 + 806 + .mx-auto { 807 + margin-left: auto; 808 + margin-right: auto; 809 + } 810 + 811 + .my-4 { 812 + margin-top: 1rem; 813 + margin-bottom: 1rem; 814 + } 815 + 816 + .mb-2 { 817 + margin-bottom: 0.5rem; 818 + } 819 + 820 + .mb-4 { 821 + margin-bottom: 1rem; 822 + } 823 + 824 + .ml-1 { 825 + margin-left: 0.25rem; 826 + } 827 + 828 + .ml-2 { 829 + margin-left: 0.5rem; 830 + } 831 + 832 + .mr-12 { 833 + margin-right: 3rem; 834 + } 835 + 836 + .mt-4 { 837 + margin-top: 1rem; 838 + } 839 + 840 + .mt-8 { 841 + margin-top: 2rem; 842 + } 843 + 844 + .line-clamp-2 { 845 + overflow: hidden; 846 + display: -webkit-box; 847 + -webkit-box-orient: vertical; 848 + -webkit-line-clamp: 2; 849 + } 850 + 851 + .block { 852 + display: block; 853 + } 854 + 855 + .flex { 856 + display: flex; 857 + } 858 + 859 + .inline-flex { 860 + display: inline-flex; 861 + } 862 + 863 + .grid { 864 + display: grid; 865 + } 866 + 867 + .hidden { 868 + display: none; 869 + } 870 + 871 + .aspect-square { 872 + aspect-ratio: 1 / 1; 873 + } 874 + 875 + .aspect-video { 876 + aspect-ratio: 16 / 9; 877 + } 878 + 879 + .size-14 { 880 + width: 3.5rem; 881 + height: 3.5rem; 882 + } 883 + 884 + .size-16 { 885 + width: 4rem; 886 + height: 4rem; 887 + } 888 + 889 + .size-6 { 890 + width: 1.5rem; 891 + height: 1.5rem; 892 + } 893 + 894 + .size-8 { 895 + width: 2rem; 896 + height: 2rem; 897 + } 898 + 899 + .h-10 { 900 + height: 2.5rem; 901 + } 902 + 903 + .h-12 { 904 + height: 3rem; 905 + } 906 + 907 + .h-20 { 908 + height: 5rem; 909 + } 910 + 911 + .h-80 { 912 + height: 20rem; 913 + } 914 + 915 + .h-full { 916 + height: 100%; 917 + } 918 + 919 + .h-screen { 920 + height: 100vh; 921 + } 922 + 923 + .w-10 { 924 + width: 2.5rem; 925 + } 926 + 927 + .w-20 { 928 + width: 5rem; 929 + } 930 + 931 + .w-3\/4 { 932 + width: 75%; 933 + } 934 + 935 + .w-32 { 936 + width: 8rem; 937 + } 938 + 939 + .w-56 { 940 + width: 14rem; 941 + } 942 + 943 + .w-80 { 944 + width: 20rem; 945 + } 946 + 947 + .w-fit { 948 + width: -moz-fit-content; 949 + width: fit-content; 950 + } 951 + 952 + .w-full { 953 + width: 100%; 954 + } 955 + 956 + .w-screen { 957 + width: 100vw; 958 + } 959 + 960 + .min-w-full { 961 + min-width: 100%; 962 + } 963 + 964 + .max-w-2xl { 965 + max-width: 42rem; 966 + } 967 + 968 + .max-w-\[34rem\] { 969 + max-width: 34rem; 970 + } 971 + 972 + .flex-1 { 973 + flex: 1 1 0%; 974 + } 975 + 976 + .flex-grow { 977 + flex-grow: 1; 978 + } 979 + 980 + .rotate-6 { 981 + --tw-rotate: 6deg; 982 + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); 983 + } 984 + 985 + .cursor-pointer { 986 + cursor: pointer; 987 + } 988 + 989 + .flex-col { 990 + flex-direction: column; 991 + } 992 + 993 + .place-content-center { 994 + place-content: center; 995 + } 996 + 997 + .place-items-center { 998 + place-items: center; 999 + } 1000 + 1001 + .items-center { 1002 + align-items: center; 1003 + } 1004 + 1005 + .justify-end { 1006 + justify-content: flex-end; 1007 + } 1008 + 1009 + .justify-center { 1010 + justify-content: center; 1011 + } 1012 + 1013 + .justify-between { 1014 + justify-content: space-between; 1015 + } 1016 + 1017 + .gap-2 { 1018 + gap: 0.5rem; 1019 + } 1020 + 1021 + .gap-6 { 1022 + gap: 1.5rem; 1023 + } 1024 + 1025 + .space-y-4 > :not([hidden]) ~ :not([hidden]) { 1026 + --tw-space-y-reverse: 0; 1027 + margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); 1028 + margin-bottom: calc(1rem * var(--tw-space-y-reverse)); 1029 + } 1030 + 1031 + .overflow-hidden { 1032 + overflow: hidden; 1033 + } 1034 + 1035 + .overflow-y-hidden { 1036 + overflow-y: hidden; 1037 + } 1038 + 1039 + .overflow-y-scroll { 1040 + overflow-y: scroll; 1041 + } 1042 + 1043 + .rounded-full { 1044 + border-radius: 9999px; 1045 + } 1046 + 1047 + .rounded-lg { 1048 + border-radius: 0.5rem; 1049 + } 1050 + 1051 + .rounded-xl { 1052 + border-radius: 0.75rem; 1053 + } 1054 + 1055 + .border { 1056 + border-width: 1px; 1057 + } 1058 + 1059 + .border-0 { 1060 + border-width: 0px; 1061 + } 1062 + 1063 + .border-4 { 1064 + border-width: 4px; 1065 + } 1066 + 1067 + .border-t { 1068 + border-top-width: 1px; 1069 + } 1070 + 1071 + .border-black { 1072 + --tw-border-opacity: 1; 1073 + border-color: rgb(0 0 0 / var(--tw-border-opacity)); 1074 + } 1075 + 1076 + .border-rose-500 { 1077 + --tw-border-opacity: 1; 1078 + border-color: rgb(244 63 94 / var(--tw-border-opacity)); 1079 + } 1080 + 1081 + .border-white\/10 { 1082 + border-color: rgb(255 255 255 / 0.1); 1083 + } 1084 + 1085 + .border-white\/20 { 1086 + border-color: rgb(255 255 255 / 0.2); 1087 + } 1088 + 1089 + .bg-\[\#1f1f26\] { 1090 + --tw-bg-opacity: 1; 1091 + background-color: rgb(31 31 38 / var(--tw-bg-opacity)); 1092 + } 1093 + 1094 + .bg-black { 1095 + --tw-bg-opacity: 1; 1096 + background-color: rgb(0 0 0 / var(--tw-bg-opacity)); 1097 + } 1098 + 1099 + .bg-rose-300 { 1100 + --tw-bg-opacity: 1; 1101 + background-color: rgb(253 164 175 / var(--tw-bg-opacity)); 1102 + } 1103 + 1104 + .bg-rose-500 { 1105 + --tw-bg-opacity: 1; 1106 + background-color: rgb(244 63 94 / var(--tw-bg-opacity)); 1107 + } 1108 + 1109 + .bg-white { 1110 + --tw-bg-opacity: 1; 1111 + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); 1112 + } 1113 + 1114 + .bg-white\/5 { 1115 + background-color: rgb(255 255 255 / 0.05); 1116 + } 1117 + 1118 + .stroke-black { 1119 + stroke: #000; 1120 + } 1121 + 1122 + .stroke-white { 1123 + stroke: #fff; 1124 + } 1125 + 1126 + .object-cover { 1127 + -o-object-fit: cover; 1128 + object-fit: cover; 1129 + } 1130 + 1131 + .p-12 { 1132 + padding: 3rem; 1133 + } 1134 + 1135 + .p-2 { 1136 + padding: 0.5rem; 1137 + } 1138 + 1139 + .p-4 { 1140 + padding: 1rem; 1141 + } 1142 + 1143 + .p-8 { 1144 + padding: 2rem; 1145 + } 1146 + 1147 + .px-1 { 1148 + padding-left: 0.25rem; 1149 + padding-right: 0.25rem; 1150 + } 1151 + 1152 + .px-12 { 1153 + padding-left: 3rem; 1154 + padding-right: 3rem; 1155 + } 1156 + 1157 + .px-2 { 1158 + padding-left: 0.5rem; 1159 + padding-right: 0.5rem; 1160 + } 1161 + 1162 + .px-4 { 1163 + padding-left: 1rem; 1164 + padding-right: 1rem; 1165 + } 1166 + 1167 + .px-6 { 1168 + padding-left: 1.5rem; 1169 + padding-right: 1.5rem; 1170 + } 1171 + 1172 + .px-8 { 1173 + padding-left: 2rem; 1174 + padding-right: 2rem; 1175 + } 1176 + 1177 + .py-1 { 1178 + padding-top: 0.25rem; 1179 + padding-bottom: 0.25rem; 1180 + } 1181 + 1182 + .py-1\.5 { 1183 + padding-top: 0.375rem; 1184 + padding-bottom: 0.375rem; 1185 + } 1186 + 1187 + .py-3 { 1188 + padding-top: 0.75rem; 1189 + padding-bottom: 0.75rem; 1190 + } 1191 + 1192 + .py-4 { 1193 + padding-top: 1rem; 1194 + padding-bottom: 1rem; 1195 + } 1196 + 1197 + .py-8 { 1198 + padding-top: 2rem; 1199 + padding-bottom: 2rem; 1200 + } 1201 + 1202 + .pl-4 { 1203 + padding-left: 1rem; 1204 + } 1205 + 1206 + .pr-1 { 1207 + padding-right: 0.25rem; 1208 + } 1209 + 1210 + .pr-1\.5 { 1211 + padding-right: 0.375rem; 1212 + } 1213 + 1214 + .pr-14 { 1215 + padding-right: 3.5rem; 1216 + } 1217 + 1218 + .pt-12 { 1219 + padding-top: 3rem; 1220 + } 1221 + 1222 + .pt-32 { 1223 + padding-top: 8rem; 1224 + } 1225 + 1226 + .text-3xl { 1227 + font-size: 1.875rem; 1228 + line-height: 2.25rem; 1229 + } 1230 + 1231 + .text-lg { 1232 + font-size: 1.125rem; 1233 + line-height: 1.75rem; 1234 + } 1235 + 1236 + .text-sm { 1237 + font-size: 0.875rem; 1238 + line-height: 1.25rem; 1239 + } 1240 + 1241 + .text-xl { 1242 + font-size: 1.25rem; 1243 + line-height: 1.75rem; 1244 + } 1245 + 1246 + .text-xs { 1247 + font-size: 0.75rem; 1248 + line-height: 1rem; 1249 + } 1250 + 1251 + .font-bold { 1252 + font-weight: 700; 1253 + } 1254 + 1255 + .font-medium { 1256 + font-weight: 500; 1257 + } 1258 + 1259 + .font-semibold { 1260 + font-weight: 600; 1261 + } 1262 + 1263 + .uppercase { 1264 + text-transform: uppercase; 1265 + } 1266 + 1267 + .leading-6 { 1268 + line-height: 1.5rem; 1269 + } 1270 + 1271 + .leading-tight { 1272 + line-height: 1.25; 1273 + } 1274 + 1275 + .text-black { 1276 + --tw-text-opacity: 1; 1277 + color: rgb(0 0 0 / var(--tw-text-opacity)); 1278 + } 1279 + 1280 + .text-blue-500 { 1281 + --tw-text-opacity: 1; 1282 + color: rgb(59 130 246 / var(--tw-text-opacity)); 1283 + } 1284 + 1285 + .text-rose-200 { 1286 + --tw-text-opacity: 1; 1287 + color: rgb(254 205 211 / var(--tw-text-opacity)); 1288 + } 1289 + 1290 + .text-rose-500 { 1291 + --tw-text-opacity: 1; 1292 + color: rgb(244 63 94 / var(--tw-text-opacity)); 1293 + } 1294 + 1295 + .text-white { 1296 + --tw-text-opacity: 1; 1297 + color: rgb(255 255 255 / var(--tw-text-opacity)); 1298 + } 1299 + 1300 + .shadow-sm { 1301 + --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); 1302 + --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); 1303 + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 1304 + } 1305 + 1306 + .outline-none { 1307 + outline: 2px solid transparent; 1308 + outline-offset: 2px; 1309 + } 1310 + 1311 + .ring-1 { 1312 + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); 1313 + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); 1314 + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); 1315 + } 1316 + 1317 + .ring-inset { 1318 + --tw-ring-inset: inset; 1319 + } 1320 + 1321 + .ring-black { 1322 + --tw-ring-opacity: 1; 1323 + --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity)); 1324 + } 1325 + 1326 + .filter { 1327 + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); 1328 + } 1329 + 1330 + .backdrop-blur { 1331 + --tw-backdrop-blur: blur(8px); 1332 + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); 1333 + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); 1334 + } 1335 + 1336 + .backdrop-blur-md { 1337 + --tw-backdrop-blur: blur(12px); 1338 + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); 1339 + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); 1340 + } 1341 + 1342 + body { 1343 + background-color: #1a191f; 1344 + } 1345 + 1346 + .placeholder\:text-black::-moz-placeholder { 1347 + --tw-text-opacity: 1; 1348 + color: rgb(0 0 0 / var(--tw-text-opacity)); 1349 + } 1350 + 1351 + .placeholder\:text-black::placeholder { 1352 + --tw-text-opacity: 1; 1353 + color: rgb(0 0 0 / var(--tw-text-opacity)); 1354 + } 1355 + 1356 + .hover\:bg-rose-600:hover { 1357 + --tw-bg-opacity: 1; 1358 + background-color: rgb(225 29 72 / var(--tw-bg-opacity)); 1359 + } 1360 + 1361 + .focus\:ring-2:focus { 1362 + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); 1363 + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); 1364 + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); 1365 + } 1366 + 1367 + .focus\:ring-inset:focus { 1368 + --tw-ring-inset: inset; 1369 + } 1370 + 1371 + .focus\:ring-red-600:focus { 1372 + --tw-ring-opacity: 1; 1373 + --tw-ring-color: rgb(220 38 38 / var(--tw-ring-opacity)); 1374 + } 1375 + 1376 + .active\:size-6:active { 1377 + width: 1.5rem; 1378 + height: 1.5rem; 1379 + } 1380 + 1381 + .dark\:block:is(.dark *) { 1382 + display: block; 1383 + } 1384 + 1385 + .dark\:hidden:is(.dark *) { 1386 + display: none; 1387 + } 1388 + 1389 + .dark\:border-white\/10:is(.dark *) { 1390 + border-color: rgb(255 255 255 / 0.1); 1391 + } 1392 + 1393 + .dark\:border-white\/20:is(.dark *) { 1394 + border-color: rgb(255 255 255 / 0.2); 1395 + } 1396 + 1397 + .dark\:bg-white\/5:is(.dark *) { 1398 + background-color: rgb(255 255 255 / 0.05); 1399 + } 1400 + 1401 + .dark\:stroke-white:is(.dark *) { 1402 + stroke: #fff; 1403 + } 1404 + 1405 + .dark\:text-red-500:is(.dark *) { 1406 + --tw-text-opacity: 1; 1407 + color: rgb(239 68 68 / var(--tw-text-opacity)); 1408 + } 1409 + 1410 + .dark\:text-white:is(.dark *) { 1411 + --tw-text-opacity: 1; 1412 + color: rgb(255 255 255 / var(--tw-text-opacity)); 1413 + } 1414 + 1415 + .dark\:ring-white\/10:is(.dark *) { 1416 + --tw-ring-color: rgb(255 255 255 / 0.1); 1417 + } 1418 + 1419 + .dark\:placeholder\:text-gray-400:is(.dark *)::-moz-placeholder { 1420 + --tw-text-opacity: 1; 1421 + color: rgb(156 163 175 / var(--tw-text-opacity)); 1422 + } 1423 + 1424 + .dark\:placeholder\:text-gray-400:is(.dark *)::placeholder { 1425 + --tw-text-opacity: 1; 1426 + color: rgb(156 163 175 / var(--tw-text-opacity)); 1427 + } 1428 + 1429 + @media (min-width: 640px) { 1430 + .sm\:leading-6 { 1431 + line-height: 1.5rem; 1432 + } 1433 + } 1434 + 1435 + @media (min-width: 768px) { 1436 + .md\:flex { 1437 + display: flex; 1438 + } 1439 + 1440 + .md\:hidden { 1441 + display: none; 1442 + } 1443 + 1444 + .md\:h-full { 1445 + height: 100%; 1446 + } 1447 + 1448 + .md\:w-1\/2 { 1449 + width: 50%; 1450 + } 1451 + 1452 + .md\:w-full { 1453 + width: 100%; 1454 + } 1455 + 1456 + .md\:grid-cols-2 { 1457 + grid-template-columns: repeat(2, minmax(0, 1fr)); 1458 + } 1459 + 1460 + .md\:flex-row { 1461 + flex-direction: row; 1462 + } 1463 + 1464 + .md\:pt-0 { 1465 + padding-top: 0px; 1466 + } 1467 + }
+20
youtube-party-dj-yunus-light-darkmodebutton/frontend/entrypoint.ts
··· 1 + /** 2 + * Frontend entrypoint: 3 + * This module provides a default export that defines the UI that is created on the frontend 4 + * when a page is visited 5 + */ 6 + import { Context } from "uix/routing/context.ts"; 7 + import "../common/theme.tsx" 8 + 9 + export default { 10 + '/player': async () => { 11 + const App = await import("../common/page.tsx"); 12 + return App.default(); 13 + }, 14 + '/client/([A-Z0-9]{4})': async (ctx: Context) => { 15 + const App = await import("../common/client.tsx"); 16 + return App.default(ctx); 17 + }, 18 + 19 + "/": import("../common/home.tsx"), 20 + }
+7
youtube-party-dj-yunus-light-darkmodebutton/frontend/main.css
··· 1 + @tailwind base; 2 + @tailwind components; 3 + @tailwind utilities; 4 + 5 + body { 6 + background-color: #1a191f; 7 + }
+12
youtube-party-dj-yunus-light-darkmodebutton/importmap.json
··· 1 + { 2 + "imports": { 3 + "datex-core-legacy": "https://cdn.unyt.org/datex-core-js-legacy@0.1.x/datex.ts", 4 + "datex-core-legacy/": "https://cdn.unyt.org/datex-core-js-legacy@0.1.x/", 5 + "unyt_core": "https://cdn.unyt.org/datex-core-js-legacy@0.1.x/datex.ts", 6 + "unyt_core/": "https://cdn.unyt.org/datex-core-js-legacy@0.1.x/", 7 + "uix": "https://cdn.unyt.org/uix@0.2.x/uix.ts", 8 + "uix/": "https://cdn.unyt.org/uix@0.2.x/src/", 9 + "uix/jsx-runtime": "https://cdn.unyt.org/uix@0.2.x/src/jsx-runtime/jsx.ts", 10 + "unyt-tests/": "https://cdn.unyt.org/unyt_tests/" 11 + } 12 + }
+1827
youtube-party-dj-yunus-light-darkmodebutton/package-lock.json
··· 1 + { 2 + "name": "youtube-party-dj-yunus-light-darkmodebutton", 3 + "lockfileVersion": 3, 4 + "requires": true, 5 + "packages": { 6 + "": { 7 + "dependencies": { 8 + "node": "^20.14.0", 9 + "tailwind-scrollbar": "^3.1.0", 10 + "tailwindcss": "^3.4.3", 11 + "typescript": "^5.4.5" 12 + }, 13 + "devDependencies": { 14 + "@tailwindcss/forms": "^0.5.7", 15 + "autoprefixer": "^10.4.19", 16 + "concurrently": "^8.2.2", 17 + "postcss": "^8.4.38", 18 + "tailwindcss": "^3.4.3" 19 + } 20 + }, 21 + "node_modules/@alloc/quick-lru": { 22 + "version": "5.2.0", 23 + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 24 + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 25 + "engines": { 26 + "node": ">=10" 27 + }, 28 + "funding": { 29 + "url": "https://github.com/sponsors/sindresorhus" 30 + } 31 + }, 32 + "node_modules/@babel/runtime": { 33 + "version": "7.24.7", 34 + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", 35 + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", 36 + "dev": true, 37 + "dependencies": { 38 + "regenerator-runtime": "^0.14.0" 39 + }, 40 + "engines": { 41 + "node": ">=6.9.0" 42 + } 43 + }, 44 + "node_modules/@isaacs/cliui": { 45 + "version": "8.0.2", 46 + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 47 + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 48 + "dependencies": { 49 + "string-width": "^5.1.2", 50 + "string-width-cjs": "npm:string-width@^4.2.0", 51 + "strip-ansi": "^7.0.1", 52 + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 53 + "wrap-ansi": "^8.1.0", 54 + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 55 + }, 56 + "engines": { 57 + "node": ">=12" 58 + } 59 + }, 60 + "node_modules/@jridgewell/gen-mapping": { 61 + "version": "0.3.5", 62 + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 63 + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 64 + "dependencies": { 65 + "@jridgewell/set-array": "^1.2.1", 66 + "@jridgewell/sourcemap-codec": "^1.4.10", 67 + "@jridgewell/trace-mapping": "^0.3.24" 68 + }, 69 + "engines": { 70 + "node": ">=6.0.0" 71 + } 72 + }, 73 + "node_modules/@jridgewell/resolve-uri": { 74 + "version": "3.1.2", 75 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 76 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 77 + "engines": { 78 + "node": ">=6.0.0" 79 + } 80 + }, 81 + "node_modules/@jridgewell/set-array": { 82 + "version": "1.2.1", 83 + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 84 + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 85 + "engines": { 86 + "node": ">=6.0.0" 87 + } 88 + }, 89 + "node_modules/@jridgewell/sourcemap-codec": { 90 + "version": "1.4.15", 91 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 92 + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" 93 + }, 94 + "node_modules/@jridgewell/trace-mapping": { 95 + "version": "0.3.25", 96 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 97 + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 98 + "dependencies": { 99 + "@jridgewell/resolve-uri": "^3.1.0", 100 + "@jridgewell/sourcemap-codec": "^1.4.14" 101 + } 102 + }, 103 + "node_modules/@nodelib/fs.scandir": { 104 + "version": "2.1.5", 105 + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 106 + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 107 + "dependencies": { 108 + "@nodelib/fs.stat": "2.0.5", 109 + "run-parallel": "^1.1.9" 110 + }, 111 + "engines": { 112 + "node": ">= 8" 113 + } 114 + }, 115 + "node_modules/@nodelib/fs.stat": { 116 + "version": "2.0.5", 117 + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 118 + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 119 + "engines": { 120 + "node": ">= 8" 121 + } 122 + }, 123 + "node_modules/@nodelib/fs.walk": { 124 + "version": "1.2.8", 125 + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 126 + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 127 + "dependencies": { 128 + "@nodelib/fs.scandir": "2.1.5", 129 + "fastq": "^1.6.0" 130 + }, 131 + "engines": { 132 + "node": ">= 8" 133 + } 134 + }, 135 + "node_modules/@pkgjs/parseargs": { 136 + "version": "0.11.0", 137 + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 138 + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 139 + "optional": true, 140 + "engines": { 141 + "node": ">=14" 142 + } 143 + }, 144 + "node_modules/@tailwindcss/forms": { 145 + "version": "0.5.7", 146 + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz", 147 + "integrity": "sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==", 148 + "dev": true, 149 + "dependencies": { 150 + "mini-svg-data-uri": "^1.2.3" 151 + }, 152 + "peerDependencies": { 153 + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" 154 + } 155 + }, 156 + "node_modules/ansi-regex": { 157 + "version": "6.0.1", 158 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 159 + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 160 + "engines": { 161 + "node": ">=12" 162 + }, 163 + "funding": { 164 + "url": "https://github.com/chalk/ansi-regex?sponsor=1" 165 + } 166 + }, 167 + "node_modules/ansi-styles": { 168 + "version": "4.3.0", 169 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 170 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 171 + "dependencies": { 172 + "color-convert": "^2.0.1" 173 + }, 174 + "engines": { 175 + "node": ">=8" 176 + }, 177 + "funding": { 178 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 179 + } 180 + }, 181 + "node_modules/any-promise": { 182 + "version": "1.3.0", 183 + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 184 + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" 185 + }, 186 + "node_modules/anymatch": { 187 + "version": "3.1.3", 188 + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 189 + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 190 + "dependencies": { 191 + "normalize-path": "^3.0.0", 192 + "picomatch": "^2.0.4" 193 + }, 194 + "engines": { 195 + "node": ">= 8" 196 + } 197 + }, 198 + "node_modules/arg": { 199 + "version": "5.0.2", 200 + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 201 + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" 202 + }, 203 + "node_modules/autoprefixer": { 204 + "version": "10.4.19", 205 + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", 206 + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", 207 + "dev": true, 208 + "funding": [ 209 + { 210 + "type": "opencollective", 211 + "url": "https://opencollective.com/postcss/" 212 + }, 213 + { 214 + "type": "tidelift", 215 + "url": "https://tidelift.com/funding/github/npm/autoprefixer" 216 + }, 217 + { 218 + "type": "github", 219 + "url": "https://github.com/sponsors/ai" 220 + } 221 + ], 222 + "dependencies": { 223 + "browserslist": "^4.23.0", 224 + "caniuse-lite": "^1.0.30001599", 225 + "fraction.js": "^4.3.7", 226 + "normalize-range": "^0.1.2", 227 + "picocolors": "^1.0.0", 228 + "postcss-value-parser": "^4.2.0" 229 + }, 230 + "bin": { 231 + "autoprefixer": "bin/autoprefixer" 232 + }, 233 + "engines": { 234 + "node": "^10 || ^12 || >=14" 235 + }, 236 + "peerDependencies": { 237 + "postcss": "^8.1.0" 238 + } 239 + }, 240 + "node_modules/balanced-match": { 241 + "version": "1.0.2", 242 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 243 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 244 + }, 245 + "node_modules/binary-extensions": { 246 + "version": "2.3.0", 247 + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 248 + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 249 + "engines": { 250 + "node": ">=8" 251 + }, 252 + "funding": { 253 + "url": "https://github.com/sponsors/sindresorhus" 254 + } 255 + }, 256 + "node_modules/brace-expansion": { 257 + "version": "2.0.1", 258 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 259 + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 260 + "dependencies": { 261 + "balanced-match": "^1.0.0" 262 + } 263 + }, 264 + "node_modules/braces": { 265 + "version": "3.0.3", 266 + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 267 + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 268 + "dependencies": { 269 + "fill-range": "^7.1.1" 270 + }, 271 + "engines": { 272 + "node": ">=8" 273 + } 274 + }, 275 + "node_modules/browserslist": { 276 + "version": "4.23.1", 277 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", 278 + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", 279 + "dev": true, 280 + "funding": [ 281 + { 282 + "type": "opencollective", 283 + "url": "https://opencollective.com/browserslist" 284 + }, 285 + { 286 + "type": "tidelift", 287 + "url": "https://tidelift.com/funding/github/npm/browserslist" 288 + }, 289 + { 290 + "type": "github", 291 + "url": "https://github.com/sponsors/ai" 292 + } 293 + ], 294 + "dependencies": { 295 + "caniuse-lite": "^1.0.30001629", 296 + "electron-to-chromium": "^1.4.796", 297 + "node-releases": "^2.0.14", 298 + "update-browserslist-db": "^1.0.16" 299 + }, 300 + "bin": { 301 + "browserslist": "cli.js" 302 + }, 303 + "engines": { 304 + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 305 + } 306 + }, 307 + "node_modules/camelcase-css": { 308 + "version": "2.0.1", 309 + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 310 + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 311 + "engines": { 312 + "node": ">= 6" 313 + } 314 + }, 315 + "node_modules/caniuse-lite": { 316 + "version": "1.0.30001634", 317 + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001634.tgz", 318 + "integrity": "sha512-fbBYXQ9q3+yp1q1gBk86tOFs4pyn/yxFm5ZNP18OXJDfA3txImOY9PhfxVggZ4vRHDqoU8NrKU81eN0OtzOgRA==", 319 + "dev": true, 320 + "funding": [ 321 + { 322 + "type": "opencollective", 323 + "url": "https://opencollective.com/browserslist" 324 + }, 325 + { 326 + "type": "tidelift", 327 + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 328 + }, 329 + { 330 + "type": "github", 331 + "url": "https://github.com/sponsors/ai" 332 + } 333 + ] 334 + }, 335 + "node_modules/chalk": { 336 + "version": "4.1.2", 337 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 338 + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 339 + "dev": true, 340 + "dependencies": { 341 + "ansi-styles": "^4.1.0", 342 + "supports-color": "^7.1.0" 343 + }, 344 + "engines": { 345 + "node": ">=10" 346 + }, 347 + "funding": { 348 + "url": "https://github.com/chalk/chalk?sponsor=1" 349 + } 350 + }, 351 + "node_modules/chalk/node_modules/supports-color": { 352 + "version": "7.2.0", 353 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 354 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 355 + "dev": true, 356 + "dependencies": { 357 + "has-flag": "^4.0.0" 358 + }, 359 + "engines": { 360 + "node": ">=8" 361 + } 362 + }, 363 + "node_modules/chokidar": { 364 + "version": "3.6.0", 365 + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 366 + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 367 + "dependencies": { 368 + "anymatch": "~3.1.2", 369 + "braces": "~3.0.2", 370 + "glob-parent": "~5.1.2", 371 + "is-binary-path": "~2.1.0", 372 + "is-glob": "~4.0.1", 373 + "normalize-path": "~3.0.0", 374 + "readdirp": "~3.6.0" 375 + }, 376 + "engines": { 377 + "node": ">= 8.10.0" 378 + }, 379 + "funding": { 380 + "url": "https://paulmillr.com/funding/" 381 + }, 382 + "optionalDependencies": { 383 + "fsevents": "~2.3.2" 384 + } 385 + }, 386 + "node_modules/chokidar/node_modules/glob-parent": { 387 + "version": "5.1.2", 388 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 389 + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 390 + "dependencies": { 391 + "is-glob": "^4.0.1" 392 + }, 393 + "engines": { 394 + "node": ">= 6" 395 + } 396 + }, 397 + "node_modules/cliui": { 398 + "version": "8.0.1", 399 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 400 + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 401 + "dev": true, 402 + "dependencies": { 403 + "string-width": "^4.2.0", 404 + "strip-ansi": "^6.0.1", 405 + "wrap-ansi": "^7.0.0" 406 + }, 407 + "engines": { 408 + "node": ">=12" 409 + } 410 + }, 411 + "node_modules/cliui/node_modules/ansi-regex": { 412 + "version": "5.0.1", 413 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 414 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 415 + "dev": true, 416 + "engines": { 417 + "node": ">=8" 418 + } 419 + }, 420 + "node_modules/cliui/node_modules/emoji-regex": { 421 + "version": "8.0.0", 422 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 423 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 424 + "dev": true 425 + }, 426 + "node_modules/cliui/node_modules/string-width": { 427 + "version": "4.2.3", 428 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 429 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 430 + "dev": true, 431 + "dependencies": { 432 + "emoji-regex": "^8.0.0", 433 + "is-fullwidth-code-point": "^3.0.0", 434 + "strip-ansi": "^6.0.1" 435 + }, 436 + "engines": { 437 + "node": ">=8" 438 + } 439 + }, 440 + "node_modules/cliui/node_modules/strip-ansi": { 441 + "version": "6.0.1", 442 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 443 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 444 + "dev": true, 445 + "dependencies": { 446 + "ansi-regex": "^5.0.1" 447 + }, 448 + "engines": { 449 + "node": ">=8" 450 + } 451 + }, 452 + "node_modules/cliui/node_modules/wrap-ansi": { 453 + "version": "7.0.0", 454 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 455 + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 456 + "dev": true, 457 + "dependencies": { 458 + "ansi-styles": "^4.0.0", 459 + "string-width": "^4.1.0", 460 + "strip-ansi": "^6.0.0" 461 + }, 462 + "engines": { 463 + "node": ">=10" 464 + }, 465 + "funding": { 466 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 467 + } 468 + }, 469 + "node_modules/color-convert": { 470 + "version": "2.0.1", 471 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 472 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 473 + "dependencies": { 474 + "color-name": "~1.1.4" 475 + }, 476 + "engines": { 477 + "node": ">=7.0.0" 478 + } 479 + }, 480 + "node_modules/color-name": { 481 + "version": "1.1.4", 482 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 483 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 484 + }, 485 + "node_modules/commander": { 486 + "version": "4.1.1", 487 + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 488 + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 489 + "engines": { 490 + "node": ">= 6" 491 + } 492 + }, 493 + "node_modules/concurrently": { 494 + "version": "8.2.2", 495 + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", 496 + "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", 497 + "dev": true, 498 + "dependencies": { 499 + "chalk": "^4.1.2", 500 + "date-fns": "^2.30.0", 501 + "lodash": "^4.17.21", 502 + "rxjs": "^7.8.1", 503 + "shell-quote": "^1.8.1", 504 + "spawn-command": "0.0.2", 505 + "supports-color": "^8.1.1", 506 + "tree-kill": "^1.2.2", 507 + "yargs": "^17.7.2" 508 + }, 509 + "bin": { 510 + "conc": "dist/bin/concurrently.js", 511 + "concurrently": "dist/bin/concurrently.js" 512 + }, 513 + "engines": { 514 + "node": "^14.13.0 || >=16.0.0" 515 + }, 516 + "funding": { 517 + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" 518 + } 519 + }, 520 + "node_modules/cross-spawn": { 521 + "version": "7.0.3", 522 + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 523 + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 524 + "dependencies": { 525 + "path-key": "^3.1.0", 526 + "shebang-command": "^2.0.0", 527 + "which": "^2.0.1" 528 + }, 529 + "engines": { 530 + "node": ">= 8" 531 + } 532 + }, 533 + "node_modules/cssesc": { 534 + "version": "3.0.0", 535 + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 536 + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 537 + "bin": { 538 + "cssesc": "bin/cssesc" 539 + }, 540 + "engines": { 541 + "node": ">=4" 542 + } 543 + }, 544 + "node_modules/date-fns": { 545 + "version": "2.30.0", 546 + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", 547 + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", 548 + "dev": true, 549 + "dependencies": { 550 + "@babel/runtime": "^7.21.0" 551 + }, 552 + "engines": { 553 + "node": ">=0.11" 554 + }, 555 + "funding": { 556 + "type": "opencollective", 557 + "url": "https://opencollective.com/date-fns" 558 + } 559 + }, 560 + "node_modules/didyoumean": { 561 + "version": "1.2.2", 562 + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 563 + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" 564 + }, 565 + "node_modules/dlv": { 566 + "version": "1.1.3", 567 + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 568 + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" 569 + }, 570 + "node_modules/eastasianwidth": { 571 + "version": "0.2.0", 572 + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 573 + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" 574 + }, 575 + "node_modules/electron-to-chromium": { 576 + "version": "1.4.803", 577 + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.803.tgz", 578 + "integrity": "sha512-61H9mLzGOCLLVsnLiRzCbc63uldP0AniRYPV3hbGVtONA1pI7qSGILdbofR7A8TMbOypDocEAjH/e+9k1QIe3g==", 579 + "dev": true 580 + }, 581 + "node_modules/emoji-regex": { 582 + "version": "9.2.2", 583 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 584 + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" 585 + }, 586 + "node_modules/escalade": { 587 + "version": "3.1.2", 588 + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 589 + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 590 + "dev": true, 591 + "engines": { 592 + "node": ">=6" 593 + } 594 + }, 595 + "node_modules/fast-glob": { 596 + "version": "3.3.2", 597 + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 598 + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 599 + "dependencies": { 600 + "@nodelib/fs.stat": "^2.0.2", 601 + "@nodelib/fs.walk": "^1.2.3", 602 + "glob-parent": "^5.1.2", 603 + "merge2": "^1.3.0", 604 + "micromatch": "^4.0.4" 605 + }, 606 + "engines": { 607 + "node": ">=8.6.0" 608 + } 609 + }, 610 + "node_modules/fast-glob/node_modules/glob-parent": { 611 + "version": "5.1.2", 612 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 613 + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 614 + "dependencies": { 615 + "is-glob": "^4.0.1" 616 + }, 617 + "engines": { 618 + "node": ">= 6" 619 + } 620 + }, 621 + "node_modules/fastq": { 622 + "version": "1.17.1", 623 + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", 624 + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", 625 + "dependencies": { 626 + "reusify": "^1.0.4" 627 + } 628 + }, 629 + "node_modules/fill-range": { 630 + "version": "7.1.1", 631 + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 632 + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 633 + "dependencies": { 634 + "to-regex-range": "^5.0.1" 635 + }, 636 + "engines": { 637 + "node": ">=8" 638 + } 639 + }, 640 + "node_modules/foreground-child": { 641 + "version": "3.2.1", 642 + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", 643 + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", 644 + "dependencies": { 645 + "cross-spawn": "^7.0.0", 646 + "signal-exit": "^4.0.1" 647 + }, 648 + "engines": { 649 + "node": ">=14" 650 + }, 651 + "funding": { 652 + "url": "https://github.com/sponsors/isaacs" 653 + } 654 + }, 655 + "node_modules/fraction.js": { 656 + "version": "4.3.7", 657 + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", 658 + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", 659 + "dev": true, 660 + "engines": { 661 + "node": "*" 662 + }, 663 + "funding": { 664 + "type": "patreon", 665 + "url": "https://github.com/sponsors/rawify" 666 + } 667 + }, 668 + "node_modules/fsevents": { 669 + "version": "2.3.3", 670 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 671 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 672 + "hasInstallScript": true, 673 + "optional": true, 674 + "os": [ 675 + "darwin" 676 + ], 677 + "engines": { 678 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 679 + } 680 + }, 681 + "node_modules/function-bind": { 682 + "version": "1.1.2", 683 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 684 + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 685 + "funding": { 686 + "url": "https://github.com/sponsors/ljharb" 687 + } 688 + }, 689 + "node_modules/get-caller-file": { 690 + "version": "2.0.5", 691 + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 692 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 693 + "dev": true, 694 + "engines": { 695 + "node": "6.* || 8.* || >= 10.*" 696 + } 697 + }, 698 + "node_modules/glob": { 699 + "version": "10.4.1", 700 + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", 701 + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", 702 + "dependencies": { 703 + "foreground-child": "^3.1.0", 704 + "jackspeak": "^3.1.2", 705 + "minimatch": "^9.0.4", 706 + "minipass": "^7.1.2", 707 + "path-scurry": "^1.11.1" 708 + }, 709 + "bin": { 710 + "glob": "dist/esm/bin.mjs" 711 + }, 712 + "engines": { 713 + "node": ">=16 || 14 >=14.18" 714 + }, 715 + "funding": { 716 + "url": "https://github.com/sponsors/isaacs" 717 + } 718 + }, 719 + "node_modules/glob-parent": { 720 + "version": "6.0.2", 721 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 722 + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 723 + "dependencies": { 724 + "is-glob": "^4.0.3" 725 + }, 726 + "engines": { 727 + "node": ">=10.13.0" 728 + } 729 + }, 730 + "node_modules/has-flag": { 731 + "version": "4.0.0", 732 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 733 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 734 + "dev": true, 735 + "engines": { 736 + "node": ">=8" 737 + } 738 + }, 739 + "node_modules/hasown": { 740 + "version": "2.0.2", 741 + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 742 + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 743 + "dependencies": { 744 + "function-bind": "^1.1.2" 745 + }, 746 + "engines": { 747 + "node": ">= 0.4" 748 + } 749 + }, 750 + "node_modules/is-binary-path": { 751 + "version": "2.1.0", 752 + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 753 + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 754 + "dependencies": { 755 + "binary-extensions": "^2.0.0" 756 + }, 757 + "engines": { 758 + "node": ">=8" 759 + } 760 + }, 761 + "node_modules/is-core-module": { 762 + "version": "2.13.1", 763 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", 764 + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", 765 + "dependencies": { 766 + "hasown": "^2.0.0" 767 + }, 768 + "funding": { 769 + "url": "https://github.com/sponsors/ljharb" 770 + } 771 + }, 772 + "node_modules/is-extglob": { 773 + "version": "2.1.1", 774 + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 775 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 776 + "engines": { 777 + "node": ">=0.10.0" 778 + } 779 + }, 780 + "node_modules/is-fullwidth-code-point": { 781 + "version": "3.0.0", 782 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 783 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 784 + "engines": { 785 + "node": ">=8" 786 + } 787 + }, 788 + "node_modules/is-glob": { 789 + "version": "4.0.3", 790 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 791 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 792 + "dependencies": { 793 + "is-extglob": "^2.1.1" 794 + }, 795 + "engines": { 796 + "node": ">=0.10.0" 797 + } 798 + }, 799 + "node_modules/is-number": { 800 + "version": "7.0.0", 801 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 802 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 803 + "engines": { 804 + "node": ">=0.12.0" 805 + } 806 + }, 807 + "node_modules/isexe": { 808 + "version": "2.0.0", 809 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 810 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 811 + }, 812 + "node_modules/jackspeak": { 813 + "version": "3.4.0", 814 + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", 815 + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", 816 + "dependencies": { 817 + "@isaacs/cliui": "^8.0.2" 818 + }, 819 + "engines": { 820 + "node": ">=14" 821 + }, 822 + "funding": { 823 + "url": "https://github.com/sponsors/isaacs" 824 + }, 825 + "optionalDependencies": { 826 + "@pkgjs/parseargs": "^0.11.0" 827 + } 828 + }, 829 + "node_modules/jiti": { 830 + "version": "1.21.6", 831 + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", 832 + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", 833 + "bin": { 834 + "jiti": "bin/jiti.js" 835 + } 836 + }, 837 + "node_modules/lilconfig": { 838 + "version": "2.1.0", 839 + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", 840 + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", 841 + "engines": { 842 + "node": ">=10" 843 + } 844 + }, 845 + "node_modules/lines-and-columns": { 846 + "version": "1.2.4", 847 + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 848 + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" 849 + }, 850 + "node_modules/lodash": { 851 + "version": "4.17.21", 852 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 853 + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 854 + "dev": true 855 + }, 856 + "node_modules/lru-cache": { 857 + "version": "10.2.2", 858 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", 859 + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", 860 + "engines": { 861 + "node": "14 || >=16.14" 862 + } 863 + }, 864 + "node_modules/merge2": { 865 + "version": "1.4.1", 866 + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 867 + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 868 + "engines": { 869 + "node": ">= 8" 870 + } 871 + }, 872 + "node_modules/micromatch": { 873 + "version": "4.0.7", 874 + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", 875 + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", 876 + "dependencies": { 877 + "braces": "^3.0.3", 878 + "picomatch": "^2.3.1" 879 + }, 880 + "engines": { 881 + "node": ">=8.6" 882 + } 883 + }, 884 + "node_modules/mini-svg-data-uri": { 885 + "version": "1.4.4", 886 + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", 887 + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", 888 + "dev": true, 889 + "bin": { 890 + "mini-svg-data-uri": "cli.js" 891 + } 892 + }, 893 + "node_modules/minimatch": { 894 + "version": "9.0.4", 895 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", 896 + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", 897 + "dependencies": { 898 + "brace-expansion": "^2.0.1" 899 + }, 900 + "engines": { 901 + "node": ">=16 || 14 >=14.17" 902 + }, 903 + "funding": { 904 + "url": "https://github.com/sponsors/isaacs" 905 + } 906 + }, 907 + "node_modules/minipass": { 908 + "version": "7.1.2", 909 + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 910 + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 911 + "engines": { 912 + "node": ">=16 || 14 >=14.17" 913 + } 914 + }, 915 + "node_modules/mz": { 916 + "version": "2.7.0", 917 + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 918 + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 919 + "dependencies": { 920 + "any-promise": "^1.0.0", 921 + "object-assign": "^4.0.1", 922 + "thenify-all": "^1.0.0" 923 + } 924 + }, 925 + "node_modules/nanoid": { 926 + "version": "3.3.7", 927 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 928 + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 929 + "funding": [ 930 + { 931 + "type": "github", 932 + "url": "https://github.com/sponsors/ai" 933 + } 934 + ], 935 + "bin": { 936 + "nanoid": "bin/nanoid.cjs" 937 + }, 938 + "engines": { 939 + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 940 + } 941 + }, 942 + "node_modules/node": { 943 + "version": "20.14.0", 944 + "resolved": "https://registry.npmjs.org/node/-/node-20.14.0.tgz", 945 + "integrity": "sha512-E2CjIYa9wo+GXJagY+pkzZftBo9R6lwk3pLfgHsMnXTncE3TOp2rbJAGtUkXNZ+HV1LUngAgvaTs3DWU24Vklg==", 946 + "hasInstallScript": true, 947 + "dependencies": { 948 + "node-bin-setup": "^1.0.0" 949 + }, 950 + "bin": { 951 + "node": "bin/node" 952 + }, 953 + "engines": { 954 + "npm": ">=5.0.0" 955 + } 956 + }, 957 + "node_modules/node-bin-setup": { 958 + "version": "1.1.3", 959 + "resolved": "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.1.3.tgz", 960 + "integrity": "sha512-opgw9iSCAzT2+6wJOETCpeRYAQxSopqQ2z+N6BXwIMsQQ7Zj5M8MaafQY8JMlolRR6R1UXg2WmhKp0p9lSOivg==" 961 + }, 962 + "node_modules/node-releases": { 963 + "version": "2.0.14", 964 + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", 965 + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", 966 + "dev": true 967 + }, 968 + "node_modules/normalize-path": { 969 + "version": "3.0.0", 970 + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 971 + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 972 + "engines": { 973 + "node": ">=0.10.0" 974 + } 975 + }, 976 + "node_modules/normalize-range": { 977 + "version": "0.1.2", 978 + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 979 + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", 980 + "dev": true, 981 + "engines": { 982 + "node": ">=0.10.0" 983 + } 984 + }, 985 + "node_modules/object-assign": { 986 + "version": "4.1.1", 987 + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 988 + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 989 + "engines": { 990 + "node": ">=0.10.0" 991 + } 992 + }, 993 + "node_modules/object-hash": { 994 + "version": "3.0.0", 995 + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 996 + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 997 + "engines": { 998 + "node": ">= 6" 999 + } 1000 + }, 1001 + "node_modules/path-key": { 1002 + "version": "3.1.1", 1003 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1004 + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1005 + "engines": { 1006 + "node": ">=8" 1007 + } 1008 + }, 1009 + "node_modules/path-parse": { 1010 + "version": "1.0.7", 1011 + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1012 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 1013 + }, 1014 + "node_modules/path-scurry": { 1015 + "version": "1.11.1", 1016 + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 1017 + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 1018 + "dependencies": { 1019 + "lru-cache": "^10.2.0", 1020 + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 1021 + }, 1022 + "engines": { 1023 + "node": ">=16 || 14 >=14.18" 1024 + }, 1025 + "funding": { 1026 + "url": "https://github.com/sponsors/isaacs" 1027 + } 1028 + }, 1029 + "node_modules/picocolors": { 1030 + "version": "1.0.1", 1031 + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", 1032 + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" 1033 + }, 1034 + "node_modules/picomatch": { 1035 + "version": "2.3.1", 1036 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1037 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1038 + "engines": { 1039 + "node": ">=8.6" 1040 + }, 1041 + "funding": { 1042 + "url": "https://github.com/sponsors/jonschlinkert" 1043 + } 1044 + }, 1045 + "node_modules/pify": { 1046 + "version": "2.3.0", 1047 + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1048 + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 1049 + "engines": { 1050 + "node": ">=0.10.0" 1051 + } 1052 + }, 1053 + "node_modules/pirates": { 1054 + "version": "4.0.6", 1055 + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 1056 + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 1057 + "engines": { 1058 + "node": ">= 6" 1059 + } 1060 + }, 1061 + "node_modules/postcss": { 1062 + "version": "8.4.38", 1063 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", 1064 + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", 1065 + "funding": [ 1066 + { 1067 + "type": "opencollective", 1068 + "url": "https://opencollective.com/postcss/" 1069 + }, 1070 + { 1071 + "type": "tidelift", 1072 + "url": "https://tidelift.com/funding/github/npm/postcss" 1073 + }, 1074 + { 1075 + "type": "github", 1076 + "url": "https://github.com/sponsors/ai" 1077 + } 1078 + ], 1079 + "dependencies": { 1080 + "nanoid": "^3.3.7", 1081 + "picocolors": "^1.0.0", 1082 + "source-map-js": "^1.2.0" 1083 + }, 1084 + "engines": { 1085 + "node": "^10 || ^12 || >=14" 1086 + } 1087 + }, 1088 + "node_modules/postcss-import": { 1089 + "version": "15.1.0", 1090 + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 1091 + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 1092 + "dependencies": { 1093 + "postcss-value-parser": "^4.0.0", 1094 + "read-cache": "^1.0.0", 1095 + "resolve": "^1.1.7" 1096 + }, 1097 + "engines": { 1098 + "node": ">=14.0.0" 1099 + }, 1100 + "peerDependencies": { 1101 + "postcss": "^8.0.0" 1102 + } 1103 + }, 1104 + "node_modules/postcss-js": { 1105 + "version": "4.0.1", 1106 + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", 1107 + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", 1108 + "dependencies": { 1109 + "camelcase-css": "^2.0.1" 1110 + }, 1111 + "engines": { 1112 + "node": "^12 || ^14 || >= 16" 1113 + }, 1114 + "funding": { 1115 + "type": "opencollective", 1116 + "url": "https://opencollective.com/postcss/" 1117 + }, 1118 + "peerDependencies": { 1119 + "postcss": "^8.4.21" 1120 + } 1121 + }, 1122 + "node_modules/postcss-load-config": { 1123 + "version": "4.0.2", 1124 + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", 1125 + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", 1126 + "funding": [ 1127 + { 1128 + "type": "opencollective", 1129 + "url": "https://opencollective.com/postcss/" 1130 + }, 1131 + { 1132 + "type": "github", 1133 + "url": "https://github.com/sponsors/ai" 1134 + } 1135 + ], 1136 + "dependencies": { 1137 + "lilconfig": "^3.0.0", 1138 + "yaml": "^2.3.4" 1139 + }, 1140 + "engines": { 1141 + "node": ">= 14" 1142 + }, 1143 + "peerDependencies": { 1144 + "postcss": ">=8.0.9", 1145 + "ts-node": ">=9.0.0" 1146 + }, 1147 + "peerDependenciesMeta": { 1148 + "postcss": { 1149 + "optional": true 1150 + }, 1151 + "ts-node": { 1152 + "optional": true 1153 + } 1154 + } 1155 + }, 1156 + "node_modules/postcss-load-config/node_modules/lilconfig": { 1157 + "version": "3.1.2", 1158 + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", 1159 + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", 1160 + "engines": { 1161 + "node": ">=14" 1162 + }, 1163 + "funding": { 1164 + "url": "https://github.com/sponsors/antonk52" 1165 + } 1166 + }, 1167 + "node_modules/postcss-nested": { 1168 + "version": "6.0.1", 1169 + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", 1170 + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", 1171 + "dependencies": { 1172 + "postcss-selector-parser": "^6.0.11" 1173 + }, 1174 + "engines": { 1175 + "node": ">=12.0" 1176 + }, 1177 + "funding": { 1178 + "type": "opencollective", 1179 + "url": "https://opencollective.com/postcss/" 1180 + }, 1181 + "peerDependencies": { 1182 + "postcss": "^8.2.14" 1183 + } 1184 + }, 1185 + "node_modules/postcss-selector-parser": { 1186 + "version": "6.1.0", 1187 + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", 1188 + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", 1189 + "dependencies": { 1190 + "cssesc": "^3.0.0", 1191 + "util-deprecate": "^1.0.2" 1192 + }, 1193 + "engines": { 1194 + "node": ">=4" 1195 + } 1196 + }, 1197 + "node_modules/postcss-value-parser": { 1198 + "version": "4.2.0", 1199 + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1200 + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" 1201 + }, 1202 + "node_modules/queue-microtask": { 1203 + "version": "1.2.3", 1204 + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1205 + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1206 + "funding": [ 1207 + { 1208 + "type": "github", 1209 + "url": "https://github.com/sponsors/feross" 1210 + }, 1211 + { 1212 + "type": "patreon", 1213 + "url": "https://www.patreon.com/feross" 1214 + }, 1215 + { 1216 + "type": "consulting", 1217 + "url": "https://feross.org/support" 1218 + } 1219 + ] 1220 + }, 1221 + "node_modules/read-cache": { 1222 + "version": "1.0.0", 1223 + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 1224 + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 1225 + "dependencies": { 1226 + "pify": "^2.3.0" 1227 + } 1228 + }, 1229 + "node_modules/readdirp": { 1230 + "version": "3.6.0", 1231 + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1232 + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1233 + "dependencies": { 1234 + "picomatch": "^2.2.1" 1235 + }, 1236 + "engines": { 1237 + "node": ">=8.10.0" 1238 + } 1239 + }, 1240 + "node_modules/regenerator-runtime": { 1241 + "version": "0.14.1", 1242 + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", 1243 + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", 1244 + "dev": true 1245 + }, 1246 + "node_modules/require-directory": { 1247 + "version": "2.1.1", 1248 + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1249 + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1250 + "dev": true, 1251 + "engines": { 1252 + "node": ">=0.10.0" 1253 + } 1254 + }, 1255 + "node_modules/resolve": { 1256 + "version": "1.22.8", 1257 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 1258 + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 1259 + "dependencies": { 1260 + "is-core-module": "^2.13.0", 1261 + "path-parse": "^1.0.7", 1262 + "supports-preserve-symlinks-flag": "^1.0.0" 1263 + }, 1264 + "bin": { 1265 + "resolve": "bin/resolve" 1266 + }, 1267 + "funding": { 1268 + "url": "https://github.com/sponsors/ljharb" 1269 + } 1270 + }, 1271 + "node_modules/reusify": { 1272 + "version": "1.0.4", 1273 + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1274 + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1275 + "engines": { 1276 + "iojs": ">=1.0.0", 1277 + "node": ">=0.10.0" 1278 + } 1279 + }, 1280 + "node_modules/run-parallel": { 1281 + "version": "1.2.0", 1282 + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1283 + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1284 + "funding": [ 1285 + { 1286 + "type": "github", 1287 + "url": "https://github.com/sponsors/feross" 1288 + }, 1289 + { 1290 + "type": "patreon", 1291 + "url": "https://www.patreon.com/feross" 1292 + }, 1293 + { 1294 + "type": "consulting", 1295 + "url": "https://feross.org/support" 1296 + } 1297 + ], 1298 + "dependencies": { 1299 + "queue-microtask": "^1.2.2" 1300 + } 1301 + }, 1302 + "node_modules/rxjs": { 1303 + "version": "7.8.1", 1304 + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", 1305 + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", 1306 + "dev": true, 1307 + "dependencies": { 1308 + "tslib": "^2.1.0" 1309 + } 1310 + }, 1311 + "node_modules/shebang-command": { 1312 + "version": "2.0.0", 1313 + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1314 + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1315 + "dependencies": { 1316 + "shebang-regex": "^3.0.0" 1317 + }, 1318 + "engines": { 1319 + "node": ">=8" 1320 + } 1321 + }, 1322 + "node_modules/shebang-regex": { 1323 + "version": "3.0.0", 1324 + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1325 + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1326 + "engines": { 1327 + "node": ">=8" 1328 + } 1329 + }, 1330 + "node_modules/shell-quote": { 1331 + "version": "1.8.1", 1332 + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", 1333 + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", 1334 + "dev": true, 1335 + "funding": { 1336 + "url": "https://github.com/sponsors/ljharb" 1337 + } 1338 + }, 1339 + "node_modules/signal-exit": { 1340 + "version": "4.1.0", 1341 + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 1342 + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1343 + "engines": { 1344 + "node": ">=14" 1345 + }, 1346 + "funding": { 1347 + "url": "https://github.com/sponsors/isaacs" 1348 + } 1349 + }, 1350 + "node_modules/source-map-js": { 1351 + "version": "1.2.0", 1352 + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", 1353 + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", 1354 + "engines": { 1355 + "node": ">=0.10.0" 1356 + } 1357 + }, 1358 + "node_modules/spawn-command": { 1359 + "version": "0.0.2", 1360 + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", 1361 + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", 1362 + "dev": true 1363 + }, 1364 + "node_modules/string-width": { 1365 + "version": "5.1.2", 1366 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1367 + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1368 + "dependencies": { 1369 + "eastasianwidth": "^0.2.0", 1370 + "emoji-regex": "^9.2.2", 1371 + "strip-ansi": "^7.0.1" 1372 + }, 1373 + "engines": { 1374 + "node": ">=12" 1375 + }, 1376 + "funding": { 1377 + "url": "https://github.com/sponsors/sindresorhus" 1378 + } 1379 + }, 1380 + "node_modules/string-width-cjs": { 1381 + "name": "string-width", 1382 + "version": "4.2.3", 1383 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1384 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1385 + "dependencies": { 1386 + "emoji-regex": "^8.0.0", 1387 + "is-fullwidth-code-point": "^3.0.0", 1388 + "strip-ansi": "^6.0.1" 1389 + }, 1390 + "engines": { 1391 + "node": ">=8" 1392 + } 1393 + }, 1394 + "node_modules/string-width-cjs/node_modules/ansi-regex": { 1395 + "version": "5.0.1", 1396 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1397 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1398 + "engines": { 1399 + "node": ">=8" 1400 + } 1401 + }, 1402 + "node_modules/string-width-cjs/node_modules/emoji-regex": { 1403 + "version": "8.0.0", 1404 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1405 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 1406 + }, 1407 + "node_modules/string-width-cjs/node_modules/strip-ansi": { 1408 + "version": "6.0.1", 1409 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1410 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1411 + "dependencies": { 1412 + "ansi-regex": "^5.0.1" 1413 + }, 1414 + "engines": { 1415 + "node": ">=8" 1416 + } 1417 + }, 1418 + "node_modules/strip-ansi": { 1419 + "version": "7.1.0", 1420 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1421 + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1422 + "dependencies": { 1423 + "ansi-regex": "^6.0.1" 1424 + }, 1425 + "engines": { 1426 + "node": ">=12" 1427 + }, 1428 + "funding": { 1429 + "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1430 + } 1431 + }, 1432 + "node_modules/strip-ansi-cjs": { 1433 + "name": "strip-ansi", 1434 + "version": "6.0.1", 1435 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1436 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1437 + "dependencies": { 1438 + "ansi-regex": "^5.0.1" 1439 + }, 1440 + "engines": { 1441 + "node": ">=8" 1442 + } 1443 + }, 1444 + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { 1445 + "version": "5.0.1", 1446 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1447 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1448 + "engines": { 1449 + "node": ">=8" 1450 + } 1451 + }, 1452 + "node_modules/sucrase": { 1453 + "version": "3.35.0", 1454 + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", 1455 + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", 1456 + "dependencies": { 1457 + "@jridgewell/gen-mapping": "^0.3.2", 1458 + "commander": "^4.0.0", 1459 + "glob": "^10.3.10", 1460 + "lines-and-columns": "^1.1.6", 1461 + "mz": "^2.7.0", 1462 + "pirates": "^4.0.1", 1463 + "ts-interface-checker": "^0.1.9" 1464 + }, 1465 + "bin": { 1466 + "sucrase": "bin/sucrase", 1467 + "sucrase-node": "bin/sucrase-node" 1468 + }, 1469 + "engines": { 1470 + "node": ">=16 || 14 >=14.17" 1471 + } 1472 + }, 1473 + "node_modules/supports-color": { 1474 + "version": "8.1.1", 1475 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1476 + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1477 + "dev": true, 1478 + "dependencies": { 1479 + "has-flag": "^4.0.0" 1480 + }, 1481 + "engines": { 1482 + "node": ">=10" 1483 + }, 1484 + "funding": { 1485 + "url": "https://github.com/chalk/supports-color?sponsor=1" 1486 + } 1487 + }, 1488 + "node_modules/supports-preserve-symlinks-flag": { 1489 + "version": "1.0.0", 1490 + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1491 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1492 + "engines": { 1493 + "node": ">= 0.4" 1494 + }, 1495 + "funding": { 1496 + "url": "https://github.com/sponsors/ljharb" 1497 + } 1498 + }, 1499 + "node_modules/tailwind-scrollbar": { 1500 + "version": "3.1.0", 1501 + "resolved": "https://registry.npmjs.org/tailwind-scrollbar/-/tailwind-scrollbar-3.1.0.tgz", 1502 + "integrity": "sha512-pmrtDIZeHyu2idTejfV59SbaJyvp1VRjYxAjZBH0jnyrPRo6HL1kD5Glz8VPagasqr6oAx6M05+Tuw429Z8jxg==", 1503 + "engines": { 1504 + "node": ">=12.13.0" 1505 + }, 1506 + "peerDependencies": { 1507 + "tailwindcss": "3.x" 1508 + } 1509 + }, 1510 + "node_modules/tailwindcss": { 1511 + "version": "3.4.4", 1512 + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", 1513 + "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", 1514 + "dependencies": { 1515 + "@alloc/quick-lru": "^5.2.0", 1516 + "arg": "^5.0.2", 1517 + "chokidar": "^3.5.3", 1518 + "didyoumean": "^1.2.2", 1519 + "dlv": "^1.1.3", 1520 + "fast-glob": "^3.3.0", 1521 + "glob-parent": "^6.0.2", 1522 + "is-glob": "^4.0.3", 1523 + "jiti": "^1.21.0", 1524 + "lilconfig": "^2.1.0", 1525 + "micromatch": "^4.0.5", 1526 + "normalize-path": "^3.0.0", 1527 + "object-hash": "^3.0.0", 1528 + "picocolors": "^1.0.0", 1529 + "postcss": "^8.4.23", 1530 + "postcss-import": "^15.1.0", 1531 + "postcss-js": "^4.0.1", 1532 + "postcss-load-config": "^4.0.1", 1533 + "postcss-nested": "^6.0.1", 1534 + "postcss-selector-parser": "^6.0.11", 1535 + "resolve": "^1.22.2", 1536 + "sucrase": "^3.32.0" 1537 + }, 1538 + "bin": { 1539 + "tailwind": "lib/cli.js", 1540 + "tailwindcss": "lib/cli.js" 1541 + }, 1542 + "engines": { 1543 + "node": ">=14.0.0" 1544 + } 1545 + }, 1546 + "node_modules/thenify": { 1547 + "version": "3.3.1", 1548 + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 1549 + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 1550 + "dependencies": { 1551 + "any-promise": "^1.0.0" 1552 + } 1553 + }, 1554 + "node_modules/thenify-all": { 1555 + "version": "1.6.0", 1556 + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 1557 + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 1558 + "dependencies": { 1559 + "thenify": ">= 3.1.0 < 4" 1560 + }, 1561 + "engines": { 1562 + "node": ">=0.8" 1563 + } 1564 + }, 1565 + "node_modules/to-regex-range": { 1566 + "version": "5.0.1", 1567 + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1568 + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1569 + "dependencies": { 1570 + "is-number": "^7.0.0" 1571 + }, 1572 + "engines": { 1573 + "node": ">=8.0" 1574 + } 1575 + }, 1576 + "node_modules/tree-kill": { 1577 + "version": "1.2.2", 1578 + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", 1579 + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", 1580 + "dev": true, 1581 + "bin": { 1582 + "tree-kill": "cli.js" 1583 + } 1584 + }, 1585 + "node_modules/ts-interface-checker": { 1586 + "version": "0.1.13", 1587 + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 1588 + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" 1589 + }, 1590 + "node_modules/tslib": { 1591 + "version": "2.6.3", 1592 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", 1593 + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", 1594 + "dev": true 1595 + }, 1596 + "node_modules/typescript": { 1597 + "version": "5.4.5", 1598 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", 1599 + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", 1600 + "bin": { 1601 + "tsc": "bin/tsc", 1602 + "tsserver": "bin/tsserver" 1603 + }, 1604 + "engines": { 1605 + "node": ">=14.17" 1606 + } 1607 + }, 1608 + "node_modules/update-browserslist-db": { 1609 + "version": "1.0.16", 1610 + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", 1611 + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", 1612 + "dev": true, 1613 + "funding": [ 1614 + { 1615 + "type": "opencollective", 1616 + "url": "https://opencollective.com/browserslist" 1617 + }, 1618 + { 1619 + "type": "tidelift", 1620 + "url": "https://tidelift.com/funding/github/npm/browserslist" 1621 + }, 1622 + { 1623 + "type": "github", 1624 + "url": "https://github.com/sponsors/ai" 1625 + } 1626 + ], 1627 + "dependencies": { 1628 + "escalade": "^3.1.2", 1629 + "picocolors": "^1.0.1" 1630 + }, 1631 + "bin": { 1632 + "update-browserslist-db": "cli.js" 1633 + }, 1634 + "peerDependencies": { 1635 + "browserslist": ">= 4.21.0" 1636 + } 1637 + }, 1638 + "node_modules/util-deprecate": { 1639 + "version": "1.0.2", 1640 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1641 + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1642 + }, 1643 + "node_modules/which": { 1644 + "version": "2.0.2", 1645 + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1646 + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1647 + "dependencies": { 1648 + "isexe": "^2.0.0" 1649 + }, 1650 + "bin": { 1651 + "node-which": "bin/node-which" 1652 + }, 1653 + "engines": { 1654 + "node": ">= 8" 1655 + } 1656 + }, 1657 + "node_modules/wrap-ansi": { 1658 + "version": "8.1.0", 1659 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 1660 + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 1661 + "dependencies": { 1662 + "ansi-styles": "^6.1.0", 1663 + "string-width": "^5.0.1", 1664 + "strip-ansi": "^7.0.1" 1665 + }, 1666 + "engines": { 1667 + "node": ">=12" 1668 + }, 1669 + "funding": { 1670 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1671 + } 1672 + }, 1673 + "node_modules/wrap-ansi-cjs": { 1674 + "name": "wrap-ansi", 1675 + "version": "7.0.0", 1676 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1677 + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1678 + "dependencies": { 1679 + "ansi-styles": "^4.0.0", 1680 + "string-width": "^4.1.0", 1681 + "strip-ansi": "^6.0.0" 1682 + }, 1683 + "engines": { 1684 + "node": ">=10" 1685 + }, 1686 + "funding": { 1687 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1688 + } 1689 + }, 1690 + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { 1691 + "version": "5.0.1", 1692 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1693 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1694 + "engines": { 1695 + "node": ">=8" 1696 + } 1697 + }, 1698 + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 1699 + "version": "8.0.0", 1700 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1701 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 1702 + }, 1703 + "node_modules/wrap-ansi-cjs/node_modules/string-width": { 1704 + "version": "4.2.3", 1705 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1706 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1707 + "dependencies": { 1708 + "emoji-regex": "^8.0.0", 1709 + "is-fullwidth-code-point": "^3.0.0", 1710 + "strip-ansi": "^6.0.1" 1711 + }, 1712 + "engines": { 1713 + "node": ">=8" 1714 + } 1715 + }, 1716 + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { 1717 + "version": "6.0.1", 1718 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1719 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1720 + "dependencies": { 1721 + "ansi-regex": "^5.0.1" 1722 + }, 1723 + "engines": { 1724 + "node": ">=8" 1725 + } 1726 + }, 1727 + "node_modules/wrap-ansi/node_modules/ansi-styles": { 1728 + "version": "6.2.1", 1729 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 1730 + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 1731 + "engines": { 1732 + "node": ">=12" 1733 + }, 1734 + "funding": { 1735 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1736 + } 1737 + }, 1738 + "node_modules/y18n": { 1739 + "version": "5.0.8", 1740 + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1741 + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1742 + "dev": true, 1743 + "engines": { 1744 + "node": ">=10" 1745 + } 1746 + }, 1747 + "node_modules/yaml": { 1748 + "version": "2.4.5", 1749 + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", 1750 + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", 1751 + "bin": { 1752 + "yaml": "bin.mjs" 1753 + }, 1754 + "engines": { 1755 + "node": ">= 14" 1756 + } 1757 + }, 1758 + "node_modules/yargs": { 1759 + "version": "17.7.2", 1760 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 1761 + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 1762 + "dev": true, 1763 + "dependencies": { 1764 + "cliui": "^8.0.1", 1765 + "escalade": "^3.1.1", 1766 + "get-caller-file": "^2.0.5", 1767 + "require-directory": "^2.1.1", 1768 + "string-width": "^4.2.3", 1769 + "y18n": "^5.0.5", 1770 + "yargs-parser": "^21.1.1" 1771 + }, 1772 + "engines": { 1773 + "node": ">=12" 1774 + } 1775 + }, 1776 + "node_modules/yargs-parser": { 1777 + "version": "21.1.1", 1778 + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 1779 + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 1780 + "dev": true, 1781 + "engines": { 1782 + "node": ">=12" 1783 + } 1784 + }, 1785 + "node_modules/yargs/node_modules/ansi-regex": { 1786 + "version": "5.0.1", 1787 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1788 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1789 + "dev": true, 1790 + "engines": { 1791 + "node": ">=8" 1792 + } 1793 + }, 1794 + "node_modules/yargs/node_modules/emoji-regex": { 1795 + "version": "8.0.0", 1796 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1797 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1798 + "dev": true 1799 + }, 1800 + "node_modules/yargs/node_modules/string-width": { 1801 + "version": "4.2.3", 1802 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1803 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1804 + "dev": true, 1805 + "dependencies": { 1806 + "emoji-regex": "^8.0.0", 1807 + "is-fullwidth-code-point": "^3.0.0", 1808 + "strip-ansi": "^6.0.1" 1809 + }, 1810 + "engines": { 1811 + "node": ">=8" 1812 + } 1813 + }, 1814 + "node_modules/yargs/node_modules/strip-ansi": { 1815 + "version": "6.0.1", 1816 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1817 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1818 + "dev": true, 1819 + "dependencies": { 1820 + "ansi-regex": "^5.0.1" 1821 + }, 1822 + "engines": { 1823 + "node": ">=8" 1824 + } 1825 + } 1826 + } 1827 + }
+18
youtube-party-dj-yunus-light-darkmodebutton/package.json
··· 1 + { 2 + "scripts": { 3 + "dev": "concurrently \"uix -l\" \"npx tailwindcss -i ./frontend/main.css -o ./frontend/entrypoint.css --watch\"" 4 + }, 5 + "devDependencies": { 6 + "@tailwindcss/forms": "^0.5.7", 7 + "autoprefixer": "^10.4.19", 8 + "concurrently": "^8.2.2", 9 + "postcss": "^8.4.38", 10 + "tailwindcss": "^3.4.3" 11 + }, 12 + "dependencies": { 13 + "tailwindcss": "^3.4.3", 14 + "node": "^20.14.0", 15 + "tailwind-scrollbar": "^3.1.0", 16 + "typescript": "^5.4.5" 17 + } 18 + }
+6
youtube-party-dj-yunus-light-darkmodebutton/postcss.config.js
··· 1 + module.exports = { 2 + plugins: { 3 + tailwindcss: {}, 4 + autoprefixer: {}, 5 + }, 6 + }
+10
youtube-party-dj-yunus-light-darkmodebutton/tailwind.config.js
··· 1 + /** @type {import('tailwindcss').Config} */ 2 + module.exports = { 3 + content: ["./backend/**/*.{html,ts,tsx}", "./frontend/**/*.{html,ts,tsx}", "./common/**/*.{html,ts,tsx}"], 4 + theme: { 5 + extend: {}, 6 + }, 7 + plugins: [require('@tailwindcss/forms')], 8 + darkMode: 'class' 9 + } 10 +
+979
youtube-party-dj-yunus-light-darkmodebutton/yarn.lock
··· 1 + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 + # yarn lockfile v1 3 + 4 + 5 + "@alloc/quick-lru@^5.2.0": 6 + version "5.2.0" 7 + resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" 8 + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== 9 + 10 + "@babel/runtime@^7.21.0": 11 + version "7.24.7" 12 + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz" 13 + integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== 14 + dependencies: 15 + regenerator-runtime "^0.14.0" 16 + 17 + "@isaacs/cliui@^8.0.2": 18 + version "8.0.2" 19 + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" 20 + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== 21 + dependencies: 22 + string-width "^5.1.2" 23 + string-width-cjs "npm:string-width@^4.2.0" 24 + strip-ansi "^7.0.1" 25 + strip-ansi-cjs "npm:strip-ansi@^6.0.1" 26 + wrap-ansi "^8.1.0" 27 + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" 28 + 29 + "@jridgewell/gen-mapping@^0.3.2": 30 + version "0.3.5" 31 + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" 32 + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== 33 + dependencies: 34 + "@jridgewell/set-array" "^1.2.1" 35 + "@jridgewell/sourcemap-codec" "^1.4.10" 36 + "@jridgewell/trace-mapping" "^0.3.24" 37 + 38 + "@jridgewell/resolve-uri@^3.1.0": 39 + version "3.1.2" 40 + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" 41 + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== 42 + 43 + "@jridgewell/set-array@^1.2.1": 44 + version "1.2.1" 45 + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" 46 + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== 47 + 48 + "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": 49 + version "1.4.15" 50 + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" 51 + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 52 + 53 + "@jridgewell/trace-mapping@^0.3.24": 54 + version "0.3.25" 55 + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" 56 + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== 57 + dependencies: 58 + "@jridgewell/resolve-uri" "^3.1.0" 59 + "@jridgewell/sourcemap-codec" "^1.4.14" 60 + 61 + "@nodelib/fs.scandir@2.1.5": 62 + version "2.1.5" 63 + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 64 + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 65 + dependencies: 66 + "@nodelib/fs.stat" "2.0.5" 67 + run-parallel "^1.1.9" 68 + 69 + "@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": 70 + version "2.0.5" 71 + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 72 + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 73 + 74 + "@nodelib/fs.walk@^1.2.3": 75 + version "1.2.8" 76 + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 77 + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 78 + dependencies: 79 + "@nodelib/fs.scandir" "2.1.5" 80 + fastq "^1.6.0" 81 + 82 + "@pkgjs/parseargs@^0.11.0": 83 + version "0.11.0" 84 + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" 85 + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== 86 + 87 + "@tailwindcss/forms@^0.5.7": 88 + version "0.5.7" 89 + resolved "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz" 90 + integrity sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw== 91 + dependencies: 92 + mini-svg-data-uri "^1.2.3" 93 + 94 + ansi-regex@^5.0.1: 95 + version "5.0.1" 96 + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 97 + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 98 + 99 + ansi-regex@^6.0.1: 100 + version "6.0.1" 101 + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" 102 + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== 103 + 104 + ansi-styles@^4.0.0, ansi-styles@^4.1.0: 105 + version "4.3.0" 106 + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 107 + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 108 + dependencies: 109 + color-convert "^2.0.1" 110 + 111 + ansi-styles@^6.1.0: 112 + version "6.2.1" 113 + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" 114 + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== 115 + 116 + any-promise@^1.0.0: 117 + version "1.3.0" 118 + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" 119 + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== 120 + 121 + anymatch@~3.1.2: 122 + version "3.1.3" 123 + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" 124 + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 125 + dependencies: 126 + normalize-path "^3.0.0" 127 + picomatch "^2.0.4" 128 + 129 + arg@^5.0.2: 130 + version "5.0.2" 131 + resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" 132 + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== 133 + 134 + autoprefixer@^10.4.19: 135 + version "10.4.19" 136 + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz" 137 + integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== 138 + dependencies: 139 + browserslist "^4.23.0" 140 + caniuse-lite "^1.0.30001599" 141 + fraction.js "^4.3.7" 142 + normalize-range "^0.1.2" 143 + picocolors "^1.0.0" 144 + postcss-value-parser "^4.2.0" 145 + 146 + balanced-match@^1.0.0: 147 + version "1.0.2" 148 + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 149 + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 150 + 151 + binary-extensions@^2.0.0: 152 + version "2.3.0" 153 + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" 154 + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== 155 + 156 + brace-expansion@^2.0.1: 157 + version "2.0.1" 158 + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" 159 + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 160 + dependencies: 161 + balanced-match "^1.0.0" 162 + 163 + braces@^3.0.3, braces@~3.0.2: 164 + version "3.0.3" 165 + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" 166 + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 167 + dependencies: 168 + fill-range "^7.1.1" 169 + 170 + browserslist@^4.23.0, "browserslist@>= 4.21.0": 171 + version "4.23.1" 172 + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz" 173 + integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw== 174 + dependencies: 175 + caniuse-lite "^1.0.30001629" 176 + electron-to-chromium "^1.4.796" 177 + node-releases "^2.0.14" 178 + update-browserslist-db "^1.0.16" 179 + 180 + camelcase-css@^2.0.1: 181 + version "2.0.1" 182 + resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" 183 + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== 184 + 185 + caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001629: 186 + version "1.0.30001634" 187 + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001634.tgz" 188 + integrity sha512-fbBYXQ9q3+yp1q1gBk86tOFs4pyn/yxFm5ZNP18OXJDfA3txImOY9PhfxVggZ4vRHDqoU8NrKU81eN0OtzOgRA== 189 + 190 + chalk@^4.1.2: 191 + version "4.1.2" 192 + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 193 + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 194 + dependencies: 195 + ansi-styles "^4.1.0" 196 + supports-color "^7.1.0" 197 + 198 + chokidar@^3.5.3: 199 + version "3.6.0" 200 + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" 201 + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== 202 + dependencies: 203 + anymatch "~3.1.2" 204 + braces "~3.0.2" 205 + glob-parent "~5.1.2" 206 + is-binary-path "~2.1.0" 207 + is-glob "~4.0.1" 208 + normalize-path "~3.0.0" 209 + readdirp "~3.6.0" 210 + optionalDependencies: 211 + fsevents "~2.3.2" 212 + 213 + cliui@^8.0.1: 214 + version "8.0.1" 215 + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" 216 + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== 217 + dependencies: 218 + string-width "^4.2.0" 219 + strip-ansi "^6.0.1" 220 + wrap-ansi "^7.0.0" 221 + 222 + color-convert@^2.0.1: 223 + version "2.0.1" 224 + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 225 + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 226 + dependencies: 227 + color-name "~1.1.4" 228 + 229 + color-name@~1.1.4: 230 + version "1.1.4" 231 + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 232 + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 233 + 234 + commander@^4.0.0: 235 + version "4.1.1" 236 + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" 237 + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== 238 + 239 + concurrently@^8.2.2: 240 + version "8.2.2" 241 + resolved "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz" 242 + integrity sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg== 243 + dependencies: 244 + chalk "^4.1.2" 245 + date-fns "^2.30.0" 246 + lodash "^4.17.21" 247 + rxjs "^7.8.1" 248 + shell-quote "^1.8.1" 249 + spawn-command "0.0.2" 250 + supports-color "^8.1.1" 251 + tree-kill "^1.2.2" 252 + yargs "^17.7.2" 253 + 254 + cross-spawn@^7.0.0: 255 + version "7.0.3" 256 + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" 257 + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 258 + dependencies: 259 + path-key "^3.1.0" 260 + shebang-command "^2.0.0" 261 + which "^2.0.1" 262 + 263 + cssesc@^3.0.0: 264 + version "3.0.0" 265 + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" 266 + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== 267 + 268 + date-fns@^2.30.0: 269 + version "2.30.0" 270 + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz" 271 + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== 272 + dependencies: 273 + "@babel/runtime" "^7.21.0" 274 + 275 + didyoumean@^1.2.2: 276 + version "1.2.2" 277 + resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" 278 + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== 279 + 280 + dlv@^1.1.3: 281 + version "1.1.3" 282 + resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" 283 + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== 284 + 285 + eastasianwidth@^0.2.0: 286 + version "0.2.0" 287 + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" 288 + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== 289 + 290 + electron-to-chromium@^1.4.796: 291 + version "1.4.803" 292 + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.803.tgz" 293 + integrity sha512-61H9mLzGOCLLVsnLiRzCbc63uldP0AniRYPV3hbGVtONA1pI7qSGILdbofR7A8TMbOypDocEAjH/e+9k1QIe3g== 294 + 295 + emoji-regex@^8.0.0: 296 + version "8.0.0" 297 + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 298 + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 299 + 300 + emoji-regex@^9.2.2: 301 + version "9.2.2" 302 + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" 303 + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 304 + 305 + escalade@^3.1.1, escalade@^3.1.2: 306 + version "3.1.2" 307 + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" 308 + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== 309 + 310 + fast-glob@^3.3.0: 311 + version "3.3.2" 312 + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" 313 + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== 314 + dependencies: 315 + "@nodelib/fs.stat" "^2.0.2" 316 + "@nodelib/fs.walk" "^1.2.3" 317 + glob-parent "^5.1.2" 318 + merge2 "^1.3.0" 319 + micromatch "^4.0.4" 320 + 321 + fastq@^1.6.0: 322 + version "1.17.1" 323 + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" 324 + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== 325 + dependencies: 326 + reusify "^1.0.4" 327 + 328 + fill-range@^7.1.1: 329 + version "7.1.1" 330 + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" 331 + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 332 + dependencies: 333 + to-regex-range "^5.0.1" 334 + 335 + foreground-child@^3.1.0: 336 + version "3.2.1" 337 + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz" 338 + integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== 339 + dependencies: 340 + cross-spawn "^7.0.0" 341 + signal-exit "^4.0.1" 342 + 343 + fraction.js@^4.3.7: 344 + version "4.3.7" 345 + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" 346 + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== 347 + 348 + function-bind@^1.1.2: 349 + version "1.1.2" 350 + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" 351 + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 352 + 353 + get-caller-file@^2.0.5: 354 + version "2.0.5" 355 + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" 356 + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 357 + 358 + glob-parent@^5.1.2: 359 + version "5.1.2" 360 + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 361 + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 362 + dependencies: 363 + is-glob "^4.0.1" 364 + 365 + glob-parent@^6.0.2: 366 + version "6.0.2" 367 + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" 368 + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 369 + dependencies: 370 + is-glob "^4.0.3" 371 + 372 + glob-parent@~5.1.2: 373 + version "5.1.2" 374 + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 375 + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 376 + dependencies: 377 + is-glob "^4.0.1" 378 + 379 + glob@^10.3.10: 380 + version "10.4.1" 381 + resolved "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz" 382 + integrity sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw== 383 + dependencies: 384 + foreground-child "^3.1.0" 385 + jackspeak "^3.1.2" 386 + minimatch "^9.0.4" 387 + minipass "^7.1.2" 388 + path-scurry "^1.11.1" 389 + 390 + has-flag@^4.0.0: 391 + version "4.0.0" 392 + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 393 + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 394 + 395 + hasown@^2.0.0: 396 + version "2.0.2" 397 + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" 398 + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 399 + dependencies: 400 + function-bind "^1.1.2" 401 + 402 + is-binary-path@~2.1.0: 403 + version "2.1.0" 404 + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" 405 + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 406 + dependencies: 407 + binary-extensions "^2.0.0" 408 + 409 + is-core-module@^2.13.0: 410 + version "2.13.1" 411 + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" 412 + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== 413 + dependencies: 414 + hasown "^2.0.0" 415 + 416 + is-extglob@^2.1.1: 417 + version "2.1.1" 418 + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 419 + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 420 + 421 + is-fullwidth-code-point@^3.0.0: 422 + version "3.0.0" 423 + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" 424 + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 425 + 426 + is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 427 + version "4.0.3" 428 + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 429 + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 430 + dependencies: 431 + is-extglob "^2.1.1" 432 + 433 + is-number@^7.0.0: 434 + version "7.0.0" 435 + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 436 + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 437 + 438 + isexe@^2.0.0: 439 + version "2.0.0" 440 + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 441 + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 442 + 443 + jackspeak@^3.1.2: 444 + version "3.4.0" 445 + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz" 446 + integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw== 447 + dependencies: 448 + "@isaacs/cliui" "^8.0.2" 449 + optionalDependencies: 450 + "@pkgjs/parseargs" "^0.11.0" 451 + 452 + jiti@^1.21.0: 453 + version "1.21.6" 454 + resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz" 455 + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== 456 + 457 + lilconfig@^2.1.0: 458 + version "2.1.0" 459 + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" 460 + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== 461 + 462 + lilconfig@^3.0.0: 463 + version "3.1.2" 464 + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz" 465 + integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== 466 + 467 + lines-and-columns@^1.1.6: 468 + version "1.2.4" 469 + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" 470 + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 471 + 472 + lodash@^4.17.21: 473 + version "4.17.21" 474 + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" 475 + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 476 + 477 + lru-cache@^10.2.0: 478 + version "10.2.2" 479 + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz" 480 + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== 481 + 482 + merge2@^1.3.0: 483 + version "1.4.1" 484 + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 485 + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 486 + 487 + micromatch@^4.0.4, micromatch@^4.0.5: 488 + version "4.0.7" 489 + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz" 490 + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== 491 + dependencies: 492 + braces "^3.0.3" 493 + picomatch "^2.3.1" 494 + 495 + mini-svg-data-uri@^1.2.3: 496 + version "1.4.4" 497 + resolved "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz" 498 + integrity sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg== 499 + 500 + minimatch@^9.0.4: 501 + version "9.0.4" 502 + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz" 503 + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== 504 + dependencies: 505 + brace-expansion "^2.0.1" 506 + 507 + "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: 508 + version "7.1.2" 509 + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" 510 + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== 511 + 512 + mz@^2.7.0: 513 + version "2.7.0" 514 + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" 515 + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== 516 + dependencies: 517 + any-promise "^1.0.0" 518 + object-assign "^4.0.1" 519 + thenify-all "^1.0.0" 520 + 521 + nanoid@^3.3.7: 522 + version "3.3.7" 523 + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" 524 + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== 525 + 526 + node-bin-setup@^1.0.0: 527 + version "1.1.3" 528 + resolved "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.1.3.tgz" 529 + integrity sha512-opgw9iSCAzT2+6wJOETCpeRYAQxSopqQ2z+N6BXwIMsQQ7Zj5M8MaafQY8JMlolRR6R1UXg2WmhKp0p9lSOivg== 530 + 531 + node-releases@^2.0.14: 532 + version "2.0.14" 533 + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz" 534 + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== 535 + 536 + node@^20.14.0: 537 + version "20.14.0" 538 + resolved "https://registry.npmjs.org/node/-/node-20.14.0.tgz" 539 + integrity sha512-E2CjIYa9wo+GXJagY+pkzZftBo9R6lwk3pLfgHsMnXTncE3TOp2rbJAGtUkXNZ+HV1LUngAgvaTs3DWU24Vklg== 540 + dependencies: 541 + node-bin-setup "^1.0.0" 542 + 543 + normalize-path@^3.0.0, normalize-path@~3.0.0: 544 + version "3.0.0" 545 + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" 546 + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 547 + 548 + normalize-range@^0.1.2: 549 + version "0.1.2" 550 + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" 551 + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== 552 + 553 + object-assign@^4.0.1: 554 + version "4.1.1" 555 + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" 556 + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 557 + 558 + object-hash@^3.0.0: 559 + version "3.0.0" 560 + resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" 561 + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== 562 + 563 + path-key@^3.1.0: 564 + version "3.1.1" 565 + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 566 + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 567 + 568 + path-parse@^1.0.7: 569 + version "1.0.7" 570 + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" 571 + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 572 + 573 + path-scurry@^1.11.1: 574 + version "1.11.1" 575 + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" 576 + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== 577 + dependencies: 578 + lru-cache "^10.2.0" 579 + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" 580 + 581 + picocolors@^1.0.0, picocolors@^1.0.1: 582 + version "1.0.1" 583 + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz" 584 + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== 585 + 586 + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 587 + version "2.3.1" 588 + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 589 + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 590 + 591 + pify@^2.3.0: 592 + version "2.3.0" 593 + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" 594 + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== 595 + 596 + pirates@^4.0.1: 597 + version "4.0.6" 598 + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" 599 + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== 600 + 601 + postcss-import@^15.1.0: 602 + version "15.1.0" 603 + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz" 604 + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== 605 + dependencies: 606 + postcss-value-parser "^4.0.0" 607 + read-cache "^1.0.0" 608 + resolve "^1.1.7" 609 + 610 + postcss-js@^4.0.1: 611 + version "4.0.1" 612 + resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz" 613 + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== 614 + dependencies: 615 + camelcase-css "^2.0.1" 616 + 617 + postcss-load-config@^4.0.1: 618 + version "4.0.2" 619 + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz" 620 + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== 621 + dependencies: 622 + lilconfig "^3.0.0" 623 + yaml "^2.3.4" 624 + 625 + postcss-nested@^6.0.1: 626 + version "6.0.1" 627 + resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz" 628 + integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== 629 + dependencies: 630 + postcss-selector-parser "^6.0.11" 631 + 632 + postcss-selector-parser@^6.0.11: 633 + version "6.1.0" 634 + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz" 635 + integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== 636 + dependencies: 637 + cssesc "^3.0.0" 638 + util-deprecate "^1.0.2" 639 + 640 + postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: 641 + version "4.2.0" 642 + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" 643 + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== 644 + 645 + postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.38, postcss@>=8.0.9: 646 + version "8.4.38" 647 + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz" 648 + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== 649 + dependencies: 650 + nanoid "^3.3.7" 651 + picocolors "^1.0.0" 652 + source-map-js "^1.2.0" 653 + 654 + queue-microtask@^1.2.2: 655 + version "1.2.3" 656 + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 657 + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 658 + 659 + read-cache@^1.0.0: 660 + version "1.0.0" 661 + resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" 662 + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== 663 + dependencies: 664 + pify "^2.3.0" 665 + 666 + readdirp@~3.6.0: 667 + version "3.6.0" 668 + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" 669 + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 670 + dependencies: 671 + picomatch "^2.2.1" 672 + 673 + regenerator-runtime@^0.14.0: 674 + version "0.14.1" 675 + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" 676 + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== 677 + 678 + require-directory@^2.1.1: 679 + version "2.1.1" 680 + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" 681 + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 682 + 683 + resolve@^1.1.7, resolve@^1.22.2: 684 + version "1.22.8" 685 + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" 686 + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== 687 + dependencies: 688 + is-core-module "^2.13.0" 689 + path-parse "^1.0.7" 690 + supports-preserve-symlinks-flag "^1.0.0" 691 + 692 + reusify@^1.0.4: 693 + version "1.0.4" 694 + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 695 + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 696 + 697 + run-parallel@^1.1.9: 698 + version "1.2.0" 699 + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 700 + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 701 + dependencies: 702 + queue-microtask "^1.2.2" 703 + 704 + rxjs@^7.8.1: 705 + version "7.8.1" 706 + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" 707 + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== 708 + dependencies: 709 + tslib "^2.1.0" 710 + 711 + shebang-command@^2.0.0: 712 + version "2.0.0" 713 + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 714 + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 715 + dependencies: 716 + shebang-regex "^3.0.0" 717 + 718 + shebang-regex@^3.0.0: 719 + version "3.0.0" 720 + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 721 + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 722 + 723 + shell-quote@^1.8.1: 724 + version "1.8.1" 725 + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz" 726 + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== 727 + 728 + signal-exit@^4.0.1: 729 + version "4.1.0" 730 + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" 731 + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== 732 + 733 + source-map-js@^1.2.0: 734 + version "1.2.0" 735 + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz" 736 + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== 737 + 738 + spawn-command@0.0.2: 739 + version "0.0.2" 740 + resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz" 741 + integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== 742 + 743 + "string-width-cjs@npm:string-width@^4.2.0": 744 + version "4.2.3" 745 + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" 746 + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 747 + dependencies: 748 + emoji-regex "^8.0.0" 749 + is-fullwidth-code-point "^3.0.0" 750 + strip-ansi "^6.0.1" 751 + 752 + string-width@^4.1.0, string-width@^4.2.0: 753 + version "4.2.3" 754 + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" 755 + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 756 + dependencies: 757 + emoji-regex "^8.0.0" 758 + is-fullwidth-code-point "^3.0.0" 759 + strip-ansi "^6.0.1" 760 + 761 + string-width@^4.2.3: 762 + version "4.2.3" 763 + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" 764 + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 765 + dependencies: 766 + emoji-regex "^8.0.0" 767 + is-fullwidth-code-point "^3.0.0" 768 + strip-ansi "^6.0.1" 769 + 770 + string-width@^5.0.1, string-width@^5.1.2: 771 + version "5.1.2" 772 + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" 773 + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== 774 + dependencies: 775 + eastasianwidth "^0.2.0" 776 + emoji-regex "^9.2.2" 777 + strip-ansi "^7.0.1" 778 + 779 + "strip-ansi-cjs@npm:strip-ansi@^6.0.1": 780 + version "6.0.1" 781 + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 782 + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 783 + dependencies: 784 + ansi-regex "^5.0.1" 785 + 786 + strip-ansi@^6.0.0, strip-ansi@^6.0.1: 787 + version "6.0.1" 788 + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 789 + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 790 + dependencies: 791 + ansi-regex "^5.0.1" 792 + 793 + strip-ansi@^7.0.1: 794 + version "7.1.0" 795 + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" 796 + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== 797 + dependencies: 798 + ansi-regex "^6.0.1" 799 + 800 + sucrase@^3.32.0: 801 + version "3.35.0" 802 + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz" 803 + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== 804 + dependencies: 805 + "@jridgewell/gen-mapping" "^0.3.2" 806 + commander "^4.0.0" 807 + glob "^10.3.10" 808 + lines-and-columns "^1.1.6" 809 + mz "^2.7.0" 810 + pirates "^4.0.1" 811 + ts-interface-checker "^0.1.9" 812 + 813 + supports-color@^7.1.0: 814 + version "7.2.0" 815 + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 816 + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 817 + dependencies: 818 + has-flag "^4.0.0" 819 + 820 + supports-color@^8.1.1: 821 + version "8.1.1" 822 + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" 823 + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 824 + dependencies: 825 + has-flag "^4.0.0" 826 + 827 + supports-preserve-symlinks-flag@^1.0.0: 828 + version "1.0.0" 829 + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" 830 + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 831 + 832 + tailwind-scrollbar@^3.1.0: 833 + version "3.1.0" 834 + resolved "https://registry.npmjs.org/tailwind-scrollbar/-/tailwind-scrollbar-3.1.0.tgz" 835 + integrity sha512-pmrtDIZeHyu2idTejfV59SbaJyvp1VRjYxAjZBH0jnyrPRo6HL1kD5Glz8VPagasqr6oAx6M05+Tuw429Z8jxg== 836 + 837 + tailwindcss@^3.4.3, "tailwindcss@>=3.0.0 || >= 3.0.0-alpha.1", tailwindcss@3.x: 838 + version "3.4.4" 839 + resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz" 840 + integrity sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A== 841 + dependencies: 842 + "@alloc/quick-lru" "^5.2.0" 843 + arg "^5.0.2" 844 + chokidar "^3.5.3" 845 + didyoumean "^1.2.2" 846 + dlv "^1.1.3" 847 + fast-glob "^3.3.0" 848 + glob-parent "^6.0.2" 849 + is-glob "^4.0.3" 850 + jiti "^1.21.0" 851 + lilconfig "^2.1.0" 852 + micromatch "^4.0.5" 853 + normalize-path "^3.0.0" 854 + object-hash "^3.0.0" 855 + picocolors "^1.0.0" 856 + postcss "^8.4.23" 857 + postcss-import "^15.1.0" 858 + postcss-js "^4.0.1" 859 + postcss-load-config "^4.0.1" 860 + postcss-nested "^6.0.1" 861 + postcss-selector-parser "^6.0.11" 862 + resolve "^1.22.2" 863 + sucrase "^3.32.0" 864 + 865 + thenify-all@^1.0.0: 866 + version "1.6.0" 867 + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" 868 + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== 869 + dependencies: 870 + thenify ">= 3.1.0 < 4" 871 + 872 + "thenify@>= 3.1.0 < 4": 873 + version "3.3.1" 874 + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" 875 + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== 876 + dependencies: 877 + any-promise "^1.0.0" 878 + 879 + to-regex-range@^5.0.1: 880 + version "5.0.1" 881 + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 882 + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 883 + dependencies: 884 + is-number "^7.0.0" 885 + 886 + tree-kill@^1.2.2: 887 + version "1.2.2" 888 + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" 889 + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== 890 + 891 + ts-interface-checker@^0.1.9: 892 + version "0.1.13" 893 + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" 894 + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== 895 + 896 + tslib@^2.1.0: 897 + version "2.6.3" 898 + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz" 899 + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== 900 + 901 + typescript@^5.4.5: 902 + version "5.4.5" 903 + resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz" 904 + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== 905 + 906 + update-browserslist-db@^1.0.16: 907 + version "1.0.16" 908 + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz" 909 + integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== 910 + dependencies: 911 + escalade "^3.1.2" 912 + picocolors "^1.0.1" 913 + 914 + util-deprecate@^1.0.2: 915 + version "1.0.2" 916 + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" 917 + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 918 + 919 + which@^2.0.1: 920 + version "2.0.2" 921 + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 922 + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 923 + dependencies: 924 + isexe "^2.0.0" 925 + 926 + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": 927 + version "7.0.0" 928 + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" 929 + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 930 + dependencies: 931 + ansi-styles "^4.0.0" 932 + string-width "^4.1.0" 933 + strip-ansi "^6.0.0" 934 + 935 + wrap-ansi@^7.0.0: 936 + version "7.0.0" 937 + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" 938 + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 939 + dependencies: 940 + ansi-styles "^4.0.0" 941 + string-width "^4.1.0" 942 + strip-ansi "^6.0.0" 943 + 944 + wrap-ansi@^8.1.0: 945 + version "8.1.0" 946 + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" 947 + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== 948 + dependencies: 949 + ansi-styles "^6.1.0" 950 + string-width "^5.0.1" 951 + strip-ansi "^7.0.1" 952 + 953 + y18n@^5.0.5: 954 + version "5.0.8" 955 + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" 956 + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 957 + 958 + yaml@^2.3.4: 959 + version "2.4.5" 960 + resolved "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz" 961 + integrity sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg== 962 + 963 + yargs-parser@^21.1.1: 964 + version "21.1.1" 965 + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" 966 + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== 967 + 968 + yargs@^17.7.2: 969 + version "17.7.2" 970 + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" 971 + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== 972 + dependencies: 973 + cliui "^8.0.1" 974 + escalade "^3.1.1" 975 + get-caller-file "^2.0.5" 976 + require-directory "^2.1.1" 977 + string-width "^4.2.3" 978 + y18n "^5.0.5" 979 + yargs-parser "^21.1.1"