2021-11-01 16:42:52 -06:00
|
|
|
{
|
2021-11-02 10:26:07 -06:00
|
|
|
"name": "wrolpi-app",
|
2021-11-01 16:42:52 -06:00
|
|
|
"version": "0.1.0",
|
|
|
|
|
"private": true,
|
|
|
|
|
"dependencies": {
|
2026-03-29 18:58:31 -06:00
|
|
|
"@acalcutt/maplibre-contour-pmtiles": "^0.1.2",
|
2026-07-01 10:04:18 +00:00
|
|
|
"@artsy/fresnel": "^8.5.0",
|
2024-11-02 15:14:02 -06:00
|
|
|
"@cypress/react18": "^2.0.1",
|
ui: token-driven component library on Mantine
Adds src/components/ui: buttons, messages, labels, progress, status, tables,
form controls, panels, cards, statistics, modals, tooltips, tabs, and icons.
Everything resolves its colors through theme tokens, so no component branches
on the current theme, and Semantic UI keeps rendering the app meanwhile.
Mantine is bridged rather than restyled: its own CSS variables are pointed at
our tokens. Four details were not obvious, and each caused a visible defect
in night mode before being fixed:
- Structural colors must go in the resolver's light/dark blocks. Mantine
emits its values under [data-mantine-color-scheme], which outranks the
:root block that `variables` becomes, so its grays were winning.
- The dark and gray palettes are mapped shade by shade to tokens. Mantine
reads them directly for table borders, zebra stripes and input chrome;
they can be neither flattened nor left alone.
- Mantine writes --button-* as inline styles, which no stylesheet can
outrank, so the dashed danger treatment sets real properties instead.
- Switch colors are written onto inner elements, so they need scoped CSS
rather than a variable on the root. Adds a --knob token for control
handles, because Mantine's default thumb follows theme.white, which is
near-black in the dark-based themes.
An audit of every painted pixel in the /theme-sample gallery now finds no
non-red channel in night mode.
Icons come from @tabler/icons-react with the 102 Semantic names the app uses
mapped to components; they stroke with currentColor, so they follow the theme
without any rule of their own. Toasts keep the react-semantic-toasts-2
signature so those call sites migrate by changing an import.
TypeScript 5 is required: Mantine's declarations use `const` type parameters,
which 4.9 cannot parse (Mantine 7 is the same, so downgrading is no escape).
That needs two npm overrides to keep clean installs working, both verified
against a Docker build: react-scripts declares peerOptional typescript ^3||^4,
and fork-ts-checker 6.5.2 assigns typescript.performance.mark, which TS 5
made getter-only - crashing the dev server's type checker on every rebuild.
semantic-baseline.test.js ratchets the removal: it fails if a file not already
listed imports Semantic UI. An ESLint rule would have printed 75 warnings per
rebuild, and CI unsets CI= for its build step, so it would guard nothing there.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 19:22:03 -06:00
|
|
|
"@mantine/core": "^8.3.18",
|
|
|
|
|
"@mantine/hooks": "^8.3.18",
|
|
|
|
|
"@mantine/notifications": "^8.3.18",
|
|
|
|
|
"@tabler/icons-react": "^3.46.0",
|
2023-01-07 18:53:22 -07:00
|
|
|
"@testing-library/react": "^13.4.0",
|
2023-01-31 18:08:07 -07:00
|
|
|
"@testing-library/user-event": "^13.5.0",
|
2026-08-08 16:33:22 -06:00
|
|
|
"cypress": "^15.20.0",
|
Add ESP32 firmware flasher
Browser-based ESP32/ESP8266 flasher (esptool-js + Web Serial); nothing is
uploaded to WROLPi, the flash is written straight to the device over USB.
Firmware sources (themed, tabbed): a saved set, the WROLPi media directory,
or a local file. Local files can be dropped anywhere on the page, which jumps
to the "Add from computer" dropzone. The media picker searches .bin files by
path and can detect the connected chip to filter firmware to matching images.
- Indexed file_group.suffix + path filter for fast .bin search (alembic
migration backfills via split_path_stem_and_suffix)
- modules/flasher: chip detection from ESP image headers, /search endpoint,
and flasher.yaml saved configurations (/configs CRUD)
- Flash progress modal with ETA, connect timeout, boot-mode hint, auto-
scrolling logs
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 18:24:21 -06:00
|
|
|
"esptool-js": "^0.6.0",
|
2026-04-04 19:49:36 +00:00
|
|
|
"lodash": "^4.18.1",
|
2026-06-03 18:05:08 -06:00
|
|
|
"maplibre-gl": "^5.24.0",
|
2026-04-10 22:51:14 +00:00
|
|
|
"mathjs": "^15.2.0",
|
2026-06-03 18:05:08 -06:00
|
|
|
"pmtiles": "^4.4.1",
|
2026-03-29 18:58:31 -06:00
|
|
|
"protomaps-themes-base": "^4.5.0",
|
2026-07-14 20:25:34 -06:00
|
|
|
"query-string": "^9.4.1",
|
2023-01-07 18:31:39 -07:00
|
|
|
"react": "^18.2.0",
|
2026-07-14 20:25:34 -06:00
|
|
|
"react-colorful": "^5.8.0",
|
2023-01-07 18:31:39 -07:00
|
|
|
"react-dom": "^18.2.0",
|
2023-01-31 18:08:07 -07:00
|
|
|
"react-dropzone": "^14.2.3",
|
2026-07-14 20:25:34 -06:00
|
|
|
"react-hotkeys-hook": "^5.3.3",
|
|
|
|
|
"react-qr-code": "^2.2.0",
|
2026-08-08 16:30:30 -06:00
|
|
|
"react-router": "^7.18.2",
|
2023-01-31 18:08:07 -07:00
|
|
|
"react-scripts": "5.0.1",
|
2024-05-08 18:37:46 -06:00
|
|
|
"react-stl-viewer": "^2.5.0",
|
2026-07-14 20:25:34 -06:00
|
|
|
"three": "^0.185",
|
2026-06-03 18:05:08 -06:00
|
|
|
"web-vitals": "^5.3.0"
|
2021-11-01 16:42:52 -06:00
|
|
|
},
|
|
|
|
|
"scripts": {
|
|
|
|
|
"start": "react-scripts start",
|
2025-10-29 22:16:33 -06:00
|
|
|
"build": "BROWSERSLIST_IGNORE_OLD_DATA=true react-scripts build",
|
2021-11-01 16:42:52 -06:00
|
|
|
"test": "react-scripts test",
|
2025-10-29 22:16:33 -06:00
|
|
|
"eject": "react-scripts eject",
|
|
|
|
|
"cy:run": "cypress run",
|
|
|
|
|
"cy:open": "cypress open"
|
2021-11-01 16:42:52 -06:00
|
|
|
},
|
|
|
|
|
"eslintConfig": {
|
2023-01-31 18:08:07 -07:00
|
|
|
"extends": [
|
2024-11-02 15:14:02 -06:00
|
|
|
"react-app"
|
2023-01-31 18:08:07 -07:00
|
|
|
]
|
2021-11-01 16:42:52 -06:00
|
|
|
},
|
|
|
|
|
"browserslist": {
|
|
|
|
|
"production": [
|
|
|
|
|
">0.2%",
|
|
|
|
|
"not dead",
|
|
|
|
|
"not op_mini all"
|
|
|
|
|
],
|
|
|
|
|
"development": [
|
|
|
|
|
"last 1 chrome version",
|
|
|
|
|
"last 1 firefox version",
|
|
|
|
|
"last 1 safari version"
|
|
|
|
|
]
|
2025-10-29 22:16:33 -06:00
|
|
|
},
|
|
|
|
|
"devDependencies": {
|
fix: repair CI after the dependency bumps, and align it with the Trixie build (#651)
* fix(app): depend on @testing-library/dom directly
jest-dom 7 moved @testing-library/dom from a bundled dependency to a peer
dependency. Nothing else pulls the top-level copy in — @testing-library/react
13 carries its own nested v8 — so it was present only as a peer, and CI
installs with --legacy-peer-deps, which skips peers. Every suite then failed
to load setupTests.js with "Cannot find module '@testing-library/dom'".
Declare it as a devDependency so it installs under either resolution mode.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix(app): import mount from cypress/react
Cypress 14 removed the cypress/react18 subpath; cypress/react mounts React
18 itself. The e2e support file loads commands.js, so the stale import broke
bundling for every spec, not just component tests:
Module not found: Package path ./react18 is not exported from package cypress
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* ci: install and cache Cypress the way the bump requires
The Cypress binary lives in ~/.cache/Cypress, outside node_modules, but only
node_modules was cached. A restored cache satisfied npm, so npm skipped the
postinstall download and the 15.x binary was never fetched:
The cypress npm package is installed, but the Cypress binary is missing.
Cache both paths and install the binary explicitly.
Also align the JS toolchain with what actually ships. Debian 13 devices run
nodejs 20.19.2 and install with a plain `npm install`; the Docker app image
does the same. CI pinned older Node and passed --legacy-peer-deps, which
skips peer dependencies -- that is why jest-dom 7's peer requirement passed
review and broke CI. Match the devices instead.
Pin caddy to 2.11.4, the version Debian 13 devices run, rather than latest.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* ci: test on Python 3.13, the version that ships
Debian 13 devices run Python 3.13.5 and the api/controller/help images are
python:3.13-trixie, but CI ran 3.11 (and one job on 3.12), so the runtime
under test was two minors behind the runtime in production.
Verified on 3.13 before switching: backend 1712 passed, 5 skipped; controller
883 passed. The only new warning is SQLAlchemy 1.3.22 reaching Python's
deprecated datetime.utcfromtimestamp(), which is noise rather than a break.
Drop api-tests-3-12: no workflow referenced it, it duplicated api-tests, and
its "Sanic does not yet support 3.12" note is stale now that devices run 3.13.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-08 18:01:52 -06:00
|
|
|
"@testing-library/dom": "^10.4.1",
|
2026-08-08 16:30:39 -06:00
|
|
|
"@testing-library/jest-dom": "^7.0.0",
|
2026-06-03 18:05:08 -06:00
|
|
|
"@types/lodash": "^4.17.24",
|
2026-08-08 16:30:27 -06:00
|
|
|
"@types/node": "^26.1.2",
|
2025-12-07 11:32:07 -07:00
|
|
|
"@types/react": "^18.3.17",
|
|
|
|
|
"@types/react-dom": "^18.3.5",
|
ui: token-driven component library on Mantine
Adds src/components/ui: buttons, messages, labels, progress, status, tables,
form controls, panels, cards, statistics, modals, tooltips, tabs, and icons.
Everything resolves its colors through theme tokens, so no component branches
on the current theme, and Semantic UI keeps rendering the app meanwhile.
Mantine is bridged rather than restyled: its own CSS variables are pointed at
our tokens. Four details were not obvious, and each caused a visible defect
in night mode before being fixed:
- Structural colors must go in the resolver's light/dark blocks. Mantine
emits its values under [data-mantine-color-scheme], which outranks the
:root block that `variables` becomes, so its grays were winning.
- The dark and gray palettes are mapped shade by shade to tokens. Mantine
reads them directly for table borders, zebra stripes and input chrome;
they can be neither flattened nor left alone.
- Mantine writes --button-* as inline styles, which no stylesheet can
outrank, so the dashed danger treatment sets real properties instead.
- Switch colors are written onto inner elements, so they need scoped CSS
rather than a variable on the root. Adds a --knob token for control
handles, because Mantine's default thumb follows theme.white, which is
near-black in the dark-based themes.
An audit of every painted pixel in the /theme-sample gallery now finds no
non-red channel in night mode.
Icons come from @tabler/icons-react with the 102 Semantic names the app uses
mapped to components; they stroke with currentColor, so they follow the theme
without any rule of their own. Toasts keep the react-semantic-toasts-2
signature so those call sites migrate by changing an import.
TypeScript 5 is required: Mantine's declarations use `const` type parameters,
which 4.9 cannot parse (Mantine 7 is the same, so downgrading is no escape).
That needs two npm overrides to keep clean installs working, both verified
against a Docker build: react-scripts declares peerOptional typescript ^3||^4,
and fork-ts-checker 6.5.2 assigns typescript.performance.mark, which TS 5
made getter-only - crashing the dev server's type checker on every rebuild.
semantic-baseline.test.js ratchets the removal: it fails if a file not already
listed imports Semantic UI. An ESLint rule would have printed 75 warnings per
rebuild, and CI unsets CI= for its build step, so it would guard nothing there.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 19:22:03 -06:00
|
|
|
"typescript": "^5.9.3"
|
2025-12-26 18:59:13 -07:00
|
|
|
},
|
|
|
|
|
"jest": {
|
|
|
|
|
"transformIgnorePatterns": [
|
|
|
|
|
"node_modules/(?!(react-hotkeys-hook)/)"
|
|
|
|
|
]
|
2026-07-16 15:47:29 -06:00
|
|
|
},
|
|
|
|
|
"overrides": {
|
ui: token-driven component library on Mantine
Adds src/components/ui: buttons, messages, labels, progress, status, tables,
form controls, panels, cards, statistics, modals, tooltips, tabs, and icons.
Everything resolves its colors through theme tokens, so no component branches
on the current theme, and Semantic UI keeps rendering the app meanwhile.
Mantine is bridged rather than restyled: its own CSS variables are pointed at
our tokens. Four details were not obvious, and each caused a visible defect
in night mode before being fixed:
- Structural colors must go in the resolver's light/dark blocks. Mantine
emits its values under [data-mantine-color-scheme], which outranks the
:root block that `variables` becomes, so its grays were winning.
- The dark and gray palettes are mapped shade by shade to tokens. Mantine
reads them directly for table borders, zebra stripes and input chrome;
they can be neither flattened nor left alone.
- Mantine writes --button-* as inline styles, which no stylesheet can
outrank, so the dashed danger treatment sets real properties instead.
- Switch colors are written onto inner elements, so they need scoped CSS
rather than a variable on the root. Adds a --knob token for control
handles, because Mantine's default thumb follows theme.white, which is
near-black in the dark-based themes.
An audit of every painted pixel in the /theme-sample gallery now finds no
non-red channel in night mode.
Icons come from @tabler/icons-react with the 102 Semantic names the app uses
mapped to components; they stroke with currentColor, so they follow the theme
without any rule of their own. Toasts keep the react-semantic-toasts-2
signature so those call sites migrate by changing an import.
TypeScript 5 is required: Mantine's declarations use `const` type parameters,
which 4.9 cannot parse (Mantine 7 is the same, so downgrading is no escape).
That needs two npm overrides to keep clean installs working, both verified
against a Docker build: react-scripts declares peerOptional typescript ^3||^4,
and fork-ts-checker 6.5.2 assigns typescript.performance.mark, which TS 5
made getter-only - crashing the dev server's type checker on every rebuild.
semantic-baseline.test.js ratchets the removal: it fails if a file not already
listed imports Semantic UI. An ESLint rule would have printed 75 warnings per
rebuild, and CI unsets CI= for its build step, so it would guard nothing there.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 19:22:03 -06:00
|
|
|
"react-scripts": {
|
|
|
|
|
"typescript": "$typescript"
|
|
|
|
|
},
|
|
|
|
|
"fork-ts-checker-webpack-plugin": "^6.5.3"
|
2021-11-01 16:42:52 -06:00
|
|
|
}
|
|
|
|
|
}
|