@johnmorrisdotca/kyogijo-stadiums 0.4.0 → 0.6.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 (361) hide show
  1. package/CHANGELOG.md +133 -0
  2. package/NOTICE.md +182 -2
  3. package/README.md +106 -19
  4. package/dist/annotate.js +1 -1
  5. package/dist/arenas-entry.d.ts +4 -0
  6. package/dist/arenas-entry.js +3 -0
  7. package/dist/arenas.d.ts +125 -0
  8. package/dist/arenas.data.d.ts +2 -0
  9. package/dist/arenas.data.js +3763 -0
  10. package/dist/arenas.js +72 -0
  11. package/dist/athletics/describe.d.ts +8 -0
  12. package/dist/athletics/describe.js +41 -0
  13. package/dist/athletics/events.d.ts +17 -0
  14. package/dist/athletics/events.js +48 -0
  15. package/dist/athletics/facilities.d.ts +80 -0
  16. package/dist/athletics/facilities.js +176 -0
  17. package/dist/athletics/infield.d.ts +79 -0
  18. package/dist/athletics/infield.js +166 -0
  19. package/dist/athletics/layout.d.ts +13 -0
  20. package/dist/athletics/layout.js +98 -0
  21. package/dist/athletics/oval.d.ts +57 -0
  22. package/dist/athletics/oval.js +116 -0
  23. package/dist/athletics/plan.d.ts +97 -0
  24. package/dist/athletics/plan.js +355 -0
  25. package/dist/athletics/races.d.ts +102 -0
  26. package/dist/athletics/races.js +355 -0
  27. package/dist/athletics/steeplechase.d.ts +72 -0
  28. package/dist/athletics/steeplechase.js +196 -0
  29. package/dist/athletics/stencil.d.ts +13 -0
  30. package/dist/athletics/stencil.js +85 -0
  31. package/dist/athletics/track.d.ts +54 -0
  32. package/dist/athletics/track.js +105 -0
  33. package/dist/athletics/types.d.ts +77 -0
  34. package/dist/athletics/types.js +1 -0
  35. package/dist/athletics-entry.d.ts +17 -0
  36. package/dist/athletics-entry.js +11 -0
  37. package/dist/athletics.style.d.ts +16 -0
  38. package/dist/athletics.style.js +51 -0
  39. package/dist/atlas-entry.d.ts +6 -2
  40. package/dist/atlas-entry.js +4 -2
  41. package/dist/atlas.d.ts +117 -23
  42. package/dist/atlas.js +197 -12
  43. package/dist/background.js +2 -1
  44. package/dist/budo/describe.d.ts +13 -0
  45. package/dist/budo/describe.js +120 -0
  46. package/dist/budo/dojo.api.d.ts +64 -0
  47. package/dist/budo/dojo.api.js +46 -0
  48. package/dist/budo/dojo.d.ts +72 -0
  49. package/dist/budo/dojo.js +300 -0
  50. package/dist/budo/judo.d.ts +61 -0
  51. package/dist/budo/judo.js +109 -0
  52. package/dist/budo/karate.d.ts +29 -0
  53. package/dist/budo/karate.js +80 -0
  54. package/dist/budo/kendo.d.ts +18 -0
  55. package/dist/budo/kendo.js +44 -0
  56. package/dist/budo/kimarite.d.ts +19 -0
  57. package/dist/budo/kimarite.js +33 -0
  58. package/dist/budo/kit.d.ts +16 -0
  59. package/dist/budo/kit.js +24 -0
  60. package/dist/budo/kyudo.d.ts +28 -0
  61. package/dist/budo/kyudo.js +66 -0
  62. package/dist/budo/looks.d.ts +28 -0
  63. package/dist/budo/looks.js +58 -0
  64. package/dist/budo/parts.d.ts +32 -0
  65. package/dist/budo/parts.js +10 -0
  66. package/dist/budo/plan.d.ts +64 -0
  67. package/dist/budo/plan.js +139 -0
  68. package/dist/budo/room.d.ts +133 -0
  69. package/dist/budo/room.js +111 -0
  70. package/dist/budo/sumo.d.ts +31 -0
  71. package/dist/budo/sumo.js +71 -0
  72. package/dist/budo/tatami.d.ts +55 -0
  73. package/dist/budo/tatami.js +156 -0
  74. package/dist/budo/types.d.ts +192 -0
  75. package/dist/budo/types.js +2 -0
  76. package/dist/budo-entry.d.ts +22 -0
  77. package/dist/budo-entry.js +13 -0
  78. package/dist/budo.board.d.ts +28 -0
  79. package/dist/budo.board.js +81 -0
  80. package/dist/budo.score.d.ts +18 -0
  81. package/dist/budo.score.js +52 -0
  82. package/dist/budo.style.d.ts +6 -0
  83. package/dist/budo.style.js +67 -0
  84. package/dist/charts-entry.d.ts +6 -1
  85. package/dist/charts-entry.js +3 -0
  86. package/dist/charts.athletics.d.ts +183 -0
  87. package/dist/charts.athletics.js +455 -0
  88. package/dist/charts.baseball.js +1 -1
  89. package/dist/charts.curling.heat.d.ts +24 -0
  90. package/dist/charts.curling.heat.js +116 -0
  91. package/dist/charts.curling.js +14 -3
  92. package/dist/charts.js +4 -4
  93. package/dist/charts.pool.d.ts +67 -0
  94. package/dist/charts.pool.js +76 -0
  95. package/dist/charts.skating.d.ts +204 -0
  96. package/dist/charts.skating.js +426 -0
  97. package/dist/charts.soccer.js +3 -3
  98. package/dist/charts.types.d.ts +63 -1
  99. package/dist/colour.d.ts +4 -4
  100. package/dist/colour.js +4 -4
  101. package/dist/court.d.ts +85 -2
  102. package/dist/court.js +102 -7
  103. package/dist/court.more.d.ts +46 -0
  104. package/dist/court.more.js +219 -0
  105. package/dist/courts.style.d.ts +14 -2
  106. package/dist/courts.style.js +51 -4
  107. package/dist/crowd.d.ts +164 -0
  108. package/dist/crowd.draw.d.ts +17 -0
  109. package/dist/crowd.draw.js +204 -0
  110. package/dist/crowd.js +480 -0
  111. package/dist/crowd.park.d.ts +19 -0
  112. package/dist/crowd.park.js +153 -0
  113. package/dist/curling.stats.d.ts +271 -0
  114. package/dist/curling.stats.js +301 -0
  115. package/dist/draw.d.ts +16 -0
  116. package/dist/draw.js +462 -54
  117. package/dist/element-entry.d.ts +3 -1
  118. package/dist/element-entry.js +2 -1
  119. package/dist/element.d.ts +13 -2
  120. package/dist/element.js +79 -4
  121. package/dist/emblems-source.d.ts +50 -0
  122. package/dist/emblems-source.js +56 -0
  123. package/dist/eras.d.ts +3 -1
  124. package/dist/eras.js +8 -3
  125. package/dist/features.js +204 -0
  126. package/dist/field.data.d.ts +16 -0
  127. package/dist/field.data.js +50 -0
  128. package/dist/fields.kit.d.ts +2 -2
  129. package/dist/fields.types.d.ts +24 -4
  130. package/dist/formations.js +18 -7
  131. package/dist/formations.sports.d.ts +8 -0
  132. package/dist/formations.sports.js +251 -0
  133. package/dist/frames.providers.js +71 -8
  134. package/dist/geojson.js +3 -0
  135. package/dist/geometry-entry.d.ts +2 -1
  136. package/dist/geometry-entry.js +2 -1
  137. package/dist/geometry.d.ts +20 -0
  138. package/dist/geometry.js +78 -1
  139. package/dist/grounds.d.ts +4 -0
  140. package/dist/grounds.data.js +12 -0
  141. package/dist/halls.d.ts +65 -0
  142. package/dist/halls.js +122 -0
  143. package/dist/hardwood.d.ts +31 -0
  144. package/dist/hardwood.js +157 -0
  145. package/dist/heat.js +21 -13
  146. package/dist/heat.types.d.ts +5 -0
  147. package/dist/heat.zones.d.ts +4 -2
  148. package/dist/heat.zones.js +207 -7
  149. package/dist/homeside.js +24 -0
  150. package/dist/index.d.ts +30 -4
  151. package/dist/index.js +18 -2
  152. package/dist/layers-entry.d.ts +2 -1
  153. package/dist/layers-entry.js +1 -0
  154. package/dist/layers.d.ts +2 -1
  155. package/dist/layers.env.d.ts +12 -1
  156. package/dist/layers.env.js +36 -4
  157. package/dist/layers.js +32 -13
  158. package/dist/layers.types.d.ts +9 -2
  159. package/dist/leagues/athletics.d.ts +63 -0
  160. package/dist/leagues/athletics.js +87 -0
  161. package/dist/leagues/budo.d.ts +196 -0
  162. package/dist/leagues/budo.js +105 -0
  163. package/dist/leagues/courts.d.ts +269 -4
  164. package/dist/leagues/courts.js +155 -1
  165. package/dist/leagues/hockey.js +41 -19
  166. package/dist/leagues/skating.d.ts +145 -0
  167. package/dist/leagues/skating.js +73 -0
  168. package/dist/leagues/sources.js +41 -0
  169. package/dist/leagues/types.d.ts +1 -1
  170. package/dist/leagues-entry.d.ts +4 -2
  171. package/dist/leagues-entry.js +2 -1
  172. package/dist/leagues.d.ts +17 -4
  173. package/dist/leagues.js +246 -5
  174. package/dist/lineup.codes.d.ts +23 -0
  175. package/dist/lineup.codes.js +122 -0
  176. package/dist/logo.d.ts +25 -0
  177. package/dist/logo.js +47 -0
  178. package/dist/look.d.ts +3 -3
  179. package/dist/look.js +39 -6
  180. package/dist/outline.d.ts +1 -1
  181. package/dist/outline.js +46 -4
  182. package/dist/pageant.d.ts +120 -0
  183. package/dist/pageant.draw.d.ts +21 -0
  184. package/dist/pageant.draw.js +171 -0
  185. package/dist/pageant.js +211 -0
  186. package/dist/pageant.style.d.ts +8 -0
  187. package/dist/pageant.style.js +42 -0
  188. package/dist/png.d.ts +8 -1
  189. package/dist/png.js +21 -1
  190. package/dist/pointer-entry.d.ts +2 -0
  191. package/dist/pointer-entry.js +2 -0
  192. package/dist/pointer.d.ts +113 -0
  193. package/dist/pointer.js +151 -0
  194. package/dist/pool.d.ts +176 -0
  195. package/dist/pool.figures.d.ts +306 -0
  196. package/dist/pool.figures.js +148 -0
  197. package/dist/pool.js +304 -0
  198. package/dist/pool.kit.d.ts +48 -0
  199. package/dist/pool.kit.js +141 -0
  200. package/dist/pool.labels.d.ts +20 -0
  201. package/dist/pool.labels.js +258 -0
  202. package/dist/pool.race.d.ts +65 -0
  203. package/dist/pool.race.js +140 -0
  204. package/dist/pool.replay.d.ts +46 -0
  205. package/dist/pool.replay.js +127 -0
  206. package/dist/pool.section.d.ts +13 -0
  207. package/dist/pool.section.js +83 -0
  208. package/dist/pool.style.d.ts +20 -0
  209. package/dist/pool.style.js +169 -0
  210. package/dist/pool.types.d.ts +145 -0
  211. package/dist/pool.types.js +3 -0
  212. package/dist/pool.words.d.ts +13 -0
  213. package/dist/pool.words.js +101 -0
  214. package/dist/ranges.names.js +53 -3
  215. package/dist/replay-entry.d.ts +3 -0
  216. package/dist/replay-entry.js +2 -0
  217. package/dist/restyle.js +1 -1
  218. package/dist/road.draw.js +3 -2
  219. package/dist/road.js +2 -1
  220. package/dist/road.types.d.ts +3 -0
  221. package/dist/rules.d.ts +138 -0
  222. package/dist/rules.js +511 -0
  223. package/dist/rules.types.d.ts +4 -0
  224. package/dist/rules.types.js +64 -0
  225. package/dist/score.d.ts +3 -0
  226. package/dist/score.js +93 -6
  227. package/dist/sheet.d.ts +3 -0
  228. package/dist/sheet.js +7 -3
  229. package/dist/situation.d.ts +135 -0
  230. package/dist/situation.draw.d.ts +34 -0
  231. package/dist/situation.draw.js +202 -0
  232. package/dist/situation.js +337 -0
  233. package/dist/situation.style.d.ts +2 -0
  234. package/dist/situation.style.js +45 -0
  235. package/dist/situation.types.d.ts +77 -0
  236. package/dist/situation.types.js +3 -0
  237. package/dist/situation.widgets.d.ts +39 -0
  238. package/dist/situation.widgets.js +129 -0
  239. package/dist/skating/describe.d.ts +7 -0
  240. package/dist/skating/describe.js +44 -0
  241. package/dist/skating/events.d.ts +24 -0
  242. package/dist/skating/events.js +47 -0
  243. package/dist/skating/figure.d.ts +24 -0
  244. package/dist/skating/figure.js +37 -0
  245. package/dist/skating/long.d.ts +54 -0
  246. package/dist/skating/long.js +111 -0
  247. package/dist/skating/parts.d.ts +43 -0
  248. package/dist/skating/parts.js +40 -0
  249. package/dist/skating/plan.d.ts +55 -0
  250. package/dist/skating/plan.js +197 -0
  251. package/dist/skating/short.d.ts +47 -0
  252. package/dist/skating/short.js +89 -0
  253. package/dist/skating/track.d.ts +66 -0
  254. package/dist/skating/track.js +94 -0
  255. package/dist/skating/types.d.ts +57 -0
  256. package/dist/skating/types.js +3 -0
  257. package/dist/skating-entry.d.ts +17 -0
  258. package/dist/skating-entry.js +11 -0
  259. package/dist/skating.style.d.ts +4 -0
  260. package/dist/skating.style.js +24 -0
  261. package/dist/strings.d.ts +470 -0
  262. package/dist/strings.js +674 -13
  263. package/dist/style.d.ts +2 -0
  264. package/dist/style.js +19 -2
  265. package/dist/surfaces/artistic.d.ts +9 -0
  266. package/dist/surfaces/artistic.js +94 -0
  267. package/dist/surfaces/athletics.d.ts +16 -0
  268. package/dist/surfaces/athletics.js +132 -0
  269. package/dist/surfaces/baseball.js +17 -0
  270. package/dist/surfaces/basketball.floor.d.ts +27 -0
  271. package/dist/surfaces/basketball.floor.js +83 -0
  272. package/dist/surfaces/basketball.gear.d.ts +27 -0
  273. package/dist/surfaces/basketball.gear.js +90 -0
  274. package/dist/surfaces/basketball.js +44 -22
  275. package/dist/surfaces/budo.d.ts +6 -0
  276. package/dist/surfaces/budo.js +104 -0
  277. package/dist/surfaces/curling.d.ts +16 -0
  278. package/dist/surfaces/curling.fold.d.ts +67 -0
  279. package/dist/surfaces/curling.fold.js +107 -0
  280. package/dist/surfaces/curling.js +37 -3
  281. package/dist/surfaces/dive.d.ts +9 -0
  282. package/dist/surfaces/dive.js +128 -0
  283. package/dist/surfaces/field.d.ts +7 -2
  284. package/dist/surfaces/field.js +15 -9
  285. package/dist/surfaces/football.js +7 -0
  286. package/dist/surfaces/hockey.js +4 -2
  287. package/dist/surfaces/net.d.ts +2 -1
  288. package/dist/surfaces/net.js +160 -15
  289. package/dist/surfaces/polo.d.ts +12 -0
  290. package/dist/surfaces/polo.js +159 -0
  291. package/dist/surfaces/pool.d.ts +27 -0
  292. package/dist/surfaces/pool.js +198 -0
  293. package/dist/surfaces/skating.d.ts +6 -0
  294. package/dist/surfaces/skating.js +62 -0
  295. package/dist/surfaces/soccer.js +2 -1
  296. package/dist/surfaces/surface.d.ts +76 -0
  297. package/dist/surfaces/venue.d.ts +15 -0
  298. package/dist/surfaces/venue.js +95 -0
  299. package/dist/target-entry.d.ts +2 -0
  300. package/dist/target-entry.js +2 -0
  301. package/dist/target.d.ts +200 -0
  302. package/dist/target.js +525 -0
  303. package/dist/team.common.d.ts +1 -1
  304. package/dist/team.common.js +3 -3
  305. package/dist/team.formation.d.ts +3 -1
  306. package/dist/team.formation.js +3 -3
  307. package/dist/team.layers.d.ts +2 -2
  308. package/dist/team.layers.js +4 -1
  309. package/dist/team.lineup.d.ts +27 -0
  310. package/dist/team.lineup.js +207 -0
  311. package/dist/team.network.js +6 -5
  312. package/dist/team.shape.js +5 -5
  313. package/dist/team.types.d.ts +40 -1
  314. package/dist/tenants.d.ts +77 -0
  315. package/dist/tenants.data.d.ts +8 -0
  316. package/dist/tenants.data.js +1793 -0
  317. package/dist/tenants.js +46 -0
  318. package/dist/turn-entry.d.ts +12 -0
  319. package/dist/turn-entry.js +7 -0
  320. package/dist/turn.camera.d.ts +116 -0
  321. package/dist/turn.camera.js +184 -0
  322. package/dist/turn.dom.d.ts +40 -0
  323. package/dist/turn.dom.js +353 -0
  324. package/dist/turn.kit.d.ts +86 -0
  325. package/dist/turn.kit.js +110 -0
  326. package/dist/turn.markup.d.ts +48 -0
  327. package/dist/turn.markup.js +108 -0
  328. package/dist/turn.model.d.ts +78 -0
  329. package/dist/turn.model.js +91 -0
  330. package/dist/turn.style.d.ts +5 -0
  331. package/dist/turn.style.js +56 -0
  332. package/dist/types.d.ts +221 -20
  333. package/dist/units.d.ts +1 -1
  334. package/dist/units.js +22 -1
  335. package/dist/uprights.board.d.ts +17 -0
  336. package/dist/uprights.board.js +59 -0
  337. package/dist/uprights.budo.d.ts +17 -0
  338. package/dist/uprights.budo.js +87 -0
  339. package/dist/uprights.d.ts +37 -0
  340. package/dist/uprights.fields.d.ts +32 -0
  341. package/dist/uprights.fields.js +172 -0
  342. package/dist/uprights.goal.d.ts +49 -0
  343. package/dist/uprights.goal.js +69 -0
  344. package/dist/uprights.js +169 -0
  345. package/dist/uprights.more.d.ts +7 -0
  346. package/dist/uprights.more.js +183 -0
  347. package/dist/uprights.net.d.ts +12 -0
  348. package/dist/uprights.net.js +109 -0
  349. package/dist/uprights.netkit.d.ts +28 -0
  350. package/dist/uprights.netkit.js +67 -0
  351. package/dist/uprights.pools.d.ts +8 -0
  352. package/dist/uprights.pools.js +190 -0
  353. package/dist/uprights.rinks.d.ts +27 -0
  354. package/dist/uprights.rinks.js +106 -0
  355. package/dist/uprights.track.d.ts +50 -0
  356. package/dist/uprights.track.js +246 -0
  357. package/dist/version.d.ts +1 -1
  358. package/dist/version.js +1 -1
  359. package/dist/zones-entry.d.ts +2 -0
  360. package/dist/zones-entry.js +2 -0
  361. package/package.json +56 -3
@@ -145,17 +145,207 @@ export interface TableTennisFigures {
145
145
  };
146
146
  free: FreeZones;
147
147
  }
148
+ /**
149
+ * A padel court, from "The court" in the FIP's Rules of Padel (review of application 1 January 2026). Metres. The court is measured inside its walls, so it has
150
+ * no lines round it: the enclosure is its boundary.
151
+ */
152
+ export interface PadelFigures {
153
+ /** Interior length and width (a 0.5% tolerance). */
154
+ length: number;
155
+ width: number;
156
+ /** All lines are 5 cm wide. */
157
+ lineWidth: number;
158
+ /** The service lines are this far from the net, on either side. */
159
+ serviceLine: number;
160
+ /** The central service line runs from the net and extends at least this far beyond the service line. */
161
+ centreOverrun: number;
162
+ net: {
163
+ /** The net's length, its height at the centre and at the ends, and the greatest height of a post. */
164
+ length: number;
165
+ heightCentre: number;
166
+ heightEnds: number;
167
+ postHeight: number;
168
+ };
169
+ /** The enclosure: the end walls and, at each end of each side, a wall this long, with metal mesh between; the walls' heights. */
170
+ enclosure: {
171
+ sideWall: number;
172
+ endHeight: number;
173
+ endWall: number;
174
+ sideHeight: number;
175
+ };
176
+ free: FreeZones;
177
+ }
178
+ /**
179
+ * A squash court, from the World Squash Federation's Specifications for Squash Courts (28 November 2017), clauses 4 and 5 and Appendices 1 and 2. Metres. The
180
+ * court is measured between the playing surfaces of its walls, so it has no lines round it; the front wall's lines are heights.
181
+ */
182
+ export interface SquashFigures {
183
+ length: number;
184
+ width: number;
185
+ /** All court markings are 50 mm wide. */
186
+ lineWidth: number;
187
+ /** The nearest edge of the short line is this far from the back wall. */
188
+ shortLine: number;
189
+ /** A service box is a square of this many metres inside its lines. */
190
+ serviceBox: number;
191
+ /** Heights on the walls: to the top of the tin, to the lower edge of the service line and of the front wall line, and of the back wall line. */
192
+ wall: {
193
+ tin: number;
194
+ serviceLine: number;
195
+ frontWallLine: number;
196
+ backWallLine: number;
197
+ };
198
+ free: FreeZones;
199
+ }
200
+ /**
201
+ * A racquetball court, from Rule 2.1 of the International Racquetball Federation's Official Rules 2026-2028 and its Court Specifications (2025). Feet.
202
+ */
203
+ export interface RacquetballFigures {
204
+ length: number;
205
+ width: number;
206
+ /** The lines are 1 to 1 1/2 inches wide: 1 1/2 inches is the recommended width. */
207
+ lineWidth: number;
208
+ /** The back edge of the short line is this far from the back wall (midway between the walls). */
209
+ shortLine: number;
210
+ /** The front edge of the service line is this far in front of the short line's back edge. */
211
+ serviceLine: number;
212
+ /** The edge of a service box's line nearest the centre is this far from the side wall; so is a drive serve line's, at its own figure. */
213
+ serviceBox: number;
214
+ driveServe: number;
215
+ /** The receiving line's back edge is this far behind the short line's back edge; the broken line's end segment, a segment and a space. */
216
+ receiving: {
217
+ behind: number;
218
+ end: number;
219
+ dash: number;
220
+ gap: number;
221
+ };
222
+ /** The upper edge of the out-of-court line on the back wall, and the least height of the back wall. */
223
+ backWall: {
224
+ outOfCourt: number;
225
+ least: number;
226
+ };
227
+ /** The height of the court (a ceiling). */
228
+ height: number;
229
+ free: FreeZones;
230
+ }
231
+ /** A sepak takraw court, from Laws 1 to 3 of the ISTAF's Law of the Game (2013). Metres. */
232
+ export interface SepakTakrawFigures {
233
+ length: number;
234
+ width: number;
235
+ /** The boundary lines are at most this wide, drawn inwards; the service circle's is the same. */
236
+ lineWidth: number;
237
+ /** The centre line, under the net. */
238
+ centreLine: number;
239
+ /** The quarter circles at the ends of the centre line: their radius. */
240
+ quarterCircle: number;
241
+ /** The service circles: their radius, and their centre's distance from the back line and from the sidelines. */
242
+ serviceCircle: {
243
+ radius: number;
244
+ fromBack: number;
245
+ fromSide: number;
246
+ };
247
+ net: {
248
+ /** The least length, the width, the height at the centre for men and for women, and the height at the posts for men and for women. */
249
+ length: number;
250
+ width: number;
251
+ heightMen: number;
252
+ heightWomen: number;
253
+ postMen: number;
254
+ postWomen: number;
255
+ /** The posts stand this far from the sidelines, in line with the centre line; at most this far across (in radius). */
256
+ postsOutside: number;
257
+ postRadius: number;
258
+ };
259
+ free: FreeZones;
260
+ }
261
+ /** A teqball court and table, from sections 1 and 2 of the FITEQ's Official Rules and Regulations of Teqball (2026). Metres. */
262
+ export interface TeqballFigures {
263
+ /** The least court: the sides parallel to the net are `width` long, the other two `length`. */
264
+ length: number;
265
+ width: number;
266
+ table: {
267
+ /** The table's length, its width without the net and with it, and its height with the net. */
268
+ length: number;
269
+ width: number;
270
+ widthWithNet: number;
271
+ height: number;
272
+ };
273
+ /** The net: its width, thickness and height above the table. */
274
+ net: {
275
+ width: number;
276
+ thickness: number;
277
+ height: number;
278
+ };
279
+ /** The halfway line and the service line are 20 to 50 mm wide: the greatest. */
280
+ lineWidth: number;
281
+ /** The service line is this far from the middle of the table, parallel to the net. */
282
+ serviceLine: number;
283
+ /** The court surrounds: the least and the greatest height. */
284
+ surround: {
285
+ least: number;
286
+ most: number;
287
+ };
288
+ free: FreeZones;
289
+ }
290
+ /** A roundnet court, from Chapter 1 of the International Roundnet Federation's Rules (adopted 21 October 2022). Metres. */
291
+ export interface RoundnetFigures {
292
+ /** The recommended least court; there are no out of bounds. */
293
+ length: number;
294
+ width: number;
295
+ /** The set: its diameter and its height. */
296
+ set: {
297
+ diameter: number;
298
+ height: number;
299
+ };
300
+ /** The serving line is a circle this far from the centre of the set; the no hit zone line, another. */
301
+ servingRadius: number;
302
+ noHitRadius: number;
303
+ /** The distance from the edge of the set to the service line, as the rule also states it. */
304
+ edgeToService: number;
305
+ /** The rules give no width for these lines: ours. */
306
+ lineWidth: number;
307
+ free: FreeZones;
308
+ }
309
+ /** A netball court, from Rule 1 of World Netball's Rules of Netball (2024 edition). Metres. */
310
+ export interface NetballFigures {
311
+ /** The side lines' length, and the goal lines'. */
312
+ length: number;
313
+ width: number;
314
+ /** All lines are 50 mm wide. */
315
+ lineWidth: number;
316
+ /** The centre circle's diameter, and the goal circle's radius (a semicircle centred on the middle of the outside of the goal line). */
317
+ centreCircle: number;
318
+ goalCircle: number;
319
+ /** A goalpost's height, the greatest diameter of its pole, and its ring: the inside diameter, the rod's diameter, and the length of the bar that carries it forward from the pole. */
320
+ post: {
321
+ height: number;
322
+ poleDiameter: number;
323
+ ring: {
324
+ inside: number;
325
+ rod: number;
326
+ bar: number;
327
+ };
328
+ };
329
+ free: FreeZones;
330
+ }
148
331
  /** The figures of any net sport's court. */
149
- export type NetFigures = TennisFigures | VolleyballFigures | BadmintonFigures | PickleballFigures | TableTennisFigures;
332
+ export type NetFigures = TennisFigures | VolleyballFigures | BadmintonFigures | PickleballFigures | TableTennisFigures | PadelFigures | SquashFigures | RacquetballFigures | SepakTakrawFigures | TeqballFigures | RoundnetFigures | NetballFigures;
150
333
  /** The sports of these courts. */
151
- export type NetSport = "tennis" | "volleyball" | "badminton" | "pickleball" | "tabletennis";
334
+ export type NetSport = "tennis" | "volleyball" | "badminton" | "pickleball" | "tabletennis" | "padel" | "squash" | "racquetball" | "sepaktakraw" | "teqball" | "roundnet" | "netball";
152
335
  export type TennisLeague = LeagueBase<"tennis", TennisFigures>;
153
336
  export type VolleyballLeague = LeagueBase<"volleyball", VolleyballFigures>;
154
337
  export type BadmintonLeague = LeagueBase<"badminton", BadmintonFigures>;
155
338
  export type PickleballLeague = LeagueBase<"pickleball", PickleballFigures>;
156
339
  export type TableTennisLeague = LeagueBase<"tabletennis", TableTennisFigures>;
340
+ export type PadelLeague = LeagueBase<"padel", PadelFigures>;
341
+ export type SquashLeague = LeagueBase<"squash", SquashFigures>;
342
+ export type RacquetballLeague = LeagueBase<"racquetball", RacquetballFigures>;
343
+ export type SepakTakrawLeague = LeagueBase<"sepaktakraw", SepakTakrawFigures>;
344
+ export type TeqballLeague = LeagueBase<"teqball", TeqballFigures>;
345
+ export type RoundnetLeague = LeagueBase<"roundnet", RoundnetFigures>;
346
+ export type NetballLeague = LeagueBase<"netball", NetballFigures>;
157
347
  /** A league with a net sport's court. */
158
- export type NetLeague = TennisLeague | VolleyballLeague | BadmintonLeague | PickleballLeague | TableTennisLeague;
348
+ export type NetLeague = TennisLeague | VolleyballLeague | BadmintonLeague | PickleballLeague | TableTennisLeague | PadelLeague | SquashLeague | RacquetballLeague | SepakTakrawLeague | TeqballLeague | RoundnetLeague | NetballLeague;
159
349
  /** A net sport's figures in feet, from the unit its rulebook gives them in. */
160
350
  export declare const netInFeet: <F extends NetFigures>(figures: F, unit: Unit) => F;
161
351
  /**
@@ -200,9 +390,70 @@ export declare const USAP_PICKLEBALL: PickleballFigures;
200
390
  * outside the side lines.
201
391
  */
202
392
  export declare const ITTF_TABLE: TableTennisFigures;
393
+ /**
394
+ * The World ParaVolley's sitting volleyball court, from Rules 1 and 2 of the Official Sitting Volleyball Rules 2025-2028, in metres: 10 by 6 m inside a free zone of
395
+ * at least 3 m (4 m beside the side lines and 6 m behind the end lines in World ParaVolley, World and Official Competitions); lines 5 cm wide inside the dimensions;
396
+ * the attack line's rear edge 2 m from the axis of the centre line and, in those competitions, extended by five 15 cm lines 20 cm apart to 1.75 m; the service zone 6 m
397
+ * wide, limited by two 15 cm lines 20 cm behind the end line; the net 0.80 m wide and 6.5 to 7 m long, 1.15 m (men) or 1.05 m (women) high; each antenna 1.60 m long and
398
+ * 10 mm across; the posts 0.5 to 1.0 m outside the side lines, 1 m in those competitions.
399
+ */
400
+ export declare const WPV_SITTING: VolleyballFigures;
401
+ /**
402
+ * The FIP's padel court, from "The court" (dimensions, net, enclosures) in the Rules of Padel (review of application 1 January 2026), in metres: 10 by 20 m inside
403
+ * the walls; the service lines 6.95 m from the net on either side, the central service line between the net and each, extending at least 20 cm beyond it; lines 5 cm
404
+ * wide; the net 10 m long, 0.88 m high at the centre and 0.92 m at the ends, on posts at most 1.05 m high whose outer side is the side limit of the court; the court
405
+ * enclosed, the end walls 4 m high (3 m of wall and 1 m of metal fence) and each side wall, at both ends, 4 m long and 3 m high with metal fence between.
406
+ */
407
+ export declare const FIP_PADEL: PadelFigures;
408
+ /**
409
+ * World Squash's singles court, from clauses 4.01 and 5 and Appendix 1 of its Specifications for Squash Courts (28 November 2017), in metres: 9.75 by 6.40 m between the
410
+ * playing surfaces; markings 50 mm wide; the nearest edge of the short line 4.26 m from the back wall; each service box a square of 1.60 m inside its lines; on the
411
+ * front wall the top of the tin 480 mm up, the lower edge of the service line 1.78 m and of the front wall line 4.57 m, and on the back wall the back wall line 2.13 m.
412
+ */
413
+ export declare const WSF_SQUASH: SquashFigures;
414
+ /** World Squash's doubles court (Appendix 2, clause 4.02): 7.62 m wide, the rest as the singles court. */
415
+ export declare const WSF_SQUASH_DOUBLES: SquashFigures;
416
+ /** World Squash's international competition width doubles court (Appendix 2 note 8, clause 4.03): 8.42 m wide, with the top of the tin 330 mm up, for WSF recognised World and Regional events and the Commonwealth Games. */
417
+ export declare const WSF_SQUASH_WIDE: SquashFigures;
418
+ /**
419
+ * The IRF's racquetball court, from Rule 2.1 of the Official Rules 2026-2028 and Section Three of the Court Specifications (2025), in feet as they are printed: 20 feet
420
+ * wide, 40 feet long and 20 feet high; lines 1 to 1 1/2 inches wide (1 1/2 inches, bright red, recommended); the back edge of the short line 20 feet from the back wall;
421
+ * the front edge of the service line 5 feet in front of the short line's back edge; a service box's line 18 inches from the side wall and a drive serve line 3 feet from
422
+ * it (to the edge nearest the centre); the receiving line's back edge 5 feet behind the short line's back edge, a broken line of two 21 inch ends and sixteen 6 inch
423
+ * lines between 6 inch spaces; the back wall at least 12 feet high, with the out-of-court line's upper edge at 12 feet.
424
+ */
425
+ export declare const IRF_RACQUETBALL: RacquetballFigures;
426
+ /**
427
+ * The ISTAF's court, from Laws 1 to 3 of the Law of the Game (2013, dated 9 December 2013), in metres: 13.40 by 6.10 m; the boundary lines at most 0.04 m wide, drawn
428
+ * inwards; a centre line 0.02 m wide; a quarter circle of 0.9 m radius at each end of the centre line; a service circle of 0.3 m radius on each side, its centre 2.45 m
429
+ * from the back line and 3.05 m from the sidelines, its line 0.04 m wide; a free zone of 3.0 m; the posts 0.3 m outside the sidelines, in line with the centre line,
430
+ * 1.55 m (men) or 1.45 m (women) high; the net 0.7 m wide and at least 6.1 m long, 1.52 m (men) or 1.42 m (women) high at the centre.
431
+ */
432
+ export declare const ISTAF_SEPAK_TAKRAW: SepakTakrawFigures;
433
+ /**
434
+ * The FITEQ's teqball court and table, from sections 1 and 2 of the Official Rules and Regulations of Teqball (2026), in metres: a table 3,000 mm long and 1,500 mm
435
+ * wide (1,700 mm with the net), 900 mm high with the net; a net 1,700 mm wide, 20 mm thick and 140 mm high; the table in the exact middle of a court of at least 12 m
436
+ * (the sides parallel to the net) by 16 m, the net parallel to the shorter sides; the halfway line across the middle, and a service line on each side 3.5 m from the
437
+ * middle of the table, each 20 to 50 mm wide; court surrounds 500 to 1,500 mm high.
438
+ */
439
+ export declare const FITEQ_TEQBALL: TeqballFigures;
440
+ /**
441
+ * The International Roundnet Federation's court, from Rules 1.1.2 and 1.2.1 to 1.2.4 (adopted 21 October 2022), in metres: a set 91.4 cm across and 20.3 cm high; a court
442
+ * of at least 10 by 10 m (33 by 33 feet) recommended, with no out of bounds; a serving line drawn as a circle 2.6 m (8.5 feet) from the centre of the set, 2.13 m (7 feet)
443
+ * from its edge; a no hit zone line drawn as a circle 90 cm (3 feet) from the centre; a mark at each of the four service positions, 90 degrees apart.
444
+ */
445
+ export declare const IRF_ROUNDNET: RoundnetFigures;
446
+ /**
447
+ * World Netball's court, from Rule 1 (Technical specifications, Court and related areas, items 2 to 8, 13 and 14) of the Rules of Netball (2024 edition), in metres:
448
+ * 30.5 m (100 feet) by 15.25 m (50 feet); two transverse lines dividing it into three equal areas; a centre circle 0.9 m (3 feet) across; at each end a goal circle, a
449
+ * semicircle of radius 4.9 m (16 feet) centred on the middle of the outside of the goal line; lines 50 mm wide; a court surround 3.05 m (10 feet) on every side; a goalpost
450
+ * at the middle of each goal line, its pole 65 to 100 mm across and 3.05 m high, the back of the pole at the outer edge of the goal line, with a ring of 380 mm inside
451
+ * diameter made of 15 mm rod, on a bar 150 mm long projecting from the pole.
452
+ */
453
+ export declare const WN_NETBALL: NetballFigures;
203
454
  /** The tennis leagues: the ITF's. The ATP and the WTA play by the ITF's rules. */
204
455
  export declare const TENNIS_LEAGUES: readonly TennisLeague[];
205
- /** The volleyball leagues: the FIVB's indoor court, and its beach court. */
456
+ /** The volleyball leagues: the FIVB's indoor court, its beach court, and World ParaVolley's sitting volleyball court. */
206
457
  export declare const VOLLEYBALL_LEAGUES: readonly VolleyballLeague[];
207
458
  /** The badminton leagues: the BWF's. */
208
459
  export declare const BADMINTON_LEAGUES: readonly BadmintonLeague[];
@@ -210,3 +461,17 @@ export declare const BADMINTON_LEAGUES: readonly BadmintonLeague[];
210
461
  export declare const PICKLEBALL_LEAGUES: readonly PickleballLeague[];
211
462
  /** The table tennis leagues: the ITTF's. */
212
463
  export declare const TABLE_TENNIS_LEAGUES: readonly TableTennisLeague[];
464
+ /** The padel leagues: the FIP's. */
465
+ export declare const PADEL_LEAGUES: readonly PadelLeague[];
466
+ /** The squash leagues: World Squash's singles court, its doubles court and its international competition width doubles court. */
467
+ export declare const SQUASH_LEAGUES: readonly SquashLeague[];
468
+ /** The racquetball leagues: the IRF's. */
469
+ export declare const RACQUETBALL_LEAGUES: readonly RacquetballLeague[];
470
+ /** The sepak takraw leagues: the ISTAF's. */
471
+ export declare const SEPAK_TAKRAW_LEAGUES: readonly SepakTakrawLeague[];
472
+ /** The teqball leagues: the FITEQ's. */
473
+ export declare const TEQBALL_LEAGUES: readonly TeqballLeague[];
474
+ /** The roundnet leagues: the International Roundnet Federation's. */
475
+ export declare const ROUNDNET_LEAGUES: readonly RoundnetLeague[];
476
+ /** The netball leagues: World Netball's. */
477
+ export declare const NETBALL_LEAGUES: readonly NetballLeague[];
@@ -99,12 +99,148 @@ export const ITTF_TABLE = {
99
99
  net: { height: 0.1525, postHeight: 0.1525, postOutside: 0.1525 },
100
100
  free: { official: null, least: null },
101
101
  };
102
+ /**
103
+ * The World ParaVolley's sitting volleyball court, from Rules 1 and 2 of the Official Sitting Volleyball Rules 2025-2028, in metres: 10 by 6 m inside a free zone of
104
+ * at least 3 m (4 m beside the side lines and 6 m behind the end lines in World ParaVolley, World and Official Competitions); lines 5 cm wide inside the dimensions;
105
+ * the attack line's rear edge 2 m from the axis of the centre line and, in those competitions, extended by five 15 cm lines 20 cm apart to 1.75 m; the service zone 6 m
106
+ * wide, limited by two 15 cm lines 20 cm behind the end line; the net 0.80 m wide and 6.5 to 7 m long, 1.15 m (men) or 1.05 m (women) high; each antenna 1.60 m long and
107
+ * 10 mm across; the posts 0.5 to 1.0 m outside the side lines, 1 m in those competitions.
108
+ */
109
+ export const WPV_SITTING = {
110
+ length: 10,
111
+ width: 6,
112
+ lineWidth: 0.05,
113
+ attackLine: 2,
114
+ attackExtension: { length: 0.15, gap: 0.2, total: 1.75 },
115
+ serviceMarks: { length: 0.15, behind: 0.2 },
116
+ serviceZone: 6,
117
+ net: { length: 7, width: 0.8, heightMen: 1.15, heightWomen: 1.05, postsOutside: 1, postsOutsideLeast: 0.5, antenna: { length: 1.6, diameter: 0.01 } },
118
+ free: { official: { side: 4, end: 6 }, least: { side: 3, end: 3 } },
119
+ };
120
+ /**
121
+ * The FIP's padel court, from "The court" (dimensions, net, enclosures) in the Rules of Padel (review of application 1 January 2026), in metres: 10 by 20 m inside
122
+ * the walls; the service lines 6.95 m from the net on either side, the central service line between the net and each, extending at least 20 cm beyond it; lines 5 cm
123
+ * wide; the net 10 m long, 0.88 m high at the centre and 0.92 m at the ends, on posts at most 1.05 m high whose outer side is the side limit of the court; the court
124
+ * enclosed, the end walls 4 m high (3 m of wall and 1 m of metal fence) and each side wall, at both ends, 4 m long and 3 m high with metal fence between.
125
+ */
126
+ export const FIP_PADEL = {
127
+ length: 20,
128
+ width: 10,
129
+ lineWidth: 0.05,
130
+ serviceLine: 6.95,
131
+ centreOverrun: 0.2,
132
+ net: { length: 10, heightCentre: 0.88, heightEnds: 0.92, postHeight: 1.05 },
133
+ enclosure: { sideWall: 4, endHeight: 4, endWall: 3, sideHeight: 3 },
134
+ free: { official: null, least: null },
135
+ };
136
+ /**
137
+ * World Squash's singles court, from clauses 4.01 and 5 and Appendix 1 of its Specifications for Squash Courts (28 November 2017), in metres: 9.75 by 6.40 m between the
138
+ * playing surfaces; markings 50 mm wide; the nearest edge of the short line 4.26 m from the back wall; each service box a square of 1.60 m inside its lines; on the
139
+ * front wall the top of the tin 480 mm up, the lower edge of the service line 1.78 m and of the front wall line 4.57 m, and on the back wall the back wall line 2.13 m.
140
+ */
141
+ export const WSF_SQUASH = {
142
+ length: 9.75,
143
+ width: 6.4,
144
+ lineWidth: 0.05,
145
+ shortLine: 4.26,
146
+ serviceBox: 1.6,
147
+ wall: { tin: 0.48, serviceLine: 1.78, frontWallLine: 4.57, backWallLine: 2.13 },
148
+ free: { official: null, least: null },
149
+ };
150
+ /** World Squash's doubles court (Appendix 2, clause 4.02): 7.62 m wide, the rest as the singles court. */
151
+ export const WSF_SQUASH_DOUBLES = { ...WSF_SQUASH, width: 7.62 };
152
+ /** World Squash's international competition width doubles court (Appendix 2 note 8, clause 4.03): 8.42 m wide, with the top of the tin 330 mm up, for WSF recognised World and Regional events and the Commonwealth Games. */
153
+ export const WSF_SQUASH_WIDE = { ...WSF_SQUASH, width: 8.42, wall: { ...WSF_SQUASH.wall, tin: 0.33 } };
154
+ /**
155
+ * The IRF's racquetball court, from Rule 2.1 of the Official Rules 2026-2028 and Section Three of the Court Specifications (2025), in feet as they are printed: 20 feet
156
+ * wide, 40 feet long and 20 feet high; lines 1 to 1 1/2 inches wide (1 1/2 inches, bright red, recommended); the back edge of the short line 20 feet from the back wall;
157
+ * the front edge of the service line 5 feet in front of the short line's back edge; a service box's line 18 inches from the side wall and a drive serve line 3 feet from
158
+ * it (to the edge nearest the centre); the receiving line's back edge 5 feet behind the short line's back edge, a broken line of two 21 inch ends and sixteen 6 inch
159
+ * lines between 6 inch spaces; the back wall at least 12 feet high, with the out-of-court line's upper edge at 12 feet.
160
+ */
161
+ export const IRF_RACQUETBALL = {
162
+ length: 40,
163
+ width: 20,
164
+ lineWidth: inch(1.5),
165
+ shortLine: 20,
166
+ serviceLine: 5,
167
+ serviceBox: 1.5,
168
+ driveServe: 3,
169
+ receiving: { behind: 5, end: inch(21), dash: inch(6), gap: inch(6) },
170
+ backWall: { outOfCourt: 12, least: 12 },
171
+ height: 20,
172
+ free: { official: null, least: null },
173
+ };
174
+ /**
175
+ * The ISTAF's court, from Laws 1 to 3 of the Law of the Game (2013, dated 9 December 2013), in metres: 13.40 by 6.10 m; the boundary lines at most 0.04 m wide, drawn
176
+ * inwards; a centre line 0.02 m wide; a quarter circle of 0.9 m radius at each end of the centre line; a service circle of 0.3 m radius on each side, its centre 2.45 m
177
+ * from the back line and 3.05 m from the sidelines, its line 0.04 m wide; a free zone of 3.0 m; the posts 0.3 m outside the sidelines, in line with the centre line,
178
+ * 1.55 m (men) or 1.45 m (women) high; the net 0.7 m wide and at least 6.1 m long, 1.52 m (men) or 1.42 m (women) high at the centre.
179
+ */
180
+ export const ISTAF_SEPAK_TAKRAW = {
181
+ length: 13.4,
182
+ width: 6.1,
183
+ lineWidth: 0.04,
184
+ centreLine: 0.02,
185
+ quarterCircle: 0.9,
186
+ serviceCircle: { radius: 0.3, fromBack: 2.45, fromSide: 3.05 },
187
+ net: { length: 6.1, width: 0.7, heightMen: 1.52, heightWomen: 1.42, postMen: 1.55, postWomen: 1.45, postsOutside: 0.3, postRadius: 0.04 },
188
+ free: { official: { side: 3, end: 3 }, least: { side: 3, end: 3 } },
189
+ };
190
+ /**
191
+ * The FITEQ's teqball court and table, from sections 1 and 2 of the Official Rules and Regulations of Teqball (2026), in metres: a table 3,000 mm long and 1,500 mm
192
+ * wide (1,700 mm with the net), 900 mm high with the net; a net 1,700 mm wide, 20 mm thick and 140 mm high; the table in the exact middle of a court of at least 12 m
193
+ * (the sides parallel to the net) by 16 m, the net parallel to the shorter sides; the halfway line across the middle, and a service line on each side 3.5 m from the
194
+ * middle of the table, each 20 to 50 mm wide; court surrounds 500 to 1,500 mm high.
195
+ */
196
+ export const FITEQ_TEQBALL = {
197
+ length: 16,
198
+ width: 12,
199
+ table: { length: 3, width: 1.5, widthWithNet: 1.7, height: 0.9 },
200
+ net: { width: 1.7, thickness: 0.02, height: 0.14 },
201
+ lineWidth: 0.05,
202
+ serviceLine: 3.5,
203
+ surround: { least: 0.5, most: 1.5 },
204
+ free: { official: null, least: null },
205
+ };
206
+ /**
207
+ * The International Roundnet Federation's court, from Rules 1.1.2 and 1.2.1 to 1.2.4 (adopted 21 October 2022), in metres: a set 91.4 cm across and 20.3 cm high; a court
208
+ * of at least 10 by 10 m (33 by 33 feet) recommended, with no out of bounds; a serving line drawn as a circle 2.6 m (8.5 feet) from the centre of the set, 2.13 m (7 feet)
209
+ * from its edge; a no hit zone line drawn as a circle 90 cm (3 feet) from the centre; a mark at each of the four service positions, 90 degrees apart.
210
+ */
211
+ export const IRF_ROUNDNET = {
212
+ length: 10,
213
+ width: 10,
214
+ set: { diameter: 0.914, height: 0.203 },
215
+ servingRadius: 2.6,
216
+ noHitRadius: 0.9,
217
+ edgeToService: 2.13,
218
+ lineWidth: 0.05,
219
+ free: { official: null, least: null },
220
+ };
221
+ /**
222
+ * World Netball's court, from Rule 1 (Technical specifications, Court and related areas, items 2 to 8, 13 and 14) of the Rules of Netball (2024 edition), in metres:
223
+ * 30.5 m (100 feet) by 15.25 m (50 feet); two transverse lines dividing it into three equal areas; a centre circle 0.9 m (3 feet) across; at each end a goal circle, a
224
+ * semicircle of radius 4.9 m (16 feet) centred on the middle of the outside of the goal line; lines 50 mm wide; a court surround 3.05 m (10 feet) on every side; a goalpost
225
+ * at the middle of each goal line, its pole 65 to 100 mm across and 3.05 m high, the back of the pole at the outer edge of the goal line, with a ring of 380 mm inside
226
+ * diameter made of 15 mm rod, on a bar 150 mm long projecting from the pole.
227
+ */
228
+ export const WN_NETBALL = {
229
+ length: 30.5,
230
+ width: 15.25,
231
+ lineWidth: 0.05,
232
+ centreCircle: 0.9,
233
+ goalCircle: 4.9,
234
+ post: { height: 3.05, poleDiameter: 0.1, ring: { inside: 0.38, rod: 0.015, bar: 0.15 } },
235
+ free: { official: { side: 3.05, end: 3.05 }, least: { side: 3.05, end: 3.05 } },
236
+ };
102
237
  /** The tennis leagues: the ITF's. The ATP and the WTA play by the ITF's rules. */
103
238
  export const TENNIS_LEAGUES = [{ id: "itf", family: "tennis", name: { en: "ITF tennis court", ja: "ITFのテニスコート" }, unit: "ft", dimensions: ITF_TENNIS, sources: ["itf-rules"], builtIn: true }];
104
- /** The volleyball leagues: the FIVB's indoor court, and its beach court. */
239
+ /** The volleyball leagues: the FIVB's indoor court, its beach court, and World ParaVolley's sitting volleyball court. */
105
240
  export const VOLLEYBALL_LEAGUES = [
106
241
  { id: "fivb", family: "volleyball", name: { en: "FIVB volleyball court", ja: "FIVBのバレーボールコート" }, unit: "m", dimensions: FIVB_INDOOR, sources: ["fivb-volleyball"], builtIn: true },
107
242
  { id: "fivb-beach", family: "volleyball", name: { en: "FIVB beach volleyball court", ja: "FIVBのビーチバレーボールコート" }, unit: "m", dimensions: FIVB_BEACH, sources: ["fivb-beach"] },
243
+ { id: "wpv-sitting", family: "volleyball", name: { en: "World ParaVolley sitting volleyball court", ja: "ワールドパラバレーのシッティングバレーボールコート" }, unit: "m", dimensions: WPV_SITTING, sources: ["wpv-sitting"] },
108
244
  ];
109
245
  /** The badminton leagues: the BWF's. */
110
246
  export const BADMINTON_LEAGUES = [{ id: "bwf", family: "badminton", name: { en: "BWF badminton court", ja: "BWFのバドミントンコート" }, unit: "m", dimensions: BWF_BADMINTON, sources: ["bwf-laws"], builtIn: true }];
@@ -112,3 +248,21 @@ export const BADMINTON_LEAGUES = [{ id: "bwf", family: "badminton", name: { en:
112
248
  export const PICKLEBALL_LEAGUES = [{ id: "usap", family: "pickleball", name: { en: "USA Pickleball court", ja: "USA Pickleballのコート" }, unit: "ft", dimensions: USAP_PICKLEBALL, sources: ["usap-rulebook"], builtIn: true }];
113
249
  /** The table tennis leagues: the ITTF's. */
114
250
  export const TABLE_TENNIS_LEAGUES = [{ id: "ittf", family: "tabletennis", name: { en: "ITTF table", ja: "ITTFの卓球台" }, unit: "m", dimensions: ITTF_TABLE, sources: ["ittf-laws"], builtIn: true }];
251
+ /** The padel leagues: the FIP's. */
252
+ export const PADEL_LEAGUES = [{ id: "fip", family: "padel", name: { en: "FIP padel court", ja: "FIPのパデルコート" }, unit: "m", dimensions: FIP_PADEL, sources: ["fip-padel"], builtIn: true }];
253
+ /** The squash leagues: World Squash's singles court, its doubles court and its international competition width doubles court. */
254
+ export const SQUASH_LEAGUES = [
255
+ { id: "wsf", family: "squash", name: { en: "World Squash singles court", ja: "ワールドスカッシュのシングルスコート" }, unit: "m", dimensions: WSF_SQUASH, sources: ["wsf-court-specs", "wsf-singles-rules"], builtIn: true },
256
+ { id: "wsf-doubles", family: "squash", name: { en: "World Squash doubles court", ja: "ワールドスカッシュのダブルスコート" }, unit: "m", dimensions: WSF_SQUASH_DOUBLES, sources: ["wsf-court-specs"] },
257
+ { id: "wsf-doubles-wide", family: "squash", name: { en: "World Squash international competition width doubles court", ja: "ワールドスカッシュの国際大会規格のダブルスコート" }, unit: "m", dimensions: WSF_SQUASH_WIDE, sources: ["wsf-court-specs"] },
258
+ ];
259
+ /** The racquetball leagues: the IRF's. */
260
+ export const RACQUETBALL_LEAGUES = [{ id: "irf", family: "racquetball", name: { en: "IRF racquetball court", ja: "IRFのラケットボールコート" }, unit: "ft", dimensions: IRF_RACQUETBALL, sources: ["irf-racquetball-rules", "irf-racquetball-courts"], builtIn: true }];
261
+ /** The sepak takraw leagues: the ISTAF's. */
262
+ export const SEPAK_TAKRAW_LEAGUES = [{ id: "istaf", family: "sepaktakraw", name: { en: "ISTAF sepak takraw court", ja: "ISTAFのセパタクローコート" }, unit: "m", dimensions: ISTAF_SEPAK_TAKRAW, sources: ["istaf-law"], builtIn: true }];
263
+ /** The teqball leagues: the FITEQ's. */
264
+ export const TEQBALL_LEAGUES = [{ id: "fiteq", family: "teqball", name: { en: "FITEQ teqball court", ja: "FITEQのテックボールコート" }, unit: "m", dimensions: FITEQ_TEQBALL, sources: ["fiteq-rules"], builtIn: true }];
265
+ /** The roundnet leagues: the International Roundnet Federation's. */
266
+ export const ROUNDNET_LEAGUES = [{ id: "irf-roundnet", family: "roundnet", name: { en: "International Roundnet Federation court", ja: "国際ラウンドネット連盟のコート" }, unit: "m", dimensions: IRF_ROUNDNET, sources: ["roundnet-rules"], builtIn: true }];
267
+ /** The netball leagues: World Netball's. */
268
+ export const NETBALL_LEAGUES = [{ id: "wn", family: "netball", name: { en: "World Netball court", ja: "ワールドネットボールのコート" }, unit: "m", dimensions: WN_NETBALL, sources: ["world-netball-rules"], builtIn: true }];
@@ -24,6 +24,28 @@ export const NHL_RINK = {
24
24
  refereeCrease: NHL.refereeCrease,
25
25
  lineWidths: { goal: NHL.goalLineWidth, major: NHL.lineWidth, minor: 1 / 6 },
26
26
  };
27
+ /**
28
+ * The IIHF rink, Rules 1.2 to 1.9 and Appendix VI of the IIHF Official Rule Book 2025/26, in metres. The rules give a range for the width (26 to 30 m) and the corner radius (7 to 8.5 m): the largest of each is drawn.
29
+ */
30
+ const IIHF_RINK = {
31
+ length: 60,
32
+ width: 30,
33
+ cornerRadius: 8.5,
34
+ goalLine: 4,
35
+ blueLine: 22.5,
36
+ circleRadius: 4.5,
37
+ endSpotFromGoalLine: 6,
38
+ spotOffset: 7,
39
+ spotRadius: 0.3,
40
+ neutralSpotFromBlue: 1.5,
41
+ centreSpotRadius: 0.15,
42
+ hash: { length: 0.6, apart: 1.7 },
43
+ crease: { radius: 1.83, depth: 1.36, halfWidth: 1.225, mark: null },
44
+ net: { width: 1.83, depth: 1 },
45
+ trapezoid: { atBoards: 8.6, atGoalLine: 6.8 },
46
+ refereeCrease: 3,
47
+ lineWidths: { goal: 0.05, major: 0.3, minor: 0.05 },
48
+ };
27
49
  /** The NHL's rink with other markings laid over it: most leagues' Rule 1 is the NHL's, nearly word for word. */
28
50
  const rink = (over) => ({ ...NHL_RINK, ...over });
29
51
  /** Hash marks beside an end-zone circle, as the NCAA prints them: 2 feet long, 5 ft 7 in apart (the NHL's Rule 1.9 says the same, and `NHL_RINK` has it). */
@@ -39,25 +61,7 @@ export const HOCKEY_LEAGUES = [
39
61
  name: { en: "IIHF ice hockey rink", ja: "IIHF(国際アイスホッケー連盟)のアイスホッケーリンク" },
40
62
  unit: "m",
41
63
  // Rules 1.2 to 1.9 and Appendix VI of the IIHF Official Rule Book 2025/26 (the 2026/27 edition is the same), in metres. The rules give a range for the width (26 to 30 m) and the corner radius (7 to 8.5 m): the largest of each is drawn. The spots' places and the crease are read from the diagram; the goal's depth is the rules' none.
42
- dimensions: {
43
- length: 60,
44
- width: 30,
45
- cornerRadius: 8.5,
46
- goalLine: 4,
47
- blueLine: 22.5,
48
- circleRadius: 4.5,
49
- endSpotFromGoalLine: 6,
50
- spotOffset: 7,
51
- spotRadius: 0.3,
52
- neutralSpotFromBlue: 1.5,
53
- centreSpotRadius: 0.15,
54
- hash: { length: 0.6, apart: 1.7 },
55
- crease: { radius: 1.83, depth: 1.36, halfWidth: 1.225, mark: null },
56
- net: { width: 1.83, depth: 1 },
57
- trapezoid: { atBoards: 8.6, atGoalLine: 6.8 },
58
- refereeCrease: 3,
59
- lineWidths: { goal: 0.05, major: 0.3, minor: 0.05 },
60
- },
64
+ dimensions: IIHF_RINK,
61
65
  sources: ["iihf-2025"],
62
66
  history: {
63
67
  blueLine: [
@@ -163,4 +167,22 @@ export const HOCKEY_LEAGUES = [
163
167
  dimensions: rink({ trapezoid: null }),
164
168
  sources: ["pwhl-2025"],
165
169
  },
170
+ {
171
+ id: "olympic",
172
+ family: "hockey",
173
+ name: { en: "Olympic ice hockey rink (60 by 26 m)", ja: "オリンピックのアイスホッケーリンク(60×26m)" },
174
+ unit: "m",
175
+ // The IIHF rink at the narrowest width its rules allow (Rule 1.2: 26 to 30 m). The IIHF's statement of 9 December 2025 gives the ice of Milano Cortina 2026 as 60.0 by 26.0 m, "the rink size used at the Beijing 2022 Olympic Winter Games", and "fully consistent with" the NHL's Global Series arena specifications; it says nothing of the markings, which are the IIHF's own (the corner radius and the rest are the IIHF rink's).
176
+ dimensions: { ...IIHF_RINK, width: 26 },
177
+ sources: ["iihf-milan-2025", "iihf-2025"],
178
+ },
179
+ {
180
+ id: "boston-garden",
181
+ family: "hockey",
182
+ name: { en: "Boston Garden hockey rink", ja: "ボストン・ガーデンのアイスホッケーリンク" },
183
+ unit: "ft",
184
+ // Boston Garden (1928 to 1995, the Bruins' home) had an ice surface of 58.2 by 25.3 m (191 by 83 feet), "some nine feet shorter and two feet narrower than standard". Only the size is published; every other figure is the NHL rink's (the boards' corners, the lines and the circles are those of today's Rule 1), which is how it is drawn.
185
+ dimensions: rink({ length: 58.2 / 0.3048, width: 25.3 / 0.3048 }),
186
+ sources: ["wp-boston-garden"],
187
+ },
166
188
  ];