diff --git a/frontend/src/App-6.jsx b/frontend/src/App-6.jsx new file mode 100644 index 0000000..cb4dfe6 --- /dev/null +++ b/frontend/src/App-6.jsx @@ -0,0 +1,556 @@ +import { useState, useEffect, useRef, useCallback } from 'react'; +import { api, S } from './lib.js'; +import { TOOLS } from './toolRegistry.js'; + +const ICONS = ['๐','๐','๐','๐','๐ ','๐ง','๐','๐พ','๐ฅ','๐ก','๐','๐','๐ฏ','โก','๐ ','๐ง','๐ฑ','๐ฎ','๐','๐ก']; + +// โโ Responsive Hook โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +function useIsMobile() { + const [mobile, setMobile] = useState(window.innerWidth < 768); + useEffect(() => { + const fn = () => setMobile(window.innerWidth < 768); + window.addEventListener('resize', fn); + return () => window.removeEventListener('resize', fn); + }, []); + return mobile; +} + +// โโ Toast โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ +function Toast({ msg, type }) { + if (!msg) return null; + const c = type === 'error' ? '#ff6b9d' : '#4ecdc4'; + return ( +
{r.body}
+ docker compose up -d --build
+ + {new Date().toLocaleDateString('de-DE',{weekday:'long',year:'numeric',month:'long',day:'numeric'})} +
+Vollstรคndige SQLite-Datenbank herunterladen.
+โ ๏ธ Aktuelle Datenbank wird vollstรคndig ersetzt.
+