Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
6044adf
core: use @reduxjs/toolkit where possible, replace createStructuredSe…
pjeweb May 20, 2026
03645d7
vector-editor: use @reduxjs/toolkit where possible, replace createStr…
pjeweb May 20, 2026
af20b0f
ui: improve types, prefer @reduxjs/toolkit exports, remove use of cre…
pjeweb May 20, 2026
6779348
update deps
pjeweb May 20, 2026
4d7d7c0
Update redux (toolkit), cleanup types, cleanup code
pjeweb May 20, 2026
91ccec2
Fix types
pjeweb May 21, 2026
380adbf
Cleanup
pjeweb May 21, 2026
62bd646
fix split layer switcher not working
pjeweb May 25, 2026
9325bff
add exports for embed
pjeweb May 25, 2026
9109a1c
ignore tsconfig.node.tsbuildinfo
pjeweb Jun 9, 2026
0c3b075
vsc: fix watch mode
pjeweb Jun 9, 2026
0c7e9bd
vsc: cleanup generated code (remove source map comment, remove invali…
pjeweb Jun 9, 2026
0d3ecdf
traffic-style: cleanup
pjeweb Jun 9, 2026
5f5e188
traffic-style: make default xsmall/small zoom levels for icons config…
pjeweb Jun 9, 2026
65a01e4
add documentation for Mapsight redux architecture
pjeweb Jun 9, 2026
020a1a5
fix watch/dev process
pjeweb Jun 9, 2026
24d222d
vsc: actually fix source map comment
pjeweb Jun 9, 2026
c2578dc
vsc: update test snapshot
pjeweb Jun 9, 2026
1654182
ui: use caching to optimize tag selector performance
pjeweb Jun 9, 2026
21b576d
lib-js: add shallowEqualRecords
pjeweb Jun 9, 2026
63541d9
core: feature sources - fix empty filter handling in selector
pjeweb Jun 9, 2026
fff3209
ui: map wrapper: add back anchoring, remove memo
pjeweb Jun 9, 2026
6157995
core: Use `quiet()` on noisy OL feedback actions
pjeweb Jun 9, 2026
438c714
tsconfig: fix vite node config (conflicting noEmit and composite opti…
pjeweb Jun 9, 2026
b8cdee0
docs: add guide for different action types
pjeweb Jun 9, 2026
fe0bdb2
eslint allow vitest.config.ts
pjeweb Jun 9, 2026
9bf3625
move zod to workspace catalog
pjeweb Jun 9, 2026
50d3d39
implement zod schema validation for mapsight config (core)
pjeweb Jun 9, 2026
018c994
type and schema optimizations
pjeweb Jun 9, 2026
9876ae2
quiet down ol-proxy unless dev/debug
pjeweb Jun 9, 2026
e0d0cf9
feat(core): combined feature sources
pjeweb Jun 9, 2026
4519148
traffic-style: fix copy script
pjeweb Jun 9, 2026
21da5a6
ui: add combined visible layer plugin to fill a feature source with v…
pjeweb Jun 9, 2026
d120e7f
core: fix some type issues
pjeweb Jun 9, 2026
718d15a
add demo for combined list
pjeweb Jun 9, 2026
0e8dcb7
docs: add section about batched actions
pjeweb Jun 9, 2026
c7a3ce6
core: extract feature interaction names into separate file
pjeweb Jun 9, 2026
4e5c846
properly exclude tests and cleanup what files are published to npm
pjeweb Jun 9, 2026
21dc106
core: add testing for feature hightlight interactions (vitest and pla…
pjeweb Jun 9, 2026
53bb5f7
core: add compare function to BaseController.getAndObserveUncontrolled
pjeweb Jun 9, 2026
f64b717
core: fix feature highlight race conditions
pjeweb Jun 9, 2026
5595b93
vsc: fix nested functions
pjeweb Jun 10, 2026
7312aeb
vsc: fix missing style tree state assignment
pjeweb Jun 10, 2026
2c6d287
feat: composable runtime icons
pjeweb Jun 10, 2026
d56bf89
replace demo-vite with showcase, keep demo-next as next integration demo
pjeweb Jun 11, 2026
66519f7
update changesets
pjeweb Jun 11, 2026
67972a5
update deps
pjeweb Jun 11, 2026
270595e
cleanup after refactoring
pjeweb Jun 11, 2026
eeb6355
add pre-push hook to prevent pushing private branches to remotes othe…
pjeweb Jun 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .changeset/combined-layer-feature-source.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@mapsight/core": minor
"@mapsight/ui": minor
---

Add combined feature sources that merge features from multiple member sources, and a `combinedVisibleLayers` plugin that keeps a combined source in sync with whichever member map layers are currently visible.
8 changes: 8 additions & 0 deletions .changeset/composable-runtime-icons.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"@mapsight/traffic-style": minor
"@mapsight/lib-ol": minor
"@mapsight/vector-style-compiler": minor
"@mapsight/ui": minor
---

Add composable runtime icons: pictogram-based templates and `mapsightIconId` parsing in traffic-style (with configurable default xsmall/small icon zoom levels), async rasterization with volatile style-cache invalidation in lib-ol and vector-style-compiler, plus `useMapsightIcon` and a runtime icon style plugin in ui.
6 changes: 6 additions & 0 deletions .changeset/config-schema-validation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@mapsight/core": minor
"@mapsight/ui": minor
---

Add Zod-based Mapsight config validation: core exports `createMapsightConfigSchema`, `validateConfig`, and per-domain schemas for map, layers, feature sources, and filters; ui validates config on startup (warn in development, optional strict mode in production).
5 changes: 5 additions & 0 deletions .changeset/embed-exports.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@mapsight/ui": patch
---

Add `@mapsight/ui/embed/*` package exports for embed entry points.
8 changes: 8 additions & 0 deletions .changeset/empty-years-sleep.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"@mapsight/vector-editor": minor
"@mapsight/lib-redux": minor
"@mapsight/core": minor
"@mapsight/ui": minor
---

Migrate to Redux Toolkit 2, Redux 5, react-redux 9, and reselect 5; replace `createStructuredSelector` usage, prefer `@reduxjs/toolkit` exports, and update the vector-editor browser renderer to React 18 `createRoot`.
5 changes: 5 additions & 0 deletions .changeset/feature-interaction-fixes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@mapsight/core": patch
---

Fix feature highlight race conditions, export `FeatureInteractionNames`, add optional `compare` to `BaseController.getAndObserveUncontrolled`, and mark noisy OpenLayers feedback dispatches with `quiet()`.
5 changes: 5 additions & 0 deletions .changeset/shallow-equal-records.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@mapsight/lib-js": patch
---

Add `shallowEqualRecords` utility for shallow comparison of string-keyed records.
5 changes: 5 additions & 0 deletions .changeset/vsc-compiler-fixes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@mapsight/vector-style-compiler": patch
---

Fix nested function codegen and style-tree state assignment in compiled output.
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ node_modules/
/apps/*/tmp/
/packages/*/tmp/
.turbo/
tsconfig.node.tsbuildinfo

# built files that get distributed
/apps/*/dist/
Expand All @@ -36,6 +37,11 @@ node_modules/
# local files
*.local

# Test runners (Playwright, etc.)
test-results/
playwright-report/
blob-report/

# Logs
logs
*.log
Expand Down
44 changes: 44 additions & 0 deletions .husky/pre-push
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/usr/bin/env sh

remote="$1"

# Block pushing private/* branches to any remote except "private".
if [ "$remote" != "private" ]; then
blocked=""

while read -r local_ref local_sha remote_ref remote_sha; do
[ -z "$local_ref" ] && continue

# Allow deleting private branches from non-private remotes (cleanup after accidents).
if [ "$local_sha" = "0000000000000000000000000000000000000000" ]; then
continue
fi

local_branch="${local_ref#refs/heads/}"
remote_branch="${remote_ref#refs/heads/}"

case "$local_branch" in
private/*)
blocked="${blocked}
- ${local_branch}"
;;
esac

case "$remote_branch" in
private/*)
if ! printf '%s' "$blocked" | grep -Fq " - ${remote_branch}"; then
blocked="${blocked}
- ${remote_branch}"
fi
;;
esac
done

if [ -n "$blocked" ]; then
echo "error: refusing to push private branches to remote '$remote'."
echo "Use the private remote instead, for example:"
echo " git push private <branch>"
printf 'Blocked branch(es):%s\n' "$blocked"
exit 1
fi
fi
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Mapsight is a framework for building web applications with OpenLayers and React.
| Application | Description |
| :-------------------------------------------------------- | :-------------------------------------------------------------------------- |
| <nobr>🧑‍🎨 [**`vector-editor`**](apps/vector-editor)</nobr> | Vector editor for creating and editing vector features exported as GeoJSON. |
| <nobr>💡 [**`demo-vite`**](apps/demo-vite)</nobr> | Simple demo app of Mapsight UI built with Vite. |
| <nobr>💡 [**`showcase`**](apps/showcase)</nobr> | Mapsight ecosystem showcase — UI demo, icon catalog, and runtime icons. |
| <nobr>💡 [**`demo-next`**](apps/demo-next)</nobr> | Simple demo app of Mapsight UI built with Next.js. |

## Development
Expand Down
2 changes: 1 addition & 1 deletion apps/demo-next/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"babel-plugin-react-compiler": "1.0.0",
"eslint-config-next": "16.2.6",
"postcss": "^8.5.14",
"sass": "^1.99.0",
"sass": "^1.100.0",
"tailwindcss": "catalog:"
},
"license": "UNLICENSED",
Expand Down
12 changes: 0 additions & 12 deletions apps/demo-vite/src/custom.html

This file was deleted.

23 changes: 0 additions & 23 deletions apps/demo-vite/src/full/client.tsx

This file was deleted.

12 changes: 0 additions & 12 deletions apps/demo-vite/src/full/index.html

This file was deleted.

1 change: 0 additions & 1 deletion apps/demo-vite/src/global.css

This file was deleted.

13 changes: 0 additions & 13 deletions apps/demo-vite/src/index.html

This file was deleted.

32 changes: 0 additions & 32 deletions apps/demo-vite/src/router/components/RoutedApp.tsx

This file was deleted.

12 changes: 0 additions & 12 deletions apps/demo-vite/src/router/index.html

This file was deleted.

18 changes: 0 additions & 18 deletions apps/demo-vite/src/simple-map.html

This file was deleted.

58 changes: 0 additions & 58 deletions apps/demo-vite/src/simple-map.tsx

This file was deleted.

File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import baseConfig from "../../configs/eslint-config-base-app.mts";
export default defineConfig([
baseConfig,
{
ignores: ["src/generated/**/*"],
ignores: ["src/generated/**/*", "vite.config.ts"],
},
{
name: "todos",
Expand Down
22 changes: 15 additions & 7 deletions apps/demo-vite/package.json → apps/showcase/package.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
{
"name": "@mapsight/demo-vite",
"description": "Mapsight Demo Vite",
"version": "0.0.6",
"name": "@mapsight/showcase",
"description": "Mapsight ecosystem showcase — UI demo, icon catalog, and package overview",
"version": "0.1.0",
"private": true,
"type": "module",
"dependencies": {
"@mapsight/core": "workspace:^",
"@mapsight/lib-js": "workspace:^",
Expand All @@ -16,7 +17,6 @@
"react": "catalog:",
"react-dom": "catalog:",
"react-redux": "catalog:",
"react-router": "^7.15.0",
"react-router-dom": "^7.15.0",
"reselect": "catalog:",
"tailwindcss": "catalog:"
Expand All @@ -27,8 +27,12 @@
"@types/node": "catalog:",
"@types/react": "catalog:",
"@types/react-dom": "catalog:",
"mkdirp": "^3.0.1",
"npm-run-all": "^4.1.5",
"rimraf": "^6.1.3",
"terser": "^5.47.1",
"vite": "^8.0.13"
"typescript": "catalog:",
"vite": "^8.0.14"
},
"license": "UNLICENSED",
"repository": {
Expand All @@ -37,16 +41,20 @@
"scripts": {
"build": "npm-run-all --parallel build:mapsightStyle copy --sequential build:app",
"build:app": "vite build --mode production --minify terser",
"build:mapsightStyle": "vector-style-compiler src/vector-styles/demo.scss --output src/generated/mapsight-vector-styles --name demo",
"build:mapsightStyle": "npm-run-all build:mapsightStyle:*",
"build:mapsightStyle:demo": "vector-style-compiler src/vector-styles/demo.scss --output src/generated/mapsight-vector-styles --name demo",
"build:mapsightStyle:icons": "vector-style-compiler src/vector-styles/icon-demo.scss --output src/generated/mapsight-vector-styles --name icon-demo",
"clean": "rimraf dist node_modules/.vite src/generated public/img/mapsight*",
"clean-build": "run-s clean build",
"copy": "run-p copy:*",
"copy:traffic-style": "mkdirp public/img && cp -R node_modules/@mapsight/traffic-style/img/* public/img/",
"copy:ui": "mkdirp public/img && cp -R node_modules/@mapsight/ui/dist/img/* public/img/",
"dev": "npm-run-all --parallel build:mapsightStyle copy --sequential dev:app",
"dev:app": "vite",
"dev:linked": "npm-run-all --parallel dev:packages dev",
"dev:packages": "turbo watch watch --filter=@mapsight/core --filter=@mapsight/ui --filter=@mapsight/lib-js --filter=@mapsight/lib-ol --filter=@mapsight/lib-redux",
"lint": "eslint",
"start": "vite preview",
"typecheck": "tsc --noEmit"
"typecheck": "tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.node.json"
}
}
File renamed without changes.
Loading
Loading