@johnmorrisdotca/kyogijo-stadiums 0.45.1 → 0.45.3

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 (293) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/dist/annotate.d.ts +1 -1
  3. package/dist/annotate.js +1 -1
  4. package/dist/arenas-entry.d.ts +1 -0
  5. package/dist/arenas-entry.js +2 -0
  6. package/dist/athletics/describe.js +1 -1
  7. package/dist/athletics-entry.d.ts +1 -0
  8. package/dist/athletics-entry.js +2 -0
  9. package/dist/atlas-entry.d.ts +1 -0
  10. package/dist/atlas-entry.js +2 -0
  11. package/dist/ballpark.d.ts +1 -1
  12. package/dist/ballpark.js +1 -1
  13. package/dist/budo/describe.js +1 -1
  14. package/dist/budo-entry.d.ts +1 -0
  15. package/dist/budo-entry.js +2 -0
  16. package/dist/canvas-entry.d.ts +1 -0
  17. package/dist/canvas-entry.js +2 -0
  18. package/dist/charts-entry.d.ts +1 -0
  19. package/dist/charts-entry.js +2 -0
  20. package/dist/charts.athletics.js +1 -1
  21. package/dist/charts.baseball.js +1 -1
  22. package/dist/charts.curling.heat.js +1 -1
  23. package/dist/charts.curling.js +1 -1
  24. package/dist/charts.d.ts +1 -1
  25. package/dist/charts.js +1 -1
  26. package/dist/charts.network.js +1 -1
  27. package/dist/charts.pool.js +1 -1
  28. package/dist/charts.skating.js +1 -1
  29. package/dist/charts.soccer.js +1 -1
  30. package/dist/cityctx-entry.d.ts +1 -0
  31. package/dist/cityctx-entry.js +2 -0
  32. package/dist/d3-entry.d.ts +1 -0
  33. package/dist/d3-entry.js +2 -0
  34. package/dist/district-entry.d.ts +2 -0
  35. package/dist/district-entry.js +4 -0
  36. package/dist/district-lean-entry.js +1 -1
  37. package/dist/district.js +1 -1
  38. package/dist/draw.js +1 -1
  39. package/dist/element-entry.d.ts +1 -0
  40. package/dist/element-entry.js +2 -0
  41. package/dist/eras-entry.d.ts +1 -0
  42. package/dist/eras-entry.js +2 -0
  43. package/dist/events.js +1 -1
  44. package/dist/flythrough-entry.d.ts +1 -0
  45. package/dist/flythrough-entry.js +2 -0
  46. package/dist/frames-entry.d.ts +1 -0
  47. package/dist/frames-entry.js +2 -0
  48. package/dist/full.d.ts +1 -0
  49. package/dist/full.js +3 -1
  50. package/dist/geojson-entry.d.ts +1 -0
  51. package/dist/geojson-entry.js +2 -0
  52. package/dist/geometry-entry.d.ts +1 -0
  53. package/dist/geometry-entry.js +2 -0
  54. package/dist/grounds-entry.d.ts +1 -0
  55. package/dist/grounds-entry.js +2 -0
  56. package/dist/heat.js +1 -1
  57. package/dist/heat.zones.d.ts +1 -1
  58. package/dist/heat.zones.js +1 -1
  59. package/dist/index.d.ts +3 -2
  60. package/dist/index.js +3 -1
  61. package/dist/judging-entry.d.ts +1 -0
  62. package/dist/judging-entry.js +2 -0
  63. package/dist/judging.board.js +1 -1
  64. package/dist/judging.draw.js +1 -1
  65. package/dist/judging.js +1 -1
  66. package/dist/judging.text.js +1 -1
  67. package/dist/layers.env.d.ts +1 -1
  68. package/dist/layers.env.js +1 -1
  69. package/dist/layers.js +1 -1
  70. package/dist/layout.js +1 -1
  71. package/dist/layouts-entry.d.ts +1 -0
  72. package/dist/layouts-entry.js +2 -0
  73. package/dist/leagues-entry.d.ts +1 -0
  74. package/dist/leagues-entry.js +2 -0
  75. package/dist/mount-entry.d.ts +1 -0
  76. package/dist/mount-entry.js +2 -0
  77. package/dist/multi-entry.d.ts +1 -0
  78. package/dist/multi-entry.js +2 -0
  79. package/dist/multi.draw.js +1 -1
  80. package/dist/multi.js +1 -1
  81. package/dist/osm-entry.d.ts +1 -0
  82. package/dist/osm-entry.js +2 -0
  83. package/dist/outside.d.ts +2 -1
  84. package/dist/outside.js +7 -6
  85. package/dist/parks-entry.d.ts +1 -0
  86. package/dist/parks-entry.js +2 -0
  87. package/dist/plateau-entry.d.ts +1 -0
  88. package/dist/plateau-entry.js +2 -0
  89. package/dist/plot-entry.d.ts +1 -0
  90. package/dist/plot-entry.js +2 -0
  91. package/dist/png-entry.d.ts +1 -0
  92. package/dist/png-entry.js +2 -0
  93. package/dist/pool.replay.js +1 -1
  94. package/dist/pool.words.js +1 -1
  95. package/dist/quality.d.ts +20 -2
  96. package/dist/quality.js +25 -4
  97. package/dist/ranges.js +1 -1
  98. package/dist/react-entry.d.ts +1 -0
  99. package/dist/react-entry.js +2 -0
  100. package/dist/replay-entry.d.ts +1 -0
  101. package/dist/replay-entry.js +2 -0
  102. package/dist/replay.d.ts +1 -1
  103. package/dist/replay.dom.js +1 -1
  104. package/dist/replay.js +1 -1
  105. package/dist/rules.js +1 -1
  106. package/dist/scene-entry.d.ts +1 -0
  107. package/dist/scene-entry.js +2 -0
  108. package/dist/situation.draw.js +1 -1
  109. package/dist/situation.js +1 -1
  110. package/dist/skating/describe.js +1 -1
  111. package/dist/skating-entry.d.ts +1 -0
  112. package/dist/skating-entry.js +2 -0
  113. package/dist/stadiums-entry.d.ts +1 -0
  114. package/dist/stadiums-entry.js +2 -0
  115. package/dist/strings.core.d.ts +1104 -0
  116. package/dist/strings.core.js +55 -0
  117. package/dist/strings.d.ts +4 -1084
  118. package/dist/strings.en.d.ts +2 -0
  119. package/dist/strings.en.js +537 -0
  120. package/dist/strings.ja.d.ts +2 -0
  121. package/dist/strings.ja.js +562 -0
  122. package/dist/strings.js +5 -1100
  123. package/dist/surfaces/venue.js +1 -1
  124. package/dist/target.js +1 -1
  125. package/dist/team.common.js +1 -1
  126. package/dist/team.formation.js +1 -1
  127. package/dist/team.lineup.js +1 -1
  128. package/dist/team.motion.js +1 -1
  129. package/dist/team.network.js +1 -1
  130. package/dist/team.shape.js +1 -1
  131. package/dist/turn-entry.d.ts +1 -0
  132. package/dist/turn-entry.js +2 -0
  133. package/dist/turn.camera.d.ts +5 -0
  134. package/dist/turn.camera.js +8 -0
  135. package/dist/turn.dom.js +55 -5
  136. package/dist/turn.model.d.ts +1 -1
  137. package/dist/turn.model.js +1 -1
  138. package/dist/uprights.js +1 -1
  139. package/dist/venue-data-entry.d.ts +2 -0
  140. package/dist/venue-data-entry.js +5 -1
  141. package/dist/venue-data.d.ts +1 -1
  142. package/dist/venue-data.js +5 -2
  143. package/dist/venues/amerant-bank-arena.data.d.ts +2 -0
  144. package/dist/venues/amerant-bank-arena.data.js +9 -0
  145. package/dist/venues/amerant-bank-arena.osm.data.d.ts +2 -0
  146. package/dist/venues/amerant-bank-arena.osm.data.js +47 -0
  147. package/dist/venues/american-airlines-center.data.d.ts +2 -0
  148. package/dist/venues/american-airlines-center.data.js +9 -0
  149. package/dist/venues/american-airlines-center.osm.data.d.ts +2 -0
  150. package/dist/venues/american-airlines-center.osm.data.js +57 -0
  151. package/dist/venues/ball-arena.data.d.ts +2 -0
  152. package/dist/venues/ball-arena.data.js +9 -0
  153. package/dist/venues/ball-arena.osm.data.d.ts +2 -0
  154. package/dist/venues/ball-arena.osm.data.js +63 -0
  155. package/dist/venues/bell-centre.data.d.ts +2 -0
  156. package/dist/venues/bell-centre.data.js +9 -0
  157. package/dist/venues/bell-centre.osm.data.d.ts +2 -0
  158. package/dist/venues/bell-centre.osm.data.js +24 -0
  159. package/dist/venues/benchmark-international-arena.data.d.ts +2 -0
  160. package/dist/venues/benchmark-international-arena.data.js +9 -0
  161. package/dist/venues/benchmark-international-arena.osm.data.d.ts +2 -0
  162. package/dist/venues/benchmark-international-arena.osm.data.js +57 -0
  163. package/dist/venues/bridgestone-arena.data.d.ts +2 -0
  164. package/dist/venues/bridgestone-arena.data.js +9 -0
  165. package/dist/venues/bridgestone-arena.osm.data.d.ts +2 -0
  166. package/dist/venues/bridgestone-arena.osm.data.js +43 -0
  167. package/dist/venues/canada-life-centre.data.d.ts +2 -0
  168. package/dist/venues/canada-life-centre.data.js +9 -0
  169. package/dist/venues/canada-life-centre.osm.data.d.ts +2 -0
  170. package/dist/venues/canada-life-centre.osm.data.js +35 -0
  171. package/dist/venues/canadian-tire-centre.data.d.ts +2 -0
  172. package/dist/venues/canadian-tire-centre.data.js +9 -0
  173. package/dist/venues/canadian-tire-centre.osm.data.d.ts +2 -0
  174. package/dist/venues/canadian-tire-centre.osm.data.js +45 -0
  175. package/dist/venues/capital-one-arena.data.d.ts +2 -0
  176. package/dist/venues/capital-one-arena.data.js +9 -0
  177. package/dist/venues/capital-one-arena.osm.data.d.ts +2 -0
  178. package/dist/venues/capital-one-arena.osm.data.js +22 -0
  179. package/dist/venues/climate-pledge-arena.data.d.ts +2 -0
  180. package/dist/venues/climate-pledge-arena.data.js +9 -0
  181. package/dist/venues/climate-pledge-arena.osm.data.d.ts +2 -0
  182. package/dist/venues/climate-pledge-arena.osm.data.js +32 -0
  183. package/dist/venues/crypto-com-arena.data.d.ts +2 -0
  184. package/dist/venues/crypto-com-arena.data.js +9 -0
  185. package/dist/venues/crypto-com-arena.osm.data.d.ts +2 -0
  186. package/dist/venues/crypto-com-arena.osm.data.js +64 -0
  187. package/dist/venues/delta-center.data.d.ts +2 -0
  188. package/dist/venues/delta-center.data.js +9 -0
  189. package/dist/venues/delta-center.osm.data.d.ts +2 -0
  190. package/dist/venues/delta-center.osm.data.js +40 -0
  191. package/dist/venues/enterprise-center.data.d.ts +2 -0
  192. package/dist/venues/enterprise-center.data.js +9 -0
  193. package/dist/venues/enterprise-center.osm.data.d.ts +2 -0
  194. package/dist/venues/enterprise-center.osm.data.js +35 -0
  195. package/dist/venues/grand-casino-arena.data.d.ts +2 -0
  196. package/dist/venues/grand-casino-arena.data.js +9 -0
  197. package/dist/venues/grand-casino-arena.osm.data.d.ts +2 -0
  198. package/dist/venues/grand-casino-arena.osm.data.js +37 -0
  199. package/dist/venues/honda-center.data.d.ts +2 -0
  200. package/dist/venues/honda-center.data.js +9 -0
  201. package/dist/venues/honda-center.osm.data.d.ts +2 -0
  202. package/dist/venues/honda-center.osm.data.js +46 -0
  203. package/dist/venues/keybank-center.data.d.ts +2 -0
  204. package/dist/venues/keybank-center.data.js +9 -0
  205. package/dist/venues/keybank-center.osm.data.d.ts +2 -0
  206. package/dist/venues/keybank-center.osm.data.js +34 -0
  207. package/dist/venues/lenovo-center.data.d.ts +2 -0
  208. package/dist/venues/lenovo-center.data.js +9 -0
  209. package/dist/venues/lenovo-center.osm.data.d.ts +2 -0
  210. package/dist/venues/lenovo-center.osm.data.js +51 -0
  211. package/dist/venues/little-caesars-arena.data.d.ts +2 -0
  212. package/dist/venues/little-caesars-arena.data.js +9 -0
  213. package/dist/venues/little-caesars-arena.osm.data.d.ts +2 -0
  214. package/dist/venues/little-caesars-arena.osm.data.js +64 -0
  215. package/dist/venues/madison-square-garden.data.d.ts +2 -0
  216. package/dist/venues/madison-square-garden.data.js +9 -0
  217. package/dist/venues/madison-square-garden.osm.data.d.ts +2 -0
  218. package/dist/venues/madison-square-garden.osm.data.js +47 -0
  219. package/dist/venues/nationwide-arena.data.d.ts +2 -0
  220. package/dist/venues/nationwide-arena.data.js +9 -0
  221. package/dist/venues/nationwide-arena.osm.data.d.ts +2 -0
  222. package/dist/venues/nationwide-arena.osm.data.js +50 -0
  223. package/dist/venues/ppg-paints-arena.data.d.ts +2 -0
  224. package/dist/venues/ppg-paints-arena.data.js +9 -0
  225. package/dist/venues/ppg-paints-arena.osm.data.d.ts +2 -0
  226. package/dist/venues/ppg-paints-arena.osm.data.js +31 -0
  227. package/dist/venues/prudential-center.data.d.ts +2 -0
  228. package/dist/venues/prudential-center.data.js +9 -0
  229. package/dist/venues/prudential-center.osm.data.d.ts +2 -0
  230. package/dist/venues/prudential-center.osm.data.js +41 -0
  231. package/dist/venues/rogers-arena.data.d.ts +2 -0
  232. package/dist/venues/rogers-arena.data.js +10 -0
  233. package/dist/venues/rogers-arena.osm.data.d.ts +2 -0
  234. package/dist/venues/rogers-arena.osm.data.js +27 -0
  235. package/dist/venues/rogers-place.data.d.ts +2 -0
  236. package/dist/venues/rogers-place.data.js +9 -0
  237. package/dist/venues/rogers-place.osm.data.d.ts +2 -0
  238. package/dist/venues/rogers-place.osm.data.js +40 -0
  239. package/dist/venues/sap-center.data.d.ts +2 -0
  240. package/dist/venues/sap-center.data.js +9 -0
  241. package/dist/venues/sap-center.osm.data.d.ts +2 -0
  242. package/dist/venues/sap-center.osm.data.js +54 -0
  243. package/dist/venues/scotiabank-arena.data.d.ts +2 -0
  244. package/dist/venues/scotiabank-arena.data.js +9 -0
  245. package/dist/venues/scotiabank-arena.osm.data.d.ts +2 -0
  246. package/dist/venues/scotiabank-arena.osm.data.js +45 -0
  247. package/dist/venues/scotiabank-saddledome.data.d.ts +2 -0
  248. package/dist/venues/scotiabank-saddledome.data.js +9 -0
  249. package/dist/venues/scotiabank-saddledome.osm.data.d.ts +2 -0
  250. package/dist/venues/scotiabank-saddledome.osm.data.js +46 -0
  251. package/dist/venues/t-mobile-arena.data.d.ts +2 -0
  252. package/dist/venues/t-mobile-arena.data.js +9 -0
  253. package/dist/venues/t-mobile-arena.osm.data.d.ts +2 -0
  254. package/dist/venues/t-mobile-arena.osm.data.js +50 -0
  255. package/dist/venues/td-garden.data.d.ts +2 -0
  256. package/dist/venues/td-garden.data.js +9 -0
  257. package/dist/venues/td-garden.osm.data.d.ts +2 -0
  258. package/dist/venues/td-garden.osm.data.js +24 -0
  259. package/dist/venues/ubs-arena.data.d.ts +2 -0
  260. package/dist/venues/ubs-arena.data.js +9 -0
  261. package/dist/venues/ubs-arena.osm.data.d.ts +2 -0
  262. package/dist/venues/ubs-arena.osm.data.js +33 -0
  263. package/dist/venues/united-center.data.d.ts +2 -0
  264. package/dist/venues/united-center.data.js +9 -0
  265. package/dist/venues/united-center.osm.data.d.ts +2 -0
  266. package/dist/venues/united-center.osm.data.js +56 -0
  267. package/dist/venues/xfinity-mobile-arena.data.d.ts +2 -0
  268. package/dist/venues/xfinity-mobile-arena.data.js +9 -0
  269. package/dist/venues/xfinity-mobile-arena.osm.data.d.ts +2 -0
  270. package/dist/venues/xfinity-mobile-arena.osm.data.js +47 -0
  271. package/dist/venues-entry.d.ts +1 -0
  272. package/dist/venues-entry.js +2 -0
  273. package/dist/venues.all.d.ts +1 -0
  274. package/dist/venues.all.js +6 -0
  275. package/dist/venues.d.ts +16 -4
  276. package/dist/venues.index.d.ts +8 -0
  277. package/dist/venues.index.js +34 -0
  278. package/dist/venues.js +45 -8
  279. package/dist/venues.osm.data.d.ts +0 -2
  280. package/dist/venues.osm.data.js +0 -2
  281. package/dist/version.d.ts +1 -1
  282. package/dist/version.js +1 -1
  283. package/dist/walk/vancouver.data.d.ts +2 -0
  284. package/dist/walk/vancouver.data.js +1291 -0
  285. package/dist/walk.d.ts +24 -1
  286. package/dist/walk.data.d.ts +2 -2
  287. package/dist/walk.data.js +13 -1293
  288. package/dist/walk.full.d.ts +1 -0
  289. package/dist/walk.full.js +5 -0
  290. package/dist/walk.index.d.ts +7 -0
  291. package/dist/walk.index.js +3 -0
  292. package/dist/walk.js +69 -7
  293. package/package.json +7 -2
@@ -1,7 +1,7 @@
1
1
  import { el, num } from "../format.js";
2
2
  import { feet, reachOf, venueLayout } from "../pool.js";
3
3
  import { deckMarkup, paintDefs, poolIds } from "../pool.kit.js";
4
- import { KYOGIJO_STRINGS } from "../strings.js";
4
+ import { KYOGIJO_STRINGS } from "../strings.core.js";
5
5
  import { artistic } from "./artistic.js";
6
6
  import { diving } from "./dive.js";
7
7
  import { swimming } from "./pool.js";
package/dist/target.js CHANGED
@@ -9,7 +9,7 @@ import { esc, el, num } from "./format.js";
9
9
  import { layerTable, renderLayers } from "./layers.js";
10
10
  import { chooseLeague, lacrosseOf } from "./leagues.js";
11
11
  import { KYOGIJO_BASE_STYLE } from "./style.js";
12
- import { KYOGIJO_STRINGS, fill } from "./strings.js";
12
+ import { KYOGIJO_STRINGS, fill } from "./strings.core.js";
13
13
  import { soccerSpec } from "./surfaces/soccer-spec.js";
14
14
  import { NHL, FEET_PER_METRE } from "./geometry.js";
15
15
  import { WATER_POLO } from "./pool.figures.js";
@@ -4,7 +4,7 @@ import { safeColour } from "./colour.js";
4
4
  import { esc, num } from "./format.js";
5
5
  import { isNum, markAttrs, place } from "./layers.env.js";
6
6
  import { FRAMES } from "./frames.js";
7
- import { fill } from "./strings.js";
7
+ import { fill } from "./strings.core.js";
8
8
  /** The class and the custom property that colour a mark: its own colour, else its team's, else the layer's. */
9
9
  export function paintOf(d) {
10
10
  const mine = safeColour(d?.color);
@@ -4,7 +4,7 @@ import { esc, num } from "./format.js";
4
4
  import { FRAMES } from "./frames.js";
5
5
  import { formationById, positionName } from "./formations.js";
6
6
  import { isNum, markAttrs, newMade, opacityOf, place, unitOfLayer } from "./layers.env.js";
7
- import { fill } from "./strings.js";
7
+ import { fill } from "./strings.core.js";
8
8
  import { attrs, labelOf, paintOf, round, titled } from "./team.common.js";
9
9
  import { FEET_PER } from "./units.js";
10
10
  /** The sports whose surface a formation of a sport is drawn on. */
@@ -10,7 +10,7 @@ import { isNum, newMade, opacityOf, unitOfLayer } from "./layers.env.js";
10
10
  import { chooseLeague } from "./leagues.js";
11
11
  import { SURFACES, computeFormation, formationOf } from "./team.formation.js";
12
12
  import { attrs, labelOf, paintOf, round, titled } from "./team.common.js";
13
- import { fill } from "./strings.js";
13
+ import { fill } from "./strings.core.js";
14
14
  import { FEET_PER } from "./units.js";
15
15
  /** The sports whose team turns round for the visitors: a side that attacks the other end. Baseball's fielders, football's offence and a cricket field do not. */
16
16
  const TURNS = new Set(["soccer", "nhl", "nba", "rugby", "afl", "volleyball", "handball", "waterpolo", "fieldhockey", "netball"]);
@@ -6,7 +6,7 @@ import { esc, num } from "./format.js";
6
6
  import { buildZoneSet } from "./heat.zones.js";
7
7
  import { isNum, newMade, opacityOf, place, placeBack, toArray, unitOfLayer } from "./layers.env.js";
8
8
  import { headPath } from "./layers.marks.js";
9
- import { fill } from "./strings.js";
9
+ import { fill } from "./strings.core.js";
10
10
  import { attrs, frameNote, labelOf, round, teamClass, teamKey, teamLabel, titled, unitWord } from "./team.common.js";
11
11
  import { FEET_PER } from "./units.js";
12
12
  /** The movements of a layer that have a start and a way to go, put on the surface. A movement with no length is kept (it has no direction, and counts for nothing in a flow or a rose). */
@@ -4,7 +4,7 @@
4
4
  import { esc, num } from "./format.js";
5
5
  import { isNum, markAttrs, newMade, opacityOf, place, toArray, unitOfLayer } from "./layers.env.js";
6
6
  import { curveBetween, curvePath, headPath } from "./layers.marks.js";
7
- import { fill } from "./strings.js";
7
+ import { fill } from "./strings.core.js";
8
8
  import { attrs, frameNote, round, teamClass, teamKey, titled } from "./team.common.js";
9
9
  import { FEET_PER } from "./units.js";
10
10
  const idText = (id) => String(id);
@@ -5,7 +5,7 @@ import { num } from "./format.js";
5
5
  import { markAttrs, opacityOf, newMade, toArray, unitOfLayer } from "./layers.env.js";
6
6
  import { attrs, dots, frameNote, squareWord, unitWord, groupByTeam, paintOf, placeAll, polygonPath, round, teamClass, teamKey, teamLabel, titled, labelOf } from "./team.common.js";
7
7
  import { convexHull, delaunay, polygonArea, polygonCentroid, triangulationEdges, voronoiCells } from "./team.geometry.js";
8
- import { fill } from "./strings.js";
8
+ import { fill } from "./strings.core.js";
9
9
  import { FEET_PER } from "./units.js";
10
10
  const who = (p) => labelOf(p.d);
11
11
  /** The share of the surface (0 to 1) nearer each site than any other, counted on a grid of cells laid over the surface and kept where the surface is. A repeated site has nothing. */
@@ -1,4 +1,5 @@
1
1
  import "./full.ts";
2
+ import "./venues.all.ts";
2
3
  export { mountKyogijoTurn, mountTurn, turnSupported } from "./turn.dom.ts";
3
4
  export type { KyogijoTurn } from "./turn.dom.ts";
4
5
  export { buildTurn, floorOptions, openingView } from "./turn.model.ts";
@@ -1,5 +1,7 @@
1
1
  // The 3D view: a surface as a floor that turns, with a net, a basket, a goal or a pair of posts standing on it.
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 { mountKyogijoTurn, mountTurn, turnSupported } from "./turn.dom.js";
4
6
  export { buildTurn, floorOptions, openingView } from "./turn.model.js";
5
7
  export { turnDirection } from "./turn.camera.js";
@@ -114,6 +114,11 @@ export declare function covered(b: Box3, view: TurnView, at: Placement, distance
114
114
  * extent of the scene on the screen changes with the pitch. The perspective bends the sum, so it is found by a few rounds of scaling and re-centring; six is plenty.
115
115
  */
116
116
  export declare function fit(b: Box3, view: TurnView, w: number, h: number, distance: number, pad?: number): Placement;
117
+ /**
118
+ * The scale (screen pixels for a pixel of the scene, at a zoom of 1) a scene's box is fitted at in a container, the largest any tip of the view makes it: a view tipped towards the horizon is fitted larger, and the layers are made
119
+ * for the largest so that tipping the view does not make them again.
120
+ */
121
+ export declare function viewScale(b: Box3, w: number, h: number, lens?: number): number;
117
122
  /** A 4 by 4 matrix, as CSS writes it in `matrix3d`: sixteen numbers, a column after a column. */
118
123
  export type Mat4 = readonly number[];
119
124
  /** Two matrices as one: `b` first, then `a`. */
@@ -179,6 +179,14 @@ export function fit(b, view, w, h, distance, pad = 0.03) {
179
179
  lastFit = { key, at: { ...at } };
180
180
  return at;
181
181
  }
182
+ /**
183
+ * The scale (screen pixels for a pixel of the scene, at a zoom of 1) a scene's box is fitted at in a container, the largest any tip of the view makes it: a view tipped towards the horizon is fitted larger, and the layers are made
184
+ * for the largest so that tipping the view does not make them again.
185
+ */
186
+ export function viewScale(b, w, h, lens) {
187
+ const distance = eyeDistance(w, h, lens);
188
+ return Math.max(...[0, 30, 58, 70, PITCH_MAX].map((pitch) => fit(b, { yaw: 0, pitch, zoom: 1 }, w, h, distance).k));
189
+ }
182
190
  /** Two matrices as one: `b` first, then `a`. */
183
191
  export function multiply(a, b) {
184
192
  const out = new Array(16);
package/dist/turn.dom.js CHANGED
@@ -3,14 +3,14 @@
3
3
  // reduced motion gets jumps for glides, and where the browser cannot draw in 3D the flat drawing stays. Nothing is polled and nothing runs while the view is
4
4
  // still: the elements' `transform`s are written when the view changes, and a glide between viewpoints is a short run of animation frames.
5
5
  import { drawKyogijo } from "./draw.js";
6
- import { STEP, TURN_PRESET_NAMES, clampView, drag, nearest, nudge, presetOf, presetView, step, turnDirection, wheelTip } from "./turn.camera.js";
6
+ import { STEP, TURN_PRESET_NAMES, clampView, drag, nearest, nudge, presetOf, presetView, step, turnDirection, viewScale, wheelTip } from "./turn.camera.js";
7
7
  import { buildTurn, floorOptions, openingView, turnWords } from "./turn.model.js";
8
8
  import { controlsMarkup, layoutOf, turnMarkupOf, worldMarkup } from "./turn.markup.js";
9
9
  import { KYOGIJO_TURN_STYLE } from "./turn.style.js";
10
10
  import { esc } from "./format.js";
11
11
  import { turnBoardMarkup } from "./overlay.js";
12
12
  import { attachOutside3d } from "./outside.dom.js";
13
- import { TIER_PROFILES, createGovernor, handheld, layerBudget, qualityOf, rasterOf, rasterShares, tierOf } from "./quality.js";
13
+ import { TIER_PROFILES, createGovernor, handheld, layerBudget, qualityOf, rasterOf, rasterShares, tierOf, viewShare, FLOOR_SHARE } from "./quality.js";
14
14
  import { size } from "./turn.kit.js";
15
15
  /** True where the page can draw a plane in 3D by one `matrix3d`: that is, nearly everywhere with a stylesheet. */
16
16
  export function turnSupported(win = typeof window === "undefined" ? undefined : window) {
@@ -50,6 +50,12 @@ export function mountTurn(host, options, settings, build) {
50
50
  let tier = tierOf(quality);
51
51
  // (Set again below, once the model is built, for a view that has no tiers.)
52
52
  const isHandheld = handheld(win);
53
+ /**
54
+ * The share of its size a layer needs to be as fine as this screen shows it (`viewShare`): a district on a phone is drawn at a sixth of the scene's own size, so its layers need a quarter as many pixels on a side. It is worked out from the container's
55
+ * size and the zoom, and held while they are as they are: `settleRaster` draws the layers again when they change enough to need another.
56
+ */
57
+ let ceiling = 1;
58
+ const ceilingFor = (of, width, height, zoom) => (of.tiered === true ? viewShare(viewScale(of.box, width, height, settings.lens ?? of.lens), zoom) : 1);
53
59
  /** The share of its size each layer is made at for a model, now: one number when they all are, one each when the biggest are held to a budget of pixels. */
54
60
  const rasterFor = (of) => {
55
61
  // (Only a model that has tiers is made smaller: a surface on its own is small, and nothing of it would be left out.)
@@ -58,16 +64,21 @@ export function mountTurn(host, options, settings, build) {
58
64
  const dpr = win?.devicePixelRatio ?? 1;
59
65
  const share = rasterOf(quality, tier, dpr, isHandheld);
60
66
  const budget = layerBudget(tier, isHandheld);
61
- if (share === 1 && budget === Infinity)
67
+ if (share === 1 && budget === Infinity && ceiling === 1)
62
68
  return 1;
63
69
  const boxes = [[of.viewBox.w * of.scale, of.viewBox.h * of.scale], ...of.planes.map((p) => { const [w, h] = size(p); return [w * of.scale, h * of.scale]; })];
64
- return rasterShares(boxes, share, dpr, budget);
70
+ return rasterShares(boxes, share, dpr, budget, ceiling, FLOOR_SHARE);
65
71
  };
66
72
  const sameRaster = (a, b) => (typeof a === "number" || typeof b === "number" ? a === b : a.length === b.length && a.every((x, i) => x === b[i]));
67
73
  let current = options;
68
74
  let model = build(options, { ...settings, quality: tier });
69
75
  if (model.tiered !== true)
70
76
  tier = "high";
77
+ // (The container is not written yet: its width is the host's and its height the one the stylesheet gives it, 16 by 10 or 5 by 4 on a phone; `settleRaster` corrects it once the view is in the page.)
78
+ {
79
+ const width = host.clientWidth > 0 ? host.clientWidth : (settings.size?.width ?? 960);
80
+ ceiling = ceilingFor(model, width, Math.max(260, width * (width <= 560 ? 0.8 : 0.625)), model.view.zoom);
81
+ }
71
82
  let raster = rasterFor(model);
72
83
  /** The models built at each tier for the options now, so that a step back to a tier is not built again. */
73
84
  let made = new Map([[tier, model]]);
@@ -155,6 +166,7 @@ export function mountTurn(host, options, settings, build) {
155
166
  crowd();
156
167
  root.dataset.quality = quality;
157
168
  root.dataset.tier = tier;
169
+ root.dataset.share = String(ceiling);
158
170
  // ---- Quality: in `auto`, the frames the view makes while it turns decide the tier. ----
159
171
  let governor = quality === "auto" && win !== null && model.tiered === true ? createGovernor(tier, settings.qualityTuning) : undefined;
160
172
  let meterFrame;
@@ -230,6 +242,7 @@ export function mountTurn(host, options, settings, build) {
230
242
  const known = made.get(tier);
231
243
  model = known ?? build(current, { ...settings, quality: tier, id: settings.id ?? baseId, venue, preset: undefined, view });
232
244
  made.set(tier, model);
245
+ ceiling = ceilingFor(model, stage.clientWidth || 960, stage.clientHeight || 600, shown.zoom);
233
246
  raster = rasterFor(model);
234
247
  const layout = layoutOf(model, shown, stage.clientWidth || 960, stage.clientHeight || 600, settings.lens, false, raster);
235
248
  const world = root.querySelector(".ky-turn-world");
@@ -249,6 +262,7 @@ export function mountTurn(host, options, settings, build) {
249
262
  crowd();
250
263
  root.dataset.quality = quality;
251
264
  root.dataset.tier = tier;
265
+ root.dataset.share = String(ceiling);
252
266
  };
253
267
  /** The governor stepped: draw at the new tier. */
254
268
  const retier = (next) => {
@@ -273,6 +287,30 @@ export function mountTurn(host, options, settings, build) {
273
287
  if (glyph !== null)
274
288
  glyph.textContent = playing ? "❚❚" : "▶";
275
289
  };
290
+ // ---- The pixels of the layers follow the view: a zoom or a new size of the container may need a finer or allow a coarser share, and the layers are drawn again at it. ----
291
+ let seenZoom = shown.zoom;
292
+ let settling;
293
+ /** Draw the layers again if the view needs another share than they were made at. */
294
+ const settleRaster = () => {
295
+ settling = undefined;
296
+ if (!alive || model.tiered !== true)
297
+ return;
298
+ if (ceilingFor(model, stage.clientWidth || 960, stage.clientHeight || 600, shown.zoom) === ceiling)
299
+ return;
300
+ renderWorld();
301
+ paint(shown);
302
+ };
303
+ /**
304
+ * The view changed in a way that may change the share it needs. A finer share is drawn soon (a moment after the zoom has stopped, so that a pinch is not drawn again at every step), a coarser one only after a while at rest: until
305
+ * then the layers are finer than needed, which costs memory and nothing to the eye.
306
+ */
307
+ const wantRaster = () => {
308
+ if (!alive || model.tiered !== true || win === null)
309
+ return;
310
+ clearTimeout(settling);
311
+ const next = ceilingFor(model, stage.clientWidth || 960, stage.clientHeight || 600, shown.zoom);
312
+ settling = next === ceiling ? undefined : win.setTimeout(settleRaster, next > ceiling ? 160 : 1500);
313
+ };
276
314
  /** Put a view on the screen. */
277
315
  const paint = (now) => {
278
316
  const width = stage.clientWidth || 960;
@@ -298,6 +336,10 @@ export function mountTurn(host, options, settings, build) {
298
336
  if (faded[i] !== o)
299
337
  one.style.opacity = faded[i] = o;
300
338
  });
339
+ if (now.zoom !== seenZoom) {
340
+ seenZoom = now.zoom;
341
+ wantRaster();
342
+ }
301
343
  touched();
302
344
  };
303
345
  const label = () => {
@@ -308,6 +350,8 @@ export function mountTurn(host, options, settings, build) {
308
350
  };
309
351
  paint(shown);
310
352
  label();
353
+ // The container is in the page now: the share its layers need, at its real size.
354
+ settleRaster();
311
355
  const stop = () => {
312
356
  if (flight !== undefined)
313
357
  win?.cancelAnimationFrame(flight.frame);
@@ -602,7 +646,12 @@ export function mountTurn(host, options, settings, build) {
602
646
  // ---- The size of the box. ----
603
647
  let observer;
604
648
  if (typeof ResizeObserver === "function") {
605
- observer = new ResizeObserver(() => alive && paint(shown));
649
+ observer = new ResizeObserver(() => {
650
+ if (!alive)
651
+ return;
652
+ paint(shown);
653
+ wantRaster();
654
+ });
606
655
  observer.observe(stage);
607
656
  }
608
657
  // Nothing moves until the reader asks, unless the page did: `autoPlay` starts it, but not for a reader who prefers reduced motion (`"force"` does).
@@ -719,6 +768,7 @@ export function mountTurn(host, options, settings, build) {
719
768
  if (!alive)
720
769
  return;
721
770
  alive = false;
771
+ clearTimeout(settling);
722
772
  outside?.destroy();
723
773
  stop();
724
774
  stopTick();
@@ -1,4 +1,4 @@
1
- import { KYOGIJO_STRINGS } from "./strings.ts";
1
+ import { KYOGIJO_STRINGS } from "./strings.core.ts";
2
2
  import { type PresetTable, type TurnDirection, type TurnPreset, type TurnView } from "./turn.camera.ts";
3
3
  import type { Plane } from "./turn.kit.ts";
4
4
  import { type UprightOptions, type Uprights } from "./uprights.ts";
@@ -4,7 +4,7 @@ import { describe, drawKyogijo } from "./draw.js";
4
4
  import { hash } from "./format.js";
5
5
  import { lengthUnit } from "./common.js";
6
6
  import { convertLength } from "./units.js";
7
- import { KYOGIJO_STRINGS } from "./strings.js";
7
+ import { KYOGIJO_STRINGS } from "./strings.core.js";
8
8
  import { TURN_DEFAULT, clampView, presetView } from "./turn.camera.js";
9
9
  import { describeUprights, planesOf, uprightsFor } from "./uprights.js";
10
10
  import { resolveCrowd } from "./crowd.js";
package/dist/uprights.js CHANGED
@@ -13,7 +13,7 @@ import { NHL_RINK } from "./leagues/hockey.js";
13
13
  import { chooseLeague, courtOf, diamondOf, fieldOf, rinkOf } from "./leagues.js";
14
14
  import { fenceFor, heldPark, parkWallsIn } from "./parks.core.js";
15
15
  import { fenceOutline } from "./surfaces/baseball.js";
16
- import { KYOGIJO_STRINGS, fill } from "./strings.js";
16
+ import { KYOGIJO_STRINGS, fill } from "./strings.core.js";
17
17
  import { soccerSpec } from "./surfaces/soccer-spec.js";
18
18
  import { thinnest } from "./turn.kit.js";
19
19
  import { scoreboard } from "./uprights.board.js";
@@ -1,5 +1,7 @@
1
1
  export { loadArena, loadGround, loadPark, loadVenueDataFor, venueDataKeysFor, venueName } from "./venue-data.ts";
2
2
  export type { VenueDataKeys } from "./venue-data.ts";
3
+ export { loadOutside } from "./walk.ts";
4
+ export { loadStrings } from "./strings.core.ts";
3
5
  export type { Arena } from "./arenas.core.ts";
4
6
  export type { Ground } from "./grounds.core.ts";
5
7
  export type { Park } from "./parks.core.ts";
@@ -1,2 +1,6 @@
1
- // The data of the venues a page shows, one file each, read when asked for: `loadVenueDataFor` for the venues of a district, `loadArena`, `loadPark` and `loadGround` for one, `venueName` to list the venues by name without reading any of them.
1
+ // The data of the venues a page shows, one file each, read when asked for (`loadOutside` the walkable ground of a crowd outside them, and `loadStrings` the words of a language, in the same way): `loadVenueDataFor` for the venues of a district, `loadArena`, `loadPark` and `loadGround` for one, `venueName` to list the venues by name without reading any of them.
2
2
  export { loadArena, loadGround, loadPark, loadVenueDataFor, venueDataKeysFor, venueName } from "./venue-data.js";
3
+ // The walkable ground of the crowd outside some venues (OpenStreetMap, ODbL 1.0), one file for each district, read when the venues have a crowd outside to show.
4
+ export { loadOutside } from "./walk.js";
5
+ // The words of a language, one file each, read before the first draw in it.
6
+ export { loadStrings } from "./strings.core.js";
@@ -39,7 +39,7 @@ export interface VenueDataKeys {
39
39
  */
40
40
  export declare function venueDataKeysFor(venues: readonly string[]): VenueDataKeys;
41
41
  /**
42
- * The records of the venues a page is about to draw, each read from its own file and no other, and held for the drawing: what `planDistrict`, `drawDistrict` and `mountDistrictTurn` of the lean district read. Await it before the
42
+ * The records of the venues a page is about to draw, each read from its own file (an arena of the NHL's real venue from its own two) and no other, and held for the drawing: what `planDistrict`, `drawDistrict` and `mountDistrictTurn` of the lean district read. Await it before the
43
43
  * first call and again when the venues change; a venue whose records are held is not read twice.
44
44
  * @example
45
45
  * ```ts
@@ -9,6 +9,8 @@ import { registerParks } from "./parks.core.js";
9
9
  import { PARK_INDEX } from "./parks.index.js";
10
10
  import { KODOKAN_NAME } from "./kodokan.js";
11
11
  import { STADIUMS, stadiumKind } from "./stadiums.js";
12
+ import { VENUE_INDEX } from "./venues.index.js";
13
+ import { loadVenue } from "./venues.js";
12
14
  /** The files read, by kind and key, each once: asking again gives the same promise, and one that failed (the network) is asked for again next time. */
13
15
  const kept = new Map();
14
16
  function read(kind, index, id, keep) {
@@ -75,7 +77,7 @@ export function venueDataKeysFor(venues) {
75
77
  return keys;
76
78
  }
77
79
  /**
78
- * The records of the venues a page is about to draw, each read from its own file and no other, and held for the drawing: what `planDistrict`, `drawDistrict` and `mountDistrictTurn` of the lean district read. Await it before the
80
+ * The records of the venues a page is about to draw, each read from its own file (an arena of the NHL's real venue from its own two) and no other, and held for the drawing: what `planDistrict`, `drawDistrict` and `mountDistrictTurn` of the lean district read. Await it before the
79
81
  * first call and again when the venues change; a venue whose records are held is not read twice.
80
82
  * @example
81
83
  * ```ts
@@ -88,7 +90,8 @@ export function venueDataKeysFor(venues) {
88
90
  */
89
91
  export async function loadVenueDataFor(venues) {
90
92
  const keys = venueDataKeysFor(venues);
91
- await Promise.all([...keys.arenas.map(loadArena), ...keys.parks.map(loadPark), ...keys.grounds.map(loadGround)]);
93
+ // An arena of the NHL also has a real venue (its facts and its outline, two files), which the district draws it from.
94
+ await Promise.all([...keys.arenas.map(loadArena), ...keys.arenas.filter((id) => Object.hasOwn(VENUE_INDEX, id)).map(loadVenue), ...keys.parks.map(loadPark), ...keys.grounds.map(loadGround)]);
92
95
  }
93
96
  const nameIn = (index, id, language) => (id !== undefined && Object.hasOwn(index, id) ? (language === "ja" ? index[id].nameJa : index[id].name) : undefined);
94
97
  /**
@@ -0,0 +1,2 @@
1
+ import type { RealVenueData } from "../venues.ts";
2
+ export declare const VENUE: RealVenueData;
@@ -0,0 +1,9 @@
1
+ export const VENUE = {
2
+ "id": "amerant-bank-arena",
3
+ "wikidata": "Q795526",
4
+ "division": "atlantic",
5
+ "en": { "title": "Amerant Bank Arena", "revision": 1379821144 },
6
+ "seats": { "hockey": 19250, "source": "wikipedia", "wikidata": 20737, "read": "the infobox's figure for ice hockey, 19,250 (at least 20,000 with standing room); Wikidata's one capacity (20,737) has no sport and is the basketball one" },
7
+ "tiers": { "count": 2, "basis": "plausible", "read": "no source says how many seating levels there are: two bowls are drawn; the article speaks of 70 suites and 2,623 club seats, which are not seating bowls" },
8
+ "roof": { "kind": "fixed", "basis": "plausible", "read": "an indoor arena: a fixed roof, as nothing says otherwise" },
9
+ };
@@ -0,0 +1,2 @@
1
+ import type { VenueOsm } from "../venues.ts";
2
+ export declare const OSM: VenueOsm;
@@ -0,0 +1,47 @@
1
+ export const OSM = {
2
+ "source": "way/43903801",
3
+ "read": "2026-10-20",
4
+ "base": "2026-10-20T23:14:51Z",
5
+ "licence": "ODbL-1.0",
6
+ "attribution": "(c) OpenStreetMap contributors, ODbL 1.0, openstreetmap.org/copyright",
7
+ "axis": { "heading": 90, "basis": "none", "strength": 1.16, "elongation": 1.02, "centre": [-80.325443, 26.158421] },
8
+ "ring": [
9
+ [-80.324676, 26.158684],
10
+ [-80.324614, 26.158588],
11
+ [-80.324552, 26.158446],
12
+ [-80.324708, 26.158215],
13
+ [-80.324608, 26.158149],
14
+ [-80.324762, 26.15801],
15
+ [-80.324661, 26.157905],
16
+ [-80.325085, 26.157719],
17
+ [-80.325365, 26.157557],
18
+ [-80.3254, 26.157691],
19
+ [-80.325621, 26.157659],
20
+ [-80.325627, 26.157763],
21
+ [-80.325924, 26.157768],
22
+ [-80.326026, 26.157894],
23
+ [-80.326082, 26.157998],
24
+ [-80.326126, 26.157984],
25
+ [-80.326144, 26.158016],
26
+ [-80.32619, 26.157992],
27
+ [-80.326228, 26.15808],
28
+ [-80.326258, 26.158233],
29
+ [-80.326261, 26.158415],
30
+ [-80.326242, 26.158516],
31
+ [-80.326189, 26.158716],
32
+ [-80.326139, 26.158828],
33
+ [-80.326054, 26.158935],
34
+ [-80.326022, 26.158916],
35
+ [-80.325842, 26.159111],
36
+ [-80.325688, 26.159133],
37
+ [-80.325547, 26.159133],
38
+ [-80.325544, 26.15918],
39
+ [-80.325358, 26.159169],
40
+ [-80.325129, 26.159108],
41
+ [-80.324965, 26.159041],
42
+ [-80.324812, 26.158949],
43
+ [-80.324618, 26.158787],
44
+ [-80.324672, 26.15875],
45
+ [-80.324645, 26.158707],
46
+ ],
47
+ };
@@ -0,0 +1,2 @@
1
+ import type { RealVenueData } from "../venues.ts";
2
+ export declare const VENUE: RealVenueData;
@@ -0,0 +1,9 @@
1
+ export const VENUE = {
2
+ "id": "american-airlines-center",
3
+ "wikidata": "Q463345",
4
+ "division": "central",
5
+ "en": { "title": "American Airlines Center", "revision": 1379833787 },
6
+ "seats": { "hockey": 18532, "source": "wikipedia", "wikidata": 19200, "read": "the infobox's figure for ice hockey, 18,532 (19,323 with standing room); Wikidata's one capacity (19,200) is the basketball one" },
7
+ "tiers": { "count": 2, "basis": "plausible", "read": "no source says how many seating levels there are: two bowls are drawn; the article speaks of retractable seating, which the bowl does not draw" },
8
+ "roof": { "kind": "fixed", "basis": "plausible", "read": "an indoor arena: a fixed roof, as nothing says otherwise; the article says the roof looks like a Quonset hut, a barrel vault, which the one kind of fixed roof does not draw" },
9
+ };
@@ -0,0 +1,2 @@
1
+ import type { VenueOsm } from "../venues.ts";
2
+ export declare const OSM: VenueOsm;
@@ -0,0 +1,57 @@
1
+ export const OSM = {
2
+ "source": "way/25312698",
3
+ "read": "2026-10-20",
4
+ "base": "2026-10-20T21:35:07Z",
5
+ "licence": "ODbL-1.0",
6
+ "attribution": "(c) OpenStreetMap contributors, ODbL 1.0, openstreetmap.org/copyright",
7
+ "axis": { "heading": 144, "basis": "building", "strength": 2.19, "elongation": 1.31, "centre": [-96.81028, 32.79049] },
8
+ "ring": [
9
+ [-96.810234, 32.791328],
10
+ [-96.810164, 32.791245],
11
+ [-96.810182, 32.791236],
12
+ [-96.810056, 32.791086],
13
+ [-96.810012, 32.791113],
14
+ [-96.809956, 32.791046],
15
+ [-96.809969, 32.791039],
16
+ [-96.809568, 32.790561],
17
+ [-96.809555, 32.790569],
18
+ [-96.8095, 32.790504],
19
+ [-96.809545, 32.790477],
20
+ [-96.80934, 32.790256],
21
+ [-96.809439, 32.790198],
22
+ [-96.809429, 32.790171],
23
+ [-96.80958, 32.790081],
24
+ [-96.809551, 32.790046],
25
+ [-96.809959, 32.789817],
26
+ [-96.809952, 32.789809],
27
+ [-96.81003, 32.789763],
28
+ [-96.810056, 32.789794],
29
+ [-96.810209, 32.789704],
30
+ [-96.81024, 32.789718],
31
+ [-96.810339, 32.789661],
32
+ [-96.810408, 32.789744],
33
+ [-96.810392, 32.789752],
34
+ [-96.81051, 32.789892],
35
+ [-96.810556, 32.789865],
36
+ [-96.810611, 32.789932],
37
+ [-96.810599, 32.789939],
38
+ [-96.810997, 32.790421],
39
+ [-96.81101, 32.790413],
40
+ [-96.811063, 32.790477],
41
+ [-96.811021, 32.790502],
42
+ [-96.811154, 32.790659],
43
+ [-96.811168, 32.790649],
44
+ [-96.811237, 32.790731],
45
+ [-96.811139, 32.79079],
46
+ [-96.81113, 32.790776],
47
+ [-96.810963, 32.790875],
48
+ [-96.811009, 32.790929],
49
+ [-96.810986, 32.790943],
50
+ [-96.810931, 32.790975],
51
+ [-96.810924, 32.790967],
52
+ [-96.81053, 32.791213],
53
+ [-96.810484, 32.791159],
54
+ [-96.810319, 32.791257],
55
+ [-96.810331, 32.791269],
56
+ ],
57
+ };
@@ -0,0 +1,2 @@
1
+ import type { RealVenueData } from "../venues.ts";
2
+ export declare const VENUE: RealVenueData;
@@ -0,0 +1,9 @@
1
+ export const VENUE = {
2
+ "id": "ball-arena",
3
+ "wikidata": "Q795470",
4
+ "division": "central",
5
+ "en": { "title": "Ball Arena", "revision": 1379560431 },
6
+ "seats": { "hockey": 17809, "source": "wikipedia", "wikidata": 19155, "read": "the infobox's figure for hockey (given with lacrosse), 17,809; Wikidata's capacity without a sport is 19,155 and its other (17,417) is for futsal" },
7
+ "tiers": { "count": 2, "basis": "plausible", "read": "no source says how many seating levels there are: two bowls are drawn" },
8
+ "roof": { "kind": "fixed", "basis": "plausible", "read": "an indoor arena: a fixed roof, as nothing says otherwise" },
9
+ };
@@ -0,0 +1,2 @@
1
+ import type { VenueOsm } from "../venues.ts";
2
+ export declare const OSM: VenueOsm;
@@ -0,0 +1,63 @@
1
+ export const OSM = {
2
+ "source": "way/25312645",
3
+ "read": "2026-10-20",
4
+ "base": "2026-10-20T21:33:18Z",
5
+ "licence": "ODbL-1.0",
6
+ "attribution": "(c) OpenStreetMap contributors, ODbL 1.0, openstreetmap.org/copyright",
7
+ "height": 22,
8
+ "axis": { "heading": 90, "basis": "none", "strength": 1.26, "elongation": 1.02, "centre": [-105.007573, 39.748633] },
9
+ "ring": [
10
+ [-105.008169, 39.749084],
11
+ [-105.008338, 39.748973],
12
+ [-105.008439, 39.748857],
13
+ [-105.008498, 39.748726],
14
+ [-105.008512, 39.748603],
15
+ [-105.008498, 39.748498],
16
+ [-105.008449, 39.748382],
17
+ [-105.00837, 39.748281],
18
+ [-105.008268, 39.7482],
19
+ [-105.008098, 39.748114],
20
+ [-105.008077, 39.748156],
21
+ [-105.007939, 39.748121],
22
+ [-105.00785, 39.748115],
23
+ [-105.007829, 39.748063],
24
+ [-105.007872, 39.74804],
25
+ [-105.007756, 39.747764],
26
+ [-105.007484, 39.74798],
27
+ [-105.007254, 39.748038],
28
+ [-105.007224, 39.747996],
29
+ [-105.00704, 39.74808],
30
+ [-105.006878, 39.748188],
31
+ [-105.00693, 39.748223],
32
+ [-105.00681, 39.748372],
33
+ [-105.006749, 39.748523],
34
+ [-105.006624, 39.74863],
35
+ [-105.006638, 39.748641],
36
+ [-105.006521, 39.748736],
37
+ [-105.006734, 39.748736],
38
+ [-105.006738, 39.748757],
39
+ [-105.006766, 39.748757],
40
+ [-105.006796, 39.748878],
41
+ [-105.00686, 39.748986],
42
+ [-105.00696, 39.749077],
43
+ [-105.006919, 39.749103],
44
+ [-105.007099, 39.749198],
45
+ [-105.007072, 39.74924],
46
+ [-105.006874, 39.749291],
47
+ [-105.006962, 39.749349],
48
+ [-105.00719, 39.749449],
49
+ [-105.007191, 39.749467],
50
+ [-105.00745, 39.749525],
51
+ [-105.007633, 39.749535],
52
+ [-105.007613, 39.749485],
53
+ [-105.007884, 39.749454],
54
+ [-105.007869, 39.749385],
55
+ [-105.007985, 39.749351],
56
+ [-105.007956, 39.749294],
57
+ [-105.008018, 39.749277],
58
+ [-105.007993, 39.749232],
59
+ [-105.008094, 39.749221],
60
+ [-105.008075, 39.749183],
61
+ [-105.008185, 39.749115],
62
+ ],
63
+ };
@@ -0,0 +1,2 @@
1
+ import type { RealVenueData } from "../venues.ts";
2
+ export declare const VENUE: RealVenueData;
@@ -0,0 +1,9 @@
1
+ export const VENUE = {
2
+ "id": "bell-centre",
3
+ "wikidata": "Q522282",
4
+ "division": "atlantic",
5
+ "en": { "title": "Bell Centre", "revision": 1380110375 },
6
+ "seats": { "hockey": 20962, "source": "wikipedia", "wikidata": 21273, "read": "the article's seating capacity for hockey, 20,962 (the infobox's present figure, from 2025); Wikidata's one capacity (21,273) is the first figure of 1996" },
7
+ "tiers": { "count": 3, "basis": "documented", "read": "the article says the Bell Centre is arranged in a three-tier layout: the lower 100 section, the 200 section between two levels of boxes, and the upper 300 section" },
8
+ "roof": { "kind": "fixed", "basis": "plausible", "read": "an indoor arena: a fixed roof, as nothing says otherwise" },
9
+ };
@@ -0,0 +1,2 @@
1
+ import type { VenueOsm } from "../venues.ts";
2
+ export declare const OSM: VenueOsm;