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",
|
2024-11-02 15:14:02 -06:00
|
|
|
"cypress": "^13.15.2",
|
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-07-02 00:36:33 +00:00
|
|
|
"react-router": "^7.18.1",
|
2023-01-31 18:08:07 -07:00
|
|
|
"react-scripts": "5.0.1",
|
|
|
|
|
"react-semantic-toasts-2": "^0.6.7",
|
2024-05-08 18:37:46 -06:00
|
|
|
"react-stl-viewer": "^2.5.0",
|
2026-07-14 20:25:34 -06:00
|
|
|
"semantic-ui-offline": "^2.5.1",
|
2026-06-03 18:05:08 -06:00
|
|
|
"semantic-ui-react": "^2.1.5",
|
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": {
|
2025-12-07 11:32:07 -07:00
|
|
|
"@testing-library/jest-dom": "^6.9.1",
|
2026-06-03 18:05:08 -06:00
|
|
|
"@types/lodash": "^4.17.24",
|
2026-07-15 20:07:21 -06:00
|
|
|
"@types/node": "^26.0.1",
|
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
|
|
|
}
|
|
|
|
|
}
|