@sportsdataverse/sporty 0.1.0 → 0.2.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.
package/README.md CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
  <!-- badges: end -->
19
19
 
20
- Sport surfaces (courts, rinks, fields) as plain geometry for SportsDataverse plots. TypeScript port of the R package [sportyR](https://github.com/sportsdataverse/sportyR) 2.2.3: every surface is a `Scene` of polygons and text, rendered by the `svg`, `canvas`, `plot` and `d3` subpaths.
20
+ Sport surfaces (courts, rinks, fields) as plain geometry for SportsDataverse plots. TypeScript port of the R package [sportyR](https://github.com/sportsdataverse/sportyR) 2.4.0: every surface is a `Scene` of polygons and text, rendered by the `svg`, `canvas`, `plot` and `d3` subpaths.
21
21
 
22
22
  Part of [sdvplot-js](https://github.com/sportsdataverse/sdvplot-js#readme) · [Documentation](https://plot.sportsdataverse.org) · [API reference](https://plot.sportsdataverse.org/api/sporty/) ·
23
23
  [Gallery](https://plot.sportsdataverse.org/gallery/sporty/) · [Notebooks](https://plot.sportsdataverse.org/notebooks/) · [Source](https://github.com/sportsdataverse/sdvplot-js/tree/main/packages/sporty)
@@ -86,7 +86,7 @@ const { width, height } = drawScene(ctx, basketballCourt("nba"), { width: 800 })
86
86
 
87
87
  | Import | Contents |
88
88
  | --- | --- |
89
- | `@sportsdataverse/sporty` | `surface`, `SPORTS`, `basketballCourt`, `hockeyRink`, `footballField`, `soccerPitch`, `baseballField`, `tennisCourt`, `volleyballCourt`, `curlingSheet`, `lacrosseField`, `Scene`, `toSurfaceFrame`, `FRAMES`, `basketballZoneOf`, `basketballZones`, `BASKETBALL_ZONES`, `BASKETBALL_ZONE_LABELS`, errors |
89
+ | `@sportsdataverse/sporty` | `surface`, `SPORTS`, `basketballCourt`, `hockeyRink`, `footballField`, `soccerPitch`, `baseballField`, `tennisCourt`, `volleyballCourt`, `curlingSheet`, `lacrosseField`, `softballField`, `Scene`, `toSurfaceFrame`, `FRAMES`, `basketballZoneOf`, `basketballZones`, `BASKETBALL_ZONES`, `BASKETBALL_ZONE_LABELS`, errors |
90
90
  | `@sportsdataverse/sporty/svg` | `toSVG` (`width`, `height`, `background`, `precision`, `id`, `arcs: "sampled" \| "svg"`) |
91
91
  | `@sportsdataverse/sporty/specs` | generated parameter specs for all sports |
92
92
  | `@sportsdataverse/sporty/plot` | `surfaceMark`, `surfaceScales`, `sceneToGeoJSON` (optional peer `@observablehq/plot`) |
@@ -106,6 +106,7 @@ const { width, height } = drawScene(ctx, basketballCourt("nba"), { width: 800 })
106
106
  | volleyball | `volleyballCourt` | `custom`, `fivb`, `ncaa`, `usa volleyball` | `m` |
107
107
  | curling | `curlingSheet` | `curling canada`, `custom`, `wcf` | Drawn vertically: +y toward the top house, `sheet_width` along x; `ft` |
108
108
  | lacrosse | `lacrosseField` | `custom`, `ncaam`, `ncaaw`, `nll`, `pll`, `usam`, `usaw`, `world lacrosse` | Mixed native units: `yd` (ncaam, pll, usam), `m` (ncaaw, usaw), `ft` (nll, world lacrosse); pass `units` to draw them alike |
109
+ | softball | `softballField` | `custom`, `ncaa` | `origin: "home_plate"` like baseball; `ft` |
109
110
 
110
111
  ## **Coordinate frames**
111
112
 
@@ -122,22 +123,20 @@ Basketball shot zones: `basketballZoneOf(x, y, shotValue, { league, scale })` na
122
123
 
123
124
  ## **Provenance and parity**
124
125
 
125
- Ported from sportyR 2.2.3 - see [NOTICE.md](https://github.com/sportsdataverse/sdvplot-js/blob/main/packages/sporty/NOTICE.md) (J3). The R package is the oracle: the test suite compares every feature of all 53 non-`custom` league surfaces point for point to 1e-9 against R output stored under `fixtures/sporty`, and a league without fixtures fails. Regenerate the fixtures with `pnpm oracle:sporty basketball hockey football soccer baseball tennis volleyball curling lacrosse` (needs R and sportyR); the oracle refuses to run unless the installed sportyR's `surface_dimensions` equals the vendored `data/surface-dimensions.json`, and records that file's sha256 in `fixtures/sporty/VERSION`. Parameter specs in `src/specs` are generated from the vendored JSON (`pnpm codegen`).
126
+ Ported from sportyR 2.4.0 (vendored from sportyR main at b97443a, which carries the geometry fixes merged in sportyR PR #68) - see [NOTICE.md](https://github.com/sportsdataverse/sdvplot-js/blob/main/packages/sporty/NOTICE.md) (J3). The R package is the oracle: the test suite compares every feature of all 54 non-`custom` league surfaces point for point to 1e-9 against R output stored under `fixtures/sporty`, and a league without fixtures fails. Regenerate the fixtures with `pnpm oracle:sporty basketball hockey football soccer baseball tennis volleyball curling lacrosse softball` (needs R and sportyR; set `R_LIBS` to a private library holding the vendored sportyR, and `SPORTYR_REPO` to its checkout so `VERSION` records the sha); the oracle refuses to run unless the installed sportyR's `surface_dimensions` equals the vendored `data/surface-dimensions.json`, and records that file's sha256 in `fixtures/sporty/VERSION`. Parameter specs in `src/specs` are generated from the vendored JSON (`pnpm codegen`).
126
127
 
127
128
  Drift gates in CI: `pnpm codegen --check` (specs match the vendored JSON) and `test/fixtures-version.test.ts` (the vendored JSON's sha256 and sportyR version/checkout match the ones the fixtures were generated from). `pnpm vendor --check` compares the vendored JSON with a sportyR checkout, so it only runs where one exists (`SPORTYR_REPO`); elsewhere it skips.
128
129
 
129
130
  ## **Differences from sportyR**
130
131
 
131
132
  - An unknown `displayRange` throws `UnknownDisplayRangeError` (R silently falls back to `"full"`).
132
- - `units` converts the anchors and display limits too (R converts only the feature points, so non-native units plot wrongly).
133
133
  - Vector colours recycle per copy of a feature (`colorAt`), as R `data.frame()` does. Curling's `house_rings` recycles too, so a single colour fills every ring; R indexes it per ring and leaves rings 2 and 3 `NA`.
134
134
  - A lane space mark takes its own set's colour; R reads row `i` (the lane index) of the set instead, which is `NA` once a court has more lanes than marks per set. Default leagues are unaffected.
135
135
  - An `undefined`/`null` entry in `updates` or `colorUpdates` keeps the default.
136
- - The `custom` league builds a surface from its all-zero defaults in every sport. R builds it for baseball, curling, hockey, soccer, tennis and volleyball, and errors for basketball, football and lacrosse.
137
- - A `custom` league with empty native units (every sport except volleyball, whose `custom` is in metres) reads them as feet, so `units` converts it. R errors with `" is not a viable unit"` for the five of those sports it can build (e.g. `geom_curling("custom", sheet_units = "m")`).
136
+ - The `custom` league builds a surface from its all-zero defaults in every sport. sportyR 2.4.0 builds it for every sport but football, which errors in `seq()`.
137
+ - A `custom` league with empty native units (every sport except volleyball, whose `custom` is in metres) reads them as feet, so `units` converts it. sportyR 2.4.0 stops instead and asks for the units to be set first (e.g. `geom_curling("custom", sheet_units = "m")`).
138
138
  - Tennis accepts R's misspelt receiving-half keys (`receivicehalf`, `receivice_half`, `receivice half`) and the correct spellings (`receivehalf`, `receive_half`, `receive half`); R has only the misspelling and draws the full court for the correct one.
139
- - Lacrosse: a user's `center_face_off_marker` colour wins over the contrasting `#ffcb05` default (ncaam, `custom`); R overwrites it.
140
- - Lacrosse: the five parameters R reads but no league defines (`nzone_length`, `board_thickness`, `center_face_off_marker_radius`, `corner_face_off_marker_bar_width`, `corner_face_off_marker_bar_length`) are fixed at 0 as R draws them, and `updates` cannot set them.
139
+ - Lacrosse: the three parameters R reads but no league defines (`center_face_off_marker_radius`, `corner_face_off_marker_bar_width`, `corner_face_off_marker_bar_length`) are fixed at 0 as R draws them, and `updates` cannot set them.
141
140
  - Text features carry a `fitBox` (the ggfittext box) that the SVG renderer fits by height only.
142
141
 
143
142
  ## **Performance**
@@ -183,7 +182,7 @@ The [repository README](https://github.com/sportsdataverse/sdvplot-js#readme) co
183
182
  ## **Logos, trademarks and data**
184
183
 
185
184
  The surface geometry and the surface-dimensions data are ported from
186
- [sportyR](https://github.com/sportsdataverse/sportyR) 2.2.3 (Ross Drucker) and
185
+ [sportyR](https://github.com/sportsdataverse/sportyR) 2.4.0 (Ross Drucker) and
187
186
  [sportypy](https://sportypy.sportsdataverse.org/); by agreement between the SportsDataverse maintainers the ported
188
187
  material is distributed here under MIT. League names identify the rule sets the dimensions follow; sporty draws no
189
188
  league or team marks.
package/dist/canvas.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { C as Color, S as Scene } from './scene-Dv5KLA63.js';
1
+ import { C as Color, S as Scene } from './scene-D5Jc19yu.js';
2
2
 
3
3
  /**
4
4
  * Browser `CanvasRenderingContext2D` or `@napi-rs/canvas` `SKRSContext2D`; only the members below are used.
package/dist/canvas.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { InputError } from './chunk-23Y47RKN.js';
2
- import { isVisiblePolygon, hidden, isVisibleText } from './chunk-X4CSZYJQ.js';
2
+ import { isVisiblePolygon, hidden, isVisibleText } from './chunk-DRH5NZI4.js';
3
3
 
4
4
  // src/canvas.ts
5
5
  function drawScene(ctx, scene, opts = {}) {
@@ -12,7 +12,7 @@ var CURLING_SPECS = /* @__PURE__ */ Object.freeze({ "curling canada": /* @__PURE
12
12
 
13
13
  // src/specs/football.ts
14
14
  var FOOTBALL_LEAGUES = ["cfl", "custom", "ncaa", "nfhs11", "nfhs6", "nfhs8", "nfhs9", "nfl"];
15
- var FOOTBALL_SPECS = /* @__PURE__ */ Object.freeze({ "cfl": /* @__PURE__ */ Object.freeze({ "additional_minor_yard_lines": [-5, -10, -15], "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "", "boundary_line_thickness": 1.3333, "coaching_box_width": 0, "endzone_length": 20, "extra_apron_padding": 2, "field_border_behind_bench": false, "field_border_thickness": 0, "field_bordered": false, "field_length": 110, "field_units": "yd", "field_width": 65, "goal_line_thickness": 0.1111, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 17, "inbound_hashmark_separation": 15.6667, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "C", "5", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "5", "C", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 0, "sideline_to_bottom_of_numbers": 7, "sideline_to_major_yard_line": 0.1111, "sideline_to_outer_yard_line": 0.1111, "team_bench_area_border_thickness": 0, "team_bench_length_back_side": 30, "team_bench_length_field_side": 30, "team_bench_width": 0, "top_number_to_arrow": 0.4167, "yard_line_to_arrow": 1.8333 }), "custom": /* @__PURE__ */ Object.freeze({ "arrow_base": 0, "arrow_length": 0, "arrow_line_dist": 0, "bench_shape": "", "boundary_line_thickness": 0, "coaching_box_width": 0, "endzone_length": 0, "extra_apron_padding": 0, "field_border_behind_bench": false, "field_border_thickness": 0, "field_bordered": false, "field_length": 0, "field_units": "", "field_width": 0, "goal_line_thickness": 0, "inbound_cross_hashmark_length": 0, "inbound_cross_hashmark_separation": 0, "inbound_hashmark_separation": 0, "major_yard_line_distance": 1, "minor_line_thickness": 0, "minor_yard_line_height": 0, "number_font": "", "number_height": 0, "number_to_yard_line": 0, "number_width": 0, "numbers_bottom": [], "numbers_top": [], "restricted_area_width": 0, "sideline_to_bottom_of_numbers": 0, "sideline_to_major_yard_line": 0, "sideline_to_outer_yard_line": 0, "team_bench_area_border_thickness": 0, "team_bench_length_back_side": 0, "team_bench_length_field_side": 0, "team_bench_width": 0, "top_number_to_arrow": 0, "try_mark_distance": 0, "try_mark_width": 0, "yard_line_to_arrow": 0 }), "ncaa": /* @__PURE__ */ Object.freeze({ "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "rectangular", "boundary_line_thickness": 0.1111, "coaching_box_width": 2, "endzone_length": 10, "extra_apron_padding": 2, "field_border_behind_bench": true, "field_border_thickness": 1.3333, "field_bordered": false, "field_length": 100, "field_units": "yd", "field_width": 53.3333, "goal_line_thickness": 0.1111, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 13.3333, "inbound_hashmark_separation": 13.3333, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 1.3333, "sideline_to_bottom_of_numbers": 7, "sideline_to_major_yard_line": 0.1111, "sideline_to_outer_yard_line": 0.1111, "team_bench_area_border_thickness": 0.1111, "team_bench_length_back_side": 60, "team_bench_length_field_side": 60, "team_bench_width": 4, "top_number_to_arrow": 0.4167, "try_mark_distance": 3, "try_mark_width": 1, "yard_line_to_arrow": 1.8333 }), "nfhs11": /* @__PURE__ */ Object.freeze({ "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "rectangular", "boundary_line_thickness": 2, "coaching_box_width": 2, "endzone_length": 10, "extra_apron_padding": 5, "field_bordered": false, "field_length": 100, "field_units": "yd", "field_width": 53.3333, "goal_line_thickness": 0.2222, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 17.7778, "inbound_hashmark_separation": 17.7778, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 2, "sideline_to_bottom_of_numbers": 7, "sideline_to_major_yard_line": 0.2222, "sideline_to_outer_yard_line": 0.2222, "team_bench_area_border_thickness": 0.1111, "team_bench_length_back_side": 50, "team_bench_length_field_side": 50, "team_bench_width": 4, "top_number_to_arrow": 0.4167, "try_mark_distance": 3, "try_mark_width": 1, "yard_line_to_arrow": 1.8333 }), "nfhs6": /* @__PURE__ */ Object.freeze({ "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "rectangular", "boundary_line_thickness": 2, "coaching_box_width": 2, "endzone_length": 10, "extra_apron_padding": 5, "field_bordered": false, "field_length": 80, "field_units": "yd", "field_width": 40, "goal_line_thickness": 0.2222, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 10, "inbound_hashmark_separation": 10, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 2, "sideline_to_bottom_of_numbers": 5, "sideline_to_major_yard_line": 0.2222, "sideline_to_outer_yard_line": 0.2222, "team_bench_area_border_thickness": 0.1111, "team_bench_length_back_side": 30, "team_bench_length_field_side": 30, "team_bench_width": 4, "top_number_to_arrow": 0.4167, "try_mark_distance": 2, "try_mark_width": 1, "yard_line_to_arrow": 1.8333 }), "nfhs8": /* @__PURE__ */ Object.freeze({ "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "rectangular", "boundary_line_thickness": 2, "coaching_box_width": 2, "endzone_length": 10, "extra_apron_padding": 5, "field_bordered": false, "field_length": 80, "field_units": "yd", "field_width": 40, "goal_line_thickness": 0.2222, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 10, "inbound_hashmark_separation": 10, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 2, "sideline_to_bottom_of_numbers": 5, "sideline_to_major_yard_line": 0.2222, "sideline_to_outer_yard_line": 0.2222, "team_bench_area_border_thickness": 0.1111, "team_bench_length_back_side": 30, "team_bench_length_field_side": 30, "team_bench_width": 4, "top_number_to_arrow": 0.4167, "try_mark_distance": 2, "try_mark_width": 1, "yard_line_to_arrow": 1.8333 }), "nfhs9": /* @__PURE__ */ Object.freeze({ "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "rectangular", "boundary_line_thickness": 2, "coaching_box_width": 2, "endzone_length": 10, "extra_apron_padding": 5, "field_bordered": false, "field_length": 80, "field_units": "yd", "field_width": 40, "goal_line_thickness": 0.2222, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 7.7778, "inbound_hashmark_separation": 7.7778, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 2, "sideline_to_bottom_of_numbers": 5, "sideline_to_major_yard_line": 0.2222, "sideline_to_outer_yard_line": 0.2222, "team_bench_area_border_thickness": 0.1111, "team_bench_length_back_side": 30, "team_bench_length_field_side": 30, "team_bench_width": 4, "top_number_to_arrow": 0.4167, "try_mark_distance": 3, "try_mark_width": 1, "yard_line_to_arrow": 1.8333 }), "nfl": /* @__PURE__ */ Object.freeze({ "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "trapezoid", "boundary_line_thickness": 2, "coaching_box_width": 2, "endzone_length": 10, "extra_apron_padding": 2, "field_border_behind_bench": true, "field_border_thickness": 1.3333, "field_bordered": false, "field_length": 100, "field_units": "yd", "field_width": 53.3333, "goal_line_thickness": 0.2222, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 6.1667, "inbound_hashmark_separation": 6.1667, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 2, "sideline_to_bottom_of_numbers": 12, "sideline_to_major_yard_line": 0.2222, "sideline_to_outer_yard_line": 0.2222, "team_bench_area_border_thickness": 0.1111, "team_bench_length_back_side": 37.2639, "team_bench_length_field_side": 44.9861, "team_bench_width": 6, "top_number_to_arrow": 0.4167, "try_mark_distance": 2, "try_mark_width": 1, "yard_line_to_arrow": 1.8333 }) });
15
+ var FOOTBALL_SPECS = /* @__PURE__ */ Object.freeze({ "cfl": /* @__PURE__ */ Object.freeze({ "additional_minor_yard_lines": [-5, -10, -15], "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "", "boundary_line_thickness": 1.3333, "coaching_box_width": 0, "endzone_length": 20, "extra_apron_padding": 2, "field_border_behind_bench": false, "field_border_thickness": 0, "field_bordered": false, "field_length": 110, "field_units": "yd", "field_width": 65, "goal_line_thickness": 0.1111, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 17, "inbound_hashmark_separation": 15.6667, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "C", "5", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "5", "C", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 0, "sideline_to_bottom_of_numbers": 7, "sideline_to_major_yard_line": 0.1111, "sideline_to_outer_yard_line": 0.1111, "team_bench_area_border_thickness": 0, "team_bench_length_back_side": 30, "team_bench_length_field_side": 30, "team_bench_width": 0, "top_number_to_arrow": 0.4167, "yard_line_to_arrow": 1.8333 }), "custom": /* @__PURE__ */ Object.freeze({ "arrow_base": 0, "arrow_length": 0, "arrow_line_dist": 0, "bench_shape": "", "boundary_line_thickness": 0, "coaching_box_width": 0, "endzone_length": 0, "extra_apron_padding": 0, "field_border_behind_bench": false, "field_border_thickness": 0, "field_bordered": false, "field_length": 0, "field_units": "", "field_width": 0, "goal_line_thickness": 0, "inbound_cross_hashmark_length": 0, "inbound_cross_hashmark_separation": 0, "inbound_hashmark_separation": 0, "major_yard_line_distance": 1, "minor_line_thickness": 0, "minor_yard_line_height": 0, "number_font": "", "number_height": 0, "number_to_yard_line": 0, "number_width": 0, "numbers_bottom": [], "numbers_top": [], "restricted_area_width": 0, "sideline_to_bottom_of_numbers": 0, "sideline_to_major_yard_line": 0, "sideline_to_outer_yard_line": 0, "team_bench_area_border_thickness": 0, "team_bench_length_back_side": 0, "team_bench_length_field_side": 0, "team_bench_width": 0, "top_number_to_arrow": 0, "try_mark_distance": 0, "try_mark_width": 0, "yard_line_to_arrow": 0 }), "ncaa": /* @__PURE__ */ Object.freeze({ "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "rectangular", "boundary_line_thickness": 0.1111, "coaching_box_width": 2, "endzone_length": 10, "extra_apron_padding": 2, "field_border_behind_bench": true, "field_border_thickness": 1.3333, "field_bordered": true, "field_length": 100, "field_units": "yd", "field_width": 53.3333, "goal_line_thickness": 0.1111, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 13.3333, "inbound_hashmark_separation": 13.3333, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 1.8889, "sideline_to_bottom_of_numbers": 7, "sideline_to_major_yard_line": 0.1111, "sideline_to_outer_yard_line": 0.1111, "team_bench_area_border_thickness": 0.1111, "team_bench_length_back_side": 60, "team_bench_length_field_side": 60, "team_bench_width": 4, "top_number_to_arrow": 0.4167, "try_mark_distance": 3, "try_mark_width": 1, "yard_line_to_arrow": 1.8333 }), "nfhs11": /* @__PURE__ */ Object.freeze({ "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "rectangular", "boundary_line_thickness": 2, "coaching_box_width": 2, "endzone_length": 10, "extra_apron_padding": 5, "field_bordered": true, "field_length": 100, "field_units": "yd", "field_width": 53.3333, "goal_line_thickness": 0.2222, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 17.7778, "inbound_hashmark_separation": 17.7778, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 2, "sideline_to_bottom_of_numbers": 7, "sideline_to_major_yard_line": 0.2222, "sideline_to_outer_yard_line": 0.2222, "team_bench_area_border_thickness": 0.1111, "team_bench_length_back_side": 50, "team_bench_length_field_side": 50, "team_bench_width": 4, "top_number_to_arrow": 0.4167, "try_mark_distance": 3, "try_mark_width": 1, "yard_line_to_arrow": 1.8333 }), "nfhs6": /* @__PURE__ */ Object.freeze({ "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "rectangular", "boundary_line_thickness": 2, "coaching_box_width": 2, "endzone_length": 10, "extra_apron_padding": 5, "field_bordered": true, "field_length": 80, "field_units": "yd", "field_width": 40, "goal_line_thickness": 0.2222, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 10, "inbound_hashmark_separation": 10, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 2, "sideline_to_bottom_of_numbers": 5, "sideline_to_major_yard_line": 0.2222, "sideline_to_outer_yard_line": 0.2222, "team_bench_area_border_thickness": 0.1111, "team_bench_length_back_side": 30, "team_bench_length_field_side": 30, "team_bench_width": 4, "top_number_to_arrow": 0.4167, "try_mark_distance": 2, "try_mark_width": 1, "yard_line_to_arrow": 1.8333 }), "nfhs8": /* @__PURE__ */ Object.freeze({ "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "rectangular", "boundary_line_thickness": 2, "coaching_box_width": 2, "endzone_length": 10, "extra_apron_padding": 5, "field_bordered": true, "field_length": 80, "field_units": "yd", "field_width": 40, "goal_line_thickness": 0.2222, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 10, "inbound_hashmark_separation": 10, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 2, "sideline_to_bottom_of_numbers": 5, "sideline_to_major_yard_line": 0.2222, "sideline_to_outer_yard_line": 0.2222, "team_bench_area_border_thickness": 0.1111, "team_bench_length_back_side": 30, "team_bench_length_field_side": 30, "team_bench_width": 4, "top_number_to_arrow": 0.4167, "try_mark_distance": 2, "try_mark_width": 1, "yard_line_to_arrow": 1.8333 }), "nfhs9": /* @__PURE__ */ Object.freeze({ "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "rectangular", "boundary_line_thickness": 2, "coaching_box_width": 2, "endzone_length": 10, "extra_apron_padding": 5, "field_bordered": true, "field_length": 80, "field_units": "yd", "field_width": 40, "goal_line_thickness": 0.2222, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 7.7778, "inbound_hashmark_separation": 7.7778, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 2, "sideline_to_bottom_of_numbers": 5, "sideline_to_major_yard_line": 0.2222, "sideline_to_outer_yard_line": 0.2222, "team_bench_area_border_thickness": 0.1111, "team_bench_length_back_side": 30, "team_bench_length_field_side": 30, "team_bench_width": 4, "top_number_to_arrow": 0.4167, "try_mark_distance": 3, "try_mark_width": 1, "yard_line_to_arrow": 1.8333 }), "nfl": /* @__PURE__ */ Object.freeze({ "arrow_base": 0.5, "arrow_length": 0.9682, "arrow_line_dist": 10, "bench_shape": "trapezoid", "boundary_line_thickness": 2, "coaching_box_width": 2, "endzone_length": 10, "extra_apron_padding": 2, "field_border_behind_bench": true, "field_border_thickness": 1.3333, "field_bordered": true, "field_length": 100, "field_units": "yd", "field_width": 53.3333, "goal_line_thickness": 0.2222, "inbound_cross_hashmark_length": 0.2778, "inbound_cross_hashmark_separation": 6.1667, "inbound_hashmark_separation": 6.1667, "major_yard_line_distance": 5, "minor_line_thickness": 0.1111, "minor_yard_line_height": 0.6667, "number_font": "Clarendon-Regular", "number_height": 2, "number_to_yard_line": 0.3333, "number_width": 1.3333, "numbers_bottom": ["1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1", "0"], "numbers_top": ["0", "1", "0", "2", "0", "3", "0", "4", "0", "5", "0", "4", "0", "3", "0", "2", "0", "1"], "restricted_area_width": 2, "sideline_to_bottom_of_numbers": 12, "sideline_to_major_yard_line": 0.2222, "sideline_to_outer_yard_line": 0.2222, "team_bench_area_border_thickness": 0.1111, "team_bench_length_back_side": 37.2639, "team_bench_length_field_side": 44.9861, "team_bench_width": 6, "top_number_to_arrow": 0.4167, "try_mark_distance": 2, "try_mark_width": 1, "yard_line_to_arrow": 1.8333 }) });
16
16
 
17
17
  // src/specs/hockey.ts
18
18
  var HOCKEY_LEAGUES = ["ahl", "custom", "echl", "iihf", "ncaa", "nhl", "nwhl", "ohl", "phf", "pwhl", "qmjhl", "ushl"];
@@ -20,12 +20,16 @@ var HOCKEY_SPECS = /* @__PURE__ */ Object.freeze({ "ahl": /* @__PURE__ */ Object
20
20
 
21
21
  // src/specs/lacrosse.ts
22
22
  var LACROSSE_LEAGUES = ["custom", "ncaam", "ncaaw", "nll", "pll", "usam", "usaw", "world lacrosse"];
23
- var LACROSSE_SPECS = /* @__PURE__ */ Object.freeze({ "custom": /* @__PURE__ */ Object.freeze({ "boundary_thickness": 0, "center_face_off_marker_color_contrasting": true, "center_face_off_marker_shape": "square", "center_face_off_marker_side_length": 0, "center_line_thickness": 0, "center_line_width": 0, "defensive_area_line_center_to_sideline": 0, "defensive_area_line_length": 0, "defensive_area_line_thickness": 0, "field_apron_thickness": 0, "field_length": 0, "field_shape": "rectangle", "field_units": "", "field_width": 0, "goal_circle_full_360": true, "goal_circle_radius": 0, "goal_circle_thickness": 0, "goal_depth": 0, "goal_frame_opening_interior": 0, "goal_frame_width": 0, "goal_line_center_to_end_line": 0, "goal_line_full_diameter": false, "goal_line_thickness": 0, "goal_mouth_line_thickness": 0, "goal_mouth_radius": 0, "goal_post_thickness": 0, "restraining_line_outer_edge_to_center": 0, "restraining_line_thickness": 0, "wing_line_center_to_sideline": 0, "wing_line_length": 0, "wing_line_thickness": 0 }), "ncaam": /* @__PURE__ */ Object.freeze({ "boundary_thickness": 0.1111, "center_face_off_marker_color_contrasting": true, "center_face_off_marker_shape": "square", "center_face_off_marker_side_length": 0.1111, "center_line_thickness": 0.1111, "center_line_width": 60, "defensive_area_line_center_to_sideline": 10, "defensive_area_line_length": 35, "defensive_area_line_thickness": 0.1111, "field_apron_thickness": 5, "field_length": 110, "field_shape": "rectangle", "field_units": "yd", "field_width": 60, "goal_circle_full_360": true, "goal_circle_radius": 3, "goal_circle_thickness": 0.1111, "goal_depth": 1.3333, "goal_frame_opening_interior": 2, "goal_frame_width": 2, "goal_line_center_to_end_line": 15, "goal_line_full_diameter": false, "goal_line_thickness": 0.1667, "goal_mouth_line_thickness": 0.1111, "goal_mouth_radius": 2, "goal_post_thickness": 0.0417, "restraining_line_outer_edge_to_center": 20, "restraining_line_thickness": 0.1111, "wing_line_center_to_sideline": 10, "wing_line_length": 20, "wing_line_thickness": 0.1111 }), "ncaaw": /* @__PURE__ */ Object.freeze({ "below_goal_marking_radius": 0.1524, "below_goal_marking_to_goal_line": 4.572, "boundary_thickness": 0.101, "center_circle_radius": 9, "center_circle_thickness": 0.101, "center_line_thickness": 0.101, "center_line_width": 3, "field_apron_thickness": 4, "field_length": 110, "field_shape": "rectangle", "field_units": "m", "field_width": 60, "goal_circle_full_360": true, "goal_circle_radius": 2.6, "goal_circle_thickness": 0.101, "goal_depth": 1.3333, "goal_fan_hash_mark_length": 0.3048, "goal_fan_hash_mark_line_thickness": 0.101, "goal_fan_hash_mark_separation_from_center": [0, 4, 8, 12], "goal_fan_line_thickness": 0.101, "goal_fan_radius": 10.6, "goal_frame_opening_interior": 2, "goal_frame_width": 2, "goal_line_center_to_end_line": 8.899, "goal_line_full_diameter": false, "goal_line_thickness": 0.05, "goal_mouth_hash_mark_length": 0.4058, "goal_mouth_hash_mark_line_thickness": 0.101, "goal_mouth_line_thickness": 0.101, "goal_mouth_radius": 14.6, "goal_mouth_semi_circle_separation": 2.6, "goal_post_thickness": 0.0417, "restraining_line_outer_edge_to_center": 24, "restraining_line_thickness": 0.101 }), "nll": /* @__PURE__ */ Object.freeze({ "bench_depth": 5, "bench_length": 24, "bench_separation": 9.25, "boards_thickness": 0.25, "center_circle_radius": 11, "center_circle_thickness": 0.1667, "center_face_off_marker_shape": "X", "center_face_off_marker_side_length": 2.5, "center_face_off_marker_side_width": 0.1667, "center_line_thickness": 1, "center_line_width": 85, "change_area_extension": 6, "change_area_outline_thickness": 0.1667, "change_area_width": 3, "corner_face_off_marker_radius": 1, "corner_face_off_marker_shape": "O", "corner_face_off_marker_to_attack_line_outer": 15, "corner_face_off_marker_to_boards": 15, "corner_radius": 28, "field_apron_thickness": 5, "field_length": 200, "field_shape": "oval", "field_units": "ft", "field_width": 85, "goal_circle_full_360": false, "goal_circle_radius": 9.25, "goal_circle_thickness": 0.1667, "goal_depth": 3.82, "goal_depth_to_circle": 1, "goal_frame_opening_interior": 4.75, "goal_frame_width": 2, "goal_line_center_to_end_line": 12, "goal_line_full_diameter": true, "goal_line_thickness": 0.1667, "goal_post_thickness": 0.0417, "has_boards": true, "has_endlines": false, "has_sidelines": false, "neutral_zone_length": 85, "penalty_box_depth": 5, "penalty_box_length": 8, "penalty_box_separation": 8, "referee_crease_radius": 10, "referee_crease_thickness": 0.1667, "restraining_line_outer_edge_to_center": 42.5, "restraining_line_thickness": 1 }), "pll": /* @__PURE__ */ Object.freeze({ "boundary_thickness": 0.1111, "center_face_off_marker_shape": "X", "center_face_off_marker_side_length": 2, "center_face_off_marker_side_width": 0.3333, "center_line_thickness": 0.1111, "center_line_width": 60, "field_apron_thickness": 6, "field_length": 100, "field_shape": "rectangle", "field_units": "yd", "field_width": 60, "goal_arc_extension": 15, "goal_arc_line_thickness": 0.1111, "goal_arc_radius": 15, "goal_circle_full_360": true, "goal_circle_radius": 3, "goal_circle_thickness": 0.1111, "goal_depth": 1.3333, "goal_frame_opening_interior": 2, "goal_frame_width": 2, "goal_line_center_to_end_line": 15, "goal_line_full_diameter": false, "goal_line_thickness": 0.1667, "goal_post_thickness": 0.0417, "wing_line_center_to_sideline": 11, "wing_line_length": 20, "wing_line_thickness": 0.1111 }), "usam": /* @__PURE__ */ Object.freeze({ "boundary_thickness": 0.1111, "center_face_off_marker_color_contrasting": false, "center_face_off_marker_shape": "X", "center_face_off_marker_side_length": 2.5, "center_face_off_marker_side_width": 0.1667, "center_line_thickness": 0.1111, "center_line_width": 60, "defensive_area_line_center_to_sideline": 10, "defensive_area_line_length": 35, "defensive_area_line_thickness": 0.1111, "field_apron_thickness": 5, "field_length": 110, "field_shape": "rectangle", "field_units": "yd", "field_width": 60, "goal_circle_full_360": true, "goal_circle_radius": 3, "goal_circle_thickness": 0.1111, "goal_depth": 1.3333, "goal_frame_opening_interior": 2, "goal_frame_width": 2, "goal_line_center_to_end_line": 15, "goal_line_full_diameter": false, "goal_line_thickness": 0.0556, "goal_post_thickness": 0.0417, "restraining_line_outer_edge_to_center": 20, "restraining_line_thickness": 0.1111, "wing_line_center_to_sideline": 10, "wing_line_length": 20, "wing_line_thickness": 0.1111 }), "usaw": /* @__PURE__ */ Object.freeze({ "below_goal_marking_radius": 0.1524, "below_goal_marking_to_goal_line": 4.572, "boundary_thickness": 0.101, "center_circle_radius": 9, "center_circle_thickness": 0.101, "center_line_thickness": 0.101, "center_line_width": 3, "field_apron_thickness": 4, "field_length": 110, "field_shape": "rectangle", "field_units": "m", "field_width": 60, "goal_circle_full_360": true, "goal_circle_radius": 2.6, "goal_circle_thickness": 0.101, "goal_depth": 1.3333, "goal_fan_hash_mark_length": 0.3048, "goal_fan_hash_mark_line_thickness": 0.101, "goal_fan_hash_mark_separation_from_center": [0, 4, 8, 12], "goal_fan_line_thickness": 0.101, "goal_fan_radius": 10.6, "goal_frame_opening_interior": 2, "goal_frame_width": 2, "goal_line_center_to_end_line": 8.899, "goal_line_full_diameter": false, "goal_line_thickness": 0.05, "goal_mouth_hash_mark_length": 0.4058, "goal_mouth_hash_mark_line_thickness": 0.101, "goal_mouth_line_thickness": 0.101, "goal_mouth_radius": 14.6, "goal_mouth_semi_circle_separation": 2.6, "goal_post_thickness": 0.0417, "restraining_line_outer_edge_to_center": 24, "restraining_line_thickness": 0.101 }), "world lacrosse": /* @__PURE__ */ Object.freeze({ "bench_depth": 5, "bench_length": 24, "bench_separation": 9.25, "boards_thickness": 0.25, "center_circle_radius": 11, "center_circle_thickness": 0.1667, "center_face_off_marker_shape": "X", "center_face_off_marker_side_length": 2.5, "center_face_off_marker_side_width": 0.1667, "center_line_thickness": 0.1667, "center_line_width": 85, "change_area_extension": 6, "change_area_outline_thickness": 0.1667, "change_area_width": 3, "corner_face_off_marker_radius": 1, "corner_face_off_marker_shape": "O", "corner_face_off_marker_to_attack_line_outer": 15, "corner_face_off_marker_to_boards": 15, "corner_radius": 28, "field_apron_thickness": 5, "field_length": 200, "field_shape": "oval", "field_units": "ft", "field_width": 85, "goal_circle_full_360": false, "goal_circle_radius": 9.25, "goal_circle_thickness": 0.1667, "goal_depth": 4, "goal_depth_to_circle": 1, "goal_frame_opening_interior": 2, "goal_frame_width": 2, "goal_line_center_to_end_line": 12, "goal_line_full_diameter": true, "goal_line_thickness": 0.1667, "goal_post_thickness": 0.0417, "has_boards": true, "has_endlines": false, "has_sidelines": false, "neutral_zone_length": 85, "penalty_box_depth": 5, "penalty_box_length": 8, "penalty_box_separation": 8, "referee_crease_radius": 10, "referee_crease_thickness": 0.1667, "restraining_line_outer_edge_to_center": 42.5, "restraining_line_thickness": 0.1667 }) });
23
+ var LACROSSE_SPECS = /* @__PURE__ */ Object.freeze({ "custom": /* @__PURE__ */ Object.freeze({ "boundary_thickness": 0, "center_face_off_marker_color_contrasting": true, "center_face_off_marker_shape": "square", "center_face_off_marker_side_length": 0, "center_line_thickness": 0, "center_line_width": 0, "defensive_area_line_center_to_sideline": 0, "defensive_area_line_length": 0, "defensive_area_line_thickness": 0, "field_apron_thickness": 0, "field_length": 0, "field_shape": "rectangle", "field_units": "", "field_width": 0, "goal_circle_full_360": true, "goal_circle_radius": 0, "goal_circle_thickness": 0, "goal_depth": 0, "goal_frame_opening_interior": 0, "goal_frame_width": 0, "goal_line_center_to_end_line": 0, "goal_line_full_diameter": false, "goal_line_thickness": 0, "goal_mouth_line_thickness": 0, "goal_mouth_radius": 0, "goal_post_thickness": 0, "restraining_line_outer_edge_to_center": 0, "restraining_line_thickness": 0, "wing_line_center_to_sideline": 0, "wing_line_length": 0, "wing_line_thickness": 0 }), "ncaam": /* @__PURE__ */ Object.freeze({ "boundary_thickness": 0.1111, "center_face_off_marker_color_contrasting": true, "center_face_off_marker_shape": "square", "center_face_off_marker_side_length": 0.1111, "center_line_thickness": 0.1111, "center_line_width": 60, "defensive_area_line_center_to_sideline": 10, "defensive_area_line_length": 35, "defensive_area_line_thickness": 0.1111, "field_apron_thickness": 5, "field_length": 110, "field_shape": "rectangle", "field_units": "yd", "field_width": 60, "goal_circle_full_360": true, "goal_circle_radius": 3, "goal_circle_thickness": 0.1111, "goal_depth": 1.3333, "goal_frame_opening_interior": 2, "goal_frame_width": 2, "goal_line_center_to_end_line": 15, "goal_line_full_diameter": false, "goal_line_thickness": 0.1667, "goal_mouth_line_thickness": 0.1111, "goal_mouth_radius": 2, "goal_post_thickness": 0.0417, "restraining_line_outer_edge_to_center": 20, "restraining_line_thickness": 0.1111, "wing_line_center_to_sideline": 10, "wing_line_length": 20, "wing_line_thickness": 0.1111 }), "ncaaw": /* @__PURE__ */ Object.freeze({ "below_goal_marking_radius": 0.1524, "below_goal_marking_to_goal_line": 4.572, "boundary_thickness": 0.101, "center_circle_radius": 9, "center_circle_thickness": 0.101, "center_line_thickness": 0.101, "center_line_width": 3, "field_apron_thickness": 4, "field_length": 110, "field_shape": "rectangle", "field_units": "m", "field_width": 60, "goal_circle_full_360": true, "goal_circle_radius": 2.6, "goal_circle_thickness": 0.101, "goal_depth": 1.3333, "goal_fan_hash_mark_length": 0.3048, "goal_fan_hash_mark_line_thickness": 0.101, "goal_fan_hash_mark_separation_from_center": [0, 4, 8, 12], "goal_fan_line_thickness": 0.101, "goal_fan_radius": 10.6, "goal_frame_opening_interior": 2, "goal_frame_width": 2, "goal_line_center_to_end_line": 8.899, "goal_line_full_diameter": false, "goal_line_thickness": 0.05, "goal_mouth_hash_mark_length": 0.305, "goal_mouth_hash_mark_line_thickness": 0.101, "goal_mouth_line_thickness": 0.101, "goal_mouth_radius": 14.6, "goal_mouth_semi_circle_separation": 2.6, "goal_post_thickness": 0.0417, "restraining_line_outer_edge_to_center": 24, "restraining_line_thickness": 0.101 }), "nll": /* @__PURE__ */ Object.freeze({ "bench_depth": 5, "bench_length": 24, "bench_separation": 9.25, "boards_thickness": 0.25, "center_circle_radius": 11, "center_circle_thickness": 0.1667, "center_face_off_marker_shape": "X", "center_face_off_marker_side_length": 2.5, "center_face_off_marker_side_width": 0.1667, "center_line_thickness": 1, "center_line_width": 85, "change_area_extension": 6, "change_area_outline_thickness": 0.1667, "change_area_width": 3, "corner_face_off_marker_radius": 1, "corner_face_off_marker_shape": "O", "corner_face_off_marker_to_attack_line_outer": 15, "corner_face_off_marker_to_boards": 15, "corner_radius": 28, "field_apron_thickness": 5, "field_length": 200, "field_shape": "oval", "field_units": "ft", "field_width": 85, "goal_circle_full_360": false, "goal_circle_radius": 9.25, "goal_circle_thickness": 0.1667, "goal_depth": 3.82, "goal_depth_to_circle": 1, "goal_frame_opening_interior": 4.75, "goal_frame_width": 2, "goal_line_center_to_end_line": 12, "goal_line_full_diameter": true, "goal_line_thickness": 0.1667, "goal_post_thickness": 0.0417, "has_boards": true, "has_endlines": false, "has_sidelines": false, "neutral_zone_length": 85, "penalty_box_depth": 5, "penalty_box_length": 8, "penalty_box_separation": 8, "referee_crease_radius": 10, "referee_crease_thickness": 0.1667, "restraining_line_outer_edge_to_center": 42.5, "restraining_line_thickness": 1 }), "pll": /* @__PURE__ */ Object.freeze({ "boundary_thickness": 0.1111, "center_face_off_marker_shape": "X", "center_face_off_marker_side_length": 2, "center_face_off_marker_side_width": 0.3333, "center_line_thickness": 0.1111, "center_line_width": 60, "field_apron_thickness": 6, "field_length": 100, "field_shape": "rectangle", "field_units": "yd", "field_width": 60, "goal_arc_extension": 15, "goal_arc_line_thickness": 0.1111, "goal_arc_parallel_line_to_center": 13, "goal_arc_radius": 15, "goal_circle_full_360": true, "goal_circle_radius": 3, "goal_circle_thickness": 0.1111, "goal_depth": 1.3333, "goal_frame_opening_interior": 2, "goal_frame_width": 2, "goal_line_center_to_end_line": 15, "goal_line_full_diameter": false, "goal_line_thickness": 0.1667, "goal_post_thickness": 0.0417, "wing_line_center_to_sideline": 11, "wing_line_length": 20, "wing_line_thickness": 0.1111 }), "usam": /* @__PURE__ */ Object.freeze({ "boundary_thickness": 0.1111, "center_face_off_marker_color_contrasting": false, "center_face_off_marker_shape": "X", "center_face_off_marker_side_length": 2.5, "center_face_off_marker_side_width": 0.1667, "center_line_thickness": 0.1111, "center_line_width": 60, "defensive_area_line_center_to_sideline": 10, "defensive_area_line_length": 35, "defensive_area_line_thickness": 0.1111, "field_apron_thickness": 5, "field_length": 110, "field_shape": "rectangle", "field_units": "yd", "field_width": 60, "goal_circle_full_360": true, "goal_circle_radius": 3, "goal_circle_thickness": 0.1111, "goal_depth": 1.3333, "goal_frame_opening_interior": 2, "goal_frame_width": 2, "goal_line_center_to_end_line": 15, "goal_line_full_diameter": false, "goal_line_thickness": 0.0556, "goal_post_thickness": 0.0417, "restraining_line_outer_edge_to_center": 20, "restraining_line_thickness": 0.1111, "wing_line_center_to_sideline": 10, "wing_line_length": 20, "wing_line_thickness": 0.1111 }), "usaw": /* @__PURE__ */ Object.freeze({ "below_goal_marking_radius": 0.1524, "below_goal_marking_to_goal_line": 4.572, "boundary_thickness": 0.101, "center_circle_radius": 9, "center_circle_thickness": 0.101, "center_line_thickness": 0.101, "center_line_width": 3, "field_apron_thickness": 4, "field_length": 110, "field_shape": "rectangle", "field_units": "m", "field_width": 60, "goal_circle_full_360": true, "goal_circle_radius": 2.6, "goal_circle_thickness": 0.101, "goal_depth": 1.3333, "goal_fan_hash_mark_length": 0.3048, "goal_fan_hash_mark_line_thickness": 0.101, "goal_fan_hash_mark_separation_from_center": [0, 4, 8, 12], "goal_fan_line_thickness": 0.101, "goal_fan_radius": 10.6, "goal_frame_opening_interior": 2, "goal_frame_width": 2, "goal_line_center_to_end_line": 8.899, "goal_line_full_diameter": false, "goal_line_thickness": 0.05, "goal_mouth_hash_mark_length": 0.305, "goal_mouth_hash_mark_line_thickness": 0.101, "goal_mouth_line_thickness": 0.101, "goal_mouth_radius": 14.6, "goal_mouth_semi_circle_separation": 2.6, "goal_post_thickness": 0.0417, "restraining_line_outer_edge_to_center": 24, "restraining_line_thickness": 0.101 }), "world lacrosse": /* @__PURE__ */ Object.freeze({ "bench_depth": 5, "bench_length": 24, "bench_separation": 9.25, "boards_thickness": 0.25, "center_circle_radius": 11, "center_circle_thickness": 0.1667, "center_face_off_marker_shape": "X", "center_face_off_marker_side_length": 2.5, "center_face_off_marker_side_width": 0.1667, "center_line_thickness": 0.1667, "center_line_width": 85, "change_area_extension": 6, "change_area_outline_thickness": 0.1667, "change_area_width": 3, "corner_face_off_marker_radius": 1, "corner_face_off_marker_shape": "O", "corner_face_off_marker_to_attack_line_outer": 15, "corner_face_off_marker_to_boards": 15, "corner_radius": 28, "field_apron_thickness": 5, "field_length": 200, "field_shape": "oval", "field_units": "ft", "field_width": 85, "goal_circle_full_360": false, "goal_circle_radius": 9.25, "goal_circle_thickness": 0.1667, "goal_depth": 4, "goal_depth_to_circle": 1, "goal_frame_opening_interior": 2, "goal_frame_width": 2, "goal_line_center_to_end_line": 12, "goal_line_full_diameter": true, "goal_line_thickness": 0.1667, "goal_post_thickness": 0.0417, "has_boards": true, "has_endlines": false, "has_sidelines": false, "neutral_zone_length": 85, "penalty_box_depth": 5, "penalty_box_length": 8, "penalty_box_separation": 8, "referee_crease_radius": 10, "referee_crease_thickness": 0.1667, "restraining_line_outer_edge_to_center": 42.5, "restraining_line_thickness": 0.1667 }) });
24
24
 
25
25
  // src/specs/soccer.ts
26
26
  var SOCCER_LEAGUES = ["custom", "epl", "fifa", "mls", "ncaa", "nwsl"];
27
27
  var SOCCER_SPECS = /* @__PURE__ */ Object.freeze({ "custom": /* @__PURE__ */ Object.freeze({ "center_circle_radius": 0, "center_mark_radius": 0, "corner_arc_radius": 0, "defensive_mark_depth": 0, "defensive_mark_distance": 0, "goal_box_length": 0, "goal_depth": 0, "goal_line_defensive_mark_visible": true, "goal_width": 0, "interior_of_goal_post_to_goal_box": 0, "interior_of_goal_post_to_penalty_box": 0, "line_thickness": 0, "penalty_box_length": 0, "penalty_circle_radius": 0, "penalty_mark_dist": 0, "penalty_mark_radius": 0, "pitch_apron_goal_line": 0, "pitch_apron_touchline": 0, "pitch_length": 0, "pitch_units": "", "pitch_width": 0, "touchline_defensive_mark_visible": true }), "epl": /* @__PURE__ */ Object.freeze({ "center_circle_radius": 9.15, "center_mark_radius": 0.3048, "corner_arc_radius": 1, "defensive_mark_depth": 0.5, "defensive_mark_distance": 9.15, "goal_box_length": 5.5, "goal_depth": 1.7, "goal_line_defensive_mark_visible": true, "goal_width": 7.32, "interior_of_goal_post_to_goal_box": 5.5, "interior_of_goal_post_to_penalty_box": 16.5, "line_thickness": 0.12, "penalty_box_length": 16.5, "penalty_circle_radius": 9.15, "penalty_mark_dist": 11, "penalty_mark_radius": 0.1524, "pitch_apron_goal_line": 1, "pitch_apron_touchline": 1, "pitch_length": 120, "pitch_units": "m", "pitch_width": 90, "touchline_defensive_mark_visible": true }), "fifa": /* @__PURE__ */ Object.freeze({ "center_circle_radius": 9.15, "center_mark_radius": 0.3048, "corner_arc_radius": 1, "defensive_mark_depth": 0.5, "defensive_mark_distance": 9.15, "goal_box_length": 5.5, "goal_depth": 1.7, "goal_line_defensive_mark_visible": true, "goal_width": 7.32, "interior_of_goal_post_to_goal_box": 5.5, "interior_of_goal_post_to_penalty_box": 16.5, "line_thickness": 0.12, "penalty_box_length": 16.5, "penalty_circle_radius": 9.15, "penalty_mark_dist": 11, "penalty_mark_radius": 0.1524, "pitch_apron_goal_line": 1, "pitch_apron_touchline": 1, "pitch_length": 120, "pitch_units": "m", "pitch_width": 90, "touchline_defensive_mark_visible": true }), "mls": /* @__PURE__ */ Object.freeze({ "center_circle_radius": 10, "center_mark_radius": 0.333, "corner_arc_radius": 1, "defensive_mark_depth": 0.5, "defensive_mark_distance": 10, "goal_box_length": 6, "goal_depth": 1.86, "goal_line_defensive_mark_visible": true, "goal_width": 8, "interior_of_goal_post_to_goal_box": 6, "interior_of_goal_post_to_penalty_box": 18, "line_thickness": 0.139, "penalty_box_length": 18, "penalty_circle_radius": 10, "penalty_mark_dist": 12, "penalty_mark_radius": 0.1667, "pitch_apron_goal_line": 1.0936, "pitch_apron_touchline": 1.0936, "pitch_length": 110, "pitch_units": "yd", "pitch_width": 70, "touchline_defensive_mark_visible": true }), "ncaa": /* @__PURE__ */ Object.freeze({ "center_circle_radius": 10, "center_mark_radius": 0.333, "corner_arc_radius": 1, "defensive_mark_depth": 1, "defensive_mark_distance": 11, "defensive_mark_separation_from_line": 0.1667, "goal_box_length": 6, "goal_depth": 1.86, "goal_line_defensive_mark_visible": true, "goal_width": 8, "interior_of_goal_post_to_goal_box": 6, "interior_of_goal_post_to_penalty_box": 18, "line_thickness": 0.139, "penalty_box_length": 18, "penalty_circle_radius": 10, "penalty_mark_dist": 12, "penalty_mark_radius": 0.125, "pitch_apron_goal_line": 1.0936, "pitch_apron_touchline": 1.0936, "pitch_length": 120, "pitch_units": "yd", "pitch_width": 75, "touchline_defensive_mark_visible": false }), "nwsl": /* @__PURE__ */ Object.freeze({ "center_circle_radius": 10, "center_mark_radius": 0.333, "corner_arc_radius": 1, "defensive_mark_depth": 0.5, "defensive_mark_distance": 10, "goal_box_length": 6, "goal_depth": 1.86, "goal_line_defensive_mark_visible": true, "goal_width": 8, "interior_of_goal_post_to_goal_box": 6, "interior_of_goal_post_to_penalty_box": 18, "line_thickness": 0.139, "penalty_box_length": 18, "penalty_circle_radius": 10, "penalty_mark_dist": 12, "penalty_mark_radius": 0.1667, "pitch_apron_goal_line": 1.0936, "pitch_apron_touchline": 1.0936, "pitch_length": 110, "pitch_units": "yd", "pitch_width": 70, "touchline_defensive_mark_visible": true }) });
28
28
 
29
+ // src/specs/softball.ts
30
+ var SOFTBALL_LEAGUES = ["custom", "ncaa"];
31
+ var SOFTBALL_SPECS = /* @__PURE__ */ Object.freeze({ "custom": /* @__PURE__ */ Object.freeze({ "backstop_radius": 0, "base_side_length": 0, "baseline_distance": 0, "batters_box_length": 0, "batters_box_width": 0, "batters_box_y_adj": 0, "catchers_box_depth": 0, "catchers_box_width": 0, "center_field_distance": 0, "coaches_box_depth": 0, "coaches_box_length": 0, "coaches_box_width": 0, "field_units": "", "foul_line_to_foul_grass": 0, "home_plate_circle_radius": 0, "home_plate_edge_length": 0, "home_plate_side_to_batters_box": 0, "infield_arc_radius": 0, "left_field_distance": 0, "line_width": 0, "pitchers_circle_radius": 0, "pitchers_lane_length": 0, "pitchers_plate_front_to_home_plate": 0, "pitchers_plate_length": 0, "pitchers_plate_width": 0, "right_field_distance": 0, "running_lane_depth": 0, "running_lane_length": 0, "running_lane_start_distance": 0 }), "ncaa": /* @__PURE__ */ Object.freeze({ "backstop_radius": 25, "base_side_length": 1.25, "baseline_distance": 60, "batters_box_length": 7, "batters_box_width": 3, "batters_box_y_adj": 1.2083, "catchers_box_depth": 7, "catchers_box_width": 8.4167, "center_field_distance": 220, "coaches_box_depth": 8, "coaches_box_length": 15, "coaches_box_width": 3, "field_units": "ft", "foul_line_to_foul_grass": 3, "home_plate_circle_radius": 13, "home_plate_edge_length": 1.4167, "home_plate_side_to_batters_box": 0.5, "infield_arc_radius": 60, "left_field_distance": 190, "line_width": 0.25, "pitchers_circle_radius": 8, "pitchers_lane_length": 8, "pitchers_plate_front_to_home_plate": 43, "pitchers_plate_length": 2, "pitchers_plate_width": 0.5, "right_field_distance": 190, "running_lane_depth": 3, "running_lane_length": 30, "running_lane_start_distance": 30 }) });
32
+
29
33
  // src/specs/tennis.ts
30
34
  var TENNIS_LEAGUES = ["atp", "custom", "ita", "itf", "ncaa", "usta", "wta"];
31
35
  var TENNIS_SPECS = /* @__PURE__ */ Object.freeze({ "atp": /* @__PURE__ */ Object.freeze({ "backstop_distance": 21, "center_mark_length": 0.3333, "court_length": 78, "court_units": "ft", "doubles_width": 36, "line_thickness": 0.1667, "net_length": 42, "serviceline_distance": 21, "sidestop_distance": 12, "singles_width": 27 }), "custom": /* @__PURE__ */ Object.freeze({ "backstop_distance": 0, "center_mark_length": 0, "court_length": 0, "court_units": "", "doubles_width": 0, "line_thickness": 0, "net_length": 0, "serviceline_distance": 0, "sidestop_distance": 0, "singles_width": 0 }), "ita": /* @__PURE__ */ Object.freeze({ "backstop_distance": 21, "center_mark_length": 0.3333, "court_length": 78, "court_units": "ft", "doubles_width": 36, "line_thickness": 0.1667, "net_length": 42, "serviceline_distance": 21, "sidestop_distance": 12, "singles_width": 27 }), "itf": /* @__PURE__ */ Object.freeze({ "backstop_distance": 21, "center_mark_length": 0.3333, "court_length": 78, "court_units": "ft", "doubles_width": 36, "line_thickness": 0.1667, "net_length": 42, "serviceline_distance": 21, "sidestop_distance": 12, "singles_width": 27 }), "ncaa": /* @__PURE__ */ Object.freeze({ "backstop_distance": 21, "center_mark_length": 0.3333, "court_length": 78, "court_units": "ft", "doubles_width": 36, "line_thickness": 0.1667, "net_length": 42, "serviceline_distance": 21, "sidestop_distance": 12, "singles_width": 27 }), "usta": /* @__PURE__ */ Object.freeze({ "backstop_distance": 21, "center_mark_length": 0.3333, "court_length": 78, "court_units": "ft", "doubles_width": 36, "line_thickness": 0.1667, "net_length": 42, "serviceline_distance": 21, "sidestop_distance": 12, "singles_width": 27 }), "wta": /* @__PURE__ */ Object.freeze({ "backstop_distance": 21, "center_mark_length": 0.3333, "court_length": 78, "court_units": "ft", "doubles_width": 36, "line_thickness": 0.1667, "net_length": 42, "serviceline_distance": 21, "sidestop_distance": 12, "singles_width": 27 }) });
@@ -34,6 +38,6 @@ var TENNIS_SPECS = /* @__PURE__ */ Object.freeze({ "atp": /* @__PURE__ */ Object
34
38
  var VOLLEYBALL_LEAGUES = ["custom", "fivb", "ncaa", "usa volleyball"];
35
39
  var VOLLEYBALL_SPECS = /* @__PURE__ */ Object.freeze({ "custom": /* @__PURE__ */ Object.freeze({ "attack_line_edge_to_center_line": 0, "court_apron_end_line": 0, "court_apron_sideline": 0.5, "court_length": 0, "court_units": "m", "court_width": 0, "free_zone_end_line": 0, "free_zone_sideline": 0, "line_thickness": 0, "service_zone_mark_length": 0, "service_zone_mark_to_end_line": 0, "substitution_zone_dash_breaks": 0, "substitution_zone_dash_length": 0, "substitution_zone_rep_pattern": 0 }), "fivb": /* @__PURE__ */ Object.freeze({ "attack_line_edge_to_center_line": 3, "court_apron_end_line": 2, "court_apron_sideline": 1.5, "court_length": 18, "court_units": "m", "court_width": 9, "free_zone_end_line": 6.5, "free_zone_sideline": 5, "line_thickness": 0.05, "service_zone_mark_length": 0.15, "service_zone_mark_to_end_line": 0.2, "substitution_zone_dash_breaks": 0.2, "substitution_zone_dash_length": 0.15, "substitution_zone_rep_pattern": 5 }), "ncaa": /* @__PURE__ */ Object.freeze({ "attack_line_edge_to_center_line": 3, "court_apron_end_line": 2, "court_apron_sideline": 1.5, "court_length": 18, "court_units": "m", "court_width": 9, "free_zone_end_line": 4.5, "free_zone_sideline": 3, "line_thickness": 0.05, "service_zone_mark_length": 0.15, "service_zone_mark_to_end_line": 0.2, "substitution_zone_dash_breaks": 0.2, "substitution_zone_dash_length": 0.15, "substitution_zone_rep_pattern": 5 }), "usa volleyball": /* @__PURE__ */ Object.freeze({ "attack_line_edge_to_center_line": 3, "court_apron_end_line": 2, "court_apron_sideline": 1.5, "court_length": 18, "court_units": "m", "court_width": 9, "free_zone_end_line": 4.5, "free_zone_sideline": 3, "line_thickness": 0.05, "service_zone_mark_length": 0.15, "service_zone_mark_to_end_line": 0.2, "substitution_zone_dash_breaks": 0.2, "substitution_zone_dash_length": 0.15, "substitution_zone_rep_pattern": 5 }) });
36
40
 
37
- export { BASEBALL_LEAGUES, BASEBALL_SPECS, BASKETBALL_LEAGUES, BASKETBALL_SPECS, CURLING_LEAGUES, CURLING_SPECS, FOOTBALL_LEAGUES, FOOTBALL_SPECS, HOCKEY_LEAGUES, HOCKEY_SPECS, LACROSSE_LEAGUES, LACROSSE_SPECS, SOCCER_LEAGUES, SOCCER_SPECS, TENNIS_LEAGUES, TENNIS_SPECS, VOLLEYBALL_LEAGUES, VOLLEYBALL_SPECS };
38
- //# sourceMappingURL=chunk-VID5HIDQ.js.map
39
- //# sourceMappingURL=chunk-VID5HIDQ.js.map
41
+ export { BASEBALL_LEAGUES, BASEBALL_SPECS, BASKETBALL_LEAGUES, BASKETBALL_SPECS, CURLING_LEAGUES, CURLING_SPECS, FOOTBALL_LEAGUES, FOOTBALL_SPECS, HOCKEY_LEAGUES, HOCKEY_SPECS, LACROSSE_LEAGUES, LACROSSE_SPECS, SOCCER_LEAGUES, SOCCER_SPECS, SOFTBALL_LEAGUES, SOFTBALL_SPECS, TENNIS_LEAGUES, TENNIS_SPECS, VOLLEYBALL_LEAGUES, VOLLEYBALL_SPECS };
42
+ //# sourceMappingURL=chunk-3WYO7OMK.js.map
43
+ //# sourceMappingURL=chunk-3WYO7OMK.js.map