@johnmorrisdotca/kyogijo-stadiums 0.45.2 → 0.46.0

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.
Files changed (326) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/NOTICE.md +9 -2
  3. package/dist/annotate.d.ts +1 -1
  4. package/dist/annotate.js +1 -1
  5. package/dist/areas.d.ts +4 -0
  6. package/dist/areas.js +33 -1
  7. package/dist/arenas-entry.d.ts +1 -0
  8. package/dist/arenas-entry.js +2 -0
  9. package/dist/athletics/describe.js +1 -1
  10. package/dist/athletics-entry.d.ts +1 -0
  11. package/dist/athletics-entry.js +2 -0
  12. package/dist/atlas-entry.d.ts +1 -0
  13. package/dist/atlas-entry.js +2 -0
  14. package/dist/ballpark.d.ts +1 -1
  15. package/dist/ballpark.js +1 -1
  16. package/dist/budo/describe.js +1 -1
  17. package/dist/budo-entry.d.ts +1 -0
  18. package/dist/budo-entry.js +2 -0
  19. package/dist/canvas-entry.d.ts +1 -0
  20. package/dist/canvas-entry.js +2 -0
  21. package/dist/charts-entry.d.ts +1 -0
  22. package/dist/charts-entry.js +2 -0
  23. package/dist/charts.athletics.js +1 -1
  24. package/dist/charts.baseball.js +1 -1
  25. package/dist/charts.curling.heat.js +1 -1
  26. package/dist/charts.curling.js +1 -1
  27. package/dist/charts.d.ts +1 -1
  28. package/dist/charts.js +1 -1
  29. package/dist/charts.network.js +1 -1
  30. package/dist/charts.pool.js +1 -1
  31. package/dist/charts.skating.js +1 -1
  32. package/dist/charts.soccer.js +1 -1
  33. package/dist/cityctx-entry.d.ts +1 -0
  34. package/dist/cityctx-entry.js +2 -0
  35. package/dist/cityctx.belmont-park.data.d.ts +3 -0
  36. package/dist/cityctx.belmont-park.data.js +1802 -0
  37. package/dist/cityctx.data.d.ts +10 -1
  38. package/dist/cityctx.data.js +11 -2
  39. package/dist/cityctx.js +19 -1
  40. package/dist/cityctx.meadowlands.data.d.ts +3 -0
  41. package/dist/cityctx.meadowlands.data.js +820 -0
  42. package/dist/cityctx.montreal-city.data.d.ts +3 -0
  43. package/dist/cityctx.montreal-city.data.js +2899 -0
  44. package/dist/cityctx.montreal-downtown.data.d.ts +3 -0
  45. package/dist/cityctx.montreal-downtown.data.js +3004 -0
  46. package/dist/cityctx.montreal-olympic.data.d.ts +3 -0
  47. package/dist/cityctx.montreal-olympic.data.js +2562 -0
  48. package/dist/cityctx.nyc-bronx.data.d.ts +3 -0
  49. package/dist/cityctx.nyc-bronx.data.js +1671 -0
  50. package/dist/cityctx.nyc-brooklyn.data.d.ts +3 -0
  51. package/dist/cityctx.nyc-brooklyn.data.js +3485 -0
  52. package/dist/cityctx.nyc-flushing.data.d.ts +3 -0
  53. package/dist/cityctx.nyc-flushing.data.js +865 -0
  54. package/dist/cityctx.nyc-midtown.data.d.ts +3 -0
  55. package/dist/cityctx.nyc-midtown.data.js +2438 -0
  56. package/dist/crowd.d.ts +22 -2
  57. package/dist/d3-entry.d.ts +1 -0
  58. package/dist/d3-entry.js +2 -0
  59. package/dist/district-entry.d.ts +2 -0
  60. package/dist/district-entry.js +4 -0
  61. package/dist/district-lean-entry.js +1 -1
  62. package/dist/district.js +2 -2
  63. package/dist/draw.js +3 -3
  64. package/dist/element-entry.d.ts +1 -0
  65. package/dist/element-entry.js +2 -0
  66. package/dist/eras-entry.d.ts +1 -0
  67. package/dist/eras-entry.js +2 -0
  68. package/dist/events.js +1 -1
  69. package/dist/flythrough-entry.d.ts +1 -0
  70. package/dist/flythrough-entry.js +2 -0
  71. package/dist/flythrough.dom.d.ts +2 -0
  72. package/dist/flythrough.dom.js +2 -2
  73. package/dist/frames-entry.d.ts +1 -0
  74. package/dist/frames-entry.js +2 -0
  75. package/dist/full.d.ts +1 -0
  76. package/dist/full.js +3 -1
  77. package/dist/geojson-entry.d.ts +1 -0
  78. package/dist/geojson-entry.js +2 -0
  79. package/dist/geometry-entry.d.ts +1 -0
  80. package/dist/geometry-entry.js +2 -0
  81. package/dist/grounds-entry.d.ts +1 -0
  82. package/dist/grounds-entry.js +2 -0
  83. package/dist/heat.js +1 -1
  84. package/dist/heat.zones.d.ts +1 -1
  85. package/dist/heat.zones.js +1 -1
  86. package/dist/index.d.ts +3 -2
  87. package/dist/index.js +3 -1
  88. package/dist/judging-entry.d.ts +1 -0
  89. package/dist/judging-entry.js +2 -0
  90. package/dist/judging.board.js +1 -1
  91. package/dist/judging.draw.js +1 -1
  92. package/dist/judging.js +1 -1
  93. package/dist/judging.text.js +1 -1
  94. package/dist/layers.env.d.ts +1 -1
  95. package/dist/layers.env.js +1 -1
  96. package/dist/layers.js +1 -1
  97. package/dist/layout.js +1 -1
  98. package/dist/layouts-entry.d.ts +1 -0
  99. package/dist/layouts-entry.js +2 -0
  100. package/dist/leagues-entry.d.ts +1 -0
  101. package/dist/leagues-entry.js +2 -0
  102. package/dist/mount-entry.d.ts +1 -0
  103. package/dist/mount-entry.js +2 -0
  104. package/dist/multi-entry.d.ts +1 -0
  105. package/dist/multi-entry.js +2 -0
  106. package/dist/multi.draw.js +1 -1
  107. package/dist/multi.js +1 -1
  108. package/dist/osm-entry.d.ts +1 -0
  109. package/dist/osm-entry.js +2 -0
  110. package/dist/outside.d.ts +2 -1
  111. package/dist/outside.js +7 -6
  112. package/dist/parks-entry.d.ts +1 -0
  113. package/dist/parks-entry.js +2 -0
  114. package/dist/plateau-entry.d.ts +1 -0
  115. package/dist/plateau-entry.js +2 -0
  116. package/dist/plot-entry.d.ts +1 -0
  117. package/dist/plot-entry.js +2 -0
  118. package/dist/png-entry.d.ts +1 -0
  119. package/dist/png-entry.js +2 -0
  120. package/dist/pool.replay.js +1 -1
  121. package/dist/pool.words.js +1 -1
  122. package/dist/ranges.js +1 -1
  123. package/dist/react-entry.d.ts +1 -0
  124. package/dist/react-entry.js +2 -0
  125. package/dist/replay-entry.d.ts +1 -0
  126. package/dist/replay-entry.js +2 -0
  127. package/dist/replay.d.ts +1 -1
  128. package/dist/replay.dom.js +1 -1
  129. package/dist/replay.js +1 -1
  130. package/dist/rules.js +1 -1
  131. package/dist/scene-entry.d.ts +1 -0
  132. package/dist/scene-entry.js +2 -0
  133. package/dist/situation.draw.js +1 -1
  134. package/dist/situation.js +1 -1
  135. package/dist/skating/describe.js +1 -1
  136. package/dist/skating-entry.d.ts +1 -0
  137. package/dist/skating-entry.js +2 -0
  138. package/dist/stadiums-entry.d.ts +1 -0
  139. package/dist/stadiums-entry.js +2 -0
  140. package/dist/stadiums.d.ts +35 -4
  141. package/dist/stadiums.data.js +60 -0
  142. package/dist/stadiums.js +31 -5
  143. package/dist/stadiums.osm.data.js +224 -2
  144. package/dist/strings.core.d.ts +1105 -0
  145. package/dist/strings.core.js +55 -0
  146. package/dist/strings.d.ts +4 -1084
  147. package/dist/strings.en.d.ts +2 -0
  148. package/dist/strings.en.js +537 -0
  149. package/dist/strings.ja.d.ts +2 -0
  150. package/dist/strings.ja.js +562 -0
  151. package/dist/strings.js +5 -1100
  152. package/dist/surfaces/venue.js +1 -1
  153. package/dist/target.js +1 -1
  154. package/dist/team.common.js +1 -1
  155. package/dist/team.formation.js +1 -1
  156. package/dist/team.lineup.js +1 -1
  157. package/dist/team.motion.js +1 -1
  158. package/dist/team.network.js +1 -1
  159. package/dist/team.shape.js +1 -1
  160. package/dist/turn-entry.d.ts +1 -0
  161. package/dist/turn-entry.js +2 -0
  162. package/dist/turn.kit.d.ts +14 -1
  163. package/dist/turn.kit.js +19 -0
  164. package/dist/turn.model.d.ts +1 -1
  165. package/dist/turn.model.js +1 -1
  166. package/dist/turn.style.js +16 -3
  167. package/dist/uprights.js +1 -1
  168. package/dist/venue-data-entry.d.ts +2 -0
  169. package/dist/venue-data-entry.js +5 -1
  170. package/dist/venue-data.d.ts +1 -1
  171. package/dist/venue-data.js +5 -2
  172. package/dist/venue.js +3 -1
  173. package/dist/venue.real.d.ts +45 -1
  174. package/dist/venue.real.js +225 -15
  175. package/dist/venues/amerant-bank-arena.data.d.ts +2 -0
  176. package/dist/venues/amerant-bank-arena.data.js +9 -0
  177. package/dist/venues/amerant-bank-arena.osm.data.d.ts +2 -0
  178. package/dist/venues/amerant-bank-arena.osm.data.js +47 -0
  179. package/dist/venues/american-airlines-center.data.d.ts +2 -0
  180. package/dist/venues/american-airlines-center.data.js +9 -0
  181. package/dist/venues/american-airlines-center.osm.data.d.ts +2 -0
  182. package/dist/venues/american-airlines-center.osm.data.js +57 -0
  183. package/dist/venues/ball-arena.data.d.ts +2 -0
  184. package/dist/venues/ball-arena.data.js +9 -0
  185. package/dist/venues/ball-arena.osm.data.d.ts +2 -0
  186. package/dist/venues/ball-arena.osm.data.js +63 -0
  187. package/dist/venues/bell-centre.data.d.ts +2 -0
  188. package/dist/venues/bell-centre.data.js +9 -0
  189. package/dist/venues/bell-centre.osm.data.d.ts +2 -0
  190. package/dist/venues/bell-centre.osm.data.js +24 -0
  191. package/dist/venues/benchmark-international-arena.data.d.ts +2 -0
  192. package/dist/venues/benchmark-international-arena.data.js +9 -0
  193. package/dist/venues/benchmark-international-arena.osm.data.d.ts +2 -0
  194. package/dist/venues/benchmark-international-arena.osm.data.js +57 -0
  195. package/dist/venues/bridgestone-arena.data.d.ts +2 -0
  196. package/dist/venues/bridgestone-arena.data.js +9 -0
  197. package/dist/venues/bridgestone-arena.osm.data.d.ts +2 -0
  198. package/dist/venues/bridgestone-arena.osm.data.js +43 -0
  199. package/dist/venues/canada-life-centre.data.d.ts +2 -0
  200. package/dist/venues/canada-life-centre.data.js +9 -0
  201. package/dist/venues/canada-life-centre.osm.data.d.ts +2 -0
  202. package/dist/venues/canada-life-centre.osm.data.js +35 -0
  203. package/dist/venues/canadian-tire-centre.data.d.ts +2 -0
  204. package/dist/venues/canadian-tire-centre.data.js +9 -0
  205. package/dist/venues/canadian-tire-centre.osm.data.d.ts +2 -0
  206. package/dist/venues/canadian-tire-centre.osm.data.js +45 -0
  207. package/dist/venues/capital-one-arena.data.d.ts +2 -0
  208. package/dist/venues/capital-one-arena.data.js +9 -0
  209. package/dist/venues/capital-one-arena.osm.data.d.ts +2 -0
  210. package/dist/venues/capital-one-arena.osm.data.js +22 -0
  211. package/dist/venues/climate-pledge-arena.data.d.ts +2 -0
  212. package/dist/venues/climate-pledge-arena.data.js +9 -0
  213. package/dist/venues/climate-pledge-arena.osm.data.d.ts +2 -0
  214. package/dist/venues/climate-pledge-arena.osm.data.js +32 -0
  215. package/dist/venues/crypto-com-arena.data.d.ts +2 -0
  216. package/dist/venues/crypto-com-arena.data.js +9 -0
  217. package/dist/venues/crypto-com-arena.osm.data.d.ts +2 -0
  218. package/dist/venues/crypto-com-arena.osm.data.js +64 -0
  219. package/dist/venues/delta-center.data.d.ts +2 -0
  220. package/dist/venues/delta-center.data.js +9 -0
  221. package/dist/venues/delta-center.osm.data.d.ts +2 -0
  222. package/dist/venues/delta-center.osm.data.js +40 -0
  223. package/dist/venues/enterprise-center.data.d.ts +2 -0
  224. package/dist/venues/enterprise-center.data.js +9 -0
  225. package/dist/venues/enterprise-center.osm.data.d.ts +2 -0
  226. package/dist/venues/enterprise-center.osm.data.js +35 -0
  227. package/dist/venues/grand-casino-arena.data.d.ts +2 -0
  228. package/dist/venues/grand-casino-arena.data.js +9 -0
  229. package/dist/venues/grand-casino-arena.osm.data.d.ts +2 -0
  230. package/dist/venues/grand-casino-arena.osm.data.js +37 -0
  231. package/dist/venues/honda-center.data.d.ts +2 -0
  232. package/dist/venues/honda-center.data.js +9 -0
  233. package/dist/venues/honda-center.osm.data.d.ts +2 -0
  234. package/dist/venues/honda-center.osm.data.js +46 -0
  235. package/dist/venues/keybank-center.data.d.ts +2 -0
  236. package/dist/venues/keybank-center.data.js +9 -0
  237. package/dist/venues/keybank-center.osm.data.d.ts +2 -0
  238. package/dist/venues/keybank-center.osm.data.js +34 -0
  239. package/dist/venues/lenovo-center.data.d.ts +2 -0
  240. package/dist/venues/lenovo-center.data.js +9 -0
  241. package/dist/venues/lenovo-center.osm.data.d.ts +2 -0
  242. package/dist/venues/lenovo-center.osm.data.js +51 -0
  243. package/dist/venues/little-caesars-arena.data.d.ts +2 -0
  244. package/dist/venues/little-caesars-arena.data.js +9 -0
  245. package/dist/venues/little-caesars-arena.osm.data.d.ts +2 -0
  246. package/dist/venues/little-caesars-arena.osm.data.js +64 -0
  247. package/dist/venues/madison-square-garden.data.d.ts +2 -0
  248. package/dist/venues/madison-square-garden.data.js +9 -0
  249. package/dist/venues/madison-square-garden.osm.data.d.ts +2 -0
  250. package/dist/venues/madison-square-garden.osm.data.js +47 -0
  251. package/dist/venues/nationwide-arena.data.d.ts +2 -0
  252. package/dist/venues/nationwide-arena.data.js +9 -0
  253. package/dist/venues/nationwide-arena.osm.data.d.ts +2 -0
  254. package/dist/venues/nationwide-arena.osm.data.js +50 -0
  255. package/dist/venues/ppg-paints-arena.data.d.ts +2 -0
  256. package/dist/venues/ppg-paints-arena.data.js +9 -0
  257. package/dist/venues/ppg-paints-arena.osm.data.d.ts +2 -0
  258. package/dist/venues/ppg-paints-arena.osm.data.js +31 -0
  259. package/dist/venues/prudential-center.data.d.ts +2 -0
  260. package/dist/venues/prudential-center.data.js +9 -0
  261. package/dist/venues/prudential-center.osm.data.d.ts +2 -0
  262. package/dist/venues/prudential-center.osm.data.js +41 -0
  263. package/dist/venues/rogers-arena.data.d.ts +2 -0
  264. package/dist/venues/rogers-arena.data.js +10 -0
  265. package/dist/venues/rogers-arena.osm.data.d.ts +2 -0
  266. package/dist/venues/rogers-arena.osm.data.js +27 -0
  267. package/dist/venues/rogers-place.data.d.ts +2 -0
  268. package/dist/venues/rogers-place.data.js +9 -0
  269. package/dist/venues/rogers-place.osm.data.d.ts +2 -0
  270. package/dist/venues/rogers-place.osm.data.js +40 -0
  271. package/dist/venues/sap-center.data.d.ts +2 -0
  272. package/dist/venues/sap-center.data.js +9 -0
  273. package/dist/venues/sap-center.osm.data.d.ts +2 -0
  274. package/dist/venues/sap-center.osm.data.js +54 -0
  275. package/dist/venues/scotiabank-arena.data.d.ts +2 -0
  276. package/dist/venues/scotiabank-arena.data.js +9 -0
  277. package/dist/venues/scotiabank-arena.osm.data.d.ts +2 -0
  278. package/dist/venues/scotiabank-arena.osm.data.js +45 -0
  279. package/dist/venues/scotiabank-saddledome.data.d.ts +2 -0
  280. package/dist/venues/scotiabank-saddledome.data.js +9 -0
  281. package/dist/venues/scotiabank-saddledome.osm.data.d.ts +2 -0
  282. package/dist/venues/scotiabank-saddledome.osm.data.js +46 -0
  283. package/dist/venues/t-mobile-arena.data.d.ts +2 -0
  284. package/dist/venues/t-mobile-arena.data.js +9 -0
  285. package/dist/venues/t-mobile-arena.osm.data.d.ts +2 -0
  286. package/dist/venues/t-mobile-arena.osm.data.js +50 -0
  287. package/dist/venues/td-garden.data.d.ts +2 -0
  288. package/dist/venues/td-garden.data.js +9 -0
  289. package/dist/venues/td-garden.osm.data.d.ts +2 -0
  290. package/dist/venues/td-garden.osm.data.js +24 -0
  291. package/dist/venues/ubs-arena.data.d.ts +2 -0
  292. package/dist/venues/ubs-arena.data.js +9 -0
  293. package/dist/venues/ubs-arena.osm.data.d.ts +2 -0
  294. package/dist/venues/ubs-arena.osm.data.js +33 -0
  295. package/dist/venues/united-center.data.d.ts +2 -0
  296. package/dist/venues/united-center.data.js +9 -0
  297. package/dist/venues/united-center.osm.data.d.ts +2 -0
  298. package/dist/venues/united-center.osm.data.js +56 -0
  299. package/dist/venues/xfinity-mobile-arena.data.d.ts +2 -0
  300. package/dist/venues/xfinity-mobile-arena.data.js +9 -0
  301. package/dist/venues/xfinity-mobile-arena.osm.data.d.ts +2 -0
  302. package/dist/venues/xfinity-mobile-arena.osm.data.js +47 -0
  303. package/dist/venues-entry.d.ts +1 -0
  304. package/dist/venues-entry.js +2 -0
  305. package/dist/venues.all.d.ts +1 -0
  306. package/dist/venues.all.js +6 -0
  307. package/dist/venues.d.ts +18 -6
  308. package/dist/venues.data.js +1 -1
  309. package/dist/venues.index.d.ts +8 -0
  310. package/dist/venues.index.js +34 -0
  311. package/dist/venues.js +45 -8
  312. package/dist/venues.osm.data.d.ts +0 -2
  313. package/dist/venues.osm.data.js +0 -2
  314. package/dist/version.d.ts +1 -1
  315. package/dist/version.js +1 -1
  316. package/dist/walk/vancouver.data.d.ts +2 -0
  317. package/dist/walk/vancouver.data.js +1291 -0
  318. package/dist/walk.d.ts +24 -1
  319. package/dist/walk.data.d.ts +2 -2
  320. package/dist/walk.data.js +13 -1293
  321. package/dist/walk.full.d.ts +1 -0
  322. package/dist/walk.full.js +5 -0
  323. package/dist/walk.index.d.ts +7 -0
  324. package/dist/walk.index.js +3 -0
  325. package/dist/walk.js +69 -7
  326. package/package.json +7 -2
package/CHANGELOG.md CHANGED
@@ -7,6 +7,77 @@ All notable changes to this project are written here. The format follows
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.46.0] - 2026-10-30
11
+
12
+ ### Added
13
+
14
+ - **Five stadiums and nine areas of surroundings on the east coast (SPX-654, SPX-653).** Each stadium is the building OpenStreetMap maps, the field lying as the map or the outline says, and a bowl of the seats its article gives ([the east coast](./docs/stadiums.md#the-east-coast)): **Yankee Stadium** (46,537 seats, home plate facing 75.6 degrees from the mapped infield), **Citi Field** (41,922, 14.5 degrees from the mapped grass fitted to the fence), **MetLife Stadium** (82,500 for the NFL's field and 80,663 for a soccer pitch, lying along 166.5 degrees as the mapped pitch does, with no roof, as its article says), **Barclays Center**, the first hall of the basketball court (`sport: "nba"`, 17,732 seats, the court along the building's long axis, an inference the drawing says) and **the Olympic Stadium of Montreal** (49,757 seats for baseball, a fixed roof drawn as a low lens, and **the Montreal Tower**, 165 metres, inclined at 45 degrees, leaning over the bowl in 3D from a broad foot to the observatory over the bowl, with slits, a plinth and cables to the roof: its height, its top (the observatory) and its foot (its funicular line) are OpenStreetMap's, the curve and widths ours). Madison Square Garden, UBS Arena and the Bell Centre were already real venues and now have surroundings. Each stadium adds 1.7 to 3.4 KB of data (0.9 to 1.5 KB gzipped).
15
+ - **Their surroundings, one file each, read only when the venue is shown** ([New York and Montreal](./docs/district.md#new-york-and-montreal)): Midtown (round Madison Square Garden), the Bronx, Flushing Meadows, Brooklyn, the Meadowlands, Belmont Park, downtown Montreal, Olympic Park and the city between Montreal's two venues, 36 to 129 KB each as data (14 to 42 KB gzipped). Outlines, streets, water, parks and trees are OpenStreetMap's (ODbL 1.0); New York's heights are the roof heights of the City of New York's Building Footprints (NYC Open Data, read on 2026-10-30; the City's Open Data Law asks that the source and the version be named and changes said, and the City gives no warranty), which give a height to 94 to 99 buildings in a hundred. More than two of New York's venues in one choice take no surroundings (they lie tens of kilometres apart). Four presets on the district page: New York Midtown, New York's six venues at their real distances, Montreal's Olympic Stadium and its tower, and the Bell Centre with the Olympic Stadium.
16
+ - `StadiumConfigId` has `nba`; a stadium kind `park` can have a `fixed` roof (drawn as the dome's lens) and a `tower`; `RealShell.tower`, `towerPlanes`, `MOST_DETAIL_AREAS`, `CITYCTX_DETAIL`. The generators read a later day's OpenStreetMap file beside the earlier days' (`pnpm stadiums:fetch <date>` carries the earlier Wikidata and Wikipedia files forward; `pnpm cityctx` reads each file from the newest day that has it, and `minArea` and `exclude` in `scripts/cityctx.data.json` keep a dense area small and a building a venue draws itself out of the context).
17
+ - **Roofs are cut away from above and whole from the street (SPX-695).** A roof of a real venue now fades by how high the eye is (`Plane.cut`): from straight above it is cut away to a ghost so the bowl shows, whole at the main camera and below, and whole again at a street's eye whatever side it is on. Before, a roof was as solid from overhead as from the side and gave way only by side.
18
+ - **Lumen Field's canopies are arched and the stadium has its tower (SPX-696).** OpenStreetMap's `roof:shape=round` for both canopies is read (`shape`) and drawn as a convex arc in three pieces across; the canopies are a firmer white and the walls under them rise to the canopy's back edge, so the outside of each roof is one face to the crest. A 13-storey tower stands at the open north end with its vertical scoreboard on the face towards the field (`endTower` in the stadium's data: the storeys are the article's, the size and the place ours).
19
+ - **T-Mobile Park's roof runs on rails and its facade is a brick tone (SPX-696).** A girder along the north and the south side at the roof's lowest height on four columns each, stays when the roof is open; the walls are a brick tone (the brief's: the article does not say it).
20
+ - **The American Airlines Center has a barrel-vaulted roof (SPX-695).** The article says its roof looks like a Quonset hut; the `barrel` kind of roof is a round arch over the rink's short axis (`barrelAt`, `BARREL_RISE`), and the venue's `roof.kind` is `barrel`, documented. Every other arena keeps the lid, marked ours.
21
+ - **Cost.** The package grows by 13.1 KB (3.8 KB gzipped) of script and data in the files these changes touch (the roof builder 8.4 KB, the tower, rails and brick, the cutaway, the barrel) and the demo by 1.2 KB of style (`check-pill.css`, 0.6 KB gzipped); no dependency is added. In the district of Seattle's three venues the 3D view holds 170 more elements (every other ray of a fine cut for the canopies, and a column of the rails two strips crossed, are what keep it inside the page's budget of 8,400), and the bundle budgets hold.
22
+ - Tests: `src/roof.test.ts` (the cutaway; every real venue and stadium, with the roof on and off, at low, auto and high detail, every roof plane cut away from above and finite); Lumen Field's arcs, wall heights and tower, T-Mobile Park's rails and facade; the barrel.
23
+ - **A Roof pill on every demo page with a 3D view of a venue, kept in the address (SPX-695).** The stadiums, district, halls and fly-through pages had a checkbox or none; each now has a pill in the demo's control style (48 px, pressed when on, light and dark, wrapping on a phone), under the one name `roof`: off until asked where the reader looks at the field (venues, home, stadiums, halls: `roof=1`), on until taken off among streets and in flight (district, fly-through: `roof=0`). The venues page and the home page's featured arena already had their Roof chip. The checkbox of each page that had one (`label.check`) is drawn as that pill, from the one file `demo/check-pill.css`; it is still a checkbox for a keyboard, a screen reader and a test.
24
+ - **The roof and the walls are two choices on the stadiums and district pages.** Roof and Walls are separate pills (`roof`, `walls` in the address), so a roof can be taken off with the walls standing, and a roof asked for on the stadiums page brings the walls it stands on (which can then be taken off). An older `roof=1` with no `walls` is the walls and the roof, as it was.
25
+ - `FlythroughOptions.roof` (true when left out): `false` keeps the roof off for the whole flight with the walls standing; the demo's page has the pill and `roof=0`.
26
+ - Tests: `e2e/roof.demo.mjs` (every page's pill is a pill and is kept in, and read from, the address).
27
+
28
+ - A page listing the thirty-two NHL arenas: the roof each draws, what open sources say of its shape, and the one photo each still needs (`docs/roof-photos-needed.md`).
29
+
30
+ ### Fixed
31
+
32
+ - The stadiums page's "Roof open (3D)" label read "none, open to the air": two words of its table shared the key `open`.
33
+
34
+ ### Changed
35
+
36
+ - An open-air stadium of the stadium kind (`roof.kind: "open"`) is drawn with no roof in 3D; before, every stadium of that kind had a lid.
37
+
38
+ ## [0.45.3] - 2026-10-30
39
+
40
+ ### Changed
41
+
42
+ - **A district page of the demo loads 158 to 243 KB less script and data, and the crowd outside, the words and the venues are read when they are shown (SPX-795, SPX-797).** Three tables that every district page carried, whatever it showed, are files read with a dynamic `import()` by the lean district (`district-lean`), as the venues' records were in 0.45.1:
43
+ - **The walkable ground of the crowd outside** (`walk.data`, 88 KB, 24.5 KB gzipped, Vancouver's alone) is a file for each district (`walk/vancouver.data.js`, 83 KB: written to whole quarter-metres, it is a little smaller than the table was) and `walk.index.ts` lists the districts with their venues. `await loadOutside(venues)`, from `district-lean` and `venue-data`, reads the file of the district a venue stands in, and the outline of each arena of it (the crowd keeps out of the buildings of venues that are not shown too); it reads nothing for venues no mask names. `hasOutside`, `OUTSIDE_VENUES`, `walkIdFor` and the plan itself need no data. `outsideCrowd(plan)` is synchronous and unchanged on the `district` entry, which holds every district's data (`walk.full.ts`); on the lean district it throws, saying so, where it is asked before `loadOutside`. The demo calls `loadOutside` for a choice with a crowd to show, so the pages of Seattle, Tokyo and the Kodokan never fetch the file.
44
+ - **The words** (`strings.js`, 156 KB, 43.5 KB gzipped) are a file for each language: `strings.en.js` (66 KB, 19 gzipped) and `strings.ja.js` (87 KB, 25 gzipped), with `strings.core.ts` holding the types, `fill`, the table and `loadStrings`. `await loadStrings(language)` reads a language (once, the same promise after) and the lean district draws in it; a language not read throws, naming the call. An English page does not read the Japanese, a Japanese page does not read the English, and choosing the other language in the middle of a session reads it then. `KYOGIJO_STRINGS` is synchronous with both languages on every other entry, as before: `strings.ts` imports the two files, each of which holds its language when it is read. The Japanese is moved and not changed (the table's JSON is the same character for character).
45
+ - **The real venues of the NHL's arenas** (`venues.data` 25 KB and `venues.osm.data` 54 KB, 14 KB gzipped together) are two files for each venue (`venues/<key>.data.js`, the facts, and `venues/<key>.osm.data.js`, what OpenStreetMap gave: the licences stay in files apart), about 1 and 1.5 KB each, read by `loadVenueDataFor` with the arena's record, and `venues.index.ts` lists the keys. `VENUES` is the table of the venues held: all 32 on every entry that had them, those read on the lean district, and `venueById` throws for a venue not read yet instead of drawing without it. `VENUES` is no longer frozen (its venues are).
46
+ - **Nothing changes in what is drawn.** `src/venue-data.test.ts` draws every preset in 2D and 3D, in English and Japanese, with surroundings and crowd, through the lean district and the `district` entry, and the characters are the same; the crowd outside is the same people to the last bit; and screenshots of the demo's district page before and after (Vancouver with a crowd of 25, 50 and 75 percent in 2D and 3D, in both languages; Seattle; Tokyo; the Kodokan; a desk and a phone window) are the same pixel for pixel.
47
+ - **The entries that had them have them still**, as 0.45.1 did: `src/venue-data.budget.test.js` holds each entry to the venues, the words and the walkable ground it had, and the lean district, `venue-data` and `areas` to none of them in their import graph. The package is 144 files and 99 KB bigger unpacked (1,401 to 1,545 files, 6,982 to 7,083 KB; packed 1,889 to 1,926 KB): the tables stay, and each record is a file again.
48
+
49
+ ### Added
50
+
51
+ - `loadOutside(venues)` and `loadStrings(language)` on `district-lean` and `venue-data`; `loadWalk`, `registerWalk`, `loadVenue`, `registerVenues`, `hasStrings` and `provideStrings` in the modules that hold the tables (not entry exports).
52
+ - Tests: the lean district holds no walkable ground, words or venue until they are read, says which call reads them, reads each once and reads nothing for venues no mask names; the import graph; every entry's tables; `e2e/bundles.demo.mjs` checks the network log of every preset (the one language's words, the venue's two files, the walkable ground for Vancouver's presets alone, and no table of every venue) and of a Japanese page, of a language chosen in the middle of the session, and of choosing venues with and without a crowd.
53
+
54
+ ### Measured
55
+
56
+ Chromium, a desk window, the demo's pages built from 0.45.2 and from this commit and measured beside each other (`node scripts/bundle-report.mjs --base`), script and data fetched, raw KB (gzipped KB), from the network log. The district pages are opened in 3D from the broadcast viewpoint, as `scripts/bundle-lib.mjs` has them; `bundle-budget.json` is lowered to match for each of them.
57
+
58
+ | Page | Before | After | Saved |
59
+ |---|---|---|---|
60
+ | home | 5,185.4 (1,583.1) | 5,193.7 (1,586.8) | -8.3 (-3.7) |
61
+ | venues | 2,985.5 (849.8) | 2,992.9 (853.1) | -7.4 (-3.3) |
62
+ | district: BC Place and Rogers Arena | 2,513.2 (772.2) | 2,355.3 (738.2) | 157.9 (34.0) |
63
+ | district: Rogers Arena alone | 2,512.3 (771.8) | 2,354.4 (737.8) | 157.9 (34.0) |
64
+ | district: BC Place (soccer) and Rogers Arena | 2,513.2 (772.2) | 2,355.3 (738.2) | 157.9 (34.0) |
65
+ | district: Seattle Center | 2,546.0 (778.9) | 2,305.4 (720.7) | 240.6 (58.2) |
66
+ | district: SoDo | 2,515.3 (773.1) | 2,272.8 (714.0) | 242.5 (59.1) |
67
+ | district: Seattle, three venues | 2,630.7 (795.8) | 2,390.2 (737.6) | 240.5 (58.2) |
68
+ | district: Tokyo Dome City | 2,474.7 (763.1) | 2,232.1 (704.0) | 242.6 (59.1) |
69
+ | district: Tokyo Dome City and the Kodokan | 2,474.7 (763.1) | 2,232.1 (704.0) | 242.6 (59.1) |
70
+ | district: the Kodokan | 2,416.0 (747.5) | 2,173.4 (688.4) | 242.6 (59.1) |
71
+ | stadiums | 2,973.1 (845.5) | 2,980.7 (848.8) | -7.6 (-3.3) |
72
+ | halls | 3,069.6 (875.4) | 3,076.9 (878.6) | -7.3 (-3.2) |
73
+ | boards | 3,081.0 (865.0) | 3,088.4 (868.2) | -7.4 (-3.2) |
74
+ | flythrough | 3,399.0 (987.8) | 3,406.4 (991.1) | -7.4 (-3.3) |
75
+ | judging | 2,974.1 (848.6) | 2,981.4 (851.9) | -7.3 (-3.3) |
76
+
77
+ - **The pages that need everything cost 7 to 8 KB more (3 KB gzipped, a third of a percent)**: the words are two files that gzip a little worse apart, and the index and the loader are new. Their budget is unchanged. A district page of one venue saves 158 KB (Vancouver, which still reads its walkable ground: 24 KB gzipped) to 243 KB.
78
+ - What each page saves, raw (gzipped): the walkable ground 88 (24.5) where there is no crowd outside, the words 87 (25) for the language not read (and 66 (19) when it is the other), the venues 79 (14) less the one or two a district shows, and the small index and loaders that are added. The files of the walkable ground, the English words and the venue each load in parallel with the page's other modules, as the records of 0.45.1 do.
79
+ - **Times are not claimed.** `bundle-report.mjs` also measured the first paint and the drawn page at 1 and 4 times slower CPU, but the machine's load average was 27 to 42 during the runs (`uptime`) and 3 runs of each page differed by more than a change of this size could make; a change in bytes of this kind is not a change in time that can be told from the noise here.
80
+
10
81
  ## [0.45.2] - 2026-10-30
11
82
 
12
83
  ### Changed
package/NOTICE.md CHANGED
@@ -45,11 +45,13 @@ picture or code of the sources is copied; each source is named here so that the
45
45
  | `arenas`: each arena's names, years, city, seats, rink sizes, Wikidata item and coordinates | The infobox and the text of the English Wikipedia article of each arena, at the revision cited below (the names with the years the article dates them, the year it opened, closed and was pulled down, the seats for ice hockey and for basketball, a rink's length and width where the article gives them in a sentence of its own); the name in Japanese from the title of its Japanese article or written for the package; the Wikidata item (CC0) that each article is linked to and its coordinates (P625) | Facts. The articles are CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/); none of their text, tables or images is used |
46
46
  | `venues`: the outline of each NHL arena's building, how its rink lies in it and the building's height (`VENUE_OSM`, `src/venues.osm.data.ts`) | OpenStreetMap, through the Overpass API: the closed way (or the relation of a building drawn in two ways) tagged with the venue's Wikidata item (and the ice, where it is mapped), read on 2026-10-20, with the raw answers kept in `data-sources/venues/2026-10-20/`; the outline is simplified to a metre, and the way the rink lies is worked out from it (`coreOf`, `src/venues.geo.ts`) | ODbL 1.0, (c) OpenStreetMap contributors (https://www.openstreetmap.org/copyright): a derived database, kept in its own file and offered under the ODbL; a drawing made from it is a produced work and carries the credit (`VENUE_ATTRIBUTION`) |
47
47
  | `venues`: each venue's seats for ice hockey, number of seating tiers and kind of roof (`VENUE_DATA`, `src/venues.data.ts`) | The item of Wikidata (the capacity P1083 and the sport it applies to P641) and the English Wikipedia article of each arena, at the revision cited below, in `data-sources/venues/2026-10-20/` as read; the facts are numbers and words of our own, with what was read in a few words | Wikidata's data is CC0; the facts read from the articles are facts, with the articles credited here (CC BY-SA 4.0) |
48
- | `stadiums`: the outline of each stadium's building, the roof OpenStreetMap maps over it (its heights, the opening in it or its canopies), the pitches or the infield, and how the field lies, worked out from the opening, the pitches or the infield and the outline (`STADIUM_OSM`, `src/stadiums.osm.data.ts`) | OpenStreetMap, through the Overpass API: the closed way tagged with the stadium's Wikidata item and the multipolygon of its roof (BC Place), or the way or relation of the building, the roof parts, the pitches, the infield or the grass of the field named in `scripts/stadiums.data.json` (Lumen Field, T-Mobile Park, Tokyo Dome, Korakuen Hall, Koshien Stadium), read on 2026-10-20, with the raw answers kept in `data-sources/stadiums/2026-10-20/`; the outline is simplified to a metre, and the way the field lies is worked out from the opening, the pitches or the infield (`smallestBox`, `src/venues.geo.ts`; a ballpark's way out to centre field is the one of four where its fence lies inside the outline, or the heading and home plate at which its published fence lies nearest the mapped grass of the field (Koshien Stadium), or, where nothing maps it, not known, and the heading is the one in which fence and stands fit the outline best (Tokyo Dome)) | ODbL 1.0, (c) OpenStreetMap contributors (https://www.openstreetmap.org/copyright): a derived database, kept in its own file and offered under the ODbL; a drawing made from it is a produced work and carries the credit (`VENUE_ATTRIBUTION`) |
48
+ | `stadiums`: the outline of each stadium's building, the roof OpenStreetMap maps over it (its heights, the opening in it or its canopies), the pitches or the infield, and how the field lies, worked out from the opening, the pitches or the infield and the outline (`STADIUM_OSM`, `src/stadiums.osm.data.ts`) | OpenStreetMap, through the Overpass API: the closed way tagged with the stadium's Wikidata item and the multipolygon of its roof (BC Place), or the way or relation of the building, the roof parts, the pitches, the infield or the grass of the field named in `scripts/stadiums.data.json` (Lumen Field, T-Mobile Park, Tokyo Dome, Korakuen Hall, Koshien Stadium, and from 2026-10-30 Yankee Stadium, Citi Field, MetLife Stadium, the Olympic Stadium of Montreal with the footprint of its tower, and Barclays Center), read on 2026-10-20 and 2026-10-30, with the raw answers kept in `data-sources/stadiums/2026-10-20/` and `data-sources/stadiums/2026-10-30/`; the outline is simplified to a metre, and the way the field lies is worked out from the opening, the pitches or the infield (`smallestBox`, `src/venues.geo.ts`; a ballpark's way out to centre field is the one of four where its fence lies inside the outline, or the heading and home plate at which its published fence lies nearest the mapped grass of the field (Koshien Stadium), or, where nothing maps it, not known, and the heading is the one in which fence and stands fit the outline best (Tokyo Dome)) | ODbL 1.0, (c) OpenStreetMap contributors (https://www.openstreetmap.org/copyright): a derived database, kept in its own file and offered under the ODbL; a drawing made from it is a produced work and carries the credit (`VENUE_ATTRIBUTION`) |
49
49
  | `stadiums`: each stadium's seats for each configuration, number of seating bowls, kind of roof and the size of its opening (`STADIUM_DATA`, `src/stadiums.data.ts`) | The item of Wikidata (the capacity P1083, the coordinates P625 and the labels in English and Japanese that name a hall) and the English Wikipedia article of each stadium, at the revision cited below, and the Japanese article of the three stadiums of Japan, at the revision cited in [NOTICE.ja.md](./NOTICE.ja.md#実在のスタジアム), in `data-sources/stadiums/2026-10-20/` as read; the facts are numbers and words of our own, with what was read in a few words (and, for a fact leaning on a sentence, the phrase the archive must hold) | Wikidata's data is CC0; the facts read from the articles are facts, with the articles credited here (CC BY-SA 4.0) |
50
50
  | `walk`: the ground a crowd outside a district's venues may stand on and what stops it (`WALK_DATA`, `src/walk.data.ts`): paths and sidewalks, plazas, squares, parks and platforms, and carriageways, cycle tracks, railways, water and buildings, as lines with a width and as rings | OpenStreetMap, through the Overpass API: every way and relation of the highways, buildings, railways, water, squares, parks and platforms within 350 metres of the district's venues, read on 2026-10-22, with the raw answer kept in `data-sources/walk/2026-10-22/`; laid flat in metres, simplified to 30 centimetres and written in quarter-metres, by the rules of `scripts/walk-rules.mjs` (no name, id or tag is copied) | ODbL 1.0, (c) OpenStreetMap contributors (https://www.openstreetmap.org/copyright): a derived database, kept in its own file and offered under the ODbL; a crowd or a drawing made from it is a produced work and carries the credit (`VENUE_ATTRIBUTION`) |
51
51
  | `plateau`: the buildings round Tokyo Dome City (`TOKYO_DOME_CITY`, `src/plateau.data.ts`): each building's roof-edge outline simplified to 0.6 metres on a half-metre grid, its height and, for a pitched LOD2 roof, the rise of the roof | Project PLATEAU, the Ministry of Land, Infrastructure, Transport and Tourism's (MLIT) 3D city model of Bunkyo ward, 2025 edition (product specification 5.0, CityGML, https://www.geospatial.jp/ckan/dataset/plateau-13105-bunkyo-ku-2025), read on 2026-10-22: the buildings within 500 metres of the middle of the district, with the raw fields kept in `data-sources/plateau/2026-10-22/` (`pnpm plateau:fetch`, `pnpm plateau`) | PLATEAU Site Policy (https://www.mlit.go.jp/plateau/site-policy/), clause 3: free use, commercial use included, compatible with CC BY 4.0 and the Public Data License 1.0; the source is credited and the data says it was edited and not made by MLIT (`PLATEAU_ATTRIBUTION`: "Project PLATEAU, Ministry of Land, Infrastructure, Transport and Tourism (MLIT), https://www.mlit.go.jp/plateau/ (3D city model of Bunkyo ward, 2025 edition), simplified and edited by Kyogijo Stadiums; not made by MLIT"); the copyright of a ward's data belongs to its local government. Kept in its own file, apart from the OpenStreetMap data (ODbL) and the CC0 files |
52
52
  | `cityctx`: the surroundings of the venues of Seattle (`SEATTLE_SODO`, `SEATTLE_CENTER`, `SEATTLE_CITY`) and the land cover and trees round Vancouver's (`VANCOUVER_NATURE`), in `src/cityctx.data.ts`: buildings (outline, height, for a pitched roof its rise), streets, railways, sidewalks and paths as lines with a width, water, green and wood outlines, and single trees | OpenStreetMap, through the Overpass API: the buildings (with their `height` and `building:levels`), the highways and railways, the tree nodes and rows within the radius of each area, read on 2026-10-22, the raw answers kept in `data-sources/cityctx/2026-10-22/` (`pnpm cityctx:fetch`, `pnpm cityctx:vox`, `pnpm cityctx`); laid flat in metres, simplified and put on a grid of half a metre (two metres for Seattle's city view) | OpenStreetMap's data is ODbL 1.0 (https://opendatacommons.org/licenses/odbl/1-0/), credited "(c) OpenStreetMap contributors, ODbL 1.0, openstreetmap.org/copyright"; the file is a derived database kept in its own file, apart from the CC0 files and from PLATEAU's data |
53
+ | `cityctx`: the surroundings of New York's venues (`NYC_MIDTOWN`, `NYC_BRONX`, `NYC_FLUSHING`, `NYC_BROOKLYN`), of the Meadowlands (`MEADOWLANDS`), of Belmont Park (`BELMONT_PARK`) and of Montreal's (`MONTREAL_DOWNTOWN`, `MONTREAL_OLYMPIC`, `MONTREAL_CITY`), one file each (`src/cityctx.<area>.data.ts`): buildings, streets, railways, sidewalks and paths, water, green and wood outlines, and single trees | OpenStreetMap, through the Overpass API (the buildings with their `height` and `building:levels`, the highways, railways, water and parks, the tree nodes and rows), read on 2026-10-30 and kept in `data-sources/cityctx/2026-10-30/` (`pnpm cityctx:fetch`, `pnpm cityctx`); the water, wetland, park, grass and wood outlines are OpenStreetMap's as mapped (VoxCity is not used for these areas) | OpenStreetMap's data is ODbL 1.0, credited "(c) OpenStreetMap contributors, ODbL 1.0, openstreetmap.org/copyright"; each file is a derived database kept apart from the CC0 files and from PLATEAU's data |
54
+ | `cityctx`: the heights of New York's buildings | The City of New York's Building Footprints (NYC Open Data, dataset 5zhs-2jue, Office of Technology and Innovation: the outline, the roof height above the ground in feet and the construction year of each building), read through the portal's API on 2026-10-30 and kept in `data-sources/cityctx/2026-10-30/nyc-footprints-*.json`; the roof height is used where a footprint matches an OpenStreetMap building, and a footprint OpenStreetMap lacks is a building of its own | A public data set of the City under its Open Data Law (Administrative Code 23-502: made available without registration, licence requirement or restriction on use, the City being able to ask a third party that publishes it to name its source and version and to say what it changed); the City gives no warranty of the data's accuracy (the credit says it): the credit names the data set, the date read and that it was edited |
53
55
  | `cityctx`: Vancouver's trees | The City of Vancouver's open data, "Public trees" (place and diameter), read through the portal's API on 2026-10-22 and kept in `data-sources/cityctx/2026-10-22/` | The Open Government Licence - Vancouver (https://opendata.vancouver.ca/pages/licence/): free to use, with the City credited, in each layer, in English and in Japanese |
54
56
  | `cityctx`: the heights of Seattle's buildings and its trees | The City of Seattle's open data: "Building Outlines 2015" (the roof outlines the City's 3D building shells are made from; the roof apex elevation in feet, from which the height above the ground is worked out), "Combined Tree Point" (street and park trees: place and diameter), and the ground under each building from the USGS 3D Elevation Program (the National Map's `3DEPElevation` image service), read on 2026-10-22 and kept in `data-sources/cityctx/2026-10-22/` | The City of Seattle's Open Data Policy (V1.0, 1 February 2016: a dataset on its portal is made available without registration, licence requirement or restriction on its use, and a third party that publishes it identifies its source and version and what it changed); the City makes no warranty of the data's accuracy, and says so in each dataset (the credit says it too); the 3D shells' own item gives only that disclaimer, and the outlines are what its shells are made from; the USGS 3DEP elevation is a US Government work in the public domain, credited |
55
57
  | `cityctx`: the land cover (water, green, wood) of Vancouver and Seattle | The grid of land cover that VoxCity (https://github.com/kunifujiwara/VoxCity, version 1.7.0, run locally, with no Earth Engine or other account) makes from OpenStreetMap with `get_land_cover_grid(source="OpenStreetMap")`, kept as it was made in `data-sources/cityctx/2026-10-22/voxcity-*.json` and vectorized by `scripts/cityctx_vox.py` | VoxCity's code is MIT (not copied or shipped: only run at build time); the land cover is OpenStreetMap's data and so ODbL 1.0, credited "Land cover made with VoxCity (MIT) from OpenStreetMap" |
@@ -460,7 +462,7 @@ The thirty-two arenas of the NHL, read on 2026-10-20 (`pnpm venues:fetch <date>
460
462
 
461
463
  ## The stadiums' sources
462
464
 
463
- BC Place, Lumen Field, T-Mobile Park, Tokyo Dome, Korakuen Hall and Koshien Stadium, read on 2026-10-20 (`pnpm stadiums:fetch`; the files are in `data-sources/stadiums/2026-10-20/`: `osm-<stadium>.json` as Overpass returned it, `wikidata.json` and `wikipedia.json`). The outline of the building, its roof and the opening in it are OpenStreetMap's, ODbL 1.0, (c) OpenStreetMap contributors, and live in `src/stadiums.osm.data.ts` alone. The seats of each configuration, the bowls, the roof's kind and the size of its opening are in `src/stadiums.data.ts`, with what each cites. No seat map of a club, a ticket seller or a federation is read or copied, and no mark of a club, a league or a tournament is drawn.
465
+ BC Place, Lumen Field, T-Mobile Park, Tokyo Dome, Korakuen Hall and Koshien Stadium, read on 2026-10-20, and Yankee Stadium, Citi Field, MetLife Stadium, the Olympic Stadium of Montreal (with its tower, way/20213158) and Barclays Center, read on 2026-10-30 (`pnpm stadiums:fetch`; the files are in `data-sources/stadiums/2026-10-20/` and `data-sources/stadiums/2026-10-30/`: `osm-<stadium>.json` as Overpass returned it, `wikidata.json` and `wikipedia.json`, those of the later day holding every stadium). The outline of the building, its roof and the opening in it are OpenStreetMap's, ODbL 1.0, (c) OpenStreetMap contributors, and live in `src/stadiums.osm.data.ts` alone. The seats of each configuration, the bowls, the roof's kind and the size of its opening are in `src/stadiums.data.ts`, with what each cites. No seat map of a club, a ticket seller or a federation is read or copied, and no mark of a club, a league or a tournament is drawn.
464
466
 
465
467
  | Stadium | Wikidata item | OpenStreetMap way | English article and revision |
466
468
  | --- | --- | --- | --- |
@@ -470,6 +472,11 @@ BC Place, Lumen Field, T-Mobile Park, Tokyo Dome, Korakuen Hall and Koshien Stad
470
472
  | Tokyo Dome | Q733748 | way/20028328 | Tokyo Dome, 1379232526 |
471
473
  | Korakuen Hall | Q4389857 | way/45977418 | Korakuen Hall, 1372211318 |
472
474
  | Koshien Stadium | Q959811 | relation/9845926 | Koshien Stadium, 1374217766 |
475
+ | Yankee Stadium | Q753529 | way/24801630 | Yankee Stadium, 1382714435 |
476
+ | Citi Field | Q1072882 | way/604023701 | Citi Field, 1381363029 |
477
+ | MetLife Stadium | Q10862290 | way/24221553 | MetLife Stadium, 1381185974 |
478
+ | Olympic Stadium | Q285467 | way/108505523 | Olympic Stadium (Montreal), 1382141337 |
479
+ | Barclays Center | Q807966 | relation/8610205 | Barclays Center, 1380399342 |
473
480
 
474
481
  ## The context's and the gates' sources
475
482
 
@@ -1,4 +1,4 @@
1
- import { type KyogijoWords } from "./strings.ts";
1
+ import { type KyogijoWords } from "./strings.core.ts";
2
2
  import { type Surface } from "./surfaces/surface.ts";
3
3
  import type { ScoreOptions, SurfaceOptions } from "./types.ts";
4
4
  /** The margin each surface has when the options give none (the builders' own defaults), in feet. */
package/dist/annotate.js CHANGED
@@ -5,7 +5,7 @@
5
5
  import { attackingIn, frameByName, toSurface } from "./frames.js";
6
6
  import { el, num } from "./format.js";
7
7
  import { frameSizeOf } from "./outline.js";
8
- import { fill } from "./strings.js";
8
+ import { fill } from "./strings.core.js";
9
9
  import { textWidth } from "./text.js";
10
10
  import { textOn } from "./surfaces/surface.js";
11
11
  import { FEET_PER, SURFACE_UNITS, isUnit } from "./units.js";
package/dist/areas.d.ts CHANGED
@@ -5,6 +5,10 @@ export declare const CITYCTX_VENUES: Readonly<{
5
5
  sodo: string[];
6
6
  center: string[];
7
7
  }>;
8
+ /** The venues each detail area of New York, New Jersey and Montreal is drawn round, by their ids: one area for each venue, and for Montreal's two the city between them when both are shown. */
9
+ export declare const CITYCTX_DETAIL: Readonly<Record<string, readonly string[]>>;
10
+ /** The most patches of New York's surroundings a choice of venues takes: more than this many venues of the city are too far apart for patches of detail round each. */
11
+ export declare const MOST_DETAIL_AREAS = 2;
8
12
  /** The venues of Tokyo Dome City, round which Project PLATEAU's buildings are drawn (the Kodokan stands a little way off, inside the area). */
9
13
  export declare const TOKYO_VENUES: readonly string[];
10
14
  /** The key of every area there is data for, in the order a district draws them: each is one file. */
package/dist/areas.js CHANGED
@@ -4,10 +4,23 @@ export const CITYCTX_VENUES = Object.freeze({
4
4
  sodo: ["lumen-field", "t-mobile-park"],
5
5
  center: ["climate-pledge-arena"],
6
6
  });
7
+ /** The venues each detail area of New York, New Jersey and Montreal is drawn round, by their ids: one area for each venue, and for Montreal's two the city between them when both are shown. */
8
+ export const CITYCTX_DETAIL = Object.freeze({
9
+ "nyc-midtown": ["madison-square-garden"],
10
+ "nyc-bronx": ["yankee-stadium"],
11
+ "nyc-flushing": ["citi-field"],
12
+ "nyc-brooklyn": ["barclays-center"],
13
+ "meadowlands": ["metlife-stadium"],
14
+ "belmont-park": ["ubs-arena"],
15
+ "montreal-downtown": ["bell-centre"],
16
+ "montreal-olympic": ["olympic-stadium-montreal"],
17
+ });
18
+ /** The most patches of New York's surroundings a choice of venues takes: more than this many venues of the city are too far apart for patches of detail round each. */
19
+ export const MOST_DETAIL_AREAS = 2;
7
20
  /** The venues of Tokyo Dome City, round which Project PLATEAU's buildings are drawn (the Kodokan stands a little way off, inside the area). */
8
21
  export const TOKYO_VENUES = Object.freeze(["tokyo-dome", "korakuen-hall", "kodokan"]);
9
22
  /** The key of every area there is data for, in the order a district draws them: each is one file. */
10
- export const AREA_KEYS = Object.freeze(["vancouver", "vancouver-nature", "seattle-sodo", "seattle-center", "seattle-city", "tokyo-dome-city"]);
23
+ export const AREA_KEYS = Object.freeze(["vancouver", "vancouver-nature", "seattle-sodo", "seattle-center", "seattle-city", "tokyo-dome-city", "nyc-midtown", "nyc-bronx", "nyc-flushing", "nyc-brooklyn", "meadowlands", "belmont-park", "montreal-downtown", "montreal-olympic", "montreal-city"]);
11
24
  /** Each area's loader: the one `import()` of the one file that holds it. */
12
25
  const LOADERS = {
13
26
  "vancouver": async () => (await import("./osm.context.data.js")).VANCOUVER_CENTRE,
@@ -16,6 +29,15 @@ const LOADERS = {
16
29
  "seattle-center": async () => (await import("./cityctx.seattle-center.data.js")).SEATTLE_CENTER,
17
30
  "seattle-city": async () => (await import("./cityctx.seattle-city.data.js")).SEATTLE_CITY,
18
31
  "tokyo-dome-city": async () => (await import("./plateau.data.js")).TOKYO_DOME_CITY,
32
+ "nyc-midtown": async () => (await import("./cityctx.nyc-midtown.data.js")).NYC_MIDTOWN,
33
+ "nyc-bronx": async () => (await import("./cityctx.nyc-bronx.data.js")).NYC_BRONX,
34
+ "nyc-flushing": async () => (await import("./cityctx.nyc-flushing.data.js")).NYC_FLUSHING,
35
+ "nyc-brooklyn": async () => (await import("./cityctx.nyc-brooklyn.data.js")).NYC_BROOKLYN,
36
+ "meadowlands": async () => (await import("./cityctx.meadowlands.data.js")).MEADOWLANDS,
37
+ "belmont-park": async () => (await import("./cityctx.belmont-park.data.js")).BELMONT_PARK,
38
+ "montreal-downtown": async () => (await import("./cityctx.montreal-downtown.data.js")).MONTREAL_DOWNTOWN,
39
+ "montreal-olympic": async () => (await import("./cityctx.montreal-olympic.data.js")).MONTREAL_OLYMPIC,
40
+ "montreal-city": async () => (await import("./cityctx.montreal-city.data.js")).MONTREAL_CITY,
19
41
  };
20
42
  /**
21
43
  * The keys of the areas that go with some venues, in the order to draw them: downtown Vancouver's buildings and streets and its water, green and trees for BC Place and Rogers Arena; Seattle's SoDo for Lumen Field and
@@ -34,6 +56,16 @@ export function areaKeysFor(venues) {
34
56
  if (has(TOKYO_VENUES))
35
57
  return ["tokyo-dome-city"];
36
58
  const keys = [];
59
+ // Montreal's two venues stand six kilometres apart: together they take the city between them, each alone its own surroundings. New York's and New Jersey's venues are in different boroughs and states: each shown takes its own.
60
+ const montreal = ["montreal-downtown", "montreal-olympic"].filter((key) => has(CITYCTX_DETAIL[key]));
61
+ if (montreal.length === 2)
62
+ keys.push("montreal-city");
63
+ else
64
+ keys.push(...montreal);
65
+ // (More than two of New York's venues are in more than two boroughs and states, tens of kilometres across: each patch of surroundings would be a speck and together they would weigh a megabyte of drawing, so such a choice has none.)
66
+ const york = Object.entries(CITYCTX_DETAIL).filter(([key, list]) => !key.startsWith("montreal") && has(list)).map(([key]) => key);
67
+ if (york.length <= MOST_DETAIL_AREAS)
68
+ keys.push(...york);
37
69
  if (has(CITYCTX_VENUES.vancouver))
38
70
  keys.push("vancouver", "vancouver-nature");
39
71
  const [sodo, center] = [has(CITYCTX_VENUES.sodo), has(CITYCTX_VENUES.center)];
@@ -1,3 +1,4 @@
1
+ import "./strings.ts";
1
2
  export { ARENA_IDS, ARENAS, arenaById, arenaByName, arenaByWikidata, arenaCourtIn, arenaNameIn, arenaOfficialName, arenaRinkIn, arenaSourceUrl, arenasByName } from "./arenas.ts";
2
3
  export { officialName, plainName } from "./names.ts";
3
4
  export type { PlaceAlias, PlaceNameKind } from "./names.ts";
@@ -1,3 +1,5 @@
1
1
  // The arenas of the NHL, the NBA, the WNBA and the PWHL: where each stands, when it was in use, its names, its seats for each sport and the size of its rink or court where the sources publish one.
2
+ // The words in both languages, as this entry has always carried them (the lean district reads one language when it is asked to).
3
+ import "./strings.js";
2
4
  export { ARENA_IDS, ARENAS, arenaById, arenaByName, arenaByWikidata, arenaCourtIn, arenaNameIn, arenaOfficialName, arenaRinkIn, arenaSourceUrl, arenasByName } from "./arenas.js";
3
5
  export { officialName, plainName } from "./names.js";
@@ -1,5 +1,5 @@
1
1
  // What an athletics drawing says of itself: its sentence about the track, and what the options mark on it. Cheap (it reads the options, not the plan), so that a title and a description cost nothing.
2
- import { fill, KYOGIJO_STRINGS } from "../strings.js";
2
+ import { fill, KYOGIJO_STRINGS } from "../strings.core.js";
3
3
  import { fieldEventById, raceById } from "./events.js";
4
4
  import { athleticsLanes, athleticsLeague, eventsOf, racesOf } from "./plan.js";
5
5
  /** The words of a race or a field event in a language. */
@@ -1,4 +1,5 @@
1
1
  import "./full.ts";
2
+ import "./venues.all.ts";
2
3
  export { laneDraw, raceResults, raceReplay, fieldMarks, formatTime, distanceRun } from "./charts.athletics.ts";
3
4
  export type { AthleticsEntry, AthleticsResult, AthleticsRaceOptions, AthleticsRunner, FieldAttempt, FieldMarksOptions, FieldTotals, LaneDrawTotals, RaceReplay, RaceReplayOptions, ResultsTotals } from "./charts.athletics.ts";
4
5
  export { FIELD_EVENTS, FIELD_EVENT_IDS, RACES, RACE_IDS, fieldEventById, raceById } from "./athletics/events.ts";
@@ -1,5 +1,7 @@
1
1
  // The athletics stadium: the races and the field events, the plan of the track and what is marked on it, the oval's geometry (a point of a lane, the stagger of each lane's start), and the data: lane draws, results, a replay and the marks of throws and jumps.
2
2
  import "./full.js";
3
+ // The real venues of the NHL's arenas, as this entry has always had them (the lean district reads the ones it shows).
4
+ import "./venues.all.js";
3
5
  export { laneDraw, raceResults, raceReplay, fieldMarks, formatTime, distanceRun } from "./charts.athletics.js";
4
6
  export { FIELD_EVENTS, FIELD_EVENT_IDS, RACES, RACE_IDS, fieldEventById, raceById } from "./athletics/events.js";
5
7
  export { athleticsLeague, athleticsPlan, eventsOf, racesOf, INDOOR_RACES } from "./athletics/plan.js";
@@ -1,3 +1,4 @@
1
+ import "./strings.ts";
1
2
  export { PLACES, atlasFacets, hallSurfaces, placeById, placeByName, placesBy, placesByClub, placesByName, surfaceOf, surfacesOf, tenantsOf } from "./atlas.ts";
2
3
  export { HALLS } from "./halls.ts";
3
4
  export type { Hall, HallBasis, HallSurface } from "./halls.ts";
@@ -1,4 +1,6 @@
1
1
  // The atlas: every ballpark, soccer ground and hockey and basketball arena, and the famous halls of the budō, with where it stands, when it was in use and the clubs that played there, and the filters over them.
2
+ // The words in both languages, as this entry has always carried them (the lean district reads one language when it is asked to).
3
+ import "./strings.js";
2
4
  export { PLACES, atlasFacets, hallSurfaces, placeById, placeByName, placesBy, placesByClub, placesByName, surfaceOf, surfacesOf, tenantsOf } from "./atlas.js";
3
5
  export { HALLS } from "./halls.js";
4
6
  export { officialName, plainName } from "./names.js";
@@ -1,5 +1,5 @@
1
1
  import { type ParkDugouts, type ParkQuirk, type ParkWall } from "./parks.core.ts";
2
- import { type KyogijoWords } from "./strings.ts";
2
+ import { type KyogijoWords } from "./strings.core.ts";
3
3
  import type { Language, SurfaceOptions } from "./types.ts";
4
4
  /** The unit the heights and distances are written in: feet, or metres for a drawing in metres, centimetres or millimetres. */
5
5
  export type BallparkUnit = "ft" | "m";
package/dist/ballpark.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // (`quirks`), the warning track's width, and the words that name them. The figures are in parks.ts; this file reads the options and says what to draw and what to say.
3
3
  import { lengthUnit } from "./common.js";
4
4
  import { heldPark, parkQuirksIn, parkWallsIn } from "./parks.core.js";
5
- import { KYOGIJO_STRINGS, fill } from "./strings.js";
5
+ import { KYOGIJO_STRINGS, fill } from "./strings.core.js";
6
6
  /** True when a drawing has something of a ballpark to add (its stylesheet is then written in). */
7
7
  export const ballparkDrawn = (b) => b !== undefined && (b.walls.length > 0 || b.quirks.length > 0 || b.backstop !== undefined || b.dugouts !== undefined);
8
8
  const QUIRK_NAMES = ["hill", "overhang", "pole", "flagpole", "bullpen", "ivy", "basket", "backstop", "dugouts"];
@@ -1,5 +1,5 @@
1
1
  // What a budō drawing says of itself: its sentence about the surface, and what the options mark on it. Built from the plan, so that the words and the drawing agree.
2
- import { fill, KYOGIJO_STRINGS } from "../strings.js";
2
+ import { fill, KYOGIJO_STRINGS } from "../strings.core.js";
3
3
  import { budoView } from "../budo.score.js";
4
4
  import { kimariteName } from "./kimarite.js";
5
5
  import { budoPlan } from "./plan.js";
@@ -1,4 +1,5 @@
1
1
  import "./full.ts";
2
+ import "./venues.all.ts";
2
3
  export { DOJO_STANDARDS, dojo, drawDojo } from "./budo/dojo.api.ts";
3
4
  export type { Dojo, Tatami } from "./budo/dojo.api.ts";
4
5
  export { DOJO_SIZES, floorOf, shapeOfJo } from "./budo/dojo.ts";
@@ -1,5 +1,7 @@
1
1
  // The budō (武道): judo and karate competition areas, the kendo shiai-jo, the sumo dohyō, the kyūdōjō and the dojo builder, with their plans, the tatami layout, the kimarite, the looks and the stylesheet.
2
2
  import "./full.js";
3
+ // The real venues of the NHL's arenas, as this entry has always had them (the lean district reads the ones it shows).
4
+ import "./venues.all.js";
3
5
  export { DOJO_STANDARDS, dojo, drawDojo } from "./budo/dojo.api.js";
4
6
  export { DOJO_SIZES, floorOf, shapeOfJo } from "./budo/dojo.js";
5
7
  export { dojoGallery, dojoRoom, ROOM_HEIGHTS } from "./budo/room.js";
@@ -1,3 +1,4 @@
1
1
  import "./full.ts";
2
+ import "./venues.all.ts";
2
3
  export { drawToCanvas, withAlpha } from "./canvas.ts";
3
4
  export type { CanvasContext, CanvasGradientLike, CanvasOptions, Drawn } from "./canvas.ts";
@@ -1,3 +1,5 @@
1
1
  // A drawing on a canvas context (a browser's, an OffscreenCanvas's or a Node canvas's), with no canvas library imported.
2
2
  import "./full.js";
3
+ // The real venues of the NHL's arenas, as this entry has always had them (the lean district reads the ones it shows).
4
+ import "./venues.all.js";
3
5
  export { drawToCanvas, withAlpha } from "./canvas.js";
@@ -1,4 +1,5 @@
1
1
  import "./full.ts";
2
+ import "./venues.all.ts";
2
3
  export { nbaShotChart, nflPassChart, nhlShotMap } from "./charts.ts";
3
4
  export { mlbSprayChart } from "./charts.baseball.ts";
4
5
  export { soccerGoalMouth, soccerShotMap } from "./charts.soccer.ts";
@@ -1,5 +1,7 @@
1
1
  // The ready-made charts: shot charts, shot maps, spray charts and pass charts built on the data layers.
2
2
  import "./full.js";
3
+ // The real venues of the NHL's arenas, as this entry has always had them (the lean district reads the ones it shows).
4
+ import "./venues.all.js";
3
5
  export { nbaShotChart, nflPassChart, nhlShotMap } from "./charts.js";
4
6
  export { mlbSprayChart } from "./charts.baseball.js";
5
7
  export { soccerGoalMouth, soccerShotMap } from "./charts.soccer.js";
@@ -9,7 +9,7 @@ import { fieldEventName } from "./athletics/describe.js";
9
9
  import { curveAcross } from "./athletics/races.js";
10
10
  import { distanceOn, laneRadius, lap, pose } from "./athletics/track.js";
11
11
  import { esc } from "./format.js";
12
- import { fill } from "./strings.js";
12
+ import { fill } from "./strings.core.js";
13
13
  const isNum = (v) => typeof v === "number" && Number.isFinite(v);
14
14
  const K = 1 / 0.3048;
15
15
  const WORDS = (language) => wordsOf(language).athletics;
@@ -7,7 +7,7 @@ import { zoneToPoint } from "./frames.providers.js";
7
7
  import { outlineOf } from "./outline.js";
8
8
  import { fenceFor, heldPark } from "./parks.core.js";
9
9
  import { MLB } from "./geometry.js";
10
- import { fill } from "./strings.js";
10
+ import { fill } from "./strings.core.js";
11
11
  import { assemble, clean, countOutcomes, describeCounts, drawingOptions, frameOf, fromOf, hasPlace, keyItems, keyLayers, languageOf, placed, wordsOf, zoneTotals } from "./charts.js";
12
12
  /** The look of each hit type: a shape and a size as well as a fill, so that a type is never told by colour alone. */
13
13
  const LOOKS = {
@@ -11,7 +11,7 @@ import { shownIce, teesOf } from "./surfaces/curling.js";
11
11
  import { foldCrop } from "./surfaces/curling.fold.js";
12
12
  import { zoneCounts } from "./heat.js";
13
13
  import { envFor } from "./layers.env.js";
14
- import { fill } from "./strings.js";
14
+ import { fill } from "./strings.core.js";
15
15
  import { convertLength, isUnit } from "./units.js";
16
16
  const isNum = (value) => typeof value === "number" && Number.isFinite(value);
17
17
  /**
@@ -6,7 +6,7 @@ import { CURLING, STONE_DIAMETER } from "./geometry.js";
6
6
  import { convertLength } from "./units.js";
7
7
  import { sheetFor } from "./sheet.js";
8
8
  import { assemble, clean, drawingOptions, keyItems, keyLayers, languageOf, round, wordsOf } from "./charts.js";
9
- import { fill } from "./strings.js";
9
+ import { fill } from "./strings.core.js";
10
10
  import { outlineOf } from "./outline.js";
11
11
  import { isUnit } from "./units.js";
12
12
  import { isPortrait } from "./common.js";
package/dist/charts.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { type Frame } from "./frames.ts";
2
2
  import { isNum } from "./layers.env.ts";
3
3
  import type { Layer, LayerBase, MarkDatum, OutcomeStyle } from "./layers.types.ts";
4
- import { type KyogijoWords } from "./strings.ts";
4
+ import { type KyogijoWords } from "./strings.core.ts";
5
5
  import type { Chart, ChartOptions, KeyItem, NbaShot, NbaShotOptions, NbaTotals, NflPass, NflPassOptions, NflTotals, NhlShot, NhlShotOptions, NhlTotals, ZoneTotal } from "./charts.types.ts";
6
6
  import type { Language, Sport, SurfaceOptions } from "./types.ts";
7
7
  import type { ZonesLayer } from "./heat.types.ts";
package/dist/charts.js CHANGED
@@ -12,7 +12,7 @@ import { withFlags } from "./flags-source.js";
12
12
  import { layerTable } from "./layers.js";
13
13
  import { flagPicture } from "./logo.js";
14
14
  import { outlineOf } from "./outline.js";
15
- import { KYOGIJO_STRINGS, fill } from "./strings.js";
15
+ import { KYOGIJO_STRINGS, fill } from "./strings.core.js";
16
16
  import { textWidth } from "./text.js";
17
17
  // ----- what the charts share
18
18
  /** The language of a chart's words. */
@@ -1,7 +1,7 @@
1
1
  // The pass network chart: who passed to whom on a pitch, each player a node at the average place of his passes, sized by touches, and each pair of players a link
2
2
  // sized by their passes, with a key and a table. The idea is that of mplsoccer's pass-network example (MIT); no code of it, nor of sportypy or sportyR (GPL), is used.
3
3
  import { envFor } from "./layers.env.js";
4
- import { fill } from "./strings.js";
4
+ import { fill } from "./strings.core.js";
5
5
  import { assemble, clean, drawingOptions, frameOf, fromOf, keyLayers, languageOf, wordsOf } from "./charts.js";
6
6
  import { computeNetwork, nodeName } from "./team.network.js";
7
7
  /**
@@ -5,7 +5,7 @@ import { drawKyogijo } from "./draw.js";
5
5
  import { esc } from "./format.js";
6
6
  import { swimPlan } from "./pool.js";
7
7
  import { formatTime, pacePer100, splitMetres } from "./pool.race.js";
8
- import { KYOGIJO_STRINGS, fill } from "./strings.js";
8
+ import { KYOGIJO_STRINGS, fill } from "./strings.core.js";
9
9
  /**
10
10
  * The splits of a race as a chart: pace bars in the lanes of a pool (`pool.race.pace`), a title, a sentence that sums it up, the numbers (`totals`) and an HTML table of every split for a reader who cannot see the
11
11
  * drawing. The splits are cumulative times, one every 50 m (every 25 m in a short course pool) unless the race says another distance.
@@ -4,7 +4,7 @@
4
4
  // is used. The flags are the caller's: an SVG document as text, or an address, as a team's logo is.
5
5
  import { assemble, clean, drawingOptions, entryFlag, languageOf, round, wordsOf } from "./charts.js";
6
6
  import { esc } from "./format.js";
7
- import { fill } from "./strings.js";
7
+ import { fill } from "./strings.core.js";
8
8
  import { ELEMENT_KINDS, ELEMENT_NAMES, raceById } from "./skating/events.js";
9
9
  import { ISU_SHORT_TRACK } from "./leagues/skating.js";
10
10
  import { disciplineOf, skatingPlan } from "./skating/plan.js";
@@ -6,7 +6,7 @@ import { esc, el, num } from "./format.js";
6
6
  import { layerTable, renderLayers } from "./layers.js";
7
7
  import { outlineOf } from "./outline.js";
8
8
  import { KYOGIJO_BASE_STYLE } from "./style.js";
9
- import { fill } from "./strings.js";
9
+ import { fill } from "./strings.core.js";
10
10
  import { FEET_PER_METRE } from "./geometry.js";
11
11
  import { SOCCER } from "./surfaces/soccer-spec.js";
12
12
  import { VERSION } from "./version.js";
@@ -1,3 +1,4 @@
1
+ import "./strings.ts";
1
2
  export { CITYCTX_AREAS, SEATTLE_CENTER, SEATTLE_CITY, SEATTLE_SODO, VANCOUVER_NATURE } from "./cityctx.data.ts";
2
3
  export { CITYCTX_VENUES, contextFor } from "./cityctx.ts";
3
4
  export type { ContextArea } from "./context.ts";
@@ -1,3 +1,5 @@
1
1
  // The surroundings of the venues of Vancouver and Seattle (streets, buildings, water, green, trees), as data a district takes in its `context` option, from OpenStreetMap (ODbL 1.0) and the Cities' open data, with their credits; `contextFor` says which go with some venues.
2
+ // The words in both languages, as this entry has always carried them (the lean district reads one language when it is asked to).
3
+ import "./strings.js";
2
4
  export { CITYCTX_AREAS, SEATTLE_CENTER, SEATTLE_CITY, SEATTLE_SODO, VANCOUVER_NATURE } from "./cityctx.data.js";
3
5
  export { CITYCTX_VENUES, contextFor } from "./cityctx.js";
@@ -0,0 +1,3 @@
1
+ import type { ContextArea } from "./context.ts";
2
+ /** New York: Belmont Park and UBS Arena, Elmont: 1314 buildings, 397 street lines, 44 land cover outlines and 55 trees within 650 metres of the middle, read 2026-10-30. */
3
+ export declare const BELMONT_PARK: ContextArea;