mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
ce1fa68c84
Adds a Special Themes row to Settings > Appearance > Theme. Halloween is a scheme on the existing data-scheme axis that is always dark: the applier and the boot script force .dark while it is on, and the color mode control is dimmed with a hint. - Palette for the whole app (surfaces, dashboard, Vacay glass, Journey, mobile chrome) in theme/special/halloween.tokens.css, loaded with index.css. - Decor as a lazy chunk mounted by SpecialThemeLayer while the scheme is on: fog, embers, bat flocks, a passing ghost, corner cobwebs, spiders that drop on a thread and flee when poked, a pumpkin patch and an ember running along the navbar. Figures are pre-rendered 3D sprite sheets. - Nothing is drawn over a map: the Atlas gets no decor, the trip planner only dresses its side panels. Marker clusters turn into lanterns. - The 3D mascot plays its own Halloween clips in every scene (witch hat, a spider on the brim, a lit pumpkin beside it); the SVG fallback wears the same costume. - Reduced motion stills everything, transparency off drops the fog, shared pages never show it. - Navbar, bottom nav, notifications, Atlas and Collections read the dark flag off the .dark class instead of settings.dark_mode, so a forced dark theme reaches them.
124 lines
4.3 KiB
JSON
124 lines
4.3 KiB
JSON
{
|
|
"name": "@trek/client",
|
|
"version": "4.3.3",
|
|
"engines": {
|
|
"node": "^22.22.2 || ^24.15.0 || >=26.0.0"
|
|
},
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"prebuild": "node scripts/patch-maplibre.mjs && node scripts/generate-icons.mjs",
|
|
"build": "vite build",
|
|
"build:analyze": "vite build --mode analyze",
|
|
"preview": "vite preview",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"test:unit": "vitest run tests/unit",
|
|
"test:integration": "vitest run tests/integration src/**/*.test.{ts,tsx}",
|
|
"test:watch": "vitest",
|
|
"test:coverage": "vitest run --coverage",
|
|
"lint": "eslint .",
|
|
"lint:check": "eslint .",
|
|
"lint:warnings": "node scripts/eslint-ratchet.mjs",
|
|
"lint:pages": "node scripts/check-page-pattern.mjs",
|
|
"lint:rtl": "node scripts/rtl-lint.mjs",
|
|
"lint:size": "node scripts/size-lint.mjs",
|
|
"lint:format": "node scripts/format-lint.mjs",
|
|
"lint:layers": "node scripts/layer-lint.mjs",
|
|
"lint:offline": "node scripts/offline-lint.mjs",
|
|
"lint:dup": "node scripts/dup-lint.mjs",
|
|
"lint:pairs": "node scripts/pairs-lint.mjs",
|
|
"lint:skips": "node scripts/skip-lint.mjs",
|
|
"lint:strict": "node scripts/strict-lint.mjs",
|
|
"lint:i18n-keys": "node scripts/i18n-keys.mjs",
|
|
"check:gl-split": "node scripts/check-gl-split.mjs",
|
|
"theme:lint": "node scripts/theme-lint.mjs",
|
|
"e2e": "playwright test",
|
|
"shots": "playwright test --project=screenshots",
|
|
"help:media": "node e2e/help/run.mjs",
|
|
"help:media:promote": "node e2e/help/promote.mjs",
|
|
"shots:promote": "node e2e/screenshots/promote.mjs",
|
|
"e2e:report": "playwright show-report",
|
|
"format": "prettier --write \"src/**/*.tsx\" \"src/**/*.css\"",
|
|
"format:check": "prettier --check \"src/**/*.tsx\" \"src/**/*.css\"",
|
|
"postinstall": "node scripts/patch-maplibre.mjs",
|
|
"predev": "node scripts/patch-maplibre.mjs"
|
|
},
|
|
"dependencies": {
|
|
"@fontsource/bebas-neue": "^5.3.0",
|
|
"@fontsource/creepster": "^5.3.0",
|
|
"@fontsource/eb-garamond": "^5.3.0",
|
|
"@fontsource/geist-sans": "^5.3.0",
|
|
"@fontsource/inter": "^5.3.0",
|
|
"@fontsource/lora": "^5.3.0",
|
|
"@fontsource/museomoderno": "^5.3.0",
|
|
"@fontsource/playfair-display": "^5.3.0",
|
|
"@fontsource/poppins": "^5.3.0",
|
|
"@mapbox/mapbox-gl-rtl-text": "^0.4.0",
|
|
"@maplibre/maplibre-gl-leaflet": "0.1.4",
|
|
"@simplewebauthn/browser": "^13.3.0",
|
|
"@trek/shared": "*",
|
|
"axios": "^1.20.0",
|
|
"dexie": "^4.4.6",
|
|
"drag-drop-touch": "^1.3.1",
|
|
"heic-to": "^1.5.2",
|
|
"iso-3166-2": "^1.0.0",
|
|
"leaflet": "^1.9.4",
|
|
"lucide-react": "^0.577.0",
|
|
"mapbox-gl": "^3.31.0",
|
|
"maplibre-gl": "5.24.0",
|
|
"plyr": "^3.8.4",
|
|
"react": "^19.3.0",
|
|
"react-dom": "^19.3.0",
|
|
"react-dropzone": "^14.4.1",
|
|
"react-leaflet": "^5.0.0",
|
|
"react-leaflet-cluster": "^4.1.3",
|
|
"react-markdown": "^10.1.0",
|
|
"react-router": "^7.18.4",
|
|
"rehype-sanitize": "^6.0.0",
|
|
"remark-breaks": "^4.0.0",
|
|
"remark-gfm": "^4.0.1",
|
|
"tz-lookup": "^6.1.25",
|
|
"zod": "^4.6.5",
|
|
"zustand": "^5.0.15"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^10.0.1",
|
|
"@jscpd/core": "^4.2.5",
|
|
"@jscpd/tokenizer": "^4.2.6",
|
|
"@playwright/test": "^1.63.0",
|
|
"@testing-library/jest-dom": "^6.10.0",
|
|
"@testing-library/react": "^16.3.3",
|
|
"@testing-library/user-event": "^14.6.7",
|
|
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
|
"@types/leaflet": "^1.9.22",
|
|
"@types/node": "^25.9.8",
|
|
"@types/react": "^19.3.0",
|
|
"@types/react-dom": "^19.3.0",
|
|
"@vitejs/plugin-react": "^6.1.1",
|
|
"@vitest/coverage-v8": "^4.1.11",
|
|
"autoprefixer": "^10.6.1",
|
|
"eslint": "^10.11.0",
|
|
"eslint-config-flat-gitignore": "^2.4.0",
|
|
"eslint-config-prettier": "^10.1.8",
|
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
"eslint-plugin-react-refresh": "^0.5.7",
|
|
"fake-indexeddb": "^6.2.5",
|
|
"jsdom": "^29.1.1",
|
|
"msw": "^2.15.0",
|
|
"postcss": "^8.5.28",
|
|
"prettier": "^3.9.8",
|
|
"prettier-plugin-organize-imports": "^4.3.0",
|
|
"prettier-plugin-tailwindcss": "^0.8.1",
|
|
"rollup-plugin-visualizer": "^7.1.1",
|
|
"sharp": "^0.35.4",
|
|
"tailwindcss": "^3.4.19",
|
|
"typescript": "^6.0.3",
|
|
"typescript-eslint": "^8.70.0",
|
|
"vite": "8.3.0",
|
|
"vite-plugin-pwa": "^1.3.0",
|
|
"vitest": "^4.1.11"
|
|
}
|
|
}
|