@johnmorrisdotca/kyogijo-stadiums 0.15.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +23 -15
- package/dist/leagues/courts.d.ts +2 -1
- package/dist/leagues/courts.js +5 -3
- package/dist/leagues/sources.js +1 -0
- package/dist/multi.data.js +4 -11
- package/dist/multi.draw.js +55 -8
- package/dist/multi.style.js +4 -0
- package/dist/multi.types.d.ts +12 -0
- package/dist/multi.words.d.ts +7 -0
- package/dist/multi.words.js +4 -0
- package/dist/types.d.ts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,27 @@ All notable changes to this project are written here. The format follows
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.16.1] - 2026-10-20
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Sample content for a tournament layout** (`drawMulti({ sample: true })`, or `sample: { event, year, city }`). The places for the event's words and marks are filled as an event would dress them: an invented event name, year and city on the floor and the boards ("Kyogijo Open 2026 · Osaka", in Japanese `競技場杯 2026 · 大阪`) and, in each logo place, a simple emblem of the package's own (a ring with a star, a diamond or waves), in place of the dashed empty places. Nothing real is named or drawn: no event, brand, federation, sponsor or league (a test holds every preset in both languages to that). Off by default, so a layout is still drawn as it is configured; with `slots: false` nothing is drawn. The 3D view carries it on its floor. New `MultiSample` and `MultiWords.sample`.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- **The demo's tournament layouts page and every picture of a layout are dressed with sample content.** `halls.html` has a "Sample event content" box, on by default (`sample=0` in its address turns it off and brings the empty places back); the README's and the docs' pictures of layouts (three judo areas, four table tennis areas, the same four in 3D, the gallery) show the invented event, and one picture shows the empty places with a caption (what an organiser configures): `docs/images/multi-judo-empty-*`, `ONLY=multi-judo-empty` takes it. The README gives up some prose to stay under its size budget.
|
|
19
|
+
- **Docs only:** the gallery's table tennis text gives the surrounds' range (50 to 100 cm) of the ITTF Statutes 2026.
|
|
20
|
+
|
|
21
|
+
## [0.16.0] - 2026-10-20
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- **A badminton court has the space round it drawn.** The BWF's Specifications for International Standard Facilities (Statutes 5.3.4, 2.1.3 and 2.2.3) ask for at least 2 m clear behind the baselines and 1.5 m clear from the side lines, so the court's free zone is that (17.4 m by 9.1 m round the 13.4 m by 6.1 m court), where it was none: the Laws of Badminton give no figure, which is why none was drawn. It is one figure for every tournament, so `net.free: "official"` and `"least"` agree, and `"none"` draws the court alone, as before. The 4 m between courts the BWF recommends at Grade 1 and 2 is the layouts' (`badminton-1x4`); the 1.5 m least between courts is `badminton-1x4-min`. The layouts draw the court alone in their bays (`net: { free: "none" }`), as before, since the bays are that space.
|
|
26
|
+
|
|
27
|
+
### Checked
|
|
28
|
+
|
|
29
|
+
- **The run-off of the other net sports is what their rulebooks give, and the tournament layouts are built from it.** Tennis (ITF Appendix X: 21 ft behind the baselines and 12 ft beside the side lines, so two courts side by side are 2 x 12 ft = 7.32 m apart, as `tennis-1x3` has them), pickleball (USA Pickleball 3.A.3: a playing surface of 34 by 64 ft recommended, 30 by 60 ft at least, edge to edge) and volleyball (FIVB Rule 1.1: 3 m all round at least, 5 m beside the side lines and 6.5 m behind the end lines in the FIVB's competitions; beach 3 m and 5 m; World ParaVolley's sitting court 3 m, and 4 m and 6 m) were compared figure by figure with their free zones and the `tennis-1x3` and `pickleball-*` bays; nothing needed changing. Volleyball has no layout preset: no source gives an event's arrangement.
|
|
30
|
+
|
|
10
31
|
## [0.15.0] - 2026-10-20
|
|
11
32
|
|
|
12
33
|
### Added
|
package/README.md
CHANGED
|
@@ -75,16 +75,16 @@ console.log(svg.startsWith("<svg"), svg.includes("USA 3, Canada 2"));
|
|
|
75
75
|
- **Thirty-nine surfaces, to scale.** The NFL, CFL and IFAF fields, the NHL rink, the NBA court, the soccer pitch and futsal court, the baseball field, the curling sheet, the courts of twelve net and racket sports, the pools, the athletics stadium, the skating rinks, the fields of seven field sports, and the budō. Every figure is cited in [sources](./docs/sources.md). [The surfaces](./docs/surfaces.md).
|
|
76
76
|
- **Each league's rulebook.** `league: "fiba"` draws a court as FIBA marks it: 48 variants, from the WNBA, the NCAA and the IIHF to Little League, PONY, softball, Curling Canada, FIVB's beach volleyball, rugby league and the NLL's box lacrosse, each cited. [League variants](./docs/variants.md).
|
|
77
77
|
- **A realistic basketball floor.** `court: { hardwood: true }` draws maple boards that run the length of the court with staggered ends, grain, stained keys, the baskets and stanchions with soft shadows, a coaching box and benches, and a satin sheen, in every league and renderer. The clean floor stays the default. [Hardwood](./docs/hardwood.md).
|
|
78
|
-
- **The stands and the crowd.** `crowd: true` draws the seating round any surface that has spectators: a bowl, two sides, a horseshoe, courtside rows or a ballpark's grandstands, with the people as seeded heads and shoulders in the home colours
|
|
78
|
+
- **The stands and the crowd.** `crowd: true` draws the seating round any surface that has spectators: a bowl, two sides, a horseshoe, courtside rows or a ballpark's grandstands, with the people as seeded heads and shoulders in the home colours and the empty seats showing (`density`, or `attendance` over `capacity`). [The crowd](./docs/crowd.md).
|
|
79
79
|
- **Curling, from the rule books.** A sheet from World Curling's and Curling Canada's rules, tall by default, with the board and the hammer in a score, `curlingStones` for the stones of an end, scored by the rules, `show: "folded"` for the whole sheet with both houses enlarged beside it, and a heat map and statistics for many ends. [Curling](./docs/curling.md).
|
|
80
80
|
- **Net, racket and court sports, from their rulebooks.** The ITF's, FIVB's (indoor, beach, sitting), BWF's, USA Pickleball's and ITTF's courts and table, the padel, squash, racquetball, sepak takraw, teqball, roundnet and netball courts, each in its look (hard court, clay, grass, wood, sand), with a board of sets and games. [Net, racket and court sports](./docs/courts.md).
|
|
81
|
-
- **Swimming, water polo, diving and artistic swimming, from World Aquatics' regulations.** The competition pool of 50 or 25 m with its lanes, ropes, blocks
|
|
81
|
+
- **Swimming, water polo, diving and artistic swimming, from World Aquatics' regulations.** The competition pool of 50 or 25 m with its lanes, ropes, blocks and touch panels; the water polo field; the diving well; the artistic swimming area; several pools in a natatorium. A race's lanes carry names, flags, places, times and splits, with a replay (`raceTimeline`) and a `splitsChart`. [Pools](./docs/pools.md).
|
|
82
82
|
- **Lacrosse, rugby, Australian football, Gaelic games, cricket, field hockey and handball, from their rulebooks.** The fields and floors of World Lacrosse, World Rugby, the NRL, the AFL, the GAA, the FIH and the IHF, and a cricket ground with a boundary of your own. A score is goals and behinds, goals and points or a board of runs, wickets and overs. [Field sports](./docs/field-sports.md).
|
|
83
83
|
- **The athletics stadium, from World Athletics' rules.** The 400 m track with its lanes and staggers worked out from the running lines, curved and relay starts, hurdles, the steeplechase, every field event, a close-up of each start, the covered 200 m track, and lane draws, results, a race replay and the marks of throws and jumps. [The athletics stadium](./docs/athletics.md).
|
|
84
|
-
- **The skating rinks, from the ISU's rules.** The 400 m speed skating track with its lanes, blocks and the
|
|
85
|
-
- **The budō, from the federations' rules.** The IJF's and the All Japan Judo Federation's judo areas, the WKF's karate areas, the kendo shiai-jo, the sumo dohyō, the kyūdōjō, and **a dojo builder**: a floor of tatami laid as real units
|
|
84
|
+
- **The skating rinks, from the ISU's rules.** The 400 m speed skating track with its lanes, blocks and the lines of every race worked out lane by lane; the short track's oval; the figure skating rink of 60 by 30 m with its judges' seats; and pairs, results, a race replay and the elements of a programme on the ice. [The skating rinks](./docs/skating.md).
|
|
85
|
+
- **The budō, from the federations' rules.** The IJF's and the All Japan Judo Federation's judo areas, the WKF's karate areas, the kendo shiai-jo, the sumo dohyō, the kyūdōjō, and **a dojo builder**: a floor of tatami laid as real units, in jō or metres, with its walls, doors, windows and shrine. Five famous halls are on the atlas, and the scores are judo's ippon, waza-ari and shido, karate's and kendo's points and sumo's kimarite. [The budō](./docs/budo.md).
|
|
86
86
|
- **Soccer, to the Laws.** A pitch from Law 1 of the IFAB Laws of the Game of any size, with presets (international, UEFA, MLS, NCAA, the FA's 9-, 7- and 5-a-side, FIFA's futsal), half pitches, five mowing patterns, four goal styles, penalties and extra time in a score. [Soccer](./docs/soccer.md).
|
|
87
|
-
- **Every ballpark.** The 30 current MLB parks and 44 that MLB clubs have left
|
|
87
|
+
- **Every ballpark.** The 30 current MLB parks and 44 that MLB clubs have left, and the 12 home parks of Nippon Professional Baseball with eight other NPB grounds, each with its fence drawn from the distances published for it, as it stood in a season. [Ballparks](./docs/ballparks.md).
|
|
88
88
|
- **Soccer grounds, arenas and an atlas.** 64 soccer grounds, each pitch at its published size, and 167 NHL, NBA, WNBA and PWHL arenas (`drawKyogijo({ sport: "nhl", arena: "boston-garden" })`), and every park, ground, arena and budō hall (330 places) on a map, by sport, league, country and year, each found by any of its names. [The grounds](./docs/grounds.md), [the arenas](./docs/arenas.md), [the atlas](./docs/atlas.md), [names](./docs/ballparks.md#names).
|
|
89
89
|
- **Walls and quirks.** How high the fence stands, stretch by stretch and season by season (the Green Monster at 37 feet 2 inches), drawn as a band outside the fence whose width and shade say the height, with a key (`walls`); and Tal's Hill, Wrigley Field's ivy and basket, poles, bullpens and dugouts (`quirks`), each from the park's article, none guessed: [ballparks](./docs/ballparks.md).
|
|
90
90
|
- **Special games.** A surface set inside another, to scale: an NHL rink on a ballpark's infield or a football stadium's field, a college basketball court on the deck of a carrier, a baseball field laid over a London stadium's pitch. 18 games, each with its day, its venue and its sources. [Special games](./docs/special-games.md).
|
|
@@ -94,16 +94,16 @@ console.log(svg.startsWith("<svg"), svg.includes("USA 3, Canada 2"));
|
|
|
94
94
|
- **Lineups.** A `lineup` layer places a team's players by position code (`GK`, `CB`, `HK`, `C`) with no coordinates: it reads where each stands from a formation (36 of them, in 13 sports), draws a disc or a jersey with the shirt number and the name under it, a captain's C and a flag, and puts the visitors at the other end. [Lineups](./docs/team-shape.md#lineups).
|
|
95
95
|
- **A pageant.** Each team's flag or crest laid large over its half of the surface: `pageant: "carpet"` (a flag at its own ratio with a border) or `"stage"` (a crest on a round disc with a gold ring), an emblem or a trophy in the centre circle, the score in the middle or in the strip, with an entrance in CSS for readers who have not asked for less motion. [The pageant](./docs/pageant.md).
|
|
96
96
|
- **Trophies, medals, balls and crests, by id.** `useEmblems(renderEmblem)` plugs in the sister package [Dougu Sports](https://johnmorrisdotca.github.io/dougu-sports/) in one line, and an id goes wherever a logo, a flag or a mark is taken: `logo: "crest:shield"`, `pageant: { emblem: "trophy:hockey-cup" }`, `"ball:puck"`. Kyogijo bundles no emblem and keeps zero dependencies. [Emblems](./docs/emblems.md).
|
|
97
|
-
- **Country flags, by code.** `useFlags(render)` plugs in the sister package [Hata](https://github.com/johnmorrisdotca/hata) through a small adapter, and a team's `flag: "CA"` is its flag: round in a round mark, at its own proportions on a banner, a badge or a carpet.
|
|
97
|
+
- **Country flags, by code.** `useFlags(render)` plugs in the sister package [Hata](https://github.com/johnmorrisdotca/hata) through a small adapter, and a team's `flag: "CA"` is its flag: round in a round mark, at its own proportions on a banner, a badge or a carpet. Kyogijo bundles no flag and keeps zero dependencies. [Flags](./docs/flags.md).
|
|
98
98
|
- **Zoom to a part of a surface.** `range: "offensive-zone"` crops a drawing to a rink's zone, a half court, the paint, the red zone, a soccer half, third or penalty area, the infield, a curling house, or a box of your own in any frame, with its data, heat, labels and score following. [Display ranges](./docs/ranges.md).
|
|
99
99
|
- **Wide, tall or fit the box.** Every surface lies wide or tall: tall turns it a quarter, keeps every word upright and puts the teams top and bottom. With `orientation: "auto"` the browser helpers follow the box.
|
|
100
|
-
- **Where a point lies, by the rules, and a click as a place.** `zoneAt("nhl", [69, 22], { frame: "nhl-api" })` names the zone and the area in it from the surface's own figures, with `isThreePointer`, `inSlot`, `isFair`, `isHomeRun` and the like; `clientPointToField(svg, x, y, { provider })` is a pointer's place in any of the frames, with the zone.
|
|
101
|
-
- **Goals, the strike zone and the stumps, end-on.** A goal mouth for
|
|
100
|
+
- **Where a point lies, by the rules, and a click as a place.** `zoneAt("nhl", [69, 22], { frame: "nhl-api" })` names the zone and the area in it from the surface's own figures, with `isThreePointer`, `inSlot`, `isFair`, `isHomeRun` and the like; `clientPointToField(svg, x, y, { provider })` is a pointer's place in any of the frames, with the zone. [Zones](./docs/zones.md), [pointing](./docs/pointer.md).
|
|
101
|
+
- **Goals, the strike zone and the stumps, end-on.** A goal mouth for six sports with the shots laid on it and its zones, the catcher's view of the strike zone with its pitches numbered, and the wicket from the bowler's end with its line and length zones. [Targets](./docs/targets.md).
|
|
102
102
|
- **Data on the surface.** Points, lines, arrows, text, heat maps, hexagons, zone charts and density contours over any surface, in its feet or a data provider's frame, cut to its outline, with a table for each layer; ready-made shot and pass charts. [Data layers](./docs/layers.md), [charts](./docs/charts.md).
|
|
103
103
|
- **Small multiples and backgrounds.** `drawGrid` puts many drawings in one SVG, under a title and a subtitle, over a credit line, with a key they share, in a size for a social card, a square post or a phone; `background` lays a quiet pattern (felt, grass, wood, ice, paper, a grid, dots) or a photograph behind a drawing or a grid. [Layouts and backgrounds](./docs/layouts.md).
|
|
104
104
|
- **Tournament layouts.** Several surfaces laid out together for one large event, to scale, on one floor, as one SVG: thirteen presets from table tennis, pickleball, curling, judo, karate, badminton and tennis, each with its rule and sources, whether it fits a hall, and a real stadium round it. [Tournament layouts](./docs/multi.md).
|
|
105
105
|
- **Replay.** Tracking data played on any surface: the players with their numbers, the ball and its trail, and the passes, shots and goals as they happen, with controls, the keyboard and a live region, steps for a reader who prefers reduced motion, and a pause when the page is hidden. [Replay](./docs/replay.md).
|
|
106
|
-
- **A 3D view.** Any surface as a floor that turns by mouse, touch, wheel or keys, with four viewpoints (overhead, broadcast, end-on, low corner), and what the rulebook stands on it at its height (nets, baskets, rink boards and glass, goals, a ballpark's fence, the walls of padel and squash, a pool's blocks, a table tennis area's surrounds); and the venue round it (raked stands, roofs on request, a dojo's walls and gallery). Plain DOM and CSS
|
|
106
|
+
- **A 3D view.** Any surface as a floor that turns by mouse, touch, wheel or keys, with four viewpoints (overhead, broadcast, end-on, low corner), and what the rulebook stands on it at its height (nets, baskets, rink boards and glass, goals, a ballpark's fence, the walls of padel and squash, a pool's blocks, a table tennis area's surrounds); and the venue round it (raked stands, roofs on request, a dojo's walls and gallery). Plain DOM and CSS. [The 3D view](./docs/turn.md).
|
|
107
107
|
- **Renderers.** The same drawing as plain data (a scene), on a canvas (a browser's or a Node canvas), in a d3 selection, as a mark of an Observable Plot, as GeoJSON and as a PNG in Node, each an entry of its own that imports nothing from outside the package. [Renderers](./docs/renderers.md).
|
|
108
108
|
- **Units and frames.** Each surface in its rulebook's unit and any other, and 48 coordinate frames (ten soccer providers, the NHL API, HockeyTech, NBA stats, NFL tracking, MLBAM, Retrosheet, and a place from the net, the centre or the middle of the water of each other surface) to move a provider's points onto a surface. [Units](./docs/units.md), [coordinate frames](./docs/frames.md).
|
|
109
109
|
- **A compact badge and a compact card.** One strip for a list, or the surface with that strip under it.
|
|
@@ -494,12 +494,12 @@ console.log(svg.includes('viewBox="0 0 1200 675"'), svg.includes("Three ballpark
|
|
|
494
494
|
|
|
495
495
|
### Several surfaces on one floor
|
|
496
496
|
|
|
497
|
-
`drawMulti` lays the package's own surfaces out together for one large event, to scale, on one floor, with the officials' chairs
|
|
497
|
+
`drawMulti` lays the package's own surfaces out together for one large event, to scale, on one floor, with the officials' chairs and boards, and places for the event's words and marks (`sample: true` fills them with an invented event; [tournament layouts](./docs/multi.md)). Thirteen presets with their rules and sources; `multiFit` says whether a layout fits a hall, `stadium: true` sets it inside real stands, and `mountMultiTurn` turns the floor in 3D.
|
|
498
498
|
|
|
499
499
|
```ts
|
|
500
500
|
import { drawMulti, multiLayout } from "@johnmorrisdotca/kyogijo-stadiums/multi";
|
|
501
501
|
|
|
502
|
-
const svg = drawMulti({ preset: "judo-1x3" });
|
|
502
|
+
const svg = drawMulti({ preset: "judo-1x3", sample: true });
|
|
503
503
|
const layout = multiLayout({ preset: "judo-1x3" });
|
|
504
504
|
console.log(svg.startsWith("<svg"), layout.cells.length);
|
|
505
505
|
// true 3
|
|
@@ -510,15 +510,15 @@ console.log(layout.needs.length, layout.needs.width);
|
|
|
510
510
|
<p align="center">
|
|
511
511
|
<picture>
|
|
512
512
|
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/kyogijo-stadiums/main/docs/images/multi-judo-desk-dark.webp">
|
|
513
|
-
<img src="https://raw.githubusercontent.com/johnmorrisdotca/kyogijo-stadiums/main/docs/images/multi-judo-desk-light.webp" alt="Three judo contest areas in a row on one red floor of mats,
|
|
513
|
+
<img src="https://raw.githubusercontent.com/johnmorrisdotca/kyogijo-stadiums/main/docs/images/multi-judo-desk-light.webp" alt="Three judo contest areas in a row on one red floor of mats, dressed with a sample event's name, simple emblems and boards." width="640">
|
|
514
514
|
</picture>
|
|
515
|
-
<br><em>Three judo contest areas on one floor of mats: 47 by 19 metres.</em>
|
|
515
|
+
<br><em>Three judo contest areas on one floor of mats: 47 by 19 metres, with sample content.</em>
|
|
516
516
|
</p>
|
|
517
517
|
|
|
518
518
|
<p align="center">
|
|
519
519
|
<picture>
|
|
520
520
|
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/kyogijo-stadiums/main/docs/images/multi-tabletennis-desk-dark.webp">
|
|
521
|
-
<img src="https://raw.githubusercontent.com/johnmorrisdotca/kyogijo-stadiums/main/docs/images/multi-tabletennis-desk-light.webp" alt="Four table tennis areas in two rows of two on one blue floor,
|
|
521
|
+
<img src="https://raw.githubusercontent.com/johnmorrisdotca/kyogijo-stadiums/main/docs/images/multi-tabletennis-desk-light.webp" alt="Four table tennis areas in two rows of two on one blue floor, with sample words and emblems, a hung scoreboard and boards." width="640">
|
|
522
522
|
</picture>
|
|
523
523
|
<br><em>Four table tennis areas under one scoreboard.</em>
|
|
524
524
|
</p>
|
|
@@ -526,11 +526,19 @@ console.log(layout.needs.length, layout.needs.width);
|
|
|
526
526
|
<p align="center">
|
|
527
527
|
<picture>
|
|
528
528
|
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/kyogijo-stadiums/main/docs/images/multi-tabletennis-3d-desk-dark.webp">
|
|
529
|
-
<img src="https://raw.githubusercontent.com/johnmorrisdotca/kyogijo-stadiums/main/docs/images/multi-tabletennis-3d-desk-light.webp" alt="Four table tennis areas in 3D
|
|
529
|
+
<img src="https://raw.githubusercontent.com/johnmorrisdotca/kyogijo-stadiums/main/docs/images/multi-tabletennis-3d-desk-light.webp" alt="Four table tennis areas in 3D: tables on legs, a surround round each, a hung scoreboard." width="640">
|
|
530
530
|
</picture>
|
|
531
531
|
<br><em>The same four in 3D.</em>
|
|
532
532
|
</p>
|
|
533
533
|
|
|
534
|
+
<p align="center">
|
|
535
|
+
<picture>
|
|
536
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/kyogijo-stadiums/main/docs/images/multi-judo-empty-desk-dark.webp">
|
|
537
|
+
<img src="https://raw.githubusercontent.com/johnmorrisdotca/kyogijo-stadiums/main/docs/images/multi-judo-empty-desk-light.webp" alt="The three judo areas with the places for the event's words and marks left empty and dashed." width="640">
|
|
538
|
+
</picture>
|
|
539
|
+
<br><em>Without `sample`: the empty places an organiser fills.</em>
|
|
540
|
+
</p>
|
|
541
|
+
|
|
534
542
|
The [demo](https://johnmorrisdotca.github.io/kyogijo-stadiums/halls.html) picks a preset, sets it in a hall, switches the stadium on and off, and turns it in 3D.
|
|
535
543
|
|
|
536
544
|
### A table tennis area
|
package/dist/leagues/courts.d.ts
CHANGED
|
@@ -406,7 +406,8 @@ export declare const FIVB_BEACH: VolleyballFigures;
|
|
|
406
406
|
* The BWF's court, from Law 1 of the Laws of Badminton (as amended 26 April 2025) and its Diagram A, in metres: 13.40 by 6.10 m, lines 40 mm wide; the singles
|
|
407
407
|
* side lines 460 mm inside the doubles side lines (so 5.18 m apart, outside to outside); the short service lines 1.98 m from the net; the doubles long service
|
|
408
408
|
* lines 760 mm inside the back boundary lines; the net 1.524 m high at the centre and 1.55 m over the doubles side lines, 760 mm deep and at least 6.1 m
|
|
409
|
-
* wide; the posts 1.55 m high, on the doubles side lines.
|
|
409
|
+
* wide; the posts 1.55 m high, on the doubles side lines. The space round the court is from the BWF's Specifications for International Standard Facilities (5.3.4, 2.1.3 and 2.2.3 of the
|
|
410
|
+
* Statutes): at least 2 m clear behind the baselines and 1.5 m from the side lines.
|
|
410
411
|
*/
|
|
411
412
|
export declare const BWF_BADMINTON: BadmintonFigures;
|
|
412
413
|
/**
|
package/dist/leagues/courts.js
CHANGED
|
@@ -59,7 +59,8 @@ export const FIVB_BEACH = {
|
|
|
59
59
|
* The BWF's court, from Law 1 of the Laws of Badminton (as amended 26 April 2025) and its Diagram A, in metres: 13.40 by 6.10 m, lines 40 mm wide; the singles
|
|
60
60
|
* side lines 460 mm inside the doubles side lines (so 5.18 m apart, outside to outside); the short service lines 1.98 m from the net; the doubles long service
|
|
61
61
|
* lines 760 mm inside the back boundary lines; the net 1.524 m high at the centre and 1.55 m over the doubles side lines, 760 mm deep and at least 6.1 m
|
|
62
|
-
* wide; the posts 1.55 m high, on the doubles side lines.
|
|
62
|
+
* wide; the posts 1.55 m high, on the doubles side lines. The space round the court is from the BWF's Specifications for International Standard Facilities (5.3.4, 2.1.3 and 2.2.3 of the
|
|
63
|
+
* Statutes): at least 2 m clear behind the baselines and 1.5 m from the side lines.
|
|
63
64
|
*/
|
|
64
65
|
export const BWF_BADMINTON = {
|
|
65
66
|
length: 13.4,
|
|
@@ -69,7 +70,8 @@ export const BWF_BADMINTON = {
|
|
|
69
70
|
doublesLongServiceInset: 0.76,
|
|
70
71
|
shortServiceLine: 1.98,
|
|
71
72
|
net: { postHeight: 1.55, heightCentre: 1.524, heightSides: 1.55, depth: 0.76, widthMin: 6.1 },
|
|
72
|
-
|
|
73
|
+
// The BWF's Specifications for International Standard Facilities, 5.3.4, 2.1.3 and 2.2.3: "at least two-metres clear space behind the baselines and 1.5 metre clear space from the side-lines", the same for every sanctioned tournament (one figure, so `official` and `least` agree).
|
|
74
|
+
free: { official: { side: 1.5, end: 2 }, least: { side: 1.5, end: 2 } },
|
|
73
75
|
};
|
|
74
76
|
/**
|
|
75
77
|
* USA Pickleball's court, from Section 3 of the 2026 rulebook, in feet as it prints them: 20 by 44 feet to the outside edge of the lines (3.A.1, 3.A.2); the
|
|
@@ -248,7 +250,7 @@ export const VOLLEYBALL_LEAGUES = [
|
|
|
248
250
|
{ id: "wpv-sitting", family: "volleyball", name: { en: "World ParaVolley sitting volleyball court", ja: "ワールドパラバレーのシッティングバレーボールコート" }, unit: "m", dimensions: WPV_SITTING, sources: ["wpv-sitting"] },
|
|
249
251
|
];
|
|
250
252
|
/** The badminton leagues: the BWF's. */
|
|
251
|
-
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 }];
|
|
253
|
+
export const BADMINTON_LEAGUES = [{ id: "bwf", family: "badminton", name: { en: "BWF badminton court", ja: "BWFのバドミントンコート" }, unit: "m", dimensions: BWF_BADMINTON, sources: ["bwf-laws", "bwf-facilities"], builtIn: true }];
|
|
252
254
|
/** The pickleball leagues: USA Pickleball's. */
|
|
253
255
|
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 }];
|
|
254
256
|
/** The table tennis leagues: the ITTF's. */
|
package/dist/leagues/sources.js
CHANGED
|
@@ -57,6 +57,7 @@ export const LEAGUE_SOURCES = Object.freeze(Object.fromEntries([
|
|
|
57
57
|
source({ id: "fivb-volleyball", title: "Official Volleyball Rules 2025-2028, Rules 1 Playing Area and 2 Net and Posts, and Diagram 2", by: "FIVB", edition: "2025-2028 (approved by the 39th FIVB World Congress 2024, in force from 1 January 2025)", url: "https://www.fivb.com/wp-content/uploads/2025/01/FIVB-Volleyball_Rules2025_2028-EN-v05.pdf", read: READ, note: "18 by 9 m inside a free zone of at least 3 m (5 m beside the side lines and 6.5 m behind the end lines for FIVB competitions) (1.1), lines 5 cm wide drawn inside the dimensions (1.3.1, 1.3.2), the axis of the centre line (1.3.3), the attack line's rear edge 3 m from it and, for FIVB competitions, extended by five 15 cm lines 20 cm apart to 1.75 m (1.3.4), the service zone 9 m wide limited by two 15 cm lines 20 cm behind the end line (1.4.2), the net 1 m wide and 9.50 to 10 m long (2.2), 2.43 m (men) and 2.24 m (women) high (2.1.1), side bands over the side lines (2.3), antennae 1.80 m long and 10 mm across at the outer edge of the side bands (2.4), posts 0.50 to 1.00 m outside the side lines, 1 m for FIVB competitions (2.5.1); a set to 25 (6.2), the deciding fifth to 15 (6.3.2)" }),
|
|
58
58
|
source({ id: "fivb-beach", title: "Official Beach Volleyball Rules 2025-2028, Rules 1 Playing Area and 2 Net and Posts, and Diagram 2", by: "FIVB", edition: "2025-2028 (approved by the 39th FIVB World Congress 2024, in force from 1 January 2025)", url: "https://www.fivb.com/wp-content/uploads/2025/02/FIVB-BeachVolleyball_Rules2025_2028-EN-v01.pdf", read: READ, note: "16 by 8 m inside a free zone of at least 3 m, at least 5 m and at most 6 m for FIVB competitions (1.1.1, 1.1.2), lines 5 cm wide placed inside the dimensions, no centre line (1.3.1, 1.3.2), the service zone 8 m wide (1.4.1), the net 8.5 m long and 1 m wide (2.2), 2.43 m and 2.24 m high (2.1.1), side bands and antennae as indoors (2.3, 2.4), posts 0.70 to 1.00 m outside the side lines, 1 m for FIVB competitions (2.5.1); a set to 21 (6.2), the deciding third to 15 (6.3.2)" }),
|
|
59
59
|
source({ id: "bwf-laws", title: "Laws of Badminton, Law 1 Court and Court Equipment and Diagram A, Law 7 Scoring System", by: "Badminton World Federation", edition: "as amended and adopted by the BWF 26 April 2025 (the 2026 amendments take effect on 4 January 2027 and could not be read)", url: "https://worldbadminton.com/laws/rules_2025.htm", read: READ, note: "lines 40 mm wide (1.1), posts 1.55 m on the doubles side lines (1.4, 1.5), net 760 mm deep and at least 6.1 m wide (1.7), 1.524 m at the centre and 1.55 m over the side lines (1.10); Diagram A (https://worldbadminton.com/laws/images/courtDiagram.png): 13 400 by 6 100 mm overall, singles side lines 460 mm inside the doubles side lines (40 + 420), doubles long service lines 760 mm inside the back boundary lines (40 + 720), short service lines 1 980 mm from the net, centre lines from the short service lines to the back boundary lines; a game to 21, at 20-all a two-point lead, at 29-all the 30th point (7.2, 7.4, 7.5), best of three games (7.1)" }),
|
|
60
|
+
source({ id: "bwf-facilities", title: "BWF Statutes, Section 5.3.4 Specifications for International Standard Facilities, 2.1.3, 2.1.4 and 2.2.3 (the space round and between courts)", by: "Badminton World Federation", edition: "in force 14 October 2019, version 1.1", url: "https://www.badmintonpanam.org/wp-content/uploads/2023/01/3.3.4-Specs-for-Int_l-Standard-Facilities-14-October-2019-V1.1.pdf", read: "2026-10-19", note: "at least 2 m clear behind the baselines and 1.5 m from the side lines, and 1.5 m between any two courts marked out side by side; at Grade 1 and Grade 2 tournaments at least 4 m between courts is recommended, for A-boards and the officials' chairs; competition courts are always laid side by side. The copy read is Badminton Panam's, a continental confederation's; the BWF's own current text was not read." }),
|
|
60
61
|
source({ id: "usap-rulebook", title: "USA Pickleball Official Rulebook, Section 3 Court and Equipment (3.A and 3.B)", by: "USA Pickleball", edition: "2026", url: "https://pickleballcanada.org/wp-content/uploads/2026/03/2026-Official-Rulebook-EN.pdf", read: READ, note: "the 2026 rulebook as hosted by Pickleball Canada: 20 by 44 ft to the outside edge of the lines (3.A.1, 3.A.2), a playing surface of at least 30 by 60 ft and the recommended 34 by 64 ft for tournaments (3.A.3), the non-volley zone 7 ft from the net (3.A.4.c), the centerline (3.A.4.d), lines 2 in wide (3.A.4.e), posts 22 ft apart inside to inside and at most 3 in across (3.B.2), net at least 21 ft 9 in long (3.B.3), 36 in at the sidelines and 34 in at the center (3.B.6, 3.B.7); games to 11, 15 or 21 (15.C)" }),
|
|
61
62
|
source({ id: "ittf-laws", title: "Laws of Table Tennis, 2.1 The Table, 2.2 The Net Assembly, 2.11 A Game and 2.12 A Match", by: "International Table Tennis Federation", edition: "2026 statutes, as reproduced by Table Tennis England (issue 1, July 2026)", url: "https://www.tabletennisengland.co.uk/content/uploads/2026/07/Laws-of-Table-Tennis-2026-27.pdf", read: READ, note: "the ITTF Handbook itself was not read: the playing surface 2.74 by 1.525 m and 76 cm above the floor (2.1.1), a white side line and end line 2 cm wide (2.1.4), a white centre line 3 mm wide for doubles (2.1.6), the net 15.25 cm above the playing surface (2.2.3) on posts 15.25 cm high whose outside limits are 15.25 cm outside the side line (2.2.2); a game to 11 (2.11.1), a match the best of an odd number of games (2.12.1)" }),
|
|
62
63
|
// The racket, wall and net sports added after the first five.
|
package/dist/multi.data.js
CHANGED
|
@@ -24,15 +24,6 @@ export const MULTI_SOURCES = Object.freeze(Object.fromEntries([
|
|
|
24
24
|
read: READ,
|
|
25
25
|
note: "(superseded by the 2026 Statutes' chapter 3, which has no 1.5 m for the corners and 50 cm to 100 cm for the surrounds) the playing space at least 14 m by 7 m by 5 m, the four corners may be covered by surrounds of at most 1.5 m (3.2.3.1); each playing area enclosed by surrounds about 75 cm high, of one dark colour, separating it from its neighbours and from the spectators (3.2.3.3); the umpire's table and chair and the score indicators are part of the area (3.2.3.2); up to 6 advertisements on the floor of the area (3.2.5.5). A later edition (the 2024 Statutes) was seen only in a search summary, which says the space may be of any shape within a rectangle of the same size; the 2022 text is the one drawn.",
|
|
26
26
|
}),
|
|
27
|
-
source({
|
|
28
|
-
id: "bwf-facilities",
|
|
29
|
-
title: "BWF Statutes, Section 5.3.4 Specifications for International Standard Facilities, 2.1.3, 2.1.4 and 2.2.3 (the space round and between courts)",
|
|
30
|
-
by: "Badminton World Federation",
|
|
31
|
-
edition: "in force 14 October 2019, version 1.1",
|
|
32
|
-
url: "https://www.badmintonpanam.org/wp-content/uploads/2023/01/3.3.4-Specs-for-Int_l-Standard-Facilities-14-October-2019-V1.1.pdf",
|
|
33
|
-
read: READ,
|
|
34
|
-
note: "at least 2 m clear behind the baselines and 1.5 m from the side lines, and 1.5 m between any two courts marked out side by side; at Grade 1 and Grade 2 tournaments at least 4 m between courts is recommended, for A-boards and the officials' chairs; competition courts are always laid side by side. The copy read is Badminton Panam's, a continental confederation's; the BWF's own current text was not read.",
|
|
35
|
-
}),
|
|
36
27
|
source({
|
|
37
28
|
id: "ppa-host",
|
|
38
29
|
title: "Host a PPA Tour tournament: what the host provides (a minimum of 16 courts, a championship court that seats at least 250)",
|
|
@@ -445,7 +436,8 @@ export const MULTI_PRESETS = Object.freeze([
|
|
|
445
436
|
id: "badminton-1x4",
|
|
446
437
|
name: { en: "Badminton, four courts side by side (1 x 4), the spacing recommended for Grade 1 and 2", ja: "バドミントン 4面を横並び(1×4)、グレード1・2の推奨間隔" },
|
|
447
438
|
sport: "badminton",
|
|
448
|
-
|
|
439
|
+
// The space round a court is the BWF's (2 m behind the baselines, 1.5 m beside the side lines): the bays below are that space and the spacing between courts, so the layout draws the court alone.
|
|
440
|
+
surface: { sport: "badminton", net: { free: "none" } },
|
|
449
441
|
kind: "cells",
|
|
450
442
|
rows: 1,
|
|
451
443
|
columns: 4,
|
|
@@ -466,7 +458,8 @@ export const MULTI_PRESETS = Object.freeze([
|
|
|
466
458
|
id: "badminton-1x4-min",
|
|
467
459
|
name: { en: "Badminton, four courts side by side (1 x 4), the least spacing", ja: "バドミントン 4面を横並び(1×4)、最小の間隔" },
|
|
468
460
|
sport: "badminton",
|
|
469
|
-
|
|
461
|
+
// The space round a court is the BWF's (2 m behind the baselines, 1.5 m beside the side lines): the bays below are that space and the spacing between courts, so the layout draws the court alone.
|
|
462
|
+
surface: { sport: "badminton", net: { free: "none" } },
|
|
470
463
|
kind: "cells",
|
|
471
464
|
rows: 1,
|
|
472
465
|
columns: 4,
|
package/dist/multi.draw.js
CHANGED
|
@@ -27,6 +27,42 @@ function inner(svg) {
|
|
|
27
27
|
body = body.replace(/<rect class="ky-(?:apron|free)(?: [^"]*)?"[^>]*\/>/g, "");
|
|
28
28
|
return { body, style, look };
|
|
29
29
|
}
|
|
30
|
+
/** The invented event of a layout's sample content: the options' own, or the package's (`Kyogijo Open 2026, Osaka`). */
|
|
31
|
+
function sampleOf(o, words) {
|
|
32
|
+
if (o.sample === undefined || o.sample === false)
|
|
33
|
+
return undefined;
|
|
34
|
+
const given = o.sample === true ? {} : o.sample;
|
|
35
|
+
return { event: given.event ?? words.sample.event, year: String(given.year ?? words.sample.year), city: given.city ?? words.sample.city };
|
|
36
|
+
}
|
|
37
|
+
/** The line of a sample event: its name, year and city. */
|
|
38
|
+
const sampleLine = (e) => `${e.event} ${e.year} · ${e.city}`;
|
|
39
|
+
/**
|
|
40
|
+
* A simple emblem of the package's own, in a square of `size` feet centred on (cx, cy): a ring with a star, a diamond or waves, by `kind`. Plain geometry: no real mark, brand, federation or sponsor is drawn, and no one's logo is
|
|
41
|
+
* imitated.
|
|
42
|
+
*/
|
|
43
|
+
function emblem(cx, cy, size, kind) {
|
|
44
|
+
const r = size / 2;
|
|
45
|
+
const ring = el("circle", { class: "ky-mu-emblem", cx: num(cx), cy: num(cy), r: num(r * 0.92) });
|
|
46
|
+
const k = ((kind % 3) + 3) % 3;
|
|
47
|
+
if (k === 0) {
|
|
48
|
+
const pts = Array.from({ length: 10 }, (_, i) => {
|
|
49
|
+
const a = -Math.PI / 2 + (i * Math.PI) / 5;
|
|
50
|
+
const rr = i % 2 === 0 ? r * 0.6 : r * 0.26;
|
|
51
|
+
return `${num(cx + rr * Math.cos(a))} ${num(cy + rr * Math.sin(a))}`;
|
|
52
|
+
});
|
|
53
|
+
return ring + el("path", { class: "ky-mu-emblem-fill", d: `M${pts.join("L")}Z` });
|
|
54
|
+
}
|
|
55
|
+
if (k === 1) {
|
|
56
|
+
const d = r * 0.5;
|
|
57
|
+
return ring + el("path", { class: "ky-mu-emblem-fill", d: `M${num(cx)} ${num(cy - d)}L${num(cx + d)} ${num(cy)}L${num(cx)} ${num(cy + d)}L${num(cx - d)} ${num(cy)}Z` });
|
|
58
|
+
}
|
|
59
|
+
let waves = "";
|
|
60
|
+
for (const dy of [-0.28, 0, 0.28]) {
|
|
61
|
+
const y = cy + r * dy;
|
|
62
|
+
waves += `M${num(cx - r * 0.55)} ${num(y)}Q${num(cx - r * 0.275)} ${num(y - r * 0.2)} ${num(cx)} ${num(y)}T${num(cx + r * 0.55)} ${num(y)}`;
|
|
63
|
+
}
|
|
64
|
+
return ring + el("path", { class: "ky-mu-emblem", d: waves, fill: "none" });
|
|
65
|
+
}
|
|
30
66
|
/** The text of an empty place, sized to fit it. */
|
|
31
67
|
function slotText(slot, words) {
|
|
32
68
|
return slot.kind === "floor-text" ? words.slots.floorText : slot.kind === "floor-logo" ? words.slots.floorLogo : words.slots.board;
|
|
@@ -164,13 +200,21 @@ export function multiDrawing(options, raise, uprights = true) {
|
|
|
164
200
|
}
|
|
165
201
|
let slotsMarkup = "";
|
|
166
202
|
let slotTexts = "";
|
|
203
|
+
const sample = sampleOf(o, words);
|
|
167
204
|
if (withSlots) {
|
|
168
|
-
|
|
205
|
+
layout.slots.forEach((slot, index) => {
|
|
169
206
|
const board = slot.kind === "board";
|
|
170
|
-
|
|
171
|
-
if (board)
|
|
207
|
+
// With sample content a floor's places carry an invented event's words and emblems and are not drawn dashed; the boards keep their dark panels.
|
|
208
|
+
if (sample === undefined || board)
|
|
209
|
+
slotsMarkup += el("rect", { class: board ? "ky-mu-board" : "ky-mu-slot", x: num(slot.x), y: num(slot.y), width: num(slot.w), height: num(slot.h), "data-slot": slot.id });
|
|
210
|
+
if (board && sample === undefined)
|
|
172
211
|
slotsMarkup += el("rect", { class: "ky-mu-slot ky-mu-slot-board", x: num(slot.x + 0.3), y: num(slot.y + 0.3), width: num(slot.w - 0.6), height: num(slot.h - 0.6) });
|
|
173
|
-
|
|
212
|
+
if (sample !== undefined && slot.kind === "floor-logo") {
|
|
213
|
+
const [ex, ey] = to(slot.x + slot.w / 2, slot.y + slot.h / 2);
|
|
214
|
+
slotsMarkup += el("g", { class: "ky-mu-emblems", "data-slot": slot.id }, emblem(ex, ey, Math.min(slot.w, slot.h) * 0.9, index));
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
const text = sample === undefined ? slotText(slot, words) : board ? sampleLine(sample).toUpperCase() : sampleLine(sample);
|
|
174
218
|
const horizontal = slot.w >= slot.h;
|
|
175
219
|
const long = horizontal ? slot.w : slot.h;
|
|
176
220
|
const short = horizontal ? slot.h : slot.w;
|
|
@@ -178,8 +222,9 @@ export function multiDrawing(options, raise, uprights = true) {
|
|
|
178
222
|
const [tx, ty] = to(slot.x + slot.w / 2, slot.y + slot.h / 2);
|
|
179
223
|
// The words of a slot on a long side are laid along it; in a turned layout they turn back to read from the left.
|
|
180
224
|
const rot = (horizontal ? 0 : -90) + 0;
|
|
181
|
-
|
|
182
|
-
|
|
225
|
+
const cls = sample === undefined ? "ky-mu-slot-text" : "ky-mu-sample-text";
|
|
226
|
+
slotTexts += el("text", { class: `${cls}${board ? ` ${cls}-board` : ""}`, x: num(tx), y: num(ty + size * 0.34), "font-size": num(size), transform: rot === 0 ? undefined : `rotate(${rot} ${num(tx)} ${num(ty)})` }, esc(text));
|
|
227
|
+
});
|
|
183
228
|
}
|
|
184
229
|
let labelsMarkup = "";
|
|
185
230
|
if (withLabels) {
|
|
@@ -260,8 +305,10 @@ export function multiDrawing(options, raise, uprights = true) {
|
|
|
260
305
|
sentences.push(fill(words.say.stagger, { share: `${Math.round(spec.stagger * 100)}%` }));
|
|
261
306
|
if (layout.shared !== undefined)
|
|
262
307
|
sentences.push(words.say.shared);
|
|
263
|
-
if (withSlots && layout.slots.some((s) => s.kind !== "board"))
|
|
264
|
-
|
|
308
|
+
if (withSlots && layout.slots.some((s) => s.kind !== "board")) {
|
|
309
|
+
const filled = sampleOf(o, words);
|
|
310
|
+
sentences.push(filled === undefined ? fill(words.say.slots, { n: layout.slots.filter((s) => s.kind !== "board").length }) : fill(words.say.sample, filled));
|
|
311
|
+
}
|
|
265
312
|
if (spec.event !== undefined) {
|
|
266
313
|
const named = language === "ja" ? spec.event.ja : undefined;
|
|
267
314
|
sentences.push(fill(words.say.event, { event: named?.name ?? spec.event.name, year: spec.event.year, venue: named?.venue ?? spec.event.venue, city: named?.city ?? spec.event.city }));
|
package/dist/multi.style.js
CHANGED
|
@@ -40,6 +40,10 @@ ${Object.keys(FLOORS).map((name) => `.kyogijo .ky-mu-hf-${name}{fill:var(--ky-mu
|
|
|
40
40
|
.kyogijo .ky-mu-slot-board{stroke:var(--ky-mu-board-ink)}
|
|
41
41
|
.kyogijo .ky-mu-slot-text{fill:var(--ky-mu-slot);fill-opacity:.8;font-family:var(--ky-font);font-weight:700;text-anchor:middle}
|
|
42
42
|
.kyogijo .ky-mu-slot-text-board{fill:var(--ky-mu-board-ink)}
|
|
43
|
+
.kyogijo .ky-mu-sample-text{fill:var(--ky-mu-slot);font-family:var(--ky-font);font-weight:700;text-anchor:middle}
|
|
44
|
+
.kyogijo .ky-mu-sample-text-board{fill:var(--ky-mu-board-ink)}
|
|
45
|
+
.kyogijo .ky-mu-emblem{fill:none;stroke:var(--ky-mu-slot);stroke-width:.35;stroke-linejoin:round;stroke-linecap:round}
|
|
46
|
+
.kyogijo .ky-mu-emblem-fill{fill:var(--ky-mu-slot);stroke:none}
|
|
43
47
|
.kyogijo .ky-mu-label{fill:var(--ky-ink);font-family:var(--ky-font);font-weight:800;paint-order:stroke;stroke:var(--ky-halo);stroke-width:.5;stroke-linejoin:round}
|
|
44
48
|
.kyogijo .ky-mu-caption{fill:var(--ky-mu-sb-ink);font-family:var(--ky-font);font-weight:700;text-anchor:middle}
|
|
45
49
|
.kyogijo.ky-multi{--ky-cr-home:#8b94a3;--ky-cr-away:#8b94a3}
|
package/dist/multi.types.d.ts
CHANGED
|
@@ -37,6 +37,12 @@ export interface MultiEvent {
|
|
|
37
37
|
/** Keys of `MULTI_SOURCES`. */
|
|
38
38
|
sources: readonly string[];
|
|
39
39
|
}
|
|
40
|
+
/** The words of a sample event: any part left out is the package's own. */
|
|
41
|
+
export interface MultiSample {
|
|
42
|
+
event?: string;
|
|
43
|
+
year?: string | number;
|
|
44
|
+
city?: string;
|
|
45
|
+
}
|
|
40
46
|
/** What stands on or beside each playing surface, and over the floor. */
|
|
41
47
|
export interface MultiParts {
|
|
42
48
|
/** The barriers (surrounds) that enclose each playing area, drawn round the area's bay. */
|
|
@@ -244,6 +250,12 @@ export interface MultiOptions {
|
|
|
244
250
|
};
|
|
245
251
|
/** The empty places for the event's words and marks, and the boards: on by default; `false` draws neither. */
|
|
246
252
|
slots?: boolean;
|
|
253
|
+
/**
|
|
254
|
+
* Fill the places for the event's words and marks with sample content, to show a layout as an event would dress it: an invented event name, year and city on the floor and the boards, and simple emblems of the package's own
|
|
255
|
+
* (a ring with a star, a diamond or waves) in the logo places, in place of the dashed empty places. `true` for "Kyogijo Open 2026, Osaka" (in Japanese, 競技場杯 2026, 大阪), or the event's name, year and city of
|
|
256
|
+
* your own. It names no real event, brand, federation or sponsor. Off by default: the places are drawn empty, as a layout is configured.
|
|
257
|
+
*/
|
|
258
|
+
sample?: boolean | MultiSample;
|
|
247
259
|
/** The names of the surfaces over them. On by default. */
|
|
248
260
|
labels?: boolean;
|
|
249
261
|
language?: "en" | "ja";
|
package/dist/multi.words.d.ts
CHANGED
|
@@ -21,6 +21,12 @@ export interface MultiWords {
|
|
|
21
21
|
floorLogo: string;
|
|
22
22
|
board: string;
|
|
23
23
|
};
|
|
24
|
+
/** The invented event of the sample content (`sample: true`): its name, its year and its city. */
|
|
25
|
+
sample: {
|
|
26
|
+
event: string;
|
|
27
|
+
year: string;
|
|
28
|
+
city: string;
|
|
29
|
+
};
|
|
24
30
|
/** The sentences of the title and the description. */
|
|
25
31
|
say: {
|
|
26
32
|
title: string;
|
|
@@ -29,6 +35,7 @@ export interface MultiWords {
|
|
|
29
35
|
stagger: string;
|
|
30
36
|
shared: string;
|
|
31
37
|
slots: string;
|
|
38
|
+
sample: string;
|
|
32
39
|
venue: string;
|
|
33
40
|
stadium: string;
|
|
34
41
|
event: string;
|
package/dist/multi.words.js
CHANGED
|
@@ -3,6 +3,7 @@ export const MULTI_WORDS = {
|
|
|
3
3
|
names: { table: "Table {n}", court: "Court {n}", sheet: "Sheet {n}", area: "Area {n}" },
|
|
4
4
|
parts: { chair: "Umpire's chair", table: "Score table", scoreboard: "Scoreboard", shared: "One scoreboard for all, hung over the middle", barrier: "Barrier", board: "Board", floor: "Floor", hall: "Hall floor", stands: "Stands" },
|
|
5
5
|
slots: { floorText: "Event name, year and city", floorLogo: "Logo", board: "Board" },
|
|
6
|
+
sample: { event: "Kyogijo Open", year: "2026", city: "Osaka" },
|
|
6
7
|
say: {
|
|
7
8
|
title: "{name}",
|
|
8
9
|
drawn: "Drawn as: {name}, {surfaces} playing surfaces to scale on one floor of {length} by {width} metres ({area} square metres).",
|
|
@@ -10,6 +11,7 @@ export const MULTI_WORDS = {
|
|
|
10
11
|
stagger: "Every other row is moved along by {share} of a bay.",
|
|
11
12
|
shared: "One scoreboard for all is hung over the middle of the floor.",
|
|
12
13
|
slots: "The empty places for the event's own words and marks are drawn dashed: {n}.",
|
|
14
|
+
sample: "The places for the event's words and marks carry sample content: an invented event, {event}, {year}, {city}, and simple emblems. Nothing real is printed.",
|
|
13
15
|
venue: "Set in {venue}: {fit}",
|
|
14
16
|
stadium: "Drawn inside a stadium to the same scale: walls, stands and crowd.",
|
|
15
17
|
event: "Tied to {event}, {year}, {venue}, {city}.",
|
|
@@ -31,6 +33,7 @@ export const MULTI_WORDS = {
|
|
|
31
33
|
names: { table: "第{n}台", court: "第{n}コート", sheet: "第{n}シート", area: "第{n}試合場" },
|
|
32
34
|
parts: { chair: "審判席", table: "記録台", scoreboard: "スコアボード", shared: "中央の真上に吊るした全面共用のスコアボード", barrier: "フェンス", board: "ボード", floor: "床", hall: "会場の床", stands: "スタンド" },
|
|
33
35
|
slots: { floorText: "大会名・年・開催地", floorLogo: "ロゴ", board: "ボード" },
|
|
36
|
+
sample: { event: "競技場杯", year: "2026", city: "大阪" },
|
|
34
37
|
say: {
|
|
35
38
|
title: "{name}",
|
|
36
39
|
drawn: "{name}。競技面を{surfaces}面、横{length}m×縦{width}m({area}平方メートル)の床1枚の上に縮尺どおりに描いています。",
|
|
@@ -38,6 +41,7 @@ export const MULTI_WORDS = {
|
|
|
38
41
|
stagger: "1行おきに、1区画の{share}だけずらしています。",
|
|
39
42
|
shared: "床の中央の上に、全面共用のスコアボードを1台吊るしています。",
|
|
40
43
|
slots: "大会の文字やマークを入れる空き枠を破線で描いています:{n}か所。",
|
|
44
|
+
sample: "大会名やマークを入れる枠には、見本として架空の大会「{event}」({year}年・{city})と簡単なエンブレムを入れています。実在の大会や団体のものは含まれていません。",
|
|
41
45
|
venue: "{venue}に置いた場合:{fit}",
|
|
42
46
|
stadium: "同じ縮尺で、壁・スタンド・観客を備えたスタジアムの中に描いています。",
|
|
43
47
|
event: "関連する大会:{event}({year}年、{venue}、{city})。",
|
package/dist/types.d.ts
CHANGED
|
@@ -406,7 +406,7 @@ export interface NetStyle {
|
|
|
406
406
|
look?: string;
|
|
407
407
|
/**
|
|
408
408
|
* The free zone drawn round the court: `official` (the default: the figure a rulebook gives for its own competitions, where it gives one), `least` (the least it allows
|
|
409
|
-
* or recommends) or `none`. Tennis (Appendix X), volleyball, beach volleyball and sitting volleyball (Rule 1.1), pickleball (Rule 3.A.3), sepak takraw (Law 1.5), netball (Rule 1, item 8)
|
|
409
|
+
* or recommends) or `none`. Tennis (Appendix X), volleyball, beach volleyball and sitting volleyball (Rule 1.1), pickleball (Rule 3.A.3), sepak takraw (Law 1.5), netball (Rule 1, item 8) table tennis (the ITTF's 3.2.3.1, the playing space) and badminton (the BWF's facilities specification, 5.3.4: 2 m behind the baselines and 1.5 m beside the side lines) give figures; padel, squash, racquetball, teqball and roundnet do not.
|
|
410
410
|
*/
|
|
411
411
|
free?: "official" | "least" | "none";
|
|
412
412
|
/**
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** The package's version: the same as package.json's, and a test holds them to each other. */
|
|
2
|
-
export declare const VERSION = "0.
|
|
2
|
+
export declare const VERSION = "0.16.1";
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** The package's version: the same as package.json's, and a test holds them to each other. */
|
|
2
|
-
export const VERSION = "0.
|
|
2
|
+
export const VERSION = "0.16.1";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@johnmorrisdotca/kyogijo-stadiums",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.1",
|
|
4
4
|
"description": "Kyogijo Stadiums 競技場, 39 sports' surfaces as SVG, drawn to scale from the rulebooks: NFL, CFL and IFAF football fields, an NHL rink, an NBA court, MLB ballparks, soccer pitches, curling sheets, athletics stadiums, speed skating, short track and figure skating rinks, swimming pools, water polo fields, diving wells, artistic swimming areas, and the courts and fields of tennis, volleyball (indoor, beach and sitting), badminton, pickleball, table tennis, padel, squash, racquetball, sepak takraw, teqball, roundnet, netball, lacrosse, rugby, Australian football, Gaelic games, cricket, field hockey and handball, and the budo of judo, karate, kendo, sumo and kyudo with a dojo of tatami laid as real units, with each team's name and logo on its side and the score in the middle, stands and a crowd, a pageant of flags, and a 3D view. Light and dark, accessible, a compact badge for lists, a helper for React and a custom element. Zero dependencies.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sports",
|