├── .github └── workflows │ └── release.yml ├── .gitignore ├── .vscode └── extensions.json ├── README.md ├── docs └── pulsar-screenshot.png ├── index.html ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public ├── icon.png └── tauri.svg ├── src-tauri ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── build.rs ├── capabilities │ └── migrated.json ├── gen │ └── schemas │ │ ├── acl-manifests.json │ │ ├── capabilities.json │ │ ├── desktop-schema.json │ │ └── macOS-schema.json ├── icons │ ├── 128x128.png │ ├── 128x128@2x.png │ ├── 32x32.png │ ├── Square107x107Logo.png │ ├── Square142x142Logo.png │ ├── Square150x150Logo.png │ ├── Square284x284Logo.png │ ├── Square30x30Logo.png │ ├── Square310x310Logo.png │ ├── Square44x44Logo.png │ ├── Square71x71Logo.png │ ├── Square89x89Logo.png │ ├── StoreLogo.png │ ├── icon.icns │ ├── icon.ico │ └── icon.png ├── src │ ├── error.rs │ ├── lib.rs │ ├── main.rs │ └── util.rs └── tauri.conf.json ├── src ├── App.css ├── App.tsx ├── assets │ ├── cn-logo.svg │ ├── logo.svg │ └── space.webp ├── commands.ts ├── components │ ├── footer.tsx │ ├── logo.tsx │ ├── results-table.tsx │ ├── scanner.tsx │ └── trashbin.tsx ├── index.tsx └── lib │ ├── format.ts │ ├── get-dir-name.ts │ ├── store.ts │ └── updater.ts ├── tailwind.config.ts ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Publish Release 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | workflow_dispatch: 8 | inputs: 9 | app-slug: 10 | description: "The slug of your app in your CrabNebula Cloud org" 11 | required: true 12 | default: "pulsar" 13 | 14 | concurrency: 15 | group: ${{ github.workflow }}-${{ github.ref }} 16 | cancel-in-progress: true 17 | 18 | env: 19 | CN_APP_SLUG: ${{ github.event.inputs.app-slug || 'pulsar' }} 20 | 21 | jobs: 22 | draft: 23 | runs-on: ubuntu-latest 24 | 25 | steps: 26 | - uses: actions/checkout@v4 27 | 28 | - name: create draft release 29 | uses: crabnebula-dev/cloud-release@v0.1.0 30 | with: 31 | command: release draft ${{ env.CN_APP_SLUG }} --framework tauri 32 | api-key: ${{ secrets.CN_API_KEY }} 33 | 34 | build: 35 | needs: draft 36 | 37 | strategy: 38 | fail-fast: false 39 | matrix: 40 | os: [ubuntu-latest, macos-latest, windows-latest] 41 | 42 | runs-on: ${{ matrix.os }} 43 | 44 | steps: 45 | - uses: actions/checkout@v4 46 | - name: Install pnpm 47 | uses: pnpm/action-setup@v3 48 | with: 49 | version: 9 50 | - name: Use Node.js 51 | uses: actions/setup-node@v4 52 | with: 53 | node-version: "20" 54 | - name: Install stable toolchain 55 | uses: actions-rust-lang/setup-rust-toolchain@v1 56 | with: 57 | toolchain: stable 58 | cache: false 59 | 60 | - name: install Linux dependencies 61 | if: matrix.os == 'ubuntu-latest' 62 | run: | 63 | sudo apt-get update 64 | sudo apt-get install -y libwebkit2gtk-4.0-dev webkit2gtk-4.1 65 | 66 | - name: build tauri app 67 | run: | 68 | pnpm install 69 | pnpm run tauri build 70 | env: 71 | TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} 72 | TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} 73 | 74 | 75 | - name: upload assets 76 | uses: crabnebula-dev/cloud-release@v0.1.0 77 | with: 78 | command: release upload ${{ env.CN_APP_SLUG }} --framework tauri 79 | api-key: ${{ secrets.CN_API_KEY }} 80 | 81 | publish: 82 | needs: build 83 | 84 | runs-on: ubuntu-latest 85 | 86 | steps: 87 | - uses: actions/checkout@v4 88 | 89 | - name: publish release 90 | uses: crabnebula-dev/cloud-release@v0.1.0 91 | with: 92 | command: release publish ${{ env.CN_APP_SLUG }} --framework tauri 93 | api-key: ${{ secrets.CN_API_KEY }} 94 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .idea 4 | .DS_Store -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"] 3 | } 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Pulsar 2 | 3 | Dependency scanner. 4 | 5 |
6 | screenshot of the results table at Pulsar 7 |
8 | 9 | > ⚠️ This project is still in Beta. Bugs are expected, please run it in a controlled environment. 10 | 11 | ## Run Locally 🦀 12 | 13 | You need [Rust](https://www.rust-lang.org/tools/install) and [PNPM](https://pnpm.io) to run this project. Once the system is setup, you can clone this repository: 14 | 15 | ```sh 16 | git clone --depth 1 https://github.com/atilafassina/pulsar 17 | ``` 18 | 19 | Change directory inside the project, install dependencies, and run development server. 20 | 21 | ```sh 22 | cd pulsar && pnpm install && pnpm tauri dev 23 | ``` 24 | 25 | > 💡 Tauri will run the Vite dev server and then trigger the Rust build. First Rust build takes a little longer, but should still be less than a minute. 26 | 27 | ## Workspace Extensions 🧰 28 | 29 | - [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) 30 | - [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) 31 | - [Tailwind CSS IntelliSense](https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss) 32 | 33 | ## Build Your Own App 🔥 34 | 35 | If you like this SolidJS + Tauri + TailwindCSS setup, this project is built upon my template: [create-solidjs-tailwind-tauri](https://github.com/atilafassina/create-solidjs-tailwind-tauri). 36 | -------------------------------------------------------------------------------- /docs/pulsar-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/docs/pulsar-screenshot.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Tauri + Solid + Typescript App 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pulsar", 3 | "description": "package dependencies scanner", 4 | "author": { 5 | "name": "@AtilaFassina", 6 | "url": "https://atila.io" 7 | }, 8 | "scripts": { 9 | "start": "vite", 10 | "dev": "vite", 11 | "build": "vite build", 12 | "serve": "vite preview", 13 | "tauri": "tauri" 14 | }, 15 | "license": "MIT", 16 | "dependencies": { 17 | "@kobalte/core": "^0.11.2", 18 | "@tauri-apps/api": "2.0.0-rc.4", 19 | "@tauri-apps/plugin-dialog": "2.0.0-beta.5", 20 | "@tauri-apps/plugin-fs": "2.0.0-beta.5", 21 | "@tauri-apps/plugin-process": "2.0.0-beta.5", 22 | "@tauri-apps/plugin-shell": "2.0.0-rc.1", 23 | "@tauri-apps/plugin-updater": "2.0.0-beta.5", 24 | "autoprefixer": "^10.4.20", 25 | "postcss": "^8.4.41", 26 | "solid-js": "^1.8.22", 27 | "solid-transition-group": "^0.2.3", 28 | "tailwindcss": "^3.4.10" 29 | }, 30 | "devDependencies": { 31 | "@tauri-apps/cli": "2.0.0-rc.8", 32 | "internal-ip": "^7.0.0", 33 | "prettier": "^3.3.3", 34 | "typescript": "^5.5.4", 35 | "vite": "^5.4.2", 36 | "vite-plugin-solid": "^2.10.2" 37 | }, 38 | "prettier": {} 39 | } 40 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@kobalte/core': 12 | specifier: ^0.11.2 13 | version: 0.11.2(solid-js@1.8.22) 14 | '@tauri-apps/api': 15 | specifier: 2.0.0-rc.4 16 | version: 2.0.0-rc.4 17 | '@tauri-apps/plugin-dialog': 18 | specifier: 2.0.0-beta.5 19 | version: 2.0.0-beta.5 20 | '@tauri-apps/plugin-fs': 21 | specifier: 2.0.0-beta.5 22 | version: 2.0.0-beta.5 23 | '@tauri-apps/plugin-process': 24 | specifier: 2.0.0-beta.5 25 | version: 2.0.0-beta.5 26 | '@tauri-apps/plugin-shell': 27 | specifier: 2.0.0-rc.1 28 | version: 2.0.0-rc.1 29 | '@tauri-apps/plugin-updater': 30 | specifier: 2.0.0-beta.5 31 | version: 2.0.0-beta.5 32 | autoprefixer: 33 | specifier: ^10.4.20 34 | version: 10.4.20(postcss@8.4.41) 35 | postcss: 36 | specifier: ^8.4.41 37 | version: 8.4.41 38 | solid-js: 39 | specifier: ^1.8.22 40 | version: 1.8.22 41 | solid-transition-group: 42 | specifier: ^0.2.3 43 | version: 0.2.3(solid-js@1.8.22) 44 | tailwindcss: 45 | specifier: ^3.4.10 46 | version: 3.4.10 47 | devDependencies: 48 | '@tauri-apps/cli': 49 | specifier: 2.0.0-rc.8 50 | version: 2.0.0-rc.8 51 | internal-ip: 52 | specifier: ^7.0.0 53 | version: 7.0.0 54 | prettier: 55 | specifier: ^3.3.3 56 | version: 3.3.3 57 | typescript: 58 | specifier: ^5.5.4 59 | version: 5.5.4 60 | vite: 61 | specifier: ^5.4.2 62 | version: 5.4.2 63 | vite-plugin-solid: 64 | specifier: ^2.10.2 65 | version: 2.10.2(solid-js@1.8.22)(vite@5.4.2) 66 | 67 | packages: 68 | 69 | '@alloc/quick-lru@5.2.0': 70 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 71 | engines: {node: '>=10'} 72 | 73 | '@ampproject/remapping@2.3.0': 74 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 75 | engines: {node: '>=6.0.0'} 76 | 77 | '@babel/code-frame@7.24.6': 78 | resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==} 79 | engines: {node: '>=6.9.0'} 80 | 81 | '@babel/compat-data@7.24.6': 82 | resolution: {integrity: sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==} 83 | engines: {node: '>=6.9.0'} 84 | 85 | '@babel/core@7.24.6': 86 | resolution: {integrity: sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==} 87 | engines: {node: '>=6.9.0'} 88 | 89 | '@babel/generator@7.24.6': 90 | resolution: {integrity: sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==} 91 | engines: {node: '>=6.9.0'} 92 | 93 | '@babel/helper-compilation-targets@7.24.6': 94 | resolution: {integrity: sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==} 95 | engines: {node: '>=6.9.0'} 96 | 97 | '@babel/helper-environment-visitor@7.24.6': 98 | resolution: {integrity: sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==} 99 | engines: {node: '>=6.9.0'} 100 | 101 | '@babel/helper-function-name@7.24.6': 102 | resolution: {integrity: sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==} 103 | engines: {node: '>=6.9.0'} 104 | 105 | '@babel/helper-hoist-variables@7.24.6': 106 | resolution: {integrity: sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==} 107 | engines: {node: '>=6.9.0'} 108 | 109 | '@babel/helper-module-imports@7.18.6': 110 | resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 111 | engines: {node: '>=6.9.0'} 112 | 113 | '@babel/helper-module-imports@7.24.6': 114 | resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==} 115 | engines: {node: '>=6.9.0'} 116 | 117 | '@babel/helper-module-transforms@7.24.6': 118 | resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==} 119 | engines: {node: '>=6.9.0'} 120 | peerDependencies: 121 | '@babel/core': ^7.0.0 122 | 123 | '@babel/helper-plugin-utils@7.24.6': 124 | resolution: {integrity: sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==} 125 | engines: {node: '>=6.9.0'} 126 | 127 | '@babel/helper-simple-access@7.24.6': 128 | resolution: {integrity: sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==} 129 | engines: {node: '>=6.9.0'} 130 | 131 | '@babel/helper-split-export-declaration@7.24.6': 132 | resolution: {integrity: sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==} 133 | engines: {node: '>=6.9.0'} 134 | 135 | '@babel/helper-string-parser@7.24.6': 136 | resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==} 137 | engines: {node: '>=6.9.0'} 138 | 139 | '@babel/helper-validator-identifier@7.24.6': 140 | resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} 141 | engines: {node: '>=6.9.0'} 142 | 143 | '@babel/helper-validator-option@7.24.6': 144 | resolution: {integrity: sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==} 145 | engines: {node: '>=6.9.0'} 146 | 147 | '@babel/helpers@7.24.6': 148 | resolution: {integrity: sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==} 149 | engines: {node: '>=6.9.0'} 150 | 151 | '@babel/highlight@7.24.6': 152 | resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} 153 | engines: {node: '>=6.9.0'} 154 | 155 | '@babel/parser@7.24.6': 156 | resolution: {integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==} 157 | engines: {node: '>=6.0.0'} 158 | hasBin: true 159 | 160 | '@babel/plugin-syntax-jsx@7.24.6': 161 | resolution: {integrity: sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==} 162 | engines: {node: '>=6.9.0'} 163 | peerDependencies: 164 | '@babel/core': ^7.0.0-0 165 | 166 | '@babel/template@7.24.6': 167 | resolution: {integrity: sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==} 168 | engines: {node: '>=6.9.0'} 169 | 170 | '@babel/traverse@7.24.6': 171 | resolution: {integrity: sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==} 172 | engines: {node: '>=6.9.0'} 173 | 174 | '@babel/types@7.24.6': 175 | resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==} 176 | engines: {node: '>=6.9.0'} 177 | 178 | '@esbuild/aix-ppc64@0.21.5': 179 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 180 | engines: {node: '>=12'} 181 | cpu: [ppc64] 182 | os: [aix] 183 | 184 | '@esbuild/android-arm64@0.21.5': 185 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 186 | engines: {node: '>=12'} 187 | cpu: [arm64] 188 | os: [android] 189 | 190 | '@esbuild/android-arm@0.21.5': 191 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 192 | engines: {node: '>=12'} 193 | cpu: [arm] 194 | os: [android] 195 | 196 | '@esbuild/android-x64@0.21.5': 197 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 198 | engines: {node: '>=12'} 199 | cpu: [x64] 200 | os: [android] 201 | 202 | '@esbuild/darwin-arm64@0.21.5': 203 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 204 | engines: {node: '>=12'} 205 | cpu: [arm64] 206 | os: [darwin] 207 | 208 | '@esbuild/darwin-x64@0.21.5': 209 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 210 | engines: {node: '>=12'} 211 | cpu: [x64] 212 | os: [darwin] 213 | 214 | '@esbuild/freebsd-arm64@0.21.5': 215 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 216 | engines: {node: '>=12'} 217 | cpu: [arm64] 218 | os: [freebsd] 219 | 220 | '@esbuild/freebsd-x64@0.21.5': 221 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 222 | engines: {node: '>=12'} 223 | cpu: [x64] 224 | os: [freebsd] 225 | 226 | '@esbuild/linux-arm64@0.21.5': 227 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 228 | engines: {node: '>=12'} 229 | cpu: [arm64] 230 | os: [linux] 231 | 232 | '@esbuild/linux-arm@0.21.5': 233 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 234 | engines: {node: '>=12'} 235 | cpu: [arm] 236 | os: [linux] 237 | 238 | '@esbuild/linux-ia32@0.21.5': 239 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 240 | engines: {node: '>=12'} 241 | cpu: [ia32] 242 | os: [linux] 243 | 244 | '@esbuild/linux-loong64@0.21.5': 245 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 246 | engines: {node: '>=12'} 247 | cpu: [loong64] 248 | os: [linux] 249 | 250 | '@esbuild/linux-mips64el@0.21.5': 251 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 252 | engines: {node: '>=12'} 253 | cpu: [mips64el] 254 | os: [linux] 255 | 256 | '@esbuild/linux-ppc64@0.21.5': 257 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 258 | engines: {node: '>=12'} 259 | cpu: [ppc64] 260 | os: [linux] 261 | 262 | '@esbuild/linux-riscv64@0.21.5': 263 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 264 | engines: {node: '>=12'} 265 | cpu: [riscv64] 266 | os: [linux] 267 | 268 | '@esbuild/linux-s390x@0.21.5': 269 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 270 | engines: {node: '>=12'} 271 | cpu: [s390x] 272 | os: [linux] 273 | 274 | '@esbuild/linux-x64@0.21.5': 275 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 276 | engines: {node: '>=12'} 277 | cpu: [x64] 278 | os: [linux] 279 | 280 | '@esbuild/netbsd-x64@0.21.5': 281 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 282 | engines: {node: '>=12'} 283 | cpu: [x64] 284 | os: [netbsd] 285 | 286 | '@esbuild/openbsd-x64@0.21.5': 287 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 288 | engines: {node: '>=12'} 289 | cpu: [x64] 290 | os: [openbsd] 291 | 292 | '@esbuild/sunos-x64@0.21.5': 293 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 294 | engines: {node: '>=12'} 295 | cpu: [x64] 296 | os: [sunos] 297 | 298 | '@esbuild/win32-arm64@0.21.5': 299 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 300 | engines: {node: '>=12'} 301 | cpu: [arm64] 302 | os: [win32] 303 | 304 | '@esbuild/win32-ia32@0.21.5': 305 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 306 | engines: {node: '>=12'} 307 | cpu: [ia32] 308 | os: [win32] 309 | 310 | '@esbuild/win32-x64@0.21.5': 311 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 312 | engines: {node: '>=12'} 313 | cpu: [x64] 314 | os: [win32] 315 | 316 | '@floating-ui/core@1.6.2': 317 | resolution: {integrity: sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==} 318 | 319 | '@floating-ui/dom@1.6.5': 320 | resolution: {integrity: sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==} 321 | 322 | '@floating-ui/utils@0.2.2': 323 | resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} 324 | 325 | '@formatjs/ecma402-abstract@2.0.0': 326 | resolution: {integrity: sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==} 327 | 328 | '@formatjs/fast-memoize@2.2.0': 329 | resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==} 330 | 331 | '@formatjs/icu-messageformat-parser@2.7.8': 332 | resolution: {integrity: sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==} 333 | 334 | '@formatjs/icu-skeleton-parser@1.8.2': 335 | resolution: {integrity: sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==} 336 | 337 | '@formatjs/intl-localematcher@0.5.4': 338 | resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==} 339 | 340 | '@internationalized/date@3.5.4': 341 | resolution: {integrity: sha512-qoVJVro+O0rBaw+8HPjUB1iH8Ihf8oziEnqMnvhJUSuVIrHOuZ6eNLHNvzXJKUvAtaDiqMnRlg8Z2mgh09BlUw==} 342 | 343 | '@internationalized/message@3.1.4': 344 | resolution: {integrity: sha512-Dygi9hH1s7V9nha07pggCkvmRfDd3q2lWnMGvrJyrOwYMe1yj4D2T9BoH9I6MGR7xz0biQrtLPsqUkqXzIrBOw==} 345 | 346 | '@internationalized/number@3.5.3': 347 | resolution: {integrity: sha512-rd1wA3ebzlp0Mehj5YTuTI50AQEx80gWFyHcQu+u91/5NgdwBecO8BH6ipPfE+lmQ9d63vpB3H9SHoIUiupllw==} 348 | 349 | '@isaacs/cliui@8.0.2': 350 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 351 | engines: {node: '>=12'} 352 | 353 | '@jridgewell/gen-mapping@0.3.5': 354 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 355 | engines: {node: '>=6.0.0'} 356 | 357 | '@jridgewell/resolve-uri@3.1.2': 358 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 359 | engines: {node: '>=6.0.0'} 360 | 361 | '@jridgewell/set-array@1.2.1': 362 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 363 | engines: {node: '>=6.0.0'} 364 | 365 | '@jridgewell/sourcemap-codec@1.4.15': 366 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 367 | 368 | '@jridgewell/trace-mapping@0.3.25': 369 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 370 | 371 | '@kobalte/core@0.11.2': 372 | resolution: {integrity: sha512-B19TvpmR0E8n7LJqopF0lbMayBErnWJ5MlTTnrgVAFU1up/2Bo1O6ldTK1c5NikmpppzIK2A8ovUwIhRqw/3Uw==} 373 | peerDependencies: 374 | solid-js: ^1.7.11 375 | 376 | '@kobalte/utils@0.9.0': 377 | resolution: {integrity: sha512-TYVCpQcpqo1+0HBn3NXoGEBzxd4tH6Um1oc07nrYw1V7Qq0qbMaYAOnfBc1qhlh7sGV4XZldmb0j13Of0FrZQg==} 378 | peerDependencies: 379 | solid-js: ^1.7.11 380 | 381 | '@nodelib/fs.scandir@2.1.5': 382 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 383 | engines: {node: '>= 8'} 384 | 385 | '@nodelib/fs.stat@2.0.5': 386 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 387 | engines: {node: '>= 8'} 388 | 389 | '@nodelib/fs.walk@1.2.8': 390 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 391 | engines: {node: '>= 8'} 392 | 393 | '@pkgjs/parseargs@0.11.0': 394 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 395 | engines: {node: '>=14'} 396 | 397 | '@rollup/rollup-android-arm-eabi@4.21.2': 398 | resolution: {integrity: sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==} 399 | cpu: [arm] 400 | os: [android] 401 | 402 | '@rollup/rollup-android-arm64@4.21.2': 403 | resolution: {integrity: sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==} 404 | cpu: [arm64] 405 | os: [android] 406 | 407 | '@rollup/rollup-darwin-arm64@4.21.2': 408 | resolution: {integrity: sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==} 409 | cpu: [arm64] 410 | os: [darwin] 411 | 412 | '@rollup/rollup-darwin-x64@4.21.2': 413 | resolution: {integrity: sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==} 414 | cpu: [x64] 415 | os: [darwin] 416 | 417 | '@rollup/rollup-linux-arm-gnueabihf@4.21.2': 418 | resolution: {integrity: sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==} 419 | cpu: [arm] 420 | os: [linux] 421 | 422 | '@rollup/rollup-linux-arm-musleabihf@4.21.2': 423 | resolution: {integrity: sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==} 424 | cpu: [arm] 425 | os: [linux] 426 | 427 | '@rollup/rollup-linux-arm64-gnu@4.21.2': 428 | resolution: {integrity: sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==} 429 | cpu: [arm64] 430 | os: [linux] 431 | 432 | '@rollup/rollup-linux-arm64-musl@4.21.2': 433 | resolution: {integrity: sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==} 434 | cpu: [arm64] 435 | os: [linux] 436 | 437 | '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': 438 | resolution: {integrity: sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==} 439 | cpu: [ppc64] 440 | os: [linux] 441 | 442 | '@rollup/rollup-linux-riscv64-gnu@4.21.2': 443 | resolution: {integrity: sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==} 444 | cpu: [riscv64] 445 | os: [linux] 446 | 447 | '@rollup/rollup-linux-s390x-gnu@4.21.2': 448 | resolution: {integrity: sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==} 449 | cpu: [s390x] 450 | os: [linux] 451 | 452 | '@rollup/rollup-linux-x64-gnu@4.21.2': 453 | resolution: {integrity: sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==} 454 | cpu: [x64] 455 | os: [linux] 456 | 457 | '@rollup/rollup-linux-x64-musl@4.21.2': 458 | resolution: {integrity: sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==} 459 | cpu: [x64] 460 | os: [linux] 461 | 462 | '@rollup/rollup-win32-arm64-msvc@4.21.2': 463 | resolution: {integrity: sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==} 464 | cpu: [arm64] 465 | os: [win32] 466 | 467 | '@rollup/rollup-win32-ia32-msvc@4.21.2': 468 | resolution: {integrity: sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==} 469 | cpu: [ia32] 470 | os: [win32] 471 | 472 | '@rollup/rollup-win32-x64-msvc@4.21.2': 473 | resolution: {integrity: sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==} 474 | cpu: [x64] 475 | os: [win32] 476 | 477 | '@solid-primitives/event-listener@2.3.3': 478 | resolution: {integrity: sha512-DAJbl+F0wrFW2xmcV8dKMBhk9QLVLuBSW+TR4JmIfTaObxd13PuL7nqaXnaYKDWOYa6otB00qcCUIGbuIhSUgQ==} 479 | peerDependencies: 480 | solid-js: ^1.6.12 481 | 482 | '@solid-primitives/keyed@1.2.2': 483 | resolution: {integrity: sha512-oBziY40JK4XmJ57XGkFl8j0GtEarSu0hhjdkUQgqL/U0QQE3TZrRo9uhgH7I6VGJKBKG7SAraTPE6S5lVLM1ow==} 484 | peerDependencies: 485 | solid-js: ^1.6.12 486 | 487 | '@solid-primitives/map@0.4.11': 488 | resolution: {integrity: sha512-OAD65RPxMDYv41oAvadPCqedZfDX92BbWLUC+Qwh9okVMDAF/5UM+t1916OAfGV01Cr30d/fxIT1x86P+gFgSQ==} 489 | peerDependencies: 490 | solid-js: ^1.6.12 491 | 492 | '@solid-primitives/media@2.2.9': 493 | resolution: {integrity: sha512-QUmU62D4/d9YWx/4Dvr/UZasIkIpqNXz7wosA5GLmesRW9XlPa3G5M6uOmTw73SByHNTCw0D6x8bSdtvvLgzvQ==} 494 | peerDependencies: 495 | solid-js: ^1.6.12 496 | 497 | '@solid-primitives/props@3.1.11': 498 | resolution: {integrity: sha512-jZAKWwvDRHjiydIumDgMj68qviIbowQ1ci7nkEAgzgvanNkhKSQV8iPgR2jMk1uv7S2ZqXYHslVQTgJel/TEyg==} 499 | peerDependencies: 500 | solid-js: ^1.6.12 501 | 502 | '@solid-primitives/refs@1.0.8': 503 | resolution: {integrity: sha512-+jIsWG8/nYvhaCoG2Vg6CJOLgTmPKFbaCrNQKWfChalgUf9WrVxWw0CdJb3yX15n5lUcQ0jBo6qYtuVVmBLpBw==} 504 | peerDependencies: 505 | solid-js: ^1.6.12 506 | 507 | '@solid-primitives/rootless@1.4.5': 508 | resolution: {integrity: sha512-GFJE9GC3ojx0aUKqAUZmQPyU8fOVMtnVNrkdk2yS4kd17WqVSpXpoTmo9CnOwA+PG7FTzdIkogvfLQSLs4lrww==} 509 | peerDependencies: 510 | solid-js: ^1.6.12 511 | 512 | '@solid-primitives/static-store@0.0.8': 513 | resolution: {integrity: sha512-ZecE4BqY0oBk0YG00nzaAWO5Mjcny8Fc06CdbXadH9T9lzq/9GefqcSe/5AtdXqjvY/DtJ5C6CkcjPZO0o/eqg==} 514 | peerDependencies: 515 | solid-js: ^1.6.12 516 | 517 | '@solid-primitives/transition-group@1.0.5': 518 | resolution: {integrity: sha512-G3FuqvL13kQ55WzWPX2ewiXdZ/1iboiX53195sq7bbkDbXqP6TYKiadwEdsaDogW5rPnPYAym3+xnsNplQJRKQ==} 519 | peerDependencies: 520 | solid-js: ^1.6.12 521 | 522 | '@solid-primitives/trigger@1.0.11': 523 | resolution: {integrity: sha512-4oc8grBzBit7ByXgE1aZ0QXfhdlhXaiFjDKYsOhRyUJa8fN4hdr2IgsYqjmHwxyjK+Dm2OUwkCI1bGkaLgtgXg==} 524 | peerDependencies: 525 | solid-js: ^1.6.12 526 | 527 | '@solid-primitives/utils@6.2.3': 528 | resolution: {integrity: sha512-CqAwKb2T5Vi72+rhebSsqNZ9o67buYRdEJrIFzRXz3U59QqezuuxPsyzTSVCacwS5Pf109VRsgCJQoxKRoECZQ==} 529 | peerDependencies: 530 | solid-js: ^1.6.12 531 | 532 | '@swc/helpers@0.5.11': 533 | resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==} 534 | 535 | '@tauri-apps/api@2.0.0-beta.13': 536 | resolution: {integrity: sha512-Np1opKANzRMF3lgJ9gDquBCB9SxlE2lRmNpVx1+L6RyzAmigkuh0ZulT5jMnDA3JLsuSDU135r/s4t/Pmx4atg==} 537 | engines: {node: '>= 18', npm: '>= 6.6.0', yarn: '>= 1.19.1'} 538 | 539 | '@tauri-apps/api@2.0.0-rc.4': 540 | resolution: {integrity: sha512-UNiIhhKG08j4ooss2oEEVexffmWkgkYlC2M3GcX3VPtNsqFgVNL8Mcw/4Y7rO9M9S+ffAMnLOF5ypzyuyb8tyg==} 541 | 542 | '@tauri-apps/cli-darwin-arm64@2.0.0-rc.8': 543 | resolution: {integrity: sha512-XDjFLfCz7gOsKg9qFyK7S9EbrdcLhWE2bSTvHDpnFdMc+DcjMR4O3HuCO7SrPmmFUf86OknYFiuMPEUoHf0Fiw==} 544 | engines: {node: '>= 10'} 545 | cpu: [arm64] 546 | os: [darwin] 547 | 548 | '@tauri-apps/cli-darwin-x64@2.0.0-rc.8': 549 | resolution: {integrity: sha512-vYuITao7qq45jzTXRFdAcB+rVBULmofksWsKzoi+cgI8R0kcfB3bts+FRBdV3j+fkbpBQKpriW6Y6gdOzbf6Ow==} 550 | engines: {node: '>= 10'} 551 | cpu: [x64] 552 | os: [darwin] 553 | 554 | '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.8': 555 | resolution: {integrity: sha512-iW1gJyRBvwxCeBEu+ain18v8FtFBhrsqepzuUyOy7hZJWUMPdKHJhbFVz6xp3RGZf5ycsLUr3ZhqMB3vKtv7iQ==} 556 | engines: {node: '>= 10'} 557 | cpu: [arm] 558 | os: [linux] 559 | 560 | '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.8': 561 | resolution: {integrity: sha512-k1HQHpu59B8JteXALCSdCQBUVb+ytsg1u/QEWPzCm7mFhzr7jqdfBjQVAKt0T5rdQQTcNtK341oB7izuXmJE2A==} 562 | engines: {node: '>= 10'} 563 | cpu: [arm64] 564 | os: [linux] 565 | 566 | '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.8': 567 | resolution: {integrity: sha512-tMotP7J/dMqCL8zPCwtMwjeO3SK1yxU9bUMZ3mwdAtf+3xr2d2hpmGo4KXk5r2jQee9+dIC3IBXexFhrVJGRHA==} 568 | engines: {node: '>= 10'} 569 | cpu: [arm64] 570 | os: [linux] 571 | 572 | '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.8': 573 | resolution: {integrity: sha512-AnLghADQgt4oyp4rQyjpKfGpdAqofd+SRO9kht5d4c0RSViqwHBjIxrCt9FDhBpBwwkC6T6NNuQqaofZSnOH6Q==} 574 | engines: {node: '>= 10'} 575 | cpu: [x64] 576 | os: [linux] 577 | 578 | '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.8': 579 | resolution: {integrity: sha512-jv/uiXI2K41/XMA2vnKMcpdv1tKvez70HHvBoIwHhelmXV5V6Tpu5fTMEAXbA6WbJNfcFRi0kd55YRBOS0DZcw==} 580 | engines: {node: '>= 10'} 581 | cpu: [x64] 582 | os: [linux] 583 | 584 | '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.8': 585 | resolution: {integrity: sha512-wctgwSfuyJ0lXBzQSzGq5TAy2m9VZichZPPJ7GitYzdHbqIRLmvxM1abRen7HikP1lpjdmjl96/kWQOebEV0qw==} 586 | engines: {node: '>= 10'} 587 | cpu: [arm64] 588 | os: [win32] 589 | 590 | '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.8': 591 | resolution: {integrity: sha512-BBjoAezNpHscGhBICHrt+X+IyJIh9jYnaEIGvbCIMcGB6sSDxvtttw4ef9+4jNh3JixotOR2mwIudTc1H9HffQ==} 592 | engines: {node: '>= 10'} 593 | cpu: [ia32] 594 | os: [win32] 595 | 596 | '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.8': 597 | resolution: {integrity: sha512-1pgDw2woeyDMvXctmqc53LBxsaAYqiRNUVgwvzlmzJDbUHv4+Pj4B1OGKQh1YKlsmks8LK3mK9uSbk+k1OLZhw==} 598 | engines: {node: '>= 10'} 599 | cpu: [x64] 600 | os: [win32] 601 | 602 | '@tauri-apps/cli@2.0.0-rc.8': 603 | resolution: {integrity: sha512-hB6Pa0IaJs/As3Hc5IOiiK4Ilh9jspEA+2uPURCRQg4BkzQWwQzNdGQ4gjAzFNFAWPzy/4uuIXdnd1a+jC4wLA==} 604 | engines: {node: '>= 10'} 605 | hasBin: true 606 | 607 | '@tauri-apps/plugin-dialog@2.0.0-beta.5': 608 | resolution: {integrity: sha512-jkaBCsx2v6WB6sB77fTMCeijuvT3FlzwschiHnPlD7aU6CHvQgRlpCv/FttPdTq4ih2t6MIlM4oX85hNYgfs6w==} 609 | 610 | '@tauri-apps/plugin-fs@2.0.0-beta.5': 611 | resolution: {integrity: sha512-uTqCDFA1z8KDtTe5fKlbRrKV4zxh63UVUvD/PR8GnyNLV+qxj/fEuJuGvMdfMbVKrTljGqSpun5wnP5jqD5fMg==} 612 | 613 | '@tauri-apps/plugin-process@2.0.0-beta.5': 614 | resolution: {integrity: sha512-UMiBm6TtNYfxRb6GwzA4PalkZGwalHdclI/t0MVG33fNXgX1PaWONR/NZW/k7JE+WpvRAnN/Kf9ur8aEzjVVSQ==} 615 | 616 | '@tauri-apps/plugin-shell@2.0.0-rc.1': 617 | resolution: {integrity: sha512-JtNROc0rqEwN/g93ig5pK4cl1vUo2yn+osCpY9de64cy/d9hRzof7AuYOgvt/Xcd5VPQmlgo2AGvUh5sQRSR1A==} 618 | 619 | '@tauri-apps/plugin-updater@2.0.0-beta.5': 620 | resolution: {integrity: sha512-h8uNFQDtXaZPFyQcNAB5SxiSIvPbYRlM1fXf/lCcW8bAaMTanyszbHvR2vAYtVa/wIzKAOYriC/MpsJaKLjyhg==} 621 | 622 | '@types/babel__core@7.20.5': 623 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 624 | 625 | '@types/babel__generator@7.6.8': 626 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 627 | 628 | '@types/babel__template@7.4.4': 629 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 630 | 631 | '@types/babel__traverse@7.20.6': 632 | resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 633 | 634 | '@types/estree@1.0.5': 635 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 636 | 637 | ansi-regex@5.0.1: 638 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 639 | engines: {node: '>=8'} 640 | 641 | ansi-regex@6.0.1: 642 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 643 | engines: {node: '>=12'} 644 | 645 | ansi-styles@3.2.1: 646 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 647 | engines: {node: '>=4'} 648 | 649 | ansi-styles@4.3.0: 650 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 651 | engines: {node: '>=8'} 652 | 653 | ansi-styles@6.2.1: 654 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 655 | engines: {node: '>=12'} 656 | 657 | any-promise@1.3.0: 658 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 659 | 660 | anymatch@3.1.3: 661 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 662 | engines: {node: '>= 8'} 663 | 664 | arg@5.0.2: 665 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 666 | 667 | autoprefixer@10.4.20: 668 | resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} 669 | engines: {node: ^10 || ^12 || >=14} 670 | hasBin: true 671 | peerDependencies: 672 | postcss: ^8.1.0 673 | 674 | babel-plugin-jsx-dom-expressions@0.37.21: 675 | resolution: {integrity: sha512-WbQo1NQ241oki8bYasVzkMXOTSIri5GO/K47rYJb2ZBh8GaPUEWiWbMV3KwXz+96eU2i54N6ThzjQG/f5n8Azw==} 676 | peerDependencies: 677 | '@babel/core': ^7.20.12 678 | 679 | babel-preset-solid@1.8.17: 680 | resolution: {integrity: sha512-s/FfTZOeds0hYxYqce90Jb+0ycN2lrzC7VP1k1JIn3wBqcaexDKdYi6xjB+hMNkL+Q6HobKbwsriqPloasR9LA==} 681 | peerDependencies: 682 | '@babel/core': ^7.0.0 683 | 684 | balanced-match@1.0.2: 685 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 686 | 687 | binary-extensions@2.3.0: 688 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 689 | engines: {node: '>=8'} 690 | 691 | brace-expansion@2.0.1: 692 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 693 | 694 | braces@3.0.3: 695 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 696 | engines: {node: '>=8'} 697 | 698 | browserslist@4.23.3: 699 | resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} 700 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 701 | hasBin: true 702 | 703 | camelcase-css@2.0.1: 704 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 705 | engines: {node: '>= 6'} 706 | 707 | caniuse-lite@1.0.30001655: 708 | resolution: {integrity: sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==} 709 | 710 | chalk@2.4.2: 711 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 712 | engines: {node: '>=4'} 713 | 714 | chokidar@3.6.0: 715 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 716 | engines: {node: '>= 8.10.0'} 717 | 718 | color-convert@1.9.3: 719 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 720 | 721 | color-convert@2.0.1: 722 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 723 | engines: {node: '>=7.0.0'} 724 | 725 | color-name@1.1.3: 726 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 727 | 728 | color-name@1.1.4: 729 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 730 | 731 | commander@4.1.1: 732 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 733 | engines: {node: '>= 6'} 734 | 735 | convert-source-map@2.0.0: 736 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 737 | 738 | cross-spawn@7.0.3: 739 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 740 | engines: {node: '>= 8'} 741 | 742 | cssesc@3.0.0: 743 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 744 | engines: {node: '>=4'} 745 | hasBin: true 746 | 747 | csstype@3.1.3: 748 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 749 | 750 | debug@4.3.4: 751 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 752 | engines: {node: '>=6.0'} 753 | peerDependencies: 754 | supports-color: '*' 755 | peerDependenciesMeta: 756 | supports-color: 757 | optional: true 758 | 759 | default-gateway@6.0.3: 760 | resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} 761 | engines: {node: '>= 10'} 762 | 763 | didyoumean@1.2.2: 764 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 765 | 766 | dlv@1.1.3: 767 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 768 | 769 | eastasianwidth@0.2.0: 770 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 771 | 772 | electron-to-chromium@1.5.13: 773 | resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} 774 | 775 | emoji-regex@8.0.0: 776 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 777 | 778 | emoji-regex@9.2.2: 779 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 780 | 781 | esbuild@0.21.5: 782 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 783 | engines: {node: '>=12'} 784 | hasBin: true 785 | 786 | escalade@3.2.0: 787 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 788 | engines: {node: '>=6'} 789 | 790 | escape-string-regexp@1.0.5: 791 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 792 | engines: {node: '>=0.8.0'} 793 | 794 | execa@5.1.1: 795 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 796 | engines: {node: '>=10'} 797 | 798 | fast-glob@3.3.2: 799 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 800 | engines: {node: '>=8.6.0'} 801 | 802 | fastq@1.17.1: 803 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 804 | 805 | fill-range@7.1.1: 806 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 807 | engines: {node: '>=8'} 808 | 809 | foreground-child@3.1.1: 810 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} 811 | engines: {node: '>=14'} 812 | 813 | fraction.js@4.3.7: 814 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 815 | 816 | fsevents@2.3.3: 817 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 818 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 819 | os: [darwin] 820 | 821 | function-bind@1.1.2: 822 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 823 | 824 | gensync@1.0.0-beta.2: 825 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 826 | engines: {node: '>=6.9.0'} 827 | 828 | get-stream@6.0.1: 829 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 830 | engines: {node: '>=10'} 831 | 832 | glob-parent@5.1.2: 833 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 834 | engines: {node: '>= 6'} 835 | 836 | glob-parent@6.0.2: 837 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 838 | engines: {node: '>=10.13.0'} 839 | 840 | glob@10.4.1: 841 | resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} 842 | engines: {node: '>=16 || 14 >=14.18'} 843 | hasBin: true 844 | 845 | globals@11.12.0: 846 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 847 | engines: {node: '>=4'} 848 | 849 | has-flag@3.0.0: 850 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 851 | engines: {node: '>=4'} 852 | 853 | hasown@2.0.2: 854 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 855 | engines: {node: '>= 0.4'} 856 | 857 | html-entities@2.3.3: 858 | resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} 859 | 860 | human-signals@2.1.0: 861 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 862 | engines: {node: '>=10.17.0'} 863 | 864 | internal-ip@7.0.0: 865 | resolution: {integrity: sha512-qE4TeD4brqC45Vq/+VASeMiS1KRyfBkR6HT2sh9pZVVCzSjPkaCEfKFU+dL0PRv7NHJtvoKN2r82G6wTfzorkw==} 866 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 867 | 868 | intl-messageformat@10.5.14: 869 | resolution: {integrity: sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==} 870 | 871 | ip-regex@4.3.0: 872 | resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} 873 | engines: {node: '>=8'} 874 | 875 | ipaddr.js@2.2.0: 876 | resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} 877 | engines: {node: '>= 10'} 878 | 879 | is-binary-path@2.1.0: 880 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 881 | engines: {node: '>=8'} 882 | 883 | is-core-module@2.13.1: 884 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 885 | 886 | is-extglob@2.1.1: 887 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 888 | engines: {node: '>=0.10.0'} 889 | 890 | is-fullwidth-code-point@3.0.0: 891 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 892 | engines: {node: '>=8'} 893 | 894 | is-glob@4.0.3: 895 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 896 | engines: {node: '>=0.10.0'} 897 | 898 | is-ip@3.1.0: 899 | resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} 900 | engines: {node: '>=8'} 901 | 902 | is-number@7.0.0: 903 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 904 | engines: {node: '>=0.12.0'} 905 | 906 | is-stream@2.0.1: 907 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 908 | engines: {node: '>=8'} 909 | 910 | is-what@4.1.16: 911 | resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 912 | engines: {node: '>=12.13'} 913 | 914 | isexe@2.0.0: 915 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 916 | 917 | jackspeak@3.1.2: 918 | resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==} 919 | engines: {node: '>=14'} 920 | 921 | jiti@1.21.0: 922 | resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} 923 | hasBin: true 924 | 925 | js-tokens@4.0.0: 926 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 927 | 928 | jsesc@2.5.2: 929 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 930 | engines: {node: '>=4'} 931 | hasBin: true 932 | 933 | json5@2.2.3: 934 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 935 | engines: {node: '>=6'} 936 | hasBin: true 937 | 938 | lilconfig@2.1.0: 939 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 940 | engines: {node: '>=10'} 941 | 942 | lilconfig@3.1.1: 943 | resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} 944 | engines: {node: '>=14'} 945 | 946 | lines-and-columns@1.2.4: 947 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 948 | 949 | lru-cache@10.2.2: 950 | resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} 951 | engines: {node: 14 || >=16.14} 952 | 953 | lru-cache@5.1.1: 954 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 955 | 956 | merge-anything@5.1.7: 957 | resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} 958 | engines: {node: '>=12.13'} 959 | 960 | merge-stream@2.0.0: 961 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 962 | 963 | merge2@1.4.1: 964 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 965 | engines: {node: '>= 8'} 966 | 967 | micromatch@4.0.7: 968 | resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} 969 | engines: {node: '>=8.6'} 970 | 971 | mimic-fn@2.1.0: 972 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 973 | engines: {node: '>=6'} 974 | 975 | minimatch@9.0.4: 976 | resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} 977 | engines: {node: '>=16 || 14 >=14.17'} 978 | 979 | minipass@7.1.2: 980 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 981 | engines: {node: '>=16 || 14 >=14.17'} 982 | 983 | ms@2.1.2: 984 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 985 | 986 | mz@2.7.0: 987 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 988 | 989 | nanoid@3.3.7: 990 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 991 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 992 | hasBin: true 993 | 994 | node-releases@2.0.18: 995 | resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} 996 | 997 | normalize-path@3.0.0: 998 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 999 | engines: {node: '>=0.10.0'} 1000 | 1001 | normalize-range@0.1.2: 1002 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 1003 | engines: {node: '>=0.10.0'} 1004 | 1005 | npm-run-path@4.0.1: 1006 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1007 | engines: {node: '>=8'} 1008 | 1009 | object-assign@4.1.1: 1010 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1011 | engines: {node: '>=0.10.0'} 1012 | 1013 | object-hash@3.0.0: 1014 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1015 | engines: {node: '>= 6'} 1016 | 1017 | onetime@5.1.2: 1018 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1019 | engines: {node: '>=6'} 1020 | 1021 | p-event@4.2.0: 1022 | resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} 1023 | engines: {node: '>=8'} 1024 | 1025 | p-finally@1.0.0: 1026 | resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} 1027 | engines: {node: '>=4'} 1028 | 1029 | p-timeout@3.2.0: 1030 | resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} 1031 | engines: {node: '>=8'} 1032 | 1033 | path-key@3.1.1: 1034 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1035 | engines: {node: '>=8'} 1036 | 1037 | path-parse@1.0.7: 1038 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1039 | 1040 | path-scurry@1.11.1: 1041 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1042 | engines: {node: '>=16 || 14 >=14.18'} 1043 | 1044 | picocolors@1.0.1: 1045 | resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} 1046 | 1047 | picomatch@2.3.1: 1048 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1049 | engines: {node: '>=8.6'} 1050 | 1051 | pify@2.3.0: 1052 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1053 | engines: {node: '>=0.10.0'} 1054 | 1055 | pirates@4.0.6: 1056 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1057 | engines: {node: '>= 6'} 1058 | 1059 | postcss-import@15.1.0: 1060 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 1061 | engines: {node: '>=14.0.0'} 1062 | peerDependencies: 1063 | postcss: ^8.0.0 1064 | 1065 | postcss-js@4.0.1: 1066 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 1067 | engines: {node: ^12 || ^14 || >= 16} 1068 | peerDependencies: 1069 | postcss: ^8.4.21 1070 | 1071 | postcss-load-config@4.0.2: 1072 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 1073 | engines: {node: '>= 14'} 1074 | peerDependencies: 1075 | postcss: '>=8.0.9' 1076 | ts-node: '>=9.0.0' 1077 | peerDependenciesMeta: 1078 | postcss: 1079 | optional: true 1080 | ts-node: 1081 | optional: true 1082 | 1083 | postcss-nested@6.0.1: 1084 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 1085 | engines: {node: '>=12.0'} 1086 | peerDependencies: 1087 | postcss: ^8.2.14 1088 | 1089 | postcss-selector-parser@6.1.0: 1090 | resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} 1091 | engines: {node: '>=4'} 1092 | 1093 | postcss-value-parser@4.2.0: 1094 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1095 | 1096 | postcss@8.4.41: 1097 | resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} 1098 | engines: {node: ^10 || ^12 || >=14} 1099 | 1100 | prettier@3.3.3: 1101 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} 1102 | engines: {node: '>=14'} 1103 | hasBin: true 1104 | 1105 | queue-microtask@1.2.3: 1106 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1107 | 1108 | read-cache@1.0.0: 1109 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 1110 | 1111 | readdirp@3.6.0: 1112 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1113 | engines: {node: '>=8.10.0'} 1114 | 1115 | resolve@1.22.8: 1116 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1117 | hasBin: true 1118 | 1119 | reusify@1.0.4: 1120 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1121 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1122 | 1123 | rollup@4.21.2: 1124 | resolution: {integrity: sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==} 1125 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1126 | hasBin: true 1127 | 1128 | run-parallel@1.2.0: 1129 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1130 | 1131 | semver@6.3.1: 1132 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1133 | hasBin: true 1134 | 1135 | seroval-plugins@1.1.1: 1136 | resolution: {integrity: sha512-qNSy1+nUj7hsCOon7AO4wdAIo9P0jrzAMp18XhiOzA6/uO5TKtP7ScozVJ8T293oRIvi5wyCHSM4TrJo/c/GJA==} 1137 | engines: {node: '>=10'} 1138 | peerDependencies: 1139 | seroval: ^1.0 1140 | 1141 | seroval@1.1.1: 1142 | resolution: {integrity: sha512-rqEO6FZk8mv7Hyv4UCj3FD3b6Waqft605TLfsCe/BiaylRpyyMC0b+uA5TJKawX3KzMrdi3wsLbCaLplrQmBvQ==} 1143 | engines: {node: '>=10'} 1144 | 1145 | shebang-command@2.0.0: 1146 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1147 | engines: {node: '>=8'} 1148 | 1149 | shebang-regex@3.0.0: 1150 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1151 | engines: {node: '>=8'} 1152 | 1153 | signal-exit@3.0.7: 1154 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1155 | 1156 | signal-exit@4.1.0: 1157 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1158 | engines: {node: '>=14'} 1159 | 1160 | solid-js@1.8.22: 1161 | resolution: {integrity: sha512-VBzN5j+9Y4rqIKEnK301aBk+S7fvFSTs9ljg+YEdFxjNjH0hkjXPiQRcws9tE5fUzMznSS6KToL5hwMfHDgpLA==} 1162 | 1163 | solid-refresh@0.6.3: 1164 | resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} 1165 | peerDependencies: 1166 | solid-js: ^1.3 1167 | 1168 | solid-transition-group@0.2.3: 1169 | resolution: {integrity: sha512-iB72c9N5Kz9ykRqIXl0lQohOau4t0dhel9kjwFvx81UZJbVwaChMuBuyhiZmK24b8aKEK0w3uFM96ZxzcyZGdg==} 1170 | engines: {node: '>=18.0.0', pnpm: '>=8.6.0'} 1171 | peerDependencies: 1172 | solid-js: ^1.6.12 1173 | 1174 | source-map-js@1.2.0: 1175 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 1176 | engines: {node: '>=0.10.0'} 1177 | 1178 | string-width@4.2.3: 1179 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1180 | engines: {node: '>=8'} 1181 | 1182 | string-width@5.1.2: 1183 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1184 | engines: {node: '>=12'} 1185 | 1186 | strip-ansi@6.0.1: 1187 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1188 | engines: {node: '>=8'} 1189 | 1190 | strip-ansi@7.1.0: 1191 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1192 | engines: {node: '>=12'} 1193 | 1194 | strip-final-newline@2.0.0: 1195 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1196 | engines: {node: '>=6'} 1197 | 1198 | sucrase@3.35.0: 1199 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1200 | engines: {node: '>=16 || 14 >=14.17'} 1201 | hasBin: true 1202 | 1203 | supports-color@5.5.0: 1204 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1205 | engines: {node: '>=4'} 1206 | 1207 | supports-preserve-symlinks-flag@1.0.0: 1208 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1209 | engines: {node: '>= 0.4'} 1210 | 1211 | tailwindcss@3.4.10: 1212 | resolution: {integrity: sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==} 1213 | engines: {node: '>=14.0.0'} 1214 | hasBin: true 1215 | 1216 | thenify-all@1.6.0: 1217 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1218 | engines: {node: '>=0.8'} 1219 | 1220 | thenify@3.3.1: 1221 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1222 | 1223 | to-fast-properties@2.0.0: 1224 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1225 | engines: {node: '>=4'} 1226 | 1227 | to-regex-range@5.0.1: 1228 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1229 | engines: {node: '>=8.0'} 1230 | 1231 | ts-interface-checker@0.1.13: 1232 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1233 | 1234 | tslib@2.6.2: 1235 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1236 | 1237 | typescript@5.5.4: 1238 | resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} 1239 | engines: {node: '>=14.17'} 1240 | hasBin: true 1241 | 1242 | update-browserslist-db@1.1.0: 1243 | resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} 1244 | hasBin: true 1245 | peerDependencies: 1246 | browserslist: '>= 4.21.0' 1247 | 1248 | util-deprecate@1.0.2: 1249 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1250 | 1251 | validate-html-nesting@1.2.2: 1252 | resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} 1253 | 1254 | vite-plugin-solid@2.10.2: 1255 | resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} 1256 | peerDependencies: 1257 | '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* 1258 | solid-js: ^1.7.2 1259 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 1260 | peerDependenciesMeta: 1261 | '@testing-library/jest-dom': 1262 | optional: true 1263 | 1264 | vite@5.4.2: 1265 | resolution: {integrity: sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==} 1266 | engines: {node: ^18.0.0 || >=20.0.0} 1267 | hasBin: true 1268 | peerDependencies: 1269 | '@types/node': ^18.0.0 || >=20.0.0 1270 | less: '*' 1271 | lightningcss: ^1.21.0 1272 | sass: '*' 1273 | sass-embedded: '*' 1274 | stylus: '*' 1275 | sugarss: '*' 1276 | terser: ^5.4.0 1277 | peerDependenciesMeta: 1278 | '@types/node': 1279 | optional: true 1280 | less: 1281 | optional: true 1282 | lightningcss: 1283 | optional: true 1284 | sass: 1285 | optional: true 1286 | sass-embedded: 1287 | optional: true 1288 | stylus: 1289 | optional: true 1290 | sugarss: 1291 | optional: true 1292 | terser: 1293 | optional: true 1294 | 1295 | vitefu@0.2.5: 1296 | resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} 1297 | peerDependencies: 1298 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 1299 | peerDependenciesMeta: 1300 | vite: 1301 | optional: true 1302 | 1303 | which@2.0.2: 1304 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1305 | engines: {node: '>= 8'} 1306 | hasBin: true 1307 | 1308 | wrap-ansi@7.0.0: 1309 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1310 | engines: {node: '>=10'} 1311 | 1312 | wrap-ansi@8.1.0: 1313 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1314 | engines: {node: '>=12'} 1315 | 1316 | yallist@3.1.1: 1317 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1318 | 1319 | yaml@2.4.2: 1320 | resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} 1321 | engines: {node: '>= 14'} 1322 | hasBin: true 1323 | 1324 | snapshots: 1325 | 1326 | '@alloc/quick-lru@5.2.0': {} 1327 | 1328 | '@ampproject/remapping@2.3.0': 1329 | dependencies: 1330 | '@jridgewell/gen-mapping': 0.3.5 1331 | '@jridgewell/trace-mapping': 0.3.25 1332 | 1333 | '@babel/code-frame@7.24.6': 1334 | dependencies: 1335 | '@babel/highlight': 7.24.6 1336 | picocolors: 1.0.1 1337 | 1338 | '@babel/compat-data@7.24.6': {} 1339 | 1340 | '@babel/core@7.24.6': 1341 | dependencies: 1342 | '@ampproject/remapping': 2.3.0 1343 | '@babel/code-frame': 7.24.6 1344 | '@babel/generator': 7.24.6 1345 | '@babel/helper-compilation-targets': 7.24.6 1346 | '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) 1347 | '@babel/helpers': 7.24.6 1348 | '@babel/parser': 7.24.6 1349 | '@babel/template': 7.24.6 1350 | '@babel/traverse': 7.24.6 1351 | '@babel/types': 7.24.6 1352 | convert-source-map: 2.0.0 1353 | debug: 4.3.4 1354 | gensync: 1.0.0-beta.2 1355 | json5: 2.2.3 1356 | semver: 6.3.1 1357 | transitivePeerDependencies: 1358 | - supports-color 1359 | 1360 | '@babel/generator@7.24.6': 1361 | dependencies: 1362 | '@babel/types': 7.24.6 1363 | '@jridgewell/gen-mapping': 0.3.5 1364 | '@jridgewell/trace-mapping': 0.3.25 1365 | jsesc: 2.5.2 1366 | 1367 | '@babel/helper-compilation-targets@7.24.6': 1368 | dependencies: 1369 | '@babel/compat-data': 7.24.6 1370 | '@babel/helper-validator-option': 7.24.6 1371 | browserslist: 4.23.3 1372 | lru-cache: 5.1.1 1373 | semver: 6.3.1 1374 | 1375 | '@babel/helper-environment-visitor@7.24.6': {} 1376 | 1377 | '@babel/helper-function-name@7.24.6': 1378 | dependencies: 1379 | '@babel/template': 7.24.6 1380 | '@babel/types': 7.24.6 1381 | 1382 | '@babel/helper-hoist-variables@7.24.6': 1383 | dependencies: 1384 | '@babel/types': 7.24.6 1385 | 1386 | '@babel/helper-module-imports@7.18.6': 1387 | dependencies: 1388 | '@babel/types': 7.24.6 1389 | 1390 | '@babel/helper-module-imports@7.24.6': 1391 | dependencies: 1392 | '@babel/types': 7.24.6 1393 | 1394 | '@babel/helper-module-transforms@7.24.6(@babel/core@7.24.6)': 1395 | dependencies: 1396 | '@babel/core': 7.24.6 1397 | '@babel/helper-environment-visitor': 7.24.6 1398 | '@babel/helper-module-imports': 7.24.6 1399 | '@babel/helper-simple-access': 7.24.6 1400 | '@babel/helper-split-export-declaration': 7.24.6 1401 | '@babel/helper-validator-identifier': 7.24.6 1402 | 1403 | '@babel/helper-plugin-utils@7.24.6': {} 1404 | 1405 | '@babel/helper-simple-access@7.24.6': 1406 | dependencies: 1407 | '@babel/types': 7.24.6 1408 | 1409 | '@babel/helper-split-export-declaration@7.24.6': 1410 | dependencies: 1411 | '@babel/types': 7.24.6 1412 | 1413 | '@babel/helper-string-parser@7.24.6': {} 1414 | 1415 | '@babel/helper-validator-identifier@7.24.6': {} 1416 | 1417 | '@babel/helper-validator-option@7.24.6': {} 1418 | 1419 | '@babel/helpers@7.24.6': 1420 | dependencies: 1421 | '@babel/template': 7.24.6 1422 | '@babel/types': 7.24.6 1423 | 1424 | '@babel/highlight@7.24.6': 1425 | dependencies: 1426 | '@babel/helper-validator-identifier': 7.24.6 1427 | chalk: 2.4.2 1428 | js-tokens: 4.0.0 1429 | picocolors: 1.0.1 1430 | 1431 | '@babel/parser@7.24.6': 1432 | dependencies: 1433 | '@babel/types': 7.24.6 1434 | 1435 | '@babel/plugin-syntax-jsx@7.24.6(@babel/core@7.24.6)': 1436 | dependencies: 1437 | '@babel/core': 7.24.6 1438 | '@babel/helper-plugin-utils': 7.24.6 1439 | 1440 | '@babel/template@7.24.6': 1441 | dependencies: 1442 | '@babel/code-frame': 7.24.6 1443 | '@babel/parser': 7.24.6 1444 | '@babel/types': 7.24.6 1445 | 1446 | '@babel/traverse@7.24.6': 1447 | dependencies: 1448 | '@babel/code-frame': 7.24.6 1449 | '@babel/generator': 7.24.6 1450 | '@babel/helper-environment-visitor': 7.24.6 1451 | '@babel/helper-function-name': 7.24.6 1452 | '@babel/helper-hoist-variables': 7.24.6 1453 | '@babel/helper-split-export-declaration': 7.24.6 1454 | '@babel/parser': 7.24.6 1455 | '@babel/types': 7.24.6 1456 | debug: 4.3.4 1457 | globals: 11.12.0 1458 | transitivePeerDependencies: 1459 | - supports-color 1460 | 1461 | '@babel/types@7.24.6': 1462 | dependencies: 1463 | '@babel/helper-string-parser': 7.24.6 1464 | '@babel/helper-validator-identifier': 7.24.6 1465 | to-fast-properties: 2.0.0 1466 | 1467 | '@esbuild/aix-ppc64@0.21.5': 1468 | optional: true 1469 | 1470 | '@esbuild/android-arm64@0.21.5': 1471 | optional: true 1472 | 1473 | '@esbuild/android-arm@0.21.5': 1474 | optional: true 1475 | 1476 | '@esbuild/android-x64@0.21.5': 1477 | optional: true 1478 | 1479 | '@esbuild/darwin-arm64@0.21.5': 1480 | optional: true 1481 | 1482 | '@esbuild/darwin-x64@0.21.5': 1483 | optional: true 1484 | 1485 | '@esbuild/freebsd-arm64@0.21.5': 1486 | optional: true 1487 | 1488 | '@esbuild/freebsd-x64@0.21.5': 1489 | optional: true 1490 | 1491 | '@esbuild/linux-arm64@0.21.5': 1492 | optional: true 1493 | 1494 | '@esbuild/linux-arm@0.21.5': 1495 | optional: true 1496 | 1497 | '@esbuild/linux-ia32@0.21.5': 1498 | optional: true 1499 | 1500 | '@esbuild/linux-loong64@0.21.5': 1501 | optional: true 1502 | 1503 | '@esbuild/linux-mips64el@0.21.5': 1504 | optional: true 1505 | 1506 | '@esbuild/linux-ppc64@0.21.5': 1507 | optional: true 1508 | 1509 | '@esbuild/linux-riscv64@0.21.5': 1510 | optional: true 1511 | 1512 | '@esbuild/linux-s390x@0.21.5': 1513 | optional: true 1514 | 1515 | '@esbuild/linux-x64@0.21.5': 1516 | optional: true 1517 | 1518 | '@esbuild/netbsd-x64@0.21.5': 1519 | optional: true 1520 | 1521 | '@esbuild/openbsd-x64@0.21.5': 1522 | optional: true 1523 | 1524 | '@esbuild/sunos-x64@0.21.5': 1525 | optional: true 1526 | 1527 | '@esbuild/win32-arm64@0.21.5': 1528 | optional: true 1529 | 1530 | '@esbuild/win32-ia32@0.21.5': 1531 | optional: true 1532 | 1533 | '@esbuild/win32-x64@0.21.5': 1534 | optional: true 1535 | 1536 | '@floating-ui/core@1.6.2': 1537 | dependencies: 1538 | '@floating-ui/utils': 0.2.2 1539 | 1540 | '@floating-ui/dom@1.6.5': 1541 | dependencies: 1542 | '@floating-ui/core': 1.6.2 1543 | '@floating-ui/utils': 0.2.2 1544 | 1545 | '@floating-ui/utils@0.2.2': {} 1546 | 1547 | '@formatjs/ecma402-abstract@2.0.0': 1548 | dependencies: 1549 | '@formatjs/intl-localematcher': 0.5.4 1550 | tslib: 2.6.2 1551 | 1552 | '@formatjs/fast-memoize@2.2.0': 1553 | dependencies: 1554 | tslib: 2.6.2 1555 | 1556 | '@formatjs/icu-messageformat-parser@2.7.8': 1557 | dependencies: 1558 | '@formatjs/ecma402-abstract': 2.0.0 1559 | '@formatjs/icu-skeleton-parser': 1.8.2 1560 | tslib: 2.6.2 1561 | 1562 | '@formatjs/icu-skeleton-parser@1.8.2': 1563 | dependencies: 1564 | '@formatjs/ecma402-abstract': 2.0.0 1565 | tslib: 2.6.2 1566 | 1567 | '@formatjs/intl-localematcher@0.5.4': 1568 | dependencies: 1569 | tslib: 2.6.2 1570 | 1571 | '@internationalized/date@3.5.4': 1572 | dependencies: 1573 | '@swc/helpers': 0.5.11 1574 | 1575 | '@internationalized/message@3.1.4': 1576 | dependencies: 1577 | '@swc/helpers': 0.5.11 1578 | intl-messageformat: 10.5.14 1579 | 1580 | '@internationalized/number@3.5.3': 1581 | dependencies: 1582 | '@swc/helpers': 0.5.11 1583 | 1584 | '@isaacs/cliui@8.0.2': 1585 | dependencies: 1586 | string-width: 5.1.2 1587 | string-width-cjs: string-width@4.2.3 1588 | strip-ansi: 7.1.0 1589 | strip-ansi-cjs: strip-ansi@6.0.1 1590 | wrap-ansi: 8.1.0 1591 | wrap-ansi-cjs: wrap-ansi@7.0.0 1592 | 1593 | '@jridgewell/gen-mapping@0.3.5': 1594 | dependencies: 1595 | '@jridgewell/set-array': 1.2.1 1596 | '@jridgewell/sourcemap-codec': 1.4.15 1597 | '@jridgewell/trace-mapping': 0.3.25 1598 | 1599 | '@jridgewell/resolve-uri@3.1.2': {} 1600 | 1601 | '@jridgewell/set-array@1.2.1': {} 1602 | 1603 | '@jridgewell/sourcemap-codec@1.4.15': {} 1604 | 1605 | '@jridgewell/trace-mapping@0.3.25': 1606 | dependencies: 1607 | '@jridgewell/resolve-uri': 3.1.2 1608 | '@jridgewell/sourcemap-codec': 1.4.15 1609 | 1610 | '@kobalte/core@0.11.2(solid-js@1.8.22)': 1611 | dependencies: 1612 | '@floating-ui/dom': 1.6.5 1613 | '@internationalized/date': 3.5.4 1614 | '@internationalized/message': 3.1.4 1615 | '@internationalized/number': 3.5.3 1616 | '@kobalte/utils': 0.9.0(solid-js@1.8.22) 1617 | solid-js: 1.8.22 1618 | 1619 | '@kobalte/utils@0.9.0(solid-js@1.8.22)': 1620 | dependencies: 1621 | '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.22) 1622 | '@solid-primitives/keyed': 1.2.2(solid-js@1.8.22) 1623 | '@solid-primitives/map': 0.4.11(solid-js@1.8.22) 1624 | '@solid-primitives/media': 2.2.9(solid-js@1.8.22) 1625 | '@solid-primitives/props': 3.1.11(solid-js@1.8.22) 1626 | '@solid-primitives/refs': 1.0.8(solid-js@1.8.22) 1627 | '@solid-primitives/utils': 6.2.3(solid-js@1.8.22) 1628 | solid-js: 1.8.22 1629 | 1630 | '@nodelib/fs.scandir@2.1.5': 1631 | dependencies: 1632 | '@nodelib/fs.stat': 2.0.5 1633 | run-parallel: 1.2.0 1634 | 1635 | '@nodelib/fs.stat@2.0.5': {} 1636 | 1637 | '@nodelib/fs.walk@1.2.8': 1638 | dependencies: 1639 | '@nodelib/fs.scandir': 2.1.5 1640 | fastq: 1.17.1 1641 | 1642 | '@pkgjs/parseargs@0.11.0': 1643 | optional: true 1644 | 1645 | '@rollup/rollup-android-arm-eabi@4.21.2': 1646 | optional: true 1647 | 1648 | '@rollup/rollup-android-arm64@4.21.2': 1649 | optional: true 1650 | 1651 | '@rollup/rollup-darwin-arm64@4.21.2': 1652 | optional: true 1653 | 1654 | '@rollup/rollup-darwin-x64@4.21.2': 1655 | optional: true 1656 | 1657 | '@rollup/rollup-linux-arm-gnueabihf@4.21.2': 1658 | optional: true 1659 | 1660 | '@rollup/rollup-linux-arm-musleabihf@4.21.2': 1661 | optional: true 1662 | 1663 | '@rollup/rollup-linux-arm64-gnu@4.21.2': 1664 | optional: true 1665 | 1666 | '@rollup/rollup-linux-arm64-musl@4.21.2': 1667 | optional: true 1668 | 1669 | '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': 1670 | optional: true 1671 | 1672 | '@rollup/rollup-linux-riscv64-gnu@4.21.2': 1673 | optional: true 1674 | 1675 | '@rollup/rollup-linux-s390x-gnu@4.21.2': 1676 | optional: true 1677 | 1678 | '@rollup/rollup-linux-x64-gnu@4.21.2': 1679 | optional: true 1680 | 1681 | '@rollup/rollup-linux-x64-musl@4.21.2': 1682 | optional: true 1683 | 1684 | '@rollup/rollup-win32-arm64-msvc@4.21.2': 1685 | optional: true 1686 | 1687 | '@rollup/rollup-win32-ia32-msvc@4.21.2': 1688 | optional: true 1689 | 1690 | '@rollup/rollup-win32-x64-msvc@4.21.2': 1691 | optional: true 1692 | 1693 | '@solid-primitives/event-listener@2.3.3(solid-js@1.8.22)': 1694 | dependencies: 1695 | '@solid-primitives/utils': 6.2.3(solid-js@1.8.22) 1696 | solid-js: 1.8.22 1697 | 1698 | '@solid-primitives/keyed@1.2.2(solid-js@1.8.22)': 1699 | dependencies: 1700 | solid-js: 1.8.22 1701 | 1702 | '@solid-primitives/map@0.4.11(solid-js@1.8.22)': 1703 | dependencies: 1704 | '@solid-primitives/trigger': 1.0.11(solid-js@1.8.22) 1705 | solid-js: 1.8.22 1706 | 1707 | '@solid-primitives/media@2.2.9(solid-js@1.8.22)': 1708 | dependencies: 1709 | '@solid-primitives/event-listener': 2.3.3(solid-js@1.8.22) 1710 | '@solid-primitives/rootless': 1.4.5(solid-js@1.8.22) 1711 | '@solid-primitives/static-store': 0.0.8(solid-js@1.8.22) 1712 | '@solid-primitives/utils': 6.2.3(solid-js@1.8.22) 1713 | solid-js: 1.8.22 1714 | 1715 | '@solid-primitives/props@3.1.11(solid-js@1.8.22)': 1716 | dependencies: 1717 | '@solid-primitives/utils': 6.2.3(solid-js@1.8.22) 1718 | solid-js: 1.8.22 1719 | 1720 | '@solid-primitives/refs@1.0.8(solid-js@1.8.22)': 1721 | dependencies: 1722 | '@solid-primitives/utils': 6.2.3(solid-js@1.8.22) 1723 | solid-js: 1.8.22 1724 | 1725 | '@solid-primitives/rootless@1.4.5(solid-js@1.8.22)': 1726 | dependencies: 1727 | '@solid-primitives/utils': 6.2.3(solid-js@1.8.22) 1728 | solid-js: 1.8.22 1729 | 1730 | '@solid-primitives/static-store@0.0.8(solid-js@1.8.22)': 1731 | dependencies: 1732 | '@solid-primitives/utils': 6.2.3(solid-js@1.8.22) 1733 | solid-js: 1.8.22 1734 | 1735 | '@solid-primitives/transition-group@1.0.5(solid-js@1.8.22)': 1736 | dependencies: 1737 | solid-js: 1.8.22 1738 | 1739 | '@solid-primitives/trigger@1.0.11(solid-js@1.8.22)': 1740 | dependencies: 1741 | '@solid-primitives/utils': 6.2.3(solid-js@1.8.22) 1742 | solid-js: 1.8.22 1743 | 1744 | '@solid-primitives/utils@6.2.3(solid-js@1.8.22)': 1745 | dependencies: 1746 | solid-js: 1.8.22 1747 | 1748 | '@swc/helpers@0.5.11': 1749 | dependencies: 1750 | tslib: 2.6.2 1751 | 1752 | '@tauri-apps/api@2.0.0-beta.13': {} 1753 | 1754 | '@tauri-apps/api@2.0.0-rc.4': {} 1755 | 1756 | '@tauri-apps/cli-darwin-arm64@2.0.0-rc.8': 1757 | optional: true 1758 | 1759 | '@tauri-apps/cli-darwin-x64@2.0.0-rc.8': 1760 | optional: true 1761 | 1762 | '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.8': 1763 | optional: true 1764 | 1765 | '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.8': 1766 | optional: true 1767 | 1768 | '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.8': 1769 | optional: true 1770 | 1771 | '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.8': 1772 | optional: true 1773 | 1774 | '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.8': 1775 | optional: true 1776 | 1777 | '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.8': 1778 | optional: true 1779 | 1780 | '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.8': 1781 | optional: true 1782 | 1783 | '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.8': 1784 | optional: true 1785 | 1786 | '@tauri-apps/cli@2.0.0-rc.8': 1787 | optionalDependencies: 1788 | '@tauri-apps/cli-darwin-arm64': 2.0.0-rc.8 1789 | '@tauri-apps/cli-darwin-x64': 2.0.0-rc.8 1790 | '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-rc.8 1791 | '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-rc.8 1792 | '@tauri-apps/cli-linux-arm64-musl': 2.0.0-rc.8 1793 | '@tauri-apps/cli-linux-x64-gnu': 2.0.0-rc.8 1794 | '@tauri-apps/cli-linux-x64-musl': 2.0.0-rc.8 1795 | '@tauri-apps/cli-win32-arm64-msvc': 2.0.0-rc.8 1796 | '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-rc.8 1797 | '@tauri-apps/cli-win32-x64-msvc': 2.0.0-rc.8 1798 | 1799 | '@tauri-apps/plugin-dialog@2.0.0-beta.5': 1800 | dependencies: 1801 | '@tauri-apps/api': 2.0.0-beta.13 1802 | 1803 | '@tauri-apps/plugin-fs@2.0.0-beta.5': 1804 | dependencies: 1805 | '@tauri-apps/api': 2.0.0-beta.13 1806 | 1807 | '@tauri-apps/plugin-process@2.0.0-beta.5': 1808 | dependencies: 1809 | '@tauri-apps/api': 2.0.0-beta.13 1810 | 1811 | '@tauri-apps/plugin-shell@2.0.0-rc.1': 1812 | dependencies: 1813 | '@tauri-apps/api': 2.0.0-rc.4 1814 | 1815 | '@tauri-apps/plugin-updater@2.0.0-beta.5': 1816 | dependencies: 1817 | '@tauri-apps/api': 2.0.0-beta.13 1818 | 1819 | '@types/babel__core@7.20.5': 1820 | dependencies: 1821 | '@babel/parser': 7.24.6 1822 | '@babel/types': 7.24.6 1823 | '@types/babel__generator': 7.6.8 1824 | '@types/babel__template': 7.4.4 1825 | '@types/babel__traverse': 7.20.6 1826 | 1827 | '@types/babel__generator@7.6.8': 1828 | dependencies: 1829 | '@babel/types': 7.24.6 1830 | 1831 | '@types/babel__template@7.4.4': 1832 | dependencies: 1833 | '@babel/parser': 7.24.6 1834 | '@babel/types': 7.24.6 1835 | 1836 | '@types/babel__traverse@7.20.6': 1837 | dependencies: 1838 | '@babel/types': 7.24.6 1839 | 1840 | '@types/estree@1.0.5': {} 1841 | 1842 | ansi-regex@5.0.1: {} 1843 | 1844 | ansi-regex@6.0.1: {} 1845 | 1846 | ansi-styles@3.2.1: 1847 | dependencies: 1848 | color-convert: 1.9.3 1849 | 1850 | ansi-styles@4.3.0: 1851 | dependencies: 1852 | color-convert: 2.0.1 1853 | 1854 | ansi-styles@6.2.1: {} 1855 | 1856 | any-promise@1.3.0: {} 1857 | 1858 | anymatch@3.1.3: 1859 | dependencies: 1860 | normalize-path: 3.0.0 1861 | picomatch: 2.3.1 1862 | 1863 | arg@5.0.2: {} 1864 | 1865 | autoprefixer@10.4.20(postcss@8.4.41): 1866 | dependencies: 1867 | browserslist: 4.23.3 1868 | caniuse-lite: 1.0.30001655 1869 | fraction.js: 4.3.7 1870 | normalize-range: 0.1.2 1871 | picocolors: 1.0.1 1872 | postcss: 8.4.41 1873 | postcss-value-parser: 4.2.0 1874 | 1875 | babel-plugin-jsx-dom-expressions@0.37.21(@babel/core@7.24.6): 1876 | dependencies: 1877 | '@babel/core': 7.24.6 1878 | '@babel/helper-module-imports': 7.18.6 1879 | '@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6) 1880 | '@babel/types': 7.24.6 1881 | html-entities: 2.3.3 1882 | validate-html-nesting: 1.2.2 1883 | 1884 | babel-preset-solid@1.8.17(@babel/core@7.24.6): 1885 | dependencies: 1886 | '@babel/core': 7.24.6 1887 | babel-plugin-jsx-dom-expressions: 0.37.21(@babel/core@7.24.6) 1888 | 1889 | balanced-match@1.0.2: {} 1890 | 1891 | binary-extensions@2.3.0: {} 1892 | 1893 | brace-expansion@2.0.1: 1894 | dependencies: 1895 | balanced-match: 1.0.2 1896 | 1897 | braces@3.0.3: 1898 | dependencies: 1899 | fill-range: 7.1.1 1900 | 1901 | browserslist@4.23.3: 1902 | dependencies: 1903 | caniuse-lite: 1.0.30001655 1904 | electron-to-chromium: 1.5.13 1905 | node-releases: 2.0.18 1906 | update-browserslist-db: 1.1.0(browserslist@4.23.3) 1907 | 1908 | camelcase-css@2.0.1: {} 1909 | 1910 | caniuse-lite@1.0.30001655: {} 1911 | 1912 | chalk@2.4.2: 1913 | dependencies: 1914 | ansi-styles: 3.2.1 1915 | escape-string-regexp: 1.0.5 1916 | supports-color: 5.5.0 1917 | 1918 | chokidar@3.6.0: 1919 | dependencies: 1920 | anymatch: 3.1.3 1921 | braces: 3.0.3 1922 | glob-parent: 5.1.2 1923 | is-binary-path: 2.1.0 1924 | is-glob: 4.0.3 1925 | normalize-path: 3.0.0 1926 | readdirp: 3.6.0 1927 | optionalDependencies: 1928 | fsevents: 2.3.3 1929 | 1930 | color-convert@1.9.3: 1931 | dependencies: 1932 | color-name: 1.1.3 1933 | 1934 | color-convert@2.0.1: 1935 | dependencies: 1936 | color-name: 1.1.4 1937 | 1938 | color-name@1.1.3: {} 1939 | 1940 | color-name@1.1.4: {} 1941 | 1942 | commander@4.1.1: {} 1943 | 1944 | convert-source-map@2.0.0: {} 1945 | 1946 | cross-spawn@7.0.3: 1947 | dependencies: 1948 | path-key: 3.1.1 1949 | shebang-command: 2.0.0 1950 | which: 2.0.2 1951 | 1952 | cssesc@3.0.0: {} 1953 | 1954 | csstype@3.1.3: {} 1955 | 1956 | debug@4.3.4: 1957 | dependencies: 1958 | ms: 2.1.2 1959 | 1960 | default-gateway@6.0.3: 1961 | dependencies: 1962 | execa: 5.1.1 1963 | 1964 | didyoumean@1.2.2: {} 1965 | 1966 | dlv@1.1.3: {} 1967 | 1968 | eastasianwidth@0.2.0: {} 1969 | 1970 | electron-to-chromium@1.5.13: {} 1971 | 1972 | emoji-regex@8.0.0: {} 1973 | 1974 | emoji-regex@9.2.2: {} 1975 | 1976 | esbuild@0.21.5: 1977 | optionalDependencies: 1978 | '@esbuild/aix-ppc64': 0.21.5 1979 | '@esbuild/android-arm': 0.21.5 1980 | '@esbuild/android-arm64': 0.21.5 1981 | '@esbuild/android-x64': 0.21.5 1982 | '@esbuild/darwin-arm64': 0.21.5 1983 | '@esbuild/darwin-x64': 0.21.5 1984 | '@esbuild/freebsd-arm64': 0.21.5 1985 | '@esbuild/freebsd-x64': 0.21.5 1986 | '@esbuild/linux-arm': 0.21.5 1987 | '@esbuild/linux-arm64': 0.21.5 1988 | '@esbuild/linux-ia32': 0.21.5 1989 | '@esbuild/linux-loong64': 0.21.5 1990 | '@esbuild/linux-mips64el': 0.21.5 1991 | '@esbuild/linux-ppc64': 0.21.5 1992 | '@esbuild/linux-riscv64': 0.21.5 1993 | '@esbuild/linux-s390x': 0.21.5 1994 | '@esbuild/linux-x64': 0.21.5 1995 | '@esbuild/netbsd-x64': 0.21.5 1996 | '@esbuild/openbsd-x64': 0.21.5 1997 | '@esbuild/sunos-x64': 0.21.5 1998 | '@esbuild/win32-arm64': 0.21.5 1999 | '@esbuild/win32-ia32': 0.21.5 2000 | '@esbuild/win32-x64': 0.21.5 2001 | 2002 | escalade@3.2.0: {} 2003 | 2004 | escape-string-regexp@1.0.5: {} 2005 | 2006 | execa@5.1.1: 2007 | dependencies: 2008 | cross-spawn: 7.0.3 2009 | get-stream: 6.0.1 2010 | human-signals: 2.1.0 2011 | is-stream: 2.0.1 2012 | merge-stream: 2.0.0 2013 | npm-run-path: 4.0.1 2014 | onetime: 5.1.2 2015 | signal-exit: 3.0.7 2016 | strip-final-newline: 2.0.0 2017 | 2018 | fast-glob@3.3.2: 2019 | dependencies: 2020 | '@nodelib/fs.stat': 2.0.5 2021 | '@nodelib/fs.walk': 1.2.8 2022 | glob-parent: 5.1.2 2023 | merge2: 1.4.1 2024 | micromatch: 4.0.7 2025 | 2026 | fastq@1.17.1: 2027 | dependencies: 2028 | reusify: 1.0.4 2029 | 2030 | fill-range@7.1.1: 2031 | dependencies: 2032 | to-regex-range: 5.0.1 2033 | 2034 | foreground-child@3.1.1: 2035 | dependencies: 2036 | cross-spawn: 7.0.3 2037 | signal-exit: 4.1.0 2038 | 2039 | fraction.js@4.3.7: {} 2040 | 2041 | fsevents@2.3.3: 2042 | optional: true 2043 | 2044 | function-bind@1.1.2: {} 2045 | 2046 | gensync@1.0.0-beta.2: {} 2047 | 2048 | get-stream@6.0.1: {} 2049 | 2050 | glob-parent@5.1.2: 2051 | dependencies: 2052 | is-glob: 4.0.3 2053 | 2054 | glob-parent@6.0.2: 2055 | dependencies: 2056 | is-glob: 4.0.3 2057 | 2058 | glob@10.4.1: 2059 | dependencies: 2060 | foreground-child: 3.1.1 2061 | jackspeak: 3.1.2 2062 | minimatch: 9.0.4 2063 | minipass: 7.1.2 2064 | path-scurry: 1.11.1 2065 | 2066 | globals@11.12.0: {} 2067 | 2068 | has-flag@3.0.0: {} 2069 | 2070 | hasown@2.0.2: 2071 | dependencies: 2072 | function-bind: 1.1.2 2073 | 2074 | html-entities@2.3.3: {} 2075 | 2076 | human-signals@2.1.0: {} 2077 | 2078 | internal-ip@7.0.0: 2079 | dependencies: 2080 | default-gateway: 6.0.3 2081 | ipaddr.js: 2.2.0 2082 | is-ip: 3.1.0 2083 | p-event: 4.2.0 2084 | 2085 | intl-messageformat@10.5.14: 2086 | dependencies: 2087 | '@formatjs/ecma402-abstract': 2.0.0 2088 | '@formatjs/fast-memoize': 2.2.0 2089 | '@formatjs/icu-messageformat-parser': 2.7.8 2090 | tslib: 2.6.2 2091 | 2092 | ip-regex@4.3.0: {} 2093 | 2094 | ipaddr.js@2.2.0: {} 2095 | 2096 | is-binary-path@2.1.0: 2097 | dependencies: 2098 | binary-extensions: 2.3.0 2099 | 2100 | is-core-module@2.13.1: 2101 | dependencies: 2102 | hasown: 2.0.2 2103 | 2104 | is-extglob@2.1.1: {} 2105 | 2106 | is-fullwidth-code-point@3.0.0: {} 2107 | 2108 | is-glob@4.0.3: 2109 | dependencies: 2110 | is-extglob: 2.1.1 2111 | 2112 | is-ip@3.1.0: 2113 | dependencies: 2114 | ip-regex: 4.3.0 2115 | 2116 | is-number@7.0.0: {} 2117 | 2118 | is-stream@2.0.1: {} 2119 | 2120 | is-what@4.1.16: {} 2121 | 2122 | isexe@2.0.0: {} 2123 | 2124 | jackspeak@3.1.2: 2125 | dependencies: 2126 | '@isaacs/cliui': 8.0.2 2127 | optionalDependencies: 2128 | '@pkgjs/parseargs': 0.11.0 2129 | 2130 | jiti@1.21.0: {} 2131 | 2132 | js-tokens@4.0.0: {} 2133 | 2134 | jsesc@2.5.2: {} 2135 | 2136 | json5@2.2.3: {} 2137 | 2138 | lilconfig@2.1.0: {} 2139 | 2140 | lilconfig@3.1.1: {} 2141 | 2142 | lines-and-columns@1.2.4: {} 2143 | 2144 | lru-cache@10.2.2: {} 2145 | 2146 | lru-cache@5.1.1: 2147 | dependencies: 2148 | yallist: 3.1.1 2149 | 2150 | merge-anything@5.1.7: 2151 | dependencies: 2152 | is-what: 4.1.16 2153 | 2154 | merge-stream@2.0.0: {} 2155 | 2156 | merge2@1.4.1: {} 2157 | 2158 | micromatch@4.0.7: 2159 | dependencies: 2160 | braces: 3.0.3 2161 | picomatch: 2.3.1 2162 | 2163 | mimic-fn@2.1.0: {} 2164 | 2165 | minimatch@9.0.4: 2166 | dependencies: 2167 | brace-expansion: 2.0.1 2168 | 2169 | minipass@7.1.2: {} 2170 | 2171 | ms@2.1.2: {} 2172 | 2173 | mz@2.7.0: 2174 | dependencies: 2175 | any-promise: 1.3.0 2176 | object-assign: 4.1.1 2177 | thenify-all: 1.6.0 2178 | 2179 | nanoid@3.3.7: {} 2180 | 2181 | node-releases@2.0.18: {} 2182 | 2183 | normalize-path@3.0.0: {} 2184 | 2185 | normalize-range@0.1.2: {} 2186 | 2187 | npm-run-path@4.0.1: 2188 | dependencies: 2189 | path-key: 3.1.1 2190 | 2191 | object-assign@4.1.1: {} 2192 | 2193 | object-hash@3.0.0: {} 2194 | 2195 | onetime@5.1.2: 2196 | dependencies: 2197 | mimic-fn: 2.1.0 2198 | 2199 | p-event@4.2.0: 2200 | dependencies: 2201 | p-timeout: 3.2.0 2202 | 2203 | p-finally@1.0.0: {} 2204 | 2205 | p-timeout@3.2.0: 2206 | dependencies: 2207 | p-finally: 1.0.0 2208 | 2209 | path-key@3.1.1: {} 2210 | 2211 | path-parse@1.0.7: {} 2212 | 2213 | path-scurry@1.11.1: 2214 | dependencies: 2215 | lru-cache: 10.2.2 2216 | minipass: 7.1.2 2217 | 2218 | picocolors@1.0.1: {} 2219 | 2220 | picomatch@2.3.1: {} 2221 | 2222 | pify@2.3.0: {} 2223 | 2224 | pirates@4.0.6: {} 2225 | 2226 | postcss-import@15.1.0(postcss@8.4.41): 2227 | dependencies: 2228 | postcss: 8.4.41 2229 | postcss-value-parser: 4.2.0 2230 | read-cache: 1.0.0 2231 | resolve: 1.22.8 2232 | 2233 | postcss-js@4.0.1(postcss@8.4.41): 2234 | dependencies: 2235 | camelcase-css: 2.0.1 2236 | postcss: 8.4.41 2237 | 2238 | postcss-load-config@4.0.2(postcss@8.4.41): 2239 | dependencies: 2240 | lilconfig: 3.1.1 2241 | yaml: 2.4.2 2242 | optionalDependencies: 2243 | postcss: 8.4.41 2244 | 2245 | postcss-nested@6.0.1(postcss@8.4.41): 2246 | dependencies: 2247 | postcss: 8.4.41 2248 | postcss-selector-parser: 6.1.0 2249 | 2250 | postcss-selector-parser@6.1.0: 2251 | dependencies: 2252 | cssesc: 3.0.0 2253 | util-deprecate: 1.0.2 2254 | 2255 | postcss-value-parser@4.2.0: {} 2256 | 2257 | postcss@8.4.41: 2258 | dependencies: 2259 | nanoid: 3.3.7 2260 | picocolors: 1.0.1 2261 | source-map-js: 1.2.0 2262 | 2263 | prettier@3.3.3: {} 2264 | 2265 | queue-microtask@1.2.3: {} 2266 | 2267 | read-cache@1.0.0: 2268 | dependencies: 2269 | pify: 2.3.0 2270 | 2271 | readdirp@3.6.0: 2272 | dependencies: 2273 | picomatch: 2.3.1 2274 | 2275 | resolve@1.22.8: 2276 | dependencies: 2277 | is-core-module: 2.13.1 2278 | path-parse: 1.0.7 2279 | supports-preserve-symlinks-flag: 1.0.0 2280 | 2281 | reusify@1.0.4: {} 2282 | 2283 | rollup@4.21.2: 2284 | dependencies: 2285 | '@types/estree': 1.0.5 2286 | optionalDependencies: 2287 | '@rollup/rollup-android-arm-eabi': 4.21.2 2288 | '@rollup/rollup-android-arm64': 4.21.2 2289 | '@rollup/rollup-darwin-arm64': 4.21.2 2290 | '@rollup/rollup-darwin-x64': 4.21.2 2291 | '@rollup/rollup-linux-arm-gnueabihf': 4.21.2 2292 | '@rollup/rollup-linux-arm-musleabihf': 4.21.2 2293 | '@rollup/rollup-linux-arm64-gnu': 4.21.2 2294 | '@rollup/rollup-linux-arm64-musl': 4.21.2 2295 | '@rollup/rollup-linux-powerpc64le-gnu': 4.21.2 2296 | '@rollup/rollup-linux-riscv64-gnu': 4.21.2 2297 | '@rollup/rollup-linux-s390x-gnu': 4.21.2 2298 | '@rollup/rollup-linux-x64-gnu': 4.21.2 2299 | '@rollup/rollup-linux-x64-musl': 4.21.2 2300 | '@rollup/rollup-win32-arm64-msvc': 4.21.2 2301 | '@rollup/rollup-win32-ia32-msvc': 4.21.2 2302 | '@rollup/rollup-win32-x64-msvc': 4.21.2 2303 | fsevents: 2.3.3 2304 | 2305 | run-parallel@1.2.0: 2306 | dependencies: 2307 | queue-microtask: 1.2.3 2308 | 2309 | semver@6.3.1: {} 2310 | 2311 | seroval-plugins@1.1.1(seroval@1.1.1): 2312 | dependencies: 2313 | seroval: 1.1.1 2314 | 2315 | seroval@1.1.1: {} 2316 | 2317 | shebang-command@2.0.0: 2318 | dependencies: 2319 | shebang-regex: 3.0.0 2320 | 2321 | shebang-regex@3.0.0: {} 2322 | 2323 | signal-exit@3.0.7: {} 2324 | 2325 | signal-exit@4.1.0: {} 2326 | 2327 | solid-js@1.8.22: 2328 | dependencies: 2329 | csstype: 3.1.3 2330 | seroval: 1.1.1 2331 | seroval-plugins: 1.1.1(seroval@1.1.1) 2332 | 2333 | solid-refresh@0.6.3(solid-js@1.8.22): 2334 | dependencies: 2335 | '@babel/generator': 7.24.6 2336 | '@babel/helper-module-imports': 7.24.6 2337 | '@babel/types': 7.24.6 2338 | solid-js: 1.8.22 2339 | 2340 | solid-transition-group@0.2.3(solid-js@1.8.22): 2341 | dependencies: 2342 | '@solid-primitives/refs': 1.0.8(solid-js@1.8.22) 2343 | '@solid-primitives/transition-group': 1.0.5(solid-js@1.8.22) 2344 | solid-js: 1.8.22 2345 | 2346 | source-map-js@1.2.0: {} 2347 | 2348 | string-width@4.2.3: 2349 | dependencies: 2350 | emoji-regex: 8.0.0 2351 | is-fullwidth-code-point: 3.0.0 2352 | strip-ansi: 6.0.1 2353 | 2354 | string-width@5.1.2: 2355 | dependencies: 2356 | eastasianwidth: 0.2.0 2357 | emoji-regex: 9.2.2 2358 | strip-ansi: 7.1.0 2359 | 2360 | strip-ansi@6.0.1: 2361 | dependencies: 2362 | ansi-regex: 5.0.1 2363 | 2364 | strip-ansi@7.1.0: 2365 | dependencies: 2366 | ansi-regex: 6.0.1 2367 | 2368 | strip-final-newline@2.0.0: {} 2369 | 2370 | sucrase@3.35.0: 2371 | dependencies: 2372 | '@jridgewell/gen-mapping': 0.3.5 2373 | commander: 4.1.1 2374 | glob: 10.4.1 2375 | lines-and-columns: 1.2.4 2376 | mz: 2.7.0 2377 | pirates: 4.0.6 2378 | ts-interface-checker: 0.1.13 2379 | 2380 | supports-color@5.5.0: 2381 | dependencies: 2382 | has-flag: 3.0.0 2383 | 2384 | supports-preserve-symlinks-flag@1.0.0: {} 2385 | 2386 | tailwindcss@3.4.10: 2387 | dependencies: 2388 | '@alloc/quick-lru': 5.2.0 2389 | arg: 5.0.2 2390 | chokidar: 3.6.0 2391 | didyoumean: 1.2.2 2392 | dlv: 1.1.3 2393 | fast-glob: 3.3.2 2394 | glob-parent: 6.0.2 2395 | is-glob: 4.0.3 2396 | jiti: 1.21.0 2397 | lilconfig: 2.1.0 2398 | micromatch: 4.0.7 2399 | normalize-path: 3.0.0 2400 | object-hash: 3.0.0 2401 | picocolors: 1.0.1 2402 | postcss: 8.4.41 2403 | postcss-import: 15.1.0(postcss@8.4.41) 2404 | postcss-js: 4.0.1(postcss@8.4.41) 2405 | postcss-load-config: 4.0.2(postcss@8.4.41) 2406 | postcss-nested: 6.0.1(postcss@8.4.41) 2407 | postcss-selector-parser: 6.1.0 2408 | resolve: 1.22.8 2409 | sucrase: 3.35.0 2410 | transitivePeerDependencies: 2411 | - ts-node 2412 | 2413 | thenify-all@1.6.0: 2414 | dependencies: 2415 | thenify: 3.3.1 2416 | 2417 | thenify@3.3.1: 2418 | dependencies: 2419 | any-promise: 1.3.0 2420 | 2421 | to-fast-properties@2.0.0: {} 2422 | 2423 | to-regex-range@5.0.1: 2424 | dependencies: 2425 | is-number: 7.0.0 2426 | 2427 | ts-interface-checker@0.1.13: {} 2428 | 2429 | tslib@2.6.2: {} 2430 | 2431 | typescript@5.5.4: {} 2432 | 2433 | update-browserslist-db@1.1.0(browserslist@4.23.3): 2434 | dependencies: 2435 | browserslist: 4.23.3 2436 | escalade: 3.2.0 2437 | picocolors: 1.0.1 2438 | 2439 | util-deprecate@1.0.2: {} 2440 | 2441 | validate-html-nesting@1.2.2: {} 2442 | 2443 | vite-plugin-solid@2.10.2(solid-js@1.8.22)(vite@5.4.2): 2444 | dependencies: 2445 | '@babel/core': 7.24.6 2446 | '@types/babel__core': 7.20.5 2447 | babel-preset-solid: 1.8.17(@babel/core@7.24.6) 2448 | merge-anything: 5.1.7 2449 | solid-js: 1.8.22 2450 | solid-refresh: 0.6.3(solid-js@1.8.22) 2451 | vite: 5.4.2 2452 | vitefu: 0.2.5(vite@5.4.2) 2453 | transitivePeerDependencies: 2454 | - supports-color 2455 | 2456 | vite@5.4.2: 2457 | dependencies: 2458 | esbuild: 0.21.5 2459 | postcss: 8.4.41 2460 | rollup: 4.21.2 2461 | optionalDependencies: 2462 | fsevents: 2.3.3 2463 | 2464 | vitefu@0.2.5(vite@5.4.2): 2465 | optionalDependencies: 2466 | vite: 5.4.2 2467 | 2468 | which@2.0.2: 2469 | dependencies: 2470 | isexe: 2.0.0 2471 | 2472 | wrap-ansi@7.0.0: 2473 | dependencies: 2474 | ansi-styles: 4.3.0 2475 | string-width: 4.2.3 2476 | strip-ansi: 6.0.1 2477 | 2478 | wrap-ansi@8.1.0: 2479 | dependencies: 2480 | ansi-styles: 6.2.1 2481 | string-width: 5.1.2 2482 | strip-ansi: 7.1.0 2483 | 2484 | yallist@3.1.1: {} 2485 | 2486 | yaml@2.4.2: {} 2487 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/public/icon.png -------------------------------------------------------------------------------- /public/tauri.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src-tauri/.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | src-tauri/gen -------------------------------------------------------------------------------- /src-tauri/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "pulsar" 3 | version = "0.1.7" 4 | description = "A Tauri App" 5 | authors = ["@AtilaFassina"] 6 | license = "" 7 | repository = "" 8 | edition = "2021" 9 | 10 | [lib] 11 | name = "pulsar_lib" 12 | crate-type = ["staticlib", "cdylib", "rlib"] 13 | 14 | 15 | [build-dependencies] 16 | tauri-build = { version = "2.0.0-rc.7", features = [] } 17 | 18 | [dependencies] 19 | tauri = { version = "2.0.0-rc", features = [] } 20 | tauri-plugin-shell = "2.0.0-rc" 21 | serde = { version = "1", features = ["derive"] } 22 | serde_json = "1" 23 | tauri-plugin-fs = "2.0.0-rc" 24 | tauri-plugin-dialog = "2.0.0-rc" 25 | tokio = { version = "1.32.0", features = ["fs"] } 26 | thiserror = "1.0.47" 27 | regex = "1.9.5" 28 | log = { version = "0.4.20", features = ["release_max_level_off"] } 29 | globwalk = "0.8.1" 30 | futures = "0.3.28" 31 | tauri-plugin-devtools = "2.0.0-rc" 32 | specta = "=2.0.0-rc.20" 33 | tauri-specta = { version = "=2.0.0-rc.15", features = ["derive", "javascript", "typescript"] } 34 | tauri-plugin-updater = "2.0.0-rc" 35 | tauri-plugin-process = "2.0.0-rc" 36 | specta-typescript = "0.0.7" 37 | 38 | # Optimize for smaller binary size 39 | [profile.release] 40 | panic = "abort" # Strip expensive panic clean-up logic 41 | codegen-units = 1 # Compile crates one after another so the compiler can optimize better 42 | lto = true # Enables link to optimizations 43 | opt-level = "s" # Optimize for binary size 44 | strip = true # Remove debug symbols 45 | -------------------------------------------------------------------------------- /src-tauri/build.rs: -------------------------------------------------------------------------------- 1 | fn main() { 2 | tauri_build::build() 3 | } 4 | -------------------------------------------------------------------------------- /src-tauri/capabilities/migrated.json: -------------------------------------------------------------------------------- 1 | { 2 | "identifier": "migrated", 3 | "description": "permissions that were migrated from v1", 4 | "local": true, 5 | "windows": ["main"], 6 | "permissions": [ 7 | "core:path:default", 8 | "core:event:default", 9 | "core:window:default", 10 | "core:app:default", 11 | "core:resources:default", 12 | "core:menu:default", 13 | "core:tray:default", 14 | "fs:default", 15 | "fs:allow-read-file", 16 | "fs:allow-read-dir", 17 | "fs:allow-remove", 18 | "fs:allow-exists", 19 | { 20 | "identifier": "fs:scope", 21 | "allow": ["$DOCUMENT/**/*"] 22 | }, 23 | "dialog:allow-open", 24 | "dialog:allow-confirm", 25 | "dialog:default", 26 | "dialog:default", 27 | "dialog:allow-ask", 28 | "dialog:allow-message", 29 | "updater:default", 30 | "updater:allow-check", 31 | "updater:allow-download-and-install", 32 | "process:default", 33 | "process:allow-restart" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /src-tauri/gen/schemas/capabilities.json: -------------------------------------------------------------------------------- 1 | {"migrated":{"identifier":"migrated","description":"permissions that were migrated from v1","local":true,"windows":["main"],"permissions":["core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","core:menu:default","core:tray:default","fs:default","fs:allow-read-file","fs:allow-read-dir","fs:allow-remove","fs:allow-exists",{"identifier":"fs:scope","allow":["$DOCUMENT/**/*"]},"dialog:allow-open","dialog:allow-confirm","dialog:default","dialog:default","dialog:allow-ask","dialog:allow-message","updater:default","updater:allow-check","updater:allow-download-and-install","process:default","process:allow-restart"]}} -------------------------------------------------------------------------------- /src-tauri/icons/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/128x128.png -------------------------------------------------------------------------------- /src-tauri/icons/128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/128x128@2x.png -------------------------------------------------------------------------------- /src-tauri/icons/32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/32x32.png -------------------------------------------------------------------------------- /src-tauri/icons/Square107x107Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/Square107x107Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square142x142Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/Square142x142Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square150x150Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/Square150x150Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square284x284Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/Square284x284Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square30x30Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/Square30x30Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square310x310Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/Square310x310Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square44x44Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/Square44x44Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square71x71Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/Square71x71Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square89x89Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/Square89x89Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/StoreLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/StoreLogo.png -------------------------------------------------------------------------------- /src-tauri/icons/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/icon.icns -------------------------------------------------------------------------------- /src-tauri/icons/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/icon.ico -------------------------------------------------------------------------------- /src-tauri/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src-tauri/icons/icon.png -------------------------------------------------------------------------------- /src-tauri/src/error.rs: -------------------------------------------------------------------------------- 1 | use crate::FolderStat; 2 | use serde::{Serialize, Serializer}; 3 | use specta::Type; 4 | 5 | #[derive(Debug, Type, thiserror::Error)] 6 | #[serde(tag = "type", content = "data")] 7 | pub enum Error { 8 | #[serde(skip)] 9 | #[error("Tokio can't readdir")] 10 | IoError( 11 | #[serde(skip)] // io::Error is not `Serialize` or `Type` 12 | #[from] 13 | std::io::Error, 14 | ), 15 | 16 | #[error("Failed to forward folder statistics, internal channel is broken.")] 17 | #[serde(skip)] 18 | TrySendError(#[from] tokio::sync::mpsc::error::TrySendError), 19 | 20 | #[error("Node modules folder size too large to be represented in JavaScript.")] 21 | TooLarge( 22 | #[serde(skip)] // io::Error is not `Serialize` or `Type` 23 | #[from] 24 | std::num::TryFromIntError, 25 | ), 26 | } 27 | 28 | impl Serialize for Error { 29 | fn serialize(&self, serializer: S) -> Result 30 | where 31 | S: Serializer, 32 | { 33 | serializer.serialize_str(self.to_string().as_ref()) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src-tauri/src/lib.rs: -------------------------------------------------------------------------------- 1 | mod error; 2 | mod util; 3 | 4 | use error::Error; 5 | use futures::future::try_join_all; 6 | use specta; 7 | use std::path::Path; 8 | use util::FolderStat; 9 | 10 | #[cfg(debug_assertions)] 11 | use tauri_plugin_devtools; 12 | use tauri_plugin_dialog; 13 | 14 | #[tauri::command] 15 | #[specta::specta] 16 | async fn get_dir_data(pattern: &str) -> Result, Error> { 17 | let dirs = util::get_dir_names(Path::new(pattern)); 18 | 19 | let iter = dirs.into_iter().map(|path| async move { 20 | let size = u32::try_from(util::get_size(&path).await?)?; 21 | Ok(FolderStat { path, size }) as Result 22 | }); 23 | 24 | let result = try_join_all(iter).await?; 25 | 26 | Ok(util::order_list(result)) 27 | } 28 | 29 | pub fn run() { 30 | #[cfg(debug_assertions)] 31 | let devtools = tauri_plugin_devtools::init(); 32 | let builder = tauri::Builder::default().plugin(devtools); 33 | 34 | #[cfg(not(debug_assertions))] 35 | let builder = tauri::Builder::default(); 36 | 37 | let specta_builder = tauri_specta::Builder::::new() 38 | .commands(tauri_specta::collect_commands![get_dir_data]); 39 | 40 | #[cfg(all(debug_assertions, not(mobile)))] 41 | specta_builder 42 | .export( 43 | specta_typescript::Typescript::default() 44 | .formatter(specta_typescript::formatter::prettier), 45 | "../src/commands.ts", 46 | ) 47 | .expect("failed to export typescript bindings"); 48 | 49 | builder 50 | .plugin(tauri_plugin_updater::Builder::new().build()) 51 | .plugin(tauri_plugin_dialog::init()) 52 | .plugin(tauri_plugin_process::init()) 53 | .plugin(tauri_plugin_fs::init()) 54 | .invoke_handler(specta_builder.invoke_handler()) 55 | .run(tauri::generate_context!()) 56 | .expect("error while running tauri application"); 57 | } 58 | -------------------------------------------------------------------------------- /src-tauri/src/main.rs: -------------------------------------------------------------------------------- 1 | // Prevents additional console window on Windows in release, DO NOT REMOVE!! 2 | #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] 3 | 4 | fn main() { 5 | pulsar_lib::run() 6 | } 7 | -------------------------------------------------------------------------------- /src-tauri/src/util.rs: -------------------------------------------------------------------------------- 1 | use crate::error::Error; 2 | use core::future::Future; 3 | use core::pin::Pin; 4 | use globwalk::GlobWalkerBuilder; 5 | use log::info; 6 | use regex::Regex; 7 | use serde::Serialize; 8 | use specta::Type; 9 | use std::path::{Path, PathBuf}; 10 | 11 | #[derive(Serialize, Type, Debug)] 12 | pub struct FolderStat { 13 | pub path: PathBuf, 14 | pub size: u32, 15 | } 16 | 17 | pub fn order_list(mut list: Vec) -> Vec { 18 | list.sort_by(|a, b| a.path.cmp(&b.path)); 19 | list.sort_by(|a, b| b.size.cmp(&a.size)); 20 | 21 | list 22 | } 23 | 24 | pub fn get_size<'a>( 25 | path: &'a Path, 26 | ) -> Pin> + 'a + Send>> { 27 | Box::pin(async move { 28 | // Using `fs::symlink_metadata` since we don't want to follow symlinks, 29 | // as we're calculating the exact size of the requested path itself. 30 | let path_metadata = tokio::fs::symlink_metadata(&path).await?; 31 | let mut size_in_bytes = 0; 32 | 33 | if path_metadata.is_dir() { 34 | let mut read_dir = tokio::fs::read_dir(&path).await?; 35 | 36 | while let Some(entry) = read_dir.next_entry().await? { 37 | // `DirEntry::metadata` does not follow symlinks (unlike `fs::metadata`), so in the 38 | // case of symlinks, this is the size of the symlink itself, not its target. 39 | let entry_metadata = entry.metadata().await?; 40 | 41 | if entry_metadata.is_dir() { 42 | // The size of the directory entry itself will be counted inside the `get_size()` call, 43 | // so we intentionally don't also add `entry_metadata.len()` to the total here. 44 | size_in_bytes += get_size(&entry.path()).await?; 45 | } else { 46 | size_in_bytes += entry_metadata.len(); 47 | } 48 | } 49 | } else { 50 | size_in_bytes = path_metadata.len(); 51 | } 52 | Ok(size_in_bytes) 53 | }) 54 | } 55 | 56 | pub fn get_dir_names(path: &Path) -> Vec { 57 | let mut filenames = Vec::new(); 58 | let node_modules_regex = Regex::new(r"node_modules").unwrap(); 59 | 60 | let walker = GlobWalkerBuilder::from_patterns(path, &["**/node_modules", "**/![.pnpm]/*"]) 61 | .max_depth(6) 62 | .follow_links(false) 63 | .build() 64 | .expect("glob walker should work") 65 | .into_iter() 66 | .filter_map(Result::ok); 67 | 68 | for file in walker { 69 | let path_string = file.path().display().to_string(); 70 | 71 | let mut count = 0; 72 | let mut start = 0; 73 | let mut should_scan = true; 74 | 75 | while let Some(mat) = node_modules_regex.captures(&path_string[start..]) { 76 | count += 1; 77 | start += mat.get(0).unwrap().end(); 78 | 79 | if count > 1 { 80 | should_scan = false; 81 | break; 82 | } 83 | } 84 | 85 | if should_scan { 86 | filenames.push(file.path().to_path_buf()) 87 | } 88 | } 89 | 90 | info!("Dir names: {}", filenames.len()); 91 | 92 | filenames 93 | } 94 | -------------------------------------------------------------------------------- /src-tauri/tauri.conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../node_modules/@tauri-apps/cli/schema.json", 3 | "productName": "pulsar", 4 | "identifier": "pulsar.atila.io", 5 | "build": { 6 | "beforeDevCommand": "pnpm dev", 7 | "beforeBuildCommand": "pnpm build", 8 | "devUrl": "http://localhost:1420", 9 | "frontendDist": "../dist" 10 | }, 11 | 12 | "bundle": { 13 | "macOS": { 14 | "signingIdentity": "-" 15 | }, 16 | "active": true, 17 | "targets": "all", 18 | "icon": [ 19 | "icons/32x32.png", 20 | "icons/128x128.png", 21 | "icons/128x128@2x.png", 22 | "icons/icon.icns", 23 | "icons/icon.ico" 24 | ] 25 | }, 26 | "plugins": { 27 | "updater": { 28 | "active": true, 29 | "endpoints": [ 30 | "https://cdn.crabnebula.app/update/the-huns/pulsar/{{target}}-{{arch}}/{{current_version}}" 31 | ], 32 | "dialog": true, 33 | "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEU0QkU1NDIyOTVDRDE0NApSV1JFMFZ3cFF1VkxEcGU5ekMxN3p4NWN4OHVLendRNkZCWGRsSmpXQ3Z0Y2diUlNHc0R3UUVuZAo=" 34 | } 35 | }, 36 | "app": { 37 | "withGlobalTauri": false, 38 | "security": { 39 | "csp": null 40 | }, 41 | 42 | "windows": [ 43 | { 44 | "fullscreen": false, 45 | "resizable": true, 46 | "title": "pulsar", 47 | "minWidth": 1000, 48 | "minHeight": 800 49 | } 50 | ] 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer base { 6 | body::before { 7 | content: ""; 8 | background-image: url("./assets/space.webp"); 9 | @apply bg-cover -z-10 fixed top-0 left-0 block w-screen h-screen; 10 | } 11 | } 12 | 13 | @layer components { 14 | .fade-exit-active { 15 | @apply transition-all duration-1000; 16 | } 17 | 18 | .fade-exit-to { 19 | @apply opacity-0 scale-0; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import { Match, Show, Switch, onMount } from "solid-js"; 2 | import { Logo } from "./components/logo"; 3 | import { Scanner } from "./components/scanner"; 4 | import Footer from "./components/footer"; 5 | import ResultsTable from "./components/results-table"; 6 | import "./App.css"; 7 | import { scanStore } from "./lib/store"; 8 | import { checkForAppUpdates } from "./lib/updater"; 9 | 10 | function App() { 11 | const [scanData, setScanData] = scanStore; 12 | const hasItems = () => scanData.fileList.length > 0; 13 | 14 | onMount(async () => { 15 | await checkForAppUpdates(false); 16 | }); 17 | 18 | return ( 19 | <> 20 |
21 |
22 | 23 | 24 |
25 | 26 |
27 | 0}> 28 | 29 | {scanData.stats} 30 | 31 | 32 |
33 |
    34 |
  • 35 | 36 |
  • 37 |
  • 38 | 39 |
  • 40 |
41 |
42 |
43 | 44 | 45 |

scanning...

46 |
47 | 48 | 49 | 50 | 51 |

52 | 🤖 waiting on search 53 |

54 |
55 |
56 |
57 |
58 |
59 |
60 | 61 | ); 62 | } 63 | 64 | export default App; 65 | -------------------------------------------------------------------------------- /src/assets/cn-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /src/assets/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/space.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atilafassina/pulsar/77abe365e43d6de1954d55428e5ac24d836540f9/src/assets/space.webp -------------------------------------------------------------------------------- /src/commands.ts: -------------------------------------------------------------------------------- 1 | // This file was generated by [tauri-specta](https://github.com/oscartbeaumont/tauri-specta). Do not edit this file manually. 2 | 3 | /** user-defined commands **/ 4 | 5 | export const commands = { 6 | async getDirData(pattern: string): Promise> { 7 | try { 8 | return { 9 | status: "ok", 10 | data: await TAURI_INVOKE("get_dir_data", { pattern }), 11 | }; 12 | } catch (e) { 13 | if (e instanceof Error) throw e; 14 | else return { status: "error", error: e as any }; 15 | } 16 | }, 17 | }; 18 | 19 | /** user-defined events **/ 20 | 21 | /** user-defined constants **/ 22 | 23 | /** user-defined types **/ 24 | 25 | export type Error = { type: "TooLarge" }; 26 | export type FolderStat = { path: string; size: number }; 27 | 28 | /** tauri-specta globals **/ 29 | 30 | import { 31 | invoke as TAURI_INVOKE, 32 | Channel as TAURI_CHANNEL, 33 | } from "@tauri-apps/api/core"; 34 | import * as TAURI_API_EVENT from "@tauri-apps/api/event"; 35 | import { type WebviewWindow as __WebviewWindow__ } from "@tauri-apps/api/webviewWindow"; 36 | 37 | type __EventObj__ = { 38 | listen: ( 39 | cb: TAURI_API_EVENT.EventCallback, 40 | ) => ReturnType>; 41 | once: ( 42 | cb: TAURI_API_EVENT.EventCallback, 43 | ) => ReturnType>; 44 | emit: T extends null 45 | ? (payload?: T) => ReturnType 46 | : (payload: T) => ReturnType; 47 | }; 48 | 49 | export type Result = 50 | | { status: "ok"; data: T } 51 | | { status: "error"; error: E }; 52 | 53 | function __makeEvents__>( 54 | mappings: Record, 55 | ) { 56 | return new Proxy( 57 | {} as unknown as { 58 | [K in keyof T]: __EventObj__ & { 59 | (handle: __WebviewWindow__): __EventObj__; 60 | }; 61 | }, 62 | { 63 | get: (_, event) => { 64 | const name = mappings[event as keyof T]; 65 | 66 | return new Proxy((() => {}) as any, { 67 | apply: (_, __, [window]: [__WebviewWindow__]) => ({ 68 | listen: (arg: any) => window.listen(name, arg), 69 | once: (arg: any) => window.once(name, arg), 70 | emit: (arg: any) => window.emit(name, arg), 71 | }), 72 | get: (_, command: keyof __EventObj__) => { 73 | switch (command) { 74 | case "listen": 75 | return (arg: any) => TAURI_API_EVENT.listen(name, arg); 76 | case "once": 77 | return (arg: any) => TAURI_API_EVENT.once(name, arg); 78 | case "emit": 79 | return (arg: any) => TAURI_API_EVENT.emit(name, arg); 80 | } 81 | }, 82 | }); 83 | }, 84 | }, 85 | ); 86 | } 87 | -------------------------------------------------------------------------------- /src/components/footer.tsx: -------------------------------------------------------------------------------- 1 | function SafeLink({ href, text }: { href: string; text: string }) { 2 | return ( 3 | 4 | {text} 5 | 6 | ); 7 | } 8 | export default function Footer() { 9 | return ( 10 |
11 | 12 | Built with at{" "} 13 | 14 | 15 | 25 |
26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /src/components/logo.tsx: -------------------------------------------------------------------------------- 1 | export function Logo() { 2 | return ( 3 |

4 | Pulsar 5 | dependency scanner. 6 |

7 | ); 8 | } 9 | -------------------------------------------------------------------------------- /src/components/results-table.tsx: -------------------------------------------------------------------------------- 1 | import { For, Show, createResource, createSignal } from "solid-js"; 2 | import { TransitionGroup } from "solid-transition-group"; 3 | import { formatSizeUnit } from "../lib/format"; 4 | import { getDirName } from "../lib/get-dir-name"; 5 | import { Trashbin } from "./trashbin"; 6 | import { exists, remove } from "@tauri-apps/plugin-fs"; 7 | import { confirm } from "@tauri-apps/plugin-dialog"; 8 | import { type FolderStat } from "../commands"; 9 | import { Checkbox } from "@kobalte/core"; 10 | 11 | type ListProps = { 12 | folderList: FolderStat[]; 13 | }; 14 | 15 | type TRprops = { 16 | directory: string; 17 | directoryPrefix: string; 18 | modulesSize: string; 19 | }; 20 | 21 | function deleteNodeModules(path: string) { 22 | return async (_shouldDelete: boolean) => { 23 | const fileExists = await exists(path); 24 | 25 | if (fileExists) { 26 | console.warn(":: deleting ::"); 27 | await remove(`${path}/node_modules`, { recursive: true }); 28 | } 29 | 30 | return true; 31 | }; 32 | } 33 | 34 | function TableRow(props: TRprops) { 35 | const [shouldDelete, setDelete] = createSignal(false); 36 | 37 | const [data] = createResource( 38 | shouldDelete, 39 | deleteNodeModules(props.directoryPrefix + props.directory), 40 | ); 41 | 42 | async function confirmDelete() { 43 | const shouldDelete = await confirm( 44 | `${props.directoryPrefix + props.directory} will be DELETED. 45 | 46 | Are you sure? 47 | `, 48 | { 49 | kind: "warning", 50 | title: "NON-REVERSIBLE ACTION", 51 | okLabel: "DELETE", 52 | }, 53 | ); 54 | 55 | setDelete(shouldDelete); 56 | } 57 | 58 | return ( 59 | 60 | 63 | 64 | 65 | {props.directory} 66 | 67 | 68 | {props.directoryPrefix} 69 | {props.directory}/node_modules 70 | 71 | 72 | {props.modulesSize} 73 | 74 |
    75 |
  • 76 | 77 | 82 |
  • 83 |
  • 84 | 92 |
  • 93 |
94 | 95 | 96 |
97 | ); 98 | } 99 | 100 | export default function ResultsTable(props: ListProps) { 101 | return ( 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 116 | 117 | {({ path, size }) => { 118 | if (!Boolean(path)) { 119 | return null; 120 | } 121 | const dirName = getDirName(path); 122 | if (dirName === null) { 123 | return null; 124 | } 125 | const modulesSize = formatSizeUnit(size); 126 | 127 | return ( 128 | 133 | ); 134 | }} 135 | 136 | 137 | 138 |
NameSizeAction
139 | ); 140 | } 141 | -------------------------------------------------------------------------------- /src/components/scanner.tsx: -------------------------------------------------------------------------------- 1 | import { Match, Switch, createSignal } from "solid-js"; 2 | import { commands } from "../commands"; 3 | import { open } from "@tauri-apps/plugin-dialog"; 4 | import { ScanStoreSetter } from "../lib/store"; 5 | 6 | type ScannerProps = { 7 | setScanData: ScanStoreSetter; 8 | }; 9 | 10 | export function Scanner(props: ScannerProps) { 11 | async function scan(scope: string) { 12 | const start = window.performance.now(); 13 | const result = await commands.getDirData(scope); 14 | if (result.status === "error") { 15 | return; 16 | } 17 | const list = result.data; 18 | const end = window.performance.now(); 19 | 20 | props.setScanData("elapsed", end - start); 21 | props.setScanData("fileList", list as any); 22 | props.setScanData("status", "idle"); 23 | } 24 | 25 | async function getRootScope() { 26 | const selected = await open({ 27 | directory: true, 28 | recursive: false, 29 | multiple: false, 30 | }); 31 | 32 | /** 33 | * types will be fixed upstream in Tauri soon. 34 | */ 35 | if (Array.isArray(selected)) { 36 | return; 37 | } 38 | 39 | setRootScope(selected); 40 | } 41 | 42 | const [rootScope, setRootScope] = createSignal(null); 43 | const hasScope = () => typeof rootScope() === "string"; 44 | 45 | const rootScopeDisplay = () => { 46 | const scope = rootScope(); 47 | if (scope === null) return null; 48 | 49 | return scope.length > 30 50 | ? `...${scope.substring(scope.length - 10, scope.length)}` 51 | : scope; 52 | }; 53 | 54 | return ( 55 |
{ 58 | e.preventDefault(); 59 | console.info(`scanning: ${rootScope()}`); 60 | props.setScanData("status", "scanning"); 61 | scan(rootScope()!); 62 | }} 63 | > 64 | 75 | 82 |
83 | ); 84 | } 85 | -------------------------------------------------------------------------------- /src/components/trashbin.tsx: -------------------------------------------------------------------------------- 1 | export function Trashbin() { 2 | return ( 3 | 12 | 17 | 18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | /* @refresh reload */ 2 | import { render } from "solid-js/web"; 3 | 4 | import App from "./App"; 5 | 6 | render(() => , document.getElementById("root") as HTMLElement); 7 | -------------------------------------------------------------------------------- /src/lib/format.ts: -------------------------------------------------------------------------------- 1 | export function formatSizeUnit(bytes: number) { 2 | const KILO = 1000; 3 | const MEGA = KILO * 1000; 4 | const GIGA = MEGA * 1000; 5 | const TERA = GIGA * 1000; 6 | 7 | if (bytes > TERA) { 8 | return Math.trunc(bytes / GIGA) + "tb"; 9 | } 10 | 11 | if (bytes > GIGA) { 12 | return (bytes / GIGA).toFixed(2) + "gb"; 13 | } 14 | 15 | if (bytes > MEGA) { 16 | return Math.trunc(bytes / MEGA) + "mb"; 17 | } 18 | 19 | if (bytes > KILO) { 20 | return (bytes / KILO).toFixed(2) + "kb"; 21 | } 22 | 23 | return Math.trunc(bytes) + "b"; 24 | } 25 | -------------------------------------------------------------------------------- /src/lib/get-dir-name.ts: -------------------------------------------------------------------------------- 1 | const REGEX = /^(.*\/)([^/]+)\/node_modules$/; 2 | 3 | export function getDirName(path: string) { 4 | path = path.replace(/\\/g, '/'); 5 | const match = path.match(REGEX); 6 | 7 | if (match) { 8 | return { 9 | prefix: match[1], 10 | dir: match[2], 11 | }; 12 | } else { 13 | return null; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/lib/store.ts: -------------------------------------------------------------------------------- 1 | import { createContext, useContext } from "solid-js"; 2 | import { createStore } from "solid-js/store"; 3 | import { type FolderStat } from "../commands"; 4 | 5 | type Data = { 6 | fileList: FolderStat[]; 7 | elapsed: number; 8 | status: "idle" | "scanning"; 9 | 10 | // computed 11 | stats: string; 12 | }; 13 | 14 | export const initialStore: Data = { 15 | fileList: [], 16 | elapsed: 0, 17 | status: "idle", 18 | 19 | get stats() { 20 | const timespan = (this.elapsed / 1000).toFixed(2); 21 | return `scanned ${this.fileList.length} projects in ${timespan} seconds.`; 22 | }, 23 | }; 24 | const ScanContext = createContext<{ 25 | scanData: Data; 26 | }>(); 27 | 28 | export const scanStore = createStore(initialStore); 29 | export type ScanStoreSetter = (typeof scanStore)[1]; 30 | 31 | export function useScan() { 32 | const ctx = useContext(ScanContext); 33 | 34 | if (!ctx) throw new Error("can not find context"); 35 | return ctx; 36 | } 37 | -------------------------------------------------------------------------------- /src/lib/updater.ts: -------------------------------------------------------------------------------- 1 | import { check } from "@tauri-apps/plugin-updater"; 2 | import { ask, message } from "@tauri-apps/plugin-dialog"; 3 | import { relaunch } from "@tauri-apps/plugin-process"; 4 | 5 | export async function checkForAppUpdates(onUserClick: false) { 6 | const update = await check(); 7 | 8 | if (update?.available) { 9 | const yes = await ask( 10 | ` 11 | Update to ${update.version} is available! 12 | Release notes: ${update.body} 13 | `, 14 | { 15 | title: "Update Now!", 16 | kind: "info", 17 | okLabel: "Update", 18 | cancelLabel: "Cancel", 19 | } 20 | ); 21 | 22 | if (yes) { 23 | await update.downloadAndInstall(); 24 | // Restart the app after the update is installed by calling the Tauri command that handles restart for your app 25 | // It is good practice to shut down any background processes gracefully before restarting 26 | // As an alternative, you could ask the user to restart the app manually 27 | await relaunch(); 28 | } 29 | // Support for manual updates. 30 | } else if (onUserClick) { 31 | await message("You are on the latest version.", { 32 | title: "No Update Found", 33 | kind: "info", 34 | okLabel: "OK", 35 | }); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /tailwind.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | content: ["./src/**/*.{js,jsx,ts,tsx}", "./index.html"], 3 | theme: { 4 | extend: {}, 5 | }, 6 | plugins: [], 7 | }; 8 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "noEmit": true, 15 | "jsx": "preserve", 16 | "jsxImportSource": "solid-js", 17 | 18 | /* Linting */ 19 | "strict": true, 20 | "noUnusedLocals": true, 21 | "noUnusedParameters": true, 22 | "noFallthroughCasesInSwitch": true 23 | }, 24 | "include": ["src"], 25 | "references": [{ "path": "./tsconfig.node.json" }] 26 | } 27 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import solidPlugin from "vite-plugin-solid"; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig(async () => ({ 6 | plugins: [solidPlugin()], 7 | 8 | // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` 9 | // 10 | // 1. prevent vite from obscuring rust errors 11 | clearScreen: false, 12 | // 2. tauri expects a fixed port, fail if that port is not available 13 | server: { 14 | port: 1420, 15 | strictPort: true, 16 | }, 17 | // 3. to make use of `TAURI_DEBUG` and other env variables 18 | // https://tauri.studio/v1/api/config#buildconfig.beforedevcommand 19 | envPrefix: ["VITE_", "TAURI_"], 20 | })); 21 | --------------------------------------------------------------------------------