├── .gitignore ├── .prettierrc ├── README.md ├── index.html ├── package.json ├── plugins └── prefetch.ts ├── pnpm-lock.yaml ├── postcss.config.cjs ├── public ├── cursors │ └── normal-select.png ├── favicon.ico └── wallpapers │ ├── 1-1.png │ ├── 1-1.webp │ ├── 1-2.png │ └── 1-2.webp ├── src ├── components │ └── HomeScreen │ │ ├── HomeIndicator.svelte │ │ ├── HomeScreen.svelte │ │ ├── LockScreen.svelte │ │ └── Wallpaper.svelte ├── css │ ├── global.scss │ ├── reset.scss │ └── themes.scss ├── global.d.ts ├── main.ts ├── stores │ ├── theme.store.ts │ └── time.store.ts ├── types.ts └── utils │ └── throttle.ts ├── svelte.config.js ├── tsconfig.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | /.vscode/ 4 | .DS_Store 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "useTabs": true, 4 | "singleQuote": true 5 | } 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | iOS, but for web 😉 2 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | iOS in Svelte 8 | 9 | 10 | 11 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ios-web", 3 | "version": "0.0.0", 4 | "type": "module", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "pnpm check && vite build", 8 | "preview": "vite preview", 9 | "check": "svelte-check --tsconfig ./tsconfig.json" 10 | }, 11 | "stackblitz": { 12 | "startCommand": "npm run dev" 13 | }, 14 | "devDependencies": { 15 | "@iconify-json/bi": "^1.0.10", 16 | "@iconify-json/ion": "^1.0.3", 17 | "@sveltejs/vite-plugin-svelte": "^1.0.0-next.34", 18 | "autoprefixer": "^10.4.2", 19 | "postcss": "^8.4.5", 20 | "sass": "^1.49.0", 21 | "svelte": "^3.46.2", 22 | "svelte-check": "^2.3.0", 23 | "svelte-preprocess": "^4.10.2", 24 | "typescript": "^4.5.4", 25 | "unplugin-icons": "^0.13.0", 26 | "vite": "^2.7.13" 27 | }, 28 | "dependencies": { 29 | "date-fns": "^2.28.0", 30 | "longpress-svelte": "^1.0.0", 31 | "svelte-drag": "^2.4.0", 32 | "svelte-local-storage-store": "^0.2.6" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /plugins/prefetch.ts: -------------------------------------------------------------------------------- 1 | import type { HtmlTagDescriptor, Plugin } from 'vite'; 2 | 3 | export function prefetch(): Plugin { 4 | return { 5 | name: 'prefetch', 6 | 7 | enforce: 'post', 8 | apply: 'build', 9 | 10 | transformIndexHtml: (html, ctx) => { 11 | const tags = Object.keys(ctx.bundle).map( 12 | (chunkName) => 13 | ({ 14 | injectTo: 'head', 15 | tag: 'link', 16 | attrs: { 17 | rel: 'prefetch', 18 | href: `/${chunkName}`, 19 | }, 20 | } as HtmlTagDescriptor) 21 | ); 22 | 23 | return { 24 | html, 25 | tags, 26 | }; 27 | }, 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | '@iconify-json/bi': ^1.0.10 5 | '@iconify-json/ion': ^1.0.3 6 | '@sveltejs/vite-plugin-svelte': ^1.0.0-next.34 7 | autoprefixer: ^10.4.2 8 | date-fns: ^2.28.0 9 | i: ^0.3.7 10 | longpress-svelte: ^1.0.0 11 | postcss: ^8.4.5 12 | sass: ^1.49.0 13 | svelte: ^3.46.2 14 | svelte-check: ^2.3.0 15 | svelte-drag: ^2.4.0 16 | svelte-local-storage-store: ^0.2.6 17 | svelte-preprocess: ^4.10.2 18 | typescript: ^4.5.4 19 | unplugin-icons: ^0.13.0 20 | vite: ^2.7.13 21 | 22 | dependencies: 23 | date-fns: 2.28.0 24 | i: 0.3.7 25 | longpress-svelte: 1.0.0 26 | svelte-drag: 2.4.0 27 | svelte-local-storage-store: 0.2.6_svelte@3.46.2 28 | 29 | devDependencies: 30 | '@iconify-json/bi': 1.0.10 31 | '@iconify-json/ion': 1.0.3 32 | '@sveltejs/vite-plugin-svelte': 1.0.0-next.34_svelte@3.46.2+vite@2.7.13 33 | autoprefixer: 10.4.2_postcss@8.4.5 34 | postcss: 8.4.5 35 | sass: 1.49.0 36 | svelte: 3.46.2 37 | svelte-check: 2.3.0_77d7750cf002ab9dbc05a2cb89869e71 38 | svelte-preprocess: 4.10.2_24f955ca631190a520f39e29c134e7a4 39 | typescript: 4.5.4 40 | unplugin-icons: 0.13.0_vite@2.7.13 41 | vite: 2.7.13_sass@1.49.0 42 | 43 | packages: 44 | 45 | /@antfu/install-pkg/0.1.0: 46 | resolution: {integrity: sha512-VaIJd3d1o7irZfK1U0nvBsHMyjkuyMP3HKYVV53z8DKyulkHKmjhhtccXO51WSPeeSHIeoJEoNOKavYpS7jkZw==} 47 | dependencies: 48 | execa: 5.1.1 49 | find-up: 5.0.0 50 | dev: true 51 | 52 | /@antfu/utils/0.3.0: 53 | resolution: {integrity: sha512-UU8TLr/EoXdg7OjMp0h9oDoIAVr+Z/oW9cpOxQQyrsz6Qzd2ms/1CdWx8fl2OQdFpxGmq5Vc4TwfLHId6nAZjA==} 54 | dependencies: 55 | '@types/throttle-debounce': 2.1.0 56 | dev: true 57 | 58 | /@antfu/utils/0.4.0: 59 | resolution: {integrity: sha512-gqkpvjkgFUu+s3kP+Ly33OKpo5zvVY3FDFhv5BIb98SncS3KD6DNxPfNDjwHIoyXbz1leWo1j8DtRLZ1D2Jv+Q==} 60 | dependencies: 61 | '@types/throttle-debounce': 2.1.0 62 | dev: true 63 | 64 | /@iconify-json/bi/1.0.10: 65 | resolution: {integrity: sha512-mvVWW68kRup2ZP2UCmxMBlUs46tmYqZyCvfnSIc/g7TwSZn4BFihazirNL0nOJS2dcZy+lhh9SouQltyuLIjfw==} 66 | dependencies: 67 | '@iconify/types': 1.0.12 68 | dev: true 69 | 70 | /@iconify-json/ion/1.0.3: 71 | resolution: {integrity: sha512-U+ykIbPHxvfUggDhvkd1eZUniUVhbwXeu9qMJsuJWjL1QOlDlBBDgdJgDqnPAQ7o67A+i23PNM5RLSQnKGTWzw==} 72 | dependencies: 73 | '@iconify/types': 1.0.12 74 | dev: true 75 | 76 | /@iconify/types/1.0.12: 77 | resolution: {integrity: sha512-6er6wSGF3hgc1JEZqiGpg21CTCjHBYOUwqLmb2Idzkjiw6ogalGP0ZMLVutCzah+0WB4yP+Zd2oVPN8jvJ+Ftg==} 78 | dev: true 79 | 80 | /@iconify/utils/1.0.21: 81 | resolution: {integrity: sha512-Rf8vfOH7MI30xyc9rbLFdxnfsfdcrIiIxsoZyEWkUK8P65QsS9PrQXunOc9Wt7uZfJTiX25WMED3WqLKXrRx1Q==} 82 | dependencies: 83 | '@antfu/install-pkg': 0.1.0 84 | '@antfu/utils': 0.3.0 85 | '@iconify/types': 1.0.12 86 | debug: 4.3.3 87 | kolorist: 1.5.1 88 | local-pkg: 0.4.1 89 | transitivePeerDependencies: 90 | - supports-color 91 | dev: true 92 | 93 | /@nodelib/fs.scandir/2.1.5: 94 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 95 | engines: {node: '>= 8'} 96 | dependencies: 97 | '@nodelib/fs.stat': 2.0.5 98 | run-parallel: 1.2.0 99 | dev: true 100 | 101 | /@nodelib/fs.stat/2.0.5: 102 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 103 | engines: {node: '>= 8'} 104 | dev: true 105 | 106 | /@nodelib/fs.walk/1.2.8: 107 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 108 | engines: {node: '>= 8'} 109 | dependencies: 110 | '@nodelib/fs.scandir': 2.1.5 111 | fastq: 1.13.0 112 | dev: true 113 | 114 | /@rollup/pluginutils/4.1.2: 115 | resolution: {integrity: sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==} 116 | engines: {node: '>= 8.0.0'} 117 | dependencies: 118 | estree-walker: 2.0.2 119 | picomatch: 2.3.1 120 | dev: true 121 | 122 | /@sveltejs/vite-plugin-svelte/1.0.0-next.34_svelte@3.46.2+vite@2.7.13: 123 | resolution: {integrity: sha512-qZH2jndijrdkvevgbO7OH3iQsviM5Kz7h5APiNP4yEMZTrwq9bifzYvco6BprwtPvLb5wYlRVFZUOdusY6AovQ==} 124 | engines: {node: ^14.13.1 || >= 16} 125 | peerDependencies: 126 | diff-match-patch: ^1.0.5 127 | svelte: ^3.44.0 128 | vite: ^2.7.0 129 | peerDependenciesMeta: 130 | diff-match-patch: 131 | optional: true 132 | dependencies: 133 | '@rollup/pluginutils': 4.1.2 134 | debug: 4.3.3 135 | kleur: 4.1.4 136 | magic-string: 0.25.7 137 | require-relative: 0.8.7 138 | svelte: 3.46.2 139 | svelte-hmr: 0.14.9_svelte@3.46.2 140 | vite: 2.7.13_sass@1.49.0 141 | transitivePeerDependencies: 142 | - supports-color 143 | dev: true 144 | 145 | /@types/node/17.0.10: 146 | resolution: {integrity: sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog==} 147 | dev: true 148 | 149 | /@types/pug/2.0.6: 150 | resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} 151 | dev: true 152 | 153 | /@types/sass/1.43.1: 154 | resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==} 155 | dependencies: 156 | '@types/node': 17.0.10 157 | dev: true 158 | 159 | /@types/throttle-debounce/2.1.0: 160 | resolution: {integrity: sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==} 161 | dev: true 162 | 163 | /anymatch/3.1.2: 164 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 165 | engines: {node: '>= 8'} 166 | dependencies: 167 | normalize-path: 3.0.0 168 | picomatch: 2.3.1 169 | dev: true 170 | 171 | /autoprefixer/10.4.2_postcss@8.4.5: 172 | resolution: {integrity: sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==} 173 | engines: {node: ^10 || ^12 || >=14} 174 | hasBin: true 175 | peerDependencies: 176 | postcss: ^8.1.0 177 | dependencies: 178 | browserslist: 4.19.1 179 | caniuse-lite: 1.0.30001300 180 | fraction.js: 4.1.2 181 | normalize-range: 0.1.2 182 | picocolors: 1.0.0 183 | postcss: 8.4.5 184 | postcss-value-parser: 4.2.0 185 | dev: true 186 | 187 | /balanced-match/1.0.2: 188 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 189 | dev: true 190 | 191 | /binary-extensions/2.2.0: 192 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 193 | engines: {node: '>=8'} 194 | dev: true 195 | 196 | /brace-expansion/1.1.11: 197 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 198 | dependencies: 199 | balanced-match: 1.0.2 200 | concat-map: 0.0.1 201 | dev: true 202 | 203 | /braces/3.0.2: 204 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 205 | engines: {node: '>=8'} 206 | dependencies: 207 | fill-range: 7.0.1 208 | dev: true 209 | 210 | /browserslist/4.19.1: 211 | resolution: {integrity: sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==} 212 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 213 | hasBin: true 214 | dependencies: 215 | caniuse-lite: 1.0.30001300 216 | electron-to-chromium: 1.4.48 217 | escalade: 3.1.1 218 | node-releases: 2.0.1 219 | picocolors: 1.0.0 220 | dev: true 221 | 222 | /buffer-crc32/0.2.13: 223 | resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} 224 | dev: true 225 | 226 | /callsites/3.1.0: 227 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 228 | engines: {node: '>=6'} 229 | dev: true 230 | 231 | /caniuse-lite/1.0.30001300: 232 | resolution: {integrity: sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==} 233 | dev: true 234 | 235 | /chokidar/3.5.3: 236 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 237 | engines: {node: '>= 8.10.0'} 238 | dependencies: 239 | anymatch: 3.1.2 240 | braces: 3.0.2 241 | glob-parent: 5.1.2 242 | is-binary-path: 2.1.0 243 | is-glob: 4.0.3 244 | normalize-path: 3.0.0 245 | readdirp: 3.6.0 246 | optionalDependencies: 247 | fsevents: 2.3.2 248 | dev: true 249 | 250 | /concat-map/0.0.1: 251 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 252 | dev: true 253 | 254 | /cross-spawn/7.0.3: 255 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 256 | engines: {node: '>= 8'} 257 | dependencies: 258 | path-key: 3.1.1 259 | shebang-command: 2.0.0 260 | which: 2.0.2 261 | dev: true 262 | 263 | /date-fns/2.28.0: 264 | resolution: {integrity: sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==} 265 | engines: {node: '>=0.11'} 266 | dev: false 267 | 268 | /debug/4.3.3: 269 | resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} 270 | engines: {node: '>=6.0'} 271 | peerDependencies: 272 | supports-color: '*' 273 | peerDependenciesMeta: 274 | supports-color: 275 | optional: true 276 | dependencies: 277 | ms: 2.1.2 278 | dev: true 279 | 280 | /detect-indent/6.1.0: 281 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 282 | engines: {node: '>=8'} 283 | dev: true 284 | 285 | /electron-to-chromium/1.4.48: 286 | resolution: {integrity: sha512-RT3SEmpv7XUA+tKXrZGudAWLDpa7f8qmhjcLaM6OD/ERxjQ/zAojT8/Vvo0BSzbArkElFZ1WyZ9FuwAYbkdBNA==} 287 | dev: true 288 | 289 | /es6-promise/3.3.1: 290 | resolution: {integrity: sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=} 291 | dev: true 292 | 293 | /esbuild-android-arm64/0.13.15: 294 | resolution: {integrity: sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==} 295 | cpu: [arm64] 296 | os: [android] 297 | requiresBuild: true 298 | dev: true 299 | optional: true 300 | 301 | /esbuild-darwin-64/0.13.15: 302 | resolution: {integrity: sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==} 303 | cpu: [x64] 304 | os: [darwin] 305 | requiresBuild: true 306 | dev: true 307 | optional: true 308 | 309 | /esbuild-darwin-arm64/0.13.15: 310 | resolution: {integrity: sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==} 311 | cpu: [arm64] 312 | os: [darwin] 313 | requiresBuild: true 314 | dev: true 315 | optional: true 316 | 317 | /esbuild-freebsd-64/0.13.15: 318 | resolution: {integrity: sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==} 319 | cpu: [x64] 320 | os: [freebsd] 321 | requiresBuild: true 322 | dev: true 323 | optional: true 324 | 325 | /esbuild-freebsd-arm64/0.13.15: 326 | resolution: {integrity: sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==} 327 | cpu: [arm64] 328 | os: [freebsd] 329 | requiresBuild: true 330 | dev: true 331 | optional: true 332 | 333 | /esbuild-linux-32/0.13.15: 334 | resolution: {integrity: sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==} 335 | cpu: [ia32] 336 | os: [linux] 337 | requiresBuild: true 338 | dev: true 339 | optional: true 340 | 341 | /esbuild-linux-64/0.13.15: 342 | resolution: {integrity: sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==} 343 | cpu: [x64] 344 | os: [linux] 345 | requiresBuild: true 346 | dev: true 347 | optional: true 348 | 349 | /esbuild-linux-arm/0.13.15: 350 | resolution: {integrity: sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==} 351 | cpu: [arm] 352 | os: [linux] 353 | requiresBuild: true 354 | dev: true 355 | optional: true 356 | 357 | /esbuild-linux-arm64/0.13.15: 358 | resolution: {integrity: sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==} 359 | cpu: [arm64] 360 | os: [linux] 361 | requiresBuild: true 362 | dev: true 363 | optional: true 364 | 365 | /esbuild-linux-mips64le/0.13.15: 366 | resolution: {integrity: sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==} 367 | cpu: [mips64el] 368 | os: [linux] 369 | requiresBuild: true 370 | dev: true 371 | optional: true 372 | 373 | /esbuild-linux-ppc64le/0.13.15: 374 | resolution: {integrity: sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==} 375 | cpu: [ppc64] 376 | os: [linux] 377 | requiresBuild: true 378 | dev: true 379 | optional: true 380 | 381 | /esbuild-netbsd-64/0.13.15: 382 | resolution: {integrity: sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==} 383 | cpu: [x64] 384 | os: [netbsd] 385 | requiresBuild: true 386 | dev: true 387 | optional: true 388 | 389 | /esbuild-openbsd-64/0.13.15: 390 | resolution: {integrity: sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==} 391 | cpu: [x64] 392 | os: [openbsd] 393 | requiresBuild: true 394 | dev: true 395 | optional: true 396 | 397 | /esbuild-sunos-64/0.13.15: 398 | resolution: {integrity: sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==} 399 | cpu: [x64] 400 | os: [sunos] 401 | requiresBuild: true 402 | dev: true 403 | optional: true 404 | 405 | /esbuild-windows-32/0.13.15: 406 | resolution: {integrity: sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==} 407 | cpu: [ia32] 408 | os: [win32] 409 | requiresBuild: true 410 | dev: true 411 | optional: true 412 | 413 | /esbuild-windows-64/0.13.15: 414 | resolution: {integrity: sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==} 415 | cpu: [x64] 416 | os: [win32] 417 | requiresBuild: true 418 | dev: true 419 | optional: true 420 | 421 | /esbuild-windows-arm64/0.13.15: 422 | resolution: {integrity: sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==} 423 | cpu: [arm64] 424 | os: [win32] 425 | requiresBuild: true 426 | dev: true 427 | optional: true 428 | 429 | /esbuild/0.13.15: 430 | resolution: {integrity: sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==} 431 | hasBin: true 432 | requiresBuild: true 433 | optionalDependencies: 434 | esbuild-android-arm64: 0.13.15 435 | esbuild-darwin-64: 0.13.15 436 | esbuild-darwin-arm64: 0.13.15 437 | esbuild-freebsd-64: 0.13.15 438 | esbuild-freebsd-arm64: 0.13.15 439 | esbuild-linux-32: 0.13.15 440 | esbuild-linux-64: 0.13.15 441 | esbuild-linux-arm: 0.13.15 442 | esbuild-linux-arm64: 0.13.15 443 | esbuild-linux-mips64le: 0.13.15 444 | esbuild-linux-ppc64le: 0.13.15 445 | esbuild-netbsd-64: 0.13.15 446 | esbuild-openbsd-64: 0.13.15 447 | esbuild-sunos-64: 0.13.15 448 | esbuild-windows-32: 0.13.15 449 | esbuild-windows-64: 0.13.15 450 | esbuild-windows-arm64: 0.13.15 451 | dev: true 452 | 453 | /escalade/3.1.1: 454 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 455 | engines: {node: '>=6'} 456 | dev: true 457 | 458 | /estree-walker/2.0.2: 459 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 460 | dev: true 461 | 462 | /execa/5.1.1: 463 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 464 | engines: {node: '>=10'} 465 | dependencies: 466 | cross-spawn: 7.0.3 467 | get-stream: 6.0.1 468 | human-signals: 2.1.0 469 | is-stream: 2.0.1 470 | merge-stream: 2.0.0 471 | npm-run-path: 4.0.1 472 | onetime: 5.1.2 473 | signal-exit: 3.0.6 474 | strip-final-newline: 2.0.0 475 | dev: true 476 | 477 | /fast-glob/3.2.11: 478 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} 479 | engines: {node: '>=8.6.0'} 480 | dependencies: 481 | '@nodelib/fs.stat': 2.0.5 482 | '@nodelib/fs.walk': 1.2.8 483 | glob-parent: 5.1.2 484 | merge2: 1.4.1 485 | micromatch: 4.0.4 486 | dev: true 487 | 488 | /fastq/1.13.0: 489 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 490 | dependencies: 491 | reusify: 1.0.4 492 | dev: true 493 | 494 | /fill-range/7.0.1: 495 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 496 | engines: {node: '>=8'} 497 | dependencies: 498 | to-regex-range: 5.0.1 499 | dev: true 500 | 501 | /find-up/5.0.0: 502 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 503 | engines: {node: '>=10'} 504 | dependencies: 505 | locate-path: 6.0.0 506 | path-exists: 4.0.0 507 | dev: true 508 | 509 | /fraction.js/4.1.2: 510 | resolution: {integrity: sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==} 511 | dev: true 512 | 513 | /fs.realpath/1.0.0: 514 | resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} 515 | dev: true 516 | 517 | /fsevents/2.3.2: 518 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 519 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 520 | os: [darwin] 521 | requiresBuild: true 522 | dev: true 523 | optional: true 524 | 525 | /function-bind/1.1.1: 526 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 527 | dev: true 528 | 529 | /get-stream/6.0.1: 530 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 531 | engines: {node: '>=10'} 532 | dev: true 533 | 534 | /glob-parent/5.1.2: 535 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 536 | engines: {node: '>= 6'} 537 | dependencies: 538 | is-glob: 4.0.3 539 | dev: true 540 | 541 | /glob/7.2.0: 542 | resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} 543 | dependencies: 544 | fs.realpath: 1.0.0 545 | inflight: 1.0.6 546 | inherits: 2.0.4 547 | minimatch: 3.0.4 548 | once: 1.4.0 549 | path-is-absolute: 1.0.1 550 | dev: true 551 | 552 | /graceful-fs/4.2.9: 553 | resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} 554 | dev: true 555 | 556 | /has/1.0.3: 557 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 558 | engines: {node: '>= 0.4.0'} 559 | dependencies: 560 | function-bind: 1.1.1 561 | dev: true 562 | 563 | /human-signals/2.1.0: 564 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 565 | engines: {node: '>=10.17.0'} 566 | dev: true 567 | 568 | /i/0.3.7: 569 | resolution: {integrity: sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==} 570 | engines: {node: '>=0.4'} 571 | dev: false 572 | 573 | /immutable/4.0.0: 574 | resolution: {integrity: sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==} 575 | dev: true 576 | 577 | /import-fresh/3.3.0: 578 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 579 | engines: {node: '>=6'} 580 | dependencies: 581 | parent-module: 1.0.1 582 | resolve-from: 4.0.0 583 | dev: true 584 | 585 | /inflight/1.0.6: 586 | resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} 587 | dependencies: 588 | once: 1.4.0 589 | wrappy: 1.0.2 590 | dev: true 591 | 592 | /inherits/2.0.4: 593 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 594 | dev: true 595 | 596 | /is-binary-path/2.1.0: 597 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 598 | engines: {node: '>=8'} 599 | dependencies: 600 | binary-extensions: 2.2.0 601 | dev: true 602 | 603 | /is-core-module/2.8.1: 604 | resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} 605 | dependencies: 606 | has: 1.0.3 607 | dev: true 608 | 609 | /is-extglob/2.1.1: 610 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 611 | engines: {node: '>=0.10.0'} 612 | dev: true 613 | 614 | /is-glob/4.0.3: 615 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 616 | engines: {node: '>=0.10.0'} 617 | dependencies: 618 | is-extglob: 2.1.1 619 | dev: true 620 | 621 | /is-number/7.0.0: 622 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 623 | engines: {node: '>=0.12.0'} 624 | dev: true 625 | 626 | /is-stream/2.0.1: 627 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 628 | engines: {node: '>=8'} 629 | dev: true 630 | 631 | /isexe/2.0.0: 632 | resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} 633 | dev: true 634 | 635 | /kleur/4.1.4: 636 | resolution: {integrity: sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==} 637 | engines: {node: '>=6'} 638 | dev: true 639 | 640 | /kolorist/1.5.1: 641 | resolution: {integrity: sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==} 642 | dev: true 643 | 644 | /local-pkg/0.4.1: 645 | resolution: {integrity: sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==} 646 | engines: {node: '>=14'} 647 | dev: true 648 | 649 | /locate-path/6.0.0: 650 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 651 | engines: {node: '>=10'} 652 | dependencies: 653 | p-locate: 5.0.0 654 | dev: true 655 | 656 | /longpress-svelte/1.0.0: 657 | resolution: {integrity: sha512-szGKbBpQxwjcl2bHWJShM7pRi/944muMQtzNHbn870pAdh1DIWZr1ExS2+ncL47MlR43HbBM1WnQ1uIA44CVrg==} 658 | dev: false 659 | 660 | /magic-string/0.25.7: 661 | resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==} 662 | dependencies: 663 | sourcemap-codec: 1.4.8 664 | dev: true 665 | 666 | /merge-stream/2.0.0: 667 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 668 | dev: true 669 | 670 | /merge2/1.4.1: 671 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 672 | engines: {node: '>= 8'} 673 | dev: true 674 | 675 | /micromatch/4.0.4: 676 | resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} 677 | engines: {node: '>=8.6'} 678 | dependencies: 679 | braces: 3.0.2 680 | picomatch: 2.3.1 681 | dev: true 682 | 683 | /mimic-fn/2.1.0: 684 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 685 | engines: {node: '>=6'} 686 | dev: true 687 | 688 | /min-indent/1.0.1: 689 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 690 | engines: {node: '>=4'} 691 | dev: true 692 | 693 | /minimatch/3.0.4: 694 | resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} 695 | dependencies: 696 | brace-expansion: 1.1.11 697 | dev: true 698 | 699 | /minimist/1.2.5: 700 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} 701 | dev: true 702 | 703 | /mkdirp/0.5.5: 704 | resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} 705 | hasBin: true 706 | dependencies: 707 | minimist: 1.2.5 708 | dev: true 709 | 710 | /mri/1.2.0: 711 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 712 | engines: {node: '>=4'} 713 | dev: true 714 | 715 | /ms/2.1.2: 716 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 717 | dev: true 718 | 719 | /nanoid/3.2.0: 720 | resolution: {integrity: sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==} 721 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 722 | hasBin: true 723 | dev: true 724 | 725 | /node-releases/2.0.1: 726 | resolution: {integrity: sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==} 727 | dev: true 728 | 729 | /normalize-path/3.0.0: 730 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 731 | engines: {node: '>=0.10.0'} 732 | dev: true 733 | 734 | /normalize-range/0.1.2: 735 | resolution: {integrity: sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=} 736 | engines: {node: '>=0.10.0'} 737 | dev: true 738 | 739 | /npm-run-path/4.0.1: 740 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 741 | engines: {node: '>=8'} 742 | dependencies: 743 | path-key: 3.1.1 744 | dev: true 745 | 746 | /once/1.4.0: 747 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} 748 | dependencies: 749 | wrappy: 1.0.2 750 | dev: true 751 | 752 | /onetime/5.1.2: 753 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 754 | engines: {node: '>=6'} 755 | dependencies: 756 | mimic-fn: 2.1.0 757 | dev: true 758 | 759 | /p-limit/3.1.0: 760 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 761 | engines: {node: '>=10'} 762 | dependencies: 763 | yocto-queue: 0.1.0 764 | dev: true 765 | 766 | /p-locate/5.0.0: 767 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 768 | engines: {node: '>=10'} 769 | dependencies: 770 | p-limit: 3.1.0 771 | dev: true 772 | 773 | /parent-module/1.0.1: 774 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 775 | engines: {node: '>=6'} 776 | dependencies: 777 | callsites: 3.1.0 778 | dev: true 779 | 780 | /path-exists/4.0.0: 781 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 782 | engines: {node: '>=8'} 783 | dev: true 784 | 785 | /path-is-absolute/1.0.1: 786 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} 787 | engines: {node: '>=0.10.0'} 788 | dev: true 789 | 790 | /path-key/3.1.1: 791 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 792 | engines: {node: '>=8'} 793 | dev: true 794 | 795 | /path-parse/1.0.7: 796 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 797 | dev: true 798 | 799 | /picocolors/1.0.0: 800 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 801 | dev: true 802 | 803 | /picomatch/2.3.1: 804 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 805 | engines: {node: '>=8.6'} 806 | dev: true 807 | 808 | /postcss-value-parser/4.2.0: 809 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 810 | dev: true 811 | 812 | /postcss/8.4.5: 813 | resolution: {integrity: sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==} 814 | engines: {node: ^10 || ^12 || >=14} 815 | dependencies: 816 | nanoid: 3.2.0 817 | picocolors: 1.0.0 818 | source-map-js: 1.0.2 819 | dev: true 820 | 821 | /queue-microtask/1.2.3: 822 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 823 | dev: true 824 | 825 | /readdirp/3.6.0: 826 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 827 | engines: {node: '>=8.10.0'} 828 | dependencies: 829 | picomatch: 2.3.1 830 | dev: true 831 | 832 | /require-relative/0.8.7: 833 | resolution: {integrity: sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=} 834 | dev: true 835 | 836 | /resolve-from/4.0.0: 837 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 838 | engines: {node: '>=4'} 839 | dev: true 840 | 841 | /resolve/1.21.0: 842 | resolution: {integrity: sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==} 843 | hasBin: true 844 | dependencies: 845 | is-core-module: 2.8.1 846 | path-parse: 1.0.7 847 | supports-preserve-symlinks-flag: 1.0.0 848 | dev: true 849 | 850 | /reusify/1.0.4: 851 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 852 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 853 | dev: true 854 | 855 | /rimraf/2.7.1: 856 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} 857 | hasBin: true 858 | dependencies: 859 | glob: 7.2.0 860 | dev: true 861 | 862 | /rollup/2.64.0: 863 | resolution: {integrity: sha512-+c+lbw1lexBKSMb1yxGDVfJ+vchJH3qLbmavR+awDinTDA2C5Ug9u7lkOzj62SCu0PKUExsW36tpgW7Fmpn3yQ==} 864 | engines: {node: '>=10.0.0'} 865 | hasBin: true 866 | optionalDependencies: 867 | fsevents: 2.3.2 868 | dev: true 869 | 870 | /run-parallel/1.2.0: 871 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 872 | dependencies: 873 | queue-microtask: 1.2.3 874 | dev: true 875 | 876 | /sade/1.8.1: 877 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 878 | engines: {node: '>=6'} 879 | dependencies: 880 | mri: 1.2.0 881 | dev: true 882 | 883 | /sander/0.5.1: 884 | resolution: {integrity: sha1-dB4kXiMfB8r7b98PEzrfohalAq0=} 885 | dependencies: 886 | es6-promise: 3.3.1 887 | graceful-fs: 4.2.9 888 | mkdirp: 0.5.5 889 | rimraf: 2.7.1 890 | dev: true 891 | 892 | /sass/1.49.0: 893 | resolution: {integrity: sha512-TVwVdNDj6p6b4QymJtNtRS2YtLJ/CqZriGg0eIAbAKMlN8Xy6kbv33FsEZSF7FufFFM705SQviHjjThfaQ4VNw==} 894 | engines: {node: '>=8.9.0'} 895 | hasBin: true 896 | dependencies: 897 | chokidar: 3.5.3 898 | immutable: 4.0.0 899 | source-map-js: 1.0.2 900 | dev: true 901 | 902 | /shebang-command/2.0.0: 903 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 904 | engines: {node: '>=8'} 905 | dependencies: 906 | shebang-regex: 3.0.0 907 | dev: true 908 | 909 | /shebang-regex/3.0.0: 910 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 911 | engines: {node: '>=8'} 912 | dev: true 913 | 914 | /signal-exit/3.0.6: 915 | resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==} 916 | dev: true 917 | 918 | /sorcery/0.10.0: 919 | resolution: {integrity: sha1-iukK19fLBfxZ8asMY3hF1cFaUrc=} 920 | hasBin: true 921 | dependencies: 922 | buffer-crc32: 0.2.13 923 | minimist: 1.2.5 924 | sander: 0.5.1 925 | sourcemap-codec: 1.4.8 926 | dev: true 927 | 928 | /source-map-js/1.0.2: 929 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 930 | engines: {node: '>=0.10.0'} 931 | dev: true 932 | 933 | /source-map/0.7.3: 934 | resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} 935 | engines: {node: '>= 8'} 936 | dev: true 937 | 938 | /sourcemap-codec/1.4.8: 939 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 940 | dev: true 941 | 942 | /strip-final-newline/2.0.0: 943 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 944 | engines: {node: '>=6'} 945 | dev: true 946 | 947 | /strip-indent/3.0.0: 948 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 949 | engines: {node: '>=8'} 950 | dependencies: 951 | min-indent: 1.0.1 952 | dev: true 953 | 954 | /supports-preserve-symlinks-flag/1.0.0: 955 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 956 | engines: {node: '>= 0.4'} 957 | dev: true 958 | 959 | /svelte-check/2.3.0_77d7750cf002ab9dbc05a2cb89869e71: 960 | resolution: {integrity: sha512-SBKdJyUmxzPmJf/ZPqDSQOoa9JzOcgEpV7u3UaYcgVn7fA0veZ3FA5JgLU8KYtf84Gp6guBVcrC7XKLjJa5SXQ==} 961 | hasBin: true 962 | peerDependencies: 963 | svelte: ^3.24.0 964 | dependencies: 965 | chokidar: 3.5.3 966 | fast-glob: 3.2.11 967 | import-fresh: 3.3.0 968 | minimist: 1.2.5 969 | picocolors: 1.0.0 970 | sade: 1.8.1 971 | source-map: 0.7.3 972 | svelte: 3.46.2 973 | svelte-preprocess: 4.10.2_24f955ca631190a520f39e29c134e7a4 974 | typescript: 4.5.4 975 | transitivePeerDependencies: 976 | - '@babel/core' 977 | - coffeescript 978 | - less 979 | - node-sass 980 | - postcss 981 | - postcss-load-config 982 | - pug 983 | - sass 984 | - stylus 985 | - sugarss 986 | dev: true 987 | 988 | /svelte-drag/2.4.0: 989 | resolution: {integrity: sha512-9WY3L1Y+3sAHufb4e7Ml4zHZWkTXL8DfB3NYovOL1ygImBFuMfHEhoeqo/qpWSU/wjO53nzn+T3nu9lHqATAyg==} 990 | dev: false 991 | 992 | /svelte-hmr/0.14.9_svelte@3.46.2: 993 | resolution: {integrity: sha512-bKE9+4qb4sAnA+TKHiYurUl970rjA0XmlP9TEP7K/ncyWz3m81kA4HOgmlZK/7irGK7gzZlaPDI3cmf8fp/+tg==} 994 | peerDependencies: 995 | svelte: '>=3.19.0' 996 | dependencies: 997 | svelte: 3.46.2 998 | dev: true 999 | 1000 | /svelte-local-storage-store/0.2.6_svelte@3.46.2: 1001 | resolution: {integrity: sha512-7QLCZ4V/0ydvZRyVChNYx7gVkprzrkACD63PpZINy5oFv9nE+5CAP94QN3NBI2awPeDB+cpUzNCB4Q0Yjr9CYQ==} 1002 | engines: {node: '>=0.14'} 1003 | peerDependencies: 1004 | svelte: ^3.44.1 1005 | dependencies: 1006 | svelte: 3.46.2 1007 | dev: false 1008 | 1009 | /svelte-preprocess/4.10.2_24f955ca631190a520f39e29c134e7a4: 1010 | resolution: {integrity: sha512-aPpkCreSo8EL/y8kJSa1trhiX0oyAtTjlNNM7BNjRAsMJ8Yy2LtqHt0zyd4pQPXt+D4PzbO3qTjjio3kwOxDlA==} 1011 | engines: {node: '>= 9.11.2'} 1012 | requiresBuild: true 1013 | peerDependencies: 1014 | '@babel/core': ^7.10.2 1015 | coffeescript: ^2.5.1 1016 | less: ^3.11.3 || ^4.0.0 1017 | node-sass: '*' 1018 | postcss: ^7 || ^8 1019 | postcss-load-config: ^2.1.0 || ^3.0.0 1020 | pug: ^3.0.0 1021 | sass: ^1.26.8 1022 | stylus: ^0.55.0 1023 | sugarss: ^2.0.0 1024 | svelte: ^3.23.0 1025 | typescript: ^4.5.2 1026 | peerDependenciesMeta: 1027 | '@babel/core': 1028 | optional: true 1029 | coffeescript: 1030 | optional: true 1031 | less: 1032 | optional: true 1033 | node-sass: 1034 | optional: true 1035 | postcss: 1036 | optional: true 1037 | postcss-load-config: 1038 | optional: true 1039 | pug: 1040 | optional: true 1041 | sass: 1042 | optional: true 1043 | stylus: 1044 | optional: true 1045 | sugarss: 1046 | optional: true 1047 | typescript: 1048 | optional: true 1049 | dependencies: 1050 | '@types/pug': 2.0.6 1051 | '@types/sass': 1.43.1 1052 | detect-indent: 6.1.0 1053 | magic-string: 0.25.7 1054 | postcss: 8.4.5 1055 | sass: 1.49.0 1056 | sorcery: 0.10.0 1057 | strip-indent: 3.0.0 1058 | svelte: 3.46.2 1059 | typescript: 4.5.4 1060 | dev: true 1061 | 1062 | /svelte/3.46.2: 1063 | resolution: {integrity: sha512-RXSAtYNefe01Sb1lXtZ2I+gzn3t/h/59hoaRNeRrm8IkMIu6BSiAkbpi41xb+C44x54YKnbk9+dtfs3pM4hECA==} 1064 | engines: {node: '>= 8'} 1065 | dev: true 1066 | 1067 | /to-regex-range/5.0.1: 1068 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1069 | engines: {node: '>=8.0'} 1070 | dependencies: 1071 | is-number: 7.0.0 1072 | dev: true 1073 | 1074 | /typescript/4.5.4: 1075 | resolution: {integrity: sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==} 1076 | engines: {node: '>=4.2.0'} 1077 | hasBin: true 1078 | dev: true 1079 | 1080 | /unplugin-icons/0.13.0_vite@2.7.13: 1081 | resolution: {integrity: sha512-CyAl0HV3bZUGT7ut9agpPRhEYXCvufr80Fh72yrkD57BVCTZ7ze10Rt63ZrvPXiJQpd+aI/Bizm2aqOf3WPSfg==} 1082 | peerDependencies: 1083 | '@svgr/core': ^5.5.0 1084 | '@vue/compiler-sfc': ^3.0.2 1085 | vue-template-compiler: ^2.6.12 1086 | vue-template-es2015-compiler: ^1.9.0 1087 | peerDependenciesMeta: 1088 | '@svgr/core': 1089 | optional: true 1090 | '@vue/compiler-sfc': 1091 | optional: true 1092 | vue-template-compiler: 1093 | optional: true 1094 | vue-template-es2015-compiler: 1095 | optional: true 1096 | dependencies: 1097 | '@antfu/install-pkg': 0.1.0 1098 | '@antfu/utils': 0.4.0 1099 | '@iconify/utils': 1.0.21 1100 | debug: 4.3.3 1101 | kolorist: 1.5.1 1102 | local-pkg: 0.4.1 1103 | unplugin: 0.2.21_vite@2.7.13 1104 | transitivePeerDependencies: 1105 | - rollup 1106 | - supports-color 1107 | - vite 1108 | - webpack 1109 | dev: true 1110 | 1111 | /unplugin/0.2.21_vite@2.7.13: 1112 | resolution: {integrity: sha512-IJ15/L5XbhnV7J09Zjk0FT5HEkBjkXucWAXQWRsmEtUxmmxwh23yavrmDbCF6ZPxWiVB28+wnKIHePTRRpQPbQ==} 1113 | peerDependencies: 1114 | rollup: ^2.50.0 1115 | vite: ^2.3.0 1116 | webpack: 4 || 5 1117 | peerDependenciesMeta: 1118 | rollup: 1119 | optional: true 1120 | vite: 1121 | optional: true 1122 | webpack: 1123 | optional: true 1124 | dependencies: 1125 | vite: 2.7.13_sass@1.49.0 1126 | webpack-virtual-modules: 0.4.3 1127 | dev: true 1128 | 1129 | /vite/2.7.13_sass@1.49.0: 1130 | resolution: {integrity: sha512-Mq8et7f3aK0SgSxjDNfOAimZGW9XryfHRa/uV0jseQSilg+KhYDSoNb9h1rknOy6SuMkvNDLKCYAYYUMCE+IgQ==} 1131 | engines: {node: '>=12.2.0'} 1132 | hasBin: true 1133 | peerDependencies: 1134 | less: '*' 1135 | sass: '*' 1136 | stylus: '*' 1137 | peerDependenciesMeta: 1138 | less: 1139 | optional: true 1140 | sass: 1141 | optional: true 1142 | stylus: 1143 | optional: true 1144 | dependencies: 1145 | esbuild: 0.13.15 1146 | postcss: 8.4.5 1147 | resolve: 1.21.0 1148 | rollup: 2.64.0 1149 | sass: 1.49.0 1150 | optionalDependencies: 1151 | fsevents: 2.3.2 1152 | dev: true 1153 | 1154 | /webpack-virtual-modules/0.4.3: 1155 | resolution: {integrity: sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==} 1156 | dev: true 1157 | 1158 | /which/2.0.2: 1159 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1160 | engines: {node: '>= 8'} 1161 | hasBin: true 1162 | dependencies: 1163 | isexe: 2.0.0 1164 | dev: true 1165 | 1166 | /wrappy/1.0.2: 1167 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} 1168 | dev: true 1169 | 1170 | /yocto-queue/0.1.0: 1171 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1172 | engines: {node: '>=10'} 1173 | dev: true 1174 | -------------------------------------------------------------------------------- /postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [require('autoprefixer')], 3 | }; 4 | -------------------------------------------------------------------------------- /public/cursors/normal-select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/ios-web/f86ffded263d20e6e61e2ac2c57dc1ebbfdd5e9d/public/cursors/normal-select.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/ios-web/f86ffded263d20e6e61e2ac2c57dc1ebbfdd5e9d/public/favicon.ico -------------------------------------------------------------------------------- /public/wallpapers/1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/ios-web/f86ffded263d20e6e61e2ac2c57dc1ebbfdd5e9d/public/wallpapers/1-1.png -------------------------------------------------------------------------------- /public/wallpapers/1-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/ios-web/f86ffded263d20e6e61e2ac2c57dc1ebbfdd5e9d/public/wallpapers/1-1.webp -------------------------------------------------------------------------------- /public/wallpapers/1-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/ios-web/f86ffded263d20e6e61e2ac2c57dc1ebbfdd5e9d/public/wallpapers/1-2.png -------------------------------------------------------------------------------- /public/wallpapers/1-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/ios-web/f86ffded263d20e6e61e2ac2c57dc1ebbfdd5e9d/public/wallpapers/1-2.webp -------------------------------------------------------------------------------- /src/components/HomeScreen/HomeIndicator.svelte: -------------------------------------------------------------------------------- 1 |
2 | 3 | 17 | -------------------------------------------------------------------------------- /src/components/HomeScreen/HomeScreen.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/components/HomeScreen/LockScreen.svelte: -------------------------------------------------------------------------------- 1 | 43 | 44 |
55 |
56 | 57 |
58 | 59 |
60 |

61 | {formattedTime} 62 |

63 |

{secondaryTime}

64 |
65 | 66 | 67 | 68 | 69 | 72 | 73 | 76 | 77 |
78 | 79 | 174 | -------------------------------------------------------------------------------- /src/components/HomeScreen/Wallpaper.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |
11 | 12 | 33 | -------------------------------------------------------------------------------- /src/css/global.scss: -------------------------------------------------------------------------------- 1 | @import './reset'; 2 | @import './themes'; 3 | 4 | html, 5 | body { 6 | height: 100%; 7 | } 8 | 9 | body { 10 | display: flex; 11 | align-items: center; 12 | flex-direction: column; 13 | 14 | font-family: var(--system-font-family); 15 | 16 | overflow: hidden; 17 | 18 | background-color: black; 19 | 20 | -webkit-font-smoothing: antialiased; 21 | -moz-osx-font-smoothing: grayscale; 22 | } 23 | 24 | * { 25 | box-sizing: border-box; 26 | 27 | transition: background-color 150ms ease-in, background 150ms ease-in; 28 | 29 | user-select: none; 30 | } 31 | 32 | *:focus { 33 | outline: none; 34 | } 35 | 36 | *:focus-visible { 37 | outline: none; 38 | 39 | box-shadow: var(--system-focus-outline); 40 | } 41 | 42 | #app { 43 | position: relative; 44 | 45 | height: 100%; 46 | aspect-ratio: 220 / 422; 47 | 48 | background-color: white; 49 | 50 | isolation: isolate; 51 | 52 | &, 53 | * { 54 | cursor: var(--system-cursor-default), auto; 55 | } 56 | } 57 | 58 | button { 59 | color: inherit; 60 | text-decoration: none; 61 | vertical-align: middle; 62 | font-family: inherit; 63 | 64 | border: 0; 65 | border-radius: 0; 66 | 67 | outline: 0; 68 | 69 | margin: 0; 70 | padding: 0; 71 | 72 | display: inline-flex; 73 | align-items: center; 74 | justify-content: center; 75 | 76 | position: relative; 77 | 78 | user-select: none; 79 | appearance: none; 80 | cursor: var(--system-cursor-default), auto; 81 | 82 | background-color: transparent; 83 | 84 | -webkit-tap-highlight-color: transparent; 85 | } 86 | -------------------------------------------------------------------------------- /src/css/reset.scss: -------------------------------------------------------------------------------- 1 | /* 2 | 1. Use a more-intuitive box-sizing model. 3 | */ 4 | *, 5 | *::before, 6 | *::after { 7 | box-sizing: border-box; 8 | } 9 | /* 10 | 2. Remove default margin 11 | */ 12 | * { 13 | margin: 0; 14 | } 15 | /* 16 | 3. Allow percentage-based heights in the application 17 | */ 18 | html, 19 | body { 20 | height: 100%; 21 | } 22 | /* 23 | Typographic tweaks! 24 | 4. Add accessible line-height 25 | 5. Improve text rendering 26 | */ 27 | body { 28 | line-height: 1.5; 29 | -webkit-font-smoothing: antialiased; 30 | } 31 | /* 32 | 6. Improve media defaults 33 | */ 34 | img, 35 | picture, 36 | video, 37 | canvas, 38 | svg { 39 | display: block; 40 | max-width: 100%; 41 | } 42 | /* 43 | 7. Remove built-in form typography styles 44 | */ 45 | input, 46 | button, 47 | textarea, 48 | select { 49 | font: inherit; 50 | } 51 | /* 52 | 8. Avoid text overflows 53 | */ 54 | p, 55 | h1, 56 | h2, 57 | h3, 58 | h4, 59 | h5, 60 | h6 { 61 | overflow-wrap: break-word; 62 | } 63 | /* 64 | 9. Create a root stacking context 65 | */ 66 | #root, 67 | #__next { 68 | isolation: isolate; 69 | } 70 | -------------------------------------------------------------------------------- /src/css/themes.scss: -------------------------------------------------------------------------------- 1 | body, 2 | body[data-theme='light'] { 3 | --system-color-primary: hsl(211, 100%, 50%); 4 | --system-color-primary-hsl: 211, 100%, 50%; 5 | --system-color-primary-contrast: hsl(240, 24%, 100%); 6 | --system-color-primary-contrast-hsl: 240, 24%, 100%; 7 | 8 | --system-color-dark: hsl(240, 3%, 11%); 9 | --system-color-dark-hsl: 240, 3%, 11%; 10 | --system-color-dark-contrast: hsl(240, 24%, 100%); 11 | --system-color-dark-contrast-hsl: 240, 24%, 100%; 12 | 13 | --system-color-light: hsl(240, 24%, 100%); 14 | --system-color-light-hsl: 240, 24%, 100%; 15 | --system-color-light-contrast: hsl(0, 0%, 11%); 16 | --system-color-light-contrast-hsl: 0, 0%, 11%; 17 | 18 | --system-font-family: -apple-system, BlinkMacSystemFont, 'Inter', 'Helvetica Neue', 'Helvetica', 19 | 'Arial', sans-serif; 20 | 21 | --system-focus-outline: 0 0 0 3px hsla(var(--system-color-primary-hsl), 0.5); 22 | 23 | --system-color-grey-50: #fafafa; 24 | --system-color-grey-50-hsl: 0, 0%, 98%; 25 | 26 | --system-color-grey-100: #f5f5f5; 27 | --system-color-grey-100-hsl: 0, 0%, 96%; 28 | 29 | --system-color-grey-200: #eeeeee; 30 | --system-color-grey-200-hsl: 0, 0%, 93%; 31 | 32 | --system-color-grey-300: #e0e0e0; 33 | --system-color-grey-300-hsl: 0, 0%, 88%; 34 | 35 | --system-color-grey-400: #bdbdbd; 36 | --system-color-grey-400-hsl: 0, 0%, 74%; 37 | 38 | --system-color-grey-500: #9e9e9e; 39 | --system-color-grey-500-hsl: 0, 0%, 62%; 40 | 41 | --system-color-grey-600: #757575; 42 | --system-color-grey-600-hsl: 0, 0%, 46%; 43 | 44 | --system-color-grey-700: #616161; 45 | --system-color-grey-700-hsl: 0, 0%, 38%; 46 | 47 | --system-color-grey-800: #424242; 48 | --system-color-grey-800-hsl: 0, 0%, 26%; 49 | 50 | --system-color-grey-900: #212121; 51 | --system-color-grey-900-hsl: 0, 0%, 13%; 52 | 53 | --system-color-grey-A100: #d5d5d5; 54 | --system-color-grey-A100-hsl: 0, 0%, 84%; 55 | 56 | --system-color-grey-A200: #aaa; 57 | --system-color-grey-A200-hsl: 0, 0%, 67%; 58 | 59 | --system-color-grey-A400: #303030; 60 | --system-color-grey-A400-hsl: 0, 0%, 19%; 61 | 62 | --system-color-grey-A700: #616161; 63 | --system-color-grey-A700-hsl: 0, 0%, 38%; 64 | 65 | // Cursors 66 | --system-cursor-default: url('/cursors/normal-select.png'); 67 | --system-cursor-pointer: url('/assets/cursors/link-select.svg'); 68 | --system-cursor-text-select: url('/assets/cursors/text-select.svg'); 69 | --system-cursor-help-select: url('/assets/cursors/help-select.svg'); 70 | 71 | // the following two cursors are animated, but will be rendered as a static 72 | // image by the browser 73 | --system-cursor-busy: url('/assets/cursors/busy.webp'); 74 | --system-cursor-working-in-bg: url('/assets/cursors/working-in-background.webp'); 75 | } 76 | 77 | body.dark { 78 | /* // Primary */ 79 | --system-color-primary: #0a85ff; 80 | --system-color-primary-hsl: 210, 100%, 52%; 81 | --system-color-primary-contrast: hsl(210, 92%, 5%); 82 | --system-color-primary-contrast-hsl: 210, 92%, 5%; 83 | 84 | /* // Dark */ 85 | --system-color-dark: hsl(240, 24%, 100%); 86 | --system-color-dark-hsl: 240, 24%, 100%; 87 | --system-color-dark-contrast: hsl(0, 0%, 11%); 88 | --system-color-dark-contrast-hsl: 0, 0%, 11%; 89 | 90 | /* // Light */ 91 | --system-color-light: hsl(240, 3%, 11%); 92 | --system-color-light-hsl: 240, 3%, 11%; 93 | --system-color-light-contrast: hsl(240, 24%, 100%); 94 | --system-color-light-contrast-hsl: 240, 24%, 100%; 95 | } 96 | -------------------------------------------------------------------------------- /src/global.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import HomeScreen from './components/HomeScreen/HomeScreen.svelte'; 2 | 3 | const app = new HomeScreen({ 4 | target: document.getElementById('app'), 5 | }); 6 | 7 | export default app; 8 | -------------------------------------------------------------------------------- /src/stores/theme.store.ts: -------------------------------------------------------------------------------- 1 | import { writable } from 'svelte-local-storage-store'; 2 | 3 | export type Theme = { 4 | scheme: 'light' | 'dark'; 5 | }; 6 | 7 | export const theme = writable('ios:theme-settings', { 8 | scheme: matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light', 9 | }); 10 | 11 | theme.subscribe(({ scheme }) => { 12 | // Color scheme 13 | const { classList } = document.body; 14 | classList.remove('light', 'dark'); 15 | classList.add(scheme); 16 | }); 17 | -------------------------------------------------------------------------------- /src/stores/time.store.ts: -------------------------------------------------------------------------------- 1 | import { readable } from 'svelte/store'; 2 | 3 | export const createTimerStore = (duration: number) => 4 | readable(new Date(), (set) => { 5 | const timer = setInterval(() => set(new Date()), duration); 6 | 7 | return () => clearInterval(timer); 8 | }); 9 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | export const enum UIElevation { 2 | WALLPAPER = '-1', 3 | } 4 | -------------------------------------------------------------------------------- /src/utils/throttle.ts: -------------------------------------------------------------------------------- 1 | type ThrottledFunction any> = (...args: Parameters) => ReturnType; 2 | 3 | export function throttle any>( 4 | func: T, 5 | limit: number 6 | ): ThrottledFunction { 7 | let inThrottle: boolean; 8 | let lastResult: ReturnType; 9 | 10 | return function (this: any): ReturnType { 11 | const args = arguments; 12 | const context = this; 13 | 14 | if (!inThrottle) { 15 | inThrottle = true; 16 | 17 | setTimeout(() => (inThrottle = false), limit); 18 | 19 | lastResult = func.apply(context, args); 20 | } 21 | 22 | return lastResult; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import sveltePreprocess from 'svelte-preprocess' 2 | 3 | export default { 4 | // Consult https://github.com/sveltejs/svelte-preprocess 5 | // for more information about preprocessors 6 | preprocess: sveltePreprocess() 7 | } 8 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "moduleResolution": "node", 4 | 5 | /** 6 | To have warnings/errors of the Svelte compiler at the correct position, 7 | enable source maps by default. 8 | */ 9 | "sourceMap": true, 10 | "lib": ["ESNext", "DOM"], 11 | "strict": false, 12 | "esModuleInterop": true, 13 | "noEmit": true, 14 | "skipLibCheck": true, 15 | "forceConsistentCasingInFileNames": true, 16 | "target": "esnext", 17 | "module": "esnext", 18 | "resolveJsonModule": true, 19 | // "baseUrl": "./src", 20 | "paths": { 21 | "🪆/*": ["./src/*"] 22 | }, 23 | /** 24 | * Typecheck JS in `.svelte` and `.js` files by default. 25 | * Disable checkJs if you'd like to use dynamic types in JS. 26 | * Note that setting allowJs false does not prevent the use 27 | * of JS in `.svelte` files. 28 | */ 29 | "allowJs": true, 30 | "checkJs": true 31 | }, 32 | "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.js", "src/**/*.svelte", "./*.ts"], 33 | "exclude": ["node_modules/**/*"] 34 | } 35 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { svelte } from '@sveltejs/vite-plugin-svelte'; 2 | import unpluginIcons from 'unplugin-icons/vite'; 3 | import { defineConfig } from 'vite'; 4 | import { prefetch } from './plugins/prefetch'; 5 | 6 | export default defineConfig({ 7 | plugins: [svelte(), prefetch(), unpluginIcons({ autoInstall: true, compiler: 'svelte' })], 8 | resolve: { 9 | alias: { 10 | '🪆': new URL('./src/', import.meta.url).pathname, 11 | }, 12 | }, 13 | build: { 14 | minify: 'terser', 15 | }, 16 | }); 17 | --------------------------------------------------------------------------------