@kahwee/sf-map-svg 5.0.0 → 5.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +17 -2
- package/SOURCES.md +53 -0
- package/dist/data/index.d.ts +1 -0
- package/dist/data/index.js +1 -0
- package/dist/data/precincts-2022.json +1 -0
- package/dist/data/precincts.d.ts +2 -0
- package/dist/data/precincts.js +5 -0
- package/dist/data/types.d.ts +5 -0
- package/dist/src/district-controller.d.ts +64 -0
- package/dist/src/district-controller.js +215 -0
- package/dist/src/explorer-core.js +52 -181
- package/llms-full.txt +114 -13
- package/llms.txt +1 -1
- package/package.json +37 -24
package/llms-full.txt
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
> Offline San Francisco SVG maps with explicit geographic imports, no runtime dependencies, static rendering, and a browser controller.
|
|
4
4
|
|
|
5
|
-
@kahwee/sf-map-svg 5.
|
|
5
|
+
@kahwee/sf-map-svg 5.1.1 · local working tree. Node >=24.0.0 for server rendering; browsers need a DOM and a JSON-capable bundler.
|
|
6
6
|
|
|
7
7
|
These are working-tree docs. Unreleased changelog entries may describe APIs absent from npm; verify the installed version before copying them.
|
|
8
8
|
|
|
9
9
|
Use renderMap(data, options) for SVG strings; createMap(data, options) returns a controller. Mount map.element and destroy it on unmount. Choose mode explicitly: createMap defaults to basemap. Geography is separate; staticMapData and fullMapData have different shapes.
|
|
10
10
|
|
|
11
|
-
<!-- Generated from README.md; @kahwee/sf-map-svg 5.
|
|
11
|
+
<!-- Generated from README.md; @kahwee/sf-map-svg 5.1.1 · local working tree. -->
|
|
12
12
|
|
|
13
13
|
# SF Map SVG
|
|
14
14
|
|
|
@@ -93,7 +93,7 @@ function disposeMap() {
|
|
|
93
93
|
}
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
-
`createMap(data, options)` returns a controller. Use `map.element` for mounting, `map.configure({ features, layers, controls, appearance, mode, source, year, labels })` for runtime switches, `map.camera` for pan/zoom/fit/reset, and `map.on()` for typed events. Appearance can change live while preserving camera, selection, and focus. `getResolvedConfiguration()` explains effective layers; `getCapabilities()` reports supplied geography. SFAR realtor neighborhoods are the default when supplied; SF Find and analysis are explicit alternate sources. The `/data/full` preset includes all three collections and historical districts.
|
|
96
|
+
`createMap(data, options)` returns a controller. Use `map.element` for mounting, `map.configure({ features, layers, controls, appearance, mode, source, year, labels })` for runtime switches, `map.camera` for pan/zoom/fit/reset, and `map.on()` for typed events. Appearance can change live while preserving camera, selection, and focus. `getResolvedConfiguration()` explains effective layers; `getCapabilities()` reports supplied geography. SFAR realtor neighborhoods are the default when supplied; SF Find and analysis are explicit alternate sources. The `/data/full` preset includes all three collections and historical districts. `precinctMaps[2022]` from `@kahwee/sf-map-svg/data/precincts` holds the 514 Department of Elections precinct boundaries (data only, not a rendered layer).
|
|
97
97
|
|
|
98
98
|
See [controller options, events, and lifecycle](https://github.com/kahwee/sf-map-svg/blob/main/docs/API.md#interactive-maps),
|
|
99
99
|
[examples](https://github.com/kahwee/sf-map-svg/blob/main/docs/EXAMPLES.md), and [consumer integration](https://github.com/kahwee/sf-map-svg/blob/main/docs/consumer-integration.md).
|
|
@@ -134,7 +134,7 @@ and [coordinate units](https://github.com/kahwee/sf-map-svg/blob/main/docs/API.m
|
|
|
134
134
|
|
|
135
135
|
Canonical geography is in [`data/`](https://github.com/kahwee/sf-map-svg/blob/main/data/README.md), with provenance in [`SOURCES.md`](https://github.com/kahwee/sf-map-svg/blob/main/SOURCES.md). The public `/data` entry exposes lookup, catalog, district maps, and source-specific neighborhood collections. These are deeply frozen; clone before editing.
|
|
136
136
|
|
|
137
|
-
Install with `pnpm install --frozen-lockfile`. Bun 1.4.
|
|
137
|
+
Install with `pnpm install --frozen-lockfile`. Bun 1.4.4 is pinned in `.bun-version` for development builds and type checks; `pnpm test:bun` also checks compiled-package imports and static rendering. Strict TypeScript 7.0.2 declarations and packed consumers remain part of the Node/pnpm checks. See the [contributing guide](https://github.com/kahwee/sf-map-svg/blob/main/CONTRIBUTING.md) for architecture and the [validation and release runbook](https://github.com/kahwee/sf-map-svg/blob/main/docs/maintenance.md) for checks, browser inspection, and publishing. If you are upgrading from v2, follow the [v3 migration guide](https://github.com/kahwee/sf-map-svg/blob/main/docs/migration-v3.md).
|
|
138
138
|
|
|
139
139
|
## Browser checks and marker performance
|
|
140
140
|
|
|
@@ -250,9 +250,24 @@ pnpm benchmark:markers --counts=2000 --mode=neighborhoods \
|
|
|
250
250
|
|
|
251
251
|
[GitHub Actions maintenance](https://github.com/kahwee/sf-map-svg/blob/main/.github/ACTIONS.md) covers workflows, parallel checks, action versions, and weekly updates.
|
|
252
252
|
|
|
253
|
+
Project type checks use Bun: `pnpm check:types:built` checks compiled-package
|
|
254
|
+
consumers, Storybook, and the website in parallel after a build. `pnpm check` runs
|
|
255
|
+
the full gate. CI runs `check:node` on Node 24/26 and these Bun checks once in the
|
|
256
|
+
Bun job. TypeScript remains responsible for declaration emission and packed-package
|
|
257
|
+
consumer compatibility tests. Published consumers do not need Bun.
|
|
258
|
+
|
|
259
|
+
On the session’s Linux executor, three-run median project checks measured
|
|
260
|
+
0.402/0.688/0.209 seconds with Bun for consumers/stories/website, versus
|
|
261
|
+
3.156/4.110/2.496 seconds with `pnpm exec tsc -p <project>`. These include command
|
|
262
|
+
startup; they do not predict hosted CI duration.
|
|
263
|
+
|
|
264
|
+
CI reuses completed library output for demos, Storybook, and Pages. Standalone
|
|
265
|
+
commands still build from a clean checkout. See the [toolchain benchmark report](https://github.com/kahwee/sf-map-svg/blob/main/docs/toolchain-benchmarks.md)
|
|
266
|
+
for raw samples, output-equivalence checks, and reproducible commands.
|
|
267
|
+
|
|
253
268
|
---
|
|
254
269
|
|
|
255
|
-
<!-- Generated from docs/developer-guide.md; @kahwee/sf-map-svg 5.
|
|
270
|
+
<!-- Generated from docs/developer-guide.md; @kahwee/sf-map-svg 5.1.1 · local working tree. -->
|
|
256
271
|
|
|
257
272
|
# Developer guide
|
|
258
273
|
|
|
@@ -418,7 +433,7 @@ See [API options](https://github.com/kahwee/sf-map-svg/blob/main/docs/API.md), [
|
|
|
418
433
|
|
|
419
434
|
---
|
|
420
435
|
|
|
421
|
-
<!-- Generated from docs/API.md; @kahwee/sf-map-svg 5.
|
|
436
|
+
<!-- Generated from docs/API.md; @kahwee/sf-map-svg 5.1.1 · local working tree. -->
|
|
422
437
|
|
|
423
438
|
# Map options and lifecycle
|
|
424
439
|
|
|
@@ -604,7 +619,7 @@ Call `binding.setMarkers(next)` after `map.setMarkers(next)` when the catalog ch
|
|
|
604
619
|
|
|
605
620
|
---
|
|
606
621
|
|
|
607
|
-
<!-- Generated from docs/EXAMPLES.md; @kahwee/sf-map-svg 5.
|
|
622
|
+
<!-- Generated from docs/EXAMPLES.md; @kahwee/sf-map-svg 5.1.1 · local working tree. -->
|
|
608
623
|
|
|
609
624
|
# Examples
|
|
610
625
|
|
|
@@ -745,7 +760,7 @@ See [query semantics and limitations](https://github.com/kahwee/sf-map-svg/blob/
|
|
|
745
760
|
|
|
746
761
|
---
|
|
747
762
|
|
|
748
|
-
<!-- Generated from docs/consumer-integration.md; @kahwee/sf-map-svg 5.
|
|
763
|
+
<!-- Generated from docs/consumer-integration.md; @kahwee/sf-map-svg 5.1.1 · local working tree. -->
|
|
749
764
|
|
|
750
765
|
# Embedding and progressive enhancement
|
|
751
766
|
|
|
@@ -923,7 +938,7 @@ keyboard, focus, and dismissal behavior. See [coordinates and units](https://git
|
|
|
923
938
|
|
|
924
939
|
---
|
|
925
940
|
|
|
926
|
-
<!-- Generated from docs/migration-v5.md; @kahwee/sf-map-svg 5.
|
|
941
|
+
<!-- Generated from docs/migration-v5.md; @kahwee/sf-map-svg 5.1.1 · local working tree. -->
|
|
927
942
|
|
|
928
943
|
# Migrating to v5
|
|
929
944
|
|
|
@@ -1028,7 +1043,7 @@ collections. Shared edges can match more than one feature. See the
|
|
|
1028
1043
|
|
|
1029
1044
|
---
|
|
1030
1045
|
|
|
1031
|
-
<!-- Generated from docs/migration-v3.md; @kahwee/sf-map-svg 5.
|
|
1046
|
+
<!-- Generated from docs/migration-v3.md; @kahwee/sf-map-svg 5.1.1 · local working tree. -->
|
|
1032
1047
|
|
|
1033
1048
|
# Migrate to version 3
|
|
1034
1049
|
|
|
@@ -1069,7 +1084,7 @@ District styles are now prepared once per district on construction and style/yea
|
|
|
1069
1084
|
|
|
1070
1085
|
---
|
|
1071
1086
|
|
|
1072
|
-
<!-- Generated from SOURCES.md; @kahwee/sf-map-svg 5.
|
|
1087
|
+
<!-- Generated from SOURCES.md; @kahwee/sf-map-svg 5.1.1 · local working tree. -->
|
|
1073
1088
|
|
|
1074
1089
|
# Geometry and provenance
|
|
1075
1090
|
|
|
@@ -1251,9 +1266,62 @@ reconciles all 2002, 2012, and 2022 district totals. The election JSON files
|
|
|
1251
1266
|
are Pages datasets; the historical district maps retain their existing
|
|
1252
1267
|
display geometry, and no precinct polygons or raw workbook data are shipped.
|
|
1253
1268
|
|
|
1269
|
+
## November 2026 ballot and pending results
|
|
1270
|
+
|
|
1271
|
+
Downloaded November 4, 2026 UTC (November 3 Pacific):
|
|
1272
|
+
https://media.api.sf.gov/documents/N26_EN_VIP.pdf .
|
|
1273
|
+
`elections/2026-11-03.json` records its SHA-256 and verification time. Printed
|
|
1274
|
+
page 248 lists all 14 state, one regional and ten local measures. Pages 24–51
|
|
1275
|
+
supply candidate statement names. The official roster at
|
|
1276
|
+
https://www.sf.gov/candidates-november-3-2026-general-election was verified
|
|
1277
|
+
on November 4 UTC to complete the 15 displayed candidate contests, adding
|
|
1278
|
+
Charles Hoelter, Manuel Noris-Barrera, Philip Louis Wing, Nicholas Berg and
|
|
1279
|
+
Jamo Muhammad. The California Secretary of State certified list, downloaded
|
|
1280
|
+
November 4 UTC from
|
|
1281
|
+
https://elections.cdn.sos.ca.gov/statewide-elections/2026-general/cert-list-candidates.pdf
|
|
1282
|
+
(certified August 27, 2026; SHA-256 in the feed), supplies nine additional
|
|
1283
|
+
state/Board of Equalization contests on printed pages 1–2 and 13 Supreme Court
|
|
1284
|
+
and First Appellate District retention contests on pages 33–34. The latter
|
|
1285
|
+
explicitly includes San Francisco County and matches SF pamphlet pp. 246–247.
|
|
1286
|
+
Other appellate districts are excluded. Printed candidate coverage does not
|
|
1287
|
+
assert independently verified late statewide write-in qualifications.
|
|
1288
|
+
The November results endpoint
|
|
1289
|
+
https://www.sfelections.org/results/20261103w/index.html returned HTTP 403;
|
|
1290
|
+
no November vote totals, report time, winners or geographic results are asserted.
|
|
1291
|
+
The existing 2022 supervisorial boundaries are reused only for ballot district
|
|
1292
|
+
selection, with neutral fills. See `elections/README.md` for the feed contract
|
|
1293
|
+
and the ingestion blocker. Historical snapshots remain separate elections.
|
|
1294
|
+
|
|
1295
|
+
|
|
1296
|
+
The independent California Secretary of State public media index at
|
|
1297
|
+
https://media.sos.ca.gov/media/json-endpoints.csv identifies the November 3,
|
|
1298
|
+
2026 election and links JSON reports. Downloaded November 4 UTC: the reports
|
|
1299
|
+
still carry the November 2, 6:28 p.m. zero-report time. The adapter extracts
|
|
1300
|
+
only exact San Francisco County rows for 40 supported state/federal candidate, proposition and judicial
|
|
1301
|
+
contests. It does not use statewide totals, infer precinct boundaries, or map
|
|
1302
|
+
county totals onto districts. Actual extracted fixtures and their URLs are
|
|
1303
|
+
recorded in `test/fixtures/sos/README.md`. Zero reports stay pending, and report
|
|
1304
|
+
time is preserved verbatim separately from fetch time.
|
|
1305
|
+
|
|
1306
|
+
### November 2026 plain-language ballot descriptions (verified November 3, 2026 Pacific)
|
|
1307
|
+
|
|
1308
|
+
- SF official voter pamphlet: https://media.api.sf.gov/documents/N26_EN_VIP.pdf — printed pp. 52–53 (regional transit), 64 (A), 70–71 (B), 78 (C), 84 (D), 94–95 (E), 100–101 (F), 108 (G), 124–125 (H), 132–133 (I), 144 (J). Summaries use impartial digests, not campaign arguments. PDF viewer page numbers are two higher than printed pages.
|
|
1309
|
+
- California Secretary of State official November 3, 2026 voter guide: https://vig.cdn.sos.ca.gov/2026/general/pdf/complete-vig.pdf, downloaded November 4 UTC; SHA-256 `9509a4e3ac10b09e3c36d8b9b6c5d2f3935af3c7e2473c392b64352811cac1d8`. Official titles/summaries and Legislative Analyst analysis: printed pp. 14 (1), 20–23 (2), 26–27 (3), 30 (4), 34–37 (5), 40–41 (37), 44 (38), 48–51 (39), 54–55 (40), 58–59 (41), 62–63 (42), 66–67 (43), 70–71 (44), 74–77 (45).
|
|
1310
|
+
- `shortTitle`, `summary`, and `summarySource` in the shared election feed preserve official full titles and source page provenance. Descriptions are neutral paraphrases; no endorsements or outcome predictions.
|
|
1311
|
+
|
|
1312
|
+
The November 3 impartiality review checked all 25 descriptions against the official digests and legislative analyses. Clarifications include SF C printed pp. 78–79 (freeze annual increases, not all contributions), F p. 100 (Board objection), E p. 94 (60-day default approval); California 2 pp. 22–23, 38 pp. 44–45, 39 p. 50, 40 pp. 54–55, 41 pp. 58–59, 43 pp. 66–67, 44 pp. 70–71 (operative scope/waivers pp. 153–156), and 45 pp. 75–76. Each feed record carries its revised printed-page reference.
|
|
1313
|
+
|
|
1314
|
+
Report-history points preserve only actual validated source counts and their distinct first observation times. Tests use explicitly synthetic mutations of the official zero-report fixtures; no synthetic counts or history points are in the checked-in ballot seed or deployed as results.
|
|
1315
|
+
|
|
1316
|
+
## November 2026 precinct results and boundaries
|
|
1317
|
+
|
|
1318
|
+
- `data/elections/precincts-<report time>.json`, such as `precincts-2026-11-03-230421.json` (local department clock, `YYYY-MM-DD-HHmmss`), aggregates the San Francisco Department of Elections cast vote record export `CVR_Export_20261103231904.zip` (downloaded November 5, 2026; the department's report time was supplied as 11/3/2026 11:04:21 PM, kept verbatim with no timezone conversion) to per-precinct, per-contest counts in a compact format (`precincts[id].c[contestIndex] = [undervotes, overvotes, ...votes in option order]`, with `contests[]` giving each index's options; schema version 2, about 0.6 MB). Generate it with `scripts/import-cvr-precincts.mjs --zip <export> --report-time "<M/D/YYYY h:mm:ss AM|PM>" --out-dir data/elections`. Each report time keeps its own file, and `data/elections/precincts-index.json` lists them in time order; consumers read `latest`, the newest report time. The export, which is ballot-level, is an ingestion input and is never committed; its SHA-256 is recorded in the file. Counts use each ballot card's current record (`Modified` when adjudicated). Ranked-choice contests count a single rank-1 mark only, matching the department's first-round figures. These are not winners.
|
|
1319
|
+
- Reconciliation: `test/election-precincts.test.mjs` sums the precincts and compares every candidate and option of all 65 contests with the official Election Summary Report 4 (`test/fixtures/sfelections/summary-report-4.json`, a 5 KB extract of the report's option totals made with `scripts/extract-summary-totals.mjs`, with the XML's SHA-256 recorded; 514 of 514 precincts reported). Every total matches exactly. Five precincts have no ballots in the export and are absent from the file.
|
|
1320
|
+
- `data/precincts-2022.json` holds the 514 polygons of DataSF "Election Precincts - Current, Defined 2022" (`d6x4-hefw`, https://data.sfgov.org/resource/d6x4-hefw.geojson, downloaded November 5, 2026), reduced to the precinct ID with coordinates rounded to six decimals. All 514 IDs match the export's precinct manifest exactly.
|
|
1321
|
+
|
|
1254
1322
|
---
|
|
1255
1323
|
|
|
1256
|
-
<!-- Generated from CHANGELOG.md; @kahwee/sf-map-svg 5.
|
|
1324
|
+
<!-- Generated from CHANGELOG.md; @kahwee/sf-map-svg 5.1.1 · local working tree. -->
|
|
1257
1325
|
|
|
1258
1326
|
# Changelog
|
|
1259
1327
|
|
|
@@ -1261,6 +1329,25 @@ User-visible changes are recorded here. Unreleased entries describe changes on `
|
|
|
1261
1329
|
|
|
1262
1330
|
## Unreleased
|
|
1263
1331
|
|
|
1332
|
+
## 5.1.1 — 2026-11-05
|
|
1333
|
+
|
|
1334
|
+
- Reserve precinct report controls and status space during loading to prevent phone layout shifts when multiple reports are available.
|
|
1335
|
+
|
|
1336
|
+
- Isolate district selection, style revisions and cancellable motion in an internal controller while preserving public map behavior. Document interactive state ownership and verify district lifecycle callbacks.
|
|
1337
|
+
|
|
1338
|
+
## 5.1.0 — 2026-11-05
|
|
1339
|
+
|
|
1340
|
+
- Add official November 2026 precinct aggregates (`data/elections/precincts-<report time>.json` with a time-ordered `precincts-index.json`) and the 2022 precinct boundaries (`data/precincts-2022.json`), reconciled with the department's summary report. Only aggregates are committed, never the ballot-level export. Export the boundaries as `precinctMaps` from `@kahwee/sf-map-svg/data` and `@kahwee/sf-map-svg/data/precincts`; results snapshots stay Pages data.
|
|
1341
|
+
- Update Biome to 2.6.3 and the aligned Storybook packages to 10.6.4.
|
|
1342
|
+
- Gate library output replacement on Bun source checking, then emit JavaScript, declarations, and JSON with TypeScript `--noCheck`; install pinned Bun in every build job.
|
|
1343
|
+
- Align Storybook on 10.6.3 and Vitest/browser/coverage tooling on 5.0.5, with compatible dependency updates for current security fixes.
|
|
1344
|
+
- Record identical-output library build benchmarks alongside the earlier build-reuse measurements.
|
|
1345
|
+
- Reuse completed library builds in CI demo, Storybook, coverage, and Pages steps; retain fresh builds for standalone commands and archive packing.
|
|
1346
|
+
- Add a reproducible compilation-phase benchmark that checks emitted-output equivalence.
|
|
1347
|
+
- Use Bun for consumer, Storybook, and website project checks; run them once in the Bun CI job instead of repeating them in the Node matrix.
|
|
1348
|
+
- Add a Pages precinct results page (`precincts.html`) that shades the 514 precincts by any contest in the latest official snapshot, and compact the committed precinct snapshot to about 0.6 MB with a 5 KB reconciliation fixture.
|
|
1349
|
+
- Fix election page checks on 390 px phones and in macOS Chromium, and wait for the scrollbar gutter in popover checks.
|
|
1350
|
+
|
|
1264
1351
|
## 5.0.0 — 2026-10-19
|
|
1265
1352
|
|
|
1266
1353
|
- Breaking: controller `setMode` and `setSource` preserve the camera; remove their `{ resetView }` argument. Call `camera.reset()` or `camera.fit()` explicitly.
|
|
@@ -1630,7 +1717,7 @@ consistent home, and makes animation and subscription ownership predictable.
|
|
|
1630
1717
|
|
|
1631
1718
|
# Published type contracts
|
|
1632
1719
|
|
|
1633
|
-
@kahwee/sf-map-svg 5.
|
|
1720
|
+
@kahwee/sf-map-svg 5.1.1 · local working tree. These declarations are generated by TypeScript. Use package export paths, not the internal filenames below. Imported relative contracts are included for context, not as additional public entry points.
|
|
1634
1721
|
|
|
1635
1722
|
| Public import | Declaration |
|
|
1636
1723
|
| --- | --- |
|
|
@@ -1645,6 +1732,7 @@ consistent home, and makes animation and subscription ownership predictable.
|
|
|
1645
1732
|
| @kahwee/sf-map-svg/data/highways | ./dist/data/highways.d.ts |
|
|
1646
1733
|
| @kahwee/sf-map-svg/data/landmarks | ./dist/data/landmarks.d.ts |
|
|
1647
1734
|
| @kahwee/sf-map-svg/data/lookup | ./dist/data/lookup.d.ts |
|
|
1735
|
+
| @kahwee/sf-map-svg/data/precincts | ./dist/data/precincts.d.ts |
|
|
1648
1736
|
| @kahwee/sf-map-svg/data/realtor | ./dist/data/realtor.d.ts |
|
|
1649
1737
|
| @kahwee/sf-map-svg/data/roads | ./dist/data/roads.d.ts |
|
|
1650
1738
|
| @kahwee/sf-map-svg/data/sf-find | ./dist/data/sf-find.d.ts |
|
|
@@ -1959,6 +2047,11 @@ export interface DistrictProperties {
|
|
|
1959
2047
|
readonly labelPoints: readonly Position[];
|
|
1960
2048
|
readonly displayExtras: Geometry | null;
|
|
1961
2049
|
}
|
|
2050
|
+
export interface PrecinctProperties {
|
|
2051
|
+
/** Four-digit Department of Elections precinct number, such as "1101". */
|
|
2052
|
+
readonly precinct: string;
|
|
2053
|
+
readonly year: 2022;
|
|
2054
|
+
}
|
|
1962
2055
|
export interface Catalog {
|
|
1963
2056
|
readonly schemaVersion: 1;
|
|
1964
2057
|
readonly description: string;
|
|
@@ -2471,6 +2564,7 @@ export { districtMaps } from './districts.js';
|
|
|
2471
2564
|
export { highways } from './highways.js';
|
|
2472
2565
|
export { landmarks } from './landmarks.js';
|
|
2473
2566
|
export { getNeighborhood, neighborhoodCollections, neighborhoodSources } from './lookup.js';
|
|
2567
|
+
export { precinctMaps } from './precincts.js';
|
|
2474
2568
|
export { getRealtorNeighborhood, neighborhoods } from './realtor.js';
|
|
2475
2569
|
export { keyRoads } from './roads.js';
|
|
2476
2570
|
export { bartStations } from './stations.js';
|
|
@@ -2532,6 +2626,13 @@ export declare function getNeighborhood(name: string, { source }?: {
|
|
|
2532
2626
|
}): import("./types.js").Feature<NeighborhoodProperties> | undefined;
|
|
2533
2627
|
```
|
|
2534
2628
|
|
|
2629
|
+
### dist/data/precincts.d.ts
|
|
2630
|
+
|
|
2631
|
+
```ts
|
|
2632
|
+
import type { FeatureCollection, PrecinctProperties } from './types.js';
|
|
2633
|
+
export declare const precinctMaps: Readonly<Record<2022, FeatureCollection<PrecinctProperties>>>;
|
|
2634
|
+
```
|
|
2635
|
+
|
|
2535
2636
|
### dist/data/realtor.d.ts
|
|
2536
2637
|
|
|
2537
2638
|
```ts
|
package/llms.txt
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> Offline San Francisco SVG maps with explicit geographic imports, no runtime dependencies, static rendering, and a browser controller.
|
|
4
4
|
|
|
5
|
-
@kahwee/sf-map-svg 5.
|
|
5
|
+
@kahwee/sf-map-svg 5.1.1 · local working tree. Node >=24.0.0 for server rendering; browsers need a DOM and a JSON-capable bundler.
|
|
6
6
|
|
|
7
7
|
These are working-tree docs. Unreleased changelog entries may describe APIs absent from npm; verify the installed version before copying them.
|
|
8
8
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kahwee/sf-map-svg",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.1.1",
|
|
4
4
|
"description": "Offline SVG maps of San Francisco with district boundaries, parks, landmarks, and BART stations.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/api.js",
|
|
@@ -50,6 +50,10 @@
|
|
|
50
50
|
"types": "./dist/data/lookup.d.ts",
|
|
51
51
|
"import": "./dist/data/lookup.js"
|
|
52
52
|
},
|
|
53
|
+
"./data/precincts": {
|
|
54
|
+
"types": "./dist/data/precincts.d.ts",
|
|
55
|
+
"import": "./dist/data/precincts.js"
|
|
56
|
+
},
|
|
53
57
|
"./data/realtor": {
|
|
54
58
|
"types": "./dist/data/realtor.d.ts",
|
|
55
59
|
"import": "./dist/data/realtor.js"
|
|
@@ -140,22 +144,23 @@
|
|
|
140
144
|
"node": ">=24.0.0"
|
|
141
145
|
},
|
|
142
146
|
"devDependencies": {
|
|
143
|
-
"@biomejs/biome": "2.
|
|
144
|
-
"@storybook/addon-a11y": "10.6.
|
|
145
|
-
"@storybook/addon-docs": "
|
|
146
|
-
"@storybook/addon-vitest": "10.6.
|
|
147
|
-
"@storybook/html-vite": "
|
|
148
|
-
"@
|
|
149
|
-
"@vitest/
|
|
147
|
+
"@biomejs/biome": "2.6.4",
|
|
148
|
+
"@storybook/addon-a11y": "10.6.5",
|
|
149
|
+
"@storybook/addon-docs": "10.6.5",
|
|
150
|
+
"@storybook/addon-vitest": "10.6.5",
|
|
151
|
+
"@storybook/html-vite": "10.6.5",
|
|
152
|
+
"@tanstack/charts": "1.2.1",
|
|
153
|
+
"@vitest/browser-playwright": "5.1.0",
|
|
154
|
+
"@vitest/coverage-v8": "5.1.0",
|
|
150
155
|
"@xmldom/xmldom": "^0.9.12",
|
|
151
|
-
"playwright": "^1.64.
|
|
156
|
+
"playwright": "^1.64.1",
|
|
152
157
|
"polygon-clipping": "^0.15.7",
|
|
153
|
-
"react": "^19.3.
|
|
154
|
-
"react-dom": "^19.3.
|
|
155
|
-
"storybook": "
|
|
158
|
+
"react": "^19.3.1",
|
|
159
|
+
"react-dom": "^19.3.1",
|
|
160
|
+
"storybook": "10.6.5",
|
|
156
161
|
"typescript": "^7.0.2",
|
|
157
|
-
"vite": "^8.3.
|
|
158
|
-
"vitest": "
|
|
162
|
+
"vite": "^8.3.5",
|
|
163
|
+
"vitest": "5.1.0"
|
|
159
164
|
},
|
|
160
165
|
"homepage": "https://kahwee.github.io/sf-map-svg/",
|
|
161
166
|
"bugs": {
|
|
@@ -175,27 +180,27 @@
|
|
|
175
180
|
"scripts": {
|
|
176
181
|
"test": "pnpm build && pnpm test:built",
|
|
177
182
|
"test:built": "node --test",
|
|
178
|
-
"test:stories": "pnpm build &&
|
|
179
|
-
"test:stories:coverage": "pnpm build &&
|
|
183
|
+
"test:stories": "pnpm build && pnpm test:stories:built",
|
|
184
|
+
"test:stories:coverage": "pnpm build && pnpm test:stories:coverage:built",
|
|
180
185
|
"test:visual": "playwright test --config=playwright.visual.config.mjs",
|
|
181
186
|
"test:browsers": "playwright test --config=playwright.browser.config.mjs",
|
|
182
187
|
"test:bun": "pnpm build && bun scripts/smoke-bun.mjs",
|
|
183
188
|
"benchmark:markers": "node scripts/benchmark-markers.mjs",
|
|
184
|
-
"demo": "pnpm build &&
|
|
189
|
+
"demo": "pnpm build && pnpm demo:built",
|
|
185
190
|
"format": "biome check --write .",
|
|
186
191
|
"format:check": "biome format .",
|
|
187
|
-
"check": "pnpm
|
|
192
|
+
"check": "pnpm check:node && pnpm check:types:built",
|
|
188
193
|
"check:docs": "pnpm build && pnpm check:docs:built",
|
|
189
194
|
"check:docs:built": "node scripts/check-docs.mjs && node scripts/build-llm-docs.mjs --check",
|
|
190
195
|
"storybook": "pnpm build && storybook dev -p 6006 --host 127.0.0.1 --no-open",
|
|
191
|
-
"build-storybook": "pnpm build &&
|
|
196
|
+
"build-storybook": "pnpm build && pnpm build-storybook:built",
|
|
192
197
|
"data:catalog": "node scripts/build-data-catalog.mjs",
|
|
193
198
|
"data:check": "node scripts/build-data-catalog.mjs --check",
|
|
194
199
|
"typecheck": "pnpm build && pnpm typecheck:built",
|
|
195
|
-
"typecheck:built": "
|
|
200
|
+
"typecheck:built": "bun --check --tsconfig-override=tsconfig.json",
|
|
196
201
|
"typecheck:website": "pnpm build && pnpm typecheck:website:built",
|
|
197
|
-
"typecheck:website:built": "
|
|
198
|
-
"typecheck:stories": "
|
|
202
|
+
"typecheck:website:built": "bun --check --tsconfig-override=tsconfig.website.json",
|
|
203
|
+
"typecheck:stories": "bun --check --tsconfig-override=tsconfig.stories.json",
|
|
199
204
|
"data:normalize-realtor": "node scripts/normalize-realtor.mjs",
|
|
200
205
|
"data:guide": "node scripts/build-guide-data.mjs",
|
|
201
206
|
"report:guide": "node scripts/report-guide-bundle.mjs",
|
|
@@ -203,11 +208,19 @@
|
|
|
203
208
|
"build": "node scripts/build.mjs",
|
|
204
209
|
"lint": "biome check .",
|
|
205
210
|
"audit": "pnpm audit --audit-level high",
|
|
206
|
-
"build:pages": "pnpm build &&
|
|
211
|
+
"build:pages": "pnpm build && pnpm build:pages:built",
|
|
207
212
|
"test:bundle": "node scripts/report-guide-bundle.mjs --check",
|
|
208
213
|
"test:pages": "node scripts/check-pages.mjs",
|
|
209
214
|
"test:studio": "node visual/studio-loading.browser.mjs",
|
|
210
215
|
"release:notes": "node scripts/release-notes.mjs",
|
|
211
|
-
"docs:llms": "pnpm build && node scripts/build-llm-docs.mjs"
|
|
216
|
+
"docs:llms": "pnpm build && node scripts/build-llm-docs.mjs",
|
|
217
|
+
"check:node": "pnpm peers check && pnpm lint && pnpm build && pnpm check:docs:built && pnpm data:check && pnpm test:built && pnpm test:bundle",
|
|
218
|
+
"check:types:built": "bun run --parallel typecheck:built typecheck:stories typecheck:website:built",
|
|
219
|
+
"demo:built": "node examples/build.mjs",
|
|
220
|
+
"build-storybook:built": "storybook build",
|
|
221
|
+
"test:stories:built": "vitest run --project=storybook",
|
|
222
|
+
"test:stories:coverage:built": "vitest run --project=storybook --coverage",
|
|
223
|
+
"build:pages:built": "node scripts/build-pages.mjs",
|
|
224
|
+
"benchmark:toolchain": "node scripts/benchmark-toolchain.mjs"
|
|
212
225
|
}
|
|
213
226
|
}
|