From 14da54f2047be698e671647d4d802b6a4c82ed24 Mon Sep 17 00:00:00 2001 From: eshmeshek Date: Sat, 14 Mar 2026 12:48:29 +0300 Subject: [PATCH] fix: kiosk toggle sync, load more animation, remove nsis target --- README.md | 56 +++++++-- dialog-confirm.html | 12 ++ dialog-error.html | 12 ++ loader.html | 12 ++ main.js | 107 +++++++----------- package.json | 8 +- preload.js | 3 + .../confirm/build/asset-manifest.json | 13 --- public/localPages/confirm/build/index.html | 1 - .../build/static/css/main.e6c6eccb.css | 2 - .../build/static/css/main.e6c6eccb.css.map | 1 - .../confirm/build/static/js/main.e2d60cfb.js | 3 - .../static/js/main.e2d60cfb.js.LICENSE.txt | 39 ------- .../build/static/js/main.e2d60cfb.js.map | 1 - public/localPages/confirm/loader.html | 101 ----------------- public/localPages/confirm/package.json | 40 ------- public/localPages/confirm/public/index.html | 12 -- public/localPages/confirm/serv.js | 16 --- public/localPages/confirm/src/App.css | 23 ---- public/localPages/confirm/src/App.tsx | 22 ---- .../confirm/src/components/Confirm.css | 37 ------ .../confirm/src/components/Confirm.tsx | 31 ----- .../src/components/ConfirmContainer.css | 43 ------- .../src/components/ConfirmContainer.tsx | 39 ------- public/localPages/confirm/src/index.css | 0 public/localPages/confirm/src/index.tsx | 22 ---- public/localPages/confirm/tsconfig.json | 21 ---- .../error/build/asset-manifest.json | 13 --- public/localPages/error/build/index.html | 1 - .../error/build/static/css/main.a5182e31.css | 2 - .../build/static/css/main.a5182e31.css.map | 1 - .../error/build/static/js/main.ab661a74.js | 3 - .../static/js/main.ab661a74.js.LICENSE.txt | 39 ------- .../build/static/js/main.ab661a74.js.map | 1 - public/localPages/error/loader.html | 101 ----------------- public/localPages/error/package.json | 40 ------- public/localPages/error/public/index.html | 12 -- public/localPages/error/serv.js | 16 --- public/localPages/error/src/App.css | 23 ---- public/localPages/error/src/App.tsx | 22 ---- .../localPages/error/src/components/Error.css | 37 ------ .../localPages/error/src/components/Error.tsx | 32 ------ .../error/src/components/ErrorContainer.css | 40 ------- .../error/src/components/ErrorContainer.tsx | 27 ----- public/localPages/error/src/index.css | 0 public/localPages/error/src/index.tsx | 22 ---- public/localPages/error/tsconfig.json | 21 ---- .../loader/build/asset-manifest.json | 13 --- public/localPages/loader/build/index.html | 1 - .../loader/build/static/css/main.4d16bcf2.css | 2 - .../build/static/css/main.4d16bcf2.css.map | 1 - .../loader/build/static/js/main.bc0cdbdb.js | 3 - .../static/js/main.bc0cdbdb.js.LICENSE.txt | 39 ------- .../build/static/js/main.bc0cdbdb.js.map | 1 - public/localPages/loader/loader.html | 101 ----------------- public/localPages/loader/package.json | 41 ------- public/localPages/loader/public/index.html | 12 -- public/localPages/loader/serv.js | 16 --- public/localPages/loader/src/App.css | 23 ---- public/localPages/loader/src/App.tsx | 22 ---- .../loader/src/components/Loader.css | 37 ------ .../loader/src/components/Loader.tsx | 14 --- .../loader/src/components/LoaderContainer.css | 14 --- .../loader/src/components/LoaderContainer.tsx | 14 --- public/localPages/loader/src/index.css | 0 public/localPages/loader/src/index.tsx | 22 ---- public/localPages/loader/tsconfig.json | 21 ---- sidebar.html | 12 ++ src/components/Header.tsx | 29 +++++ src/components/MovieSearch.tsx | 55 ++++----- src/entries/dialog-confirm.tsx | 40 +++++++ src/entries/dialog-error.tsx | 39 +++++++ src/entries/loader.tsx | 40 +++++++ src/entries/sidebar.tsx | 99 ++++++++++++++++ src/main.tsx | 2 + src/styles/dialogs.css | 52 +++++++++ vite.config.ts | 14 ++- 77 files changed, 485 insertions(+), 1424 deletions(-) create mode 100644 dialog-confirm.html create mode 100644 dialog-error.html create mode 100644 loader.html delete mode 100644 public/localPages/confirm/build/asset-manifest.json delete mode 100644 public/localPages/confirm/build/index.html delete mode 100644 public/localPages/confirm/build/static/css/main.e6c6eccb.css delete mode 100644 public/localPages/confirm/build/static/css/main.e6c6eccb.css.map delete mode 100644 public/localPages/confirm/build/static/js/main.e2d60cfb.js delete mode 100644 public/localPages/confirm/build/static/js/main.e2d60cfb.js.LICENSE.txt delete mode 100644 public/localPages/confirm/build/static/js/main.e2d60cfb.js.map delete mode 100644 public/localPages/confirm/loader.html delete mode 100644 public/localPages/confirm/package.json delete mode 100644 public/localPages/confirm/public/index.html delete mode 100644 public/localPages/confirm/serv.js delete mode 100644 public/localPages/confirm/src/App.css delete mode 100644 public/localPages/confirm/src/App.tsx delete mode 100644 public/localPages/confirm/src/components/Confirm.css delete mode 100644 public/localPages/confirm/src/components/Confirm.tsx delete mode 100644 public/localPages/confirm/src/components/ConfirmContainer.css delete mode 100644 public/localPages/confirm/src/components/ConfirmContainer.tsx delete mode 100644 public/localPages/confirm/src/index.css delete mode 100644 public/localPages/confirm/src/index.tsx delete mode 100644 public/localPages/confirm/tsconfig.json delete mode 100644 public/localPages/error/build/asset-manifest.json delete mode 100644 public/localPages/error/build/index.html delete mode 100644 public/localPages/error/build/static/css/main.a5182e31.css delete mode 100644 public/localPages/error/build/static/css/main.a5182e31.css.map delete mode 100644 public/localPages/error/build/static/js/main.ab661a74.js delete mode 100644 public/localPages/error/build/static/js/main.ab661a74.js.LICENSE.txt delete mode 100644 public/localPages/error/build/static/js/main.ab661a74.js.map delete mode 100644 public/localPages/error/loader.html delete mode 100644 public/localPages/error/package.json delete mode 100644 public/localPages/error/public/index.html delete mode 100644 public/localPages/error/serv.js delete mode 100644 public/localPages/error/src/App.css delete mode 100644 public/localPages/error/src/App.tsx delete mode 100644 public/localPages/error/src/components/Error.css delete mode 100644 public/localPages/error/src/components/Error.tsx delete mode 100644 public/localPages/error/src/components/ErrorContainer.css delete mode 100644 public/localPages/error/src/components/ErrorContainer.tsx delete mode 100644 public/localPages/error/src/index.css delete mode 100644 public/localPages/error/src/index.tsx delete mode 100644 public/localPages/error/tsconfig.json delete mode 100644 public/localPages/loader/build/asset-manifest.json delete mode 100644 public/localPages/loader/build/index.html delete mode 100644 public/localPages/loader/build/static/css/main.4d16bcf2.css delete mode 100644 public/localPages/loader/build/static/css/main.4d16bcf2.css.map delete mode 100644 public/localPages/loader/build/static/js/main.bc0cdbdb.js delete mode 100644 public/localPages/loader/build/static/js/main.bc0cdbdb.js.LICENSE.txt delete mode 100644 public/localPages/loader/build/static/js/main.bc0cdbdb.js.map delete mode 100644 public/localPages/loader/loader.html delete mode 100644 public/localPages/loader/package.json delete mode 100644 public/localPages/loader/public/index.html delete mode 100644 public/localPages/loader/serv.js delete mode 100644 public/localPages/loader/src/App.css delete mode 100644 public/localPages/loader/src/App.tsx delete mode 100644 public/localPages/loader/src/components/Loader.css delete mode 100644 public/localPages/loader/src/components/Loader.tsx delete mode 100644 public/localPages/loader/src/components/LoaderContainer.css delete mode 100644 public/localPages/loader/src/components/LoaderContainer.tsx delete mode 100644 public/localPages/loader/src/index.css delete mode 100644 public/localPages/loader/src/index.tsx delete mode 100644 public/localPages/loader/tsconfig.json create mode 100644 sidebar.html create mode 100644 src/entries/dialog-confirm.tsx create mode 100644 src/entries/dialog-error.tsx create mode 100644 src/entries/loader.tsx create mode 100644 src/entries/sidebar.tsx create mode 100644 src/styles/dialogs.css diff --git a/README.md b/README.md index c226db0..3616037 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ npm run dev ## Сборка ```bash -# Windows (zip) +# Windows (installer + zip) npm run build:win # Linux (AppImage + deb) @@ -32,18 +32,56 @@ npm run build:linux ## Настройка -В настройках приложения (шестерёнка): +Настройки открываются кнопкой в левом верхнем углу приложения. -- **Список приложений** — сайты, которые отображаются на главном экране -- **TMDB API Key** — для поиска и обзора фильмов, получить на [themoviedb.org](https://www.themoviedb.org/settings/api) +### Приложения + +Список сайтов, которые отображаются на главном экране в виде карточек. Для каждого можно указать: + +- **Название** — отображается под иконкой +- **URL** — адрес сайта, открывается в отдельном WebContentsView +- **URL иконки** — картинка для карточки (необязательно) +- **Прокси** — использовать ли прокси для этого сайта (переключатель включается отдельно для каждого) + +### Прокси + +Приложение поддерживает HTTP/HTTPS/SOCKS5 прокси. Настраивается в разделе "Прокси" — указываешь хост и порт. Прокси применяется не глобально, а поприложенно: для каждого сайта в списке есть отдельный переключатель. Это позволяет, например, открывать заблокированные сайты через прокси, а остальные — напрямую. + +Конфигурация прокси сохраняется в файл `~/.ESH-Media.json` и применяется при следующем запуске автоматически. + +### Поиск фильмов + +- **TMDB API Key** — ключ для поиска метаданных, постеров и обзора по фильтрам. Получить бесплатно на [themoviedb.org](https://www.themoviedb.org/settings/api). Поддерживаются как обычные API-ключи, так и Bearer-токены. +- **Сайты** — список фильмовых сайтов, на которых будет производиться поиск после выбора фильма из TMDB. Поддерживаются движки DLE (kinogo, lordfilm и зеркала), HDRezka, Filmix. Тип определяется автоматически по домену. + +Если раздел "Сайты" пустой, приложение попробует использовать подходящие сайты из раздела "Приложения". + +## Конфиг + +Хранится в домашней директории пользователя: `~/.ESH-Media.json`. + +```json +{ + "apps": [...], + "proxy": { "host": "127.0.0.1", "port": "7890" }, + "movieSites": [...], + "tmdbApiKey": "...", + "bookmarks": [...] +} +``` ## Структура ``` -main.js — main process -preload.js — preload / IPC bridge +main.js — main process +preload.js — preload / IPC bridge +index.html — точка входа основного UI +loader.html — экран загрузки +dialog-error.html — диалог ошибки +dialog-confirm.html — диалог подтверждения src/ - components/ — React components - pages/ — pages - assets/ — styles + entries/ — entry points для Vite (loader, dialogs) + components/ — React компоненты + pages/ — страницы + styles/ — стили ``` diff --git a/dialog-confirm.html b/dialog-confirm.html new file mode 100644 index 0000000..529505e --- /dev/null +++ b/dialog-confirm.html @@ -0,0 +1,12 @@ + + + + + + Confirm + + +
+ + + diff --git a/dialog-error.html b/dialog-error.html new file mode 100644 index 0000000..b826816 --- /dev/null +++ b/dialog-error.html @@ -0,0 +1,12 @@ + + + + + + Error + + +
+ + + diff --git a/loader.html b/loader.html new file mode 100644 index 0000000..78db286 --- /dev/null +++ b/loader.html @@ -0,0 +1,12 @@ + + + + + + Loading + + +
+ + + diff --git a/main.js b/main.js index fa67c22..b973621 100644 --- a/main.js +++ b/main.js @@ -163,6 +163,8 @@ async function createWindow() { mainWindow = new BrowserWindow({ width: 1280, height: 800, + kiosk: true, + autoHideMenuBar: true, webPreferences: { preload: PRELOAD_PATH, contextIsolation: true, @@ -214,17 +216,11 @@ function setLoader() { loaderView = new WebContentsView({ webPreferences: { contextIsolation: true, nodeIntegration: false } }); addChild(loaderView); loaderView.setBounds({ x: 0, y: HEADER_H, width, height: height - HEADER_H }); - const html = ` -
- - `; - loaderView.webContents.loadURL('data:text/html;charset=utf-8,' + encodeURIComponent(html)); + if (isDev) { + loaderView.webContents.loadURL(`${RENDERER_URL}/loader.html`); + } else { + loaderView.webContents.loadFile(path.join(__dirname, 'dist', 'loader.html')); + } } function removeLoader() { @@ -237,41 +233,6 @@ function removeLoader() { // --- Dialogs (WebContentsView overlays) --- -const DIALOG_STYLES = ` - *{margin:0;padding:0;box-sizing:border-box} - body{ - background:rgba(0,0,0,0); - display:flex;align-items:center;justify-content:center; - height:100vh; - font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif; - transition:background 0.22s ease; - } - body.visible{background:rgba(0,0,0,0.78)} - body.hiding{background:rgba(0,0,0,0)} - .card{ - background:#1c1c1c;border:1px solid rgba(255,255,255,0.1); - border-radius:12px;padding:32px 36px;text-align:center; - min-width:300px;max-width:420px;box-shadow:0 24px 64px rgba(0,0,0,0.8); - opacity:0;transform:scale(0.92) translateY(10px); - transition:opacity 0.22s ease,transform 0.22s cubic-bezier(0.34,1.56,0.64,1); - } - body.visible .card{opacity:1;transform:scale(1) translateY(0)} - body.hiding .card{opacity:0;transform:scale(0.95) translateY(6px)} - .title{font-size:17px;font-weight:700;color:#fff;margin-bottom:10px} - .msg{font-size:13px;color:#999;line-height:1.5;margin-bottom:26px} - .btns{display:flex;gap:10px;justify-content:center} - button{padding:10px 26px;border:none;border-radius:7px;font-size:13px;font-weight:600;cursor:pointer;transition:opacity 0.15s,transform 0.1s} - button:hover{opacity:0.85} button:active{transform:scale(0.97)} - .btn-yes{background:#E50914;color:#fff} - .btn-no,.btn-ok{background:rgba(255,255,255,0.1);color:#ccc} -`; - -function dialogFadeIn(view) { - view.webContents.executeJavaScript( - `requestAnimationFrame(()=>requestAnimationFrame(()=>document.body.classList.add('visible')))` - ).catch(() => {}); -} - function dialogFadeOut(view, cb) { view.webContents.executeJavaScript( `document.body.classList.remove('visible');document.body.classList.add('hiding')` @@ -292,15 +253,13 @@ function makeDialogView() { function setError(title, text) { const view = makeDialogView(); errorViews.push(view); - const html = ` -
-
${title}
-
${text}
-
-
- `; - view.webContents.once('did-finish-load', () => { addChild(view); dialogFadeIn(view); }); - view.webContents.loadURL('data:text/html;charset=utf-8,' + encodeURIComponent(html)); + const query = new URLSearchParams({ title: title || '', text: text || '' }).toString(); + view.webContents.once('did-finish-load', () => { addChild(view); }); + if (isDev) { + view.webContents.loadURL(`${RENDERER_URL}/dialog-error.html?${query}`); + } else { + view.webContents.loadFile(path.join(__dirname, 'dist', 'dialog-error.html'), { query: { title: title || '', text: text || '' } }); + } } function removeError() { @@ -312,17 +271,13 @@ function removeError() { function setConfirm(text, actionOnYes) { const view = makeDialogView(); confirmViews.push({ view, actionOnYes }); - const html = ` -
-
${text}
-
- - -
-
- `; - view.webContents.once('did-finish-load', () => { addChild(view); dialogFadeIn(view); }); - view.webContents.loadURL('data:text/html;charset=utf-8,' + encodeURIComponent(html)); + const query = new URLSearchParams({ text: text || '' }).toString(); + view.webContents.once('did-finish-load', () => { addChild(view); }); + if (isDev) { + view.webContents.loadURL(`${RENDERER_URL}/dialog-confirm.html?${query}`); + } else { + view.webContents.loadFile(path.join(__dirname, 'dist', 'dialog-confirm.html'), { query: { text: text || '' } }); + } } function removeConfirm() { @@ -835,7 +790,21 @@ ipcMain.on('write-config', (_event, data) => { } }); -ipcMain.on('confirm', (_event, text, actionOnYes) => setConfirm(text, actionOnYes)); +ipcMain.handle('is-kiosk', () => mainWindow.isKiosk()); + +ipcMain.handle('toggle-kiosk', () => { + if (mainWindow.isKiosk()) { + mainWindow.setKiosk(false); + mainWindow.maximize(); + mainWindow.setMenuBarVisibility(false); + return false; + } else { + mainWindow.setKiosk(true); + return true; + } +}); + +ipcMain.on('confirm',(_event, text, actionOnYes) => setConfirm(text, actionOnYes)); ipcMain.on('action', (_event, action) => { if (action === 'error') { @@ -889,8 +858,8 @@ app.whenReady().then(async () => { } catch (_) {} enableBlockingInSession(session.defaultSession); - enableBlockingInSession(session.fromPartition('persist:proxy')); - enableBlockingInSession(session.fromPartition('persist:direct')); + getProxySession(); + getDirectSession(); await loadExtensions(); await createWindow(); }); diff --git a/package.json b/package.json index 2d589c0..d2e7832 100644 --- a/package.json +++ b/package.json @@ -46,9 +46,15 @@ "extensions/**/*" ], "win": { - "target": "zip", + "target": ["zip"], "icon": "public/favicon.ico" }, + "nsis": { + "oneClick": false, + "allowToChangeInstallationDirectory": true, + "installerLanguages": ["Russian", "English"], + "language": "1049" + }, "linux": { "target": ["AppImage", "deb"], "icon": "public/logo.png", diff --git a/preload.js b/preload.js index 7244cdd..dd5434e 100644 --- a/preload.js +++ b/preload.js @@ -26,4 +26,7 @@ contextBridge.exposeInMainWorld('electron', { searchMovies: (query, sites) => ipcRenderer.invoke('search-movies', query, sites), searchTmdb: (query, apiKey) => ipcRenderer.invoke('search-tmdb', query, apiKey), discoverTmdb: (params) => ipcRenderer.invoke('discover-tmdb', params), + toggleKiosk: () => ipcRenderer.invoke('toggle-kiosk'), + isKiosk: () => ipcRenderer.invoke('is-kiosk'), + }); diff --git a/public/localPages/confirm/build/asset-manifest.json b/public/localPages/confirm/build/asset-manifest.json deleted file mode 100644 index 630870f..0000000 --- a/public/localPages/confirm/build/asset-manifest.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "files": { - "main.css": "/static/css/main.e6c6eccb.css", - "main.js": "/static/js/main.e2d60cfb.js", - "index.html": "/index.html", - "main.e6c6eccb.css.map": "/static/css/main.e6c6eccb.css.map", - "main.e2d60cfb.js.map": "/static/js/main.e2d60cfb.js.map" - }, - "entrypoints": [ - "static/css/main.e6c6eccb.css", - "static/js/main.e2d60cfb.js" - ] -} \ No newline at end of file diff --git a/public/localPages/confirm/build/index.html b/public/localPages/confirm/build/index.html deleted file mode 100644 index f128c63..0000000 --- a/public/localPages/confirm/build/index.html +++ /dev/null @@ -1 +0,0 @@ -Loader Animation
\ No newline at end of file diff --git a/public/localPages/confirm/build/static/css/main.e6c6eccb.css b/public/localPages/confirm/build/static/css/main.e6c6eccb.css deleted file mode 100644 index b78db9c..0000000 --- a/public/localPages/confirm/build/static/css/main.e6c6eccb.css +++ /dev/null @@ -1,2 +0,0 @@ -.confirm{position:relative}.confirm div{border-radius:50%;opacity:1;position:absolute}h1,h2{color:#fff}.confirm-container{background-color:#626262;border:0 solid #000;border-radius:20px;display:flex;left:50%;max-height:600px;min-height:200px;min-width:400px;padding:15px;position:fixed;top:50%;transform:translate(-50%,-50%);z-index:9999}.confirm-button-container{bottom:40px;color:#fff;font-size:medium;position:absolute;right:40px;width:100}.confirm-button-container button{background:#0f00;border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:20px;height:50px;margin-right:20px;transition:background .3s ease;width:70px}.confirm-button:hover{background:#717171}body{align-items:center;animation:fadeIn .5s forwards;display:flex;height:100vh;justify-content:center;margin:0;opacity:0;overflow:hidden;padding:0}@keyframes fadeIn{0%{opacity:0}to{background:#000000b3;opacity:.9}} -/*# sourceMappingURL=main.e6c6eccb.css.map*/ \ No newline at end of file diff --git a/public/localPages/confirm/build/static/css/main.e6c6eccb.css.map b/public/localPages/confirm/build/static/css/main.e6c6eccb.css.map deleted file mode 100644 index c1947a2..0000000 --- a/public/localPages/confirm/build/static/css/main.e6c6eccb.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/css/main.e6c6eccb.css","mappings":"AACA,SACI,iBACF,CAEA,aAGE,iBAAkB,CADlB,SAAU,CADV,iBAIF,CACA,MACE,UAEF,CCbF,mBAKI,wBAAiC,CACjC,mBAAuB,CACvB,kBAAmB,CACnB,YAAa,CALb,QAAS,CAUT,gBAAiB,CADjB,gBAAiB,CADjB,eAAgB,CAFhB,YAAa,CARb,cAAc,CACd,OAAQ,CAER,8BAAgC,CAMhC,YAIF,CAEA,0BAKE,WAAY,CAHZ,UAAY,CACZ,gBAAiB,CACjB,iBAAkB,CAElB,UAAW,CALX,SAMF,CAEA,iCAGE,gBAA8B,CAC9B,WAAY,CAGZ,iBAAkB,CAElB,UAAY,CAHZ,cAAe,CADf,cAAe,CAHf,WAAY,CAQZ,iBAAkB,CAFlB,8BAAgC,CAPhC,UAUF,CAEA,sBACE,kBACF,CCxCF,KAOI,kBAAmB,CAEnB,6BAA+B,CAJ/B,YAAa,CADb,YAAa,CAEb,sBAAuB,CALvB,QAAS,CAOT,SAAU,CALV,eAAgB,CADhB,SAQF,CAEA,kBACE,GACE,SACF,CACA,GAEE,oBAA8B,CAD9B,UAEF,CACF","sources":["components/Confirm.css","components/ConfirmContainer.css","App.css"],"sourcesContent":["/* src/components/Loader.css */\r\n.confirm {\r\n position: relative;\r\n }\r\n \r\n .confirm div {\r\n position: absolute;\r\n opacity: 1;\r\n border-radius: 50%;\r\n /* animation: loader-animation 1.5s infinite ease-in-out; */\r\n }\r\n h1, h2 {\r\n color: white;\r\n /* animation: loader-animation 1.5s infinite ease-in-out; */\r\n }\r\n /* .error div:nth-child(2) {\r\n animation-delay: -1.2s;\r\n }\r\n \r\n @keyframes error-animation {\r\n 0%,\r\n 100% {\r\n width: 0;\r\n height: 0;\r\n top: 50px;\r\n left: 50px;\r\n opacity: 0.5;\r\n }\r\n 50% {\r\n width: 100px;\r\n height: 100px;\r\n top: 0;\r\n left: 0;\r\n opacity: 0;\r\n }\r\n }\r\n */","/* src/components/LoaderContainer.css */\r\n.confirm-container {\r\n position:fixed; /* Fixed position to keep it centered relative to the viewport */\r\n top: 50%; /* Center vertically */\r\n left: 50%; /* Center horizontally */\r\n transform: translate(-50%, -50%); /* Adjust for the element's size */\r\n background-color: rgb(98, 98, 98);\r\n border: 0px solid black;\r\n border-radius: 20px;\r\n display: flex;\r\n padding: 15px;\r\n z-index: 9999; /* Ensure it's on top of other content */\r\n min-width: 400px; /* Width of the loader */\r\n min-height: 200px; /* Height of the loader */\r\n max-height: 600px; /* Height of the loader */\r\n }\r\n \r\n .confirm-button-container {\r\n width: 100;\r\n color: white;\r\n font-size: medium;\r\n position: absolute;\r\n bottom: 40px; \r\n right: 40px;\r\n }\r\n \r\n .confirm-button-container button {\r\n width: 70px;\r\n height: 50px;\r\n background: rgba(0, 255, 0, 0); /* Transparent background */\r\n border: none;\r\n font-size: 20px;\r\n cursor: pointer;\r\n border-radius: 4px;\r\n transition: background 0.3s ease;\r\n color: white;\r\n margin-right: 20px;\r\n }\r\n \r\n .confirm-button:hover {\r\n background: rgb(113, 113, 113); /* Light green with opacity 0.5 */\r\n } \r\n ","/* src/App.css */\r\nbody {\r\n margin: 0;\r\n padding: 0;\r\n overflow: hidden;\r\n height: 100vh;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n opacity: 0;\r\n animation: fadeIn 0.5s forwards;\r\n }\r\n \r\n @keyframes fadeIn {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 0.9;\r\n background: rgba(0, 0, 0, 0.7);\r\n }\r\n }\r\n "],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/public/localPages/confirm/build/static/js/main.e2d60cfb.js b/public/localPages/confirm/build/static/js/main.e2d60cfb.js deleted file mode 100644 index a86bd7c..0000000 --- a/public/localPages/confirm/build/static/js/main.e2d60cfb.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see main.e2d60cfb.js.LICENSE.txt */ -(()=>{"use strict";var e={280:(e,n,t)=>{var r=t(905),l=t(527);function a(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t