From 936f82b5be042f9cb02464eb3652a888abe214a8 Mon Sep 17 00:00:00 2001 From: HerozDotExe Date: Fri, 15 Aug 2025 23:45:42 +0200 Subject: [PATCH] feat: add search and play from myinstants --- .vscode/settings.json | 2 +- package.json | 4 +- pnpm-lock.yaml | 113 ++++++++++- src/main/crawler.js | 29 +++ src/main/index.ts | 47 +++++ src/main/types.ts | 4 + src/preload/index.ts | 10 +- src/renderer/index.html | 2 +- src/renderer/src/App.svelte | 187 +++++++++++++++++- src/renderer/src/lib/audio.ts | 21 ++ .../components/ui/dialog/dialog-close.svelte | 7 + .../ui/dialog/dialog-content.svelte | 43 ++++ .../ui/dialog/dialog-description.svelte | 17 ++ .../components/ui/dialog/dialog-footer.svelte | 20 ++ .../components/ui/dialog/dialog-header.svelte | 20 ++ .../ui/dialog/dialog-overlay.svelte | 20 ++ .../components/ui/dialog/dialog-title.svelte | 17 ++ .../ui/dialog/dialog-trigger.svelte | 7 + .../src/lib/components/ui/dialog/index.ts | 37 ++++ .../src/lib/components/ui/input/index.ts | 7 + .../src/lib/components/ui/input/input.svelte | 51 +++++ .../src/lib/components/ui/label/index.ts | 7 + .../src/lib/components/ui/label/label.svelte | 20 ++ .../lib/components/ui/radio-group/index.ts | 10 + .../ui/radio-group/radio-group-item.svelte | 31 +++ .../ui/radio-group/radio-group.svelte | 19 ++ .../src/lib/components/ui/select/index.ts | 37 ++++ .../ui/select/select-content.svelte | 40 ++++ .../ui/select/select-group-heading.svelte | 21 ++ .../components/ui/select/select-group.svelte | 7 + .../components/ui/select/select-item.svelte | 38 ++++ .../components/ui/select/select-label.svelte | 20 ++ .../select/select-scroll-down-button.svelte | 20 ++ .../ui/select/select-scroll-up-button.svelte | 20 ++ .../ui/select/select-separator.svelte | 18 ++ .../ui/select/select-trigger.svelte | 29 +++ .../src/lib/components/ui/separator/index.ts | 7 + .../components/ui/separator/separator.svelte | 20 ++ .../src/lib/components/ui/table/index.ts | 28 +++ .../lib/components/ui/table/table-body.svelte | 20 ++ .../components/ui/table/table-caption.svelte | 20 ++ .../lib/components/ui/table/table-cell.svelte | 23 +++ .../components/ui/table/table-footer.svelte | 20 ++ .../lib/components/ui/table/table-head.svelte | 23 +++ .../components/ui/table/table-header.svelte | 20 ++ .../lib/components/ui/table/table-row.svelte | 23 +++ .../src/lib/components/ui/table/table.svelte | 22 +++ 47 files changed, 1217 insertions(+), 11 deletions(-) create mode 100644 src/main/crawler.js create mode 100644 src/main/types.ts create mode 100644 src/renderer/src/lib/audio.ts create mode 100644 src/renderer/src/lib/components/ui/dialog/dialog-close.svelte create mode 100644 src/renderer/src/lib/components/ui/dialog/dialog-content.svelte create mode 100644 src/renderer/src/lib/components/ui/dialog/dialog-description.svelte create mode 100644 src/renderer/src/lib/components/ui/dialog/dialog-footer.svelte create mode 100644 src/renderer/src/lib/components/ui/dialog/dialog-header.svelte create mode 100644 src/renderer/src/lib/components/ui/dialog/dialog-overlay.svelte create mode 100644 src/renderer/src/lib/components/ui/dialog/dialog-title.svelte create mode 100644 src/renderer/src/lib/components/ui/dialog/dialog-trigger.svelte create mode 100644 src/renderer/src/lib/components/ui/dialog/index.ts create mode 100644 src/renderer/src/lib/components/ui/input/index.ts create mode 100644 src/renderer/src/lib/components/ui/input/input.svelte create mode 100644 src/renderer/src/lib/components/ui/label/index.ts create mode 100644 src/renderer/src/lib/components/ui/label/label.svelte create mode 100644 src/renderer/src/lib/components/ui/radio-group/index.ts create mode 100644 src/renderer/src/lib/components/ui/radio-group/radio-group-item.svelte create mode 100644 src/renderer/src/lib/components/ui/radio-group/radio-group.svelte create mode 100644 src/renderer/src/lib/components/ui/select/index.ts create mode 100644 src/renderer/src/lib/components/ui/select/select-content.svelte create mode 100644 src/renderer/src/lib/components/ui/select/select-group-heading.svelte create mode 100644 src/renderer/src/lib/components/ui/select/select-group.svelte create mode 100644 src/renderer/src/lib/components/ui/select/select-item.svelte create mode 100644 src/renderer/src/lib/components/ui/select/select-label.svelte create mode 100644 src/renderer/src/lib/components/ui/select/select-scroll-down-button.svelte create mode 100644 src/renderer/src/lib/components/ui/select/select-scroll-up-button.svelte create mode 100644 src/renderer/src/lib/components/ui/select/select-separator.svelte create mode 100644 src/renderer/src/lib/components/ui/select/select-trigger.svelte create mode 100644 src/renderer/src/lib/components/ui/separator/index.ts create mode 100644 src/renderer/src/lib/components/ui/separator/separator.svelte create mode 100644 src/renderer/src/lib/components/ui/table/index.ts create mode 100644 src/renderer/src/lib/components/ui/table/table-body.svelte create mode 100644 src/renderer/src/lib/components/ui/table/table-caption.svelte create mode 100644 src/renderer/src/lib/components/ui/table/table-cell.svelte create mode 100644 src/renderer/src/lib/components/ui/table/table-footer.svelte create mode 100644 src/renderer/src/lib/components/ui/table/table-head.svelte create mode 100644 src/renderer/src/lib/components/ui/table/table-header.svelte create mode 100644 src/renderer/src/lib/components/ui/table/table-row.svelte create mode 100644 src/renderer/src/lib/components/ui/table/table.svelte diff --git a/.vscode/settings.json b/.vscode/settings.json index b72f123..e603f77 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,7 @@ "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[javascript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "vscode.typescript-language-features" }, "[json]": { "editor.defaultFormatter": "esbenp.prettier-vscode" diff --git a/package.json b/package.json index 775ce7d..b889ee2 100644 --- a/package.json +++ b/package.json @@ -29,10 +29,12 @@ "@electron-toolkit/eslint-config-prettier": "^3.0.0", "@electron-toolkit/eslint-config-ts": "^3.0.0", "@electron-toolkit/tsconfig": "^1.0.1", - "@lucide/svelte": "^0.539.0", + "@internationalized/date": "^3.8.2", + "@lucide/svelte": "^0.515.0", "@sveltejs/vite-plugin-svelte": "^6.1.0", "@tailwindcss/vite": "^4.0.0", "@types/node": "^22.16.5", + "bits-ui": "^2.9.3", "clsx": "^2.1.1", "electron": "^37.2.3", "electron-builder": "^25.1.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2c5ee4a..ac80b68 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,9 +27,12 @@ importers: '@electron-toolkit/tsconfig': specifier: ^1.0.1 version: 1.0.1(@types/node@22.17.1) + '@internationalized/date': + specifier: ^3.8.2 + version: 3.8.2 '@lucide/svelte': - specifier: ^0.539.0 - version: 0.539.0(svelte@5.38.1) + specifier: ^0.515.0 + version: 0.515.0(svelte@5.38.1) '@sveltejs/vite-plugin-svelte': specifier: ^6.1.0 version: 6.1.2(svelte@5.38.1)(vite@7.1.2(@types/node@22.17.1)(jiti@2.5.1)(lightningcss@1.30.1)) @@ -39,6 +42,9 @@ importers: '@types/node': specifier: ^22.16.5 version: 22.17.1 + bits-ui: + specifier: ^2.9.3 + version: 2.9.3(@internationalized/date@3.8.2)(svelte@5.38.1) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -432,6 +438,15 @@ packages: resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/dom@1.7.3': + resolution: {integrity: sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==} + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} @@ -455,6 +470,9 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@internationalized/date@3.8.2': + resolution: {integrity: sha512-/wENk7CbvLbkUvX1tu0mwq49CVkkWpkXubGel6birjRPyo6uQ4nQpnq5xZu823zRCwwn82zgHrvgF1vZyvmVgA==} + '@isaacs/balanced-match@4.0.1': resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} engines: {node: 20 || >=22} @@ -487,8 +505,8 @@ packages: '@jridgewell/trace-mapping@0.3.30': resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} - '@lucide/svelte@0.539.0': - resolution: {integrity: sha512-OWhw4BhHO+owmOE/ijSNLnw/flbW2/DsLzMHAeM8oEjLsO0xE6glX0ADCDwxKItTs5ZJYssfyGNXxMXrea173w==} + '@lucide/svelte@0.515.0': + resolution: {integrity: sha512-CEAyqcZmNBfYzVgaRmK2RFJP5tnbXxekRyDk0XX/eZQRfsJmkDvmQwXNX8C869BgNeryzmrRyjHhUL6g9ZOHNA==} peerDependencies: svelte: ^5 @@ -653,6 +671,9 @@ packages: svelte: ^5.0.0 vite: ^6.3.0 || ^7.0.0 + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@szmarczak/http-timer@4.0.6': resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} @@ -975,6 +996,13 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + bits-ui@2.9.3: + resolution: {integrity: sha512-jSoi3U1pfhLQVKZ3j+1GbeuvT1w6cMbnrVWhObVE+DRuV+zcpKeUnd6zpz7NYF47HsSXVNjI1rJdZH+A5sNsOQ==} + engines: {node: '>=20'} + peerDependencies: + '@internationalized/date': ^3.8.1 + svelte: ^5.33.0 + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -1693,6 +1721,9 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + ip-address@10.0.1: resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} engines: {node: '>= 12'} @@ -2399,6 +2430,11 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + runed@0.29.2: + resolution: {integrity: sha512-0cq6cA6sYGZwl/FvVqjx9YN+1xEBu9sDDyuWdDW1yWX7JF2wmvmVKfH+hVCZs+csW+P3ARH92MjI3H9QTagOQA==} + peerDependencies: + svelte: ^5.7.0 + sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -2520,6 +2556,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + style-to-object@1.0.9: + resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} + sumchecker@3.0.1: resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} engines: {node: '>= 8.0'} @@ -2545,6 +2584,12 @@ packages: svelte: optional: true + svelte-toolbelt@0.9.3: + resolution: {integrity: sha512-HCSWxCtVmv+c6g1ACb8LTwHVbDqLKJvHpo6J8TaqwUme2hj9ATJCpjCPNISR1OCq2Q4U1KT41if9ON0isINQZw==} + engines: {node: '>=18', pnpm: '>=8.7.0'} + peerDependencies: + svelte: ^5.30.2 + svelte@5.38.1: resolution: {integrity: sha512-fO6CLDfJYWHgfo6lQwkQU2vhCiHc2MBl6s3vEhK+sSZru17YL4R5s1v14ndRpqKAIkq8nCz6MTk1yZbESZWeyQ==} engines: {node: '>=18'} @@ -2553,6 +2598,9 @@ packages: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tailwind-merge@3.0.2: resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==} @@ -2614,6 +2662,9 @@ packages: peerDependencies: typescript: '>=4.8.4' + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tw-animate-css@1.3.6: resolution: {integrity: sha512-9dy0R9UsYEGmgf26L8UcHiLmSFTHa9+D7+dAt/G/sF5dCnPePZbfgDYinc7/UzAM7g/baVrmS6m9yEpU46d+LA==} @@ -3139,6 +3190,17 @@ snapshots: '@eslint/core': 0.15.2 levn: 0.4.1 + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.3': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/utils@0.2.10': {} + '@gar/promisify@1.1.3': {} '@humanfs/core@0.19.1': {} @@ -3154,6 +3216,10 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@internationalized/date@3.8.2': + dependencies: + '@swc/helpers': 0.5.17 + '@isaacs/balanced-match@4.0.1': {} '@isaacs/brace-expansion@5.0.0': @@ -3192,7 +3258,7 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@lucide/svelte@0.539.0(svelte@5.38.1)': + '@lucide/svelte@0.515.0(svelte@5.38.1)': dependencies: svelte: 5.38.1 @@ -3324,6 +3390,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + '@szmarczak/http-timer@4.0.6': dependencies: defer-to-connect: 2.0.1 @@ -3700,6 +3770,17 @@ snapshots: base64-js@1.5.1: {} + bits-ui@2.9.3(@internationalized/date@3.8.2)(svelte@5.38.1): + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/dom': 1.7.3 + '@internationalized/date': 3.8.2 + esm-env: 1.2.2 + runed: 0.29.2(svelte@5.38.1) + svelte: 5.38.1 + svelte-toolbelt: 0.9.3(svelte@5.38.1) + tabbable: 6.2.0 + bl@4.1.0: dependencies: buffer: 5.7.1 @@ -4600,6 +4681,8 @@ snapshots: inherits@2.0.4: {} + inline-style-parser@0.2.4: {} + ip-address@10.0.1: {} is-ci@3.0.1: @@ -5199,6 +5282,11 @@ snapshots: dependencies: queue-microtask: 1.2.3 + runed@0.29.2(svelte@5.38.1): + dependencies: + esm-env: 1.2.2 + svelte: 5.38.1 + sade@1.8.1: dependencies: mri: 1.2.0 @@ -5313,6 +5401,10 @@ snapshots: strip-json-comments@3.1.1: {} + style-to-object@1.0.9: + dependencies: + inline-style-parser: 0.2.4 + sumchecker@3.0.1: dependencies: debug: 4.4.1 @@ -5346,6 +5438,13 @@ snapshots: optionalDependencies: svelte: 5.38.1 + svelte-toolbelt@0.9.3(svelte@5.38.1): + dependencies: + clsx: 2.1.1 + runed: 0.29.2(svelte@5.38.1) + style-to-object: 1.0.9 + svelte: 5.38.1 + svelte@5.38.1: dependencies: '@jridgewell/remapping': 2.3.5 @@ -5367,6 +5466,8 @@ snapshots: dependencies: '@pkgr/core': 0.2.9 + tabbable@6.2.0: {} + tailwind-merge@3.0.2: {} tailwind-merge@3.3.1: {} @@ -5436,6 +5537,8 @@ snapshots: dependencies: typescript: 5.9.2 + tslib@2.8.1: {} + tw-animate-css@1.3.6: {} type-check@0.4.0: diff --git a/src/main/crawler.js b/src/main/crawler.js new file mode 100644 index 0000000..030dc4b --- /dev/null +++ b/src/main/crawler.js @@ -0,0 +1,29 @@ +// this file has to be copied into main.ts executejs for search every time it is changed + +document.body.style = '' // enable scroll even with consent popup + +// using var to rpevent redeclaration errors +var soundsEl = document.getElementsByClassName('instant') + +var sounds = [] + +Array.from(soundsEl).forEach((e) => { + const childrens = Array.from(e.children) + + let nameEl = childrens.find((e) => { + return e.classList.contains('instant-link') + }) + let name = nameEl?.textContent + let link = nameEl?.href + + let buttonEl = childrens.find((e) => { + return e.classList.contains('small-button') + }) + let src = window.location.origin + buttonEl?.getAttribute('onclick')?.split("'")[1] + + sounds.push({ name, link, src }) +}) + +sounds // executeJavascript returns the last expression + +// window.scrollBy(0, 500) diff --git a/src/main/index.ts b/src/main/index.ts index 06e06b4..68a0de2 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -2,6 +2,9 @@ import { app, shell, BrowserWindow, ipcMain } from 'electron' import { join } from 'path' import { electronApp, optimizer, is } from '@electron-toolkit/utils' import icon from '../../resources/icon.png?asset' +import { Sound } from './types' + +let crawlerWindow: BrowserWindow function createWindow(): void { // Create the browser window. @@ -17,6 +20,16 @@ function createWindow(): void { } }) + crawlerWindow = new BrowserWindow({ + width: 900, + height: 670, + show: true, + webPreferences: { + sandbox: false, + contextIsolation: false + } + }) + mainWindow.on('ready-to-show', () => { mainWindow.show() }) @@ -59,6 +72,8 @@ app.whenReady().then(() => { // dock icon is clicked and there are no other windows open. if (BrowserWindow.getAllWindows().length === 0) createWindow() }) + + crawlerWindow.loadURL('https://www.myinstants.com') }) // Quit when all windows are closed, except on macOS. There, it's common @@ -72,3 +87,35 @@ app.on('window-all-closed', () => { // In this file you can include the rest of your app's specific main process // code. You can also put them in separate files and require them here. +ipcMain.handle('search', async (_, searchValue) => { + if (searchValue) { + await crawlerWindow.loadURL(`https://www.myinstants.com/en/search/?name=${searchValue}`) + } + + return await crawlerWindow.webContents + .executeJavaScript(`document.body.style = '' // enable scroll even with consent popup + +// using var to rpevent redeclaration errors +var soundsEl = document.getElementsByClassName('instant') + +var sounds = [] + +Array.from(soundsEl).forEach((e) => { + const childrens = Array.from(e.children) + + let nameEl = childrens.find((e) => { + return e.classList.contains('instant-link') + }) + let name = nameEl?.textContent + let link = nameEl?.href + + let buttonEl = childrens.find((e) => { + return e.classList.contains('small-button') + }) + let src = window.location.origin + buttonEl?.getAttribute('onclick')?.split("'")[1] + + sounds.push({ name, link, src }) +}) + +sounds`) +}) diff --git a/src/main/types.ts b/src/main/types.ts new file mode 100644 index 0000000..c0ae55c --- /dev/null +++ b/src/main/types.ts @@ -0,0 +1,4 @@ +export type Sound = { + name: string, + src: string +} \ No newline at end of file diff --git a/src/preload/index.ts b/src/preload/index.ts index 2d18524..d13dcf8 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -1,8 +1,14 @@ -import { contextBridge } from 'electron' +import { contextBridge, ipcRenderer } from 'electron' import { electronAPI } from '@electron-toolkit/preload' // Custom APIs for renderer -const api = {} +const api = { + search: async (searchValue: string) => { + let a= await ipcRenderer.invoke("search", searchValue) + console.log(a) + return a + } +} // Use `contextBridge` APIs to expose Electron APIs to // renderer only if context isolation is enabled, otherwise diff --git a/src/renderer/index.html b/src/renderer/index.html index 5f7ab59..fa1ad4f 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -6,7 +6,7 @@ Electron + content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; media-src https://www.myinstants.com; img-src 'self' data:" /> diff --git a/src/renderer/src/App.svelte b/src/renderer/src/App.svelte index 5bf03f4..422691b 100644 --- a/src/renderer/src/App.svelte +++ b/src/renderer/src/App.svelte @@ -1 +1,186 @@ - + + +
+ +
+ +
+ + + + {#each sounds as sound (sound)} + + + + + + + + + + {/each} + + +
+ + diff --git a/src/renderer/src/lib/audio.ts b/src/renderer/src/lib/audio.ts new file mode 100644 index 0000000..da82302 --- /dev/null +++ b/src/renderer/src/lib/audio.ts @@ -0,0 +1,21 @@ +export class _Audio { + src: string + audio: HTMLAudioElement + constructor(src: string) { + this.src = src + this.audio = new Audio(src) + } + + play() { + this.audio.play() + } + + stop() { + this.audio.pause() + this.audio.remove() + } + + setOuputDevice(id: string) { + this.audio.setSinkId(id) + } +} diff --git a/src/renderer/src/lib/components/ui/dialog/dialog-close.svelte b/src/renderer/src/lib/components/ui/dialog/dialog-close.svelte new file mode 100644 index 0000000..840b2f6 --- /dev/null +++ b/src/renderer/src/lib/components/ui/dialog/dialog-close.svelte @@ -0,0 +1,7 @@ + + + diff --git a/src/renderer/src/lib/components/ui/dialog/dialog-content.svelte b/src/renderer/src/lib/components/ui/dialog/dialog-content.svelte new file mode 100644 index 0000000..a647d56 --- /dev/null +++ b/src/renderer/src/lib/components/ui/dialog/dialog-content.svelte @@ -0,0 +1,43 @@ + + + + + + {@render children?.()} + {#if showCloseButton} + + + Close + + {/if} + + diff --git a/src/renderer/src/lib/components/ui/dialog/dialog-description.svelte b/src/renderer/src/lib/components/ui/dialog/dialog-description.svelte new file mode 100644 index 0000000..3845023 --- /dev/null +++ b/src/renderer/src/lib/components/ui/dialog/dialog-description.svelte @@ -0,0 +1,17 @@ + + + diff --git a/src/renderer/src/lib/components/ui/dialog/dialog-footer.svelte b/src/renderer/src/lib/components/ui/dialog/dialog-footer.svelte new file mode 100644 index 0000000..e7ff446 --- /dev/null +++ b/src/renderer/src/lib/components/ui/dialog/dialog-footer.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/src/renderer/src/lib/components/ui/dialog/dialog-header.svelte b/src/renderer/src/lib/components/ui/dialog/dialog-header.svelte new file mode 100644 index 0000000..fc90cd9 --- /dev/null +++ b/src/renderer/src/lib/components/ui/dialog/dialog-header.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/src/renderer/src/lib/components/ui/dialog/dialog-overlay.svelte b/src/renderer/src/lib/components/ui/dialog/dialog-overlay.svelte new file mode 100644 index 0000000..f81ad83 --- /dev/null +++ b/src/renderer/src/lib/components/ui/dialog/dialog-overlay.svelte @@ -0,0 +1,20 @@ + + + diff --git a/src/renderer/src/lib/components/ui/dialog/dialog-title.svelte b/src/renderer/src/lib/components/ui/dialog/dialog-title.svelte new file mode 100644 index 0000000..067e55e --- /dev/null +++ b/src/renderer/src/lib/components/ui/dialog/dialog-title.svelte @@ -0,0 +1,17 @@ + + + diff --git a/src/renderer/src/lib/components/ui/dialog/dialog-trigger.svelte b/src/renderer/src/lib/components/ui/dialog/dialog-trigger.svelte new file mode 100644 index 0000000..9d1e801 --- /dev/null +++ b/src/renderer/src/lib/components/ui/dialog/dialog-trigger.svelte @@ -0,0 +1,7 @@ + + + diff --git a/src/renderer/src/lib/components/ui/dialog/index.ts b/src/renderer/src/lib/components/ui/dialog/index.ts new file mode 100644 index 0000000..dce1d9d --- /dev/null +++ b/src/renderer/src/lib/components/ui/dialog/index.ts @@ -0,0 +1,37 @@ +import { Dialog as DialogPrimitive } from "bits-ui"; + +import Title from "./dialog-title.svelte"; +import Footer from "./dialog-footer.svelte"; +import Header from "./dialog-header.svelte"; +import Overlay from "./dialog-overlay.svelte"; +import Content from "./dialog-content.svelte"; +import Description from "./dialog-description.svelte"; +import Trigger from "./dialog-trigger.svelte"; +import Close from "./dialog-close.svelte"; + +const Root = DialogPrimitive.Root; +const Portal = DialogPrimitive.Portal; + +export { + Root, + Title, + Portal, + Footer, + Header, + Trigger, + Overlay, + Content, + Description, + Close, + // + Root as Dialog, + Title as DialogTitle, + Portal as DialogPortal, + Footer as DialogFooter, + Header as DialogHeader, + Trigger as DialogTrigger, + Overlay as DialogOverlay, + Content as DialogContent, + Description as DialogDescription, + Close as DialogClose, +}; diff --git a/src/renderer/src/lib/components/ui/input/index.ts b/src/renderer/src/lib/components/ui/input/index.ts new file mode 100644 index 0000000..f47b6d3 --- /dev/null +++ b/src/renderer/src/lib/components/ui/input/index.ts @@ -0,0 +1,7 @@ +import Root from "./input.svelte"; + +export { + Root, + // + Root as Input, +}; diff --git a/src/renderer/src/lib/components/ui/input/input.svelte b/src/renderer/src/lib/components/ui/input/input.svelte new file mode 100644 index 0000000..19c6dae --- /dev/null +++ b/src/renderer/src/lib/components/ui/input/input.svelte @@ -0,0 +1,51 @@ + + +{#if type === "file"} + +{:else} + +{/if} diff --git a/src/renderer/src/lib/components/ui/label/index.ts b/src/renderer/src/lib/components/ui/label/index.ts new file mode 100644 index 0000000..8bfca0b --- /dev/null +++ b/src/renderer/src/lib/components/ui/label/index.ts @@ -0,0 +1,7 @@ +import Root from "./label.svelte"; + +export { + Root, + // + Root as Label, +}; diff --git a/src/renderer/src/lib/components/ui/label/label.svelte b/src/renderer/src/lib/components/ui/label/label.svelte new file mode 100644 index 0000000..d0afda3 --- /dev/null +++ b/src/renderer/src/lib/components/ui/label/label.svelte @@ -0,0 +1,20 @@ + + + diff --git a/src/renderer/src/lib/components/ui/radio-group/index.ts b/src/renderer/src/lib/components/ui/radio-group/index.ts new file mode 100644 index 0000000..90b33fe --- /dev/null +++ b/src/renderer/src/lib/components/ui/radio-group/index.ts @@ -0,0 +1,10 @@ +import Root from "./radio-group.svelte"; +import Item from "./radio-group-item.svelte"; + +export { + Root, + Item, + // + Root as RadioGroup, + Item as RadioGroupItem, +}; diff --git a/src/renderer/src/lib/components/ui/radio-group/radio-group-item.svelte b/src/renderer/src/lib/components/ui/radio-group/radio-group-item.svelte new file mode 100644 index 0000000..2cb0710 --- /dev/null +++ b/src/renderer/src/lib/components/ui/radio-group/radio-group-item.svelte @@ -0,0 +1,31 @@ + + + + {#snippet children({ checked })} +
+ {#if checked} + + {/if} +
+ {/snippet} +
diff --git a/src/renderer/src/lib/components/ui/radio-group/radio-group.svelte b/src/renderer/src/lib/components/ui/radio-group/radio-group.svelte new file mode 100644 index 0000000..da2912b --- /dev/null +++ b/src/renderer/src/lib/components/ui/radio-group/radio-group.svelte @@ -0,0 +1,19 @@ + + + diff --git a/src/renderer/src/lib/components/ui/select/index.ts b/src/renderer/src/lib/components/ui/select/index.ts new file mode 100644 index 0000000..9e8d3e9 --- /dev/null +++ b/src/renderer/src/lib/components/ui/select/index.ts @@ -0,0 +1,37 @@ +import { Select as SelectPrimitive } from "bits-ui"; + +import Group from "./select-group.svelte"; +import Label from "./select-label.svelte"; +import Item from "./select-item.svelte"; +import Content from "./select-content.svelte"; +import Trigger from "./select-trigger.svelte"; +import Separator from "./select-separator.svelte"; +import ScrollDownButton from "./select-scroll-down-button.svelte"; +import ScrollUpButton from "./select-scroll-up-button.svelte"; +import GroupHeading from "./select-group-heading.svelte"; + +const Root = SelectPrimitive.Root; + +export { + Root, + Group, + Label, + Item, + Content, + Trigger, + Separator, + ScrollDownButton, + ScrollUpButton, + GroupHeading, + // + Root as Select, + Group as SelectGroup, + Label as SelectLabel, + Item as SelectItem, + Content as SelectContent, + Trigger as SelectTrigger, + Separator as SelectSeparator, + ScrollDownButton as SelectScrollDownButton, + ScrollUpButton as SelectScrollUpButton, + GroupHeading as SelectGroupHeading, +}; diff --git a/src/renderer/src/lib/components/ui/select/select-content.svelte b/src/renderer/src/lib/components/ui/select/select-content.svelte new file mode 100644 index 0000000..dc16d65 --- /dev/null +++ b/src/renderer/src/lib/components/ui/select/select-content.svelte @@ -0,0 +1,40 @@ + + + + + + + {@render children?.()} + + + + diff --git a/src/renderer/src/lib/components/ui/select/select-group-heading.svelte b/src/renderer/src/lib/components/ui/select/select-group-heading.svelte new file mode 100644 index 0000000..1fab5f0 --- /dev/null +++ b/src/renderer/src/lib/components/ui/select/select-group-heading.svelte @@ -0,0 +1,21 @@ + + + + {@render children?.()} + diff --git a/src/renderer/src/lib/components/ui/select/select-group.svelte b/src/renderer/src/lib/components/ui/select/select-group.svelte new file mode 100644 index 0000000..5454fdb --- /dev/null +++ b/src/renderer/src/lib/components/ui/select/select-group.svelte @@ -0,0 +1,7 @@ + + + diff --git a/src/renderer/src/lib/components/ui/select/select-item.svelte b/src/renderer/src/lib/components/ui/select/select-item.svelte new file mode 100644 index 0000000..49dbbd7 --- /dev/null +++ b/src/renderer/src/lib/components/ui/select/select-item.svelte @@ -0,0 +1,38 @@ + + + + {#snippet children({ selected, highlighted })} + + {#if selected} + + {/if} + + {#if childrenProp} + {@render childrenProp({ selected, highlighted })} + {:else} + {label || value} + {/if} + {/snippet} + diff --git a/src/renderer/src/lib/components/ui/select/select-label.svelte b/src/renderer/src/lib/components/ui/select/select-label.svelte new file mode 100644 index 0000000..4696025 --- /dev/null +++ b/src/renderer/src/lib/components/ui/select/select-label.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/src/renderer/src/lib/components/ui/select/select-scroll-down-button.svelte b/src/renderer/src/lib/components/ui/select/select-scroll-down-button.svelte new file mode 100644 index 0000000..3629205 --- /dev/null +++ b/src/renderer/src/lib/components/ui/select/select-scroll-down-button.svelte @@ -0,0 +1,20 @@ + + + + + diff --git a/src/renderer/src/lib/components/ui/select/select-scroll-up-button.svelte b/src/renderer/src/lib/components/ui/select/select-scroll-up-button.svelte new file mode 100644 index 0000000..1aa2300 --- /dev/null +++ b/src/renderer/src/lib/components/ui/select/select-scroll-up-button.svelte @@ -0,0 +1,20 @@ + + + + + diff --git a/src/renderer/src/lib/components/ui/select/select-separator.svelte b/src/renderer/src/lib/components/ui/select/select-separator.svelte new file mode 100644 index 0000000..0eac3eb --- /dev/null +++ b/src/renderer/src/lib/components/ui/select/select-separator.svelte @@ -0,0 +1,18 @@ + + + diff --git a/src/renderer/src/lib/components/ui/select/select-trigger.svelte b/src/renderer/src/lib/components/ui/select/select-trigger.svelte new file mode 100644 index 0000000..d405187 --- /dev/null +++ b/src/renderer/src/lib/components/ui/select/select-trigger.svelte @@ -0,0 +1,29 @@ + + + + {@render children?.()} + + diff --git a/src/renderer/src/lib/components/ui/separator/index.ts b/src/renderer/src/lib/components/ui/separator/index.ts new file mode 100644 index 0000000..82442d2 --- /dev/null +++ b/src/renderer/src/lib/components/ui/separator/index.ts @@ -0,0 +1,7 @@ +import Root from "./separator.svelte"; + +export { + Root, + // + Root as Separator, +}; diff --git a/src/renderer/src/lib/components/ui/separator/separator.svelte b/src/renderer/src/lib/components/ui/separator/separator.svelte new file mode 100644 index 0000000..09d88f4 --- /dev/null +++ b/src/renderer/src/lib/components/ui/separator/separator.svelte @@ -0,0 +1,20 @@ + + + diff --git a/src/renderer/src/lib/components/ui/table/index.ts b/src/renderer/src/lib/components/ui/table/index.ts new file mode 100644 index 0000000..14695c8 --- /dev/null +++ b/src/renderer/src/lib/components/ui/table/index.ts @@ -0,0 +1,28 @@ +import Root from "./table.svelte"; +import Body from "./table-body.svelte"; +import Caption from "./table-caption.svelte"; +import Cell from "./table-cell.svelte"; +import Footer from "./table-footer.svelte"; +import Head from "./table-head.svelte"; +import Header from "./table-header.svelte"; +import Row from "./table-row.svelte"; + +export { + Root, + Body, + Caption, + Cell, + Footer, + Head, + Header, + Row, + // + Root as Table, + Body as TableBody, + Caption as TableCaption, + Cell as TableCell, + Footer as TableFooter, + Head as TableHead, + Header as TableHeader, + Row as TableRow, +}; diff --git a/src/renderer/src/lib/components/ui/table/table-body.svelte b/src/renderer/src/lib/components/ui/table/table-body.svelte new file mode 100644 index 0000000..29e9687 --- /dev/null +++ b/src/renderer/src/lib/components/ui/table/table-body.svelte @@ -0,0 +1,20 @@ + + + + {@render children?.()} + diff --git a/src/renderer/src/lib/components/ui/table/table-caption.svelte b/src/renderer/src/lib/components/ui/table/table-caption.svelte new file mode 100644 index 0000000..4696cff --- /dev/null +++ b/src/renderer/src/lib/components/ui/table/table-caption.svelte @@ -0,0 +1,20 @@ + + + + {@render children?.()} + diff --git a/src/renderer/src/lib/components/ui/table/table-cell.svelte b/src/renderer/src/lib/components/ui/table/table-cell.svelte new file mode 100644 index 0000000..1a2f033 --- /dev/null +++ b/src/renderer/src/lib/components/ui/table/table-cell.svelte @@ -0,0 +1,23 @@ + + + + {@render children?.()} + diff --git a/src/renderer/src/lib/components/ui/table/table-footer.svelte b/src/renderer/src/lib/components/ui/table/table-footer.svelte new file mode 100644 index 0000000..b9b14eb --- /dev/null +++ b/src/renderer/src/lib/components/ui/table/table-footer.svelte @@ -0,0 +1,20 @@ + + +tr]:last:border-b-0", className)} + {...restProps} +> + {@render children?.()} + diff --git a/src/renderer/src/lib/components/ui/table/table-head.svelte b/src/renderer/src/lib/components/ui/table/table-head.svelte new file mode 100644 index 0000000..e9dd237 --- /dev/null +++ b/src/renderer/src/lib/components/ui/table/table-head.svelte @@ -0,0 +1,23 @@ + + + + {@render children?.()} + diff --git a/src/renderer/src/lib/components/ui/table/table-header.svelte b/src/renderer/src/lib/components/ui/table/table-header.svelte new file mode 100644 index 0000000..f47d259 --- /dev/null +++ b/src/renderer/src/lib/components/ui/table/table-header.svelte @@ -0,0 +1,20 @@ + + + + {@render children?.()} + diff --git a/src/renderer/src/lib/components/ui/table/table-row.svelte b/src/renderer/src/lib/components/ui/table/table-row.svelte new file mode 100644 index 0000000..0df769e --- /dev/null +++ b/src/renderer/src/lib/components/ui/table/table-row.svelte @@ -0,0 +1,23 @@ + + +svelte-css-wrapper]:[&>th,td]:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors", + className + )} + {...restProps} +> + {@render children?.()} + diff --git a/src/renderer/src/lib/components/ui/table/table.svelte b/src/renderer/src/lib/components/ui/table/table.svelte new file mode 100644 index 0000000..a334956 --- /dev/null +++ b/src/renderer/src/lib/components/ui/table/table.svelte @@ -0,0 +1,22 @@ + + +
+ + {@render children?.()} +
+