@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/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.0.0 · local working tree. Node >=24.0.0 for server rendering; browsers need a DOM and a JSON-capable bundler.
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.0.0 · local working tree. -->
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.3 is pinned in `.bun-version`; `pnpm test:bun` 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).
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.0.0 · local working tree. -->
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.0.0 · local working tree. -->
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.0.0 · local working tree. -->
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.0.0 · local working tree. -->
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.0.0 · local working tree. -->
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.0.0 · local working tree. -->
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.0.0 · local working tree. -->
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.0.0 · local working tree. -->
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.0.0 · 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.
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.0.0 · local working tree. Node >=24.0.0 for server rendering; browsers need a DOM and a JSON-capable bundler.
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.0.0",
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.5.15",
144
- "@storybook/addon-a11y": "10.6.1",
145
- "@storybook/addon-docs": "^10.6.1",
146
- "@storybook/addon-vitest": "10.6.1",
147
- "@storybook/html-vite": "^10.6.1",
148
- "@vitest/browser-playwright": "^5.0.3",
149
- "@vitest/coverage-v8": "5.0.3",
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.0",
156
+ "playwright": "^1.64.1",
152
157
  "polygon-clipping": "^0.15.7",
153
- "react": "^19.3.0",
154
- "react-dom": "^19.3.0",
155
- "storybook": "^10.6.1",
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.4",
158
- "vitest": "^5.0.3"
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 && vitest run --project=storybook",
179
- "test:stories:coverage": "pnpm build && vitest run --project=storybook --coverage",
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 && node examples/build.mjs",
189
+ "demo": "pnpm build && pnpm demo:built",
185
190
  "format": "biome check --write .",
186
191
  "format:check": "biome format .",
187
- "check": "pnpm peers check && pnpm lint && pnpm build && pnpm check:docs:built && pnpm data:check && pnpm typecheck:built && pnpm typecheck:stories && pnpm typecheck:website:built && pnpm test:built && pnpm test:bundle",
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 && storybook 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": "tsc -p tsconfig.json",
200
+ "typecheck:built": "bun --check --tsconfig-override=tsconfig.json",
196
201
  "typecheck:website": "pnpm build && pnpm typecheck:website:built",
197
- "typecheck:website:built": "tsc -p tsconfig.website.json",
198
- "typecheck:stories": "tsc -p tsconfig.stories.json",
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 && node scripts/build-pages.mjs",
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
  }